[
  {
    "path": ".gitattributes",
    "content": "/Library/* linguist-vendored=true\n/PacketProcessor/tun2socks-iOS/* linguist-vendored=true\n/Carthage/* linguist-vendored=true\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\n# C extensions\n*.so\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n.idea/\n\n\n# iOS\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n*.xcuserstate\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n#\nPods/\n\n# Carthage\nCarthage/Build\n\nGemfile.lock\n\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"Library/ShadowPath/ShadowPath/libmaxminddb\"]\n\tpath = Library/ShadowPath/ShadowPath/libmaxminddb\n\turl = git@github.com:liruqi/libmaxminddb.git\n"
  },
  {
    "path": "Cartfile",
    "content": "github \"mirek/YAML.framework\" \"master\""
  },
  {
    "path": "Cartfile.resolved",
    "content": "github \"mirek/YAML.framework\" \"c099c4b9756d116f5fb08bc588d49a43a6c6176c\"\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/.gitignore",
    "content": ".DS_Store\nbuild\n*.mode1v3\n*.pbxuser\nxcuserdata\ntest/yaml/bigboy.yaml"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/English.lproj/InfoPlist.strings",
    "content": "﻿/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/Readme.md",
    "content": "# YAML.framework for Objective-C\n\nBased on C `LibYAML` library (`http://pyyaml.org/wiki/LibYAML`) by Kirill Simonov.\n\n`YAML.framework` provides support for YAML (de/)serialisation similarly to standard `NSPropertyListSerialization`.\n\nIt's fast and compatible with iOS.\n\n## Example usage\n\n```objc\nNSInputStream *stream = [[NSInputStream alloc] initWithFileAtPath: @\"yaml/items.yaml\"];\n// or [[NSInputStream alloc] initWithURL: ...]\n\n// You can use objectsWithYAMLStream:options:error instead to get all YAML documents.\n//\n// Alternativelly object(s)WithYAMLData:options:error or object(s)WithYAMLString:options:error.\nid yaml = [YAMLSerialization objectWithYAMLStream: stream\n                                          options: kYAMLReadOptionStringScalars\n                                            error: nil];\n\n// Dump Objective-C object description.\nprintf(\"%s\", [[yaml description] UTF8String]);\n```\n\nFor input YAML file:\n\n```yaml\nitems:\n  - name: Foo\n  - name: Bar\n```\n\nShould print dump string similar to:\n\n``` \n(\n  {\n    items = (\n      {\n        name = Foo;\n      },\n      {\n        name = Bar;\n      }\n    );\n  }\n)\n```\n\n## API\n\nThe following class methods are defined on `YAMLSerialization` class. \n\n### Reading YAML\n\n```objc\n// Returns all document objects from parsed YAML stream.\n+ (NSMutableArray *) objectsWithYAMLStream: (NSInputStream *) stream\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error;\n\n// Returns all document objects from parsed YAML data.\n+ (NSMutableArray *) objectsWithYAMLData: (NSData *) data\n                                 options: (YAMLReadOptions) opt\n                                   error: (NSError **) error;\n\n// Returns all document objects from parsed YAML string.\n+ (NSMutableArray *) objectsWithYAMLString: (NSString *) string\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error;\n\n// Returns first object from parsed YAML stream.\n+ (id) objectWithYAMLStream: (NSInputStream *) stream\n                    options: (YAMLReadOptions) opt\n                      error: (NSError **) error;\n\n// Returns first object from parsed YAML data.\n+ (id) objectWithYAMLData: (NSData *) data\n                  options: (YAMLReadOptions) opt\n                    error: (NSError **) error;\n\n// Returns first object from parsed YAML string.\n+ (id) objectWithYAMLString: (NSString *) string\n                    options: (YAMLReadOptions) opt\n                      error: (NSError **) error;\n```\n\n### Writing YAML\n\n```objc\n// Returns YES on success, NO otherwise.\n+ (BOOL) writeObject: (id) object\n        toYAMLStream: (NSOutputStream *) stream\n             options: (YAMLWriteOptions) opt\n               error: (NSError **) error;\n\n// Caller is responsible for releasing returned object.\n+ (NSData *) createYAMLDataWithObject: (id) object\n                              options: (YAMLWriteOptions) opt\n                                error: (NSError **) error NS_RETURNS_RETAINED;\n\n// Returns autoreleased object.\n+ (NSData *) YAMLDataWithObject: (id) object\n                        options: (YAMLWriteOptions) opt\n                          error: (NSError **) error;\n\n// Caller is responsible for releasing returned object.\n+ (NSString *) createYAMLStringWithObject: (id) object\n                                  options: (YAMLWriteOptions) opt\n                                    error: (NSError **) error NS_RETURNS_RETAINED;\n\n// Returns autoreleased object.\n+ (NSString *) YAMLStringWithObject: (id) object\n                            options: (YAMLWriteOptions) opt\n                              error: (NSError **) error;\n```\n\n## License\n\n`YAML.framework` is released under the MIT license.\n\n    Copyright (c) 2010 Mirek Rusin (YAML.framework)\n                  2006 Kirill Simonov (LibYAML)\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy of\n    this software and associated documentation files (the \"Software\"), to deal in\n    the Software without restriction, including without limitation the rights to\n    use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n    of the Software, and to permit persons to whom the Software is furnished to do\n    so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    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    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE.\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML iOS-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>English</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };\n\t\tB6A4325D1C2708F7007FB63C /* YAML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* YAML.framework */; };\n\t\tB6A432661C270973007FB63C /* YAMLUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D319EEB613E5EE2A000EB46D /* YAMLUnitTests.m */; };\n\t\tB6A432671C2709D5007FB63C /* basic.yaml in Resources */ = {isa = PBXBuildFile; fileRef = D3E92E6313E5F68C00BA5B63 /* basic.yaml */; };\n\t\tB6A432681C270B3E007FB63C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };\n\t\tB6A432A91C27CE60007FB63C /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF83D8A124D7A3E008517E5 /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n\t\tB6A432AA1C27CE7B007FB63C /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB114B795E200BCDC1A /* api.c */; };\n\t\tB6A432AB1C27CE7B007FB63C /* dumper.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB214B795E200BCDC1A /* dumper.c */; };\n\t\tB6A432AC1C27CE7B007FB63C /* emitter.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB314B795E200BCDC1A /* emitter.c */; };\n\t\tB6A432AD1C27CE7B007FB63C /* loader.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB414B795E200BCDC1A /* loader.c */; };\n\t\tB6A432AE1C27CE7B007FB63C /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB514B795E200BCDC1A /* parser.c */; };\n\t\tB6A432AF1C27CE7B007FB63C /* reader.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB614B795E200BCDC1A /* reader.c */; };\n\t\tB6A432B01C27CE7B007FB63C /* scanner.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB714B795E200BCDC1A /* scanner.c */; };\n\t\tB6A432B11C27CE7B007FB63C /* writer.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB814B795E200BCDC1A /* writer.c */; };\n\t\tB6A432B21C27CE8F007FB63C /* YAMLSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF83D89124D7A3E008517E5 /* YAMLSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB6A432B31C27CEB0007FB63C /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AC314B7964500BCDC1A /* config.h */; };\n\t\tB6A432B41C27CEB0007FB63C /* yaml_private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AB914B795E200BCDC1A /* yaml_private.h */; };\n\t\tB6A432B51C27CEB0007FB63C /* yaml.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AAF14B795CC00BCDC1A /* yaml.h */; };\n\t\tB6A432B61C27CEC7007FB63C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };\n\t\tB6A432B81C27CEEC007FB63C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6A432B71C27CEEC007FB63C /* Foundation.framework */; };\n\t\tEB2B592E124E2117001FFEEB /* events.c in Sources */ = {isa = PBXBuildFile; fileRef = EB2B592D124E2117001FFEEB /* events.c */; };\n\t\tEB2B5952124E230A001FFEEB /* yaml in Copy YAML Files */ = {isa = PBXBuildFile; fileRef = EB6C424F124D9B3E00886AD1 /* yaml */; };\n\t\tEB6C4214124D99D000886AD1 /* YAML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* YAML.framework */; };\n\t\tEB6C4252124D9B4A00886AD1 /* yaml in Copy YAML Files */ = {isa = PBXBuildFile; fileRef = EB6C424F124D9B3E00886AD1 /* yaml */; };\n\t\tEB6C433C124E0CF600886AD1 /* test.m in Sources */ = {isa = PBXBuildFile; fileRef = EB6C4226124D9A1700886AD1 /* test.m */; };\n\t\tEB8C1AB014B795CC00BCDC1A /* yaml.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AAF14B795CC00BCDC1A /* yaml.h */; };\n\t\tEB8C1ABA14B795E200BCDC1A /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB114B795E200BCDC1A /* api.c */; };\n\t\tEB8C1ABB14B795E200BCDC1A /* dumper.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB214B795E200BCDC1A /* dumper.c */; };\n\t\tEB8C1ABC14B795E200BCDC1A /* emitter.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB314B795E200BCDC1A /* emitter.c */; };\n\t\tEB8C1ABD14B795E200BCDC1A /* loader.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB414B795E200BCDC1A /* loader.c */; };\n\t\tEB8C1ABE14B795E200BCDC1A /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB514B795E200BCDC1A /* parser.c */; };\n\t\tEB8C1ABF14B795E200BCDC1A /* reader.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB614B795E200BCDC1A /* reader.c */; };\n\t\tEB8C1AC014B795E200BCDC1A /* scanner.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB714B795E200BCDC1A /* scanner.c */; };\n\t\tEB8C1AC114B795E200BCDC1A /* writer.c in Sources */ = {isa = PBXBuildFile; fileRef = EB8C1AB814B795E200BCDC1A /* writer.c */; };\n\t\tEB8C1AC214B795E200BCDC1A /* yaml_private.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AB914B795E200BCDC1A /* yaml_private.h */; };\n\t\tEB8C1AC414B7964500BCDC1A /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8C1AC314B7964500BCDC1A /* config.h */; };\n\t\tEBE745BB124F8C0D00618049 /* YAML.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* YAML.framework */; };\n\t\tEBE745BD124F8C0D00618049 /* yaml in Copy YAML Files */ = {isa = PBXBuildFile; fileRef = EB6C424F124D9B3E00886AD1 /* yaml */; };\n\t\tEBE745C7124F8C2F00618049 /* spec12examples.m in Sources */ = {isa = PBXBuildFile; fileRef = EBE745AF124F8B5000618049 /* spec12examples.m */; };\n\t\tEBF83D8B124D7A3E008517E5 /* YAMLSerialization.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF83D89124D7A3E008517E5 /* YAMLSerialization.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tEBF83D8C124D7A3E008517E5 /* YAMLSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF83D8A124D7A3E008517E5 /* YAMLSerialization.m */; settings = {COMPILER_FLAGS = \"-fno-objc-arc\"; }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tB6A4325E1C2708F7007FB63C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0867D690FE84028FC02AAC07 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DC2EF4F0486A6940098B216;\n\t\t\tremoteInfo = YAML;\n\t\t};\n\t\tB6A432631C270944007FB63C /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0867D690FE84028FC02AAC07 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DC2EF4F0486A6940098B216;\n\t\t\tremoteInfo = YAML;\n\t\t};\n\t\tEB6C4212124D99CB00886AD1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0867D690FE84028FC02AAC07 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DC2EF4F0486A6940098B216;\n\t\t\tremoteInfo = YAML;\n\t\t};\n\t\tEBE745B6124F8C0D00618049 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 0867D690FE84028FC02AAC07 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 8DC2EF4F0486A6940098B216;\n\t\t\tremoteInfo = YAML;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tEB2B5960124E230D001FFEEB /* Copy YAML Files */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tEB2B5952124E230A001FFEEB /* yaml in Copy YAML Files */,\n\t\t\t);\n\t\t\tname = \"Copy YAML Files\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB6C424E124D9B0300886AD1 /* Copy YAML Files */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tEB6C4252124D9B4A00886AD1 /* yaml in Copy YAML Files */,\n\t\t\t);\n\t\t\tname = \"Copy YAML Files\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEBE745BC124F8C0D00618049 /* Copy YAML Files */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 16;\n\t\t\tfiles = (\n\t\t\t\tEBE745BD124F8C0D00618049 /* yaml in Copy YAML Files */,\n\t\t\t);\n\t\t\tname = \"Copy YAML Files\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t089C1667FE841158C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t32DBCF5E0370ADEE00C91783 /* YAML_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAML_Prefix.pch; sourceTree = \"<group>\"; };\n\t\t8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t8DC2EF5B0486A6940098B216 /* YAML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = YAML.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB6A432581C2708F7007FB63C /* YAMLUnitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = YAMLUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB6A4329A1C27C97B007FB63C /* YAML iOS-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = \"YAML iOS-Info.plist\"; path = \"/Users/dweston/src/YAML.framework/YAML iOS-Info.plist\"; sourceTree = \"<absolute>\"; };\n\t\tB6A432A11C27CE40007FB63C /* YAML.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = YAML.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB6A432A31C27CE40007FB63C /* YAML iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"YAML iOS.h\"; sourceTree = \"<group>\"; };\n\t\tB6A432A51C27CE40007FB63C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tB6A432B71C27CEEC007FB63C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; };\n\t\tB6A432C31C29123F007FB63C /* module.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = \"sourcecode.module-map\"; path = module.modulemap; sourceTree = \"<group>\"; };\n\t\tD319EEA913E5EE2A000EB46D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; };\n\t\tD319EEAC13E5EE2A000EB46D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };\n\t\tD319EEAD13E5EE2A000EB46D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };\n\t\tD319EEAE13E5EE2A000EB46D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\tD319EEB113E5EE2A000EB46D /* YAMLUnitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"YAMLUnitTests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\tD319EEB313E5EE2A000EB46D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\tD319EEB513E5EE2A000EB46D /* YAMLUnitTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YAMLUnitTests.h; sourceTree = \"<group>\"; };\n\t\tD319EEB613E5EE2A000EB46D /* YAMLUnitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YAMLUnitTests.m; sourceTree = \"<group>\"; };\n\t\tD319EEB813E5EE2A000EB46D /* YAMLUnitTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"YAMLUnitTests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\tD3E92E6313E5F68C00BA5B63 /* basic.yaml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = basic.yaml; path = test/yaml/basic.yaml; sourceTree = SOURCE_ROOT; };\n\t\tEB2B5928124E2100001FFEEB /* events */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = events; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEB2B592D124E2117001FFEEB /* events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = events.c; sourceTree = \"<group>\"; };\n\t\tEB6C420E124D99BE00886AD1 /* test */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = test; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEB6C4226124D9A1700886AD1 /* test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = test.m; sourceTree = \"<group>\"; };\n\t\tEB6C424F124D9B3E00886AD1 /* yaml */ = {isa = PBXFileReference; lastKnownFileType = folder; path = yaml; sourceTree = \"<group>\"; };\n\t\tEB8C1AAF14B795CC00BCDC1A /* yaml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = yaml.h; path = \"yaml-0.1.4/include/yaml.h\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB114B795E200BCDC1A /* api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = api.c; path = \"yaml-0.1.4/src/api.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB214B795E200BCDC1A /* dumper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dumper.c; path = \"yaml-0.1.4/src/dumper.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB314B795E200BCDC1A /* emitter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = emitter.c; path = \"yaml-0.1.4/src/emitter.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB414B795E200BCDC1A /* loader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loader.c; path = \"yaml-0.1.4/src/loader.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB514B795E200BCDC1A /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parser.c; path = \"yaml-0.1.4/src/parser.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB614B795E200BCDC1A /* reader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = reader.c; path = \"yaml-0.1.4/src/reader.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB714B795E200BCDC1A /* scanner.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = scanner.c; path = \"yaml-0.1.4/src/scanner.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB814B795E200BCDC1A /* writer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = writer.c; path = \"yaml-0.1.4/src/writer.c\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AB914B795E200BCDC1A /* yaml_private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = yaml_private.h; path = \"yaml-0.1.4/src/yaml_private.h\"; sourceTree = \"<group>\"; };\n\t\tEB8C1AC314B7964500BCDC1A /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = \"yaml-0.1.4/config.h\"; sourceTree = \"<group>\"; };\n\t\tEBE745AF124F8B5000618049 /* spec12examples.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = spec12examples.m; sourceTree = \"<group>\"; };\n\t\tEBE745C1124F8C0D00618049 /* test */ = {isa = PBXFileReference; explicitFileType = \"compiled.mach-o.executable\"; includeInIndex = 0; path = test; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tEBF83D89124D7A3E008517E5 /* YAMLSerialization.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YAMLSerialization.h; sourceTree = \"<group>\"; };\n\t\tEBF83D8A124D7A3E008517E5 /* YAMLSerialization.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YAMLSerialization.m; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t8DC2EF560486A6940098B216 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A432551C2708F7007FB63C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A4325D1C2708F7007FB63C /* YAML.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A4329D1C27CE40007FB63C /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432B81C27CEEC007FB63C /* Foundation.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB2B5926124E2100001FFEEB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB6C420C124D99BE00886AD1 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEB6C4214124D99D000886AD1 /* YAML.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEBE745B9124F8C0D00618049 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEBE745BB124F8C0D00618049 /* YAML.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t034768DFFF38A50411DB9C8B /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t8DC2EF5B0486A6940098B216 /* YAML.framework */,\n\t\t\t\tEB6C420E124D99BE00886AD1 /* test */,\n\t\t\t\tEB2B5928124E2100001FFEEB /* events */,\n\t\t\t\tEBE745C1124F8C0D00618049 /* test */,\n\t\t\t\tB6A432581C2708F7007FB63C /* YAMLUnitTests.xctest */,\n\t\t\t\tB6A432A11C27CE40007FB63C /* YAML.framework */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0867D691FE84028FC02AAC07 /* YAML */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEB6C4222124D9A0200886AD1 /* test */,\n\t\t\t\tEB8C1AAE14B794F000BCDC1A /* yaml-0.1.4 */,\n\t\t\t\t08FB77AEFE84172EC02AAC07 /* Classes */,\n\t\t\t\t32C88DFF0371C24200C91783 /* Other Sources */,\n\t\t\t\t089C1665FE841158C02AAC07 /* Resources */,\n\t\t\t\tD319EEAF13E5EE2A000EB46D /* YAMLUnitTests */,\n\t\t\t\tB6A432A21C27CE40007FB63C /* YAML iOS */,\n\t\t\t\t0867D69AFE84028FC02AAC07 /* Frameworks */,\n\t\t\t\t034768DFFF38A50411DB9C8B /* Products */,\n\t\t\t);\n\t\t\tname = YAML;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t0867D69AFE84028FC02AAC07 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB6A432B71C27CEEC007FB63C /* Foundation.framework */,\n\t\t\t\tD319EEA913E5EE2A000EB46D /* Cocoa.framework */,\n\t\t\t\tD319EEAB13E5EE2A000EB46D /* Other Frameworks */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t089C1665FE841158C02AAC07 /* Resources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB6A4329A1C27C97B007FB63C /* YAML iOS-Info.plist */,\n\t\t\t\t8DC2EF5A0486A6940098B216 /* Info.plist */,\n\t\t\t\t089C1666FE841158C02AAC07 /* InfoPlist.strings */,\n\t\t\t);\n\t\t\tname = Resources;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t08FB77AEFE84172EC02AAC07 /* Classes */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEBF83D89124D7A3E008517E5 /* YAMLSerialization.h */,\n\t\t\t\tEBF83D8A124D7A3E008517E5 /* YAMLSerialization.m */,\n\t\t\t);\n\t\t\tname = Classes;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t32C88DFF0371C24200C91783 /* Other Sources */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB6A432C31C29123F007FB63C /* module.modulemap */,\n\t\t\t\t32DBCF5E0370ADEE00C91783 /* YAML_Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Other Sources\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB6A432A21C27CE40007FB63C /* YAML iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB6A432A31C27CE40007FB63C /* YAML iOS.h */,\n\t\t\t\tB6A432A51C27CE40007FB63C /* Info.plist */,\n\t\t\t);\n\t\t\tpath = \"YAML iOS\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD319EEAB13E5EE2A000EB46D /* Other Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD319EEAC13E5EE2A000EB46D /* AppKit.framework */,\n\t\t\t\tD319EEAD13E5EE2A000EB46D /* CoreData.framework */,\n\t\t\t\tD319EEAE13E5EE2A000EB46D /* Foundation.framework */,\n\t\t\t);\n\t\t\tname = \"Other Frameworks\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD319EEAF13E5EE2A000EB46D /* YAMLUnitTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD3E92E6313E5F68C00BA5B63 /* basic.yaml */,\n\t\t\t\tD319EEB513E5EE2A000EB46D /* YAMLUnitTests.h */,\n\t\t\t\tD319EEB613E5EE2A000EB46D /* YAMLUnitTests.m */,\n\t\t\t\tD319EEB013E5EE2A000EB46D /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = YAMLUnitTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD319EEB013E5EE2A000EB46D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD319EEB113E5EE2A000EB46D /* YAMLUnitTests-Info.plist */,\n\t\t\t\tD319EEB213E5EE2A000EB46D /* InfoPlist.strings */,\n\t\t\t\tD319EEB813E5EE2A000EB46D /* YAMLUnitTests-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEB6C4222124D9A0200886AD1 /* test */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEBE745AF124F8B5000618049 /* spec12examples.m */,\n\t\t\t\tEB6C424F124D9B3E00886AD1 /* yaml */,\n\t\t\t\tEB6C4226124D9A1700886AD1 /* test.m */,\n\t\t\t\tEB2B592D124E2117001FFEEB /* events.c */,\n\t\t\t);\n\t\t\tpath = test;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tEB8C1AAE14B794F000BCDC1A /* yaml-0.1.4 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tEB8C1AC314B7964500BCDC1A /* config.h */,\n\t\t\t\tEB8C1AB114B795E200BCDC1A /* api.c */,\n\t\t\t\tEB8C1AB214B795E200BCDC1A /* dumper.c */,\n\t\t\t\tEB8C1AB314B795E200BCDC1A /* emitter.c */,\n\t\t\t\tEB8C1AB414B795E200BCDC1A /* loader.c */,\n\t\t\t\tEB8C1AB514B795E200BCDC1A /* parser.c */,\n\t\t\t\tEB8C1AB614B795E200BCDC1A /* reader.c */,\n\t\t\t\tEB8C1AB714B795E200BCDC1A /* scanner.c */,\n\t\t\t\tEB8C1AB814B795E200BCDC1A /* writer.c */,\n\t\t\t\tEB8C1AB914B795E200BCDC1A /* yaml_private.h */,\n\t\t\t\tEB8C1AAF14B795CC00BCDC1A /* yaml.h */,\n\t\t\t);\n\t\t\tname = \"yaml-0.1.4\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t8DC2EF500486A6940098B216 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEBF83D8B124D7A3E008517E5 /* YAMLSerialization.h in Headers */,\n\t\t\t\tEB8C1AB014B795CC00BCDC1A /* yaml.h in Headers */,\n\t\t\t\tEB8C1AC214B795E200BCDC1A /* yaml_private.h in Headers */,\n\t\t\t\tEB8C1AC414B7964500BCDC1A /* config.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A4329E1C27CE40007FB63C /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432B21C27CE8F007FB63C /* YAMLSerialization.h in Headers */,\n\t\t\t\tB6A432B51C27CEB0007FB63C /* yaml.h in Headers */,\n\t\t\t\tB6A432B31C27CEB0007FB63C /* config.h in Headers */,\n\t\t\t\tB6A432B41C27CEB0007FB63C /* yaml_private.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t8DC2EF4F0486A6940098B216 /* YAML */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget \"YAML\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t8DC2EF500486A6940098B216 /* Headers */,\n\t\t\t\t8DC2EF520486A6940098B216 /* Resources */,\n\t\t\t\t8DC2EF540486A6940098B216 /* Sources */,\n\t\t\t\t8DC2EF560486A6940098B216 /* Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = YAML;\n\t\t\tproductInstallPath = \"$(HOME)/Library/Frameworks\";\n\t\t\tproductName = YAML;\n\t\t\tproductReference = 8DC2EF5B0486A6940098B216 /* YAML.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tB6A432571C2708F7007FB63C /* YAMLUnitTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B6A432601C2708F7007FB63C /* Build configuration list for PBXNativeTarget \"YAMLUnitTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB6A432541C2708F7007FB63C /* Sources */,\n\t\t\t\tB6A432551C2708F7007FB63C /* Frameworks */,\n\t\t\t\tB6A432561C2708F7007FB63C /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tB6A4325F1C2708F7007FB63C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = YAMLUnitTests;\n\t\t\tproductName = YAMLUnitTests;\n\t\t\tproductReference = B6A432581C2708F7007FB63C /* YAMLUnitTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\tB6A432A01C27CE40007FB63C /* YAML iOS */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B6A432A61C27CE40007FB63C /* Build configuration list for PBXNativeTarget \"YAML iOS\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB6A4329C1C27CE40007FB63C /* Sources */,\n\t\t\t\tB6A4329D1C27CE40007FB63C /* Frameworks */,\n\t\t\t\tB6A4329E1C27CE40007FB63C /* Headers */,\n\t\t\t\tB6A4329F1C27CE40007FB63C /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = \"YAML iOS\";\n\t\t\tproductName = \"YAML iOS\";\n\t\t\tproductReference = B6A432A11C27CE40007FB63C /* YAML.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\tEB2B5927124E2100001FFEEB /* events */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EB2B592F124E2117001FFEEB /* Build configuration list for PBXNativeTarget \"events\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEB2B5925124E2100001FFEEB /* Sources */,\n\t\t\t\tEB2B5926124E2100001FFEEB /* Frameworks */,\n\t\t\t\tEB2B5960124E230D001FFEEB /* Copy YAML Files */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tB6A432641C270944007FB63C /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = events;\n\t\t\tproductName = events;\n\t\t\tproductReference = EB2B5928124E2100001FFEEB /* events */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tEB6C420D124D99BE00886AD1 /* test */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EB6C4221124D99E100886AD1 /* Build configuration list for PBXNativeTarget \"test\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEB6C420B124D99BE00886AD1 /* Sources */,\n\t\t\t\tEB6C420C124D99BE00886AD1 /* Frameworks */,\n\t\t\t\tEB6C424E124D9B0300886AD1 /* Copy YAML Files */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tEB6C4213124D99CB00886AD1 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = test;\n\t\t\tproductName = test;\n\t\t\tproductReference = EB6C420E124D99BE00886AD1 /* test */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n\t\tEBE745B4124F8C0D00618049 /* test (spec12examples) */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = EBE745BE124F8C0D00618049 /* Build configuration list for PBXNativeTarget \"test (spec12examples)\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEBE745B7124F8C0D00618049 /* Sources */,\n\t\t\t\tEBE745B9124F8C0D00618049 /* Frameworks */,\n\t\t\t\tEBE745BC124F8C0D00618049 /* Copy YAML Files */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tEBE745B5124F8C0D00618049 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = \"test (spec12examples)\";\n\t\t\tproductName = test;\n\t\t\tproductReference = EBE745C1124F8C0D00618049 /* test */;\n\t\t\tproductType = \"com.apple.product-type.tool\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t0867D690FE84028FC02AAC07 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastTestingUpgradeCheck = 0720;\n\t\t\t\tLastUpgradeCheck = 0720;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tB6A432571C2708F7007FB63C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t\tB6A432A01C27CE40007FB63C = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject \"YAML\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 1;\n\t\t\tknownRegions = (\n\t\t\t\tEnglish,\n\t\t\t\tJapanese,\n\t\t\t\tFrench,\n\t\t\t\tGerman,\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 0867D691FE84028FC02AAC07 /* YAML */;\n\t\t\tproductRefGroup = 034768DFFF38A50411DB9C8B /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t8DC2EF4F0486A6940098B216 /* YAML */,\n\t\t\t\tB6A432571C2708F7007FB63C /* YAMLUnitTests */,\n\t\t\t\tB6A432A01C27CE40007FB63C /* YAML iOS */,\n\t\t\t\tEB6C420D124D99BE00886AD1 /* test */,\n\t\t\t\tEBE745B4124F8C0D00618049 /* test (spec12examples) */,\n\t\t\t\tEB2B5927124E2100001FFEEB /* events */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t8DC2EF520486A6940098B216 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A432561C2708F7007FB63C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432681C270B3E007FB63C /* InfoPlist.strings in Resources */,\n\t\t\t\tB6A432671C2709D5007FB63C /* basic.yaml in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A4329F1C27CE40007FB63C /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432B61C27CEC7007FB63C /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t8DC2EF540486A6940098B216 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEBF83D8C124D7A3E008517E5 /* YAMLSerialization.m in Sources */,\n\t\t\t\tEB8C1ABA14B795E200BCDC1A /* api.c in Sources */,\n\t\t\t\tEB8C1ABB14B795E200BCDC1A /* dumper.c in Sources */,\n\t\t\t\tEB8C1ABC14B795E200BCDC1A /* emitter.c in Sources */,\n\t\t\t\tEB8C1ABD14B795E200BCDC1A /* loader.c in Sources */,\n\t\t\t\tEB8C1ABE14B795E200BCDC1A /* parser.c in Sources */,\n\t\t\t\tEB8C1ABF14B795E200BCDC1A /* reader.c in Sources */,\n\t\t\t\tEB8C1AC014B795E200BCDC1A /* scanner.c in Sources */,\n\t\t\t\tEB8C1AC114B795E200BCDC1A /* writer.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A432541C2708F7007FB63C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432661C270973007FB63C /* YAMLUnitTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB6A4329C1C27CE40007FB63C /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB6A432A91C27CE60007FB63C /* YAMLSerialization.m in Sources */,\n\t\t\t\tB6A432AA1C27CE7B007FB63C /* api.c in Sources */,\n\t\t\t\tB6A432AB1C27CE7B007FB63C /* dumper.c in Sources */,\n\t\t\t\tB6A432AC1C27CE7B007FB63C /* emitter.c in Sources */,\n\t\t\t\tB6A432AD1C27CE7B007FB63C /* loader.c in Sources */,\n\t\t\t\tB6A432AE1C27CE7B007FB63C /* parser.c in Sources */,\n\t\t\t\tB6A432AF1C27CE7B007FB63C /* reader.c in Sources */,\n\t\t\t\tB6A432B01C27CE7B007FB63C /* scanner.c in Sources */,\n\t\t\t\tB6A432B11C27CE7B007FB63C /* writer.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB2B5925124E2100001FFEEB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEB2B592E124E2117001FFEEB /* events.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEB6C420B124D99BE00886AD1 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEB6C433C124E0CF600886AD1 /* test.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tEBE745B7124F8C0D00618049 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tEBE745C7124F8C2F00618049 /* spec12examples.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tB6A4325F1C2708F7007FB63C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8DC2EF4F0486A6940098B216 /* YAML */;\n\t\t\ttargetProxy = B6A4325E1C2708F7007FB63C /* PBXContainerItemProxy */;\n\t\t};\n\t\tB6A432641C270944007FB63C /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8DC2EF4F0486A6940098B216 /* YAML */;\n\t\t\ttargetProxy = B6A432631C270944007FB63C /* PBXContainerItemProxy */;\n\t\t};\n\t\tEB6C4213124D99CB00886AD1 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8DC2EF4F0486A6940098B216 /* YAML */;\n\t\t\ttargetProxy = EB6C4212124D99CB00886AD1 /* PBXContainerItemProxy */;\n\t\t};\n\t\tEBE745B5124F8C0D00618049 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 8DC2EF4F0486A6940098B216 /* YAML */;\n\t\t\ttargetProxy = EBE745B6124F8C0D00618049 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t089C1666FE841158C02AAC07 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t089C1667FE841158C02AAC07 /* English */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tD319EEB213E5EE2A000EB46D /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tD319EEB313E5EE2A000EB46D /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1DEB91AE08733DA50010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEPLOYMENT_LOCATION = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = YAML_Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Info.plist;\n\t\t\t\tOTHER_CFLAGS = \"-DHAVE_CONFIG_H\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.yourcompany.${PRODUCT_NAME:rfc1034Identifier}\";\n\t\t\t\tPRODUCT_NAME = YAML;\n\t\t\t\tWRAPPER_EXTENSION = framework;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB91AF08733DA50010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEPLOYMENT_LOCATION = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tFRAMEWORK_VERSION = A;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = YAML_Prefix.pch;\n\t\t\t\tINFOPLIST_FILE = Info.plist;\n\t\t\t\tOTHER_CFLAGS = \"-DHAVE_CONFIG_H\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"com.yourcompany.${PRODUCT_NAME:rfc1034Identifier}\";\n\t\t\t\tPRODUCT_NAME = YAML;\n\t\t\t\tWRAPPER_EXTENSION = framework;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1DEB91B208733DA50010E9CD /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"${PROJECT_DIR}/yaml-0.1.4/include\";\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1DEB91B308733DA50010E9CD /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = \"${PROJECT_DIR}/yaml-0.1.4/include\";\n\t\t\t\tSDKROOT = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB6A432611C2708F7007FB63C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"YAMLUnitTests/YAMLUnitTests-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.thirdparty.YAMLUnitTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB6A432621C2708F7007FB63C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"-\";\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"YAMLUnitTests/YAMLUnitTests-Info.plist\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks\";\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.11;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.thirdparty.YAMLUnitTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSDKROOT = macosx;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB6A432A71C27CE40007FB63C /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"YAML iOS-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMODULEMAP_FILE = \"$(SRCROOT)/module.modulemap\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tOTHER_CFLAGS = \"-DHAVE_CONFIG_H\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.YAML;\n\t\t\t\tPRODUCT_NAME = YAML;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB6A432A81C27CE40007FB63C /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tINFOPLIST_FILE = \"YAML iOS-Info.plist\";\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMODULEMAP_FILE = \"$(SRCROOT)/module.modulemap\";\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tOTHER_CFLAGS = \"-DHAVE_CONFIG_H\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.yourcompany.YAML;\n\t\t\t\tPRODUCT_NAME = YAML;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEB2B592A124E2100001FFEEB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tPRODUCT_NAME = events;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEB2B592B124E2100001FFEEB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = \"\";\n\t\t\t\tPRODUCT_NAME = events;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEB6C4210124D99BE00886AD1 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tFoundation,\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tAppKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = test;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEB6C4211124D99BE00886AD1 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tFoundation,\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tAppKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = test;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tEBE745BF124F8C0D00618049 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tFoundation,\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tAppKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = test;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tEBE745C0124F8C0D00618049 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tGCC_MODEL_TUNING = G5;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"$(SYSTEM_LIBRARY_DIR)/Frameworks/AppKit.framework/Headers/AppKit.h\";\n\t\t\t\tINSTALL_PATH = /usr/local/bin;\n\t\t\t\tOTHER_LDFLAGS = (\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tFoundation,\n\t\t\t\t\t\"-framework\",\n\t\t\t\t\tAppKit,\n\t\t\t\t);\n\t\t\t\tPRODUCT_NAME = test;\n\t\t\t\tZERO_LINK = NO;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget \"YAML\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB91AE08733DA50010E9CD /* Debug */,\n\t\t\t\t1DEB91AF08733DA50010E9CD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject \"YAML\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1DEB91B208733DA50010E9CD /* Debug */,\n\t\t\t\t1DEB91B308733DA50010E9CD /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB6A432601C2708F7007FB63C /* Build configuration list for PBXNativeTarget \"YAMLUnitTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB6A432611C2708F7007FB63C /* Debug */,\n\t\t\t\tB6A432621C2708F7007FB63C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB6A432A61C27CE40007FB63C /* Build configuration list for PBXNativeTarget \"YAML iOS\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB6A432A71C27CE40007FB63C /* Debug */,\n\t\t\t\tB6A432A81C27CE40007FB63C /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEB2B592F124E2117001FFEEB /* Build configuration list for PBXNativeTarget \"events\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEB2B592A124E2100001FFEEB /* Debug */,\n\t\t\t\tEB2B592B124E2100001FFEEB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEB6C4221124D99E100886AD1 /* Build configuration list for PBXNativeTarget \"test\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEB6C4210124D99BE00886AD1 /* Debug */,\n\t\t\t\tEB6C4211124D99BE00886AD1 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tEBE745BE124F8C0D00618049 /* Build configuration list for PBXNativeTarget \"test (spec12examples)\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tEBE745BF124F8C0D00618049 /* Debug */,\n\t\t\t\tEBE745C0124F8C0D00618049 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 0867D690FE84028FC02AAC07 /* Project object */;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:YAML.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML.xcodeproj/xcshareddata/xcschemes/YAML iOS.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0720\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B6A432A01C27CE40007FB63C\"\n               BuildableName = \"YAML.framework\"\n               BlueprintName = \"YAML iOS\"\n               ReferencedContainer = \"container:YAML.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B6A432A01C27CE40007FB63C\"\n            BuildableName = \"YAML.framework\"\n            BlueprintName = \"YAML iOS\"\n            ReferencedContainer = \"container:YAML.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B6A432A01C27CE40007FB63C\"\n            BuildableName = \"YAML.framework\"\n            BlueprintName = \"YAML iOS\"\n            ReferencedContainer = \"container:YAML.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML.xcodeproj/xcshareddata/xcschemes/YAML.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0720\"\n   version = \"1.7\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"8DC2EF4F0486A6940098B216\"\n               BuildableName = \"YAML.framework\"\n               BlueprintName = \"YAML\"\n               ReferencedContainer = \"container:YAML.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B6A432571C2708F7007FB63C\"\n               BuildableName = \"YAMLUnitTests.xctest\"\n               BlueprintName = \"YAMLUnitTests\"\n               ReferencedContainer = \"container:YAML.xcodeproj\">\n            </BuildableReference>\n            <LocationScenarioReference\n               identifier = \"com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier\"\n               referenceType = \"1\">\n            </LocationScenarioReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8DC2EF4F0486A6940098B216\"\n            BuildableName = \"YAML.framework\"\n            BlueprintName = \"YAML\"\n            ReferencedContainer = \"container:YAML.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8DC2EF4F0486A6940098B216\"\n            BuildableName = \"YAML.framework\"\n            BlueprintName = \"YAML\"\n            ReferencedContainer = \"container:YAML.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"8DC2EF4F0486A6940098B216\"\n            BuildableName = \"YAML.framework\"\n            BlueprintName = \"YAML\"\n            ReferencedContainer = \"container:YAML.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLSerialization.h",
    "content": "//\n//  YAMLSerialization.h\n//  YAML Serialization support by Mirek Rusin based on C library LibYAML by Kirill Simonov\n//\tReleased under MIT License\n//\n//  Copyright 2010 Mirek Rusin\n//\tCopyright 2010 Stanislav Yudin\n//\n\n#import <Foundation/Foundation.h>\n\n// Mimics NSPropertyListMutabilityOptions\ntypedef enum {\n    kYAMLReadOptionImmutable                  = 0x0000000000000001,\n    kYAMLReadOptionMutableContainers          = 0x0000000000000010,\n    kYAMLReadOptionMutableContainersAndLeaves = 0x0000000000000110,\n    kYAMLReadOptionStringScalars              = 0x0000000000001000\n} YAMLReadOptions;\n\ntypedef enum {\n    kYAMLErrorNoErrors,\n    kYAMLErrorCodeParserInitializationFailed,\n    kYAMLErrorCodeParseError,\n    kYAMLErrorCodeEmitterError,\n    kYAMLErrorInvalidOptions,\n    kYAMLErrorCodeOutOfMemory,\n    kYAMLErrorInvalidYamlObject,\n} YAMLErrorCode;\n\ntypedef enum {\n    kYAMLWriteOptionSingleDocument    = 0x0000000000000001,\n    kYAMLWriteOptionMultipleDocuments = 0x0000000000000010,\n} YAMLWriteOptions;\n\nextern NSString *const YAMLErrorDomain;\n\n@interface YAMLSerialization : NSObject\n\n#pragma mark YAML reading\n\n// Returns all document objects from parsed YAML stream.\n+ (NSMutableArray *) objectsWithYAMLStream: (NSInputStream *) stream\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error;\n\n// Returns all document objects from parsed YAML data.\n+ (NSMutableArray *) objectsWithYAMLData: (NSData *) data\n                                 options: (YAMLReadOptions) opt\n                                   error: (NSError **) error;\n\n// Returns all document objects from parsed YAML string.\n+ (NSMutableArray *) objectsWithYAMLString: (NSString *) string\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error;\n\n// Returns first object from parsed YAML stream.\n+ (id) objectWithYAMLStream: (NSInputStream *) stream\n                    options: (YAMLReadOptions) opt\n                      error: (NSError **) error;\n\n// Returns first object from parsed YAML data.\n+ (id) objectWithYAMLData: (NSData *) data\n                  options: (YAMLReadOptions) opt\n                    error: (NSError **) error;\n\n// Returns first object from parsed YAML string.\n+ (id) objectWithYAMLString: (NSString *) string\n                    options: (YAMLReadOptions) opt\n                      error: (NSError **) error;\n\n#pragma mark Writing YAML\n\n// Returns YES on success, NO otherwise.\n+ (BOOL) writeObject: (id) object\n        toYAMLStream: (NSOutputStream *) stream\n             options: (YAMLWriteOptions) opt\n               error: (NSError **) error;\n\n// Caller is responsible for releasing returned object.\n+ (NSData *) createYAMLDataWithObject: (id) object\n                              options: (YAMLWriteOptions) opt\n                                error: (NSError **) error NS_RETURNS_RETAINED;\n\n// Returns autoreleased object.\n+ (NSData *) YAMLDataWithObject: (id) object\n                        options: (YAMLWriteOptions) opt\n                          error: (NSError **) error;\n\n// Caller is responsible for releasing returned object.\n+ (NSString *) createYAMLStringWithObject: (id) object\n                                  options: (YAMLWriteOptions) opt\n                                    error: (NSError **) error NS_RETURNS_RETAINED;\n\n// Returns autoreleased object.\n+ (NSString *) YAMLStringWithObject: (id) object\n                            options: (YAMLWriteOptions) opt\n                              error: (NSError **) error;\n\n#pragma mark Deprecated\n\n// Deprecated, use objectsWithYAMLStream:options:error or objectWithYAMLStream:options:error instead.\n+ (NSMutableArray *) YAMLWithStream: (NSInputStream *) stream options: (YAMLReadOptions) opt error: (NSError **) error __attribute__((deprecated));\n\n// Deprecated, use objectsWithYAMLData:options:error or objectWithYAMLData:options:error instead.\n+ (NSMutableArray *) YAMLWithData: (NSData *) data options: (YAMLReadOptions) opt error: (NSError **) error __attribute__((deprecated));\n\n// Deprecated, use YAMLDataWithObject:options:error or createYAMLDataWithObject:options:error instead.\n+ (NSData *) dataFromYAML: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error __attribute__((deprecated));\n\n// Deprecated, use writeYAMLObject:toStream:options:error instead.\n+ (BOOL) writeYAML: (id) object toStream: (NSOutputStream *) stream options: (YAMLWriteOptions) opt error: (NSError **) error __attribute__((deprecated));\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLSerialization.m",
    "content": "//\n//  YAMLSerialization.m\n//  YAML Serialization support by Mirek Rusin based on C library LibYAML by Kirill Simonov\n//  Released under MIT License\n//\n//  Copyright 2010 Mirek Rusin\n//  Copyright 2010 Stanislav Yudin\n//\n\n#import \"YAMLSerialization.h\"\n#import \"yaml.h\"\n\nNSString *const YAMLErrorDomain = @\"com.github.mirek.yaml\";\n\n// Assumes NSError **error is in the current scope\n#define YAML_SET_ERROR(errorCode, description, recovery) \\\n    if (error) \\\n        *error = [NSError errorWithDomain: YAMLErrorDomain \\\n                                     code: errorCode \\\n                                 userInfo: [NSDictionary dictionaryWithObjectsAndKeys: \\\n                                            description, NSLocalizedDescriptionKey, \\\n                                            recovery, NSLocalizedRecoverySuggestionErrorKey, \\\n                                            nil]]\n\n@implementation YAMLSerialization\n\n#pragma mark Reading YAML\n\nstatic int\n__YAMLSerializationParserInputReadHandler (void *data, unsigned char *buffer, size_t size, size_t *size_read) {\n    NSInteger outcome = [(NSInputStream *) data read: (uint8_t *) buffer maxLength: size];\n    if (outcome < 0) {\n        *size_read = 0;\n        return NO;\n    } else {\n        *size_read = outcome;\n        return YES;\n    }\n}\n\n// Serialize single, parsed document. Does not destroy the document.\nstatic id\n__YAMLSerializationObjectWithYAMLDocument (yaml_document_t *document, YAMLReadOptions opt, NSError **error) {\n\n    id root = nil;\n    id *objects = nil;\n\n    // Mutability options\n    Class arrayClass = [NSMutableArray class]; // TODO: FIXME:\n    Class dictionaryClass = [NSMutableDictionary class]; // TODO: FIXME:\n    Class stringClass = [NSString class];\n    if (opt & kYAMLReadOptionMutableContainers) {\n        arrayClass = [NSMutableArray class];\n        dictionaryClass = [NSMutableDictionary class];\n        if (opt & kYAMLReadOptionMutableContainersAndLeaves) {\n            stringClass = [NSMutableString class];\n        }\n    }\n\n    if (opt & kYAMLReadOptionStringScalars) {\n        // Supported\n    } else {\n        YAML_SET_ERROR(kYAMLErrorInvalidOptions, @\"Currently only kYAMLReadOptionStringScalars is supported\", @\"Serialize with kYAMLReadOptionStringScalars option\");\n        return nil;\n    }\n\n    yaml_node_t *node = NULL;\n    yaml_node_item_t *item = NULL;\n    yaml_node_pair_t *pair = NULL;\n\n    int i = 0;\n\n    objects = (id *) calloc(document->nodes.top - document->nodes.start, sizeof(id));\n    if (objects == NULL) {\n        YAML_SET_ERROR(kYAMLErrorCodeOutOfMemory,  @\"Couldn't allocate memory\", @\"Please try to free memory and retry\");\n        return nil;\n    }\n\n    // Create all objects, don't fill containers yet...\n    for (node = document->nodes.start, i = 0; node < document->nodes.top; node++, i++) {\n        switch (node->type) {\n            case YAML_SCALAR_NODE:\n                objects[i] = [[stringClass alloc] initWithUTF8String: (const char *)node->data.scalar.value];\n                if (!root) root = objects[i];\n                break;\n\n            case YAML_SEQUENCE_NODE:\n                objects[i] = [[arrayClass alloc] initWithCapacity: node->data.sequence.items.top - node->data.sequence.items.start];\n                if (!root) root = objects[i];\n                break;\n\n            case YAML_MAPPING_NODE:\n                objects[i] = [[dictionaryClass alloc] initWithCapacity: node->data.mapping.pairs.top - node->data.mapping.pairs.start];\n                if (!root) root = objects[i];\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    // Fill in containers\n    for (node = document->nodes.start, i = 0; node < document->nodes.top; node++, i++) {\n        switch (node->type) {\n            case YAML_SEQUENCE_NODE:\n                for (item = node->data.sequence.items.start; item < node->data.sequence.items.top; item++)\n                    [objects[i] addObject: objects[*item - 1]];\n                break;\n\n            case YAML_MAPPING_NODE:\n                for (pair = node->data.mapping.pairs.start; pair < node->data.mapping.pairs.top; pair++)\n                    [objects[i] setObject: objects[pair->value - 1]\n                                   forKey: objects[pair->key - 1]];\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    // Retain the root object\n    if (root != nil) {\n        [root retain];\n    }\n\n    // Release all objects. The root object and all referenced (in containers) objects\n    // will have retain count > 0\n    for (node = document->nodes.start, i = 0; node < document->nodes.top; node++, i++) {\n        [objects[i] release];\n    }\n\n    if (objects != NULL) {\n        free(objects);\n    }\n\n    return root;\n}\n\n+ (NSMutableArray *) objectsWithYAMLStream: (NSInputStream *) stream\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error\n{\n    NSMutableArray *documents = [NSMutableArray array];\n    id documentObject = nil;\n\n    yaml_parser_t parser;\n    yaml_document_t document;\n    BOOL done = NO;\n\n    // Open input stream\n    [stream open];\n\n    memset(&parser, 0, sizeof(yaml_parser_t));\n    if (!yaml_parser_initialize(&parser)) {\n        YAML_SET_ERROR(kYAMLErrorCodeParserInitializationFailed, @\"Error in yaml_parser_initialize(&parser)\", @\"Internal error, please let us know about this error\");\n        return nil;\n    }\n\n    yaml_parser_set_input(&parser, __YAMLSerializationParserInputReadHandler, (void *)stream);\n\n    while (!done) {\n\n        if (!yaml_parser_load(&parser, &document)) {\n            YAML_SET_ERROR(kYAMLErrorCodeParseError, @\"Parse error\", @\"Make sure YAML file is well formed\");\n            return nil;\n        }\n\n        done = !yaml_document_get_root_node(&document);\n\n        if (!done) {\n            documentObject = __YAMLSerializationObjectWithYAMLDocument(&document, opt, error);\n            if (error && *error) {\n                yaml_document_delete(&document);\n            } else {\n                [documents addObject: documentObject];\n                [documentObject release];\n            }\n        }\n\n        // TODO: Check if aliases to previous documents are allowed by the specs\n        yaml_document_delete(&document);\n    }\n\n    yaml_parser_delete(&parser);\n\n    return documents;\n}\n\n+ (id) objectWithYAMLStream: (NSInputStream *) stream options: (YAMLReadOptions) opt error: (NSError **) error {\n    return [[self objectsWithYAMLStream: stream options: opt error: error] objectAtIndex: 0];\n}\n\n+ (NSMutableArray *) objectsWithYAMLData: (NSData *) data\n                                 options: (YAMLReadOptions) opt\n                                   error: (NSError **) error;\n{\n    NSMutableArray *result = nil;\n    if (data != nil) {\n        NSInputStream *stream = [[NSInputStream alloc] initWithData: data];\n        result = [self objectsWithYAMLStream: stream options: opt error: error];\n        [stream release];\n    }\n    return result;\n}\n\n+ (id) objectWithYAMLData: (NSData *) data options: (YAMLReadOptions) opt error: (NSError **) error {\n    return [[self objectsWithYAMLData: data options: opt error: error] objectAtIndex: 0];\n}\n\n+ (NSMutableArray *) objectsWithYAMLString: (NSString *) string\n                                   options: (YAMLReadOptions) opt\n                                     error: (NSError **) error;\n{\n    return [self objectsWithYAMLData: [string dataUsingEncoding: NSUTF8StringEncoding]\n                             options: opt\n                               error: error];\n}\n\n+ (id) objectWithYAMLString: (NSString *) string options: (YAMLReadOptions) opt error: (NSError **) error {\n    return [[self objectsWithYAMLString: string options: opt error: error] objectAtIndex: 0];\n}\n\n#pragma mark Writing YAML\n\nstatic int\n__YAMLSerializationEmitterOutputWriteHandler (void *data, unsigned char *buffer, size_t size) {\n    return ([((NSOutputStream *) data) write: buffer maxLength: size] > 0);\n}\n\nstatic int\n__YAMLSerializationAddObject (yaml_document_t *document, id value) {\n    int result = 0;\n    if ([value isKindOfClass: [NSDictionary class]] ) {\n        result = yaml_document_add_mapping(document, NULL, YAML_BLOCK_MAPPING_STYLE);\n        for (id key in [value allKeys]) {\n            int keyIndex = __YAMLSerializationAddObject(document, key);\n            int valueIndex = __YAMLSerializationAddObject(document, [value objectForKey: key]);\n            yaml_document_append_mapping_pair(document, result, keyIndex, valueIndex);\n        }\n    }\n    else if ([value isKindOfClass: [NSArray class]]) {\n        result = yaml_document_add_sequence(document, NULL, YAML_BLOCK_SEQUENCE_STYLE);\n        for (id element in value) {\n            int elementIndex = __YAMLSerializationAddObject(document, element);\n            yaml_document_append_sequence_item(document, result, elementIndex);\n        }\n    }\n    else {\n        NSString *string = nil;\n        if ([value isKindOfClass: [NSString class]]) {\n            string = value;\n        } else {\n            string = [value stringValue];\n        }\n        result = yaml_document_add_scalar(document, NULL, (yaml_char_t *)[string UTF8String], (int) [string length], YAML_PLAIN_SCALAR_STYLE);\n    }\n    return (int) result;\n}\n\n+ (BOOL) __YAMLSerializationAddRootObjectAndEmit: (id) object emitter: (yaml_emitter_t *) emitter {\n    BOOL result = YES;\n    yaml_document_t document;\n    memset(&document, 0, sizeof(yaml_document_t));\n    if (yaml_document_initialize(&document, NULL, NULL, NULL, 0, 0)) {\n        __YAMLSerializationAddObject(&document, object);\n\n        // TODO: check result code.\n        yaml_emitter_dump(emitter, &document);\n        yaml_document_delete(&document);\n    } else {\n        //        YAML_SET_ERROR(kYAMLErrorInvalidYamlObject, @\"Failed to initialize yaml document\", @\"Underlying data structure failed to initalize\");\n        result = NO;\n    }\n    return result;\n}\n\n+ (BOOL) writeObject: (id) object\n        toYAMLStream: (NSOutputStream *) stream\n             options: (YAMLWriteOptions) opt\n               error: (NSError **) error\n{\n    BOOL result = YES;\n    yaml_emitter_t emitter;\n    memset(&emitter, 0, sizeof(yaml_emitter_t));\n\n    if (!yaml_emitter_initialize(&emitter)) {\n        YAML_SET_ERROR(kYAMLErrorCodeEmitterError, @\"Error in yaml_emitter_initialize(&emitter)\", @\"Internal error, please let us know about this error\");\n        return NO;\n    }\n\n    yaml_emitter_set_encoding(&emitter, YAML_UTF8_ENCODING);\n    yaml_emitter_set_output(&emitter, __YAMLSerializationEmitterOutputWriteHandler, (void *)stream);\n\n    // Open output stream.\n    [stream open];\n\n    if (kYAMLWriteOptionMultipleDocuments & opt) {\n\n        // YAML is an array of documents.\n        for (id child in object) {\n\n            // TODO: Check result code.\n            [self __YAMLSerializationAddRootObjectAndEmit: child emitter: &emitter];\n        }\n    }\n    else {\n\n        // YAML is a single document.\n        [self __YAMLSerializationAddRootObjectAndEmit: object emitter: &emitter];\n    }\n\n    [stream close];\n    yaml_emitter_delete(&emitter);\n\n    return result;\n}\n\n+ (NSData *) createYAMLDataWithObject: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error {\n    NSData *result = nil;\n    NSOutputStream *stream = [[NSOutputStream alloc] initToMemory];\n    [self writeObject: object toYAMLStream: stream options: opt error: error];\n    result = [[stream propertyForKey: NSStreamDataWrittenToMemoryStreamKey] retain];\n    [stream release];\n    return result;\n}\n\n+ (NSData *) YAMLDataWithObject: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error {\n    return [[self createYAMLDataWithObject: object options: opt error: error] autorelease];\n}\n\n+ (NSString *) createYAMLStringWithObject: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error {\n    return [[NSString alloc] initWithData: [self YAMLDataWithObject: object options: opt error: error]\n                                 encoding: NSUTF8StringEncoding];\n\n}\n\n+ (NSString *) YAMLStringWithObject: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error {\n    return [[self createYAMLStringWithObject: object options: opt error: error] autorelease];\n}\n\n#pragma mark Deprecated\n\n+ (NSMutableArray *) YAMLWithStream: (NSInputStream *) stream options: (YAMLReadOptions) opt error: (NSError **) error {\n    return [self objectsWithYAMLStream: stream options: opt error: error];\n}\n\n+ (NSMutableArray *) YAMLWithData: (NSData *) data options: (YAMLReadOptions) opt error: (NSError **) error {\n    return [self objectsWithYAMLData: data options: opt error: error];\n}\n\n+ (NSData *) dataFromYAML: (id) object options: (YAMLWriteOptions) opt error: (NSError **) error {\n    return [self YAMLDataWithObject: object options: opt error: error];\n}\n\n+ (BOOL) writeYAML: (id) object toStream: (NSOutputStream *) stream options: (YAMLWriteOptions) opt error: (NSError **) error {\n    return [self writeObject: object toYAMLStream: stream options: opt error: error];\n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLUnitTests/YAMLUnitTests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLUnitTests/YAMLUnitTests-Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'YAMLUnitTests' target in the 'YAMLUnitTests' project\n//\n\n#ifdef __OBJC__\n    #import <Cocoa/Cocoa.h>\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLUnitTests/YAMLUnitTests.h",
    "content": "//\n//  YAMLUnitTests.h\n//  YAMLUnitTests\n//\n//  Created by Carl Brown on 7/31/11.\n//  Copyright 2011 PDAgent, LLC. Released under MIT License.\n//\n\n#import <XCTest/XCTest.h>\n\n@interface YAMLUnitTests : XCTestCase\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLUnitTests/YAMLUnitTests.m",
    "content": "//\n//  YAMLUnitTests.m\n//  YAMLUnitTests\n//\n//  Created by Carl Brown on 7/31/11.\n//  Copyright 2011 PDAgent, LLC. Released under MIT License.\n//\n\n#import \"YAMLUnitTests.h\"\n#import \"YAMLSerialization.h\"\n\n@implementation YAMLUnitTests\n\n- (void)setUp\n{\n    [super setUp];\n    \n    // Set-up code here.\n}\n\n- (void)tearDown\n{\n    // Tear-down code here.\n    \n    [super tearDown];\n}\n\n- (void)testReadData\n{\n    NSString *fileName = [[NSBundle bundleForClass:[self class]] pathForResource:@\"basic\" ofType:@\"yaml\"];\n\tNSData *data = [NSData dataWithContentsOfFile:fileName];\n    NSTimeInterval before = [[NSDate date] timeIntervalSince1970];\n\tNSMutableArray *yaml = [YAMLSerialization YAMLWithData: data options: kYAMLReadOptionStringScalars error: nil];\n\tNSLog(@\"YAMLWithData took %f\", ([[NSDate date] timeIntervalSince1970] - before));\n\tNSLog(@\"%@\", yaml);\n    XCTAssertEqual((int) 10, (int) [yaml count], @\"Wrong number of expected objects\");\n\n}\n\n- (void)testReadStream\n{\n    NSString *fileName = [[NSBundle bundleForClass:[self class]] pathForResource:@\"basic\" ofType:@\"yaml\"];\n    NSInputStream *stream = [[NSInputStream alloc] initWithFileAtPath: fileName];\n    NSError *err = nil;\n\tNSTimeInterval before2 = [[NSDate date] timeIntervalSince1970]; \n\tNSMutableArray *yaml2 = [YAMLSerialization YAMLWithStream: stream options: kYAMLReadOptionStringScalars error: &err];\n\tNSLog(@\"YAMLWithStream took %f\", ([[NSDate date] timeIntervalSince1970] - before2));\n\tNSLog(@\"%@\", yaml2);\n    XCTAssertEqual((int) 10, (int) [yaml2 count], @\"Wrong number of expected objects\");\n    \n}\n\n@end\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAMLUnitTests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/YAML_Prefix.pch",
    "content": "//\n// Prefix header for all source files of the 'YAML' target in the 'YAML' project.\n//\n\n#ifdef __OBJC__\n    #import <Foundation/Foundation.h>\n#endif\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/module.modulemap",
    "content": "framework module YAML {\n  umbrella header \"YAMLSerialization.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/bigboy.rb",
    "content": "# Generate large YAML file\n# \n# Usage:\n#\n#   ruby bigboy.rb > yaml/bigboy.yaml\n#\n\nlorem = \"lorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod \" \\\n        \"tempor incididunt ut labore et dolore magna aliqua ut enim minim veniam \" \\\n        \"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo \" \\\n        \"consequat duis aute irure dolor in reprehenderit in voluptate velit esse \" \\\n        \"cillum dolore eu fugiat nulla pariatur excepteur sint occaecat cupidatat \" \\\n        \"non proident sunte culpa qui officia deserunt\".split\n\n# 2000 ~ 10MB\n(3 * 2000).times do |i|\n  puts \"- foo: bar\"\n  puts \"- #{lorem.shuffle.first}: #{lorem.shuffle.join(' ')}\"\n  lorem.shuffle[0..10].each do |k|\n    puts \"  #{k}: #{lorem.shuffle.join(' ')}\"\n  end\nend\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/events.c",
    "content": "//\n//  events.c\n//  YAML Serialization support by Mirek Rusin based on C library LibYAML by Kirill Simonov\n//\n//  Copyright 2010 Mirek Rusin, Released under MIT License\n//\n\n//#import <Foundation/Foundation.h>\n//#import \"YAMLSerialization.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include \"yaml.h\"\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\n#define PRINT_INDENT() for (int i = 0; i < indent; i++) printf(\"  \")\n\n\nint\nmain(int argc, char *argv[])\n{\n  int number;\n  \n  if (argc < 2) {\n    printf(\"Usage: %s file1.yaml ...\\n\", argv[0]);\n    return 0;\n  }\n  \n  for (number = 1; number < argc; number ++)\n  {\n    FILE *file;\n    yaml_parser_t parser;\n    yaml_event_t event;\n    int done = 0;\n    int count = 0;\n    int error = 0;\n    \n    printf(\"[%d] Parsing '%s': \\n\", number, argv[number]);\n    fflush(stdout);\n    \n    file = fopen(argv[number], \"rb\");\n    assert(file);\n    \n    assert(yaml_parser_initialize(&parser));\n    \n    yaml_parser_set_input_file(&parser, file);\n    \n    int indent = 0;\n    \n    while (!done)\n    {\n      if (!yaml_parser_parse(&parser, &event)) {\n        error = 1;\n        break;\n      }\n\n      switch (event.type) {\n        case YAML_NO_EVENT:\n          break;\n        case YAML_STREAM_START_EVENT:\n          break;\n        case YAML_STREAM_END_EVENT:\n          break;\n        case YAML_DOCUMENT_START_EVENT:\n          printf(\"%%YAML 1.2\\n---\\n\");\n          break;\n        case YAML_DOCUMENT_END_EVENT:\n          break;\n        case YAML_ALIAS_EVENT:\n          PRINT_INDENT();\n          printf(\"*%s\\n\", event.data.alias.anchor);\n          break;\n        case YAML_SCALAR_EVENT:\n          PRINT_INDENT();\n          if (event.data.scalar.anchor)\n            printf(\"&%s \", event.data.scalar.anchor);\n          printf(\"!!str \\\"%s\\\"\\n\", event.data.scalar.value);\n          break;\n        case YAML_SEQUENCE_START_EVENT:\n          printf(\"seq,s\\t\\n\");\n          indent++;\n          break;\n        case YAML_SEQUENCE_END_EVENT:\n          indent--;\n          printf(\"seq,e\\t\\n\");\n          break;\n        case YAML_MAPPING_START_EVENT:\n          printf(\"!!map {\\n\");\n          indent++;\n          break;\n        case YAML_MAPPING_END_EVENT:\n          indent--;\n          printf(\"}\\n\");\n          break;\n        default:\n          printf(\"unkn\\t\\n\");\n          break;\n      }\n      done = (event.type == YAML_STREAM_END_EVENT);\n      \n      yaml_event_delete(&event);\n      \n      count ++;\n    }\n    \n    yaml_parser_delete(&parser);\n    \n    assert(!fclose(file));\n    \n    printf(\"%s (%d events)\\n\", (error ? \"FAILURE\" : \"SUCCESS\"), count);\n  }\n  \n  return 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/fetch.rb",
    "content": "# Dump example files from http://www.yaml.org/spec/1.2/spec.html\nrequire 'rubygems'\nrequire 'open-uri'\nrequire 'hpricot'\n\ndoc = open(\"http://www.yaml.org/spec/1.2/spec.html\") { |f| Hpricot(f) }\n\ndoc.search(\"//div[@class='example']\").each do |example|\n  title = example.at(\"//p[@class='title']/b\").to_plain_text\n  yaml = example.at(\"//*[@class='database']\").to_plain_text.to_s.gsub(/\\267/, ' ').gsub(/↓/, '')\n  filename = \"spec12-#{title.downcase.gsub(/[^a-zA-Z0-9]/, '-').gsub(/-+/, '-').gsub(/-+$/, '')}.yaml\"\n  puts filename\n  f = open(\"yaml/#{filename}\", 'w')\n  f.write(yaml)\n  f.close\nend\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/spec12examples.m",
    "content": "//\n//  spec12examples.m\n//  Load all examples from http://www.yaml.org/spec/1.2/spec.html\n//\n//  Copyright 2010 Mirek Rusin, Released under MIT License\n//\n\n#import <Foundation/Foundation.h>\n#import \"YAMLSerialization.h\"\n\nint main() {\n  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];\n\n  NSString *prefix = @\"spec12-example\";\n  for (NSString *path in [[NSFileManager defaultManager] contentsOfDirectoryAtPath: @\"yaml\" error: nil]) {\n    if ([path compare: prefix options: NSCaseInsensitiveSearch range: NSMakeRange(0, prefix.length)] == NSOrderedSame) {\n      \n      NSInputStream *stream = [[NSInputStream alloc] initWithFileAtPath: [@\"yaml\" stringByAppendingPathComponent: path]];\n      NSMutableArray *yaml = [YAMLSerialization YAMLWithStream: stream \n                                                       options: kYAMLReadOptionStringScalars\n                                                         error: nil];\n      \n      // NSStringFromClass([[yaml objectAtIndex: 0] class]).UTF8String\n      printf(\"Found %i docs in %s\\n\", (int)yaml.count, path.UTF8String);\n    }\n  }\n  \n  [pool drain];\n  \n  return 0;\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/test.m",
    "content": "//\n//\ttest.m\n//\tYAML Serialization support by Mirek Rusin based on C library LibYAML by Kirill Simonov\n//\n//\tCopyright 2010 Mirek Rusin, Released under MIT License\n//\n\n#import <Foundation/Foundation.h>\n#import \"YAMLSerialization.h\"\n\nint\ntest (int argc, char *argv[]) {\n    int result = 0;\n\n\tNSLog(@\"reading test file... \");\n\tNSData *data = [NSData dataWithContentsOfFile: @\"yaml/basic.yaml\"];\n\tNSInputStream *stream = [[[NSInputStream alloc] initWithFileAtPath: @\"yaml/basic.yaml\"] autorelease];\n\tNSLog(@\"done.\");\n\n\tNSTimeInterval before = [[NSDate date] timeIntervalSince1970];\n\tNSMutableArray *yaml = [YAMLSerialization objectsWithYAMLData: data options: kYAMLReadOptionStringScalars error: nil];\n\tNSLog(@\"YAMLWithData took %f\", ([[NSDate date] timeIntervalSince1970] - before));\n\tNSLog(@\"%@\", yaml);\n\n    NSError *err = nil;\n\tNSTimeInterval before2 = [[NSDate date] timeIntervalSince1970];\n\tNSMutableArray *yaml2 = [YAMLSerialization objectsWithYAMLStream: stream options: kYAMLReadOptionStringScalars error: &err];\n\tNSLog(@\"YAMLWithStream took %f\", ([[NSDate date] timeIntervalSince1970] - before2));\n\tNSLog(@\"%@\", yaml2);\n\n    err = nil;\n\tNSTimeInterval before3 = [[NSDate date] timeIntervalSince1970];\n\tNSOutputStream *outStream = [NSOutputStream outputStreamToMemory];\n\t[YAMLSerialization writeObject: yaml toYAMLStream: outStream options: kYAMLWriteOptionMultipleDocuments error: &err];\n\tif (err) {\n\t\tNSLog(@\"Error: %@\", err);\n\t\treturn -1;\n\t}\n\tNSLog(@\"writeYAML took %f\", (float) ([[NSDate date] timeIntervalSince1970] - before3));\n\tNSLog(@\"out stream %@\", outStream);\n\n\tNSTimeInterval before4 = [[NSDate date] timeIntervalSince1970];\n\tNSData *outData = [YAMLSerialization YAMLDataWithObject: yaml2 options: kYAMLWriteOptionMultipleDocuments error: &err];\n\tif (!outData) {\n\t\tNSLog(@\"Data is nil!\");\n\t\treturn -1;\n\t}\n\tNSLog(@\"dataFromYAML took %f\", ([[NSDate date] timeIntervalSince1970] - before4));\n\tNSLog(@\"out data %@\", outData);\n\n    return result;\n}\n\nint\nmain (int argc, char *argv[]) {\n    int result = 0;\n    @autoreleasepool {\n        result = test(argc, argv);\n    }\n\treturn result;\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/basic.yaml",
    "content": "# http://yaml.kwiki.org/index.cgi?YtsBasicTests\n\n---\ntype: meta\nbrief: |\n    These are the basic set of tests.\ndefault-type: load-expect\nperl: fails\npython: fails\nruby: fails\n\n---\nname: Simple Sequence\nbrief: |\n    You can specify a list in YAML by placing each\n    member of the list on a new line with an opening\n    dash. These lists are called sequences.\nyaml: |\n    - apple\n    - banana\n    - carrot\nperl: |\n    ['apple', 'banana', 'carrot'] \npython: |\n    [ \n        ['apple', 'banana', 'carrot'] \n    ]\nruby: |\n    ['apple', 'banana', 'carrot'] \n\n---\nname: Nested Sequences\nbrief: |\n    You can include a sequence within another\n    sequence by giving the sequence an empty\n    dash, followed by an indented list.\nyaml: |\n    -\n     - foo\n     - bar\n     - baz\nperl: |\n    [['foo', 'bar', 'baz']]\npython: |\n    [\n        [['foo', 'bar', 'baz']]\n    ]\nruby: |\n    [['foo', 'bar', 'baz']]\n\n---\nname: Mixed Sequences\nbrief: |\n    Sequences can contain any YAML data,\n    including strings and other sequences.\nyaml: |\n    - apple\n    -\n     - foo\n     - bar\n     - x123\n    - banana\n    - carrot\nperl: |\n    ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']\npython: |\n    [\n        ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']\n    ]\nruby: |\n    ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']\n\n---\nname: Deeply Nested Sequences\nbrief: |\n    Sequences can be nested even deeper, with each\n    level of indentation representing a level of\n    depth.\nyaml: |\n    -\n     -\n      - uno\n      - dos\nperl: |\n    [[['uno', 'dos']]]\npython: |\n    [\n        [[['uno', 'dos']]]\n    ]\nruby: |\n    [[['uno', 'dos']]]\n\n---\nname: Simple Mapping\nbrief: |\n    You can add a keyed list (also known as a dictionary or\n    hash) to your document by placing each member of the\n    list on a new line, with a colon seperating the key\n    from its value.  In YAML, this type of list is called\n    a mapping.\nyaml: |\n    foo: whatever\n    bar: stuff\nperl: |\n    { foo => 'whatever', bar => 'stuff' }\npython: |\n    [\n        {'foo': 'whatever', 'bar': 'stuff'}\n    ]\nruby: |\n    { 'foo' => 'whatever', 'bar' => 'stuff' }\n\n---\nname: Sequence in a Mapping\nbrief: |\n    A value in a mapping can be a sequence.\nyaml: |\n    foo: whatever\n    bar:\n     - uno\n     - dos\nperl: |\n    { foo => 'whatever', bar => [ 'uno', 'dos' ] }\npython: |\n    [\n        {'foo': 'whatever', 'bar': ['uno', 'dos']}\n    ]\nruby: |\n    { 'foo' => 'whatever', 'bar' => [ 'uno', 'dos' ] }\n\n---\nname: Nested Mappings\nbrief: |\n    A value in a mapping can be another mapping.\nyaml: |\n    foo: whatever\n    bar:\n     fruit: apple\n     name: steve\n     sport: baseball\nperl: |\n    { foo => 'whatever', \n      bar => {\n         fruit => 'apple', \n         name => 'steve',\n         sport => 'baseball'\n       }\n    }\npython: |\n    [\n        {'foo': 'whatever', \n         'bar': {\n            'fruit': 'apple', \n            'name': 'steve',\n            'sport': 'baseball'\n            }\n        }\n    ]\nruby: |\n    { 'foo' => 'whatever', \n      'bar' => {\n         'fruit' => 'apple', \n         'name' => 'steve',\n         'sport' => 'baseball'\n       }\n    }\n\n---\nname: Mixed Mapping\nbrief: |\n    A mapping can contain any assortment\n    of mappings and sequences as values.\nyaml: |\n    foo: whatever\n    bar:\n     -\n      fruit: apple\n      name: steve\n      sport: baseball\n     - more\n     -\n      python: rocks\n      perl: papers\n      ruby: scissorses\nperl: |\n    { foo => 'whatever', \n      bar => [\n        {\n            fruit => 'apple', \n            name => 'steve',\n            sport => 'baseball'\n        },\n        'more',\n        {\n            python => 'rocks',\n            perl => 'papers',\n            ruby => 'scissorses'\n        }\n      ]\n    }\npython: |\n    [\n        {'foo': 'whatever', \n         'bar': [\n            {\n                'fruit': 'apple', \n                'name': 'steve',\n                'sport': 'baseball'\n            },\n            'more',\n            {\n                'python': 'rocks',\n                'perl':  'papers',\n                'ruby': 'scissorses'\n            }\n         ]\n        }\n    ]\nruby: |\n    { 'foo' => 'whatever', \n      'bar' => [\n        {\n            'fruit' => 'apple', \n            'name' => 'steve',\n            'sport' => 'baseball'\n        },\n        'more',\n        {\n            'python' => 'rocks',\n            'perl' => 'papers',\n            'ruby' => 'scissorses'\n        }\n      ]\n    }\n\n---\nname: Sequence-Mapping Shortcut\nbrief: |\n     If you are adding a mapping to a sequence, you\n     can place the mapping on the same line as the\n     dash as a shortcut.\nyaml: |\n     - work on YAML.py:\n        - work on Store\nperl: |\n    [ { 'work on YAML.py' => ['work on Store'] } ]\npython: |\n    [\n        [ {'work on YAML.py': ['work on Store']} ]\n    ]\nruby: |\n    [ { 'work on YAML.py' => ['work on Store'] } ]\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/items.yaml",
    "content": "items:\n  - name: Foo\n  - name: Bar\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/map-in-seq.yaml",
    "content": "# http://yaml.kwiki.org/index.cgi?YtsMapInSeq\n\n---\ntype: meta\ndescription: |\nTest the shorthand mapping-in-sequence syntax.\ndefault-type: load-expect\nperl: fail\nruby: 0.40\npython: skip\n\n# The tests themselves come below. One per YAML document.\n---\nname: Single key\ntype: load-expect\nbrief: |\nTest maps with just one key.\nyaml: |\n---\n- foo: bar\n- baz: bug\nperl: |\n[ {foo => 'bar'},  {baz => 'bug'} ]\nruby: |\n[ {'foo', 'bar'},  {'baz', 'bug'} ]\n\n---\nname: Multiple keys\nbrief: |\nTest a map with multiple keys.\nyaml: |\n---\n- foo: bar\nbaz: bug\nperl: |\n[ {foo => 'bar', baz => 'bug'} ]\nruby: |\n[ {'foo', 'bar', 'baz', 'bug'} ]\n\n---\nname: Strange keys\nbrief: |\nTest a map with \"line noise\" keys.\nyaml: |\n---\n- \"!@#$\" : foo\n-+!@ :   bar\nperl: |\n[ {'!@#$' => 'foo', '-+!@' => 'bar'} ]\nruby: |\n[ {'!@#$', 'foo', '-+!@', 'bar'} ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/map.yaml",
    "content": "foo: bar\nbar: foo\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/mapping.yaml",
    "content": "# http://yaml.kwiki.org/index.cgi?YtsBlockMapping\n\n---\ntype: meta\ndescription: |\n    This is the most basic basic YAML unit. The top level mapping.\ndefault-type: load-expect\nperl: fail\n\n# The tests themselves come below. One per YAML document.\n---\nname: One Element Mapping\nbrief: |\n    A mapping with one key/value pair\nyaml: |\n    ---\n    foo: bar\nperl: |\n    {foo => 'bar'}\n\n---\nname: Multi Element Mapping\nbrief: |\n    More than one key/value pair\nyaml: |\n    ---\n    red: baron\n    white: walls\n    blue: berries\nperl: |\n    {\n     red => 'baron',\n     white => 'walls',\n     blue => 'berries',\n    }\n\n---\nname: Values aligned\nbrief: |\n    Often times human editors of documents will align the values even\n    though YAML emitters generally don't.\nyaml: |\n    ---\n    red:   baron\n    white: walls\n    blue:  berries\nperl: |\n    {\n     red => 'baron',\n     white => 'walls',\n     blue => 'berries',\n    }\n\n---\nname: Colons aligned\nbrief: |\n    Spaces can come before the ': ' key/value separator.\nyaml: |\n    ---\n    red   : baron\n    white : walls\n    blue  : berries\nperl: |\n    {\n     red => 'baron',\n     white => 'walls',\n     blue => 'berries',\n    }"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/simple.yaml",
    "content": "map_key_1: map_value_1\nmap_key_2:\n  - sequence item 1\n  - sequence item 2\n  - sequence item 3\nmap_key_3:\n  map_key_3_1: map_value_3_1\nmap_key_4: |-\n  block value\n  multiline\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-1-map-examples.yaml",
    "content": "Block style: !!map\n  Clark : Evans\n  Ingy  : dt Net\n  Oren  : Ben-Kiki\n\nFlow style: !!map { Clark: Evans, Ingy: dt Net, Oren: Ben-Kiki }"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-2-seq-examples.yaml",
    "content": "Block style: !!seq\n- Clark Evans\n- Ingy dt Net\n- Oren Ben-Kiki\n\nFlow style: !!seq [ Clark Evans, Ingy dt Net, Oren Ben-Kiki ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-3-str-examples.yaml",
    "content": "Block style: !!str |-\n  String: just a theory.\n\nFlow style: !!str \"String: just a theory.\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-4-null-examples.yaml",
    "content": "!!null null: value for null key\nkey with null value: !!null null"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-5-bool-examples.yaml",
    "content": "YAML is a superset of JSON: !!bool true\nPluto is a planet: !!bool false"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-6-int-examples.yaml",
    "content": "negative: !!int -12\nzero: !!int 0\npositive: !!int 34"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-7-float-examples.yaml",
    "content": "negative: !!float -1\nzero: !!float 0\npositive: !!float 2.3e4\ninfinity: !!float .inf\nnot a number: !!float .nan"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-8-json-tag-resolution.yaml",
    "content": "A null: null\nBooleans: [ true, false ]\nIntegers: [ 0, -0, 3, -19 ]\nFloats: [ 0., -0.0, 12e03, -2E+05 ]\nInvalid: [ True, Null, 0o7, 0x3A, +12.3 ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-10-9-core-tag-resolution.yaml",
    "content": "A null: null\nAlso a null: # Empty\nNot a null: \"\"\nBooleans: [ true, True, false, FALSE ]\nIntegers: [ 0, 0o7, 0x3A, -19 ]\nFloats: [ 0., -0.0, .5, +12e03, -2E+05 ]\nAlso floats: [ .inf, -.Inf, +.INF, .NAN ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-1-sequence-of-scalars-ball-players.yaml",
    "content": "- Mark McGwire\n- Sammy Sosa\n- Ken Griffey"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-10-node-for-sammy-sosa-appears-twice-in-this-document.yaml",
    "content": "---\nhr:\n  - Mark McGwire\n  # Following node labeled SS\n  - &SS Sammy Sosa\nrbi:\n  - *SS # Subsequent occurrence\n  - Ken Griffey"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-11-mapping-between-sequences.yaml",
    "content": "? - Detroit Tigers\n  - Chicago cubs\n:\n  - 2001-07-23\n\n? [ New York Yankees,\n    Atlanta Braves ]\n: [ 2001-07-02, 2001-08-12,\n    2001-08-14 ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-12-compact-nested-mapping.yaml",
    "content": "---\n# Products purchased\n- item    : Super Hoop\n  quantity: 1\n- item    : Basketball\n  quantity: 4\n- item    : Big Shoes\n  quantity: 1"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-13-in-literals-newlines-are-preserved.yaml",
    "content": "# ASCII Art\n--- |\n  \\//||\\/||\n  // ||  ||__"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-14-in-the-folded-scalars-newlines-become-spaces.yaml",
    "content": "--- >\n  Mark McGwire's\n  year was crippled\n  by a knee injury."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-15-folded-newlines-are-preserved-for-more-indented-and-blank-lines.yaml",
    "content": ">\n Sammy Sosa completed another\n fine season with great stats.\n\n   63 Home Runs\n   0.288 Batting Average\n\n What a year!"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-16-indentation-determines-scope.yaml",
    "content": "name: Mark McGwire\naccomplishment: >\n  Mark set a major league\n  home run record in 1998.\nstats: |\n  65 Home Runs\n  0.278 Batting Average"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-17-quoted-scalars.yaml",
    "content": "unicode: \"Sosa did fine.\\u263A\"\ncontrol: \"\\b1998\\t1999\\t2000\\n\"\nhex esc: \"\\x0d\\x0a is \\r\\n\"\n\nsingle: '\"Howdy!\" he cried.'\nquoted: ' # Not a ''comment''.'\ntie-fighter: '|\\-*-/|'"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-18-multi-line-flow-scalars.yaml",
    "content": "plain:\n  This unquoted scalar\n  spans many lines.\n\nquoted: \"So does this\n  quoted scalar.\\n\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-19-integers.yaml",
    "content": "canonical: 12345\ndecimal: +12345\noctal: 0o14\nhexadecimal: 0xC"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-2-mapping-scalars-to-scalars-player-statistics.yaml",
    "content": "hr:  65    # Home runs\navg: 0.278 # Batting average\nrbi: 147   # Runs Batted In"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-20-floating-point.yaml",
    "content": "canonical: 1.23015e+3\nexponential: 12.3015e+02\nfixed: 1230.15\nnegative infinity: -.inf\nnot a number: .NaN"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-21-miscellaneous.yaml",
    "content": "null:\nbooleans: [ true, false ]\nstring: '012345'"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-22-timestamps.yaml",
    "content": "canonical: 2001-12-15T02:59:43.1Z\niso8601: 2001-12-14t21:59:43.10-05:00\nspaced: 2001-12-14 21:59:43.10 -5\ndate: 2002-12-14"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-23-various-explicit-tags.yaml",
    "content": "---\nnot-date: !!str 2002-04-28\n\npicture: !!binary |\n R0lGODlhDAAMAIQAAP//9/X\n 17unp5WZmZgAAAOfn515eXv\n Pz7Y6OjuDg4J+fn5OTk6enp\n 56enmleECcgggoBADs=\n\napplication specific tag: !something |\n The semantics of the tag\n above may be different for\n different documents."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-24-global-tags.yaml",
    "content": "%TAG ! tag:clarkevans.com,2002:\n--- !shape\n  # Use the ! handle for presenting\n  # tag:clarkevans.com,2002:circle\n- !circle\n  center: &ORIGIN {x: 73, y: 129}\n  radius: 7\n- !line\n  start: *ORIGIN\n  finish: { x: 89, y: 102 }\n- !label\n  start: *ORIGIN\n  color: 0xFFEEBB\n  text: Pretty vector drawing."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-25-unordered-sets.yaml",
    "content": "# Sets are represented as a\n# Mapping where each key is\n# associated with a null value\n--- !!set\n? Mark McGwire\n? Sammy Sosa\n? Ken Griff"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-26-ordered-mappings.yaml",
    "content": "# Ordered maps are represented as\n# A sequence of mappings, with\n# each mapping having one key\n--- !!omap\n- Mark McGwire: 65\n- Sammy Sosa: 63\n- Ken Griffy: 58"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-27-invoice.yaml",
    "content": "--- !<tag:clarkevans.com,2002:invoice>\ninvoice: 34843\ndate   : 2001-01-23\nbill-to: &id001\n    given  : Chris\n    family : Dumars\n    address:\n        lines: |\n            458 Walkman Dr.\n            Suite #292\n        city    : Royal Oak\n        state   : MI\n        postal  : 48046\nship-to: *id001\nproduct:\n    - sku         : BL394D\n      quantity    : 4\n      description : Basketball\n      price       : 450.00\n    - sku         : BL4438H\n      quantity    : 1\n      description : Super Hoop\n      price       : 2392.00\ntax  : 251.42\ntotal: 4443.52\ncomments:\n    Late afternoon is best.\n    Backup contact is Nancy\n    Billsmer @ 338-4338."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-28-log-file.yaml",
    "content": "---\nTime: 2001-11-23 15:01:42 -5\nUser: ed\nWarning:\n  This is an error message\n  for the log file\n---\nTime: 2001-11-23 15:02:31 -5\nUser: ed\nWarning:\n  A slightly different error\n  message.\n---\nDate: 2001-11-23 15:03:17 -5\nUser: ed\nFatal:\n  Unknown variable \"bar\"\nStack:\n  - file: TopClass.py\n    line: 23\n    code: |\n      x = MoreObject(\"345\\n\")\n  - file: MoreClass.py\n    line: 58\n    code: |-\n      foo = bar"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-3-mapping-scalars-to-sequences-ball-clubs-in-each-league.yaml",
    "content": "american:\n  - Boston Red Sox\n  - Detroit Tigers\n  - New York Yankees\nnational:\n  - New York Mets\n  - Chicago Cubs\n  - Atlanta Braves"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-4-sequence-of-mappings-players-statistics.yaml",
    "content": "-\n  name: Mark McGwire\n  hr:   65\n  avg:  0.278\n-\n  name: Sammy Sosa\n  hr:   63\n  avg:  0.288"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-5-sequence-of-sequences.yaml",
    "content": "- [name        , hr, avg  ]\n- [Mark McGwire, 65, 0.278]\n- [Sammy Sosa  , 63, 0.288]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-6-mapping-of-mappings.yaml",
    "content": "Mark McGwire: {hr: 65, avg: 0.278}\nSammy Sosa: {\n    hr: 63,\n    avg: 0.288\n  }"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-7-two-documents-in-a-stream-each-with-a-leading-comment.yaml",
    "content": "# Ranking of 1998 home runs\n---\n- Mark McGwire\n- Sammy Sosa\n- Ken Griffey\n\n# Team ranking\n---\n- Chicago Cubs\n- St Louis Cardinals"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-8-play-by-play-feed-from-a-game.yaml",
    "content": "---\ntime: 20:03:20\nplayer: Sammy Sosa\naction: strike (miss)\n...\n---\ntime: 20:03:47\nplayer: Sammy Sosa\naction: grand slam\n..."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-2-9-single-document-with-two-comments.yaml",
    "content": "---\nhr: # 1998 hr ranking\n  - Mark McGwire\n  - Sammy Sosa\nrbi:\n  # 1998 rbi ranking\n  - Sammy Sosa\n  - Ken Griffey"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-1-byte-order-mark.yaml",
    "content": "⇔# Comment only."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-10-invalid-use-of-reserved-indicators.yaml",
    "content": "commercial-at: @text\ngrave-accent: `text"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-11-line-break-characters.yaml",
    "content": "|\n  Line break (no glyph)\n  Line break (glyphed)"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-12-tabs-and-spaces.yaml",
    "content": "# Tabs and spaces\nquoted: \"Quoted →\"\nblock:→|\n  void main() {\n  →printf(\"Hello, world!\\n\");\n  }"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-13-escaped-characters.yaml",
    "content": "\"Fun with \\\\\n\\\" \\a \\b \\e \\f \\\n\\n \\r \\t \\v \\0 \\\n\\ \\_ \\N \\L \\P \\\n\\x41 \\u0041 \\U00000041\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-14-invalid-escaped-characters.yaml",
    "content": "Bad escapes:\n  \"\\c\n  \\xq-\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-2-invalid-byte-order-mark.yaml",
    "content": "- Invalid use of BOM\n⇔\n- Inside a document."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-3-block-structure-indicators.yaml",
    "content": "sequence:\n- one\n- two\nmapping:\n  ? sky\n  : blue\n  sea : green"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-4-flow-collection-indicators.yaml",
    "content": "sequence: [ one, two, ]\nmapping: { sky: blue, sea: green }"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-5-comment-indicator.yaml",
    "content": "# Comment only."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-6-node-property-indicators.yaml",
    "content": "anchored: !local &anchor value\nalias: *anchor"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-7-block-scalar-indicators.yaml",
    "content": "literal: |\n  some\n  text\nfolded: >\n  some\n  text"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-8-quoted-scalar-indicators.yaml",
    "content": "single: 'text'\ndouble: \"text\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-5-9-directive-indicator.yaml",
    "content": "%YAML 1.2\n--- text"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-1-indentation-spaces.yaml",
    "content": "  # Leading comment line spaces are\n   # neither content nor indentation.\n    \nNot indented:\n By one space: |\n    By four\n      spaces\n Flow style: [    # Leading spaces\n   By two,        # in flow style\n  Also by two,    # are neither\n  →Still by two   # content nor\n    ]             # indentation."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-10-comment-lines.yaml",
    "content": "  # Comment\n   \n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-11-multi-line-comments.yaml",
    "content": "key:    # Comment\n        # lines\n  value\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-12-separation-spaces.yaml",
    "content": "{ first: Sammy, last: Sosa }:\n# Statistics:\n  hr:  # Home runs\n     65\n  avg: # Average\n   0.278"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-13-reserved-directives.yaml",
    "content": "%FOO  bar baz # Should be ignored\n               # with a warning.\n--- \"foo\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-14-yaml-directive.yaml",
    "content": "%YAML 1.3 # Attempt parsing\n           # with a warning\n---\n\"foo\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-15-invalid-repeated-yaml-directive.yaml",
    "content": "%YAML 1.2\n%YAML 1.1\nfoo"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-16-tag-directive.yaml",
    "content": "%TAG !yaml! tag:yaml.org,2002:\n---\n!yaml!str \"foo\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-17-invalid-repeated-tag-directive.yaml",
    "content": "%TAG ! !foo\n%TAG ! !foo\nbar"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-18-primary-tag-handle.yaml",
    "content": "# Private\n!foo \"bar\"\n...\n# Global\n%TAG ! tag:example.com,2000:app/\n---\n!foo \"bar\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-19-secondary-tag-handle.yaml",
    "content": "%TAG !! tag:example.com,2000:app/\n---\n!!int 1 - 3 # Interval, not integer"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-2-indentation-indicators.yaml",
    "content": "? a\n: -→b\n  -  -→c\n     - d"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-20-tag-handles.yaml",
    "content": "%TAG !e! tag:example.com,2000:app/\n---\n!e!foo \"bar\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-21-local-tag-prefix.yaml",
    "content": "%TAG !m! !my-\n--- # Bulb here\n!m!light fluorescent\n...\n%TAG !m! !my-\n--- # Color here\n!m!light green"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-22-global-tag-prefix.yaml",
    "content": "%TAG !e! tag:example.com,2000:app/\n---\n- !e!foo \"bar\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-23-node-properties.yaml",
    "content": "!!str &a1 \"foo\":\n  !!str bar\n&a2 baz : *a1"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-24-verbatim-tags.yaml",
    "content": "!<tag:yaml.org,2002:str> foo :\n  !<!bar> baz"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-25-invalid-verbatim-tags.yaml",
    "content": "- !<!> foo\n- !<$:?> bar"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-26-tag-shorthands.yaml",
    "content": "%TAG !e! tag:example.com,2000:app/\n---\n- !local foo\n- !!str bar\n- !e!tag%21 baz"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-27-invalid-tag-shorthands.yaml",
    "content": "%TAG !e! tag:example,2000:app/\n---\n- !e! foo\n- !h!bar baz"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-28-non-specific-tags.yaml",
    "content": "# Assuming conventional resolution:\n- \"12\"\n- 12\n- ! 12"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-29-node-anchors.yaml",
    "content": "First occurrence: &anchor Value\nSecond occurrence: *anchor"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-3-separation-spaces.yaml",
    "content": "- foo:→ bar\n- - baz\n  -→baz"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-4-line-prefixes.yaml",
    "content": "plain: text\n  lines\nquoted: \"text\n  →lines\"\nblock: |\n  text\n   →lines"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-5-empty-lines.yaml",
    "content": "Folding:\n  \"Empty line\n   →\n  as a line feed\"\nChomping: |\n  Clipped empty lines\n "
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-6-line-folding.yaml",
    "content": ">-\n  trimmed\n  \n \n\n  as\n  space"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-7-block-folding.yaml",
    "content": ">\n  foo \n \n  → bar\n\n  baz"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-8-flow-folding.yaml",
    "content": "\"\n  foo \n \n  → bar\n\n  baz\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-6-9-separated-comment.yaml",
    "content": "key:    # Comment\n  valueeof"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-1-alias-nodes.yaml",
    "content": "First occurrence: &anchor Foo\nSecond occurrence: *anchor\nOverride anchor: &anchor Bar\nReuse anchor: *anchor"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-10-plain-characters.yaml",
    "content": "# Outside flow collection:\n- ::vector\n- \": - ()\"\n- Up, up, and away!\n- -123\n- http://example.com/foo#bar\n# Inside flow collection:\n- [ ::vector,\n  \": - ()\",\n  \"Up, up and away!\",\n  -123,\n  http://example.com/foo#bar ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-11-plain-implicit-keys.yaml",
    "content": "implicit block key : [\n  implicit flow key : value,\n ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-12-plain-lines.yaml",
    "content": "1st non-empty\n\n 2nd non-empty \n→3rd non-empty"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-13-flow-sequence.yaml",
    "content": "- [ one, two, ]\n- [three ,four]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-14-flow-sequence-entries.yaml",
    "content": "[\n\"double\n quoted\", 'single\n           quoted',\nplain\n text, [ nested ],\nsingle: pair,\n]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-15-flow-mappings.yaml",
    "content": "- { one : two , three: four , }\n- {five: six,seven : eight}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-16-flow-mapping-entries.yaml",
    "content": "{\n? explicit: entry,\nimplicit: entry,\n?\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-17-flow-mapping-separate-values.yaml",
    "content": "{\nunquoted : \"separate\",\nhttp://foo.com,\nomitted value:,\n: omitted key,\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-18-flow-mapping-adjacent-values.yaml",
    "content": "{\n\"adjacent\":value,\n\"readable\": value,\n\"empty\":\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-19-single-pair-flow-mappings.yaml",
    "content": "[\nfoo: bar\n]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-2-empty-content.yaml",
    "content": "{\n  foo : !!str,\n  !!str : bar,\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-20-single-pair-explicit-entry.yaml",
    "content": "[\n? foo\n bar : baz\n]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-21-single-pair-implicit-entries.yaml",
    "content": "- [ YAML : separate ]\n- [ : empty key entry ]\n- [ {JSON: like}:adjacent ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-22-invalid-implicit-keys.yaml",
    "content": "[ foo\n bar: invalid,\n \"foo...>1K characters...bar\": invalid ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-23-flow-content.yaml",
    "content": "- [ a, b ]\n- { a: b }\n- \"a\"\n- 'b'\n- c"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-24-flow-nodes.yaml",
    "content": "- !!str \"a\"\n- 'b'\n- &anchor \"c\"\n- *anchor\n- !!str"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-3-completely-empty-flow-nodes.yaml",
    "content": "{\n  ? foo :,\n  : bar,\n}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-4-double-quoted-implicit-keys.yaml",
    "content": "\"implicit block key\" : [\n  \"implicit flow key\" : value,\n ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-5-double-quoted-line-breaks.yaml",
    "content": "\"folded \nto a space,→\n \nto a line feed, or →\\\n \\ →non-content\""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-6-double-quoted-lines.yaml",
    "content": "\" 1st non-empty\n\n 2nd non-empty \n→3rd non-empty \""
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-7-single-quoted-characters.yaml",
    "content": "'here''s to \"quotes\"'"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-8-single-quoted-implicit-keys.yaml",
    "content": "'implicit block key' : [\n  'implicit flow key' : value,\n ]"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-7-9-single-quoted-lines.yaml",
    "content": "' 1st non-empty\n\n 2nd non-empty \n→3rd non-empty '"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-1-block-scalar-header.yaml",
    "content": "- |# Empty header\n literal\n- >1 # Indentation indicator\n  folded\n- |+ # Chomping indicator\n keep\n\n- >1- # Both indicators\n  strip"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-10-folded-lines.yaml",
    "content": ">\n\n folded\n line\n\n next\n line\n   * bullet\n\n   * list\n   * lines\n\n last\n line\n\n# Comment"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-11-more-indented-lines.yaml",
    "content": ">\n\n folded\n line\n\n next\n line\n   * bullet\n\n   * list\n   * lines\n\n last\n line\n\n# Comment"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-12-empty-separation-lines.yaml",
    "content": ">\n\n folded\n line\n\n next\n line\n   * bullet\n\n   * list\n   * line\n\n last\n line\n\n# Comment"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-13-final-empty-lines.yaml",
    "content": ">\n folded\n line\n\n next\n line\n   * bullet\n\n   * list\n   * line\n\n last\n line\n\n# Comment"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-14-block-sequence.yaml",
    "content": "block sequence:\n  - one\n  - two : three"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-15-block-sequence-entry-types.yaml",
    "content": "- # Empty\n-|\n block node\n- - one # Compact\n  - two # sequence\n-one: two # Compact mapping"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-16-block-mappings.yaml",
    "content": "block mapping:\n key: value"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-17-explicit-block-mapping-entries.yaml",
    "content": "? explicit key # Empty value\n? |\n  block key\n: - one # Explicit compact\n  - two # block value"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-18-implicit-block-mapping-entries.yaml",
    "content": "plain key: in-line value\n: # Both empty\n\"quoted key\":\n- entry"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-19-compact-block-mappings.yaml",
    "content": "- sun: yellow\n- ? earth: blue\n  : moon: white"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-2-block-indentation-indicator.yaml",
    "content": "- |\n detected\n- >\n \n  \n  # detected\n- |1\n  explicit\n- >\n →\n detected"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-20-block-node-types.yaml",
    "content": "-\n  \"flow in block\"\n- >\n Block scalar\n- !!map # Block collection\n  foo : bar"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-21-block-scalar-nodes.yaml",
    "content": "literal: |2\n  value\nfolded:\n   !foo\n  >1\n value"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-22-block-collection-nodes.yaml",
    "content": "sequence:!!seq\n- entry\n- !!seq\n - nested\nmapping:!!map\nfoo: bar"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-3-invalid-block-scalar-indentation-indicators.yaml",
    "content": "- |\n  \n text\n- >\n  text\n text\n- |2\n text"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-4-chomping-final-line-break.yaml",
    "content": "strip: |-\n  text\nclip: |\n  text\nkeep: |+\n  text"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-5-chomping-trailing-lines.yaml",
    "content": "# Strip\n  # Comments:\nstrip: |-\n  # text\n  ⇓\n # Clip\n  # comments:\n\nclip: |\n  # text\n \n # Keep\n  # comments:\n\nkeep: |+\n  # text\n\n # Trail\n  # comments."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-6-empty-scalar-chomping.yaml",
    "content": "strip: >-\n\nclip: >\n\nkeep: |+\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-7-literal-scalar.yaml",
    "content": "|\n literal\n →text\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-8-literal-content.yaml",
    "content": "|\n \n  \n  literal\n   \n  \n  text\n\n # Comment"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-8-9-folded-scalar.yaml",
    "content": ">\n folded\n text\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-1-document-prefix.yaml",
    "content": "⇔# Comment\n# lines\nDocument"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-2-document-markers.yaml",
    "content": "%YAML 1.2\n---\nDocument\n... # Suffix"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-3-bare-documents.yaml",
    "content": "Bare\ndocument\n...\n# No document\n...\n|\n%!PS-Adobe-2.0 # Not the first line"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-4-explicit-documents.yaml",
    "content": "---\n{ matches\n% : 20 }\n...\n---\n# Empty\n..."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-5-directives-documents.yaml",
    "content": "%YAML 1.2\n--- |\n%!PS-Adobe-2.0\n...\n%YAML1.2\n---\n# Empty\n..."
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/spec12-example-9-6-stream.yaml",
    "content": "Document\n---\n# Empty\n...\n%YAML 1.2\n---\nmatches %: 20"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/test/yaml/strange-keys.yaml",
    "content": "# http://yaml.kwiki.org/index.cgi?YtsStrangeKeys\n\n---\ntype: meta\ndescription: |\n    Test parsing of \"not nice\" mapping keys.\ndefault-type: load-expect\nperl: fail\nruby: 0.40\npython: skip\n\n# The tests themselves come below. One per YAML document.\n---\nname: Quoted line noise key\ntype: load-expect\nbrief: |\n    Check that quoted line noise parses as key.\nyaml: |\n    ---\n    \"!@#%\" : bar baz\nperl: |\n    {'!@#%' => 'bar baz'}\nruby: |\n    {'!@#%', 'bar baz'}\n\n---\nname: Unquoted line noise key\nbrief: |\n    Check that unquoted line noise parses as key.\n    This requires the line noise be tame enough\n    to pass as an implicit plain key.\nyaml: |\n    ---\n    -+!@#% : bar baz\nperl: |\n    {'-+!@#%' => 'bar baz'}\nruby: |\n    {'-+!@#%', 'bar baz'}"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/LICENSE",
    "content": "Copyright (c) 2006 Kirill Simonov\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 in\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\nThe above copyright notice and this permission notice shall be included in all\ncopies 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 THE\nSOFTWARE.\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/Makefile.am",
    "content": "## Run `./bootstrap` to generate the \"Makefile.in\" files in this directory and\n## the \"$SUBDIRS\" subdirectories.\n\nSUBDIRS = include src . tests win32\n\nEXTRA_DIST = README LICENSE doc/doxygen.cfg\n\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = yaml-0.1.pc\n\nmaintainer-clean-local:\n\t-rm -f aclocal.m4 config.h.in configure config/*\n\t-find ${builddir} -name Makefile.in -exec rm -f '{}' ';'\n\n.PHONY: bootstrap\nbootstrap: maintainer-clean\n\t./bootstrap\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/Makefile.in",
    "content": "# Makefile.in generated by automake 1.11.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,\n# 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\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = .\nDIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \\\n\t$(srcdir)/Makefile.in $(srcdir)/config.h.in \\\n\t$(srcdir)/yaml-0.1.pc.in $(top_srcdir)/configure \\\n\tconfig/config.guess config/config.sub config/depcomp \\\n\tconfig/install-sh config/ltmain.sh config/missing\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\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 config.status.lineno\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = config.h\nCONFIG_CLEAN_FILES = yaml-0.1.pc\nCONFIG_CLEAN_VPATH_FILES =\nSOURCES =\nDIST_SOURCES =\nRECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \\\n\thtml-recursive info-recursive install-data-recursive \\\n\tinstall-dvi-recursive install-exec-recursive \\\n\tinstall-html-recursive install-info-recursive \\\n\tinstall-pdf-recursive install-ps-recursive install-recursive \\\n\tinstallcheck-recursive installdirs-recursive pdf-recursive \\\n\tps-recursive uninstall-recursive\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__installdirs = \"$(DESTDIR)$(pkgconfigdir)\"\nDATA = $(pkgconfig_DATA)\nRECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive\t\\\n  distclean-recursive maintainer-clean-recursive\nAM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \\\n\t$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \\\n\tdistdir dist dist-all distcheck\nETAGS = etags\nCTAGS = ctags\nDIST_SUBDIRS = $(SUBDIRS)\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)\"; }; }\nam__relativize = \\\n  dir0=`pwd`; \\\n  sed_first='s,^\\([^/]*\\)/.*$$,\\1,'; \\\n  sed_rest='s,^[^/]*/*,,'; \\\n  sed_last='s,^.*/\\([^/]*\\)$$,\\1,'; \\\n  sed_butlast='s,/*[^/]*$$,,'; \\\n  while test -n \"$$dir1\"; do \\\n    first=`echo \"$$dir1\" | sed -e \"$$sed_first\"`; \\\n    if test \"$$first\" != \".\"; then \\\n      if test \"$$first\" = \"..\"; then \\\n        dir2=`echo \"$$dir0\" | sed -e \"$$sed_last\"`/\"$$dir2\"; \\\n        dir0=`echo \"$$dir0\" | sed -e \"$$sed_butlast\"`; \\\n      else \\\n        first2=`echo \"$$dir2\" | sed -e \"$$sed_first\"`; \\\n        if test \"$$first2\" = \"$$first\"; then \\\n          dir2=`echo \"$$dir2\" | sed -e \"$$sed_rest\"`; \\\n        else \\\n          dir2=\"../$$dir2\"; \\\n        fi; \\\n        dir0=\"$$dir0\"/\"$$first\"; \\\n      fi; \\\n    fi; \\\n    dir1=`echo \"$$dir1\" | sed -e \"$$sed_rest\"`; \\\n  done; \\\n  reldir=\"$$dir2\"\nDIST_ARCHIVES = $(distdir).tar.gz\nGZIP_ENV = --best\ndistuninstallcheck_listfiles = find . -type f -print\ndistcleancheck_listfiles = find . -type f -print\nACLOCAL = @ACLOCAL@\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@\nDOXYGEN = @DOXYGEN@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nYAML_LT_AGE = @YAML_LT_AGE@\nYAML_LT_CURRENT = @YAML_LT_CURRENT@\nYAML_LT_RELEASE = @YAML_LT_RELEASE@\nYAML_LT_REVISION = @YAML_LT_REVISION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nlt_ECHO = @lt_ECHO@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nSUBDIRS = include src . tests win32\nEXTRA_DIST = README LICENSE doc/doxygen.cfg\npkgconfigdir = $(libdir)/pkgconfig\npkgconfig_DATA = yaml-0.1.pc\nall: config.h\n\t$(MAKE) $(AM_MAKEFLAGS) all-recursive\n\n.SUFFIXES:\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) --foreign'; \\\n\t      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign 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\t$(am__cd) $(srcdir) && $(AUTOCONF)\n$(ACLOCAL_M4):  $(am__aclocal_m4_deps)\n\t$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)\n$(am__aclocal_m4_deps):\n\nconfig.h: stamp-h1\n\t@if test ! -f $@; then \\\n\t  rm -f stamp-h1; \\\n\t  $(MAKE) $(AM_MAKEFLAGS) 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\t($(am__cd) $(top_srcdir) && $(AUTOHEADER))\n\trm -f stamp-h1\n\ttouch $@\n\ndistclean-hdr:\n\t-rm -f config.h stamp-h1\nyaml-0.1.pc: $(top_builddir)/config.status $(srcdir)/yaml-0.1.pc.in\n\tcd $(top_builddir) && $(SHELL) ./config.status $@\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\ndistclean-libtool:\n\t-rm -f libtool config.lt\ninstall-pkgconfigDATA: $(pkgconfig_DATA)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(pkgconfigdir)\" || $(MKDIR_P) \"$(DESTDIR)$(pkgconfigdir)\"\n\t@list='$(pkgconfig_DATA)'; test -n \"$(pkgconfigdir)\" || list=; \\\n\tfor p in $$list; do \\\n\t  if test -f \"$$p\"; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; \\\n\tdone | $(am__base_list) | \\\n\twhile read files; do \\\n\t  echo \" $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'\"; \\\n\t  $(INSTALL_DATA) $$files \"$(DESTDIR)$(pkgconfigdir)\" || exit $$?; \\\n\tdone\n\nuninstall-pkgconfigDATA:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(pkgconfig_DATA)'; test -n \"$(pkgconfigdir)\" || list=; \\\n\tfiles=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \\\n\ttest -n \"$$files\" || exit 0; \\\n\techo \" ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f\" $$files \")\"; \\\n\tcd \"$(DESTDIR)$(pkgconfigdir)\" && rm -f $$files\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@fail= 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  ($(am__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\n$(RECURSIVE_CLEAN_TARGETS):\n\t@fail= 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  ($(am__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\" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \\\n\tdone\nctags-recursive:\n\tlist='$(SUBDIRS)'; for subdir in $$list; do \\\n\t  test \"$$subdir\" = . || ($(am__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; nonempty = 1; } \\\n\t      END { if (nonempty) { 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\tset x; \\\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      set \"$$@\" \"$$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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: CTAGS\nCTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__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$(am__remove_distdir)\n\ttest -d \"$(distdir)\" || mkdir \"$(distdir)\"\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\tlist='$(DISTFILES)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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@list='$(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  fi; \\\n\tdone\n\t@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    dir1=$$subdir; dir2=\"$(distdir)/$$subdir\"; \\\n\t    $(am__relativize); \\\n\t    new_distdir=$$reldir; \\\n\t    dir1=$$subdir; dir2=\"$(top_distdir)\"; \\\n\t    $(am__relativize); \\\n\t    new_top_distdir=$$reldir; \\\n\t    echo \" (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=\"$$new_top_distdir\" distdir=\"$$new_distdir\" \\\\\"; \\\n\t    echo \"     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)\"; \\\n\t    ($(am__cd) $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$new_top_distdir\" \\\n\t        distdir=\"$$new_distdir\" \\\n\t\tam__remove_distdir=: \\\n\t\tam__skip_length_check=: \\\n\t\tam__skip_mode_fix=: \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\n\t-test -n \"$(am__skip_mode_fix)\" \\\n\t|| find \"$(distdir)\" -type d ! -perm -755 \\\n\t\t-exec chmod u+rwx,go+rx {} \\; -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 $(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)\n\ndist-bzip2: distdir\n\ttardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2\n\t$(am__remove_distdir)\n\ndist-lzma: distdir\n\ttardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma\n\t$(am__remove_distdir)\n\ndist-xz: distdir\n\ttardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz\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\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) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\\\n\t*.tar.bz2*) \\\n\t  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\\\n\t*.tar.lzma*) \\\n\t  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\\\n\t*.tar.xz*) \\\n\t  xz -dc $(distdir).tar.xz | $(am__untar) ;;\\\n\t*.tar.Z*) \\\n\t  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\\\n\t*.shar.gz*) \\\n\t  GZIP=$(GZIP_ENV) gzip -dc $(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\ttest -d $(distdir)/_build || exit 0; \\\n\tdc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\\\/]:[\\\\/],/,'` \\\n\t  && dc_destdir=\"$${TMPDIR-/tmp}/am-dc-$$$$/\" \\\n\t  && am__cwd=`pwd` \\\n\t  && $(am__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  && cd \"$$am__cwd\" \\\n\t  || exit 1\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 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'\ndistuninstallcheck:\n\t@$(am__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\ncheck: check-recursive\nall-am: Makefile $(DATA) config.h\ninstalldirs: installdirs-recursive\ninstalldirs-am:\n\tfor dir in \"$(DESTDIR)$(pkgconfigdir)\"; 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 . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-recursive\n\nclean-am: clean-generic clean-libtool mostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -f $(am__CONFIG_DISTCLEAN_FILES)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-hdr \\\n\tdistclean-libtool distclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\nhtml: html-recursive\n\nhtml-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am: install-pkgconfigDATA\n\ninstall-dvi: install-dvi-recursive\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-recursive\n\ninstall-html-am:\n\ninstall-info: install-info-recursive\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-recursive\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-recursive\n\ninstall-ps-am:\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 -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic \\\n\tmaintainer-clean-local\n\nmostlyclean: mostlyclean-recursive\n\nmostlyclean-am: mostlyclean-generic mostlyclean-libtool\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am: uninstall-pkgconfigDATA\n\n.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \\\n\tctags-recursive install-am install-strip tags-recursive\n\n.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \\\n\tall all-am am--refresh check check-am clean clean-generic \\\n\tclean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \\\n\tdist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \\\n\tdistcheck distclean distclean-generic distclean-hdr \\\n\tdistclean-libtool distclean-tags distcleancheck distdir \\\n\tdistuninstallcheck dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-dvi \\\n\tinstall-dvi-am install-exec install-exec-am install-html \\\n\tinstall-html-am install-info install-info-am install-man \\\n\tinstall-pdf install-pdf-am install-pkgconfigDATA install-ps \\\n\tinstall-ps-am install-strip installcheck installcheck-am \\\n\tinstalldirs installdirs-am maintainer-clean \\\n\tmaintainer-clean-generic maintainer-clean-local mostlyclean \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-recursive uninstall uninstall-am \\\n\tuninstall-pkgconfigDATA\n\n\nmaintainer-clean-local:\n\t-rm -f aclocal.m4 config.h.in configure config/*\n\t-find ${builddir} -name Makefile.in -exec rm -f '{}' ';'\n\n.PHONY: bootstrap\nbootstrap: maintainer-clean\n\t./bootstrap\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/README",
    "content": "LibYAML - A C library for parsing and emitting YAML.\n\nTo build and install the library, run:\n$ ./configure\n$ make\n# make install\n\nIf you checked the source code from the Subversion repository, run\n$ ./bootstrap\n$ ./configure\n$ make\n# make install\n\nFor more information, check the LibYAML homepage:\n'http://pyyaml.org/wiki/LibYAML'.\n\nPost your questions and opinions to the YAML-Core mailing list:\n'http://lists.sourceforge.net/lists/listinfo/yaml-core'.\n\nSubmit bug reports and feature requests to the LibYAML bug tracker:\n'http://pyyaml.org/newticket?component=libyaml'.\n\nLibYAML is written by Kirill Simonov <xi@resolvent.net>.  It is released\nunder the MIT license.  See the file LICENSE for more details.\n\nThis project is developed for Python Software Foundation as a part of\nGoogle Summer of Code under the mentorship of Clark Evans.\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/aclocal.m4",
    "content": "# generated automatically by aclocal 1.11.1 -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006, 2007, 2008, 2009  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\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\nm4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],,\n[m4_warning([this file was generated for autoconf 2.67.\nYou have another version of autoconf.  It may work, but is not guaranteed to.\nIf you have problems, you may need to regenerate the build system entirely.\nTo do so, use the procedure documented by the package, typically `autoreconf'.])])\n\n# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008 Free Software Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\nm4_define([_LT_COPYING], [dnl\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008 Free Software Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n])\n\n# serial 56 LT_INIT\n\n\n# LT_PREREQ(VERSION)\n# ------------------\n# Complain and exit if this libtool version is less that VERSION.\nm4_defun([LT_PREREQ],\n[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,\n       [m4_default([$3],\n\t\t   [m4_fatal([Libtool version $1 or higher is required],\n\t\t             63)])],\n       [$2])])\n\n\n# _LT_CHECK_BUILDDIR\n# ------------------\n# Complain if the absolute build directory name contains unusual characters\nm4_defun([_LT_CHECK_BUILDDIR],\n[case `pwd` in\n  *\\ * | *\\\t*)\n    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;\nesac\n])\n\n\n# LT_INIT([OPTIONS])\n# ------------------\nAC_DEFUN([LT_INIT],\n[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT\nAC_BEFORE([$0], [LT_LANG])dnl\nAC_BEFORE([$0], [LT_OUTPUT])dnl\nAC_BEFORE([$0], [LTDL_INIT])dnl\nm4_require([_LT_CHECK_BUILDDIR])dnl\n\ndnl Autoconf doesn't catch unexpanded LT_ macros by default:\nm4_pattern_forbid([^_?LT_[A-Z_]+$])dnl\nm4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl\ndnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4\ndnl unless we require an AC_DEFUNed macro:\nAC_REQUIRE([LTOPTIONS_VERSION])dnl\nAC_REQUIRE([LTSUGAR_VERSION])dnl\nAC_REQUIRE([LTVERSION_VERSION])dnl\nAC_REQUIRE([LTOBSOLETE_VERSION])dnl\nm4_require([_LT_PROG_LTMAIN])dnl\n\ndnl Parse OPTIONS\n_LT_SET_OPTIONS([$0], [$1])\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\nAC_SUBST(LIBTOOL)dnl\n\n_LT_SETUP\n\n# Only expand once:\nm4_define([LT_INIT])\n])# LT_INIT\n\n# Old names:\nAU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])\nAU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PROG_LIBTOOL], [])\ndnl AC_DEFUN([AM_PROG_LIBTOOL], [])\n\n\n# _LT_CC_BASENAME(CC)\n# -------------------\n# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.\nm4_defun([_LT_CC_BASENAME],\n[for cc_temp in $1\"\"; do\n  case $cc_temp in\n    compile | *[[\\\\/]]compile | ccache | *[[\\\\/]]ccache ) ;;\n    distcc | *[[\\\\/]]distcc | purify | *[[\\\\/]]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n])\n\n\n# _LT_FILEUTILS_DEFAULTS\n# ----------------------\n# It is okay to use these file commands and assume they have been set\n# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.\nm4_defun([_LT_FILEUTILS_DEFAULTS],\n[: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n])# _LT_FILEUTILS_DEFAULTS\n\n\n# _LT_SETUP\n# ---------\nm4_defun([_LT_SETUP],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\n_LT_DECL([], [host_alias], [0], [The host system])dnl\n_LT_DECL([], [host], [0])dnl\n_LT_DECL([], [host_os], [0])dnl\ndnl\n_LT_DECL([], [build_alias], [0], [The build system])dnl\n_LT_DECL([], [build], [0])dnl\n_LT_DECL([], [build_os], [0])dnl\ndnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\ndnl\nAC_REQUIRE([AC_PROG_LN_S])dnl\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl\ndnl\nAC_REQUIRE([LT_CMD_MAX_LEN])dnl\n_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally \"o\")])dnl\n_LT_DECL([], [exeext], [0], [Executable file suffix (normally \"\")])dnl\ndnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_CHECK_SHELL_FEATURES])dnl\nm4_require([_LT_CMD_RELOAD])dnl\nm4_require([_LT_CHECK_MAGIC_METHOD])dnl\nm4_require([_LT_CMD_OLD_ARCHIVE])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\n\n_LT_CONFIG_LIBTOOL_INIT([\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n])\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n_LT_CHECK_OBJDIR\n\nm4_require([_LT_TAG_COMPILER])dnl\n_LT_PROG_ECHO_BACKSLASH\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nsed_quote_subst='s/\\([[\"`$\\\\]]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([[\"`\\\\]]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\n_LT_CC_BASENAME([$compiler])\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    _LT_PATH_MAGIC\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\nLT_SUPPORTED_TAG([CC])\n_LT_LANG_C_CONFIG\n_LT_LANG_DEFAULT_CONFIG\n_LT_CONFIG_COMMANDS\n])# _LT_SETUP\n\n\n# _LT_PROG_LTMAIN\n# ---------------\n# Note that this code is called both from `configure', and `config.status'\n# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,\n# `config.status' has no value for ac_aux_dir unless we are using Automake,\n# so we pass a copy along to make sure it has a sensible value anyway.\nm4_defun([_LT_PROG_LTMAIN],\n[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl\n_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])\nltmain=\"$ac_aux_dir/ltmain.sh\"\n])# _LT_PROG_LTMAIN\n\n\n\n# So that we can recreate a full libtool script including additional\n# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS\n# in macros and then make a single call at the end using the `libtool'\n# label.\n\n\n# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])\n# ----------------------------------------\n# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL_INIT],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_INIT])\n\n\n# _LT_CONFIG_LIBTOOL([COMMANDS])\n# ------------------------------\n# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])\n\n\n# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])\n# -----------------------------------------------------\nm4_defun([_LT_CONFIG_SAVE_COMMANDS],\n[_LT_CONFIG_LIBTOOL([$1])\n_LT_CONFIG_LIBTOOL_INIT([$2])\n])\n\n\n# _LT_FORMAT_COMMENT([COMMENT])\n# -----------------------------\n# Add leading comment marks to the start of each line, and a trailing\n# full-stop to the whole comment if one is not present already.\nm4_define([_LT_FORMAT_COMMENT],\n[m4_ifval([$1], [\nm4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],\n              [['`$\\]], [\\\\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])\n)])\n\n\n\n\n\n# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])\n# -------------------------------------------------------------------\n# CONFIGNAME is the name given to the value in the libtool script.\n# VARNAME is the (base) name used in the configure script.\n# VALUE may be 0, 1 or 2 for a computed quote escaped value based on\n# VARNAME.  Any other value will be used directly.\nm4_define([_LT_DECL],\n[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],\n    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],\n\t[m4_ifval([$1], [$1], [$2])])\n    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])\n    m4_ifval([$4],\n\t[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])\n    lt_dict_add_subkey([lt_decl_dict], [$2],\n\t[tagged?], [m4_ifval([$5], [yes], [no])])])\n])\n\n\n# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])\n# --------------------------------------------------------\nm4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])\n\n\n# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_tag_varnames],\n[_lt_decl_filter([tagged?], [yes], $@)])\n\n\n# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])\n# ---------------------------------------------------------\nm4_define([_lt_decl_filter],\n[m4_case([$#],\n  [0], [m4_fatal([$0: too few arguments: $#])],\n  [1], [m4_fatal([$0: too few arguments: $#: $1])],\n  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],\n  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],\n  [lt_dict_filter([lt_decl_dict], $@)])[]dnl\n])\n\n\n# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])\n# --------------------------------------------------\nm4_define([lt_decl_quote_varnames],\n[_lt_decl_filter([value], [1], $@)])\n\n\n# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_dquote_varnames],\n[_lt_decl_filter([value], [2], $@)])\n\n\n# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_varnames_tagged],\n[m4_assert([$# <= 2])dnl\n_$0(m4_quote(m4_default([$1], [[, ]])),\n    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),\n    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])\nm4_define([_lt_decl_varnames_tagged],\n[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])\n\n\n# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_all_varnames],\n[_$0(m4_quote(m4_default([$1], [[, ]])),\n     m4_if([$2], [],\n\t   m4_quote(lt_decl_varnames),\n\tm4_quote(m4_shift($@))))[]dnl\n])\nm4_define([_lt_decl_all_varnames],\n[lt_join($@, lt_decl_varnames_tagged([$1],\n\t\t\tlt_decl_tag_varnames([[, ]], m4_shift($@))))dnl\n])\n\n\n# _LT_CONFIG_STATUS_DECLARE([VARNAME])\n# ------------------------------------\n# Quote a variable value, and forward it to `config.status' so that its\n# declaration there will have the same value as in `configure'.  VARNAME\n# must have a single quote delimited value for this to work.\nm4_define([_LT_CONFIG_STATUS_DECLARE],\n[$1='`$ECHO \"X$][$1\" | $Xsed -e \"$delay_single_quote_subst\"`'])\n\n\n# _LT_CONFIG_STATUS_DECLARATIONS\n# ------------------------------\n# We delimit libtool config variables with single quotes, so when\n# we write them to config.status, we have to be sure to quote all\n# embedded single quotes properly.  In configure, this macro expands\n# each variable declared with _LT_DECL (and _LT_TAGDECL) into:\n#\n#    <var>='`$ECHO \"X$<var>\" | $Xsed -e \"$delay_single_quote_subst\"`'\nm4_defun([_LT_CONFIG_STATUS_DECLARATIONS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),\n    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAGS\n# ----------------\n# Output comment and list of tags supported by the script\nm4_defun([_LT_LIBTOOL_TAGS],\n[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl\navailable_tags=\"_LT_TAGS\"dnl\n])\n\n\n# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])\n# -----------------------------------\n# Extract the dictionary values for VARNAME (optionally with TAG) and\n# expand to a commented shell variable setting:\n#\n#    # Some comment about what VAR is for.\n#    visible_name=$lt_internal_name\nm4_define([_LT_LIBTOOL_DECLARE],\n[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],\n\t\t\t\t\t   [description])))[]dnl\nm4_pushdef([_libtool_name],\n    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl\nm4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),\n    [0], [_libtool_name=[$]$1],\n    [1], [_libtool_name=$lt_[]$1],\n    [2], [_libtool_name=$lt_[]$1],\n    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl\nm4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl\n])\n\n\n# _LT_LIBTOOL_CONFIG_VARS\n# -----------------------\n# Produce commented declarations of non-tagged libtool config variables\n# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'\n# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG\n# section) are produced by _LT_LIBTOOL_TAG_VARS.\nm4_defun([_LT_LIBTOOL_CONFIG_VARS],\n[m4_foreach([_lt_var],\n    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAG_VARS(TAG)\n# -------------------------\nm4_define([_LT_LIBTOOL_TAG_VARS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])\n\n\n# _LT_TAGVAR(VARNAME, [TAGNAME])\n# ------------------------------\nm4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])\n\n\n# _LT_CONFIG_COMMANDS\n# -------------------\n# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of\n# variables for single and double quote escaping we saved from calls\n# to _LT_DECL, we can put quote escaped variables declarations\n# into `config.status', and then the shell code to quote escape them in\n# for loops in `config.status'.  Finally, any additional code accumulated\n# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.\nm4_defun([_LT_CONFIG_COMMANDS],\n[AC_PROVIDE_IFELSE([LT_OUTPUT],\n\tdnl If the libtool generation code has been placed in $CONFIG_LT,\n\tdnl instead of duplicating it all over again into config.status,\n\tdnl then we will have config.status run $CONFIG_LT later, so it\n\tdnl needs to know what name is stored there:\n        [AC_CONFIG_COMMANDS([libtool],\n            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],\n    dnl If the libtool generation code is destined for config.status,\n    dnl expand the accumulated commands and init code now:\n    [AC_CONFIG_COMMANDS([libtool],\n        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])\n])#_LT_CONFIG_COMMANDS\n\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],\n[\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\n_LT_CONFIG_STATUS_DECLARATIONS\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# Quote evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_quote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \"X\\\\\\\\\\$\\$var\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"X\\\\\\$\\$var\\\\\" | \\\\\\$Xsed -e \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_dquote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \"X\\\\\\\\\\$\\$var\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"X\\\\\\$\\$var\\\\\" | \\\\\\$Xsed -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Fix-up fallback echo if it was mangled by the above quoting rules.\ncase \\$lt_ECHO in\n*'\\\\\\[$]0 --fallback-echo\"')dnl \"\n  lt_ECHO=\\`\\$ECHO \"X\\$lt_ECHO\" | \\$Xsed -e 's/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[$]0 --fallback-echo\"\\[$]/\\[$]0 --fallback-echo\"/'\\`\n  ;;\nesac\n\n_LT_OUTPUT_LIBTOOL_INIT\n])\n\n\n# LT_OUTPUT\n# ---------\n# This macro allows early generation of the libtool script (before\n# AC_OUTPUT is called), incase it is used in configure for compilation\n# tests.\nAC_DEFUN([LT_OUTPUT],\n[: ${CONFIG_LT=./config.lt}\nAC_MSG_NOTICE([creating $CONFIG_LT])\ncat >\"$CONFIG_LT\" <<_LTEOF\n#! $SHELL\n# Generated by $as_me.\n# Run this file to recreate a libtool stub with the current configuration.\n\nlt_cl_silent=false\nSHELL=\\${CONFIG_SHELL-$SHELL}\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nAS_SHELL_SANITIZE\n_AS_PREPARE\n\nexec AS_MESSAGE_FD>&1\nexec AS_MESSAGE_LOG_FD>>config.log\n{\n  echo\n  AS_BOX([Running $as_me.])\n} >&AS_MESSAGE_LOG_FD\n\nlt_cl_help=\"\\\n\\`$as_me' creates a local libtool stub from the current configuration,\nfor use in further configure time tests before the real libtool is\ngenerated.\n\nUsage: $[0] [[OPTIONS]]\n\n  -h, --help      print this help, then exit\n  -V, --version   print version number, then exit\n  -q, --quiet     do not print progress messages\n  -d, --debug     don't remove temporary files\n\nReport bugs to <bug-libtool@gnu.org>.\"\n\nlt_cl_version=\"\\\nm4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl\nm4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])\nconfigured by $[0], generated by m4_PACKAGE_STRING.\n\nCopyright (C) 2008 Free Software Foundation, Inc.\nThis config.lt script is free software; the Free Software Foundation\ngives unlimited permision to copy, distribute and modify it.\"\n\nwhile test $[#] != 0\ndo\n  case $[1] in\n    --version | --v* | -V )\n      echo \"$lt_cl_version\"; exit 0 ;;\n    --help | --h* | -h )\n      echo \"$lt_cl_help\"; exit 0 ;;\n    --debug | --d* | -d )\n      debug=: ;;\n    --quiet | --q* | --silent | --s* | -q )\n      lt_cl_silent=: ;;\n\n    -*) AC_MSG_ERROR([unrecognized option: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n\n    *) AC_MSG_ERROR([unrecognized argument: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n  esac\n  shift\ndone\n\nif $lt_cl_silent; then\n  exec AS_MESSAGE_FD>/dev/null\nfi\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<_LTEOF\n_LT_OUTPUT_LIBTOOL_COMMANDS_INIT\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nAC_MSG_NOTICE([creating $ofile])\n_LT_OUTPUT_LIBTOOL_COMMANDS\nAS_EXIT(0)\n_LTEOF\nchmod +x \"$CONFIG_LT\"\n\n# configure is writing to config.log, but config.lt does its own redirection,\n# appending to config.log, which fails on DOS, as config.log is still kept\n# open by configure.  Here we exec the FD to /dev/null, effectively closing\n# config.log, so it can be properly (re)opened and appended to by config.lt.\nif test \"$no_create\" != yes; then\n  lt_cl_success=:\n  test \"$silent\" = yes &&\n    lt_config_lt_args=\"$lt_config_lt_args --quiet\"\n  exec AS_MESSAGE_LOG_FD>/dev/null\n  $SHELL \"$CONFIG_LT\" $lt_config_lt_args || lt_cl_success=false\n  exec AS_MESSAGE_LOG_FD>>config.log\n  $lt_cl_success || AS_EXIT(1)\nfi\n])# LT_OUTPUT\n\n\n# _LT_CONFIG(TAG)\n# ---------------\n# If TAG is the built-in tag, create an initial libtool script with a\n# default configuration from the untagged config vars.  Otherwise add code\n# to config.status for appending the configuration named by TAG from the\n# matching tagged config vars.\nm4_defun([_LT_CONFIG],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_CONFIG_SAVE_COMMANDS([\n  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl\n  m4_if(_LT_TAG, [C], [\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n_LT_COPYING\n_LT_LIBTOOL_TAGS\n\n# ### BEGIN LIBTOOL CONFIG\n_LT_LIBTOOL_CONFIG_VARS\n_LT_LIBTOOL_TAG_VARS\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n  _LT_PROG_LTMAIN\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '/^# Generated shell functions inserted here/q' \"$ltmain\" >> \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\"; exit 1)\n\n  _LT_PROG_XSI_SHELLFNS\n\n  sed -n '/^# Generated shell functions inserted here/,$p' \"$ltmain\" >> \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\"; exit 1)\n\n  mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n],\n[cat <<_LT_EOF >> \"$ofile\"\n\ndnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded\ndnl in a comment (ie after a #).\n# ### BEGIN LIBTOOL TAG CONFIG: $1\n_LT_LIBTOOL_TAG_VARS(_LT_TAG)\n# ### END LIBTOOL TAG CONFIG: $1\n_LT_EOF\n])dnl /m4_if\n],\n[m4_if([$1], [], [\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'], [])\n])dnl /_LT_CONFIG_SAVE_COMMANDS\n])# _LT_CONFIG\n\n\n# LT_SUPPORTED_TAG(TAG)\n# ---------------------\n# Trace this macro to discover what tags are supported by the libtool\n# --tag option, using:\n#    autoconf --trace 'LT_SUPPORTED_TAG:$1'\nAC_DEFUN([LT_SUPPORTED_TAG], [])\n\n\n# C support is built-in for now\nm4_define([_LT_LANG_C_enabled], [])\nm4_define([_LT_TAGS], [])\n\n\n# LT_LANG(LANG)\n# -------------\n# Enable libtool support for the given language if not already enabled.\nAC_DEFUN([LT_LANG],\n[AC_BEFORE([$0], [LT_OUTPUT])dnl\nm4_case([$1],\n  [C],\t\t\t[_LT_LANG(C)],\n  [C++],\t\t[_LT_LANG(CXX)],\n  [Java],\t\t[_LT_LANG(GCJ)],\n  [Fortran 77],\t\t[_LT_LANG(F77)],\n  [Fortran],\t\t[_LT_LANG(FC)],\n  [Windows Resource],\t[_LT_LANG(RC)],\n  [m4_ifdef([_LT_LANG_]$1[_CONFIG],\n    [_LT_LANG($1)],\n    [m4_fatal([$0: unsupported language: \"$1\"])])])dnl\n])# LT_LANG\n\n\n# _LT_LANG(LANGNAME)\n# ------------------\nm4_defun([_LT_LANG],\n[m4_ifdef([_LT_LANG_]$1[_enabled], [],\n  [LT_SUPPORTED_TAG([$1])dnl\n  m4_append([_LT_TAGS], [$1 ])dnl\n  m4_define([_LT_LANG_]$1[_enabled], [])dnl\n  _LT_LANG_$1_CONFIG($1)])dnl\n])# _LT_LANG\n\n\n# _LT_LANG_DEFAULT_CONFIG\n# -----------------------\nm4_defun([_LT_LANG_DEFAULT_CONFIG],\n[AC_PROVIDE_IFELSE([AC_PROG_CXX],\n  [LT_LANG(CXX)],\n  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_F77],\n  [LT_LANG(F77)],\n  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_FC],\n  [LT_LANG(FC)],\n  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])\n\ndnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal\ndnl pulling things in needlessly.\nAC_PROVIDE_IFELSE([AC_PROG_GCJ],\n  [LT_LANG(GCJ)],\n  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],\n    [LT_LANG(GCJ)],\n    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],\n      [LT_LANG(GCJ)],\n      [m4_ifdef([AC_PROG_GCJ],\n\t[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([A][M_PROG_GCJ],\n\t[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([LT_PROG_GCJ],\n\t[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])\n\nAC_PROVIDE_IFELSE([LT_PROG_RC],\n  [LT_LANG(RC)],\n  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])\n])# _LT_LANG_DEFAULT_CONFIG\n\n# Obsolete macros:\nAU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])\nAU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])\nAU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])\nAU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_CXX], [])\ndnl AC_DEFUN([AC_LIBTOOL_F77], [])\ndnl AC_DEFUN([AC_LIBTOOL_FC], [])\ndnl AC_DEFUN([AC_LIBTOOL_GCJ], [])\n\n\n# _LT_TAG_COMPILER\n# ----------------\nm4_defun([_LT_TAG_COMPILER],\n[AC_REQUIRE([AC_PROG_CC])dnl\n\n_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl\n_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl\n_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl\n_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n])# _LT_TAG_COMPILER\n\n\n# _LT_COMPILER_BOILERPLATE\n# ------------------------\n# Check for compiler boilerplate output or warnings with\n# the simple compiler test code.\nm4_defun([_LT_COMPILER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n])# _LT_COMPILER_BOILERPLATE\n\n\n# _LT_LINKER_BOILERPLATE\n# ----------------------\n# Check for linker boilerplate output or warnings with\n# the simple link test code.\nm4_defun([_LT_LINKER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n])# _LT_LINKER_BOILERPLATE\n\n# _LT_REQUIRED_DARWIN_CHECKS\n# -------------------------\nm4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[\n  case $host_os in\n    rhapsody* | darwin*)\n    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])\n    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])\n    AC_CHECK_TOOL([LIPO], [lipo], [:])\n    AC_CHECK_TOOL([OTOOL], [otool], [:])\n    AC_CHECK_TOOL([OTOOL64], [otool64], [:])\n    _LT_DECL([], [DSYMUTIL], [1],\n      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])\n    _LT_DECL([], [NMEDIT], [1],\n      [Tool to change global to local symbols on Mac OS X])\n    _LT_DECL([], [LIPO], [1],\n      [Tool to manipulate fat objects and archives on Mac OS X])\n    _LT_DECL([], [OTOOL], [1],\n      [ldd/readelf like tool for Mach-O binaries on Mac OS X])\n    _LT_DECL([], [OTOOL64], [1],\n      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])\n\n    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],\n      [lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&AS_MESSAGE_LOG_FD\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\tif test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&AS_MESSAGE_LOG_FD\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi])\n    AC_CACHE_CHECK([for -exported_symbols_list linker flag],\n      [lt_cv_ld_exported_symbols_list],\n      [lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\n      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n\t[lt_cv_ld_exported_symbols_list=yes],\n\t[lt_cv_ld_exported_symbols_list=no])\n\tLDFLAGS=\"$save_LDFLAGS\"\n    ])\n    case $host_os in\n    rhapsody* | darwin1.[[012]])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[[012]]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\n])\n\n\n# _LT_DARWIN_LINKER_FEATURES\n# --------------------------\n# Checks for linker and compiler features on darwin\nm4_defun([_LT_DARWIN_LINKER_FEATURES],\n[\n  m4_require([_LT_REQUIRED_DARWIN_CHECKS])\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_automatic, $1)=yes\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  _LT_TAGVAR(whole_archive_flag_spec, $1)=''\n  _LT_TAGVAR(link_all_deplibs, $1)=yes\n  _LT_TAGVAR(allow_undefined_flag, $1)=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=echo\n    _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    _LT_TAGVAR(module_cmds, $1)=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    _LT_TAGVAR(module_expsym_cmds, $1)=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n    m4_if([$1], [CXX],\n[   if test \"$lt_cv_apple_cc_single_mod\" != \"yes\"; then\n      _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dsymutil}\"\n      _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dar_export_syms}${_lt_dsymutil}\"\n    fi\n],[])\n  else\n  _LT_TAGVAR(ld_shlibs, $1)=no\n  fi\n])\n\n# _LT_SYS_MODULE_PATH_AIX\n# -----------------------\n# Links a minimal program and checks the executable\n# for the system default hardcoded library path. In most cases,\n# this is /usr/lib:/lib, but when the MPI compilers are used\n# the location of the communication and MPI libs are included too.\n# If we don't find anything, use the default library path according\n# to the aix ld manual.\nm4_defun([_LT_SYS_MODULE_PATH_AIX],\n[m4_require([_LT_DECL_SED])dnl\nAC_LINK_IFELSE(AC_LANG_PROGRAM,[\nlt_aix_libpath_sed='\n    /Import File Strings/,/^$/ {\n\t/^0/ {\n\t    s/^0  *\\(.*\\)$/\\1/\n\t    p\n\t}\n    }'\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then\n  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\nfi],[])\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n])# _LT_SYS_MODULE_PATH_AIX\n\n\n# _LT_SHELL_INIT(ARG)\n# -------------------\nm4_define([_LT_SHELL_INIT],\n[ifdef([AC_DIVERSION_NOTICE],\n\t     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],\n\t [AC_DIVERT_PUSH(NOTICE)])\n$1\nAC_DIVERT_POP\n])# _LT_SHELL_INIT\n\n\n# _LT_PROG_ECHO_BACKSLASH\n# -----------------------\n# Add some code to the start of the generated configure script which\n# will find an echo command which doesn't interpret backslashes.\nm4_defun([_LT_PROG_ECHO_BACKSLASH],\n[_LT_SHELL_INIT([\n# Check that we are running under the correct shell.\nSHELL=${CONFIG_SHELL-/bin/sh}\n\ncase X$lt_ECHO in\nX*--fallback-echo)\n  # Remove one level of quotation (which was required for Make).\n  ECHO=`echo \"$lt_ECHO\" | sed 's,\\\\\\\\\\[$]\\\\[$]0,'[$]0','`\n  ;;\nesac\n\nECHO=${lt_ECHO-echo}\nif test \"X[$]1\" = X--no-reexec; then\n  # Discard the --no-reexec flag, and continue.\n  shift\nelif test \"X[$]1\" = X--fallback-echo; then\n  # Avoid inline document here, it may be left over\n  :\nelif test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' ; then\n  # Yippee, $ECHO works!\n  :\nelse\n  # Restart under the correct shell.\n  exec $SHELL \"[$]0\" --no-reexec ${1+\"[$]@\"}\nfi\n\nif test \"X[$]1\" = X--fallback-echo; then\n  # used as fallback echo\n  shift\n  cat <<_LT_EOF\n[$]*\n_LT_EOF\n  exit 0\nfi\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test -z \"$lt_ECHO\"; then\n  if test \"X${echo_test_string+set}\" != Xset; then\n    # find a string as large as possible, as long as the shell can cope with it\n    for cmd in 'sed 50q \"[$]0\"' 'sed 20q \"[$]0\"' 'sed 10q \"[$]0\"' 'sed 2q \"[$]0\"' 'echo test'; do\n      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...\n      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&\n\t { test \"X$echo_test_string\" = \"X$echo_test_string\"; } 2>/dev/null\n      then\n        break\n      fi\n    done\n  fi\n\n  if test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n     echo_testing_string=`{ $ECHO \"$echo_test_string\"; } 2>/dev/null` &&\n     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n    :\n  else\n    # The Solaris, AIX, and Digital Unix default echo programs unquote\n    # backslashes.  This makes it impossible to quote backslashes using\n    #   echo \"$something\" | sed 's/\\\\/\\\\\\\\/g'\n    #\n    # So, first we look for a working echo in the user's PATH.\n\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for dir in $PATH /usr/ucb; do\n      IFS=\"$lt_save_ifs\"\n      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&\n         test \"X`($dir/echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n         echo_testing_string=`($dir/echo \"$echo_test_string\") 2>/dev/null` &&\n         test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n        ECHO=\"$dir/echo\"\n        break\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n\n    if test \"X$ECHO\" = Xecho; then\n      # We didn't find a better echo, so look for alternatives.\n      if test \"X`{ print -r '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n         echo_testing_string=`{ print -r \"$echo_test_string\"; } 2>/dev/null` &&\n         test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n        # This shell has a builtin print -r that does the trick.\n        ECHO='print -r'\n      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&\n\t   test \"X$CONFIG_SHELL\" != X/bin/ksh; then\n        # If we have ksh, try running configure again with it.\n        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}\n        export ORIGINAL_CONFIG_SHELL\n        CONFIG_SHELL=/bin/ksh\n        export CONFIG_SHELL\n        exec $CONFIG_SHELL \"[$]0\" --no-reexec ${1+\"[$]@\"}\n      else\n        # Try using printf.\n        ECHO='printf %s\\n'\n        if test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n\t   echo_testing_string=`{ $ECHO \"$echo_test_string\"; } 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  # Cool, printf works\n\t  :\n        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"[$]0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = 'X\\t' &&\n\t     echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"[$]0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL\n\t  export CONFIG_SHELL\n\t  SHELL=\"$CONFIG_SHELL\"\n\t  export SHELL\n\t  ECHO=\"$CONFIG_SHELL [$]0 --fallback-echo\"\n        elif echo_testing_string=`($CONFIG_SHELL \"[$]0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = 'X\\t' &&\n\t     echo_testing_string=`($CONFIG_SHELL \"[$]0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  ECHO=\"$CONFIG_SHELL [$]0 --fallback-echo\"\n        else\n\t  # maybe with a smaller string...\n\t  prev=:\n\n\t  for cmd in 'echo test' 'sed 2q \"[$]0\"' 'sed 10q \"[$]0\"' 'sed 20q \"[$]0\"' 'sed 50q \"[$]0\"'; do\n\t    if { test \"X$echo_test_string\" = \"X`eval $cmd`\"; } 2>/dev/null\n\t    then\n\t      break\n\t    fi\n\t    prev=\"$cmd\"\n\t  done\n\n\t  if test \"$prev\" != 'sed 50q \"[$]0\"'; then\n\t    echo_test_string=`eval $prev`\n\t    export echo_test_string\n\t    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} \"[$]0\" ${1+\"[$]@\"}\n\t  else\n\t    # Oops.  We lost completely, so just stick with echo.\n\t    ECHO=echo\n\t  fi\n        fi\n      fi\n    fi\n  fi\nfi\n\n# Copy echo and quote the copy suitably for passing to libtool from\n# the Makefile, instead of quoting the original, which is used later.\nlt_ECHO=$ECHO\nif test \"X$lt_ECHO\" = \"X$CONFIG_SHELL [$]0 --fallback-echo\"; then\n   lt_ECHO=\"$CONFIG_SHELL \\\\\\$\\[$]0 --fallback-echo\"\nfi\n\nAC_SUBST(lt_ECHO)\n])\n_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])\n_LT_DECL([], [ECHO], [1],\n    [An echo program that does not interpret backslashes])\n])# _LT_PROG_ECHO_BACKSLASH\n\n\n# _LT_ENABLE_LOCK\n# ---------------\nm4_defun([_LT_ENABLE_LOCK],\n[AC_ARG_ENABLE([libtool-lock],\n  [AS_HELP_STRING([--disable-libtool-lock],\n    [avoid locking (might break parallel builds)])])\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '[#]line __oline__ \"configure\"' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_i386\"\n\t    ;;\n\t  ppc64-*linux*|powerpc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  ppc*-*linux*|powerpc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,\n    [AC_LANG_PUSH(C)\n     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])\n     AC_LANG_POP])\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\nsparc*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*) LD=\"${LD-ld} -m elf64_sparc\" ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n])# _LT_ENABLE_LOCK\n\n\n# _LT_CMD_OLD_ARCHIVE\n# -------------------\nm4_defun([_LT_CMD_OLD_ARCHIVE],\n[AC_CHECK_TOOL(AR, ar, false)\ntest -z \"$AR\" && AR=ar\ntest -z \"$AR_FLAGS\" && AR_FLAGS=cru\n_LT_DECL([], [AR], [1], [The archiver])\n_LT_DECL([], [AR_FLAGS], [1])\n\nAC_CHECK_TOOL(STRIP, strip, :)\ntest -z \"$STRIP\" && STRIP=:\n_LT_DECL([], [STRIP], [1], [A symbol stripping program])\n\nAC_CHECK_TOOL(RANLIB, ranlib, :)\ntest -z \"$RANLIB\" && RANLIB=:\n_LT_DECL([], [RANLIB], [1],\n    [Commands used to install an old-style archive])\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$oldlib\"\nfi\n_LT_DECL([], [old_postinstall_cmds], [2])\n_LT_DECL([], [old_postuninstall_cmds], [2])\n_LT_TAGDECL([], [old_archive_cmds], [2],\n    [Commands used to build an old-style archive])\n])# _LT_CMD_OLD_ARCHIVE\n\n\n# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#\t\t[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------------------\n# Check whether the given compiler option works\nAC_DEFUN([_LT_COMPILER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$3\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:__oline__: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:__oline__: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       $2=yes\n     fi\n   fi\n   $RM conftest*\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$5], , :, [$5])\nelse\n    m4_if([$6], , :, [$6])\nfi\n])# _LT_COMPILER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])\n\n\n# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#                  [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------\n# Check whether the given linker option works\nAC_DEFUN([_LT_LINKER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $3\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&AS_MESSAGE_LOG_FD\n       $ECHO \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         $2=yes\n       fi\n     else\n       $2=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$4], , :, [$4])\nelse\n    m4_if([$5], , :, [$5])\nfi\n])# _LT_LINKER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])\n\n\n# LT_CMD_MAX_LEN\n#---------------\nAC_DEFUN([LT_CMD_MAX_LEN],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n# find the maximum length of command line arguments\nAC_MSG_CHECKING([the maximum length of command line arguments])\nAC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl\n  i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[\t ]]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`$SHELL [$]0 --fallback-echo \"X$teststring$teststring\" 2>/dev/null` \\\n\t         = \"XX$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n])\nif test -n $lt_cv_sys_max_cmd_len ; then\n  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)\nelse\n  AC_MSG_RESULT(none)\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n_LT_DECL([], [max_cmd_len], [0],\n    [What is the maximum length of a command?])\n])# LT_CMD_MAX_LEN\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])\n\n\n# _LT_HEADER_DLFCN\n# ----------------\nm4_defun([_LT_HEADER_DLFCN],\n[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl\n])# _LT_HEADER_DLFCN\n\n\n# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,\n#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)\n# ----------------------------------------------------------------\nm4_defun([_LT_TRY_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"$cross_compiling\" = yes; then :\n  [$4]\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n[#line __oline__ \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}]\n_LT_EOF\n  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) $1 ;;\n      x$lt_dlneed_uscore) $2 ;;\n      x$lt_dlunknown|x*) $3 ;;\n    esac\n  else :\n    # compilation failed\n    $3\n  fi\nfi\nrm -fr conftest*\n])# _LT_TRY_DLOPEN_SELF\n\n\n# LT_SYS_DLOPEN_SELF\n# ------------------\nAC_DEFUN([LT_SYS_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],[\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ])\n    ;;\n\n  *)\n    AC_CHECK_FUNC([shl_load],\n\t  [lt_cv_dlopen=\"shl_load\"],\n      [AC_CHECK_LIB([dld], [shl_load],\n\t    [lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"],\n\t[AC_CHECK_FUNC([dlopen],\n\t      [lt_cv_dlopen=\"dlopen\"],\n\t  [AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],\n\t    [AC_CHECK_LIB([svld], [dlopen],\n\t\t  [lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"],\n\t      [AC_CHECK_LIB([dld], [dld_link],\n\t\t    [lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"])\n\t      ])\n\t    ])\n\t  ])\n\t])\n      ])\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    AC_CACHE_CHECK([whether a program can dlopen itself],\n\t  lt_cv_dlopen_self, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,\n\t    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)\n    ])\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],\n\t  lt_cv_dlopen_self_static, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,\n\t    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)\n      ])\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n_LT_DECL([dlopen_support], [enable_dlopen], [0],\n\t [Whether dlopen is supported])\n_LT_DECL([dlopen_self], [enable_dlopen_self], [0],\n\t [Whether dlopen of programs is supported])\n_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],\n\t [Whether dlopen of statically linked programs is supported])\n])# LT_SYS_DLOPEN_SELF\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])\n\n\n# _LT_COMPILER_C_O([TAGNAME])\n# ---------------------------\n# Check to see if options -c and -o are simultaneously supported by compiler.\n# This macro does not hard code the compiler like AC_PROG_CC_C_O.\nm4_defun([_LT_COMPILER_C_O],\n[m4_require([_LT_DECL_SED])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:__oline__: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:__oline__: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n     fi\n   fi\n   chmod u+w . 2>&AS_MESSAGE_LOG_FD\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n])\n_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],\n\t[Does compiler simultaneously support -c and -o options?])\n])# _LT_COMPILER_C_O\n\n\n# _LT_COMPILER_FILE_LOCKS([TAGNAME])\n# ----------------------------------\n# Check to see if we can do hard links to lock some files if needed\nm4_defun([_LT_COMPILER_FILE_LOCKS],\n[m4_require([_LT_ENABLE_LOCK])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_COMPILER_C_O([$1])\n\nhard_links=\"nottested\"\nif test \"$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  AC_MSG_CHECKING([if we can lock with hard links])\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  AC_MSG_RESULT([$hard_links])\n  if test \"$hard_links\" = no; then\n    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])\n])# _LT_COMPILER_FILE_LOCKS\n\n\n# _LT_CHECK_OBJDIR\n# ----------------\nm4_defun([_LT_CHECK_OBJDIR],\n[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],\n[rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null])\nobjdir=$lt_cv_objdir\n_LT_DECL([], [objdir], [0],\n         [The name of the directory that contains temporary libtool files])dnl\nm4_pattern_allow([LT_OBJDIR])dnl\nAC_DEFINE_UNQUOTED(LT_OBJDIR, \"$lt_cv_objdir/\",\n  [Define to the sub-directory in which libtool stores uninstalled libraries.])\n])# _LT_CHECK_OBJDIR\n\n\n# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])\n# --------------------------------------\n# Check hardcoding attributes.\nm4_defun([_LT_LINKER_HARDCODE_LIBPATH],\n[AC_MSG_CHECKING([how to hardcode library paths into programs])\n_LT_TAGVAR(hardcode_action, $1)=\nif test -n \"$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\" ||\n   test -n \"$_LT_TAGVAR(runpath_var, $1)\" ||\n   test \"X$_LT_TAGVAR(hardcode_automatic, $1)\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$_LT_TAGVAR(hardcode_direct, $1)\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, $1)\" != no &&\n     test \"$_LT_TAGVAR(hardcode_minus_L, $1)\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    _LT_TAGVAR(hardcode_action, $1)=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    _LT_TAGVAR(hardcode_action, $1)=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  _LT_TAGVAR(hardcode_action, $1)=unsupported\nfi\nAC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])\n\nif test \"$_LT_TAGVAR(hardcode_action, $1)\" = relink ||\n   test \"$_LT_TAGVAR(inherit_rpath, $1)\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n_LT_TAGDECL([], [hardcode_action], [0],\n    [How to hardcode a shared library path into an executable])\n])# _LT_LINKER_HARDCODE_LIBPATH\n\n\n# _LT_CMD_STRIPLIB\n# ----------------\nm4_defun([_LT_CMD_STRIPLIB],\n[m4_require([_LT_DECL_EGREP])\nstriplib=\nold_striplib=\nAC_MSG_CHECKING([whether stripping libraries is possible])\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  AC_MSG_RESULT([yes])\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      AC_MSG_RESULT([yes])\n    else\n      AC_MSG_RESULT([no])\n    fi\n    ;;\n  *)\n    AC_MSG_RESULT([no])\n    ;;\n  esac\nfi\n_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])\n_LT_DECL([], [striplib], [1])\n])# _LT_CMD_STRIPLIB\n\n\n# _LT_SYS_DYNAMIC_LINKER([TAG])\n# -----------------------------\n# PORTME Fill in your ld.so characteristics\nm4_defun([_LT_SYS_DYNAMIC_LINKER],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_OBJDUMP])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_MSG_CHECKING([dynamic linker characteristics])\nm4_if([$1],\n\t[], [\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if $ECHO \"$lt_search_path_spec\" | $GREP ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[[lt_foo]]++; }\n  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }\n}'`\n  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi])\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[[4-9]]*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[[01]] | aix4.[[01]].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO \"X$lib\" | $Xsed -e '\\''s%^.*/\\([[^/]]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[[45]]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if $ECHO \"$sys_lib_search_path_spec\" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\nm4_if([$1], [],[\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"])\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[[123]]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[[01]]* | freebsdelf3.[[01]]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \\\n  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix[[3-9]]*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # Some binutils ld are patched to set DT_RUNPATH\n  save_LDFLAGS=$LDFLAGS\n  save_libdir=$libdir\n  eval \"libdir=/foo; wl=\\\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\\\"; \\\n       LDFLAGS=\\\"\\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\\\"\"\n  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null],\n       [shlibpath_overrides_runpath=yes])])\n  LDFLAGS=$save_LDFLAGS\n  libdir=$save_libdir\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\[$]2)); skip = 1; } { if (!skip) print \\[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[[89]] | openbsd2.[[89]].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\nAC_MSG_RESULT([$dynamic_linker])\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n_LT_DECL([], [variables_saved_for_relink], [1],\n    [Variables whose values should be saved in libtool wrapper scripts and\n    restored at link time])\n_LT_DECL([], [need_lib_prefix], [0],\n    [Do we need the \"lib\" prefix for modules?])\n_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])\n_LT_DECL([], [version_type], [0], [Library versioning type])\n_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])\n_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])\n_LT_DECL([], [shlibpath_overrides_runpath], [0],\n    [Is shlibpath searched before the hard-coded library search path?])\n_LT_DECL([], [libname_spec], [1], [Format of library name prefix])\n_LT_DECL([], [library_names_spec], [1],\n    [[List of archive names.  First name is the real one, the rest are links.\n    The last name is the one that the linker finds with -lNAME]])\n_LT_DECL([], [soname_spec], [1],\n    [[The coded name of the library, if different from the real name]])\n_LT_DECL([], [postinstall_cmds], [2],\n    [Command to use after installation of a shared archive])\n_LT_DECL([], [postuninstall_cmds], [2],\n    [Command to use after uninstallation of a shared archive])\n_LT_DECL([], [finish_cmds], [2],\n    [Commands used to finish a libtool library installation in a directory])\n_LT_DECL([], [finish_eval], [1],\n    [[As \"finish_cmds\", except a single script fragment to be evaled but\n    not shown]])\n_LT_DECL([], [hardcode_into_libs], [0],\n    [Whether we should hardcode library paths into libraries])\n_LT_DECL([], [sys_lib_search_path_spec], [2],\n    [Compile-time system search path for libraries])\n_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],\n    [Run-time system search path for libraries])\n])# _LT_SYS_DYNAMIC_LINKER\n\n\n# _LT_PATH_TOOL_PREFIX(TOOL)\n# --------------------------\n# find a file program which can recognize shared library\nAC_DEFUN([_LT_PATH_TOOL_PREFIX],\n[m4_require([_LT_DECL_EGREP])dnl\nAC_MSG_CHECKING([for $1])\nAC_CACHE_VAL(lt_cv_path_MAGIC_CMD,\n[case $MAGIC_CMD in\n[[\\\\/*] |  ?:[\\\\/]*])\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\ndnl $ac_dummy forces splitting on constant user-supplied paths.\ndnl POSIX.2 word splitting is done only on the output of word expansions,\ndnl not every word.  This closes a longstanding sh security hole.\n  ac_dummy=\"m4_if([$2], , $PATH, [$2])\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/$1; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/$1\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac])\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  AC_MSG_RESULT($MAGIC_CMD)\nelse\n  AC_MSG_RESULT(no)\nfi\n_LT_DECL([], [MAGIC_CMD], [0],\n\t [Used to examine libraries when file_magic_cmd begins with \"file\"])dnl\n])# _LT_PATH_TOOL_PREFIX\n\n# Old name:\nAU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])\n\n\n# _LT_PATH_MAGIC\n# --------------\n# find a file program which can recognize a shared library\nm4_defun([_LT_PATH_MAGIC],\n[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)\n  else\n    MAGIC_CMD=:\n  fi\nfi\n])# _LT_PATH_MAGIC\n\n\n# LT_PATH_LD\n# ----------\n# find the pathname to the GNU or non-GNU linker\nAC_DEFUN([LT_PATH_LD],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\n\nAC_ARG_WITH([gnu-ld],\n    [AS_HELP_STRING([--with-gnu-ld],\n\t[assume the C compiler uses GNU ld @<:@default=no@:>@])],\n    [test \"$withval\" = no || with_gnu_ld=yes],\n    [with_gnu_ld=no])dnl\n\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 $CC])\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    [[\\\\/]]* | ?:[[\\\\/]]*)\n      re_direlt='/[[^/]][[^/]]*/\\.\\./'\n      # Canonicalize the pathname 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(lt_cv_path_LD,\n[if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$lt_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])\n_LT_PATH_LD_GNU\nAC_SUBST([LD])\n\n_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])\n])# LT_PATH_LD\n\n# Old names:\nAU_ALIAS([AM_PROG_LD], [LT_PATH_LD])\nAU_ALIAS([AC_PROG_LD], [LT_PATH_LD])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_LD], [])\ndnl AC_DEFUN([AC_PROG_LD], [])\n\n\n# _LT_PATH_LD_GNU\n#- --------------\nm4_defun([_LT_PATH_LD_GNU],\n[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac])\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n])# _LT_PATH_LD_GNU\n\n\n# _LT_CMD_RELOAD\n# --------------\n# find reload flag for linker\n#   -- PORTME Some linkers may need a different reload flag.\nm4_defun([_LT_CMD_RELOAD],\n[AC_CACHE_CHECK([for $LD option to reload object files],\n  lt_cv_ld_reload_flag,\n  [lt_cv_ld_reload_flag='-r'])\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl\n_LT_DECL([], [reload_cmds], [2])dnl\n])# _LT_CMD_RELOAD\n\n\n# _LT_CHECK_MAGIC_METHOD\n# ----------------------\n# how to check for library dependencies\n#  -- PORTME fill in with the dynamic library characteristics\nm4_defun([_LT_CHECK_MAGIC_METHOD],\n[m4_require([_LT_DECL_EGREP])\nm4_require([_LT_DECL_OBJDUMP])\nAC_CACHE_CHECK([how to recognize dependent libraries],\nlt_cv_deplibs_check_method,\n[lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[[4-9]]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[[45]]*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  if ( file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\ngnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[[3-9]]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n])\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n_LT_DECL([], [deplibs_check_method], [1],\n    [Method to check whether dependent libraries are shared objects])\n_LT_DECL([], [file_magic_cmd], [1],\n    [Command to use when deplibs_check_method == \"file_magic\"])\n])# _LT_CHECK_MAGIC_METHOD\n\n\n# LT_PATH_NM\n# ----------\n# find the pathname to a BSD- or MS-compatible name lister\nAC_DEFUN([LT_PATH_NM],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,\n[if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi])\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  AC_CHECK_TOOLS(DUMPBIN, [\"dumpbin -symbols\" \"link -dump -symbols\"], :)\n  AC_SUBST([DUMPBIN])\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\nAC_SUBST([NM])\n_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl\n\nAC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],\n  [lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:__oline__: $ac_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:__oline__: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:__oline__: output\\\"\" >&AS_MESSAGE_LOG_FD)\n  cat conftest.out >&AS_MESSAGE_LOG_FD\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*])\n])# LT_PATH_NM\n\n# Old names:\nAU_ALIAS([AM_PROG_NM], [LT_PATH_NM])\nAU_ALIAS([AC_PROG_NM], [LT_PATH_NM])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_NM], [])\ndnl AC_DEFUN([AC_PROG_NM], [])\n\n\n# LT_LIB_M\n# --------\n# check for math library\nAC_DEFUN([LT_LIB_M],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nLIBM=\ncase $host in\n*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)\n  # These system don't have libm, or don't need it\n  ;;\n*-ncr-sysv4.3*)\n  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=\"-lmw\")\n  AC_CHECK_LIB(m, cos, LIBM=\"$LIBM -lm\")\n  ;;\n*)\n  AC_CHECK_LIB(m, cos, LIBM=\"-lm\")\n  ;;\nesac\nAC_SUBST([LIBM])\n])# LT_LIB_M\n\n# Old name:\nAU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_CHECK_LIBM], [])\n\n\n# _LT_COMPILER_NO_RTTI([TAGNAME])\n# -------------------------------\nm4_defun([_LT_COMPILER_NO_RTTI],\n[m4_require([_LT_TAG_COMPILER])dnl\n\n_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n\nif test \"$GCC\" = yes; then\n  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\n\n  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],\n    lt_cv_prog_compiler_rtti_exceptions,\n    [-fno-rtti -fno-exceptions], [],\n    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\"$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions\"])\nfi\n_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],\n\t[Compiler flag to turn off builtin functions])\n])# _LT_COMPILER_NO_RTTI\n\n\n# _LT_CMD_GLOBAL_SYMBOLS\n# ----------------------\nm4_defun([_LT_CMD_GLOBAL_SYMBOLS],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_TAG_COMPILER])dnl\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\nAC_MSG_CHECKING([command to parse $NM output from $compiler object])\nAC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],\n[\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[[BCDEGRST]]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([[_A-Za-z]][[_A-Za-z0-9]]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[[BCDT]]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[[ABCDGISTW]]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[[ABCDEGRST]]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[[BCDEGRST]]'\n  ;;\nosf*)\n  symcode='[[BCDEGQRST]]'\n  ;;\nsolaris*)\n  symcode='[[BDRT]]'\n  ;;\nsco3.2v5*)\n  symcode='[[DT]]'\n  ;;\nsysv4.2uw2*)\n  symcode='[[DT]]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[[ABDT]]'\n  ;;\nsysv4)\n  symcode='[[DFNSTU]]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[[ABCDGIRSTW]]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\) $/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([[^ ]]*\\) $/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\(lib[[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK ['\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx]\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[[\t ]]\\($symcode$symcode*\\)[[\t ]][[\t ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if AC_TRY_EVAL(ac_compile); then\n    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if AC_TRY_EVAL(NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist) && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nconst struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[[]] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_save_LIBS=\"$LIBS\"\n\t  lt_save_CFLAGS=\"$CFLAGS\"\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)\"\n\t  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=\"$lt_save_LIBS\"\n\t  CFLAGS=\"$lt_save_CFLAGS\"\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&AS_MESSAGE_LOG_FD\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&AS_MESSAGE_LOG_FD\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&AS_MESSAGE_LOG_FD\n    fi\n  else\n    echo \"$progname: failed program was:\" >&AS_MESSAGE_LOG_FD\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n])\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  AC_MSG_RESULT(failed)\nelse\n  AC_MSG_RESULT(ok)\nfi\n\n_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],\n    [Take the output of nm and produce a listing of raw symbols and C names])\n_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],\n    [Transform the output of nm in a proper C declaration])\n_LT_DECL([global_symbol_to_c_name_address],\n    [lt_cv_sys_global_symbol_to_c_name_address], [1],\n    [Transform the output of nm in a C name address pair])\n_LT_DECL([global_symbol_to_c_name_address_lib_prefix],\n    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],\n    [Transform the output of nm in a C name address pair when lib prefix is needed])\n]) # _LT_CMD_GLOBAL_SYMBOLS\n\n\n# _LT_COMPILER_PIC([TAGNAME])\n# ---------------------------\nm4_defun([_LT_COMPILER_PIC],\n[m4_require([_LT_TAG_COMPILER])dnl\n_LT_TAGVAR(lt_prog_compiler_wl, $1)=\n_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n_LT_TAGVAR(lt_prog_compiler_static, $1)=\n\nAC_MSG_CHECKING([for $compiler option to produce PIC])\nm4_if([$1], [CXX], [\n  # C++ specific cases for pic, static, wl, etc.\n  if test \"$GXX\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n    aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n    mingw* | cygwin* | os2* | pw32* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n    *djgpp*)\n      # DJGPP does not support shared libraries at all\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n      ;;\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n    *qnx* | *nto*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    case $host_os in\n      aix[[4-9]]*)\n\t# All AIX code is PIC.\n\tif test \"$host_cpu\" = ia64; then\n\t  # AIX 5 now supports IA64 processor\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\telse\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n\tfi\n\t;;\n      chorus*)\n\tcase $cc_basename in\n\tcxch68*)\n\t  # Green Hills C++ Compiler\n\t  # _LT_TAGVAR(lt_prog_compiler_static, $1)=\"--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a\"\n\t  ;;\n\tesac\n\t;;\n      dgux*)\n\tcase $cc_basename in\n\t  ec++*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  ghcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      freebsd* | dragonfly*)\n\t# FreeBSD uses GNU C++\n\t;;\n      hpux9* | hpux10* | hpux11*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    if test \"$host_cpu\" != ia64; then\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t    fi\n\t    ;;\n\t  aCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    case $host_cpu in\n\t    hppa*64*|ia64*)\n\t      # +Z the default\n\t      ;;\n\t    *)\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t      ;;\n\t    esac\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      interix*)\n\t# This is c89, which is MS Visual C++ (no shared libs)\n\t# Anyone wants to do a port?\n\t;;\n      irix5* | irix6* | nonstopux*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    # CC pic flag -KPIC is the default.\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      linux* | k*bsd*-gnu | kopensolaris*-gnu)\n\tcase $cc_basename in\n\t  KCC*)\n\t    # KAI C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    ;;\n\t  ecpc* )\n\t    # old Intel C++ for x86_64 which still supported -KPIC.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  icpc* )\n\t    # Intel C++, used to be incompatible with GCC.\n\t    # ICC 10 doesn't accept -KPIC any more.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  pgCC* | pgcpp*)\n\t    # Portland Group C++ compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  xlc* | xlC*)\n\t    # IBM XL 8.0 on PPC\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n      lynxos*)\n\t;;\n      m88k*)\n\t;;\n      mvs*)\n\tcase $cc_basename in\n\t  cxx*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      netbsd* | netbsdelf*-gnu)\n\t;;\n      *qnx* | *nto*)\n        # QNX uses GNU C++, but need to define -shared option too, otherwise\n        # it will coredump.\n        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n        ;;\n      osf3* | osf4* | osf5*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    ;;\n\t  RCC*)\n\t    # Rational C++ 2.4.1\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  cxx*)\n\t    # Digital/Compaq C++\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      psos*)\n\t;;\n      solaris*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t    ;;\n\t  gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sunos4*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.x\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  lcc*)\n\t    # Lucid\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\tesac\n\t;;\n      tandem*)\n\tcase $cc_basename in\n\t  NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      vxworks*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n\t;;\n    esac\n  fi\n],\n[\n  if test \"$GCC\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      else\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC (with -KPIC) is the default.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n        ;;\n      ccc*)\n        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n        # All Alpha code is PIC.\n        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n        ;;\n      xl*)\n\t# IBM XL C 8.0/Fortran 10.1 on PPC\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  ;;\n\t*Sun\\ F*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # All OSF/1 code is PIC.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    rdos*)\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    unicos*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n    esac\n  fi\n])\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n    ;;\n  *)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\"$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])\"\n    ;;\nesac\nAC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])\n_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],\n\t[How to pass a linker flag through the compiler])\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$_LT_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],\n    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],\n    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],\n    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in\n     \"\" | \" \"*) ;;\n     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=\" $_LT_TAGVAR(lt_prog_compiler_pic, $1)\" ;;\n     esac],\n    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])\nfi\n_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],\n\t[Additional compiler flags for building library objects])\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\\\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\\\"\n_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],\n  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),\n  $lt_tmp_static_flag,\n  [],\n  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])\n_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],\n\t[Compiler flag to prevent dynamic linking])\n])# _LT_COMPILER_PIC\n\n\n# _LT_LINKER_SHLIBS([TAGNAME])\n# ----------------------------\n# See if the linker supports building shared libraries.\nm4_defun([_LT_LINKER_SHLIBS],\n[AC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\nm4_if([$1], [CXX], [\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  case $host_os in\n  aix[[4-9]]*)\n    # If we're using GNU nm, then we don't want the \"-C\" option.\n    # -C means demangle to AIX nm, but means don't demangle with GNU nm\n    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    else\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    fi\n    ;;\n  pw32*)\n    _LT_TAGVAR(export_symbols_cmds, $1)=\"$ltdll_cmds\"\n  ;;\n  cygwin* | mingw* | cegcc*)\n    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\\([[^ ]]*\\)[[ ]][[^ ]]*/\\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  linux* | k*bsd*-gnu)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n  ;;\n  *)\n    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  ;;\n  esac\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n], [\n  runpath_var=\n  _LT_TAGVAR(allow_undefined_flag, $1)=\n  _LT_TAGVAR(always_export_symbols, $1)=no\n  _LT_TAGVAR(archive_cmds, $1)=\n  _LT_TAGVAR(archive_expsym_cmds, $1)=\n  _LT_TAGVAR(compiler_needs_object, $1)=no\n  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n  _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  _LT_TAGVAR(hardcode_automatic, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_direct_absolute, $1)=no\n  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n  _LT_TAGVAR(hardcode_minus_L, $1)=no\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  _LT_TAGVAR(inherit_rpath, $1)=no\n  _LT_TAGVAR(link_all_deplibs, $1)=unknown\n  _LT_TAGVAR(module_cmds, $1)=\n  _LT_TAGVAR(module_expsym_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_new_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=\n  _LT_TAGVAR(thread_safe_flag_spec, $1)=\n  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  _LT_TAGVAR(include_expsyms, $1)=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\ndnl Note also adjust exclude_expsyms for C++ above.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n    ;;\n  esac\n\n  _LT_TAGVAR(ld_shlibs, $1)=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[[3-9]]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n      # as there is no search path for DLLs.\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=no\n      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    interix[[3-9]]*)\n      _LT_TAGVAR(hardcode_direct, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      _LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n\t  tmp_sharedflag='--shared' ;;\n\txl[[cC]]*)\t\t\t# IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  _LT_TAGVAR(compiler_needs_object, $1)=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\t_LT_TAGVAR(archive_cmds, $1)='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        _LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.1[[0-5]].*)\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n    esac\n\n    if test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no; then\n      runpath_var=\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\t_LT_TAGVAR(hardcode_direct, $1)=unsupported\n      fi\n      ;;\n\n    aix[[4-9]]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      _LT_TAGVAR(archive_cmds, $1)=''\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[[012]]|aix4.[[012]].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\t_LT_TAGVAR(link_all_deplibs, $1)=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\t_LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\n        _LT_SYS_MODULE_PATH_AIX\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then $ECHO \"X${wl}${allow_undefined_flag}\" | $Xsed; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\n\t _LT_SYS_MODULE_PATH_AIX\n\t _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[[45]]*)\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO \"X$deplibs\" | $Xsed -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n      # FIXME: Should let the user specify the lib program.\n      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'\n      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w \"$srcfile\"`'\n      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      ;;\n\n    darwin* | rhapsody*)\n      _LT_DARWIN_LINKER_FEATURES($1)\n      ;;\n\n    dgux*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    freebsd1*)\n      _LT_TAGVAR(ld_shlibs, $1)=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\t_LT_TAGVAR(hardcode_minus_L, $1)=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n        save_LDFLAGS=\"$LDFLAGS\"\n        LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n        AC_LINK_IFELSE(int foo(void) {},\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n        )\n        LDFLAGS=\"$save_LDFLAGS\"\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(inherit_rpath, $1)=yes\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)\n\t     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t     ;;\n\t   *)\n\t     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    os2*)\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(archive_cmds, $1)='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      case $host_os in\n      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n        ;;\n\tmotorola)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4.3*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\t_LT_TAGVAR(ld_shlibs, $1)=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      _LT_TAGVAR(ld_shlibs, $1)=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n])\nAC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\ntest \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld\n\n_LT_DECL([], [libext], [0], [Old archive suffix (normally \"a\")])dnl\n_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally \".so\")])dnl\n_LT_DECL([], [extract_expsyms_cmds], [2],\n    [The commands to extract the exported symbol list from a shared archive])\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$_LT_TAGVAR(archive_cmds_need_lc, $1)\" in\nx|xyes)\n  # Assume -lc should be added\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $_LT_TAGVAR(archive_cmds, $1) in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      AC_MSG_CHECKING([whether -lc should be explicitly linked in])\n      $RM conftest*\n      echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)\n\tpic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)\n        _LT_TAGVAR(allow_undefined_flag, $1)=\n        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1)\n        then\n\t  _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n        else\n\t  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n        fi\n        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $RM conftest*\n      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],\n    [Whether or not to add -lc for building shared libraries])\n_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],\n    [enable_shared_with_static_runtimes], [0],\n    [Whether or not to disallow shared libs when runtime libs are static])\n_LT_TAGDECL([], [export_dynamic_flag_spec], [1],\n    [Compiler flag to allow reflexive dlopens])\n_LT_TAGDECL([], [whole_archive_flag_spec], [1],\n    [Compiler flag to generate shared objects directly from archives])\n_LT_TAGDECL([], [compiler_needs_object], [1],\n    [Whether the compiler copes with passing no objects directly])\n_LT_TAGDECL([], [old_archive_from_new_cmds], [2],\n    [Create an old-style archive from a shared archive])\n_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],\n    [Create a temporary old-style archive to link instead of a shared archive])\n_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])\n_LT_TAGDECL([], [archive_expsym_cmds], [2])\n_LT_TAGDECL([], [module_cmds], [2],\n    [Commands used to build a loadable module if different from building\n    a shared archive.])\n_LT_TAGDECL([], [module_expsym_cmds], [2])\n_LT_TAGDECL([], [with_gnu_ld], [1],\n    [Whether we are building with GNU ld or not])\n_LT_TAGDECL([], [allow_undefined_flag], [1],\n    [Flag that allows shared libraries with undefined symbols to be built])\n_LT_TAGDECL([], [no_undefined_flag], [1],\n    [Flag that enforces no undefined symbols])\n_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],\n    [Flag to hardcode $libdir into a binary during linking.\n    This must work even if $libdir does not exist])\n_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],\n    [[If ld is used when linking, flag to hardcode $libdir into a binary\n    during linking.  This must work even if $libdir does not exist]])\n_LT_TAGDECL([], [hardcode_libdir_separator], [1],\n    [Whether we need a single \"-rpath\" flag with a separated argument])\n_LT_TAGDECL([], [hardcode_direct], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary])\n_LT_TAGDECL([], [hardcode_direct_absolute], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary and the resulting library dependency is\n    \"absolute\", i.e impossible to change by setting ${shlibpath_var} if the\n    library is relocated])\n_LT_TAGDECL([], [hardcode_minus_L], [0],\n    [Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_shlibpath_var], [0],\n    [Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_automatic], [0],\n    [Set to \"yes\" if building a shared library automatically hardcodes DIR\n    into the library and all subsequent libraries and executables linked\n    against it])\n_LT_TAGDECL([], [inherit_rpath], [0],\n    [Set to yes if linker adds runtime paths of dependent libraries\n    to runtime path list])\n_LT_TAGDECL([], [link_all_deplibs], [0],\n    [Whether libtool must link a program against all its dependency libraries])\n_LT_TAGDECL([], [fix_srcfile_path], [1],\n    [Fix the shell variable $srcfile for the compiler])\n_LT_TAGDECL([], [always_export_symbols], [0],\n    [Set to \"yes\" if exported symbols are required])\n_LT_TAGDECL([], [export_symbols_cmds], [2],\n    [The commands to list exported symbols])\n_LT_TAGDECL([], [exclude_expsyms], [1],\n    [Symbols that should not be listed in the preloaded symbols])\n_LT_TAGDECL([], [include_expsyms], [1],\n    [Symbols that must always be exported])\n_LT_TAGDECL([], [prelink_cmds], [2],\n    [Commands necessary for linking programs (against libraries) with templates])\n_LT_TAGDECL([], [file_list_spec], [1],\n    [Specify filename containing input files])\ndnl FIXME: Not yet implemented\ndnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],\ndnl    [Compiler flag to generate thread safe objects])\n])# _LT_LINKER_SHLIBS\n\n\n# _LT_LANG_C_CONFIG([TAG])\n# ------------------------\n# Ensure that the configuration variables for a C compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_C_CONFIG],\n[m4_require([_LT_DECL_EGREP])dnl\nlt_save_CC=\"$CC\"\nAC_LANG_PUSH(C)\n\n# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n_LT_TAG_COMPILER\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_SYS_DYNAMIC_LINKER($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n  LT_SYS_DLOPEN_SELF\n  _LT_CMD_STRIPLIB\n\n  # Report which library types will actually be built\n  AC_MSG_CHECKING([if libtool supports shared libraries])\n  AC_MSG_RESULT([$can_build_shared])\n\n  AC_MSG_CHECKING([whether to build shared libraries])\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[[4-9]]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  AC_MSG_RESULT([$enable_shared])\n\n  AC_MSG_CHECKING([whether to build static libraries])\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  AC_MSG_RESULT([$enable_static])\n\n  _LT_CONFIG($1)\nfi\nAC_LANG_POP\nCC=\"$lt_save_CC\"\n])# _LT_LANG_C_CONFIG\n\n\n# _LT_PROG_CXX\n# ------------\n# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++\n# compiler, we have our own version here.\nm4_defun([_LT_PROG_CXX],\n[\npushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])\nAC_PROG_CXX\nif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n    (test \"X$CXX\" != \"Xg++\"))) ; then\n  AC_PROG_CXXCPP\nelse\n  _lt_caught_CXX_error=yes\nfi\npopdef([AC_MSG_ERROR])\n])# _LT_PROG_CXX\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([_LT_PROG_CXX], [])\n\n\n# _LT_LANG_CXX_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a C++ compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_CXX_CONFIG],\n[AC_REQUIRE([_LT_PROG_CXX])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\n\nAC_LANG_PUSH(C++)\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(compiler_needs_object, $1)=no\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for C++ test sources.\nac_ext=cpp\n\n# Object file extension for compiled C++ test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the CXX compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_caught_CXX_error\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"int some_variable = 0;\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=$CC\n  lt_save_LD=$LD\n  lt_save_GCC=$GCC\n  GCC=$GXX\n  lt_save_with_gnu_ld=$with_gnu_ld\n  lt_save_path_LD=$lt_cv_path_LD\n  if test -n \"${lt_cv_prog_gnu_ldcxx+set}\"; then\n    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx\n  else\n    $as_unset lt_cv_prog_gnu_ld\n  fi\n  if test -n \"${lt_cv_path_LDCXX+set}\"; then\n    lt_cv_path_LD=$lt_cv_path_LDCXX\n  else\n    $as_unset lt_cv_path_LD\n  fi\n  test -z \"${LDCXX+set}\" || LD=$LDCXX\n  CC=${CXX-\"c++\"}\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    # We don't want -fno-exception when compiling C++ code, so set the\n    # no_builtin_flag separately\n    if test \"$GXX\" = yes; then\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\n    else\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n    fi\n\n    if test \"$GXX\" = yes; then\n      # Set up default GNU C++ configuration\n\n      LT_PATH_LD\n\n      # Check if GNU C++ uses GNU ld as the underlying linker, since the\n      # archiving commands below assume that GNU ld is being used.\n      if test \"$with_gnu_ld\" = yes; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n        # If archive_cmds runs LD, not CC, wlarc should be empty\n        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to\n        #     investigate it a little bit more. (MM)\n        wlarc='${wl}'\n\n        # ancient GNU ld didn't support --whole-archive et. al.\n        if eval \"`$CC -print-prog-name=ld` --help 2>&1\" |\n\t  $GREP 'no-whole-archive' > /dev/null; then\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n        else\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\n        fi\n      else\n        with_gnu_ld=no\n        wlarc=\n\n        # A generic and very simple default shared library creation\n        # command for GNU C++ for the case where it uses the native\n        # linker, instead of GNU ld.  If possible, this setting should\n        # overridden to take advantage of the native linker features on\n        # the platform it is being used on.\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n      fi\n\n      # Commands to make compiler produce verbose output that lists\n      # what \"hidden\" libraries, object files and flags are used when\n      # linking a shared library.\n      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\\-L\"'\n\n    else\n      GXX=no\n      with_gnu_ld=no\n      wlarc=\n    fi\n\n    # PORTME: fill in a description of your system's C++ link characteristics\n    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\n    _LT_TAGVAR(ld_shlibs, $1)=yes\n    case $host_os in\n      aix3*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n      aix[[4-9]]*)\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          exp_sym_flag='-Bexport'\n          no_entry_flag=\"\"\n        else\n          aix_use_runtimelinking=no\n\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]].*|aix[[5-9]]*)\n\t    for ld_flag in $LDFLAGS; do\n\t      case $ld_flag in\n\t      *-brtl*)\n\t        aix_use_runtimelinking=yes\n\t        break\n\t        ;;\n\t      esac\n\t    done\n\t    ;;\n          esac\n\n          exp_sym_flag='-bexport'\n          no_entry_flag='-bnoentry'\n        fi\n\n        # When large executables or shared objects are built, AIX ld can\n        # have problems creating the table of contents.  If linking a library\n        # or program results in \"error TOC overflow\" add -mminimal-toc to\n        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n        _LT_TAGVAR(archive_cmds, $1)=''\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n        _LT_TAGVAR(link_all_deplibs, $1)=yes\n        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n        if test \"$GXX\" = yes; then\n          case $host_os in aix4.[[012]]|aix4.[[012]].*)\n          # We only want to do this on AIX 4.2 and lower, the check\n          # below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t     strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t    # We have reworked collect2\n\t    :\n\t  else\n\t    # We have old collect2\n\t    _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t    # It fails to find uninstalled libraries when the uninstalled\n\t    # path is not listed in the libpath.  Setting hardcode_minus_L\n\t    # to unsupported forces relinking\n\t    _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n          esac\n          shared_flag='-shared'\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag=\"$shared_flag \"'${wl}-G'\n\t  fi\n        else\n          # not using gcc\n          if test \"$host_cpu\" = ia64; then\n\t  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t  # chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n          else\n\t    if test \"$aix_use_runtimelinking\" = yes; then\n\t      shared_flag='${wl}-G'\n\t    else\n\t      shared_flag='${wl}-bM:SRE'\n\t    fi\n          fi\n        fi\n\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n        # It seems that -bexpall does not export symbols beginning with\n        # underscore (_), so it is better to generate a list of symbols to\n\t# export.\n        _LT_TAGVAR(always_export_symbols, $1)=yes\n        if test \"$aix_use_runtimelinking\" = yes; then\n          # Warning - without using the other runtime loading flags (-brtl),\n          # -berok will link without error, but may produce a broken library.\n          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n          # Determine the default libpath from the value encoded in an empty\n          # executable.\n          _LT_SYS_MODULE_PATH_AIX\n          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then $ECHO \"X${wl}${allow_undefined_flag}\" | $Xsed; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n        else\n          if test \"$host_cpu\" = ia64; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n          else\n\t    # Determine the default libpath from the value encoded in an\n\t    # empty executable.\n\t    _LT_SYS_MODULE_PATH_AIX\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t    # Warning - without using the other run time loading flags,\n\t    # -berok will link without error, but may produce a broken library.\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t    # Exported symbols can be pulled into shared objects from archives\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t    # This is similar to how AIX traditionally builds its shared\n\t    # libraries.\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n          fi\n        fi\n        ;;\n\n      beos*)\n\tif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t  # support --undefined.  This deserves some investigation.  FIXME\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      chorus*)\n        case $cc_basename in\n          *)\n\t  # FIXME: insert proper C++ library support\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\t  ;;\n        esac\n        ;;\n\n      cygwin* | mingw* | pw32* | cegcc*)\n        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n        # as there is no search path for DLLs.\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n        _LT_TAGVAR(always_export_symbols, $1)=no\n        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\n        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n          # If the export-symbols file already is a .def file (1st line\n          # is EXPORTS), use it as is; otherwise, prepend...\n          _LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t    cp $export_symbols $output_objdir/$soname.def;\n          else\n\t    echo EXPORTS > $output_objdir/$soname.def;\n\t    cat $export_symbols >> $output_objdir/$soname.def;\n          fi~\n          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n        else\n          _LT_TAGVAR(ld_shlibs, $1)=no\n        fi\n        ;;\n      darwin* | rhapsody*)\n        _LT_DARWIN_LINKER_FEATURES($1)\n\t;;\n\n      dgux*)\n        case $cc_basename in\n          ec++*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          ghcx*)\n\t    # Green Hills C++ Compiler\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      freebsd[[12]]*)\n        # C++ shared libraries reported to be fairly broken before\n\t# switch to ELF\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      freebsd-elf*)\n        _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n        ;;\n\n      freebsd* | dragonfly*)\n        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF\n        # conventions\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n        ;;\n\n      gnu*)\n        ;;\n\n      hpux9*)\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t             # but as the default\n\t\t\t\t             # location of the library.\n\n        case $cc_basename in\n          CC*)\n            # FIXME: insert proper C++ library support\n            _LT_TAGVAR(ld_shlibs, $1)=no\n            ;;\n          aCC*)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            # Commands to make compiler produce verbose output that lists\n            # what \"hidden\" libraries, object files and flags are used when\n            # linking a shared library.\n            #\n            # There doesn't appear to be a way to prevent this compiler from\n            # explicitly linking system object files so we need to strip them\n            # from the output so that they don't get included in the library\n            # dependencies.\n            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; $ECHO \"X$list\" | $Xsed'\n            ;;\n          *)\n            if test \"$GXX\" = yes; then\n              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            else\n              # FIXME: insert proper C++ library support\n              _LT_TAGVAR(ld_shlibs, $1)=no\n            fi\n            ;;\n        esac\n        ;;\n\n      hpux10*|hpux11*)\n        if test $with_gnu_ld = no; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n          case $host_cpu in\n            hppa*64*|ia64*)\n              ;;\n            *)\n\t      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n              ;;\n          esac\n        fi\n        case $host_cpu in\n          hppa*64*|ia64*)\n            _LT_TAGVAR(hardcode_direct, $1)=no\n            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n            ;;\n          *)\n            _LT_TAGVAR(hardcode_direct, $1)=yes\n            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t\t         # but as the default\n\t\t\t\t\t         # location of the library.\n            ;;\n        esac\n\n        case $cc_basename in\n          CC*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          aCC*)\n\t    case $host_cpu in\n\t      hppa*64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      ia64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      *)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t    esac\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; $ECHO \"X$list\" | $Xsed'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test $with_gnu_ld = no; then\n\t        case $host_cpu in\n\t          hppa*64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          ia64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          *)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t        esac\n\t      fi\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      interix[[3-9]]*)\n\t_LT_TAGVAR(hardcode_direct, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n\t# Instead, shared libraries are loaded at an image base (0x10000000 by\n\t# default) and relocated if they conflict, which is a slow very memory\n\t# consuming and fragmenting process.  To avoid this, we pick a random,\n\t# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n\t# time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t;;\n      irix5* | irix6*)\n        case $cc_basename in\n          CC*)\n\t    # SGI C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -ar\", where \"CC\" is the IRIX C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test \"$with_gnu_ld\" = no; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t      else\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` -o $lib'\n\t      fi\n\t    fi\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\t    ;;\n        esac\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(inherit_rpath, $1)=yes\n        ;;\n\n      linux* | k*bsd*-gnu | kopensolaris*-gnu)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib ${wl}-retain-symbols-file,$export_symbols; mv \\$templib $lib'\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP \"ld\"`; rm -f libconftest$shared_ext; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; $ECHO \"X$list\" | $Xsed'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'\n\t    ;;\n\t  icpc* | ecpc* )\n\t    # Intel C++\n\t    with_gnu_ld=yes\n\t    # version 8.0 and above of icpc choke on multiply defined symbols\n\t    # if we add $predep_objects and $postdep_objects, however 7.1 and\n\t    # earlier do not add the objects themselves.\n\t    case `$CC -V 2>&1` in\n\t      *\"Version 7.\"*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t      *)  # Version 8.0 or newer\n\t        tmp_idyn=\n\t        case $host_cpu in\n\t\t  ia64*) tmp_idyn=' -i_dynamic';;\n\t\tesac\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t    esac\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t    ;;\n          pgCC* | pgcpp*)\n            # Portland Group C++ compiler\n\t    case `$CC -V` in\n\t    *pgCC\\ [[1-5]]* | *pgcpp\\ [[1-5]]*)\n\t      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~\n\t\tcompile_command=\"$compile_command `find $tpldir -name \\*.o | $NL2SP`\"'\n\t      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~\n\t\t$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \\*.o | $NL2SP`~\n\t\t$RANLIB $oldlib'\n\t      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    *) # Version 6 will use weak symbols\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n            ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'\n\n\t    runpath_var=LD_RUN_PATH\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\"`; templist=`$ECHO \"X$templist\" | $Xsed -e \"s/\\(^.*ld.*\\)\\( .*ld .*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; $ECHO \"X$list\" | $Xsed'\n\t    ;;\n\t  xl*)\n\t    # IBM XL 8.0 on PPC, with GNU ld\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    if test \"x$supports_anon_versioning\" = xyes; then\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t\tcat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t\techo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t\t$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\t    fi\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t      _LT_TAGVAR(compiler_needs_object, $1)=yes\n\n\t      # Not sure whether something based on\n\t      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1\n\t      # would be better.\n\t      output_verbose_link_cmd='echo'\n\n\t      # Archives containing C++ object files must be created using\n\t      # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t      # necessary to make sure instantiated templates are included\n\t      # in the archive.\n\t      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n\n      lynxos*)\n        # FIXME: insert proper C++ library support\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      m88k*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      mvs*)\n        case $cc_basename in\n          cxx*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\t  *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\tesac\n\t;;\n\n      netbsd*)\n        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'\n\t  wlarc=\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\tfi\n\t# Workaround some broken pre-1.5 toolchains\n\toutput_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e \"s:-lgcc -lc -lgcc::\"'\n\t;;\n\n      *nto* | *qnx*)\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n\t;;\n\n      openbsd2*)\n        # C++ shared libraries are fairly broken\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      openbsd*)\n\tif test -f /usr/libexec/ld.so; then\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n\t  fi\n\t  output_verbose_link_cmd=echo\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      osf3* | osf4* | osf5*)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo \"$lib\" | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Archives containing C++ object files must be created using\n\t    # the KAI C++ compiler.\n\t    case $host in\n\t      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;\n\t      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;\n\t    esac\n\t    ;;\n          RCC*)\n\t    # Rational C++ 2.4.1\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          cxx*)\n\t    case $host in\n\t      osf3*)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t\t;;\n\t      *)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done~\n\t          echo \"-hidden\">> $lib.exp~\n\t          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~\n\t          $RM $lib.exp'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t\t;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\" | $GREP -v \"ld:\"`; templist=`$ECHO \"X$templist\" | $Xsed -e \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; $ECHO \"X$list\" | $Xsed'\n\t    ;;\n\t  *)\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t      case $host in\n\t        osf3*)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t        *)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t      esac\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t      # Commands to make compiler produce verbose output that lists\n\t      # what \"hidden\" libraries, object files and flags are used when\n\t      # linking a shared library.\n\t      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\\-L\"'\n\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      psos*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      sunos4*)\n        case $cc_basename in\n          CC*)\n\t    # Sun C++ 4.x\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          lcc*)\n\t    # Lucid\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      solaris*)\n        case $cc_basename in\n          CC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t    case $host_os in\n\t      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t      *)\n\t\t# The compiler driver will combine and reorder linker options,\n\t\t# but understands `-z linker_flag'.\n\t        # Supported since Solaris 2.6 (maybe 2.5.1?)\n\t\t_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\t        ;;\n\t    esac\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\n\t    output_verbose_link_cmd='echo'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t    ;;\n          gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\n\t    # The C++ compiler must be used to create the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    # GNU C++ compiler with Solaris linker\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'\n\t      if $CC --version | $GREP -v '^2\\.7' > /dev/null; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\\-L\"'\n\t      else\n\t        # g++ 2.7 appears to require `-G' NOT `-shared' on this\n\t        # platform.\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP \"\\-L\"'\n\t      fi\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'\n\t      case $host_os in\n\t\tsolaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t\t*)\n\t\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\t\t  ;;\n\t      esac\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      case $cc_basename in\n        CC*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n      esac\n      ;;\n\n      sysv5* | sco3.2v5* | sco5v6*)\n\t# Note: We can NOT use -z defs as we might desire, because we do not\n\t# link with -lc, and that would cause any symbols used from libc to\n\t# always be unresolved, which means just about no library would\n\t# ever link correctly.  If we're not using GNU ld we use -z text\n\t# though, which does catch some bad symbols but isn't as heavy-handed\n\t# as -z defs.\n\t_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n\t_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n\t_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n\t_LT_TAGVAR(link_all_deplibs, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n\trunpath_var='LD_RUN_PATH'\n\n\tcase $cc_basename in\n          CC*)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    ;;\n\t  *)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    ;;\n\tesac\n      ;;\n\n      tandem*)\n        case $cc_basename in\n          NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      vxworks*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      *)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n    esac\n\n    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\n    test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n    _LT_TAGVAR(GCC, $1)=\"$GXX\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  CC=$lt_save_CC\n  LDCXX=$LD\n  LD=$lt_save_LD\n  GCC=$lt_save_GCC\n  with_gnu_ld=$lt_save_with_gnu_ld\n  lt_cv_path_LDCXX=$lt_cv_path_LD\n  lt_cv_path_LD=$lt_save_path_LD\n  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld\n  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld\nfi # test \"$_lt_caught_CXX_error\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_CXX_CONFIG\n\n\n# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])\n# ---------------------------------\n# Figure out \"hidden\" library dependencies from verbose\n# compiler output when linking a shared library.\n# Parse the compiler output and extract the necessary\n# objects, libraries and library flags.\nm4_defun([_LT_SYS_HIDDEN_LIBDEPS],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\n# Dependencies to place before and after the object being linked:\n_LT_TAGVAR(predep_objects, $1)=\n_LT_TAGVAR(postdep_objects, $1)=\n_LT_TAGVAR(predeps, $1)=\n_LT_TAGVAR(postdeps, $1)=\n_LT_TAGVAR(compiler_lib_search_path, $1)=\n\ndnl we can't use the lt_simple_compile_test_code here,\ndnl because it contains code intended for an executable,\ndnl not a library.  It's possible we should let each\ndnl tag define a new lt_????_link_test_code variable,\ndnl but it's only used here...\nm4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF\nint a;\nvoid foo (void) { a = 0; }\n_LT_EOF\n], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF\nclass Foo\n{\npublic:\n  Foo (void) { a = 0; }\nprivate:\n  int a;\n};\n_LT_EOF\n], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer*4 a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF\npublic class foo {\n  private int a;\n  public void bar (void) {\n    a = 0;\n  }\n};\n_LT_EOF\n])\ndnl Parse the compiler output and extract the necessary\ndnl objects, libraries and library flags.\nif AC_TRY_EVAL(ac_compile); then\n  # Parse the compiler output and extract the necessary\n  # objects, libraries and library flags.\n\n  # Sentinel used to keep track of whether or not we are before\n  # the conftest object file.\n  pre_test_object_deps_done=no\n\n  for p in `eval \"$output_verbose_link_cmd\"`; do\n    case $p in\n\n    -L* | -R* | -l*)\n       # Some compilers place space between \"-{L,R}\" and the path.\n       # Remove the space.\n       if test $p = \"-L\" ||\n          test $p = \"-R\"; then\n\t prev=$p\n\t continue\n       else\n\t prev=\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t case $p in\n\t -L* | -R*)\n\t   # Internal compiler library paths should come after those\n\t   # provided the user.  The postdeps already come after the\n\t   # user supplied libs so there is no need to process them.\n\t   if test -z \"$_LT_TAGVAR(compiler_lib_search_path, $1)\"; then\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${prev}${p}\"\n\t   else\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}\"\n\t   fi\n\t   ;;\n\t # The \"-l\" case would never come before the object being\n\t # linked, so don't bother handling this case.\n\t esac\n       else\n\t if test -z \"$_LT_TAGVAR(postdeps, $1)\"; then\n\t   _LT_TAGVAR(postdeps, $1)=\"${prev}${p}\"\n\t else\n\t   _LT_TAGVAR(postdeps, $1)=\"${_LT_TAGVAR(postdeps, $1)} ${prev}${p}\"\n\t fi\n       fi\n       ;;\n\n    *.$objext)\n       # This assumes that the test object file only shows up\n       # once in the compiler output.\n       if test \"$p\" = \"conftest.$objext\"; then\n\t pre_test_object_deps_done=yes\n\t continue\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t if test -z \"$_LT_TAGVAR(predep_objects, $1)\"; then\n\t   _LT_TAGVAR(predep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(predep_objects, $1)=\"$_LT_TAGVAR(predep_objects, $1) $p\"\n\t fi\n       else\n\t if test -z \"$_LT_TAGVAR(postdep_objects, $1)\"; then\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$_LT_TAGVAR(postdep_objects, $1) $p\"\n\t fi\n       fi\n       ;;\n\n    *) ;; # Ignore the rest.\n\n    esac\n  done\n\n  # Clean up.\n  rm -f a.out a.exe\nelse\n  echo \"libtool.m4: error: problem compiling $1 test program\"\nfi\n\n$RM -f confest.$objext\n\n# PORTME: override above test on systems where it is broken\nm4_if([$1], [CXX],\n[case $host_os in\ninterix[[3-9]]*)\n  # Interix 3.5 installs completely hosed .la files for C++, so rather than\n  # hack all around it, let's just trust \"g++\" to DTRT.\n  _LT_TAGVAR(predep_objects,$1)=\n  _LT_TAGVAR(postdep_objects,$1)=\n  _LT_TAGVAR(postdeps,$1)=\n  ;;\n\nlinux*)\n  case `$CC -V 2>&1 | sed 5q` in\n  *Sun\\ C*)\n    # Sun C++ 5.9\n\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\n\nsolaris*)\n  case $cc_basename in\n  CC*)\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    # Adding this requires a known-good setup of shared libraries for\n    # Sun compiler versions before 5.6, else PIC objects from an old\n    # archive will be linked into the output, leading to subtle bugs.\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\nesac\n])\n\ncase \" $_LT_TAGVAR(postdeps, $1) \" in\n*\" -lc \"*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;\nesac\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=\nif test -n \"${_LT_TAGVAR(compiler_lib_search_path, $1)}\"; then\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo \" ${_LT_TAGVAR(compiler_lib_search_path, $1)}\" | ${SED} -e 's! -L! !g' -e 's!^ !!'`\nfi\n_LT_TAGDECL([], [compiler_lib_search_dirs], [1],\n    [The directories searched by this compiler when creating a shared library])\n_LT_TAGDECL([], [predep_objects], [1],\n    [Dependencies to place before and after the objects being linked to\n    create a shared library])\n_LT_TAGDECL([], [postdep_objects], [1])\n_LT_TAGDECL([], [predeps], [1])\n_LT_TAGDECL([], [postdeps], [1])\n_LT_TAGDECL([], [compiler_lib_search_path], [1],\n    [The library search path used internally by the compiler when linking\n    a shared library])\n])# _LT_SYS_HIDDEN_LIBDEPS\n\n\n# _LT_PROG_F77\n# ------------\n# Since AC_PROG_F77 is broken, in that it returns the empty string\n# if there is no fortran compiler, we have our own version here.\nm4_defun([_LT_PROG_F77],\n[\npushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])\nAC_PROG_F77\nif test -z \"$F77\" || test \"X$F77\" = \"Xno\"; then\n  _lt_disable_F77=yes\nfi\npopdef([AC_MSG_ERROR])\n])# _LT_PROG_F77\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([_LT_PROG_F77], [])\n\n\n# _LT_LANG_F77_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a Fortran 77 compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_F77_CONFIG],\n[AC_REQUIRE([_LT_PROG_F77])dnl\nAC_LANG_PUSH(Fortran 77)\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for f77 test sources.\nac_ext=f\n\n# Object file extension for compiled f77 test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the F77 compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_F77\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  CC=${F77-\"f77\"}\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n  GCC=$G77\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$G77\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=\"$lt_save_CC\"\nfi # test \"$_lt_disable_F77\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_F77_CONFIG\n\n\n# _LT_PROG_FC\n# -----------\n# Since AC_PROG_FC is broken, in that it returns the empty string\n# if there is no fortran compiler, we have our own version here.\nm4_defun([_LT_PROG_FC],\n[\npushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])\nAC_PROG_FC\nif test -z \"$FC\" || test \"X$FC\" = \"Xno\"; then\n  _lt_disable_FC=yes\nfi\npopdef([AC_MSG_ERROR])\n])# _LT_PROG_FC\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([_LT_PROG_FC], [])\n\n\n# _LT_LANG_FC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for a Fortran compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_FC_CONFIG],\n[AC_REQUIRE([_LT_PROG_FC])dnl\nAC_LANG_PUSH(Fortran)\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for fc test sources.\nac_ext=${ac_fc_srcext-f}\n\n# Object file extension for compiled fc test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the FC compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_FC\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  CC=${FC-\"f95\"}\n  compiler=$CC\n  GCC=$ac_cv_fc_compiler_gnu\n\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$ac_cv_fc_compiler_gnu\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=\"$lt_save_CC\"\nfi # test \"$_lt_disable_FC\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_FC_CONFIG\n\n\n# _LT_LANG_GCJ_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for the GNU Java Compiler compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_GCJ_CONFIG],\n[AC_REQUIRE([LT_PROG_GCJ])dnl\nAC_LANG_SAVE\n\n# Source file extension for Java test sources.\nac_ext=java\n\n# Object file extension for compiled Java test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"class foo {}\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nlt_save_GCC=$GCC\nGCC=yes\nCC=${GCJ-\"gcj\"}\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_TAGVAR(LD, $1)=\"$LD\"\n_LT_CC_BASENAME([$compiler])\n\n# GCJ did not exist at the time GCC didn't implicitly link libc in.\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n\n  _LT_CONFIG($1)\nfi\n\nAC_LANG_RESTORE\n\nGCC=$lt_save_GCC\nCC=\"$lt_save_CC\"\n])# _LT_LANG_GCJ_CONFIG\n\n\n# _LT_LANG_RC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for the Windows resource compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_RC_CONFIG],\n[AC_REQUIRE([LT_PROG_RC])dnl\nAC_LANG_SAVE\n\n# Source file extension for RC test sources.\nac_ext=rc\n\n# Object file extension for compiled RC test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code='sample MENU { MENUITEM \"&Soup\", 100, CHECKED }'\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"$lt_simple_compile_test_code\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nlt_save_GCC=$GCC\nGCC=\nCC=${RC-\"windres\"}\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n\nif test -n \"$compiler\"; then\n  :\n  _LT_CONFIG($1)\nfi\n\nGCC=$lt_save_GCC\nAC_LANG_RESTORE\nCC=\"$lt_save_CC\"\n])# _LT_LANG_RC_CONFIG\n\n\n# LT_PROG_GCJ\n# -----------\nAC_DEFUN([LT_PROG_GCJ],\n[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],\n  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],\n    [AC_CHECK_TOOL(GCJ, gcj,)\n      test \"x${GCJFLAGS+set}\" = xset || GCJFLAGS=\"-g -O2\"\n      AC_SUBST(GCJFLAGS)])])[]dnl\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_GCJ], [])\n\n\n# LT_PROG_RC\n# ----------\nAC_DEFUN([LT_PROG_RC],\n[AC_CHECK_TOOL(RC, windres,)\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_RC], [])\n\n\n# _LT_DECL_EGREP\n# --------------\n# If we don't have a new enough Autoconf to choose the best grep\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_EGREP],\n[AC_REQUIRE([AC_PROG_EGREP])dnl\nAC_REQUIRE([AC_PROG_FGREP])dnl\ntest -z \"$GREP\" && GREP=grep\n_LT_DECL([], [GREP], [1], [A grep program that handles long lines])\n_LT_DECL([], [EGREP], [1], [An ERE matcher])\n_LT_DECL([], [FGREP], [1], [A literal string matcher])\ndnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too\nAC_SUBST([GREP])\n])\n\n\n# _LT_DECL_OBJDUMP\n# --------------\n# If we don't have a new enough Autoconf to choose the best objdump\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_OBJDUMP],\n[AC_CHECK_TOOL(OBJDUMP, objdump, false)\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])\nAC_SUBST([OBJDUMP])\n])\n\n\n# _LT_DECL_SED\n# ------------\n# Check for a fully-functional sed program, that truncates\n# as few characters as possible.  Prefer GNU sed if found.\nm4_defun([_LT_DECL_SED],\n[AC_PROG_SED\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n_LT_DECL([], [SED], [1], [A sed program that does not truncate output])\n_LT_DECL([], [Xsed], [\"\\$SED -e 1s/^X//\"],\n    [Sed that helps us avoid accidentally triggering echo(1) options like -n])\n])# _LT_DECL_SED\n\nm4_ifndef([AC_PROG_SED], [\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_SED.  When it is available in   #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\n\nm4_defun([AC_PROG_SED],\n[AC_MSG_CHECKING([for a sed that does not truncate output])\nAC_CACHE_VAL(lt_cv_path_SED,\n[# Loop through the user's path and test for sed and gsed.\n# Then use that list of sed's as ones to test for truncation.\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 lt_ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      if $as_executable_p \"$as_dir/$lt_ac_prog$ac_exec_ext\"; then\n        lt_ac_sed_list=\"$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext\"\n      fi\n    done\n  done\ndone\nIFS=$as_save_IFS\nlt_ac_max=0\nlt_ac_count=0\n# Add /usr/xpg4/bin/sed as it is typically found on Solaris\n# along with /bin/sed that truncates output.\nfor lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do\n  test ! -f $lt_ac_sed && continue\n  cat /dev/null > conftest.in\n  lt_ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >conftest.in\n  # Check for GNU sed and select it if it is found.\n  if \"$lt_ac_sed\" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then\n    lt_cv_path_SED=$lt_ac_sed\n    break\n  fi\n  while true; do\n    cat conftest.in conftest.in >conftest.tmp\n    mv conftest.tmp conftest.in\n    cp conftest.in conftest.nl\n    echo >>conftest.nl\n    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break\n    cmp -s conftest.out conftest.nl || break\n    # 10000 chars as input seems more than enough\n    test $lt_ac_count -gt 10 && break\n    lt_ac_count=`expr $lt_ac_count + 1`\n    if test $lt_ac_count -gt $lt_ac_max; then\n      lt_ac_max=$lt_ac_count\n      lt_cv_path_SED=$lt_ac_sed\n    fi\n  done\ndone\n])\nSED=$lt_cv_path_SED\nAC_SUBST([SED])\nAC_MSG_RESULT([$SED])\n])#AC_PROG_SED\n])#m4_ifndef\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_SED], [])\n\n\n# _LT_CHECK_SHELL_FEATURES\n# ------------------------\n# Find out whether the shell is Bourne or XSI compatible,\n# or has some other useful features.\nm4_defun([_LT_CHECK_SHELL_FEATURES],\n[AC_MSG_CHECKING([whether the shell understands some XSI constructs])\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\nAC_MSG_RESULT([$xsi_shell])\n_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])\n\nAC_MSG_CHECKING([whether the shell understands \"+=\"])\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$[1]+=\\$[2]\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\nAC_MSG_RESULT([$lt_shell_append])\n_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n_LT_DECL([], [lt_unset], [0], [whether the shell understands \"unset\"])dnl\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl\n_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl\n])# _LT_CHECK_SHELL_FEATURES\n\n\n# _LT_PROG_XSI_SHELLFNS\n# ---------------------\n# Bourne and XSI compatible variants of some useful shell functions.\nm4_defun([_LT_PROG_XSI_SHELLFNS],\n[case $xsi_shell in\n  yes)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n  case ${1} in\n    */*) func_dirname_result=\"${1%/*}${2}\" ;;\n    *  ) func_dirname_result=\"${3}\" ;;\n  esac\n}\n\n# func_basename file\nfunc_basename ()\n{\n  func_basename_result=\"${1##*/}\"\n}\n\n# func_dirname_and_basename file append nondir_replacement\n# perform func_basename and func_dirname in a single function\n# call:\n#   dirname:  Compute the dirname of FILE.  If nonempty,\n#             add APPEND to the result, otherwise set result\n#             to NONDIR_REPLACEMENT.\n#             value returned in \"$func_dirname_result\"\n#   basename: Compute filename of FILE.\n#             value retuned in \"$func_basename_result\"\n# Implementation must be kept synchronized with func_dirname\n# and func_basename. For efficiency, we do not delegate to\n# those functions but instead duplicate the functionality here.\nfunc_dirname_and_basename ()\n{\n  case ${1} in\n    */*) func_dirname_result=\"${1%/*}${2}\" ;;\n    *  ) func_dirname_result=\"${3}\" ;;\n  esac\n  func_basename_result=\"${1##*/}\"\n}\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\nfunc_stripname ()\n{\n  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\n  # positional parameters, so assign one to ordinary parameter first.\n  func_stripname_result=${3}\n  func_stripname_result=${func_stripname_result#\"${1}\"}\n  func_stripname_result=${func_stripname_result%\"${2}\"}\n}\n\n# func_opt_split\nfunc_opt_split ()\n{\n  func_opt_split_opt=${1%%=*}\n  func_opt_split_arg=${1#*=}\n}\n\n# func_lo2o object\nfunc_lo2o ()\n{\n  case ${1} in\n    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\n    *)    func_lo2o_result=${1} ;;\n  esac\n}\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n  func_xform_result=${1%.*}.lo\n}\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n  func_arith_result=$(( $[*] ))\n}\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n  func_len_result=${#1}\n}\n\n_LT_EOF\n    ;;\n  *) # Bourne compatible functions.\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n  # Extract subdirectory from the argument.\n  func_dirname_result=`$ECHO \"X${1}\" | $Xsed -e \"$dirname\"`\n  if test \"X$func_dirname_result\" = \"X${1}\"; then\n    func_dirname_result=\"${3}\"\n  else\n    func_dirname_result=\"$func_dirname_result${2}\"\n  fi\n}\n\n# func_basename file\nfunc_basename ()\n{\n  func_basename_result=`$ECHO \"X${1}\" | $Xsed -e \"$basename\"`\n}\n\ndnl func_dirname_and_basename\ndnl A portable version of this function is already defined in general.m4sh\ndnl so there is no need for it here.\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n# func_strip_suffix prefix name\nfunc_stripname ()\n{\n  case ${2} in\n    .*) func_stripname_result=`$ECHO \"X${3}\" \\\n           | $Xsed -e \"s%^${1}%%\" -e \"s%\\\\\\\\${2}\\$%%\"`;;\n    *)  func_stripname_result=`$ECHO \"X${3}\" \\\n           | $Xsed -e \"s%^${1}%%\" -e \"s%${2}\\$%%\"`;;\n  esac\n}\n\n# sed scripts:\nmy_sed_long_opt='1s/^\\(-[[^=]]*\\)=.*/\\1/;q'\nmy_sed_long_arg='1s/^-[[^=]]*=//'\n\n# func_opt_split\nfunc_opt_split ()\n{\n  func_opt_split_opt=`$ECHO \"X${1}\" | $Xsed -e \"$my_sed_long_opt\"`\n  func_opt_split_arg=`$ECHO \"X${1}\" | $Xsed -e \"$my_sed_long_arg\"`\n}\n\n# func_lo2o object\nfunc_lo2o ()\n{\n  func_lo2o_result=`$ECHO \"X${1}\" | $Xsed -e \"$lo2o\"`\n}\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n  func_xform_result=`$ECHO \"X${1}\" | $Xsed -e 's/\\.[[^.]]*$/.lo/'`\n}\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n  func_arith_result=`expr \"$[@]\"`\n}\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n  func_len_result=`expr \"$[1]\" : \".*\" 2>/dev/null || echo $max_cmd_len`\n}\n\n_LT_EOF\nesac\n\ncase $lt_shell_append in\n  yes)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n  eval \"$[1]+=\\$[2]\"\n}\n_LT_EOF\n    ;;\n  *)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n  eval \"$[1]=\\$$[1]\\$[2]\"\n}\n\n_LT_EOF\n    ;;\n  esac\n])\n\n# Helper functions for option handling.                    -*- Autoconf -*-\n#\n#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.\n#   Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 6 ltoptions.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])\n\n\n# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)\n# ------------------------------------------\nm4_define([_LT_MANGLE_OPTION],\n[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])\n\n\n# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)\n# ---------------------------------------\n# Set option OPTION-NAME for macro MACRO-NAME, and if there is a\n# matching handler defined, dispatch to it.  Other OPTION-NAMEs are\n# saved as a flag.\nm4_define([_LT_SET_OPTION],\n[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl\nm4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),\n        _LT_MANGLE_DEFUN([$1], [$2]),\n    [m4_warning([Unknown $1 option `$2'])])[]dnl\n])\n\n\n# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])\n# ------------------------------------------------------------\n# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.\nm4_define([_LT_IF_OPTION],\n[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])\n\n\n# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)\n# -------------------------------------------------------\n# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME\n# are set.\nm4_define([_LT_UNLESS_OPTIONS],\n[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n\t    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),\n\t\t      [m4_define([$0_found])])])[]dnl\nm4_ifdef([$0_found], [m4_undefine([$0_found])], [$3\n])[]dnl\n])\n\n\n# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)\n# ----------------------------------------\n# OPTION-LIST is a space-separated list of Libtool options associated\n# with MACRO-NAME.  If any OPTION has a matching handler declared with\n# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about\n# the unknown option and exit.\nm4_defun([_LT_SET_OPTIONS],\n[# Set options\nm4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n    [_LT_SET_OPTION([$1], _LT_Option)])\n\nm4_if([$1],[LT_INIT],[\n  dnl\n  dnl Simply set some default values (i.e off) if boolean options were not\n  dnl specified:\n  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no\n  ])\n  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no\n  ])\n  dnl\n  dnl If no reference was made to various pairs of opposing options, then\n  dnl we run the default mode handler for the pair.  For example, if neither\n  dnl `shared' nor `disable-shared' was passed, we enable building of shared\n  dnl archives by default:\n  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])\n  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],\n  \t\t   [_LT_ENABLE_FAST_INSTALL])\n  ])\n])# _LT_SET_OPTIONS\n\n\n\n# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)\n# -----------------------------------------\nm4_define([_LT_MANGLE_DEFUN],\n[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])\n\n\n# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)\n# -----------------------------------------------\nm4_define([LT_OPTION_DEFINE],\n[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl\n])# LT_OPTION_DEFINE\n\n\n# dlopen\n# ------\nLT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes\n])\n\nAU_DEFUN([AC_LIBTOOL_DLOPEN],\n[_LT_SET_OPTION([LT_INIT], [dlopen])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `dlopen' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])\n\n\n# win32-dll\n# ---------\n# Declare package support for building win32 dll's.\nLT_OPTION_DEFINE([LT_INIT], [win32-dll],\n[enable_win32_dll=yes\n\ncase $host in\n*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)\n  AC_CHECK_TOOL(AS, as, false)\n  AC_CHECK_TOOL(DLLTOOL, dlltool, false)\n  AC_CHECK_TOOL(OBJDUMP, objdump, false)\n  ;;\nesac\n\ntest -z \"$AS\" && AS=as\n_LT_DECL([], [AS],      [0], [Assembler program])dnl\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl\n])# win32-dll\n\nAU_DEFUN([AC_LIBTOOL_WIN32_DLL],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n_LT_SET_OPTION([LT_INIT], [win32-dll])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `win32-dll' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])\n\n\n# _LT_ENABLE_SHARED([DEFAULT])\n# ----------------------------\n# implement the --enable-shared flag, and supports the `shared' and\n# `disable-shared' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_SHARED],\n[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([shared],\n    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],\n\t[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)\n\n    _LT_DECL([build_libtool_libs], [enable_shared], [0],\n\t[Whether or not to build shared libraries])\n])# _LT_ENABLE_SHARED\n\nLT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])\n])\n\nAC_DEFUN([AC_DISABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], [disable-shared])\n])\n\nAU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])\nAU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_SHARED], [])\ndnl AC_DEFUN([AM_DISABLE_SHARED], [])\n\n\n\n# _LT_ENABLE_STATIC([DEFAULT])\n# ----------------------------\n# implement the --enable-static flag, and support the `static' and\n# `disable-static' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_STATIC],\n[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([static],\n    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],\n\t[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)\n\n    _LT_DECL([build_old_libs], [enable_static], [0],\n\t[Whether or not to build static libraries])\n])# _LT_ENABLE_STATIC\n\nLT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])\n])\n\nAC_DEFUN([AC_DISABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], [disable-static])\n])\n\nAU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])\nAU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_STATIC], [])\ndnl AC_DEFUN([AM_DISABLE_STATIC], [])\n\n\n\n# _LT_ENABLE_FAST_INSTALL([DEFAULT])\n# ----------------------------------\n# implement the --enable-fast-install flag, and support the `fast-install'\n# and `disable-fast-install' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_FAST_INSTALL],\n[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([fast-install],\n    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],\n    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)\n\n_LT_DECL([fast_install], [enable_fast_install], [0],\n\t [Whether or not to optimize for fast installation])dnl\n])# _LT_ENABLE_FAST_INSTALL\n\nLT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])\n\n# Old names:\nAU_DEFUN([AC_ENABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `fast-install' option into LT_INIT's first parameter.])\n])\n\nAU_DEFUN([AC_DISABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], [disable-fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `disable-fast-install' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])\ndnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])\n\n\n# _LT_WITH_PIC([MODE])\n# --------------------\n# implement the --with-pic flag, and support the `pic-only' and `no-pic'\n# LT_INIT options.\n# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.\nm4_define([_LT_WITH_PIC],\n[AC_ARG_WITH([pic],\n    [AS_HELP_STRING([--with-pic],\n\t[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],\n    [pic_mode=\"$withval\"],\n    [pic_mode=default])\n\ntest -z \"$pic_mode\" && pic_mode=m4_default([$1], [default])\n\n_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl\n])# _LT_WITH_PIC\n\nLT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])\n\n# Old name:\nAU_DEFUN([AC_LIBTOOL_PICMODE],\n[_LT_SET_OPTION([LT_INIT], [pic-only])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `pic-only' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])\n\n\nm4_define([_LTDL_MODE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],\n\t\t [m4_define([_LTDL_MODE], [nonrecursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [recursive],\n\t\t [m4_define([_LTDL_MODE], [recursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [subproject],\n\t\t [m4_define([_LTDL_MODE], [subproject])])\n\nm4_define([_LTDL_TYPE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [installable],\n\t\t [m4_define([_LTDL_TYPE], [installable])])\nLT_OPTION_DEFINE([LTDL_INIT], [convenience],\n\t\t [m4_define([_LTDL_TYPE], [convenience])])\n\n# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-\n#\n# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.\n# Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 6 ltsugar.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])\n\n\n# lt_join(SEP, ARG1, [ARG2...])\n# -----------------------------\n# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their\n# associated separator.\n# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier\n# versions in m4sugar had bugs.\nm4_define([lt_join],\n[m4_if([$#], [1], [],\n       [$#], [2], [[$2]],\n       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])\nm4_define([_lt_join],\n[m4_if([$#$2], [2], [],\n       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])\n\n\n# lt_car(LIST)\n# lt_cdr(LIST)\n# ------------\n# Manipulate m4 lists.\n# These macros are necessary as long as will still need to support\n# Autoconf-2.59 which quotes differently.\nm4_define([lt_car], [[$1]])\nm4_define([lt_cdr],\n[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],\n       [$#], 1, [],\n       [m4_dquote(m4_shift($@))])])\nm4_define([lt_unquote], $1)\n\n\n# lt_append(MACRO-NAME, STRING, [SEPARATOR])\n# ------------------------------------------\n# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.\n# Note that neither SEPARATOR nor STRING are expanded; they are appended\n# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).\n# No SEPARATOR is output if MACRO-NAME was previously undefined (different\n# than defined and empty).\n#\n# This macro is needed until we can rely on Autoconf 2.62, since earlier\n# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.\nm4_define([lt_append],\n[m4_define([$1],\n\t   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])\n\n\n\n# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])\n# ----------------------------------------------------------\n# Produce a SEP delimited list of all paired combinations of elements of\n# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list\n# has the form PREFIXmINFIXSUFFIXn.\n# Needed until we can rely on m4_combine added in Autoconf 2.62.\nm4_define([lt_combine],\n[m4_if(m4_eval([$# > 3]), [1],\n       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl\n[[m4_foreach([_Lt_prefix], [$2],\n\t     [m4_foreach([_Lt_suffix],\n\t\t]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,\n\t[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])\n\n\n# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])\n# -----------------------------------------------------------------------\n# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited\n# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.\nm4_define([lt_if_append_uniq],\n[m4_ifdef([$1],\n\t  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],\n\t\t [lt_append([$1], [$2], [$3])$4],\n\t\t [$5])],\n\t  [lt_append([$1], [$2], [$3])$4])])\n\n\n# lt_dict_add(DICT, KEY, VALUE)\n# -----------------------------\nm4_define([lt_dict_add],\n[m4_define([$1($2)], [$3])])\n\n\n# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)\n# --------------------------------------------\nm4_define([lt_dict_add_subkey],\n[m4_define([$1($2:$3)], [$4])])\n\n\n# lt_dict_fetch(DICT, KEY, [SUBKEY])\n# ----------------------------------\nm4_define([lt_dict_fetch],\n[m4_ifval([$3],\n\tm4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),\n    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])\n\n\n# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])\n# -----------------------------------------------------------------\nm4_define([lt_if_dict_fetch],\n[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],\n\t[$5],\n    [$6])])\n\n\n# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])\n# --------------------------------------------------------------\nm4_define([lt_dict_filter],\n[m4_if([$5], [], [],\n  [lt_join(m4_quote(m4_default([$4], [[, ]])),\n           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),\n\t\t      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl\n])\n\n# ltversion.m4 -- version numbers\t\t\t-*- Autoconf -*-\n#\n#   Copyright (C) 2004 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# Generated from ltversion.in.\n\n# serial 3017 ltversion.m4\n# This file is part of GNU Libtool\n\nm4_define([LT_PACKAGE_VERSION], [2.2.6b])\nm4_define([LT_PACKAGE_REVISION], [1.3017])\n\nAC_DEFUN([LTVERSION_VERSION],\n[macro_version='2.2.6b'\nmacro_revision='1.3017'\n_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])\n_LT_DECL(, macro_revision, 0)\n])\n\n# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-\n#\n#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004.\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 4 lt~obsolete.m4\n\n# These exist entirely to fool aclocal when bootstrapping libtool.\n#\n# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)\n# which have later been changed to m4_define as they aren't part of the\n# exported API, or moved to Autoconf or Automake where they belong.\n#\n# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN\n# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us\n# using a macro with the same name in our local m4/libtool.m4 it'll\n# pull the old libtool.m4 in (it doesn't see our shiny new m4_define\n# and doesn't know about Autoconf macros at all.)\n#\n# So we provide this file, which has a silly filename so it's always\n# included after everything else.  This provides aclocal with the\n# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything\n# because those macros already exist, or will be overwritten later.\n# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. \n#\n# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.\n# Yes, that means every name once taken will need to remain here until\n# we give up compatibility with versions before 1.7, at which point\n# we need to keep only those names which we still refer to.\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])\n\nm4_ifndef([AC_LIBTOOL_LINKER_OPTION],\t[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])\nm4_ifndef([AC_PROG_EGREP],\t\t[AC_DEFUN([AC_PROG_EGREP])])\nm4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],\t[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])\nm4_ifndef([_LT_AC_SHELL_INIT],\t\t[AC_DEFUN([_LT_AC_SHELL_INIT])])\nm4_ifndef([_LT_AC_SYS_LIBPATH_AIX],\t[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])\nm4_ifndef([_LT_PROG_LTMAIN],\t\t[AC_DEFUN([_LT_PROG_LTMAIN])])\nm4_ifndef([_LT_AC_TAGVAR],\t\t[AC_DEFUN([_LT_AC_TAGVAR])])\nm4_ifndef([AC_LTDL_ENABLE_INSTALL],\t[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])\nm4_ifndef([AC_LTDL_PREOPEN],\t\t[AC_DEFUN([AC_LTDL_PREOPEN])])\nm4_ifndef([_LT_AC_SYS_COMPILER],\t[AC_DEFUN([_LT_AC_SYS_COMPILER])])\nm4_ifndef([_LT_AC_LOCK],\t\t[AC_DEFUN([_LT_AC_LOCK])])\nm4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],\t[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])\nm4_ifndef([_LT_AC_TRY_DLOPEN_SELF],\t[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])\nm4_ifndef([AC_LIBTOOL_PROG_CC_C_O],\t[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])\nm4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])\nm4_ifndef([AC_LIBTOOL_OBJDIR],\t\t[AC_DEFUN([AC_LIBTOOL_OBJDIR])])\nm4_ifndef([AC_LTDL_OBJDIR],\t\t[AC_DEFUN([AC_LTDL_OBJDIR])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])\nm4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],\t[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])\nm4_ifndef([AC_PATH_MAGIC],\t\t[AC_DEFUN([AC_PATH_MAGIC])])\nm4_ifndef([AC_PROG_LD_GNU],\t\t[AC_DEFUN([AC_PROG_LD_GNU])])\nm4_ifndef([AC_PROG_LD_RELOAD_FLAG],\t[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])\nm4_ifndef([AC_DEPLIBS_CHECK_METHOD],\t[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])\nm4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],\t[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])\nm4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],\t[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])\nm4_ifndef([LT_AC_PROG_EGREP],\t\t[AC_DEFUN([LT_AC_PROG_EGREP])])\nm4_ifndef([LT_AC_PROG_SED],\t\t[AC_DEFUN([LT_AC_PROG_SED])])\nm4_ifndef([_LT_CC_BASENAME],\t\t[AC_DEFUN([_LT_CC_BASENAME])])\nm4_ifndef([_LT_COMPILER_BOILERPLATE],\t[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])\nm4_ifndef([_LT_LINKER_BOILERPLATE],\t[AC_DEFUN([_LT_LINKER_BOILERPLATE])])\nm4_ifndef([_AC_PROG_LIBTOOL],\t\t[AC_DEFUN([_AC_PROG_LIBTOOL])])\nm4_ifndef([AC_LIBTOOL_SETUP],\t\t[AC_DEFUN([AC_LIBTOOL_SETUP])])\nm4_ifndef([_LT_AC_CHECK_DLFCN],\t\t[AC_DEFUN([_LT_AC_CHECK_DLFCN])])\nm4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],\t[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])\nm4_ifndef([_LT_AC_TAGCONFIG],\t\t[AC_DEFUN([_LT_AC_TAGCONFIG])])\nm4_ifndef([AC_DISABLE_FAST_INSTALL],\t[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])\nm4_ifndef([_LT_AC_LANG_CXX],\t\t[AC_DEFUN([_LT_AC_LANG_CXX])])\nm4_ifndef([_LT_AC_LANG_F77],\t\t[AC_DEFUN([_LT_AC_LANG_F77])])\nm4_ifndef([_LT_AC_LANG_GCJ],\t\t[AC_DEFUN([_LT_AC_LANG_GCJ])])\nm4_ifndef([AC_LIBTOOL_RC],\t\t[AC_DEFUN([AC_LIBTOOL_RC])])\nm4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])\nm4_ifndef([_LT_AC_LANG_C_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])\nm4_ifndef([_LT_AC_LANG_CXX_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])\nm4_ifndef([_LT_AC_LANG_F77_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])\nm4_ifndef([_LT_AC_LANG_GCJ_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])\nm4_ifndef([_LT_AC_LANG_RC_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])\nm4_ifndef([AC_LIBTOOL_CONFIG],\t\t[AC_DEFUN([AC_LIBTOOL_CONFIG])])\nm4_ifndef([_LT_AC_FILE_LTDLL_C],\t[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])\n\n# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  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.\n# (This private macro should not be called outside this file.)\nAC_DEFUN([AM_AUTOMAKE_VERSION],\n[am__api_version='1.11'\ndnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to\ndnl require some minimum version.  Point them to the right macro.\nm4_if([$1], [1.11.1], [],\n      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl\n])\n\n# _AM_AUTOCONF_VERSION(VERSION)\n# -----------------------------\n# aclocal traces this macro to find the Autoconf version.\n# This is a private macro too.  Using m4_define simplifies\n# the logic in aclocal, which can simply ignore this definition.\nm4_define([_AM_AUTOCONF_VERSION], [])\n\n# AM_SET_CURRENT_AUTOMAKE_VERSION\n# -------------------------------\n# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.\n# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.\nAC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\n[AM_AUTOMAKE_VERSION([1.11.1])dnl\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\n_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])\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, 2006, 2008\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 9\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])dnl\nAC_SUBST([$1_FALSE])dnl\n_AM_SUBST_NOTMAKE([$1_TRUE])dnl\n_AM_SUBST_NOTMAKE([$1_FALSE])dnl\nm4_define([_AM_COND_VALUE_$1], [$2])dnl\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# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009\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 10\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], UPC,  [depcc=\"$UPC\"  am_compiler_list=],\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  am__universal=false\n  m4_case([$1], [CC],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac],\n    [CXX],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac])\n\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    # 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.  Also, some Intel\n    # versions had trouble with output in subdirs\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvisualcpp | msvcmsys)\n      # This compiler won't grok `-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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])dnl\n_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl\n])\n\n# Generate code to set up dependency tracking.              -*- Autoconf -*-\n\n# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008\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 5\n\n# _AM_OUTPUT_DEPENDENCY_COMMANDS\n# ------------------------------\nAC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],\n[{\n  # Autoconf 2.62 quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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\t 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\n  done\n}\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# Do all the work for Automake.                             -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,\n# 2005, 2006, 2008, 2009 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 16\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.62])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\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])\n  fi\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\ndnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.\nm4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,\n  [m4_fatal([AC_INIT should be called with package and version arguments])])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)\nAC_REQUIRE([AM_PROG_INSTALL_SH])dnl\nAC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl\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\t      [_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\t\t  [_AM_DEPENDENCIES(CC)],\n\t\t  [define([AC_PROG_CC],\n\t\t\t  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_CXX],\n\t\t  [_AM_DEPENDENCIES(CXX)],\n\t\t  [define([AC_PROG_CXX],\n\t\t\t  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_OBJC],\n\t\t  [_AM_DEPENDENCIES(OBJC)],\n\t\t  [define([AC_PROG_OBJC],\n\t\t\t  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl\n])\n_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl\ndnl The `parallel-tests' driver may need to know about EXEEXT, so add the\ndnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro\ndnl is hooked onto _AC_COMPILER_EXEEXT early, see below.\nAC_CONFIG_COMMANDS_PRE(dnl\n[m4_provide_if([_AM_COMPILER_EXEEXT],\n  [AM_CONDITIONAL([am__EXEEXT], [test -n \"$EXEEXT\"])])])dnl\n])\n\ndnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not\ndnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further\ndnl mangled by Autoconf and run in a shell conditional statement.\nm4_define([_AC_COMPILER_EXEEXT],\nm4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])\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_arg=$1\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $_am_arg | $_am_arg:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $_am_arg\" >`AS_DIRNAME([\"$_am_arg\"])`/stamp-h[]$_am_stamp_count])\n\n# Copyright (C) 2001, 2003, 2005, 2008  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\nif test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\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, 2009  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_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 this is the am__doit target\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# Ignore all kinds of additional output from `make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\nfi\nAC_SUBST([am__include])\nAC_SUBST([am__quote])\nAC_MSG_RESULT([$_am_result])\nrm -f confinc confmf\n])\n\n# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-\n\n# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008\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 6\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\nAC_REQUIRE_AUX_FILE([missing])dnl\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\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, 2006  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 for `mkdir -p'.\nAC_DEFUN([AM_PROG_MKDIR_P],\n[AC_PREREQ([2.60])dnl\nAC_REQUIRE([AC_PROG_MKDIR_P])dnl\ndnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,\ndnl while keeping a definition of mkdir_p for backward compatibility.\ndnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.\ndnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of\ndnl Makefile.ins that do not define MKDIR_P, so we do our own\ndnl adjustment using top_builddir (which is defined more often than\ndnl MKDIR_P).\nAC_SUBST([mkdir_p], [\"$MKDIR_P\"])dnl\ncase $mkdir_p in\n  [[\\\\/$]]* | ?:[[\\\\/]]*) ;;\n  */*) mkdir_p=\"\\$(top_builddir)/$mkdir_p\" ;;\nesac\n])\n\n# Helper functions for option handling.                     -*- Autoconf -*-\n\n# Copyright (C) 2001, 2002, 2003, 2005, 2008  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_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[m4_foreach_w([_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# Check to make sure that the build environment is sane.    -*- Autoconf -*-\n\n# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008\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 5\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# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]]*)\n    AC_MSG_ERROR([unsafe absolute working directory name]);;\nesac\ncase $srcdir in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]]*)\n    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;\nesac\n\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=\"\\$(install_sh) -c -s\"\nAC_SUBST([INSTALL_STRIP_PROGRAM])])\n\n# Copyright (C) 2006, 2008  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_SUBST_NOTMAKE(VARIABLE)\n# ---------------------------\n# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.\n# This macro is traced by Automake.\nAC_DEFUN([_AM_SUBST_NOTMAKE])\n\n# AM_SUBST_NOTMAKE(VARIABLE)\n# ---------------------------\n# Public sister of _AM_SUBST_NOTMAKE.\nAC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])\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\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/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, 2007, 2008, 2009, 2010\n#   Free Software Foundation, Inc.\n\ntimestamp='2009-12-30'\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.  Please send patches (context\n# diff format) to <config-patches@gnu.org> and include a ChangeLog\n# 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# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\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,\n2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free\nSoftware 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    sh5el) machine=sh5le-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 -q __ELF__\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 powerpc-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    s390x:SunOS:*:*)\n\techo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)\n\techo i386-pc-auroraux${UNAME_RELEASE}\n\texit ;;\n    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)\n\teval $set_cc_for_build\n\tSUN_ARCH=\"i386\"\n\t# If there is a compiler, see if it is configured for 64-bit objects.\n\t# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.\n\t# This test works for both compilers.\n\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\tgrep IS_64BIT_ARCH >/dev/null\n\t    then\n\t\tSUN_ARCH=\"x86_64\"\n\t    fi\n\tfi\n\techo ${SUN_ARCH}-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:*:[456])\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 -q __LP64__\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    amd64)\n\t\techo x86_64-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    *: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    *:Interix*:*)\n    \tcase ${UNAME_MACHINE} in\n\t    x86)\n\t\techo i586-pc-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    authenticamd | genuineintel | EM64T)\n\t\techo x86_64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    IA64)\n\t\techo ia64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\tesac ;;\n    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)\n\techo i${UNAME_MACHINE}-pc-mks\n\texit ;;\n    8664:Windows_NT:*)\n\techo x86_64-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    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 -q ld.so.1\n\tif test \"$?\" = 0 ; then LIBC=\"libc1\" ; else LIBC=\"\" ; fi\n\techo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}\n\texit ;;\n    arm*:Linux:*:*)\n\teval $set_cc_for_build\n\tif echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t    | grep -q __ARM_EABI__\n\tthen\n\t    echo ${UNAME_MACHINE}-unknown-linux-gnu\n\telse\n\t    echo ${UNAME_MACHINE}-unknown-linux-gnueabi\n\tfi\n\texit ;;\n    avr32*: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    i*86:Linux:*:*)\n\tLIBC=gnu\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#ifdef __dietlibc__\n\tLIBC=dietlibc\n\t#endif\nEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`\n\techo \"${UNAME_MACHINE}-pc-linux-${LIBC}\"\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:*:* | mips64:Linux:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#undef CPU\n\t#undef ${UNAME_MACHINE}\n\t#undef ${UNAME_MACHINE}el\n\t#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)\n\tCPU=${UNAME_MACHINE}el\n\t#else\n\t#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)\n\tCPU=${UNAME_MACHINE}\n\t#else\n\tCPU=\n\t#endif\n\t#endif\nEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`\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    padre:Linux:*:*)\n\techo sparc-unknown-linux-gnu\n\texit ;;\n    parisc64:Linux:*:* | hppa64:Linux:*:*)\n\techo hppa64-unknown-linux-gnu\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    ppc64:Linux:*:*)\n\techo powerpc64-unknown-linux-gnu\n\texit ;;\n    ppc:Linux:*:*)\n\techo powerpc-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    xtensa*:Linux:*:*)\n    \techo ${UNAME_MACHINE}-unknown-linux-gnu\n\texit ;;\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.[02]*:*)\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 i586.\n\t# Note: whatever this is, it MUST be the same as what config.sub\n\t# prints for the \"djgpp\" host, or else GDB configury will decide that\n\t# this is a cross-build.\n\techo i586-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    NCR*:*:4.2:* | MPRAS*:*:4.2:*)\n\tOS_REL='.3'\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\t/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \\\n\t    && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*)\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    BePC:Haiku:*:*)\t# Haiku running on Intel PC compatible.\n\techo i586-pc-haiku\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    SX-7:SUPER-UX:*:*)\n\techo sx7-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8:SUPER-UX:*:*)\n\techo sx8-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8R:SUPER-UX:*:*)\n\techo sx8r-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    i386)\n\t\teval $set_cc_for_build\n\t\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t\t  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\t      grep IS_64BIT_ARCH >/dev/null\n\t\t  then\n\t\t      UNAME_PROCESSOR=\"x86_64\"\n\t\t  fi\n\t\tfi ;;\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 ;;\n    i*86:AROS:*:*)\n\techo ${UNAME_MACHINE}-pc-aros\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://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\nand\n  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/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, 2007, 2008, 2009, 2010\n#   Free Software Foundation, Inc.\n\ntimestamp='2010-01-22'\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 GNU 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# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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,\n2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free\nSoftware 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  kopensolaris*-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 | -microblaze)\n\t\tos=\n\t\tbasic_machine=$1\n\t\t;;\n        -bluegene*)\n\t        os=-cnk\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 | avr32 \\\n\t| bfin \\\n\t| c4x | clipper \\\n\t| d10v | d30v | dlx | dsp16xx \\\n\t| fido | 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| lm32 \\\n\t| m32c | m32r | m32rle | m68000 | m68k | m88k \\\n\t| maxq | mb | microblaze | mcore | mep | metag \\\n\t| mips | mipsbe | mipseb | mipsel | mipsle \\\n\t| mips16 \\\n\t| mips64 | mips64el \\\n\t| mips64octeon | mips64octeonel \\\n\t| mips64orion | mips64orionel \\\n\t| mips64r5900 | mips64r5900el \\\n\t| mips64vr | mips64vrel \\\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| moxie \\\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| rx \\\n\t| score \\\n\t| sh | sh[1234] | sh[24]a | sh[24]aeb | 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| spu | strongarm \\\n\t| tahoe | thumb | tic4x | tic80 | tron \\\n\t| ubicom32 \\\n\t| v850 | v850e \\\n\t| we32k \\\n\t| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \\\n\t| z8k | z80)\n\t\tbasic_machine=$basic_machine-unknown\n\t\t;;\n\tm6811 | m68hc11 | m6812 | m68hc12 | picochip)\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-* | avr32-* \\\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-* | fido-* | 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| lm32-* \\\n\t| m32c-* | m32r-* | m32rle-* \\\n\t| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \\\n\t| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \\\n\t| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \\\n\t| mips16-* \\\n\t| mips64-* | mips64el-* \\\n\t| mips64octeon-* | mips64octeonel-* \\\n\t| mips64orion-* | mips64orionel-* \\\n\t| mips64r5900-* | mips64r5900el-* \\\n\t| mips64vr-* | mips64vrel-* \\\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-* | rx-* \\\n\t| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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| tile-* | tilegx-* \\\n\t| tron-* \\\n\t| ubicom32-* \\\n\t| v850-* | v850e-* | vax-* \\\n\t| we32k-* \\\n\t| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \\\n\t| xstormy16-* | xtensa*-* \\\n\t| ymp-* \\\n\t| z8k-* | z80-*)\n\t\t;;\n\t# Recognize the basic CPU types without company name, with glob match.\n\txtensa*)\n\t\tbasic_machine=$basic_machine-unknown\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\taros)\n\t\tbasic_machine=i386-pc\n\t\tos=-aros\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\tblackfin)\n\t\tbasic_machine=bfin-unknown\n\t\tos=-linux\n\t\t;;\n\tblackfin-*)\n\t\tbasic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\n\t\t;;\n\tbluegene*)\n\t\tbasic_machine=powerpc-ibm\n\t\tos=-cnk\n\t\t;;\n\tc90)\n\t\tbasic_machine=c90-cray\n\t\tos=-unicos\n\t\t;;\n        cegcc)\n\t\tbasic_machine=arm-unknown\n\t\tos=-cegcc\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\tcr16)\n\t\tbasic_machine=cr16-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\tdicos)\n\t\tbasic_machine=i686-pc\n\t\tos=-dicos\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\tm68knommu)\n\t\tbasic_machine=m68k-unknown\n\t\tos=-linux\n\t\t;;\n\tm68knommu-*)\n\t\tbasic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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        microblaze)\n\t\tbasic_machine=microblaze-xilinx\n\t\t;;\n\tmingw32)\n\t\tbasic_machine=i386-pc\n\t\tos=-mingw32\n\t\t;;\n\tmingw32ce)\n\t\tbasic_machine=arm-unknown\n\t\tos=-mingw32ce\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\tparisc)\n\t\tbasic_machine=hppa-unknown\n\t\tos=-linux\n\t\t;;\n\tparisc-*)\n\t\tbasic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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\tsde)\n\t\tbasic_machine=mipsisa32-sde\n\t\tos=-elf\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\tsh5el)\n\t\tbasic_machine=sh5le-unknown\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        # This must be matched before tile*.\n        tilegx*)\n\t\tbasic_machine=tilegx-unknown\n\t\tos=-linux-gnu\n\t\t;;\n\ttile*)\n\t\tbasic_machine=tile-unknown\n\t\tos=-linux-gnu\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\tz80-*-coff)\n\t\tbasic_machine=z80-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[24]aeb | 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        -auroraux)\n\t        os=-auroraux\n\t\t;;\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* | -cnk* | -sunos | -sunos[34]*\\\n\t      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \\\n\t      | -sym* | -kopensolaris* \\\n\t      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \\\n\t      | -aos* | -aros* \\\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* | -cegcc* \\\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* | -toppers* | -drops* | -es*)\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-dicos*)\n\t\tos=-dicos\n\t\t;;\n        -nacl*)\n\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        score-*)\n\t\tos=-elf\n\t\t;;\n        spu-*)\n\t\tos=-elf\n\t\t;;\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        \tos=-coff\n\t\t;;\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        mep-*)\n\t\tos=-elf\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-cnk*|-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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config/depcomp",
    "content": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2009-04-28.21; # UTC\n\n# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free\n# 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, see <http://www.gnu.org/licenses/>.\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\ncygpath_u=\"cygpath -u -f -\"\nif test \"$depmode\" = msvcmsys; then\n   # This is just like msvisualcpp but w/o cygpath translation.\n   # Just convert the backslash-escaped backslashes to single forward\n   # slashes to satisfy depend.m4\n   cygpath_u=\"sed s,\\\\\\\\\\\\\\\\,/,g\"\n   depmode=msvisualcpp\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## Unfortunately, FreeBSD c89 acceptance of flags depends upon\n## the command line argument order; so add the flags where they\n## appear in depend2.am.  Note that the slowdown incurred here\n## affects only configure: in makefiles, %FASTDEP% shortcuts this.\n  for arg\n  do\n    case $arg in\n    -c) set fnord \"$@\" -MT \"$object\" -MD -MP -MF \"$tmpdepfile\" \"$arg\" ;;\n    *)  set fnord \"$@\" \"$arg\" ;;\n    esac\n    shift # fnord\n    shift # $arg\n  done\n  \"$@\"\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  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  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$base.u\n    tmpdepfile3=$dir.libs/$base.u\n    \"$@\" -Wc,-M\n  else\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$dir$base.u\n    tmpdepfile3=$dir$base.u\n    \"$@\" -M\n  fi\n  stat=$?\n\n  if test $stat -eq 0; then :\n  else\n    rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n    exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  if test -f \"$tmpdepfile\"; then\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,^.*\\.[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    # 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\nhp2)\n  # The \"hp\" stanza above does not work with aCC (C++) and HP's ia64\n  # compilers, which have integrated preprocessors.  The correct option\n  # to use with these is +Maked; it writes dependencies to a file named\n  # 'foo.d', which lands next to the object file, wherever that\n  # happens to be.\n  # Much of this is similar to the tru64 case; see comments there.\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  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir.libs/$base.d\n    \"$@\" -Wc,+Maked\n  else\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir$base.d\n    \"$@\" +Maked\n  fi\n  stat=$?\n  if test $stat -eq 0; then :\n  else\n     rm -f \"$tmpdepfile1\" \"$tmpdepfile2\"\n     exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\"\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    # Add `dependent.h:' lines.\n    sed -ne '2,${\n\t       s/^ *//\n\t       s/ \\\\*$//\n\t       s/$/:/\n\t       p\n\t     }' \"$tmpdepfile\" >> \"$depfile\"\n  else\n    echo \"#dummy\" > \"$depfile\"\n  fi\n  rm -f \"$tmpdepfile\" \"$tmpdepfile2\"\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 mechanism 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 $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 \"X$1\" != 'X--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 \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n  # X makedepend\n  shift\n  cleared=no eat=no\n  for arg\n  do\n    case $cleared in\n    no)\n      set \"\"; shift\n      cleared=yes ;;\n    esac\n    if test $eat = yes; then\n      eat=no\n      continue\n    fi\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    -arch)\n      eat=yes ;;\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 \"X$1\" != 'X--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.\n  \"$@\" || exit $?\n\n  # Remove the call to Libtool.\n  if test \"$libtool\" = yes; then\n    while test \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n\n  IFS=\" \"\n  for arg\n  do\n    case \"$arg\" in\n    -o)\n      shift\n      ;;\n    $object)\n      shift\n      ;;\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 2>/dev/null |\n  sed -n '/^#line [0-9][0-9]* \"\\([^\"]*\\)\"/ s::\\1:p' | $cygpath_u | sort -u > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::\t\\1 \\\\:p' >> \"$depfile\"\n  echo \"\t\" >> \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::\\1\\::p' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvcmsys)\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\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config/install-sh",
    "content": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2009-04-28.21; # UTC\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.\n\nnl='\n'\nIFS=\" \"\"\t$nl\"\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-}\nif test -z \"$doit\"; then\n  doit_exec=exec\nelse\n  doit_exec=$doit\nfi\n\n# Put in absolute file names if you don't have them in your path;\n# or use environment vars.\n\nchgrpprog=${CHGRPPROG-chgrp}\nchmodprog=${CHMODPROG-chmod}\nchownprog=${CHOWNPROG-chown}\ncmpprog=${CMPPROG-cmp}\ncpprog=${CPPROG-cp}\nmkdirprog=${MKDIRPROG-mkdir}\nmvprog=${MVPROG-mv}\nrmprog=${RMPROG-rm}\nstripprog=${STRIPPROG-strip}\n\nposix_glob='?'\ninitialize_posix_glob='\n  test \"$posix_glob\" != \"?\" || {\n    if (set -f) 2>/dev/null; then\n      posix_glob=\n    else\n      posix_glob=:\n    fi\n  }\n'\n\nposix_mkdir=\n\n# Desired mode of installed file.\nmode=0755\n\nchgrpcmd=\nchmodcmd=$chmodprog\nchowncmd=\nmvcmd=$mvprog\nrmcmd=\"$rmprog -f\"\nstripcmd=\n\nsrc=\ndst=\ndir_arg=\ndst_arg=\n\ncopy_on_change=false\nno_target_directory=\n\nusage=\"\\\nUsage: $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     --help     display this help and exit.\n     --version  display version info and exit.\n\n  -c            (ignored)\n  -C            install only if different (preserve the last data modification time)\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\nEnvironment variables override the default commands:\n  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG\n  RMPROG STRIPPROG\n\"\n\nwhile test $# -ne 0; do\n  case $1 in\n    -c) ;;\n\n    -C) copy_on_change=true;;\n\n    -d) dir_arg=true;;\n\n    -g) chgrpcmd=\"$chgrpprog $2\"\n\tshift;;\n\n    --help) echo \"$usage\"; exit $?;;\n\n    -m) mode=$2\n\tcase $mode in\n\t  *' '* | *'\t'* | *'\n'*\t  | *'*'* | *'?'* | *'['*)\n\t    echo \"$0: invalid mode: $mode\" >&2\n\t    exit 1;;\n\tesac\n\tshift;;\n\n    -o) chowncmd=\"$chownprog $2\"\n\tshift;;\n\n    -s) stripcmd=$stripprog;;\n\n    -t) dst_arg=$2\n\tshift;;\n\n    -T) no_target_directory=true;;\n\n    --version) echo \"$0 $scriptversion\"; exit $?;;\n\n    --)\tshift\n\tbreak;;\n\n    -*)\techo \"$0: invalid option: $1\" >&2\n\texit 1;;\n\n    *)  break;;\n  esac\n  shift\ndone\n\nif test $# -ne 0 && test -z \"$dir_arg$dst_arg\"; then\n  # When -d is used, all remaining arguments are directories to create.\n  # When -t is used, the destination is already specified.\n  # Otherwise, the last argument is the destination.  Remove it from $@.\n  for arg\n  do\n    if test -n \"$dst_arg\"; then\n      # $@ is not empty: it contains at least $arg.\n      set fnord \"$@\" \"$dst_arg\"\n      shift # fnord\n    fi\n    shift # arg\n    dst_arg=$arg\n  done\nfi\n\nif test $# -eq 0; 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\nif test -z \"$dir_arg\"; then\n  trap '(exit $?); exit' 1 2 13 15\n\n  # Set umask so as not to create temps with too-generous modes.\n  # However, 'strip' requires both read and write access to temps.\n  case $mode in\n    # Optimize common cases.\n    *644) cp_umask=133;;\n    *755) cp_umask=22;;\n\n    *[0-7])\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw='% 200'\n      fi\n      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;\n    *)\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw=,u+rw\n      fi\n      cp_umask=$mode$u_plus_rw;;\n  esac\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    dstdir=$dst\n    test -d \"$dstdir\"\n    dstdir_status=$?\n  else\n\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 \"$dst_arg\"; then\n      echo \"$0: no destination specified.\" >&2\n      exit 1\n    fi\n\n    dst=$dst_arg\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: $dst_arg: Is a directory\" >&2\n\texit 1\n      fi\n      dstdir=$dst\n      dst=$dstdir/`basename \"$src\"`\n      dstdir_status=0\n    else\n      # Prefer dirname, but fall back on a substitute if dirname fails.\n      dstdir=`\n\t(dirname \"$dst\") 2>/dev/null ||\n\texpr X\"$dst\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)[^/]' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)$' \\| \\\n\t     X\"$dst\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n\techo X\"$dst\" |\n\t    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)[^/].*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\).*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t s/.*/./; q'\n      `\n\n      test -d \"$dstdir\"\n      dstdir_status=$?\n    fi\n  fi\n\n  obsolete_mkdir_used=false\n\n  if test $dstdir_status != 0; then\n    case $posix_mkdir in\n      '')\n\t# Create intermediate dirs using mode 755 as modified by the umask.\n\t# This is like FreeBSD 'install' as of 1997-10-28.\n\tumask=`umask`\n\tcase $stripcmd.$umask in\n\t  # Optimize common cases.\n\t  *[2367][2367]) mkdir_umask=$umask;;\n\t  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;\n\n\t  *[0-7])\n\t    mkdir_umask=`expr $umask + 22 \\\n\t      - $umask % 100 % 40 + $umask % 20 \\\n\t      - $umask % 10 % 4 + $umask % 2\n\t    `;;\n\t  *) mkdir_umask=$umask,go-w;;\n\tesac\n\n\t# With -d, create the new directory with the user-specified mode.\n\t# Otherwise, rely on $mkdir_umask.\n\tif test -n \"$dir_arg\"; then\n\t  mkdir_mode=-m$mode\n\telse\n\t  mkdir_mode=\n\tfi\n\n\tposix_mkdir=false\n\tcase $umask in\n\t  *[123567][0-7][0-7])\n\t    # POSIX mkdir -p sets u+wx bits regardless of umask, which\n\t    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.\n\t    ;;\n\t  *)\n\t    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$\n\t    trap 'ret=$?; rmdir \"$tmpdir/d\" \"$tmpdir\" 2>/dev/null; exit $ret' 0\n\n\t    if (umask $mkdir_umask &&\n\t\texec $mkdirprog $mkdir_mode -p -- \"$tmpdir/d\") >/dev/null 2>&1\n\t    then\n\t      if test -z \"$dir_arg\" || {\n\t\t   # Check for POSIX incompatibilities with -m.\n\t\t   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or\n\t\t   # other-writeable bit of parent directory when it shouldn't.\n\t\t   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.\n\t\t   ls_ld_tmpdir=`ls -ld \"$tmpdir\"`\n\t\t   case $ls_ld_tmpdir in\n\t\t     d????-?r-*) different_mode=700;;\n\t\t     d????-?--*) different_mode=755;;\n\t\t     *) false;;\n\t\t   esac &&\n\t\t   $mkdirprog -m$different_mode -p -- \"$tmpdir\" && {\n\t\t     ls_ld_tmpdir_1=`ls -ld \"$tmpdir\"`\n\t\t     test \"$ls_ld_tmpdir\" = \"$ls_ld_tmpdir_1\"\n\t\t   }\n\t\t }\n\t      then posix_mkdir=:\n\t      fi\n\t      rmdir \"$tmpdir/d\" \"$tmpdir\"\n\t    else\n\t      # Remove any dirs left behind by ancient mkdir implementations.\n\t      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null\n\t    fi\n\t    trap '' 0;;\n\tesac;;\n    esac\n\n    if\n      $posix_mkdir && (\n\tumask $mkdir_umask &&\n\t$doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\"\n      )\n    then :\n    else\n\n      # The umask is ridiculous, or mkdir does not conform to POSIX,\n      # or it failed possibly due to a race condition.  Create the\n      # directory the slow way, step by step, checking for races as we go.\n\n      case $dstdir in\n\t/*) prefix='/';;\n\t-*) prefix='./';;\n\t*)  prefix='';;\n      esac\n\n      eval \"$initialize_posix_glob\"\n\n      oIFS=$IFS\n      IFS=/\n      $posix_glob set -f\n      set fnord $dstdir\n      shift\n      $posix_glob set +f\n      IFS=$oIFS\n\n      prefixes=\n\n      for d\n      do\n\ttest -z \"$d\" && continue\n\n\tprefix=$prefix$d\n\tif test -d \"$prefix\"; then\n\t  prefixes=\n\telse\n\t  if $posix_mkdir; then\n\t    (umask=$mkdir_umask &&\n\t     $doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\") && break\n\t    # Don't fail if two instances are running concurrently.\n\t    test -d \"$prefix\" || exit 1\n\t  else\n\t    case $prefix in\n\t      *\\'*) qprefix=`echo \"$prefix\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;;\n\t      *) qprefix=$prefix;;\n\t    esac\n\t    prefixes=\"$prefixes '$qprefix'\"\n\t  fi\n\tfi\n\tprefix=$prefix/\n      done\n\n      if test -n \"$prefixes\"; then\n\t# Don't fail if two instances are running concurrently.\n\t(umask $mkdir_umask &&\n\t eval \"\\$doit_exec \\$mkdirprog $prefixes\") ||\n\t  test -d \"$dstdir\" || exit 1\n\tobsolete_mkdir_used=true\n      fi\n    fi\n  fi\n\n  if test -n \"$dir_arg\"; then\n    { test -z \"$chowncmd\" || $doit $chowncmd \"$dst\"; } &&\n    { test -z \"$chgrpcmd\" || $doit $chgrpcmd \"$dst\"; } &&\n    { test \"$obsolete_mkdir_used$chowncmd$chgrpcmd\" = false ||\n      test -z \"$chmodcmd\" || $doit $chmodcmd $mode \"$dst\"; } || exit 1\n  else\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\n    # Copy the file name to the temp name.\n    (umask $cp_umask && $doit_exec $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 $mode \"$dsttmp\"; } &&\n\n    # If -C, don't bother to copy if it wouldn't change the file.\n    if $copy_on_change &&\n       old=`LC_ALL=C ls -dlL \"$dst\"\t2>/dev/null` &&\n       new=`LC_ALL=C ls -dlL \"$dsttmp\"\t2>/dev/null` &&\n\n       eval \"$initialize_posix_glob\" &&\n       $posix_glob set -f &&\n       set X $old && old=:$2:$4:$5:$6 &&\n       set X $new && new=:$2:$4:$5:$6 &&\n       $posix_glob set +f &&\n\n       test \"$old\" = \"$new\" &&\n       $cmpprog \"$dst\" \"$dsttmp\" >/dev/null 2>&1\n    then\n      rm -f \"$dsttmp\"\n    else\n      # Rename the file to the real destination.\n      $doit $mvcmd -f \"$dsttmp\" \"$dst\" 2>/dev/null ||\n\n      # The rename failed, perhaps because mv can't rename something else\n      # to itself, or perhaps because mv is so ancient that it does not\n      # 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  test ! -f \"$dst\" ||\n\t  $doit $rmcmd -f \"$dst\" 2>/dev/null ||\n\t  { $doit $mvcmd -f \"$dst\" \"$rmtmp\" 2>/dev/null &&\n\t    { $doit $rmcmd -f \"$rmtmp\" 2>/dev/null; :; }\n\t  } ||\n\t  { echo \"$0: cannot unlink or rename $dst\" >&2\n\t    (exit 1); exit 1\n\t  }\n\t} &&\n\n\t# Now rename the file to the real destination.\n\t$doit $mvcmd \"$dsttmp\" \"$dst\"\n      }\n    fi || exit 1\n\n    trap '' 0\n  fi\ndone\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config/ltmain.sh",
    "content": "# Generated from ltmain.m4sh.\n\n# ltmain.sh (GNU libtool) 2.2.6b\n# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.\n# This is free software; see the source for copying conditions.  There is NO\n# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n# GNU Libtool 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# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html,\n# or obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n# Usage: $progname [OPTION]... [MODE-ARG]...\n#\n# Provide generalized library-building support services.\n#\n#     --config             show all configuration variables\n#     --debug              enable verbose shell tracing\n# -n, --dry-run            display commands without modifying any files\n#     --features           display basic configuration information and exit\n#     --mode=MODE          use operation mode MODE\n#     --preserve-dup-deps  don't remove duplicate dependency libraries\n#     --quiet, --silent    don't print informational messages\n#     --tag=TAG            use configuration variables from tag TAG\n# -v, --verbose            print informational messages (default)\n#     --version            print version information\n# -h, --help               print short or long help message\n#\n# MODE must be one of the following:\n#\n#       clean              remove files from the build directory\n#       compile            compile a source file into a libtool object\n#       execute            automatically set library path, then run a program\n#       finish             complete the installation of libtool libraries\n#       install            install libraries or executables\n#       link               create a library or an executable\n#       uninstall          remove libraries from an installed directory\n#\n# MODE-ARGS vary depending on the MODE.\n# Try `$progname --help --mode=MODE' for a more detailed description of MODE.\n#\n# When reporting a bug, please describe a test case to reproduce it and\n# include the following information:\n#\n#       host-triplet:\t$host\n#       shell:\t\t$SHELL\n#       compiler:\t\t$LTCC\n#       compiler flags:\t\t$LTCFLAGS\n#       linker:\t\t$LD (gnu? $with_gnu_ld)\n#       $progname:\t\t(GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1\n#       automake:\t\t$automake_version\n#       autoconf:\t\t$autoconf_version\n#\n# Report bugs to <bug-libtool@gnu.org>.\n\nPROGRAM=ltmain.sh\nPACKAGE=libtool\nVERSION=\"2.2.6b Debian-2.2.6b-2ubuntu1\"\nTIMESTAMP=\"\"\npackage_revision=1.3017\n\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# NLS nuisances: We save the old values to restore during execute mode.\n# Only set LANG and LC_ALL to C if already set.\n# These must not be set unconditionally because not all systems understand\n# e.g. LANG=C (notably SCO).\nlt_user_locale=\nlt_safe_locale=\nfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\ndo\n  eval \"if test \\\"\\${$lt_var+set}\\\" = set; then\n          save_$lt_var=\\$$lt_var\n          $lt_var=C\n\t  export $lt_var\n\t  lt_user_locale=\\\"$lt_var=\\\\\\$save_\\$lt_var; \\$lt_user_locale\\\"\n\t  lt_safe_locale=\\\"$lt_var=C; \\$lt_safe_locale\\\"\n\tfi\"\ndone\n\n$lt_unset CDPATH\n\n\n\n\n\n: ${CP=\"cp -f\"}\n: ${ECHO=\"echo\"}\n: ${EGREP=\"/bin/grep -E\"}\n: ${FGREP=\"/bin/grep -F\"}\n: ${GREP=\"/bin/grep\"}\n: ${LN_S=\"ln -s\"}\n: ${MAKE=\"make\"}\n: ${MKDIR=\"mkdir\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n: ${SED=\"/bin/sed\"}\n: ${SHELL=\"${CONFIG_SHELL-/bin/sh}\"}\n: ${Xsed=\"$SED -e 1s/^X//\"}\n\n# Global variables:\nEXIT_SUCCESS=0\nEXIT_FAILURE=1\nEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.\nEXIT_SKIP=77\t  # $? = 77 is used to indicate a skipped test to automake.\n\nexit_status=$EXIT_SUCCESS\n\n# Make sure IFS has a sensible default\nlt_nl='\n'\nIFS=\" \t$lt_nl\"\n\ndirname=\"s,/[^/]*$,,\"\nbasename=\"s,^.*/,,\"\n\n# func_dirname_and_basename file append nondir_replacement\n# perform func_basename and func_dirname in a single function\n# call:\n#   dirname:  Compute the dirname of FILE.  If nonempty,\n#             add APPEND to the result, otherwise set result\n#             to NONDIR_REPLACEMENT.\n#             value returned in \"$func_dirname_result\"\n#   basename: Compute filename of FILE.\n#             value retuned in \"$func_basename_result\"\n# Implementation must be kept synchronized with func_dirname\n# and func_basename. For efficiency, we do not delegate to\n# those functions but instead duplicate the functionality here.\nfunc_dirname_and_basename ()\n{\n  # Extract subdirectory from the argument.\n  func_dirname_result=`$ECHO \"X${1}\" | $Xsed -e \"$dirname\"`\n  if test \"X$func_dirname_result\" = \"X${1}\"; then\n    func_dirname_result=\"${3}\"\n  else\n    func_dirname_result=\"$func_dirname_result${2}\"\n  fi\n  func_basename_result=`$ECHO \"X${1}\" | $Xsed -e \"$basename\"`\n}\n\n# Generated shell functions inserted here.\n\n# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh\n# is ksh but when the shell is invoked as \"sh\" and the current value of\n# the _XPG environment variable is not equal to 1 (one), the special\n# positional parameter $0, within a function call, is the name of the\n# function.\nprogpath=\"$0\"\n\n# The name of this program:\n# In the unlikely event $progname began with a '-', it would play havoc with\n# func_echo (imagine progname=-n), so we prepend ./ in that case:\nfunc_dirname_and_basename \"$progpath\"\nprogname=$func_basename_result\ncase $progname in\n  -*) progname=./$progname ;;\nesac\n\n# Make sure we have an absolute path for reexecution:\ncase $progpath in\n  [\\\\/]*|[A-Za-z]:\\\\*) ;;\n  *[\\\\/]*)\n     progdir=$func_dirname_result\n     progdir=`cd \"$progdir\" && pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\n  *)\n     save_IFS=\"$IFS\"\n     IFS=:\n     for progdir in $PATH; do\n       IFS=\"$save_IFS\"\n       test -x \"$progdir/$progname\" && break\n     done\n     IFS=\"$save_IFS\"\n     test -n \"$progdir\" || progdir=`pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed=\"${SED}\"' -e 1s/^X//'\nsed_quote_subst='s/\\([`\"$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Re-`\\' parameter expansions in output of double_quote_subst that were\n# `\\'-ed in input to the same.  If an odd number of `\\' preceded a '$'\n# in input to double_quote_subst, that '$' was protected from expansion.\n# Since each input `\\' is now two `\\'s, look for any number of runs of\n# four `\\'s followed by two `\\'s and then a '$'.  `\\' that '$'.\nbs='\\\\'\nbs2='\\\\\\\\'\nbs4='\\\\\\\\\\\\\\\\'\ndollar='\\$'\nsed_double_backslash=\"\\\n  s/$bs4/&\\\\\n/g\n  s/^$bs2$dollar/$bs&/\n  s/\\\\([^$bs]\\\\)$bs2$dollar/\\\\1$bs2$bs$dollar/g\n  s/\\n//g\"\n\n# Standard options:\nopt_dry_run=false\nopt_help=false\nopt_quiet=false\nopt_verbose=false\nopt_warning=:\n\n# func_echo arg...\n# Echo program name prefixed message, along with the current mode\n# name if it has been set yet.\nfunc_echo ()\n{\n    $ECHO \"$progname${mode+: }$mode: $*\"\n}\n\n# func_verbose arg...\n# Echo program name prefixed message in verbose mode only.\nfunc_verbose ()\n{\n    $opt_verbose && func_echo ${1+\"$@\"}\n\n    # A bug in bash halts the script if the last line of a function\n    # fails when set -e is in force, so we need another command to\n    # work around that:\n    :\n}\n\n# func_error arg...\n# Echo program name prefixed message to standard error.\nfunc_error ()\n{\n    $ECHO \"$progname${mode+: }$mode: \"${1+\"$@\"} 1>&2\n}\n\n# func_warning arg...\n# Echo program name prefixed warning message to standard error.\nfunc_warning ()\n{\n    $opt_warning && $ECHO \"$progname${mode+: }$mode: warning: \"${1+\"$@\"} 1>&2\n\n    # bash bug again:\n    :\n}\n\n# func_fatal_error arg...\n# Echo program name prefixed message to standard error, and exit.\nfunc_fatal_error ()\n{\n    func_error ${1+\"$@\"}\n    exit $EXIT_FAILURE\n}\n\n# func_fatal_help arg...\n# Echo program name prefixed message to standard error, followed by\n# a help hint, and exit.\nfunc_fatal_help ()\n{\n    func_error ${1+\"$@\"}\n    func_fatal_error \"$help\"\n}\nhelp=\"Try \\`$progname --help' for more information.\"  ## default\n\n\n# func_grep expression filename\n# Check whether EXPRESSION matches any line of FILENAME, without output.\nfunc_grep ()\n{\n    $GREP \"$1\" \"$2\" >/dev/null 2>&1\n}\n\n\n# func_mkdir_p directory-path\n# Make sure the entire path to DIRECTORY-PATH is available.\nfunc_mkdir_p ()\n{\n    my_directory_path=\"$1\"\n    my_dir_list=\n\n    if test -n \"$my_directory_path\" && test \"$opt_dry_run\" != \":\"; then\n\n      # Protect directory names starting with `-'\n      case $my_directory_path in\n        -*) my_directory_path=\"./$my_directory_path\" ;;\n      esac\n\n      # While some portion of DIR does not yet exist...\n      while test ! -d \"$my_directory_path\"; do\n        # ...make a list in topmost first order.  Use a colon delimited\n\t# list incase some portion of path contains whitespace.\n        my_dir_list=\"$my_directory_path:$my_dir_list\"\n\n        # If the last portion added has no slash in it, the list is done\n        case $my_directory_path in */*) ;; *) break ;; esac\n\n        # ...otherwise throw away the child directory and loop\n        my_directory_path=`$ECHO \"X$my_directory_path\" | $Xsed -e \"$dirname\"`\n      done\n      my_dir_list=`$ECHO \"X$my_dir_list\" | $Xsed -e 's,:*$,,'`\n\n      save_mkdir_p_IFS=\"$IFS\"; IFS=':'\n      for my_dir in $my_dir_list; do\n\tIFS=\"$save_mkdir_p_IFS\"\n        # mkdir can fail with a `File exist' error if two processes\n        # try to create one of the directories concurrently.  Don't\n        # stop in that case!\n        $MKDIR \"$my_dir\" 2>/dev/null || :\n      done\n      IFS=\"$save_mkdir_p_IFS\"\n\n      # Bail out if we (or some other process) failed to create a directory.\n      test -d \"$my_directory_path\" || \\\n        func_fatal_error \"Failed to create \\`$1'\"\n    fi\n}\n\n\n# func_mktempdir [string]\n# Make a temporary directory that won't clash with other running\n# libtool processes, and avoids race conditions if possible.  If\n# given, STRING is the basename for that directory.\nfunc_mktempdir ()\n{\n    my_template=\"${TMPDIR-/tmp}/${1-$progname}\"\n\n    if test \"$opt_dry_run\" = \":\"; then\n      # Return a directory name, but don't create it in dry-run mode\n      my_tmpdir=\"${my_template}-$$\"\n    else\n\n      # If mktemp works, use that first and foremost\n      my_tmpdir=`mktemp -d \"${my_template}-XXXXXXXX\" 2>/dev/null`\n\n      if test ! -d \"$my_tmpdir\"; then\n        # Failing that, at least try and use $RANDOM to avoid a race\n        my_tmpdir=\"${my_template}-${RANDOM-0}$$\"\n\n        save_mktempdir_umask=`umask`\n        umask 0077\n        $MKDIR \"$my_tmpdir\"\n        umask $save_mktempdir_umask\n      fi\n\n      # If we're not in dry-run mode, bomb out on failure\n      test -d \"$my_tmpdir\" || \\\n        func_fatal_error \"cannot create temporary directory \\`$my_tmpdir'\"\n    fi\n\n    $ECHO \"X$my_tmpdir\" | $Xsed\n}\n\n\n# func_quote_for_eval arg\n# Aesthetically quote ARG to be evaled later.\n# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT\n# is double-quoted, suitable for a subsequent eval, whereas\n# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters\n# which are still active within double quotes backslashified.\nfunc_quote_for_eval ()\n{\n    case $1 in\n      *[\\\\\\`\\\"\\$]*)\n\tfunc_quote_for_eval_unquoted_result=`$ECHO \"X$1\" | $Xsed -e \"$sed_quote_subst\"` ;;\n      *)\n        func_quote_for_eval_unquoted_result=\"$1\" ;;\n    esac\n\n    case $func_quote_for_eval_unquoted_result in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting, command substitution and and variable\n      # expansion for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        func_quote_for_eval_result=\"\\\"$func_quote_for_eval_unquoted_result\\\"\"\n        ;;\n      *)\n        func_quote_for_eval_result=\"$func_quote_for_eval_unquoted_result\"\n    esac\n}\n\n\n# func_quote_for_expand arg\n# Aesthetically quote ARG to be evaled later; same as above,\n# but do not quote variable references.\nfunc_quote_for_expand ()\n{\n    case $1 in\n      *[\\\\\\`\\\"]*)\n\tmy_arg=`$ECHO \"X$1\" | $Xsed \\\n\t    -e \"$double_quote_subst\" -e \"$sed_double_backslash\"` ;;\n      *)\n        my_arg=\"$1\" ;;\n    esac\n\n    case $my_arg in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting and command substitution for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        my_arg=\"\\\"$my_arg\\\"\"\n        ;;\n    esac\n\n    func_quote_for_expand_result=\"$my_arg\"\n}\n\n\n# func_show_eval cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.\nfunc_show_eval ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$my_cmd\"\n      my_status=$?\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n\n# func_show_eval_locale cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.  Use the saved locale for evaluation.\nfunc_show_eval_locale ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$lt_user_locale\n\t    $my_cmd\"\n      my_status=$?\n      eval \"$lt_safe_locale\"\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n\n\n\n\n# func_version\n# Echo version message to standard output and exit.\nfunc_version ()\n{\n    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {\n        s/^# //\n\ts/^# *$//\n        s/\\((C)\\)[ 0-9,-]*\\( [1-9][0-9]*\\)/\\1\\2/\n        p\n     }' < \"$progpath\"\n     exit $?\n}\n\n# func_usage\n# Echo short help message to standard output and exit.\nfunc_usage ()\n{\n    $SED -n '/^# Usage:/,/# -h/ {\n        s/^# //\n\ts/^# *$//\n\ts/\\$progname/'$progname'/\n\tp\n    }' < \"$progpath\"\n    $ECHO\n    $ECHO \"run \\`$progname --help | more' for full usage\"\n    exit $?\n}\n\n# func_help\n# Echo long help message to standard output and exit.\nfunc_help ()\n{\n    $SED -n '/^# Usage:/,/# Report bugs to/ {\n        s/^# //\n\ts/^# *$//\n\ts*\\$progname*'$progname'*\n\ts*\\$host*'\"$host\"'*\n\ts*\\$SHELL*'\"$SHELL\"'*\n\ts*\\$LTCC*'\"$LTCC\"'*\n\ts*\\$LTCFLAGS*'\"$LTCFLAGS\"'*\n\ts*\\$LD*'\"$LD\"'*\n\ts/\\$with_gnu_ld/'\"$with_gnu_ld\"'/\n\ts/\\$automake_version/'\"`(automake --version) 2>/dev/null |$SED 1q`\"'/\n\ts/\\$autoconf_version/'\"`(autoconf --version) 2>/dev/null |$SED 1q`\"'/\n\tp\n     }' < \"$progpath\"\n    exit $?\n}\n\n# func_missing_arg argname\n# Echo program name prefixed message to standard error and set global\n# exit_cmd.\nfunc_missing_arg ()\n{\n    func_error \"missing argument for $1\"\n    exit_cmd=exit\n}\n\nexit_cmd=:\n\n\n\n\n\n# Check that we have a working $ECHO.\nif test \"X$1\" = X--no-reexec; then\n  # Discard the --no-reexec flag, and continue.\n  shift\nelif test \"X$1\" = X--fallback-echo; then\n  # Avoid inline document here, it may be left over\n  :\nelif test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t'; then\n  # Yippee, $ECHO works!\n  :\nelse\n  # Restart under the correct shell, and then maybe $ECHO will work.\n  exec $SHELL \"$progpath\" --no-reexec ${1+\"$@\"}\nfi\n\nif test \"X$1\" = X--fallback-echo; then\n  # used as fallback echo\n  shift\n  cat <<EOF\n$*\nEOF\n  exit $EXIT_SUCCESS\nfi\n\nmagic=\"%%%MAGIC variable%%%\"\nmagic_exe=\"%%%MAGIC EXE variable%%%\"\n\n# Global variables.\n# $mode is unset\nnonopt=\nexecute_dlfiles=\npreserve_args=\nlo2o=\"s/\\\\.lo\\$/.${objext}/\"\no2lo=\"s/\\\\.${objext}\\$/.lo/\"\nextracted_archives=\nextracted_serial=0\n\nopt_dry_run=false\nopt_duplicate_deps=false\nopt_silent=false\nopt_debug=:\n\n# If this variable is set in any of the actions, the command in it\n# will be execed at the end.  This prevents here-documents from being\n# left over by shells.\nexec_cmd=\n\n# func_fatal_configuration arg...\n# Echo program name prefixed message to standard error, followed by\n# a configuration failure hint, and exit.\nfunc_fatal_configuration ()\n{\n    func_error ${1+\"$@\"}\n    func_error \"See the $PACKAGE documentation for more information.\"\n    func_fatal_error \"Fatal configuration error.\"\n}\n\n\n# func_config\n# Display the configuration for all the tags in this script.\nfunc_config ()\n{\n    re_begincf='^# ### BEGIN LIBTOOL'\n    re_endcf='^# ### END LIBTOOL'\n\n    # Default configuration.\n    $SED \"1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\\$d\" < \"$progpath\"\n\n    # Now print the configurations for the tags.\n    for tagname in $taglist; do\n      $SED -n \"/$re_begincf TAG CONFIG: $tagname\\$/,/$re_endcf TAG CONFIG: $tagname\\$/p\" < \"$progpath\"\n    done\n\n    exit $?\n}\n\n# func_features\n# Display the features supported by this script.\nfunc_features ()\n{\n    $ECHO \"host: $host\"\n    if test \"$build_libtool_libs\" = yes; then\n      $ECHO \"enable shared libraries\"\n    else\n      $ECHO \"disable shared libraries\"\n    fi\n    if test \"$build_old_libs\" = yes; then\n      $ECHO \"enable static libraries\"\n    else\n      $ECHO \"disable static libraries\"\n    fi\n\n    exit $?\n}\n\n# func_enable_tag tagname\n# Verify that TAGNAME is valid, and either flag an error and exit, or\n# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist\n# variable here.\nfunc_enable_tag ()\n{\n  # Global variable:\n  tagname=\"$1\"\n\n  re_begincf=\"^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\\$\"\n  re_endcf=\"^# ### END LIBTOOL TAG CONFIG: $tagname\\$\"\n  sed_extractcf=\"/$re_begincf/,/$re_endcf/p\"\n\n  # Validate tagname.\n  case $tagname in\n    *[!-_A-Za-z0-9,/]*)\n      func_fatal_error \"invalid tag name: $tagname\"\n      ;;\n  esac\n\n  # Don't test for the \"default\" C tag, as we know it's\n  # there but not specially marked.\n  case $tagname in\n    CC) ;;\n    *)\n      if $GREP \"$re_begincf\" \"$progpath\" >/dev/null 2>&1; then\n\ttaglist=\"$taglist $tagname\"\n\n\t# Evaluate the configuration.  Be careful to quote the path\n\t# and the sed script, to avoid splitting on whitespace, but\n\t# also don't use non-portable quotes within backquotes within\n\t# quotes we have to do it in 2 steps:\n\textractedcf=`$SED -n -e \"$sed_extractcf\" < \"$progpath\"`\n\teval \"$extractedcf\"\n      else\n\tfunc_error \"ignoring unknown tag $tagname\"\n      fi\n      ;;\n  esac\n}\n\n# Parse options once, thoroughly.  This comes as soon as possible in\n# the script to make things like `libtool --version' happen quickly.\n{\n\n  # Shorthand for --mode=foo, only valid as the first argument\n  case $1 in\n  clean|clea|cle|cl)\n    shift; set dummy --mode clean ${1+\"$@\"}; shift\n    ;;\n  compile|compil|compi|comp|com|co|c)\n    shift; set dummy --mode compile ${1+\"$@\"}; shift\n    ;;\n  execute|execut|execu|exec|exe|ex|e)\n    shift; set dummy --mode execute ${1+\"$@\"}; shift\n    ;;\n  finish|finis|fini|fin|fi|f)\n    shift; set dummy --mode finish ${1+\"$@\"}; shift\n    ;;\n  install|instal|insta|inst|ins|in|i)\n    shift; set dummy --mode install ${1+\"$@\"}; shift\n    ;;\n  link|lin|li|l)\n    shift; set dummy --mode link ${1+\"$@\"}; shift\n    ;;\n  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)\n    shift; set dummy --mode uninstall ${1+\"$@\"}; shift\n    ;;\n  esac\n\n  # Parse non-mode specific arguments:\n  while test \"$#\" -gt 0; do\n    opt=\"$1\"\n    shift\n\n    case $opt in\n      --config)\t\tfunc_config\t\t\t\t\t;;\n\n      --debug)\t\tpreserve_args=\"$preserve_args $opt\"\n\t\t\tfunc_echo \"enabling shell trace mode\"\n\t\t\topt_debug='set -x'\n\t\t\t$opt_debug\n\t\t\t;;\n\n      -dlopen)\t\ttest \"$#\" -eq 0 && func_missing_arg \"$opt\" && break\n\t\t\texecute_dlfiles=\"$execute_dlfiles $1\"\n\t\t\tshift\n\t\t\t;;\n\n      --dry-run | -n)\topt_dry_run=:\t\t\t\t\t;;\n      --features)       func_features\t\t\t\t\t;;\n      --finish)\t\tmode=\"finish\"\t\t\t\t\t;;\n\n      --mode)\t\ttest \"$#\" -eq 0 && func_missing_arg \"$opt\" && break\n\t\t\tcase $1 in\n\t\t\t  # Valid mode arguments:\n\t\t\t  clean)\t;;\n\t\t\t  compile)\t;;\n\t\t\t  execute)\t;;\n\t\t\t  finish)\t;;\n\t\t\t  install)\t;;\n\t\t\t  link)\t\t;;\n\t\t\t  relink)\t;;\n\t\t\t  uninstall)\t;;\n\n\t\t\t  # Catch anything else as an error\n\t\t\t  *) func_error \"invalid argument for $opt\"\n\t\t\t     exit_cmd=exit\n\t\t\t     break\n\t\t\t     ;;\n\t\t        esac\n\n\t\t\tmode=\"$1\"\n\t\t\tshift\n\t\t\t;;\n\n      --preserve-dup-deps)\n\t\t\topt_duplicate_deps=:\t\t\t\t;;\n\n      --quiet|--silent)\tpreserve_args=\"$preserve_args $opt\"\n\t\t\topt_silent=:\n\t\t\t;;\n\n      --verbose| -v)\tpreserve_args=\"$preserve_args $opt\"\n\t\t\topt_silent=false\n\t\t\t;;\n\n      --tag)\t\ttest \"$#\" -eq 0 && func_missing_arg \"$opt\" && break\n\t\t\tpreserve_args=\"$preserve_args $opt $1\"\n\t\t\tfunc_enable_tag \"$1\"\t# tagname is set here\n\t\t\tshift\n\t\t\t;;\n\n      # Separate optargs to long options:\n      -dlopen=*|--mode=*|--tag=*)\n\t\t\tfunc_opt_split \"$opt\"\n\t\t\tset dummy \"$func_opt_split_opt\" \"$func_opt_split_arg\" ${1+\"$@\"}\n\t\t\tshift\n\t\t\t;;\n\n      -\\?|-h)\t\tfunc_usage\t\t\t\t\t;;\n      --help)\t\topt_help=:\t\t\t\t\t;;\n      --version)\tfunc_version\t\t\t\t\t;;\n\n      -*)\t\tfunc_fatal_help \"unrecognized option \\`$opt'\"\t;;\n\n      *)\t\tnonopt=\"$opt\"\n\t\t\tbreak\n\t\t\t;;\n    esac\n  done\n\n\n  case $host in\n    *cygwin* | *mingw* | *pw32* | *cegcc*)\n      # don't eliminate duplications in $postdeps and $predeps\n      opt_duplicate_compiler_generated_deps=:\n      ;;\n    *)\n      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps\n      ;;\n  esac\n\n  # Having warned about all mis-specified options, bail out if\n  # anything was wrong.\n  $exit_cmd $EXIT_FAILURE\n}\n\n# func_check_version_match\n# Ensure that we are using m4 macros, and libtool script from the same\n# release of libtool.\nfunc_check_version_match ()\n{\n  if test \"$package_revision\" != \"$macro_revision\"; then\n    if test \"$VERSION\" != \"$macro_version\"; then\n      if test -z \"$macro_version\"; then\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from an older release.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      else\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      fi\n    else\n      cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,\n$progname: but the definition of this LT_INIT comes from revision $macro_revision.\n$progname: You should recreate aclocal.m4 with macros from revision $package_revision\n$progname: of $PACKAGE $VERSION and run autoconf again.\n_LT_EOF\n    fi\n\n    exit $EXIT_MISMATCH\n  fi\n}\n\n\n## ----------- ##\n##    Main.    ##\n## ----------- ##\n\n$opt_help || {\n  # Sanity checks first:\n  func_check_version_match\n\n  if test \"$build_libtool_libs\" != yes && test \"$build_old_libs\" != yes; then\n    func_fatal_configuration \"not configured to build any kind of library\"\n  fi\n\n  test -z \"$mode\" && func_fatal_error \"error: you must specify a MODE.\"\n\n\n  # Darwin sucks\n  eval std_shrext=\\\"$shrext_cmds\\\"\n\n\n  # Only execute mode is allowed to have -dlopen flags.\n  if test -n \"$execute_dlfiles\" && test \"$mode\" != execute; then\n    func_error \"unrecognized option \\`-dlopen'\"\n    $ECHO \"$help\" 1>&2\n    exit $EXIT_FAILURE\n  fi\n\n  # Change the help message to a mode-specific one.\n  generic_help=\"$help\"\n  help=\"Try \\`$progname --help --mode=$mode' for more information.\"\n}\n\n\n# func_lalib_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_lalib_p ()\n{\n    test -f \"$1\" &&\n      $SED -e 4q \"$1\" 2>/dev/null \\\n        | $GREP \"^# Generated by .*$PACKAGE\" > /dev/null 2>&1\n}\n\n# func_lalib_unsafe_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function implements the same check as func_lalib_p without\n# resorting to external programs.  To this end, it redirects stdin and\n# closes it afterwards, without saving the original file descriptor.\n# As a safety measure, use it only where a negative result would be\n# fatal anyway.  Works if `file' does not exist.\nfunc_lalib_unsafe_p ()\n{\n    lalib_p=no\n    if test -f \"$1\" && test -r \"$1\" && exec 5<&0 <\"$1\"; then\n\tfor lalib_p_l in 1 2 3 4\n\tdo\n\t    read lalib_p_line\n\t    case \"$lalib_p_line\" in\n\t\t\\#\\ Generated\\ by\\ *$PACKAGE* ) lalib_p=yes; break;;\n\t    esac\n\tdone\n\texec 0<&5 5<&-\n    fi\n    test \"$lalib_p\" = yes\n}\n\n# func_ltwrapper_script_p file\n# True iff FILE is a libtool wrapper script\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_script_p ()\n{\n    func_lalib_p \"$1\"\n}\n\n# func_ltwrapper_executable_p file\n# True iff FILE is a libtool wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_executable_p ()\n{\n    func_ltwrapper_exec_suffix=\n    case $1 in\n    *.exe) ;;\n    *) func_ltwrapper_exec_suffix=.exe ;;\n    esac\n    $GREP \"$magic_exe\" \"$1$func_ltwrapper_exec_suffix\" >/dev/null 2>&1\n}\n\n# func_ltwrapper_scriptname file\n# Assumes file is an ltwrapper_executable\n# uses $file to determine the appropriate filename for a\n# temporary ltwrapper_script.\nfunc_ltwrapper_scriptname ()\n{\n    func_ltwrapper_scriptname_result=\"\"\n    if func_ltwrapper_executable_p \"$1\"; then\n\tfunc_dirname_and_basename \"$1\" \"\" \".\"\n\tfunc_stripname '' '.exe' \"$func_basename_result\"\n\tfunc_ltwrapper_scriptname_result=\"$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper\"\n    fi\n}\n\n# func_ltwrapper_p file\n# True iff FILE is a libtool wrapper script or wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_p ()\n{\n    func_ltwrapper_script_p \"$1\" || func_ltwrapper_executable_p \"$1\"\n}\n\n\n# func_execute_cmds commands fail_cmd\n# Execute tilde-delimited COMMANDS.\n# If FAIL_CMD is given, eval that upon failure.\n# FAIL_CMD may read-access the current command in variable CMD!\nfunc_execute_cmds ()\n{\n    $opt_debug\n    save_ifs=$IFS; IFS='~'\n    for cmd in $1; do\n      IFS=$save_ifs\n      eval cmd=\\\"$cmd\\\"\n      func_show_eval \"$cmd\" \"${2-:}\"\n    done\n    IFS=$save_ifs\n}\n\n\n# func_source file\n# Source FILE, adding directory component if necessary.\n# Note that it is not necessary on cygwin/mingw to append a dot to\n# FILE even if both FILE and FILE.exe exist: automatic-append-.exe\n# behavior happens only for exec(3), not for open(2)!  Also, sourcing\n# `FILE.' does not work on cygwin managed mounts.\nfunc_source ()\n{\n    $opt_debug\n    case $1 in\n    */* | *\\\\*)\t. \"$1\" ;;\n    *)\t\t. \"./$1\" ;;\n    esac\n}\n\n\n# func_infer_tag arg\n# Infer tagged configuration to use if any are available and\n# if one wasn't chosen via the \"--tag\" command line option.\n# Only attempt this if the compiler in the base compile\n# command doesn't match the default compiler.\n# arg is usually of the form 'gcc ...'\nfunc_infer_tag ()\n{\n    $opt_debug\n    if test -n \"$available_tags\" && test -z \"$tagname\"; then\n      CC_quoted=\n      for arg in $CC; do\n        func_quote_for_eval \"$arg\"\n\tCC_quoted=\"$CC_quoted $func_quote_for_eval_result\"\n      done\n      case $@ in\n      # Blanks in the command may have been stripped by the calling shell,\n      # but not from the CC environment variable when configure was run.\n      \" $CC \"* | \"$CC \"* | \" `$ECHO $CC` \"* | \"`$ECHO $CC` \"* | \" $CC_quoted\"* | \"$CC_quoted \"* | \" `$ECHO $CC_quoted` \"* | \"`$ECHO $CC_quoted` \"*) ;;\n      # Blanks at the start of $base_compile will cause this to fail\n      # if we don't check for them as well.\n      *)\n\tfor z in $available_tags; do\n\t  if $GREP \"^# ### BEGIN LIBTOOL TAG CONFIG: $z$\" < \"$progpath\" > /dev/null; then\n\t    # Evaluate the configuration.\n\t    eval \"`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`\"\n\t    CC_quoted=\n\t    for arg in $CC; do\n\t      # Double-quote args containing other shell metacharacters.\n\t      func_quote_for_eval \"$arg\"\n\t      CC_quoted=\"$CC_quoted $func_quote_for_eval_result\"\n\t    done\n\t    case \"$@ \" in\n\t      \" $CC \"* | \"$CC \"* | \" `$ECHO $CC` \"* | \"`$ECHO $CC` \"* | \" $CC_quoted\"* | \"$CC_quoted \"* | \" `$ECHO $CC_quoted` \"* | \"`$ECHO $CC_quoted` \"*)\n\t      # The compiler in the base compile command matches\n\t      # the one in the tagged configuration.\n\t      # Assume this is the tagged configuration we want.\n\t      tagname=$z\n\t      break\n\t      ;;\n\t    esac\n\t  fi\n\tdone\n\t# If $tagname still isn't set, then no tagged configuration\n\t# was found and let the user know that the \"--tag\" command\n\t# line option must be used.\n\tif test -z \"$tagname\"; then\n\t  func_echo \"unable to infer tagged configuration\"\n\t  func_fatal_error \"specify a tag with \\`--tag'\"\n#\telse\n#\t  func_verbose \"using $tagname tagged configuration\"\n\tfi\n\t;;\n      esac\n    fi\n}\n\n\n\n# func_write_libtool_object output_name pic_name nonpic_name\n# Create a libtool object file (analogous to a \".la\" file),\n# but don't create it if we're doing a dry run.\nfunc_write_libtool_object ()\n{\n    write_libobj=${1}\n    if test \"$build_libtool_libs\" = yes; then\n      write_lobj=\\'${2}\\'\n    else\n      write_lobj=none\n    fi\n\n    if test \"$build_old_libs\" = yes; then\n      write_oldobj=\\'${3}\\'\n    else\n      write_oldobj=none\n    fi\n\n    $opt_dry_run || {\n      cat >${write_libobj}T <<EOF\n# $write_libobj - a libtool object file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# Name of the PIC object.\npic_object=$write_lobj\n\n# Name of the non-PIC object\nnon_pic_object=$write_oldobj\n\nEOF\n      $MV \"${write_libobj}T\" \"${write_libobj}\"\n    }\n}\n\n# func_mode_compile arg...\nfunc_mode_compile ()\n{\n    $opt_debug\n    # Get the compilation command and the source file.\n    base_compile=\n    srcfile=\"$nonopt\"  #  always keep a non-empty value in \"srcfile\"\n    suppress_opt=yes\n    suppress_output=\n    arg_mode=normal\n    libobj=\n    later=\n    pie_flag=\n\n    for arg\n    do\n      case $arg_mode in\n      arg  )\n\t# do not \"continue\".  Instead, add this to base_compile\n\tlastarg=\"$arg\"\n\targ_mode=normal\n\t;;\n\n      target )\n\tlibobj=\"$arg\"\n\targ_mode=normal\n\tcontinue\n\t;;\n\n      normal )\n\t# Accept any command-line options.\n\tcase $arg in\n\t-o)\n\t  test -n \"$libobj\" && \\\n\t    func_fatal_error \"you cannot specify \\`-o' more than once\"\n\t  arg_mode=target\n\t  continue\n\t  ;;\n\n\t-pie | -fpie | -fPIE)\n          pie_flag=\"$pie_flag $arg\"\n\t  continue\n\t  ;;\n\n\t-shared | -static | -prefer-pic | -prefer-non-pic)\n\t  later=\"$later $arg\"\n\t  continue\n\t  ;;\n\n\t-no-suppress)\n\t  suppress_opt=no\n\t  continue\n\t  ;;\n\n\t-Xcompiler)\n\t  arg_mode=arg  #  the next one goes into the \"base_compile\" arg list\n\t  continue      #  The current \"srcfile\" will either be retained or\n\t  ;;            #  replaced later.  I would guess that would be a bug.\n\n\t-Wc,*)\n\t  func_stripname '-Wc,' '' \"$arg\"\n\t  args=$func_stripname_result\n\t  lastarg=\n\t  save_ifs=\"$IFS\"; IFS=','\n\t  for arg in $args; do\n\t    IFS=\"$save_ifs\"\n\t    func_quote_for_eval \"$arg\"\n\t    lastarg=\"$lastarg $func_quote_for_eval_result\"\n\t  done\n\t  IFS=\"$save_ifs\"\n\t  func_stripname ' ' '' \"$lastarg\"\n\t  lastarg=$func_stripname_result\n\n\t  # Add the arguments to base_compile.\n\t  base_compile=\"$base_compile $lastarg\"\n\t  continue\n\t  ;;\n\n\t*)\n\t  # Accept the current argument as the source file.\n\t  # The previous \"srcfile\" becomes the current argument.\n\t  #\n\t  lastarg=\"$srcfile\"\n\t  srcfile=\"$arg\"\n\t  ;;\n\tesac  #  case $arg\n\t;;\n      esac    #  case $arg_mode\n\n      # Aesthetically quote the previous argument.\n      func_quote_for_eval \"$lastarg\"\n      base_compile=\"$base_compile $func_quote_for_eval_result\"\n    done # for arg\n\n    case $arg_mode in\n    arg)\n      func_fatal_error \"you must specify an argument for -Xcompile\"\n      ;;\n    target)\n      func_fatal_error \"you must specify a target with \\`-o'\"\n      ;;\n    *)\n      # Get the name of the library object.\n      test -z \"$libobj\" && {\n\tfunc_basename \"$srcfile\"\n\tlibobj=\"$func_basename_result\"\n      }\n      ;;\n    esac\n\n    # Recognize several different file suffixes.\n    # If the user specifies -o file.o, it is replaced with file.lo\n    case $libobj in\n    *.[cCFSifmso] | \\\n    *.ada | *.adb | *.ads | *.asm | \\\n    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \\\n    *.[fF][09]? | *.for | *.java | *.obj | *.sx)\n      func_xform \"$libobj\"\n      libobj=$func_xform_result\n      ;;\n    esac\n\n    case $libobj in\n    *.lo) func_lo2o \"$libobj\"; obj=$func_lo2o_result ;;\n    *)\n      func_fatal_error \"cannot determine name of library object from \\`$libobj'\"\n      ;;\n    esac\n\n    func_infer_tag $base_compile\n\n    for arg in $later; do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tcontinue\n\t;;\n\n      -static)\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tcontinue\n\t;;\n\n      -prefer-pic)\n\tpic_mode=yes\n\tcontinue\n\t;;\n\n      -prefer-non-pic)\n\tpic_mode=no\n\tcontinue\n\t;;\n      esac\n    done\n\n    func_quote_for_eval \"$libobj\"\n    test \"X$libobj\" != \"X$func_quote_for_eval_result\" \\\n      && $ECHO \"X$libobj\" | $GREP '[]~#^*{};<>?\"'\"'\"'\t &()|`$[]' \\\n      && func_warning \"libobj name \\`$libobj' may not contain shell special characters.\"\n    func_dirname_and_basename \"$obj\" \"/\" \"\"\n    objname=\"$func_basename_result\"\n    xdir=\"$func_dirname_result\"\n    lobj=${xdir}$objdir/$objname\n\n    test -z \"$base_compile\" && \\\n      func_fatal_help \"you must specify a compilation command\"\n\n    # Delete any leftover library objects.\n    if test \"$build_old_libs\" = yes; then\n      removelist=\"$obj $lobj $libobj ${libobj}T\"\n    else\n      removelist=\"$lobj $libobj ${libobj}T\"\n    fi\n\n    # On Cygwin there's no \"real\" PIC flag so we must build both object types\n    case $host_os in\n    cygwin* | mingw* | pw32* | os2* | cegcc*)\n      pic_mode=default\n      ;;\n    esac\n    if test \"$pic_mode\" = no && test \"$deplibs_check_method\" != pass_all; then\n      # non-PIC code in shared libraries is not supported\n      pic_mode=default\n    fi\n\n    # Calculate the filename of the output object if compiler does\n    # not support -o with -c\n    if test \"$compiler_c_o\" = no; then\n      output_obj=`$ECHO \"X$srcfile\" | $Xsed -e 's%^.*/%%' -e 's%\\.[^.]*$%%'`.${objext}\n      lockfile=\"$output_obj.lock\"\n    else\n      output_obj=\n      need_locks=no\n      lockfile=\n    fi\n\n    # Lock this critical section if it is needed\n    # We use this script file to make the link, it avoids creating a new file\n    if test \"$need_locks\" = yes; then\n      until $opt_dry_run || ln \"$progpath\" \"$lockfile\" 2>/dev/null; do\n\tfunc_echo \"Waiting for $lockfile to be removed\"\n\tsleep 2\n      done\n    elif test \"$need_locks\" = warn; then\n      if test -f \"$lockfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile exists and contains:\n`cat $lockfile 2>/dev/null`\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n      removelist=\"$removelist $output_obj\"\n      $ECHO \"$srcfile\" > \"$lockfile\"\n    fi\n\n    $opt_dry_run || $RM $removelist\n    removelist=\"$removelist $lockfile\"\n    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15\n\n    if test -n \"$fix_srcfile_path\"; then\n      eval srcfile=\\\"$fix_srcfile_path\\\"\n    fi\n    func_quote_for_eval \"$srcfile\"\n    qsrcfile=$func_quote_for_eval_result\n\n    # Only build a PIC object if we are building libtool libraries.\n    if test \"$build_libtool_libs\" = yes; then\n      # Without this assignment, base_compile gets emptied.\n      fbsd_hideous_sh_bug=$base_compile\n\n      if test \"$pic_mode\" != no; then\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      else\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile\"\n      fi\n\n      func_mkdir_p \"$xdir$objdir\"\n\n      if test -z \"$output_obj\"; then\n\t# Place PIC objects in $objdir\n\tcommand=\"$command -o $lobj\"\n      fi\n\n      func_show_eval_locale \"$command\"\t\\\n          'test -n \"$output_obj\" && $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed, then go on to compile the next one\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$lobj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$lobj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n\n      # Allow error messages only from the first compilation.\n      if test \"$suppress_opt\" = yes; then\n\tsuppress_output=' >/dev/null 2>&1'\n      fi\n    fi\n\n    # Only build a position-dependent object if we build old libraries.\n    if test \"$build_old_libs\" = yes; then\n      if test \"$pic_mode\" != yes; then\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile$pie_flag\"\n      else\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      fi\n      if test \"$compiler_c_o\" = yes; then\n\tcommand=\"$command -o $obj\"\n      fi\n\n      # Suppress compiler output if we already did a PIC compilation.\n      command=\"$command$suppress_output\"\n      func_show_eval_locale \"$command\" \\\n        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$obj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$obj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n    fi\n\n    $opt_dry_run || {\n      func_write_libtool_object \"$libobj\" \"$objdir/$objname\" \"$objname\"\n\n      # Unlock the critical section if it was locked\n      if test \"$need_locks\" != no; then\n\tremovelist=$lockfile\n        $RM \"$lockfile\"\n      fi\n    }\n\n    exit $EXIT_SUCCESS\n}\n\n$opt_help || {\ntest \"$mode\" = compile && func_mode_compile ${1+\"$@\"}\n}\n\nfunc_mode_help ()\n{\n    # We need to display help for each of the modes.\n    case $mode in\n      \"\")\n        # Generic help is extracted from the usage comments\n        # at the start of this file.\n        func_help\n        ;;\n\n      clean)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...\n\nRemove files from the build directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, object or program, all the files associated\nwith it are deleted. Otherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      compile)\n      $ECHO \\\n\"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE\n\nCompile a source file into a libtool library object.\n\nThis mode accepts the following additional options:\n\n  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE\n  -no-suppress      do not suppress compiler output for multiple passes\n  -prefer-pic       try to building PIC objects only\n  -prefer-non-pic   try to building non-PIC objects only\n  -shared           do not build a \\`.o' file suitable for static linking\n  -static           only build a \\`.o' file suitable for static linking\n\nCOMPILE-COMMAND is a command to be used in creating a \\`standard' object file\nfrom the given SOURCEFILE.\n\nThe output file name is determined by removing the directory component from\nSOURCEFILE, then substituting the C source code suffix \\`.c' with the\nlibrary object suffix, \\`.lo'.\"\n        ;;\n\n      execute)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...\n\nAutomatically set library path, then run a program.\n\nThis mode accepts the following additional options:\n\n  -dlopen FILE      add the directory containing FILE to the library path\n\nThis mode sets the library path environment variable according to \\`-dlopen'\nflags.\n\nIf any of the ARGS are libtool executable wrappers, then they are translated\ninto their corresponding uninstalled binary, and any of their required library\ndirectories are added to the library path.\n\nThen, COMMAND is executed, with ARGS as arguments.\"\n        ;;\n\n      finish)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...\n\nComplete the installation of libtool libraries.\n\nEach LIBDIR is a directory that contains libtool libraries.\n\nThe commands that this mode executes may require superuser privileges.  Use\nthe \\`--dry-run' option if you just want to see what would be executed.\"\n        ;;\n\n      install)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...\n\nInstall executables or libraries.\n\nINSTALL-COMMAND is the installation command.  The first component should be\neither the \\`install' or \\`cp' program.\n\nThe following components of INSTALL-COMMAND are treated specially:\n\n  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation\n\nThe rest of the components are interpreted as arguments to that command (only\nBSD-compatible install options are recognized).\"\n        ;;\n\n      link)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...\n\nLink object files or libraries together to form another library, or to\ncreate an executable program.\n\nLINK-COMMAND is a command using the C compiler that you would use to create\na program from several object files.\n\nThe following components of LINK-COMMAND are treated specially:\n\n  -all-static       do not do any dynamic linking at all\n  -avoid-version    do not add a version suffix if possible\n  -dlopen FILE      \\`-dlpreopen' FILE if it cannot be dlopened at runtime\n  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols\n  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)\n  -export-symbols SYMFILE\n                    try to export only the symbols listed in SYMFILE\n  -export-symbols-regex REGEX\n                    try to export only the symbols matching REGEX\n  -LLIBDIR          search LIBDIR for required installed libraries\n  -lNAME            OUTPUT-FILE requires the installed library libNAME\n  -module           build a library that can dlopened\n  -no-fast-install  disable the fast-install mode\n  -no-install       link a not-installable executable\n  -no-undefined     declare that a library does not refer to external symbols\n  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects\n  -objectlist FILE  Use a list of object files found in FILE to specify objects\n  -precious-files-regex REGEX\n                    don't remove output files matching REGEX\n  -release RELEASE  specify package release information\n  -rpath LIBDIR     the created library will eventually be installed in LIBDIR\n  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries\n  -shared           only do dynamic linking of libtool libraries\n  -shrext SUFFIX    override the standard shared library file extension\n  -static           do not do any dynamic linking of uninstalled libtool libraries\n  -static-libtool-libs\n                    do not do any dynamic linking of libtool libraries\n  -version-info CURRENT[:REVISION[:AGE]]\n                    specify library version info [each variable defaults to 0]\n  -weak LIBNAME     declare that the target provides the LIBNAME interface\n\nAll other options (arguments beginning with \\`-') are ignored.\n\nEvery other argument is treated as a filename.  Files ending in \\`.la' are\ntreated as uninstalled libtool libraries, other files are standard or library\nobject files.\n\nIf the OUTPUT-FILE ends in \\`.la', then a libtool library is created,\nonly library objects (\\`.lo' files) may be specified, and \\`-rpath' is\nrequired, except when creating a convenience library.\n\nIf OUTPUT-FILE ends in \\`.a' or \\`.lib', then a standard library is created\nusing \\`ar' and \\`ranlib', or on Windows using \\`lib'.\n\nIf OUTPUT-FILE ends in \\`.lo' or \\`.${objext}', then a reloadable object file\nis created, otherwise an executable program is created.\"\n        ;;\n\n      uninstall)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...\n\nRemove libraries from an installation directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, all the files associated with it are deleted.\nOtherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      *)\n        func_fatal_help \"invalid operation mode \\`$mode'\"\n        ;;\n    esac\n\n    $ECHO\n    $ECHO \"Try \\`$progname --help' for more information about other modes.\"\n\n    exit $?\n}\n\n  # Now that we've collected a possible --mode arg, show help if necessary\n  $opt_help && func_mode_help\n\n\n# func_mode_execute arg...\nfunc_mode_execute ()\n{\n    $opt_debug\n    # The first argument is the command name.\n    cmd=\"$nonopt\"\n    test -z \"$cmd\" && \\\n      func_fatal_help \"you must specify a COMMAND\"\n\n    # Handle -dlopen flags immediately.\n    for file in $execute_dlfiles; do\n      test -f \"$file\" \\\n\t|| func_fatal_help \"\\`$file' is not a file\"\n\n      dir=\n      case $file in\n      *.la)\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$lib' is not a valid libtool archive\"\n\n\t# Read the libtool library.\n\tdlname=\n\tlibrary_names=\n\tfunc_source \"$file\"\n\n\t# Skip this library if it cannot be dlopened.\n\tif test -z \"$dlname\"; then\n\t  # Warn if it was a shared library.\n\t  test -n \"$library_names\" && \\\n\t    func_warning \"\\`$file' was not linked with \\`-export-dynamic'\"\n\t  continue\n\tfi\n\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\n\tif test -f \"$dir/$objdir/$dlname\"; then\n\t  dir=\"$dir/$objdir\"\n\telse\n\t  if test ! -f \"$dir/$dlname\"; then\n\t    func_fatal_error \"cannot find \\`$dlname' in \\`$dir' or \\`$dir/$objdir'\"\n\t  fi\n\tfi\n\t;;\n\n      *.lo)\n\t# Just add the directory containing the .lo file.\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\t;;\n\n      *)\n\tfunc_warning \"\\`-dlopen' is ignored for non-libtool libraries and objects\"\n\tcontinue\n\t;;\n      esac\n\n      # Get the absolute pathname.\n      absdir=`cd \"$dir\" && pwd`\n      test -n \"$absdir\" && dir=\"$absdir\"\n\n      # Now add the directory to shlibpath_var.\n      if eval \"test -z \\\"\\$$shlibpath_var\\\"\"; then\n\teval \"$shlibpath_var=\\\"\\$dir\\\"\"\n      else\n\teval \"$shlibpath_var=\\\"\\$dir:\\$$shlibpath_var\\\"\"\n      fi\n    done\n\n    # This variable tells wrapper scripts just to set shlibpath_var\n    # rather than running their programs.\n    libtool_execute_magic=\"$magic\"\n\n    # Check if any of the arguments is a wrapper script.\n    args=\n    for file\n    do\n      case $file in\n      -*) ;;\n      *)\n\t# Do a test to see if this is really a libtool program.\n\tif func_ltwrapper_script_p \"$file\"; then\n\t  func_source \"$file\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\telif func_ltwrapper_executable_p \"$file\"; then\n\t  func_ltwrapper_scriptname \"$file\"\n\t  func_source \"$func_ltwrapper_scriptname_result\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\tfi\n\t;;\n      esac\n      # Quote arguments (to preserve shell metacharacters).\n      func_quote_for_eval \"$file\"\n      args=\"$args $func_quote_for_eval_result\"\n    done\n\n    if test \"X$opt_dry_run\" = Xfalse; then\n      if test -n \"$shlibpath_var\"; then\n\t# Export the shlibpath_var.\n\teval \"export $shlibpath_var\"\n      fi\n\n      # Restore saved environment variables\n      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\n      do\n\teval \"if test \\\"\\${save_$lt_var+set}\\\" = set; then\n                $lt_var=\\$save_$lt_var; export $lt_var\n\t      else\n\t\t$lt_unset $lt_var\n\t      fi\"\n      done\n\n      # Now prepare to actually exec the command.\n      exec_cmd=\"\\$cmd$args\"\n    else\n      # Display what would be done.\n      if test -n \"$shlibpath_var\"; then\n\teval \"\\$ECHO \\\"\\$shlibpath_var=\\$$shlibpath_var\\\"\"\n\t$ECHO \"export $shlibpath_var\"\n      fi\n      $ECHO \"$cmd$args\"\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$mode\" = execute && func_mode_execute ${1+\"$@\"}\n\n\n# func_mode_finish arg...\nfunc_mode_finish ()\n{\n    $opt_debug\n    libdirs=\"$nonopt\"\n    admincmds=\n\n    if test -n \"$finish_cmds$finish_eval\" && test -n \"$libdirs\"; then\n      for dir\n      do\n\tlibdirs=\"$libdirs $dir\"\n      done\n\n      for libdir in $libdirs; do\n\tif test -n \"$finish_cmds\"; then\n\t  # Do each command in the finish commands.\n\t  func_execute_cmds \"$finish_cmds\" 'admincmds=\"$admincmds\n'\"$cmd\"'\"'\n\tfi\n\tif test -n \"$finish_eval\"; then\n\t  # Do the single finish_eval.\n\t  eval cmds=\\\"$finish_eval\\\"\n\t  $opt_dry_run || eval \"$cmds\" || admincmds=\"$admincmds\n       $cmds\"\n\tfi\n      done\n    fi\n\n    # Exit here if they wanted silent mode.\n    $opt_silent && exit $EXIT_SUCCESS\n\n    $ECHO \"X----------------------------------------------------------------------\" | $Xsed\n    $ECHO \"Libraries have been installed in:\"\n    for libdir in $libdirs; do\n      $ECHO \"   $libdir\"\n    done\n    $ECHO\n    $ECHO \"If you ever happen to want to link against installed libraries\"\n    $ECHO \"in a given directory, LIBDIR, you must either use libtool, and\"\n    $ECHO \"specify the full pathname of the library, or use the \\`-LLIBDIR'\"\n    $ECHO \"flag during linking and do at least one of the following:\"\n    if test -n \"$shlibpath_var\"; then\n      $ECHO \"   - add LIBDIR to the \\`$shlibpath_var' environment variable\"\n      $ECHO \"     during execution\"\n    fi\n    if test -n \"$runpath_var\"; then\n      $ECHO \"   - add LIBDIR to the \\`$runpath_var' environment variable\"\n      $ECHO \"     during linking\"\n    fi\n    if test -n \"$hardcode_libdir_flag_spec\"; then\n      libdir=LIBDIR\n      eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\n      $ECHO \"   - use the \\`$flag' linker flag\"\n    fi\n    if test -n \"$admincmds\"; then\n      $ECHO \"   - have your system administrator run these commands:$admincmds\"\n    fi\n    if test -f /etc/ld.so.conf; then\n      $ECHO \"   - have your system administrator add LIBDIR to \\`/etc/ld.so.conf'\"\n    fi\n    $ECHO\n\n    $ECHO \"See any operating system documentation about shared libraries for\"\n    case $host in\n      solaris2.[6789]|solaris2.1[0-9])\n        $ECHO \"more information, such as the ld(1), crle(1) and ld.so(8) manual\"\n\t$ECHO \"pages.\"\n\t;;\n      *)\n        $ECHO \"more information, such as the ld(1) and ld.so(8) manual pages.\"\n        ;;\n    esac\n    $ECHO \"X----------------------------------------------------------------------\" | $Xsed\n    exit $EXIT_SUCCESS\n}\n\ntest \"$mode\" = finish && func_mode_finish ${1+\"$@\"}\n\n\n# func_mode_install arg...\nfunc_mode_install ()\n{\n    $opt_debug\n    # There may be an optional sh(1) argument at the beginning of\n    # install_prog (especially on Windows NT).\n    if test \"$nonopt\" = \"$SHELL\" || test \"$nonopt\" = /bin/sh ||\n       # Allow the use of GNU shtool's install command.\n       $ECHO \"X$nonopt\" | $GREP shtool >/dev/null; then\n      # Aesthetically quote it.\n      func_quote_for_eval \"$nonopt\"\n      install_prog=\"$func_quote_for_eval_result \"\n      arg=$1\n      shift\n    else\n      install_prog=\n      arg=$nonopt\n    fi\n\n    # The real first argument should be the name of the installation program.\n    # Aesthetically quote it.\n    func_quote_for_eval \"$arg\"\n    install_prog=\"$install_prog$func_quote_for_eval_result\"\n\n    # We need to accept at least all the BSD install flags.\n    dest=\n    files=\n    opts=\n    prev=\n    install_type=\n    isdir=no\n    stripme=\n    for arg\n    do\n      if test -n \"$dest\"; then\n\tfiles=\"$files $dest\"\n\tdest=$arg\n\tcontinue\n      fi\n\n      case $arg in\n      -d) isdir=yes ;;\n      -f)\n\tcase \" $install_prog \" in\n\t*[\\\\\\ /]cp\\ *) ;;\n\t*) prev=$arg ;;\n\tesac\n\t;;\n      -g | -m | -o)\n\tprev=$arg\n\t;;\n      -s)\n\tstripme=\" -s\"\n\tcontinue\n\t;;\n      -*)\n\t;;\n      *)\n\t# If the previous option needed an argument, then skip it.\n\tif test -n \"$prev\"; then\n\t  prev=\n\telse\n\t  dest=$arg\n\t  continue\n\tfi\n\t;;\n      esac\n\n      # Aesthetically quote the argument.\n      func_quote_for_eval \"$arg\"\n      install_prog=\"$install_prog $func_quote_for_eval_result\"\n    done\n\n    test -z \"$install_prog\" && \\\n      func_fatal_help \"you must specify an install program\"\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prev' option requires an argument\"\n\n    if test -z \"$files\"; then\n      if test -z \"$dest\"; then\n\tfunc_fatal_help \"no file or destination specified\"\n      else\n\tfunc_fatal_help \"you must specify a destination\"\n      fi\n    fi\n\n    # Strip any trailing slash from the destination.\n    func_stripname '' '/' \"$dest\"\n    dest=$func_stripname_result\n\n    # Check to see that the destination is a directory.\n    test -d \"$dest\" && isdir=yes\n    if test \"$isdir\" = yes; then\n      destdir=\"$dest\"\n      destname=\n    else\n      func_dirname_and_basename \"$dest\" \"\" \".\"\n      destdir=\"$func_dirname_result\"\n      destname=\"$func_basename_result\"\n\n      # Not a directory, so check to see that there is only one file specified.\n      set dummy $files; shift\n      test \"$#\" -gt 1 && \\\n\tfunc_fatal_help \"\\`$dest' is not a directory\"\n    fi\n    case $destdir in\n    [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n    *)\n      for file in $files; do\n\tcase $file in\n\t*.lo) ;;\n\t*)\n\t  func_fatal_help \"\\`$destdir' must be an absolute directory name\"\n\t  ;;\n\tesac\n      done\n      ;;\n    esac\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    staticlibs=\n    future_libdirs=\n    current_libdirs=\n    for file in $files; do\n\n      # Do each installation.\n      case $file in\n      *.$libext)\n\t# Do the static libraries later.\n\tstaticlibs=\"$staticlibs $file\"\n\t;;\n\n      *.la)\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$file' is not a valid libtool archive\"\n\n\tlibrary_names=\n\told_library=\n\trelink_command=\n\tfunc_source \"$file\"\n\n\t# Add the libdir to current_libdirs if it is the destination.\n\tif test \"X$destdir\" = \"X$libdir\"; then\n\t  case \"$current_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) current_libdirs=\"$current_libdirs $libdir\" ;;\n\t  esac\n\telse\n\t  # Note the libdir as a future libdir.\n\t  case \"$future_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) future_libdirs=\"$future_libdirs $libdir\" ;;\n\t  esac\n\tfi\n\n\tfunc_dirname \"$file\" \"/\" \"\"\n\tdir=\"$func_dirname_result\"\n\tdir=\"$dir$objdir\"\n\n\tif test -n \"$relink_command\"; then\n\t  # Determine the prefix the user has applied to our future dir.\n\t  inst_prefix_dir=`$ECHO \"X$destdir\" | $Xsed -e \"s%$libdir\\$%%\"`\n\n\t  # Don't allow the user to place us outside of our expected\n\t  # location b/c this prevents finding dependent libraries that\n\t  # are installed to the same prefix.\n\t  # At present, this check doesn't affect windows .dll's that\n\t  # are installed into $libdir/../bin (currently, that works fine)\n\t  # but it's something to keep an eye on.\n\t  test \"$inst_prefix_dir\" = \"$destdir\" && \\\n\t    func_fatal_error \"error: cannot install \\`$file' to a directory not ending in $libdir\"\n\n\t  if test -n \"$inst_prefix_dir\"; then\n\t    # Stick the inst_prefix_dir data into the link command.\n\t    relink_command=`$ECHO \"X$relink_command\" | $Xsed -e \"s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%\"`\n\t  else\n\t    relink_command=`$ECHO \"X$relink_command\" | $Xsed -e \"s%@inst_prefix_dir@%%\"`\n\t  fi\n\n\t  func_warning \"relinking \\`$file'\"\n\t  func_show_eval \"$relink_command\" \\\n\t    'func_fatal_error \"error: relink \\`$file'\\'' with the above command before installing it\"'\n\tfi\n\n\t# See the names of the shared library.\n\tset dummy $library_names; shift\n\tif test -n \"$1\"; then\n\t  realname=\"$1\"\n\t  shift\n\n\t  srcname=\"$realname\"\n\t  test -n \"$relink_command\" && srcname=\"$realname\"T\n\n\t  # Install the shared library and build the symlinks.\n\t  func_show_eval \"$install_prog $dir/$srcname $destdir/$realname\" \\\n\t      'exit $?'\n\t  tstripme=\"$stripme\"\n\t  case $host_os in\n\t  cygwin* | mingw* | pw32* | cegcc*)\n\t    case $realname in\n\t    *.dll.a)\n\t      tstripme=\"\"\n\t      ;;\n\t    esac\n\t    ;;\n\t  esac\n\t  if test -n \"$tstripme\" && test -n \"$striplib\"; then\n\t    func_show_eval \"$striplib $destdir/$realname\" 'exit $?'\n\t  fi\n\n\t  if test \"$#\" -gt 0; then\n\t    # Delete the old symlinks, and create new ones.\n\t    # Try `ln -sf' first, because the `ln' binary might depend on\n\t    # the symlink we replace!  Solaris /bin/ln does not understand -f,\n\t    # so we also need to try rm && ln -s.\n\t    for linkname\n\t    do\n\t      test \"$linkname\" != \"$realname\" \\\n\t\t&& func_show_eval \"(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })\"\n\t    done\n\t  fi\n\n\t  # Do each command in the postinstall commands.\n\t  lib=\"$destdir/$realname\"\n\t  func_execute_cmds \"$postinstall_cmds\" 'exit $?'\n\tfi\n\n\t# Install the pseudo-library for information purposes.\n\tfunc_basename \"$file\"\n\tname=\"$func_basename_result\"\n\tinstname=\"$dir/$name\"i\n\tfunc_show_eval \"$install_prog $instname $destdir/$name\" 'exit $?'\n\n\t# Maybe install the static library, too.\n\ttest -n \"$old_library\" && staticlibs=\"$staticlibs $dir/$old_library\"\n\t;;\n\n      *.lo)\n\t# Install (i.e. copy) a libtool object.\n\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# Deduce the name of the destination old-style object file.\n\tcase $destfile in\n\t*.lo)\n\t  func_lo2o \"$destfile\"\n\t  staticdest=$func_lo2o_result\n\t  ;;\n\t*.$objext)\n\t  staticdest=\"$destfile\"\n\t  destfile=\n\t  ;;\n\t*)\n\t  func_fatal_help \"cannot copy a libtool object to \\`$destfile'\"\n\t  ;;\n\tesac\n\n\t# Install the libtool object if requested.\n\ttest -n \"$destfile\" && \\\n\t  func_show_eval \"$install_prog $file $destfile\" 'exit $?'\n\n\t# Install the old object if enabled.\n\tif test \"$build_old_libs\" = yes; then\n\t  # Deduce the name of the old-style object file.\n\t  func_lo2o \"$file\"\n\t  staticobj=$func_lo2o_result\n\t  func_show_eval \"$install_prog \\$staticobj \\$staticdest\" 'exit $?'\n\tfi\n\texit $EXIT_SUCCESS\n\t;;\n\n      *)\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# If the file is missing, and there is a .exe on the end, strip it\n\t# because it is most likely a libtool script we actually want to\n\t# install\n\tstripped_ext=\"\"\n\tcase $file in\n\t  *.exe)\n\t    if test ! -f \"$file\"; then\n\t      func_stripname '' '.exe' \"$file\"\n\t      file=$func_stripname_result\n\t      stripped_ext=\".exe\"\n\t    fi\n\t    ;;\n\tesac\n\n\t# Do a test to see if this is really a libtool program.\n\tcase $host in\n\t*cygwin* | *mingw*)\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      wrapper=$func_ltwrapper_scriptname_result\n\t    else\n\t      func_stripname '' '.exe' \"$file\"\n\t      wrapper=$func_stripname_result\n\t    fi\n\t    ;;\n\t*)\n\t    wrapper=$file\n\t    ;;\n\tesac\n\tif func_ltwrapper_script_p \"$wrapper\"; then\n\t  notinst_deplibs=\n\t  relink_command=\n\n\t  func_source \"$wrapper\"\n\n\t  # Check the variables that should have been set.\n\t  test -z \"$generated_by_libtool_version\" && \\\n\t    func_fatal_error \"invalid libtool wrapper script \\`$wrapper'\"\n\n\t  finalize=yes\n\t  for lib in $notinst_deplibs; do\n\t    # Check to see that each library is installed.\n\t    libdir=\n\t    if test -f \"$lib\"; then\n\t      func_source \"$lib\"\n\t    fi\n\t    libfile=\"$libdir/\"`$ECHO \"X$lib\" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test\n\t    if test -n \"$libdir\" && test ! -f \"$libfile\"; then\n\t      func_warning \"\\`$lib' has not been installed in \\`$libdir'\"\n\t      finalize=no\n\t    fi\n\t  done\n\n\t  relink_command=\n\t  func_source \"$wrapper\"\n\n\t  outputname=\n\t  if test \"$fast_install\" = no && test -n \"$relink_command\"; then\n\t    $opt_dry_run || {\n\t      if test \"$finalize\" = yes; then\n\t        tmpdir=`func_mktempdir`\n\t\tfunc_basename \"$file$stripped_ext\"\n\t\tfile=\"$func_basename_result\"\n\t        outputname=\"$tmpdir/$file\"\n\t        # Replace the output file specification.\n\t        relink_command=`$ECHO \"X$relink_command\" | $Xsed -e 's%@OUTPUT@%'\"$outputname\"'%g'`\n\n\t        $opt_silent || {\n\t          func_quote_for_expand \"$relink_command\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t        }\n\t        if eval \"$relink_command\"; then :\n\t          else\n\t\t  func_error \"error: relink \\`$file' with the above command before installing it\"\n\t\t  $opt_dry_run || ${RM}r \"$tmpdir\"\n\t\t  continue\n\t        fi\n\t        file=\"$outputname\"\n\t      else\n\t        func_warning \"cannot relink \\`$file'\"\n\t      fi\n\t    }\n\t  else\n\t    # Install the binary that we compiled earlier.\n\t    file=`$ECHO \"X$file$stripped_ext\" | $Xsed -e \"s%\\([^/]*\\)$%$objdir/\\1%\"`\n\t  fi\n\tfi\n\n\t# remove .exe since cygwin /usr/bin/install will append another\n\t# one anyway\n\tcase $install_prog,$host in\n\t*/usr/bin/install*,*cygwin*)\n\t  case $file:$destfile in\n\t  *.exe:*.exe)\n\t    # this is ok\n\t    ;;\n\t  *.exe:*)\n\t    destfile=$destfile.exe\n\t    ;;\n\t  *:*.exe)\n\t    func_stripname '' '.exe' \"$destfile\"\n\t    destfile=$func_stripname_result\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tfunc_show_eval \"$install_prog\\$stripme \\$file \\$destfile\" 'exit $?'\n\t$opt_dry_run || if test -n \"$outputname\"; then\n\t  ${RM}r \"$tmpdir\"\n\tfi\n\t;;\n      esac\n    done\n\n    for file in $staticlibs; do\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n\n      # Set up the ranlib parameters.\n      oldlib=\"$destdir/$name\"\n\n      func_show_eval \"$install_prog \\$file \\$oldlib\" 'exit $?'\n\n      if test -n \"$stripme\" && test -n \"$old_striplib\"; then\n\tfunc_show_eval \"$old_striplib $oldlib\" 'exit $?'\n      fi\n\n      # Do each command in the postinstall commands.\n      func_execute_cmds \"$old_postinstall_cmds\" 'exit $?'\n    done\n\n    test -n \"$future_libdirs\" && \\\n      func_warning \"remember to run \\`$progname --finish$future_libdirs'\"\n\n    if test -n \"$current_libdirs\"; then\n      # Maybe just do a dry run.\n      $opt_dry_run && current_libdirs=\" -n$current_libdirs\"\n      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'\n    else\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$mode\" = install && func_mode_install ${1+\"$@\"}\n\n\n# func_generate_dlsyms outputname originator pic_p\n# Extract symbols from dlprefiles and create ${outputname}S.o with\n# a dlpreopen symbol table.\nfunc_generate_dlsyms ()\n{\n    $opt_debug\n    my_outputname=\"$1\"\n    my_originator=\"$2\"\n    my_pic_p=\"${3-no}\"\n    my_prefix=`$ECHO \"$my_originator\" | sed 's%[^a-zA-Z0-9]%_%g'`\n    my_dlsyms=\n\n    if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n      if test -n \"$NM\" && test -n \"$global_symbol_pipe\"; then\n\tmy_dlsyms=\"${my_outputname}S.c\"\n      else\n\tfunc_error \"not configured to extract global symbols from dlpreopened files\"\n      fi\n    fi\n\n    if test -n \"$my_dlsyms\"; then\n      case $my_dlsyms in\n      \"\") ;;\n      *.c)\n\t# Discover the nlist of each of the dlfiles.\n\tnlist=\"$output_objdir/${my_outputname}.nm\"\n\n\tfunc_show_eval \"$RM $nlist ${nlist}S ${nlist}T\"\n\n\t# Parse the name list into a source file.\n\tfunc_verbose \"creating $output_objdir/$my_dlsyms\"\n\n\t$opt_dry_run || $ECHO > \"$output_objdir/$my_dlsyms\" \"\\\n/* $my_dlsyms - symbol resolution table for \\`$my_outputname' dlsym emulation. */\n/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */\n\n#ifdef __cplusplus\nextern \\\"C\\\" {\n#endif\n\n/* External symbol declarations for the compiler. */\\\n\"\n\n\tif test \"$dlself\" = yes; then\n\t  func_verbose \"generating symbol list for \\`$output'\"\n\n\t  $opt_dry_run || echo ': @PROGRAM@ ' > \"$nlist\"\n\n\t  # Add our own program objects to the symbol list.\n\t  progfiles=`$ECHO \"X$objs$old_deplibs\" | $SP2NL | $Xsed -e \"$lo2o\" | $NL2SP`\n\t  for progfile in $progfiles; do\n\t    func_verbose \"extracting global C symbols from \\`$progfile'\"\n\t    $opt_dry_run || eval \"$NM $progfile | $global_symbol_pipe >> '$nlist'\"\n\t  done\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  if test -n \"$export_symbols_regex\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -e \"$export_symbols_regex\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  # Prepare the list of exported symbols\n\t  if test -z \"$export_symbols\"; then\n\t    export_symbols=\"$output_objdir/$outputname.exp\"\n\t    $opt_dry_run || {\n\t      $RM $export_symbols\n\t      eval \"${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \\(.*\\)$/\\1/p' \"'< \"$nlist\" > \"$export_symbols\"'\n\t      case $host in\n\t      *cygwin* | *mingw* | *cegcc* )\n                eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n                eval 'cat \"$export_symbols\" >> \"$output_objdir/$outputname.def\"'\n\t        ;;\n\t      esac\n\t    }\n\t  else\n\t    $opt_dry_run || {\n\t      eval \"${SED} -e 's/\\([].[*^$]\\)/\\\\\\\\\\1/g' -e 's/^/ /' -e 's/$/$/'\"' < \"$export_symbols\" > \"$output_objdir/$outputname.exp\"'\n\t      eval '$GREP -f \"$output_objdir/$outputname.exp\" < \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t      case $host in\n\t        *cygwin | *mingw* | *cegcc* )\n\t          eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n\t          eval 'cat \"$nlist\" >> \"$output_objdir/$outputname.def\"'\n\t          ;;\n\t      esac\n\t    }\n\t  fi\n\tfi\n\n\tfor dlprefile in $dlprefiles; do\n\t  func_verbose \"extracting global C symbols from \\`$dlprefile'\"\n\t  func_basename \"$dlprefile\"\n\t  name=\"$func_basename_result\"\n\t  $opt_dry_run || {\n\t    eval '$ECHO \": $name \" >> \"$nlist\"'\n\t    eval \"$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'\"\n\t  }\n\tdone\n\n\t$opt_dry_run || {\n\t  # Make sure we have at least an empty file.\n\t  test -f \"$nlist\" || : > \"$nlist\"\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T\n\t    $MV \"$nlist\"T \"$nlist\"\n\t  fi\n\n\t  # Try sorting and uniquifying the output.\n\t  if $GREP -v \"^: \" < \"$nlist\" |\n\t      if sort -k 3 </dev/null >/dev/null 2>&1; then\n\t\tsort -k 3\n\t      else\n\t\tsort +2\n\t      fi |\n\t      uniq > \"$nlist\"S; then\n\t    :\n\t  else\n\t    $GREP -v \"^: \" < \"$nlist\" > \"$nlist\"S\n\t  fi\n\n\t  if test -f \"$nlist\"S; then\n\t    eval \"$global_symbol_to_cdecl\"' < \"$nlist\"S >> \"$output_objdir/$my_dlsyms\"'\n\t  else\n\t    $ECHO '/* NONE */' >> \"$output_objdir/$my_dlsyms\"\n\t  fi\n\n\t  $ECHO >> \"$output_objdir/$my_dlsyms\" \"\\\n\n/* The mapping between symbol names and symbols.  */\ntypedef struct {\n  const char *name;\n  void *address;\n} lt_dlsymlist;\n\"\n\t  case $host in\n\t  *cygwin* | *mingw* | *cegcc* )\n\t    $ECHO >> \"$output_objdir/$my_dlsyms\" \"\\\n/* DATA imports from DLLs on WIN32 con't be const, because\n   runtime relocations are performed -- see ld's documentation\n   on pseudo-relocs.  */\"\n\t    lt_dlsym_const= ;;\n\t  *osf5*)\n\t    echo >> \"$output_objdir/$my_dlsyms\" \"\\\n/* This system does not cope well with relocations in const data */\"\n\t    lt_dlsym_const= ;;\n\t  *)\n\t    lt_dlsym_const=const ;;\n\t  esac\n\n\t  $ECHO >> \"$output_objdir/$my_dlsyms\" \"\\\nextern $lt_dlsym_const lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[];\n$lt_dlsym_const lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[] =\n{\\\n  { \\\"$my_originator\\\", (void *) 0 },\"\n\n\t  case $need_lib_prefix in\n\t  no)\n\t    eval \"$global_symbol_to_c_name_address\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  *)\n\t    eval \"$global_symbol_to_c_name_address_lib_prefix\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  esac\n\t  $ECHO >> \"$output_objdir/$my_dlsyms\" \"\\\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt_${my_prefix}_LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\\\n\"\n\t} # !$opt_dry_run\n\n\tpic_flag_for_symtable=\n\tcase \"$compile_command \" in\n\t*\" -static \"*) ;;\n\t*)\n\t  case $host in\n\t  # compiling the symbol table file with pic_flag works around\n\t  # a FreeBSD bug that causes programs to crash when -lm is\n\t  # linked before any other PIC object.  But we must not use\n\t  # pic_flag when linking with -static.  The problem exists in\n\t  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.\n\t  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)\n\t    pic_flag_for_symtable=\" $pic_flag -DFREEBSD_WORKAROUND\" ;;\n\t  *-*-hpux*)\n\t    pic_flag_for_symtable=\" $pic_flag\"  ;;\n\t  *)\n\t    if test \"X$my_pic_p\" != Xno; then\n\t      pic_flag_for_symtable=\" $pic_flag\"\n\t    fi\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tsymtab_cflags=\n\tfor arg in $LTCFLAGS; do\n\t  case $arg in\n\t  -pie | -fpie | -fPIE) ;;\n\t  *) symtab_cflags=\"$symtab_cflags $arg\" ;;\n\t  esac\n\tdone\n\n\t# Now compile the dynamic symbol file.\n\tfunc_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable \"$my_dlsyms\")' 'exit $?'\n\n\t# Clean up the generated files.\n\tfunc_show_eval '$RM \"$output_objdir/$my_dlsyms\" \"$nlist\" \"${nlist}S\" \"${nlist}T\"'\n\n\t# Transform the symbol file into the correct name.\n\tsymfileobj=\"$output_objdir/${my_outputname}S.$objext\"\n\tcase $host in\n\t*cygwin* | *mingw* | *cegcc* )\n\t  if test -f \"$output_objdir/$my_outputname.def\"; then\n\t    compile_command=`$ECHO \"X$compile_command\" | $Xsed -e \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t    finalize_command=`$ECHO \"X$finalize_command\" | $Xsed -e \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t  else\n\t    compile_command=`$ECHO \"X$compile_command\" | $Xsed -e \"s%@SYMFILE@%$symfileobj%\"`\n\t    finalize_command=`$ECHO \"X$finalize_command\" | $Xsed -e \"s%@SYMFILE@%$symfileobj%\"`\n\t  fi\n\t  ;;\n\t*)\n\t  compile_command=`$ECHO \"X$compile_command\" | $Xsed -e \"s%@SYMFILE@%$symfileobj%\"`\n\t  finalize_command=`$ECHO \"X$finalize_command\" | $Xsed -e \"s%@SYMFILE@%$symfileobj%\"`\n\t  ;;\n\tesac\n\t;;\n      *)\n\tfunc_fatal_error \"unknown suffix for \\`$my_dlsyms'\"\n\t;;\n      esac\n    else\n      # We keep going just in case the user didn't refer to\n      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe\n      # really was required.\n\n      # Nullify the symbol file.\n      compile_command=`$ECHO \"X$compile_command\" | $Xsed -e \"s% @SYMFILE@%%\"`\n      finalize_command=`$ECHO \"X$finalize_command\" | $Xsed -e \"s% @SYMFILE@%%\"`\n    fi\n}\n\n# func_win32_libid arg\n# return the library type of file 'arg'\n#\n# Need a lot of goo to handle *both* DLLs and import libs\n# Has to be a shell function in order to 'eat' the argument\n# that is supplied when $file_magic_command is called.\nfunc_win32_libid ()\n{\n  $opt_debug\n  win32_libid_type=\"unknown\"\n  win32_fileres=`file -L $1 2>/dev/null`\n  case $win32_fileres in\n  *ar\\ archive\\ import\\ library*) # definitely import\n    win32_libid_type=\"x86 archive import\"\n    ;;\n  *ar\\ archive*) # could be an import, or static\n    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |\n       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then\n      win32_nmres=`eval $NM -f posix -A $1 |\n\t$SED -n -e '\n\t    1,100{\n\t\t/ I /{\n\t\t    s,.*,import,\n\t\t    p\n\t\t    q\n\t\t}\n\t    }'`\n      case $win32_nmres in\n      import*)  win32_libid_type=\"x86 archive import\";;\n      *)        win32_libid_type=\"x86 archive static\";;\n      esac\n    fi\n    ;;\n  *DLL*)\n    win32_libid_type=\"x86 DLL\"\n    ;;\n  *executable*) # but shell scripts are \"executable\" too...\n    case $win32_fileres in\n    *MS\\ Windows\\ PE\\ Intel*)\n      win32_libid_type=\"x86 DLL\"\n      ;;\n    esac\n    ;;\n  esac\n  $ECHO \"$win32_libid_type\"\n}\n\n\n\n# func_extract_an_archive dir oldlib\nfunc_extract_an_archive ()\n{\n    $opt_debug\n    f_ex_an_ar_dir=\"$1\"; shift\n    f_ex_an_ar_oldlib=\"$1\"\n    func_show_eval \"(cd \\$f_ex_an_ar_dir && $AR x \\\"\\$f_ex_an_ar_oldlib\\\")\" 'exit $?'\n    if ($AR t \"$f_ex_an_ar_oldlib\" | sort | sort -uc >/dev/null 2>&1); then\n     :\n    else\n      func_fatal_error \"object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib\"\n    fi\n}\n\n\n# func_extract_archives gentop oldlib ...\nfunc_extract_archives ()\n{\n    $opt_debug\n    my_gentop=\"$1\"; shift\n    my_oldlibs=${1+\"$@\"}\n    my_oldobjs=\"\"\n    my_xlib=\"\"\n    my_xabs=\"\"\n    my_xdir=\"\"\n\n    for my_xlib in $my_oldlibs; do\n      # Extract the objects.\n      case $my_xlib in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) my_xabs=\"$my_xlib\" ;;\n\t*) my_xabs=`pwd`\"/$my_xlib\" ;;\n      esac\n      func_basename \"$my_xlib\"\n      my_xlib=\"$func_basename_result\"\n      my_xlib_u=$my_xlib\n      while :; do\n        case \" $extracted_archives \" in\n\t*\" $my_xlib_u \"*)\n\t  func_arith $extracted_serial + 1\n\t  extracted_serial=$func_arith_result\n\t  my_xlib_u=lt$extracted_serial-$my_xlib ;;\n\t*) break ;;\n\tesac\n      done\n      extracted_archives=\"$extracted_archives $my_xlib_u\"\n      my_xdir=\"$my_gentop/$my_xlib_u\"\n\n      func_mkdir_p \"$my_xdir\"\n\n      case $host in\n      *-darwin*)\n\tfunc_verbose \"Extracting $my_xabs\"\n\t# Do not bother doing anything if just a dry run\n\t$opt_dry_run || {\n\t  darwin_orig_dir=`pwd`\n\t  cd $my_xdir || exit $?\n\t  darwin_archive=$my_xabs\n\t  darwin_curdir=`pwd`\n\t  darwin_base_archive=`basename \"$darwin_archive\"`\n\t  darwin_arches=`$LIPO -info \"$darwin_archive\" 2>/dev/null | $GREP Architectures 2>/dev/null || true`\n\t  if test -n \"$darwin_arches\"; then\n\t    darwin_arches=`$ECHO \"$darwin_arches\" | $SED -e 's/.*are://'`\n\t    darwin_arch=\n\t    func_verbose \"$darwin_base_archive has multiple architectures $darwin_arches\"\n\t    for darwin_arch in  $darwin_arches ; do\n\t      func_mkdir_p \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      $LIPO -thin $darwin_arch -output \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\" \"${darwin_archive}\"\n\t      cd \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      func_extract_an_archive \"`pwd`\" \"${darwin_base_archive}\"\n\t      cd \"$darwin_curdir\"\n\t      $RM \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\"\n\t    done # $darwin_arches\n            ## Okay now we've a bunch of thin objects, gotta fatten them up :)\n\t    darwin_filelist=`find unfat-$$ -type f -name \\*.o -print -o -name \\*.lo -print | $SED -e \"$basename\" | sort -u`\n\t    darwin_file=\n\t    darwin_files=\n\t    for darwin_file in $darwin_filelist; do\n\t      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`\n\t      $LIPO -create -output \"$darwin_file\" $darwin_files\n\t    done # $darwin_filelist\n\t    $RM -rf unfat-$$\n\t    cd \"$darwin_orig_dir\"\n\t  else\n\t    cd $darwin_orig_dir\n\t    func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t  fi # $darwin_arches\n\t} # !$opt_dry_run\n\t;;\n      *)\n        func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t;;\n      esac\n      my_oldobjs=\"$my_oldobjs \"`find $my_xdir -name \\*.$objext -print -o -name \\*.lo -print | $NL2SP`\n    done\n\n    func_extract_archives_result=\"$my_oldobjs\"\n}\n\n\n\n# func_emit_wrapper_part1 [arg=no]\n#\n# Emit the first part of a libtool wrapper script on stdout.\n# For more information, see the description associated with\n# func_emit_wrapper(), below.\nfunc_emit_wrapper_part1 ()\n{\n\tfunc_emit_wrapper_part1_arg1=no\n\tif test -n \"$1\" ; then\n\t  func_emit_wrapper_part1_arg1=$1\n\tfi\n\n\t$ECHO \"\\\n#! $SHELL\n\n# $output - temporary wrapper script for $objdir/$outputname\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# The $output program cannot be directly executed until all the libtool\n# libraries that it depends on are installed.\n#\n# This wrapper script should never be moved out of the build directory.\n# If it is, it will not operate correctly.\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed='${SED} -e 1s/^X//'\nsed_quote_subst='$sed_quote_subst'\n\n# Be Bourne compatible\nif test -n \\\"\\${ZSH_VERSION+set}\\\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nrelink_command=\\\"$relink_command\\\"\n\n# This environment variable determines our operation mode.\nif test \\\"\\$libtool_install_magic\\\" = \\\"$magic\\\"; then\n  # install mode needs the following variables:\n  generated_by_libtool_version='$macro_version'\n  notinst_deplibs='$notinst_deplibs'\nelse\n  # When we are sourced in execute mode, \\$file and \\$ECHO are already set.\n  if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n    ECHO=\\\"$qecho\\\"\n    file=\\\"\\$0\\\"\n    # Make sure echo works.\n    if test \\\"X\\$1\\\" = X--no-reexec; then\n      # Discard the --no-reexec flag, and continue.\n      shift\n    elif test \\\"X\\`{ \\$ECHO '\\t'; } 2>/dev/null\\`\\\" = 'X\\t'; then\n      # Yippee, \\$ECHO works!\n      :\n    else\n      # Restart under the correct shell, and then maybe \\$ECHO will work.\n      exec $SHELL \\\"\\$0\\\" --no-reexec \\${1+\\\"\\$@\\\"}\n    fi\n  fi\\\n\"\n\t$ECHO \"\\\n\n  # Find the directory that this script lives in.\n  thisdir=\\`\\$ECHO \\\"X\\$file\\\" | \\$Xsed -e 's%/[^/]*$%%'\\`\n  test \\\"x\\$thisdir\\\" = \\\"x\\$file\\\" && thisdir=.\n\n  # Follow symbolic links until we get to the real thisdir.\n  file=\\`ls -ld \\\"\\$file\\\" | ${SED} -n 's/.*-> //p'\\`\n  while test -n \\\"\\$file\\\"; do\n    destdir=\\`\\$ECHO \\\"X\\$file\\\" | \\$Xsed -e 's%/[^/]*\\$%%'\\`\n\n    # If there was a directory component, then change thisdir.\n    if test \\\"x\\$destdir\\\" != \\\"x\\$file\\\"; then\n      case \\\"\\$destdir\\\" in\n      [\\\\\\\\/]* | [A-Za-z]:[\\\\\\\\/]*) thisdir=\\\"\\$destdir\\\" ;;\n      *) thisdir=\\\"\\$thisdir/\\$destdir\\\" ;;\n      esac\n    fi\n\n    file=\\`\\$ECHO \\\"X\\$file\\\" | \\$Xsed -e 's%^.*/%%'\\`\n    file=\\`ls -ld \\\"\\$thisdir/\\$file\\\" | ${SED} -n 's/.*-> //p'\\`\n  done\n\"\n}\n# end: func_emit_wrapper_part1\n\n# func_emit_wrapper_part2 [arg=no]\n#\n# Emit the second part of a libtool wrapper script on stdout.\n# For more information, see the description associated with\n# func_emit_wrapper(), below.\nfunc_emit_wrapper_part2 ()\n{\n\tfunc_emit_wrapper_part2_arg1=no\n\tif test -n \"$1\" ; then\n\t  func_emit_wrapper_part2_arg1=$1\n\tfi\n\n\t$ECHO \"\\\n\n  # Usually 'no', except on cygwin/mingw when embedded into\n  # the cwrapper.\n  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1\n  if test \\\"\\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\\\" = \\\"yes\\\"; then\n    # special case for '.'\n    if test \\\"\\$thisdir\\\" = \\\".\\\"; then\n      thisdir=\\`pwd\\`\n    fi\n    # remove .libs from thisdir\n    case \\\"\\$thisdir\\\" in\n    *[\\\\\\\\/]$objdir ) thisdir=\\`\\$ECHO \\\"X\\$thisdir\\\" | \\$Xsed -e 's%[\\\\\\\\/][^\\\\\\\\/]*$%%'\\` ;;\n    $objdir )   thisdir=. ;;\n    esac\n  fi\n\n  # Try to get the absolute directory name.\n  absdir=\\`cd \\\"\\$thisdir\\\" && pwd\\`\n  test -n \\\"\\$absdir\\\" && thisdir=\\\"\\$absdir\\\"\n\"\n\n\tif test \"$fast_install\" = yes; then\n\t  $ECHO \"\\\n  program=lt-'$outputname'$exeext\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\n  if test ! -f \\\"\\$progdir/\\$program\\\" ||\n     { file=\\`ls -1dt \\\"\\$progdir/\\$program\\\" \\\"\\$progdir/../\\$program\\\" 2>/dev/null | ${SED} 1q\\`; \\\\\n       test \\\"X\\$file\\\" != \\\"X\\$progdir/\\$program\\\"; }; then\n\n    file=\\\"\\$\\$-\\$program\\\"\n\n    if test ! -d \\\"\\$progdir\\\"; then\n      $MKDIR \\\"\\$progdir\\\"\n    else\n      $RM \\\"\\$progdir/\\$file\\\"\n    fi\"\n\n\t  $ECHO \"\\\n\n    # relink executable if necessary\n    if test -n \\\"\\$relink_command\\\"; then\n      if relink_command_output=\\`eval \\$relink_command 2>&1\\`; then :\n      else\n\t$ECHO \\\"\\$relink_command_output\\\" >&2\n\t$RM \\\"\\$progdir/\\$file\\\"\n\texit 1\n      fi\n    fi\n\n    $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\" 2>/dev/null ||\n    { $RM \\\"\\$progdir/\\$program\\\";\n      $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\"; }\n    $RM \\\"\\$progdir/\\$file\\\"\n  fi\"\n\telse\n\t  $ECHO \"\\\n  program='$outputname'\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\"\n\tfi\n\n\t$ECHO \"\\\n\n  if test -f \\\"\\$progdir/\\$program\\\"; then\"\n\n\t# Export our shlibpath_var if we have one.\n\tif test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n\t  $ECHO \"\\\n    # Add our own library path to $shlibpath_var\n    $shlibpath_var=\\\"$temp_rpath\\$$shlibpath_var\\\"\n\n    # Some systems cannot cope with colon-terminated $shlibpath_var\n    # The second colon is a workaround for a bug in BeOS R4 sed\n    $shlibpath_var=\\`\\$ECHO \\\"X\\$$shlibpath_var\\\" | \\$Xsed -e 's/::*\\$//'\\`\n\n    export $shlibpath_var\n\"\n\tfi\n\n\t# fixup the dll searchpath if we need to.\n\tif test -n \"$dllsearchpath\"; then\n\t  $ECHO \"\\\n    # Add the dll search path components to the executable PATH\n    PATH=$dllsearchpath:\\$PATH\n\"\n\tfi\n\n\t$ECHO \"\\\n    if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n      # Run the actual program with our arguments.\n\"\n\tcase $host in\n\t# Backslashes separate directories on plain windows\n\t*-*-mingw | *-*-os2* | *-cegcc*)\n\t  $ECHO \"\\\n      exec \\\"\\$progdir\\\\\\\\\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n\t  ;;\n\n\t*)\n\t  $ECHO \"\\\n      exec \\\"\\$progdir/\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n\t  ;;\n\tesac\n\t$ECHO \"\\\n      \\$ECHO \\\"\\$0: cannot exec \\$program \\$*\\\" 1>&2\n      exit 1\n    fi\n  else\n    # The program doesn't exist.\n    \\$ECHO \\\"\\$0: error: \\\\\\`\\$progdir/\\$program' does not exist\\\" 1>&2\n    \\$ECHO \\\"This script is just a wrapper for \\$program.\\\" 1>&2\n    $ECHO \\\"See the $PACKAGE documentation for more information.\\\" 1>&2\n    exit 1\n  fi\nfi\\\n\"\n}\n# end: func_emit_wrapper_part2\n\n\n# func_emit_wrapper [arg=no]\n#\n# Emit a libtool wrapper script on stdout.\n# Don't directly open a file because we may want to\n# incorporate the script contents within a cygwin/mingw\n# wrapper executable.  Must ONLY be called from within\n# func_mode_link because it depends on a number of variables\n# set therein.\n#\n# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\n# variable will take.  If 'yes', then the emitted script\n# will assume that the directory in which it is stored is\n# the $objdir directory.  This is a cygwin/mingw-specific\n# behavior.\nfunc_emit_wrapper ()\n{\n\tfunc_emit_wrapper_arg1=no\n\tif test -n \"$1\" ; then\n\t  func_emit_wrapper_arg1=$1\n\tfi\n\n\t# split this up so that func_emit_cwrapperexe_src\n\t# can call each part independently.\n\tfunc_emit_wrapper_part1 \"${func_emit_wrapper_arg1}\"\n\tfunc_emit_wrapper_part2 \"${func_emit_wrapper_arg1}\"\n}\n\n\n# func_to_host_path arg\n#\n# Convert paths to host format when used with build tools.\n# Intended for use with \"native\" mingw (where libtool itself\n# is running under the msys shell), or in the following cross-\n# build environments:\n#    $build          $host\n#    mingw (msys)    mingw  [e.g. native]\n#    cygwin          mingw\n#    *nix + wine     mingw\n# where wine is equipped with the `winepath' executable.\n# In the native mingw case, the (msys) shell automatically\n# converts paths for any non-msys applications it launches,\n# but that facility isn't available from inside the cwrapper.\n# Similar accommodations are necessary for $host mingw and\n# $build cygwin.  Calling this function does no harm for other\n# $host/$build combinations not listed above.\n#\n# ARG is the path (on $build) that should be converted to\n# the proper representation for $host. The result is stored\n# in $func_to_host_path_result.\nfunc_to_host_path ()\n{\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\" ; then\n    case $host in\n      *mingw* )\n        lt_sed_naive_backslashify='s|\\\\\\\\*|\\\\|g;s|/|\\\\|g;s|\\\\|\\\\\\\\|g'\n        case $build in\n          *mingw* ) # actually, msys\n            # awkward: cmd appends spaces to result\n            lt_sed_strip_trailing_spaces=\"s/[ ]*\\$//\"\n            func_to_host_path_tmp1=`( cmd //c echo \"$1\" |\\\n              $SED -e \"$lt_sed_strip_trailing_spaces\" ) 2>/dev/null || echo \"\"`\n            func_to_host_path_result=`echo \"$func_to_host_path_tmp1\" |\\\n              $SED -e \"$lt_sed_naive_backslashify\"`\n            ;;\n          *cygwin* )\n            func_to_host_path_tmp1=`cygpath -w \"$1\"`\n            func_to_host_path_result=`echo \"$func_to_host_path_tmp1\" |\\\n              $SED -e \"$lt_sed_naive_backslashify\"`\n            ;;\n          * )\n            # Unfortunately, winepath does not exit with a non-zero\n            # error code, so we are forced to check the contents of\n            # stdout. On the other hand, if the command is not\n            # found, the shell will set an exit code of 127 and print\n            # *an error message* to stdout. So we must check for both\n            # error code of zero AND non-empty stdout, which explains\n            # the odd construction:\n            func_to_host_path_tmp1=`winepath -w \"$1\" 2>/dev/null`\n            if test \"$?\" -eq 0 && test -n \"${func_to_host_path_tmp1}\"; then\n              func_to_host_path_result=`echo \"$func_to_host_path_tmp1\" |\\\n                $SED -e \"$lt_sed_naive_backslashify\"`\n            else\n              # Allow warning below.\n              func_to_host_path_result=\"\"\n            fi\n            ;;\n        esac\n        if test -z \"$func_to_host_path_result\" ; then\n          func_error \"Could not determine host path corresponding to\"\n          func_error \"  '$1'\"\n          func_error \"Continuing, but uninstalled executables may not work.\"\n          # Fallback:\n          func_to_host_path_result=\"$1\"\n        fi\n        ;;\n    esac\n  fi\n}\n# end: func_to_host_path\n\n# func_to_host_pathlist arg\n#\n# Convert pathlists to host format when used with build tools.\n# See func_to_host_path(), above. This function supports the\n# following $build/$host combinations (but does no harm for\n# combinations not listed here):\n#    $build          $host\n#    mingw (msys)    mingw  [e.g. native]\n#    cygwin          mingw\n#    *nix + wine     mingw\n#\n# Path separators are also converted from $build format to\n# $host format. If ARG begins or ends with a path separator\n# character, it is preserved (but converted to $host format)\n# on output.\n#\n# ARG is a pathlist (on $build) that should be converted to\n# the proper representation on $host. The result is stored\n# in $func_to_host_pathlist_result.\nfunc_to_host_pathlist ()\n{\n  func_to_host_pathlist_result=\"$1\"\n  if test -n \"$1\" ; then\n    case $host in\n      *mingw* )\n        lt_sed_naive_backslashify='s|\\\\\\\\*|\\\\|g;s|/|\\\\|g;s|\\\\|\\\\\\\\|g'\n        # Remove leading and trailing path separator characters from\n        # ARG. msys behavior is inconsistent here, cygpath turns them\n        # into '.;' and ';.', and winepath ignores them completely.\n        func_to_host_pathlist_tmp2=\"$1\"\n        # Once set for this call, this variable should not be\n        # reassigned. It is used in tha fallback case.\n        func_to_host_pathlist_tmp1=`echo \"$func_to_host_pathlist_tmp2\" |\\\n          $SED -e 's|^:*||' -e 's|:*$||'`\n        case $build in\n          *mingw* ) # Actually, msys.\n            # Awkward: cmd appends spaces to result.\n            lt_sed_strip_trailing_spaces=\"s/[ ]*\\$//\"\n            func_to_host_pathlist_tmp2=`( cmd //c echo \"$func_to_host_pathlist_tmp1\" |\\\n              $SED -e \"$lt_sed_strip_trailing_spaces\" ) 2>/dev/null || echo \"\"`\n            func_to_host_pathlist_result=`echo \"$func_to_host_pathlist_tmp2\" |\\\n              $SED -e \"$lt_sed_naive_backslashify\"`\n            ;;\n          *cygwin* )\n            func_to_host_pathlist_tmp2=`cygpath -w -p \"$func_to_host_pathlist_tmp1\"`\n            func_to_host_pathlist_result=`echo \"$func_to_host_pathlist_tmp2\" |\\\n              $SED -e \"$lt_sed_naive_backslashify\"`\n            ;;\n          * )\n            # unfortunately, winepath doesn't convert pathlists\n            func_to_host_pathlist_result=\"\"\n            func_to_host_pathlist_oldIFS=$IFS\n            IFS=:\n            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do\n              IFS=$func_to_host_pathlist_oldIFS\n              if test -n \"$func_to_host_pathlist_f\" ; then\n                func_to_host_path \"$func_to_host_pathlist_f\"\n                if test -n \"$func_to_host_path_result\" ; then\n                  if test -z \"$func_to_host_pathlist_result\" ; then\n                    func_to_host_pathlist_result=\"$func_to_host_path_result\"\n                  else\n                    func_to_host_pathlist_result=\"$func_to_host_pathlist_result;$func_to_host_path_result\"\n                  fi\n                fi\n              fi\n              IFS=:\n            done\n            IFS=$func_to_host_pathlist_oldIFS\n            ;;\n        esac\n        if test -z \"$func_to_host_pathlist_result\" ; then\n          func_error \"Could not determine the host path(s) corresponding to\"\n          func_error \"  '$1'\"\n          func_error \"Continuing, but uninstalled executables may not work.\"\n          # Fallback. This may break if $1 contains DOS-style drive\n          # specifications. The fix is not to complicate the expression\n          # below, but for the user to provide a working wine installation\n          # with winepath so that path translation in the cross-to-mingw\n          # case works properly.\n          lt_replace_pathsep_nix_to_dos=\"s|:|;|g\"\n          func_to_host_pathlist_result=`echo \"$func_to_host_pathlist_tmp1\" |\\\n            $SED -e \"$lt_replace_pathsep_nix_to_dos\"`\n        fi\n        # Now, add the leading and trailing path separators back\n        case \"$1\" in\n          :* ) func_to_host_pathlist_result=\";$func_to_host_pathlist_result\"\n            ;;\n        esac\n        case \"$1\" in\n          *: ) func_to_host_pathlist_result=\"$func_to_host_pathlist_result;\"\n            ;;\n        esac\n        ;;\n    esac\n  fi\n}\n# end: func_to_host_pathlist\n\n# func_emit_cwrapperexe_src\n# emit the source code for a wrapper executable on stdout\n# Must ONLY be called from within func_mode_link because\n# it depends on a number of variable set therein.\nfunc_emit_cwrapperexe_src ()\n{\n\tcat <<EOF\n\n/* $cwrappersource - temporary wrapper executable for $objdir/$outputname\n   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n\n   The $output program cannot be directly executed until all the libtool\n   libraries that it depends on are installed.\n\n   This wrapper executable should never be moved out of the build directory.\n   If it is, it will not operate correctly.\n\n   Currently, it simply execs the wrapper *script* \"$SHELL $output\",\n   but could eventually absorb all of the scripts functionality and\n   exec $objdir/$outputname directly.\n*/\nEOF\n\t    cat <<\"EOF\"\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef _MSC_VER\n# include <direct.h>\n# include <process.h>\n# include <io.h>\n# define setmode _setmode\n#else\n# include <unistd.h>\n# include <stdint.h>\n# ifdef __CYGWIN__\n#  include <io.h>\n#  define HAVE_SETENV\n#  ifdef __STRICT_ANSI__\nchar *realpath (const char *, char *);\nint putenv (char *);\nint setenv (const char *, const char *, int);\n#  endif\n# endif\n#endif\n#include <malloc.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <sys/stat.h>\n\n#if defined(PATH_MAX)\n# define LT_PATHMAX PATH_MAX\n#elif defined(MAXPATHLEN)\n# define LT_PATHMAX MAXPATHLEN\n#else\n# define LT_PATHMAX 1024\n#endif\n\n#ifndef S_IXOTH\n# define S_IXOTH 0\n#endif\n#ifndef S_IXGRP\n# define S_IXGRP 0\n#endif\n\n#ifdef _MSC_VER\n# define S_IXUSR _S_IEXEC\n# define stat _stat\n# ifndef _INTPTR_T_DEFINED\n#  define intptr_t int\n# endif\n#endif\n\n#ifndef DIR_SEPARATOR\n# define DIR_SEPARATOR '/'\n# define PATH_SEPARATOR ':'\n#endif\n\n#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \\\n  defined (__OS2__)\n# define HAVE_DOS_BASED_FILE_SYSTEM\n# define FOPEN_WB \"wb\"\n# ifndef DIR_SEPARATOR_2\n#  define DIR_SEPARATOR_2 '\\\\'\n# endif\n# ifndef PATH_SEPARATOR_2\n#  define PATH_SEPARATOR_2 ';'\n# endif\n#endif\n\n#ifndef DIR_SEPARATOR_2\n# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)\n#else /* DIR_SEPARATOR_2 */\n# define IS_DIR_SEPARATOR(ch) \\\n\t(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))\n#endif /* DIR_SEPARATOR_2 */\n\n#ifndef PATH_SEPARATOR_2\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)\n#else /* PATH_SEPARATOR_2 */\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)\n#endif /* PATH_SEPARATOR_2 */\n\n#ifdef __CYGWIN__\n# define FOPEN_WB \"wb\"\n#endif\n\n#ifndef FOPEN_WB\n# define FOPEN_WB \"w\"\n#endif\n#ifndef _O_BINARY\n# define _O_BINARY 0\n#endif\n\n#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))\n#define XFREE(stale) do { \\\n  if (stale) { free ((void *) stale); stale = 0; } \\\n} while (0)\n\n#undef LTWRAPPER_DEBUGPRINTF\n#if defined DEBUGWRAPPER\n# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args\nstatic void\nltwrapper_debugprintf (const char *fmt, ...)\n{\n    va_list args;\n    va_start (args, fmt);\n    (void) vfprintf (stderr, fmt, args);\n    va_end (args);\n}\n#else\n# define LTWRAPPER_DEBUGPRINTF(args)\n#endif\n\nconst char *program_name = NULL;\n\nvoid *xmalloc (size_t num);\nchar *xstrdup (const char *string);\nconst char *base_name (const char *name);\nchar *find_executable (const char *wrapper);\nchar *chase_symlinks (const char *pathspec);\nint make_executable (const char *path);\nint check_executable (const char *path);\nchar *strendzap (char *str, const char *pat);\nvoid lt_fatal (const char *message, ...);\nvoid lt_setenv (const char *name, const char *value);\nchar *lt_extend_str (const char *orig_value, const char *add, int to_end);\nvoid lt_opt_process_env_set (const char *arg);\nvoid lt_opt_process_env_prepend (const char *arg);\nvoid lt_opt_process_env_append (const char *arg);\nint lt_split_name_value (const char *arg, char** name, char** value);\nvoid lt_update_exe_path (const char *name, const char *value);\nvoid lt_update_lib_path (const char *name, const char *value);\n\nstatic const char *script_text_part1 =\nEOF\n\n\t    func_emit_wrapper_part1 yes |\n\t        $SED -e 's/\\([\\\\\"]\\)/\\\\\\1/g' \\\n\t             -e 's/^/  \"/' -e 's/$/\\\\n\"/'\n\t    echo \";\"\n\t    cat <<EOF\n\nstatic const char *script_text_part2 =\nEOF\n\t    func_emit_wrapper_part2 yes |\n\t        $SED -e 's/\\([\\\\\"]\\)/\\\\\\1/g' \\\n\t             -e 's/^/  \"/' -e 's/$/\\\\n\"/'\n\t    echo \";\"\n\n\t    cat <<EOF\nconst char * MAGIC_EXE = \"$magic_exe\";\nconst char * LIB_PATH_VARNAME = \"$shlibpath_var\";\nEOF\n\n\t    if test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n              func_to_host_pathlist \"$temp_rpath\"\n\t      cat <<EOF\nconst char * LIB_PATH_VALUE   = \"$func_to_host_pathlist_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * LIB_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test -n \"$dllsearchpath\"; then\n              func_to_host_pathlist \"$dllsearchpath:\"\n\t      cat <<EOF\nconst char * EXE_PATH_VARNAME = \"PATH\";\nconst char * EXE_PATH_VALUE   = \"$func_to_host_pathlist_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * EXE_PATH_VARNAME = \"\";\nconst char * EXE_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test \"$fast_install\" = yes; then\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"lt-$outputname\"; /* hopefully, no .exe */\nEOF\n\t    else\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"$outputname\"; /* hopefully, no .exe */\nEOF\n\t    fi\n\n\n\t    cat <<\"EOF\"\n\n#define LTWRAPPER_OPTION_PREFIX         \"--lt-\"\n#define LTWRAPPER_OPTION_PREFIX_LENGTH  5\n\nstatic const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;\nstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;\n\nstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX \"dump-script\";\n\nstatic const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;\nstatic const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX \"env-set\";\n  /* argument is putenv-style \"foo=bar\", value of foo is set to bar */\n\nstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;\nstatic const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX \"env-prepend\";\n  /* argument is putenv-style \"foo=bar\", new value of foo is bar${foo} */\n\nstatic const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;\nstatic const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX \"env-append\";\n  /* argument is putenv-style \"foo=bar\", new value of foo is ${foo}bar */\n\nint\nmain (int argc, char *argv[])\n{\n  char **newargz;\n  int  newargc;\n  char *tmp_pathspec;\n  char *actual_cwrapper_path;\n  char *actual_cwrapper_name;\n  char *target_name;\n  char *lt_argv_zero;\n  intptr_t rval = 127;\n\n  int i;\n\n  program_name = (char *) xstrdup (base_name (argv[0]));\n  LTWRAPPER_DEBUGPRINTF ((\"(main) argv[0]      : %s\\n\", argv[0]));\n  LTWRAPPER_DEBUGPRINTF ((\"(main) program_name : %s\\n\", program_name));\n\n  /* very simple arg parsing; don't want to rely on getopt */\n  for (i = 1; i < argc; i++)\n    {\n      if (strcmp (argv[i], dumpscript_opt) == 0)\n\t{\nEOF\n\t    case \"$host\" in\n\t      *mingw* | *cygwin* )\n\t\t# make stdout use \"unix\" line endings\n\t\techo \"          setmode(1,_O_BINARY);\"\n\t\t;;\n\t      esac\n\n\t    cat <<\"EOF\"\n\t  printf (\"%s\", script_text_part1);\n\t  printf (\"%s\", script_text_part2);\n\t  return 0;\n\t}\n    }\n\n  newargz = XMALLOC (char *, argc + 1);\n  tmp_pathspec = find_executable (argv[0]);\n  if (tmp_pathspec == NULL)\n    lt_fatal (\"Couldn't find %s\", argv[0]);\n  LTWRAPPER_DEBUGPRINTF ((\"(main) found exe (before symlink chase) at : %s\\n\",\n\t\t\t  tmp_pathspec));\n\n  actual_cwrapper_path = chase_symlinks (tmp_pathspec);\n  LTWRAPPER_DEBUGPRINTF ((\"(main) found exe (after symlink chase) at : %s\\n\",\n\t\t\t  actual_cwrapper_path));\n  XFREE (tmp_pathspec);\n\n  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));\n  strendzap (actual_cwrapper_path, actual_cwrapper_name);\n\n  /* wrapper name transforms */\n  strendzap (actual_cwrapper_name, \".exe\");\n  tmp_pathspec = lt_extend_str (actual_cwrapper_name, \".exe\", 1);\n  XFREE (actual_cwrapper_name);\n  actual_cwrapper_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  /* target_name transforms -- use actual target program name; might have lt- prefix */\n  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));\n  strendzap (target_name, \".exe\");\n  tmp_pathspec = lt_extend_str (target_name, \".exe\", 1);\n  XFREE (target_name);\n  target_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  LTWRAPPER_DEBUGPRINTF ((\"(main) libtool target name: %s\\n\",\n\t\t\t  target_name));\nEOF\n\n\t    cat <<EOF\n  newargz[0] =\n    XMALLOC (char, (strlen (actual_cwrapper_path) +\n\t\t    strlen (\"$objdir\") + 1 + strlen (actual_cwrapper_name) + 1));\n  strcpy (newargz[0], actual_cwrapper_path);\n  strcat (newargz[0], \"$objdir\");\n  strcat (newargz[0], \"/\");\nEOF\n\n\t    cat <<\"EOF\"\n  /* stop here, and copy so we don't have to do this twice */\n  tmp_pathspec = xstrdup (newargz[0]);\n\n  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */\n  strcat (newargz[0], actual_cwrapper_name);\n\n  /* DO want the lt- prefix here if it exists, so use target_name */\n  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);\n  XFREE (tmp_pathspec);\n  tmp_pathspec = NULL;\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t    cat <<\"EOF\"\n  {\n    char* p;\n    while ((p = strchr (newargz[0], '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n    while ((p = strchr (lt_argv_zero, '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n  }\nEOF\n\t    ;;\n\t    esac\n\n\t    cat <<\"EOF\"\n  XFREE (target_name);\n  XFREE (actual_cwrapper_path);\n  XFREE (actual_cwrapper_name);\n\n  lt_setenv (\"BIN_SH\", \"xpg4\"); /* for Tru64 */\n  lt_setenv (\"DUALCASE\", \"1\");  /* for MSK sh */\n  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);\n  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);\n\n  newargc=0;\n  for (i = 1; i < argc; i++)\n    {\n      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)\n        {\n          if (argv[i][env_set_opt_len] == '=')\n            {\n              const char *p = argv[i] + env_set_opt_len + 1;\n              lt_opt_process_env_set (p);\n            }\n          else if (argv[i][env_set_opt_len] == '\\0' && i + 1 < argc)\n            {\n              lt_opt_process_env_set (argv[++i]); /* don't copy */\n            }\n          else\n            lt_fatal (\"%s missing required argument\", env_set_opt);\n          continue;\n        }\n      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)\n        {\n          if (argv[i][env_prepend_opt_len] == '=')\n            {\n              const char *p = argv[i] + env_prepend_opt_len + 1;\n              lt_opt_process_env_prepend (p);\n            }\n          else if (argv[i][env_prepend_opt_len] == '\\0' && i + 1 < argc)\n            {\n              lt_opt_process_env_prepend (argv[++i]); /* don't copy */\n            }\n          else\n            lt_fatal (\"%s missing required argument\", env_prepend_opt);\n          continue;\n        }\n      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)\n        {\n          if (argv[i][env_append_opt_len] == '=')\n            {\n              const char *p = argv[i] + env_append_opt_len + 1;\n              lt_opt_process_env_append (p);\n            }\n          else if (argv[i][env_append_opt_len] == '\\0' && i + 1 < argc)\n            {\n              lt_opt_process_env_append (argv[++i]); /* don't copy */\n            }\n          else\n            lt_fatal (\"%s missing required argument\", env_append_opt);\n          continue;\n        }\n      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)\n        {\n          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX\n             namespace, but it is not one of the ones we know about and\n             have already dealt with, above (inluding dump-script), then\n             report an error. Otherwise, targets might begin to believe\n             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX\n             namespace. The first time any user complains about this, we'll\n             need to make LTWRAPPER_OPTION_PREFIX a configure-time option\n             or a configure.ac-settable value.\n           */\n          lt_fatal (\"Unrecognized option in %s namespace: '%s'\",\n                    ltwrapper_option_prefix, argv[i]);\n        }\n      /* otherwise ... */\n      newargz[++newargc] = xstrdup (argv[i]);\n    }\n  newargz[++newargc] = NULL;\n\n  LTWRAPPER_DEBUGPRINTF     ((\"(main) lt_argv_zero : %s\\n\", (lt_argv_zero ? lt_argv_zero : \"<NULL>\")));\n  for (i = 0; i < newargc; i++)\n    {\n      LTWRAPPER_DEBUGPRINTF ((\"(main) newargz[%d]   : %s\\n\", i, (newargz[i] ? newargz[i] : \"<NULL>\")));\n    }\n\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t\tcat <<\"EOF\"\n  /* execv doesn't actually work on mingw as expected on unix */\n  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);\n  if (rval == -1)\n    {\n      /* failed to start process */\n      LTWRAPPER_DEBUGPRINTF ((\"(main) failed to launch target \\\"%s\\\": errno = %d\\n\", lt_argv_zero, errno));\n      return 127;\n    }\n  return rval;\nEOF\n\t\t;;\n\t      *)\n\t\tcat <<\"EOF\"\n  execv (lt_argv_zero, newargz);\n  return rval; /* =127, but avoids unused variable warning */\nEOF\n\t\t;;\n\t    esac\n\n\t    cat <<\"EOF\"\n}\n\nvoid *\nxmalloc (size_t num)\n{\n  void *p = (void *) malloc (num);\n  if (!p)\n    lt_fatal (\"Memory exhausted\");\n\n  return p;\n}\n\nchar *\nxstrdup (const char *string)\n{\n  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),\n\t\t\t  string) : NULL;\n}\n\nconst char *\nbase_name (const char *name)\n{\n  const char *base;\n\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  /* Skip over the disk name in MSDOS pathnames. */\n  if (isalpha ((unsigned char) name[0]) && name[1] == ':')\n    name += 2;\n#endif\n\n  for (base = name; *name; name++)\n    if (IS_DIR_SEPARATOR (*name))\n      base = name + 1;\n  return base;\n}\n\nint\ncheck_executable (const char *path)\n{\n  struct stat st;\n\n  LTWRAPPER_DEBUGPRINTF ((\"(check_executable)  : %s\\n\",\n\t\t\t  path ? (*path ? path : \"EMPTY!\") : \"NULL!\"));\n  if ((!path) || (!*path))\n    return 0;\n\n  if ((stat (path, &st) >= 0)\n      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))\n    return 1;\n  else\n    return 0;\n}\n\nint\nmake_executable (const char *path)\n{\n  int rval = 0;\n  struct stat st;\n\n  LTWRAPPER_DEBUGPRINTF ((\"(make_executable)   : %s\\n\",\n\t\t\t  path ? (*path ? path : \"EMPTY!\") : \"NULL!\"));\n  if ((!path) || (!*path))\n    return 0;\n\n  if (stat (path, &st) >= 0)\n    {\n      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);\n    }\n  return rval;\n}\n\n/* Searches for the full path of the wrapper.  Returns\n   newly allocated full path name if found, NULL otherwise\n   Does not chase symlinks, even on platforms that support them.\n*/\nchar *\nfind_executable (const char *wrapper)\n{\n  int has_slash = 0;\n  const char *p;\n  const char *p_next;\n  /* static buffer for getcwd */\n  char tmp[LT_PATHMAX + 1];\n  int tmp_len;\n  char *concat_name;\n\n  LTWRAPPER_DEBUGPRINTF ((\"(find_executable)   : %s\\n\",\n\t\t\t  wrapper ? (*wrapper ? wrapper : \"EMPTY!\") : \"NULL!\"));\n\n  if ((wrapper == NULL) || (*wrapper == '\\0'))\n    return NULL;\n\n  /* Absolute path? */\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')\n    {\n      concat_name = xstrdup (wrapper);\n      if (check_executable (concat_name))\n\treturn concat_name;\n      XFREE (concat_name);\n    }\n  else\n    {\n#endif\n      if (IS_DIR_SEPARATOR (wrapper[0]))\n\t{\n\t  concat_name = xstrdup (wrapper);\n\t  if (check_executable (concat_name))\n\t    return concat_name;\n\t  XFREE (concat_name);\n\t}\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n    }\n#endif\n\n  for (p = wrapper; *p; p++)\n    if (*p == '/')\n      {\n\thas_slash = 1;\n\tbreak;\n      }\n  if (!has_slash)\n    {\n      /* no slashes; search PATH */\n      const char *path = getenv (\"PATH\");\n      if (path != NULL)\n\t{\n\t  for (p = path; *p; p = p_next)\n\t    {\n\t      const char *q;\n\t      size_t p_len;\n\t      for (q = p; *q; q++)\n\t\tif (IS_PATH_SEPARATOR (*q))\n\t\t  break;\n\t      p_len = q - p;\n\t      p_next = (*q == '\\0' ? q : q + 1);\n\t      if (p_len == 0)\n\t\t{\n\t\t  /* empty path: current directory */\n\t\t  if (getcwd (tmp, LT_PATHMAX) == NULL)\n\t\t    lt_fatal (\"getcwd failed\");\n\t\t  tmp_len = strlen (tmp);\n\t\t  concat_name =\n\t\t    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, tmp, tmp_len);\n\t\t  concat_name[tmp_len] = '/';\n\t\t  strcpy (concat_name + tmp_len + 1, wrapper);\n\t\t}\n\t      else\n\t\t{\n\t\t  concat_name =\n\t\t    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, p, p_len);\n\t\t  concat_name[p_len] = '/';\n\t\t  strcpy (concat_name + p_len + 1, wrapper);\n\t\t}\n\t      if (check_executable (concat_name))\n\t\treturn concat_name;\n\t      XFREE (concat_name);\n\t    }\n\t}\n      /* not found in PATH; assume curdir */\n    }\n  /* Relative path | not found in path: prepend cwd */\n  if (getcwd (tmp, LT_PATHMAX) == NULL)\n    lt_fatal (\"getcwd failed\");\n  tmp_len = strlen (tmp);\n  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n  memcpy (concat_name, tmp, tmp_len);\n  concat_name[tmp_len] = '/';\n  strcpy (concat_name + tmp_len + 1, wrapper);\n\n  if (check_executable (concat_name))\n    return concat_name;\n  XFREE (concat_name);\n  return NULL;\n}\n\nchar *\nchase_symlinks (const char *pathspec)\n{\n#ifndef S_ISLNK\n  return xstrdup (pathspec);\n#else\n  char buf[LT_PATHMAX];\n  struct stat s;\n  char *tmp_pathspec = xstrdup (pathspec);\n  char *p;\n  int has_symlinks = 0;\n  while (strlen (tmp_pathspec) && !has_symlinks)\n    {\n      LTWRAPPER_DEBUGPRINTF ((\"checking path component for symlinks: %s\\n\",\n\t\t\t      tmp_pathspec));\n      if (lstat (tmp_pathspec, &s) == 0)\n\t{\n\t  if (S_ISLNK (s.st_mode) != 0)\n\t    {\n\t      has_symlinks = 1;\n\t      break;\n\t    }\n\n\t  /* search backwards for last DIR_SEPARATOR */\n\t  p = tmp_pathspec + strlen (tmp_pathspec) - 1;\n\t  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    p--;\n\t  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    {\n\t      /* no more DIR_SEPARATORS left */\n\t      break;\n\t    }\n\t  *p = '\\0';\n\t}\n      else\n\t{\n\t  char *errstr = strerror (errno);\n\t  lt_fatal (\"Error accessing file %s (%s)\", tmp_pathspec, errstr);\n\t}\n    }\n  XFREE (tmp_pathspec);\n\n  if (!has_symlinks)\n    {\n      return xstrdup (pathspec);\n    }\n\n  tmp_pathspec = realpath (pathspec, buf);\n  if (tmp_pathspec == 0)\n    {\n      lt_fatal (\"Could not follow symlinks for %s\", pathspec);\n    }\n  return xstrdup (tmp_pathspec);\n#endif\n}\n\nchar *\nstrendzap (char *str, const char *pat)\n{\n  size_t len, patlen;\n\n  assert (str != NULL);\n  assert (pat != NULL);\n\n  len = strlen (str);\n  patlen = strlen (pat);\n\n  if (patlen <= len)\n    {\n      str += len - patlen;\n      if (strcmp (str, pat) == 0)\n\t*str = '\\0';\n    }\n  return str;\n}\n\nstatic void\nlt_error_core (int exit_status, const char *mode,\n\t       const char *message, va_list ap)\n{\n  fprintf (stderr, \"%s: %s: \", program_name, mode);\n  vfprintf (stderr, message, ap);\n  fprintf (stderr, \".\\n\");\n\n  if (exit_status >= 0)\n    exit (exit_status);\n}\n\nvoid\nlt_fatal (const char *message, ...)\n{\n  va_list ap;\n  va_start (ap, message);\n  lt_error_core (EXIT_FAILURE, \"FATAL\", message, ap);\n  va_end (ap);\n}\n\nvoid\nlt_setenv (const char *name, const char *value)\n{\n  LTWRAPPER_DEBUGPRINTF ((\"(lt_setenv) setting '%s' to '%s'\\n\",\n                          (name ? name : \"<NULL>\"),\n                          (value ? value : \"<NULL>\")));\n  {\n#ifdef HAVE_SETENV\n    /* always make a copy, for consistency with !HAVE_SETENV */\n    char *str = xstrdup (value);\n    setenv (name, str, 1);\n#else\n    int len = strlen (name) + 1 + strlen (value) + 1;\n    char *str = XMALLOC (char, len);\n    sprintf (str, \"%s=%s\", name, value);\n    if (putenv (str) != EXIT_SUCCESS)\n      {\n        XFREE (str);\n      }\n#endif\n  }\n}\n\nchar *\nlt_extend_str (const char *orig_value, const char *add, int to_end)\n{\n  char *new_value;\n  if (orig_value && *orig_value)\n    {\n      int orig_value_len = strlen (orig_value);\n      int add_len = strlen (add);\n      new_value = XMALLOC (char, add_len + orig_value_len + 1);\n      if (to_end)\n        {\n          strcpy (new_value, orig_value);\n          strcpy (new_value + orig_value_len, add);\n        }\n      else\n        {\n          strcpy (new_value, add);\n          strcpy (new_value + add_len, orig_value);\n        }\n    }\n  else\n    {\n      new_value = xstrdup (add);\n    }\n  return new_value;\n}\n\nint\nlt_split_name_value (const char *arg, char** name, char** value)\n{\n  const char *p;\n  int len;\n  if (!arg || !*arg)\n    return 1;\n\n  p = strchr (arg, (int)'=');\n\n  if (!p)\n    return 1;\n\n  *value = xstrdup (++p);\n\n  len = strlen (arg) - strlen (*value);\n  *name = XMALLOC (char, len);\n  strncpy (*name, arg, len-1);\n  (*name)[len - 1] = '\\0';\n\n  return 0;\n}\n\nvoid\nlt_opt_process_env_set (const char *arg)\n{\n  char *name = NULL;\n  char *value = NULL;\n\n  if (lt_split_name_value (arg, &name, &value) != 0)\n    {\n      XFREE (name);\n      XFREE (value);\n      lt_fatal (\"bad argument for %s: '%s'\", env_set_opt, arg);\n    }\n\n  lt_setenv (name, value);\n  XFREE (name);\n  XFREE (value);\n}\n\nvoid\nlt_opt_process_env_prepend (const char *arg)\n{\n  char *name = NULL;\n  char *value = NULL;\n  char *new_value = NULL;\n\n  if (lt_split_name_value (arg, &name, &value) != 0)\n    {\n      XFREE (name);\n      XFREE (value);\n      lt_fatal (\"bad argument for %s: '%s'\", env_prepend_opt, arg);\n    }\n\n  new_value = lt_extend_str (getenv (name), value, 0);\n  lt_setenv (name, new_value);\n  XFREE (new_value);\n  XFREE (name);\n  XFREE (value);\n}\n\nvoid\nlt_opt_process_env_append (const char *arg)\n{\n  char *name = NULL;\n  char *value = NULL;\n  char *new_value = NULL;\n\n  if (lt_split_name_value (arg, &name, &value) != 0)\n    {\n      XFREE (name);\n      XFREE (value);\n      lt_fatal (\"bad argument for %s: '%s'\", env_append_opt, arg);\n    }\n\n  new_value = lt_extend_str (getenv (name), value, 1);\n  lt_setenv (name, new_value);\n  XFREE (new_value);\n  XFREE (name);\n  XFREE (value);\n}\n\nvoid\nlt_update_exe_path (const char *name, const char *value)\n{\n  LTWRAPPER_DEBUGPRINTF ((\"(lt_update_exe_path) modifying '%s' by prepending '%s'\\n\",\n                          (name ? name : \"<NULL>\"),\n                          (value ? value : \"<NULL>\")));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      /* some systems can't cope with a ':'-terminated path #' */\n      int len = strlen (new_value);\n      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))\n        {\n          new_value[len-1] = '\\0';\n        }\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\nvoid\nlt_update_lib_path (const char *name, const char *value)\n{\n  LTWRAPPER_DEBUGPRINTF ((\"(lt_update_lib_path) modifying '%s' by prepending '%s'\\n\",\n                          (name ? name : \"<NULL>\"),\n                          (value ? value : \"<NULL>\")));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\n\nEOF\n}\n# end: func_emit_cwrapperexe_src\n\n# func_mode_link arg...\nfunc_mode_link ()\n{\n    $opt_debug\n    case $host in\n    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n      # It is impossible to link a dll without this setting, and\n      # we shouldn't force the makefile maintainer to figure out\n      # which system we are compiling for in order to pass an extra\n      # flag for every libtool invocation.\n      # allow_undefined=no\n\n      # FIXME: Unfortunately, there are problems with the above when trying\n      # to make a dll which has undefined symbols, in which case not\n      # even a static library is built.  For now, we need to specify\n      # -no-undefined on the libtool link line when we can be certain\n      # that all symbols are satisfied, otherwise we get a static library.\n      allow_undefined=yes\n      ;;\n    *)\n      allow_undefined=yes\n      ;;\n    esac\n    libtool_args=$nonopt\n    base_compile=\"$nonopt $@\"\n    compile_command=$nonopt\n    finalize_command=$nonopt\n\n    compile_rpath=\n    finalize_rpath=\n    compile_shlibpath=\n    finalize_shlibpath=\n    convenience=\n    old_convenience=\n    deplibs=\n    old_deplibs=\n    compiler_flags=\n    linker_flags=\n    dllsearchpath=\n    lib_search_path=`pwd`\n    inst_prefix_dir=\n    new_inherited_linker_flags=\n\n    avoid_version=no\n    dlfiles=\n    dlprefiles=\n    dlself=no\n    export_dynamic=no\n    export_symbols=\n    export_symbols_regex=\n    generated=\n    libobjs=\n    ltlibs=\n    module=no\n    no_install=no\n    objs=\n    non_pic_objects=\n    precious_files_regex=\n    prefer_static_libs=no\n    preload=no\n    prev=\n    prevarg=\n    release=\n    rpath=\n    xrpath=\n    perm_rpath=\n    temp_rpath=\n    thread_safe=no\n    vinfo=\n    vinfo_number=no\n    weak_libs=\n    single_module=\"${wl}-single_module\"\n    func_infer_tag $base_compile\n\n    # We need to know -static, to get the right output filenames.\n    for arg\n    do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tbreak\n\t;;\n      -all-static | -static | -static-libtool-libs)\n\tcase $arg in\n\t-all-static)\n\t  if test \"$build_libtool_libs\" = yes && test -z \"$link_static_flag\"; then\n\t    func_warning \"complete static linking is impossible in this configuration\"\n\t  fi\n\t  if test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\t-static)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=built\n\t  ;;\n\t-static-libtool-libs)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\tesac\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tbreak\n\t;;\n      esac\n    done\n\n    # See if our shared archives depend on static archives.\n    test -n \"$old_archive_from_new_cmds\" && build_old_libs=yes\n\n    # Go through the arguments, transforming them on the way.\n    while test \"$#\" -gt 0; do\n      arg=\"$1\"\n      shift\n      func_quote_for_eval \"$arg\"\n      qarg=$func_quote_for_eval_unquoted_result\n      func_append libtool_args \" $func_quote_for_eval_result\"\n\n      # If the previous option needs an argument, assign it.\n      if test -n \"$prev\"; then\n\tcase $prev in\n\toutput)\n\t  func_append compile_command \" @OUTPUT@\"\n\t  func_append finalize_command \" @OUTPUT@\"\n\t  ;;\n\tesac\n\n\tcase $prev in\n\tdlfiles|dlprefiles)\n\t  if test \"$preload\" = no; then\n\t    # Add the symbol object into the linking commands.\n\t    func_append compile_command \" @SYMFILE@\"\n\t    func_append finalize_command \" @SYMFILE@\"\n\t    preload=yes\n\t  fi\n\t  case $arg in\n\t  *.la | *.lo) ;;  # We handle these cases below.\n\t  force)\n\t    if test \"$dlself\" = no; then\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  self)\n\t    if test \"$prev\" = dlprefiles; then\n\t      dlself=yes\n\t    elif test \"$prev\" = dlfiles && test \"$dlopen_self\" != yes; then\n\t      dlself=yes\n\t    else\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  *)\n\t    if test \"$prev\" = dlfiles; then\n\t      dlfiles=\"$dlfiles $arg\"\n\t    else\n\t      dlprefiles=\"$dlprefiles $arg\"\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  esac\n\t  ;;\n\texpsyms)\n\t  export_symbols=\"$arg\"\n\t  test -f \"$arg\" \\\n\t    || func_fatal_error \"symbol file \\`$arg' does not exist\"\n\t  prev=\n\t  continue\n\t  ;;\n\texpsyms_regex)\n\t  export_symbols_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tframework)\n\t  case $host in\n\t    *-*-darwin*)\n\t      case \"$deplibs \" in\n\t\t*\" $qarg.ltframework \"*) ;;\n\t\t*) deplibs=\"$deplibs $qarg.ltframework\" # this is fixed later\n\t\t   ;;\n\t      esac\n\t      ;;\n\t  esac\n\t  prev=\n\t  continue\n\t  ;;\n\tinst_prefix)\n\t  inst_prefix_dir=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tobjectlist)\n\t  if test -f \"$arg\"; then\n\t    save_arg=$arg\n\t    moreargs=\n\t    for fil in `cat \"$save_arg\"`\n\t    do\n#\t      moreargs=\"$moreargs $fil\"\n\t      arg=$fil\n\t      # A libtool-controlled object.\n\n\t      # Check to see that this really is a libtool object.\n\t      if func_lalib_unsafe_p \"$arg\"; then\n\t\tpic_object=\n\t\tnon_pic_object=\n\n\t\t# Read the .lo file\n\t\tfunc_source \"$arg\"\n\n\t\tif test -z \"$pic_object\" ||\n\t\t   test -z \"$non_pic_object\" ||\n\t\t   test \"$pic_object\" = none &&\n\t\t   test \"$non_pic_object\" = none; then\n\t\t  func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t\tfi\n\n\t\t# Extract subdirectory from the argument.\n\t\tfunc_dirname \"$arg\" \"/\" \"\"\n\t\txdir=\"$func_dirname_result\"\n\n\t\tif test \"$pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  pic_object=\"$xdir$pic_object\"\n\n\t\t  if test \"$prev\" = dlfiles; then\n\t\t    if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\t      dlfiles=\"$dlfiles $pic_object\"\n\t\t      prev=\n\t\t      continue\n\t\t    else\n\t\t      # If libtool objects are unsupported, then we need to preload.\n\t\t      prev=dlprefiles\n\t\t    fi\n\t\t  fi\n\n\t\t  # CHECK ME:  I think I busted this.  -Ossama\n\t\t  if test \"$prev\" = dlprefiles; then\n\t\t    # Preload the old-style object.\n\t\t    dlprefiles=\"$dlprefiles $pic_object\"\n\t\t    prev=\n\t\t  fi\n\n\t\t  # A PIC object.\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  arg=\"$pic_object\"\n\t\tfi\n\n\t\t# Non-PIC object.\n\t\tif test \"$non_pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  non_pic_object=\"$xdir$non_pic_object\"\n\n\t\t  # A standard non-PIC object\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\t  if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t\t    arg=\"$non_pic_object\"\n\t\t  fi\n\t\telse\n\t\t  # If the PIC object exists, use it instead.\n\t\t  # $xdir was prepended to $pic_object above.\n\t\t  non_pic_object=\"$pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\tfi\n\t      else\n\t\t# Only an error if not doing a dry-run.\n\t\tif $opt_dry_run; then\n\t\t  # Extract subdirectory from the argument.\n\t\t  func_dirname \"$arg\" \"/\" \"\"\n\t\t  xdir=\"$func_dirname_result\"\n\n\t\t  func_lo2o \"$arg\"\n\t\t  pic_object=$xdir$objdir/$func_lo2o_result\n\t\t  non_pic_object=$xdir$func_lo2o_result\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t        else\n\t\t  func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t\tfi\n\t      fi\n\t    done\n\t  else\n\t    func_fatal_error \"link input file \\`$arg' does not exist\"\n\t  fi\n\t  arg=$save_arg\n\t  prev=\n\t  continue\n\t  ;;\n\tprecious_regex)\n\t  precious_files_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trelease)\n\t  release=\"-$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trpath | xrpath)\n\t  # We need an absolute path.\n\t  case $arg in\n\t  [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t  *)\n\t    func_fatal_error \"only absolute run-paths are allowed\"\n\t    ;;\n\t  esac\n\t  if test \"$prev\" = rpath; then\n\t    case \"$rpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) rpath=\"$rpath $arg\" ;;\n\t    esac\n\t  else\n\t    case \"$xrpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) xrpath=\"$xrpath $arg\" ;;\n\t    esac\n\t  fi\n\t  prev=\n\t  continue\n\t  ;;\n\tshrext)\n\t  shrext_cmds=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tweak)\n\t  weak_libs=\"$weak_libs $arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\txcclinker)\n\t  linker_flags=\"$linker_flags $qarg\"\n\t  compiler_flags=\"$compiler_flags $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txcompiler)\n\t  compiler_flags=\"$compiler_flags $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txlinker)\n\t  linker_flags=\"$linker_flags $qarg\"\n\t  compiler_flags=\"$compiler_flags $wl$qarg\"\n\t  prev=\n\t  func_append compile_command \" $wl$qarg\"\n\t  func_append finalize_command \" $wl$qarg\"\n\t  continue\n\t  ;;\n\t*)\n\t  eval \"$prev=\\\"\\$arg\\\"\"\n\t  prev=\n\t  continue\n\t  ;;\n\tesac\n      fi # test -n \"$prev\"\n\n      prevarg=\"$arg\"\n\n      case $arg in\n      -all-static)\n\tif test -n \"$link_static_flag\"; then\n\t  # See comment for -static flag below, for more details.\n\t  func_append compile_command \" $link_static_flag\"\n\t  func_append finalize_command \" $link_static_flag\"\n\tfi\n\tcontinue\n\t;;\n\n      -allow-undefined)\n\t# FIXME: remove this flag sometime in the future.\n\tfunc_fatal_error \"\\`-allow-undefined' must not be used because it is the default\"\n\t;;\n\n      -avoid-version)\n\tavoid_version=yes\n\tcontinue\n\t;;\n\n      -dlopen)\n\tprev=dlfiles\n\tcontinue\n\t;;\n\n      -dlpreopen)\n\tprev=dlprefiles\n\tcontinue\n\t;;\n\n      -export-dynamic)\n\texport_dynamic=yes\n\tcontinue\n\t;;\n\n      -export-symbols | -export-symbols-regex)\n\tif test -n \"$export_symbols\" || test -n \"$export_symbols_regex\"; then\n\t  func_fatal_error \"more than one -exported-symbols argument is not allowed\"\n\tfi\n\tif test \"X$arg\" = \"X-export-symbols\"; then\n\t  prev=expsyms\n\telse\n\t  prev=expsyms_regex\n\tfi\n\tcontinue\n\t;;\n\n      -framework)\n\tprev=framework\n\tcontinue\n\t;;\n\n      -inst-prefix-dir)\n\tprev=inst_prefix\n\tcontinue\n\t;;\n\n      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*\n      # so, if we see these flags be careful not to treat them like -L\n      -L[A-Z][A-Z]*:*)\n\tcase $with_gcc/$host in\n\tno/*-*-irix* | /*-*-irix*)\n\t  func_append compile_command \" $arg\"\n\t  func_append finalize_command \" $arg\"\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -L*)\n\tfunc_stripname '-L' '' \"$arg\"\n\tdir=$func_stripname_result\n\tif test -z \"$dir\"; then\n\t  if test \"$#\" -gt 0; then\n\t    func_fatal_error \"require no space between \\`-L' and \\`$1'\"\n\t  else\n\t    func_fatal_error \"need path for \\`-L' option\"\n\t  fi\n\tfi\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t*)\n\t  absdir=`cd \"$dir\" && pwd`\n\t  test -z \"$absdir\" && \\\n\t    func_fatal_error \"cannot determine absolute directory name of \\`$dir'\"\n\t  dir=\"$absdir\"\n\t  ;;\n\tesac\n\tcase \"$deplibs \" in\n\t*\" -L$dir \"*) ;;\n\t*)\n\t  deplibs=\"$deplibs -L$dir\"\n\t  lib_search_path=\"$lib_search_path $dir\"\n\t  ;;\n\tesac\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`$ECHO \"X$dir\" | $Xsed -e 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$dir:\"*) ;;\n\t  ::) dllsearchpath=$dir;;\n\t  *) dllsearchpath=\"$dllsearchpath:$dir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) dllsearchpath=\"$dllsearchpath:$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -l*)\n\tif test \"X$arg\" = \"X-lc\" || test \"X$arg\" = \"X-lm\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)\n\t    # These systems don't actually have a C or math library (as such)\n\t    continue\n\t    ;;\n\t  *-*-os2*)\n\t    # These systems don't actually have a C library (as such)\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C and math libraries are in the System framework\n\t    deplibs=\"$deplibs System.ltframework\"\n\t    continue\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  esac\n\telif test \"X$arg\" = \"X-lc_r\"; then\n\t case $host in\n\t *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t   # Do not include libc_r directly, use -pthread flag.\n\t   continue\n\t   ;;\n\t esac\n\tfi\n\tdeplibs=\"$deplibs $arg\"\n\tcontinue\n\t;;\n\n      -module)\n\tmodule=yes\n\tcontinue\n\t;;\n\n      # Tru64 UNIX uses -model [arg] to determine the layout of C++\n      # classes, name mangling, and exception handling.\n      # Darwin uses the -arch flag to determine output architecture.\n      -model|-arch|-isysroot)\n\tcompiler_flags=\"$compiler_flags $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)\n\tcompiler_flags=\"$compiler_flags $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tcase \"$new_inherited_linker_flags \" in\n\t    *\" $arg \"*) ;;\n\t    * ) new_inherited_linker_flags=\"$new_inherited_linker_flags $arg\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -multi_module)\n\tsingle_module=\"${wl}-multi_module\"\n\tcontinue\n\t;;\n\n      -no-fast-install)\n\tfast_install=no\n\tcontinue\n\t;;\n\n      -no-install)\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)\n\t  # The PATH hackery in wrapper scripts is required on Windows\n\t  # and Darwin in order for the loader to find any dlls it needs.\n\t  func_warning \"\\`-no-install' is ignored for $host\"\n\t  func_warning \"assuming \\`-no-fast-install' instead\"\n\t  fast_install=no\n\t  ;;\n\t*) no_install=yes ;;\n\tesac\n\tcontinue\n\t;;\n\n      -no-undefined)\n\tallow_undefined=no\n\tcontinue\n\t;;\n\n      -objectlist)\n\tprev=objectlist\n\tcontinue\n\t;;\n\n      -o) prev=output ;;\n\n      -precious-files-regex)\n\tprev=precious_regex\n\tcontinue\n\t;;\n\n      -release)\n\tprev=release\n\tcontinue\n\t;;\n\n      -rpath)\n\tprev=rpath\n\tcontinue\n\t;;\n\n      -R)\n\tprev=xrpath\n\tcontinue\n\t;;\n\n      -R*)\n\tfunc_stripname '-R' '' \"$arg\"\n\tdir=$func_stripname_result\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t*)\n\t  func_fatal_error \"only absolute run-paths are allowed\"\n\t  ;;\n\tesac\n\tcase \"$xrpath \" in\n\t*\" $dir \"*) ;;\n\t*) xrpath=\"$xrpath $dir\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -shared)\n\t# The effects of -shared are defined in a previous loop.\n\tcontinue\n\t;;\n\n      -shrext)\n\tprev=shrext\n\tcontinue\n\t;;\n\n      -static | -static-libtool-libs)\n\t# The effects of -static are defined in a previous loop.\n\t# We used to do the same as -all-static on platforms that\n\t# didn't have a PIC flag, but the assumption that the effects\n\t# would be equivalent was wrong.  It would break on at least\n\t# Digital Unix and AIX.\n\tcontinue\n\t;;\n\n      -thread-safe)\n\tthread_safe=yes\n\tcontinue\n\t;;\n\n      -version-info)\n\tprev=vinfo\n\tcontinue\n\t;;\n\n      -version-number)\n\tprev=vinfo\n\tvinfo_number=yes\n\tcontinue\n\t;;\n\n      -weak)\n        prev=weak\n\tcontinue\n\t;;\n\n      -Wc,*)\n\tfunc_stripname '-Wc,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  arg=\"$arg $wl$func_quote_for_eval_result\"\n\t  compiler_flags=\"$compiler_flags $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Wl,*)\n\tfunc_stripname '-Wl,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  arg=\"$arg $wl$func_quote_for_eval_result\"\n\t  compiler_flags=\"$compiler_flags $wl$func_quote_for_eval_result\"\n\t  linker_flags=\"$linker_flags $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Xcompiler)\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -Xlinker)\n\tprev=xlinker\n\tcontinue\n\t;;\n\n      -XCClinker)\n\tprev=xcclinker\n\tcontinue\n\t;;\n\n      # -msg_* for osf cc\n      -msg_*)\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler\n      # -r[0-9][0-9]* specifies the processor on the SGI compiler\n      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler\n      # +DA*, +DD* enable 64-bit mode on the HP compiler\n      # -q* pass through compiler args for the IBM compiler\n      # -m*, -t[45]*, -txscale* pass through architecture-specific\n      # compiler args for GCC\n      # -F/path gives path to uninstalled frameworks, gcc on darwin\n      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC\n      # @file GCC response files\n      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \\\n      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n        func_append compile_command \" $arg\"\n        func_append finalize_command \" $arg\"\n        compiler_flags=\"$compiler_flags $arg\"\n        continue\n        ;;\n\n      # Some other compiler flag.\n      -* | +*)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      *.$objext)\n\t# A standard object.\n\tobjs=\"$objs $arg\"\n\t;;\n\n      *.lo)\n\t# A libtool-controlled object.\n\n\t# Check to see that this really is a libtool object.\n\tif func_lalib_unsafe_p \"$arg\"; then\n\t  pic_object=\n\t  non_pic_object=\n\n\t  # Read the .lo file\n\t  func_source \"$arg\"\n\n\t  if test -z \"$pic_object\" ||\n\t     test -z \"$non_pic_object\" ||\n\t     test \"$pic_object\" = none &&\n\t     test \"$non_pic_object\" = none; then\n\t    func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t  fi\n\n\t  # Extract subdirectory from the argument.\n\t  func_dirname \"$arg\" \"/\" \"\"\n\t  xdir=\"$func_dirname_result\"\n\n\t  if test \"$pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    pic_object=\"$xdir$pic_object\"\n\n\t    if test \"$prev\" = dlfiles; then\n\t      if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\tdlfiles=\"$dlfiles $pic_object\"\n\t\tprev=\n\t\tcontinue\n\t      else\n\t\t# If libtool objects are unsupported, then we need to preload.\n\t\tprev=dlprefiles\n\t      fi\n\t    fi\n\n\t    # CHECK ME:  I think I busted this.  -Ossama\n\t    if test \"$prev\" = dlprefiles; then\n\t      # Preload the old-style object.\n\t      dlprefiles=\"$dlprefiles $pic_object\"\n\t      prev=\n\t    fi\n\n\t    # A PIC object.\n\t    func_append libobjs \" $pic_object\"\n\t    arg=\"$pic_object\"\n\t  fi\n\n\t  # Non-PIC object.\n\t  if test \"$non_pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    non_pic_object=\"$xdir$non_pic_object\"\n\n\t    # A standard non-PIC object\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t    if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t      arg=\"$non_pic_object\"\n\t    fi\n\t  else\n\t    # If the PIC object exists, use it instead.\n\t    # $xdir was prepended to $pic_object above.\n\t    non_pic_object=\"$pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  fi\n\telse\n\t  # Only an error if not doing a dry-run.\n\t  if $opt_dry_run; then\n\t    # Extract subdirectory from the argument.\n\t    func_dirname \"$arg\" \"/\" \"\"\n\t    xdir=\"$func_dirname_result\"\n\n\t    func_lo2o \"$arg\"\n\t    pic_object=$xdir$objdir/$func_lo2o_result\n\t    non_pic_object=$xdir$func_lo2o_result\n\t    func_append libobjs \" $pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  else\n\t    func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t  fi\n\tfi\n\t;;\n\n      *.$libext)\n\t# An archive.\n\tdeplibs=\"$deplibs $arg\"\n\told_deplibs=\"$old_deplibs $arg\"\n\tcontinue\n\t;;\n\n      *.la)\n\t# A libtool-controlled library.\n\n\tif test \"$prev\" = dlfiles; then\n\t  # This library was specified with -dlopen.\n\t  dlfiles=\"$dlfiles $arg\"\n\t  prev=\n\telif test \"$prev\" = dlprefiles; then\n\t  # The library was specified with -dlpreopen.\n\t  dlprefiles=\"$dlprefiles $arg\"\n\t  prev=\n\telse\n\t  deplibs=\"$deplibs $arg\"\n\tfi\n\tcontinue\n\t;;\n\n      # Some other compiler argument.\n      *)\n\t# Unknown arguments in both finalize_command and compile_command need\n\t# to be aesthetically quoted because they are evaled later.\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n      esac # arg\n\n      # Now actually substitute the argument into the commands.\n      if test -n \"$arg\"; then\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n      fi\n    done # argument parsing loop\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prevarg' option requires an argument\"\n\n    if test \"$export_dynamic\" = yes && test -n \"$export_dynamic_flag_spec\"; then\n      eval arg=\\\"$export_dynamic_flag_spec\\\"\n      func_append compile_command \" $arg\"\n      func_append finalize_command \" $arg\"\n    fi\n\n    oldlibs=\n    # calculate the name of the file, without its directory\n    func_basename \"$output\"\n    outputname=\"$func_basename_result\"\n    libobjs_save=\"$libobjs\"\n\n    if test -n \"$shlibpath_var\"; then\n      # get the directories listed in $shlibpath_var\n      eval shlib_search_path=\\`\\$ECHO \\\"X\\${$shlibpath_var}\\\" \\| \\$Xsed -e \\'s/:/ /g\\'\\`\n    else\n      shlib_search_path=\n    fi\n    eval sys_lib_search_path=\\\"$sys_lib_search_path_spec\\\"\n    eval sys_lib_dlsearch_path=\\\"$sys_lib_dlsearch_path_spec\\\"\n\n    func_dirname \"$output\" \"/\" \"\"\n    output_objdir=\"$func_dirname_result$objdir\"\n    # Create the object directory.\n    func_mkdir_p \"$output_objdir\"\n\n    # Determine the type of output\n    case $output in\n    \"\")\n      func_fatal_help \"you must specify an output file\"\n      ;;\n    *.$libext) linkmode=oldlib ;;\n    *.lo | *.$objext) linkmode=obj ;;\n    *.la) linkmode=lib ;;\n    *) linkmode=prog ;; # Anything else should be a program.\n    esac\n\n    specialdeplibs=\n\n    libs=\n    # Find all interdependent deplibs by searching for libraries\n    # that are linked more than once (e.g. -la -lb -la)\n    for deplib in $deplibs; do\n      if $opt_duplicate_deps ; then\n\tcase \"$libs \" in\n\t*\" $deplib \"*) specialdeplibs=\"$specialdeplibs $deplib\" ;;\n\tesac\n      fi\n      libs=\"$libs $deplib\"\n    done\n\n    if test \"$linkmode\" = lib; then\n      libs=\"$predeps $libs $compiler_lib_search_path $postdeps\"\n\n      # Compute libraries that are listed more than once in $predeps\n      # $postdeps and mark them as special (i.e., whose duplicates are\n      # not to be eliminated).\n      pre_post_deps=\n      if $opt_duplicate_compiler_generated_deps; then\n\tfor pre_post_dep in $predeps $postdeps; do\n\t  case \"$pre_post_deps \" in\n\t  *\" $pre_post_dep \"*) specialdeplibs=\"$specialdeplibs $pre_post_deps\" ;;\n\t  esac\n\t  pre_post_deps=\"$pre_post_deps $pre_post_dep\"\n\tdone\n      fi\n      pre_post_deps=\n    fi\n\n    deplibs=\n    newdependency_libs=\n    newlib_search_path=\n    need_relink=no # whether we're linking any uninstalled libtool libraries\n    notinst_deplibs= # not-installed libtool libraries\n    notinst_path= # paths that contain not-installed libtool libraries\n\n    case $linkmode in\n    lib)\n\tpasses=\"conv dlpreopen link\"\n\tfor file in $dlfiles $dlprefiles; do\n\t  case $file in\n\t  *.la) ;;\n\t  *)\n\t    func_fatal_help \"libraries can \\`-dlopen' only libtool libraries: $file\"\n\t    ;;\n\t  esac\n\tdone\n\t;;\n    prog)\n\tcompile_deplibs=\n\tfinalize_deplibs=\n\talldeplibs=no\n\tnewdlfiles=\n\tnewdlprefiles=\n\tpasses=\"conv scan dlopen dlpreopen link\"\n\t;;\n    *)  passes=\"conv\"\n\t;;\n    esac\n\n    for pass in $passes; do\n      # The preopen pass in lib mode reverses $deplibs; put it back here\n      # so that -L comes before libs that need it for instance...\n      if test \"$linkmode,$pass\" = \"lib,link\"; then\n\t## FIXME: Find the place where the list is rebuilt in the wrong\n\t##        order, and fix it there properly\n        tmp_deplibs=\n\tfor deplib in $deplibs; do\n\t  tmp_deplibs=\"$deplib $tmp_deplibs\"\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n      fi\n\n      if test \"$linkmode,$pass\" = \"lib,link\" ||\n\t test \"$linkmode,$pass\" = \"prog,scan\"; then\n\tlibs=\"$deplibs\"\n\tdeplibs=\n      fi\n      if test \"$linkmode\" = prog; then\n\tcase $pass in\n\tdlopen) libs=\"$dlfiles\" ;;\n\tdlpreopen) libs=\"$dlprefiles\" ;;\n\tlink)\n\t  libs=\"$deplibs %DEPLIBS%\"\n\t  test \"X$link_all_deplibs\" != Xno && libs=\"$libs $dependency_libs\"\n\t  ;;\n\tesac\n      fi\n      if test \"$linkmode,$pass\" = \"lib,dlpreopen\"; then\n\t# Collect and forward deplibs of preopened libtool libs\n\tfor lib in $dlprefiles; do\n\t  # Ignore non-libtool-libs\n\t  dependency_libs=\n\t  case $lib in\n\t  *.la)\tfunc_source \"$lib\" ;;\n\t  esac\n\n\t  # Collect preopened libtool deplibs, except any this library\n\t  # has declared as weak libs\n\t  for deplib in $dependency_libs; do\n            deplib_base=`$ECHO \"X$deplib\" | $Xsed -e \"$basename\"`\n\t    case \" $weak_libs \" in\n\t    *\" $deplib_base \"*) ;;\n\t    *) deplibs=\"$deplibs $deplib\" ;;\n\t    esac\n\t  done\n\tdone\n\tlibs=\"$dlprefiles\"\n      fi\n      if test \"$pass\" = dlopen; then\n\t# Collect dlpreopened libraries\n\tsave_deplibs=\"$deplibs\"\n\tdeplibs=\n      fi\n\n      for deplib in $libs; do\n\tlib=\n\tfound=no\n\tcase $deplib in\n\t-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    compiler_flags=\"$compiler_flags $deplib\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) new_inherited_linker_flags=\"$new_inherited_linker_flags $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-l*)\n\t  if test \"$linkmode\" != lib && test \"$linkmode\" != prog; then\n\t    func_warning \"\\`-l' is ignored for archives/objects\"\n\t    continue\n\t  fi\n\t  func_stripname '-l' '' \"$deplib\"\n\t  name=$func_stripname_result\n\t  if test \"$linkmode\" = lib; then\n\t    searchdirs=\"$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path\"\n\t  else\n\t    searchdirs=\"$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path\"\n\t  fi\n\t  for searchdir in $searchdirs; do\n\t    for search_ext in .la $std_shrext .so .a; do\n\t      # Search the libtool library\n\t      lib=\"$searchdir/lib${name}${search_ext}\"\n\t      if test -f \"$lib\"; then\n\t\tif test \"$search_ext\" = \".la\"; then\n\t\t  found=yes\n\t\telse\n\t\t  found=no\n\t\tfi\n\t\tbreak 2\n\t      fi\n\t    done\n\t  done\n\t  if test \"$found\" != yes; then\n\t    # deplib doesn't seem to be a libtool library\n\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      deplibs=\"$deplib $deplibs\"\n\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    continue\n\t  else # deplib is a libtool library\n\t    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,\n\t    # We need to do some special things here, and not later.\n\t    if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t      case \" $predeps $postdeps \" in\n\t      *\" $deplib \"*)\n\t\tif func_lalib_p \"$lib\"; then\n\t\t  library_names=\n\t\t  old_library=\n\t\t  func_source \"$lib\"\n\t\t  for l in $old_library $library_names; do\n\t\t    ll=\"$l\"\n\t\t  done\n\t\t  if test \"X$ll\" = \"X$old_library\" ; then # only static version available\n\t\t    found=no\n\t\t    func_dirname \"$lib\" \"\" \".\"\n\t\t    ladir=\"$func_dirname_result\"\n\t\t    lib=$ladir/$old_library\n\t\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t\t    else\n\t\t      deplibs=\"$deplib $deplibs\"\n\t\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t\t    fi\n\t\t    continue\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *) ;;\n\t      esac\n\t    fi\n\t  fi\n\t  ;; # -l\n\t*.ltframework)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$deplib $deplibs\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) new_inherited_linker_flags=\"$new_inherited_linker_flags $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-L*)\n\t  case $linkmode in\n\t  lib)\n\t    deplibs=\"$deplib $deplibs\"\n\t    test \"$pass\" = conv && continue\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    func_stripname '-L' '' \"$deplib\"\n\t    newlib_search_path=\"$newlib_search_path $func_stripname_result\"\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" = conv; then\n\t      deplibs=\"$deplib $deplibs\"\n\t      continue\n\t    fi\n\t    if test \"$pass\" = scan; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    func_stripname '-L' '' \"$deplib\"\n\t    newlib_search_path=\"$newlib_search_path $func_stripname_result\"\n\t    ;;\n\t  *)\n\t    func_warning \"\\`-L' is ignored for archives/objects\"\n\t    ;;\n\t  esac # linkmode\n\t  continue\n\t  ;; # -L\n\t-R*)\n\t  if test \"$pass\" = link; then\n\t    func_stripname '-R' '' \"$deplib\"\n\t    dir=$func_stripname_result\n\t    # Make sure the xrpath contains only unique directories.\n\t    case \"$xrpath \" in\n\t    *\" $dir \"*) ;;\n\t    *) xrpath=\"$xrpath $dir\" ;;\n\t    esac\n\t  fi\n\t  deplibs=\"$deplib $deplibs\"\n\t  continue\n\t  ;;\n\t*.la) lib=\"$deplib\" ;;\n\t*.$libext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t    continue\n\t  fi\n\t  case $linkmode in\n\t  lib)\n\t    # Linking convenience modules into shared libraries is allowed,\n\t    # but linking other static libraries is non-portable.\n\t    case \" $dlpreconveniencelibs \" in\n\t    *\" $deplib \"*) ;;\n\t    *)\n\t      valid_a_lib=no\n\t      case $deplibs_check_method in\n\t\tmatch_pattern*)\n\t\t  set dummy $deplibs_check_method; shift\n\t\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t\t  if eval \"\\$ECHO \\\"X$deplib\\\"\" 2>/dev/null | $Xsed -e 10q \\\n\t\t    | $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t    valid_a_lib=yes\n\t\t  fi\n\t\t;;\n\t\tpass_all)\n\t\t  valid_a_lib=yes\n\t\t;;\n\t      esac\n\t      if test \"$valid_a_lib\" != yes; then\n\t\t$ECHO\n\t\t$ECHO \"*** Warning: Trying to link with static lib archive $deplib.\"\n\t\t$ECHO \"*** I have the capability to make that library automatically link in when\"\n\t\t$ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t\t$ECHO \"*** shared version of the library, which you do not appear to have\"\n\t\t$ECHO \"*** because the file extensions .$libext of this argument makes me believe\"\n\t\t$ECHO \"*** that it is just a static archive that I should not use here.\"\n\t      else\n\t\t$ECHO\n\t\t$ECHO \"*** Warning: Linking the shared library $output against the\"\n\t\t$ECHO \"*** static library $deplib is not portable!\"\n\t\tdeplibs=\"$deplib $deplibs\"\n\t      fi\n\t      ;;\n\t    esac\n\t    continue\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" != link; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    continue\n\t    ;;\n\t  esac # linkmode\n\t  ;; # *.$libext\n\t*.lo | *.$objext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t  elif test \"$linkmode\" = prog; then\n\t    if test \"$pass\" = dlpreopen || test \"$dlopen_support\" != yes || test \"$build_libtool_libs\" = no; then\n\t      # If there is no dlopen support or we're linking statically,\n\t      # we need to preload.\n\t      newdlprefiles=\"$newdlprefiles $deplib\"\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      newdlfiles=\"$newdlfiles $deplib\"\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t%DEPLIBS%)\n\t  alldeplibs=yes\n\t  continue\n\t  ;;\n\tesac # case $deplib\n\n\tif test \"$found\" = yes || test -f \"$lib\"; then :\n\telse\n\t  func_fatal_error \"cannot find the library \\`$lib' or unhandled argument \\`$deplib'\"\n\tfi\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$lib\" \\\n\t  || func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\n\tfunc_dirname \"$lib\" \"\" \".\"\n\tladir=\"$func_dirname_result\"\n\n\tdlname=\n\tdlopen=\n\tdlpreopen=\n\tlibdir=\n\tlibrary_names=\n\told_library=\n\tinherited_linker_flags=\n\t# If the library was installed with an old release of libtool,\n\t# it will not redefine variables installed, or shouldnotlink\n\tinstalled=yes\n\tshouldnotlink=no\n\tavoidtemprpath=\n\n\n\t# Read the .la file\n\tfunc_source \"$lib\"\n\n\t# Convert \"-framework foo\" to \"foo.ltframework\"\n\tif test -n \"$inherited_linker_flags\"; then\n\t  tmp_inherited_linker_flags=`$ECHO \"X$inherited_linker_flags\" | $Xsed -e 's/-framework \\([^ $]*\\)/\\1.ltframework/g'`\n\t  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do\n\t    case \" $new_inherited_linker_flags \" in\n\t      *\" $tmp_inherited_linker_flag \"*) ;;\n\t      *) new_inherited_linker_flags=\"$new_inherited_linker_flags $tmp_inherited_linker_flag\";;\n\t    esac\n\t  done\n\tfi\n\tdependency_libs=`$ECHO \"X $dependency_libs\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tif test \"$linkmode,$pass\" = \"lib,link\" ||\n\t   test \"$linkmode,$pass\" = \"prog,scan\" ||\n\t   { test \"$linkmode\" != prog && test \"$linkmode\" != lib; }; then\n\t  test -n \"$dlopen\" && dlfiles=\"$dlfiles $dlopen\"\n\t  test -n \"$dlpreopen\" && dlprefiles=\"$dlprefiles $dlpreopen\"\n\tfi\n\n\tif test \"$pass\" = conv; then\n\t  # Only check for convenience libraries\n\t  deplibs=\"$lib $deplibs\"\n\t  if test -z \"$libdir\"; then\n\t    if test -z \"$old_library\"; then\n\t      func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\t    fi\n\t    # It is a libtool convenience library, so add in its objects.\n\t    convenience=\"$convenience $ladir/$objdir/$old_library\"\n\t    old_convenience=\"$old_convenience $ladir/$objdir/$old_library\"\n\t    tmp_libs=\n\t    for deplib in $dependency_libs; do\n\t      deplibs=\"$deplib $deplibs\"\n\t      if $opt_duplicate_deps ; then\n\t\tcase \"$tmp_libs \" in\n\t\t*\" $deplib \"*) specialdeplibs=\"$specialdeplibs $deplib\" ;;\n\t\tesac\n\t      fi\n\t      tmp_libs=\"$tmp_libs $deplib\"\n\t    done\n\t  elif test \"$linkmode\" != prog && test \"$linkmode\" != lib; then\n\t    func_fatal_error \"\\`$lib' is not a convenience library\"\n\t  fi\n\t  continue\n\tfi # $pass = conv\n\n\n\t# Get the name of the library we link against.\n\tlinklib=\n\tfor l in $old_library $library_names; do\n\t  linklib=\"$l\"\n\tdone\n\tif test -z \"$linklib\"; then\n\t  func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\tfi\n\n\t# This library was specified with -dlopen.\n\tif test \"$pass\" = dlopen; then\n\t  if test -z \"$libdir\"; then\n\t    func_fatal_error \"cannot -dlopen a convenience library: \\`$lib'\"\n\t  fi\n\t  if test -z \"$dlname\" ||\n\t     test \"$dlopen_support\" != yes ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    # If there is no dlname, no dlopen support or we're linking\n\t    # statically, we need to preload.  We also need to preload any\n\t    # dependent libraries so libltdl's deplib preloader doesn't\n\t    # bomb out in the load deplibs phase.\n\t    dlprefiles=\"$dlprefiles $lib $dependency_libs\"\n\t  else\n\t    newdlfiles=\"$newdlfiles $lib\"\n\t  fi\n\t  continue\n\tfi # $pass = dlopen\n\n\t# We need an absolute path.\n\tcase $ladir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs_ladir=\"$ladir\" ;;\n\t*)\n\t  abs_ladir=`cd \"$ladir\" && pwd`\n\t  if test -z \"$abs_ladir\"; then\n\t    func_warning \"cannot determine absolute directory name of \\`$ladir'\"\n\t    func_warning \"passing it literally to the linker, although it might fail\"\n\t    abs_ladir=\"$ladir\"\n\t  fi\n\t  ;;\n\tesac\n\tfunc_basename \"$lib\"\n\tlaname=\"$func_basename_result\"\n\n\t# Find the relevant object directory and library name.\n\tif test \"X$installed\" = Xyes; then\n\t  if test ! -f \"$libdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    func_warning \"library \\`$lib' was moved.\"\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    libdir=\"$abs_ladir\"\n\t  else\n\t    dir=\"$libdir\"\n\t    absdir=\"$libdir\"\n\t  fi\n\t  test \"X$hardcode_automatic\" = Xyes && avoidtemprpath=yes\n\telse\n\t  if test ! -f \"$ladir/$objdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    # Remove this search path later\n\t    notinst_path=\"$notinst_path $abs_ladir\"\n\t  else\n\t    dir=\"$ladir/$objdir\"\n\t    absdir=\"$abs_ladir/$objdir\"\n\t    # Remove this search path later\n\t    notinst_path=\"$notinst_path $abs_ladir\"\n\t  fi\n\tfi # $installed = yes\n\tfunc_stripname 'lib' '.la' \"$laname\"\n\tname=$func_stripname_result\n\n\t# This library was specified with -dlpreopen.\n\tif test \"$pass\" = dlpreopen; then\n\t  if test -z \"$libdir\" && test \"$linkmode\" = prog; then\n\t    func_fatal_error \"only libraries may -dlpreopen a convenience library: \\`$lib'\"\n\t  fi\n\t  # Prefer using a static library (so that no silly _DYNAMIC symbols\n\t  # are required to link).\n\t  if test -n \"$old_library\"; then\n\t    newdlprefiles=\"$newdlprefiles $dir/$old_library\"\n\t    # Keep a list of preopened convenience libraries to check\n\t    # that they are being used correctly in the link pass.\n\t    test -z \"$libdir\" && \\\n\t\tdlpreconveniencelibs=\"$dlpreconveniencelibs $dir/$old_library\"\n\t  # Otherwise, use the dlname, so that lt_dlopen finds it.\n\t  elif test -n \"$dlname\"; then\n\t    newdlprefiles=\"$newdlprefiles $dir/$dlname\"\n\t  else\n\t    newdlprefiles=\"$newdlprefiles $dir/$linklib\"\n\t  fi\n\tfi # $pass = dlpreopen\n\n\tif test -z \"$libdir\"; then\n\t  # Link the convenience library\n\t  if test \"$linkmode\" = lib; then\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t  elif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$dir/$old_library $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$old_library $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$lib $deplibs\" # used for prog,scan pass\n\t  fi\n\t  continue\n\tfi\n\n\n\tif test \"$linkmode\" = prog && test \"$pass\" != link; then\n\t  newlib_search_path=\"$newlib_search_path $ladir\"\n\t  deplibs=\"$lib $deplibs\"\n\n\t  linkalldeplibs=no\n\t  if test \"$link_all_deplibs\" != no || test -z \"$library_names\" ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    linkalldeplibs=yes\n\t  fi\n\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    case $deplib in\n\t    -L*) func_stripname '-L' '' \"$deplib\"\n\t         newlib_search_path=\"$newlib_search_path $func_stripname_result\"\n\t\t ;;\n\t    esac\n\t    # Need to link against all dependency_libs?\n\t    if test \"$linkalldeplibs\" = yes; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      # Need to hardcode shared library paths\n\t      # or/and link against static libraries\n\t      newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    if $opt_duplicate_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $deplib \"*) specialdeplibs=\"$specialdeplibs $deplib\" ;;\n\t      esac\n\t    fi\n\t    tmp_libs=\"$tmp_libs $deplib\"\n\t  done # for deplib\n\t  continue\n\tfi # $linkmode = prog...\n\n\tif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t  if test -n \"$library_names\" &&\n\t     { { test \"$prefer_static_libs\" = no ||\n\t         test \"$prefer_static_libs,$installed\" = \"built,yes\"; } ||\n\t       test -z \"$old_library\"; }; then\n\t    # We need to hardcode the library path\n\t    if test -n \"$shlibpath_var\" && test -z \"$avoidtemprpath\" ; then\n\t      # Make sure the rpath contains only unique directories.\n\t      case \"$temp_rpath:\" in\n\t      *\"$absdir:\"*) ;;\n\t      *) temp_rpath=\"$temp_rpath$absdir:\" ;;\n\t      esac\n\t    fi\n\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) compile_rpath=\"$compile_rpath $absdir\"\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) finalize_rpath=\"$finalize_rpath $libdir\"\n\t      esac\n\t      ;;\n\t    esac\n\t  fi # $linkmode,$pass = prog,link...\n\n\t  if test \"$alldeplibs\" = yes &&\n\t     { test \"$deplibs_check_method\" = pass_all ||\n\t       { test \"$build_libtool_libs\" = yes &&\n\t\t test -n \"$library_names\"; }; }; then\n\t    # We only need to search for static libraries\n\t    continue\n\t  fi\n\tfi\n\n\tlink_static=no # Whether the deplib will be linked statically\n\tuse_static_libs=$prefer_static_libs\n\tif test \"$use_static_libs\" = built && test \"$installed\" = yes; then\n\t  use_static_libs=no\n\tfi\n\tif test -n \"$library_names\" &&\n\t   { test \"$use_static_libs\" = no || test -z \"$old_library\"; }; then\n\t  case $host in\n\t  *cygwin* | *mingw* | *cegcc*)\n\t      # No point in relinking DLLs because paths are not encoded\n\t      notinst_deplibs=\"$notinst_deplibs $lib\"\n\t      need_relink=no\n\t    ;;\n\t  *)\n\t    if test \"$installed\" = no; then\n\t      notinst_deplibs=\"$notinst_deplibs $lib\"\n\t      need_relink=yes\n\t    fi\n\t    ;;\n\t  esac\n\t  # This is a shared library\n\n\t  # Warn about portability, can't link against -module's on some\n\t  # systems (darwin).  Don't bleat about dlopened modules though!\n\t  dlopenmodule=\"\"\n\t  for dlpremoduletest in $dlprefiles; do\n\t    if test \"X$dlpremoduletest\" = \"X$lib\"; then\n\t      dlopenmodule=\"$dlpremoduletest\"\n\t      break\n\t    fi\n\t  done\n\t  if test -z \"$dlopenmodule\" && test \"$shouldnotlink\" = yes && test \"$pass\" = link; then\n\t    $ECHO\n\t    if test \"$linkmode\" = prog; then\n\t      $ECHO \"*** Warning: Linking the executable $output against the loadable module\"\n\t    else\n\t      $ECHO \"*** Warning: Linking the shared library $output against the loadable module\"\n\t    fi\n\t    $ECHO \"*** $linklib is not portable!\"\n\t  fi\n\t  if test \"$linkmode\" = lib &&\n\t     test \"$hardcode_into_libs\" = yes; then\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) compile_rpath=\"$compile_rpath $absdir\"\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) finalize_rpath=\"$finalize_rpath $libdir\"\n\t      esac\n\t      ;;\n\t    esac\n\t  fi\n\n\t  if test -n \"$old_archive_from_expsyms_cmds\"; then\n\t    # figure out the soname\n\t    set dummy $library_names\n\t    shift\n\t    realname=\"$1\"\n\t    shift\n\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t    # use dlname if we got it. it's perfectly good, no?\n\t    if test -n \"$dlname\"; then\n\t      soname=\"$dlname\"\n\t    elif test -n \"$soname_spec\"; then\n\t      # bleh windows\n\t      case $host in\n\t      *cygwin* | mingw* | *cegcc*)\n\t        func_arith $current - $age\n\t\tmajor=$func_arith_result\n\t\tversuffix=\"-$major\"\n\t\t;;\n\t      esac\n\t      eval soname=\\\"$soname_spec\\\"\n\t    else\n\t      soname=\"$realname\"\n\t    fi\n\n\t    # Make a new name for the extract_expsyms_cmds to use\n\t    soroot=\"$soname\"\n\t    func_basename \"$soroot\"\n\t    soname=\"$func_basename_result\"\n\t    func_stripname 'lib' '.dll' \"$soname\"\n\t    newlib=libimp-$func_stripname_result.a\n\n\t    # If the library has no export list, then create one now\n\t    if test -f \"$output_objdir/$soname-def\"; then :\n\t    else\n\t      func_verbose \"extracting exported symbol list from \\`$soname'\"\n\t      func_execute_cmds \"$extract_expsyms_cmds\" 'exit $?'\n\t    fi\n\n\t    # Create $newlib\n\t    if test -f \"$output_objdir/$newlib\"; then :; else\n\t      func_verbose \"generating import library for \\`$soname'\"\n\t      func_execute_cmds \"$old_archive_from_expsyms_cmds\" 'exit $?'\n\t    fi\n\t    # make sure the library variables are pointing to the new library\n\t    dir=$output_objdir\n\t    linklib=$newlib\n\t  fi # test -n \"$old_archive_from_expsyms_cmds\"\n\n\t  if test \"$linkmode\" = prog || test \"$mode\" != relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    lib_linked=yes\n\t    case $hardcode_action in\n\t    immediate | unsupported)\n\t      if test \"$hardcode_direct\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t\tcase $host in\n\t\t  *-*-sco3.2v5.0.[024]*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv4*uw2*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \\\n\t\t    *-*-unixware7*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-darwin* )\n\t\t    # if the lib is a (non-dlopened) module then we can not\n\t\t    # link against it, someone is ignoring the earlier warnings\n\t\t    if /usr/bin/file -L $add 2> /dev/null |\n\t\t\t $GREP \": [^:]* bundle\" >/dev/null ; then\n\t\t      if test \"X$dlopenmodule\" != \"X$lib\"; then\n\t\t\t$ECHO \"*** Warning: lib $linklib is a module, not a shared library\"\n\t\t\tif test -z \"$old_library\" ; then\n\t\t\t  $ECHO\n\t\t\t  $ECHO \"*** And there doesn't seem to be a static archive available\"\n\t\t\t  $ECHO \"*** The link will probably fail, sorry\"\n\t\t\telse\n\t\t\t  add=\"$dir/$old_library\"\n\t\t\tfi\n\t\t      elif test -n \"$old_library\"; then\n\t\t\tadd=\"$dir/$old_library\"\n\t\t      fi\n\t\t    fi\n\t\tesac\n\t      elif test \"$hardcode_minus_L\" = no; then\n\t\tcase $host in\n\t\t*-*-sunos*) add_shlibpath=\"$dir\" ;;\n\t\tesac\n\t\tadd_dir=\"-L$dir\"\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = no; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    relink)\n\t      if test \"$hardcode_direct\" = yes &&\n\t         test \"$hardcode_direct_absolute\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t      elif test \"$hardcode_minus_L\" = yes; then\n\t\tadd_dir=\"-L$dir\"\n\t\t# Try looking first in the location we're being installed to.\n\t\tif test -n \"$inst_prefix_dir\"; then\n\t\t  case $libdir in\n\t\t    [\\\\/]*)\n\t\t      add_dir=\"$add_dir -L$inst_prefix_dir$libdir\"\n\t\t      ;;\n\t\t  esac\n\t\tfi\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = yes; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    *) lib_linked=no ;;\n\t    esac\n\n\t    if test \"$lib_linked\" != yes; then\n\t      func_fatal_configuration \"unsupported hardcode properties\"\n\t    fi\n\n\t    if test -n \"$add_shlibpath\"; then\n\t      case :$compile_shlibpath: in\n\t      *\":$add_shlibpath:\"*) ;;\n\t      *) compile_shlibpath=\"$compile_shlibpath$add_shlibpath:\" ;;\n\t      esac\n\t    fi\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && compile_deplibs=\"$add_dir $compile_deplibs\"\n\t      test -n \"$add\" && compile_deplibs=\"$add $compile_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t      if test \"$hardcode_direct\" != yes &&\n\t\t test \"$hardcode_minus_L\" != yes &&\n\t\t test \"$hardcode_shlibpath_var\" = yes; then\n\t\tcase :$finalize_shlibpath: in\n\t\t*\":$libdir:\"*) ;;\n\t\t*) finalize_shlibpath=\"$finalize_shlibpath$libdir:\" ;;\n\t\tesac\n\t      fi\n\t    fi\n\t  fi\n\n\t  if test \"$linkmode\" = prog || test \"$mode\" = relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    # Finalize command for both is simple: just hardcode it.\n\t    if test \"$hardcode_direct\" = yes &&\n\t       test \"$hardcode_direct_absolute\" = no; then\n\t      add=\"$libdir/$linklib\"\n\t    elif test \"$hardcode_minus_L\" = yes; then\n\t      add_dir=\"-L$libdir\"\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_shlibpath_var\" = yes; then\n\t      case :$finalize_shlibpath: in\n\t      *\":$libdir:\"*) ;;\n\t      *) finalize_shlibpath=\"$finalize_shlibpath$libdir:\" ;;\n\t      esac\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_automatic\" = yes; then\n\t      if test -n \"$inst_prefix_dir\" &&\n\t\t test -f \"$inst_prefix_dir$libdir/$linklib\" ; then\n\t\tadd=\"$inst_prefix_dir$libdir/$linklib\"\n\t      else\n\t\tadd=\"$libdir/$linklib\"\n\t      fi\n\t    else\n\t      # We cannot seem to hardcode it, guess we'll fake it.\n\t      add_dir=\"-L$libdir\"\n\t      # Try looking first in the location we're being installed to.\n\t      if test -n \"$inst_prefix_dir\"; then\n\t\tcase $libdir in\n\t\t  [\\\\/]*)\n\t\t    add_dir=\"$add_dir -L$inst_prefix_dir$libdir\"\n\t\t    ;;\n\t\tesac\n\t      fi\n\t      add=\"-l$name\"\n\t    fi\n\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && finalize_deplibs=\"$add_dir $finalize_deplibs\"\n\t      test -n \"$add\" && finalize_deplibs=\"$add $finalize_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t    fi\n\t  fi\n\telif test \"$linkmode\" = prog; then\n\t  # Here we assume that one of hardcode_direct or hardcode_minus_L\n\t  # is not unsupported.  This is valid on all known static and\n\t  # shared platforms.\n\t  if test \"$hardcode_direct\" != unsupported; then\n\t    test -n \"$old_library\" && linklib=\"$old_library\"\n\t    compile_deplibs=\"$dir/$linklib $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$linklib $finalize_deplibs\"\n\t  else\n\t    compile_deplibs=\"-l$name -L$dir $compile_deplibs\"\n\t    finalize_deplibs=\"-l$name -L$dir $finalize_deplibs\"\n\t  fi\n\telif test \"$build_libtool_libs\" = yes; then\n\t  # Not a shared library\n\t  if test \"$deplibs_check_method\" != pass_all; then\n\t    # We're trying link a shared library against a static one\n\t    # but the system doesn't support it.\n\n\t    # Just print a warning and add the library to dependency_libs so\n\t    # that the program can be linked against the static library.\n\t    $ECHO\n\t    $ECHO \"*** Warning: This system can not link to static lib archive $lib.\"\n\t    $ECHO \"*** I have the capability to make that library automatically link in when\"\n\t    $ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t    $ECHO \"*** shared version of the library, which you do not appear to have.\"\n\t    if test \"$module\" = yes; then\n\t      $ECHO \"*** But as you try to build a module library, libtool will still create \"\n\t      $ECHO \"*** a static module, that should work as long as the dlopening application\"\n\t      $ECHO \"*** is linked with the -dlopen flag to resolve symbols at runtime.\"\n\t      if test -z \"$global_symbol_pipe\"; then\n\t\t$ECHO\n\t\t$ECHO \"*** However, this would only work if libtool was able to extract symbol\"\n\t\t$ECHO \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t\t$ECHO \"*** not find such a program.  So, this module is probably useless.\"\n\t\t$ECHO \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t      fi\n\t      if test \"$build_old_libs\" = no; then\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  else\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t    link_static=yes\n\t  fi\n\tfi # link shared/static library?\n\n\tif test \"$linkmode\" = lib; then\n\t  if test -n \"$dependency_libs\" &&\n\t     { test \"$hardcode_into_libs\" != yes ||\n\t       test \"$build_old_libs\" = yes ||\n\t       test \"$link_static\" = yes; }; then\n\t    # Extract -R from dependency_libs\n\t    temp_deplibs=\n\t    for libdir in $dependency_libs; do\n\t      case $libdir in\n\t      -R*) func_stripname '-R' '' \"$libdir\"\n\t           temp_xrpath=$func_stripname_result\n\t\t   case \" $xrpath \" in\n\t\t   *\" $temp_xrpath \"*) ;;\n\t\t   *) xrpath=\"$xrpath $temp_xrpath\";;\n\t\t   esac;;\n\t      *) temp_deplibs=\"$temp_deplibs $libdir\";;\n\t      esac\n\t    done\n\t    dependency_libs=\"$temp_deplibs\"\n\t  fi\n\n\t  newlib_search_path=\"$newlib_search_path $absdir\"\n\t  # Link against this library\n\t  test \"$link_static\" = no && newdependency_libs=\"$abs_ladir/$laname $newdependency_libs\"\n\t  # ... and its dependency_libs\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    if $opt_duplicate_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $deplib \"*) specialdeplibs=\"$specialdeplibs $deplib\" ;;\n\t      esac\n\t    fi\n\t    tmp_libs=\"$tmp_libs $deplib\"\n\t  done\n\n\t  if test \"$link_all_deplibs\" != no; then\n\t    # Add the search paths of all dependency libraries\n\t    for deplib in $dependency_libs; do\n\t      path=\n\t      case $deplib in\n\t      -L*) path=\"$deplib\" ;;\n\t      *.la)\n\t        func_dirname \"$deplib\" \"\" \".\"\n\t\tdir=\"$func_dirname_result\"\n\t\t# We need an absolute path.\n\t\tcase $dir in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) absdir=\"$dir\" ;;\n\t\t*)\n\t\t  absdir=`cd \"$dir\" && pwd`\n\t\t  if test -z \"$absdir\"; then\n\t\t    func_warning \"cannot determine absolute directory name of \\`$dir'\"\n\t\t    absdir=\"$dir\"\n\t\t  fi\n\t\t  ;;\n\t\tesac\n\t\tif $GREP \"^installed=no\" $deplib > /dev/null; then\n\t\tcase $host in\n\t\t*-*-darwin*)\n\t\t  depdepl=\n\t\t  eval deplibrary_names=`${SED} -n -e 's/^library_names=\\(.*\\)$/\\1/p' $deplib`\n\t\t  if test -n \"$deplibrary_names\" ; then\n\t\t    for tmp in $deplibrary_names ; do\n\t\t      depdepl=$tmp\n\t\t    done\n\t\t    if test -f \"$absdir/$objdir/$depdepl\" ; then\n\t\t      depdepl=\"$absdir/$objdir/$depdepl\"\n\t\t      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`\n                      if test -z \"$darwin_install_name\"; then\n                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`\n                      fi\n\t\t      compiler_flags=\"$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}\"\n\t\t      linker_flags=\"$linker_flags -dylib_file ${darwin_install_name}:${depdepl}\"\n\t\t      path=\n\t\t    fi\n\t\t  fi\n\t\t  ;;\n\t\t*)\n\t\t  path=\"-L$absdir/$objdir\"\n\t\t  ;;\n\t\tesac\n\t\telse\n\t\t  eval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $deplib`\n\t\t  test -z \"$libdir\" && \\\n\t\t    func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\t  test \"$absdir\" != \"$libdir\" && \\\n\t\t    func_warning \"\\`$deplib' seems to be moved\"\n\n\t\t  path=\"-L$absdir\"\n\t\tfi\n\t\t;;\n\t      esac\n\t      case \" $deplibs \" in\n\t      *\" $path \"*) ;;\n\t      *) deplibs=\"$path $deplibs\" ;;\n\t      esac\n\t    done\n\t  fi # link_all_deplibs != no\n\tfi # linkmode = lib\n      done # for deplib in $libs\n      if test \"$pass\" = link; then\n\tif test \"$linkmode\" = \"prog\"; then\n\t  compile_deplibs=\"$new_inherited_linker_flags $compile_deplibs\"\n\t  finalize_deplibs=\"$new_inherited_linker_flags $finalize_deplibs\"\n\telse\n\t  compiler_flags=\"$compiler_flags \"`$ECHO \"X $new_inherited_linker_flags\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfi\n      fi\n      dependency_libs=\"$newdependency_libs\"\n      if test \"$pass\" = dlpreopen; then\n\t# Link the dlpreopened libraries before other libraries\n\tfor deplib in $save_deplibs; do\n\t  deplibs=\"$deplib $deplibs\"\n\tdone\n      fi\n      if test \"$pass\" != dlopen; then\n\tif test \"$pass\" != conv; then\n\t  # Make sure lib_search_path contains only unique directories.\n\t  lib_search_path=\n\t  for dir in $newlib_search_path; do\n\t    case \"$lib_search_path \" in\n\t    *\" $dir \"*) ;;\n\t    *) lib_search_path=\"$lib_search_path $dir\" ;;\n\t    esac\n\t  done\n\t  newlib_search_path=\n\tfi\n\n\tif test \"$linkmode,$pass\" != \"prog,link\"; then\n\t  vars=\"deplibs\"\n\telse\n\t  vars=\"compile_deplibs finalize_deplibs\"\n\tfi\n\tfor var in $vars dependency_libs; do\n\t  # Add libraries to $var in reverse order\n\t  eval tmp_libs=\\\"\\$$var\\\"\n\t  new_libs=\n\t  for deplib in $tmp_libs; do\n\t    # FIXME: Pedantically, this is the right thing to do, so\n\t    #        that some nasty dependency loop isn't accidentally\n\t    #        broken:\n\t    #new_libs=\"$deplib $new_libs\"\n\t    # Pragmatically, this seems to cause very few problems in\n\t    # practice:\n\t    case $deplib in\n\t    -L*) new_libs=\"$deplib $new_libs\" ;;\n\t    -R*) ;;\n\t    *)\n\t      # And here is the reason: when a library appears more\n\t      # than once as an explicit dependence of a library, or\n\t      # is implicitly linked in more than once by the\n\t      # compiler, it is considered special, and multiple\n\t      # occurrences thereof are not removed.  Compare this\n\t      # with having the same library being listed as a\n\t      # dependency of multiple other libraries: in this case,\n\t      # we know (pedantically, we assume) the library does not\n\t      # need to be listed more than once, so we keep only the\n\t      # last copy.  This is not always right, but it is rare\n\t      # enough that we require users that really mean to play\n\t      # such unportable linking tricks to link the library\n\t      # using -Wl,-lname, so that libtool does not consider it\n\t      # for duplicate removal.\n\t      case \" $specialdeplibs \" in\n\t      *\" $deplib \"*) new_libs=\"$deplib $new_libs\" ;;\n\t      *)\n\t\tcase \" $new_libs \" in\n\t\t*\" $deplib \"*) ;;\n\t\t*) new_libs=\"$deplib $new_libs\" ;;\n\t\tesac\n\t\t;;\n\t      esac\n\t      ;;\n\t    esac\n\t  done\n\t  tmp_libs=\n\t  for deplib in $new_libs; do\n\t    case $deplib in\n\t    -L*)\n\t      case \" $tmp_libs \" in\n\t      *\" $deplib \"*) ;;\n\t      *) tmp_libs=\"$tmp_libs $deplib\" ;;\n\t      esac\n\t      ;;\n\t    *) tmp_libs=\"$tmp_libs $deplib\" ;;\n\t    esac\n\t  done\n\t  eval $var=\\\"$tmp_libs\\\"\n\tdone # for var\n      fi\n      # Last step: remove runtime libs from dependency_libs\n      # (they stay in deplibs)\n      tmp_libs=\n      for i in $dependency_libs ; do\n\tcase \" $predeps $postdeps $compiler_lib_search_path \" in\n\t*\" $i \"*)\n\t  i=\"\"\n\t  ;;\n\tesac\n\tif test -n \"$i\" ; then\n\t  tmp_libs=\"$tmp_libs $i\"\n\tfi\n      done\n      dependency_libs=$tmp_libs\n    done # for pass\n    if test \"$linkmode\" = prog; then\n      dlfiles=\"$newdlfiles\"\n    fi\n    if test \"$linkmode\" = prog || test \"$linkmode\" = lib; then\n      dlprefiles=\"$newdlprefiles\"\n    fi\n\n    case $linkmode in\n    oldlib)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for archives\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for archives\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for archives\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for archives\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info/-version-number' is ignored for archives\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for archives\"\n\n      test -n \"$export_symbols$export_symbols_regex\" && \\\n\tfunc_warning \"\\`-export-symbols' is ignored for archives\"\n\n      # Now set the variables for building old libraries.\n      build_libtool_libs=no\n      oldlibs=\"$output\"\n      objs=\"$objs$old_deplibs\"\n      ;;\n\n    lib)\n      # Make sure we only generate libraries of the form `libNAME.la'.\n      case $outputname in\n      lib*)\n\tfunc_stripname 'lib' '.la' \"$outputname\"\n\tname=$func_stripname_result\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval libname=\\\"$libname_spec\\\"\n\t;;\n      *)\n\ttest \"$module\" = no && \\\n\t  func_fatal_help \"libtool library \\`$output' must begin with \\`lib'\"\n\n\tif test \"$need_lib_prefix\" != no; then\n\t  # Add the \"lib\" prefix for modules if required\n\t  func_stripname '' '.la' \"$outputname\"\n\t  name=$func_stripname_result\n\t  eval shared_ext=\\\"$shrext_cmds\\\"\n\t  eval libname=\\\"$libname_spec\\\"\n\telse\n\t  func_stripname '' '.la' \"$outputname\"\n\t  libname=$func_stripname_result\n\tfi\n\t;;\n      esac\n\n      if test -n \"$objs\"; then\n\tif test \"$deplibs_check_method\" != pass_all; then\n\t  func_fatal_error \"cannot build libtool library \\`$output' from non-libtool objects on this host:$objs\"\n\telse\n\t  $ECHO\n\t  $ECHO \"*** Warning: Linking the shared library $output against the non-libtool\"\n\t  $ECHO \"*** objects $objs is not portable!\"\n\t  libobjs=\"$libobjs $objs\"\n\tfi\n      fi\n\n      test \"$dlself\" != no && \\\n\tfunc_warning \"\\`-dlopen self' is ignored for libtool libraries\"\n\n      set dummy $rpath\n      shift\n      test \"$#\" -gt 1 && \\\n\tfunc_warning \"ignoring multiple \\`-rpath's for a libtool library\"\n\n      install_libdir=\"$1\"\n\n      oldlibs=\n      if test -z \"$rpath\"; then\n\tif test \"$build_libtool_libs\" = yes; then\n\t  # Building a libtool convenience library.\n\t  # Some compilers have problems with a `.al' extension so\n\t  # convenience libraries should have the same extension an\n\t  # archive normally would.\n\t  oldlibs=\"$output_objdir/$libname.$libext $oldlibs\"\n\t  build_libtool_libs=convenience\n\t  build_old_libs=yes\n\tfi\n\n\ttest -n \"$vinfo\" && \\\n\t  func_warning \"\\`-version-info/-version-number' is ignored for convenience libraries\"\n\n\ttest -n \"$release\" && \\\n\t  func_warning \"\\`-release' is ignored for convenience libraries\"\n      else\n\n\t# Parse the version information argument.\n\tsave_ifs=\"$IFS\"; IFS=':'\n\tset dummy $vinfo 0 0 0\n\tshift\n\tIFS=\"$save_ifs\"\n\n\ttest -n \"$7\" && \\\n\t  func_fatal_help \"too many parameters to \\`-version-info'\"\n\n\t# convert absolute version numbers to libtool ages\n\t# this retains compatibility with .la files and attempts\n\t# to make the code below a bit more comprehensible\n\n\tcase $vinfo_number in\n\tyes)\n\t  number_major=\"$1\"\n\t  number_minor=\"$2\"\n\t  number_revision=\"$3\"\n\t  #\n\t  # There are really only two kinds -- those that\n\t  # use the current revision as the major version\n\t  # and those that subtract age and use age as\n\t  # a minor version.  But, then there is irix\n\t  # which has an extra 1 added just for fun\n\t  #\n\t  case $version_type in\n\t  darwin|linux|osf|windows|none)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_revision\"\n\t    ;;\n\t  freebsd-aout|freebsd-elf|sunos)\n\t    current=\"$number_major\"\n\t    revision=\"$number_minor\"\n\t    age=\"0\"\n\t    ;;\n\t  irix|nonstopux)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_minor\"\n\t    lt_irix_increment=no\n\t    ;;\n\t  *)\n\t    func_fatal_configuration \"$modename: unknown library version type \\`$version_type'\"\n\t    ;;\n\t  esac\n\t  ;;\n\tno)\n\t  current=\"$1\"\n\t  revision=\"$2\"\n\t  age=\"$3\"\n\t  ;;\n\tesac\n\n\t# Check that each of the things are valid numbers.\n\tcase $current in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"CURRENT \\`$current' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $revision in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"REVISION \\`$revision' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $age in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"AGE \\`$age' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tif test \"$age\" -gt \"$current\"; then\n\t  func_error \"AGE \\`$age' is greater than the current interface number \\`$current'\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\tfi\n\n\t# Calculate the version variables.\n\tmajor=\n\tversuffix=\n\tverstring=\n\tcase $version_type in\n\tnone) ;;\n\n\tdarwin)\n\t  # Like Linux, but with the current version available in\n\t  # verstring for coding it into the library header\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  # Darwin ld doesn't like 0 for these options...\n\t  func_arith $current + 1\n\t  minor_current=$func_arith_result\n\t  xlcverstring=\"${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision\"\n\t  verstring=\"-compatibility_version $minor_current -current_version $minor_current.$revision\"\n\t  ;;\n\n\tfreebsd-aout)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\";\n\t  ;;\n\n\tfreebsd-elf)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tirix | nonstopux)\n\t  if test \"X$lt_irix_increment\" = \"Xno\"; then\n\t    func_arith $current - $age\n\t  else\n\t    func_arith $current - $age + 1\n\t  fi\n\t  major=$func_arith_result\n\n\t  case $version_type in\n\t    nonstopux) verstring_prefix=nonstopux ;;\n\t    *)         verstring_prefix=sgi ;;\n\t  esac\n\t  verstring=\"$verstring_prefix$major.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$revision\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $revision - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring_prefix$major.$iface:$verstring\"\n\t  done\n\n\t  # Before this point, $major must not contain `.'.\n\t  major=.$major\n\t  versuffix=\"$major.$revision\"\n\t  ;;\n\n\tlinux)\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  ;;\n\n\tosf)\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\".$current.$age.$revision\"\n\t  verstring=\"$current.$age.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$age\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $current - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring:${iface}.0\"\n\t  done\n\n\t  # Make executables depend on our current version.\n\t  verstring=\"$verstring:${current}.0\"\n\t  ;;\n\n\tqnx)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tsunos)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\"\n\t  ;;\n\n\twindows)\n\t  # Use '-' rather than '.', since we only want one\n\t  # extension on DOS 8.3 filesystems.\n\t  func_arith $current - $age\n\t  major=$func_arith_result\n\t  versuffix=\"-$major\"\n\t  ;;\n\n\t*)\n\t  func_fatal_configuration \"unknown library version type \\`$version_type'\"\n\t  ;;\n\tesac\n\n\t# Clear the version info if we defaulted, and they specified a release.\n\tif test -z \"$vinfo\" && test -n \"$release\"; then\n\t  major=\n\t  case $version_type in\n\t  darwin)\n\t    # we can't check for \"0.0\" in archive_cmds due to quoting\n\t    # problems, so we reset it completely\n\t    verstring=\n\t    ;;\n\t  *)\n\t    verstring=\"0.0\"\n\t    ;;\n\t  esac\n\t  if test \"$need_version\" = no; then\n\t    versuffix=\n\t  else\n\t    versuffix=\".0.0\"\n\t  fi\n\tfi\n\n\t# Remove version info from name if versioning should be avoided\n\tif test \"$avoid_version\" = yes && test \"$need_version\" = no; then\n\t  major=\n\t  versuffix=\n\t  verstring=\"\"\n\tfi\n\n\t# Check to see if the archive will have undefined symbols.\n\tif test \"$allow_undefined\" = yes; then\n\t  if test \"$allow_undefined_flag\" = unsupported; then\n\t    func_warning \"undefined symbols not allowed in $host shared libraries\"\n\t    build_libtool_libs=no\n\t    build_old_libs=yes\n\t  fi\n\telse\n\t  # Don't allow undefined symbols.\n\t  allow_undefined_flag=\"$no_undefined_flag\"\n\tfi\n\n      fi\n\n      func_generate_dlsyms \"$libname\" \"$libname\" \"yes\"\n      libobjs=\"$libobjs $symfileobj\"\n      test \"X$libobjs\" = \"X \" && libobjs=\n\n      if test \"$mode\" != relink; then\n\t# Remove our outputs, but don't remove object files since they\n\t# may have been created when compiling PIC objects.\n\tremovelist=\n\ttempremovelist=`$ECHO \"$output_objdir/*\"`\n\tfor p in $tempremovelist; do\n\t  case $p in\n\t    *.$objext | *.gcno)\n\t       ;;\n\t    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)\n\t       if test \"X$precious_files_regex\" != \"X\"; then\n\t\t if $ECHO \"$p\" | $EGREP -e \"$precious_files_regex\" >/dev/null 2>&1\n\t\t then\n\t\t   continue\n\t\t fi\n\t       fi\n\t       removelist=\"$removelist $p\"\n\t       ;;\n\t    *) ;;\n\t  esac\n\tdone\n\ttest -n \"$removelist\" && \\\n\t  func_show_eval \"${RM}r \\$removelist\"\n      fi\n\n      # Now set the variables for building old libraries.\n      if test \"$build_old_libs\" = yes && test \"$build_libtool_libs\" != convenience ; then\n\toldlibs=\"$oldlibs $output_objdir/$libname.$libext\"\n\n\t# Transform .lo files to .o files.\n\toldobjs=\"$objs \"`$ECHO \"X$libobjs\" | $SP2NL | $Xsed -e '/\\.'${libext}'$/d' -e \"$lo2o\" | $NL2SP`\n      fi\n\n      # Eliminate all temporary directories.\n      #for path in $notinst_path; do\n      #\tlib_search_path=`$ECHO \"X$lib_search_path \" | $Xsed -e \"s% $path % %g\"`\n      #\tdeplibs=`$ECHO \"X$deplibs \" | $Xsed -e \"s% -L$path % %g\"`\n      #\tdependency_libs=`$ECHO \"X$dependency_libs \" | $Xsed -e \"s% -L$path % %g\"`\n      #done\n\n      if test -n \"$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\ttemp_xrpath=\n\tfor libdir in $xrpath; do\n\t  temp_xrpath=\"$temp_xrpath -R$libdir\"\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) finalize_rpath=\"$finalize_rpath $libdir\" ;;\n\t  esac\n\tdone\n\tif test \"$hardcode_into_libs\" != yes || test \"$build_old_libs\" = yes; then\n\t  dependency_libs=\"$temp_xrpath $dependency_libs\"\n\tfi\n      fi\n\n      # Make sure dlfiles contains only unique files that won't be dlpreopened\n      old_dlfiles=\"$dlfiles\"\n      dlfiles=\n      for lib in $old_dlfiles; do\n\tcase \" $dlprefiles $dlfiles \" in\n\t*\" $lib \"*) ;;\n\t*) dlfiles=\"$dlfiles $lib\" ;;\n\tesac\n      done\n\n      # Make sure dlprefiles contains only unique files\n      old_dlprefiles=\"$dlprefiles\"\n      dlprefiles=\n      for lib in $old_dlprefiles; do\n\tcase \"$dlprefiles \" in\n\t*\" $lib \"*) ;;\n\t*) dlprefiles=\"$dlprefiles $lib\" ;;\n\tesac\n      done\n\n      if test \"$build_libtool_libs\" = yes; then\n\tif test -n \"$rpath\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)\n\t    # these systems don't actually have a c library (as such)!\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C library is in the System framework\n\t    deplibs=\"$deplibs System.ltframework\"\n\t    ;;\n\t  *-*-netbsd*)\n\t    # Don't link with libc until the a.out ld.so is fixed.\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    ;;\n\t  *)\n\t    # Add libc to deplibs on all other systems if necessary.\n\t    if test \"$build_libtool_need_lc\" = \"yes\"; then\n\t      deplibs=\"$deplibs -lc\"\n\t    fi\n\t    ;;\n\t  esac\n\tfi\n\n\t# Transform deplibs into only deplibs that can be linked in shared.\n\tname_save=$name\n\tlibname_save=$libname\n\trelease_save=$release\n\tversuffix_save=$versuffix\n\tmajor_save=$major\n\t# I'm not sure if I'm treating the release correctly.  I think\n\t# release should show up in the -l (ie -lgmp5) so we don't want to\n\t# add it in twice.  Is that correct?\n\trelease=\"\"\n\tversuffix=\"\"\n\tmajor=\"\"\n\tnewdeplibs=\n\tdroppeddeps=no\n\tcase $deplibs_check_method in\n\tpass_all)\n\t  # Don't check for shared/static.  Everything works.\n\t  # This might be a little naive.  We might want to check\n\t  # whether the library exists or not.  But this is on\n\t  # osf3 & osf4 and I'm not really sure... Just\n\t  # implementing what was already the behavior.\n\t  newdeplibs=$deplibs\n\t  ;;\n\ttest_compile)\n\t  # This code stresses the \"libraries are programs\" paradigm to its\n\t  # limits. Maybe even breaks it.  We compile a program, linking it\n\t  # against the deplibs as a proxy for the library.  Then we can check\n\t  # whether they linked in statically or dynamically with ldd.\n\t  $opt_dry_run || $RM conftest.c\n\t  cat > conftest.c <<EOF\n\t  int main() { return 0; }\nEOF\n\t  $opt_dry_run || $RM conftest\n\t  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then\n\t    ldd_output=`ldd conftest`\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\tif test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t  case \" $predeps $postdeps \" in\n\t\t  *\" $i \"*)\n\t\t    newdeplibs=\"$newdeplibs $i\"\n\t\t    i=\"\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t\tif test -n \"$i\" ; then\n\t\t  libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t  deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t  set dummy $deplib_matches; shift\n\t\t  deplib_match=$1\n\t\t  if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t    newdeplibs=\"$newdeplibs $i\"\n\t\t  else\n\t\t    droppeddeps=yes\n\t\t    $ECHO\n\t\t    $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t    $ECHO \"*** I have the capability to make that library automatically link in when\"\n\t\t    $ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t\t    $ECHO \"*** shared version of the library, which I believe you do not have\"\n\t\t    $ECHO \"*** because a test_compile did reveal that the linker did not use it for\"\n\t\t    $ECHO \"*** its dynamic dependency list that programs get resolved with at runtime.\"\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *)\n\t\tnewdeplibs=\"$newdeplibs $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  else\n\t    # Error occurred in the first compile.  Let's try to salvage\n\t    # the situation: Compile a separate program for each library.\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\t$opt_dry_run || $RM conftest\n\t\tif $LTCC $LTCFLAGS -o conftest conftest.c $i; then\n\t\t  ldd_output=`ldd conftest`\n\t\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t    case \" $predeps $postdeps \" in\n\t\t    *\" $i \"*)\n\t\t      newdeplibs=\"$newdeplibs $i\"\n\t\t      i=\"\"\n\t\t      ;;\n\t\t    esac\n\t\t  fi\n\t\t  if test -n \"$i\" ; then\n\t\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t    deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t    set dummy $deplib_matches; shift\n\t\t    deplib_match=$1\n\t\t    if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t      newdeplibs=\"$newdeplibs $i\"\n\t\t    else\n\t\t      droppeddeps=yes\n\t\t      $ECHO\n\t\t      $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t      $ECHO \"*** I have the capability to make that library automatically link in when\"\n\t\t      $ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t\t      $ECHO \"*** shared version of the library, which you do not appear to have\"\n\t\t      $ECHO \"*** because a test_compile did reveal that the linker did not use this one\"\n\t\t      $ECHO \"*** as a dynamic dependency that programs can get resolved with at runtime.\"\n\t\t    fi\n\t\t  fi\n\t\telse\n\t\t  droppeddeps=yes\n\t\t  $ECHO\n\t\t  $ECHO \"*** Warning!  Library $i is needed by this library but I was not able to\"\n\t\t  $ECHO \"*** make it link in!  You will probably need to install it or some\"\n\t\t  $ECHO \"*** library that it depends on before this library will be fully\"\n\t\t  $ECHO \"*** functional.  Installing it before continuing would be even better.\"\n\t\tfi\n\t\t;;\n\t      *)\n\t\tnewdeplibs=\"$newdeplibs $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  fi\n\t  ;;\n\tfile_magic*)\n\t  set dummy $deplibs_check_method; shift\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  newdeplibs=\"$newdeplibs $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`\n\t\t  for potent_lib in $potential_libs; do\n\t\t      # Follow soft links.\n\t\t      if ls -lLd \"$potent_lib\" 2>/dev/null |\n\t\t\t $GREP \" -> \" >/dev/null; then\n\t\t\tcontinue\n\t\t      fi\n\t\t      # The statement above tries to avoid entering an\n\t\t      # endless loop below, in case of cyclic links.\n\t\t      # We might still enter an endless loop, since a link\n\t\t      # loop can be closed while we follow links,\n\t\t      # but so what?\n\t\t      potlib=\"$potent_lib\"\n\t\t      while test -h \"$potlib\" 2>/dev/null; do\n\t\t\tpotliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`\n\t\t\tcase $potliblink in\n\t\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) potlib=\"$potliblink\";;\n\t\t\t*) potlib=`$ECHO \"X$potlib\" | $Xsed -e 's,[^/]*$,,'`\"$potliblink\";;\n\t\t\tesac\n\t\t      done\n\t\t      if eval $file_magic_cmd \\\"\\$potlib\\\" 2>/dev/null |\n\t\t\t $SED -e 10q |\n\t\t\t $EGREP \"$file_magic_regex\" > /dev/null; then\n\t\t\tnewdeplibs=\"$newdeplibs $a_deplib\"\n\t\t\ta_deplib=\"\"\n\t\t\tbreak 2\n\t\t      fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\t$ECHO\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\t$ECHO \"*** I have the capability to make that library automatically link in when\"\n\t\t$ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t\t$ECHO \"*** shared version of the library, which you do not appear to have\"\n\t\t$ECHO \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for file magic test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a file magic. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      newdeplibs=\"$newdeplibs $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tmatch_pattern*)\n\t  set dummy $deplibs_check_method; shift\n\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  newdeplibs=\"$newdeplibs $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`\n\t\t  for potent_lib in $potential_libs; do\n\t\t    potlib=\"$potent_lib\" # see symlink-check above in file_magic test\n\t\t    if eval \"\\$ECHO \\\"X$potent_lib\\\"\" 2>/dev/null | $Xsed -e 10q | \\\n\t\t       $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t      newdeplibs=\"$newdeplibs $a_deplib\"\n\t\t      a_deplib=\"\"\n\t\t      break 2\n\t\t    fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\t$ECHO\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\t$ECHO \"*** I have the capability to make that library automatically link in when\"\n\t\t$ECHO \"*** you link to this library.  But I can only do this if you have a\"\n\t\t$ECHO \"*** shared version of the library, which you do not appear to have\"\n\t\t$ECHO \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for regex pattern test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a regex pattern. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      newdeplibs=\"$newdeplibs $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tnone | unknown | *)\n\t  newdeplibs=\"\"\n\t  tmp_deplibs=`$ECHO \"X $deplibs\" | $Xsed \\\n\t      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`\n\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t    for i in $predeps $postdeps ; do\n\t      # can't use Xsed below, because $i might contain '/'\n\t      tmp_deplibs=`$ECHO \"X $tmp_deplibs\" | $Xsed -e \"s,$i,,\"`\n\t    done\n\t  fi\n\t  if $ECHO \"X $tmp_deplibs\" | $Xsed -e 's/[\t ]//g' |\n\t     $GREP . >/dev/null; then\n\t    $ECHO\n\t    if test \"X$deplibs_check_method\" = \"Xnone\"; then\n\t      $ECHO \"*** Warning: inter-library dependencies are not supported in this platform.\"\n\t    else\n\t      $ECHO \"*** Warning: inter-library dependencies are not known to be supported.\"\n\t    fi\n\t    $ECHO \"*** All declared inter-library dependencies are being dropped.\"\n\t    droppeddeps=yes\n\t  fi\n\t  ;;\n\tesac\n\tversuffix=$versuffix_save\n\tmajor=$major_save\n\trelease=$release_save\n\tlibname=$libname_save\n\tname=$name_save\n\n\tcase $host in\n\t*-*-rhapsody* | *-*-darwin1.[012])\n\t  # On Rhapsody replace the C library with the System framework\n\t  newdeplibs=`$ECHO \"X $newdeplibs\" | $Xsed -e 's/ -lc / System.ltframework /'`\n\t  ;;\n\tesac\n\n\tif test \"$droppeddeps\" = yes; then\n\t  if test \"$module\" = yes; then\n\t    $ECHO\n\t    $ECHO \"*** Warning: libtool could not satisfy all declared inter-library\"\n\t    $ECHO \"*** dependencies of module $libname.  Therefore, libtool will create\"\n\t    $ECHO \"*** a static module, that should work as long as the dlopening\"\n\t    $ECHO \"*** application is linked with the -dlopen flag.\"\n\t    if test -z \"$global_symbol_pipe\"; then\n\t      $ECHO\n\t      $ECHO \"*** However, this would only work if libtool was able to extract symbol\"\n\t      $ECHO \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t      $ECHO \"*** not find such a program.  So, this module is probably useless.\"\n\t      $ECHO \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t    fi\n\t    if test \"$build_old_libs\" = no; then\n\t      oldlibs=\"$output_objdir/$libname.$libext\"\n\t      build_libtool_libs=module\n\t      build_old_libs=yes\n\t    else\n\t      build_libtool_libs=no\n\t    fi\n\t  else\n\t    $ECHO \"*** The inter-library dependencies that have been dropped here will be\"\n\t    $ECHO \"*** automatically added whenever a program is linked with this library\"\n\t    $ECHO \"*** or is declared to -dlopen it.\"\n\n\t    if test \"$allow_undefined\" = no; then\n\t      $ECHO\n\t      $ECHO \"*** Since this library must not contain undefined symbols,\"\n\t      $ECHO \"*** because either the platform does not support them or\"\n\t      $ECHO \"*** it was explicitly requested with -no-undefined,\"\n\t      $ECHO \"*** libtool will only create a static version of it.\"\n\t      if test \"$build_old_libs\" = no; then\n\t\toldlibs=\"$output_objdir/$libname.$libext\"\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  fi\n\tfi\n\t# Done checking deplibs!\n\tdeplibs=$newdeplibs\n      fi\n      # Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n      case $host in\n\t*-*-darwin*)\n\t  newdeplibs=`$ECHO \"X $newdeplibs\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  new_inherited_linker_flags=`$ECHO \"X $new_inherited_linker_flags\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  deplibs=`$ECHO \"X $deplibs\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  ;;\n      esac\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    new_libs=\"$new_libs -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) new_libs=\"$new_libs $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) new_libs=\"$new_libs $deplib\" ;;\n\tesac\n      done\n      deplibs=\"$new_libs\"\n\n      # All the library-specific variables (install_libdir is set above).\n      library_names=\n      old_library=\n      dlname=\n\n      # Test again, we may have decided not to build it any more\n      if test \"$build_libtool_libs\" = yes; then\n\tif test \"$hardcode_into_libs\" = yes; then\n\t  # Hardcode the library paths\n\t  hardcode_libdirs=\n\t  dep_rpath=\n\t  rpath=\"$finalize_rpath\"\n\t  test \"$mode\" != relink && rpath=\"$compile_rpath$rpath\"\n\t  for libdir in $rpath; do\n\t    if test -n \"$hardcode_libdir_flag_spec\"; then\n\t      if test -n \"$hardcode_libdir_separator\"; then\n\t\tif test -z \"$hardcode_libdirs\"; then\n\t\t  hardcode_libdirs=\"$libdir\"\n\t\telse\n\t\t  # Just accumulate the unique libdirs.\n\t\t  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t\t  *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t    ;;\n\t\t  *)\n\t\t    hardcode_libdirs=\"$hardcode_libdirs$hardcode_libdir_separator$libdir\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t      else\n\t\teval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t\tdep_rpath=\"$dep_rpath $flag\"\n\t      fi\n\t    elif test -n \"$runpath_var\"; then\n\t      case \"$perm_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) perm_rpath=\"$perm_rpath $libdir\" ;;\n\t      esac\n\t    fi\n\t  done\n\t  # Substitute the hardcoded libdirs into the rpath.\n\t  if test -n \"$hardcode_libdir_separator\" &&\n\t     test -n \"$hardcode_libdirs\"; then\n\t    libdir=\"$hardcode_libdirs\"\n\t    if test -n \"$hardcode_libdir_flag_spec_ld\"; then\n\t      eval dep_rpath=\\\"$hardcode_libdir_flag_spec_ld\\\"\n\t    else\n\t      eval dep_rpath=\\\"$hardcode_libdir_flag_spec\\\"\n\t    fi\n\t  fi\n\t  if test -n \"$runpath_var\" && test -n \"$perm_rpath\"; then\n\t    # We should set the runpath_var.\n\t    rpath=\n\t    for dir in $perm_rpath; do\n\t      rpath=\"$rpath$dir:\"\n\t    done\n\t    eval \"$runpath_var='$rpath\\$$runpath_var'; export $runpath_var\"\n\t  fi\n\t  test -n \"$dep_rpath\" && deplibs=\"$dep_rpath $deplibs\"\n\tfi\n\n\tshlibpath=\"$finalize_shlibpath\"\n\ttest \"$mode\" != relink && shlibpath=\"$compile_shlibpath$shlibpath\"\n\tif test -n \"$shlibpath\"; then\n\t  eval \"$shlibpath_var='$shlibpath\\$$shlibpath_var'; export $shlibpath_var\"\n\tfi\n\n\t# Get the real and link names of the library.\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval library_names=\\\"$library_names_spec\\\"\n\tset dummy $library_names\n\tshift\n\trealname=\"$1\"\n\tshift\n\n\tif test -n \"$soname_spec\"; then\n\t  eval soname=\\\"$soname_spec\\\"\n\telse\n\t  soname=\"$realname\"\n\tfi\n\tif test -z \"$dlname\"; then\n\t  dlname=$soname\n\tfi\n\n\tlib=\"$output_objdir/$realname\"\n\tlinknames=\n\tfor link\n\tdo\n\t  linknames=\"$linknames $link\"\n\tdone\n\n\t# Use standard objects if they are pic\n\ttest -z \"$pic_flag\" && libobjs=`$ECHO \"X$libobjs\" | $SP2NL | $Xsed -e \"$lo2o\" | $NL2SP`\n\ttest \"X$libobjs\" = \"X \" && libobjs=\n\n\tdelfiles=\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  $opt_dry_run || cp \"$export_symbols\" \"$output_objdir/$libname.uexp\"\n\t  export_symbols=\"$output_objdir/$libname.uexp\"\n\t  delfiles=\"$delfiles $export_symbols\"\n\tfi\n\n\torig_export_symbols=\n\tcase $host_os in\n\tcygwin* | mingw* | cegcc*)\n\t  if test -n \"$export_symbols\" && test -z \"$export_symbols_regex\"; then\n\t    # exporting using user supplied symfile\n\t    if test \"x`$SED 1q $export_symbols`\" != xEXPORTS; then\n\t      # and it's NOT already a .def file. Must figure out\n\t      # which of the given symbols are data symbols and tag\n\t      # them as such. So, trigger use of export_symbols_cmds.\n\t      # export_symbols gets reassigned inside the \"prepare\n\t      # the list of exported symbols\" if statement, so the\n\t      # include_expsyms logic still works.\n\t      orig_export_symbols=\"$export_symbols\"\n\t      export_symbols=\n\t      always_export_symbols=yes\n\t    fi\n\t  fi\n\t  ;;\n\tesac\n\n\t# Prepare the list of exported symbols\n\tif test -z \"$export_symbols\"; then\n\t  if test \"$always_export_symbols\" = yes || test -n \"$export_symbols_regex\"; then\n\t    func_verbose \"generating symbol list for \\`$libname.la'\"\n\t    export_symbols=\"$output_objdir/$libname.exp\"\n\t    $opt_dry_run || $RM $export_symbols\n\t    cmds=$export_symbols_cmds\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd in $cmds; do\n\t      IFS=\"$save_ifs\"\n\t      eval cmd=\\\"$cmd\\\"\n\t      func_len \" $cmd\"\n\t      len=$func_len_result\n\t      if test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t\tfunc_show_eval \"$cmd\" 'exit $?'\n\t\tskipped_export=false\n\t      else\n\t\t# The command line is too long to execute in one step.\n\t\tfunc_verbose \"using reloadable object file for export list...\"\n\t\tskipped_export=:\n\t\t# Break out early, otherwise skipped_export may be\n\t\t# set to false by a later but shorter cmd.\n\t\tbreak\n\t      fi\n\t    done\n\t    IFS=\"$save_ifs\"\n\t    if test -n \"$export_symbols_regex\" && test \"X$skipped_export\" != \"X:\"; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  tmp_export_symbols=\"$export_symbols\"\n\t  test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t  $opt_dry_run || eval '$ECHO \"X$include_expsyms\" | $Xsed | $SP2NL >> \"$tmp_export_symbols\"'\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" && test -n \"$orig_export_symbols\"; then\n\t  # The given exports_symbols file has to be filtered, so filter it.\n\t  func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t  # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t  # 's' commands which not all seds can handle. GNU sed should be fine\n\t  # though. Also, the filter scales superlinearly with the number of\n\t  # global variables. join(1) would be nice here, but unfortunately\n\t  # isn't a blessed tool.\n\t  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t  delfiles=\"$delfiles $export_symbols $output_objdir/$libname.filter\"\n\t  export_symbols=$output_objdir/$libname.def\n\t  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\tfi\n\n\ttmp_deplibs=\n\tfor test_deplib in $deplibs; do\n\t  case \" $convenience \" in\n\t  *\" $test_deplib \"*) ;;\n\t  *)\n\t    tmp_deplibs=\"$tmp_deplibs $test_deplib\"\n\t    ;;\n\t  esac\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n\n\tif test -n \"$convenience\"; then\n\t  if test -n \"$whole_archive_flag_spec\" &&\n\t    test \"$compiler_needs_object\" = yes &&\n\t    test -z \"$libobjs\"; then\n\t    # extract the archives, so we have objects to list.\n\t    # TODO: could optimize this to just extract one archive.\n\t    whole_archive_flag_spec=\n\t  fi\n\t  if test -n \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  else\n\t    gentop=\"$output_objdir/${outputname}x\"\n\t    generated=\"$generated $gentop\"\n\n\t    func_extract_archives $gentop $convenience\n\t    libobjs=\"$libobjs $func_extract_archives_result\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\tfi\n\n\tif test \"$thread_safe\" = yes && test -n \"$thread_safe_flag_spec\"; then\n\t  eval flag=\\\"$thread_safe_flag_spec\\\"\n\t  linker_flags=\"$linker_flags $flag\"\n\tfi\n\n\t# Make a backup of the uninstalled library when relinking\n\tif test \"$mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?\n\tfi\n\n\t# Do each of the archive commands.\n\tif test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t  if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$module_expsym_cmds\\\"\n\t    cmds=$module_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$module_cmds\\\"\n\t    cmds=$module_cmds\n\t  fi\n\telse\n\t  if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$archive_expsym_cmds\\\"\n\t    cmds=$archive_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$archive_cmds\\\"\n\t    cmds=$archive_cmds\n\t  fi\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" &&\n\t   func_len \" $test_cmds\" &&\n\t   len=$func_len_result &&\n\t   test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  :\n\telse\n\t  # The command line is too long to link in one step, link piecewise\n\t  # or, if using GNU ld and skipped_export is not :, use a linker\n\t  # script.\n\n\t  # Save the value of $output and $libobjs because we want to\n\t  # use them later.  If we have whole_archive_flag_spec, we\n\t  # want to use save_libobjs as it was before\n\t  # whole_archive_flag_spec was expanded, because we can't\n\t  # assume the linker understands whole_archive_flag_spec.\n\t  # This may have to be revisited, in case too many\n\t  # convenience libraries get linked in and end up exceeding\n\t  # the spec.\n\t  if test -z \"$convenience\" || test -z \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t  fi\n\t  save_output=$output\n\t  output_la=`$ECHO \"X$output\" | $Xsed -e \"$basename\"`\n\n\t  # Clear the reloadable object creation command queue and\n\t  # initialize k to one.\n\t  test_cmds=\n\t  concat_cmds=\n\t  objlist=\n\t  last_robj=\n\t  k=1\n\n\t  if test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"$with_gnu_ld\" = yes; then\n\t    output=${output_objdir}/${output_la}.lnkscript\n\t    func_verbose \"creating GNU ld script: $output\"\n\t    $ECHO 'INPUT (' > $output\n\t    for obj in $save_libobjs\n\t    do\n\t      $ECHO \"$obj\" >> $output\n\t    done\n\t    $ECHO ')' >> $output\n\t    delfiles=\"$delfiles $output\"\n\t  elif test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"X$file_list_spec\" != X; then\n\t    output=${output_objdir}/${output_la}.lnk\n\t    func_verbose \"creating linker input file list: $output\"\n\t    : > $output\n\t    set x $save_libobjs\n\t    shift\n\t    firstobj=\n\t    if test \"$compiler_needs_object\" = yes; then\n\t      firstobj=\"$1 \"\n\t      shift\n\t    fi\n\t    for obj\n\t    do\n\t      $ECHO \"$obj\" >> $output\n\t    done\n\t    delfiles=\"$delfiles $output\"\n\t    output=$firstobj\\\"$file_list_spec$output\\\"\n\t  else\n\t    if test -n \"$save_libobjs\"; then\n\t      func_verbose \"creating reloadable object files...\"\n\t      output=$output_objdir/$output_la-${k}.$objext\n\t      eval test_cmds=\\\"$reload_cmds\\\"\n\t      func_len \" $test_cmds\"\n\t      len0=$func_len_result\n\t      len=$len0\n\n\t      # Loop over the list of objects to be linked.\n\t      for obj in $save_libobjs\n\t      do\n\t\tfunc_len \" $obj\"\n\t\tfunc_arith $len + $func_len_result\n\t\tlen=$func_arith_result\n\t\tif test \"X$objlist\" = X ||\n\t\t   test \"$len\" -lt \"$max_cmd_len\"; then\n\t\t  func_append objlist \" $obj\"\n\t\telse\n\t\t  # The command $test_cmds is almost too long, add a\n\t\t  # command to the queue.\n\t\t  if test \"$k\" -eq 1 ; then\n\t\t    # The first file doesn't have a previous command to add.\n\t\t    eval concat_cmds=\\\"$reload_cmds $objlist $last_robj\\\"\n\t\t  else\n\t\t    # All subsequent reloadable object files will link in\n\t\t    # the last one created.\n\t\t    eval concat_cmds=\\\"\\$concat_cmds~$reload_cmds $objlist $last_robj~\\$RM $last_robj\\\"\n\t\t  fi\n\t\t  last_robj=$output_objdir/$output_la-${k}.$objext\n\t\t  func_arith $k + 1\n\t\t  k=$func_arith_result\n\t\t  output=$output_objdir/$output_la-${k}.$objext\n\t\t  objlist=$obj\n\t\t  func_len \" $last_robj\"\n\t\t  func_arith $len0 + $func_len_result\n\t\t  len=$func_arith_result\n\t\tfi\n\t      done\n\t      # Handle the remaining objects by creating one last\n\t      # reloadable object file.  All subsequent reloadable object\n\t      # files will link in the last one created.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\${concat_cmds}$reload_cmds $objlist $last_robj\\\"\n\t      if test -n \"$last_robj\"; then\n\t        eval concat_cmds=\\\"\\${concat_cmds}~\\$RM $last_robj\\\"\n\t      fi\n\t      delfiles=\"$delfiles $output\"\n\n\t    else\n\t      output=\n\t    fi\n\n\t    if ${skipped_export-false}; then\n\t      func_verbose \"generating symbol list for \\`$libname.la'\"\n\t      export_symbols=\"$output_objdir/$libname.exp\"\n\t      $opt_dry_run || $RM $export_symbols\n\t      libobjs=$output\n\t      # Append the command to create the export file.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\$concat_cmds$export_symbols_cmds\\\"\n\t      if test -n \"$last_robj\"; then\n\t\teval concat_cmds=\\\"\\$concat_cmds~\\$RM $last_robj\\\"\n\t      fi\n\t    fi\n\n\t    test -n \"$save_libobjs\" &&\n\t      func_verbose \"creating a temporary reloadable object file: $output\"\n\n\t    # Loop through the commands generated above and execute them.\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd in $concat_cmds; do\n\t      IFS=\"$save_ifs\"\n\t      $opt_silent || {\n\t\t  func_quote_for_expand \"$cmd\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t      }\n\t      $opt_dry_run || eval \"$cmd\" || {\n\t\tlt_exit=$?\n\n\t\t# Restore the uninstalled library and exit\n\t\tif test \"$mode\" = relink; then\n\t\t  ( cd \"$output_objdir\" && \\\n\t\t    $RM \"${realname}T\" && \\\n\t\t    $MV \"${realname}U\" \"$realname\" )\n\t\tfi\n\n\t\texit $lt_exit\n\t      }\n\t    done\n\t    IFS=\"$save_ifs\"\n\n\t    if test -n \"$export_symbols_regex\" && ${skipped_export-false}; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\n          if ${skipped_export-false}; then\n\t    if test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t      tmp_export_symbols=\"$export_symbols\"\n\t      test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t      $opt_dry_run || eval '$ECHO \"X$include_expsyms\" | $Xsed | $SP2NL >> \"$tmp_export_symbols\"'\n\t    fi\n\n\t    if test -n \"$orig_export_symbols\"; then\n\t      # The given exports_symbols file has to be filtered, so filter it.\n\t      func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t      # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t      # 's' commands which not all seds can handle. GNU sed should be fine\n\t      # though. Also, the filter scales superlinearly with the number of\n\t      # global variables. join(1) would be nice here, but unfortunately\n\t      # isn't a blessed tool.\n\t      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t      delfiles=\"$delfiles $export_symbols $output_objdir/$libname.filter\"\n\t      export_symbols=$output_objdir/$libname.def\n\t      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\t    fi\n\t  fi\n\n\t  libobjs=$output\n\t  # Restore the value of output.\n\t  output=$save_output\n\n\t  if test -n \"$convenience\" && test -n \"$whole_archive_flag_spec\"; then\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\t  # Expand the library linking commands again to reset the\n\t  # value of $libobjs for piecewise linking.\n\n\t  # Do each of the archive commands.\n\t  if test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t    if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t      cmds=$module_expsym_cmds\n\t    else\n\t      cmds=$module_cmds\n\t    fi\n\t  else\n\t    if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t      cmds=$archive_expsym_cmds\n\t    else\n\t      cmds=$archive_cmds\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$delfiles\"; then\n\t  # Append the command to remove temporary files to $cmds.\n\t  eval cmds=\\\"\\$cmds~\\$RM $delfiles\\\"\n\tfi\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  generated=\"$generated $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  libobjs=\"$libobjs $func_extract_archives_result\"\n\t  test \"X$libobjs\" = \"X \" && libobjs=\n\tfi\n\n\tsave_ifs=\"$IFS\"; IFS='~'\n\tfor cmd in $cmds; do\n\t  IFS=\"$save_ifs\"\n\t  eval cmd=\\\"$cmd\\\"\n\t  $opt_silent || {\n\t    func_quote_for_expand \"$cmd\"\n\t    eval \"func_echo $func_quote_for_expand_result\"\n\t  }\n\t  $opt_dry_run || eval \"$cmd\" || {\n\t    lt_exit=$?\n\n\t    # Restore the uninstalled library and exit\n\t    if test \"$mode\" = relink; then\n\t      ( cd \"$output_objdir\" && \\\n\t        $RM \"${realname}T\" && \\\n\t\t$MV \"${realname}U\" \"$realname\" )\n\t    fi\n\n\t    exit $lt_exit\n\t  }\n\tdone\n\tIFS=\"$save_ifs\"\n\n\t# Restore the uninstalled library and exit\n\tif test \"$mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?\n\n\t  if test -n \"$convenience\"; then\n\t    if test -z \"$whole_archive_flag_spec\"; then\n\t      func_show_eval '${RM}r \"$gentop\"'\n\t    fi\n\t  fi\n\n\t  exit $EXIT_SUCCESS\n\tfi\n\n\t# Create links to the real library.\n\tfor linkname in $linknames; do\n\t  if test \"$realname\" != \"$linkname\"; then\n\t    func_show_eval '(cd \"$output_objdir\" && $RM \"$linkname\" && $LN_S \"$realname\" \"$linkname\")' 'exit $?'\n\t  fi\n\tdone\n\n\t# If -module or -export-dynamic was specified, set the dlname.\n\tif test \"$module\" = yes || test \"$export_dynamic\" = yes; then\n\t  # On all known operating systems, these are identical.\n\t  dlname=\"$soname\"\n\tfi\n      fi\n      ;;\n\n    obj)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for objects\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for objects\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for objects\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for objects\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for objects\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for objects\"\n\n      case $output in\n      *.lo)\n\ttest -n \"$objs$old_deplibs\" && \\\n\t  func_fatal_error \"cannot build library object \\`$output' from non-libtool objects\"\n\n\tlibobj=$output\n\tfunc_lo2o \"$libobj\"\n\tobj=$func_lo2o_result\n\t;;\n      *)\n\tlibobj=\n\tobj=\"$output\"\n\t;;\n      esac\n\n      # Delete the old objects.\n      $opt_dry_run || $RM $obj $libobj\n\n      # Objects from convenience libraries.  This assumes\n      # single-version convenience libraries.  Whenever we create\n      # different ones for PIC/non-PIC, this we'll have to duplicate\n      # the extraction.\n      reload_conv_objs=\n      gentop=\n      # reload_cmds runs $LD directly, so let us get rid of\n      # -Wl from whole_archive_flag_spec and hope we can get by with\n      # turning comma into space..\n      wl=\n\n      if test -n \"$convenience\"; then\n\tif test -n \"$whole_archive_flag_spec\"; then\n\t  eval tmp_whole_archive_flags=\\\"$whole_archive_flag_spec\\\"\n\t  reload_conv_objs=$reload_objs\\ `$ECHO \"X$tmp_whole_archive_flags\" | $Xsed -e 's|,| |g'`\n\telse\n\t  gentop=\"$output_objdir/${obj}x\"\n\t  generated=\"$generated $gentop\"\n\n\t  func_extract_archives $gentop $convenience\n\t  reload_conv_objs=\"$reload_objs $func_extract_archives_result\"\n\tfi\n      fi\n\n      # Create the old-style object.\n      reload_objs=\"$objs$old_deplibs \"`$ECHO \"X$libobjs\" | $SP2NL | $Xsed -e '/\\.'${libext}$'/d' -e '/\\.lib$/d' -e \"$lo2o\" | $NL2SP`\" $reload_conv_objs\" ### testsuite: skip nested quoting test\n\n      output=\"$obj\"\n      func_execute_cmds \"$reload_cmds\" 'exit $?'\n\n      # Exit if we aren't doing a library object file.\n      if test -z \"$libobj\"; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$build_libtool_libs\" != yes; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\t# Create an invalid libtool object if no PIC, so that we don't\n\t# accidentally link it into a program.\n\t# $show \"echo timestamp > $libobj\"\n\t# $opt_dry_run || eval \"echo timestamp > $libobj\" || exit $?\n\texit $EXIT_SUCCESS\n      fi\n\n      if test -n \"$pic_flag\" || test \"$pic_mode\" != default; then\n\t# Only do commands if we really have different PIC objects.\n\treload_objs=\"$libobjs $reload_conv_objs\"\n\toutput=\"$libobj\"\n\tfunc_execute_cmds \"$reload_cmds\" 'exit $?'\n      fi\n\n      if test -n \"$gentop\"; then\n\tfunc_show_eval '${RM}r \"$gentop\"'\n      fi\n\n      exit $EXIT_SUCCESS\n      ;;\n\n    prog)\n      case $host in\n\t*cygwin*) func_stripname '' '.exe' \"$output\"\n\t          output=$func_stripname_result.exe;;\n      esac\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for programs\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for programs\"\n\n      test \"$preload\" = yes \\\n        && test \"$dlopen_support\" = unknown \\\n\t&& test \"$dlopen_self\" = unknown \\\n\t&& test \"$dlopen_self_static\" = unknown && \\\n\t  func_warning \"\\`LT_INIT([dlopen])' not used. Assuming no dlopen support.\"\n\n      case $host in\n      *-*-rhapsody* | *-*-darwin1.[012])\n\t# On Rhapsody replace the C library is the System framework\n\tcompile_deplibs=`$ECHO \"X $compile_deplibs\" | $Xsed -e 's/ -lc / System.ltframework /'`\n\tfinalize_deplibs=`$ECHO \"X $finalize_deplibs\" | $Xsed -e 's/ -lc / System.ltframework /'`\n\t;;\n      esac\n\n      case $host in\n      *-*-darwin*)\n\t# Don't allow lazy linking, it breaks C++ global constructors\n\t# But is supposedly fixed on 10.4 or later (yay!).\n\tif test \"$tagname\" = CXX ; then\n\t  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in\n\t    10.[0123])\n\t      compile_command=\"$compile_command ${wl}-bind_at_load\"\n\t      finalize_command=\"$finalize_command ${wl}-bind_at_load\"\n\t    ;;\n\t  esac\n\tfi\n\t# Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n\tcompile_deplibs=`$ECHO \"X $compile_deplibs\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfinalize_deplibs=`$ECHO \"X $finalize_deplibs\" | $Xsed -e 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t;;\n      esac\n\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $compile_deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    new_libs=\"$new_libs -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $compile_deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) new_libs=\"$new_libs $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) new_libs=\"$new_libs $deplib\" ;;\n\tesac\n      done\n      compile_deplibs=\"$new_libs\"\n\n\n      compile_command=\"$compile_command $compile_deplibs\"\n      finalize_command=\"$finalize_command $finalize_deplibs\"\n\n      if test -n \"$rpath$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\tfor libdir in $rpath $xrpath; do\n\t  # This is the magic to use -rpath.\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) finalize_rpath=\"$finalize_rpath $libdir\" ;;\n\t  esac\n\tdone\n      fi\n\n      # Now hardcode the library paths\n      rpath=\n      hardcode_libdirs=\n      for libdir in $compile_rpath $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\thardcode_libdirs=\"$hardcode_libdirs$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    rpath=\"$rpath $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) perm_rpath=\"$perm_rpath $libdir\" ;;\n\t  esac\n\tfi\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`${ECHO} \"$libdir\" | ${SED} -e 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$libdir:\"*) ;;\n\t  ::) dllsearchpath=$libdir;;\n\t  *) dllsearchpath=\"$dllsearchpath:$libdir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) dllsearchpath=\"$dllsearchpath:$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      compile_rpath=\"$rpath\"\n\n      rpath=\n      hardcode_libdirs=\n      for libdir in $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\thardcode_libdirs=\"$hardcode_libdirs$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    rpath=\"$rpath $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$finalize_perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) finalize_perm_rpath=\"$finalize_perm_rpath $libdir\" ;;\n\t  esac\n\tfi\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      finalize_rpath=\"$rpath\"\n\n      if test -n \"$libobjs\" && test \"$build_old_libs\" = yes; then\n\t# Transform all the library objects into standard objects.\n\tcompile_command=`$ECHO \"X$compile_command\" | $SP2NL | $Xsed -e \"$lo2o\" | $NL2SP`\n\tfinalize_command=`$ECHO \"X$finalize_command\" | $SP2NL | $Xsed -e \"$lo2o\" | $NL2SP`\n      fi\n\n      func_generate_dlsyms \"$outputname\" \"@PROGRAM@\" \"no\"\n\n      # template prelinking step\n      if test -n \"$prelink_cmds\"; then\n\tfunc_execute_cmds \"$prelink_cmds\" 'exit $?'\n      fi\n\n      wrappers_required=yes\n      case $host in\n      *cygwin* | *mingw* )\n        if test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      *cegcc)\n        # Disable wrappers for cegcc, we are cross compiling anyway.\n        wrappers_required=no\n        ;;\n      *)\n        if test \"$need_relink\" = no || test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      esac\n      if test \"$wrappers_required\" = no; then\n\t# Replace the output file specification.\n\tcompile_command=`$ECHO \"X$compile_command\" | $Xsed -e 's%@OUTPUT@%'\"$output\"'%g'`\n\tlink_command=\"$compile_command$compile_rpath\"\n\n\t# We have no uninstalled library dependencies, so finalize right now.\n\texit_status=0\n\tfunc_show_eval \"$link_command\" 'exit_status=$?'\n\n\t# Delete the generated files.\n\tif test -f \"$output_objdir/${outputname}S.${objext}\"; then\n\t  func_show_eval '$RM \"$output_objdir/${outputname}S.${objext}\"'\n\tfi\n\n\texit $exit_status\n      fi\n\n      if test -n \"$compile_shlibpath$finalize_shlibpath\"; then\n\tcompile_command=\"$shlibpath_var=\\\"$compile_shlibpath$finalize_shlibpath\\$$shlibpath_var\\\" $compile_command\"\n      fi\n      if test -n \"$finalize_shlibpath\"; then\n\tfinalize_command=\"$shlibpath_var=\\\"$finalize_shlibpath\\$$shlibpath_var\\\" $finalize_command\"\n      fi\n\n      compile_var=\n      finalize_var=\n      if test -n \"$runpath_var\"; then\n\tif test -n \"$perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $perm_rpath; do\n\t    rpath=\"$rpath$dir:\"\n\t  done\n\t  compile_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n\tif test -n \"$finalize_perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $finalize_perm_rpath; do\n\t    rpath=\"$rpath$dir:\"\n\t  done\n\t  finalize_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n      fi\n\n      if test \"$no_install\" = yes; then\n\t# We don't need to create a wrapper script.\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\t# Replace the output file specification.\n\tlink_command=`$ECHO \"X$link_command\" | $Xsed -e 's%@OUTPUT@%'\"$output\"'%g'`\n\t# Delete the old output file.\n\t$opt_dry_run || $RM $output\n\t# Link the executable and exit\n\tfunc_show_eval \"$link_command\" 'exit $?'\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$hardcode_action\" = relink; then\n\t# Fast installation is not supported\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\trelink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\n\tfunc_warning \"this platform does not like uninstalled shared libraries\"\n\tfunc_warning \"\\`$output' will be relinked during installation\"\n      else\n\tif test \"$fast_install\" != no; then\n\t  link_command=\"$finalize_var$compile_command$finalize_rpath\"\n\t  if test \"$fast_install\" = yes; then\n\t    relink_command=`$ECHO \"X$compile_var$compile_command$compile_rpath\" | $Xsed -e 's%@OUTPUT@%\\$progdir/\\$file%g'`\n\t  else\n\t    # fast_install is set to needless\n\t    relink_command=\n\t  fi\n\telse\n\t  link_command=\"$compile_var$compile_command$compile_rpath\"\n\t  relink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\tfi\n      fi\n\n      # Replace the output file specification.\n      link_command=`$ECHO \"X$link_command\" | $Xsed -e 's%@OUTPUT@%'\"$output_objdir/$outputname\"'%g'`\n\n      # Delete the old output files.\n      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname\n\n      func_show_eval \"$link_command\" 'exit $?'\n\n      # Now create the wrapper script.\n      func_verbose \"creating $output\"\n\n      # Quote the relink command for shipping.\n      if test -n \"$relink_command\"; then\n\t# Preserve any variables that may affect compiler behavior\n\tfor var in $variables_saved_for_relink; do\n\t  if eval test -z \\\"\\${$var+set}\\\"; then\n\t    relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\t  elif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t    relink_command=\"$var=; export $var; $relink_command\"\n\t  else\n\t    func_quote_for_eval \"$var_value\"\n\t    relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\t  fi\n\tdone\n\trelink_command=\"(cd `pwd`; $relink_command)\"\n\trelink_command=`$ECHO \"X$relink_command\" | $Xsed -e \"$sed_quote_subst\"`\n      fi\n\n      # Quote $ECHO for shipping.\n      if test \"X$ECHO\" = \"X$SHELL $progpath --fallback-echo\"; then\n\tcase $progpath in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) qecho=\"$SHELL $progpath --fallback-echo\";;\n\t*) qecho=\"$SHELL `pwd`/$progpath --fallback-echo\";;\n\tesac\n\tqecho=`$ECHO \"X$qecho\" | $Xsed -e \"$sed_quote_subst\"`\n      else\n\tqecho=`$ECHO \"X$ECHO\" | $Xsed -e \"$sed_quote_subst\"`\n      fi\n\n      # Only actually do things if not in dry run mode.\n      $opt_dry_run || {\n\t# win32 will think the script is a binary if it has\n\t# a .exe suffix, so we strip it off here.\n\tcase $output in\n\t  *.exe) func_stripname '' '.exe' \"$output\"\n\t         output=$func_stripname_result ;;\n\tesac\n\t# test for cygwin because mv fails w/o .exe extensions\n\tcase $host in\n\t  *cygwin*)\n\t    exeext=.exe\n\t    func_stripname '' '.exe' \"$outputname\"\n\t    outputname=$func_stripname_result ;;\n\t  *) exeext= ;;\n\tesac\n\tcase $host in\n\t  *cygwin* | *mingw* )\n\t    func_dirname_and_basename \"$output\" \"\" \".\"\n\t    output_name=$func_basename_result\n\t    output_path=$func_dirname_result\n\t    cwrappersource=\"$output_path/$objdir/lt-$output_name.c\"\n\t    cwrapper=\"$output_path/$output_name.exe\"\n\t    $RM $cwrappersource $cwrapper\n\t    trap \"$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_cwrapperexe_src > $cwrappersource\n\n\t    # The wrapper executable is built using the $host compiler,\n\t    # because it contains $host paths and files. If cross-\n\t    # compiling, it, like the target executable, must be\n\t    # executed on the $host or under an emulation environment.\n\t    $opt_dry_run || {\n\t      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource\n\t      $STRIP $cwrapper\n\t    }\n\n\t    # Now, create the wrapper script for func_source use:\n\t    func_ltwrapper_scriptname $cwrapper\n\t    $RM $func_ltwrapper_scriptname_result\n\t    trap \"$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE\" 1 2 15\n\t    $opt_dry_run || {\n\t      # note: this script will not be executed, so do not chmod.\n\t      if test \"x$build\" = \"x$host\" ; then\n\t\t$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result\n\t      else\n\t\tfunc_emit_wrapper no > $func_ltwrapper_scriptname_result\n\t      fi\n\t    }\n\t  ;;\n\t  * )\n\t    $RM $output\n\t    trap \"$RM $output; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_wrapper no > $output\n\t    chmod +x $output\n\t  ;;\n\tesac\n      }\n      exit $EXIT_SUCCESS\n      ;;\n    esac\n\n    # See if we need to build an old-fashioned archive.\n    for oldlib in $oldlibs; do\n\n      if test \"$build_libtool_libs\" = convenience; then\n\toldobjs=\"$libobjs_save $symfileobj\"\n\taddlibs=\"$convenience\"\n\tbuild_libtool_libs=no\n      else\n\tif test \"$build_libtool_libs\" = module; then\n\t  oldobjs=\"$libobjs_save\"\n\t  build_libtool_libs=no\n\telse\n\t  oldobjs=\"$old_deplibs $non_pic_objects\"\n\t  if test \"$preload\" = yes && test -f \"$symfileobj\"; then\n\t    oldobjs=\"$oldobjs $symfileobj\"\n\t  fi\n\tfi\n\taddlibs=\"$old_convenience\"\n      fi\n\n      if test -n \"$addlibs\"; then\n\tgentop=\"$output_objdir/${outputname}x\"\n\tgenerated=\"$generated $gentop\"\n\n\tfunc_extract_archives $gentop $addlibs\n\toldobjs=\"$oldobjs $func_extract_archives_result\"\n      fi\n\n      # Do each command in the archive commands.\n      if test -n \"$old_archive_from_new_cmds\" && test \"$build_libtool_libs\" = yes; then\n\tcmds=$old_archive_from_new_cmds\n      else\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  generated=\"$generated $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  oldobjs=\"$oldobjs $func_extract_archives_result\"\n\tfi\n\n\t# POSIX demands no paths to be encoded in archives.  We have\n\t# to avoid creating archives with duplicate basenames if we\n\t# might have to extract them afterwards, e.g., when creating a\n\t# static archive out of a convenience library, or when linking\n\t# the entirety of a libtool archive into another (currently\n\t# not supported by libtool).\n\tif (for obj in $oldobjs\n\t    do\n\t      func_basename \"$obj\"\n\t      $ECHO \"$func_basename_result\"\n\t    done | sort | sort -uc >/dev/null 2>&1); then\n\t  :\n\telse\n\t  $ECHO \"copying selected object files to avoid basename conflicts...\"\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  generated=\"$generated $gentop\"\n\t  func_mkdir_p \"$gentop\"\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  counter=1\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_basename \"$obj\"\n\t    objbase=\"$func_basename_result\"\n\t    case \" $oldobjs \" in\n\t    \" \") oldobjs=$obj ;;\n\t    *[\\ /]\"$objbase \"*)\n\t      while :; do\n\t\t# Make sure we don't pick an alternate name that also\n\t\t# overlaps.\n\t\tnewobj=lt$counter-$objbase\n\t\tfunc_arith $counter + 1\n\t\tcounter=$func_arith_result\n\t\tcase \" $oldobjs \" in\n\t\t*[\\ /]\"$newobj \"*) ;;\n\t\t*) if test ! -f \"$gentop/$newobj\"; then break; fi ;;\n\t\tesac\n\t      done\n\t      func_show_eval \"ln $obj $gentop/$newobj || cp $obj $gentop/$newobj\"\n\t      oldobjs=\"$oldobjs $gentop/$newobj\"\n\t      ;;\n\t    *) oldobjs=\"$oldobjs $obj\" ;;\n\t    esac\n\t  done\n\tfi\n\teval cmds=\\\"$old_archive_cmds\\\"\n\n\tfunc_len \" $cmds\"\n\tlen=$func_len_result\n\tif test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  cmds=$old_archive_cmds\n\telse\n\t  # the command line is too long to link in one step, link in parts\n\t  func_verbose \"using piecewise archive linking...\"\n\t  save_RANLIB=$RANLIB\n\t  RANLIB=:\n\t  objlist=\n\t  concat_cmds=\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  # Is there a better way of finding the last object in the list?\n\t  for obj in $save_oldobjs\n\t  do\n\t    last_oldobj=$obj\n\t  done\n\t  eval test_cmds=\\\"$old_archive_cmds\\\"\n\t  func_len \" $test_cmds\"\n\t  len0=$func_len_result\n\t  len=$len0\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_len \" $obj\"\n\t    func_arith $len + $func_len_result\n\t    len=$func_arith_result\n\t    func_append objlist \" $obj\"\n\t    if test \"$len\" -lt \"$max_cmd_len\"; then\n\t      :\n\t    else\n\t      # the above command should be used before it gets too long\n\t      oldobjs=$objlist\n\t      if test \"$obj\" = \"$last_oldobj\" ; then\n\t\tRANLIB=$save_RANLIB\n\t      fi\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\${concat_cmds}$old_archive_cmds\\\"\n\t      objlist=\n\t      len=$len0\n\t    fi\n\t  done\n\t  RANLIB=$save_RANLIB\n\t  oldobjs=$objlist\n\t  if test \"X$oldobjs\" = \"X\" ; then\n\t    eval cmds=\\\"\\$concat_cmds\\\"\n\t  else\n\t    eval cmds=\\\"\\$concat_cmds~\\$old_archive_cmds\\\"\n\t  fi\n\tfi\n      fi\n      func_execute_cmds \"$cmds\" 'exit $?'\n    done\n\n    test -n \"$generated\" && \\\n      func_show_eval \"${RM}r$generated\"\n\n    # Now create the libtool archive.\n    case $output in\n    *.la)\n      old_library=\n      test \"$build_old_libs\" = yes && old_library=\"$libname.$libext\"\n      func_verbose \"creating $output\"\n\n      # Preserve any variables that may affect compiler behavior\n      for var in $variables_saved_for_relink; do\n\tif eval test -z \\\"\\${$var+set}\\\"; then\n\t  relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\telif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t  relink_command=\"$var=; export $var; $relink_command\"\n\telse\n\t  func_quote_for_eval \"$var_value\"\n\t  relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\tfi\n      done\n      # Quote the link command for shipping.\n      relink_command=\"(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)\"\n      relink_command=`$ECHO \"X$relink_command\" | $Xsed -e \"$sed_quote_subst\"`\n      if test \"$hardcode_automatic\" = yes ; then\n\trelink_command=\n      fi\n\n      # Only create the output if not a dry run.\n      $opt_dry_run || {\n\tfor installed in no yes; do\n\t  if test \"$installed\" = yes; then\n\t    if test -z \"$install_libdir\"; then\n\t      break\n\t    fi\n\t    output=\"$output_objdir/$outputname\"i\n\t    # Replace all uninstalled libtool libraries with the installed ones\n\t    newdependency_libs=\n\t    for deplib in $dependency_libs; do\n\t      case $deplib in\n\t      *.la)\n\t\tfunc_basename \"$deplib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $deplib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\tnewdependency_libs=\"$newdependency_libs $libdir/$name\"\n\t\t;;\n\t      *) newdependency_libs=\"$newdependency_libs $deplib\" ;;\n\t      esac\n\t    done\n\t    dependency_libs=\"$newdependency_libs\"\n\t    newdlfiles=\n\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t      *.la)\n\t        func_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tnewdlfiles=\"$newdlfiles $libdir/$name\"\n\t\t;;\n\t      *) newdlfiles=\"$newdlfiles $lib\" ;;\n\t      esac\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t      *.la)\n\t\t# Only pass preopened files to the pseudo-archive (for\n\t\t# eventual linking with the app. that links it) if we\n\t\t# didn't already link the preopened objects directly into\n\t\t# the library:\n\t\tfunc_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tnewdlprefiles=\"$newdlprefiles $libdir/$name\"\n\t\t;;\n\t      esac\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  else\n\t    newdlfiles=\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      newdlfiles=\"$newdlfiles $abs\"\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      newdlprefiles=\"$newdlprefiles $abs\"\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  fi\n\t  $RM $output\n\t  # place dlname in correct position for cygwin\n\t  tdlname=$dlname\n\t  case $host,$output,$installed,$module,$dlname in\n\t    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;\n\t  esac\n\t  $ECHO > $output \"\\\n# $outputname - a libtool library file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# The name that we can dlopen(3).\ndlname='$tdlname'\n\n# Names of this library.\nlibrary_names='$library_names'\n\n# The name of the static archive.\nold_library='$old_library'\n\n# Linker flags that can not go in dependency_libs.\ninherited_linker_flags='$new_inherited_linker_flags'\n\n# Libraries that this one depends upon.\ndependency_libs='$dependency_libs'\n\n# Names of additional weak libraries provided by this library\nweak_library_names='$weak_libs'\n\n# Version information for $libname.\ncurrent=$current\nage=$age\nrevision=$revision\n\n# Is this an already installed library?\ninstalled=$installed\n\n# Should we warn about portability when linking against -modules?\nshouldnotlink=$module\n\n# Files to dlopen/dlpreopen\ndlopen='$dlfiles'\ndlpreopen='$dlprefiles'\n\n# Directory that this library needs to be installed in:\nlibdir='$install_libdir'\"\n\t  if test \"$installed\" = no && test \"$need_relink\" = yes; then\n\t    $ECHO >> $output \"\\\nrelink_command=\\\"$relink_command\\\"\"\n\t  fi\n\tdone\n      }\n\n      # Do a symbolic link so that the libtool archive can be found in\n      # LD_LIBRARY_PATH before the program is installed.\n      func_show_eval '( cd \"$output_objdir\" && $RM \"$outputname\" && $LN_S \"../$outputname\" \"$outputname\" )' 'exit $?'\n      ;;\n    esac\n    exit $EXIT_SUCCESS\n}\n\n{ test \"$mode\" = link || test \"$mode\" = relink; } &&\n    func_mode_link ${1+\"$@\"}\n\n\n# func_mode_uninstall arg...\nfunc_mode_uninstall ()\n{\n    $opt_debug\n    RM=\"$nonopt\"\n    files=\n    rmforce=\n    exit_status=0\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    for arg\n    do\n      case $arg in\n      -f) RM=\"$RM $arg\"; rmforce=yes ;;\n      -*) RM=\"$RM $arg\" ;;\n      *) files=\"$files $arg\" ;;\n      esac\n    done\n\n    test -z \"$RM\" && \\\n      func_fatal_help \"you must specify an RM program\"\n\n    rmdirs=\n\n    origobjdir=\"$objdir\"\n    for file in $files; do\n      func_dirname \"$file\" \"\" \".\"\n      dir=\"$func_dirname_result\"\n      if test \"X$dir\" = X.; then\n\tobjdir=\"$origobjdir\"\n      else\n\tobjdir=\"$dir/$origobjdir\"\n      fi\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n      test \"$mode\" = uninstall && objdir=\"$dir\"\n\n      # Remember objdir for removal later, being careful to avoid duplicates\n      if test \"$mode\" = clean; then\n\tcase \" $rmdirs \" in\n\t  *\" $objdir \"*) ;;\n\t  *) rmdirs=\"$rmdirs $objdir\" ;;\n\tesac\n      fi\n\n      # Don't error if the file doesn't exist and rm -f was used.\n      if { test -L \"$file\"; } >/dev/null 2>&1 ||\n\t { test -h \"$file\"; } >/dev/null 2>&1 ||\n\t test -f \"$file\"; then\n\t:\n      elif test -d \"$file\"; then\n\texit_status=1\n\tcontinue\n      elif test \"$rmforce\" = yes; then\n\tcontinue\n      fi\n\n      rmfiles=\"$file\"\n\n      case $name in\n      *.la)\n\t# Possibly a libtool archive, so verify it.\n\tif func_lalib_p \"$file\"; then\n\t  func_source $dir/$name\n\n\t  # Delete the libtool libraries and symlinks.\n\t  for n in $library_names; do\n\t    rmfiles=\"$rmfiles $objdir/$n\"\n\t  done\n\t  test -n \"$old_library\" && rmfiles=\"$rmfiles $objdir/$old_library\"\n\n\t  case \"$mode\" in\n\t  clean)\n\t    case \"  $library_names \" in\n\t    # \"  \" in the beginning catches empty $dlname\n\t    *\" $dlname \"*) ;;\n\t    *) rmfiles=\"$rmfiles $objdir/$dlname\" ;;\n\t    esac\n\t    test -n \"$libdir\" && rmfiles=\"$rmfiles $objdir/$name $objdir/${name}i\"\n\t    ;;\n\t  uninstall)\n\t    if test -n \"$library_names\"; then\n\t      # Do each command in the postuninstall commands.\n\t      func_execute_cmds \"$postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\n\t    if test -n \"$old_library\"; then\n\t      # Do each command in the old_postuninstall commands.\n\t      func_execute_cmds \"$old_postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\t    # FIXME: should reinstall the best remaining shared library.\n\t    ;;\n\t  esac\n\tfi\n\t;;\n\n      *.lo)\n\t# Possibly a libtool object, so verify it.\n\tif func_lalib_p \"$file\"; then\n\n\t  # Read the .lo file\n\t  func_source $dir/$name\n\n\t  # Add PIC object to the list of files to remove.\n\t  if test -n \"$pic_object\" &&\n\t     test \"$pic_object\" != none; then\n\t    rmfiles=\"$rmfiles $dir/$pic_object\"\n\t  fi\n\n\t  # Add non-PIC object to the list of files to remove.\n\t  if test -n \"$non_pic_object\" &&\n\t     test \"$non_pic_object\" != none; then\n\t    rmfiles=\"$rmfiles $dir/$non_pic_object\"\n\t  fi\n\tfi\n\t;;\n\n      *)\n\tif test \"$mode\" = clean ; then\n\t  noexename=$name\n\t  case $file in\n\t  *.exe)\n\t    func_stripname '' '.exe' \"$file\"\n\t    file=$func_stripname_result\n\t    func_stripname '' '.exe' \"$name\"\n\t    noexename=$func_stripname_result\n\t    # $file with .exe has already been added to rmfiles,\n\t    # add $file without .exe\n\t    rmfiles=\"$rmfiles $file\"\n\t    ;;\n\t  esac\n\t  # Do a test to see if this is a libtool program.\n\t  if func_ltwrapper_p \"$file\"; then\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      relink_command=\n\t      func_source $func_ltwrapper_scriptname_result\n\t      rmfiles=\"$rmfiles $func_ltwrapper_scriptname_result\"\n\t    else\n\t      relink_command=\n\t      func_source $dir/$noexename\n\t    fi\n\n\t    # note $name still contains .exe if it was in $file originally\n\t    # as does the version of $file that was added into $rmfiles\n\t    rmfiles=\"$rmfiles $objdir/$name $objdir/${name}S.${objext}\"\n\t    if test \"$fast_install\" = yes && test -n \"$relink_command\"; then\n\t      rmfiles=\"$rmfiles $objdir/lt-$name\"\n\t    fi\n\t    if test \"X$noexename\" != \"X$name\" ; then\n\t      rmfiles=\"$rmfiles $objdir/lt-${noexename}.c\"\n\t    fi\n\t  fi\n\tfi\n\t;;\n      esac\n      func_show_eval \"$RM $rmfiles\" 'exit_status=1'\n    done\n    objdir=\"$origobjdir\"\n\n    # Try to remove the ${objdir}s in the directories where we deleted files\n    for dir in $rmdirs; do\n      if test -d \"$dir\"; then\n\tfunc_show_eval \"rmdir $dir >/dev/null 2>&1\"\n      fi\n    done\n\n    exit $exit_status\n}\n\n{ test \"$mode\" = uninstall || test \"$mode\" = clean; } &&\n    func_mode_uninstall ${1+\"$@\"}\n\ntest -z \"$mode\" && {\n  help=\"$generic_help\"\n  func_fatal_help \"you must specify a MODE\"\n}\n\ntest -z \"$exec_cmd\" && \\\n  func_fatal_help \"invalid operation mode \\`$mode'\"\n\nif test -n \"$exec_cmd\"; then\n  eval exec \"$exec_cmd\"\n  exit $EXIT_FAILURE\nfi\n\nexit $exit_status\n\n\n# The TAGs below are defined such that we never get into a situation\n# in which we disable both kinds of libraries.  Given conflicting\n# choices, we go for a static library, that is the most portable,\n# since we can't tell whether shared libraries were disabled because\n# the user asked for that or because the platform doesn't support\n# them.  This is particularly important on AIX, because we don't\n# support having both static and shared libraries enabled at the same\n# time on that platform, so we default to a shared-only configuration.\n# If a disable-shared tag is given, we'll fallback to a static-only\n# configuration.  But we'll never go from static-only to shared-only.\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-shared\nbuild_libtool_libs=no\nbuild_old_libs=yes\n# ### END LIBTOOL TAG CONFIG: disable-shared\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-static\nbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`\n# ### END LIBTOOL TAG CONFIG: disable-static\n\n# Local Variables:\n# mode:shell-script\n# sh-indentation:2\n# End:\n# vi:sw=2\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config/missing",
    "content": "#! /bin/sh\n# Common stub for a few missing GNU programs while installing.\n\nscriptversion=2009-04-28.21; # UTC\n\n# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,\n# 2008, 2009 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, see <http://www.gnu.org/licenses/>.\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=:\nsed_output='s/.* --output[ =]\\([^ ]*\\).*/\\1/p'\nsed_minuso='s/.* -o \\([^ ]*\\).*/\\1/p'\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  autom4te     touch the output file, or create a stub one\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\nVersion suffixes to PROGRAM as well as the prefixes \\`gnu-', \\`gnu', and\n\\`g' are ignored when checking the name.\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# normalize program name to check for.\nprogram=`echo \"$1\" | sed '\n  s/^gnu-//; t\n  s/^gnu//; t\n  s/^g//; t'`\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).  This is about non-GNU programs, so use $1 not\n# $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 $program 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 \"$sed_output\"`\n    test -z \"$file\" && file=`echo \"$*\" | sed -n \"$sed_minuso\"`\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 test $# -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 test -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 test -f \"$SRCFILE\"; then\n\t         cp \"$SRCFILE\" y.tab.h\n\t    fi\n\t  ;;\n\tesac\n    fi\n    if test ! -f y.tab.h; then\n\techo >y.tab.h\n    fi\n    if test ! -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 test $# -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 test -f \"$SRCFILE\"; then\n\t         cp \"$SRCFILE\" lex.yy.c\n\t    fi\n\t  ;;\n\tesac\n    fi\n    if test ! -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 \"$sed_output\"`\n    test -z \"$file\" && file=`echo \"$*\" | sed -n \"$sed_minuso\"`\n    if test -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 $?\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 \"$sed_output\"`\n    test -z \"$file\" && file=`echo \"$*\" | sed -n \"$sed_minuso\"`\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 '\n\t/^@setfilename/{\n\t  s/.* \\([^ ]*\\) *$/\\1/\n\t  p\n\t  q\n\t}' $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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config.h",
    "content": "/* config.h.  Generated from config.h.in by configure.  */\n/* config.h.in.  Generated from configure.ac by autoheader.  */\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/stat.h> header file. */\n#define HAVE_SYS_STAT_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 <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#define LT_OBJDIR \".libs/\"\n\n/* Name of package */\n#define PACKAGE \"yaml\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"http://pyyaml.org/newticket?component=libyaml\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"yaml\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"yaml 0.1.4\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"yaml\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"0.1.4\"\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* Version number of package */\n#define VERSION \"0.1.4\"\n\n/* Define the major version number. */\n#define YAML_VERSION_MAJOR 0\n\n/* Define the minor version number. */\n#define YAML_VERSION_MINOR 1\n\n/* Define the patch version number. */\n#define YAML_VERSION_PATCH 4\n\n/* Define the version string. */\n#define YAML_VERSION_STRING \"0.1.4\"\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n/* #undef size_t */\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/config.h.in",
    "content": "/* config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#undef HAVE_DLFCN_H\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 <memory.h> header file. */\n#undef HAVE_MEMORY_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 <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 <sys/stat.h> header file. */\n#undef HAVE_SYS_STAT_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 <unistd.h> header file. */\n#undef HAVE_UNISTD_H\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#undef LT_OBJDIR\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 you have the ANSI C header files. */\n#undef STDC_HEADERS\n\n/* Version number of package */\n#undef VERSION\n\n/* Define the major version number. */\n#undef YAML_VERSION_MAJOR\n\n/* Define the minor version number. */\n#undef YAML_VERSION_MINOR\n\n/* Define the patch version number. */\n#undef YAML_VERSION_PATCH\n\n/* Define the version string. */\n#undef YAML_VERSION_STRING\n\n/* Define to empty if `const' does not conform to ANSI C. */\n#undef const\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n#undef size_t\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/configure",
    "content": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.67 for yaml 0.1.4.\n#\n# Report bugs to <http://pyyaml.org/newticket?component=libyaml>.\n#\n#\n# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,\n# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software\n# Foundation, 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 http://pyyaml.org/newticket?component=libyaml about\n$0: your system, including any error possibly output before\n$0: this message. Then install a modern shell, or manually\n$0: run the script under such a shell if you do 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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\n\n# Check that we are running under the correct shell.\nSHELL=${CONFIG_SHELL-/bin/sh}\n\ncase X$lt_ECHO in\nX*--fallback-echo)\n  # Remove one level of quotation (which was required for Make).\n  ECHO=`echo \"$lt_ECHO\" | sed 's,\\\\\\\\\\$\\\\$0,'$0','`\n  ;;\nesac\n\nECHO=${lt_ECHO-echo}\nif test \"X$1\" = X--no-reexec; then\n  # Discard the --no-reexec flag, and continue.\n  shift\nelif test \"X$1\" = X--fallback-echo; then\n  # Avoid inline document here, it may be left over\n  :\nelif test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' ; then\n  # Yippee, $ECHO works!\n  :\nelse\n  # Restart under the correct shell.\n  exec $SHELL \"$0\" --no-reexec ${1+\"$@\"}\nfi\n\nif test \"X$1\" = X--fallback-echo; then\n  # used as fallback echo\n  shift\n  cat <<_LT_EOF\n$*\n_LT_EOF\n  exit 0\nfi\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nif test -z \"$lt_ECHO\"; then\n  if test \"X${echo_test_string+set}\" != Xset; then\n    # find a string as large as possible, as long as the shell can cope with it\n    for cmd in 'sed 50q \"$0\"' 'sed 20q \"$0\"' 'sed 10q \"$0\"' 'sed 2q \"$0\"' 'echo test'; do\n      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...\n      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&\n\t { test \"X$echo_test_string\" = \"X$echo_test_string\"; } 2>/dev/null\n      then\n        break\n      fi\n    done\n  fi\n\n  if test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n     echo_testing_string=`{ $ECHO \"$echo_test_string\"; } 2>/dev/null` &&\n     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n    :\n  else\n    # The Solaris, AIX, and Digital Unix default echo programs unquote\n    # backslashes.  This makes it impossible to quote backslashes using\n    #   echo \"$something\" | sed 's/\\\\/\\\\\\\\/g'\n    #\n    # So, first we look for a working echo in the user's PATH.\n\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for dir in $PATH /usr/ucb; do\n      IFS=\"$lt_save_ifs\"\n      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&\n         test \"X`($dir/echo '\\t') 2>/dev/null`\" = 'X\\t' &&\n         echo_testing_string=`($dir/echo \"$echo_test_string\") 2>/dev/null` &&\n         test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n        ECHO=\"$dir/echo\"\n        break\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n\n    if test \"X$ECHO\" = Xecho; then\n      # We didn't find a better echo, so look for alternatives.\n      if test \"X`{ print -r '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n         echo_testing_string=`{ print -r \"$echo_test_string\"; } 2>/dev/null` &&\n         test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n        # This shell has a builtin print -r that does the trick.\n        ECHO='print -r'\n      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&\n\t   test \"X$CONFIG_SHELL\" != X/bin/ksh; then\n        # If we have ksh, try running configure again with it.\n        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}\n        export ORIGINAL_CONFIG_SHELL\n        CONFIG_SHELL=/bin/ksh\n        export CONFIG_SHELL\n        exec $CONFIG_SHELL \"$0\" --no-reexec ${1+\"$@\"}\n      else\n        # Try using printf.\n        ECHO='printf %s\\n'\n        if test \"X`{ $ECHO '\\t'; } 2>/dev/null`\" = 'X\\t' &&\n\t   echo_testing_string=`{ $ECHO \"$echo_test_string\"; } 2>/dev/null` &&\n\t   test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  # Cool, printf works\n\t  :\n        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"$0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = 'X\\t' &&\n\t     echo_testing_string=`($ORIGINAL_CONFIG_SHELL \"$0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL\n\t  export CONFIG_SHELL\n\t  SHELL=\"$CONFIG_SHELL\"\n\t  export SHELL\n\t  ECHO=\"$CONFIG_SHELL $0 --fallback-echo\"\n        elif echo_testing_string=`($CONFIG_SHELL \"$0\" --fallback-echo '\\t') 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = 'X\\t' &&\n\t     echo_testing_string=`($CONFIG_SHELL \"$0\" --fallback-echo \"$echo_test_string\") 2>/dev/null` &&\n\t     test \"X$echo_testing_string\" = \"X$echo_test_string\"; then\n\t  ECHO=\"$CONFIG_SHELL $0 --fallback-echo\"\n        else\n\t  # maybe with a smaller string...\n\t  prev=:\n\n\t  for cmd in 'echo test' 'sed 2q \"$0\"' 'sed 10q \"$0\"' 'sed 20q \"$0\"' 'sed 50q \"$0\"'; do\n\t    if { test \"X$echo_test_string\" = \"X`eval $cmd`\"; } 2>/dev/null\n\t    then\n\t      break\n\t    fi\n\t    prev=\"$cmd\"\n\t  done\n\n\t  if test \"$prev\" != 'sed 50q \"$0\"'; then\n\t    echo_test_string=`eval $prev`\n\t    export echo_test_string\n\t    exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} \"$0\" ${1+\"$@\"}\n\t  else\n\t    # Oops.  We lost completely, so just stick with echo.\n\t    ECHO=echo\n\t  fi\n        fi\n      fi\n    fi\n  fi\nfi\n\n# Copy echo and quote the copy suitably for passing to libtool from\n# the Makefile, instead of quoting the original, which is used later.\nlt_ECHO=$ECHO\nif test \"X$lt_ECHO\" = \"X$CONFIG_SHELL $0 --fallback-echo\"; then\n   lt_ECHO=\"$CONFIG_SHELL \\\\\\$\\$0 --fallback-echo\"\nfi\n\n\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, old GNU/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='yaml'\nPACKAGE_TARNAME='yaml'\nPACKAGE_VERSION='0.1.4'\nPACKAGE_STRING='yaml 0.1.4'\nPACKAGE_BUGREPORT='http://pyyaml.org/newticket?component=libyaml'\nPACKAGE_URL=''\n\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='am__EXEEXT_FALSE\nam__EXEEXT_TRUE\nLTLIBOBJS\nLIBOBJS\nDOXYGEN_FALSE\nDOXYGEN_TRUE\nDOXYGEN\nOTOOL64\nOTOOL\nLIPO\nNMEDIT\nDSYMUTIL\nlt_ECHO\nRANLIB\nAR\nOBJDUMP\nNM\nac_ct_DUMPBIN\nDUMPBIN\nLD\nFGREP\nEGREP\nGREP\nSED\nhost_os\nhost_vendor\nhost_cpu\nhost\nbuild_os\nbuild_vendor\nbuild_cpu\nbuild\nLIBTOOL\nLN_S\nCPP\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\nYAML_LT_AGE\nYAML_LT_REVISION\nYAML_LT_CURRENT\nYAML_LT_RELEASE\nam__untar\nam__tar\nAMTAR\nam__leading_dot\nSET_MAKE\nAWK\nmkdir_p\nMKDIR_P\nINSTALL_STRIP_PROGRAM\nSTRIP\ninstall_sh\nMAKEINFO\nAUTOHEADER\nAUTOMAKE\nAUTOCONF\nACLOCAL\nVERSION\nPACKAGE\nCYGPATH_W\nam__isrc\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=''\nac_user_opts='\nenable_option_checking\nenable_dependency_tracking\nenable_shared\nenable_static\nwith_pic\nenable_fast_install\nwith_gnu_ld\nenable_libtool_lock\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  *=?*) ac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *=)   ac_optarg= ;;\n  *)    ac_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 yaml 0.1.4 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/yaml]\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 yaml 0.1.4:\";;\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  --enable-shared[=PKGS]  build shared libraries [default=yes]\n  --enable-static[=PKGS]  build static libraries [default=yes]\n  --enable-fast-install[=PKGS]\n                          optimize for fast installation [default=yes]\n  --disable-libtool-lock  avoid locking (might break parallel builds)\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-pic              try to use only PIC/non-PIC objects [default=use\n                          both]\n  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]\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 <http://pyyaml.org/newticket?component=libyaml>.\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\nyaml configure 0.1.4\ngenerated by GNU Autoconf 2.67\n\nCopyright (C) 2010 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; } > conftest.i && {\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_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_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 eval \"test \\\"\\${$3+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_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_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 eval \"test \\\"\\${$3+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_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 eval \"test \\\"\\${$3+set}\\\"\" = set; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif eval \"test \\\"\\${$3+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.i 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( $as_echo \"## ------------------------------------------------------------ ##\n## Report this to http://pyyaml.org/newticket?component=libyaml ##\n## ------------------------------------------------------------ ##\"\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 eval \"test \\\"\\${$3+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_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 eval \"test \\\"\\${$3+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\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 yaml $as_me 0.1.4, which was\ngenerated by GNU Autoconf 2.67.  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    $as_echo \"## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\"\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    $as_echo \"## ----------------- ##\n## Output variables. ##\n## ----------------- ##\"\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      $as_echo \"## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\"\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      $as_echo \"## ----------- ##\n## confdefs.h. ##\n## ----------- ##\"\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  # We do not want a PATH search for config.site.\n  case $CONFIG_SITE in #((\n    -*)  ac_site_file1=./$CONFIG_SITE;;\n    */*) ac_site_file1=$CONFIG_SITE;;\n    *)   ac_site_file1=./$CONFIG_SITE;;\n  esac\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      || { { $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 $? \"failed to load site script $ac_site_file\nSee \\`config.log' for more details\" \"$LINENO\" 5 ; }\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\nac_aux_dir=\nfor ac_dir in config \"$srcdir\"/config; do\n  if test -f \"$ac_dir/install-sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install-sh -c\"\n    break\n  elif test -f \"$ac_dir/install.sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install.sh -c\"\n    break\n  elif test -f \"$ac_dir/shtool\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/shtool install -c\"\n    break\n  fi\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\nac_config_headers=\"$ac_config_headers config.h\"\n\nam__api_version='1.11'\n\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# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]*)\n    as_fn_error $? \"unsafe absolute working directory name\" \"$LINENO\" 5 ;;\nesac\ncase $srcdir in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]*)\n    as_fn_error $? \"unsafe srcdir value: \\`$srcdir'\" \"$LINENO\" 5 ;;\nesac\n\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\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\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 test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\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=\"\\$(install_sh) -c -s\"\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p\" >&5\n$as_echo_n \"checking for a thread-safe mkdir -p... \" >&6; }\nif test -z \"$MKDIR_P\"; then\n  if test \"${ac_cv_path_mkdir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in mkdir gmkdir; do\n\t for ac_exec_ext in '' $ac_executable_extensions; do\n\t   { test -f \"$as_dir/$ac_prog$ac_exec_ext\" && $as_test_x \"$as_dir/$ac_prog$ac_exec_ext\"; } || continue\n\t   case `\"$as_dir/$ac_prog$ac_exec_ext\" --version 2>&1` in #(\n\t     'mkdir (GNU coreutils) '* | \\\n\t     'mkdir (coreutils) '* | \\\n\t     'mkdir (fileutils) '4.1*)\n\t       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext\n\t       break 3;;\n\t   esac\n\t done\n       done\n  done\nIFS=$as_save_IFS\n\nfi\n\n  test -d ./--version && rmdir ./--version\n  if test \"${ac_cv_path_mkdir+set}\" = set; then\n    MKDIR_P=\"$ac_cv_path_mkdir -p\"\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for MKDIR_P 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    MKDIR_P=\"$ac_install_sh -d\"\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MKDIR_P\" >&5\n$as_echo \"$MKDIR_P\" >&6; }\n\nmkdir_p=\"$MKDIR_P\"\ncase $mkdir_p in\n  [\\\\/$]* | ?:[\\\\/]*) ;;\n  */*) mkdir_p=\"\\$(top_builddir)/$mkdir_p\" ;;\nesac\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 eval \"test \\\"\\${ac_cv_prog_make_${ac_make}_set+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\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  am__isrc=' -I$(srcdir)'\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    as_fn_error $? \"source directory already configured; run \\\"make distclean\\\" there first\" \"$LINENO\" 5\n  fi\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='yaml'\n VERSION='0.1.4'\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\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# Define macro variables for the package version numbers.\n\n$as_echo \"#define YAML_VERSION_MAJOR 0\" >>confdefs.h\n\n\n$as_echo \"#define YAML_VERSION_MINOR 1\" >>confdefs.h\n\n\n$as_echo \"#define YAML_VERSION_PATCH 4\" >>confdefs.h\n\n\n$as_echo \"#define YAML_VERSION_STRING \\\"0.1.4\\\"\" >>confdefs.h\n\n\n# Define substitutions for the libtool version numbers.\nYAML_LT_RELEASE=0\nYAML_LT_CURRENT=2\nYAML_LT_REVISION=2\nYAML_LT_AGE=0\n\n\n\n\n\n# Note: in order to update checks, run `autoscan` and look through \"configure.scan\".\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;}\nas_fn_error 77 \"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 this is the am__doit target\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# Ignore all kinds of additional output from `make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\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 if test \"x$enable_dependency_tracking\" != xno; then\n  AMDEP_TRUE=\n  AMDEP_FALSE='#'\nelse\n  AMDEP_TRUE='#'\n  AMDEP_FALSE=\nfi\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  am__universal=false\n  case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac\n\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    # 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.  Also, some Intel\n    # versions had trouble with output in subdirs\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvisualcpp | msvcmsys)\n      # This compiler won't grok `-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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 if\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\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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ln -s works\" >&5\n$as_echo_n \"checking whether ln -s works... \" >&6; }\nLN_S=$as_ln_s\nif test \"$LN_S\" = \"ln -s\"; 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, using $LN_S\" >&5\n$as_echo \"no, using $LN_S\" >&6; }\nfi\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 eval \"test \\\"\\${ac_cv_prog_make_${ac_make}_set+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\ncase `pwd` in\n  *\\ * | *\\\t*)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&5\n$as_echo \"$as_me: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&2;} ;;\nesac\n\n\n\nmacro_version='2.2.6b'\nmacro_revision='1.3017'\n\n\n\n\n\n\n\n\n\n\n\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\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\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{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output\" >&5\n$as_echo_n \"checking for a sed that does not truncate output... \" >&6; }\nif test \"${ac_cv_path_SED+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/\n     for ac_i in 1 2 3 4 5 6 7; do\n       ac_script=\"$ac_script$as_nl$ac_script\"\n     done\n     echo \"$ac_script\" 2>/dev/null | sed 99q >conftest.sed\n     { ac_script=; unset ac_script;}\n     if test -z \"$SED\"; then\n  ac_path_SED_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\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_SED=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_SED\" && $as_test_x \"$ac_path_SED\"; } || continue\n# Check for GNU ac_path_SED and select it if it is found.\n  # Check for GNU $ac_path_SED\ncase `\"$ac_path_SED\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_SED=\"$ac_path_SED\" ac_path_SED_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 '' >> \"conftest.nl\"\n    \"$ac_path_SED\" -f conftest.sed < \"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_SED_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_SED=\"$ac_path_SED\"\n      ac_path_SED_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_SED_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_SED\"; then\n    as_fn_error $? \"no acceptable sed could be found in \\$PATH\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_SED=$SED\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED\" >&5\n$as_echo \"$ac_cv_path_SED\" >&6; }\n SED=\"$ac_cv_path_SED\"\n  rm -f conftest.sed\n\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n\n\n\n\n\n\n\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 fgrep\" >&5\n$as_echo_n \"checking for fgrep... \" >&6; }\nif test \"${ac_cv_path_FGREP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1\n   then ac_cv_path_FGREP=\"$GREP -F\"\n   else\n     if test -z \"$FGREP\"; then\n  ac_path_FGREP_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 fgrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_FGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      { test -f \"$ac_path_FGREP\" && $as_test_x \"$ac_path_FGREP\"; } || continue\n# Check for GNU ac_path_FGREP and select it if it is found.\n  # Check for GNU $ac_path_FGREP\ncase `\"$ac_path_FGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_FGREP=\"$ac_path_FGREP\" ac_path_FGREP_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 'FGREP' >> \"conftest.nl\"\n    \"$ac_path_FGREP\" FGREP < \"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_FGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_FGREP=\"$ac_path_FGREP\"\n      ac_path_FGREP_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_FGREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_FGREP\"; then\n    as_fn_error $? \"no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_FGREP=$FGREP\nfi\n\n   fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP\" >&5\n$as_echo \"$ac_cv_path_FGREP\" >&6; }\n FGREP=\"$ac_cv_path_FGREP\"\n\n\ntest -z \"$GREP\" && GREP=grep\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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\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 $CC\" >&5\n$as_echo_n \"checking for ld used by $CC... \" >&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    [\\\\/]* | ?:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the pathname 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 \"${lt_cv_path_LD+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$lt_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 \"${lt_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 lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld\" >&5\n$as_echo \"$lt_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)\" >&5\n$as_echo_n \"checking for BSD- or MS-compatible name lister (nm)... \" >&6; }\nif test \"${lt_cv_path_NM+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM\" >&5\n$as_echo \"$lt_cv_path_NM\" >&6; }\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in \"dumpbin -symbols\" \"link -dump -symbols\"\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_DUMPBIN+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DUMPBIN\"; then\n  ac_cv_prog_DUMPBIN=\"$DUMPBIN\" # 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_DUMPBIN=\"$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\nDUMPBIN=$ac_cv_prog_DUMPBIN\nif test -n \"$DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DUMPBIN\" >&5\n$as_echo \"$DUMPBIN\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n    test -n \"$DUMPBIN\" && break\n  done\nfi\nif test -z \"$DUMPBIN\"; then\n  ac_ct_DUMPBIN=$DUMPBIN\n  for ac_prog in \"dumpbin -symbols\" \"link -dump -symbols\"\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_DUMPBIN+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DUMPBIN\"; then\n  ac_cv_prog_ac_ct_DUMPBIN=\"$ac_ct_DUMPBIN\" # 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_DUMPBIN=\"$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN\nif test -n \"$ac_ct_DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN\" >&5\n$as_echo \"$ac_ct_DUMPBIN\" >&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_DUMPBIN\" && break\ndone\n\n  if test \"x$ac_ct_DUMPBIN\" = x; then\n    DUMPBIN=\":\"\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    DUMPBIN=$ac_ct_DUMPBIN\n  fi\nfi\n\n\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface\" >&5\n$as_echo_n \"checking the name lister ($NM) interface... \" >&6; }\nif test \"${lt_cv_nm_interface+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:4738: $ac_compile\\\"\" >&5)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:4741: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&5)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:4744: output\\\"\" >&5)\n  cat conftest.out >&5\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface\" >&5\n$as_echo \"$lt_cv_nm_interface\" >&6; }\n\n# find the maximum length of command line arguments\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments\" >&5\n$as_echo_n \"checking the maximum length of command line arguments... \" >&6; }\nif test \"${lt_cv_sys_max_cmd_len+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n    i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[\t ]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`$SHELL $0 --fallback-echo \"X$teststring$teststring\" 2>/dev/null` \\\n\t         = \"XX$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n\nfi\n\nif test -n $lt_cv_sys_max_cmd_len ; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len\" >&5\n$as_echo \"$lt_cv_sys_max_cmd_len\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: none\" >&5\n$as_echo \"none\" >&6; }\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n\n\n\n\n\n: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs\" >&5\n$as_echo_n \"checking whether the shell understands some XSI constructs... \" >&6; }\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $xsi_shell\" >&5\n$as_echo \"$xsi_shell\" >&6; }\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands \\\"+=\\\"\" >&5\n$as_echo_n \"checking whether the shell understands \\\"+=\\\"... \" >&6; }\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$1+=\\$2\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_shell_append\" >&5\n$as_echo \"$lt_shell_append\" >&6; }\n\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n\n\n\n\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files\" >&5\n$as_echo_n \"checking for $LD option to reload object files... \" >&6; }\nif test \"${lt_cv_ld_reload_flag+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_reload_flag='-r'\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag\" >&5\n$as_echo \"$lt_cv_ld_reload_flag\" >&6; }\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}objdump\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OBJDUMP\"; then\n  ac_cv_prog_OBJDUMP=\"$OBJDUMP\" # 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_OBJDUMP=\"${ac_tool_prefix}objdump\"\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\nOBJDUMP=$ac_cv_prog_OBJDUMP\nif test -n \"$OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OBJDUMP\" >&5\n$as_echo \"$OBJDUMP\" >&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_OBJDUMP\"; then\n  ac_ct_OBJDUMP=$OBJDUMP\n  # Extract the first word of \"objdump\", so it can be a program name with args.\nset dummy objdump; 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_OBJDUMP+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OBJDUMP\"; then\n  ac_cv_prog_ac_ct_OBJDUMP=\"$ac_ct_OBJDUMP\" # 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_OBJDUMP=\"objdump\"\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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP\nif test -n \"$ac_ct_OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP\" >&5\n$as_echo \"$ac_ct_OBJDUMP\" >&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_OBJDUMP\" = x; then\n    OBJDUMP=\"false\"\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    OBJDUMP=$ac_ct_OBJDUMP\n  fi\nelse\n  OBJDUMP=\"$ac_cv_prog_OBJDUMP\"\nfi\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries\" >&5\n$as_echo_n \"checking how to recognize dependent libraries... \" >&6; }\nif test \"${lt_cv_deplibs_check_method+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[4-9]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[45]*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  if ( file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\ngnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[3-9]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method\" >&5\n$as_echo \"$lt_cv_deplibs_check_method\" >&6; }\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ar\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}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=\"${ac_tool_prefix}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\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\nfi\nif test -z \"$ac_cv_prog_AR\"; then\n  ac_ct_AR=$AR\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_ac_ct_AR+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_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_ac_ct_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\nfi\nfi\nac_ct_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR\" >&5\n$as_echo \"$ac_ct_AR\" >&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_AR\" = x; then\n    AR=\"false\"\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    AR=$ac_ct_AR\n  fi\nelse\n  AR=\"$ac_cv_prog_AR\"\nfi\n\ntest -z \"$AR\" && AR=ar\ntest -z \"$AR_FLAGS\" && AR_FLAGS=cru\n\n\n\n\n\n\n\n\n\n\n\nif 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\ntest -z \"$STRIP\" && STRIP=:\n\n\n\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\ntest -z \"$RANLIB\" && RANLIB=:\n\n\n\n\n\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$oldlib\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object\" >&5\n$as_echo_n \"checking command to parse $NM output from $compiler object... \" >&6; }\nif test \"${lt_cv_sys_global_symbol_pipe+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[BCDEGRST]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([_A-Za-z][_A-Za-z0-9]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[BCDT]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[ABCDGISTW]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[ABCDEGRST]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[BCDEGRST]'\n  ;;\nosf*)\n  symcode='[BCDEGQRST]'\n  ;;\nsolaris*)\n  symcode='[BDRT]'\n  ;;\nsco3.2v5*)\n  symcode='[DT]'\n  ;;\nsysv4.2uw2*)\n  symcode='[DT]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[ABDT]'\n  ;;\nsysv4)\n  symcode='[DFNSTU]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[ABCDGIRSTW]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\) $/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([^ ]*\\) $/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\(lib[^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK '\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[\t ]\\($symcode$symcode*\\)[\t ][\t ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist\\\"\"; } >&5\n  (eval $NM conftest.$ac_objext \\| $lt_cv_sys_global_symbol_pipe \\> $nlist) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nconst struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_save_LIBS=\"$LIBS\"\n\t  lt_save_CFLAGS=\"$CFLAGS\"\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$lt_prog_compiler_no_builtin_flag\"\n\t  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=\"$lt_save_LIBS\"\n\t  CFLAGS=\"$lt_save_CFLAGS\"\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&5\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&5\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&5\n    fi\n  else\n    echo \"$progname: failed program was:\" >&5\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n\nfi\n\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: failed\" >&5\n$as_echo \"failed\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# Check whether --enable-libtool-lock was given.\nif test \"${enable_libtool_lock+set}\" = set; then :\n  enableval=$enable_libtool_lock;\nfi\n\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '#line 5939 \"configure\"' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_i386\"\n\t    ;;\n\t  ppc64-*linux*|powerpc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  ppc*-*linux*|powerpc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf\" >&5\n$as_echo_n \"checking whether the C compiler needs -belf... \" >&6; }\nif test \"${lt_cv_cc_needs_belf+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_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     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_link \"$LINENO\"; then :\n  lt_cv_cc_needs_belf=yes\nelse\n  lt_cv_cc_needs_belf=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n     ac_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\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf\" >&5\n$as_echo \"$lt_cv_cc_needs_belf\" >&6; }\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\nsparc*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*) LD=\"${LD-ld} -m elf64_sparc\" ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n\n\n  case $host_os in\n    rhapsody* | darwin*)\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dsymutil\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DSYMUTIL\"; then\n  ac_cv_prog_DSYMUTIL=\"$DSYMUTIL\" # 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_DSYMUTIL=\"${ac_tool_prefix}dsymutil\"\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\nDSYMUTIL=$ac_cv_prog_DSYMUTIL\nif test -n \"$DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL\" >&5\n$as_echo \"$DSYMUTIL\" >&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_DSYMUTIL\"; then\n  ac_ct_DSYMUTIL=$DSYMUTIL\n  # Extract the first word of \"dsymutil\", so it can be a program name with args.\nset dummy dsymutil; 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_DSYMUTIL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DSYMUTIL\"; then\n  ac_cv_prog_ac_ct_DSYMUTIL=\"$ac_ct_DSYMUTIL\" # 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_DSYMUTIL=\"dsymutil\"\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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL\nif test -n \"$ac_ct_DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL\" >&5\n$as_echo \"$ac_ct_DSYMUTIL\" >&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_DSYMUTIL\" = x; then\n    DSYMUTIL=\":\"\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    DSYMUTIL=$ac_ct_DSYMUTIL\n  fi\nelse\n  DSYMUTIL=\"$ac_cv_prog_DSYMUTIL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}nmedit\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NMEDIT\"; then\n  ac_cv_prog_NMEDIT=\"$NMEDIT\" # 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_NMEDIT=\"${ac_tool_prefix}nmedit\"\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\nNMEDIT=$ac_cv_prog_NMEDIT\nif test -n \"$NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $NMEDIT\" >&5\n$as_echo \"$NMEDIT\" >&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_NMEDIT\"; then\n  ac_ct_NMEDIT=$NMEDIT\n  # Extract the first word of \"nmedit\", so it can be a program name with args.\nset dummy nmedit; 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_NMEDIT+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_NMEDIT\"; then\n  ac_cv_prog_ac_ct_NMEDIT=\"$ac_ct_NMEDIT\" # 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_NMEDIT=\"nmedit\"\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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT\nif test -n \"$ac_ct_NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT\" >&5\n$as_echo \"$ac_ct_NMEDIT\" >&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_NMEDIT\" = x; then\n    NMEDIT=\":\"\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    NMEDIT=$ac_ct_NMEDIT\n  fi\nelse\n  NMEDIT=\"$ac_cv_prog_NMEDIT\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}lipo\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}lipo; 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_LIPO+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$LIPO\"; then\n  ac_cv_prog_LIPO=\"$LIPO\" # 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_LIPO=\"${ac_tool_prefix}lipo\"\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\nLIPO=$ac_cv_prog_LIPO\nif test -n \"$LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIPO\" >&5\n$as_echo \"$LIPO\" >&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_LIPO\"; then\n  ac_ct_LIPO=$LIPO\n  # Extract the first word of \"lipo\", so it can be a program name with args.\nset dummy lipo; 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_LIPO+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_LIPO\"; then\n  ac_cv_prog_ac_ct_LIPO=\"$ac_ct_LIPO\" # 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_LIPO=\"lipo\"\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_LIPO=$ac_cv_prog_ac_ct_LIPO\nif test -n \"$ac_ct_LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO\" >&5\n$as_echo \"$ac_ct_LIPO\" >&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_LIPO\" = x; then\n    LIPO=\":\"\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    LIPO=$ac_ct_LIPO\n  fi\nelse\n  LIPO=\"$ac_cv_prog_LIPO\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool; 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_OTOOL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL\"; then\n  ac_cv_prog_OTOOL=\"$OTOOL\" # 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_OTOOL=\"${ac_tool_prefix}otool\"\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\nOTOOL=$ac_cv_prog_OTOOL\nif test -n \"$OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL\" >&5\n$as_echo \"$OTOOL\" >&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_OTOOL\"; then\n  ac_ct_OTOOL=$OTOOL\n  # Extract the first word of \"otool\", so it can be a program name with args.\nset dummy otool; 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_OTOOL+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL\"; then\n  ac_cv_prog_ac_ct_OTOOL=\"$ac_ct_OTOOL\" # 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_OTOOL=\"otool\"\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_OTOOL=$ac_cv_prog_ac_ct_OTOOL\nif test -n \"$ac_ct_OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL\" >&5\n$as_echo \"$ac_ct_OTOOL\" >&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_OTOOL\" = x; then\n    OTOOL=\":\"\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    OTOOL=$ac_ct_OTOOL\n  fi\nelse\n  OTOOL=\"$ac_cv_prog_OTOOL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool64\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool64; 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_OTOOL64+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL64\"; then\n  ac_cv_prog_OTOOL64=\"$OTOOL64\" # 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_OTOOL64=\"${ac_tool_prefix}otool64\"\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\nOTOOL64=$ac_cv_prog_OTOOL64\nif test -n \"$OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL64\" >&5\n$as_echo \"$OTOOL64\" >&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_OTOOL64\"; then\n  ac_ct_OTOOL64=$OTOOL64\n  # Extract the first word of \"otool64\", so it can be a program name with args.\nset dummy otool64; 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_OTOOL64+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL64\"; then\n  ac_cv_prog_ac_ct_OTOOL64=\"$ac_ct_OTOOL64\" # 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_OTOOL64=\"otool64\"\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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64\nif test -n \"$ac_ct_OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64\" >&5\n$as_echo \"$ac_ct_OTOOL64\" >&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_OTOOL64\" = x; then\n    OTOOL64=\":\"\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    OTOOL64=$ac_ct_OTOOL64\n  fi\nelse\n  OTOOL64=\"$ac_cv_prog_OTOOL64\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag\" >&5\n$as_echo_n \"checking for -single_module linker flag... \" >&6; }\nif test \"${lt_cv_apple_cc_single_mod+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&5\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\tif test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&5\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod\" >&5\n$as_echo \"$lt_cv_apple_cc_single_mod\" >&6; }\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag\" >&5\n$as_echo_n \"checking for -exported_symbols_list linker flag... \" >&6; }\nif test \"${lt_cv_ld_exported_symbols_list+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\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_link \"$LINENO\"; then :\n  lt_cv_ld_exported_symbols_list=yes\nelse\n  lt_cv_ld_exported_symbols_list=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\tLDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list\" >&5\n$as_echo \"$lt_cv_ld_exported_symbols_list\" >&6; }\n    case $host_os in\n    rhapsody* | darwin1.[012])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[91]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[012]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\nfor ac_header in dlfcn.h\ndo :\n  ac_fn_c_check_header_compile \"$LINENO\" \"dlfcn.h\" \"ac_cv_header_dlfcn_h\" \"$ac_includes_default\n\"\nif test \"x$ac_cv_header_dlfcn_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_DLFCN_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n# Set options\n\n\n\n        enable_dlopen=no\n\n\n  enable_win32_dll=no\n\n\n            # Check whether --enable-shared was given.\nif test \"${enable_shared+set}\" = set; then :\n  enableval=$enable_shared; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_shared=yes\nfi\n\n\n\n\n\n\n\n\n\n  # Check whether --enable-static was given.\nif test \"${enable_static+set}\" = set; then :\n  enableval=$enable_static; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_static=yes\nfi\n\n\n\n\n\n\n\n\n\n\n# Check whether --with-pic was given.\nif test \"${with_pic+set}\" = set; then :\n  withval=$with_pic; pic_mode=\"$withval\"\nelse\n  pic_mode=default\nfi\n\n\ntest -z \"$pic_mode\" && pic_mode=default\n\n\n\n\n\n\n\n  # Check whether --enable-fast-install was given.\nif test \"${enable_fast_install+set}\" = set; then :\n  enableval=$enable_fast_install; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_fast_install=yes\nfi\n\n\n\n\n\n\n\n\n\n\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for objdir\" >&5\n$as_echo_n \"checking for objdir... \" >&6; }\nif test \"${lt_cv_objdir+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir\" >&5\n$as_echo \"$lt_cv_objdir\" >&6; }\nobjdir=$lt_cv_objdir\n\n\n\n\n\ncat >>confdefs.h <<_ACEOF\n#define LT_OBJDIR \"$lt_cv_objdir/\"\n_ACEOF\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nsed_quote_subst='s/\\([\"`$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"X$cc_temp\" | $Xsed -e 's%.*/%%' -e \"s%^$host_alias-%%\"`\n\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file\" >&5\n$as_echo_n \"checking for ${ac_tool_prefix}file... \" >&6; }\nif test \"${lt_cv_path_MAGIC_CMD+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/${ac_tool_prefix}file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/${ac_tool_prefix}file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n\n\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for file\" >&5\n$as_echo_n \"checking for file... \" >&6; }\nif test \"${lt_cv_path_MAGIC_CMD+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  else\n    MAGIC_CMD=:\n  fi\nfi\n\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\n\nlt_save_CC=\"$CC\"\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# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\nobjext=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n\n\nif test -n \"$compiler\"; then\n\nlt_prog_compiler_no_builtin_flag=\n\nif test \"$GCC\" = yes; then\n  lt_prog_compiler_no_builtin_flag=' -fno-builtin'\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions\" >&5\n$as_echo_n \"checking if $compiler supports -fno-rtti -fno-exceptions... \" >&6; }\nif test \"${lt_cv_prog_compiler_rtti_exceptions+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_rtti_exceptions=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"-fno-rtti -fno-exceptions\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:7327: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:7331: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_rtti_exceptions=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions\" >&5\n$as_echo \"$lt_cv_prog_compiler_rtti_exceptions\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_rtti_exceptions\" = xyes; then\n    lt_prog_compiler_no_builtin_flag=\"$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions\"\nelse\n    :\nfi\n\nfi\n\n\n\n\n\n\n  lt_prog_compiler_wl=\nlt_prog_compiler_pic=\nlt_prog_compiler_static=\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC\" >&5\n$as_echo_n \"checking for $compiler option to produce PIC... \" >&6; }\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl='-Wl,'\n    lt_prog_compiler_static='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            lt_prog_compiler_pic='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic='-fno-common'\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[3-9]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      lt_prog_compiler_pic='-fPIC'\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      else\n\tlt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-KPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='--shared'\n\tlt_prog_compiler_static='--static'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fpic'\n\tlt_prog_compiler_static='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static='-non_shared'\n        ;;\n      xl*)\n\t# IBM XL C 8.0/Fortran 10.1 on PPC\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-qpic'\n\tlt_prog_compiler_static='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl='-Wl,'\n\t  ;;\n\t*Sun\\ F*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl=''\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    rdos*)\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95*)\n\tlt_prog_compiler_wl='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl='-Qoption ld '\n      lt_prog_compiler_pic='-PIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic='-Kconform_pic'\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_can_build_shared=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic='-pic'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared=no\n      ;;\n    esac\n  fi\n\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic=\n    ;;\n  *)\n    lt_prog_compiler_pic=\"$lt_prog_compiler_pic -DPIC\"\n    ;;\nesac\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic\" >&5\n$as_echo \"$lt_prog_compiler_pic\" >&6; }\n\n\n\n\n\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works\" >&5\n$as_echo_n \"checking if $compiler PIC flag $lt_prog_compiler_pic works... \" >&6; }\nif test \"${lt_cv_prog_compiler_pic_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_pic_works=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic -DPIC\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:7666: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:7670: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_pic_works=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_pic_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_pic_works\" = xyes; then\n    case $lt_prog_compiler_pic in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic=\" $lt_prog_compiler_pic\" ;;\n     esac\nelse\n    lt_prog_compiler_pic=\n     lt_prog_compiler_can_build_shared=no\nfi\n\nfi\n\n\n\n\n\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static\\\"\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\n$as_echo_n \"checking if $compiler static flag $lt_tmp_static_flag works... \" >&6; }\nif test \"${lt_cv_prog_compiler_static_works+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_static_works=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $ECHO \"X$_lt_linker_boilerplate\" | $Xsed -e '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_cv_prog_compiler_static_works=yes\n       fi\n     else\n       lt_cv_prog_compiler_static_works=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_static_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_static_works\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static=\nfi\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif test \"${lt_cv_prog_compiler_c_o+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:7771: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:7775: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif test \"${lt_cv_prog_compiler_c_o+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:7826: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:7830: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"X$_lt_compiler_boilerplate\" | $Xsed -e '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links\" >&5\n$as_echo_n \"checking if we can lock with hard links... \" >&6; }\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hard_links\" >&5\n$as_echo \"$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\n$as_echo \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\n$as_echo_n \"checking whether the $compiler linker ($LD) supports shared libraries... \" >&6; }\n\n  runpath_var=\n  allow_undefined_flag=\n  always_export_symbols=no\n  archive_cmds=\n  archive_expsym_cmds=\n  compiler_needs_object=no\n  enable_shared_with_static_runtimes=no\n  export_dynamic_flag_spec=\n  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  hardcode_automatic=no\n  hardcode_direct=no\n  hardcode_direct_absolute=no\n  hardcode_libdir_flag_spec=\n  hardcode_libdir_flag_spec_ld=\n  hardcode_libdir_separator=\n  hardcode_minus_L=no\n  hardcode_shlibpath_var=unsupported\n  inherit_rpath=no\n  link_all_deplibs=unknown\n  module_cmds=\n  module_expsym_cmds=\n  old_archive_from_new_cmds=\n  old_archive_from_expsyms_cmds=\n  thread_safe_flag_spec=\n  whole_archive_flag_spec=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu)\n    link_all_deplibs=no\n    ;;\n  esac\n\n  ld_shlibs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n    export_dynamic_flag_spec='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      whole_archive_flag_spec=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      whole_archive_flag_spec=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[3-9]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.9.1, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to modify your PATH\n*** so that a non-GNU linker is found, and then restart.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec='-L$libdir'\n      allow_undefined_flag=unsupported\n      always_export_symbols=no\n      enable_shared_with_static_runtimes=yes\n      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS][ ]/s/.*[ ]\\([^ ]*\\)/\\1 DATA/'\\'' | $SED -e '\\''/^[AITW][ ]/s/.*[ ]//'\\'' | sort | uniq > $export_symbols'\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    interix[3-9]*)\n      hardcode_direct=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95*)\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  whole_archive_flag_spec=\n\t  tmp_sharedflag='--shared' ;;\n\txl[cC]*)\t\t\t# IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; $ECHO \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  compiler_needs_object=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\tarchive_cmds='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'\n\t  hardcode_libdir_flag_spec=\n\t  hardcode_libdir_flag_spec_ld='-rpath $libdir'\n\t  archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        ld_shlibs=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n\t    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec=\n      export_dynamic_flag_spec=\n      whole_archive_flag_spec=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag=unsupported\n      always_export_symbols=yes\n      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\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 && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct=unsupported\n      fi\n      ;;\n\n    aix[4-9]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds=''\n      hardcode_direct=yes\n      hardcode_direct_absolute=yes\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      file_list_spec='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  hardcode_direct=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  hardcode_minus_L=yes\n\t  hardcode_libdir_flag_spec='-L$libdir'\n\t  hardcode_libdir_separator=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\tlink_all_deplibs=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      export_dynamic_flag_spec='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\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_link \"$LINENO\"; then :\n\nlt_aix_libpath_sed='\n    /Import File Strings/,/^$/ {\n\t/^0/ {\n\t    s/^0  *\\(.*\\)$/\\1/\n\t    p\n\t}\n    }'\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then\n  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\nfi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then $ECHO \"X${wl}${allow_undefined_flag}\" | $Xsed; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag=\"-z nodefs\"\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\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_link \"$LINENO\"; then :\n\nlt_aix_libpath_sed='\n    /Import File Strings/,/^$/ {\n\t/^0/ {\n\t    s/^0  *\\(.*\\)$/\\1/\n\t    p\n\t}\n    }'\naix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n# Check for a 64-bit object if we didn't find anything.\nif test -z \"$aix_libpath\"; then\n  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\nfi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nif test -z \"$aix_libpath\"; then aix_libpath=\"/usr/lib:/lib\"; fi\n\n\t hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag=' ${wl}-bernotok'\n\t  allow_undefined_flag=' ${wl}-berok'\n\t  # Exported symbols can be pulled into shared objects from archives\n\t  whole_archive_flag_spec='$convenience'\n\t  archive_cmds_need_lc=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      allow_undefined_flag=unsupported\n      # Tell ltmain to make .lib files, not .a files.\n      libext=lib\n      # Tell ltmain to make .dll files, not .so files.\n      shrext_cmds=\".dll\"\n      # FIXME: Setting linknames here is a bad hack.\n      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO \"X$deplibs\" | $Xsed -e '\\''s/ -lc$//'\\''` -link -dll~linknames='\n      # The linker will automatically build a .lib file if we build a DLL.\n      old_archive_from_new_cmds='true'\n      # FIXME: Should let the user specify the lib program.\n      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'\n      fix_srcfile_path='`cygpath -w \"$srcfile\"`'\n      enable_shared_with_static_runtimes=yes\n      ;;\n\n    darwin* | rhapsody*)\n\n\n  archive_cmds_need_lc=no\n  hardcode_direct=no\n  hardcode_automatic=yes\n  hardcode_shlibpath_var=unsupported\n  whole_archive_flag_spec=''\n  link_all_deplibs=yes\n  allow_undefined_flag=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=echo\n    archive_cmds=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    module_cmds=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    archive_expsym_cmds=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    module_expsym_cmds=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n\n  else\n  ld_shlibs=no\n  fi\n\n      ;;\n\n    dgux*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    freebsd1*)\n      ld_shlibs=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_direct=yes\n\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      export_dynamic_flag_spec='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tarchive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_flag_spec_ld='+b $libdir'\n\thardcode_libdir_separator=:\n\thardcode_direct=yes\n\thardcode_direct_absolute=yes\n\texport_dynamic_flag_spec='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes -a \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_direct=no\n\t  hardcode_shlibpath_var=no\n\t  ;;\n\t*)\n\t  hardcode_direct=yes\n\t  hardcode_direct_absolute=yes\n\t  export_dynamic_flag_spec='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n        save_LDFLAGS=\"$LDFLAGS\"\n        LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nint foo(void) {}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n        LDFLAGS=\"$save_LDFLAGS\"\n      else\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      inherit_rpath=yes\n      link_all_deplibs=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    newsos6)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_shlibpath_var=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\thardcode_direct=yes\n\thardcode_shlibpath_var=no\n\thardcode_direct_absolute=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t  export_dynamic_flag_spec='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     hardcode_libdir_flag_spec='-R$libdir'\n\t     ;;\n\t   *)\n\t     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      allow_undefined_flag=unsupported\n      archive_cmds='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && $ECHO \"X${wl}-set_version ${wl}$verstring\" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"X-set_version $verstring\" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec='-rpath $libdir'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_separator=:\n      ;;\n\n    solaris*)\n      no_undefined_flag=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_shlibpath_var=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      link_all_deplibs=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds='$CC -r -o $output$reload_objs'\n\t  hardcode_direct=no\n        ;;\n\tmotorola)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var=no\n      export_dynamic_flag_spec='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)\n      no_undefined_flag='${wl}-z,text'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag='${wl}-z,text'\n      allow_undefined_flag='${wl}-z,nodefs'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-R,$libdir'\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      export_dynamic_flag_spec='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      ld_shlibs=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\texport_dynamic_flag_spec='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ld_shlibs\" >&5\n$as_echo \"$ld_shlibs\" >&6; }\ntest \"$ld_shlibs\" = no && can_build_shared=no\n\nwith_gnu_ld=$with_gnu_ld\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in\" >&5\n$as_echo_n \"checking whether -lc should be explicitly linked in... \" >&6; }\n      $RM conftest*\n      echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n      if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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; } 2>conftest.err; then\n        soname=conftest\n        lib=conftest\n        libobjs=conftest.$ac_objext\n        deplibs=\n        wl=$lt_prog_compiler_wl\n\tpic_flag=$lt_prog_compiler_pic\n        compiler_flags=-v\n        linker_flags=-v\n        verstring=\n        output_objdir=.\n        libname=conftest\n        lt_save_allow_undefined_flag=$allow_undefined_flag\n        allow_undefined_flag=\n        if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\"; } >&5\n  (eval $archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 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  archive_cmds_need_lc=no\n        else\n\t  archive_cmds_need_lc=yes\n        fi\n        allow_undefined_flag=$lt_save_allow_undefined_flag\n      else\n        cat conftest.err 1>&5\n      fi\n      $RM conftest*\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc\" >&5\n$as_echo \"$archive_cmds_need_lc\" >&6; }\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics\" >&5\n$as_echo_n \"checking dynamic linker characteristics... \" >&6; }\n\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n  if $ECHO \"$lt_search_path_spec\" | $GREP ';' >/dev/null ; then\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED -e 's/;/ /g'`\n  else\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n  fi\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[lt_foo]++; }\n  if (lt_freq[lt_foo] == 1) { print lt_foo; }\n}'`\n  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[4-9]*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO \"X$lib\" | $Xsed -e '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$host_os in\n  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=\"/usr/lib /lib/w32api /lib /usr/local/lib\"\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP \"^libraries:\" | $SED -e \"s/^libraries://\" -e \"s,=/,/,g\"`\n      if $ECHO \"$sys_lib_search_path_spec\" | $GREP ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH printed by\n        # mingw gcc, but we are running on Cygwin. Gcc prints its search\n        # path with ; separators, and with drive letters. We can handle the\n        # drive letters (cygwin fileutils understands them), so leave them,\n        # especially as we might pass files found there to a mingw objdump,\n        # which wouldn't understand a cygwinified path. Ahh.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED  -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    ;;\n\n  *)\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    ;;\n  esac\n  dynamic_linker='Win32 ld.exe'\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd1*)\n  dynamic_linker=no\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[123]*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\ngnu*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555.\n  postinstall_cmds='chmod 555 $lib'\n  ;;\n\ninterix[3-9]*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be Linux ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  # Some binutils ld are patched to set DT_RUNPATH\n  save_LDFLAGS=$LDFLAGS\n  save_libdir=$libdir\n  eval \"libdir=/foo; wl=\\\"$lt_prog_compiler_wl\\\"; \\\n       LDFLAGS=\\\"\\$LDFLAGS $hardcode_libdir_flag_spec\\\"\"\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_link \"$LINENO\"; then :\n  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null; then :\n  shlibpath_overrides_runpath=yes\nfi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$save_LDFLAGS\n  libdir=$save_libdir\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $dynamic_linker\" >&5\n$as_echo \"$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs\" >&5\n$as_echo_n \"checking how to hardcode library paths into programs... \" >&6; }\nhardcode_action=\nif test -n \"$hardcode_libdir_flag_spec\" ||\n   test -n \"$runpath_var\" ||\n   test \"X$hardcode_automatic\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$hardcode_direct\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, )\" != no &&\n     test \"$hardcode_minus_L\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action=unsupported\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hardcode_action\" >&5\n$as_echo \"$hardcode_action\" >&6; }\n\nif test \"$hardcode_action\" = relink ||\n   test \"$inherit_rpath\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n\n\n\n\n  if test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif test \"${ac_cv_lib_dl_dlopen+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = x\"\"yes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n\nfi\n\n    ;;\n\n  *)\n    ac_fn_c_check_func \"$LINENO\" \"shl_load\" \"ac_cv_func_shl_load\"\nif test \"x$ac_cv_func_shl_load\" = x\"\"yes; then :\n  lt_cv_dlopen=\"shl_load\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld\" >&5\n$as_echo_n \"checking for shl_load in -ldld... \" >&6; }\nif test \"${ac_cv_lib_dld_shl_load+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 shl_load ();\nint\nmain ()\n{\nreturn shl_load ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_shl_load=yes\nelse\n  ac_cv_lib_dld_shl_load=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_dld_shl_load\" >&5\n$as_echo \"$ac_cv_lib_dld_shl_load\" >&6; }\nif test \"x$ac_cv_lib_dld_shl_load\" = x\"\"yes; then :\n  lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"\nelse\n  ac_fn_c_check_func \"$LINENO\" \"dlopen\" \"ac_cv_func_dlopen\"\nif test \"x$ac_cv_func_dlopen\" = x\"\"yes; then :\n  lt_cv_dlopen=\"dlopen\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif test \"${ac_cv_lib_dl_dlopen+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = x\"\"yes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld\" >&5\n$as_echo_n \"checking for dlopen in -lsvld... \" >&6; }\nif test \"${ac_cv_lib_svld_dlopen+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsvld  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_svld_dlopen=yes\nelse\n  ac_cv_lib_svld_dlopen=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_svld_dlopen\" >&5\n$as_echo \"$ac_cv_lib_svld_dlopen\" >&6; }\nif test \"x$ac_cv_lib_svld_dlopen\" = x\"\"yes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld\" >&5\n$as_echo_n \"checking for dld_link in -ldld... \" >&6; }\nif test \"${ac_cv_lib_dld_dld_link+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 dld_link ();\nint\nmain ()\n{\nreturn dld_link ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_dld_link=yes\nelse\n  ac_cv_lib_dld_dld_link=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_dld_dld_link\" >&5\n$as_echo \"$ac_cv_lib_dld_dld_link\" >&6; }\nif test \"x$ac_cv_lib_dld_dld_link\" = x\"\"yes; then :\n  lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself\" >&5\n$as_echo_n \"checking whether a program can dlopen itself... \" >&6; }\nif test \"${lt_cv_dlopen_self+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line 10210 \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self\" >&5\n$as_echo \"$lt_cv_dlopen_self\" >&6; }\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself\" >&5\n$as_echo_n \"checking whether a statically linked program can dlopen itself... \" >&6; }\nif test \"${lt_cv_dlopen_self_static+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self_static=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line 10306 \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\nvoid fnord() { int i=42;}\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else if (dlsym( self,\"_fnord\")) status = $lt_dlneed_uscore;\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self_static=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static\" >&5\n$as_echo \"$lt_cv_dlopen_self_static\" >&6; }\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nstriplib=\nold_striplib=\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible\" >&5\n$as_echo_n \"checking whether stripping libraries is possible... \" >&6; }\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    fi\n    ;;\n  *)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n  # Report which library types will actually be built\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries\" >&5\n$as_echo_n \"checking if libtool supports shared libraries... \" >&6; }\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $can_build_shared\" >&5\n$as_echo \"$can_build_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries\" >&5\n$as_echo_n \"checking whether to build shared libraries... \" >&6; }\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[4-9]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_shared\" >&5\n$as_echo \"$enable_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build static libraries\" >&5\n$as_echo_n \"checking whether to build static libraries... \" >&6; }\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_static\" >&5\n$as_echo \"$enable_static\" >&6; }\n\n\n\n\nfi\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\nCC=\"$lt_save_CC\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n        ac_config_commands=\"$ac_config_commands libtool\"\n\n\n\n\n# Only expand once:\n\n\n\n# Extract the first word of \"doxygen\", so it can be a program name with args.\nset dummy doxygen; 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_DOXYGEN+set}\" = set; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DOXYGEN\"; then\n  ac_cv_prog_DOXYGEN=\"$DOXYGEN\" # 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_DOXYGEN=\"true\"\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_DOXYGEN\" && ac_cv_prog_DOXYGEN=\"false\"\nfi\nfi\nDOXYGEN=$ac_cv_prog_DOXYGEN\nif test -n \"$DOXYGEN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DOXYGEN\" >&5\n$as_echo \"$DOXYGEN\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n if test \"$DOXYGEN\" = true; then\n  DOXYGEN_TRUE=\n  DOXYGEN_FALSE='#'\nelse\n  DOXYGEN_TRUE='#'\n  DOXYGEN_FALSE=\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\nfor ac_header in stdlib.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"stdlib.h\" \"ac_cv_header_stdlib_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_stdlib_h\" = x\"\"yes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_STDLIB_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n# Checks for typedefs, structures, and compiler characteristics.\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\nac_fn_c_check_type \"$LINENO\" \"size_t\" \"ac_cv_type_size_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_size_t\" = x\"\"yes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define size_t unsigned int\n_ACEOF\n\nfi\n\n\n# Define Makefiles.\nac_config_files=\"$ac_config_files yaml-0.1.pc include/Makefile src/Makefile Makefile tests/Makefile win32/Makefile\"\n\n\n# Generate the \"configure\" script.\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=\nU=\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\n if test -n \"$EXEEXT\"; then\n  am__EXEEXT_TRUE=\n  am__EXEEXT_FALSE='#'\nelse\n  am__EXEEXT_TRUE='#'\n  am__EXEEXT_FALSE=\nfi\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 \"${DOXYGEN_TRUE}\" && test -z \"${DOXYGEN_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"DOXYGEN\\\" 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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 yaml $as_me 0.1.4, which was\ngenerated by GNU Autoconf 2.67.  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 <http://pyyaml.org/newticket?component=libyaml>.\"\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=\"\\\\\nyaml config.status 0.1.4\nconfigured by $0, generated by GNU Autoconf 2.67,\n  with options \\\\\"\\$ac_cs_config\\\\\"\n\nCopyright (C) 2010 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'\nMKDIR_P='$MKDIR_P'\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=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=\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    '') as_fn_error $? \"missing file argument\" ;;\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\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\nmacro_version='`$ECHO \"X$macro_version\" | $Xsed -e \"$delay_single_quote_subst\"`'\nmacro_revision='`$ECHO \"X$macro_revision\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_shared='`$ECHO \"X$enable_shared\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_static='`$ECHO \"X$enable_static\" | $Xsed -e \"$delay_single_quote_subst\"`'\npic_mode='`$ECHO \"X$pic_mode\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_fast_install='`$ECHO \"X$enable_fast_install\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhost_alias='`$ECHO \"X$host_alias\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhost='`$ECHO \"X$host\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhost_os='`$ECHO \"X$host_os\" | $Xsed -e \"$delay_single_quote_subst\"`'\nbuild_alias='`$ECHO \"X$build_alias\" | $Xsed -e \"$delay_single_quote_subst\"`'\nbuild='`$ECHO \"X$build\" | $Xsed -e \"$delay_single_quote_subst\"`'\nbuild_os='`$ECHO \"X$build_os\" | $Xsed -e \"$delay_single_quote_subst\"`'\nSED='`$ECHO \"X$SED\" | $Xsed -e \"$delay_single_quote_subst\"`'\nXsed='`$ECHO \"X$Xsed\" | $Xsed -e \"$delay_single_quote_subst\"`'\nGREP='`$ECHO \"X$GREP\" | $Xsed -e \"$delay_single_quote_subst\"`'\nEGREP='`$ECHO \"X$EGREP\" | $Xsed -e \"$delay_single_quote_subst\"`'\nFGREP='`$ECHO \"X$FGREP\" | $Xsed -e \"$delay_single_quote_subst\"`'\nLD='`$ECHO \"X$LD\" | $Xsed -e \"$delay_single_quote_subst\"`'\nNM='`$ECHO \"X$NM\" | $Xsed -e \"$delay_single_quote_subst\"`'\nLN_S='`$ECHO \"X$LN_S\" | $Xsed -e \"$delay_single_quote_subst\"`'\nmax_cmd_len='`$ECHO \"X$max_cmd_len\" | $Xsed -e \"$delay_single_quote_subst\"`'\nac_objext='`$ECHO \"X$ac_objext\" | $Xsed -e \"$delay_single_quote_subst\"`'\nexeext='`$ECHO \"X$exeext\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_unset='`$ECHO \"X$lt_unset\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_SP2NL='`$ECHO \"X$lt_SP2NL\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_NL2SP='`$ECHO \"X$lt_NL2SP\" | $Xsed -e \"$delay_single_quote_subst\"`'\nreload_flag='`$ECHO \"X$reload_flag\" | $Xsed -e \"$delay_single_quote_subst\"`'\nreload_cmds='`$ECHO \"X$reload_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nOBJDUMP='`$ECHO \"X$OBJDUMP\" | $Xsed -e \"$delay_single_quote_subst\"`'\ndeplibs_check_method='`$ECHO \"X$deplibs_check_method\" | $Xsed -e \"$delay_single_quote_subst\"`'\nfile_magic_cmd='`$ECHO \"X$file_magic_cmd\" | $Xsed -e \"$delay_single_quote_subst\"`'\nAR='`$ECHO \"X$AR\" | $Xsed -e \"$delay_single_quote_subst\"`'\nAR_FLAGS='`$ECHO \"X$AR_FLAGS\" | $Xsed -e \"$delay_single_quote_subst\"`'\nSTRIP='`$ECHO \"X$STRIP\" | $Xsed -e \"$delay_single_quote_subst\"`'\nRANLIB='`$ECHO \"X$RANLIB\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_postinstall_cmds='`$ECHO \"X$old_postinstall_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_postuninstall_cmds='`$ECHO \"X$old_postuninstall_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_archive_cmds='`$ECHO \"X$old_archive_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nCC='`$ECHO \"X$CC\" | $Xsed -e \"$delay_single_quote_subst\"`'\nCFLAGS='`$ECHO \"X$CFLAGS\" | $Xsed -e \"$delay_single_quote_subst\"`'\ncompiler='`$ECHO \"X$compiler\" | $Xsed -e \"$delay_single_quote_subst\"`'\nGCC='`$ECHO \"X$GCC\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_pipe='`$ECHO \"X$lt_cv_sys_global_symbol_pipe\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_cdecl='`$ECHO \"X$lt_cv_sys_global_symbol_to_cdecl\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address='`$ECHO \"X$lt_cv_sys_global_symbol_to_c_name_address\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO \"X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\" | $Xsed -e \"$delay_single_quote_subst\"`'\nobjdir='`$ECHO \"X$objdir\" | $Xsed -e \"$delay_single_quote_subst\"`'\nSHELL='`$ECHO \"X$SHELL\" | $Xsed -e \"$delay_single_quote_subst\"`'\nECHO='`$ECHO \"X$ECHO\" | $Xsed -e \"$delay_single_quote_subst\"`'\nMAGIC_CMD='`$ECHO \"X$MAGIC_CMD\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_prog_compiler_no_builtin_flag='`$ECHO \"X$lt_prog_compiler_no_builtin_flag\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_prog_compiler_wl='`$ECHO \"X$lt_prog_compiler_wl\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_prog_compiler_pic='`$ECHO \"X$lt_prog_compiler_pic\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_prog_compiler_static='`$ECHO \"X$lt_prog_compiler_static\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlt_cv_prog_compiler_c_o='`$ECHO \"X$lt_cv_prog_compiler_c_o\" | $Xsed -e \"$delay_single_quote_subst\"`'\nneed_locks='`$ECHO \"X$need_locks\" | $Xsed -e \"$delay_single_quote_subst\"`'\nDSYMUTIL='`$ECHO \"X$DSYMUTIL\" | $Xsed -e \"$delay_single_quote_subst\"`'\nNMEDIT='`$ECHO \"X$NMEDIT\" | $Xsed -e \"$delay_single_quote_subst\"`'\nLIPO='`$ECHO \"X$LIPO\" | $Xsed -e \"$delay_single_quote_subst\"`'\nOTOOL='`$ECHO \"X$OTOOL\" | $Xsed -e \"$delay_single_quote_subst\"`'\nOTOOL64='`$ECHO \"X$OTOOL64\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlibext='`$ECHO \"X$libext\" | $Xsed -e \"$delay_single_quote_subst\"`'\nshrext_cmds='`$ECHO \"X$shrext_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nextract_expsyms_cmds='`$ECHO \"X$extract_expsyms_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\narchive_cmds_need_lc='`$ECHO \"X$archive_cmds_need_lc\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_shared_with_static_runtimes='`$ECHO \"X$enable_shared_with_static_runtimes\" | $Xsed -e \"$delay_single_quote_subst\"`'\nexport_dynamic_flag_spec='`$ECHO \"X$export_dynamic_flag_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nwhole_archive_flag_spec='`$ECHO \"X$whole_archive_flag_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\ncompiler_needs_object='`$ECHO \"X$compiler_needs_object\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_archive_from_new_cmds='`$ECHO \"X$old_archive_from_new_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_archive_from_expsyms_cmds='`$ECHO \"X$old_archive_from_expsyms_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\narchive_cmds='`$ECHO \"X$archive_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\narchive_expsym_cmds='`$ECHO \"X$archive_expsym_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nmodule_cmds='`$ECHO \"X$module_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nmodule_expsym_cmds='`$ECHO \"X$module_expsym_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nwith_gnu_ld='`$ECHO \"X$with_gnu_ld\" | $Xsed -e \"$delay_single_quote_subst\"`'\nallow_undefined_flag='`$ECHO \"X$allow_undefined_flag\" | $Xsed -e \"$delay_single_quote_subst\"`'\nno_undefined_flag='`$ECHO \"X$no_undefined_flag\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_libdir_flag_spec='`$ECHO \"X$hardcode_libdir_flag_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_libdir_flag_spec_ld='`$ECHO \"X$hardcode_libdir_flag_spec_ld\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_libdir_separator='`$ECHO \"X$hardcode_libdir_separator\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_direct='`$ECHO \"X$hardcode_direct\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_direct_absolute='`$ECHO \"X$hardcode_direct_absolute\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_minus_L='`$ECHO \"X$hardcode_minus_L\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_shlibpath_var='`$ECHO \"X$hardcode_shlibpath_var\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_automatic='`$ECHO \"X$hardcode_automatic\" | $Xsed -e \"$delay_single_quote_subst\"`'\ninherit_rpath='`$ECHO \"X$inherit_rpath\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlink_all_deplibs='`$ECHO \"X$link_all_deplibs\" | $Xsed -e \"$delay_single_quote_subst\"`'\nfix_srcfile_path='`$ECHO \"X$fix_srcfile_path\" | $Xsed -e \"$delay_single_quote_subst\"`'\nalways_export_symbols='`$ECHO \"X$always_export_symbols\" | $Xsed -e \"$delay_single_quote_subst\"`'\nexport_symbols_cmds='`$ECHO \"X$export_symbols_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nexclude_expsyms='`$ECHO \"X$exclude_expsyms\" | $Xsed -e \"$delay_single_quote_subst\"`'\ninclude_expsyms='`$ECHO \"X$include_expsyms\" | $Xsed -e \"$delay_single_quote_subst\"`'\nprelink_cmds='`$ECHO \"X$prelink_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nfile_list_spec='`$ECHO \"X$file_list_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nvariables_saved_for_relink='`$ECHO \"X$variables_saved_for_relink\" | $Xsed -e \"$delay_single_quote_subst\"`'\nneed_lib_prefix='`$ECHO \"X$need_lib_prefix\" | $Xsed -e \"$delay_single_quote_subst\"`'\nneed_version='`$ECHO \"X$need_version\" | $Xsed -e \"$delay_single_quote_subst\"`'\nversion_type='`$ECHO \"X$version_type\" | $Xsed -e \"$delay_single_quote_subst\"`'\nrunpath_var='`$ECHO \"X$runpath_var\" | $Xsed -e \"$delay_single_quote_subst\"`'\nshlibpath_var='`$ECHO \"X$shlibpath_var\" | $Xsed -e \"$delay_single_quote_subst\"`'\nshlibpath_overrides_runpath='`$ECHO \"X$shlibpath_overrides_runpath\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlibname_spec='`$ECHO \"X$libname_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nlibrary_names_spec='`$ECHO \"X$library_names_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nsoname_spec='`$ECHO \"X$soname_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\npostinstall_cmds='`$ECHO \"X$postinstall_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\npostuninstall_cmds='`$ECHO \"X$postuninstall_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nfinish_cmds='`$ECHO \"X$finish_cmds\" | $Xsed -e \"$delay_single_quote_subst\"`'\nfinish_eval='`$ECHO \"X$finish_eval\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_into_libs='`$ECHO \"X$hardcode_into_libs\" | $Xsed -e \"$delay_single_quote_subst\"`'\nsys_lib_search_path_spec='`$ECHO \"X$sys_lib_search_path_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nsys_lib_dlsearch_path_spec='`$ECHO \"X$sys_lib_dlsearch_path_spec\" | $Xsed -e \"$delay_single_quote_subst\"`'\nhardcode_action='`$ECHO \"X$hardcode_action\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_dlopen='`$ECHO \"X$enable_dlopen\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_dlopen_self='`$ECHO \"X$enable_dlopen_self\" | $Xsed -e \"$delay_single_quote_subst\"`'\nenable_dlopen_self_static='`$ECHO \"X$enable_dlopen_self_static\" | $Xsed -e \"$delay_single_quote_subst\"`'\nold_striplib='`$ECHO \"X$old_striplib\" | $Xsed -e \"$delay_single_quote_subst\"`'\nstriplib='`$ECHO \"X$striplib\" | $Xsed -e \"$delay_single_quote_subst\"`'\n\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# Quote evaled strings.\nfor var in SED \\\nGREP \\\nEGREP \\\nFGREP \\\nLD \\\nNM \\\nLN_S \\\nlt_SP2NL \\\nlt_NL2SP \\\nreload_flag \\\nOBJDUMP \\\ndeplibs_check_method \\\nfile_magic_cmd \\\nAR \\\nAR_FLAGS \\\nSTRIP \\\nRANLIB \\\nCC \\\nCFLAGS \\\ncompiler \\\nlt_cv_sys_global_symbol_pipe \\\nlt_cv_sys_global_symbol_to_cdecl \\\nlt_cv_sys_global_symbol_to_c_name_address \\\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix \\\nSHELL \\\nECHO \\\nlt_prog_compiler_no_builtin_flag \\\nlt_prog_compiler_wl \\\nlt_prog_compiler_pic \\\nlt_prog_compiler_static \\\nlt_cv_prog_compiler_c_o \\\nneed_locks \\\nDSYMUTIL \\\nNMEDIT \\\nLIPO \\\nOTOOL \\\nOTOOL64 \\\nshrext_cmds \\\nexport_dynamic_flag_spec \\\nwhole_archive_flag_spec \\\ncompiler_needs_object \\\nwith_gnu_ld \\\nallow_undefined_flag \\\nno_undefined_flag \\\nhardcode_libdir_flag_spec \\\nhardcode_libdir_flag_spec_ld \\\nhardcode_libdir_separator \\\nfix_srcfile_path \\\nexclude_expsyms \\\ninclude_expsyms \\\nfile_list_spec \\\nvariables_saved_for_relink \\\nlibname_spec \\\nlibrary_names_spec \\\nsoname_spec \\\nfinish_eval \\\nold_striplib \\\nstriplib; do\n    case \\`eval \\\\\\\\\\$ECHO \"X\\\\\\\\\\$\\$var\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"X\\\\\\$\\$var\\\\\" | \\\\\\$Xsed -e \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in reload_cmds \\\nold_postinstall_cmds \\\nold_postuninstall_cmds \\\nold_archive_cmds \\\nextract_expsyms_cmds \\\nold_archive_from_new_cmds \\\nold_archive_from_expsyms_cmds \\\narchive_cmds \\\narchive_expsym_cmds \\\nmodule_cmds \\\nmodule_expsym_cmds \\\nexport_symbols_cmds \\\nprelink_cmds \\\npostinstall_cmds \\\npostuninstall_cmds \\\nfinish_cmds \\\nsys_lib_search_path_spec \\\nsys_lib_dlsearch_path_spec; do\n    case \\`eval \\\\\\\\\\$ECHO \"X\\\\\\\\\\$\\$var\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"X\\\\\\$\\$var\\\\\" | \\\\\\$Xsed -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Fix-up fallback echo if it was mangled by the above quoting rules.\ncase \\$lt_ECHO in\n*'\\\\\\$0 --fallback-echo\"')  lt_ECHO=\\`\\$ECHO \"X\\$lt_ECHO\" | \\$Xsed -e 's/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\$0 --fallback-echo\"\\$/\\$0 --fallback-echo\"/'\\`\n  ;;\nesac\n\nac_aux_dir='$ac_aux_dir'\nxsi_shell='$xsi_shell'\nlt_shell_append='$lt_shell_append'\n\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'\n\n\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    \"libtool\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS libtool\" ;;\n    \"yaml-0.1.pc\") CONFIG_FILES=\"$CONFIG_FILES yaml-0.1.pc\" ;;\n    \"include/Makefile\") CONFIG_FILES=\"$CONFIG_FILES include/Makefile\" ;;\n    \"src/Makefile\") CONFIG_FILES=\"$CONFIG_FILES src/Makefile\" ;;\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"tests/Makefile\") CONFIG_FILES=\"$CONFIG_FILES tests/Makefile\" ;;\n    \"win32/Makefile\") CONFIG_FILES=\"$CONFIG_FILES win32/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\n\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\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\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\n  print line\n}\n\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 sole $(srcdir),\n# ${srcdir} and @srcdir@ entries 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 ]*=[\t ]*/{\nh\ns///\ns/^/:/\ns/[\t ]*$/:/\ns/:\\$(srcdir):/:/g\ns/:\\${srcdir}:/:/g\ns/:@srcdir@:/:/g\ns/^:*//\ns/:*$//\nx\ns/\\(=[\t ]*\\).*/\\1/\nG\ns/\\n//\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 1 \"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  ac_MKDIR_P=$MKDIR_P\n  case $MKDIR_P in\n  [\\\\/$]* | ?:[\\\\/]* ) ;;\n  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;\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\ns&@MKDIR_P@&$ac_MKDIR_P&;t t\n$ac_datarootdir_hack\n\"\neval sed \\\"\\$ac_sed_extra\\\" \"$ac_file_inputs\" | $AWK -f \"$tmp/subs.awk\" >$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_arg=\"$ac_file\"\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $_am_arg | $_am_arg:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $_am_arg\" >`$as_dirname -- \"$_am_arg\" ||\n$as_expr X\"$_am_arg\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$_am_arg\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$_am_arg\" : 'X\\(//\\)$' \\| \\\n\t X\"$_am_arg\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$_am_arg\" |\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\"\" || {\n  # Autoconf 2.62 quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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\t 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\n  done\n}\n ;;\n    \"libtool\":C)\n\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008 Free Software Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n\n# The names of the tagged configurations supported by this script.\navailable_tags=\"\"\n\n# ### BEGIN LIBTOOL CONFIG\n\n# Which release of libtool.m4 was used?\nmacro_version=$macro_version\nmacro_revision=$macro_revision\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# What type of objects to build.\npic_mode=$pic_mode\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# A sed program that does not truncate output.\nSED=$lt_SED\n\n# Sed that helps us avoid accidentally triggering echo(1) options like -n.\nXsed=\"\\$SED -e 1s/^X//\"\n\n# A grep program that handles long lines.\nGREP=$lt_GREP\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# A literal string matcher.\nFGREP=$lt_FGREP\n\n# A BSD- or MS-compatible name lister.\nNM=$lt_NM\n\n# Whether we need soft or hard links.\nLN_S=$lt_LN_S\n\n# What is the maximum length of a command?\nmax_cmd_len=$max_cmd_len\n\n# Object file suffix (normally \"o\").\nobjext=$ac_objext\n\n# Executable file suffix (normally \"\").\nexeext=$exeext\n\n# whether the shell understands \"unset\".\nlt_unset=$lt_unset\n\n# turn spaces into newlines.\nSP2NL=$lt_lt_SP2NL\n\n# turn newlines into spaces.\nNL2SP=$lt_lt_NL2SP\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# An object symbol dumper.\nOBJDUMP=$lt_OBJDUMP\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method == \"file_magic\".\nfile_magic_cmd=$lt_file_magic_cmd\n\n# The archiver.\nAR=$lt_AR\nAR_FLAGS=$lt_AR_FLAGS\n\n# A symbol stripping program.\nSTRIP=$lt_STRIP\n\n# Commands used to install an old-style archive.\nRANLIB=$lt_RANLIB\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# A C compiler.\nLTCC=$lt_CC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_CFLAGS\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration.\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair.\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# Transform the output of nm in a C name address pair when lib prefix is needed.\nglobal_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# An echo program that does not interpret backslashes.\nECHO=$lt_ECHO\n\n# Used to examine libraries when file_magic_cmd begins with \"file\".\nMAGIC_CMD=$MAGIC_CMD\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Tool to manipulate archived DWARF debug symbol files on Mac OS X.\nDSYMUTIL=$lt_DSYMUTIL\n\n# Tool to change global to local symbols on Mac OS X.\nNMEDIT=$lt_NMEDIT\n\n# Tool to manipulate fat objects and archives on Mac OS X.\nLIPO=$lt_LIPO\n\n# ldd/readelf like tool for Mach-O binaries on Mac OS X.\nOTOOL=$lt_OTOOL\n\n# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.\nOTOOL64=$lt_OTOOL64\n\n# Old archive suffix (normally \"a\").\nlibext=$libext\n\n# Shared library suffix (normally \".so\").\nshrext_cmds=$lt_shrext_cmds\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at link time.\nvariables_saved_for_relink=$lt_variables_saved_for_relink\n\n# Do we need the \"lib\" prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Library versioning type.\nversion_type=$version_type\n\n# Shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# Shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Command to use after installation of a shared archive.\npostinstall_cmds=$lt_postinstall_cmds\n\n# Command to use after uninstallation of a shared archive.\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# As \"finish_cmds\", except a single script fragment to be evaled but\n# not shown.\nfinish_eval=$lt_finish_eval\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Compile-time system search path for libraries.\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries.\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n\n# The linker used to build libraries.\nLD=$lt_LD\n\n# Commands used to build an old-style archive.\nold_archive_cmds=$lt_old_archive_cmds\n\n# A language specific compiler.\nCC=$lt_compiler\n\n# Is the compiler the GNU compiler?\nwith_gcc=$GCC\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc\n\n# Whether or not to disallow shared libs when runtime libs are static.\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec\n\n# Whether the compiler copes with passing no objects directly.\ncompiler_needs_object=$lt_compiler_needs_object\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds\n\n# Commands used to build a shared archive.\narchive_cmds=$lt_archive_cmds\narchive_expsym_cmds=$lt_archive_expsym_cmds\n\n# Commands used to build a loadable module if different from building\n# a shared archive.\nmodule_cmds=$lt_module_cmds\nmodule_expsym_cmds=$lt_module_expsym_cmds\n\n# Whether we are building with GNU ld or not.\nwith_gnu_ld=$lt_with_gnu_ld\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag\n\n# Flag that enforces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag\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=$lt_hardcode_libdir_flag_spec\n\n# If ld is used when linking, flag to hardcode \\$libdir into a binary\n# during linking.  This must work even if \\$libdir does not exist.\nhardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld\n\n# Whether we need a single \"-rpath\" flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary.\nhardcode_direct=$hardcode_direct\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary and the resulting library dependency is\n# \"absolute\",i.e impossible to change by setting \\${shlibpath_var} if the\n# library is relocated.\nhardcode_direct_absolute=$hardcode_direct_absolute\n\n# Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n# into the resulting binary.\nhardcode_minus_L=$hardcode_minus_L\n\n# Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n# into the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var\n\n# Set to \"yes\" if building a shared library automatically hardcodes DIR\n# into the library and all subsequent libraries and executables linked\n# against it.\nhardcode_automatic=$hardcode_automatic\n\n# Set to yes if linker adds runtime paths of dependent libraries\n# to runtime path list.\ninherit_rpath=$inherit_rpath\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs\n\n# Fix the shell variable \\$srcfile for the compiler.\nfix_srcfile_path=$lt_fix_srcfile_path\n\n# Set to \"yes\" if exported symbols are required.\nalways_export_symbols=$always_export_symbols\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms\n\n# Commands necessary for linking programs (against libraries) with templates.\nprelink_cmds=$lt_prelink_cmds\n\n# Specify filename containing input files.\nfile_list_spec=$lt_file_list_spec\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action\n\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\n\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '/^# Generated shell functions inserted here/q' \"$ltmain\" >> \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\"; exit 1)\n\n  case $xsi_shell in\n  yes)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n  case ${1} in\n    */*) func_dirname_result=\"${1%/*}${2}\" ;;\n    *  ) func_dirname_result=\"${3}\" ;;\n  esac\n}\n\n# func_basename file\nfunc_basename ()\n{\n  func_basename_result=\"${1##*/}\"\n}\n\n# func_dirname_and_basename file append nondir_replacement\n# perform func_basename and func_dirname in a single function\n# call:\n#   dirname:  Compute the dirname of FILE.  If nonempty,\n#             add APPEND to the result, otherwise set result\n#             to NONDIR_REPLACEMENT.\n#             value returned in \"$func_dirname_result\"\n#   basename: Compute filename of FILE.\n#             value retuned in \"$func_basename_result\"\n# Implementation must be kept synchronized with func_dirname\n# and func_basename. For efficiency, we do not delegate to\n# those functions but instead duplicate the functionality here.\nfunc_dirname_and_basename ()\n{\n  case ${1} in\n    */*) func_dirname_result=\"${1%/*}${2}\" ;;\n    *  ) func_dirname_result=\"${3}\" ;;\n  esac\n  func_basename_result=\"${1##*/}\"\n}\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\nfunc_stripname ()\n{\n  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\n  # positional parameters, so assign one to ordinary parameter first.\n  func_stripname_result=${3}\n  func_stripname_result=${func_stripname_result#\"${1}\"}\n  func_stripname_result=${func_stripname_result%\"${2}\"}\n}\n\n# func_opt_split\nfunc_opt_split ()\n{\n  func_opt_split_opt=${1%%=*}\n  func_opt_split_arg=${1#*=}\n}\n\n# func_lo2o object\nfunc_lo2o ()\n{\n  case ${1} in\n    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\n    *)    func_lo2o_result=${1} ;;\n  esac\n}\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n  func_xform_result=${1%.*}.lo\n}\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n  func_arith_result=$(( $* ))\n}\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n  func_len_result=${#1}\n}\n\n_LT_EOF\n    ;;\n  *) # Bourne compatible functions.\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n  # Extract subdirectory from the argument.\n  func_dirname_result=`$ECHO \"X${1}\" | $Xsed -e \"$dirname\"`\n  if test \"X$func_dirname_result\" = \"X${1}\"; then\n    func_dirname_result=\"${3}\"\n  else\n    func_dirname_result=\"$func_dirname_result${2}\"\n  fi\n}\n\n# func_basename file\nfunc_basename ()\n{\n  func_basename_result=`$ECHO \"X${1}\" | $Xsed -e \"$basename\"`\n}\n\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n# func_strip_suffix prefix name\nfunc_stripname ()\n{\n  case ${2} in\n    .*) func_stripname_result=`$ECHO \"X${3}\" \\\n           | $Xsed -e \"s%^${1}%%\" -e \"s%\\\\\\\\${2}\\$%%\"`;;\n    *)  func_stripname_result=`$ECHO \"X${3}\" \\\n           | $Xsed -e \"s%^${1}%%\" -e \"s%${2}\\$%%\"`;;\n  esac\n}\n\n# sed scripts:\nmy_sed_long_opt='1s/^\\(-[^=]*\\)=.*/\\1/;q'\nmy_sed_long_arg='1s/^-[^=]*=//'\n\n# func_opt_split\nfunc_opt_split ()\n{\n  func_opt_split_opt=`$ECHO \"X${1}\" | $Xsed -e \"$my_sed_long_opt\"`\n  func_opt_split_arg=`$ECHO \"X${1}\" | $Xsed -e \"$my_sed_long_arg\"`\n}\n\n# func_lo2o object\nfunc_lo2o ()\n{\n  func_lo2o_result=`$ECHO \"X${1}\" | $Xsed -e \"$lo2o\"`\n}\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n  func_xform_result=`$ECHO \"X${1}\" | $Xsed -e 's/\\.[^.]*$/.lo/'`\n}\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n  func_arith_result=`expr \"$@\"`\n}\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n  func_len_result=`expr \"$1\" : \".*\" 2>/dev/null || echo $max_cmd_len`\n}\n\n_LT_EOF\nesac\n\ncase $lt_shell_append in\n  yes)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n  eval \"$1+=\\$2\"\n}\n_LT_EOF\n    ;;\n  *)\n    cat << \\_LT_EOF >> \"$cfgfile\"\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n  eval \"$1=\\$$1\\$2\"\n}\n\n_LT_EOF\n    ;;\n  esac\n\n\n  sed -n '/^# Generated shell functions inserted here/,$p' \"$ltmain\" >> \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\"; exit 1)\n\n  mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n\n ;;\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 1\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"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/configure.ac",
    "content": "# Run `./bootstrap` to generate the \"configure\" script.\n\n# Define the package version numbers and the bug reporting link.\nm4_define([YAML_MAJOR], 0)\nm4_define([YAML_MINOR], 1)\nm4_define([YAML_PATCH], 4)\nm4_define([YAML_BUGS], [http://pyyaml.org/newticket?component=libyaml])\n\n# Define the libtool version numbers; check the Autobook, Section 11.4.\n# Bump the libtool version numbers using the following algorithm:\n#   if (the current interface has not been changed):\n#       YAML_REVISION += 1\n#   else:\n#       YAML_REVISION = 0\n#       YAML_CURRENT += 1\n#       if (this release is backward compatible with the previous release):\n#           YAML_AGE += 1\n#       else:\n#           YAML_AGE = 0\nm4_define([YAML_RELEASE], 0)\nm4_define([YAML_CURRENT], 2)\nm4_define([YAML_REVISION], 2)\nm4_define([YAML_AGE], 0)\n\n# Initialize autoconf & automake.\nAC_PREREQ(2.59)\nAC_INIT([yaml], [YAML_MAJOR.YAML_MINOR.YAML_PATCH], [YAML_BUGS])\nAC_CONFIG_AUX_DIR([config])\nAC_CONFIG_HEADERS([config.h])\nAM_INIT_AUTOMAKE([1.9 foreign])\n\n# Define macro variables for the package version numbers.\nAC_DEFINE(YAML_VERSION_MAJOR, YAML_MAJOR, [Define the major version number.])\nAC_DEFINE(YAML_VERSION_MINOR, YAML_MINOR, [Define the minor version number.])\nAC_DEFINE(YAML_VERSION_PATCH, YAML_PATCH, [Define the patch version number.])\nAC_DEFINE(YAML_VERSION_STRING, \"YAML_MAJOR.YAML_MINOR.YAML_PATCH\", [Define the version string.])\n\n# Define substitutions for the libtool version numbers.\nYAML_LT_RELEASE=YAML_RELEASE\nYAML_LT_CURRENT=YAML_CURRENT\nYAML_LT_REVISION=YAML_REVISION\nYAML_LT_AGE=YAML_AGE\nAC_SUBST(YAML_LT_RELEASE)\nAC_SUBST(YAML_LT_CURRENT)\nAC_SUBST(YAML_LT_REVISION)\nAC_SUBST(YAML_LT_AGE)\n\n# Note: in order to update checks, run `autoscan` and look through \"configure.scan\".\n\n# Checks for programs.\nAC_PROG_CC\nAC_PROG_CPP\nAC_PROG_INSTALL\nAC_PROG_LN_S\nAC_PROG_MAKE_SET\nAC_PROG_LIBTOOL\n\nAC_CHECK_PROG(DOXYGEN, [doxygen], [true], [false])\nAM_CONDITIONAL(DOXYGEN, [test \"$DOXYGEN\" = true])\n\n# Checks for header files.\nAC_HEADER_STDC\nAC_CHECK_HEADERS([stdlib.h])\n\n# Checks for typedefs, structures, and compiler characteristics.\nAC_C_CONST\nAC_TYPE_SIZE_T\n\n# Define Makefiles.\nAC_CONFIG_FILES([yaml-0.1.pc include/Makefile src/Makefile Makefile tests/Makefile win32/Makefile])\n\n# Generate the \"configure\" script.\nAC_OUTPUT\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/doxygen.cfg",
    "content": "# Doxyfile 1.4.4\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\nPROJECT_NAME           = $(PACKAGE)\nPROJECT_NUMBER         = $(VERSION)\nOUTPUT_DIRECTORY       = $(top_builddir)/doc/\nCREATE_SUBDIRS         = NO\nOUTPUT_LANGUAGE        = English\nUSE_WINDOWS_ENCODING   = NO\nBRIEF_MEMBER_DESC      = YES\nREPEAT_BRIEF           = YES\nABBREVIATE_BRIEF       = \nALWAYS_DETAILED_SEC    = NO\nINLINE_INHERITED_MEMB  = NO\nFULL_PATH_NAMES        = YES\nSTRIP_FROM_PATH        = \nSTRIP_FROM_INC_PATH    = \nSHORT_NAMES            = NO\nJAVADOC_AUTOBRIEF      = YES\nMULTILINE_CPP_IS_BRIEF = NO\nDETAILS_AT_TOP         = NO\nINHERIT_DOCS           = YES\nDISTRIBUTE_GROUP_DOC   = NO\nSEPARATE_MEMBER_PAGES  = NO\nTAB_SIZE               = 8\nALIASES                = \nOPTIMIZE_OUTPUT_FOR_C  = YES\nOPTIMIZE_OUTPUT_JAVA   = NO\nSUBGROUPING            = YES\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\nEXTRACT_ALL            = NO\nEXTRACT_PRIVATE        = NO\nEXTRACT_STATIC         = NO\nEXTRACT_LOCAL_CLASSES  = NO\nEXTRACT_LOCAL_METHODS  = NO\nHIDE_UNDOC_MEMBERS     = NO\nHIDE_UNDOC_CLASSES     = NO\nHIDE_FRIEND_COMPOUNDS  = NO\nHIDE_IN_BODY_DOCS      = NO\nINTERNAL_DOCS          = NO\nCASE_SENSE_NAMES       = YES\nHIDE_SCOPE_NAMES       = NO\nSHOW_INCLUDE_FILES     = YES\nINLINE_INFO            = YES\nSORT_MEMBER_DOCS       = NO\nSORT_BRIEF_DOCS        = NO\nSORT_BY_SCOPE_NAME     = NO\nGENERATE_TODOLIST      = YES\nGENERATE_TESTLIST      = YES\nGENERATE_BUGLIST       = YES\nGENERATE_DEPRECATEDLIST= YES\nENABLED_SECTIONS       = \nMAX_INITIALIZER_LINES  = 30\nSHOW_USED_FILES        = YES\nSHOW_DIRECTORIES       = YES\nFILE_VERSION_FILTER    = \n#---------------------------------------------------------------------------\n# configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\nQUIET                  = NO\nWARNINGS               = YES\nWARN_IF_UNDOCUMENTED   = YES\nWARN_IF_DOC_ERROR      = YES\nWARN_NO_PARAMDOC       = NO\nWARN_FORMAT            = \"$file:$line: $text\"\nWARN_LOGFILE           = \n#---------------------------------------------------------------------------\n# configuration options related to the input files\n#---------------------------------------------------------------------------\nINPUT                  = $(top_srcdir)/include/\nFILE_PATTERNS          = *.h\nRECURSIVE              = YES\nEXCLUDE                = \nEXCLUDE_SYMLINKS       = NO\nEXCLUDE_PATTERNS       = \nEXAMPLE_PATH           = \nEXAMPLE_PATTERNS       = \nEXAMPLE_RECURSIVE      = NO\nIMAGE_PATH             = \nINPUT_FILTER           = \nFILTER_PATTERNS        = \nFILTER_SOURCE_FILES    = NO\n#---------------------------------------------------------------------------\n# configuration options related to source browsing\n#---------------------------------------------------------------------------\nSOURCE_BROWSER         = NO\nINLINE_SOURCES         = NO\nSTRIP_CODE_COMMENTS    = YES\nREFERENCED_BY_RELATION = NO\nREFERENCES_RELATION    = NO\nUSE_HTAGS              = NO\nVERBATIM_HEADERS       = NO\n#---------------------------------------------------------------------------\n# configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\nALPHABETICAL_INDEX     = NO\nCOLS_IN_ALPHA_INDEX    = 5\nIGNORE_PREFIX          = \n#---------------------------------------------------------------------------\n# configuration options related to the HTML output\n#---------------------------------------------------------------------------\nGENERATE_HTML          = YES\nHTML_OUTPUT            = html\nHTML_FILE_EXTENSION    = .html\nHTML_HEADER            = \nHTML_FOOTER            = \nHTML_STYLESHEET        = \nHTML_ALIGN_MEMBERS     = YES\nGENERATE_HTMLHELP      = NO\nCHM_FILE               = \nHHC_LOCATION           = \nGENERATE_CHI           = NO\nBINARY_TOC             = NO\nTOC_EXPAND             = NO\nDISABLE_INDEX          = NO\nENUM_VALUES_PER_LINE   = 1\nGENERATE_TREEVIEW      = NO\nTREEVIEW_WIDTH         = 250\n#---------------------------------------------------------------------------\n# configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\nGENERATE_LATEX         = NO\nLATEX_OUTPUT           = latex\nLATEX_CMD_NAME         = latex\nMAKEINDEX_CMD_NAME     = makeindex\nCOMPACT_LATEX          = NO\nPAPER_TYPE             = a4wide\nEXTRA_PACKAGES         = \nLATEX_HEADER           = \nPDF_HYPERLINKS         = NO\nUSE_PDFLATEX           = NO\nLATEX_BATCHMODE        = NO\nLATEX_HIDE_INDICES     = NO\n#---------------------------------------------------------------------------\n# configuration options related to the RTF output\n#---------------------------------------------------------------------------\nGENERATE_RTF           = NO\nRTF_OUTPUT             = rtf\nCOMPACT_RTF            = NO\nRTF_HYPERLINKS         = NO\nRTF_STYLESHEET_FILE    = \nRTF_EXTENSIONS_FILE    = \n#---------------------------------------------------------------------------\n# configuration options related to the man page output\n#---------------------------------------------------------------------------\nGENERATE_MAN           = NO\nMAN_OUTPUT             = man\nMAN_EXTENSION          = .3\nMAN_LINKS              = NO\n#---------------------------------------------------------------------------\n# configuration options related to the XML output\n#---------------------------------------------------------------------------\nGENERATE_XML           = NO\nXML_OUTPUT             = xml\nXML_SCHEMA             = \nXML_DTD                = \nXML_PROGRAMLISTING     = YES\n#---------------------------------------------------------------------------\n# configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\nGENERATE_AUTOGEN_DEF   = NO\n#---------------------------------------------------------------------------\n# configuration options related to the Perl module output\n#---------------------------------------------------------------------------\nGENERATE_PERLMOD       = NO\nPERLMOD_LATEX          = NO\nPERLMOD_PRETTY         = YES\nPERLMOD_MAKEVAR_PREFIX = \n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor   \n#---------------------------------------------------------------------------\nENABLE_PREPROCESSING   = YES\nMACRO_EXPANSION        = YES\nEXPAND_ONLY_PREDEF     = YES\nSEARCH_INCLUDES        = YES\nINCLUDE_PATH           = \nINCLUDE_FILE_PATTERNS  = \nPREDEFINED             = \"YAML_DECLARE(type)=type\"\nEXPAND_AS_DEFINED      = \nSKIP_FUNCTION_MACROS   = YES\n#---------------------------------------------------------------------------\n# Configuration::additions related to external references   \n#---------------------------------------------------------------------------\nTAGFILES               = \nGENERATE_TAGFILE       = \nALLEXTERNALS           = NO\nEXTERNAL_GROUPS        = YES\nPERL_PATH              = /usr/bin/perl\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool   \n#---------------------------------------------------------------------------\nCLASS_DIAGRAMS         = NO\nHIDE_UNDOC_RELATIONS   = YES\nHAVE_DOT               = NO\nCLASS_GRAPH            = YES\nCOLLABORATION_GRAPH    = YES\nGROUP_GRAPHS           = YES\nUML_LOOK               = NO\nTEMPLATE_RELATIONS     = NO\nINCLUDE_GRAPH          = YES\nINCLUDED_BY_GRAPH      = YES\nCALL_GRAPH             = NO\nGRAPHICAL_HIERARCHY    = YES\nDIRECTORY_GRAPH        = YES\nDOT_IMAGE_FORMAT       = png\nDOT_PATH               = \nDOTFILE_DIRS           = \nMAX_DOT_GRAPH_WIDTH    = 1024\nMAX_DOT_GRAPH_HEIGHT   = 1024\nMAX_DOT_GRAPH_DEPTH    = 0\nDOT_TRANSPARENT        = NO\nDOT_MULTI_TARGETS      = NO\nGENERATE_LEGEND        = YES\nDOT_CLEANUP            = YES\n#---------------------------------------------------------------------------\n# Configuration::additions related to the search engine   \n#---------------------------------------------------------------------------\nSEARCHENGINE           = NO\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/annotated.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Structures</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>Data Structures</h1>  </div>\n</div>\n<div class=\"contents\">\nHere are the data structures with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a></td><td class=\"indexvalue\">This structure holds aliases data </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a></td><td class=\"indexvalue\">The document structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a></td><td class=\"indexvalue\">The emitter structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a></td><td class=\"indexvalue\">The event structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a></td><td class=\"indexvalue\">The pointer position </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a></td><td class=\"indexvalue\">An element of a mapping node </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a></td><td class=\"indexvalue\">The node structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a></td><td class=\"indexvalue\">The parser structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a></td><td class=\"indexvalue\">This structure holds information about a potential simple key </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a></td><td class=\"indexvalue\">The tag directive data </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a></td><td class=\"indexvalue\">The token structure </td></tr>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a></td><td class=\"indexvalue\">The version directive data </td></tr>\n</table>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/classes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Alphabetical List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>Data Structure Index</h1>  </div>\n</div>\n<div class=\"contents\">\n<div class=\"qindex\"><a class=\"qindex\" href=\"#letter_Y\">Y</a></div>\n<table align=\"center\" width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tr><td><a name=\"letter_Y\"></a><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><div class=\"ah\">&nbsp;&nbsp;Y&nbsp;&nbsp;</div></td></tr></table>\n</td><td><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a>&nbsp;&nbsp;&nbsp;</td><td><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a>&nbsp;&nbsp;&nbsp;</td></tr></table><div class=\"qindex\"><a class=\"qindex\" href=\"#letter_Y\">Y</a></div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/doxygen.css",
    "content": "/* The standard CSS for doxygen */\n\nbody, table, div, p, dl {\n\tfont-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;\n\tfont-size: 12px;\n}\n\n/* @group Heading Levels */\n\nh1 {\n\tfont-size: 150%;\n}\n\nh2 {\n\tfont-size: 120%;\n}\n\nh3 {\n\tfont-size: 100%;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd, p.starttd {\n\tmargin-top: 2px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tpadding: 2px;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #3D578C;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #4665A2;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code {\n\tcolor: #4665A2;\n}\n\na.codeRef {\n\tcolor: #4665A2;\n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\n.fragment {\n\tfont-family: monospace, fixed;\n\tfont-size: 105%;\n}\n\npre.fragment {\n\tborder: 1px solid #C4CFE5;\n\tbackground-color: #FBFCFD;\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\toverflow: auto;\n\tword-wrap: break-word;\n\tfont-size:  9pt;\n\tline-height: 125%;\n}\n\ndiv.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tmargin-bottom: 6px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tbackground: white;\n\tcolor: black;\n        margin: 0;\n}\n\ndiv.contents {\n\tmargin-top: 10px;\n\tmargin-left: 10px;\n\tmargin-right: 10px;\n}\n\ntd.indexkey {\n\tbackground-color: #EBEFF6;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n}\n\ntd.indexvalue {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #EEF1F7;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n        margin-top: 0px;\n        margin-bottom: 0px;\n        padding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\ttext-align: right;\n\tpadding-right: 12px;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #A3B4D7;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\theight: 1px;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #F9FAFC;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memItemLeft, .memItemRight, .memTemplParams {\n\tborder-top: 1px solid #C4CFE5;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memTemplParams {\n\tcolor: #4665A2;\n        white-space: nowrap;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 3px;\n}\n\n.memnav {\n\tbackground-color: #EBEFF6;\n\tborder: 1px solid #A3B4D7;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n}\n\n.memname {\n        white-space: nowrap;\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memproto {\n        border-top: 1px solid #A8B8D9;\n        border-left: 1px solid #A8B8D9;\n        border-right: 1px solid #A8B8D9;\n        padding: 6px 0px 6px 0px;\n        color: #253555;\n        font-weight: bold;\n        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 8px;\n        -moz-border-radius-topleft: 8px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 8px;\n        -webkit-border-top-left-radius: 8px;\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n\n}\n\n.memdoc {\n        border-bottom: 1px solid #A8B8D9;      \n        border-left: 1px solid #A8B8D9;      \n        border-right: 1px solid #A8B8D9; \n        padding: 2px 5px;\n        background-color: #FBFCFD;\n        border-top-width: 0;\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 8px;\n        -moz-border-radius-bottomright: 8px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 8px;\n        -webkit-border-bottom-right-radius: 8px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n\n/* @end */\n\n/* @group Directory (tree) */\n\n/* for the tree view */\n\n.ftvtree {\n\tfont-family: sans-serif;\n\tmargin: 0px;\n}\n\n/* these are for tree view when used as main index */\n\n.directory {\n\tfont-size: 9pt;\n\tfont-weight: bold;\n\tmargin: 5px;\n}\n\n.directory h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n/*\nThe following two styles can be used to replace the root node title\nwith an image of your choice.  Simply uncomment the next two styles,\nspecify the name of your image and be sure to set 'height' to the\nproper pixel height of your image.\n*/\n\n/*\n.directory h3.swap {\n\theight: 61px;\n\tbackground-repeat: no-repeat;\n\tbackground-image: url(\"yourimage.gif\");\n}\n.directory h3.swap span {\n\tdisplay: none;\n}\n*/\n\n.directory > h3 {\n\tmargin-top: 0;\n}\n\n.directory p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n/* these are for tree view when not used as main index */\n\n.directory-alt {\n\tfont-size: 100%;\n\tfont-weight: bold;\n}\n\n.directory-alt h3 {\n\tmargin: 0px;\n\tmargin-top: 1em;\n\tfont-size: 11pt;\n}\n\n.directory-alt > h3 {\n\tmargin-top: 0;\n}\n\n.directory-alt p {\n\tmargin: 0px;\n\twhite-space: nowrap;\n}\n\n.directory-alt div {\n\tdisplay: none;\n\tmargin: 0px;\n}\n\n.directory-alt img {\n\tvertical-align: -30%;\n}\n\n/* @end */\n\ndiv.dynheader {\n        margin-top: 8px;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n\ttext-align:left;\n}\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\tbackground-image:url('tab_b.png');\n\tbackground-repeat:repeat-x;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#8AA0CC;\n\tborder:solid 1px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right: 15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#364D7C;\n}\n\n.navpath a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n}\n\n.navpath a:hover\n{\n\tcolor:#6884BD;\n}\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}       \n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n        background-image:url('nav_h.png');\n        background-repeat:repeat-x;\n\tbackground-color: #F9FAFC;\n\tmargin:  0px;\n\tborder-bottom: 1px solid #C4CFE5;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: File Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>File List</h1>  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented files with brief descriptions:<table>\n  <tr><td class=\"indexkey\"><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></td><td class=\"indexvalue\">Public interface for libyaml </td></tr>\n</table>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>alias\n: <a class=\"el\" href=\"structyaml__token__s.html#a1f942353efa1972a38a0763afefabe0c\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#ac21f0f1e12207b8fd4f02496259f6c0b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a1129c6f9ae5cd3b437b8ab8767324f03\">yaml_emitter_s</a>\n</li>\n<li>aliases\n: <a class=\"el\" href=\"structyaml__parser__s.html#a0c10698207d727f9e5d9ced627d130ef\">yaml_parser_s</a>\n</li>\n<li>anchor\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#ac4b9a352dd8ff747bfa63a54832d7962\">yaml_alias_data_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#acc0f6636995f5fe332604b74571e6cfa\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">yaml_event_s</a>\n</li>\n<li>anchor_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad8883d967ee02e3e15e58bc2533188cc\">yaml_emitter_s</a>\n</li>\n<li>anchor_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aece73cc234475630032b1c75a735eeb5\">yaml_emitter_s</a>\n</li>\n<li>anchors\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad4e7a72cb8b1b67373ba6d76a5229e6b\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>best_indent\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a33545f8924be89daf8b81dc905d558c0\">yaml_emitter_s</a>\n</li>\n<li>best_width\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a56dde6b352bdf7d4031f89d2b5d704f6\">yaml_emitter_s</a>\n</li>\n<li>block_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a64e05972897d02f606627ef0cf3c7420\">yaml_emitter_s</a>\n</li>\n<li>block_plain_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5b5f6c9d687d788c8dac86d213ef4c16\">yaml_emitter_s</a>\n</li>\n<li>buffer\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afb2700e9b866b5be0ff6c7549c719f81\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#afc56b6252bd75ec87edec5c80a5c733e\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>canonical\n: <a class=\"el\" href=\"structyaml__emitter__s.html#acb0259cdc5e2bb23faaf7266496df827\">yaml_emitter_s</a>\n</li>\n<li>closed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a978d894a219686d31d971899e31910cd\">yaml_emitter_s</a>\n</li>\n<li>column\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a678fbbacad5d1f3f9bb7516282888b8a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__mark__s.html#aaa18357a6fb2bb377b969ce9ff589797\">yaml_mark_s</a>\n</li>\n<li>context\n: <a class=\"el\" href=\"structyaml__parser__s.html#a6779b67a23bbf7c401e4257d5875ae6b\">yaml_parser_s</a>\n</li>\n<li>context_mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#ace259eec6e570f94b98b252e1a632e88\">yaml_parser_s</a>\n</li>\n<li>current\n: <a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"structyaml__token__s.html#aedb5be9b6b8f5ef6c129575e84f63605\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a0b8f9cce08e49459e4bab89035dbf6c6\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a7e1be921e921f2d0911e450a063b1344\">yaml_node_s</a>\n</li>\n<li>document\n: <a class=\"el\" href=\"structyaml__emitter__s.html#af9cc8801cc9b46a4f45255c67a1574a7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ac3dad5822f49d86cfddc2e5e415a158c\">yaml_parser_s</a>\n</li>\n<li>document_end\n: <a class=\"el\" href=\"structyaml__event__s.html#acffec5f24c01bb6bfb0c93a9bf1a803e\">yaml_event_s</a>\n</li>\n<li>document_start\n: <a class=\"el\" href=\"structyaml__event__s.html#aed593fadbeb898d6d90b0c62522a82cc\">yaml_event_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>encoding\n: <a class=\"el\" href=\"structyaml__token__s.html#aab75b9cb91438e0e1efe2522652cf478\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a92139ba6ae79089fd9a2f5f4aeaf733f\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ada17f19fa6248d6ee493684b03700857\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a\">yaml_parser_s</a>\n</li>\n<li>end\n: <a class=\"el\" href=\"structyaml__document__s.html#adc9ffcca86a2684362428da69ffd3dea\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a211a0aedc964ba8cd07cb7875faa464b\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#af14fd1a6c1fd10088391f07349ba55e8\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aa7fdc1ff8342636119934ac824a2ecc8\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a3b28127063323de1d88fc18cdb6adf8a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a115b4a9797f3a72cd78d42c85100317c\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a55703a15e71c6b9551a2f4feb888bdcb\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6ff1f802eb95bc45f13e8e73ec009828\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ac9b3d891f9fcd5462289823716deca0e\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aa768a9c29ae2c3015fdb84ea313844e2\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6669a94bc18247491e59c709852be0d1\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a41594b6495f4d31edb977cafb8cbaf78\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a1827ba7f3e7f7e94171fa20ade25345d\">yaml_node_s</a>\n</li>\n<li>end_implicit\n: <a class=\"el\" href=\"structyaml__document__s.html#a59de90b4078659fd0f49377929afcac1\">yaml_document_s</a>\n</li>\n<li>end_mark\n: <a class=\"el\" href=\"structyaml__event__s.html#a9307f91473094c229738b03d223bc4ba\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a63144671fd16f94f72c6d537360f7328\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a97f08b38dfb0a5be26ef8831864a5311\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a9299efdaadf764f4d03641a3ee51e0d0\">yaml_document_s</a>\n</li>\n<li>eof\n: <a class=\"el\" href=\"structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7\">yaml_parser_s</a>\n</li>\n<li>error\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afa2d6367a86ae6d43df14e24479bb0a7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472\">yaml_parser_s</a>\n</li>\n<li>events\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3516b49eb7579e422750a94a9d7c1700\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>file\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae69c2974e3c4c37e941a0e1971be15a9\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#abfe1e82cd5c4a180b1468e65ccfd1c61\">yaml_emitter_s</a>\n</li>\n<li>flow_level\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a50f8e97c4290b83ebd646b4c4f5c5de9\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6a4bbbd3f58533e0969b7218c1e73fd4\">yaml_parser_s</a>\n</li>\n<li>flow_plain_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afd8496f5bb995bb5aacc349fd6b45bf5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>handle\n: <a class=\"el\" href=\"structyaml__tag__directive__s.html#a9934c62f2b18fd087a95af25c7739490\">yaml_tag_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a01665687653c945a6666dd9debaecd65\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a7f043a9092eef2d644cc8f1180386239\">yaml_emitter_s</a>\n</li>\n<li>handle_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3552cece6908f99518205e8cbe2c793a\">yaml_emitter_s</a>\n</li>\n<li>head\n: <a class=\"el\" href=\"structyaml__parser__s.html#aa1c7a1248ca22159a3e60ba45b386507\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a547dfd20576006e606ffb0d8042b4234\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">yaml_event_s</a>\n</li>\n<li>indent\n: <a class=\"el\" href=\"structyaml__parser__s.html#abad00703b649df32ee0d7b00b2f10403\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a93a73494a5d62464a67cc71f86ad9728\">yaml_emitter_s</a>\n</li>\n<li>indention\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a407de8ff950b16b4254a381d4e5cea42\">yaml_emitter_s</a>\n</li>\n<li>indents\n: <a class=\"el\" href=\"structyaml__parser__s.html#a2e29feac36a89f644d9640d44df62b74\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad31c591593ccb78e6b04887bf4f162c8\">yaml_emitter_s</a>\n</li>\n<li>index\n: <a class=\"el\" href=\"structyaml__mark__s.html#a525306fb424a79f0b0d5a7d3990aa596\">yaml_mark_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#ac45e17508386dec9163b4aa5cfb5312e\">yaml_alias_data_s</a>\n</li>\n<li>input\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae800ef7fd42ad8bcbb69b116da3a7f53\">yaml_parser_s</a>\n</li>\n<li>items\n: <a class=\"el\" href=\"structyaml__node__s.html#a6b340541cc012ac5aacdcaa46ced097a\">yaml_node_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x6b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_k\"></a>- k -</h3><ul>\n<li>key\n: <a class=\"el\" href=\"structyaml__node__pair__s.html#ac83746eb40b6b3a84f6da3143658ed4e\">yaml_node_pair_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>last\n: <a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad0c5410fff4602266a0c6e0af730dd70\">yaml_emitter_s</a>\n</li>\n<li>last_anchor_id\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a0cede830c77a15df7f1b73b9023d2d11\">yaml_emitter_s</a>\n</li>\n<li>length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a4f72d57ad020803803e78922ecdec580\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a15618ee917746d28d97ad8eb9639e141\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ad90dd9926d9debbaa48eb5339bd9fc36\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a06e51daf74cf78103e00608c3c9132e2\">yaml_token_s</a>\n</li>\n<li>line\n: <a class=\"el\" href=\"structyaml__mark__s.html#a55952e426fc8a5f180a5e9c907ca926c\">yaml_mark_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a4fe9295608f19a687e41ec3661383e88\">yaml_emitter_s</a>\n</li>\n<li>line_break\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a84c1b884d805588495067ee98a8e7c50\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>major\n: <a class=\"el\" href=\"structyaml__version__directive__s.html#ad27326ff94b7772027c3009d1dd5e52b\">yaml_version_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#aac2ed466afd0390872774238dfcd152c\">yaml_token_s</a>\n</li>\n<li>mapping\n: <a class=\"el\" href=\"structyaml__node__s.html#ab18dc5c573885a08a92e113dcb7fb361\">yaml_node_s</a>\n</li>\n<li>mapping_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5a7527d8da86b28d95ff18b29f9d82f0\">yaml_emitter_s</a>\n</li>\n<li>mapping_start\n: <a class=\"el\" href=\"structyaml__event__s.html#a361b28413783f92797e6bfe03e9abaa1\">yaml_event_s</a>\n</li>\n<li>mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#aaeeb58dc348e6e6f89d6a7c8fea8f734\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#a9f8d87255bfc39df69068ed87b602e9f\">yaml_alias_data_s</a>\n, <a class=\"el\" href=\"structyaml__simple__key__s.html#ad0f5dd11cbf2e4d6d81376511e2b6dfb\">yaml_simple_key_s</a>\n</li>\n<li>marks\n: <a class=\"el\" href=\"structyaml__parser__s.html#ad78837ae36e35d523e02c43d1ae3f30e\">yaml_parser_s</a>\n</li>\n<li>minor\n: <a class=\"el\" href=\"structyaml__version__directive__s.html#a89f074113501e6e150503f34b046dbd1\">yaml_version_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a97b9f537b24e8413e9fddc6a4b183d30\">yaml_token_s</a>\n</li>\n<li>multiline\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a363a1aaaf512433ee7eab3083428cc70\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>nodes\n: <a class=\"el\" href=\"structyaml__document__s.html#aa9eeab76b69cc84a6ab1b02c14cfd594\">yaml_document_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>offset\n: <a class=\"el\" href=\"structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13\">yaml_parser_s</a>\n</li>\n<li>open_ended\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a65e84454b702622c41a068768c144c51\">yaml_emitter_s</a>\n</li>\n<li>opened\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a0234d7e9bfbe7cc6e12b60f90f5ec552\">yaml_emitter_s</a>\n</li>\n<li>output\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aa975acf559cc87d79abdb732c994f56f\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>pairs\n: <a class=\"el\" href=\"structyaml__node__s.html#a830a080bbed021eb230ef644e4680909\">yaml_node_s</a>\n</li>\n<li>plain_implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#ac3600acbcc6b4787f1ec3511976a3151\">yaml_event_s</a>\n</li>\n<li>pointer\n: <a class=\"el\" href=\"structyaml__parser__s.html#abea626790abfbcaeeb72a3772dc69e43\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#aed9370f42cea4dff82f96839ce760b5a\">yaml_emitter_s</a>\n</li>\n<li>possible\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#aad311b0fa599db04657a5177ec331f07\">yaml_simple_key_s</a>\n</li>\n<li>prefix\n: <a class=\"el\" href=\"structyaml__tag__directive__s.html#a514850fefaafbe65b2322da8c193a896\">yaml_tag_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a561b3730b9999cfe1010e77aca49c5b8\">yaml_token_s</a>\n</li>\n<li>problem\n: <a class=\"el\" href=\"structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ae076ef7c85ae107a2233dd4206577800\">yaml_emitter_s</a>\n</li>\n<li>problem_mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#a595b5412d39a4a9e441e5ad34fb059d9\">yaml_parser_s</a>\n</li>\n<li>problem_offset\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd\">yaml_parser_s</a>\n</li>\n<li>problem_value\n: <a class=\"el\" href=\"structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>quoted_implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#a9ce2441d08d9cf6a1bf9f28f5ee17f68\">yaml_event_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>raw_buffer\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae3e8481ceabdbf6796a7dc6265f740ac\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6eeffbc9cd5beb89b679740b7f1d6d09\">yaml_emitter_s</a>\n</li>\n<li>read_handler\n: <a class=\"el\" href=\"structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30\">yaml_parser_s</a>\n</li>\n<li>read_handler_data\n: <a class=\"el\" href=\"structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9\">yaml_parser_s</a>\n</li>\n<li>references\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a8f00c3c08e0d87bab11e91a4464a50bc\">yaml_emitter_s</a>\n</li>\n<li>required\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#acacccea26520e74c4c61f170fdcbb4c3\">yaml_simple_key_s</a>\n</li>\n<li>root_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a70fb5f09cc60de989fbec2868f4db19e\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scalar\n: <a class=\"el\" href=\"structyaml__token__s.html#a35e3629351176dd91b38cbfc827a8b00\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a3753b4c5d10040d75f7c7f4b56c42549\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a688583a2649848aed700d7e07d9efac9\">yaml_node_s</a>\n</li>\n<li>scalar_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ac3f80f4cb9c361b5fa4fa8f5cc04dbac\">yaml_emitter_s</a>\n</li>\n<li>sequence\n: <a class=\"el\" href=\"structyaml__node__s.html#afe215962139fac93b965cc2acd71452b\">yaml_node_s</a>\n</li>\n<li>sequence_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a9d20d55b0914ff81bf0f56e57ca7416e\">yaml_emitter_s</a>\n</li>\n<li>sequence_start\n: <a class=\"el\" href=\"structyaml__event__s.html#a632895e022fbf29ab24a816893a8580f\">yaml_event_s</a>\n</li>\n<li>serialized\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6c3e98c02ffae879717b3d09f9458936\">yaml_emitter_s</a>\n</li>\n<li>simple_key_allowed\n: <a class=\"el\" href=\"structyaml__parser__s.html#acc85a7bfddc7ae9114cf115e43c89126\">yaml_parser_s</a>\n</li>\n<li>simple_key_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#acc0db69cdae44c1385bbb2b6c207371b\">yaml_emitter_s</a>\n</li>\n<li>simple_keys\n: <a class=\"el\" href=\"structyaml__parser__s.html#ad5ce7de476c58fb6e1fdabbcc1c51659\">yaml_parser_s</a>\n</li>\n<li>single_quoted_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3729ff7e7add06a1a1d9067a557a59fc\">yaml_emitter_s</a>\n</li>\n<li>size\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">yaml_emitter_s</a>\n</li>\n<li>size_written\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">yaml_emitter_s</a>\n</li>\n<li>start\n: <a class=\"el\" href=\"structyaml__node__s.html#a2e1001a0a7b068d4b2543a93d4cf60d4\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad68af21e510adcfc2db43b31e791efe1\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a82afddfe1cf7f1a346d931ad4896d3de\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a28ec8053132a8e7cf29df983835754b7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#aa3f9a11d8fbe4ac2eada1786176bab89\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ae8913d3c0bf4c987dc452efee2c802e3\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ab9eddd3a112c3a4547bf87f6936aba94\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a74d7f521a559305585009ab503bee16b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s</a>\n</li>\n<li>start_implicit\n: <a class=\"el\" href=\"structyaml__document__s.html#a65c49e4f61ca5c2f6ecf410e1cc65787\">yaml_document_s</a>\n</li>\n<li>start_mark\n: <a class=\"el\" href=\"structyaml__token__s.html#abdc5f4f2059c5a7bfe8e810b49a53980\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aeaf86eb588e75232e1b73e8213eb3e31\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a0a37311ebf8f6637e4bc1d280a879997\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ac17afa3b3a9ff4703bb4983163bfae5c\">yaml_node_s</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"structyaml__parser__s.html#a069d39cdf587ac2188e69d8fb018be64\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a29f1d4f27ff9b9616c154f0730dd24ee\">yaml_emitter_s</a>\n</li>\n<li>states\n: <a class=\"el\" href=\"structyaml__parser__s.html#a57aa3c5fbfcaed8c17e046f0778c92bf\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6dc87fbd5b074507e102b967492b135d\">yaml_emitter_s</a>\n</li>\n<li>stream_end_produced\n: <a class=\"el\" href=\"structyaml__parser__s.html#a63ccf04d623f36c04b62cfd1fc6fccb5\">yaml_parser_s</a>\n</li>\n<li>stream_start\n: <a class=\"el\" href=\"structyaml__token__s.html#aab66b62f4507f4fd0e9d2b7548f588e6\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a18946df9b7c815dd7fb30103c02a9e24\">yaml_event_s</a>\n</li>\n<li>stream_start_produced\n: <a class=\"el\" href=\"structyaml__parser__s.html#a7fecde5abcce11406c271f7db08f7a05\">yaml_parser_s</a>\n</li>\n<li>string\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a8803fe1047e8bcea9bdfcad0743fa0dd\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a44fa7ca68030680244f3743ce5e35702\">yaml_parser_s</a>\n</li>\n<li>style\n: <a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a2ac1305583a8e7e2247738116bca6b3b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#acd1e83d220103aa24577038cfb1c2d21\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a530a8c4d78feaf5496fb9f461674382b\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a5b80d97f64e2867927404fedb65949c6\">yaml_node_s</a>\n</li>\n<li>suffix\n: <a class=\"el\" href=\"structyaml__token__s.html#a61344c49b73da5821cb06cab4cbab505\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad9b61d5e9e05a47b2f873342ab226188\">yaml_emitter_s</a>\n</li>\n<li>suffix_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad83936bbd4b6b77c79555c71cccc8fb5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>tag\n: <a class=\"el\" href=\"structyaml__token__s.html#ab281db5b7563c5489726768fe0fbaac7\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#aa753358ea6d9d221b7b188832d47fefa\">yaml_node_s</a>\n</li>\n<li>tag_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3b947fbbc337d123af10c58abf1353a4\">yaml_emitter_s</a>\n</li>\n<li>tag_directive\n: <a class=\"el\" href=\"structyaml__token__s.html#aa8a1b9eeee539233e8461773894f4ea0\">yaml_token_s</a>\n</li>\n<li>tag_directives\n: <a class=\"el\" href=\"structyaml__parser__s.html#a9bdfc1888d4e30ffb43146377d44fba0\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a9dc51f2ccb8a517e2dc029e1af960258\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a162ce89a77e706d68649d40e1a520e1f\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#af1e09d0469fc24106f3790b1e3de09e1\">yaml_document_s</a>\n</li>\n<li>tail\n: <a class=\"el\" href=\"structyaml__parser__s.html#a22ad26583d8d1264e982188358aa79b6\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#acafa1e3cb872fa7917217469659fb273\">yaml_emitter_s</a>\n</li>\n<li>token_number\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#ae098916893ad7415c5c041dd45d24a86\">yaml_simple_key_s</a>\n</li>\n<li>tokens\n: <a class=\"el\" href=\"structyaml__parser__s.html#a96d39b8333411d741ee1c13aa4141682\">yaml_parser_s</a>\n</li>\n<li>tokens_parsed\n: <a class=\"el\" href=\"structyaml__parser__s.html#a7358e72ad071fec3185a833a3a245690\">yaml_parser_s</a>\n</li>\n<li>top\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5779bcbfd04df64e42434b7599332d11\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a510326726569a06a11119f12649787cf\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a24a3f3138b44de1914a3e54dbe0aeff7\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#aa420f88720907fe02b1d1595c9351d59\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a5ac36f59c4a0f28124c2e1630ca4f227\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a490eddbfcc27787e47de631a3d2e09a8\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a8e3f468d814d2aa5e074f7da1648d34a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ab2678112fd2eaa8f588f2d6217aabc9d\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ae610673669f06d46146198a346796276\">yaml_parser_s</a>\n</li>\n<li>type\n: <a class=\"el\" href=\"structyaml__token__s.html#aa8aeb89e2e74f5e2f199484177d0ea14\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aff08bc3df4859d5b3a804e8c011cac51\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a1db4ea72e13be65ec42339ce47d19669\">yaml_node_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unicode\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a76372a2413f71a5b36bf77a58d8f5d40\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value\n: <a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a23436bdddb447d0fc217bab5c5b04a36\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a0d444412a29609d62699267ae72f971d\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a20246ec76d64854ff93629cf1b424d86\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__pair__s.html#a56c1de2c11d509462d1bf03803bb8ab1\">yaml_node_pair_s</a>\n</li>\n<li>version_directive\n: <a class=\"el\" href=\"structyaml__document__s.html#a7d36862d070804b8bedb53866487ac6d\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a5cef7981358ecefdf9d4780b3eacd39b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a41b30a59ca22d1020d6af4cc7cc0da47\">yaml_token_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions.html\"><span>All</span></a></li>\n      <li><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_0x76.html#index_v\"><span>v</span></a></li>\n      <li class=\"current\"><a href=\"functions_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented struct and union fields with links to the struct/union documentation for each field:\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>whitespace\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a160ed0cf1cc6116b65772d14ced2d867\">yaml_emitter_s</a>\n</li>\n<li>write_handler\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aefa7e29ba8042ed1d133a02bb368ea3e\">yaml_emitter_s</a>\n</li>\n<li>write_handler_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6c4fe0176b69da64ac1ddc7e091967e5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_a\"></a>- a -</h3><ul>\n<li>alias\n: <a class=\"el\" href=\"structyaml__token__s.html#a1f942353efa1972a38a0763afefabe0c\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#ac21f0f1e12207b8fd4f02496259f6c0b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a1129c6f9ae5cd3b437b8ab8767324f03\">yaml_emitter_s</a>\n</li>\n<li>aliases\n: <a class=\"el\" href=\"structyaml__parser__s.html#a0c10698207d727f9e5d9ced627d130ef\">yaml_parser_s</a>\n</li>\n<li>anchor\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#ac4b9a352dd8ff747bfa63a54832d7962\">yaml_alias_data_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#acc0f6636995f5fe332604b74571e6cfa\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">yaml_event_s</a>\n</li>\n<li>anchor_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad8883d967ee02e3e15e58bc2533188cc\">yaml_emitter_s</a>\n</li>\n<li>anchor_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aece73cc234475630032b1c75a735eeb5\">yaml_emitter_s</a>\n</li>\n<li>anchors\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad4e7a72cb8b1b67373ba6d76a5229e6b\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x62.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_b\"></a>- b -</h3><ul>\n<li>best_indent\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a33545f8924be89daf8b81dc905d558c0\">yaml_emitter_s</a>\n</li>\n<li>best_width\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a56dde6b352bdf7d4031f89d2b5d704f6\">yaml_emitter_s</a>\n</li>\n<li>block_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a64e05972897d02f606627ef0cf3c7420\">yaml_emitter_s</a>\n</li>\n<li>block_plain_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5b5f6c9d687d788c8dac86d213ef4c16\">yaml_emitter_s</a>\n</li>\n<li>buffer\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afb2700e9b866b5be0ff6c7549c719f81\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#afc56b6252bd75ec87edec5c80a5c733e\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x63.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_c\"></a>- c -</h3><ul>\n<li>canonical\n: <a class=\"el\" href=\"structyaml__emitter__s.html#acb0259cdc5e2bb23faaf7266496df827\">yaml_emitter_s</a>\n</li>\n<li>closed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a978d894a219686d31d971899e31910cd\">yaml_emitter_s</a>\n</li>\n<li>column\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a678fbbacad5d1f3f9bb7516282888b8a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__mark__s.html#aaa18357a6fb2bb377b969ce9ff589797\">yaml_mark_s</a>\n</li>\n<li>context\n: <a class=\"el\" href=\"structyaml__parser__s.html#a6779b67a23bbf7c401e4257d5875ae6b\">yaml_parser_s</a>\n</li>\n<li>context_mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#ace259eec6e570f94b98b252e1a632e88\">yaml_parser_s</a>\n</li>\n<li>current\n: <a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x64.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_d\"></a>- d -</h3><ul>\n<li>data\n: <a class=\"el\" href=\"structyaml__token__s.html#aedb5be9b6b8f5ef6c129575e84f63605\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a0b8f9cce08e49459e4bab89035dbf6c6\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a7e1be921e921f2d0911e450a063b1344\">yaml_node_s</a>\n</li>\n<li>document\n: <a class=\"el\" href=\"structyaml__emitter__s.html#af9cc8801cc9b46a4f45255c67a1574a7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ac3dad5822f49d86cfddc2e5e415a158c\">yaml_parser_s</a>\n</li>\n<li>document_end\n: <a class=\"el\" href=\"structyaml__event__s.html#acffec5f24c01bb6bfb0c93a9bf1a803e\">yaml_event_s</a>\n</li>\n<li>document_start\n: <a class=\"el\" href=\"structyaml__event__s.html#aed593fadbeb898d6d90b0c62522a82cc\">yaml_event_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x65.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_e\"></a>- e -</h3><ul>\n<li>encoding\n: <a class=\"el\" href=\"structyaml__token__s.html#aab75b9cb91438e0e1efe2522652cf478\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a92139ba6ae79089fd9a2f5f4aeaf733f\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ada17f19fa6248d6ee493684b03700857\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a\">yaml_parser_s</a>\n</li>\n<li>end\n: <a class=\"el\" href=\"structyaml__document__s.html#adc9ffcca86a2684362428da69ffd3dea\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a211a0aedc964ba8cd07cb7875faa464b\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#af14fd1a6c1fd10088391f07349ba55e8\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aa7fdc1ff8342636119934ac824a2ecc8\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a3b28127063323de1d88fc18cdb6adf8a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a115b4a9797f3a72cd78d42c85100317c\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a55703a15e71c6b9551a2f4feb888bdcb\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6ff1f802eb95bc45f13e8e73ec009828\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ac9b3d891f9fcd5462289823716deca0e\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#aa768a9c29ae2c3015fdb84ea313844e2\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6669a94bc18247491e59c709852be0d1\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a41594b6495f4d31edb977cafb8cbaf78\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a1827ba7f3e7f7e94171fa20ade25345d\">yaml_node_s</a>\n</li>\n<li>end_implicit\n: <a class=\"el\" href=\"structyaml__document__s.html#a59de90b4078659fd0f49377929afcac1\">yaml_document_s</a>\n</li>\n<li>end_mark\n: <a class=\"el\" href=\"structyaml__event__s.html#a9307f91473094c229738b03d223bc4ba\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a63144671fd16f94f72c6d537360f7328\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a97f08b38dfb0a5be26ef8831864a5311\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a9299efdaadf764f4d03641a3ee51e0d0\">yaml_document_s</a>\n</li>\n<li>eof\n: <a class=\"el\" href=\"structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7\">yaml_parser_s</a>\n</li>\n<li>error\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afa2d6367a86ae6d43df14e24479bb0a7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472\">yaml_parser_s</a>\n</li>\n<li>events\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3516b49eb7579e422750a94a9d7c1700\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x66.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_f\"></a>- f -</h3><ul>\n<li>file\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae69c2974e3c4c37e941a0e1971be15a9\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#abfe1e82cd5c4a180b1468e65ccfd1c61\">yaml_emitter_s</a>\n</li>\n<li>flow_level\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a50f8e97c4290b83ebd646b4c4f5c5de9\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a6a4bbbd3f58533e0969b7218c1e73fd4\">yaml_parser_s</a>\n</li>\n<li>flow_plain_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#afd8496f5bb995bb5aacc349fd6b45bf5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x68.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_h\"></a>- h -</h3><ul>\n<li>handle\n: <a class=\"el\" href=\"structyaml__tag__directive__s.html#a9934c62f2b18fd087a95af25c7739490\">yaml_tag_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a01665687653c945a6666dd9debaecd65\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a7f043a9092eef2d644cc8f1180386239\">yaml_emitter_s</a>\n</li>\n<li>handle_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3552cece6908f99518205e8cbe2c793a\">yaml_emitter_s</a>\n</li>\n<li>head\n: <a class=\"el\" href=\"structyaml__parser__s.html#aa1c7a1248ca22159a3e60ba45b386507\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a547dfd20576006e606ffb0d8042b4234\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x69.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_i\"></a>- i -</h3><ul>\n<li>implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">yaml_event_s</a>\n</li>\n<li>indent\n: <a class=\"el\" href=\"structyaml__parser__s.html#abad00703b649df32ee0d7b00b2f10403\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a93a73494a5d62464a67cc71f86ad9728\">yaml_emitter_s</a>\n</li>\n<li>indention\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a407de8ff950b16b4254a381d4e5cea42\">yaml_emitter_s</a>\n</li>\n<li>indents\n: <a class=\"el\" href=\"structyaml__parser__s.html#a2e29feac36a89f644d9640d44df62b74\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad31c591593ccb78e6b04887bf4f162c8\">yaml_emitter_s</a>\n</li>\n<li>index\n: <a class=\"el\" href=\"structyaml__mark__s.html#a525306fb424a79f0b0d5a7d3990aa596\">yaml_mark_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#ac45e17508386dec9163b4aa5cfb5312e\">yaml_alias_data_s</a>\n</li>\n<li>input\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae800ef7fd42ad8bcbb69b116da3a7f53\">yaml_parser_s</a>\n</li>\n<li>items\n: <a class=\"el\" href=\"structyaml__node__s.html#a6b340541cc012ac5aacdcaa46ced097a\">yaml_node_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x6b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_k\"></a>- k -</h3><ul>\n<li>key\n: <a class=\"el\" href=\"structyaml__node__pair__s.html#ac83746eb40b6b3a84f6da3143658ed4e\">yaml_node_pair_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x6c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_l\"></a>- l -</h3><ul>\n<li>last\n: <a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad0c5410fff4602266a0c6e0af730dd70\">yaml_emitter_s</a>\n</li>\n<li>last_anchor_id\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a0cede830c77a15df7f1b73b9023d2d11\">yaml_emitter_s</a>\n</li>\n<li>length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a4f72d57ad020803803e78922ecdec580\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a15618ee917746d28d97ad8eb9639e141\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ad90dd9926d9debbaa48eb5339bd9fc36\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a06e51daf74cf78103e00608c3c9132e2\">yaml_token_s</a>\n</li>\n<li>line\n: <a class=\"el\" href=\"structyaml__mark__s.html#a55952e426fc8a5f180a5e9c907ca926c\">yaml_mark_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a4fe9295608f19a687e41ec3661383e88\">yaml_emitter_s</a>\n</li>\n<li>line_break\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a84c1b884d805588495067ee98a8e7c50\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x6d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_m\"></a>- m -</h3><ul>\n<li>major\n: <a class=\"el\" href=\"structyaml__version__directive__s.html#ad27326ff94b7772027c3009d1dd5e52b\">yaml_version_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#aac2ed466afd0390872774238dfcd152c\">yaml_token_s</a>\n</li>\n<li>mapping\n: <a class=\"el\" href=\"structyaml__node__s.html#ab18dc5c573885a08a92e113dcb7fb361\">yaml_node_s</a>\n</li>\n<li>mapping_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5a7527d8da86b28d95ff18b29f9d82f0\">yaml_emitter_s</a>\n</li>\n<li>mapping_start\n: <a class=\"el\" href=\"structyaml__event__s.html#a361b28413783f92797e6bfe03e9abaa1\">yaml_event_s</a>\n</li>\n<li>mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#aaeeb58dc348e6e6f89d6a7c8fea8f734\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__alias__data__s.html#a9f8d87255bfc39df69068ed87b602e9f\">yaml_alias_data_s</a>\n, <a class=\"el\" href=\"structyaml__simple__key__s.html#ad0f5dd11cbf2e4d6d81376511e2b6dfb\">yaml_simple_key_s</a>\n</li>\n<li>marks\n: <a class=\"el\" href=\"structyaml__parser__s.html#ad78837ae36e35d523e02c43d1ae3f30e\">yaml_parser_s</a>\n</li>\n<li>minor\n: <a class=\"el\" href=\"structyaml__version__directive__s.html#a89f074113501e6e150503f34b046dbd1\">yaml_version_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a97b9f537b24e8413e9fddc6a4b183d30\">yaml_token_s</a>\n</li>\n<li>multiline\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a363a1aaaf512433ee7eab3083428cc70\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x6e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_n\"></a>- n -</h3><ul>\n<li>nodes\n: <a class=\"el\" href=\"structyaml__document__s.html#aa9eeab76b69cc84a6ab1b02c14cfd594\">yaml_document_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x6f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_o\"></a>- o -</h3><ul>\n<li>offset\n: <a class=\"el\" href=\"structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13\">yaml_parser_s</a>\n</li>\n<li>open_ended\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a65e84454b702622c41a068768c144c51\">yaml_emitter_s</a>\n</li>\n<li>opened\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a0234d7e9bfbe7cc6e12b60f90f5ec552\">yaml_emitter_s</a>\n</li>\n<li>output\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aa975acf559cc87d79abdb732c994f56f\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x70.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_p\"></a>- p -</h3><ul>\n<li>pairs\n: <a class=\"el\" href=\"structyaml__node__s.html#a830a080bbed021eb230ef644e4680909\">yaml_node_s</a>\n</li>\n<li>plain_implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#ac3600acbcc6b4787f1ec3511976a3151\">yaml_event_s</a>\n</li>\n<li>pointer\n: <a class=\"el\" href=\"structyaml__parser__s.html#abea626790abfbcaeeb72a3772dc69e43\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#aed9370f42cea4dff82f96839ce760b5a\">yaml_emitter_s</a>\n</li>\n<li>possible\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#aad311b0fa599db04657a5177ec331f07\">yaml_simple_key_s</a>\n</li>\n<li>prefix\n: <a class=\"el\" href=\"structyaml__tag__directive__s.html#a514850fefaafbe65b2322da8c193a896\">yaml_tag_directive_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a561b3730b9999cfe1010e77aca49c5b8\">yaml_token_s</a>\n</li>\n<li>problem\n: <a class=\"el\" href=\"structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ae076ef7c85ae107a2233dd4206577800\">yaml_emitter_s</a>\n</li>\n<li>problem_mark\n: <a class=\"el\" href=\"structyaml__parser__s.html#a595b5412d39a4a9e441e5ad34fb059d9\">yaml_parser_s</a>\n</li>\n<li>problem_offset\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd\">yaml_parser_s</a>\n</li>\n<li>problem_value\n: <a class=\"el\" href=\"structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f\">yaml_parser_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x71.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_q\"></a>- q -</h3><ul>\n<li>quoted_implicit\n: <a class=\"el\" href=\"structyaml__event__s.html#a9ce2441d08d9cf6a1bf9f28f5ee17f68\">yaml_event_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x72.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_r\"></a>- r -</h3><ul>\n<li>raw_buffer\n: <a class=\"el\" href=\"structyaml__parser__s.html#ae3e8481ceabdbf6796a7dc6265f740ac\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6eeffbc9cd5beb89b679740b7f1d6d09\">yaml_emitter_s</a>\n</li>\n<li>read_handler\n: <a class=\"el\" href=\"structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30\">yaml_parser_s</a>\n</li>\n<li>read_handler_data\n: <a class=\"el\" href=\"structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9\">yaml_parser_s</a>\n</li>\n<li>references\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a8f00c3c08e0d87bab11e91a4464a50bc\">yaml_emitter_s</a>\n</li>\n<li>required\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#acacccea26520e74c4c61f170fdcbb4c3\">yaml_simple_key_s</a>\n</li>\n<li>root_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a70fb5f09cc60de989fbec2868f4db19e\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x73.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_s\"></a>- s -</h3><ul>\n<li>scalar\n: <a class=\"el\" href=\"structyaml__token__s.html#a35e3629351176dd91b38cbfc827a8b00\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a3753b4c5d10040d75f7c7f4b56c42549\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a688583a2649848aed700d7e07d9efac9\">yaml_node_s</a>\n</li>\n<li>scalar_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ac3f80f4cb9c361b5fa4fa8f5cc04dbac\">yaml_emitter_s</a>\n</li>\n<li>sequence\n: <a class=\"el\" href=\"structyaml__node__s.html#afe215962139fac93b965cc2acd71452b\">yaml_node_s</a>\n</li>\n<li>sequence_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a9d20d55b0914ff81bf0f56e57ca7416e\">yaml_emitter_s</a>\n</li>\n<li>sequence_start\n: <a class=\"el\" href=\"structyaml__event__s.html#a632895e022fbf29ab24a816893a8580f\">yaml_event_s</a>\n</li>\n<li>serialized\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6c3e98c02ffae879717b3d09f9458936\">yaml_emitter_s</a>\n</li>\n<li>simple_key_allowed\n: <a class=\"el\" href=\"structyaml__parser__s.html#acc85a7bfddc7ae9114cf115e43c89126\">yaml_parser_s</a>\n</li>\n<li>simple_key_context\n: <a class=\"el\" href=\"structyaml__emitter__s.html#acc0db69cdae44c1385bbb2b6c207371b\">yaml_emitter_s</a>\n</li>\n<li>simple_keys\n: <a class=\"el\" href=\"structyaml__parser__s.html#ad5ce7de476c58fb6e1fdabbcc1c51659\">yaml_parser_s</a>\n</li>\n<li>single_quoted_allowed\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3729ff7e7add06a1a1d9067a557a59fc\">yaml_emitter_s</a>\n</li>\n<li>size\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">yaml_emitter_s</a>\n</li>\n<li>size_written\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">yaml_emitter_s</a>\n</li>\n<li>start\n: <a class=\"el\" href=\"structyaml__node__s.html#a2e1001a0a7b068d4b2543a93d4cf60d4\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad68af21e510adcfc2db43b31e791efe1\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a82afddfe1cf7f1a346d931ad4896d3de\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a28ec8053132a8e7cf29df983835754b7\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#aa3f9a11d8fbe4ac2eada1786176bab89\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ae8913d3c0bf4c987dc452efee2c802e3\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ab9eddd3a112c3a4547bf87f6936aba94\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a74d7f521a559305585009ab503bee16b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s</a>\n</li>\n<li>start_implicit\n: <a class=\"el\" href=\"structyaml__document__s.html#a65c49e4f61ca5c2f6ecf410e1cc65787\">yaml_document_s</a>\n</li>\n<li>start_mark\n: <a class=\"el\" href=\"structyaml__token__s.html#abdc5f4f2059c5a7bfe8e810b49a53980\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aeaf86eb588e75232e1b73e8213eb3e31\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a0a37311ebf8f6637e4bc1d280a879997\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#ac17afa3b3a9ff4703bb4983163bfae5c\">yaml_node_s</a>\n</li>\n<li>state\n: <a class=\"el\" href=\"structyaml__parser__s.html#a069d39cdf587ac2188e69d8fb018be64\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a29f1d4f27ff9b9616c154f0730dd24ee\">yaml_emitter_s</a>\n</li>\n<li>states\n: <a class=\"el\" href=\"structyaml__parser__s.html#a57aa3c5fbfcaed8c17e046f0778c92bf\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a6dc87fbd5b074507e102b967492b135d\">yaml_emitter_s</a>\n</li>\n<li>stream_end_produced\n: <a class=\"el\" href=\"structyaml__parser__s.html#a63ccf04d623f36c04b62cfd1fc6fccb5\">yaml_parser_s</a>\n</li>\n<li>stream_start\n: <a class=\"el\" href=\"structyaml__token__s.html#aab66b62f4507f4fd0e9d2b7548f588e6\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a18946df9b7c815dd7fb30103c02a9e24\">yaml_event_s</a>\n</li>\n<li>stream_start_produced\n: <a class=\"el\" href=\"structyaml__parser__s.html#a7fecde5abcce11406c271f7db08f7a05\">yaml_parser_s</a>\n</li>\n<li>string\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a8803fe1047e8bcea9bdfcad0743fa0dd\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a44fa7ca68030680244f3743ce5e35702\">yaml_parser_s</a>\n</li>\n<li>style\n: <a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a2ac1305583a8e7e2247738116bca6b3b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#acd1e83d220103aa24577038cfb1c2d21\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a530a8c4d78feaf5496fb9f461674382b\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a5b80d97f64e2867927404fedb65949c6\">yaml_node_s</a>\n</li>\n<li>suffix\n: <a class=\"el\" href=\"structyaml__token__s.html#a61344c49b73da5821cb06cab4cbab505\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#ad9b61d5e9e05a47b2f873342ab226188\">yaml_emitter_s</a>\n</li>\n<li>suffix_length\n: <a class=\"el\" href=\"structyaml__emitter__s.html#ad83936bbd4b6b77c79555c71cccc8fb5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x74.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_t\"></a>- t -</h3><ul>\n<li>tag\n: <a class=\"el\" href=\"structyaml__token__s.html#ab281db5b7563c5489726768fe0fbaac7\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#aa753358ea6d9d221b7b188832d47fefa\">yaml_node_s</a>\n</li>\n<li>tag_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a3b947fbbc337d123af10c58abf1353a4\">yaml_emitter_s</a>\n</li>\n<li>tag_directive\n: <a class=\"el\" href=\"structyaml__token__s.html#aa8a1b9eeee539233e8461773894f4ea0\">yaml_token_s</a>\n</li>\n<li>tag_directives\n: <a class=\"el\" href=\"structyaml__parser__s.html#a9bdfc1888d4e30ffb43146377d44fba0\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a9dc51f2ccb8a517e2dc029e1af960258\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a162ce89a77e706d68649d40e1a520e1f\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#af1e09d0469fc24106f3790b1e3de09e1\">yaml_document_s</a>\n</li>\n<li>tail\n: <a class=\"el\" href=\"structyaml__parser__s.html#a22ad26583d8d1264e982188358aa79b6\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#acafa1e3cb872fa7917217469659fb273\">yaml_emitter_s</a>\n</li>\n<li>token_number\n: <a class=\"el\" href=\"structyaml__simple__key__s.html#ae098916893ad7415c5c041dd45d24a86\">yaml_simple_key_s</a>\n</li>\n<li>tokens\n: <a class=\"el\" href=\"structyaml__parser__s.html#a96d39b8333411d741ee1c13aa4141682\">yaml_parser_s</a>\n</li>\n<li>tokens_parsed\n: <a class=\"el\" href=\"structyaml__parser__s.html#a7358e72ad071fec3185a833a3a245690\">yaml_parser_s</a>\n</li>\n<li>top\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a5779bcbfd04df64e42434b7599332d11\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a510326726569a06a11119f12649787cf\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a24a3f3138b44de1914a3e54dbe0aeff7\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#aa420f88720907fe02b1d1595c9351d59\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__document__s.html#a5ac36f59c4a0f28124c2e1630ca4f227\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#a490eddbfcc27787e47de631a3d2e09a8\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a8e3f468d814d2aa5e074f7da1648d34a\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ab2678112fd2eaa8f588f2d6217aabc9d\">yaml_parser_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__parser__s.html#ae610673669f06d46146198a346796276\">yaml_parser_s</a>\n</li>\n<li>type\n: <a class=\"el\" href=\"structyaml__token__s.html#aa8aeb89e2e74f5e2f199484177d0ea14\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#aff08bc3df4859d5b3a804e8c011cac51\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a1db4ea72e13be65ec42339ce47d19669\">yaml_node_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x75.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_u\"></a>- u -</h3><ul>\n<li>unicode\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a76372a2413f71a5b36bf77a58d8f5d40\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x76.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_v\"></a>- v -</h3><ul>\n<li>value\n: <a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">yaml_token_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a23436bdddb447d0fc217bab5c5b04a36\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__node__s.html#a0d444412a29609d62699267ae72f971d\">yaml_node_s</a>\n, <a class=\"el\" href=\"structyaml__emitter__s.html#a20246ec76d64854ff93629cf1b424d86\">yaml_emitter_s</a>\n, <a class=\"el\" href=\"structyaml__node__pair__s.html#a56c1de2c11d509462d1bf03803bb8ab1\">yaml_node_pair_s</a>\n</li>\n<li>version_directive\n: <a class=\"el\" href=\"structyaml__document__s.html#a7d36862d070804b8bedb53866487ac6d\">yaml_document_s</a>\n, <a class=\"el\" href=\"structyaml__event__s.html#a5cef7981358ecefdf9d4780b3eacd39b\">yaml_event_s</a>\n, <a class=\"el\" href=\"structyaml__token__s.html#a41b30a59ca22d1020d6af4cc7cc0da47\">yaml_token_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/functions_vars_0x77.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields - Variables</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars.html\"><span>Variables</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"functions_vars.html#index_a\"><span>a</span></a></li>\n      <li><a href=\"functions_vars_0x62.html#index_b\"><span>b</span></a></li>\n      <li><a href=\"functions_vars_0x63.html#index_c\"><span>c</span></a></li>\n      <li><a href=\"functions_vars_0x64.html#index_d\"><span>d</span></a></li>\n      <li><a href=\"functions_vars_0x65.html#index_e\"><span>e</span></a></li>\n      <li><a href=\"functions_vars_0x66.html#index_f\"><span>f</span></a></li>\n      <li><a href=\"functions_vars_0x68.html#index_h\"><span>h</span></a></li>\n      <li><a href=\"functions_vars_0x69.html#index_i\"><span>i</span></a></li>\n      <li><a href=\"functions_vars_0x6b.html#index_k\"><span>k</span></a></li>\n      <li><a href=\"functions_vars_0x6c.html#index_l\"><span>l</span></a></li>\n      <li><a href=\"functions_vars_0x6d.html#index_m\"><span>m</span></a></li>\n      <li><a href=\"functions_vars_0x6e.html#index_n\"><span>n</span></a></li>\n      <li><a href=\"functions_vars_0x6f.html#index_o\"><span>o</span></a></li>\n      <li><a href=\"functions_vars_0x70.html#index_p\"><span>p</span></a></li>\n      <li><a href=\"functions_vars_0x71.html#index_q\"><span>q</span></a></li>\n      <li><a href=\"functions_vars_0x72.html#index_r\"><span>r</span></a></li>\n      <li><a href=\"functions_vars_0x73.html#index_s\"><span>s</span></a></li>\n      <li><a href=\"functions_vars_0x74.html#index_t\"><span>t</span></a></li>\n      <li><a href=\"functions_vars_0x75.html#index_u\"><span>u</span></a></li>\n      <li><a href=\"functions_vars_0x76.html#index_v\"><span>v</span></a></li>\n      <li class=\"current\"><a href=\"functions_vars_0x77.html#index_w\"><span>w</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_w\"></a>- w -</h3><ul>\n<li>whitespace\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a160ed0cf1cc6116b65772d14ced2d867\">yaml_emitter_s</a>\n</li>\n<li>write_handler\n: <a class=\"el\" href=\"structyaml__emitter__s.html#aefa7e29ba8042ed1d133a02bb368ea3e\">yaml_emitter_s</a>\n</li>\n<li>write_handler_data\n: <a class=\"el\" href=\"structyaml__emitter__s.html#a6c4fe0176b69da64ac1ddc7e091967e5\">yaml_emitter_s</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"globals.html#index_y\"><span>y</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:\n\n<h3><a class=\"anchor\" id=\"index_y\"></a>- y -</h3><ul>\n<li>yaml_alias_data_t\n: <a class=\"el\" href=\"group__parser.html#ga1434228b82f5f90d3c8ccda816e9ca9d\">yaml.h</a>\n</li>\n<li>YAML_ALIAS_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\">yaml.h</a>\n</li>\n<li>yaml_alias_event_initialize()\n: <a class=\"el\" href=\"group__events.html#gade4c15b75eb9a8035e04d4f0dd23f005\">yaml.h</a>\n</li>\n<li>YAML_ALIAS_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\">yaml.h</a>\n</li>\n<li>YAML_ANCHOR_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\">yaml.h</a>\n</li>\n<li>YAML_ANY_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\">yaml.h</a>\n</li>\n<li>YAML_ANY_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\">yaml.h</a>\n</li>\n<li>YAML_ANY_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\">yaml.h</a>\n</li>\n<li>YAML_ANY_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\">yaml.h</a>\n</li>\n<li>YAML_ANY_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_ENTRY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_MAPPING_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_SEQUENCE_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\">yaml.h</a>\n</li>\n<li>YAML_BOOL_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga312629a1f51e91b136352db988d4d771\">yaml.h</a>\n</li>\n<li>yaml_break_e\n: <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml.h</a>\n</li>\n<li>yaml_break_t\n: <a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml.h</a>\n</li>\n<li>yaml_char_t\n: <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml.h</a>\n</li>\n<li>YAML_COMPOSER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\">yaml.h</a>\n</li>\n<li>YAML_CR_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\">yaml.h</a>\n</li>\n<li>YAML_CRLN_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\">yaml.h</a>\n</li>\n<li>YAML_DECLARE\n: <a class=\"el\" href=\"group__export.html#ga0791fd3e1d85ed53711b1feaae131f93\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_MAPPING_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf7b1f8f0ce5665794510cd3841802a5f\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_SCALAR_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf6b0c4e819b8f6915515a4f70065aaaa\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_SEQUENCE_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf195b67002518702e27746d6b4da6124\">yaml.h</a>\n</li>\n<li>yaml_document_add_mapping()\n: <a class=\"el\" href=\"group__nodes.html#ga45a9f8288704f99cd81dc5cb31329d34\">yaml.h</a>\n</li>\n<li>yaml_document_add_scalar()\n: <a class=\"el\" href=\"group__nodes.html#ga45dab8b983b58a005557d4b01f5057b0\">yaml.h</a>\n</li>\n<li>yaml_document_add_sequence()\n: <a class=\"el\" href=\"group__nodes.html#ga83b2f7fdd9a439397a42016bddad7786\">yaml.h</a>\n</li>\n<li>yaml_document_append_mapping_pair()\n: <a class=\"el\" href=\"group__nodes.html#ga2db27002d8a9ae06b1729d0ee06553d2\">yaml.h</a>\n</li>\n<li>yaml_document_append_sequence_item()\n: <a class=\"el\" href=\"group__nodes.html#ga16435917cd6c0261cd390fa8cf173b1b\">yaml.h</a>\n</li>\n<li>yaml_document_delete()\n: <a class=\"el\" href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\">yaml.h</a>\n</li>\n<li>yaml_document_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga8bae16548ee88f8a5ca15204f8c30344\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\">yaml.h</a>\n</li>\n<li>yaml_document_get_node()\n: <a class=\"el\" href=\"group__nodes.html#gafa1feabc9747dbded4dca24e27d3c21a\">yaml.h</a>\n</li>\n<li>yaml_document_get_root_node()\n: <a class=\"el\" href=\"group__nodes.html#ga40eeaa68fb2f3be34c4fe34e7597d324\">yaml.h</a>\n</li>\n<li>yaml_document_initialize()\n: <a class=\"el\" href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\">yaml.h</a>\n</li>\n<li>yaml_document_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga527e89302e1c969fbea5aa45664bf51c\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\">yaml.h</a>\n</li>\n<li>yaml_document_t\n: <a class=\"el\" href=\"group__nodes.html#gad94e064e95baeb22e4f7acc7804e8479\">yaml.h</a>\n</li>\n<li>YAML_DOUBLE_QUOTED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_CONTENT_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_END_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\">yaml.h</a>\n</li>\n<li>YAML_EMIT_END_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FIRST_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\">yaml.h</a>\n</li>\n<li>YAML_EMIT_STREAM_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\">yaml.h</a>\n</li>\n<li>yaml_emitter_close()\n: <a class=\"el\" href=\"group__emitter.html#gaa91442864679280985df14b2d96b8c42\">yaml.h</a>\n</li>\n<li>yaml_emitter_delete()\n: <a class=\"el\" href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\">yaml.h</a>\n</li>\n<li>yaml_emitter_dump()\n: <a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\">yaml.h</a>\n</li>\n<li>yaml_emitter_emit()\n: <a class=\"el\" href=\"group__emitter.html#ga4d6c0f8e712797e2660e69479fdae433\">yaml.h</a>\n</li>\n<li>YAML_EMITTER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\">yaml.h</a>\n</li>\n<li>yaml_emitter_flush()\n: <a class=\"el\" href=\"group__emitter.html#gacaf24456e2bf85bc5654cbd7d828055f\">yaml.h</a>\n</li>\n<li>yaml_emitter_initialize()\n: <a class=\"el\" href=\"group__emitter.html#ga83649205374285802fc27aa293ecd111\">yaml.h</a>\n</li>\n<li>yaml_emitter_open()\n: <a class=\"el\" href=\"group__emitter.html#gae323c34e378040106f24c7b5ab834b16\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_break()\n: <a class=\"el\" href=\"group__emitter.html#ga04b5494f0b8244eec359579c31d5e20c\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_canonical()\n: <a class=\"el\" href=\"group__emitter.html#ga62713a8130e11d95cbefa95a2eb3ac4b\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_encoding()\n: <a class=\"el\" href=\"group__emitter.html#gabc22888ec8bf942199acbf38f7a0b9bb\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_indent()\n: <a class=\"el\" href=\"group__emitter.html#ga07eca3c344053a9028b4a84291cdf4d7\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output()\n: <a class=\"el\" href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output_file()\n: <a class=\"el\" href=\"group__emitter.html#gaf7610c61b303bde9c701024c10ece024\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output_string()\n: <a class=\"el\" href=\"group__emitter.html#ga62725c0f616f634588374d1a4c0ed35a\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_unicode()\n: <a class=\"el\" href=\"group__emitter.html#gaa59e7dcf24cb9b614c32af6c3e949fc3\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_width()\n: <a class=\"el\" href=\"group__emitter.html#gaa91ae0fa8af5ab67e64567e08f4458c2\">yaml.h</a>\n</li>\n<li>yaml_emitter_state_e\n: <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml.h</a>\n</li>\n<li>yaml_emitter_state_t\n: <a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml.h</a>\n</li>\n<li>yaml_emitter_t\n: <a class=\"el\" href=\"group__emitter.html#ga4ce3e054f0016c49d9e8c36d359e710b\">yaml.h</a>\n</li>\n<li>yaml_encoding_e\n: <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml.h</a>\n</li>\n<li>yaml_encoding_t\n: <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml.h</a>\n</li>\n<li>yaml_error_type_e\n: <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml.h</a>\n</li>\n<li>yaml_error_type_t\n: <a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml.h</a>\n</li>\n<li>yaml_event_delete()\n: <a class=\"el\" href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\">yaml.h</a>\n</li>\n<li>yaml_event_t\n: <a class=\"el\" href=\"group__events.html#ga3b392d9716c4920cabefdd29e78dd542\">yaml.h</a>\n</li>\n<li>yaml_event_type_e\n: <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml.h</a>\n</li>\n<li>yaml_event_type_t\n: <a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml.h</a>\n</li>\n<li>YAML_FLOAT_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga6ab2ec71fc47cb24f1003b9acdb92843\">yaml.h</a>\n</li>\n<li>YAML_FLOW_ENTRY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\">yaml.h</a>\n</li>\n<li>YAML_FOLDED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\">yaml.h</a>\n</li>\n<li>yaml_get_version()\n: <a class=\"el\" href=\"group__version.html#gaec764c91f3e181ae63d3d59b7980fe78\">yaml.h</a>\n</li>\n<li>yaml_get_version_string()\n: <a class=\"el\" href=\"group__version.html#gaf1ba5c1c34e809db5047d79a9fa85a73\">yaml.h</a>\n</li>\n<li>YAML_INT_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga83263cdb4ffa6ad2f7d9a87281979ff5\">yaml.h</a>\n</li>\n<li>YAML_KEY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\">yaml.h</a>\n</li>\n<li>YAML_LITERAL_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\">yaml.h</a>\n</li>\n<li>YAML_LN_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\">yaml.h</a>\n</li>\n<li>YAML_MAP_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga22ae99cf3ac014dd76873268fd068c12\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\">yaml.h</a>\n</li>\n<li>yaml_mapping_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga3afaf8b3aca2ec902a4e268f12adb0c2\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\">yaml.h</a>\n</li>\n<li>yaml_mapping_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga0603cf8d20f0b6dfc3be04b6360134aa\">yaml.h</a>\n</li>\n<li>yaml_mapping_style_e\n: <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml.h</a>\n</li>\n<li>yaml_mapping_style_t\n: <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml.h</a>\n</li>\n<li>yaml_mark_t\n: <a class=\"el\" href=\"group__basic.html#ga232eacba89691b841ba941338a302bfd\">yaml.h</a>\n</li>\n<li>YAML_MEMORY_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\">yaml.h</a>\n</li>\n<li>YAML_NO_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\">yaml.h</a>\n</li>\n<li>YAML_NO_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\">yaml.h</a>\n</li>\n<li>YAML_NO_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\">yaml.h</a>\n</li>\n<li>YAML_NO_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\">yaml.h</a>\n</li>\n<li>yaml_node_item_t\n: <a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml.h</a>\n</li>\n<li>yaml_node_pair_t\n: <a class=\"el\" href=\"group__nodes.html#ga90f1c8b83c5c38dc4016afc1cc2050c4\">yaml.h</a>\n</li>\n<li>yaml_node_t\n: <a class=\"el\" href=\"group__nodes.html#ga9eaaa233b120b9d9db47de93c294c40f\">yaml.h</a>\n</li>\n<li>yaml_node_type_e\n: <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml.h</a>\n</li>\n<li>yaml_node_type_t\n: <a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml.h</a>\n</li>\n<li>YAML_NULL_TAG\n: <a class=\"el\" href=\"group__nodes.html#gadfa882b6e42a3a993d12392d55260b00\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_NODE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_CONTENT_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\">yaml.h</a>\n</li>\n<li>YAML_PARSE_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_NODE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\">yaml.h</a>\n</li>\n<li>YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\">yaml.h</a>\n</li>\n<li>YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\">yaml.h</a>\n</li>\n<li>YAML_PARSE_STREAM_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\">yaml.h</a>\n</li>\n<li>yaml_parser_delete()\n: <a class=\"el\" href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\">yaml.h</a>\n</li>\n<li>YAML_PARSER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\">yaml.h</a>\n</li>\n<li>yaml_parser_initialize()\n: <a class=\"el\" href=\"group__parser.html#gacc37ceeb5847e38a3fe24eb0c9b53965\">yaml.h</a>\n</li>\n<li>yaml_parser_load()\n: <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\">yaml.h</a>\n</li>\n<li>yaml_parser_parse()\n: <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\">yaml.h</a>\n</li>\n<li>yaml_parser_scan()\n: <a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\">yaml.h</a>\n</li>\n<li>yaml_parser_set_encoding()\n: <a class=\"el\" href=\"group__parser.html#ga9565b64975570ed34612a19adf02ae6a\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input()\n: <a class=\"el\" href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input_file()\n: <a class=\"el\" href=\"group__parser.html#gac3f00f8beb2365b1e4569692d64696b6\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input_string()\n: <a class=\"el\" href=\"group__parser.html#ga08a94762bf5f4c61f72c1da0a407df0d\">yaml.h</a>\n</li>\n<li>yaml_parser_state_e\n: <a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml.h</a>\n</li>\n<li>yaml_parser_state_t\n: <a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml.h</a>\n</li>\n<li>yaml_parser_t\n: <a class=\"el\" href=\"group__parser.html#gafdc6319cb28a8b8034542b29be85b0c4\">yaml.h</a>\n</li>\n<li>YAML_PLAIN_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\">yaml.h</a>\n</li>\n<li>yaml_read_handler_t\n: <a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml.h</a>\n</li>\n<li>YAML_READER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\">yaml.h</a>\n</li>\n<li>yaml_scalar_event_initialize()\n: <a class=\"el\" href=\"group__events.html#gafc60a1a437385e19e6fb3be075958c8c\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\">yaml.h</a>\n</li>\n<li>yaml_scalar_style_e\n: <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml.h</a>\n</li>\n<li>yaml_scalar_style_t\n: <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\">yaml.h</a>\n</li>\n<li>YAML_SCANNER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\">yaml.h</a>\n</li>\n<li>YAML_SEQ_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaa8284b30f9c9e3f10f6a69c9b882f417\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\">yaml.h</a>\n</li>\n<li>yaml_sequence_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga99fdfa4b9d42b64d8171c9b22f334b1c\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\">yaml.h</a>\n</li>\n<li>yaml_sequence_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga53aea428c768d7b131923d08c904b4eb\">yaml.h</a>\n</li>\n<li>yaml_sequence_style_e\n: <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml.h</a>\n</li>\n<li>yaml_sequence_style_t\n: <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml.h</a>\n</li>\n<li>yaml_simple_key_t\n: <a class=\"el\" href=\"group__parser.html#gae5570fbb7ab7c8332cd666f3a9c26591\">yaml.h</a>\n</li>\n<li>YAML_SINGLE_QUOTED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\">yaml.h</a>\n</li>\n<li>YAML_STR_TAG\n: <a class=\"el\" href=\"group__nodes.html#gac5dbc6d1f556663edf8db88d6113e931\">yaml.h</a>\n</li>\n<li>YAML_STREAM_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\">yaml.h</a>\n</li>\n<li>yaml_stream_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga84cf0c3ff01251c852c71624e64df9fe\">yaml.h</a>\n</li>\n<li>YAML_STREAM_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\">yaml.h</a>\n</li>\n<li>YAML_STREAM_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\">yaml.h</a>\n</li>\n<li>yaml_stream_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga0650d255b23d9aae13c839f4ab3ec2ab\">yaml.h</a>\n</li>\n<li>YAML_STREAM_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\">yaml.h</a>\n</li>\n<li>yaml_tag_directive_t\n: <a class=\"el\" href=\"group__basic.html#ga0b4bc4871b0c9104e32d40d5f3803674\">yaml.h</a>\n</li>\n<li>YAML_TAG_DIRECTIVE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\">yaml.h</a>\n</li>\n<li>YAML_TAG_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\">yaml.h</a>\n</li>\n<li>YAML_TIMESTAMP_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga3e27cca7191234f2e8c95eaf3bc99a73\">yaml.h</a>\n</li>\n<li>yaml_token_delete()\n: <a class=\"el\" href=\"group__tokens.html#ga3140131870e38e27f92a8fd286e5c004\">yaml.h</a>\n</li>\n<li>yaml_token_t\n: <a class=\"el\" href=\"group__tokens.html#ga1ed3dc460e62aee8270c5d63d5734bbb\">yaml.h</a>\n</li>\n<li>yaml_token_type_e\n: <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml.h</a>\n</li>\n<li>yaml_token_type_t\n: <a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml.h</a>\n</li>\n<li>YAML_UTF16BE_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\">yaml.h</a>\n</li>\n<li>YAML_UTF16LE_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\">yaml.h</a>\n</li>\n<li>YAML_UTF8_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\">yaml.h</a>\n</li>\n<li>YAML_VALUE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\">yaml.h</a>\n</li>\n<li>yaml_version_directive_t\n: <a class=\"el\" href=\"group__basic.html#ga2fc55608333fbe6df17cf891be709b72\">yaml.h</a>\n</li>\n<li>YAML_VERSION_DIRECTIVE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\">yaml.h</a>\n</li>\n<li>yaml_write_handler_t\n: <a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml.h</a>\n</li>\n<li>YAML_WRITER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals_defs.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li class=\"current\"><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>YAML_BOOL_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga312629a1f51e91b136352db988d4d771\">yaml.h</a>\n</li>\n<li>YAML_DECLARE\n: <a class=\"el\" href=\"group__export.html#ga0791fd3e1d85ed53711b1feaae131f93\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_MAPPING_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf7b1f8f0ce5665794510cd3841802a5f\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_SCALAR_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf6b0c4e819b8f6915515a4f70065aaaa\">yaml.h</a>\n</li>\n<li>YAML_DEFAULT_SEQUENCE_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaf195b67002518702e27746d6b4da6124\">yaml.h</a>\n</li>\n<li>YAML_FLOAT_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga6ab2ec71fc47cb24f1003b9acdb92843\">yaml.h</a>\n</li>\n<li>YAML_INT_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga83263cdb4ffa6ad2f7d9a87281979ff5\">yaml.h</a>\n</li>\n<li>YAML_MAP_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga22ae99cf3ac014dd76873268fd068c12\">yaml.h</a>\n</li>\n<li>YAML_NULL_TAG\n: <a class=\"el\" href=\"group__nodes.html#gadfa882b6e42a3a993d12392d55260b00\">yaml.h</a>\n</li>\n<li>YAML_SEQ_TAG\n: <a class=\"el\" href=\"group__nodes.html#gaa8284b30f9c9e3f10f6a69c9b882f417\">yaml.h</a>\n</li>\n<li>YAML_STR_TAG\n: <a class=\"el\" href=\"group__nodes.html#gac5dbc6d1f556663edf8db88d6113e931\">yaml.h</a>\n</li>\n<li>YAML_TIMESTAMP_TAG\n: <a class=\"el\" href=\"group__nodes.html#ga3e27cca7191234f2e8c95eaf3bc99a73\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals_enum.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li class=\"current\"><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>yaml_break_e\n: <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml.h</a>\n</li>\n<li>yaml_emitter_state_e\n: <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml.h</a>\n</li>\n<li>yaml_encoding_e\n: <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml.h</a>\n</li>\n<li>yaml_error_type_e\n: <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml.h</a>\n</li>\n<li>yaml_event_type_e\n: <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml.h</a>\n</li>\n<li>yaml_mapping_style_e\n: <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml.h</a>\n</li>\n<li>yaml_node_type_e\n: <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml.h</a>\n</li>\n<li>yaml_parser_state_e\n: <a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml.h</a>\n</li>\n<li>yaml_scalar_style_e\n: <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml.h</a>\n</li>\n<li>yaml_sequence_style_e\n: <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml.h</a>\n</li>\n<li>yaml_token_type_e\n: <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals_eval.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li class=\"current\"><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_y\"><span>y</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_y\"></a>- y -</h3><ul>\n<li>YAML_ALIAS_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\">yaml.h</a>\n</li>\n<li>YAML_ALIAS_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\">yaml.h</a>\n</li>\n<li>YAML_ANCHOR_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\">yaml.h</a>\n</li>\n<li>YAML_ANY_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\">yaml.h</a>\n</li>\n<li>YAML_ANY_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\">yaml.h</a>\n</li>\n<li>YAML_ANY_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\">yaml.h</a>\n</li>\n<li>YAML_ANY_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\">yaml.h</a>\n</li>\n<li>YAML_ANY_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_ENTRY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_MAPPING_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_SEQUENCE_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\">yaml.h</a>\n</li>\n<li>YAML_BLOCK_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\">yaml.h</a>\n</li>\n<li>YAML_COMPOSER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\">yaml.h</a>\n</li>\n<li>YAML_CR_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\">yaml.h</a>\n</li>\n<li>YAML_CRLN_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\">yaml.h</a>\n</li>\n<li>YAML_DOCUMENT_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\">yaml.h</a>\n</li>\n<li>YAML_DOUBLE_QUOTED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\">yaml.h</a>\n</li>\n<li>YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_CONTENT_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_END_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\">yaml.h</a>\n</li>\n<li>YAML_EMIT_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\">yaml.h</a>\n</li>\n<li>YAML_EMIT_END_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FIRST_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\">yaml.h</a>\n</li>\n<li>YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\">yaml.h</a>\n</li>\n<li>YAML_EMIT_STREAM_START_STATE\n: <a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\">yaml.h</a>\n</li>\n<li>YAML_EMITTER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\">yaml.h</a>\n</li>\n<li>YAML_FLOW_ENTRY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\">yaml.h</a>\n</li>\n<li>YAML_FLOW_MAPPING_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\">yaml.h</a>\n</li>\n<li>YAML_FLOW_SEQUENCE_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\">yaml.h</a>\n</li>\n<li>YAML_FOLDED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\">yaml.h</a>\n</li>\n<li>YAML_KEY_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\">yaml.h</a>\n</li>\n<li>YAML_LITERAL_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\">yaml.h</a>\n</li>\n<li>YAML_LN_BREAK\n: <a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\">yaml.h</a>\n</li>\n<li>YAML_MAPPING_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\">yaml.h</a>\n</li>\n<li>YAML_MEMORY_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\">yaml.h</a>\n</li>\n<li>YAML_NO_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\">yaml.h</a>\n</li>\n<li>YAML_NO_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\">yaml.h</a>\n</li>\n<li>YAML_NO_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\">yaml.h</a>\n</li>\n<li>YAML_NO_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_NODE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\">yaml.h</a>\n</li>\n<li>YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_CONTENT_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\">yaml.h</a>\n</li>\n<li>YAML_PARSE_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\">yaml.h</a>\n</li>\n<li>YAML_PARSE_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_NODE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\">yaml.h</a>\n</li>\n<li>YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\">yaml.h</a>\n</li>\n<li>YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\">yaml.h</a>\n</li>\n<li>YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\">yaml.h</a>\n</li>\n<li>YAML_PARSE_STREAM_START_STATE\n: <a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\">yaml.h</a>\n</li>\n<li>YAML_PARSER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\">yaml.h</a>\n</li>\n<li>YAML_PLAIN_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\">yaml.h</a>\n</li>\n<li>YAML_READER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\">yaml.h</a>\n</li>\n<li>YAML_SCALAR_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\">yaml.h</a>\n</li>\n<li>YAML_SCANNER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_NODE\n: <a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\">yaml.h</a>\n</li>\n<li>YAML_SEQUENCE_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\">yaml.h</a>\n</li>\n<li>YAML_SINGLE_QUOTED_SCALAR_STYLE\n: <a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\">yaml.h</a>\n</li>\n<li>YAML_STREAM_END_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\">yaml.h</a>\n</li>\n<li>YAML_STREAM_END_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\">yaml.h</a>\n</li>\n<li>YAML_STREAM_START_EVENT\n: <a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\">yaml.h</a>\n</li>\n<li>YAML_STREAM_START_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\">yaml.h</a>\n</li>\n<li>YAML_TAG_DIRECTIVE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\">yaml.h</a>\n</li>\n<li>YAML_TAG_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\">yaml.h</a>\n</li>\n<li>YAML_UTF16BE_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\">yaml.h</a>\n</li>\n<li>YAML_UTF16LE_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\">yaml.h</a>\n</li>\n<li>YAML_UTF8_ENCODING\n: <a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\">yaml.h</a>\n</li>\n<li>YAML_VALUE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\">yaml.h</a>\n</li>\n<li>YAML_VERSION_DIRECTIVE_TOKEN\n: <a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\">yaml.h</a>\n</li>\n<li>YAML_WRITER_ERROR\n: <a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals_func.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li class=\"current\"><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs3\">\n    <ul class=\"tablist\">\n      <li><a href=\"#index_y\"><span>y</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;\n\n<h3><a class=\"anchor\" id=\"index_y\"></a>- y -</h3><ul>\n<li>yaml_alias_event_initialize()\n: <a class=\"el\" href=\"group__events.html#gade4c15b75eb9a8035e04d4f0dd23f005\">yaml.h</a>\n</li>\n<li>yaml_document_add_mapping()\n: <a class=\"el\" href=\"group__nodes.html#ga45a9f8288704f99cd81dc5cb31329d34\">yaml.h</a>\n</li>\n<li>yaml_document_add_scalar()\n: <a class=\"el\" href=\"group__nodes.html#ga45dab8b983b58a005557d4b01f5057b0\">yaml.h</a>\n</li>\n<li>yaml_document_add_sequence()\n: <a class=\"el\" href=\"group__nodes.html#ga83b2f7fdd9a439397a42016bddad7786\">yaml.h</a>\n</li>\n<li>yaml_document_append_mapping_pair()\n: <a class=\"el\" href=\"group__nodes.html#ga2db27002d8a9ae06b1729d0ee06553d2\">yaml.h</a>\n</li>\n<li>yaml_document_append_sequence_item()\n: <a class=\"el\" href=\"group__nodes.html#ga16435917cd6c0261cd390fa8cf173b1b\">yaml.h</a>\n</li>\n<li>yaml_document_delete()\n: <a class=\"el\" href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\">yaml.h</a>\n</li>\n<li>yaml_document_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga8bae16548ee88f8a5ca15204f8c30344\">yaml.h</a>\n</li>\n<li>yaml_document_get_node()\n: <a class=\"el\" href=\"group__nodes.html#gafa1feabc9747dbded4dca24e27d3c21a\">yaml.h</a>\n</li>\n<li>yaml_document_get_root_node()\n: <a class=\"el\" href=\"group__nodes.html#ga40eeaa68fb2f3be34c4fe34e7597d324\">yaml.h</a>\n</li>\n<li>yaml_document_initialize()\n: <a class=\"el\" href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\">yaml.h</a>\n</li>\n<li>yaml_document_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga527e89302e1c969fbea5aa45664bf51c\">yaml.h</a>\n</li>\n<li>yaml_emitter_close()\n: <a class=\"el\" href=\"group__emitter.html#gaa91442864679280985df14b2d96b8c42\">yaml.h</a>\n</li>\n<li>yaml_emitter_delete()\n: <a class=\"el\" href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\">yaml.h</a>\n</li>\n<li>yaml_emitter_dump()\n: <a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\">yaml.h</a>\n</li>\n<li>yaml_emitter_emit()\n: <a class=\"el\" href=\"group__emitter.html#ga4d6c0f8e712797e2660e69479fdae433\">yaml.h</a>\n</li>\n<li>yaml_emitter_flush()\n: <a class=\"el\" href=\"group__emitter.html#gacaf24456e2bf85bc5654cbd7d828055f\">yaml.h</a>\n</li>\n<li>yaml_emitter_initialize()\n: <a class=\"el\" href=\"group__emitter.html#ga83649205374285802fc27aa293ecd111\">yaml.h</a>\n</li>\n<li>yaml_emitter_open()\n: <a class=\"el\" href=\"group__emitter.html#gae323c34e378040106f24c7b5ab834b16\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_break()\n: <a class=\"el\" href=\"group__emitter.html#ga04b5494f0b8244eec359579c31d5e20c\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_canonical()\n: <a class=\"el\" href=\"group__emitter.html#ga62713a8130e11d95cbefa95a2eb3ac4b\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_encoding()\n: <a class=\"el\" href=\"group__emitter.html#gabc22888ec8bf942199acbf38f7a0b9bb\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_indent()\n: <a class=\"el\" href=\"group__emitter.html#ga07eca3c344053a9028b4a84291cdf4d7\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output()\n: <a class=\"el\" href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output_file()\n: <a class=\"el\" href=\"group__emitter.html#gaf7610c61b303bde9c701024c10ece024\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_output_string()\n: <a class=\"el\" href=\"group__emitter.html#ga62725c0f616f634588374d1a4c0ed35a\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_unicode()\n: <a class=\"el\" href=\"group__emitter.html#gaa59e7dcf24cb9b614c32af6c3e949fc3\">yaml.h</a>\n</li>\n<li>yaml_emitter_set_width()\n: <a class=\"el\" href=\"group__emitter.html#gaa91ae0fa8af5ab67e64567e08f4458c2\">yaml.h</a>\n</li>\n<li>yaml_event_delete()\n: <a class=\"el\" href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\">yaml.h</a>\n</li>\n<li>yaml_get_version()\n: <a class=\"el\" href=\"group__version.html#gaec764c91f3e181ae63d3d59b7980fe78\">yaml.h</a>\n</li>\n<li>yaml_get_version_string()\n: <a class=\"el\" href=\"group__version.html#gaf1ba5c1c34e809db5047d79a9fa85a73\">yaml.h</a>\n</li>\n<li>yaml_mapping_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga3afaf8b3aca2ec902a4e268f12adb0c2\">yaml.h</a>\n</li>\n<li>yaml_mapping_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga0603cf8d20f0b6dfc3be04b6360134aa\">yaml.h</a>\n</li>\n<li>yaml_parser_delete()\n: <a class=\"el\" href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\">yaml.h</a>\n</li>\n<li>yaml_parser_initialize()\n: <a class=\"el\" href=\"group__parser.html#gacc37ceeb5847e38a3fe24eb0c9b53965\">yaml.h</a>\n</li>\n<li>yaml_parser_load()\n: <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\">yaml.h</a>\n</li>\n<li>yaml_parser_parse()\n: <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\">yaml.h</a>\n</li>\n<li>yaml_parser_scan()\n: <a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\">yaml.h</a>\n</li>\n<li>yaml_parser_set_encoding()\n: <a class=\"el\" href=\"group__parser.html#ga9565b64975570ed34612a19adf02ae6a\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input()\n: <a class=\"el\" href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input_file()\n: <a class=\"el\" href=\"group__parser.html#gac3f00f8beb2365b1e4569692d64696b6\">yaml.h</a>\n</li>\n<li>yaml_parser_set_input_string()\n: <a class=\"el\" href=\"group__parser.html#ga08a94762bf5f4c61f72c1da0a407df0d\">yaml.h</a>\n</li>\n<li>yaml_scalar_event_initialize()\n: <a class=\"el\" href=\"group__events.html#gafc60a1a437385e19e6fb3be075958c8c\">yaml.h</a>\n</li>\n<li>yaml_sequence_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga99fdfa4b9d42b64d8171c9b22f334b1c\">yaml.h</a>\n</li>\n<li>yaml_sequence_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga53aea428c768d7b131923d08c904b4eb\">yaml.h</a>\n</li>\n<li>yaml_stream_end_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga84cf0c3ff01251c852c71624e64df9fe\">yaml.h</a>\n</li>\n<li>yaml_stream_start_event_initialize()\n: <a class=\"el\" href=\"group__events.html#ga0650d255b23d9aae13c839f4ab3ec2ab\">yaml.h</a>\n</li>\n<li>yaml_token_delete()\n: <a class=\"el\" href=\"group__tokens.html#ga3140131870e38e27f92a8fd286e5c004\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/globals_type.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Data Fields</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li class=\"current\"><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"globals.html\"><span>All</span></a></li>\n      <li><a href=\"globals_func.html\"><span>Functions</span></a></li>\n      <li class=\"current\"><a href=\"globals_type.html\"><span>Typedefs</span></a></li>\n      <li><a href=\"globals_enum.html\"><span>Enumerations</span></a></li>\n      <li><a href=\"globals_eval.html\"><span>Enumerator</span></a></li>\n      <li><a href=\"globals_defs.html\"><span>Defines</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"contents\">\n&nbsp;<ul>\n<li>yaml_alias_data_t\n: <a class=\"el\" href=\"group__parser.html#ga1434228b82f5f90d3c8ccda816e9ca9d\">yaml.h</a>\n</li>\n<li>yaml_break_t\n: <a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml.h</a>\n</li>\n<li>yaml_char_t\n: <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml.h</a>\n</li>\n<li>yaml_document_t\n: <a class=\"el\" href=\"group__nodes.html#gad94e064e95baeb22e4f7acc7804e8479\">yaml.h</a>\n</li>\n<li>yaml_emitter_state_t\n: <a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml.h</a>\n</li>\n<li>yaml_emitter_t\n: <a class=\"el\" href=\"group__emitter.html#ga4ce3e054f0016c49d9e8c36d359e710b\">yaml.h</a>\n</li>\n<li>yaml_encoding_t\n: <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml.h</a>\n</li>\n<li>yaml_error_type_t\n: <a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml.h</a>\n</li>\n<li>yaml_event_t\n: <a class=\"el\" href=\"group__events.html#ga3b392d9716c4920cabefdd29e78dd542\">yaml.h</a>\n</li>\n<li>yaml_event_type_t\n: <a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml.h</a>\n</li>\n<li>yaml_mapping_style_t\n: <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml.h</a>\n</li>\n<li>yaml_mark_t\n: <a class=\"el\" href=\"group__basic.html#ga232eacba89691b841ba941338a302bfd\">yaml.h</a>\n</li>\n<li>yaml_node_item_t\n: <a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml.h</a>\n</li>\n<li>yaml_node_pair_t\n: <a class=\"el\" href=\"group__nodes.html#ga90f1c8b83c5c38dc4016afc1cc2050c4\">yaml.h</a>\n</li>\n<li>yaml_node_t\n: <a class=\"el\" href=\"group__nodes.html#ga9eaaa233b120b9d9db47de93c294c40f\">yaml.h</a>\n</li>\n<li>yaml_node_type_t\n: <a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml.h</a>\n</li>\n<li>yaml_parser_state_t\n: <a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml.h</a>\n</li>\n<li>yaml_parser_t\n: <a class=\"el\" href=\"group__parser.html#gafdc6319cb28a8b8034542b29be85b0c4\">yaml.h</a>\n</li>\n<li>yaml_read_handler_t\n: <a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml.h</a>\n</li>\n<li>yaml_scalar_style_t\n: <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml.h</a>\n</li>\n<li>yaml_sequence_style_t\n: <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml.h</a>\n</li>\n<li>yaml_simple_key_t\n: <a class=\"el\" href=\"group__parser.html#gae5570fbb7ab7c8332cd666f3a9c26591\">yaml.h</a>\n</li>\n<li>yaml_tag_directive_t\n: <a class=\"el\" href=\"group__basic.html#ga0b4bc4871b0c9104e32d40d5f3803674\">yaml.h</a>\n</li>\n<li>yaml_token_t\n: <a class=\"el\" href=\"group__tokens.html#ga1ed3dc460e62aee8270c5d63d5734bbb\">yaml.h</a>\n</li>\n<li>yaml_token_type_t\n: <a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml.h</a>\n</li>\n<li>yaml_version_directive_t\n: <a class=\"el\" href=\"group__basic.html#ga2fc55608333fbe6df17cf891be709b72\">yaml.h</a>\n</li>\n<li>yaml_write_handler_t\n: <a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml.h</a>\n</li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__basic.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Basic Types</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<h1>Basic Types</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive data.  <a href=\"structyaml__version__directive__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag directive data.  <a href=\"structyaml__tag__directive__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The pointer position.  <a href=\"structyaml__mark__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef unsigned char&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The character type (UTF-8 octet).  <a href=\"#gaf8657e81f0b8b05d1a081001fc6cb8bd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <br class=\"typebreak\"/>\n<a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2fc55608333fbe6df17cf891be709b72\">yaml_version_directive_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive data.  <a href=\"#ga2fc55608333fbe6df17cf891be709b72\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga0b4bc4871b0c9104e32d40d5f3803674\">yaml_tag_directive_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag directive data.  <a href=\"#ga0b4bc4871b0c9104e32d40d5f3803674\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream encoding.  <a href=\"#ga2170996d7e636397b5e6bc0c1b7df7c6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Line break types.  <a href=\"#ga64d1365e1acd4deeab50d6b48e39cb6d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Many bad things could happen with the parser and emitter.  <a href=\"#ga1a449f0c1b023e2ef1a596093c018e73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga232eacba89691b841ba941338a302bfd\">yaml_mark_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The pointer position.  <a href=\"#ga232eacba89691b841ba941338a302bfd\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\">YAML_ANY_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\">YAML_UTF8_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\">YAML_UTF16LE_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\">YAML_UTF16BE_ENCODING</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The stream encoding. </p>\n <a href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\">YAML_ANY_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\">YAML_CR_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\">YAML_LN_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\">YAML_CRLN_BREAK</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Line break types. </p>\n <a href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\">YAML_NO_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\">YAML_MEMORY_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\">YAML_READER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\">YAML_SCANNER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\">YAML_PARSER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\">YAML_COMPOSER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\">YAML_WRITER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\">YAML_EMITTER_ERROR</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Many bad things could happen with the parser and emitter. </p>\n <a href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">More...</a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaf8657e81f0b8b05d1a081001fc6cb8bd\"></a><!-- doxytag: member=\"yaml.h::yaml_char_t\" ref=\"gaf8657e81f0b8b05d1a081001fc6cb8bd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef unsigned char <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The character type (UTF-8 octet). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2fc55608333fbe6df17cf891be709b72\"></a><!-- doxytag: member=\"yaml.h::yaml_version_directive_t\" ref=\"ga2fc55608333fbe6df17cf891be709b72\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a>  <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The version directive data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b4bc4871b0c9104e32d40d5f3803674\"></a><!-- doxytag: member=\"yaml.h::yaml_tag_directive_t\" ref=\"ga0b4bc4871b0c9104e32d40d5f3803674\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a>  <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag directive data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2170996d7e636397b5e6bc0c1b7df7c6\"></a><!-- doxytag: member=\"yaml.h::yaml_encoding_t\" ref=\"ga2170996d7e636397b5e6bc0c1b7df7c6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a>  <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream encoding. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64d1365e1acd4deeab50d6b48e39cb6d\"></a><!-- doxytag: member=\"yaml.h::yaml_break_t\" ref=\"ga64d1365e1acd4deeab50d6b48e39cb6d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a>  <a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Line break types. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a449f0c1b023e2ef1a596093c018e73\"></a><!-- doxytag: member=\"yaml.h::yaml_error_type_t\" ref=\"ga1a449f0c1b023e2ef1a596093c018e73\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a>  <a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Many bad things could happen with the parser and emitter. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga232eacba89691b841ba941338a302bfd\"></a><!-- doxytag: member=\"yaml.h::yaml_mark_t\" ref=\"ga232eacba89691b841ba941338a302bfd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a>  <a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The pointer position. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"gab88ee52b5d722e644c1cb4d1afcccdd9\"></a><!-- doxytag: member=\"yaml.h::yaml_encoding_e\" ref=\"gab88ee52b5d722e644c1cb4d1afcccdd9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream encoding. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\"></a><!-- doxytag: member=\"YAML_ANY_ENCODING\" ref=\"ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\" args=\"\" -->YAML_ANY_ENCODING</em>&nbsp;</td><td>\n<p>Let the parser choose the encoding. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\"></a><!-- doxytag: member=\"YAML_UTF8_ENCODING\" ref=\"ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\" args=\"\" -->YAML_UTF8_ENCODING</em>&nbsp;</td><td>\n<p>The default UTF-8 encoding. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\"></a><!-- doxytag: member=\"YAML_UTF16LE_ENCODING\" ref=\"ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\" args=\"\" -->YAML_UTF16LE_ENCODING</em>&nbsp;</td><td>\n<p>The UTF-16-LE encoding with BOM. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\"></a><!-- doxytag: member=\"YAML_UTF16BE_ENCODING\" ref=\"ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\" args=\"\" -->YAML_UTF16BE_ENCODING</em>&nbsp;</td><td>\n<p>The UTF-16-BE encoding with BOM. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga912ad8c893126133fab5e4231db3017e\"></a><!-- doxytag: member=\"yaml.h::yaml_break_e\" ref=\"ga912ad8c893126133fab5e4231db3017e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Line break types. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\"></a><!-- doxytag: member=\"YAML_ANY_BREAK\" ref=\"gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\" args=\"\" -->YAML_ANY_BREAK</em>&nbsp;</td><td>\n<p>Let the parser choose the break type. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\"></a><!-- doxytag: member=\"YAML_CR_BREAK\" ref=\"gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\" args=\"\" -->YAML_CR_BREAK</em>&nbsp;</td><td>\n<p>Use CR for line breaks (Mac style). </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\"></a><!-- doxytag: member=\"YAML_LN_BREAK\" ref=\"gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\" args=\"\" -->YAML_LN_BREAK</em>&nbsp;</td><td>\n<p>Use LN for line breaks (Unix style). </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\"></a><!-- doxytag: member=\"YAML_CRLN_BREAK\" ref=\"gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\" args=\"\" -->YAML_CRLN_BREAK</em>&nbsp;</td><td>\n<p>Use CR LN for line breaks (DOS style). </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2efbcde2e82238117982b789c5a8ea01\"></a><!-- doxytag: member=\"yaml.h::yaml_error_type_e\" ref=\"ga2efbcde2e82238117982b789c5a8ea01\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Many bad things could happen with the parser and emitter. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\"></a><!-- doxytag: member=\"YAML_NO_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\" args=\"\" -->YAML_NO_ERROR</em>&nbsp;</td><td>\n<p>No error is produced. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\"></a><!-- doxytag: member=\"YAML_MEMORY_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\" args=\"\" -->YAML_MEMORY_ERROR</em>&nbsp;</td><td>\n<p>Cannot allocate or reallocate a block of memory. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\"></a><!-- doxytag: member=\"YAML_READER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\" args=\"\" -->YAML_READER_ERROR</em>&nbsp;</td><td>\n<p>Cannot read or decode the input stream. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\"></a><!-- doxytag: member=\"YAML_SCANNER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\" args=\"\" -->YAML_SCANNER_ERROR</em>&nbsp;</td><td>\n<p>Cannot scan the input stream. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\"></a><!-- doxytag: member=\"YAML_PARSER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\" args=\"\" -->YAML_PARSER_ERROR</em>&nbsp;</td><td>\n<p>Cannot parse the input stream. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\"></a><!-- doxytag: member=\"YAML_COMPOSER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\" args=\"\" -->YAML_COMPOSER_ERROR</em>&nbsp;</td><td>\n<p>Cannot compose a YAML document. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\"></a><!-- doxytag: member=\"YAML_WRITER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\" args=\"\" -->YAML_WRITER_ERROR</em>&nbsp;</td><td>\n<p>Cannot write to the output stream. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\"></a><!-- doxytag: member=\"YAML_EMITTER_ERROR\" ref=\"gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\" args=\"\" -->YAML_EMITTER_ERROR</em>&nbsp;</td><td>\n<p>Cannot emit a YAML stream. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__emitter.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Emitter Definitions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Emitter Definitions</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter structure.  <a href=\"structyaml__emitter__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> (void *data, unsigned char *buffer, size_t size)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The prototype of a write handler.  <a href=\"#ga1669659aacbe631ad406c78fce1f5379\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter states.  <a href=\"#ga0889461fa3efe8eee881aef48a4ba6b2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga4ce3e054f0016c49d9e8c36d359e710b\">yaml_emitter_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter structure.  <a href=\"#ga4ce3e054f0016c49d9e8c36d359e710b\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\">YAML_EMIT_STREAM_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\">YAML_EMIT_FIRST_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\">YAML_EMIT_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\">YAML_EMIT_DOCUMENT_CONTENT_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\">YAML_EMIT_DOCUMENT_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\">YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\">YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\">YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\">YAML_EMIT_FLOW_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\">YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\">YAML_EMIT_FLOW_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\">YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\">YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\">YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\">YAML_EMIT_BLOCK_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\">YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\">YAML_EMIT_BLOCK_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\">YAML_EMIT_END_STATE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The emitter states. </p>\n <a href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga83649205374285802fc27aa293ecd111\">yaml_emitter_initialize</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Initialize an emitter.  <a href=\"#ga83649205374285802fc27aa293ecd111\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\">yaml_emitter_delete</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destroy an emitter.  <a href=\"#gad705212f3a5150e3f00075fd90bc8c3d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga62725c0f616f634588374d1a4c0ed35a\">yaml_emitter_set_output_string</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, unsigned char *output, size_t size, size_t *size_written)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a string output.  <a href=\"#ga62725c0f616f634588374d1a4c0ed35a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaf7610c61b303bde9c701024c10ece024\">yaml_emitter_set_output_file</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, FILE *file)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a file output.  <a href=\"#gaf7610c61b303bde9c701024c10ece024\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\">yaml_emitter_set_output</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> *handler, void *data)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a generic output handler.  <a href=\"#gac85a6a212ed7b469fb426a3451d15922\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gabc22888ec8bf942199acbf38f7a0b9bb\">yaml_emitter_set_encoding</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the output encoding.  <a href=\"#gabc22888ec8bf942199acbf38f7a0b9bb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga62713a8130e11d95cbefa95a2eb3ac4b\">yaml_emitter_set_canonical</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int canonical)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set if the output should be in the \"canonical\" format as in the YAML specification.  <a href=\"#ga62713a8130e11d95cbefa95a2eb3ac4b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga07eca3c344053a9028b4a84291cdf4d7\">yaml_emitter_set_indent</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int indent)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the intendation increment.  <a href=\"#ga07eca3c344053a9028b4a84291cdf4d7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa91ae0fa8af5ab67e64567e08f4458c2\">yaml_emitter_set_width</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int width)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the preferred line width.  <a href=\"#gaa91ae0fa8af5ab67e64567e08f4458c2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa59e7dcf24cb9b614c32af6c3e949fc3\">yaml_emitter_set_unicode</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int unicode)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set if unescaped non-ASCII characters are allowed.  <a href=\"#gaa59e7dcf24cb9b614c32af6c3e949fc3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga04b5494f0b8244eec359579c31d5e20c\">yaml_emitter_set_break</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a> line_break)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the preferred line break.  <a href=\"#ga04b5494f0b8244eec359579c31d5e20c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga4d6c0f8e712797e2660e69479fdae433\">yaml_emitter_emit</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Emit an event.  <a href=\"#ga4d6c0f8e712797e2660e69479fdae433\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gae323c34e378040106f24c7b5ab834b16\">yaml_emitter_open</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Start a YAML stream.  <a href=\"#gae323c34e378040106f24c7b5ab834b16\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa91442864679280985df14b2d96b8c42\">yaml_emitter_close</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Finish a YAML stream.  <a href=\"#gaa91442864679280985df14b2d96b8c42\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\">yaml_emitter_dump</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Emit a YAML document.  <a href=\"#ga5f0306abe9bff373b5bc339913b3769c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gacaf24456e2bf85bc5654cbd7d828055f\">yaml_emitter_flush</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Flush the accumulated characters to the output.  <a href=\"#gacaf24456e2bf85bc5654cbd7d828055f\"></a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga1669659aacbe631ad406c78fce1f5379\"></a><!-- doxytag: member=\"yaml.h::yaml_write_handler_t\" ref=\"ga1669659aacbe631ad406c78fce1f5379\" args=\"(void *data, unsigned char *buffer, size_t size)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef int <a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a>(void *data, unsigned char *buffer, size_t size)</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The prototype of a write handler. </p>\n<p>The write handler is called when the emitter needs to flush the accumulated characters to the output. The handler should write <em>size</em> bytes of the <em>buffer</em> to the output.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>data</em>&nbsp;</td><td>A pointer to an application data specified by <a class=\"el\" href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\" title=\"Set a generic output handler.\">yaml_emitter_set_output()</a>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>buffer</em>&nbsp;</td><td>The buffer with bytes to be written. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>size</em>&nbsp;</td><td>The size of the buffer.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>On success, the handler should return <code>1</code>. If the handler failed, the returned value should be <code>0</code>. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0889461fa3efe8eee881aef48a4ba6b2\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_state_t\" ref=\"ga0889461fa3efe8eee881aef48a4ba6b2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a>  <a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The emitter states. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4ce3e054f0016c49d9e8c36d359e710b\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_t\" ref=\"ga4ce3e054f0016c49d9e8c36d359e710b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a>  <a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The emitter structure. </p>\n<p>All members are internal. Manage the structure using the <code>yaml_emitter_</code> family of functions. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"ga387b79da11c3941e43a56947263aa721\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_state_e\" ref=\"ga387b79da11c3941e43a56947263aa721\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The emitter states. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\"></a><!-- doxytag: member=\"YAML_EMIT_STREAM_START_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\" args=\"\" -->YAML_EMIT_STREAM_START_STATE</em>&nbsp;</td><td>\n<p>Expect STREAM-START. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\"></a><!-- doxytag: member=\"YAML_EMIT_FIRST_DOCUMENT_START_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\" args=\"\" -->YAML_EMIT_FIRST_DOCUMENT_START_STATE</em>&nbsp;</td><td>\n<p>Expect the first DOCUMENT-START or STREAM-END. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\"></a><!-- doxytag: member=\"YAML_EMIT_DOCUMENT_START_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\" args=\"\" -->YAML_EMIT_DOCUMENT_START_STATE</em>&nbsp;</td><td>\n<p>Expect DOCUMENT-START or STREAM-END. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\"></a><!-- doxytag: member=\"YAML_EMIT_DOCUMENT_CONTENT_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\" args=\"\" -->YAML_EMIT_DOCUMENT_CONTENT_STATE</em>&nbsp;</td><td>\n<p>Expect the content of a document. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\"></a><!-- doxytag: member=\"YAML_EMIT_DOCUMENT_END_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\" args=\"\" -->YAML_EMIT_DOCUMENT_END_STATE</em>&nbsp;</td><td>\n<p>Expect DOCUMENT-END. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\" args=\"\" -->YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE</em>&nbsp;</td><td>\n<p>Expect the first item of a flow sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\" args=\"\" -->YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE</em>&nbsp;</td><td>\n<p>Expect an item of a flow sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\" args=\"\" -->YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect the first key of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_MAPPING_KEY_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\" args=\"\" -->YAML_EMIT_FLOW_MAPPING_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect a key of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\" args=\"\" -->YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value for a simple key of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\"></a><!-- doxytag: member=\"YAML_EMIT_FLOW_MAPPING_VALUE_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\" args=\"\" -->YAML_EMIT_FLOW_MAPPING_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\" args=\"\" -->YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE</em>&nbsp;</td><td>\n<p>Expect the first item of a block sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\" args=\"\" -->YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE</em>&nbsp;</td><td>\n<p>Expect an item of a block sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\" args=\"\" -->YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect the first key of a block mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_MAPPING_KEY_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\" args=\"\" -->YAML_EMIT_BLOCK_MAPPING_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect the key of a block mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\" args=\"\" -->YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value for a simple key of a block mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\"></a><!-- doxytag: member=\"YAML_EMIT_BLOCK_MAPPING_VALUE_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\" args=\"\" -->YAML_EMIT_BLOCK_MAPPING_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value of a block mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\"></a><!-- doxytag: member=\"YAML_EMIT_END_STATE\" ref=\"gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\" args=\"\" -->YAML_EMIT_END_STATE</em>&nbsp;</td><td>\n<p>Expect nothing. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"ga83649205374285802fc27aa293ecd111\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_initialize\" ref=\"ga83649205374285802fc27aa293ecd111\" args=\"(yaml_emitter_t *emitter)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Initialize an emitter. </p>\n<p>This function creates a new emitter object. An application is responsible for destroying the object using the <a class=\"el\" href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\" title=\"Destroy an emitter.\">yaml_emitter_delete()</a> function.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An empty parser object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad705212f3a5150e3f00075fd90bc8c3d\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_delete\" ref=\"gad705212f3a5150e3f00075fd90bc8c3d\" args=\"(yaml_emitter_t *emitter)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_delete </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Destroy an emitter. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62725c0f616f634588374d1a4c0ed35a\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_output_string\" ref=\"ga62725c0f616f634588374d1a4c0ed35a\" args=\"(yaml_emitter_t *emitter, unsigned char *output, size_t size, size_t *size_written)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_output_string </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned char *&nbsp;</td>\n          <td class=\"paramname\"> <em>output</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&nbsp;</td>\n          <td class=\"paramname\"> <em>size</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t *&nbsp;</td>\n          <td class=\"paramname\"> <em>size_written</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a string output. </p>\n<p>The emitter will write the output characters to the <em>output</em> buffer of the size <em>size</em>. The emitter will set <em>size_written</em> to the number of written bytes. If the buffer is smaller than required, the emitter produces the YAML_WRITE_ERROR error.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>output</em>&nbsp;</td><td>An output buffer. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>size</em>&nbsp;</td><td>The buffer size. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>size_written</em>&nbsp;</td><td>The pointer to save the number of written bytes. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7610c61b303bde9c701024c10ece024\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_output_file\" ref=\"gaf7610c61b303bde9c701024c10ece024\" args=\"(yaml_emitter_t *emitter, FILE *file)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_output_file </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>file</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a file output. </p>\n<p><em>file</em> should be a file object open for writing. The application is responsible for closing the <em>file</em>.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>file</em>&nbsp;</td><td>An open file. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac85a6a212ed7b469fb426a3451d15922\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_output\" ref=\"gac85a6a212ed7b469fb426a3451d15922\" args=\"(yaml_emitter_t *emitter, yaml_write_handler_t *handler, void *data)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_output </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>handler</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&nbsp;</td>\n          <td class=\"paramname\"> <em>data</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a generic output handler. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>handler</em>&nbsp;</td><td>A write handler. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>data</em>&nbsp;</td><td>Any application data for passing to the write handler. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc22888ec8bf942199acbf38f7a0b9bb\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_encoding\" ref=\"gabc22888ec8bf942199acbf38f7a0b9bb\" args=\"(yaml_emitter_t *emitter, yaml_encoding_t encoding)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_encoding </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the output encoding. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>encoding</em>&nbsp;</td><td>The output encoding. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62713a8130e11d95cbefa95a2eb3ac4b\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_canonical\" ref=\"ga62713a8130e11d95cbefa95a2eb3ac4b\" args=\"(yaml_emitter_t *emitter, int canonical)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_canonical </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>canonical</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set if the output should be in the \"canonical\" format as in the YAML specification. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>canonical</em>&nbsp;</td><td>If the output is canonical. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07eca3c344053a9028b4a84291cdf4d7\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_indent\" ref=\"ga07eca3c344053a9028b4a84291cdf4d7\" args=\"(yaml_emitter_t *emitter, int indent)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_indent </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>indent</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the intendation increment. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>indent</em>&nbsp;</td><td>The indentation increment (1 &lt; . &lt; 10). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa91ae0fa8af5ab67e64567e08f4458c2\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_width\" ref=\"gaa91ae0fa8af5ab67e64567e08f4458c2\" args=\"(yaml_emitter_t *emitter, int width)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_width </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>width</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the preferred line width. </p>\n<p><code>-1</code> means unlimited.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>width</em>&nbsp;</td><td>The preferred line width. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa59e7dcf24cb9b614c32af6c3e949fc3\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_unicode\" ref=\"gaa59e7dcf24cb9b614c32af6c3e949fc3\" args=\"(yaml_emitter_t *emitter, int unicode)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_unicode </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>unicode</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set if unescaped non-ASCII characters are allowed. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>unicode</em>&nbsp;</td><td>If unescaped Unicode characters are allowed. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04b5494f0b8244eec359579c31d5e20c\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_set_break\" ref=\"ga04b5494f0b8244eec359579c31d5e20c\" args=\"(yaml_emitter_t *emitter, yaml_break_t line_break)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_emitter_set_break </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>line_break</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the preferred line break. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>line_break</em>&nbsp;</td><td>The preferred line break. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4d6c0f8e712797e2660e69479fdae433\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_emit\" ref=\"ga4d6c0f8e712797e2660e69479fdae433\" args=\"(yaml_emitter_t *emitter, yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_emit </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Emit an event. </p>\n<p>The event object may be generated using the <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\" title=\"Parse the input stream and produce the next parsing event.\">yaml_parser_parse()</a> function. The emitter takes the responsibility for the event object and destroys its content after it is emitted. The event object is destroyed even if the function fails.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An event object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae323c34e378040106f24c7b5ab834b16\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_open\" ref=\"gae323c34e378040106f24c7b5ab834b16\" args=\"(yaml_emitter_t *emitter)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_open </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Start a YAML stream. </p>\n<p>This function should be used before <a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\" title=\"Emit a YAML document.\">yaml_emitter_dump()</a> is called.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa91442864679280985df14b2d96b8c42\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_close\" ref=\"gaa91442864679280985df14b2d96b8c42\" args=\"(yaml_emitter_t *emitter)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_close </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Finish a YAML stream. </p>\n<p>This function should be used after <a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\" title=\"Emit a YAML document.\">yaml_emitter_dump()</a> is called.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f0306abe9bff373b5bc339913b3769c\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_dump\" ref=\"ga5f0306abe9bff373b5bc339913b3769c\" args=\"(yaml_emitter_t *emitter, yaml_document_t *document)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_dump </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Emit a YAML document. </p>\n<p>The documen object may be generated using the <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\" title=\"Parse the input stream and produce the next YAML document.\">yaml_parser_load()</a> function or the <a class=\"el\" href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\" title=\"Create a YAML document.\">yaml_document_initialize()</a> function. The emitter takes the responsibility for the document object and destoys its content after it is emitted. The document object is destroyedeven if the function fails.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacaf24456e2bf85bc5654cbd7d828055f\"></a><!-- doxytag: member=\"yaml.h::yaml_emitter_flush\" ref=\"gacaf24456e2bf85bc5654cbd7d828055f\" args=\"(yaml_emitter_t *emitter)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_emitter_flush </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>emitter</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Flush the accumulated characters to the output. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>emitter</em>&nbsp;</td><td>An emitter object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__events.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Events</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Events</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event structure.  <a href=\"structyaml__event__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml_event_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Event types.  <a href=\"#ga8934661be36bd7c9d17a8af69eff89a1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga3b392d9716c4920cabefdd29e78dd542\">yaml_event_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event structure.  <a href=\"#ga3b392d9716c4920cabefdd29e78dd542\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\">YAML_NO_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\">YAML_STREAM_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\">YAML_STREAM_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\">YAML_DOCUMENT_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\">YAML_DOCUMENT_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\">YAML_ALIAS_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\">YAML_SCALAR_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\">YAML_SEQUENCE_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\">YAML_SEQUENCE_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\">YAML_MAPPING_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\">YAML_MAPPING_END_EVENT</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Event types. </p>\n <a href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga0650d255b23d9aae13c839f4ab3ec2ab\">yaml_stream_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the STREAM-START event.  <a href=\"#ga0650d255b23d9aae13c839f4ab3ec2ab\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga84cf0c3ff01251c852c71624e64df9fe\">yaml_stream_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the STREAM-END event.  <a href=\"#ga84cf0c3ff01251c852c71624e64df9fe\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga527e89302e1c969fbea5aa45664bf51c\">yaml_document_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *version_directive, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_start, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_end, int implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the DOCUMENT-START event.  <a href=\"#ga527e89302e1c969fbea5aa45664bf51c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga8bae16548ee88f8a5ca15204f8c30344\">yaml_document_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, int implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the DOCUMENT-END event.  <a href=\"#ga8bae16548ee88f8a5ca15204f8c30344\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#gade4c15b75eb9a8035e04d4f0dd23f005\">yaml_alias_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an ALIAS event.  <a href=\"#gade4c15b75eb9a8035e04d4f0dd23f005\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#gafc60a1a437385e19e6fb3be075958c8c\">yaml_scalar_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *value, int length, int plain_implicit, int quoted_implicit, <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SCALAR event.  <a href=\"#gafc60a1a437385e19e6fb3be075958c8c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga53aea428c768d7b131923d08c904b4eb\">yaml_sequence_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, int implicit, <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE-START event.  <a href=\"#ga53aea428c768d7b131923d08c904b4eb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga99fdfa4b9d42b64d8171c9b22f334b1c\">yaml_sequence_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE-END event.  <a href=\"#ga99fdfa4b9d42b64d8171c9b22f334b1c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga0603cf8d20f0b6dfc3be04b6360134aa\">yaml_mapping_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, int implicit, <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING-START event.  <a href=\"#ga0603cf8d20f0b6dfc3be04b6360134aa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga3afaf8b3aca2ec902a4e268f12adb0c2\">yaml_mapping_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING-END event.  <a href=\"#ga3afaf8b3aca2ec902a4e268f12adb0c2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\">yaml_event_delete</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free any memory allocated for an event object.  <a href=\"#ga5330d62ef52856aa53188137cb93a6a1\"></a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga8934661be36bd7c9d17a8af69eff89a1\"></a><!-- doxytag: member=\"yaml.h::yaml_event_type_t\" ref=\"ga8934661be36bd7c9d17a8af69eff89a1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a>  <a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml_event_type_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Event types. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b392d9716c4920cabefdd29e78dd542\"></a><!-- doxytag: member=\"yaml.h::yaml_event_t\" ref=\"ga3b392d9716c4920cabefdd29e78dd542\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a>  <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The event structure. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"ga454fccebae859c188fe3e7fa3299577c\"></a><!-- doxytag: member=\"yaml.h::yaml_event_type_e\" ref=\"ga454fccebae859c188fe3e7fa3299577c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Event types. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\"></a><!-- doxytag: member=\"YAML_NO_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\" args=\"\" -->YAML_NO_EVENT</em>&nbsp;</td><td>\n<p>An empty event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\"></a><!-- doxytag: member=\"YAML_STREAM_START_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\" args=\"\" -->YAML_STREAM_START_EVENT</em>&nbsp;</td><td>\n<p>A STREAM-START event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\"></a><!-- doxytag: member=\"YAML_STREAM_END_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\" args=\"\" -->YAML_STREAM_END_EVENT</em>&nbsp;</td><td>\n<p>A STREAM-END event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\"></a><!-- doxytag: member=\"YAML_DOCUMENT_START_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\" args=\"\" -->YAML_DOCUMENT_START_EVENT</em>&nbsp;</td><td>\n<p>A DOCUMENT-START event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\"></a><!-- doxytag: member=\"YAML_DOCUMENT_END_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\" args=\"\" -->YAML_DOCUMENT_END_EVENT</em>&nbsp;</td><td>\n<p>A DOCUMENT-END event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\"></a><!-- doxytag: member=\"YAML_ALIAS_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\" args=\"\" -->YAML_ALIAS_EVENT</em>&nbsp;</td><td>\n<p>An ALIAS event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\"></a><!-- doxytag: member=\"YAML_SCALAR_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\" args=\"\" -->YAML_SCALAR_EVENT</em>&nbsp;</td><td>\n<p>A SCALAR event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\"></a><!-- doxytag: member=\"YAML_SEQUENCE_START_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\" args=\"\" -->YAML_SEQUENCE_START_EVENT</em>&nbsp;</td><td>\n<p>A SEQUENCE-START event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\"></a><!-- doxytag: member=\"YAML_SEQUENCE_END_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\" args=\"\" -->YAML_SEQUENCE_END_EVENT</em>&nbsp;</td><td>\n<p>A SEQUENCE-END event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\"></a><!-- doxytag: member=\"YAML_MAPPING_START_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\" args=\"\" -->YAML_MAPPING_START_EVENT</em>&nbsp;</td><td>\n<p>A MAPPING-START event. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\"></a><!-- doxytag: member=\"YAML_MAPPING_END_EVENT\" ref=\"gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\" args=\"\" -->YAML_MAPPING_END_EVENT</em>&nbsp;</td><td>\n<p>A MAPPING-END event. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0650d255b23d9aae13c839f4ab3ec2ab\"></a><!-- doxytag: member=\"yaml.h::yaml_stream_start_event_initialize\" ref=\"ga0650d255b23d9aae13c839f4ab3ec2ab\" args=\"(yaml_event_t *event, yaml_encoding_t encoding)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_stream_start_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create the STREAM-START event. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>encoding</em>&nbsp;</td><td>The stream encoding.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84cf0c3ff01251c852c71624e64df9fe\"></a><!-- doxytag: member=\"yaml.h::yaml_stream_end_event_initialize\" ref=\"ga84cf0c3ff01251c852c71624e64df9fe\" args=\"(yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_stream_end_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create the STREAM-END event. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga527e89302e1c969fbea5aa45664bf51c\"></a><!-- doxytag: member=\"yaml.h::yaml_document_start_event_initialize\" ref=\"ga527e89302e1c969fbea5aa45664bf51c\" args=\"(yaml_event_t *event, yaml_version_directive_t *version_directive, yaml_tag_directive_t *tag_directives_start, yaml_tag_directive_t *tag_directives_end, int implicit)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_start_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>version_directive</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag_directives_start</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag_directives_end</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>implicit</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create the DOCUMENT-START event. </p>\n<p>The <em>implicit</em> argument is considered as a stylistic parameter and may be ignored by the emitter.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>version_directive</em>&nbsp;</td><td>The YAML directive value or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag_directives_start</em>&nbsp;</td><td>The beginning of the TAG directives list. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag_directives_end</em>&nbsp;</td><td>The end of the TAG directives list. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>implicit</em>&nbsp;</td><td>If the document start indicator is implicit.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8bae16548ee88f8a5ca15204f8c30344\"></a><!-- doxytag: member=\"yaml.h::yaml_document_end_event_initialize\" ref=\"ga8bae16548ee88f8a5ca15204f8c30344\" args=\"(yaml_event_t *event, int implicit)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_end_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>implicit</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create the DOCUMENT-END event. </p>\n<p>The <em>implicit</em> argument is considered as a stylistic parameter and may be ignored by the emitter.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>implicit</em>&nbsp;</td><td>If the document end indicator is implicit.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade4c15b75eb9a8035e04d4f0dd23f005\"></a><!-- doxytag: member=\"yaml.h::yaml_alias_event_initialize\" ref=\"gade4c15b75eb9a8035e04d4f0dd23f005\" args=\"(yaml_event_t *event, yaml_char_t *anchor)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_alias_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>anchor</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create an ALIAS event. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>anchor</em>&nbsp;</td><td>The anchor value.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafc60a1a437385e19e6fb3be075958c8c\"></a><!-- doxytag: member=\"yaml.h::yaml_scalar_event_initialize\" ref=\"gafc60a1a437385e19e6fb3be075958c8c\" args=\"(yaml_event_t *event, yaml_char_t *anchor, yaml_char_t *tag, yaml_char_t *value, int length, int plain_implicit, int quoted_implicit, yaml_scalar_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_scalar_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>anchor</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>plain_implicit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>quoted_implicit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a SCALAR event. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<p>Either the <em>tag</em> attribute or one of the <em>plain_implicit</em> and <em>quoted_implicit</em> flags must be set.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>anchor</em>&nbsp;</td><td>The scalar anchor or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The scalar tag or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>value</em>&nbsp;</td><td>The scalar value. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>length</em>&nbsp;</td><td>The length of the scalar value. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>plain_implicit</em>&nbsp;</td><td>If the tag may be omitted for the plain style. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>quoted_implicit</em>&nbsp;</td><td>If the tag may be omitted for any non-plain style. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The scalar style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga53aea428c768d7b131923d08c904b4eb\"></a><!-- doxytag: member=\"yaml.h::yaml_sequence_start_event_initialize\" ref=\"ga53aea428c768d7b131923d08c904b4eb\" args=\"(yaml_event_t *event, yaml_char_t *anchor, yaml_char_t *tag, int implicit, yaml_sequence_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_sequence_start_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>anchor</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>implicit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a SEQUENCE-START event. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<p>Either the <em>tag</em> attribute or the <em>implicit</em> flag must be set.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>anchor</em>&nbsp;</td><td>The sequence anchor or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The sequence tag or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>implicit</em>&nbsp;</td><td>If the tag may be omitted. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The sequence style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99fdfa4b9d42b64d8171c9b22f334b1c\"></a><!-- doxytag: member=\"yaml.h::yaml_sequence_end_event_initialize\" ref=\"ga99fdfa4b9d42b64d8171c9b22f334b1c\" args=\"(yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_sequence_end_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a SEQUENCE-END event. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0603cf8d20f0b6dfc3be04b6360134aa\"></a><!-- doxytag: member=\"yaml.h::yaml_mapping_start_event_initialize\" ref=\"ga0603cf8d20f0b6dfc3be04b6360134aa\" args=\"(yaml_event_t *event, yaml_char_t *anchor, yaml_char_t *tag, int implicit, yaml_mapping_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_mapping_start_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>anchor</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>implicit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a MAPPING-START event. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<p>Either the <em>tag</em> attribute or the <em>implicit</em> flag must be set.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>anchor</em>&nbsp;</td><td>The mapping anchor or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The mapping tag or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>implicit</em>&nbsp;</td><td>If the tag may be omitted. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The mapping style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3afaf8b3aca2ec902a4e268f12adb0c2\"></a><!-- doxytag: member=\"yaml.h::yaml_mapping_end_event_initialize\" ref=\"ga3afaf8b3aca2ec902a4e268f12adb0c2\" args=\"(yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_mapping_end_event_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a MAPPING-END event. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5330d62ef52856aa53188137cb93a6a1\"></a><!-- doxytag: member=\"yaml.h::yaml_event_delete\" ref=\"ga5330d62ef52856aa53188137cb93a6a1\" args=\"(yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_event_delete </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Free any memory allocated for an event object. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An event object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__export.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Export Definitions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#define-members\">Defines</a>  </div>\n  <div class=\"headertitle\">\n<h1>Export Definitions</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"define-members\"></a>\nDefines</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__export.html#ga0791fd3e1d85ed53711b1feaae131f93\">YAML_DECLARE</a>(type)&nbsp;&nbsp;&nbsp;type</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The public API declaration.  <a href=\"#ga0791fd3e1d85ed53711b1feaae131f93\"></a><br/></td></tr>\n</table>\n<hr/><h2>Define Documentation</h2>\n<a class=\"anchor\" id=\"ga0791fd3e1d85ed53711b1feaae131f93\"></a><!-- doxytag: member=\"yaml.h::YAML_DECLARE\" ref=\"ga0791fd3e1d85ed53711b1feaae131f93\" args=\"(type)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_DECLARE</td>\n          <td>(</td>\n          <td class=\"paramtype\">&nbsp;</td>\n          <td class=\"paramname\">type</td>\n          <td>&nbsp;)&nbsp;</td>\n          <td>&nbsp;&nbsp;&nbsp;type</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The public API declaration. </p>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__nodes.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Nodes</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#define-members\">Defines</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Nodes</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a mapping node.  <a href=\"structyaml__node__pair__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node structure.  <a href=\"structyaml__node__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document structure.  <a href=\"structyaml__document__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"define-members\"></a>\nDefines</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gadfa882b6e42a3a993d12392d55260b00\">YAML_NULL_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:null&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!null</code> with the only possible value: <code>null</code>.  <a href=\"#gadfa882b6e42a3a993d12392d55260b00\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga312629a1f51e91b136352db988d4d771\">YAML_BOOL_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:bool&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!bool</code> with the values: <code>true</code> and <code>falce</code>.  <a href=\"#ga312629a1f51e91b136352db988d4d771\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gac5dbc6d1f556663edf8db88d6113e931\">YAML_STR_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:str&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!str</code> for string values.  <a href=\"#gac5dbc6d1f556663edf8db88d6113e931\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga83263cdb4ffa6ad2f7d9a87281979ff5\">YAML_INT_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:int&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!int</code> for integer values.  <a href=\"#ga83263cdb4ffa6ad2f7d9a87281979ff5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga6ab2ec71fc47cb24f1003b9acdb92843\">YAML_FLOAT_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:float&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!float</code> for float values.  <a href=\"#ga6ab2ec71fc47cb24f1003b9acdb92843\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga3e27cca7191234f2e8c95eaf3bc99a73\">YAML_TIMESTAMP_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:timestamp&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!timestamp</code> for date and time values.  <a href=\"#ga3e27cca7191234f2e8c95eaf3bc99a73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaa8284b30f9c9e3f10f6a69c9b882f417\">YAML_SEQ_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:seq&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!seq</code> is used to denote sequences.  <a href=\"#gaa8284b30f9c9e3f10f6a69c9b882f417\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga22ae99cf3ac014dd76873268fd068c12\">YAML_MAP_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:map&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!map</code> is used to denote mapping.  <a href=\"#ga22ae99cf3ac014dd76873268fd068c12\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf6b0c4e819b8f6915515a4f70065aaaa\">YAML_DEFAULT_SCALAR_TAG</a>&nbsp;&nbsp;&nbsp;YAML_STR_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default scalar tag is <code>!!str</code>.  <a href=\"#gaf6b0c4e819b8f6915515a4f70065aaaa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf195b67002518702e27746d6b4da6124\">YAML_DEFAULT_SEQUENCE_TAG</a>&nbsp;&nbsp;&nbsp;YAML_SEQ_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default sequence tag is <code>!!seq</code>.  <a href=\"#gaf195b67002518702e27746d6b4da6124\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf7b1f8f0ce5665794510cd3841802a5f\">YAML_DEFAULT_MAPPING_TAG</a>&nbsp;&nbsp;&nbsp;YAML_MAP_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default mapping tag is <code>!!map</code>.  <a href=\"#gaf7b1f8f0ce5665794510cd3841802a5f\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml_node_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Node types.  <a href=\"#gabe020d2fc42d3e896549e9f97da622d2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga9eaaa233b120b9d9db47de93c294c40f\">yaml_node_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The forward definition of a document node structure.  <a href=\"#ga9eaaa233b120b9d9db47de93c294c40f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a sequence node.  <a href=\"#ga7cc3581582e778b00c04e99cd3656860\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga90f1c8b83c5c38dc4016afc1cc2050c4\">yaml_node_pair_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a mapping node.  <a href=\"#ga90f1c8b83c5c38dc4016afc1cc2050c4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gad94e064e95baeb22e4f7acc7804e8479\">yaml_document_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document structure.  <a href=\"#gad94e064e95baeb22e4f7acc7804e8479\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\">YAML_NO_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\">YAML_SCALAR_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\">YAML_SEQUENCE_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\">YAML_MAPPING_NODE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Node types. </p>\n <a href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\">yaml_document_initialize</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *version_directive, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_start, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_end, int start_implicit, int end_implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a YAML document.  <a href=\"#ga62a485c96f3b7962436a0da5e6f3cc89\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\">yaml_document_delete</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Delete a YAML document and all its nodes.  <a href=\"#ga2754b1544fb4e110e83fafbc708b0672\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gafa1feabc9747dbded4dca24e27d3c21a\">yaml_document_get_node</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int index)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get a node of a YAML document.  <a href=\"#gafa1feabc9747dbded4dca24e27d3c21a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga40eeaa68fb2f3be34c4fe34e7597d324\">yaml_document_get_root_node</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the root of a YAML document node.  <a href=\"#ga40eeaa68fb2f3be34c4fe34e7597d324\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga45dab8b983b58a005557d4b01f5057b0\">yaml_document_add_scalar</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *value, int length, <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SCALAR node and attach it to the document.  <a href=\"#ga45dab8b983b58a005557d4b01f5057b0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga83b2f7fdd9a439397a42016bddad7786\">yaml_document_add_sequence</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE node and attach it to the document.  <a href=\"#ga83b2f7fdd9a439397a42016bddad7786\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga45a9f8288704f99cd81dc5cb31329d34\">yaml_document_add_mapping</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING node and attach it to the document.  <a href=\"#ga45a9f8288704f99cd81dc5cb31329d34\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga16435917cd6c0261cd390fa8cf173b1b\">yaml_document_append_sequence_item</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int sequence, int item)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add an item to a SEQUENCE node.  <a href=\"#ga16435917cd6c0261cd390fa8cf173b1b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga2db27002d8a9ae06b1729d0ee06553d2\">yaml_document_append_mapping_pair</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int mapping, int key, int value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a pair of a key and a value to a MAPPING node.  <a href=\"#ga2db27002d8a9ae06b1729d0ee06553d2\"></a><br/></td></tr>\n</table>\n<hr/><h2>Define Documentation</h2>\n<a class=\"anchor\" id=\"gadfa882b6e42a3a993d12392d55260b00\"></a><!-- doxytag: member=\"yaml.h::YAML_NULL_TAG\" ref=\"gadfa882b6e42a3a993d12392d55260b00\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_NULL_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:null&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!null</code> with the only possible value: <code>null</code>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga312629a1f51e91b136352db988d4d771\"></a><!-- doxytag: member=\"yaml.h::YAML_BOOL_TAG\" ref=\"ga312629a1f51e91b136352db988d4d771\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_BOOL_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:bool&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!bool</code> with the values: <code>true</code> and <code>falce</code>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac5dbc6d1f556663edf8db88d6113e931\"></a><!-- doxytag: member=\"yaml.h::YAML_STR_TAG\" ref=\"gac5dbc6d1f556663edf8db88d6113e931\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_STR_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:str&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!str</code> for string values. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83263cdb4ffa6ad2f7d9a87281979ff5\"></a><!-- doxytag: member=\"yaml.h::YAML_INT_TAG\" ref=\"ga83263cdb4ffa6ad2f7d9a87281979ff5\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_INT_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:int&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!int</code> for integer values. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6ab2ec71fc47cb24f1003b9acdb92843\"></a><!-- doxytag: member=\"yaml.h::YAML_FLOAT_TAG\" ref=\"ga6ab2ec71fc47cb24f1003b9acdb92843\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_FLOAT_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:float&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!float</code> for float values. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e27cca7191234f2e8c95eaf3bc99a73\"></a><!-- doxytag: member=\"yaml.h::YAML_TIMESTAMP_TAG\" ref=\"ga3e27cca7191234f2e8c95eaf3bc99a73\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_TIMESTAMP_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:timestamp&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!timestamp</code> for date and time values. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa8284b30f9c9e3f10f6a69c9b882f417\"></a><!-- doxytag: member=\"yaml.h::YAML_SEQ_TAG\" ref=\"gaa8284b30f9c9e3f10f6a69c9b882f417\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_SEQ_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:seq&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!seq</code> is used to denote sequences. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22ae99cf3ac014dd76873268fd068c12\"></a><!-- doxytag: member=\"yaml.h::YAML_MAP_TAG\" ref=\"ga22ae99cf3ac014dd76873268fd068c12\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_MAP_TAG&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:map&quot;</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag <code>!!map</code> is used to denote mapping. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6b0c4e819b8f6915515a4f70065aaaa\"></a><!-- doxytag: member=\"yaml.h::YAML_DEFAULT_SCALAR_TAG\" ref=\"gaf6b0c4e819b8f6915515a4f70065aaaa\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_DEFAULT_SCALAR_TAG&nbsp;&nbsp;&nbsp;YAML_STR_TAG</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The default scalar tag is <code>!!str</code>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf195b67002518702e27746d6b4da6124\"></a><!-- doxytag: member=\"yaml.h::YAML_DEFAULT_SEQUENCE_TAG\" ref=\"gaf195b67002518702e27746d6b4da6124\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_DEFAULT_SEQUENCE_TAG&nbsp;&nbsp;&nbsp;YAML_SEQ_TAG</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The default sequence tag is <code>!!seq</code>. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7b1f8f0ce5665794510cd3841802a5f\"></a><!-- doxytag: member=\"yaml.h::YAML_DEFAULT_MAPPING_TAG\" ref=\"gaf7b1f8f0ce5665794510cd3841802a5f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">#define YAML_DEFAULT_MAPPING_TAG&nbsp;&nbsp;&nbsp;YAML_MAP_TAG</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The default mapping tag is <code>!!map</code>. </p>\n\n</div>\n</div>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gabe020d2fc42d3e896549e9f97da622d2\"></a><!-- doxytag: member=\"yaml.h::yaml_node_type_t\" ref=\"gabe020d2fc42d3e896549e9f97da622d2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a>  <a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml_node_type_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Node types. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9eaaa233b120b9d9db47de93c294c40f\"></a><!-- doxytag: member=\"yaml.h::yaml_node_t\" ref=\"ga9eaaa233b120b9d9db47de93c294c40f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a> <a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The forward definition of a document node structure. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cc3581582e778b00c04e99cd3656860\"></a><!-- doxytag: member=\"yaml.h::yaml_node_item_t\" ref=\"ga7cc3581582e778b00c04e99cd3656860\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef int <a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>An element of a sequence node. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga90f1c8b83c5c38dc4016afc1cc2050c4\"></a><!-- doxytag: member=\"yaml.h::yaml_node_pair_t\" ref=\"ga90f1c8b83c5c38dc4016afc1cc2050c4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a>  <a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>An element of a mapping node. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad94e064e95baeb22e4f7acc7804e8479\"></a><!-- doxytag: member=\"yaml.h::yaml_document_t\" ref=\"gad94e064e95baeb22e4f7acc7804e8479\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a>  <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The document structure. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"ga0897d4b6bdd1b56c7a5fa0ff17b4f798\"></a><!-- doxytag: member=\"yaml.h::yaml_node_type_e\" ref=\"ga0897d4b6bdd1b56c7a5fa0ff17b4f798\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Node types. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\"></a><!-- doxytag: member=\"YAML_NO_NODE\" ref=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\" args=\"\" -->YAML_NO_NODE</em>&nbsp;</td><td>\n<p>An empty node. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\"></a><!-- doxytag: member=\"YAML_SCALAR_NODE\" ref=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\" args=\"\" -->YAML_SCALAR_NODE</em>&nbsp;</td><td>\n<p>A scalar node. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\"></a><!-- doxytag: member=\"YAML_SEQUENCE_NODE\" ref=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\" args=\"\" -->YAML_SEQUENCE_NODE</em>&nbsp;</td><td>\n<p>A sequence node. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\"></a><!-- doxytag: member=\"YAML_MAPPING_NODE\" ref=\"gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\" args=\"\" -->YAML_MAPPING_NODE</em>&nbsp;</td><td>\n<p>A mapping node. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"ga62a485c96f3b7962436a0da5e6f3cc89\"></a><!-- doxytag: member=\"yaml.h::yaml_document_initialize\" ref=\"ga62a485c96f3b7962436a0da5e6f3cc89\" args=\"(yaml_document_t *document, yaml_version_directive_t *version_directive, yaml_tag_directive_t *tag_directives_start, yaml_tag_directive_t *tag_directives_end, int start_implicit, int end_implicit)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>version_directive</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag_directives_start</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag_directives_end</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>start_implicit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>end_implicit</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a YAML document. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>An empty document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>version_directive</em>&nbsp;</td><td>The YAML directive value or <code>NULL</code>. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag_directives_start</em>&nbsp;</td><td>The beginning of the TAG directives list. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag_directives_end</em>&nbsp;</td><td>The end of the TAG directives list. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>start_implicit</em>&nbsp;</td><td>If the document start indicator is implicit. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>end_implicit</em>&nbsp;</td><td>If the document end indicator is implicit.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2754b1544fb4e110e83fafbc708b0672\"></a><!-- doxytag: member=\"yaml.h::yaml_document_delete\" ref=\"ga2754b1544fb4e110e83fafbc708b0672\" args=\"(yaml_document_t *document)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_document_delete </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Delete a YAML document and all its nodes. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa1feabc9747dbded4dca24e27d3c21a\"></a><!-- doxytag: member=\"yaml.h::yaml_document_get_node\" ref=\"gafa1feabc9747dbded4dca24e27d3c21a\" args=\"(yaml_document_t *document, int index)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a>* yaml_document_get_node </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>index</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get a node of a YAML document. </p>\n<p>The pointer returned by this function is valid until any of the functions modifying the documents are called.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>index</em>&nbsp;</td><td>The node id.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>the node objct or <code>NULL</code> if <code>node_id</code> is out of range. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40eeaa68fb2f3be34c4fe34e7597d324\"></a><!-- doxytag: member=\"yaml.h::yaml_document_get_root_node\" ref=\"ga40eeaa68fb2f3be34c4fe34e7597d324\" args=\"(yaml_document_t *document)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a>* yaml_document_get_root_node </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get the root of a YAML document node. </p>\n<p>The root object is the first object added to the document.</p>\n<p>The pointer returned by this function is valid until any of the functions modifying the documents are called.</p>\n<p>An empty document produced by the parser signifies the end of a YAML stream.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>the node object or <code>NULL</code> if the document is empty. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45dab8b983b58a005557d4b01f5057b0\"></a><!-- doxytag: member=\"yaml.h::yaml_document_add_scalar\" ref=\"ga45dab8b983b58a005557d4b01f5057b0\" args=\"(yaml_document_t *document, yaml_char_t *tag, yaml_char_t *value, int length, yaml_scalar_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_add_scalar </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>length</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a SCALAR node and attach it to the document. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The scalar tag. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>value</em>&nbsp;</td><td>The scalar value. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>length</em>&nbsp;</td><td>The length of the scalar value. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The scalar style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>the node id or <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83b2f7fdd9a439397a42016bddad7786\"></a><!-- doxytag: member=\"yaml.h::yaml_document_add_sequence\" ref=\"ga83b2f7fdd9a439397a42016bddad7786\" args=\"(yaml_document_t *document, yaml_char_t *tag, yaml_sequence_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_add_sequence </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a SEQUENCE node and attach it to the document. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The sequence tag. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The sequence style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>the node id or <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45a9f8288704f99cd81dc5cb31329d34\"></a><!-- doxytag: member=\"yaml.h::yaml_document_add_mapping\" ref=\"ga45a9f8288704f99cd81dc5cb31329d34\" args=\"(yaml_document_t *document, yaml_char_t *tag, yaml_mapping_style_t style)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_add_mapping </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>tag</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>style</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Create a MAPPING node and attach it to the document. </p>\n<p>The <em>style</em> argument may be ignored by the emitter.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>tag</em>&nbsp;</td><td>The sequence tag. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>style</em>&nbsp;</td><td>The sequence style.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>the node id or <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16435917cd6c0261cd390fa8cf173b1b\"></a><!-- doxytag: member=\"yaml.h::yaml_document_append_sequence_item\" ref=\"ga16435917cd6c0261cd390fa8cf173b1b\" args=\"(yaml_document_t *document, int sequence, int item)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_append_sequence_item </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>sequence</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>item</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add an item to a SEQUENCE node. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>sequence</em>&nbsp;</td><td>The sequence node id. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>item</em>&nbsp;</td><td>The item node id.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db27002d8a9ae06b1729d0ee06553d2\"></a><!-- doxytag: member=\"yaml.h::yaml_document_append_mapping_pair\" ref=\"ga2db27002d8a9ae06b1729d0ee06553d2\" args=\"(yaml_document_t *document, int mapping, int key, int value)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_document_append_mapping_pair </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>mapping</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>key</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&nbsp;</td>\n          <td class=\"paramname\"> <em>value</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Add a pair of a key and a value to a MAPPING node. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>A document object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>mapping</em>&nbsp;</td><td>The mapping node id. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>key</em>&nbsp;</td><td>The key node id. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>value</em>&nbsp;</td><td>The value node id.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__parser.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Parser Definitions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Parser Definitions</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds information about a potential simple key.  <a href=\"structyaml__simple__key__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds aliases data.  <a href=\"structyaml__alias__data__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The parser structure.  <a href=\"structyaml__parser__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> (void *data, unsigned char *buffer, size_t size, size_t *size_read)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The prototype of a read handler.  <a href=\"#ga4982f7e4e001ddb47d2819f38f0cd9d6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5570fbb7ab7c8332cd666f3a9c26591\"></a><!-- doxytag: member=\"parser::yaml_simple_key_t\" ref=\"gae5570fbb7ab7c8332cd666f3a9c26591\" args=\"\" -->\ntypedef struct <a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gae5570fbb7ab7c8332cd666f3a9c26591\">yaml_simple_key_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds information about a potential simple key. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52b56d3e3cee0f9ba460978802a8c83b\"></a><!-- doxytag: member=\"parser::yaml_parser_state_t\" ref=\"ga52b56d3e3cee0f9ba460978802a8c83b\" args=\"\" -->\ntypedef enum <a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml_parser_state_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The states of the parser. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1434228b82f5f90d3c8ccda816e9ca9d\"></a><!-- doxytag: member=\"parser::yaml_alias_data_t\" ref=\"ga1434228b82f5f90d3c8ccda816e9ca9d\" args=\"\" -->\ntypedef struct <a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga1434228b82f5f90d3c8ccda816e9ca9d\">yaml_alias_data_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds aliases data. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gafdc6319cb28a8b8034542b29be85b0c4\">yaml_parser_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The parser structure.  <a href=\"#gafdc6319cb28a8b8034542b29be85b0c4\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml_parser_state_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\">YAML_PARSE_STREAM_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\">YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\">YAML_PARSE_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\">YAML_PARSE_DOCUMENT_CONTENT_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\">YAML_PARSE_DOCUMENT_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\">YAML_PARSE_BLOCK_NODE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\">YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\">YAML_PARSE_FLOW_NODE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\">YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\">YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\">YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\">YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\">YAML_PARSE_BLOCK_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\">YAML_PARSE_BLOCK_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\">YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\">YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\">YAML_PARSE_FLOW_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\">YAML_PARSE_FLOW_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\">YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\">YAML_PARSE_END_STATE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The states of the parser. </p>\n <a href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gacc37ceeb5847e38a3fe24eb0c9b53965\">yaml_parser_initialize</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Initialize a parser.  <a href=\"#gacc37ceeb5847e38a3fe24eb0c9b53965\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\">yaml_parser_delete</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destroy a parser.  <a href=\"#gaa27150107c4667c1024ec0651e2ac26b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga08a94762bf5f4c61f72c1da0a407df0d\">yaml_parser_set_input_string</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, const unsigned char *input, size_t size)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a string input.  <a href=\"#ga08a94762bf5f4c61f72c1da0a407df0d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gac3f00f8beb2365b1e4569692d64696b6\">yaml_parser_set_input_file</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, FILE *file)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a file input.  <a href=\"#gac3f00f8beb2365b1e4569692d64696b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\">yaml_parser_set_input</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> *handler, void *data)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a generic input handler.  <a href=\"#gabc67581bfa771a3e787d907d6914b8d9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga9565b64975570ed34612a19adf02ae6a\">yaml_parser_set_encoding</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the source encoding.  <a href=\"#ga9565b64975570ed34612a19adf02ae6a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\">yaml_parser_scan</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *token)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scan the input stream and produce the next token.  <a href=\"#ga6c2144f131ebd600a075d4ba654540f7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\">yaml_parser_parse</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Parse the input stream and produce the next parsing event.  <a href=\"#ga559312fb137533d8b7e07f224fe0ec8f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\">yaml_parser_load</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Parse the input stream and produce the next YAML document.  <a href=\"#ga9ef7d6e9494766b5880c389bc431d138\"></a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga4982f7e4e001ddb47d2819f38f0cd9d6\"></a><!-- doxytag: member=\"yaml.h::yaml_read_handler_t\" ref=\"ga4982f7e4e001ddb47d2819f38f0cd9d6\" args=\"(void *data, unsigned char *buffer, size_t size, size_t *size_read)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef int <a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a>(void *data, unsigned char *buffer, size_t size, size_t *size_read)</td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The prototype of a read handler. </p>\n<p>The read handler is called when the parser needs to read more bytes from the source. The handler should write not more than <em>size</em> bytes to the <em>buffer</em>. The number of written bytes should be set to the <em>length</em> variable.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>data</em>&nbsp;</td><td>A pointer to an application data specified by <a class=\"el\" href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\" title=\"Set a generic input handler.\">yaml_parser_set_input()</a>. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>buffer</em>&nbsp;</td><td>The buffer to write the data from the source. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>size</em>&nbsp;</td><td>The size of the buffer. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>size_read</em>&nbsp;</td><td>The actual number of bytes read from the source.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>On success, the handler should return <code>1</code>. If the handler failed, the returned value should be <code>0</code>. On EOF, the handler should set the <em>size_read</em> to <code>0</code> and return <code>1</code>. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafdc6319cb28a8b8034542b29be85b0c4\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_t\" ref=\"gafdc6319cb28a8b8034542b29be85b0c4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a>  <a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The parser structure. </p>\n<p>All members are internal. Manage the structure using the <code>yaml_parser_</code> family of functions. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"gad39c19e7b0df6f542ca97806535b57c5\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_state_e\" ref=\"gad39c19e7b0df6f542ca97806535b57c5\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml_parser_state_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The states of the parser. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\"></a><!-- doxytag: member=\"YAML_PARSE_STREAM_START_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\" args=\"\" -->YAML_PARSE_STREAM_START_STATE</em>&nbsp;</td><td>\n<p>Expect STREAM-START. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\"></a><!-- doxytag: member=\"YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\" args=\"\" -->YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE</em>&nbsp;</td><td>\n<p>Expect the beginning of an implicit document. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\"></a><!-- doxytag: member=\"YAML_PARSE_DOCUMENT_START_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\" args=\"\" -->YAML_PARSE_DOCUMENT_START_STATE</em>&nbsp;</td><td>\n<p>Expect DOCUMENT-START. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\"></a><!-- doxytag: member=\"YAML_PARSE_DOCUMENT_CONTENT_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\" args=\"\" -->YAML_PARSE_DOCUMENT_CONTENT_STATE</em>&nbsp;</td><td>\n<p>Expect the content of a document. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\"></a><!-- doxytag: member=\"YAML_PARSE_DOCUMENT_END_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\" args=\"\" -->YAML_PARSE_DOCUMENT_END_STATE</em>&nbsp;</td><td>\n<p>Expect DOCUMENT-END. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_NODE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\" args=\"\" -->YAML_PARSE_BLOCK_NODE_STATE</em>&nbsp;</td><td>\n<p>Expect a block node. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\" args=\"\" -->YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE</em>&nbsp;</td><td>\n<p>Expect a block node or indentless sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_NODE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\" args=\"\" -->YAML_PARSE_FLOW_NODE_STATE</em>&nbsp;</td><td>\n<p>Expect a flow node. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\" args=\"\" -->YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE</em>&nbsp;</td><td>\n<p>Expect the first entry of a block sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\" args=\"\" -->YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE</em>&nbsp;</td><td>\n<p>Expect an entry of a block sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\"></a><!-- doxytag: member=\"YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\" args=\"\" -->YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE</em>&nbsp;</td><td>\n<p>Expect an entry of an indentless sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\" args=\"\" -->YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect the first key of a block mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_MAPPING_KEY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\" args=\"\" -->YAML_PARSE_BLOCK_MAPPING_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect a block mapping key. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\"></a><!-- doxytag: member=\"YAML_PARSE_BLOCK_MAPPING_VALUE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\" args=\"\" -->YAML_PARSE_BLOCK_MAPPING_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a block mapping value. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\" args=\"\" -->YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE</em>&nbsp;</td><td>\n<p>Expect the first entry of a flow sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\" args=\"\" -->YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE</em>&nbsp;</td><td>\n<p>Expect an entry of a flow sequence. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\" args=\"\" -->YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect a key of an ordered mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\" args=\"\" -->YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value of an ordered mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\" args=\"\" -->YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE</em>&nbsp;</td><td>\n<p>Expect the and of an ordered mapping entry. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\" args=\"\" -->YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect the first key of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_MAPPING_KEY_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\" args=\"\" -->YAML_PARSE_FLOW_MAPPING_KEY_STATE</em>&nbsp;</td><td>\n<p>Expect a key of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_MAPPING_VALUE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\" args=\"\" -->YAML_PARSE_FLOW_MAPPING_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect a value of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\"></a><!-- doxytag: member=\"YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\" args=\"\" -->YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE</em>&nbsp;</td><td>\n<p>Expect an empty value of a flow mapping. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\"></a><!-- doxytag: member=\"YAML_PARSE_END_STATE\" ref=\"ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\" args=\"\" -->YAML_PARSE_END_STATE</em>&nbsp;</td><td>\n<p>Expect nothing. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"gacc37ceeb5847e38a3fe24eb0c9b53965\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_initialize\" ref=\"gacc37ceeb5847e38a3fe24eb0c9b53965\" args=\"(yaml_parser_t *parser)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_parser_initialize </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Initialize a parser. </p>\n<p>This function creates a new parser object. An application is responsible for destroying the object using the <a class=\"el\" href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\" title=\"Destroy a parser.\">yaml_parser_delete()</a> function.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>An empty parser object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa27150107c4667c1024ec0651e2ac26b\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_delete\" ref=\"gaa27150107c4667c1024ec0651e2ac26b\" args=\"(yaml_parser_t *parser)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_parser_delete </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Destroy a parser. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08a94762bf5f4c61f72c1da0a407df0d\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_set_input_string\" ref=\"ga08a94762bf5f4c61f72c1da0a407df0d\" args=\"(yaml_parser_t *parser, const unsigned char *input, size_t size)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_parser_set_input_string </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const unsigned char *&nbsp;</td>\n          <td class=\"paramname\"> <em>input</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">size_t&nbsp;</td>\n          <td class=\"paramname\"> <em>size</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a string input. </p>\n<p>Note that the <em>input</em> pointer must be valid while the <em>parser</em> object exists. The application is responsible for destroing <em>input</em> after destroying the <em>parser</em>.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>input</em>&nbsp;</td><td>A source data. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>size</em>&nbsp;</td><td>The length of the source data in bytes. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3f00f8beb2365b1e4569692d64696b6\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_set_input_file\" ref=\"gac3f00f8beb2365b1e4569692d64696b6\" args=\"(yaml_parser_t *parser, FILE *file)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_parser_set_input_file </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">FILE *&nbsp;</td>\n          <td class=\"paramname\"> <em>file</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a file input. </p>\n<p><em>file</em> should be a file object open for reading. The application is responsible for closing the <em>file</em>.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>file</em>&nbsp;</td><td>An open file. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc67581bfa771a3e787d907d6914b8d9\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_set_input\" ref=\"gabc67581bfa771a3e787d907d6914b8d9\" args=\"(yaml_parser_t *parser, yaml_read_handler_t *handler, void *data)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_parser_set_input </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>handler</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">void *&nbsp;</td>\n          <td class=\"paramname\"> <em>data</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set a generic input handler. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>handler</em>&nbsp;</td><td>A read handler. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>data</em>&nbsp;</td><td>Any application data for passing to the read handler. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9565b64975570ed34612a19adf02ae6a\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_set_encoding\" ref=\"ga9565b64975570ed34612a19adf02ae6a\" args=\"(yaml_parser_t *parser, yaml_encoding_t encoding)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_parser_set_encoding </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;</td>\n          <td class=\"paramname\"> <em>encoding</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Set the source encoding. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[in]</tt>&nbsp;</td><td valign=\"top\"><em>encoding</em>&nbsp;</td><td>The source encoding. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6c2144f131ebd600a075d4ba654540f7\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_scan\" ref=\"ga6c2144f131ebd600a075d4ba654540f7\" args=\"(yaml_parser_t *parser, yaml_token_t *token)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_parser_scan </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>token</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Scan the input stream and produce the next token. </p>\n<p>Call the function subsequently to produce a sequence of tokens corresponding to the input stream. The initial token has the type <code>YAML_STREAM_START_TOKEN</code> while the ending token has the type <code>YAML_STREAM_END_TOKEN</code>.</p>\n<p>An application is responsible for freeing any buffers associated with the produced token object using the <code>yaml_token_delete</code> function.</p>\n<p>An application must not alternate the calls of <a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\" title=\"Scan the input stream and produce the next token.\">yaml_parser_scan()</a> with the calls of <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\" title=\"Parse the input stream and produce the next parsing event.\">yaml_parser_parse()</a> or <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\" title=\"Parse the input stream and produce the next YAML document.\">yaml_parser_load()</a>. Doing this will break the parser.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>token</em>&nbsp;</td><td>An empty token object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga559312fb137533d8b7e07f224fe0ec8f\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_parse\" ref=\"ga559312fb137533d8b7e07f224fe0ec8f\" args=\"(yaml_parser_t *parser, yaml_event_t *event)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_parser_parse </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>event</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Parse the input stream and produce the next parsing event. </p>\n<p>Call the function subsequently to produce a sequence of events corresponding to the input stream. The initial event has the type <code>YAML_STREAM_START_EVENT</code> while the ending event has the type <code>YAML_STREAM_END_EVENT</code>.</p>\n<p>An application is responsible for freeing any buffers associated with the produced event object using the <a class=\"el\" href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\" title=\"Free any memory allocated for an event object.\">yaml_event_delete()</a> function.</p>\n<p>An application must not alternate the calls of <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\" title=\"Parse the input stream and produce the next parsing event.\">yaml_parser_parse()</a> with the calls of <a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\" title=\"Scan the input stream and produce the next token.\">yaml_parser_scan()</a> or <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\" title=\"Parse the input stream and produce the next YAML document.\">yaml_parser_load()</a>. Doing this will break the parser.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>event</em>&nbsp;</td><td>An empty event object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ef7d6e9494766b5880c389bc431d138\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_load\" ref=\"ga9ef7d6e9494766b5880c389bc431d138\" args=\"(yaml_parser_t *parser, yaml_document_t *document)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int yaml_parser_load </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>parser</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>document</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Parse the input stream and produce the next YAML document. </p>\n<p>Call this function subsequently to produce a sequence of documents constituting the input stream.</p>\n<p>If the produced document has no root node, it means that the document end has been reached.</p>\n<p>An application is responsible for freeing any data associated with the produced document object using the <a class=\"el\" href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\" title=\"Delete a YAML document and all its nodes.\">yaml_document_delete()</a> function.</p>\n<p>An application must not alternate the calls of <a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\" title=\"Parse the input stream and produce the next YAML document.\">yaml_parser_load()</a> with the calls of <a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\" title=\"Scan the input stream and produce the next token.\">yaml_parser_scan()</a> or <a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\" title=\"Parse the input stream and produce the next parsing event.\">yaml_parser_parse()</a>. Doing this will break the parser.</p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>parser</em>&nbsp;</td><td>A parser object. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>document</em>&nbsp;</td><td>An empty document object.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd><code>1</code> if the function succeeded, <code>0</code> on error. </dd></dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__styles.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Node Styles</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a>  </div>\n  <div class=\"headertitle\">\n<h1>Node Styles</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scalar styles.  <a href=\"#ga3fa6405631e1afe5bd5c488a6c5e8065\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Sequence styles.  <a href=\"#ga58a1123d271e56c72de6abf852ac4dc2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Mapping styles.  <a href=\"#gab47523846a5c5960e07367a28ea9750a\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\">YAML_ANY_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\">YAML_PLAIN_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\">YAML_SINGLE_QUOTED_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\">YAML_DOUBLE_QUOTED_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\">YAML_LITERAL_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\">YAML_FOLDED_SCALAR_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Scalar styles. </p>\n <a href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\">YAML_ANY_SEQUENCE_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\">YAML_BLOCK_SEQUENCE_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\">YAML_FLOW_SEQUENCE_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Sequence styles. </p>\n <a href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\">YAML_ANY_MAPPING_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\">YAML_BLOCK_MAPPING_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\">YAML_FLOW_MAPPING_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Mapping styles. </p>\n <a href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">More...</a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga3fa6405631e1afe5bd5c488a6c5e8065\"></a><!-- doxytag: member=\"yaml.h::yaml_scalar_style_t\" ref=\"ga3fa6405631e1afe5bd5c488a6c5e8065\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a>  <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Scalar styles. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58a1123d271e56c72de6abf852ac4dc2\"></a><!-- doxytag: member=\"yaml.h::yaml_sequence_style_t\" ref=\"ga58a1123d271e56c72de6abf852ac4dc2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a>  <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Sequence styles. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab47523846a5c5960e07367a28ea9750a\"></a><!-- doxytag: member=\"yaml.h::yaml_mapping_style_t\" ref=\"gab47523846a5c5960e07367a28ea9750a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a>  <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Mapping styles. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"ga435ae8886b70c16830d853b6c566e2e0\"></a><!-- doxytag: member=\"yaml.h::yaml_scalar_style_e\" ref=\"ga435ae8886b70c16830d853b6c566e2e0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Scalar styles. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\"></a><!-- doxytag: member=\"YAML_ANY_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\" args=\"\" -->YAML_ANY_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>Let the emitter choose the style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\"></a><!-- doxytag: member=\"YAML_PLAIN_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\" args=\"\" -->YAML_PLAIN_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>The plain scalar style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\"></a><!-- doxytag: member=\"YAML_SINGLE_QUOTED_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\" args=\"\" -->YAML_SINGLE_QUOTED_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>The single-quoted scalar style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\"></a><!-- doxytag: member=\"YAML_DOUBLE_QUOTED_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\" args=\"\" -->YAML_DOUBLE_QUOTED_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>The double-quoted scalar style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\"></a><!-- doxytag: member=\"YAML_LITERAL_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\" args=\"\" -->YAML_LITERAL_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>The literal scalar style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\"></a><!-- doxytag: member=\"YAML_FOLDED_SCALAR_STYLE\" ref=\"gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\" args=\"\" -->YAML_FOLDED_SCALAR_STYLE</em>&nbsp;</td><td>\n<p>The folded scalar style. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5079a4ab96e398371c60423abd88ccc0\"></a><!-- doxytag: member=\"yaml.h::yaml_sequence_style_e\" ref=\"ga5079a4ab96e398371c60423abd88ccc0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Sequence styles. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\"></a><!-- doxytag: member=\"YAML_ANY_SEQUENCE_STYLE\" ref=\"gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\" args=\"\" -->YAML_ANY_SEQUENCE_STYLE</em>&nbsp;</td><td>\n<p>Let the emitter choose the style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\"></a><!-- doxytag: member=\"YAML_BLOCK_SEQUENCE_STYLE\" ref=\"gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\" args=\"\" -->YAML_BLOCK_SEQUENCE_STYLE</em>&nbsp;</td><td>\n<p>The block sequence style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\"></a><!-- doxytag: member=\"YAML_FLOW_SEQUENCE_STYLE\" ref=\"gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\" args=\"\" -->YAML_FLOW_SEQUENCE_STYLE</em>&nbsp;</td><td>\n<p>The flow sequence style. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1efef592e2e3df6f00432c04ef77d98f\"></a><!-- doxytag: member=\"yaml.h::yaml_mapping_style_e\" ref=\"ga1efef592e2e3df6f00432c04ef77d98f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Mapping styles. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\"></a><!-- doxytag: member=\"YAML_ANY_MAPPING_STYLE\" ref=\"gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\" args=\"\" -->YAML_ANY_MAPPING_STYLE</em>&nbsp;</td><td>\n<p>Let the emitter choose the style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\"></a><!-- doxytag: member=\"YAML_BLOCK_MAPPING_STYLE\" ref=\"gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\" args=\"\" -->YAML_BLOCK_MAPPING_STYLE</em>&nbsp;</td><td>\n<p>The block mapping style. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\"></a><!-- doxytag: member=\"YAML_FLOW_MAPPING_STYLE\" ref=\"gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\" args=\"\" -->YAML_FLOW_MAPPING_STYLE</em>&nbsp;</td><td>\n<p>The flow mapping style. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__tokens.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Tokens</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Tokens</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token structure.  <a href=\"structyaml__token__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml_token_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Token types.  <a href=\"#gaba51dda022dced02f8df2224ab7993f7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#ga1ed3dc460e62aee8270c5d63d5734bbb\">yaml_token_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token structure.  <a href=\"#ga1ed3dc460e62aee8270c5d63d5734bbb\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\">YAML_NO_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\">YAML_STREAM_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\">YAML_STREAM_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\">YAML_VERSION_DIRECTIVE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\">YAML_TAG_DIRECTIVE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\">YAML_DOCUMENT_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\">YAML_DOCUMENT_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\">YAML_BLOCK_SEQUENCE_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\">YAML_BLOCK_MAPPING_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\">YAML_BLOCK_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\">YAML_FLOW_SEQUENCE_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\">YAML_FLOW_SEQUENCE_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\">YAML_FLOW_MAPPING_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\">YAML_FLOW_MAPPING_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\">YAML_BLOCK_ENTRY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\">YAML_FLOW_ENTRY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\">YAML_KEY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\">YAML_VALUE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\">YAML_ALIAS_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\">YAML_ANCHOR_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\">YAML_TAG_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\">YAML_SCALAR_TOKEN</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Token types. </p>\n <a href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#ga3140131870e38e27f92a8fd286e5c004\">yaml_token_delete</a> (<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *token)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free any memory allocated for a token object.  <a href=\"#ga3140131870e38e27f92a8fd286e5c004\"></a><br/></td></tr>\n</table>\n<hr/><h2>Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaba51dda022dced02f8df2224ab7993f7\"></a><!-- doxytag: member=\"yaml.h::yaml_token_type_t\" ref=\"gaba51dda022dced02f8df2224ab7993f7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef enum <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a>  <a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml_token_type_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Token types. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ed3dc460e62aee8270c5d63d5734bbb\"></a><!-- doxytag: member=\"yaml.h::yaml_token_t\" ref=\"ga1ed3dc460e62aee8270c5d63d5734bbb\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef struct <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a>  <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The token structure. </p>\n\n</div>\n</div>\n<hr/><h2>Enumeration Type Documentation</h2>\n<a class=\"anchor\" id=\"gaae955b10aa6b5f922de64873bf4ccdbd\"></a><!-- doxytag: member=\"yaml.h::yaml_token_type_e\" ref=\"gaae955b10aa6b5f922de64873bf4ccdbd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">enum <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Token types. </p>\n<dl><dt><b>Enumerator: </b></dt><dd><table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\"></a><!-- doxytag: member=\"YAML_NO_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\" args=\"\" -->YAML_NO_TOKEN</em>&nbsp;</td><td>\n<p>An empty token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\"></a><!-- doxytag: member=\"YAML_STREAM_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\" args=\"\" -->YAML_STREAM_START_TOKEN</em>&nbsp;</td><td>\n<p>A STREAM-START token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\"></a><!-- doxytag: member=\"YAML_STREAM_END_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\" args=\"\" -->YAML_STREAM_END_TOKEN</em>&nbsp;</td><td>\n<p>A STREAM-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\"></a><!-- doxytag: member=\"YAML_VERSION_DIRECTIVE_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\" args=\"\" -->YAML_VERSION_DIRECTIVE_TOKEN</em>&nbsp;</td><td>\n<p>A VERSION-DIRECTIVE token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\"></a><!-- doxytag: member=\"YAML_TAG_DIRECTIVE_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\" args=\"\" -->YAML_TAG_DIRECTIVE_TOKEN</em>&nbsp;</td><td>\n<p>A TAG-DIRECTIVE token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\"></a><!-- doxytag: member=\"YAML_DOCUMENT_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\" args=\"\" -->YAML_DOCUMENT_START_TOKEN</em>&nbsp;</td><td>\n<p>A DOCUMENT-START token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\"></a><!-- doxytag: member=\"YAML_DOCUMENT_END_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\" args=\"\" -->YAML_DOCUMENT_END_TOKEN</em>&nbsp;</td><td>\n<p>A DOCUMENT-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\"></a><!-- doxytag: member=\"YAML_BLOCK_SEQUENCE_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\" args=\"\" -->YAML_BLOCK_SEQUENCE_START_TOKEN</em>&nbsp;</td><td>\n<p>A BLOCK-SEQUENCE-START token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\"></a><!-- doxytag: member=\"YAML_BLOCK_MAPPING_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\" args=\"\" -->YAML_BLOCK_MAPPING_START_TOKEN</em>&nbsp;</td><td>\n<p>A BLOCK-SEQUENCE-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\"></a><!-- doxytag: member=\"YAML_BLOCK_END_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\" args=\"\" -->YAML_BLOCK_END_TOKEN</em>&nbsp;</td><td>\n<p>A BLOCK-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\"></a><!-- doxytag: member=\"YAML_FLOW_SEQUENCE_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\" args=\"\" -->YAML_FLOW_SEQUENCE_START_TOKEN</em>&nbsp;</td><td>\n<p>A FLOW-SEQUENCE-START token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\"></a><!-- doxytag: member=\"YAML_FLOW_SEQUENCE_END_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\" args=\"\" -->YAML_FLOW_SEQUENCE_END_TOKEN</em>&nbsp;</td><td>\n<p>A FLOW-SEQUENCE-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\"></a><!-- doxytag: member=\"YAML_FLOW_MAPPING_START_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\" args=\"\" -->YAML_FLOW_MAPPING_START_TOKEN</em>&nbsp;</td><td>\n<p>A FLOW-MAPPING-START token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\"></a><!-- doxytag: member=\"YAML_FLOW_MAPPING_END_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\" args=\"\" -->YAML_FLOW_MAPPING_END_TOKEN</em>&nbsp;</td><td>\n<p>A FLOW-MAPPING-END token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\"></a><!-- doxytag: member=\"YAML_BLOCK_ENTRY_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\" args=\"\" -->YAML_BLOCK_ENTRY_TOKEN</em>&nbsp;</td><td>\n<p>A BLOCK-ENTRY token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\"></a><!-- doxytag: member=\"YAML_FLOW_ENTRY_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\" args=\"\" -->YAML_FLOW_ENTRY_TOKEN</em>&nbsp;</td><td>\n<p>A FLOW-ENTRY token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\"></a><!-- doxytag: member=\"YAML_KEY_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\" args=\"\" -->YAML_KEY_TOKEN</em>&nbsp;</td><td>\n<p>A KEY token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\"></a><!-- doxytag: member=\"YAML_VALUE_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\" args=\"\" -->YAML_VALUE_TOKEN</em>&nbsp;</td><td>\n<p>A VALUE token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\"></a><!-- doxytag: member=\"YAML_ALIAS_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\" args=\"\" -->YAML_ALIAS_TOKEN</em>&nbsp;</td><td>\n<p>An ALIAS token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\"></a><!-- doxytag: member=\"YAML_ANCHOR_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\" args=\"\" -->YAML_ANCHOR_TOKEN</em>&nbsp;</td><td>\n<p>An ANCHOR token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\"></a><!-- doxytag: member=\"YAML_TAG_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\" args=\"\" -->YAML_TAG_TOKEN</em>&nbsp;</td><td>\n<p>A TAG token. </p>\n</td></tr>\n<tr><td valign=\"top\"><em><a class=\"anchor\" id=\"ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\"></a><!-- doxytag: member=\"YAML_SCALAR_TOKEN\" ref=\"ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\" args=\"\" -->YAML_SCALAR_TOKEN</em>&nbsp;</td><td>\n<p>A SCALAR token. </p>\n</td></tr>\n</table>\n</dd>\n</dl>\n\n</div>\n</div>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"ga3140131870e38e27f92a8fd286e5c004\"></a><!-- doxytag: member=\"yaml.h::yaml_token_delete\" ref=\"ga3140131870e38e27f92a8fd286e5c004\" args=\"(yaml_token_t *token)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_token_delete </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td>\n          <td class=\"paramname\"> <em>token</em></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Free any memory allocated for a token object. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[in,out]</tt>&nbsp;</td><td valign=\"top\"><em>token</em>&nbsp;</td><td>A token object. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/group__version.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Version Information</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>Version Information</h1>  </div>\n</div>\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__version.html#gaf1ba5c1c34e809db5047d79a9fa85a73\">yaml_get_version_string</a> (void)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the library version as a string.  <a href=\"#gaf1ba5c1c34e809db5047d79a9fa85a73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__version.html#gaec764c91f3e181ae63d3d59b7980fe78\">yaml_get_version</a> (int *major, int *minor, int *patch)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the library version numbers.  <a href=\"#gaec764c91f3e181ae63d3d59b7980fe78\"></a><br/></td></tr>\n</table>\n<hr/><h2>Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf1ba5c1c34e809db5047d79a9fa85a73\"></a><!-- doxytag: member=\"yaml.h::yaml_get_version_string\" ref=\"gaf1ba5c1c34e809db5047d79a9fa85a73\" args=\"(void)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* yaml_get_version_string </td>\n          <td>(</td>\n          <td class=\"paramtype\">void&nbsp;</td>\n          <td class=\"paramname\"></td>\n          <td>&nbsp;)&nbsp;</td>\n          <td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get the library version as a string. </p>\n<dl class=\"return\"><dt><b>Returns:</b></dt><dd>The function returns the pointer to a static string of the form <code>\"X.Y.Z\"</code>, where <code>X</code> is the major version number, <code>Y</code> is a minor version number, and <code>Z</code> is the patch version number. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec764c91f3e181ae63d3d59b7980fe78\"></a><!-- doxytag: member=\"yaml.h::yaml_get_version\" ref=\"gaec764c91f3e181ae63d3d59b7980fe78\" args=\"(int *major, int *minor, int *patch)\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void yaml_get_version </td>\n          <td>(</td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>major</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>minor</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int *&nbsp;</td>\n          <td class=\"paramname\"> <em>patch</em></td><td>&nbsp;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td><td></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Get the library version numbers. </p>\n<dl><dt><b>Parameters:</b></dt><dd>\n  <table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>major</em>&nbsp;</td><td>Major version number. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>minor</em>&nbsp;</td><td>Minor version number. </td></tr>\n    <tr><td valign=\"top\"><tt>[out]</tt>&nbsp;</td><td valign=\"top\"><em>patch</em>&nbsp;</td><td>Patch version number. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Main Page</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>yaml Documentation</h1>  </div>\n</div>\n<div class=\"contents\">\n<h3 class=\"version\">0.1.4 </h3></div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/modules.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: Module Index</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li class=\"current\"><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>Modules</h1>  </div>\n</div>\n<div class=\"contents\">\nHere is a list of all modules:<ul>\n<li><a class=\"el\" href=\"group__export.html\">Export Definitions</a></li>\n<li><a class=\"el\" href=\"group__version.html\">Version Information</a></li>\n<li><a class=\"el\" href=\"group__basic.html\">Basic Types</a></li>\n<li><a class=\"el\" href=\"group__styles.html\">Node Styles</a></li>\n<li><a class=\"el\" href=\"group__tokens.html\">Tokens</a></li>\n<li><a class=\"el\" href=\"group__events.html\">Events</a></li>\n<li><a class=\"el\" href=\"group__nodes.html\">Nodes</a></li>\n<li><a class=\"el\" href=\"group__parser.html\">Parser Definitions</a></li>\n<li><a class=\"el\" href=\"group__emitter.html\">Emitter Definitions</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__alias__data__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_alias_data_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_alias_data_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__parser.html\">Parser Definitions</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_alias_data_s\" -->\n<p>This structure holds aliases data.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__alias__data__s.html#ac4b9a352dd8ff747bfa63a54832d7962\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor.  <a href=\"#ac4b9a352dd8ff747bfa63a54832d7962\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__alias__data__s.html#ac45e17508386dec9163b4aa5cfb5312e\">index</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node id.  <a href=\"#ac45e17508386dec9163b4aa5cfb5312e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__alias__data__s.html#a9f8d87255bfc39df69068ed87b602e9f\">mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor mark.  <a href=\"#a9f8d87255bfc39df69068ed87b602e9f\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>This structure holds aliases data. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"ac4b9a352dd8ff747bfa63a54832d7962\"></a><!-- doxytag: member=\"yaml_alias_data_s::anchor\" ref=\"ac4b9a352dd8ff747bfa63a54832d7962\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__alias__data__s.html#ac4b9a352dd8ff747bfa63a54832d7962\">yaml_alias_data_s::anchor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac45e17508386dec9163b4aa5cfb5312e\"></a><!-- doxytag: member=\"yaml_alias_data_s::index\" ref=\"ac45e17508386dec9163b4aa5cfb5312e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__alias__data__s.html#ac45e17508386dec9163b4aa5cfb5312e\">yaml_alias_data_s::index</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The node id. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9f8d87255bfc39df69068ed87b602e9f\"></a><!-- doxytag: member=\"yaml_alias_data_s::mark\" ref=\"a9f8d87255bfc39df69068ed87b602e9f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__alias__data__s.html#a9f8d87255bfc39df69068ed87b602e9f\">yaml_alias_data_s::mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor mark. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__document__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_document_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_document_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__nodes.html\">Nodes</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_document_s\" -->\n<p>The document structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__document__s.html#aa3f9a11d8fbe4ac2eada1786176bab89\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a47c65aa6e05b1bbdd23ca6bf861057b7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__document__s.html#adc9ffcca86a2684362428da69ffd3dea\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#afbbfd5d4dcbe1f0ce088afa7266518bf\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__document__s.html#a5ac36f59c4a0f28124c2e1630ca4f227\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a39d2f17a1edca2641a6b93646e9931b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#aa9eeab76b69cc84a6ab1b02c14cfd594\">nodes</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document nodes.  <a href=\"#aa9eeab76b69cc84a6ab1b02c14cfd594\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#a7d36862d070804b8bedb53866487ac6d\">version_directive</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive.  <a href=\"#a7d36862d070804b8bedb53866487ac6d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__document__s.html#afb9b6cb56a29f880ad6b76c532133c40\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the tag directives list.  <a href=\"#a3f9c1d3d7466cc035179e64af2b983d5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__document__s.html#af14fd1a6c1fd10088391f07349ba55e8\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the tag directives list.  <a href=\"#aacdf541ee0945d7b3901a71538a7639f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#af1e09d0469fc24106f3790b1e3de09e1\">tag_directives</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The list of tag directives.  <a href=\"#af1e09d0469fc24106f3790b1e3de09e1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65c49e4f61ca5c2f6ecf410e1cc65787\"></a><!-- doxytag: member=\"yaml_document_s::start_implicit\" ref=\"a65c49e4f61ca5c2f6ecf410e1cc65787\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#a65c49e4f61ca5c2f6ecf410e1cc65787\">start_implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the document start indicator implicit? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a59de90b4078659fd0f49377929afcac1\"></a><!-- doxytag: member=\"yaml_document_s::end_implicit\" ref=\"a59de90b4078659fd0f49377929afcac1\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#a59de90b4078659fd0f49377929afcac1\">end_implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the document end indicator implicit? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#a0a37311ebf8f6637e4bc1d280a879997\">start_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the document.  <a href=\"#a0a37311ebf8f6637e4bc1d280a879997\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html#a9299efdaadf764f4d03641a3ee51e0d0\">end_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the document.  <a href=\"#a9299efdaadf764f4d03641a3ee51e0d0\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The document structure. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"aa3f9a11d8fbe4ac2eada1786176bab89\"></a><!-- doxytag: member=\"yaml_document_s::start\" ref=\"aa3f9a11d8fbe4ac2eada1786176bab89\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#aa3f9a11d8fbe4ac2eada1786176bab89\">yaml_document_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adc9ffcca86a2684362428da69ffd3dea\"></a><!-- doxytag: member=\"yaml_document_s::end\" ref=\"adc9ffcca86a2684362428da69ffd3dea\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#adc9ffcca86a2684362428da69ffd3dea\">yaml_document_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5ac36f59c4a0f28124c2e1630ca4f227\"></a><!-- doxytag: member=\"yaml_document_s::top\" ref=\"a5ac36f59c4a0f28124c2e1630ca4f227\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#a5ac36f59c4a0f28124c2e1630ca4f227\">yaml_document_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa9eeab76b69cc84a6ab1b02c14cfd594\"></a><!-- doxytag: member=\"yaml_document_s::nodes\" ref=\"aa9eeab76b69cc84a6ab1b02c14cfd594\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__document__s.html#aa9eeab76b69cc84a6ab1b02c14cfd594\">yaml_document_s::nodes</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The document nodes. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7d36862d070804b8bedb53866487ac6d\"></a><!-- doxytag: member=\"yaml_document_s::version_directive\" ref=\"a7d36862d070804b8bedb53866487ac6d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#a7d36862d070804b8bedb53866487ac6d\">yaml_document_s::version_directive</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The version directive. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afb9b6cb56a29f880ad6b76c532133c40\"></a><!-- doxytag: member=\"yaml_document_s::start\" ref=\"afb9b6cb56a29f880ad6b76c532133c40\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#aa3f9a11d8fbe4ac2eada1786176bab89\">yaml_document_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the tag directives list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af14fd1a6c1fd10088391f07349ba55e8\"></a><!-- doxytag: member=\"yaml_document_s::end\" ref=\"af14fd1a6c1fd10088391f07349ba55e8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__document__s.html#adc9ffcca86a2684362428da69ffd3dea\">yaml_document_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the tag directives list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af1e09d0469fc24106f3790b1e3de09e1\"></a><!-- doxytag: member=\"yaml_document_s::tag_directives\" ref=\"af1e09d0469fc24106f3790b1e3de09e1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__document__s.html#af1e09d0469fc24106f3790b1e3de09e1\">yaml_document_s::tag_directives</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The list of tag directives. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0a37311ebf8f6637e4bc1d280a879997\"></a><!-- doxytag: member=\"yaml_document_s::start_mark\" ref=\"a0a37311ebf8f6637e4bc1d280a879997\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__document__s.html#a0a37311ebf8f6637e4bc1d280a879997\">yaml_document_s::start_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the document. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9299efdaadf764f4d03641a3ee51e0d0\"></a><!-- doxytag: member=\"yaml_document_s::end_mark\" ref=\"a9299efdaadf764f4d03641a3ee51e0d0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__document__s.html#a9299efdaadf764f4d03641a3ee51e0d0\">yaml_document_s::end_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the document. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__emitter__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_emitter_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>yaml_emitter_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__emitter.html\">Emitter Definitions</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_emitter_s\" -->\n<p>The emitter structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#adb154d3d10b34077792b8e4a0f0596f7\">buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer pointer.  <a href=\"#adb154d3d10b34077792b8e4a0f0596f7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">size</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer size.  <a href=\"#a53bdc6a00632b48c81098aad91a9fd8d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">size_written</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of written bytes.  <a href=\"#a1851639b8f0e53b8e272c806d9fb648b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#adb154d3d10b34077792b8e4a0f0596f7\">buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer pointer.  <a href=\"#a5ce72aa2067fe7f22bd75a95eb076053\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">size</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer size.  <a href=\"#ad24c67d483fff16060e1134b19962d2b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">size_written</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of written bytes.  <a href=\"#a1d428c6dcc5082c6cbf1e2aede852c9a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a8803fe1047e8bcea9bdfcad0743fa0dd\">string</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">String output data.  <a href=\"#a8803fe1047e8bcea9bdfcad0743fa0dd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">FILE *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#abfe1e82cd5c4a180b1468e65ccfd1c61\">file</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">File output data.  <a href=\"#abfe1e82cd5c4a180b1468e65ccfd1c61\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#a1c8f40a58f0a3061449b3fed02be145e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#a42285849529f1b0eb9f4aac2eaef5204\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a7615ab51145234f467984f3091558852\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#adf20e81d4690b86732932aff06a6d2e6\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#adf20e81d4690b86732932aff06a6d2e6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ae8913d3c0bf4c987dc452efee2c802e3\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#ae8913d3c0bf4c987dc452efee2c802e3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#abb03bd7a5b832de48f9fbc9512ed7936\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#abb03bd7a5b832de48f9fbc9512ed7936\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#aed9370f42cea4dff82f96839ce760b5a\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#aed9370f42cea4dff82f96839ce760b5a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad0c5410fff4602266a0c6e0af730dd70\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#ad0c5410fff4602266a0c6e0af730dd70\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad68af21e510adcfc2db43b31e791efe1\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#ad68af21e510adcfc2db43b31e791efe1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a126a19ae360206437647892a344a30f0\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a126a19ae360206437647892a344a30f0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#aafa8b6f21022ce2f4cb9b44ad15a535e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a2c31edecd7f6dfd87fe3f8e12b705884\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the event queue.  <a href=\"#a2c31edecd7f6dfd87fe3f8e12b705884\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a55703a15e71c6b9551a2f4feb888bdcb\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the event queue.  <a href=\"#a55703a15e71c6b9551a2f4feb888bdcb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a547dfd20576006e606ffb0d8042b4234\">head</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The head of the event queue.  <a href=\"#a547dfd20576006e606ffb0d8042b4234\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#acafa1e3cb872fa7917217469659fb273\">tail</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tail of the event queue.  <a href=\"#acafa1e3cb872fa7917217469659fb273\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a28ec8053132a8e7cf29df983835754b7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a28ec8053132a8e7cf29df983835754b7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6669a94bc18247491e59c709852be0d1\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a6669a94bc18247491e59c709852be0d1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a5779bcbfd04df64e42434b7599332d11\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a5779bcbfd04df64e42434b7599332d11\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a94afdd9750b95529bbbbd09456a4391d\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#a94afdd9750b95529bbbbd09456a4391d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a3b28127063323de1d88fc18cdb6adf8a\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#a3b28127063323de1d88fc18cdb6adf8a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a8e3f468d814d2aa5e074f7da1648d34a\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a8e3f468d814d2aa5e074f7da1648d34a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor value.  <a href=\"#a6f2882bde71e478e29dc5b293def8739\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#aece73cc234475630032b1c75a735eeb5\">anchor_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor length.  <a href=\"#aece73cc234475630032b1c75a735eeb5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a1129c6f9ae5cd3b437b8ab8767324f03\"></a><!-- doxytag: member=\"yaml_emitter_s::alias\" ref=\"a1129c6f9ae5cd3b437b8ab8767324f03\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a1129c6f9ae5cd3b437b8ab8767324f03\">alias</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it an alias? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a7f043a9092eef2d644cc8f1180386239\">handle</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle.  <a href=\"#a7f043a9092eef2d644cc8f1180386239\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a3552cece6908f99518205e8cbe2c793a\">handle_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle length.  <a href=\"#a3552cece6908f99518205e8cbe2c793a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad9b61d5e9e05a47b2f873342ab226188\">suffix</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag suffix.  <a href=\"#ad9b61d5e9e05a47b2f873342ab226188\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad83936bbd4b6b77c79555c71cccc8fb5\">suffix_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag suffix length.  <a href=\"#ad83936bbd4b6b77c79555c71cccc8fb5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a20246ec76d64854ff93629cf1b424d86\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value.  <a href=\"#a20246ec76d64854ff93629cf1b424d86\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a4f72d57ad020803803e78922ecdec580\">length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar length.  <a href=\"#a4f72d57ad020803803e78922ecdec580\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a363a1aaaf512433ee7eab3083428cc70\"></a><!-- doxytag: member=\"yaml_emitter_s::multiline\" ref=\"a363a1aaaf512433ee7eab3083428cc70\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a363a1aaaf512433ee7eab3083428cc70\">multiline</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Does the scalar contain line breaks? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"afd8496f5bb995bb5aacc349fd6b45bf5\"></a><!-- doxytag: member=\"yaml_emitter_s::flow_plain_allowed\" ref=\"afd8496f5bb995bb5aacc349fd6b45bf5\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#afd8496f5bb995bb5aacc349fd6b45bf5\">flow_plain_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expessed in the flow plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5b5f6c9d687d788c8dac86d213ef4c16\"></a><!-- doxytag: member=\"yaml_emitter_s::block_plain_allowed\" ref=\"a5b5f6c9d687d788c8dac86d213ef4c16\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a5b5f6c9d687d788c8dac86d213ef4c16\">block_plain_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the block plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a3729ff7e7add06a1a1d9067a557a59fc\"></a><!-- doxytag: member=\"yaml_emitter_s::single_quoted_allowed\" ref=\"a3729ff7e7add06a1a1d9067a557a59fc\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a3729ff7e7add06a1a1d9067a557a59fc\">single_quoted_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the single quoted style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a64e05972897d02f606627ef0cf3c7420\"></a><!-- doxytag: member=\"yaml_emitter_s::block_allowed\" ref=\"a64e05972897d02f606627ef0cf3c7420\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a64e05972897d02f606627ef0cf3c7420\">block_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the literal or folded styles? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#acd1e83d220103aa24577038cfb1c2d21\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The output style.  <a href=\"#acd1e83d220103aa24577038cfb1c2d21\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a8f00c3c08e0d87bab11e91a4464a50bc\">references</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of references.  <a href=\"#a8f00c3c08e0d87bab11e91a4464a50bc\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a88154c89db7ec99fb322b1970371c350\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor id.  <a href=\"#a88154c89db7ec99fb322b1970371c350\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6c3e98c02ffae879717b3d09f9458936\"></a><!-- doxytag: member=\"yaml_emitter_s::serialized\" ref=\"a6c3e98c02ffae879717b3d09f9458936\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6c3e98c02ffae879717b3d09f9458936\">serialized</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the node has been emitted? <br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Error handling</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpaf042bafd560f7bd09b37efa40772311\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#afa2d6367a86ae6d43df14e24479bb0a7\">error</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Error type.  <a href=\"#afa2d6367a86ae6d43df14e24479bb0a7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ae076ef7c85ae107a2233dd4206577800\">problem</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Error description.  <a href=\"#ae076ef7c85ae107a2233dd4206577800\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Writer stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpee82c26a762d9eda665a45fdcdae7f67\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#aefa7e29ba8042ed1d133a02bb368ea3e\">write_handler</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Write handler.  <a href=\"#aefa7e29ba8042ed1d133a02bb368ea3e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6c4fe0176b69da64ac1ddc7e091967e5\">write_handler_data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">A pointer for passing to the white handler.  <a href=\"#a6c4fe0176b69da64ac1ddc7e091967e5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >union {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#adb154d3d10b34077792b8e4a0f0596f7\">buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer pointer.  <a href=\"#a5ce72aa2067fe7f22bd75a95eb076053\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">size</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The buffer size.  <a href=\"#ad24c67d483fff16060e1134b19962d2b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">size_written</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of written bytes.  <a href=\"#a1d428c6dcc5082c6cbf1e2aede852c9a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a8803fe1047e8bcea9bdfcad0743fa0dd\">string</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">String output data.  <a href=\"#a43d34f4667ee7c0da8d6b9406a1dce96\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;FILE *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#abfe1e82cd5c4a180b1468e65ccfd1c61\">file</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">File output data.  <a href=\"#afb86cb14f60416cc07eedb20585f3764\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#aa975acf559cc87d79abdb732c994f56f\">output</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Standard (string or file) output data.  <a href=\"#aa975acf559cc87d79abdb732c994f56f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#adbc4316b40afdcc9ef49d3929d97eb1c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#ab1a7ec35fcc61cc3affe62bc5ee9e0b2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a84fcdc6e2cd91ff2e38594a1d8f435a6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#adf20e81d4690b86732932aff06a6d2e6\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#ab86889ad01535a8c288408df3f7455c2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#afb2700e9b866b5be0ff6c7549c719f81\">buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The working buffer.  <a href=\"#afb2700e9b866b5be0ff6c7549c719f81\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#ae8913d3c0bf4c987dc452efee2c802e3\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#a9096d152a3292fca324044907326804a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#abb03bd7a5b832de48f9fbc9512ed7936\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#a64a25c335013ec4497a5f14796111828\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#aed9370f42cea4dff82f96839ce760b5a\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a523f757260794400ffdae6d051090710\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#ad0c5410fff4602266a0c6e0af730dd70\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#aaff93992cd5c0be1386b3f8090207ea6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6eeffbc9cd5beb89b679740b7f1d6d09\">raw_buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The raw buffer.  <a href=\"#a6eeffbc9cd5beb89b679740b7f1d6d09\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ada17f19fa6248d6ee493684b03700857\">encoding</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream encoding.  <a href=\"#ada17f19fa6248d6ee493684b03700857\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Emitter stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrp57228565532f46f6090d0fe7426f7ac0\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acb0259cdc5e2bb23faaf7266496df827\"></a><!-- doxytag: member=\"yaml_emitter_s::canonical\" ref=\"acb0259cdc5e2bb23faaf7266496df827\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#acb0259cdc5e2bb23faaf7266496df827\">canonical</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the output is in the canonical style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a33545f8924be89daf8b81dc905d558c0\">best_indent</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of indentation spaces.  <a href=\"#a33545f8924be89daf8b81dc905d558c0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a56dde6b352bdf7d4031f89d2b5d704f6\">best_width</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The preferred width of the output lines.  <a href=\"#a56dde6b352bdf7d4031f89d2b5d704f6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a76372a2413f71a5b36bf77a58d8f5d40\"></a><!-- doxytag: member=\"yaml_emitter_s::unicode\" ref=\"a76372a2413f71a5b36bf77a58d8f5d40\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a76372a2413f71a5b36bf77a58d8f5d40\">unicode</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Allow unescaped non-ASCII characters? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a84c1b884d805588495067ee98a8e7c50\">line_break</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The preferred line break.  <a href=\"#a84c1b884d805588495067ee98a8e7c50\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#ad68af21e510adcfc2db43b31e791efe1\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a4f917a8c795813420ecfc1f30bcb5ea9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a126a19ae360206437647892a344a30f0\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a4a5f2a6fc80a080b58a80d6f29f374b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#ada10f335135a1ce5d90bbff5542dfe68\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a6dc87fbd5b074507e102b967492b135d\">states</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of states.  <a href=\"#a6dc87fbd5b074507e102b967492b135d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a29f1d4f27ff9b9616c154f0730dd24ee\">state</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current emitter state.  <a href=\"#a29f1d4f27ff9b9616c154f0730dd24ee\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a2c31edecd7f6dfd87fe3f8e12b705884\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the event queue.  <a href=\"#a7ba41d2e39753745641acfa882814b0f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a55703a15e71c6b9551a2f4feb888bdcb\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the event queue.  <a href=\"#ac6a1a353e78f8e8c1fd161e9b43b74bd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a547dfd20576006e606ffb0d8042b4234\">head</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The head of the event queue.  <a href=\"#aa7be3f3ad25c98710ab3a922b939da18\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#acafa1e3cb872fa7917217469659fb273\">tail</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tail of the event queue.  <a href=\"#a338d5b9b3263b2f96b051007fbb30a84\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a3516b49eb7579e422750a94a9d7c1700\">events</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event queue.  <a href=\"#a3516b49eb7579e422750a94a9d7c1700\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a28ec8053132a8e7cf29df983835754b7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#af9833ef02c6e7a58b7f0bbce9d547f22\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a6669a94bc18247491e59c709852be0d1\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a105801b34622359a06dfa1650c74556b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a5779bcbfd04df64e42434b7599332d11\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a684090c9803fd7423539179e6016e742\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad31c591593ccb78e6b04887bf4f162c8\">indents</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of indentation levels.  <a href=\"#ad31c591593ccb78e6b04887bf4f162c8\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a94afdd9750b95529bbbbd09456a4391d\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#af1647603f56c5038dd239947f4268a71\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a3b28127063323de1d88fc18cdb6adf8a\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#a4597d8531037b8b6f15487929e4a671b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a8e3f468d814d2aa5e074f7da1648d34a\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a2a5da3f15fc79f62dd14a7187b48471d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a9dc51f2ccb8a517e2dc029e1af960258\">tag_directives</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The list of tag directives.  <a href=\"#a9dc51f2ccb8a517e2dc029e1af960258\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a93a73494a5d62464a67cc71f86ad9728\">indent</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current indentation level.  <a href=\"#a93a73494a5d62464a67cc71f86ad9728\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a50f8e97c4290b83ebd646b4c4f5c5de9\">flow_level</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current flow level.  <a href=\"#a50f8e97c4290b83ebd646b4c4f5c5de9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a70fb5f09cc60de989fbec2868f4db19e\"></a><!-- doxytag: member=\"yaml_emitter_s::root_context\" ref=\"a70fb5f09cc60de989fbec2868f4db19e\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a70fb5f09cc60de989fbec2868f4db19e\">root_context</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it the document root context? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9d20d55b0914ff81bf0f56e57ca7416e\"></a><!-- doxytag: member=\"yaml_emitter_s::sequence_context\" ref=\"a9d20d55b0914ff81bf0f56e57ca7416e\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a9d20d55b0914ff81bf0f56e57ca7416e\">sequence_context</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it a sequence context? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a5a7527d8da86b28d95ff18b29f9d82f0\"></a><!-- doxytag: member=\"yaml_emitter_s::mapping_context\" ref=\"a5a7527d8da86b28d95ff18b29f9d82f0\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a5a7527d8da86b28d95ff18b29f9d82f0\">mapping_context</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it a mapping context? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc0db69cdae44c1385bbb2b6c207371b\"></a><!-- doxytag: member=\"yaml_emitter_s::simple_key_context\" ref=\"acc0db69cdae44c1385bbb2b6c207371b\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#acc0db69cdae44c1385bbb2b6c207371b\">simple_key_context</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it a simple mapping key context? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a4fe9295608f19a687e41ec3661383e88\">line</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current line.  <a href=\"#a4fe9295608f19a687e41ec3661383e88\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a678fbbacad5d1f3f9bb7516282888b8a\">column</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current column.  <a href=\"#a678fbbacad5d1f3f9bb7516282888b8a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a160ed0cf1cc6116b65772d14ced2d867\"></a><!-- doxytag: member=\"yaml_emitter_s::whitespace\" ref=\"a160ed0cf1cc6116b65772d14ced2d867\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a160ed0cf1cc6116b65772d14ced2d867\">whitespace</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the last character was a whitespace? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a407de8ff950b16b4254a381d4e5cea42\"></a><!-- doxytag: member=\"yaml_emitter_s::indention\" ref=\"a407de8ff950b16b4254a381d4e5cea42\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a407de8ff950b16b4254a381d4e5cea42\">indention</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the last character was an indentation character (' ', '-', '?', ':')? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a65e84454b702622c41a068768c144c51\"></a><!-- doxytag: member=\"yaml_emitter_s::open_ended\" ref=\"a65e84454b702622c41a068768c144c51\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a65e84454b702622c41a068768c144c51\">open_ended</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If an explicit document end is required? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor value.  <a href=\"#ad3e6ace8839e0b08f63246bfbf90b2ef\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#aece73cc234475630032b1c75a735eeb5\">anchor_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor length.  <a href=\"#a842cf7da8db1cd9dc7307f1399b91f27\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a1129c6f9ae5cd3b437b8ab8767324f03\">alias</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is it an alias? <br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad8883d967ee02e3e15e58bc2533188cc\">anchor_data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Anchor analysis.  <a href=\"#ad8883d967ee02e3e15e58bc2533188cc\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a7f043a9092eef2d644cc8f1180386239\">handle</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle.  <a href=\"#a125a07a57bdea9ce74b227e5110846b3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a3552cece6908f99518205e8cbe2c793a\">handle_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle length.  <a href=\"#a48ed2d41edbc13c4b6d9544a650c7df3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#ad9b61d5e9e05a47b2f873342ab226188\">suffix</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag suffix.  <a href=\"#a4b489e1dd4ea43b8ecf54879ded7dd0c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#ad83936bbd4b6b77c79555c71cccc8fb5\">suffix_length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag suffix length.  <a href=\"#a604f3279204adb47bbd1d6337338cb4b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a3b947fbbc337d123af10c58abf1353a4\">tag_data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Tag analysis.  <a href=\"#a3b947fbbc337d123af10c58abf1353a4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a20246ec76d64854ff93629cf1b424d86\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value.  <a href=\"#a6164e21146b779344687765d2a725c6a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a4f72d57ad020803803e78922ecdec580\">length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar length.  <a href=\"#a0f4fb6e181eaf2233b2bb8dc78492f61\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a363a1aaaf512433ee7eab3083428cc70\">multiline</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Does the scalar contain line breaks? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#afd8496f5bb995bb5aacc349fd6b45bf5\">flow_plain_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expessed in the flow plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a5b5f6c9d687d788c8dac86d213ef4c16\">block_plain_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the block plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a3729ff7e7add06a1a1d9067a557a59fc\">single_quoted_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the single quoted style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a64e05972897d02f606627ef0cf3c7420\">block_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Can the scalar be expressed in the literal or folded styles? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#acd1e83d220103aa24577038cfb1c2d21\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The output style.  <a href=\"#ae941b4d9252e3748f27227bbfa7a35ae\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ac3f80f4cb9c361b5fa4fa8f5cc04dbac\">scalar_data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scalar analysis.  <a href=\"#ac3f80f4cb9c361b5fa4fa8f5cc04dbac\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Dumper stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrp07d3f44098630ad2efbb005f4d3493a8\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a0234d7e9bfbe7cc6e12b60f90f5ec552\"></a><!-- doxytag: member=\"yaml_emitter_s::opened\" ref=\"a0234d7e9bfbe7cc6e12b60f90f5ec552\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a0234d7e9bfbe7cc6e12b60f90f5ec552\">opened</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the stream was already opened? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a978d894a219686d31d971899e31910cd\"></a><!-- doxytag: member=\"yaml_emitter_s::closed\" ref=\"a978d894a219686d31d971899e31910cd\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a978d894a219686d31d971899e31910cd\">closed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the stream was already closed? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a8f00c3c08e0d87bab11e91a4464a50bc\">references</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of references.  <a href=\"#a16a14d92decbdcedfca4b1feb7fb72cf\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a88154c89db7ec99fb322b1970371c350\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor id.  <a href=\"#adaa633eac5b067224ff2136502d01c6f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__emitter__s.html#a6c3e98c02ffae879717b3d09f9458936\">serialized</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">If the node has been emitted? <br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#ad4e7a72cb8b1b67373ba6d76a5229e6b\">anchors</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The information associated with the document nodes.  <a href=\"#ad4e7a72cb8b1b67373ba6d76a5229e6b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#a0cede830c77a15df7f1b73b9023d2d11\">last_anchor_id</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last assigned anchor id.  <a href=\"#a0cede830c77a15df7f1b73b9023d2d11\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html#af9cc8801cc9b46a4f45255c67a1574a7\">document</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The currently emitted document.  <a href=\"#af9cc8801cc9b46a4f45255c67a1574a7\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The emitter structure. </p>\n<p>All members are internal. Manage the structure using the <code>yaml_emitter_</code> family of functions. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"afa2d6367a86ae6d43df14e24479bb0a7\"></a><!-- doxytag: member=\"yaml_emitter_s::error\" ref=\"afa2d6367a86ae6d43df14e24479bb0a7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a> <a class=\"el\" href=\"structyaml__emitter__s.html#afa2d6367a86ae6d43df14e24479bb0a7\">yaml_emitter_s::error</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Error type. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae076ef7c85ae107a2233dd4206577800\"></a><!-- doxytag: member=\"yaml_emitter_s::problem\" ref=\"ae076ef7c85ae107a2233dd4206577800\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* <a class=\"el\" href=\"structyaml__emitter__s.html#ae076ef7c85ae107a2233dd4206577800\">yaml_emitter_s::problem</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Error description. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aefa7e29ba8042ed1d133a02bb368ea3e\"></a><!-- doxytag: member=\"yaml_emitter_s::write_handler\" ref=\"aefa7e29ba8042ed1d133a02bb368ea3e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#aefa7e29ba8042ed1d133a02bb368ea3e\">yaml_emitter_s::write_handler</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Write handler. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6c4fe0176b69da64ac1ddc7e091967e5\"></a><!-- doxytag: member=\"yaml_emitter_s::write_handler_data\" ref=\"a6c4fe0176b69da64ac1ddc7e091967e5\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* <a class=\"el\" href=\"structyaml__emitter__s.html#a6c4fe0176b69da64ac1ddc7e091967e5\">yaml_emitter_s::write_handler_data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>A pointer for passing to the white handler. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adb154d3d10b34077792b8e4a0f0596f7\"></a><!-- doxytag: member=\"yaml_emitter_s::buffer\" ref=\"adb154d3d10b34077792b8e4a0f0596f7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__emitter__s.html#adb154d3d10b34077792b8e4a0f0596f7\">yaml_emitter_s::buffer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The buffer pointer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a53bdc6a00632b48c81098aad91a9fd8d\"></a><!-- doxytag: member=\"yaml_emitter_s::size\" ref=\"a53bdc6a00632b48c81098aad91a9fd8d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__emitter__s.html#a53bdc6a00632b48c81098aad91a9fd8d\">yaml_emitter_s::size</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The buffer size. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1851639b8f0e53b8e272c806d9fb648b\"></a><!-- doxytag: member=\"yaml_emitter_s::size_written\" ref=\"a1851639b8f0e53b8e272c806d9fb648b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t* <a class=\"el\" href=\"structyaml__emitter__s.html#a1851639b8f0e53b8e272c806d9fb648b\">yaml_emitter_s::size_written</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of written bytes. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8803fe1047e8bcea9bdfcad0743fa0dd\"></a><!-- doxytag: member=\"yaml_emitter_s::string\" ref=\"a8803fe1047e8bcea9bdfcad0743fa0dd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a8803fe1047e8bcea9bdfcad0743fa0dd\">yaml_emitter_s::string</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>String output data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abfe1e82cd5c4a180b1468e65ccfd1c61\"></a><!-- doxytag: member=\"yaml_emitter_s::file\" ref=\"abfe1e82cd5c4a180b1468e65ccfd1c61\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">FILE* <a class=\"el\" href=\"structyaml__emitter__s.html#abfe1e82cd5c4a180b1468e65ccfd1c61\">yaml_emitter_s::file</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>File output data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa975acf559cc87d79abdb732c994f56f\"></a><!-- doxytag: member=\"yaml_emitter_s::output\" ref=\"aa975acf559cc87d79abdb732c994f56f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">union { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#aa975acf559cc87d79abdb732c994f56f\">yaml_emitter_s::output</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Standard (string or file) output data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1c8f40a58f0a3061449b3fed02be145e\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"a1c8f40a58f0a3061449b3fed02be145e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a42285849529f1b0eb9f4aac2eaef5204\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"a42285849529f1b0eb9f4aac2eaef5204\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7615ab51145234f467984f3091558852\"></a><!-- doxytag: member=\"yaml_emitter_s::pointer\" ref=\"a7615ab51145234f467984f3091558852\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">yaml_emitter_s::pointer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adf20e81d4690b86732932aff06a6d2e6\"></a><!-- doxytag: member=\"yaml_emitter_s::last\" ref=\"adf20e81d4690b86732932aff06a6d2e6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#adf20e81d4690b86732932aff06a6d2e6\">yaml_emitter_s::last</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The last filled position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afb2700e9b866b5be0ff6c7549c719f81\"></a><!-- doxytag: member=\"yaml_emitter_s::buffer\" ref=\"afb2700e9b866b5be0ff6c7549c719f81\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#adb154d3d10b34077792b8e4a0f0596f7\">yaml_emitter_s::buffer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The working buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae8913d3c0bf4c987dc452efee2c802e3\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"ae8913d3c0bf4c987dc452efee2c802e3\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abb03bd7a5b832de48f9fbc9512ed7936\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"abb03bd7a5b832de48f9fbc9512ed7936\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aed9370f42cea4dff82f96839ce760b5a\"></a><!-- doxytag: member=\"yaml_emitter_s::pointer\" ref=\"aed9370f42cea4dff82f96839ce760b5a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__emitter__s.html#a7615ab51145234f467984f3091558852\">yaml_emitter_s::pointer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad0c5410fff4602266a0c6e0af730dd70\"></a><!-- doxytag: member=\"yaml_emitter_s::last\" ref=\"ad0c5410fff4602266a0c6e0af730dd70\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__emitter__s.html#adf20e81d4690b86732932aff06a6d2e6\">yaml_emitter_s::last</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The last filled position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6eeffbc9cd5beb89b679740b7f1d6d09\"></a><!-- doxytag: member=\"yaml_emitter_s::raw_buffer\" ref=\"a6eeffbc9cd5beb89b679740b7f1d6d09\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a6eeffbc9cd5beb89b679740b7f1d6d09\">yaml_emitter_s::raw_buffer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The raw buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ada17f19fa6248d6ee493684b03700857\"></a><!-- doxytag: member=\"yaml_emitter_s::encoding\" ref=\"ada17f19fa6248d6ee493684b03700857\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> <a class=\"el\" href=\"structyaml__emitter__s.html#ada17f19fa6248d6ee493684b03700857\">yaml_emitter_s::encoding</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream encoding. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a33545f8924be89daf8b81dc905d558c0\"></a><!-- doxytag: member=\"yaml_emitter_s::best_indent\" ref=\"a33545f8924be89daf8b81dc905d558c0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a33545f8924be89daf8b81dc905d558c0\">yaml_emitter_s::best_indent</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of indentation spaces. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a56dde6b352bdf7d4031f89d2b5d704f6\"></a><!-- doxytag: member=\"yaml_emitter_s::best_width\" ref=\"a56dde6b352bdf7d4031f89d2b5d704f6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a56dde6b352bdf7d4031f89d2b5d704f6\">yaml_emitter_s::best_width</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The preferred width of the output lines. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a84c1b884d805588495067ee98a8e7c50\"></a><!-- doxytag: member=\"yaml_emitter_s::line_break\" ref=\"a84c1b884d805588495067ee98a8e7c50\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a> <a class=\"el\" href=\"structyaml__emitter__s.html#a84c1b884d805588495067ee98a8e7c50\">yaml_emitter_s::line_break</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The preferred line break. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad68af21e510adcfc2db43b31e791efe1\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"ad68af21e510adcfc2db43b31e791efe1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a126a19ae360206437647892a344a30f0\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"a126a19ae360206437647892a344a30f0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aafa8b6f21022ce2f4cb9b44ad15a535e\"></a><!-- doxytag: member=\"yaml_emitter_s::top\" ref=\"aafa8b6f21022ce2f4cb9b44ad15a535e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">yaml_emitter_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6dc87fbd5b074507e102b967492b135d\"></a><!-- doxytag: member=\"yaml_emitter_s::states\" ref=\"a6dc87fbd5b074507e102b967492b135d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a6dc87fbd5b074507e102b967492b135d\">yaml_emitter_s::states</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of states. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a29f1d4f27ff9b9616c154f0730dd24ee\"></a><!-- doxytag: member=\"yaml_emitter_s::state\" ref=\"a29f1d4f27ff9b9616c154f0730dd24ee\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a> <a class=\"el\" href=\"structyaml__emitter__s.html#a29f1d4f27ff9b9616c154f0730dd24ee\">yaml_emitter_s::state</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current emitter state. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2c31edecd7f6dfd87fe3f8e12b705884\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"a2c31edecd7f6dfd87fe3f8e12b705884\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the event queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a55703a15e71c6b9551a2f4feb888bdcb\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"a55703a15e71c6b9551a2f4feb888bdcb\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the event queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a547dfd20576006e606ffb0d8042b4234\"></a><!-- doxytag: member=\"yaml_emitter_s::head\" ref=\"a547dfd20576006e606ffb0d8042b4234\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a547dfd20576006e606ffb0d8042b4234\">yaml_emitter_s::head</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The head of the event queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acafa1e3cb872fa7917217469659fb273\"></a><!-- doxytag: member=\"yaml_emitter_s::tail\" ref=\"acafa1e3cb872fa7917217469659fb273\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#acafa1e3cb872fa7917217469659fb273\">yaml_emitter_s::tail</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tail of the event queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3516b49eb7579e422750a94a9d7c1700\"></a><!-- doxytag: member=\"yaml_emitter_s::events\" ref=\"a3516b49eb7579e422750a94a9d7c1700\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a3516b49eb7579e422750a94a9d7c1700\">yaml_emitter_s::events</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The event queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a28ec8053132a8e7cf29df983835754b7\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"a28ec8053132a8e7cf29df983835754b7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6669a94bc18247491e59c709852be0d1\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"a6669a94bc18247491e59c709852be0d1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5779bcbfd04df64e42434b7599332d11\"></a><!-- doxytag: member=\"yaml_emitter_s::top\" ref=\"a5779bcbfd04df64e42434b7599332d11\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">yaml_emitter_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad31c591593ccb78e6b04887bf4f162c8\"></a><!-- doxytag: member=\"yaml_emitter_s::indents\" ref=\"ad31c591593ccb78e6b04887bf4f162c8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#ad31c591593ccb78e6b04887bf4f162c8\">yaml_emitter_s::indents</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of indentation levels. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a94afdd9750b95529bbbbd09456a4391d\"></a><!-- doxytag: member=\"yaml_emitter_s::start\" ref=\"a94afdd9750b95529bbbbd09456a4391d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a1c8f40a58f0a3061449b3fed02be145e\">yaml_emitter_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3b28127063323de1d88fc18cdb6adf8a\"></a><!-- doxytag: member=\"yaml_emitter_s::end\" ref=\"a3b28127063323de1d88fc18cdb6adf8a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a42285849529f1b0eb9f4aac2eaef5204\">yaml_emitter_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8e3f468d814d2aa5e074f7da1648d34a\"></a><!-- doxytag: member=\"yaml_emitter_s::top\" ref=\"a8e3f468d814d2aa5e074f7da1648d34a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#aafa8b6f21022ce2f4cb9b44ad15a535e\">yaml_emitter_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9dc51f2ccb8a517e2dc029e1af960258\"></a><!-- doxytag: member=\"yaml_emitter_s::tag_directives\" ref=\"a9dc51f2ccb8a517e2dc029e1af960258\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a9dc51f2ccb8a517e2dc029e1af960258\">yaml_emitter_s::tag_directives</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The list of tag directives. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a93a73494a5d62464a67cc71f86ad9728\"></a><!-- doxytag: member=\"yaml_emitter_s::indent\" ref=\"a93a73494a5d62464a67cc71f86ad9728\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a93a73494a5d62464a67cc71f86ad9728\">yaml_emitter_s::indent</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current indentation level. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a50f8e97c4290b83ebd646b4c4f5c5de9\"></a><!-- doxytag: member=\"yaml_emitter_s::flow_level\" ref=\"a50f8e97c4290b83ebd646b4c4f5c5de9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a50f8e97c4290b83ebd646b4c4f5c5de9\">yaml_emitter_s::flow_level</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current flow level. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4fe9295608f19a687e41ec3661383e88\"></a><!-- doxytag: member=\"yaml_emitter_s::line\" ref=\"a4fe9295608f19a687e41ec3661383e88\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a4fe9295608f19a687e41ec3661383e88\">yaml_emitter_s::line</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current line. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a678fbbacad5d1f3f9bb7516282888b8a\"></a><!-- doxytag: member=\"yaml_emitter_s::column\" ref=\"a678fbbacad5d1f3f9bb7516282888b8a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a678fbbacad5d1f3f9bb7516282888b8a\">yaml_emitter_s::column</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current column. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6f2882bde71e478e29dc5b293def8739\"></a><!-- doxytag: member=\"yaml_emitter_s::anchor\" ref=\"a6f2882bde71e478e29dc5b293def8739\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">yaml_emitter_s::anchor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aece73cc234475630032b1c75a735eeb5\"></a><!-- doxytag: member=\"yaml_emitter_s::anchor_length\" ref=\"aece73cc234475630032b1c75a735eeb5\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__emitter__s.html#aece73cc234475630032b1c75a735eeb5\">yaml_emitter_s::anchor_length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor length. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad8883d967ee02e3e15e58bc2533188cc\"></a><!-- doxytag: member=\"yaml_emitter_s::anchor_data\" ref=\"ad8883d967ee02e3e15e58bc2533188cc\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#ad8883d967ee02e3e15e58bc2533188cc\">yaml_emitter_s::anchor_data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Anchor analysis. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7f043a9092eef2d644cc8f1180386239\"></a><!-- doxytag: member=\"yaml_emitter_s::handle\" ref=\"a7f043a9092eef2d644cc8f1180386239\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a7f043a9092eef2d644cc8f1180386239\">yaml_emitter_s::handle</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag handle. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3552cece6908f99518205e8cbe2c793a\"></a><!-- doxytag: member=\"yaml_emitter_s::handle_length\" ref=\"a3552cece6908f99518205e8cbe2c793a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__emitter__s.html#a3552cece6908f99518205e8cbe2c793a\">yaml_emitter_s::handle_length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag handle length. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad9b61d5e9e05a47b2f873342ab226188\"></a><!-- doxytag: member=\"yaml_emitter_s::suffix\" ref=\"ad9b61d5e9e05a47b2f873342ab226188\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#ad9b61d5e9e05a47b2f873342ab226188\">yaml_emitter_s::suffix</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag suffix. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad83936bbd4b6b77c79555c71cccc8fb5\"></a><!-- doxytag: member=\"yaml_emitter_s::suffix_length\" ref=\"ad83936bbd4b6b77c79555c71cccc8fb5\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__emitter__s.html#ad83936bbd4b6b77c79555c71cccc8fb5\">yaml_emitter_s::suffix_length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag suffix length. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3b947fbbc337d123af10c58abf1353a4\"></a><!-- doxytag: member=\"yaml_emitter_s::tag_data\" ref=\"a3b947fbbc337d123af10c58abf1353a4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#a3b947fbbc337d123af10c58abf1353a4\">yaml_emitter_s::tag_data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Tag analysis. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a20246ec76d64854ff93629cf1b424d86\"></a><!-- doxytag: member=\"yaml_emitter_s::value\" ref=\"a20246ec76d64854ff93629cf1b424d86\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#a20246ec76d64854ff93629cf1b424d86\">yaml_emitter_s::value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4f72d57ad020803803e78922ecdec580\"></a><!-- doxytag: member=\"yaml_emitter_s::length\" ref=\"a4f72d57ad020803803e78922ecdec580\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__emitter__s.html#a4f72d57ad020803803e78922ecdec580\">yaml_emitter_s::length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar length. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acd1e83d220103aa24577038cfb1c2d21\"></a><!-- doxytag: member=\"yaml_emitter_s::style\" ref=\"acd1e83d220103aa24577038cfb1c2d21\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> <a class=\"el\" href=\"structyaml__emitter__s.html#acd1e83d220103aa24577038cfb1c2d21\">yaml_emitter_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The output style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac3f80f4cb9c361b5fa4fa8f5cc04dbac\"></a><!-- doxytag: member=\"yaml_emitter_s::scalar_data\" ref=\"ac3f80f4cb9c361b5fa4fa8f5cc04dbac\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__emitter__s.html#ac3f80f4cb9c361b5fa4fa8f5cc04dbac\">yaml_emitter_s::scalar_data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Scalar analysis. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8f00c3c08e0d87bab11e91a4464a50bc\"></a><!-- doxytag: member=\"yaml_emitter_s::references\" ref=\"a8f00c3c08e0d87bab11e91a4464a50bc\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a8f00c3c08e0d87bab11e91a4464a50bc\">yaml_emitter_s::references</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of references. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a88154c89db7ec99fb322b1970371c350\"></a><!-- doxytag: member=\"yaml_emitter_s::anchor\" ref=\"a88154c89db7ec99fb322b1970371c350\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a6f2882bde71e478e29dc5b293def8739\">yaml_emitter_s::anchor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor id. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad4e7a72cb8b1b67373ba6d76a5229e6b\"></a><!-- doxytag: member=\"yaml_emitter_s::anchors\" ref=\"ad4e7a72cb8b1b67373ba6d76a5229e6b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }  * <a class=\"el\" href=\"structyaml__emitter__s.html#ad4e7a72cb8b1b67373ba6d76a5229e6b\">yaml_emitter_s::anchors</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The information associated with the document nodes. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0cede830c77a15df7f1b73b9023d2d11\"></a><!-- doxytag: member=\"yaml_emitter_s::last_anchor_id\" ref=\"a0cede830c77a15df7f1b73b9023d2d11\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__emitter__s.html#a0cede830c77a15df7f1b73b9023d2d11\">yaml_emitter_s::last_anchor_id</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The last assigned anchor id. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af9cc8801cc9b46a4f45255c67a1574a7\"></a><!-- doxytag: member=\"yaml_emitter_s::document\" ref=\"af9cc8801cc9b46a4f45255c67a1574a7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a>* <a class=\"el\" href=\"structyaml__emitter__s.html#af9cc8801cc9b46a4f45255c67a1574a7\">yaml_emitter_s::document</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The currently emitted document. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__event__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_event_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_event_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__events.html\">Events</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_event_s\" -->\n<p>The event structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml_event_type_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html#aff08bc3df4859d5b3a804e8c011cac51\">type</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event type.  <a href=\"#aff08bc3df4859d5b3a804e8c011cac51\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >union {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a92139ba6ae79089fd9a2f5f4aeaf733f\">encoding</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document encoding.  <a href=\"#abec210d9c046bfcd96980f6687f64aab\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a18946df9b7c815dd7fb30103c02a9e24\">stream_start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream parameters (for <code>YAML_STREAM_START_EVENT</code>).  <a href=\"#a8e65a6205bf09dad3155a12fccf0e022\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a5cef7981358ecefdf9d4780b3eacd39b\">version_directive</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive.  <a href=\"#a9eb5bf4c9c577231fe7a882ed6339ef5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a74d7f521a559305585009ab503bee16b\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the tag directives list.  <a href=\"#ac82187258ad2d770c657daa327f85d9b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a115b4a9797f3a72cd78d42c85100317c\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the tag directives list.  <a href=\"#a15345ef7fb8509c0cd062ed5d2be44e7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a162ce89a77e706d68649d40e1a520e1f\">tag_directives</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The list of tag directives.  <a href=\"#a2c17df45272556145a2252bf82759d3d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the document indicator implicit? <br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#aed593fadbeb898d6d90b0c62522a82cc\">document_start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document parameters (for <code>YAML_DOCUMENT_START_EVENT</code>).  <a href=\"#a407fd0a986a3180bc0e0d302a775e1ea\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the document end indicator implicit? <br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#acffec5f24c01bb6bfb0c93a9bf1a803e\">document_end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document end parameters (for <code>YAML_DOCUMENT_END_EVENT</code>).  <a href=\"#a2b7b07388ae344569ec05cf241d181ec\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor.  <a href=\"#a3c02ccdc16b200d0fd43fbb3780450b2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#ac21f0f1e12207b8fd4f02496259f6c0b\">alias</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The alias parameters (for <code>YAML_ALIAS_EVENT</code>).  <a href=\"#abb691f82be4ecbdd7b9dd9f6835042ae\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor.  <a href=\"#ab34bebc8eee036545d0c1823c4acf9ec\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">tag</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag.  <a href=\"#a913fa35ea765b8879c4d53addb132999\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a23436bdddb447d0fc217bab5c5b04a36\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value.  <a href=\"#a17c9d9624b3ddd4de23ae546d918845b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a15618ee917746d28d97ad8eb9639e141\">length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The length of the scalar value.  <a href=\"#a7248ad38a1e64cdc43a340436c8eac57\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#ac3600acbcc6b4787f1ec3511976a3151\">plain_implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the tag optional for the plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a9ce2441d08d9cf6a1bf9f28f5ee17f68\">quoted_implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the tag optional for any non-plain style? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#ab107f895698f70560a5c344fc60ff498\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar style.  <a href=\"#aa5120877f103458dafeb2b3401db48a7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a3753b4c5d10040d75f7c7f4b56c42549\">scalar</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar parameters (for <code>YAML_SCALAR_EVENT</code>).  <a href=\"#a0a7341bdebeafdef53c194c58c5e7c6a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor.  <a href=\"#a71f42bf1df3bce8d507b86053d89c358\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">tag</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag.  <a href=\"#ac72857c4595b7d09e347ad11501a6ec9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the tag optional? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a2ac1305583a8e7e2247738116bca6b3b\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The sequence style.  <a href=\"#a3f09e9a5cf28b12a08f5153930bb0b28\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a632895e022fbf29ab24a816893a8580f\">sequence_start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The sequence parameters (for <code>YAML_SEQUENCE_START_EVENT</code>).  <a href=\"#a156b5563dccc610642741d483c2f7f55\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor.  <a href=\"#a14cdf779ff4c2efd724a7542ddedb998\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">tag</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag.  <a href=\"#a27c16c57f4792cc812ffbe8734d29b49\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">implicit</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is the tag optional? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a682a60e9a72e100357a38dd6434ad4f9\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The mapping style.  <a href=\"#abb3d2e89121c1467f0a1c9997e78c451\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__event__s.html#a361b28413783f92797e6bfe03e9abaa1\">mapping_start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The mapping parameters (for <code>YAML_MAPPING_START_EVENT</code>).  <a href=\"#aba2083c0a410a41e7246b49abe9c0a1c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html#a0b8f9cce08e49459e4bab89035dbf6c6\">data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event data.  <a href=\"#a0b8f9cce08e49459e4bab89035dbf6c6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html#aeaf86eb588e75232e1b73e8213eb3e31\">start_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the event.  <a href=\"#aeaf86eb588e75232e1b73e8213eb3e31\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html#a9307f91473094c229738b03d223bc4ba\">end_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the event.  <a href=\"#a9307f91473094c229738b03d223bc4ba\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The event structure. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"aff08bc3df4859d5b3a804e8c011cac51\"></a><!-- doxytag: member=\"yaml_event_s::type\" ref=\"aff08bc3df4859d5b3a804e8c011cac51\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml_event_type_t</a> <a class=\"el\" href=\"structyaml__event__s.html#aff08bc3df4859d5b3a804e8c011cac51\">yaml_event_s::type</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The event type. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a92139ba6ae79089fd9a2f5f4aeaf733f\"></a><!-- doxytag: member=\"yaml_event_s::encoding\" ref=\"a92139ba6ae79089fd9a2f5f4aeaf733f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> <a class=\"el\" href=\"structyaml__event__s.html#a92139ba6ae79089fd9a2f5f4aeaf733f\">yaml_event_s::encoding</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The document encoding. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a18946df9b7c815dd7fb30103c02a9e24\"></a><!-- doxytag: member=\"yaml_event_s::stream_start\" ref=\"a18946df9b7c815dd7fb30103c02a9e24\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#a18946df9b7c815dd7fb30103c02a9e24\">yaml_event_s::stream_start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream parameters (for <code>YAML_STREAM_START_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5cef7981358ecefdf9d4780b3eacd39b\"></a><!-- doxytag: member=\"yaml_event_s::version_directive\" ref=\"a5cef7981358ecefdf9d4780b3eacd39b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#a5cef7981358ecefdf9d4780b3eacd39b\">yaml_event_s::version_directive</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The version directive. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a74d7f521a559305585009ab503bee16b\"></a><!-- doxytag: member=\"yaml_event_s::start\" ref=\"a74d7f521a559305585009ab503bee16b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#a74d7f521a559305585009ab503bee16b\">yaml_event_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the tag directives list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a115b4a9797f3a72cd78d42c85100317c\"></a><!-- doxytag: member=\"yaml_event_s::end\" ref=\"a115b4a9797f3a72cd78d42c85100317c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#a115b4a9797f3a72cd78d42c85100317c\">yaml_event_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the tag directives list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a162ce89a77e706d68649d40e1a520e1f\"></a><!-- doxytag: member=\"yaml_event_s::tag_directives\" ref=\"a162ce89a77e706d68649d40e1a520e1f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... } ::@16  <a class=\"el\" href=\"structyaml__event__s.html#a162ce89a77e706d68649d40e1a520e1f\">yaml_event_s::tag_directives</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The list of tag directives. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3cbb10e276d55890ee2fa802dd6290e1\"></a><!-- doxytag: member=\"yaml_event_s::implicit\" ref=\"a3cbb10e276d55890ee2fa802dd6290e1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__event__s.html#a3cbb10e276d55890ee2fa802dd6290e1\">yaml_event_s::implicit</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Is the document indicator implicit? </p>\n<p>Is the tag optional?</p>\n<p>Is the document end indicator implicit? </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aed593fadbeb898d6d90b0c62522a82cc\"></a><!-- doxytag: member=\"yaml_event_s::document_start\" ref=\"aed593fadbeb898d6d90b0c62522a82cc\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#aed593fadbeb898d6d90b0c62522a82cc\">yaml_event_s::document_start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The document parameters (for <code>YAML_DOCUMENT_START_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acffec5f24c01bb6bfb0c93a9bf1a803e\"></a><!-- doxytag: member=\"yaml_event_s::document_end\" ref=\"acffec5f24c01bb6bfb0c93a9bf1a803e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#acffec5f24c01bb6bfb0c93a9bf1a803e\">yaml_event_s::document_end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The document end parameters (for <code>YAML_DOCUMENT_END_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaa97ab683d28e5f611042d0fbd929125\"></a><!-- doxytag: member=\"yaml_event_s::anchor\" ref=\"aaa97ab683d28e5f611042d0fbd929125\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#aaa97ab683d28e5f611042d0fbd929125\">yaml_event_s::anchor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac21f0f1e12207b8fd4f02496259f6c0b\"></a><!-- doxytag: member=\"yaml_event_s::alias\" ref=\"ac21f0f1e12207b8fd4f02496259f6c0b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#ac21f0f1e12207b8fd4f02496259f6c0b\">yaml_event_s::alias</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The alias parameters (for <code>YAML_ALIAS_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4daf9ed2683d79f2be7e89ca7d06801c\"></a><!-- doxytag: member=\"yaml_event_s::tag\" ref=\"a4daf9ed2683d79f2be7e89ca7d06801c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#a4daf9ed2683d79f2be7e89ca7d06801c\">yaml_event_s::tag</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a23436bdddb447d0fc217bab5c5b04a36\"></a><!-- doxytag: member=\"yaml_event_s::value\" ref=\"a23436bdddb447d0fc217bab5c5b04a36\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__event__s.html#a23436bdddb447d0fc217bab5c5b04a36\">yaml_event_s::value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a15618ee917746d28d97ad8eb9639e141\"></a><!-- doxytag: member=\"yaml_event_s::length\" ref=\"a15618ee917746d28d97ad8eb9639e141\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__event__s.html#a15618ee917746d28d97ad8eb9639e141\">yaml_event_s::length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The length of the scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab107f895698f70560a5c344fc60ff498\"></a><!-- doxytag: member=\"yaml_event_s::style\" ref=\"ab107f895698f70560a5c344fc60ff498\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> <a class=\"el\" href=\"structyaml__event__s.html#ab107f895698f70560a5c344fc60ff498\">yaml_event_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3753b4c5d10040d75f7c7f4b56c42549\"></a><!-- doxytag: member=\"yaml_event_s::scalar\" ref=\"a3753b4c5d10040d75f7c7f4b56c42549\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#a3753b4c5d10040d75f7c7f4b56c42549\">yaml_event_s::scalar</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar parameters (for <code>YAML_SCALAR_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2ac1305583a8e7e2247738116bca6b3b\"></a><!-- doxytag: member=\"yaml_event_s::style\" ref=\"a2ac1305583a8e7e2247738116bca6b3b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> <a class=\"el\" href=\"structyaml__event__s.html#ab107f895698f70560a5c344fc60ff498\">yaml_event_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The sequence style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a632895e022fbf29ab24a816893a8580f\"></a><!-- doxytag: member=\"yaml_event_s::sequence_start\" ref=\"a632895e022fbf29ab24a816893a8580f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#a632895e022fbf29ab24a816893a8580f\">yaml_event_s::sequence_start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The sequence parameters (for <code>YAML_SEQUENCE_START_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a682a60e9a72e100357a38dd6434ad4f9\"></a><!-- doxytag: member=\"yaml_event_s::style\" ref=\"a682a60e9a72e100357a38dd6434ad4f9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> <a class=\"el\" href=\"structyaml__event__s.html#ab107f895698f70560a5c344fc60ff498\">yaml_event_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The mapping style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a361b28413783f92797e6bfe03e9abaa1\"></a><!-- doxytag: member=\"yaml_event_s::mapping_start\" ref=\"a361b28413783f92797e6bfe03e9abaa1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__event__s.html#a361b28413783f92797e6bfe03e9abaa1\">yaml_event_s::mapping_start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The mapping parameters (for <code>YAML_MAPPING_START_EVENT</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0b8f9cce08e49459e4bab89035dbf6c6\"></a><!-- doxytag: member=\"yaml_event_s::data\" ref=\"a0b8f9cce08e49459e4bab89035dbf6c6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">union { ... }   <a class=\"el\" href=\"structyaml__event__s.html#a0b8f9cce08e49459e4bab89035dbf6c6\">yaml_event_s::data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The event data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aeaf86eb588e75232e1b73e8213eb3e31\"></a><!-- doxytag: member=\"yaml_event_s::start_mark\" ref=\"aeaf86eb588e75232e1b73e8213eb3e31\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__event__s.html#aeaf86eb588e75232e1b73e8213eb3e31\">yaml_event_s::start_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the event. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9307f91473094c229738b03d223bc4ba\"></a><!-- doxytag: member=\"yaml_event_s::end_mark\" ref=\"a9307f91473094c229738b03d223bc4ba\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__event__s.html#a9307f91473094c229738b03d223bc4ba\">yaml_event_s::end_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the event. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__mark__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_mark_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_mark_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__basic.html\">Basic Types</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_mark_s\" -->\n<p>The pointer position.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__mark__s.html#a525306fb424a79f0b0d5a7d3990aa596\">index</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The position index.  <a href=\"#a525306fb424a79f0b0d5a7d3990aa596\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__mark__s.html#a55952e426fc8a5f180a5e9c907ca926c\">line</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The position line.  <a href=\"#a55952e426fc8a5f180a5e9c907ca926c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__mark__s.html#aaa18357a6fb2bb377b969ce9ff589797\">column</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The position column.  <a href=\"#aaa18357a6fb2bb377b969ce9ff589797\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The pointer position. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"a525306fb424a79f0b0d5a7d3990aa596\"></a><!-- doxytag: member=\"yaml_mark_s::index\" ref=\"a525306fb424a79f0b0d5a7d3990aa596\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__mark__s.html#a525306fb424a79f0b0d5a7d3990aa596\">yaml_mark_s::index</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The position index. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a55952e426fc8a5f180a5e9c907ca926c\"></a><!-- doxytag: member=\"yaml_mark_s::line\" ref=\"a55952e426fc8a5f180a5e9c907ca926c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__mark__s.html#a55952e426fc8a5f180a5e9c907ca926c\">yaml_mark_s::line</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The position line. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaa18357a6fb2bb377b969ce9ff589797\"></a><!-- doxytag: member=\"yaml_mark_s::column\" ref=\"aaa18357a6fb2bb377b969ce9ff589797\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__mark__s.html#aaa18357a6fb2bb377b969ce9ff589797\">yaml_mark_s::column</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The position column. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__node__pair__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_node_pair_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_node_pair_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__nodes.html\">Nodes</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_node_pair_s\" -->\n<p>An element of a mapping node.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__pair__s.html#ac83746eb40b6b3a84f6da3143658ed4e\">key</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The key of the element.  <a href=\"#ac83746eb40b6b3a84f6da3143658ed4e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__pair__s.html#a56c1de2c11d509462d1bf03803bb8ab1\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The value of the element.  <a href=\"#a56c1de2c11d509462d1bf03803bb8ab1\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>An element of a mapping node. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"ac83746eb40b6b3a84f6da3143658ed4e\"></a><!-- doxytag: member=\"yaml_node_pair_s::key\" ref=\"ac83746eb40b6b3a84f6da3143658ed4e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__node__pair__s.html#ac83746eb40b6b3a84f6da3143658ed4e\">yaml_node_pair_s::key</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The key of the element. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a56c1de2c11d509462d1bf03803bb8ab1\"></a><!-- doxytag: member=\"yaml_node_pair_s::value\" ref=\"a56c1de2c11d509462d1bf03803bb8ab1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__node__pair__s.html#a56c1de2c11d509462d1bf03803bb8ab1\">yaml_node_pair_s::value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The value of the element. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__node__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_node_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_node_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__nodes.html\">Nodes</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_node_s\" -->\n<p>The node structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml_node_type_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html#a1db4ea72e13be65ec42339ce47d19669\">type</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node type.  <a href=\"#a1db4ea72e13be65ec42339ce47d19669\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html#aa753358ea6d9d221b7b188832d47fefa\">tag</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node tag.  <a href=\"#aa753358ea6d9d221b7b188832d47fefa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >union {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a0d444412a29609d62699267ae72f971d\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value.  <a href=\"#a0ce51acf3b3e7e3798fd59db6048215a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#ad90dd9926d9debbaa48eb5339bd9fc36\">length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The length of the scalar value.  <a href=\"#aebc3bbc2fe05ccf793cfd9d0697d7411\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar style.  <a href=\"#aedd8f01db928d283efb35d07bd594118\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a688583a2649848aed700d7e07d9efac9\">scalar</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar parameters (for <code>YAML_SCALAR_NODE</code>).  <a href=\"#a20ef91ea5b107f7e160f6626ae94e757\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a2e1001a0a7b068d4b2543a93d4cf60d4\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#adff33843f3a55f50dab6319a3622112e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#ac9b3d891f9fcd5462289823716deca0e\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#aadabab91314f9a90437abd04f6ff07cb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a510326726569a06a11119f12649787cf\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a87ff5c5f9cfa26fb410a2fdfef4af6e6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a6b340541cc012ac5aacdcaa46ced097a\">items</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of sequence items.  <a href=\"#a20d9072496e270ec80741ae436cfc78c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a242be04ec3709138264175e3e5b50dbe\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The sequence style.  <a href=\"#aef5300a10030a153ce20e58bc2e1c886\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#afe215962139fac93b965cc2acd71452b\">sequence</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The sequence parameters (for <code>YAML_SEQUENCE_NODE</code>).  <a href=\"#ab302f3c85f1b7f6896a7571479e0d748\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a82afddfe1cf7f1a346d931ad4896d3de\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#ae3264b106666197e1c01601a5b8c5f69\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a1827ba7f3e7f7e94171fa20ade25345d\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#ad4193067b681fb09b4e0ce5d7be32824\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#aa420f88720907fe02b1d1595c9351d59\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a3b512e63e6089f84064e4938d79d232e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a830a080bbed021eb230ef644e4680909\">pairs</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of mapping pairs (key, value).  <a href=\"#ac44360d96e1cf1d21434dad925b34abd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#a5b80d97f64e2867927404fedb65949c6\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The mapping style.  <a href=\"#a4071cd026bfc0eb097b8dac6c3b7cbb5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__node__s.html#ab18dc5c573885a08a92e113dcb7fb361\">mapping</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The mapping parameters (for <code>YAML_MAPPING_NODE</code>).  <a href=\"#a37018c73209f623ca1e38c8506533080\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html#a7e1be921e921f2d0911e450a063b1344\">data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node data.  <a href=\"#a7e1be921e921f2d0911e450a063b1344\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html#ac17afa3b3a9ff4703bb4983163bfae5c\">start_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the node.  <a href=\"#ac17afa3b3a9ff4703bb4983163bfae5c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html#a63144671fd16f94f72c6d537360f7328\">end_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the node.  <a href=\"#a63144671fd16f94f72c6d537360f7328\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The node structure. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"a1db4ea72e13be65ec42339ce47d19669\"></a><!-- doxytag: member=\"yaml_node_s::type\" ref=\"a1db4ea72e13be65ec42339ce47d19669\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml_node_type_t</a> <a class=\"el\" href=\"structyaml__node__s.html#a1db4ea72e13be65ec42339ce47d19669\">yaml_node_s::type</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The node type. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa753358ea6d9d221b7b188832d47fefa\"></a><!-- doxytag: member=\"yaml_node_s::tag\" ref=\"aa753358ea6d9d221b7b188832d47fefa\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#aa753358ea6d9d221b7b188832d47fefa\">yaml_node_s::tag</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The node tag. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0d444412a29609d62699267ae72f971d\"></a><!-- doxytag: member=\"yaml_node_s::value\" ref=\"a0d444412a29609d62699267ae72f971d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#a0d444412a29609d62699267ae72f971d\">yaml_node_s::value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad90dd9926d9debbaa48eb5339bd9fc36\"></a><!-- doxytag: member=\"yaml_node_s::length\" ref=\"ad90dd9926d9debbaa48eb5339bd9fc36\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__node__s.html#ad90dd9926d9debbaa48eb5339bd9fc36\">yaml_node_s::length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The length of the scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a362960375516e77a130c412ef10ef55d\"></a><!-- doxytag: member=\"yaml_node_s::style\" ref=\"a362960375516e77a130c412ef10ef55d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> <a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">yaml_node_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a688583a2649848aed700d7e07d9efac9\"></a><!-- doxytag: member=\"yaml_node_s::scalar\" ref=\"a688583a2649848aed700d7e07d9efac9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__node__s.html#a688583a2649848aed700d7e07d9efac9\">yaml_node_s::scalar</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar parameters (for <code>YAML_SCALAR_NODE</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2e1001a0a7b068d4b2543a93d4cf60d4\"></a><!-- doxytag: member=\"yaml_node_s::start\" ref=\"a2e1001a0a7b068d4b2543a93d4cf60d4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#a2e1001a0a7b068d4b2543a93d4cf60d4\">yaml_node_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac9b3d891f9fcd5462289823716deca0e\"></a><!-- doxytag: member=\"yaml_node_s::end\" ref=\"ac9b3d891f9fcd5462289823716deca0e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#ac9b3d891f9fcd5462289823716deca0e\">yaml_node_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a510326726569a06a11119f12649787cf\"></a><!-- doxytag: member=\"yaml_node_s::top\" ref=\"a510326726569a06a11119f12649787cf\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#a510326726569a06a11119f12649787cf\">yaml_node_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6b340541cc012ac5aacdcaa46ced097a\"></a><!-- doxytag: member=\"yaml_node_s::items\" ref=\"a6b340541cc012ac5aacdcaa46ced097a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... } ::@21  <a class=\"el\" href=\"structyaml__node__s.html#a6b340541cc012ac5aacdcaa46ced097a\">yaml_node_s::items</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of sequence items. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a242be04ec3709138264175e3e5b50dbe\"></a><!-- doxytag: member=\"yaml_node_s::style\" ref=\"a242be04ec3709138264175e3e5b50dbe\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> <a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">yaml_node_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The sequence style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afe215962139fac93b965cc2acd71452b\"></a><!-- doxytag: member=\"yaml_node_s::sequence\" ref=\"afe215962139fac93b965cc2acd71452b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__node__s.html#afe215962139fac93b965cc2acd71452b\">yaml_node_s::sequence</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The sequence parameters (for <code>YAML_SEQUENCE_NODE</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a82afddfe1cf7f1a346d931ad4896d3de\"></a><!-- doxytag: member=\"yaml_node_s::start\" ref=\"a82afddfe1cf7f1a346d931ad4896d3de\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#a2e1001a0a7b068d4b2543a93d4cf60d4\">yaml_node_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1827ba7f3e7f7e94171fa20ade25345d\"></a><!-- doxytag: member=\"yaml_node_s::end\" ref=\"a1827ba7f3e7f7e94171fa20ade25345d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#ac9b3d891f9fcd5462289823716deca0e\">yaml_node_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa420f88720907fe02b1d1595c9351d59\"></a><!-- doxytag: member=\"yaml_node_s::top\" ref=\"aa420f88720907fe02b1d1595c9351d59\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_t</a>* <a class=\"el\" href=\"structyaml__node__s.html#a510326726569a06a11119f12649787cf\">yaml_node_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a830a080bbed021eb230ef644e4680909\"></a><!-- doxytag: member=\"yaml_node_s::pairs\" ref=\"a830a080bbed021eb230ef644e4680909\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... } ::@22  <a class=\"el\" href=\"structyaml__node__s.html#a830a080bbed021eb230ef644e4680909\">yaml_node_s::pairs</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of mapping pairs (key, value). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5b80d97f64e2867927404fedb65949c6\"></a><!-- doxytag: member=\"yaml_node_s::style\" ref=\"a5b80d97f64e2867927404fedb65949c6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> <a class=\"el\" href=\"structyaml__node__s.html#a362960375516e77a130c412ef10ef55d\">yaml_node_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The mapping style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab18dc5c573885a08a92e113dcb7fb361\"></a><!-- doxytag: member=\"yaml_node_s::mapping\" ref=\"ab18dc5c573885a08a92e113dcb7fb361\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__node__s.html#ab18dc5c573885a08a92e113dcb7fb361\">yaml_node_s::mapping</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The mapping parameters (for <code>YAML_MAPPING_NODE</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7e1be921e921f2d0911e450a063b1344\"></a><!-- doxytag: member=\"yaml_node_s::data\" ref=\"a7e1be921e921f2d0911e450a063b1344\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">union { ... }   <a class=\"el\" href=\"structyaml__node__s.html#a7e1be921e921f2d0911e450a063b1344\">yaml_node_s::data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The node data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac17afa3b3a9ff4703bb4983163bfae5c\"></a><!-- doxytag: member=\"yaml_node_s::start_mark\" ref=\"ac17afa3b3a9ff4703bb4983163bfae5c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__node__s.html#ac17afa3b3a9ff4703bb4983163bfae5c\">yaml_node_s::start_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the node. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a63144671fd16f94f72c6d537360f7328\"></a><!-- doxytag: member=\"yaml_node_s::end_mark\" ref=\"a63144671fd16f94f72c6d537360f7328\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__node__s.html#a63144671fd16f94f72c6d537360f7328\">yaml_node_s::end_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the node. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__parser__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_parser_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"headertitle\">\n<h1>yaml_parser_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__parser.html\">Parser Definitions</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_parser_s\" -->\n<p>The parser structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string start pointer.  <a href=\"#a8cdb2fed4bb17b1d62d29fa06c53fef6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string end pointer.  <a href=\"#aad74ffeb7f2eef0a12e34b0aac263ff3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">current</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string current position.  <a href=\"#a3406d2ba7e969c09344d4ced8c855007\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string start pointer.  <a href=\"#a5eb8c81f118c8e4a41eaa2ccd4c79c14\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string end pointer.  <a href=\"#a2d5483a8cbfd576737c5d8020bc19d2f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">current</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string current position.  <a href=\"#a19b7d0d276bc06d52fbcffad29ad1f7d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a44fa7ca68030680244f3743ce5e35702\">string</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">String input data.  <a href=\"#a44fa7ca68030680244f3743ce5e35702\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">FILE *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae69c2974e3c4c37e941a0e1971be15a9\">file</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">File input data.  <a href=\"#ae69c2974e3c4c37e941a0e1971be15a9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a5cdddcbd18566acc760a660a88f93ffd\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#a5cdddcbd18566acc760a660a88f93ffd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6ff1f802eb95bc45f13e8e73ec009828\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#a6ff1f802eb95bc45f13e8e73ec009828\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a8199466e3578374b3f984b6c0c4e2ae4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#aea4d8da24939825b2fadd368a71ec7de\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6c08a94c21dfe1611c0d89aef0d3c46d\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#a6c08a94c21dfe1611c0d89aef0d3c46d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aa768a9c29ae2c3015fdb84ea313844e2\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#aa768a9c29ae2c3015fdb84ea313844e2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#abea626790abfbcaeeb72a3772dc69e43\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#abea626790abfbcaeeb72a3772dc69e43\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">unsigned char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a3ad1ccaf979092ece82bc981c5a22fb0\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#a3ad1ccaf979092ece82bc981c5a22fb0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a5f33f5c8f19c1c124cba4857ab2a05c7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the tokens queue.  <a href=\"#a5f33f5c8f19c1c124cba4857ab2a05c7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a41594b6495f4d31edb977cafb8cbaf78\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the tokens queue.  <a href=\"#a41594b6495f4d31edb977cafb8cbaf78\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aa1c7a1248ca22159a3e60ba45b386507\">head</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The head of the tokens queue.  <a href=\"#aa1c7a1248ca22159a3e60ba45b386507\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a22ad26583d8d1264e982188358aa79b6\">tail</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tail of the tokens queue.  <a href=\"#a22ad26583d8d1264e982188358aa79b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ab7208590a6852001ff8e4343a97b0c24\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#ab7208590a6852001ff8e4343a97b0c24\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6d8295bd62c7bb7be9486a1b4d71e736\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a6d8295bd62c7bb7be9486a1b4d71e736\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a9f1f879ba84bc51fa8feb1f47190aa23\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ac311a6d962e0f67dd11759b8999630c6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#ac311a6d962e0f67dd11759b8999630c6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae8416ffcb48c78a575ee21872d5aa698\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#ae8416ffcb48c78a575ee21872d5aa698\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae610673669f06d46146198a346796276\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#ae610673669f06d46146198a346796276\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#adfdc33f6f53dce4bee87f11821d879b7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#adfdc33f6f53dce4bee87f11821d879b7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a211a0aedc964ba8cd07cb7875faa464b\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a211a0aedc964ba8cd07cb7875faa464b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#af3eecdcdeeb183d16e4219749620df0c\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#af3eecdcdeeb183d16e4219749620df0c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ab5a3789882819f2fd69f2cd9deaac8f6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#ab5a3789882819f2fd69f2cd9deaac8f6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aad019da255ea73adf31d4b1aeac86bb2\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#aad019da255ea73adf31d4b1aeac86bb2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ab2678112fd2eaa8f588f2d6217aabc9d\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#ab2678112fd2eaa8f588f2d6217aabc9d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a3614f6d6e673e8177e4555c9ecf830fb\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#a3614f6d6e673e8177e4555c9ecf830fb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aa7fdc1ff8342636119934ac824a2ecc8\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#aa7fdc1ff8342636119934ac824a2ecc8\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a490eddbfcc27787e47de631a3d2e09a8\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a490eddbfcc27787e47de631a3d2e09a8\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ab9eddd3a112c3a4547bf87f6936aba94\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#ab9eddd3a112c3a4547bf87f6936aba94\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a4011d41483171958bbf0b5124bde97c8\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#a4011d41483171958bbf0b5124bde97c8\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a24a3f3138b44de1914a3e54dbe0aeff7\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a24a3f3138b44de1914a3e54dbe0aeff7\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Error handling</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpaf042bafd560f7bd09b37efa40772311\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472\">error</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Error type.  <a href=\"#a6c5c3488ff22c8a4d234ca8587fa1472\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d\">problem</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Error description.  <a href=\"#a3dd8a43294cd420a433595a7a7d6e73d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd\">problem_offset</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The byte about which the problem occured.  <a href=\"#ae2d62a2ad45671c6dd89e18fb7c1c5bd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f\">problem_value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The problematic value (<code>-1</code> is none).  <a href=\"#a8694691b20824f6595873b728cb3bc0f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a595b5412d39a4a9e441e5ad34fb059d9\">problem_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The problem position.  <a href=\"#a595b5412d39a4a9e441e5ad34fb059d9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6779b67a23bbf7c401e4257d5875ae6b\">context</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The error context.  <a href=\"#a6779b67a23bbf7c401e4257d5875ae6b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ace259eec6e570f94b98b252e1a632e88\">context_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The context position.  <a href=\"#ace259eec6e570f94b98b252e1a632e88\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Reader stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpa1d775bd432fe4cf2fa9b7ee98808371\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30\">read_handler</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Read handler.  <a href=\"#a8c3af47a7a0750d437cba34699fcad30\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9\">read_handler_data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">A pointer for passing to the read handler.  <a href=\"#a11f265cd495e814c8ee7d3dd78ff2ca9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >union {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string start pointer.  <a href=\"#a5eb8c81f118c8e4a41eaa2ccd4c79c14\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string end pointer.  <a href=\"#a2d5483a8cbfd576737c5d8020bc19d2f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">current</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The string current position.  <a href=\"#a19b7d0d276bc06d52fbcffad29ad1f7d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a44fa7ca68030680244f3743ce5e35702\">string</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">String input data.  <a href=\"#a5cc6c00b4ccae1e4ea13aaad22e7b2ef\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;FILE *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ae69c2974e3c4c37e941a0e1971be15a9\">file</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">File input data.  <a href=\"#ab0fda82263c92cabb545e0d449c77369\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae800ef7fd42ad8bcbb69b116da3a7f53\">input</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Standard (string or file) input data.  <a href=\"#ae800ef7fd42ad8bcbb69b116da3a7f53\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a6129a99d45aee14ec705aa54dbb493b7\"></a><!-- doxytag: member=\"yaml_parser_s::eof\" ref=\"a6129a99d45aee14ec705aa54dbb493b7\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6129a99d45aee14ec705aa54dbb493b7\">eof</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">EOF flag. <br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a5cdddcbd18566acc760a660a88f93ffd\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#ac01cce9c2391bda21ad630c46e8b9ccc\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a6ff1f802eb95bc45f13e8e73ec009828\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#ad3b74e756cd6cdb097d0bcd499bbb487\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a2f74b5c84928465c7b0e57840f8a860e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#a6dff533b402c756a6faeb39f9148a97f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#afc56b6252bd75ec87edec5c80a5c733e\">buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The working buffer.  <a href=\"#afc56b6252bd75ec87edec5c80a5c733e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ad1392f74681fd839482d0b87ca2e404e\"></a><!-- doxytag: member=\"yaml_parser_s::unread\" ref=\"ad1392f74681fd839482d0b87ca2e404e\" args=\"\" -->\nsize_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><b>unread</b></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a6c08a94c21dfe1611c0d89aef0d3c46d\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the buffer.  <a href=\"#a1daeb12d14760b585f67e46fd3e3e10b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aa768a9c29ae2c3015fdb84ea313844e2\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the buffer.  <a href=\"#aa6e3b009a73e00ad57f678ea5399f74e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#abea626790abfbcaeeb72a3772dc69e43\">pointer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current position of the buffer.  <a href=\"#a67e4a62d614c7fb41ec7c8a8850b5f84\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;unsigned char *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a3ad1ccaf979092ece82bc981c5a22fb0\">last</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The last filled position of the buffer.  <a href=\"#a82350d65a4f39d40bba0939a2fe9d1f0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ae3e8481ceabdbf6796a7dc6265f740ac\">raw_buffer</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The raw buffer.  <a href=\"#ae3e8481ceabdbf6796a7dc6265f740ac\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a\">encoding</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The input encoding.  <a href=\"#a4f062e9d1fb1082bbf3996e46214905a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13\">offset</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The offset of the current position (in bytes).  <a href=\"#a04a7ba684ce49b2300c236c561439b13\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#aaeeb58dc348e6e6f89d6a7c8fea8f734\">mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The mark of the current position.  <a href=\"#aaeeb58dc348e6e6f89d6a7c8fea8f734\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Scanner stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpfb195ad33d77c2be631ff24fdf0cfc3a\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a7fecde5abcce11406c271f7db08f7a05\"></a><!-- doxytag: member=\"yaml_parser_s::stream_start_produced\" ref=\"a7fecde5abcce11406c271f7db08f7a05\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a7fecde5abcce11406c271f7db08f7a05\">stream_start_produced</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Have we started to scan the input stream? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a63ccf04d623f36c04b62cfd1fc6fccb5\"></a><!-- doxytag: member=\"yaml_parser_s::stream_end_produced\" ref=\"a63ccf04d623f36c04b62cfd1fc6fccb5\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a63ccf04d623f36c04b62cfd1fc6fccb5\">stream_end_produced</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Have we reached the end of the input stream? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a6a4bbbd3f58533e0969b7218c1e73fd4\">flow_level</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of unclosed '[' and '{' indicators.  <a href=\"#a6a4bbbd3f58533e0969b7218c1e73fd4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a5f33f5c8f19c1c124cba4857ab2a05c7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the tokens queue.  <a href=\"#a9c6fc4c0a8fd8dcf961aac909acb7718\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a41594b6495f4d31edb977cafb8cbaf78\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the tokens queue.  <a href=\"#a481c1f8e677db68faec1db4749808507\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aa1c7a1248ca22159a3e60ba45b386507\">head</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The head of the tokens queue.  <a href=\"#a3751871749eab9bc74641b0ca9cf3ba5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a22ad26583d8d1264e982188358aa79b6\">tail</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tail of the tokens queue.  <a href=\"#a015c56f37ac5f07d28ab57bbe7ba1d52\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a96d39b8333411d741ee1c13aa4141682\">tokens</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tokens queue.  <a href=\"#a96d39b8333411d741ee1c13aa4141682\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a7358e72ad071fec3185a833a3a245690\">tokens_parsed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of tokens fetched from the queue.  <a href=\"#a7358e72ad071fec3185a833a3a245690\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"a9b7d951a1195653cc109c1c54b4dacdc\"></a><!-- doxytag: member=\"yaml_parser_s::token_available\" ref=\"a9b7d951a1195653cc109c1c54b4dacdc\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><b>token_available</b></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ab7208590a6852001ff8e4343a97b0c24\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a44803ad89b68920a090e136086a20fd2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a6d8295bd62c7bb7be9486a1b4d71e736\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a28604e312c434fce97e454b8936b42f1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;int *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a987982928ff91538d6048f90549348d9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a2e29feac36a89f644d9640d44df62b74\">indents</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The indentation levels stack.  <a href=\"#a2e29feac36a89f644d9640d44df62b74\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#abad00703b649df32ee0d7b00b2f10403\">indent</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current indentation level.  <a href=\"#abad00703b649df32ee0d7b00b2f10403\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acc85a7bfddc7ae9114cf115e43c89126\"></a><!-- doxytag: member=\"yaml_parser_s::simple_key_allowed\" ref=\"acc85a7bfddc7ae9114cf115e43c89126\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#acc85a7bfddc7ae9114cf115e43c89126\">simple_key_allowed</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">May a simple key occur at the current position? <br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ac311a6d962e0f67dd11759b8999630c6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a414c3c0d12344dde24703dfd9a844e23\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ae8416ffcb48c78a575ee21872d5aa698\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a5ad9bad1923052d8eff04a5631d7b5da\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ae610673669f06d46146198a346796276\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a4a17211b35ee7f7d885902ebf13c9426\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ad5ce7de476c58fb6e1fdabbcc1c51659\">simple_keys</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of simple keys.  <a href=\"#ad5ce7de476c58fb6e1fdabbcc1c51659\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Parser stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrpe542ea8734d95b6b32a66b2e35c2d9ea\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#adfdc33f6f53dce4bee87f11821d879b7\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#afff2e238e449c67833f741ae6e2d124d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a211a0aedc964ba8cd07cb7875faa464b\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a6e334a3d6d88644cea2f791810bad09d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#af3eecdcdeeb183d16e4219749620df0c\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#a60349e05e14b4e2a33270ef54cb872ce\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a57aa3c5fbfcaed8c17e046f0778c92bf\">states</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The parser states stack.  <a href=\"#a57aa3c5fbfcaed8c17e046f0778c92bf\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a069d39cdf587ac2188e69d8fb018be64\">state</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The current parser state.  <a href=\"#a069d39cdf587ac2188e69d8fb018be64\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ab5a3789882819f2fd69f2cd9deaac8f6\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the stack.  <a href=\"#a938eb2080b4e7e2da3203d3786d328fb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aad019da255ea73adf31d4b1aeac86bb2\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the stack.  <a href=\"#a2443b99c701a8318bab9287c78b3d80d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ab2678112fd2eaa8f588f2d6217aabc9d\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the stack.  <a href=\"#ad5872b2645fb5b6787fe457e37d22744\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ad78837ae36e35d523e02c43d1ae3f30e\">marks</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stack of marks.  <a href=\"#ad78837ae36e35d523e02c43d1ae3f30e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a3614f6d6e673e8177e4555c9ecf830fb\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#a497da4ab8dcb95fe2fb1bde052937ca0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#aa7fdc1ff8342636119934ac824a2ecc8\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#a35efde4cda0469376a15ee2b687b64c5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a490eddbfcc27787e47de631a3d2e09a8\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a534e281da90863c1026de3d0c35ab2be\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a9bdfc1888d4e30ffb43146377d44fba0\">tag_directives</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The list of TAG directives.  <a href=\"#a9bdfc1888d4e30ffb43146377d44fba0\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupHeader\">Dumper stuff</div></td></tr>\n<tr><td colspan=\"2\"><div class=\"groupText\"><p><a class=\"anchor\" id=\"amgrp07d3f44098630ad2efbb005f4d3493a8\"></a> </p>\n</div></td></tr>\n<tr><td class=\"memItemLeft\" >struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#ab9eddd3a112c3a4547bf87f6936aba94\">start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the list.  <a href=\"#a476e5ca1bf38f2e545ee4f1a183ef5b9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a4011d41483171958bbf0b5124bde97c8\">end</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the list.  <a href=\"#a7ef3b21719ac6a28c50e5db67d9453ce\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__parser__s.html#a24a3f3138b44de1914a3e54dbe0aeff7\">top</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The top of the list.  <a href=\"#a834b2dd0efe6d80cdb1138d737605421\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#a0c10698207d727f9e5d9ced627d130ef\">aliases</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The alias data.  <a href=\"#a0c10698207d727f9e5d9ced627d130ef\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html#ac3dad5822f49d86cfddc2e5e415a158c\">document</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The currently parsed document.  <a href=\"#ac3dad5822f49d86cfddc2e5e415a158c\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The parser structure. </p>\n<p>All members are internal. Manage the structure using the <code>yaml_parser_</code> family of functions. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"a6c5c3488ff22c8a4d234ca8587fa1472\"></a><!-- doxytag: member=\"yaml_parser_s::error\" ref=\"a6c5c3488ff22c8a4d234ca8587fa1472\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#a6c5c3488ff22c8a4d234ca8587fa1472\">yaml_parser_s::error</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Error type. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3dd8a43294cd420a433595a7a7d6e73d\"></a><!-- doxytag: member=\"yaml_parser_s::problem\" ref=\"a3dd8a43294cd420a433595a7a7d6e73d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* <a class=\"el\" href=\"structyaml__parser__s.html#a3dd8a43294cd420a433595a7a7d6e73d\">yaml_parser_s::problem</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Error description. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae2d62a2ad45671c6dd89e18fb7c1c5bd\"></a><!-- doxytag: member=\"yaml_parser_s::problem_offset\" ref=\"ae2d62a2ad45671c6dd89e18fb7c1c5bd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__parser__s.html#ae2d62a2ad45671c6dd89e18fb7c1c5bd\">yaml_parser_s::problem_offset</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The byte about which the problem occured. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8694691b20824f6595873b728cb3bc0f\"></a><!-- doxytag: member=\"yaml_parser_s::problem_value\" ref=\"a8694691b20824f6595873b728cb3bc0f\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__parser__s.html#a8694691b20824f6595873b728cb3bc0f\">yaml_parser_s::problem_value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The problematic value (<code>-1</code> is none). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a595b5412d39a4a9e441e5ad34fb059d9\"></a><!-- doxytag: member=\"yaml_parser_s::problem_mark\" ref=\"a595b5412d39a4a9e441e5ad34fb059d9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#a595b5412d39a4a9e441e5ad34fb059d9\">yaml_parser_s::problem_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The problem position. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6779b67a23bbf7c401e4257d5875ae6b\"></a><!-- doxytag: member=\"yaml_parser_s::context\" ref=\"a6779b67a23bbf7c401e4257d5875ae6b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const char* <a class=\"el\" href=\"structyaml__parser__s.html#a6779b67a23bbf7c401e4257d5875ae6b\">yaml_parser_s::context</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The error context. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ace259eec6e570f94b98b252e1a632e88\"></a><!-- doxytag: member=\"yaml_parser_s::context_mark\" ref=\"ace259eec6e570f94b98b252e1a632e88\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#ace259eec6e570f94b98b252e1a632e88\">yaml_parser_s::context_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The context position. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8c3af47a7a0750d437cba34699fcad30\"></a><!-- doxytag: member=\"yaml_parser_s::read_handler\" ref=\"a8c3af47a7a0750d437cba34699fcad30\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8c3af47a7a0750d437cba34699fcad30\">yaml_parser_s::read_handler</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Read handler. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a11f265cd495e814c8ee7d3dd78ff2ca9\"></a><!-- doxytag: member=\"yaml_parser_s::read_handler_data\" ref=\"a11f265cd495e814c8ee7d3dd78ff2ca9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">void* <a class=\"el\" href=\"structyaml__parser__s.html#a11f265cd495e814c8ee7d3dd78ff2ca9\">yaml_parser_s::read_handler_data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>A pointer for passing to the read handler. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8cdb2fed4bb17b1d62d29fa06c53fef6\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"a8cdb2fed4bb17b1d62d29fa06c53fef6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The string start pointer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aad74ffeb7f2eef0a12e34b0aac263ff3\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"aad74ffeb7f2eef0a12e34b0aac263ff3\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The string end pointer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3406d2ba7e969c09344d4ced8c855007\"></a><!-- doxytag: member=\"yaml_parser_s::current\" ref=\"a3406d2ba7e969c09344d4ced8c855007\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">const unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#a3406d2ba7e969c09344d4ced8c855007\">yaml_parser_s::current</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The string current position. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a44fa7ca68030680244f3743ce5e35702\"></a><!-- doxytag: member=\"yaml_parser_s::string\" ref=\"a44fa7ca68030680244f3743ce5e35702\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a44fa7ca68030680244f3743ce5e35702\">yaml_parser_s::string</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>String input data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae69c2974e3c4c37e941a0e1971be15a9\"></a><!-- doxytag: member=\"yaml_parser_s::file\" ref=\"ae69c2974e3c4c37e941a0e1971be15a9\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">FILE* <a class=\"el\" href=\"structyaml__parser__s.html#ae69c2974e3c4c37e941a0e1971be15a9\">yaml_parser_s::file</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>File input data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae800ef7fd42ad8bcbb69b116da3a7f53\"></a><!-- doxytag: member=\"yaml_parser_s::input\" ref=\"ae800ef7fd42ad8bcbb69b116da3a7f53\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">union { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#ae800ef7fd42ad8bcbb69b116da3a7f53\">yaml_parser_s::input</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>Standard (string or file) input data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5cdddcbd18566acc760a660a88f93ffd\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"a5cdddcbd18566acc760a660a88f93ffd\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6ff1f802eb95bc45f13e8e73ec009828\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"a6ff1f802eb95bc45f13e8e73ec009828\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a8199466e3578374b3f984b6c0c4e2ae4\"></a><!-- doxytag: member=\"yaml_parser_s::pointer\" ref=\"a8199466e3578374b3f984b6c0c4e2ae4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">yaml_parser_s::pointer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aea4d8da24939825b2fadd368a71ec7de\"></a><!-- doxytag: member=\"yaml_parser_s::last\" ref=\"aea4d8da24939825b2fadd368a71ec7de\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">yaml_parser_s::last</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The last filled position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"afc56b6252bd75ec87edec5c80a5c733e\"></a><!-- doxytag: member=\"yaml_parser_s::buffer\" ref=\"afc56b6252bd75ec87edec5c80a5c733e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#afc56b6252bd75ec87edec5c80a5c733e\">yaml_parser_s::buffer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The working buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6c08a94c21dfe1611c0d89aef0d3c46d\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"a6c08a94c21dfe1611c0d89aef0d3c46d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa768a9c29ae2c3015fdb84ea313844e2\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"aa768a9c29ae2c3015fdb84ea313844e2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abea626790abfbcaeeb72a3772dc69e43\"></a><!-- doxytag: member=\"yaml_parser_s::pointer\" ref=\"abea626790abfbcaeeb72a3772dc69e43\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#a8199466e3578374b3f984b6c0c4e2ae4\">yaml_parser_s::pointer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3ad1ccaf979092ece82bc981c5a22fb0\"></a><!-- doxytag: member=\"yaml_parser_s::last\" ref=\"a3ad1ccaf979092ece82bc981c5a22fb0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">unsigned char* <a class=\"el\" href=\"structyaml__parser__s.html#aea4d8da24939825b2fadd368a71ec7de\">yaml_parser_s::last</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The last filled position of the buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae3e8481ceabdbf6796a7dc6265f740ac\"></a><!-- doxytag: member=\"yaml_parser_s::raw_buffer\" ref=\"ae3e8481ceabdbf6796a7dc6265f740ac\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#ae3e8481ceabdbf6796a7dc6265f740ac\">yaml_parser_s::raw_buffer</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The raw buffer. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4f062e9d1fb1082bbf3996e46214905a\"></a><!-- doxytag: member=\"yaml_parser_s::encoding\" ref=\"a4f062e9d1fb1082bbf3996e46214905a\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#a4f062e9d1fb1082bbf3996e46214905a\">yaml_parser_s::encoding</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The input encoding. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a04a7ba684ce49b2300c236c561439b13\"></a><!-- doxytag: member=\"yaml_parser_s::offset\" ref=\"a04a7ba684ce49b2300c236c561439b13\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__parser__s.html#a04a7ba684ce49b2300c236c561439b13\">yaml_parser_s::offset</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The offset of the current position (in bytes). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aaeeb58dc348e6e6f89d6a7c8fea8f734\"></a><!-- doxytag: member=\"yaml_parser_s::mark\" ref=\"aaeeb58dc348e6e6f89d6a7c8fea8f734\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#aaeeb58dc348e6e6f89d6a7c8fea8f734\">yaml_parser_s::mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The mark of the current position. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6a4bbbd3f58533e0969b7218c1e73fd4\"></a><!-- doxytag: member=\"yaml_parser_s::flow_level\" ref=\"a6a4bbbd3f58533e0969b7218c1e73fd4\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__parser__s.html#a6a4bbbd3f58533e0969b7218c1e73fd4\">yaml_parser_s::flow_level</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of unclosed '[' and '{' indicators. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a5f33f5c8f19c1c124cba4857ab2a05c7\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"a5f33f5c8f19c1c124cba4857ab2a05c7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the tokens queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a41594b6495f4d31edb977cafb8cbaf78\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"a41594b6495f4d31edb977cafb8cbaf78\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the tokens queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa1c7a1248ca22159a3e60ba45b386507\"></a><!-- doxytag: member=\"yaml_parser_s::head\" ref=\"aa1c7a1248ca22159a3e60ba45b386507\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aa1c7a1248ca22159a3e60ba45b386507\">yaml_parser_s::head</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The head of the tokens queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a22ad26583d8d1264e982188358aa79b6\"></a><!-- doxytag: member=\"yaml_parser_s::tail\" ref=\"a22ad26583d8d1264e982188358aa79b6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a22ad26583d8d1264e982188358aa79b6\">yaml_parser_s::tail</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tail of the tokens queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a96d39b8333411d741ee1c13aa4141682\"></a><!-- doxytag: member=\"yaml_parser_s::tokens\" ref=\"a96d39b8333411d741ee1c13aa4141682\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a96d39b8333411d741ee1c13aa4141682\">yaml_parser_s::tokens</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tokens queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a7358e72ad071fec3185a833a3a245690\"></a><!-- doxytag: member=\"yaml_parser_s::tokens_parsed\" ref=\"a7358e72ad071fec3185a833a3a245690\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__parser__s.html#a7358e72ad071fec3185a833a3a245690\">yaml_parser_s::tokens_parsed</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of tokens fetched from the queue. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab7208590a6852001ff8e4343a97b0c24\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"ab7208590a6852001ff8e4343a97b0c24\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a6d8295bd62c7bb7be9486a1b4d71e736\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"a6d8295bd62c7bb7be9486a1b4d71e736\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9f1f879ba84bc51fa8feb1f47190aa23\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"a9f1f879ba84bc51fa8feb1f47190aa23\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a2e29feac36a89f644d9640d44df62b74\"></a><!-- doxytag: member=\"yaml_parser_s::indents\" ref=\"a2e29feac36a89f644d9640d44df62b74\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a2e29feac36a89f644d9640d44df62b74\">yaml_parser_s::indents</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The indentation levels stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abad00703b649df32ee0d7b00b2f10403\"></a><!-- doxytag: member=\"yaml_parser_s::indent\" ref=\"abad00703b649df32ee0d7b00b2f10403\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__parser__s.html#abad00703b649df32ee0d7b00b2f10403\">yaml_parser_s::indent</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current indentation level. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac311a6d962e0f67dd11759b8999630c6\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"ac311a6d962e0f67dd11759b8999630c6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae8416ffcb48c78a575ee21872d5aa698\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"ae8416ffcb48c78a575ee21872d5aa698\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ae610673669f06d46146198a346796276\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"ae610673669f06d46146198a346796276\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad5ce7de476c58fb6e1fdabbcc1c51659\"></a><!-- doxytag: member=\"yaml_parser_s::simple_keys\" ref=\"ad5ce7de476c58fb6e1fdabbcc1c51659\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#ad5ce7de476c58fb6e1fdabbcc1c51659\">yaml_parser_s::simple_keys</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of simple keys. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"adfdc33f6f53dce4bee87f11821d879b7\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"adfdc33f6f53dce4bee87f11821d879b7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a211a0aedc964ba8cd07cb7875faa464b\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"a211a0aedc964ba8cd07cb7875faa464b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"af3eecdcdeeb183d16e4219749620df0c\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"af3eecdcdeeb183d16e4219749620df0c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a57aa3c5fbfcaed8c17e046f0778c92bf\"></a><!-- doxytag: member=\"yaml_parser_s::states\" ref=\"a57aa3c5fbfcaed8c17e046f0778c92bf\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a57aa3c5fbfcaed8c17e046f0778c92bf\">yaml_parser_s::states</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The parser states stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a069d39cdf587ac2188e69d8fb018be64\"></a><!-- doxytag: member=\"yaml_parser_s::state\" ref=\"a069d39cdf587ac2188e69d8fb018be64\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a> <a class=\"el\" href=\"structyaml__parser__s.html#a069d39cdf587ac2188e69d8fb018be64\">yaml_parser_s::state</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The current parser state. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab5a3789882819f2fd69f2cd9deaac8f6\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"ab5a3789882819f2fd69f2cd9deaac8f6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aad019da255ea73adf31d4b1aeac86bb2\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"aad019da255ea73adf31d4b1aeac86bb2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab2678112fd2eaa8f588f2d6217aabc9d\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"ab2678112fd2eaa8f588f2d6217aabc9d\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the stack. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad78837ae36e35d523e02c43d1ae3f30e\"></a><!-- doxytag: member=\"yaml_parser_s::marks\" ref=\"ad78837ae36e35d523e02c43d1ae3f30e\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#ad78837ae36e35d523e02c43d1ae3f30e\">yaml_parser_s::marks</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stack of marks. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a3614f6d6e673e8177e4555c9ecf830fb\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"a3614f6d6e673e8177e4555c9ecf830fb\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa7fdc1ff8342636119934ac824a2ecc8\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"aa7fdc1ff8342636119934ac824a2ecc8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a490eddbfcc27787e47de631a3d2e09a8\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"a490eddbfcc27787e47de631a3d2e09a8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a9bdfc1888d4e30ffb43146377d44fba0\"></a><!-- doxytag: member=\"yaml_parser_s::tag_directives\" ref=\"a9bdfc1888d4e30ffb43146377d44fba0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a9bdfc1888d4e30ffb43146377d44fba0\">yaml_parser_s::tag_directives</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The list of TAG directives. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab9eddd3a112c3a4547bf87f6936aba94\"></a><!-- doxytag: member=\"yaml_parser_s::start\" ref=\"ab9eddd3a112c3a4547bf87f6936aba94\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a8cdb2fed4bb17b1d62d29fa06c53fef6\">yaml_parser_s::start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a4011d41483171958bbf0b5124bde97c8\"></a><!-- doxytag: member=\"yaml_parser_s::end\" ref=\"a4011d41483171958bbf0b5124bde97c8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#aad74ffeb7f2eef0a12e34b0aac263ff3\">yaml_parser_s::end</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a24a3f3138b44de1914a3e54dbe0aeff7\"></a><!-- doxytag: member=\"yaml_parser_s::top\" ref=\"a24a3f3138b44de1914a3e54dbe0aeff7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#a9f1f879ba84bc51fa8feb1f47190aa23\">yaml_parser_s::top</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The top of the list. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a0c10698207d727f9e5d9ced627d130ef\"></a><!-- doxytag: member=\"yaml_parser_s::aliases\" ref=\"a0c10698207d727f9e5d9ced627d130ef\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__parser__s.html#a0c10698207d727f9e5d9ced627d130ef\">yaml_parser_s::aliases</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The alias data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ac3dad5822f49d86cfddc2e5e415a158c\"></a><!-- doxytag: member=\"yaml_parser_s::document\" ref=\"ac3dad5822f49d86cfddc2e5e415a158c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a>* <a class=\"el\" href=\"structyaml__parser__s.html#ac3dad5822f49d86cfddc2e5e415a158c\">yaml_parser_s::document</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The currently parsed document. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__simple__key__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_simple_key_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_simple_key_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__parser.html\">Parser Definitions</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_simple_key_s\" -->\n<p>This structure holds information about a potential simple key.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"aad311b0fa599db04657a5177ec331f07\"></a><!-- doxytag: member=\"yaml_simple_key_s::possible\" ref=\"aad311b0fa599db04657a5177ec331f07\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html#aad311b0fa599db04657a5177ec331f07\">possible</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is a simple key possible? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"acacccea26520e74c4c61f170fdcbb4c3\"></a><!-- doxytag: member=\"yaml_simple_key_s::required\" ref=\"acacccea26520e74c4c61f170fdcbb4c3\" args=\"\" -->\nint&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html#acacccea26520e74c4c61f170fdcbb4c3\">required</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Is a simple key required? <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">size_t&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html#ae098916893ad7415c5c041dd45d24a86\">token_number</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The number of the token.  <a href=\"#ae098916893ad7415c5c041dd45d24a86\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html#ad0f5dd11cbf2e4d6d81376511e2b6dfb\">mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The position mark.  <a href=\"#ad0f5dd11cbf2e4d6d81376511e2b6dfb\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>This structure holds information about a potential simple key. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"ae098916893ad7415c5c041dd45d24a86\"></a><!-- doxytag: member=\"yaml_simple_key_s::token_number\" ref=\"ae098916893ad7415c5c041dd45d24a86\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__simple__key__s.html#ae098916893ad7415c5c041dd45d24a86\">yaml_simple_key_s::token_number</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The number of the token. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ad0f5dd11cbf2e4d6d81376511e2b6dfb\"></a><!-- doxytag: member=\"yaml_simple_key_s::mark\" ref=\"ad0f5dd11cbf2e4d6d81376511e2b6dfb\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__simple__key__s.html#ad0f5dd11cbf2e4d6d81376511e2b6dfb\">yaml_simple_key_s::mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The position mark. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__tag__directive__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_tag_directive_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_tag_directive_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__basic.html\">Basic Types</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_tag_directive_s\" -->\n<p>The tag directive data.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__tag__directive__s.html#a9934c62f2b18fd087a95af25c7739490\">handle</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle.  <a href=\"#a9934c62f2b18fd087a95af25c7739490\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__tag__directive__s.html#a514850fefaafbe65b2322da8c193a896\">prefix</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag prefix.  <a href=\"#a514850fefaafbe65b2322da8c193a896\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The tag directive data. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"a9934c62f2b18fd087a95af25c7739490\"></a><!-- doxytag: member=\"yaml_tag_directive_s::handle\" ref=\"a9934c62f2b18fd087a95af25c7739490\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__tag__directive__s.html#a9934c62f2b18fd087a95af25c7739490\">yaml_tag_directive_s::handle</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag handle. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a514850fefaafbe65b2322da8c193a896\"></a><!-- doxytag: member=\"yaml_tag_directive_s::prefix\" ref=\"a514850fefaafbe65b2322da8c193a896\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__tag__directive__s.html#a514850fefaafbe65b2322da8c193a896\">yaml_tag_directive_s::prefix</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag prefix. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__token__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_token_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_token_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__tokens.html\">Tokens</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_token_s\" -->\n<p>The token structure.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml_token_type_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html#aa8aeb89e2e74f5e2f199484177d0ea14\">type</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token type.  <a href=\"#aa8aeb89e2e74f5e2f199484177d0ea14\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >union {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#aab75b9cb91438e0e1efe2522652cf478\">encoding</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream encoding.  <a href=\"#acf58af547ea8738fdacec6203bf36181\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#aab66b62f4507f4fd0e9d2b7548f588e6\">stream_start</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream start (for <code>YAML_STREAM_START_TOKEN</code>).  <a href=\"#adb58948fd65e0ea196efc9b86d45e3b4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The alias value.  <a href=\"#a0c1e109d2ef827b8ff3c6039f1ab5304\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a1f942353efa1972a38a0763afefabe0c\">alias</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The alias (for <code>YAML_ALIAS_TOKEN</code>).  <a href=\"#ab4bd38c29f849e26e58d917e22b802c4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor value.  <a href=\"#ad1f0eeb2d39e429a3aa58a945d3024e9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#acc0f6636995f5fe332604b74571e6cfa\">anchor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The anchor (for <code>YAML_ANCHOR_TOKEN</code>).  <a href=\"#a6dc7c18502384e0ee0b1e5b152e5a36e\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a01665687653c945a6666dd9debaecd65\">handle</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle.  <a href=\"#a5c3336fcd32c354305a2a03eb628ce9a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a61344c49b73da5821cb06cab4cbab505\">suffix</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag suffix.  <a href=\"#af361bdbfd57dfbd0fd8e913ec45bc31d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#ab281db5b7563c5489726768fe0fbaac7\">tag</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag (for <code>YAML_TAG_TOKEN</code>).  <a href=\"#a95c8695bfca2ebef6b09b2319fd9f85c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">value</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value.  <a href=\"#a6d5102b2d4c24ccfe2b31b5fd68c1c27\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a06e51daf74cf78103e00608c3c9132e2\">length</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The length of the scalar value.  <a href=\"#a2d7788630968cb11c8a23a741225fafb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a>&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a530a8c4d78feaf5496fb9f461674382b\">style</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar style.  <a href=\"#aa351d3a0dfa05dcb5f4fe32b2ec17ee8\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a35e3629351176dd91b38cbfc827a8b00\">scalar</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The scalar value (for <code>YAML_SCALAR_TOKEN</code>).  <a href=\"#a79006467d4e0499e9e40c90c372001fa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#aac2ed466afd0390872774238dfcd152c\">major</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The major version number.  <a href=\"#a3203d856f6a5009df37e4930069f1937\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a97b9f537b24e8413e9fddc6a4b183d30\">minor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The minor version number.  <a href=\"#aa7c8fc59e31a6687eaf21bb22f734f98\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a41b30a59ca22d1020d6af4cc7cc0da47\">version_directive</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive (for <code>YAML_VERSION_DIRECTIVE_TOKEN</code>).  <a href=\"#a25a5300107549a7b1ad7c32b69df26e4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;struct {</td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a01665687653c945a6666dd9debaecd65\">handle</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag handle.  <a href=\"#a6bfa655778494408d518fc3cbf89dd97\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#a561b3730b9999cfe1010e77aca49c5b8\">prefix</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag prefix.  <a href=\"#a0c67ae3b7638531ee9efc8bd102ac723\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<a class=\"el\" href=\"structyaml__token__s.html#aa8a1b9eeee539233e8461773894f4ea0\">tag_directive</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag directive (for <code>YAML_TAG_DIRECTIVE_TOKEN</code>).  <a href=\"#a677d9e84bc7535dc814556c4624c61db\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" valign=\"top\">}&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html#aedb5be9b6b8f5ef6c129575e84f63605\">data</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token data.  <a href=\"#aedb5be9b6b8f5ef6c129575e84f63605\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html#abdc5f4f2059c5a7bfe8e810b49a53980\">start_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The beginning of the token.  <a href=\"#abdc5f4f2059c5a7bfe8e810b49a53980\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html#a97f08b38dfb0a5be26ef8831864a5311\">end_mark</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The end of the token.  <a href=\"#a97f08b38dfb0a5be26ef8831864a5311\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The token structure. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"aa8aeb89e2e74f5e2f199484177d0ea14\"></a><!-- doxytag: member=\"yaml_token_s::type\" ref=\"aa8aeb89e2e74f5e2f199484177d0ea14\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml_token_type_t</a> <a class=\"el\" href=\"structyaml__token__s.html#aa8aeb89e2e74f5e2f199484177d0ea14\">yaml_token_s::type</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The token type. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aab75b9cb91438e0e1efe2522652cf478\"></a><!-- doxytag: member=\"yaml_token_s::encoding\" ref=\"aab75b9cb91438e0e1efe2522652cf478\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> <a class=\"el\" href=\"structyaml__token__s.html#aab75b9cb91438e0e1efe2522652cf478\">yaml_token_s::encoding</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream encoding. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aab66b62f4507f4fd0e9d2b7548f588e6\"></a><!-- doxytag: member=\"yaml_token_s::stream_start\" ref=\"aab66b62f4507f4fd0e9d2b7548f588e6\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#aab66b62f4507f4fd0e9d2b7548f588e6\">yaml_token_s::stream_start</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The stream start (for <code>YAML_STREAM_START_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a97ce52329d6093b63fba36817f8bd549\"></a><!-- doxytag: member=\"yaml_token_s::value\" ref=\"a97ce52329d6093b63fba36817f8bd549\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__token__s.html#a97ce52329d6093b63fba36817f8bd549\">yaml_token_s::value</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The alias value. </p>\n<p>The scalar value.</p>\n<p>The anchor value.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a1f942353efa1972a38a0763afefabe0c\"></a><!-- doxytag: member=\"yaml_token_s::alias\" ref=\"a1f942353efa1972a38a0763afefabe0c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#a1f942353efa1972a38a0763afefabe0c\">yaml_token_s::alias</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The alias (for <code>YAML_ALIAS_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"acc0f6636995f5fe332604b74571e6cfa\"></a><!-- doxytag: member=\"yaml_token_s::anchor\" ref=\"acc0f6636995f5fe332604b74571e6cfa\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#acc0f6636995f5fe332604b74571e6cfa\">yaml_token_s::anchor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The anchor (for <code>YAML_ANCHOR_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a01665687653c945a6666dd9debaecd65\"></a><!-- doxytag: member=\"yaml_token_s::handle\" ref=\"a01665687653c945a6666dd9debaecd65\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__token__s.html#a01665687653c945a6666dd9debaecd65\">yaml_token_s::handle</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag handle. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a61344c49b73da5821cb06cab4cbab505\"></a><!-- doxytag: member=\"yaml_token_s::suffix\" ref=\"a61344c49b73da5821cb06cab4cbab505\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__token__s.html#a61344c49b73da5821cb06cab4cbab505\">yaml_token_s::suffix</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag suffix. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ab281db5b7563c5489726768fe0fbaac7\"></a><!-- doxytag: member=\"yaml_token_s::tag\" ref=\"ab281db5b7563c5489726768fe0fbaac7\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#ab281db5b7563c5489726768fe0fbaac7\">yaml_token_s::tag</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag (for <code>YAML_TAG_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a06e51daf74cf78103e00608c3c9132e2\"></a><!-- doxytag: member=\"yaml_token_s::length\" ref=\"a06e51daf74cf78103e00608c3c9132e2\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">size_t <a class=\"el\" href=\"structyaml__token__s.html#a06e51daf74cf78103e00608c3c9132e2\">yaml_token_s::length</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The length of the scalar value. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a530a8c4d78feaf5496fb9f461674382b\"></a><!-- doxytag: member=\"yaml_token_s::style\" ref=\"a530a8c4d78feaf5496fb9f461674382b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> <a class=\"el\" href=\"structyaml__token__s.html#a530a8c4d78feaf5496fb9f461674382b\">yaml_token_s::style</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar style. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a35e3629351176dd91b38cbfc827a8b00\"></a><!-- doxytag: member=\"yaml_token_s::scalar\" ref=\"a35e3629351176dd91b38cbfc827a8b00\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#a35e3629351176dd91b38cbfc827a8b00\">yaml_token_s::scalar</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The scalar value (for <code>YAML_SCALAR_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aac2ed466afd0390872774238dfcd152c\"></a><!-- doxytag: member=\"yaml_token_s::major\" ref=\"aac2ed466afd0390872774238dfcd152c\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__token__s.html#aac2ed466afd0390872774238dfcd152c\">yaml_token_s::major</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The major version number. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a97b9f537b24e8413e9fddc6a4b183d30\"></a><!-- doxytag: member=\"yaml_token_s::minor\" ref=\"a97b9f537b24e8413e9fddc6a4b183d30\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__token__s.html#a97b9f537b24e8413e9fddc6a4b183d30\">yaml_token_s::minor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The minor version number. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a41b30a59ca22d1020d6af4cc7cc0da47\"></a><!-- doxytag: member=\"yaml_token_s::version_directive\" ref=\"a41b30a59ca22d1020d6af4cc7cc0da47\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#a41b30a59ca22d1020d6af4cc7cc0da47\">yaml_token_s::version_directive</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The version directive (for <code>YAML_VERSION_DIRECTIVE_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a561b3730b9999cfe1010e77aca49c5b8\"></a><!-- doxytag: member=\"yaml_token_s::prefix\" ref=\"a561b3730b9999cfe1010e77aca49c5b8\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a>* <a class=\"el\" href=\"structyaml__token__s.html#a561b3730b9999cfe1010e77aca49c5b8\">yaml_token_s::prefix</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag prefix. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aa8a1b9eeee539233e8461773894f4ea0\"></a><!-- doxytag: member=\"yaml_token_s::tag_directive\" ref=\"aa8a1b9eeee539233e8461773894f4ea0\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">struct { ... }   <a class=\"el\" href=\"structyaml__token__s.html#aa8a1b9eeee539233e8461773894f4ea0\">yaml_token_s::tag_directive</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The tag directive (for <code>YAML_TAG_DIRECTIVE_TOKEN</code>). </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"aedb5be9b6b8f5ef6c129575e84f63605\"></a><!-- doxytag: member=\"yaml_token_s::data\" ref=\"aedb5be9b6b8f5ef6c129575e84f63605\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">union { ... }   <a class=\"el\" href=\"structyaml__token__s.html#aedb5be9b6b8f5ef6c129575e84f63605\">yaml_token_s::data</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The token data. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"abdc5f4f2059c5a7bfe8e810b49a53980\"></a><!-- doxytag: member=\"yaml_token_s::start_mark\" ref=\"abdc5f4f2059c5a7bfe8e810b49a53980\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__token__s.html#abdc5f4f2059c5a7bfe8e810b49a53980\">yaml_token_s::start_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The beginning of the token. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a97f08b38dfb0a5be26ef8831864a5311\"></a><!-- doxytag: member=\"yaml_token_s::end_mark\" ref=\"a97f08b38dfb0a5be26ef8831864a5311\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_t</a> <a class=\"el\" href=\"structyaml__token__s.html#a97f08b38dfb0a5be26ef8831864a5311\">yaml_token_s::end_mark</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The end of the token. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/structyaml__version__directive__s.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml_version_directive_s Struct Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li><a href=\"functions.html\"><span>Data&nbsp;Fields</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#pub-attribs\">Data Fields</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml_version_directive_s Struct Reference<br/>\n<small>\n[<a class=\"el\" href=\"group__basic.html\">Basic Types</a>]</small>\n</h1>  </div>\n</div>\n<div class=\"contents\">\n<!-- doxytag: class=\"yaml_version_directive_s\" -->\n<p>The version directive data.  \n<a href=\"#_details\">More...</a></p>\n\n<p><code>#include &lt;yaml.h&gt;</code></p>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"pub-attribs\"></a>\nData Fields</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__version__directive__s.html#ad27326ff94b7772027c3009d1dd5e52b\">major</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The major version number.  <a href=\"#ad27326ff94b7772027c3009d1dd5e52b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__version__directive__s.html#a89f074113501e6e150503f34b046dbd1\">minor</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The minor version number.  <a href=\"#a89f074113501e6e150503f34b046dbd1\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>The version directive data. </p>\n<hr/><h2>Field Documentation</h2>\n<a class=\"anchor\" id=\"ad27326ff94b7772027c3009d1dd5e52b\"></a><!-- doxytag: member=\"yaml_version_directive_s::major\" ref=\"ad27326ff94b7772027c3009d1dd5e52b\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__version__directive__s.html#ad27326ff94b7772027c3009d1dd5e52b\">yaml_version_directive_s::major</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The major version number. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"a89f074113501e6e150503f34b046dbd1\"></a><!-- doxytag: member=\"yaml_version_directive_s::minor\" ref=\"a89f074113501e6e150503f34b046dbd1\" args=\"\" -->\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">int <a class=\"el\" href=\"structyaml__version__directive__s.html#a89f074113501e6e150503f34b046dbd1\">yaml_version_directive_s::minor</a></td>\n        </tr>\n      </table>\n</div>\n<div class=\"memdoc\">\n\n<p>The minor version number. </p>\n\n</div>\n</div>\n<hr/>The documentation for this struct was generated from the following file:<ul>\n<li><a class=\"el\" href=\"yaml_8h.html\">yaml.h</a></li>\n</ul>\n</div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:01 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/doc/html/yaml_8h.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<title>yaml: yaml.h File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\"/>\n</head>\n<body>\n<!-- Generated by Doxygen 1.7.1 -->\n<div class=\"navigation\" id=\"top\">\n  <div class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&nbsp;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"annotated.html\"><span>Data&nbsp;Structures</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n    </ul>\n  </div>\n  <div class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&nbsp;List</span></a></li>\n      <li><a href=\"globals.html\"><span>Globals</span></a></li>\n    </ul>\n  </div>\n</div>\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#nested-classes\">Data Structures</a> &#124;\n<a href=\"#define-members\">Defines</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#enum-members\">Enumerations</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<h1>yaml.h File Reference</h1>  </div>\n</div>\n<div class=\"contents\">\n\n<p>Public interface for libyaml.  \n<a href=\"#_details\">More...</a></p>\n<code>#include &lt;stdlib.h&gt;</code><br/>\n<code>#include &lt;stdio.h&gt;</code><br/>\n<code>#include &lt;string.h&gt;</code><br/>\n<table class=\"memberdecls\">\n<tr><td colspan=\"2\"><h2><a name=\"nested-classes\"></a>\nData Structures</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive data.  <a href=\"structyaml__version__directive__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag directive data.  <a href=\"structyaml__tag__directive__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The pointer position.  <a href=\"structyaml__mark__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token structure.  <a href=\"structyaml__token__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event structure.  <a href=\"structyaml__event__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a mapping node.  <a href=\"structyaml__node__pair__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The node structure.  <a href=\"structyaml__node__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document structure.  <a href=\"structyaml__document__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds information about a potential simple key.  <a href=\"structyaml__simple__key__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds aliases data.  <a href=\"structyaml__alias__data__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The parser structure.  <a href=\"structyaml__parser__s.html#_details\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">struct &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter structure.  <a href=\"structyaml__emitter__s.html#_details\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"define-members\"></a>\nDefines</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__export.html#ga0791fd3e1d85ed53711b1feaae131f93\">YAML_DECLARE</a>(type)&nbsp;&nbsp;&nbsp;type</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The public API declaration.  <a href=\"group__export.html#ga0791fd3e1d85ed53711b1feaae131f93\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gadfa882b6e42a3a993d12392d55260b00\">YAML_NULL_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:null&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!null</code> with the only possible value: <code>null</code>.  <a href=\"group__nodes.html#gadfa882b6e42a3a993d12392d55260b00\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga312629a1f51e91b136352db988d4d771\">YAML_BOOL_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:bool&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!bool</code> with the values: <code>true</code> and <code>falce</code>.  <a href=\"group__nodes.html#ga312629a1f51e91b136352db988d4d771\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gac5dbc6d1f556663edf8db88d6113e931\">YAML_STR_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:str&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!str</code> for string values.  <a href=\"group__nodes.html#gac5dbc6d1f556663edf8db88d6113e931\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga83263cdb4ffa6ad2f7d9a87281979ff5\">YAML_INT_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:int&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!int</code> for integer values.  <a href=\"group__nodes.html#ga83263cdb4ffa6ad2f7d9a87281979ff5\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga6ab2ec71fc47cb24f1003b9acdb92843\">YAML_FLOAT_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:float&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!float</code> for float values.  <a href=\"group__nodes.html#ga6ab2ec71fc47cb24f1003b9acdb92843\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga3e27cca7191234f2e8c95eaf3bc99a73\">YAML_TIMESTAMP_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:timestamp&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!timestamp</code> for date and time values.  <a href=\"group__nodes.html#ga3e27cca7191234f2e8c95eaf3bc99a73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaa8284b30f9c9e3f10f6a69c9b882f417\">YAML_SEQ_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:seq&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!seq</code> is used to denote sequences.  <a href=\"group__nodes.html#gaa8284b30f9c9e3f10f6a69c9b882f417\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga22ae99cf3ac014dd76873268fd068c12\">YAML_MAP_TAG</a>&nbsp;&nbsp;&nbsp;&quot;tag:yaml.org,2002:map&quot;</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag <code>!!map</code> is used to denote mapping.  <a href=\"group__nodes.html#ga22ae99cf3ac014dd76873268fd068c12\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf6b0c4e819b8f6915515a4f70065aaaa\">YAML_DEFAULT_SCALAR_TAG</a>&nbsp;&nbsp;&nbsp;YAML_STR_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default scalar tag is <code>!!str</code>.  <a href=\"group__nodes.html#gaf6b0c4e819b8f6915515a4f70065aaaa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf195b67002518702e27746d6b4da6124\">YAML_DEFAULT_SEQUENCE_TAG</a>&nbsp;&nbsp;&nbsp;YAML_SEQ_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default sequence tag is <code>!!seq</code>.  <a href=\"group__nodes.html#gaf195b67002518702e27746d6b4da6124\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">#define&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gaf7b1f8f0ce5665794510cd3841802a5f\">YAML_DEFAULT_MAPPING_TAG</a>&nbsp;&nbsp;&nbsp;YAML_MAP_TAG</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The default mapping tag is <code>!!map</code>.  <a href=\"group__nodes.html#gaf7b1f8f0ce5665794510cd3841802a5f\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef unsigned char&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The character type (UTF-8 octet).  <a href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <br class=\"typebreak\"/>\n<a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2fc55608333fbe6df17cf891be709b72\">yaml_version_directive_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The version directive data.  <a href=\"group__basic.html#ga2fc55608333fbe6df17cf891be709b72\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga0b4bc4871b0c9104e32d40d5f3803674\">yaml_tag_directive_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The tag directive data.  <a href=\"group__basic.html#ga0b4bc4871b0c9104e32d40d5f3803674\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The stream encoding.  <a href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Line break types.  <a href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\">yaml_error_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Many bad things could happen with the parser and emitter.  <a href=\"group__basic.html#ga1a449f0c1b023e2ef1a596093c018e73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__mark__s.html\">yaml_mark_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga232eacba89691b841ba941338a302bfd\">yaml_mark_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The pointer position.  <a href=\"group__basic.html#ga232eacba89691b841ba941338a302bfd\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scalar styles.  <a href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Sequence styles.  <a href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Mapping styles.  <a href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\">yaml_token_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Token types.  <a href=\"group__tokens.html#gaba51dda022dced02f8df2224ab7993f7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#ga1ed3dc460e62aee8270c5d63d5734bbb\">yaml_token_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The token structure.  <a href=\"group__tokens.html#ga1ed3dc460e62aee8270c5d63d5734bbb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\">yaml_event_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Event types.  <a href=\"group__events.html#ga8934661be36bd7c9d17a8af69eff89a1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga3b392d9716c4920cabefdd29e78dd542\">yaml_event_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The event structure.  <a href=\"group__events.html#ga3b392d9716c4920cabefdd29e78dd542\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\">yaml_node_type_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Node types.  <a href=\"group__nodes.html#gabe020d2fc42d3e896549e9f97da622d2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga9eaaa233b120b9d9db47de93c294c40f\">yaml_node_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The forward definition of a document node structure.  <a href=\"group__nodes.html#ga9eaaa233b120b9d9db47de93c294c40f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\">yaml_node_item_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a sequence node.  <a href=\"group__nodes.html#ga7cc3581582e778b00c04e99cd3656860\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__node__pair__s.html\">yaml_node_pair_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga90f1c8b83c5c38dc4016afc1cc2050c4\">yaml_node_pair_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">An element of a mapping node.  <a href=\"group__nodes.html#ga90f1c8b83c5c38dc4016afc1cc2050c4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gad94e064e95baeb22e4f7acc7804e8479\">yaml_document_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The document structure.  <a href=\"group__nodes.html#gad94e064e95baeb22e4f7acc7804e8479\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> (void *data, unsigned char *buffer, size_t size, size_t *size_read)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The prototype of a read handler.  <a href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5570fbb7ab7c8332cd666f3a9c26591\"></a><!-- doxytag: member=\"yaml.h::yaml_simple_key_t\" ref=\"gae5570fbb7ab7c8332cd666f3a9c26591\" args=\"\" -->\ntypedef struct <a class=\"el\" href=\"structyaml__simple__key__s.html\">yaml_simple_key_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gae5570fbb7ab7c8332cd666f3a9c26591\">yaml_simple_key_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds information about a potential simple key. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52b56d3e3cee0f9ba460978802a8c83b\"></a><!-- doxytag: member=\"yaml.h::yaml_parser_state_t\" ref=\"ga52b56d3e3cee0f9ba460978802a8c83b\" args=\"\" -->\ntypedef enum <a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml_parser_state_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga52b56d3e3cee0f9ba460978802a8c83b\">yaml_parser_state_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The states of the parser. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1434228b82f5f90d3c8ccda816e9ca9d\"></a><!-- doxytag: member=\"yaml.h::yaml_alias_data_t\" ref=\"ga1434228b82f5f90d3c8ccda816e9ca9d\" args=\"\" -->\ntypedef struct <a class=\"el\" href=\"structyaml__alias__data__s.html\">yaml_alias_data_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga1434228b82f5f90d3c8ccda816e9ca9d\">yaml_alias_data_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">This structure holds aliases data. <br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gafdc6319cb28a8b8034542b29be85b0c4\">yaml_parser_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The parser structure.  <a href=\"group__parser.html#gafdc6319cb28a8b8034542b29be85b0c4\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> (void *data, unsigned char *buffer, size_t size)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The prototype of a write handler.  <a href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef enum <a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\">yaml_emitter_state_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter states.  <a href=\"group__emitter.html#ga0889461fa3efe8eee881aef48a4ba6b2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef struct <a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_s</a>&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga4ce3e054f0016c49d9e8c36d359e710b\">yaml_emitter_t</a></td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">The emitter structure.  <a href=\"group__emitter.html#ga4ce3e054f0016c49d9e8c36d359e710b\"></a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"enum-members\"></a>\nEnumerations</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">yaml_encoding_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ab61d2a81b8e698e642ce6ad69612fa7f\">YAML_ANY_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a5bacbc5e68fc0c25baedf87e3be25a28\">YAML_UTF8_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9ac68c68725ec1f6492e59fd388fd123c9\">YAML_UTF16LE_ENCODING</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#ggab88ee52b5d722e644c1cb4d1afcccdd9a9f4fcb99a71d3416239f343f1334780b\">YAML_UTF16BE_ENCODING</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The stream encoding. </p>\n <a href=\"group__basic.html#gab88ee52b5d722e644c1cb4d1afcccdd9\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">yaml_break_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea052bd56adef565c33a86fcc05b49513f\">YAML_ANY_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea116a98ba4ed0bacfdf098a7d5beeb9d4\">YAML_CR_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea23bf395462dcd045e22303be6f3f7781\">YAML_LN_BREAK</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga912ad8c893126133fab5e4231db3017ea15f8daa406870ebfe82b85781c2468f3\">YAML_CRLN_BREAK</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Line break types. </p>\n <a href=\"group__basic.html#ga912ad8c893126133fab5e4231db3017e\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">yaml_error_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a24cadfb5364769959ad8647649d1e86f\">YAML_NO_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a57be0407d1f344206d9673c9571bde53\">YAML_MEMORY_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a9216f41a453dc36b090cdc1ca9f89637\">YAML_READER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a6f8d865d9a25b385146660d8260d3d6f\">YAML_SCANNER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a0e12c79d8586bc61470e3088b666078b\">YAML_PARSER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a43d6eb640e50a1b1ec843cc54ab15f2b\">YAML_COMPOSER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01ae80fef003be3d7e72ed7acae7984004c\">YAML_WRITER_ERROR</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__basic.html#gga2efbcde2e82238117982b789c5a8ea01a8ec99a26382dd2853a5550027f6e9db1\">YAML_EMITTER_ERROR</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Many bad things could happen with the parser and emitter. </p>\n <a href=\"group__basic.html#ga2efbcde2e82238117982b789c5a8ea01\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">yaml_scalar_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aead38b3e6846302ee032927267c34ae0\">YAML_ANY_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0afd62a761a36cf56e1f0414fb391db0e6\">YAML_PLAIN_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a68a2af452008e3af3f6de14318dfb2c6\">YAML_SINGLE_QUOTED_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0af6fdfd14690361f4937d67d1f0f011d3\">YAML_DOUBLE_QUOTED_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0a542d1ac1bf5c3434df3d2a757d0a8ca0\">YAML_LITERAL_SCALAR_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga435ae8886b70c16830d853b6c566e2e0aa67c3de37dc127986b08bdbe07cee607\">YAML_FOLDED_SCALAR_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Scalar styles. </p>\n <a href=\"group__styles.html#ga435ae8886b70c16830d853b6c566e2e0\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">yaml_sequence_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a5a10d6f70339876b76e5a002dd16212f\">YAML_ANY_SEQUENCE_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0a65f99099ef4ecdcf99bbdd798b5dcbb5\">YAML_BLOCK_SEQUENCE_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga5079a4ab96e398371c60423abd88ccc0ae511554b654ebca464d1feec12501d80\">YAML_FLOW_SEQUENCE_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Sequence styles. </p>\n <a href=\"group__styles.html#ga5079a4ab96e398371c60423abd88ccc0\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">yaml_mapping_style_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fac580a83312204ea142c3d08a4954a74a\">YAML_ANY_MAPPING_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fad5e70fe97009c8247a45f4620f071874\">YAML_BLOCK_MAPPING_STYLE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__styles.html#gga1efef592e2e3df6f00432c04ef77d98fa4c5425077b0310cbf84e1d73e20b42d3\">YAML_FLOW_MAPPING_STYLE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Mapping styles. </p>\n <a href=\"group__styles.html#ga1efef592e2e3df6f00432c04ef77d98f\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">yaml_token_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda66c1b8eec0cc6402c0fb4b2d1b017f92\">YAML_NO_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf5f42f2d5025e5629034848d2e1db6c9\">YAML_STREAM_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda020a0a266ed7fc4902dd02750512dc19\">YAML_STREAM_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa15a96ec81c00c7db8f83628a89542e4\">YAML_VERSION_DIRECTIVE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaed517a61b868769e2bfced40678be414\">YAML_TAG_DIRECTIVE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdabcafcdb506886387f93cca734ddfd670\">YAML_DOCUMENT_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8d0908a82229f44d5ea92a2c380f4579\">YAML_DOCUMENT_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda4bfddc427da159168ee47267cbeea94f\">YAML_BLOCK_SEQUENCE_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda9a95db99bd99f7f9b4e1e879106297dc\">YAML_BLOCK_MAPPING_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda439948425097b4fc853f39f0de14a5ff\">YAML_BLOCK_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda862a2390be4abd59bb7bf55b18d9260c\">YAML_FLOW_SEQUENCE_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdab3496580bee30936f756e0102e98f331\">YAML_FLOW_SEQUENCE_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaff68a3f7c000c5294211eef8f4156100\">YAML_FLOW_MAPPING_START_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaad99bf47234572d9d0eeea7669d1e769\">YAML_FLOW_MAPPING_END_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaa9bdf1d6da41fcd4d356c7bcfa0227b4\">YAML_BLOCK_ENTRY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaf11ab5655350e4cf0559f78382daa93f\">YAML_FLOW_ENTRY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda94d701c1f5bb8a392bb45b7cbf4bc2a5\">YAML_KEY_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbdaac46e8a6a6e0614de322c7b53d785b4e\">YAML_VALUE_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda080c398f6fc31f9ab35c7cf94cf948c2\">YAML_ALIAS_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda7f0855938c5ccc4820b68ddd7985a5d0\">YAML_ANCHOR_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda8f02c514b72f29bd3c26b7c832d8152d\">YAML_TAG_TOKEN</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__tokens.html#ggaae955b10aa6b5f922de64873bf4ccdbda107a78f31dd9857d06e9ead7936ea51e\">YAML_SCALAR_TOKEN</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Token types. </p>\n <a href=\"group__tokens.html#gaae955b10aa6b5f922de64873bf4ccdbd\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">yaml_event_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caefda9f31823fe534f094f4241d5e5eac\">YAML_NO_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caa742e9970f14d1fe7ce4d178d79e8465\">YAML_STREAM_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca4a5e76ed540645102a13352af2503d3b\">YAML_STREAM_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577caf4ca2b0f538029cf054cdebd09d3d6d3\">YAML_DOCUMENT_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca355ec471f963827c96512e529676276f\">YAML_DOCUMENT_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8c3ce47705cfbd49a87a32bdbe544eb7\">YAML_ALIAS_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca8b16dc795bb228e33d647d1bdf683713\">YAML_SCALAR_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cad90ccd43e238221f542defa3c8eaf093\">YAML_SEQUENCE_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca2a8af98529275987d73eb307b6a92898\">YAML_SEQUENCE_END_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577ca0f6982f6d1c325ee71af518c2c66dae8\">YAML_MAPPING_START_EVENT</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__events.html#gga454fccebae859c188fe3e7fa3299577cadc3dc55f17056a657005fecfb80fbd30\">YAML_MAPPING_END_EVENT</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Event types. </p>\n <a href=\"group__events.html#ga454fccebae859c188fe3e7fa3299577c\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">yaml_node_type_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a0fa87c0e89c4d4136cb47165e6917739\">YAML_NO_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a413ec8ce6b728c9ace703d194b370a45\">YAML_SCALAR_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798a6c03b52f7ee737982eac5e4001faac15\">YAML_SEQUENCE_NODE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__nodes.html#gga0897d4b6bdd1b56c7a5fa0ff17b4f798ac1a08580e3a70973583fc85e3e097ee6\">YAML_MAPPING_NODE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>Node types. </p>\n <a href=\"group__nodes.html#ga0897d4b6bdd1b56c7a5fa0ff17b4f798\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">yaml_parser_state_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae7b52e16bf002db5cf2944596d8c880e\">YAML_PARSE_STREAM_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8255725d67d5bd3574fc7df4db1c6c84\">YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aa06d10f700d245caecfc6074a6c52fde\">YAML_PARSE_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae444c7652c8029b0ef80068eaaaa3d4d\">YAML_PARSE_DOCUMENT_CONTENT_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5aeef06d7f13fa4501146a5b9876c98239\">YAML_PARSE_DOCUMENT_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae1893c0835bacf05cdc21ed181fb75f1\">YAML_PARSE_BLOCK_NODE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5acbd390af0d3919fe0382d03c284ff3b5\">YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb321f9d18c5b208a71c04bbcbd1d01\">YAML_PARSE_FLOW_NODE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5bb5f95fc5f1a258ee8e9db0ed25b2d9\">YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a8a6cb1f12fe08eee7fc2fa854dbd5b1a\">YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5af7095f2141cf9887489e832f0ec61fbd\">YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5afebcb5bbd67d112d9ecfa633155f0644\">YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a2df81c86e90b874b415ecb19e72efe45\">YAML_PARSE_BLOCK_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5ae94acf5685fa1538b225413f154465c2\">YAML_PARSE_BLOCK_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3f54830989c12cc4a63494df792eeb08\">YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a0e50f3841eb0d37ad159e64c4a9a1171\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a563e11601cf3a1d2a3efc1feb1b696a3\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a9e5ebb4bee4541e7a7025689c7fc66eb\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a397fd87de9227c64e5308481930b5eeb\">YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a91ac4bbb6629e2b768a3305fb707b7cd\">YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a924f8eb891dc7527bf4db594a0b1bff8\">YAML_PARSE_FLOW_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a3ba351f6cfba029248ada2c0720246d4\">YAML_PARSE_FLOW_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a5a8ec0af5c3314c1ad5e0569b6a5d6d2\">YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__parser.html#ggad39c19e7b0df6f542ca97806535b57c5a51fd3d45693e2240251996def375a2a2\">YAML_PARSE_END_STATE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The states of the parser. </p>\n <a href=\"group__parser.html#gad39c19e7b0df6f542ca97806535b57c5\">More...</a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">enum &nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">yaml_emitter_state_e</a> { <br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa013a33dab710fe9a30ba014af27b81d\">YAML_EMIT_STREAM_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab1ae25188f02581a137f66c4b6e084ae\">YAML_EMIT_FIRST_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a678d8c3146f0b2c84e0fc537a9b1109f\">YAML_EMIT_DOCUMENT_START_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5ce3ed6155496a6fbd7384e310c58bec\">YAML_EMIT_DOCUMENT_CONTENT_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a100cad4538be033202da4bb85f8443d3\">YAML_EMIT_DOCUMENT_END_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a5a36fc535f3a5720fbb86712959e5654\">YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aded45f1dee80027d7b9c6ce061c08767\">YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ab811f3d642dacc7c413af2c32356f894\">YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721ababf835ee5cd4c6de2231e2a49e40626\">YAML_EMIT_FLOW_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aa6f687a6b57e727f0e7b7a2687ad7383\">YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721acb6dbcb535248b8fde779aeedc957b2e\">YAML_EMIT_FLOW_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a68af7c090c6d0187788e390341f0cc4d\">YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a8197c180c3cefee7b67304e17b52c5ff\">YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721aee36d46c1facecfd73fab73e3343226e\">YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a58495cae63b8c3d7c389b1281baeec05\">YAML_EMIT_BLOCK_MAPPING_KEY_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a4aa3c6bf2f2d976c47289c741d7a8704\">YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a7e0f7fac64fc64bb2bc9fe2ec93ca564\">YAML_EMIT_BLOCK_MAPPING_VALUE_STATE</a>, \n<br/>\n&nbsp;&nbsp;<a class=\"el\" href=\"group__emitter.html#gga387b79da11c3941e43a56947263aa721a2a0232912eaf4eeb06594ee6157dfbc0\">YAML_EMIT_END_STATE</a>\n<br/>\n }</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\"><p>The emitter states. </p>\n <a href=\"group__emitter.html#ga387b79da11c3941e43a56947263aa721\">More...</a><br/></td></tr>\n<tr><td colspan=\"2\"><h2><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">const char *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__version.html#gaf1ba5c1c34e809db5047d79a9fa85a73\">yaml_get_version_string</a> (void)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the library version as a string.  <a href=\"group__version.html#gaf1ba5c1c34e809db5047d79a9fa85a73\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__version.html#gaec764c91f3e181ae63d3d59b7980fe78\">yaml_get_version</a> (int *major, int *minor, int *patch)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the library version numbers.  <a href=\"group__version.html#gaec764c91f3e181ae63d3d59b7980fe78\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__tokens.html#ga3140131870e38e27f92a8fd286e5c004\">yaml_token_delete</a> (<a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *token)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free any memory allocated for a token object.  <a href=\"group__tokens.html#ga3140131870e38e27f92a8fd286e5c004\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga0650d255b23d9aae13c839f4ab3ec2ab\">yaml_stream_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the STREAM-START event.  <a href=\"group__events.html#ga0650d255b23d9aae13c839f4ab3ec2ab\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga84cf0c3ff01251c852c71624e64df9fe\">yaml_stream_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the STREAM-END event.  <a href=\"group__events.html#ga84cf0c3ff01251c852c71624e64df9fe\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga527e89302e1c969fbea5aa45664bf51c\">yaml_document_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *version_directive, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_start, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_end, int implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the DOCUMENT-START event.  <a href=\"group__events.html#ga527e89302e1c969fbea5aa45664bf51c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga8bae16548ee88f8a5ca15204f8c30344\">yaml_document_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, int implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create the DOCUMENT-END event.  <a href=\"group__events.html#ga8bae16548ee88f8a5ca15204f8c30344\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#gade4c15b75eb9a8035e04d4f0dd23f005\">yaml_alias_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create an ALIAS event.  <a href=\"group__events.html#gade4c15b75eb9a8035e04d4f0dd23f005\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#gafc60a1a437385e19e6fb3be075958c8c\">yaml_scalar_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *value, int length, int plain_implicit, int quoted_implicit, <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SCALAR event.  <a href=\"group__events.html#gafc60a1a437385e19e6fb3be075958c8c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga53aea428c768d7b131923d08c904b4eb\">yaml_sequence_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, int implicit, <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE-START event.  <a href=\"group__events.html#ga53aea428c768d7b131923d08c904b4eb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga99fdfa4b9d42b64d8171c9b22f334b1c\">yaml_sequence_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE-END event.  <a href=\"group__events.html#ga99fdfa4b9d42b64d8171c9b22f334b1c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga0603cf8d20f0b6dfc3be04b6360134aa\">yaml_mapping_start_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *anchor, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, int implicit, <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING-START event.  <a href=\"group__events.html#ga0603cf8d20f0b6dfc3be04b6360134aa\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga3afaf8b3aca2ec902a4e268f12adb0c2\">yaml_mapping_end_event_initialize</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING-END event.  <a href=\"group__events.html#ga3afaf8b3aca2ec902a4e268f12adb0c2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\">yaml_event_delete</a> (<a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Free any memory allocated for an event object.  <a href=\"group__events.html#ga5330d62ef52856aa53188137cb93a6a1\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\">yaml_document_initialize</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"structyaml__version__directive__s.html\">yaml_version_directive_t</a> *version_directive, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_start, <a class=\"el\" href=\"structyaml__tag__directive__s.html\">yaml_tag_directive_t</a> *tag_directives_end, int start_implicit, int end_implicit)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a YAML document.  <a href=\"group__nodes.html#ga62a485c96f3b7962436a0da5e6f3cc89\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\">yaml_document_delete</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Delete a YAML document and all its nodes.  <a href=\"group__nodes.html#ga2754b1544fb4e110e83fafbc708b0672\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#gafa1feabc9747dbded4dca24e27d3c21a\">yaml_document_get_node</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int index)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get a node of a YAML document.  <a href=\"group__nodes.html#gafa1feabc9747dbded4dca24e27d3c21a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"el\" href=\"structyaml__node__s.html\">yaml_node_t</a> *&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga40eeaa68fb2f3be34c4fe34e7597d324\">yaml_document_get_root_node</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Get the root of a YAML document node.  <a href=\"group__nodes.html#ga40eeaa68fb2f3be34c4fe34e7597d324\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga45dab8b983b58a005557d4b01f5057b0\">yaml_document_add_scalar</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *value, int length, <a class=\"el\" href=\"group__styles.html#ga3fa6405631e1afe5bd5c488a6c5e8065\">yaml_scalar_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SCALAR node and attach it to the document.  <a href=\"group__nodes.html#ga45dab8b983b58a005557d4b01f5057b0\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga83b2f7fdd9a439397a42016bddad7786\">yaml_document_add_sequence</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__styles.html#ga58a1123d271e56c72de6abf852ac4dc2\">yaml_sequence_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a SEQUENCE node and attach it to the document.  <a href=\"group__nodes.html#ga83b2f7fdd9a439397a42016bddad7786\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga45a9f8288704f99cd81dc5cb31329d34\">yaml_document_add_mapping</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, <a class=\"el\" href=\"group__basic.html#gaf8657e81f0b8b05d1a081001fc6cb8bd\">yaml_char_t</a> *tag, <a class=\"el\" href=\"group__styles.html#gab47523846a5c5960e07367a28ea9750a\">yaml_mapping_style_t</a> style)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Create a MAPPING node and attach it to the document.  <a href=\"group__nodes.html#ga45a9f8288704f99cd81dc5cb31329d34\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga16435917cd6c0261cd390fa8cf173b1b\">yaml_document_append_sequence_item</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int sequence, int item)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add an item to a SEQUENCE node.  <a href=\"group__nodes.html#ga16435917cd6c0261cd390fa8cf173b1b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__nodes.html#ga2db27002d8a9ae06b1729d0ee06553d2\">yaml_document_append_mapping_pair</a> (<a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document, int mapping, int key, int value)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Add a pair of a key and a value to a MAPPING node.  <a href=\"group__nodes.html#ga2db27002d8a9ae06b1729d0ee06553d2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gacc37ceeb5847e38a3fe24eb0c9b53965\">yaml_parser_initialize</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Initialize a parser.  <a href=\"group__parser.html#gacc37ceeb5847e38a3fe24eb0c9b53965\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\">yaml_parser_delete</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destroy a parser.  <a href=\"group__parser.html#gaa27150107c4667c1024ec0651e2ac26b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga08a94762bf5f4c61f72c1da0a407df0d\">yaml_parser_set_input_string</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, const unsigned char *input, size_t size)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a string input.  <a href=\"group__parser.html#ga08a94762bf5f4c61f72c1da0a407df0d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gac3f00f8beb2365b1e4569692d64696b6\">yaml_parser_set_input_file</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, FILE *file)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a file input.  <a href=\"group__parser.html#gac3f00f8beb2365b1e4569692d64696b6\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\">yaml_parser_set_input</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"group__parser.html#ga4982f7e4e001ddb47d2819f38f0cd9d6\">yaml_read_handler_t</a> *handler, void *data)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a generic input handler.  <a href=\"group__parser.html#gabc67581bfa771a3e787d907d6914b8d9\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga9565b64975570ed34612a19adf02ae6a\">yaml_parser_set_encoding</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the source encoding.  <a href=\"group__parser.html#ga9565b64975570ed34612a19adf02ae6a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\">yaml_parser_scan</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__token__s.html\">yaml_token_t</a> *token)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Scan the input stream and produce the next token.  <a href=\"group__parser.html#ga6c2144f131ebd600a075d4ba654540f7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\">yaml_parser_parse</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Parse the input stream and produce the next parsing event.  <a href=\"group__parser.html#ga559312fb137533d8b7e07f224fe0ec8f\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\">yaml_parser_load</a> (<a class=\"el\" href=\"structyaml__parser__s.html\">yaml_parser_t</a> *parser, <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Parse the input stream and produce the next YAML document.  <a href=\"group__parser.html#ga9ef7d6e9494766b5880c389bc431d138\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga83649205374285802fc27aa293ecd111\">yaml_emitter_initialize</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Initialize an emitter.  <a href=\"group__emitter.html#ga83649205374285802fc27aa293ecd111\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\">yaml_emitter_delete</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Destroy an emitter.  <a href=\"group__emitter.html#gad705212f3a5150e3f00075fd90bc8c3d\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga62725c0f616f634588374d1a4c0ed35a\">yaml_emitter_set_output_string</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, unsigned char *output, size_t size, size_t *size_written)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a string output.  <a href=\"group__emitter.html#ga62725c0f616f634588374d1a4c0ed35a\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaf7610c61b303bde9c701024c10ece024\">yaml_emitter_set_output_file</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, FILE *file)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a file output.  <a href=\"group__emitter.html#gaf7610c61b303bde9c701024c10ece024\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\">yaml_emitter_set_output</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__emitter.html#ga1669659aacbe631ad406c78fce1f5379\">yaml_write_handler_t</a> *handler, void *data)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set a generic output handler.  <a href=\"group__emitter.html#gac85a6a212ed7b469fb426a3451d15922\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gabc22888ec8bf942199acbf38f7a0b9bb\">yaml_emitter_set_encoding</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__basic.html#ga2170996d7e636397b5e6bc0c1b7df7c6\">yaml_encoding_t</a> encoding)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the output encoding.  <a href=\"group__emitter.html#gabc22888ec8bf942199acbf38f7a0b9bb\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga62713a8130e11d95cbefa95a2eb3ac4b\">yaml_emitter_set_canonical</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int canonical)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set if the output should be in the \"canonical\" format as in the YAML specification.  <a href=\"group__emitter.html#ga62713a8130e11d95cbefa95a2eb3ac4b\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga07eca3c344053a9028b4a84291cdf4d7\">yaml_emitter_set_indent</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int indent)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the intendation increment.  <a href=\"group__emitter.html#ga07eca3c344053a9028b4a84291cdf4d7\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa91ae0fa8af5ab67e64567e08f4458c2\">yaml_emitter_set_width</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int width)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the preferred line width.  <a href=\"group__emitter.html#gaa91ae0fa8af5ab67e64567e08f4458c2\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa59e7dcf24cb9b614c32af6c3e949fc3\">yaml_emitter_set_unicode</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, int unicode)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set if unescaped non-ASCII characters are allowed.  <a href=\"group__emitter.html#gaa59e7dcf24cb9b614c32af6c3e949fc3\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">void&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga04b5494f0b8244eec359579c31d5e20c\">yaml_emitter_set_break</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"group__basic.html#ga64d1365e1acd4deeab50d6b48e39cb6d\">yaml_break_t</a> line_break)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Set the preferred line break.  <a href=\"group__emitter.html#ga04b5494f0b8244eec359579c31d5e20c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga4d6c0f8e712797e2660e69479fdae433\">yaml_emitter_emit</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"structyaml__event__s.html\">yaml_event_t</a> *event)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Emit an event.  <a href=\"group__emitter.html#ga4d6c0f8e712797e2660e69479fdae433\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gae323c34e378040106f24c7b5ab834b16\">yaml_emitter_open</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Start a YAML stream.  <a href=\"group__emitter.html#gae323c34e378040106f24c7b5ab834b16\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gaa91442864679280985df14b2d96b8c42\">yaml_emitter_close</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Finish a YAML stream.  <a href=\"group__emitter.html#gaa91442864679280985df14b2d96b8c42\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\">yaml_emitter_dump</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter, <a class=\"el\" href=\"structyaml__document__s.html\">yaml_document_t</a> *document)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Emit a YAML document.  <a href=\"group__emitter.html#ga5f0306abe9bff373b5bc339913b3769c\"></a><br/></td></tr>\n<tr><td class=\"memItemLeft\" align=\"right\" valign=\"top\">int&nbsp;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"group__emitter.html#gacaf24456e2bf85bc5654cbd7d828055f\">yaml_emitter_flush</a> (<a class=\"el\" href=\"structyaml__emitter__s.html\">yaml_emitter_t</a> *emitter)</td></tr>\n<tr><td class=\"mdescLeft\">&nbsp;</td><td class=\"mdescRight\">Flush the accumulated characters to the output.  <a href=\"group__emitter.html#gacaf24456e2bf85bc5654cbd7d828055f\"></a><br/></td></tr>\n</table>\n<hr/><a name=\"_details\"></a><h2>Detailed Description</h2>\n<p>Public interface for libyaml. </p>\n<p>Include the header file with the code: </p>\n<div class=\"fragment\"><pre class=\"fragment\"><span class=\"preprocessor\"> #include &lt;<a class=\"code\" href=\"yaml_8h.html\" title=\"Public interface for libyaml.\">yaml.h</a>&gt;</span>\n</pre></div> </div>\n<hr class=\"footer\"/><address class=\"footer\"><small>Generated on Mon May 30 2011 22:00:00 for yaml by&nbsp;\n<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/></a> 1.7.1 </small></address>\n</body>\n</html>\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/include/Makefile.am",
    "content": "INCLUDES = yaml.h\nDOXYGEN_CFG = $(top_srcdir)/doc/doxygen.cfg\n\nnobase_include_HEADERS = $(INCLUDES)\n\nif DOXYGEN\n\nhtml: $(INCLUDES) $(DOXYGEN_CFG)\n\tPACKAGE=$(PACKAGE) VERSION=$(VERSION) top_srcdir=$(top_srcdir) top_builddir=$(top_builddir) doxygen $(DOXYGEN_CFG)\n\nendif\n\nmaintainer-clean-local:\n\t-rm -rf $(top_builddir)/doc/html\n\ndist-hook: html\n\tcp -a $(top_builddir)/doc/html $(top_distdir)/doc\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/include/Makefile.in",
    "content": "# Makefile.in generated by automake 1.11.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,\n# 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\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = include\nDIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \\\n\t$(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nSOURCES =\nDIST_SOURCES =\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__installdirs = \"$(DESTDIR)$(includedir)\"\nHEADERS = $(nobase_include_HEADERS)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\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@\nDOXYGEN = @DOXYGEN@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nYAML_LT_AGE = @YAML_LT_AGE@\nYAML_LT_CURRENT = @YAML_LT_CURRENT@\nYAML_LT_RELEASE = @YAML_LT_RELEASE@\nYAML_LT_REVISION = @YAML_LT_REVISION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nlt_ECHO = @lt_ECHO@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nINCLUDES = yaml.h\nDOXYGEN_CFG = $(top_srcdir)/doc/doxygen.cfg\nnobase_include_HEADERS = $(INCLUDES)\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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign include/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$(am__aclocal_m4_deps):\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\ninstall-nobase_includeHEADERS: $(nobase_include_HEADERS)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(includedir)\" || $(MKDIR_P) \"$(DESTDIR)$(includedir)\"\n\t@list='$(nobase_include_HEADERS)'; test -n \"$(includedir)\" || list=; \\\n\t$(am__nobase_list) | while read dir files; do \\\n\t  xfiles=; for file in $$files; do \\\n\t    if test -f \"$$file\"; then xfiles=\"$$xfiles $$file\"; \\\n\t    else xfiles=\"$$xfiles $(srcdir)/$$file\"; fi; done; \\\n\t  test -z \"$$xfiles\" || { \\\n\t    test \"x$$dir\" = x. || { \\\n\t      echo \"$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'\"; \\\n\t      $(MKDIR_P) \"$(DESTDIR)$(includedir)/$$dir\"; }; \\\n\t    echo \" $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'\"; \\\n\t    $(INSTALL_HEADER) $$xfiles \"$(DESTDIR)$(includedir)/$$dir\" || exit $$?; }; \\\n\tdone\n\nuninstall-nobase_includeHEADERS:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(nobase_include_HEADERS)'; test -n \"$(includedir)\" || list=; \\\n\t$(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \\\n\ttest -n \"$$files\" || exit 0; \\\n\techo \" ( cd '$(DESTDIR)$(includedir)' && rm -f\" $$files \")\"; \\\n\tcd \"$(DESTDIR)$(includedir)\" && rm -f $$files\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; nonempty = 1; } \\\n\t      END { if (nonempty) { 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\tset x; \\\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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-hook\ncheck-am: all-am\ncheck: check-am\nall-am: Makefile $(HEADERS)\ninstalldirs:\n\tfor dir in \"$(DESTDIR)$(includedir)\"; 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\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\n@DOXYGEN_FALSE@html: html-am\n\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am: install-nobase_includeHEADERS\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic \\\n\tmaintainer-clean-local\n\nmostlyclean: mostlyclean-am\n\nmostlyclean-am: mostlyclean-generic mostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-nobase_includeHEADERS\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool ctags dist-hook distclean distclean-generic \\\n\tdistclean-libtool distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-nobase_includeHEADERS \\\n\tinstall-pdf install-pdf-am install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tmaintainer-clean maintainer-clean-generic \\\n\tmaintainer-clean-local mostlyclean mostlyclean-generic \\\n\tmostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \\\n\tuninstall-am uninstall-nobase_includeHEADERS\n\n\n@DOXYGEN_TRUE@html: $(INCLUDES) $(DOXYGEN_CFG)\n@DOXYGEN_TRUE@\tPACKAGE=$(PACKAGE) VERSION=$(VERSION) top_srcdir=$(top_srcdir) top_builddir=$(top_builddir) doxygen $(DOXYGEN_CFG)\n\nmaintainer-clean-local:\n\t-rm -rf $(top_builddir)/doc/html\n\ndist-hook: html\n\tcp -a $(top_builddir)/doc/html $(top_distdir)/doc\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/include/yaml.h",
    "content": "/**\n * @file yaml.h\n * @brief Public interface for libyaml.\n * \n * Include the header file with the code:\n * @code\n * #include <yaml.h>\n * @endcode\n */\n\n#ifndef YAML_H\n#define YAML_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n/**\n * @defgroup export Export Definitions\n * @{\n */\n\n/** The public API declaration. */\n\n#ifdef _WIN32\n#   if defined(YAML_DECLARE_STATIC)\n#       define  YAML_DECLARE(type)  type\n#   elif defined(YAML_DECLARE_EXPORT)\n#       define  YAML_DECLARE(type)  __declspec(dllexport) type\n#   else\n#       define  YAML_DECLARE(type)  __declspec(dllimport) type\n#   endif\n#else\n#   define  YAML_DECLARE(type)  type\n#endif\n\n/** @} */\n\n/**\n * @defgroup version Version Information\n * @{\n */\n\n/**\n * Get the library version as a string.\n *\n * @returns The function returns the pointer to a static string of the form\n * @c \"X.Y.Z\", where @c X is the major version number, @c Y is a minor version\n * number, and @c Z is the patch version number.\n */\n\nYAML_DECLARE(const char *)\nyaml_get_version_string(void);\n\n/**\n * Get the library version numbers.\n *\n * @param[out]      major   Major version number.\n * @param[out]      minor   Minor version number.\n * @param[out]      patch   Patch version number.\n */\n\nYAML_DECLARE(void)\nyaml_get_version(int *major, int *minor, int *patch);\n\n/** @} */\n\n/**\n * @defgroup basic Basic Types\n * @{\n */\n\n/** The character type (UTF-8 octet). */\ntypedef unsigned char yaml_char_t;\n\n/** The version directive data. */\ntypedef struct yaml_version_directive_s {\n    /** The major version number. */\n    int major;\n    /** The minor version number. */\n    int minor;\n} yaml_version_directive_t;\n\n/** The tag directive data. */\ntypedef struct yaml_tag_directive_s {\n    /** The tag handle. */\n    yaml_char_t *handle;\n    /** The tag prefix. */\n    yaml_char_t *prefix;\n} yaml_tag_directive_t;\n\n/** The stream encoding. */\ntypedef enum yaml_encoding_e {\n    /** Let the parser choose the encoding. */\n    YAML_ANY_ENCODING,\n    /** The default UTF-8 encoding. */\n    YAML_UTF8_ENCODING,\n    /** The UTF-16-LE encoding with BOM. */\n    YAML_UTF16LE_ENCODING,\n    /** The UTF-16-BE encoding with BOM. */\n    YAML_UTF16BE_ENCODING\n} yaml_encoding_t;\n\n/** Line break types. */\n\ntypedef enum yaml_break_e {\n    /** Let the parser choose the break type. */\n    YAML_ANY_BREAK,\n    /** Use CR for line breaks (Mac style). */\n    YAML_CR_BREAK,\n    /** Use LN for line breaks (Unix style). */\n    YAML_LN_BREAK,\n    /** Use CR LN for line breaks (DOS style). */\n    YAML_CRLN_BREAK\n} yaml_break_t;\n\n/** Many bad things could happen with the parser and emitter. */\ntypedef enum yaml_error_type_e {\n    /** No error is produced. */\n    YAML_NO_ERROR,\n\n    /** Cannot allocate or reallocate a block of memory. */\n    YAML_MEMORY_ERROR,\n\n    /** Cannot read or decode the input stream. */\n    YAML_READER_ERROR,\n    /** Cannot scan the input stream. */\n    YAML_SCANNER_ERROR,\n    /** Cannot parse the input stream. */\n    YAML_PARSER_ERROR,\n    /** Cannot compose a YAML document. */\n    YAML_COMPOSER_ERROR,\n\n    /** Cannot write to the output stream. */\n    YAML_WRITER_ERROR,\n    /** Cannot emit a YAML stream. */\n    YAML_EMITTER_ERROR\n} yaml_error_type_t;\n\n/** The pointer position. */\ntypedef struct yaml_mark_s {\n    /** The position index. */\n    size_t index;\n\n    /** The position line. */\n    size_t line;\n\n    /** The position column. */\n    size_t column;\n} yaml_mark_t;\n\n/** @} */\n\n/**\n * @defgroup styles Node Styles\n * @{\n */\n\n/** Scalar styles. */\ntypedef enum yaml_scalar_style_e {\n    /** Let the emitter choose the style. */\n    YAML_ANY_SCALAR_STYLE,\n\n    /** The plain scalar style. */\n    YAML_PLAIN_SCALAR_STYLE,\n\n    /** The single-quoted scalar style. */\n    YAML_SINGLE_QUOTED_SCALAR_STYLE,\n    /** The double-quoted scalar style. */\n    YAML_DOUBLE_QUOTED_SCALAR_STYLE,\n\n    /** The literal scalar style. */\n    YAML_LITERAL_SCALAR_STYLE,\n    /** The folded scalar style. */\n    YAML_FOLDED_SCALAR_STYLE\n} yaml_scalar_style_t;\n\n/** Sequence styles. */\ntypedef enum yaml_sequence_style_e {\n    /** Let the emitter choose the style. */\n    YAML_ANY_SEQUENCE_STYLE,\n\n    /** The block sequence style. */\n    YAML_BLOCK_SEQUENCE_STYLE,\n    /** The flow sequence style. */\n    YAML_FLOW_SEQUENCE_STYLE\n} yaml_sequence_style_t;\n\n/** Mapping styles. */\ntypedef enum yaml_mapping_style_e {\n    /** Let the emitter choose the style. */\n    YAML_ANY_MAPPING_STYLE,\n\n    /** The block mapping style. */\n    YAML_BLOCK_MAPPING_STYLE,\n    /** The flow mapping style. */\n    YAML_FLOW_MAPPING_STYLE\n/*    YAML_FLOW_SET_MAPPING_STYLE   */\n} yaml_mapping_style_t;\n\n/** @} */\n\n/**\n * @defgroup tokens Tokens\n * @{\n */\n\n/** Token types. */\ntypedef enum yaml_token_type_e {\n    /** An empty token. */\n    YAML_NO_TOKEN,\n\n    /** A STREAM-START token. */\n    YAML_STREAM_START_TOKEN,\n    /** A STREAM-END token. */\n    YAML_STREAM_END_TOKEN,\n\n    /** A VERSION-DIRECTIVE token. */\n    YAML_VERSION_DIRECTIVE_TOKEN,\n    /** A TAG-DIRECTIVE token. */\n    YAML_TAG_DIRECTIVE_TOKEN,\n    /** A DOCUMENT-START token. */\n    YAML_DOCUMENT_START_TOKEN,\n    /** A DOCUMENT-END token. */\n    YAML_DOCUMENT_END_TOKEN,\n\n    /** A BLOCK-SEQUENCE-START token. */\n    YAML_BLOCK_SEQUENCE_START_TOKEN,\n    /** A BLOCK-SEQUENCE-END token. */\n    YAML_BLOCK_MAPPING_START_TOKEN,\n    /** A BLOCK-END token. */\n    YAML_BLOCK_END_TOKEN,\n\n    /** A FLOW-SEQUENCE-START token. */\n    YAML_FLOW_SEQUENCE_START_TOKEN,\n    /** A FLOW-SEQUENCE-END token. */\n    YAML_FLOW_SEQUENCE_END_TOKEN,\n    /** A FLOW-MAPPING-START token. */\n    YAML_FLOW_MAPPING_START_TOKEN,\n    /** A FLOW-MAPPING-END token. */\n    YAML_FLOW_MAPPING_END_TOKEN,\n\n    /** A BLOCK-ENTRY token. */\n    YAML_BLOCK_ENTRY_TOKEN,\n    /** A FLOW-ENTRY token. */\n    YAML_FLOW_ENTRY_TOKEN,\n    /** A KEY token. */\n    YAML_KEY_TOKEN,\n    /** A VALUE token. */\n    YAML_VALUE_TOKEN,\n\n    /** An ALIAS token. */\n    YAML_ALIAS_TOKEN,\n    /** An ANCHOR token. */\n    YAML_ANCHOR_TOKEN,\n    /** A TAG token. */\n    YAML_TAG_TOKEN,\n    /** A SCALAR token. */\n    YAML_SCALAR_TOKEN\n} yaml_token_type_t;\n\n/** The token structure. */\ntypedef struct yaml_token_s {\n\n    /** The token type. */\n    yaml_token_type_t type;\n\n    /** The token data. */\n    union {\n\n        /** The stream start (for @c YAML_STREAM_START_TOKEN). */\n        struct {\n            /** The stream encoding. */\n            yaml_encoding_t encoding;\n        } stream_start;\n\n        /** The alias (for @c YAML_ALIAS_TOKEN). */\n        struct {\n            /** The alias value. */\n            yaml_char_t *value;\n        } alias;\n\n        /** The anchor (for @c YAML_ANCHOR_TOKEN). */\n        struct {\n            /** The anchor value. */\n            yaml_char_t *value;\n        } anchor;\n\n        /** The tag (for @c YAML_TAG_TOKEN). */\n        struct {\n            /** The tag handle. */\n            yaml_char_t *handle;\n            /** The tag suffix. */\n            yaml_char_t *suffix;\n        } tag;\n\n        /** The scalar value (for @c YAML_SCALAR_TOKEN). */\n        struct {\n            /** The scalar value. */\n            yaml_char_t *value;\n            /** The length of the scalar value. */\n            size_t length;\n            /** The scalar style. */\n            yaml_scalar_style_t style;\n        } scalar;\n\n        /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */\n        struct {\n            /** The major version number. */\n            int major;\n            /** The minor version number. */\n            int minor;\n        } version_directive;\n\n        /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */\n        struct {\n            /** The tag handle. */\n            yaml_char_t *handle;\n            /** The tag prefix. */\n            yaml_char_t *prefix;\n        } tag_directive;\n\n    } data;\n\n    /** The beginning of the token. */\n    yaml_mark_t start_mark;\n    /** The end of the token. */\n    yaml_mark_t end_mark;\n\n} yaml_token_t;\n\n/**\n * Free any memory allocated for a token object.\n *\n * @param[in,out]   token   A token object.\n */\n\nYAML_DECLARE(void)\nyaml_token_delete(yaml_token_t *token);\n\n/** @} */\n\n/**\n * @defgroup events Events\n * @{\n */\n\n/** Event types. */\ntypedef enum yaml_event_type_e {\n    /** An empty event. */\n    YAML_NO_EVENT,\n\n    /** A STREAM-START event. */\n    YAML_STREAM_START_EVENT,\n    /** A STREAM-END event. */\n    YAML_STREAM_END_EVENT,\n\n    /** A DOCUMENT-START event. */\n    YAML_DOCUMENT_START_EVENT,\n    /** A DOCUMENT-END event. */\n    YAML_DOCUMENT_END_EVENT,\n\n    /** An ALIAS event. */\n    YAML_ALIAS_EVENT,\n    /** A SCALAR event. */\n    YAML_SCALAR_EVENT,\n\n    /** A SEQUENCE-START event. */\n    YAML_SEQUENCE_START_EVENT,\n    /** A SEQUENCE-END event. */\n    YAML_SEQUENCE_END_EVENT,\n\n    /** A MAPPING-START event. */\n    YAML_MAPPING_START_EVENT,\n    /** A MAPPING-END event. */\n    YAML_MAPPING_END_EVENT\n} yaml_event_type_t;\n\n/** The event structure. */\ntypedef struct yaml_event_s {\n\n    /** The event type. */\n    yaml_event_type_t type;\n\n    /** The event data. */\n    union {\n        \n        /** The stream parameters (for @c YAML_STREAM_START_EVENT). */\n        struct {\n            /** The document encoding. */\n            yaml_encoding_t encoding;\n        } stream_start;\n\n        /** The document parameters (for @c YAML_DOCUMENT_START_EVENT). */\n        struct {\n            /** The version directive. */\n            yaml_version_directive_t *version_directive;\n\n            /** The list of tag directives. */\n            struct {\n                /** The beginning of the tag directives list. */\n                yaml_tag_directive_t *start;\n                /** The end of the tag directives list. */\n                yaml_tag_directive_t *end;\n            } tag_directives;\n\n            /** Is the document indicator implicit? */\n            int implicit;\n        } document_start;\n\n        /** The document end parameters (for @c YAML_DOCUMENT_END_EVENT). */\n        struct {\n            /** Is the document end indicator implicit? */\n            int implicit;\n        } document_end;\n\n        /** The alias parameters (for @c YAML_ALIAS_EVENT). */\n        struct {\n            /** The anchor. */\n            yaml_char_t *anchor;\n        } alias;\n\n        /** The scalar parameters (for @c YAML_SCALAR_EVENT). */\n        struct {\n            /** The anchor. */\n            yaml_char_t *anchor;\n            /** The tag. */\n            yaml_char_t *tag;\n            /** The scalar value. */\n            yaml_char_t *value;\n            /** The length of the scalar value. */\n            size_t length;\n            /** Is the tag optional for the plain style? */\n            int plain_implicit;\n            /** Is the tag optional for any non-plain style? */\n            int quoted_implicit;\n            /** The scalar style. */\n            yaml_scalar_style_t style;\n        } scalar;\n\n        /** The sequence parameters (for @c YAML_SEQUENCE_START_EVENT). */\n        struct {\n            /** The anchor. */\n            yaml_char_t *anchor;\n            /** The tag. */\n            yaml_char_t *tag;\n            /** Is the tag optional? */\n            int implicit;\n            /** The sequence style. */\n            yaml_sequence_style_t style;\n        } sequence_start;\n\n        /** The mapping parameters (for @c YAML_MAPPING_START_EVENT). */\n        struct {\n            /** The anchor. */\n            yaml_char_t *anchor;\n            /** The tag. */\n            yaml_char_t *tag;\n            /** Is the tag optional? */\n            int implicit;\n            /** The mapping style. */\n            yaml_mapping_style_t style;\n        } mapping_start;\n\n    } data;\n\n    /** The beginning of the event. */\n    yaml_mark_t start_mark;\n    /** The end of the event. */\n    yaml_mark_t end_mark;\n\n} yaml_event_t;\n\n/**\n * Create the STREAM-START event.\n *\n * @param[out]      event       An empty event object.\n * @param[in]       encoding    The stream encoding.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_stream_start_event_initialize(yaml_event_t *event,\n        yaml_encoding_t encoding);\n\n/**\n * Create the STREAM-END event.\n *\n * @param[out]      event       An empty event object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_stream_end_event_initialize(yaml_event_t *event);\n\n/**\n * Create the DOCUMENT-START event.\n *\n * The @a implicit argument is considered as a stylistic parameter and may be\n * ignored by the emitter.\n *\n * @param[out]      event                   An empty event object.\n * @param[in]       version_directive       The %YAML directive value or\n *                                          @c NULL.\n * @param[in]       tag_directives_start    The beginning of the %TAG\n *                                          directives list.\n * @param[in]       tag_directives_end      The end of the %TAG directives\n *                                          list.\n * @param[in]       implicit                If the document start indicator is\n *                                          implicit.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_start_event_initialize(yaml_event_t *event,\n        yaml_version_directive_t *version_directive,\n        yaml_tag_directive_t *tag_directives_start,\n        yaml_tag_directive_t *tag_directives_end,\n        int implicit);\n\n/**\n * Create the DOCUMENT-END event.\n *\n * The @a implicit argument is considered as a stylistic parameter and may be\n * ignored by the emitter.\n *\n * @param[out]      event       An empty event object.\n * @param[in]       implicit    If the document end indicator is implicit.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_end_event_initialize(yaml_event_t *event, int implicit);\n\n/**\n * Create an ALIAS event.\n *\n * @param[out]      event       An empty event object.\n * @param[in]       anchor      The anchor value.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor);\n\n/**\n * Create a SCALAR event.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * Either the @a tag attribute or one of the @a plain_implicit and\n * @a quoted_implicit flags must be set.\n *\n * @param[out]      event           An empty event object.\n * @param[in]       anchor          The scalar anchor or @c NULL.\n * @param[in]       tag             The scalar tag or @c NULL.\n * @param[in]       value           The scalar value.\n * @param[in]       length          The length of the scalar value.\n * @param[in]       plain_implicit  If the tag may be omitted for the plain\n *                                  style.\n * @param[in]       quoted_implicit If the tag may be omitted for any\n *                                  non-plain style.\n * @param[in]       style           The scalar style.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_scalar_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag,\n        yaml_char_t *value, int length,\n        int plain_implicit, int quoted_implicit,\n        yaml_scalar_style_t style);\n\n/**\n * Create a SEQUENCE-START event.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * Either the @a tag attribute or the @a implicit flag must be set.\n *\n * @param[out]      event       An empty event object.\n * @param[in]       anchor      The sequence anchor or @c NULL.\n * @param[in]       tag         The sequence tag or @c NULL.\n * @param[in]       implicit    If the tag may be omitted.\n * @param[in]       style       The sequence style.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_sequence_start_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag, int implicit,\n        yaml_sequence_style_t style);\n\n/**\n * Create a SEQUENCE-END event.\n *\n * @param[out]      event       An empty event object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_sequence_end_event_initialize(yaml_event_t *event);\n\n/**\n * Create a MAPPING-START event.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * Either the @a tag attribute or the @a implicit flag must be set.\n *\n * @param[out]      event       An empty event object.\n * @param[in]       anchor      The mapping anchor or @c NULL.\n * @param[in]       tag         The mapping tag or @c NULL.\n * @param[in]       implicit    If the tag may be omitted.\n * @param[in]       style       The mapping style.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_mapping_start_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag, int implicit,\n        yaml_mapping_style_t style);\n\n/**\n * Create a MAPPING-END event.\n *\n * @param[out]      event       An empty event object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_mapping_end_event_initialize(yaml_event_t *event);\n\n/**\n * Free any memory allocated for an event object.\n *\n * @param[in,out]   event   An event object.\n */\n\nYAML_DECLARE(void)\nyaml_event_delete(yaml_event_t *event);\n\n/** @} */\n\n/**\n * @defgroup nodes Nodes\n * @{\n */\n\n/** The tag @c !!null with the only possible value: @c null. */\n#define YAML_NULL_TAG       \"tag:yaml.org,2002:null\"\n/** The tag @c !!bool with the values: @c true and @c falce. */\n#define YAML_BOOL_TAG       \"tag:yaml.org,2002:bool\"\n/** The tag @c !!str for string values. */\n#define YAML_STR_TAG        \"tag:yaml.org,2002:str\"\n/** The tag @c !!int for integer values. */\n#define YAML_INT_TAG        \"tag:yaml.org,2002:int\"\n/** The tag @c !!float for float values. */\n#define YAML_FLOAT_TAG      \"tag:yaml.org,2002:float\"\n/** The tag @c !!timestamp for date and time values. */\n#define YAML_TIMESTAMP_TAG  \"tag:yaml.org,2002:timestamp\"\n\n/** The tag @c !!seq is used to denote sequences. */\n#define YAML_SEQ_TAG        \"tag:yaml.org,2002:seq\"\n/** The tag @c !!map is used to denote mapping. */\n#define YAML_MAP_TAG        \"tag:yaml.org,2002:map\"\n\n/** The default scalar tag is @c !!str. */\n#define YAML_DEFAULT_SCALAR_TAG     YAML_STR_TAG\n/** The default sequence tag is @c !!seq. */\n#define YAML_DEFAULT_SEQUENCE_TAG   YAML_SEQ_TAG\n/** The default mapping tag is @c !!map. */\n#define YAML_DEFAULT_MAPPING_TAG    YAML_MAP_TAG\n\n/** Node types. */\ntypedef enum yaml_node_type_e {\n    /** An empty node. */\n    YAML_NO_NODE,\n\n    /** A scalar node. */\n    YAML_SCALAR_NODE,\n    /** A sequence node. */\n    YAML_SEQUENCE_NODE,\n    /** A mapping node. */\n    YAML_MAPPING_NODE\n} yaml_node_type_t;\n\n/** The forward definition of a document node structure. */\ntypedef struct yaml_node_s yaml_node_t;\n\n/** An element of a sequence node. */\ntypedef int yaml_node_item_t;\n\n/** An element of a mapping node. */\ntypedef struct yaml_node_pair_s {\n    /** The key of the element. */\n    int key;\n    /** The value of the element. */\n    int value;\n} yaml_node_pair_t;\n\n/** The node structure. */\nstruct yaml_node_s {\n\n    /** The node type. */\n    yaml_node_type_t type;\n\n    /** The node tag. */\n    yaml_char_t *tag;\n\n    /** The node data. */\n    union {\n        \n        /** The scalar parameters (for @c YAML_SCALAR_NODE). */\n        struct {\n            /** The scalar value. */\n            yaml_char_t *value;\n            /** The length of the scalar value. */\n            size_t length;\n            /** The scalar style. */\n            yaml_scalar_style_t style;\n        } scalar;\n\n        /** The sequence parameters (for @c YAML_SEQUENCE_NODE). */\n        struct {\n            /** The stack of sequence items. */\n            struct {\n                /** The beginning of the stack. */\n                yaml_node_item_t *start;\n                /** The end of the stack. */\n                yaml_node_item_t *end;\n                /** The top of the stack. */\n                yaml_node_item_t *top;\n            } items;\n            /** The sequence style. */\n            yaml_sequence_style_t style;\n        } sequence;\n\n        /** The mapping parameters (for @c YAML_MAPPING_NODE). */\n        struct {\n            /** The stack of mapping pairs (key, value). */\n            struct {\n                /** The beginning of the stack. */\n                yaml_node_pair_t *start;\n                /** The end of the stack. */\n                yaml_node_pair_t *end;\n                /** The top of the stack. */\n                yaml_node_pair_t *top;\n            } pairs;\n            /** The mapping style. */\n            yaml_mapping_style_t style;\n        } mapping;\n\n    } data;\n\n    /** The beginning of the node. */\n    yaml_mark_t start_mark;\n    /** The end of the node. */\n    yaml_mark_t end_mark;\n\n};\n\n/** The document structure. */\ntypedef struct yaml_document_s {\n\n    /** The document nodes. */\n    struct {\n        /** The beginning of the stack. */\n        yaml_node_t *start;\n        /** The end of the stack. */\n        yaml_node_t *end;\n        /** The top of the stack. */\n        yaml_node_t *top;\n    } nodes;\n\n    /** The version directive. */\n    yaml_version_directive_t *version_directive;\n\n    /** The list of tag directives. */\n    struct {\n        /** The beginning of the tag directives list. */\n        yaml_tag_directive_t *start;\n        /** The end of the tag directives list. */\n        yaml_tag_directive_t *end;\n    } tag_directives;\n\n    /** Is the document start indicator implicit? */\n    int start_implicit;\n    /** Is the document end indicator implicit? */\n    int end_implicit;\n\n    /** The beginning of the document. */\n    yaml_mark_t start_mark;\n    /** The end of the document. */\n    yaml_mark_t end_mark;\n\n} yaml_document_t;\n\n/**\n * Create a YAML document.\n *\n * @param[out]      document                An empty document object.\n * @param[in]       version_directive       The %YAML directive value or\n *                                          @c NULL.\n * @param[in]       tag_directives_start    The beginning of the %TAG\n *                                          directives list.\n * @param[in]       tag_directives_end      The end of the %TAG directives\n *                                          list.\n * @param[in]       start_implicit          If the document start indicator is\n *                                          implicit.\n * @param[in]       end_implicit            If the document end indicator is\n *                                          implicit.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_initialize(yaml_document_t *document,\n        yaml_version_directive_t *version_directive,\n        yaml_tag_directive_t *tag_directives_start,\n        yaml_tag_directive_t *tag_directives_end,\n        int start_implicit, int end_implicit);\n\n/**\n * Delete a YAML document and all its nodes.\n *\n * @param[in,out]   document        A document object.\n */\n\nYAML_DECLARE(void)\nyaml_document_delete(yaml_document_t *document);\n\n/**\n * Get a node of a YAML document.\n *\n * The pointer returned by this function is valid until any of the functions\n * modifying the documents are called.\n *\n * @param[in]       document        A document object.\n * @param[in]       index           The node id.\n *\n * @returns the node objct or @c NULL if @c node_id is out of range.\n */\n\nYAML_DECLARE(yaml_node_t *)\nyaml_document_get_node(yaml_document_t *document, int index);\n\n/**\n * Get the root of a YAML document node.\n *\n * The root object is the first object added to the document.\n *\n * The pointer returned by this function is valid until any of the functions\n * modifying the documents are called.\n *\n * An empty document produced by the parser signifies the end of a YAML\n * stream.\n *\n * @param[in]       document        A document object.\n *\n * @returns the node object or @c NULL if the document is empty.\n */\n\nYAML_DECLARE(yaml_node_t *)\nyaml_document_get_root_node(yaml_document_t *document);\n\n/**\n * Create a SCALAR node and attach it to the document.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * @param[in,out]   document        A document object.\n * @param[in]       tag             The scalar tag.\n * @param[in]       value           The scalar value.\n * @param[in]       length          The length of the scalar value.\n * @param[in]       style           The scalar style.\n *\n * @returns the node id or @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_scalar(yaml_document_t *document,\n        yaml_char_t *tag, yaml_char_t *value, int length,\n        yaml_scalar_style_t style);\n\n/**\n * Create a SEQUENCE node and attach it to the document.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * @param[in,out]   document    A document object.\n * @param[in]       tag         The sequence tag.\n * @param[in]       style       The sequence style.\n *\n * @returns the node id or @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_sequence(yaml_document_t *document,\n        yaml_char_t *tag, yaml_sequence_style_t style);\n\n/**\n * Create a MAPPING node and attach it to the document.\n *\n * The @a style argument may be ignored by the emitter.\n *\n * @param[in,out]   document    A document object.\n * @param[in]       tag         The sequence tag.\n * @param[in]       style       The sequence style.\n *\n * @returns the node id or @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_mapping(yaml_document_t *document,\n        yaml_char_t *tag, yaml_mapping_style_t style);\n\n/**\n * Add an item to a SEQUENCE node.\n *\n * @param[in,out]   document    A document object.\n * @param[in]       sequence    The sequence node id.\n * @param[in]       item        The item node id.\n*\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_append_sequence_item(yaml_document_t *document,\n        int sequence, int item);\n\n/**\n * Add a pair of a key and a value to a MAPPING node.\n *\n * @param[in,out]   document    A document object.\n * @param[in]       mapping     The mapping node id.\n * @param[in]       key         The key node id.\n * @param[in]       value       The value node id.\n*\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_document_append_mapping_pair(yaml_document_t *document,\n        int mapping, int key, int value);\n\n/** @} */\n\n/**\n * @defgroup parser Parser Definitions\n * @{\n */\n\n/**\n * The prototype of a read handler.\n *\n * The read handler is called when the parser needs to read more bytes from the\n * source.  The handler should write not more than @a size bytes to the @a\n * buffer.  The number of written bytes should be set to the @a length variable.\n *\n * @param[in,out]   data        A pointer to an application data specified by\n *                              yaml_parser_set_input().\n * @param[out]      buffer      The buffer to write the data from the source.\n * @param[in]       size        The size of the buffer.\n * @param[out]      size_read   The actual number of bytes read from the source.\n *\n * @returns On success, the handler should return @c 1.  If the handler failed,\n * the returned value should be @c 0.  On EOF, the handler should set the\n * @a size_read to @c 0 and return @c 1.\n */\n\ntypedef int yaml_read_handler_t(void *data, unsigned char *buffer, size_t size,\n        size_t *size_read);\n\n/**\n * This structure holds information about a potential simple key.\n */\n\ntypedef struct yaml_simple_key_s {\n    /** Is a simple key possible? */\n    int possible;\n\n    /** Is a simple key required? */\n    int required;\n\n    /** The number of the token. */\n    size_t token_number;\n\n    /** The position mark. */\n    yaml_mark_t mark;\n} yaml_simple_key_t;\n\n/**\n * The states of the parser.\n */\ntypedef enum yaml_parser_state_e {\n    /** Expect STREAM-START. */\n    YAML_PARSE_STREAM_START_STATE,\n    /** Expect the beginning of an implicit document. */\n    YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE,\n    /** Expect DOCUMENT-START. */\n    YAML_PARSE_DOCUMENT_START_STATE,\n    /** Expect the content of a document. */\n    YAML_PARSE_DOCUMENT_CONTENT_STATE,\n    /** Expect DOCUMENT-END. */\n    YAML_PARSE_DOCUMENT_END_STATE,\n    /** Expect a block node. */\n    YAML_PARSE_BLOCK_NODE_STATE,\n    /** Expect a block node or indentless sequence. */\n    YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE,\n    /** Expect a flow node. */\n    YAML_PARSE_FLOW_NODE_STATE,\n    /** Expect the first entry of a block sequence. */\n    YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE,\n    /** Expect an entry of a block sequence. */\n    YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE,\n    /** Expect an entry of an indentless sequence. */\n    YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE,\n    /** Expect the first key of a block mapping. */\n    YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE,\n    /** Expect a block mapping key. */\n    YAML_PARSE_BLOCK_MAPPING_KEY_STATE,\n    /** Expect a block mapping value. */\n    YAML_PARSE_BLOCK_MAPPING_VALUE_STATE,\n    /** Expect the first entry of a flow sequence. */\n    YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE,\n    /** Expect an entry of a flow sequence. */\n    YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE,\n    /** Expect a key of an ordered mapping. */\n    YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE,\n    /** Expect a value of an ordered mapping. */\n    YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE,\n    /** Expect the and of an ordered mapping entry. */\n    YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE,\n    /** Expect the first key of a flow mapping. */\n    YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE,\n    /** Expect a key of a flow mapping. */\n    YAML_PARSE_FLOW_MAPPING_KEY_STATE,\n    /** Expect a value of a flow mapping. */\n    YAML_PARSE_FLOW_MAPPING_VALUE_STATE,\n    /** Expect an empty value of a flow mapping. */\n    YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE,\n    /** Expect nothing. */\n    YAML_PARSE_END_STATE\n} yaml_parser_state_t;\n\n/**\n * This structure holds aliases data.\n */\n\ntypedef struct yaml_alias_data_s {\n    /** The anchor. */\n    yaml_char_t *anchor;\n    /** The node id. */\n    int index;\n    /** The anchor mark. */\n    yaml_mark_t mark;\n} yaml_alias_data_t;\n\n/**\n * The parser structure.\n *\n * All members are internal.  Manage the structure using the @c yaml_parser_\n * family of functions.\n */\n\ntypedef struct yaml_parser_s {\n\n    /**\n     * @name Error handling\n     * @{\n     */\n\n    /** Error type. */\n    yaml_error_type_t error;\n    /** Error description. */\n    const char *problem;\n    /** The byte about which the problem occured. */\n    size_t problem_offset;\n    /** The problematic value (@c -1 is none). */\n    int problem_value;\n    /** The problem position. */\n    yaml_mark_t problem_mark;\n    /** The error context. */\n    const char *context;\n    /** The context position. */\n    yaml_mark_t context_mark;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Reader stuff\n     * @{\n     */\n\n    /** Read handler. */\n    yaml_read_handler_t *read_handler;\n\n    /** A pointer for passing to the read handler. */\n    void *read_handler_data;\n\n    /** Standard (string or file) input data. */\n    union {\n        /** String input data. */\n        struct {\n            /** The string start pointer. */\n            const unsigned char *start;\n            /** The string end pointer. */\n            const unsigned char *end;\n            /** The string current position. */\n            const unsigned char *current;\n        } string;\n\n        /** File input data. */\n        FILE *file;\n    } input;\n\n    /** EOF flag */\n    int eof;\n\n    /** The working buffer. */\n    struct {\n        /** The beginning of the buffer. */\n        yaml_char_t *start;\n        /** The end of the buffer. */\n        yaml_char_t *end;\n        /** The current position of the buffer. */\n        yaml_char_t *pointer;\n        /** The last filled position of the buffer. */\n        yaml_char_t *last;\n    } buffer;\n\n    /* The number of unread characters in the buffer. */\n    size_t unread;\n\n    /** The raw buffer. */\n    struct {\n        /** The beginning of the buffer. */\n        unsigned char *start;\n        /** The end of the buffer. */\n        unsigned char *end;\n        /** The current position of the buffer. */\n        unsigned char *pointer;\n        /** The last filled position of the buffer. */\n        unsigned char *last;\n    } raw_buffer;\n\n    /** The input encoding. */\n    yaml_encoding_t encoding;\n\n    /** The offset of the current position (in bytes). */\n    size_t offset;\n\n    /** The mark of the current position. */\n    yaml_mark_t mark;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Scanner stuff\n     * @{\n     */\n\n    /** Have we started to scan the input stream? */\n    int stream_start_produced;\n\n    /** Have we reached the end of the input stream? */\n    int stream_end_produced;\n\n    /** The number of unclosed '[' and '{' indicators. */\n    int flow_level;\n\n    /** The tokens queue. */\n    struct {\n        /** The beginning of the tokens queue. */\n        yaml_token_t *start;\n        /** The end of the tokens queue. */\n        yaml_token_t *end;\n        /** The head of the tokens queue. */\n        yaml_token_t *head;\n        /** The tail of the tokens queue. */\n        yaml_token_t *tail;\n    } tokens;\n\n    /** The number of tokens fetched from the queue. */\n    size_t tokens_parsed;\n\n    /* Does the tokens queue contain a token ready for dequeueing. */\n    int token_available;\n\n    /** The indentation levels stack. */\n    struct {\n        /** The beginning of the stack. */\n        int *start;\n        /** The end of the stack. */\n        int *end;\n        /** The top of the stack. */\n        int *top;\n    } indents;\n\n    /** The current indentation level. */\n    int indent;\n\n    /** May a simple key occur at the current position? */\n    int simple_key_allowed;\n\n    /** The stack of simple keys. */\n    struct {\n        /** The beginning of the stack. */\n        yaml_simple_key_t *start;\n        /** The end of the stack. */\n        yaml_simple_key_t *end;\n        /** The top of the stack. */\n        yaml_simple_key_t *top;\n    } simple_keys;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Parser stuff\n     * @{\n     */\n\n    /** The parser states stack. */\n    struct {\n        /** The beginning of the stack. */\n        yaml_parser_state_t *start;\n        /** The end of the stack. */\n        yaml_parser_state_t *end;\n        /** The top of the stack. */\n        yaml_parser_state_t *top;\n    } states;\n\n    /** The current parser state. */\n    yaml_parser_state_t state;\n\n    /** The stack of marks. */\n    struct {\n        /** The beginning of the stack. */\n        yaml_mark_t *start;\n        /** The end of the stack. */\n        yaml_mark_t *end;\n        /** The top of the stack. */\n        yaml_mark_t *top;\n    } marks;\n\n    /** The list of TAG directives. */\n    struct {\n        /** The beginning of the list. */\n        yaml_tag_directive_t *start;\n        /** The end of the list. */\n        yaml_tag_directive_t *end;\n        /** The top of the list. */\n        yaml_tag_directive_t *top;\n    } tag_directives;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Dumper stuff\n     * @{\n     */\n\n    /** The alias data. */\n    struct {\n        /** The beginning of the list. */\n        yaml_alias_data_t *start;\n        /** The end of the list. */\n        yaml_alias_data_t *end;\n        /** The top of the list. */\n        yaml_alias_data_t *top;\n    } aliases;\n\n    /** The currently parsed document. */\n    yaml_document_t *document;\n\n    /**\n     * @}\n     */\n\n} yaml_parser_t;\n\n/**\n * Initialize a parser.\n *\n * This function creates a new parser object.  An application is responsible\n * for destroying the object using the yaml_parser_delete() function.\n *\n * @param[out]      parser  An empty parser object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_parser_initialize(yaml_parser_t *parser);\n\n/**\n * Destroy a parser.\n *\n * @param[in,out]   parser  A parser object.\n */\n\nYAML_DECLARE(void)\nyaml_parser_delete(yaml_parser_t *parser);\n\n/**\n * Set a string input.\n *\n * Note that the @a input pointer must be valid while the @a parser object\n * exists.  The application is responsible for destroing @a input after\n * destroying the @a parser.\n *\n * @param[in,out]   parser  A parser object.\n * @param[in]       input   A source data.\n * @param[in]       size    The length of the source data in bytes.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input_string(yaml_parser_t *parser,\n        const unsigned char *input, size_t size);\n\n/**\n * Set a file input.\n *\n * @a file should be a file object open for reading.  The application is\n * responsible for closing the @a file.\n *\n * @param[in,out]   parser  A parser object.\n * @param[in]       file    An open file.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);\n\n/**\n * Set a generic input handler.\n *\n * @param[in,out]   parser  A parser object.\n * @param[in]       handler A read handler.\n * @param[in]       data    Any application data for passing to the read\n *                          handler.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input(yaml_parser_t *parser,\n        yaml_read_handler_t *handler, void *data);\n\n/**\n * Set the source encoding.\n *\n * @param[in,out]   parser      A parser object.\n * @param[in]       encoding    The source encoding.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);\n\n/**\n * Scan the input stream and produce the next token.\n *\n * Call the function subsequently to produce a sequence of tokens corresponding\n * to the input stream.  The initial token has the type\n * @c YAML_STREAM_START_TOKEN while the ending token has the type\n * @c YAML_STREAM_END_TOKEN.\n *\n * An application is responsible for freeing any buffers associated with the\n * produced token object using the @c yaml_token_delete function.\n *\n * An application must not alternate the calls of yaml_parser_scan() with the\n * calls of yaml_parser_parse() or yaml_parser_load(). Doing this will break\n * the parser.\n *\n * @param[in,out]   parser      A parser object.\n * @param[out]      token       An empty token object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);\n\n/**\n * Parse the input stream and produce the next parsing event.\n *\n * Call the function subsequently to produce a sequence of events corresponding\n * to the input stream.  The initial event has the type\n * @c YAML_STREAM_START_EVENT while the ending event has the type\n * @c YAML_STREAM_END_EVENT.\n *\n * An application is responsible for freeing any buffers associated with the\n * produced event object using the yaml_event_delete() function.\n *\n * An application must not alternate the calls of yaml_parser_parse() with the\n * calls of yaml_parser_scan() or yaml_parser_load(). Doing this will break the\n * parser.\n *\n * @param[in,out]   parser      A parser object.\n * @param[out]      event       An empty event object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);\n\n/**\n * Parse the input stream and produce the next YAML document.\n *\n * Call this function subsequently to produce a sequence of documents\n * constituting the input stream.\n *\n * If the produced document has no root node, it means that the document\n * end has been reached.\n *\n * An application is responsible for freeing any data associated with the\n * produced document object using the yaml_document_delete() function.\n *\n * An application must not alternate the calls of yaml_parser_load() with the\n * calls of yaml_parser_scan() or yaml_parser_parse(). Doing this will break\n * the parser.\n *\n * @param[in,out]   parser      A parser object.\n * @param[out]      document    An empty document object.\n *\n * @return @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_parser_load(yaml_parser_t *parser, yaml_document_t *document);\n\n/** @} */\n\n/**\n * @defgroup emitter Emitter Definitions\n * @{\n */\n\n/**\n * The prototype of a write handler.\n *\n * The write handler is called when the emitter needs to flush the accumulated\n * characters to the output.  The handler should write @a size bytes of the\n * @a buffer to the output.\n *\n * @param[in,out]   data        A pointer to an application data specified by\n *                              yaml_emitter_set_output().\n * @param[in]       buffer      The buffer with bytes to be written.\n * @param[in]       size        The size of the buffer.\n *\n * @returns On success, the handler should return @c 1.  If the handler failed,\n * the returned value should be @c 0.\n */\n\ntypedef int yaml_write_handler_t(void *data, unsigned char *buffer, size_t size);\n\n/** The emitter states. */\ntypedef enum yaml_emitter_state_e {\n    /** Expect STREAM-START. */\n    YAML_EMIT_STREAM_START_STATE,\n    /** Expect the first DOCUMENT-START or STREAM-END. */\n    YAML_EMIT_FIRST_DOCUMENT_START_STATE,\n    /** Expect DOCUMENT-START or STREAM-END. */\n    YAML_EMIT_DOCUMENT_START_STATE,\n    /** Expect the content of a document. */\n    YAML_EMIT_DOCUMENT_CONTENT_STATE,\n    /** Expect DOCUMENT-END. */\n    YAML_EMIT_DOCUMENT_END_STATE,\n    /** Expect the first item of a flow sequence. */\n    YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE,\n    /** Expect an item of a flow sequence. */\n    YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE,\n    /** Expect the first key of a flow mapping. */\n    YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE,\n    /** Expect a key of a flow mapping. */\n    YAML_EMIT_FLOW_MAPPING_KEY_STATE,\n    /** Expect a value for a simple key of a flow mapping. */\n    YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE,\n    /** Expect a value of a flow mapping. */\n    YAML_EMIT_FLOW_MAPPING_VALUE_STATE,\n    /** Expect the first item of a block sequence. */\n    YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE,\n    /** Expect an item of a block sequence. */\n    YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE,\n    /** Expect the first key of a block mapping. */\n    YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE,\n    /** Expect the key of a block mapping. */\n    YAML_EMIT_BLOCK_MAPPING_KEY_STATE,\n    /** Expect a value for a simple key of a block mapping. */\n    YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE,\n    /** Expect a value of a block mapping. */\n    YAML_EMIT_BLOCK_MAPPING_VALUE_STATE,\n    /** Expect nothing. */\n    YAML_EMIT_END_STATE\n} yaml_emitter_state_t;\n\n/**\n * The emitter structure.\n *\n * All members are internal.  Manage the structure using the @c yaml_emitter_\n * family of functions.\n */\n\ntypedef struct yaml_emitter_s {\n\n    /**\n     * @name Error handling\n     * @{\n     */\n\n    /** Error type. */\n    yaml_error_type_t error;\n    /** Error description. */\n    const char *problem;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Writer stuff\n     * @{\n     */\n\n    /** Write handler. */\n    yaml_write_handler_t *write_handler;\n\n    /** A pointer for passing to the white handler. */\n    void *write_handler_data;\n\n    /** Standard (string or file) output data. */\n    union {\n        /** String output data. */\n        struct {\n            /** The buffer pointer. */\n            unsigned char *buffer;\n            /** The buffer size. */\n            size_t size;\n            /** The number of written bytes. */\n            size_t *size_written;\n        } string;\n\n        /** File output data. */\n        FILE *file;\n    } output;\n\n    /** The working buffer. */\n    struct {\n        /** The beginning of the buffer. */\n        yaml_char_t *start;\n        /** The end of the buffer. */\n        yaml_char_t *end;\n        /** The current position of the buffer. */\n        yaml_char_t *pointer;\n        /** The last filled position of the buffer. */\n        yaml_char_t *last;\n    } buffer;\n\n    /** The raw buffer. */\n    struct {\n        /** The beginning of the buffer. */\n        unsigned char *start;\n        /** The end of the buffer. */\n        unsigned char *end;\n        /** The current position of the buffer. */\n        unsigned char *pointer;\n        /** The last filled position of the buffer. */\n        unsigned char *last;\n    } raw_buffer;\n\n    /** The stream encoding. */\n    yaml_encoding_t encoding;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Emitter stuff\n     * @{\n     */\n\n    /** If the output is in the canonical style? */\n    int canonical;\n    /** The number of indentation spaces. */\n    int best_indent;\n    /** The preferred width of the output lines. */\n    int best_width;\n    /** Allow unescaped non-ASCII characters? */\n    int unicode;\n    /** The preferred line break. */\n    yaml_break_t line_break;\n\n    /** The stack of states. */\n    struct {\n        /** The beginning of the stack. */\n        yaml_emitter_state_t *start;\n        /** The end of the stack. */\n        yaml_emitter_state_t *end;\n        /** The top of the stack. */\n        yaml_emitter_state_t *top;\n    } states;\n\n    /** The current emitter state. */\n    yaml_emitter_state_t state;\n\n    /** The event queue. */\n    struct {\n        /** The beginning of the event queue. */\n        yaml_event_t *start;\n        /** The end of the event queue. */\n        yaml_event_t *end;\n        /** The head of the event queue. */\n        yaml_event_t *head;\n        /** The tail of the event queue. */\n        yaml_event_t *tail;\n    } events;\n\n    /** The stack of indentation levels. */\n    struct {\n        /** The beginning of the stack. */\n        int *start;\n        /** The end of the stack. */\n        int *end;\n        /** The top of the stack. */\n        int *top;\n    } indents;\n\n    /** The list of tag directives. */\n    struct {\n        /** The beginning of the list. */\n        yaml_tag_directive_t *start;\n        /** The end of the list. */\n        yaml_tag_directive_t *end;\n        /** The top of the list. */\n        yaml_tag_directive_t *top;\n    } tag_directives;\n\n    /** The current indentation level. */\n    int indent;\n\n    /** The current flow level. */\n    int flow_level;\n\n    /** Is it the document root context? */\n    int root_context;\n    /** Is it a sequence context? */\n    int sequence_context;\n    /** Is it a mapping context? */\n    int mapping_context;\n    /** Is it a simple mapping key context? */\n    int simple_key_context;\n\n    /** The current line. */\n    int line;\n    /** The current column. */\n    int column;\n    /** If the last character was a whitespace? */\n    int whitespace;\n    /** If the last character was an indentation character (' ', '-', '?', ':')? */\n    int indention;\n    /** If an explicit document end is required? */\n    int open_ended;\n\n    /** Anchor analysis. */\n    struct {\n        /** The anchor value. */\n        yaml_char_t *anchor;\n        /** The anchor length. */\n        size_t anchor_length;\n        /** Is it an alias? */\n        int alias;\n    } anchor_data;\n\n    /** Tag analysis. */\n    struct {\n        /** The tag handle. */\n        yaml_char_t *handle;\n        /** The tag handle length. */\n        size_t handle_length;\n        /** The tag suffix. */\n        yaml_char_t *suffix;\n        /** The tag suffix length. */\n        size_t suffix_length;\n    } tag_data;\n\n    /** Scalar analysis. */\n    struct {\n        /** The scalar value. */\n        yaml_char_t *value;\n        /** The scalar length. */\n        size_t length;\n        /** Does the scalar contain line breaks? */\n        int multiline;\n        /** Can the scalar be expessed in the flow plain style? */\n        int flow_plain_allowed;\n        /** Can the scalar be expressed in the block plain style? */\n        int block_plain_allowed;\n        /** Can the scalar be expressed in the single quoted style? */\n        int single_quoted_allowed;\n        /** Can the scalar be expressed in the literal or folded styles? */\n        int block_allowed;\n        /** The output style. */\n        yaml_scalar_style_t style;\n    } scalar_data;\n\n    /**\n     * @}\n     */\n\n    /**\n     * @name Dumper stuff\n     * @{\n     */\n\n    /** If the stream was already opened? */\n    int opened;\n    /** If the stream was already closed? */\n    int closed;\n\n    /** The information associated with the document nodes. */\n    struct {\n        /** The number of references. */\n        int references;\n        /** The anchor id. */\n        int anchor;\n        /** If the node has been emitted? */\n        int serialized;\n    } *anchors;\n\n    /** The last assigned anchor id. */\n    int last_anchor_id;\n\n    /** The currently emitted document. */\n    yaml_document_t *document;\n\n    /**\n     * @}\n     */\n\n} yaml_emitter_t;\n\n/**\n * Initialize an emitter.\n *\n * This function creates a new emitter object.  An application is responsible\n * for destroying the object using the yaml_emitter_delete() function.\n *\n * @param[out]      emitter     An empty parser object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_initialize(yaml_emitter_t *emitter);\n\n/**\n * Destroy an emitter.\n *\n * @param[in,out]   emitter     An emitter object.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_delete(yaml_emitter_t *emitter);\n\n/**\n * Set a string output.\n *\n * The emitter will write the output characters to the @a output buffer of the\n * size @a size.  The emitter will set @a size_written to the number of written\n * bytes.  If the buffer is smaller than required, the emitter produces the\n * YAML_WRITE_ERROR error.\n *\n * @param[in,out]   emitter         An emitter object.\n * @param[in]       output          An output buffer.\n * @param[in]       size            The buffer size.\n * @param[in]       size_written    The pointer to save the number of written\n *                                  bytes.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output_string(yaml_emitter_t *emitter,\n        unsigned char *output, size_t size, size_t *size_written);\n\n/**\n * Set a file output.\n *\n * @a file should be a file object open for writing.  The application is\n * responsible for closing the @a file.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       file        An open file.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file);\n\n/**\n * Set a generic output handler.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       handler     A write handler.\n * @param[in]       data        Any application data for passing to the write\n *                              handler.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output(yaml_emitter_t *emitter,\n        yaml_write_handler_t *handler, void *data);\n\n/**\n * Set the output encoding.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       encoding    The output encoding.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding);\n\n/**\n * Set if the output should be in the \"canonical\" format as in the YAML\n * specification.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       canonical   If the output is canonical.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical);\n\n/**\n * Set the intendation increment.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       indent      The indentation increment (1 < . < 10).\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_indent(yaml_emitter_t *emitter, int indent);\n\n/**\n * Set the preferred line width. @c -1 means unlimited.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       width       The preferred line width.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_width(yaml_emitter_t *emitter, int width);\n\n/**\n * Set if unescaped non-ASCII characters are allowed.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       unicode     If unescaped Unicode characters are allowed.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode);\n\n/**\n * Set the preferred line break.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in]       line_break  The preferred line break.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break);\n\n/**\n * Emit an event.\n *\n * The event object may be generated using the yaml_parser_parse() function.\n * The emitter takes the responsibility for the event object and destroys its\n * content after it is emitted. The event object is destroyed even if the\n * function fails.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in,out]   event       An event object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);\n\n/**\n * Start a YAML stream.\n *\n * This function should be used before yaml_emitter_dump() is called.\n *\n * @param[in,out]   emitter     An emitter object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_open(yaml_emitter_t *emitter);\n\n/**\n * Finish a YAML stream.\n *\n * This function should be used after yaml_emitter_dump() is called.\n *\n * @param[in,out]   emitter     An emitter object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_close(yaml_emitter_t *emitter);\n\n/**\n * Emit a YAML document.\n *\n * The documen object may be generated using the yaml_parser_load() function\n * or the yaml_document_initialize() function.  The emitter takes the\n * responsibility for the document object and destoys its content after\n * it is emitted. The document object is destroyedeven if the function fails.\n *\n * @param[in,out]   emitter     An emitter object.\n * @param[in,out]   document    A document object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);\n\n/**\n * Flush the accumulated characters to the output.\n *\n * @param[in,out]   emitter     An emitter object.\n *\n * @returns @c 1 if the function succeeded, @c 0 on error.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_flush(yaml_emitter_t *emitter);\n\n/** @} */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* #ifndef YAML_H */\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir)/include\nlib_LTLIBRARIES = libyaml.la\nlibyaml_la_SOURCES = yaml_private.h api.c reader.c scanner.c parser.c loader.c writer.c emitter.c dumper.c\nlibyaml_la_LDFLAGS = -release $(YAML_LT_RELEASE) -version-info $(YAML_LT_CURRENT):$(YAML_LT_REVISION):$(YAML_LT_AGE)\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/Makefile.in",
    "content": "# Makefile.in generated by automake 1.11.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,\n# 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\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = src\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__installdirs = \"$(DESTDIR)$(libdir)\"\nLTLIBRARIES = $(lib_LTLIBRARIES)\nlibyaml_la_LIBADD =\nam_libyaml_la_OBJECTS = api.lo reader.lo scanner.lo parser.lo \\\n\tloader.lo writer.lo emitter.lo dumper.lo\nlibyaml_la_OBJECTS = $(am_libyaml_la_OBJECTS)\nlibyaml_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libyaml_la_LDFLAGS) $(LDFLAGS) -o $@\nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \\\n\t--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \\\n\t$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \\\n\t--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \\\n\t$(LDFLAGS) -o $@\nSOURCES = $(libyaml_la_SOURCES)\nDIST_SOURCES = $(libyaml_la_SOURCES)\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\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@\nDOXYGEN = @DOXYGEN@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nYAML_LT_AGE = @YAML_LT_AGE@\nYAML_LT_CURRENT = @YAML_LT_CURRENT@\nYAML_LT_RELEASE = @YAML_LT_RELEASE@\nYAML_LT_REVISION = @YAML_LT_REVISION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nlt_ECHO = @lt_ECHO@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nAM_CPPFLAGS = -I$(top_srcdir)/include\nlib_LTLIBRARIES = libyaml.la\nlibyaml_la_SOURCES = yaml_private.h api.c reader.c scanner.c parser.c loader.c writer.c emitter.c dumper.c\nlibyaml_la_LDFLAGS = -release $(YAML_LT_RELEASE) -version-info $(YAML_LT_CURRENT):$(YAML_LT_REVISION):$(YAML_LT_AGE)\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign src/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$(am__aclocal_m4_deps):\ninstall-libLTLIBRARIES: $(lib_LTLIBRARIES)\n\t@$(NORMAL_INSTALL)\n\ttest -z \"$(libdir)\" || $(MKDIR_P) \"$(DESTDIR)$(libdir)\"\n\t@list='$(lib_LTLIBRARIES)'; test -n \"$(libdir)\" || list=; \\\n\tlist2=; for p in $$list; do \\\n\t  if test -f $$p; then \\\n\t    list2=\"$$list2 $$p\"; \\\n\t  else :; fi; \\\n\tdone; \\\n\ttest -z \"$$list2\" || { \\\n\t  echo \" $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'\"; \\\n\t  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 \"$(DESTDIR)$(libdir)\"; \\\n\t}\n\nuninstall-libLTLIBRARIES:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(lib_LTLIBRARIES)'; test -n \"$(libdir)\" || list=; \\\n\tfor p in $$list; do \\\n\t  $(am__strip_dir) \\\n\t  echo \" $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'\"; \\\n\t  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f \"$(DESTDIR)$(libdir)/$$f\"; \\\n\tdone\n\nclean-libLTLIBRARIES:\n\t-test -z \"$(lib_LTLIBRARIES)\" || rm -f $(lib_LTLIBRARIES)\n\t@list='$(lib_LTLIBRARIES)'; for p in $$list; do \\\n\t  dir=\"`echo $$p | sed -e 's|/[^/]*$$||'`\"; \\\n\t  test \"$$dir\" != \"$$p\" || dir=.; \\\n\t  echo \"rm -f \\\"$${dir}/so_locations\\\"\"; \\\n\t  rm -f \"$${dir}/so_locations\"; \\\n\tdone\nlibyaml.la: $(libyaml_la_OBJECTS) $(libyaml_la_DEPENDENCIES) \n\t$(libyaml_la_LINK) -rpath $(libdir) $(libyaml_la_OBJECTS) $(libyaml_la_LIBADD) $(LIBS)\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)/api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dumper.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emitter.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loader.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanner.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writer.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po\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@\t$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po\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\n.c.lo:\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\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; nonempty = 1; } \\\n\t      END { if (nonempty) { 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\tset x; \\\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES)\ninstalldirs:\n\tfor dir in \"$(DESTDIR)$(libdir)\"; 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\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libLTLIBRARIES clean-libtool \\\n\tmostlyclean-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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am: install-libLTLIBRARIES\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-libLTLIBRARIES\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \\\n\tclean-libLTLIBRARIES clean-libtool ctags distclean \\\n\tdistclean-compile distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-dvi \\\n\tinstall-dvi-am install-exec install-exec-am install-html \\\n\tinstall-html-am install-info install-info-am \\\n\tinstall-libLTLIBRARIES install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags uninstall uninstall-am uninstall-libLTLIBRARIES\n\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/api.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * Get the library version.\n */\n\nYAML_DECLARE(const char *)\nyaml_get_version_string(void)\n{\n    return YAML_VERSION_STRING;\n}\n\n/*\n * Get the library version numbers.\n */\n\nYAML_DECLARE(void)\nyaml_get_version(int *major, int *minor, int *patch)\n{\n    *major = YAML_VERSION_MAJOR;\n    *minor = YAML_VERSION_MINOR;\n    *patch = YAML_VERSION_PATCH;\n}\n\n/*\n * Allocate a dynamic memory block.\n */\n\nYAML_DECLARE(void *)\nyaml_malloc(size_t size)\n{\n    return malloc(size ? size : 1);\n}\n\n/*\n * Reallocate a dynamic memory block.\n */\n\nYAML_DECLARE(void *)\nyaml_realloc(void *ptr, size_t size)\n{\n    return ptr ? realloc(ptr, size ? size : 1) : malloc(size ? size : 1);\n}\n\n/*\n * Free a dynamic memory block.\n */\n\nYAML_DECLARE(void)\nyaml_free(void *ptr)\n{\n    if (ptr) free(ptr);\n}\n\n/*\n * Duplicate a string.\n */\n\nYAML_DECLARE(yaml_char_t *)\nyaml_strdup(const yaml_char_t *str)\n{\n    if (!str)\n        return NULL;\n\n    return (yaml_char_t *)strdup((char *)str);\n}\n\n/*\n * Extend a string.\n */\n\nYAML_DECLARE(int)\nyaml_string_extend(yaml_char_t **start,\n        yaml_char_t **pointer, yaml_char_t **end)\n{\n    yaml_char_t *new_start = yaml_realloc(*start, (*end - *start)*2);\n\n    if (!new_start) return 0;\n\n    memset(new_start + (*end - *start), 0, *end - *start);\n\n    *pointer = new_start + (*pointer - *start);\n    *end = new_start + (*end - *start)*2;\n    *start = new_start;\n\n    return 1;\n}\n\n/*\n * Append a string B to a string A.\n */\n\nYAML_DECLARE(int)\nyaml_string_join(\n        yaml_char_t **a_start, yaml_char_t **a_pointer, yaml_char_t **a_end,\n        yaml_char_t **b_start, yaml_char_t **b_pointer, yaml_char_t **b_end)\n{\n    if (*b_start == *b_pointer)\n        return 1;\n\n    while (*a_end - *a_pointer <= *b_pointer - *b_start) {\n        if (!yaml_string_extend(a_start, a_pointer, a_end))\n            return 0;\n    }\n\n    memcpy(*a_pointer, *b_start, *b_pointer - *b_start);\n    *a_pointer += *b_pointer - *b_start;\n\n    return 1;\n}\n\n/*\n * Extend a stack.\n */\n\nYAML_DECLARE(int)\nyaml_stack_extend(void **start, void **top, void **end)\n{\n    void *new_start = yaml_realloc(*start, ((char *)*end - (char *)*start)*2);\n\n    if (!new_start) return 0;\n\n    *top = (char *)new_start + ((char *)*top - (char *)*start);\n    *end = (char *)new_start + ((char *)*end - (char *)*start)*2;\n    *start = new_start;\n\n    return 1;\n}\n\n/*\n * Extend or move a queue.\n */\n\nYAML_DECLARE(int)\nyaml_queue_extend(void **start, void **head, void **tail, void **end)\n{\n    /* Check if we need to resize the queue. */\n\n    if (*start == *head && *tail == *end) {\n        void *new_start = yaml_realloc(*start,\n                ((char *)*end - (char *)*start)*2);\n\n        if (!new_start) return 0;\n\n        *head = (char *)new_start + ((char *)*head - (char *)*start);\n        *tail = (char *)new_start + ((char *)*tail - (char *)*start);\n        *end = (char *)new_start + ((char *)*end - (char *)*start)*2;\n        *start = new_start;\n    }\n\n    /* Check if we need to move the queue at the beginning of the buffer. */\n\n    if (*tail == *end) {\n        if (*head != *tail) {\n            memmove(*start, *head, (char *)*tail - (char *)*head);\n        }\n        *tail = (char *)*tail - (char *)*head + (char *)*start;\n        *head = *start;\n    }\n\n    return 1;\n}\n\n\n/*\n * Create a new parser object.\n */\n\nYAML_DECLARE(int)\nyaml_parser_initialize(yaml_parser_t *parser)\n{\n    assert(parser);     /* Non-NULL parser object expected. */\n\n    memset(parser, 0, sizeof(yaml_parser_t));\n    if (!BUFFER_INIT(parser, parser->raw_buffer, INPUT_RAW_BUFFER_SIZE))\n        goto error;\n    if (!BUFFER_INIT(parser, parser->buffer, INPUT_BUFFER_SIZE))\n        goto error;\n    if (!QUEUE_INIT(parser, parser->tokens, INITIAL_QUEUE_SIZE))\n        goto error;\n    if (!STACK_INIT(parser, parser->indents, INITIAL_STACK_SIZE))\n        goto error;\n    if (!STACK_INIT(parser, parser->simple_keys, INITIAL_STACK_SIZE))\n        goto error;\n    if (!STACK_INIT(parser, parser->states, INITIAL_STACK_SIZE))\n        goto error;\n    if (!STACK_INIT(parser, parser->marks, INITIAL_STACK_SIZE))\n        goto error;\n    if (!STACK_INIT(parser, parser->tag_directives, INITIAL_STACK_SIZE))\n        goto error;\n\n    return 1;\n\nerror:\n\n    BUFFER_DEL(parser, parser->raw_buffer);\n    BUFFER_DEL(parser, parser->buffer);\n    QUEUE_DEL(parser, parser->tokens);\n    STACK_DEL(parser, parser->indents);\n    STACK_DEL(parser, parser->simple_keys);\n    STACK_DEL(parser, parser->states);\n    STACK_DEL(parser, parser->marks);\n    STACK_DEL(parser, parser->tag_directives);\n\n    return 0;\n}\n\n/*\n * Destroy a parser object.\n */\n\nYAML_DECLARE(void)\nyaml_parser_delete(yaml_parser_t *parser)\n{\n    assert(parser); /* Non-NULL parser object expected. */\n\n    BUFFER_DEL(parser, parser->raw_buffer);\n    BUFFER_DEL(parser, parser->buffer);\n    while (!QUEUE_EMPTY(parser, parser->tokens)) {\n        yaml_token_delete(&DEQUEUE(parser, parser->tokens));\n    }\n    QUEUE_DEL(parser, parser->tokens);\n    STACK_DEL(parser, parser->indents);\n    STACK_DEL(parser, parser->simple_keys);\n    STACK_DEL(parser, parser->states);\n    STACK_DEL(parser, parser->marks);\n    while (!STACK_EMPTY(parser, parser->tag_directives)) {\n        yaml_tag_directive_t tag_directive = POP(parser, parser->tag_directives);\n        yaml_free(tag_directive.handle);\n        yaml_free(tag_directive.prefix);\n    }\n    STACK_DEL(parser, parser->tag_directives);\n\n    memset(parser, 0, sizeof(yaml_parser_t));\n}\n\n/*\n * String read handler.\n */\n\nstatic int\nyaml_string_read_handler(void *data, unsigned char *buffer, size_t size,\n        size_t *size_read)\n{\n    yaml_parser_t *parser = data;\n\n    if (parser->input.string.current == parser->input.string.end) {\n        *size_read = 0;\n        return 1;\n    }\n\n    if (size > (size_t)(parser->input.string.end\n                - parser->input.string.current)) {\n        size = parser->input.string.end - parser->input.string.current;\n    }\n\n    memcpy(buffer, parser->input.string.current, size);\n    parser->input.string.current += size;\n    *size_read = size;\n    return 1;\n}\n\n/*\n * File read handler.\n */\n\nstatic int\nyaml_file_read_handler(void *data, unsigned char *buffer, size_t size,\n        size_t *size_read)\n{\n    yaml_parser_t *parser = data;\n\n    *size_read = fread(buffer, 1, size, parser->input.file);\n    return !ferror(parser->input.file);\n}\n\n/*\n * Set a string input.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input_string(yaml_parser_t *parser,\n        const unsigned char *input, size_t size)\n{\n    assert(parser); /* Non-NULL parser object expected. */\n    assert(!parser->read_handler);  /* You can set the source only once. */\n    assert(input);  /* Non-NULL input string expected. */\n\n    parser->read_handler = yaml_string_read_handler;\n    parser->read_handler_data = parser;\n\n    parser->input.string.start = input;\n    parser->input.string.current = input;\n    parser->input.string.end = input+size;\n}\n\n/*\n * Set a file input.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input_file(yaml_parser_t *parser, FILE *file)\n{\n    assert(parser); /* Non-NULL parser object expected. */\n    assert(!parser->read_handler);  /* You can set the source only once. */\n    assert(file);   /* Non-NULL file object expected. */\n\n    parser->read_handler = yaml_file_read_handler;\n    parser->read_handler_data = parser;\n\n    parser->input.file = file;\n}\n\n/*\n * Set a generic input.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_input(yaml_parser_t *parser,\n        yaml_read_handler_t *handler, void *data)\n{\n    assert(parser); /* Non-NULL parser object expected. */\n    assert(!parser->read_handler);  /* You can set the source only once. */\n    assert(handler);    /* Non-NULL read handler expected. */\n\n    parser->read_handler = handler;\n    parser->read_handler_data = data;\n}\n\n/*\n * Set the source encoding.\n */\n\nYAML_DECLARE(void)\nyaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding)\n{\n    assert(parser); /* Non-NULL parser object expected. */\n    assert(!parser->encoding); /* Encoding is already set or detected. */\n\n    parser->encoding = encoding;\n}\n\n/*\n * Create a new emitter object.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_initialize(yaml_emitter_t *emitter)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    memset(emitter, 0, sizeof(yaml_emitter_t));\n    if (!BUFFER_INIT(emitter, emitter->buffer, OUTPUT_BUFFER_SIZE))\n        goto error;\n    if (!BUFFER_INIT(emitter, emitter->raw_buffer, OUTPUT_RAW_BUFFER_SIZE))\n        goto error;\n    if (!STACK_INIT(emitter, emitter->states, INITIAL_STACK_SIZE))\n        goto error;\n    if (!QUEUE_INIT(emitter, emitter->events, INITIAL_QUEUE_SIZE))\n        goto error;\n    if (!STACK_INIT(emitter, emitter->indents, INITIAL_STACK_SIZE))\n        goto error;\n    if (!STACK_INIT(emitter, emitter->tag_directives, INITIAL_STACK_SIZE))\n        goto error;\n\n    return 1;\n\nerror:\n\n    BUFFER_DEL(emitter, emitter->buffer);\n    BUFFER_DEL(emitter, emitter->raw_buffer);\n    STACK_DEL(emitter, emitter->states);\n    QUEUE_DEL(emitter, emitter->events);\n    STACK_DEL(emitter, emitter->indents);\n    STACK_DEL(emitter, emitter->tag_directives);\n\n    return 0;\n}\n\n/*\n * Destroy an emitter object.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_delete(yaml_emitter_t *emitter)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    BUFFER_DEL(emitter, emitter->buffer);\n    BUFFER_DEL(emitter, emitter->raw_buffer);\n    STACK_DEL(emitter, emitter->states);\n    while (!QUEUE_EMPTY(emitter, emitter->events)) {\n        yaml_event_delete(&DEQUEUE(emitter, emitter->events));\n    }\n    QUEUE_DEL(emitter, emitter->events);\n    STACK_DEL(emitter, emitter->indents);\n    while (!STACK_EMPTY(empty, emitter->tag_directives)) {\n        yaml_tag_directive_t tag_directive = POP(emitter, emitter->tag_directives);\n        yaml_free(tag_directive.handle);\n        yaml_free(tag_directive.prefix);\n    }\n    STACK_DEL(emitter, emitter->tag_directives);\n    yaml_free(emitter->anchors);\n\n    memset(emitter, 0, sizeof(yaml_emitter_t));\n}\n\n/*\n * String write handler.\n */\n\nstatic int\nyaml_string_write_handler(void *data, unsigned char *buffer, size_t size)\n{\n    yaml_emitter_t *emitter = data;\n\n    if (emitter->output.string.size + *emitter->output.string.size_written\n            < size) {\n        memcpy(emitter->output.string.buffer\n                + *emitter->output.string.size_written,\n                buffer,\n                emitter->output.string.size\n                - *emitter->output.string.size_written);\n        *emitter->output.string.size_written = emitter->output.string.size;\n        return 0;\n    }\n\n    memcpy(emitter->output.string.buffer\n            + *emitter->output.string.size_written, buffer, size);\n    *emitter->output.string.size_written += size;\n    return 1;\n}\n\n/*\n * File write handler.\n */\n\nstatic int\nyaml_file_write_handler(void *data, unsigned char *buffer, size_t size)\n{\n    yaml_emitter_t *emitter = data;\n\n    return (fwrite(buffer, 1, size, emitter->output.file) == size);\n}\n/*\n * Set a string output.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output_string(yaml_emitter_t *emitter,\n        unsigned char *output, size_t size, size_t *size_written)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n    assert(!emitter->write_handler);    /* You can set the output only once. */\n    assert(output);     /* Non-NULL output string expected. */\n\n    emitter->write_handler = yaml_string_write_handler;\n    emitter->write_handler_data = emitter;\n\n    emitter->output.string.buffer = output;\n    emitter->output.string.size = size;\n    emitter->output.string.size_written = size_written;\n    *size_written = 0;\n}\n\n/*\n * Set a file output.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output_file(yaml_emitter_t *emitter, FILE *file)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n    assert(!emitter->write_handler);    /* You can set the output only once. */\n    assert(file);       /* Non-NULL file object expected. */\n\n    emitter->write_handler = yaml_file_write_handler;\n    emitter->write_handler_data = emitter;\n\n    emitter->output.file = file;\n}\n\n/*\n * Set a generic output handler.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_output(yaml_emitter_t *emitter,\n        yaml_write_handler_t *handler, void *data)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n    assert(!emitter->write_handler);    /* You can set the output only once. */\n    assert(handler);    /* Non-NULL handler object expected. */\n\n    emitter->write_handler = handler;\n    emitter->write_handler_data = data;\n}\n\n/*\n * Set the output encoding.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_encoding(yaml_emitter_t *emitter, yaml_encoding_t encoding)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n    assert(!emitter->encoding);     /* You can set encoding only once. */\n\n    emitter->encoding = encoding;\n}\n\n/*\n * Set the canonical output style.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_canonical(yaml_emitter_t *emitter, int canonical)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    emitter->canonical = (canonical != 0);\n}\n\n/*\n * Set the indentation increment.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_indent(yaml_emitter_t *emitter, int indent)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    emitter->best_indent = (1 < indent && indent < 10) ? indent : 2;\n}\n\n/*\n * Set the preferred line width.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_width(yaml_emitter_t *emitter, int width)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    emitter->best_width = (width >= 0) ? width : -1;\n}\n\n/*\n * Set if unescaped non-ASCII characters are allowed.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_unicode(yaml_emitter_t *emitter, int unicode)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    emitter->unicode = (unicode != 0);\n}\n\n/*\n * Set the preferred line break character.\n */\n\nYAML_DECLARE(void)\nyaml_emitter_set_break(yaml_emitter_t *emitter, yaml_break_t line_break)\n{\n    assert(emitter);    /* Non-NULL emitter object expected. */\n\n    emitter->line_break = line_break;\n}\n\n/*\n * Destroy a token object.\n */\n\nYAML_DECLARE(void)\nyaml_token_delete(yaml_token_t *token)\n{\n    assert(token);  /* Non-NULL token object expected. */\n\n    switch (token->type)\n    {\n        case YAML_TAG_DIRECTIVE_TOKEN:\n            yaml_free(token->data.tag_directive.handle);\n            yaml_free(token->data.tag_directive.prefix);\n            break;\n\n        case YAML_ALIAS_TOKEN:\n            yaml_free(token->data.alias.value);\n            break;\n\n        case YAML_ANCHOR_TOKEN:\n            yaml_free(token->data.anchor.value);\n            break;\n\n        case YAML_TAG_TOKEN:\n            yaml_free(token->data.tag.handle);\n            yaml_free(token->data.tag.suffix);\n            break;\n\n        case YAML_SCALAR_TOKEN:\n            yaml_free(token->data.scalar.value);\n            break;\n\n        default:\n            break;\n    }\n\n    memset(token, 0, sizeof(yaml_token_t));\n}\n\n/*\n * Check if a string is a valid UTF-8 sequence.\n *\n * Check 'reader.c' for more details on UTF-8 encoding.\n */\n\nstatic int\nyaml_check_utf8(yaml_char_t *start, size_t length)\n{\n    yaml_char_t *end = start+length;\n    yaml_char_t *pointer = start;\n\n    while (pointer < end) {\n        unsigned char octet;\n        unsigned int width;\n        unsigned int value;\n        size_t k;\n\n        octet = pointer[0];\n        width = (octet & 0x80) == 0x00 ? 1 :\n                (octet & 0xE0) == 0xC0 ? 2 :\n                (octet & 0xF0) == 0xE0 ? 3 :\n                (octet & 0xF8) == 0xF0 ? 4 : 0;\n        value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n                (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n                (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n        if (!width) return 0;\n        if (pointer+width > end) return 0;\n        for (k = 1; k < width; k ++) {\n            octet = pointer[k];\n            if ((octet & 0xC0) != 0x80) return 0;\n            value = (value << 6) + (octet & 0x3F);\n        }\n        if (!((width == 1) ||\n            (width == 2 && value >= 0x80) ||\n            (width == 3 && value >= 0x800) ||\n            (width == 4 && value >= 0x10000))) return 0;\n\n        pointer += width;\n    }\n\n    return 1;\n}\n\n/*\n * Create STREAM-START.\n */\n\nYAML_DECLARE(int)\nyaml_stream_start_event_initialize(yaml_event_t *event,\n        yaml_encoding_t encoding)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(event);  /* Non-NULL event object is expected. */\n\n    STREAM_START_EVENT_INIT(*event, encoding, mark, mark);\n\n    return 1;\n}\n\n/*\n * Create STREAM-END.\n */\n\nYAML_DECLARE(int)\nyaml_stream_end_event_initialize(yaml_event_t *event)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(event);  /* Non-NULL event object is expected. */\n\n    STREAM_END_EVENT_INIT(*event, mark, mark);\n\n    return 1;\n}\n\n/*\n * Create DOCUMENT-START.\n */\n\nYAML_DECLARE(int)\nyaml_document_start_event_initialize(yaml_event_t *event,\n        yaml_version_directive_t *version_directive,\n        yaml_tag_directive_t *tag_directives_start,\n        yaml_tag_directive_t *tag_directives_end,\n        int implicit)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_version_directive_t *version_directive_copy = NULL;\n    struct {\n        yaml_tag_directive_t *start;\n        yaml_tag_directive_t *end;\n        yaml_tag_directive_t *top;\n    } tag_directives_copy = { NULL, NULL, NULL };\n    yaml_tag_directive_t value = { NULL, NULL };\n\n    assert(event);          /* Non-NULL event object is expected. */\n    assert((tag_directives_start && tag_directives_end) ||\n            (tag_directives_start == tag_directives_end));\n                            /* Valid tag directives are expected. */\n\n    if (version_directive) {\n        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t));\n        if (!version_directive_copy) goto error;\n        version_directive_copy->major = version_directive->major;\n        version_directive_copy->minor = version_directive->minor;\n    }\n\n    if (tag_directives_start != tag_directives_end) {\n        yaml_tag_directive_t *tag_directive;\n        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))\n            goto error;\n        for (tag_directive = tag_directives_start;\n                tag_directive != tag_directives_end; tag_directive ++) {\n            assert(tag_directive->handle);\n            assert(tag_directive->prefix);\n            if (!yaml_check_utf8(tag_directive->handle,\n                        strlen((char *)tag_directive->handle)))\n                goto error;\n            if (!yaml_check_utf8(tag_directive->prefix,\n                        strlen((char *)tag_directive->prefix)))\n                goto error;\n            value.handle = yaml_strdup(tag_directive->handle);\n            value.prefix = yaml_strdup(tag_directive->prefix);\n            if (!value.handle || !value.prefix) goto error;\n            if (!PUSH(&context, tag_directives_copy, value))\n                goto error;\n            value.handle = NULL;\n            value.prefix = NULL;\n        }\n    }\n\n    DOCUMENT_START_EVENT_INIT(*event, version_directive_copy,\n            tag_directives_copy.start, tag_directives_copy.top,\n            implicit, mark, mark);\n\n    return 1;\n\nerror:\n    yaml_free(version_directive_copy);\n    while (!STACK_EMPTY(context, tag_directives_copy)) {\n        yaml_tag_directive_t value = POP(context, tag_directives_copy);\n        yaml_free(value.handle);\n        yaml_free(value.prefix);\n    }\n    STACK_DEL(context, tag_directives_copy);\n    yaml_free(value.handle);\n    yaml_free(value.prefix);\n\n    return 0;\n}\n\n/*\n * Create DOCUMENT-END.\n */\n\nYAML_DECLARE(int)\nyaml_document_end_event_initialize(yaml_event_t *event, int implicit)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(event);      /* Non-NULL emitter object is expected. */\n\n    DOCUMENT_END_EVENT_INIT(*event, implicit, mark, mark);\n\n    return 1;\n}\n\n/*\n * Create ALIAS.\n */\n\nYAML_DECLARE(int)\nyaml_alias_event_initialize(yaml_event_t *event, yaml_char_t *anchor)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *anchor_copy = NULL;\n\n    assert(event);      /* Non-NULL event object is expected. */\n    assert(anchor);     /* Non-NULL anchor is expected. */\n\n    if (!yaml_check_utf8(anchor, strlen((char *)anchor))) return 0;\n\n    anchor_copy = yaml_strdup(anchor);\n    if (!anchor_copy)\n        return 0;\n\n    ALIAS_EVENT_INIT(*event, anchor_copy, mark, mark);\n\n    return 1;\n}\n\n/*\n * Create SCALAR.\n */\n\nYAML_DECLARE(int)\nyaml_scalar_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag,\n        yaml_char_t *value, int length,\n        int plain_implicit, int quoted_implicit,\n        yaml_scalar_style_t style)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *anchor_copy = NULL;\n    yaml_char_t *tag_copy = NULL;\n    yaml_char_t *value_copy = NULL;\n\n    assert(event);      /* Non-NULL event object is expected. */\n    assert(value);      /* Non-NULL anchor is expected. */\n\n    if (anchor) {\n        if (!yaml_check_utf8(anchor, strlen((char *)anchor))) goto error;\n        anchor_copy = yaml_strdup(anchor);\n        if (!anchor_copy) goto error;\n    }\n\n    if (tag) {\n        if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n        tag_copy = yaml_strdup(tag);\n        if (!tag_copy) goto error;\n    }\n\n    if (length < 0) {\n        length = (int) strlen((char *)value);\n    }\n\n    if (!yaml_check_utf8(value, length)) goto error;\n    value_copy = yaml_malloc(length+1);\n    if (!value_copy) goto error;\n    memcpy(value_copy, value, length);\n    value_copy[length] = '\\0';\n\n    SCALAR_EVENT_INIT(*event, anchor_copy, tag_copy, value_copy, length,\n            plain_implicit, quoted_implicit, style, mark, mark);\n\n    return 1;\n\nerror:\n    yaml_free(anchor_copy);\n    yaml_free(tag_copy);\n    yaml_free(value_copy);\n\n    return 0;\n}\n\n/*\n * Create SEQUENCE-START.\n */\n\nYAML_DECLARE(int)\nyaml_sequence_start_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag, int implicit,\n        yaml_sequence_style_t style)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *anchor_copy = NULL;\n    yaml_char_t *tag_copy = NULL;\n\n    assert(event);      /* Non-NULL event object is expected. */\n\n    if (anchor) {\n        if (!yaml_check_utf8(anchor, strlen((char *)anchor))) goto error;\n        anchor_copy = yaml_strdup(anchor);\n        if (!anchor_copy) goto error;\n    }\n\n    if (tag) {\n        if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n        tag_copy = yaml_strdup(tag);\n        if (!tag_copy) goto error;\n    }\n\n    SEQUENCE_START_EVENT_INIT(*event, anchor_copy, tag_copy,\n            implicit, style, mark, mark);\n\n    return 1;\n\nerror:\n    yaml_free(anchor_copy);\n    yaml_free(tag_copy);\n\n    return 0;\n}\n\n/*\n * Create SEQUENCE-END.\n */\n\nYAML_DECLARE(int)\nyaml_sequence_end_event_initialize(yaml_event_t *event)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(event);      /* Non-NULL event object is expected. */\n\n    SEQUENCE_END_EVENT_INIT(*event, mark, mark);\n\n    return 1;\n}\n\n/*\n * Create MAPPING-START.\n */\n\nYAML_DECLARE(int)\nyaml_mapping_start_event_initialize(yaml_event_t *event,\n        yaml_char_t *anchor, yaml_char_t *tag, int implicit,\n        yaml_mapping_style_t style)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *anchor_copy = NULL;\n    yaml_char_t *tag_copy = NULL;\n\n    assert(event);      /* Non-NULL event object is expected. */\n\n    if (anchor) {\n        if (!yaml_check_utf8(anchor, strlen((char *)anchor))) goto error;\n        anchor_copy = yaml_strdup(anchor);\n        if (!anchor_copy) goto error;\n    }\n\n    if (tag) {\n        if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n        tag_copy = yaml_strdup(tag);\n        if (!tag_copy) goto error;\n    }\n\n    MAPPING_START_EVENT_INIT(*event, anchor_copy, tag_copy,\n            implicit, style, mark, mark);\n\n    return 1;\n\nerror:\n    yaml_free(anchor_copy);\n    yaml_free(tag_copy);\n\n    return 0;\n}\n\n/*\n * Create MAPPING-END.\n */\n\nYAML_DECLARE(int)\nyaml_mapping_end_event_initialize(yaml_event_t *event)\n{\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(event);      /* Non-NULL event object is expected. */\n\n    MAPPING_END_EVENT_INIT(*event, mark, mark);\n\n    return 1;\n}\n\n/*\n * Destroy an event object.\n */\n\nYAML_DECLARE(void)\nyaml_event_delete(yaml_event_t *event)\n{\n    yaml_tag_directive_t *tag_directive;\n\n    assert(event);  /* Non-NULL event object expected. */\n\n    switch (event->type)\n    {\n        case YAML_DOCUMENT_START_EVENT:\n            yaml_free(event->data.document_start.version_directive);\n            for (tag_directive = event->data.document_start.tag_directives.start;\n                    tag_directive != event->data.document_start.tag_directives.end;\n                    tag_directive++) {\n                yaml_free(tag_directive->handle);\n                yaml_free(tag_directive->prefix);\n            }\n            yaml_free(event->data.document_start.tag_directives.start);\n            break;\n\n        case YAML_ALIAS_EVENT:\n            yaml_free(event->data.alias.anchor);\n            break;\n\n        case YAML_SCALAR_EVENT:\n            yaml_free(event->data.scalar.anchor);\n            yaml_free(event->data.scalar.tag);\n            yaml_free(event->data.scalar.value);\n            break;\n\n        case YAML_SEQUENCE_START_EVENT:\n            yaml_free(event->data.sequence_start.anchor);\n            yaml_free(event->data.sequence_start.tag);\n            break;\n\n        case YAML_MAPPING_START_EVENT:\n            yaml_free(event->data.mapping_start.anchor);\n            yaml_free(event->data.mapping_start.tag);\n            break;\n\n        default:\n            break;\n    }\n\n    memset(event, 0, sizeof(yaml_event_t));\n}\n\n/*\n * Create a document object.\n */\n\nYAML_DECLARE(int)\nyaml_document_initialize(yaml_document_t *document,\n        yaml_version_directive_t *version_directive,\n        yaml_tag_directive_t *tag_directives_start,\n        yaml_tag_directive_t *tag_directives_end,\n        int start_implicit, int end_implicit)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    struct {\n        yaml_node_t *start;\n        yaml_node_t *end;\n        yaml_node_t *top;\n    } nodes = { NULL, NULL, NULL };\n    yaml_version_directive_t *version_directive_copy = NULL;\n    struct {\n        yaml_tag_directive_t *start;\n        yaml_tag_directive_t *end;\n        yaml_tag_directive_t *top;\n    } tag_directives_copy = { NULL, NULL, NULL };\n    yaml_tag_directive_t value = { NULL, NULL };\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(document);       /* Non-NULL document object is expected. */\n    assert((tag_directives_start && tag_directives_end) ||\n            (tag_directives_start == tag_directives_end));\n                            /* Valid tag directives are expected. */\n\n    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error;\n\n    if (version_directive) {\n        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t));\n        if (!version_directive_copy) goto error;\n        version_directive_copy->major = version_directive->major;\n        version_directive_copy->minor = version_directive->minor;\n    }\n\n    if (tag_directives_start != tag_directives_end) {\n        yaml_tag_directive_t *tag_directive;\n        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))\n            goto error;\n        for (tag_directive = tag_directives_start;\n                tag_directive != tag_directives_end; tag_directive ++) {\n            assert(tag_directive->handle);\n            assert(tag_directive->prefix);\n            if (!yaml_check_utf8(tag_directive->handle,\n                        strlen((char *)tag_directive->handle)))\n                goto error;\n            if (!yaml_check_utf8(tag_directive->prefix,\n                        strlen((char *)tag_directive->prefix)))\n                goto error;\n            value.handle = yaml_strdup(tag_directive->handle);\n            value.prefix = yaml_strdup(tag_directive->prefix);\n            if (!value.handle || !value.prefix) goto error;\n            if (!PUSH(&context, tag_directives_copy, value))\n                goto error;\n            value.handle = NULL;\n            value.prefix = NULL;\n        }\n    }\n\n    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,\n            tag_directives_copy.start, tag_directives_copy.top,\n            start_implicit, end_implicit, mark, mark);\n\n    return 1;\n\nerror:\n    STACK_DEL(&context, nodes);\n    yaml_free(version_directive_copy);\n    while (!STACK_EMPTY(&context, tag_directives_copy)) {\n        yaml_tag_directive_t value = POP(&context, tag_directives_copy);\n        yaml_free(value.handle);\n        yaml_free(value.prefix);\n    }\n    STACK_DEL(&context, tag_directives_copy);\n    yaml_free(value.handle);\n    yaml_free(value.prefix);\n\n    return 0;\n}\n\n/*\n * Destroy a document object.\n */\n\nYAML_DECLARE(void)\nyaml_document_delete(yaml_document_t *document)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    yaml_tag_directive_t *tag_directive;\n\n    context.error = YAML_NO_ERROR;  /* Eliminate a compliler warning. */\n\n    assert(document);   /* Non-NULL document object is expected. */\n\n    while (!STACK_EMPTY(&context, document->nodes)) {\n        yaml_node_t node = POP(&context, document->nodes);\n        yaml_free(node.tag);\n        switch (node.type) {\n            case YAML_SCALAR_NODE:\n                yaml_free(node.data.scalar.value);\n                break;\n            case YAML_SEQUENCE_NODE:\n                STACK_DEL(&context, node.data.sequence.items);\n                break;\n            case YAML_MAPPING_NODE:\n                STACK_DEL(&context, node.data.mapping.pairs);\n                break;\n            default:\n                assert(0);  /* Should not happen. */\n        }\n    }\n    STACK_DEL(&context, document->nodes);\n\n    yaml_free(document->version_directive);\n    for (tag_directive = document->tag_directives.start;\n            tag_directive != document->tag_directives.end;\n            tag_directive++) {\n        yaml_free(tag_directive->handle);\n        yaml_free(tag_directive->prefix);\n    }\n    yaml_free(document->tag_directives.start);\n\n    memset(document, 0, sizeof(yaml_document_t));\n}\n\n/**\n * Get a document node.\n */\n\nYAML_DECLARE(yaml_node_t *)\nyaml_document_get_node(yaml_document_t *document, int index)\n{\n    assert(document);   /* Non-NULL document object is expected. */\n\n    if (index > 0 && document->nodes.start + index <= document->nodes.top) {\n        return document->nodes.start + index - 1;\n    }\n    return NULL;\n}\n\n/**\n * Get the root object.\n */\n\nYAML_DECLARE(yaml_node_t *)\nyaml_document_get_root_node(yaml_document_t *document)\n{\n    assert(document);   /* Non-NULL document object is expected. */\n\n    if (document->nodes.top != document->nodes.start) {\n        return document->nodes.start;\n    }\n    return NULL;\n}\n\n/*\n * Add a scalar node to a document.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_scalar(yaml_document_t *document,\n        yaml_char_t *tag, yaml_char_t *value, int length,\n        yaml_scalar_style_t style)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *tag_copy = NULL;\n    yaml_char_t *value_copy = NULL;\n    yaml_node_t node;\n\n    assert(document);   /* Non-NULL document object is expected. */\n    assert(value);      /* Non-NULL value is expected. */\n\n    if (!tag) {\n        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG;\n    }\n\n    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n    tag_copy = yaml_strdup(tag);\n    if (!tag_copy) goto error;\n\n    if (length < 0) {\n        length = (int) strlen((char *)value);\n    }\n\n    if (!yaml_check_utf8(value, length)) goto error;\n    value_copy = yaml_malloc(length+1);\n    if (!value_copy) goto error;\n    memcpy(value_copy, value, length);\n    value_copy[length] = '\\0';\n\n    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark);\n    if (!PUSH(&context, document->nodes, node)) goto error;\n\n    return (int) (document->nodes.top - document->nodes.start);\n\nerror:\n    yaml_free(tag_copy);\n    yaml_free(value_copy);\n\n    return 0;\n}\n\n/*\n * Add a sequence node to a document.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_sequence(yaml_document_t *document,\n        yaml_char_t *tag, yaml_sequence_style_t style)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *tag_copy = NULL;\n    struct {\n        yaml_node_item_t *start;\n        yaml_node_item_t *end;\n        yaml_node_item_t *top;\n    } items = { NULL, NULL, NULL };\n    yaml_node_t node;\n\n    assert(document);   /* Non-NULL document object is expected. */\n\n    if (!tag) {\n        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG;\n    }\n\n    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n    tag_copy = yaml_strdup(tag);\n    if (!tag_copy) goto error;\n\n    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error;\n\n    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,\n            style, mark, mark);\n    if (!PUSH(&context, document->nodes, node)) goto error;\n\n    return (int) (document->nodes.top - document->nodes.start);\n\nerror:\n    STACK_DEL(&context, items);\n    yaml_free(tag_copy);\n\n    return 0;\n}\n\n/*\n * Add a mapping node to a document.\n */\n\nYAML_DECLARE(int)\nyaml_document_add_mapping(yaml_document_t *document,\n        yaml_char_t *tag, yaml_mapping_style_t style)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n    yaml_mark_t mark = { 0, 0, 0 };\n    yaml_char_t *tag_copy = NULL;\n    struct {\n        yaml_node_pair_t *start;\n        yaml_node_pair_t *end;\n        yaml_node_pair_t *top;\n    } pairs = { NULL, NULL, NULL };\n    yaml_node_t node;\n\n    assert(document);   /* Non-NULL document object is expected. */\n\n    if (!tag) {\n        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG;\n    }\n\n    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error;\n    tag_copy = yaml_strdup(tag);\n    if (!tag_copy) goto error;\n\n    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error;\n\n    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,\n            style, mark, mark);\n    if (!PUSH(&context, document->nodes, node)) goto error;\n\n    return (int) (document->nodes.top - document->nodes.start);\n\nerror:\n    STACK_DEL(&context, pairs);\n    yaml_free(tag_copy);\n\n    return 0;\n}\n\n/*\n * Append an item to a sequence node.\n */\n\nYAML_DECLARE(int)\nyaml_document_append_sequence_item(yaml_document_t *document,\n        int sequence, int item)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n\n    assert(document);       /* Non-NULL document is required. */\n    assert(sequence > 0\n            && document->nodes.start + sequence <= document->nodes.top);\n                            /* Valid sequence id is required. */\n    assert(document->nodes.start[sequence-1].type == YAML_SEQUENCE_NODE);\n                            /* A sequence node is required. */\n    assert(item > 0 && document->nodes.start + item <= document->nodes.top);\n                            /* Valid item id is required. */\n\n    if (!PUSH(&context,\n                document->nodes.start[sequence-1].data.sequence.items, item))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Append a pair of a key and a value to a mapping node.\n */\n\nYAML_DECLARE(int)\nyaml_document_append_mapping_pair(yaml_document_t *document,\n        int mapping, int key, int value)\n{\n    struct {\n        yaml_error_type_t error;\n    } context;\n\n    yaml_node_pair_t pair;\n\n    assert(document);       /* Non-NULL document is required. */\n    assert(mapping > 0\n            && document->nodes.start + mapping <= document->nodes.top);\n                            /* Valid mapping id is required. */\n    assert(document->nodes.start[mapping-1].type == YAML_MAPPING_NODE);\n                            /* A mapping node is required. */\n    assert(key > 0 && document->nodes.start + key <= document->nodes.top);\n                            /* Valid key id is required. */\n    assert(value > 0 && document->nodes.start + value <= document->nodes.top);\n                            /* Valid value id is required. */\n\n    pair.key = key;\n    pair.value = value;\n\n    if (!PUSH(&context,\n                document->nodes.start[mapping-1].data.mapping.pairs, pair))\n        return 0;\n\n    return 1;\n}\n\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/dumper.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * API functions.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_open(yaml_emitter_t *emitter);\n\nYAML_DECLARE(int)\nyaml_emitter_close(yaml_emitter_t *emitter);\n\nYAML_DECLARE(int)\nyaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document);\n\n/*\n * Clean up functions.\n */\n\nstatic void\nyaml_emitter_delete_document_and_anchors(yaml_emitter_t *emitter);\n\n/*\n * Anchor functions.\n */\n\nstatic void\nyaml_emitter_anchor_node(yaml_emitter_t *emitter, int index);\n\nstatic yaml_char_t *\nyaml_emitter_generate_anchor(yaml_emitter_t *emitter, int anchor_id);\n\n\n/*\n * Serialize functions.\n */\n\nstatic int\nyaml_emitter_dump_node(yaml_emitter_t *emitter, int index);\n\nstatic int\nyaml_emitter_dump_alias(yaml_emitter_t *emitter, yaml_char_t *anchor);\n\nstatic int\nyaml_emitter_dump_scalar(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor);\n\nstatic int\nyaml_emitter_dump_sequence(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor);\n\nstatic int\nyaml_emitter_dump_mapping(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor);\n\n/*\n * Issue a STREAM-START event.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_open(yaml_emitter_t *emitter)\n{\n    yaml_event_t event;\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(emitter);            /* Non-NULL emitter object is required. */\n    assert(!emitter->opened);   /* Emitter should not be opened yet. */\n\n    STREAM_START_EVENT_INIT(event, YAML_ANY_ENCODING, mark, mark);\n\n    if (!yaml_emitter_emit(emitter, &event)) {\n        return 0;\n    }\n\n    emitter->opened = 1;\n\n    return 1;\n}\n\n/*\n * Issue a STREAM-END event.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_close(yaml_emitter_t *emitter)\n{\n    yaml_event_t event;\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(emitter);            /* Non-NULL emitter object is required. */\n    assert(emitter->opened);    /* Emitter should be opened. */\n\n    if (emitter->closed) return 1;\n\n    STREAM_END_EVENT_INIT(event, mark, mark);\n\n    if (!yaml_emitter_emit(emitter, &event)) {\n        return 0;\n    }\n\n    emitter->closed = 1;\n\n    return 1;\n}\n\n/*\n * Dump a YAML document.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_dump(yaml_emitter_t *emitter, yaml_document_t *document)\n{\n    yaml_event_t event;\n    yaml_mark_t mark = { 0, 0, 0 };\n\n    assert(emitter);            /* Non-NULL emitter object is required. */\n    assert(document);           /* Non-NULL emitter object is expected. */\n\n    emitter->document = document;\n\n    if (!emitter->opened) {\n        if (!yaml_emitter_open(emitter)) goto error;\n    }\n\n    if (STACK_EMPTY(emitter, document->nodes)) {\n        if (!yaml_emitter_close(emitter)) goto error;\n        yaml_emitter_delete_document_and_anchors(emitter);\n        return 1;\n    }\n\n    assert(emitter->opened);    /* Emitter should be opened. */\n\n    emitter->anchors = yaml_malloc(sizeof(*(emitter->anchors))\n            * (document->nodes.top - document->nodes.start));\n    if (!emitter->anchors) goto error;\n    memset(emitter->anchors, 0, sizeof(*(emitter->anchors))\n            * (document->nodes.top - document->nodes.start));\n\n    DOCUMENT_START_EVENT_INIT(event, document->version_directive,\n            document->tag_directives.start, document->tag_directives.end,\n            document->start_implicit, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) goto error;\n\n    yaml_emitter_anchor_node(emitter, 1);\n    if (!yaml_emitter_dump_node(emitter, 1)) goto error;\n\n    DOCUMENT_END_EVENT_INIT(event, document->end_implicit, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) goto error;\n\n    yaml_emitter_delete_document_and_anchors(emitter);\n\n    return 1;\n\nerror:\n\n    yaml_emitter_delete_document_and_anchors(emitter);\n\n    return 0;\n}\n\n/*\n * Clean up the emitter object after a document is dumped.\n */\n\nstatic void\nyaml_emitter_delete_document_and_anchors(yaml_emitter_t *emitter)\n{\n    int index;\n\n    if (!emitter->anchors) {\n        yaml_document_delete(emitter->document);\n        emitter->document = NULL;\n        return;\n    }\n\n    for (index = 0; emitter->document->nodes.start + index\n            < emitter->document->nodes.top; index ++) {\n        yaml_node_t node = emitter->document->nodes.start[index];\n        if (!emitter->anchors[index].serialized) {\n            yaml_free(node.tag);\n            if (node.type == YAML_SCALAR_NODE) {\n                yaml_free(node.data.scalar.value);\n            }\n        }\n        if (node.type == YAML_SEQUENCE_NODE) {\n            STACK_DEL(emitter, node.data.sequence.items);\n        }\n        if (node.type == YAML_MAPPING_NODE) {\n            STACK_DEL(emitter, node.data.mapping.pairs);\n        }\n    }\n\n    STACK_DEL(emitter, emitter->document->nodes);\n    yaml_free(emitter->anchors);\n\n    emitter->anchors = NULL;\n    emitter->last_anchor_id = 0;\n    emitter->document = NULL;\n}\n\n/*\n * Check the references of a node and assign the anchor id if needed.\n */\n\nstatic void\nyaml_emitter_anchor_node(yaml_emitter_t *emitter, int index)\n{\n    yaml_node_t *node = emitter->document->nodes.start + index - 1;\n    yaml_node_item_t *item;\n    yaml_node_pair_t *pair;\n\n    emitter->anchors[index-1].references ++;\n\n    if (emitter->anchors[index-1].references == 1) {\n        switch (node->type) {\n            case YAML_SEQUENCE_NODE:\n                for (item = node->data.sequence.items.start;\n                        item < node->data.sequence.items.top; item ++) {\n                    yaml_emitter_anchor_node(emitter, *item);\n                }\n                break;\n            case YAML_MAPPING_NODE:\n                for (pair = node->data.mapping.pairs.start;\n                        pair < node->data.mapping.pairs.top; pair ++) {\n                    yaml_emitter_anchor_node(emitter, pair->key);\n                    yaml_emitter_anchor_node(emitter, pair->value);\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    else if (emitter->anchors[index-1].references == 2) {\n        emitter->anchors[index-1].anchor = (++ emitter->last_anchor_id);\n    }\n}\n\n/*\n * Generate a textual representation for an anchor.\n */\n\n#define ANCHOR_TEMPLATE         \"id%03d\"\n#define ANCHOR_TEMPLATE_LENGTH  16\n\nstatic yaml_char_t *\nyaml_emitter_generate_anchor(yaml_emitter_t *emitter, int anchor_id)\n{\n    yaml_char_t *anchor = yaml_malloc(ANCHOR_TEMPLATE_LENGTH);\n\n    if (!anchor) return NULL;\n\n    sprintf((char *)anchor, ANCHOR_TEMPLATE, anchor_id);\n\n    return anchor;\n}\n\n/*\n * Serialize a node.\n */\n\nstatic int\nyaml_emitter_dump_node(yaml_emitter_t *emitter, int index)\n{\n    yaml_node_t *node = emitter->document->nodes.start + index - 1;\n    int anchor_id = emitter->anchors[index-1].anchor;\n    yaml_char_t *anchor = NULL;\n\n    if (anchor_id) {\n        anchor = yaml_emitter_generate_anchor(emitter, anchor_id);\n        if (!anchor) return 0;\n    }\n\n    if (emitter->anchors[index-1].serialized) {\n        return yaml_emitter_dump_alias(emitter, anchor);\n    }\n\n    emitter->anchors[index-1].serialized = 1;\n\n    switch (node->type) {\n        case YAML_SCALAR_NODE:\n            return yaml_emitter_dump_scalar(emitter, node, anchor);\n        case YAML_SEQUENCE_NODE:\n            return yaml_emitter_dump_sequence(emitter, node, anchor);\n        case YAML_MAPPING_NODE:\n            return yaml_emitter_dump_mapping(emitter, node, anchor);\n        default:\n            assert(0);      /* Could not happen. */\n            break;\n    }\n\n    return 0;       /* Could not happen. */\n}\n\n/*\n * Serialize an alias.\n */\n\nstatic int\nyaml_emitter_dump_alias(yaml_emitter_t *emitter, yaml_char_t *anchor)\n{\n    yaml_event_t event;\n    yaml_mark_t mark  = { 0, 0, 0 };\n\n    ALIAS_EVENT_INIT(event, anchor, mark, mark);\n\n    return yaml_emitter_emit(emitter, &event);\n}\n\n/*\n * Serialize a scalar.\n */\n\nstatic int\nyaml_emitter_dump_scalar(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor)\n{\n    yaml_event_t event;\n    yaml_mark_t mark  = { 0, 0, 0 };\n\n    int plain_implicit = (strcmp((char *)node->tag,\n                YAML_DEFAULT_SCALAR_TAG) == 0);\n    int quoted_implicit = (strcmp((char *)node->tag,\n                YAML_DEFAULT_SCALAR_TAG) == 0);\n\n    SCALAR_EVENT_INIT(event, anchor, node->tag, node->data.scalar.value,\n            node->data.scalar.length, plain_implicit, quoted_implicit,\n            node->data.scalar.style, mark, mark);\n\n    return yaml_emitter_emit(emitter, &event);\n}\n\n/*\n * Serialize a sequence.\n */\n\nstatic int\nyaml_emitter_dump_sequence(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor)\n{\n    yaml_event_t event;\n    yaml_mark_t mark  = { 0, 0, 0 };\n\n    int implicit = (strcmp((char *)node->tag, YAML_DEFAULT_SEQUENCE_TAG) == 0);\n\n    yaml_node_item_t *item;\n\n    SEQUENCE_START_EVENT_INIT(event, anchor, node->tag, implicit,\n            node->data.sequence.style, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) return 0;\n\n    for (item = node->data.sequence.items.start;\n            item < node->data.sequence.items.top; item ++) {\n        if (!yaml_emitter_dump_node(emitter, *item)) return 0;\n    }\n\n    SEQUENCE_END_EVENT_INIT(event, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) return 0;\n\n    return 1;\n}\n\n/*\n * Serialize a mapping.\n */\n\nstatic int\nyaml_emitter_dump_mapping(yaml_emitter_t *emitter, yaml_node_t *node,\n        yaml_char_t *anchor)\n{\n    yaml_event_t event;\n    yaml_mark_t mark  = { 0, 0, 0 };\n\n    int implicit = (strcmp((char *)node->tag, YAML_DEFAULT_MAPPING_TAG) == 0);\n\n    yaml_node_pair_t *pair;\n\n    MAPPING_START_EVENT_INIT(event, anchor, node->tag, implicit,\n            node->data.mapping.style, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) return 0;\n\n    for (pair = node->data.mapping.pairs.start;\n            pair < node->data.mapping.pairs.top; pair ++) {\n        if (!yaml_emitter_dump_node(emitter, pair->key)) return 0;\n        if (!yaml_emitter_dump_node(emitter, pair->value)) return 0;\n    }\n\n    MAPPING_END_EVENT_INIT(event, mark, mark);\n    if (!yaml_emitter_emit(emitter, &event)) return 0;\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/emitter.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * Flush the buffer if needed.\n */\n\n#define FLUSH(emitter)                                                          \\\n    ((emitter->buffer.pointer+5 < emitter->buffer.end)                          \\\n     || yaml_emitter_flush(emitter))\n\n/*\n * Put a character to the output buffer.\n */\n\n#define PUT(emitter,value)                                                      \\\n    (FLUSH(emitter)                                                             \\\n     && (*(emitter->buffer.pointer++) = (yaml_char_t)(value),                   \\\n         emitter->column ++,                                                    \\\n         1))\n\n/*\n * Put a line break to the output buffer.\n */\n\n#define PUT_BREAK(emitter)                                                      \\\n    (FLUSH(emitter)                                                             \\\n     && ((emitter->line_break == YAML_CR_BREAK ?                                \\\n             (*(emitter->buffer.pointer++) = (yaml_char_t) '\\r') :              \\\n          emitter->line_break == YAML_LN_BREAK ?                                \\\n             (*(emitter->buffer.pointer++) = (yaml_char_t) '\\n') :              \\\n          emitter->line_break == YAML_CRLN_BREAK ?                              \\\n             (*(emitter->buffer.pointer++) = (yaml_char_t) '\\r',                \\\n              *(emitter->buffer.pointer++) = (yaml_char_t) '\\n') : 0),          \\\n         emitter->column = 0,                                                   \\\n         emitter->line ++,                                                      \\\n         1))\n\n/*\n * Copy a character from a string into buffer.\n */\n\n#define WRITE(emitter,string)                                                   \\\n    (FLUSH(emitter)                                                             \\\n     && (COPY(emitter->buffer,string),                                          \\\n         emitter->column ++,                                                    \\\n         1))\n\n/*\n * Copy a line break character from a string into buffer.\n */\n\n#define WRITE_BREAK(emitter,string)                                             \\\n    (FLUSH(emitter)                                                             \\\n     && (CHECK(string,'\\n') ?                                                   \\\n         (PUT_BREAK(emitter),                                                   \\\n          string.pointer ++,                                                    \\\n          1) :                                                                  \\\n         (COPY(emitter->buffer,string),                                         \\\n          emitter->column = 0,                                                  \\\n          emitter->line ++,                                                     \\\n          1)))\n\n/*\n * API functions.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event);\n\n/*\n * Utility functions.\n */\n\nstatic int\nyaml_emitter_set_emitter_error(yaml_emitter_t *emitter, const char *problem);\n\nstatic int\nyaml_emitter_need_more_events(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_append_tag_directive(yaml_emitter_t *emitter,\n        yaml_tag_directive_t value, int allow_duplicates);\n\nstatic int\nyaml_emitter_increase_indent(yaml_emitter_t *emitter,\n        int flow, int indentless);\n\n/*\n * State functions.\n */\n\nstatic int\nyaml_emitter_state_machine(yaml_emitter_t *emitter, yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_stream_start(yaml_emitter_t *emitter,\n        yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_document_start(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_emitter_emit_document_content(yaml_emitter_t *emitter,\n        yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_document_end(yaml_emitter_t *emitter,\n        yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_flow_sequence_item(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_emitter_emit_flow_mapping_key(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_emitter_emit_flow_mapping_value(yaml_emitter_t *emitter,\n        yaml_event_t *event, int simple);\n\nstatic int\nyaml_emitter_emit_block_sequence_item(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_emitter_emit_block_mapping_key(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_emitter_emit_block_mapping_value(yaml_emitter_t *emitter,\n        yaml_event_t *event, int simple);\n\nstatic int\nyaml_emitter_emit_node(yaml_emitter_t *emitter, yaml_event_t *event,\n        int root, int sequence, int mapping, int simple_key);\n\nstatic int\nyaml_emitter_emit_alias(yaml_emitter_t *emitter, yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_scalar(yaml_emitter_t *emitter, yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_sequence_start(yaml_emitter_t *emitter, yaml_event_t *event);\n\nstatic int\nyaml_emitter_emit_mapping_start(yaml_emitter_t *emitter, yaml_event_t *event);\n\n/*\n * Checkers.\n */\n\nstatic int\nyaml_emitter_check_empty_document(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_check_empty_sequence(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_check_empty_mapping(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_check_simple_key(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_select_scalar_style(yaml_emitter_t *emitter, yaml_event_t *event);\n\n/*\n * Processors.\n */\n\nstatic int\nyaml_emitter_process_anchor(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_process_tag(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_process_scalar(yaml_emitter_t *emitter);\n\n/*\n * Analyzers.\n */\n\nstatic int\nyaml_emitter_analyze_version_directive(yaml_emitter_t *emitter,\n        yaml_version_directive_t version_directive);\n\nstatic int\nyaml_emitter_analyze_tag_directive(yaml_emitter_t *emitter,\n        yaml_tag_directive_t tag_directive);\n\nstatic int\nyaml_emitter_analyze_anchor(yaml_emitter_t *emitter,\n        yaml_char_t *anchor, int alias);\n\nstatic int\nyaml_emitter_analyze_tag(yaml_emitter_t *emitter,\n        yaml_char_t *tag);\n\nstatic int\nyaml_emitter_analyze_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length);\n\nstatic int\nyaml_emitter_analyze_event(yaml_emitter_t *emitter,\n        yaml_event_t *event);\n\n/*\n * Writers.\n */\n\nstatic int\nyaml_emitter_write_bom(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_write_indent(yaml_emitter_t *emitter);\n\nstatic int\nyaml_emitter_write_indicator(yaml_emitter_t *emitter,\n        char *indicator, int need_whitespace,\n        int is_whitespace, int is_indention);\n\nstatic int\nyaml_emitter_write_anchor(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length);\n\nstatic int\nyaml_emitter_write_tag_handle(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length);\n\nstatic int\nyaml_emitter_write_tag_content(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int need_whitespace);\n\nstatic int\nyaml_emitter_write_plain_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks);\n\nstatic int\nyaml_emitter_write_single_quoted_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks);\n\nstatic int\nyaml_emitter_write_double_quoted_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks);\n\nstatic int\nyaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter,\n        yaml_string_t string);\n\nstatic int\nyaml_emitter_write_literal_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length);\n\nstatic int\nyaml_emitter_write_folded_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length);\n\n/*\n * Set an emitter error and return 0.\n */\n\nstatic int\nyaml_emitter_set_emitter_error(yaml_emitter_t *emitter, const char *problem)\n{\n    emitter->error = YAML_EMITTER_ERROR;\n    emitter->problem = problem;\n\n    return 0;\n}\n\n/*\n * Emit an event.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_emit(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    if (!ENQUEUE(emitter, emitter->events, *event)) {\n        yaml_event_delete(event);\n        return 0;\n    }\n\n    while (!yaml_emitter_need_more_events(emitter)) {\n        if (!yaml_emitter_analyze_event(emitter, emitter->events.head))\n            return 0;\n        if (!yaml_emitter_state_machine(emitter, emitter->events.head))\n            return 0;\n        yaml_event_delete(&DEQUEUE(emitter, emitter->events));\n    }\n\n    return 1;\n}\n\n/*\n * Check if we need to accumulate more events before emitting.\n *\n * We accumulate extra\n *  - 1 event for DOCUMENT-START\n *  - 2 events for SEQUENCE-START\n *  - 3 events for MAPPING-START\n */\n\nstatic int\nyaml_emitter_need_more_events(yaml_emitter_t *emitter)\n{\n    int level = 0;\n    int accumulate = 0;\n    yaml_event_t *event;\n\n    if (QUEUE_EMPTY(emitter, emitter->events))\n        return 1;\n\n    switch (emitter->events.head->type) {\n        case YAML_DOCUMENT_START_EVENT:\n            accumulate = 1;\n            break;\n        case YAML_SEQUENCE_START_EVENT:\n            accumulate = 2;\n            break;\n        case YAML_MAPPING_START_EVENT:\n            accumulate = 3;\n            break;\n        default:\n            return 0;\n    }\n\n    if (emitter->events.tail - emitter->events.head > accumulate)\n        return 0;\n\n    for (event = emitter->events.head; event != emitter->events.tail; event ++) {\n        switch (event->type) {\n            case YAML_STREAM_START_EVENT:\n            case YAML_DOCUMENT_START_EVENT:\n            case YAML_SEQUENCE_START_EVENT:\n            case YAML_MAPPING_START_EVENT:\n                level += 1;\n                break;\n            case YAML_STREAM_END_EVENT:\n            case YAML_DOCUMENT_END_EVENT:\n            case YAML_SEQUENCE_END_EVENT:\n            case YAML_MAPPING_END_EVENT:\n                level -= 1;\n                break;\n            default:\n                break;\n        }\n        if (!level)\n            return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Append a directive to the directives stack.\n */\n\nstatic int\nyaml_emitter_append_tag_directive(yaml_emitter_t *emitter,\n        yaml_tag_directive_t value, int allow_duplicates)\n{\n    yaml_tag_directive_t *tag_directive;\n    yaml_tag_directive_t copy = { NULL, NULL };\n\n    for (tag_directive = emitter->tag_directives.start;\n            tag_directive != emitter->tag_directives.top; tag_directive ++) {\n        if (strcmp((char *)value.handle, (char *)tag_directive->handle) == 0) {\n            if (allow_duplicates)\n                return 1;\n            return yaml_emitter_set_emitter_error(emitter,\n                    \"duplicate %TAG directive\");\n        }\n    }\n\n    copy.handle = yaml_strdup(value.handle);\n    copy.prefix = yaml_strdup(value.prefix);\n    if (!copy.handle || !copy.prefix) {\n        emitter->error = YAML_MEMORY_ERROR;\n        goto error;\n    }\n\n    if (!PUSH(emitter, emitter->tag_directives, copy))\n        goto error;\n\n    return 1;\n\nerror:\n    yaml_free(copy.handle);\n    yaml_free(copy.prefix);\n    return 0;\n}\n\n/*\n * Increase the indentation level.\n */\n\nstatic int\nyaml_emitter_increase_indent(yaml_emitter_t *emitter,\n        int flow, int indentless)\n{\n    if (!PUSH(emitter, emitter->indents, emitter->indent))\n        return 0;\n\n    if (emitter->indent < 0) {\n        emitter->indent = flow ? emitter->best_indent : 0;\n    }\n    else if (!indentless) {\n        emitter->indent += emitter->best_indent;\n    }\n\n    return 1;\n}\n\n/*\n * State dispatcher.\n */\n\nstatic int\nyaml_emitter_state_machine(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    switch (emitter->state)\n    {\n        case YAML_EMIT_STREAM_START_STATE:\n            return yaml_emitter_emit_stream_start(emitter, event);\n\n        case YAML_EMIT_FIRST_DOCUMENT_START_STATE:\n            return yaml_emitter_emit_document_start(emitter, event, 1);\n\n        case YAML_EMIT_DOCUMENT_START_STATE:\n            return yaml_emitter_emit_document_start(emitter, event, 0);\n\n        case YAML_EMIT_DOCUMENT_CONTENT_STATE:\n            return yaml_emitter_emit_document_content(emitter, event);\n\n        case YAML_EMIT_DOCUMENT_END_STATE:\n            return yaml_emitter_emit_document_end(emitter, event);\n\n        case YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:\n            return yaml_emitter_emit_flow_sequence_item(emitter, event, 1);\n\n        case YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE:\n            return yaml_emitter_emit_flow_sequence_item(emitter, event, 0);\n\n        case YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:\n            return yaml_emitter_emit_flow_mapping_key(emitter, event, 1);\n\n        case YAML_EMIT_FLOW_MAPPING_KEY_STATE:\n            return yaml_emitter_emit_flow_mapping_key(emitter, event, 0);\n\n        case YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:\n            return yaml_emitter_emit_flow_mapping_value(emitter, event, 1);\n\n        case YAML_EMIT_FLOW_MAPPING_VALUE_STATE:\n            return yaml_emitter_emit_flow_mapping_value(emitter, event, 0);\n\n        case YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:\n            return yaml_emitter_emit_block_sequence_item(emitter, event, 1);\n\n        case YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE:\n            return yaml_emitter_emit_block_sequence_item(emitter, event, 0);\n\n        case YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:\n            return yaml_emitter_emit_block_mapping_key(emitter, event, 1);\n\n        case YAML_EMIT_BLOCK_MAPPING_KEY_STATE:\n            return yaml_emitter_emit_block_mapping_key(emitter, event, 0);\n\n        case YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:\n            return yaml_emitter_emit_block_mapping_value(emitter, event, 1);\n\n        case YAML_EMIT_BLOCK_MAPPING_VALUE_STATE:\n            return yaml_emitter_emit_block_mapping_value(emitter, event, 0);\n\n        case YAML_EMIT_END_STATE:\n            return yaml_emitter_set_emitter_error(emitter,\n                    \"expected nothing after STREAM-END\");\n\n        default:\n            assert(1);      /* Invalid state. */\n    }\n\n    return 0;\n}\n\n/*\n * Expect STREAM-START.\n */\n\nstatic int\nyaml_emitter_emit_stream_start(yaml_emitter_t *emitter,\n        yaml_event_t *event)\n{\n    if (event->type == YAML_STREAM_START_EVENT)\n    {\n        if (!emitter->encoding) {\n            emitter->encoding = event->data.stream_start.encoding;\n        }\n\n        if (!emitter->encoding) {\n            emitter->encoding = YAML_UTF8_ENCODING;\n        }\n\n        if (emitter->best_indent < 2 || emitter->best_indent > 9) {\n            emitter->best_indent  = 2;\n        }\n\n        if (emitter->best_width >= 0\n                && emitter->best_width <= emitter->best_indent*2) {\n            emitter->best_width = 80;\n        }\n\n        if (emitter->best_width < 0) {\n            emitter->best_width = INT_MAX;\n        }\n        \n        if (!emitter->line_break) {\n            emitter->line_break = YAML_LN_BREAK;\n        }\n\n        emitter->indent = -1;\n\n        emitter->line = 0;\n        emitter->column = 0;\n        emitter->whitespace = 1;\n        emitter->indention = 1;\n\n        if (emitter->encoding != YAML_UTF8_ENCODING) {\n            if (!yaml_emitter_write_bom(emitter))\n                return 0;\n        }\n\n        emitter->state = YAML_EMIT_FIRST_DOCUMENT_START_STATE;\n\n        return 1;\n    }\n\n    return yaml_emitter_set_emitter_error(emitter,\n            \"expected STREAM-START\");\n}\n\n/*\n * Expect DOCUMENT-START or STREAM-END.\n */\n\nstatic int\nyaml_emitter_emit_document_start(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first)\n{\n    if (event->type == YAML_DOCUMENT_START_EVENT)\n    {\n        yaml_tag_directive_t default_tag_directives[] = {\n            {(yaml_char_t *)\"!\", (yaml_char_t *)\"!\"},\n            {(yaml_char_t *)\"!!\", (yaml_char_t *)\"tag:yaml.org,2002:\"},\n            {NULL, NULL}\n        };\n        yaml_tag_directive_t *tag_directive;\n        int implicit;\n\n        if (event->data.document_start.version_directive) {\n            if (!yaml_emitter_analyze_version_directive(emitter,\n                        *event->data.document_start.version_directive))\n                return 0;\n        }\n\n        for (tag_directive = event->data.document_start.tag_directives.start;\n                tag_directive != event->data.document_start.tag_directives.end;\n                tag_directive ++) {\n            if (!yaml_emitter_analyze_tag_directive(emitter, *tag_directive))\n                return 0;\n            if (!yaml_emitter_append_tag_directive(emitter, *tag_directive, 0))\n                return 0;\n        }\n\n        for (tag_directive = default_tag_directives;\n                tag_directive->handle; tag_directive ++) {\n            if (!yaml_emitter_append_tag_directive(emitter, *tag_directive, 1))\n                return 0;\n        }\n\n        implicit = event->data.document_start.implicit;\n        if (!first || emitter->canonical) {\n            implicit = 0;\n        }\n\n        if ((event->data.document_start.version_directive ||\n                    (event->data.document_start.tag_directives.start\n                     != event->data.document_start.tag_directives.end)) &&\n                emitter->open_ended)\n        {\n            if (!yaml_emitter_write_indicator(emitter, \"...\", 1, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n\n        if (event->data.document_start.version_directive) {\n            implicit = 0;\n            if (!yaml_emitter_write_indicator(emitter, \"%YAML\", 1, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indicator(emitter, \"1.1\", 1, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n        \n        if (event->data.document_start.tag_directives.start\n                != event->data.document_start.tag_directives.end) {\n            implicit = 0;\n            for (tag_directive = event->data.document_start.tag_directives.start;\n                    tag_directive != event->data.document_start.tag_directives.end;\n                    tag_directive ++) {\n                if (!yaml_emitter_write_indicator(emitter, \"%TAG\", 1, 0, 0))\n                    return 0;\n                if (!yaml_emitter_write_tag_handle(emitter, tag_directive->handle,\n                            strlen((char *)tag_directive->handle)))\n                    return 0;\n                if (!yaml_emitter_write_tag_content(emitter, tag_directive->prefix,\n                            strlen((char *)tag_directive->prefix), 1))\n                    return 0;\n                if (!yaml_emitter_write_indent(emitter))\n                    return 0;\n            }\n        }\n\n        if (yaml_emitter_check_empty_document(emitter)) {\n            implicit = 0;\n        }\n\n        if (!implicit) {\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n            if (!yaml_emitter_write_indicator(emitter, \"---\", 1, 0, 0))\n                return 0;\n            if (emitter->canonical) {\n                if (!yaml_emitter_write_indent(emitter))\n                    return 0;\n            }\n        }\n\n        emitter->state = YAML_EMIT_DOCUMENT_CONTENT_STATE;\n\n        return 1;\n    }\n\n    else if (event->type == YAML_STREAM_END_EVENT)\n    {\n        if (emitter->open_ended)\n        {\n            if (!yaml_emitter_write_indicator(emitter, \"...\", 1, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n\n        if (!yaml_emitter_flush(emitter))\n            return 0;\n\n        emitter->state = YAML_EMIT_END_STATE;\n\n        return 1;\n    }\n\n    return yaml_emitter_set_emitter_error(emitter,\n            \"expected DOCUMENT-START or STREAM-END\");\n}\n\n/*\n * Expect the root node.\n */\n\nstatic int\nyaml_emitter_emit_document_content(yaml_emitter_t *emitter,\n        yaml_event_t *event)\n{\n    if (!PUSH(emitter, emitter->states, YAML_EMIT_DOCUMENT_END_STATE))\n        return 0;\n\n    return yaml_emitter_emit_node(emitter, event, 1, 0, 0, 0);\n}\n\n/*\n * Expect DOCUMENT-END.\n */\n\nstatic int\nyaml_emitter_emit_document_end(yaml_emitter_t *emitter,\n        yaml_event_t *event)\n{\n    if (event->type == YAML_DOCUMENT_END_EVENT)\n    {\n        if (!yaml_emitter_write_indent(emitter))\n            return 0;\n        if (!event->data.document_end.implicit) {\n            if (!yaml_emitter_write_indicator(emitter, \"...\", 1, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n        if (!yaml_emitter_flush(emitter))\n            return 0;\n\n        emitter->state = YAML_EMIT_DOCUMENT_START_STATE;\n\n        while (!STACK_EMPTY(emitter, emitter->tag_directives)) {\n            yaml_tag_directive_t tag_directive = POP(emitter,\n                    emitter->tag_directives);\n            yaml_free(tag_directive.handle);\n            yaml_free(tag_directive.prefix);\n        }\n\n        return 1;\n    }\n\n    return yaml_emitter_set_emitter_error(emitter,\n            \"expected DOCUMENT-END\");\n}\n\n/*\n * \n * Expect a flow item node.\n */\n\nstatic int\nyaml_emitter_emit_flow_sequence_item(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first)\n{\n    if (first)\n    {\n        if (!yaml_emitter_write_indicator(emitter, \"[\", 1, 1, 0))\n            return 0;\n        if (!yaml_emitter_increase_indent(emitter, 1, 0))\n            return 0;\n        emitter->flow_level ++;\n    }\n\n    if (event->type == YAML_SEQUENCE_END_EVENT)\n    {\n        emitter->flow_level --;\n        emitter->indent = POP(emitter, emitter->indents);\n        if (emitter->canonical && !first) {\n            if (!yaml_emitter_write_indicator(emitter, \",\", 0, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n        if (!yaml_emitter_write_indicator(emitter, \"]\", 0, 0, 0))\n            return 0;\n        emitter->state = POP(emitter, emitter->states);\n\n        return 1;\n    }\n\n    if (!first) {\n        if (!yaml_emitter_write_indicator(emitter, \",\", 0, 0, 0))\n            return 0;\n    }\n\n    if (emitter->canonical || emitter->column > emitter->best_width) {\n        if (!yaml_emitter_write_indent(emitter))\n            return 0;\n    }\n    if (!PUSH(emitter, emitter->states, YAML_EMIT_FLOW_SEQUENCE_ITEM_STATE))\n        return 0;\n\n    return yaml_emitter_emit_node(emitter, event, 0, 1, 0, 0);\n}\n\n/*\n * Expect a flow key node.\n */\n\nstatic int\nyaml_emitter_emit_flow_mapping_key(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first)\n{\n    if (first)\n    {\n        if (!yaml_emitter_write_indicator(emitter, \"{\", 1, 1, 0))\n            return 0;\n        if (!yaml_emitter_increase_indent(emitter, 1, 0))\n            return 0;\n        emitter->flow_level ++;\n    }\n\n    if (event->type == YAML_MAPPING_END_EVENT)\n    {\n        emitter->flow_level --;\n        emitter->indent = POP(emitter, emitter->indents);\n        if (emitter->canonical && !first) {\n            if (!yaml_emitter_write_indicator(emitter, \",\", 0, 0, 0))\n                return 0;\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n        if (!yaml_emitter_write_indicator(emitter, \"}\", 0, 0, 0))\n            return 0;\n        emitter->state = POP(emitter, emitter->states);\n\n        return 1;\n    }\n\n    if (!first) {\n        if (!yaml_emitter_write_indicator(emitter, \",\", 0, 0, 0))\n            return 0;\n    }\n    if (emitter->canonical || emitter->column > emitter->best_width) {\n        if (!yaml_emitter_write_indent(emitter))\n            return 0;\n    }\n\n    if (!emitter->canonical && yaml_emitter_check_simple_key(emitter))\n    {\n        if (!PUSH(emitter, emitter->states,\n                    YAML_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE))\n            return 0;\n\n        return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 1);\n    }\n    else\n    {\n        if (!yaml_emitter_write_indicator(emitter, \"?\", 1, 0, 0))\n            return 0;\n        if (!PUSH(emitter, emitter->states,\n                    YAML_EMIT_FLOW_MAPPING_VALUE_STATE))\n            return 0;\n\n        return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 0);\n    }\n}\n\n/*\n * Expect a flow value node.\n */\n\nstatic int\nyaml_emitter_emit_flow_mapping_value(yaml_emitter_t *emitter,\n        yaml_event_t *event, int simple)\n{\n    if (simple) {\n        if (!yaml_emitter_write_indicator(emitter, \":\", 0, 0, 0))\n            return 0;\n    }\n    else {\n        if (emitter->canonical || emitter->column > emitter->best_width) {\n            if (!yaml_emitter_write_indent(emitter))\n                return 0;\n        }\n        if (!yaml_emitter_write_indicator(emitter, \":\", 1, 0, 0))\n            return 0;\n    }\n    if (!PUSH(emitter, emitter->states, YAML_EMIT_FLOW_MAPPING_KEY_STATE))\n        return 0;\n    return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 0);\n}\n\n/*\n * Expect a block item node.\n */\n\nstatic int\nyaml_emitter_emit_block_sequence_item(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first)\n{\n    if (first)\n    {\n        if (!yaml_emitter_increase_indent(emitter, 0,\n                    (emitter->mapping_context && !emitter->indention)))\n            return 0;\n    }\n\n    if (event->type == YAML_SEQUENCE_END_EVENT)\n    {\n        emitter->indent = POP(emitter, emitter->indents);\n        emitter->state = POP(emitter, emitter->states);\n\n        return 1;\n    }\n\n    if (!yaml_emitter_write_indent(emitter))\n        return 0;\n    if (!yaml_emitter_write_indicator(emitter, \"-\", 1, 0, 1))\n        return 0;\n    if (!PUSH(emitter, emitter->states,\n                YAML_EMIT_BLOCK_SEQUENCE_ITEM_STATE))\n        return 0;\n\n    return yaml_emitter_emit_node(emitter, event, 0, 1, 0, 0);\n}\n\n/*\n * Expect a block key node.\n */\n\nstatic int\nyaml_emitter_emit_block_mapping_key(yaml_emitter_t *emitter,\n        yaml_event_t *event, int first)\n{\n    if (first)\n    {\n        if (!yaml_emitter_increase_indent(emitter, 0, 0))\n            return 0;\n    }\n\n    if (event->type == YAML_MAPPING_END_EVENT)\n    {\n        emitter->indent = POP(emitter, emitter->indents);\n        emitter->state = POP(emitter, emitter->states);\n\n        return 1;\n    }\n\n    if (!yaml_emitter_write_indent(emitter))\n        return 0;\n\n    if (yaml_emitter_check_simple_key(emitter))\n    {\n        if (!PUSH(emitter, emitter->states,\n                    YAML_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE))\n            return 0;\n\n        return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 1);\n    }\n    else\n    {\n        if (!yaml_emitter_write_indicator(emitter, \"?\", 1, 0, 1))\n            return 0;\n        if (!PUSH(emitter, emitter->states,\n                    YAML_EMIT_BLOCK_MAPPING_VALUE_STATE))\n            return 0;\n\n        return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 0);\n    }\n}\n\n/*\n * Expect a block value node.\n */\n\nstatic int\nyaml_emitter_emit_block_mapping_value(yaml_emitter_t *emitter,\n        yaml_event_t *event, int simple)\n{\n    if (simple) {\n        if (!yaml_emitter_write_indicator(emitter, \":\", 0, 0, 0))\n            return 0;\n    }\n    else {\n        if (!yaml_emitter_write_indent(emitter))\n            return 0;\n        if (!yaml_emitter_write_indicator(emitter, \":\", 1, 0, 1))\n            return 0;\n    }\n    if (!PUSH(emitter, emitter->states,\n                YAML_EMIT_BLOCK_MAPPING_KEY_STATE))\n        return 0;\n\n    return yaml_emitter_emit_node(emitter, event, 0, 0, 1, 0);\n}\n\n/*\n * Expect a node.\n */\n\nstatic int\nyaml_emitter_emit_node(yaml_emitter_t *emitter, yaml_event_t *event,\n        int root, int sequence, int mapping, int simple_key)\n{\n    emitter->root_context = root;\n    emitter->sequence_context = sequence;\n    emitter->mapping_context = mapping;\n    emitter->simple_key_context = simple_key;\n\n    switch (event->type)\n    {\n        case YAML_ALIAS_EVENT:\n            return yaml_emitter_emit_alias(emitter, event);\n\n        case YAML_SCALAR_EVENT:\n            return yaml_emitter_emit_scalar(emitter, event);\n\n        case YAML_SEQUENCE_START_EVENT:\n            return yaml_emitter_emit_sequence_start(emitter, event);\n\n        case YAML_MAPPING_START_EVENT:\n            return yaml_emitter_emit_mapping_start(emitter, event);\n\n        default:\n            return yaml_emitter_set_emitter_error(emitter,\n                    \"expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS\");\n    }\n\n    return 0;\n}\n\n/*\n * Expect ALIAS.\n */\n\nstatic int\nyaml_emitter_emit_alias(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    if (!yaml_emitter_process_anchor(emitter))\n        return 0;\n    emitter->state = POP(emitter, emitter->states);\n\n    return 1;\n}\n\n/*\n * Expect SCALAR.\n */\n\nstatic int\nyaml_emitter_emit_scalar(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    if (!yaml_emitter_select_scalar_style(emitter, event))\n        return 0;\n    if (!yaml_emitter_process_anchor(emitter))\n        return 0;\n    if (!yaml_emitter_process_tag(emitter))\n        return 0;\n    if (!yaml_emitter_increase_indent(emitter, 1, 0))\n        return 0;\n    if (!yaml_emitter_process_scalar(emitter))\n        return 0;\n    emitter->indent = POP(emitter, emitter->indents);\n    emitter->state = POP(emitter, emitter->states);\n\n    return 1;\n}\n\n/*\n * Expect SEQUENCE-START.\n */\n\nstatic int\nyaml_emitter_emit_sequence_start(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    if (!yaml_emitter_process_anchor(emitter))\n        return 0;\n    if (!yaml_emitter_process_tag(emitter))\n        return 0;\n\n    if (emitter->flow_level || emitter->canonical\n            || event->data.sequence_start.style == YAML_FLOW_SEQUENCE_STYLE\n            || yaml_emitter_check_empty_sequence(emitter)) {\n        emitter->state = YAML_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE;\n    }\n    else {\n        emitter->state = YAML_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE;\n    }\n\n    return 1;\n}\n\n/*\n * Expect MAPPING-START.\n */\n\nstatic int\nyaml_emitter_emit_mapping_start(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    if (!yaml_emitter_process_anchor(emitter))\n        return 0;\n    if (!yaml_emitter_process_tag(emitter))\n        return 0;\n\n    if (emitter->flow_level || emitter->canonical\n            || event->data.mapping_start.style == YAML_FLOW_MAPPING_STYLE\n            || yaml_emitter_check_empty_mapping(emitter)) {\n        emitter->state = YAML_EMIT_FLOW_MAPPING_FIRST_KEY_STATE;\n    }\n    else {\n        emitter->state = YAML_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE;\n    }\n\n    return 1;\n}\n\n/*\n * Check if the document content is an empty scalar.\n */\n\nstatic int\nyaml_emitter_check_empty_document(yaml_emitter_t *emitter)\n{\n    return 0;\n}\n\n/*\n * Check if the next events represent an empty sequence.\n */\n\nstatic int\nyaml_emitter_check_empty_sequence(yaml_emitter_t *emitter)\n{\n    if (emitter->events.tail - emitter->events.head < 2)\n        return 0;\n\n    return (emitter->events.head[0].type == YAML_SEQUENCE_START_EVENT\n            && emitter->events.head[1].type == YAML_SEQUENCE_END_EVENT);\n}\n\n/*\n * Check if the next events represent an empty mapping.\n */\n\nstatic int\nyaml_emitter_check_empty_mapping(yaml_emitter_t *emitter)\n{\n    if (emitter->events.tail - emitter->events.head < 2)\n        return 0;\n\n    return (emitter->events.head[0].type == YAML_MAPPING_START_EVENT\n            && emitter->events.head[1].type == YAML_MAPPING_END_EVENT);\n}\n\n/*\n * Check if the next node can be expressed as a simple key.\n */\n\nstatic int\nyaml_emitter_check_simple_key(yaml_emitter_t *emitter)\n{\n    yaml_event_t *event = emitter->events.head;\n    size_t length = 0;\n\n    switch (event->type)\n    {\n        case YAML_ALIAS_EVENT:\n            length += emitter->anchor_data.anchor_length;\n            break;\n\n        case YAML_SCALAR_EVENT:\n            if (emitter->scalar_data.multiline)\n                return 0;\n            length += emitter->anchor_data.anchor_length\n                + emitter->tag_data.handle_length\n                + emitter->tag_data.suffix_length\n                + emitter->scalar_data.length;\n            break;\n\n        case YAML_SEQUENCE_START_EVENT:\n            if (!yaml_emitter_check_empty_sequence(emitter))\n                return 0;\n            length += emitter->anchor_data.anchor_length\n                + emitter->tag_data.handle_length\n                + emitter->tag_data.suffix_length;\n            break;\n\n        case YAML_MAPPING_START_EVENT:\n            if (!yaml_emitter_check_empty_mapping(emitter))\n                return 0;\n            length += emitter->anchor_data.anchor_length\n                + emitter->tag_data.handle_length\n                + emitter->tag_data.suffix_length;\n            break;\n\n        default:\n            return 0;\n    }\n\n    if (length > 128)\n        return 0;\n\n    return 1;\n}\n\n/*\n * Determine an acceptable scalar style.\n */\n\nstatic int\nyaml_emitter_select_scalar_style(yaml_emitter_t *emitter, yaml_event_t *event)\n{\n    yaml_scalar_style_t style = event->data.scalar.style;\n    int no_tag = (!emitter->tag_data.handle && !emitter->tag_data.suffix);\n\n    if (no_tag && !event->data.scalar.plain_implicit\n            && !event->data.scalar.quoted_implicit) {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"neither tag nor implicit flags are specified\");\n    }\n\n    if (style == YAML_ANY_SCALAR_STYLE)\n        style = YAML_PLAIN_SCALAR_STYLE;\n\n    if (emitter->canonical)\n        style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;\n\n    if (emitter->simple_key_context && emitter->scalar_data.multiline)\n        style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;\n\n    if (style == YAML_PLAIN_SCALAR_STYLE)\n    {\n        if ((emitter->flow_level && !emitter->scalar_data.flow_plain_allowed)\n                || (!emitter->flow_level && !emitter->scalar_data.block_plain_allowed))\n            style = YAML_SINGLE_QUOTED_SCALAR_STYLE;\n        if (!emitter->scalar_data.length\n                && (emitter->flow_level || emitter->simple_key_context))\n            style = YAML_SINGLE_QUOTED_SCALAR_STYLE;\n        if (no_tag && !event->data.scalar.plain_implicit)\n            style = YAML_SINGLE_QUOTED_SCALAR_STYLE;\n    }\n\n    if (style == YAML_SINGLE_QUOTED_SCALAR_STYLE)\n    {\n        if (!emitter->scalar_data.single_quoted_allowed)\n            style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;\n    }\n\n    if (style == YAML_LITERAL_SCALAR_STYLE || style == YAML_FOLDED_SCALAR_STYLE)\n    {\n        if (!emitter->scalar_data.block_allowed\n                || emitter->flow_level || emitter->simple_key_context)\n            style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;\n    }\n\n    if (no_tag && !event->data.scalar.quoted_implicit\n            && style != YAML_PLAIN_SCALAR_STYLE)\n    {\n        emitter->tag_data.handle = (yaml_char_t *)\"!\";\n        emitter->tag_data.handle_length = 1;\n    }\n\n    emitter->scalar_data.style = style;\n\n    return 1;\n}\n\n/*\n * Write an achor.\n */\n\nstatic int\nyaml_emitter_process_anchor(yaml_emitter_t *emitter)\n{\n    if (!emitter->anchor_data.anchor)\n        return 1;\n\n    if (!yaml_emitter_write_indicator(emitter,\n                (emitter->anchor_data.alias ? \"*\" : \"&\"), 1, 0, 0))\n        return 0;\n\n    return yaml_emitter_write_anchor(emitter,\n            emitter->anchor_data.anchor, emitter->anchor_data.anchor_length);\n}\n\n/*\n * Write a tag.\n */\n\nstatic int\nyaml_emitter_process_tag(yaml_emitter_t *emitter)\n{\n    if (!emitter->tag_data.handle && !emitter->tag_data.suffix)\n        return 1;\n\n    if (emitter->tag_data.handle)\n    {\n        if (!yaml_emitter_write_tag_handle(emitter, emitter->tag_data.handle,\n                    emitter->tag_data.handle_length))\n            return 0;\n        if (emitter->tag_data.suffix) {\n            if (!yaml_emitter_write_tag_content(emitter, emitter->tag_data.suffix,\n                        emitter->tag_data.suffix_length, 0))\n                return 0;\n        }\n    }\n    else\n    {\n        if (!yaml_emitter_write_indicator(emitter, \"!<\", 1, 0, 0))\n            return 0;\n        if (!yaml_emitter_write_tag_content(emitter, emitter->tag_data.suffix,\n                    emitter->tag_data.suffix_length, 0))\n            return 0;\n        if (!yaml_emitter_write_indicator(emitter, \">\", 0, 0, 0))\n            return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Write a scalar.\n */\n\nstatic int\nyaml_emitter_process_scalar(yaml_emitter_t *emitter)\n{\n    switch (emitter->scalar_data.style)\n    {\n        case YAML_PLAIN_SCALAR_STYLE:\n            return yaml_emitter_write_plain_scalar(emitter,\n                    emitter->scalar_data.value, emitter->scalar_data.length,\n                    !emitter->simple_key_context);\n\n        case YAML_SINGLE_QUOTED_SCALAR_STYLE:\n            return yaml_emitter_write_single_quoted_scalar(emitter,\n                    emitter->scalar_data.value, emitter->scalar_data.length,\n                    !emitter->simple_key_context);\n\n        case YAML_DOUBLE_QUOTED_SCALAR_STYLE:\n            return yaml_emitter_write_double_quoted_scalar(emitter,\n                    emitter->scalar_data.value, emitter->scalar_data.length,\n                    !emitter->simple_key_context);\n\n        case YAML_LITERAL_SCALAR_STYLE:\n            return yaml_emitter_write_literal_scalar(emitter,\n                    emitter->scalar_data.value, emitter->scalar_data.length);\n\n        case YAML_FOLDED_SCALAR_STYLE:\n            return yaml_emitter_write_folded_scalar(emitter,\n                    emitter->scalar_data.value, emitter->scalar_data.length);\n\n        default:\n            assert(1);      /* Impossible. */\n    }\n\n    return 0;\n}\n\n/*\n * Check if a %YAML directive is valid.\n */\n\nstatic int\nyaml_emitter_analyze_version_directive(yaml_emitter_t *emitter,\n        yaml_version_directive_t version_directive)\n{\n    if (version_directive.major != 1 || version_directive.minor != 1) {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"incompatible %YAML directive\");\n    }\n\n    return 1;\n}\n\n/*\n * Check if a %TAG directive is valid.\n */\n\nstatic int\nyaml_emitter_analyze_tag_directive(yaml_emitter_t *emitter,\n        yaml_tag_directive_t tag_directive)\n{\n    yaml_string_t handle;\n    yaml_string_t prefix;\n    size_t handle_length;\n    size_t prefix_length;\n\n    handle_length = strlen((char *)tag_directive.handle);\n    prefix_length = strlen((char *)tag_directive.prefix);\n    STRING_ASSIGN(handle, tag_directive.handle, handle_length);\n    STRING_ASSIGN(prefix, tag_directive.prefix, prefix_length);\n\n    if (handle.start == handle.end) {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"tag handle must not be empty\");\n    }\n\n    if (handle.start[0] != '!') {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"tag handle must start with '!'\");\n    }\n\n    if (handle.end[-1] != '!') {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"tag handle must end with '!'\");\n    }\n\n    handle.pointer ++;\n\n    while (handle.pointer < handle.end-1) {\n        if (!IS_ALPHA(handle)) {\n            return yaml_emitter_set_emitter_error(emitter,\n                    \"tag handle must contain alphanumerical characters only\");\n        }\n        MOVE(handle);\n    }\n\n    if (prefix.start == prefix.end) {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"tag prefix must not be empty\");\n    }\n\n    return 1;\n}\n\n/*\n * Check if an anchor is valid.\n */\n\nstatic int\nyaml_emitter_analyze_anchor(yaml_emitter_t *emitter,\n        yaml_char_t *anchor, int alias)\n{\n    size_t anchor_length;\n    yaml_string_t string;\n    \n    anchor_length = strlen((char *)anchor);\n    STRING_ASSIGN(string, anchor, anchor_length);\n\n    if (string.start == string.end) {\n        return yaml_emitter_set_emitter_error(emitter, alias ?\n                \"alias value must not be empty\" :\n                \"anchor value must not be empty\");\n    }\n\n    while (string.pointer != string.end) {\n        if (!IS_ALPHA(string)) {\n            return yaml_emitter_set_emitter_error(emitter, alias ?\n                    \"alias value must contain alphanumerical characters only\" :\n                    \"anchor value must contain alphanumerical characters only\");\n        }\n        MOVE(string);\n    }\n\n    emitter->anchor_data.anchor = string.start;\n    emitter->anchor_data.anchor_length = string.end - string.start;\n    emitter->anchor_data.alias = alias;\n\n    return 1;\n}\n\n/*\n * Check if a tag is valid.\n */\n\nstatic int\nyaml_emitter_analyze_tag(yaml_emitter_t *emitter,\n        yaml_char_t *tag)\n{\n    size_t tag_length;\n    yaml_string_t string;\n    yaml_tag_directive_t *tag_directive;\n\n    tag_length = strlen((char *)tag);\n    STRING_ASSIGN(string, tag, tag_length);\n\n    if (string.start == string.end) {\n        return yaml_emitter_set_emitter_error(emitter,\n                \"tag value must not be empty\");\n    }\n\n    for (tag_directive = emitter->tag_directives.start;\n            tag_directive != emitter->tag_directives.top; tag_directive ++) {\n        size_t prefix_length = strlen((char *)tag_directive->prefix);\n        if (prefix_length < (size_t)(string.end - string.start)\n                && strncmp((char *)tag_directive->prefix, (char *)string.start,\n                    prefix_length) == 0)\n        {\n            emitter->tag_data.handle = tag_directive->handle;\n            emitter->tag_data.handle_length =\n                strlen((char *)tag_directive->handle);\n            emitter->tag_data.suffix = string.start + prefix_length;\n            emitter->tag_data.suffix_length =\n                (string.end - string.start) - prefix_length;\n            return 1;\n        }\n    }\n\n    emitter->tag_data.suffix = string.start;\n    emitter->tag_data.suffix_length = string.end - string.start;\n\n    return 1;\n}\n\n/*\n * Check if a scalar is valid.\n */\n\nstatic int\nyaml_emitter_analyze_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length)\n{\n    yaml_string_t string;\n\n    int block_indicators = 0;\n    int flow_indicators = 0;\n    int line_breaks = 0;\n    int special_characters = 0;\n\n    int leading_space = 0;\n    int leading_break = 0;\n    int trailing_space = 0;\n    int trailing_break = 0;\n    int break_space = 0;\n    int space_break = 0;\n\n    int preceeded_by_whitespace = 0;\n    int followed_by_whitespace = 0;\n    int previous_space = 0;\n    int previous_break = 0;\n\n    STRING_ASSIGN(string, value, length);\n\n    emitter->scalar_data.value = value;\n    emitter->scalar_data.length = length;\n\n    if (string.start == string.end)\n    {\n        emitter->scalar_data.multiline = 0;\n        emitter->scalar_data.flow_plain_allowed = 0;\n        emitter->scalar_data.block_plain_allowed = 1;\n        emitter->scalar_data.single_quoted_allowed = 1;\n        emitter->scalar_data.block_allowed = 0;\n\n        return 1;\n    }\n\n    if ((CHECK_AT(string, '-', 0)\n                && CHECK_AT(string, '-', 1)\n                && CHECK_AT(string, '-', 2))\n            || (CHECK_AT(string, '.', 0)\n                && CHECK_AT(string, '.', 1)\n                && CHECK_AT(string, '.', 2))) {\n        block_indicators = 1;\n        flow_indicators = 1;\n    }\n\n    preceeded_by_whitespace = 1;\n    followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));\n\n    while (string.pointer != string.end)\n    {\n        if (string.start == string.pointer)\n        {\n            if (CHECK(string, '#') || CHECK(string, ',')\n                    || CHECK(string, '[') || CHECK(string, ']')\n                    || CHECK(string, '{') || CHECK(string, '}')\n                    || CHECK(string, '&') || CHECK(string, '*')\n                    || CHECK(string, '!') || CHECK(string, '|')\n                    || CHECK(string, '>') || CHECK(string, '\\'')\n                    || CHECK(string, '\"') || CHECK(string, '%')\n                    || CHECK(string, '@') || CHECK(string, '`')) {\n                flow_indicators = 1;\n                block_indicators = 1;\n            }\n\n            if (CHECK(string, '?') || CHECK(string, ':')) {\n                flow_indicators = 1;\n                if (followed_by_whitespace) {\n                    block_indicators = 1;\n                }\n            }\n\n            if (CHECK(string, '-') && followed_by_whitespace) {\n                flow_indicators = 1;\n                block_indicators = 1;\n            }\n        }\n        else\n        {\n            if (CHECK(string, ',') || CHECK(string, '?')\n                    || CHECK(string, '[') || CHECK(string, ']')\n                    || CHECK(string, '{') || CHECK(string, '}')) {\n                flow_indicators = 1;\n            }\n\n            if (CHECK(string, ':')) {\n                flow_indicators = 1;\n                if (followed_by_whitespace) {\n                    block_indicators = 1;\n                }\n            }\n\n            if (CHECK(string, '#') && preceeded_by_whitespace) {\n                flow_indicators = 1;\n                block_indicators = 1;\n            }\n        }\n\n        if (!IS_PRINTABLE(string)\n                || (!IS_ASCII(string) && !emitter->unicode)) {\n            special_characters = 1;\n        }\n\n        if (IS_BREAK(string)) {\n            line_breaks = 1;\n        }\n\n        if (IS_SPACE(string))\n        {\n            if (string.start == string.pointer) {\n                leading_space = 1;\n            }\n            if (string.pointer+WIDTH(string) == string.end) {\n                trailing_space = 1;\n            }\n            if (previous_break) {\n                break_space = 1;\n            }\n            previous_space = 1;\n            previous_break = 0;\n        }\n        else if (IS_BREAK(string))\n        {\n            if (string.start == string.pointer) {\n                leading_break = 1;\n            }\n            if (string.pointer+WIDTH(string) == string.end) {\n                trailing_break = 1;\n            }\n            if (previous_space) {\n                space_break = 1;\n            }\n            previous_space = 0;\n            previous_break = 1;\n        }\n        else\n        {\n            previous_space = 0;\n            previous_break = 0;\n        }\n\n        preceeded_by_whitespace = IS_BLANKZ(string);\n        MOVE(string);\n        if (string.pointer != string.end) {\n            followed_by_whitespace = IS_BLANKZ_AT(string, WIDTH(string));\n        }\n    }\n\n    emitter->scalar_data.multiline = line_breaks;\n\n    emitter->scalar_data.flow_plain_allowed = 1;\n    emitter->scalar_data.block_plain_allowed = 1;\n    emitter->scalar_data.single_quoted_allowed = 1;\n    emitter->scalar_data.block_allowed = 1;\n\n    if (leading_space || leading_break || trailing_space || trailing_break) {\n        emitter->scalar_data.flow_plain_allowed = 0;\n        emitter->scalar_data.block_plain_allowed = 0;\n    }\n\n    if (trailing_space) {\n        emitter->scalar_data.block_allowed = 0;\n    }\n\n    if (break_space) {\n        emitter->scalar_data.flow_plain_allowed = 0;\n        emitter->scalar_data.block_plain_allowed = 0;\n        emitter->scalar_data.single_quoted_allowed = 0;\n    }\n\n    if (space_break || special_characters) {\n        emitter->scalar_data.flow_plain_allowed = 0;\n        emitter->scalar_data.block_plain_allowed = 0;\n        emitter->scalar_data.single_quoted_allowed = 0;\n        emitter->scalar_data.block_allowed = 0;\n    }\n\n    if (line_breaks) {\n        emitter->scalar_data.flow_plain_allowed = 0;\n        emitter->scalar_data.block_plain_allowed = 0;\n    }\n\n    if (flow_indicators) {\n        emitter->scalar_data.flow_plain_allowed = 0;\n    }\n\n    if (block_indicators) {\n        emitter->scalar_data.block_plain_allowed = 0;\n    }\n\n    return 1;\n}\n\n/*\n * Check if the event data is valid.\n */\n\nstatic int\nyaml_emitter_analyze_event(yaml_emitter_t *emitter,\n        yaml_event_t *event)\n{\n    emitter->anchor_data.anchor = NULL;\n    emitter->anchor_data.anchor_length = 0;\n    emitter->tag_data.handle = NULL;\n    emitter->tag_data.handle_length = 0;\n    emitter->tag_data.suffix = NULL;\n    emitter->tag_data.suffix_length = 0;\n    emitter->scalar_data.value = NULL;\n    emitter->scalar_data.length = 0;\n\n    switch (event->type)\n    {\n        case YAML_ALIAS_EVENT:\n            if (!yaml_emitter_analyze_anchor(emitter,\n                        event->data.alias.anchor, 1))\n                return 0;\n            return 1;\n\n        case YAML_SCALAR_EVENT:\n            if (event->data.scalar.anchor) {\n                if (!yaml_emitter_analyze_anchor(emitter,\n                            event->data.scalar.anchor, 0))\n                    return 0;\n            }\n            if (event->data.scalar.tag && (emitter->canonical ||\n                        (!event->data.scalar.plain_implicit\n                         && !event->data.scalar.quoted_implicit))) {\n                if (!yaml_emitter_analyze_tag(emitter, event->data.scalar.tag))\n                    return 0;\n            }\n            if (!yaml_emitter_analyze_scalar(emitter,\n                        event->data.scalar.value, event->data.scalar.length))\n                return 0;\n            return 1;\n\n        case YAML_SEQUENCE_START_EVENT:\n            if (event->data.sequence_start.anchor) {\n                if (!yaml_emitter_analyze_anchor(emitter,\n                            event->data.sequence_start.anchor, 0))\n                    return 0;\n            }\n            if (event->data.sequence_start.tag && (emitter->canonical ||\n                        !event->data.sequence_start.implicit)) {\n                if (!yaml_emitter_analyze_tag(emitter,\n                            event->data.sequence_start.tag))\n                    return 0;\n            }\n            return 1;\n\n        case YAML_MAPPING_START_EVENT:\n            if (event->data.mapping_start.anchor) {\n                if (!yaml_emitter_analyze_anchor(emitter,\n                            event->data.mapping_start.anchor, 0))\n                    return 0;\n            }\n            if (event->data.mapping_start.tag && (emitter->canonical ||\n                        !event->data.mapping_start.implicit)) {\n                if (!yaml_emitter_analyze_tag(emitter,\n                            event->data.mapping_start.tag))\n                    return 0;\n            }\n            return 1;\n\n        default:\n            return 1;\n    }\n}\n\n/*\n * Write the BOM character.\n */\n\nstatic int\nyaml_emitter_write_bom(yaml_emitter_t *emitter)\n{\n    if (!FLUSH(emitter)) return 0;\n\n    *(emitter->buffer.pointer++) = (yaml_char_t) '\\xEF';\n    *(emitter->buffer.pointer++) = (yaml_char_t) '\\xBB';\n    *(emitter->buffer.pointer++) = (yaml_char_t) '\\xBF';\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_indent(yaml_emitter_t *emitter)\n{\n    int indent = (emitter->indent >= 0) ? emitter->indent : 0;\n\n    if (!emitter->indention || emitter->column > indent\n            || (emitter->column == indent && !emitter->whitespace)) {\n        if (!PUT_BREAK(emitter)) return 0;\n    }\n\n    while (emitter->column < indent) {\n        if (!PUT(emitter, ' ')) return 0;\n    }\n\n    emitter->whitespace = 1;\n    emitter->indention = 1;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_indicator(yaml_emitter_t *emitter,\n        char *indicator, int need_whitespace,\n        int is_whitespace, int is_indention)\n{\n    size_t indicator_length;\n    yaml_string_t string;\n\n    indicator_length = strlen(indicator);\n    STRING_ASSIGN(string, (yaml_char_t *)indicator, indicator_length);\n\n    if (need_whitespace && !emitter->whitespace) {\n        if (!PUT(emitter, ' ')) return 0;\n    }\n\n    while (string.pointer != string.end) {\n        if (!WRITE(emitter, string)) return 0;\n    }\n\n    emitter->whitespace = is_whitespace;\n    emitter->indention = (emitter->indention && is_indention);\n    emitter->open_ended = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_anchor(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length)\n{\n    yaml_string_t string;\n    STRING_ASSIGN(string, value, length);\n\n    while (string.pointer != string.end) {\n        if (!WRITE(emitter, string)) return 0;\n    }\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_tag_handle(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length)\n{\n    yaml_string_t string;\n    STRING_ASSIGN(string, value, length);\n\n    if (!emitter->whitespace) {\n        if (!PUT(emitter, ' ')) return 0;\n    }\n\n    while (string.pointer != string.end) {\n        if (!WRITE(emitter, string)) return 0;\n    }\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_tag_content(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length,\n        int need_whitespace)\n{\n    yaml_string_t string;\n    STRING_ASSIGN(string, value, length);\n\n    if (need_whitespace && !emitter->whitespace) {\n        if (!PUT(emitter, ' ')) return 0;\n    }\n\n    while (string.pointer != string.end) {\n        if (IS_ALPHA(string)\n                || CHECK(string, ';') || CHECK(string, '/')\n                || CHECK(string, '?') || CHECK(string, ':')\n                || CHECK(string, '@') || CHECK(string, '&')\n                || CHECK(string, '=') || CHECK(string, '+')\n                || CHECK(string, '$') || CHECK(string, ',')\n                || CHECK(string, '_') || CHECK(string, '.')\n                || CHECK(string, '~') || CHECK(string, '*')\n                || CHECK(string, '\\'') || CHECK(string, '(')\n                || CHECK(string, ')') || CHECK(string, '[')\n                || CHECK(string, ']')) {\n            if (!WRITE(emitter, string)) return 0;\n        }\n        else {\n            int width = WIDTH(string);\n            unsigned int value;\n            while (width --) {\n                value = *(string.pointer++);\n                if (!PUT(emitter, '%')) return 0;\n                if (!PUT(emitter, (value >> 4)\n                            + ((value >> 4) < 10 ? '0' : 'A' - 10)))\n                    return 0;\n                if (!PUT(emitter, (value & 0x0F)\n                            + ((value & 0x0F) < 10 ? '0' : 'A' - 10)))\n                    return 0;\n            }\n        }\n    }\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_plain_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks)\n{\n    yaml_string_t string;\n    int spaces = 0;\n    int breaks = 0;\n\n    STRING_ASSIGN(string, value, length);\n\n    if (!emitter->whitespace) {\n        if (!PUT(emitter, ' ')) return 0;\n    }\n\n    while (string.pointer != string.end)\n    {\n        if (IS_SPACE(string))\n        {\n            if (allow_breaks && !spaces\n                    && emitter->column > emitter->best_width\n                    && !IS_SPACE_AT(string, 1)) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n                MOVE(string);\n            }\n            else {\n                if (!WRITE(emitter, string)) return 0;\n            }\n            spaces = 1;\n        }\n        else if (IS_BREAK(string))\n        {\n            if (!breaks && CHECK(string, '\\n')) {\n                if (!PUT_BREAK(emitter)) return 0;\n            }\n            if (!WRITE_BREAK(emitter, string)) return 0;\n            emitter->indention = 1;\n            breaks = 1;\n        }\n        else\n        {\n            if (breaks) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n            }\n            if (!WRITE(emitter, string)) return 0;\n            emitter->indention = 0;\n            spaces = 0;\n            breaks = 0;\n        }\n    }\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n    if (emitter->root_context)\n    {\n        emitter->open_ended = 1;\n    }\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_single_quoted_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks)\n{\n    yaml_string_t string;\n    int spaces = 0;\n    int breaks = 0;\n\n    STRING_ASSIGN(string, value, length);\n\n    if (!yaml_emitter_write_indicator(emitter, \"'\", 1, 0, 0))\n        return 0;\n\n    while (string.pointer != string.end)\n    {\n        if (IS_SPACE(string))\n        {\n            if (allow_breaks && !spaces\n                    && emitter->column > emitter->best_width\n                    && string.pointer != string.start\n                    && string.pointer != string.end - 1\n                    && !IS_SPACE_AT(string, 1)) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n                MOVE(string);\n            }\n            else {\n                if (!WRITE(emitter, string)) return 0;\n            }\n            spaces = 1;\n        }\n        else if (IS_BREAK(string))\n        {\n            if (!breaks && CHECK(string, '\\n')) {\n                if (!PUT_BREAK(emitter)) return 0;\n            }\n            if (!WRITE_BREAK(emitter, string)) return 0;\n            emitter->indention = 1;\n            breaks = 1;\n        }\n        else\n        {\n            if (breaks) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n            }\n            if (CHECK(string, '\\'')) {\n                if (!PUT(emitter, '\\'')) return 0;\n            }\n            if (!WRITE(emitter, string)) return 0;\n            emitter->indention = 0;\n            spaces = 0;\n            breaks = 0;\n        }\n    }\n\n    if (!yaml_emitter_write_indicator(emitter, \"'\", 0, 0, 0))\n        return 0;\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_double_quoted_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length, int allow_breaks)\n{\n    yaml_string_t string;\n    int spaces = 0;\n\n    STRING_ASSIGN(string, value, length);\n\n    if (!yaml_emitter_write_indicator(emitter, \"\\\"\", 1, 0, 0))\n        return 0;\n\n    while (string.pointer != string.end)\n    {\n        if (!IS_PRINTABLE(string) || (!emitter->unicode && !IS_ASCII(string))\n                || IS_BOM(string) || IS_BREAK(string)\n                || CHECK(string, '\"') || CHECK(string, '\\\\'))\n        {\n            unsigned char octet;\n            unsigned int width;\n            unsigned int value;\n            int k;\n\n            octet = string.pointer[0];\n            width = (octet & 0x80) == 0x00 ? 1 :\n                    (octet & 0xE0) == 0xC0 ? 2 :\n                    (octet & 0xF0) == 0xE0 ? 3 :\n                    (octet & 0xF8) == 0xF0 ? 4 : 0;\n            value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n                    (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n                    (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n                    (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n            for (k = 1; k < (int)width; k ++) {\n                octet = string.pointer[k];\n                value = (value << 6) + (octet & 0x3F);\n            }\n            string.pointer += width;\n\n            if (!PUT(emitter, '\\\\')) return 0;\n\n            switch (value)\n            {\n                case 0x00:\n                    if (!PUT(emitter, '0')) return 0;\n                    break;\n\n                case 0x07:\n                    if (!PUT(emitter, 'a')) return 0;\n                    break;\n\n                case 0x08:\n                    if (!PUT(emitter, 'b')) return 0;\n                    break;\n\n                case 0x09:\n                    if (!PUT(emitter, 't')) return 0;\n                    break;\n\n                case 0x0A:\n                    if (!PUT(emitter, 'n')) return 0;\n                    break;\n\n                case 0x0B:\n                    if (!PUT(emitter, 'v')) return 0;\n                    break;\n\n                case 0x0C:\n                    if (!PUT(emitter, 'f')) return 0;\n                    break;\n\n                case 0x0D:\n                    if (!PUT(emitter, 'r')) return 0;\n                    break;\n\n                case 0x1B:\n                    if (!PUT(emitter, 'e')) return 0;\n                    break;\n\n                case 0x22:\n                    if (!PUT(emitter, '\\\"')) return 0;\n                    break;\n\n                case 0x5C:\n                    if (!PUT(emitter, '\\\\')) return 0;\n                    break;\n\n                case 0x85:\n                    if (!PUT(emitter, 'N')) return 0;\n                    break;\n\n                case 0xA0:\n                    if (!PUT(emitter, '_')) return 0;\n                    break;\n\n                case 0x2028:\n                    if (!PUT(emitter, 'L')) return 0;\n                    break;\n\n                case 0x2029:\n                    if (!PUT(emitter, 'P')) return 0;\n                    break;\n\n                default:\n                    if (value <= 0xFF) {\n                        if (!PUT(emitter, 'x')) return 0;\n                        width = 2;\n                    }\n                    else if (value <= 0xFFFF) {\n                        if (!PUT(emitter, 'u')) return 0;\n                        width = 4;\n                    }\n                    else {\n                        if (!PUT(emitter, 'U')) return 0;\n                        width = 8;\n                    }\n                    for (k = (width-1)*4; k >= 0; k -= 4) {\n                        int digit = (value >> k) & 0x0F;\n                        if (!PUT(emitter, digit + (digit < 10 ? '0' : 'A'-10)))\n                            return 0;\n                    }\n            }\n            spaces = 0;\n        }\n        else if (IS_SPACE(string))\n        {\n            if (allow_breaks && !spaces\n                    && emitter->column > emitter->best_width\n                    && string.pointer != string.start\n                    && string.pointer != string.end - 1) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n                if (IS_SPACE_AT(string, 1)) {\n                    if (!PUT(emitter, '\\\\')) return 0;\n                }\n                MOVE(string);\n            }\n            else {\n                if (!WRITE(emitter, string)) return 0;\n            }\n            spaces = 1;\n        }\n        else\n        {\n            if (!WRITE(emitter, string)) return 0;\n            spaces = 0;\n        }\n    }\n\n    if (!yaml_emitter_write_indicator(emitter, \"\\\"\", 0, 0, 0))\n        return 0;\n\n    emitter->whitespace = 0;\n    emitter->indention = 0;\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_block_scalar_hints(yaml_emitter_t *emitter,\n        yaml_string_t string)\n{\n    char indent_hint[2];\n    char *chomp_hint = NULL;\n\n    if (IS_SPACE(string) || IS_BREAK(string))\n    {\n        indent_hint[0] = '0' + (char)emitter->best_indent;\n        indent_hint[1] = '\\0';\n        if (!yaml_emitter_write_indicator(emitter, indent_hint, 0, 0, 0))\n            return 0;\n    }\n\n    emitter->open_ended = 0;\n\n    string.pointer = string.end;\n    if (string.start == string.pointer)\n    {\n        chomp_hint = \"-\";\n    }\n    else\n    {\n        do {\n            string.pointer --;\n        } while ((*string.pointer & 0xC0) == 0x80);\n        if (!IS_BREAK(string))\n        {\n            chomp_hint = \"-\";\n        }\n        else if (string.start == string.pointer)\n        {\n            chomp_hint = \"+\";\n            emitter->open_ended = 1;\n        }\n        else\n        {\n            do {\n                string.pointer --;\n            } while ((*string.pointer & 0xC0) == 0x80);\n            if (IS_BREAK(string))\n            {\n                chomp_hint = \"+\";\n                emitter->open_ended = 1;\n            }\n        }\n    }\n\n    if (chomp_hint)\n    {\n        if (!yaml_emitter_write_indicator(emitter, chomp_hint, 0, 0, 0))\n            return 0;\n    }\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_literal_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length)\n{\n    yaml_string_t string;\n    int breaks = 1;\n\n    STRING_ASSIGN(string, value, length);\n\n    if (!yaml_emitter_write_indicator(emitter, \"|\", 1, 0, 0))\n        return 0;\n    if (!yaml_emitter_write_block_scalar_hints(emitter, string))\n        return 0;\n    if (!PUT_BREAK(emitter)) return 0;\n    emitter->indention = 1;\n    emitter->whitespace = 1;\n\n    while (string.pointer != string.end)\n    {\n        if (IS_BREAK(string))\n        {\n            if (!WRITE_BREAK(emitter, string)) return 0;\n            emitter->indention = 1;\n            breaks = 1;\n        }\n        else\n        {\n            if (breaks) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n            }\n            if (!WRITE(emitter, string)) return 0;\n            emitter->indention = 0;\n            breaks = 0;\n        }\n    }\n\n    return 1;\n}\n\nstatic int\nyaml_emitter_write_folded_scalar(yaml_emitter_t *emitter,\n        yaml_char_t *value, size_t length)\n{\n    yaml_string_t string;\n    int breaks = 1;\n    int leading_spaces = 1;\n\n    STRING_ASSIGN(string, value, length);\n\n    if (!yaml_emitter_write_indicator(emitter, \">\", 1, 0, 0))\n        return 0;\n    if (!yaml_emitter_write_block_scalar_hints(emitter, string))\n        return 0;\n    if (!PUT_BREAK(emitter)) return 0;\n    emitter->indention = 1;\n    emitter->whitespace = 1;\n\n    while (string.pointer != string.end)\n    {\n        if (IS_BREAK(string))\n        {\n            if (!breaks && !leading_spaces && CHECK(string, '\\n')) {\n                int k = 0;\n                while (IS_BREAK_AT(string, k)) {\n                    k += WIDTH_AT(string, k);\n                }\n                if (!IS_BLANKZ_AT(string, k)) {\n                    if (!PUT_BREAK(emitter)) return 0;\n                }\n            }\n            if (!WRITE_BREAK(emitter, string)) return 0;\n            emitter->indention = 1;\n            breaks = 1;\n        }\n        else\n        {\n            if (breaks) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n                leading_spaces = IS_BLANK(string);\n            }\n            if (!breaks && IS_SPACE(string) && !IS_SPACE_AT(string, 1)\n                    && emitter->column > emitter->best_width) {\n                if (!yaml_emitter_write_indent(emitter)) return 0;\n                MOVE(string);\n            }\n            else {\n                if (!WRITE(emitter, string)) return 0;\n            }\n            emitter->indention = 0;\n            breaks = 0;\n        }\n    }\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/loader.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * API functions.\n */\n\nYAML_DECLARE(int)\nyaml_parser_load(yaml_parser_t *parser, yaml_document_t *document);\n\n/*\n * Error handling.\n */\n\nstatic int\nyaml_parser_set_composer_error(yaml_parser_t *parser,\n        const char *problem, yaml_mark_t problem_mark);\n\nstatic int\nyaml_parser_set_composer_error_context(yaml_parser_t *parser,\n        const char *context, yaml_mark_t context_mark,\n        const char *problem, yaml_mark_t problem_mark);\n\n\n/*\n * Alias handling.\n */\n\nstatic int\nyaml_parser_register_anchor(yaml_parser_t *parser,\n        int index, yaml_char_t *anchor);\n\n/*\n * Clean up functions.\n */\n\nstatic void\nyaml_parser_delete_aliases(yaml_parser_t *parser);\n\n/*\n * Composer functions.\n */\n\nstatic int\nyaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *first_event);\n\nstatic int\nyaml_parser_load_node(yaml_parser_t *parser, yaml_event_t *first_event);\n\nstatic int\nyaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *first_event);\n\nstatic int\nyaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event);\n\nstatic int\nyaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event);\n\nstatic int\nyaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event);\n\n/*\n * Load the next document of the stream.\n */\n\nYAML_DECLARE(int)\nyaml_parser_load(yaml_parser_t *parser, yaml_document_t *document)\n{\n    yaml_event_t event;\n\n    assert(parser);     /* Non-NULL parser object is expected. */\n    assert(document);   /* Non-NULL document object is expected. */\n\n    memset(document, 0, sizeof(yaml_document_t));\n    if (!STACK_INIT(parser, document->nodes, INITIAL_STACK_SIZE))\n        goto error;\n\n    if (!parser->stream_start_produced) {\n        if (!yaml_parser_parse(parser, &event)) goto error;\n        assert(event.type == YAML_STREAM_START_EVENT);\n                        /* STREAM-START is expected. */\n    }\n\n    if (parser->stream_end_produced) {\n        return 1;\n    }\n\n    if (!yaml_parser_parse(parser, &event)) goto error;\n    if (event.type == YAML_STREAM_END_EVENT) {\n        return 1;\n    }\n\n    if (!STACK_INIT(parser, parser->aliases, INITIAL_STACK_SIZE))\n        goto error;\n\n    parser->document = document;\n\n    if (!yaml_parser_load_document(parser, &event)) goto error;\n\n    yaml_parser_delete_aliases(parser);\n    parser->document = NULL;\n\n    return 1;\n\nerror:\n\n    yaml_parser_delete_aliases(parser);\n    yaml_document_delete(document);\n    parser->document = NULL;\n\n    return 0;\n}\n\n/*\n * Set composer error.\n */\n\nstatic int\nyaml_parser_set_composer_error(yaml_parser_t *parser,\n        const char *problem, yaml_mark_t problem_mark)\n{\n    parser->error = YAML_COMPOSER_ERROR;\n    parser->problem = problem;\n    parser->problem_mark = problem_mark;\n\n    return 0;\n}\n\n/*\n * Set composer error with context.\n */\n\nstatic int\nyaml_parser_set_composer_error_context(yaml_parser_t *parser,\n        const char *context, yaml_mark_t context_mark,\n        const char *problem, yaml_mark_t problem_mark)\n{\n    parser->error = YAML_COMPOSER_ERROR;\n    parser->context = context;\n    parser->context_mark = context_mark;\n    parser->problem = problem;\n    parser->problem_mark = problem_mark;\n\n    return 0;\n}\n\n/*\n * Delete the stack of aliases.\n */\n\nstatic void\nyaml_parser_delete_aliases(yaml_parser_t *parser)\n{\n    while (!STACK_EMPTY(parser, parser->aliases)) {\n        yaml_free(POP(parser, parser->aliases).anchor);\n    }\n    STACK_DEL(parser, parser->aliases);\n}\n\n/*\n * Compose a document object.\n */\n\nstatic int\nyaml_parser_load_document(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    yaml_event_t event;\n\n    assert(first_event->type == YAML_DOCUMENT_START_EVENT);\n                        /* DOCUMENT-START is expected. */\n\n    parser->document->version_directive\n        = first_event->data.document_start.version_directive;\n    parser->document->tag_directives.start\n        = first_event->data.document_start.tag_directives.start;\n    parser->document->tag_directives.end\n        = first_event->data.document_start.tag_directives.end;\n    parser->document->start_implicit\n        = first_event->data.document_start.implicit;\n    parser->document->start_mark = first_event->start_mark;\n\n    if (!yaml_parser_parse(parser, &event)) return 0;\n\n    if (!yaml_parser_load_node(parser, &event)) return 0;\n\n    if (!yaml_parser_parse(parser, &event)) return 0;\n    assert(event.type == YAML_DOCUMENT_END_EVENT);\n                        /* DOCUMENT-END is expected. */\n\n    parser->document->end_implicit = event.data.document_end.implicit;\n    parser->document->end_mark = event.end_mark;\n\n    return 1;\n}\n\n/*\n * Compose a node.\n */\n\nstatic int\nyaml_parser_load_node(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    switch (first_event->type) {\n        case YAML_ALIAS_EVENT:\n            return yaml_parser_load_alias(parser, first_event);\n        case YAML_SCALAR_EVENT:\n            return yaml_parser_load_scalar(parser, first_event);\n        case YAML_SEQUENCE_START_EVENT:\n            return yaml_parser_load_sequence(parser, first_event);\n        case YAML_MAPPING_START_EVENT:\n            return yaml_parser_load_mapping(parser, first_event);\n        default:\n            assert(0);  /* Could not happen. */\n            return 0;\n    }\n\n    return 0;\n}\n\n/*\n * Add an anchor.\n */\n\nstatic int\nyaml_parser_register_anchor(yaml_parser_t *parser,\n        int index, yaml_char_t *anchor)\n{\n    yaml_alias_data_t data;\n    yaml_alias_data_t *alias_data;\n\n    if (!anchor) return 1;\n\n    data.anchor = anchor;\n    data.index = index;\n    data.mark = parser->document->nodes.start[index-1].start_mark;\n\n    for (alias_data = parser->aliases.start;\n            alias_data != parser->aliases.top; alias_data ++) {\n        if (strcmp((char *)alias_data->anchor, (char *)anchor) == 0) {\n            yaml_free(anchor);\n            return yaml_parser_set_composer_error_context(parser,\n                    \"found duplicate anchor; first occurence\",\n                    alias_data->mark, \"second occurence\", data.mark);\n        }\n    }\n\n    if (!PUSH(parser, parser->aliases, data)) {\n        yaml_free(anchor);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Compose a node corresponding to an alias.\n */\n\nstatic int\nyaml_parser_load_alias(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    yaml_char_t *anchor = first_event->data.alias.anchor;\n    yaml_alias_data_t *alias_data;\n\n    for (alias_data = parser->aliases.start;\n            alias_data != parser->aliases.top; alias_data ++) {\n        if (strcmp((char *)alias_data->anchor, (char *)anchor) == 0) {\n            yaml_free(anchor);\n            return alias_data->index;\n        }\n    }\n\n    yaml_free(anchor);\n    return yaml_parser_set_composer_error(parser, \"found undefined alias\",\n            first_event->start_mark);\n}\n\n/*\n * Compose a scalar node.\n */\n\nstatic int\nyaml_parser_load_scalar(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    yaml_node_t node;\n    int index;\n    yaml_char_t *tag = first_event->data.scalar.tag;\n\n    if (!tag || strcmp((char *)tag, \"!\") == 0) {\n        yaml_free(tag);\n        tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SCALAR_TAG);\n        if (!tag) goto error;\n    }\n\n    SCALAR_NODE_INIT(node, tag, first_event->data.scalar.value,\n            first_event->data.scalar.length, first_event->data.scalar.style,\n            first_event->start_mark, first_event->end_mark);\n\n    if (!PUSH(parser, parser->document->nodes, node)) goto error;\n\n    index = (int) (parser->document->nodes.top - parser->document->nodes.start);\n\n    if (!yaml_parser_register_anchor(parser, index,\n                first_event->data.scalar.anchor)) return 0;\n\n    return index;\n\nerror:\n    yaml_free(tag);\n    yaml_free(first_event->data.scalar.anchor);\n    yaml_free(first_event->data.scalar.value);\n    return 0;\n}\n\n/*\n * Compose a sequence node.\n */\n\nstatic int\nyaml_parser_load_sequence(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    yaml_event_t event;\n    yaml_node_t node;\n    struct {\n        yaml_node_item_t *start;\n        yaml_node_item_t *end;\n        yaml_node_item_t *top;\n    } items = { NULL, NULL, NULL };\n    int index, item_index;\n    yaml_char_t *tag = first_event->data.sequence_start.tag;\n\n    if (!tag || strcmp((char *)tag, \"!\") == 0) {\n        yaml_free(tag);\n        tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG);\n        if (!tag) goto error;\n    }\n\n    if (!STACK_INIT(parser, items, INITIAL_STACK_SIZE)) goto error;\n\n    SEQUENCE_NODE_INIT(node, tag, items.start, items.end,\n            first_event->data.sequence_start.style,\n            first_event->start_mark, first_event->end_mark);\n\n    if (!PUSH(parser, parser->document->nodes, node)) goto error;\n\n    index = (int) (parser->document->nodes.top - parser->document->nodes.start);\n\n    if (!yaml_parser_register_anchor(parser, index,\n                first_event->data.sequence_start.anchor)) return 0;\n\n    if (!yaml_parser_parse(parser, &event)) return 0;\n\n    while (event.type != YAML_SEQUENCE_END_EVENT) {\n        item_index = yaml_parser_load_node(parser, &event);\n        if (!item_index) return 0;\n        if (!PUSH(parser,\n                    parser->document->nodes.start[index-1].data.sequence.items,\n                    item_index)) return 0;\n        if (!yaml_parser_parse(parser, &event)) return 0;\n    }\n\n    parser->document->nodes.start[index-1].end_mark = event.end_mark;\n\n    return index;\n\nerror:\n    yaml_free(tag);\n    yaml_free(first_event->data.sequence_start.anchor);\n    return 0;\n}\n\n/*\n * Compose a mapping node.\n */\n\nstatic int\nyaml_parser_load_mapping(yaml_parser_t *parser, yaml_event_t *first_event)\n{\n    yaml_event_t event;\n    yaml_node_t node;\n    struct {\n        yaml_node_pair_t *start;\n        yaml_node_pair_t *end;\n        yaml_node_pair_t *top;\n    } pairs = { NULL, NULL, NULL };\n    int index;\n    yaml_node_pair_t pair;\n    yaml_char_t *tag = first_event->data.mapping_start.tag;\n\n    if (!tag || strcmp((char *)tag, \"!\") == 0) {\n        yaml_free(tag);\n        tag = yaml_strdup((yaml_char_t *)YAML_DEFAULT_MAPPING_TAG);\n        if (!tag) goto error;\n    }\n\n    if (!STACK_INIT(parser, pairs, INITIAL_STACK_SIZE)) goto error;\n\n    MAPPING_NODE_INIT(node, tag, pairs.start, pairs.end,\n            first_event->data.mapping_start.style,\n            first_event->start_mark, first_event->end_mark);\n\n    if (!PUSH(parser, parser->document->nodes, node)) goto error;\n\n    index = (int) (parser->document->nodes.top - parser->document->nodes.start);\n\n    if (!yaml_parser_register_anchor(parser, index,\n                first_event->data.mapping_start.anchor)) return 0;\n\n    if (!yaml_parser_parse(parser, &event)) return 0;\n\n    while (event.type != YAML_MAPPING_END_EVENT) {\n        pair.key = yaml_parser_load_node(parser, &event);\n        if (!pair.key) return 0;\n        if (!yaml_parser_parse(parser, &event)) return 0;\n        pair.value = yaml_parser_load_node(parser, &event);\n        if (!pair.value) return 0;\n        if (!PUSH(parser,\n                    parser->document->nodes.start[index-1].data.mapping.pairs,\n                    pair)) return 0;\n        if (!yaml_parser_parse(parser, &event)) return 0;\n    }\n\n    parser->document->nodes.start[index-1].end_mark = event.end_mark;\n\n    return index;\n\nerror:\n    yaml_free(tag);\n    yaml_free(first_event->data.mapping_start.anchor);\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/parser.c",
    "content": "\n/*\n * The parser implements the following grammar:\n *\n * stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END\n * implicit_document    ::= block_node DOCUMENT-END*\n * explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n * block_node_or_indentless_sequence    ::=\n *                          ALIAS\n *                          | properties (block_content | indentless_block_sequence)?\n *                          | block_content\n *                          | indentless_block_sequence\n * block_node           ::= ALIAS\n *                          | properties block_content?\n *                          | block_content\n * flow_node            ::= ALIAS\n *                          | properties flow_content?\n *                          | flow_content\n * properties           ::= TAG ANCHOR? | ANCHOR TAG?\n * block_content        ::= block_collection | flow_collection | SCALAR\n * flow_content         ::= flow_collection | SCALAR\n * block_collection     ::= block_sequence | block_mapping\n * flow_collection      ::= flow_sequence | flow_mapping\n * block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n * indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n * block_mapping        ::= BLOCK-MAPPING_START\n *                          ((KEY block_node_or_indentless_sequence?)?\n *                          (VALUE block_node_or_indentless_sequence?)?)*\n *                          BLOCK-END\n * flow_sequence        ::= FLOW-SEQUENCE-START\n *                          (flow_sequence_entry FLOW-ENTRY)*\n *                          flow_sequence_entry?\n *                          FLOW-SEQUENCE-END\n * flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n * flow_mapping         ::= FLOW-MAPPING-START\n *                          (flow_mapping_entry FLOW-ENTRY)*\n *                          flow_mapping_entry?\n *                          FLOW-MAPPING-END\n * flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n */\n\n#include \"yaml_private.h\"\n\n/*\n * Peek the next token in the token queue.\n */\n\n#define PEEK_TOKEN(parser)                                                      \\\n    ((parser->token_available || yaml_parser_fetch_more_tokens(parser)) ?       \\\n        parser->tokens.head : NULL)\n\n/*\n * Remove the next token from the queue (must be called after PEEK_TOKEN).\n */\n\n#define SKIP_TOKEN(parser)                                                      \\\n    (parser->token_available = 0,                                               \\\n     parser->tokens_parsed ++,                                                  \\\n     parser->stream_end_produced =                                              \\\n        (parser->tokens.head->type == YAML_STREAM_END_TOKEN),                   \\\n     parser->tokens.head ++)\n\n/*\n * Public API declarations.\n */\n\nYAML_DECLARE(int)\nyaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event);\n\n/*\n * Error handling.\n */\n\nstatic int\nyaml_parser_set_parser_error(yaml_parser_t *parser,\n        const char *problem, yaml_mark_t problem_mark);\n\nstatic int\nyaml_parser_set_parser_error_context(yaml_parser_t *parser,\n        const char *context, yaml_mark_t context_mark,\n        const char *problem, yaml_mark_t problem_mark);\n\n/*\n * State functions.\n */\n\nstatic int\nyaml_parser_state_machine(yaml_parser_t *parser, yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_stream_start(yaml_parser_t *parser, yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_document_start(yaml_parser_t *parser, yaml_event_t *event,\n        int implicit);\n\nstatic int\nyaml_parser_parse_document_content(yaml_parser_t *parser, yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_document_end(yaml_parser_t *parser, yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_node(yaml_parser_t *parser, yaml_event_t *event,\n        int block, int indentless_sequence);\n\nstatic int\nyaml_parser_parse_block_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_parser_parse_indentless_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_block_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_parser_parse_block_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_end(yaml_parser_t *parser,\n        yaml_event_t *event);\n\nstatic int\nyaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event, int first);\n\nstatic int\nyaml_parser_parse_flow_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event, int empty);\n\n/*\n * Utility functions.\n */\n\nstatic int\nyaml_parser_process_empty_scalar(yaml_parser_t *parser,\n        yaml_event_t *event, yaml_mark_t mark);\n\nstatic int\nyaml_parser_process_directives(yaml_parser_t *parser,\n        yaml_version_directive_t **version_directive_ref,\n        yaml_tag_directive_t **tag_directives_start_ref,\n        yaml_tag_directive_t **tag_directives_end_ref);\n\nstatic int\nyaml_parser_append_tag_directive(yaml_parser_t *parser,\n        yaml_tag_directive_t value, int allow_duplicates, yaml_mark_t mark);\n\n/*\n * Get the next event.\n */\n\nYAML_DECLARE(int)\nyaml_parser_parse(yaml_parser_t *parser, yaml_event_t *event)\n{\n    assert(parser);     /* Non-NULL parser object is expected. */\n    assert(event);      /* Non-NULL event object is expected. */\n\n    /* Erase the event object. */\n\n    memset(event, 0, sizeof(yaml_event_t));\n\n    /* No events after the end of the stream or error. */\n\n    if (parser->stream_end_produced || parser->error ||\n            parser->state == YAML_PARSE_END_STATE) {\n        return 1;\n    }\n\n    /* Generate the next event. */\n\n    return yaml_parser_state_machine(parser, event);\n}\n\n/*\n * Set parser error.\n */\n\nstatic int\nyaml_parser_set_parser_error(yaml_parser_t *parser,\n        const char *problem, yaml_mark_t problem_mark)\n{\n    parser->error = YAML_PARSER_ERROR;\n    parser->problem = problem;\n    parser->problem_mark = problem_mark;\n\n    return 0;\n}\n\nstatic int\nyaml_parser_set_parser_error_context(yaml_parser_t *parser,\n        const char *context, yaml_mark_t context_mark,\n        const char *problem, yaml_mark_t problem_mark)\n{\n    parser->error = YAML_PARSER_ERROR;\n    parser->context = context;\n    parser->context_mark = context_mark;\n    parser->problem = problem;\n    parser->problem_mark = problem_mark;\n\n    return 0;\n}\n\n\n/*\n * State dispatcher.\n */\n\nstatic int\nyaml_parser_state_machine(yaml_parser_t *parser, yaml_event_t *event)\n{\n    switch (parser->state)\n    {\n        case YAML_PARSE_STREAM_START_STATE:\n            return yaml_parser_parse_stream_start(parser, event);\n\n        case YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n            return yaml_parser_parse_document_start(parser, event, 1);\n\n        case YAML_PARSE_DOCUMENT_START_STATE:\n            return yaml_parser_parse_document_start(parser, event, 0);\n\n        case YAML_PARSE_DOCUMENT_CONTENT_STATE:\n            return yaml_parser_parse_document_content(parser, event);\n\n        case YAML_PARSE_DOCUMENT_END_STATE:\n            return yaml_parser_parse_document_end(parser, event);\n\n        case YAML_PARSE_BLOCK_NODE_STATE:\n            return yaml_parser_parse_node(parser, event, 1, 0);\n\n        case YAML_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n            return yaml_parser_parse_node(parser, event, 1, 1);\n\n        case YAML_PARSE_FLOW_NODE_STATE:\n            return yaml_parser_parse_node(parser, event, 0, 0);\n\n        case YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n            return yaml_parser_parse_block_sequence_entry(parser, event, 1);\n\n        case YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n            return yaml_parser_parse_block_sequence_entry(parser, event, 0);\n\n        case YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n            return yaml_parser_parse_indentless_sequence_entry(parser, event);\n\n        case YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n            return yaml_parser_parse_block_mapping_key(parser, event, 1);\n\n        case YAML_PARSE_BLOCK_MAPPING_KEY_STATE:\n            return yaml_parser_parse_block_mapping_key(parser, event, 0);\n\n        case YAML_PARSE_BLOCK_MAPPING_VALUE_STATE:\n            return yaml_parser_parse_block_mapping_value(parser, event);\n\n        case YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n            return yaml_parser_parse_flow_sequence_entry(parser, event, 1);\n\n        case YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n            return yaml_parser_parse_flow_sequence_entry(parser, event, 0);\n\n        case YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n            return yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event);\n\n        case YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n            return yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event);\n\n        case YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n            return yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event);\n\n        case YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n            return yaml_parser_parse_flow_mapping_key(parser, event, 1);\n\n        case YAML_PARSE_FLOW_MAPPING_KEY_STATE:\n            return yaml_parser_parse_flow_mapping_key(parser, event, 0);\n\n        case YAML_PARSE_FLOW_MAPPING_VALUE_STATE:\n            return yaml_parser_parse_flow_mapping_value(parser, event, 0);\n\n        case YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n            return yaml_parser_parse_flow_mapping_value(parser, event, 1);\n\n        default:\n            assert(1);      /* Invalid state. */\n    }\n\n    return 0;\n}\n\n/*\n * Parse the production:\n * stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END\n *              ************\n */\n\nstatic int\nyaml_parser_parse_stream_start(yaml_parser_t *parser, yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type != YAML_STREAM_START_TOKEN) {\n        return yaml_parser_set_parser_error(parser,\n                \"did not find expected <stream-start>\", token->start_mark);\n    }\n\n    parser->state = YAML_PARSE_IMPLICIT_DOCUMENT_START_STATE;\n    STREAM_START_EVENT_INIT(*event, token->data.stream_start.encoding,\n            token->start_mark, token->start_mark);\n    SKIP_TOKEN(parser);\n\n    return 1;\n}\n\n/*\n * Parse the productions:\n * implicit_document    ::= block_node DOCUMENT-END*\n *                          *\n * explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n *                          *************************\n */\n\nstatic int\nyaml_parser_parse_document_start(yaml_parser_t *parser, yaml_event_t *event,\n        int implicit)\n{\n    yaml_token_t *token;\n    yaml_version_directive_t *version_directive = NULL;\n    struct {\n        yaml_tag_directive_t *start;\n        yaml_tag_directive_t *end;\n    } tag_directives = { NULL, NULL };\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    /* Parse extra document end indicators. */\n\n    if (!implicit)\n    {\n        while (token->type == YAML_DOCUMENT_END_TOKEN) {\n            SKIP_TOKEN(parser);\n            token = PEEK_TOKEN(parser);\n            if (!token) return 0;\n        }\n    }\n\n    /* Parse an implicit document. */\n\n    if (implicit && token->type != YAML_VERSION_DIRECTIVE_TOKEN &&\n            token->type != YAML_TAG_DIRECTIVE_TOKEN &&\n            token->type != YAML_DOCUMENT_START_TOKEN &&\n            token->type != YAML_STREAM_END_TOKEN)\n    {\n        if (!yaml_parser_process_directives(parser, NULL, NULL, NULL))\n            return 0;\n        if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE))\n            return 0;\n        parser->state = YAML_PARSE_BLOCK_NODE_STATE;\n        DOCUMENT_START_EVENT_INIT(*event, NULL, NULL, NULL, 1,\n                token->start_mark, token->start_mark);\n        return 1;\n    }\n\n    /* Parse an explicit document. */\n\n    else if (token->type != YAML_STREAM_END_TOKEN)\n    {\n        yaml_mark_t start_mark, end_mark;\n        start_mark = token->start_mark;\n        if (!yaml_parser_process_directives(parser, &version_directive,\n                    &tag_directives.start, &tag_directives.end))\n            return 0;\n        token = PEEK_TOKEN(parser);\n        if (!token) goto error;\n        if (token->type != YAML_DOCUMENT_START_TOKEN) {\n            yaml_parser_set_parser_error(parser,\n                    \"did not find expected <document start>\", token->start_mark);\n            goto error;\n        }\n        if (!PUSH(parser, parser->states, YAML_PARSE_DOCUMENT_END_STATE))\n            goto error;\n        parser->state = YAML_PARSE_DOCUMENT_CONTENT_STATE;\n        end_mark = token->end_mark;\n        DOCUMENT_START_EVENT_INIT(*event, version_directive,\n                tag_directives.start, tag_directives.end, 0,\n                start_mark, end_mark);\n        SKIP_TOKEN(parser);\n        version_directive = NULL;\n        tag_directives.start = tag_directives.end = NULL;\n        return 1;\n    }\n\n    /* Parse the stream end. */\n\n    else\n    {\n        parser->state = YAML_PARSE_END_STATE;\n        STREAM_END_EVENT_INIT(*event, token->start_mark, token->end_mark);\n        SKIP_TOKEN(parser);\n        return 1;\n    }\n\nerror:\n    yaml_free(version_directive);\n    while (tag_directives.start != tag_directives.end) {\n        yaml_free(tag_directives.end[-1].handle);\n        yaml_free(tag_directives.end[-1].prefix);\n        tag_directives.end --;\n    }\n    yaml_free(tag_directives.start);\n    return 0;\n}\n\n/*\n * Parse the productions:\n * explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n *                                                    ***********\n */\n\nstatic int\nyaml_parser_parse_document_content(yaml_parser_t *parser, yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_VERSION_DIRECTIVE_TOKEN ||\n            token->type == YAML_TAG_DIRECTIVE_TOKEN ||\n            token->type == YAML_DOCUMENT_START_TOKEN ||\n            token->type == YAML_DOCUMENT_END_TOKEN ||\n            token->type == YAML_STREAM_END_TOKEN) {\n        parser->state = POP(parser, parser->states);\n        return yaml_parser_process_empty_scalar(parser, event,\n                token->start_mark);\n    }\n    else {\n        return yaml_parser_parse_node(parser, event, 1, 0);\n    }\n}\n\n/*\n * Parse the productions:\n * implicit_document    ::= block_node DOCUMENT-END*\n *                                     *************\n * explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n *                                                                *************\n */\n\nstatic int\nyaml_parser_parse_document_end(yaml_parser_t *parser, yaml_event_t *event)\n{\n    yaml_token_t *token;\n    yaml_mark_t start_mark, end_mark;\n    int implicit = 1;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    start_mark = end_mark = token->start_mark;\n\n    if (token->type == YAML_DOCUMENT_END_TOKEN) {\n        end_mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        implicit = 0;\n    }\n\n    while (!STACK_EMPTY(parser, parser->tag_directives)) {\n        yaml_tag_directive_t tag_directive = POP(parser, parser->tag_directives);\n        yaml_free(tag_directive.handle);\n        yaml_free(tag_directive.prefix);\n    }\n\n    parser->state = YAML_PARSE_DOCUMENT_START_STATE;\n    DOCUMENT_END_EVENT_INIT(*event, implicit, start_mark, end_mark);\n\n    return 1;\n}\n\n/*\n * Parse the productions:\n * block_node_or_indentless_sequence    ::=\n *                          ALIAS\n *                          *****\n *                          | properties (block_content | indentless_block_sequence)?\n *                            **********  *\n *                          | block_content | indentless_block_sequence\n *                            *\n * block_node           ::= ALIAS\n *                          *****\n *                          | properties block_content?\n *                            ********** *\n *                          | block_content\n *                            *\n * flow_node            ::= ALIAS\n *                          *****\n *                          | properties flow_content?\n *                            ********** *\n *                          | flow_content\n *                            *\n * properties           ::= TAG ANCHOR? | ANCHOR TAG?\n *                          *************************\n * block_content        ::= block_collection | flow_collection | SCALAR\n *                                                               ******\n * flow_content         ::= flow_collection | SCALAR\n *                                            ******\n */\n\nstatic int\nyaml_parser_parse_node(yaml_parser_t *parser, yaml_event_t *event,\n        int block, int indentless_sequence)\n{\n    yaml_token_t *token;\n    yaml_char_t *anchor = NULL;\n    yaml_char_t *tag_handle = NULL;\n    yaml_char_t *tag_suffix = NULL;\n    yaml_char_t *tag = NULL;\n    yaml_mark_t start_mark, end_mark, tag_mark;\n    int implicit;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_ALIAS_TOKEN)\n    {\n        parser->state = POP(parser, parser->states);\n        ALIAS_EVENT_INIT(*event, token->data.alias.value,\n                token->start_mark, token->end_mark);\n        SKIP_TOKEN(parser);\n        return 1;\n    }\n\n    else\n    {\n        start_mark = end_mark = token->start_mark;\n\n        if (token->type == YAML_ANCHOR_TOKEN)\n        {\n            anchor = token->data.anchor.value;\n            start_mark = token->start_mark;\n            end_mark = token->end_mark;\n            SKIP_TOKEN(parser);\n            token = PEEK_TOKEN(parser);\n            if (!token) goto error;\n            if (token->type == YAML_TAG_TOKEN)\n            {\n                tag_handle = token->data.tag.handle;\n                tag_suffix = token->data.tag.suffix;\n                tag_mark = token->start_mark;\n                end_mark = token->end_mark;\n                SKIP_TOKEN(parser);\n                token = PEEK_TOKEN(parser);\n                if (!token) goto error;\n            }\n        }\n        else if (token->type == YAML_TAG_TOKEN)\n        {\n            tag_handle = token->data.tag.handle;\n            tag_suffix = token->data.tag.suffix;\n            start_mark = tag_mark = token->start_mark;\n            end_mark = token->end_mark;\n            SKIP_TOKEN(parser);\n            token = PEEK_TOKEN(parser);\n            if (!token) goto error;\n            if (token->type == YAML_ANCHOR_TOKEN)\n            {\n                anchor = token->data.anchor.value;\n                end_mark = token->end_mark;\n                SKIP_TOKEN(parser);\n                token = PEEK_TOKEN(parser);\n                if (!token) goto error;\n            }\n        }\n\n        if (tag_handle) {\n            if (!*tag_handle) {\n                tag = tag_suffix;\n                yaml_free(tag_handle);\n                tag_handle = tag_suffix = NULL;\n            }\n            else {\n                yaml_tag_directive_t *tag_directive;\n                for (tag_directive = parser->tag_directives.start;\n                        tag_directive != parser->tag_directives.top;\n                        tag_directive ++) {\n                    if (strcmp((char *)tag_directive->handle, (char *)tag_handle) == 0) {\n                        size_t prefix_len = strlen((char *)tag_directive->prefix);\n                        size_t suffix_len = strlen((char *)tag_suffix);\n                        tag = yaml_malloc(prefix_len+suffix_len+1);\n                        if (!tag) {\n                            parser->error = YAML_MEMORY_ERROR;\n                            goto error;\n                        }\n                        memcpy(tag, tag_directive->prefix, prefix_len);\n                        memcpy(tag+prefix_len, tag_suffix, suffix_len);\n                        tag[prefix_len+suffix_len] = '\\0';\n                        yaml_free(tag_handle);\n                        yaml_free(tag_suffix);\n                        tag_handle = tag_suffix = NULL;\n                        break;\n                    }\n                }\n                if (!tag) {\n                    yaml_parser_set_parser_error_context(parser,\n                            \"while parsing a node\", start_mark,\n                            \"found undefined tag handle\", tag_mark);\n                    goto error;\n                }\n            }\n        }\n\n        implicit = (!tag || !*tag);\n        if (indentless_sequence && token->type == YAML_BLOCK_ENTRY_TOKEN) {\n            end_mark = token->end_mark;\n            parser->state = YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE;\n            SEQUENCE_START_EVENT_INIT(*event, anchor, tag, implicit,\n                    YAML_BLOCK_SEQUENCE_STYLE, start_mark, end_mark);\n            return 1;\n        }\n        else {\n            if (token->type == YAML_SCALAR_TOKEN) {\n                int plain_implicit = 0;\n                int quoted_implicit = 0;\n                end_mark = token->end_mark;\n                if ((token->data.scalar.style == YAML_PLAIN_SCALAR_STYLE && !tag)\n                        || (tag && strcmp((char *)tag, \"!\") == 0)) {\n                    plain_implicit = 1;\n                }\n                else if (!tag) {\n                    quoted_implicit = 1;\n                }\n                parser->state = POP(parser, parser->states);\n                SCALAR_EVENT_INIT(*event, anchor, tag,\n                        token->data.scalar.value, token->data.scalar.length,\n                        plain_implicit, quoted_implicit,\n                        token->data.scalar.style, start_mark, end_mark);\n                SKIP_TOKEN(parser);\n                return 1;\n            }\n            else if (token->type == YAML_FLOW_SEQUENCE_START_TOKEN) {\n                end_mark = token->end_mark;\n                parser->state = YAML_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE;\n                SEQUENCE_START_EVENT_INIT(*event, anchor, tag, implicit,\n                        YAML_FLOW_SEQUENCE_STYLE, start_mark, end_mark);\n                return 1;\n            }\n            else if (token->type == YAML_FLOW_MAPPING_START_TOKEN) {\n                end_mark = token->end_mark;\n                parser->state = YAML_PARSE_FLOW_MAPPING_FIRST_KEY_STATE;\n                MAPPING_START_EVENT_INIT(*event, anchor, tag, implicit,\n                        YAML_FLOW_MAPPING_STYLE, start_mark, end_mark);\n                return 1;\n            }\n            else if (block && token->type == YAML_BLOCK_SEQUENCE_START_TOKEN) {\n                end_mark = token->end_mark;\n                parser->state = YAML_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE;\n                SEQUENCE_START_EVENT_INIT(*event, anchor, tag, implicit,\n                        YAML_BLOCK_SEQUENCE_STYLE, start_mark, end_mark);\n                return 1;\n            }\n            else if (block && token->type == YAML_BLOCK_MAPPING_START_TOKEN) {\n                end_mark = token->end_mark;\n                parser->state = YAML_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE;\n                MAPPING_START_EVENT_INIT(*event, anchor, tag, implicit,\n                        YAML_BLOCK_MAPPING_STYLE, start_mark, end_mark);\n                return 1;\n            }\n            else if (anchor || tag) {\n                yaml_char_t *value = yaml_malloc(1);\n                if (!value) {\n                    parser->error = YAML_MEMORY_ERROR;\n                    goto error;\n                }\n                value[0] = '\\0';\n                parser->state = POP(parser, parser->states);\n                SCALAR_EVENT_INIT(*event, anchor, tag, value, 0,\n                        implicit, 0, YAML_PLAIN_SCALAR_STYLE,\n                        start_mark, end_mark);\n                return 1;\n            }\n            else {\n                yaml_parser_set_parser_error_context(parser,\n                        (block ? \"while parsing a block node\"\n                         : \"while parsing a flow node\"), start_mark,\n                        \"did not find expected node content\", token->start_mark);\n                goto error;\n            }\n        }\n    }\n\nerror:\n    yaml_free(anchor);\n    yaml_free(tag_handle);\n    yaml_free(tag_suffix);\n    yaml_free(tag);\n\n    return 0;\n}\n\n/*\n * Parse the productions:\n * block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n *                    ********************  *********** *             *********\n */\n\nstatic int\nyaml_parser_parse_block_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event, int first)\n{\n    yaml_token_t *token;\n\n    if (first) {\n        token = PEEK_TOKEN(parser);\n        if (!PUSH(parser, parser->marks, token->start_mark))\n            return 0;\n        SKIP_TOKEN(parser);\n    }\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_BLOCK_ENTRY_TOKEN)\n    {\n        yaml_mark_t mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_BLOCK_ENTRY_TOKEN &&\n                token->type != YAML_BLOCK_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 1, 0);\n        }\n        else {\n            parser->state = YAML_PARSE_BLOCK_SEQUENCE_ENTRY_STATE;\n            return yaml_parser_process_empty_scalar(parser, event, mark);\n        }\n    }\n\n    else if (token->type == YAML_BLOCK_END_TOKEN)\n    {\n        yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */\n        parser->state = POP(parser, parser->states);\n        dummy_mark = POP(parser, parser->marks);\n        SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);\n        SKIP_TOKEN(parser);\n        return 1;\n    }\n\n    else\n    {\n        return yaml_parser_set_parser_error_context(parser,\n                \"while parsing a block collection\", POP(parser, parser->marks),\n                \"did not find expected '-' indicator\", token->start_mark);\n    }\n}\n\n/*\n * Parse the productions:\n * indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n *                           *********** *\n */\n\nstatic int\nyaml_parser_parse_indentless_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_BLOCK_ENTRY_TOKEN)\n    {\n        yaml_mark_t mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_BLOCK_ENTRY_TOKEN &&\n                token->type != YAML_KEY_TOKEN &&\n                token->type != YAML_VALUE_TOKEN &&\n                token->type != YAML_BLOCK_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 1, 0);\n        }\n        else {\n            parser->state = YAML_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE;\n            return yaml_parser_process_empty_scalar(parser, event, mark);\n        }\n    }\n\n    else\n    {\n        parser->state = POP(parser, parser->states);\n        SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->start_mark);\n        return 1;\n    }\n}\n\n/*\n * Parse the productions:\n * block_mapping        ::= BLOCK-MAPPING_START\n *                          *******************\n *                          ((KEY block_node_or_indentless_sequence?)?\n *                            *** *\n *                          (VALUE block_node_or_indentless_sequence?)?)*\n *\n *                          BLOCK-END\n *                          *********\n */\n\nstatic int\nyaml_parser_parse_block_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event, int first)\n{\n    yaml_token_t *token;\n\n    if (first) {\n        token = PEEK_TOKEN(parser);\n        if (!PUSH(parser, parser->marks, token->start_mark))\n            return 0;\n        SKIP_TOKEN(parser);\n    }\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_KEY_TOKEN)\n    {\n        yaml_mark_t mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_KEY_TOKEN &&\n                token->type != YAML_VALUE_TOKEN &&\n                token->type != YAML_BLOCK_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_BLOCK_MAPPING_VALUE_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 1, 1);\n        }\n        else {\n            parser->state = YAML_PARSE_BLOCK_MAPPING_VALUE_STATE;\n            return yaml_parser_process_empty_scalar(parser, event, mark);\n        }\n    }\n\n    else if (token->type == YAML_BLOCK_END_TOKEN)\n    {\n        yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */\n        parser->state = POP(parser, parser->states);\n        dummy_mark = POP(parser, parser->marks);\n        MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);\n        SKIP_TOKEN(parser);\n        return 1;\n    }\n\n    else\n    {\n        return yaml_parser_set_parser_error_context(parser,\n                \"while parsing a block mapping\", POP(parser, parser->marks),\n                \"did not find expected key\", token->start_mark);\n    }\n}\n\n/*\n * Parse the productions:\n * block_mapping        ::= BLOCK-MAPPING_START\n *\n *                          ((KEY block_node_or_indentless_sequence?)?\n *\n *                          (VALUE block_node_or_indentless_sequence?)?)*\n *                           ***** *\n *                          BLOCK-END\n *\n */\n\nstatic int\nyaml_parser_parse_block_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_VALUE_TOKEN)\n    {\n        yaml_mark_t mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_KEY_TOKEN &&\n                token->type != YAML_VALUE_TOKEN &&\n                token->type != YAML_BLOCK_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_BLOCK_MAPPING_KEY_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 1, 1);\n        }\n        else {\n            parser->state = YAML_PARSE_BLOCK_MAPPING_KEY_STATE;\n            return yaml_parser_process_empty_scalar(parser, event, mark);\n        }\n    }\n\n    else\n    {\n        parser->state = YAML_PARSE_BLOCK_MAPPING_KEY_STATE;\n        return yaml_parser_process_empty_scalar(parser, event, token->start_mark);\n    }\n}\n\n/*\n * Parse the productions:\n * flow_sequence        ::= FLOW-SEQUENCE-START\n *                          *******************\n *                          (flow_sequence_entry FLOW-ENTRY)*\n *                           *                   **********\n *                          flow_sequence_entry?\n *                          *\n *                          FLOW-SEQUENCE-END\n *                          *****************\n * flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                          *\n */\n\nstatic int\nyaml_parser_parse_flow_sequence_entry(yaml_parser_t *parser,\n        yaml_event_t *event, int first)\n{\n    yaml_token_t *token;\n    yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */\n\n    if (first) {\n        token = PEEK_TOKEN(parser);\n        if (!PUSH(parser, parser->marks, token->start_mark))\n            return 0;\n        SKIP_TOKEN(parser);\n    }\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type != YAML_FLOW_SEQUENCE_END_TOKEN)\n    {\n        if (!first) {\n            if (token->type == YAML_FLOW_ENTRY_TOKEN) {\n                SKIP_TOKEN(parser);\n                token = PEEK_TOKEN(parser);\n                if (!token) return 0;\n            }\n            else {\n                return yaml_parser_set_parser_error_context(parser,\n                        \"while parsing a flow sequence\", POP(parser, parser->marks),\n                        \"did not find expected ',' or ']'\", token->start_mark);\n            }\n        }\n\n        if (token->type == YAML_KEY_TOKEN) {\n            parser->state = YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE;\n            MAPPING_START_EVENT_INIT(*event, NULL, NULL,\n                    1, YAML_FLOW_MAPPING_STYLE,\n                    token->start_mark, token->end_mark);\n            SKIP_TOKEN(parser);\n            return 1;\n        }\n\n        else if (token->type != YAML_FLOW_SEQUENCE_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 0, 0);\n        }\n    }\n\n    parser->state = POP(parser, parser->states);\n    dummy_mark = POP(parser, parser->marks);\n    SEQUENCE_END_EVENT_INIT(*event, token->start_mark, token->end_mark);\n    SKIP_TOKEN(parser);\n    return 1;\n}\n\n/*\n * Parse the productions:\n * flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                                      *** *\n */\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type != YAML_VALUE_TOKEN && token->type != YAML_FLOW_ENTRY_TOKEN\n            && token->type != YAML_FLOW_SEQUENCE_END_TOKEN) {\n        if (!PUSH(parser, parser->states,\n                    YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE))\n            return 0;\n        return yaml_parser_parse_node(parser, event, 0, 0);\n    }\n    else {\n        yaml_mark_t mark = token->end_mark;\n        SKIP_TOKEN(parser);\n        parser->state = YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE;\n        return yaml_parser_process_empty_scalar(parser, event, mark);\n    }\n}\n\n/*\n * Parse the productions:\n * flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                                                      ***** *\n */\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type == YAML_VALUE_TOKEN) {\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_FLOW_ENTRY_TOKEN\n                && token->type != YAML_FLOW_SEQUENCE_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 0, 0);\n        }\n    }\n    parser->state = YAML_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE;\n    return yaml_parser_process_empty_scalar(parser, event, token->start_mark);\n}\n\n/*\n * Parse the productions:\n * flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                                                                      *\n */\n\nstatic int\nyaml_parser_parse_flow_sequence_entry_mapping_end(yaml_parser_t *parser,\n        yaml_event_t *event)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    parser->state = YAML_PARSE_FLOW_SEQUENCE_ENTRY_STATE;\n\n    MAPPING_END_EVENT_INIT(*event, token->start_mark, token->start_mark);\n    return 1;\n}\n\n/*\n * Parse the productions:\n * flow_mapping         ::= FLOW-MAPPING-START\n *                          ******************\n *                          (flow_mapping_entry FLOW-ENTRY)*\n *                           *                  **********\n *                          flow_mapping_entry?\n *                          ******************\n *                          FLOW-MAPPING-END\n *                          ****************\n * flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                          *           *** *\n */\n\nstatic int\nyaml_parser_parse_flow_mapping_key(yaml_parser_t *parser,\n        yaml_event_t *event, int first)\n{\n    yaml_token_t *token;\n    yaml_mark_t dummy_mark;     /* Used to eliminate a compiler warning. */\n\n    if (first) {\n        token = PEEK_TOKEN(parser);\n        if (!PUSH(parser, parser->marks, token->start_mark))\n            return 0;\n        SKIP_TOKEN(parser);\n    }\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (token->type != YAML_FLOW_MAPPING_END_TOKEN)\n    {\n        if (!first) {\n            if (token->type == YAML_FLOW_ENTRY_TOKEN) {\n                SKIP_TOKEN(parser);\n                token = PEEK_TOKEN(parser);\n                if (!token) return 0;\n            }\n            else {\n                return yaml_parser_set_parser_error_context(parser,\n                        \"while parsing a flow mapping\", POP(parser, parser->marks),\n                        \"did not find expected ',' or '}'\", token->start_mark);\n            }\n        }\n\n        if (token->type == YAML_KEY_TOKEN) {\n            SKIP_TOKEN(parser);\n            token = PEEK_TOKEN(parser);\n            if (!token) return 0;\n            if (token->type != YAML_VALUE_TOKEN\n                    && token->type != YAML_FLOW_ENTRY_TOKEN\n                    && token->type != YAML_FLOW_MAPPING_END_TOKEN) {\n                if (!PUSH(parser, parser->states,\n                            YAML_PARSE_FLOW_MAPPING_VALUE_STATE))\n                    return 0;\n                return yaml_parser_parse_node(parser, event, 0, 0);\n            }\n            else {\n                parser->state = YAML_PARSE_FLOW_MAPPING_VALUE_STATE;\n                return yaml_parser_process_empty_scalar(parser, event,\n                        token->start_mark);\n            }\n        }\n        else if (token->type != YAML_FLOW_MAPPING_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 0, 0);\n        }\n    }\n\n    parser->state = POP(parser, parser->states);\n    dummy_mark = POP(parser, parser->marks);\n    MAPPING_END_EVENT_INIT(*event, token->start_mark, token->end_mark);\n    SKIP_TOKEN(parser);\n    return 1;\n}\n\n/*\n * Parse the productions:\n * flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n *                                   *                  ***** *\n */\n\nstatic int\nyaml_parser_parse_flow_mapping_value(yaml_parser_t *parser,\n        yaml_event_t *event, int empty)\n{\n    yaml_token_t *token;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) return 0;\n\n    if (empty) {\n        parser->state = YAML_PARSE_FLOW_MAPPING_KEY_STATE;\n        return yaml_parser_process_empty_scalar(parser, event,\n                token->start_mark);\n    }\n\n    if (token->type == YAML_VALUE_TOKEN) {\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) return 0;\n        if (token->type != YAML_FLOW_ENTRY_TOKEN\n                && token->type != YAML_FLOW_MAPPING_END_TOKEN) {\n            if (!PUSH(parser, parser->states,\n                        YAML_PARSE_FLOW_MAPPING_KEY_STATE))\n                return 0;\n            return yaml_parser_parse_node(parser, event, 0, 0);\n        }\n    }\n\n    parser->state = YAML_PARSE_FLOW_MAPPING_KEY_STATE;\n    return yaml_parser_process_empty_scalar(parser, event, token->start_mark);\n}\n\n/*\n * Generate an empty scalar event.\n */\n\nstatic int\nyaml_parser_process_empty_scalar(yaml_parser_t *parser, yaml_event_t *event,\n        yaml_mark_t mark)\n{\n    yaml_char_t *value;\n\n    value = yaml_malloc(1);\n    if (!value) {\n        parser->error = YAML_MEMORY_ERROR;\n        return 0;\n    }\n    value[0] = '\\0';\n\n    SCALAR_EVENT_INIT(*event, NULL, NULL, value, 0,\n            1, 0, YAML_PLAIN_SCALAR_STYLE, mark, mark);\n\n    return 1;\n}\n\n/*\n * Parse directives.\n */\n\nstatic int\nyaml_parser_process_directives(yaml_parser_t *parser,\n        yaml_version_directive_t **version_directive_ref,\n        yaml_tag_directive_t **tag_directives_start_ref,\n        yaml_tag_directive_t **tag_directives_end_ref)\n{\n    yaml_tag_directive_t default_tag_directives[] = {\n        {(yaml_char_t *)\"!\", (yaml_char_t *)\"!\"},\n        {(yaml_char_t *)\"!!\", (yaml_char_t *)\"tag:yaml.org,2002:\"},\n        {NULL, NULL}\n    };\n    yaml_tag_directive_t *default_tag_directive;\n    yaml_version_directive_t *version_directive = NULL;\n    struct {\n        yaml_tag_directive_t *start;\n        yaml_tag_directive_t *end;\n        yaml_tag_directive_t *top;\n    } tag_directives = { NULL, NULL, NULL };\n    yaml_token_t *token;\n\n    if (!STACK_INIT(parser, tag_directives, INITIAL_STACK_SIZE))\n        goto error;\n\n    token = PEEK_TOKEN(parser);\n    if (!token) goto error;\n\n    while (token->type == YAML_VERSION_DIRECTIVE_TOKEN ||\n            token->type == YAML_TAG_DIRECTIVE_TOKEN)\n    {\n        if (token->type == YAML_VERSION_DIRECTIVE_TOKEN) {\n            if (version_directive) {\n                yaml_parser_set_parser_error(parser,\n                        \"found duplicate %YAML directive\", token->start_mark);\n                goto error;\n            }\n            if (token->data.version_directive.major != 1\n                    || token->data.version_directive.minor != 1) {\n                yaml_parser_set_parser_error(parser,\n                        \"found incompatible YAML document\", token->start_mark);\n                goto error;\n            }\n            version_directive = yaml_malloc(sizeof(yaml_version_directive_t));\n            if (!version_directive) {\n                parser->error = YAML_MEMORY_ERROR;\n                goto error;\n            }\n            version_directive->major = token->data.version_directive.major;\n            version_directive->minor = token->data.version_directive.minor;\n        }\n\n        else if (token->type == YAML_TAG_DIRECTIVE_TOKEN) {\n            yaml_tag_directive_t value;\n            value.handle = token->data.tag_directive.handle;\n            value.prefix = token->data.tag_directive.prefix;\n\n            if (!yaml_parser_append_tag_directive(parser, value, 0,\n                        token->start_mark))\n                goto error;\n            if (!PUSH(parser, tag_directives, value))\n                goto error;\n        }\n\n        SKIP_TOKEN(parser);\n        token = PEEK_TOKEN(parser);\n        if (!token) goto error;\n    }\n    \n    for (default_tag_directive = default_tag_directives;\n            default_tag_directive->handle; default_tag_directive++) {\n        if (!yaml_parser_append_tag_directive(parser, *default_tag_directive, 1,\n                    token->start_mark))\n            goto error;\n    }\n\n    if (version_directive_ref) {\n        *version_directive_ref = version_directive;\n    }\n    if (tag_directives_start_ref) {\n        if (STACK_EMPTY(parser, tag_directives)) {\n            *tag_directives_start_ref = *tag_directives_end_ref = NULL;\n            STACK_DEL(parser, tag_directives);\n        }\n        else {\n            *tag_directives_start_ref = tag_directives.start;\n            *tag_directives_end_ref = tag_directives.top;\n        }\n    }\n    else {\n        STACK_DEL(parser, tag_directives);\n    }\n\n    return 1;\n\nerror:\n    yaml_free(version_directive);\n    while (!STACK_EMPTY(parser, tag_directives)) {\n        yaml_tag_directive_t tag_directive = POP(parser, tag_directives);\n        yaml_free(tag_directive.handle);\n        yaml_free(tag_directive.prefix);\n    }\n    STACK_DEL(parser, tag_directives);\n    return 0;\n}\n\n/*\n * Append a tag directive to the directives stack.\n */\n\nstatic int\nyaml_parser_append_tag_directive(yaml_parser_t *parser,\n        yaml_tag_directive_t value, int allow_duplicates, yaml_mark_t mark)\n{\n    yaml_tag_directive_t *tag_directive;\n    yaml_tag_directive_t copy = { NULL, NULL };\n\n    for (tag_directive = parser->tag_directives.start;\n            tag_directive != parser->tag_directives.top; tag_directive ++) {\n        if (strcmp((char *)value.handle, (char *)tag_directive->handle) == 0) {\n            if (allow_duplicates)\n                return 1;\n            return yaml_parser_set_parser_error(parser,\n                    \"found duplicate %TAG directive\", mark);\n        }\n    }\n\n    copy.handle = yaml_strdup(value.handle);\n    copy.prefix = yaml_strdup(value.prefix);\n    if (!copy.handle || !copy.prefix) {\n        parser->error = YAML_MEMORY_ERROR;\n        goto error;\n    }\n\n    if (!PUSH(parser, parser->tag_directives, copy))\n        goto error;\n\n    return 1;\n\nerror:\n    yaml_free(copy.handle);\n    yaml_free(copy.prefix);\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/reader.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * Declarations.\n */\n\nstatic int\nyaml_parser_set_reader_error(yaml_parser_t *parser, const char *problem,\n        size_t offset, int value);\n\nstatic int\nyaml_parser_update_raw_buffer(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_determine_encoding(yaml_parser_t *parser);\n\nYAML_DECLARE(int)\nyaml_parser_update_buffer(yaml_parser_t *parser, size_t length);\n\n/*\n * Set the reader error and return 0.\n */\n\nstatic int\nyaml_parser_set_reader_error(yaml_parser_t *parser, const char *problem,\n        size_t offset, int value)\n{\n    parser->error = YAML_READER_ERROR;\n    parser->problem = problem;\n    parser->problem_offset = offset;\n    parser->problem_value = value;\n\n    return 0;\n}\n\n/*\n * Byte order marks.\n */\n\n#define BOM_UTF8    \"\\xef\\xbb\\xbf\"\n#define BOM_UTF16LE \"\\xff\\xfe\"\n#define BOM_UTF16BE \"\\xfe\\xff\"\n\n/*\n * Determine the input stream encoding by checking the BOM symbol. If no BOM is\n * found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.\n */\n\nstatic int\nyaml_parser_determine_encoding(yaml_parser_t *parser)\n{\n    /* Ensure that we had enough bytes in the raw buffer. */\n\n    while (!parser->eof \n            && parser->raw_buffer.last - parser->raw_buffer.pointer < 3) {\n        if (!yaml_parser_update_raw_buffer(parser)) {\n            return 0;\n        }\n    }\n\n    /* Determine the encoding. */\n\n    if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 2\n            && !memcmp(parser->raw_buffer.pointer, BOM_UTF16LE, 2)) {\n        parser->encoding = YAML_UTF16LE_ENCODING;\n        parser->raw_buffer.pointer += 2;\n        parser->offset += 2;\n    }\n    else if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 2\n            && !memcmp(parser->raw_buffer.pointer, BOM_UTF16BE, 2)) {\n        parser->encoding = YAML_UTF16BE_ENCODING;\n        parser->raw_buffer.pointer += 2;\n        parser->offset += 2;\n    }\n    else if (parser->raw_buffer.last - parser->raw_buffer.pointer >= 3\n            && !memcmp(parser->raw_buffer.pointer, BOM_UTF8, 3)) {\n        parser->encoding = YAML_UTF8_ENCODING;\n        parser->raw_buffer.pointer += 3;\n        parser->offset += 3;\n    }\n    else {\n        parser->encoding = YAML_UTF8_ENCODING;\n    }\n\n    return 1;\n}\n\n/*\n * Update the raw buffer.\n */\n\nstatic int\nyaml_parser_update_raw_buffer(yaml_parser_t *parser)\n{\n    size_t size_read = 0;\n\n    /* Return if the raw buffer is full. */\n\n    if (parser->raw_buffer.start == parser->raw_buffer.pointer\n            && parser->raw_buffer.last == parser->raw_buffer.end)\n        return 1;\n\n    /* Return on EOF. */\n\n    if (parser->eof) return 1;\n\n    /* Move the remaining bytes in the raw buffer to the beginning. */\n\n    if (parser->raw_buffer.start < parser->raw_buffer.pointer\n            && parser->raw_buffer.pointer < parser->raw_buffer.last) {\n        memmove(parser->raw_buffer.start, parser->raw_buffer.pointer,\n                parser->raw_buffer.last - parser->raw_buffer.pointer);\n    }\n    parser->raw_buffer.last -=\n        parser->raw_buffer.pointer - parser->raw_buffer.start;\n    parser->raw_buffer.pointer = parser->raw_buffer.start;\n\n    /* Call the read handler to fill the buffer. */\n\n    if (!parser->read_handler(parser->read_handler_data, parser->raw_buffer.last,\n                parser->raw_buffer.end - parser->raw_buffer.last, &size_read)) {\n        return yaml_parser_set_reader_error(parser, \"input error\",\n                parser->offset, -1);\n    }\n    parser->raw_buffer.last += size_read;\n    if (!size_read) {\n        parser->eof = 1;\n    }\n\n    return 1;\n}\n\n/*\n * Ensure that the buffer contains at least `length` characters.\n * Return 1 on success, 0 on failure.\n *\n * The length is supposed to be significantly less that the buffer size.\n */\n\nYAML_DECLARE(int)\nyaml_parser_update_buffer(yaml_parser_t *parser, size_t length)\n{\n    int first = 1;\n\n    assert(parser->read_handler);   /* Read handler must be set. */\n\n    /* If the EOF flag is set and the raw buffer is empty, do nothing. */\n\n    if (parser->eof && parser->raw_buffer.pointer == parser->raw_buffer.last)\n        return 1;\n\n    /* Return if the buffer contains enough characters. */\n\n    if (parser->unread >= length)\n        return 1;\n\n    /* Determine the input encoding if it is not known yet. */\n\n    if (!parser->encoding) {\n        if (!yaml_parser_determine_encoding(parser))\n            return 0;\n    }\n\n    /* Move the unread characters to the beginning of the buffer. */\n\n    if (parser->buffer.start < parser->buffer.pointer\n            && parser->buffer.pointer < parser->buffer.last) {\n        size_t size = parser->buffer.last - parser->buffer.pointer;\n        memmove(parser->buffer.start, parser->buffer.pointer, size);\n        parser->buffer.pointer = parser->buffer.start;\n        parser->buffer.last = parser->buffer.start + size;\n    }\n    else if (parser->buffer.pointer == parser->buffer.last) {\n        parser->buffer.pointer = parser->buffer.start;\n        parser->buffer.last = parser->buffer.start;\n    }\n\n    /* Fill the buffer until it has enough characters. */\n\n    while (parser->unread < length)\n    {\n        /* Fill the raw buffer if necessary. */\n\n        if (!first || parser->raw_buffer.pointer == parser->raw_buffer.last) {\n            if (!yaml_parser_update_raw_buffer(parser)) return 0;\n        }\n        first = 0;\n\n        /* Decode the raw buffer. */\n\n        while (parser->raw_buffer.pointer != parser->raw_buffer.last)\n        {\n            unsigned int value = 0, value2 = 0;\n            int incomplete = 0;\n            unsigned char octet;\n            unsigned int width = 0;\n            int low, high;\n            size_t k;\n            size_t raw_unread = parser->raw_buffer.last - parser->raw_buffer.pointer;\n\n            /* Decode the next character. */\n\n            switch (parser->encoding)\n            {\n                case YAML_UTF8_ENCODING:\n\n                    /*\n                     * Decode a UTF-8 character.  Check RFC 3629\n                     * (http://www.ietf.org/rfc/rfc3629.txt) for more details.\n                     *\n                     * The following table (taken from the RFC) is used for\n                     * decoding.\n                     *\n                     *    Char. number range |        UTF-8 octet sequence\n                     *      (hexadecimal)    |              (binary)\n                     *   --------------------+------------------------------------\n                     *   0000 0000-0000 007F | 0xxxxxxx\n                     *   0000 0080-0000 07FF | 110xxxxx 10xxxxxx\n                     *   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx\n                     *   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n                     *\n                     * Additionally, the characters in the range 0xD800-0xDFFF\n                     * are prohibited as they are reserved for use with UTF-16\n                     * surrogate pairs.\n                     */\n\n                    /* Determine the length of the UTF-8 sequence. */\n\n                    octet = parser->raw_buffer.pointer[0];\n                    width = (octet & 0x80) == 0x00 ? 1 :\n                            (octet & 0xE0) == 0xC0 ? 2 :\n                            (octet & 0xF0) == 0xE0 ? 3 :\n                            (octet & 0xF8) == 0xF0 ? 4 : 0;\n\n                    /* Check if the leading octet is valid. */\n\n                    if (!width)\n                        return yaml_parser_set_reader_error(parser,\n                                \"invalid leading UTF-8 octet\",\n                                parser->offset, octet);\n\n                    /* Check if the raw buffer contains an incomplete character. */\n\n                    if (width > raw_unread) {\n                        if (parser->eof) {\n                            return yaml_parser_set_reader_error(parser,\n                                    \"incomplete UTF-8 octet sequence\",\n                                    parser->offset, -1);\n                        }\n                        incomplete = 1;\n                        break;\n                    }\n\n                    /* Decode the leading octet. */\n\n                    value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n                            (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n                            (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n                            (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n\n                    /* Check and decode the trailing octets. */\n\n                    for (k = 1; k < width; k ++)\n                    {\n                        octet = parser->raw_buffer.pointer[k];\n\n                        /* Check if the octet is valid. */\n\n                        if ((octet & 0xC0) != 0x80)\n                            return yaml_parser_set_reader_error(parser,\n                                    \"invalid trailing UTF-8 octet\",\n                                    parser->offset+k, octet);\n\n                        /* Decode the octet. */\n\n                        value = (value << 6) + (octet & 0x3F);\n                    }\n\n                    /* Check the length of the sequence against the value. */\n\n                    if (!((width == 1) ||\n                            (width == 2 && value >= 0x80) ||\n                            (width == 3 && value >= 0x800) ||\n                            (width == 4 && value >= 0x10000)))\n                        return yaml_parser_set_reader_error(parser,\n                                \"invalid length of a UTF-8 sequence\",\n                                parser->offset, -1);\n\n                    /* Check the range of the value. */\n\n                    if ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF)\n                        return yaml_parser_set_reader_error(parser,\n                                \"invalid Unicode character\",\n                                parser->offset, value);\n\n                    break;\n                \n                case YAML_UTF16LE_ENCODING:\n                case YAML_UTF16BE_ENCODING:\n\n                    low = (parser->encoding == YAML_UTF16LE_ENCODING ? 0 : 1);\n                    high = (parser->encoding == YAML_UTF16LE_ENCODING ? 1 : 0);\n\n                    /*\n                     * The UTF-16 encoding is not as simple as one might\n                     * naively think.  Check RFC 2781\n                     * (http://www.ietf.org/rfc/rfc2781.txt).\n                     *\n                     * Normally, two subsequent bytes describe a Unicode\n                     * character.  However a special technique (called a\n                     * surrogate pair) is used for specifying character\n                     * values larger than 0xFFFF.\n                     *\n                     * A surrogate pair consists of two pseudo-characters:\n                     *      high surrogate area (0xD800-0xDBFF)\n                     *      low surrogate area (0xDC00-0xDFFF)\n                     *\n                     * The following formulas are used for decoding\n                     * and encoding characters using surrogate pairs:\n                     * \n                     *  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)\n                     *  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)\n                     *  W1 = 110110yyyyyyyyyy\n                     *  W2 = 110111xxxxxxxxxx\n                     *\n                     * where U is the character value, W1 is the high surrogate\n                     * area, W2 is the low surrogate area.\n                     */\n\n                    /* Check for incomplete UTF-16 character. */\n\n                    if (raw_unread < 2) {\n                        if (parser->eof) {\n                            return yaml_parser_set_reader_error(parser,\n                                    \"incomplete UTF-16 character\",\n                                    parser->offset, -1);\n                        }\n                        incomplete = 1;\n                        break;\n                    }\n\n                    /* Get the character. */\n\n                    value = parser->raw_buffer.pointer[low]\n                        + (parser->raw_buffer.pointer[high] << 8);\n\n                    /* Check for unexpected low surrogate area. */\n\n                    if ((value & 0xFC00) == 0xDC00)\n                        return yaml_parser_set_reader_error(parser,\n                                \"unexpected low surrogate area\",\n                                parser->offset, value);\n\n                    /* Check for a high surrogate area. */\n\n                    if ((value & 0xFC00) == 0xD800) {\n\n                        width = 4;\n\n                        /* Check for incomplete surrogate pair. */\n\n                        if (raw_unread < 4) {\n                            if (parser->eof) {\n                                return yaml_parser_set_reader_error(parser,\n                                        \"incomplete UTF-16 surrogate pair\",\n                                        parser->offset, -1);\n                            }\n                            incomplete = 1;\n                            break;\n                        }\n\n                        /* Get the next character. */\n\n                        value2 = parser->raw_buffer.pointer[low+2]\n                            + (parser->raw_buffer.pointer[high+2] << 8);\n\n                        /* Check for a low surrogate area. */\n\n                        if ((value2 & 0xFC00) != 0xDC00)\n                            return yaml_parser_set_reader_error(parser,\n                                    \"expected low surrogate area\",\n                                    parser->offset+2, value2);\n\n                        /* Generate the value of the surrogate pair. */\n\n                        value = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF);\n                    }\n\n                    else {\n                        width = 2;\n                    }\n\n                    break;\n\n                default:\n                    assert(1);      /* Impossible. */\n            }\n\n            /* Check if the raw buffer contains enough bytes to form a character. */\n\n            if (incomplete) break;\n\n            /*\n             * Check if the character is in the allowed range:\n             *      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)\n             *      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)\n             *      | [#x10000-#x10FFFF]                        (32 bit)\n             */\n\n            if (! (value == 0x09 || value == 0x0A || value == 0x0D\n                        || (value >= 0x20 && value <= 0x7E)\n                        || (value == 0x85) || (value >= 0xA0 && value <= 0xD7FF)\n                        || (value >= 0xE000 && value <= 0xFFFD)\n                        || (value >= 0x10000 && value <= 0x10FFFF)))\n                return yaml_parser_set_reader_error(parser,\n                        \"control characters are not allowed\",\n                        parser->offset, value);\n\n            /* Move the raw pointers. */\n\n            parser->raw_buffer.pointer += width;\n            parser->offset += width;\n\n            /* Finally put the character into the buffer. */\n\n            /* 0000 0000-0000 007F -> 0xxxxxxx */\n            if (value <= 0x7F) {\n                *(parser->buffer.last++) = value;\n            }\n            /* 0000 0080-0000 07FF -> 110xxxxx 10xxxxxx */\n            else if (value <= 0x7FF) {\n                *(parser->buffer.last++) = 0xC0 + (value >> 6);\n                *(parser->buffer.last++) = 0x80 + (value & 0x3F);\n            }\n            /* 0000 0800-0000 FFFF -> 1110xxxx 10xxxxxx 10xxxxxx */\n            else if (value <= 0xFFFF) {\n                *(parser->buffer.last++) = 0xE0 + (value >> 12);\n                *(parser->buffer.last++) = 0x80 + ((value >> 6) & 0x3F);\n                *(parser->buffer.last++) = 0x80 + (value & 0x3F);\n            }\n            /* 0001 0000-0010 FFFF -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */\n            else {\n                *(parser->buffer.last++) = 0xF0 + (value >> 18);\n                *(parser->buffer.last++) = 0x80 + ((value >> 12) & 0x3F);\n                *(parser->buffer.last++) = 0x80 + ((value >> 6) & 0x3F);\n                *(parser->buffer.last++) = 0x80 + (value & 0x3F);\n            }\n\n            parser->unread ++;\n        }\n\n        /* On EOF, put NUL into the buffer and return. */\n\n        if (parser->eof) {\n            *(parser->buffer.last++) = '\\0';\n            parser->unread ++;\n            return 1;\n        }\n\n    }\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/scanner.c",
    "content": "\n/*\n * Introduction\n * ************\n *\n * The following notes assume that you are familiar with the YAML specification\n * (http://yaml.org/spec/cvs/current.html).  We mostly follow it, although in\n * some cases we are less restrictive that it requires.\n *\n * The process of transforming a YAML stream into a sequence of events is\n * divided on two steps: Scanning and Parsing.\n *\n * The Scanner transforms the input stream into a sequence of tokens, while the\n * parser transform the sequence of tokens produced by the Scanner into a\n * sequence of parsing events.\n *\n * The Scanner is rather clever and complicated. The Parser, on the contrary,\n * is a straightforward implementation of a recursive-descendant parser (or,\n * LL(1) parser, as it is usually called).\n *\n * Actually there are two issues of Scanning that might be called \"clever\", the\n * rest is quite straightforward.  The issues are \"block collection start\" and\n * \"simple keys\".  Both issues are explained below in details.\n *\n * Here the Scanning step is explained and implemented.  We start with the list\n * of all the tokens produced by the Scanner together with short descriptions.\n *\n * Now, tokens:\n *\n *      STREAM-START(encoding)          # The stream start.\n *      STREAM-END                      # The stream end.\n *      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.\n *      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.\n *      DOCUMENT-START                  # '---'\n *      DOCUMENT-END                    # '...'\n *      BLOCK-SEQUENCE-START            # Indentation increase denoting a block\n *      BLOCK-MAPPING-START             # sequence or a block mapping.\n *      BLOCK-END                       # Indentation decrease.\n *      FLOW-SEQUENCE-START             # '['\n *      FLOW-SEQUENCE-END               # ']'\n *      BLOCK-SEQUENCE-START            # '{'\n *      BLOCK-SEQUENCE-END              # '}'\n *      BLOCK-ENTRY                     # '-'\n *      FLOW-ENTRY                      # ','\n *      KEY                             # '?' or nothing (simple keys).\n *      VALUE                           # ':'\n *      ALIAS(anchor)                   # '*anchor'\n *      ANCHOR(anchor)                  # '&anchor'\n *      TAG(handle,suffix)              # '!handle!suffix'\n *      SCALAR(value,style)             # A scalar.\n *\n * The following two tokens are \"virtual\" tokens denoting the beginning and the\n * end of the stream:\n *\n *      STREAM-START(encoding)\n *      STREAM-END\n *\n * We pass the information about the input stream encoding with the\n * STREAM-START token.\n *\n * The next two tokens are responsible for tags:\n *\n *      VERSION-DIRECTIVE(major,minor)\n *      TAG-DIRECTIVE(handle,prefix)\n *\n * Example:\n *\n *      %YAML   1.1\n *      %TAG    !   !foo\n *      %TAG    !yaml!  tag:yaml.org,2002:\n *      ---\n *\n * The correspoding sequence of tokens:\n *\n *      STREAM-START(utf-8)\n *      VERSION-DIRECTIVE(1,1)\n *      TAG-DIRECTIVE(\"!\",\"!foo\")\n *      TAG-DIRECTIVE(\"!yaml\",\"tag:yaml.org,2002:\")\n *      DOCUMENT-START\n *      STREAM-END\n *\n * Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole\n * line.\n *\n * The document start and end indicators are represented by:\n *\n *      DOCUMENT-START\n *      DOCUMENT-END\n *\n * Note that if a YAML stream contains an implicit document (without '---'\n * and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be\n * produced.\n *\n * In the following examples, we present whole documents together with the\n * produced tokens.\n *\n *      1. An implicit document:\n *\n *          'a scalar'\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          SCALAR(\"a scalar\",single-quoted)\n *          STREAM-END\n *\n *      2. An explicit document:\n *\n *          ---\n *          'a scalar'\n *          ...\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          DOCUMENT-START\n *          SCALAR(\"a scalar\",single-quoted)\n *          DOCUMENT-END\n *          STREAM-END\n *\n *      3. Several documents in a stream:\n *\n *          'a scalar'\n *          ---\n *          'another scalar'\n *          ---\n *          'yet another scalar'\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          SCALAR(\"a scalar\",single-quoted)\n *          DOCUMENT-START\n *          SCALAR(\"another scalar\",single-quoted)\n *          DOCUMENT-START\n *          SCALAR(\"yet another scalar\",single-quoted)\n *          STREAM-END\n *\n * We have already introduced the SCALAR token above.  The following tokens are\n * used to describe aliases, anchors, tag, and scalars:\n *\n *      ALIAS(anchor)\n *      ANCHOR(anchor)\n *      TAG(handle,suffix)\n *      SCALAR(value,style)\n *\n * The following series of examples illustrate the usage of these tokens:\n *\n *      1. A recursive sequence:\n *\n *          &A [ *A ]\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          ANCHOR(\"A\")\n *          FLOW-SEQUENCE-START\n *          ALIAS(\"A\")\n *          FLOW-SEQUENCE-END\n *          STREAM-END\n *\n *      2. A tagged scalar:\n *\n *          !!float \"3.14\"  # A good approximation.\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          TAG(\"!!\",\"float\")\n *          SCALAR(\"3.14\",double-quoted)\n *          STREAM-END\n *\n *      3. Various scalar styles:\n *\n *          --- # Implicit empty plain scalars do not produce tokens.\n *          --- a plain scalar\n *          --- 'a single-quoted scalar'\n *          --- \"a double-quoted scalar\"\n *          --- |-\n *            a literal scalar\n *          --- >-\n *            a folded\n *            scalar\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          DOCUMENT-START\n *          DOCUMENT-START\n *          SCALAR(\"a plain scalar\",plain)\n *          DOCUMENT-START\n *          SCALAR(\"a single-quoted scalar\",single-quoted)\n *          DOCUMENT-START\n *          SCALAR(\"a double-quoted scalar\",double-quoted)\n *          DOCUMENT-START\n *          SCALAR(\"a literal scalar\",literal)\n *          DOCUMENT-START\n *          SCALAR(\"a folded scalar\",folded)\n *          STREAM-END\n *\n * Now it's time to review collection-related tokens. We will start with\n * flow collections:\n *\n *      FLOW-SEQUENCE-START\n *      FLOW-SEQUENCE-END\n *      FLOW-MAPPING-START\n *      FLOW-MAPPING-END\n *      FLOW-ENTRY\n *      KEY\n *      VALUE\n *\n * The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and\n * FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'\n * correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the\n * indicators '?' and ':', which are used for denoting mapping keys and values,\n * are represented by the KEY and VALUE tokens.\n *\n * The following examples show flow collections:\n *\n *      1. A flow sequence:\n *\n *          [item 1, item 2, item 3]\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          FLOW-SEQUENCE-START\n *          SCALAR(\"item 1\",plain)\n *          FLOW-ENTRY\n *          SCALAR(\"item 2\",plain)\n *          FLOW-ENTRY\n *          SCALAR(\"item 3\",plain)\n *          FLOW-SEQUENCE-END\n *          STREAM-END\n *\n *      2. A flow mapping:\n *\n *          {\n *              a simple key: a value,  # Note that the KEY token is produced.\n *              ? a complex key: another value,\n *          }\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          FLOW-MAPPING-START\n *          KEY\n *          SCALAR(\"a simple key\",plain)\n *          VALUE\n *          SCALAR(\"a value\",plain)\n *          FLOW-ENTRY\n *          KEY\n *          SCALAR(\"a complex key\",plain)\n *          VALUE\n *          SCALAR(\"another value\",plain)\n *          FLOW-ENTRY\n *          FLOW-MAPPING-END\n *          STREAM-END\n *\n * A simple key is a key which is not denoted by the '?' indicator.  Note that\n * the Scanner still produce the KEY token whenever it encounters a simple key.\n *\n * For scanning block collections, the following tokens are used (note that we\n * repeat KEY and VALUE here):\n *\n *      BLOCK-SEQUENCE-START\n *      BLOCK-MAPPING-START\n *      BLOCK-END\n *      BLOCK-ENTRY\n *      KEY\n *      VALUE\n *\n * The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation\n * increase that precedes a block collection (cf. the INDENT token in Python).\n * The token BLOCK-END denote indentation decrease that ends a block collection\n * (cf. the DEDENT token in Python).  However YAML has some syntax pecularities\n * that makes detections of these tokens more complex.\n *\n * The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators\n * '-', '?', and ':' correspondingly.\n *\n * The following examples show how the tokens BLOCK-SEQUENCE-START,\n * BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:\n *\n *      1. Block sequences:\n *\n *          - item 1\n *          - item 2\n *          -\n *            - item 3.1\n *            - item 3.2\n *          -\n *            key 1: value 1\n *            key 2: value 2\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          SCALAR(\"item 1\",plain)\n *          BLOCK-ENTRY\n *          SCALAR(\"item 2\",plain)\n *          BLOCK-ENTRY\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          SCALAR(\"item 3.1\",plain)\n *          BLOCK-ENTRY\n *          SCALAR(\"item 3.2\",plain)\n *          BLOCK-END\n *          BLOCK-ENTRY\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"key 1\",plain)\n *          VALUE\n *          SCALAR(\"value 1\",plain)\n *          KEY\n *          SCALAR(\"key 2\",plain)\n *          VALUE\n *          SCALAR(\"value 2\",plain)\n *          BLOCK-END\n *          BLOCK-END\n *          STREAM-END\n *\n *      2. Block mappings:\n *\n *          a simple key: a value   # The KEY token is produced here.\n *          ? a complex key\n *          : another value\n *          a mapping:\n *            key 1: value 1\n *            key 2: value 2\n *          a sequence:\n *            - item 1\n *            - item 2\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"a simple key\",plain)\n *          VALUE\n *          SCALAR(\"a value\",plain)\n *          KEY\n *          SCALAR(\"a complex key\",plain)\n *          VALUE\n *          SCALAR(\"another value\",plain)\n *          KEY\n *          SCALAR(\"a mapping\",plain)\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"key 1\",plain)\n *          VALUE\n *          SCALAR(\"value 1\",plain)\n *          KEY\n *          SCALAR(\"key 2\",plain)\n *          VALUE\n *          SCALAR(\"value 2\",plain)\n *          BLOCK-END\n *          KEY\n *          SCALAR(\"a sequence\",plain)\n *          VALUE\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          SCALAR(\"item 1\",plain)\n *          BLOCK-ENTRY\n *          SCALAR(\"item 2\",plain)\n *          BLOCK-END\n *          BLOCK-END\n *          STREAM-END\n *\n * YAML does not always require to start a new block collection from a new\n * line.  If the current line contains only '-', '?', and ':' indicators, a new\n * block collection may start at the current line.  The following examples\n * illustrate this case:\n *\n *      1. Collections in a sequence:\n *\n *          - - item 1\n *            - item 2\n *          - key 1: value 1\n *            key 2: value 2\n *          - ? complex key\n *            : complex value\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          SCALAR(\"item 1\",plain)\n *          BLOCK-ENTRY\n *          SCALAR(\"item 2\",plain)\n *          BLOCK-END\n *          BLOCK-ENTRY\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"key 1\",plain)\n *          VALUE\n *          SCALAR(\"value 1\",plain)\n *          KEY\n *          SCALAR(\"key 2\",plain)\n *          VALUE\n *          SCALAR(\"value 2\",plain)\n *          BLOCK-END\n *          BLOCK-ENTRY\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"complex key\")\n *          VALUE\n *          SCALAR(\"complex value\")\n *          BLOCK-END\n *          BLOCK-END\n *          STREAM-END\n *\n *      2. Collections in a mapping:\n *\n *          ? a sequence\n *          : - item 1\n *            - item 2\n *          ? a mapping\n *          : key 1: value 1\n *            key 2: value 2\n *\n *      Tokens:\n *\n *          STREAM-START(utf-8)\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"a sequence\",plain)\n *          VALUE\n *          BLOCK-SEQUENCE-START\n *          BLOCK-ENTRY\n *          SCALAR(\"item 1\",plain)\n *          BLOCK-ENTRY\n *          SCALAR(\"item 2\",plain)\n *          BLOCK-END\n *          KEY\n *          SCALAR(\"a mapping\",plain)\n *          VALUE\n *          BLOCK-MAPPING-START\n *          KEY\n *          SCALAR(\"key 1\",plain)\n *          VALUE\n *          SCALAR(\"value 1\",plain)\n *          KEY\n *          SCALAR(\"key 2\",plain)\n *          VALUE\n *          SCALAR(\"value 2\",plain)\n *          BLOCK-END\n *          BLOCK-END\n *          STREAM-END\n *\n * YAML also permits non-indented sequences if they are included into a block\n * mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:\n *\n *      key:\n *      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.\n *      - item 2\n *\n * Tokens:\n *\n *      STREAM-START(utf-8)\n *      BLOCK-MAPPING-START\n *      KEY\n *      SCALAR(\"key\",plain)\n *      VALUE\n *      BLOCK-ENTRY\n *      SCALAR(\"item 1\",plain)\n *      BLOCK-ENTRY\n *      SCALAR(\"item 2\",plain)\n *      BLOCK-END\n */\n\n#include \"yaml_private.h\"\n\n/*\n * Ensure that the buffer contains the required number of characters.\n * Return 1 on success, 0 on failure (reader error or memory error).\n */\n\n#define CACHE(parser,length)                                                    \\\n    (parser->unread >= (length)                                                 \\\n        ? 1                                                                     \\\n        : yaml_parser_update_buffer(parser, (length)))\n\n/*\n * Advance the buffer pointer.\n */\n\n#define SKIP(parser)                                                            \\\n     (parser->mark.index ++,                                                    \\\n      parser->mark.column ++,                                                   \\\n      parser->unread --,                                                        \\\n      parser->buffer.pointer += WIDTH(parser->buffer))\n\n#define SKIP_LINE(parser)                                                       \\\n     (IS_CRLF(parser->buffer) ?                                                 \\\n      (parser->mark.index += 2,                                                 \\\n       parser->mark.column = 0,                                                 \\\n       parser->mark.line ++,                                                    \\\n       parser->unread -= 2,                                                     \\\n       parser->buffer.pointer += 2) :                                           \\\n      IS_BREAK(parser->buffer) ?                                                \\\n      (parser->mark.index ++,                                                   \\\n       parser->mark.column = 0,                                                 \\\n       parser->mark.line ++,                                                    \\\n       parser->unread --,                                                       \\\n       parser->buffer.pointer += WIDTH(parser->buffer)) : 0)\n\n/*\n * Copy a character to a string buffer and advance pointers.\n */\n\n#define READ(parser,string)                                                     \\\n     (STRING_EXTEND(parser,string) ?                                            \\\n         (COPY(string,parser->buffer),                                          \\\n          parser->mark.index ++,                                                \\\n          parser->mark.column ++,                                               \\\n          parser->unread --,                                                    \\\n          1) : 0)\n\n/*\n * Copy a line break character to a string buffer and advance pointers.\n */\n\n#define READ_LINE(parser,string)                                                \\\n    (STRING_EXTEND(parser,string) ?                                             \\\n    (((CHECK_AT(parser->buffer,'\\r',0)                                          \\\n       && CHECK_AT(parser->buffer,'\\n',1)) ?        /* CR LF -> LF */           \\\n     (*((string).pointer++) = (yaml_char_t) '\\n',                               \\\n      parser->buffer.pointer += 2,                                              \\\n      parser->mark.index += 2,                                                  \\\n      parser->mark.column = 0,                                                  \\\n      parser->mark.line ++,                                                     \\\n      parser->unread -= 2) :                                                    \\\n     (CHECK_AT(parser->buffer,'\\r',0)                                           \\\n      || CHECK_AT(parser->buffer,'\\n',0)) ?         /* CR|LF -> LF */           \\\n     (*((string).pointer++) = (yaml_char_t) '\\n',                               \\\n      parser->buffer.pointer ++,                                                \\\n      parser->mark.index ++,                                                    \\\n      parser->mark.column = 0,                                                  \\\n      parser->mark.line ++,                                                     \\\n      parser->unread --) :                                                      \\\n     (CHECK_AT(parser->buffer,'\\xC2',0)                                         \\\n      && CHECK_AT(parser->buffer,'\\x85',1)) ?       /* NEL -> LF */             \\\n     (*((string).pointer++) = (yaml_char_t) '\\n',                               \\\n      parser->buffer.pointer += 2,                                              \\\n      parser->mark.index ++,                                                    \\\n      parser->mark.column = 0,                                                  \\\n      parser->mark.line ++,                                                     \\\n      parser->unread --) :                                                      \\\n     (CHECK_AT(parser->buffer,'\\xE2',0) &&                                      \\\n      CHECK_AT(parser->buffer,'\\x80',1) &&                                      \\\n      (CHECK_AT(parser->buffer,'\\xA8',2) ||                                     \\\n       CHECK_AT(parser->buffer,'\\xA9',2))) ?        /* LS|PS -> LS|PS */        \\\n     (*((string).pointer++) = *(parser->buffer.pointer++),                      \\\n      *((string).pointer++) = *(parser->buffer.pointer++),                      \\\n      *((string).pointer++) = *(parser->buffer.pointer++),                      \\\n      parser->mark.index ++,                                                    \\\n      parser->mark.column = 0,                                                  \\\n      parser->mark.line ++,                                                     \\\n      parser->unread --) : 0),                                                  \\\n    1) : 0)\n\n/*\n * Public API declarations.\n */\n\nYAML_DECLARE(int)\nyaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token);\n\n/*\n * Error handling.\n */\n\nstatic int\nyaml_parser_set_scanner_error(yaml_parser_t *parser, const char *context,\n        yaml_mark_t context_mark, const char *problem);\n\n/*\n * High-level token API.\n */\n\nYAML_DECLARE(int)\nyaml_parser_fetch_more_tokens(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_next_token(yaml_parser_t *parser);\n\n/*\n * Potential simple keys.\n */\n\nstatic int\nyaml_parser_stale_simple_keys(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_save_simple_key(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_remove_simple_key(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_increase_flow_level(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_decrease_flow_level(yaml_parser_t *parser);\n\n/*\n * Indentation treatment.\n */\n\nstatic int\nyaml_parser_roll_indent(yaml_parser_t *parser, int column,\n        int number, yaml_token_type_t type, yaml_mark_t mark);\n\nstatic int\nyaml_parser_unroll_indent(yaml_parser_t *parser, int column);\n\n/*\n * Token fetchers.\n */\n\nstatic int\nyaml_parser_fetch_stream_start(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_stream_end(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_directive(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_document_indicator(yaml_parser_t *parser,\n        yaml_token_type_t type);\n\nstatic int\nyaml_parser_fetch_flow_collection_start(yaml_parser_t *parser,\n        yaml_token_type_t type);\n\nstatic int\nyaml_parser_fetch_flow_collection_end(yaml_parser_t *parser,\n        yaml_token_type_t type);\n\nstatic int\nyaml_parser_fetch_flow_entry(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_block_entry(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_key(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_value(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_anchor(yaml_parser_t *parser, yaml_token_type_t type);\n\nstatic int\nyaml_parser_fetch_tag(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_fetch_block_scalar(yaml_parser_t *parser, int literal);\n\nstatic int\nyaml_parser_fetch_flow_scalar(yaml_parser_t *parser, int single);\n\nstatic int\nyaml_parser_fetch_plain_scalar(yaml_parser_t *parser);\n\n/*\n * Token scanners.\n */\n\nstatic int\nyaml_parser_scan_to_next_token(yaml_parser_t *parser);\n\nstatic int\nyaml_parser_scan_directive(yaml_parser_t *parser, yaml_token_t *token);\n\nstatic int\nyaml_parser_scan_directive_name(yaml_parser_t *parser,\n        yaml_mark_t start_mark, yaml_char_t **name);\n\nstatic int\nyaml_parser_scan_version_directive_value(yaml_parser_t *parser,\n        yaml_mark_t start_mark, int *major, int *minor);\n\nstatic int\nyaml_parser_scan_version_directive_number(yaml_parser_t *parser,\n        yaml_mark_t start_mark, int *number);\n\nstatic int\nyaml_parser_scan_tag_directive_value(yaml_parser_t *parser,\n        yaml_mark_t mark, yaml_char_t **handle, yaml_char_t **prefix);\n\nstatic int\nyaml_parser_scan_anchor(yaml_parser_t *parser, yaml_token_t *token,\n        yaml_token_type_t type);\n\nstatic int\nyaml_parser_scan_tag(yaml_parser_t *parser, yaml_token_t *token);\n\nstatic int\nyaml_parser_scan_tag_handle(yaml_parser_t *parser, int directive,\n        yaml_mark_t start_mark, yaml_char_t **handle);\n\nstatic int\nyaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive,\n        yaml_char_t *head, yaml_mark_t start_mark, yaml_char_t **uri);\n\nstatic int\nyaml_parser_scan_uri_escapes(yaml_parser_t *parser, int directive,\n        yaml_mark_t start_mark, yaml_string_t *string);\n\nstatic int\nyaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,\n        int literal);\n\nstatic int\nyaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,\n        int *indent, yaml_string_t *breaks,\n        yaml_mark_t start_mark, yaml_mark_t *end_mark);\n\nstatic int\nyaml_parser_scan_flow_scalar(yaml_parser_t *parser, yaml_token_t *token,\n        int single);\n\nstatic int\nyaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token);\n\n/*\n * Get the next token.\n */\n\nYAML_DECLARE(int)\nyaml_parser_scan(yaml_parser_t *parser, yaml_token_t *token)\n{\n    assert(parser); /* Non-NULL parser object is expected. */\n    assert(token);  /* Non-NULL token object is expected. */\n\n    /* Erase the token object. */\n\n    memset(token, 0, sizeof(yaml_token_t));\n\n    /* No tokens after STREAM-END or error. */\n\n    if (parser->stream_end_produced || parser->error) {\n        return 1;\n    }\n\n    /* Ensure that the tokens queue contains enough tokens. */\n\n    if (!parser->token_available) {\n        if (!yaml_parser_fetch_more_tokens(parser))\n            return 0;\n    }\n\n    /* Fetch the next token from the queue. */\n    \n    *token = DEQUEUE(parser, parser->tokens);\n    parser->token_available = 0;\n    parser->tokens_parsed ++;\n\n    if (token->type == YAML_STREAM_END_TOKEN) {\n        parser->stream_end_produced = 1;\n    }\n\n    return 1;\n}\n\n/*\n * Set the scanner error and return 0.\n */\n\nstatic int\nyaml_parser_set_scanner_error(yaml_parser_t *parser, const char *context,\n        yaml_mark_t context_mark, const char *problem)\n{\n    parser->error = YAML_SCANNER_ERROR;\n    parser->context = context;\n    parser->context_mark = context_mark;\n    parser->problem = problem;\n    parser->problem_mark = parser->mark;\n\n    return 0;\n}\n\n/*\n * Ensure that the tokens queue contains at least one token which can be\n * returned to the Parser.\n */\n\nYAML_DECLARE(int)\nyaml_parser_fetch_more_tokens(yaml_parser_t *parser)\n{\n    int need_more_tokens;\n\n    /* While we need more tokens to fetch, do it. */\n\n    while (1)\n    {\n        /*\n         * Check if we really need to fetch more tokens.\n         */\n\n        need_more_tokens = 0;\n\n        if (parser->tokens.head == parser->tokens.tail)\n        {\n            /* Queue is empty. */\n\n            need_more_tokens = 1;\n        }\n        else\n        {\n            yaml_simple_key_t *simple_key;\n\n            /* Check if any potential simple key may occupy the head position. */\n\n            if (!yaml_parser_stale_simple_keys(parser))\n                return 0;\n\n            for (simple_key = parser->simple_keys.start;\n                    simple_key != parser->simple_keys.top; simple_key++) {\n                if (simple_key->possible\n                        && simple_key->token_number == parser->tokens_parsed) {\n                    need_more_tokens = 1;\n                    break;\n                }\n            }\n        }\n\n        /* We are finished. */\n\n        if (!need_more_tokens)\n            break;\n\n        /* Fetch the next token. */\n\n        if (!yaml_parser_fetch_next_token(parser))\n            return 0;\n    }\n\n    parser->token_available = 1;\n\n    return 1;\n}\n\n/*\n * The dispatcher for token fetchers.\n */\n\nstatic int\nyaml_parser_fetch_next_token(yaml_parser_t *parser)\n{\n    /* Ensure that the buffer is initialized. */\n\n    if (!CACHE(parser, 1))\n        return 0;\n\n    /* Check if we just started scanning.  Fetch STREAM-START then. */\n\n    if (!parser->stream_start_produced)\n        return yaml_parser_fetch_stream_start(parser);\n\n    /* Eat whitespaces and comments until we reach the next token. */\n\n    if (!yaml_parser_scan_to_next_token(parser))\n        return 0;\n\n    /* Remove obsolete potential simple keys. */\n\n    if (!yaml_parser_stale_simple_keys(parser))\n        return 0;\n\n    /* Check the indentation level against the current column. */\n\n    if (!yaml_parser_unroll_indent(parser, (int) parser->mark.column))\n        return 0;\n\n    /*\n     * Ensure that the buffer contains at least 4 characters.  4 is the length\n     * of the longest indicators ('--- ' and '... ').\n     */\n\n    if (!CACHE(parser, 4))\n        return 0;\n\n    /* Is it the end of the stream? */\n\n    if (IS_Z(parser->buffer))\n        return yaml_parser_fetch_stream_end(parser);\n\n    /* Is it a directive? */\n\n    if (parser->mark.column == 0 && CHECK(parser->buffer, '%'))\n        return yaml_parser_fetch_directive(parser);\n\n    /* Is it the document start indicator? */\n\n    if (parser->mark.column == 0\n            && CHECK_AT(parser->buffer, '-', 0)\n            && CHECK_AT(parser->buffer, '-', 1)\n            && CHECK_AT(parser->buffer, '-', 2)\n            && IS_BLANKZ_AT(parser->buffer, 3))\n        return yaml_parser_fetch_document_indicator(parser,\n                YAML_DOCUMENT_START_TOKEN);\n\n    /* Is it the document end indicator? */\n\n    if (parser->mark.column == 0\n            && CHECK_AT(parser->buffer, '.', 0)\n            && CHECK_AT(parser->buffer, '.', 1)\n            && CHECK_AT(parser->buffer, '.', 2)\n            && IS_BLANKZ_AT(parser->buffer, 3))\n        return yaml_parser_fetch_document_indicator(parser,\n                YAML_DOCUMENT_END_TOKEN);\n\n    /* Is it the flow sequence start indicator? */\n\n    if (CHECK(parser->buffer, '['))\n        return yaml_parser_fetch_flow_collection_start(parser,\n                YAML_FLOW_SEQUENCE_START_TOKEN);\n\n    /* Is it the flow mapping start indicator? */\n\n    if (CHECK(parser->buffer, '{'))\n        return yaml_parser_fetch_flow_collection_start(parser,\n                YAML_FLOW_MAPPING_START_TOKEN);\n\n    /* Is it the flow sequence end indicator? */\n\n    if (CHECK(parser->buffer, ']'))\n        return yaml_parser_fetch_flow_collection_end(parser,\n                YAML_FLOW_SEQUENCE_END_TOKEN);\n\n    /* Is it the flow mapping end indicator? */\n\n    if (CHECK(parser->buffer, '}'))\n        return yaml_parser_fetch_flow_collection_end(parser,\n                YAML_FLOW_MAPPING_END_TOKEN);\n\n    /* Is it the flow entry indicator? */\n\n    if (CHECK(parser->buffer, ','))\n        return yaml_parser_fetch_flow_entry(parser);\n\n    /* Is it the block entry indicator? */\n\n    if (CHECK(parser->buffer, '-') && IS_BLANKZ_AT(parser->buffer, 1))\n        return yaml_parser_fetch_block_entry(parser);\n\n    /* Is it the key indicator? */\n\n    if (CHECK(parser->buffer, '?')\n            && (parser->flow_level || IS_BLANKZ_AT(parser->buffer, 1)))\n        return yaml_parser_fetch_key(parser);\n\n    /* Is it the value indicator? */\n\n    if (CHECK(parser->buffer, ':')\n            && (parser->flow_level || IS_BLANKZ_AT(parser->buffer, 1)))\n        return yaml_parser_fetch_value(parser);\n\n    /* Is it an alias? */\n\n    if (CHECK(parser->buffer, '*'))\n        return yaml_parser_fetch_anchor(parser, YAML_ALIAS_TOKEN);\n\n    /* Is it an anchor? */\n\n    if (CHECK(parser->buffer, '&'))\n        return yaml_parser_fetch_anchor(parser, YAML_ANCHOR_TOKEN);\n\n    /* Is it a tag? */\n\n    if (CHECK(parser->buffer, '!'))\n        return yaml_parser_fetch_tag(parser);\n\n    /* Is it a literal scalar? */\n\n    if (CHECK(parser->buffer, '|') && !parser->flow_level)\n        return yaml_parser_fetch_block_scalar(parser, 1);\n\n    /* Is it a folded scalar? */\n\n    if (CHECK(parser->buffer, '>') && !parser->flow_level)\n        return yaml_parser_fetch_block_scalar(parser, 0);\n\n    /* Is it a single-quoted scalar? */\n\n    if (CHECK(parser->buffer, '\\''))\n        return yaml_parser_fetch_flow_scalar(parser, 1);\n\n    /* Is it a double-quoted scalar? */\n\n    if (CHECK(parser->buffer, '\"'))\n        return yaml_parser_fetch_flow_scalar(parser, 0);\n\n    /*\n     * Is it a plain scalar?\n     *\n     * A plain scalar may start with any non-blank characters except\n     *\n     *      '-', '?', ':', ',', '[', ']', '{', '}',\n     *      '#', '&', '*', '!', '|', '>', '\\'', '\\\"',\n     *      '%', '@', '`'.\n     *\n     * In the block context (and, for the '-' indicator, in the flow context\n     * too), it may also start with the characters\n     *\n     *      '-', '?', ':'\n     *\n     * if it is followed by a non-space character.\n     *\n     * The last rule is more restrictive than the specification requires.\n     */\n\n    if (!(IS_BLANKZ(parser->buffer) || CHECK(parser->buffer, '-')\n                || CHECK(parser->buffer, '?') || CHECK(parser->buffer, ':')\n                || CHECK(parser->buffer, ',') || CHECK(parser->buffer, '[')\n                || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '{')\n                || CHECK(parser->buffer, '}') || CHECK(parser->buffer, '#')\n                || CHECK(parser->buffer, '&') || CHECK(parser->buffer, '*')\n                || CHECK(parser->buffer, '!') || CHECK(parser->buffer, '|')\n                || CHECK(parser->buffer, '>') || CHECK(parser->buffer, '\\'')\n                || CHECK(parser->buffer, '\"') || CHECK(parser->buffer, '%')\n                || CHECK(parser->buffer, '@') || CHECK(parser->buffer, '`')) ||\n            (CHECK(parser->buffer, '-') && !IS_BLANK_AT(parser->buffer, 1)) ||\n            (!parser->flow_level &&\n             (CHECK(parser->buffer, '?') || CHECK(parser->buffer, ':'))\n             && !IS_BLANKZ_AT(parser->buffer, 1)))\n        return yaml_parser_fetch_plain_scalar(parser);\n\n    /*\n     * If we don't determine the token type so far, it is an error.\n     */\n\n    return yaml_parser_set_scanner_error(parser,\n            \"while scanning for the next token\", parser->mark,\n            \"found character that cannot start any token\");\n}\n\n/*\n * Check the list of potential simple keys and remove the positions that\n * cannot contain simple keys anymore.\n */\n\nstatic int\nyaml_parser_stale_simple_keys(yaml_parser_t *parser)\n{\n    yaml_simple_key_t *simple_key;\n\n    /* Check for a potential simple key for each flow level. */\n\n    for (simple_key = parser->simple_keys.start;\n            simple_key != parser->simple_keys.top; simple_key ++)\n    {\n        /*\n         * The specification requires that a simple key\n         *\n         *  - is limited to a single line,\n         *  - is shorter than 1024 characters.\n         */\n\n        if (simple_key->possible\n                && (simple_key->mark.line < parser->mark.line\n                    || simple_key->mark.index+1024 < parser->mark.index)) {\n\n            /* Check if the potential simple key to be removed is required. */\n\n            if (simple_key->required) {\n                return yaml_parser_set_scanner_error(parser,\n                        \"while scanning a simple key\", simple_key->mark,\n                        \"could not find expected ':'\");\n            }\n\n            simple_key->possible = 0;\n        }\n    }\n\n    return 1;\n}\n\n/*\n * Check if a simple key may start at the current position and add it if\n * needed.\n */\n\nstatic int\nyaml_parser_save_simple_key(yaml_parser_t *parser)\n{\n    /*\n     * A simple key is required at the current position if the scanner is in\n     * the block context and the current column coincides with the indentation\n     * level.\n     */\n\n    int required = (!parser->flow_level\n            && parser->indent == (int)parser->mark.column);\n\n    /*\n     * A simple key is required only when it is the first token in the current\n     * line.  Therefore it is always allowed.  But we add a check anyway.\n     */\n\n    assert(parser->simple_key_allowed || !required);    /* Impossible. */\n\n    /*\n     * If the current position may start a simple key, save it.\n     */\n\n    if (parser->simple_key_allowed)\n    {\n        yaml_simple_key_t simple_key;\n        simple_key.possible = 1;\n        simple_key.required = required;\n        simple_key.token_number = \n            parser->tokens_parsed + (parser->tokens.tail - parser->tokens.head);\n        simple_key.mark = parser->mark;\n\n        if (!yaml_parser_remove_simple_key(parser)) return 0;\n\n        *(parser->simple_keys.top-1) = simple_key;\n    }\n\n    return 1;\n}\n\n/*\n * Remove a potential simple key at the current flow level.\n */\n\nstatic int\nyaml_parser_remove_simple_key(yaml_parser_t *parser)\n{\n    yaml_simple_key_t *simple_key = parser->simple_keys.top-1;\n\n    if (simple_key->possible)\n    {\n        /* If the key is required, it is an error. */\n\n        if (simple_key->required) {\n            return yaml_parser_set_scanner_error(parser,\n                    \"while scanning a simple key\", simple_key->mark,\n                    \"could not find expected ':'\");\n        }\n    }\n\n    /* Remove the key from the stack. */\n\n    simple_key->possible = 0;\n\n    return 1;\n}\n\n/*\n * Increase the flow level and resize the simple key list if needed.\n */\n\nstatic int\nyaml_parser_increase_flow_level(yaml_parser_t *parser)\n{\n    yaml_simple_key_t empty_simple_key = { 0, 0, 0, { 0, 0, 0 } };\n\n    /* Reset the simple key on the next level. */\n\n    if (!PUSH(parser, parser->simple_keys, empty_simple_key))\n        return 0;\n\n    /* Increase the flow level. */\n\n    parser->flow_level++;\n\n    return 1;\n}\n\n/*\n * Decrease the flow level.\n */\n\nstatic int\nyaml_parser_decrease_flow_level(yaml_parser_t *parser)\n{\n    yaml_simple_key_t dummy_key;    /* Used to eliminate a compiler warning. */\n\n    if (parser->flow_level) {\n        parser->flow_level --;\n        dummy_key = POP(parser, parser->simple_keys);\n    }\n\n    return 1;\n}\n\n/*\n * Push the current indentation level to the stack and set the new level\n * the current column is greater than the indentation level.  In this case,\n * append or insert the specified token into the token queue.\n * \n */\n\nstatic int\nyaml_parser_roll_indent(yaml_parser_t *parser, int column,\n        int number, yaml_token_type_t type, yaml_mark_t mark)\n{\n    yaml_token_t token;\n\n    /* In the flow context, do nothing. */\n\n    if (parser->flow_level)\n        return 1;\n\n    if (parser->indent < column)\n    {\n        /*\n         * Push the current indentation level to the stack and set the new\n         * indentation level.\n         */\n\n        if (!PUSH(parser, parser->indents, parser->indent))\n            return 0;\n\n        parser->indent = column;\n\n        /* Create a token and insert it into the queue. */\n\n        TOKEN_INIT(token, type, mark, mark);\n\n        if (number == -1) {\n            if (!ENQUEUE(parser, parser->tokens, token))\n                return 0;\n        }\n        else {\n            if (!QUEUE_INSERT(parser,\n                        parser->tokens, number - parser->tokens_parsed, token))\n                return 0;\n        }\n    }\n\n    return 1;\n}\n\n/*\n * Pop indentation levels from the indents stack until the current level\n * becomes less or equal to the column.  For each intendation level, append\n * the BLOCK-END token.\n */\n\n\nstatic int\nyaml_parser_unroll_indent(yaml_parser_t *parser, int column)\n{\n    yaml_token_t token;\n\n    /* In the flow context, do nothing. */\n\n    if (parser->flow_level)\n        return 1;\n\n    /* Loop through the intendation levels in the stack. */\n\n    while (parser->indent > column)\n    {\n        /* Create a token and append it to the queue. */\n\n        TOKEN_INIT(token, YAML_BLOCK_END_TOKEN, parser->mark, parser->mark);\n\n        if (!ENQUEUE(parser, parser->tokens, token))\n            return 0;\n\n        /* Pop the indentation level. */\n\n        parser->indent = POP(parser, parser->indents);\n    }\n\n    return 1;\n}\n\n/*\n * Initialize the scanner and produce the STREAM-START token.\n */\n\nstatic int\nyaml_parser_fetch_stream_start(yaml_parser_t *parser)\n{\n    yaml_simple_key_t simple_key = { 0, 0, 0, { 0, 0, 0 } };\n    yaml_token_t token;\n\n    /* Set the initial indentation. */\n\n    parser->indent = -1;\n\n    /* Initialize the simple key stack. */\n\n    if (!PUSH(parser, parser->simple_keys, simple_key))\n        return 0;\n\n    /* A simple key is allowed at the beginning of the stream. */\n\n    parser->simple_key_allowed = 1;\n\n    /* We have started. */\n\n    parser->stream_start_produced = 1;\n\n    /* Create the STREAM-START token and append it to the queue. */\n\n    STREAM_START_TOKEN_INIT(token, parser->encoding,\n            parser->mark, parser->mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the STREAM-END token and shut down the scanner.\n */\n\nstatic int\nyaml_parser_fetch_stream_end(yaml_parser_t *parser)\n{\n    yaml_token_t token;\n\n    /* Force new line. */\n\n    if (parser->mark.column != 0) {\n        parser->mark.column = 0;\n        parser->mark.line ++;\n    }\n\n    /* Reset the indentation level. */\n\n    if (!yaml_parser_unroll_indent(parser, -1))\n        return 0;\n\n    /* Reset simple keys. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the STREAM-END token and append it to the queue. */\n\n    STREAM_END_TOKEN_INIT(token, parser->mark, parser->mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.\n */\n\nstatic int\nyaml_parser_fetch_directive(yaml_parser_t *parser)\n{\n    yaml_token_t token;\n\n    /* Reset the indentation level. */\n\n    if (!yaml_parser_unroll_indent(parser, -1))\n        return 0;\n\n    /* Reset simple keys. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the YAML-DIRECTIVE or TAG-DIRECTIVE token. */\n\n    if (!yaml_parser_scan_directive(parser, &token))\n        return 0;\n\n    /* Append the token to the queue. */\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Produce the DOCUMENT-START or DOCUMENT-END token.\n */\n\nstatic int\nyaml_parser_fetch_document_indicator(yaml_parser_t *parser,\n        yaml_token_type_t type)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* Reset the indentation level. */\n\n    if (!yaml_parser_unroll_indent(parser, -1))\n        return 0;\n\n    /* Reset simple keys. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    parser->simple_key_allowed = 0;\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n\n    SKIP(parser);\n    SKIP(parser);\n    SKIP(parser);\n\n    end_mark = parser->mark;\n\n    /* Create the DOCUMENT-START or DOCUMENT-END token. */\n\n    TOKEN_INIT(token, type, start_mark, end_mark);\n\n    /* Append the token to the queue. */\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.\n */\n\nstatic int\nyaml_parser_fetch_flow_collection_start(yaml_parser_t *parser,\n        yaml_token_type_t type)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* The indicators '[' and '{' may start a simple key. */\n\n    if (!yaml_parser_save_simple_key(parser))\n        return 0;\n\n    /* Increase the flow level. */\n\n    if (!yaml_parser_increase_flow_level(parser))\n        return 0;\n\n    /* A simple key may follow the indicators '[' and '{'. */\n\n    parser->simple_key_allowed = 1;\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token. */\n\n    TOKEN_INIT(token, type, start_mark, end_mark);\n\n    /* Append the token to the queue. */\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.\n */\n\nstatic int\nyaml_parser_fetch_flow_collection_end(yaml_parser_t *parser,\n        yaml_token_type_t type)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* Reset any potential simple key on the current flow level. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    /* Decrease the flow level. */\n\n    if (!yaml_parser_decrease_flow_level(parser))\n        return 0;\n\n    /* No simple keys after the indicators ']' and '}'. */\n\n    parser->simple_key_allowed = 0;\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token. */\n\n    TOKEN_INIT(token, type, start_mark, end_mark);\n\n    /* Append the token to the queue. */\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the FLOW-ENTRY token.\n */\n\nstatic int\nyaml_parser_fetch_flow_entry(yaml_parser_t *parser)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* Reset any potential simple keys on the current flow level. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    /* Simple keys are allowed after ','. */\n\n    parser->simple_key_allowed = 1;\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the FLOW-ENTRY token and append it to the queue. */\n\n    TOKEN_INIT(token, YAML_FLOW_ENTRY_TOKEN, start_mark, end_mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the BLOCK-ENTRY token.\n */\n\nstatic int\nyaml_parser_fetch_block_entry(yaml_parser_t *parser)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* Check if the scanner is in the block context. */\n\n    if (!parser->flow_level)\n    {\n        /* Check if we are allowed to start a new entry. */\n\n        if (!parser->simple_key_allowed) {\n            return yaml_parser_set_scanner_error(parser, NULL, parser->mark,\n                    \"block sequence entries are not allowed in this context\");\n        }\n\n        /* Add the BLOCK-SEQUENCE-START token if needed. */\n\n        if (!yaml_parser_roll_indent(parser, (int) parser->mark.column, -1,\n                    YAML_BLOCK_SEQUENCE_START_TOKEN, parser->mark))\n            return 0;\n    }\n    else\n    {\n        /*\n         * It is an error for the '-' indicator to occur in the flow context,\n         * but we let the Parser detect and report about it because the Parser\n         * is able to point to the context.\n         */\n    }\n\n    /* Reset any potential simple keys on the current flow level. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    /* Simple keys are allowed after '-'. */\n\n    parser->simple_key_allowed = 1;\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the BLOCK-ENTRY token and append it to the queue. */\n\n    TOKEN_INIT(token, YAML_BLOCK_ENTRY_TOKEN, start_mark, end_mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the KEY token.\n */\n\nstatic int\nyaml_parser_fetch_key(yaml_parser_t *parser)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n\n    /* In the block context, additional checks are required. */\n\n    if (!parser->flow_level)\n    {\n        /* Check if we are allowed to start a new key (not nessesary simple). */\n\n        if (!parser->simple_key_allowed) {\n            return yaml_parser_set_scanner_error(parser, NULL, parser->mark,\n                    \"mapping keys are not allowed in this context\");\n        }\n\n        /* Add the BLOCK-MAPPING-START token if needed. */\n\n        if (!yaml_parser_roll_indent(parser, (int) parser->mark.column, -1,\n                    YAML_BLOCK_MAPPING_START_TOKEN, parser->mark))\n            return 0;\n    }\n\n    /* Reset any potential simple keys on the current flow level. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    /* Simple keys are allowed after '?' in the block context. */\n\n    parser->simple_key_allowed = (!parser->flow_level);\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the KEY token and append it to the queue. */\n\n    TOKEN_INIT(token, YAML_KEY_TOKEN, start_mark, end_mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the VALUE token.\n */\n\nstatic int\nyaml_parser_fetch_value(yaml_parser_t *parser)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_token_t token;\n    yaml_simple_key_t *simple_key = parser->simple_keys.top-1;\n\n    /* Have we found a simple key? */\n\n    if (simple_key->possible)\n    {\n\n        /* Create the KEY token and insert it into the queue. */\n\n        TOKEN_INIT(token, YAML_KEY_TOKEN, simple_key->mark, simple_key->mark);\n\n        if (!QUEUE_INSERT(parser, parser->tokens,\n                    simple_key->token_number - parser->tokens_parsed, token))\n            return 0;\n\n        /* In the block context, we may need to add the BLOCK-MAPPING-START token. */\n\n        if (!yaml_parser_roll_indent(parser, (int) simple_key->mark.column,\n                    (int) simple_key->token_number,\n                    YAML_BLOCK_MAPPING_START_TOKEN, simple_key->mark))\n            return 0;\n\n        /* Remove the simple key. */\n\n        simple_key->possible = 0;\n\n        /* A simple key cannot follow another simple key. */\n\n        parser->simple_key_allowed = 0;\n    }\n    else\n    {\n        /* The ':' indicator follows a complex key. */\n\n        /* In the block context, extra checks are required. */\n\n        if (!parser->flow_level)\n        {\n            /* Check if we are allowed to start a complex value. */\n\n            if (!parser->simple_key_allowed) {\n                return yaml_parser_set_scanner_error(parser, NULL, parser->mark,\n                        \"mapping values are not allowed in this context\");\n            }\n\n            /* Add the BLOCK-MAPPING-START token if needed. */\n\n            if (!yaml_parser_roll_indent(parser, (int) parser->mark.column, -1,\n                        YAML_BLOCK_MAPPING_START_TOKEN, parser->mark))\n                return 0;\n        }\n\n        /* Simple keys after ':' are allowed in the block context. */\n\n        parser->simple_key_allowed = (!parser->flow_level);\n    }\n\n    /* Consume the token. */\n\n    start_mark = parser->mark;\n    SKIP(parser);\n    end_mark = parser->mark;\n\n    /* Create the VALUE token and append it to the queue. */\n\n    TOKEN_INIT(token, YAML_VALUE_TOKEN, start_mark, end_mark);\n\n    if (!ENQUEUE(parser, parser->tokens, token))\n        return 0;\n\n    return 1;\n}\n\n/*\n * Produce the ALIAS or ANCHOR token.\n */\n\nstatic int\nyaml_parser_fetch_anchor(yaml_parser_t *parser, yaml_token_type_t type)\n{\n    yaml_token_t token;\n\n    /* An anchor or an alias could be a simple key. */\n\n    if (!yaml_parser_save_simple_key(parser))\n        return 0;\n\n    /* A simple key cannot follow an anchor or an alias. */\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the ALIAS or ANCHOR token and append it to the queue. */\n\n    if (!yaml_parser_scan_anchor(parser, &token, type))\n        return 0;\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n    return 1;\n}\n\n/*\n * Produce the TAG token.\n */\n\nstatic int\nyaml_parser_fetch_tag(yaml_parser_t *parser)\n{\n    yaml_token_t token;\n\n    /* A tag could be a simple key. */\n\n    if (!yaml_parser_save_simple_key(parser))\n        return 0;\n\n    /* A simple key cannot follow a tag. */\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the TAG token and append it to the queue. */\n\n    if (!yaml_parser_scan_tag(parser, &token))\n        return 0;\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.\n */\n\nstatic int\nyaml_parser_fetch_block_scalar(yaml_parser_t *parser, int literal)\n{\n    yaml_token_t token;\n\n    /* Remove any potential simple keys. */\n\n    if (!yaml_parser_remove_simple_key(parser))\n        return 0;\n\n    /* A simple key may follow a block scalar. */\n\n    parser->simple_key_allowed = 1;\n\n    /* Create the SCALAR token and append it to the queue. */\n\n    if (!yaml_parser_scan_block_scalar(parser, &token, literal))\n        return 0;\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.\n */\n\nstatic int\nyaml_parser_fetch_flow_scalar(yaml_parser_t *parser, int single)\n{\n    yaml_token_t token;\n\n    /* A plain scalar could be a simple key. */\n\n    if (!yaml_parser_save_simple_key(parser))\n        return 0;\n\n    /* A simple key cannot follow a flow scalar. */\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the SCALAR token and append it to the queue. */\n\n    if (!yaml_parser_scan_flow_scalar(parser, &token, single))\n        return 0;\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Produce the SCALAR(...,plain) token.\n */\n\nstatic int\nyaml_parser_fetch_plain_scalar(yaml_parser_t *parser)\n{\n    yaml_token_t token;\n\n    /* A plain scalar could be a simple key. */\n\n    if (!yaml_parser_save_simple_key(parser))\n        return 0;\n\n    /* A simple key cannot follow a flow scalar. */\n\n    parser->simple_key_allowed = 0;\n\n    /* Create the SCALAR token and append it to the queue. */\n\n    if (!yaml_parser_scan_plain_scalar(parser, &token))\n        return 0;\n\n    if (!ENQUEUE(parser, parser->tokens, token)) {\n        yaml_token_delete(&token);\n        return 0;\n    }\n\n    return 1;\n}\n\n/*\n * Eat whitespaces and comments until the next token is found.\n */\n\nstatic int\nyaml_parser_scan_to_next_token(yaml_parser_t *parser)\n{\n    /* Until the next token is not found. */\n\n    while (1)\n    {\n        /* Allow the BOM mark to start a line. */\n\n        if (!CACHE(parser, 1)) return 0;\n\n        if (parser->mark.column == 0 && IS_BOM(parser->buffer))\n            SKIP(parser);\n\n        /*\n         * Eat whitespaces.\n         *\n         * Tabs are allowed:\n         *\n         *  - in the flow context;\n         *  - in the block context, but not at the beginning of the line or\n         *  after '-', '?', or ':' (complex value).  \n         */\n\n        if (!CACHE(parser, 1)) return 0;\n\n        while (CHECK(parser->buffer,' ') ||\n                ((parser->flow_level || !parser->simple_key_allowed) &&\n                 CHECK(parser->buffer, '\\t'))) {\n            SKIP(parser);\n            if (!CACHE(parser, 1)) return 0;\n        }\n\n        /* Eat a comment until a line break. */\n\n        if (CHECK(parser->buffer, '#')) {\n            while (!IS_BREAKZ(parser->buffer)) {\n                SKIP(parser);\n                if (!CACHE(parser, 1)) return 0;\n            }\n        }\n\n        /* If it is a line break, eat it. */\n\n        if (IS_BREAK(parser->buffer))\n        {\n            if (!CACHE(parser, 2)) return 0;\n            SKIP_LINE(parser);\n\n            /* In the block context, a new line may start a simple key. */\n\n            if (!parser->flow_level) {\n                parser->simple_key_allowed = 1;\n            }\n        }\n        else\n        {\n            /* We have found a token. */\n\n            break;\n        }\n    }\n\n    return 1;\n}\n\n/*\n * Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.\n *\n * Scope:\n *      %YAML    1.1    # a comment \\n\n *      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n *      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n *      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n */\n\nint\nyaml_parser_scan_directive(yaml_parser_t *parser, yaml_token_t *token)\n{\n    yaml_mark_t start_mark, end_mark;\n    yaml_char_t *name = NULL;\n    int major, minor;\n    yaml_char_t *handle = NULL, *prefix = NULL;\n\n    /* Eat '%'. */\n\n    start_mark = parser->mark;\n\n    SKIP(parser);\n\n    /* Scan the directive name. */\n\n    if (!yaml_parser_scan_directive_name(parser, start_mark, &name))\n        goto error;\n\n    /* Is it a YAML directive? */\n\n    if (strcmp((char *)name, \"YAML\") == 0)\n    {\n        /* Scan the VERSION directive value. */\n\n        if (!yaml_parser_scan_version_directive_value(parser, start_mark,\n                    &major, &minor))\n            goto error;\n\n        end_mark = parser->mark;\n\n        /* Create a VERSION-DIRECTIVE token. */\n\n        VERSION_DIRECTIVE_TOKEN_INIT(*token, major, minor,\n                start_mark, end_mark);\n    }\n\n    /* Is it a TAG directive? */\n\n    else if (strcmp((char *)name, \"TAG\") == 0)\n    {\n        /* Scan the TAG directive value. */\n\n        if (!yaml_parser_scan_tag_directive_value(parser, start_mark,\n                    &handle, &prefix))\n            goto error;\n\n        end_mark = parser->mark;\n\n        /* Create a TAG-DIRECTIVE token. */\n\n        TAG_DIRECTIVE_TOKEN_INIT(*token, handle, prefix,\n                start_mark, end_mark);\n    }\n\n    /* Unknown directive. */\n\n    else\n    {\n        yaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n                start_mark, \"found uknown directive name\");\n        goto error;\n    }\n\n    /* Eat the rest of the line including any comments. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_BLANK(parser->buffer)) {\n        SKIP(parser);\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    if (CHECK(parser->buffer, '#')) {\n        while (!IS_BREAKZ(parser->buffer)) {\n            SKIP(parser);\n            if (!CACHE(parser, 1)) goto error;\n        }\n    }\n\n    /* Check if we are at the end of the line. */\n\n    if (!IS_BREAKZ(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n                start_mark, \"did not find expected comment or line break\");\n        goto error;\n    }\n\n    /* Eat a line break. */\n\n    if (IS_BREAK(parser->buffer)) {\n        if (!CACHE(parser, 2)) goto error;\n        SKIP_LINE(parser);\n    }\n\n    yaml_free(name);\n\n    return 1;\n\nerror:\n    yaml_free(prefix);\n    yaml_free(handle);\n    yaml_free(name);\n    return 0;\n}\n\n/*\n * Scan the directive name.\n *\n * Scope:\n *      %YAML   1.1     # a comment \\n\n *       ^^^^\n *      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n *       ^^^\n */\n\nstatic int\nyaml_parser_scan_directive_name(yaml_parser_t *parser,\n        yaml_mark_t start_mark, yaml_char_t **name)\n{\n    yaml_string_t string = NULL_STRING;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n\n    /* Consume the directive name. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_ALPHA(parser->buffer))\n    {\n        if (!READ(parser, string)) goto error;\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    /* Check if the name is empty. */\n\n    if (string.start == string.pointer) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n                start_mark, \"could not find expected directive name\");\n        goto error;\n    }\n\n    /* Check for an blank character after the name. */\n\n    if (!IS_BLANKZ(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n                start_mark, \"found unexpected non-alphabetical character\");\n        goto error;\n    }\n\n    *name = string.start;\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    return 0;\n}\n\n/*\n * Scan the value of VERSION-DIRECTIVE.\n *\n * Scope:\n *      %YAML   1.1     # a comment \\n\n *           ^^^^^^\n */\n\nstatic int\nyaml_parser_scan_version_directive_value(yaml_parser_t *parser,\n        yaml_mark_t start_mark, int *major, int *minor)\n{\n    /* Eat whitespaces. */\n\n    if (!CACHE(parser, 1)) return 0;\n\n    while (IS_BLANK(parser->buffer)) {\n        SKIP(parser);\n        if (!CACHE(parser, 1)) return 0;\n    }\n\n    /* Consume the major version number. */\n\n    if (!yaml_parser_scan_version_directive_number(parser, start_mark, major))\n        return 0;\n\n    /* Eat '.'. */\n\n    if (!CHECK(parser->buffer, '.')) {\n        return yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n                start_mark, \"did not find expected digit or '.' character\");\n    }\n\n    SKIP(parser);\n\n    /* Consume the minor version number. */\n\n    if (!yaml_parser_scan_version_directive_number(parser, start_mark, minor))\n        return 0;\n\n    return 1;\n}\n\n#define MAX_NUMBER_LENGTH   9\n\n/*\n * Scan the version number of VERSION-DIRECTIVE.\n *\n * Scope:\n *      %YAML   1.1     # a comment \\n\n *              ^\n *      %YAML   1.1     # a comment \\n\n *                ^\n */\n\nstatic int\nyaml_parser_scan_version_directive_number(yaml_parser_t *parser,\n        yaml_mark_t start_mark, int *number)\n{\n    int value = 0;\n    size_t length = 0;\n\n    /* Repeat while the next character is digit. */\n\n    if (!CACHE(parser, 1)) return 0;\n\n    while (IS_DIGIT(parser->buffer))\n    {\n        /* Check if the number is too long. */\n\n        if (++length > MAX_NUMBER_LENGTH) {\n            return yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n                    start_mark, \"found extremely long version number\");\n        }\n\n        value = value*10 + AS_DIGIT(parser->buffer);\n\n        SKIP(parser);\n\n        if (!CACHE(parser, 1)) return 0;\n    }\n\n    /* Check if the number was present. */\n\n    if (!length) {\n        return yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n                start_mark, \"did not find expected version number\");\n    }\n\n    *number = value;\n\n    return 1;\n}\n\n/*\n * Scan the value of a TAG-DIRECTIVE token.\n *\n * Scope:\n *      %TAG    !yaml!  tag:yaml.org,2002:  \\n\n *          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n */\n\nstatic int\nyaml_parser_scan_tag_directive_value(yaml_parser_t *parser,\n        yaml_mark_t start_mark, yaml_char_t **handle, yaml_char_t **prefix)\n{\n    yaml_char_t *handle_value = NULL;\n    yaml_char_t *prefix_value = NULL;\n\n    /* Eat whitespaces. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_BLANK(parser->buffer)) {\n        SKIP(parser);\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    /* Scan a handle. */\n\n    if (!yaml_parser_scan_tag_handle(parser, 1, start_mark, &handle_value))\n        goto error;\n\n    /* Expect a whitespace. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    if (!IS_BLANK(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n                start_mark, \"did not find expected whitespace\");\n        goto error;\n    }\n\n    /* Eat whitespaces. */\n\n    while (IS_BLANK(parser->buffer)) {\n        SKIP(parser);\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    /* Scan a prefix. */\n\n    if (!yaml_parser_scan_tag_uri(parser, 1, NULL, start_mark, &prefix_value))\n        goto error;\n\n    /* Expect a whitespace or line break. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    if (!IS_BLANKZ(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n                start_mark, \"did not find expected whitespace or line break\");\n        goto error;\n    }\n\n    *handle = handle_value;\n    *prefix = prefix_value;\n\n    return 1;\n\nerror:\n    yaml_free(handle_value);\n    yaml_free(prefix_value);\n    return 0;\n}\n\nstatic int\nyaml_parser_scan_anchor(yaml_parser_t *parser, yaml_token_t *token,\n        yaml_token_type_t type)\n{\n    int length = 0;\n    yaml_mark_t start_mark, end_mark;\n    yaml_string_t string = NULL_STRING;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n\n    /* Eat the indicator character. */\n\n    start_mark = parser->mark;\n\n    SKIP(parser);\n\n    /* Consume the value. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_ALPHA(parser->buffer)) {\n        if (!READ(parser, string)) goto error;\n        if (!CACHE(parser, 1)) goto error;\n        length ++;\n    }\n\n    end_mark = parser->mark;\n\n    /*\n     * Check if length of the anchor is greater than 0 and it is followed by\n     * a whitespace character or one of the indicators:\n     *\n     *      '?', ':', ',', ']', '}', '%', '@', '`'.\n     */\n\n    if (!length || !(IS_BLANKZ(parser->buffer) || CHECK(parser->buffer, '?')\n                || CHECK(parser->buffer, ':') || CHECK(parser->buffer, ',')\n                || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '}')\n                || CHECK(parser->buffer, '%') || CHECK(parser->buffer, '@')\n                || CHECK(parser->buffer, '`'))) {\n        yaml_parser_set_scanner_error(parser, type == YAML_ANCHOR_TOKEN ?\n                \"while scanning an anchor\" : \"while scanning an alias\", start_mark,\n                \"did not find expected alphabetic or numeric character\");\n        goto error;\n    }\n\n    /* Create a token. */\n\n    if (type == YAML_ANCHOR_TOKEN) {\n        ANCHOR_TOKEN_INIT(*token, string.start, start_mark, end_mark);\n    }\n    else {\n        ALIAS_TOKEN_INIT(*token, string.start, start_mark, end_mark);\n    }\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    return 0;\n}\n\n/*\n * Scan a TAG token.\n */\n\nstatic int\nyaml_parser_scan_tag(yaml_parser_t *parser, yaml_token_t *token)\n{\n    yaml_char_t *handle = NULL;\n    yaml_char_t *suffix = NULL;\n    yaml_mark_t start_mark, end_mark;\n\n    start_mark = parser->mark;\n\n    /* Check if the tag is in the canonical form. */\n\n    if (!CACHE(parser, 2)) goto error;\n\n    if (CHECK_AT(parser->buffer, '<', 1))\n    {\n        /* Set the handle to '' */\n\n        handle = yaml_malloc(1);\n        if (!handle) goto error;\n        handle[0] = '\\0';\n\n        /* Eat '!<' */\n\n        SKIP(parser);\n        SKIP(parser);\n\n        /* Consume the tag value. */\n\n        if (!yaml_parser_scan_tag_uri(parser, 0, NULL, start_mark, &suffix))\n            goto error;\n\n        /* Check for '>' and eat it. */\n\n        if (!CHECK(parser->buffer, '>')) {\n            yaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n                    start_mark, \"did not find the expected '>'\");\n            goto error;\n        }\n\n        SKIP(parser);\n    }\n    else\n    {\n        /* The tag has either the '!suffix' or the '!handle!suffix' form. */\n\n        /* First, try to scan a handle. */\n\n        if (!yaml_parser_scan_tag_handle(parser, 0, start_mark, &handle))\n            goto error;\n\n        /* Check if it is, indeed, handle. */\n\n        if (handle[0] == '!' && handle[1] != '\\0' && handle[strlen((char *)handle)-1] == '!')\n        {\n            /* Scan the suffix now. */\n\n            if (!yaml_parser_scan_tag_uri(parser, 0, NULL, start_mark, &suffix))\n                goto error;\n        }\n        else\n        {\n            /* It wasn't a handle after all.  Scan the rest of the tag. */\n\n            if (!yaml_parser_scan_tag_uri(parser, 0, handle, start_mark, &suffix))\n                goto error;\n\n            /* Set the handle to '!'. */\n\n            yaml_free(handle);\n            handle = yaml_malloc(2);\n            if (!handle) goto error;\n            handle[0] = '!';\n            handle[1] = '\\0';\n\n            /*\n             * A special case: the '!' tag.  Set the handle to '' and the\n             * suffix to '!'.\n             */\n\n            if (suffix[0] == '\\0') {\n                yaml_char_t *tmp = handle;\n                handle = suffix;\n                suffix = tmp;\n            }\n        }\n    }\n\n    /* Check the character which ends the tag. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    if (!IS_BLANKZ(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n                start_mark, \"did not find expected whitespace or line break\");\n        goto error;\n    }\n\n    end_mark = parser->mark;\n\n    /* Create a token. */\n\n    TAG_TOKEN_INIT(*token, handle, suffix, start_mark, end_mark);\n\n    return 1;\n\nerror:\n    yaml_free(handle);\n    yaml_free(suffix);\n    return 0;\n}\n\n/*\n * Scan a tag handle.\n */\n\nstatic int\nyaml_parser_scan_tag_handle(yaml_parser_t *parser, int directive,\n        yaml_mark_t start_mark, yaml_char_t **handle)\n{\n    yaml_string_t string = NULL_STRING;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n\n    /* Check the initial '!' character. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    if (!CHECK(parser->buffer, '!')) {\n        yaml_parser_set_scanner_error(parser, directive ?\n                \"while scanning a tag directive\" : \"while scanning a tag\",\n                start_mark, \"did not find expected '!'\");\n        goto error;\n    }\n\n    /* Copy the '!' character. */\n\n    if (!READ(parser, string)) goto error;\n\n    /* Copy all subsequent alphabetical and numerical characters. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_ALPHA(parser->buffer))\n    {\n        if (!READ(parser, string)) goto error;\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    /* Check if the trailing character is '!' and copy it. */\n\n    if (CHECK(parser->buffer, '!'))\n    {\n        if (!READ(parser, string)) goto error;\n    }\n    else\n    {\n        /*\n         * It's either the '!' tag or not really a tag handle.  If it's a %TAG\n         * directive, it's an error.  If it's a tag token, it must be a part of\n         * URI.\n         */\n\n        if (directive && !(string.start[0] == '!' && string.start[1] == '\\0')) {\n            yaml_parser_set_scanner_error(parser, \"while parsing a tag directive\",\n                    start_mark, \"did not find expected '!'\");\n            goto error;\n        }\n    }\n\n    *handle = string.start;\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    return 0;\n}\n\n/*\n * Scan a tag.\n */\n\nstatic int\nyaml_parser_scan_tag_uri(yaml_parser_t *parser, int directive,\n        yaml_char_t *head, yaml_mark_t start_mark, yaml_char_t **uri)\n{\n    size_t length = head ? strlen((char *)head) : 0;\n    yaml_string_t string = NULL_STRING;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n\n    /* Resize the string to include the head. */\n\n    while (string.end - string.start <= (int)length) {\n        if (!yaml_string_extend(&string.start, &string.pointer, &string.end)) {\n            parser->error = YAML_MEMORY_ERROR;\n            goto error;\n        }\n    }\n\n    /*\n     * Copy the head if needed.\n     *\n     * Note that we don't copy the leading '!' character.\n     */\n\n    if (length > 1) {\n        memcpy(string.start, head+1, length-1);\n        string.pointer += length-1;\n    }\n\n    /* Scan the tag. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    /*\n     * The set of characters that may appear in URI is as follows:\n     *\n     *      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',\n     *      '=', '+', '$', ',', '.', '!', '~', '*', '\\'', '(', ')', '[', ']',\n     *      '%'.\n     */\n\n    while (IS_ALPHA(parser->buffer) || CHECK(parser->buffer, ';')\n            || CHECK(parser->buffer, '/') || CHECK(parser->buffer, '?')\n            || CHECK(parser->buffer, ':') || CHECK(parser->buffer, '@')\n            || CHECK(parser->buffer, '&') || CHECK(parser->buffer, '=')\n            || CHECK(parser->buffer, '+') || CHECK(parser->buffer, '$')\n            || CHECK(parser->buffer, ',') || CHECK(parser->buffer, '.')\n            || CHECK(parser->buffer, '!') || CHECK(parser->buffer, '~')\n            || CHECK(parser->buffer, '*') || CHECK(parser->buffer, '\\'')\n            || CHECK(parser->buffer, '(') || CHECK(parser->buffer, ')')\n            || CHECK(parser->buffer, '[') || CHECK(parser->buffer, ']')\n            || CHECK(parser->buffer, '%'))\n    {\n        /* Check if it is a URI-escape sequence. */\n\n        if (CHECK(parser->buffer, '%')) {\n            if (!yaml_parser_scan_uri_escapes(parser,\n                        directive, start_mark, &string)) goto error;\n        }\n        else {\n            if (!READ(parser, string)) goto error;\n        }\n\n        length ++;\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    /* Check if the tag is non-empty. */\n\n    if (!length) {\n        if (!STRING_EXTEND(parser, string))\n            goto error;\n\n        yaml_parser_set_scanner_error(parser, directive ?\n                \"while parsing a %TAG directive\" : \"while parsing a tag\",\n                start_mark, \"did not find expected tag URI\");\n        goto error;\n    }\n\n    *uri = string.start;\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    return 0;\n}\n\n/*\n * Decode an URI-escape sequence corresponding to a single UTF-8 character.\n */\n\nstatic int\nyaml_parser_scan_uri_escapes(yaml_parser_t *parser, int directive,\n        yaml_mark_t start_mark, yaml_string_t *string)\n{\n    int width = 0;\n\n    /* Decode the required number of characters. */\n\n    do {\n\n        unsigned char octet = 0;\n\n        /* Check for a URI-escaped octet. */\n\n        if (!CACHE(parser, 3)) return 0;\n\n        if (!(CHECK(parser->buffer, '%')\n                    && IS_HEX_AT(parser->buffer, 1)\n                    && IS_HEX_AT(parser->buffer, 2))) {\n            return yaml_parser_set_scanner_error(parser, directive ?\n                    \"while parsing a %TAG directive\" : \"while parsing a tag\",\n                    start_mark, \"did not find URI escaped octet\");\n        }\n\n        /* Get the octet. */\n\n        octet = (AS_HEX_AT(parser->buffer, 1) << 4) + AS_HEX_AT(parser->buffer, 2);\n\n        /* If it is the leading octet, determine the length of the UTF-8 sequence. */\n\n        if (!width)\n        {\n            width = (octet & 0x80) == 0x00 ? 1 :\n                    (octet & 0xE0) == 0xC0 ? 2 :\n                    (octet & 0xF0) == 0xE0 ? 3 :\n                    (octet & 0xF8) == 0xF0 ? 4 : 0;\n            if (!width) {\n                return yaml_parser_set_scanner_error(parser, directive ?\n                        \"while parsing a %TAG directive\" : \"while parsing a tag\",\n                        start_mark, \"found an incorrect leading UTF-8 octet\");\n            }\n        }\n        else\n        {\n            /* Check if the trailing octet is correct. */\n\n            if ((octet & 0xC0) != 0x80) {\n                return yaml_parser_set_scanner_error(parser, directive ?\n                        \"while parsing a %TAG directive\" : \"while parsing a tag\",\n                        start_mark, \"found an incorrect trailing UTF-8 octet\");\n            }\n        }\n\n        /* Copy the octet and move the pointers. */\n\n        *(string->pointer++) = octet;\n        SKIP(parser);\n        SKIP(parser);\n        SKIP(parser);\n\n    } while (--width);\n\n    return 1;\n}\n\n/*\n * Scan a block scalar.\n */\n\nstatic int\nyaml_parser_scan_block_scalar(yaml_parser_t *parser, yaml_token_t *token,\n        int literal)\n{\n    yaml_mark_t start_mark;\n    yaml_mark_t end_mark;\n    yaml_string_t string = NULL_STRING;\n    yaml_string_t leading_break = NULL_STRING;\n    yaml_string_t trailing_breaks = NULL_STRING;\n    int chomping = 0;\n    int increment = 0;\n    int indent = 0;\n    int leading_blank = 0;\n    int trailing_blank = 0;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, leading_break, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, trailing_breaks, INITIAL_STRING_SIZE)) goto error;\n\n    /* Eat the indicator '|' or '>'. */\n\n    start_mark = parser->mark;\n\n    SKIP(parser);\n\n    /* Scan the additional block scalar indicators. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    /* Check for a chomping indicator. */\n\n    if (CHECK(parser->buffer, '+') || CHECK(parser->buffer, '-'))\n    {\n        /* Set the chomping method and eat the indicator. */\n\n        chomping = CHECK(parser->buffer, '+') ? +1 : -1;\n\n        SKIP(parser);\n\n        /* Check for an indentation indicator. */\n\n        if (!CACHE(parser, 1)) goto error;\n\n        if (IS_DIGIT(parser->buffer))\n        {\n            /* Check that the intendation is greater than 0. */\n\n            if (CHECK(parser->buffer, '0')) {\n                yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n                        start_mark, \"found an intendation indicator equal to 0\");\n                goto error;\n            }\n\n            /* Get the intendation level and eat the indicator. */\n\n            increment = AS_DIGIT(parser->buffer);\n\n            SKIP(parser);\n        }\n    }\n\n    /* Do the same as above, but in the opposite order. */\n\n    else if (IS_DIGIT(parser->buffer))\n    {\n        if (CHECK(parser->buffer, '0')) {\n            yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n                    start_mark, \"found an intendation indicator equal to 0\");\n            goto error;\n        }\n\n        increment = AS_DIGIT(parser->buffer);\n\n        SKIP(parser);\n\n        if (!CACHE(parser, 1)) goto error;\n\n        if (CHECK(parser->buffer, '+') || CHECK(parser->buffer, '-')) {\n            chomping = CHECK(parser->buffer, '+') ? +1 : -1;\n\n            SKIP(parser);\n        }\n    }\n\n    /* Eat whitespaces and comments to the end of the line. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while (IS_BLANK(parser->buffer)) {\n        SKIP(parser);\n        if (!CACHE(parser, 1)) goto error;\n    }\n\n    if (CHECK(parser->buffer, '#')) {\n        while (!IS_BREAKZ(parser->buffer)) {\n            SKIP(parser);\n            if (!CACHE(parser, 1)) goto error;\n        }\n    }\n\n    /* Check if we are at the end of the line. */\n\n    if (!IS_BREAKZ(parser->buffer)) {\n        yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n                start_mark, \"did not find expected comment or line break\");\n        goto error;\n    }\n\n    /* Eat a line break. */\n\n    if (IS_BREAK(parser->buffer)) {\n        if (!CACHE(parser, 2)) goto error;\n        SKIP_LINE(parser);\n    }\n\n    end_mark = parser->mark;\n\n    /* Set the intendation level if it was specified. */\n\n    if (increment) {\n        indent = parser->indent >= 0 ? parser->indent+increment : increment;\n    }\n\n    /* Scan the leading line breaks and determine the indentation level if needed. */\n\n    if (!yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks,\n                start_mark, &end_mark)) goto error;\n\n    /* Scan the block scalar content. */\n\n    if (!CACHE(parser, 1)) goto error;\n\n    while ((int)parser->mark.column == indent && !IS_Z(parser->buffer))\n    {\n        /*\n         * We are at the beginning of a non-empty line.\n         */\n\n        /* Is it a trailing whitespace? */\n\n        trailing_blank = IS_BLANK(parser->buffer);\n\n        /* Check if we need to fold the leading line break. */\n\n        if (!literal && (*leading_break.start == '\\n')\n                && !leading_blank && !trailing_blank)\n        {\n            /* Do we need to join the lines by space? */\n\n            if (*trailing_breaks.start == '\\0') {\n                if (!STRING_EXTEND(parser, string)) goto error;\n                *(string.pointer ++) = ' ';\n            }\n\n            CLEAR(parser, leading_break);\n        }\n        else {\n            if (!JOIN(parser, string, leading_break)) goto error;\n            CLEAR(parser, leading_break);\n        }\n\n        /* Append the remaining line breaks. */\n\n        if (!JOIN(parser, string, trailing_breaks)) goto error;\n        CLEAR(parser, trailing_breaks);\n\n        /* Is it a leading whitespace? */\n\n        leading_blank = IS_BLANK(parser->buffer);\n\n        /* Consume the current line. */\n\n        while (!IS_BREAKZ(parser->buffer)) {\n            if (!READ(parser, string)) goto error;\n            if (!CACHE(parser, 1)) goto error;\n        }\n\n        /* Consume the line break. */\n\n        if (!CACHE(parser, 2)) goto error;\n\n        if (!READ_LINE(parser, leading_break)) goto error;\n\n        /* Eat the following intendation spaces and line breaks. */\n\n        if (!yaml_parser_scan_block_scalar_breaks(parser,\n                    &indent, &trailing_breaks, start_mark, &end_mark)) goto error;\n    }\n\n    /* Chomp the tail. */\n\n    if (chomping != -1) {\n        if (!JOIN(parser, string, leading_break)) goto error;\n    }\n    if (chomping == 1) {\n        if (!JOIN(parser, string, trailing_breaks)) goto error;\n    }\n\n    /* Create a token. */\n\n    SCALAR_TOKEN_INIT(*token, string.start, string.pointer-string.start,\n            literal ? YAML_LITERAL_SCALAR_STYLE : YAML_FOLDED_SCALAR_STYLE,\n            start_mark, end_mark);\n\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n\n    return 0;\n}\n\n/*\n * Scan intendation spaces and line breaks for a block scalar.  Determine the\n * intendation level if needed.\n */\n\nstatic int\nyaml_parser_scan_block_scalar_breaks(yaml_parser_t *parser,\n        int *indent, yaml_string_t *breaks,\n        yaml_mark_t start_mark, yaml_mark_t *end_mark)\n{\n    int max_indent = 0;\n\n    *end_mark = parser->mark;\n\n    /* Eat the intendation spaces and line breaks. */\n\n    while (1)\n    {\n        /* Eat the intendation spaces. */\n\n        if (!CACHE(parser, 1)) return 0;\n\n        while ((!*indent || (int)parser->mark.column < *indent)\n                && IS_SPACE(parser->buffer)) {\n            SKIP(parser);\n            if (!CACHE(parser, 1)) return 0;\n        }\n\n        if ((int)parser->mark.column > max_indent)\n            max_indent = (int)parser->mark.column;\n\n        /* Check for a tab character messing the intendation. */\n\n        if ((!*indent || (int)parser->mark.column < *indent)\n                && IS_TAB(parser->buffer)) {\n            return yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n                    start_mark, \"found a tab character where an intendation space is expected\");\n        }\n\n        /* Have we found a non-empty line? */\n\n        if (!IS_BREAK(parser->buffer)) break;\n\n        /* Consume the line break. */\n\n        if (!CACHE(parser, 2)) return 0;\n        if (!READ_LINE(parser, *breaks)) return 0;\n        *end_mark = parser->mark;\n    }\n\n    /* Determine the indentation level if needed. */\n\n    if (!*indent) {\n        *indent = max_indent;\n        if (*indent < parser->indent + 1)\n            *indent = parser->indent + 1;\n        if (*indent < 1)\n            *indent = 1;\n    }\n\n   return 1; \n}\n\n/*\n * Scan a quoted scalar.\n */\n\nstatic int\nyaml_parser_scan_flow_scalar(yaml_parser_t *parser, yaml_token_t *token,\n        int single)\n{\n    yaml_mark_t start_mark;\n    yaml_mark_t end_mark;\n    yaml_string_t string = NULL_STRING;\n    yaml_string_t leading_break = NULL_STRING;\n    yaml_string_t trailing_breaks = NULL_STRING;\n    yaml_string_t whitespaces = NULL_STRING;\n    int leading_blanks;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, leading_break, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, trailing_breaks, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, whitespaces, INITIAL_STRING_SIZE)) goto error;\n\n    /* Eat the left quote. */\n\n    start_mark = parser->mark;\n\n    SKIP(parser);\n\n    /* Consume the content of the quoted scalar. */\n\n    while (1)\n    {\n        /* Check that there are no document indicators at the beginning of the line. */\n\n        if (!CACHE(parser, 4)) goto error;\n\n        if (parser->mark.column == 0 &&\n            ((CHECK_AT(parser->buffer, '-', 0) &&\n              CHECK_AT(parser->buffer, '-', 1) &&\n              CHECK_AT(parser->buffer, '-', 2)) ||\n             (CHECK_AT(parser->buffer, '.', 0) &&\n              CHECK_AT(parser->buffer, '.', 1) &&\n              CHECK_AT(parser->buffer, '.', 2))) &&\n            IS_BLANKZ_AT(parser->buffer, 3))\n        {\n            yaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n                    start_mark, \"found unexpected document indicator\");\n            goto error;\n        }\n\n        /* Check for EOF. */\n\n        if (IS_Z(parser->buffer)) {\n            yaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n                    start_mark, \"found unexpected end of stream\");\n            goto error;\n        }\n\n        /* Consume non-blank characters. */\n\n        if (!CACHE(parser, 2)) goto error;\n\n        leading_blanks = 0;\n\n        while (!IS_BLANKZ(parser->buffer))\n        {\n            /* Check for an escaped single quote. */\n\n            if (single && CHECK_AT(parser->buffer, '\\'', 0)\n                    && CHECK_AT(parser->buffer, '\\'', 1))\n            {\n                if (!STRING_EXTEND(parser, string)) goto error;\n                *(string.pointer++) = '\\'';\n                SKIP(parser);\n                SKIP(parser);\n            }\n\n            /* Check for the right quote. */\n\n            else if (CHECK(parser->buffer, single ? '\\'' : '\"'))\n            {\n                break;\n            }\n\n            /* Check for an escaped line break. */\n\n            else if (!single && CHECK(parser->buffer, '\\\\')\n                    && IS_BREAK_AT(parser->buffer, 1))\n            {\n                if (!CACHE(parser, 3)) goto error;\n                SKIP(parser);\n                SKIP_LINE(parser);\n                leading_blanks = 1;\n                break;\n            }\n\n            /* Check for an escape sequence. */\n\n            else if (!single && CHECK(parser->buffer, '\\\\'))\n            {\n                size_t code_length = 0;\n\n                if (!STRING_EXTEND(parser, string)) goto error;\n\n                /* Check the escape character. */\n\n                switch (parser->buffer.pointer[1])\n                {\n                    case '0':\n                        *(string.pointer++) = '\\0';\n                        break;\n\n                    case 'a':\n                        *(string.pointer++) = '\\x07';\n                        break;\n\n                    case 'b':\n                        *(string.pointer++) = '\\x08';\n                        break;\n\n                    case 't':\n                    case '\\t':\n                        *(string.pointer++) = '\\x09';\n                        break;\n\n                    case 'n':\n                        *(string.pointer++) = '\\x0A';\n                        break;\n\n                    case 'v':\n                        *(string.pointer++) = '\\x0B';\n                        break;\n\n                    case 'f':\n                        *(string.pointer++) = '\\x0C';\n                        break;\n\n                    case 'r':\n                        *(string.pointer++) = '\\x0D';\n                        break;\n\n                    case 'e':\n                        *(string.pointer++) = '\\x1B';\n                        break;\n\n                    case ' ':\n                        *(string.pointer++) = '\\x20';\n                        break;\n\n                    case '\"':\n                        *(string.pointer++) = '\"';\n                        break;\n\n                    case '\\'':\n                        *(string.pointer++) = '\\'';\n                        break;\n\n                    case '\\\\':\n                        *(string.pointer++) = '\\\\';\n                        break;\n\n                    case 'N':   /* NEL (#x85) */\n                        *(string.pointer++) = '\\xC2';\n                        *(string.pointer++) = '\\x85';\n                        break;\n\n                    case '_':   /* #xA0 */\n                        *(string.pointer++) = '\\xC2';\n                        *(string.pointer++) = '\\xA0';\n                        break;\n\n                    case 'L':   /* LS (#x2028) */\n                        *(string.pointer++) = '\\xE2';\n                        *(string.pointer++) = '\\x80';\n                        *(string.pointer++) = '\\xA8';\n                        break;\n\n                    case 'P':   /* PS (#x2029) */\n                        *(string.pointer++) = '\\xE2';\n                        *(string.pointer++) = '\\x80';\n                        *(string.pointer++) = '\\xA9';\n                        break;\n\n                    case 'x':\n                        code_length = 2;\n                        break;\n\n                    case 'u':\n                        code_length = 4;\n                        break;\n\n                    case 'U':\n                        code_length = 8;\n                        break;\n\n                    default:\n                        yaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n                                start_mark, \"found unknown escape character\");\n                        goto error;\n                }\n\n                SKIP(parser);\n                SKIP(parser);\n\n                /* Consume an arbitrary escape code. */\n\n                if (code_length)\n                {\n                    unsigned int value = 0;\n                    size_t k;\n\n                    /* Scan the character value. */\n\n                    if (!CACHE(parser, code_length)) goto error;\n\n                    for (k = 0; k < code_length; k ++) {\n                        if (!IS_HEX_AT(parser->buffer, k)) {\n                            yaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n                                    start_mark, \"did not find expected hexdecimal number\");\n                            goto error;\n                        }\n                        value = (value << 4) + AS_HEX_AT(parser->buffer, k);\n                    }\n\n                    /* Check the value and write the character. */\n\n                    if ((value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF) {\n                        yaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n                                start_mark, \"found invalid Unicode character escape code\");\n                        goto error;\n                    }\n\n                    if (value <= 0x7F) {\n                        *(string.pointer++) = value;\n                    }\n                    else if (value <= 0x7FF) {\n                        *(string.pointer++) = 0xC0 + (value >> 6);\n                        *(string.pointer++) = 0x80 + (value & 0x3F);\n                    }\n                    else if (value <= 0xFFFF) {\n                        *(string.pointer++) = 0xE0 + (value >> 12);\n                        *(string.pointer++) = 0x80 + ((value >> 6) & 0x3F);\n                        *(string.pointer++) = 0x80 + (value & 0x3F);\n                    }\n                    else {\n                        *(string.pointer++) = 0xF0 + (value >> 18);\n                        *(string.pointer++) = 0x80 + ((value >> 12) & 0x3F);\n                        *(string.pointer++) = 0x80 + ((value >> 6) & 0x3F);\n                        *(string.pointer++) = 0x80 + (value & 0x3F);\n                    }\n\n                    /* Advance the pointer. */\n\n                    for (k = 0; k < code_length; k ++) {\n                        SKIP(parser);\n                    }\n                }\n            }\n\n            else\n            {\n                /* It is a non-escaped non-blank character. */\n\n                if (!READ(parser, string)) goto error;\n            }\n\n            if (!CACHE(parser, 2)) goto error;\n        }\n\n        /* Check if we are at the end of the scalar. */\n\n        if (CHECK(parser->buffer, single ? '\\'' : '\"'))\n            break;\n\n        /* Consume blank characters. */\n\n        if (!CACHE(parser, 1)) goto error;\n\n        while (IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer))\n        {\n            if (IS_BLANK(parser->buffer))\n            {\n                /* Consume a space or a tab character. */\n\n                if (!leading_blanks) {\n                    if (!READ(parser, whitespaces)) goto error;\n                }\n                else {\n                    SKIP(parser);\n                }\n            }\n            else\n            {\n                if (!CACHE(parser, 2)) goto error;\n\n                /* Check if it is a first line break. */\n\n                if (!leading_blanks)\n                {\n                    CLEAR(parser, whitespaces);\n                    if (!READ_LINE(parser, leading_break)) goto error;\n                    leading_blanks = 1;\n                }\n                else\n                {\n                    if (!READ_LINE(parser, trailing_breaks)) goto error;\n                }\n            }\n            if (!CACHE(parser, 1)) goto error;\n        }\n\n        /* Join the whitespaces or fold line breaks. */\n\n        if (leading_blanks)\n        {\n            /* Do we need to fold line breaks? */\n\n            if (leading_break.start[0] == '\\n') {\n                if (trailing_breaks.start[0] == '\\0') {\n                    if (!STRING_EXTEND(parser, string)) goto error;\n                    *(string.pointer++) = ' ';\n                }\n                else {\n                    if (!JOIN(parser, string, trailing_breaks)) goto error;\n                    CLEAR(parser, trailing_breaks);\n                }\n                CLEAR(parser, leading_break);\n            }\n            else {\n                if (!JOIN(parser, string, leading_break)) goto error;\n                if (!JOIN(parser, string, trailing_breaks)) goto error;\n                CLEAR(parser, leading_break);\n                CLEAR(parser, trailing_breaks);\n            }\n        }\n        else\n        {\n            if (!JOIN(parser, string, whitespaces)) goto error;\n            CLEAR(parser, whitespaces);\n        }\n    }\n\n    /* Eat the right quote. */\n\n    SKIP(parser);\n\n    end_mark = parser->mark;\n\n    /* Create a token. */\n\n    SCALAR_TOKEN_INIT(*token, string.start, string.pointer-string.start,\n            single ? YAML_SINGLE_QUOTED_SCALAR_STYLE : YAML_DOUBLE_QUOTED_SCALAR_STYLE,\n            start_mark, end_mark);\n\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n    STRING_DEL(parser, whitespaces);\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n    STRING_DEL(parser, whitespaces);\n\n    return 0;\n}\n\n/*\n * Scan a plain scalar.\n */\n\nstatic int\nyaml_parser_scan_plain_scalar(yaml_parser_t *parser, yaml_token_t *token)\n{\n    yaml_mark_t start_mark;\n    yaml_mark_t end_mark;\n    yaml_string_t string = NULL_STRING;\n    yaml_string_t leading_break = NULL_STRING;\n    yaml_string_t trailing_breaks = NULL_STRING;\n    yaml_string_t whitespaces = NULL_STRING;\n    int leading_blanks = 0;\n    int indent = parser->indent+1;\n\n    if (!STRING_INIT(parser, string, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, leading_break, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, trailing_breaks, INITIAL_STRING_SIZE)) goto error;\n    if (!STRING_INIT(parser, whitespaces, INITIAL_STRING_SIZE)) goto error;\n\n    start_mark = end_mark = parser->mark;\n\n    /* Consume the content of the plain scalar. */\n\n    while (1)\n    {\n        /* Check for a document indicator. */\n\n        if (!CACHE(parser, 4)) goto error;\n\n        if (parser->mark.column == 0 &&\n            ((CHECK_AT(parser->buffer, '-', 0) &&\n              CHECK_AT(parser->buffer, '-', 1) &&\n              CHECK_AT(parser->buffer, '-', 2)) ||\n             (CHECK_AT(parser->buffer, '.', 0) &&\n              CHECK_AT(parser->buffer, '.', 1) &&\n              CHECK_AT(parser->buffer, '.', 2))) &&\n            IS_BLANKZ_AT(parser->buffer, 3)) break;\n\n        /* Check for a comment. */\n\n        if (CHECK(parser->buffer, '#'))\n            break;\n\n        /* Consume non-blank characters. */\n\n        while (!IS_BLANKZ(parser->buffer))\n        {\n            /* Check for 'x:x' in the flow context. TODO: Fix the test \"spec-08-13\". */\n\n            if (parser->flow_level\n                    && CHECK(parser->buffer, ':')\n                    && !IS_BLANKZ_AT(parser->buffer, 1)) {\n                yaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n                        start_mark, \"found unexpected ':'\");\n                goto error;\n            }\n\n            /* Check for indicators that may end a plain scalar. */\n\n            if ((CHECK(parser->buffer, ':') && IS_BLANKZ_AT(parser->buffer, 1))\n                    || (parser->flow_level &&\n                        (CHECK(parser->buffer, ',') || CHECK(parser->buffer, ':')\n                         || CHECK(parser->buffer, '?') || CHECK(parser->buffer, '[')\n                         || CHECK(parser->buffer, ']') || CHECK(parser->buffer, '{')\n                         || CHECK(parser->buffer, '}'))))\n                break;\n\n            /* Check if we need to join whitespaces and breaks. */\n\n            if (leading_blanks || whitespaces.start != whitespaces.pointer)\n            {\n                if (leading_blanks)\n                {\n                    /* Do we need to fold line breaks? */\n\n                    if (leading_break.start[0] == '\\n') {\n                        if (trailing_breaks.start[0] == '\\0') {\n                            if (!STRING_EXTEND(parser, string)) goto error;\n                            *(string.pointer++) = ' ';\n                        }\n                        else {\n                            if (!JOIN(parser, string, trailing_breaks)) goto error;\n                            CLEAR(parser, trailing_breaks);\n                        }\n                        CLEAR(parser, leading_break);\n                    }\n                    else {\n                        if (!JOIN(parser, string, leading_break)) goto error;\n                        if (!JOIN(parser, string, trailing_breaks)) goto error;\n                        CLEAR(parser, leading_break);\n                        CLEAR(parser, trailing_breaks);\n                    }\n\n                    leading_blanks = 0;\n                }\n                else\n                {\n                    if (!JOIN(parser, string, whitespaces)) goto error;\n                    CLEAR(parser, whitespaces);\n                }\n            }\n\n            /* Copy the character. */\n\n            if (!READ(parser, string)) goto error;\n\n            end_mark = parser->mark;\n\n            if (!CACHE(parser, 2)) goto error;\n        }\n\n        /* Is it the end? */\n\n        if (!(IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer)))\n            break;\n\n        /* Consume blank characters. */\n\n        if (!CACHE(parser, 1)) goto error;\n\n        while (IS_BLANK(parser->buffer) || IS_BREAK(parser->buffer))\n        {\n            if (IS_BLANK(parser->buffer))\n            {\n                /* Check for tab character that abuse intendation. */\n\n                if (leading_blanks && (int)parser->mark.column < indent\n                        && IS_TAB(parser->buffer)) {\n                    yaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n                            start_mark, \"found a tab character that violate intendation\");\n                    goto error;\n                }\n\n                /* Consume a space or a tab character. */\n\n                if (!leading_blanks) {\n                    if (!READ(parser, whitespaces)) goto error;\n                }\n                else {\n                    SKIP(parser);\n                }\n            }\n            else\n            {\n                if (!CACHE(parser, 2)) goto error;\n\n                /* Check if it is a first line break. */\n\n                if (!leading_blanks)\n                {\n                    CLEAR(parser, whitespaces);\n                    if (!READ_LINE(parser, leading_break)) goto error;\n                    leading_blanks = 1;\n                }\n                else\n                {\n                    if (!READ_LINE(parser, trailing_breaks)) goto error;\n                }\n            }\n            if (!CACHE(parser, 1)) goto error;\n        }\n\n        /* Check intendation level. */\n\n        if (!parser->flow_level && (int)parser->mark.column < indent)\n            break;\n    }\n\n    /* Create a token. */\n\n    SCALAR_TOKEN_INIT(*token, string.start, string.pointer-string.start,\n            YAML_PLAIN_SCALAR_STYLE, start_mark, end_mark);\n\n    /* Note that we change the 'simple_key_allowed' flag. */\n\n    if (leading_blanks) {\n        parser->simple_key_allowed = 1;\n    }\n\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n    STRING_DEL(parser, whitespaces);\n\n    return 1;\n\nerror:\n    STRING_DEL(parser, string);\n    STRING_DEL(parser, leading_break);\n    STRING_DEL(parser, trailing_breaks);\n    STRING_DEL(parser, whitespaces);\n\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/writer.c",
    "content": "\n#include \"yaml_private.h\"\n\n/*\n * Declarations.\n */\n\nstatic int\nyaml_emitter_set_writer_error(yaml_emitter_t *emitter, const char *problem);\n\nYAML_DECLARE(int)\nyaml_emitter_flush(yaml_emitter_t *emitter);\n\n/*\n * Set the writer error and return 0.\n */\n\nstatic int\nyaml_emitter_set_writer_error(yaml_emitter_t *emitter, const char *problem)\n{\n    emitter->error = YAML_WRITER_ERROR;\n    emitter->problem = problem;\n\n    return 0;\n}\n\n/*\n * Flush the output buffer.\n */\n\nYAML_DECLARE(int)\nyaml_emitter_flush(yaml_emitter_t *emitter)\n{\n    int low, high;\n\n    assert(emitter);    /* Non-NULL emitter object is expected. */\n    assert(emitter->write_handler); /* Write handler must be set. */\n    assert(emitter->encoding);  /* Output encoding must be set. */\n\n    emitter->buffer.last = emitter->buffer.pointer;\n    emitter->buffer.pointer = emitter->buffer.start;\n\n    /* Check if the buffer is empty. */\n\n    if (emitter->buffer.start == emitter->buffer.last) {\n        return 1;\n    }\n\n    /* If the output encoding is UTF-8, we don't need to recode the buffer. */\n\n    if (emitter->encoding == YAML_UTF8_ENCODING)\n    {\n        if (emitter->write_handler(emitter->write_handler_data,\n                    emitter->buffer.start,\n                    emitter->buffer.last - emitter->buffer.start)) {\n            emitter->buffer.last = emitter->buffer.start;\n            emitter->buffer.pointer = emitter->buffer.start;\n            return 1;\n        }\n        else {\n            return yaml_emitter_set_writer_error(emitter, \"write error\");\n        }\n    }\n\n    /* Recode the buffer into the raw buffer. */\n\n    low = (emitter->encoding == YAML_UTF16LE_ENCODING ? 0 : 1);\n    high = (emitter->encoding == YAML_UTF16LE_ENCODING ? 1 : 0);\n\n    while (emitter->buffer.pointer != emitter->buffer.last)\n    {\n        unsigned char octet;\n        unsigned int width;\n        unsigned int value;\n        size_t k;\n\n        /* \n         * See the \"reader.c\" code for more details on UTF-8 encoding.  Note\n         * that we assume that the buffer contains a valid UTF-8 sequence.\n         */\n\n        /* Read the next UTF-8 character. */\n\n        octet = emitter->buffer.pointer[0];\n\n        width = (octet & 0x80) == 0x00 ? 1 :\n                (octet & 0xE0) == 0xC0 ? 2 :\n                (octet & 0xF0) == 0xE0 ? 3 :\n                (octet & 0xF8) == 0xF0 ? 4 : 0;\n\n        value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n                (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n                (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n\n        for (k = 1; k < width; k ++) {\n            octet = emitter->buffer.pointer[k];\n            value = (value << 6) + (octet & 0x3F);\n        }\n\n        emitter->buffer.pointer += width;\n\n        /* Write the character. */\n\n        if (value < 0x10000)\n        {\n            emitter->raw_buffer.last[high] = value >> 8;\n            emitter->raw_buffer.last[low] = value & 0xFF;\n\n            emitter->raw_buffer.last += 2;\n        }\n        else\n        {\n            /* Write the character using a surrogate pair (check \"reader.c\"). */\n\n            value -= 0x10000;\n            emitter->raw_buffer.last[high] = 0xD8 + (value >> 18);\n            emitter->raw_buffer.last[low] = (value >> 10) & 0xFF;\n            emitter->raw_buffer.last[high+2] = 0xDC + ((value >> 8) & 0xFF);\n            emitter->raw_buffer.last[low+2] = value & 0xFF;\n\n            emitter->raw_buffer.last += 4;\n        }\n    }\n\n    /* Write the raw buffer. */\n\n    if (emitter->write_handler(emitter->write_handler_data,\n                emitter->raw_buffer.start,\n                emitter->raw_buffer.last - emitter->raw_buffer.start)) {\n        emitter->buffer.last = emitter->buffer.start;\n        emitter->buffer.pointer = emitter->buffer.start;\n        emitter->raw_buffer.last = emitter->raw_buffer.start;\n        emitter->raw_buffer.pointer = emitter->raw_buffer.start;\n        return 1;\n    }\n    else {\n        return yaml_emitter_set_writer_error(emitter, \"write error\");\n    }\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/src/yaml_private.h",
    "content": "\n#if HAVE_CONFIG_H\n#import \"config.h\"\n#endif\n\n#include <yaml.h>\n\n#include <assert.h>\n#include <limits.h>\n\n/*\n * Memory management.\n */\n\nYAML_DECLARE(void *)\nyaml_malloc(size_t size);\n\nYAML_DECLARE(void *)\nyaml_realloc(void *ptr, size_t size);\n\nYAML_DECLARE(void)\nyaml_free(void *ptr);\n\nYAML_DECLARE(yaml_char_t *)\nyaml_strdup(const yaml_char_t *);\n\n/*\n * Reader: Ensure that the buffer contains at least `length` characters.\n */\n\nYAML_DECLARE(int)\nyaml_parser_update_buffer(yaml_parser_t *parser, size_t length);\n\n/*\n * Scanner: Ensure that the token stack contains at least one token ready.\n */\n\nYAML_DECLARE(int)\nyaml_parser_fetch_more_tokens(yaml_parser_t *parser);\n\n/*\n * The size of the input raw buffer.\n */\n\n#define INPUT_RAW_BUFFER_SIZE   16384\n\n/*\n * The size of the input buffer.\n *\n * It should be possible to decode the whole raw buffer.\n */\n\n#define INPUT_BUFFER_SIZE       (INPUT_RAW_BUFFER_SIZE*3)\n\n/*\n * The size of the output buffer.\n */\n\n#define OUTPUT_BUFFER_SIZE      16384\n\n/*\n * The size of the output raw buffer.\n *\n * It should be possible to encode the whole output buffer.\n */\n\n#define OUTPUT_RAW_BUFFER_SIZE  (OUTPUT_BUFFER_SIZE*2+2)\n\n/*\n * The size of other stacks and queues.\n */\n\n#define INITIAL_STACK_SIZE  16\n#define INITIAL_QUEUE_SIZE  16\n#define INITIAL_STRING_SIZE 16\n\n/*\n * Buffer management.\n */\n\n#define BUFFER_INIT(context,buffer,size)                                        \\\n    (((buffer).start = yaml_malloc(size)) ?                                     \\\n        ((buffer).last = (buffer).pointer = (buffer).start,                     \\\n         (buffer).end = (buffer).start+(size),                                  \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define BUFFER_DEL(context,buffer)                                              \\\n    (yaml_free((buffer).start),                                                 \\\n     (buffer).start = (buffer).pointer = (buffer).end = 0)\n\n/*\n * String management.\n */\n\ntypedef struct {\n    yaml_char_t *start;\n    yaml_char_t *end;\n    yaml_char_t *pointer;\n} yaml_string_t;\n\nYAML_DECLARE(int)\nyaml_string_extend(yaml_char_t **start,\n        yaml_char_t **pointer, yaml_char_t **end);\n\nYAML_DECLARE(int)\nyaml_string_join(\n        yaml_char_t **a_start, yaml_char_t **a_pointer, yaml_char_t **a_end,\n        yaml_char_t **b_start, yaml_char_t **b_pointer, yaml_char_t **b_end);\n\n#define NULL_STRING { NULL, NULL, NULL }\n\n#define STRING(string,length)   { (string), (string)+(length), (string) }\n\n#define STRING_ASSIGN(value,string,length)                                      \\\n    ((value).start = (string),                                                  \\\n     (value).end = (string)+(length),                                           \\\n     (value).pointer = (string))\n\n#define STRING_INIT(context,string,size)                                        \\\n    (((string).start = yaml_malloc(size)) ?                                     \\\n        ((string).pointer = (string).start,                                     \\\n         (string).end = (string).start+(size),                                  \\\n         memset((string).start, 0, (size)),                                     \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define STRING_DEL(context,string)                                              \\\n    (yaml_free((string).start),                                                 \\\n     (string).start = (string).pointer = (string).end = 0)\n\n#define STRING_EXTEND(context,string)                                           \\\n    (((string).pointer+5 < (string).end)                                        \\\n        || yaml_string_extend(&(string).start,                                  \\\n            &(string).pointer, &(string).end))\n\n#define CLEAR(context,string)                                                   \\\n    ((string).pointer = (string).start,                                         \\\n     memset((string).start, 0, (string).end-(string).start))\n\n#define JOIN(context,string_a,string_b)                                         \\\n    ((yaml_string_join(&(string_a).start, &(string_a).pointer,                  \\\n                       &(string_a).end, &(string_b).start,                      \\\n                       &(string_b).pointer, &(string_b).end)) ?                 \\\n        ((string_b).pointer = (string_b).start,                                 \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n/*\n * String check operations.\n */\n\n/*\n * Check the octet at the specified position.\n */\n\n#define CHECK_AT(string,octet,offset)                                           \\\n    ((string).pointer[offset] == (yaml_char_t)(octet))\n\n/*\n * Check the current octet in the buffer.\n */\n\n#define CHECK(string,octet) CHECK_AT((string),(octet),0)\n\n/*\n * Check if the character at the specified position is an alphabetical\n * character, a digit, '_', or '-'.\n */\n\n#define IS_ALPHA_AT(string,offset)                                              \\\n     (((string).pointer[offset] >= (yaml_char_t) '0' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) '9') ||                        \\\n      ((string).pointer[offset] >= (yaml_char_t) 'A' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) 'Z') ||                        \\\n      ((string).pointer[offset] >= (yaml_char_t) 'a' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) 'z') ||                        \\\n      (string).pointer[offset] == '_' ||                                        \\\n      (string).pointer[offset] == '-')\n\n#define IS_ALPHA(string)    IS_ALPHA_AT((string),0)\n\n/*\n * Check if the character at the specified position is a digit.\n */\n\n#define IS_DIGIT_AT(string,offset)                                              \\\n     (((string).pointer[offset] >= (yaml_char_t) '0' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) '9'))\n\n#define IS_DIGIT(string)    IS_DIGIT_AT((string),0)\n\n/*\n * Get the value of a digit.\n */\n\n#define AS_DIGIT_AT(string,offset)                                              \\\n     ((string).pointer[offset] - (yaml_char_t) '0')\n\n#define AS_DIGIT(string)    AS_DIGIT_AT((string),0)\n\n/*\n * Check if the character at the specified position is a hex-digit.\n */\n\n#define IS_HEX_AT(string,offset)                                                \\\n     (((string).pointer[offset] >= (yaml_char_t) '0' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) '9') ||                        \\\n      ((string).pointer[offset] >= (yaml_char_t) 'A' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) 'F') ||                        \\\n      ((string).pointer[offset] >= (yaml_char_t) 'a' &&                         \\\n       (string).pointer[offset] <= (yaml_char_t) 'f'))\n\n#define IS_HEX(string)    IS_HEX_AT((string),0)\n\n/*\n * Get the value of a hex-digit.\n */\n\n#define AS_HEX_AT(string,offset)                                                \\\n      (((string).pointer[offset] >= (yaml_char_t) 'A' &&                        \\\n        (string).pointer[offset] <= (yaml_char_t) 'F') ?                        \\\n       ((string).pointer[offset] - (yaml_char_t) 'A' + 10) :                    \\\n       ((string).pointer[offset] >= (yaml_char_t) 'a' &&                        \\\n        (string).pointer[offset] <= (yaml_char_t) 'f') ?                        \\\n       ((string).pointer[offset] - (yaml_char_t) 'a' + 10) :                    \\\n       ((string).pointer[offset] - (yaml_char_t) '0'))\n \n#define AS_HEX(string)  AS_HEX_AT((string),0)\n \n/*\n * Check if the character is ASCII.\n */\n\n#define IS_ASCII_AT(string,offset)                                              \\\n    ((string).pointer[offset] <= (yaml_char_t) '\\x7F')\n\n#define IS_ASCII(string)    IS_ASCII_AT((string),0)\n\n/*\n * Check if the character can be printed unescaped.\n */\n\n#define IS_PRINTABLE_AT(string,offset)                                          \\\n    (((string).pointer[offset] == 0x0A)         /* . == #x0A */                 \\\n     || ((string).pointer[offset] >= 0x20       /* #x20 <= . <= #x7E */         \\\n         && (string).pointer[offset] <= 0x7E)                                   \\\n     || ((string).pointer[offset] == 0xC2       /* #0xA0 <= . <= #xD7FF */      \\\n         && (string).pointer[offset+1] >= 0xA0)                                 \\\n     || ((string).pointer[offset] > 0xC2                                        \\\n         && (string).pointer[offset] < 0xED)                                    \\\n     || ((string).pointer[offset] == 0xED                                       \\\n         && (string).pointer[offset+1] < 0xA0)                                  \\\n     || ((string).pointer[offset] == 0xEE)                                      \\\n     || ((string).pointer[offset] == 0xEF      /* #xE000 <= . <= #xFFFD */      \\\n         && !((string).pointer[offset+1] == 0xBB        /* && . != #xFEFF */    \\\n             && (string).pointer[offset+2] == 0xBF)                             \\\n         && !((string).pointer[offset+1] == 0xBF                                \\\n             && ((string).pointer[offset+2] == 0xBE                             \\\n                 || (string).pointer[offset+2] == 0xBF))))\n\n#define IS_PRINTABLE(string)    IS_PRINTABLE_AT((string),0)\n\n/*\n * Check if the character at the specified position is NUL.\n */\n\n#define IS_Z_AT(string,offset)    CHECK_AT((string),'\\0',(offset))\n\n#define IS_Z(string)    IS_Z_AT((string),0)\n\n/*\n * Check if the character at the specified position is BOM.\n */\n\n#define IS_BOM_AT(string,offset)                                                \\\n     (CHECK_AT((string),'\\xEF',(offset))                                        \\\n      && CHECK_AT((string),'\\xBB',(offset)+1)                                   \\\n      && CHECK_AT((string),'\\xBF',(offset)+2))  /* BOM (#xFEFF) */\n\n#define IS_BOM(string)  IS_BOM_AT(string,0)\n\n/*\n * Check if the character at the specified position is space.\n */\n\n#define IS_SPACE_AT(string,offset)  CHECK_AT((string),' ',(offset))\n\n#define IS_SPACE(string)    IS_SPACE_AT((string),0)\n\n/*\n * Check if the character at the specified position is tab.\n */\n\n#define IS_TAB_AT(string,offset)    CHECK_AT((string),'\\t',(offset))\n\n#define IS_TAB(string)  IS_TAB_AT((string),0)\n\n/*\n * Check if the character at the specified position is blank (space or tab).\n */\n\n#define IS_BLANK_AT(string,offset)                                              \\\n    (IS_SPACE_AT((string),(offset)) || IS_TAB_AT((string),(offset)))\n\n#define IS_BLANK(string)    IS_BLANK_AT((string),0)\n\n/*\n * Check if the character at the specified position is a line break.\n */\n\n#define IS_BREAK_AT(string,offset)                                              \\\n    (CHECK_AT((string),'\\r',(offset))               /* CR (#xD)*/               \\\n     || CHECK_AT((string),'\\n',(offset))            /* LF (#xA) */              \\\n     || (CHECK_AT((string),'\\xC2',(offset))                                     \\\n         && CHECK_AT((string),'\\x85',(offset)+1))   /* NEL (#x85) */            \\\n     || (CHECK_AT((string),'\\xE2',(offset))                                     \\\n         && CHECK_AT((string),'\\x80',(offset)+1)                                \\\n         && CHECK_AT((string),'\\xA8',(offset)+2))   /* LS (#x2028) */           \\\n     || (CHECK_AT((string),'\\xE2',(offset))                                     \\\n         && CHECK_AT((string),'\\x80',(offset)+1)                                \\\n         && CHECK_AT((string),'\\xA9',(offset)+2)))  /* PS (#x2029) */\n\n#define IS_BREAK(string)    IS_BREAK_AT((string),0)\n\n#define IS_CRLF_AT(string,offset)                                               \\\n     (CHECK_AT((string),'\\r',(offset)) && CHECK_AT((string),'\\n',(offset)+1))\n\n#define IS_CRLF(string) IS_CRLF_AT((string),0)\n\n/*\n * Check if the character is a line break or NUL.\n */\n\n#define IS_BREAKZ_AT(string,offset)                                             \\\n    (IS_BREAK_AT((string),(offset)) || IS_Z_AT((string),(offset)))\n\n#define IS_BREAKZ(string)   IS_BREAKZ_AT((string),0)\n\n/*\n * Check if the character is a line break, space, or NUL.\n */\n\n#define IS_SPACEZ_AT(string,offset)                                             \\\n    (IS_SPACE_AT((string),(offset)) || IS_BREAKZ_AT((string),(offset)))\n\n#define IS_SPACEZ(string)   IS_SPACEZ_AT((string),0)\n\n/*\n * Check if the character is a line break, space, tab, or NUL.\n */\n\n#define IS_BLANKZ_AT(string,offset)                                             \\\n    (IS_BLANK_AT((string),(offset)) || IS_BREAKZ_AT((string),(offset)))\n\n#define IS_BLANKZ(string)   IS_BLANKZ_AT((string),0)\n\n/*\n * Determine the width of the character.\n */\n\n#define WIDTH_AT(string,offset)                                                 \\\n     (((string).pointer[offset] & 0x80) == 0x00 ? 1 :                           \\\n      ((string).pointer[offset] & 0xE0) == 0xC0 ? 2 :                           \\\n      ((string).pointer[offset] & 0xF0) == 0xE0 ? 3 :                           \\\n      ((string).pointer[offset] & 0xF8) == 0xF0 ? 4 : 0)\n\n#define WIDTH(string)   WIDTH_AT((string),0)\n\n/*\n * Move the string pointer to the next character.\n */\n\n#define MOVE(string)    ((string).pointer += WIDTH((string)))\n\n/*\n * Copy a character and move the pointers of both strings.\n */\n\n#define COPY(string_a,string_b)                                                 \\\n    ((*(string_b).pointer & 0x80) == 0x00 ?                                     \\\n     (*((string_a).pointer++) = *((string_b).pointer++)) :                      \\\n     (*(string_b).pointer & 0xE0) == 0xC0 ?                                     \\\n     (*((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++)) :                      \\\n     (*(string_b).pointer & 0xF0) == 0xE0 ?                                     \\\n     (*((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++)) :                      \\\n     (*(string_b).pointer & 0xF8) == 0xF0 ?                                     \\\n     (*((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++),                        \\\n      *((string_a).pointer++) = *((string_b).pointer++)) : 0)\n\n/*\n * Stack and queue management.\n */\n\nYAML_DECLARE(int)\nyaml_stack_extend(void **start, void **top, void **end);\n\nYAML_DECLARE(int)\nyaml_queue_extend(void **start, void **head, void **tail, void **end);\n\n#define STACK_INIT(context,stack,size)                                          \\\n    (((stack).start = yaml_malloc((size)*sizeof(*(stack).start))) ?             \\\n        ((stack).top = (stack).start,                                           \\\n         (stack).end = (stack).start+(size),                                    \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define STACK_DEL(context,stack)                                                \\\n    (yaml_free((stack).start),                                                  \\\n     (stack).start = (stack).top = (stack).end = 0)\n\n#define STACK_EMPTY(context,stack)                                              \\\n    ((stack).start == (stack).top)\n\n#define PUSH(context,stack,value)                                               \\\n    (((stack).top != (stack).end                                                \\\n      || yaml_stack_extend((void **)&(stack).start,                             \\\n              (void **)&(stack).top, (void **)&(stack).end)) ?                  \\\n        (*((stack).top++) = value,                                              \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define POP(context,stack)                                                      \\\n    (*(--(stack).top))\n\n#define QUEUE_INIT(context,queue,size)                                          \\\n    (((queue).start = yaml_malloc((size)*sizeof(*(queue).start))) ?             \\\n        ((queue).head = (queue).tail = (queue).start,                           \\\n         (queue).end = (queue).start+(size),                                    \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define QUEUE_DEL(context,queue)                                                \\\n    (yaml_free((queue).start),                                                  \\\n     (queue).start = (queue).head = (queue).tail = (queue).end = 0)\n\n#define QUEUE_EMPTY(context,queue)                                              \\\n    ((queue).head == (queue).tail)\n\n#define ENQUEUE(context,queue,value)                                            \\\n    (((queue).tail != (queue).end                                               \\\n      || yaml_queue_extend((void **)&(queue).start, (void **)&(queue).head,     \\\n            (void **)&(queue).tail, (void **)&(queue).end)) ?                   \\\n        (*((queue).tail++) = value,                                             \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n#define DEQUEUE(context,queue)                                                  \\\n    (*((queue).head++))\n\n#define QUEUE_INSERT(context,queue,index,value)                                 \\\n    (((queue).tail != (queue).end                                               \\\n      || yaml_queue_extend((void **)&(queue).start, (void **)&(queue).head,     \\\n            (void **)&(queue).tail, (void **)&(queue).end)) ?                   \\\n        (memmove((queue).head+(index)+1,(queue).head+(index),                   \\\n            ((queue).tail-(queue).head-(index))*sizeof(*(queue).start)),        \\\n         *((queue).head+(index)) = value,                                       \\\n         (queue).tail++,                                                        \\\n         1) :                                                                   \\\n        ((context)->error = YAML_MEMORY_ERROR,                                  \\\n         0))\n\n/*\n * Token initializers.\n */\n\n#define TOKEN_INIT(token,token_type,token_start_mark,token_end_mark)            \\\n    (memset(&(token), 0, sizeof(yaml_token_t)),                                 \\\n     (token).type = (token_type),                                               \\\n     (token).start_mark = (token_start_mark),                                   \\\n     (token).end_mark = (token_end_mark))\n\n#define STREAM_START_TOKEN_INIT(token,token_encoding,start_mark,end_mark)       \\\n    (TOKEN_INIT((token),YAML_STREAM_START_TOKEN,(start_mark),(end_mark)),       \\\n     (token).data.stream_start.encoding = (token_encoding))\n\n#define STREAM_END_TOKEN_INIT(token,start_mark,end_mark)                        \\\n    (TOKEN_INIT((token),YAML_STREAM_END_TOKEN,(start_mark),(end_mark)))\n\n#define ALIAS_TOKEN_INIT(token,token_value,start_mark,end_mark)                 \\\n    (TOKEN_INIT((token),YAML_ALIAS_TOKEN,(start_mark),(end_mark)),              \\\n     (token).data.alias.value = (token_value))\n\n#define ANCHOR_TOKEN_INIT(token,token_value,start_mark,end_mark)                \\\n    (TOKEN_INIT((token),YAML_ANCHOR_TOKEN,(start_mark),(end_mark)),             \\\n     (token).data.anchor.value = (token_value))\n\n#define TAG_TOKEN_INIT(token,token_handle,token_suffix,start_mark,end_mark)     \\\n    (TOKEN_INIT((token),YAML_TAG_TOKEN,(start_mark),(end_mark)),                \\\n     (token).data.tag.handle = (token_handle),                                  \\\n     (token).data.tag.suffix = (token_suffix))\n\n#define SCALAR_TOKEN_INIT(token,token_value,token_length,token_style,start_mark,end_mark)   \\\n    (TOKEN_INIT((token),YAML_SCALAR_TOKEN,(start_mark),(end_mark)),             \\\n     (token).data.scalar.value = (token_value),                                 \\\n     (token).data.scalar.length = (token_length),                               \\\n     (token).data.scalar.style = (token_style))\n\n#define VERSION_DIRECTIVE_TOKEN_INIT(token,token_major,token_minor,start_mark,end_mark)     \\\n    (TOKEN_INIT((token),YAML_VERSION_DIRECTIVE_TOKEN,(start_mark),(end_mark)),  \\\n     (token).data.version_directive.major = (token_major),                      \\\n     (token).data.version_directive.minor = (token_minor))\n\n#define TAG_DIRECTIVE_TOKEN_INIT(token,token_handle,token_prefix,start_mark,end_mark)       \\\n    (TOKEN_INIT((token),YAML_TAG_DIRECTIVE_TOKEN,(start_mark),(end_mark)),      \\\n     (token).data.tag_directive.handle = (token_handle),                        \\\n     (token).data.tag_directive.prefix = (token_prefix))\n\n/*\n * Event initializers.\n */\n\n#define EVENT_INIT(event,event_type,event_start_mark,event_end_mark)            \\\n    (memset(&(event), 0, sizeof(yaml_event_t)),                                 \\\n     (event).type = (event_type),                                               \\\n     (event).start_mark = (event_start_mark),                                   \\\n     (event).end_mark = (event_end_mark))\n\n#define STREAM_START_EVENT_INIT(event,event_encoding,start_mark,end_mark)       \\\n    (EVENT_INIT((event),YAML_STREAM_START_EVENT,(start_mark),(end_mark)),       \\\n     (event).data.stream_start.encoding = (event_encoding))\n\n#define STREAM_END_EVENT_INIT(event,start_mark,end_mark)                        \\\n    (EVENT_INIT((event),YAML_STREAM_END_EVENT,(start_mark),(end_mark)))\n\n#define DOCUMENT_START_EVENT_INIT(event,event_version_directive,                \\\n        event_tag_directives_start,event_tag_directives_end,event_implicit,start_mark,end_mark) \\\n    (EVENT_INIT((event),YAML_DOCUMENT_START_EVENT,(start_mark),(end_mark)),     \\\n     (event).data.document_start.version_directive = (event_version_directive), \\\n     (event).data.document_start.tag_directives.start = (event_tag_directives_start),   \\\n     (event).data.document_start.tag_directives.end = (event_tag_directives_end),   \\\n     (event).data.document_start.implicit = (event_implicit))\n\n#define DOCUMENT_END_EVENT_INIT(event,event_implicit,start_mark,end_mark)       \\\n    (EVENT_INIT((event),YAML_DOCUMENT_END_EVENT,(start_mark),(end_mark)),       \\\n     (event).data.document_end.implicit = (event_implicit))\n\n#define ALIAS_EVENT_INIT(event,event_anchor,start_mark,end_mark)                \\\n    (EVENT_INIT((event),YAML_ALIAS_EVENT,(start_mark),(end_mark)),              \\\n     (event).data.alias.anchor = (event_anchor))\n\n#define SCALAR_EVENT_INIT(event,event_anchor,event_tag,event_value,event_length,    \\\n        event_plain_implicit, event_quoted_implicit,event_style,start_mark,end_mark)    \\\n    (EVENT_INIT((event),YAML_SCALAR_EVENT,(start_mark),(end_mark)),             \\\n     (event).data.scalar.anchor = (event_anchor),                               \\\n     (event).data.scalar.tag = (event_tag),                                     \\\n     (event).data.scalar.value = (event_value),                                 \\\n     (event).data.scalar.length = (event_length),                               \\\n     (event).data.scalar.plain_implicit = (event_plain_implicit),               \\\n     (event).data.scalar.quoted_implicit = (event_quoted_implicit),             \\\n     (event).data.scalar.style = (event_style))\n\n#define SEQUENCE_START_EVENT_INIT(event,event_anchor,event_tag,                 \\\n        event_implicit,event_style,start_mark,end_mark)                         \\\n    (EVENT_INIT((event),YAML_SEQUENCE_START_EVENT,(start_mark),(end_mark)),     \\\n     (event).data.sequence_start.anchor = (event_anchor),                       \\\n     (event).data.sequence_start.tag = (event_tag),                             \\\n     (event).data.sequence_start.implicit = (event_implicit),                   \\\n     (event).data.sequence_start.style = (event_style))\n\n#define SEQUENCE_END_EVENT_INIT(event,start_mark,end_mark)                      \\\n    (EVENT_INIT((event),YAML_SEQUENCE_END_EVENT,(start_mark),(end_mark)))\n\n#define MAPPING_START_EVENT_INIT(event,event_anchor,event_tag,                  \\\n        event_implicit,event_style,start_mark,end_mark)                         \\\n    (EVENT_INIT((event),YAML_MAPPING_START_EVENT,(start_mark),(end_mark)),      \\\n     (event).data.mapping_start.anchor = (event_anchor),                        \\\n     (event).data.mapping_start.tag = (event_tag),                              \\\n     (event).data.mapping_start.implicit = (event_implicit),                    \\\n     (event).data.mapping_start.style = (event_style))\n\n#define MAPPING_END_EVENT_INIT(event,start_mark,end_mark)                       \\\n    (EVENT_INIT((event),YAML_MAPPING_END_EVENT,(start_mark),(end_mark)))\n\n/*\n * Document initializer.\n */\n\n#define DOCUMENT_INIT(document,document_nodes_start,document_nodes_end,         \\\n        document_version_directive,document_tag_directives_start,               \\\n        document_tag_directives_end,document_start_implicit,                    \\\n        document_end_implicit,document_start_mark,document_end_mark)            \\\n    (memset(&(document), 0, sizeof(yaml_document_t)),                           \\\n     (document).nodes.start = (document_nodes_start),                           \\\n     (document).nodes.end = (document_nodes_end),                               \\\n     (document).nodes.top = (document_nodes_start),                             \\\n     (document).version_directive = (document_version_directive),               \\\n     (document).tag_directives.start = (document_tag_directives_start),         \\\n     (document).tag_directives.end = (document_tag_directives_end),             \\\n     (document).start_implicit = (document_start_implicit),                     \\\n     (document).end_implicit = (document_end_implicit),                         \\\n     (document).start_mark = (document_start_mark),                             \\\n     (document).end_mark = (document_end_mark))\n\n/*\n * Node initializers.\n */\n\n#define NODE_INIT(node,node_type,node_tag,node_start_mark,node_end_mark)        \\\n    (memset(&(node), 0, sizeof(yaml_node_t)),                                   \\\n     (node).type = (node_type),                                                 \\\n     (node).tag = (node_tag),                                                   \\\n     (node).start_mark = (node_start_mark),                                     \\\n     (node).end_mark = (node_end_mark))\n\n#define SCALAR_NODE_INIT(node,node_tag,node_value,node_length,                  \\\n        node_style,start_mark,end_mark)                                         \\\n    (NODE_INIT((node),YAML_SCALAR_NODE,(node_tag),(start_mark),(end_mark)),     \\\n     (node).data.scalar.value = (node_value),                                   \\\n     (node).data.scalar.length = (node_length),                                 \\\n     (node).data.scalar.style = (node_style))\n\n#define SEQUENCE_NODE_INIT(node,node_tag,node_items_start,node_items_end,       \\\n        node_style,start_mark,end_mark)                                         \\\n    (NODE_INIT((node),YAML_SEQUENCE_NODE,(node_tag),(start_mark),(end_mark)),   \\\n     (node).data.sequence.items.start = (node_items_start),                     \\\n     (node).data.sequence.items.end = (node_items_end),                         \\\n     (node).data.sequence.items.top = (node_items_start),                       \\\n     (node).data.sequence.style = (node_style))\n\n#define MAPPING_NODE_INIT(node,node_tag,node_pairs_start,node_pairs_end,        \\\n        node_style,start_mark,end_mark)                                         \\\n    (NODE_INIT((node),YAML_MAPPING_NODE,(node_tag),(start_mark),(end_mark)),    \\\n     (node).data.mapping.pairs.start = (node_pairs_start),                      \\\n     (node).data.mapping.pairs.end = (node_pairs_end),                          \\\n     (node).data.mapping.pairs.top = (node_pairs_start),                        \\\n     (node).data.mapping.style = (node_style))\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/Makefile.am",
    "content": "AM_CPPFLAGS = -I$(top_srcdir)/include\n#AM_CFLAGS = -Wno-pointer-sign\nLDADD = $(top_builddir)/src/libyaml.la\nTESTS = test-version test-reader\ncheck_PROGRAMS = test-version test-reader\nnoinst_PROGRAMS = run-scanner run-parser run-loader run-emitter run-dumper\t\\\n\t\t\t\t  example-reformatter example-reformatter-alt\t\\\n\t\t\t\t  example-deconstructor example-deconstructor-alt\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/Makefile.in",
    "content": "# Makefile.in generated by automake 1.11.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,\n# 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\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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@\nTESTS = test-version$(EXEEXT) test-reader$(EXEEXT)\ncheck_PROGRAMS = test-version$(EXEEXT) test-reader$(EXEEXT)\nnoinst_PROGRAMS = run-scanner$(EXEEXT) run-parser$(EXEEXT) \\\n\trun-loader$(EXEEXT) run-emitter$(EXEEXT) run-dumper$(EXEEXT) \\\n\texample-reformatter$(EXEEXT) example-reformatter-alt$(EXEEXT) \\\n\texample-deconstructor$(EXEEXT) \\\n\texample-deconstructor-alt$(EXEEXT)\nsubdir = tests\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nPROGRAMS = $(noinst_PROGRAMS)\nexample_deconstructor_SOURCES = example-deconstructor.c\nexample_deconstructor_OBJECTS = example-deconstructor.$(OBJEXT)\nexample_deconstructor_LDADD = $(LDADD)\nexample_deconstructor_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nexample_deconstructor_alt_SOURCES = example-deconstructor-alt.c\nexample_deconstructor_alt_OBJECTS =  \\\n\texample-deconstructor-alt.$(OBJEXT)\nexample_deconstructor_alt_LDADD = $(LDADD)\nexample_deconstructor_alt_DEPENDENCIES =  \\\n\t$(top_builddir)/src/libyaml.la\nexample_reformatter_SOURCES = example-reformatter.c\nexample_reformatter_OBJECTS = example-reformatter.$(OBJEXT)\nexample_reformatter_LDADD = $(LDADD)\nexample_reformatter_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nexample_reformatter_alt_SOURCES = example-reformatter-alt.c\nexample_reformatter_alt_OBJECTS = example-reformatter-alt.$(OBJEXT)\nexample_reformatter_alt_LDADD = $(LDADD)\nexample_reformatter_alt_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nrun_dumper_SOURCES = run-dumper.c\nrun_dumper_OBJECTS = run-dumper.$(OBJEXT)\nrun_dumper_LDADD = $(LDADD)\nrun_dumper_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nrun_emitter_SOURCES = run-emitter.c\nrun_emitter_OBJECTS = run-emitter.$(OBJEXT)\nrun_emitter_LDADD = $(LDADD)\nrun_emitter_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nrun_loader_SOURCES = run-loader.c\nrun_loader_OBJECTS = run-loader.$(OBJEXT)\nrun_loader_LDADD = $(LDADD)\nrun_loader_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nrun_parser_SOURCES = run-parser.c\nrun_parser_OBJECTS = run-parser.$(OBJEXT)\nrun_parser_LDADD = $(LDADD)\nrun_parser_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nrun_scanner_SOURCES = run-scanner.c\nrun_scanner_OBJECTS = run-scanner.$(OBJEXT)\nrun_scanner_LDADD = $(LDADD)\nrun_scanner_DEPENDENCIES = $(top_builddir)/src/libyaml.la\ntest_reader_SOURCES = test-reader.c\ntest_reader_OBJECTS = test-reader.$(OBJEXT)\ntest_reader_LDADD = $(LDADD)\ntest_reader_DEPENDENCIES = $(top_builddir)/src/libyaml.la\ntest_version_SOURCES = test-version.c\ntest_version_OBJECTS = test-version.$(OBJEXT)\ntest_version_LDADD = $(LDADD)\ntest_version_DEPENDENCIES = $(top_builddir)/src/libyaml.la\nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/config/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \\\n\t--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \\\n\t$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nCCLD = $(CC)\nLINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \\\n\t--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \\\n\t$(LDFLAGS) -o $@\nSOURCES = example-deconstructor.c example-deconstructor-alt.c \\\n\texample-reformatter.c example-reformatter-alt.c run-dumper.c \\\n\trun-emitter.c run-loader.c run-parser.c run-scanner.c \\\n\ttest-reader.c test-version.c\nDIST_SOURCES = example-deconstructor.c example-deconstructor-alt.c \\\n\texample-reformatter.c example-reformatter-alt.c run-dumper.c \\\n\trun-emitter.c run-loader.c run-parser.c run-scanner.c \\\n\ttest-reader.c test-version.c\nETAGS = etags\nCTAGS = ctags\nam__tty_colors = \\\nred=; grn=; lgn=; blu=; std=\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\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@\nDOXYGEN = @DOXYGEN@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nYAML_LT_AGE = @YAML_LT_AGE@\nYAML_LT_CURRENT = @YAML_LT_CURRENT@\nYAML_LT_RELEASE = @YAML_LT_RELEASE@\nYAML_LT_REVISION = @YAML_LT_REVISION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nlt_ECHO = @lt_ECHO@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nAM_CPPFLAGS = -I$(top_srcdir)/include\n#AM_CFLAGS = -Wno-pointer-sign\nLDADD = $(top_builddir)/src/libyaml.la\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign tests/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$(am__aclocal_m4_deps):\n\nclean-checkPROGRAMS:\n\t@list='$(check_PROGRAMS)'; test -n \"$$list\" || exit 0; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list || exit $$?; \\\n\ttest -n \"$(EXEEXT)\" || exit 0; \\\n\tlist=`for p in $$list; do echo \"$$p\"; done | sed 's/$(EXEEXT)$$//'`; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list\n\nclean-noinstPROGRAMS:\n\t@list='$(noinst_PROGRAMS)'; test -n \"$$list\" || exit 0; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list || exit $$?; \\\n\ttest -n \"$(EXEEXT)\" || exit 0; \\\n\tlist=`for p in $$list; do echo \"$$p\"; done | sed 's/$(EXEEXT)$$//'`; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list\nexample-deconstructor$(EXEEXT): $(example_deconstructor_OBJECTS) $(example_deconstructor_DEPENDENCIES) \n\t@rm -f example-deconstructor$(EXEEXT)\n\t$(LINK) $(example_deconstructor_OBJECTS) $(example_deconstructor_LDADD) $(LIBS)\nexample-deconstructor-alt$(EXEEXT): $(example_deconstructor_alt_OBJECTS) $(example_deconstructor_alt_DEPENDENCIES) \n\t@rm -f example-deconstructor-alt$(EXEEXT)\n\t$(LINK) $(example_deconstructor_alt_OBJECTS) $(example_deconstructor_alt_LDADD) $(LIBS)\nexample-reformatter$(EXEEXT): $(example_reformatter_OBJECTS) $(example_reformatter_DEPENDENCIES) \n\t@rm -f example-reformatter$(EXEEXT)\n\t$(LINK) $(example_reformatter_OBJECTS) $(example_reformatter_LDADD) $(LIBS)\nexample-reformatter-alt$(EXEEXT): $(example_reformatter_alt_OBJECTS) $(example_reformatter_alt_DEPENDENCIES) \n\t@rm -f example-reformatter-alt$(EXEEXT)\n\t$(LINK) $(example_reformatter_alt_OBJECTS) $(example_reformatter_alt_LDADD) $(LIBS)\nrun-dumper$(EXEEXT): $(run_dumper_OBJECTS) $(run_dumper_DEPENDENCIES) \n\t@rm -f run-dumper$(EXEEXT)\n\t$(LINK) $(run_dumper_OBJECTS) $(run_dumper_LDADD) $(LIBS)\nrun-emitter$(EXEEXT): $(run_emitter_OBJECTS) $(run_emitter_DEPENDENCIES) \n\t@rm -f run-emitter$(EXEEXT)\n\t$(LINK) $(run_emitter_OBJECTS) $(run_emitter_LDADD) $(LIBS)\nrun-loader$(EXEEXT): $(run_loader_OBJECTS) $(run_loader_DEPENDENCIES) \n\t@rm -f run-loader$(EXEEXT)\n\t$(LINK) $(run_loader_OBJECTS) $(run_loader_LDADD) $(LIBS)\nrun-parser$(EXEEXT): $(run_parser_OBJECTS) $(run_parser_DEPENDENCIES) \n\t@rm -f run-parser$(EXEEXT)\n\t$(LINK) $(run_parser_OBJECTS) $(run_parser_LDADD) $(LIBS)\nrun-scanner$(EXEEXT): $(run_scanner_OBJECTS) $(run_scanner_DEPENDENCIES) \n\t@rm -f run-scanner$(EXEEXT)\n\t$(LINK) $(run_scanner_OBJECTS) $(run_scanner_LDADD) $(LIBS)\ntest-reader$(EXEEXT): $(test_reader_OBJECTS) $(test_reader_DEPENDENCIES) \n\t@rm -f test-reader$(EXEEXT)\n\t$(LINK) $(test_reader_OBJECTS) $(test_reader_LDADD) $(LIBS)\ntest-version$(EXEEXT): $(test_version_OBJECTS) $(test_version_DEPENDENCIES) \n\t@rm -f test-version$(EXEEXT)\n\t$(LINK) $(test_version_OBJECTS) $(test_version_LDADD) $(LIBS)\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)/example-deconstructor-alt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example-deconstructor.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example-reformatter-alt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/example-reformatter.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-dumper.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-emitter.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-loader.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-parser.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-scanner.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-reader.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-version.Po@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po\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@\t$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po\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\n.c.lo:\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<\n@am__fastdepCC_TRUE@\t$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tsource='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\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; nonempty = 1; } \\\n\t      END { if (nonempty) { 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\tset x; \\\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: CTAGS\nCTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \\\n\t\t$(TAGS_FILES) $(LISP)\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; nonempty = 1; } \\\n\t      END { if (nonempty) { for (i in files) print i; }; }'`; \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__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\ncheck-TESTS: $(TESTS)\n\t@failed=0; all=0; xfail=0; xpass=0; skip=0; \\\n\tsrcdir=$(srcdir); export srcdir; \\\n\tlist=' $(TESTS) '; \\\n\t$(am__tty_colors); \\\n\tif test -n \"$$list\"; then \\\n\t  for tst in $$list; do \\\n\t    if test -f ./$$tst; then dir=./; \\\n\t    elif test -f $$tst; then dir=; \\\n\t    else dir=\"$(srcdir)/\"; fi; \\\n\t    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \\\n\t      all=`expr $$all + 1`; \\\n\t      case \" $(XFAIL_TESTS) \" in \\\n\t      *[\\ \\\t]$$tst[\\ \\\t]*) \\\n\t\txpass=`expr $$xpass + 1`; \\\n\t\tfailed=`expr $$failed + 1`; \\\n\t\tcol=$$red; res=XPASS; \\\n\t      ;; \\\n\t      *) \\\n\t\tcol=$$grn; res=PASS; \\\n\t      ;; \\\n\t      esac; \\\n\t    elif test $$? -ne 77; then \\\n\t      all=`expr $$all + 1`; \\\n\t      case \" $(XFAIL_TESTS) \" in \\\n\t      *[\\ \\\t]$$tst[\\ \\\t]*) \\\n\t\txfail=`expr $$xfail + 1`; \\\n\t\tcol=$$lgn; res=XFAIL; \\\n\t      ;; \\\n\t      *) \\\n\t\tfailed=`expr $$failed + 1`; \\\n\t\tcol=$$red; res=FAIL; \\\n\t      ;; \\\n\t      esac; \\\n\t    else \\\n\t      skip=`expr $$skip + 1`; \\\n\t      col=$$blu; res=SKIP; \\\n\t    fi; \\\n\t    echo \"$${col}$$res$${std}: $$tst\"; \\\n\t  done; \\\n\t  if test \"$$all\" -eq 1; then \\\n\t    tests=\"test\"; \\\n\t    All=\"\"; \\\n\t  else \\\n\t    tests=\"tests\"; \\\n\t    All=\"All \"; \\\n\t  fi; \\\n\t  if test \"$$failed\" -eq 0; then \\\n\t    if test \"$$xfail\" -eq 0; then \\\n\t      banner=\"$$All$$all $$tests passed\"; \\\n\t    else \\\n\t      if test \"$$xfail\" -eq 1; then failures=failure; else failures=failures; fi; \\\n\t      banner=\"$$All$$all $$tests behaved as expected ($$xfail expected $$failures)\"; \\\n\t    fi; \\\n\t  else \\\n\t    if test \"$$xpass\" -eq 0; then \\\n\t      banner=\"$$failed of $$all $$tests failed\"; \\\n\t    else \\\n\t      if test \"$$xpass\" -eq 1; then passes=pass; else passes=passes; fi; \\\n\t      banner=\"$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)\"; \\\n\t    fi; \\\n\t  fi; \\\n\t  dashes=\"$$banner\"; \\\n\t  skipped=\"\"; \\\n\t  if test \"$$skip\" -ne 0; then \\\n\t    if test \"$$skip\" -eq 1; then \\\n\t      skipped=\"($$skip test was not run)\"; \\\n\t    else \\\n\t      skipped=\"($$skip tests were not run)\"; \\\n\t    fi; \\\n\t    test `echo \"$$skipped\" | wc -c` -le `echo \"$$banner\" | wc -c` || \\\n\t      dashes=\"$$skipped\"; \\\n\t  fi; \\\n\t  report=\"\"; \\\n\t  if test \"$$failed\" -ne 0 && test -n \"$(PACKAGE_BUGREPORT)\"; then \\\n\t    report=\"Please report to $(PACKAGE_BUGREPORT)\"; \\\n\t    test `echo \"$$report\" | wc -c` -le `echo \"$$banner\" | wc -c` || \\\n\t      dashes=\"$$report\"; \\\n\t  fi; \\\n\t  dashes=`echo \"$$dashes\" | sed s/./=/g`; \\\n\t  if test \"$$failed\" -eq 0; then \\\n\t    echo \"$$grn$$dashes\"; \\\n\t  else \\\n\t    echo \"$$red$$dashes\"; \\\n\t  fi; \\\n\t  echo \"$$banner\"; \\\n\t  test -z \"$$skipped\" || echo \"$$skipped\"; \\\n\t  test -z \"$$report\" || echo \"$$report\"; \\\n\t  echo \"$$dashes$$std\"; \\\n\t  test \"$$failed\" -eq 0; \\\n\telse :; fi\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\tlist='$(DISTFILES)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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\n\t$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)\n\t$(MAKE) $(AM_MAKEFLAGS) check-TESTS\ncheck: check-am\nall-am: Makefile $(PROGRAMS)\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\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-checkPROGRAMS clean-generic clean-libtool \\\n\tclean-noinstPROGRAMS 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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: check-am install-am install-strip\n\n.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \\\n\tclean-checkPROGRAMS clean-generic clean-libtool \\\n\tclean-noinstPROGRAMS ctags distclean distclean-compile \\\n\tdistclean-generic distclean-libtool distclean-tags distdir dvi \\\n\tdvi-am html html-am info info-am install install-am \\\n\tinstall-data install-data-am install-dvi install-dvi-am \\\n\tinstall-exec install-exec-am install-html install-html-am \\\n\tinstall-info install-info-am install-man install-pdf \\\n\tinstall-pdf-am install-ps install-ps-am install-strip \\\n\tinstallcheck installcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags uninstall uninstall-am\n\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/example-deconstructor-alt.c",
    "content": "\n#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int help = 0;\n    int canonical = 0;\n    int unicode = 0;\n    int k;\n    int done = 0;\n\n    yaml_parser_t parser;\n    yaml_emitter_t emitter;\n    yaml_event_t input_event;\n    yaml_document_t output_document;\n\n    int root;\n\n    /* Clear the objects. */\n\n    memset(&parser, 0, sizeof(parser));\n    memset(&emitter, 0, sizeof(emitter));\n    memset(&input_event, 0, sizeof(input_event));\n    memset(&output_document, 0, sizeof(output_document));\n\n    /* Analyze command line options. */\n\n    for (k = 1; k < argc; k ++)\n    {\n        if (strcmp(argv[k], \"-h\") == 0\n                || strcmp(argv[k], \"--help\") == 0) {\n            help = 1;\n        }\n\n        else if (strcmp(argv[k], \"-c\") == 0\n                || strcmp(argv[k], \"--canonical\") == 0) {\n            canonical = 1;\n        }\n\n        else if (strcmp(argv[k], \"-u\") == 0\n                || strcmp(argv[k], \"--unicode\") == 0) {\n            unicode = 1;\n        }\n\n        else {\n            fprintf(stderr, \"Unrecognized option: %s\\n\"\n                    \"Try `%s --help` for more information.\\n\",\n                    argv[k], argv[0]);\n            return 1;\n        }\n    }\n\n    /* Display the help string. */\n\n    if (help)\n    {\n        printf(\"%s <input\\n\"\n                \"or\\n%s -h | --help\\nDeconstruct a YAML stream\\n\\nOptions:\\n\"\n                \"-h, --help\\t\\tdisplay this help and exit\\n\"\n                \"-c, --canonical\\t\\toutput in the canonical YAML format\\n\"\n                \"-u, --unicode\\t\\toutput unescaped non-ASCII characters\\n\",\n                argv[0], argv[0]);\n        return 0;\n    }\n\n    /* Initialize the parser and emitter objects. */\n\n    if (!yaml_parser_initialize(&parser)) {\n        fprintf(stderr, \"Could not initialize the parser object\\n\");\n        return 1;\n    }\n\n    if (!yaml_emitter_initialize(&emitter)) {\n        yaml_parser_delete(&parser);\n        fprintf(stderr, \"Could not inialize the emitter object\\n\");\n        return 1;\n    }\n\n    /* Set the parser parameters. */\n\n    yaml_parser_set_input_file(&parser, stdin);\n\n    /* Set the emitter parameters. */\n\n    yaml_emitter_set_output_file(&emitter, stdout);\n\n    yaml_emitter_set_canonical(&emitter, canonical);\n    yaml_emitter_set_unicode(&emitter, unicode);\n\n    /* Create and emit the STREAM-START event. */\n\n    if (!yaml_emitter_open(&emitter))\n        goto emitter_error;\n\n    /* Create a output_document object. */\n\n    if (!yaml_document_initialize(&output_document, NULL, NULL, NULL, 0, 0))\n        goto document_error;\n\n    /* Create the root sequence. */\n\n    root = yaml_document_add_sequence(&output_document, NULL,\n            YAML_BLOCK_SEQUENCE_STYLE);\n    if (!root) goto document_error;\n\n    /* Loop through the input events. */\n\n    while (!done)\n    {\n        int properties, key, value, map, seq;\n\n        /* Get the next event. */\n\n        if (!yaml_parser_parse(&parser, &input_event))\n            goto parser_error;\n\n        /* Check if this is the stream end. */\n\n        if (input_event.type == YAML_STREAM_END_EVENT) {\n            done = 1;\n        }\n\n        /* Create a mapping node and attach it to the root sequence. */\n\n        properties = yaml_document_add_mapping(&output_document, NULL,\n                YAML_BLOCK_MAPPING_STYLE);\n        if (!properties) goto document_error;\n        if (!yaml_document_append_sequence_item(&output_document,\n                    root, properties)) goto document_error;\n\n        /* Analyze the event. */\n\n        switch (input_event.type)\n        {\n            case YAML_STREAM_START_EVENT:\n\n                /* Add 'type': 'STREAM-START'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"STREAM-START\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'encoding': <encoding>. */\n\n                if (input_event.data.stream_start.encoding)\n                {\n                    yaml_encoding_t encoding\n                        = input_event.data.stream_start.encoding;\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"encoding\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            (encoding == YAML_UTF8_ENCODING ? \"utf-8\" :\n                             encoding == YAML_UTF16LE_ENCODING ? \"utf-16-le\" :\n                             encoding == YAML_UTF16BE_ENCODING ? \"utf-16-be\" :\n                             \"unknown\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n                    \n                break;\n\n            case YAML_STREAM_END_EVENT:\n\n                /* Add 'type': 'STREAM-END'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"STREAM-END\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            case YAML_DOCUMENT_START_EVENT:\n\n                /* Add 'type': 'DOCUMENT-START'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"DOCUMENT-START\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Display the output_document version numbers. */\n\n                if (input_event.data.document_start.version_directive)\n                {\n                    yaml_version_directive_t *version\n                        = input_event.data.document_start.version_directive;\n                    char number[64];\n\n                    /* Add 'version': {}. */\n                    \n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"version\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    map = yaml_document_add_mapping(&output_document, NULL,\n                            YAML_FLOW_MAPPING_STYLE);\n                    if (!map) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, map)) goto document_error;\n\n                    /* Add 'major': <number>. */\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"major\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    sprintf(number, \"%d\", version->major);\n                    value = yaml_document_add_scalar(&output_document, YAML_INT_TAG,\n                        number, -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                map, key, value)) goto document_error;\n\n                    /* Add 'minor': <number>. */\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"minor\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    sprintf(number, \"%d\", version->minor);\n                    value = yaml_document_add_scalar(&output_document, YAML_INT_TAG,\n                        number, -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                map, key, value)) goto document_error;\n                }\n\n                /* Display the output_document tag directives. */\n\n                if (input_event.data.document_start.tag_directives.start\n                        != input_event.data.document_start.tag_directives.end)\n                {\n                    yaml_tag_directive_t *tag;\n\n                    /* Add 'tags': []. */\n                    \n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"tags\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    seq = yaml_document_add_sequence(&output_document, NULL,\n                            YAML_BLOCK_SEQUENCE_STYLE);\n                    if (!seq) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, seq)) goto document_error;\n\n                    for (tag = input_event.data.document_start.tag_directives.start;\n                            tag != input_event.data.document_start.tag_directives.end;\n                            tag ++)\n                    {\n                        /* Add {}. */\n\n                        map = yaml_document_add_mapping(&output_document, NULL,\n                                YAML_FLOW_MAPPING_STYLE);\n                        if (!map) goto document_error;\n                        if (!yaml_document_append_sequence_item(&output_document,\n                                    seq, map)) goto document_error;\n\n                        /* Add 'handle': <handle>. */\n\n                        key = yaml_document_add_scalar(&output_document, NULL,\n                            \"handle\", -1, YAML_PLAIN_SCALAR_STYLE);\n                        if (!key) goto document_error;\n                        value = yaml_document_add_scalar(&output_document, NULL,\n                            tag->handle, -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                        if (!value) goto document_error;\n                        if (!yaml_document_append_mapping_pair(&output_document,\n                                    map, key, value)) goto document_error;\n\n                        /* Add 'prefix': <prefix>. */\n\n                        key = yaml_document_add_scalar(&output_document, NULL,\n                            \"prefix\", -1, YAML_PLAIN_SCALAR_STYLE);\n                        if (!key) goto document_error;\n                        value = yaml_document_add_scalar(&output_document, NULL,\n                            tag->prefix, -1, YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                        if (!value) goto document_error;\n                        if (!yaml_document_append_mapping_pair(&output_document,\n                                    map, key, value)) goto document_error;\n                    }\n                }\n\n                /* Add 'implicit': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"implicit\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.document_start.implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            case YAML_DOCUMENT_END_EVENT:\n\n                /* Add 'type': 'DOCUMENT-END'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"DOCUMENT-END\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'implicit': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"implicit\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.document_end.implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            case YAML_ALIAS_EVENT:\n\n                /* Add 'type': 'ALIAS'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"ALIAS\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'anchor': <anchor>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"anchor\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                        input_event.data.alias.anchor, -1,\n                        YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            case YAML_SCALAR_EVENT:\n\n                /* Add 'type': 'SCALAR'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"SCALAR\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'anchor': <anchor>. */\n\n                if (input_event.data.scalar.anchor)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"anchor\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.scalar.anchor, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'tag': <tag>. */\n\n                if (input_event.data.scalar.tag)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"tag\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.scalar.tag, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'value': <value>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"value\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                        input_event.data.scalar.value,\n                        input_event.data.scalar.length,\n                        YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Display if the scalar tag is implicit. */\n\n                /* Add 'implicit': {} */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"version\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                map = yaml_document_add_mapping(&output_document, NULL,\n                        YAML_FLOW_MAPPING_STYLE);\n                if (!map) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, map)) goto document_error;\n\n                /* Add 'plain': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"plain\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.scalar.plain_implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            map, key, value)) goto document_error;\n\n                /* Add 'quoted': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"quoted\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.scalar.quoted_implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            map, key, value)) goto document_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.scalar.style)\n                {\n                    yaml_scalar_style_t style = input_event.data.scalar.style;\n\n                    /* Add 'style': <style>. */\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"style\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            (style == YAML_PLAIN_SCALAR_STYLE ? \"plain\" :\n                             style == YAML_SINGLE_QUOTED_SCALAR_STYLE ?\n                                    \"single-quoted\" :\n                             style == YAML_DOUBLE_QUOTED_SCALAR_STYLE ?\n                                    \"double-quoted\" :\n                             style == YAML_LITERAL_SCALAR_STYLE ? \"literal\" :\n                             style == YAML_FOLDED_SCALAR_STYLE ? \"folded\" :\n                             \"unknown\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                break;\n\n            case YAML_SEQUENCE_START_EVENT:\n\n                /* Add 'type': 'SEQUENCE-START'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"SEQUENCE-START\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'anchor': <anchor>. */\n\n                if (input_event.data.sequence_start.anchor)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"anchor\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.sequence_start.anchor, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'tag': <tag>. */\n\n                if (input_event.data.sequence_start.tag)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"tag\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.sequence_start.tag, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'implicit': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"implicit\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.sequence_start.implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.sequence_start.style)\n                {\n                    yaml_sequence_style_t style\n                        = input_event.data.sequence_start.style;\n\n                    /* Add 'style': <style>. */\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"style\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            (style == YAML_BLOCK_SEQUENCE_STYLE ? \"block\" :\n                             style == YAML_FLOW_SEQUENCE_STYLE ? \"flow\" :\n                             \"unknown\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                break;\n\n            case YAML_SEQUENCE_END_EVENT:\n\n                /* Add 'type': 'SEQUENCE-END'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"SEQUENCE-END\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            case YAML_MAPPING_START_EVENT:\n\n                /* Add 'type': 'MAPPING-START'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"MAPPING-START\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Add 'anchor': <anchor>. */\n\n                if (input_event.data.mapping_start.anchor)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"anchor\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.mapping_start.anchor, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'tag': <tag>. */\n\n                if (input_event.data.mapping_start.tag)\n                {\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"tag\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            input_event.data.mapping_start.tag, -1,\n                            YAML_DOUBLE_QUOTED_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                /* Add 'implicit': <flag>. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"implicit\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, YAML_BOOL_TAG,\n                        (input_event.data.mapping_start.implicit ?\n                         \"true\" : \"false\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.sequence_start.style)\n                {\n                    yaml_sequence_style_t style\n                        = input_event.data.mapping_start.style;\n\n                    /* Add 'style': <style>. */\n\n                    key = yaml_document_add_scalar(&output_document, NULL,\n                        \"style\", -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!key) goto document_error;\n                    value = yaml_document_add_scalar(&output_document, NULL,\n                            (style == YAML_BLOCK_MAPPING_STYLE ? \"block\" :\n                             style == YAML_FLOW_MAPPING_STYLE ? \"flow\" :\n                             \"unknown\"), -1, YAML_PLAIN_SCALAR_STYLE);\n                    if (!value) goto document_error;\n                    if (!yaml_document_append_mapping_pair(&output_document,\n                                properties, key, value)) goto document_error;\n                }\n\n                break;\n\n            case YAML_MAPPING_END_EVENT:\n\n                /* Add 'type': 'MAPPING-END'. */\n\n                key = yaml_document_add_scalar(&output_document, NULL,\n                    \"type\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!key) goto document_error;\n                value = yaml_document_add_scalar(&output_document, NULL,\n                    \"MAPPING-END\", -1, YAML_PLAIN_SCALAR_STYLE);\n                if (!value) goto document_error;\n                if (!yaml_document_append_mapping_pair(&output_document,\n                            properties, key, value)) goto document_error;\n\n                break;\n\n            default:\n                /* It couldn't really happen. */\n                break;\n        }\n\n        /* Delete the event object. */\n\n        yaml_event_delete(&input_event);\n    }\n\n    if (!yaml_emitter_dump(&emitter, &output_document))\n        goto emitter_error;\n    if (!yaml_emitter_close(&emitter))\n        goto emitter_error;\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 0;\n\nparser_error:\n\n    /* Display a parser error message. */\n\n    switch (parser.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for parsing\\n\");\n            break;\n\n        case YAML_READER_ERROR:\n            if (parser.problem_value != -1) {\n                fprintf(stderr, \"Reader error: %s: #%X at %d\\n\", parser.problem,\n                        parser.problem_value, parser.problem_offset);\n            }\n            else {\n                fprintf(stderr, \"Reader error: %s at %d\\n\", parser.problem,\n                        parser.problem_offset);\n            }\n            break;\n\n        case YAML_SCANNER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        case YAML_PARSER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_event_delete(&input_event);\n    yaml_document_delete(&output_document);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\nemitter_error:\n\n    /* Display an emitter error message. */\n\n    switch (emitter.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for emitting\\n\");\n            break;\n\n        case YAML_WRITER_ERROR:\n            fprintf(stderr, \"Writer error: %s\\n\", emitter.problem);\n            break;\n\n        case YAML_EMITTER_ERROR:\n            fprintf(stderr, \"Emitter error: %s\\n\", emitter.problem);\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_event_delete(&input_event);\n    yaml_document_delete(&output_document);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\ndocument_error:\n\n    fprintf(stderr, \"Memory error: Not enough memory for creating a document\\n\");\n\n    yaml_event_delete(&input_event);\n    yaml_document_delete(&output_document);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/example-deconstructor.c",
    "content": "\n#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int help = 0;\n    int canonical = 0;\n    int unicode = 0;\n    int k;\n    int done = 0;\n\n    yaml_parser_t parser;\n    yaml_emitter_t emitter;\n    yaml_event_t input_event;\n    yaml_event_t output_event;\n\n    /* Clear the objects. */\n\n    memset(&parser, 0, sizeof(parser));\n    memset(&emitter, 0, sizeof(emitter));\n    memset(&input_event, 0, sizeof(input_event));\n    memset(&output_event, 0, sizeof(output_event));\n\n    /* Analyze command line options. */\n\n    for (k = 1; k < argc; k ++)\n    {\n        if (strcmp(argv[k], \"-h\") == 0\n                || strcmp(argv[k], \"--help\") == 0) {\n            help = 1;\n        }\n\n        else if (strcmp(argv[k], \"-c\") == 0\n                || strcmp(argv[k], \"--canonical\") == 0) {\n            canonical = 1;\n        }\n\n        else if (strcmp(argv[k], \"-u\") == 0\n                || strcmp(argv[k], \"--unicode\") == 0) {\n            unicode = 1;\n        }\n\n        else {\n            fprintf(stderr, \"Unrecognized option: %s\\n\"\n                    \"Try `%s --help` for more information.\\n\",\n                    argv[k], argv[0]);\n            return 1;\n        }\n    }\n\n    /* Display the help string. */\n\n    if (help)\n    {\n        printf(\"%s <input\\n\"\n                \"or\\n%s -h | --help\\nDeconstruct a YAML stream\\n\\nOptions:\\n\"\n                \"-h, --help\\t\\tdisplay this help and exit\\n\"\n                \"-c, --canonical\\t\\toutput in the canonical YAML format\\n\"\n                \"-u, --unicode\\t\\toutput unescaped non-ASCII characters\\n\",\n                argv[0], argv[0]);\n        return 0;\n    }\n\n    /* Initialize the parser and emitter objects. */\n\n    if (!yaml_parser_initialize(&parser)) {\n        fprintf(stderr, \"Could not initialize the parser object\\n\");\n        return 1;\n    }\n\n    if (!yaml_emitter_initialize(&emitter)) {\n        yaml_parser_delete(&parser);\n        fprintf(stderr, \"Could not inialize the emitter object\\n\");\n        return 1;\n    }\n\n    /* Set the parser parameters. */\n\n    yaml_parser_set_input_file(&parser, stdin);\n\n    /* Set the emitter parameters. */\n\n    yaml_emitter_set_output_file(&emitter, stdout);\n\n    yaml_emitter_set_canonical(&emitter, canonical);\n    yaml_emitter_set_unicode(&emitter, unicode);\n\n    /* Create and emit the STREAM-START event. */\n\n    if (!yaml_stream_start_event_initialize(&output_event, YAML_UTF8_ENCODING))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    /* Create and emit the DOCUMENT-START event. */\n\n    if (!yaml_document_start_event_initialize(&output_event,\n                NULL, NULL, NULL, 0))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    /* Create and emit the SEQUENCE-START event. */\n\n    if (!yaml_sequence_start_event_initialize(&output_event,\n                NULL, \"tag:yaml.org,2002:seq\", 1,\n                YAML_BLOCK_SEQUENCE_STYLE))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    /* Loop through the input events. */\n\n    while (!done)\n    {\n        /* Get the next event. */\n\n        if (!yaml_parser_parse(&parser, &input_event))\n            goto parser_error;\n\n        /* Check if this is the stream end. */\n\n        if (input_event.type == YAML_STREAM_END_EVENT) {\n            done = 1;\n        }\n\n        /* Create and emit a MAPPING-START event. */\n\n        if (!yaml_mapping_start_event_initialize(&output_event,\n                    NULL, \"tag:yaml.org,2002:map\", 1,\n                    YAML_BLOCK_MAPPING_STYLE))\n            goto event_error;\n        if (!yaml_emitter_emit(&emitter, &output_event))\n            goto emitter_error;\n\n        /* Analyze the event. */\n\n        switch (input_event.type)\n        {\n            case YAML_STREAM_START_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'STREAM-START'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"STREAM-START\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display encoding information. */\n\n                if (input_event.data.stream_start.encoding)\n                {\n                    yaml_encoding_t encoding\n                        = input_event.data.stream_start.encoding;\n\n                    /* Write 'encoding'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"encoding\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the stream encoding. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                (encoding == YAML_UTF8_ENCODING ? \"utf-8\" :\n                                 encoding == YAML_UTF16LE_ENCODING ? \"utf-16-le\" :\n                                 encoding == YAML_UTF16BE_ENCODING ? \"utf-16-be\" :\n                                 \"unknown\"), -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                break;\n\n            case YAML_STREAM_END_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'STREAM-END'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"STREAM-END\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            case YAML_DOCUMENT_START_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'DOCUMENT-START'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"DOCUMENT-START\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the document version numbers. */\n\n                if (input_event.data.document_start.version_directive)\n                {\n                    yaml_version_directive_t *version\n                        = input_event.data.document_start.version_directive;\n                    char number[64];\n\n                    /* Write 'version'. */\n                    \n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"version\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write '{'. */\n\n                    if (!yaml_mapping_start_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:map\", 1,\n                                YAML_FLOW_MAPPING_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write 'major'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"major\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write a number. */\n\n                    sprintf(number, \"%d\", version->major);\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:int\", number, -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write 'minor'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"minor\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write a number. */\n\n                    sprintf(number, \"%d\", version->minor);\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:int\", number, -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write '}'. */\n\n                    if (!yaml_mapping_end_event_initialize(&output_event))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Display the document tag directives. */\n\n                if (input_event.data.document_start.tag_directives.start\n                        != input_event.data.document_start.tag_directives.end)\n                {\n                    yaml_tag_directive_t *tag;\n\n                    /* Write 'tags'. */\n                    \n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"tags\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Start a block sequence. */\n\n                    if (!yaml_sequence_start_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:seq\", 1,\n                                YAML_BLOCK_SEQUENCE_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    for (tag = input_event.data.document_start.tag_directives.start;\n                            tag != input_event.data.document_start.tag_directives.end;\n                            tag ++)\n                    {\n                        /* Write '{'. */\n\n                        if (!yaml_mapping_start_event_initialize(&output_event,\n                                    NULL, \"tag:yaml.org,2002:map\", 1,\n                                    YAML_FLOW_MAPPING_STYLE))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n\n                        /* Write 'handle'. */\n\n                        if (!yaml_scalar_event_initialize(&output_event,\n                                    NULL, \"tag:yaml.org,2002:str\", \"handle\", -1,\n                                    1, 1, YAML_PLAIN_SCALAR_STYLE))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n\n                        /* Write the tag directive handle. */\n\n                        if (!yaml_scalar_event_initialize(&output_event,\n                                    NULL, \"tag:yaml.org,2002:str\",\n                                    tag->handle, -1,\n                                    0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n\n                        /* Write 'prefix'. */\n\n                        if (!yaml_scalar_event_initialize(&output_event,\n                                    NULL, \"tag:yaml.org,2002:str\", \"prefix\", -1,\n                                    1, 1, YAML_PLAIN_SCALAR_STYLE))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n\n                        /* Write the tag directive prefix. */\n\n                        if (!yaml_scalar_event_initialize(&output_event,\n                                    NULL, \"tag:yaml.org,2002:str\",\n                                    tag->prefix, -1,\n                                    0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n\n                        /* Write '}'. */\n\n                        if (!yaml_mapping_end_event_initialize(&output_event))\n                            goto event_error;\n                        if (!yaml_emitter_emit(&emitter, &output_event))\n                            goto emitter_error;\n                    }\n\n                    /* End a block sequence. */\n\n                    if (!yaml_sequence_end_event_initialize(&output_event))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Write 'implicit'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"implicit\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the document is implicit. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.document_start.implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            case YAML_DOCUMENT_END_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'DOCUMENT-END'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"DOCUMENT-END\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'implicit'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"implicit\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the document is implicit. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.document_end.implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            case YAML_ALIAS_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'ALIAS'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"ALIAS\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'anchor'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"anchor\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write the alias anchor. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\",\n                            input_event.data.alias.anchor, -1,\n                            0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            case YAML_SCALAR_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'SCALAR'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"SCALAR\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the scalar anchor. */\n\n                if (input_event.data.scalar.anchor)\n                {\n                    /* Write 'anchor'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"anchor\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the scalar anchor. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.scalar.anchor, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Display the scalar tag. */\n\n                if (input_event.data.scalar.tag)\n                {\n                    /* Write 'tag'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"tag\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the scalar tag. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.scalar.tag, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Display the scalar value. */\n\n                /* Write 'value'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"value\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write the scalar value. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\",\n                            input_event.data.scalar.value,\n                            input_event.data.scalar.length,\n                            0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display if the scalar tag is implicit. */\n\n                /* Write 'implicit'. */\n                \n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"implicit\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write '{'. */\n\n                if (!yaml_mapping_start_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:map\", 1,\n                            YAML_FLOW_MAPPING_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'plain'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"plain\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the scalar is implicit in the plain style. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.scalar.plain_implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'quoted'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"non-plain\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the scalar is implicit in a non-plain style. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.scalar.quoted_implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write '}'. */\n\n                if (!yaml_mapping_end_event_initialize(&output_event))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.scalar.style)\n                {\n                    yaml_scalar_style_t style = input_event.data.scalar.style;\n\n                    /* Write 'style'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"style\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the scalar style. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                (style == YAML_PLAIN_SCALAR_STYLE ? \"plain\" :\n                                 style == YAML_SINGLE_QUOTED_SCALAR_STYLE ?\n                                        \"single-quoted\" :\n                                 style == YAML_DOUBLE_QUOTED_SCALAR_STYLE ?\n                                        \"double-quoted\" :\n                                 style == YAML_LITERAL_SCALAR_STYLE ? \"literal\" :\n                                 style == YAML_FOLDED_SCALAR_STYLE ? \"folded\" :\n                                 \"unknown\"), -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                break;\n\n            case YAML_SEQUENCE_START_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'SEQUENCE-START'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"SEQUENCE-START\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the sequence anchor. */\n\n                if (input_event.data.sequence_start.anchor)\n                {\n                    /* Write 'anchor'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"anchor\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the sequence anchor. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.sequence_start.anchor, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Display the sequence tag. */\n\n                if (input_event.data.sequence_start.tag)\n                {\n                    /* Write 'tag'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"tag\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the sequence tag. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.sequence_start.tag, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Write 'implicit'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"implicit\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the sequence tag is implicit. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.sequence_start.implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.sequence_start.style)\n                {\n                    yaml_sequence_style_t style\n                        = input_event.data.sequence_start.style;\n\n                    /* Write 'style'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"style\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the scalar style. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                (style == YAML_BLOCK_SEQUENCE_STYLE ? \"block\" :\n                                 style == YAML_FLOW_SEQUENCE_STYLE ? \"flow\" :\n                                 \"unknown\"), -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                break;\n\n            case YAML_SEQUENCE_END_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'SEQUENCE-END'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"SEQUENCE-END\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            case YAML_MAPPING_START_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'MAPPING-START'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"MAPPING-START\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the mapping anchor. */\n\n                if (input_event.data.mapping_start.anchor)\n                {\n                    /* Write 'anchor'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"anchor\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the mapping anchor. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.mapping_start.anchor, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Display the mapping tag. */\n\n                if (input_event.data.mapping_start.tag)\n                {\n                    /* Write 'tag'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"tag\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the mapping tag. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                input_event.data.mapping_start.tag, -1,\n                                0, 1, YAML_DOUBLE_QUOTED_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                /* Write 'implicit'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"implicit\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write if the mapping tag is implicit. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:bool\",\n                            (input_event.data.mapping_start.implicit ?\n                             \"true\" : \"false\"), -1,\n                            1, 0, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Display the style information. */\n\n                if (input_event.data.mapping_start.style)\n                {\n                    yaml_mapping_style_t style\n                        = input_event.data.mapping_start.style;\n\n                    /* Write 'style'. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\", \"style\", -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n\n                    /* Write the scalar style. */\n\n                    if (!yaml_scalar_event_initialize(&output_event,\n                                NULL, \"tag:yaml.org,2002:str\",\n                                (style == YAML_BLOCK_MAPPING_STYLE ? \"block\" :\n                                 style == YAML_FLOW_MAPPING_STYLE ? \"flow\" :\n                                 \"unknown\"), -1,\n                                1, 1, YAML_PLAIN_SCALAR_STYLE))\n                        goto event_error;\n                    if (!yaml_emitter_emit(&emitter, &output_event))\n                        goto emitter_error;\n                }\n\n                break;\n\n            case YAML_MAPPING_END_EVENT:\n\n                /* Write 'type'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"type\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                /* Write 'MAPPING-END'. */\n\n                if (!yaml_scalar_event_initialize(&output_event,\n                            NULL, \"tag:yaml.org,2002:str\", \"MAPPING-END\", -1,\n                            1, 1, YAML_PLAIN_SCALAR_STYLE))\n                    goto event_error;\n                if (!yaml_emitter_emit(&emitter, &output_event))\n                    goto emitter_error;\n\n                break;\n\n            default:\n                /* It couldn't really happen. */\n                break;\n        }\n\n        /* Delete the event object. */\n\n        yaml_event_delete(&input_event);\n\n        /* Create and emit a MAPPING-END event. */\n\n        if (!yaml_mapping_end_event_initialize(&output_event))\n            goto event_error;\n        if (!yaml_emitter_emit(&emitter, &output_event))\n            goto emitter_error;\n    }\n\n    /* Create and emit the SEQUENCE-END event. */\n\n    if (!yaml_sequence_end_event_initialize(&output_event))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    /* Create and emit the DOCUMENT-END event. */\n\n    if (!yaml_document_end_event_initialize(&output_event, 0))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    /* Create and emit the STREAM-END event. */\n\n    if (!yaml_stream_end_event_initialize(&output_event))\n        goto event_error;\n    if (!yaml_emitter_emit(&emitter, &output_event))\n        goto emitter_error;\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 0;\n\nparser_error:\n\n    /* Display a parser error message. */\n\n    switch (parser.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for parsing\\n\");\n            break;\n\n        case YAML_READER_ERROR:\n            if (parser.problem_value != -1) {\n                fprintf(stderr, \"Reader error: %s: #%X at %d\\n\", parser.problem,\n                        parser.problem_value, parser.problem_offset);\n            }\n            else {\n                fprintf(stderr, \"Reader error: %s at %d\\n\", parser.problem,\n                        parser.problem_offset);\n            }\n            break;\n\n        case YAML_SCANNER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        case YAML_PARSER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_event_delete(&input_event);\n    yaml_event_delete(&output_event);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\nemitter_error:\n\n    /* Display an emitter error message. */\n\n    switch (emitter.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for emitting\\n\");\n            break;\n\n        case YAML_WRITER_ERROR:\n            fprintf(stderr, \"Writer error: %s\\n\", emitter.problem);\n            break;\n\n        case YAML_EMITTER_ERROR:\n            fprintf(stderr, \"Emitter error: %s\\n\", emitter.problem);\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_event_delete(&input_event);\n    yaml_event_delete(&output_event);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\nevent_error:\n\n    fprintf(stderr, \"Memory error: Not enough memory for creating an event\\n\");\n\n    yaml_event_delete(&input_event);\n    yaml_event_delete(&output_event);\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/example-reformatter-alt.c",
    "content": "\n#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int help = 0;\n    int canonical = 0;\n    int unicode = 0;\n    int k;\n    int done = 0;\n\n    yaml_parser_t parser;\n    yaml_emitter_t emitter;\n    yaml_document_t document;\n\n    /* Clear the objects. */\n\n    memset(&parser, 0, sizeof(parser));\n    memset(&emitter, 0, sizeof(emitter));\n    memset(&document, 0, sizeof(document));\n\n    /* Analyze command line options. */\n\n    for (k = 1; k < argc; k ++)\n    {\n        if (strcmp(argv[k], \"-h\") == 0\n                || strcmp(argv[k], \"--help\") == 0) {\n            help = 1;\n        }\n\n        else if (strcmp(argv[k], \"-c\") == 0\n                || strcmp(argv[k], \"--canonical\") == 0) {\n            canonical = 1;\n        }\n\n        else if (strcmp(argv[k], \"-u\") == 0\n                || strcmp(argv[k], \"--unicode\") == 0) {\n            unicode = 1;\n        }\n\n        else {\n            fprintf(stderr, \"Unrecognized option: %s\\n\"\n                    \"Try `%s --help` for more information.\\n\",\n                    argv[k], argv[0]);\n            return 1;\n        }\n    }\n\n    /* Display the help string. */\n\n    if (help)\n    {\n        printf(\"%s [--canonical] [--unicode] <input >output\\n\"\n                \"or\\n%s -h | --help\\nReformat a YAML stream\\n\\nOptions:\\n\"\n                \"-h, --help\\t\\tdisplay this help and exit\\n\"\n                \"-c, --canonical\\t\\toutput in the canonical YAML format\\n\"\n                \"-u, --unicode\\t\\toutput unescaped non-ASCII characters\\n\",\n                argv[0], argv[0]);\n        return 0;\n    }\n\n    /* Initialize the parser and emitter objects. */\n\n    if (!yaml_parser_initialize(&parser))\n        goto parser_error;\n\n    if (!yaml_emitter_initialize(&emitter))\n        goto emitter_error;\n\n    /* Set the parser parameters. */\n\n    yaml_parser_set_input_file(&parser, stdin);\n\n    /* Set the emitter parameters. */\n\n    yaml_emitter_set_output_file(&emitter, stdout);\n\n    yaml_emitter_set_canonical(&emitter, canonical);\n    yaml_emitter_set_unicode(&emitter, unicode);\n\n    /* The main loop. */\n\n    while (!done)\n    {\n        /* Get the next event. */\n\n        if (!yaml_parser_load(&parser, &document))\n            goto parser_error;\n\n        /* Check if this is the stream end. */\n\n        if (!yaml_document_get_root_node(&document)) {\n            done = 1;\n        }\n\n        /* Emit the event. */\n\n        if (!yaml_emitter_dump(&emitter, &document))\n            goto emitter_error;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 0;\n\nparser_error:\n\n    /* Display a parser error message. */\n\n    switch (parser.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for parsing\\n\");\n            break;\n\n        case YAML_READER_ERROR:\n            if (parser.problem_value != -1) {\n                fprintf(stderr, \"Reader error: %s: #%X at %d\\n\", parser.problem,\n                        parser.problem_value, parser.problem_offset);\n            }\n            else {\n                fprintf(stderr, \"Reader error: %s at %d\\n\", parser.problem,\n                        parser.problem_offset);\n            }\n            break;\n\n        case YAML_SCANNER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        case YAML_PARSER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        case YAML_COMPOSER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Composer error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Composer error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\nemitter_error:\n\n    /* Display an emitter error message. */\n\n    switch (emitter.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for emitting\\n\");\n            break;\n\n        case YAML_WRITER_ERROR:\n            fprintf(stderr, \"Writer error: %s\\n\", emitter.problem);\n            break;\n\n        case YAML_EMITTER_ERROR:\n            fprintf(stderr, \"Emitter error: %s\\n\", emitter.problem);\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/example-reformatter.c",
    "content": "\n#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int help = 0;\n    int canonical = 0;\n    int unicode = 0;\n    int k;\n    int done = 0;\n\n    yaml_parser_t parser;\n    yaml_emitter_t emitter;\n    yaml_event_t event;\n\n    /* Clear the objects. */\n\n    memset(&parser, 0, sizeof(parser));\n    memset(&emitter, 0, sizeof(emitter));\n    memset(&event, 0, sizeof(event));\n\n    /* Analyze command line options. */\n\n    for (k = 1; k < argc; k ++)\n    {\n        if (strcmp(argv[k], \"-h\") == 0\n                || strcmp(argv[k], \"--help\") == 0) {\n            help = 1;\n        }\n\n        else if (strcmp(argv[k], \"-c\") == 0\n                || strcmp(argv[k], \"--canonical\") == 0) {\n            canonical = 1;\n        }\n\n        else if (strcmp(argv[k], \"-u\") == 0\n                || strcmp(argv[k], \"--unicode\") == 0) {\n            unicode = 1;\n        }\n\n        else {\n            fprintf(stderr, \"Unrecognized option: %s\\n\"\n                    \"Try `%s --help` for more information.\\n\",\n                    argv[k], argv[0]);\n            return 1;\n        }\n    }\n\n    /* Display the help string. */\n\n    if (help)\n    {\n        printf(\"%s [--canonical] [--unicode] <input >output\\n\"\n                \"or\\n%s -h | --help\\nReformat a YAML stream\\n\\nOptions:\\n\"\n                \"-h, --help\\t\\tdisplay this help and exit\\n\"\n                \"-c, --canonical\\t\\toutput in the canonical YAML format\\n\"\n                \"-u, --unicode\\t\\toutput unescaped non-ASCII characters\\n\",\n                argv[0], argv[0]);\n        return 0;\n    }\n\n    /* Initialize the parser and emitter objects. */\n\n    if (!yaml_parser_initialize(&parser))\n        goto parser_error;\n\n    if (!yaml_emitter_initialize(&emitter))\n        goto emitter_error;\n\n    /* Set the parser parameters. */\n\n    yaml_parser_set_input_file(&parser, stdin);\n\n    /* Set the emitter parameters. */\n\n    yaml_emitter_set_output_file(&emitter, stdout);\n\n    yaml_emitter_set_canonical(&emitter, canonical);\n    yaml_emitter_set_unicode(&emitter, unicode);\n\n    /* The main loop. */\n\n    while (!done)\n    {\n        /* Get the next event. */\n\n        if (!yaml_parser_parse(&parser, &event))\n            goto parser_error;\n\n        /* Check if this is the stream end. */\n\n        if (event.type == YAML_STREAM_END_EVENT) {\n            done = 1;\n        }\n\n        /* Emit the event. */\n\n        if (!yaml_emitter_emit(&emitter, &event))\n            goto emitter_error;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 0;\n\nparser_error:\n\n    /* Display a parser error message. */\n\n    switch (parser.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for parsing\\n\");\n            break;\n\n        case YAML_READER_ERROR:\n            if (parser.problem_value != -1) {\n                fprintf(stderr, \"Reader error: %s: #%X at %d\\n\", parser.problem,\n                        parser.problem_value, parser.problem_offset);\n            }\n            else {\n                fprintf(stderr, \"Reader error: %s at %d\\n\", parser.problem,\n                        parser.problem_offset);\n            }\n            break;\n\n        case YAML_SCANNER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Scanner error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        case YAML_PARSER_ERROR:\n            if (parser.context) {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\"\n                        \"%s at line %d, column %d\\n\", parser.context,\n                        parser.context_mark.line+1, parser.context_mark.column+1,\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            else {\n                fprintf(stderr, \"Parser error: %s at line %d, column %d\\n\",\n                        parser.problem, parser.problem_mark.line+1,\n                        parser.problem_mark.column+1);\n            }\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n\nemitter_error:\n\n    /* Display an emitter error message. */\n\n    switch (emitter.error)\n    {\n        case YAML_MEMORY_ERROR:\n            fprintf(stderr, \"Memory error: Not enough memory for emitting\\n\");\n            break;\n\n        case YAML_WRITER_ERROR:\n            fprintf(stderr, \"Writer error: %s\\n\", emitter.problem);\n            break;\n\n        case YAML_EMITTER_ERROR:\n            fprintf(stderr, \"Emitter error: %s\\n\", emitter.problem);\n            break;\n\n        default:\n            /* Couldn't happen. */\n            fprintf(stderr, \"Internal error\\n\");\n            break;\n    }\n\n    yaml_parser_delete(&parser);\n    yaml_emitter_delete(&emitter);\n\n    return 1;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/run-dumper.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\n#define BUFFER_SIZE 65536\n#define MAX_DOCUMENTS  16\n\nint copy_document(yaml_document_t *document_to, yaml_document_t *document_from)\n{\n    yaml_node_t *node;\n    yaml_node_item_t *item;\n    yaml_node_pair_t *pair;\n\n    if (!yaml_document_initialize(document_to, document_from->version_directive,\n                document_from->tag_directives.start,\n                document_from->tag_directives.end,\n                document_from->start_implicit, document_from->end_implicit))\n        return 0;\n\n    for (node = document_from->nodes.start;\n            node < document_from->nodes.top; node ++) {\n        switch (node->type) {\n            case YAML_SCALAR_NODE:\n                if (!yaml_document_add_scalar(document_to, node->tag,\n                            node->data.scalar.value, node->data.scalar.length,\n                            node->data.scalar.style)) goto error;\n                break;\n            case YAML_SEQUENCE_NODE:\n                if (!yaml_document_add_sequence(document_to, node->tag,\n                            node->data.sequence.style)) goto error;\n                break;\n            case YAML_MAPPING_NODE:\n                if (!yaml_document_add_mapping(document_to, node->tag,\n                            node->data.mapping.style)) goto error;\n                break;\n            default:\n                assert(0);\n                break;\n        }\n    }\n\n    for (node = document_from->nodes.start;\n            node < document_from->nodes.top; node ++) {\n        switch (node->type) {\n            case YAML_SEQUENCE_NODE:\n                for (item = node->data.sequence.items.start;\n                        item < node->data.sequence.items.top; item ++) {\n                    if (!yaml_document_append_sequence_item(document_to,\n                                node - document_from->nodes.start + 1,\n                                *item)) goto error;\n                }\n                break;\n            case YAML_MAPPING_NODE:\n                for (pair = node->data.mapping.pairs.start;\n                        pair < node->data.mapping.pairs.top; pair ++) {\n                    if (!yaml_document_append_mapping_pair(document_to,\n                                node - document_from->nodes.start + 1,\n                                pair->key, pair->value)) goto error;\n                }\n                break;\n            default:\n                break;\n        }\n    }\n    return 1;\n\nerror:\n    yaml_document_delete(document_to);\n    return 0;\n}\n\nint compare_nodes(yaml_document_t *document1, int index1,\n        yaml_document_t *document2, int index2)\n{\n    yaml_node_t *node1 = yaml_document_get_node(document1, index1);\n    yaml_node_t *node2 = yaml_document_get_node(document2, index2);\n    int k;\n\n    assert(node1);\n    assert(node2);\n\n    if (node1->type != node2->type)\n        return 0;\n\n    if (strcmp((char *)node1->tag, (char *)node2->tag) != 0) return 0;\n\n    switch (node1->type) {\n        case YAML_SCALAR_NODE:\n            if (node1->data.scalar.length != node2->data.scalar.length)\n                return 0;\n            if (strncmp((char *)node1->data.scalar.value, (char *)node2->data.scalar.value,\n                        node1->data.scalar.length) != 0) return 0;\n            break;\n        case YAML_SEQUENCE_NODE:\n            if ((node1->data.sequence.items.top - node1->data.sequence.items.start) !=\n                    (node2->data.sequence.items.top - node2->data.sequence.items.start))\n                return 0;\n            for (k = 0; k < (node1->data.sequence.items.top - node1->data.sequence.items.start); k ++) {\n                if (!compare_nodes(document1, node1->data.sequence.items.start[k],\n                            document2, node2->data.sequence.items.start[k])) return 0;\n            }\n            break;\n        case YAML_MAPPING_NODE:\n            if ((node1->data.mapping.pairs.top - node1->data.mapping.pairs.start) !=\n                    (node2->data.mapping.pairs.top - node2->data.mapping.pairs.start))\n                return 0;\n            for (k = 0; k < (node1->data.mapping.pairs.top - node1->data.mapping.pairs.start); k ++) {\n                if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].key,\n                            document2, node2->data.mapping.pairs.start[k].key)) return 0;\n                if (!compare_nodes(document1, node1->data.mapping.pairs.start[k].value,\n                            document2, node2->data.mapping.pairs.start[k].value)) return 0;\n            }\n            break;\n        default:\n            assert(0);\n            break;\n    }\n    return 1;\n}\n\nint compare_documents(yaml_document_t *document1, yaml_document_t *document2)\n{\n    int k;\n\n    if ((document1->version_directive && !document2->version_directive)\n            || (!document1->version_directive && document2->version_directive)\n            || (document1->version_directive && document2->version_directive\n                && (document1->version_directive->major != document2->version_directive->major\n                    || document1->version_directive->minor != document2->version_directive->minor)))\n        return 0;\n\n    if ((document1->tag_directives.end - document1->tag_directives.start) !=\n            (document2->tag_directives.end - document2->tag_directives.start))\n        return 0;\n    for (k = 0; k < (document1->tag_directives.end - document1->tag_directives.start); k ++) {\n        if ((strcmp((char *)document1->tag_directives.start[k].handle,\n                        (char *)document2->tag_directives.start[k].handle) != 0)\n                || (strcmp((char *)document1->tag_directives.start[k].prefix,\n                    (char *)document2->tag_directives.start[k].prefix) != 0))\n            return 0;\n    }\n\n    if ((document1->nodes.top - document1->nodes.start) !=\n            (document2->nodes.top - document2->nodes.start))\n        return 0;\n\n    if (document1->nodes.top != document1->nodes.start) {\n        if (!compare_nodes(document1, 1, document2, 1))\n            return 0;\n    }\n\n    return 1;\n}\n\nint print_output(char *name, unsigned char *buffer, size_t size, int count)\n{\n    FILE *file;\n    char data[BUFFER_SIZE];\n    size_t data_size = 1;\n    size_t total_size = 0;\n    if (count >= 0) {\n        printf(\"FAILED (at the document #%d)\\nSOURCE:\\n\", count+1);\n    }\n    file = fopen(name, \"rb\");\n    assert(file);\n    while (data_size > 0) {\n        data_size = fread(data, 1, BUFFER_SIZE, file);\n        assert(!ferror(file));\n        if (!data_size) break;\n        assert(fwrite(data, 1, data_size, stdout) == data_size);\n        total_size += data_size;\n        if (feof(file)) break;\n    }\n    fclose(file);\n    printf(\"#### (length: %d)\\n\", total_size);\n    printf(\"OUTPUT:\\n%s#### (length: %d)\\n\", buffer, size);\n    return 0;\n}\n\nint\nmain(int argc, char *argv[])\n{\n    int number;\n    int canonical = 0;\n    int unicode = 0;\n\n    number = 1;\n    while (number < argc) {\n        if (strcmp(argv[number], \"-c\") == 0) {\n            canonical = 1;\n        }\n        else if (strcmp(argv[number], \"-u\") == 0) {\n            unicode = 1;\n        }\n        else if (argv[number][0] == '-') {\n            printf(\"Unknown option: '%s'\\n\", argv[number]);\n            return 0;\n        }\n        if (argv[number][0] == '-') {\n            if (number < argc-1) {\n                memmove(argv+number, argv+number+1, (argc-number-1)*sizeof(char *));\n            }\n            argc --;\n        }\n        else {\n            number ++;\n        }\n    }\n\n    if (argc < 2) {\n        printf(\"Usage: %s [-c] [-u] file1.yaml ...\\n\", argv[0]);\n        return 0;\n    }\n\n    for (number = 1; number < argc; number ++)\n    {\n        FILE *file;\n        yaml_parser_t parser;\n        yaml_emitter_t emitter;\n\n        yaml_document_t document;\n        unsigned char buffer[BUFFER_SIZE];\n        size_t written = 0;\n        yaml_document_t documents[MAX_DOCUMENTS];\n        size_t document_number = 0;\n        int done = 0;\n        int count = 0;\n        int error = 0;\n        int k;\n        memset(buffer, 0, BUFFER_SIZE);\n        memset(documents, 0, MAX_DOCUMENTS*sizeof(yaml_document_t));\n\n        printf(\"[%d] Loading, dumping, and loading again '%s': \", number, argv[number]);\n        fflush(stdout);\n\n        file = fopen(argv[number], \"rb\");\n        assert(file);\n\n        assert(yaml_parser_initialize(&parser));\n        yaml_parser_set_input_file(&parser, file);\n        assert(yaml_emitter_initialize(&emitter));\n        if (canonical) {\n            yaml_emitter_set_canonical(&emitter, 1);\n        }\n        if (unicode) {\n            yaml_emitter_set_unicode(&emitter, 1);\n        }\n        yaml_emitter_set_output_string(&emitter, buffer, BUFFER_SIZE, &written);\n        yaml_emitter_open(&emitter);\n\n        while (!done)\n        {\n            if (!yaml_parser_load(&parser, &document)) {\n                error = 1;\n                break;\n            }\n\n            done = (!yaml_document_get_root_node(&document));\n            if (!done) {\n                assert(document_number < MAX_DOCUMENTS);\n                assert(copy_document(&(documents[document_number++]), &document));\n                assert(yaml_emitter_dump(&emitter, &document) || \n                        (yaml_emitter_flush(&emitter) && print_output(argv[number], buffer, written, count)));\n                count ++;\n            }\n            else {\n                yaml_document_delete(&document);\n            }\n        }\n\n        yaml_parser_delete(&parser);\n        assert(!fclose(file));\n        yaml_emitter_close(&emitter);\n        yaml_emitter_delete(&emitter);\n\n        if (!error)\n        {\n            count = done = 0;\n            assert(yaml_parser_initialize(&parser));\n            yaml_parser_set_input_string(&parser, buffer, written);\n\n            while (!done)\n            {\n                assert(yaml_parser_load(&parser, &document) || print_output(argv[number], buffer, written, count));\n                done = (!yaml_document_get_root_node(&document));\n                if (!done) {\n                    assert(compare_documents(documents+count, &document) || print_output(argv[number], buffer, written, count));\n                    count ++;\n                }\n                yaml_document_delete(&document);\n            }\n            yaml_parser_delete(&parser);\n        }\n\n        for (k = 0; k < document_number; k ++) {\n            yaml_document_delete(documents+k);\n        }\n\n        printf(\"PASSED (length: %d)\\n\", written);\n        print_output(argv[number], buffer, written, -1);\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/run-emitter.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\n#define BUFFER_SIZE 65536\n#define MAX_EVENTS  1024\n\nint copy_event(yaml_event_t *event_to, yaml_event_t *event_from)\n{\n    switch (event_from->type)\n    {\n        case YAML_STREAM_START_EVENT:\n            return yaml_stream_start_event_initialize(event_to,\n                    event_from->data.stream_start.encoding);\n\n        case YAML_STREAM_END_EVENT:\n            return yaml_stream_end_event_initialize(event_to);\n\n        case YAML_DOCUMENT_START_EVENT:\n            return yaml_document_start_event_initialize(event_to,\n                    event_from->data.document_start.version_directive,\n                    event_from->data.document_start.tag_directives.start,\n                    event_from->data.document_start.tag_directives.end,\n                    event_from->data.document_start.implicit);\n\n        case YAML_DOCUMENT_END_EVENT:\n            return yaml_document_end_event_initialize(event_to,\n                    event_from->data.document_end.implicit);\n\n        case YAML_ALIAS_EVENT:\n            return yaml_alias_event_initialize(event_to,\n                    event_from->data.alias.anchor);\n\n        case YAML_SCALAR_EVENT:\n            return yaml_scalar_event_initialize(event_to,\n                    event_from->data.scalar.anchor,\n                    event_from->data.scalar.tag,\n                    event_from->data.scalar.value,\n                    event_from->data.scalar.length,\n                    event_from->data.scalar.plain_implicit,\n                    event_from->data.scalar.quoted_implicit,\n                    event_from->data.scalar.style);\n\n        case YAML_SEQUENCE_START_EVENT:\n            return yaml_sequence_start_event_initialize(event_to,\n                    event_from->data.sequence_start.anchor,\n                    event_from->data.sequence_start.tag,\n                    event_from->data.sequence_start.implicit,\n                    event_from->data.sequence_start.style);\n\n        case YAML_SEQUENCE_END_EVENT:\n            return yaml_sequence_end_event_initialize(event_to);\n\n        case YAML_MAPPING_START_EVENT:\n            return yaml_mapping_start_event_initialize(event_to,\n                    event_from->data.mapping_start.anchor,\n                    event_from->data.mapping_start.tag,\n                    event_from->data.mapping_start.implicit,\n                    event_from->data.mapping_start.style);\n\n        case YAML_MAPPING_END_EVENT:\n            return yaml_mapping_end_event_initialize(event_to);\n\n        default:\n            assert(1);\n    }\n\n    return 0;\n}\n\nint compare_events(yaml_event_t *event1, yaml_event_t *event2)\n{\n    int k;\n\n    if (event1->type != event2->type)\n        return 0;\n\n    switch (event1->type)\n    {\n        case YAML_STREAM_START_EVENT:\n            return 1;\n            /* return (event1->data.stream_start.encoding ==\n                    event2->data.stream_start.encoding); */\n\n        case YAML_DOCUMENT_START_EVENT:\n            if ((event1->data.document_start.version_directive && !event2->data.document_start.version_directive)\n                    || (!event1->data.document_start.version_directive && event2->data.document_start.version_directive)\n                    || (event1->data.document_start.version_directive && event2->data.document_start.version_directive\n                        && (event1->data.document_start.version_directive->major != event2->data.document_start.version_directive->major\n                            || event1->data.document_start.version_directive->minor != event2->data.document_start.version_directive->minor)))\n                return 0;\n            if ((event1->data.document_start.tag_directives.end - event1->data.document_start.tag_directives.start) !=\n                    (event2->data.document_start.tag_directives.end - event2->data.document_start.tag_directives.start))\n                return 0;\n            for (k = 0; k < (event1->data.document_start.tag_directives.end - event1->data.document_start.tag_directives.start); k ++) {\n                if ((strcmp((char *)event1->data.document_start.tag_directives.start[k].handle,\n                                (char *)event2->data.document_start.tag_directives.start[k].handle) != 0)\n                        || (strcmp((char *)event1->data.document_start.tag_directives.start[k].prefix,\n                            (char *)event2->data.document_start.tag_directives.start[k].prefix) != 0))\n                    return 0;\n            }\n            /* if (event1->data.document_start.implicit != event2->data.document_start.implicit)\n                return 0; */\n            return 1;\n\n        case YAML_DOCUMENT_END_EVENT:\n            return 1;\n            /* return (event1->data.document_end.implicit ==\n                    event2->data.document_end.implicit); */\n\n        case YAML_ALIAS_EVENT:\n            return (strcmp((char *)event1->data.alias.anchor,\n                        (char *)event2->data.alias.anchor) == 0);\n\n        case YAML_SCALAR_EVENT:\n            if ((event1->data.scalar.anchor && !event2->data.scalar.anchor)\n                    || (!event1->data.scalar.anchor && event2->data.scalar.anchor)\n                    || (event1->data.scalar.anchor && event2->data.scalar.anchor\n                        && strcmp((char *)event1->data.scalar.anchor,\n                            (char *)event2->data.scalar.anchor) != 0))\n                return 0;\n            if ((event1->data.scalar.tag && !event2->data.scalar.tag\n                        && strcmp((char *)event1->data.scalar.tag, \"!\") != 0)\n                    || (!event1->data.scalar.tag && event2->data.scalar.tag\n                        && strcmp((char *)event2->data.scalar.tag, \"!\") != 0)\n                    || (event1->data.scalar.tag && event2->data.scalar.tag\n                        && strcmp((char *)event1->data.scalar.tag,\n                            (char *)event2->data.scalar.tag) != 0))\n                return 0;\n            if ((event1->data.scalar.length != event2->data.scalar.length)\n                    || memcmp(event1->data.scalar.value, event2->data.scalar.value,\n                        event1->data.scalar.length) != 0)\n                return 0;\n            if ((event1->data.scalar.plain_implicit != event2->data.scalar.plain_implicit)\n                    || (event2->data.scalar.quoted_implicit != event2->data.scalar.quoted_implicit)\n                    /* || (event2->data.scalar.style != event2->data.scalar.style) */)\n                return 0;\n            return 1;\n\n        case YAML_SEQUENCE_START_EVENT:\n            if ((event1->data.sequence_start.anchor && !event2->data.sequence_start.anchor)\n                    || (!event1->data.sequence_start.anchor && event2->data.sequence_start.anchor)\n                    || (event1->data.sequence_start.anchor && event2->data.sequence_start.anchor\n                        && strcmp((char *)event1->data.sequence_start.anchor,\n                            (char *)event2->data.sequence_start.anchor) != 0))\n                return 0;\n            if ((event1->data.sequence_start.tag && !event2->data.sequence_start.tag)\n                    || (!event1->data.sequence_start.tag && event2->data.sequence_start.tag)\n                    || (event1->data.sequence_start.tag && event2->data.sequence_start.tag\n                        && strcmp((char *)event1->data.sequence_start.tag,\n                            (char *)event2->data.sequence_start.tag) != 0))\n                return 0;\n            if ((event1->data.sequence_start.implicit != event2->data.sequence_start.implicit)\n                    /* || (event2->data.sequence_start.style != event2->data.sequence_start.style) */)\n                return 0;\n            return 1;\n\n        case YAML_MAPPING_START_EVENT:\n            if ((event1->data.mapping_start.anchor && !event2->data.mapping_start.anchor)\n                    || (!event1->data.mapping_start.anchor && event2->data.mapping_start.anchor)\n                    || (event1->data.mapping_start.anchor && event2->data.mapping_start.anchor\n                        && strcmp((char *)event1->data.mapping_start.anchor,\n                            (char *)event2->data.mapping_start.anchor) != 0))\n                return 0;\n            if ((event1->data.mapping_start.tag && !event2->data.mapping_start.tag)\n                    || (!event1->data.mapping_start.tag && event2->data.mapping_start.tag)\n                    || (event1->data.mapping_start.tag && event2->data.mapping_start.tag\n                        && strcmp((char *)event1->data.mapping_start.tag,\n                            (char *)event2->data.mapping_start.tag) != 0))\n                return 0;\n            if ((event1->data.mapping_start.implicit != event2->data.mapping_start.implicit)\n                    /* || (event2->data.mapping_start.style != event2->data.mapping_start.style) */)\n                return 0;\n            return 1;\n\n        default:\n            return 1;\n    }\n}\n\nint print_output(char *name, unsigned char *buffer, size_t size, int count)\n{\n    FILE *file;\n    char data[BUFFER_SIZE];\n    size_t data_size = 1;\n    size_t total_size = 0;\n    if (count >= 0) {\n        printf(\"FAILED (at the event #%d)\\nSOURCE:\\n\", count+1);\n    }\n    file = fopen(name, \"rb\");\n    assert(file);\n    while (data_size > 0) {\n        data_size = fread(data, 1, BUFFER_SIZE, file);\n        assert(!ferror(file));\n        if (!data_size) break;\n        assert(fwrite(data, 1, data_size, stdout) == data_size);\n        total_size += data_size;\n        if (feof(file)) break;\n    }\n    fclose(file);\n    printf(\"#### (length: %d)\\n\", total_size);\n    printf(\"OUTPUT:\\n%s#### (length: %d)\\n\", buffer, size);\n    return 0;\n}\n\nint\nmain(int argc, char *argv[])\n{\n    int number;\n    int canonical = 0;\n    int unicode = 0;\n\n    number = 1;\n    while (number < argc) {\n        if (strcmp(argv[number], \"-c\") == 0) {\n            canonical = 1;\n        }\n        else if (strcmp(argv[number], \"-u\") == 0) {\n            unicode = 1;\n        }\n        else if (argv[number][0] == '-') {\n            printf(\"Unknown option: '%s'\\n\", argv[number]);\n            return 0;\n        }\n        if (argv[number][0] == '-') {\n            if (number < argc-1) {\n                memmove(argv+number, argv+number+1, (argc-number-1)*sizeof(char *));\n            }\n            argc --;\n        }\n        else {\n            number ++;\n        }\n    }\n\n    if (argc < 2) {\n        printf(\"Usage: %s [-c] [-u] file1.yaml ...\\n\", argv[0]);\n        return 0;\n    }\n\n    for (number = 1; number < argc; number ++)\n    {\n        FILE *file;\n        yaml_parser_t parser;\n        yaml_emitter_t emitter;\n        yaml_event_t event;\n        unsigned char buffer[BUFFER_SIZE];\n        size_t written = 0;\n        yaml_event_t events[MAX_EVENTS];\n        size_t event_number = 0;\n        int done = 0;\n        int count = 0;\n        int error = 0;\n        int k;\n        memset(buffer, 0, BUFFER_SIZE);\n        memset(events, 0, MAX_EVENTS*sizeof(yaml_event_t));\n\n        printf(\"[%d] Parsing, emitting, and parsing again '%s': \", number, argv[number]);\n        fflush(stdout);\n\n        file = fopen(argv[number], \"rb\");\n        assert(file);\n\n        assert(yaml_parser_initialize(&parser));\n        yaml_parser_set_input_file(&parser, file);\n        assert(yaml_emitter_initialize(&emitter));\n        if (canonical) {\n            yaml_emitter_set_canonical(&emitter, 1);\n        }\n        if (unicode) {\n            yaml_emitter_set_unicode(&emitter, 1);\n        }\n        yaml_emitter_set_output_string(&emitter, buffer, BUFFER_SIZE, &written);\n\n        while (!done)\n        {\n            if (!yaml_parser_parse(&parser, &event)) {\n                error = 1;\n                break;\n            }\n\n            done = (event.type == YAML_STREAM_END_EVENT);\n            assert(event_number < MAX_EVENTS);\n            assert(copy_event(&(events[event_number++]), &event));\n            assert(yaml_emitter_emit(&emitter, &event) || \n                    (yaml_emitter_flush(&emitter) && print_output(argv[number], buffer, written, count)));\n            count ++;\n        }\n\n        yaml_parser_delete(&parser);\n        assert(!fclose(file));\n        yaml_emitter_delete(&emitter);\n\n        if (!error)\n        {\n            count = done = 0;\n            assert(yaml_parser_initialize(&parser));\n            yaml_parser_set_input_string(&parser, buffer, written);\n\n            while (!done)\n            {\n                assert(yaml_parser_parse(&parser, &event) || print_output(argv[number], buffer, written, count));\n                done = (event.type == YAML_STREAM_END_EVENT);\n                assert(compare_events(events+count, &event) || print_output(argv[number], buffer, written, count));\n                yaml_event_delete(&event);\n                count ++;\n            }\n            yaml_parser_delete(&parser);\n        }\n\n        for (k = 0; k < event_number; k ++) {\n            yaml_event_delete(events+k);\n        }\n\n        printf(\"PASSED (length: %d)\\n\", written);\n        print_output(argv[number], buffer, written, -1);\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/run-loader.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int number;\n\n    if (argc < 2) {\n        printf(\"Usage: %s file1.yaml ...\\n\", argv[0]);\n        return 0;\n    }\n\n    for (number = 1; number < argc; number ++)\n    {\n        FILE *file;\n        yaml_parser_t parser;\n        yaml_document_t document;\n        int done = 0;\n        int count = 0;\n        int error = 0;\n\n        printf(\"[%d] Loading '%s': \", number, argv[number]);\n        fflush(stdout);\n\n        file = fopen(argv[number], \"rb\");\n        assert(file);\n\n        assert(yaml_parser_initialize(&parser));\n\n        yaml_parser_set_input_file(&parser, file);\n\n        while (!done)\n        {\n            if (!yaml_parser_load(&parser, &document)) {\n                error = 1;\n                break;\n            }\n\n            done = (!yaml_document_get_root_node(&document));\n\n            yaml_document_delete(&document);\n\n            if (!done) count ++;\n        }\n\n        yaml_parser_delete(&parser);\n\n        assert(!fclose(file));\n\n        printf(\"%s (%d documents)\\n\", (error ? \"FAILURE\" : \"SUCCESS\"), count);\n    }\n\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/run-parser.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int number;\n\n    if (argc < 2) {\n        printf(\"Usage: %s file1.yaml ...\\n\", argv[0]);\n        return 0;\n    }\n\n    for (number = 1; number < argc; number ++)\n    {\n        FILE *file;\n        yaml_parser_t parser;\n        yaml_event_t event;\n        int done = 0;\n        int count = 0;\n        int error = 0;\n\n        printf(\"[%d] Parsing '%s': \", number, argv[number]);\n        fflush(stdout);\n\n        file = fopen(argv[number], \"rb\");\n        assert(file);\n\n        assert(yaml_parser_initialize(&parser));\n\n        yaml_parser_set_input_file(&parser, file);\n\n        while (!done)\n        {\n            if (!yaml_parser_parse(&parser, &event)) {\n                error = 1;\n                break;\n            }\n\n            done = (event.type == YAML_STREAM_END_EVENT);\n\n            yaml_event_delete(&event);\n\n            count ++;\n        }\n\n        yaml_parser_delete(&parser);\n\n        assert(!fclose(file));\n\n        printf(\"%s (%d events)\\n\", (error ? \"FAILURE\" : \"SUCCESS\"), count);\n    }\n\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/run-scanner.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\nint\nmain(int argc, char *argv[])\n{\n    int number;\n\n    if (argc < 2) {\n        printf(\"Usage: %s file1.yaml ...\\n\", argv[0]);\n        return 0;\n    }\n\n    for (number = 1; number < argc; number ++)\n    {\n        FILE *file;\n        yaml_parser_t parser;\n        yaml_token_t token;\n        int done = 0;\n        int count = 0;\n        int error = 0;\n\n        printf(\"[%d] Scanning '%s': \", number, argv[number]);\n        fflush(stdout);\n\n        file = fopen(argv[number], \"rb\");\n        assert(file);\n\n        assert(yaml_parser_initialize(&parser));\n\n        yaml_parser_set_input_file(&parser, file);\n\n        while (!done)\n        {\n            if (!yaml_parser_scan(&parser, &token)) {\n                error = 1;\n                break;\n            }\n\n            done = (token.type == YAML_STREAM_END_TOKEN);\n\n            yaml_token_delete(&token);\n\n            count ++;\n        }\n\n        yaml_parser_delete(&parser);\n\n        assert(!fclose(file));\n\n        printf(\"%s (%d tokens)\\n\", (error ? \"FAILURE\" : \"SUCCESS\"), count);\n    }\n\n    return 0;\n}\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/test-reader.c",
    "content": "#include <yaml.h>\n\nYAML_DECLARE(int)\nyaml_parser_update_buffer(yaml_parser_t *parser, size_t length);\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\n/*\n * Test cases are stolen from\n * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt\n */\n\ntypedef struct {\n    char *title;\n    char *test;\n    int result;\n} test_case;\n\ntest_case utf8_sequences[] = {\n    /* {\"title\", \"test 1|test 2|...|test N!\", (0 or 1)}, */\n\n    {\"a simple test\", \"'test' is '\\xd0\\xbf\\xd1\\x80\\xd0\\xbe\\xd0\\xb2\\xd0\\xb5\\xd1\\x80\\xd0\\xba\\xd0\\xb0' in Russian!\", 1},\n    {\"an empty line\", \"!\", 1},\n\n    {\"u-0 is a control character\", \"\\x00!\", 0},\n    {\"u-80 is a control character\", \"\\xc2\\x80!\", 0},\n    {\"u-800 is valid\", \"\\xe0\\xa0\\x80!\", 1},\n    {\"u-10000 is valid\", \"\\xf0\\x90\\x80\\x80!\", 1},\n    {\"5 bytes sequences are not allowed\", \"\\xf8\\x88\\x80\\x80\\x80!\", 0},\n    {\"6 bytes sequences are not allowed\", \"\\xfc\\x84\\x80\\x80\\x80\\x80!\", 0},\n\n    {\"u-7f is a control character\", \"\\x7f!\", 0},\n    {\"u-7FF is valid\", \"\\xdf\\xbf!\", 1},\n    {\"u-FFFF is a control character\", \"\\xef\\xbf\\xbf!\", 0},\n    {\"u-1FFFFF is too large\", \"\\xf7\\xbf\\xbf\\xbf!\", 0},\n    {\"u-3FFFFFF is 5 bytes\", \"\\xfb\\xbf\\xbf\\xbf\\xbf!\", 0},\n    {\"u-7FFFFFFF is 6 bytes\", \"\\xfd\\xbf\\xbf\\xbf\\xbf\\xbf!\", 0},\n\n    {\"u-D7FF\", \"\\xed\\x9f\\xbf!\", 1},\n    {\"u-E000\", \"\\xee\\x80\\x80!\", 1},\n    {\"u-FFFD\", \"\\xef\\xbf\\xbd!\", 1},\n    {\"u-10FFFF\", \"\\xf4\\x8f\\xbf\\xbf!\", 1},\n    {\"u-110000\", \"\\xf4\\x90\\x80\\x80!\", 0},\n\n    {\"first continuation byte\", \"\\x80!\", 0},\n    {\"last continuation byte\", \"\\xbf!\", 0},\n\n    {\"2 continuation bytes\", \"\\x80\\xbf!\", 0},\n    {\"3 continuation bytes\", \"\\x80\\xbf\\x80!\", 0},\n    {\"4 continuation bytes\", \"\\x80\\xbf\\x80\\xbf!\", 0},\n    {\"5 continuation bytes\", \"\\x80\\xbf\\x80\\xbf\\x80!\", 0},\n    {\"6 continuation bytes\", \"\\x80\\xbf\\x80\\xbf\\x80\\xbf!\", 0},\n    {\"7 continuation bytes\", \"\\x80\\xbf\\x80\\xbf\\x80\\xbf\\x80!\", 0},\n\n    {\"sequence of all 64 possible continuation bytes\",\n     \"\\x80|\\x81|\\x82|\\x83|\\x84|\\x85|\\x86|\\x87|\\x88|\\x89|\\x8a|\\x8b|\\x8c|\\x8d|\\x8e|\\x8f|\"\n     \"\\x90|\\x91|\\x92|\\x93|\\x94|\\x95|\\x96|\\x97|\\x98|\\x99|\\x9a|\\x9b|\\x9c|\\x9d|\\x9e|\\x9f|\"\n     \"\\xa0|\\xa1|\\xa2|\\xa3|\\xa4|\\xa5|\\xa6|\\xa7|\\xa8|\\xa9|\\xaa|\\xab|\\xac|\\xad|\\xae|\\xaf|\"\n     \"\\xb0|\\xb1|\\xb2|\\xb3|\\xb4|\\xb5|\\xb6|\\xb7|\\xb8|\\xb9|\\xba|\\xbb|\\xbc|\\xbd|\\xbe|\\xbf!\", 0},\n    {\"32 first bytes of 2-byte sequences {0xc0-0xdf}\",\n     \"\\xc0 |\\xc1 |\\xc2 |\\xc3 |\\xc4 |\\xc5 |\\xc6 |\\xc7 |\\xc8 |\\xc9 |\\xca |\\xcb |\\xcc |\\xcd |\\xce |\\xcf |\"\n     \"\\xd0 |\\xd1 |\\xd2 |\\xd3 |\\xd4 |\\xd5 |\\xd6 |\\xd7 |\\xd8 |\\xd9 |\\xda |\\xdb |\\xdc |\\xdd |\\xde |\\xdf !\", 0},\n    {\"16 first bytes of 3-byte sequences {0xe0-0xef}\",\n     \"\\xe0 |\\xe1 |\\xe2 |\\xe3 |\\xe4 |\\xe5 |\\xe6 |\\xe7 |\\xe8 |\\xe9 |\\xea |\\xeb |\\xec |\\xed |\\xee |\\xef !\", 0},\n    {\"8 first bytes of 4-byte sequences {0xf0-0xf7}\", \"\\xf0 |\\xf1 |\\xf2 |\\xf3 |\\xf4 |\\xf5 |\\xf6 |\\xf7 !\", 0},\n    {\"4 first bytes of 5-byte sequences {0xf8-0xfb}\", \"\\xf8 |\\xf9 |\\xfa |\\xfb !\", 0},\n    {\"2 first bytes of 6-byte sequences {0xfc-0xfd}\", \"\\xfc |\\xfd !\", 0},\n\n    {\"sequences with last byte missing {u-0}\",\n     \"\\xc0|\\xe0\\x80|\\xf0\\x80\\x80|\\xf8\\x80\\x80\\x80|\\xfc\\x80\\x80\\x80\\x80!\", 0},\n    {\"sequences with last byte missing {u-...FF}\",\n     \"\\xdf|\\xef\\xbf|\\xf7\\xbf\\xbf|\\xfb\\xbf\\xbf\\xbf|\\xfd\\xbf\\xbf\\xbf\\xbf!\", 0},\n\n    {\"impossible bytes\", \"\\xfe|\\xff|\\xfe\\xfe\\xff\\xff!\", 0},\n\n    {\"overlong sequences {u-2f}\",\n     \"\\xc0\\xaf|\\xe0\\x80\\xaf|\\xf0\\x80\\x80\\xaf|\\xf8\\x80\\x80\\x80\\xaf|\\xfc\\x80\\x80\\x80\\x80\\xaf!\", 0},\n\n    {\"maximum overlong sequences\",\n     \"\\xc1\\xbf|\\xe0\\x9f\\xbf|\\xf0\\x8f\\xbf\\xbf|\\xf8\\x87\\xbf\\xbf\\xbf|\\xfc\\x83\\xbf\\xbf\\xbf\\xbf!\", 0},\n\n    {\"overlong representation of the NUL character\",\n     \"\\xc0\\x80|\\xe0\\x80\\x80|\\xf0\\x80\\x80\\x80|\\xf8\\x80\\x80\\x80\\x80|\\xfc\\x80\\x80\\x80\\x80\\x80!\", 0},\n\n    {\"single UTF-16 surrogates\",\n     \"\\xed\\xa0\\x80|\\xed\\xad\\xbf|\\xed\\xae\\x80|\\xed\\xaf\\xbf|\\xed\\xb0\\x80|\\xed\\xbe\\x80|\\xed\\xbf\\xbf!\", 0},\n\n    {\"paired UTF-16 surrogates\",\n     \"\\xed\\xa0\\x80\\xed\\xb0\\x80|\\xed\\xa0\\x80\\xed\\xbf\\xbf|\\xed\\xad\\xbf\\xed\\xb0\\x80|\"\n     \"\\xed\\xad\\xbf\\xed\\xbf\\xbf|\\xed\\xae\\x80\\xed\\xb0\\x80|\\xed\\xae\\x80\\xed\\xbf\\xbf|\"\n     \"\\xed\\xaf\\xbf\\xed\\xb0\\x80|\\xed\\xaf\\xbf\\xed\\xbf\\xbf!\", 0},\n\n    {\"other illegal code positions\", \"\\xef\\xbf\\xbe|\\xef\\xbf\\xbf!\", 0},\n\n    {NULL, NULL, 0}\n};\n\ntest_case boms[] = {\n    \n    /* {\"title\", \"test!\", lenth}, */\n    \n    {\"no bom (utf-8)\", \"Hi is \\xd0\\x9f\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xb5\\xd1\\x82!\", 13},\n    {\"bom (utf-8)\", \"\\xef\\xbb\\xbfHi is \\xd0\\x9f\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xb5\\xd1\\x82!\", 13},\n    {\"bom (utf-16-le)\", \"\\xff\\xfeH\\x00i\\x00 \\x00i\\x00s\\x00 \\x00\\x1f\\x04@\\x04\"\"8\\x04\"\"2\\x04\"\"5\\x04\"\"B\\x04!\", 13},\n    {\"bom (utf-16-be)\", \"\\xfe\\xff\\x00H\\x00i\\x00 \\x00i\\x00s\\x00 \\x04\\x1f\\x04@\\x04\"\"8\\x04\"\"2\\x04\"\"5\\x04\"\"B!\", 13},\n    {NULL, NULL, 0}\n};\n\nchar *bom_original = \"Hi is \\xd0\\x9f\\xd1\\x80\\xd0\\xb8\\xd0\\xb2\\xd0\\xb5\\xd1\\x82\";\n\nint check_utf8_sequences(void)\n{\n    yaml_parser_t parser;\n    int failed = 0;\n    int k;\n    printf(\"checking utf-8 sequences...\\n\");\n    for (k = 0; utf8_sequences[k].test; k++) {\n        char *title = utf8_sequences[k].title;\n        int check = utf8_sequences[k].result;\n        int result;\n        char *start = utf8_sequences[k].test;\n        char *end = start;\n        printf(\"\\t%s:\\n\", title);\n        while(1) {\n            while (*end != '|' && *end != '!') end++;\n            yaml_parser_initialize(&parser);\n            yaml_parser_set_input_string(&parser, (unsigned char *)start, end-start);\n            result = yaml_parser_update_buffer(&parser, end-start);\n            if (result != check) {\n                printf(\"\\t\\t- \");\n                failed ++;\n            }\n            else {\n                printf(\"\\t\\t+ \");\n            }\n            if (!parser.error) {\n                printf(\"(no error)\\n\");\n            }\n            else if (parser.error == YAML_READER_ERROR) {\n                if (parser.problem_value != -1) {\n                    printf(\"(reader error: %s: #%X at %d)\\n\",\n                            parser.problem, parser.problem_value, parser.problem_offset);\n                }\n                else {\n                    printf(\"(reader error: %s at %d)\\n\",\n                            parser.problem, parser.problem_offset);\n                }\n            }\n            if (*end == '!') break;\n            start = ++end;\n            yaml_parser_delete(&parser);\n        };\n        printf(\"\\n\");\n    }\n    printf(\"checking utf-8 sequences: %d fail(s)\\n\", failed);\n    return failed;\n}\n\nint check_boms(void)\n{\n    yaml_parser_t parser;\n    int failed = 0;\n    int k;\n    printf(\"checking boms...\\n\");\n    for (k = 0; boms[k].test; k++) {\n        char *title = boms[k].title;\n        int check = boms[k].result;\n        int result;\n        char *start = boms[k].test;\n        char *end = start;\n        while (*end != '!') end++;\n        printf(\"\\t%s: \", title);\n        yaml_parser_initialize(&parser);\n        yaml_parser_set_input_string(&parser, (unsigned char *)start, end-start);\n        result = yaml_parser_update_buffer(&parser, end-start);\n        if (!result) {\n            printf(\"- (reader error: %s at %d)\\n\", parser.problem, parser.problem_offset);\n            failed++;\n        }\n        else {\n            if (parser.unread != check) {\n                printf(\"- (length=%d while expected length=%d)\\n\", parser.unread, check);\n                failed++;\n            }\n            else if (memcmp(parser.buffer.start, bom_original, check) != 0) {\n                printf(\"- (value '%s' does not equal to the original value '%s')\\n\", parser.buffer.start, bom_original);\n                failed++;\n            }\n            else {\n                printf(\"+\\n\");\n            }\n        }\n        yaml_parser_delete(&parser);\n    }\n    printf(\"checking boms: %d fail(s)\\n\", failed);\n    return failed;\n}\n\n#define LONG    100000\n\nint check_long_utf8(void)\n{\n    yaml_parser_t parser;\n    int k = 0;\n    int j;\n    int failed = 0;\n    unsigned char ch0, ch1;\n    unsigned char *buffer = malloc(3+LONG*2);\n    assert(buffer);\n    printf(\"checking a long utf8 sequence...\\n\");\n    buffer[k++] = '\\xef';\n    buffer[k++] = '\\xbb';\n    buffer[k++] = '\\xbf';\n    for (j = 0; j < LONG; j ++) {\n        if (j % 2) {\n            buffer[k++] = '\\xd0';\n            buffer[k++] = '\\x90';\n        }\n        else {\n            buffer[k++] = '\\xd0';\n            buffer[k++] = '\\xaf';\n        }\n    }\n    yaml_parser_initialize(&parser);\n    yaml_parser_set_input_string(&parser, buffer, 3+LONG*2);\n    for (k = 0; k < LONG; k++) {\n        if (!parser.unread) {\n            if (!yaml_parser_update_buffer(&parser, 1)) {\n                printf(\"\\treader error: %s at %d\\n\", parser.problem, parser.problem_offset);\n                failed = 1;\n                break;\n            }\n        }\n        if (!parser.unread) {\n            printf(\"\\tnot enough characters at %d\\n\", k);\n            failed = 1;\n            break;\n        }\n        if (k % 2) {\n            ch0 = '\\xd0';\n            ch1 = '\\x90';\n        }\n        else {\n            ch0 = '\\xd0';\n            ch1 = '\\xaf';\n        }\n        if (parser.buffer.pointer[0] != ch0 || parser.buffer.pointer[1] != ch1) {\n            printf(\"\\tincorrect UTF-8 sequence: %X %X instead of %X %X\\n\",\n                    (int)parser.buffer.pointer[0], (int)parser.buffer.pointer[1],\n                    (int)ch0, (int)ch1);\n            failed = 1;\n            break;\n        }\n        parser.buffer.pointer += 2;\n        parser.unread -= 1;\n    }\n    if (!failed) {\n        if (!yaml_parser_update_buffer(&parser, 1)) {\n            printf(\"\\treader error: %s at %d\\n\", parser.problem, parser.problem_offset);\n            failed = 1;\n        }\n        else if (parser.buffer.pointer[0] != '\\0') {\n            printf(\"\\texpected NUL, found %X (eof=%d, unread=%d)\\n\", (int)parser.buffer.pointer[0], parser.eof, parser.unread);\n            failed = 1;\n        }\n    }\n    yaml_parser_delete(&parser);\n    free(buffer);\n    printf(\"checking a long utf8 sequence: %d fail(s)\\n\", failed);\n    return failed;\n}\n\nint check_long_utf16(void)\n{\n    yaml_parser_t parser;\n    int k = 0;\n    int j;\n    int failed = 0;\n    unsigned char ch0, ch1;\n    unsigned char *buffer = malloc(2+LONG*2);\n    assert(buffer);\n    printf(\"checking a long utf16 sequence...\\n\");\n    buffer[k++] = '\\xff';\n    buffer[k++] = '\\xfe';\n    for (j = 0; j < LONG; j ++) {\n        if (j % 2) {\n            buffer[k++] = '\\x10';\n            buffer[k++] = '\\x04';\n        }\n        else {\n            buffer[k++] = '/';\n            buffer[k++] = '\\x04';\n        }\n    }\n    yaml_parser_initialize(&parser);\n    yaml_parser_set_input_string(&parser, buffer, 2+LONG*2);\n    for (k = 0; k < LONG; k++) {\n        if (!parser.unread) {\n            if (!yaml_parser_update_buffer(&parser, 1)) {\n                printf(\"\\treader error: %s at %d\\n\", parser.problem, parser.problem_offset);\n                failed = 1;\n                break;\n            }\n        }\n        if (!parser.unread) {\n            printf(\"\\tnot enough characters at %d\\n\", k);\n            failed = 1;\n            break;\n        }\n        if (k % 2) {\n            ch0 = '\\xd0';\n            ch1 = '\\x90';\n        }\n        else {\n            ch0 = '\\xd0';\n            ch1 = '\\xaf';\n        }\n        if (parser.buffer.pointer[0] != ch0 || parser.buffer.pointer[1] != ch1) {\n            printf(\"\\tincorrect UTF-8 sequence: %X %X instead of %X %X\\n\",\n                    (int)parser.buffer.pointer[0], (int)parser.buffer.pointer[1],\n                    (int)ch0, (int)ch1);\n            failed = 1;\n            break;\n        }\n        parser.buffer.pointer += 2;\n        parser.unread -= 1;\n    }\n    if (!failed) {\n        if (!yaml_parser_update_buffer(&parser, 1)) {\n            printf(\"\\treader error: %s at %d\\n\", parser.problem, parser.problem_offset);\n            failed = 1;\n        }\n        else if (parser.buffer.pointer[0] != '\\0') {\n            printf(\"\\texpected NUL, found %X (eof=%d, unread=%d)\\n\", (int)parser.buffer.pointer[0], parser.eof, parser.unread);\n            failed = 1;\n        }\n    }\n    yaml_parser_delete(&parser);\n    free(buffer);\n    printf(\"checking a long utf16 sequence: %d fail(s)\\n\", failed);\n    return failed;\n}\n\nint\nmain(void)\n{\n    return check_utf8_sequences() + check_boms() + check_long_utf8() + check_long_utf16();\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/tests/test-version.c",
    "content": "#include <yaml.h>\n\n#include <stdlib.h>\n#include <stdio.h>\n\n#ifdef NDEBUG\n#undef NDEBUG\n#endif\n#include <assert.h>\n\nint\nmain(void)\n{\n    int major = -1;\n    int minor = -1;\n    int patch = -1;\n    char buf[64];\n\n    yaml_get_version(&major, &minor, &patch);\n    sprintf(buf, \"%d.%d.%d\", major, minor, patch);\n    assert(strcmp(buf, yaml_get_version_string()) == 0);\n\n    /* Print structure sizes. */\n    printf(\"sizeof(token) = %d\\n\", sizeof(yaml_token_t));\n    printf(\"sizeof(event) = %d\\n\", sizeof(yaml_event_t));\n    printf(\"sizeof(parser) = %d\\n\", sizeof(yaml_parser_t));\n\n    return 0;\n}\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/Makefile.am",
    "content": "\nVC6_FILES =\tvc6/libyaml.dsw vc6/yaml.dsp vc6/yamldll.dsp\t\\\n\t\t\tvc6/test_version.dsp vc6/test_reader.dsp\t\\\n\t\t\tvc6/run_scanner.dsp vc6/run_parser.dsp\t\\\n\t\t\tvc6/run_loader.dsp vc6/run_emitter.dsp vc6/run_dumper.dsp\t\\\n\t\t\tvc6/example_reformatter.dsp vc6/example_reformatter_alt.dsp\t\\\n\t\t\tvc6/example_deconstructor.dsp vc6/example_deconstructor_alt.dsp\n\nVS2003_FILES = vs2003/libyaml.sln vs2003/yaml.vcproj vs2003/yamldll.vcproj\t\\\n\t\t\t   vs2003/test_version.vcproj vs2003/test_reader.vcproj\t\\\n\t\t\t   vs2003/run_scanner.vcproj vs2003/run_parser.vcproj\t\\\n\t\t\t   vs2003/run_loader.vcproj vs2003/run_emitter.vcproj vs2003/run_dumper.vcproj\t\\\n\t\t\t   vs2003/example_reformatter.vcproj vs2003/example_reformatter_alt.vcproj\t\\\n\t\t\t   vs2003/example_deconstructor.vcproj vs2003/example_deconstructor_alt.vcproj\n\nVS2008_FILES = vs2008/libyaml.sln vs2008/yaml.vcproj vs2008/yamldll.vcproj\t\\\n\t\t\t   vs2008/test_version.vcproj vs2008/test_reader.vcproj\t\\\n\t\t\t   vs2008/run_scanner.vcproj vs2008/run_parser.vcproj\t\\\n\t\t\t   vs2008/run_loader.vcproj vs2008/run_emitter.vcproj vs2008/run_dumper.vcproj\t\\\n\t\t\t   vs2008/example_reformatter.vcproj vs2008/example_reformatter_alt.vcproj\t\\\n\t\t\t   vs2008/example_deconstructor.vcproj vs2008/example_deconstructor_alt.vcproj\n\nEXTRA_DIST = config.h $(VC6_FILES) $(VS2003_FILES) $(VS2008_FILES)\n\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/Makefile.in",
    "content": "# Makefile.in generated by automake 1.11.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,\n# 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@\nVPATH = @srcdir@\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = win32\nDIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nSOURCES =\nDIST_SOURCES =\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\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@\nDOXYGEN = @DOXYGEN@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAKEINFO = @MAKEINFO@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nYAML_LT_AGE = @YAML_LT_AGE@\nYAML_LT_CURRENT = @YAML_LT_CURRENT@\nYAML_LT_RELEASE = @YAML_LT_RELEASE@\nYAML_LT_REVISION = @YAML_LT_REVISION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nlt_ECHO = @lt_ECHO@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nVC6_FILES = vc6/libyaml.dsw vc6/yaml.dsp vc6/yamldll.dsp\t\\\n\t\t\tvc6/test_version.dsp vc6/test_reader.dsp\t\\\n\t\t\tvc6/run_scanner.dsp vc6/run_parser.dsp\t\\\n\t\t\tvc6/run_loader.dsp vc6/run_emitter.dsp vc6/run_dumper.dsp\t\\\n\t\t\tvc6/example_reformatter.dsp vc6/example_reformatter_alt.dsp\t\\\n\t\t\tvc6/example_deconstructor.dsp vc6/example_deconstructor_alt.dsp\n\nVS2003_FILES = vs2003/libyaml.sln vs2003/yaml.vcproj vs2003/yamldll.vcproj\t\\\n\t\t\t   vs2003/test_version.vcproj vs2003/test_reader.vcproj\t\\\n\t\t\t   vs2003/run_scanner.vcproj vs2003/run_parser.vcproj\t\\\n\t\t\t   vs2003/run_loader.vcproj vs2003/run_emitter.vcproj vs2003/run_dumper.vcproj\t\\\n\t\t\t   vs2003/example_reformatter.vcproj vs2003/example_reformatter_alt.vcproj\t\\\n\t\t\t   vs2003/example_deconstructor.vcproj vs2003/example_deconstructor_alt.vcproj\n\nVS2008_FILES = vs2008/libyaml.sln vs2008/yaml.vcproj vs2008/yamldll.vcproj\t\\\n\t\t\t   vs2008/test_version.vcproj vs2008/test_reader.vcproj\t\\\n\t\t\t   vs2008/run_scanner.vcproj vs2008/run_parser.vcproj\t\\\n\t\t\t   vs2008/run_loader.vcproj vs2008/run_emitter.vcproj vs2008/run_dumper.vcproj\t\\\n\t\t\t   vs2008/example_reformatter.vcproj vs2008/example_reformatter_alt.vcproj\t\\\n\t\t\t   vs2008/example_deconstructor.vcproj vs2008/example_deconstructor_alt.vcproj\n\nEXTRA_DIST = config.h $(VC6_FILES) $(VS2003_FILES) $(VS2008_FILES)\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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign win32/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign win32/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$(am__aclocal_m4_deps):\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool 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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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 mostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: all all-am check check-am clean clean-generic clean-libtool \\\n\tdistclean distclean-generic distclean-libtool distdir dvi \\\n\tdvi-am html html-am info info-am install install-am \\\n\tinstall-data install-data-am install-dvi install-dvi-am \\\n\tinstall-exec install-exec-am install-html install-html-am \\\n\tinstall-info install-info-am install-man install-pdf \\\n\tinstall-pdf-am install-ps install-ps-am install-strip \\\n\tinstallcheck installcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-generic \\\n\tmostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am\n\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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/config.h",
    "content": "#define YAML_VERSION_MAJOR 0\n#define YAML_VERSION_MINOR 1\n#define YAML_VERSION_PATCH 4\n#define YAML_VERSION_STRING \"0.1.4\"\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/example_deconstructor.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"example_deconstructor\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=example_deconstructor - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_deconstructor.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_deconstructor.mak\" CFG=\"example_deconstructor - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"example_deconstructor - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"example_deconstructor - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"example_deconstructor - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"example_deconstructor - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"example_deconstructor - Win32 Release\"\r\n# Name \"example_deconstructor - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\example-deconstructor.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/example_deconstructor_alt.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"example_deconstructor_alt\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=example_deconstructor_alt - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_deconstructor_alt.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_deconstructor_alt.mak\" CFG=\"example_deconstructor_alt - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"example_deconstructor_alt - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"example_deconstructor_alt - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"example_deconstructor_alt - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"example_deconstructor_alt - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"example_deconstructor_alt - Win32 Release\"\r\n# Name \"example_deconstructor_alt - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\example-deconstructor-alt.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/example_reformatter.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"example_reformatter\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=example_reformatter - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_reformatter.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_reformatter.mak\" CFG=\"example_reformatter - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"example_reformatter - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"example_reformatter - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"example_reformatter - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"example_reformatter - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"example_reformatter - Win32 Release\"\r\n# Name \"example_reformatter - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\example-reformatter.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/example_reformatter_alt.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"example_reformatter_alt\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=example_reformatter_alt - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_reformatter_alt.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"example_reformatter_alt.mak\" CFG=\"example_reformatter_alt - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"example_reformatter_alt - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"example_reformatter_alt - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"example_reformatter_alt - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"example_reformatter_alt - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"example_reformatter_alt - Win32 Release\"\r\n# Name \"example_reformatter_alt - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\example-reformatter-alt.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/libyaml.dsw",
    "content": "Microsoft Developer Studio Workspace File, Format Version 6.00\r\n# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!\r\n\r\n###############################################################################\r\n\r\nProject: \"example_deconstructor\"=\".\\example_deconstructor.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"example_deconstructor_alt\"=\".\\example_deconstructor_alt.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"example_reformatter\"=\".\\example_reformatter.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"example_reformatter_alt\"=\".\\example_reformatter_alt.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"run_dumper\"=\".\\run_dumper.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"run_emitter\"=\".\\run_emitter.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"run_loader\"=\".\\run_loader.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"run_parser\"=\".\\run_parser.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"run_scanner\"=\".\\run_scanner.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"test_reader\"=\".\\test_reader.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"test_version\"=\".\\test_version.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n    Begin Project Dependency\r\n    Project_Dep_Name yaml\r\n    End Project Dependency\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"yaml\"=\".\\yaml.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\nProject: \"yamldll\"=\".\\yamldll.dsp\" - Package Owner=<4>\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<4>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\nGlobal:\r\n\r\nPackage=<5>\r\n{{{\r\n}}}\r\n\r\nPackage=<3>\r\n{{{\r\n}}}\r\n\r\n###############################################################################\r\n\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/run_dumper.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"run_dumper\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=run_dumper - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_dumper.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_dumper.mak\" CFG=\"run_dumper - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"run_dumper - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"run_dumper - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"run_dumper - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"run_dumper - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"run_dumper - Win32 Release\"\r\n# Name \"run_dumper - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\run-dumper.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/run_emitter.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"run_emitter\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=run_emitter - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_emitter.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_emitter.mak\" CFG=\"run_emitter - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"run_emitter - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"run_emitter - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"run_emitter - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"run_emitter - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"run_emitter - Win32 Release\"\r\n# Name \"run_emitter - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\run-emitter.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/run_loader.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"run_loader\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=run_loader - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_loader.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_loader.mak\" CFG=\"run_loader - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"run_loader - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"run_loader - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"run_loader - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"run_loader - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"run_loader - Win32 Release\"\r\n# Name \"run_loader - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\run-loader.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/run_parser.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"run_parser\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=run_parser - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_parser.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_parser.mak\" CFG=\"run_parser - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"run_parser - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"run_parser - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"run_parser - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"run_parser - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"run_parser - Win32 Release\"\r\n# Name \"run_parser - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\run-parser.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/run_scanner.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"run_scanner\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=run_scanner - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_scanner.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"run_scanner.mak\" CFG=\"run_scanner - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"run_scanner - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"run_scanner - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"run_scanner - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"run_scanner - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"run_scanner - Win32 Release\"\r\n# Name \"run_scanner - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\run-scanner.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/test_reader.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"test_reader\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=test_reader - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"test_reader.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"test_reader.mak\" CFG=\"test_reader - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"test_reader - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"test_reader - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"test_reader - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"test_reader - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"test_reader - Win32 Release\"\r\n# Name \"test_reader - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\test-reader.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/test_version.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"test_version\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Console Application\" 0x0103\r\n\r\nCFG=test_version - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"test_version.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"test_version.mak\" CFG=\"test_version - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"test_version - Win32 Release\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \"test_version - Win32 Debug\" (based on \"Win32 (x86) Console Application\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"test_version - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/bin\"\r\n# PROP Intermediate_Dir \"Build/Release/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"../../include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r\n\r\n!ELSEIF  \"$(CFG)\" == \"test_version - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/bin\"\r\n# PROP Intermediate_Dir \"Build/Debug/bin\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"../../include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"test_version - Win32 Release\"\r\n# Name \"test_version - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=\"..\\..\\tests\\test-version.c\"\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/yaml.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"yaml\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Static Library\" 0x0104\r\n\r\nCFG=yaml - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"yaml.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"yaml.mak\" CFG=\"yaml - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"yaml - Win32 Release\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \"yaml - Win32 Debug\" (based on \"Win32 (x86) Static Library\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"yaml - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/lib\"\r\n# PROP Intermediate_Dir \"Build/Release/lib\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"..\" /I \"..\\..\\include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_MBCS\" /D \"_LIB\" /D \"HAVE_CONFIG_H\" /D \"YAML_DECLARE_STATIC\" /YX /FD /c\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo\r\n\r\n!ELSEIF  \"$(CFG)\" == \"yaml - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/lib\"\r\n# PROP Intermediate_Dir \"Build/Debug/lib\"\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_MBCS\" /D \"_LIB\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"..\" /I \"..\\..\\include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_MBCS\" /D \"_LIB\" /D \"HAVE_CONFIG_H\" /D \"YAML_DECLARE_STATIC\" /YX /FD /GZ /c\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLIB32=link.exe -lib\r\n# ADD BASE LIB32 /nologo\r\n# ADD LIB32 /nologo\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"yaml - Win32 Release\"\r\n# Name \"yaml - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\api.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\dumper.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\emitter.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\loader.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\parser.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\reader.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\scanner.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\writer.c\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\config.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\include\\yaml.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\yaml_private.h\r\n# End Source File\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vc6/yamldll.dsp",
    "content": "# Microsoft Developer Studio Project File - Name=\"yamldll\" - Package Owner=<4>\r\n# Microsoft Developer Studio Generated Build File, Format Version 6.00\r\n# ** DO NOT EDIT **\r\n\r\n# TARGTYPE \"Win32 (x86) Dynamic-Link Library\" 0x0102\r\n\r\nCFG=yamldll - Win32 Debug\r\n!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r\n!MESSAGE use the Export Makefile command and run\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"yamldll.mak\".\r\n!MESSAGE \r\n!MESSAGE You can specify a configuration when running NMAKE\r\n!MESSAGE by defining the macro CFG on the command line. For example:\r\n!MESSAGE \r\n!MESSAGE NMAKE /f \"yamldll.mak\" CFG=\"yamldll - Win32 Debug\"\r\n!MESSAGE \r\n!MESSAGE Possible choices for configuration are:\r\n!MESSAGE \r\n!MESSAGE \"yamldll - Win32 Release\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n!MESSAGE \"yamldll - Win32 Debug\" (based on \"Win32 (x86) Dynamic-Link Library\")\r\n!MESSAGE \r\n\r\n# Begin Project\r\n# PROP AllowPerConfigDependencies 0\r\n# PROP Scc_ProjName \"\"\r\n# PROP Scc_LocalPath \"\"\r\nCPP=cl.exe\r\nMTL=midl.exe\r\nRSC=rc.exe\r\n\r\n!IF  \"$(CFG)\" == \"yamldll - Win32 Release\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 0\r\n# PROP BASE Output_Dir \"Release\"\r\n# PROP BASE Intermediate_Dir \"Release\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 0\r\n# PROP Output_Dir \"Output/Release/lib/DLL\"\r\n# PROP Intermediate_Dir \"Build/Release/lib/DLL\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D \"WIN32\" /D \"NDEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_USRDLL\" /D \"YAMLDLL_EXPORTS\" /YX /FD /c\r\n# ADD CPP /nologo /MD /W3 /GX /O2 /I \"..\" /I \"..\\..\\include\" /D \"NDEBUG\" /D \"WIN32\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_USRDLL\" /D \"HAVE_CONFIG_H\" /D \"YAML_DECLARE_EXPORT\" /YX /FD /c\r\n# ADD BASE MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD MTL /nologo /D \"NDEBUG\" /mktyplib203 /win32\r\n# ADD BASE RSC /l 0x409 /d \"NDEBUG\"\r\n# ADD RSC /l 0x409 /d \"NDEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:\"Output/Release/lib/DLL/yaml.dll\"\r\n\r\n!ELSEIF  \"$(CFG)\" == \"yamldll - Win32 Debug\"\r\n\r\n# PROP BASE Use_MFC 0\r\n# PROP BASE Use_Debug_Libraries 1\r\n# PROP BASE Output_Dir \"Debug\"\r\n# PROP BASE Intermediate_Dir \"Debug\"\r\n# PROP BASE Target_Dir \"\"\r\n# PROP Use_MFC 0\r\n# PROP Use_Debug_Libraries 1\r\n# PROP Output_Dir \"Output/Debug/lib/DLL\"\r\n# PROP Intermediate_Dir \"Build/Debug/lib/DLL\"\r\n# PROP Ignore_Export_Lib 0\r\n# PROP Target_Dir \"\"\r\n# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D \"WIN32\" /D \"_DEBUG\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_USRDLL\" /D \"YAMLDLL_EXPORTS\" /YX /FD /GZ /c\r\n# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I \"..\" /I \"..\\..\\include\" /D \"_DEBUG\" /D \"WIN32\" /D \"_WINDOWS\" /D \"_MBCS\" /D \"_USRDLL\" /D \"HAVE_CONFIG_H\" /D \"YAML_DECLARE_EXPORT\" /YX /FD /GZ /c\r\n# ADD BASE MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n# ADD MTL /nologo /D \"_DEBUG\" /mktyplib203 /win32\r\n# ADD BASE RSC /l 0x409 /d \"_DEBUG\"\r\n# ADD RSC /l 0x409 /d \"_DEBUG\"\r\nBSC32=bscmake.exe\r\n# ADD BASE BSC32 /nologo\r\n# ADD BSC32 /nologo\r\nLINK32=link.exe\r\n# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r\n# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:\"Output/Debug/lib/DLL/yaml.dll\" /pdbtype:sept\r\n\r\n!ENDIF \r\n\r\n# Begin Target\r\n\r\n# Name \"yamldll - Win32 Release\"\r\n# Name \"yamldll - Win32 Debug\"\r\n# Begin Group \"Source Files\"\r\n\r\n# PROP Default_Filter \"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\api.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\dumper.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\emitter.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\loader.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\parser.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\reader.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\scanner.c\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\writer.c\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Header Files\"\r\n\r\n# PROP Default_Filter \"h;hpp;hxx;hm;inl\"\r\n# Begin Source File\r\n\r\nSOURCE=..\\config.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\include\\yaml.h\r\n# End Source File\r\n# Begin Source File\r\n\r\nSOURCE=..\\..\\src\\yaml_private.h\r\n# End Source File\r\n# End Group\r\n# Begin Group \"Resource Files\"\r\n\r\n# PROP Default_Filter \"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\r\n# End Group\r\n# End Target\r\n# End Project\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/example_deconstructor.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"example_deconstructor\"\r\n\tProjectGUID=\"{F8C735BD-5D83-4E21-8548-7984792033DB}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_deconstructor.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_deconstructor.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_deconstructor.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<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=\"Source Files\"\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=\"..\\..\\tests\\example-deconstructor.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/example_deconstructor_alt.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"example_deconstructor_alt\"\r\n\tProjectGUID=\"{AEBABE36-E103-4E4B-84D4-B4546285C35A}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_deconstructor_alt.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_deconstructor_alt.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_deconstructor_alt.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<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=\"Source Files\"\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=\"..\\..\\tests\\example-deconstructor-alt.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/example_reformatter.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"example_reformatter\"\r\n\tProjectGUID=\"{BC86310C-0914-4F66-9272-30FD09900D70}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_reformatter.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_reformatter.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_reformatter.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<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=\"Source Files\"\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=\"..\\..\\tests\\example-reformatter.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/example_reformatter_alt.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"example_reformatter_alt\"\r\n\tProjectGUID=\"{C0209B44-8A45-4D9E-B430-100679BC6B2D}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_reformatter_alt.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_reformatter_alt.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/example_reformatter_alt.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<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=\"Source Files\"\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=\"..\\..\\tests\\example-reformatter-alt.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/libyaml.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 8.00\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"yaml\", \"yaml.vcproj\", \"{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"yamldll\", \"yamldll.vcproj\", \"{019A6F4C-E704-4879-8E53-622BD4BC9C89}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_deconstructor_alt\", \"example_deconstructor_alt.vcproj\", \"{AEBABE36-E103-4E4B-84D4-B4546285C35A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_deconstructor\", \"example_deconstructor.vcproj\", \"{F8C735BD-5D83-4E21-8548-7984792033DB}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_reformatter\", \"example_reformatter.vcproj\", \"{BC86310C-0914-4F66-9272-30FD09900D70}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_reformatter_alt\", \"example_reformatter_alt.vcproj\", \"{C0209B44-8A45-4D9E-B430-100679BC6B2D}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_dumper\", \"run_dumper.vcproj\", \"{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_emitter\", \"run_emitter.vcproj\", \"{CBA602BE-8FE4-4E68-A401-3C537EAA7239}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_loader\", \"run_loader.vcproj\", \"{B9549FB7-A259-4518-A9CD-9D2108C2C728}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_parser\", \"run_parser.vcproj\", \"{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_scanner\", \"run_scanner.vcproj\", \"{5D3F321E-4A86-4842-9F45-105A7F373104}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"test_reader\", \"test_reader.vcproj\", \"{898C9408-2480-4BF8-97B0-B1464B7BB5C4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"test_version\", \"test_version.vcproj\", \"{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\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{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Debug.Build.0 = Debug|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Release.ActiveCfg = Release|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Release.Build.0 = Release|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Debug.Build.0 = Debug|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Release.ActiveCfg = Release|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Release.Build.0 = Release|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Debug.Build.0 = Debug|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Release.ActiveCfg = Release|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Release.Build.0 = Release|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Debug.Build.0 = Debug|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Release.ActiveCfg = Release|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Release.Build.0 = Release|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Debug.Build.0 = Debug|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Release.ActiveCfg = Release|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Release.Build.0 = Release|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Debug.Build.0 = Debug|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Release.ActiveCfg = Release|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Release.Build.0 = Release|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Debug.Build.0 = Debug|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Release.ActiveCfg = Release|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Release.Build.0 = Release|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Debug.Build.0 = Debug|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Release.ActiveCfg = Release|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Release.Build.0 = Release|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Debug.Build.0 = Debug|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Release.ActiveCfg = Release|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Release.Build.0 = Release|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Debug.Build.0 = Debug|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Release.ActiveCfg = Release|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Release.Build.0 = Release|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Debug.Build.0 = Debug|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Release.ActiveCfg = Release|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Release.Build.0 = Release|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Debug.Build.0 = Debug|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Release.ActiveCfg = Release|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Release.Build.0 = Release|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Debug.ActiveCfg = Debug|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Debug.Build.0 = Debug|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Release.ActiveCfg = Release|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.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": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/run_dumper.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"run_dumper\"\r\n\tProjectGUID=\"{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_dumper.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_dumper.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_dumper.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<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=\"Source Files\"\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=\"..\\..\\tests\\run-dumper.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/run_emitter.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"run_emitter\"\r\n\tProjectGUID=\"{CBA602BE-8FE4-4E68-A401-3C537EAA7239}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_emitter.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_emitter.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_emitter.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<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=\"Source Files\"\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=\"..\\..\\tests\\run-emitter.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/run_loader.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"run_loader\"\r\n\tProjectGUID=\"{B9549FB7-A259-4518-A9CD-9D2108C2C728}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_loader.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_loader.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_loader.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<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=\"Source Files\"\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=\"..\\..\\tests\\run-loader.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/run_parser.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"run_parser\"\r\n\tProjectGUID=\"{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_parser.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_parser.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_parser.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<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=\"Source Files\"\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=\"..\\..\\tests\\run-parser.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/run_scanner.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"run_scanner\"\r\n\tProjectGUID=\"{5D3F321E-4A86-4842-9F45-105A7F373104}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_scanner.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_scanner.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/run_scanner.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<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=\"Source Files\"\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=\"..\\..\\tests\\run-scanner.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/test_reader.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"test_reader\"\r\n\tProjectGUID=\"{898C9408-2480-4BF8-97B0-B1464B7BB5C4}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/test_reader.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/test_reader.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/test_reader.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<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=\"Source Files\"\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=\"..\\..\\tests\\test-reader.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/test_version.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"test_version\"\r\n\tProjectGUID=\"{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}\"\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=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/test_version.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/test_version.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<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=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/test_version.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<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=\"Source Files\"\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=\"..\\..\\tests\\test-version.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/yaml.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"yaml\"\r\n\tProjectGUID=\"{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\"\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=\"Output\\Debug\\lib\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\lib\"\r\n\t\t\tConfigurationType=\"4\"\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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=\"VCLibrarianTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.lib\"/>\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<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=\"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=\"Output\\Release\\lib\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\lib\"\r\n\t\t\tConfigurationType=\"4\"\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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=\"VCLibrarianTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.lib\"/>\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<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=\"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=\"Source Files\"\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=\"..\\..\\src\\api.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\dumper.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\emitter.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\loader.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\parser.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\reader.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\scanner.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\writer.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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=\"..\\config.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\include\\yaml.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\yaml_private.h\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2003/yamldll.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"7.10\"\r\n\tName=\"yamldll\"\r\n\tProjectGUID=\"{019A6F4C-E704-4879-8E53-622BD4BC9C89}\"\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=\"Output\\Debug\\lib\\DLL\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\lib\\DLL\"\r\n\t\t\tConfigurationType=\"2\"\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_EXPORT\"\r\n\t\t\t\tMinimalRebuild=\"TRUE\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/yaml.dll\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/yaml.pdb\"\r\n\t\t\t\tSubSystem=\"2\"\r\n\t\t\t\tImportLibrary=\"$(OutDir)/yaml.lib\"\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<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=\"Output\\Release\\lib\\DLL\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\lib\\DLL\"\r\n\t\t\tConfigurationType=\"2\"\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_EXPORT\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"TRUE\"\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)/yaml.dll\"\r\n\t\t\t\tLinkIncremental=\"1\"\r\n\t\t\t\tGenerateDebugInformation=\"TRUE\"\r\n\t\t\t\tSubSystem=\"2\"\r\n\t\t\t\tOptimizeReferences=\"2\"\r\n\t\t\t\tEnableCOMDATFolding=\"2\"\r\n\t\t\t\tImportLibrary=\"$(OutDir)/yaml.lib\"\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<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=\"Source Files\"\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=\"..\\..\\src\\api.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\dumper.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\emitter.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\loader.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\parser.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\reader.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\scanner.c\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\writer.c\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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=\"..\\config.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\include\\yaml.h\">\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\yaml_private.h\">\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\">\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/example_deconstructor.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"example_deconstructor\"\r\n\tProjectGUID=\"{F8C735BD-5D83-4E21-8548-7984792033DB}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_deconstructor.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_deconstructor.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_deconstructor.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\example-deconstructor.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/example_deconstructor_alt.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"example_deconstructor_alt\"\r\n\tProjectGUID=\"{AEBABE36-E103-4E4B-84D4-B4546285C35A}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_deconstructor_alt.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_deconstructor_alt.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_deconstructor_alt.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\example-deconstructor-alt.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/example_reformatter.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"example_reformatter\"\r\n\tProjectGUID=\"{BC86310C-0914-4F66-9272-30FD09900D70}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_reformatter.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_reformatter.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_reformatter.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\example-reformatter.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/example_reformatter_alt.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"example_reformatter_alt\"\r\n\tProjectGUID=\"{C0209B44-8A45-4D9E-B430-100679BC6B2D}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_reformatter_alt.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/example_reformatter_alt.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/example_reformatter_alt.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\example-reformatter-alt.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/libyaml.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 10.00\r\n# Visual Studio 2008\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"yaml\", \"yaml.vcproj\", \"{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"yamldll\", \"yamldll.vcproj\", \"{019A6F4C-E704-4879-8E53-622BD4BC9C89}\"\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_deconstructor_alt\", \"example_deconstructor_alt.vcproj\", \"{AEBABE36-E103-4E4B-84D4-B4546285C35A}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_deconstructor\", \"example_deconstructor.vcproj\", \"{F8C735BD-5D83-4E21-8548-7984792033DB}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_reformatter\", \"example_reformatter.vcproj\", \"{BC86310C-0914-4F66-9272-30FD09900D70}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"example_reformatter_alt\", \"example_reformatter_alt.vcproj\", \"{C0209B44-8A45-4D9E-B430-100679BC6B2D}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_dumper\", \"run_dumper.vcproj\", \"{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_emitter\", \"run_emitter.vcproj\", \"{CBA602BE-8FE4-4E68-A401-3C537EAA7239}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_loader\", \"run_loader.vcproj\", \"{B9549FB7-A259-4518-A9CD-9D2108C2C728}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_parser\", \"run_parser.vcproj\", \"{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"run_scanner\", \"run_scanner.vcproj\", \"{5D3F321E-4A86-4842-9F45-105A7F373104}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"test_reader\", \"test_reader.vcproj\", \"{898C9408-2480-4BF8-97B0-B1464B7BB5C4}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"test_version\", \"test_version.vcproj\", \"{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}\"\r\n\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F} = {5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Win32 = Debug|Win32\r\n\t\tRelease|Win32 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{019A6F4C-E704-4879-8E53-622BD4BC9C89}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{AEBABE36-E103-4E4B-84D4-B4546285C35A}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{F8C735BD-5D83-4E21-8548-7984792033DB}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{BC86310C-0914-4F66-9272-30FD09900D70}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{C0209B44-8A45-4D9E-B430-100679BC6B2D}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{CBA602BE-8FE4-4E68-A401-3C537EAA7239}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{B9549FB7-A259-4518-A9CD-9D2108C2C728}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{5D3F321E-4A86-4842-9F45-105A7F373104}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{898C9408-2480-4BF8-97B0-B1464B7BB5C4}.Release|Win32.Build.0 = Release|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Debug|Win32.ActiveCfg = Debug|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Debug|Win32.Build.0 = Debug|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Release|Win32.ActiveCfg = Release|Win32\r\n\t\t{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}.Release|Win32.Build.0 = Release|Win32\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/run_dumper.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"run_dumper\"\r\n\tProjectGUID=\"{99AD9500-BD7A-4996-9FA2-2E4EAE7E6BCB}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_dumper.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_dumper.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_dumper.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\run-dumper.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/run_emitter.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"run_emitter\"\r\n\tProjectGUID=\"{CBA602BE-8FE4-4E68-A401-3C537EAA7239}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_emitter.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_emitter.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_emitter.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\run-emitter.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/run_loader.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"run_loader\"\r\n\tProjectGUID=\"{B9549FB7-A259-4518-A9CD-9D2108C2C728}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_loader.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_loader.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_loader.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\run-loader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/run_parser.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"run_parser\"\r\n\tProjectGUID=\"{8EC75FB4-951D-4A19-8DCD-ED2E97E4B234}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_parser.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_parser.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_parser.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\run-parser.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/run_scanner.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"run_scanner\"\r\n\tProjectGUID=\"{5D3F321E-4A86-4842-9F45-105A7F373104}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_scanner.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/run_scanner.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/run_scanner.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\run-scanner.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/test_reader.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"test_reader\"\r\n\tProjectGUID=\"{898C9408-2480-4BF8-97B0-B1464B7BB5C4}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/test_reader.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/test_reader.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/test_reader.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\test-reader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/test_version.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"test_version\"\r\n\tProjectGUID=\"{BF6CA7A9-0767-4A4E-BC42-9B7C8E105991}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/test_version.exe\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/test_version.pdb\"\r\n\t\t\t\tSubSystem=\"1\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\bin\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\bin\"\r\n\t\t\tConfigurationType=\"1\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_CONSOLE;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/test_version.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\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\tests\\test-version.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/yaml.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"yaml\"\r\n\tProjectGUID=\"{5CE8051A-3F0C-4C39-B1C0-3338E48BA60F}\"\r\n\tRootNamespace=\"yaml\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\lib\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\lib\"\r\n\t\t\tConfigurationType=\"4\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_STATIC\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLibrarianTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.lib\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\lib\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\lib\"\r\n\t\t\tConfigurationType=\"4\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_STATIC\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLibrarianTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.lib\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\api.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\dumper.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\emitter.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\loader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\parser.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\reader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\scanner.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\writer.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\config.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\include\\yaml.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\yaml_private.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/win32/vs2008/yamldll.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n<VisualStudioProject\r\n\tProjectType=\"Visual C++\"\r\n\tVersion=\"9,00\"\r\n\tName=\"yamldll\"\r\n\tProjectGUID=\"{019A6F4C-E704-4879-8E53-622BD4BC9C89}\"\r\n\tKeyword=\"Win32Proj\"\r\n\tTargetFrameworkVersion=\"131072\"\r\n\t>\r\n\t<Platforms>\r\n\t\t<Platform\r\n\t\t\tName=\"Win32\"\r\n\t\t/>\r\n\t</Platforms>\r\n\t<ToolFiles>\r\n\t</ToolFiles>\r\n\t<Configurations>\r\n\t\t<Configuration\r\n\t\t\tName=\"Debug|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Debug\\lib\\DLL\"\r\n\t\t\tIntermediateDirectory=\"Build\\Debug\\lib\\DLL\"\r\n\t\t\tConfigurationType=\"2\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\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=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_EXPORT\"\r\n\t\t\t\tMinimalRebuild=\"true\"\r\n\t\t\t\tBasicRuntimeChecks=\"3\"\r\n\t\t\t\tRuntimeLibrary=\"3\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"4\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.dll\"\r\n\t\t\t\tLinkIncremental=\"2\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tProgramDatabaseFile=\"$(OutDir)/yaml.pdb\"\r\n\t\t\t\tSubSystem=\"2\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tImportLibrary=\"$(OutDir)/yaml.lib\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\r\n\t\t</Configuration>\r\n\t\t<Configuration\r\n\t\t\tName=\"Release|Win32\"\r\n\t\t\tOutputDirectory=\"Output\\Release\\lib\\DLL\"\r\n\t\t\tIntermediateDirectory=\"Build\\Release\\lib\\DLL\"\r\n\t\t\tConfigurationType=\"2\"\r\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC71.vsprops\"\r\n\t\t\tCharacterSet=\"2\"\r\n\t\t\t>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreBuildEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCustomBuildTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCMIDLTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCCLCompilerTool\"\r\n\t\t\t\tAdditionalIncludeDirectories=\"..;../../include\"\r\n\t\t\t\tPreprocessorDefinitions=\"HAVE_CONFIG_H;YAML_DECLARE_EXPORT\"\r\n\t\t\t\tRuntimeLibrary=\"2\"\r\n\t\t\t\tUsePrecompiledHeader=\"0\"\r\n\t\t\t\tWarningLevel=\"3\"\r\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\r\n\t\t\t\tDebugInformationFormat=\"3\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCResourceCompilerTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPreLinkEventTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCLinkerTool\"\r\n\t\t\t\tOutputFile=\"$(OutDir)/yaml.dll\"\r\n\t\t\t\tLinkIncremental=\"1\"\r\n\t\t\t\tGenerateDebugInformation=\"true\"\r\n\t\t\t\tSubSystem=\"2\"\r\n\t\t\t\tOptimizeReferences=\"2\"\r\n\t\t\t\tEnableCOMDATFolding=\"2\"\r\n\t\t\t\tRandomizedBaseAddress=\"1\"\r\n\t\t\t\tDataExecutionPrevention=\"0\"\r\n\t\t\t\tImportLibrary=\"$(OutDir)/yaml.lib\"\r\n\t\t\t\tTargetMachine=\"1\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCALinkTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCManifestTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCXDCMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCBscMakeTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCFxCopTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCAppVerifierTool\"\r\n\t\t\t/>\r\n\t\t\t<Tool\r\n\t\t\t\tName=\"VCPostBuildEventTool\"\r\n\t\t\t/>\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=\"Source Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\api.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\dumper.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\emitter.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\loader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\parser.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\reader.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\scanner.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\writer.c\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Header Files\"\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>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\config.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\include\\yaml.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t\t<File\r\n\t\t\t\tRelativePath=\"..\\..\\src\\yaml_private.h\"\r\n\t\t\t\t>\r\n\t\t\t</File>\r\n\t\t</Filter>\r\n\t\t<Filter\r\n\t\t\tName=\"Resource Files\"\r\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\r\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\r\n\t\t\t>\r\n\t\t</Filter>\r\n\t</Files>\r\n\t<Globals>\r\n\t</Globals>\r\n</VisualStudioProject>\r\n"
  },
  {
    "path": "Carthage/Checkouts/YAML.framework/yaml-0.1.4/yaml-0.1.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nincludedir=@includedir@\nlibdir=@libdir@\n\nName: LibYAML\nDescription: Library to parse and emit YAML\nVersion: @PACKAGE_VERSION@\nCflags:\nLibs: -L${libdir} -lyaml\n"
  },
  {
    "path": "Gemfile",
    "content": "source \"https://ruby.taobao.org\"\n\ngem 'cocoapods', '1.0.1'\n"
  },
  {
    "path": "LICENSE",
    "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"
  },
  {
    "path": "Library/Aspects/Aspects/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/Aspects/Aspects/Source/Aspects.swift",
    "content": "//\n//  Aspects.swift\n//  Aspects\n//\n//  Created by LEI on 12/12/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nstruct Aspect {\n    \n    \n    \n}\n\npublic enum AspectOptions {\n    case before\n    case after\n    case instead\n}\n\npublic extension NSObject {\n    \n   public class func aspectHook(_ originalSelector: Selector, swizzledSelector: Selector, options: AspectOptions = .instead) {\n        let originalMethod = class_getInstanceMethod(self, originalSelector)\n        let swizzledMethod = class_getInstanceMethod(self, swizzledSelector)\n        \n        let didAddMethod = class_addMethod(self, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))\n        \n        if didAddMethod {\n            class_replaceMethod(self, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))\n        } else {\n            method_exchangeImplementations(originalMethod, swizzledMethod);\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "Library/Aspects/Aspects.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"Aspects\"\n  s.version      = \"0.0.1\"\n  s.summary      = \"Aspects\"\n  s.description  = <<-DESC\n                   Aspects swift.\n                   DESC\n  s.homepage     = \"http://icodesign.me\"\n  s.license      = \"MIT\"\n  s.author       = { \"iCodesign\" => \"leimagnet@gmail.com\" }\n  s.platform     = :ios, \"8.0\"\n  s.source       = { :path => \".\" }\n  s.source_files  = \"Aspects\", \"Aspects/**/*.{h,m,swift}\"\n  s.exclude_files = \"Aspects/Exclude\"\nend\n"
  },
  {
    "path": "Library/Aspects/Aspects.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t9B54CC7E1C1C300500DDEEBB /* Aspects.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B54CC731C1C300500DDEEBB /* Aspects.framework */; };\n\t\t9B54CC831C1C300500DDEEBB /* AspectsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B54CC821C1C300500DDEEBB /* AspectsTests.swift */; };\n\t\t9B54CC951C1C391000DDEEBB /* Aspects.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B54CC931C1C391000DDEEBB /* Aspects.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t9B54CC7F1C1C300500DDEEBB /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B54CC6A1C1C300500DDEEBB /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9B54CC721C1C300500DDEEBB;\n\t\t\tremoteInfo = Aspects;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t9B54CC731C1C300500DDEEBB /* Aspects.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Aspects.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B54CC781C1C300500DDEEBB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B54CC7D1C1C300500DDEEBB /* AspectsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AspectsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B54CC821C1C300500DDEEBB /* AspectsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AspectsTests.swift; sourceTree = \"<group>\"; };\n\t\t9B54CC841C1C300500DDEEBB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B54CC931C1C391000DDEEBB /* Aspects.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Aspects.swift; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t9B54CC6F1C1C300500DDEEBB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B54CC7A1C1C300500DDEEBB /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B54CC7E1C1C300500DDEEBB /* Aspects.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9B54CC691C1C300500DDEEBB = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B54CC751C1C300500DDEEBB /* Aspects */,\n\t\t\t\t9B54CC811C1C300500DDEEBB /* AspectsTests */,\n\t\t\t\t9B54CC741C1C300500DDEEBB /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B54CC741C1C300500DDEEBB /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B54CC731C1C300500DDEEBB /* Aspects.framework */,\n\t\t\t\t9B54CC7D1C1C300500DDEEBB /* AspectsTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B54CC751C1C300500DDEEBB /* Aspects */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B54CC911C1C391000DDEEBB /* Source */,\n\t\t\t\t9B54CC781C1C300500DDEEBB /* Info.plist */,\n\t\t\t);\n\t\t\tpath = Aspects;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B54CC811C1C300500DDEEBB /* AspectsTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B54CC821C1C300500DDEEBB /* AspectsTests.swift */,\n\t\t\t\t9B54CC841C1C300500DDEEBB /* Info.plist */,\n\t\t\t);\n\t\t\tpath = AspectsTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B54CC911C1C391000DDEEBB /* Source */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B54CC931C1C391000DDEEBB /* Aspects.swift */,\n\t\t\t);\n\t\t\tpath = Source;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t9B54CC701C1C300500DDEEBB /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t9B54CC721C1C300500DDEEBB /* Aspects */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B54CC871C1C300500DDEEBB /* Build configuration list for PBXNativeTarget \"Aspects\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9B54CC6E1C1C300500DDEEBB /* Sources */,\n\t\t\t\t9B54CC6F1C1C300500DDEEBB /* Frameworks */,\n\t\t\t\t9B54CC701C1C300500DDEEBB /* Headers */,\n\t\t\t\t9B54CC711C1C300500DDEEBB /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Aspects;\n\t\t\tproductName = Aspects;\n\t\t\tproductReference = 9B54CC731C1C300500DDEEBB /* Aspects.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9B54CC7C1C1C300500DDEEBB /* AspectsTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B54CC8A1C1C300500DDEEBB /* Build configuration list for PBXNativeTarget \"AspectsTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9B54CC791C1C300500DDEEBB /* Sources */,\n\t\t\t\t9B54CC7A1C1C300500DDEEBB /* Frameworks */,\n\t\t\t\t9B54CC7B1C1C300500DDEEBB /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9B54CC801C1C300500DDEEBB /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = AspectsTests;\n\t\t\tproductName = AspectsTests;\n\t\t\tproductReference = 9B54CC7D1C1C300500DDEEBB /* AspectsTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t9B54CC6A1C1C300500DDEEBB /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0720;\n\t\t\t\tLastUpgradeCheck = 0720;\n\t\t\t\tORGANIZATIONNAME = TouchingApp;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t9B54CC721C1C300500DDEEBB = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t\t9B54CC7C1C1C300500DDEEBB = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9B54CC6D1C1C300500DDEEBB /* Build configuration list for PBXProject \"Aspects\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 9B54CC691C1C300500DDEEBB;\n\t\t\tproductRefGroup = 9B54CC741C1C300500DDEEBB /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t9B54CC721C1C300500DDEEBB /* Aspects */,\n\t\t\t\t9B54CC7C1C1C300500DDEEBB /* AspectsTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t9B54CC711C1C300500DDEEBB /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B54CC7B1C1C300500DDEEBB /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t9B54CC6E1C1C300500DDEEBB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B54CC951C1C391000DDEEBB /* Aspects.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B54CC791C1C300500DDEEBB /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B54CC831C1C300500DDEEBB /* AspectsTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t9B54CC801C1C300500DDEEBB /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9B54CC721C1C300500DDEEBB /* Aspects */;\n\t\t\ttargetProxy = 9B54CC7F1C1C300500DDEEBB /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t9B54CC851C1C300500DDEEBB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B54CC861C1C300500DDEEBB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B54CC881C1C300500DDEEBB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Aspects/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.Aspects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B54CC891C1C300500DDEEBB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = Aspects/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.Aspects;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B54CC8B1C1C300500DDEEBB /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = AspectsTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.AspectsTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B54CC8C1C1C300500DDEEBB /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tINFOPLIST_FILE = AspectsTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.AspectsTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t9B54CC6D1C1C300500DDEEBB /* Build configuration list for PBXProject \"Aspects\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B54CC851C1C300500DDEEBB /* Debug */,\n\t\t\t\t9B54CC861C1C300500DDEEBB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B54CC871C1C300500DDEEBB /* Build configuration list for PBXNativeTarget \"Aspects\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B54CC881C1C300500DDEEBB /* Debug */,\n\t\t\t\t9B54CC891C1C300500DDEEBB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n\t\t9B54CC8A1C1C300500DDEEBB /* Build configuration list for PBXNativeTarget \"AspectsTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B54CC8B1C1C300500DDEEBB /* Debug */,\n\t\t\t\t9B54CC8C1C1C300500DDEEBB /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 9B54CC6A1C1C300500DDEEBB /* Project object */;\n}\n"
  },
  {
    "path": "Library/Aspects/Aspects.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Aspects.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Library/Aspects/AspectsTests/AspectsTests.swift",
    "content": "//\n//  AspectsTests.swift\n//  AspectsTests\n//\n//  Created by LEI on 12/12/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport XCTest\n@testable import Aspects\n\nclass AspectsTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measureBlock {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Library/Aspects/AspectsTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/AppConfiguration.swift",
    "content": "//\n//  AppConfiguration.swift\n//  ICSMainFramework\n//\n//  Created by LEI on 5/14/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nprivate let sharedConfigInstance = AppConfig()\n\npublic struct ConfigKey {\n    public static let lifeCycle = \"lifecycle\"\n    public static let custom = \"custom\"\n}\n\npublic struct LifeCycleKey {\n    public static let didFinishLaunchingWithOptions = \"didFinishLaunchingWithOptions\"\n    public static let didEnterBackground = \"didEnterBackground\"\n    public static let willEnterForeground = \"willEnterForeground\"\n    public static let didBecomeActive = \"didBecomeActive\"\n    public static let remoteNotification = \"remoteNotification\"\n    public static let willTerminate = \"willTerminate\"\n    public static let openURL = \"openURL\"\n}\n\nlet appConfig = AppConfig.sharedConfig\n\nopen class AppConfig {\n    \n    open var lifeCycleConfig = [String: [AppLifeCycleItem]]()\n    open var customConfig = [String: AnyObject]()\n    \n    open class var sharedConfig: AppConfig {\n        return sharedConfigInstance\n    }\n    \n    open func loadConfig(_ fileName: String) {\n        var components = fileName.components(separatedBy: \".\")\n        let type = components.popLast()\n        let name = components.joined(separator: \".\")\n        if let path = Bundle.main.path(forResource: name, ofType: type) {\n            let configDict = NSDictionary(contentsOfFile: path) as! [String: AnyObject]\n            loadConfig(configDict)\n        }\n    }\n    \n    open func loadConfig(_ dictionary: [String: AnyObject]) {\n        if let lifeCycleDict = dictionary[ConfigKey.lifeCycle] as? [String: AnyObject] {\n            loadLifeCycleConfig(lifeCycleDict)\n        }\n        if let lifeCycleDict = dictionary[ConfigKey.custom] as? [String: AnyObject] {\n            loadCustomConfig(lifeCycleDict)\n        }\n    }\n    \n    func loadLifeCycleConfig(_ dictionary: [String: AnyObject]) {\n        for (key, value) in dictionary {\n            var items = [AppLifeCycleItem]()\n            if let itemArray = value as? [AnyObject] {\n                items = itemArray.map { AppLifeCycleItem(dictionary: $0 as! [String: AnyObject]) }.filter { $0 != nil }.map { $0! }\n            }\n            lifeCycleConfig[key] = items\n        }\n    }\n    \n    func loadCustomConfig(_ dictionary: [String: AnyObject]) {\n        customConfig = dictionary\n    }\n    \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  ICDSMainFramework\n//\n//  Created by LEI on 2/26/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\nimport UIKit\n\nopen class AppDelegate: UIResponder, UIApplicationDelegate {\n    \n    open var bootstrapViewController: UIViewController {\n        return UIViewController()\n    }\n    open var window: UIWindow?\n    \n    open func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        // Override point for customization after application launch.\n        window = UIWindow(frame: UIScreen.main.bounds)\n        window?.backgroundColor = UIColor.white\n        window?.makeKeyAndVisible()\n        appConfig.loadConfig(\"config.plist\")\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.didFinishLaunchingWithOptions] {\n            for item in lifeCycleItems{\n                item.object?.application?(application, didFinishLaunchingWithOptions: launchOptions)\n            }\n        }\n        return true\n    }\n\n    open func applicationWillResignActive(_ application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n    \n    open func applicationDidEnterBackground(_ application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.didEnterBackground] {\n            for item in lifeCycleItems{\n                item.object?.applicationDidEnterBackground?(application)\n            }\n        }\n    }\n    \n    open func applicationWillEnterForeground(_ application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.willEnterForeground] {\n            for item in lifeCycleItems{\n                item.object?.applicationWillEnterForeground?(application)\n            }\n        }\n    }\n    \n    open func applicationDidBecomeActive(_ application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.didBecomeActive] {\n            for item in lifeCycleItems{\n                item.object?.applicationDidBecomeActive?(application)\n            }\n        }\n    }\n    \n    open func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.willTerminate] {\n            for item in lifeCycleItems{\n                item.object?.applicationWillTerminate?(application)\n            }\n        }\n    }\n    \n    open func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.remoteNotification] {\n            for item in lifeCycleItems{\n                item.object?.application?(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)\n            }\n        }\n    }\n\n    open func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.remoteNotification] {\n            for item in lifeCycleItems{\n                item.object?.application?(application, didFailToRegisterForRemoteNotificationsWithError: error)\n            }\n        }\n    }\n    \n    open func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.remoteNotification] {\n            for item in lifeCycleItems{\n                item.object?.application?(application, didReceiveRemoteNotification: userInfo, fetchCompletionHandler: completionHandler)\n            }\n        }\n    }\n\n    open func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {\n        var handled = false\n        if let lifeCycleItems = appConfig.lifeCycleConfig[LifeCycleKey.openURL] {\n            for item in lifeCycleItems{\n                if #available(iOSApplicationExtension 9.0, *) {\n                    if let res = item.object?.application?(app, open: url, options: options), res{\n                        handled = res\n                    }\n                } else {\n                    // Fallback on earlier versions\n                }\n            }\n        }\n        return handled\n    }\n    \n}\n\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/AppEnvironment.swift",
    "content": "//\n//  AppConfig.swift\n//  ICSMainFramework\n//\n//  Created by LEI on 5/14/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport CoreTelephony\n\npublic struct AppEnv {\n    // App Name\n    // App Version\n    // App Build\n    public static var version: String {\n        return Bundle.main.object(forInfoDictionaryKey: \"CFBundleShortVersionString\") as! String\n    }\n    \n    public static var fullVersion: String {\n        return \"\\(AppEnv.version) Build \\(AppEnv.build)\"\n    }\n    \n    public static var build: String {\n        return Bundle.main.object(forInfoDictionaryKey: \"CFBundleVersion\") as! String\n    }\n    \n    public static var countryCode: String {\n        return (Locale.current as NSLocale).object(forKey: NSLocale.Key.countryCode) as? String ?? \"US\"\n    }\n    \n    public static var languageCode: String {\n        return (Locale.current as NSLocale).object(forKey: NSLocale.Key.languageCode) as? String ?? \"en\"\n    }\n    \n    public static var carrierName: String {\n        let networkInfo = CTTelephonyNetworkInfo()\n        let carrier = networkInfo.subscriberCellularProvider\n        return (carrier?.carrierName) ?? \"\"\n    }\n\n    public static var appName: String {\n        return Bundle.main.object(forInfoDictionaryKey: \"CFBundleDisplayName\") as! String\n    }\n\n    public static var isTestFlight: Bool {\n        return isAppStoreReceiptSandbox && !hasEmbeddedMobileProvision\n    }\n\n    public static var isAppStore: Bool {\n        if isAppStoreReceiptSandbox || hasEmbeddedMobileProvision {\n            return false\n        }\n        return true\n    }\n\n    fileprivate static var isAppStoreReceiptSandbox: Bool {\n        let b = Bundle.main.appStoreReceiptURL?.lastPathComponent == \"sandboxReceipt\"\n        NSLog(\"isAppStoreReceiptSandbox: \\(b)\")\n        return b\n    }\n\n    fileprivate static var hasEmbeddedMobileProvision: Bool {\n        let b = Bundle.main.path(forResource: \"embedded\", ofType: \"mobileprovision\") != nil\n        NSLog(\"hasEmbeddedMobileProvision: \\(b)\")\n        return b\n    }\n\n}\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/AppLifeCycle.swift",
    "content": "//\n//  AppInitialize.swift\n//  ICSMainFramework\n//\n//  Created by LEI on 5/14/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\n@objc public protocol AppLifeCycleProtocol: UIApplicationDelegate {\n    \n}\n\n\npublic struct AppLifeCycleItem {\n    \n    public var object: AppLifeCycleProtocol?\n    \n    init?(dictionary: [String: AnyObject]) {\n        if let objectString = dictionary[\"object\"] as? String {\n            object = OBJCObjectFactory.create(objectString) as? AppLifeCycleProtocol\n        }\n        if object == nil {\n            return nil\n        }\n    }\n    \n}"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/ICSMainFramework.h",
    "content": "//\n//  ICSMainFramework.h\n//  ICSMainFramework\n//\n//  Created by LEI on 3/1/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for ICSMainFramework.\nFOUNDATION_EXPORT double ICSMainFrameworkVersionNumber;\n\n//! Project version string for ICSMainFramework.\nFOUNDATION_EXPORT const unsigned char ICSMainFrameworkVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <ICSMainFramework/PublicHeader.h>\n\n\n#import \"OBJCObjectFactory.h\""
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.touchingapp.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/OBJCObjectFactory.h",
    "content": "//\n//  ObjectInitializeHelper.h\n//  ICSMainFramework\n//\n//  Created by LEI on 5/14/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface OBJCObjectFactory : NSObject\n\n/**\n Instantiates the specified class, which must\n descend (dircectly or indirectly) from NSObject.\n Uses the class's parameterless initializer.\n */\n+ (id)create:(NSString *)className;\n\n/**\n Instantiates the specified class, which must\n descend (dircectly or indirectly) from NSObject.\n Uses the specified initializer, passing it the\n argument provided via the `argument` parameter.\n */\n+ (id)create:(NSString *)className\n initializer:(SEL)initializer\n    argument:(id)argument;\n\n@end\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework/OBJCObjectFactory.m",
    "content": "//\n//  ObjectInitializeHelper.m\n//  ICSMainFramework\n//\n//  Created by LEI on 5/14/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\n#import \"OBJCObjectFactory.h\"\n\nstatic id OBJCInitWithArg(id  target,\n                          SEL initializer,\n                          id  argument)\n{\n    IMP imp = [target methodForSelector:initializer];\n    id (*initFunc)(id, SEL, id) = (void *)imp;\n    return initFunc(target, initializer, argument);\n}\n\n@implementation OBJCObjectFactory\n\n+ (id)create:(NSString *)className\n{\n    return [NSClassFromString(className) new];\n}\n\n+ (id)create:(NSString *)className\n initializer:(SEL)init\n    argument:(id)arg\n{\n    Class class = NSClassFromString(className);\n    return (class && init)\n    ? OBJCInitWithArg([class alloc], init, arg)\n    : nil;\n}\n\n@end\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"ICSMainFramework\"\n  s.version      = \"0.0.1\"\n  s.summary      = \"ICSMainFramework\"\n  s.description  = <<-DESC\n                   ICSMainFramework.\n                   DESC\n  s.homepage     = \"http://icodesign.me\"\n  s.license      = \"MIT\"\n  s.author       = { \"iCodesign\" => \"leimagnet@gmail.com\" }\n  s.platform     = :ios, \"8.0\"\n  s.source       = { :path => \".\" }\n  s.source_files  = \"ICSMainFramework\", \"ICSMainFramework/**/*.{h,m,swift}\"\n  s.exclude_files = \"ICSMainFramework/Exclude\"\nend\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t9B07C59A1B04E8D9003A8675 /* OBJCObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B07C5981B04E8D9003A8675 /* OBJCObjectFactory.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9B07C59B1B04E8D9003A8675 /* OBJCObjectFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B07C5991B04E8D9003A8675 /* OBJCObjectFactory.m */; };\n\t\t9B0F46EA1AA31B3B009F1409 /* ICSMainFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B0F46E91AA31B3B009F1409 /* ICSMainFramework.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9B0F46F01AA31B3B009F1409 /* ICSMainFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B0F46E41AA31B3B009F1409 /* ICSMainFramework.framework */; };\n\t\t9B0F46F71AA31B3B009F1409 /* ICSMainFrameworkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B0F46F61AA31B3B009F1409 /* ICSMainFrameworkTests.swift */; };\n\t\t9B0F47021AA31B48009F1409 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B0F47001AA31B48009F1409 /* AppDelegate.swift */; };\n\t\t9BCB4EEA1B03AF3900C07821 /* AppLifeCycle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCB4EE91B03AF3900C07821 /* AppLifeCycle.swift */; };\n\t\t9BCB4EEC1B03B46E00C07821 /* AppEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCB4EEB1B03B46E00C07821 /* AppEnvironment.swift */; };\n\t\t9BCB4EEE1B04429700C07821 /* AppConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCB4EED1B04429700C07821 /* AppConfiguration.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t9B0F46F11AA31B3B009F1409 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0F46DB1AA31B3B009F1409 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9B0F46E31AA31B3B009F1409;\n\t\t\tremoteInfo = ICSMainFramework;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t9B07C5981B04E8D9003A8675 /* OBJCObjectFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OBJCObjectFactory.h; sourceTree = \"<group>\"; };\n\t\t9B07C5991B04E8D9003A8675 /* OBJCObjectFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OBJCObjectFactory.m; sourceTree = \"<group>\"; };\n\t\t9B0F46E41AA31B3B009F1409 /* ICSMainFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ICSMainFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B0F46E81AA31B3B009F1409 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B0F46E91AA31B3B009F1409 /* ICSMainFramework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ICSMainFramework.h; sourceTree = \"<group>\"; };\n\t\t9B0F46EF1AA31B3B009F1409 /* ICSMainFrameworkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ICSMainFrameworkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B0F46F51AA31B3B009F1409 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B0F46F61AA31B3B009F1409 /* ICSMainFrameworkTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICSMainFrameworkTests.swift; sourceTree = \"<group>\"; };\n\t\t9B0F47001AA31B48009F1409 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t9B77CD9C1ADA6EBB00EA4918 /* LlamaKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LlamaKit.framework; path = Carthage/Build/iOS/LlamaKit.framework; sourceTree = \"<group>\"; };\n\t\t9B77CD9D1ADA6EBB00EA4918 /* ReactiveCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReactiveCocoa.framework; path = Carthage/Build/iOS/ReactiveCocoa.framework; sourceTree = \"<group>\"; };\n\t\t9BCB4EE91B03AF3900C07821 /* AppLifeCycle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppLifeCycle.swift; sourceTree = \"<group>\"; };\n\t\t9BCB4EEB1B03B46E00C07821 /* AppEnvironment.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppEnvironment.swift; sourceTree = \"<group>\"; };\n\t\t9BCB4EED1B04429700C07821 /* AppConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppConfiguration.swift; sourceTree = \"<group>\"; };\n\t\tDBA55226EEE6717A2985B05D /* Pods_ICSMainFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ICSMainFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t9B0F46E01AA31B3B009F1409 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B0F46EC1AA31B3B009F1409 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B0F46F01AA31B3B009F1409 /* ICSMainFramework.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9B0F46DA1AA31B3B009F1409 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46E61AA31B3B009F1409 /* ICSMainFramework */,\n\t\t\t\t9B0F46F31AA31B3B009F1409 /* ICSMainFrameworkTests */,\n\t\t\t\t9B0F46E51AA31B3B009F1409 /* Products */,\n\t\t\t\tFD6679E8BFA882B1C8313968 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0F46E51AA31B3B009F1409 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46E41AA31B3B009F1409 /* ICSMainFramework.framework */,\n\t\t\t\t9B0F46EF1AA31B3B009F1409 /* ICSMainFrameworkTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0F46E61AA31B3B009F1409 /* ICSMainFramework */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46E91AA31B3B009F1409 /* ICSMainFramework.h */,\n\t\t\t\t9B0F47001AA31B48009F1409 /* AppDelegate.swift */,\n\t\t\t\t9BCB4EE91B03AF3900C07821 /* AppLifeCycle.swift */,\n\t\t\t\t9BCB4EEB1B03B46E00C07821 /* AppEnvironment.swift */,\n\t\t\t\t9BCB4EED1B04429700C07821 /* AppConfiguration.swift */,\n\t\t\t\t9B07C5981B04E8D9003A8675 /* OBJCObjectFactory.h */,\n\t\t\t\t9B07C5991B04E8D9003A8675 /* OBJCObjectFactory.m */,\n\t\t\t\t9B0F46E71AA31B3B009F1409 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ICSMainFramework;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0F46E71AA31B3B009F1409 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46E81AA31B3B009F1409 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0F46F31AA31B3B009F1409 /* ICSMainFrameworkTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46F61AA31B3B009F1409 /* ICSMainFrameworkTests.swift */,\n\t\t\t\t9B0F46F41AA31B3B009F1409 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = ICSMainFrameworkTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0F46F41AA31B3B009F1409 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0F46F51AA31B3B009F1409 /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tFD6679E8BFA882B1C8313968 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B77CD9C1ADA6EBB00EA4918 /* LlamaKit.framework */,\n\t\t\t\t9B77CD9D1ADA6EBB00EA4918 /* ReactiveCocoa.framework */,\n\t\t\t\tDBA55226EEE6717A2985B05D /* Pods_ICSMainFramework.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t9B0F46E11AA31B3B009F1409 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B0F46EA1AA31B3B009F1409 /* ICSMainFramework.h in Headers */,\n\t\t\t\t9B07C59A1B04E8D9003A8675 /* OBJCObjectFactory.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t9B0F46E31AA31B3B009F1409 /* ICSMainFramework */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B0F46FA1AA31B3B009F1409 /* Build configuration list for PBXNativeTarget \"ICSMainFramework\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9B0F46DF1AA31B3B009F1409 /* Sources */,\n\t\t\t\t9B0F46E01AA31B3B009F1409 /* Frameworks */,\n\t\t\t\t9B0F46E11AA31B3B009F1409 /* Headers */,\n\t\t\t\t9B0F46E21AA31B3B009F1409 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ICSMainFramework;\n\t\t\tproductName = ICSMainFramework;\n\t\t\tproductReference = 9B0F46E41AA31B3B009F1409 /* ICSMainFramework.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9B0F46EE1AA31B3B009F1409 /* ICSMainFrameworkTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B0F46FD1AA31B3B009F1409 /* Build configuration list for PBXNativeTarget \"ICSMainFrameworkTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9B0F46EB1AA31B3B009F1409 /* Sources */,\n\t\t\t\t9B0F46EC1AA31B3B009F1409 /* Frameworks */,\n\t\t\t\t9B0F46ED1AA31B3B009F1409 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9B0F46F21AA31B3B009F1409 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ICSMainFrameworkTests;\n\t\t\tproductName = ICSMainFrameworkTests;\n\t\t\tproductReference = 9B0F46EF1AA31B3B009F1409 /* ICSMainFrameworkTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t9B0F46DB1AA31B3B009F1409 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftMigration = 0700;\n\t\t\t\tLastSwiftUpdateCheck = 0700;\n\t\t\t\tLastUpgradeCheck = 0610;\n\t\t\t\tORGANIZATIONNAME = TouchingApp;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t9B0F46E31AA31B3B009F1409 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t\t9B0F46EE1AA31B3B009F1409 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.1.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9B0F46DE1AA31B3B009F1409 /* Build configuration list for PBXProject \"ICSMainFramework\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t);\n\t\t\tmainGroup = 9B0F46DA1AA31B3B009F1409;\n\t\t\tproductRefGroup = 9B0F46E51AA31B3B009F1409 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t9B0F46E31AA31B3B009F1409 /* ICSMainFramework */,\n\t\t\t\t9B0F46EE1AA31B3B009F1409 /* ICSMainFrameworkTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t9B0F46E21AA31B3B009F1409 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B0F46ED1AA31B3B009F1409 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t9B0F46DF1AA31B3B009F1409 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B07C59B1B04E8D9003A8675 /* OBJCObjectFactory.m in Sources */,\n\t\t\t\t9BCB4EEE1B04429700C07821 /* AppConfiguration.swift in Sources */,\n\t\t\t\t9BCB4EEC1B03B46E00C07821 /* AppEnvironment.swift in Sources */,\n\t\t\t\t9B0F47021AA31B48009F1409 /* AppDelegate.swift in Sources */,\n\t\t\t\t9BCB4EEA1B03AF3900C07821 /* AppLifeCycle.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B0F46EB1AA31B3B009F1409 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B0F46F71AA31B3B009F1409 /* ICSMainFrameworkTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t9B0F46F21AA31B3B009F1409 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9B0F46E31AA31B3B009F1409 /* ICSMainFramework */;\n\t\t\ttargetProxy = 9B0F46F11AA31B3B009F1409 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin XCBuildConfiguration section */\n\t\t9B0F46F81AA31B3B009F1409 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B0F46F91AA31B3B009F1409 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B0F46FB1AA31B3B009F1409 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ICSMainFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B0F46FC1AA31B3B009F1409 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ICSMainFramework/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B0F46FE1AA31B3B009F1409 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ICSMainFrameworkTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B0F46FF1AA31B3B009F1409 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ICSMainFrameworkTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t9B0F46DE1AA31B3B009F1409 /* Build configuration list for PBXProject \"ICSMainFramework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B0F46F81AA31B3B009F1409 /* Debug */,\n\t\t\t\t9B0F46F91AA31B3B009F1409 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B0F46FA1AA31B3B009F1409 /* Build configuration list for PBXNativeTarget \"ICSMainFramework\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B0F46FB1AA31B3B009F1409 /* Debug */,\n\t\t\t\t9B0F46FC1AA31B3B009F1409 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B0F46FD1AA31B3B009F1409 /* Build configuration list for PBXNativeTarget \"ICSMainFrameworkTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B0F46FE1AA31B3B009F1409 /* Debug */,\n\t\t\t\t9B0F46FF1AA31B3B009F1409 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 9B0F46DB1AA31B3B009F1409 /* Project object */;\n}\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ICSMainFramework.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFramework.xcodeproj/xcshareddata/xcschemes/ICSMainFramework.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0610\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9B0F46E31AA31B3B009F1409\"\n               BuildableName = \"ICSMainFramework.framework\"\n               BlueprintName = \"ICSMainFramework\"\n               ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9B0F46EE1AA31B3B009F1409\"\n               BuildableName = \"ICSMainFrameworkTests.xctest\"\n               BlueprintName = \"ICSMainFrameworkTests\"\n               ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"9B0F46EE1AA31B3B009F1409\"\n               BuildableName = \"ICSMainFrameworkTests.xctest\"\n               BlueprintName = \"ICSMainFrameworkTests\"\n               ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9B0F46E31AA31B3B009F1409\"\n            BuildableName = \"ICSMainFramework.framework\"\n            BlueprintName = \"ICSMainFramework\"\n            ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      allowLocationSimulation = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9B0F46E31AA31B3B009F1409\"\n            BuildableName = \"ICSMainFramework.framework\"\n            BlueprintName = \"ICSMainFramework\"\n            ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"9B0F46E31AA31B3B009F1409\"\n            BuildableName = \"ICSMainFramework.framework\"\n            BlueprintName = \"ICSMainFramework\"\n            ReferencedContainer = \"container:ICSMainFramework.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFrameworkTests/ICSMainFrameworkTests.swift",
    "content": "//\n//  ICSMainFrameworkTests.swift\n//  ICSMainFrameworkTests\n//\n//  Created by LEI on 3/1/15.\n//  Copyright (c) 2015 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport XCTest\n\nclass ICSMainFrameworkTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        XCTAssert(true, \"Pass\")\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measureBlock() {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Library/ICSMainFramework/ICSMainFrameworkTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>com.touchingapp.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(CURRENT_PROJECT_VERSION)</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/actionlist.h",
    "content": "/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/actionlist.h,v $\n *\n * Purpose     :  Master list of supported actions.\n *                Not really a header, since it generates code.\n *                This is included (3 times!) from actions.c\n *                Each time, the following macros are defined to\n *                suitable values beforehand:\n *                    DEFINE_ACTION_MULTI()\n *                    DEFINE_ACTION_STRING()\n *                    DEFINE_ACTION_BOOL()\n *                    DEFINE_ACTION_ALIAS\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#if !(defined(DEFINE_ACTION_BOOL) && defined(DEFINE_ACTION_MULTI) && defined(DEFINE_ACTION_STRING))\n#error Please define lots of macros before including \"actionlist.h\".\n#endif /* !defined(all the DEFINE_ACTION_xxx macros) */\n\n#ifndef DEFINE_CGI_PARAM_RADIO\n#define DEFINE_CGI_PARAM_RADIO(name, bit, index, value, is_default)\n#define DEFINE_CGI_PARAM_CUSTOM(name, bit, index, default_val)\n#define DEFINE_CGI_PARAM_NO_RADIO(name, bit, index, default_val)\n#endif /* ndef DEFINE_CGI_PARAM_RADIO */\n\nDEFINE_ACTION_MULTI      (\"add-header\",                 ACTION_MULTI_ADD_HEADER)\nDEFINE_ACTION_STRING     (\"block\",                      ACTION_BLOCK, ACTION_STRING_BLOCK)\nDEFINE_CGI_PARAM_NO_RADIO(\"block\",                      ACTION_BLOCK, ACTION_STRING_BLOCK, \"No reason specified.\")\nDEFINE_ACTION_STRING     (\"change-x-forwarded-for\",     ACTION_CHANGE_X_FORWARDED_FOR,  ACTION_STRING_CHANGE_X_FORWARDED_FOR)\nDEFINE_CGI_PARAM_RADIO   (\"change-x-forwarded-for\",     ACTION_CHANGE_X_FORWARDED_FOR,  ACTION_STRING_CHANGE_X_FORWARDED_FOR, \"block\", 0)\nDEFINE_CGI_PARAM_RADIO   (\"change-x-forwarded-for\",     ACTION_CHANGE_X_FORWARDED_FOR,  ACTION_STRING_CHANGE_X_FORWARDED_FOR, \"add\", 1)\nDEFINE_ACTION_MULTI      (\"client-header-filter\",       ACTION_MULTI_CLIENT_HEADER_FILTER)\nDEFINE_ACTION_MULTI      (\"client-header-tagger\",       ACTION_MULTI_CLIENT_HEADER_TAGGER)\nDEFINE_ACTION_STRING     (\"content-type-overwrite\",     ACTION_CONTENT_TYPE_OVERWRITE, ACTION_STRING_CONTENT_TYPE)\nDEFINE_CGI_PARAM_NO_RADIO(\"content-type-overwrite\",     ACTION_CONTENT_TYPE_OVERWRITE, ACTION_STRING_CONTENT_TYPE,    \"text/html\")\nDEFINE_ACTION_STRING     (\"crunch-client-header\",       ACTION_CRUNCH_CLIENT_HEADER, ACTION_STRING_CLIENT_HEADER)\nDEFINE_CGI_PARAM_NO_RADIO(\"crunch-client-header\",       ACTION_CRUNCH_CLIENT_HEADER, ACTION_STRING_CLIENT_HEADER,          \"X-Whatever:\")\nDEFINE_ACTION_BOOL       (\"crunch-if-none-match\",       ACTION_CRUNCH_IF_NONE_MATCH)\nDEFINE_ACTION_BOOL       (\"crunch-incoming-cookies\",    ACTION_CRUNCH_INCOMING_COOKIES)\nDEFINE_ACTION_BOOL       (\"crunch-outgoing-cookies\",    ACTION_CRUNCH_OUTGOING_COOKIES)\nDEFINE_ACTION_STRING     (\"crunch-server-header\",       ACTION_CRUNCH_SERVER_HEADER, ACTION_STRING_SERVER_HEADER)\nDEFINE_CGI_PARAM_NO_RADIO(\"crunch-server-header\",       ACTION_CRUNCH_SERVER_HEADER, ACTION_STRING_SERVER_HEADER,          \"X-Whatever:\")\nDEFINE_ACTION_STRING     (\"deanimate-gifs\",             ACTION_DEANIMATE,       ACTION_STRING_DEANIMATE)\nDEFINE_CGI_PARAM_RADIO   (\"deanimate-gifs\",             ACTION_DEANIMATE,       ACTION_STRING_DEANIMATE,     \"first\", 0)\nDEFINE_CGI_PARAM_RADIO   (\"deanimate-gifs\",             ACTION_DEANIMATE,       ACTION_STRING_DEANIMATE,     \"last\",  1)\nDEFINE_ACTION_BOOL       (\"downgrade-http-version\",     ACTION_DOWNGRADE)\n#ifdef FEATURE_EXTERNAL_FILTERS\nDEFINE_ACTION_MULTI      (\"external-filter\",            ACTION_MULTI_EXTERNAL_FILTER)\n#endif\n#ifdef FEATURE_FAST_REDIRECTS\nDEFINE_ACTION_STRING     (\"fast-redirects\",             ACTION_FAST_REDIRECTS,  ACTION_STRING_FAST_REDIRECTS)\nDEFINE_CGI_PARAM_RADIO   (\"fast-redirects\",             ACTION_FAST_REDIRECTS,  ACTION_STRING_FAST_REDIRECTS, \"simple-check\",  0)\nDEFINE_CGI_PARAM_RADIO   (\"fast-redirects\",             ACTION_FAST_REDIRECTS,  ACTION_STRING_FAST_REDIRECTS, \"check-decoded-url\",  1)\n#endif /* def FEATURE_FAST_REDIRECTS */\nDEFINE_ACTION_MULTI      (\"filter\",                     ACTION_MULTI_FILTER)\nDEFINE_ACTION_BOOL       (\"force-text-mode\",            ACTION_FORCE_TEXT_MODE)\nDEFINE_ACTION_STRING     (\"forward-override\",           ACTION_FORWARD_OVERRIDE, ACTION_STRING_FORWARD_OVERRIDE)\nDEFINE_CGI_PARAM_CUSTOM  (\"forward-override\",           ACTION_FORWARD_OVERRIDE, ACTION_STRING_FORWARD_OVERRIDE, \"forward .\")\n\n// For Potatso Rules\n// URL Rules\nDEFINE_ACTION_STRING     (\"forward-rule\",               ACTION_FORWARD_RULE, ACTION_STRING_FORWARD_RULE)\n// IP Rules\nDEFINE_ACTION_STRING     (\"forward-resolved-ip\",        ACTION_FORWARD_RESOLVED_IP, ACTION_STRING_FORWARD_RESOLVED_IP)\n\nDEFINE_ACTION_BOOL       (\"handle-as-empty-document\",   ACTION_HANDLE_AS_EMPTY_DOCUMENT)\nDEFINE_ACTION_BOOL       (\"handle-as-image\",            ACTION_IMAGE)\nDEFINE_ACTION_STRING     (\"hide-accept-language\",       ACTION_HIDE_ACCEPT_LANGUAGE, ACTION_STRING_LANGUAGE)\nDEFINE_CGI_PARAM_RADIO   (\"hide-accept-language\",       ACTION_HIDE_ACCEPT_LANGUAGE, ACTION_STRING_LANGUAGE, \"block\", 0)\nDEFINE_CGI_PARAM_CUSTOM  (\"hide-accept-language\",       ACTION_HIDE_ACCEPT_LANGUAGE, ACTION_STRING_LANGUAGE, \"de-de\")\nDEFINE_ACTION_STRING     (\"hide-content-disposition\",   ACTION_HIDE_CONTENT_DISPOSITION, ACTION_STRING_CONTENT_DISPOSITION)\nDEFINE_CGI_PARAM_RADIO   (\"hide-content-disposition\",   ACTION_HIDE_CONTENT_DISPOSITION, ACTION_STRING_CONTENT_DISPOSITION,    \"block\", 0)\nDEFINE_CGI_PARAM_CUSTOM  (\"hide-content-disposition\",   ACTION_HIDE_CONTENT_DISPOSITION, ACTION_STRING_CONTENT_DISPOSITION,    \"attachment; filename=WHATEVER.txt\")\nDEFINE_ACTION_STRING     (\"hide-from-header\",           ACTION_HIDE_FROM,       ACTION_STRING_FROM)\nDEFINE_CGI_PARAM_RADIO   (\"hide-from-header\",           ACTION_HIDE_FROM,       ACTION_STRING_FROM,          \"block\", 1)\nDEFINE_CGI_PARAM_CUSTOM  (\"hide-from-header\",           ACTION_HIDE_FROM,       ACTION_STRING_FROM,          \"spam_me_senseless@sittingduck.xyz\")\nDEFINE_ACTION_STRING     (\"hide-if-modified-since\",     ACTION_HIDE_IF_MODIFIED_SINCE, ACTION_STRING_IF_MODIFIED_SINCE)\nDEFINE_CGI_PARAM_RADIO   (\"hide-if-modified-since\",     ACTION_HIDE_IF_MODIFIED_SINCE, ACTION_STRING_IF_MODIFIED_SINCE, \"block\", 0)\nDEFINE_CGI_PARAM_CUSTOM  (\"hide-if-modified-since\",     ACTION_HIDE_IF_MODIFIED_SINCE, ACTION_STRING_IF_MODIFIED_SINCE, \"-1\")\nDEFINE_ACTION_STRING     (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER)\nDEFINE_CGI_PARAM_RADIO   (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER,       \"conditional-forge\", 3)\nDEFINE_CGI_PARAM_RADIO   (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER,       \"conditional-block\", 2)\nDEFINE_CGI_PARAM_RADIO   (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER,       \"forge\", 1)\nDEFINE_CGI_PARAM_RADIO   (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER,       \"block\", 0)\nDEFINE_CGI_PARAM_CUSTOM  (\"hide-referrer\",              ACTION_HIDE_REFERER,    ACTION_STRING_REFERER,       \"http://www.privoxy.org/\")\nDEFINE_ACTION_STRING     (\"hide-user-agent\",            ACTION_HIDE_USER_AGENT, ACTION_STRING_USER_AGENT)\nDEFINE_CGI_PARAM_NO_RADIO(\"hide-user-agent\",            ACTION_HIDE_USER_AGENT, ACTION_STRING_USER_AGENT,    \"Privoxy \" VERSION)\nDEFINE_ACTION_STRING     (\"limit-connect\",              ACTION_LIMIT_CONNECT,   ACTION_STRING_LIMIT_CONNECT)\nDEFINE_CGI_PARAM_NO_RADIO(\"limit-connect\",              ACTION_LIMIT_CONNECT,   ACTION_STRING_LIMIT_CONNECT,  \"443\")\nDEFINE_ACTION_STRING     (\"limit-cookie-lifetime\",      ACTION_LIMIT_COOKIE_LIFETIME, ACTION_STRING_LIMIT_COOKIE_LIFETIME)\nDEFINE_CGI_PARAM_CUSTOM  (\"limit-cookie-lifetime\",      ACTION_LIMIT_COOKIE_LIFETIME, ACTION_STRING_LIMIT_COOKIE_LIFETIME, \"60\")\nDEFINE_ACTION_STRING     (\"overwrite-last-modified\",    ACTION_OVERWRITE_LAST_MODIFIED, ACTION_STRING_LAST_MODIFIED)\nDEFINE_CGI_PARAM_RADIO   (\"overwrite-last-modified\",    ACTION_OVERWRITE_LAST_MODIFIED, ACTION_STRING_LAST_MODIFIED, \"block\", 0)\nDEFINE_CGI_PARAM_RADIO   (\"overwrite-last-modified\",    ACTION_OVERWRITE_LAST_MODIFIED, ACTION_STRING_LAST_MODIFIED, \"reset-to-request-time\", 1)\nDEFINE_CGI_PARAM_RADIO   (\"overwrite-last-modified\",    ACTION_OVERWRITE_LAST_MODIFIED, ACTION_STRING_LAST_MODIFIED, \"randomize\", 2)\nDEFINE_ACTION_BOOL       (\"prevent-compression\",        ACTION_NO_COMPRESSION)\nDEFINE_ACTION_STRING     (\"redirect\",                   ACTION_REDIRECT,        ACTION_STRING_REDIRECT)\nDEFINE_CGI_PARAM_NO_RADIO(\"redirect\",                   ACTION_REDIRECT,        ACTION_STRING_REDIRECT,  \"http://localhost/\")\nDEFINE_ACTION_MULTI      (\"server-header-filter\",       ACTION_MULTI_SERVER_HEADER_FILTER)\nDEFINE_ACTION_MULTI      (\"server-header-tagger\",       ACTION_MULTI_SERVER_HEADER_TAGGER)\nDEFINE_ACTION_BOOL       (\"session-cookies-only\",       ACTION_SESSION_COOKIES_ONLY)\nDEFINE_ACTION_STRING     (\"set-image-blocker\",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER)\nDEFINE_CGI_PARAM_RADIO   (\"set-image-blocker\",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER, \"pattern\", 1)\nDEFINE_CGI_PARAM_RADIO   (\"set-image-blocker\",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER, \"blank\", 0)\nDEFINE_CGI_PARAM_CUSTOM  (\"set-image-blocker\",          ACTION_IMAGE_BLOCKER,   ACTION_STRING_IMAGE_BLOCKER,  CGI_PREFIX \"send-banner?type=pattern\")\n\n#if DEFINE_ACTION_ALIAS\n\n/*\n * Alternative spellings\n */\nDEFINE_ACTION_STRING     (\"hide-referer\",   ACTION_HIDE_REFERER,    ACTION_STRING_REFERER)\nDEFINE_ACTION_BOOL       (\"prevent-keeping-cookies\", ACTION_SESSION_COOKIES_ONLY)\n\n/*\n * Pre-3.0.7 (pseudo) compatibility\n */\nDEFINE_ACTION_MULTI      (\"filter-client-headers\",       ACTION_MULTI_CLIENT_HEADER_FILTER)\nDEFINE_ACTION_MULTI      (\"filter-server-headers\",       ACTION_MULTI_SERVER_HEADER_FILTER)\n\n#endif /* if DEFINE_ACTION_ALIAS */\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n#undef DEFINE_CGI_PARAM_CUSTOM\n#undef DEFINE_CGI_PARAM_RADIO\n#undef DEFINE_CGI_PARAM_NO_RADIO\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/actions.h",
    "content": "#ifndef ACTIONS_H_INCLUDED\n#define ACTIONS_H_INCLUDED\n#define ACTIONS_H_VERSION \"$Id: actions.h,v 1.24 2013/11/24 14:27:27 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/actions.h,v $\n *\n * Purpose     :  Declares functions to work with actions files\n *                Functions declared include: FIXME\n *\n * Copyright   :  Written by and Copyright (C) 2001-2007 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\nstruct action_spec;\nstruct current_action_spec;\nstruct client_state;\n\n\n\n/* This structure is used to hold user-defined aliases */\nstruct action_alias\n{\n   const char * name;\n   struct action_spec action[1];\n   struct action_alias * next;\n};\n\n\nextern jb_err get_actions (char *line,\n                           struct action_alias * alias_list,\n                           struct action_spec *cur_action);\nextern void free_alias_list(struct action_alias *alias_list);\n\nextern void init_action(struct action_spec *dest);\nextern void free_action(struct action_spec *src);\nextern jb_err merge_actions (struct action_spec *dest,\n                             const struct action_spec *src);\nextern int update_action_bits_for_tag(struct client_state *csp, const char *tag);\nextern jb_err check_negative_tag_patterns(struct client_state *csp, unsigned int flag);\nextern jb_err copy_action (struct action_spec *dest,\n                           const struct action_spec *src);\nextern char * actions_to_text     (const struct action_spec *action);\nextern char * actions_to_html     (const struct client_state *csp,\n                                   const struct action_spec *action);\nextern void init_current_action     (struct current_action_spec *dest);\nextern void free_current_action     (struct current_action_spec *src);\nextern jb_err merge_current_action  (struct current_action_spec *dest,\n                                     const struct action_spec *src);\nextern char * current_action_to_html(const struct client_state *csp,\n                                     const struct current_action_spec *action);\nextern char * actions_to_line_of_text(const struct current_action_spec *action);\n\nextern jb_err get_action_token(char **line, char **name, char **value);\nextern void unload_actions_file(void *file_data);\nextern int load_action_files(struct client_state *csp);\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\nvoid unload_current_actions_file(void);\n#endif\n\n\n/* Revision control strings from this header and associated .c file */\nextern const char actions_rcs[];\nextern const char actions_h_rcs[];\n\n#endif /* ndef ACTIONS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/actions.m",
    "content": "const char actions_rcs[] = \"$Id: actions.c,v 1.95 2016/01/16 12:33:35 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/actions.c,v $\n *\n * Purpose     :  Declares functions to work with actions files\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <string.h>\n#include <assert.h>\n#include <stdlib.h>\n\n#ifdef FEATURE_PTHREAD\n#include <pthread.h>\n#endif\n\n#include \"project.h\"\n#include \"jcc.h\"\n#include \"list.h\"\n#include \"actions.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"loaders.h\"\n#include \"encode.h\"\n#include \"urlmatch.h\"\n#include \"cgi.h\"\n#include \"ssplit.h\"\n#include \"filters.h\"\n#include <Foundation/Foundation.h>\n\nconst char actions_h_rcs[] = ACTIONS_H_VERSION;\n\nstruct url_actions *po_url_rules = NULL;\nstruct url_actions *po_url_rules_tail = NULL;\n\nstruct url_actions *po_ip_rules = NULL;\nstruct url_actions *po_ip_rules_tail = NULL;\n\nstruct url_actions *po_dns_ip_rules = NULL;\nstruct url_actions *po_dns_ip_rules_tail = NULL;\n\n/*\n * We need the main list of options.\n *\n * First, we need a way to tell between boolean, string, and multi-string\n * options.  For string and multistring options, we also need to be\n * able to tell the difference between a \"+\" and a \"-\".  (For bools,\n * the \"+\"/\"-\" information is encoded in \"add\" and \"mask\").  So we use\n * an enumerated type (well, the preprocessor equivalent).  Here are\n * the values:\n */\nenum action_value_type {\n   AV_NONE       = 0, /* +opt -opt */\n   AV_ADD_STRING = 1, /* +stropt{string} */\n   AV_REM_STRING = 2, /* -stropt */\n   AV_ADD_MULTI  = 3, /* +multiopt{string} +multiopt{string2} */\n   AV_REM_MULTI  = 4  /* -multiopt{string} -multiopt          */\n};\n\n/*\n * We need a structure to hold the name, flag changes,\n * type, and string index.\n */\nstruct action_name\n{\n   const char * name;\n   unsigned long mask;                /* a bit set to \"0\" = remove action */\n   unsigned long add;                 /* a bit set to \"1\" = add action */\n   enum action_value_type value_type; /* an AV_... constant */\n   int index;                         /* index into strings[] or multi[] */\n};\n\n/*\n * And with those building blocks in place, here's the array.\n */\nstatic const struct action_name action_names[] =\n{\n   /*\n    * Well actually there's no data here - it's in actionlist.h\n    * This keeps it together to make it easy to change.\n    *\n    * Here's the macros used to format it:\n    */\n#define DEFINE_ACTION_MULTI(name,index)                   \\\n   { \"+\" name, ACTION_MASK_ALL, 0, AV_ADD_MULTI, index }, \\\n   { \"-\" name, ACTION_MASK_ALL, 0, AV_REM_MULTI, index },\n#define DEFINE_ACTION_STRING(name,flag,index)                 \\\n   { \"+\" name, ACTION_MASK_ALL, flag, AV_ADD_STRING, index }, \\\n   { \"-\" name, ~flag, 0, AV_REM_STRING, index },\n#define DEFINE_ACTION_BOOL(name,flag)   \\\n   { \"+\" name, ACTION_MASK_ALL, flag }, \\\n   { \"-\" name, ~flag, 0 },\n#define DEFINE_ACTION_ALIAS 1 /* Want aliases please */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n\n   { NULL, 0, 0 } /* End marker */\n};\n\n\nstatic int load_one_actions_file(struct client_state *csp, int fileid);\n\n\n/*********************************************************************\n *\n * Function    :  merge_actions\n *\n * Description :  Merge two actions together.\n *                Similar to \"dest += src\".\n *\n * Parameters  :\n *          1  :  dest = Actions to modify.\n *          2  :  src = Action to add.\n *\n * Returns     :  JB_ERR_OK or JB_ERR_MEMORY\n *\n *********************************************************************/\njb_err merge_actions (struct action_spec *dest,\n                      const struct action_spec *src)\n{\n   int i;\n   jb_err err;\n\n   dest->mask &= src->mask;\n   dest->add  &= src->mask;\n   dest->add  |= src->add;\n\n   for (i = 0; i < ACTION_STRING_COUNT; i++)\n   {\n      char * str = src->string[i];\n      if (str)\n      {\n         freez(dest->string[i]);\n         dest->string[i] = strdup_or_die(str);\n      }\n   }\n\n   for (i = 0; i < ACTION_MULTI_COUNT; i++)\n   {\n      if (src->multi_remove_all[i])\n      {\n         /* Remove everything from dest */\n         list_remove_all(dest->multi_remove[i]);\n         dest->multi_remove_all[i] = 1;\n\n         err = list_duplicate(dest->multi_add[i], src->multi_add[i]);\n      }\n      else if (dest->multi_remove_all[i])\n      {\n         /*\n          * dest already removes everything, so we only need to worry\n          * about what we add.\n          */\n         list_remove_list(dest->multi_add[i], src->multi_remove[i]);\n         err = list_append_list_unique(dest->multi_add[i], src->multi_add[i]);\n      }\n      else\n      {\n         /* No \"remove all\"s to worry about. */\n         list_remove_list(dest->multi_add[i], src->multi_remove[i]);\n         err = list_append_list_unique(dest->multi_remove[i], src->multi_remove[i]);\n         if (!err) err = list_append_list_unique(dest->multi_add[i], src->multi_add[i]);\n      }\n\n      if (err)\n      {\n         return err;\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  copy_action\n *\n * Description :  Copy an action_specs.\n *                Similar to \"dest = src\".\n *\n * Parameters  :\n *          1  :  dest = Destination of copy.\n *          2  :  src = Source for copy.\n *\n * Returns     :  JB_ERR_OK or JB_ERR_MEMORY\n *\n *********************************************************************/\njb_err copy_action (struct action_spec *dest,\n                    const struct action_spec *src)\n{\n   int i;\n   jb_err err = JB_ERR_OK;\n\n   free_action(dest);\n   memset(dest, '\\0', sizeof(*dest));\n\n   dest->mask = src->mask;\n   dest->add  = src->add;\n\n   for (i = 0; i < ACTION_STRING_COUNT; i++)\n   {\n      char * str = src->string[i];\n      if (str)\n      {\n         str = strdup_or_die(str);\n         dest->string[i] = str;\n      }\n   }\n\n   for (i = 0; i < ACTION_MULTI_COUNT; i++)\n   {\n      dest->multi_remove_all[i] = src->multi_remove_all[i];\n      err = list_duplicate(dest->multi_remove[i], src->multi_remove[i]);\n      if (err)\n      {\n         return err;\n      }\n      err = list_duplicate(dest->multi_add[i],    src->multi_add[i]);\n      if (err)\n      {\n         return err;\n      }\n   }\n   return err;\n}\n\n/*********************************************************************\n *\n * Function    :  free_action_spec\n *\n * Description :  Frees an action_spec and the memory used by it.\n *\n * Parameters  :\n *          1  :  src = Source to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_action_spec(struct action_spec *src)\n{\n   free_action(src);\n   freez(src);\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_action\n *\n * Description :  Destroy an action_spec.  Frees memory used by it,\n *                except for the memory used by the struct action_spec\n *                itself.\n *\n * Parameters  :\n *          1  :  src = Source to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_action (struct action_spec *src)\n{\n   int i;\n\n   if (src == NULL)\n   {\n      return;\n   }\n\n   for (i = 0; i < ACTION_STRING_COUNT; i++)\n   {\n      freez(src->string[i]);\n   }\n\n   for (i = 0; i < ACTION_MULTI_COUNT; i++)\n   {\n      destroy_list(src->multi_remove[i]);\n      destroy_list(src->multi_add[i]);\n   }\n\n   memset(src, '\\0', sizeof(*src));\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_action_token\n *\n * Description :  Parses a line for the first action.\n *                Modifies its input array, doesn't allocate memory.\n *                e.g. given:\n *                *line=\"  +abc{def}  -ghi \"\n *                Returns:\n *                *line=\"  -ghi \"\n *                *name=\"+abc\"\n *                *value=\"def\"\n *\n * Parameters  :\n *          1  :  line = [in] The line containing the action.\n *                       [out] Start of next action on line, or\n *                       NULL if we reached the end of line before\n *                       we found an action.\n *          2  :  name = [out] Start of action name, null\n *                       terminated.  NULL on EOL\n *          3  :  value = [out] Start of action value, null\n *                        terminated.  NULL if none or EOL.\n *\n * Returns     :  JB_ERR_OK => Ok\n *                JB_ERR_PARSE => Mismatched {} (line was trashed anyway)\n *\n *********************************************************************/\njb_err get_action_token(char **line, char **name, char **value)\n{\n   char * str = *line;\n   char ch;\n\n   /* set default returns */\n   *line = NULL;\n   *name = NULL;\n   *value = NULL;\n\n   /* Eat any leading whitespace */\n   while ((*str == ' ') || (*str == '\\t'))\n   {\n      str++;\n   }\n\n   if (*str == '\\0')\n   {\n      return 0;\n   }\n\n   if (*str == '{')\n   {\n      /* null name, just value is prohibited */\n      return JB_ERR_PARSE;\n   }\n\n   *name = str;\n\n   /* parse option */\n   while (((ch = *str) != '\\0') &&\n          (ch != ' ') && (ch != '\\t') && (ch != '{'))\n   {\n      if (ch == '}')\n      {\n         /* error, '}' without '{' */\n         return JB_ERR_PARSE;\n      }\n      str++;\n   }\n   *str = '\\0';\n\n   if (ch != '{')\n   {\n      /* no value */\n      if (ch == '\\0')\n      {\n         /* EOL - be careful not to run off buffer */\n         *line = str;\n      }\n      else\n      {\n         /* More to parse next time. */\n         *line = str + 1;\n      }\n      return JB_ERR_OK;\n   }\n\n   str++;\n   *value = str;\n\n   /* The value ends with the first non-escaped closing curly brace */\n   while ((str = strchr(str, '}')) != NULL)\n   {\n      if (str[-1] == '\\\\')\n      {\n         /* Overwrite the '\\' so the action doesn't see it. */\n         string_move(str-1, str);\n         continue;\n      }\n      break;\n   }\n   if (str == NULL)\n   {\n      /* error */\n      *value = NULL;\n      return JB_ERR_PARSE;\n   }\n\n   /* got value */\n   *str = '\\0';\n   *line = str + 1;\n\n   chomp(*value);\n\n   return JB_ERR_OK;\n}\n\n/*********************************************************************\n *\n * Function    :  action_used_to_be_valid\n *\n * Description :  Checks if unrecognized actions were valid in earlier\n *                releases.\n *\n * Parameters  :\n *          1  :  action = The string containing the action to check.\n *\n * Returns     :  True if yes, otherwise false.\n *\n *********************************************************************/\nstatic int action_used_to_be_valid(const char *action)\n{\n   static const char * const formerly_valid_actions[] = {\n      \"inspect-jpegs\",\n      \"kill-popups\",\n      \"send-vanilla-wafer\",\n      \"send-wafer\",\n      \"treat-forbidden-connects-like-blocks\",\n      \"vanilla-wafer\",\n      \"wafer\"\n   };\n   unsigned int i;\n\n   for (i = 0; i < SZ(formerly_valid_actions); i++)\n   {\n      if (0 == strcmpic(action, formerly_valid_actions[i]))\n      {\n         return TRUE;\n      }\n   }\n\n   return FALSE;\n}\n\n/*********************************************************************\n *\n * Function    :  get_actions\n *\n * Description :  Parses a list of actions.\n *\n * Parameters  :\n *          1  :  line = The string containing the actions.\n *                       Will be written to by this function.\n *          2  :  alias_list = Custom alias list, or NULL for none.\n *          3  :  cur_action = Where to store the action.  Caller\n *                             allocates memory.\n *\n * Returns     :  JB_ERR_OK => Ok\n *                JB_ERR_PARSE => Parse error (line was trashed anyway)\n *                nonzero => Out of memory (line was trashed anyway)\n *\n *********************************************************************/\njb_err get_actions(char *line,\n                   struct action_alias * alias_list,\n                   struct action_spec *cur_action)\n{\n   jb_err err;\n   init_action(cur_action);\n   cur_action->mask = ACTION_MASK_ALL;\n\n   while (line)\n   {\n      char * option = NULL;\n      char * value = NULL;\n\n      err = get_action_token(&line, &option, &value);\n      if (err)\n      {\n         return err;\n      }\n\n      if (option)\n      {\n         /* handle option in 'option' */\n\n         /* Check for standard action name */\n         const struct action_name * action = action_names;\n\n         while ((action->name != NULL) && (0 != strcmpic(action->name, option)))\n         {\n            action++;\n         }\n         if (action->name != NULL)\n         {\n            /* Found it */\n            cur_action->mask &= action->mask;\n            cur_action->add  &= action->mask;\n            cur_action->add  |= action->add;\n\n            switch (action->value_type)\n            {\n            case AV_NONE:\n               if (value != NULL)\n               {\n                  log_error(LOG_LEVEL_ERROR,\n                     \"Action %s does not take parameters but %s was given.\",\n                     action->name, value);\n                  return JB_ERR_PARSE;\n               }\n               break;\n            case AV_ADD_STRING:\n               {\n                  /* add single string. */\n                  if ((value == NULL) || (*value == '\\0'))\n                  {\n\n                        if (0 == strcmpic(action->name, \"+block\"))\n                        {\n                        /*\n                         * XXX: Temporary backwards compatibility hack.\n                         * XXX: should include line number.\n                         */\n                        value = \"No reason specified.\";\n                        log_error(LOG_LEVEL_ERROR,\n                           \"block action without reason found. This may \"\n                           \"become a fatal error in future versions.\");\n                        }\n                        else if (0 == strcmpic(action->name, \"+forward-resolved-ip\") || 0 == strcmpic(action->name, \"+forward-rule\") )\n                        {\n                            value = \"\";\n                        }\n                        else\n                        {\n                        return JB_ERR_PARSE;\n                        }\n                  }\n                  /* FIXME: should validate option string here */\n                  freez (cur_action->string[action->index]);\n                  cur_action->string[action->index] = strdup(value);\n                  if (NULL == cur_action->string[action->index])\n                  {\n                     return JB_ERR_MEMORY;\n                  }\n                  break;\n               }\n            case AV_REM_STRING:\n               {\n                  /* remove single string. */\n\n                  freez (cur_action->string[action->index]);\n                  break;\n               }\n            case AV_ADD_MULTI:\n               {\n                  /* append multi string. */\n\n                  struct list * remove_p = cur_action->multi_remove[action->index];\n                  struct list * add_p    = cur_action->multi_add[action->index];\n\n                  if ((value == NULL) || (*value == '\\0'))\n                  {\n                     return JB_ERR_PARSE;\n                  }\n\n                  list_remove_item(remove_p, value);\n                  err = enlist_unique(add_p, value, 0);\n                  if (err)\n                  {\n                     return err;\n                  }\n                  break;\n               }\n            case AV_REM_MULTI:\n               {\n                  /* remove multi string. */\n\n                  struct list * remove_p = cur_action->multi_remove[action->index];\n                  struct list * add_p    = cur_action->multi_add[action->index];\n\n                  if ((value == NULL) || (*value == '\\0')\n                     || ((*value == '*') && (value[1] == '\\0')))\n                  {\n                     /*\n                      * no option, or option == \"*\".\n                      *\n                      * Remove *ALL*.\n                      */\n                     list_remove_all(remove_p);\n                     list_remove_all(add_p);\n                     cur_action->multi_remove_all[action->index] = 1;\n                  }\n                  else\n                  {\n                     /* Valid option - remove only 1 option */\n\n                     if (!cur_action->multi_remove_all[action->index])\n                     {\n                        /* there isn't a catch-all in the remove list already */\n                        err = enlist_unique(remove_p, value, 0);\n                        if (err)\n                        {\n                           return err;\n                        }\n                     }\n                     list_remove_item(add_p, value);\n                  }\n                  break;\n               }\n            default:\n               /* Shouldn't get here unless there's memory corruption. */\n               assert(0);\n               return JB_ERR_PARSE;\n            }\n         }\n         else\n         {\n            /* try user aliases. */\n            const struct action_alias * alias = alias_list;\n\n            while ((alias != NULL) && (0 != strcmpic(alias->name, option)))\n            {\n               alias = alias->next;\n            }\n            if (alias != NULL)\n            {\n               /* Found it */\n               merge_actions(cur_action, alias->action);\n            }\n            else if (((size_t)2 < strlen(option)) && action_used_to_be_valid(option+1))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Action '%s' is no longer valid \"\n                  \"in this Privoxy release. Ignored.\", option+1);\n            }\n            else if (((size_t)2 < strlen(option)) && 0 == strcmpic(option+1, \"hide-forwarded-for-headers\"))\n            {\n               log_error(LOG_LEVEL_FATAL, \"The action 'hide-forwarded-for-headers' \"\n                  \"is no longer valid in this Privoxy release. \"\n                  \"Use 'change-x-forwarded-for' instead.\");\n            }\n            else\n            {\n               /* Bad action name */\n               /*\n                * XXX: This is a fatal error and Privoxy will later on exit\n                * in load_one_actions_file() because of an \"invalid line\".\n                *\n                * It would be preferable to name the offending option in that\n                * error message, but currently there is no way to do that and\n                * we have to live with two error messages for basically the\n                * same reason.\n                */\n               log_error(LOG_LEVEL_ERROR, \"Unknown action or alias: %s\", option);\n               return JB_ERR_PARSE;\n            }\n         }\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  init_current_action\n *\n * Description :  Zero out an action.\n *\n * Parameters  :\n *          1  :  dest = An uninitialized current_action_spec.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid init_current_action (struct current_action_spec *dest)\n{\n   memset(dest, '\\0', sizeof(*dest));\n\n   dest->flags = ACTION_MOST_COMPATIBLE;\n}\n\n\n/*********************************************************************\n *\n * Function    :  init_action\n *\n * Description :  Zero out an action.\n *\n * Parameters  :\n *          1  :  dest = An uninitialized action_spec.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid init_action (struct action_spec *dest)\n{\n   memset(dest, '\\0', sizeof(*dest));\n}\n\n\n/*********************************************************************\n *\n * Function    :  merge_current_action\n *\n * Description :  Merge two actions together.\n *                Similar to \"dest += src\".\n *                Differences between this and merge_actions()\n *                is that this one doesn't allocate memory for\n *                strings (so \"src\" better be in memory for at least\n *                as long as \"dest\" is, and you'd better free\n *                \"dest\" using \"free_current_action\").\n *                Also, there is no  mask or remove lists in dest.\n *                (If we're applying it to a URL, we don't need them)\n *\n * Parameters  :\n *          1  :  dest = Current actions, to modify.\n *          2  :  src = Action to add.\n *\n * Returns  0  :  no error\n *        !=0  :  error, probably JB_ERR_MEMORY.\n *\n *********************************************************************/\njb_err merge_current_action (struct current_action_spec *dest,\n                             const struct action_spec *src)\n{\n   int i;\n   jb_err err = JB_ERR_OK;\n\n   dest->flags  &= src->mask;\n   dest->flags  |= src->add;\n\n   for (i = 0; i < ACTION_STRING_COUNT; i++)\n   {\n      char * str = src->string[i];\n      if (str)\n      {\n         str = strdup_or_die(str);\n         freez(dest->string[i]);\n         dest->string[i] = str;\n      }\n   }\n\n   for (i = 0; i < ACTION_MULTI_COUNT; i++)\n   {\n      if (src->multi_remove_all[i])\n      {\n         /* Remove everything from dest, then add src->multi_add */\n         err = list_duplicate(dest->multi[i], src->multi_add[i]);\n         if (err)\n         {\n            return err;\n         }\n      }\n      else\n      {\n         list_remove_list(dest->multi[i], src->multi_remove[i]);\n         err = list_append_list_unique(dest->multi[i], src->multi_add[i]);\n         if (err)\n         {\n            return err;\n         }\n      }\n   }\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  update_action_bits_for_tag\n *\n * Description :  Updates the action bits based on the action sections\n *                whose tag patterns match a provided tag.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  tag = The tag on which the update should be based on\n *\n * Returns     :  0 if no tag matched, or\n *                1 otherwise\n *\n *********************************************************************/\nint update_action_bits_for_tag(struct client_state *csp, const char *tag)\n{\n   struct file_list *fl;\n   struct url_actions *b;\n\n   int updated = 0;\n   int i;\n\n   assert(tag);\n   assert(list_contains_item(csp->tags, tag));\n\n   /* Run through all action files, */\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))\n      {\n         /* Skip empty files */\n         continue;\n      }\n\n      /* and through all the action patterns, */\n      for (b = b->next; NULL != b; b = b->next)\n      {\n         /* skip everything but TAG patterns, */\n         if (!(b->url->flags & PATTERN_SPEC_TAG_PATTERN))\n         {\n            continue;\n         }\n\n         /* and check if one of the tag patterns matches the tag, */\n         if (0 == pcre_regexec(b->url->pattern.tag_regex, tag, 0, NULL, 0))\n         {\n            /* if it does, update the action bit map, */\n            if (merge_current_action(csp->action, b->action))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Out of memory while changing action bits\");\n            }\n            /* and signal the change. */\n            updated = 1;\n         }\n      }\n   }\n\n   return updated;\n}\n\n\n/*********************************************************************\n *\n * Function    :  check_negative_tag_patterns\n *\n * Description :  Updates the action bits based on NO-*-TAG patterns.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  flag = The tag pattern type\n *\n * Returns     :  JB_ERR_OK in case off success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err check_negative_tag_patterns(struct client_state *csp, unsigned int flag)\n{\n   struct list_entry *tag;\n   struct file_list *fl;\n   struct url_actions *b = NULL;\n   int i;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      fl = csp->actions_list[i];\n      if ((fl == NULL) || ((b = fl->f) == NULL))\n      {\n         continue;\n      }\n      for (b = b->next; NULL != b; b = b->next)\n      {\n         int tag_found = 0;\n         if (0 == (b->url->flags & flag))\n         {\n            continue;\n         }\n         for (tag = csp->tags->first; NULL != tag; tag = tag->next)\n         {\n            if (0 == pcre_regexec(b->url->pattern.tag_regex, tag->str, 0, NULL, 0))\n            {\n               /*\n                * The pattern matches at least one tag, thus the action\n                * section doesn't apply and we don't need to look at the\n                * other tags.\n                */\n               tag_found = 1;\n               break;\n            }\n         }\n         if (!tag_found)\n         {\n            /*\n             * The pattern doesn't match any tags,\n             * thus the action section applies.\n             */\n            if (merge_current_action(csp->action, b->action))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Out of memory while changing action bits\");\n               return JB_ERR_MEMORY;\n            }\n            log_error(LOG_LEVEL_HEADER, \"Updated action bits based on: %s\",\n               b->url->spec);\n         }\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_current_action\n *\n * Description :  Free memory used by a current_action_spec.\n *                Does not free the current_action_spec itself.\n *\n * Parameters  :\n *          1  :  src = Source to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_current_action(struct current_action_spec *src)\n{\n   int i;\n\n   for (i = 0; i < ACTION_STRING_COUNT; i++)\n   {\n      freez(src->string[i]);\n   }\n\n   for (i = 0; i < ACTION_MULTI_COUNT; i++)\n   {\n      destroy_list(src->multi[i]);\n   }\n\n   memset(src, '\\0', sizeof(*src));\n}\n\n\nstatic struct file_list *current_actions_file[MAX_AF_FILES]  = {\n   NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL\n};\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n/*********************************************************************\n *\n * Function    :  unload_current_actions_file\n *\n * Description :  Unloads current actions file - reset to state at\n *                beginning of program.\n *\n * Parameters  :  None\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_current_actions_file(void)\n{\n   int i;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (current_actions_file[i])\n      {\n         current_actions_file[i]->unloader = unload_actions_file;\n         current_actions_file[i] = NULL;\n      }\n   }\n}\n#endif /* FEATURE_GRACEFUL_TERMINATION */\n\n\n/*********************************************************************\n *\n * Function    :  unload_actions_file\n *\n * Description :  Unloads an actions module.\n *\n * Parameters  :\n *          1  :  file_data = the data structure associated with the\n *                            actions file.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_actions_file(void *file_data)\n{\n   struct url_actions * next;\n   struct url_actions * cur = (struct url_actions *)file_data;\n   while (cur != NULL)\n   {\n      next = cur->next;\n      free_pattern_spec(cur->url);\n      if ((next == NULL) || (next->action != cur->action))\n      {\n         /*\n          * As the action settings might be shared,\n          * we can only free them if the current\n          * url pattern is the last one, or if the\n          * next one is using different settings.\n          */\n         free_action_spec(cur->action);\n      }\n      freez(cur);\n      cur = next;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_alias_list\n *\n * Description :  Free memory used by a list of aliases.\n *\n * Parameters  :\n *          1  :  alias_list = Linked list to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_alias_list(struct action_alias *alias_list)\n{\n   while (alias_list != NULL)\n   {\n      struct action_alias * next = alias_list->next;\n      alias_list->next = NULL;\n      freez(alias_list->name);\n      free_action(alias_list->action);\n      free(alias_list);\n      alias_list = next;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  load_action_files\n *\n * Description :  Read and parse all the action files and add to files\n *                list.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint load_action_files(struct client_state *csp)\n{\n   int i;\n   int result;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->config->actions_file[i])\n      {\n         result = load_one_actions_file(csp, i);\n         if (result)\n         {\n            return result;\n         }\n      }\n      else if (current_actions_file[i])\n      {\n         current_actions_file[i]->unloader = unload_actions_file;\n         current_actions_file[i] = NULL;\n      }\n   }\n\n   return 0;\n}\n\n\n/*********************************************************************\n *\n * Function    :  referenced_filters_are_missing\n *\n * Description :  Checks if any filters of a certain type referenced\n *                in an action spec are missing.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  cur_action = The action spec to check.\n *          3  :  multi_index = The index where to look for the filter.\n *          4  :  filter_type = The filter type the caller is interested in.\n *\n * Returns     :  0 => All referenced filters exist, everything else is an error.\n *\n *********************************************************************/\nstatic int referenced_filters_are_missing(const struct client_state *csp,\n   const struct action_spec *cur_action, int multi_index, enum filter_type filter_type)\n{\n   struct list_entry *filtername;\n\n   for (filtername = cur_action->multi_add[multi_index]->first;\n        filtername; filtername = filtername->next)\n   {\n      if (NULL == get_filter(csp, filtername->str, filter_type))\n      {\n         log_error(LOG_LEVEL_ERROR, \"Missing filter '%s'\", filtername->str);\n         return 1;\n      }\n   }\n\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  action_spec_is_valid\n *\n * Description :  Should eventually figure out if an action spec\n *                is valid, but currently only checks that the\n *                referenced filters are accounted for.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  cur_action = The action spec to check.\n *\n * Returns     :  0 => No problems detected, everything else is an error.\n *\n *********************************************************************/\nstatic int action_spec_is_valid(struct client_state *csp, const struct action_spec *cur_action)\n{\n   struct {\n      int multi_index;\n      enum filter_type filter_type;\n   } filter_map[] = {\n      {ACTION_MULTI_FILTER, FT_CONTENT_FILTER},\n      {ACTION_MULTI_CLIENT_HEADER_FILTER, FT_CLIENT_HEADER_FILTER},\n      {ACTION_MULTI_SERVER_HEADER_FILTER, FT_SERVER_HEADER_FILTER},\n      {ACTION_MULTI_CLIENT_HEADER_TAGGER, FT_CLIENT_HEADER_TAGGER},\n      {ACTION_MULTI_SERVER_HEADER_TAGGER, FT_SERVER_HEADER_TAGGER}\n   };\n   int errors = 0;\n   int i;\n\n   for (i = 0; i < SZ(filter_map); i++)\n   {\n      errors += referenced_filters_are_missing(csp, cur_action,\n         filter_map[i].multi_index, filter_map[i].filter_type);\n   }\n\n   return errors;\n\n}\n\nstatic void loadIPCIDR(char *ipcidr, radix_tree_t *tree) {\n    struct access_control_addr addr;\n    if (acl_addr(ipcidr, &addr) < 0) {\n        log_error(LOG_LEVEL_ERROR, \"Invalid ip cidr address, port or netmask for geo-ip data \");\n        return ;\n    }\n    if (addr.addr.ss_family != AF_INET && addr.mask.ss_family != AF_INET) {\n        log_error(LOG_LEVEL_ERROR, \"Invalid ip cidr address, ipv6 not supported \");\n        return ;\n    }\n    struct sockaddr_in *sin = (struct sockaddr_in *)&addr.addr;\n    struct sockaddr_in *mask = (struct sockaddr_in *)&addr.mask;\n    radix32tree_insert(tree, ntohl(sin->sin_addr.s_addr), ntohl(mask->sin_addr.s_addr), 1);\n    freez(ipcidr);\n}\n\n\n/*********************************************************************\n *\n * Function    :  load_one_actions_file\n *\n * Description :  Read and parse a action file and add to files\n *                list.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  fileid = File index to load.\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nstatic int load_one_actions_file(struct client_state *csp, int fileid)\n{\n\n   /*\n    * Parser mode.\n    * Note: Keep these in the order they occur in the file, they are\n    * sometimes tested with <=\n    */\n   enum {\n      MODE_START_OF_FILE = 1,\n      MODE_SETTINGS      = 2,\n      MODE_DESCRIPTION   = 3,\n      MODE_ALIAS         = 4,\n      MODE_ACTIONS       = 5\n   } mode;\n\n   FILE *fp;\n   struct url_actions *last_perm;\n   struct url_actions *perm;\n   char  *buf;\n   struct file_list *fs;\n   struct action_spec * cur_action = NULL;\n   int cur_action_used = 0;\n   struct action_alias * alias_list = NULL;\n   unsigned long linenum = 0;\n   mode = MODE_START_OF_FILE;\n\n    int size = sizeof(struct url_actions);\n\n//    if (current_actions_file[fileid]) {\n//        csp->actions_list[fileid] = current_actions_file[fileid];\n//        return 0;\n//    }\n   if (!check_file_changed(current_actions_file[fileid], csp->config->actions_file[fileid], &fs))\n   {\n      /* No need to load */\n      csp->actions_list[fileid] = current_actions_file[fileid];\n      return 0;\n   }\n   if (!fs)\n   {\n      log_error(LOG_LEVEL_FATAL, \"can't load actions file '%s': %E. \"\n         \"Note that beginning with Privoxy 3.0.7, actions files have to be specified \"\n         \"with their complete file names.\", csp->config->actions_file[fileid]);\n      return 1; /* never get here */\n   }\n\n   fs->f = last_perm = (struct url_actions *)zalloc(sizeof(*last_perm));\n   if (last_perm == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL, \"can't load actions file '%s': out of memory!\",\n                csp->config->actions_file[fileid]);\n      return 1; /* never get here */\n   }\n\n   if ((fp = fopen(csp->config->actions_file[fileid], \"r\")) == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL, \"can't load actions file '%s': error opening file: %E\",\n                csp->config->actions_file[fileid]);\n      return 1; /* never get here */\n   }\n\n   log_error(LOG_LEVEL_INFO, \"Loading actions file: %s\", csp->config->actions_file[fileid]);\n\n   while (read_config_line(fp, &linenum, &buf) != NULL)\n   {\n      if (*buf == '{')\n      {\n         /* It's a header block */\n         if (buf[1] == '{')\n         {\n            /* It's {{settings}} or {{alias}} */\n            size_t len = strlen(buf);\n            char * start = buf + 2;\n            char * end = buf + len - 1;\n            if ((len < (size_t)5) || (*end-- != '}') || (*end-- != '}'))\n            {\n               /* too short */\n               fclose(fp);\n               log_error(LOG_LEVEL_FATAL,\n                  \"can't load actions file '%s': invalid line (%lu): %s\",\n                  csp->config->actions_file[fileid], linenum, buf);\n               return 1; /* never get here */\n            }\n\n            /* Trim leading and trailing whitespace. */\n            end[1] = '\\0';\n            chomp(start);\n\n            if (*start == '\\0')\n            {\n               /* too short */\n               fclose(fp);\n               log_error(LOG_LEVEL_FATAL,\n                  \"can't load actions file '%s': invalid line (%lu): {{ }}\",\n                  csp->config->actions_file[fileid], linenum);\n               return 1; /* never get here */\n            }\n\n            /*\n             * An actionsfile can optionally contain the following blocks.\n             * They *MUST* be in this order, to simplify processing:\n             *\n             * {{settings}}\n             * name=value...\n             *\n             * {{description}}\n             * ...free text, format TBD, but no line may start with a '{'...\n             *\n             * {{alias}}\n             * name=actions...\n             *\n             * The actual actions must be *after* these special blocks.\n             * None of these special blocks may be repeated.\n             *\n             */\n            if (0 == strcmpic(start, \"settings\"))\n            {\n               /* it's a {{settings}} block */\n               if (mode >= MODE_SETTINGS)\n               {\n                  /* {{settings}} must be first thing in file and must only\n                   * appear once.\n                   */\n                  fclose(fp);\n                  log_error(LOG_LEVEL_FATAL,\n                     \"can't load actions file '%s': line %lu: {{settings}} must only appear once, and it must be before anything else.\",\n                     csp->config->actions_file[fileid], linenum);\n               }\n               mode = MODE_SETTINGS;\n            }\n            else if (0 == strcmpic(start, \"description\"))\n            {\n               /* it's a {{description}} block */\n               if (mode >= MODE_DESCRIPTION)\n               {\n                  /* {{description}} is a singleton and only {{settings}} may proceed it\n                   */\n                  fclose(fp);\n                  log_error(LOG_LEVEL_FATAL,\n                     \"can't load actions file '%s': line %lu: {{description}} must only appear once, and only a {{settings}} block may be above it.\",\n                     csp->config->actions_file[fileid], linenum);\n               }\n               mode = MODE_DESCRIPTION;\n            }\n            else if (0 == strcmpic(start, \"alias\"))\n            {\n               /* it's an {{alias}} block */\n               if (mode >= MODE_ALIAS)\n               {\n                  /* {{alias}} must be first thing in file, possibly after\n                   * {{settings}} and {{description}}\n                   *\n                   * {{alias}} must only appear once.\n                   *\n                   * Note that these are new restrictions introduced in\n                   * v2.9.10 in order to make actionsfile editing simpler.\n                   * (Otherwise, reordering actionsfile entries without\n                   * completely rewriting the file becomes non-trivial)\n                   */\n                  fclose(fp);\n                  log_error(LOG_LEVEL_FATAL,\n                     \"can't load actions file '%s': line %lu: {{alias}} must only appear once, and it must be before all actions.\",\n                     csp->config->actions_file[fileid], linenum);\n               }\n               mode = MODE_ALIAS;\n            }\n            else\n            {\n               /* invalid {{something}} block */\n               fclose(fp);\n               log_error(LOG_LEVEL_FATAL,\n                  \"can't load actions file '%s': invalid line (%lu): {{%s}}\",\n                  csp->config->actions_file[fileid], linenum, start);\n               return 1; /* never get here */\n            }\n         }\n         else\n         {\n            /* It's an actions block */\n\n            char *actions_buf;\n            char * end;\n\n            /* set mode */\n            mode = MODE_ACTIONS;\n\n            /* free old action */\n            if (cur_action)\n            {\n               if (!cur_action_used)\n               {\n                  free_action_spec(cur_action);\n               }\n               cur_action = NULL;\n            }\n            cur_action_used = 0;\n            cur_action = (struct action_spec *)zalloc(sizeof(*cur_action));\n            if (cur_action == NULL)\n            {\n               fclose(fp);\n               log_error(LOG_LEVEL_FATAL,\n                  \"can't load actions file '%s': out of memory\",\n                  csp->config->actions_file[fileid]);\n               return 1; /* never get here */\n            }\n            init_action(cur_action);\n\n            /*\n             * Copy the buffer before messing with it as we may need the\n             * unmodified version in for the fatal error messages. Given\n             * that this is not a common event, we could instead simply\n             * read the line again.\n             *\n             * buf + 1 to skip the leading '{'\n             */\n            actions_buf = end = strdup_or_die(buf + 1);\n\n            /* check we have a trailing } and then trim it */\n            if (strlen(actions_buf))\n            {\n               end += strlen(actions_buf) - 1;\n            }\n            if (*end != '}')\n            {\n               /* No closing } */\n               fclose(fp);\n               freez(actions_buf);\n               log_error(LOG_LEVEL_FATAL, \"can't load actions file '%s': \"\n                  \"Missing trailing '}' in action section starting at line (%lu): %s\",\n                  csp->config->actions_file[fileid], linenum, buf);\n               return 1; /* never get here */\n            }\n            *end = '\\0';\n\n            /* trim any whitespace immediately inside {} */\n            chomp(actions_buf);\n\n            if (get_actions(actions_buf, alias_list, cur_action))\n            {\n               /* error */\n               fclose(fp);\n               freez(actions_buf);\n               log_error(LOG_LEVEL_FATAL, \"can't load actions file '%s': \"\n                  \"can't completely parse the action section starting at line (%lu): %s\",\n                  csp->config->actions_file[fileid], linenum, buf);\n               return 1; /* never get here */\n            }\n\n            if (action_spec_is_valid(csp, cur_action))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Invalid action section in file '%s', \"\n                  \"starting at line %lu: %s\",\n                  csp->config->actions_file[fileid], linenum, buf);\n            }\n\n            freez(actions_buf);\n         }\n      }\n      else if (mode == MODE_SETTINGS)\n      {\n         /*\n          * Part of the {{settings}} block.\n          * For now only serves to check if the file's minimum Privoxy\n          * version requirement is met, but we may want to read & check\n          * permissions when we go multi-user.\n          */\n         if (!strncmp(buf, \"for-privoxy-version=\", 20))\n         {\n            char *version_string, *fields[3];\n            int num_fields;\n\n            version_string = strdup_or_die(buf + 20);\n\n            num_fields = ssplit(version_string, \".\", fields, SZ(fields));\n\n            if (num_fields < 1 || atoi(fields[0]) == 0)\n            {\n               log_error(LOG_LEVEL_ERROR,\n                 \"While loading actions file '%s': invalid line (%lu): %s\",\n                  csp->config->actions_file[fileid], linenum, buf);\n            }\n            else if (                  (atoi(fields[0]) > VERSION_MAJOR)\n               || ((num_fields > 1) && (atoi(fields[1]) > VERSION_MINOR))\n               || ((num_fields > 2) && (atoi(fields[2]) > VERSION_POINT)))\n            {\n               fclose(fp);\n               log_error(LOG_LEVEL_FATAL,\n                         \"Actions file '%s', line %lu requires newer Privoxy version: %s\",\n                         csp->config->actions_file[fileid], linenum, buf);\n               return 1; /* never get here */\n            }\n            free(version_string);\n         }\n      }\n      else if (mode == MODE_DESCRIPTION)\n      {\n         /*\n          * Part of the {{description}} block.\n          * Ignore for now.\n          */\n      }\n      else if (mode == MODE_ALIAS)\n      {\n         /*\n          * define an alias\n          */\n         char  actions_buf[BUFFER_SIZE];\n         struct action_alias * new_alias;\n\n         char * start = strchr(buf, '=');\n         char * end = start;\n\n         if ((start == NULL) || (start == buf))\n         {\n            log_error(LOG_LEVEL_FATAL,\n               \"can't load actions file '%s': invalid alias line (%lu): %s\",\n               csp->config->actions_file[fileid], linenum, buf);\n            return 1; /* never get here */\n         }\n\n         if ((new_alias = zalloc(sizeof(*new_alias))) == NULL)\n         {\n            fclose(fp);\n            log_error(LOG_LEVEL_FATAL,\n               \"can't load actions file '%s': out of memory!\",\n               csp->config->actions_file[fileid]);\n            return 1; /* never get here */\n         }\n\n         /* Eat any the whitespace before the '=' */\n         end--;\n         while ((*end == ' ') || (*end == '\\t'))\n         {\n            /*\n             * we already know we must have at least 1 non-ws char\n             * at start of buf - no need to check\n             */\n            end--;\n         }\n         end[1] = '\\0';\n\n         /* Eat any the whitespace after the '=' */\n         start++;\n         while ((*start == ' ') || (*start == '\\t'))\n         {\n            start++;\n         }\n         if (*start == '\\0')\n         {\n            log_error(LOG_LEVEL_FATAL,\n               \"can't load actions file '%s': invalid alias line (%lu): %s\",\n               csp->config->actions_file[fileid], linenum, buf);\n            return 1; /* never get here */\n         }\n\n         new_alias->name = strdup_or_die(buf);\n\n         strlcpy(actions_buf, start, sizeof(actions_buf));\n\n         if (get_actions(actions_buf, alias_list, new_alias->action))\n         {\n            /* error */\n            fclose(fp);\n            log_error(LOG_LEVEL_FATAL,\n               \"can't load actions file '%s': invalid alias line (%lu): %s = %s\",\n               csp->config->actions_file[fileid], linenum, buf, start);\n            return 1; /* never get here */\n         }\n\n         /* add to list */\n         new_alias->next = alias_list;\n         alias_list = new_alias;\n      }\n      else if (mode == MODE_ACTIONS)\n      {\n         /* it's an URL pattern */\n\n         /* allocate a new node */\n         if ((perm = zalloc(sizeof(*perm))) == NULL)\n         {\n            fclose(fp);\n            log_error(LOG_LEVEL_FATAL,\n               \"can't load actions file '%s': out of memory!\",\n               csp->config->actions_file[fileid]);\n            return 1; /* never get here */\n         }\n\n         perm->action = cur_action;\n         cur_action_used = 1;\n          int vec_count;\n          char *vec[3];\n          char desc[BUFFER_SIZE];\n\n          /* Create a copy ssplit can modify */\n          strlcpy(desc, buf, sizeof(desc));\n          perm->rule = strdup_or_die(buf);\n\n          vec_count = ssplit(desc, \", \", vec, SZ(vec));\n\n          if (vec_count != 3) {\n              if (create_pattern_spec(perm->url, buf))\n              {\n                  log_error(LOG_LEVEL_ERROR,\n                            \"can't load actions file '%s': line %lu: cannot create URL or TAG pattern from: %s\",\n                            csp->config->actions_file[fileid], linenum, buf);\n                  continue;\n              }\n              /* add it to the list */\n              last_perm->next = perm;\n              last_perm = perm;\n              continue;\n          }\n          if (!strcmpic(vec[2], \"PROXY\")) {\n              perm->routing = ROUTE_PROXY;\n          }else if (!strcmpic(vec[2], \"DIRECT\")) {\n              perm->routing = ROUTE_DIRECT;\n          }else if (!strcmpic(vec[2], \"REJECT\")) {\n              perm->routing = ROUTE_BLOCK;\n          }else {\n              log_error(LOG_LEVEL_ERROR,\n                        \"can't load actions file '%s': line %lu: cannot parse rule action from: %s\",\n                        csp->config->actions_file[fileid], linenum, buf);\n              continue;\n          }\n          if (!strcmpic(vec[0], \"GEOIP\") || !strcmpic(vec[0], \"IP-CIDR\") || !strcmpic(vec[0], \"DNS-IP-CIDR\")) {\n              if (!strcmpic(vec[0], \"GEOIP\")) {\n                  perm->geoip = strdup_or_die(vec[1]);\n                  if (MMDB_SUCCESS == MMDB_open(csp->config->mmdbpath, 0, &mmdb)) {\n                      if (po_ip_rules_tail) {\n                          po_ip_rules_tail->next = perm;\n                          po_ip_rules_tail = perm;\n                      } else {\n                          po_ip_rules = perm;\n                          po_ip_rules_tail = po_ip_rules;\n                      }\n                  }\n              } else {\n                  if (!perm->tree) {\n                      radix_tree_t *tree;\n                      if ((tree = radix_tree_create()) == NULL)\n                      {\n                          fclose(fp);\n                          log_error(LOG_LEVEL_FATAL,\n                                    \"can't load actions file '%s': out of memory!\",\n                                    csp->config->actions_file[fileid]);\n                          return 1; /* never get here */\n                      }\n                      perm->tree = tree;\n                  }\n                  if (!strcmpic(vec[0], \"IP-CIDR\")) {\n                      // CIDR\n                      char *ipcidr = strdup_or_die(vec[1]);\n                      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n                          loadIPCIDR(ipcidr, perm->tree);\n                      });\n                      if (po_ip_rules_tail) {\n                          po_ip_rules_tail->next = perm;\n                          po_ip_rules_tail = perm;\n                      }else {\n                          po_ip_rules = perm;\n                          po_ip_rules_tail = po_ip_rules;\n                      }\n                  } else if (!strcmpic(vec[0], \"DNS-IP-CIDR\")) {\n                      // DNS CIDR\n                      char *ipcidr = strdup_or_die(vec[1]);\n                      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{\n                          loadIPCIDR(ipcidr, perm->tree);\n                      });\n                      if (po_dns_ip_rules_tail) {\n                          po_dns_ip_rules_tail->next = perm;\n                          po_dns_ip_rules_tail = perm;\n                      }else {\n                          po_dns_ip_rules = perm;\n                          po_dns_ip_rules_tail = po_dns_ip_rules;\n                      }\n                  }\n              }\n\n          }else if (!strcmpic(vec[0], \"DOMAIN\") || !strcmpic(vec[0], \"DOMAIN-MATCH\") || !strcmpic(vec[0], \"URL\") || !strcmpic(vec[0], \"DOMAIN-SUFFIX\")){\n              char pattern[500];\n              if (!strcmpic(vec[0], \"DOMAIN-MATCH\")) {\n                  sprintf(pattern, \".*%s*.\", vec[1]);\n              }else if (!strcmpic(vec[0], \"DOMAIN-SUFFIX\")) {\n                  sprintf(pattern, \".%s\", vec[1]);\n              }else{\n                  sprintf(pattern, \"%s\", vec[1]);\n              }\n              if (create_pattern_spec(perm->url, pattern))\n              {\n                  log_error(LOG_LEVEL_ERROR,\n                            \"can't load actions file '%s': line %lu: cannot create URL or TAG pattern from: %s\",\n                            csp->config->actions_file[fileid], linenum, buf);\n                  continue;\n              }\n              if (po_url_rules_tail) {\n                  po_url_rules_tail->next = perm;\n                  po_url_rules_tail = perm;\n              }else {\n                  po_url_rules = perm;\n                  po_url_rules_tail = po_url_rules;\n              }\n          }else{\n              log_error(LOG_LEVEL_ERROR,\n                        \"can't load actions file '%s': line %lu: cannot parse IP rule type from: %s\",\n                        csp->config->actions_file[fileid], linenum, buf);\n              continue;\n          }\n      }\n      else if (mode == MODE_START_OF_FILE)\n      {\n         /* oops - please have a {} line as 1st line in file. */\n         fclose(fp);\n         log_error(LOG_LEVEL_FATAL,\n            \"can't load actions file '%s': line %lu should begin with a '{': %s\",\n            csp->config->actions_file[fileid], linenum, buf);\n         return 1; /* never get here */\n      }\n      else\n      {\n         /* How did we get here? This is impossible! */\n         fclose(fp);\n         log_error(LOG_LEVEL_FATAL,\n            \"can't load actions file '%s': INTERNAL ERROR - mode = %d\",\n            csp->config->actions_file[fileid], mode);\n         return 1; /* never get here */\n      }\n      freez(buf);\n   }\n\n   fclose(fp);\n\n   if (!cur_action_used)\n   {\n      free_action_spec(cur_action);\n   }\n   free_alias_list(alias_list);\n\n   /* the old one is now obsolete */\n   if (current_actions_file[fileid])\n   {\n      current_actions_file[fileid]->unloader = unload_actions_file;\n   }\n\n   fs->next    = files->next;\n   files->next = fs;\n   current_actions_file[fileid] = fs;\n\n   csp->actions_list[fileid] = fs;\n\n   return(0);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  actions_to_text\n *\n * Description :  Converts a actionsfile entry from the internal\n *                structure into a text line.  The output is split\n *                into one line for each action with line continuation.\n *\n * Parameters  :\n *          1  :  action = The action to format.\n *\n * Returns     :  A string.  Caller must free it.\n *                NULL on out-of-memory error.\n *\n *********************************************************************/\nchar * actions_to_text(const struct action_spec *action)\n{\n   unsigned long mask = action->mask;\n   unsigned long add  = action->add;\n   char *result = strdup_or_die(\"\");\n   struct list_entry * lst;\n\n   /* sanity - prevents \"-feature +feature\" */\n   mask |= add;\n\n\n#define DEFINE_ACTION_BOOL(__name, __bit)          \\\n   if (!(mask & __bit))                            \\\n   {                                               \\\n      string_append(&result, \" -\" __name \" \\\\\\n\"); \\\n   }                                               \\\n   else if (add & __bit)                           \\\n   {                                               \\\n      string_append(&result, \" +\" __name \" \\\\\\n\"); \\\n   }\n\n#define DEFINE_ACTION_STRING(__name, __bit, __index)   \\\n   if (!(mask & __bit))                                \\\n   {                                                   \\\n      string_append(&result, \" -\" __name \" \\\\\\n\");     \\\n   }                                                   \\\n   else if (add & __bit)                               \\\n   {                                                   \\\n      string_append(&result, \" +\" __name \"{\");         \\\n      string_append(&result, action->string[__index]); \\\n      string_append(&result, \"} \\\\\\n\");                \\\n   }\n\n#define DEFINE_ACTION_MULTI(__name, __index)         \\\n   if (action->multi_remove_all[__index])            \\\n   {                                                 \\\n      string_append(&result, \" -\" __name \" \\\\\\n\");   \\\n   }                                                 \\\n   else                                              \\\n   {                                                 \\\n      lst = action->multi_remove[__index]->first;    \\\n      while (lst)                                    \\\n      {                                              \\\n         string_append(&result, \" -\" __name \"{\");    \\\n         string_append(&result, lst->str);           \\\n         string_append(&result, \"} \\\\\\n\");           \\\n         lst = lst->next;                            \\\n      }                                              \\\n   }                                                 \\\n   lst = action->multi_add[__index]->first;          \\\n   while (lst)                                       \\\n   {                                                 \\\n      string_append(&result, \" +\" __name \"{\");       \\\n      string_append(&result, lst->str);              \\\n      string_append(&result, \"} \\\\\\n\");              \\\n      lst = lst->next;                               \\\n   }\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  actions_to_html\n *\n * Description :  Converts a actionsfile entry from numeric form\n *                (\"mask\" and \"add\") to a <br>-separated HTML string\n *                in which each action is linked to its chapter in\n *                the user manual.\n *\n * Parameters  :\n *          1  :  csp    = Client state (for config)\n *          2  :  action = Action spec to be converted\n *\n * Returns     :  A string.  Caller must free it.\n *                NULL on out-of-memory error.\n *\n *********************************************************************/\nchar * actions_to_html(const struct client_state *csp,\n                       const struct action_spec *action)\n{\n   unsigned long mask = action->mask;\n   unsigned long add  = action->add;\n   char *result = strdup_or_die(\"\");\n   struct list_entry * lst;\n\n   /* sanity - prevents \"-feature +feature\" */\n   mask |= add;\n\n\n#define DEFINE_ACTION_BOOL(__name, __bit)       \\\n   if (!(mask & __bit))                         \\\n   {                                            \\\n      string_append(&result, \"\\n<br>-\");        \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n   }                                            \\\n   else if (add & __bit)                        \\\n   {                                            \\\n      string_append(&result, \"\\n<br>+\");        \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n   }\n\n#define DEFINE_ACTION_STRING(__name, __bit, __index) \\\n   if (!(mask & __bit))                              \\\n   {                                                 \\\n      string_append(&result, \"\\n<br>-\");             \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n   }                                                 \\\n   else if (add & __bit)                             \\\n   {                                                 \\\n      string_append(&result, \"\\n<br>+\");             \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n      string_append(&result, \"{\");                   \\\n      string_join(&result, html_encode(action->string[__index])); \\\n      string_append(&result, \"}\");                   \\\n   }\n\n#define DEFINE_ACTION_MULTI(__name, __index)          \\\n   if (action->multi_remove_all[__index])             \\\n   {                                                  \\\n      string_append(&result, \"\\n<br>-\");              \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n   }                                                  \\\n   else                                               \\\n   {                                                  \\\n      lst = action->multi_remove[__index]->first;     \\\n      while (lst)                                     \\\n      {                                               \\\n         string_append(&result, \"\\n<br>-\");           \\\n         string_join(&result, add_help_link(__name, csp->config)); \\\n         string_append(&result, \"{\");                 \\\n         string_join(&result, html_encode(lst->str)); \\\n         string_append(&result, \"}\");                 \\\n         lst = lst->next;                             \\\n      }                                               \\\n   }                                                  \\\n   lst = action->multi_add[__index]->first;           \\\n   while (lst)                                        \\\n   {                                                  \\\n      string_append(&result, \"\\n<br>+\");              \\\n      string_join(&result, add_help_link(__name, csp->config)); \\\n      string_append(&result, \"{\");                    \\\n      string_join(&result, html_encode(lst->str));    \\\n      string_append(&result, \"}\");                    \\\n      lst = lst->next;                                \\\n   }\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n\n   /* trim leading <br> */\n   if (result && *result)\n   {\n      char * s = result;\n      result = strdup(result + 5);\n      free(s);\n   }\n\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  current_actions_to_html\n *\n * Description :  Converts a curren action spec to a <br> separated HTML\n *                text in which each action is linked to its chapter in\n *                the user manual.\n *\n * Parameters  :\n *          1  :  csp    = Client state (for config)\n *          2  :  action = Current action spec to be converted\n *\n * Returns     :  A string.  Caller must free it.\n *                NULL on out-of-memory error.\n *\n *********************************************************************/\nchar *current_action_to_html(const struct client_state *csp,\n                             const struct current_action_spec *action)\n{\n   unsigned long flags  = action->flags;\n   struct list_entry * lst;\n   char *result   = strdup_or_die(\"\");\n   char *active   = strdup_or_die(\"\");\n   char *inactive = strdup_or_die(\"\");\n\n#define DEFINE_ACTION_BOOL(__name, __bit)  \\\n   if (flags & __bit)                      \\\n   {                                       \\\n      string_append(&active, \"\\n<br>+\");   \\\n      string_join(&active, add_help_link(__name, csp->config)); \\\n   }                                       \\\n   else                                    \\\n   {                                       \\\n      string_append(&inactive, \"\\n<br>-\"); \\\n      string_join(&inactive, add_help_link(__name, csp->config)); \\\n   }\n\n#define DEFINE_ACTION_STRING(__name, __bit, __index)   \\\n   if (flags & __bit)                                  \\\n   {                                                   \\\n      string_append(&active, \"\\n<br>+\");               \\\n      string_join(&active, add_help_link(__name, csp->config)); \\\n      string_append(&active, \"{\");                     \\\n      string_join(&active, html_encode(action->string[__index])); \\\n      string_append(&active, \"}\");                     \\\n   }                                                   \\\n   else                                                \\\n   {                                                   \\\n      string_append(&inactive, \"\\n<br>-\");             \\\n      string_join(&inactive, add_help_link(__name, csp->config)); \\\n   }\n\n#define DEFINE_ACTION_MULTI(__name, __index)           \\\n   lst = action->multi[__index]->first;                \\\n   if (lst == NULL)                                    \\\n   {                                                   \\\n      string_append(&inactive, \"\\n<br>-\");             \\\n      string_join(&inactive, add_help_link(__name, csp->config)); \\\n   }                                                   \\\n   else                                                \\\n   {                                                   \\\n      while (lst)                                      \\\n      {                                                \\\n         string_append(&active, \"\\n<br>+\");            \\\n         string_join(&active, add_help_link(__name, csp->config)); \\\n         string_append(&active, \"{\");                  \\\n         string_join(&active, html_encode(lst->str));  \\\n         string_append(&active, \"}\");                  \\\n         lst = lst->next;                              \\\n      }                                                \\\n   }\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n\n   if (active != NULL)\n   {\n      string_append(&result, active);\n      freez(active);\n   }\n   string_append(&result, \"\\n<br>\");\n   if (inactive != NULL)\n   {\n      string_append(&result, inactive);\n      freez(inactive);\n   }\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  action_to_line_of_text\n *\n * Description :  Converts a action spec to a single text line\n *                listing the enabled actions.\n *\n * Parameters  :\n *          1  :  action = Current action spec to be converted\n *\n * Returns     :  A string. Caller must free it.\n *                Out-of-memory errors are fatal.\n *\n *********************************************************************/\nchar *actions_to_line_of_text(const struct current_action_spec *action)\n{\n   char buffer[200];\n   struct list_entry *lst;\n   char *active;\n   const unsigned long flags = action->flags;\n\n   active = strdup_or_die(\"\");\n\n#define DEFINE_ACTION_BOOL(__name, __bit)               \\\n   if (flags & __bit)                                   \\\n   {                                                    \\\n      snprintf(buffer, sizeof(buffer), \"+%s \", __name); \\\n      string_append(&active, buffer);                   \\\n   }                                                    \\\n\n#define DEFINE_ACTION_STRING(__name, __bit, __index)    \\\n   if (flags & __bit)                                   \\\n   {                                                    \\\n      snprintf(buffer, sizeof(buffer), \"+%s{%s} \",      \\\n         __name, action->string[__index]);              \\\n      string_append(&active, buffer);                   \\\n   }                                                    \\\n\n#define DEFINE_ACTION_MULTI(__name, __index)            \\\n   lst = action->multi[__index]->first;                 \\\n   while (lst != NULL)                                  \\\n   {                                                    \\\n      snprintf(buffer, sizeof(buffer), \"+%s{%s} \",      \\\n         __name, lst->str);                             \\\n      string_append(&active, buffer);                   \\\n      lst = lst->next;                                  \\\n   }                                                    \\\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n\n   if (active == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL, \"Out of memory in action_to_line_of_text()\");\n   }\n\n   return active;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgi.c",
    "content": "const char cgi_rcs[] = \"$Id: cgi.c,v 1.160 2014/10/18 11:31:52 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgi.c,v $\n *\n * Purpose     :  Declares functions to intercept request, generate\n *                html or gif answers, and to compose HTTP resonses.\n *                This only contains the framework functions, the\n *                actual handler functions are declared elsewhere.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2004, 2006-2008\n *                the SourceForge Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <string.h>\n#include <limits.h>\n#include <assert.h>\n\n#ifdef FEATURE_COMPRESSION\n#include <zlib.h>\n#endif\n\n#include \"project.h\"\n#include \"cgi.h\"\n#include \"list.h\"\n#include \"encode.h\"\n#include \"ssplit.h\"\n#include \"errlog.h\"\n#include \"filters.h\"\n#include \"miscutil.h\"\n#include \"cgisimple.h\"\n#include \"jbsockets.h\"\n#if defined(FEATURE_CGI_EDIT_ACTIONS) || defined(FEATURE_TOGGLE)\n#include \"cgiedit.h\"\n#endif /* defined(FEATURE_CGI_EDIT_ACTIONS) || defined (FEATURE_TOGGLE) */\n\n/* loadcfg.h is for global_toggle_state only */\n#include \"loadcfg.h\"\n/* jcc.h is for mutex semaphore globals only */\n#include \"jcc.h\"\n\nconst char cgi_h_rcs[] = CGI_H_VERSION;\n\n/*\n * List of CGI functions: name, handler, description\n * Note: Do NOT use single quotes in the description;\n *       this will break the dynamic \"blocked\" template!\n */\nstatic const struct cgi_dispatcher cgi_dispatchers[] = {\n   { \"\",\n         cgi_default,\n         \"Privoxy main page\",\n         TRUE },\n#ifdef FEATURE_GRACEFUL_TERMINATION\n   { \"die\",\n         cgi_die,\n         \"<b>Shut down</b> - <em class=\\\"warning\\\">Do not deploy this build in a production environment, \"\n        \"this is a one click Denial Of Service attack!!!</em>\",\n         FALSE },\n#endif\n   { \"show-status\",\n         cgi_show_status,\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n        \"View &amp; change the current configuration\",\n#else\n        \"View the current configuration\",\n#endif\n         TRUE },\n   { \"show-version\",\n         cgi_show_version,\n         \"View the source code version numbers\",\n          TRUE },\n   { \"show-request\",\n         cgi_show_request,\n         \"View the request headers\",\n         TRUE },\n   { \"show-url-info\",\n         cgi_show_url_info,\n         \"Look up which actions apply to a URL and why\",\n         TRUE },\n#ifdef FEATURE_TOGGLE\n   { \"toggle\",\n         cgi_toggle,\n         \"Toggle Privoxy on or off\",\n         FALSE },\n#endif /* def FEATURE_TOGGLE */\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n   { \"edit-actions\", /* Edit the actions list */\n         cgi_edit_actions,\n         NULL, FALSE },\n   { \"eaa\", /* Shortcut for edit-actions-add-url-form */\n         cgi_edit_actions_add_url_form,\n         NULL, FALSE },\n   { \"eau\", /* Shortcut for edit-actions-url-form */\n         cgi_edit_actions_url_form,\n         NULL, FALSE },\n   { \"ear\", /* Shortcut for edit-actions-remove-url-form */\n         cgi_edit_actions_remove_url_form,\n         NULL, FALSE },\n   { \"eal\", /* Shortcut for edit-actions-list */\n         cgi_edit_actions_list,\n         NULL, FALSE },\n   { \"eafu\", /* Shortcut for edit-actions-for-url */\n         cgi_edit_actions_for_url,\n         NULL, FALSE },\n   { \"eas\", /* Shortcut for edit-actions-submit */\n         cgi_edit_actions_submit,\n         NULL, FALSE },\n   { \"easa\", /* Shortcut for edit-actions-section-add */\n         cgi_edit_actions_section_add,\n         NULL, FALSE  },\n   { \"easr\", /* Shortcut for edit-actions-section-remove */\n         cgi_edit_actions_section_remove,\n         NULL, FALSE  },\n   { \"eass\", /* Shortcut for edit-actions-section-swap */\n         cgi_edit_actions_section_swap,\n         NULL, FALSE  },\n   { \"edit-actions-for-url\",\n         cgi_edit_actions_for_url,\n         NULL, FALSE  /* Edit the actions for (a) specified URL(s) */ },\n   { \"edit-actions-list\",\n         cgi_edit_actions_list,\n         NULL, TRUE /* Edit the actions list */ },\n   { \"edit-actions-submit\",\n         cgi_edit_actions_submit,\n         NULL, FALSE /* Change the actions for (a) specified URL(s) */ },\n   { \"edit-actions-url\",\n         cgi_edit_actions_url,\n         NULL, FALSE /* Change a URL pattern in the actionsfile */ },\n   { \"edit-actions-url-form\",\n         cgi_edit_actions_url_form,\n         NULL, FALSE /* Form to change a URL pattern in the actionsfile */ },\n   { \"edit-actions-add-url\",\n         cgi_edit_actions_add_url,\n         NULL, FALSE /* Add a URL pattern to the actionsfile */ },\n   { \"edit-actions-add-url-form\",\n         cgi_edit_actions_add_url_form,\n         NULL, FALSE /* Form to add a URL pattern to the actionsfile */ },\n   { \"edit-actions-remove-url\",\n         cgi_edit_actions_remove_url,\n         NULL, FALSE /* Remove a URL pattern from the actionsfile */ },\n   { \"edit-actions-remove-url-form\",\n         cgi_edit_actions_remove_url_form,\n         NULL, FALSE /* Form to remove a URL pattern from the actionsfile */ },\n   { \"edit-actions-section-add\",\n         cgi_edit_actions_section_add,\n         NULL, FALSE /* Remove a section from the actionsfile */ },\n   { \"edit-actions-section-remove\",\n         cgi_edit_actions_section_remove,\n         NULL, FALSE /* Remove a section from the actionsfile */ },\n   { \"edit-actions-section-swap\",\n         cgi_edit_actions_section_swap,\n         NULL, FALSE /* Swap two sections in the actionsfile */ },\n#endif /* def FEATURE_CGI_EDIT_ACTIONS */\n   { \"error-favicon.ico\",\n         cgi_send_error_favicon,\n         NULL, TRUE /* Sends the favicon image for error pages. */ },\n   { \"favicon.ico\",\n         cgi_send_default_favicon,\n         NULL, TRUE /* Sends the default favicon image. */ },\n   { \"robots.txt\",\n         cgi_robots_txt,\n         NULL, TRUE /* Sends a robots.txt file to tell robots to go away. */ },\n   { \"send-banner\",\n         cgi_send_banner,\n         NULL, TRUE /* Send a built-in image */ },\n   { \"send-stylesheet\",\n         cgi_send_stylesheet,\n         NULL, FALSE /* Send templates/cgi-style.css */ },\n   { \"t\",\n         cgi_transparent_image,\n         NULL, TRUE /* Send a transparent image (short name) */ },\n   { \"url-info-osd.xml\",\n         cgi_send_url_info_osd,\n         NULL, TRUE /* Send templates/url-info-osd.xml */ },\n   { \"user-manual\",\n          cgi_send_user_manual,\n          NULL, TRUE /* Send user-manual */ },\n   { NULL, /* NULL Indicates end of list and default page */\n         cgi_error_404,\n         NULL, TRUE /* Unknown CGI page */ }\n};\n\n\n/*\n * Built-in images for ad replacement\n *\n * Hint: You can encode your own images like this:\n * cat your-image | perl -e 'while (read STDIN, $c, 1) { printf(\"\\\\%.3o\", unpack(\"C\", $c)); }'\n */\n\n#ifdef FEATURE_NO_GIFS\n\n/*\n * Checkerboard pattern, as a PNG.\n */\nconst char image_pattern_data[] =\n   \"\\211\\120\\116\\107\\015\\012\\032\\012\\000\\000\\000\\015\\111\\110\\104\"\n   \"\\122\\000\\000\\000\\004\\000\\000\\000\\004\\010\\006\\000\\000\\000\\251\"\n   \"\\361\\236\\176\\000\\000\\000\\006\\142\\113\\107\\104\\000\\000\\000\\000\"\n   \"\\000\\000\\371\\103\\273\\177\\000\\000\\000\\033\\111\\104\\101\\124\\010\"\n   \"\\327\\143\\140\\140\\140\\060\\377\\377\\377\\077\\003\\234\\106\\341\\060\"\n   \"\\060\\230\\063\\020\\124\\001\\000\\161\\021\\031\\241\\034\\364\\030\\143\"\n   \"\\000\\000\\000\\000\\111\\105\\116\\104\\256\\102\\140\\202\";\n\n/*\n * 1x1 transparant PNG.\n */\nconst char image_blank_data[] =\n \"\\211\\120\\116\\107\\015\\012\\032\\012\\000\\000\\000\\015\\111\\110\\104\\122\"\n \"\\000\\000\\000\\001\\000\\000\\000\\001\\001\\003\\000\\000\\000\\045\\333\\126\"\n \"\\312\\000\\000\\000\\003\\120\\114\\124\\105\\377\\377\\377\\247\\304\\033\\310\"\n \"\\000\\000\\000\\001\\164\\122\\116\\123\\000\\100\\346\\330\\146\\000\\000\\000\"\n \"\\001\\142\\113\\107\\104\\000\\210\\005\\035\\110\\000\\000\\000\\012\\111\\104\"\n \"\\101\\124\\170\\001\\143\\140\\000\\000\\000\\002\\000\\001\\163\\165\\001\\030\"\n \"\\000\\000\\000\\000\\111\\105\\116\\104\\256\\102\\140\\202\";\n#else\n\n/*\n * Checkerboard pattern, as a GIF.\n */\nconst char image_pattern_data[] =\n   \"\\107\\111\\106\\070\\071\\141\\004\\000\\004\\000\\200\\000\\000\\310\\310\"\n   \"\\310\\377\\377\\377\\041\\376\\016\\111\\040\\167\\141\\163\\040\\141\\040\"\n   \"\\142\\141\\156\\156\\145\\162\\000\\041\\371\\004\\001\\012\\000\\001\\000\"\n   \"\\054\\000\\000\\000\\000\\004\\000\\004\\000\\000\\002\\005\\104\\174\\147\"\n   \"\\270\\005\\000\\073\";\n\n/*\n * 1x1 transparant GIF.\n */\nconst char image_blank_data[] =\n   \"GIF89a\\001\\000\\001\\000\\200\\000\\000\\377\\377\\377\\000\\000\"\n   \"\\000!\\371\\004\\001\\000\\000\\000\\000,\\000\\000\\000\\000\\001\"\n   \"\\000\\001\\000\\000\\002\\002D\\001\\000;\";\n#endif\n\nconst size_t image_pattern_length = sizeof(image_pattern_data) - 1;\nconst size_t image_blank_length   = sizeof(image_blank_data) - 1;\n\n#ifdef FEATURE_COMPRESSION\n/*\n * Minimum length which a buffer has to reach before\n * we bother to (re-)compress it. Completely arbitrary.\n */\nconst size_t LOWER_LENGTH_LIMIT_FOR_COMPRESSION = 1024U;\n#endif\n\nstatic struct http_response cgi_error_memory_response[1];\n\nstatic struct http_response *dispatch_known_cgi(struct client_state * csp,\n                                                const char * path);\nstatic struct map *parse_cgi_parameters(char *argstring);\n\n\n/*********************************************************************\n *\n * Function    :  dispatch_cgi\n *\n * Description :  Checks if a request URL has either the magical\n *                hostname CGI_SITE_1_HOST (usually http://p.p/) or\n *                matches CGI_SITE_2_HOST CGI_SITE_2_PATH (usually\n *                http://config.privoxy.org/). If so, it passes\n *                the (rest of the) path onto dispatch_known_cgi, which\n *                calls the relevant CGI handler function.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  http_response if match, NULL if nonmatch or handler fail\n *\n *********************************************************************/\nstruct http_response *dispatch_cgi(struct client_state *csp)\n{\n   const char *host = csp->http->host;\n   const char *path = csp->http->path;\n\n   /*\n    * Should we intercept ?\n    */\n\n   /* Note: \"example.com\" and \"example.com.\" are equivalent hostnames. */\n\n   /* Either the host matches CGI_SITE_1_HOST ..*/\n   if (   ( (0 == strcmpic(host, CGI_SITE_1_HOST))\n         || (0 == strcmpic(host, CGI_SITE_1_HOST \".\")))\n       && (path[0] == '/'))\n   {\n      /* ..then the path will all be for us.  Remove leading '/' */\n      path++;\n   }\n   /* Or it's the host part CGI_SITE_2_HOST, and the path CGI_SITE_2_PATH */\n   else if ((  (0 == strcmpic(host, CGI_SITE_2_HOST))\n            || (0 == strcmpic(host, CGI_SITE_2_HOST \".\")))\n          && (0 == strncmpic(path, CGI_SITE_2_PATH, strlen(CGI_SITE_2_PATH))))\n   {\n      /* take everything following CGI_SITE_2_PATH */\n      path += strlen(CGI_SITE_2_PATH);\n      if (*path == '/')\n      {\n         /* skip the forward slash after CGI_SITE_2_PATH */\n         path++;\n      }\n      else if (*path != '\\0')\n      {\n         /*\n          * weirdness: URL is /configXXX, where XXX is some string\n          * Do *NOT* intercept.\n          */\n         return NULL;\n      }\n   }\n   else\n   {\n      /* Not a CGI */\n      return NULL;\n   }\n\n   if (strcmpic(csp->http->gpc, \"GET\")\n    && strcmpic(csp->http->gpc, \"HEAD\"))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"CGI request with unsupported method received: %s\", csp->http->gpc);\n      /*\n       * The CGI pages currently only support GET and HEAD requests.\n       *\n       * If the client used a different method, ditch any data following\n       * the current headers to reduce the likelihood of parse errors\n       * with the following request.\n       */\n      csp->client_iob->eod = csp->client_iob->cur;\n   }\n\n   /*\n    * This is a CGI call.\n    */\n\n   return dispatch_known_cgi(csp, path);\n}\n\n\n/*********************************************************************\n *\n * Function    :  grep_cgi_referrer\n *\n * Description :  Ugly provisorical fix that greps the value of the\n *                referer HTTP header field out of a linked list of\n *                strings like found at csp->headers. Will disappear\n *                in Privoxy 3.1.\n *\n *                FIXME: csp->headers ought to be csp->http->headers\n *                FIXME: Parsing all client header lines should\n *                       happen right after the request is received!\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  pointer to value (no copy!), or NULL if none found.\n *\n *********************************************************************/\nstatic char *grep_cgi_referrer(const struct client_state *csp)\n{\n   struct list_entry *p;\n\n   for (p = csp->headers->first; p != NULL; p = p->next)\n   {\n      if (p->str == NULL) continue;\n      if (strncmpic(p->str, \"Referer: \", 9) == 0)\n      {\n         return ((p->str) + 9);\n      }\n   }\n   return NULL;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  referrer_is_safe\n *\n * Description :  Decides whether we trust the Referer for\n *                CGI pages which are only meant to be reachable\n *                through Privoxy's web interface directly.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  TRUE  if the referrer is safe, or\n *                FALSE if the referrer is unsafe or not set.\n *\n *********************************************************************/\nstatic int referrer_is_safe(const struct client_state *csp)\n{\n   char *referrer;\n   static const char alternative_prefix[] = \"http://\" CGI_SITE_1_HOST \"/\";\n\n   referrer = grep_cgi_referrer(csp);\n\n   if (NULL == referrer)\n   {\n      /* No referrer, no access  */\n      log_error(LOG_LEVEL_ERROR, \"Denying access to %s. No referrer found.\",\n         csp->http->url);\n   }\n   else if ((0 == strncmp(referrer, CGI_PREFIX, sizeof(CGI_PREFIX)-1)\n         || (0 == strncmp(referrer, alternative_prefix, strlen(alternative_prefix)))))\n   {\n      /* Trustworthy referrer */\n      log_error(LOG_LEVEL_CGI, \"Granting access to %s, referrer %s is trustworthy.\",\n         csp->http->url, referrer);\n\n      return TRUE;\n   }\n   else\n   {\n      /* Untrustworthy referrer */\n      log_error(LOG_LEVEL_ERROR, \"Denying access to %s, referrer %s isn't trustworthy.\",\n         csp->http->url, referrer);\n   }\n\n   return FALSE;\n\n}\n\n/*********************************************************************\n *\n * Function    :  dispatch_known_cgi\n *\n * Description :  Processes a CGI once dispatch_cgi has determined that\n *                it matches one of the magic prefixes. Parses the path\n *                as a cgi name plus query string, prepares a map that\n *                maps CGI parameter names to their values, initializes\n *                the http_response struct, and calls the relevant CGI\n *                handler function.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  path = Path of CGI, with the CGI prefix removed.\n *                       Should not have a leading \"/\".\n *\n * Returns     :  http_response, or NULL on handler failure or out of\n *                memory.\n *\n *********************************************************************/\nstatic struct http_response *dispatch_known_cgi(struct client_state * csp,\n                                                const char * path)\n{\n   const struct cgi_dispatcher *d;\n   struct map *param_list;\n   struct http_response *rsp;\n   char *query_args_start;\n   char *path_copy;\n   jb_err err;\n\n   if (NULL == (path_copy = strdup(path)))\n   {\n      return cgi_error_memory();\n   }\n   query_args_start = path_copy;\n   while (*query_args_start && *query_args_start != '?' && *query_args_start != '/')\n   {\n      query_args_start++;\n   }\n   if (*query_args_start == '/')\n   {\n      *query_args_start++ = '\\0';\n      param_list = new_map();\n      err = map(param_list, \"file\", 1, url_decode(query_args_start), 0);\n      if (JB_ERR_OK != err) {\n         free(param_list);\n         free(path_copy);\n         return cgi_error_memory();\n      }\n   }\n   else\n   {\n      if (*query_args_start == '?')\n      {\n         *query_args_start++ = '\\0';\n      }\n      if (NULL == (param_list = parse_cgi_parameters(query_args_start)))\n      {\n         free(path_copy);\n         return cgi_error_memory();\n      }\n   }\n\n   /*\n    * At this point:\n    * path_copy        = CGI call name\n    * param_list       = CGI params, as map\n    */\n\n   /* Get mem for response or fail*/\n   if (NULL == (rsp = alloc_http_response()))\n   {\n      free(path_copy);\n      free_map(param_list);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Find and start the right CGI function\n    */\n   d = cgi_dispatchers;\n   for (;;)\n   {\n      if ((d->name == NULL) || (strcmp(path_copy, d->name) == 0))\n      {\n         /*\n          * If the called CGI is either harmless, or referred\n          * from a trusted source, start it.\n          */\n         if (d->harmless || referrer_is_safe(csp))\n         {\n            err = (d->handler)(csp, rsp, param_list);\n         }\n         else\n         {\n            /*\n             * Else, modify toggle calls so that they only display\n             * the status, and deny all other calls.\n             */\n            if (0 == strcmp(path_copy, \"toggle\"))\n            {\n               unmap(param_list, \"set\");\n               err = (d->handler)(csp, rsp, param_list);\n            }\n            else\n            {\n               err = cgi_error_disabled(csp, rsp);\n            }\n         }\n\n         free(path_copy);\n         free_map(param_list);\n\n         if (err == JB_ERR_CGI_PARAMS)\n         {\n            err = cgi_error_bad_param(csp, rsp);\n         }\n         if (err && (err != JB_ERR_MEMORY))\n         {\n            /* Unexpected error! Shouldn't get here */\n            log_error(LOG_LEVEL_ERROR,\n               \"Unexpected CGI error %d in top-level handler. \"\n               \"Please file a bug report!\", err);\n            err = cgi_error_unknown(csp, rsp, err);\n         }\n         if (!err)\n         {\n            /* It worked */\n            rsp->crunch_reason = CGI_CALL;\n            return finish_http_response(csp, rsp);\n         }\n         else\n         {\n            /* Error in handler, probably out-of-memory */\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n      }\n      d++;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_cgi_parameters\n *\n * Description :  Parse a URL-encoded argument string into name/value\n *                pairs and store them in a struct map list.\n *\n * Parameters  :\n *          1  :  argstring = string to be parsed.  Will be trashed.\n *\n * Returns     :  pointer to param list, or NULL if out of memory.\n *\n *********************************************************************/\nstatic struct map *parse_cgi_parameters(char *argstring)\n{\n   char *p;\n   char **vector;\n   int pairs, i;\n   struct map *cgi_params;\n\n   /*\n    * XXX: This estimate is guaranteed to be high enough as we\n    *      let ssplit() ignore empty fields, but also a bit wasteful.\n    *      The same hack is used in get_last_url() so it looks like\n    *      a real solution is needed.\n    */\n   size_t max_segments = strlen(argstring) / 2;\n   if (max_segments == 0)\n   {\n      /*\n       * XXX: If the argstring is empty, there's really\n       *      no point in creating a param list, but currently\n       *      other parts of Privoxy depend on the list's existence.\n       */\n      max_segments = 1;\n   }\n   vector = malloc_or_die(max_segments * sizeof(char *));\n\n   cgi_params = new_map();\n\n   /*\n    * IE 5 does, of course, violate RFC 2316 Sect 4.1 and sends\n    * the fragment identifier along with the request, so we must\n    * cut it off here, so it won't pollute the CGI params:\n    */\n   if (NULL != (p = strchr(argstring, '#')))\n   {\n      *p = '\\0';\n   }\n\n   pairs = ssplit(argstring, \"&\", vector, max_segments);\n   assert(pairs != -1);\n   if (pairs == -1)\n   {\n      freez(vector);\n      free_map(cgi_params);\n      return NULL;\n   }\n\n   for (i = 0; i < pairs; i++)\n   {\n      if ((NULL != (p = strchr(vector[i], '='))) && (*(p+1) != '\\0'))\n      {\n         *p = '\\0';\n         if (map(cgi_params, url_decode(vector[i]), 0, url_decode(++p), 0))\n         {\n            freez(vector);\n            free_map(cgi_params);\n            return NULL;\n         }\n      }\n   }\n\n   freez(vector);\n\n   return cgi_params;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_char_param\n *\n * Description :  Get a single-character parameter passed to a CGI\n *                function.\n *\n * Parameters  :\n *          1  :  parameters = map of cgi parameters\n *          2  :  param_name = The name of the parameter to read\n *\n * Returns     :  Uppercase character on success, '\\0' on error.\n *\n *********************************************************************/\nchar get_char_param(const struct map *parameters,\n                    const char *param_name)\n{\n   char ch;\n\n   assert(parameters);\n   assert(param_name);\n\n   ch = *(lookup(parameters, param_name));\n   if ((ch >= 'a') && (ch <= 'z'))\n   {\n      ch = (char)(ch - 'a' + 'A');\n   }\n\n   return ch;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_string_param\n *\n * Description :  Get a string paramater, to be used as an\n *                ACTION_STRING or ACTION_MULTI paramater.\n *                Validates the input to prevent stupid/malicious\n *                users from corrupting their action file.\n *\n * Parameters  :\n *          1  :  parameters = map of cgi parameters\n *          2  :  param_name = The name of the parameter to read\n *          3  :  pparam = destination for paramater.  Allocated as\n *                part of the map \"parameters\", so don't free it.\n *                Set to NULL if not specified.\n *\n * Returns     :  JB_ERR_OK         on success, or if the paramater\n *                                  was not specified.\n *                JB_ERR_MEMORY     on out-of-memory.\n *                JB_ERR_CGI_PARAMS if the paramater is not valid.\n *\n *********************************************************************/\njb_err get_string_param(const struct map *parameters,\n                        const char *param_name,\n                        const char **pparam)\n{\n   const char *param;\n   const char *s;\n   char ch;\n\n   assert(parameters);\n   assert(param_name);\n   assert(pparam);\n\n   *pparam = NULL;\n\n   param = lookup(parameters, param_name);\n   if (!*param)\n   {\n      return JB_ERR_OK;\n   }\n\n   if (strlen(param) >= CGI_PARAM_LEN_MAX)\n   {\n      /*\n       * Too long.\n       *\n       * Note that the length limit is arbitrary, it just seems\n       * sensible to limit it to *something*.  There's no\n       * technical reason for any limit at all.\n       */\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* Check every character to see if it's legal */\n   s = param;\n   while ((ch = *s++) != '\\0')\n   {\n      if (((unsigned char)ch < (unsigned char)' ')\n        || (ch == '}'))\n      {\n         /* Probable hack attempt, or user accidentally used '}'. */\n         return JB_ERR_CGI_PARAMS;\n      }\n   }\n\n   /* Success */\n   *pparam = param;\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_number_param\n *\n * Description :  Get a non-negative integer from the parameters\n *                passed to a CGI function.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  parameters = map of cgi parameters\n *          3  :  name = Name of CGI parameter to read\n *          4  :  pvalue = destination for value.\n *                         Set to -1 on error.\n *\n * Returns     :  JB_ERR_OK         on success\n *                JB_ERR_MEMORY     on out-of-memory\n *                JB_ERR_CGI_PARAMS if the parameter was not specified\n *                                  or is not valid.\n *\n *********************************************************************/\njb_err get_number_param(struct client_state *csp,\n                        const struct map *parameters,\n                        char *name,\n                        unsigned *pvalue)\n{\n   const char *param;\n   char ch;\n   unsigned value;\n\n   assert(csp);\n   assert(parameters);\n   assert(name);\n   assert(pvalue);\n\n   *pvalue = 0;\n\n   param = lookup(parameters, name);\n   if (!*param)\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* We don't use atoi because I want to check this carefully... */\n\n   value = 0;\n   while ((ch = *param++) != '\\0')\n   {\n      if ((ch < '0') || (ch > '9'))\n      {\n         return JB_ERR_CGI_PARAMS;\n      }\n\n      ch = (char)(ch - '0');\n\n      /* Note:\n       *\n       * <limits.h> defines UINT_MAX\n       *\n       * (UINT_MAX - ch) / 10 is the largest number that\n       *     can be safely multiplied by 10 then have ch added.\n       */\n      if (value > ((UINT_MAX - (unsigned)ch) / 10U))\n      {\n         return JB_ERR_CGI_PARAMS;\n      }\n\n      value = value * 10 + (unsigned)ch;\n   }\n\n   /* Success */\n   *pvalue = value;\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  error_response\n *\n * Description :  returns an http_response that explains the reason\n *                why a request failed.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  templatename = Which template should be used for the answer\n *\n * Returns     :  A http_response.  If we run out of memory, this\n *                will be cgi_error_memory().\n *\n *********************************************************************/\nstruct http_response *error_response(struct client_state *csp,\n                                     const char *templatename)\n{\n   jb_err err;\n   struct http_response *rsp;\n   struct map *exports = default_exports(csp, NULL);\n   char *path = NULL;\n\n   if (exports == NULL)\n   {\n      return cgi_error_memory();\n   }\n\n   if (NULL == (rsp = alloc_http_response()))\n   {\n      free_map(exports);\n      return cgi_error_memory();\n   }\n\n#ifdef FEATURE_FORCE_LOAD\n   if (csp->flags & CSP_FLAG_FORCED)\n   {\n      path = strdup(FORCE_PREFIX);\n   }\n   else\n#endif /* def FEATURE_FORCE_LOAD */\n   {\n      path = strdup(\"\");\n   }\n   err = string_append(&path, csp->http->path);\n\n   if (!err) err = map(exports, \"host\", 1, html_encode(csp->http->host), 0);\n   if (!err) err = map(exports, \"hostport\", 1, html_encode(csp->http->hostport), 0);\n   if (!err) err = map(exports, \"path\", 1, html_encode_and_free_original(path), 0);\n   if (!err) err = map(exports, \"protocol\", 1, csp->http->ssl ? \"https://\" : \"http://\", 1);\n   if (!err)\n   {\n     err = map(exports, \"host-ip\", 1, html_encode(csp->http->host_ip_addr_str), 0);\n     if (err)\n     {\n       /* Some failures, like \"404 no such domain\", don't have an IP address. */\n       err = map(exports, \"host-ip\", 1, html_encode(csp->http->host), 0);\n     }\n   }\n\n\n   if (err)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   if (!strcmp(templatename, \"no-such-domain\"))\n   {\n      rsp->status = strdup(\"404 No such domain\");\n      rsp->crunch_reason = NO_SUCH_DOMAIN;\n   }\n   else if (!strcmp(templatename, \"forwarding-failed\"))\n   {\n      const struct forward_spec *fwd = forward_url(csp, csp->http);\n      char *socks_type = NULL;\n      if (fwd == NULL)\n      {\n         log_error(LOG_LEVEL_FATAL, \"gateway spec is NULL. This shouldn't happen!\");\n         /* Never get here - LOG_LEVEL_FATAL causes program exit */\n      }\n\n      /*\n       * XXX: While the template is called forwarding-failed,\n       * it currently only handles socks forwarding failures.\n       */\n      assert(fwd != NULL);\n      assert(fwd->type != SOCKS_NONE);\n\n      /*\n       * Map failure reason, forwarding type and forwarder.\n       */\n      if (NULL == csp->error_message)\n      {\n         /*\n          * Either we forgot to record the failure reason,\n          * or the memory allocation failed.\n          */\n         log_error(LOG_LEVEL_ERROR, \"Socks failure reason missing.\");\n         csp->error_message = strdup(\"Failure reason missing. Check the log file for details.\");\n      }\n      if (!err) err = map(exports, \"gateway\", 1, fwd->gateway_host, 1);\n\n      /*\n       * XXX: this is almost the same code as in cgi_show_url_info()\n       * and thus should be factored out and shared.\n       */\n      switch (fwd->type)\n      {\n         case SOCKS_4:\n            socks_type = \"socks4-\";\n            break;\n         case SOCKS_4A:\n            socks_type = \"socks4a-\";\n            break;\n         case SOCKS_5:\n            socks_type = \"socks5-\";\n            break;\n         case SOCKS_5T:\n            socks_type = \"socks5t-\";\n            break;\n         default:\n            log_error(LOG_LEVEL_FATAL, \"Unknown socks type: %d.\", fwd->type);\n      }\n\n      if (!err) err = map(exports, \"forwarding-type\", 1, socks_type, 1);\n      if (!err) err = map(exports, \"error-message\", 1, html_encode(csp->error_message), 0);\n      if ((NULL == csp->error_message) || err)\n      {\n         free_map(exports);\n         free_http_response(rsp);\n         return cgi_error_memory();\n      }\n\n      rsp->status = strdup(\"503 Forwarding failure\");\n      rsp->crunch_reason = FORWARDING_FAILED;\n   }\n   else if (!strcmp(templatename, \"connect-failed\"))\n   {\n      rsp->status = strdup(\"503 Connect failed\");\n      rsp->crunch_reason = CONNECT_FAILED;\n   }\n   else if (!strcmp(templatename, \"connection-timeout\"))\n   {\n      rsp->status = strdup(\"504 Connection timeout\");\n      rsp->crunch_reason = CONNECTION_TIMEOUT;\n   }\n   else if (!strcmp(templatename, \"no-server-data\"))\n   {\n      rsp->status = strdup(\"502 No data received from server or forwarder\");\n      rsp->crunch_reason = NO_SERVER_DATA;\n   }\n\n   if (rsp->status == NULL)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   err = template_fill_for_cgi(csp, templatename, exports, rsp);\n   if (err)\n   {\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   return finish_http_response(csp, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_disabled\n *\n * Description :  CGI function that is called to generate an error\n *                response if the actions editor or toggle CGI are\n *                accessed despite having being disabled at compile-\n *                or run-time, or if the user followed an untrusted link\n *                to access a unsafe CGI feature that is only reachable\n *                through Privoxy directly.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_disabled(const struct client_state *csp,\n                          struct http_response *rsp)\n{\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n\n   if (NULL == (exports = default_exports(csp, \"cgi-error-disabled\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n   if (map(exports, \"url\", 1, html_encode(csp->http->url), 0))\n   {\n      /* Not important enough to do anything */\n      log_error(LOG_LEVEL_ERROR, \"Failed to fill in url.\");\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-disabled\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_init_error_messages\n *\n * Description :  Call at the start of the program to initialize\n *                the error message used by cgi_error_memory().\n *\n * Parameters  :  N/A\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid cgi_init_error_messages(void)\n{\n   memset(cgi_error_memory_response, '\\0', sizeof(*cgi_error_memory_response));\n   cgi_error_memory_response->head =\n      \"HTTP/1.0 500 Internal Potatso Error\\r\\n\"\n      \"Content-Type: text/html\\r\\n\"\n      \"\\r\\n\";\n   cgi_error_memory_response->body =\n      \"<html>\\n\"\n      \"<head>\\n\"\n      \" <title>500 Internal Potatso Error</title>\\n\"\n      \" <link rel=\\\"shortcut icon\\\" href=\\\"\" CGI_PREFIX \"error-favicon.ico\\\" type=\\\"image/x-icon\\\">\"\n      \"</head>\\n\"\n      \"<body>\\n\"\n      \"<h1>500 Internal Potatso Error</h1>\\n\"\n      \"<p>Potatso <b>ran out of memory</b> while processing your request.</p>\\n\"\n      \"<p>Please try again later</p>\\n\"\n      \"</body>\\n\"\n      \"</html>\\n\";\n\n   cgi_error_memory_response->head_length =\n      strlen(cgi_error_memory_response->head);\n   cgi_error_memory_response->content_length =\n      strlen(cgi_error_memory_response->body);\n   cgi_error_memory_response->crunch_reason = OUT_OF_MEMORY;\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_memory\n *\n * Description :  Called if a CGI function runs out of memory.\n *                Returns a statically-allocated error response.\n *\n * Parameters  :  N/A\n *\n * Returns     :  http_response data structure for output.  This is\n *                statically allocated, for obvious reasons.\n *\n *********************************************************************/\nstruct http_response *cgi_error_memory(void)\n{\n   /* assert that it's been initialized. */\n   assert(cgi_error_memory_response->head);\n\n   return cgi_error_memory_response;\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_no_template\n *\n * Description :  Almost-CGI function that is called if a template\n *                cannot be loaded.  Note this is not a true CGI,\n *                it takes a template name rather than a map of\n *                parameters.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  template_name = Name of template that could not\n *                                be loaded.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_no_template(const struct client_state *csp,\n                             struct http_response *rsp,\n                             const char *template_name)\n{\n   static const char status[] =\n      \"500 Internal Privoxy Error\";\n   static const char body_prefix[] =\n      \"<html>\\n\"\n      \"<head>\\n\"\n      \" <title>500 Internal Privoxy Error</title>\\n\"\n      \" <link rel=\\\"shortcut icon\\\" href=\\\"\" CGI_PREFIX \"error-favicon.ico\\\" type=\\\"image/x-icon\\\">\"\n      \"</head>\\n\"\n      \"<body>\\n\"\n      \"<h1>500 Internal Privoxy Error</h1>\\n\"\n      \"<p>Privoxy encountered an error while processing your request:</p>\\n\"\n      \"<p><b>Could not load template file <code>\";\n   static const char body_suffix[] =\n      \"</code> or one of its included components.</b></p>\\n\"\n      \"<p>Please contact your proxy administrator.</p>\\n\"\n      \"<p>If you are the proxy administrator, please put the required file(s)\"\n      \"in the <code><i>(confdir)</i>/templates</code> directory.  The \"\n      \"location of the <code><i>(confdir)</i></code> directory \"\n      \"is specified in the main Privoxy <code>config</code> \"\n      \"file.  (It's typically the Privoxy install directory\"\n#ifndef _WIN32\n      \", or <code>/etc/privoxy/</code>\"\n#endif /* ndef _WIN32 */\n      \").</p>\\n\"\n      \"</body>\\n\"\n      \"</html>\\n\";\n   const size_t body_size = strlen(body_prefix) + strlen(template_name) + strlen(body_suffix) + 1;\n\n   assert(csp);\n   assert(rsp);\n   assert(template_name);\n\n   /* Reset rsp, if needed */\n   freez(rsp->status);\n   freez(rsp->head);\n   freez(rsp->body);\n   rsp->content_length = 0;\n   rsp->head_length = 0;\n   rsp->is_static = 0;\n\n   rsp->body = malloc_or_die(body_size);\n   strlcpy(rsp->body, body_prefix, body_size);\n   strlcat(rsp->body, template_name, body_size);\n   strlcat(rsp->body, body_suffix, body_size);\n\n   rsp->status = strdup(status);\n   if (rsp->status == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_unknown\n *\n * Description :  Almost-CGI function that is called if an unexpected\n *                error occurs in the top-level CGI dispatcher.\n *                In this context, \"unexpected\" means \"anything other\n *                than JB_ERR_MEMORY or JB_ERR_CGI_PARAMS\" - CGIs are\n *                expected to handle all other errors internally,\n *                since they can give more relavent error messages\n *                that way.\n *\n *                Note this is not a true CGI, it takes an error\n *                code rather than a map of parameters.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  error_to_report = Error code to report.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_unknown(const struct client_state *csp,\n                         struct http_response *rsp,\n                         jb_err error_to_report)\n{\n   static const char status[] =\n      \"500 Internal Privoxy Error\";\n   static const char body_prefix[] =\n      \"<html>\\n\"\n      \"<head>\\n\"\n      \" <title>500 Internal Privoxy Error</title>\\n\"\n      \" <link rel=\\\"shortcut icon\\\" href=\\\"\" CGI_PREFIX \"error-favicon.ico\\\" type=\\\"image/x-icon\\\">\"\n      \"</head>\\n\"\n      \"<body>\\n\"\n      \"<h1>500 Internal Privoxy Error</h1>\\n\"\n      \"<p>Privoxy encountered an error while processing your request:</p>\\n\"\n      \"<p><b>Unexpected internal error: \";\n   static const char body_suffix[] =\n      \"</b></p>\\n\"\n      \"<p>Please \"\n      \"<a href=\\\"http://sourceforge.net/tracker/?group_id=11118&amp;atid=111118\\\">\"\n      \"file a bug report</a>.</p>\\n\"\n      \"</body>\\n\"\n      \"</html>\\n\";\n   /* Includes room for larger error numbers in the future. */\n   const size_t body_size = sizeof(body_prefix) + sizeof(body_suffix) + 5;\n   assert(csp);\n   assert(rsp);\n\n   /* Reset rsp, if needed */\n   freez(rsp->status);\n   freez(rsp->head);\n   freez(rsp->body);\n   rsp->content_length = 0;\n   rsp->head_length = 0;\n   rsp->is_static = 0;\n   rsp->crunch_reason = INTERNAL_ERROR;\n\n   rsp->body = malloc_or_die(body_size);\n\n   snprintf(rsp->body, body_size, \"%s%d%s\", body_prefix, error_to_report, body_suffix);\n\n   rsp->status = strdup(status);\n   if (rsp->status == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_bad_param\n *\n * Description :  CGI function that is called if the parameters\n *                (query string) for a CGI were wrong.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_bad_param(const struct client_state *csp,\n                           struct http_response *rsp)\n{\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-bad-param\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_redirect\n *\n * Description :  CGI support function to generate a HTTP redirect\n *                message\n *\n * Parameters  :\n *          1  :  rsp = http_response data structure for output\n *          2  :  target = string with the target URL\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_redirect (struct http_response * rsp, const char *target)\n{\n   jb_err err;\n\n   assert(rsp);\n   assert(target);\n\n   err = enlist_unique_header(rsp->headers, \"Location\", target);\n\n   rsp->status = strdup(\"302 Local Redirect from Privoxy\");\n   if (rsp->status == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  add_help_link\n *\n * Description :  Produce a copy of the string given as item,\n *                embedded in an HTML link to its corresponding\n *                section (item name in uppercase) in the actions\n *                chapter of the user manual, (whose URL is given in\n *                the config and defaults to our web site).\n *\n *                FIXME: I currently only work for actions, and would\n *                       like to be generalized for other topics.\n *\n * Parameters  :\n *          1  :  item = item (will NOT be free()d.)\n *                       It is assumed to be HTML-safe.\n *          2  :  config = The current configuration.\n *\n * Returns     :  String with item embedded in link, or NULL on\n *                out-of-memory\n *\n *********************************************************************/\nchar *add_help_link(const char *item,\n                    struct configuration_spec *config)\n{\n   char *result;\n\n   if (!item) return NULL;\n\n   result = strdup(\"<a href=\\\"\");\n   if (!strncmpic(config->usermanual, \"file://\", 7) ||\n       !strncmpic(config->usermanual, \"http\", 4))\n   {\n      string_append(&result, config->usermanual);\n   }\n   else\n   {\n      string_append(&result, \"http://\");\n      string_append(&result, CGI_SITE_2_HOST);\n      string_append(&result, \"/user-manual/\");\n   }\n   string_append(&result, ACTIONS_HELP_PREFIX);\n   string_join  (&result, string_toupper(item));\n   string_append(&result, \"\\\">\");\n   string_append(&result, item);\n   string_append(&result, \"</a>\");\n\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_http_time\n *\n * Description :  Get the time in a format suitable for use in a\n *                HTTP header - e.g.:\n *                \"Sun, 06 Nov 1994 08:49:37 GMT\"\n *\n * Parameters  :\n *          1  :  time_offset = Time returned will be current time\n *                              plus this number of seconds.\n *          2  :  buf = Destination for result.\n *          3  :  buffer_size = Size of the buffer above. Must be big\n *                              enough to hold 29 characters plus a\n *                              trailing zero.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid get_http_time(int time_offset, char *buf, size_t buffer_size)\n{\n   struct tm *t;\n   time_t current_time;\n#if defined(HAVE_GMTIME_R)\n   struct tm dummy;\n#endif\n\n   assert(buf);\n   assert(buffer_size > (size_t)29);\n\n   time(&current_time);\n\n   current_time += time_offset;\n\n   /* get and save the gmt */\n#if HAVE_GMTIME_R\n   t = gmtime_r(&current_time, &dummy);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&gmtime_mutex);\n   t = gmtime(&current_time);\n   privoxy_mutex_unlock(&gmtime_mutex);\n#else\n   t = gmtime(&current_time);\n#endif\n\n   strftime(buf, buffer_size, \"%a, %d %b %Y %H:%M:%S GMT\", t);\n\n}\n\n/*********************************************************************\n *\n * Function    :  get_locale_time\n *\n * Description :  Get the time in a date(1)-like format\n *                according to the current locale - e.g.:\n *                \"Fri Aug 29 19:37:12 CEST 2008\"\n *\n *                XXX: Should we allow the user to change the format?\n *\n * Parameters  :\n *          1  :  buf         = Destination for result.\n *          2  :  buffer_size = Size of the buffer above. Must be big\n *                              enough to hold 29 characters plus a\n *                              trailing zero.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void get_locale_time(char *buf, size_t buffer_size)\n{\n   struct tm *timeptr;\n   time_t current_time;\n#if defined(HAVE_LOCALTIME_R)\n   struct tm dummy;\n#endif\n\n   assert(buf);\n   assert(buffer_size > (size_t)29);\n\n   time(&current_time);\n\n#if HAVE_LOCALTIME_R\n   timeptr = localtime_r(&current_time, &dummy);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&localtime_mutex);\n   timeptr = localtime(&current_time);\n   privoxy_mutex_unlock(&localtime_mutex);\n#else\n   timeptr = localtime(&current_time);\n#endif\n\n   strftime(buf, buffer_size, \"%a %b %d %X %Z %Y\", timeptr);\n\n}\n\n\n#ifdef FEATURE_COMPRESSION\n/*********************************************************************\n *\n * Function    :  compress_buffer\n *\n * Description :  Compresses the content of a buffer with zlib's deflate\n *                Allocates a new buffer for the result, free'ing it is\n *                up to the caller.\n *\n * Parameters  :\n *          1  :  buffer = buffer whose content should be compressed\n *          2  :  buffer_length = length of the buffer\n *          3  :  compression_level = compression level for compress2()\n *\n * Returns     :  NULL on error, otherwise a pointer to the compressed\n *                content of the input buffer.\n *\n *********************************************************************/\nchar *compress_buffer(char *buffer, size_t *buffer_length, int compression_level)\n{\n   char *compressed_buffer;\n   uLongf new_length;\n   assert(-1 <= compression_level && compression_level <= 9);\n\n   /* Let zlib figure out the maximum length of the compressed data */\n   new_length = compressBound((uLongf)*buffer_length);\n\n   compressed_buffer = malloc_or_die(new_length);\n\n   if (Z_OK != compress2((Bytef *)compressed_buffer, &new_length,\n         (Bytef *)buffer, *buffer_length, compression_level))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"compress2() failed. Buffer size: %d, compression level: %d.\",\n         new_length, compression_level);\n      freez(compressed_buffer);\n      return NULL;\n   }\n\n   log_error(LOG_LEVEL_RE_FILTER,\n      \"Compressed content from %d to %d bytes. Compression level: %d\",\n      *buffer_length, new_length, compression_level);\n\n   *buffer_length = (size_t)new_length;\n\n   return compressed_buffer;\n\n}\n#endif\n\n\n/*********************************************************************\n *\n * Function    :  finish_http_response\n *\n * Description :  Fill in the missing headers in an http response,\n *                and flatten the headers to an http head.\n *                For HEAD requests the body is freed once\n *                the Content-Length header is set.\n *\n * Parameters  :\n *          1  :  rsp = pointer to http_response to be processed\n *\n * Returns     :  A http_response, usually the rsp parameter.\n *                On error, free()s rsp and returns cgi_error_memory()\n *\n *********************************************************************/\nstruct http_response *finish_http_response(struct client_state *csp, struct http_response *rsp)\n{\n   char buf[BUFFER_SIZE];\n   jb_err err;\n\n   /* Special case - do NOT change this statically allocated response,\n    * which is ready for output anyway.\n    */\n   if (rsp == cgi_error_memory_response)\n   {\n      return rsp;\n   }\n\n   /*\n    * Fill in the HTTP Status, using HTTP/1.1\n    * unless the client asked for HTTP/1.0.\n    */\n   snprintf(buf, sizeof(buf), \"%s %s\",\n      strcmpic(csp->http->ver, \"HTTP/1.0\") ? \"HTTP/1.1\" : \"HTTP/1.0\",\n      rsp->status ? rsp->status : \"200 OK\");\n   err = enlist_first(rsp->headers, buf);\n\n   /*\n    * Set the Content-Length\n    */\n   if (rsp->content_length == 0)\n   {\n      rsp->content_length = rsp->body ? strlen(rsp->body) : 0;\n   }\n\n#ifdef FEATURE_COMPRESSION\n   if (!err && (csp->flags & CSP_FLAG_CLIENT_SUPPORTS_DEFLATE)\n      && (rsp->content_length > LOWER_LENGTH_LIMIT_FOR_COMPRESSION))\n   {\n      char *compressed_content;\n\n      compressed_content = compress_buffer(rsp->body, &rsp->content_length,\n         csp->config->compression_level);\n      if (NULL != compressed_content)\n      {\n         freez(rsp->body);\n         rsp->body = compressed_content;\n         err = enlist_unique_header(rsp->headers, \"Content-Encoding\", \"deflate\");\n      }\n   }\n#endif\n\n   if (!err)\n   {\n      snprintf(buf, sizeof(buf), \"Content-Length: %d\", (int)rsp->content_length);\n      /*\n       * Signal serve() that the client will be able to figure out\n       * the end of the response without having to close the connection.\n       */\n      csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET;\n      err = enlist(rsp->headers, buf);\n   }\n\n   if (0 == strcmpic(csp->http->gpc, \"head\"))\n   {\n      /*\n       * The client only asked for the head. Dispose\n       * the body and log an offensive message.\n       *\n       * While it may seem to be a bit inefficient to\n       * prepare the body if it isn't needed, it's the\n       * only way to get the Content-Length right for\n       * dynamic pages. We could have disposed the body\n       * earlier, but not without duplicating the\n       * Content-Length setting code above.\n       */\n      log_error(LOG_LEVEL_CGI, \"Preparing to give head to %s.\", csp->ip_addr_str);\n      freez(rsp->body);\n      rsp->content_length = 0;\n   }\n\n   if (strncmpic(rsp->status, \"302\", 3))\n   {\n      /*\n       * If it's not a redirect without any content,\n       * set the Content-Type to text/html if it's\n       * not already specified.\n       */\n      if (!err) err = enlist_unique(rsp->headers, \"Content-Type: text/html\", 13);\n   }\n\n   /*\n    * Fill in the rest of the default headers:\n    *\n    * Date: set to current date/time.\n    * Last-Modified: set to date/time the page was last changed.\n    * Expires: set to date/time page next needs reloading.\n    * Cache-Control: set to \"no-cache\" if applicable.\n    *\n    * See http://www.w3.org/Protocols/rfc2068/rfc2068\n    */\n   if (rsp->is_static)\n   {\n      /*\n       * Set Expires to about 10 min into the future so it'll get reloaded\n       * occasionally, e.g. if Privoxy gets upgraded.\n       */\n\n      if (!err)\n      {\n         get_http_time(0, buf, sizeof(buf));\n         err = enlist_unique_header(rsp->headers, \"Date\", buf);\n      }\n\n      /* Some date in the past. */\n      if (!err) err = enlist_unique_header(rsp->headers, \"Last-Modified\", \"Sat, 17 Jun 2000 12:00:00 GMT\");\n\n      if (!err)\n      {\n         get_http_time(10 * 60, buf, sizeof(buf)); /* 10 * 60sec = 10 minutes */\n         err = enlist_unique_header(rsp->headers, \"Expires\", buf);\n      }\n   }\n   else if (!strncmpic(rsp->status, \"302\", 3))\n   {\n      get_http_time(0, buf, sizeof(buf));\n      if (!err) err = enlist_unique_header(rsp->headers, \"Date\", buf);\n   }\n   else\n   {\n      /*\n       * Setting \"Cache-Control\" to \"no-cache\" and  \"Expires\" to\n       * the current time doesn't exactly forbid caching, it just\n       * requires the client to revalidate the cached copy.\n       *\n       * If a temporary problem occurs and the user tries again after\n       * getting Privoxy's error message, a compliant browser may set the\n       * If-Modified-Since header with the content of the error page's\n       * Last-Modified header. More often than not, the document on the server\n       * is older than Privoxy's error message, the server would send status code\n       * 304 and the browser would display the outdated error message again and again.\n       *\n       * For documents delivered with status code 403, 404 and 503 we set \"Last-Modified\"\n       * to Tim Berners-Lee's birthday, which predates the age of any page on the web\n       * and can be safely used to \"revalidate\" without getting a status code 304.\n       *\n       * There is no need to let the useless If-Modified-Since header reach the\n       * server, it is therefore stripped by client_if_modified_since in parsers.c.\n       */\n      if (!err) err = enlist_unique_header(rsp->headers, \"Cache-Control\", \"no-cache\");\n\n      get_http_time(0, buf, sizeof(buf));\n      if (!err) err = enlist_unique_header(rsp->headers, \"Date\", buf);\n      if (!strncmpic(rsp->status, \"403\", 3)\n       || !strncmpic(rsp->status, \"404\", 3)\n       || !strncmpic(rsp->status, \"502\", 3)\n       || !strncmpic(rsp->status, \"503\", 3)\n       || !strncmpic(rsp->status, \"504\", 3))\n      {\n         if (!err) err = enlist_unique_header(rsp->headers, \"Last-Modified\", \"Wed, 08 Jun 1955 12:00:00 GMT\");\n      }\n      else\n      {\n         if (!err) err = enlist_unique_header(rsp->headers, \"Last-Modified\", buf);\n      }\n      if (!err) err = enlist_unique_header(rsp->headers, \"Expires\", \"Sat, 17 Jun 2000 12:00:00 GMT\");\n      if (!err) err = enlist_unique_header(rsp->headers, \"Pragma\", \"no-cache\");\n   }\n\n   if (!err && (!(csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n              || (csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)))\n   {\n      err = enlist_unique_header(rsp->headers, \"Connection\", \"close\");\n   }\n\n   /*\n    * Write the head\n    */\n   if (err || (NULL == (rsp->head = list_to_text(rsp->headers))))\n   {\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n   rsp->head_length = strlen(rsp->head);\n\n   return rsp;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  alloc_http_response\n *\n * Description :  Allocates a new http_response structure.\n *\n * Parameters  :  N/A\n *\n * Returns     :  pointer to a new http_response, or NULL.\n *\n *********************************************************************/\nstruct http_response *alloc_http_response(void)\n{\n   return (struct http_response *) zalloc(sizeof(struct http_response));\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_http_response\n *\n * Description :  Free the memory occupied by an http_response\n *                and its depandant structures.\n *\n * Parameters  :\n *          1  :  rsp = pointer to http_response to be freed\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_http_response(struct http_response *rsp)\n{\n   /*\n    * Must special case cgi_error_memory_response, which is never freed.\n    */\n   if (rsp && (rsp != cgi_error_memory_response))\n   {\n      freez(rsp->status);\n      freez(rsp->head);\n      freez(rsp->body);\n      destroy_list(rsp->headers);\n      free(rsp);\n   }\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  template_load\n *\n * Description :  CGI support function that loads a given HTML\n *                template, ignoring comment lines and following\n *                #include statements up to a depth of 1.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  template_ptr = Destination for pointer to loaded\n *                               template text.\n *          3  :  templatename = name of the HTML template to be used\n *          4  :  recursive = Flag set if this function calls itself\n *                            following an #include statament\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                JB_ERR_FILE if the template file cannot be read\n *\n *********************************************************************/\njb_err template_load(const struct client_state *csp, char **template_ptr,\n                     const char *templatename, int recursive)\n{\n   jb_err err;\n   char *templates_dir_path;\n   char *full_path;\n   char *file_buffer;\n   char *included_module;\n   const char *p;\n   FILE *fp;\n   char buf[BUFFER_SIZE];\n\n   assert(csp);\n   assert(template_ptr);\n   assert(templatename);\n\n   *template_ptr = NULL;\n\n   /* Validate template name.  Paranoia. */\n   for (p = templatename; *p != 0; p++)\n   {\n      if ( ((*p < 'a') || (*p > 'z'))\n        && ((*p < 'A') || (*p > 'Z'))\n        && ((*p < '0') || (*p > '9'))\n        && (*p != '-')\n        && (*p != '.'))\n      {\n         /* Illegal character */\n         return JB_ERR_FILE;\n      }\n   }\n\n   /*\n    * Generate full path using either templdir\n    * or confdir/templates as base directory.\n    */\n   if (NULL != csp->config->templdir)\n   {\n      templates_dir_path = strdup(csp->config->templdir);\n   }\n   else\n   {\n      templates_dir_path = make_path(csp->config->confdir, \"templates\");\n   }\n\n   if (templates_dir_path == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Out of memory while generating template path for %s.\",\n         templatename);\n      return JB_ERR_MEMORY;\n   }\n\n   full_path = make_path(templates_dir_path, templatename);\n   free(templates_dir_path);\n   if (full_path == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Out of memory while generating full template path for %s.\",\n         templatename);\n      return JB_ERR_MEMORY;\n   }\n\n   /* Allocate buffer */\n\n   file_buffer = strdup(\"\");\n   if (file_buffer == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Not enough free memory to buffer %s.\", full_path);\n      free(full_path);\n      return JB_ERR_MEMORY;\n   }\n\n   /* Open template file */\n\n   if (NULL == (fp = fopen(full_path, \"r\")))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Cannot open template file %s: %E\", full_path);\n      free(full_path);\n      free(file_buffer);\n      return JB_ERR_FILE;\n   }\n   free(full_path);\n\n   /*\n    * Read the file, ignoring comments, and honoring #include\n    * statements, unless we're already called recursively.\n    *\n    * XXX: The comment handling could break with lines lengths > sizeof(buf).\n    *      This is unlikely in practise.\n    */\n   while (fgets(buf, sizeof(buf), fp))\n   {\n      if (!recursive && !strncmp(buf, \"#include \", 9))\n      {\n         if (JB_ERR_OK != (err = template_load(csp, &included_module, chomp(buf + 9), 1)))\n         {\n            free(file_buffer);\n            fclose(fp);\n            return err;\n         }\n\n         if (string_join(&file_buffer, included_module))\n         {\n            fclose(fp);\n            return JB_ERR_MEMORY;\n         }\n\n         continue;\n      }\n\n      /* skip lines starting with '#' */\n      if (*buf == '#')\n      {\n         continue;\n      }\n\n      if (string_append(&file_buffer, buf))\n      {\n         fclose(fp);\n         return JB_ERR_MEMORY;\n      }\n   }\n   fclose(fp);\n\n   *template_ptr = file_buffer;\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  template_fill\n *\n * Description :  CGI support function that fills in a pre-loaded\n *                HTML template by replacing @name@ with value using\n *                pcrs, for each item in the output map.\n *\n *                Note that a leading '$' character in the export map's\n *                values will be stripped and toggle on backreference\n *                interpretation.\n *\n * Parameters  :\n *          1  :  template_ptr = IN: Template to be filled out.\n *                                   Will be free()d.\n *                               OUT: Filled out template.\n *                                    Caller must free().\n *          2  :  exports = map with fill in symbol -> name pairs\n *\n * Returns     :  JB_ERR_OK on success (and for uncritical errors)\n *                JB_ERR_MEMORY on out-of-memory error\n *\n *********************************************************************/\njb_err template_fill(char **template_ptr, const struct map *exports)\n{\n   struct map_entry *m;\n   pcrs_job *job;\n   char buf[BUFFER_SIZE];\n   char *tmp_out_buffer;\n   char *file_buffer;\n   size_t size;\n   int error;\n   const char *flags;\n\n   assert(template_ptr);\n   assert(*template_ptr);\n   assert(exports);\n\n   file_buffer = *template_ptr;\n   size = strlen(file_buffer) + 1;\n\n   /*\n    * Assemble pcrs joblist from exports map\n    */\n   for (m = exports->first; m != NULL; m = m->next)\n   {\n      if (*m->name == '$')\n      {\n         /*\n          * First character of name is '$', so remove this flag\n          * character and allow backreferences ($1 etc) in the\n          * \"replace with\" text.\n          */\n         snprintf(buf, sizeof(buf), \"%s\", m->name + 1);\n         flags = \"sigU\";\n      }\n      else\n      {\n         /*\n          * Treat the \"replace with\" text as a literal string -\n          * no quoting needed, no backreferences allowed.\n          * (\"Trivial\" ['T'] flag).\n          */\n         flags = \"sigTU\";\n\n         /* Enclose name in @@ */\n         snprintf(buf, sizeof(buf), \"@%s@\", m->name);\n      }\n\n      log_error(LOG_LEVEL_CGI, \"Substituting: s/%s/%s/%s\", buf, m->value, flags);\n\n      /* Make and run job. */\n      job = pcrs_compile(buf, m->value, flags,  &error);\n      if (job == NULL)\n      {\n         if (error == PCRS_ERR_NOMEM)\n         {\n            free(file_buffer);\n            *template_ptr = NULL;\n            return JB_ERR_MEMORY;\n         }\n         else\n         {\n            log_error(LOG_LEVEL_ERROR, \"Error compiling template fill job %s: %d\", m->name, error);\n            /* Hope it wasn't important and silently ignore the invalid job */\n         }\n      }\n      else\n      {\n         error = pcrs_execute(job, file_buffer, size, &tmp_out_buffer, &size);\n\n         pcrs_free_job(job);\n         if (NULL == tmp_out_buffer)\n         {\n            *template_ptr = NULL;\n            return JB_ERR_MEMORY;\n         }\n\n         if (error < 0)\n         {\n            /*\n             * Substitution failed, keep the original buffer,\n             * log the problem and ignore it.\n             *\n             * The user might see some unresolved @CGI_VARIABLES@,\n             * but returning a special CGI error page seems unreasonable\n             * and could mask more important error messages.\n             */\n            free(tmp_out_buffer);\n            log_error(LOG_LEVEL_ERROR, \"Failed to execute s/%s/%s/%s. %s\",\n               buf, m->value, flags, pcrs_strerror(error));\n         }\n         else\n         {\n            /* Substitution succeeded, use modified buffer. */\n            free(file_buffer);\n            file_buffer = tmp_out_buffer;\n         }\n      }\n   }\n\n   /*\n    * Return\n    */\n   *template_ptr = file_buffer;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  template_fill_for_cgi\n *\n * Description :  CGI support function that loads a HTML template\n *                and fills it in.  Handles file-not-found errors\n *                by sending a HTML error message.  For convenience,\n *                this function also frees the passed \"exports\" map.\n *\n * Parameters  :\n *          1  :  csp = Client state\n *          2  :  templatename = name of the HTML template to be used\n *          3  :  exports = map with fill in symbol -> name pairs.\n *                          Will be freed by this function.\n *          4  :  rsp = Response structure to fill in.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error\n *\n *********************************************************************/\njb_err template_fill_for_cgi(const struct client_state *csp,\n                             const char *templatename,\n                             struct map *exports,\n                             struct http_response *rsp)\n{\n   jb_err err;\n\n   assert(csp);\n   assert(templatename);\n   assert(exports);\n   assert(rsp);\n\n   err = template_load(csp, &rsp->body, templatename, 0);\n   if (err == JB_ERR_FILE)\n   {\n      free_map(exports);\n      return cgi_error_no_template(csp, rsp, templatename);\n   }\n   else if (err)\n   {\n      free_map(exports);\n      return err; /* JB_ERR_MEMORY */\n   }\n   err = template_fill(&rsp->body, exports);\n   free_map(exports);\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  default_exports\n *\n * Description :  returns a struct map list that contains exports\n *                which are common to all CGI functions.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  caller = name of CGI who calls us and which should\n *                         be excluded from the generated menu. May be\n *                         NULL.\n * Returns     :  NULL if no memory, else a new map.  Caller frees.\n *\n *********************************************************************/\nstruct map *default_exports(const struct client_state *csp, const char *caller)\n{\n   char buf[30];\n   jb_err err;\n   struct map * exports;\n   int local_help_exists = 0;\n   char *ip_address = NULL;\n   char *port = NULL;\n   char *hostname = NULL;\n\n   assert(csp);\n\n   exports = new_map();\n\n   if (csp->config->hostname)\n   {\n      get_host_information(csp->cfd, &ip_address, &port, NULL);\n      hostname = strdup(csp->config->hostname);\n   }\n   else\n   {\n      get_host_information(csp->cfd, &ip_address, &port, &hostname);\n   }\n\n   err = map(exports, \"version\", 1, html_encode(VERSION), 0);\n   get_locale_time(buf, sizeof(buf));\n   if (!err) err = map(exports, \"time\",          1, html_encode(buf), 0);\n   if (!err) err = map(exports, \"my-ip-address\", 1, html_encode(ip_address ? ip_address : \"unknown\"), 0);\n   freez(ip_address);\n   if (!err) err = map(exports, \"my-port\",       1, html_encode(port ? port : \"unknown\"), 0);\n   freez(port);\n   if (!err) err = map(exports, \"my-hostname\",   1, html_encode(hostname ? hostname : \"unknown\"), 0);\n   freez(hostname);\n   if (!err) err = map(exports, \"homepage\",      1, html_encode(HOME_PAGE_URL), 0);\n   if (!err) err = map(exports, \"default-cgi\",   1, html_encode(CGI_PREFIX), 0);\n   if (!err) err = map(exports, \"menu\",          1, make_menu(caller, csp->config->feature_flags), 0);\n   if (!err) err = map(exports, \"code-status\",   1, CODE_STATUS, 1);\n   if (!strncmpic(csp->config->usermanual, \"file://\", 7) ||\n       !strncmpic(csp->config->usermanual, \"http\", 4))\n   {\n      /* Manual is located somewhere else, just link to it. */\n      if (!err) err = map(exports, \"user-manual\", 1, html_encode(csp->config->usermanual), 0);\n   }\n   else\n   {\n      /* Manual is delivered by Privoxy. */\n      if (!err) err = map(exports, \"user-manual\", 1, html_encode(CGI_PREFIX\"user-manual/\"), 0);\n   }\n   if (!err) err = map(exports, \"actions-help-prefix\", 1, ACTIONS_HELP_PREFIX ,1);\n#ifdef FEATURE_TOGGLE\n   if (!err) err = map_conditional(exports, \"enabled-display\", global_toggle_state);\n#else\n   if (!err) err = map_block_killer(exports, \"can-toggle\");\n#endif\n\n   if (!strcmp(CODE_STATUS, \"stable\"))\n   {\n      if (!err) err = map_block_killer(exports, \"unstable\");\n   }\n\n   if (csp->config->admin_address != NULL)\n   {\n      if (!err) err = map(exports, \"admin-address\", 1, html_encode(csp->config->admin_address), 0);\n      local_help_exists = 1;\n   }\n   else\n   {\n      if (!err) err = map_block_killer(exports, \"have-adminaddr-info\");\n   }\n\n   if (csp->config->proxy_info_url != NULL)\n   {\n      if (!err) err = map(exports, \"proxy-info-url\", 1, html_encode(csp->config->proxy_info_url), 0);\n      local_help_exists = 1;\n   }\n   else\n   {\n      if (!err) err = map_block_killer(exports, \"have-proxy-info\");\n   }\n\n   if (local_help_exists == 0)\n   {\n      if (!err) err = map_block_killer(exports, \"have-help-info\");\n   }\n\n   if (err)\n   {\n      free_map(exports);\n      return NULL;\n   }\n\n   return exports;\n}\n\n\n/*********************************************************************\n *\n * Function    :  map_block_killer\n *\n * Description :  Convenience function.\n *                Adds a \"killer\" for the conditional HTML-template\n *                block <name>, i.e. a substitution of the regex\n *                \"if-<name>-start.*if-<name>-end\" to the given\n *                export list.\n *\n * Parameters  :\n *          1  :  exports = map to extend\n *          2  :  name = name of conditional block\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err map_block_killer(struct map *exports, const char *name)\n{\n   char buf[1000]; /* Will do, since the names are hardwired */\n\n   assert(exports);\n   assert(name);\n   assert(strlen(name) < (size_t)490);\n\n   snprintf(buf, sizeof(buf), \"if-%s-start.*if-%s-end\", name, name);\n   return map(exports, buf, 1, \"\", 1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  map_block_keep\n *\n * Description :  Convenience function.  Removes the markers used\n *                by map-block-killer, to save a few bytes.\n *                i.e. removes \"@if-<name>-start@\" and \"@if-<name>-end@\"\n *\n * Parameters  :\n *          1  :  exports = map to extend\n *          2  :  name = name of conditional block\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err map_block_keep(struct map *exports, const char *name)\n{\n   jb_err err;\n   char buf[500]; /* Will do, since the names are hardwired */\n\n   assert(exports);\n   assert(name);\n   assert(strlen(name) < (size_t)490);\n\n   snprintf(buf, sizeof(buf), \"if-%s-start\", name);\n   err = map(exports, buf, 1, \"\", 1);\n\n   if (err)\n   {\n      return err;\n   }\n\n   snprintf(buf, sizeof(buf), \"if-%s-end\", name);\n   return map(exports, buf, 1, \"\", 1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  map_conditional\n *\n * Description :  Convenience function.\n *                Adds an \"if-then-else\" for the conditional HTML-template\n *                block <name>, i.e. a substitution of the form:\n *                @if-<name>-then@\n *                   True text\n *                @else-not-<name>@\n *                   False text\n *                @endif-<name>@\n *\n *                The control structure and one of the alternatives\n *                will be hidden.\n *\n * Parameters  :\n *          1  :  exports = map to extend\n *          2  :  name = name of conditional block\n *          3  :  choose_first = nonzero for first, zero for second.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err map_conditional(struct map *exports, const char *name, int choose_first)\n{\n   char buf[1000]; /* Will do, since the names are hardwired */\n   jb_err err;\n\n   assert(exports);\n   assert(name);\n   assert(strlen(name) < (size_t)480);\n\n   snprintf(buf, sizeof(buf), (choose_first\n      ? \"else-not-%s@.*@endif-%s\"\n      : \"if-%s-then@.*@else-not-%s\"),\n      name, name);\n\n   err = map(exports, buf, 1, \"\", 1);\n   if (err)\n   {\n      return err;\n   }\n\n   snprintf(buf, sizeof(buf), (choose_first ? \"if-%s-then\" : \"endif-%s\"), name);\n   return map(exports, buf, 1, \"\", 1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  make_menu\n *\n * Description :  Returns an HTML-formatted menu of the available\n *                unhidden CGIs, excluding the one given in <self>\n *                and the toggle CGI if toggling is disabled.\n *\n * Parameters  :\n *          1  :  self = name of CGI to leave out, can be NULL for\n *                complete listing.\n *          2  :  feature_flags = feature bitmap from csp->config\n *\n *\n * Returns     :  menu string, or NULL on out-of-memory error.\n *\n *********************************************************************/\nchar *make_menu(const char *self, const unsigned feature_flags)\n{\n   const struct cgi_dispatcher *d;\n   char *result = strdup(\"\");\n\n   if (self == NULL)\n   {\n      self = \"NO-SUCH-CGI!\";\n   }\n\n   /* List available unhidden CGI's and export as \"other-cgis\" */\n   for (d = cgi_dispatchers; d->name; d++)\n   {\n\n#ifdef FEATURE_TOGGLE\n      if (!(feature_flags & RUNTIME_FEATURE_CGI_TOGGLE) && !strcmp(d->name, \"toggle\"))\n      {\n         /*\n          * Suppress the toggle link if remote toggling is disabled.\n          */\n         continue;\n      }\n#endif /* def FEATURE_TOGGLE */\n\n      if (d->description && strcmp(d->name, self))\n      {\n         char *html_encoded_prefix;\n\n         /*\n          * Line breaks would be great, but break\n          * the \"blocked\" template's JavaScript.\n          */\n         string_append(&result, \"<li><a href=\\\"\");\n         html_encoded_prefix = html_encode(CGI_PREFIX);\n         if (html_encoded_prefix == NULL)\n         {\n            return NULL;\n         }\n         else\n         {\n            string_append(&result, html_encoded_prefix);\n            free(html_encoded_prefix);\n         }\n         string_append(&result, d->name);\n         string_append(&result, \"\\\">\");\n         string_append(&result, d->description);\n         string_append(&result, \"</a></li>\");\n      }\n   }\n\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  dump_map\n *\n * Description :  HTML-dump a map for debugging (as table)\n *\n * Parameters  :\n *          1  :  the_map = map to dump\n *\n * Returns     :  string with HTML\n *\n *********************************************************************/\nchar *dump_map(const struct map *the_map)\n{\n   struct map_entry *cur_entry;\n   char *ret = strdup(\"\");\n\n   string_append(&ret, \"<table>\\n\");\n\n   for (cur_entry = the_map->first;\n        (cur_entry != NULL) && (ret != NULL);\n        cur_entry = cur_entry->next)\n   {\n      string_append(&ret, \"<tr><td><b>\");\n      string_join  (&ret, html_encode(cur_entry->name));\n      string_append(&ret, \"</b></td><td>\");\n      string_join  (&ret, html_encode(cur_entry->value));\n      string_append(&ret, \"</td></tr>\\n\");\n   }\n\n   string_append(&ret, \"</table>\\n\");\n   return ret;\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgi.h",
    "content": "#ifndef CGI_H_INCLUDED\n#define CGI_H_INCLUDED\n#define CGI_H_VERSION \"$Id: cgi.h,v 1.43 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgi.h,v $\n *\n * Purpose     :  Declares functions to intercept request, generate\n *                html or gif answers, and to compose HTTP resonses.\n *\n *                Functions declared include:\n *\n *\n * Copyright   :  Written by and Copyright (C) 2001-2009 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"project.h\"\n\n/*\n * Main dispatch function\n */\nextern struct http_response *dispatch_cgi(struct client_state *csp);\n\n/* Not exactly a CGI */\nextern struct http_response *error_response(struct client_state *csp,\n                                            const char *templatename);\n\n/*\n * CGI support functions\n */\nextern struct http_response * alloc_http_response(void);\nextern void free_http_response(struct http_response *rsp);\n\nextern struct http_response *finish_http_response(struct client_state *csp,\n                                                  struct http_response *rsp);\n\nextern struct map * default_exports(const struct client_state *csp, const char *caller);\n\nextern jb_err map_block_killer (struct map *exports, const char *name);\nextern jb_err map_block_keep   (struct map *exports, const char *name);\nextern jb_err map_conditional  (struct map *exports, const char *name, int choose_first);\n\nextern jb_err template_load(const struct client_state *csp, char ** template_ptr,\n                            const char *templatename, int recursive);\nextern jb_err template_fill(char ** template_ptr, const struct map *exports);\nextern jb_err template_fill_for_cgi(const struct client_state *csp,\n                                    const char *templatename,\n                                    struct map *exports,\n                                    struct http_response *rsp);\n\nextern void cgi_init_error_messages(void);\nextern struct http_response *cgi_error_memory(void);\nextern jb_err cgi_redirect (struct http_response * rsp, const char *target);\n\nextern jb_err cgi_error_no_template(const struct client_state *csp,\n                                    struct http_response *rsp,\n                                    const char *template_name);\nextern jb_err cgi_error_bad_param(const struct client_state *csp,\n                                  struct http_response *rsp);\nextern jb_err cgi_error_disabled(const struct client_state *csp,\n                                 struct http_response *rsp);\nextern jb_err cgi_error_unknown(const struct client_state *csp,\n                         struct http_response *rsp,\n                         jb_err error_to_report);\n\nextern jb_err get_number_param(struct client_state *csp,\n                               const struct map *parameters,\n                               char *name,\n                               unsigned *pvalue);\nextern jb_err get_string_param(const struct map *parameters,\n                               const char *param_name,\n                               const char **pparam);\nextern char   get_char_param(const struct map *parameters,\n                             const char *param_name);\n#ifdef FEATURE_COMPRESSION\n/*\n * Minimum length which a buffer has to reach before\n * we bother to (re-)compress it. Completely arbitrary.\n */\nextern const size_t LOWER_LENGTH_LIMIT_FOR_COMPRESSION;\nextern char *compress_buffer(char *buffer, size_t *buffer_length, int compression_level);\n#endif\n\n/*\n * Text generators\n */\nextern void get_http_time(int time_offset, char *buf, size_t buffer_size);\nextern char *add_help_link(const char *item, struct configuration_spec *config);\nextern char *make_menu(const char *self, const unsigned feature_flags);\nextern char *dump_map(const struct map *the_map);\n\n/*\n * Ad replacement images\n */\nextern const char image_pattern_data[];\nextern const size_t  image_pattern_length;\nextern const char image_blank_data[];\nextern const size_t  image_blank_length;\n\n/* Revision control strings from this header and associated .c file */\nextern const char cgi_rcs[];\nextern const char cgi_h_rcs[];\n\n#endif /* ndef CGI_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgiedit.c",
    "content": "const char cgiedit_rcs[] = \"$Id: cgiedit.c,v 1.87 2014/10/18 11:31:52 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgiedit.c,v $\n *\n * Purpose     :  CGI-based actionsfile editor.\n *\n *                NOTE: The CGIs in this file use parameter names\n *                such as \"f\" and \"s\" which are really *BAD* choices.\n *                However, I'm trying to save bytes in the\n *                edit-actions-list HTML page - the standard actions\n *                file generated a 550kbyte page, which is ridiculous.\n *\n *                Stick to the short names in this file for consistency.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"sp_config.h\"\n\n/*\n * FIXME: Following includes copied from cgi.c - which are actually needed?\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/types.h>\n#include <ctype.h>\n#include <string.h>\n#include <assert.h>\n#include <sys/stat.h>\n\n#include \"project.h\"\n#include \"cgi.h\"\n#include \"cgiedit.h\"\n#include \"cgisimple.h\"\n#include \"list.h\"\n#include \"encode.h\"\n#include \"actions.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"loaders.h\"\n#ifdef FEATURE_TOGGLE\n/* loadcfg.h is for global_toggle_state only */\n#include \"loadcfg.h\"\n#endif /* def FEATURE_TOGGLE */\n#include \"urlmatch.h\"\n\nconst char cgiedit_h_rcs[] = CGIEDIT_H_VERSION;\n\n\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n\n/**\n * A line in an editable_file.\n */\nstruct file_line\n{\n   /** Next entry in the linked list */\n   struct file_line * next;\n\n   /** The raw data, to write out if this line is unmodified. */\n   char * raw;\n\n   /** Comments and/or whitespace to put before this line if it's modified\n       and then written out. */\n   char * prefix;\n\n   /** The actual data, as a string.  Line continuation and comment removal\n       are performed on the data read from file before it's stored here, so\n       it will be a single line of data.  */\n   char * unprocessed;\n\n   /** The type of data on this line.  One of the FILE_LINE_xxx constants. */\n   int type;\n\n   /** The actual data, processed into some sensible data type. */\n   union\n   {\n\n      /** An action specification. */\n      struct action_spec action[1];\n\n      /** A name=value pair. */\n      struct\n      {\n\n         /** The name in the name=value pair. */\n         char * name;\n\n         /** The value in the name=value pair, as a string. */\n         char * svalue;\n\n         /** The value in the name=value pair, as an integer. */\n         int ivalue;\n\n      } setting;\n\n   } data;\n\n};\n\n/** This file_line has not been processed yet. */\n#define FILE_LINE_UNPROCESSED           1\n\n/** This file_line is blank. Can only appear at the end of a file, due to\n    the way the parser works. */\n#define FILE_LINE_BLANK                 2\n\n/** This file_line says {{alias}}. */\n#define FILE_LINE_ALIAS_HEADER          3\n\n/** This file_line defines an alias. */\n#define FILE_LINE_ALIAS_ENTRY           4\n\n/** This file_line defines an {action}. */\n#define FILE_LINE_ACTION                5\n\n/** This file_line specifies a URL pattern. */\n#define FILE_LINE_URL                   6\n\n/** This file_line says {{settings}}. */\n#define FILE_LINE_SETTINGS_HEADER       7\n\n/** This file_line is in a {{settings}} block. */\n#define FILE_LINE_SETTINGS_ENTRY        8\n\n/** This file_line says {{description}}. */\n#define FILE_LINE_DESCRIPTION_HEADER    9\n\n/** This file_line is in a {{description}} block. */\n#define FILE_LINE_DESCRIPTION_ENTRY    10\n\n/*\n * Number of file modification time mismatches\n * before the CGI editor gets turned off.\n */\n#define ACCEPTABLE_TIMESTAMP_MISMATCHES 3\n\n/**\n * A configuration file, in a format that can be edited and written back to\n * disk.\n */\nstruct editable_file\n{\n   struct file_line * lines;  /**< The contents of the file.  A linked list of lines. */\n   const char * filename;     /**< Full pathname - e.g. \"/etc/privoxy/wibble.action\". */\n   unsigned identifier;       /**< The file name's position in csp->config->actions_file[]. */\n   const char * version_str;  /**< Last modification time, as a string.  For CGI param. */\n                              /**< Can be used in URL without using url_param(). */\n   unsigned version;          /**< Last modification time - prevents chaos with\n                                   the browser's \"back\" button.  Note that this is a\n                                   time_t cast to an unsigned.  When comparing, always\n                                   cast the time_t to an unsigned, and *NOT* vice-versa.\n                                   This may lose the top few bits, but they're not\n                                   significant anyway. */\n   int newline;               /**< Newline convention - one of the NEWLINE_xxx constants.\n                                   Note that changing this after the file has been\n                                   read in will cause a mess. */\n   struct file_line * parse_error; /**< On parse error, this is the offending line. */\n   const char * parse_error_text;  /**< On parse error, this is the problem.\n                                        (Statically allocated) */\n};\n\n/**\n * Information about the filter types.\n * Used for macro replacement in cgi_edit_actions_for_url.\n */\nstruct filter_type_info\n{\n   const int multi_action_index; /**< The multi action index as defined in project.h */\n   const char *macro_name;       /**< Name of the macro that has to be replaced\n                                      with the prepared templates.\n                                      For example \"content-filter-params\" */\n   const char *type;             /**< Name of the filter type,\n                                      for example \"server-header-filter\". */\n   /* XXX: check if these two can be combined. */\n   const char *disable_all_option; /**< Name of the catch-all radio option that has\n                                        to be checked or unchecked for this filter type. */\n   const char *disable_all_param;  /**< Name of the parameter that causes all filters of\n                                        this type to be disabled. */\n   const char *abbr_type;        /**< Abbreviation of the filter type, usually the\n                                      first or second character capitalized */\n   const char *anchor;           /**< Anchor for the User Manual link,\n                                      for example \"SERVER-HEADER-FILTER\"  */\n};\n\n/* Accessed by index, keep the order in the way the FT_ macros are defined. */\nstatic const struct filter_type_info filter_type_info[] =\n{\n   {\n      ACTION_MULTI_FILTER,\n      \"content-filter-params\", \"filter\",\n      \"filter-all\", \"filter_all\",\n      \"F\", \"FILTER\"\n   },\n   {\n      ACTION_MULTI_CLIENT_HEADER_FILTER,\n      \"client-header-filter-params\", \"client-header-filter\",\n      \"client-header-filter-all\", \"client_header_filter_all\",\n      \"C\", \"CLIENT-HEADER-FILTER\"\n   },\n   {\n      ACTION_MULTI_SERVER_HEADER_FILTER,\n      \"server-header-filter-params\", \"server-header-filter\",\n      \"server-header-filter-all\", \"server_header_filter_all\",\n      \"S\", \"SERVER-HEADER-FILTER\"\n   },\n   {\n      ACTION_MULTI_CLIENT_HEADER_TAGGER,\n      \"client-header-tagger-params\", \"client-header-tagger\",\n      \"client-header-tagger-all\", \"client_header_tagger_all\",\n      \"L\", \"CLIENT-HEADER-TAGGER\"\n   },\n   {\n      ACTION_MULTI_SERVER_HEADER_TAGGER,\n      \"server-header-tagger-params\", \"server-header-tagger\",\n      \"server-header-tagger-all\", \"server_header_tagger_all\",\n      \"E\", \"SERVER-HEADER-TAGGER\"\n   },\n#ifdef FEATURE_EXTERNAL_FILTERS\n   {\n      ACTION_MULTI_EXTERNAL_FILTER,\n      \"external-content-filter-params\", \"external-filter\",\n      \"external-content-filter-all\", \"external_content_filter_all\",\n      \"E\", \"EXTERNAL-CONTENT-FILTER\"\n   },\n#endif\n};\n\n/* FIXME: Following non-static functions should be prototyped in .h or made static */\n\n/* Functions to read and write arbitrary config files */\njb_err edit_read_file(struct client_state *csp,\n                      const struct map *parameters,\n                      int require_version,\n                      struct editable_file **pfile);\njb_err edit_write_file(struct editable_file * file);\nvoid   edit_free_file(struct editable_file * file);\n\n/* Functions to read and write actions files */\njb_err edit_parse_actions_file(struct editable_file * file);\njb_err edit_read_actions_file(struct client_state *csp,\n                              struct http_response *rsp,\n                              const struct map *parameters,\n                              int require_version,\n                              struct editable_file **pfile);\n\n/* Error handlers */\njb_err cgi_error_modified(struct client_state *csp,\n                          struct http_response *rsp,\n                          const char *filename);\njb_err cgi_error_parse(struct client_state *csp,\n                       struct http_response *rsp,\n                       struct editable_file *file);\njb_err cgi_error_file(struct client_state *csp,\n                      struct http_response *rsp,\n                      const char *filename);\njb_err cgi_error_file_read_only(struct client_state *csp,\n                                struct http_response *rsp,\n                                const char *filename);\n\n/* Internal arbitrary config file support functions */\nstatic jb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline);\nstatic void edit_free_file_lines(struct file_line * first_line);\n\n/* Internal actions file support functions */\nstatic int match_actions_file_header_line(const char * line, const char * name);\nstatic jb_err split_line_on_equals(const char * line, char ** pname, char ** pvalue);\n\n/* Internal parameter parsing functions */\nstatic jb_err get_url_spec_param(struct client_state *csp,\n                                 const struct map *parameters,\n                                 const char *name,\n                                 char **pvalue);\n\n\n/* Internal actionsfile <==> HTML conversion functions */\nstatic jb_err map_radio(struct map * exports,\n                        const char * optionname,\n                        const char * values,\n                        int value);\nstatic jb_err actions_to_radio(struct map * exports,\n                               const struct action_spec *action);\nstatic jb_err actions_from_radio(const struct map * parameters,\n                                 struct action_spec *action);\n\n\nstatic jb_err map_copy_parameter_html(struct map *out,\n                                      const struct map *in,\n                                      const char *name);\n\nstatic jb_err get_file_name_param(struct client_state *csp,\n\t                                   const struct map *parameters,\n\t                                   const char *param_name,\n\t                                   const char **pfilename);\n\n/* Internal convenience functions */\nstatic char *section_target(const unsigned sectionid);\n\n/*********************************************************************\n *\n * Function    :  section_target\n *\n * Description :  Given an unsigned (section id) n, produce a dynamically\n *                allocated string of the form #l<n>, for use in link\n *                targets.\n *\n *                XXX: The hash should be moved into the templates\n *                to make this function more generic and render\n *                stringify() obsolete.\n *\n * Parameters  :\n *          1  :  sectionid = start line number of section\n *\n * Returns     :  String with link target, or NULL if out of\n *                memory\n *\n *********************************************************************/\nstatic char *section_target(const unsigned sectionid)\n{\n   char buf[30];\n\n   snprintf(buf, sizeof(buf), \"#l%u\", sectionid);\n   return(strdup(buf));\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  stringify\n *\n * Description :  Convert a number into a dynamically allocated string.\n *\n * Parameters  :\n *          1  :  number = The number to convert.\n *\n * Returns     :  String with link target, or NULL if out of memory\n *\n *********************************************************************/\nstatic char *stringify(const unsigned number)\n{\n   char buf[6];\n\n   snprintf(buf, sizeof(buf), \"%u\", number);\n   return strdup(buf);\n}\n\n\n/*********************************************************************\n *\n * Function    :  map_copy_parameter_html\n *\n * Description :  Copy a CGI parameter from one map to another, HTML\n *                encoding it.\n *\n * Parameters  :\n *          1  :  out = target map\n *          2  :  in = source map\n *          3  :  name = name of cgi parameter to copy\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the parameter doesn't exist\n *                                  in the source map\n *\n *********************************************************************/\nstatic jb_err map_copy_parameter_html(struct map *out,\n                                      const struct map *in,\n                                      const char *name)\n{\n   const char * value;\n   jb_err err;\n\n   assert(out);\n   assert(in);\n   assert(name);\n\n   value = lookup(in, name);\n   err = map(out, name, 1, html_encode(value), 0);\n\n   if (err)\n   {\n      /* Out of memory */\n      return err;\n   }\n   else if (*value == '\\0')\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n   else\n   {\n      return JB_ERR_OK;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_url_form\n *\n * Description :  CGI function that displays a form for\n *                edit-actions-url\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters\n *           i : (action index) Identifies the file to edit\n *           v : (version) File's last-modified time\n *           p : (pattern) Line number of pattern to edit\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_url_form(struct client_state *csp,\n                                 struct http_response *rsp,\n                                 const struct map *parameters)\n{\n   struct map * exports;\n   unsigned patternid;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   unsigned section_start_line_number = 0;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"p\", &patternid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   cur_line = file->lines;\n\n   for (line_number = 1; (cur_line != NULL) && (line_number < patternid); line_number++)\n   {\n      if (cur_line->type == FILE_LINE_ACTION)\n      {\n         section_start_line_number = line_number;\n      }\n      cur_line = cur_line->next;\n   }\n\n   if ( (cur_line == NULL)\n     || (line_number != patternid)\n     || (patternid < 1U)\n     || (cur_line->type != FILE_LINE_URL))\n   {\n      /* Invalid \"patternid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, stringify(file->identifier), 0);\n   if (!err) err = map(exports, \"v\", 1, file->version_str, 1);\n   if (!err) err = map(exports, \"p\", 1, url_encode(lookup(parameters, \"p\")), 0);\n   if (!err) err = map(exports, \"u\", 1, html_encode(cur_line->unprocessed), 0);\n   if (!err) err = map(exports, \"jumptarget\", 1, section_target(section_start_line_number), 0);\n\n   edit_free_file(file);\n\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"edit-actions-url-form\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_add_url_form\n *\n * Description :  CGI function that displays a form for\n *                edit-actions-url\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (filename) Identifies the file to edit\n *           v : (version) File's last-modified time\n *           s : (section) Line number of section to edit\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_add_url_form(struct client_state *csp,\n                                     struct http_response *rsp,\n                                     const struct map *parameters)\n{\n   struct map *exports;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = map_copy_parameter_html(exports, parameters, \"f\");\n   if (!err) err = map_copy_parameter_html(exports, parameters, \"v\");\n   if (!err) err = map_copy_parameter_html(exports, parameters, \"s\");\n\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"edit-actions-add-url-form\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_remove_url_form\n *\n * Description :  CGI function that displays a form for\n *                edit-actions-url\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (number)  The action file identifier.\n *           v : (version) File's last-modified time\n *           p : (pattern) Line number of pattern to edit\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_remove_url_form(struct client_state *csp,\n                                     struct http_response *rsp,\n                                     const struct map *parameters)\n{\n   struct map * exports;\n   unsigned patternid;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   unsigned section_start_line_number = 0;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"p\", &patternid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   cur_line = file->lines;\n\n   for (line_number = 1; (cur_line != NULL) && (line_number < patternid); line_number++)\n   {\n      if (cur_line->type == FILE_LINE_ACTION)\n      {\n         section_start_line_number = line_number;\n      }\n      cur_line = cur_line->next;\n   }\n\n   if ( (cur_line == NULL)\n     || (line_number != patternid)\n     || (patternid < 1U)\n     || (cur_line->type != FILE_LINE_URL))\n   {\n      /* Invalid \"patternid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, stringify(file->identifier), 0);\n   if (!err) err = map(exports, \"v\", 1, file->version_str, 1);\n   if (!err) err = map(exports, \"p\", 1, url_encode(lookup(parameters, \"p\")), 0);\n   if (!err) err = map(exports, \"u\", 1, html_encode(cur_line->unprocessed), 0);\n   if (!err) err = map(exports, \"jumptarget\", 1, section_target(section_start_line_number), 0);\n   if (!err) err = map(exports, \"actions-file\", 1, html_encode(file->filename), 0);\n\n   edit_free_file(file);\n\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"edit-actions-remove-url-form\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_write_file\n *\n * Description :  Write a complete file to disk.\n *\n * Parameters  :\n *          1  :  file = File to write.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_FILE   on error writing to file.\n *                JB_ERR_MEMORY on out of memory\n *\n *********************************************************************/\njb_err edit_write_file(struct editable_file * file)\n{\n   FILE * fp;\n   struct file_line * cur_line;\n   struct stat statbuf[1];\n   char version_buf[22]; /* 22 = ceil(log10(2^64)) + 2 = max number of\n                            digits in time_t, assuming this is a 64-bit\n                            machine, plus null terminator, plus one\n                            for paranoia */\n\n   assert(file);\n   assert(file->filename);\n\n   if (NULL == (fp = fopen(file->filename, \"wb\")))\n   {\n      return JB_ERR_FILE;\n   }\n\n   cur_line = file->lines;\n   while (cur_line != NULL)\n   {\n      if (cur_line->raw)\n      {\n         if (fputs(cur_line->raw, fp) < 0)\n         {\n            fclose(fp);\n            return JB_ERR_FILE;\n         }\n      }\n      else\n      {\n         if (cur_line->prefix)\n         {\n            if (fputs(cur_line->prefix, fp) < 0)\n            {\n               fclose(fp);\n               return JB_ERR_FILE;\n            }\n         }\n         if (cur_line->unprocessed)\n         {\n\n            if (NULL != strchr(cur_line->unprocessed, '#'))\n            {\n               /* Must quote '#' characters */\n               int numhash = 0;\n               size_t len;\n               char * src;\n               char * dest;\n               char * str;\n\n               /* Count number of # characters, so we know length of output string */\n               src = cur_line->unprocessed;\n               while (NULL != (src = strchr(src, '#')))\n               {\n                  numhash++;\n                  src++;\n               }\n               assert(numhash > 0);\n\n               /* Allocate new memory for string */\n               len = strlen(cur_line->unprocessed) + (size_t)numhash;\n               str = malloc_or_die(len + 1);\n\n               /* Copy string but quote hashes */\n               src  = cur_line->unprocessed;\n               dest = str;\n               while (*src)\n               {\n                  if (*src == '#')\n                  {\n                     *dest++ = '\\\\';\n                     numhash--;\n                     assert(numhash >= 0);\n                  }\n                  *dest++ = *src++;\n               }\n               *dest = '\\0';\n\n               assert(numhash == 0);\n               assert(strlen(str) == len);\n               assert(str == dest - len);\n               assert(src - len <= cur_line->unprocessed);\n\n               if ((strlen(str) != len) || (numhash != 0))\n               {\n                  /*\n                   * Escaping didn't work as expected, go spread the news.\n                   * Only reached in non-debugging builds.\n                   */\n                  log_error(LOG_LEVEL_ERROR,\n                     \"Looks like hash escaping failed. %s might be corrupted now.\",\n                     file->filename);\n               }\n\n               if (fputs(str, fp) < 0)\n               {\n                  free(str);\n                  fclose(fp);\n                  return JB_ERR_FILE;\n               }\n\n               free(str);\n            }\n            else\n            {\n               /* Can write without quoting '#' characters. */\n               if (fputs(cur_line->unprocessed, fp) < 0)\n               {\n                  fclose(fp);\n                  return JB_ERR_FILE;\n               }\n            }\n            if (fputs(NEWLINE(file->newline), fp) < 0)\n            {\n               fclose(fp);\n               return JB_ERR_FILE;\n            }\n         }\n         else\n         {\n            /* FIXME: Write data from file->data->whatever */\n            assert(0);\n         }\n      }\n      cur_line = cur_line->next;\n   }\n\n   fclose(fp);\n\n\n   /* Update the version stamp in the file structure, since we just\n    * wrote to the file & changed it's date.\n    */\n   if (stat(file->filename, statbuf) < 0)\n   {\n      /* Error, probably file not found. */\n      return JB_ERR_FILE;\n   }\n   file->version = (unsigned)statbuf->st_mtime;\n\n   /* Correct file->version_str */\n   freez(file->version_str);\n   snprintf(version_buf, sizeof(version_buf), \"%u\", file->version);\n   version_buf[sizeof(version_buf)-1] = '\\0';\n   file->version_str = strdup_or_die(version_buf);\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_free_file\n *\n * Description :  Free a complete file in memory.\n *\n * Parameters  :\n *          1  :  file = Data structure to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid edit_free_file(struct editable_file * file)\n{\n   if (!file)\n   {\n      /* Silently ignore NULL pointer */\n      return;\n   }\n\n   edit_free_file_lines(file->lines);\n   freez(file->version_str);\n   file->version = 0;\n   file->parse_error_text = NULL; /* Statically allocated */\n   file->parse_error = NULL;\n\n   free(file);\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_free_file_lines\n *\n * Description :  Free an entire linked list of file lines.\n *\n * Parameters  :\n *          1  :  first_line = Data structure to free.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void edit_free_file_lines(struct file_line * first_line)\n{\n   struct file_line * next_line;\n\n   while (first_line != NULL)\n   {\n      next_line = first_line->next;\n      first_line->next = NULL;\n      freez(first_line->raw);\n      freez(first_line->prefix);\n      freez(first_line->unprocessed);\n      switch(first_line->type)\n      {\n         case 0: /* special case if memory zeroed */\n         case FILE_LINE_UNPROCESSED:\n         case FILE_LINE_BLANK:\n         case FILE_LINE_ALIAS_HEADER:\n         case FILE_LINE_SETTINGS_HEADER:\n         case FILE_LINE_DESCRIPTION_HEADER:\n         case FILE_LINE_DESCRIPTION_ENTRY:\n         case FILE_LINE_ALIAS_ENTRY:\n         case FILE_LINE_URL:\n            /* No data is stored for these */\n            break;\n\n         case FILE_LINE_ACTION:\n            free_action(first_line->data.action);\n            break;\n\n         case FILE_LINE_SETTINGS_ENTRY:\n            freez(first_line->data.setting.name);\n            freez(first_line->data.setting.svalue);\n            break;\n         default:\n            /* Should never happen */\n            assert(0);\n            break;\n      }\n      first_line->type = 0; /* paranoia */\n      free(first_line);\n      first_line = next_line;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  match_actions_file_header_line\n *\n * Description :  Match an actions file {{header}} line\n *\n * Parameters  :\n *          1  :  line = String from file\n *          2  :  name = Header to match against\n *\n * Returns     :  0 iff they match.\n *\n *********************************************************************/\nstatic int match_actions_file_header_line(const char * line, const char * name)\n{\n   size_t len;\n\n   assert(line);\n   assert(name);\n\n   /* Look for \"{{\" */\n   if ((line[0] != '{') || (line[1] != '{'))\n   {\n      return 1;\n   }\n   line += 2;\n\n   /* Look for optional whitespace */\n   while ((*line == ' ') || (*line == '\\t'))\n   {\n      line++;\n   }\n\n   /* Look for the specified name (case-insensitive) */\n   len = strlen(name);\n   if (0 != strncmpic(line, name, len))\n   {\n      return 1;\n   }\n   line += len;\n\n   /* Look for optional whitespace */\n   while ((*line == ' ') || (*line == '\\t'))\n   {\n      line++;\n   }\n\n   /* Look for \"}}\" and end of string*/\n   if ((line[0] != '}') || (line[1] != '}') || (line[2] != '\\0'))\n   {\n      return 1;\n   }\n\n   /* It matched!! */\n   return 0;\n}\n\n\n/*********************************************************************\n *\n * Function    :  match_actions_file_header_line\n *\n * Description :  Match an actions file {{header}} line\n *\n * Parameters  :\n *          1  :  line = String from file.  Must not start with\n *                       whitespace (else infinite loop!)\n *          2  :  pname = Destination for name\n *          2  :  pvalue = Destination for value\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_PARSE  if there's no \"=\" sign, or if there's\n *                              nothing before the \"=\" sign (but empty\n *                              values *after* the \"=\" sign are legal).\n *\n *********************************************************************/\nstatic jb_err split_line_on_equals(const char * line, char ** pname, char ** pvalue)\n{\n   const char * name_end;\n   const char * value_start;\n   size_t name_len;\n\n   assert(line);\n   assert(pname);\n   assert(pvalue);\n   assert(*line != ' ');\n   assert(*line != '\\t');\n\n   *pname = NULL;\n   *pvalue = NULL;\n\n   value_start = strchr(line, '=');\n   if ((value_start == NULL) || (value_start == line))\n   {\n      return JB_ERR_PARSE;\n   }\n\n   name_end = value_start - 1;\n\n   /* Eat any whitespace before the '=' */\n   while ((*name_end == ' ') || (*name_end == '\\t'))\n   {\n      /*\n       * we already know we must have at least 1 non-ws char\n       * at start of buf - no need to check\n       */\n      name_end--;\n   }\n\n   name_len = (size_t)(name_end - line) + 1; /* Length excluding \\0 */\n   *pname = malloc_or_die(name_len + 1);\n   strncpy(*pname, line, name_len);\n   (*pname)[name_len] = '\\0';\n\n   /* Eat any the whitespace after the '=' */\n   value_start++;\n   while ((*value_start == ' ') || (*value_start == '\\t'))\n   {\n      value_start++;\n   }\n\n   if (NULL == (*pvalue = strdup(value_start)))\n   {\n      free(*pname);\n      *pname = NULL;\n      return JB_ERR_MEMORY;\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_parse_actions_file\n *\n * Description :  Parse an actions file in memory.\n *\n *                Passed linked list must have the \"data\" member\n *                zeroed, and must contain valid \"next\" and\n *                \"unprocessed\" fields.  The \"raw\" and \"prefix\"\n *                fields are ignored, and \"type\" is just overwritten.\n *\n *                Note that on error the file may have been\n *                partially parsed.\n *\n * Parameters  :\n *          1  :  file = Actions file to be parsed in-place.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_PARSE  on error\n *\n *********************************************************************/\njb_err edit_parse_actions_file(struct editable_file * file)\n{\n   struct file_line * cur_line;\n   size_t len;\n   const char * text; /* Text from a line */\n   char * name;  /* For lines of the form name=value */\n   char * value; /* For lines of the form name=value */\n   struct action_alias * alias_list = NULL;\n   jb_err err = JB_ERR_OK;\n\n   /* alias_list contains the aliases defined in this file.\n    * It might be better to use the \"file_line.data\" fields\n    * in the relavent places instead.\n    */\n\n   cur_line = file->lines;\n\n   /* A note about blank line support: Blank lines should only\n    * ever occur as the last line in the file.  This function\n    * is more forgiving than that - FILE_LINE_BLANK can occur\n    * anywhere.\n    */\n\n   /* Skip leading blanks.  Should only happen if file is\n    * empty (which is valid, but pointless).\n    */\n   while ((cur_line != NULL)\n       && (cur_line->unprocessed[0] == '\\0'))\n   {\n      /* Blank line */\n      cur_line->type = FILE_LINE_BLANK;\n      cur_line = cur_line->next;\n   }\n\n   if ((cur_line != NULL)\n    && (cur_line->unprocessed[0] != '{'))\n   {\n      /* File doesn't start with a header */\n      file->parse_error = cur_line;\n      file->parse_error_text = \"First (non-comment) line of the file must contain a header.\";\n      return JB_ERR_PARSE;\n   }\n\n   if ((cur_line != NULL) && (0 ==\n      match_actions_file_header_line(cur_line->unprocessed, \"settings\")))\n   {\n      cur_line->type = FILE_LINE_SETTINGS_HEADER;\n\n      cur_line = cur_line->next;\n      while ((cur_line != NULL) && (cur_line->unprocessed[0] != '{'))\n      {\n         if (cur_line->unprocessed[0])\n         {\n            cur_line->type = FILE_LINE_SETTINGS_ENTRY;\n\n            err = split_line_on_equals(cur_line->unprocessed,\n                     &cur_line->data.setting.name,\n                     &cur_line->data.setting.svalue);\n            if (err == JB_ERR_MEMORY)\n            {\n               return err;\n            }\n            else if (err != JB_ERR_OK)\n            {\n               /* Line does not contain a name=value pair */\n               file->parse_error = cur_line;\n               file->parse_error_text = \"Expected a name=value pair on this {{description}} line, but couldn't find one.\";\n               return JB_ERR_PARSE;\n            }\n         }\n         else\n         {\n            cur_line->type = FILE_LINE_BLANK;\n         }\n         cur_line = cur_line->next;\n      }\n   }\n\n   if ((cur_line != NULL) && (0 ==\n      match_actions_file_header_line(cur_line->unprocessed, \"description\")))\n   {\n      cur_line->type = FILE_LINE_DESCRIPTION_HEADER;\n\n      cur_line = cur_line->next;\n      while ((cur_line != NULL) && (cur_line->unprocessed[0] != '{'))\n      {\n         if (cur_line->unprocessed[0])\n         {\n            cur_line->type = FILE_LINE_DESCRIPTION_ENTRY;\n         }\n         else\n         {\n            cur_line->type = FILE_LINE_BLANK;\n         }\n         cur_line = cur_line->next;\n      }\n   }\n\n   if ((cur_line != NULL) && (0 ==\n      match_actions_file_header_line(cur_line->unprocessed, \"alias\")))\n   {\n      cur_line->type = FILE_LINE_ALIAS_HEADER;\n\n      cur_line = cur_line->next;\n      while ((cur_line != NULL) && (cur_line->unprocessed[0] != '{'))\n      {\n         if (cur_line->unprocessed[0])\n         {\n            /* define an alias */\n            struct action_alias * new_alias;\n\n            cur_line->type = FILE_LINE_ALIAS_ENTRY;\n\n            err = split_line_on_equals(cur_line->unprocessed, &name, &value);\n            if (err == JB_ERR_MEMORY)\n            {\n               free_alias_list(alias_list);\n               return err;\n            }\n            else if (err != JB_ERR_OK)\n            {\n               /* Line does not contain a name=value pair */\n               file->parse_error = cur_line;\n               file->parse_error_text = \"Expected a name=value pair on this {{alias}} line, but couldn't find one.\";\n               free_alias_list(alias_list);\n               return JB_ERR_PARSE;\n            }\n\n            if ((new_alias = zalloc(sizeof(*new_alias))) == NULL)\n            {\n               /* Out of memory */\n               free(name);\n               free(value);\n               free_alias_list(alias_list);\n               return JB_ERR_MEMORY;\n            }\n\n            err = get_actions(value, alias_list, new_alias->action);\n            if (err)\n            {\n               /* Invalid action or out of memory */\n               free(name);\n               free(value);\n               free(new_alias);\n               free_alias_list(alias_list);\n               if (err == JB_ERR_MEMORY)\n               {\n                  return err;\n               }\n               else\n               {\n                  /* Line does not contain a name=value pair */\n                  file->parse_error = cur_line;\n                  file->parse_error_text = \"This alias does not specify a valid set of actions.\";\n                  return JB_ERR_PARSE;\n               }\n            }\n\n            free(value);\n\n            new_alias->name = name;\n\n            /* add to list */\n            new_alias->next = alias_list;\n            alias_list = new_alias;\n         }\n         else\n         {\n            cur_line->type = FILE_LINE_BLANK;\n         }\n         cur_line = cur_line->next;\n      }\n   }\n\n   /* Header done, process the main part of the file */\n   while (cur_line != NULL)\n   {\n      /* At this point, (cur_line->unprocessed[0] == '{') */\n      assert(cur_line->unprocessed[0] == '{');\n      text = cur_line->unprocessed + 1;\n      len = strlen(text) - 1;\n      if (text[len] != '}')\n      {\n         /* No closing } on header */\n         free_alias_list(alias_list);\n         file->parse_error = cur_line;\n         file->parse_error_text = \"Headers starting with '{' must have a \"\n            \"closing bracket ('}').  Headers starting with two brackets ('{{') \"\n            \"must close with two brackets ('}}').\";\n         return JB_ERR_PARSE;\n      }\n\n      if (text[0] == '{')\n      {\n         /* An invalid {{ header.  */\n         free_alias_list(alias_list);\n         file->parse_error = cur_line;\n         file->parse_error_text = \"Unknown or unexpected two-bracket header.  \"\n            \"Please remember that the system (two-bracket) headers must \"\n            \"appear in the order {{settings}}, {{description}}, {{alias}}, \"\n            \"and must appear before any actions (one-bracket) headers.  \"\n            \"Also note that system headers may not be repeated.\";\n         return JB_ERR_PARSE;\n      }\n\n      while ((*text == ' ') || (*text == '\\t'))\n      {\n         text++;\n         len--;\n      }\n      while ((len > (size_t)0)\n           && ((text[len - 1] == ' ')\n            || (text[len - 1] == '\\t')))\n      {\n         len--;\n      }\n\n      cur_line->type = FILE_LINE_ACTION;\n\n      /* Remove {} and make copy */\n      value = malloc_or_die(len + 1);\n      strncpy(value, text, len);\n      value[len] = '\\0';\n\n      /* Get actions */\n      err = get_actions(value, alias_list, cur_line->data.action);\n      if (err)\n      {\n         /* Invalid action or out of memory */\n         free(value);\n         free_alias_list(alias_list);\n         if (err == JB_ERR_MEMORY)\n         {\n            return err;\n         }\n         else\n         {\n            /* Line does not contain a name=value pair */\n            file->parse_error = cur_line;\n            file->parse_error_text = \"This header does not specify a valid set of actions.\";\n            return JB_ERR_PARSE;\n         }\n      }\n\n      /* Done with string - it was clobbered anyway */\n      free(value);\n\n      /* Process next line */\n      cur_line = cur_line->next;\n\n      /* Loop processing URL patterns */\n      while ((cur_line != NULL) && (cur_line->unprocessed[0] != '{'))\n      {\n         if (cur_line->unprocessed[0])\n         {\n            /* Could parse URL here, but this isn't currently needed */\n\n            cur_line->type = FILE_LINE_URL;\n         }\n         else\n         {\n            cur_line->type = FILE_LINE_BLANK;\n         }\n         cur_line = cur_line->next;\n      }\n   } /* End main while(cur_line != NULL) loop */\n\n   free_alias_list(alias_list);\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_read_file_lines\n *\n * Description :  Read all the lines of a file into memory.\n *                Handles whitespace, comments and line continuation.\n *\n * Parameters  :\n *          1  :  fp = File to read from.  On return, this will be\n *                     at EOF but it will not have been closed.\n *          2  :  pfile = Destination for a linked list of file_lines.\n *                        Will be set to NULL on error.\n *          3  :  newline = How to handle newlines.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\njb_err edit_read_file_lines(FILE *fp, struct file_line ** pfile, int *newline)\n{\n   struct file_line * first_line; /* Keep for return value or to free */\n   struct file_line * cur_line;   /* Current line */\n   struct file_line * prev_line;  /* Entry with prev_line->next = cur_line */\n   jb_err rval;\n\n   assert(fp);\n   assert(pfile);\n\n   *pfile = NULL;\n\n   cur_line = first_line = zalloc(sizeof(struct file_line));\n   if (cur_line == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   cur_line->type = FILE_LINE_UNPROCESSED;\n\n   rval = edit_read_line(fp, &cur_line->raw, &cur_line->prefix, &cur_line->unprocessed, newline, NULL);\n   if (rval)\n   {\n      /* Out of memory or empty file. */\n      /* Note that empty file is not an error we propagate up */\n      free(cur_line);\n      return ((rval == JB_ERR_FILE) ? JB_ERR_OK : rval);\n   }\n\n   do\n   {\n      prev_line = cur_line;\n      cur_line = prev_line->next = zalloc(sizeof(struct file_line));\n      if (cur_line == NULL)\n      {\n         /* Out of memory */\n         edit_free_file_lines(first_line);\n         return JB_ERR_MEMORY;\n      }\n\n      cur_line->type = FILE_LINE_UNPROCESSED;\n\n      rval = edit_read_line(fp, &cur_line->raw, &cur_line->prefix, &cur_line->unprocessed, newline, NULL);\n      if ((rval != JB_ERR_OK) && (rval != JB_ERR_FILE))\n      {\n         /* Out of memory */\n         edit_free_file_lines(first_line);\n         return JB_ERR_MEMORY;\n      }\n\n   }\n   while (rval != JB_ERR_FILE);\n\n   /* EOF */\n\n   /* We allocated one too many - free it */\n   prev_line->next = NULL;\n   free(cur_line);\n\n   *pfile = first_line;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_read_file\n *\n * Description :  Read a complete file into memory.\n *                Handles CGI parameter parsing.  If requested, also\n *                checks the file's modification timestamp.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  parameters = map of cgi parameters.\n *          3  :  require_version = true to check \"ver\" parameter.\n *          4  :  pfile = Destination for the file.  Will be set\n *                        to NULL on error.\n *\n * CGI Parameters :\n *           f :  The action file identifier.\n *         ver :  (Only if require_version is nonzero)\n *                Timestamp of the actions file.  If wrong, this\n *                function fails with JB_ERR_MODIFIED.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if \"filename\" was not specified\n *                                  or is not valid.\n *                JB_ERR_FILE   if the file cannot be opened or\n *                              contains no data\n *                JB_ERR_MODIFIED if version checking was requested and\n *                                failed - the file was modified outside\n *                                of this CGI editor instance.\n *\n *********************************************************************/\njb_err edit_read_file(struct client_state *csp,\n                      const struct map *parameters,\n                      int require_version,\n                      struct editable_file **pfile)\n{\n   struct file_line * lines;\n   FILE * fp;\n   jb_err err;\n   const char *filename = NULL;\n   struct editable_file * file;\n   unsigned version = 0;\n   struct stat statbuf[1];\n   char version_buf[22];\n   int newline = NEWLINE_UNKNOWN;\n   unsigned i;\n\n   assert(csp);\n   assert(parameters);\n   assert(pfile);\n\n   *pfile = NULL;\n\n   err = get_number_param(csp, parameters, \"f\", &i);\n   if ((JB_ERR_OK == err) && (i < MAX_AF_FILES) && (NULL != csp->config->actions_file[i]))\n   {\n      filename = csp->config->actions_file[i];\n   }\n   else if (JB_ERR_CGI_PARAMS == err)\n   {\n      /*\n       * Probably an old-school URL like\n       * http://config.privoxy.org/edit-actions-list?f=default\n       */\n      get_file_name_param(csp, parameters, \"f\", &filename);\n   }\n\n   if (NULL == filename || stat(filename, statbuf) < 0)\n   {\n      /* Error, probably file not found. */\n      return JB_ERR_FILE;\n   }\n   version = (unsigned) statbuf->st_mtime;\n\n   if (require_version)\n   {\n      unsigned specified_version;\n      err = get_number_param(csp, parameters, \"v\", &specified_version);\n      if (err)\n      {\n         return err;\n      }\n\n      if (version != specified_version)\n      {\n         return JB_ERR_MODIFIED;\n      }\n   }\n\n   if (NULL == (fp = fopen(filename,\"rb\")))\n   {\n      return JB_ERR_FILE;\n   }\n\n   err = edit_read_file_lines(fp, &lines, &newline);\n\n   fclose(fp);\n\n   if (err)\n   {\n      return err;\n   }\n\n   file = (struct editable_file *) zalloc(sizeof(*file));\n   if (file == NULL)\n   {\n      edit_free_file_lines(lines);\n      return err;\n   }\n\n   file->lines = lines;\n   file->newline = newline;\n   file->filename = filename;\n   file->version = version;\n   file->identifier = i;\n\n   /* Correct file->version_str */\n   freez(file->version_str);\n   snprintf(version_buf, sizeof(version_buf), \"%u\", file->version);\n   version_buf[sizeof(version_buf)-1] = '\\0';\n   file->version_str = strdup_or_die(version_buf);\n\n   *pfile = file;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_read_actions_file\n *\n * Description :  Read a complete actions file into memory.\n *                Handles CGI parameter parsing.  If requested, also\n *                checks the file's modification timestamp.\n *\n *                If this function detects an error in the categories\n *                JB_ERR_FILE, JB_ERR_MODIFIED, or JB_ERR_PARSE,\n *                then it handles it by filling in the specified\n *                response structure and returning JB_ERR_FILE.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = HTTP response.  Only filled in on error.\n *          2  :  parameters = map of cgi parameters.\n *          3  :  require_version = true to check \"ver\" parameter.\n *          4  :  pfile = Destination for the file.  Will be set\n *                        to NULL on error.\n *\n * CGI Parameters :\n *           f :  The actions file identifier.\n *         ver :  (Only if require_version is nonzero)\n *                Timestamp of the actions file.  If wrong, this\n *                function fails with JB_ERR_MODIFIED.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if \"filename\" was not specified\n *                                  or is not valid.\n *                JB_ERR_FILE  if the file does not contain valid data,\n *                             or if file cannot be opened or\n *                             contains no data, or if version\n *                             checking was requested and failed.\n *\n *********************************************************************/\njb_err edit_read_actions_file(struct client_state *csp,\n                              struct http_response *rsp,\n                              const struct map *parameters,\n                              int require_version,\n                              struct editable_file **pfile)\n{\n   jb_err err;\n   struct editable_file *file;\n   static int acceptable_failures = ACCEPTABLE_TIMESTAMP_MISMATCHES - 1;\n\n   assert(csp);\n   assert(parameters);\n   assert(pfile);\n\n   *pfile = NULL;\n\n   err = edit_read_file(csp, parameters, require_version, &file);\n   if (err)\n   {\n      /* Try to handle if possible */\n      if (err == JB_ERR_FILE)\n      {\n         err = cgi_error_file(csp, rsp, lookup(parameters, \"f\"));\n      }\n      else if (err == JB_ERR_MODIFIED)\n      {\n         assert(require_version);\n         err = cgi_error_modified(csp, rsp, lookup(parameters, \"f\"));\n         log_error(LOG_LEVEL_ERROR,\n            \"Blocking CGI edit request due to modification time mismatch.\");\n         if (acceptable_failures > 0)\n         {\n            log_error(LOG_LEVEL_INFO,\n               \"The CGI editor will be turned off after another %d mismatche(s).\",\n               acceptable_failures);\n            acceptable_failures--;\n         }\n         else\n         {\n            log_error(LOG_LEVEL_INFO,\n               \"Timestamp mismatch limit reached, turning CGI editor off. \"\n               \"Reload the configuration file to re-enable it.\");\n            csp->config->feature_flags &= ~RUNTIME_FEATURE_CGI_EDIT_ACTIONS;\n         }\n      }\n      if (err == JB_ERR_OK)\n      {\n         /*\n          * Signal to higher-level CGI code that there was a problem but we\n          * handled it, they should just return JB_ERR_OK.\n          */\n         err = JB_ERR_FILE;\n      }\n      return err;\n   }\n\n   err = edit_parse_actions_file(file);\n   if (err)\n   {\n      if (err == JB_ERR_PARSE)\n      {\n         err = cgi_error_parse(csp, rsp, file);\n         if (err == JB_ERR_OK)\n         {\n            /*\n             * Signal to higher-level CGI code that there was a problem but we\n             * handled it, they should just return JB_ERR_OK.\n             */\n            err = JB_ERR_FILE;\n         }\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   *pfile = file;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_file_name_param\n *\n * Description :  Get the name of the file to edit from the parameters\n *                passed to a CGI function using the old syntax.\n *                This function handles security checks and only\n *                accepts files that Privoxy already knows.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  parameters = map of cgi parameters\n *          3  :  param_name = The name of the parameter to read\n *          4  :  pfilename = pointer to the filename in\n *                csp->config->actions_file[] if found. Set to NULL on error.\n *\n * Returns     :  JB_ERR_OK         on success\n *                JB_ERR_MEMORY     on out-of-memory\n *                JB_ERR_CGI_PARAMS if \"filename\" was not specified\n *                                  or is not valid.\n *\n *********************************************************************/\nstatic jb_err get_file_name_param(struct client_state *csp,\n                                  const struct map *parameters,\n                                  const char *param_name,\n                                  const char **pfilename)\n{\n   const char *param;\n   const char suffix[] = \".action\";\n   const char *s;\n   char *name;\n   char *fullpath;\n   char ch;\n   size_t len;\n   size_t name_size;\n   int i;\n\n   assert(csp);\n   assert(parameters);\n   assert(pfilename);\n\n   *pfilename = NULL;\n\n   param = lookup(parameters, param_name);\n   if (!*param)\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   len = strlen(param);\n   if (len >= FILENAME_MAX)\n   {\n      /* Too long. */\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /*\n    * Check every character to see if it's legal.\n    * Totally unnecessary but we do it anyway.\n    */\n   s = param;\n   while ((ch = *s++) != '\\0')\n   {\n      if ( ((ch < 'A') || (ch > 'Z'))\n        && ((ch < 'a') || (ch > 'z'))\n        && ((ch < '0') || (ch > '9'))\n        && (ch != '-')\n        && (ch != '_'))\n      {\n         /* Probable hack attempt. */\n         return JB_ERR_CGI_PARAMS;\n      }\n   }\n\n   /* Append extension */\n   name_size = len + strlen(suffix) + 1;\n   name = malloc_or_die(name_size);\n   strlcpy(name, param, name_size);\n   strlcat(name, suffix, name_size);\n\n   /* Prepend path */\n   fullpath = make_path(csp->config->confdir, name);\n   free(name);\n\n   if (fullpath == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   /* Check if the file is known */\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (NULL != csp->config->actions_file[i] &&\n          !strcmp(fullpath, csp->config->actions_file[i]))\n      {\n         /* Success */\n         *pfilename = csp->config->actions_file[i];\n         freez(fullpath);\n\n         return JB_ERR_OK;\n      }\n   }\n   freez(fullpath);\n\n   return JB_ERR_CGI_PARAMS;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_url_spec_param\n *\n * Description :  Get a URL pattern from the parameters\n *                passed to a CGI function.  Removes leading/trailing\n *                spaces and validates it.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  parameters = map of cgi parameters\n *          3  :  name = Name of CGI parameter to read\n *          4  :  pvalue = destination for value.  Will be malloc()'d.\n *                         Set to NULL on error.\n *\n * Returns     :  JB_ERR_OK         on success\n *                JB_ERR_MEMORY     on out-of-memory\n *                JB_ERR_CGI_PARAMS if the parameter was not specified\n *                                  or is not valid.\n *\n *********************************************************************/\nstatic jb_err get_url_spec_param(struct client_state *csp,\n                                 const struct map *parameters,\n                                 const char *name,\n                                 char **pvalue)\n{\n   const char *orig_param;\n   char *param;\n   char *s;\n   struct pattern_spec compiled[1];\n   jb_err err;\n\n   assert(csp);\n   assert(parameters);\n   assert(name);\n   assert(pvalue);\n\n   *pvalue = NULL;\n\n   orig_param = lookup(parameters, name);\n   if (!*orig_param)\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* Copy and trim whitespace */\n   param = strdup(orig_param);\n   if (param == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n   chomp(param);\n\n   /* Must be non-empty, and can't allow 1st character to be '{' */\n   if (param[0] == '\\0' || param[0] == '{')\n   {\n      free(param);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* Check for embedded newlines */\n   for (s = param; *s != '\\0'; s++)\n   {\n      if ((*s == '\\r') || (*s == '\\n'))\n      {\n         free(param);\n         return JB_ERR_CGI_PARAMS;\n      }\n   }\n\n   /* Check that regex is valid */\n   s = strdup(param);\n   if (s == NULL)\n   {\n      free(param);\n      return JB_ERR_MEMORY;\n   }\n   err = create_pattern_spec(compiled, s);\n   free(s);\n   if (err)\n   {\n      free(param);\n      return (err == JB_ERR_MEMORY) ? JB_ERR_MEMORY : JB_ERR_CGI_PARAMS;\n   }\n   free_pattern_spec(compiled);\n\n   if (param[strlen(param) - 1] == '\\\\')\n   {\n      /*\n       * Must protect trailing '\\\\' from becoming line continuation character.\n       * Two methods: 1) If it's a domain only, add a trailing '/'.\n       * 2) For path, add the do-nothing PCRE expression (?:) to the end\n       */\n      if (strchr(param, '/') == NULL)\n      {\n         err = string_append(&param, \"/\");\n      }\n      else\n      {\n         err = string_append(&param, \"(?:)\");\n      }\n      if (err)\n      {\n         return err;\n      }\n\n      /* Check that the modified regex is valid */\n      s = strdup(param);\n      if (s == NULL)\n      {\n         free(param);\n         return JB_ERR_MEMORY;\n      }\n      err = create_pattern_spec(compiled, s);\n      free(s);\n      if (err)\n      {\n         free(param);\n         return (err == JB_ERR_MEMORY) ? JB_ERR_MEMORY : JB_ERR_CGI_PARAMS;\n      }\n      free_pattern_spec(compiled);\n   }\n\n   *pvalue = param;\n   return JB_ERR_OK;\n}\n\n/*********************************************************************\n *\n * Function    :  map_radio\n *\n * Description :  Map a set of radio button values.  E.g. if you have\n *                3 radio buttons, declare them as:\n *                  <option type=\"radio\" name=\"xyz\" @xyz-a@>\n *                  <option type=\"radio\" name=\"xyz\" @xyz-b@>\n *                  <option type=\"radio\" name=\"xyz\" @xyz-c@>\n *                Then map one of the @xyz-?@ variables to \"checked\"\n *                and all the others to empty by calling:\n *                map_radio(exports, \"xyz\", \"abc\", sel)\n *                Where 'sel' is 'a', 'b', or 'c'.\n *\n * Parameters  :\n *          1  :  exports = Exports map to modify.\n *          2  :  optionname = name for map\n *          3  :  values = null-terminated list of values;\n *          4  :  value = Selected value.\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\nstatic jb_err map_radio(struct map * exports,\n                        const char * optionname,\n                        const char * values,\n                        int value)\n{\n   char * buf;\n   char * p;\n   char c;\n   const size_t len = strlen(optionname);\n   const size_t buf_size = len + 3;\n\n   assert(exports);\n   assert(optionname);\n   assert(values);\n\n   buf = malloc_or_die(buf_size);\n\n   strlcpy(buf, optionname, buf_size);\n\n   /* XXX: this looks ... interesting */\n   p = buf + len;\n   *p++ = '-';\n   p[1] = '\\0';\n\n   while ((c = *values++) != '\\0')\n   {\n      if (c != value)\n      {\n         *p = c;\n         if (map(exports, buf, 1, \"\", 1))\n         {\n            return JB_ERR_MEMORY;\n         }\n      }\n   }\n\n   *p = (char)value;\n   return map(exports, buf, 0, \"checked\", 1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_modified\n *\n * Description :  CGI function that is called when a file is modified\n *                outside the CGI editor.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  filename = The file that was modified.\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_modified(struct client_state *csp,\n                          struct http_response *rsp,\n                          const char *filename)\n{\n   struct map *exports;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(filename);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, html_encode(filename), 0);\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-modified\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_parse\n *\n * Description :  CGI function that is called when a file cannot\n *                be parsed by the CGI editor.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  file = The file that was modified.\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_parse(struct client_state *csp,\n                       struct http_response *rsp,\n                       struct editable_file *file)\n{\n   struct map *exports;\n   jb_err err;\n   struct file_line *cur_line;\n\n   assert(csp);\n   assert(rsp);\n   assert(file);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, stringify(file->identifier), 0);\n   if (!err) err = map(exports, \"parse-error\", 1, html_encode(file->parse_error_text), 0);\n\n   cur_line = file->parse_error;\n   assert(cur_line);\n\n   if (!err) err = map(exports, \"line-raw\", 1, html_encode(cur_line->raw), 0);\n   if (!err) err = map(exports, \"line-data\", 1, html_encode(cur_line->unprocessed), 0);\n\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-parse\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_file\n *\n * Description :  CGI function that is called when a file cannot be\n *                opened by the CGI editor.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  filename = The file that was modified.\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_file(struct client_state *csp,\n                      struct http_response *rsp,\n                      const char *filename)\n{\n   struct map *exports;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(filename);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, html_encode(filename), 0);\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-file\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_file_read_only\n *\n * Description :  CGI function that is called when a file cannot be\n *                opened for writing by the CGI editor.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  filename = The file that we can't write to\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_file_read_only(struct client_state *csp,\n                                struct http_response *rsp,\n                                const char *filename)\n{\n   struct map *exports;\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(filename);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, html_encode(filename), 0);\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"cgi-error-file-read-only\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions\n *\n * Description :  CGI function that allows the user to choose which\n *                actions file to edit.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error\n *\n *********************************************************************/\njb_err cgi_edit_actions(struct client_state *csp,\n                        struct http_response *rsp,\n                        const struct map *parameters)\n{\n   (void)parameters;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   /* FIXME: Incomplete */\n\n   return cgi_redirect(rsp, CGI_PREFIX \"edit-actions-list?f=default\");\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_list\n *\n * Description :  CGI function that edits the actions list.\n *                FIXME: This function shouldn't FATAL ever.\n *                FIXME: This function doesn't check the retval of map()\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : filename\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_FILE   if the file cannot be opened or\n *                              contains no data\n *                JB_ERR_CGI_PARAMS if \"filename\" was not specified\n *                                  or is not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_list(struct client_state *csp,\n                             struct http_response *rsp,\n                             const struct map *parameters)\n{\n   char * section_template;\n   char * url_template;\n   char * sections;\n   char * urls;\n   char buf[150];\n   char * s;\n   struct map * exports;\n   struct map * section_exports;\n   struct map * url_exports;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number = 0;\n   unsigned prev_section_line_number = ((unsigned) (-1));\n   int i, url_1_2;\n   struct file_list * fl;\n   struct url_actions * b;\n   char * buttons = NULL;\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   /* Load actions file */\n   err = edit_read_actions_file(csp, rsp, parameters, 0, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, or out of memory. */\n      free_map(exports);\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   /* Find start of actions in file */\n   cur_line = file->lines;\n   line_number = 1;\n   while ((cur_line != NULL) && (cur_line->type != FILE_LINE_ACTION))\n   {\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   /*\n    * Conventional actions files should have a match all block\n    * at the start:\n    * cur_line             = {...global actions...}\n    * cur_line->next       = /\n    * cur_line->next->next = {...actions...} or EOF\n    */\n   if ( (cur_line != NULL)\n     && (cur_line->type == FILE_LINE_ACTION)\n     && (cur_line->next != NULL)\n     && (cur_line->next->type == FILE_LINE_URL)\n     && (0 == strcmp(cur_line->next->unprocessed, \"/\"))\n     && ( (cur_line->next->next == NULL)\n       || (cur_line->next->next->type != FILE_LINE_URL)\n      ) )\n   {\n      /*\n       * Generate string with buttons to set actions for \"/\" to\n       * any predefined set of actions (named standard.*, probably\n       * residing in standard.action).\n       */\n\n      err = template_load(csp, &section_template, \"edit-actions-list-button\", 0);\n      if (err)\n      {\n         edit_free_file(file);\n         free_map(exports);\n         if (err == JB_ERR_FILE)\n         {\n            return cgi_error_no_template(csp, rsp, \"edit-actions-list-button\");\n         }\n         return err;\n      }\n\n      err = template_fill(&section_template, exports);\n      if (err)\n      {\n         edit_free_file(file);\n         free_map(exports);\n         return err;\n      }\n\n      buttons = strdup(\"\");\n      for (i = 0; i < MAX_AF_FILES; i++)\n      {\n         if (((fl = csp->actions_list[i]) != NULL) && ((b = fl->f) != NULL))\n         {\n            for (b = b->next; NULL != b; b = b->next)\n            {\n               if (!strncmp(b->url->spec, \"standard.\", 9) && *(b->url->spec + 9) != '\\0')\n               {\n                  if (err)\n                  {\n                     freez(buttons);\n                     free(section_template);\n                     edit_free_file(file);\n                     free_map(exports);\n                     return JB_ERR_MEMORY;\n                  }\n\n                  section_exports = new_map();\n                  err = map(section_exports, \"button-name\", 1, b->url->spec + 9, 1);\n\n                  if (err || (NULL == (s = strdup(section_template))))\n                  {\n                     free_map(section_exports);\n                     freez(buttons);\n                     free(section_template);\n                     edit_free_file(file);\n                     free_map(exports);\n                     return JB_ERR_MEMORY;\n                  }\n\n                  if (!err) err = template_fill(&s, section_exports);\n                  free_map(section_exports);\n                  if (!err) err = string_join(&buttons, s);\n               }\n            }\n         }\n      }\n      freez(section_template);\n      if (!err) err = map(exports, \"all-urls-buttons\", 1, buttons, 0);\n\n      /*\n       * Conventional actions file, supply extra editing help.\n       * (e.g. don't allow them to make it an unconventional one).\n       */\n      if (!err) err = map_conditional(exports, \"all-urls-present\", 1);\n\n      snprintf(buf, sizeof(buf), \"%u\", line_number);\n      if (!err) err = map(exports, \"all-urls-s\", 1, buf, 1);\n      snprintf(buf, sizeof(buf), \"%u\", line_number + 2);\n      if (!err) err = map(exports, \"all-urls-s-next\", 1, buf, 1);\n      if (!err) err = map(exports, \"all-urls-actions\", 1,\n                          actions_to_html(csp, cur_line->data.action), 0);\n\n       /* Skip the 2 lines */\n      cur_line = cur_line->next->next;\n      line_number += 2;\n\n      /*\n       * Note that prev_section_line_number is NOT set here.\n       * This is deliberate and not a bug.  It stops a \"Move up\"\n       * option appearing on the next section.  Clicking \"Move\n       * up\" would make the actions file unconventional, which\n       * we don't want, so we hide this option.\n       */\n   }\n   else\n   {\n      /*\n       * Non-standard actions file - does not begin with\n       * the \"All URLs\" section.\n       */\n      if (!err) err = map_conditional(exports, \"all-urls-present\", 0);\n   }\n\n   /* Set up global exports */\n\n   if (!err) err = map(exports, \"actions-file\", 1, html_encode(file->filename), 0);\n   if (!err) err = map(exports, \"f\", 1, stringify(file->identifier), 0);\n   if (!err) err = map(exports, \"v\", 1, file->version_str, 1);\n\n   /* Discourage private additions to default.action */\n\n   if (!err) err = map_conditional(exports, \"default-action\",\n                                   (strstr(\"default.action\", file->filename) != NULL));\n   if (err)\n   {\n      edit_free_file(file);\n      free_map(exports);\n      return err;\n   }\n\n   /* Should do all global exports above this point */\n\n   /* Load templates */\n\n   err = template_load(csp, &section_template, \"edit-actions-list-section\", 0);\n   if (err)\n   {\n      edit_free_file(file);\n      free_map(exports);\n      if (err == JB_ERR_FILE)\n      {\n         return cgi_error_no_template(csp, rsp, \"edit-actions-list-section\");\n      }\n      return err;\n   }\n\n   err = template_load(csp, &url_template, \"edit-actions-list-url\", 0);\n   if (err)\n   {\n      free(section_template);\n      edit_free_file(file);\n      free_map(exports);\n      if (err == JB_ERR_FILE)\n      {\n         return cgi_error_no_template(csp, rsp, \"edit-actions-list-url\");\n      }\n      return err;\n   }\n\n   err = template_fill(&section_template, exports);\n   if (err)\n   {\n      free(url_template);\n      edit_free_file(file);\n      free_map(exports);\n      return err;\n   }\n\n   err = template_fill(&url_template, exports);\n   if (err)\n   {\n      free(section_template);\n      edit_free_file(file);\n      free_map(exports);\n      return err;\n   }\n\n   if (NULL == (sections = strdup(\"\")))\n   {\n      free(section_template);\n      free(url_template);\n      edit_free_file(file);\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   while ((cur_line != NULL) && (cur_line->type == FILE_LINE_ACTION))\n   {\n      section_exports = new_map();\n\n      snprintf(buf, sizeof(buf), \"%u\", line_number);\n      err = map(section_exports, \"s\", 1, buf, 1);\n      if (!err) err = map(section_exports, \"actions\", 1,\n                          actions_to_html(csp, cur_line->data.action), 0);\n\n      if ((!err)\n        && (cur_line->next != NULL)\n        && (cur_line->next->type == FILE_LINE_URL))\n      {\n         /* This section contains at least one URL, don't allow delete */\n         err = map_block_killer(section_exports, \"empty-section\");\n      }\n      else\n      {\n         if (!err) err = map_block_keep(section_exports, \"empty-section\");\n      }\n\n      if (prev_section_line_number != ((unsigned)(-1)))\n      {\n         /* Not last section */\n         snprintf(buf, sizeof(buf), \"%u\", prev_section_line_number);\n         if (!err) err = map(section_exports, \"s-prev\", 1, buf, 1);\n         if (!err) err = map_block_keep(section_exports, \"s-prev-exists\");\n      }\n      else\n      {\n         /* Last section */\n         if (!err) err = map_block_killer(section_exports, \"s-prev-exists\");\n      }\n      prev_section_line_number = line_number;\n\n      if (err)\n      {\n         free(sections);\n         free(section_template);\n         free(url_template);\n         edit_free_file(file);\n         free_map(exports);\n         free_map(section_exports);\n         return err;\n      }\n\n      /* Should do all section-specific exports above this point */\n\n      if (NULL == (urls = strdup(\"\")))\n      {\n         free(sections);\n         free(section_template);\n         free(url_template);\n         edit_free_file(file);\n         free_map(exports);\n         free_map(section_exports);\n         return JB_ERR_MEMORY;\n      }\n\n      url_1_2 = 2;\n\n      cur_line = cur_line->next;\n      line_number++;\n\n      while ((cur_line != NULL) && (cur_line->type == FILE_LINE_URL))\n      {\n         url_exports = new_map();\n\n         snprintf(buf, sizeof(buf), \"%u\", line_number);\n         err = map(url_exports, \"p\", 1, buf, 1);\n\n         snprintf(buf, sizeof(buf), \"%d\", url_1_2);\n         if (!err) err = map(url_exports, \"url-1-2\", 1, buf, 1);\n\n         if (!err) err = map(url_exports, \"url-html\", 1,\n                             html_encode(cur_line->unprocessed), 0);\n         if (!err) err = map(url_exports, \"url\", 1,\n                             url_encode(cur_line->unprocessed), 0);\n\n         if (err)\n         {\n            free(urls);\n            free(sections);\n            free(section_template);\n            free(url_template);\n            edit_free_file(file);\n            free_map(exports);\n            free_map(section_exports);\n            free_map(url_exports);\n            return err;\n         }\n\n         if (NULL == (s = strdup(url_template)))\n         {\n            free(urls);\n            free(sections);\n            free(section_template);\n            free(url_template);\n            edit_free_file(file);\n            free_map(exports);\n            free_map(section_exports);\n            free_map(url_exports);\n            return JB_ERR_MEMORY;\n         }\n\n         err = template_fill(&s, section_exports);\n         if (!err) err = template_fill(&s, url_exports);\n         if (!err) err = string_append(&urls, s);\n\n         free_map(url_exports);\n         freez(s);\n\n         if (err)\n         {\n            freez(urls);\n            free(sections);\n            free(section_template);\n            free(url_template);\n            edit_free_file(file);\n            free_map(exports);\n            free_map(section_exports);\n            return err;\n         }\n\n         url_1_2 = 3 - url_1_2;\n\n         cur_line = cur_line->next;\n         line_number++;\n      }\n\n      err = map(section_exports, \"urls\", 1, urls, 0);\n\n      /* Could also do section-specific exports here, but it wouldn't be as fast */\n\n      snprintf(buf, sizeof(buf), \"%u\", line_number);\n      if (!err) err = map(section_exports, \"s-next\", 1, buf, 1);\n\n      if ((cur_line != NULL)\n       && (cur_line->type == FILE_LINE_ACTION))\n      {\n         /* Not last section */\n         if (!err) err = map_block_keep(section_exports, \"s-next-exists\");\n      }\n      else\n      {\n         /* Last section */\n         if (!err) err = map_block_killer(section_exports, \"s-next-exists\");\n      }\n\n      if (err)\n      {\n         free(sections);\n         free(section_template);\n         free(url_template);\n         edit_free_file(file);\n         free_map(exports);\n         free_map(section_exports);\n         return err;\n      }\n\n      if (NULL == (s = strdup(section_template)))\n      {\n         free(sections);\n         free(section_template);\n         free(url_template);\n         edit_free_file(file);\n         free_map(exports);\n         free_map(section_exports);\n         return JB_ERR_MEMORY;\n      }\n\n      err = template_fill(&s, section_exports);\n      if (!err) err = string_append(&sections, s);\n\n      freez(s);\n      free_map(section_exports);\n\n      if (err)\n      {\n         freez(sections);\n         free(section_template);\n         free(url_template);\n         edit_free_file(file);\n         free_map(exports);\n         return err;\n      }\n   }\n\n   edit_free_file(file);\n   free(section_template);\n   free(url_template);\n\n   err = map(exports, \"sections\", 1, sections, 0);\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   /* Could also do global exports here, but it wouldn't be as fast */\n\n   return template_fill_for_cgi(csp, \"edit-actions-list\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_for_url\n *\n * Description :  CGI function that edits the Actions list.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_for_url(struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters)\n{\n   struct map * exports;\n   unsigned sectionid;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   jb_err err;\n   struct re_filterfile_spec *filter_group;\n   int i, have_filters = 0;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s\", &sectionid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   cur_line = file->lines;\n\n   for (line_number = 1; (cur_line != NULL) && (line_number < sectionid); line_number++)\n   {\n      cur_line = cur_line->next;\n   }\n\n   if ( (cur_line == NULL)\n     || (line_number != sectionid)\n     || (sectionid < 1)\n     || (cur_line->type != FILE_LINE_ACTION))\n   {\n      /* Invalid \"sectionid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   err = map(exports, \"f\", 1, stringify(file->identifier), 0);\n   if (!err) err = map(exports, \"v\", 1, file->version_str, 1);\n   if (!err) err = map(exports, \"s\", 1, url_encode(lookup(parameters, \"s\")), 0);\n\n   if (!err) err = actions_to_radio(exports, cur_line->data.action);\n\n   /*\n    * XXX: Some browsers (at least IE6 and IE7) have an artificial URL\n    * length limitation and ignore clicks on the Submit buttons if\n    * the resulting GET URL would be longer than their limit.\n    *\n    * In Privoxy 3.0.5 beta the standard edit-actions-for-url template\n    * reached this limit and action editing stopped working in these\n    * browsers (BR #1570678).\n    *\n    * The config option split-large-forms works around this browser\n    * bug (HTTP has no URL length limitation) by deviding the action\n    * list form into multiple smaller ones. It means the URLs are shorter\n    * and work in broken browsers as well, but the user can no longer change\n    * all actions with one submit.\n    *\n    * A better solution would be to switch to POST requests,\n    * but this will do for now.\n    */\n   if (!err && (csp->config->feature_flags & RUNTIME_FEATURE_SPLIT_LARGE_FORMS))\n   {\n      /* Generate multiple smaller form by killing the big one. */\n      err = map_block_killer(exports, \"one-form-only\");\n   }\n   else\n   {\n      /* Default: Generate one large form by killing the smaller ones. */\n      err = map_block_killer(exports, \"multiple-forms\");\n   }\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))\n      {\n         if (!err) err = map_conditional(exports, \"any-filters-defined\", 1);\n         have_filters = 1;\n         break;\n      }\n   }\n\n#ifndef FEATURE_EXTERNAL_FILTERS\n   if (!err) err = map_block_killer(exports, \"external-content-filters\");\n#endif\n\n   if (err)\n   {\n      edit_free_file(file);\n      free_map(exports);\n      return err;\n   }\n\n   if (0 == have_filters)\n   {\n      err = map(exports, \"filter-params\", 1, \"\", 1);\n   }\n   else\n   {\n      /*\n       * List available filters and their settings.\n       */\n      char *filter_template;\n      int filter_identifier = 0;\n      char *prepared_templates[MAX_FILTER_TYPES];\n\n      for (i = 0; i < MAX_FILTER_TYPES; i++)\n      {\n         prepared_templates[i] = strdup(\"\");\n      }\n\n      err = template_load(csp, &filter_template, \"edit-actions-for-url-filter\", 0);\n      if (err)\n      {\n         edit_free_file(file);\n         free_map(exports);\n         if (err == JB_ERR_FILE)\n         {\n            return cgi_error_no_template(csp, rsp, \"edit-actions-for-url-filter\");\n         }\n         return err;\n      }\n\n      err = template_fill(&filter_template, exports);\n\n      for (i = 0; i < MAX_AF_FILES; i++)\n      {\n         if ((csp->rlist[i] != NULL) && (csp->rlist[i]->f != NULL))\n         {\n            filter_group = csp->rlist[i]->f;\n            for (;(!err) && (filter_group != NULL); filter_group = filter_group->next)\n            {\n               char current_mode = 'x';\n               char number[20];\n               struct list_entry *filter_name;\n               struct map *line_exports;\n               const int type = filter_group->type;\n               const int multi_action_index = filter_type_info[type].multi_action_index;\n\n               assert(type < MAX_FILTER_TYPES);\n\n               filter_name = cur_line->data.action->multi_add[multi_action_index]->first;\n               while ((filter_name != NULL)\n                   && (0 != strcmp(filter_group->name, filter_name->str)))\n               {\n                    filter_name = filter_name->next;\n               }\n\n               if (filter_name != NULL)\n               {\n                  current_mode = 'y';\n               }\n               else\n               {\n                  filter_name = cur_line->data.action->multi_remove[multi_action_index]->first;\n                  while ((filter_name != NULL)\n                      && (0 != strcmp(filter_group->name, filter_name->str)))\n                  {\n                       filter_name = filter_name->next;\n                  }\n                  if (filter_name != NULL)\n                  {\n                     current_mode = 'n';\n                  }\n               }\n\n               /* Generate a unique serial number */\n               snprintf(number, sizeof(number), \"%x\", filter_identifier++);\n               number[sizeof(number) - 1] = '\\0';\n\n               line_exports = new_map();\n               if (line_exports == NULL)\n               {\n                  err = JB_ERR_MEMORY;\n               }\n               else\n               {\n                  char *filter_line;\n\n                  if (!err) err = map(line_exports, \"index\", 1, number, 1);\n                  if (!err) err = map(line_exports, \"name\",  1, filter_group->name, 1);\n                  if (!err) err = map(line_exports, \"description\",  1, filter_group->description, 1);\n                  if (!err) err = map_radio(line_exports, \"this-filter\", \"ynx\", current_mode);\n                  if (!err) err = map(line_exports, \"filter-type\", 1, filter_type_info[type].type, 1);\n                  if (!err) err = map(line_exports, \"abbr-filter-type\", 1, filter_type_info[type].abbr_type, 1);\n                  if (!err) err = map(line_exports, \"anchor\", 1, filter_type_info[type].anchor, 1);\n\n                  if (!err)\n                  {\n                     filter_line = strdup(filter_template);\n                     if (filter_line == NULL) err = JB_ERR_MEMORY;\n                  }\n                  if (!err) err = template_fill(&filter_line, line_exports);\n                  string_join(&prepared_templates[type], filter_line);\n\n                  free_map(line_exports);\n               }\n            }\n         }\n      }\n      freez(filter_template);\n\n      /* Replace all filter macros with the aggregated templates */\n      for (i = 0; i < MAX_FILTER_TYPES; i++)\n      {\n         if (err) break;\n         err = map(exports, filter_type_info[i].macro_name, 1, prepared_templates[i], 0);\n      }\n\n      if (err)\n      {\n         /* Free aggregated templates */\n         for (i = 0; i < MAX_FILTER_TYPES; i++)\n         {\n            freez(prepared_templates[i]);\n         }\n      }\n   }\n\n   /* Check or uncheck the \"disable all of this type\" radio buttons. */\n   for (i = 0; i < MAX_FILTER_TYPES; i++)\n   {\n      const int a = filter_type_info[i].multi_action_index;\n      const int disable_all = cur_line->data.action->multi_remove_all[a];\n      if (err) break;\n      err = map_radio(exports, filter_type_info[i].disable_all_option, \"nx\", (disable_all ? 'n' : 'x'));\n   }\n\n   edit_free_file(file);\n\n   if (err)\n   {\n      free_map(exports);\n      return err;\n   }\n\n   return template_fill_for_cgi(csp, \"edit-actions-for-url\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_submit\n *\n * Description :  CGI function that actually edits the Actions list.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_submit(struct client_state *csp,\n                               struct http_response *rsp,\n                               const struct map *parameters)\n{\n   unsigned sectionid;\n   char * actiontext;\n   char * newtext;\n   size_t newtext_size;\n   size_t len;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   char target[1024];\n   jb_err err;\n   int filter_identifier;\n   int i;\n   const char * action_set_name;\n   struct file_list * fl;\n   struct url_actions * b;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s\", &sectionid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   cur_line = file->lines;\n\n   for (line_number = 1; (cur_line != NULL) && (line_number < sectionid); line_number++)\n   {\n      cur_line = cur_line->next;\n   }\n\n   if ( (cur_line == NULL)\n     || (line_number != sectionid)\n     || (sectionid < 1)\n     || (cur_line->type != FILE_LINE_ACTION))\n   {\n      /* Invalid \"sectionid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   get_string_param(parameters, \"p\", &action_set_name);\n   if (action_set_name != NULL)\n   {\n      for (filter_identifier = 0; filter_identifier < MAX_AF_FILES; filter_identifier++)\n      {\n         if (((fl = csp->actions_list[filter_identifier]) != NULL) && ((b = fl->f) != NULL))\n         {\n            for (b = b->next; NULL != b; b = b->next)\n            {\n               if (!strncmp(b->url->spec, \"standard.\", 9) && !strcmp(b->url->spec + 9, action_set_name))\n               {\n                  copy_action(cur_line->data.action, b->action);\n                  goto found;\n               }\n            }\n         }\n      }\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n\n      found: ;\n   }\n   else\n   {\n      err = actions_from_radio(parameters, cur_line->data.action);\n   }\n\n   if (err)\n   {\n      /* Out of memory */\n      edit_free_file(file);\n      return err;\n   }\n\n   /* Check the \"disable all of this type\" parameters. */\n   for (i = 0; i < MAX_FILTER_TYPES; i++)\n   {\n      const int multi_action_index = filter_type_info[i].multi_action_index;\n      const char ch = get_char_param(parameters, filter_type_info[i].disable_all_param);\n\n      if (ch == 'N')\n      {\n         list_remove_all(cur_line->data.action->multi_add[multi_action_index]);\n         list_remove_all(cur_line->data.action->multi_remove[multi_action_index]);\n         cur_line->data.action->multi_remove_all[multi_action_index] = 1;\n      }\n      else if (ch == 'X')\n      {\n         cur_line->data.action->multi_remove_all[multi_action_index] = 0;\n      }\n   }\n\n   for (filter_identifier = 0; !err; filter_identifier++)\n   {\n      char key_value[30];\n      char key_name[30];\n      char key_type[30];\n      const char *name;\n      char value; /*\n                   * Filter state. Valid states are: 'Y' (active),\n                   * 'N' (inactive) and 'X' (no change).\n                   * XXX: bad name.\n                   */\n      char type;  /*\n                   * Abbreviated filter type. Valid types are: 'F' (content filter),\n                   * 'S' (server-header filter) and 'C' (client-header filter).\n                   */\n      int multi_action_index = 0;\n\n      /* Generate the keys */\n      snprintf(key_value, sizeof(key_value), \"filter_r%x\", filter_identifier);\n      key_value[sizeof(key_value) - 1] = '\\0'; /* XXX: Why? */\n      snprintf(key_name, sizeof(key_name), \"filter_n%x\", filter_identifier);\n      key_name[sizeof(key_name) - 1] = '\\0'; /* XXX: Why? */\n      snprintf(key_type, sizeof(key_type), \"filter_t%x\", filter_identifier);\n\n      err = get_string_param(parameters, key_name, &name);\n      if (err) break;\n\n      if (name == NULL)\n      {\n         /* End of list */\n         break;\n      }\n\n      type = get_char_param(parameters, key_type);\n      switch (type)\n      {\n         case 'F':\n            multi_action_index = ACTION_MULTI_FILTER;\n            break;\n         case 'S':\n            multi_action_index = ACTION_MULTI_SERVER_HEADER_FILTER;\n            break;\n         case 'C':\n            multi_action_index = ACTION_MULTI_CLIENT_HEADER_FILTER;\n            break;\n         case 'L':\n            multi_action_index = ACTION_MULTI_CLIENT_HEADER_TAGGER;\n            break;\n         case 'E':\n            multi_action_index = ACTION_MULTI_SERVER_HEADER_TAGGER;\n            break;\n         default:\n            log_error(LOG_LEVEL_ERROR,\n               \"Unknown filter type: %c for filter %s. Filter ignored.\", type, name);\n            continue;\n      }\n      assert(multi_action_index);\n\n      value = get_char_param(parameters, key_value);\n      if (value == 'Y')\n      {\n         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);\n         if (!err) err = enlist(cur_line->data.action->multi_add[multi_action_index], name);\n         list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);\n      }\n      else if (value == 'N')\n      {\n         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);\n         if (!cur_line->data.action->multi_remove_all[multi_action_index])\n         {\n            list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);\n            if (!err) err = enlist(cur_line->data.action->multi_remove[multi_action_index], name);\n         }\n      }\n      else if (value == 'X')\n      {\n         list_remove_item(cur_line->data.action->multi_add[multi_action_index], name);\n         list_remove_item(cur_line->data.action->multi_remove[multi_action_index], name);\n      }\n   }\n\n   if (err)\n   {\n      /* Out of memory */\n      edit_free_file(file);\n      return err;\n   }\n\n   if (NULL == (actiontext = actions_to_text(cur_line->data.action)))\n   {\n      /* Out of memory */\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   len = strlen(actiontext);\n   if (len == 0)\n   {\n      /*\n       * Empty action - must special-case this.\n       * Simply setting len to 1 is sufficient...\n       */\n      len = 1;\n   }\n\n   newtext_size = len + 2;\n   newtext = malloc_or_die(newtext_size);\n   strlcpy(newtext, actiontext, newtext_size);\n   free(actiontext);\n   newtext[0]       = '{';\n   newtext[len]     = '}';\n   newtext[len + 1] = '\\0';\n\n   freez(cur_line->raw);\n   freez(cur_line->unprocessed);\n   cur_line->unprocessed = newtext;\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%i#l%u\",\n            (long) time(NULL), file->identifier, sectionid);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_url\n *\n * Description :  CGI function that actually edits a URL pattern in\n *                an actions file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *    filename : Identifies the file to edit\n *         ver : File's last-modified time\n *     section : Line number of section to edit\n *     pattern : Line number of pattern to edit\n *      newval : New value for pattern\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_url(struct client_state *csp,\n                            struct http_response *rsp,\n                            const struct map *parameters)\n{\n   unsigned patternid;\n   char * new_pattern;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   unsigned section_start_line_number = 0;\n   char target[1024];\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"p\", &patternid);\n   if (err)\n   {\n      return err;\n   }\n   if (patternid < 1U)\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   err = get_url_spec_param(csp, parameters, \"u\", &new_pattern);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      free(new_pattern);\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   line_number = 1;\n   cur_line = file->lines;\n\n   while ((cur_line != NULL) && (line_number < patternid))\n   {\n      if (cur_line->type == FILE_LINE_ACTION)\n      {\n         section_start_line_number = line_number;\n      }\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   if ((cur_line == NULL)\n    || (cur_line->type != FILE_LINE_URL))\n   {\n      /* Invalid \"patternid\" parameter */\n      free(new_pattern);\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* At this point, the line to edit is in cur_line */\n\n   freez(cur_line->raw);\n   freez(cur_line->unprocessed);\n   cur_line->unprocessed = new_pattern;\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%i#l%u\",\n            (long) time(NULL), file->identifier, section_start_line_number);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_add_url\n *\n * Description :  CGI function that actually adds a URL pattern to\n *                an actions file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *    filename : Identifies the file to edit\n *         ver : File's last-modified time\n *     section : Line number of section to edit\n *      newval : New pattern\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_add_url(struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters)\n{\n   unsigned sectionid;\n   char * new_pattern;\n   struct file_line * new_line;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   char target[1024];\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s\", &sectionid);\n   if (err)\n   {\n      return err;\n   }\n   if (sectionid < 1U)\n   {\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   err = get_url_spec_param(csp, parameters, \"u\", &new_pattern);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      free(new_pattern);\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   line_number = 1;\n   cur_line = file->lines;\n\n   while ((cur_line != NULL) && (line_number < sectionid))\n   {\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   if ((cur_line == NULL)\n    || (cur_line->type != FILE_LINE_ACTION))\n   {\n      /* Invalid \"sectionid\" parameter */\n      free(new_pattern);\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* At this point, the section header is in cur_line - add after this. */\n\n   /* Allocate the new line */\n   new_line = (struct file_line *)zalloc(sizeof(*new_line));\n   if (new_line == NULL)\n   {\n      free(new_pattern);\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   /* Fill in the data members of the new line */\n   new_line->raw = NULL;\n   new_line->prefix = NULL;\n   new_line->unprocessed = new_pattern;\n   new_line->type = FILE_LINE_URL;\n\n   /* Link new_line into the list, after cur_line */\n   new_line->next = cur_line->next;\n   cur_line->next = new_line;\n\n   /* Done making changes, now commit */\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%i#l%u\",\n            (long) time(NULL), file->identifier, sectionid);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_remove_url\n *\n * Description :  CGI function that actually removes a URL pattern from\n *                the actions file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (filename) Identifies the file to edit\n *           v : (version) File's last-modified time\n *           p : (pattern) Line number of pattern to remove\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_remove_url(struct client_state *csp,\n                                   struct http_response *rsp,\n                                   const struct map *parameters)\n{\n   unsigned patternid;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   struct file_line * prev_line;\n   unsigned line_number;\n   unsigned section_start_line_number = 0;\n   char target[1024];\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"p\", &patternid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   line_number = 1;\n   prev_line = NULL;\n   cur_line = file->lines;\n\n   while ((cur_line != NULL) && (line_number < patternid))\n   {\n      if (cur_line->type == FILE_LINE_ACTION)\n      {\n         section_start_line_number = line_number;\n      }\n      prev_line = cur_line;\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   if ( (cur_line == NULL)\n     || (prev_line == NULL)\n     || (cur_line->type != FILE_LINE_URL))\n   {\n      /* Invalid \"patternid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* At this point, the line to remove is in cur_line, and the previous\n    * one is in prev_line\n    */\n\n   /* Unlink cur_line */\n   prev_line->next = cur_line->next;\n   cur_line->next = NULL;\n\n   /* Free cur_line */\n   edit_free_file_lines(cur_line);\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%u#l%u\",\n            (long) time(NULL), file->identifier, section_start_line_number);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_section_remove\n *\n * Description :  CGI function that actually removes a whole section from\n *                the actions file.  The section must be empty first\n *                (else JB_ERR_CGI_PARAMS).\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (filename) Identifies the file to edit\n *           v : (version) File's last-modified time\n *           s : (section) Line number of section to edit\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_section_remove(struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters)\n{\n   unsigned sectionid;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   struct file_line * prev_line;\n   unsigned line_number;\n   char target[1024];\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s\", &sectionid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   line_number = 1;\n   cur_line = file->lines;\n\n   prev_line = NULL;\n   while ((cur_line != NULL) && (line_number < sectionid))\n   {\n      prev_line = cur_line;\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   if ((cur_line == NULL)\n    || (cur_line->type != FILE_LINE_ACTION))\n   {\n      /* Invalid \"sectionid\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   if ((cur_line->next != NULL)\n    && (cur_line->next->type == FILE_LINE_URL))\n   {\n      /* Section not empty. */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* At this point, the line to remove is in cur_line, and the previous\n    * one is in prev_line\n    */\n\n   /* Unlink cur_line */\n   if (prev_line == NULL)\n   {\n      /* Removing the first line from the file */\n      file->lines = cur_line->next;\n   }\n   else\n   {\n      prev_line->next = cur_line->next;\n   }\n   cur_line->next = NULL;\n\n   /* Free cur_line */\n   edit_free_file_lines(cur_line);\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%u\",\n            (long) time(NULL), file->identifier);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_section_add\n *\n * Description :  CGI function that adds a new empty section to\n *                an actions file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (filename) Identifies the file to edit\n *           v : (version) File's last-modified time\n *           s : (section) Line number of section to add after, 0 for\n *               start of file.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_section_add(struct client_state *csp,\n                                    struct http_response *rsp,\n                                    const struct map *parameters)\n{\n   unsigned sectionid;\n   struct file_line * new_line;\n   char * new_text;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   unsigned line_number;\n   char target[1024];\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s\", &sectionid);\n   if (err)\n   {\n      return err;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   line_number = 1;\n   cur_line = file->lines;\n\n   if (sectionid <= 1U)\n   {\n      /* Add to start of file */\n      if (cur_line != NULL && cur_line->type != FILE_LINE_ACTION)\n      {\n         /* There's something in the file, find the line before the first\n          * action.\n          */\n         while ((cur_line->next != NULL)\n              && (cur_line->next->type != FILE_LINE_ACTION))\n         {\n            cur_line = cur_line->next;\n            line_number++;\n         }\n      }\n      else\n      {\n         /* File starts with action line, so insert at top */\n         cur_line = NULL;\n      }\n   }\n   else\n   {\n      /* Add after stated section. */\n      while ((cur_line != NULL) && (line_number < sectionid))\n      {\n         cur_line = cur_line->next;\n         line_number++;\n      }\n\n      if ((cur_line == NULL)\n       || (cur_line->type != FILE_LINE_ACTION))\n      {\n         /* Invalid \"sectionid\" parameter */\n         edit_free_file(file);\n         return JB_ERR_CGI_PARAMS;\n      }\n\n      /* Skip through the section to find the last line in it. */\n      while ((cur_line->next != NULL)\n          && (cur_line->next->type != FILE_LINE_ACTION))\n      {\n         cur_line = cur_line->next;\n         line_number++;\n      }\n   }\n\n   /* At this point, the last line in the previous section is in cur_line\n    * - add after this.  (Or if we need to add as the first line, cur_line\n    * will be NULL).\n    */\n\n   new_text = strdup(\"{}\");\n   if (NULL == new_text)\n   {\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   /* Allocate the new line */\n   new_line = (struct file_line *)zalloc(sizeof(*new_line));\n   if (new_line == NULL)\n   {\n      free(new_text);\n      edit_free_file(file);\n      return JB_ERR_MEMORY;\n   }\n\n   /* Fill in the data members of the new line */\n   new_line->raw = NULL;\n   new_line->prefix = NULL;\n   new_line->unprocessed = new_text;\n   new_line->type = FILE_LINE_ACTION;\n\n   if (cur_line != NULL)\n   {\n      /* Link new_line into the list, after cur_line */\n      new_line->next = cur_line->next;\n      cur_line->next = new_line;\n   }\n   else\n   {\n      /* Link new_line into the list, as first line */\n      new_line->next = file->lines;\n      file->lines = new_line;\n   }\n\n   /* Done making changes, now commit */\n\n   err = edit_write_file(file);\n   if (err)\n   {\n      /* Error writing file */\n      if (err == JB_ERR_FILE)\n      {\n         /* Read-only file. */\n         err = cgi_error_file_read_only(csp, rsp, file->filename);\n      }\n      edit_free_file(file);\n      return err;\n   }\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%u\",\n            (long) time(NULL), file->identifier);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_edit_actions_section_swap\n *\n * Description :  CGI function that swaps the order of two sections\n *                in the actions file.  Note that this CGI can actually\n *                swap any two arbitrary sections, but the GUI interface\n *                currently only allows consecutive sections to be\n *                specified.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           f : (filename) Identifies the file to edit\n *           v : (version) File's last-modified time\n *          s1 : (section1) Line number of first section to swap\n *          s2 : (section2) Line number of second section to swap\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_CGI_PARAMS if the CGI parameters are not\n *                                  specified or not valid.\n *\n *********************************************************************/\njb_err cgi_edit_actions_section_swap(struct client_state *csp,\n                                     struct http_response *rsp,\n                                     const struct map *parameters)\n{\n   unsigned section1;\n   unsigned section2;\n   struct editable_file * file;\n   struct file_line * cur_line;\n   struct file_line * prev_line;\n   struct file_line * line_before_section1;\n   struct file_line * line_start_section1;\n   struct file_line * line_end_section1;\n   struct file_line * line_after_section1;\n   struct file_line * line_before_section2;\n   struct file_line * line_start_section2;\n   struct file_line * line_end_section2;\n   struct file_line * line_after_section2;\n   unsigned line_number;\n   char target[1024];\n   jb_err err;\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   err = get_number_param(csp, parameters, \"s1\", &section1);\n   if (!err) err = get_number_param(csp, parameters, \"s2\", &section2);\n   if (err)\n   {\n      return err;\n   }\n\n   if (section1 > section2)\n   {\n      unsigned temp = section2;\n      section2 = section1;\n      section1 = temp;\n   }\n\n   err = edit_read_actions_file(csp, rsp, parameters, 1, &file);\n   if (err)\n   {\n      /* No filename specified, can't read file, modified, or out of memory. */\n      return (err == JB_ERR_FILE ? JB_ERR_OK : err);\n   }\n\n   /* Start at the beginning... */\n   line_number = 1;\n   cur_line = file->lines;\n   prev_line = NULL;\n\n   /* ... find section1 ... */\n   while ((cur_line != NULL) && (line_number < section1))\n   {\n      prev_line = cur_line;\n      cur_line = cur_line->next;\n      line_number++;\n   }\n\n   if ((cur_line == NULL)\n    || (cur_line->type != FILE_LINE_ACTION))\n   {\n      /* Invalid \"section1\" parameter */\n      edit_free_file(file);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   /* If no-op, we've validated params and can skip the rest. */\n   if (section1 != section2)\n   {\n      /* ... find the end of section1 ... */\n      line_before_section1 = prev_line;\n      line_start_section1 = cur_line;\n      do\n      {\n         prev_line = cur_line;\n         cur_line = cur_line->next;\n         line_number++;\n      }\n      while ((cur_line != NULL) && (cur_line->type == FILE_LINE_URL));\n      line_end_section1 = prev_line;\n      line_after_section1 = cur_line;\n\n      /* ... find section2 ... */\n      while ((cur_line != NULL) && (line_number < section2))\n      {\n         prev_line = cur_line;\n         cur_line = cur_line->next;\n         line_number++;\n      }\n\n      if ((cur_line == NULL)\n       || (cur_line->type != FILE_LINE_ACTION))\n      {\n         /* Invalid \"section2\" parameter */\n         edit_free_file(file);\n         return JB_ERR_CGI_PARAMS;\n      }\n\n      /* ... find the end of section2 ... */\n      line_before_section2 = prev_line;\n      line_start_section2 = cur_line;\n      do\n      {\n         prev_line = cur_line;\n         cur_line = cur_line->next;\n         line_number++;\n      }\n      while ((cur_line != NULL) && (cur_line->type == FILE_LINE_URL));\n      line_end_section2 = prev_line;\n      line_after_section2 = cur_line;\n\n      /* Now have all the pointers we need. Do the swap. */\n\n      /* Change the pointer to section1 to point to section2 instead */\n      if (line_before_section1 == NULL)\n      {\n         file->lines = line_start_section2;\n      }\n      else\n      {\n         line_before_section1->next = line_start_section2;\n      }\n\n      if (line_before_section2 == line_end_section1)\n      {\n         /* Consecutive sections */\n         line_end_section2->next = line_start_section1;\n      }\n      else\n      {\n         line_end_section2->next = line_after_section1;\n         line_before_section2->next = line_start_section1;\n      }\n\n      /* Set the pointer from the end of section1 to the rest of the file */\n      line_end_section1->next = line_after_section2;\n\n      err = edit_write_file(file);\n      if (err)\n      {\n         /* Error writing file */\n         if (err == JB_ERR_FILE)\n         {\n            /* Read-only file. */\n            err = cgi_error_file_read_only(csp, rsp, file->filename);\n         }\n         edit_free_file(file);\n         return err;\n      }\n   } /* END if (section1 != section2) */\n\n   snprintf(target, sizeof(target), CGI_PREFIX \"edit-actions-list?foo=%lu&f=%u\",\n            (long) time(NULL), file->identifier);\n\n   edit_free_file(file);\n\n   return cgi_redirect(rsp, target);\n}\n\n\n/*********************************************************************\n *\n * Function    :  javascriptify\n *\n * Description :  Converts a string into a form JavaScript will like.\n *\n *                Netscape 4's JavaScript sucks - it doesn't use\n *                \"id\" parameters, so you have to set the \"name\"\n *                used to submit a form element to something JavaScript\n *                will like.  (Or access the elements by index in an\n *                array.  That array contains >60 elements and will\n *                be changed whenever we add a new action to the\n *                editor, so I'm NOT going to use indexes that have\n *                to be figured out by hand.)\n *\n *                Currently the only thing we have to worry about\n *                is \"-\" ==> \"_\" conversion.\n *\n *                This is a length-preserving operation so it is\n *                carried out in-place, no memory is allocated\n *                or freed.\n *\n * Parameters  :\n *          1  :  identifier = String to make JavaScript-friendly.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void javascriptify(char * identifier)\n{\n   char * p = identifier;\n   while (NULL != (p = strchr(p, '-')))\n   {\n      *p++ = '_';\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  actions_to_radio\n *\n * Description :  Converts a actionsfile entry into settings for\n *                radio buttons and edit boxes on a HTML form.\n *\n * Parameters  :\n *          1  :  exports = List of substitutions to add to.\n *          2  :  action  = Action to read\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\nstatic jb_err actions_to_radio(struct map * exports,\n                               const struct action_spec *action)\n{\n   unsigned long mask;\n   unsigned long add;\n   int mapped_param;\n   int checked;\n   char current_mode;\n\n   assert(exports);\n   assert(action);\n\n   mask = action->mask;\n   add  = action->add;\n\n   /* sanity - prevents \"-feature +feature\" */\n   mask |= add;\n\n\n#define DEFINE_ACTION_BOOL(name, bit)                 \\\n   if (!(mask & bit))                                 \\\n   {                                                  \\\n      current_mode = 'n';                             \\\n   }                                                  \\\n   else if (add & bit)                                \\\n   {                                                  \\\n      current_mode = 'y';                             \\\n   }                                                  \\\n   else                                               \\\n   {                                                  \\\n      current_mode = 'x';                             \\\n   }                                                  \\\n   if (map_radio(exports, name, \"ynx\", current_mode)) \\\n   {                                                  \\\n      return JB_ERR_MEMORY;                           \\\n   }\n\n#define DEFINE_ACTION_STRING(name, bit, index)        \\\n   DEFINE_ACTION_BOOL(name, bit);                     \\\n   mapped_param = 0;\n\n#define DEFINE_CGI_PARAM_RADIO(name, bit, index, value, is_default)  \\\n   if (add & bit)                                                    \\\n   {                                                                 \\\n      checked = !strcmp(action->string[index], value);               \\\n   }                                                                 \\\n   else                                                              \\\n   {                                                                 \\\n      checked = is_default;                                          \\\n   }                                                                 \\\n   mapped_param |= checked;                                          \\\n   if (map(exports, name \"-param-\" value, 1, (checked ? \"checked\" : \"\"), 1)) \\\n   {                                                                 \\\n      return JB_ERR_MEMORY;                                          \\\n   }\n\n#define DEFINE_CGI_PARAM_CUSTOM(name, bit, index, default_val)       \\\n   if (map(exports, name \"-param-custom\", 1,                         \\\n           ((!mapped_param) ? \"checked\" : \"\"), 1))                   \\\n   {                                                                 \\\n      return JB_ERR_MEMORY;                                          \\\n   }                                                                 \\\n   if (map(exports, name \"-param\", 1,                                \\\n           (((add & bit) && !mapped_param) ?                         \\\n           action->string[index] : default_val), 1))                 \\\n   {                                                                 \\\n      return JB_ERR_MEMORY;                                          \\\n   }\n\n#define DEFINE_CGI_PARAM_NO_RADIO(name, bit, index, default_val)     \\\n   if (map(exports, name \"-param\", 1,                                \\\n           ((add & bit) ? action->string[index] : default_val), 1))  \\\n   {                                                                 \\\n      return JB_ERR_MEMORY;                                          \\\n   }\n\n#define DEFINE_ACTION_MULTI(name, index)              \\\n   if (action->multi_add[index]->first)               \\\n   {                                                  \\\n      current_mode = 'y';                             \\\n   }                                                  \\\n   else if (action->multi_remove_all[index])          \\\n   {                                                  \\\n      current_mode = 'n';                             \\\n   }                                                  \\\n   else if (action->multi_remove[index]->first)       \\\n   {                                                  \\\n      current_mode = 'y';                             \\\n   }                                                  \\\n   else                                               \\\n   {                                                  \\\n      current_mode = 'x';                             \\\n   }                                                  \\\n   if (map_radio(exports, name, \"ynx\", current_mode)) \\\n   {                                                  \\\n      return JB_ERR_MEMORY;                           \\\n   }\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n#undef DEFINE_CGI_PARAM_CUSTOM\n#undef DEFINE_CGI_PARAM_RADIO\n#undef DEFINE_CGI_PARAM_NO_RADIO\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  actions_from_radio\n *\n * Description :  Converts a map of parameters passed to a CGI function\n *                into an actionsfile entry.\n *\n * Parameters  :\n *          1  :  parameters = parameters to the CGI call\n *          2  :  action  = Action to change.  Must be valid before\n *                          the call, actions not specified will be\n *                          left unchanged.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\nstatic jb_err actions_from_radio(const struct map * parameters,\n                                 struct action_spec *action)\n{\n   const char * param;\n   char * param_dup;\n   char ch;\n   const char * js_name;\n   jb_err err = JB_ERR_OK;\n\n   assert(parameters);\n   assert(action);\n\n   /* Statics are generally a potential race condition,\n    * but in this case we're safe and don't need semaphores.\n    * Be careful if you modify this function.\n    * - Jon\n    * The js_name_arr's are never free()d, but this is no\n    * problem, since they will only be created once and\n    * used by all threads thereafter. -oes\n    */\n\n#define JAVASCRIPTIFY(dest_var, string)               \\\n   {                                                  \\\n     static int first_time = 1;                       \\\n     static char *js_name_arr;                        \\\n      if (first_time)                                 \\\n      {                                               \\\n         js_name_arr = strdup(string);                \\\n         javascriptify(js_name_arr);                  \\\n      }                                               \\\n      dest_var = js_name_arr;                         \\\n      first_time = 0;                                 \\\n   }                                                  \\\n\n#define DEFINE_ACTION_BOOL(name, bit)                 \\\n   JAVASCRIPTIFY(js_name, name);                      \\\n   ch = get_char_param(parameters, js_name);          \\\n   if (ch == 'Y')                                     \\\n   {                                                  \\\n      action->add  |= bit;                            \\\n      action->mask |= bit;                            \\\n   }                                                  \\\n   else if (ch == 'N')                                \\\n   {                                                  \\\n      action->add  &= ~bit;                           \\\n      action->mask &= ~bit;                           \\\n   }                                                  \\\n   else if (ch == 'X')                                \\\n   {                                                  \\\n      action->add  &= ~bit;                           \\\n      action->mask |= bit;                            \\\n   }                                                  \\\n\n#define DEFINE_ACTION_STRING(name, bit, index)                 \\\n   JAVASCRIPTIFY(js_name, name);                               \\\n   ch = get_char_param(parameters, js_name);                   \\\n   if (ch == 'Y')                                              \\\n   {                                                           \\\n      param = NULL;                                            \\\n      JAVASCRIPTIFY(js_name, name \"-mode\");                    \\\n      if (!err) err = get_string_param(parameters, js_name, &param);    \\\n      if ((param == NULL) || (0 == strcmp(param, \"CUSTOM\")))            \\\n      {                                                                 \\\n         JAVASCRIPTIFY(js_name, name \"-param\");                         \\\n         if (!err) err = get_string_param(parameters, js_name, &param); \\\n      }                                                        \\\n      if (param != NULL)                                       \\\n      {                                                        \\\n         if (NULL == (param_dup = strdup(param)))              \\\n         {                                                     \\\n            return JB_ERR_MEMORY;                              \\\n         }                                                     \\\n         freez(action->string[index]);                         \\\n         action->add  |= bit;                                  \\\n         action->mask |= bit;                                  \\\n         action->string[index] = param_dup;                    \\\n      }                                                        \\\n   }                                                           \\\n   else if (ch == 'N')                                         \\\n   {                                                           \\\n      if (action->add & bit)                                   \\\n      {                                                        \\\n         freez(action->string[index]);                         \\\n      }                                                        \\\n      action->add  &= ~bit;                                    \\\n      action->mask &= ~bit;                                    \\\n   }                                                           \\\n   else if (ch == 'X')                                         \\\n   {                                                           \\\n      if (action->add & bit)                                   \\\n      {                                                        \\\n         freez(action->string[index]);                         \\\n      }                                                        \\\n      action->add  &= ~bit;                                    \\\n      action->mask |= bit;                                     \\\n   }                                                           \\\n\n#define DEFINE_ACTION_MULTI(name, index)                       \\\n   JAVASCRIPTIFY(js_name, name);                               \\\n   ch = get_char_param(parameters, js_name);                   \\\n   if (ch == 'Y')                                              \\\n   {                                                           \\\n      /* FIXME */                                              \\\n   }                                                           \\\n   else if (ch == 'N')                                         \\\n   {                                                           \\\n      list_remove_all(action->multi_add[index]);               \\\n      list_remove_all(action->multi_remove[index]);            \\\n      action->multi_remove_all[index] = 1;                     \\\n   }                                                           \\\n   else if (ch == 'X')                                         \\\n   {                                                           \\\n      list_remove_all(action->multi_add[index]);               \\\n      list_remove_all(action->multi_remove[index]);            \\\n      action->multi_remove_all[index] = 0;                     \\\n   }                                                           \\\n\n#define DEFINE_ACTION_ALIAS 0 /* No aliases for URL parsing */\n\n#include \"actionlist.h\"\n\n#undef DEFINE_ACTION_MULTI\n#undef DEFINE_ACTION_STRING\n#undef DEFINE_ACTION_BOOL\n#undef DEFINE_ACTION_ALIAS\n#undef JAVASCRIPTIFY\n\n   return err;\n}\n#endif /* def FEATURE_CGI_EDIT_ACTIONS */\n\n\n#ifdef FEATURE_TOGGLE\n/*********************************************************************\n *\n * Function    :  cgi_toggle\n *\n * Description :  CGI function that adds a new empty section to\n *                an actions file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *         set : If present, how to change toggle setting:\n *               \"enable\", \"disable\", \"toggle\", or none (default).\n *        mini : If present, use mini reply template.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\njb_err cgi_toggle(struct client_state *csp,\n                  struct http_response *rsp,\n                  const struct map *parameters)\n{\n   struct map *exports;\n   char mode;\n   const char *template_name;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == (csp->config->feature_flags & RUNTIME_FEATURE_CGI_TOGGLE))\n   {\n      return cgi_error_disabled(csp, rsp);\n   }\n\n   mode = get_char_param(parameters, \"set\");\n\n   if (mode == 'E')\n   {\n      /* Enable */\n      global_toggle_state = 1;\n   }\n   else if (mode == 'D')\n   {\n      /* Disable */\n      global_toggle_state = 0;\n   }\n   else if (mode == 'T')\n   {\n      /* Toggle */\n      global_toggle_state = !global_toggle_state;\n   }\n\n   if (NULL == (exports = default_exports(csp, \"toggle\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   template_name = (get_char_param(parameters, \"mini\")\n                 ? \"toggle-mini\"\n                 : \"toggle\");\n\n   return template_fill_for_cgi(csp, template_name, exports, rsp);\n}\n#endif /* def FEATURE_TOGGLE */\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgiedit.h",
    "content": "#ifndef CGIEDIT_H_INCLUDED\n#define CGIEDIT_H_INCLUDED\n#define CGIEDIT_H_VERSION \"$Id: cgiedit.h,v 1.13 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgiedit.h,v $\n *\n * Purpose     :  CGI-based actionsfile editor.\n *\n *                Functions declared include:\n *\n *\n * Copyright   :  Written by and Copyright (C) 2001 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"project.h\"\n\n/*\n * CGI functions\n */\n#ifdef FEATURE_CGI_EDIT_ACTIONS\nextern jb_err cgi_edit_actions        (struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_for_url(struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_list   (struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_submit (struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_url    (struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_url_form(struct client_state *csp,\n                                        struct http_response *rsp,\n                                        const struct map *parameters);\nextern jb_err cgi_edit_actions_add_url(struct client_state *csp,\n                                       struct http_response *rsp,\n                                       const struct map *parameters);\nextern jb_err cgi_edit_actions_add_url_form(struct client_state *csp,\n                                            struct http_response *rsp,\n                                            const struct map *parameters);\nextern jb_err cgi_edit_actions_remove_url    (struct client_state *csp,\n                                              struct http_response *rsp,\n                                              const struct map *parameters);\nextern jb_err cgi_edit_actions_remove_url_form(struct client_state *csp,\n                                            struct http_response *rsp,\n                                            const struct map *parameters);\nextern jb_err cgi_edit_actions_section_remove(struct client_state *csp,\n                                              struct http_response *rsp,\n                                              const struct map *parameters);\nextern jb_err cgi_edit_actions_section_add   (struct client_state *csp,\n                                              struct http_response *rsp,\n                                              const struct map *parameters);\nextern jb_err cgi_edit_actions_section_swap  (struct client_state *csp,\n                                              struct http_response *rsp,\n                                              const struct map *parameters);\n#endif /* def FEATURE_CGI_EDIT_ACTIONS */\n#ifdef FEATURE_TOGGLE\nextern jb_err cgi_toggle(struct client_state *csp,\n                         struct http_response *rsp,\n                         const struct map *parameters);\n#endif /* def FEATURE_TOGGLE */\n\n/* Revision control strings from this header and associated .c file */\nextern const char cgiedit_rcs[];\nextern const char cgiedit_h_rcs[];\n\n#endif /* ndef CGI_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgisimple.c",
    "content": "const char cgisimple_rcs[] = \"$Id: cgisimple.c,v 1.132 2015/11/06 13:38:13 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgisimple.c,v $\n *\n * Purpose     :  Simple CGIs to get information about Privoxy's\n *                status.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <string.h>\n#include <assert.h>\n\n#if defined (HAVE_ACCESS) && defined (HAVE_UNISTD_H)\n#include <unistd.h>\n#endif /* def HAVE_ACCESS && HAVE_UNISTD_H */\n\n#include \"project.h\"\n#include \"cgi.h\"\n#include \"cgisimple.h\"\n#include \"list.h\"\n#include \"encode.h\"\n#include \"jcc.h\"\n#include \"filters.h\"\n#include \"actions.h\"\n#include \"miscutil.h\"\n#include \"loadcfg.h\"\n#include \"parsers.h\"\n#include \"urlmatch.h\"\n#include \"errlog.h\"\n\nconst char cgisimple_h_rcs[] = CGISIMPLE_H_VERSION;\n\nstatic char *show_rcs(void);\nstatic jb_err show_defines(struct map *exports);\nstatic jb_err cgi_show_file(struct client_state *csp,\n                            struct http_response *rsp,\n                            const struct map *parameters);\nstatic jb_err load_file(const char *filename, char **buffer, size_t *length);\n\n/*********************************************************************\n *\n * Function    :  cgi_default\n *\n * Description :  CGI function that is called for the CGI_SITE_1_HOST\n *                and CGI_SITE_2_HOST/CGI_SITE_2_PATH base URLs.\n *                Boring - only exports the default exports.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory\n *\n *********************************************************************/\njb_err cgi_default(struct client_state *csp,\n                   struct http_response *rsp,\n                   const struct map *parameters)\n{\n   struct map *exports;\n\n   (void)parameters;\n\n   assert(csp);\n   assert(rsp);\n\n   if (NULL == (exports = default_exports(csp, \"\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return template_fill_for_cgi(csp, \"default\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_error_404\n *\n * Description :  CGI function that is called if an unknown action was\n *                given.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_error_404(struct client_state *csp,\n                     struct http_response *rsp,\n                     const struct map *parameters)\n{\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (NULL == (exports = default_exports(csp, NULL)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   rsp->status = strdup_or_die(\"404 Privoxy configuration page not found\");\n\n   return template_fill_for_cgi(csp, \"cgi-error-404\", exports, rsp);\n}\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n/*********************************************************************\n *\n * Function    :  cgi_die\n *\n * Description :  CGI function to shut down Privoxy.\n *                NOTE: Turning this on in a production build\n *                would be a BAD idea.  An EXTREMELY BAD idea.\n *                In short, don't do it.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *\n *********************************************************************/\njb_err cgi_die (struct client_state *csp,\n                struct http_response *rsp,\n                const struct map *parameters)\n{\n   static const char status[] = \"200 OK Privoxy shutdown request received\";\n   static const char body[] =\n      \"<html>\\n\"\n      \"<head>\\n\"\n      \" <title>Privoxy shutdown request received</title>\\n\"\n      \" <link rel=\\\"shortcut icon\\\" href=\\\"\" CGI_PREFIX \"error-favicon.ico\\\" type=\\\"image/x-icon\\\">\\n\"\n      \" <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"http://config.privoxy.org/send-stylesheet\\\">\\n\"\n      \"</head>\\n\"\n      \"<body>\\n\"\n      \"<h1>Privoxy shutdown request received</h1>\\n\"\n      \"<p>Privoxy is going to shut down after the next request.</p>\\n\"\n      \"</body>\\n\"\n      \"</html>\\n\";\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   /* quit */\n   g_terminate = 1;\n\n   csp->flags &= ~CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n\n   rsp->content_length = 0;\n   rsp->head_length = 0;\n   rsp->is_static = 0;\n\n   rsp->body = strdup_or_die(body);\n   rsp->status = strdup_or_die(status);\n\n   return JB_ERR_OK;\n}\n#endif /* def FEATURE_GRACEFUL_TERMINATION */\n\n\n/*********************************************************************\n *\n * Function    :  cgi_show_request\n *\n * Description :  Show the client's request and what sed() would have\n *                made of it.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_show_request(struct client_state *csp,\n                        struct http_response *rsp,\n                        const struct map *parameters)\n{\n   char *p;\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (NULL == (exports = default_exports(csp, \"show-request\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   /*\n    * Repair the damage done to the IOB by get_header()\n    */\n   for (p = csp->client_iob->buf; p < csp->client_iob->cur; p++)\n   {\n      if (*p == '\\0') *p = '\\n';\n   }\n\n   /*\n    * Export the original client's request and the one we would\n    * be sending to the server if this wasn't a CGI call\n    */\n\n   if (map(exports, \"client-request\", 1, html_encode(csp->client_iob->buf), 0))\n   {\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   if (map(exports, \"processed-request\", 1,\n         html_encode_and_free_original(list_to_text(csp->headers)), 0))\n   {\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   return template_fill_for_cgi(csp, \"show-request\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_send_banner\n *\n * Description :  CGI function that returns a banner.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *           type : Selects the type of banner between \"trans\", \"logo\",\n *                  and \"auto\". Defaults to \"logo\" if absent or invalid.\n *                  \"auto\" means to select as if we were image-blocking.\n *                  (Only the first character really counts; b and t are\n *                  equivalent).\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_banner(struct client_state *csp,\n                       struct http_response *rsp,\n                       const struct map *parameters)\n{\n   char imagetype = lookup(parameters, \"type\")[0];\n\n   /*\n    * If type is auto, then determine the right thing\n    * to do from the set-image-blocker action\n    */\n   if (imagetype == 'a')\n   {\n      /*\n       * Default to pattern\n       */\n      imagetype = 'p';\n\n#ifdef FEATURE_IMAGE_BLOCKING\n      if ((csp->action->flags & ACTION_IMAGE_BLOCKER) != 0)\n      {\n         static const char prefix1[] = CGI_PREFIX \"send-banner?type=\";\n         static const char prefix2[] = \"http://\" CGI_SITE_1_HOST \"/send-banner?type=\";\n         const char *p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER];\n\n         if (p == NULL)\n         {\n            /* Use default - nothing to do here. */\n         }\n         else if (0 == strcmpic(p, \"blank\"))\n         {\n            imagetype = 'b';\n         }\n         else if (0 == strcmpic(p, \"pattern\"))\n         {\n            imagetype = 'p';\n         }\n\n         /*\n          * If the action is to call this CGI, determine\n          * the argument:\n          */\n         else if (0 == strncmpic(p, prefix1, sizeof(prefix1) - 1))\n         {\n            imagetype = p[sizeof(prefix1) - 1];\n         }\n         else if (0 == strncmpic(p, prefix2, sizeof(prefix2) - 1))\n         {\n            imagetype = p[sizeof(prefix2) - 1];\n         }\n\n         /*\n          * Everything else must (should) be a URL to\n          * redirect to.\n          */\n         else\n         {\n            imagetype = 'r';\n         }\n      }\n#endif /* def FEATURE_IMAGE_BLOCKING */\n   }\n\n   /*\n    * Now imagetype is either the non-auto type we were called with,\n    * or it was auto and has since been determined. In any case, we\n    * can proceed to actually answering the request by sending a redirect\n    * or an image as appropriate:\n    */\n   if (imagetype == 'r')\n   {\n      rsp->status = strdup_or_die(\"302 Local Redirect from Privoxy\");\n      if (enlist_unique_header(rsp->headers, \"Location\",\n                               csp->action->string[ACTION_STRING_IMAGE_BLOCKER]))\n      {\n         return JB_ERR_MEMORY;\n      }\n   }\n   else\n   {\n      if ((imagetype == 'b') || (imagetype == 't'))\n      {\n         rsp->body = bindup(image_blank_data, image_blank_length);\n         rsp->content_length = image_blank_length;\n      }\n      else\n      {\n         rsp->body = bindup(image_pattern_data, image_pattern_length);\n         rsp->content_length = image_pattern_length;\n      }\n\n      if (rsp->body == NULL)\n      {\n         return JB_ERR_MEMORY;\n      }\n      if (enlist(rsp->headers, \"Content-Type: \" BUILTIN_IMAGE_MIMETYPE))\n      {\n         return JB_ERR_MEMORY;\n      }\n\n      rsp->is_static = 1;\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_transparent_image\n *\n * Description :  CGI function that sends a 1x1 transparent image.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_transparent_image(struct client_state *csp,\n                             struct http_response *rsp,\n                             const struct map *parameters)\n{\n   (void)csp;\n   (void)parameters;\n\n   rsp->body = bindup(image_blank_data, image_blank_length);\n   rsp->content_length = image_blank_length;\n\n   if (rsp->body == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (enlist(rsp->headers, \"Content-Type: \" BUILTIN_IMAGE_MIMETYPE))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   rsp->is_static = 1;\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_send_default_favicon\n *\n * Description :  CGI function that sends the standard favicon.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_default_favicon(struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters)\n{\n   static const char default_favicon_data[] =\n      \"\\000\\000\\001\\000\\001\\000\\020\\020\\002\\000\\000\\000\\000\\000\\260\"\n      \"\\000\\000\\000\\026\\000\\000\\000\\050\\000\\000\\000\\020\\000\\000\\000\"\n      \"\\040\\000\\000\\000\\001\\000\\001\\000\\000\\000\\000\\000\\100\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\002\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\377\\377\\377\\000\\377\\000\\052\\000\\017\\360\\000\\000\\077\"\n      \"\\374\\000\\000\\161\\376\\000\\000\\161\\376\\000\\000\\361\\377\\000\\000\"\n      \"\\361\\377\\000\\000\\360\\017\\000\\000\\360\\007\\000\\000\\361\\307\\000\"\n      \"\\000\\361\\307\\000\\000\\361\\307\\000\\000\\360\\007\\000\\000\\160\\036\"\n      \"\\000\\000\\177\\376\\000\\000\\077\\374\\000\\000\\017\\360\\000\\000\\360\"\n      \"\\017\\000\\000\\300\\003\\000\\000\\200\\001\\000\\000\\200\\001\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\200\\001\\000\\000\\200\\001\\000\\000\\300\\003\\000\\000\\360\"\n      \"\\017\\000\\000\";\n   static const size_t favicon_length = sizeof(default_favicon_data) - 1;\n\n   (void)csp;\n   (void)parameters;\n\n   rsp->body = bindup(default_favicon_data, favicon_length);\n   rsp->content_length = favicon_length;\n\n   if (rsp->body == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (enlist(rsp->headers, \"Content-Type: image/x-icon\"))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   rsp->is_static = 1;\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_send_error_favicon\n *\n * Description :  CGI function that sends the favicon for error pages.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_error_favicon(struct client_state *csp,\n                              struct http_response *rsp,\n                              const struct map *parameters)\n{\n   static const char error_favicon_data[] =\n      \"\\000\\000\\001\\000\\001\\000\\020\\020\\002\\000\\000\\000\\000\\000\\260\"\n      \"\\000\\000\\000\\026\\000\\000\\000\\050\\000\\000\\000\\020\\000\\000\\000\"\n      \"\\040\\000\\000\\000\\001\\000\\001\\000\\000\\000\\000\\000\\100\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\002\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\377\\377\\377\\000\\000\\000\\377\\000\\017\\360\\000\\000\\077\"\n      \"\\374\\000\\000\\161\\376\\000\\000\\161\\376\\000\\000\\361\\377\\000\\000\"\n      \"\\361\\377\\000\\000\\360\\017\\000\\000\\360\\007\\000\\000\\361\\307\\000\"\n      \"\\000\\361\\307\\000\\000\\361\\307\\000\\000\\360\\007\\000\\000\\160\\036\"\n      \"\\000\\000\\177\\376\\000\\000\\077\\374\\000\\000\\017\\360\\000\\000\\360\"\n      \"\\017\\000\\000\\300\\003\\000\\000\\200\\001\\000\\000\\200\\001\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\"\n      \"\\000\\000\\200\\001\\000\\000\\200\\001\\000\\000\\300\\003\\000\\000\\360\"\n      \"\\017\\000\\000\";\n   static const size_t favicon_length = sizeof(error_favicon_data) - 1;\n\n   (void)csp;\n   (void)parameters;\n\n   rsp->body = bindup(error_favicon_data, favicon_length);\n   rsp->content_length = favicon_length;\n\n   if (rsp->body == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (enlist(rsp->headers, \"Content-Type: image/x-icon\"))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   rsp->is_static = 1;\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_send_stylesheet\n *\n * Description :  CGI function that sends a css stylesheet found\n *                in the cgi-style.css template\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_stylesheet(struct client_state *csp,\n                           struct http_response *rsp,\n                           const struct map *parameters)\n{\n   jb_err err;\n\n   assert(csp);\n   assert(rsp);\n\n   (void)parameters;\n\n   err = template_load(csp, &rsp->body, \"cgi-style.css\", 0);\n\n   if (err == JB_ERR_FILE)\n   {\n      /*\n       * No way to tell user; send empty stylesheet\n       */\n      log_error(LOG_LEVEL_ERROR, \"Could not find cgi-style.css template\");\n   }\n   else if (err)\n   {\n      return err; /* JB_ERR_MEMORY */\n   }\n\n   if (enlist(rsp->headers, \"Content-Type: text/css\"))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_send_url_info_osd\n *\n * Description :  CGI function that sends the OpenSearch Description\n *                template for the show-url-info page. It allows to\n *                access the page through \"search engine plugins\".\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_url_info_osd(struct client_state *csp,\n                               struct http_response *rsp,\n                               const struct map *parameters)\n{\n   jb_err err = JB_ERR_MEMORY;\n   struct map *exports = default_exports(csp, NULL);\n\n   (void)csp;\n   (void)parameters;\n\n   if (NULL != exports)\n   {\n      err = template_fill_for_cgi(csp, \"url-info-osd.xml\", exports, rsp);\n      if (JB_ERR_OK == err)\n      {\n         err = enlist(rsp->headers,\n            \"Content-Type: application/opensearchdescription+xml\");\n      }\n   }\n\n   return err;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_content_type\n *\n * Description :  Use the file extension to guess the content type\n *                header we should use to serve the file.\n *\n * Parameters  :\n *          1  :  filename = Name of the file whose content type\n *                           we care about\n *\n * Returns     :  The guessed content type.\n *\n *********************************************************************/\nstatic const char *get_content_type(const char *filename)\n{\n   int i;\n   struct content_type\n   {\n      const char extension[6];\n      const char content_type[11];\n   };\n   static const struct content_type content_types[] =\n   {\n      {\".css\",  \"text/css\"},\n      {\".jpg\",  \"image/jpeg\"},\n      {\".jpeg\", \"image/jpeg\"},\n      {\".png\",  \"image/png\"},\n   };\n\n   for (i = 0; i < SZ(content_types); i++)\n   {\n      if (strstr(filename, content_types[i].extension))\n      {\n         return content_types[i].content_type;\n      }\n   }\n\n   /* No match by extension, default to html */\n   return \"text/html\";\n}\n\n/*********************************************************************\n *\n * Function    :  cgi_send_user_manual\n *\n * Description :  CGI function that sends a file in the user\n *                manual directory.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : file=name.html, the name of the HTML file\n *                  (relative to user-manual from config)\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_send_user_manual(struct client_state *csp,\n                            struct http_response *rsp,\n                            const struct map *parameters)\n{\n   const char *filename;\n   char *full_path;\n   jb_err err = JB_ERR_OK;\n   const char *content_type;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (0 == strncmpic(csp->config->usermanual, \"http://\", 7))\n   {\n      log_error(LOG_LEVEL_CGI, \"Request for local user-manual \"\n         \"received while user-manual delivery is disabled.\");\n      return cgi_error_404(csp, rsp, parameters);\n   }\n\n   if (!parameters->first)\n   {\n      /* requested http://p.p/user-manual (without trailing slash) */\n      return cgi_redirect(rsp, CGI_PREFIX \"user-manual/\");\n   }\n\n   get_string_param(parameters, \"file\", &filename);\n   if (filename == NULL)\n   {\n      /* It's '/' so serve the index.html if there is one.  */\n      filename = \"index.html\";\n   }\n   else if (NULL != strchr(filename, '/') || NULL != strstr(filename, \"..\"))\n   {\n      /*\n       * We currently only support a flat file\n       * hierarchy for the documentation.\n       */\n      log_error(LOG_LEVEL_ERROR,\n         \"Rejecting the request to serve '%s' as it contains '/' or '..'\",\n         filename);\n      return JB_ERR_CGI_PARAMS;\n   }\n\n   full_path = make_path(csp->config->usermanual, filename);\n   if (full_path == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   err = load_file(full_path, &rsp->body, &rsp->content_length);\n   if (JB_ERR_OK != err)\n   {\n      assert((JB_ERR_FILE == err) || (JB_ERR_MEMORY == err));\n      if (JB_ERR_FILE == err)\n      {\n         err = cgi_error_no_template(csp, rsp, full_path);\n      }\n      freez(full_path);\n      return err;\n   }\n   freez(full_path);\n\n   content_type = get_content_type(filename);\n   log_error(LOG_LEVEL_CGI,\n      \"Content-Type guessed for %s: %s\", filename, content_type);\n\n   return enlist_unique_header(rsp->headers, \"Content-Type\", content_type);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_show_version\n *\n * Description :  CGI function that returns a a web page describing the\n *                file versions of Privoxy.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : none\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_show_version(struct client_state *csp,\n                        struct http_response *rsp,\n                        const struct map *parameters)\n{\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (NULL == (exports = default_exports(csp, \"show-version\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (map(exports, \"sourceversions\", 1, show_rcs(), 0))\n   {\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   return template_fill_for_cgi(csp, \"show-version\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_show_status\n *\n * Description :  CGI function that returns a web page describing the\n *                current status of Privoxy.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *        file :  Which file to show.  Only first letter is checked,\n *                valid values are:\n *                - \"a\"ction file\n *                - \"r\"egex\n *                - \"t\"rust\n *                Default is to show menu and other information.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_show_status(struct client_state *csp,\n                       struct http_response *rsp,\n                       const struct map *parameters)\n{\n   char *s = NULL;\n   unsigned i;\n\n   char buf[BUFFER_SIZE];\n#ifdef FEATURE_STATISTICS\n   float perc_rej;   /* Percentage of http requests rejected */\n   int local_urls_read;\n   int local_urls_rejected;\n#endif /* ndef FEATURE_STATISTICS */\n   jb_err err = JB_ERR_OK;\n\n   struct map *exports;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if ('\\0' != *(lookup(parameters, \"file\")))\n   {\n      return cgi_show_file(csp, rsp, parameters);\n   }\n\n   if (NULL == (exports = default_exports(csp, \"show-status\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   s = strdup(\"\");\n//   for (j = 0; (s != NULL) && (j < Argc); j++)\n//   {\n//      if (!err) err = string_join  (&s, html_encode(Argv[j]));\n//      if (!err) err = string_append(&s, \" \");\n//   }\n   if (!err) err = map(exports, \"invocation\", 1, s, 0);\n\n   if (!err) err = map(exports, \"options\", 1, csp->config->proxy_args, 1);\n   if (!err) err = show_defines(exports);\n\n   if (err)\n   {\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n#ifdef FEATURE_STATISTICS\n   local_urls_read     = urls_read;\n   local_urls_rejected = urls_rejected;\n\n   /*\n    * Need to alter the stats not to include the fetch of this\n    * page.\n    *\n    * Can't do following thread safely! doh!\n    *\n    * urls_read--;\n    * urls_rejected--; * This will be incremented subsequently *\n    */\n\n   if (local_urls_read == 0)\n   {\n      if (!err) err = map_block_killer(exports, \"have-stats\");\n   }\n   else\n   {\n      if (!err) err = map_block_killer(exports, \"have-no-stats\");\n\n      perc_rej = (float)local_urls_rejected * 100.0F /\n            (float)local_urls_read;\n\n      snprintf(buf, sizeof(buf), \"%d\", local_urls_read);\n      if (!err) err = map(exports, \"requests-received\", 1, buf, 1);\n\n      snprintf(buf, sizeof(buf), \"%d\", local_urls_rejected);\n      if (!err) err = map(exports, \"requests-blocked\", 1, buf, 1);\n\n      snprintf(buf, sizeof(buf), \"%6.2f\", perc_rej);\n      if (!err) err = map(exports, \"percent-blocked\", 1, buf, 1);\n   }\n\n#else /* ndef FEATURE_STATISTICS */\n   if (!err) err = map_block_killer(exports, \"statistics\");\n#endif /* ndef FEATURE_STATISTICS */\n\n   /*\n    * List all action files in use, together with view and edit links,\n    * except for standard.action, which should only be viewable. (Not\n    * enforced in the editor itself)\n    * FIXME: Shouldn't include hardwired HTML here, use line template instead!\n    */\n   s = strdup(\"\");\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->actions_list[i] != NULL)\n      {\n         if (!err) err = string_append(&s, \"<tr><td>\");\n         if (!err) err = string_join(&s, html_encode(csp->actions_list[i]->filename));\n         snprintf(buf, sizeof(buf),\n            \"</td><td class=\\\"buttons\\\"><a href=\\\"/show-status?file=actions&amp;index=%u\\\">View</a>\", i);\n         if (!err) err = string_append(&s, buf);\n\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n         if ((csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)\n            && (NULL != csp->config->actions_file_short[i]))\n         {\n#ifdef HAVE_ACCESS\n            if (access(csp->config->actions_file[i], W_OK) == 0)\n            {\n#endif /* def HAVE_ACCESS */\n               snprintf(buf, sizeof(buf), \"&nbsp;&nbsp;<a href=\\\"/edit-actions-list?f=%u\\\">Edit</a>\", i);\n               if (!err) err = string_append(&s, buf);\n#ifdef HAVE_ACCESS\n            }\n            else\n            {\n               if (!err) err = string_append(&s, \"&nbsp;&nbsp;<strong>No write access.</strong>\");\n            }\n#endif /* def HAVE_ACCESS */\n         }\n#endif\n\n         if (!err) err = string_append(&s, \"</td></tr>\\n\");\n      }\n   }\n   if (*s != '\\0')\n   {\n      if (!err) err = map(exports, \"actions-filenames\", 1, s, 0);\n   }\n   else\n   {\n      if (!err) err = map(exports, \"actions-filenames\", 1, \"<tr><td>None specified</td></tr>\", 1);\n   }\n\n   /*\n    * List all re_filterfiles in use, together with view options.\n    * FIXME: Shouldn't include hardwired HTML here, use line template instead!\n    */\n   s = strdup(\"\");\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->rlist[i] != NULL)\n      {\n         if (!err) err = string_append(&s, \"<tr><td>\");\n         if (!err) err = string_join(&s, html_encode(csp->rlist[i]->filename));\n         snprintf(buf, sizeof(buf),\n            \"</td><td class=\\\"buttons\\\"><a href=\\\"/show-status?file=filter&amp;index=%u\\\">View</a>\", i);\n         if (!err) err = string_append(&s, buf);\n         if (!err) err = string_append(&s, \"</td></tr>\\n\");\n      }\n   }\n   if (*s != '\\0')\n   {\n      if (!err) err = map(exports, \"re-filter-filenames\", 1, s, 0);\n   }\n   else\n   {\n      if (!err) err = map(exports, \"re-filter-filenames\", 1, \"<tr><td>None specified</td></tr>\", 1);\n      if (!err) err = map_block_killer(exports, \"have-filterfile\");\n   }\n\n#ifdef FEATURE_TRUST\n   if (csp->tlist)\n   {\n      if (!err) err = map(exports, \"trust-filename\", 1, html_encode(csp->tlist->filename), 0);\n   }\n   else\n   {\n      if (!err) err = map(exports, \"trust-filename\", 1, \"None specified\", 1);\n      if (!err) err = map_block_killer(exports, \"have-trustfile\");\n   }\n#else\n   if (!err) err = map_block_killer(exports, \"trust-support\");\n#endif /* ndef FEATURE_TRUST */\n\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n   if (!err && (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n   {\n      err = map_block_killer(exports, \"cgi-editor-is-disabled\");\n   }\n#endif /* ndef CGI_EDIT_ACTIONS */\n\n   if (!err) err = map(exports, \"force-prefix\", 1, FORCE_PREFIX, 1);\n\n   if (err)\n   {\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   return template_fill_for_cgi(csp, \"show-status\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_show_url_info\n *\n * Description :  CGI function that determines and shows which actions\n *                Privoxy will perform for a given url, and which\n *                matches starting from the defaults have lead to that.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *            url : The url whose actions are to be determined.\n *                  If url is unset, the url-given conditional will be\n *                  set, so that all but the form can be suppressed in\n *                  the template.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_show_url_info(struct client_state *csp,\n                         struct http_response *rsp,\n                         const struct map *parameters)\n{\n   char *url_param;\n   struct map *exports;\n   char buf[150];\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   if (NULL == (exports = default_exports(csp, \"show-url-info\")))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   /*\n    * Get the url= parameter (if present) and remove any leading/trailing spaces.\n    */\n   url_param = strdup_or_die(lookup(parameters, \"url\"));\n   chomp(url_param);\n\n   /*\n    * Handle prefixes.  4 possibilities:\n    * 1) \"http://\" or \"https://\" prefix present and followed by URL - OK\n    * 2) Only the \"http://\" or \"https://\" part is present, no URL - change\n    *    to empty string so it will be detected later as \"no URL\".\n    * 3) Parameter specified but doesn't start with \"http(s?)://\" - add a\n    *    \"http://\" prefix.\n    * 4) Parameter not specified or is empty string - let this fall through\n    *    for now, next block of code will handle it.\n    */\n   if (0 == strncmp(url_param, \"http://\", 7))\n   {\n      if (url_param[7] == '\\0')\n      {\n         /*\n          * Empty URL (just prefix).\n          * Make it totally empty so it's caught by the next if ()\n          */\n         url_param[0] = '\\0';\n      }\n   }\n   else if (0 == strncmp(url_param, \"https://\", 8))\n   {\n      if (url_param[8] == '\\0')\n      {\n         /*\n          * Empty URL (just prefix).\n          * Make it totally empty so it's caught by the next if ()\n          */\n         url_param[0] = '\\0';\n      }\n   }\n   else if ((url_param[0] != '\\0')\n      && ((NULL == strstr(url_param, \"://\")\n            || (strstr(url_param, \"://\") > strstr(url_param, \"/\")))))\n   {\n      /*\n       * No prefix or at least no prefix before\n       * the first slash - assume http://\n       */\n      char *url_param_prefixed = strdup_or_die(\"http://\");\n\n      if (JB_ERR_OK != string_join(&url_param_prefixed, url_param))\n      {\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n      url_param = url_param_prefixed;\n   }\n\n   /*\n    * Hide \"toggle off\" warning if Privoxy is toggled on.\n    */\n   if (\n#ifdef FEATURE_TOGGLE\n       (global_toggle_state == 1) &&\n#endif /* def FEATURE_TOGGLE */\n       map_block_killer(exports, \"privoxy-is-toggled-off\")\n      )\n   {\n      freez(url_param);\n      free_map(exports);\n      return JB_ERR_MEMORY;\n   }\n\n   if (url_param[0] == '\\0')\n   {\n      /* URL paramater not specified, display query form only. */\n      free(url_param);\n      if (map_block_killer(exports, \"url-given\")\n        || map(exports, \"url\", 1, \"\", 1))\n      {\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n   }\n   else\n   {\n      /* Given a URL, so query it. */\n      jb_err err;\n      char *matches;\n      char *s;\n      int hits = 0;\n      struct file_list *fl;\n      struct url_actions *b;\n      struct http_request url_to_query[1];\n      struct current_action_spec action[1];\n      int i;\n\n      if (map(exports, \"url\", 1, html_encode(url_param), 0))\n      {\n         free(url_param);\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n\n      init_current_action(action);\n\n      if (map(exports, \"default\", 1, current_action_to_html(csp, action), 0))\n      {\n         free_current_action(action);\n         free(url_param);\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n\n      memset(url_to_query, '\\0', sizeof(url_to_query));\n      err = parse_http_url(url_param, url_to_query, REQUIRE_PROTOCOL);\n      assert((err != JB_ERR_OK) || (url_to_query->ssl == !strncmpic(url_param, \"https://\", 8)));\n\n      free(url_param);\n\n      if (err == JB_ERR_MEMORY)\n      {\n         free_http_request(url_to_query);\n         free_current_action(action);\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n      else if (err)\n      {\n         /* Invalid URL */\n\n         err = map(exports, \"matches\", 1, \"<b>[Invalid URL specified!]</b>\" , 1);\n         if (!err) err = map(exports, \"final\", 1, lookup(exports, \"default\"), 1);\n         if (!err) err = map_block_killer(exports, \"valid-url\");\n\n         free_current_action(action);\n         free_http_request(url_to_query);\n\n         if (err)\n         {\n            free_map(exports);\n            return JB_ERR_MEMORY;\n         }\n\n         return template_fill_for_cgi(csp, \"show-url-info\", exports, rsp);\n      }\n\n      /*\n       * We have a warning about SSL paths.  Hide it for unencrypted sites.\n       */\n      if (!url_to_query->ssl)\n      {\n         if (map_block_killer(exports, \"https\"))\n         {\n            free_current_action(action);\n            free_map(exports);\n            free_http_request(url_to_query);\n            return JB_ERR_MEMORY;\n         }\n      }\n\n      matches = strdup_or_die(\"<table summary=\\\"\\\" class=\\\"transparent\\\">\");\n\n      for (i = 0; i < MAX_AF_FILES; i++)\n      {\n         if (NULL == csp->config->actions_file_short[i]\n             || !strcmp(csp->config->actions_file_short[i], \"standard.action\")) continue;\n\n         b = NULL;\n         hits = 1;\n         if ((fl = csp->actions_list[i]) != NULL)\n         {\n            if ((b = fl->f) != NULL)\n            {\n               /* FIXME: Hardcoded HTML! */\n               string_append(&matches, \"<tr><th>In file: \");\n               string_join  (&matches, html_encode(csp->config->actions_file_short[i]));\n               snprintf(buf, sizeof(buf), \" <a class=\\\"cmd\\\" href=\\\"/show-status?file=actions&amp;index=%d\\\">\", i);\n               string_append(&matches, buf);\n               string_append(&matches, \"View</a>\");\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n               if (csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS)\n               {\n#ifdef HAVE_ACCESS\n                  if (access(csp->config->actions_file[i], W_OK) == 0)\n                  {\n#endif /* def HAVE_ACCESS */\n                     snprintf(buf, sizeof(buf),\n                        \" <a class=\\\"cmd\\\" href=\\\"/edit-actions-list?f=%d\\\">\", i);\n                     string_append(&matches, buf);\n                     string_append(&matches, \"Edit</a>\");\n#ifdef HAVE_ACCESS\n                  }\n                  else\n                  {\n                     string_append(&matches, \" <strong>No write access.</strong>\");\n                  }\n#endif /* def HAVE_ACCESS */\n               }\n#endif /* FEATURE_CGI_EDIT_ACTIONS */\n\n               string_append(&matches, \"</th></tr>\\n\");\n\n               hits = 0;\n               b = b->next;\n            }\n         }\n\n         for (; (b != NULL) && (matches != NULL); b = b->next)\n         {\n            if (url_match(b->url, url_to_query))\n            {\n               string_append(&matches, \"<tr><td>{\");\n               string_join  (&matches, actions_to_html(csp, b->action));\n               string_append(&matches, \" }<br>\\n<code>\");\n               string_join  (&matches, html_encode(b->url->spec));\n               string_append(&matches, \"</code></td></tr>\\n\");\n\n               if (merge_current_action(action, b->action))\n               {\n                  freez(matches);\n                  free_http_request(url_to_query);\n                  free_current_action(action);\n                  free_map(exports);\n                  return JB_ERR_MEMORY;\n               }\n               hits++;\n            }\n         }\n\n         if (!hits)\n         {\n            string_append(&matches, \"<tr><td>(no matches in this file)</td></tr>\\n\");\n         }\n      }\n      string_append(&matches, \"</table>\\n\");\n\n      /*\n       * XXX: Kludge to make sure the \"Forward settings\" section\n       * shows what forward-override{} would do with the requested URL.\n       * No one really cares how the CGI request would be forwarded\n       * if it wasn't intercepted as CGI request in the first place.\n       *\n       * From here on the action bitmask will no longer reflect\n       * the real url (http://config.privoxy.org/show-url-info?url=.*),\n       * but luckily it's no longer required later on anyway.\n       */\n      free_current_action(csp->action);\n      get_url_actions(csp, url_to_query);\n\n      /*\n       * Fill in forwarding settings.\n       *\n       * The possibilities are:\n       *  - no forwarding\n       *  - http forwarding only\n       *  - socks4(a) forwarding only\n       *  - socks4(a) and http forwarding.\n       *\n       * XXX: Parts of this code could be reused for the\n       * \"forwarding-failed\" template which currently doesn't\n       * display the proxy port and an eventual second forwarder.\n       */\n      {\n         const struct forward_spec *fwd = forward_url(csp, url_to_query);\n\n         if ((fwd->gateway_host == NULL) && (fwd->forward_host == NULL))\n         {\n            if (!err) err = map_block_killer(exports, \"socks-forwarder\");\n            if (!err) err = map_block_killer(exports, \"http-forwarder\");\n         }\n         else\n         {\n            char port[10]; /* We save proxy ports as int but need a string here */\n\n            if (!err) err = map_block_killer(exports, \"no-forwarder\");\n\n            if (fwd->gateway_host != NULL)\n            {\n               char *socks_type = NULL;\n\n               switch (fwd->type)\n               {\n                  case SOCKS_4:\n                     socks_type = \"socks4\";\n                     break;\n                  case SOCKS_4A:\n                     socks_type = \"socks4a\";\n                     break;\n                  case SOCKS_5:\n                     socks_type = \"socks5\";\n                     break;\n                  case SOCKS_5T:\n                     socks_type = \"socks5t\";\n                     break;\n                  default:\n                     log_error(LOG_LEVEL_FATAL, \"Unknown socks type: %d.\", fwd->type);\n               }\n\n               if (!err) err = map(exports, \"socks-type\", 1, socks_type, 1);\n               if (!err) err = map(exports, \"gateway-host\", 1, fwd->gateway_host, 1);\n               snprintf(port, sizeof(port), \"%d\", fwd->gateway_port);\n               if (!err) err = map(exports, \"gateway-port\", 1, port, 1);\n            }\n            else\n            {\n               if (!err) err = map_block_killer(exports, \"socks-forwarder\");\n            }\n\n            if (fwd->forward_host != NULL)\n            {\n               if (!err) err = map(exports, \"forward-host\", 1, fwd->forward_host, 1);\n               snprintf(port, sizeof(port), \"%d\", fwd->forward_port);\n               if (!err) err = map(exports, \"forward-port\", 1, port, 1);\n            }\n            else\n            {\n               if (!err) err = map_block_killer(exports, \"http-forwarder\");\n            }\n         }\n      }\n\n      free_http_request(url_to_query);\n\n      if (err || matches == NULL)\n      {\n         free_current_action(action);\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n      if ((csp->config->feature_flags & RUNTIME_FEATURE_CGI_EDIT_ACTIONS))\n      {\n         err = map_block_killer(exports, \"cgi-editor-is-disabled\");\n      }\n#endif /* FEATURE_CGI_EDIT_ACTIONS */\n\n      /*\n       * If zlib support is available, if no content filters\n       * are enabled or if the prevent-compression action is enabled,\n       * suppress the \"compression could prevent filtering\" warning.\n       */\n#ifndef FEATURE_ZLIB\n      if (!content_filters_enabled(action) ||\n         (action->flags & ACTION_NO_COMPRESSION))\n#endif\n      {\n         if (!err) err = map_block_killer(exports, \"filters-might-be-ineffective\");\n      }\n\n      if (err || map(exports, \"matches\", 1, matches , 0))\n      {\n         free_current_action(action);\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n\n      s = current_action_to_html(csp, action);\n\n      free_current_action(action);\n\n      if (map(exports, \"final\", 1, s, 0))\n      {\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n   }\n\n   return template_fill_for_cgi(csp, \"show-url-info\", exports, rsp);\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_robots_txt\n *\n * Description :  CGI function to return \"/robots.txt\".\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters : None\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err cgi_robots_txt(struct client_state *csp,\n                      struct http_response *rsp,\n                      const struct map *parameters)\n{\n   char buf[100];\n   jb_err err;\n\n   (void)csp;\n   (void)parameters;\n\n   rsp->body = strdup_or_die(\n      \"# This is the Privoxy control interface.\\n\"\n      \"# It isn't very useful to index it, and you're likely to break stuff.\\n\"\n      \"# So go away!\\n\"\n      \"\\n\"\n      \"User-agent: *\\n\"\n      \"Disallow: /\\n\"\n      \"\\n\");\n\n   err = enlist_unique(rsp->headers, \"Content-Type: text/plain\", 13);\n\n   rsp->is_static = 1;\n\n   get_http_time(7 * 24 * 60 * 60, buf, sizeof(buf)); /* 7 days into future */\n   if (!err) err = enlist_unique_header(rsp->headers, \"Expires\", buf);\n\n   return (err ? JB_ERR_MEMORY : JB_ERR_OK);\n}\n\n\n/*********************************************************************\n *\n * Function    :  show_defines\n *\n * Description :  Add to a map the state od all conditional #defines\n *                used when building\n *\n * Parameters  :\n *          1  :  exports = map to extend\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err show_defines(struct map *exports)\n{\n   jb_err err = JB_ERR_OK;\n   int i;\n   struct feature {\n      const char name[31];\n      const unsigned char is_available;\n   };\n\n   static const struct feature features[] = {\n      {\n         \"FEATURE_ACCEPT_FILTER\",\n#ifdef FEATURE_ACCEPT_FILTER\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_ACL\",\n#ifdef FEATURE_ACL\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_CGI_EDIT_ACTIONS\",\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_COMPRESSION\",\n#ifdef FEATURE_COMPRESSION\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_CONNECTION_KEEP_ALIVE\",\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_CONNECTION_SHARING\",\n#ifdef FEATURE_CONNECTION_SHARING\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_FAST_REDIRECTS\",\n#ifdef FEATURE_FAST_REDIRECTS\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_FORCE_LOAD\",\n#ifdef FEATURE_FORCE_LOAD\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_GRACEFUL_TERMINATION\",\n#ifdef FEATURE_GRACEFUL_TERMINATION\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_IMAGE_BLOCKING\",\n#ifdef FEATURE_IMAGE_BLOCKING\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_IMAGE_DETECT_MSIE\",\n#ifdef FEATURE_IMAGE_DETECT_MSIE\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_IPV6_SUPPORT\",\n#ifdef HAVE_RFC2553\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_NO_GIFS\",\n#ifdef FEATURE_NO_GIFS\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_PTHREAD\",\n#ifdef FEATURE_PTHREAD\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_STATISTICS\",\n#ifdef FEATURE_STATISTICS\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_STRPTIME_SANITY_CHECKS\",\n#ifdef FEATURE_STRPTIME_SANITY_CHECKS\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_TOGGLE\",\n#ifdef FEATURE_TOGGLE\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_TRUST\",\n#ifdef FEATURE_TRUST\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_ZLIB\",\n#ifdef FEATURE_ZLIB\n         1,\n#else\n         0,\n#endif\n      },\n      {\n         \"FEATURE_DYNAMIC_PCRE\",\n#ifdef FEATURE_DYNAMIC_PCRE\n         1,\n#else\n         0,\n#endif\n      }\n   };\n\n   for (i = 0; i < SZ(features); i++)\n   {\n      err = map_conditional(exports, features[i].name, features[i].is_available);\n      if (err)\n      {\n         break;\n      }\n   }\n\n   return err;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  show_rcs\n *\n * Description :  Create a string with the rcs info for all sourcefiles\n *\n * Parameters  :  None\n *\n * Returns     :  A string, or NULL on out-of-memory.\n *\n *********************************************************************/\nstatic char *show_rcs(void)\n{\n   char *result = strdup_or_die(\"\");\n   char buf[BUFFER_SIZE];\n\n   /* Instead of including *all* dot h's in the project (thus creating a\n    * tremendous amount of dependencies), I will concede to declaring them\n    * as extern's.  This forces the developer to add to this list, but oh well.\n    */\n\n#define SHOW_RCS(__x)              \\\n   {                               \\\n      extern const char __x[];     \\\n      snprintf(buf, sizeof(buf), \" %s\\n\", __x);   \\\n      string_append(&result, buf); \\\n   }\n\n   /* In alphabetical order */\n   SHOW_RCS(actions_h_rcs)\n   SHOW_RCS(actions_rcs)\n#ifdef AMIGA\n   SHOW_RCS(amiga_h_rcs)\n   SHOW_RCS(amiga_rcs)\n#endif /* def AMIGA */\n   SHOW_RCS(cgi_h_rcs)\n   SHOW_RCS(cgi_rcs)\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n   SHOW_RCS(cgiedit_h_rcs)\n   SHOW_RCS(cgiedit_rcs)\n#endif /* def FEATURE_CGI_EDIT_ACTIONS */\n   SHOW_RCS(cgisimple_h_rcs)\n   SHOW_RCS(cgisimple_rcs)\n#ifdef __MINGW32__\n   SHOW_RCS(cygwin_h_rcs)\n#endif\n   SHOW_RCS(deanimate_h_rcs)\n   SHOW_RCS(deanimate_rcs)\n   SHOW_RCS(encode_h_rcs)\n   SHOW_RCS(encode_rcs)\n   SHOW_RCS(errlog_h_rcs)\n   SHOW_RCS(errlog_rcs)\n   SHOW_RCS(filters_h_rcs)\n   SHOW_RCS(filters_rcs)\n   SHOW_RCS(gateway_h_rcs)\n   SHOW_RCS(gateway_rcs)\n   SHOW_RCS(jbsockets_h_rcs)\n   SHOW_RCS(jbsockets_rcs)\n   SHOW_RCS(jcc_h_rcs)\n   SHOW_RCS(jcc_rcs)\n   SHOW_RCS(list_h_rcs)\n   SHOW_RCS(list_rcs)\n   SHOW_RCS(loadcfg_h_rcs)\n   SHOW_RCS(loadcfg_rcs)\n   SHOW_RCS(loaders_h_rcs)\n   SHOW_RCS(loaders_rcs)\n   SHOW_RCS(miscutil_h_rcs)\n   SHOW_RCS(miscutil_rcs)\n   SHOW_RCS(parsers_h_rcs)\n   SHOW_RCS(parsers_rcs)\n   SHOW_RCS(pcrs_rcs)\n   SHOW_RCS(pcrs_h_rcs)\n   SHOW_RCS(project_h_rcs)\n   SHOW_RCS(ssplit_h_rcs)\n   SHOW_RCS(ssplit_rcs)\n   SHOW_RCS(urlmatch_h_rcs)\n   SHOW_RCS(urlmatch_rcs)\n#ifdef _WIN32\n#ifndef _WIN_CONSOLE\n   SHOW_RCS(w32log_h_rcs)\n   SHOW_RCS(w32log_rcs)\n   SHOW_RCS(w32res_h_rcs)\n   SHOW_RCS(w32taskbar_h_rcs)\n   SHOW_RCS(w32taskbar_rcs)\n#endif /* ndef _WIN_CONSOLE */\n   SHOW_RCS(win32_h_rcs)\n   SHOW_RCS(win32_rcs)\n#endif /* def _WIN32 */\n\n#undef SHOW_RCS\n\n   return result;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  cgi_show_file\n *\n * Description :  CGI function that shows the content of a\n *                configuration file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  rsp = http_response data structure for output\n *          3  :  parameters = map of cgi parameters\n *\n * CGI Parameters :\n *        file :  Which file to show.  Only first letter is checked,\n *                valid values are:\n *                - \"a\"ction file\n *                - \"r\"egex\n *                - \"t\"rust\n *                Default is to show menu and other information.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err cgi_show_file(struct client_state *csp,\n                            struct http_response *rsp,\n                            const struct map *parameters)\n{\n   unsigned i;\n   const char * filename = NULL;\n   char * file_description = NULL;\n\n   assert(csp);\n   assert(rsp);\n   assert(parameters);\n\n   switch (*(lookup(parameters, \"file\")))\n   {\n   case 'a':\n      if (!get_number_param(csp, parameters, \"index\", &i) && i < MAX_AF_FILES && csp->actions_list[i])\n      {\n         filename = csp->actions_list[i]->filename;\n         file_description = \"Actions File\";\n      }\n      break;\n\n   case 'f':\n      if (!get_number_param(csp, parameters, \"index\", &i) && i < MAX_AF_FILES && csp->rlist[i])\n      {\n         filename = csp->rlist[i]->filename;\n         file_description = \"Filter File\";\n      }\n      break;\n\n#ifdef FEATURE_TRUST\n   case 't':\n      if (csp->tlist)\n      {\n         filename = csp->tlist->filename;\n         file_description = \"Trust File\";\n      }\n      break;\n#endif /* def FEATURE_TRUST */\n   }\n\n   if (NULL != filename)\n   {\n      struct map *exports;\n      char *s;\n      jb_err err;\n      size_t length;\n\n      exports = default_exports(csp, \"show-status\");\n      if (NULL == exports)\n      {\n         return JB_ERR_MEMORY;\n      }\n\n      if (map(exports, \"file-description\", 1, file_description, 1)\n        || map(exports, \"filepath\", 1, html_encode(filename), 0))\n      {\n         free_map(exports);\n         return JB_ERR_MEMORY;\n      }\n\n      err = load_file(filename, &s, &length);\n      if (JB_ERR_OK != err)\n      {\n         if (map(exports, \"contents\", 1, \"<h1>ERROR OPENING FILE!</h1>\", 1))\n         {\n            free_map(exports);\n            return JB_ERR_MEMORY;\n         }\n      }\n      else\n      {\n         s = html_encode_and_free_original(s);\n         if (NULL == s)\n         {\n            free_map(exports);\n            return JB_ERR_MEMORY;\n         }\n\n         if (map(exports, \"contents\", 1, s, 0))\n         {\n            free_map(exports);\n            return JB_ERR_MEMORY;\n         }\n      }\n\n      return template_fill_for_cgi(csp, \"show-status-file\", exports, rsp);\n   }\n\n   return JB_ERR_CGI_PARAMS;\n}\n\n\n/*********************************************************************\n *\n * Function    :  load_file\n *\n * Description :  Loads a file into a buffer.\n *\n * Parameters  :\n *          1  :  filename = Name of the file to be loaded.\n *          2  :  buffer   = Used to return the file's content.\n *          3  :  length   = Used to return the size of the file.\n *\n * Returns     :  JB_ERR_OK in case of success,\n *                JB_ERR_FILE in case of ordinary file loading errors\n *                            (fseek() and ftell() errors are fatal)\n *                JB_ERR_MEMORY in case of out-of-memory.\n *\n *********************************************************************/\nstatic jb_err load_file(const char *filename, char **buffer, size_t *length)\n{\n   FILE *fp;\n   long ret;\n   jb_err err = JB_ERR_OK;\n\n   fp = fopen(filename, \"rb\");\n   if (NULL == fp)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Failed to open %s: %E\", filename);\n      return JB_ERR_FILE;\n   }\n\n   /* Get file length */\n   if (fseek(fp, 0, SEEK_END))\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Unexpected error while fseek()ing to the end of %s: %E\",\n         filename);\n   }\n   ret = ftell(fp);\n   if (-1 == ret)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Unexpected ftell() error while loading %s: %E\",\n         filename);\n   }\n   *length = (size_t)ret;\n\n   /* Go back to the beginning. */\n   if (fseek(fp, 0, SEEK_SET))\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Unexpected error while fseek()ing to the beginning of %s: %E\",\n         filename);\n   }\n\n   *buffer = (char *)zalloc(*length + 1);\n   if (NULL == *buffer)\n   {\n      err = JB_ERR_MEMORY;\n   }\n   else if (1 != fread(*buffer, *length, 1, fp))\n   {\n      /*\n       * May theoretically happen if the file size changes between\n       * fseek() and fread() because it's edited in-place. Privoxy\n       * and common text editors don't do that, thus we just fail.\n       */\n      log_error(LOG_LEVEL_ERROR,\n         \"Couldn't completely read file %s.\", filename);\n      freez(*buffer);\n      err = JB_ERR_FILE;\n   }\n\n   fclose(fp);\n\n   return err;\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/cgisimple.h",
    "content": "#ifndef CGISIMPLE_H_INCLUDED\n#define CGISIMPLE_H_INCLUDED\n#define CGISIMPLE_H_VERSION \"$Id: cgisimple.h,v 1.19 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/cgisimple.h,v $\n *\n * Purpose     :  Declares functions to intercept request, generate\n *                html or gif answers, and to compose HTTP resonses.\n *\n *                Functions declared include:\n *\n *\n * Copyright   :  Written by and Copyright (C) 2001-2007 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"project.h\"\n\n/*\n * CGI functions\n */\nextern jb_err cgi_default      (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_error_404    (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_robots_txt   (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_send_banner  (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_show_status  (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_show_url_info(struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_show_version (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_show_request (struct client_state *csp,\n                                struct http_response *rsp,\n                                const struct map *parameters);\nextern jb_err cgi_transparent_image (struct client_state *csp,\n                                     struct http_response *rsp,\n                                     const struct map *parameters);\nextern jb_err cgi_send_error_favicon (struct client_state *csp,\n                                      struct http_response *rsp,\n                                      const struct map *parameters);\nextern jb_err cgi_send_default_favicon (struct client_state *csp,\n                                        struct http_response *rsp,\n                                        const struct map *parameters);\nextern jb_err cgi_send_stylesheet(struct client_state *csp,\n                                  struct http_response *rsp,\n                                  const struct map *parameters);\nextern jb_err cgi_send_url_info_osd(struct client_state *csp,\n                                    struct http_response *rsp,\n                                    const struct map *parameters);\nextern jb_err cgi_send_user_manual(struct client_state *csp,\n                                   struct http_response *rsp,\n                                   const struct map *parameters);\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\nextern jb_err cgi_die (struct client_state *csp,\n                       struct http_response *rsp,\n                       const struct map *parameters);\n#endif\n\n/* Revision control strings from this header and associated .c file */\nextern const char cgisimple_rcs[];\nextern const char cgisimple_h_rcs[];\n\n#endif /* ndef CGISIMPLE_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/deanimate.c",
    "content": "const char deanimate_rcs[] = \"$Id: deanimate.c,v 1.23 2012/03/09 16:24:36 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/deanimate.c,v $\n *\n * Purpose     :  Declares functions to manipulate binary images on the\n *                fly.  High-level functions include:\n *                  - Deanimation of GIF images\n *\n * Copyright   :  Written by and Copyright (C) 2001 - 2004, 2006 by the\n *                SourceForge Privoxy team. http://www.privoxy.org/\n *\n *                Based on the GIF file format specification (see\n *                http://tronche.com/computer-graphics/gif/gif89a.html)\n *                and ideas from the Image::DeAnim Perl module by\n *                Ken MacFarlane, <ksm+cpan@universal.dca.net>\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n **********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <string.h>\n#include <fcntl.h>\n\n#include \"errlog.h\"\n#include \"project.h\"\n#include \"deanimate.h\"\n#include \"miscutil.h\"\n\nconst char deanimate_h_rcs[] = DEANIMATE_H_VERSION;\n\n/*********************************************************************\n *\n * Function    :  binbuf_free\n *\n * Description :  Safely frees a struct binbuffer\n *\n * Parameters  :\n *          1  :  buf = Pointer to the binbuffer to be freed\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid binbuf_free(struct binbuffer *buf)\n{\n   if (buf == NULL) return;\n\n   if (buf->buffer != NULL)\n   {\n      free(buf->buffer);\n   }\n\n   free(buf);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  buf_extend\n *\n * Description :  Ensure that a given binbuffer can hold a given amount\n *                of bytes, by reallocating its buffer if necessary.\n *                Allocate new mem in chunks of 1024 bytes, so we don't\n *                have to realloc() too often.\n *\n * Parameters  :\n *          1  :  buf = Pointer to the binbuffer\n *          2  :  length = Desired minimum size\n *\n *\n * Returns     :  0 on success, 1 on failure.\n *\n *********************************************************************/\nstatic int buf_extend(struct binbuffer *buf, size_t length)\n{\n   char *newbuf;\n\n   if (buf->offset + length > buf->size)\n   {\n      buf->size = ((buf->size + length + (size_t)1023) & ~(size_t)1023);\n      newbuf = (char *)realloc(buf->buffer, buf->size);\n\n      if (newbuf == NULL)\n      {\n         freez(buf->buffer);\n         return 1;\n      }\n      else\n      {\n         buf->buffer = newbuf;\n         return 0;\n      }\n   }\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  buf_copy\n *\n * Description :  Safely copies a given amount of bytes from one\n *                struct binbuffer to another, advancing the\n *                offsets appropriately.\n *\n * Parameters  :\n *          1  :  src = Pointer to the source binbuffer\n *          2  :  dst = Pointer to the destination binbuffer\n *          3  :  length = Number of bytes to be copied\n *\n * Returns     :  0 on success, 1 on failure.\n *\n *********************************************************************/\nstatic int buf_copy(struct binbuffer *src, struct binbuffer *dst, size_t length)\n{\n\n   /*\n    * Sanity check: Can't copy more data than we have\n    */\n   if (src->offset + length > src->size)\n   {\n      return 1;\n   }\n\n   /*\n    * Ensure that dst can hold the new data\n    */\n   if (buf_extend(dst, length))\n   {\n      return 1;\n   }\n\n   /*\n    * Now that it's safe, memcpy() the desired amount of\n    * data from src to dst and adjust the offsets\n    */\n   memcpy(dst->buffer + dst->offset, src->buffer + src->offset, length);\n   src->offset += length;\n   dst->offset += length;\n\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  buf_getbyte\n *\n * Description :  Safely gets a byte from a given binbuffer at a\n *                given offset\n *\n * Parameters  :\n *          1  :  src = Pointer to the source binbuffer\n *          2  :  offset = Offset to the desired byte\n *\n * Returns     :  The byte on success, or 0 on failure\n *\n *********************************************************************/\nstatic unsigned char buf_getbyte(const struct binbuffer *src, size_t offset)\n{\n   if (src->offset + offset < src->size)\n   {\n      return (unsigned char)*(src->buffer + src->offset + offset);\n   }\n   else\n   {\n      return '\\0';\n   }\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  gif_skip_data_block\n *\n * Description :  Safely advances the offset of a given struct binbuffer\n *                that contains a GIF image and whose offset is\n *                positioned at the start of a data block, behind\n *                that block.\n *\n * Parameters  :\n *          1  :  buf = Pointer to the binbuffer\n *\n * Returns     :  0 on success, or 1 on failure\n *\n *********************************************************************/\nstatic int gif_skip_data_block(struct binbuffer *buf)\n{\n   unsigned char c;\n\n   /*\n    * Data blocks are sequences of chunks, which are headed\n    * by a one-byte length field, with the last chunk having\n    * zero length.\n    */\n   while((c = buf_getbyte(buf, 0)) != '\\0')\n   {\n      buf->offset += (size_t)c + 1;\n      if (buf->offset >= buf->size - 1)\n      {\n         return 1;\n      }\n   }\n   buf->offset++;\n\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  gif_extract_image\n *\n * Description :  Safely extracts an image data block from a given\n *                struct binbuffer that contains a GIF image and whose\n *                offset is positioned at the start of a data block\n *                into a given destination binbuffer.\n *\n * Parameters  :\n *          1  :  src = Pointer to the source binbuffer\n *          2  :  dst = Pointer to the destination binbuffer\n *\n * Returns     :  0 on success, or 1 on failure\n *\n *********************************************************************/\nstatic int gif_extract_image(struct binbuffer *src, struct binbuffer *dst)\n{\n   unsigned char c;\n\n   /*\n    * Remember the colormap flag and copy the image head\n    */\n   c = buf_getbyte(src, 9);\n   if (buf_copy(src, dst, 10))\n   {\n      return 1;\n   }\n\n   /*\n    * If the image has a local colormap, copy it.\n    */\n   if (c & 0x80)\n   {\n      int map_length = 3 * (1 << ((c & 0x07) + 1));\n      if (map_length <= 0)\n      {\n         log_error(LOG_LEVEL_DEANIMATE,\n            \"colormap length = %d (%c)?\", map_length, c);\n         return 1;\n      }\n      if (buf_copy(src, dst, (size_t)map_length))\n      {\n         return 1;\n      }\n   }\n   if (buf_copy(src, dst, 1)) return 1;\n\n   /*\n    * Copy the image chunk by chunk.\n    */\n   while((c = buf_getbyte(src, 0)) != '\\0')\n   {\n      if (buf_copy(src, dst, 1 + (size_t) c)) return 1;\n   }\n   if (buf_copy(src, dst, 1)) return 1;\n\n   /*\n    * Trim and rewind the dst buffer\n    */\n   if (NULL == (dst->buffer = (char *)realloc(dst->buffer, dst->offset))) return 1;\n   dst->size = dst->offset;\n   dst->offset = 0;\n\n   return(0);\n\n}\n\n/*********************************************************************\n *\n * Function    :  gif_deanimate\n *\n * Description :  Deanimate a given GIF image, i.e. given a GIF with\n *                an (optional) image block and an arbitrary number\n *                of image extension blocks, produce an output GIF with\n *                only one image block that contains the last image\n *                (extenstion) block of the original.\n *                Also strip Comments, Application extenstions, etc.\n *\n * Parameters  :\n *          1  :  src = Pointer to the source binbuffer\n *          2  :  dst = Pointer to the destination binbuffer\n *          3  :  get_first_image = Flag: If set, get the first image\n *                                        If unset (default), get the last\n *\n * Returns     :  0 on success, or 1 on failure\n *\n *********************************************************************/\nint gif_deanimate(struct binbuffer *src, struct binbuffer *dst, int get_first_image)\n{\n   unsigned char c;\n   struct binbuffer *image;\n\n   if (NULL == src || NULL == dst)\n   {\n      return 1;\n   }\n\n   c = buf_getbyte(src, 10);\n\n   /*\n    * Check & copy GIF header\n    */\n   if (strncmp(src->buffer, \"GIF89a\", 6) && strncmp(src->buffer, \"GIF87a\", 6))\n   {\n      return 1;\n   }\n   else\n   {\n      if (buf_copy(src, dst, 13))\n      {\n         return 1;\n      }\n   }\n\n   /*\n    * Look for global colormap and  copy if found.\n    */\n   if (c & 0x80)\n   {\n      int map_length = 3 * (1 << ((c & 0x07) + 1));\n      if (map_length <= 0)\n      {\n         log_error(LOG_LEVEL_DEANIMATE,\n            \"colormap length = %d (%c)?\", map_length, c);\n         return 1;\n      }\n      if (buf_copy(src, dst, (size_t)map_length))\n      {\n         return 1;\n      }\n   }\n\n   /*\n    * Reserve a buffer for the current image block\n    */\n   if (NULL == (image = (struct binbuffer *)zalloc(sizeof(*image))))\n   {\n      return 1;\n   }\n\n   /*\n    * Parse the GIF block by block and copy the relevant\n    * parts to dst\n    */\n   while(src->offset < src->size)\n   {\n      switch(buf_getbyte(src, 0))\n      {\n         /*\n          *  End-of-GIF Marker: Append current image and return\n          */\n      case 0x3b:\n         goto write;\n\n         /*\n          * Image block: Extract to current image buffer.\n          */\n      case 0x2c:\n         image->offset = 0;\n         if (gif_extract_image(src, image)) goto failed;\n         if (get_first_image) goto write;\n         continue;\n\n         /*\n          * Extension block: Look at next byte and decide\n          */\n      case 0x21:\n         switch (buf_getbyte(src, 1))\n         {\n            /*\n             * Image extension: Copy extension  header and image\n             *                  to the current image buffer\n             */\n         case 0xf9:\n            image->offset = 0;\n            if (buf_copy(src, image, 8) || buf_getbyte(src, 0) != 0x2c) goto failed;\n            if (gif_extract_image(src, image)) goto failed;\n            if (get_first_image) goto write;\n            continue;\n\n            /*\n             * Application extension: Skip\n             */\n         case 0xff:\n            if ((src->offset += 14) >= src->size || gif_skip_data_block(src)) goto failed;\n            continue;\n\n            /*\n             * Comment extension: Skip\n             */\n         case 0xfe:\n            if ((src->offset += 2) >= src->size || gif_skip_data_block(src)) goto failed;\n            continue;\n\n            /*\n             * Plain text extension: Skip\n             */\n         case 0x01:\n            if ((src->offset += 15) >= src->size || gif_skip_data_block(src)) goto failed;\n            continue;\n\n            /*\n             * Ooops, what type of extension is that?\n             */\n         default:\n            goto failed;\n\n         }\n\n         /*\n          * Ooops, what type of block is that?\n          */\n      default:\n         goto failed;\n\n      }\n   } /* -END- while src */\n\n   /*\n    * Either we got here by goto, or because the GIF is\n    * bogus and EOF was reached before an end-of-gif marker\n    * was found.\n    */\n\nfailed:\n   binbuf_free(image);\n   return 1;\n\n   /*\n    * Append the current image to dst and return\n    */\n\nwrite:\n   if (buf_copy(image, dst, image->size)) goto failed;\n   if (buf_extend(dst, 1)) goto failed;\n   *(dst->buffer + dst->offset++) = 0x3b;\n   binbuf_free(image);\n   return 0;\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/deanimate.h",
    "content": "#ifndef DEANIMATE_H_INCLUDED\n#define DEANIMATE_H_INCLUDED\n#define DEANIMATE_H_VERSION \"$Id: deanimate.h,v 1.15 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/deanimate.h,v $\n *\n * Purpose     :  Declares functions to manipulate binary images on the\n *                fly.  High-level functions include:\n *                  - Deanimation of GIF images\n *\n *                Functions declared include: gif_deanimate and buf_free.\n *\n *\n * Copyright   :  Written by and Copyright (C) 2001 - 2004 by the the\n *                SourceForge Privoxy team. http://www.privoxy.org/\n *\n *                Based on ideas from the Image::DeAnim Perl module by\n *                Ken MacFarlane, <ksm+cpan@universal.dca.net>\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n/*\n * A struct that holds a buffer, a read/write offset,\n * and the buffer's capacity.\n */\nstruct binbuffer\n{\n   char *buffer;\n   size_t offset;\n   size_t size;\n};\n\n/*\n * Function prototypes\n */\nextern int gif_deanimate(struct binbuffer *src, struct binbuffer *dst, int get_first_image);\nextern void binbuf_free(struct binbuffer *buf);\n\n/*\n * Revision control strings from this header and associated .c file\n */\nextern const char deanimate_rcs[];\nextern const char deanimate_h_rcs[];\n\n#endif /* ndef DEANIMATE_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/encode.c",
    "content": "const char encode_rcs[] = \"$Id: encode.c,v 1.29 2013/02/19 11:14:05 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/encode.c,v $\n *\n * Purpose     :  Functions to encode and decode URLs, and also to\n *                encode cookies and HTML text.\n *\n * Copyright   :  Written by and Copyright (C) 2001 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <assert.h>\n\n#include \"miscutil.h\"\n#include \"encode.h\"\n\nconst char encode_h_rcs[] = ENCODE_H_VERSION;\n\n/* Maps special characters in a URL to their equivalent % codes. */\nstatic const char url_code_map[256][4] = {\n   \"\",    \"%01\", \"%02\", \"%03\", \"%04\", \"%05\", \"%06\", \"%07\", \"%08\", \"%09\",\n   \"%0A\", \"%0B\", \"%0C\", \"%0D\", \"%0E\", \"%0F\", \"%10\", \"%11\", \"%12\", \"%13\",\n   \"%14\", \"%15\", \"%16\", \"%17\", \"%18\", \"%19\", \"%1A\", \"%1B\", \"%1C\", \"%1D\",\n   \"%1E\", \"%1F\", \"%20\", \"%21\", \"%22\", \"%23\", \"%24\", \"%25\", \"%26\", \"%27\",\n   \"%28\", \"%29\", \"\",    \"%2B\", \"%2C\", \"\",    \"\",    \"%2F\", \"\",    \"\",\n   \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"%3A\", \"%3B\",\n   \"%3C\", \"%3D\", \"%3E\", \"%3F\", \"\",    \"\",    \"\",    \"\",    \"\",    \"\",\n   \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",\n   \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",\n   \"\",    \"%5B\", \"%5C\", \"%5D\", \"%5E\", \"\",    \"%60\", \"\",    \"\",    \"\",\n   \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",\n   \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",    \"\",\n   \"\",    \"\",    \"\",    \"%7B\", \"%7C\", \"%7D\", \"%7E\", \"%7F\", \"%80\", \"%81\",\n   \"%82\", \"%83\", \"%84\", \"%85\", \"%86\", \"%87\", \"%88\", \"%89\", \"%8A\", \"%8B\",\n   \"%8C\", \"%8D\", \"%8E\", \"%8F\", \"%90\", \"%91\", \"%92\", \"%93\", \"%94\", \"%95\",\n   \"%96\", \"%97\", \"%98\", \"%99\", \"%9A\", \"%9B\", \"%9C\", \"%9D\", \"%9E\", \"%9F\",\n   \"%A0\", \"%A1\", \"%A2\", \"%A3\", \"%A4\", \"%A5\", \"%A6\", \"%A7\", \"%A8\", \"%A9\",\n   \"%AA\", \"%AB\", \"%AC\", \"%AD\", \"%AE\", \"%AF\", \"%B0\", \"%B1\", \"%B2\", \"%B3\",\n   \"%B4\", \"%B5\", \"%B6\", \"%B7\", \"%B8\", \"%B9\", \"%BA\", \"%BB\", \"%BC\", \"%BD\",\n   \"%BE\", \"%BF\", \"%C0\", \"%C1\", \"%C2\", \"%C3\", \"%C4\", \"%C5\", \"%C6\", \"%C7\",\n   \"%C8\", \"%C9\", \"%CA\", \"%CB\", \"%CC\", \"%CD\", \"%CE\", \"%CF\", \"%D0\", \"%D1\",\n   \"%D2\", \"%D3\", \"%D4\", \"%D5\", \"%D6\", \"%D7\", \"%D8\", \"%D9\", \"%DA\", \"%DB\",\n   \"%DC\", \"%DD\", \"%DE\", \"%DF\", \"%E0\", \"%E1\", \"%E2\", \"%E3\", \"%E4\", \"%E5\",\n   \"%E6\", \"%E7\", \"%E8\", \"%E9\", \"%EA\", \"%EB\", \"%EC\", \"%ED\", \"%EE\", \"%EF\",\n   \"%F0\", \"%F1\", \"%F2\", \"%F3\", \"%F4\", \"%F5\", \"%F6\", \"%F7\", \"%F8\", \"%F9\",\n   \"%FA\", \"%FB\", \"%FC\", \"%FD\", \"%FE\", \"%FF\"\n};\n\n/* Maps special characters in HTML to their equivalent entities. */\nstatic const char * const html_code_map[256] = {\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL,\"&quot;\",NULL,NULL,NULL,\"&amp;\",\"&#39;\",\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   \"&lt;\",NULL,\"&gt;\",NULL,NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL, NULL\n};\n\n\n/*********************************************************************\n *\n * Function    :  html_encode\n *\n * Description :  Encodes a string so it's not interpreted as\n *                containing HTML tags or entities.\n *                Replaces <, >, &, and \" with the appropriate HTML\n *                entities.\n *\n * Parameters  :\n *          1  :  s = String to encode.  Null-terminated.\n *\n * Returns     :  Encoded string, newly allocated on the heap.\n *                Caller is responsible for freeing it with free().\n *                If s is NULL, or on out-of memory, returns NULL.\n *\n *********************************************************************/\nchar * html_encode(const char *s)\n{\n   char * buf;\n   size_t buf_size;\n\n   if (s == NULL)\n   {\n      return NULL;\n   }\n\n   /* each input char can expand to at most 6 chars */\n   buf_size = (strlen(s) * 6) + 1;\n   buf = (char *) malloc(buf_size);\n\n   if (buf)\n   {\n      char c;\n      char * p = buf;\n      while ((c = *s++) != '\\0')\n      {\n         const char * replace_with = html_code_map[(unsigned char) c];\n         if (replace_with != NULL)\n         {\n            const size_t bytes_written = (size_t)(p - buf);\n            assert(bytes_written < buf_size);\n            p += strlcpy(p, replace_with, buf_size - bytes_written);\n         }\n         else\n         {\n            *p++ = c;\n         }\n      }\n\n      *p = '\\0';\n\n      assert(strlen(buf) < buf_size);\n   }\n\n   return(buf);\n}\n\n\n/*********************************************************************\n *\n * Function    :  html_encode_and_free_original\n *\n * Description :  Encodes a string so it's not interpreted as\n *                containing HTML tags or entities.\n *                Replaces <, >, &, and \" with the appropriate HTML\n *                entities.  Free()s original string.\n *                If original string is NULL, simply returns NULL.\n *\n * Parameters  :\n *          1  :  s = String to encode.  Null-terminated.\n *\n * Returns     :  Encoded string, newly allocated on the heap.\n *                Caller is responsible for freeing it with free().\n *                If s is NULL, or on out-of memory, returns NULL.\n *\n *********************************************************************/\nchar * html_encode_and_free_original(char *s)\n{\n   char * result;\n\n   if (s == NULL)\n   {\n      return NULL;\n   }\n\n   result = html_encode(s);\n   free(s);\n\n   return result;\n}\n\n\n/*********************************************************************\n *\n * Function    :  url_encode\n *\n * Description :  Encodes a string so it can be used in a URL\n *                query string.  Replaces special characters with\n *                the appropriate %xx codes.\n *\n *                XXX: url_query_encode() would be a more fitting\n *                     name.\n *\n * Parameters  :\n *          1  :  s = String to encode.  Null-terminated.\n *\n * Returns     :  Encoded string, newly allocated on the heap.\n *                Caller is responsible for freeing it with free().\n *                If s is NULL, or on out-of memory, returns NULL.\n *\n *********************************************************************/\nchar * url_encode(const char *s)\n{\n   char * buf;\n   size_t buf_size;\n\n   if (s == NULL)\n   {\n      return NULL;\n   }\n\n   /* each input char can expand to at most 3 chars */\n   buf_size = (strlen(s) * 3) + 1;\n   buf = (char *) malloc(buf_size);\n\n   if (buf)\n   {\n      char c;\n      char * p = buf;\n      while((c = *s++) != '\\0')\n      {\n         const char *replace_with = url_code_map[(unsigned char) c];\n         if (*replace_with != '\\0')\n         {\n            const size_t bytes_written = (size_t)(p - buf);\n            assert(bytes_written < buf_size);\n            p += strlcpy(p, replace_with, buf_size - bytes_written);\n         }\n         else\n         {\n            *p++ = c;\n         }\n      }\n\n      *p = '\\0';\n\n      assert(strlen(buf) < buf_size);\n   }\n\n   return(buf);\n}\n\n\n/*********************************************************************\n *\n * Function    :  xdtoi\n *\n * Description :  Converts a single hex digit to an integer.\n *\n * Parameters  :\n *          1  :  d = in the range of ['0'..'9', 'A'..'F', 'a'..'f']\n *\n * Returns     :  The integer value, or -1 for non-hex characters.\n *\n *********************************************************************/\nstatic int xdtoi(const int d)\n{\n   if ((d >= '0') && (d <= '9'))\n   {\n      return(d - '0');\n   }\n   else if ((d >= 'a') && (d <= 'f'))\n   {\n      return(d - 'a' + 10);\n   }\n   else if ((d >= 'A') && (d <= 'F'))\n   {\n      return(d - 'A' + 10);\n   }\n   else\n   {\n      return(-1);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  xtoi\n *\n * Description :  Hex string to integer conversion.\n *\n * Parameters  :\n *          1  :  s = a 2 digit hex string (e.g. \"1f\").  Only the\n *                    first two characters will be looked at.\n *\n * Returns     :  The integer value, or 0 for non-hex strings.\n *\n *********************************************************************/\nint xtoi(const char *s)\n{\n   int d1;\n\n   d1 = xdtoi(*s);\n   if (d1 >= 0)\n   {\n      int d2 = xdtoi(*(s+1));\n      if (d2 >= 0)\n      {\n         return (d1 << 4) + d2;\n      }\n   }\n\n   return 0;\n}\n\n\n/*********************************************************************\n *\n * Function    :  url_decode\n *\n * Description :  Decodes a URL query string, replacing %xx codes\n *                with their decoded form.\n *\n * Parameters  :\n *          1  :  s = String to decode.  Null-terminated.\n *\n * Returns     :  Decoded string, newly allocated on the heap.\n *                Caller is responsible for freeing it with free().\n *\n *********************************************************************/\nchar *url_decode(const char * s)\n{\n   char *buf = malloc(strlen(s) + 1);\n   char *q = buf;\n\n   if (buf)\n   {\n      while (*s)\n      {\n         switch (*s)\n         {\n            case '+':\n               s++;\n               *q++ = ' ';\n               break;\n\n            case '%':\n               if ((*q = (char)xtoi(s + 1)) != '\\0')\n               {\n                  s += 3;\n                  q++;\n               }\n               else\n               {\n                  /* malformed, just use it */\n                  *q++ = *s++;\n               }\n               break;\n\n            default:\n               *q++ = *s++;\n               break;\n         }\n      }\n      *q = '\\0';\n   }\n\n   return(buf);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  percent_encode_url\n *\n * Description :  Percent-encodes a string so it no longer contains\n *                any characters that aren't valid in an URL according\n *                to RFC 3986.\n *\n *                XXX: Do not confuse with encode_url()\n *\n * Parameters  :\n *          1  :  s = String to encode.  Null-terminated.\n *\n * Returns     :  Encoded string, newly allocated on the heap.\n *                Caller is responsible for freeing it with free().\n *                If s is NULL, or on out-of memory, returns NULL.\n *\n *********************************************************************/\nchar *percent_encode_url(const char *s)\n{\n   static const char allowed_characters[128] = {\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '!',  '\\0', '#',  '$',  '%',  '&',  '\\'',\n      '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',  '0',  '1',\n      '2',  '3',  '4',  '5',  '6',  '7',  '8',  '9',  ':',  ';',\n      '\\0', '=',  '\\0', '?',  '@',  'A',  'B',  'C',  'D',  'E',\n      'F',  'G',  'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',\n      'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',  'X',  'Y',\n      'Z',  '[',  '\\0', ']',  '\\0', '_',  '\\0', 'a',  'b',  'c',\n      'd',  'e',  'f',  'g',  'h',  'i',  'j',  'k',  'l',  'm',\n      'n',  'o',  'p',  'q',  'r',  's',  't',  'u',  'v',  'w',\n      'x',  'y',  'z',  '\\0', '\\0', '\\0', '~',  '\\0'\n   };\n   char *buf;\n   size_t buf_size;\n\n   assert(s != NULL);\n\n   /* Each input char can expand to at most 3 chars. */\n   buf_size = (strlen(s) * 3) + 1;\n   buf = (char *)malloc(buf_size);\n\n   if (buf != NULL)\n   {\n      char c;\n      char *p = buf;\n      while ((c = *s++) != '\\0')\n      {\n         const unsigned int i = (unsigned char)c;\n         if (i >= sizeof(allowed_characters) || '\\0' == allowed_characters[i])\n         {\n            const char *replace_with = url_code_map[i];\n            assert(*replace_with != '\\0');\n            if (*replace_with != '\\0')\n            {\n               const size_t bytes_written = (size_t)(p - buf);\n               assert(bytes_written < buf_size);\n               p += strlcpy(p, replace_with, buf_size - bytes_written);\n            }\n         }\n         else\n         {\n            *p++ = c;\n         }\n      }\n      *p = '\\0';\n\n      assert(strlen(buf) < buf_size);\n   }\n\n   return(buf);\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/encode.h",
    "content": "#ifndef ENCODE_H_INCLUDED\n#define ENCODE_H_INCLUDED\n#define ENCODE_H_VERSION \"$Id: encode.h,v 1.13 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/encode.h,v $\n *\n * Purpose     :  Functions to encode and decode URLs, and also to\n *                encode cookies and HTML text.\n *\n * Copyright   :  Written by and Copyright (C) 2001 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\nextern char * html_encode(const char *s);\nextern char * url_encode(const char *s);\nextern char * url_decode(const char *str);\nextern int    xtoi(const char *s);\nextern char * html_encode_and_free_original(char *s);\nextern char * percent_encode_url(const char *s);\n\n/* Revision control strings from this header and associated .c file */\nextern const char encode_rcs[];\nextern const char encode_h_rcs[];\n\n#endif /* ndef ENCODE_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/errlog.h",
    "content": "#ifndef ERRLOG_H_INCLUDED\n#define ERRLOG_H_INCLUDED\n#define ERRLOG_H_VERSION \"$Id: errlog.h,v 1.30 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/errlog.h,v $\n *\n * Purpose     :  Log errors to a designated destination in an elegant,\n *                printf-like fashion.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2009 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n/* Debug level for errors */\n\n/* XXX: Should be renamed. */\n#define LOG_LEVEL_GPC        0x0001\n#define LOG_LEVEL_CONNECT    0x0002\n#define LOG_LEVEL_IO         0x0004\n#define LOG_LEVEL_HEADER     0x0008\n#define LOG_LEVEL_WRITING    0x0010\n#ifdef FEATURE_FORCE_LOAD\n#define LOG_LEVEL_FORCE      0x0020\n#endif /* def FEATURE_FORCE_LOAD */\n#define LOG_LEVEL_RE_FILTER  0x0040\n#define LOG_LEVEL_REDIRECTS  0x0080\n#define LOG_LEVEL_DEANIMATE  0x0100\n#define LOG_LEVEL_CLF        0x0200 /* Common Log File format */\n#define LOG_LEVEL_CRUNCH     0x0400\n#define LOG_LEVEL_CGI        0x0800 /* CGI / templates */\n#define LOG_LEVEL_RECEIVED   0x8000\n#define LOG_LEVEL_ACTIONS   0x10000\n\n/* Following are always on: */\n#define LOG_LEVEL_INFO    0x1000\n#define LOG_LEVEL_ERROR   0x2000\n#define LOG_LEVEL_FATAL   0x4000 /* Exits after writing log */\n\nextern void init_error_log(const char *prog_name, const char *logfname);\nextern void set_debug_level(int debuglevel);\nextern int  debug_level_is_enabled(int debuglevel);\nextern void disable_logging(void);\nextern void init_log_module(void);\nextern void show_version(const char *prog_name);\nextern void log_error(int loglevel, const char *fmt, ...);\nextern const char *jb_err_to_string(int jb_error);\n\n/* Revision control strings from this header and associated .c file */\nextern const char errlog_rcs[];\nextern const char errlog_h_rcs[];\n\n#endif /* ndef ERRLOG_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/errlog.m",
    "content": "const char errlog_rcs[] = \"$Id: errlog.c,v 1.124 2016/01/21 20:53:01 diem Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/errlog.c,v $\n *\n * Purpose     :  Log errors to a designated destination in an elegant,\n *                printf-like fashion.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <string.h>\n#include <ctype.h>\n\n#include \"sp_config.h\"\n#include \"miscutil.h\"\n\n/* For gettimeofday() */\n#include <sys/time.h>\n\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif /* !defined(_WIN32) && !defined(__OS2__) */\n\n#include <errno.h>\n#include <assert.h>\n\n#ifdef _WIN32\n#ifndef STRICT\n#define STRICT\n#endif\n#include <windows.h>\n#ifndef _WIN_CONSOLE\n#include \"w32log.h\"\n#endif /* ndef _WIN_CONSOLE */\n#endif /* def _WIN32 */\n#ifdef _MSC_VER\n#define inline __inline\n#endif /* def _MSC_VER */\n\n#ifdef __OS2__\n#include <sys/socket.h> /* For sock_errno */\n#define INCL_DOS\n#include <os2.h>\n#endif\n\n#include \"errlog.h\"\n#include \"project.h\"\n#include \"jcc.h\"\n#ifdef FEATURE_EXTERNAL_FILTERS\n#include \"jbsockets.h\"\n#endif\n\nconst char errlog_h_rcs[] = ERRLOG_H_VERSION;\n\n\n/*\n * LOG_LEVEL_FATAL cannot be turned off.  (There are\n * some exceptional situations where we need to get a\n * message to the user).\n */\n#define LOG_LEVEL_MINIMUM  LOG_LEVEL_FATAL\n\n/* where to log (default: stderr) */\nstatic FILE *logfp = NULL;\n\n/* logging detail level. XXX: stupid name. */\nstatic int debug = (LOG_LEVEL_FATAL | LOG_LEVEL_ERROR);\n\n/* static functions */\nstatic void fatal_error(const char * error_message);\n#ifdef _WIN32\nstatic char *w32_socket_strerr(int errcode, char *tmp_buf);\n#endif\n#ifdef __OS2__\nstatic char *os2_socket_strerr(int errcode, char *tmp_buf);\n#endif\n\n#ifdef MUTEX_LOCKS_AVAILABLE\nstatic inline void lock_logfile(void)\n{\n   privoxy_mutex_lock(&log_mutex);\n}\nstatic inline void unlock_logfile(void)\n{\n   privoxy_mutex_unlock(&log_mutex);\n}\nstatic inline void lock_loginit(void)\n{\n   privoxy_mutex_lock(&log_init_mutex);\n}\nstatic inline void unlock_loginit(void)\n{\n   privoxy_mutex_unlock(&log_init_mutex);\n}\n#else /* ! MUTEX_LOCKS_AVAILABLE */\n/*\n * FIXME we need a cross-platform locking mechanism.\n * The locking/unlocking functions below should be\n * fleshed out for non-pthread implementations.\n */\nstatic inline void lock_logfile() {}\nstatic inline void unlock_logfile() {}\nstatic inline void lock_loginit() {}\nstatic inline void unlock_loginit() {}\n#endif\n\n/*********************************************************************\n *\n * Function    :  fatal_error\n *\n * Description :  Displays a fatal error to standard error (or, on\n *                a WIN32 GUI, to a dialog box), and exits Privoxy\n *                with status code 1.\n *\n * Parameters  :\n *          1  :  error_message = The error message to display.\n *\n * Returns     :  Does not return.\n *\n *********************************************************************/\nstatic void fatal_error(const char *error_message)\n{\n   if (logfp != NULL)\n   {\n      fputs(error_message, logfp);\n   }\n\n#if defined(_WIN32) && !defined(_WIN_CONSOLE)\n   {\n      /* Skip timestamp and thread id for the message box. */\n      const char *box_message = strstr(error_message, \"Fatal error\");\n      if (NULL == box_message)\n      {\n         /* Shouldn't happen but ... */\n         box_message = error_message;\n      }\n      MessageBox(g_hwndLogFrame, box_message, \"Privoxy Error\",\n         MB_OK | MB_ICONERROR | MB_TASKMODAL | MB_SETFOREGROUND | MB_TOPMOST);\n\n      /* Cleanup - remove taskbar icon etc. */\n      TermLogWindow();\n   }\n#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */\n\n#if defined(unix)\n   if (pidfile)\n   {\n      unlink(pidfile);\n   }\n#endif /* unix */\n\n   exit(1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  show_version\n *\n * Description :  Logs the Privoxy version and the program name.\n *\n * Parameters  :\n *          1  :  prog_name = The program name.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nvoid show_version(const char *prog_name)\n{\n   log_error(LOG_LEVEL_INFO, \"Privoxy version \" VERSION);\n   if (prog_name != NULL)\n   {\n      log_error(LOG_LEVEL_INFO, \"Program name: %s\", prog_name);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  init_log_module\n *\n * Description :  Initializes the logging module to log to stderr.\n *                Can only be called while stderr hasn't been closed\n *                yet and is only supposed to be called once.\n *\n * Parameters  :\n *          1  :  prog_name = The program name.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nvoid init_log_module(void)\n{\n   lock_logfile();\n   logfp = stderr;\n   unlock_logfile();\n   set_debug_level(debug);\n}\n\n\n/*********************************************************************\n *\n * Function    :  set_debug_level\n *\n * Description :  Sets the debug level to the provided value\n *                plus LOG_LEVEL_MINIMUM.\n *\n *                XXX: we should only use the LOG_LEVEL_MINIMUM\n *                until the first time the configuration file has\n *                been parsed.\n *\n * Parameters  :  1: debug_level = The debug level to set.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nvoid set_debug_level(int debug_level)\n{\n   debug = debug_level | LOG_LEVEL_MINIMUM;\n}\n\n\n/*********************************************************************\n *\n * Function    :  debug_level_is_enabled\n *\n * Description :  Checks if a certain debug level is enabled.\n *\n * Parameters  :  1: debug_level = The debug level to check.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nint debug_level_is_enabled(int debug_level)\n{\n   return (0 != (debug & debug_level));\n}\n\n\n/*********************************************************************\n *\n * Function    :  disable_logging\n *\n * Description :  Disables logging.\n *\n * Parameters  :  None.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nvoid disable_logging(void)\n{\n   if (logfp != NULL)\n   {\n      log_error(LOG_LEVEL_INFO,\n         \"No logfile configured. Please enable it before reporting any problems.\");\n      lock_logfile();\n      fclose(logfp);\n      logfp = NULL;\n      unlock_logfile();\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  init_error_log\n *\n * Description :  Initializes the logging module to log to a file.\n *\n *                XXX: should be renamed.\n *\n * Parameters  :\n *          1  :  prog_name  = The program name.\n *          2  :  logfname   = The logfile to (re)open.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid init_error_log(const char *prog_name, const char *logfname)\n{\n   FILE *fp;\n\n   assert(NULL != logfname);\n\n   lock_loginit();\n\n   if ((logfp != NULL) && (logfp != stderr))\n   {\n      log_error(LOG_LEVEL_INFO, \"(Re-)Opening logfile \\'%s\\'\", logfname);\n   }\n\n   /* set the designated log file */\n   fp = fopen(logfname, \"a\");\n   if ((NULL == fp) && (logfp != NULL))\n   {\n      /*\n       * Some platforms (like OS/2) don't allow us to open\n       * the same file twice, therefore we give it another\n       * shot after closing the old file descriptor first.\n       *\n       * We don't do it right away because it prevents us\n       * from logging the \"can't open logfile\" message to\n       * the old logfile.\n       *\n       * XXX: this is a lame workaround and once the next\n       * release is out we should stop bothering reopening\n       * the logfile unless we have to.\n       *\n       * Currently we reopen it every time the config file\n       * has been reloaded, but actually we only have to\n       * reopen it if the file name changed or if the\n       * configuration reload was caused by a SIGHUP.\n       */\n      log_error(LOG_LEVEL_INFO, \"Failed to reopen logfile: \\'%s\\'. \"\n         \"Retrying after closing the old file descriptor first. If that \"\n         \"doesn't work, Privoxy will exit without being able to log a message.\",\n         logfname);\n      lock_logfile();\n      fclose(logfp);\n      logfp = NULL;\n      unlock_logfile();\n      fp = fopen(logfname, \"a\");\n   }\n\n   if (NULL == fp)\n   {\n      log_error(LOG_LEVEL_FATAL, \"init_error_log(): can't open logfile: \\'%s\\'\", logfname);\n   }\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n   mark_socket_for_close_on_execute(3);\n#endif\n\n   /* set logging to be completely unbuffered */\n   setbuf(fp, NULL);\n\n   lock_logfile();\n   if (logfp != NULL)\n   {\n      fclose(logfp);\n   }\n   logfp = fp;\n   unlock_logfile();\n\n   show_version(prog_name);\n\n   unlock_loginit();\n\n} /* init_error_log */\n\n\n/*********************************************************************\n *\n * Function    :  get_thread_id\n *\n * Description :  Returns a number that is different for each thread.\n *\n *                XXX: Should be moved elsewhere (miscutil.c?)\n *\n * Parameters  :  None\n *\n * Returns     :  thread_id\n *\n *********************************************************************/\nstatic long get_thread_id(void)\n{\n   long this_thread;\n\n#ifdef __OS2__\n   PTIB     ptib;\n   APIRET   ulrc; /* XXX: I have no clue what this does */\n#endif /* __OS2__ */\n\n   /* FIXME get current thread id */\n#ifdef FEATURE_PTHREAD\n   this_thread = (long)pthread_self();\n#ifdef __MACH__\n   /*\n    * Mac OSX (and perhaps other Mach instances) doesn't have a unique\n    * value at the lowest order 4 bytes of pthread_self()'s return value, a pthread_t.\n    * pthread_t is supposed to be opaque... however it's fairly random.\n    * The following will address these two issues to make it mostly presentable.\n    */\n   this_thread = labs(this_thread % 1000);\n#endif /* def __MACH__ */\n#elif defined(_WIN32)\n   this_thread = GetCurrentThreadId();\n#elif defined(__OS2__)\n   ulrc = DosGetInfoBlocks(&ptib, NULL);\n   if (ulrc == 0)\n     this_thread = ptib -> tib_ptib2 -> tib2_ultid;\n#else\n   /* Forking instead of threading. */\n   this_thread = 1;\n#endif /* def FEATURE_PTHREAD */\n\n   return this_thread;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_log_timestamp\n *\n * Description :  Generates the time stamp for the log message prefix.\n *\n * Parameters  :\n *          1  :  buffer = Storage buffer\n *          2  :  buffer_size = Size of storage buffer\n *\n * Returns     :  Number of written characters or 0 for error.\n *\n *********************************************************************/\nstatic inline size_t get_log_timestamp(char *buffer, size_t buffer_size)\n{\n   size_t length;\n   time_t now;\n   struct tm tm_now;\n   struct timeval tv_now; /* XXX: stupid name */\n   long msecs;\n   int msecs_length = 0;\n\n   gettimeofday(&tv_now, NULL);\n   msecs = tv_now.tv_usec / 1000;\n   now = tv_now.tv_sec;\n\n#ifdef HAVE_LOCALTIME_R\n   tm_now = *localtime_r(&now, &tm_now);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&localtime_mutex);\n   tm_now = *localtime(&now);\n   privoxy_mutex_unlock(&localtime_mutex);\n#else\n   tm_now = *localtime(&now);\n#endif\n\n   length = strftime(buffer, buffer_size, \"%Y-%m-%d %H:%M:%S\", &tm_now);\n   if (length > (size_t)0)\n   {\n      msecs_length = snprintf(buffer+length, buffer_size - length, \".%.3ld\", msecs);\n   }\n   if (msecs_length > 0)\n   {\n      length += (size_t)msecs_length;\n   }\n   else\n   {\n      length = 0;\n   }\n\n   return length;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_clf_timestamp\n *\n * Description :  Generates a Common Log Format time string.\n *\n * Parameters  :\n *          1  :  buffer = Storage buffer\n *          2  :  buffer_size = Size of storage buffer\n *\n * Returns     :  Number of written characters or 0 for error.\n *\n *********************************************************************/\nstatic inline size_t get_clf_timestamp(char *buffer, size_t buffer_size)\n{\n   /*\n    * Complex because not all OSs have tm_gmtoff or\n    * the %z field in strftime()\n    */\n   time_t now;\n   struct tm *tm_now;\n   struct tm gmt;\n#ifdef HAVE_LOCALTIME_R\n   struct tm dummy;\n#endif\n   int days, hrs, mins;\n   size_t length;\n   int tz_length = 0;\n\n   time (&now);\n#ifdef HAVE_GMTIME_R\n   gmt = *gmtime_r(&now, &gmt);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&gmtime_mutex);\n   gmt = *gmtime(&now);\n   privoxy_mutex_unlock(&gmtime_mutex);\n#else\n   gmt = *gmtime(&now);\n#endif\n#ifdef HAVE_LOCALTIME_R\n   tm_now = localtime_r(&now, &dummy);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&localtime_mutex);\n   tm_now = localtime(&now);\n   privoxy_mutex_unlock(&localtime_mutex);\n#else\n   tm_now = localtime(&now);\n#endif\n   days = tm_now->tm_yday - gmt.tm_yday;\n   hrs = ((days < -1 ? 24 : 1 < days ? -24 : days * 24) + tm_now->tm_hour - gmt.tm_hour);\n   mins = hrs * 60 + tm_now->tm_min - gmt.tm_min;\n\n   length = strftime(buffer, buffer_size, \"%d/%b/%Y:%H:%M:%S \", tm_now);\n\n   if (length > (size_t)0)\n   {\n      tz_length = snprintf(buffer+length, buffer_size-length,\n                     \"%+03d%02d\", mins / 60, abs(mins) % 60);\n   }\n   if (tz_length > 0)\n   {\n      length += (size_t)tz_length;\n   }\n   else\n   {\n      length = 0;\n   }\n\n   return length;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_log_level_string\n *\n * Description :  Translates a numerical loglevel into a string.\n *\n * Parameters  :\n *          1  :  loglevel = LOG_LEVEL_FOO\n *\n * Returns     :  Log level string.\n *\n *********************************************************************/\nstatic inline const char *get_log_level_string(int loglevel)\n{\n   char *log_level_string = NULL;\n\n   assert(0 < loglevel);\n\n   switch (loglevel)\n   {\n      case LOG_LEVEL_ERROR:\n         log_level_string = \"Error\";\n         break;\n      case LOG_LEVEL_FATAL:\n         log_level_string = \"Fatal error\";\n         break;\n      case LOG_LEVEL_GPC:\n         log_level_string = \"Request\";\n         break;\n      case LOG_LEVEL_CONNECT:\n         log_level_string = \"Connect\";\n         break;\n      case LOG_LEVEL_WRITING:\n         log_level_string = \"Writing\";\n         break;\n      case LOG_LEVEL_RECEIVED:\n         log_level_string = \"Received\";\n         break;\n      case LOG_LEVEL_HEADER:\n         log_level_string = \"Header\";\n         break;\n      case LOG_LEVEL_INFO:\n         log_level_string = \"Info\";\n         break;\n      case LOG_LEVEL_RE_FILTER:\n         log_level_string = \"Re-Filter\";\n         break;\n#ifdef FEATURE_FORCE_LOAD\n      case LOG_LEVEL_FORCE:\n         log_level_string = \"Force\";\n         break;\n#endif /* def FEATURE_FORCE_LOAD */\n      case LOG_LEVEL_REDIRECTS:\n         log_level_string = \"Redirect\";\n         break;\n      case LOG_LEVEL_DEANIMATE:\n         log_level_string = \"Gif-Deanimate\";\n         break;\n      case LOG_LEVEL_CRUNCH:\n         log_level_string = \"Crunch\";\n         break;\n      case LOG_LEVEL_CGI:\n         log_level_string = \"CGI\";\n         break;\n      case LOG_LEVEL_ACTIONS:\n         log_level_string = \"Actions\";\n         break;\n      default:\n         log_level_string = \"Unknown log level\";\n         break;\n   }\n   assert(NULL != log_level_string);\n\n   return log_level_string;\n}\n\n\n#define LOG_BUFFER_SIZE 1023\n/*********************************************************************\n *\n * Function    :  log_error\n *\n * Description :  This is the error-reporting and logging function.\n *\n * Parameters  :\n *          1  :  loglevel  = the type of message to be logged\n *          2  :  fmt       = the main string we want logged, printf-like\n *          3  :  ...       = arguments to be inserted in fmt (printf-like).\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid log_error(int loglevel, const char *fmt, ...)\n{\n   va_list ap;\n   char *outbuf = NULL;\n   static char *outbuf_save = NULL;\n   char tempbuf[LOG_BUFFER_SIZE];\n   size_t length = 0;\n   const char * src = fmt;\n   long thread_id;\n   char timestamp[30];\n   /*\n    * XXX: Make this a config option,\n    * why else do we allocate instead of using\n    * an array?\n    */\n   size_t log_buffer_size = LOG_BUFFER_SIZE;\n\n#if defined(_WIN32) && !defined(_WIN_CONSOLE)\n   /*\n    * Irrespective of debug setting, a GET/POST/CONNECT makes\n    * the taskbar icon animate.  (There is an option to disable\n    * this but checking that is handled inside LogShowActivity()).\n    */\n   if ((loglevel == LOG_LEVEL_GPC) || (loglevel == LOG_LEVEL_CRUNCH))\n   {\n      LogShowActivity();\n   }\n#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */\n\n   /*\n    * verify that the loglevel applies to current\n    * settings and that logging is enabled.\n    * Bail out otherwise.\n    */\n   if ((0 == (loglevel & debug))\n#ifndef _WIN32\n      || (logfp == NULL)\n#endif\n      )\n   {\n      if (loglevel == LOG_LEVEL_FATAL)\n      {\n         fatal_error(\"Fatal error. You're not supposed to\"\n            \"see this message. Please file a bug report.\");\n      }\n      return;\n   }\n\n   thread_id = get_thread_id();\n   get_log_timestamp(timestamp, sizeof(timestamp));\n\n   /* protect the whole function because of the static buffer (outbuf) */\n   lock_logfile();\n\n   if (NULL == outbuf_save)\n   {\n      outbuf_save = (char*)zalloc(log_buffer_size + 1); /* +1 for paranoia */\n      if (NULL == outbuf_save)\n      {\n         snprintf(tempbuf, sizeof(tempbuf),\n            \"%s %08lx Fatal error: Out of memory in log_error().\",\n            timestamp, thread_id);\n         fatal_error(tempbuf); /* Exit */\n         return;\n      }\n   }\n   outbuf = outbuf_save;\n\n   /*\n    * Memsetting the whole buffer to zero (in theory)\n    * makes things easier later on.\n    */\n   memset(outbuf, 0, log_buffer_size);\n\n   /* Add prefix for everything but Common Log Format messages */\n   if (loglevel != LOG_LEVEL_CLF)\n   {\n      length = (size_t)snprintf(outbuf, log_buffer_size, \"%s %08lx %s: \",\n         timestamp, thread_id, get_log_level_string(loglevel));\n   }\n\n   /* get ready to scan var. args. */\n   va_start(ap, fmt);\n\n   /* build formatted message from fmt and var-args */\n   while ((*src) && (length < log_buffer_size-2))\n   {\n      const char *sval = NULL; /* %N string  */\n      int ival;                /* %N string length or an error code */\n      unsigned uval;           /* %u value */\n      long lval;               /* %l value */\n      unsigned long ulval;     /* %ul value */\n      char ch;\n      const char *format_string = tempbuf;\n\n      ch = *src++;\n      if (ch != '%')\n      {\n         outbuf[length++] = ch;\n         /*\n          * XXX: Only necessary on platforms where multiple threads\n          * can write to the buffer at the same time because we\n          * don't support mutexes (OS/2 for example).\n          */\n         outbuf[length] = '\\0';\n         continue;\n      }\n      outbuf[length] = '\\0';\n      ch = *src++;\n      switch (ch) {\n         case '%':\n            tempbuf[0] = '%';\n            tempbuf[1] = '\\0';\n            break;\n         case 'd':\n            ival = va_arg(ap, int);\n            snprintf(tempbuf, sizeof(tempbuf), \"%d\", ival);\n            break;\n         case 'u':\n            uval = va_arg(ap, unsigned);\n            snprintf(tempbuf, sizeof(tempbuf), \"%u\", uval);\n            break;\n         case 'l':\n            /* this is a modifier that must be followed by u, lu, or d */\n            ch = *src++;\n            if (ch == 'd')\n            {\n               lval = va_arg(ap, long);\n               snprintf(tempbuf, sizeof(tempbuf), \"%ld\", lval);\n            }\n            else if (ch == 'u')\n            {\n               ulval = va_arg(ap, unsigned long);\n               snprintf(tempbuf, sizeof(tempbuf), \"%lu\", ulval);\n            }\n            else if ((ch == 'l') && (*src == 'u'))\n            {\n               unsigned long long lluval = va_arg(ap, unsigned long long);\n               snprintf(tempbuf, sizeof(tempbuf), \"%llu\", lluval);\n               src++;\n            }\n            else\n            {\n               snprintf(tempbuf, sizeof(tempbuf), \"Bad format string: \\\"%s\\\"\", fmt);\n               loglevel = LOG_LEVEL_FATAL;\n            }\n            break;\n         case 'c':\n            /*\n             * Note that char paramaters are converted to int, so we need to\n             * pass \"int\" to va_arg.  (See K&R, 2nd ed, section A7.3.2, page 202)\n             */\n            tempbuf[0] = (char) va_arg(ap, int);\n            tempbuf[1] = '\\0';\n            break;\n         case 's':\n            format_string = va_arg(ap, char *);\n            if (format_string == NULL)\n            {\n               format_string = \"[null]\";\n            }\n            break;\n         case 'N':\n            /*\n             * Non-standard: Print a counted unterminated string,\n             * replacing unprintable bytes with their hex value.\n             * Takes 2 parameters: int length, const char * string.\n             */\n            ival = va_arg(ap, int);\n            assert(ival >= 0);\n            sval = va_arg(ap, char *);\n            assert(sval != NULL);\n\n            while ((ival-- > 0) && (length < log_buffer_size - 6))\n            {\n               if (isprint((int)*sval) && (*sval != '\\\\'))\n               {\n                  outbuf[length++] = *sval;\n                  outbuf[length] = '\\0';\n               }\n               else\n               {\n                  int ret = snprintf(outbuf + length,\n                     log_buffer_size - length - 2, \"\\\\x%.2x\", (unsigned char)*sval);\n                  assert(ret == 4);\n                  length += 4;\n               }\n               sval++;\n            }\n            /*\n             * XXX: In case of printable characters at the end of\n             *      the %N string, we're not using the whole buffer.\n             */\n            format_string = (length < log_buffer_size - 6) ? \"\" : \"[too long]\";\n            break;\n         case 'E':\n            /* Non-standard: Print error code from errno */\n#ifdef _WIN32\n            ival = WSAGetLastError();\n            format_string = w32_socket_strerr(ival, tempbuf);\n#elif __OS2__\n            ival = sock_errno();\n            if (ival != 0)\n            {\n               format_string = os2_socket_strerr(ival, tempbuf);\n            }\n            else\n            {\n               ival = errno;\n               format_string = strerror(ival);\n            }\n#else /* ifndef _WIN32 */\n            ival = errno;\n#ifdef HAVE_STRERROR\n            format_string = strerror(ival);\n#else /* ifndef HAVE_STRERROR */\n            format_string = NULL;\n#endif /* ndef HAVE_STRERROR */\n            if (sval == NULL)\n            {\n               snprintf(tempbuf, sizeof(tempbuf), \"(errno = %d)\", ival);\n            }\n#endif /* ndef _WIN32 */\n            break;\n         case 'T':\n            /* Non-standard: Print a Common Log File timestamp */\n            get_clf_timestamp(tempbuf, sizeof(tempbuf));\n            break;\n         default:\n            snprintf(tempbuf, sizeof(tempbuf), \"Bad format string: \\\"%s\\\"\", fmt);\n            loglevel = LOG_LEVEL_FATAL;\n            break;\n      }\n\n      assert(length < log_buffer_size);\n      length += strlcpy(outbuf + length, format_string, log_buffer_size - length);\n\n      if (length >= log_buffer_size-2)\n      {\n         static const char warning[] = \"... [too long, truncated]\";\n\n         length = log_buffer_size - sizeof(warning) - 1;\n         length += strlcpy(outbuf + length, warning, log_buffer_size - length);\n         assert(length < log_buffer_size);\n\n         break;\n      }\n   }\n\n   /* done with var. args */\n   va_end(ap);\n\n   assert(length < log_buffer_size);\n   length += strlcpy(outbuf + length, \"\\n\", log_buffer_size - length);\n\n   /* Some sanity checks */\n   if ((length >= log_buffer_size)\n    || (outbuf[log_buffer_size-1] != '\\0')\n    || (outbuf[log_buffer_size] != '\\0')\n      )\n   {\n      /* Repeat as assertions */\n      assert(length < log_buffer_size);\n      assert(outbuf[log_buffer_size-1] == '\\0');\n      /*\n       * outbuf's real size is log_buffer_size+1,\n       * so while this looks like an off-by-one,\n       * we're only checking our paranoia byte.\n       */\n      assert(outbuf[log_buffer_size] == '\\0');\n\n      snprintf(outbuf, log_buffer_size,\n         \"%s %08lx Fatal error: log_error()'s sanity checks failed.\"\n         \"length: %d. Exiting.\",\n         timestamp, thread_id, (int)length);\n      loglevel = LOG_LEVEL_FATAL;\n   }\n\n#ifndef _WIN32\n   /*\n    * On Windows this is acceptable in case\n    * we are logging to the GUI window only.\n    */\n   assert(NULL != logfp);\n#endif\n\n   if (loglevel == LOG_LEVEL_FATAL)\n   {\n      fatal_error(outbuf_save);\n      /* Never get here */\n   }\n   if (logfp != NULL)\n   {\n      fputs(outbuf_save, logfp);\n   }\n\n#if defined(_WIN32) && !defined(_WIN_CONSOLE)\n   /* Write to display */\n   LogPutString(outbuf_save);\n#endif /* defined(_WIN32) && !defined(_WIN_CONSOLE) */\n\n   unlock_logfile();\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  jb_err_to_string\n *\n * Description :  Translates JB_ERR_FOO codes into strings.\n *\n *                XXX: the type of error codes is jb_err\n *                but the typedef'inition is currently not\n *                visible to all files that include errlog.h.\n *\n * Parameters  :\n *          1  :  jb_error = a valid jb_err code\n *\n * Returns     :  A string with the jb_err translation\n *\n *********************************************************************/\nconst char *jb_err_to_string(int jb_error)\n{\n   switch (jb_error)\n   {\n      case JB_ERR_OK:\n         return \"Success, no error\";\n      case JB_ERR_MEMORY:\n         return \"Out of memory\";\n      case JB_ERR_CGI_PARAMS:\n         return \"Missing or corrupt CGI parameters\";\n      case JB_ERR_FILE:\n         return \"Error opening, reading or writing a file\";\n      case JB_ERR_PARSE:\n         return \"Parse error\";\n      case JB_ERR_MODIFIED:\n         return \"File has been modified outside of the CGI actions editor.\";\n      case JB_ERR_COMPRESS:\n         return \"(De)compression failure\";\n   }\n   assert(0);\n   return \"Internal error\";\n}\n\n#ifdef _WIN32\n/*********************************************************************\n *\n * Function    :  w32_socket_strerr\n *\n * Description :  Translate the return value from WSAGetLastError()\n *                into a string.\n *\n * Parameters  :\n *          1  :  errcode = The return value from WSAGetLastError().\n *          2  :  tmp_buf = A temporary buffer that might be used to\n *                          store the string.\n *\n * Returns     :  String representing the error code.  This may be\n *                a global string constant or a string stored in\n *                tmp_buf.\n *\n *********************************************************************/\nstatic char *w32_socket_strerr(int errcode, char *tmp_buf)\n{\n#define TEXT_FOR_ERROR(code,text) \\\n   if (errcode == code)           \\\n   {                              \\\n      return #code \" - \" text;    \\\n   }\n\n   TEXT_FOR_ERROR(WSAEACCES, \"Permission denied\")\n   TEXT_FOR_ERROR(WSAEADDRINUSE, \"Address already in use.\")\n   TEXT_FOR_ERROR(WSAEADDRNOTAVAIL, \"Cannot assign requested address.\");\n   TEXT_FOR_ERROR(WSAEAFNOSUPPORT, \"Address family not supported by protocol family.\");\n   TEXT_FOR_ERROR(WSAEALREADY, \"Operation already in progress.\");\n   TEXT_FOR_ERROR(WSAECONNABORTED, \"Software caused connection abort.\");\n   TEXT_FOR_ERROR(WSAECONNREFUSED, \"Connection refused.\");\n   TEXT_FOR_ERROR(WSAECONNRESET, \"Connection reset by peer.\");\n   TEXT_FOR_ERROR(WSAEDESTADDRREQ, \"Destination address required.\");\n   TEXT_FOR_ERROR(WSAEFAULT, \"Bad address.\");\n   TEXT_FOR_ERROR(WSAEHOSTDOWN, \"Host is down.\");\n   TEXT_FOR_ERROR(WSAEHOSTUNREACH, \"No route to host.\");\n   TEXT_FOR_ERROR(WSAEINPROGRESS, \"Operation now in progress.\");\n   TEXT_FOR_ERROR(WSAEINTR, \"Interrupted function call.\");\n   TEXT_FOR_ERROR(WSAEINVAL, \"Invalid argument.\");\n   TEXT_FOR_ERROR(WSAEISCONN, \"Socket is already connected.\");\n   TEXT_FOR_ERROR(WSAEMFILE, \"Too many open sockets.\");\n   TEXT_FOR_ERROR(WSAEMSGSIZE, \"Message too long.\");\n   TEXT_FOR_ERROR(WSAENETDOWN, \"Network is down.\");\n   TEXT_FOR_ERROR(WSAENETRESET, \"Network dropped connection on reset.\");\n   TEXT_FOR_ERROR(WSAENETUNREACH, \"Network is unreachable.\");\n   TEXT_FOR_ERROR(WSAENOBUFS, \"No buffer space available.\");\n   TEXT_FOR_ERROR(WSAENOPROTOOPT, \"Bad protocol option.\");\n   TEXT_FOR_ERROR(WSAENOTCONN, \"Socket is not connected.\");\n   TEXT_FOR_ERROR(WSAENOTSOCK, \"Socket operation on non-socket.\");\n   TEXT_FOR_ERROR(WSAEOPNOTSUPP, \"Operation not supported.\");\n   TEXT_FOR_ERROR(WSAEPFNOSUPPORT, \"Protocol family not supported.\");\n   TEXT_FOR_ERROR(WSAEPROCLIM, \"Too many processes.\");\n   TEXT_FOR_ERROR(WSAEPROTONOSUPPORT, \"Protocol not supported.\");\n   TEXT_FOR_ERROR(WSAEPROTOTYPE, \"Protocol wrong type for socket.\");\n   TEXT_FOR_ERROR(WSAESHUTDOWN, \"Cannot send after socket shutdown.\");\n   TEXT_FOR_ERROR(WSAESOCKTNOSUPPORT, \"Socket type not supported.\");\n   TEXT_FOR_ERROR(WSAETIMEDOUT, \"Connection timed out.\");\n   TEXT_FOR_ERROR(WSAEWOULDBLOCK, \"Resource temporarily unavailable.\");\n   TEXT_FOR_ERROR(WSAHOST_NOT_FOUND, \"Host not found.\");\n   TEXT_FOR_ERROR(WSANOTINITIALISED, \"Successful WSAStartup not yet performed.\");\n   TEXT_FOR_ERROR(WSANO_DATA, \"Valid name, no data record of requested type.\");\n   TEXT_FOR_ERROR(WSANO_RECOVERY, \"This is a non-recoverable error.\");\n   TEXT_FOR_ERROR(WSASYSNOTREADY, \"Network subsystem is unavailable.\");\n   TEXT_FOR_ERROR(WSATRY_AGAIN, \"Non-authoritative host not found.\");\n   TEXT_FOR_ERROR(WSAVERNOTSUPPORTED, \"WINSOCK.DLL version out of range.\");\n   TEXT_FOR_ERROR(WSAEDISCON, \"Graceful shutdown in progress.\");\n   /*\n    * The following error codes are documented in the Microsoft WinSock\n    * reference guide, but don't actually exist.\n    *\n    * TEXT_FOR_ERROR(WSA_INVALID_HANDLE, \"Specified event object handle is invalid.\");\n    * TEXT_FOR_ERROR(WSA_INVALID_PARAMETER, \"One or more parameters are invalid.\");\n    * TEXT_FOR_ERROR(WSAINVALIDPROCTABLE, \"Invalid procedure table from service provider.\");\n    * TEXT_FOR_ERROR(WSAINVALIDPROVIDER, \"Invalid service provider version number.\");\n    * TEXT_FOR_ERROR(WSA_IO_PENDING, \"Overlapped operations will complete later.\");\n    * TEXT_FOR_ERROR(WSA_IO_INCOMPLETE, \"Overlapped I/O event object not in signaled state.\");\n    * TEXT_FOR_ERROR(WSA_NOT_ENOUGH_MEMORY, \"Insufficient memory available.\");\n    * TEXT_FOR_ERROR(WSAPROVIDERFAILEDINIT, \"Unable to initialize a service provider.\");\n    * TEXT_FOR_ERROR(WSASYSCALLFAILURE, \"System call failure.\");\n    * TEXT_FOR_ERROR(WSA_OPERATION_ABORTED, \"Overlapped operation aborted.\");\n    */\n\n   sprintf(tmp_buf, \"(error number %d)\", errcode);\n   return tmp_buf;\n}\n#endif /* def _WIN32 */\n\n\n#ifdef __OS2__\n/*********************************************************************\n *\n * Function    :  os2_socket_strerr\n *\n * Description :  Translate the return value from sock_errno()\n *                into a string.\n *\n * Parameters  :\n *          1  :  errcode = The return value from sock_errno().\n *          2  :  tmp_buf = A temporary buffer that might be used to\n *                          store the string.\n *\n * Returns     :  String representing the error code.  This may be\n *                a global string constant or a string stored in\n *                tmp_buf.\n *\n *********************************************************************/\nstatic char *os2_socket_strerr(int errcode, char *tmp_buf)\n{\n#define TEXT_FOR_ERROR(code,text) \\\n   if (errcode == code)           \\\n   {                              \\\n      return #code \" - \" text;    \\\n   }\n\n   TEXT_FOR_ERROR(SOCEPERM          , \"Not owner.\")\n   TEXT_FOR_ERROR(SOCESRCH          , \"No such process.\")\n   TEXT_FOR_ERROR(SOCEINTR          , \"Interrupted system call.\")\n   TEXT_FOR_ERROR(SOCENXIO          , \"No such device or address.\")\n   TEXT_FOR_ERROR(SOCEBADF          , \"Bad file number.\")\n   TEXT_FOR_ERROR(SOCEACCES         , \"Permission denied.\")\n   TEXT_FOR_ERROR(SOCEFAULT         , \"Bad address.\")\n   TEXT_FOR_ERROR(SOCEINVAL         , \"Invalid argument.\")\n   TEXT_FOR_ERROR(SOCEMFILE         , \"Too many open files.\")\n   TEXT_FOR_ERROR(SOCEPIPE          , \"Broken pipe.\")\n   TEXT_FOR_ERROR(SOCEWOULDBLOCK    , \"Operation would block.\")\n   TEXT_FOR_ERROR(SOCEINPROGRESS    , \"Operation now in progress.\")\n   TEXT_FOR_ERROR(SOCEALREADY       , \"Operation already in progress.\")\n   TEXT_FOR_ERROR(SOCENOTSOCK       , \"Socket operation on non-socket.\")\n   TEXT_FOR_ERROR(SOCEDESTADDRREQ   , \"Destination address required.\")\n   TEXT_FOR_ERROR(SOCEMSGSIZE       , \"Message too long.\")\n   TEXT_FOR_ERROR(SOCEPROTOTYPE     , \"Protocol wrong type for socket.\")\n   TEXT_FOR_ERROR(SOCENOPROTOOPT    , \"Protocol not available.\")\n   TEXT_FOR_ERROR(SOCEPROTONOSUPPORT, \"Protocol not supported.\")\n   TEXT_FOR_ERROR(SOCESOCKTNOSUPPORT, \"Socket type not supported.\")\n   TEXT_FOR_ERROR(SOCEOPNOTSUPP     , \"Operation not supported.\")\n   TEXT_FOR_ERROR(SOCEPFNOSUPPORT   , \"Protocol family not supported.\")\n   TEXT_FOR_ERROR(SOCEAFNOSUPPORT   , \"Address family not supported by protocol family.\")\n   TEXT_FOR_ERROR(SOCEADDRINUSE     , \"Address already in use.\")\n   TEXT_FOR_ERROR(SOCEADDRNOTAVAIL  , \"Can't assign requested address.\")\n   TEXT_FOR_ERROR(SOCENETDOWN       , \"Network is down.\")\n   TEXT_FOR_ERROR(SOCENETUNREACH    , \"Network is unreachable.\")\n   TEXT_FOR_ERROR(SOCENETRESET      , \"Network dropped connection on reset.\")\n   TEXT_FOR_ERROR(SOCECONNABORTED   , \"Software caused connection abort.\")\n   TEXT_FOR_ERROR(SOCECONNRESET     , \"Connection reset by peer.\")\n   TEXT_FOR_ERROR(SOCENOBUFS        , \"No buffer space available.\")\n   TEXT_FOR_ERROR(SOCEISCONN        , \"Socket is already connected.\")\n   TEXT_FOR_ERROR(SOCENOTCONN       , \"Socket is not connected.\")\n   TEXT_FOR_ERROR(SOCESHUTDOWN      , \"Can't send after socket shutdown.\")\n   TEXT_FOR_ERROR(SOCETOOMANYREFS   , \"Too many references: can't splice.\")\n   TEXT_FOR_ERROR(SOCETIMEDOUT      , \"Operation timed out.\")\n   TEXT_FOR_ERROR(SOCECONNREFUSED   , \"Connection refused.\")\n   TEXT_FOR_ERROR(SOCELOOP          , \"Too many levels of symbolic links.\")\n   TEXT_FOR_ERROR(SOCENAMETOOLONG   , \"File name too long.\")\n   TEXT_FOR_ERROR(SOCEHOSTDOWN      , \"Host is down.\")\n   TEXT_FOR_ERROR(SOCEHOSTUNREACH   , \"No route to host.\")\n   TEXT_FOR_ERROR(SOCENOTEMPTY      , \"Directory not empty.\")\n   TEXT_FOR_ERROR(SOCEOS2ERR        , \"OS/2 Error.\")\n\n   sprintf(tmp_buf, \"(error number %d)\", errcode);\n   return tmp_buf;\n}\n#endif /* def __OS2__ */\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/filters.c",
    "content": "const char filters_rcs[] = \"$Id: filters.c,v 1.199 2016/01/16 12:33:35 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/filters.c,v $\n *\n * Purpose     :  Declares functions to parse/crunch headers and pages.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <ctype.h>\n#include <string.h>\n#include <assert.h>\n#include <inttypes.h>\n#include <sys/errno.h>\n\n#ifndef _WIN32\n#ifndef __OS2__\n#include <unistd.h>\n#endif /* ndef __OS2__ */\n#include <netinet/in.h>\n#else\n#include <winsock2.h>\n#endif /* ndef _WIN32 */\n\n#ifdef __OS2__\n#include <utils.h>\n#endif /* def __OS2__ */\n\n#include \"project.h\"\n#include \"filters.h\"\n#include \"encode.h\"\n#include \"parsers.h\"\n#include \"ssplit.h\"\n#include \"errlog.h\"\n#include \"jbsockets.h\"\n#include \"miscutil.h\"\n#include \"actions.h\"\n#include \"cgi.h\"\n#include \"jcc.h\"\n#include \"list.h\"\n#include \"deanimate.h\"\n#include \"urlmatch.h\"\n#include \"loaders.h\"\n#include \"maxminddb.h\"\n\n#ifdef _WIN32\n#include \"win32.h\"\n#endif\n\n#define MIN(a,b) ((a) < (b) ? (a) : (b))\n\nconst char filters_h_rcs[] = FILTERS_H_VERSION;\n\ntypedef char *(*filter_function_ptr)();\nstatic filter_function_ptr get_filter_function(const struct client_state *csp);\nstatic jb_err remove_chunked_transfer_coding(char *buffer, size_t *size);\nstatic jb_err prepare_for_filtering(struct client_state *csp);\n\nstruct forward_spec fwd_default[1];\n\nMMDB_s mmdb;\n\n#ifdef FEATURE_ACL\n\n/*********************************************************************\n *\n * Function    :  block_acl\n *\n * Description :  Block this request?\n *                Decide yes or no based on ACL file.\n *\n * Parameters  :\n *          1  :  dst = The proxy or gateway address this is going to.\n *                      Or NULL to check all possible targets.\n *          2  :  csp = Current client state (buffers, headers, etc...)\n *                      Also includes the client IP address.\n *\n * Returns     : 0 = FALSE (don't block) and 1 = TRUE (do block)\n *\n *********************************************************************/\nint block_acl(const struct access_control_addr *dst, const struct client_state *csp)\n{\n   struct access_control_list *acl = csp->config->acl;\n\n   /* if not using an access control list, then permit the connection */\n   if (acl == NULL)\n   {\n      return(0);\n   }\n\n   /* search the list */\n   while (acl != NULL)\n   {\n      if (\n#ifdef HAVE_RFC2553\n            match_sockaddr(&acl->src->addr, &acl->src->mask, &csp->tcp_addr)\n#else\n            (csp->ip_addr_long & acl->src->mask) == acl->src->addr\n#endif\n            )\n      {\n         if (dst == NULL)\n         {\n            /* Just want to check if they have any access */\n            if (acl->action == ACL_PERMIT)\n            {\n               return(0);\n            }\n            else\n            {\n               return(1);\n            }\n         }\n         else if (\n#ifdef HAVE_RFC2553\n               /*\n                * XXX: An undefined acl->dst is full of zeros and should be\n                * considered a wildcard address. sockaddr_storage_to_ip()\n                * fails on such destinations because of unknown sa_familly\n                * (glibc only?). However this test is not portable.\n                *\n                * So, we signal the acl->dst is wildcard in wildcard_dst.\n                */\n               acl->wildcard_dst ||\n                  match_sockaddr(&acl->dst->addr, &acl->dst->mask, &dst->addr)\n#else\n               ((dst->addr & acl->dst->mask) == acl->dst->addr)\n           && ((dst->port == acl->dst->port) || (acl->dst->port == 0))\n#endif\n           )\n         {\n            if (acl->action == ACL_PERMIT)\n            {\n               return(0);\n            }\n            else\n            {\n               return(1);\n            }\n         }\n      }\n      acl = acl->next;\n   }\n\n   return(1);\n\n}\n\n\n\n#endif /* def FEATURE_ACL */\n\n#ifdef HAVE_RFC2553\n/*********************************************************************\n *\n * Function    :  sockaddr_storage_to_ip\n *\n * Description :  Access internal structure of sockaddr_storage\n *\n * Parameters  :\n *          1  :  addr = socket address\n *          2  :  ip   = IP address as array of octets in network order\n *                       (it points into addr)\n *          3  :  len  = length of IP address in octets\n *          4  :  port = port number in network order;\n *\n * Returns     :  0 = no errror; -1 otherwise.\n *\n *********************************************************************/\nstatic int sockaddr_storage_to_ip(const struct sockaddr_storage *addr,\n                                  uint8_t **ip, unsigned int *len,\n                                  in_port_t **port)\n{\n    if (NULL == addr)\n    {\n        return(-1);\n    }\n\n    switch (addr->ss_family)\n    {\n        case AF_INET:\n            if (NULL != len)\n            {\n                *len = 4;\n            }\n            if (NULL != ip)\n            {\n                *ip = (uint8_t *)\n                &(((struct sockaddr_in *)addr)->sin_addr.s_addr);\n            }\n            if (NULL != port)\n            {\n                *port = &((struct sockaddr_in *)addr)->sin_port;\n            }\n            break;\n\n        case AF_INET6:\n            if (NULL != len)\n            {\n                *len = 16;\n            }\n            if (NULL != ip)\n            {\n                *ip = ((struct sockaddr_in6 *)addr)->sin6_addr.s6_addr;\n            }\n            if (NULL != port)\n            {\n                *port = &((struct sockaddr_in6 *)addr)->sin6_port;\n            }\n            break;\n\n        default:\n            /* Unsupported address family */\n            return(-1);\n    }\n\n    return(0);\n}\n\n\n/*********************************************************************\n *\n * Function    :  match_sockaddr\n *\n * Description :  Check whether address matches network (IP address and port)\n *\n * Parameters  :\n *          1  :  network = socket address of subnework\n *          2  :  netmask = network mask as socket address\n *          3  :  address = checked socket address against given network\n *\n * Returns     :  0 = doesn't match; 1 = does match\n *\n *********************************************************************/\nstatic int match_sockaddr(const struct sockaddr_storage *network,\n                          const struct sockaddr_storage *netmask,\n                          const struct sockaddr_storage *address)\n{\n    uint8_t *network_addr, *netmask_addr, *address_addr;\n    unsigned int addr_len;\n    in_port_t *network_port, *netmask_port, *address_port;\n    int i;\n\n    if (network->ss_family != netmask->ss_family)\n    {\n        /* This should never happen */\n        assert(network->ss_family == netmask->ss_family);\n        log_error(LOG_LEVEL_FATAL, \"Network and netmask differ in family.\");\n    }\n\n    sockaddr_storage_to_ip(network, &network_addr, &addr_len, &network_port);\n    sockaddr_storage_to_ip(netmask, &netmask_addr, NULL, &netmask_port);\n    sockaddr_storage_to_ip(address, &address_addr, NULL, &address_port);\n\n    /* Check for family */\n    if ((network->ss_family == AF_INET) && (address->ss_family == AF_INET6)\n        && IN6_IS_ADDR_V4MAPPED((struct in6_addr *)address_addr))\n    {\n        /* Map AF_INET6 V4MAPPED address into AF_INET */\n        address_addr += 12;\n        addr_len = 4;\n    }\n    else if ((network->ss_family == AF_INET6) && (address->ss_family == AF_INET)\n             && IN6_IS_ADDR_V4MAPPED((struct in6_addr *)network_addr))\n    {\n        /* Map AF_INET6 V4MAPPED network into AF_INET */\n        network_addr += 12;\n        netmask_addr += 12;\n        addr_len = 4;\n    }\n\n    /* XXX: Port check is signaled in netmask */\n    if (*netmask_port && *network_port != *address_port)\n    {\n        return 0;\n    }\n\n    /* TODO: Optimize by checking by words insted of octets */\n    for (i = 0; (i < addr_len) && netmask_addr[i]; i++)\n    {\n        if ((network_addr[i] & netmask_addr[i]) !=\n            (address_addr[i] & netmask_addr[i]))\n        {\n            return 0;\n        }\n    }\n\n    return 1;\n}\n\n\nstatic int match_ip(const struct sockaddr_storage *network,\n                    const struct sockaddr_storage *netmask,\n                    const struct sockaddr_storage *address)\n{\n    uint8_t *network_addr, *netmask_addr, *address_addr;\n    unsigned int addr_len;\n    in_port_t *network_port, *netmask_port, *address_port;\n    int i;\n\n    if (network->ss_family != netmask->ss_family)\n    {\n        /* This should never happen */\n        assert(network->ss_family == netmask->ss_family);\n        log_error(LOG_LEVEL_FATAL, \"Network and netmask differ in family.\");\n    }\n\n    sockaddr_storage_to_ip(network, &network_addr, &addr_len, &network_port);\n    sockaddr_storage_to_ip(netmask, &netmask_addr, NULL, &netmask_port);\n    sockaddr_storage_to_ip(address, &address_addr, NULL, &address_port);\n\n    /* Check for family */\n    if ((network->ss_family == AF_INET) && (address->ss_family == AF_INET6)\n        && IN6_IS_ADDR_V4MAPPED((struct in6_addr *)address_addr))\n    {\n        /* Map AF_INET6 V4MAPPED address into AF_INET */\n        address_addr += 12;\n        addr_len = 4;\n    }\n    else if ((network->ss_family == AF_INET6) && (address->ss_family == AF_INET)\n             && IN6_IS_ADDR_V4MAPPED((struct in6_addr *)network_addr))\n    {\n        /* Map AF_INET6 V4MAPPED network into AF_INET */\n        network_addr += 12;\n        netmask_addr += 12;\n        addr_len = 4;\n    }\n\n    /* TODO: Optimize by checking by words insted of octets */\n    for (i = 0; (i < addr_len) && netmask_addr[i]; i++)\n    {\n        if ((network_addr[i] & netmask_addr[i]) !=\n            (address_addr[i] & netmask_addr[i]))\n        {\n            return 0;\n        }\n    }\n    \n    return 1;\n}\n\n#endif /* def HAVE_RFC2553 */\n\n\n/*********************************************************************\n *\n * Function    :  acl_addr\n *\n * Description :  Called from `load_config' to parse an ACL address.\n *\n * Parameters  :\n *          1  :  aspec = String specifying ACL address.\n *          2  :  aca = struct access_control_addr to fill in.\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint acl_addr(const char *aspec, struct access_control_addr *aca)\n{\n    int i, masklength;\n#ifdef HAVE_RFC2553\n    struct addrinfo hints, *result;\n    uint8_t *mask_data;\n    in_port_t *mask_port;\n    unsigned int addr_len;\n#else\n    long port;\n#endif /* def HAVE_RFC2553 */\n    char *p;\n    char *acl_spec = NULL;\n\n#ifdef HAVE_RFC2553\n    /* XXX: Depend on ai_family */\n    masklength = 128;\n#else\n    masklength = 32;\n    port       =  0;\n#endif\n\n    /*\n     * Use a temporary acl spec copy so we can log\n     * the unmodified original in case of parse errors.\n     */\n    acl_spec = strdup_or_die(aspec);\n\n    if ((p = strchr(acl_spec, '/')) != NULL)\n    {\n        *p++ = '\\0';\n        if (privoxy_isdigit(*p) == 0)\n        {\n            freez(acl_spec);\n            return(-1);\n        }\n        masklength = atoi(p);\n    }\n\n    if ((masklength < 0) ||\n#ifdef HAVE_RFC2553\n        (masklength > 128)\n#else\n        (masklength > 32)\n#endif\n        )\n    {\n        freez(acl_spec);\n        return(-1);\n    }\n\n    if ((*acl_spec == '[') && (NULL != (p = strchr(acl_spec, ']'))))\n    {\n        *p = '\\0';\n        memmove(acl_spec, acl_spec + 1, (size_t)(p - acl_spec));\n\n        if (*++p != ':')\n        {\n            p = NULL;\n        }\n    }\n    else\n    {\n        p = strchr(acl_spec, ':');\n    }\n    if (p != NULL)\n    {\n        assert(*p == ':');\n        *p = '\\0';\n        p++;\n    }\n\n#ifdef HAVE_RFC2553\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family = AF_UNSPEC;\n    hints.ai_socktype = SOCK_STREAM;\n\n    i = getaddrinfo(acl_spec, p, &hints, &result);\n\n    if (i != 0)\n    {\n        log_error(LOG_LEVEL_ERROR, \"Can not resolve [%s]:%s: %s\",\n                  acl_spec, p, gai_strerror(i));\n        freez(acl_spec);\n        return(-1);\n    }\n    freez(acl_spec);\n\n    /* TODO: Allow multihomed hostnames */\n    memcpy(&(aca->addr), result->ai_addr, result->ai_addrlen);\n    freeaddrinfo(result);\n#else\n    if (p != NULL)\n    {\n        char *endptr;\n\n        port = strtol(p, &endptr, 10);\n\n        if (port <= 0 || port > 65535 || *endptr != '\\0')\n        {\n            freez(acl_spec);\n            return(-1);\n        }\n    }\n\n    aca->port = (unsigned long)port;\n\n    aca->addr = ntohl(resolve_hostname_to_ip(acl_spec));\n    freez(acl_spec);\n\n    if (aca->addr == INADDR_NONE)\n    {\n        /* XXX: This will be logged as parse error. */\n        return(-1);\n    }\n#endif /* def HAVE_RFC2553 */\n\n    /* build the netmask */\n#ifdef HAVE_RFC2553\n    /* Clip masklength according to current family. */\n    if ((aca->addr.ss_family == AF_INET) && (masklength > 32))\n    {\n        masklength = 32;\n    }\n\n    aca->mask.ss_family = aca->addr.ss_family;\n    if (sockaddr_storage_to_ip(&aca->mask, &mask_data, &addr_len, &mask_port))\n    {\n        return(-1);\n    }\n\n    if (p)\n    {\n        /* ACL contains a port number, check ports in the future. */\n        *mask_port = 1;\n    }\n\n    /*\n     * XXX: This could be optimized to operate on whole words instead\n     * of octets (128-bit CPU could do it in one iteration).\n     */\n    /*\n     * Octets after prefix can be omitted because of\n     * previous initialization to zeros.\n     */\n    for (i = 0; (i < addr_len) && masklength; i++)\n    {\n        if (masklength >= 8)\n        {\n            mask_data[i] = 0xFF;\n            masklength -= 8;\n        }\n        else\n        {\n            /*\n             * XXX: This assumes MSB of octet is on the left side.\n             * This should be true for all architectures or solved\n             * by the link layer.\n             */\n            mask_data[i] = (uint8_t)~((1 << (8 - masklength)) - 1);\n            masklength = 0;\n        }\n    }\n\n#else\n    aca->mask = 0;\n    for (i=1; i <= masklength ; i++)\n    {\n        aca->mask |= (1U << (32 - i));\n    }\n    \n    /* now mask off the host portion of the ip address\n     * (i.e. save on the network portion of the address).\n     */\n    aca->addr = aca->addr & aca->mask;\n#endif /* def HAVE_RFC2553 */\n    \n    return(0);\n    \n}\n\n/*********************************************************************\n *\n * Function    :  connect_port_is_forbidden\n *\n * Description :  Check to see if CONNECT requests to the destination\n *                port of this request are forbidden. The check is\n *                independend of the actual request method.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  True if yes, false otherwise.\n *\n *********************************************************************/\nint connect_port_is_forbidden(const struct client_state *csp)\n{\n   return ((csp->action->flags & ACTION_LIMIT_CONNECT) &&\n     !match_portlist(csp->action->string[ACTION_STRING_LIMIT_CONNECT],\n        csp->http->port));\n}\n\n\n/*********************************************************************\n *\n * Function    :  block_url\n *\n * Description :  Called from `chat'.  Check to see if we need to block this.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  NULL => unblocked, else HTTP block response\n *\n *********************************************************************/\nstruct http_response *block_url(struct client_state *csp)\n{\n   struct http_response *rsp;\n   const char *new_content_type = NULL;\n\n   /*\n    * If it's not blocked, don't block it ;-)\n    */\n   if ((csp->action->flags & ACTION_BLOCK) == 0 && !(csp->routing == ROUTE_BLOCK))\n   {\n      return NULL;\n   }\n   if (csp->action->flags & ACTION_REDIRECT)\n   {\n      log_error(LOG_LEVEL_ERROR, \"redirect{} overruled by block.\");\n   }\n   /*\n    * Else, prepare a response\n    */\n   if (NULL == (rsp = alloc_http_response()))\n   {\n      return cgi_error_memory();\n   }\n\n   /*\n    * If it's an image-url, send back an image or redirect\n    * as specified by the relevant +image action\n    */\n#ifdef FEATURE_IMAGE_BLOCKING\n   if (((csp->action->flags & ACTION_IMAGE_BLOCKER) != 0)\n        && is_imageurl(csp))\n   {\n      char *p;\n      /* determine HOW images should be blocked */\n      p = csp->action->string[ACTION_STRING_IMAGE_BLOCKER];\n\n      if (csp->action->flags & ACTION_HANDLE_AS_EMPTY_DOCUMENT)\n      {\n         log_error(LOG_LEVEL_ERROR, \"handle-as-empty-document overruled by handle-as-image.\");\n      }\n\n      /* and handle accordingly: */\n      if ((p == NULL) || (0 == strcmpic(p, \"pattern\")))\n      {\n         rsp->status = strdup_or_die(\"403 Request blocked by Privoxy\");\n         rsp->body = bindup(image_pattern_data, image_pattern_length);\n         if (rsp->body == NULL)\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n         rsp->content_length = image_pattern_length;\n\n         if (enlist_unique_header(rsp->headers, \"Content-Type\", BUILTIN_IMAGE_MIMETYPE))\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n      }\n      else if (0 == strcmpic(p, \"blank\"))\n      {\n         rsp->status = strdup_or_die(\"403 Request blocked by Privoxy\");\n         rsp->body = bindup(image_blank_data, image_blank_length);\n         if (rsp->body == NULL)\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n         rsp->content_length = image_blank_length;\n\n         if (enlist_unique_header(rsp->headers, \"Content-Type\", BUILTIN_IMAGE_MIMETYPE))\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n      }\n      else\n      {\n         rsp->status = strdup_or_die(\"302 Local Redirect from Privoxy\");\n\n         if (enlist_unique_header(rsp->headers, \"Location\", p))\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n      }\n\n   }\n   else\n#endif /* def FEATURE_IMAGE_BLOCKING */\n   if (csp->action->flags & ACTION_HANDLE_AS_EMPTY_DOCUMENT || (csp->routing == ROUTE_BLOCK))\n   {\n     /*\n      *  Send empty document.\n      */\n      new_content_type = csp->action->string[ACTION_STRING_CONTENT_TYPE];\n\n      freez(rsp->body);\n      rsp->body = strdup_or_die(\" \");\n      rsp->content_length = 1;\n\n      if (csp->config->feature_flags & RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK)\n      {\n         /*\n          * Workaround for firefox bug 492459\n          *   https://bugzilla.mozilla.org/show_bug.cgi?id=492459\n          * Return a 200 OK status for pages blocked with +handle-as-empty-document\n          * if the \"handle-as-empty-doc-returns-ok\" runtime config option is set.\n          */\n         rsp->status = strdup_or_die(\"200 Request blocked by Privoxy\");\n      }\n      else\n      {\n         rsp->status = strdup_or_die(\"403 Request blocked by Privoxy\");\n      }\n\n      if (new_content_type != 0)\n      {\n         log_error(LOG_LEVEL_HEADER, \"Overwriting Content-Type with %s\", new_content_type);\n         if (enlist_unique_header(rsp->headers, \"Content-Type\", new_content_type))\n         {\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n      }\n   }\n   else\n\n   /*\n    * Else, generate an HTML \"blocked\" message:\n    */\n   {\n      jb_err err;\n      struct map * exports;\n\n      rsp->status = strdup_or_die(\"403 Request blocked by Privoxy\");\n\n      exports = default_exports(csp, NULL);\n      if (exports == NULL)\n      {\n         free_http_response(rsp);\n         return cgi_error_memory();\n      }\n\n#ifdef FEATURE_FORCE_LOAD\n      err = map(exports, \"force-prefix\", 1, FORCE_PREFIX, 1);\n      /*\n       * Export the force conditional block killer if\n       *\n       * - Privoxy was compiled without FEATURE_FORCE_LOAD, or\n       * - Privoxy is configured to enforce blocks, or\n       * - it's a CONNECT request and enforcing wouldn't work anyway.\n       */\n      if ((csp->config->feature_flags & RUNTIME_FEATURE_ENFORCE_BLOCKS)\n       || (0 == strcmpic(csp->http->gpc, \"connect\")))\n#endif /* ndef FEATURE_FORCE_LOAD */\n      {\n         err = map_block_killer(exports, \"force-support\");\n      }\n\n      if (!err) err = map(exports, \"protocol\", 1, csp->http->ssl ? \"https://\" : \"http://\", 1);\n      if (!err) err = map(exports, \"hostport\", 1, html_encode(csp->http->hostport), 0);\n      if (!err) err = map(exports, \"path\", 1, html_encode(csp->http->path), 0);\n      if (!err) err = map(exports, \"path-ue\", 1, url_encode(csp->http->path), 0);\n      if (!err)\n      {\n         const char *block_reason;\n         if (csp->action->string[ACTION_STRING_BLOCK] != NULL)\n         {\n            block_reason = csp->action->string[ACTION_STRING_BLOCK];\n         }\n         else\n         {\n            assert(connect_port_is_forbidden(csp));\n            block_reason = \"Forbidden CONNECT port.\";\n         }\n         err = map(exports, \"block-reason\", 1, html_encode(block_reason), 0);\n      }\n      if (err)\n      {\n         free_map(exports);\n         free_http_response(rsp);\n         return cgi_error_memory();\n      }\n\n      err = template_fill_for_cgi(csp, \"blocked\", exports, rsp);\n      if (err)\n      {\n         free_http_response(rsp);\n         return cgi_error_memory();\n      }\n   }\n   rsp->crunch_reason = BLOCKED;\n\n   return finish_http_response(csp, rsp);\n\n}\n\n\n#ifdef FEATURE_TRUST\n/*********************************************************************\n *\n * Function    :  trust_url FIXME: I should be called distrust_url\n *\n * Description :  Calls is_untrusted_url to determine if the URL is trusted\n *                and if not, returns a HTTP 403 response with a reject message.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  NULL => trusted, else http_response.\n *\n *********************************************************************/\nstruct http_response *trust_url(struct client_state *csp)\n{\n   struct http_response *rsp;\n   struct map * exports;\n   char buf[BUFFER_SIZE];\n   char *p;\n   struct pattern_spec **tl;\n   struct pattern_spec *t;\n   jb_err err;\n\n   /*\n    * Don't bother to work on trusted URLs\n    */\n   if (!is_untrusted_url(csp))\n   {\n      return NULL;\n   }\n\n   /*\n    * Else, prepare a response:\n    */\n   if (NULL == (rsp = alloc_http_response()))\n   {\n      return cgi_error_memory();\n   }\n\n   rsp->status = strdup_or_die(\"403 Request blocked by Privoxy\");\n   exports = default_exports(csp, NULL);\n   if (exports == NULL)\n   {\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Export the protocol, host, port, and referrer information\n    */\n   err = map(exports, \"hostport\", 1, csp->http->hostport, 1);\n   if (!err) err = map(exports, \"protocol\", 1, csp->http->ssl ? \"https://\" : \"http://\", 1);\n   if (!err) err = map(exports, \"path\", 1, csp->http->path, 1);\n\n   if (NULL != (p = get_header_value(csp->headers, \"Referer:\")))\n   {\n      if (!err) err = map(exports, \"referrer\", 1, html_encode(p), 0);\n   }\n   else\n   {\n      if (!err) err = map(exports, \"referrer\", 1, \"none set\", 1);\n   }\n\n   if (err)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Export the trust list\n    */\n   p = strdup_or_die(\"\");\n   for (tl = csp->config->trust_list; (t = *tl) != NULL ; tl++)\n   {\n      snprintf(buf, sizeof(buf), \"<li>%s</li>\\n\", t->spec);\n      string_append(&p, buf);\n   }\n   err = map(exports, \"trusted-referrers\", 1, p, 0);\n\n   if (err)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Export the trust info, if available\n    */\n   if (csp->config->trust_info->first)\n   {\n      struct list_entry *l;\n\n      p = strdup_or_die(\"\");\n      for (l = csp->config->trust_info->first; l ; l = l->next)\n      {\n         snprintf(buf, sizeof(buf), \"<li> <a href=\\\"%s\\\">%s</a><br>\\n\", l->str, l->str);\n         string_append(&p, buf);\n      }\n      err = map(exports, \"trust-info\", 1, p, 0);\n   }\n   else\n   {\n      err = map_block_killer(exports, \"have-trust-info\");\n   }\n\n   if (err)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Export the force conditional block killer if\n    *\n    * - Privoxy was compiled without FEATURE_FORCE_LOAD, or\n    * - Privoxy is configured to enforce blocks, or\n    * - it's a CONNECT request and enforcing wouldn't work anyway.\n    */\n#ifdef FEATURE_FORCE_LOAD\n   if ((csp->config->feature_flags & RUNTIME_FEATURE_ENFORCE_BLOCKS)\n    || (0 == strcmpic(csp->http->gpc, \"connect\")))\n   {\n      err = map_block_killer(exports, \"force-support\");\n   }\n   else\n   {\n      err = map(exports, \"force-prefix\", 1, FORCE_PREFIX, 1);\n   }\n#else /* ifndef FEATURE_FORCE_LOAD */\n   err = map_block_killer(exports, \"force-support\");\n#endif /* ndef FEATURE_FORCE_LOAD */\n\n   if (err)\n   {\n      free_map(exports);\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n\n   /*\n    * Build the response\n    */\n   err = template_fill_for_cgi(csp, \"untrusted\", exports, rsp);\n   if (err)\n   {\n      free_http_response(rsp);\n      return cgi_error_memory();\n   }\n   rsp->crunch_reason = UNTRUSTED;\n\n   return finish_http_response(csp, rsp);\n}\n#endif /* def FEATURE_TRUST */\n\n\n/*********************************************************************\n *\n * Function    :  compile_dynamic_pcrs_job_list\n *\n * Description :  Compiles a dynamic pcrs job list (one with variables\n *                resolved at request time)\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  b = The filter list to compile\n *\n * Returns     :  NULL in case of errors, otherwise the\n *                pcrs job list.\n *\n *********************************************************************/\npcrs_job *compile_dynamic_pcrs_job_list(const struct client_state *csp, const struct re_filterfile_spec *b)\n{\n   struct list_entry *pattern;\n   pcrs_job *job_list = NULL;\n   pcrs_job *dummy = NULL;\n   pcrs_job *lastjob = NULL;\n   int error = 0;\n\n   const struct pcrs_variable variables[] =\n   {\n      {\"url\",    csp->http->url,   1},\n      {\"path\",   csp->http->path,  1},\n      {\"host\",   csp->http->host,  1},\n      {\"origin\", csp->ip_addr_str, 1},\n      {NULL,     NULL,             1}\n   };\n\n   for (pattern = b->patterns->first; pattern != NULL; pattern = pattern->next)\n   {\n      assert(pattern->str != NULL);\n\n      dummy = pcrs_compile_dynamic_command(pattern->str, variables, &error);\n      if (NULL == dummy)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Compiling dynamic pcrs job '%s' for '%s' failed with error code %d: %s\",\n            pattern->str, b->name, error, pcrs_strerror(error));\n         continue;\n      }\n      else\n      {\n         if (error == PCRS_WARN_TRUNCATION)\n         {\n            log_error(LOG_LEVEL_ERROR,\n               \"At least one of the variables in \\'%s\\' had to \"\n               \"be truncated before compilation\", pattern->str);\n         }\n         if (job_list == NULL)\n         {\n            job_list = dummy;\n         }\n         else\n         {\n            lastjob->next = dummy;\n         }\n         lastjob = dummy;\n      }\n   }\n\n   return job_list;\n}\n\n\n/*********************************************************************\n *\n * Function    :  rewrite_url\n *\n * Description :  Rewrites a URL with a single pcrs command\n *                and returns the result if it differs from the\n *                original and isn't obviously invalid.\n *\n * Parameters  :\n *          1  :  old_url = URL to rewrite.\n *          2  :  pcrs_command = pcrs command formatted as string (s@foo@bar@)\n *\n *\n * Returns     :  NULL if the pcrs_command didn't change the url, or\n *                the result of the modification.\n *\n *********************************************************************/\nchar *rewrite_url(char *old_url, const char *pcrs_command)\n{\n   char *new_url = NULL;\n   int hits;\n\n   assert(old_url);\n   assert(pcrs_command);\n\n   new_url = pcrs_execute_single_command(old_url, pcrs_command, &hits);\n\n   if (hits == 0)\n   {\n      log_error(LOG_LEVEL_REDIRECTS,\n         \"pcrs command \\\"%s\\\" didn't change \\\"%s\\\".\",\n         pcrs_command, old_url);\n      freez(new_url);\n   }\n   else if (hits < 0)\n   {\n      log_error(LOG_LEVEL_REDIRECTS,\n         \"executing pcrs command \\\"%s\\\" to rewrite %s failed: %s\",\n         pcrs_command, old_url, pcrs_strerror(hits));\n      freez(new_url);\n   }\n   else if (strncmpic(new_url, \"http://\", 7) && strncmpic(new_url, \"https://\", 8))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"pcrs command \\\"%s\\\" changed \\\"%s\\\" to \\\"%s\\\" (%u hi%s), \"\n         \"but the result doesn't look like a valid URL and will be ignored.\",\n         pcrs_command, old_url, new_url, hits, (hits == 1) ? \"t\" : \"ts\");\n      freez(new_url);\n   }\n   else\n   {\n      log_error(LOG_LEVEL_REDIRECTS,\n         \"pcrs command \\\"%s\\\" changed \\\"%s\\\" to \\\"%s\\\" (%u hi%s).\",\n         pcrs_command, old_url, new_url, hits, (hits == 1) ? \"t\" : \"ts\");\n   }\n\n   return new_url;\n\n}\n\n\n#ifdef FEATURE_FAST_REDIRECTS\n/*********************************************************************\n *\n * Function    :  get_last_url\n *\n * Description :  Search for the last URL inside a string.\n *                If the string already is a URL, it will\n *                be the first URL found.\n *\n * Parameters  :\n *          1  :  subject = the string to check\n *          2  :  redirect_mode = +fast-redirect{} mode\n *\n * Returns     :  NULL if no URL was found, or\n *                the last URL found.\n *\n *********************************************************************/\nchar *get_last_url(char *subject, const char *redirect_mode)\n{\n   char *new_url = NULL;\n   char *tmp;\n\n   assert(subject);\n   assert(redirect_mode);\n\n   subject = strdup(subject);\n   if (subject == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Out of memory while searching for redirects.\");\n      return NULL;\n   }\n\n   if (0 == strcmpic(redirect_mode, \"check-decoded-url\") && strchr(subject, '%'))\n   {  \n      char *url_segment = NULL;\n      char **url_segments;\n      size_t max_segments;\n      int segments;\n\n      log_error(LOG_LEVEL_REDIRECTS,\n         \"Checking \\\"%s\\\" for encoded redirects.\", subject);\n\n      /*\n       * Check each parameter in the URL separately.\n       * Sectionize the URL at \"?\" and \"&\",\n       * go backwards through the segments, URL-decode them\n       * and look for a URL in the decoded result.\n       * Stop the search after the first match.\n       *\n       * XXX: This estimate is guaranteed to be high enough as we\n       *      let ssplit() ignore empty fields, but also a bit wasteful.\n       */\n      max_segments = strlen(subject) / 2;\n      url_segments = malloc(max_segments * sizeof(char *));\n\n      if (NULL == url_segments)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Out of memory while decoding URL: %s\", subject);\n         freez(subject);\n         return NULL;\n      }\n\n      segments = ssplit(subject, \"?&\", url_segments, max_segments);\n\n      while (segments-- > 0)\n      {\n         char *dtoken = url_decode(url_segments[segments]);\n         if (NULL == dtoken)\n         {\n            log_error(LOG_LEVEL_ERROR, \"Unable to decode \\\"%s\\\".\", url_segments[segments]);\n            continue;\n         }\n         url_segment = strstr(dtoken, \"http://\");\n         if (NULL == url_segment)\n         {\n            url_segment = strstr(dtoken, \"https://\");\n         }\n         if (NULL != url_segment)\n         {\n            url_segment = strdup_or_die(url_segment);\n            freez(dtoken);\n            break;\n         }\n         freez(dtoken);\n      }\n      freez(subject);\n      freez(url_segments);\n\n      if (url_segment == NULL)\n      {\n         return NULL;\n      }\n      subject = url_segment;\n   }\n   else\n   {\n      /* Look for a URL inside this one, without decoding anything. */\n      log_error(LOG_LEVEL_REDIRECTS,\n         \"Checking \\\"%s\\\" for unencoded redirects.\", subject);\n   }\n\n   /*\n    * Find the last URL encoded in the request\n    */\n   tmp = subject;\n   while ((tmp = strstr(tmp, \"http://\")) != NULL)\n   {\n      new_url = tmp++;\n   }\n   tmp = (new_url != NULL) ? new_url : subject;\n   while ((tmp = strstr(tmp, \"https://\")) != NULL)\n   {\n      new_url = tmp++;\n   }\n\n   if ((new_url != NULL)\n      && (  (new_url != subject)\n         || (0 == strncmpic(subject, \"http://\", 7))\n         || (0 == strncmpic(subject, \"https://\", 8))\n         ))\n   {\n      /*\n       * Return new URL if we found a redirect\n       * or if the subject already was a URL.\n       *\n       * The second case makes sure that we can\n       * chain get_last_url after another redirection check\n       * (like rewrite_url) without losing earlier redirects.\n       */\n      new_url = strdup(new_url);\n      freez(subject);\n      return new_url;\n   }\n\n   freez(subject);\n   return NULL;\n\n}\n#endif /* def FEATURE_FAST_REDIRECTS */\n\n\n/*********************************************************************\n *\n * Function    :  redirect_url\n *\n * Description :  Checks if Privoxy should answer the request with\n *                a HTTP redirect and generates the redirect if\n *                necessary.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  NULL if the request can pass, HTTP redirect otherwise.\n *\n *********************************************************************/\nstruct http_response *redirect_url(struct client_state *csp)\n{\n   struct http_response *rsp;\n#ifdef FEATURE_FAST_REDIRECTS\n   /*\n    * XXX: Do we still need FEATURE_FAST_REDIRECTS\n    * as compile-time option? The user can easily disable\n    * it in his action file.\n    */\n   char * redirect_mode;\n#endif /* def FEATURE_FAST_REDIRECTS */\n   char *old_url = NULL;\n   char *new_url = NULL;\n   char *redirection_string;\n\n   if ((csp->action->flags & ACTION_REDIRECT))\n   {\n      redirection_string = csp->action->string[ACTION_STRING_REDIRECT];\n\n      /*\n       * If the redirection string begins with 's',\n       * assume it's a pcrs command, otherwise treat it as\n       * properly formatted URL and use it for the redirection\n       * directly.\n       *\n       * According to (the now obsolete) RFC 2616 section 14.30\n       * the URL has to be absolute and if the user tries:\n       * +redirect{sadly/this/will/be/parsed/as/pcrs_command.html}\n       * she would get undefined results anyway.\n       *\n       * RFC 7231 7.1.2 actually allows relative references,\n       * but those start with a leading slash (RFC 3986 4.2) and\n       * thus can't be mistaken for pcrs commands either.\n       */\n\n      if (*redirection_string == 's')\n      {\n         old_url = csp->http->url;\n         new_url = rewrite_url(old_url, redirection_string);\n      }\n      else\n      {\n         log_error(LOG_LEVEL_REDIRECTS,\n            \"No pcrs command recognized, assuming that \\\"%s\\\" is already properly formatted.\",\n            redirection_string);\n         new_url = strdup(redirection_string);\n      }\n   }\n\n#ifdef FEATURE_FAST_REDIRECTS\n   if ((csp->action->flags & ACTION_FAST_REDIRECTS))\n   {\n      redirect_mode = csp->action->string[ACTION_STRING_FAST_REDIRECTS];\n\n      /*\n       * If it exists, use the previously rewritten URL as input\n       * otherwise just use the old path.\n       */\n      old_url = (new_url != NULL) ? new_url : strdup(csp->http->path);\n      new_url = get_last_url(old_url, redirect_mode);\n      freez(old_url);\n   }\n\n   /*\n    * Disable redirect checkers, so that they\n    * will be only run more than once if the user\n    * also enables them through tags.\n    *\n    * From a performance point of view\n    * it doesn't matter, but the duplicated\n    * log messages are annoying.\n    */\n   csp->action->flags &= ~ACTION_FAST_REDIRECTS;\n#endif /* def FEATURE_FAST_REDIRECTS */\n   csp->action->flags &= ~ACTION_REDIRECT;\n\n   /* Did any redirect action trigger? */\n   if (new_url)\n   {\n      if (url_requires_percent_encoding(new_url))\n      {\n         char *encoded_url;\n         log_error(LOG_LEVEL_REDIRECTS, \"Percent-encoding redirect URL: %N\",\n            strlen(new_url), new_url);\n         encoded_url = percent_encode_url(new_url);\n         freez(new_url);\n         if (encoded_url == NULL)\n         {\n            return cgi_error_memory();\n         }\n         new_url = encoded_url;\n         assert(FALSE == url_requires_percent_encoding(new_url));\n      }\n\n      if (0 == strcmpic(new_url, csp->http->url))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"New URL \\\"%s\\\" and old URL \\\"%s\\\" are the same. Redirection loop prevented.\",\n            csp->http->url, new_url);\n            freez(new_url);\n      }\n      else\n      {\n         log_error(LOG_LEVEL_REDIRECTS, \"New URL is: %s\", new_url);\n\n         if (NULL == (rsp = alloc_http_response()))\n         {\n            freez(new_url);\n            return cgi_error_memory();\n         }\n\n         rsp->status = strdup_or_die(\"302 Local Redirect from Privoxy\");\n         if (enlist_unique_header(rsp->headers, \"Location\", new_url))\n         {\n            freez(new_url);\n            free_http_response(rsp);\n            return cgi_error_memory();\n         }\n         rsp->crunch_reason = REDIRECTED;\n         freez(new_url);\n\n         return finish_http_response(csp, rsp);\n      }\n   }\n\n   /* Only reached if no redirect is required */\n   return NULL;\n\n}\n\n\n#ifdef FEATURE_IMAGE_BLOCKING\n/*********************************************************************\n *\n * Function    :  is_imageurl\n *\n * Description :  Given a URL, decide whether it is an image or not,\n *                using either the info from a previous +image action\n *                or, #ifdef FEATURE_IMAGE_DETECT_MSIE, and the browser\n *                is MSIE and not on a Mac, tell from the browser's accept\n *                header.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  True (nonzero) if URL is an image, false (0)\n *                otherwise\n *\n *********************************************************************/\nint is_imageurl(const struct client_state *csp)\n{\n#ifdef FEATURE_IMAGE_DETECT_MSIE\n   char *tmp;\n\n   tmp = get_header_value(csp->headers, \"User-Agent:\");\n   if (tmp && strstr(tmp, \"MSIE\") && !strstr(tmp, \"Mac_\"))\n   {\n      tmp = get_header_value(csp->headers, \"Accept:\");\n      if (tmp && strstr(tmp, \"image/gif\"))\n      {\n         /* Client will accept HTML.  If this seems counterintuitive,\n          * blame Microsoft.\n          */\n         return(0);\n      }\n      else\n      {\n         return(1);\n      }\n   }\n#endif /* def FEATURE_IMAGE_DETECT_MSIE */\n\n   return ((csp->action->flags & ACTION_IMAGE) != 0);\n\n}\n#endif /* def FEATURE_IMAGE_BLOCKING */\n\n\n#ifdef FEATURE_TRUST\n/*********************************************************************\n *\n * Function    :  is_untrusted_url\n *\n * Description :  Should we \"distrust\" this URL (and block it)?\n *\n *                Yes if it matches a line in the trustfile, or if the\n *                    referrer matches a line starting with \"+\" in the\n *                    trustfile.\n *                No  otherwise.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  0 => trusted, 1 => untrusted\n *\n *********************************************************************/\nint is_untrusted_url(const struct client_state *csp)\n{\n   struct file_list *fl;\n   struct block_spec *b;\n   struct pattern_spec **trusted_url;\n   struct http_request rhttp[1];\n   const char * referer;\n   jb_err err;\n\n   /*\n    * If we don't have a trustlist, we trust everybody\n    */\n   if (((fl = csp->tlist) == NULL) || ((b  = fl->f) == NULL))\n   {\n      return 0;\n   }\n\n   memset(rhttp, '\\0', sizeof(*rhttp));\n\n   /*\n    * Do we trust the request URL itself?\n    */\n   for (b = b->next; b ; b = b->next)\n   {\n      if (url_match(b->url, csp->http))\n      {\n         return b->reject;\n      }\n   }\n\n   if (NULL == (referer = get_header_value(csp->headers, \"Referer:\")))\n   {\n      /* no referrer was supplied */\n      return 1;\n   }\n\n\n   /*\n    * If not, do we maybe trust its referrer?\n    */\n   err = parse_http_url(referer, rhttp, REQUIRE_PROTOCOL);\n   if (err)\n   {\n      return 1;\n   }\n\n   for (trusted_url = csp->config->trust_list; *trusted_url != NULL; trusted_url++)\n   {\n      if (url_match(*trusted_url, rhttp))\n      {\n         /* if the URL's referrer is from a trusted referrer, then\n          * add the target spec to the trustfile as an unblocked\n          * domain and return 0 (which means it's OK).\n          */\n\n         FILE *fp;\n\n         if (NULL != (fp = fopen(csp->config->trustfile, \"a\")))\n         {\n            char * path;\n            char * path_end;\n            char * new_entry = strdup_or_die(\"~\");\n\n            string_append(&new_entry, csp->http->hostport);\n\n            path = csp->http->path;\n            if ( (path[0] == '/')\n              && (path[1] == '~')\n              && ((path_end = strchr(path + 2, '/')) != NULL))\n            {\n               /* since this path points into a user's home space\n                * be sure to include this spec in the trustfile.\n                */\n               long path_len = path_end - path; /* save offset */\n               path = strdup(path); /* Copy string */\n               if (path != NULL)\n               {\n                  path_end = path + path_len; /* regenerate ptr to new buffer */\n                  *(path_end + 1) = '\\0'; /* Truncate path after '/' */\n               }\n               string_join(&new_entry, path);\n            }\n\n            /*\n             * Give a reason for generating this entry.\n             */\n            string_append(&new_entry, \" # Trusted referrer was: \");\n            string_append(&new_entry, referer);\n\n            if (new_entry != NULL)\n            {\n               if (-1 == fprintf(fp, \"%s\\n\", new_entry))\n               {\n                  log_error(LOG_LEVEL_ERROR, \"Failed to append \\'%s\\' to trustfile \\'%s\\': %E\",\n                     new_entry, csp->config->trustfile);\n               }\n               freez(new_entry);\n            }\n            else\n            {\n               /* FIXME: No way to handle out-of memory, so mostly ignoring it */\n               log_error(LOG_LEVEL_ERROR, \"Out of memory adding pattern to trust file\");\n            }\n\n            fclose(fp);\n         }\n         else\n         {\n            log_error(LOG_LEVEL_ERROR, \"Failed to append new entry for \\'%s\\' to trustfile \\'%s\\': %E\",\n               csp->http->hostport, csp->config->trustfile);\n         }\n         return 0;\n      }\n   }\n\n   return 1;\n}\n#endif /* def FEATURE_TRUST */\n\n\n/*********************************************************************\n *\n * Function    :  get_filter\n *\n * Description :  Get a filter with a given name and type.\n *                Note that taggers are filters, too.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  requested_name = Name of the content filter to get\n *          3  :  requested_type = Type of the filter to tagger to lookup\n *\n * Returns     :  A pointer to the requested filter\n *                or NULL if the filter wasn't found\n *\n *********************************************************************/\nstruct re_filterfile_spec *get_filter(const struct client_state *csp,\n                                      const char *requested_name,\n                                      enum filter_type requested_type)\n{\n   int i;\n   struct re_filterfile_spec *b;\n   struct file_list *fl;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n     fl = csp->rlist[i];\n     if ((NULL == fl) || (NULL == fl->f))\n     {\n        /*\n         * Either there are no filter files left or this\n         * filter file just contains no valid filters.\n         *\n         * Continue to be sure we don't miss valid filter\n         * files that are chained after empty or invalid ones.\n         */\n        continue;\n     }\n\n     for (b = fl->f; b != NULL; b = b->next)\n     {\n        if (b->type != requested_type)\n        {\n           /* The callers isn't interested in this filter type. */\n           continue;\n        }\n        if (strcmp(b->name, requested_name) == 0)\n        {\n           /* The requested filter has been found. Abort search. */\n           return b;\n        }\n     }\n   }\n\n   /* No filter with the given name and type exists. */\n   return NULL;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_filter_response\n *\n * Description :  Execute all text substitutions from all applying\n *                +filter actions on the text buffer that's been\n *                accumulated in csp->iob->buf.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  a pointer to the (newly allocated) modified buffer.\n *                or NULL if there were no hits or something went wrong\n *\n *********************************************************************/\nstatic char *pcrs_filter_response(struct client_state *csp)\n{\n   int hits = 0;\n   size_t size, prev_size;\n\n   char *old = NULL;\n   char *new = NULL;\n   pcrs_job *job;\n\n   struct re_filterfile_spec *b;\n   struct list_entry *filtername;\n\n   /*\n    * Sanity first\n    */\n   if (csp->iob->cur >= csp->iob->eod)\n   {\n      return(NULL);\n   }\n\n   if (filters_available(csp) == FALSE)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Inconsistent configuration: \"\n         \"content filtering enabled, but no content filters available.\");\n      return(NULL);\n   }\n\n   size = (size_t)(csp->iob->eod - csp->iob->cur);\n   old = csp->iob->cur;\n\n   /*\n    * For all applying +filter actions, look if a filter by that\n    * name exists and if yes, execute it's pcrs_joblist on the\n    * buffer.\n    */\n   for (filtername = csp->action->multi[ACTION_MULTI_FILTER]->first;\n        filtername != NULL; filtername = filtername->next)\n   {\n      int current_hits = 0; /* Number of hits caused by this filter */\n      int job_number   = 0; /* Which job we're currently executing  */\n      int job_hits     = 0; /* How many hits the current job caused */\n      pcrs_job *joblist;\n\n      b = get_filter(csp, filtername->str, FT_CONTENT_FILTER);\n      if (b == NULL)\n      {\n         continue;\n      }\n\n      joblist = b->joblist;\n\n      if (b->dynamic) joblist = compile_dynamic_pcrs_job_list(csp, b);\n\n      if (NULL == joblist)\n      {\n         log_error(LOG_LEVEL_RE_FILTER, \"Filter %s has empty joblist. Nothing to do.\", b->name);\n         continue;\n      }\n\n      prev_size = size;\n      /* Apply all jobs from the joblist */\n      for (job = joblist; NULL != job; job = job->next)\n      {\n         job_number++;\n         job_hits = pcrs_execute(job, old, size, &new, &size);\n\n         if (job_hits >= 0)\n         {\n            /*\n             * That went well. Continue filtering\n             * and use the result of this job as\n             * input for the next one.\n             */\n            current_hits += job_hits;\n            if (old != csp->iob->cur)\n            {\n               freez(old);\n            }\n            old = new;\n         }\n         else\n         {\n            /*\n             * This job caused an unexpected error. Inform the user\n             * and skip the rest of the jobs in this filter. We could\n             * continue with the next job, but usually the jobs\n             * depend on each other or are similar enough to\n             * fail for the same reason.\n             *\n             * At the moment our pcrs expects the error codes of pcre 3.4,\n             * but newer pcre versions can return additional error codes.\n             * As a result pcrs_strerror()'s error message might be\n             * \"Unknown error ...\", therefore we print the numerical value\n             * as well.\n             *\n             * XXX: Is this important enough for LOG_LEVEL_ERROR or\n             * should we use LOG_LEVEL_RE_FILTER instead?\n             */\n            log_error(LOG_LEVEL_ERROR, \"Skipped filter \\'%s\\' after job number %u: %s (%d)\",\n               b->name, job_number, pcrs_strerror(job_hits), job_hits);\n            break;\n         }\n      }\n\n      if (b->dynamic) pcrs_free_joblist(joblist);\n\n      log_error(LOG_LEVEL_RE_FILTER,\n         \"filtering %s%s (size %d) with \\'%s\\' produced %d hits (new size %d).\",\n         csp->http->hostport, csp->http->path, prev_size, b->name, current_hits, size);\n\n      hits += current_hits;\n   }\n\n   /*\n    * If there were no hits, destroy our copy and let\n    * chat() use the original in csp->iob\n    */\n   if (!hits)\n   {\n      freez(new);\n      return(NULL);\n   }\n\n   csp->flags |= CSP_FLAG_MODIFIED;\n   csp->content_length = size;\n   clear_iob(csp->iob);\n\n   return(new);\n\n}\n\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n/*********************************************************************\n *\n * Function    :  get_external_filter\n *\n * Description :  Lookup the code to execute for an external filter.\n *                Masks the misuse of the re_filterfile_spec.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  name = Name of the content filter to get\n *\n * Returns     :  A pointer to the requested code\n *                or NULL if the filter wasn't found\n *\n *********************************************************************/\nstatic const char *get_external_filter(const struct client_state *csp,\n                                const char *name)\n{\n   struct re_filterfile_spec *external_filter;\n\n   external_filter = get_filter(csp, name, FT_EXTERNAL_CONTENT_FILTER);\n   if (external_filter == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Didn't find stuff to execute for external filter: %s\",\n         name);\n   }\n\n   return external_filter->patterns->first->str;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  set_privoxy_variables\n *\n * Description :  Sets a couple of privoxy-specific environment variables\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void set_privoxy_variables(const struct client_state *csp)\n{\n   int i;\n   struct {\n      const char *name;\n      const char *value;\n   } env[] = {\n      { \"PRIVOXY_URL\",    csp->http->url   },\n      { \"PRIVOXY_PATH\",   csp->http->path  },\n      { \"PRIVOXY_HOST\",   csp->http->host  },\n      { \"PRIVOXY_ORIGIN\", csp->ip_addr_str },\n   };\n\n   for (i = 0; i < SZ(env); i++)\n   {\n      if (setenv(env[i].name, env[i].value, 1))\n      {\n         log_error(LOG_LEVEL_ERROR, \"Failed to set %s=%s: %E\",\n            env[i].name, env[i].value);\n      }\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  execute_external_filter\n *\n * Description :  Pipe content into external filter and return the output\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  name = Name of the external filter to execute\n *          3  :  content = The original content to filter\n *          4  :  size = The size of the content buffer\n *\n * Returns     :  a pointer to the (newly allocated) modified buffer.\n *                or NULL if there were no hits or something went wrong\n *\n *********************************************************************/\nstatic char *execute_external_filter(const struct client_state *csp,\n   const char *name, char *content, size_t *size)\n{\n   char cmd[200];\n   char file_name[FILENAME_MAX];\n   FILE *fp;\n   char *filter_output;\n   int fd;\n   int ret;\n   size_t new_size;\n   const char *external_filter;\n\n   if (csp->config->temporary_directory == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"No temporary-directory configured. Can't execute filter: %s\",\n         name);\n      return NULL;\n   }\n\n   external_filter = get_external_filter(csp, name);\n\n   if (sizeof(file_name) < snprintf(file_name, sizeof(file_name),\n         \"%s/privoxy-XXXXXXXX\", csp->config->temporary_directory))\n   {\n      log_error(LOG_LEVEL_ERROR, \"temporary-directory path too long\");\n      return NULL;\n   }\n\n   fd = mkstemp(file_name);\n   if (fd == -1)\n   {\n      log_error(LOG_LEVEL_ERROR, \"mkstemp() failed to create %s: %E\", file_name);\n      return NULL;\n   }\n\n   fp = fdopen(fd, \"w\");\n   if (fp == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"fdopen() failed: %E\");\n      unlink(file_name);\n      return NULL;\n   }\n\n   /*\n    * The size may be zero if a previous filter discarded everything.\n    *\n    * This isn't necessary unintentional, so we just don't try\n    * to fwrite() nothing and let the user deal with the rest.\n    */\n   if ((*size != 0) && fwrite(content, *size, 1, fp) != 1)\n   {\n      log_error(LOG_LEVEL_ERROR, \"fwrite(..., %d, 1, ..) failed: %E\", *size);\n      unlink(file_name);\n      fclose(fp);\n      return NULL;\n   }\n   fclose(fp);\n\n   if (sizeof(cmd) < snprintf(cmd, sizeof(cmd), \"%s < %s\", external_filter, file_name))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"temporary-directory or external filter path too long\");\n      unlink(file_name);\n      return NULL;\n   }\n\n   log_error(LOG_LEVEL_RE_FILTER, \"Executing '%s': %s\", name, cmd);\n\n   /*\n    * The locking is necessary to prevent other threads\n    * from overwriting the environment variables before\n    * the popen fork. Afterwards this no longer matters.\n    */\n   privoxy_mutex_lock(&external_filter_mutex);\n   set_privoxy_variables(csp);\n   fp = popen(cmd, \"r\");\n   privoxy_mutex_unlock(&external_filter_mutex);\n   if (fp == NULL)\n   {\n      log_error(LOG_LEVEL_ERROR, \"popen(\\\"%s\\\", \\\"r\\\") failed: %E\", cmd);\n      unlink(file_name);\n      return NULL;\n   }\n\n   /* Allocate at least one byte */\n   filter_output = malloc_or_die(*size + 1);\n\n   new_size = 0;\n   while (!feof(fp) && !ferror(fp))\n   {\n      size_t len;\n      /* Could be bigger ... */\n      enum { READ_LENGTH = 2048 };\n\n      if (new_size + READ_LENGTH >= *size)\n      {\n         char *p;\n\n         /* Could be considered wasteful if the content is 'large'. */\n         *size += (*size >= READ_LENGTH) ? *size : READ_LENGTH;\n\n         p = realloc(filter_output, *size);\n         if (p == NULL)\n         {\n            log_error(LOG_LEVEL_ERROR, \"Out of memory while reading \"\n               \"external filter output. Using what we got so far.\");\n            break;\n         }\n         filter_output = p;\n      }\n      assert(new_size + READ_LENGTH < *size);\n      len = fread(&filter_output[new_size], 1, READ_LENGTH, fp);\n      if (len > 0)\n      {\n         new_size += len;\n      }\n   }\n\n   ret = pclose(fp);\n   if (ret == -1)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Executing %s failed: %E\", cmd);\n   }\n   else\n   {\n      log_error(LOG_LEVEL_RE_FILTER,\n         \"Executing '%s' resulted in return value %d. \"\n         \"Read %d of up to %d bytes.\", name, (ret >> 8), new_size, *size);\n   }\n\n   unlink(file_name);\n   *size = new_size;\n\n   return filter_output;\n\n}\n#endif /* def FEATURE_EXTERNAL_FILTERS */\n\n\n/*********************************************************************\n *\n * Function    :  gif_deanimate_response\n *\n * Description :  Deanimate the GIF image that has been accumulated in\n *                csp->iob->buf, set csp->content_length to the modified\n *                size and raise the CSP_FLAG_MODIFIED flag.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  a pointer to the (newly allocated) modified buffer.\n *                or NULL in case something went wrong.\n *\n *********************************************************************/\nstatic char *gif_deanimate_response(struct client_state *csp)\n{\n   struct binbuffer *in, *out;\n   char *p;\n   size_t size;\n\n   size = (size_t)(csp->iob->eod - csp->iob->cur);\n\n   if (  (NULL == (in =  (struct binbuffer *)zalloc(sizeof *in )))\n      || (NULL == (out = (struct binbuffer *)zalloc(sizeof *out))) )\n   {\n      log_error(LOG_LEVEL_DEANIMATE, \"failed! (no mem)\");\n      return NULL;\n   }\n\n   in->buffer = csp->iob->cur;\n   in->size = size;\n\n   if (gif_deanimate(in, out, strncmp(\"last\", csp->action->string[ACTION_STRING_DEANIMATE], 4)))\n   {\n      log_error(LOG_LEVEL_DEANIMATE, \"failed! (gif parsing)\");\n      freez(in);\n      binbuf_free(out);\n      return(NULL);\n   }\n   else\n   {\n      if ((int)size == out->offset)\n      {\n         log_error(LOG_LEVEL_DEANIMATE, \"GIF not changed.\");\n      }\n      else\n      {\n         log_error(LOG_LEVEL_DEANIMATE, \"Success! GIF shrunk from %d bytes to %d.\", size, out->offset);\n      }\n      csp->content_length = out->offset;\n      csp->flags |= CSP_FLAG_MODIFIED;\n      p = out->buffer;\n      freez(in);\n      freez(out);\n      return(p);\n   }\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_filter_function\n *\n * Description :  Decides which content filter function has\n *                to be applied (if any). Only considers functions\n *                for internal filters which are mutually-exclusive.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  The content filter function to run, or\n *                NULL if no content filter is active\n *\n *********************************************************************/\nstatic filter_function_ptr get_filter_function(const struct client_state *csp)\n{\n   filter_function_ptr filter_function = NULL;\n\n   /*\n    * Choose the applying filter function based on\n    * the content type and action settings.\n    */\n   if ((csp->content_type & CT_TEXT) &&\n       (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER])))\n   {\n      filter_function = pcrs_filter_response;\n   }\n   else if ((csp->content_type & CT_GIF) &&\n            (csp->action->flags & ACTION_DEANIMATE))\n   {\n      filter_function = gif_deanimate_response;\n   }\n\n   return filter_function;\n}\n\n\n/*********************************************************************\n *\n * Function    :  remove_chunked_transfer_coding\n *\n * Description :  In-situ remove the \"chunked\" transfer coding as defined\n *                in RFC 7230 4.1 from a buffer. XXX: The implementation\n *                is neither complete nor compliant (TODO #129).\n *\n * Parameters  :\n *          1  :  buffer = Pointer to the text buffer\n *          2  :  size =  In: Number of bytes to be processed,\n *                       Out: Number of bytes after de-chunking.\n *                       (undefined in case of errors)\n *\n * Returns     :  JB_ERR_OK for success,\n *                JB_ERR_PARSE otherwise\n *\n *********************************************************************/\nstatic jb_err remove_chunked_transfer_coding(char *buffer, size_t *size)\n{\n   size_t newsize = 0;\n   unsigned int chunksize = 0;\n   char *from_p, *to_p;\n   const char *end_of_buffer = buffer + *size;\n\n   assert(buffer);\n   from_p = to_p = buffer;\n\n   if (sscanf(buffer, \"%x\", &chunksize) != 1)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Invalid first chunksize while stripping \\\"chunked\\\" transfer coding\");\n      return JB_ERR_PARSE;\n   }\n\n   while (chunksize > 0U)\n   {\n      /*\n       * If the chunk-size is valid, we should have at least\n       * chunk-size bytes of chunk-data and five bytes of\n       * meta data (chunk-size, CRLF, CRLF) left in the buffer.\n       */\n      if (chunksize + 5 >= *size - newsize)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Chunk size %u exceeds buffered data left. \"\n            \"Already digested %u of %u buffered bytes.\",\n            chunksize, (unsigned int)newsize, (unsigned int)*size);\n         return JB_ERR_PARSE;\n      }\n\n      /*\n       * Skip the chunk-size, the optional chunk-ext and the CRLF\n       * that is supposed to be located directly before the start\n       * of chunk-data.\n       */\n      if (NULL == (from_p = strstr(from_p, \"\\r\\n\")))\n      {\n         log_error(LOG_LEVEL_ERROR, \"Parse error while stripping \\\"chunked\\\" transfer coding\");\n         return JB_ERR_PARSE;\n      }\n      from_p += 2;\n\n      /*\n       * The previous strstr() does not enforce chunk-validity\n       * and is sattisfied as long a CRLF is left in the buffer.\n       *\n       * Make sure the bytes we consider chunk-data are within\n       * the valid range.\n       */\n      if (from_p + chunksize >= end_of_buffer)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"End of chunk is beyond the end of the buffer.\");\n         return JB_ERR_PARSE;\n      }\n\n      memmove(to_p, from_p, (size_t) chunksize);\n      newsize += chunksize;\n      to_p = buffer + newsize;\n      from_p += chunksize;\n\n      /*\n       * Not merging this check with the previous one allows us\n       * to keep chunks without trailing CRLF. It's not clear\n       * if we actually have to care about those, though.\n       */\n      if (from_p + 2 >= end_of_buffer)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Not enough room for trailing CRLF.\");\n         return JB_ERR_PARSE;\n      }\n      from_p += 2;\n      if (sscanf(from_p, \"%x\", &chunksize) != 1)\n      {\n         log_error(LOG_LEVEL_INFO, \"Invalid \\\"chunked\\\" transfer encoding detected and ignored.\");\n         break;\n      }\n   }\n\n   /* XXX: Should get its own loglevel. */\n   log_error(LOG_LEVEL_RE_FILTER, \"De-chunking successful. Shrunk from %d to %d\", *size, newsize);\n\n   *size = newsize;\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  prepare_for_filtering\n *\n * Description :  If necessary, de-chunks and decompresses\n *                the content so it can get filterd.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK for success,\n *                JB_ERR_PARSE otherwise\n *\n *********************************************************************/\nstatic jb_err prepare_for_filtering(struct client_state *csp)\n{\n   jb_err err = JB_ERR_OK;\n\n   /*\n    * If the body has a \"chunked\" transfer-encoding,\n    * get rid of it, adjusting size and iob->eod\n    */\n   if (csp->flags & CSP_FLAG_CHUNKED)\n   {\n      size_t size = (size_t)(csp->iob->eod - csp->iob->cur);\n\n      log_error(LOG_LEVEL_RE_FILTER, \"Need to de-chunk first\");\n      err = remove_chunked_transfer_coding(csp->iob->cur, &size);\n      if (JB_ERR_OK == err)\n      {\n         csp->iob->eod = csp->iob->cur + size;\n         csp->flags |= CSP_FLAG_MODIFIED;\n      }\n      else\n      {\n         return JB_ERR_PARSE;\n      }\n   }\n\n#ifdef FEATURE_ZLIB\n   /*\n    * If the body has a supported transfer-encoding,\n    * decompress it, adjusting size and iob->eod.\n    */\n   if (csp->content_type & (CT_GZIP|CT_DEFLATE))\n   {\n      if (0 == csp->iob->eod - csp->iob->cur)\n      {\n         /* Nothing left after de-chunking. */\n         return JB_ERR_OK;\n      }\n\n      err = decompress_iob(csp);\n\n      if (JB_ERR_OK == err)\n      {\n         csp->flags |= CSP_FLAG_MODIFIED;\n         csp->content_type &= ~CT_TABOO;\n      }\n      else\n      {\n         /*\n          * Unset CT_GZIP and CT_DEFLATE to remember not\n          * to modify the Content-Encoding header later.\n          */\n         csp->content_type &= ~CT_GZIP;\n         csp->content_type &= ~CT_DEFLATE;\n      }\n   }\n#endif\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  execute_content_filters\n *\n * Description :  Executes a given content filter.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  Pointer to the modified buffer, or\n *                NULL if filtering failed or wasn't necessary.\n *\n *********************************************************************/\nchar *execute_content_filters(struct client_state *csp)\n{\n   char *content;\n   filter_function_ptr content_filter;\n\n   assert(content_filters_enabled(csp->action));\n\n   if (0 == csp->iob->eod - csp->iob->cur)\n   {\n      /*\n       * No content (probably status code 301, 302 ...),\n       * no filtering necessary.\n       */\n      return NULL;\n   }\n\n   if (JB_ERR_OK != prepare_for_filtering(csp))\n   {\n      /*\n       * failed to de-chunk or decompress.\n       */\n      return NULL;\n   }\n\n   if (0 == csp->iob->eod - csp->iob->cur)\n   {\n      /*\n       * Clown alarm: chunked and/or compressed nothing delivered.\n       */\n      return NULL;\n   }\n\n   content_filter = get_filter_function(csp);\n   content = (content_filter != NULL) ? (*content_filter)(csp) : NULL;\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n   if ((csp->content_type & CT_TEXT) &&\n       !list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]))\n   {\n      struct list_entry *filtername;\n      size_t size = (size_t)csp->content_length;\n\n      if (content == NULL)\n      {\n         content = csp->iob->cur;\n         size = (size_t)(csp->iob->eod - csp->iob->cur);\n      }\n\n      for (filtername = csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER]->first;\n           filtername ; filtername = filtername->next)\n      {\n         char *result = execute_external_filter(csp, filtername->str, content, &size);\n         if (result != NULL)\n         {\n            if (content != csp->iob->cur)\n            {\n               free(content);\n            }\n            content = result;\n         }\n      }\n      csp->flags |= CSP_FLAG_MODIFIED;\n      csp->content_length = size;\n   }\n#endif /* def FEATURE_EXTERNAL_FILTERS */\n\n   return content;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_url_actions\n *\n * Description :  Gets the actions for this URL.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  http = http_request request for blocked URLs\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid get_url_actions(struct client_state *csp, struct http_request *http)\n{\n   struct file_list *fl;\n   struct url_actions *b;\n   int i;\n\n   init_current_action(csp->action);\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (((fl = csp->actions_list[i]) == NULL) || ((b = fl->f) == NULL))\n      {\n         return;\n      }\n\n       apply_url_actions(csp->action, csp, b);\n   }\n\n   return;\n}\n\n\n/*********************************************************************\n *\n * Function    :  apply_url_actions\n *\n * Description :  Applies a list of URL actions.\n *\n * Parameters  :\n *          1  :  action = Destination.\n *          2  :  http = Current URL\n *          3  :  b = list of URL actions to apply\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nint apply_url_actions(struct current_action_spec *action,\n                       struct client_state *csp,\n                       struct url_actions *b)\n{\n   if (b == NULL)\n   {\n      /* Should never happen */\n      return 0;\n   }\n\n    for (b = b->next; NULL != b; b = b->next)\n    {\n        if (url_match(b->url, csp->http))\n        {\n            merge_current_action(action, b->action);\n        }\n    }\n    return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_forward_override_settings\n *\n * Description :  Returns forward settings as specified with the\n *                forward-override{} action. forward-override accepts\n *                forward lines similar to the one used in the\n *                configuration file, but without the URL pattern.\n *\n *                For example:\n *\n *                   forward / .\n *\n *                in the configuration file can be replaced with\n *                the action section:\n *\n *                 {+forward-override{forward .}}\n *                 /\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  Pointer to forwarding structure in case of success.\n *                Invalid syntax is fatal.\n *\n *********************************************************************/\nstatic struct forward_spec *get_forward_override_settings(struct client_state *csp)\n{\n    const char *forward_override_line = csp->action->string[ACTION_STRING_FORWARD_OVERRIDE];\n    char forward_settings[BUFFER_SIZE];\n    char *http_parent = NULL;\n    /* variable names were chosen for consistency reasons. */\n    struct forward_spec *fwd = NULL;\n    int vec_count;\n    char *vec[3];\n\n    assert(csp->action->flags & ACTION_FORWARD_OVERRIDE);\n    /* Should be enforced by load_one_actions_file() */\n    assert(strlen(forward_override_line) < sizeof(forward_settings) - 1);\n\n    /* Create a copy ssplit can modify */\n    strlcpy(forward_settings, forward_override_line, sizeof(forward_settings));\n\n    if (NULL != csp->fwd && csp->fwd->should_unload)\n    {\n      /*\n       * XXX: Currently necessary to prevent memory\n       * leaks when the show-url-info cgi page is visited.\n       */\n      unload_forward_spec(csp->fwd);\n    }\n\n    /*\n    * allocate a new forward node, valid only for\n    * the lifetime of this request. Save its location\n    * in csp as well, so sweep() can free it later on.\n    */\n    fwd = csp->fwd = zalloc(sizeof(*fwd));\n    if (NULL == fwd)\n    {\n      log_error(LOG_LEVEL_FATAL,\n         \"can't allocate memory for forward-override{%s}\", forward_override_line);\n      /* Never get here - LOG_LEVEL_FATAL causes program exit */\n      return NULL;\n    }\n\n    fwd->should_unload = 1;\n\n    vec_count = ssplit(forward_settings, \" \\t\", vec, SZ(vec));\n    if ((vec_count == 2) && !strcasecmp(vec[0], \"forward\"))\n    {\n      fwd->type = SOCKS_NONE;\n\n      /* Parse the parent HTTP proxy host:port */\n      http_parent = vec[1];\n\n    }\n    else if ((vec_count == 2) && !strcasecmp(vec[0], \"forward-webserver\"))\n    {\n      fwd->type = FORWARD_WEBSERVER;\n\n      /* Parse the parent HTTP server host:port */\n      http_parent = vec[1];\n\n    }\n    else if (vec_count == 3)\n    {\n      char *socks_proxy = NULL;\n\n      if  (!strcasecmp(vec[0], \"forward-socks4\"))\n      {\n         fwd->type = SOCKS_4;\n         socks_proxy = vec[1];\n      }\n      else if (!strcasecmp(vec[0], \"forward-socks4a\"))\n      {\n         fwd->type = SOCKS_4A;\n         socks_proxy = vec[1];\n      }\n      else if (!strcasecmp(vec[0], \"forward-socks5\"))\n      {\n         fwd->type = SOCKS_5;\n         socks_proxy = vec[1];\n      }\n      else if (!strcasecmp(vec[0], \"forward-socks5t\"))\n      {\n         fwd->type = SOCKS_5T;\n         socks_proxy = vec[1];\n      }\n\n      if (NULL != socks_proxy)\n      {\n         /* Parse the SOCKS proxy host[:port] */\n         fwd->gateway_port = 1080;\n         parse_forwarder_address(socks_proxy,\n            &fwd->gateway_host, &fwd->gateway_port);\n\n         http_parent = vec[2];\n      }\n    }\n\n    if (NULL == http_parent)\n    {\n      log_error(LOG_LEVEL_FATAL,\n         \"Invalid forward-override syntax in: %s\", forward_override_line);\n      /* Never get here - LOG_LEVEL_FATAL causes program exit */\n    }\n\n    /* Parse http forwarding settings */\n    if (strcmp(http_parent, \".\") != 0)\n    {\n      fwd->forward_port = 8000;\n      parse_forwarder_address(http_parent,\n         &fwd->forward_host, &fwd->forward_port);\n    }\n\n    assert (NULL != fwd);\n\n    log_error(LOG_LEVEL_CONNECT,\n      \"Overriding forwarding settings based on \\'%s\\'\", forward_override_line);\n\n    return fwd;\n}\n\n//static struct forward_spec *get_forward_rule_settings(struct client_state *csp, struct url_actions *url_action, int which)\n//{\n//    const char *forward_override_line = url_action->action->string[which];\n//    char forward_settings[BUFFER_SIZE];\n//    char *http_parent = NULL;\n//    /* variable names were chosen for consistency reasons. */\n//    struct forward_spec *fwd = NULL;\n//    int vec_count;\n//    char *vec[3];\n//\n//    /* Should be enforced by load_one_actions_file() */\n//    assert(strlen(forward_override_line) < sizeof(forward_settings) - 1);\n//\n//    /* Create a copy ssplit can modify */\n//    strlcpy(forward_settings, forward_override_line, sizeof(forward_settings));\n//\n//    if (NULL != csp->fwd && csp->fwd->should_unload)\n//    {\n//        /*\n//         * XXX: Currently necessary to prevent memory\n//         * leaks when the show-url-info cgi page is visited.\n//         */\n//        unload_forward_spec(csp->fwd);\n//    }\n//\n//    vec_count = ssplit(forward_settings, \"@@\", vec, SZ(vec));\n//    if (vec_count != 2)\n//    {\n//        log_error(LOG_LEVEL_FATAL,\n//                  \"Invalid forward-url syntax in: %s\", forward_override_line);\n//        return NULL;\n//    }else {\n//        url_action->rule = forward_override_line;\n//        if (!strcasecmp(vec[0], \"PROXY\")) {\n//            return proxy_list;\n//        }else if (!strcasecmp(vec[0], \"BLOCK\")) {\n////            url_action->block = 1;\n//            csp->action->flags |= (ACTION_BLOCK | ACTION_HANDLE_AS_EMPTY_DOCUMENT);\n//            return NULL;\n//        }\n//    }\n//    return NULL;\n//}\n\nstruct forward_spec *get_forward_rule_settings_by_action(struct url_actions *url_action)\n{\n    if (url_action->routing == ROUTE_PROXY) {\n        return proxy_list;\n    }else if (url_action->routing == ROUTE_DIRECT) {\n        return fwd_default;\n    }\n    return NULL;\n}\n\n/*********************************************************************\n *\n * Function    :  forward_url\n *\n * Description :  Should we forward this to another proxy?\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  http = http_request request for current URL\n *\n * Returns     :  Pointer to forwarding information.\n *\n *********************************************************************/\nstruct forward_spec *forward_url(struct client_state *csp,\n                                       const struct http_request *http)\n{\n    fwd_default->is_default = 1;\n    csp->routing = ROUTE_NONE;\n    csp->current_forward_stage = FORWARD_STAGE_NONE;\n    struct forward_spec *fwd = NULL;\n\n    // Match forward in mume.action\n    log_time_stage(csp, TIME_STAGE_URL_RULE_MATCH_START);\n    struct url_actions *action = po_url_rules;\n    while (action != NULL) {\n        if (url_match(action->url, http))\n        {\n            break;\n        }\n        action = action->next;\n    }\n    log_time_stage(csp, TIME_STAGE_URL_RULE_MATCH_END);\n\n    if (action) {\n        csp->routing = action->routing;\n        char *rule = strdup_or_die(action->rule);\n        fwd = get_forward_rule_settings_by_action(action);\n        if (action->routing == ROUTE_PROXY && fwd == NULL) {\n            csp->routing = ROUTE_NONE;\n            if (string_append(&rule, \" (Ignore. No Proxy Provided.)\") != JB_ERR_OK) {\n                log_error(LOG_LEVEL_ERROR,\n                          \"Failed to append string when ignoring rule: memory issue\");\n            }\n        }\n        csp->rule = rule;\n        csp->current_forward_stage = FORWARD_STAGE_URL;\n    }\n\n    if (fwd != NULL) {\n        return fwd;\n    }\n\n    return fwd_default;\n}\n\nstruct url_actions *forward_ip_routing(struct sockaddr_in *addr)\n{\n    struct url_actions *action = po_ip_rules;\n\n    while (action != NULL) {\n        if (action->tree && radix32tree_find(action->tree, ntohl(addr->sin_addr.s_addr)) != RADIX_NO_VALUE) {\n            return action;\n        }else if (action->geoip != NULL) {\n            int mmdb_error;\n            MMDB_lookup_result_s result = MMDB_lookup_sockaddr(&mmdb, (struct sockaddr*)addr, &mmdb_error);\n            if (MMDB_SUCCESS == mmdb_error) {\n                MMDB_entry_data_s entry_data;\n                int status = MMDB_get_value(&result.entry, &entry_data, \"country\", \"iso_code\", NULL);\n                if (MMDB_SUCCESS == status) {\n                    if (entry_data.has_data) {\n                        if (strncmp(entry_data.utf8_string, action->geoip, MIN(entry_data.data_size, strlen(action->geoip))) == 0) {\n                            return action;\n                        }\n                    }\n                }\n            }\n        }\n        action = action->next;\n    }\n\n    return NULL;\n}\n\n\nstruct forward_spec *forward_ip(struct client_state *csp, struct sockaddr_storage addr)\n{\n    struct url_actions *action = forward_ip_routing((struct sockaddr_in *)&addr);\n\n    if (action == NULL) {\n        return NULL;\n    }\n\n    struct forward_spec *fwd = NULL;\n\n    csp->routing = action->routing;\n    csp->current_forward_stage = FORWARD_STAGE_IP;\n    fwd = get_forward_rule_settings_by_action(action);\n    char *rule = strdup_or_die(action->rule);\n    if (action->routing == ROUTE_PROXY && fwd == NULL) {\n        csp->routing = ROUTE_NONE;\n        if (string_append(&rule, \" (Ignore. No Proxy Provided.)\") != JB_ERR_OK) {\n            log_error(LOG_LEVEL_ERROR,\n                      \"Failed to append string when ignoringg IP: memory issue\");\n        }\n    }\n    csp->rule = rule;\n\n    return fwd;\n}\n\nstruct forward_spec *forward_dns_pollution_ip(struct client_state *csp, struct sockaddr_storage addr) {\n    struct forward_spec *fwd = NULL;\n\n    struct sockaddr_in *sin = (struct sockaddr_in *)&addr;\n\n    struct url_actions *action = po_dns_ip_rules;\n    while (action != NULL) {\n        if (action->tree && radix32tree_find(action->tree, ntohl(sin->sin_addr.s_addr)) != RADIX_NO_VALUE) {\n            csp->routing = action->routing;\n            csp->current_forward_stage = FORWARD_STAGE_DNS_POLLUTION;\n            fwd = get_forward_rule_settings_by_action(action);\n            char *rule = strdup_or_die(\"DNS Polluted\");\n            if (action->routing == ROUTE_PROXY) {\n                if (fwd == NULL) {\n                    csp->routing = ROUTE_NONE;\n                    if (string_append(&rule, \" (Ignore. No Proxy Provided.)\") != JB_ERR_OK) {\n                        log_error(LOG_LEVEL_ERROR,\n                                  \"Failed to append string when ignoring dns: memory issue\");\n                    }\n                }else {\n                    if (string_append(&rule, \". PROXY.\") != JB_ERR_OK) {\n                        log_error(LOG_LEVEL_ERROR,\n                                  \"Failed to append string when ignoring dns: memory issue\");\n                    }\n                }\n            }\n            csp->rule = rule;\n            break;\n        }\n        action = action->next;\n    }\n\n    return fwd;\n}\n\n\n/*********************************************************************\n *\n * Function    :  direct_response\n *\n * Description :  Check if Max-Forwards == 0 for an OPTIONS or TRACE\n *                request and if so, return a HTTP 501 to the client.\n *\n *                FIXME: I have a stupid name and I should handle the\n *                requests properly. Still, what we do here is rfc-\n *                compliant, whereas ignoring or forwarding are not.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  http_response if , NULL if nonmatch or handler fail\n *\n *********************************************************************/\nstruct http_response *direct_response(struct client_state *csp)\n{\n   struct http_response *rsp;\n   struct list_entry *p;\n\n   if ((0 == strcmpic(csp->http->gpc, \"trace\"))\n      || (0 == strcmpic(csp->http->gpc, \"options\")))\n   {\n      for (p = csp->headers->first; (p != NULL) ; p = p->next)\n      {\n         if (!strncmpic(p->str, \"Max-Forwards:\", 13))\n         {\n            unsigned int max_forwards;\n\n            /*\n             * If it's a Max-Forwards value of zero,\n             * we have to intercept the request.\n             */\n            if (1 == sscanf(p->str+12, \": %u\", &max_forwards) && max_forwards == 0)\n            {\n               /*\n                * FIXME: We could handle at least TRACE here,\n                * but that would require a verbatim copy of\n                * the request which we don't have anymore\n                */\n                log_error(LOG_LEVEL_HEADER,\n                  \"Detected header \\'%s\\' in OPTIONS or TRACE request. Returning 501.\",\n                  p->str);\n\n               /* Get mem for response or fail*/\n               if (NULL == (rsp = alloc_http_response()))\n               {\n                  return cgi_error_memory();\n               }\n\n               rsp->status = strdup_or_die(\"501 Not Implemented\");\n               rsp->is_static = 1;\n               rsp->crunch_reason = UNSUPPORTED;\n\n               return(finish_http_response(csp, rsp));\n            }\n         }\n      }\n   }\n   return NULL;\n}\n\n\n/*********************************************************************\n *\n * Function    :  content_requires_filtering\n *\n * Description :  Checks whether there are any content filters\n *                enabled for the current request and if they\n *                can actually be applied..\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  TRUE for yes, FALSE otherwise\n *\n *********************************************************************/\nint content_requires_filtering(struct client_state *csp)\n{\n   if ((csp->content_type & CT_TABOO)\n      && !(csp->action->flags & ACTION_FORCE_TEXT_MODE))\n   {\n      return FALSE;\n   }\n\n   /*\n    * Are we enabling text mode by force?\n    */\n   if (csp->action->flags & ACTION_FORCE_TEXT_MODE)\n   {\n      /*\n       * Do we really have to?\n       */\n      if (csp->content_type & CT_TEXT)\n      {\n         log_error(LOG_LEVEL_HEADER, \"Text mode is already enabled.\");\n      }\n      else\n      {\n         csp->content_type |= CT_TEXT;\n         log_error(LOG_LEVEL_HEADER, \"Text mode enabled by force. Take cover!\");\n      }\n   }\n\n   if (!(csp->content_type & CT_DECLARED))\n   {\n      /*\n       * The server didn't bother to declare a MIME-Type.\n       * Assume it's text that can be filtered.\n       *\n       * This also regulary happens with 304 responses,\n       * therefore logging anything here would cause\n       * too much noise.\n       */\n      csp->content_type |= CT_TEXT;\n   }\n\n   /*\n    * Choose the applying filter function based on\n    * the content type and action settings.\n    */\n   if ((csp->content_type & CT_TEXT) &&\n       (!list_is_empty(csp->action->multi[ACTION_MULTI_FILTER]) ||\n        !list_is_empty(csp->action->multi[ACTION_MULTI_EXTERNAL_FILTER])))\n   {\n      return TRUE;\n   }\n   else if ((csp->content_type & CT_GIF)  &&\n            (csp->action->flags & ACTION_DEANIMATE))\n   {\n      return TRUE;\n   }\n\n   return FALSE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  content_filters_enabled\n *\n * Description :  Checks whether there are any content filters\n *                enabled for the current request.\n *\n * Parameters  :\n *          1  :  action = Action spec to check.\n *\n * Returns     :  TRUE for yes, FALSE otherwise\n *\n *********************************************************************/\nint content_filters_enabled(const struct current_action_spec *action)\n{\n   return ((action->flags & ACTION_DEANIMATE) ||\n      !list_is_empty(action->multi[ACTION_MULTI_FILTER]) ||\n      !list_is_empty(action->multi[ACTION_MULTI_EXTERNAL_FILTER]));\n}\n\n\n/*********************************************************************\n *\n * Function    :  filters_available\n *\n * Description :  Checks whether there are any filters available.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  TRUE for yes, FALSE otherwise.\n *\n *********************************************************************/\nint filters_available(const struct client_state *csp)\n{\n   int i;\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      const struct file_list *fl = csp->rlist[i];\n      if ((NULL != fl) && (NULL != fl->f))\n      {\n         return TRUE;\n      }\n   }\n   return FALSE;\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/filters.h",
    "content": "#ifndef FILTERS_H_INCLUDED\n#define FILTERS_H_INCLUDED\n#define FILTERS_H_VERSION \"$Id: filters.h,v 1.46 2013/12/24 13:32:51 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/filters.h,v $\n *\n * Purpose     :  Declares functions to parse/crunch headers and pages.\n *                Functions declared include:\n *                   `acl_addr', `add_stats', `block_acl', `block_imageurl',\n *                   `block_url', `url_actions', `filter_popups', `forward_url'\n *                   `ij_untrusted_url', `intercept_url', `re_process_buffer',\n *                   `show_proxy_args', and `trust_url'\n *\n * Copyright   :  Written by and Copyright (C) 2001-2010 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\n/*\n * ACL checking\n */\n#ifdef FEATURE_ACL\nextern int block_acl(const struct access_control_addr *dst, const struct client_state *csp);\n#endif /* def FEATURE_ACL */\nextern int acl_addr(const char *aspec, struct access_control_addr *aca);\n/*\n * Interceptors\n */\nextern struct http_response *block_url(struct client_state *csp);\nextern struct http_response *redirect_url(struct client_state *csp);\n#ifdef FEATURE_TRUST\nextern struct http_response *trust_url(struct client_state *csp);\n#endif /* def FEATURE_TRUST */\n\n/*\n * Request inspectors\n */\n#ifdef FEATURE_TRUST\nextern int is_untrusted_url(const struct client_state *csp);\n#endif /* def FEATURE_TRUST */\n#ifdef FEATURE_IMAGE_BLOCKING\nextern int is_imageurl(const struct client_state *csp);\n#endif /* def FEATURE_IMAGE_BLOCKING */\nextern int connect_port_is_forbidden(const struct client_state *csp);\n\n/*\n * Determining applicable actions\n */\nextern void get_url_actions(struct client_state *csp,\n                            struct http_request *http);\nextern int apply_url_actions(struct current_action_spec *action,\n                              struct client_state *csp,\n                              struct url_actions *b);\n\nextern struct re_filterfile_spec *get_filter(const struct client_state *csp,\n                                             const char *requested_name,\n                                             enum filter_type requested_type);\n\n/*\n * Determining parent proxies\n */\nextern struct forward_spec *forward_url(struct client_state *csp,\n                                              const struct http_request *http);\n\nstruct url_actions *forward_ip_routing(struct sockaddr_in *addr);\n\nstruct forward_spec *forward_ip(struct client_state *csp, struct sockaddr_storage addr);\n\nstruct forward_spec *forward_dns_pollution_ip(struct client_state *csp, struct sockaddr_storage addr);\n\nextern struct forward_spec *get_forward_ip_settings(struct client_state *csp);\n\n//static struct forward_spec *get_forward_rule_settings(struct client_state *csp, struct url_actions *url_action, int which);\n//\n//extern struct forward_spec *get_forward_rule_settings_by_action(struct url_actions *url_action);\n\n/*\n * Content modification\n */\nextern char *execute_content_filters(struct client_state *csp);\nextern char *execute_single_pcrs_command(char *subject, const char *pcrs_command, int *hits);\nextern char *rewrite_url(char *old_url, const char *pcrs_command);\nextern char *get_last_url(char *subject, const char *redirect_mode);\n\nextern pcrs_job *compile_dynamic_pcrs_job_list(const struct client_state *csp, const struct re_filterfile_spec *b);\n\nextern int content_requires_filtering(struct client_state *csp);\nextern int content_filters_enabled(const struct current_action_spec *action);\nextern int filters_available(const struct client_state *csp);\n\n/*\n * Handling Max-Forwards:\n */\nextern struct http_response *direct_response(struct client_state *csp);\n\n/*\n * Revision control strings from this header and associated .c file\n */\nextern const char filters_rcs[];\nextern const char filters_h_rcs[];\n\n#endif /* ndef FILTERS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/gateway.c",
    "content": "const char gateway_rcs[] = \"$Id: gateway.c,v 1.96 2016/01/16 12:30:43 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/gateway.c,v $\n *\n * Purpose     :  Contains functions to connect to a server, possibly\n *                using a \"forwarder\" (i.e. HTTP proxy and/or a SOCKS4\n *                or SOCKS5 proxy).\n *\n * Copyright   :  Written by and Copyright (C) 2001-2009 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n\n#ifndef _WIN32\n#include <netinet/in.h>\n#endif\n\n#include <errno.h>\n#include <string.h>\n#include \"assert.h\"\n\n#ifdef _WIN32\n#include <winsock2.h>\n#endif /* def _WIN32 */\n\n#ifdef __BEOS__\n#include <netdb.h>\n#endif /* def __BEOS__ */\n\n#ifdef __OS2__\n#include <utils.h>\n#endif /* def __OS2__ */\n\n#include \"project.h\"\n#include \"jcc.h\"\n#include \"errlog.h\"\n#include \"jbsockets.h\"\n#include \"gateway.h\"\n#include \"miscutil.h\"\n#include \"list.h\"\n#include \"parsers.h\"\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n#ifdef HAVE_POLL\n#ifdef __GLIBC__\n#include <sys/poll.h>\n#else\n#include <poll.h>\n#endif /* def __GLIBC__ */\n#endif /* HAVE_POLL */\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\nconst char gateway_h_rcs[] = GATEWAY_H_VERSION;\n\nenum {\n   SOCKS4_REQUEST_GRANTED        =  90,\n   SOCKS4_REQUEST_REJECT         =  91,\n   SOCKS4_REQUEST_IDENT_FAILED   =  92,\n   SOCKS4_REQUEST_IDENT_CONFLICT =  93\n};\n\nenum {\n   SOCKS5_REQUEST_GRANTED             = 0,\n   SOCKS5_REQUEST_FAILED              = 1,\n   SOCKS5_REQUEST_DENIED              = 2,\n   SOCKS5_REQUEST_NETWORK_UNREACHABLE = 3,\n   SOCKS5_REQUEST_HOST_UNREACHABLE    = 4,\n   SOCKS5_REQUEST_CONNECTION_REFUSED  = 5,\n   SOCKS5_REQUEST_TTL_EXPIRED         = 6,\n   SOCKS5_REQUEST_PROTOCOL_ERROR      = 7,\n   SOCKS5_REQUEST_BAD_ADDRESS_TYPE    = 8\n};\n\n/* structure of a socks client operation */\nstruct socks_op {\n   unsigned char vn;          /* socks version number */\n   unsigned char cd;          /* command code */\n   unsigned char dstport[2];  /* destination port */\n   unsigned char dstip[4];    /* destination address */\n   char userid;               /* first byte of userid */\n   char padding[3];           /* make sure sizeof(struct socks_op) is endian-independent. */\n   /* more bytes of the userid follow, terminated by a NULL */\n};\n\n/* structure of a socks server reply */\nstruct socks_reply {\n   unsigned char vn;          /* socks version number */\n   unsigned char cd;          /* command code */\n   unsigned char dstport[2];  /* destination port */\n   unsigned char dstip[4];    /* destination address */\n};\n\nstatic const char socks_userid[] = \"anonymous\";\n\n#ifdef FEATURE_CONNECTION_SHARING\n\n#define MAX_REUSABLE_CONNECTIONS 100\nstatic unsigned int keep_alive_timeout = DEFAULT_KEEP_ALIVE_TIMEOUT;\n\nstatic struct reusable_connection reusable_connection[MAX_REUSABLE_CONNECTIONS];\nstatic int mark_connection_unused(const struct reusable_connection *connection);\n\n/*********************************************************************\n *\n * Function    :  initialize_reusable_connections\n *\n * Description :  Initializes the reusable_connection structures.\n *                Must be called with connection_reuse_mutex locked.\n *\n * Parameters  : N/A\n *\n * Returns     : void\n *\n *********************************************************************/\nextern void initialize_reusable_connections(void)\n{\n   unsigned int slot = 0;\n\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      mark_connection_closed(&reusable_connection[slot]);\n   }\n\n   log_error(LOG_LEVEL_CONNECT, \"Initialized %d socket slots.\", slot);\n}\n\n\n/*********************************************************************\n *\n * Function    :  remember_connection\n *\n * Description :  Remembers a server connection for reuse later on.\n *\n * Parameters  :\n *          1  :  connection = The server connection to remember.\n *\n * Returns     : void\n *\n *********************************************************************/\nvoid remember_connection(const struct reusable_connection *connection)\n{\n   unsigned int slot = 0;\n   int free_slot_found = FALSE;\n\n   assert(NULL != connection);\n   assert(connection->sfd != JB_INVALID_SOCKET);\n\n   if (mark_connection_unused(connection))\n   {\n      return;\n   }\n\n   privoxy_mutex_lock(&connection_reuse_mutex);\n\n   /* Find free socket slot. */\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      if (reusable_connection[slot].sfd == JB_INVALID_SOCKET)\n      {\n         assert(reusable_connection[slot].in_use == 0);\n         log_error(LOG_LEVEL_CONNECT,\n            \"Remembering socket %d for %s:%d in slot %d.\",\n            connection->sfd, connection->host, connection->port, slot);\n         free_slot_found = TRUE;\n         break;\n      }\n   }\n\n   if (!free_slot_found)\n   {\n      log_error(LOG_LEVEL_CONNECT,\n        \"No free slots found to remember socket for %s:%d. Last slot %d.\",\n        connection->host, connection->port, slot);\n      privoxy_mutex_unlock(&connection_reuse_mutex);\n      close_socket(connection->sfd);\n      return;\n   }\n\n   assert(NULL != connection->host);\n   reusable_connection[slot].host = strdup_or_die(connection->host);\n   reusable_connection[slot].sfd = connection->sfd;\n   reusable_connection[slot].port = connection->port;\n   reusable_connection[slot].in_use = 0;\n   reusable_connection[slot].timestamp = connection->timestamp;\n   reusable_connection[slot].request_sent = connection->request_sent;\n   reusable_connection[slot].response_received = connection->response_received;\n   reusable_connection[slot].keep_alive_timeout = connection->keep_alive_timeout;\n   reusable_connection[slot].requests_sent_total = connection->requests_sent_total;\n\n   assert(reusable_connection[slot].gateway_host == NULL);\n   assert(reusable_connection[slot].gateway_port == 0);\n   assert(reusable_connection[slot].forwarder_type == SOCKS_NONE);\n   assert(reusable_connection[slot].forward_host == NULL);\n   assert(reusable_connection[slot].forward_port == 0);\n\n   reusable_connection[slot].forwarder_type = connection->forwarder_type;\n   if (NULL != connection->gateway_host)\n   {\n      reusable_connection[slot].gateway_host = strdup_or_die(connection->gateway_host);\n   }\n   else\n   {\n      reusable_connection[slot].gateway_host = NULL;\n   }\n   reusable_connection[slot].gateway_port = connection->gateway_port;\n\n   if (NULL != connection->forward_host)\n   {\n      reusable_connection[slot].forward_host = strdup_or_die(connection->forward_host);\n   }\n   else\n   {\n      reusable_connection[slot].forward_host = NULL;\n   }\n   reusable_connection[slot].forward_port = connection->forward_port;\n\n   privoxy_mutex_unlock(&connection_reuse_mutex);\n}\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n\n/*********************************************************************\n *\n * Function    :  mark_connection_closed\n *\n * Description : Marks a reused connection closed.\n *\n * Parameters  :\n *          1  :  closed_connection = The connection to mark as closed.\n *\n * Returns     : void\n *\n *********************************************************************/\nvoid mark_connection_closed(struct reusable_connection *closed_connection)\n{\n   closed_connection->in_use = FALSE;\n   closed_connection->sfd = JB_INVALID_SOCKET;\n   freez(closed_connection->host);\n   closed_connection->port = 0;\n   closed_connection->timestamp = 0;\n   closed_connection->request_sent = 0;\n   closed_connection->response_received = 0;\n   closed_connection->keep_alive_timeout = 0;\n   closed_connection->requests_sent_total = 0;\n   closed_connection->forwarder_type = SOCKS_NONE;\n   freez(closed_connection->gateway_host);\n   closed_connection->gateway_port = 0;\n   freez(closed_connection->forward_host);\n   closed_connection->forward_port = 0;\n}\n\n\n#ifdef FEATURE_CONNECTION_SHARING\n/*********************************************************************\n *\n * Function    :  forget_connection\n *\n * Description :  Removes a previously remembered connection from\n *                the list of reusable connections.\n *\n * Parameters  :\n *          1  :  sfd = The socket belonging to the connection in question.\n *\n * Returns     : void\n *\n *********************************************************************/\nvoid forget_connection(jb_socket sfd)\n{\n   unsigned int slot = 0;\n\n   assert(sfd != JB_INVALID_SOCKET);\n\n   privoxy_mutex_lock(&connection_reuse_mutex);\n\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      if (reusable_connection[slot].sfd == sfd)\n      {\n         assert(reusable_connection[slot].in_use);\n\n         log_error(LOG_LEVEL_CONNECT,\n            \"Forgetting socket %d for %s:%d in slot %d.\",\n            sfd, reusable_connection[slot].host,\n            reusable_connection[slot].port, slot);\n         mark_connection_closed(&reusable_connection[slot]);\n         break;\n      }\n   }\n\n   privoxy_mutex_unlock(&connection_reuse_mutex);\n\n}\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  connection_destination_matches\n *\n * Description :  Determines whether a remembered connection can\n *                be reused. That is, whether the destination and\n *                the forwarding settings match.\n *\n * Parameters  :\n *          1  :  connection = The connection to check.\n *          2  :  http = The destination for the connection.\n *          3  :  fwd  = The forwarder settings.\n *\n * Returns     :  TRUE for yes, FALSE otherwise.\n *\n *********************************************************************/\nint connection_destination_matches(const struct reusable_connection *connection,\n                                   const struct http_request *http,\n                                   const struct forward_spec *fwd)\n{\n   if ((connection->forwarder_type != fwd->type)\n    || (connection->gateway_port   != fwd->gateway_port)\n    || (connection->forward_port   != fwd->forward_port)\n    || (connection->port           != http->port))\n   {\n      return FALSE;\n   }\n\n   if ((    (NULL != connection->gateway_host)\n         && (NULL != fwd->gateway_host)\n         && strcmpic(connection->gateway_host, fwd->gateway_host))\n       && (connection->gateway_host != fwd->gateway_host))\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Gateway mismatch. Previous gateway: %s. Current gateway: %s\",\n         connection->gateway_host, fwd->gateway_host);\n      return FALSE;\n   }\n\n   if ((    (NULL != connection->forward_host)\n         && (NULL != fwd->forward_host)\n         && strcmpic(connection->forward_host, fwd->forward_host))\n      && (connection->forward_host != fwd->forward_host))\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Forwarding proxy mismatch. Previous proxy: %s. Current proxy: %s\",\n         connection->forward_host, fwd->forward_host);\n      return FALSE;\n   }\n\n   return (!strcmpic(connection->host, http->host));\n\n}\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n#ifdef FEATURE_CONNECTION_SHARING\n/*********************************************************************\n *\n * Function    :  close_unusable_connections\n *\n * Description :  Closes remembered connections that have timed\n *                out or have been closed on the other side.\n *\n * Parameters  :  none\n *\n * Returns     :  Number of connections that are still alive.\n *\n *********************************************************************/\nint close_unusable_connections(void)\n{\n   unsigned int slot = 0;\n   int connections_alive = 0;\n\n   privoxy_mutex_lock(&connection_reuse_mutex);\n\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      if (!reusable_connection[slot].in_use\n         && (JB_INVALID_SOCKET != reusable_connection[slot].sfd))\n      {\n         time_t time_open = time(NULL) - reusable_connection[slot].timestamp;\n         time_t latency = (reusable_connection[slot].response_received -\n            reusable_connection[slot].request_sent) / 2;\n\n         if (reusable_connection[slot].keep_alive_timeout < time_open + latency)\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"The connection to %s:%d in slot %d timed out. \"\n               \"Closing socket %d. Timeout is: %d. Assumed latency: %d.\",\n               reusable_connection[slot].host,\n               reusable_connection[slot].port, slot,\n               reusable_connection[slot].sfd,\n               reusable_connection[slot].keep_alive_timeout,\n               latency);\n            close_socket(reusable_connection[slot].sfd);\n            mark_connection_closed(&reusable_connection[slot]);\n         }\n         else if (!socket_is_still_alive(reusable_connection[slot].sfd))\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"The connection to %s:%d in slot %d is no longer usable. \"\n               \"Closing socket %d.\", reusable_connection[slot].host,\n               reusable_connection[slot].port, slot,\n               reusable_connection[slot].sfd);\n            close_socket(reusable_connection[slot].sfd);\n            mark_connection_closed(&reusable_connection[slot]);\n         }\n         else\n         {\n            connections_alive++;\n         }\n      }\n   }\n\n   privoxy_mutex_unlock(&connection_reuse_mutex);\n\n   return connections_alive;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_reusable_connection\n *\n * Description :  Returns an open socket to a previously remembered\n *                open connection (if there is one).\n *\n * Parameters  :\n *          1  :  http = The destination for the connection.\n *          2  :  fwd  = The forwarder settings.\n *\n * Returns     :  JB_INVALID_SOCKET => No reusable connection found,\n *                otherwise a usable socket.\n *\n *********************************************************************/\nstatic jb_socket get_reusable_connection(const struct http_request *http,\n                                         const struct forward_spec *fwd)\n{\n   jb_socket sfd = JB_INVALID_SOCKET;\n   unsigned int slot = 0;\n\n   close_unusable_connections();\n\n   privoxy_mutex_lock(&connection_reuse_mutex);\n\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      if (!reusable_connection[slot].in_use\n         && (JB_INVALID_SOCKET != reusable_connection[slot].sfd))\n      {\n         if (connection_destination_matches(&reusable_connection[slot], http, fwd))\n         {\n            reusable_connection[slot].in_use = TRUE;\n            sfd = reusable_connection[slot].sfd;\n            log_error(LOG_LEVEL_CONNECT,\n               \"Found reusable socket %d for %s:%d in slot %d. Timestamp made %d \"\n               \"seconds ago. Timeout: %d. Latency: %d. Requests served: %d\",\n               sfd, reusable_connection[slot].host, reusable_connection[slot].port,\n               slot, time(NULL) - reusable_connection[slot].timestamp,\n               reusable_connection[slot].keep_alive_timeout,\n               (int)(reusable_connection[slot].response_received -\n               reusable_connection[slot].request_sent),\n               reusable_connection[slot].requests_sent_total);\n            break;\n         }\n      }\n   }\n\n   privoxy_mutex_unlock(&connection_reuse_mutex);\n\n   return sfd;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  mark_connection_unused\n *\n * Description :  Gives a remembered connection free for reuse.\n *\n * Parameters  :\n *          1  :  connection = The connection in question.\n *\n * Returns     :  TRUE => Socket found and marked as unused.\n *                FALSE => Socket not found.\n *\n *********************************************************************/\nstatic int mark_connection_unused(const struct reusable_connection *connection)\n{\n   unsigned int slot = 0;\n   int socket_found = FALSE;\n\n   assert(connection->sfd != JB_INVALID_SOCKET);\n\n   privoxy_mutex_lock(&connection_reuse_mutex);\n\n   for (slot = 0; slot < SZ(reusable_connection); slot++)\n   {\n      if (reusable_connection[slot].sfd == connection->sfd)\n      {\n         assert(reusable_connection[slot].in_use);\n         socket_found = TRUE;\n         log_error(LOG_LEVEL_CONNECT,\n            \"Marking open socket %d for %s:%d in slot %d as unused.\",\n            connection->sfd, reusable_connection[slot].host,\n            reusable_connection[slot].port, slot);\n         reusable_connection[slot].in_use = 0;\n         reusable_connection[slot].timestamp = connection->timestamp;\n         break;\n      }\n   }\n\n   privoxy_mutex_unlock(&connection_reuse_mutex);\n\n   return socket_found;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  set_keep_alive_timeout\n *\n * Description :  Sets the timeout after which open\n *                connections will no longer be reused.\n *\n * Parameters  :\n *          1  :  timeout = The timeout in seconds.\n *\n * Returns     :  void\n *\n *********************************************************************/\nvoid set_keep_alive_timeout(unsigned int timeout)\n{\n   keep_alive_timeout = timeout;\n}\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n\n/*********************************************************************\n *\n * Function    :  forwarded_connect\n *\n * Description :  Connect to a specified web server, possibly via\n *                a HTTP proxy and/or a SOCKS proxy.\n *\n * Parameters  :\n *          1  :  fwd = the proxies to use when connecting.\n *          2  :  http = the http request and apropos headers\n *          3  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_INVALID_SOCKET => failure, else it is the socket file descriptor.\n *\n *********************************************************************/\njb_socket forwarded_connect(const struct forward_spec * fwd,\n                            struct http_request *http,\n                            struct client_state *csp)\n{\n   const char * dest_host;\n   int dest_port;\n   jb_socket sfd = JB_INVALID_SOCKET;\n\n#ifdef FEATURE_CONNECTION_SHARING\n   if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n      && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED))\n   {\n      sfd = get_reusable_connection(http, fwd);\n      if (JB_INVALID_SOCKET != sfd)\n      {\n         return sfd;\n      }\n   }\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n   /* Figure out if we need to connect to the web server or a HTTP proxy. */\n    sfd = connect_to_forward(csp, fwd, 0);\n\n    if (JB_INVALID_SOCKET != sfd)\n    {\n        log_error(LOG_LEVEL_CONNECT,\n         \"Created new connection to %s:%d on socket %d.\",\n         http->host, http->port, sfd);\n    }\n\n    return sfd;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  socks4_connect\n *\n * Description :  Connect to the SOCKS server, and connect through\n *                it to the specified server.   This handles\n *                all the SOCKS negotiation, and returns a file\n *                descriptor for a socket which can be treated as a\n *                normal (non-SOCKS) socket.\n *\n *                Logged error messages are saved to csp->error_message\n *                and later reused by error_response() for the CGI\n *                message. strdup allocation failures are handled there.\n *\n * Parameters  :\n *          1  :  fwd = Specifies the SOCKS proxy to use.\n *          2  :  target_host = The final server to connect to.\n *          3  :  target_port = The final port to connect to.\n *          4  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_INVALID_SOCKET => failure, else a socket file descriptor.\n *\n *********************************************************************/\njb_socket socks4_connect(char *gateway_host,\n                         int gateway_port,\n                         enum forwarder_type type,\n                                const char * target_host,\n                                int target_port,\n                                struct client_state *csp)\n{\n   unsigned long web_server_addr;\n   char buf[BUFFER_SIZE];\n   struct socks_op    *c = (struct socks_op    *)buf;\n   struct socks_reply *s = (struct socks_reply *)buf;\n   size_t n;\n   size_t csiz;\n   jb_socket sfd;\n   int err = 0;\n   char *errstr = NULL;\n\n   if ((gateway_host == NULL) || (*gateway_host == '\\0'))\n   {\n      /* XXX: Shouldn't the config file parser prevent this? */\n      errstr = \"NULL gateway host specified.\";\n      err = 1;\n   }\n\n   if (gateway_port <= 0)\n   {\n      errstr = \"invalid gateway port specified.\";\n      err = 1;\n   }\n\n   if (err)\n   {\n      log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n      csp->error_message = strdup(errstr);\n      errno = EINVAL;\n      return(JB_INVALID_SOCKET);\n   }\n\n   /* build a socks request for connection to the web server */\n\n   strlcpy(&(c->userid), socks_userid, sizeof(buf) - sizeof(struct socks_op));\n\n   csiz = sizeof(*c) + sizeof(socks_userid) - sizeof(c->userid) - sizeof(c->padding);\n\n   switch (type)\n   {\n      case SOCKS_4:\n         web_server_addr = resolve_hostname_to_ip(target_host);\n         if (web_server_addr == INADDR_NONE)\n         {\n            errstr = \"could not resolve target host\";\n            log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s %s\", errstr, target_host);\n            err = 1;\n         }\n         else\n         {\n            web_server_addr = htonl(web_server_addr);\n         }\n         break;\n      case SOCKS_4A:\n         web_server_addr = 0x00000001;\n         n = csiz + strlen(target_host) + 1;\n         if (n > sizeof(buf))\n         {\n            errno = EINVAL;\n            errstr = \"buffer cbuf too small.\";\n            log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n            err = 1;\n         }\n         else\n         {\n            strlcpy(buf + csiz, target_host, sizeof(buf) - sizeof(struct socks_op) - csiz);\n            /*\n             * What we forward to the socks4a server should have the\n             * size of socks_op, plus the length of the userid plus\n             * its \\0 byte (which we don't have to add because the\n             * first byte of the userid is counted twice as it's also\n             * part of sock_op) minus the padding bytes (which are part\n             * of the userid as well), plus the length of the target_host\n             * (which is stored csiz bytes after the beginning of the buffer),\n             * plus another \\0 byte.\n             */\n            assert(n == sizeof(struct socks_op) + strlen(&(c->userid)) - sizeof(c->padding) + strlen(buf + csiz) + 1);\n            csiz = n;\n         }\n         break;\n      default:\n         /* Should never get here */\n         log_error(LOG_LEVEL_FATAL,\n            \"socks4_connect: SOCKS4 impossible internal error - bad SOCKS type.\");\n         /* Not reached */\n         return(JB_INVALID_SOCKET);\n   }\n\n   if (err)\n   {\n      csp->error_message = strdup(errstr);\n      return(JB_INVALID_SOCKET);\n   }\n\n   c->vn          = 4;\n   c->cd          = 1;\n   c->dstport[0]  = (unsigned char)((target_port       >> 8 ) & 0xff);\n   c->dstport[1]  = (unsigned char)((target_port            ) & 0xff);\n   c->dstip[0]    = (unsigned char)((web_server_addr   >> 24) & 0xff);\n   c->dstip[1]    = (unsigned char)((web_server_addr   >> 16) & 0xff);\n   c->dstip[2]    = (unsigned char)((web_server_addr   >>  8) & 0xff);\n   c->dstip[3]    = (unsigned char)((web_server_addr        ) & 0xff);\n\n   /* pass the request to the socks server */\n   sfd = connect_to(gateway_host, gateway_port, csp, 1);\n\n   if (sfd == JB_INVALID_SOCKET)\n   {\n      /* The error an its reason have already been logged by connect_to()  */\n      return(JB_INVALID_SOCKET);\n   }\n   else if (write_socket(sfd, (char *)c, csiz))\n   {\n      errstr = \"SOCKS4 negotiation write failed.\";\n      log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n      err = 1;\n      close_socket(sfd);\n   }\n   else if (!data_is_available(sfd, csp->config->socket_timeout))\n   {\n      if (socket_is_still_alive(sfd))\n      {\n         errstr = \"SOCKS4 negotiation timed out\";\n      }\n      else\n      {\n         errstr = \"SOCKS4 negotiation got aborted by the server\";\n      }\n      log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n      err = 1;\n      close_socket(sfd);\n   }\n   else if (read_socket(sfd, buf, sizeof(buf)) != sizeof(*s))\n   {\n      errstr = \"SOCKS4 negotiation read failed.\";\n      log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n      err = 1;\n      close_socket(sfd);\n   }\n\n   if (err)\n   {\n      csp->error_message = strdup(errstr);\n      return(JB_INVALID_SOCKET);\n   }\n\n   switch (s->cd)\n   {\n      case SOCKS4_REQUEST_GRANTED:\n         return(sfd);\n      case SOCKS4_REQUEST_REJECT:\n         errstr = \"SOCKS request rejected or failed.\";\n         errno = EINVAL;\n         break;\n      case SOCKS4_REQUEST_IDENT_FAILED:\n         errstr = \"SOCKS request rejected because \"\n            \"SOCKS server cannot connect to identd on the client.\";\n         errno = EACCES;\n         break;\n      case SOCKS4_REQUEST_IDENT_CONFLICT:\n         errstr = \"SOCKS request rejected because \"\n            \"the client program and identd report \"\n            \"different user-ids.\";\n         errno = EACCES;\n         break;\n      default:\n         errno = ENOENT;\n         snprintf(buf, sizeof(buf),\n            \"SOCKS request rejected for reason code %d.\", s->cd);\n         errstr = buf;\n   }\n\n   log_error(LOG_LEVEL_CONNECT, \"socks4_connect: %s\", errstr);\n   csp->error_message = strdup(errstr);\n   close_socket(sfd);\n\n   return(JB_INVALID_SOCKET);\n\n}\n\n/*********************************************************************\n *\n * Function    :  translate_socks5_error\n *\n * Description :  Translates a SOCKS errors to a string.\n *\n * Parameters  :\n *          1  :  socks_error = The error code to translate.\n *\n * Returns     :  The string translation.\n *\n *********************************************************************/\nstatic const char *translate_socks5_error(int socks_error)\n{\n   switch (socks_error)\n   {\n      /* XXX: these should be more descriptive */\n      case SOCKS5_REQUEST_FAILED:\n         return \"SOCKS5 request failed\";\n      case SOCKS5_REQUEST_DENIED:\n         return \"SOCKS5 request denied\";\n      case SOCKS5_REQUEST_NETWORK_UNREACHABLE:\n         return \"SOCKS5 network unreachable\";\n      case SOCKS5_REQUEST_HOST_UNREACHABLE:\n         return \"SOCKS5 destination host unreachable\";\n      case SOCKS5_REQUEST_CONNECTION_REFUSED:\n         return \"SOCKS5 connection refused\";\n      case SOCKS5_REQUEST_TTL_EXPIRED:\n         return \"SOCKS5 TTL expired\";\n      case SOCKS5_REQUEST_PROTOCOL_ERROR:\n         return \"SOCKS5 client protocol error\";\n      case SOCKS5_REQUEST_BAD_ADDRESS_TYPE:\n         return \"SOCKS5 domain names unsupported\";\n      case SOCKS5_REQUEST_GRANTED:\n         return \"everything's peachy\";\n      default:\n         return \"SOCKS5 negotiation protocol error\";\n   }\n}\n\n/*********************************************************************\n *\n * Function    :  socks5_connect\n *\n * Description :  Connect to the SOCKS server, and connect through\n *                it to the specified server.   This handles\n *                all the SOCKS negotiation, and returns a file\n *                descriptor for a socket which can be treated as a\n *                normal (non-SOCKS) socket.\n *\n * Parameters  :\n *          1  :  fwd = Specifies the SOCKS proxy to use.\n *          2  :  target_host = The final server to connect to.\n *          3  :  target_port = The final port to connect to.\n *          4  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_INVALID_SOCKET => failure, else a socket file descriptor.\n *\n *********************************************************************/\njb_socket socks5_connect(char *gateway_host,\n                        int gateway_port,\n                         enum forwarder_type type,\n                                const char *target_host,\n                                int target_port,\n                                struct client_state *csp)\n{\n   int err = 0;\n   char cbuf[300];\n   char sbuf[10];\n   size_t client_pos = 0;\n   int server_size = 0;\n   size_t hostlen = 0;\n   jb_socket sfd;\n   const char *errstr = NULL;\n\n   assert(gateway_host);\n   if ((gateway_host == NULL) || (*gateway_host == '\\0'))\n   {\n      errstr = \"NULL gateway host specified\";\n      err = 1;\n   }\n\n   if (gateway_port <= 0)\n   {\n      /*\n       * XXX: currently this can't happen because in\n       * case of invalid gateway ports we use the defaults.\n       * Of course we really shouldn't do that.\n       */\n      errstr = \"invalid gateway port specified\";\n      err = 1;\n   }\n\n   hostlen = strlen(target_host);\n   if (hostlen > (size_t)255)\n   {\n      errstr = \"target host name is longer than 255 characters\";\n      err = 1;\n   }\n\n   if ((type != SOCKS_5) && (type != SOCKS_5T))\n   {\n      /* Should never get here */\n      log_error(LOG_LEVEL_FATAL,\n         \"SOCKS5 impossible internal error - bad SOCKS type\");\n      err = 1;\n   }\n\n   if (err)\n   {\n      errno = EINVAL;\n      assert(errstr != NULL);\n      log_error(LOG_LEVEL_CONNECT, \"socks5_connect: %s\", errstr);\n      csp->error_message = strdup(errstr);\n      return(JB_INVALID_SOCKET);\n   }\n\n   /* pass the request to the socks server */\n   sfd = connect_to(gateway_host, gateway_port, csp, 1);\n\n   if (sfd == JB_INVALID_SOCKET)\n   {\n      errstr = \"socks5 server unreachable\";\n      log_error(LOG_LEVEL_CONNECT, \"socks5_connect: %s\", errstr);\n      /* Free the generic error message provided by connect_to() */\n      freez(csp->error_message);\n      csp->error_message = strdup(errstr);\n      return(JB_INVALID_SOCKET);\n   }\n\n   client_pos = 0;\n   cbuf[client_pos++] = '\\x05'; /* Version */\n   cbuf[client_pos++] = '\\x01'; /* One authentication method supported */\n   cbuf[client_pos++] = '\\x00'; /* The no authentication authentication method */\n\n   if (write_socket(sfd, cbuf, client_pos))\n   {\n      errstr = \"SOCKS5 negotiation write failed\";\n      csp->error_message = strdup(errstr);\n      log_error(LOG_LEVEL_CONNECT, \"%s\", errstr);\n      close_socket(sfd);\n      return(JB_INVALID_SOCKET);\n   }\n\n   if (!data_is_available(sfd, csp->config->socket_timeout))\n   {\n      if (socket_is_still_alive(sfd))\n      {\n         errstr = \"SOCKS5 negotiation timed out\";\n      }\n      else\n      {\n         errstr = \"SOCKS5 negotiation got aborted by the server\";\n      }\n      err = 1;\n   }\n\n   if (!err && read_socket(sfd, sbuf, sizeof(sbuf)) != 2)\n   {\n      errstr = \"SOCKS5 negotiation read failed\";\n      err = 1;\n   }\n\n   if (!err && (sbuf[0] != '\\x05'))\n   {\n      errstr = \"SOCKS5 negotiation protocol version error\";\n      err = 1;\n   }\n\n   if (!err && (sbuf[1] == '\\xff'))\n   {\n      errstr = \"SOCKS5 authentication required\";\n      err = 1;\n   }\n\n   if (!err && (sbuf[1] != '\\x00'))\n   {\n      errstr = \"SOCKS5 negotiation protocol error\";\n      err = 1;\n   }\n\n   if (err)\n   {\n      assert(errstr != NULL);\n      log_error(LOG_LEVEL_CONNECT, \"socks5_connect: %s\", errstr);\n      csp->error_message = strdup(errstr);\n      close_socket(sfd);\n      errno = EINVAL;\n      return(JB_INVALID_SOCKET);\n   }\n\n   client_pos = 0;\n   cbuf[client_pos++] = '\\x05'; /* Version */\n   cbuf[client_pos++] = '\\x01'; /* TCP connect */\n   cbuf[client_pos++] = '\\x00'; /* Reserved, must be 0x00 */\n   cbuf[client_pos++] = '\\x03'; /* Address is domain name */\n   cbuf[client_pos++] = (char)(hostlen & 0xffu);\n   assert(sizeof(cbuf) - client_pos > (size_t)255);\n   /* Using strncpy because we really want the nul byte padding. */\n   strncpy(cbuf + client_pos, target_host, sizeof(cbuf) - client_pos);\n   client_pos += (hostlen & 0xffu);\n   cbuf[client_pos++] = (char)((target_port >> 8) & 0xff);\n   cbuf[client_pos++] = (char)((target_port     ) & 0xff);\n\n   if (write_socket(sfd, cbuf, client_pos))\n   {\n      errstr = \"SOCKS5 negotiation write failed\";\n      csp->error_message = strdup(errstr);\n      log_error(LOG_LEVEL_CONNECT, \"%s\", errstr);\n      close_socket(sfd);\n      errno = EINVAL;\n      return(JB_INVALID_SOCKET);\n   }\n\n   /*\n    * Optimistically send the HTTP request with the initial\n    * SOCKS request if the user enabled the use of Tor extensions,\n    * the CONNECT method isn't being used (in which case the client\n    * doesn't send data until it gets our 200 response) and the\n    * client request has actually been completely read already.\n    */\n   if ((type == SOCKS_5T) && (csp->http->ssl == 0)\n      && (csp->flags & CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ))\n   {\n      char *client_headers = list_to_text(csp->headers);\n      size_t header_length;\n\n      if (client_headers == NULL)\n      {\n         log_error(LOG_LEVEL_FATAL, \"Out of memory rebuilding client headers\");\n      }\n      list_remove_all(csp->headers);\n      header_length= strlen(client_headers);\n\n      log_error(LOG_LEVEL_CONNECT,\n         \"Optimistically sending %d bytes of client headers intended for %s\",\n         header_length, csp->http->hostport);\n\n      if (write_socket(sfd, client_headers, header_length))\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"optimistically writing header to: %s failed: %E\", csp->http->hostport);\n         freez(client_headers);\n         return(JB_INVALID_SOCKET);\n      }\n      freez(client_headers);\n      if (csp->expected_client_content_length != 0)\n      {\n         unsigned long long buffered_request_bytes =\n            (unsigned long long)(csp->client_iob->eod - csp->client_iob->cur);\n         log_error(LOG_LEVEL_CONNECT,\n            \"Optimistically sending %d bytes of client body. Expected %d\",\n            csp->expected_client_content_length, buffered_request_bytes);\n         assert(csp->expected_client_content_length == buffered_request_bytes);\n         if (write_socket(sfd, csp->client_iob->cur, buffered_request_bytes))\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"optimistically writing %d bytes of client body to: %s failed: %E\",\n               buffered_request_bytes, csp->http->hostport);\n            return(JB_INVALID_SOCKET);\n         }\n         clear_iob(csp->client_iob);\n      }\n   }\n\n   server_size = read_socket(sfd, sbuf, sizeof(sbuf));\n   if (server_size != sizeof(sbuf))\n   {\n      errstr = \"SOCKS5 negotiation read failed\";\n   }\n   else\n   {\n      if (sbuf[0] != '\\x05')\n      {\n         errstr = \"SOCKS5 negotiation protocol version error\";\n      }\n      else if (sbuf[2] != '\\x00')\n      {\n         errstr = \"SOCKS5 negotiation protocol error\";\n      }\n      else if (sbuf[1] != SOCKS5_REQUEST_GRANTED)\n      {\n         errstr = translate_socks5_error(sbuf[1]);\n      }\n      else\n      {\n         return(sfd);\n      }\n   }\n\n   assert(errstr != NULL);\n   csp->error_message = strdup(errstr);\n   log_error(LOG_LEVEL_CONNECT, \"socks5_connect: %s\", errstr);\n   close_socket(sfd);\n   errno = EINVAL;\n\n   return(JB_INVALID_SOCKET);\n\n}\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/gateway.h",
    "content": "#ifndef GATEWAY_H_INCLUDED\n#define GATEWAY_H_INCLUDED\n#define GATEWAY_H_VERSION \"$Id: gateway.h,v 1.23 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/gateway.h,v $\n *\n * Purpose     :  Contains functions to connect to a server, possibly\n *                using a \"gateway\" (i.e. HTTP proxy and/or SOCKS4\n *                proxy).  Also contains the list of gateway types.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2009 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\nstruct forward_spec;\nstruct http_request;\nstruct client_state;\n\nextern jb_socket forwarded_connect(const struct forward_spec * fwd,\n                                   struct http_request *http,\n                                   struct client_state *csp);\n\n/*\n * Default number of seconds after which an\n * open connection will no longer be reused.\n */\n#define DEFAULT_KEEP_ALIVE_TIMEOUT 180\n\n#ifdef FEATURE_CONNECTION_SHARING\nextern void set_keep_alive_timeout(unsigned int timeout);\nextern void initialize_reusable_connections(void);\nextern void forget_connection(jb_socket sfd);\nextern void remember_connection(const struct reusable_connection *connection);\nextern int close_unusable_connections(void);\n#endif /* FEATURE_CONNECTION_SHARING */\n\nextern void mark_connection_closed(struct reusable_connection *closed_connection);\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\nextern int connection_destination_matches(const struct reusable_connection *connection,\n                                          const struct http_request *http,\n                                          const struct forward_spec *fwd);\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\nextern jb_socket socks4_connect(char *gateway_host,\n                                int gateway_port,\n                                enum forwarder_type type,\n                                const char * target_host,\n                                int target_port,\n                                struct client_state *csp);\n\nextern jb_socket socks5_connect(char *gateway_host,\n                         int gateway_port,\n                         enum forwarder_type type,\n                         const char *target_host,\n                         int target_port,\n                                struct client_state *csp);\n/*\n * Revision control strings from this header and associated .c file\n */\nextern const char gateway_rcs[];\nextern const char gateway_h_rcs[];\n\n#endif /* ndef GATEWAY_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/jbsockets.c",
    "content": "const char jbsockets_rcs[] = \"$Id: jbsockets.c,v 1.135 2016/01/16 12:33:35 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/jbsockets.c,v $\n *\n * Purpose     :  Contains wrappers for system-specific sockets code,\n *                so that the rest of Junkbuster can be more\n *                OS-independent.  Contains #ifdefs to make this work\n *                on many platforms.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <sys/types.h>\n\n#ifdef _WIN32\n\n#ifndef STRICT\n#define STRICT\n#endif\n#include <windows.h>\n#include <sys/timeb.h>\n#include <io.h>\n\n#else\n\n#ifndef __OS2__\n#include <unistd.h>\n#endif\n#include <sys/time.h>\n#include <netinet/in.h>\n#include <sys/ioctl.h>\n#include <netdb.h>\n#include <sys/socket.h>\n\n#ifndef __BEOS__\n#include <netinet/tcp.h>\n#ifndef __OS2__\n#include <arpa/inet.h>\n#endif\n#else\n#include <socket.h>\n#endif\n\n#if defined(__EMX__) || defined (__OS2__)\n#include <sys/select.h>  /* OS/2/EMX needs a little help with select */\n#ifdef __OS2__\n#include <nerrno.h>\n#endif\n#endif\n\n#endif\n\n#ifdef HAVE_POLL\n#ifdef __GLIBC__\n#include <sys/poll.h>\n#else\n#include <poll.h>\n#endif /* def __GLIBC__ */\n#endif /* HAVE_POLL */\n\n#include \"project.h\"\n\n/* For mutex semaphores only */\n#include \"jcc.h\"\n\n#include \"jbsockets.h\"\n#include \"filters.h\"\n#include \"errlog.h\"\n#include \"miscutil.h\"\n#include \"gateway.h\"\n\n/* Mac OSX doesn't define AI_NUMERICSESRV */\n#ifndef AI_NUMERICSERV\n#define AI_NUMERICSERV 0\n#endif\n\nconst char jbsockets_h_rcs[] = JBSOCKETS_H_VERSION;\n\n/*\n * Maximum number of gethostbyname(_r) retries in case of\n * soft errors (TRY_AGAIN).\n * XXX: Does it make sense to make this a config option?\n */\n#define MAX_DNS_RETRIES 10\n\n#define MAX_LISTEN_BACKLOG 128\n\n#ifdef HAVE_RFC2553\nstatic jb_socket rfc2553_connect_to(const char *host, int portnum, struct client_state *csp, int is_proxy);\n#else\nstatic jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct client_state *csp, int is_proxy);\n#endif\n\n/*********************************************************************\n *\n * Function    :  set_no_delay_flag\n *\n * Description :  Disables TCP coalescence for the given socket.\n *\n * Parameters  :\n *          1  :  fd = The file descriptor to operate on\n *\n * Returns     :  void\n *\n *********************************************************************/\nstatic void set_no_delay_flag(int fd)\n{\n#ifdef TCP_NODELAY\n   int mi = 1;\n\n   if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &mi, sizeof(int)))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Failed to disable TCP coalescence for socket %d\", fd);\n   }\n#else\n#warning set_no_delay_flag() is a nop due to lack of TCP_NODELAY\n#endif /* def TCP_NODELAY */\n}\n\n/*********************************************************************\n *\n * Function    :  connect_to\n *\n * Description :  Open a socket and connect to it.  Will check\n *                that this is allowed according to ACL.\n *\n * Parameters  :\n *          1  :  host = hostname to connect to\n *          2  :  portnum = port to connect to (XXX: should be unsigned)\n *          3  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_INVALID_SOCKET => failure, else it is the socket\n *                file descriptor.\n *\n *********************************************************************/\njb_socket connect_to(const char *host, int portnum, struct client_state *csp, int is_proxy)\n{\n   jb_socket fd;\n   int forwarded_connect_retries = 0;\n\n   do\n   {\n      /*\n       * XXX: The whole errno overloading is ridiculous and should\n       *      be replaced with something sane and thread safe\n       */\n      /* errno = 0;*/\n#ifdef HAVE_RFC2553\n      fd = rfc2553_connect_to(host, portnum, csp, is_proxy);\n#else\n      fd = no_rfc2553_connect_to(host, portnum, csp, is_proxy);\n#endif\n      if ((fd != JB_INVALID_SOCKET) || (errno == EINVAL)\n         || (csp->fwd == NULL)\n         || ((csp->fwd->forward_host == NULL) && (csp->fwd->type == SOCKS_NONE)))\n      {\n         break;\n      }\n      forwarded_connect_retries++;\n      if (csp->config->forwarded_connect_retries != 0)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Attempt %d of %d to connect to %s failed. Trying again.\",\n            forwarded_connect_retries, csp->config->forwarded_connect_retries + 1, host);\n      }\n\n   } while (forwarded_connect_retries < csp->config->forwarded_connect_retries);\n\n   return fd;\n}\n\njb_socket connect_to_forward(struct client_state *csp, struct forward_spec *fwd, int is_proxy) {\n    csp->fwd = fwd;\n    const char *dest_host;\n    int dest_port;\n    /* Figure out if we need to connect to the web server or a HTTP proxy. */\n    if (fwd->forward_host)\n    {\n        /* HTTP proxy */\n        dest_host = fwd->forward_host;\n        dest_port = fwd->forward_port;\n    }\n    else\n    {\n        /* Web server */\n        dest_host = csp->http->host;\n        dest_port = csp->http->port;\n    }\n\n    /* Connect, maybe using a SOCKS proxy */\n    switch (fwd->type)\n    {\n        case SOCKS_NONE:\n        case FORWARD_WEBSERVER:\n            return connect_to(dest_host, dest_port, csp, is_proxy);\n            break;\n        case SOCKS_4:\n        case SOCKS_4A:\n            return socks4_connect(fwd->gateway_host, fwd->gateway_port, fwd->type, dest_host, dest_port, csp);\n            break;\n        case SOCKS_5:\n        case SOCKS_5T:\n            return socks5_connect(fwd->gateway_host, fwd->gateway_port, fwd->type, dest_host, dest_port, csp);\n            break;\n        default:\n            log_error(LOG_LEVEL_FATAL,\n                      \"Internal error in rfc2553_connect_to() ip. Bad proxy type: %d\", fwd->type);\n            return JB_INVALID_SOCKET;\n    }\n}\n\n#ifdef HAVE_RFC2553\n/* Getaddrinfo implementation */\nstatic jb_socket rfc2553_connect_to(const char *host, int portnum, struct client_state *csp, int is_proxy)\n{\n    struct addrinfo hints, *result, *rp;\n    char service[6];\n    int retval;\n    jb_socket fd;\n    fd_set wfds;\n    struct timeval timeout;\n    #if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n    int   flags;\n    #endif\n    int connect_failed;\n    /*\n    * XXX: Initializeing it here is only necessary\n    *      because not all situations are properly\n    *      covered yet.\n    */\n    int socket_error = 0;\n    if (is_proxy) {\n        log_time_stage(csp, TIME_STAGE_PROXY_DNS_START);\n    }else {\n        log_time_stage(csp, TIME_STAGE_DNS_START);\n    }\n\n    struct access_control_addr dst[1];\n\n    /* Don't leak memory when retrying. */\n    freez(csp->error_message);\n    freez(csp->http->host_ip_addr_str);\n\n    retval = snprintf(service, sizeof(service), \"%d\", portnum);\n    if ((-1 == retval) || (sizeof(service) <= retval))\n    {\n        log_error(LOG_LEVEL_ERROR,\n         \"Port number (%d) ASCII decimal representation doesn't fit into 6 bytes\",\n         portnum);\n        csp->error_message = strdup(\"Invalid port number\");\n        csp->http->host_ip_addr_str = strdup(\"unknown\");\n        return(JB_INVALID_SOCKET);\n    }\n\n    memset((char *)&hints, 0, sizeof(hints));\n    hints.ai_family = AF_UNSPEC;\n    hints.ai_socktype = SOCK_STREAM;\n    hints.ai_flags = AI_NUMERICSERV; /* avoid service look-up */\n    #ifdef AI_ADDRCONFIG\n    hints.ai_flags |= AI_ADDRCONFIG;\n    #endif\n    if ((retval = getaddrinfo(host, service, &hints, &result)))\n    {\n        if (is_proxy) {\n            log_time_stage(csp, TIME_STAGE_PROXY_DNS_FAIL);\n        }else {\n            log_time_stage(csp, TIME_STAGE_DNS_FAIL);\n            if (proxy_list) {\n                csp->routing = ROUTE_PROXY;\n                csp->current_forward_stage = FORWARD_STAGE_DNS_FAILURE;\n                return connect_to_forward(csp, proxy_list, 1);\n            }\n        }\n        log_error(LOG_LEVEL_INFO,\n         \"Can not resolve %s: %s\", host, gai_strerror(retval));\n        /* XXX: Should find a better way to propagate this error. */\n        errno = EINVAL;\n        csp->error_message = strdup(gai_strerror(retval));\n        csp->http->host_ip_addr_str = strdup(\"unknown\");\n        return(JB_INVALID_SOCKET);\n    }\n\n    csp->http->host_ip_addr_str = malloc_or_die(NI_MAXHOST);\n\n    for (rp = result; rp != NULL; rp = rp->ai_next)\n    {\n        memcpy(&dst->addr, rp->ai_addr, rp->ai_addrlen);\n    #ifdef FEATURE_ACL\n        if (block_acl(dst, csp))\n        {\n    #ifdef __OS2__\n         socket_error = errno = SOCEPERM;\n    #else\n         socket_error = errno = EPERM;\n    #endif\n         continue;\n        }\n    #endif /* def FEATURE_ACL */\n\n        retval = getnameinfo(rp->ai_addr, rp->ai_addrlen, csp->http->host_ip_addr_str, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);\n        if (retval)\n        {\n         log_error(LOG_LEVEL_ERROR,\n            \"Failed to get the host name from the socket structure: %s\",\n            gai_strerror(retval));\n         continue;\n        }\n        if (is_proxy) {\n            log_time_stage(csp, TIME_STAGE_PROXY_DNS_END);\n        }else {\n            csp->http->remote_host_ip_addr_str = strdup_or_die(csp->http->host_ip_addr_str);\n            log_time_stage(csp, TIME_STAGE_DNS_END);\n        }\n        if (!is_proxy) {\n            if (dst->addr.ss_family == AF_INET) {\n                // IPv4\n                if (csp->current_forward_stage == FORWARD_STAGE_NONE && !csp->forward_determined) {\n                    log_time_stage(csp, TIME_STAGE_IP_RULE_MATCH_START);\n                    struct forward_spec *fwd = forward_ip(csp, dst->addr);\n                    log_time_stage(csp, TIME_STAGE_IP_RULE_MATCH_END);\n                    csp->forward_determined = 1;\n                    if (csp->routing == ROUTE_NONE) {\n                        log_time_stage(csp, TIME_STAGE_DNS_IP_RULE_MATCH_START);\n                        fwd = forward_dns_pollution_ip(csp, dst->addr);\n                        log_time_stage(csp, TIME_STAGE_DNS_IP_RULE_MATCH_END);\n                        if (csp->routing == ROUTE_NONE) {\n                            if (global_mode && proxy_list) {\n                                log_time_stage(csp, TIME_STAGE_GLOBAL_MODE);\n                                fwd = proxy_list;\n                                csp->routing = ROUTE_PROXY;\n                            }else {\n                                log_time_stage(csp, TIME_STAGE_NON_GLOBAL_MODE);\n                                csp->routing = ROUTE_DIRECT;\n                            }\n                        }\n                    }\n                    if (csp->routing == ROUTE_NONE || csp->routing == ROUTE_DIRECT) {\n\n                    }else if (csp->routing == ROUTE_BLOCK) {\n                        log_error(LOG_LEVEL_CONNECT,\n                                  \"Block request to ip: %s\", csp->http->host_ip_addr_str);\n                        freeaddrinfo(result);\n                        return JB_INVALID_SOCKET;\n                    }else {\n                        if (fwd) {\n                            freeaddrinfo(result);\n                            return connect_to_forward(csp, fwd, 1);\n                        }else {\n                            // No proxy provided.\n                        }\n                    }\n                }\n            }else {\n                csp->is_ipv6 = 1;\n                csp->routing = ROUTE_DIRECT;\n                log_time_stage(csp, TIME_STAGE_IPV6);\n            }\n        }\n        if (is_proxy) {\n            log_time_stage(csp, TIME_STAGE_PROXY_START);\n        }else {\n            log_time_stage(csp, TIME_STAGE_REMOTE_START);\n        }\n\n        fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n    #ifdef _WIN32\n        if (fd == JB_INVALID_SOCKET)\n    #else\n        if (fd < 0)\n    #endif\n        {\n         continue;\n        }\n\n    #ifndef _WIN32\n        if (fd >= FD_SETSIZE)\n        {\n            log_error(LOG_LEVEL_ERROR,\n            \"Server socket number too high to use select(): %d >= %d\",\n            fd, FD_SETSIZE);\n            close_socket(fd);\n            freeaddrinfo(result);\n            return JB_INVALID_SOCKET;\n        }\n    #endif\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n        mark_socket_for_close_on_execute(fd);\n#endif\n\n        set_no_delay_flag(fd);\n        int yes = 1;\n        setsockopt (fd, SOL_SOCKET, SO_NOSIGPIPE, (char *) &yes, sizeof (yes));\n\n#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n        if ((flags = fcntl(fd, F_GETFL, 0)) != -1)\n        {\n            flags |= O_NDELAY;\n            fcntl(fd, F_SETFL, flags);\n        }\n#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */\n\n        connect_failed = 0;\n        while (connect(fd, rp->ai_addr, rp->ai_addrlen) == JB_INVALID_SOCKET)\n        {\n#ifdef __OS2__\n            errno = sock_errno();\n#endif /* __OS2__ */\n\n#ifdef _WIN32\n            if (errno == WSAEINPROGRESS)\n#else /* ifndef _WIN32 */\n            if (errno == EINPROGRESS)\n#endif /* ndef _WIN32 || __OS2__ */\n            {\n                break;\n            }\n\n            if (errno != EINTR)\n            {\n                socket_error = errno;\n                close_socket(fd);\n                connect_failed = 1;\n                break;\n            }\n        }\n        if (connect_failed)\n        {\n            continue;\n        }\n\n#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n        if (flags != -1)\n        {\n            flags &= ~O_NDELAY;\n            fcntl(fd, F_SETFL, flags);\n        }\n#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */\n\n        /* wait for connection to complete */\n        FD_ZERO(&wfds);\n        FD_SET(fd, &wfds);\n\n        memset(&timeout, 0, sizeof(timeout));\n        timeout.tv_sec  = 30;\n\n        /* MS Windows uses int, not SOCKET, for the 1st arg of select(). Weird! */\n        if ((select((int)fd + 1, NULL, &wfds, NULL, &timeout) > 0) && FD_ISSET(fd, &wfds))\n        {\n            socklen_t optlen = sizeof(socket_error);\n            if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, &socket_error, &optlen))\n            {\n                if (!socket_error)\n                {\n                    /* Connection established, no need to try other addresses. */\n                    break;\n                }\n                if (rp->ai_next != NULL)\n                {\n                    /*\n                    * There's another address we can try, so log that this\n                    * one didn't work out. If the last one fails, too,\n                    * it will get logged outside the loop body so we don't\n                    * have to mention it here.\n                    */\n                    log_error(LOG_LEVEL_CONNECT, \"Could not connect to [%s]:%s: %s.\",\n                      csp->http->host_ip_addr_str, service, strerror(socket_error));\n                }\n            }\n            else\n            {\n                socket_error = errno;\n                log_error(LOG_LEVEL_ERROR, \"Could not get the state of \"\n                          \"the connection to [%s]:%s: %s; dropping connection.\",\n                          csp->http->host_ip_addr_str, service, strerror(errno));\n            }\n        }\n\n        /* Connection failed, try next address */\n        close_socket(fd);\n    }\n\n    freeaddrinfo(result);\n    if (!rp)\n    {\n        log_error(LOG_LEVEL_CONNECT, \"Could not connect to [%s]:%s: %s.\",\n         host, service, strerror(socket_error));\n        csp->error_message = strdup(strerror(socket_error));\n        return(JB_INVALID_SOCKET);\n    }\n    log_error(LOG_LEVEL_CONNECT, \"Connected to %s[%s]:%s.\",\n      host, csp->http->host_ip_addr_str, service);\n    if (is_proxy) {\n        log_time_stage(csp, TIME_STAGE_PROXY_CONNECTED);\n    }else {\n        log_time_stage(csp, TIME_STAGE_REMOTE_CONNECTED);\n    }\n    return(fd);\n\n}\n\n#else /* ndef HAVE_RFC2553 */\n/* Pre-getaddrinfo implementation */\n\nstatic jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct client_state *csp)\n{\n   struct sockaddr_in inaddr;\n   jb_socket fd;\n   unsigned int addr;\n   fd_set wfds;\n   struct timeval tv[1];\n#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n   int   flags;\n#endif\n\n#ifdef FEATURE_ACL\n   struct access_control_addr dst[1];\n#endif /* def FEATURE_ACL */\n\n   /* Don't leak memory when retrying. */\n   freez(csp->http->host_ip_addr_str);\n\n   memset((char *)&inaddr, 0, sizeof inaddr);\n\n   if ((addr = resolve_hostname_to_ip(host)) == INADDR_NONE)\n   {\n      csp->http->host_ip_addr_str = strdup(\"unknown\");\n      return(JB_INVALID_SOCKET);\n   }\n\n#ifdef FEATURE_ACL\n   dst->addr = ntohl(addr);\n   dst->port = portnum;\n\n   if (block_acl(dst, csp))\n   {\n#ifdef __OS2__\n      errno = SOCEPERM;\n#else\n      errno = EPERM;\n#endif\n      return(JB_INVALID_SOCKET);\n   }\n#endif /* def FEATURE_ACL */\n\n   inaddr.sin_addr.s_addr = addr;\n   inaddr.sin_family      = AF_INET;\n   csp->http->host_ip_addr_str = strdup(inet_ntoa(inaddr.sin_addr));\n\n#ifndef _WIN32\n   if (sizeof(inaddr.sin_port) == sizeof(short))\n#endif /* ndef _WIN32 */\n   {\n      inaddr.sin_port = htons((unsigned short) portnum);\n   }\n#ifndef _WIN32\n   else\n   {\n      inaddr.sin_port = htonl((unsigned long)portnum);\n   }\n#endif /* ndef _WIN32 */\n\n   fd = socket(inaddr.sin_family, SOCK_STREAM, 0);\n#ifdef _WIN32\n   if (fd == JB_INVALID_SOCKET)\n#else\n   if (fd < 0)\n#endif\n   {\n      return(JB_INVALID_SOCKET);\n   }\n\n#ifndef _WIN32\n   if (fd >= FD_SETSIZE)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Server socket number too high to use select(): %d >= %d\",\n         fd, FD_SETSIZE);\n      close_socket(fd);\n      return JB_INVALID_SOCKET;\n   }\n#endif\n\n   set_no_delay_flag(fd);\n    int yes = 1;\n    setsockopt (fd, SOL_SOCKET, SO_NOSIGPIPE, (char *) &yes, sizeof (yes));\n\n#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n   if ((flags = fcntl(fd, F_GETFL, 0)) != -1)\n   {\n      flags |= O_NDELAY;\n      fcntl(fd, F_SETFL, flags);\n#ifdef FEATURE_EXTERNAL_FILTERS\n      mark_socket_for_close_on_execute(fd);\n#endif\n   }\n#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */\n\n   while (connect(fd, (struct sockaddr *) & inaddr, sizeof inaddr) == JB_INVALID_SOCKET)\n   {\n#ifdef _WIN32\n      if (errno == WSAEINPROGRESS)\n#elif __OS2__\n      if (sock_errno() == EINPROGRESS)\n#else /* ifndef _WIN32 */\n      if (errno == EINPROGRESS)\n#endif /* ndef _WIN32 || __OS2__ */\n      {\n         break;\n      }\n\n#ifdef __OS2__\n      if (sock_errno() != EINTR)\n#else\n      if (errno != EINTR)\n#endif /* __OS2__ */\n      {\n         close_socket(fd);\n         return(JB_INVALID_SOCKET);\n      }\n   }\n\n#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)\n   if (flags != -1)\n   {\n      flags &= ~O_NDELAY;\n      fcntl(fd, F_SETFL, flags);\n   }\n#endif /* !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__) */\n\n   /* wait for connection to complete */\n   FD_ZERO(&wfds);\n   FD_SET(fd, &wfds);\n\n   tv->tv_sec  = 30;\n   tv->tv_usec = 0;\n\n   /* MS Windows uses int, not SOCKET, for the 1st arg of select(). Weird! */\n   if (select((int)fd + 1, NULL, &wfds, NULL, tv) <= 0)\n   {\n      close_socket(fd);\n      return(JB_INVALID_SOCKET);\n   }\n   return(fd);\n\n}\n#endif /* ndef HAVE_RFC2553 */\n\n\n/*********************************************************************\n *\n * Function    :  write_socket\n *\n * Description :  Write the contents of buf (for n bytes) to socket fd.\n *\n * Parameters  :\n *          1  :  fd = file descriptor (aka. handle) of socket to write to.\n *          2  :  buf = pointer to data to be written.\n *          3  :  len = length of data to be written to the socket \"fd\".\n *\n * Returns     :  0 on success (entire buffer sent).\n *                nonzero on error.\n *\n *********************************************************************/\n#ifdef AMIGA\nint write_socket(jb_socket fd, const char *buf, ssize_t len)\n#else\nint write_socket(jb_socket fd, const char *buf, size_t len)\n#endif\n{\n   if (len == 0)\n   {\n      return 0;\n   }\n\n   log_error(LOG_LEVEL_WRITING, \"to socket %d: %N\", fd, len, buf);\n\n#if defined(_WIN32)\n   return (send(fd, buf, (int)len, 0) != (int)len);\n#elif defined(__BEOS__) || defined(AMIGA)\n   return (send(fd, buf, len, 0) != len);\n#elif defined(__OS2__)\n   /*\n    * Break the data up into SOCKET_SEND_MAX chunks for sending...\n    * OS/2 seemed to complain when the chunks were too large.\n    */\n#define SOCKET_SEND_MAX 65000\n   {\n      int send_len, send_rc = 0, i = 0;\n      while ((i < len) && (send_rc != -1))\n      {\n         if ((i + SOCKET_SEND_MAX) > len)\n            send_len = len - i;\n         else\n            send_len = SOCKET_SEND_MAX;\n         send_rc = send(fd,(char*)buf + i, send_len, 0);\n         if (send_rc == -1)\n            return 1;\n         i = i + send_len;\n      }\n      return 0;\n   }\n#else\n   return (write(fd, buf, len) != len);\n#endif\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  read_socket\n *\n * Description :  Read from a TCP/IP socket in a platform independent way.\n *\n * Parameters  :\n *          1  :  fd = file descriptor of the socket to read\n *          2  :  buf = pointer to buffer where data will be written\n *                Must be >= len bytes long.\n *          3  :  len = maximum number of bytes to read\n *\n * Returns     :  On success, the number of bytes read is returned (zero\n *                indicates end of file), and the file position is advanced\n *                by this number.  It is not an error if this number is\n *                smaller than the number of bytes requested; this may hap-\n *                pen for example because fewer bytes are actually available\n *                right now (maybe because we were close to end-of-file, or\n *                because we are reading from a pipe, or from a terminal,\n *                or because read() was interrupted by a signal).  On error,\n *                -1 is returned, and errno is set appropriately.  In this\n *                case it is left unspecified whether the file position (if\n *                any) changes.\n *\n *********************************************************************/\nint read_socket(jb_socket fd, char *buf, int len)\n{\n   int ret;\n\n   if (len <= 0)\n   {\n      return(0);\n   }\n\n#if defined(_WIN32)\n   ret = recv(fd, buf, len, 0);\n#elif defined(__BEOS__) || defined(AMIGA) || defined(__OS2__)\n   ret = recv(fd, buf, (size_t)len, 0);\n#else\n   ret = (int)read(fd, buf, (size_t)len);\n#endif\n\n   if (ret > 0)\n   {\n      log_error(LOG_LEVEL_RECEIVED, \"from socket %d: %N\", fd, ret, buf);\n   }\n\n   return ret;\n}\n\n\n/*********************************************************************\n *\n * Function    :  data_is_available\n *\n * Description :  Waits for data to arrive on a socket.\n *\n * Parameters  :\n *          1  :  fd = file descriptor of the socket to read\n *          2  :  seconds_to_wait = number of seconds after which we give up.\n *\n * Returns     :  TRUE if data arrived in time,\n *                FALSE otherwise.\n *\n *********************************************************************/\nint data_is_available(jb_socket fd, int seconds_to_wait)\n{\n   char buf[10];\n   fd_set rfds;\n   struct timeval timeout;\n   int n;\n\n   memset(&timeout, 0, sizeof(timeout));\n   timeout.tv_sec = seconds_to_wait;\n\n#ifdef __OS2__\n   /* Copy and pasted from jcc.c ... */\n   memset(&rfds, 0, sizeof(fd_set));\n#else\n   FD_ZERO(&rfds);\n#endif\n   FD_SET(fd, &rfds);\n\n   n = select(fd+1, &rfds, NULL, NULL, &timeout);\n\n   /*\n    * XXX: Do we care about the different error conditions?\n    */\n   return ((n == 1) && (1 == recv(fd, buf, 1, MSG_PEEK)));\n}\n\n\n/*********************************************************************\n *\n * Function    :  close_socket\n *\n * Description :  Closes a TCP/IP socket\n *\n * Parameters  :\n *          1  :  fd = file descriptor of socket to be closed\n *\n * Returns     :  void\n *\n *********************************************************************/\nvoid close_socket(jb_socket fd)\n{\n#if defined(_WIN32) || defined(__BEOS__)\n   closesocket(fd);\n#elif defined(AMIGA)\n   CloseSocket(fd);\n#elif defined(__OS2__)\n   soclose(fd);\n#else\n   close(fd);\n#endif\n}\n\n\n/*********************************************************************\n *\n * Function    :  drain_and_close_socket\n *\n * Description :  Closes a TCP/IP socket after draining unread data\n *\n * Parameters  :\n *          1  :  fd = file descriptor of the socket to be closed\n *\n * Returns     :  void\n *\n *********************************************************************/\nvoid drain_and_close_socket(jb_socket fd)\n{\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if (socket_is_still_alive(fd))\n#endif\n   {\n      int bytes_drained_total = 0;\n      int bytes_drained;\n\n#ifdef HAVE_SHUTDOWN\n/* Apparently Windows has shutdown() but not SHUT_WR. */\n#ifndef SHUT_WR\n#define SHUT_WR 1\n#endif\n      if (0 != shutdown(fd, SHUT_WR))\n      {\n         log_error(LOG_LEVEL_CONNECT, \"Failed to shutdown socket %d: %E\", fd);\n      }\n#endif\n#define ARBITRARY_DRAIN_LIMIT 10000\n      do\n      {\n         char drainage[500];\n\n         if (!data_is_available(fd, 0))\n         {\n            /*\n             * If there is no data available right now, don't try\n             * to drain the socket as read_socket() could block.\n             */\n            break;\n         }\n\n         bytes_drained = read_socket(fd, drainage, sizeof(drainage));\n         if (bytes_drained < 0)\n         {\n            log_error(LOG_LEVEL_CONNECT, \"Failed to drain socket %d: %E\", fd);\n         }\n         else if (bytes_drained > 0)\n         {\n            bytes_drained_total += bytes_drained;\n            if (bytes_drained_total > ARBITRARY_DRAIN_LIMIT)\n            {\n               log_error(LOG_LEVEL_CONNECT, \"Giving up draining socket %d\", fd);\n               break;\n            }\n         }\n      } while (bytes_drained > 0);\n      if (bytes_drained_total != 0)\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"Drained %d bytes before closing socket %d\", bytes_drained_total, fd);\n      }\n   }\n\n   close_socket(fd);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  bind_port\n *\n * Description :  Call socket, set socket options, and listen.\n *                Called by listen_loop to \"boot up\" our proxy address.\n *\n * Parameters  :\n *          1  :  hostnam = TCP/IP address to bind/listen to\n *          2  :  portnum = port to listen on\n *          3  :  pfd = pointer used to return file descriptor.\n *\n * Returns     :  if success, returns 0 and sets *pfd.\n *                if failure, returns -3 if address is in use,\n *                                    -2 if address unresolvable,\n *                                    -1 otherwise\n *********************************************************************/\nint bind_port(const char *hostnam, int portnum, jb_socket *pfd)\n{\n#ifdef HAVE_RFC2553\n   struct addrinfo hints;\n   struct addrinfo *result, *rp;\n   /*\n    * XXX: portnum should be a string to allow symbolic service\n    * names in the configuration file and to avoid the following\n    * int2string.\n    */\n   char servnam[6];\n   int retval;\n#else\n   struct sockaddr_in inaddr;\n#endif /* def HAVE_RFC2553 */\n   jb_socket fd = JB_INVALID_SOCKET;\n#ifndef _WIN32\n   int one = 1;\n#endif /* ndef _WIN32 */\n\n   *pfd = JB_INVALID_SOCKET;\n\n#ifdef HAVE_RFC2553\n   retval = snprintf(servnam, sizeof(servnam), \"%d\", portnum);\n   if ((-1 == retval) || (sizeof(servnam) <= retval))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Port number (%d) ASCII decimal representation doesn't fit into 6 bytes\",\n         portnum);\n      return -1;\n   }\n\n   memset(&hints, 0, sizeof(struct addrinfo));\n   if (hostnam == NULL)\n   {\n      /*\n       * XXX: This is a hack. The right thing to do\n       * would be to bind to both AF_INET and AF_INET6.\n       * This will also fail if there is no AF_INET\n       * version available.\n       */\n      hints.ai_family = AF_INET;\n   }\n   else\n   {\n      hints.ai_family = AF_UNSPEC;\n   }\n   hints.ai_socktype = SOCK_STREAM;\n   hints.ai_flags = AI_PASSIVE;\n   hints.ai_protocol = 0; /* Really any stream protocol or TCP only */\n   hints.ai_canonname = NULL;\n   hints.ai_addr = NULL;\n   hints.ai_next = NULL;\n\n   if ((retval = getaddrinfo(hostnam, servnam, &hints, &result)))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Can not resolve %s: %s\", hostnam, gai_strerror(retval));\n      return -2;\n   }\n#else\n   memset((char *)&inaddr, '\\0', sizeof inaddr);\n\n   inaddr.sin_family      = AF_INET;\n   inaddr.sin_addr.s_addr = resolve_hostname_to_ip(hostnam);\n\n   if (inaddr.sin_addr.s_addr == INADDR_NONE)\n   {\n      return(-2);\n   }\n\n#ifndef _WIN32\n   if (sizeof(inaddr.sin_port) == sizeof(short))\n#endif /* ndef _WIN32 */\n   {\n      inaddr.sin_port = htons((unsigned short) portnum);\n   }\n#ifndef _WIN32\n   else\n   {\n      inaddr.sin_port = htonl((unsigned long) portnum);\n   }\n#endif /* ndef _WIN32 */\n#endif /* def HAVE_RFC2553 */\n\n#ifdef HAVE_RFC2553\n   for (rp = result; rp != NULL; rp = rp->ai_next)\n   {\n      fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n#else\n   fd = socket(AF_INET, SOCK_STREAM, 0);\n#endif /* def HAVE_RFC2553 */\n\n#ifdef _WIN32\n   if (fd == JB_INVALID_SOCKET)\n#else\n   if (fd < 0)\n#endif\n   {\n#ifdef HAVE_RFC2553\n      continue;\n#else\n      return(-1);\n#endif\n   }\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n   mark_socket_for_close_on_execute(fd);\n#endif\n\n#ifndef _WIN32\n   /*\n    * This is not needed for Win32 - in fact, it stops\n    * duplicate instances of Privoxy from being caught.\n    *\n    * On UNIX, we assume the user is sensible enough not\n    * to start Privoxy multiple times on the same IP.\n    * Without this, stopping and restarting Privoxy\n    * from a script fails.\n    * Note: SO_REUSEADDR is meant to only take over\n    * sockets which are *not* in listen state in Linux,\n    * e.g. sockets in TIME_WAIT. YMMV.\n    */\n   setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one));\n   setsockopt (fd, SOL_SOCKET, SO_NOSIGPIPE, (char *)&one, sizeof(one));\n#endif /* ndef _WIN32 */\n\n#ifdef HAVE_RFC2553\n   if (bind(fd, rp->ai_addr, rp->ai_addrlen) < 0)\n#else\n   if (bind(fd, (struct sockaddr *)&inaddr, sizeof(inaddr)) < 0)\n#endif\n   {\n#ifdef _WIN32\n      errno = WSAGetLastError();\n      if (errno == WSAEADDRINUSE)\n#else\n      if (errno == EADDRINUSE)\n#endif\n      {\n#ifdef HAVE_RFC2553\n         freeaddrinfo(result);\n#endif\n         close_socket(fd);\n         return(-3);\n      }\n      else\n      {\n         close_socket(fd);\n#ifndef HAVE_RFC2553\n         return(-1);\n      }\n   }\n#else\n      }\n   }\n   else\n   {\n      /* bind() succeeded, escape from for-loop */\n      /*\n       * XXX: Support multiple listening sockets (e.g. localhost\n       * resolves to AF_INET and AF_INET6, but only the first address\n       * is used\n       */\n      break;\n   }\n   }\n\n   freeaddrinfo(result);\n   if (rp == NULL)\n   {\n      /* All bind()s failed */\n      return(-1);\n   }\n#endif /* ndef HAVE_RFC2553 */\n\n   while (listen(fd, MAX_LISTEN_BACKLOG) == -1)\n   {\n      if (errno != EINTR)\n      {\n         close_socket(fd);\n         return(-1);\n      }\n   }\n\n   *pfd = fd;\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_host_information\n *\n * Description :  Determines the IP address the client used to\n *                reach us and the hostname associated with it.\n *\n *                XXX: Most of the code has been copy and pasted\n *                from accept_connection() and not all of the\n *                ifdefs paths have been tested afterwards.\n *\n * Parameters  :\n *          1  :  afd = File descriptor returned from accept().\n *          2  :  ip_address = Pointer to return the pointer to\n *                             the ip address string.\n *          3  :  port =       Pointer to return the pointer to\n *                             the TCP port string.\n *          4  :  hostname =   Pointer to return the pointer to\n *                             the hostname or NULL if the caller\n *                             isn't interested in it.\n *\n * Returns     :  void.\n *\n *********************************************************************/\nvoid get_host_information(jb_socket afd, char **ip_address, char **port,\n                          char **hostname)\n{\n#ifdef HAVE_RFC2553\n   struct sockaddr_storage server;\n   int retval;\n#else\n   struct sockaddr_in server;\n   struct hostent *host = NULL;\n#endif /* HAVE_RFC2553 */\n#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)\n   /* according to accept_connection() this fixes a warning. */\n   int s_length, s_length_provided;\n#else\n   socklen_t s_length, s_length_provided;\n#endif\n#ifndef HAVE_RFC2553\n#if defined(HAVE_GETHOSTBYADDR_R_8_ARGS) ||  defined(HAVE_GETHOSTBYADDR_R_7_ARGS) || defined(HAVE_GETHOSTBYADDR_R_5_ARGS)\n   struct hostent result;\n#if defined(HAVE_GETHOSTBYADDR_R_5_ARGS)\n   struct hostent_data hdata;\n#else\n   char hbuf[HOSTENT_BUFFER_SIZE];\n   int thd_err;\n#endif /* def HAVE_GETHOSTBYADDR_R_5_ARGS */\n#endif /* def HAVE_GETHOSTBYADDR_R_(8|7|5)_ARGS */\n#endif /* ifndef HAVE_RFC2553 */\n   s_length = s_length_provided = sizeof(server);\n\n   if (NULL != hostname)\n   {\n      *hostname = NULL;\n   }\n   *ip_address = NULL;\n   *port = NULL;\n\n   if (!getsockname(afd, (struct sockaddr *) &server, &s_length))\n   {\n      if (s_length > s_length_provided)\n      {\n         log_error(LOG_LEVEL_ERROR, \"getsockname() truncated server address\");\n         return;\n      }\n/*\n * XXX: Workaround for missing header on Windows when\n *      configured with --disable-ipv6-support.\n *      The proper fix is to not use NI_MAXSERV in\n *      that case. It works by accident on other platforms\n *      as <netdb.h> is included unconditionally there.\n */\n#ifndef NI_MAXSERV\n#define NI_MAXSERV 32\n#endif\n      *port = malloc_or_die(NI_MAXSERV);\n\n#ifdef HAVE_RFC2553\n      *ip_address = malloc_or_die(NI_MAXHOST);\n      retval = getnameinfo((struct sockaddr *) &server, s_length,\n         *ip_address, NI_MAXHOST, *port, NI_MAXSERV,\n         NI_NUMERICHOST|NI_NUMERICSERV);\n      if (retval)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Unable to print my own IP address: %s\", gai_strerror(retval));\n         freez(*ip_address);\n         freez(*port);\n         return;\n      }\n#else\n      *ip_address = strdup(inet_ntoa(server.sin_addr));\n      snprintf(*port, NI_MAXSERV, \"%hu\", ntohs(server.sin_port));\n#endif /* HAVE_RFC2553 */\n      if (NULL == hostname)\n      {\n         /*\n          * We're done here, the caller isn't\n          * interested in knowing the hostname.\n          */\n         return;\n      }\n\n#ifdef HAVE_RFC2553\n      *hostname = malloc_or_die(NI_MAXHOST);\n      retval = getnameinfo((struct sockaddr *) &server, s_length,\n         *hostname, NI_MAXHOST, NULL, 0, NI_NAMEREQD);\n      if (retval)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Unable to resolve my own IP address: %s\", gai_strerror(retval));\n         freez(*hostname);\n      }\n#else\n#if defined(HAVE_GETHOSTBYADDR_R_8_ARGS)\n      gethostbyaddr_r((const char *)&server.sin_addr,\n                      sizeof(server.sin_addr), AF_INET,\n                      &result, hbuf, HOSTENT_BUFFER_SIZE,\n                      &host, &thd_err);\n#elif defined(HAVE_GETHOSTBYADDR_R_7_ARGS)\n      host = gethostbyaddr_r((const char *)&server.sin_addr,\n                      sizeof(server.sin_addr), AF_INET,\n                      &result, hbuf, HOSTENT_BUFFER_SIZE, &thd_err);\n#elif defined(HAVE_GETHOSTBYADDR_R_5_ARGS)\n      if (0 == gethostbyaddr_r((const char *)&server.sin_addr,\n                               sizeof(server.sin_addr), AF_INET,\n                               &result, &hdata))\n      {\n         host = &result;\n      }\n      else\n      {\n         host = NULL;\n      }\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n      privoxy_mutex_lock(&resolver_mutex);\n      host = gethostbyaddr((const char *)&server.sin_addr,\n                           sizeof(server.sin_addr), AF_INET);\n      privoxy_mutex_unlock(&resolver_mutex);\n#else\n      host = gethostbyaddr((const char *)&server.sin_addr,\n                           sizeof(server.sin_addr), AF_INET);\n#endif\n      if (host == NULL)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Unable to get my own hostname: %E\\n\");\n      }\n      else\n      {\n         *hostname = strdup(host->h_name);\n      }\n#endif /* else def HAVE_RFC2553 */\n   }\n\n   return;\n}\n\n\n/*********************************************************************\n *\n * Function    :  accept_connection\n *\n * Description :  Accepts a connection on one of possibly multiple\n *                sockets. The socket(s) to check must have been\n *                created using bind_port().\n *\n * Parameters  :\n *          1  :  csp = Client state, cfd, ip_addr_str, and\n *                      ip_addr_long will be set by this routine.\n *          2  :  fds = File descriptors returned from bind_port\n *\n * Returns     :  when a connection is accepted, it returns 1 (TRUE).\n *                On an error it returns 0 (FALSE).\n *\n *********************************************************************/\nint accept_connection(struct client_state * csp, jb_socket fds[])\n{\n#ifdef HAVE_RFC2553\n   /* XXX: client is stored directly into csp->tcp_addr */\n#define client (csp->tcp_addr)\n#else\n   struct sockaddr_in client;\n#endif\n   jb_socket afd;\n   socklen_t c_length;\n   int retval;\n   int i;\n   int max_selected_socket;\n   fd_set selected_fds;\n   jb_socket fd;\n\n   c_length = sizeof(client);\n\n   /*\n    * Wait for a connection on any socket.\n    * Return immediately if no socket is listening.\n    * XXX: Why not treat this as fatal error?\n    */\n   FD_ZERO(&selected_fds);\n   max_selected_socket = 0;\n   for (i = 0; i < MAX_LISTENING_SOCKETS; i++)\n   {\n      if (JB_INVALID_SOCKET != fds[i])\n      {\n         FD_SET(fds[i], &selected_fds);\n         if (max_selected_socket < fds[i] + 1)\n         {\n            max_selected_socket = fds[i] + 1;\n         }\n      }\n   }\n   if (0 == max_selected_socket)\n   {\n      return 0;\n   }\n   do\n   {\n      retval = select(max_selected_socket, &selected_fds, NULL, NULL, NULL);\n   } while (retval < 0 && errno == EINTR);\n   if (retval <= 0)\n   {\n      if (0 == retval)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Waiting on new client failed because select(2) returned 0.\"\n            \" This should not happen.\");\n      }\n      else\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Waiting on new client failed because of problems in select(2): \"\n            \"%s.\", strerror(errno));\n      }\n      return 0;\n   }\n   for (i = 0; i < MAX_LISTENING_SOCKETS && !FD_ISSET(fds[i], &selected_fds);\n         i++);\n   if (i >= MAX_LISTENING_SOCKETS)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"select(2) reported connected clients (number = %u, \"\n         \"descriptor boundary = %u), but none found.\",\n         retval, max_selected_socket);\n      return 0;\n   }\n   fd = fds[i];\n\n   /* Accept selected connection */\n   do\n   {\n#if defined(FEATURE_ACCEPT_FILTER) && defined(SO_ACCEPTFILTER)\n      struct accept_filter_arg af_options;\n      bzero(&af_options, sizeof(af_options));\n      strlcpy(af_options.af_name, \"httpready\", sizeof(af_options.af_name));\n      setsockopt(fd, SOL_SOCKET, SO_ACCEPTFILTER, &af_options, sizeof(af_options));\n#endif\n      afd = accept (fd, (struct sockaddr *) &client, &c_length);\n   } while (afd < 0 && errno == EINTR);\n   if (afd < 0)\n   {\n      return 0;\n   }\n\n#ifdef SO_LINGER\n   {\n      struct linger linger_options;\n      linger_options.l_onoff  = 1;\n      linger_options.l_linger = 5;\n      if (0 != setsockopt(afd, SOL_SOCKET, SO_LINGER, &linger_options, sizeof(linger_options)))\n      {\n         log_error(LOG_LEVEL_ERROR, \"Setting SO_LINGER on socket %d failed.\", afd);\n      }\n   }\n#endif\n\n   if (afd >= FD_SETSIZE)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Client socket number too high to use select(): %d >= %d\",\n         afd, FD_SETSIZE);\n      close_socket(afd);\n      return 0;\n   }\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n   mark_socket_for_close_on_execute(afd);\n#endif\n\n   set_no_delay_flag(afd);\n    int on = 1;\n    setsockopt (afd, SOL_SOCKET, SO_NOSIGPIPE, (char *)&on, sizeof(on));\n\n\n   csp->cfd = afd;\n#ifdef HAVE_RFC2553\n   csp->ip_addr_str = malloc_or_die(NI_MAXHOST);\n   retval = getnameinfo((struct sockaddr *) &client, c_length,\n         csp->ip_addr_str, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);\n   if (!csp->ip_addr_str || retval)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Can not save csp->ip_addr_str: %s\",\n         (csp->ip_addr_str) ? gai_strerror(retval) : \"Insuffcient memory\");\n      freez(csp->ip_addr_str);\n   }\n#undef client\n#else\n   csp->ip_addr_str  = strdup(inet_ntoa(client.sin_addr));\n   csp->ip_addr_long = ntohl(client.sin_addr.s_addr);\n#endif /* def HAVE_RFC2553 */\n\n   return 1;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  resolve_hostname_to_ip\n *\n * Description :  Resolve a hostname to an internet tcp/ip address.\n *                NULL or an empty string resolve to INADDR_ANY.\n *\n * Parameters  :\n *          1  :  host = hostname to resolve\n *\n * Returns     :  INADDR_NONE => failure, INADDR_ANY or tcp/ip address if successful.\n *\n *********************************************************************/\nunsigned long resolve_hostname_to_ip(const char *host)\n{\n   struct sockaddr_in inaddr;\n   struct hostent *hostp;\n#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) || defined(HAVE_GETHOSTBYNAME_R_5_ARGS) || defined(HAVE_GETHOSTBYNAME_R_3_ARGS)\n   struct hostent result;\n#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS) || defined(HAVE_GETHOSTBYNAME_R_5_ARGS)\n   char hbuf[HOSTENT_BUFFER_SIZE];\n   int thd_err;\n#else /* defined(HAVE_GETHOSTBYNAME_R_3_ARGS) */\n   struct hostent_data hdata;\n#endif /* def HAVE_GETHOSTBYNAME_R_(6|5)_ARGS */\n#endif /* def HAVE_GETHOSTBYNAME_R_(6|5|3)_ARGS */\n\n   if ((host == NULL) || (*host == '\\0'))\n   {\n      return(INADDR_ANY);\n   }\n\n   memset((char *) &inaddr, 0, sizeof inaddr);\n\n   if ((inaddr.sin_addr.s_addr = inet_addr(host)) == -1)\n   {\n      unsigned int dns_retries = 0;\n#if defined(HAVE_GETHOSTBYNAME_R_6_ARGS)\n      while (gethostbyname_r(host, &result, hbuf,\n                HOSTENT_BUFFER_SIZE, &hostp, &thd_err)\n             && (thd_err == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Timeout #%u while trying to resolve %s. Trying again.\",\n            dns_retries, host);\n      }\n#elif defined(HAVE_GETHOSTBYNAME_R_5_ARGS)\n      while (NULL == (hostp = gethostbyname_r(host, &result,\n                                 hbuf, HOSTENT_BUFFER_SIZE, &thd_err))\n             && (thd_err == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Timeout #%u while trying to resolve %s. Trying again.\",\n            dns_retries, host);\n      }\n#elif defined(HAVE_GETHOSTBYNAME_R_3_ARGS)\n      /*\n       * XXX: Doesn't retry in case of soft errors.\n       * Does this gethostbyname_r version set h_errno?\n       */\n      if (0 == gethostbyname_r(host, &result, &hdata))\n      {\n         hostp = &result;\n      }\n      else\n      {\n         hostp = NULL;\n      }\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n      privoxy_mutex_lock(&resolver_mutex);\n      while (NULL == (hostp = gethostbyname(host))\n             && (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Timeout #%u while trying to resolve %s. Trying again.\",\n            dns_retries, host);\n      }\n      privoxy_mutex_unlock(&resolver_mutex);\n#else\n      while (NULL == (hostp = gethostbyname(host))\n             && (h_errno == TRY_AGAIN) && (dns_retries++ < MAX_DNS_RETRIES))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Timeout #%u while trying to resolve %s. Trying again.\",\n            dns_retries, host);\n      }\n#endif /* def HAVE_GETHOSTBYNAME_R_(6|5|3)_ARGS */\n      /*\n       * On Mac OSX, if a domain exists but doesn't have a type A\n       * record associated with it, the h_addr member of the struct\n       * hostent returned by gethostbyname is NULL, even if h_length\n       * is 4. Therefore the second test below.\n       */\n      if (hostp == NULL || hostp->h_addr == NULL)\n      {\n         errno = EINVAL;\n         log_error(LOG_LEVEL_ERROR, \"could not resolve hostname %s\", host);\n         return(INADDR_NONE);\n      }\n      if (hostp->h_addrtype != AF_INET)\n      {\n#ifdef _WIN32\n         errno = WSAEPROTOTYPE;\n#else\n         errno = EPROTOTYPE;\n#endif\n         log_error(LOG_LEVEL_ERROR, \"hostname %s resolves to unknown address type.\", host);\n         return(INADDR_NONE);\n      }\n      memcpy((char *)&inaddr.sin_addr, (char *)hostp->h_addr, sizeof(inaddr.sin_addr));\n   }\n   return(inaddr.sin_addr.s_addr);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  socket_is_still_alive\n *\n * Description :  Figures out whether or not a socket is still alive.\n *\n * Parameters  :\n *          1  :  sfd = The socket to check.\n *\n * Returns     :  TRUE for yes, otherwise FALSE.\n *\n *********************************************************************/\nint socket_is_still_alive(jb_socket sfd)\n{\n   char buf[10];\n   int no_data_waiting;\n\n#ifdef HAVE_POLL\n   int poll_result;\n   struct pollfd poll_fd[1];\n\n   memset(poll_fd, 0, sizeof(poll_fd));\n   poll_fd[0].fd = sfd;\n   poll_fd[0].events = POLLIN;\n\n   poll_result = poll(poll_fd, 1, 0);\n\n   if (-1 == poll_result)\n   {\n      log_error(LOG_LEVEL_CONNECT, \"Polling socket %d failed.\", sfd);\n      return FALSE;\n   }\n   no_data_waiting = !(poll_fd[0].revents & POLLIN);\n#else\n   fd_set readable_fds;\n   struct timeval timeout;\n   int ret;\n\n   memset(&timeout, '\\0', sizeof(timeout));\n   FD_ZERO(&readable_fds);\n   FD_SET(sfd, &readable_fds);\n\n   ret = select((int)sfd+1, &readable_fds, NULL, NULL, &timeout);\n   if (ret < 0)\n   {\n      log_error(LOG_LEVEL_CONNECT, \"select() on socket %d failed: %E\", sfd);\n      return FALSE;\n   }\n   no_data_waiting = !FD_ISSET(sfd, &readable_fds);\n#endif /* def HAVE_POLL */\n\n   return (no_data_waiting || (1 == recv(sfd, buf, 1, MSG_PEEK)));\n}\n\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n/*********************************************************************\n *\n * Function    :  mark_socket_for_close_on_execute\n *\n * Description :  Marks a socket for close on execute.\n *\n *                Used so that external filters have no direct\n *                access to sockets they shouldn't care about.\n *\n *                Not implemented for all platforms.\n *\n * Parameters  :\n *          1  :  fd = The socket to mark\n *\n * Returns     :  void.\n *\n *********************************************************************/\nvoid mark_socket_for_close_on_execute(jb_socket fd)\n{\n#ifdef FEATURE_PTHREAD\n   int ret;\n\n   ret = fcntl(fd, F_SETFD, FD_CLOEXEC);\n\n   if (ret == -1)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"fcntl(%d, F_SETFD, FD_CLOEXEC) failed\", fd);\n   }\n#else\n#warning \"Sockets will be visible to external filters\"\n#endif\n}\n#endif /* def FEATURE_EXTERNAL_FILTERS */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/jbsockets.h",
    "content": "#ifndef JBSOCKETS_H_INCLUDED\n#define JBSOCKETS_H_INCLUDED\n#define JBSOCKETS_H_VERSION \"$Id: jbsockets.h,v 1.24 2014/06/02 06:22:20 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/jbsockets.h,v $\n *\n * Purpose     :  Contains wrappers for system-specific sockets code,\n *                so that the rest of Junkbuster can be more\n *                OS-independent.  Contains #ifdefs to make this work\n *                on many platforms.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\nstruct client_state;\n\nextern jb_socket connect_to(const char *host, int portnum, struct client_state *csp, int is_proxy);\nextern jb_socket connect_to_forward(struct client_state *csp, struct forward_spec *fwd, int is_proxy);\n#ifdef AMIGA\nextern int write_socket(jb_socket fd, const char *buf, ssize_t n);\n#else\nextern int write_socket(jb_socket fd, const char *buf, size_t n);\n#endif\nextern int read_socket(jb_socket fd, char *buf, int n);\nextern int data_is_available(jb_socket fd, int seconds_to_wait);\nextern void close_socket(jb_socket fd);\nextern void drain_and_close_socket(jb_socket fd);\n\nextern int bind_port(const char *hostnam, int portnum, jb_socket *pfd);\nextern int accept_connection(struct client_state * csp, jb_socket fds[]);\nextern void get_host_information(jb_socket afd, char **ip_address, char **port, char **hostname);\n\nextern unsigned long resolve_hostname_to_ip(const char *host);\n\nextern int socket_is_still_alive(jb_socket sfd);\n\n#ifdef FEATURE_EXTERNAL_FILTERS\nextern void mark_socket_for_close_on_execute(jb_socket fd);\n#endif\n\n/* Revision control strings from this header and associated .c file */\nextern const char jbsockets_rcs[];\nextern const char jbsockets_h_rcs[];\n\n/*\n * Solaris workaround\n * XXX: still necessary?\n */\n#ifndef INADDR_NONE\n#define INADDR_NONE -1\n#endif\n\n\n#endif /* ndef JBSOCKETS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/jcc.h",
    "content": "#ifndef JCC_H_INCLUDED\n#define JCC_H_INCLUDED\n#define JCC_H_VERSION \"$Id: jcc.h,v 1.35 2014/06/02 06:22:21 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/jcc.h,v $\n *\n * Purpose     :  Main file.  Contains main() method, main loop, and\n *                the main connection-handling function.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n#include \"project.h\"\n\nstruct client_state;\nstruct file_list;\n\n/* Global variables */\n\n#ifdef FEATURE_STATISTICS\nextern int urls_read;\nextern int urls_rejected;\n#endif /*def FEATURE_STATISTICS*/\n\nextern struct client_states clients[1];\nextern struct file_list    files[1];\n\n#ifdef unix\nextern const char *pidfile;\n#endif\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\nextern int g_terminate;\n#endif\n\n#if defined(FEATURE_PTHREAD) || defined(_WIN32)\n#define MUTEX_LOCKS_AVAILABLE\n\n#ifdef FEATURE_PTHREAD\n#include <pthread.h>\n\ntypedef pthread_mutex_t privoxy_mutex_t;\n\n#else\n\ntypedef CRITICAL_SECTION privoxy_mutex_t;\n\n#endif\n\nstatic struct configuration_spec *config;\n\nextern void privoxy_mutex_lock(privoxy_mutex_t *mutex);\nextern void privoxy_mutex_unlock(privoxy_mutex_t *mutex);\n\nextern privoxy_mutex_t log_mutex;\nextern privoxy_mutex_t log_init_mutex;\nextern privoxy_mutex_t connection_reuse_mutex;\n\n#ifdef FEATURE_EXTERNAL_FILTERS\nextern privoxy_mutex_t external_filter_mutex;\n#endif\n\n#ifndef HAVE_GMTIME_R\nextern privoxy_mutex_t gmtime_mutex;\n#endif /* ndef HAVE_GMTIME_R */\n\n#ifndef HAVE_LOCALTIME_R\nextern privoxy_mutex_t localtime_mutex;\n#endif /* ndef HAVE_GMTIME_R */\n\n#if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R)\nextern privoxy_mutex_t resolver_mutex;\n#endif /* !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R) */\n\n#ifndef HAVE_RANDOM\nextern privoxy_mutex_t rand_mutex;\n#endif /* ndef HAVE_RANDOM */\n\n#endif /* FEATURE_PTHREAD */\n\n/* Functions */\n\ntypedef void (*shadowpath_cb) (int fd, void*);\n\nextern int shadowpath_main(char *conf_path, struct forward_spec *forward_proxy_list, shadowpath_cb cb, void *data);\n\nextern struct log_client_states *log_clients;\n\nextern void log_time_stage(struct client_state *csp, enum time_stage stage);\nextern void log_request_error(struct client_state *csp, int error_code);\n\n/* Revision control strings from this header and associated .c file */\nextern const char jcc_rcs[];\nextern const char jcc_h_rcs[];\n\n#endif /* ndef JCC_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/jcc.m",
    "content": "const char jcc_rcs[] = \"$Id: jcc.c,v 1.440 2016/01/16 12:33:36 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/jcc.c,v $\n *\n * Purpose     :  Main file.  Contains main() method, main loop, and\n *                the main connection-handling function.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include <fcntl.h>\n#include <errno.h>\n#include <assert.h>\n#include <Foundation/Foundation.h>\n\n#ifdef _WIN32\n# ifndef FEATURE_PTHREAD\n#  ifndef STRICT\n#   define STRICT\n#  endif\n#  include <windows.h>\n#  include <process.h>\n# endif /* ndef FEATURE_PTHREAD */\n\n# include \"win32.h\"\n# ifndef _WIN_CONSOLE\n#  include \"w32log.h\"\n# endif /* ndef _WIN_CONSOLE */\n# include \"w32svrapi.h\"\n\n#else /* ifndef _WIN32 */\n\n# if !defined (__OS2__)\n# include <unistd.h>\n# include <sys/wait.h>\n# endif /* ndef __OS2__ */\n# include <sys/time.h>\n# include <sys/stat.h>\n# include <sys/ioctl.h>\n\n#ifdef sun\n#include <sys/termios.h>\n#endif /* sun */\n\n#ifdef unix\n#include <pwd.h>\n#include <grp.h>\n#endif\n\n# include <signal.h>\n\n# ifdef __BEOS__\n#  include <socket.h>  /* BeOS has select() for sockets only. */\n#  include <OS.h>      /* declarations for threads and stuff. */\n# endif\n\n# if defined(__EMX__) || defined(__OS2__)\n#  include <sys/select.h>  /* OS/2/EMX needs a little help with select */\n# endif\n# ifdef __OS2__\n#define INCL_DOS\n# include <os2.h>\n#define bzero(B,N) memset(B,0x00,n)\n# endif\n\n# ifndef FD_ZERO\n#  include <select.h>\n# endif\n\n#endif\n\n#include \"project.h\"\n#include \"list.h\"\n#include \"jcc.h\"\n#include \"filters.h\"\n#include \"loaders.h\"\n#include \"parsers.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"jbsockets.h\"\n#include \"gateway.h\"\n#include \"actions.h\"\n#include \"cgi.h\"\n#include \"loadcfg.h\"\n#include \"urlmatch.h\"\n\nconst char jcc_h_rcs[] = JCC_H_VERSION;\nconst char project_h_rcs[] = PROJECT_H_VERSION;\n\nstruct client_states clients[1];\nstruct log_client_states *log_clients;\nstruct log_client_states *log_clients_tail;\nstatic int max_log_clients_count = 50;\nstatic int log_clients_count = 0;\nstruct file_list     files[1];\n\nstruct forward_spec *proxy_list = NULL;\n\n#ifdef FEATURE_STATISTICS\nint urls_read     = 0;     /* total nr of urls read inc rejected */\nint urls_rejected = 0;     /* total nr of urls rejected */\n#endif /* def FEATURE_STATISTICS */\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\nint g_terminate = 0;\n#endif\n\nstatic int client_protocol_is_unsupported(const struct client_state *csp, char *req);\nstatic jb_err get_request_destination_elsewhere(struct client_state *csp, struct list *headers);\nstatic jb_err get_server_headers(struct client_state *csp);\nstatic const char *crunch_reason(const struct http_response *rsp);\nstatic void send_crunch_response(const struct client_state *csp, struct http_response *rsp);\nstatic char *get_request_line(struct client_state *csp);\nstatic jb_err receive_client_request(struct client_state *csp);\nstatic jb_err parse_client_request(struct client_state *csp);\nstatic void build_request_line(struct client_state *csp, const struct forward_spec *fwd, char **request_line);\nstatic jb_err change_request_destination(struct client_state *csp);\nstatic void chat(struct client_state *csp);\nstatic void serve(struct client_state *csp);\nstatic void initialize_mutexes(void);\nstatic jb_socket bind_port_helper(const char *haddr, int hport);\nstatic void bind_ports_helper(struct configuration_spec *config, jb_socket sockets[]);\nstatic void listen_loop(shadowpath_cb cb, void *data);\n\n#ifdef MUTEX_LOCKS_AVAILABLE\nstatic inline void lock_log_request(void);\nstatic inline void unlock_log_request(void);\n\n#else /* ! MUTEX_LOCKS_AVAILABLE */\n/*\n * FIXME we need a cross-platform locking mechanism.\n * The locking/unlocking functions below should be\n * fleshed out for non-pthread implementations.\n */\nstatic inline void lock_log_request() {}\nstatic inline void unlock_log_request() {}\n#endif\n\nstatic void add_log_csp(struct client_state *csp);\n\n\n#ifdef MUTEX_LOCKS_AVAILABLE\n/*\n * XXX: Does the locking stuff really belong in this file?\n */\nprivoxy_mutex_t log_mutex;\nprivoxy_mutex_t log_request_mutex;\nprivoxy_mutex_t log_init_mutex;\nprivoxy_mutex_t connection_reuse_mutex;\n\n#ifdef FEATURE_EXTERNAL_FILTERS\nprivoxy_mutex_t external_filter_mutex;\n#endif\n\n#if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R)\nprivoxy_mutex_t resolver_mutex;\n#endif /* !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R) */\n\n#ifndef HAVE_GMTIME_R\nprivoxy_mutex_t gmtime_mutex;\n#endif /* ndef HAVE_GMTIME_R */\n\n#ifndef HAVE_LOCALTIME_R\nprivoxy_mutex_t localtime_mutex;\n#endif /* ndef HAVE_GMTIME_R */\n\n#ifndef HAVE_RANDOM\nprivoxy_mutex_t rand_mutex;\n#endif /* ndef HAVE_RANDOM */\n\n#endif /* def MUTEX_LOCKS_AVAILABLE */\n\n#if defined(unix)\nconst char *basedir = NULL;\nconst char *pidfile = NULL;\nstatic int received_hup_signal = 0;\n#endif /* defined unix */\n\n/* HTTP snipplets. */\nstatic const char CSUCCEED[] =\n   \"HTTP/1.1 200 Connection established\\r\\n\\r\\n\";\n\nstatic const char CHEADER[] =\n   \"HTTP/1.1 400 Invalid header received from client\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Invalid header received from client.\\r\\n\";\n\nstatic const char FTP_RESPONSE[] =\n   \"HTTP/1.1 400 Invalid request received from client\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Invalid request. Privoxy doesn't support FTP.\\r\\n\";\n\nstatic const char GOPHER_RESPONSE[] =\n   \"HTTP/1.1 400 Invalid request received from client\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Invalid request. Privoxy doesn't support gopher.\\r\\n\";\n\n/* XXX: should be a template */\nstatic const char MISSING_DESTINATION_RESPONSE[] =\n   \"HTTP/1.1 400 Bad request received from client\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Bad request. Privoxy was unable to extract the destination.\\r\\n\";\n\n/* XXX: should be a template */\nstatic const char INVALID_SERVER_HEADERS_RESPONSE[] =\n   \"HTTP/1.1 502 Server or forwarder response invalid\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Bad response. The server or forwarder response doesn't look like HTTP.\\r\\n\";\n\n/* XXX: should be a template */\nstatic const char MESSED_UP_REQUEST_RESPONSE[] =\n   \"HTTP/1.1 400 Malformed request after rewriting\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Bad request. Messed up with header filters.\\r\\n\";\n\nstatic const char TOO_MANY_CONNECTIONS_RESPONSE[] =\n   \"HTTP/1.1 503 Too many open connections\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Maximum number of open connections reached.\\r\\n\";\n\nstatic const char CLIENT_CONNECTION_TIMEOUT_RESPONSE[] =\n   \"HTTP/1.1 504 Connection timeout\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"The connection timed out because the client request didn't arrive in time.\\r\\n\";\n\nstatic const char CLIENT_BODY_PARSE_ERROR_RESPONSE[] =\n   \"HTTP/1.1 400 Failed reading client body\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Failed parsing or buffering the chunk-encoded client body.\\r\\n\";\n\nstatic const char UNSUPPORTED_CLIENT_EXPECTATION_ERROR_RESPONSE[] =\n   \"HTTP/1.1 417 Expecting too much\\r\\n\"\n   \"Content-Type: text/plain\\r\\n\"\n   \"Connection: close\\r\\n\\r\\n\"\n   \"Privoxy detected an unsupported Expect header value.\\r\\n\";\n\n/* A function to crunch a response */\ntypedef struct http_response *(*crunch_func_ptr)(struct client_state *);\n\n/* Crunch function flags */\n#define CF_NO_FLAGS        0\n/* Cruncher applies to forced requests as well */\n#define CF_IGNORE_FORCE    1\n/* Crunched requests are counted for the block statistics */\n#define CF_COUNT_AS_REJECT 2\n\n/* A crunch function and its flags */\nstruct cruncher\n{\n   const crunch_func_ptr cruncher;\n   const int flags;\n};\n\nstatic int crunch_response_triggered(struct client_state *csp, const struct cruncher crunchers[]);\n\n/* Complete list of cruncher functions */\nstatic const struct cruncher crunchers_all[] = {\n   { direct_response, CF_COUNT_AS_REJECT|CF_IGNORE_FORCE},\n   { block_url,       CF_COUNT_AS_REJECT },\n#ifdef FEATURE_TRUST\n   { trust_url,       CF_COUNT_AS_REJECT },\n#endif /* def FEATURE_TRUST */\n   { redirect_url,    CF_NO_FLAGS  },\n   { dispatch_cgi,    CF_IGNORE_FORCE},\n   { NULL,            0 }\n};\n\n/* Light version, used after tags are applied */\nstatic const struct cruncher crunchers_light[] = {\n   { block_url,       CF_COUNT_AS_REJECT },\n   { redirect_url,    CF_NO_FLAGS },\n   { NULL,            0 }\n};\n\n/*********************************************************************\n *\n * Function    :  client_protocol_is_unsupported\n *\n * Description :  Checks if the client used a known unsupported\n *                protocol and deals with it by sending an error\n *                response.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  req = the first request line send by the client\n *\n * Returns     :  TRUE if an error response has been generated, or\n *                FALSE if the request doesn't look invalid.\n *\n *********************************************************************/\nstatic int client_protocol_is_unsupported(const struct client_state *csp, char *req)\n{\n   /*\n    * If it's a FTP or gopher request, we don't support it.\n    *\n    * These checks are better than nothing, but they might\n    * not work in all configurations and some clients might\n    * have problems digesting the answer.\n    *\n    * They should, however, never cause more problems than\n    * Privoxy's old behaviour (returning the misleading HTML\n    * error message:\n    *\n    * \"Could not resolve http://(ftp|gopher)://example.org\").\n    */\n   if (!strncmpic(req, \"GET ftp://\", 10) || !strncmpic(req, \"GET gopher://\", 13))\n   {\n      const char *response = NULL;\n      const char *protocol = NULL;\n\n      if (!strncmpic(req, \"GET ftp://\", 10))\n      {\n         response = FTP_RESPONSE;\n         protocol = \"FTP\";\n      }\n      else\n      {\n         response = GOPHER_RESPONSE;\n         protocol = \"GOPHER\";\n      }\n      log_error(LOG_LEVEL_ERROR,\n         \"%s tried to use Privoxy as %s proxy: %s\",\n         csp->ip_addr_str, protocol, req);\n      log_error(LOG_LEVEL_CLF,\n         \"%s - - [%T] \\\"%s\\\" 400 0\", csp->ip_addr_str, req);\n      freez(req);\n      write_socket(csp->cfd, response, strlen(response));\n\n      return TRUE;\n   }\n\n   return FALSE;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_has_unsupported_expectations\n *\n * Description :  Checks if the client used an unsupported expectation\n *                in which case an error message is delivered.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  TRUE if an error response has been generated, or\n *                FALSE if the request doesn't look invalid.\n *\n *********************************************************************/\nstatic int client_has_unsupported_expectations(const struct client_state *csp)\n{\n   if ((csp->flags & CSP_FLAG_UNSUPPORTED_CLIENT_EXPECTATION))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Rejecting request from client %s with unsupported Expect header value\",\n         csp->ip_addr_str);\n      log_error(LOG_LEVEL_CLF,\n         \"%s - - [%T] \\\"%s\\\" 417 0\", csp->ip_addr_str, csp->http->cmd);\n      write_socket(csp->cfd, UNSUPPORTED_CLIENT_EXPECTATION_ERROR_RESPONSE,\n         strlen(UNSUPPORTED_CLIENT_EXPECTATION_ERROR_RESPONSE));\n\n      return TRUE;\n   }\n\n   return FALSE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_request_destination_elsewhere\n *\n * Description :  If the client's request was redirected into\n *                Privoxy without the client's knowledge,\n *                the request line lacks the destination host.\n *\n *                This function tries to get it elsewhere,\n *                provided accept-intercepted-requests is enabled.\n *\n *                \"Elsewhere\" currently only means \"Host: header\",\n *                but in the future we may ask the redirecting\n *                packet filter to look the destination up.\n *\n *                If the destination stays unknown, an error\n *                response is send to the client and headers\n *                are freed so that chat() can return directly.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  headers = a header list\n *\n * Returns     :  JB_ERR_OK if the destination is now known, or\n *                JB_ERR_PARSE if it isn't.\n *\n *********************************************************************/\nstatic jb_err get_request_destination_elsewhere(struct client_state *csp, struct list *headers)\n{\n   char *req;\n\n   if (!(csp->config->feature_flags & RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS))\n   {\n      log_error(LOG_LEVEL_ERROR, \"%s's request: \\'%s\\' is invalid.\"\n         \" Privoxy isn't configured to accept intercepted requests.\",\n         csp->ip_addr_str, csp->http->cmd);\n      /* XXX: Use correct size */\n      log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"%s\\\" 400 0\",\n         csp->ip_addr_str, csp->http->cmd);\n\n      write_socket(csp->cfd, CHEADER, strlen(CHEADER));\n      destroy_list(headers);\n\n      return JB_ERR_PARSE;\n   }\n   else if (JB_ERR_OK == get_destination_from_headers(headers, csp->http))\n   {\n#ifndef FEATURE_EXTENDED_HOST_PATTERNS\n      /* Split the domain we just got for pattern matching */\n      init_domain_components(csp->http);\n#endif\n\n      return JB_ERR_OK;\n   }\n   else\n   {\n      /* We can't work without destination. Go spread the news.*/\n\n      req = list_to_text(headers);\n      chomp(req);\n      /* XXX: Use correct size */\n      log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"%s\\\" 400 0\",\n         csp->ip_addr_str, csp->http->cmd);\n      log_error(LOG_LEVEL_ERROR,\n         \"Privoxy was unable to get the destination for %s's request:\\n%s\\n%s\",\n         csp->ip_addr_str, csp->http->cmd, req);\n      freez(req);\n\n      write_socket(csp->cfd, MISSING_DESTINATION_RESPONSE, strlen(MISSING_DESTINATION_RESPONSE));\n      destroy_list(headers);\n\n      return JB_ERR_PARSE;\n   }\n   /*\n    * TODO: If available, use PF's ioctl DIOCNATLOOK as last resort\n    * to get the destination IP address, use it as host directly\n    * or do a reverse DNS lookup first.\n    */\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_server_headers\n *\n * Description :  Parses server headers in iob and fills them\n *                into csp->headers so that they can later be\n *                handled by sed().\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK if everything went fine, or\n *                JB_ERR_PARSE if the headers were incomplete.\n *\n *********************************************************************/\nstatic jb_err get_server_headers(struct client_state *csp)\n{\n   int continue_hack_in_da_house = 0;\n   char * header;\n\n   while (((header = get_header(csp->iob)) != NULL) || continue_hack_in_da_house)\n   {\n      if (header == NULL)\n      {\n         /*\n          * continue hack in da house. Ignore the ending of\n          * this head and continue enlisting header lines.\n          * The reason is described below.\n          */\n         enlist(csp->headers, \"\");\n         continue_hack_in_da_house = 0;\n         continue;\n      }\n      else if (0 == strncmpic(header, \"HTTP/1.1 100\", 12))\n      {\n         /*\n          * It's a bodyless continue response, don't\n          * stop header parsing after reaching its end.\n          *\n          * As a result Privoxy will concatenate the\n          * next response's head and parse and deliver\n          * the headers as if they belonged to one request.\n          *\n          * The client will separate them because of the\n          * empty line between them.\n          *\n          * XXX: What we're doing here is clearly against\n          * the intended purpose of the continue header,\n          * and under some conditions (HTTP/1.0 client request)\n          * it's a standard violation.\n          *\n          * Anyway, \"sort of against the spec\" is preferable\n          * to \"always getting confused by Continue responses\"\n          * (Privoxy's behaviour before this hack was added)\n          */\n         log_error(LOG_LEVEL_HEADER, \"Continue hack in da house.\");\n         continue_hack_in_da_house = 1;\n      }\n      else if (*header == '\\0')\n      {\n         /*\n          * If the header is empty, but the Continue hack\n          * isn't active, we can assume that we reached the\n          * end of the buffer before we hit the end of the\n          * head.\n          *\n          * Inform the caller an let it decide how to handle it.\n          */\n         return JB_ERR_PARSE;\n      }\n\n      if (JB_ERR_MEMORY == enlist(csp->headers, header))\n      {\n         /*\n          * XXX: Should we quit the request and return a\n          * out of memory error page instead?\n          */\n         log_error(LOG_LEVEL_ERROR,\n            \"Out of memory while enlisting server headers. %s lost.\",\n            header);\n      }\n      freez(header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  crunch_reason\n *\n * Description :  Translates the crunch reason code into a string.\n *\n * Parameters  :\n *          1  :  rsp = a http_response\n *\n * Returns     :  A string with the crunch reason or an error description.\n *\n *********************************************************************/\nstatic const char *crunch_reason(const struct http_response *rsp)\n{\n   char * reason = NULL;\n\n   assert(rsp != NULL);\n   if (rsp == NULL)\n   {\n      return \"Internal error while searching for crunch reason\";\n   }\n\n   switch (rsp->crunch_reason)\n   {\n      case UNSUPPORTED:\n         reason = \"Unsupported HTTP feature\";\n         break;\n      case BLOCKED:\n         reason = \"Blocked\";\n         break;\n      case UNTRUSTED:\n         reason = \"Untrusted\";\n         break;\n      case REDIRECTED:\n         reason = \"Redirected\";\n         break;\n      case CGI_CALL:\n         reason = \"CGI Call\";\n         break;\n      case NO_SUCH_DOMAIN:\n         reason = \"DNS failure\";\n         break;\n      case FORWARDING_FAILED:\n         reason = \"Forwarding failed\";\n         break;\n      case CONNECT_FAILED:\n         reason = \"Connection failure\";\n         break;\n      case OUT_OF_MEMORY:\n         reason = \"Out of memory (may mask other reasons)\";\n         break;\n      case CONNECTION_TIMEOUT:\n         reason = \"Connection timeout\";\n         break;\n      case NO_SERVER_DATA:\n         reason = \"No server data received\";\n         break;\n      default:\n         reason = \"No reason recorded\";\n         break;\n   }\n\n   return reason;\n}\n\n\n/*********************************************************************\n *\n * Function    :  log_applied_actions\n *\n * Description :  Logs the applied actions if LOG_LEVEL_ACTIONS is\n *                enabled.\n *\n * Parameters  :\n *          1  :  actions = Current action spec to log\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nstatic void log_applied_actions(const struct current_action_spec *actions)\n{\n   /*\n    * The conversion to text requires lots of memory allocations so\n    * we only do the conversion if the user is actually interested.\n    */\n   if (debug_level_is_enabled(LOG_LEVEL_ACTIONS))\n   {\n      char *actions_as_text = actions_to_line_of_text(actions);\n      log_error(LOG_LEVEL_ACTIONS, \"%s\", actions_as_text);\n      freez(actions_as_text);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  send_crunch_response\n *\n * Description :  Delivers already prepared response for\n *                intercepted requests, logs the interception\n *                and frees the response.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          1  :  rsp = Fully prepared response. Will be freed on exit.\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nstatic void send_crunch_response(const struct client_state *csp, struct http_response *rsp)\n{\n      const struct http_request *http = csp->http;\n      char status_code[4];\n\n      assert(rsp != NULL);\n      assert(rsp->head != NULL);\n\n      if (rsp == NULL)\n      {\n         log_error(LOG_LEVEL_FATAL, \"NULL response in send_crunch_response.\");\n      }\n\n      /*\n       * Extract the status code from the actual head\n       * that will be send to the client. It is the only\n       * way to get it right for all requests, including\n       * the fixed ones for out-of-memory problems.\n       *\n       * A head starts like this: 'HTTP/1.1 200...'\n       *                           0123456789|11\n       *                                     10\n       */\n      status_code[0] = rsp->head[9];\n      status_code[1] = rsp->head[10];\n      status_code[2] = rsp->head[11];\n      status_code[3] = '\\0';\n\n      /* Log that the request was crunched and why. */\n      log_applied_actions(csp->action);\n      log_error(LOG_LEVEL_CRUNCH, \"%s: %s\", crunch_reason(rsp), http->url);\n      log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"%s\\\" %s %u\",\n         csp->ip_addr_str, http->ocmd, status_code, rsp->content_length);\n\n      /* Write the answer to the client */\n      if (write_socket(csp->cfd, rsp->head, rsp->head_length)\n       || write_socket(csp->cfd, rsp->body, rsp->content_length))\n      {\n         /* There is nothing we can do about it. */\n         log_error(LOG_LEVEL_ERROR,\n            \"Couldn't deliver the error message through client socket %d: %E\",\n            csp->cfd);\n      }\n\n      /* Clean up and return */\n      if (cgi_error_memory() != rsp)\n      {\n         free_http_response(rsp);\n      }\n      return;\n}\n\n\n/*********************************************************************\n *\n * Function    :  crunch_response_triggered\n *\n * Description :  Checks if the request has to be crunched,\n *                and delivers the crunch response if necessary.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  crunchers = list of cruncher functions to run\n *\n * Returns     :  TRUE if the request was answered with a crunch response\n *                FALSE otherwise.\n *\n *********************************************************************/\nstatic int crunch_response_triggered(struct client_state *csp, const struct cruncher crunchers[])\n{\n   struct http_response *rsp = NULL;\n   const struct cruncher *c;\n\n   /*\n    * If CGI request crunching is disabled,\n    * check the CGI dispatcher out of order to\n    * prevent unintentional blocks or redirects.\n    */\n   if (!(csp->config->feature_flags & RUNTIME_FEATURE_CGI_CRUNCHING)\n       && (NULL != (rsp = dispatch_cgi(csp))))\n   {\n      /* Deliver, log and free the interception response. */\n      send_crunch_response(csp, rsp);\n      csp->flags |= CSP_FLAG_CRUNCHED;\n      return TRUE;\n   }\n\n   for (c = crunchers; c->cruncher != NULL; c++)\n   {\n      /*\n       * Check the cruncher if either Privoxy is toggled\n       * on and the request isn't forced, or if the cruncher\n       * applies to forced requests as well.\n       */\n      if (((csp->flags & CSP_FLAG_TOGGLED_ON) &&\n          !(csp->flags & CSP_FLAG_FORCED)) ||\n          (c->flags & CF_IGNORE_FORCE))\n      {\n         rsp = c->cruncher(csp);\n         if (NULL != rsp)\n         {\n            /* Deliver, log and free the interception response. */\n            send_crunch_response(csp, rsp);\n            csp->flags |= CSP_FLAG_CRUNCHED;\n#ifdef FEATURE_STATISTICS\n            if (c->flags & CF_COUNT_AS_REJECT)\n            {\n               csp->flags |= CSP_FLAG_REJECTED;\n            }\n#endif /* def FEATURE_STATISTICS */\n\n            return TRUE;\n         }\n      }\n   }\n\n   return FALSE;\n}\n\n\n/*********************************************************************\n *\n * Function    :  build_request_line\n *\n * Description :  Builds the HTTP request line.\n *\n *                If a HTTP forwarder is used it expects the whole URL,\n *                web servers only get the path.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  fwd = The forwarding spec used for the request\n *                XXX: Should use http->fwd instead.\n *          3  :  request_line = The old request line which will be replaced.\n *\n * Returns     :  Nothing. Terminates in case of memory problems.\n *\n *********************************************************************/\nstatic void build_request_line(struct client_state *csp, const struct forward_spec *fwd, char **request_line)\n{\n   struct http_request *http = csp->http;\n\n   assert(http->ssl == 0);\n\n   /*\n    * Downgrade http version from 1.1 to 1.0\n    * if +downgrade action applies.\n    */\n   if ((csp->action->flags & ACTION_DOWNGRADE)\n     && (!strcmpic(http->ver, \"HTTP/1.1\")))\n   {\n      freez(http->ver);\n      http->ver = strdup_or_die(\"HTTP/1.0\");\n   }\n\n   /*\n    * Rebuild the request line.\n    */\n   freez(*request_line);\n   *request_line = strdup(http->gpc);\n   string_append(request_line, \" \");\n\n   if (fwd->forward_host && fwd->type != FORWARD_WEBSERVER)\n   {\n      string_append(request_line, http->url);\n   }\n   else\n   {\n      string_append(request_line, http->path);\n   }\n   string_append(request_line, \" \");\n   string_append(request_line, http->ver);\n\n   if (*request_line == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL, \"Out of memory writing HTTP command\");\n   }\n   log_error(LOG_LEVEL_HEADER, \"New HTTP Request-Line: %s\", *request_line);\n}\n\n\n/*********************************************************************\n *\n * Function    :  change_request_destination\n *\n * Description :  Parse a (rewritten) request line and regenerate\n *                the http request data.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  Forwards the parse_http_request() return code.\n *                Terminates in case of memory problems.\n *\n *********************************************************************/\nstatic jb_err change_request_destination(struct client_state *csp)\n{\n   struct http_request *http = csp->http;\n   jb_err err;\n\n   log_error(LOG_LEVEL_REDIRECTS, \"Rewrite detected: %s\",\n      csp->headers->first->str);\n   free_http_request(http);\n   err = parse_http_request(csp->headers->first->str, http);\n   if (JB_ERR_OK != err)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Couldn't parse rewritten request: %s.\",\n         jb_err_to_string(err));\n   }\n\n   return err;\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  server_response_is_complete\n *\n * Description :  Determines whether we should stop reading\n *                from the server socket.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  content_length = Length of content received so far.\n *\n * Returns     :  TRUE if the response is complete,\n *                FALSE otherwise.\n *\n *********************************************************************/\nstatic int server_response_is_complete(struct client_state *csp,\n   unsigned long long content_length)\n{\n   int content_length_known = !!(csp->flags & CSP_FLAG_CONTENT_LENGTH_SET);\n\n   if (!strcmpic(csp->http->gpc, \"HEAD\"))\n   {\n      /*\n       * \"HEAD\" implies no body, we are thus expecting\n       * no content. XXX: incomplete \"list\" of methods?\n       */\n      csp->expected_content_length = 0;\n      content_length_known = TRUE;\n      csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET;\n   }\n\n   if (csp->http->status == 204 || csp->http->status == 304)\n   {\n      /*\n       * Expect no body. XXX: incomplete \"list\" of status codes?\n       */\n      csp->expected_content_length = 0;\n      content_length_known = TRUE;\n      csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET;\n   }\n\n   return (content_length_known && ((0 == csp->expected_content_length)\n            || (csp->expected_content_length <= content_length)));\n}\n\n\n#ifdef FEATURE_CONNECTION_SHARING\n/*********************************************************************\n *\n * Function    :  wait_for_alive_connections\n *\n * Description :  Waits for alive connections to timeout.\n *\n * Parameters  :  N/A\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void wait_for_alive_connections(void)\n{\n   int connections_alive = close_unusable_connections();\n\n   while (0 < connections_alive)\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Waiting for %d connections to timeout.\",\n         connections_alive);\n      sleep(60);\n      connections_alive = close_unusable_connections();\n   }\n\n   log_error(LOG_LEVEL_CONNECT, \"No connections to wait for left.\");\n\n}\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n\n/*********************************************************************\n *\n * Function    :  save_connection_destination\n *\n * Description :  Remembers a connection for reuse later on.\n *\n * Parameters  :\n *          1  :  sfd  = Open socket to remember.\n *          2  :  http = The destination for the connection.\n *          3  :  fwd  = The forwarder settings used.\n *          3  :  server_connection  = storage.\n *\n * Returns     : void\n *\n *********************************************************************/\nvoid save_connection_destination(jb_socket sfd,\n                                 const struct http_request *http,\n                                 const struct forward_spec *fwd,\n                                 struct reusable_connection *server_connection)\n{\n   assert(sfd != JB_INVALID_SOCKET);\n   assert(NULL != http->host);\n\n   server_connection->sfd = sfd;\n   server_connection->host = strdup_or_die(http->host);\n   server_connection->port = http->port;\n\n   assert(NULL != fwd);\n   assert(server_connection->gateway_host == NULL);\n   assert(server_connection->gateway_port == 0);\n   assert(server_connection->forwarder_type == 0);\n   assert(server_connection->forward_host == NULL);\n   assert(server_connection->forward_port == 0);\n\n   server_connection->forwarder_type = fwd->type;\n   if (NULL != fwd->gateway_host)\n   {\n      server_connection->gateway_host = strdup_or_die(fwd->gateway_host);\n   }\n   else\n   {\n      server_connection->gateway_host = NULL;\n   }\n   server_connection->gateway_port = fwd->gateway_port;\n\n   if (NULL != fwd->forward_host)\n   {\n      server_connection->forward_host = strdup_or_die(fwd->forward_host);\n   }\n   else\n   {\n      server_connection->forward_host = NULL;\n   }\n   server_connection->forward_port = fwd->forward_port;\n}\n\n\n/*********************************************************************\n *\n * Function    : verify_request_length\n *\n * Description : Checks if we already got the whole client requests\n *               and sets CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ if\n *               we do.\n *\n *               Data that doesn't belong to the current request is\n *               either thrown away to let the client retry on a clean\n *               socket, or stashed to be dealt with after the current\n *               request is served.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  void\n *\n *********************************************************************/\nstatic void verify_request_length(struct client_state *csp)\n{\n   unsigned long long buffered_request_bytes =\n      (unsigned long long)(csp->client_iob->eod - csp->client_iob->cur);\n\n   if ((csp->expected_client_content_length != 0)\n      && (buffered_request_bytes != 0))\n   {\n      if (csp->expected_client_content_length >= buffered_request_bytes)\n      {\n         csp->expected_client_content_length -= buffered_request_bytes;\n         log_error(LOG_LEVEL_CONNECT, \"Reduced expected bytes to %llu \"\n            \"to account for the %llu ones we already got.\",\n            csp->expected_client_content_length, buffered_request_bytes);\n      }\n      else\n      {\n         assert(csp->client_iob->eod > csp->client_iob->cur + csp->expected_client_content_length);\n         csp->client_iob->eod = csp->client_iob->cur + csp->expected_client_content_length;\n         log_error(LOG_LEVEL_CONNECT, \"Reducing expected bytes to 0. \"\n            \"Marking the server socket tainted after throwing %llu bytes away.\",\n            buffered_request_bytes - csp->expected_client_content_length);\n         csp->expected_client_content_length = 0;\n         csp->flags |= CSP_FLAG_SERVER_SOCKET_TAINTED;\n      }\n\n      if (csp->expected_client_content_length == 0)\n      {\n         csp->flags |= CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ;\n      }\n   }\n\n   if (!(csp->flags & CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ)\n      && ((csp->client_iob->cur < csp->client_iob->eod)\n         || (csp->expected_client_content_length != 0)))\n   {\n      if (strcmpic(csp->http->gpc, \"GET\")\n         && strcmpic(csp->http->gpc, \"HEAD\")\n         && strcmpic(csp->http->gpc, \"TRACE\")\n         && strcmpic(csp->http->gpc, \"OPTIONS\")\n         && strcmpic(csp->http->gpc, \"DELETE\"))\n      {\n         /* XXX: this is an incomplete hack */\n         csp->flags &= ~CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ;\n         log_error(LOG_LEVEL_CONNECT, \"There better be a request body.\");\n      }\n      else\n      {\n         csp->flags |= CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ;\n\n         if ((csp->config->feature_flags & RUNTIME_FEATURE_TOLERATE_PIPELINING) == 0)\n         {\n            csp->flags |= CSP_FLAG_SERVER_SOCKET_TAINTED;\n            log_error(LOG_LEVEL_CONNECT,\n               \"Possible pipeline attempt detected. The connection will not \"\n               \"be kept alive and we will only serve the first request.\");\n            /* Nuke the pipelined requests from orbit, just to be sure. */\n            clear_iob(csp->client_iob);\n         }\n         else\n         {\n            /*\n             * Keep the pipelined data around for now, we'll deal with\n             * it once we're done serving the current request.\n             */\n            csp->flags |= CSP_FLAG_PIPELINED_REQUEST_WAITING;\n            assert(csp->client_iob->eod >= csp->client_iob->cur);\n            log_error(LOG_LEVEL_CONNECT, \"Complete client request followed by \"\n               \"%d bytes of pipelined data received.\",\n               (int)(csp->client_iob->eod - csp->client_iob->cur));\n         }\n      }\n   }\n   else\n   {\n      csp->flags |= CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ;\n      log_error(LOG_LEVEL_CONNECT, \"Complete client request received.\");\n   }\n}\n#endif /* FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n/*********************************************************************\n *\n * Function    :  mark_server_socket_tainted\n *\n * Description :  Makes sure we don't reuse a server socket\n *                (if we didn't read everything the server sent\n *                us reusing the socket would lead to garbage).\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  void.\n *\n *********************************************************************/\nstatic void mark_server_socket_tainted(struct client_state *csp)\n{\n   /*\n    * For consistency we always mark the server socket\n    * tainted, however, to reduce the log noise we only\n    * emit a log message if the server socket could have\n    * actually been reused.\n    */\n   if ((csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)\n      && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED))\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Marking the server socket %d tainted.\",\n         csp->server_connection.sfd);\n   }\n   csp->flags |= CSP_FLAG_SERVER_SOCKET_TAINTED;\n}\n\n/*********************************************************************\n *\n * Function    :  get_request_line\n *\n * Description : Read the client request line.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  Pointer to request line or NULL in case of errors.\n *\n *********************************************************************/\nstatic char *get_request_line(struct client_state *csp)\n{\n   char buf[BUFFER_SIZE];\n   char *request_line = NULL;\n   int len;\n\n   memset(buf, 0, sizeof(buf));\n\n   if ((csp->flags & CSP_FLAG_PIPELINED_REQUEST_WAITING) != 0)\n   {\n      /*\n       * If there are multiple pipelined requests waiting,\n       * the flag will be set again once the next request\n       * has been parsed.\n       */\n      csp->flags &= ~CSP_FLAG_PIPELINED_REQUEST_WAITING;\n\n      request_line = get_header(csp->client_iob);\n      if ((NULL != request_line) && ('\\0' != *request_line))\n      {\n         return request_line;\n      }\n      else\n      {\n         log_error(LOG_LEVEL_CONNECT, \"No complete request line \"\n            \"received yet. Continuing reading from %d.\", csp->cfd);\n      }\n   }\n\n   do\n   {\n      if (!data_is_available(csp->cfd, csp->config->socket_timeout))\n      {\n         if (socket_is_still_alive(csp->cfd))\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"No request line on socket %d received in time. Timeout: %d.\",\n               csp->cfd, csp->config->socket_timeout);\n            write_socket(csp->cfd, CLIENT_CONNECTION_TIMEOUT_RESPONSE,\n               strlen(CLIENT_CONNECTION_TIMEOUT_RESPONSE));\n         }\n         else\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"The client side of the connection on socket %d got \"\n               \"closed without sending a complete request line.\", csp->cfd);\n         }\n         return NULL;\n      }\n\n      len = read_socket(csp->cfd, buf, sizeof(buf) - 1);\n\n      if (len <= 0) return NULL;\n\n      /*\n       * If there is no memory left for buffering the\n       * request, there is nothing we can do but hang up\n       */\n      if (add_to_iob(csp->client_iob, csp->config->buffer_limit, buf, len))\n      {\n         return NULL;\n      }\n\n      request_line = get_header(csp->client_iob);\n\n   } while ((NULL != request_line) && ('\\0' == *request_line));\n\n   return request_line;\n\n}\n\nenum chunk_status\n{\n   CHUNK_STATUS_MISSING_DATA,\n   CHUNK_STATUS_BODY_COMPLETE,\n   CHUNK_STATUS_PARSE_ERROR\n};\n\n\n/*********************************************************************\n *\n * Function    :  chunked_body_is_complete\n *\n * Description :  Figures out whether or not a chunked body is complete.\n *\n *                Currently it always starts at the beginning of the\n *                buffer which is somewhat wasteful and prevents Privoxy\n *                from starting to forward the correctly parsed chunks\n *                as soon as theoretically possible.\n *\n *                Should be modified to work with a common buffer,\n *                and allow the caller to skip already parsed chunks.\n *\n *                This would allow the function to be used for unbuffered\n *                response bodies as well.\n *\n * Parameters  :\n *          1  :  iob = Buffer with the body to check.\n *          2  :  length = Length of complete body\n *\n * Returns     :  Enum with the result of the check.\n *\n *********************************************************************/\nstatic enum chunk_status chunked_body_is_complete(struct iob *iob, size_t *length)\n{\n   unsigned int chunksize;\n   char *p = iob->cur;\n\n   do\n   {\n      /*\n       * We need at least a single digit, followed by \"\\r\\n\",\n       * followed by an unknown amount of data, followed by \"\\r\\n\".\n       */\n      if (p + 5 > iob->eod)\n      {\n         return CHUNK_STATUS_MISSING_DATA;\n      }\n      if (sscanf(p, \"%x\", &chunksize) != 1)\n      {\n         return CHUNK_STATUS_PARSE_ERROR;\n      }\n\n      /*\n       * We want at least a single digit, followed by \"\\r\\n\",\n       * followed by the specified amount of data, followed by \"\\r\\n\".\n       */\n      if (p + chunksize + 5 > iob->eod)\n      {\n         return CHUNK_STATUS_MISSING_DATA;\n      }\n\n      /* Skip chunk-size. */\n      p = strstr(p, \"\\r\\n\");\n      if (NULL == p)\n      {\n         return CHUNK_STATUS_PARSE_ERROR;\n      }\n      /* Move beyond the chunkdata. */\n      p += 2 + chunksize;\n\n      /* There should be another \"\\r\\n\" to skip */\n      if (memcmp(p, \"\\r\\n\", 2))\n      {\n         return CHUNK_STATUS_PARSE_ERROR;\n      }\n      p += 2;\n   } while (chunksize > 0U);\n\n   *length = (size_t)(p - iob->cur);\n   assert(*length <= (size_t)(iob->eod - iob->cur));\n   assert(p <= iob->eod);\n\n   return CHUNK_STATUS_BODY_COMPLETE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    : receive_chunked_client_request_body\n *\n * Description : Read the chunk-encoded client request body.\n *               Failures are dealt with.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK or JB_ERR_PARSE\n *\n *********************************************************************/\nstatic jb_err receive_chunked_client_request_body(struct client_state *csp)\n{\n   size_t body_length;\n   enum chunk_status status;\n\n   while (CHUNK_STATUS_MISSING_DATA ==\n      (status = chunked_body_is_complete(csp->client_iob,&body_length)))\n   {\n      char buf[BUFFER_SIZE];\n      int len;\n\n      if (!data_is_available(csp->cfd, csp->config->socket_timeout))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Timeout while waiting for the client body.\");\n         break;\n      }\n      len = read_socket(csp->cfd, buf, sizeof(buf) - 1);\n      if (len <= 0)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Read the client body failed: %E\");\n         break;\n      }\n      if (add_to_iob(csp->client_iob, csp->config->buffer_limit, buf, len))\n      {\n         break;\n      }\n   }\n   if (status != CHUNK_STATUS_BODY_COMPLETE)\n   {\n      write_socket(csp->cfd, CLIENT_BODY_PARSE_ERROR_RESPONSE,\n         strlen(CLIENT_BODY_PARSE_ERROR_RESPONSE));\n      log_error(LOG_LEVEL_CLF,\n         \"%s - - [%T] \\\"Failed reading chunked client body\\\" 400 0\", csp->ip_addr_str);\n      return JB_ERR_PARSE;\n   }\n   log_error(LOG_LEVEL_CONNECT,\n      \"Chunked client body completely read. Length: %d\", body_length);\n   csp->expected_client_content_length = body_length;\n\n   return JB_ERR_OK;\n\n}\n\n\n#ifdef FEATURE_FORCE_LOAD\n/*********************************************************************\n *\n * Function    :  force_required\n *\n * Description : Checks a request line to see if it contains\n *               the FORCE_PREFIX. If it does, it is removed\n *               unless enforcing requests has beend disabled.\n *\n * Parameters  :\n *          1  :  request_line = HTTP request line\n *\n * Returns     :  TRUE if force is required, FALSE otherwise.\n *\n *********************************************************************/\nstatic int force_required(const struct client_state *csp, char *request_line)\n{\n   char *p;\n\n   p = strstr(request_line, \"http://\");\n   if (p != NULL)\n   {\n      /* Skip protocol */\n      p += strlen(\"http://\");\n   }\n   else\n   {\n      /* Intercepted request usually don't specify the protocol. */\n      p = request_line;\n   }\n\n   /* Go to the beginning of the path */\n   p = strstr(p, \"/\");\n   if (p == NULL)\n   {\n      /*\n       * If the path is missing the request line is invalid and we\n       * are done here. The client-visible rejection happens later on.\n       */\n      return 0;\n   }\n\n   if (0 == strncmpic(p, FORCE_PREFIX, strlen(FORCE_PREFIX) - 1))\n   {\n      if (!(csp->config->feature_flags & RUNTIME_FEATURE_ENFORCE_BLOCKS))\n      {\n         /* XXX: Should clean more carefully */\n         strclean(request_line, FORCE_PREFIX);\n         log_error(LOG_LEVEL_FORCE,\n            \"Enforcing request: \\\"%s\\\".\", request_line);\n\n         return 1;\n      }\n      log_error(LOG_LEVEL_FORCE,\n         \"Ignored force prefix in request: \\\"%s\\\".\", request_line);\n   }\n\n   return 0;\n\n}\n#endif /* def FEATURE_FORCE_LOAD */\n\n\n/*********************************************************************\n *\n * Function    :  receive_client_request\n *\n * Description : Read the client's request (more precisely the\n *               client headers) and answer it if necessary.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK, JB_ERR_PARSE or JB_ERR_MEMORY\n *\n *********************************************************************/\nstatic jb_err receive_client_request(struct client_state *csp)\n{\n   char buf[BUFFER_SIZE];\n   char *p;\n   char *req = NULL;\n   struct http_request *http;\n   int len;\n   jb_err err;\n\n   /* Temporary copy of the client's headers before they get enlisted in csp->headers */\n   struct list header_list;\n   struct list *headers = &header_list;\n\n   /* We don't care if the arriving data is a valid HTTP request or not. */\n   csp->requests_received_total++;\n\n   http = csp->http;\n\n   memset(buf, 0, sizeof(buf));\n\n   req = get_request_line(csp);\n   if (req == NULL)\n   {\n      mark_server_socket_tainted(csp);\n      return JB_ERR_PARSE;\n   }\n   assert(*req != '\\0');\n\n   if (client_protocol_is_unsupported(csp, req))\n   {\n      return JB_ERR_PARSE;\n   }\n\n#ifdef FEATURE_FORCE_LOAD\n   if (force_required(csp, req))\n   {\n      csp->flags |= CSP_FLAG_FORCED;\n   }\n#endif /* def FEATURE_FORCE_LOAD */\n\n   err = parse_http_request(req, http);\n   freez(req);\n   if (JB_ERR_OK != err)\n   {\n      write_socket(csp->cfd, CHEADER, strlen(CHEADER));\n      /* XXX: Use correct size */\n      log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"Invalid request\\\" 400 0\", csp->ip_addr_str);\n      log_error(LOG_LEVEL_ERROR,\n         \"Couldn't parse request line received from %s: %s\",\n         csp->ip_addr_str, jb_err_to_string(err));\n\n      free_http_request(http);\n      return JB_ERR_PARSE;\n   }\n\n   /* grab the rest of the client's headers */\n   init_list(headers);\n   for (;;)\n   {\n      p = get_header(csp->client_iob);\n\n      if (p == NULL)\n      {\n         /* There are no additional headers to read. */\n         break;\n      }\n\n      if (*p == '\\0')\n      {\n         /*\n          * We didn't receive a complete header\n          * line yet, get the rest of it.\n          */\n         if (!data_is_available(csp->cfd, csp->config->socket_timeout))\n         {\n            log_error(LOG_LEVEL_ERROR,\n               \"Stopped grabbing the client headers.\");\n            destroy_list(headers);\n            return JB_ERR_PARSE;\n         }\n\n         len = read_socket(csp->cfd, buf, sizeof(buf) - 1);\n         if (len <= 0)\n         {\n            log_error(LOG_LEVEL_ERROR, \"read from client failed: %E\");\n            destroy_list(headers);\n            return JB_ERR_PARSE;\n         }\n\n         if (add_to_iob(csp->client_iob, csp->config->buffer_limit, buf, len))\n         {\n            /*\n             * If there is no memory left for buffering the\n             * request, there is nothing we can do but hang up\n             */\n            destroy_list(headers);\n            return JB_ERR_MEMORY;\n         }\n      }\n      else\n      {\n         if (!strncmpic(p, \"Transfer-Encoding:\", 18))\n         {\n            /*\n             * XXX: should be called through sed()\n             *      but currently can't.\n             */\n            client_transfer_encoding(csp, &p);\n         }\n         /*\n          * We were able to read a complete\n          * header and can finally enlist it.\n          */\n         enlist(headers, p);\n         freez(p);\n      }\n   }\n\n   if (http->host == NULL)\n   {\n      /*\n       * If we still don't know the request destination,\n       * the request is invalid or the client uses\n       * Privoxy without its knowledge.\n       */\n      if (JB_ERR_OK != get_request_destination_elsewhere(csp, headers))\n      {\n         /*\n          * Our attempts to get the request destination\n          * elsewhere failed or Privoxy is configured\n          * to only accept proxy requests.\n          *\n          * An error response has already been send\n          * and we're done here.\n          */\n         return JB_ERR_PARSE;\n      }\n   }\n\n   /*\n    * Determine the actions for this URL\n    */\n#ifdef FEATURE_TOGGLE\n   if (!(csp->flags & CSP_FLAG_TOGGLED_ON))\n   {\n      /* Most compatible set of actions (i.e. none) */\n      init_current_action(csp->action);\n   }\n   else\n#endif /* ndef FEATURE_TOGGLE */\n   {\n      get_url_actions(csp, http);\n   }\n\n   enlist(csp->headers, http->cmd);\n\n   /* Append the previously read headers */\n   err = list_append_list_unique(csp->headers, headers);\n   destroy_list(headers);\n\n   return err;\n\n}\n\n\n/*********************************************************************\n *\n * Function    : parse_client_request\n *\n * Description : Parses the client's request and decides what to do\n *               with it.\n *\n *               Note that since we're not using select() we could get\n *               blocked here if a client connected, then didn't say\n *               anything!\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK or JB_ERR_PARSE\n *\n *********************************************************************/\nstatic jb_err parse_client_request(struct client_state *csp)\n{\n   struct http_request *http = csp->http;\n   jb_err err;\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n    && (!strcmpic(csp->http->ver, \"HTTP/1.1\"))\n    && (csp->http->ssl == 0))\n   {\n      /* Assume persistence until further notice */\n      csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n   }\n\n   if (csp->http->ssl == 0)\n   {\n      /*\n       * This whole block belongs to chat() but currently\n       * has to be executed before sed().\n       */\n      if (csp->flags & CSP_FLAG_CHUNKED_CLIENT_BODY)\n      {\n         if (receive_chunked_client_request_body(csp) != JB_ERR_OK)\n         {\n            return JB_ERR_PARSE;\n         }\n      }\n      else\n      {\n         csp->expected_client_content_length = get_expected_content_length(csp->headers);\n      }\n      verify_request_length(csp);\n   }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n   err = sed(csp, FILTER_CLIENT_HEADERS);\n   if (JB_ERR_OK != err)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Failed to parse client request from %s.\",\n         csp->ip_addr_str);\n      log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"%s\\\" 400 0\",\n         csp->ip_addr_str, csp->http->cmd);\n      write_socket(csp->cfd, CHEADER, strlen(CHEADER));\n      return JB_ERR_PARSE;\n   }\n   csp->flags |= CSP_FLAG_CLIENT_HEADER_PARSING_DONE;\n\n   /* Check request line for rewrites. */\n   if ((NULL == csp->headers->first->str)\n      || (strcmp(http->cmd, csp->headers->first->str) &&\n         (JB_ERR_OK != change_request_destination(csp))))\n   {\n      /*\n       * A header filter broke the request line - bail out.\n       */\n      write_socket(csp->cfd, MESSED_UP_REQUEST_RESPONSE, strlen(MESSED_UP_REQUEST_RESPONSE));\n      /* XXX: Use correct size */\n      log_error(LOG_LEVEL_CLF,\n         \"%s - - [%T] \\\"Invalid request generated\\\" 500 0\", csp->ip_addr_str);\n      log_error(LOG_LEVEL_ERROR,\n         \"Invalid request line after applying header filters.\");\n      free_http_request(http);\n\n      return JB_ERR_PARSE;\n   }\n\n   if (client_has_unsupported_expectations(csp))\n   {\n      return JB_ERR_PARSE;\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  chat\n *\n * Description :  Once a connection from the client has been accepted,\n *                this function is called (via serve()) to handle the\n *                main business of the communication.  This function\n *                returns after dealing with a single request. It can\n *                be called multiple times with the same client socket\n *                if the client is keeping the connection alive.\n *\n *                The decision whether or not a client connection will\n *                be kept alive is up to the caller which also must\n *                close the client socket when done.\n *\n *                FIXME: chat is nearly thousand lines long.\n *                Ridiculous.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  Nothing.\n *\n *********************************************************************/\nstatic void chat(struct client_state *csp)\n{\n    char buf[BUFFER_SIZE];\n    char *hdr;\n    char *p;\n    fd_set rfds;\n    int n;\n    jb_socket maxfd;\n    int server_body;\n    int ms_iis5_hack = 0;\n    unsigned long long byte_count = 0;\n    struct forward_spec *fwd;\n    struct http_request *http;\n    long len = 0; /* for buffer sizes (and negative error codes) */\n    int buffer_and_filter_content = 0;\n\n    /* Skeleton for HTTP response, if we should intercept the request */\n    struct http_response *rsp;\n    struct timeval timeout;\n    #ifdef FEATURE_CONNECTION_KEEP_ALIVE\n    int watch_client_socket;\n    #endif\n\n    memset(buf, 0, sizeof(buf));\n\n    http = csp->http;\n\n    if (receive_client_request(csp) != JB_ERR_OK)\n    {\n      return;\n    }\n    if (parse_client_request(csp) != JB_ERR_OK)\n    {\n      return;\n    }\n\n    add_log_csp(csp);\n\n    /* decide how to route the HTTP request */\n    fwd = forward_url(csp, http);\n    if (NULL == fwd)\n    {\n        log_error(LOG_LEVEL_FATAL, \"gateway spec is NULL!?!?  This can't happen!\");\n        /* Never get here - LOG_LEVEL_FATAL causes program exit */\n        return;\n    }\n    csp->fwd = fwd;\n\n   /*\n    * build the http request to send to the server\n    * we have to do one of the following:\n    *\n    * create = use the original HTTP request to create a new\n    *          HTTP request that has either the path component\n    *          without the http://domainspec (w/path) or the\n    *          full orininal URL (w/url)\n    *          Note that the path and/or the HTTP version may\n    *          have been altered by now.\n    *\n    * connect = Open a socket to the host:port of the server\n    *           and short-circuit server and client socket.\n    *\n    * pass =  Pass the request unchanged if forwarding a CONNECT\n    *         request to a parent proxy. Note that we'll be sending\n    *         the CFAIL message ourselves if connecting to the parent\n    *         fails, but we won't send a CSUCCEED message if it works,\n    *         since that would result in a double message (ours and the\n    *         parent's). After sending the request to the parent, we simply\n    *         tunnel.\n    *\n    * here's the matrix:\n    *                        SSL\n    *                    0        1\n    *                +--------+--------+\n    *                |        |        |\n    *             0  | create | connect|\n    *                | w/path |        |\n    *  Forwarding    +--------+--------+\n    *                |        |        |\n    *             1  | create | pass   |\n    *                | w/url  |        |\n    *                +--------+--------+\n    *\n    */\n\n   if (http->ssl && connect_port_is_forbidden(csp))\n   {\n      const char *acceptable_connect_ports =\n         csp->action->string[ACTION_STRING_LIMIT_CONNECT];\n      assert(NULL != acceptable_connect_ports);\n      log_error(LOG_LEVEL_INFO, \"Request from %s marked for blocking. \"\n         \"limit-connect{%s} doesn't allow CONNECT requests to %s\",\n         csp->ip_addr_str, acceptable_connect_ports, csp->http->hostport);\n      csp->action->flags |= ACTION_BLOCK;\n      http->ssl = 0;\n   }\n\n   if (http->ssl == 0)\n   {\n      freez(csp->headers->first->str);\n      build_request_line(csp, fwd, &csp->headers->first->str);\n   }\n\n   /*\n    * We have a request. Check if one of the crunchers wants it.\n    */\n   if (crunch_response_triggered(csp, crunchers_all))\n   {\n      /*\n       * Yes. The client got the crunch response and we're done here.\n       */\n      return;\n   }\n\n   log_applied_actions(csp->action);\n   log_error(LOG_LEVEL_GPC, \"%s%s\", http->hostport, http->path);\n\n   if (fwd->forward_host)\n   {\n      log_error(LOG_LEVEL_CONNECT, \"via [%s]:%d to: %s\",\n         fwd->forward_host, fwd->forward_port, http->hostport);\n   }\n   else\n   {\n      log_error(LOG_LEVEL_CONNECT, \"to %s\", http->hostport);\n   }\n\n   /* here we connect to the server, gateway, or the forwarder */\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if ((csp->server_connection.sfd != JB_INVALID_SOCKET)\n      && socket_is_still_alive(csp->server_connection.sfd)\n      && connection_destination_matches(&csp->server_connection, http, fwd))\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Reusing server socket %d connected to %s. Total requests: %u.\",\n         csp->server_connection.sfd, csp->server_connection.host,\n         csp->server_connection.requests_sent_total);\n   }\n   else\n   {\n      if (csp->server_connection.sfd != JB_INVALID_SOCKET)\n      {\n#ifdef FEATURE_CONNECTION_SHARING\n         if (csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n         {\n            remember_connection(&csp->server_connection);\n         }\n         else\n#endif /* def FEATURE_CONNECTION_SHARING */\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"Closing server socket %d connected to %s. Total requests: %u.\",\n               csp->server_connection.sfd, csp->server_connection.host,\n               csp->server_connection.requests_sent_total);\n            close_socket(csp->server_connection.sfd);\n         }\n         mark_connection_closed(&csp->server_connection);\n      }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n      csp->server_connection.sfd = forwarded_connect(fwd, http, csp);\n\n      if (csp->server_connection.sfd == JB_INVALID_SOCKET)\n      {\n         if ((fwd->type != SOCKS_NONE) && (fwd->type != FORWARD_WEBSERVER))\n         {\n            /* Socks error. */\n            rsp = error_response(csp, \"forwarding-failed\");\n         }\n         else if (errno == EINVAL)\n         {\n            rsp = error_response(csp, \"no-such-domain\");\n         }\n         else\n         {\n            rsp = error_response(csp, \"connect-failed\");\n         }\n\n         /* Write the answer to the client */\n         if (rsp != NULL)\n         {\n            send_crunch_response(csp, rsp);\n         }\n\n         /*\n          * Temporary workaround to prevent already-read client\n          * bodies from being parsed as new requests. For now we\n          * err on the safe side and throw all the following\n          * requests under the bus, even if no client body has been\n          * buffered. A compliant client will repeat the dropped\n          * requests on an untainted connection.\n          *\n          * The proper fix is to discard the no longer needed\n          * client body in the buffer (if there is one) and to\n          * continue parsing the bytes that follow.\n          */\n         drain_and_close_socket(csp->cfd);\n         csp->cfd = JB_INVALID_SOCKET;\n         return;\n      }\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n      save_connection_destination(csp->server_connection.sfd,\n         http, fwd, &csp->server_connection);\n      csp->server_connection.keep_alive_timeout =\n         (unsigned)csp->config->keep_alive_timeout;\n   }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n   csp->server_connection.requests_sent_total++;\n\n   if ((fwd->type == SOCKS_5T) && (NULL == csp->headers->first))\n   {\n      /* Client headers have been sent optimistically */\n      assert(csp->headers->last == NULL);\n   }\n   else if (fwd->forward_host || (http->ssl == 0))\n   {\n      int write_failure;\n      hdr = list_to_text(csp->headers);\n      if (hdr == NULL)\n      {\n         /* FIXME Should handle error properly */\n         log_error(LOG_LEVEL_FATAL, \"Out of memory parsing client header\");\n      }\n      list_remove_all(csp->headers);\n\n      /*\n       * Write the client's (modified) header to the server\n       * (along with anything else that may be in the buffer)\n       */\n      write_failure = 0 != write_socket(csp->server_connection.sfd, hdr, strlen(hdr));\n      freez(hdr);\n\n      if (write_failure)\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"Failed sending request headers to: %s: %E\", http->hostport);\n      }\n      else if (((csp->flags & CSP_FLAG_PIPELINED_REQUEST_WAITING) == 0)\n         && (flush_socket(csp->server_connection.sfd, csp->client_iob) < 0))\n      {\n         write_failure = 1;\n         log_error(LOG_LEVEL_CONNECT,\n            \"Failed sending request body to: %s: %E\", http->hostport);\n      }\n\n      if (write_failure)\n      {\n         rsp = error_response(csp, \"connect-failed\");\n         if (rsp)\n         {\n            send_crunch_response(csp, rsp);\n         }\n         return;\n      }\n   }\n   else\n   {\n      /*\n       * We're running an SSL tunnel and we're not forwarding,\n       * so just ditch the client headers, send the \"connect succeeded\"\n       * message to the client, flush the rest, and get out of the way.\n       */\n      list_remove_all(csp->headers);\n      if (write_socket(csp->cfd, CSUCCEED, strlen(CSUCCEED)))\n      {\n         return;\n      }\n      clear_iob(csp->client_iob);\n   }\n\n   log_error(LOG_LEVEL_CONNECT, \"to %s successful\", http->hostport);\n//   logRequestStatus(csp, CONN_STATUS_OPEN);\n\n   /* XXX: should the time start earlier for optimistically sent data? */\n   csp->server_connection.request_sent = time(NULL);\n\n   maxfd = (csp->cfd > csp->server_connection.sfd) ?\n      csp->cfd : csp->server_connection.sfd;\n\n   /* pass data between the client and server\n    * until one or the other shuts down the connection.\n    */\n\n   server_body = 0;\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   watch_client_socket = 0 == (csp->flags & CSP_FLAG_PIPELINED_REQUEST_WAITING);\n#endif\n\n   for (;;)\n   {\n#ifdef __OS2__\n      /*\n       * FD_ZERO here seems to point to an errant macro which crashes.\n       * So do this by hand for now...\n       */\n      memset(&rfds,0x00,sizeof(fd_set));\n#else\n      FD_ZERO(&rfds);\n#endif\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n      if (!watch_client_socket)\n      {\n         maxfd = csp->server_connection.sfd;\n      }\n      else\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n      {\n         FD_SET(csp->cfd, &rfds);\n      }\n\n      FD_SET(csp->server_connection.sfd, &rfds);\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n      if ((csp->flags & CSP_FLAG_CHUNKED)\n         && !(csp->flags & CSP_FLAG_CONTENT_LENGTH_SET)\n         && ((csp->iob->eod - csp->iob->cur) >= 5)\n         && !memcmp(csp->iob->eod-5, \"0\\r\\n\\r\\n\", 5))\n      {\n         /*\n          * XXX: This check should be obsolete now,\n          *      but let's wait a while to be sure.\n          */\n         log_error(LOG_LEVEL_CONNECT,\n            \"Looks like we got the last chunk together with \"\n            \"the server headers but didn't detect it earlier. \"\n            \"We better stop reading.\");\n         byte_count = (unsigned long long)(csp->iob->eod - csp->iob->cur);\n         csp->expected_content_length = byte_count;\n         csp->flags |= CSP_FLAG_CONTENT_LENGTH_SET;\n      }\n      if (server_body && server_response_is_complete(csp, byte_count))\n      {\n         if (csp->expected_content_length == byte_count)\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"Done reading from server. Content length: %llu as expected. \"\n               \"Bytes most recently read: %d.\",\n               byte_count, len);\n         }\n         else\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"Done reading from server. Expected content length: %llu. \"\n               \"Actual content length: %llu. Bytes most recently read: %d.\",\n               csp->expected_content_length, byte_count, len);\n         }\n         len = 0;\n         /*\n          * XXX: should not jump around,\n          * chat() is complicated enough already.\n          */\n         goto reading_done;\n      }\n#endif  /* FEATURE_CONNECTION_KEEP_ALIVE */\n\n      timeout.tv_sec = csp->config->socket_timeout;\n      timeout.tv_usec = 0;\n      n = select((int)maxfd+1, &rfds, NULL, NULL, &timeout);\n\n      if (n == 0)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Didn't receive data in time: %s\", http->url);\n         if ((byte_count == 0) && (http->ssl == 0))\n         {\n            send_crunch_response(csp, error_response(csp, \"connection-timeout\"));\n         }\n         mark_server_socket_tainted(csp);\n         return;\n      }\n      else if (n < 0)\n      {\n         log_error(LOG_LEVEL_ERROR, \"select() failed!: %E\");\n         mark_server_socket_tainted(csp);\n         return;\n      }\n\n      /*\n       * This is the body of the browser's request,\n       * just read and write it.\n       *\n       * XXX: Make sure the client doesn't use pipelining\n       * behind Privoxy's back.\n       */\n      if (FD_ISSET(csp->cfd, &rfds))\n      {\n          int max_bytes_to_read = sizeof(buf) - 1;\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n          if ((csp->flags & CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ))\n          {\n              if (data_is_available(csp->cfd, 0))\n              {\n                /*\n                * If the next request is already waiting, we have\n                * to stop select()ing the client socket. Otherwise\n                * we would always return right away and get nothing\n                * else done.\n                */\n                 watch_client_socket = 0;\n                 log_error(LOG_LEVEL_CONNECT,\n                  \"Stopping to watch the client socket %d. \"\n                  \"There's already another request waiting.\",\n                  csp->cfd);\n                  continue;\n              }\n            /*\n             * If the client socket is set, but there's no data\n             * available on the socket, the client went fishing\n             * and continuing talking to the server makes no sense.\n             */\n              log_error(LOG_LEVEL_CONNECT,\n               \"The client closed socket %d while \"\n               \"the server socket %d is still open.\",\n               csp->cfd, csp->server_connection.sfd);\n              mark_server_socket_tainted(csp);\n              break;\n         }\n         if (csp->expected_client_content_length != 0)\n         {\n            if (csp->expected_client_content_length < (sizeof(buf) - 1))\n            {\n               max_bytes_to_read = (int)csp->expected_client_content_length;\n            }\n            log_error(LOG_LEVEL_CONNECT,\n               \"Waiting for up to %d bytes from the client.\",\n               max_bytes_to_read);\n         }\n         assert(max_bytes_to_read < sizeof(buf));\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n         len = read_socket(csp->cfd, buf, max_bytes_to_read);\n\n         if (len <= 0)\n         {\n            /* XXX: not sure if this is necessary. */\n            mark_server_socket_tainted(csp);\n            break; /* \"game over, man\" */\n         }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         if (csp->expected_client_content_length != 0)\n         {\n            assert(len <= max_bytes_to_read);\n            csp->expected_client_content_length -= (unsigned)len;\n            log_error(LOG_LEVEL_CONNECT,\n               \"Expected client content length set to %llu \"\n               \"after reading %d bytes.\",\n               csp->expected_client_content_length, len);\n            if (csp->expected_client_content_length == 0)\n            {\n               log_error(LOG_LEVEL_CONNECT,\n                  \"Done reading from the client.\");\n               csp->flags |= CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ;\n            }\n         }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n         if (write_socket(csp->server_connection.sfd, buf, (size_t)len))\n         {\n            log_error(LOG_LEVEL_ERROR, \"write to: %s failed: %E\", http->host);\n            mark_server_socket_tainted(csp);\n            return;\n         }\n         continue;\n      }\n\n      /*\n       * The server wants to talk. It could be the header or the body.\n       * If `hdr' is null, then it's the header otherwise it's the body.\n       * FIXME: Does `hdr' really mean `host'? No.\n       */\n      if (FD_ISSET(csp->server_connection.sfd, &rfds))\n      {\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         /*\n          * If we are buffering content, we don't want to eat up to\n          * buffer-limit bytes if the client no longer cares about them.\n          * If we aren't buffering, however, a dead client socket will be\n          * noticed pretty much right away anyway, so we can reduce the\n          * overhead by skipping the check.\n          */\n         if (buffer_and_filter_content && !socket_is_still_alive(csp->cfd))\n         {\n#ifdef _WIN32\n            log_error(LOG_LEVEL_CONNECT,\n               \"The server still wants to talk, but the client may already have hung up on us.\");\n#else\n            log_error(LOG_LEVEL_CONNECT,\n               \"The server still wants to talk, but the client hung up on us.\");\n            mark_server_socket_tainted(csp);\n            return;\n#endif /* def _WIN32 */\n         }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n         len = read_socket(csp->server_connection.sfd, buf, sizeof(buf) - 1);\n\n         if (len < 0)\n         {\n            log_error(LOG_LEVEL_ERROR, \"read from: %s failed: %E\", http->host);\n\n            if (http->ssl && (fwd->forward_host == NULL))\n            {\n               /*\n                * Just hang up. We already confirmed the client's CONNECT\n                * request with status code 200 and unencrypted content is\n                * no longer welcome.\n                */\n               log_error(LOG_LEVEL_ERROR,\n                  \"CONNECT already confirmed. Unable to tell the client about the problem.\");\n               return;\n            }\n            else if (byte_count)\n            {\n               /*\n                * Just hang up. We already transmitted the original headers\n                * and parts of the original content and therefore missed the\n                * chance to send an error message (without risking data corruption).\n                *\n                * XXX: we could retry with a fancy range request here.\n                */\n               log_error(LOG_LEVEL_ERROR, \"Already forwarded the original headers. \"\n                  \"Unable to tell the client about the problem.\");\n               mark_server_socket_tainted(csp);\n               return;\n            }\n            /*\n             * XXX: Consider handling the cases above the same.\n             */\n            mark_server_socket_tainted(csp);\n            len = 0;\n         }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         if (csp->flags & CSP_FLAG_CHUNKED)\n         {\n            if ((len >= 5) && !memcmp(buf+len-5, \"0\\r\\n\\r\\n\", 5))\n            {\n               /* XXX: this is a temporary hack */\n               log_error(LOG_LEVEL_CONNECT,\n                  \"Looks like we reached the end of the last chunk. \"\n                  \"We better stop reading.\");\n               csp->expected_content_length = byte_count + (unsigned long long)len;\n               csp->flags |= CSP_FLAG_CONTENT_LENGTH_SET;\n            }\n         }\n         reading_done:\n#endif  /* FEATURE_CONNECTION_KEEP_ALIVE */\n\n         /*\n          * Add a trailing zero to let be able to use string operations.\n          * XXX: do we still need this with filter_popups gone?\n          */\n         buf[len] = '\\0';\n\n         /*\n          * Normally, this would indicate that we've read\n          * as much as the server has sent us and we can\n          * close the client connection.  However, Microsoft\n          * in its wisdom has released IIS/5 with a bug that\n          * prevents it from sending the trailing \\r\\n in\n          * a 302 redirect header (and possibly other headers).\n          * To work around this if we've haven't parsed\n          * a full header we'll append a trailing \\r\\n\n          * and see if this now generates a valid one.\n          *\n          * This hack shouldn't have any impacts.  If we've\n          * already transmitted the header or if this is a\n          * SSL connection, then we won't bother with this\n          * hack.  So we only work on partially received\n          * headers.  If we append a \\r\\n and this still\n          * doesn't generate a valid header, then we won't\n          * transmit anything to the client.\n          */\n         if (len == 0)\n         {\n\n            if (server_body || http->ssl)\n            {\n               /*\n                * If we have been buffering up the document,\n                * now is the time to apply content modification\n                * and send the result to the client.\n                */\n               if (buffer_and_filter_content)\n               {\n                  p = execute_content_filters(csp);\n                  /*\n                   * If content filtering fails, use the original\n                   * buffer and length.\n                   * (see p != NULL ? p : csp->iob->cur below)\n                   */\n                  if (NULL == p)\n                  {\n                     csp->content_length = (size_t)(csp->iob->eod - csp->iob->cur);\n                  }\n#ifdef FEATURE_COMPRESSION\n                  else if ((csp->flags & CSP_FLAG_CLIENT_SUPPORTS_DEFLATE)\n                     && (csp->content_length > LOWER_LENGTH_LIMIT_FOR_COMPRESSION))\n                  {\n                     char *compressed_content = compress_buffer(p,\n                        (size_t *)&csp->content_length, csp->config->compression_level);\n                     if (compressed_content != NULL)\n                     {\n                        freez(p);\n                        p = compressed_content;\n                        csp->flags |= CSP_FLAG_BUFFERED_CONTENT_DEFLATED;\n                     }\n                  }\n#endif\n\n                  if (JB_ERR_OK != update_server_headers(csp))\n                  {\n                     log_error(LOG_LEVEL_FATAL,\n                        \"Failed to update server headers. after filtering.\");\n                  }\n\n                  hdr = list_to_text(csp->headers);\n                  if (hdr == NULL)\n                  {\n                     /* FIXME Should handle error properly */\n                     log_error(LOG_LEVEL_FATAL, \"Out of memory parsing server header\");\n                  }\n\n                  if (write_socket(csp->cfd, hdr, strlen(hdr))\n                   || write_socket(csp->cfd,\n                         ((p != NULL) ? p : csp->iob->cur), (size_t)csp->content_length))\n                  {\n                     log_error(LOG_LEVEL_ERROR, \"write modified content to client failed: %E\");\n                     freez(hdr);\n                     freez(p);\n                     mark_server_socket_tainted(csp);\n                     return;\n                  }\n\n                  freez(hdr);\n                  freez(p);\n               }\n\n               break; /* \"game over, man\" */\n            }\n\n            /*\n             * This is NOT the body, so\n             * Let's pretend the server just sent us a blank line.\n             */\n            snprintf(buf, sizeof(buf), \"\\r\\n\");\n            len = (int)strlen(buf);\n\n            /*\n             * Now, let the normal header parsing algorithm below do its\n             * job.  If it fails, we'll exit instead of continuing.\n             */\n\n            ms_iis5_hack = 1;\n         }\n\n         /*\n          * If this is an SSL connection or we're in the body\n          * of the server document, just write it to the client,\n          * unless we need to buffer the body for later content-filtering\n          */\n         if (server_body || http->ssl)\n         {\n            if (buffer_and_filter_content)\n            {\n               /*\n                * If there is no memory left for buffering the content, or the buffer limit\n                * has been reached, switch to non-filtering mode, i.e. make & write the\n                * header, flush the iob and buf, and get out of the way.\n                */\n               if (add_to_iob(csp->iob, csp->config->buffer_limit, buf, len))\n               {\n                  size_t hdrlen;\n                  long flushed;\n\n                  log_error(LOG_LEVEL_INFO,\n                     \"Flushing header and buffers. Stepping back from filtering.\");\n\n                  hdr = list_to_text(csp->headers);\n                  if (hdr == NULL)\n                  {\n                     /*\n                      * Memory is too tight to even generate the header.\n                      * Send our static \"Out-of-memory\" page.\n                      */\n                     log_error(LOG_LEVEL_ERROR, \"Out of memory while trying to flush.\");\n                     rsp = cgi_error_memory();\n                     send_crunch_response(csp, rsp);\n                     mark_server_socket_tainted(csp);\n                     return;\n                  }\n                  hdrlen = strlen(hdr);\n\n                  if (write_socket(csp->cfd, hdr, hdrlen)\n                   || ((flushed = flush_socket(csp->cfd, csp->iob)) < 0)\n                   || (write_socket(csp->cfd, buf, (size_t)len)))\n                  {\n                     log_error(LOG_LEVEL_CONNECT,\n                        \"Flush header and buffers to client failed: %E\");\n                     freez(hdr);\n                     mark_server_socket_tainted(csp);\n                     return;\n                  }\n\n                  /*\n                   * Reset the byte_count to the amount of bytes\n                   * we just flushed. len will be added a few lines below,\n                   * hdrlen doesn't matter for LOG_LEVEL_CLF.\n                   */\n                  byte_count = (unsigned long long)flushed;\n                  freez(hdr);\n                  buffer_and_filter_content = 0;\n                  server_body = 1;\n               }\n            }\n            else\n            {\n               if (write_socket(csp->cfd, buf, (size_t)len))\n               {\n                  log_error(LOG_LEVEL_ERROR, \"write to client failed: %E\");\n                  mark_server_socket_tainted(csp);\n                  return;\n               }\n            }\n            byte_count += (unsigned long long)len;\n            continue;\n         }\n         else\n         {\n            /*\n             * We're still looking for the end of the server's header.\n             * Buffer up the data we just read.  If that fails, there's\n             * little we can do but send our static out-of-memory page.\n             */\n            if (add_to_iob(csp->iob, csp->config->buffer_limit, buf, len))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Out of memory while looking for end of server headers.\");\n               rsp = cgi_error_memory();\n               send_crunch_response(csp, rsp);\n               mark_server_socket_tainted(csp);\n               return;\n            }\n\n            /* Convert iob into something sed() can digest */\n            if (JB_ERR_PARSE == get_server_headers(csp))\n            {\n               if (ms_iis5_hack)\n               {\n                  /*\n                   * Well, we tried our MS IIS/5 hack and it didn't work.\n                   * The header is incomplete and there isn't anything\n                   * we can do about it.\n                   */\n                  log_error(LOG_LEVEL_ERROR, \"Invalid server headers. \"\n                     \"Applying the MS IIS5 hack didn't help.\");\n                  log_error(LOG_LEVEL_CLF,\n                     \"%s - - [%T] \\\"%s\\\" 502 0\", csp->ip_addr_str, http->cmd);\n                  write_socket(csp->cfd, INVALID_SERVER_HEADERS_RESPONSE,\n                     strlen(INVALID_SERVER_HEADERS_RESPONSE));\n                  mark_server_socket_tainted(csp);\n                  return;\n               }\n               else\n               {\n                  /*\n                   * Since we have to wait for more from the server before\n                   * we can parse the headers we just continue here.\n                   */\n                  log_error(LOG_LEVEL_CONNECT,\n                     \"Continuing buffering server headers from socket %d. \"\n                     \"Bytes most recently read: %d.\", csp->cfd, len);\n                  continue;\n               }\n            }\n            else\n            {\n               /*\n                * Account for the content bytes we\n                * might have gotten with the headers.\n                */\n               assert(csp->iob->eod >= csp->iob->cur);\n               byte_count = (unsigned long long)(csp->iob->eod - csp->iob->cur);\n            }\n\n            /* Did we actually get anything? */\n            if (NULL == csp->headers->first)\n            {\n               if ((csp->flags & CSP_FLAG_REUSED_CLIENT_CONNECTION))\n               {\n                  log_error(LOG_LEVEL_ERROR,\n                     \"No server or forwarder response received on socket %d. \"\n                     \"Closing client socket %d without sending data.\",\n                     csp->server_connection.sfd, csp->cfd);\n                  log_error(LOG_LEVEL_CLF,\n                     \"%s - - [%T] \\\"%s\\\" 502 0\", csp->ip_addr_str, http->cmd);\n               }\n               else\n               {\n                  log_error(LOG_LEVEL_ERROR,\n                     \"No server or forwarder response received on socket %d.\",\n                     csp->server_connection.sfd);\n                  send_crunch_response(csp, error_response(csp, \"no-server-data\"));\n               }\n               free_http_request(http);\n               mark_server_socket_tainted(csp);\n               return;\n            }\n\n            assert(csp->headers->first->str);\n            assert(!http->ssl);\n            if (strncmpic(csp->headers->first->str, \"HTTP\", 4) &&\n                strncmpic(csp->headers->first->str, \"ICY\", 3))\n            {\n               /*\n                * It doesn't look like a HTTP (or Shoutcast) response:\n                * tell the client and log the problem.\n                */\n               if (strlen(csp->headers->first->str) > 30)\n               {\n                  csp->headers->first->str[30] = '\\0';\n               }\n               log_error(LOG_LEVEL_ERROR,\n                  \"Invalid server or forwarder response. Starts with: %s\",\n                  csp->headers->first->str);\n               log_error(LOG_LEVEL_CLF,\n                  \"%s - - [%T] \\\"%s\\\" 502 0\", csp->ip_addr_str, http->cmd);\n               write_socket(csp->cfd, INVALID_SERVER_HEADERS_RESPONSE,\n                  strlen(INVALID_SERVER_HEADERS_RESPONSE));\n               free_http_request(http);\n               mark_server_socket_tainted(csp);\n               return;\n            }\n\n            /*\n             * We have now received the entire server header,\n             * filter it and send the result to the client\n             */\n            if (JB_ERR_OK != sed(csp, FILTER_SERVER_HEADERS))\n            {\n               log_error(LOG_LEVEL_CLF,\n                  \"%s - - [%T] \\\"%s\\\" 502 0\", csp->ip_addr_str, http->cmd);\n               write_socket(csp->cfd, INVALID_SERVER_HEADERS_RESPONSE,\n                  strlen(INVALID_SERVER_HEADERS_RESPONSE));\n               free_http_request(http);\n               mark_server_socket_tainted(csp);\n               return;\n            }\n            hdr = list_to_text(csp->headers);\n            if (hdr == NULL)\n            {\n               /* FIXME Should handle error properly */\n               log_error(LOG_LEVEL_FATAL, \"Out of memory parsing server header\");\n            }\n\n            if ((csp->flags & CSP_FLAG_CHUNKED)\n               && !(csp->flags & CSP_FLAG_CONTENT_LENGTH_SET)\n               && ((csp->iob->eod - csp->iob->cur) >= 5)\n               && !memcmp(csp->iob->eod-5, \"0\\r\\n\\r\\n\", 5))\n            {\n               log_error(LOG_LEVEL_CONNECT,\n                  \"Looks like we got the last chunk together with \"\n                  \"the server headers. We better stop reading.\");\n               byte_count = (unsigned long long)(csp->iob->eod - csp->iob->cur);\n               csp->expected_content_length = byte_count;\n               csp->flags |= CSP_FLAG_CONTENT_LENGTH_SET;\n            }\n\n            csp->server_connection.response_received = time(NULL);\n\n            if (crunch_response_triggered(csp, crunchers_light))\n            {\n               /*\n                * One of the tags created by a server-header\n                * tagger triggered a crunch. We already\n                * delivered the crunch response to the client\n                * and are done here after cleaning up.\n                */\n                freez(hdr);\n                mark_server_socket_tainted(csp);\n                return;\n            }\n            /* Buffer and pcrs filter this if appropriate. */\n\n            if (!http->ssl) /* We talk plaintext */\n            {\n               buffer_and_filter_content = content_requires_filtering(csp);\n            }\n            /*\n             * Only write if we're not buffering for content modification\n             */\n            if (!buffer_and_filter_content)\n            {\n               /*\n                * Write the server's (modified) header to\n                * the client (along with anything else that\n                * may be in the buffer)\n                */\n\n               if (write_socket(csp->cfd, hdr, strlen(hdr))\n                || ((len = flush_socket(csp->cfd, csp->iob)) < 0))\n               {\n                  log_error(LOG_LEVEL_CONNECT, \"write header to client failed: %E\");\n\n                  /*\n                   * The write failed, so don't bother mentioning it\n                   * to the client... it probably can't hear us anyway.\n                   */\n                  freez(hdr);\n                  mark_server_socket_tainted(csp);\n                  return;\n               }\n            }\n\n            /* we're finished with the server's header */\n\n            freez(hdr);\n            server_body = 1;\n\n            /*\n             * If this was a MS IIS/5 hack then it means the server\n             * has already closed the connection. Nothing more to read.\n             * Time to bail.\n             */\n            if (ms_iis5_hack)\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Closed server connection detected. \"\n                  \"Applying the MS IIS5 hack didn't help.\");\n               log_error(LOG_LEVEL_CLF,\n                  \"%s - - [%T] \\\"%s\\\" 502 0\", csp->ip_addr_str, http->cmd);\n               write_socket(csp->cfd, INVALID_SERVER_HEADERS_RESPONSE,\n                  strlen(INVALID_SERVER_HEADERS_RESPONSE));\n               mark_server_socket_tainted(csp);\n               return;\n            }\n         }\n         continue;\n      }\n      mark_server_socket_tainted(csp);\n      return; /* huh? we should never get here */\n   }\n\n   if (csp->content_length == 0)\n   {\n      /*\n       * If Privoxy didn't recalculate the Content-Length,\n       * byte_count is still correct.\n       */\n      csp->content_length = byte_count;\n   }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if ((csp->flags & CSP_FLAG_CONTENT_LENGTH_SET)\n      && (csp->expected_content_length != byte_count))\n   {\n      log_error(LOG_LEVEL_CONNECT,\n         \"Received %llu bytes while expecting %llu.\",\n         byte_count, csp->expected_content_length);\n      mark_server_socket_tainted(csp);\n   }\n#endif\n\n   log_error(LOG_LEVEL_CLF, \"%s - - [%T] \\\"%s\\\" 200 %llu\",\n      csp->ip_addr_str, http->ocmd, csp->content_length);\n\n   csp->server_connection.timestamp = time(NULL);\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  prepare_csp_for_next_request\n *\n * Description :  Put the csp in a mostly vergin state.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void prepare_csp_for_next_request(struct client_state *csp)\n{\n   unsigned int toggled_on_flag_set = (0 != (csp->flags & CSP_FLAG_TOGGLED_ON));\n\n   csp->content_type = 0;\n   csp->content_length = 0;\n   csp->expected_content_length = 0;\n   csp->expected_client_content_length = 0;\n   list_remove_all(csp->headers);\n   clear_iob(csp->iob);\n   freez(csp->error_message);\n   free_http_request(csp->http);\n   destroy_list(csp->headers);\n   destroy_list(csp->tags);\n   free_current_action(csp->action);\n   if (NULL != csp->fwd && csp->fwd->should_unload)\n   {\n      unload_forward_spec(csp->fwd);\n   }\n   csp->fwd = NULL;\n   /* XXX: Store per-connection flags someplace else. */\n   csp->flags = (CSP_FLAG_ACTIVE | CSP_FLAG_REUSED_CLIENT_CONNECTION);\n   if (toggled_on_flag_set)\n   {\n      csp->flags |= CSP_FLAG_TOGGLED_ON;\n   }\n\n   if (csp->client_iob->eod > csp->client_iob->cur)\n   {\n      long bytes_to_shift = csp->client_iob->cur - csp->client_iob->buf;\n      size_t data_length  = (size_t)(csp->client_iob->eod - csp->client_iob->cur);\n\n      assert(bytes_to_shift > 0);\n      assert(data_length > 0);\n\n      log_error(LOG_LEVEL_CONNECT, \"Shifting %d pipelined bytes by %d bytes\",\n         data_length, bytes_to_shift);\n      memmove(csp->client_iob->buf, csp->client_iob->cur, data_length);\n      csp->client_iob->cur = csp->client_iob->buf;\n      assert(csp->client_iob->eod == csp->client_iob->buf + bytes_to_shift + data_length);\n      csp->client_iob->eod = csp->client_iob->buf + data_length;\n      memset(csp->client_iob->eod, '\\0', (size_t)bytes_to_shift);\n\n      csp->flags |= CSP_FLAG_PIPELINED_REQUEST_WAITING;\n   }\n   else\n   {\n      /*\n       * We mainly care about resetting client_iob->cur so we don't\n       * waste buffer space at the beginning and don't mess up the\n       * request restoration done by cgi_show_request().\n       *\n       * Freeing the buffer itself isn't technically necessary,\n       * but makes debugging more convenient.\n       */\n      clear_iob(csp->client_iob);\n   }\n}\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n/*********************************************************************\n *\n * Function    :  serve\n *\n * Description :  This is little more than chat.  We only \"serve\" to\n *                to close (or remember) any socket that chat may have\n *                opened.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void serve(struct client_state *csp)\n{\n   int config_file_change_detected = 0; /* Only used for debugging */\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n#ifdef FEATURE_CONNECTION_SHARING\n   static int monitor_thread_running = 0;\n#endif /* def FEATURE_CONNECTION_SHARING */\n   int continue_chatting = 0;\n\n   log_error(LOG_LEVEL_CONNECT, \"Accepted connection from %s on socket %d\",\n      csp->ip_addr_str, csp->cfd);\n\n   do\n   {\n      unsigned int latency;\n\n      chat(csp);\n\n      /*\n       * If the request has been crunched,\n       * the calculated latency is zero.\n       */\n      latency = (unsigned)(csp->server_connection.response_received -\n         csp->server_connection.request_sent) / 2;\n\n      if ((csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n         && (csp->flags & CSP_FLAG_CRUNCHED)\n         && (csp->expected_client_content_length != 0))\n      {\n         csp->flags |= CSP_FLAG_SERVER_SOCKET_TAINTED;\n         log_error(LOG_LEVEL_CONNECT,\n            \"Tainting client socket %d due to unread data.\", csp->cfd);\n      }\n\n      continue_chatting = (csp->config->feature_flags\n         & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n         && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n         && (csp->cfd != JB_INVALID_SOCKET)\n         && (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n         && ((csp->flags & CSP_FLAG_SERVER_CONTENT_LENGTH_SET)\n            || (csp->flags & CSP_FLAG_CHUNKED));\n\n      if (!(csp->flags & CSP_FLAG_CRUNCHED)\n         && (csp->server_connection.sfd != JB_INVALID_SOCKET))\n      {\n         if (!(csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET))\n         {\n            csp->server_connection.keep_alive_timeout = csp->config->default_server_timeout;\n         }\n         if (!(csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE)\n            || (csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n            || !socket_is_still_alive(csp->server_connection.sfd)\n            || !(latency < csp->server_connection.keep_alive_timeout))\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"Closing server socket %d connected to %s. \"\n               \"Keep-alive %u. Tainted: %u. Socket alive %u. Timeout: %u.\",\n               csp->server_connection.sfd, csp->server_connection.host,\n               0 != (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE),\n               0 != (csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED),\n               socket_is_still_alive(csp->server_connection.sfd),\n               csp->server_connection.keep_alive_timeout);\n#ifdef FEATURE_CONNECTION_SHARING\n            if (csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n            {\n               forget_connection(csp->server_connection.sfd);\n            }\n#endif /* def FEATURE_CONNECTION_SHARING */\n            close_socket(csp->server_connection.sfd);\n            mark_connection_closed(&csp->server_connection);\n         }\n      }\n\n      if (continue_chatting && any_loaded_file_changed(csp))\n      {\n         continue_chatting = 0;\n         config_file_change_detected = 1;\n      }\n\n      if (continue_chatting)\n      {\n         if (((csp->flags & CSP_FLAG_PIPELINED_REQUEST_WAITING) != 0)\n            && socket_is_still_alive(csp->cfd))\n         {\n            log_error(LOG_LEVEL_CONNECT, \"Client request %d has been \"\n               \"pipelined on socket %d and the socket is still alive.\",\n               csp->requests_received_total+1, csp->cfd);\n            prepare_csp_for_next_request(csp);\n            continue;\n         }\n\n         if (0 != (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE))\n         {\n            if (csp->server_connection.sfd != JB_INVALID_SOCKET)\n            {\n               log_error(LOG_LEVEL_CONNECT,\n                  \"Waiting for the next client request on socket %d. \"\n                  \"Keeping the server socket %d to %s open.\",\n                  csp->cfd, csp->server_connection.sfd, csp->server_connection.host);\n            }\n            else\n            {\n               log_error(LOG_LEVEL_CONNECT,\n                  \"Waiting for the next client request on socket %d. \"\n                  \"No server socket to keep open.\", csp->cfd);\n            }\n         }\n\n         if ((csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n            && data_is_available(csp->cfd, (int)csp->config->keep_alive_timeout)\n            && socket_is_still_alive(csp->cfd))\n         {\n            log_error(LOG_LEVEL_CONNECT,\n               \"Client request %u arrived in time on socket %d.\",\n               csp->requests_received_total+1, csp->cfd);\n            prepare_csp_for_next_request(csp);\n         }\n         else\n         {\n#ifdef FEATURE_CONNECTION_SHARING\n            if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n               && (csp->server_connection.sfd != JB_INVALID_SOCKET)\n               && (socket_is_still_alive(csp->server_connection.sfd)))\n            {\n               time_t time_open = time(NULL) - csp->server_connection.timestamp;\n\n               if (csp->server_connection.keep_alive_timeout < time_open - (time_t)latency)\n               {\n                  break;\n               }\n\n               remember_connection(&csp->server_connection);\n               csp->server_connection.sfd = JB_INVALID_SOCKET;\n               drain_and_close_socket(csp->cfd);\n               csp->cfd = JB_INVALID_SOCKET;\n               privoxy_mutex_lock(&connection_reuse_mutex);\n               if (!monitor_thread_running)\n               {\n                  monitor_thread_running = 1;\n                  privoxy_mutex_unlock(&connection_reuse_mutex);\n                  wait_for_alive_connections();\n                  privoxy_mutex_lock(&connection_reuse_mutex);\n                  monitor_thread_running = 0;\n               }\n               privoxy_mutex_unlock(&connection_reuse_mutex);\n            }\n#endif /* def FEATURE_CONNECTION_SHARING */\n            break;\n         }\n      }\n      else if (csp->server_connection.sfd != JB_INVALID_SOCKET)\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"Closing server socket %d connected to %s. Keep-alive: %u. \"\n            \"Tainted: %u. Socket alive: %u. Timeout: %u. \"\n            \"Configuration file change detected: %u\",\n            csp->server_connection.sfd, csp->server_connection.host,\n            0 != (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE),\n            0 != (csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED),\n            socket_is_still_alive(csp->server_connection.sfd),\n            csp->server_connection.keep_alive_timeout,\n            config_file_change_detected);\n      }\n   } while (continue_chatting);\n\n#else\n   chat(csp);\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n   if (csp->server_connection.sfd != JB_INVALID_SOCKET)\n   {\n#ifdef FEATURE_CONNECTION_SHARING\n      if (csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n      {\n         forget_connection(csp->server_connection.sfd);\n      }\n#endif /* def FEATURE_CONNECTION_SHARING */\n      close_socket(csp->server_connection.sfd);\n   }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   mark_connection_closed(&csp->server_connection);\n#endif\n\n   if (csp->cfd != JB_INVALID_SOCKET)\n   {\n      log_error(LOG_LEVEL_CONNECT, \"Closing client socket %d. \"\n         \"Keep-alive: %u. Socket alive: %u. Data available: %u. \"\n         \"Configuration file change detected: %u. Requests received: %u.\",\n         csp->cfd, 0 != (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE),\n         socket_is_still_alive(csp->cfd), data_is_available(csp->cfd, 0),\n         config_file_change_detected, csp->requests_received_total);\n      drain_and_close_socket(csp->cfd);\n   }\n\n   csp->flags &= ~CSP_FLAG_ACTIVE;\n\n}\n\n\n#ifdef MUTEX_LOCKS_AVAILABLE\n/*********************************************************************\n *\n * Function    :  privoxy_mutex_lock\n *\n * Description :  Locks a mutex.\n *\n * Parameters  :\n *          1  :  mutex = The mutex to lock.\n *\n * Returns     :  Void. May exit in case of errors.\n *\n *********************************************************************/\nvoid privoxy_mutex_lock(privoxy_mutex_t *mutex)\n{\n#ifdef FEATURE_PTHREAD\n   int err = pthread_mutex_lock(mutex);\n   if (err)\n   {\n      if (mutex != &log_mutex)\n      {\n         log_error(LOG_LEVEL_FATAL,\n            \"Mutex locking failed: %s.\\n\", strerror(err));\n      }\n      exit(1);\n   }\n#else\n   EnterCriticalSection(mutex);\n#endif /* def FEATURE_PTHREAD */\n}\n\n\n/*********************************************************************\n *\n * Function    :  privoxy_mutex_unlock\n *\n * Description :  Unlocks a mutex.\n *\n * Parameters  :\n *          1  :  mutex = The mutex to unlock.\n *\n * Returns     :  Void. May exit in case of errors.\n *\n *********************************************************************/\nvoid privoxy_mutex_unlock(privoxy_mutex_t *mutex)\n{\n#ifdef FEATURE_PTHREAD\n   int err = pthread_mutex_unlock(mutex);\n   if (err)\n   {\n      if (mutex != &log_mutex)\n      {\n         log_error(LOG_LEVEL_FATAL,\n            \"Mutex unlocking failed: %s.\\n\", strerror(err));\n      }\n      exit(1);\n   }\n#else\n   LeaveCriticalSection(mutex);\n#endif /* def FEATURE_PTHREAD */\n}\n\n\n/*********************************************************************\n *\n * Function    :  privoxy_mutex_init\n *\n * Description :  Prepares a mutex.\n *\n * Parameters  :\n *          1  :  mutex = The mutex to initialize.\n *\n * Returns     :  Void. May exit in case of errors.\n *\n *********************************************************************/\nstatic void privoxy_mutex_init(privoxy_mutex_t *mutex)\n{\n#ifdef FEATURE_PTHREAD\n   int err = pthread_mutex_init(mutex, 0);\n   if (err)\n   {\n      printf(\"Fatal error. Mutex initialization failed: %s.\\n\",\n         strerror(err));\n      exit(1);\n   }\n#else\n   InitializeCriticalSection(mutex);\n#endif /* def FEATURE_PTHREAD */\n}\n#endif /* def MUTEX_LOCKS_AVAILABLE */\n\n/*********************************************************************\n *\n * Function    :  initialize_mutexes\n *\n * Description :  Prepares mutexes if mutex support is available.\n *\n * Parameters  :  None\n *\n * Returns     :  Void, exits in case of errors.\n *\n *********************************************************************/\nstatic void initialize_mutexes(void)\n{\n#ifdef MUTEX_LOCKS_AVAILABLE\n   /*\n    * Prepare global mutex semaphores\n    */\n   privoxy_mutex_init(&log_mutex);\n   privoxy_mutex_init(&log_request_mutex);\n   privoxy_mutex_init(&log_init_mutex);\n   privoxy_mutex_init(&connection_reuse_mutex);\n#ifdef FEATURE_EXTERNAL_FILTERS\n   privoxy_mutex_init(&external_filter_mutex);\n#endif\n\n   /*\n    * XXX: The assumptions below are a bit naive\n    * and can cause locks that aren't necessary.\n    *\n    * For example older FreeBSD versions (< 6.x?)\n    * have no gethostbyname_r, but gethostbyname is\n    * thread safe.\n    */\n#if !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R)\n   privoxy_mutex_init(&resolver_mutex);\n#endif /* !defined(HAVE_GETHOSTBYADDR_R) || !defined(HAVE_GETHOSTBYNAME_R) */\n   /*\n    * XXX: should we use a single mutex for\n    * localtime() and gmtime() as well?\n    */\n#ifndef HAVE_GMTIME_R\n   privoxy_mutex_init(&gmtime_mutex);\n#endif /* ndef HAVE_GMTIME_R */\n\n#ifndef HAVE_LOCALTIME_R\n   privoxy_mutex_init(&localtime_mutex);\n#endif /* ndef HAVE_GMTIME_R */\n\n#ifndef HAVE_RANDOM\n   privoxy_mutex_init(&rand_mutex);\n#endif /* ndef HAVE_RANDOM */\n\n#endif /* def MUTEX_LOCKS_AVAILABLE */\n}\n\n\n/*********************************************************************\n *\n * Function    :  main\n *\n * Description :  Load the config file and start the listen loop.\n *                This function is a lot more *sane* with the `load_config'\n *                and `listen_loop' functions; although it stills does\n *                a *little* too much for my taste.\n *\n * Parameters  :\n *          1  :  argc = Number of parameters (including $0).\n *          2  :  argv = Array of (char *)'s to the parameters.\n *\n * Returns     :  1 if : can't open config file, unrecognized directive,\n *                stats requested in multi-thread mode, can't open the\n *                log file, can't open the jar file, listen port is invalid,\n *                any load fails, and can't bind port.\n *\n *                Else main never returns, the process must be signaled\n *                to terminate execution.  Or, on Windows, use the\n *                \"File\", \"Exit\" menu option.\n *\n *********************************************************************/\nint shadowpath_main(char *conf_path, struct forward_spec *forward_proxy_list, shadowpath_cb cb, void *data)\n{\n    unsigned int random_seed;\n    proxy_list = forward_proxy_list;\n\n    configfile = conf_path;\n\n    /* Prepare mutexes if supported and necessary. */\n    initialize_mutexes();\n\n    /* Enable logging until further notice. */\n    init_log_module();\n\n    files->next = NULL;\n    clients->next = NULL;\n\n    random_seed = (unsigned int)time(NULL);\n    srandom(random_seed);\n\n    /* Initialize the CGI subsystem */\n    cgi_init_error_messages();\n\n    listen_loop(cb, data);\n\n    return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  bind_port_helper\n *\n * Description :  Bind the listen port.  Handles logging, and aborts\n *                on failure.\n *\n * Parameters  :\n *          1  :  haddr = Host address to bind to. Use NULL to bind to\n *                        INADDR_ANY.\n *          2  :  hport = Specifies port to bind to.\n *\n * Returns     :  Port that was opened.\n *\n *********************************************************************/\nstatic jb_socket bind_port_helper(const char *haddr, int hport)\n{\n   int result;\n   jb_socket bfd;\n\n   result = bind_port(haddr, hport, &bfd);\n\n   if (result < 0)\n   {\n      const char *bind_address = (NULL != haddr) ? haddr : \"INADDR_ANY\";\n      switch(result)\n      {\n         case -3:\n            log_error(LOG_LEVEL_FATAL,\n               \"can't bind to %s:%d: There may be another Privoxy \"\n               \"or some other proxy running on port %d\",\n               bind_address, hport, hport);\n\n         case -2:\n            log_error(LOG_LEVEL_FATAL,\n               \"can't bind to %s:%d: The hostname is not resolvable\",\n               bind_address, hport);\n\n         default:\n            log_error(LOG_LEVEL_FATAL, \"can't bind to %s:%d: %E\",\n               bind_address, hport);\n      }\n\n      /* shouldn't get here */\n      return JB_INVALID_SOCKET;\n   }\n\n   if (bfd >= FD_SETSIZE)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Bind socket number too high to use select(): %d >= %d\",\n         bfd, FD_SETSIZE);\n   }\n\n   if (haddr == NULL)\n   {\n      log_error(LOG_LEVEL_INFO, \"Listening on port %d on all IP addresses\",\n         hport);\n   }\n   else\n   {\n      log_error(LOG_LEVEL_INFO, \"Listening on port %d on IP address %s\",\n         hport, haddr);\n   }\n\n   return bfd;\n}\n\n\n/*********************************************************************\n *\n * Function    :  bind_ports_helper\n *\n * Description :  Bind the listen ports.  Handles logging, and aborts\n *                on failure.\n *\n * Parameters  :\n *          1  :  config = Privoxy configuration.  Specifies ports\n *                         to bind to.\n *          2  :  sockets = Preallocated array of opened sockets\n *                          corresponding to specification in config.\n *                          All non-opened sockets will be set to\n *                          JB_INVALID_SOCKET.\n *\n * Returns     :  Nothing. Inspect sockets argument.\n *\n *********************************************************************/\nstatic void bind_ports_helper(struct configuration_spec * config,\n                              jb_socket sockets[])\n{\n   int i;\n\n   for (i = 0; i < MAX_LISTENING_SOCKETS; i++)\n   {\n      if (config->hport[i] >= 0)\n      {\n         sockets[i] = bind_port_helper(config->haddr[i], config->hport[i]);\n      }\n      else\n      {\n         sockets[i] = JB_INVALID_SOCKET;\n      }\n   }\n}\n\n#ifdef MUTEX_LOCKS_AVAILABLE\nstatic inline void lock_log_request(void)\n{\n    privoxy_mutex_lock(&log_request_mutex);\n}\nstatic inline void unlock_log_request(void)\n{\n    privoxy_mutex_unlock(&log_request_mutex);\n}\n#else /* ! MUTEX_LOCKS_AVAILABLE */\n/*\n * FIXME we need a cross-platform locking mechanism.\n * The locking/unlocking functions below should be\n * fleshed out for non-pthread implementations.\n */\nstatic inline void lock_log_request() {}\nstatic inline void unlock_log_request() {}\n#endif\n\n\nstatic void add_log_csp(struct client_state *csp) {\n    lock_log_request();\n    struct log_client_states *log_csp_list = NULL;\n    log_csp_list = (struct log_client_states *)zalloc(sizeof(*log_csp_list));\n    if (NULL == log_csp_list)\n    {\n        log_error(LOG_LEVEL_FATAL, \"malloc(%d) for log_csp_list failed: %E\", sizeof(*log_csp_list));\n        unlock_log_request();\n        return;\n    }\n\n    log_csp_list->csp = csp;\n    csp->flags |= CSP_FLAG_LOG_REQUEST;\n    log_time_stage(csp, TIME_STAGE_INIT);\n\n    if (log_clients_tail == NULL) {\n        log_clients = log_csp_list;\n        log_clients_tail = log_clients;\n    }else {\n        log_clients_tail->next = log_csp_list;\n        log_clients_tail = log_csp_list;\n    }\n\n    log_clients_count ++;\n\n    if (log_clients_count > max_log_clients_count) {\n        log_clients->csp->flags &= ~CSP_FLAG_LOG_REQUEST;\n        struct log_client_states *tmp = log_clients;\n        log_clients = log_clients->next;\n        tmp->csp = NULL;\n        tmp->next = NULL;\n        freez(tmp);\n        log_clients_count --;\n    }\n    unlock_log_request();\n}\n\nvoid log_time_stage(struct client_state *csp, enum time_stage stage) {\n    if (csp && csp->time_stages[stage] == 0) {\n        csp->time_stages[stage] = [[NSDate date] timeIntervalSince1970];\n        csp->current_time_stage = stage;\n    }\n}\n\n/*********************************************************************\n *\n * Function    :  listen_loop\n *\n * Description :  bind the listen port and enter a \"FOREVER\" listening loop.\n *\n * Parameters  :  N/A\n *\n * Returns     :  Never.\n *\n *********************************************************************/\nstatic void listen_loop(shadowpath_cb cb, void *data)\n{\n    struct client_states *csp_list = NULL;\n    struct client_state *csp = NULL;\n    jb_socket bfds[MAX_LISTENING_SOCKETS];\n    unsigned int active_threads = 0;\n\n    config = load_config();\n\n    #ifdef FEATURE_CONNECTION_SHARING\n    /*\n    * XXX: Should be relocated once it no\n    * longer needs to emit log messages.\n    */\n    initialize_reusable_connections();\n    #endif /* def FEATURE_CONNECTION_SHARING */\n\n    bind_ports_helper(config, bfds);\n\n\n    cb(bfds[0], data);\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n    while (!g_terminate)\n#else\n    for (;;)\n#endif\n    {\n        /*\n        * Free data that was used by died threads\n        */\n        active_threads = sweep();\n\n        csp_list = (struct client_states *)zalloc(sizeof(*csp_list));\n        if (NULL == csp_list)\n        {\n            log_error(LOG_LEVEL_FATAL, \"malloc(%d) for csp_list failed: %E\", sizeof(*csp_list));\n            continue;\n        }\n        csp = &csp_list->csp;\n\n        log_error(LOG_LEVEL_CONNECT,\n         \"Waiting for the next client connection. Currently active threads: %d\",\n         active_threads);\n\n        if (!accept_connection(csp, bfds))\n        {\n            log_error(LOG_LEVEL_CONNECT, \"accept failed: %E\");\n            freez(csp_list);\n            continue;\n        }\n\n        csp->flags |= CSP_FLAG_ACTIVE;\n        csp->server_connection.sfd = JB_INVALID_SOCKET;\n        csp->config = config;\n\n#ifdef FEATURE_TOGGLE\n      if (global_toggle_state)\n#endif /* def FEATURE_TOGGLE */\n      {\n          csp->flags |= CSP_FLAG_TOGGLED_ON;\n      }\n\n      if (run_loader(csp))\n      {\n          log_error(LOG_LEVEL_FATAL, \"a loader failed - must exit\");\n          /* Never get here - LOG_LEVEL_FATAL causes program exit */\n      }\n\n#ifdef FEATURE_ACL\n      if (block_acl(NULL,csp))\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"Connection from %s on socket %d dropped due to ACL\", csp->ip_addr_str, csp->cfd);\n         close_socket(csp->cfd);\n         freez(csp->ip_addr_str);\n         freez(csp_list);\n         continue;\n      }\n#endif /* def FEATURE_ACL */\n\n      if ((0 < config->max_client_connections)\n         && (active_threads >= config->max_client_connections))\n      {\n         log_error(LOG_LEVEL_CONNECT,\n            \"Rejecting connection from %s. Maximum number of connections reached.\",\n            csp->ip_addr_str);\n         write_socket(csp->cfd, TOO_MANY_CONNECTIONS_RESPONSE,\n            strlen(TOO_MANY_CONNECTIONS_RESPONSE));\n         close_socket(csp->cfd);\n         freez(csp->ip_addr_str);\n         freez(csp_list);\n         continue;\n      }\n\n      /* add it to the list of clients */\n      csp_list->next = clients->next;\n      clients->next = csp_list;\n\n\n      if (config->multi_threaded)\n      {\n         int child_id;\n\n/* this is a switch () statement in the C preprocessor - ugh */\n#undef SELECTED_ONE_OPTION\n\n/* Use Pthreads in preference to native code */\n#if defined(FEATURE_PTHREAD) && !defined(SELECTED_ONE_OPTION)\n#define SELECTED_ONE_OPTION\n         {\n            pthread_t the_thread;\n            pthread_attr_t attrs;\n\n            pthread_attr_init(&attrs);\n            pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);\n            errno = pthread_create(&the_thread, &attrs,\n               (void * (*)(void *))serve, csp);\n            child_id = errno ? -1 : 0;\n            pthread_attr_destroy(&attrs);\n         }\n#endif\n\n#if defined(_WIN32) && !defined(_CYGWIN) && !defined(SELECTED_ONE_OPTION)\n#define SELECTED_ONE_OPTION\n         child_id = _beginthread(\n            (void (*)(void *))serve,\n            64 * 1024,\n            csp);\n#endif\n\n#if defined(__OS2__) && !defined(SELECTED_ONE_OPTION)\n#define SELECTED_ONE_OPTION\n         child_id = _beginthread(\n            (void(* _Optlink)(void*))serve,\n            NULL,\n            64 * 1024,\n            csp);\n#endif\n\n#if defined(__BEOS__) && !defined(SELECTED_ONE_OPTION)\n#define SELECTED_ONE_OPTION\n         {\n            thread_id tid = spawn_thread\n               (server_thread, \"server\", B_NORMAL_PRIORITY, csp);\n\n            if ((tid >= 0) && (resume_thread(tid) == B_OK))\n            {\n               child_id = (int) tid;\n            }\n            else\n            {\n               child_id = -1;\n            }\n         }\n#endif\n\n#if !defined(SELECTED_ONE_OPTION)\n         child_id = fork();\n\n         /* This block is only needed when using fork().\n          * When using threads, the server thread was\n          * created and run by the call to _beginthread().\n          */\n         if (child_id == 0)   /* child */\n         {\n            int rc = 0;\n#ifdef FEATURE_TOGGLE\n            int inherited_toggle_state = global_toggle_state;\n#endif /* def FEATURE_TOGGLE */\n\n            serve(csp);\n\n            /*\n             * If we've been toggled or we've blocked the request, tell Mom\n             */\n\n#ifdef FEATURE_TOGGLE\n            if (inherited_toggle_state != global_toggle_state)\n            {\n               rc |= RC_FLAG_TOGGLED;\n            }\n#endif /* def FEATURE_TOGGLE */\n\n#ifdef FEATURE_STATISTICS\n            if (csp->flags & CSP_FLAG_REJECTED)\n            {\n               rc |= RC_FLAG_BLOCKED;\n            }\n#endif /* ndef FEATURE_STATISTICS */\n\n            _exit(rc);\n         }\n         else if (child_id > 0) /* parent */\n         {\n            /* in a fork()'d environment, the parent's\n             * copy of the client socket and the CSP\n             * are not used.\n             */\n            int child_status;\n#if !defined(_WIN32) && !defined(__CYGWIN__)\n\n            wait(&child_status);\n\n            /*\n             * Evaluate child's return code: If the child has\n             *  - been toggled, toggle ourselves\n             *  - blocked its request, bump up the stats counter\n             */\n\n#ifdef FEATURE_TOGGLE\n            if (WIFEXITED(child_status) && (WEXITSTATUS(child_status) & RC_FLAG_TOGGLED))\n            {\n               global_toggle_state = !global_toggle_state;\n            }\n#endif /* def FEATURE_TOGGLE */\n\n#ifdef FEATURE_STATISTICS\n            urls_read++;\n            if (WIFEXITED(child_status) && (WEXITSTATUS(child_status) & RC_FLAG_BLOCKED))\n            {\n               urls_rejected++;\n            }\n#endif /* def FEATURE_STATISTICS */\n\n#endif /* !defined(_WIN32) && defined(__CYGWIN__) */\n            close_socket(csp->cfd);\n            csp->flags &= ~CSP_FLAG_ACTIVE;\n         }\n#endif\n\n#undef SELECTED_ONE_OPTION\n/* end of cpp switch () */\n\n         if (child_id < 0)\n         {\n            /*\n             * Spawning the child failed, assume it's because\n             * there are too many children running already.\n             * XXX: If you assume ...\n             */\n            log_error(LOG_LEVEL_ERROR,\n               \"Unable to take any additional connections: %E. Active threads: %d\",\n               active_threads);\n            write_socket(csp->cfd, TOO_MANY_CONNECTIONS_RESPONSE,\n               strlen(TOO_MANY_CONNECTIONS_RESPONSE));\n            close_socket(csp->cfd);\n            csp->flags &= ~CSP_FLAG_ACTIVE;\n         }\n      }\n      else\n      {\n         serve(csp);\n      }\n   }\n\n   /* NOTREACHED unless FEATURE_GRACEFUL_TERMINATION is defined */\n\n   /* Clean up.  Aim: free all memory (no leaks) */\n#ifdef FEATURE_GRACEFUL_TERMINATION\n\n   log_error(LOG_LEVEL_ERROR, \"Graceful termination requested\");\n\n   unload_current_config_file();\n   unload_current_actions_file();\n   unload_current_re_filterfile();\n#ifdef FEATURE_TRUST\n   unload_current_trust_file();\n#endif\n\n   if (config->multi_threaded)\n   {\n      int i = 60;\n      do\n      {\n         sleep(1);\n         sweep();\n      } while ((clients->next != NULL) && (--i > 0));\n\n      if (i <= 0)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Graceful termination failed - still some live clients after 1 minute wait.\");\n      }\n   }\n   sweep();\n   sweep();\n\n#if defined(unix)\n   freez(basedir);\n#endif\n\n#if defined(_WIN32) && !defined(_WIN_CONSOLE)\n   /* Cleanup - remove taskbar icon etc. */\n   TermLogWindow();\n#endif\n\n   exit(0);\n#endif /* FEATURE_GRACEFUL_TERMINATION */\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/list.c",
    "content": "const char list_rcs[] = \"$Id: list.c,v 1.32 2014/11/14 10:39:49 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/list.c,v $\n *\n * Purpose     :  Declares functions to handle lists.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2007 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#ifndef _WIN32\n/* FIXME: The following headers are not needed for Win32.  Are they\n * needed on other platforms?\n */\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <ctype.h>\n#endif\n#include <string.h>\n\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif\n\n#include <assert.h>\n\n#include \"project.h\"\n#include \"list.h\"\n#include \"miscutil.h\"\n\nconst char list_h_rcs[] = LIST_H_VERSION;\n\n\nstatic int list_is_valid (const struct list *the_list);\n\n\n/*********************************************************************\n *\n * Function    :  init_list\n *\n * Description :  Create a new, empty list in user-allocated memory.\n *                Caller should allocate a \"struct list\" variable,\n *                then pass it to this function.\n *                (Implementation note:  Rather than calling this\n *                function, you can also just memset the memory to\n *                zero, e.g. if you have a larger structure you\n *                want to initialize quickly.  However, that isn't\n *                really good design.)\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid init_list(struct list *the_list)\n{\n   memset(the_list, '\\0', sizeof(*the_list));\n}\n\n\n/*********************************************************************\n *\n * Function    :  destroy_list\n *\n * Description :  Destroy a string list (opposite of list_init).\n *                On return, the memory used by the list entries has\n *                been freed, but not the memory used by the_list\n *                itself.  You should not re-use the_list without\n *                calling list_init().\n *\n *                (Implementation note:  You *can* reuse the_list\n *                without calling list_init(), but please don't.\n *                If you want to remove all entries from a list\n *                and still have a usable list, then use\n *                list_remove_all().)\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid destroy_list (struct list *the_list)\n{\n   struct list_entry *cur_entry, *next_entry;\n\n   assert(the_list);\n\n   for (cur_entry = the_list->first; cur_entry ; cur_entry = next_entry)\n   {\n      next_entry = cur_entry->next;\n      freez(cur_entry->str);\n      free(cur_entry);\n   }\n\n   the_list->first = NULL;\n   the_list->last = NULL;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_is_valid\n *\n * Description :  Check that a string list is valid.  The intended\n *                usage is \"assert(list_is_valid(the_list))\".\n *                Currently this checks that \"the_list->last\"\n *                is correct, and that the list dosn't contain\n *                circular references.  It is likely to crash if\n *                it's passed complete garbage.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list.  Must be non-null.\n *\n * Returns     :  1 if list is valid, 0 otherwise.\n *\n *********************************************************************/\nstatic int list_is_valid (const struct list *the_list)\n{\n   /*\n    * If you don't want this check, just change the line below\n    * from \"#if 1\" to \"#if 0\".\n    */\n#if 1\n   const struct list_entry *cur_entry;\n   const struct list_entry *last_entry = NULL;\n   int entry = 0;\n\n   assert(the_list);\n\n   for (cur_entry = the_list->first; cur_entry ; cur_entry = cur_entry->next)\n   {\n      last_entry = cur_entry;\n\n      if (cur_entry->str)\n      {\n         /*\n          * Just check that this string can be accessed - i.e. it's a valid\n          * pointer.\n          */\n         (void)strlen(cur_entry->str);\n      }\n\n      /*\n       * Check for looping back to first\n       */\n      if ((entry++ != 0) && (cur_entry == the_list->first))\n      {\n         return 0;\n      }\n\n      /*\n       * Arbitrarily limit list length to prevent infinite loops.\n       * Note that the 1000 limit was hit by a real user in tracker 911950;\n       * removing it for now.  Real circular references should eventually\n       * be caught by the check above, anyway.\n       */\n      /*\n      if (entry > 1000)\n      {\n         return 0;\n      }\n      */\n\n      /*\n       * Check this isn't marked as the last entry, unless of course it's\n       * *really* the last entry.\n       */\n      if ((the_list->last == cur_entry) && (cur_entry->next != NULL))\n      {\n         /* This is the last entry, but there's data after it !!?? */\n         return 0;\n      }\n   }\n\n   return (the_list->last == last_entry);\n#else\n   return 1;\n#endif\n}\n\n/*********************************************************************\n *\n * Function    :  enlist\n *\n * Description :  Append a string into a specified string list.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *          2  :  str = string to add to the list (maybe NULL)\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, the_list will be unchanged.\n *\n *********************************************************************/\njb_err enlist(struct list *the_list, const char *str)\n{\n   struct list_entry *cur;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n\n   if (NULL == (cur = (struct list_entry *)zalloc(sizeof(*cur))))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (str)\n   {\n      if (NULL == (cur->str = strdup(str)))\n      {\n         free(cur);\n         return JB_ERR_MEMORY;\n      }\n   }\n   /* else { cur->str = NULL; }  - implied by zalloc */\n\n   /* cur->next = NULL;  - implied by zalloc */\n\n   if (the_list->last)\n   {\n      the_list->last->next = cur;\n      the_list->last = cur;\n   }\n   else\n   {\n      the_list->first = cur;\n      the_list->last = cur;\n   }\n\n   assert(list_is_valid(the_list));\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  enlist_first\n *\n * Description :  Append a string as first element into a specified\n *                string list.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *          2  :  str = string to add to the list (maybe NULL)\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, the_list will be unchanged.\n *\n *********************************************************************/\njb_err enlist_first(struct list *the_list, const char *str)\n{\n   struct list_entry *cur;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n\n   if (NULL == (cur = (struct list_entry *)zalloc(sizeof(*cur))))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (str)\n   {\n      if (NULL == (cur->str = strdup(str)))\n      {\n         free(cur);\n         return JB_ERR_MEMORY;\n      }\n   }\n   /* else { cur->str = NULL; }  - implied by zalloc */\n\n   cur->next = the_list->first;\n\n   the_list->first = cur;\n   if (the_list->last == NULL)\n   {\n      the_list->last = cur;\n   }\n\n   assert(list_is_valid(the_list));\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  enlist_unique\n *\n * Description :  Append a string into a specified string list,\n *                if & only if it's not there already.\n *                If the num_significant_chars argument is nonzero,\n *                only compare up to the nth character.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *          2  :  str = string to add to the list\n *          3  :  num_significant_chars = number of chars to use\n *                for uniqueness test, or 0 to require an exact match.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, the_list will be unchanged.\n *                \"Success\" does not indicate whether or not the\n *                item was already in the list.\n *\n *********************************************************************/\njb_err enlist_unique(struct list *the_list, const char *str,\n                     size_t num_significant_chars)\n{\n   struct list_entry *cur_entry;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n   assert(str);\n   assert(num_significant_chars >= 0);\n   assert(num_significant_chars <= strlen(str));\n\n   if (num_significant_chars > 0)\n   {\n      for (cur_entry = the_list->first; cur_entry != NULL; cur_entry = cur_entry->next)\n      {\n         if ((cur_entry->str != NULL)\n           && (0 == strncmp(str, cur_entry->str, num_significant_chars)))\n         {\n            /* Already there */\n            return JB_ERR_OK;\n         }\n      }\n   }\n   else\n   {\n      /* Test whole string */\n      for (cur_entry = the_list->first; cur_entry != NULL; cur_entry = cur_entry->next)\n      {\n         if ((cur_entry->str != NULL) && (0 == strcmp(str, cur_entry->str)))\n         {\n            /* Already there */\n            return JB_ERR_OK;\n         }\n      }\n   }\n\n   return enlist(the_list, str);\n}\n\n\n/*********************************************************************\n *\n * Function    :  enlist_unique_header\n *\n * Description :  Make a HTTP header from the two strings name and value,\n *                and append the result into a specified string list,\n *                if & only if there isn't already a header with that name.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *          2  :  name = HTTP header name (e.g. \"Content-type\")\n *          3  :  value = HTTP header value (e.g. \"text/html\")\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, the_list will be unchanged.\n *                \"Success\" does not indicate whether or not the\n *                header was already in the list.\n *\n *********************************************************************/\njb_err enlist_unique_header(struct list *the_list, const char *name,\n                            const char *value)\n{\n   jb_err result = JB_ERR_MEMORY;\n   char *header;\n   size_t header_size;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n   assert(name);\n   assert(value);\n\n   /* + 2 for the ': ', + 1 for the \\0 */\n   header_size = strlen(name) + 2 + strlen(value) + 1;\n   header = (char *)malloc(header_size);\n\n   if (NULL != header)\n   {\n      const size_t bytes_to_compare = strlen(name) + 2;\n      char *p = header;\n\n      snprintf(header, header_size, \"%s: %s\", name, value);\n      /*\n       * The trailing \"\\r\\n\" is added by list_to_text(),\n       * if the caller passed them anyway, cut the header\n       * at the first one or dump core if this is a debug\n       * build.\n       */\n      do\n      {\n         if ((*p == '\\r') || (*p == '\\n'))\n         {\n            assert(*p != '\\r');\n            assert(*p != '\\n');\n            *p = '\\0';\n         }\n      } while (*p++);\n      result = enlist_unique(the_list, header, bytes_to_compare);\n      free(header);\n      assert(list_is_valid(the_list));\n   }\n\n   return result;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_remove_all\n *\n * Description :  Remove all entries from a list.  On return, the_list\n *                is a valid, empty list.  Note that this is similar\n *                to destroy_list(), but the difference is that this\n *                function guarantees that the list structure is still\n *                valid after the call.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid list_remove_all(struct list *the_list)\n{\n   struct list_entry *cur_entry;\n   struct list_entry *next_entry;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n\n   for (cur_entry = the_list->first; cur_entry ; cur_entry = next_entry)\n   {\n      next_entry = cur_entry->next;\n      freez(cur_entry->str);\n      free(cur_entry);\n   }\n\n   the_list->first = the_list->last = NULL;\n\n   assert(list_is_valid(the_list));\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_to_text\n *\n * Description :  \"Flatten\" a string list into 1 long \\r\\n delimited string,\n *                adding an empty line at the end.  NULL entries are ignored.\n *                This function does not change the_list.\n *\n *                XXX: Should probably be renamed as it's only\n *                useful (and used) to flatten header lists.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *\n * Returns     :  NULL on malloc error, else new long string.\n *                Caller must free() it.\n *\n *********************************************************************/\nchar *list_to_text(const struct list *the_list)\n{\n   struct list_entry *cur_entry;\n   char *text;\n   size_t text_length;\n   char *cursor;\n   size_t bytes_left;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n\n   /*\n    * Calculate the length of the final text.\n    * '2' because of the '\\r\\n' at the end of\n    * each string and at the end of the text.\n    */\n   text_length = 2;\n   for (cur_entry = the_list->first; cur_entry; cur_entry = cur_entry->next)\n   {\n      if (cur_entry->str)\n      {\n         text_length += strlen(cur_entry->str) + 2;\n      }\n   }\n\n   bytes_left = text_length + 1;\n\n   text = (char *)malloc(bytes_left);\n   if (NULL == text)\n   {\n      return NULL;\n   }\n\n   cursor = text;\n\n   for (cur_entry = the_list->first; cur_entry; cur_entry = cur_entry->next)\n   {\n      if (cur_entry->str)\n      {\n         const int written = snprintf(cursor, bytes_left, \"%s\\r\\n\", cur_entry->str);\n\n         assert(written > 0);\n         assert(written < bytes_left);\n\n         bytes_left -= (size_t)written;\n         cursor += (size_t)written;\n      }\n   }\n\n   assert(bytes_left == 3);\n\n   *cursor++ = '\\r';\n   *cursor++ = '\\n';\n   *cursor   = '\\0';\n\n   assert(text_length == cursor - text);\n   assert(text[text_length] == '\\0');\n\n   return text;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_remove_item\n *\n * Description :  Remove a string from a specified string list.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list\n *          2  :  str = string to remove from the list - non-NULL\n *\n * Returns     :  Number of times it was removed.\n *\n *********************************************************************/\nint list_remove_item(struct list *the_list, const char *str)\n{\n   struct list_entry *prev = NULL;\n   struct list_entry *cur;\n   struct list_entry *next;\n   int count = 0;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n   assert(str);\n\n   cur = the_list->first;\n\n   while (cur != NULL)\n   {\n      next = cur->next;\n\n      if ((cur->str != NULL) && (0 == strcmp(str, cur->str)))\n      {\n         count++;\n\n         if (prev != NULL)\n         {\n            prev->next = next;\n         }\n         else\n         {\n            the_list->first = next;\n         }\n         free((char *)cur->str);\n         free(cur);\n      }\n      else\n      {\n         prev = cur;\n      }\n      cur = next;\n   }\n\n   the_list->last = prev;\n\n   assert(list_is_valid(the_list));\n\n   return count;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_remove_list\n *\n * Description :  Remove all strings in one list from another list.\n *                This is currently a brute-force algorithm\n *                (it compares every pair of strings).\n *\n * Parameters  :\n *          1  :  dest = list to change\n *          2  :  src = list of strings to remove\n *\n * Returns     :  Total number of strings removed.\n *\n *********************************************************************/\nint list_remove_list(struct list *dest, const struct list *src)\n{\n   struct list_entry *cur;\n   int count = 0;\n\n   assert(src);\n   assert(dest);\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   for (cur = src->first; cur != NULL; cur = cur->next)\n   {\n      if (cur->str != NULL)\n      {\n         count += list_remove_item(dest, cur->str);\n      }\n   }\n\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   return count;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_duplicate\n *\n * Description :  Copy a string list\n *\n * Parameters  :\n *          1  :  dest = Destination list.  Must be a valid list.\n *                       All existing entries will be removed.\n *          1  :  src = pointer to source list for copy.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, dest will be empty.\n *\n *********************************************************************/\njb_err list_duplicate(struct list *dest, const struct list *src)\n{\n   struct list_entry * cur_src;\n   struct list_entry * cur_dest;\n\n   assert(src);\n   assert(dest);\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   list_remove_all(dest);\n\n   /* Need to process first entry specially so we can set dest->first */\n   cur_src = src->first;\n   if (cur_src)\n   {\n      cur_dest = dest->first = (struct list_entry *)zalloc(sizeof(*cur_dest));\n      if (cur_dest == NULL)\n      {\n         destroy_list(dest);\n\n         assert(list_is_valid(src));\n         assert(list_is_valid(dest));\n\n         return JB_ERR_MEMORY;\n      }\n\n      if (cur_src->str)\n      {\n         cur_dest->str = strdup(cur_src->str);\n         if (cur_dest->str == NULL)\n         {\n            destroy_list(dest);\n\n            assert(list_is_valid(src));\n            assert(list_is_valid(dest));\n\n            return JB_ERR_MEMORY;\n         }\n      }\n      /* else { cur_dest->str = NULL; }  - implied by zalloc */\n\n      /* Now process the rest */\n      for (cur_src = cur_src->next; cur_src; cur_src = cur_src->next)\n      {\n         cur_dest = cur_dest->next = (struct list_entry *)zalloc(sizeof(*cur_dest));\n         if (cur_dest == NULL)\n         {\n            destroy_list(dest);\n\n            assert(list_is_valid(src));\n            assert(list_is_valid(dest));\n\n            return JB_ERR_MEMORY;\n         }\n         if (cur_src->str)\n         {\n            cur_dest->str = strdup(cur_src->str);\n            if (cur_dest->str == NULL)\n            {\n               destroy_list(dest);\n\n               assert(list_is_valid(src));\n               assert(list_is_valid(dest));\n\n               return JB_ERR_MEMORY;\n            }\n         }\n         /* else { cur_dest->str = NULL; }  - implied by zalloc */\n      }\n\n      dest->last = cur_dest;\n   }\n\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_append_list_unique\n *\n * Description :  Append a string list to another list.\n *                Duplicate items are not added.\n *\n * Parameters  :\n *          1  :  dest = pointer to destination list for merge.\n *          2  :  src = pointer to source for merge.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *                On error, some (but not all) of src might have\n *                been copied into dest.\n *\n *********************************************************************/\njb_err list_append_list_unique(struct list *dest, const struct list *src)\n{\n   struct list_entry * cur;\n\n   assert(src);\n   assert(dest);\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   for (cur = src->first; cur; cur = cur->next)\n   {\n      if (cur->str)\n      {\n         if (enlist_unique(dest, cur->str, 0))\n         {\n            assert(list_is_valid(src));\n            assert(list_is_valid(dest));\n\n            return JB_ERR_MEMORY;\n         }\n      }\n   }\n\n   assert(list_is_valid(src));\n   assert(list_is_valid(dest));\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_is_empty\n *\n * Description :  Test whether a list is empty.  Does not change the list.\n *\n * Parameters  :\n *          1  :  the_list = pointer to list to test.\n *\n * Returns     :  Nonzero if the list contains no entries.\n *\n *********************************************************************/\nint list_is_empty(const struct list *the_list)\n{\n   assert(the_list);\n   assert(list_is_valid(the_list));\n\n   return (the_list->first == NULL);\n}\n\n\n/*********************************************************************\n *\n * Function    :  list_contains_item\n *\n * Description :  Tests whether a list item is already set.\n *                Does not change the list.\n *\n * Parameters  :\n *          1  :  the_list = list to search in\n *          2  :  str = string to search for\n *\n * Returns     :  TRUE if the item was found,\n *                FALSE otherwise.\n *\n *********************************************************************/\nint list_contains_item(const struct list *the_list, const char *str)\n{\n   struct list_entry *entry;\n\n   assert(the_list);\n   assert(list_is_valid(the_list));\n   assert(str);\n\n   for (entry = the_list->first; entry != NULL; entry = entry->next)\n   {\n      if (entry->str == NULL)\n      {\n         /*\n          * NULL pointers are allowed in some lists.\n          * For example for csp->headers in case a\n          * header was removed.\n          */\n         continue;\n      }\n\n      if (0 == strcmp(str, entry->str))\n      {\n         /* Item found */\n         return TRUE;\n      }\n   }\n\n   return FALSE;\n}\n\n\n/*********************************************************************\n *\n * Function    :  new_map\n *\n * Description :  Create a new, empty map.\n *                Causes program exit if the memory allocation fails.\n *\n * Parameters  :  N/A\n *\n * Returns     :  A new, empty map\n *\n *********************************************************************/\nstruct map *new_map(void)\n{\n   struct map *empty_map = zalloc(sizeof(struct map));\n\n   if (NULL == empty_map)\n   {\n      exit(1);\n   }\n\n   return empty_map;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_map\n *\n * Description :  Free the memory occupied by a map and its\n *                dependent strings\n *\n * Parameters  :\n *          1  :  the_map = map to be freed.  May be NULL.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_map(struct map *the_map)\n{\n   struct map_entry *cur_entry;\n   struct map_entry *next_entry;\n\n   if (the_map == NULL)\n   {\n      return;\n   }\n\n   for (cur_entry = the_map->first; cur_entry != NULL; cur_entry = next_entry)\n   {\n      freez(cur_entry->name);\n      freez(cur_entry->value);\n\n      next_entry = cur_entry->next;\n      free(cur_entry);\n   }\n\n   the_map->first = the_map->last = NULL;\n\n   free(the_map);\n}\n\n\n/*********************************************************************\n *\n * Function    :  map\n *\n * Description :  Add a mapping from given name to given value to a\n *                given map.\n *\n *                Note: Since all strings will be free()d in free_map()\n *                      later, set the copy flags for constants or\n *                      strings that will be independently free()d.\n *\n *                Note2: This function allows NULL parameters - it\n *                       returns JB_ERR_MEMORY in that case.\n *\n *                Note3: If this function returns JB_ERR_MEMORY,\n *                       it will free(name) unless you specify\n *                       name_needs_copying, and similarly it will\n *                       free(value) unless you specify\n *                       value_needs_copying.\n *\n *                Due to Note2 and Note3 above, the following code\n *                is legal, and will never crash or leak memory even\n *                if the system runs out of memory:\n *\n *                    err = map(mymap, \"xyz\", 1, html_encode(somestring), 0);\n *\n *                err will be set to JB_ERR_MEMORY if either call runs\n *                out-of-memory.  Without these features, you would\n *                need to check the return value of html_encode in the\n *                above example for NULL, which (at least) doubles the\n *                amount of error-checking code needed.\n *\n * Parameters  :\n *          1  :  the_map = map to add to\n *          2  :  name = name to add\n *          3  :  name_needs_copying = flag set if a copy of name should be used\n *          4  :  value = value to add\n *          5  :  value_needs_copying = flag set if a copy of value should be used\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err map(struct map *the_map,\n           const char *name, int name_needs_copying,\n           const char *value, int value_needs_copying)\n{\n   struct map_entry *new_entry;\n\n   assert(the_map);\n\n   if ( (NULL == value)\n     || (NULL == name)\n     || (NULL == (new_entry = zalloc(sizeof(*new_entry)))))\n   {\n      if ((name != NULL) && (!name_needs_copying))\n      {\n          free((char *)name);\n      }\n      if ((value != NULL) && (!value_needs_copying))\n      {\n          free((char *)value);\n      }\n      return JB_ERR_MEMORY;\n   }\n\n   if (name_needs_copying)\n   {\n      if (NULL == (name = strdup(name)))\n      {\n         free(new_entry);\n         if (!value_needs_copying)\n         {\n             free((char *)value);\n         }\n         return JB_ERR_MEMORY;\n      }\n   }\n\n   if (value_needs_copying)\n   {\n      if (NULL == (value = strdup(value)))\n      {\n         free((char *)name);\n         free(new_entry);\n         return JB_ERR_MEMORY;\n      }\n   }\n\n   new_entry->name = name;\n   new_entry->value = value;\n   /* new_entry->next = NULL;  - implied by zalloc */\n\n   if (the_map->last)\n   {\n      the_map->last->next = new_entry;\n      the_map->last = new_entry;\n   }\n   else\n   {\n      the_map->first = new_entry;\n      the_map->last = new_entry;\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  unmap\n *\n * Description :  Remove all map_entry structs with a given name from\n *                a given map.\n *\n * Parameters  :\n *          1  :  the_map = map to look in\n *          2  :  name = name to unmap\n *\n * Returns     :  JB_ERR_OK\n *\n *********************************************************************/\njb_err unmap(struct map *the_map, const char *name)\n{\n   struct map_entry *cur_entry, *last_entry;\n\n   assert(the_map);\n   assert(name);\n\n   last_entry = NULL;\n\n   for (cur_entry = the_map->first; cur_entry != NULL; cur_entry = cur_entry->next)\n   {\n      if (!strcmp(name, cur_entry->name))\n      {\n         /*\n          * Update the incoming pointer\n          */\n         if (cur_entry == the_map->first)\n         {\n            the_map->first = cur_entry->next;\n         }\n         else\n         {\n            last_entry->next = cur_entry->next;\n         }\n\n         /*\n          * Update the map's last pointer\n          */\n         if (cur_entry == the_map->last)\n         {\n            the_map->last = last_entry;\n         }\n\n         /*\n          * Free the map_entry\n          */\n         freez(cur_entry->name);\n         freez(cur_entry->value);\n         freez(cur_entry);\n         if (last_entry == NULL)\n         {\n            /* The map only had a single entry which has just been removed. */\n            break;\n         }\n         cur_entry = last_entry;\n      }\n      else\n      {\n         last_entry = cur_entry;\n      }\n   }\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  lookup\n *\n * Description :  Look up an item with a given name in a map, and\n *                return its value\n *\n * Parameters  :\n *          1  :  the_map = map to look in\n *          2  :  name = name parameter to look for\n *\n * Returns     :  the value if found, else the empty string.\n *                Return value is alloced as part of the map, so\n *                it is freed when the map is destroyed.  Caller\n *                must not free or modify it.\n *\n *********************************************************************/\nconst char *lookup(const struct map *the_map, const char *name)\n{\n   const struct map_entry *cur_entry;\n\n   assert(the_map);\n   assert(name);\n\n   for (cur_entry = the_map->first; cur_entry != NULL; cur_entry = cur_entry->next)\n   {\n      if (!strcmp(name, cur_entry->name))\n      {\n         return cur_entry->value;\n      }\n   }\n   return \"\";\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/list.h",
    "content": "#ifndef LIST_H_INCLUDED\n#define LIST_H_INCLUDED\n#define LIST_H_VERSION \"$Id: list.h,v 1.19 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/list.h,v $\n *\n * Purpose     :  Declares functions to handle lists.\n *                Functions declared include:\n *                   `destroy_list', `enlist' and `list_to_text'\n *\n * Copyright   :  Written by and Copyright (C) 2001-2007 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\n/*\n * struct list\n *\n * A linked list class.\n */\n\nextern void init_list    (struct list *the_list);\nextern void destroy_list (struct list *the_list);\n\nextern jb_err enlist                 (struct list *the_list, const char *str);\nextern jb_err enlist_unique          (struct list *the_list, const char *str, size_t num_significant_chars);\nextern jb_err enlist_unique_header   (struct list *the_list, const char *name, const char *value);\nextern jb_err enlist_first           (struct list *the_list, const char *str);\nextern jb_err list_append_list_unique(struct list *dest,     const struct list *src);\nextern jb_err list_duplicate         (struct list *dest,     const struct list *src);\n\nextern int    list_remove_item(struct list *the_list, const char *str);\nextern int    list_remove_list(struct list *dest,     const struct list *src);\nextern void   list_remove_all (struct list *the_list);\n\nextern int    list_is_empty(const struct list *the_list);\n\nextern char * list_to_text(const struct list *the_list);\n\nextern int    list_contains_item(const struct list *the_list, const char *str);\n\n/*\n * struct map\n *\n * A class which maps names to values.\n *\n * Note: You must allocate this through new_map() and free it\n * through free_map().\n */\n\nextern struct map * new_map  (void);\nextern void         free_map (struct map * the_map);\n\nextern jb_err       map      (struct map * the_map,\n                              const char * name, int name_needs_copying,\n                              const char * value, int value_needs_copying);\nextern jb_err       unmap    (struct map *the_map,\n                              const char *name);\nextern const char * lookup   (const struct map * the_map, const char * name);\n\n\n/* Revision control strings from this header and associated .c file */\nextern const char list_rcs[];\nextern const char list_h_rcs[];\n\n#endif /* ndef LIST_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/loadcfg.c",
    "content": "const char loadcfg_rcs[] = \"$Id: loadcfg.c,v 1.145 2016/01/16 12:33:36 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.c,v $\n *\n * Purpose     :  Loads settings from the configuration file into\n *                global variables.  This file contains both the\n *                routine to load the configuration and the global\n *                variables it writes to.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include <fcntl.h>\n#include <errno.h>\n#include <ctype.h>\n#include <assert.h>\n\n#ifdef _WIN32\n\n# ifndef STRICT\n#  define STRICT\n# endif\n# include <windows.h>\n\n# include \"win32.h\"\n# ifndef _WIN_CONSOLE\n#  include \"w32log.h\"\n# endif /* ndef _WIN_CONSOLE */\n\n#else /* ifndef _WIN32 */\n\n#ifndef __OS2__\n# include <unistd.h>\n# include <sys/wait.h>\n#endif\n# include <sys/time.h>\n# include <sys/stat.h>\n# include <signal.h>\n\n#endif\n\n#include \"project.h\"\n#include \"loadcfg.h\"\n#include \"list.h\"\n#include \"jcc.h\"\n#include \"filters.h\"\n#include \"loaders.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"ssplit.h\"\n#include \"encode.h\"\n#include \"urlmatch.h\"\n#include \"cgi.h\"\n#include \"gateway.h\"\n\nconst char loadcfg_h_rcs[] = LOADCFG_H_VERSION;\n\n#ifdef FEATURE_TOGGLE\n/* Privoxy is enabled by default. */\nint global_toggle_state = 1;\n#endif /* def FEATURE_TOGGLE */\n\n/* The filename of the configfile */\nconst char *configfile  = NULL;\n\nstatic struct file_list *current_configfile = NULL;\n\nint global_mode = 0;\n\n\n/*\n * This takes the \"cryptic\" hash of each keyword and aliases them to\n * something a little more readable.  This also makes changing the\n * hash values easier if they should change or the hash algorthm changes.\n * Use the included \"hash\" program to find out what the hash will be\n * for any string supplied on the command line.  (Or just put it in the\n * config file and read the number from the error message in the log).\n *\n * Please keep this list sorted alphabetically (but with the Windows\n * console and GUI specific options last).\n */\n\n#define hash_actions_file                1196306641U /* \"actionsfile\" */\n#define hash_accept_intercepted_requests 1513024973U /* \"accept-intercepted-requests\" */\n#define hash_admin_address               4112573064U /* \"admin-address\" */\n#define hash_allow_cgi_request_crunching  258915987U /* \"allow-cgi-request-crunching\" */\n#define hash_buffer_limit                1881726070U /* \"buffer-limit */\n#define hash_client_header_order         2701453514U /* \"client-header-order\" */\n#define hash_compression_level           2464423563U /* \"compression-level\" */\n#define hash_confdir                        1978389U /* \"confdir\" */\n#define hash_mmdbpath                      10609609U /* \"mmdbpath\" */\n#define hash_connection_sharing          1348841265U /* \"connection-sharing\" */\n#define hash_debug                            78263U /* \"debug\" */\n#define hash_default_server_timeout      2530089913U /* \"default-server-timeout\" */\n#define hash_deny_access                 1227333715U /* \"deny-access\" */\n#define hash_enable_edit_actions         2517097536U /* \"enable-edit-actions\" */\n#define hash_enable_compression          3943696946U /* \"enable-compression\" */\n#define hash_enable_proxy_authentication_forwarding 4040610791U /* enable-proxy-authentication-forwarding */\n#define hash_enable_remote_toggle        2979744683U /* \"enable-remote-toggle\" */\n#define hash_enable_remote_http_toggle    110543988U /* \"enable-remote-http-toggle\" */\n#define hash_enforce_blocks              1862427469U /* \"enforce-blocks\" */\n#define hash_filterfile                   250887266U /* \"filterfile\" */\n#define hash_forward                        2029845U /* \"forward\" */\n#define hash_forward_socks4              3963965521U /* \"forward-socks4\" */\n#define hash_forward_socks4a             2639958518U /* \"forward-socks4a\" */\n#define hash_forward_socks5              3963965522U /* \"forward-socks5\" */\n#define hash_forward_socks5t             2639958542U /* \"forward-socks5t\" */\n#define hash_global_mode                 1269710751U /* \"global_mode\" */\n#define hash_default_route_socks4         669642605U /* \"default_to_proxy\" */\n#define hash_default_route_socks4a        3348213122U /* \"default_to_proxy\" */\n#define hash_default_route_socks5         669642606U /* \"default_to_proxy\" */\n#define hash_default_route_socks5t        3348213146U /* \"default_to_proxy\" */\n#define hash_forwarded_connect_retries    101465292U /* \"forwarded-connect-retries\" */\n#define hash_handle_as_empty_returns_ok  1444873247U /* \"handle-as-empty-doc-returns-ok\" */\n#define hash_hostname                      10308071U /* \"hostname\" */\n#define hash_keep_alive_timeout          3878599515U /* \"keep-alive-timeout\" */\n#define hash_listen_address              1255650842U /* \"listen-address\" */\n#define hash_logdir                          422889U /* \"logdir\" */\n#define hash_logfile                        2114766U /* \"logfile\" */\n#define hash_max_client_connections      3595884446U /* \"max-client-connections\" */\n#define hash_permit_access               3587953268U /* \"permit-access\" */\n#define hash_proxy_info_url              3903079059U /* \"proxy-info-url\" */\n#define hash_single_threaded             4250084780U /* \"single-threaded\" */\n#define hash_socket_timeout              1809001761U /* \"socket-timeout\" */\n#define hash_split_large_cgi_forms        671658948U /* \"split-large-cgi-forms\" */\n#define hash_suppress_blocklists         1948693308U /* \"suppress-blocklists\" */\n#define hash_templdir                      11067889U /* \"templdir\" */\n#define hash_temporary_directory         1824125181U /* \"temporary-directory\" */\n#define hash_tolerate_pipelining         1360286620U /* \"tolerate-pipelining\" */\n#define hash_toggle                          447966U /* \"toggle\" */\n#define hash_trust_info_url               430331967U /* \"trust-info-url\" */\n#define hash_trustfile                     56494766U /* \"trustfile\" */\n#define hash_usermanual                  1416668518U /* \"user-manual\" */\n#define hash_activity_animation          1817904738U /* \"activity-animation\" */\n#define hash_close_button_minimizes      3651284693U /* \"close-button-minimizes\" */\n#define hash_hide_console                2048809870U /* \"hide-console\" */\n#define hash_log_buffer_size             2918070425U /* \"log-buffer-size\" */\n#define hash_log_font_name               2866730124U /* \"log-font-name\" */\n#define hash_log_font_size               2866731014U /* \"log-font-size\" */\n#define hash_log_highlight_messages      4032101240U /* \"log-highlight-messages\" */\n#define hash_log_max_lines               2868344173U /* \"log-max-lines\" */\n#define hash_log_messages                2291744899U /* \"log-messages\" */\n#define hash_show_on_task_bar             215410365U /* \"show-on-task-bar\" */\n\n\nstatic void savearg(char *command, char *argument, struct configuration_spec * config);\n\n/*********************************************************************\n *\n * Function    :  unload_configfile\n *\n * Description :  Free the config structure and all components.\n *\n * Parameters  :\n *          1  :  data: struct configuration_spec to unload\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void unload_configfile (void * data)\n{\n   struct configuration_spec * config = (struct configuration_spec *)data;\n   struct forward_spec *cur_fwd = config->forward;\n   int i;\n\n#ifdef FEATURE_ACL\n   struct access_control_list *cur_acl = config->acl;\n\n   while (cur_acl != NULL)\n   {\n      struct access_control_list * next_acl = cur_acl->next;\n      free(cur_acl);\n      cur_acl = next_acl;\n   }\n   config->acl = NULL;\n#endif /* def FEATURE_ACL */\n\n   while (cur_fwd != NULL)\n   {\n      struct forward_spec * next_fwd = cur_fwd->next;\n      free_pattern_spec(cur_fwd->url);\n\n      freez(cur_fwd->gateway_host);\n      freez(cur_fwd->forward_host);\n      free(cur_fwd);\n      cur_fwd = next_fwd;\n   }\n   config->forward = NULL;\n\n   freez(config->confdir);\n   freez(config->logdir);\n   freez(config->templdir);\n   freez(config->hostname);\n    freez(config->mmdbpath);\n#ifdef FEATURE_EXTERNAL_FILTERS\n   freez(config->temporary_directory);\n#endif\n\n   for (i = 0; i < MAX_LISTENING_SOCKETS; i++)\n   {\n      freez(config->haddr[i]);\n   }\n   freez(config->logfile);\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      freez(config->actions_file_short[i]);\n      freez(config->actions_file[i]);\n      freez(config->re_filterfile_short[i]);\n      freez(config->re_filterfile[i]);\n   }\n\n   list_remove_all(config->ordered_client_headers);\n\n   freez(config->admin_address);\n   freez(config->proxy_info_url);\n   freez(config->proxy_args);\n   freez(config->usermanual);\n\n#ifdef FEATURE_TRUST\n   freez(config->trustfile);\n   list_remove_all(config->trust_info);\n#endif /* def FEATURE_TRUST */\n\n   freez(config);\n}\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n/*********************************************************************\n *\n * Function    :  unload_current_config_file\n *\n * Description :  Unloads current config file - reset to state at\n *                beginning of program.\n *\n * Parameters  :  None\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_current_config_file(void)\n{\n   if (current_configfile)\n   {\n      current_configfile->unloader = unload_configfile;\n      current_configfile = NULL;\n   }\n}\n#endif\n\n\n/*********************************************************************\n *\n * Function    :  parse_numeric_value\n *\n * Description :  Parse the value of a directive that can only have\n *                a single numeric value. Terminates with a fatal error\n *                if the value is NULL or not numeric.\n *\n * Parameters  :\n *          1  :  name:  The name of the directive. Used for log messages.\n *          2  :  value: The value to parse\n *\n *\n * Returns     :  The numerical value as integer\n *\n *********************************************************************/\nstatic int parse_numeric_value(const char *name, const char *value)\n{\n   int number;\n   char *endptr;\n\n   assert(name != NULL);\n   assert(value != NULL);\n\n   if ((value == NULL) || (*value == '\\0'))\n   {\n      log_error(LOG_LEVEL_FATAL, \"Directive %s used without argument\", name);\n   }\n\n   number = (int)strtol(value, &endptr, 0);\n   if (*endptr != '\\0')\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Directive '%s' used with non-numerical value: '%s'\", name, value);\n   }\n\n   return number;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_toggle_value\n *\n * Description :  Parse the value of a directive that can only be\n *                enabled or disabled. Terminates with a fatal error\n *                if the value is NULL or something other than 0 or 1.\n *\n * Parameters  :\n *          1  :  name:  The name of the directive. Used for log messages.\n *          2  :  value: The value to parse\n *\n *\n * Returns     :  The numerical toggle state\n *\n *********************************************************************/\nstatic int parse_toggle_state(const char *name, const char *value)\n{\n   int toggle_state;\n   assert(name != NULL);\n   assert(value != NULL);\n\n   if ((value == NULL) || (*value == '\\0'))\n   {\n      log_error(LOG_LEVEL_FATAL, \"Directive %s used without argument\", name);\n   }\n\n   toggle_state = atoi(value);\n\n   /*\n    * Also check the length as atoi() doesn't mind\n    * garbage after a valid integer, but we do.\n    */\n   if (((toggle_state != 0) && (toggle_state != 1)) || (strlen(value) != 1))\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Directive %s used with invalid argument '%s'. Use either '0' or '1'.\",\n         name, value);\n   }\n\n   return toggle_state;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_client_header_order\n *\n * Description :  Parse the value of the header-order directive\n *\n * Parameters  :\n *          1  :  ordered_header_list:  List to insert the ordered\n *                                      headers into.\n *          2  :  ordered_headers:  The ordered header names separated\n *                                  by spaces or tabs.\n *\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void parse_client_header_order(struct list *ordered_header_list, const char *ordered_headers)\n{\n   char *original_headers_copy;\n   char **vector;\n   size_t max_segments;\n   int number_of_headers;\n   int i;\n\n   assert(ordered_header_list != NULL);\n   assert(ordered_headers != NULL);\n\n   if (ordered_headers == NULL)\n   {\n      log_error(LOG_LEVEL_FATAL, \"header-order used without argument\");\n   }\n\n   /*\n    * XXX: This estimate is guaranteed to be high enough as we\n    *      let ssplit() ignore empty fields, but also a bit wasteful.\n    *      The same hack is used in get_last_url() so it looks like\n    *      a real solution is needed.\n    */\n   max_segments = strlen(ordered_headers) / 2;\n   if (max_segments == 0)\n   {\n      max_segments = 1;\n   }\n   vector = malloc_or_die(max_segments * sizeof(char *));\n\n   original_headers_copy = strdup_or_die(ordered_headers);\n\n   number_of_headers = ssplit(original_headers_copy, \"\\t \", vector, max_segments);\n   if (number_of_headers == -1)\n   {\n      log_error(LOG_LEVEL_FATAL, \"Failed to split ordered headers\");\n   }\n\n   for (i = 0; i < number_of_headers; i++)\n   {\n      if (JB_ERR_OK != enlist(ordered_header_list, vector[i]))\n      {\n         log_error(LOG_LEVEL_FATAL,\n            \"Failed to enlist ordered header: %s\", vector[i]);\n      }\n   }\n\n   freez(vector);\n   freez(original_headers_copy);\n\n   return;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  load_config\n *\n * Description :  Load the config file and all parameters.\n *\n *                XXX: more than thousand lines long\n *                and thus in serious need of refactoring.\n *\n * Parameters  :  None\n *\n * Returns     :  The configuration_spec, or NULL on error.\n *\n *********************************************************************/\nstruct configuration_spec * load_config(void)\n{\n   char *buf = NULL;\n   char *p, *q;\n   FILE *configfp = NULL;\n   struct configuration_spec * config = NULL;\n   struct client_state * fake_csp;\n   struct file_list *fs;\n   unsigned long linenum = 0;\n   int i;\n   char *logfile = NULL;\n\n//    if (current_configfile) {\n//        return ((struct configuration_spec *)current_configfile->f);\n//    }\n   if (!check_file_changed(current_configfile, configfile, &fs))\n   {\n      /* No need to load */\n      return ((struct configuration_spec *)current_configfile->f);\n   }\n   if (NULL == fs)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"can't check configuration file '%s':  %E\", configfile);\n      return NULL;\n   }\n\n   if (NULL != current_configfile)\n   {\n      log_error(LOG_LEVEL_INFO, \"Reloading configuration file '%s'\", configfile);\n   }\n\n#ifdef FEATURE_TOGGLE\n   global_toggle_state = 1;\n#endif /* def FEATURE_TOGGLE */\n\n   fs->f = config = (struct configuration_spec *)zalloc(sizeof(*config));\n\n   if (NULL == config)\n   {\n      freez(fs->filename);\n      freez(fs);\n      log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n      return NULL;\n   }\n\n   /*\n    * This is backwards from how it's usually done.\n    * Following the usual pattern, \"fs\" would be stored in a member\n    * variable in \"csp\", and then we'd access \"config\" from \"fs->f\",\n    * using a cast.  However, \"config\" is used so often that a\n    * cast each time would be very ugly, and the extra indirection\n    * would waste CPU cycles.  Therefore we store \"config\" in\n    * \"csp->config\", and \"fs\" in \"csp->config->config_file_list\".\n    */\n   config->config_file_list = fs;\n\n   /*\n    * Set to defaults\n    */\n   config->multi_threaded            = 1;\n   config->buffer_limit              = 4096 * 1024;\n   config->usermanual                = strdup(USER_MANUAL_URL);\n   config->proxy_args                = strdup(\"\");\n   config->forwarded_connect_retries = 0;\n   /*\n    * 128 client sockets ought to be enough for everybody who can't\n    * be bothered to read the documentation to figure out how to\n    * increase the limit.\n    */\n   config->max_client_connections    = 128;\n   config->socket_timeout            = 300; /* XXX: Should be a macro. */\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   config->default_server_timeout    = 0;\n   config->keep_alive_timeout        = DEFAULT_KEEP_ALIVE_TIMEOUT;\n   config->feature_flags            &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;\n   config->feature_flags            &= ~RUNTIME_FEATURE_CONNECTION_SHARING;\n#endif\n   config->feature_flags            &= ~RUNTIME_FEATURE_CGI_TOGGLE;\n   config->feature_flags            &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;\n   config->feature_flags            &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;\n   config->feature_flags            &= ~RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK;\n   config->feature_flags            &= ~RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS;\n#ifdef FEATURE_COMPRESSION\n   config->feature_flags            &= ~RUNTIME_FEATURE_COMPRESSION;\n   /*\n    * XXX: Run some benchmarks to see if there are better default values.\n    */\n   config->compression_level         = 1;\n#endif\n   config->feature_flags            &= ~RUNTIME_FEATURE_TOLERATE_PIPELINING;\n\n   configfp = fopen(configfile, \"r\");\n   if (NULL == configfp)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"can't open configuration file '%s':  %E\", configfile);\n      /* Never get here - LOG_LEVEL_FATAL causes program exit */\n   }\n\n   while (read_config_line(configfp, &linenum, &buf) != NULL)\n   {\n      char cmd[BUFFER_SIZE];\n      char arg[BUFFER_SIZE];\n      char tmp[BUFFER_SIZE];\n#ifdef FEATURE_ACL\n      struct access_control_list *cur_acl;\n#endif /* def FEATURE_ACL */\n      struct forward_spec *cur_fwd;\n       struct forward_ip_spec *cur_fwd_ip;\n\n      int vec_count;\n      char *vec[3];\n      unsigned int directive_hash;\n\n      strlcpy(tmp, buf, sizeof(tmp));\n\n      /* Copy command (i.e. up to space or tab) into cmd */\n      p = buf;\n      q = cmd;\n      while (*p && (*p != ' ') && (*p != '\\t'))\n      {\n         *q++ = *p++;\n      }\n      *q = '\\0';\n\n      /* Skip over the whitespace in buf */\n      while (*p && ((*p == ' ') || (*p == '\\t')))\n      {\n         p++;\n      }\n\n      /* Copy the argument into arg */\n      if (strlcpy(arg, p, sizeof(arg)) >= sizeof(arg))\n      {\n         log_error(LOG_LEVEL_FATAL, \"Config line too long: %s\", buf);\n      }\n\n      /* Should never happen, but check this anyway */\n      if (*cmd == '\\0')\n      {\n         freez(buf);\n         continue;\n      }\n\n      /* Make sure the command field is lower case */\n      for (p = cmd; *p; p++)\n      {\n         if (privoxy_isupper(*p))\n         {\n            *p = (char)privoxy_tolower(*p);\n         }\n      }\n\n      directive_hash = hash_string(cmd);\n      switch (directive_hash)\n      {\n/* *************************************************************************\n * actionsfile actions-file-name\n * In confdir by default\n * *************************************************************************/\n         case hash_actions_file :\n            i = 0;\n            while ((i < MAX_AF_FILES) && (NULL != config->actions_file[i]))\n            {\n               i++;\n            }\n\n            if (i >= MAX_AF_FILES)\n            {\n               log_error(LOG_LEVEL_FATAL, \"Too many 'actionsfile' directives in config file - limit is %d.\\n\"\n                  \"(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).\",\n                  MAX_AF_FILES);\n            }\n            config->actions_file_short[i] = strdup(arg);\n            config->actions_file[i] = make_path(config->confdir, arg);\n\n            break;\n/* *************************************************************************\n * accept-intercepted-requests\n * *************************************************************************/\n         case hash_accept_intercepted_requests:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS;\n            }\n            break;\n\n/* *************************************************************************\n * admin-address email-address\n * *************************************************************************/\n         case hash_admin_address :\n            freez(config->admin_address);\n            config->admin_address = strdup(arg);\n            break;\n\n/* *************************************************************************\n * allow-cgi-request-crunching\n * *************************************************************************/\n         case hash_allow_cgi_request_crunching:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_CGI_CRUNCHING;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_CGI_CRUNCHING;\n            }\n            break;\n\n/* *************************************************************************\n * buffer-limit n\n * *************************************************************************/\n         case hash_buffer_limit :\n            config->buffer_limit = (size_t)(1024 * parse_numeric_value(cmd, arg));\n            break;\n\n/* *************************************************************************\n * client-header-order header-1 header-2 ... header-n\n * *************************************************************************/\n         case hash_client_header_order:\n            list_remove_all(config->ordered_client_headers);\n            parse_client_header_order(config->ordered_client_headers, arg);\n            break;\n\n/* *************************************************************************\n * confdir directory-name\n * *************************************************************************/\n         case hash_confdir :\n            freez(config->confdir);\n            config->confdir = make_path(NULL, arg);\n            break;\n\n/* *************************************************************************\n* mmdb path\n* *************************************************************************/\n        case hash_mmdbpath :\n          freez(config->mmdbpath);\n          config->mmdbpath = make_path(NULL, arg);\n          break;\n\n/* *************************************************************************\n * compression-level 0-9\n * *************************************************************************/\n#ifdef FEATURE_COMPRESSION\n         case hash_compression_level :\n         {\n            int compression_level = parse_numeric_value(cmd, arg);\n            if (-1 <= compression_level && compression_level <= 9)\n            {\n               config->compression_level = compression_level;;\n            }\n            else\n            {\n               log_error(LOG_LEVEL_FATAL,\n                  \"Invalid compression-level value: %s\", arg);\n            }\n            break;\n         }\n#endif\n\n/* *************************************************************************\n * connection-sharing (0|1)\n * *************************************************************************/\n#ifdef FEATURE_CONNECTION_SHARING\n         case hash_connection_sharing :\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_CONNECTION_SHARING;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_SHARING;\n            }\n            break;\n#endif\n\n/* *************************************************************************\n * debug n\n * Specifies debug level, multiple values are ORed together.\n * *************************************************************************/\n         case hash_debug :\n            config->debug |= parse_numeric_value(cmd, arg);\n            break;\n\n/* *************************************************************************\n * default-server-timeout timeout\n * *************************************************************************/\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         case hash_default_server_timeout :\n         {\n            int timeout = parse_numeric_value(cmd, arg);\n            if (0 <= timeout)\n            {\n               config->default_server_timeout = (unsigned int)timeout;\n            }\n            else\n            {\n               log_error(LOG_LEVEL_FATAL,\n                  \"Invalid default-server-timeout value: %s\", arg);\n            }\n            break;\n         }\n#endif\n\n/* *************************************************************************\n * deny-access source-ip[/significant-bits] [dest-ip[/significant-bits]]\n * *************************************************************************/\n#ifdef FEATURE_ACL\n         case hash_deny_access:\n            strlcpy(tmp, arg, sizeof(tmp));\n            vec_count = ssplit(tmp, \" \\t\", vec, SZ(vec));\n\n            if ((vec_count != 1) && (vec_count != 2))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Wrong number of parameters for \"\n                     \"deny-access directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Wrong number of parameters for \"\n                  \"deny-access directive in configuration file.<br><br>\\n\");\n               break;\n            }\n\n            /* allocate a new node */\n            cur_acl = (struct access_control_list *) zalloc(sizeof(*cur_acl));\n\n            if (cur_acl == NULL)\n            {\n               log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n               /* Never get here - LOG_LEVEL_FATAL causes program exit */\n               break;\n            }\n            cur_acl->action = ACL_DENY;\n\n            if (acl_addr(vec[0], cur_acl->src) < 0)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Invalid source address, port or netmask \"\n                  \"for deny-access directive in configuration file: \\\"%s\\\"\", vec[0]);\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Invalid source address, port or netmask \"\n                  \"for deny-access directive in configuration file: \\\"\");\n               string_append(&config->proxy_args,\n                  vec[0]);\n               string_append(&config->proxy_args,\n                  \"\\\"<br><br>\\n\");\n               freez(cur_acl);\n               break;\n            }\n            if (vec_count == 2)\n            {\n               if (acl_addr(vec[1], cur_acl->dst) < 0)\n               {\n                  log_error(LOG_LEVEL_ERROR, \"Invalid destination address, port or netmask \"\n                     \"for deny-access directive in configuration file: \\\"%s\\\"\", vec[1]);\n                  string_append(&config->proxy_args,\n                     \"<br>\\nWARNING: Invalid destination address, port or netmask \"\n                     \"for deny-access directive in configuration file: \\\"\");\n                  string_append(&config->proxy_args,\n                     vec[1]);\n                  string_append(&config->proxy_args,\n                     \"\\\"<br><br>\\n\");\n                  freez(cur_acl);\n                  break;\n               }\n            }\n#ifdef HAVE_RFC2553\n            else\n            {\n               cur_acl->wildcard_dst = 1;\n            }\n#endif /* def HAVE_RFC2553 */\n\n            /*\n             * Add it to the list.  Note we reverse the list to get the\n             * behaviour the user expects.  With both the ACL and\n             * actions file, the last match wins.  However, the internal\n             * implementations are different:  The actions file is stored\n             * in the same order as the file, and scanned completely.\n             * With the ACL, we reverse the order as we load it, then\n             * when we scan it we stop as soon as we get a match.\n             */\n            cur_acl->next  = config->acl;\n            config->acl = cur_acl;\n\n            break;\n#endif /* def FEATURE_ACL */\n\n/* *************************************************************************\n * enable-edit-actions 0|1\n * *************************************************************************/\n#ifdef FEATURE_CGI_EDIT_ACTIONS\n         case hash_enable_edit_actions:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_CGI_EDIT_ACTIONS;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_CGI_EDIT_ACTIONS;\n            }\n            break;\n#endif /* def FEATURE_CGI_EDIT_ACTIONS */\n\n/* *************************************************************************\n * enable-compression 0|1\n * *************************************************************************/\n#ifdef FEATURE_COMPRESSION\n         case hash_enable_compression:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_COMPRESSION;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_COMPRESSION;\n            }\n            break;\n#endif /* def FEATURE_COMPRESSION */\n\n/* *************************************************************************\n * enable-proxy-authentication-forwarding 0|1\n * *************************************************************************/\n         case hash_enable_proxy_authentication_forwarding:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS;\n            }\n            break;\n\n/* *************************************************************************\n * enable-remote-toggle 0|1\n * *************************************************************************/\n#ifdef FEATURE_TOGGLE\n         case hash_enable_remote_toggle:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_CGI_TOGGLE;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_CGI_TOGGLE;\n            }\n            break;\n#endif /* def FEATURE_TOGGLE */\n\n/* *************************************************************************\n * enable-remote-http-toggle 0|1\n * *************************************************************************/\n         case hash_enable_remote_http_toggle:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_HTTP_TOGGLE;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_HTTP_TOGGLE;\n            }\n            break;\n\n/* *************************************************************************\n * enforce-blocks 0|1\n * *************************************************************************/\n         case hash_enforce_blocks:\n#ifdef FEATURE_FORCE_LOAD\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_ENFORCE_BLOCKS;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_ENFORCE_BLOCKS;\n            }\n#else\n            log_error(LOG_LEVEL_ERROR, \"Ignoring directive 'enforce-blocks'. \"\n               \"FEATURE_FORCE_LOAD is disabled, blocks will always be enforced.\");\n#endif /* def FEATURE_FORCE_LOAD */\n            break;\n\n/* *************************************************************************\n * filterfile file-name\n * In confdir by default.\n * *************************************************************************/\n         case hash_filterfile :\n            i = 0;\n            while ((i < MAX_AF_FILES) && (NULL != config->re_filterfile[i]))\n            {\n               i++;\n            }\n\n            if (i >= MAX_AF_FILES)\n            {\n               log_error(LOG_LEVEL_FATAL, \"Too many 'filterfile' directives in config file - limit is %d.\\n\"\n                  \"(You can increase this limit by changing MAX_AF_FILES in project.h and recompiling).\",\n                  MAX_AF_FILES);\n            }\n            config->re_filterfile_short[i] = strdup(arg);\n            config->re_filterfile[i] = make_path(config->confdir, arg);\n\n            break;\n\n/* *************************************************************************\n * forward url-pattern (.|http-proxy-host[:port])\n * *************************************************************************/\n         case hash_forward:\n            strlcpy(tmp, arg, sizeof(tmp));\n            vec_count = ssplit(tmp, \" \\t\", vec, SZ(vec));\n\n            if (vec_count != 2)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Wrong number of parameters for forward \"\n                     \"directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Wrong number of parameters for \"\n                  \"forward directive in configuration file.\");\n               break;\n            }\n\n            /* allocate a new node */\n            cur_fwd = zalloc(sizeof(*cur_fwd));\n            if (cur_fwd == NULL)\n            {\n               log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n               /* Never get here - LOG_LEVEL_FATAL causes program exit */\n               break;\n            }\n\n            cur_fwd->type = SOCKS_NONE;\n\n            /* Save the URL pattern */\n            if (create_pattern_spec(cur_fwd->url, vec[0]))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Bad URL specifier for forward \"\n                     \"directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Bad URL specifier for \"\n                  \"forward directive in configuration file.\");\n               freez(cur_fwd);\n               break;\n            }\n\n            /* Parse the parent HTTP proxy host:port */\n            p = vec[1];\n\n            if (strcmp(p, \".\") != 0)\n            {\n               cur_fwd->forward_port = 8000;\n               parse_forwarder_address(p, &cur_fwd->forward_host,\n                  &cur_fwd->forward_port);\n            }\n            /* Add to list. */\n            cur_fwd->next = config->forward;\n            config->forward = cur_fwd;\n\n            break;\n\n/* *************************************************************************\n * forward-socks4 url-pattern socks-proxy[:port] (.|http-proxy[:port])\n * *************************************************************************/\n         case hash_forward_socks4:\n            strlcpy(tmp, arg, sizeof(tmp));\n            vec_count = ssplit(tmp, \" \\t\", vec, SZ(vec));\n\n            if (vec_count != 3)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Wrong number of parameters for \"\n                     \"forward-socks4 directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Wrong number of parameters for \"\n                  \"forward-socks4 directive in configuration file.\");\n               break;\n            }\n\n            /* allocate a new node */\n            cur_fwd = zalloc(sizeof(*cur_fwd));\n            if (cur_fwd == NULL)\n            {\n               log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n               /* Never get here - LOG_LEVEL_FATAL causes program exit */\n               break;\n            }\n\n            cur_fwd->type = SOCKS_4;\n\n            /* Save the URL pattern */\n            if (create_pattern_spec(cur_fwd->url, vec[0]))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Bad URL specifier for forward-socks4 \"\n                     \"directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Bad URL specifier for \"\n                  \"forward-socks4 directive in configuration file.\");\n               freez(cur_fwd);\n               break;\n            }\n\n            /* Parse the SOCKS proxy host[:port] */\n            p = vec[1];\n\n            /* XXX: This check looks like a bug. */\n            if (strcmp(p, \".\") != 0)\n            {\n               cur_fwd->gateway_port = 1080;\n               parse_forwarder_address(p, &cur_fwd->gateway_host,\n                  &cur_fwd->gateway_port);\n            }\n\n            /* Parse the parent HTTP proxy host[:port] */\n            p = vec[2];\n\n            if (strcmp(p, \".\") != 0)\n            {\n               cur_fwd->forward_port = 8000;\n               parse_forwarder_address(p, &cur_fwd->forward_host,\n                  &cur_fwd->forward_port);\n            }\n              /* Add to list. */\n              cur_fwd->next = config->forward;\n              config->forward = cur_fwd;\n\n            break;\n\n/* *************************************************************************\n * forward-socks4a url-pattern socks-proxy[:port] (.|http-proxy[:port])\n * *************************************************************************/\n         case hash_forward_socks4a:\n         case hash_forward_socks5:\n         case hash_forward_socks5t:\n            strlcpy(tmp, arg, sizeof(tmp));\n            vec_count = ssplit(tmp, \" \\t\", vec, SZ(vec));\n\n            if (vec_count != 3)\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Wrong number of parameters for %s in configuration file.\",\n                  cmd);\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Wrong number of parameters for \");\n               string_append(&config->proxy_args, cmd);\n               string_append(&config->proxy_args,\n                  \"directive in configuration file.\");\n               break;\n            }\n\n            /* allocate a new node */\n            cur_fwd = zalloc(sizeof(*cur_fwd));\n            if (cur_fwd == NULL)\n            {\n               log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n               /* Never get here - LOG_LEVEL_FATAL causes program exit */\n               break;\n            }\n\n            if (directive_hash == hash_forward_socks4a)\n            {\n               cur_fwd->type = SOCKS_4A;\n            }\n            else if (directive_hash == hash_forward_socks5)\n            {\n               cur_fwd->type = SOCKS_5;\n            }\n            else\n            {\n               assert(directive_hash == hash_forward_socks5t);\n               cur_fwd->type = SOCKS_5T;\n            }\n\n            /* Save the URL pattern */\n            if (create_pattern_spec(cur_fwd->url, vec[0]))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Bad URL specifier for %s in configuration file.\",\n                  cmd);\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Bad URL specifier for \");\n               string_append(&config->proxy_args, cmd);\n               string_append(&config->proxy_args,\n                  \"directive in configuration file.\");\n               freez(cur_fwd);\n               break;\n            }\n\n            /* Parse the SOCKS proxy host[:port] */\n            p = vec[1];\n\n            cur_fwd->gateway_port = 1080;\n            parse_forwarder_address(p, &cur_fwd->gateway_host,\n               &cur_fwd->gateway_port);\n\n            /* Parse the parent HTTP proxy host[:port] */\n            p = vec[2];\n\n            if (strcmp(p, \".\") != 0)\n            {\n               cur_fwd->forward_port = 8000;\n               parse_forwarder_address(p, &cur_fwd->forward_host,\n                  &cur_fwd->forward_port);\n            }\n\n              /* Add to list. */\n              cur_fwd->next = config->forward;\n              config->forward = cur_fwd;\n\n            break;\n\n          case hash_global_mode:\n              global_mode = parse_toggle_state(cmd, arg);\n              break;\n\n\n/* *************************************************************************\n * forwarded-connect-retries n\n * *************************************************************************/\n         case hash_forwarded_connect_retries :\n            config->forwarded_connect_retries = parse_numeric_value(cmd, arg);\n            break;\n\n/* *************************************************************************\n * handle-as-empty-doc-returns-ok 0|1\n *\n * Workaround for firefox hanging on blocked javascript pages.\n *   Block with the \"+handle-as-empty-document\" flag and set the\n *   \"handle-as-empty-doc-returns-ok\" run-time config flag so that\n *   Privoxy returns a 200/OK status instead of a 403/Forbidden status\n *   to the browser for blocked pages.\n ***************************************************************************/\n         case hash_handle_as_empty_returns_ok:\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK;\n            }\n            break;\n\n/* *************************************************************************\n * hostname hostname-to-show-on-cgi-pages\n * *************************************************************************/\n         case hash_hostname :\n            freez(config->hostname);\n            config->hostname = strdup(arg);\n            if (NULL == config->hostname)\n            {\n               log_error(LOG_LEVEL_FATAL, \"Out of memory saving hostname.\");\n            }\n            break;\n\n/* *************************************************************************\n * keep-alive-timeout timeout\n * *************************************************************************/\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n         case hash_keep_alive_timeout :\n         {\n            int timeout = parse_numeric_value(cmd, arg);\n            if (0 < timeout)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;\n               config->keep_alive_timeout = (unsigned int)timeout;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;\n            }\n            break;\n         }\n#endif\n\n/* *************************************************************************\n * listen-address [ip][:port]\n * *************************************************************************/\n         case hash_listen_address :\n            i = 0;\n            while ((i < MAX_LISTENING_SOCKETS) && (NULL != config->haddr[i]))\n            {\n               i++;\n            }\n\n            if (i >= MAX_LISTENING_SOCKETS)\n            {\n               log_error(LOG_LEVEL_FATAL, \"Too many 'listen-address' directives in config file - limit is %d.\\n\"\n                  \"(You can increase this limit by changing MAX_LISTENING_SOCKETS in project.h and recompiling).\",\n                  MAX_LISTENING_SOCKETS);\n            }\n            config->haddr[i] = strdup(arg);\n            if (NULL == config->haddr[i])\n            {\n               log_error(LOG_LEVEL_FATAL, \"Out of memory while copying listening address\");\n            }\n            break;\n\n/* *************************************************************************\n * logdir directory-name\n * *************************************************************************/\n         case hash_logdir :\n            freez(config->logdir);\n            config->logdir = make_path(NULL, arg);\n            break;\n\n/* *************************************************************************\n * logfile log-file-name\n * In logdir by default\n * *************************************************************************/\n         case hash_logfile :\n               logfile = make_path(config->logdir, arg);\n               if (NULL == logfile)\n               {\n                  log_error(LOG_LEVEL_FATAL, \"Out of memory while creating logfile path\");\n               }\n            break;\n\n/* *************************************************************************\n * max-client-connections number\n * *************************************************************************/\n         case hash_max_client_connections :\n         {\n            int max_client_connections = parse_numeric_value(cmd, arg);\n            if (0 <= max_client_connections)\n            {\n               /* XXX: log error */\n               config->max_client_connections = max_client_connections;\n            }\n            break;\n         }\n\n/* *************************************************************************\n * permit-access source-ip[/significant-bits] [dest-ip[/significant-bits]]\n * *************************************************************************/\n#ifdef FEATURE_ACL\n         case hash_permit_access:\n            strlcpy(tmp, arg, sizeof(tmp));\n            vec_count = ssplit(tmp, \" \\t\", vec, SZ(vec));\n\n            if ((vec_count != 1) && (vec_count != 2))\n            {\n               log_error(LOG_LEVEL_ERROR, \"Wrong number of parameters for \"\n                     \"permit-access directive in configuration file.\");\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Wrong number of parameters for \"\n                  \"permit-access directive in configuration file.<br><br>\\n\");\n\n               break;\n            }\n\n            /* allocate a new node */\n            cur_acl = (struct access_control_list *) zalloc(sizeof(*cur_acl));\n\n            if (cur_acl == NULL)\n            {\n               log_error(LOG_LEVEL_FATAL, \"can't allocate memory for configuration\");\n               /* Never get here - LOG_LEVEL_FATAL causes program exit */\n               break;\n            }\n            cur_acl->action = ACL_PERMIT;\n\n            if (acl_addr(vec[0], cur_acl->src) < 0)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Invalid source address, port or netmask \"\n                  \"for permit-access directive in configuration file: \\\"%s\\\"\", vec[0]);\n               string_append(&config->proxy_args,\n                  \"<br>\\nWARNING: Invalid source address, port or netmask for \"\n                  \"permit-access directive in configuration file: \\\"\");\n               string_append(&config->proxy_args,\n                  vec[0]);\n               string_append(&config->proxy_args,\n                  \"\\\"<br><br>\\n\");\n               freez(cur_acl);\n               break;\n            }\n            if (vec_count == 2)\n            {\n               if (acl_addr(vec[1], cur_acl->dst) < 0)\n               {\n                  log_error(LOG_LEVEL_ERROR, \"Invalid destination address, port or netmask \"\n                     \"for permit-access directive in configuration file: \\\"%s\\\"\", vec[1]);\n                  string_append(&config->proxy_args,\n                     \"<br>\\nWARNING: Invalid destination address, port or netmask for \"\n                     \"permit-access directive in configuration file: \\\"\");\n                  string_append(&config->proxy_args,\n                     vec[1]);\n                  string_append(&config->proxy_args,\n                     \"\\\"<br><br>\\n\");\n                  freez(cur_acl);\n                  break;\n               }\n            }\n#ifdef HAVE_RFC2553\n            else\n            {\n               cur_acl->wildcard_dst = 1;\n            }\n#endif /* def HAVE_RFC2553 */\n\n            /*\n             * Add it to the list.  Note we reverse the list to get the\n             * behaviour the user expects.  With both the ACL and\n             * actions file, the last match wins.  However, the internal\n             * implementations are different:  The actions file is stored\n             * in the same order as the file, and scanned completely.\n             * With the ACL, we reverse the order as we load it, then\n             * when we scan it we stop as soon as we get a match.\n             */\n            cur_acl->next  = config->acl;\n            config->acl = cur_acl;\n\n            break;\n#endif /* def FEATURE_ACL */\n\n/* *************************************************************************\n * proxy-info-url url\n * *************************************************************************/\n         case hash_proxy_info_url :\n            freez(config->proxy_info_url);\n            config->proxy_info_url = strdup(arg);\n            break;\n\n/* *************************************************************************\n * single-threaded 0|1\n * *************************************************************************/\n         case hash_single_threaded :\n            config->multi_threaded =  0 == parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n * socket-timeout numer_of_seconds\n * *************************************************************************/\n         case hash_socket_timeout :\n         {\n            int socket_timeout = parse_numeric_value(cmd, arg);\n            if (0 <= socket_timeout)\n            {\n               config->socket_timeout = socket_timeout;\n            }\n            else\n            {\n               log_error(LOG_LEVEL_FATAL, \"Invalid socket-timeout: '%s'\", arg);\n            }\n            break;\n         }\n\n/* *************************************************************************\n * split-large-cgi-forms\n * *************************************************************************/\n         case hash_split_large_cgi_forms :\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_SPLIT_LARGE_FORMS;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_SPLIT_LARGE_FORMS;\n            }\n            break;\n\n/* *************************************************************************\n * templdir directory-name\n * *************************************************************************/\n         case hash_templdir :\n            freez(config->templdir);\n            config->templdir = make_path(NULL, arg);\n            break;\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n/* *************************************************************************\n * temporary-directory directory-name\n * *************************************************************************/\n         case hash_temporary_directory :\n            freez(config->temporary_directory);\n            config->temporary_directory = make_path(NULL, arg);\n            break;\n#endif\n\n/* *************************************************************************\n * tolerate-pipelining (0|1)\n * *************************************************************************/\n         case hash_tolerate_pipelining :\n            if (parse_toggle_state(cmd, arg) == 1)\n            {\n               config->feature_flags |= RUNTIME_FEATURE_TOLERATE_PIPELINING;\n            }\n            else\n            {\n               config->feature_flags &= ~RUNTIME_FEATURE_TOLERATE_PIPELINING;\n            }\n            break;\n\n/* *************************************************************************\n * toggle (0|1)\n * *************************************************************************/\n#ifdef FEATURE_TOGGLE\n         case hash_toggle :\n            global_toggle_state = parse_toggle_state(cmd, arg);\n            break;\n#endif /* def FEATURE_TOGGLE */\n\n/* *************************************************************************\n * trust-info-url url\n * *************************************************************************/\n#ifdef FEATURE_TRUST\n         case hash_trust_info_url :\n            enlist(config->trust_info, arg);\n            break;\n#endif /* def FEATURE_TRUST */\n\n/* *************************************************************************\n * trustfile filename\n * (In confdir by default.)\n * *************************************************************************/\n#ifdef FEATURE_TRUST\n         case hash_trustfile :\n            freez(config->trustfile);\n            config->trustfile = make_path(config->confdir, arg);\n            break;\n#endif /* def FEATURE_TRUST */\n\n/* *************************************************************************\n * usermanual url\n * *************************************************************************/\n         case hash_usermanual :\n            /*\n             * XXX: If this isn't the first config directive, the\n             * show-status page links to the website documentation\n             * for the directives that were already parsed. Lame.\n             */\n            freez(config->usermanual);\n            config->usermanual = strdup(arg);\n            break;\n\n/* *************************************************************************\n * Win32 Console options:\n * *************************************************************************/\n\n/* *************************************************************************\n * hide-console\n * *************************************************************************/\n#ifdef _WIN_CONSOLE\n         case hash_hide_console :\n            hideConsole = 1;\n            break;\n#endif /*def _WIN_CONSOLE*/\n\n\n/* *************************************************************************\n * Win32 GUI options:\n * *************************************************************************/\n\n#if defined(_WIN32) && ! defined(_WIN_CONSOLE)\n/* *************************************************************************\n * activity-animation (0|1)\n * *************************************************************************/\n         case hash_activity_animation :\n            g_bShowActivityAnimation = parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n *  close-button-minimizes (0|1)\n * *************************************************************************/\n         case hash_close_button_minimizes :\n            g_bCloseHidesWindow = parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n * log-buffer-size (0|1)\n * *************************************************************************/\n         case hash_log_buffer_size :\n            g_bLimitBufferSize = parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n * log-font-name fontname\n * *************************************************************************/\n         case hash_log_font_name :\n            if (strlcpy(g_szFontFaceName, arg,\n                   sizeof(g_szFontFaceName)) >= sizeof(g_szFontFaceName))\n            {\n               log_error(LOG_LEVEL_FATAL,\n                  \"log-font-name argument '%s' is longer than %u characters.\",\n                  arg, sizeof(g_szFontFaceName)-1);\n            }\n            break;\n\n/* *************************************************************************\n * log-font-size n\n * *************************************************************************/\n         case hash_log_font_size :\n            g_nFontSize = parse_numeric_value(cmd, arg);\n            break;\n\n/* *************************************************************************\n * log-highlight-messages (0|1)\n * *************************************************************************/\n         case hash_log_highlight_messages :\n            g_bHighlightMessages = parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n * log-max-lines n\n * *************************************************************************/\n         case hash_log_max_lines :\n            g_nMaxBufferLines = parse_numeric_value(cmd, arg);\n            break;\n\n/* *************************************************************************\n * log-messages (0|1)\n * *************************************************************************/\n         case hash_log_messages :\n            g_bLogMessages = parse_toggle_state(cmd, arg);\n            break;\n\n/* *************************************************************************\n * show-on-task-bar (0|1)\n * *************************************************************************/\n         case hash_show_on_task_bar :\n            g_bShowOnTaskBar = parse_toggle_state(cmd, arg);\n            break;\n\n#endif /* defined(_WIN32) && ! defined(_WIN_CONSOLE) */\n\n\n/* *************************************************************************\n * Warnings about unsupported features\n * *************************************************************************/\n#ifndef FEATURE_ACL\n         case hash_deny_access:\n#endif /* ndef FEATURE_ACL */\n#ifndef FEATURE_CGI_EDIT_ACTIONS\n         case hash_enable_edit_actions:\n#endif /* ndef FEATURE_CGI_EDIT_ACTIONS */\n#ifndef FEATURE_TOGGLE\n         case hash_enable_remote_toggle:\n#endif /* ndef FEATURE_TOGGLE */\n#ifndef FEATURE_ACL\n         case hash_permit_access:\n#endif /* ndef FEATURE_ACL */\n#ifndef FEATURE_TOGGLE\n         case hash_toggle :\n#endif /* ndef FEATURE_TOGGLE */\n#ifndef FEATURE_TRUST\n         case hash_trustfile :\n         case hash_trust_info_url :\n#endif /* ndef FEATURE_TRUST */\n\n#ifndef _WIN_CONSOLE\n         case hash_hide_console :\n#endif /* ndef _WIN_CONSOLE */\n\n#if defined(_WIN_CONSOLE) || ! defined(_WIN32)\n         case hash_activity_animation :\n         case hash_close_button_minimizes :\n         case hash_log_buffer_size :\n         case hash_log_font_name :\n         case hash_log_font_size :\n         case hash_log_highlight_messages :\n         case hash_log_max_lines :\n         case hash_log_messages :\n         case hash_show_on_task_bar :\n#endif /* defined(_WIN_CONSOLE) || ! defined(_WIN32) */\n            /* These warnings are annoying - so hide them. -- Jon */\n            /* log_error(LOG_LEVEL_INFO, \"Unsupported directive \\\"%s\\\" ignored.\", cmd); */\n            break;\n\n/* *************************************************************************/\n         default :\n/* *************************************************************************/\n            /*\n             * I decided that I liked this better as a warning than an\n             * error.  To change back to an error, just change log level\n             * to LOG_LEVEL_FATAL.\n             */\n            log_error(LOG_LEVEL_ERROR, \"Ignoring unrecognized directive \"\n               \"'%s' (%uU) in line %lu in configuration file (%s).\",\n               buf, directive_hash, linenum, configfile);\n            string_append(&config->proxy_args,\n               \" <strong class='warning'>Warning: Ignoring unrecognized directive:</strong>\");\n            break;\n\n/* *************************************************************************/\n      } /* end switch(hash_string(cmd)) */\n\n      /* Save the argument for the show-status page. */\n      savearg(cmd, arg, config);\n      freez(buf);\n   } /* end while (read_config_line(...)) */\n\n   fclose(configfp);\n\n   set_debug_level(config->debug);\n\n   freez(config->logfile);\n   if (NULL != logfile) {\n      config->logfile = logfile;\n      init_error_log(\"Privoxy\", config->logfile);\n   }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if (config->default_server_timeout > config->keep_alive_timeout)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Reducing the default-server-timeout from %d to the keep-alive-timeout %d.\",\n         config->default_server_timeout, config->keep_alive_timeout);\n      config->default_server_timeout = config->keep_alive_timeout;\n   }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n#ifdef FEATURE_CONNECTION_SHARING\n   if (config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n   {\n      if (config->multi_threaded)\n      {\n         set_keep_alive_timeout(config->keep_alive_timeout);\n      }\n      else\n      {\n         /*\n          * While we could use keep-alive without multiple threads\n          * if we didn't bother with enforcing the connection timeout,\n          * that might make Tor users sad, even though they shouldn't\n          * enable the single-threaded option anyway.\n          *\n          * XXX: We could still use Proxy-Connection: keep-alive.\n          */\n         config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE;\n         log_error(LOG_LEVEL_ERROR,\n            \"Config option single-threaded disables connection keep-alive.\");\n      }\n   }\n   else if ((config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Config option connection-sharing \"\n         \"has no effect if keep-alive-timeout isn't set.\");\n      config->feature_flags &= ~RUNTIME_FEATURE_CONNECTION_SHARING;\n   }\n#endif /* def FEATURE_CONNECTION_SHARING */\n\n   if (NULL == config->proxy_args)\n   {\n      log_error(LOG_LEVEL_FATAL, \"Out of memory loading config - insufficient memory for config->proxy_args\");\n   }\n\n   if (config->re_filterfile[0])\n   {\n      add_loader(load_re_filterfiles, config);\n   }\n\n   if (config->actions_file[0])\n   {\n      add_loader(load_action_files, config);\n   }\n\n#ifdef FEATURE_TRUST\n   if (config->trustfile)\n   {\n      add_loader(load_trustfile, config);\n   }\n#endif /* def FEATURE_TRUST */\n\n   if (NULL == config->haddr[0])\n   {\n      config->haddr[0] = strdup(HADDR_DEFAULT);\n      if (NULL == config->haddr[0])\n      {\n         log_error(LOG_LEVEL_FATAL, \"Out of memory while copying default listening address\");\n      }\n   }\n\n    for (i = 0; i < MAX_LISTENING_SOCKETS; i++)\n    {\n        config->hport[i] = -1;\n    }\n   for (i = 0; i < MAX_LISTENING_SOCKETS && NULL != config->haddr[i]; i++)\n   {\n      if ((*config->haddr[i] == '[')\n         && (NULL != (p = strchr(config->haddr[i], ']')))\n         && (p[1] == ':')\n         && (0 <= (config->hport[i] = atoi(p + 2))))\n      {\n         *p = '\\0';\n         memmove((void *)config->haddr[i], config->haddr[i] + 1,\n            (size_t)(p - config->haddr[i]));\n      }\n      else if (NULL != (p = strchr(config->haddr[i], ':'))\n         && (0 <= (config->hport[i] = atoi(p + 1))))\n      {\n         *p = '\\0';\n      }\n      else\n      {\n         log_error(LOG_LEVEL_FATAL, \"invalid bind port spec %s\", config->haddr[i]);\n         /* Never get here - LOG_LEVEL_FATAL causes program exit */\n      }\n      if (*config->haddr[i] == '\\0')\n      {\n         /*\n          * Only the port specified. We stored it in config->hport[i]\n          * and don't need its text representation anymore.\n          * Use config->hport[i] == 0 to iterate listening addresses since\n          * now.\n          */\n         freez(config->haddr[i]);\n      }\n   }\n\n   /*\n    * Want to run all the loaders once now.\n    *\n    * Need to set up a fake csp, so they can get to the config.\n    */\n   fake_csp = (struct client_state *) zalloc (sizeof(*fake_csp));\n   fake_csp->config = config;\n\n   if (run_loader(fake_csp))\n   {\n      freez(fake_csp);\n      log_error(LOG_LEVEL_FATAL, \"A loader failed while loading config file. Exiting.\");\n      /* Never get here - LOG_LEVEL_FATAL causes program exit */\n   }\n   freez(fake_csp);\n\n/* FIXME: this is a kludge for win32 */\n#if defined(_WIN32) && !defined (_WIN_CONSOLE)\n\n   g_default_actions_file = config->actions_file[1]; /* FIXME Hope this is default.action */\n   g_user_actions_file  = config->actions_file[2];  /* FIXME Hope this is user.action */\n   g_default_filterfile = config->re_filterfile[0]; /* FIXME Hope this is default.filter */\n   g_user_filterfile    = config->re_filterfile[1]; /* FIXME Hope this is user.filter */\n\n#ifdef FEATURE_TRUST\n   g_trustfile        = config->trustfile;\n#endif /* def FEATURE_TRUST */\n\n\n#endif /* defined(_WIN32) && !defined (_WIN_CONSOLE) */\n/* FIXME: end kludge */\n\n   fs->next = files->next;\n   files->next = fs;\n\n   current_configfile = fs;\n\n   return (config);\n}\n\n\n/*********************************************************************\n *\n * Function    :  savearg\n *\n * Description :  Called from `load_config'.  It saves each non-empty\n *                and non-comment line from config into\n *                config->proxy_args.  This is used to create the\n *                show-proxy-args page.  On error, frees\n *                config->proxy_args and sets it to NULL\n *\n * Parameters  :\n *          1  :  command = config setting that was found\n *          2  :  argument = the setting's argument (if any)\n *          3  :  config = Configuration to save into.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void savearg(char *command, char *argument, struct configuration_spec * config)\n{\n   char * buf;\n   char * s;\n\n   assert(command);\n   assert(argument);\n\n   /*\n    * Add config option name embedded in\n    * link to its section in the user-manual\n    */\n   buf = strdup(\"\\n<a href=\\\"\");\n   if (!strncmpic(config->usermanual, \"file://\", 7) ||\n       !strncmpic(config->usermanual, \"http\", 4))\n   {\n      string_append(&buf, config->usermanual);\n   }\n   else\n   {\n      string_append(&buf, \"http://\" CGI_SITE_2_HOST \"/user-manual/\");\n   }\n   string_append(&buf, CONFIG_HELP_PREFIX);\n   string_join  (&buf, string_toupper(command));\n   string_append(&buf, \"\\\">\");\n   string_append(&buf, command);\n   string_append(&buf, \"</a> \");\n\n   if (NULL == buf)\n   {\n      freez(config->proxy_args);\n      return;\n   }\n\n   if ((NULL != argument) && ('\\0' != *argument))\n   {\n      s = html_encode(argument);\n      if (NULL == s)\n      {\n         freez(buf);\n         freez(config->proxy_args);\n         return;\n      }\n\n      if (strncmpic(argument, \"http://\", 7) == 0)\n      {\n         string_append(&buf, \"<a href=\\\"\");\n         string_append(&buf, s);\n         string_append(&buf, \"\\\">\");\n         string_join  (&buf, s);\n         string_append(&buf, \"</a>\");\n      }\n      else\n      {\n         string_join  (&buf, s);\n      }\n   }\n\n   string_append(&buf, \"<br>\");\n   string_join(&config->proxy_args, buf);\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/loadcfg.h",
    "content": "#ifndef LOADCFG_H_INCLUDED\n#define LOADCFG_H_INCLUDED\n#define LOADCFG_H_VERSION \"$Id: loadcfg.h,v 1.17 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/loadcfg.h,v $\n *\n * Purpose     :  Loads settings from the configuration file into\n *                global variables.  This file contains both the\n *                routine to load the configuration and the global\n *                variables it writes to.\n *\n * Copyright   :  Written by and Copyright (C) 2001 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n/* Don't need project.h, only this: */\nstruct configuration_spec;\n\n/* Global variables */\n\n#ifdef FEATURE_TOGGLE\n/* Privoxy's toggle state */\nextern int global_toggle_state;\n#endif /* def FEATURE_TOGGLE */\n\nextern const char *configfile;\n\n\n/* The load_config function is now going to call:\n * init_proxy_args, so it will need argc and argv.\n * Since load_config will also be a signal handler,\n * we need to have these globally available.\n */\nextern int Argc;\nextern char * const * Argv;\nextern short int MustReload;\n\n\nextern struct configuration_spec * load_config(void);\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\nvoid unload_current_config_file(void);\n#endif\n\n/* Revision control strings from this header and associated .c file */\nextern const char loadcfg_rcs[];\nextern const char loadcfg_h_rcs[];\n\n#endif /* ndef LOADCFG_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/loaders.c",
    "content": "const char loaders_rcs[] = \"$Id: loaders.c,v 1.100 2015/01/24 16:40:21 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/loaders.c,v $\n *\n * Purpose     :  Functions to load and unload the various\n *                configuration files.  Also contains code to manage\n *                the list of active loaders, and to automatically\n *                unload files that are no longer in use.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <sys/types.h>\n#include <string.h>\n#include <errno.h>\n#include <sys/stat.h>\n#include <ctype.h>\n#include <assert.h>\n\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif\n\n#include \"project.h\"\n#include \"list.h\"\n#include \"loaders.h\"\n#include \"filters.h\"\n#include \"parsers.h\"\n#include \"jcc.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"actions.h\"\n#include \"urlmatch.h\"\n#include \"encode.h\"\n\nconst char loaders_h_rcs[] = LOADERS_H_VERSION;\n\n/*\n * Currently active files.\n * These are also entered in the main linked list of files.\n */\n\n#ifdef FEATURE_TRUST\nstatic struct file_list *current_trustfile      = NULL;\n#endif /* def FEATURE_TRUST */\n\nstatic int load_one_re_filterfile(struct client_state *csp, int fileid);\n\nstatic struct file_list *current_re_filterfile[MAX_AF_FILES]  = {\n   NULL, NULL, NULL, NULL, NULL,\n   NULL, NULL, NULL, NULL, NULL\n};\n\n\n/*********************************************************************\n *\n * Function    :  sweep\n *\n * Description :  Basically a mark and sweep garbage collector, it is run\n *                (by the parent thread) every once in a while to reclaim memory.\n *\n * It uses a mark and sweep strategy:\n *   1) mark all files as inactive\n *\n *   2) check with each client:\n *       if it is active,   mark its files as active\n *       if it is inactive, free its resources\n *\n *   3) free the resources of all of the files that\n *      are still marked as inactive (and are obsolete).\n *\n *   N.B. files that are not obsolete don't have an unloader defined.\n *\n * Parameters  :  None\n *\n * Returns     :  The number of threads that are still active.\n *\n *********************************************************************/\nunsigned int sweep(void)\n{\n   struct file_list *fl, *nfl;\n   struct client_state *csp;\n   struct client_states *last_active, *client_list;\n   int i;\n   unsigned int active_threads = 0;\n\n   /* clear all of the file's active flags */\n   for (fl = files->next; NULL != fl; fl = fl->next)\n   {\n      fl->active = 0;\n   }\n\n   last_active = clients;\n   client_list = clients->next;\n\n   while (NULL != client_list)\n   {\n      csp = &client_list->csp;\n       if (!(csp->flags & CSP_FLAG_ACTIVE)) {\n           log_time_stage(csp, TIME_STAGE_CLOSED);\n       }\n      if (csp->flags & (CSP_FLAG_ACTIVE | CSP_FLAG_LOG_REQUEST))\n      {\n         /* Mark this client's files as active */\n\n         /*\n          * Always have a configuration file.\n          * (Also note the slightly non-standard extra\n          * indirection here.)\n          */\n         csp->config->config_file_list->active = 1;\n\n         /*\n          * Actions files\n          */\n         for (i = 0; i < MAX_AF_FILES; i++)\n         {\n            if (csp->actions_list[i])\n            {\n               csp->actions_list[i]->active = 1;\n            }\n         }\n\n         /*\n          * Filter files\n          */\n         for (i = 0; i < MAX_AF_FILES; i++)\n         {\n            if (csp->rlist[i])\n            {\n               csp->rlist[i]->active = 1;\n            }\n         }\n\n         /*\n          * Trust file\n          */\n#ifdef FEATURE_TRUST\n         if (csp->tlist)\n         {\n            csp->tlist->active = 1;\n         }\n#endif /* def FEATURE_TRUST */\n\n         active_threads++;\n\n         last_active = client_list;\n         client_list = client_list->next;\n      }\n      else\n      /*\n       * This client is not active. Free its resources.\n       */\n      {\n         last_active->next = client_list->next;\n\n         freez(csp->ip_addr_str);\n         freez(csp->client_iob->buf);\n         freez(csp->iob->buf);\n         freez(csp->error_message);\n         freez(csp->rule);\n\n         if (csp->action->flags & ACTION_FORWARD_OVERRIDE &&\n             NULL != csp->fwd)\n         {\n            unload_forward_spec(csp->fwd);\n         }\n         free_http_request(csp->http);\n\n         destroy_list(csp->headers);\n         destroy_list(csp->tags);\n\n         free_current_action(csp->action);\n\n#ifdef FEATURE_STATISTICS\n         urls_read++;\n         if (csp->flags & CSP_FLAG_REJECTED)\n         {\n            urls_rejected++;\n         }\n#endif /* def FEATURE_STATISTICS */\n\n         freez(client_list);\n\n         client_list = last_active->next;\n      }\n   }\n\n   nfl = files;\n   fl = files->next;\n\n   while (fl != NULL)\n   {\n      if ((0 == fl->active) && (NULL != fl->unloader))\n      {\n         nfl->next = fl->next;\n\n         (fl->unloader)(fl->f);\n\n         freez(fl->filename);\n         freez(fl);\n\n         fl = nfl->next;\n      }\n      else\n      {\n         nfl = fl;\n         fl = fl->next;\n      }\n   }\n\n   return active_threads;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  check_file_changed\n *\n * Description :  Helper function to check if a file needs reloading.\n *                If \"current\" is still current, return it.  Otherwise\n *                allocates a new (zeroed) \"struct file_list\", fills\n *                in the disk file name and timestamp, and returns it.\n *\n * Parameters  :\n *          1  :  current = The file_list currently being used - will\n *                          be checked to see if it is out of date.\n *                          May be NULL (which is treated as out of\n *                          date).\n *          2  :  filename = Name of file to check.\n *          3  :  newfl    = New file list. [Output only]\n *                           This will be set to NULL, OR a struct\n *                           file_list newly allocated on the\n *                           heap, with the filename and lastmodified\n *                           fields filled, and all others zeroed.\n *\n * Returns     :  If file unchanged: 0 (and sets newfl == NULL)\n *                If file changed: 1 and sets newfl != NULL\n *                On error: 1 and sets newfl == NULL\n *\n *********************************************************************/\nint check_file_changed(const struct file_list * current,\n                       const char * filename,\n                       struct file_list ** newfl)\n{\n   struct file_list *fs;\n   struct stat statbuf[1];\n\n   *newfl = NULL;\n\n   if (stat(filename, statbuf) < 0)\n   {\n      /* Error, probably file not found. */\n      return 1;\n   }\n\n    // Temp Fix\n    if (current) {\n        return 0;\n    }\n\n   if (current\n       && (current->lastmodified == statbuf->st_mtime)\n       && (0 == strcmp(current->filename, filename)))\n   {\n      return 0;\n   }\n\n   fs = (struct file_list *)zalloc(sizeof(struct file_list));\n   if (fs == NULL)\n   {\n      /* Out of memory error */\n      return 1;\n   }\n\n\n   fs->filename = strdup(filename);\n   fs->lastmodified = statbuf->st_mtime;\n\n   if (fs->filename == NULL)\n   {\n      /* Out of memory error */\n      freez (fs);\n      return 1;\n   }\n   *newfl = fs;\n   return 1;\n}\n\n\n/*********************************************************************\n *\n * Function    :  simple_read_line\n *\n * Description :  Read a single line from a file and return it.\n *                This is basically a version of fgets() that malloc()s\n *                it's own line buffer.  Note that the buffer will\n *                always be a multiple of BUFFER_SIZE bytes long.\n *                Therefore if you are going to keep the string for\n *                an extended period of time, you should probably\n *                strdup() it and free() the original, to save memory.\n *\n *\n * Parameters  :\n *          1  :  dest = destination for newly malloc'd pointer to\n *                line data.  Will be set to NULL on error.\n *          2  :  fp = File to read from\n *          3  :  newline = Standard for newlines in the file.\n *                Will be unchanged if it's value on input is not\n *                NEWLINE_UNKNOWN.\n *                On output, may be changed from NEWLINE_UNKNOWN to\n *                actual convention in file.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_FILE   on EOF.\n *\n *********************************************************************/\njb_err simple_read_line(FILE *fp, char **dest, int *newline)\n{\n   size_t len = 0;\n   size_t buflen = BUFFER_SIZE;\n   char * buf;\n   char * p;\n   int ch;\n   int realnewline = NEWLINE_UNKNOWN;\n\n   if (NULL == (buf = malloc(buflen)))\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   p = buf;\n\n/*\n * Character codes.  If you have a weird compiler and the following are\n * incorrect, you also need to fix NEWLINE() in loaders.h\n */\n#define CHAR_CR '\\r' /* ASCII 13 */\n#define CHAR_LF '\\n' /* ASCII 10 */\n\n   for (;;)\n   {\n      ch = getc(fp);\n      if (ch == EOF)\n      {\n         if (len > 0)\n         {\n            *p = '\\0';\n            *dest = buf;\n            return JB_ERR_OK;\n         }\n         else\n         {\n            free(buf);\n            *dest = NULL;\n            return JB_ERR_FILE;\n         }\n      }\n      else if (ch == CHAR_CR)\n      {\n         ch = getc(fp);\n         if (ch == CHAR_LF)\n         {\n            if (*newline == NEWLINE_UNKNOWN)\n            {\n               *newline = NEWLINE_DOS;\n            }\n         }\n         else\n         {\n            if (ch != EOF)\n            {\n               ungetc(ch, fp);\n            }\n            if (*newline == NEWLINE_UNKNOWN)\n            {\n               *newline = NEWLINE_MAC;\n            }\n         }\n         *p = '\\0';\n         *dest = buf;\n         if (*newline == NEWLINE_UNKNOWN)\n         {\n            *newline = realnewline;\n         }\n         return JB_ERR_OK;\n      }\n      else if (ch == CHAR_LF)\n      {\n         *p = '\\0';\n         *dest = buf;\n         if (*newline == NEWLINE_UNKNOWN)\n         {\n            *newline = NEWLINE_UNIX;\n         }\n         return JB_ERR_OK;\n      }\n      else if (ch == 0)\n      {\n         *p = '\\0';\n         *dest = buf;\n         return JB_ERR_OK;\n      }\n\n      *p++ = (char)ch;\n\n      if (++len >= buflen)\n      {\n         buflen += BUFFER_SIZE;\n         if (NULL == (p = realloc(buf, buflen)))\n         {\n            free(buf);\n            return JB_ERR_MEMORY;\n         }\n         buf = p;\n         p = buf + len;\n      }\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  edit_read_line\n *\n * Description :  Read a single non-empty line from a file and return\n *                it.  Trims comments, leading and trailing whitespace\n *                and respects escaping of newline and comment char.\n *                Provides the line in 2 alternative forms: raw and\n *                preprocessed.\n *                - raw is the raw data read from the file.  If the\n *                  line is not modified, then this should be written\n *                  to the new file.\n *                - prefix is any comments and blank lines that were\n *                  read from the file.  If the line is modified, then\n *                  this should be written out to the file followed\n *                  by the modified data.  (If this string is non-empty\n *                  then it will have a newline at the end).\n *                - data is the actual data that will be parsed\n *                  further by appropriate routines.\n *                On EOF, the 3 strings will all be set to NULL and\n *                0 will be returned.\n *\n * Parameters  :\n *          1  :  fp = File to read from\n *          2  :  raw_out = destination for newly malloc'd pointer to\n *                raw line data.  May be NULL if you don't want it.\n *          3  :  prefix_out = destination for newly malloc'd pointer to\n *                comments.  May be NULL if you don't want it.\n *          4  :  data_out = destination for newly malloc'd pointer to\n *                line data with comments and leading/trailing spaces\n *                removed, and line continuation performed.  May be\n *                NULL if you don't want it.\n *          5  :  newline = Standard for newlines in the file.\n *                On input, set to value to use or NEWLINE_UNKNOWN.\n *                On output, may be changed from NEWLINE_UNKNOWN to\n *                actual convention in file.  May be NULL if you\n *                don't want it.\n *          6  :  line_number = Line number in file.  In \"lines\" as\n *                reported by a text editor, not lines containing data.\n *\n * Returns     :  JB_ERR_OK     on success\n *                JB_ERR_MEMORY on out-of-memory\n *                JB_ERR_FILE   on EOF.\n *\n *********************************************************************/\njb_err edit_read_line(FILE *fp,\n                      char **raw_out,\n                      char **prefix_out,\n                      char **data_out,\n                      int *newline,\n                      unsigned long *line_number)\n{\n   char *p;          /* Temporary pointer   */\n   char *linebuf;    /* Line read from file */\n   char *linestart;  /* Start of linebuf, usually first non-whitespace char */\n   int contflag = 0; /* Nonzero for line continuation - i.e. line ends '\\' */\n   int is_empty = 1; /* Flag if not got any data yet */\n   char *raw    = NULL; /* String to be stored in raw_out    */\n   char *prefix = NULL; /* String to be stored in prefix_out */\n   char *data   = NULL; /* String to be stored in data_out   */\n   int scrapnewline;    /* Used for (*newline) if newline==NULL */\n   jb_err rval = JB_ERR_OK;\n\n   assert(fp);\n   assert(raw_out || data_out);\n   assert(newline == NULL\n       || *newline == NEWLINE_UNKNOWN\n       || *newline == NEWLINE_UNIX\n       || *newline == NEWLINE_DOS\n       || *newline == NEWLINE_MAC);\n\n   if (newline == NULL)\n   {\n      scrapnewline = NEWLINE_UNKNOWN;\n      newline = &scrapnewline;\n   }\n\n   /* Set output parameters to NULL */\n   if (raw_out)\n   {\n      *raw_out    = NULL;\n   }\n   if (prefix_out)\n   {\n      *prefix_out = NULL;\n   }\n   if (data_out)\n   {\n      *data_out   = NULL;\n   }\n\n   /* Set string variables to new, empty strings. */\n\n   if (raw_out)\n   {\n      raw = strdup(\"\");\n      if (NULL == raw)\n      {\n         return JB_ERR_MEMORY;\n      }\n   }\n   if (prefix_out)\n   {\n      prefix = strdup(\"\");\n      if (NULL == prefix)\n      {\n         freez(raw);\n         return JB_ERR_MEMORY;\n      }\n   }\n   if (data_out)\n   {\n      data = strdup(\"\");\n      if (NULL == data)\n      {\n         freez(raw);\n         freez(prefix);\n         return JB_ERR_MEMORY;\n      }\n   }\n\n   /* Main loop.  Loop while we need more data & it's not EOF. */\n\n   while ((contflag || is_empty)\n       && (JB_ERR_OK == (rval = simple_read_line(fp, &linebuf, newline))))\n   {\n      if (line_number)\n      {\n         (*line_number)++;\n      }\n      if (raw)\n      {\n         string_append(&raw,linebuf);\n         if (string_append(&raw,NEWLINE(*newline)))\n         {\n            freez(prefix);\n            freez(data);\n            free(linebuf);\n            return JB_ERR_MEMORY;\n         }\n      }\n\n      /* Line continuation? Trim escape and set flag. */\n      p = linebuf + strlen(linebuf) - 1;\n      contflag = ((*linebuf != '\\0') && (*p == '\\\\'));\n      if (contflag)\n      {\n         *p = '\\0';\n      }\n\n      /* Trim leading spaces if we're at the start of the line */\n      linestart = linebuf;\n      assert(NULL != data);\n      if (*data == '\\0')\n      {\n         /* Trim leading spaces */\n         while (*linestart && isspace((int)(unsigned char)*linestart))\n         {\n            linestart++;\n         }\n      }\n\n      /* Handle comment characters. */\n      p = linestart;\n      while ((p = strchr(p, '#')) != NULL)\n      {\n         /* Found a comment char.. */\n         if ((p != linebuf) && (*(p-1) == '\\\\'))\n         {\n            /* ..and it's escaped, left-shift the line over the escape. */\n            char *q = p - 1;\n            while ((*q = *(q + 1)) != '\\0')\n            {\n               q++;\n            }\n            /* Now scan from just after the \"#\". */\n         }\n         else\n         {\n            /* Real comment.  Save it... */\n            if (p == linestart)\n            {\n               /* Special case:  Line only contains a comment, so all the\n                * previous whitespace is considered part of the comment.\n                * Undo the whitespace skipping, if any.\n                */\n               linestart = linebuf;\n               p = linestart;\n            }\n            if (prefix)\n            {\n               string_append(&prefix,p);\n               if (string_append(&prefix, NEWLINE(*newline)))\n               {\n                  freez(raw);\n                  freez(data);\n                  free(linebuf);\n                  return JB_ERR_MEMORY;\n               }\n            }\n\n            /* ... and chop off the rest of the line */\n            *p = '\\0';\n         }\n      } /* END while (there's a # character) */\n\n      /* Write to the buffer */\n      if (*linestart)\n      {\n         is_empty = 0;\n         if (data)\n         {\n            if (string_append(&data, linestart))\n            {\n               freez(raw);\n               freez(prefix);\n               free(linebuf);\n               return JB_ERR_MEMORY;\n            }\n         }\n      }\n\n      free(linebuf);\n   } /* END while(we need more data) */\n\n   /* Handle simple_read_line() errors - ignore EOF */\n   if ((rval != JB_ERR_OK) && (rval != JB_ERR_FILE))\n   {\n      freez(raw);\n      freez(prefix);\n      freez(data);\n      return rval;\n   }\n\n   if (raw ? (*raw == '\\0') : is_empty)\n   {\n      /* EOF and no data there.  (Definition of \"data\" depends on whether\n       * the caller cares about \"raw\" or just \"data\").\n       */\n\n      freez(raw);\n      freez(prefix);\n      freez(data);\n\n      return JB_ERR_FILE;\n   }\n   else\n   {\n      /* Got at least some data */\n\n      /* Remove trailing whitespace */\n      chomp(data);\n\n      if (raw_out)\n      {\n         *raw_out    = raw;\n      }\n      else\n      {\n         freez(raw);\n      }\n      if (prefix_out)\n      {\n         *prefix_out = prefix;\n      }\n      else\n      {\n         freez(prefix);\n      }\n      if (data_out)\n      {\n         *data_out   = data;\n      }\n      else\n      {\n         freez(data);\n      }\n      return JB_ERR_OK;\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  read_config_line\n *\n * Description :  Read a single non-empty line from a file and return\n *                it.  Trims comments, leading and trailing whitespace\n *                and respects escaping of newline and comment char.\n *\n * Parameters  :\n *          1  :  fp = File to read from\n *          2  :  linenum = linenumber in file\n *          3  :  buf = Pointer to a pointer to set to the data buffer.\n *\n * Returns     :  NULL on EOF or error\n *                Otherwise, returns buf.\n *\n *********************************************************************/\nchar *read_config_line(FILE *fp, unsigned long *linenum, char **buf)\n{\n   jb_err err;\n   err = edit_read_line(fp, NULL, NULL, buf, NULL, linenum);\n   if (err)\n   {\n      if (err == JB_ERR_MEMORY)\n      {\n         log_error(LOG_LEVEL_FATAL, \"Out of memory loading a config file\");\n      }\n      *buf = NULL;\n   }\n   return *buf;\n}\n\n\n#ifdef FEATURE_TRUST\n/*********************************************************************\n *\n * Function    :  unload_trustfile\n *\n * Description :  Unloads a trustfile.\n *\n * Parameters  :\n *          1  :  f = the data structure associated with the trustfile.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void unload_trustfile(void *f)\n{\n   struct block_spec *cur = (struct block_spec *)f;\n   struct block_spec *next;\n\n   while (cur != NULL)\n   {\n      next = cur->next;\n\n      free_pattern_spec(cur->url);\n      free(cur);\n\n      cur = next;\n   }\n\n}\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n/*********************************************************************\n *\n * Function    :  unload_current_trust_file\n *\n * Description :  Unloads current trust file - reset to state at\n *                beginning of program.\n *\n * Parameters  :  None\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_current_trust_file(void)\n{\n   if (current_trustfile)\n   {\n      current_trustfile->unloader = unload_trustfile;\n      current_trustfile = NULL;\n   }\n}\n#endif /* FEATURE_GRACEFUL_TERMINATION */\n\n\n/*********************************************************************\n *\n * Function    :  load_trustfile\n *\n * Description :  Read and parse a trustfile and add to files list.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint load_trustfile(struct client_state *csp)\n{\n   FILE *fp;\n\n   struct block_spec *b, *bl;\n   struct pattern_spec **tl;\n\n   char *buf = NULL;\n   int reject, trusted;\n   struct file_list *fs;\n   unsigned long linenum = 0;\n   int trusted_referrers = 0;\n\n//    if (current_trustfile) {\n//        csp->tlist = current_trustfile;\n//        return(0);\n//    }\n   if (!check_file_changed(current_trustfile, csp->config->trustfile, &fs))\n   {\n      /* No need to load */\n      csp->tlist = current_trustfile;\n      return(0);\n   }\n   if (!fs)\n   {\n      goto load_trustfile_error;\n   }\n\n   fs->f = bl = (struct block_spec *)zalloc(sizeof(*bl));\n   if (bl == NULL)\n   {\n      goto load_trustfile_error;\n   }\n\n   if ((fp = fopen(csp->config->trustfile, \"r\")) == NULL)\n   {\n      goto load_trustfile_error;\n   }\n   log_error(LOG_LEVEL_INFO, \"Loading trust file: %s\", csp->config->trustfile);\n\n   tl = csp->config->trust_list;\n\n   while (read_config_line(fp, &linenum, &buf) != NULL)\n   {\n      trusted = 0;\n      reject  = 1;\n\n      if (*buf == '+')\n      {\n         trusted = 1;\n         *buf = '~';\n      }\n\n      if (*buf == '~')\n      {\n         char *p;\n         char *q;\n\n         reject = 0;\n         p = buf;\n         q = p+1;\n         while ((*p++ = *q++) != '\\0')\n         {\n            /* nop */\n         }\n      }\n\n      /* skip blank lines */\n      if (*buf == '\\0')\n      {\n         freez(buf);\n         continue;\n      }\n\n      /* allocate a new node */\n      if ((b = zalloc(sizeof(*b))) == NULL)\n      {\n         fclose(fp);\n         goto load_trustfile_error;\n      }\n\n      /* add it to the list */\n      b->next  = bl->next;\n      bl->next = b;\n\n      b->reject = reject;\n\n      /* Save the URL pattern */\n      if (create_pattern_spec(b->url, buf))\n      {\n         fclose(fp);\n         goto load_trustfile_error;\n      }\n\n      /*\n       * save a pointer to URL's spec in the list of trusted URL's, too\n       */\n      if (trusted)\n      {\n         if (++trusted_referrers < MAX_TRUSTED_REFERRERS)\n         {\n            *tl++ = b->url;\n         }\n      }\n      freez(buf);\n   }\n\n   if (trusted_referrers >= MAX_TRUSTED_REFERRERS)\n   {\n      /*\n       * FIXME: ... after Privoxy 3.0.4 is out.\n       */\n       log_error(LOG_LEVEL_ERROR, \"Too many trusted referrers. Current limit is %d, you are using %d.\\n\"\n          \"  Additional trusted referrers are treated like ordinary trusted URLs.\\n\"\n          \"  (You can increase this limit by changing MAX_TRUSTED_REFERRERS in project.h and recompiling).\",\n          MAX_TRUSTED_REFERRERS, trusted_referrers);\n   }\n\n   *tl = NULL;\n\n   fclose(fp);\n\n   /* the old one is now obsolete */\n   if (current_trustfile)\n   {\n      current_trustfile->unloader = unload_trustfile;\n   }\n\n   fs->next    = files->next;\n   files->next = fs;\n   current_trustfile = fs;\n   csp->tlist = fs;\n\n   return(0);\n\nload_trustfile_error:\n   log_error(LOG_LEVEL_FATAL, \"can't load trustfile '%s': %E\",\n      csp->config->trustfile);\n   freez(buf);\n   return(-1);\n\n}\n#endif /* def FEATURE_TRUST */\n\n\n/*********************************************************************\n *\n * Function    :  unload_re_filterfile\n *\n * Description :  Unload the re_filter list by freeing all chained\n *                re_filterfile specs and their data.\n *\n * Parameters  :\n *          1  :  f = the data structure associated with the filterfile.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void unload_re_filterfile(void *f)\n{\n   struct re_filterfile_spec *a, *b = (struct re_filterfile_spec *)f;\n\n   while (b != NULL)\n   {\n      a = b->next;\n\n      destroy_list(b->patterns);\n      pcrs_free_joblist(b->joblist);\n      freez(b->name);\n      freez(b->description);\n      freez(b);\n\n      b = a;\n   }\n\n   return;\n}\n\n/*********************************************************************\n *\n * Function    :  unload_forward_spec\n *\n * Description :  Unload the forward spec settings by freeing all\n *                memory referenced by members and the memory for\n *                the spec itself.\n *\n * Parameters  :\n *          1  :  fwd = the forward spec.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_forward_spec(struct forward_spec *fwd)\n{\n   free_pattern_spec(fwd->url);\n   freez(fwd->gateway_host);\n   freez(fwd->forward_host);\n   free(fwd);\n\n   return;\n}\n\nvoid unload_forward_ip_spec(struct forward_spec *fwd)\n{\n    freez(fwd->gateway_host);\n    freez(fwd->forward_host);\n    free(fwd);\n\n    return;\n}\n\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n/*********************************************************************\n *\n * Function    :  unload_current_re_filterfile\n *\n * Description :  Unloads current re_filter file - reset to state at\n *                beginning of program.\n *\n * Parameters  :  None\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid unload_current_re_filterfile(void)\n{\n   int i;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (current_re_filterfile[i])\n      {\n         current_re_filterfile[i]->unloader = unload_re_filterfile;\n         current_re_filterfile[i] = NULL;\n      }\n   }\n}\n#endif\n\n\n/*********************************************************************\n *\n * Function    :  load_re_filterfiles\n *\n * Description :  Loads all the filterfiles.\n *                Generate a chained list of re_filterfile_spec's from\n *                the \"FILTER: \" blocks, compiling all their substitutions\n *                into chained lists of pcrs_job structs.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint load_re_filterfiles(struct client_state *csp)\n{\n   int i;\n   int result;\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->config->re_filterfile[i])\n      {\n         result = load_one_re_filterfile(csp, i);\n         if (result)\n         {\n            return result;\n         }\n      }\n      else if (current_re_filterfile[i])\n      {\n         current_re_filterfile[i]->unloader = unload_re_filterfile;\n         current_re_filterfile[i] = NULL;\n      }\n   }\n\n   return 0;\n}\n\n\n/*********************************************************************\n *\n * Function    :  load_one_re_filterfile\n *\n * Description :  Load a re_filterfile.\n *                Generate a chained list of re_filterfile_spec's from\n *                the \"FILTER: \" blocks, compiling all their substitutions\n *                into chained lists of pcrs_job structs.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint load_one_re_filterfile(struct client_state *csp, int fileid)\n{\n   FILE *fp;\n\n   struct re_filterfile_spec *new_bl, *bl = NULL;\n   struct file_list *fs;\n\n   char *buf = NULL;\n   int error;\n   unsigned long linenum = 0;\n   pcrs_job *dummy, *lastjob = NULL;\n\n//    if (current_re_filterfile[fileid]) {\n//        csp->rlist[fileid] = current_re_filterfile[fileid];\n//        return(0);\n//    }\n   /*\n    * No need to reload if unchanged\n    */\n   if (!check_file_changed(current_re_filterfile[fileid], csp->config->re_filterfile[fileid], &fs))\n   {\n      csp->rlist[fileid] = current_re_filterfile[fileid];\n      return(0);\n   }\n   if (!fs)\n   {\n      goto load_re_filterfile_error;\n   }\n\n   /*\n    * Open the file or fail\n    */\n   if ((fp = fopen(csp->config->re_filterfile[fileid], \"r\")) == NULL)\n   {\n      goto load_re_filterfile_error;\n   }\n\n   log_error(LOG_LEVEL_INFO, \"Loading filter file: %s\", csp->config->re_filterfile[fileid]);\n\n   /*\n    * Read line by line\n    */\n   while (read_config_line(fp, &linenum, &buf) != NULL)\n   {\n      enum filter_type new_filter = FT_INVALID_FILTER;\n\n      if (strncmp(buf, \"FILTER:\", 7) == 0)\n      {\n         new_filter = FT_CONTENT_FILTER;\n      }\n      else if (strncmp(buf, \"SERVER-HEADER-FILTER:\", 21) == 0)\n      {\n         new_filter = FT_SERVER_HEADER_FILTER;\n      }\n      else if (strncmp(buf, \"CLIENT-HEADER-FILTER:\", 21) == 0)\n      {\n         new_filter = FT_CLIENT_HEADER_FILTER;\n      }\n      else if (strncmp(buf, \"CLIENT-HEADER-TAGGER:\", 21) == 0)\n      {\n         new_filter = FT_CLIENT_HEADER_TAGGER;\n      }\n      else if (strncmp(buf, \"SERVER-HEADER-TAGGER:\", 21) == 0)\n      {\n         new_filter = FT_SERVER_HEADER_TAGGER;\n      }\n#ifdef FEATURE_EXTERNAL_FILTERS\n      else if (strncmp(buf, \"EXTERNAL-FILTER:\", 16) == 0)\n      {\n         new_filter = FT_EXTERNAL_CONTENT_FILTER;\n      }\n#endif\n\n      /*\n       * If this is the head of a new filter block, make it a\n       * re_filterfile spec of its own and chain it to the list:\n       */\n      if (new_filter != FT_INVALID_FILTER)\n      {\n         new_bl = (struct re_filterfile_spec  *)zalloc(sizeof(*bl));\n         if (new_bl == NULL)\n         {\n            goto load_re_filterfile_error;\n         }\n         if (new_filter == FT_CONTENT_FILTER)\n         {\n            new_bl->name = chomp(buf + 7);\n         }\n#ifdef FEATURE_EXTERNAL_FILTERS\n         else if (new_filter == FT_EXTERNAL_CONTENT_FILTER)\n         {\n            new_bl->name = chomp(buf + 16);\n         }\n#endif\n         else\n         {\n            new_bl->name = chomp(buf + 21);\n         }\n         new_bl->type = new_filter;\n\n         /*\n          * If a filter description is available,\n          * encode it to HTML and save it.\n          */\n         if (NULL != (new_bl->description = strpbrk(new_bl->name, \" \\t\")))\n         {\n            *new_bl->description++ = '\\0';\n            new_bl->description = html_encode(chomp(new_bl->description));\n            if (NULL == new_bl->description)\n            {\n               new_bl->description = strdup(\"Out of memory while encoding this filter's description to HTML\");\n            }\n         }\n         else\n         {\n            new_bl->description = strdup(\"No description available for this filter\");\n         }\n\n         new_bl->name = strdup(chomp(new_bl->name));\n\n         /*\n          * If this is the first filter block, chain it\n          * to the file_list rather than its (nonexistant)\n          * predecessor\n          */\n         if (fs->f == NULL)\n         {\n            fs->f = new_bl;\n         }\n         else\n         {\n            assert(NULL != bl);\n            bl->next = new_bl;\n         }\n         bl = new_bl;\n\n         log_error(LOG_LEVEL_RE_FILTER, \"Reading in filter \\\"%s\\\" (\\\"%s\\\")\", bl->name, bl->description);\n\n         freez(buf);\n         continue;\n      }\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n      if ((bl != NULL) && (bl->type == FT_EXTERNAL_CONTENT_FILTER))\n      {\n         /* Save the code as \"pattern\", but do not compile anything. */\n         if (bl->patterns->first != NULL)\n         {\n            log_error(LOG_LEVEL_FATAL, \"External filter '%s' contains several jobss. \"\n               \"Did you forget to escape a line break?\",\n               bl->name);\n         }\n         error = enlist(bl->patterns, buf);\n         if (JB_ERR_MEMORY == error)\n         {\n            log_error(LOG_LEVEL_FATAL,\n               \"Out of memory while enlisting external filter code \\'%s\\' for filter %s.\",\n               buf, bl->name);\n         }\n         freez(buf);\n         continue;\n      }\n#endif\n      if (bl != NULL)\n      {\n         /*\n          * Save the expression, make it a pcrs_job\n          * and chain it into the current filter's joblist\n          */\n         error = enlist(bl->patterns, buf);\n         if (JB_ERR_MEMORY == error)\n         {\n            log_error(LOG_LEVEL_FATAL,\n               \"Out of memory while enlisting re_filter job \\'%s\\' for filter %s.\", buf, bl->name);\n         }\n         assert(JB_ERR_OK == error);\n\n         if (pcrs_job_is_dynamic(buf))\n         {\n            /*\n             * Dynamic pattern that might contain variables\n             * and has to be recompiled for every request\n             */\n            if (bl->joblist != NULL)\n            {\n                pcrs_free_joblist(bl->joblist);\n                bl->joblist = NULL;\n            }\n            bl->dynamic = 1;\n            log_error(LOG_LEVEL_RE_FILTER,\n               \"Adding dynamic re_filter job \\'%s\\' to filter %s succeeded.\", buf, bl->name);\n            freez(buf);\n            continue;\n         }\n         else if (bl->dynamic)\n         {\n            /*\n             * A previous job was dynamic and as we\n             * recompile the whole filter anyway, it\n             * makes no sense to compile this job now.\n             */\n            log_error(LOG_LEVEL_RE_FILTER,\n               \"Adding static re_filter job \\'%s\\' to dynamic filter %s succeeded.\", buf, bl->name);\n            freez(buf);\n            continue;\n         }\n\n         if ((dummy = pcrs_compile_command(buf, &error)) == NULL)\n         {\n            log_error(LOG_LEVEL_ERROR,\n               \"Adding re_filter job \\'%s\\' to filter %s failed: %s\",\n               buf, bl->name, pcrs_strerror(error));\n            freez(buf);\n            continue;\n         }\n         else\n         {\n            if (bl->joblist == NULL)\n            {\n               bl->joblist = dummy;\n            }\n            else if (NULL != lastjob)\n            {\n               lastjob->next = dummy;\n            }\n            lastjob = dummy;\n            log_error(LOG_LEVEL_RE_FILTER, \"Adding re_filter job \\'%s\\' to filter %s succeeded.\", buf, bl->name);\n         }\n      }\n      else\n      {\n         log_error(LOG_LEVEL_ERROR, \"Ignoring job %s outside filter block in %s, line %d\",\n            buf, csp->config->re_filterfile[fileid], linenum);\n      }\n      freez(buf);\n   }\n\n   fclose(fp);\n\n   /*\n    * Schedule the now-obsolete old data for unloading\n    */\n   if (NULL != current_re_filterfile[fileid])\n   {\n      current_re_filterfile[fileid]->unloader = unload_re_filterfile;\n   }\n\n   /*\n    * Chain this file into the global list of loaded files\n    */\n   fs->next    = files->next;\n   files->next = fs;\n   current_re_filterfile[fileid] = fs;\n   csp->rlist[fileid] = fs;\n\n   return(0);\n\nload_re_filterfile_error:\n   log_error(LOG_LEVEL_FATAL, \"can't load re_filterfile '%s': %E\",\n             csp->config->re_filterfile[fileid]);\n   return(-1);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  add_loader\n *\n * Description :  Called from `load_config'.  Called once for each input\n *                file found in config.\n *\n * Parameters  :\n *          1  :  loader = pointer to a function that can parse and load\n *                the appropriate config file.\n *          2  :  config = The configuration_spec to add the loader to.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid add_loader(int (*loader)(struct client_state *),\n                struct configuration_spec * config)\n{\n   int i;\n\n   for (i = 0; i < NLOADERS; i++)\n   {\n      if (config->loaders[i] == NULL)\n      {\n         config->loaders[i] = loader;\n         break;\n      }\n   }\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  run_loader\n *\n * Description :  Called from `load_config' and `listen_loop'.  This\n *                function keeps the \"csp\" current with any file mods\n *                since the last loop.  If a file is unchanged, the\n *                loader functions do NOT reload the file.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *                      Must be non-null.  Reads: \"csp->config\"\n *                      Writes: various data members.\n *\n * Returns     :  0 => Ok, everything else is an error.\n *\n *********************************************************************/\nint run_loader(struct client_state *csp)\n{\n   int ret = 0;\n   int i;\n\n   for (i = 0; i < NLOADERS; i++)\n   {\n      if (csp->config->loaders[i] == NULL)\n      {\n         break;\n      }\n      ret |= (csp->config->loaders[i])(csp);\n   }\n   return(ret);\n\n}\n\n/*********************************************************************\n *\n * Function    :  file_has_been_modified\n *\n * Description :  Helper function to check if a file has been changed\n *\n * Parameters  :\n *          1  : filename = The name of the file to check\n *          2  : last_known_modification = The time of the last known\n *                                         modification\n *\n * Returns     :  TRUE if the file has been changed,\n *                FALSE otherwise.\n *\n *********************************************************************/\nstatic int file_has_been_modified(const char *filename, time_t last_know_modification)\n{\n   struct stat statbuf[1];\n\n   if (stat(filename, statbuf) < 0)\n   {\n      /* Error, probably file not found which counts as change. */\n      return 1;\n   }\n\n   return (last_know_modification != statbuf->st_mtime);\n}\n\n\n/*********************************************************************\n *\n * Function    :  any_loaded_file_changed\n *\n * Description :  Helper function to check if any loaded file has been\n *                changed since the time it has been loaded.\n *\n *                XXX: Should we cache the return value for x seconds?\n *\n * Parameters  :\n *          1  : files_to_check = List of files to check\n *\n * Returns     : TRUE if any file has been changed,\n *               FALSE otherwise.\n *\n *********************************************************************/\nint any_loaded_file_changed(const struct client_state *csp)\n{\n   const struct file_list *file_to_check = csp->config->config_file_list;\n   int i;\n\n   if (file_has_been_modified(file_to_check->filename, file_to_check->lastmodified))\n   {\n      return TRUE;\n   }\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->actions_list[i])\n      {\n         file_to_check = csp->actions_list[i];\n         if (file_has_been_modified(file_to_check->filename, file_to_check->lastmodified))\n         {\n            return TRUE;\n         }\n      }\n   }\n\n   for (i = 0; i < MAX_AF_FILES; i++)\n   {\n      if (csp->rlist[i])\n      {\n         file_to_check = csp->rlist[i];\n         if (file_has_been_modified(file_to_check->filename, file_to_check->lastmodified))\n         {\n            return TRUE;\n         }\n      }\n   }\n\n#ifdef FEATURE_TRUST\n   if (csp->tlist)\n   {\n      if (file_has_been_modified(csp->tlist->filename, csp->tlist->lastmodified))\n      {\n         return TRUE;\n      }\n   }\n#endif /* def FEATURE_TRUST */\n\n   return FALSE;\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/loaders.h",
    "content": "#ifndef LOADERS_H_INCLUDED\n#define LOADERS_H_INCLUDED\n#define LOADERS_H_VERSION \"$Id: loaders.h,v 1.32 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/loaders.h,v $\n *\n * Purpose     :  Functions to load and unload the various\n *                configuration files.  Also contains code to manage\n *                the list of active loaders, and to automatically\n *                unload files that are no longer in use.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2010 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\nextern unsigned int sweep(void);\nextern char *read_config_line(FILE *fp, unsigned long *linenum, char **buf);\nextern int check_file_changed(const struct file_list * current,\n                              const char * filename,\n                              struct file_list ** newfl);\n\nextern jb_err edit_read_line(FILE *fp,\n                             char **raw_out,\n                             char **prefix_out,\n                             char **data_out,\n                             int *newline,\n                             unsigned long *line_number);\n\nextern jb_err simple_read_line(FILE *fp, char **dest, int *newline);\n\n/*\n * Various types of newlines that a file may contain.\n */\n#define NEWLINE_UNKNOWN 0  /* Newline convention in file is unknown */\n#define NEWLINE_UNIX    1  /* Newline convention in file is '\\n'   (ASCII 10) */\n#define NEWLINE_DOS     2  /* Newline convention in file is '\\r\\n' (ASCII 13,10) */\n#define NEWLINE_MAC     3  /* Newline convention in file is '\\r'   (ASCII 13) */\n\n/*\n * Types of newlines that a file may contain, as strings.  If you have an\n * extremely weird compiler that does not have '\\r' == CR == ASCII 13 and\n * '\\n' == LF == ASCII 10), then fix CHAR_CR and CHAR_LF in loaders.c as\n * well as these definitions.\n */\n#define NEWLINE(style) ((style)==NEWLINE_DOS ? \"\\r\\n\" : \\\n                        ((style)==NEWLINE_MAC ? \"\\r\" : \"\\n\"))\n\n\nextern short int MustReload;\nextern int load_action_files(struct client_state *csp);\nextern int load_re_filterfiles(struct client_state *csp);\n\n#ifdef FEATURE_TRUST\nextern int load_trustfile(struct client_state *csp);\n#endif /* def FEATURE_TRUST */\n\n#ifdef FEATURE_GRACEFUL_TERMINATION\n#ifdef FEATURE_TRUST\nvoid unload_current_trust_file(void);\n#endif\nvoid unload_current_re_filterfile(void);\n#endif /* FEATURE_GRACEFUL_TERMINATION */\n\nvoid unload_forward_spec(struct forward_spec *fwd);\n\nvoid unload_forward_ip_spec(struct forward_spec *fwd);\n\nextern void add_loader(int (*loader)(struct client_state *),\n                       struct configuration_spec * config);\nextern int run_loader(struct client_state *csp);\n\nextern int any_loaded_file_changed(const struct client_state *csp);\n\n/* Revision control strings from this header and associated .c file */\nextern const char loaders_rcs[];\nextern const char loaders_h_rcs[];\n\n#endif /* ndef LOADERS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/miscutil.c",
    "content": "const char miscutil_rcs[] = \"$Id: miscutil.c,v 1.80 2016/01/16 12:33:36 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $\n *\n * Purpose     :  zalloc, hash_string, strcmpic, strncmpic, and\n *                MinGW32 strdup functions.  These are each too small\n *                to deserve their own file but don't really fit in\n *                any other file.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                The timegm replacement function was taken from GnuPG,\n *                Copyright (C) 2004 Free Software Foundation, Inc.\n *\n *                The snprintf replacement function is written by\n *                Mark Martinec who also holds the copyright. It can be\n *                used under the terms of the GPL or the terms of the\n *                \"Frontier Artistic License\".\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <stdio.h>\n#include <sys/types.h>\n#include <stdlib.h>\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif /* #if !defined(_WIN32) && !defined(__OS2__) */\n#include <string.h>\n#include <ctype.h>\n#include <assert.h>\n\n#if !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV)\n#include <time.h>\n#endif /* !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV) */\n\n#include \"project.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n#include \"jcc.h\"\n\nconst char miscutil_h_rcs[] = MISCUTIL_H_VERSION;\n\n/*********************************************************************\n *\n * Function    :  zalloc\n *\n * Description :  Malloc some memory and set it to '\\0'.\n *\n * Parameters  :\n *          1  :  size = Size of memory chunk to return.\n *\n * Returns     :  Pointer to newly malloc'd memory chunk.\n *\n *********************************************************************/\nvoid *zalloc(size_t size)\n{\n   void * ret;\n\n   if ((ret = (void *)malloc(size)) != NULL)\n   {\n      memset(ret, 0, size);\n   }\n\n   return(ret);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  strdup_or_die\n *\n * Description :  strdup wrapper that either succeeds or causes\n *                program termination.\n *\n *                Useful in situations were the string length is\n *                \"small\" and strdup() failures couldn't be handled\n *                better anyway. In case of debug builds, failures\n *                trigger an assert().\n *\n * Parameters  :\n *          1  :  str = String to duplicate\n *\n * Returns     :  Pointer to newly strdup'd copy of the string.\n *\n *********************************************************************/\nchar *strdup_or_die(const char *str)\n{\n   char *new_str;\n\n   new_str = strdup(str);\n\n   if (new_str == NULL)\n   {\n      assert(new_str != NULL);\n      log_error(LOG_LEVEL_FATAL, \"Out of memory in strdup_or_die().\");\n      exit(1);\n   }\n\n   return(new_str);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  malloc_or_die\n *\n * Description :  malloc wrapper that either succeeds or causes\n *                program termination.\n *\n *                Useful in situations were the buffer size is \"small\"\n *                and malloc() failures couldn't be handled better\n *                anyway. In case of debug builds, failures trigger\n *                an assert().\n *\n * Parameters  :\n *          1  :  buffer_size = Size of the space to allocate\n *\n * Returns     :  Pointer to newly malloc'd memory\n *\n *********************************************************************/\nvoid *malloc_or_die(size_t buffer_size)\n{\n   char *new_buf;\n\n   if (buffer_size == 0)\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"malloc_or_die() called with buffer size 0\");\n      assert(buffer_size != 0);\n      buffer_size = 4096;\n   }\n\n   new_buf = malloc(buffer_size);\n\n   if (new_buf == NULL)\n   {\n      assert(new_buf != NULL);\n      log_error(LOG_LEVEL_FATAL, \"Out of memory in malloc_or_die().\");\n      exit(1);\n   }\n\n   return(new_buf);\n\n}\n\n\n#if defined(unix)\n/*********************************************************************\n *\n * Function    :  write_pid_file\n *\n * Description :  Writes a pid file with the pid of the main process\n *\n * Parameters  :  None\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid write_pid_file(void)\n{\n   FILE   *fp;\n\n   /*\n    * If no --pidfile option was given,\n    * we can live without one.\n    */\n   if (pidfile == NULL) return;\n\n   if ((fp = fopen(pidfile, \"w\")) == NULL)\n   {\n      log_error(LOG_LEVEL_INFO, \"can't open pidfile '%s': %E\", pidfile);\n   }\n   else\n   {\n      fprintf(fp, \"%u\\n\", (unsigned int) getpid());\n      fclose (fp);\n   }\n   return;\n\n}\n#endif /* def unix */\n\n\n/*********************************************************************\n *\n * Function    :  hash_string\n *\n * Description :  Take a string and compute a (hopefuly) unique numeric\n *                integer value. This is useful to \"switch\" a string.\n *\n * Parameters  :\n *          1  :  s : string to be hashed.\n *\n * Returns     :  The string's hash\n *\n *********************************************************************/\nunsigned int hash_string(const char* s)\n{\n   unsigned int h = 0;\n\n   for (; *s; ++s)\n   {\n      h = 5 * h + (unsigned int)*s;\n   }\n\n   return (h);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  strcmpic\n *\n * Description :  Case insensitive string comparison\n *\n * Parameters  :\n *          1  :  s1 = string 1 to compare\n *          2  :  s2 = string 2 to compare\n *\n * Returns     :  0 if s1==s2, Negative if s1<s2, Positive if s1>s2\n *\n *********************************************************************/\nint strcmpic(const char *s1, const char *s2)\n{\n   if (!s1) s1 = \"\";\n   if (!s2) s2 = \"\";\n\n   while (*s1 && *s2)\n   {\n      if ((*s1 != *s2) && (privoxy_tolower(*s1) != privoxy_tolower(*s2)))\n      {\n         break;\n      }\n      s1++, s2++;\n   }\n   return(privoxy_tolower(*s1) - privoxy_tolower(*s2));\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  strncmpic\n *\n * Description :  Case insensitive string comparison (up to n characters)\n *\n * Parameters  :\n *          1  :  s1 = string 1 to compare\n *          2  :  s2 = string 2 to compare\n *          3  :  n = maximum characters to compare\n *\n * Returns     :  0 if s1==s2, Negative if s1<s2, Positive if s1>s2\n *\n *********************************************************************/\nint strncmpic(const char *s1, const char *s2, size_t n)\n{\n   if (n <= (size_t)0) return(0);\n   if (!s1) s1 = \"\";\n   if (!s2) s2 = \"\";\n\n   while (*s1 && *s2)\n   {\n      if ((*s1 != *s2) && (privoxy_tolower(*s1) != privoxy_tolower(*s2)))\n      {\n         break;\n      }\n\n      if (--n <= (size_t)0) break;\n\n      s1++, s2++;\n   }\n   return(privoxy_tolower(*s1) - privoxy_tolower(*s2));\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  chomp\n *\n * Description :  In-situ-eliminate all leading and trailing whitespace\n *                from a string.\n *\n * Parameters  :\n *          1  :  s : string to be chomped.\n *\n * Returns     :  chomped string\n *\n *********************************************************************/\nchar *chomp(char *string)\n{\n   char *p, *q, *r;\n\n   /*\n    * strip trailing whitespace\n    */\n   p = string + strlen(string);\n   while (p > string && privoxy_isspace(*(p-1)))\n   {\n      p--;\n   }\n   *p = '\\0';\n\n   /*\n    * find end of leading whitespace\n    */\n   q = r = string;\n   while (*q && privoxy_isspace(*q))\n   {\n      q++;\n   }\n\n   /*\n    * if there was any, move the rest forwards\n    */\n   if (q != string)\n   {\n      while (q <= p)\n      {\n         *r++ = *q++;\n      }\n   }\n\n   return(string);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  string_append\n *\n * Description :  Reallocate target_string and append text to it.\n *                This makes it easier to append to malloc'd strings.\n *                This is similar to the (removed) strsav(), but\n *                running out of memory isn't catastrophic.\n *\n *                Programming style:\n *\n *                The following style provides sufficient error\n *                checking for this routine, with minimal clutter\n *                in the source code.  It is recommended if you\n *                have many calls to this function:\n *\n *                char * s = strdup(...); // don't check for error\n *                string_append(&s, ...);  // don't check for error\n *                string_append(&s, ...);  // don't check for error\n *                string_append(&s, ...);  // don't check for error\n *                if (NULL == s) { ... handle error ... }\n *\n *                OR, equivalently:\n *\n *                char * s = strdup(...); // don't check for error\n *                string_append(&s, ...);  // don't check for error\n *                string_append(&s, ...);  // don't check for error\n *                if (string_append(&s, ...)) {... handle error ...}\n *\n * Parameters  :\n *          1  :  target_string = Pointer to old text that is to be\n *                extended.  *target_string will be free()d by this\n *                routine.  target_string must be non-NULL.\n *                If *target_string is NULL, this routine will\n *                do nothing and return with an error - this allows\n *                you to make many calls to this routine and only\n *                check for errors after the last one.\n *          2  :  text_to_append = Text to be appended to old.\n *                Must not be NULL.\n *\n * Returns     :  JB_ERR_OK on success, and sets *target_string\n *                   to newly malloc'ed appended string.  Caller\n *                   must free(*target_string).\n *                JB_ERR_MEMORY on out-of-memory.  (And free()s\n *                   *target_string and sets it to NULL).\n *                JB_ERR_MEMORY if *target_string is NULL.\n *\n *********************************************************************/\njb_err string_append(char **target_string, const char *text_to_append)\n{\n   size_t old_len;\n   char *new_string;\n   size_t new_size;\n\n   assert(target_string);\n   assert(text_to_append);\n\n   if (*target_string == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   if (*text_to_append == '\\0')\n   {\n      return JB_ERR_OK;\n   }\n\n   old_len = strlen(*target_string);\n\n   new_size = strlen(text_to_append) + old_len + 1;\n\n   if (NULL == (new_string = realloc(*target_string, new_size)))\n   {\n      free(*target_string);\n\n      *target_string = NULL;\n      return JB_ERR_MEMORY;\n   }\n\n   strlcpy(new_string + old_len, text_to_append, new_size - old_len);\n\n   *target_string = new_string;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  string_join\n *\n * Description :  Join two strings together.  Frees BOTH the original\n *                strings.  If either or both input strings are NULL,\n *                fails as if it had run out of memory.\n *\n *                For comparison, string_append requires that the\n *                second string is non-NULL, and doesn't free it.\n *\n *                Rationale: Too often, we want to do\n *                string_append(s, html_encode(s2)).  That assert()s\n *                if s2 is NULL or if html_encode() runs out of memory.\n *                It also leaks memory.  Proper checking is cumbersome.\n *                The solution: string_join(s, html_encode(s2)) is safe,\n *                and will free the memory allocated by html_encode().\n *\n * Parameters  :\n *          1  :  target_string = Pointer to old text that is to be\n *                extended.  *target_string will be free()d by this\n *                routine.  target_string must be non-NULL.\n *          2  :  text_to_append = Text to be appended to old.\n *\n * Returns     :  JB_ERR_OK on success, and sets *target_string\n *                   to newly malloc'ed appended string.  Caller\n *                   must free(*target_string).\n *                JB_ERR_MEMORY on out-of-memory, or if\n *                   *target_string or text_to_append is NULL.  (In\n *                   this case, frees *target_string and text_to_append,\n *                   sets *target_string to NULL).\n *\n *********************************************************************/\njb_err string_join(char **target_string, char *text_to_append)\n{\n   jb_err err;\n\n   assert(target_string);\n\n   if (text_to_append == NULL)\n   {\n      freez(*target_string);\n      return JB_ERR_MEMORY;\n   }\n\n   err = string_append(target_string, text_to_append);\n\n   freez(text_to_append);\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  string_toupper\n *\n * Description :  Produce a copy of string with all convertible\n *                characters converted to uppercase.\n *\n * Parameters  :\n *          1  :  string = string to convert\n *\n * Returns     :  Uppercase copy of string if possible,\n *                NULL on out-of-memory or if string was NULL.\n *\n *********************************************************************/\nchar *string_toupper(const char *string)\n{\n   char *result, *p;\n   const char *q;\n\n   if (!string || ((result = (char *) zalloc(strlen(string) + 1)) == NULL))\n   {\n      return NULL;\n   }\n\n   q = string;\n   p = result;\n\n   while (*q != '\\0')\n   {\n      *p++ = (char)toupper((int) *q++);\n   }\n\n   return result;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  string_move\n *\n * Description :  memmove wrapper to move the last part of a string\n *                towards the beginning, overwriting the part in\n *                the middle. strlcpy() can't be used here as the\n *                strings overlap.\n *\n * Parameters  :\n *          1  :  dst = Destination to overwrite\n *          2  :  src = Source to move.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid string_move(char *dst, char *src)\n{\n   assert(dst < src);\n\n   /* +1 to copy the terminating nul as well. */\n   memmove(dst, src, strlen(src)+1);\n}\n\n\n/*********************************************************************\n *\n * Function    :  bindup\n *\n * Description :  Duplicate the first n characters of a string that may\n *                contain '\\0' characters.\n *\n * Parameters  :\n *          1  :  string = string to be duplicated\n *          2  :  len = number of bytes to duplicate\n *\n * Returns     :  pointer to copy, or NULL if failiure\n *\n *********************************************************************/\nchar *bindup(const char *string, size_t len)\n{\n   char *duplicate;\n\n   duplicate = (char *)malloc(len);\n   if (NULL != duplicate)\n   {\n      memcpy(duplicate, string, len);\n   }\n\n   return duplicate;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  make_path\n *\n * Description :  Takes a directory name and a file name, returns\n *                the complete path.  Handles windows/unix differences.\n *                If the file name is already an absolute path, or if\n *                the directory name is NULL or empty, it returns\n *                the filename.\n *\n * Parameters  :\n *          1  :  dir: Name of directory or NULL for none.\n *          2  :  file: Name of file.  Should not be NULL or empty.\n *\n * Returns     :  \"dir/file\" (Or on windows, \"dir\\file\").\n *                It allocates the string on the heap.  Caller frees.\n *                Returns NULL in error (i.e. NULL file or out of\n *                memory)\n *\n *********************************************************************/\nchar * make_path(const char * dir, const char * file)\n{\n#ifdef AMIGA\n   char path[512];\n\n   if (dir)\n   {\n      if (dir[0] == '.')\n      {\n         if (dir[1] == '/')\n         {\n            strncpy(path,dir+2,512);\n         }\n         else\n         {\n            strncpy(path,dir+1,512);\n         }\n      }\n      else\n      {\n         strncpy(path,dir,512);\n      }\n      path[511]=0;\n   }\n   else\n   {\n      path[0]=0;\n   }\n   if (AddPart(path,file,512))\n   {\n      return strdup(path);\n   }\n   else\n   {\n      return NULL;\n   }\n#else /* ndef AMIGA */\n\n   if ((file == NULL) || (*file == '\\0'))\n   {\n      return NULL; /* Error */\n   }\n\n   if ((dir == NULL) || (*dir == '\\0') /* No directory specified */\n#if defined(_WIN32) || defined(__OS2__)\n      || (*file == '\\\\') || (file[1] == ':') /* Absolute path (DOS) */\n#else /* ifndef _WIN32 || __OS2__ */\n      || (*file == '/') /* Absolute path (U*ix) */\n#endif /* ifndef _WIN32 || __OS2__  */\n      )\n   {\n      return strdup(file);\n   }\n   else\n   {\n      char * path;\n      size_t path_size = strlen(dir) + strlen(file) + 2; /* +2 for trailing (back)slash and \\0 */\n\n#if defined(unix)\n      if (*dir != '/' && basedir && *basedir)\n      {\n         /*\n          * Relative path, so start with the base directory.\n          */\n         path_size += strlen(basedir) + 1; /* +1 for the slash */\n         path = malloc(path_size);\n         if (!path) log_error(LOG_LEVEL_FATAL, \"malloc failed!\");\n         strlcpy(path, basedir, path_size);\n         strlcat(path, \"/\", path_size);\n         strlcat(path, dir, path_size);\n      }\n      else\n#endif /* defined unix */\n      {\n         path = malloc(path_size);\n         if (!path) log_error(LOG_LEVEL_FATAL, \"malloc failed!\");\n         strlcpy(path, dir, path_size);\n      }\n\n      assert(NULL != path);\n#if defined(_WIN32) || defined(__OS2__)\n      if (path[strlen(path)-1] != '\\\\')\n      {\n         strlcat(path, \"\\\\\", path_size);\n      }\n#else /* ifndef _WIN32 || __OS2__ */\n      if (path[strlen(path)-1] != '/')\n      {\n         strlcat(path, \"/\", path_size);\n      }\n#endif /* ifndef _WIN32 || __OS2__ */\n      strlcat(path, file, path_size);\n\n      return path;\n   }\n#endif /* ndef AMIGA */\n}\n\n\n/*********************************************************************\n *\n * Function    :  pick_from_range\n *\n * Description :  Pick a positive number out of a given range.\n *                Should only be used if randomness would be nice,\n *                but isn't really necessary.\n *\n * Parameters  :\n *          1  :  range: Highest possible number to pick.\n *\n * Returns     :  Picked number.\n *\n *********************************************************************/\nlong int pick_from_range(long int range)\n{\n   long int number;\n#ifdef _WIN32\n   static unsigned long seed = 0;\n#endif /* def _WIN32 */\n\n   assert(range != 0);\n   assert(range > 0);\n\n   if (range <= 0) return 0;\n\n#ifdef HAVE_RANDOM\n   number = random() % range + 1;\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&rand_mutex);\n#ifdef _WIN32\n   if (!seed)\n   {\n      seed = (unsigned long)(GetCurrentThreadId()+GetTickCount());\n   }\n   srand(seed);\n   seed = (unsigned long)((rand() << 16) + rand());\n#endif /* def _WIN32 */\n   number = (unsigned long)((rand() << 16) + (rand())) % (unsigned long)(range + 1);\n   privoxy_mutex_unlock(&rand_mutex);\n#else\n   /*\n    * XXX: Which platforms reach this and are there\n    * better options than just using rand() and hoping\n    * that it's safe?\n    */\n   log_error(LOG_LEVEL_INFO, \"No thread-safe PRNG available? Header time randomization \"\n      \"might cause crashes, predictable results or even combine these fine options.\");\n   number = rand() % (long int)(range + 1);\n\n#endif /* (def HAVE_RANDOM) */\n\n   return number;\n}\n\n\n#ifdef USE_PRIVOXY_STRLCPY\n/*********************************************************************\n *\n * Function    :  privoxy_strlcpy\n *\n * Description :  strlcpy(3) look-alike for those without decent libc.\n *\n * Parameters  :\n *          1  :  destination: buffer to copy into.\n *          2  :  source: String to copy.\n *          3  :  size: Size of destination buffer.\n *\n * Returns     :  The length of the string that privoxy_strlcpy() tried to create.\n *\n *********************************************************************/\nsize_t privoxy_strlcpy(char *destination, const char *source, const size_t size)\n{\n   if (0 < size)\n   {\n      snprintf(destination, size, \"%s\", source);\n      /*\n       * Platforms that lack strlcpy() also tend to have\n       * a broken snprintf implementation that doesn't\n       * guarantee nul termination.\n       *\n       * XXX: the configure script should detect and reject those.\n       */\n      destination[size-1] = '\\0';\n   }\n   return strlen(source);\n}\n#endif /* def USE_PRIVOXY_STRLCPY */\n\n\n#ifndef HAVE_STRLCAT\n/*********************************************************************\n *\n * Function    :  privoxy_strlcat\n *\n * Description :  strlcat(3) look-alike for those without decent libc.\n *\n * Parameters  :\n *          1  :  destination: C string.\n *          2  :  source: String to copy.\n *          3  :  size: Size of destination buffer.\n *\n * Returns     :  The length of the string that privoxy_strlcat() tried to create.\n *\n *********************************************************************/\nsize_t privoxy_strlcat(char *destination, const char *source, const size_t size)\n{\n   const size_t old_length = strlen(destination);\n   return old_length + strlcpy(destination + old_length, source, size - old_length);\n}\n#endif /* ndef HAVE_STRLCAT */\n\n\n#if !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV)\n/*********************************************************************\n *\n * Function    :  timegm\n *\n * Description :  libc replacement function for the inverse of gmtime().\n *                Copyright (C) 2004 Free Software Foundation, Inc.\n *\n *                Code originally copied from GnuPG, modifications done\n *                for Privoxy: style changed, #ifdefs for _WIN32 added\n *                to have it work on mingw32.\n *\n *                XXX: It's very unlikely to happen, but if the malloc()\n *                call fails the time zone will be permanently set to UTC.\n *\n * Parameters  :\n *          1  :  tm: Broken-down time struct.\n *\n * Returns     :  tm converted into time_t seconds.\n *\n *********************************************************************/\ntime_t timegm(struct tm *tm)\n{\n   time_t answer;\n   char *zone;\n\n   zone = getenv(\"TZ\");\n   putenv(\"TZ=UTC\");\n   tzset();\n   answer = mktime(tm);\n   if (zone)\n   {\n      char *old_zone;\n\n      old_zone = malloc(3 + strlen(zone) + 1);\n      if (old_zone)\n      {\n         strcpy(old_zone, \"TZ=\");\n         strcat(old_zone, zone);\n         putenv(old_zone);\n#ifdef _WIN32\n         free(old_zone);\n#endif /* def _WIN32 */\n      }\n   }\n   else\n   {\n#ifdef HAVE_UNSETENV\n      unsetenv(\"TZ\");\n#elif defined(_WIN32)\n      putenv(\"TZ=\");\n#else\n      putenv(\"TZ\");\n#endif\n   }\n   tzset();\n\n   return answer;\n}\n#endif /* !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV) */\n\n\n#ifndef HAVE_SNPRINTF\n/*\n * What follows is a portable snprintf routine, written by Mark Martinec.\n * See: http://www.ijs.si/software/snprintf/\n\n                                  snprintf.c\n                   - a portable implementation of snprintf,\n       including vsnprintf.c, asnprintf, vasnprintf, asprintf, vasprintf\n\n   snprintf is a routine to convert numeric and string arguments to\n   formatted strings. It is similar to sprintf(3) provided in a system's\n   C library, yet it requires an additional argument - the buffer size -\n   and it guarantees never to store anything beyond the given buffer,\n   regardless of the format or arguments to be formatted. Some newer\n   operating systems do provide snprintf in their C library, but many do\n   not or do provide an inadequate (slow or idiosyncratic) version, which\n   calls for a portable implementation of this routine.\n\nAuthor\n\n   Mark Martinec <mark.martinec@ijs.si>, April 1999, June 2000\n   Copyright � 1999, Mark Martinec\n\n */\n\n#define PORTABLE_SNPRINTF_VERSION_MAJOR 2\n#define PORTABLE_SNPRINTF_VERSION_MINOR 2\n\n#if defined(NEED_ASPRINTF) || defined(NEED_ASNPRINTF) || defined(NEED_VASPRINTF) || defined(NEED_VASNPRINTF)\n# if defined(NEED_SNPRINTF_ONLY)\n# undef NEED_SNPRINTF_ONLY\n# endif\n# if !defined(PREFER_PORTABLE_SNPRINTF)\n# define PREFER_PORTABLE_SNPRINTF\n# endif\n#endif\n\n#if defined(SOLARIS_BUG_COMPATIBLE) && !defined(SOLARIS_COMPATIBLE)\n#define SOLARIS_COMPATIBLE\n#endif\n\n#if defined(HPUX_BUG_COMPATIBLE) && !defined(HPUX_COMPATIBLE)\n#define HPUX_COMPATIBLE\n#endif\n\n#if defined(DIGITAL_UNIX_BUG_COMPATIBLE) && !defined(DIGITAL_UNIX_COMPATIBLE)\n#define DIGITAL_UNIX_COMPATIBLE\n#endif\n\n#if defined(PERL_BUG_COMPATIBLE) && !defined(PERL_COMPATIBLE)\n#define PERL_COMPATIBLE\n#endif\n\n#if defined(LINUX_BUG_COMPATIBLE) && !defined(LINUX_COMPATIBLE)\n#define LINUX_COMPATIBLE\n#endif\n\n#include <sys/types.h>\n#include <string.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <errno.h>\n\n#ifdef isdigit\n#undef isdigit\n#endif\n#define isdigit(c) ((c) >= '0' && (c) <= '9')\n\n/* For copying strings longer or equal to 'breakeven_point'\n * it is more efficient to call memcpy() than to do it inline.\n * The value depends mostly on the processor architecture,\n * but also on the compiler and its optimization capabilities.\n * The value is not critical, some small value greater than zero\n * will be just fine if you don't care to squeeze every drop\n * of performance out of the code.\n *\n * Small values favor memcpy, large values favor inline code.\n */\n#if defined(__alpha__) || defined(__alpha)\n#  define breakeven_point   2    /* AXP (DEC Alpha)     - gcc or cc or egcs */\n#endif\n#if defined(__i386__)  || defined(__i386)\n#  define breakeven_point  12    /* Intel Pentium/Linux - gcc 2.96 */\n#endif\n#if defined(__hppa)\n#  define breakeven_point  10    /* HP-PA               - gcc */\n#endif\n#if defined(__sparc__) || defined(__sparc)\n#  define breakeven_point  33    /* Sun Sparc 5         - gcc 2.8.1 */\n#endif\n\n/* some other values of possible interest: */\n/* #define breakeven_point  8 */ /* VAX 4000          - vaxc */\n/* #define breakeven_point 19 */ /* VAX 4000          - gcc 2.7.0 */\n\n#ifndef breakeven_point\n#  define breakeven_point   6    /* some reasonable one-size-fits-all value */\n#endif\n\n#define fast_memcpy(d,s,n) \\\n  { register size_t nn = (size_t)(n); \\\n    if (nn >= breakeven_point) memcpy((d), (s), nn); \\\n    else if (nn > 0) { /* proc call overhead is worth only for large strings*/\\\n      register char *dd; register const char *ss; \\\n      for (ss=(s), dd=(d); nn>0; nn--) *dd++ = *ss++; } }\n\n#define fast_memset(d,c,n) \\\n  { register size_t nn = (size_t)(n); \\\n    if (nn >= breakeven_point) memset((d), (int)(c), nn); \\\n    else if (nn > 0) { /* proc call overhead is worth only for large strings*/\\\n      register char *dd; register const int cc=(int)(c); \\\n      for (dd=(d); nn>0; nn--) *dd++ = cc; } }\n\n/* prototypes */\n\n#if defined(NEED_ASPRINTF)\nint asprintf   (char **ptr, const char *fmt, /*args*/ ...);\n#endif\n#if defined(NEED_VASPRINTF)\nint vasprintf  (char **ptr, const char *fmt, va_list ap);\n#endif\n#if defined(NEED_ASNPRINTF)\nint asnprintf  (char **ptr, size_t str_m, const char *fmt, /*args*/ ...);\n#endif\n#if defined(NEED_VASNPRINTF)\nint vasnprintf (char **ptr, size_t str_m, const char *fmt, va_list ap);\n#endif\n\n#if defined(HAVE_SNPRINTF)\n/* declare our portable snprintf  routine under name portable_snprintf  */\n/* declare our portable vsnprintf routine under name portable_vsnprintf */\n#else\n/* declare our portable routines under names snprintf and vsnprintf */\n#define portable_snprintf snprintf\n#if !defined(NEED_SNPRINTF_ONLY)\n#define portable_vsnprintf vsnprintf\n#endif\n#endif\n\n#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)\nint portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...);\n#if !defined(NEED_SNPRINTF_ONLY)\nint portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap);\n#endif\n#endif\n\n/* declarations */\n\nstatic char credits[] = \"\\n\\\n@(#)snprintf.c, v2.2: Mark Martinec, <mark.martinec@ijs.si>\\n\\\n@(#)snprintf.c, v2.2: Copyright 1999, Mark Martinec. Frontier Artistic License applies.\\n\\\n@(#)snprintf.c, v2.2: http://www.ijs.si/software/snprintf/\\n\";\n\n#if defined(NEED_ASPRINTF)\nint asprintf(char **ptr, const char *fmt, /*args*/ ...) {\n  va_list ap;\n  size_t str_m;\n  int str_l;\n\n  *ptr = NULL;\n  va_start(ap, fmt);                            /* measure the required size */\n  str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap);\n  va_end(ap);\n  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */\n  *ptr = (char *) malloc(str_m = (size_t)str_l + 1);\n  if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }\n  else {\n    int str_l2;\n    va_start(ap, fmt);\n    str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);\n    va_end(ap);\n    assert(str_l2 == str_l);\n  }\n  return str_l;\n}\n#endif\n\n#if defined(NEED_VASPRINTF)\nint vasprintf(char **ptr, const char *fmt, va_list ap) {\n  size_t str_m;\n  int str_l;\n\n  *ptr = NULL;\n  { va_list ap2;\n    va_copy(ap2, ap);  /* don't consume the original ap, we'll need it again */\n    str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/\n    va_end(ap2);\n  }\n  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */\n  *ptr = (char *) malloc(str_m = (size_t)str_l + 1);\n  if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }\n  else {\n    int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);\n    assert(str_l2 == str_l);\n  }\n  return str_l;\n}\n#endif\n\n#if defined(NEED_ASNPRINTF)\nint asnprintf (char **ptr, size_t str_m, const char *fmt, /*args*/ ...) {\n  va_list ap;\n  int str_l;\n\n  *ptr = NULL;\n  va_start(ap, fmt);                            /* measure the required size */\n  str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap);\n  va_end(ap);\n  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */\n  if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1;      /* truncate */\n  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */\n  if (str_m == 0) {  /* not interested in resulting string, just return size */\n  } else {\n    *ptr = (char *) malloc(str_m);\n    if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }\n    else {\n      int str_l2;\n      va_start(ap, fmt);\n      str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);\n      va_end(ap);\n      assert(str_l2 == str_l);\n    }\n  }\n  return str_l;\n}\n#endif\n\n#if defined(NEED_VASNPRINTF)\nint vasnprintf (char **ptr, size_t str_m, const char *fmt, va_list ap) {\n  int str_l;\n\n  *ptr = NULL;\n  { va_list ap2;\n    va_copy(ap2, ap);  /* don't consume the original ap, we'll need it again */\n    str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/\n    va_end(ap2);\n  }\n  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */\n  if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1;      /* truncate */\n  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */\n  if (str_m == 0) {  /* not interested in resulting string, just return size */\n  } else {\n    *ptr = (char *) malloc(str_m);\n    if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }\n    else {\n      int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);\n      assert(str_l2 == str_l);\n    }\n  }\n  return str_l;\n}\n#endif\n\n/*\n * If the system does have snprintf and the portable routine is not\n * specifically required, this module produces no code for snprintf/vsnprintf.\n */\n#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)\n\n#if !defined(NEED_SNPRINTF_ONLY)\nint portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) {\n  va_list ap;\n  int str_l;\n\n  va_start(ap, fmt);\n  str_l = portable_vsnprintf(str, str_m, fmt, ap);\n  va_end(ap);\n  return str_l;\n}\n#endif\n\n#if defined(NEED_SNPRINTF_ONLY)\nint portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) {\n#else\nint portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) {\n#endif\n\n#if defined(NEED_SNPRINTF_ONLY)\n  va_list ap;\n#endif\n  size_t str_l = 0;\n  const char *p = fmt;\n\n/* In contrast with POSIX, the ISO C99 now says\n * that str can be NULL and str_m can be 0.\n * This is more useful than the old:  if (str_m < 1) return -1; */\n\n#if defined(NEED_SNPRINTF_ONLY)\n  va_start(ap, fmt);\n#endif\n  if (!p) p = \"\";\n  while (*p) {\n    if (*p != '%') {\n   /* if (str_l < str_m) str[str_l++] = *p++;    -- this would be sufficient */\n   /* but the following code achieves better performance for cases\n    * where format string is long and contains few conversions */\n      const char *q = strchr(p+1,'%');\n      size_t n = !q ? strlen(p) : (q-p);\n      if (str_l < str_m) {\n        size_t avail = str_m-str_l;\n        fast_memcpy(str+str_l, p, (n>avail?avail:n));\n      }\n      p += n; str_l += n;\n    } else {\n      const char *starting_p;\n      size_t min_field_width = 0, precision = 0;\n      int zero_padding = 0, precision_specified = 0, justify_left = 0;\n      int alternate_form = 0, force_sign = 0;\n      int space_for_positive = 1; /* If both the ' ' and '+' flags appear,\n                                     the ' ' flag should be ignored. */\n      char length_modifier = '\\0';            /* allowed values: \\0, h, l, L */\n      char tmp[32];/* temporary buffer for simple numeric->string conversion */\n\n      const char *str_arg;      /* string address in case of string argument */\n      size_t str_arg_l;         /* natural field width of arg without padding\n                                   and sign */\n      unsigned char uchar_arg;\n        /* unsigned char argument value - only defined for c conversion.\n           N.B. standard explicitly states the char argument for\n           the c conversion is unsigned */\n\n      size_t number_of_zeros_to_pad = 0;\n        /* number of zeros to be inserted for numeric conversions\n           as required by the precision or minimal field width */\n\n      size_t zero_padding_insertion_ind = 0;\n        /* index into tmp where zero padding is to be inserted */\n\n      char fmt_spec = '\\0';\n        /* current conversion specifier character */\n\n      str_arg = credits;/* just to make compiler happy (defined but not used)*/\n      str_arg = NULL;\n      starting_p = p; p++;  /* skip '%' */\n   /* parse flags */\n      while (*p == '0' || *p == '-' || *p == '+' ||\n             *p == ' ' || *p == '#' || *p == '\\'') {\n        switch (*p) {\n        case '0': zero_padding = 1; break;\n        case '-': justify_left = 1; break;\n        case '+': force_sign = 1; space_for_positive = 0; break;\n        case ' ': force_sign = 1;\n     /* If both the ' ' and '+' flags appear, the ' ' flag should be ignored */\n#ifdef PERL_COMPATIBLE\n     /* ... but in Perl the last of ' ' and '+' applies */\n                  space_for_positive = 1;\n#endif\n                  break;\n        case '#': alternate_form = 1; break;\n        case '\\'': break;\n        }\n        p++;\n      }\n   /* If the '0' and '-' flags both appear, the '0' flag should be ignored. */\n\n   /* parse field width */\n      if (*p == '*') {\n        int j;\n        p++; j = va_arg(ap, int);\n        if (j >= 0) min_field_width = j;\n        else { min_field_width = -j; justify_left = 1; }\n      } else if (isdigit((int)(*p))) {\n        /* size_t could be wider than unsigned int;\n           make sure we treat argument like common implementations do */\n        unsigned int uj = *p++ - '0';\n        while (isdigit((int)(*p))) uj = 10*uj + (unsigned int)(*p++ - '0');\n        min_field_width = uj;\n      }\n   /* parse precision */\n      if (*p == '.') {\n        p++; precision_specified = 1;\n        if (*p == '*') {\n          int j = va_arg(ap, int);\n          p++;\n          if (j >= 0) precision = j;\n          else {\n            precision_specified = 0; precision = 0;\n         /* NOTE:\n          *   Solaris 2.6 man page claims that in this case the precision\n          *   should be set to 0.  Digital Unix 4.0, HPUX 10 and BSD man page\n          *   claim that this case should be treated as unspecified precision,\n          *   which is what we do here.\n          */\n          }\n        } else if (isdigit((int)(*p))) {\n          /* size_t could be wider than unsigned int;\n             make sure we treat argument like common implementations do */\n          unsigned int uj = *p++ - '0';\n          while (isdigit((int)(*p))) uj = 10*uj + (unsigned int)(*p++ - '0');\n          precision = uj;\n        }\n      }\n   /* parse 'h', 'l' and 'll' length modifiers */\n      if (*p == 'h' || *p == 'l') {\n        length_modifier = *p; p++;\n        if (length_modifier == 'l' && *p == 'l') {   /* double l = long long */\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n          length_modifier = '2';                  /* double l encoded as '2' */\n#else\n          length_modifier = 'l';                 /* treat it as a single 'l' */\n#endif\n          p++;\n        }\n      }\n      fmt_spec = *p;\n   /* common synonyms: */\n      switch (fmt_spec) {\n      case 'i': fmt_spec = 'd'; break;\n      case 'D': fmt_spec = 'd'; length_modifier = 'l'; break;\n      case 'U': fmt_spec = 'u'; length_modifier = 'l'; break;\n      case 'O': fmt_spec = 'o'; length_modifier = 'l'; break;\n      default: break;\n      }\n   /* get parameter value, do initial processing */\n      switch (fmt_spec) {\n      case '%': /* % behaves similar to 's' regarding flags and field widths */\n      case 'c': /* c behaves similar to 's' regarding flags and field widths */\n      case 's':\n        length_modifier = '\\0';          /* wint_t and wchar_t not supported */\n     /* the result of zero padding flag with non-numeric conversion specifier*/\n     /* is undefined. Solaris and HPUX 10 does zero padding in this case,    */\n     /* Digital Unix and Linux does not. */\n#if !defined(SOLARIS_COMPATIBLE) && !defined(HPUX_COMPATIBLE)\n        zero_padding = 0;    /* turn zero padding off for string conversions */\n#endif\n        str_arg_l = 1;\n        switch (fmt_spec) {\n        case '%':\n          str_arg = p; break;\n        case 'c': {\n          int j = va_arg(ap, int);\n          uchar_arg = (unsigned char) j;   /* standard demands unsigned char */\n          str_arg = (const char *) &uchar_arg;\n          break;\n        }\n        case 's':\n          str_arg = va_arg(ap, const char *);\n          if (!str_arg) str_arg_l = 0;\n       /* make sure not to address string beyond the specified precision !!! */\n          else if (!precision_specified) str_arg_l = strlen(str_arg);\n       /* truncate string if necessary as requested by precision */\n          else if (precision == 0) str_arg_l = 0;\n          else {\n       /* memchr on HP does not like n > 2^31  !!! */\n            const char *q = memchr(str_arg, '\\0',\n                             precision <= 0x7fffffff ? precision : 0x7fffffff);\n            str_arg_l = !q ? precision : (q-str_arg);\n          }\n          break;\n        default: break;\n        }\n        break;\n      case 'd': case 'u': case 'o': case 'x': case 'X': case 'p': {\n        /* NOTE: the u, o, x, X and p conversion specifiers imply\n                 the value is unsigned;  d implies a signed value */\n\n        int arg_sign = 0;\n          /* 0 if numeric argument is zero (or if pointer is NULL for 'p'),\n            +1 if greater than zero (or nonzero for unsigned arguments),\n            -1 if negative (unsigned argument is never negative) */\n\n        int int_arg = 0;  unsigned int uint_arg = 0;\n          /* only defined for length modifier h, or for no length modifiers */\n\n        long int long_arg = 0;  unsigned long int ulong_arg = 0;\n          /* only defined for length modifier l */\n\n        void *ptr_arg = NULL;\n          /* pointer argument value -only defined for p conversion */\n\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n        long long int long_long_arg = 0;\n        unsigned long long int ulong_long_arg = 0;\n          /* only defined for length modifier ll */\n#endif\n        if (fmt_spec == 'p') {\n        /* HPUX 10: An l, h, ll or L before any other conversion character\n         *   (other than d, i, u, o, x, or X) is ignored.\n         * Digital Unix:\n         *   not specified, but seems to behave as HPUX does.\n         * Solaris: If an h, l, or L appears before any other conversion\n         *   specifier (other than d, i, u, o, x, or X), the behavior\n         *   is undefined. (Actually %hp converts only 16-bits of address\n         *   and %llp treats address as 64-bit data which is incompatible\n         *   with (void *) argument on a 32-bit system).\n         */\n#ifdef SOLARIS_COMPATIBLE\n#  ifdef SOLARIS_BUG_COMPATIBLE\n          /* keep length modifiers even if it represents 'll' */\n#  else\n          if (length_modifier == '2') length_modifier = '\\0';\n#  endif\n#else\n          length_modifier = '\\0';\n#endif\n          ptr_arg = va_arg(ap, void *);\n          if (ptr_arg != NULL) arg_sign = 1;\n        } else if (fmt_spec == 'd') {  /* signed */\n          switch (length_modifier) {\n          case '\\0':\n          case 'h':\n         /* It is non-portable to specify a second argument of char or short\n          * to va_arg, because arguments seen by the called function\n          * are not char or short.  C converts char and short arguments\n          * to int before passing them to a function.\n          */\n            int_arg = va_arg(ap, int);\n            if      (int_arg > 0) arg_sign =  1;\n            else if (int_arg < 0) arg_sign = -1;\n            break;\n          case 'l':\n            long_arg = va_arg(ap, long int);\n            if      (long_arg > 0) arg_sign =  1;\n            else if (long_arg < 0) arg_sign = -1;\n            break;\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n          case '2':\n            long_long_arg = va_arg(ap, long long int);\n            if      (long_long_arg > 0) arg_sign =  1;\n            else if (long_long_arg < 0) arg_sign = -1;\n            break;\n#endif\n          }\n        } else {  /* unsigned */\n          switch (length_modifier) {\n          case '\\0':\n          case 'h':\n            uint_arg = va_arg(ap, unsigned int);\n            if (uint_arg) arg_sign = 1;\n            break;\n          case 'l':\n            ulong_arg = va_arg(ap, unsigned long int);\n            if (ulong_arg) arg_sign = 1;\n            break;\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n          case '2':\n            ulong_long_arg = va_arg(ap, unsigned long long int);\n            if (ulong_long_arg) arg_sign = 1;\n            break;\n#endif\n          }\n        }\n        str_arg = tmp; str_arg_l = 0;\n     /* NOTE:\n      *   For d, i, u, o, x, and X conversions, if precision is specified,\n      *   the '0' flag should be ignored. This is so with Solaris 2.6,\n      *   Digital UNIX 4.0, HPUX 10, Linux, FreeBSD, NetBSD; but not with Perl.\n      */\n#ifndef PERL_COMPATIBLE\n        if (precision_specified) zero_padding = 0;\n#endif\n        if (fmt_spec == 'd') {\n          if (force_sign && arg_sign >= 0)\n            tmp[str_arg_l++] = space_for_positive ? ' ' : '+';\n         /* leave negative numbers for sprintf to handle,\n            to avoid handling tricky cases like (short int)(-32768) */\n#ifdef LINUX_COMPATIBLE\n        } else if (fmt_spec == 'p' && force_sign && arg_sign > 0) {\n          tmp[str_arg_l++] = space_for_positive ? ' ' : '+';\n#endif\n        } else if (alternate_form) {\n          if (arg_sign != 0 && (fmt_spec == 'x' || fmt_spec == 'X') )\n            { tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = fmt_spec; }\n         /* alternate form should have no effect for p conversion, but ... */\n#ifdef HPUX_COMPATIBLE\n          else if (fmt_spec == 'p'\n         /* HPUX 10: for an alternate form of p conversion,\n          *          a nonzero result is prefixed by 0x. */\n#ifndef HPUX_BUG_COMPATIBLE\n         /* Actually it uses 0x prefix even for a zero value. */\n                   && arg_sign != 0\n#endif\n                  ) { tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = 'x'; }\n#endif\n        }\n        zero_padding_insertion_ind = str_arg_l;\n        if (!precision_specified) precision = 1;   /* default precision is 1 */\n        if (precision == 0 && arg_sign == 0\n#if defined(HPUX_BUG_COMPATIBLE) || defined(LINUX_COMPATIBLE)\n            && fmt_spec != 'p'\n         /* HPUX 10 man page claims: With conversion character p the result of\n          * converting a zero value with a precision of zero is a null string.\n          * Actually HP returns all zeroes, and Linux returns \"(nil)\". */\n#endif\n        ) {\n         /* converted to null string */\n         /* When zero value is formatted with an explicit precision 0,\n            the resulting formatted string is empty (d, i, u, o, x, X, p).   */\n        } else {\n          char f[5]; int f_l = 0;\n          f[f_l++] = '%';    /* construct a simple format string for sprintf */\n          if (!length_modifier) { }\n          else if (length_modifier=='2') { f[f_l++] = 'l'; f[f_l++] = 'l'; }\n          else f[f_l++] = length_modifier;\n          f[f_l++] = fmt_spec; f[f_l++] = '\\0';\n          if (fmt_spec == 'p') str_arg_l += sprintf(tmp+str_arg_l, f, ptr_arg);\n          else if (fmt_spec == 'd') {  /* signed */\n            switch (length_modifier) {\n            case '\\0':\n            case 'h': str_arg_l+=sprintf(tmp+str_arg_l, f, int_arg);  break;\n            case 'l': str_arg_l+=sprintf(tmp+str_arg_l, f, long_arg); break;\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n            case '2': str_arg_l+=sprintf(tmp+str_arg_l,f,long_long_arg); break;\n#endif\n            }\n          } else {  /* unsigned */\n            switch (length_modifier) {\n            case '\\0':\n            case 'h': str_arg_l+=sprintf(tmp+str_arg_l, f, uint_arg);  break;\n            case 'l': str_arg_l+=sprintf(tmp+str_arg_l, f, ulong_arg); break;\n#ifdef SNPRINTF_LONGLONG_SUPPORT\n            case '2': str_arg_l+=sprintf(tmp+str_arg_l,f,ulong_long_arg);break;\n#endif\n            }\n          }\n         /* include the optional minus sign and possible \"0x\"\n            in the region before the zero padding insertion point */\n          if (zero_padding_insertion_ind < str_arg_l &&\n              tmp[zero_padding_insertion_ind] == '-') {\n            zero_padding_insertion_ind++;\n          }\n          if (zero_padding_insertion_ind+1 < str_arg_l &&\n              tmp[zero_padding_insertion_ind]   == '0' &&\n             (tmp[zero_padding_insertion_ind+1] == 'x' ||\n              tmp[zero_padding_insertion_ind+1] == 'X') ) {\n            zero_padding_insertion_ind += 2;\n          }\n        }\n        { size_t num_of_digits = str_arg_l - zero_padding_insertion_ind;\n          if (alternate_form && fmt_spec == 'o'\n#ifdef HPUX_COMPATIBLE                                  /* (\"%#.o\",0) -> \"\"  */\n              && (str_arg_l > 0)\n#endif\n#ifdef DIGITAL_UNIX_BUG_COMPATIBLE                      /* (\"%#o\",0) -> \"00\" */\n#else\n              /* unless zero is already the first character */\n              && !(zero_padding_insertion_ind < str_arg_l\n                   && tmp[zero_padding_insertion_ind] == '0')\n#endif\n          ) {        /* assure leading zero for alternate-form octal numbers */\n            if (!precision_specified || precision < num_of_digits+1) {\n             /* precision is increased to force the first character to be zero,\n                except if a zero value is formatted with an explicit precision\n                of zero */\n              precision = num_of_digits+1; precision_specified = 1;\n            }\n          }\n       /* zero padding to specified precision? */\n          if (num_of_digits < precision)\n            number_of_zeros_to_pad = precision - num_of_digits;\n        }\n     /* zero padding to specified minimal field width? */\n        if (!justify_left && zero_padding) {\n          int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);\n          if (n > 0) number_of_zeros_to_pad += n;\n        }\n        break;\n      }\n      default: /* unrecognized conversion specifier, keep format string as-is*/\n        zero_padding = 0;  /* turn zero padding off for non-numeric convers. */\n#ifndef DIGITAL_UNIX_COMPATIBLE\n        justify_left = 1; min_field_width = 0;                /* reset flags */\n#endif\n#if defined(PERL_COMPATIBLE) || defined(LINUX_COMPATIBLE)\n     /* keep the entire format string unchanged */\n        str_arg = starting_p; str_arg_l = p - starting_p;\n     /* well, not exactly so for Linux, which does something between,\n      * and I don't feel an urge to imitate it: \"%+++++hy\" -> \"%+y\"  */\n#else\n     /* discard the unrecognized conversion, just keep *\n      * the unrecognized conversion character          */\n        str_arg = p; str_arg_l = 0;\n#endif\n        if (*p) str_arg_l++;  /* include invalid conversion specifier unchanged\n                                 if not at end-of-string */\n        break;\n      }\n      if (*p) p++;      /* step over the just processed conversion specifier */\n   /* insert padding to the left as requested by min_field_width;\n      this does not include the zero padding in case of numerical conversions*/\n      if (!justify_left) {                /* left padding with blank or zero */\n        int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);\n        if (n > 0) {\n          if (str_l < str_m) {\n            size_t avail = str_m-str_l;\n            fast_memset(str+str_l, (zero_padding?'0':' '), (n>avail?avail:n));\n          }\n          str_l += n;\n        }\n      }\n   /* zero padding as requested by the precision or by the minimal field width\n    * for numeric conversions required? */\n      if (number_of_zeros_to_pad <= 0) {\n     /* will not copy first part of numeric right now, *\n      * force it to be copied later in its entirety    */\n        zero_padding_insertion_ind = 0;\n      } else {\n     /* insert first part of numerics (sign or '0x') before zero padding */\n        int n = zero_padding_insertion_ind;\n        if (n > 0) {\n          if (str_l < str_m) {\n            size_t avail = str_m-str_l;\n            fast_memcpy(str+str_l, str_arg, (n>avail?avail:n));\n          }\n          str_l += n;\n        }\n     /* insert zero padding as requested by the precision or min field width */\n        n = number_of_zeros_to_pad;\n        if (n > 0) {\n          if (str_l < str_m) {\n            size_t avail = str_m-str_l;\n            fast_memset(str+str_l, '0', (n>avail?avail:n));\n          }\n          str_l += n;\n        }\n      }\n   /* insert formatted string\n    * (or as-is conversion specifier for unknown conversions) */\n      { int n = str_arg_l - zero_padding_insertion_ind;\n        if (n > 0) {\n          if (str_l < str_m) {\n            size_t avail = str_m-str_l;\n            fast_memcpy(str+str_l, str_arg+zero_padding_insertion_ind,\n                        (n>avail?avail:n));\n          }\n          str_l += n;\n        }\n      }\n   /* insert right padding */\n      if (justify_left) {          /* right blank padding to the field width */\n        int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);\n        if (n > 0) {\n          if (str_l < str_m) {\n            size_t avail = str_m-str_l;\n            fast_memset(str+str_l, ' ', (n>avail?avail:n));\n          }\n          str_l += n;\n        }\n      }\n    }\n  }\n#if defined(NEED_SNPRINTF_ONLY)\n  va_end(ap);\n#endif\n  if (str_m > 0) { /* make sure the string is null-terminated\n                      even at the expense of overwriting the last character\n                      (shouldn't happen, but just in case) */\n    str[str_l <= str_m-1 ? str_l : str_m-1] = '\\0';\n  }\n  /* Return the number of characters formatted (excluding trailing null\n   * character), that is, the number of characters that would have been\n   * written to the buffer if it were large enough.\n   *\n   * The value of str_l should be returned, but str_l is of unsigned type\n   * size_t, and snprintf is int, possibly leading to an undetected\n   * integer overflow, resulting in a negative return value, which is illegal.\n   * Both XSH5 and ISO C99 (at least the draft) are silent on this issue.\n   * Should errno be set to EOVERFLOW and EOF returned in this case???\n   */\n  return (int) str_l;\n}\n#endif\n#endif /* ndef HAVE_SNPRINTF */\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/miscutil.h",
    "content": "#ifndef MISCUTIL_H_INCLUDED\n#define MISCUTIL_H_INCLUDED\n#define MISCUTIL_H_VERSION \"$Id: miscutil.h,v 1.37 2012/11/24 13:58:17 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/miscutil.h,v $\n *\n * Purpose     :  zalloc, hash_string, strcmpic, strncmpic, and\n *                MinGW32 strdup functions.  These are each too small\n *                to deserve their own file but don't really fit in\n *                any other file.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2011 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\nextern const char *basedir;\nextern void *zalloc(size_t size);\nextern char *strdup_or_die(const char *str);\nextern void *malloc_or_die(size_t buffer_size);\n\n#if defined(unix)\nextern void write_pid_file(void);\n#endif /* unix */\n\nextern unsigned int hash_string(const char* s);\n\nextern int strcmpic(const char *s1, const char *s2);\nextern int strncmpic(const char *s1, const char *s2, size_t n);\n\nextern jb_err string_append(char **target_string, const char *text_to_append);\nextern jb_err string_join  (char **target_string,       char *text_to_append);\nextern char *string_toupper(const char *string);\nextern void string_move(char *dst, char *src);\n\nextern char *chomp(char *string);\nextern char *bindup(const char *string, size_t len);\n\nextern char *make_path(const char * dir, const char * file);\n\nlong int pick_from_range(long int range);\n\n#ifndef HAVE_SNPRINTF\nextern int snprintf(char *, size_t, const char *, /*args*/ ...);\n#endif /* ndef HAVE_SNPRINTF */\n\n#if !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV)\ntime_t timegm(struct tm *tm);\n#endif /* !defined(HAVE_TIMEGM) && defined(HAVE_TZSET) && defined(HAVE_PUTENV) */\n\n/* Here's looking at you, Ulrich. */\n#if !defined(HAVE_STRLCPY)\nsize_t privoxy_strlcpy(char *destination, const char *source, size_t size);\n#define strlcpy privoxy_strlcpy\n#define USE_PRIVOXY_STRLCPY 1\n#define HAVE_STRLCPY 1\n#endif /* ndef HAVE_STRLCPY*/\n\n#ifndef HAVE_STRLCAT\nsize_t privoxy_strlcat(char *destination, const char *source, size_t size);\n#define strlcat privoxy_strlcat\n#endif /* ndef HAVE_STRLCAT */\n\n/* Revision control strings from this header and associated .c file */\nextern const char miscutil_rcs[];\nextern const char miscutil_h_rcs[];\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif /* ndef MISCUTIL_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/parsers.c",
    "content": "const char parsers_rcs[] = \"$Id: parsers.c,v 1.307 2016/01/17 14:31:47 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/parsers.c,v $\n *\n * Purpose     :  Declares functions to parse/crunch headers and pages.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2016 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#ifndef _WIN32\n#include <stdio.h>\n#include <sys/types.h>\n#endif\n\n#include <stdlib.h>\n#include <ctype.h>\n#include <assert.h>\n#include <string.h>\n\n#ifdef __GLIBC__\n/*\n * Convince GNU's libc to provide a strptime prototype.\n */\n#define __USE_XOPEN\n#endif /*__GLIBC__ */\n#include <time.h>\n\n#ifdef FEATURE_ZLIB\n#include <zlib.h>\n\n#define GZIP_IDENTIFIER_1       0x1f\n#define GZIP_IDENTIFIER_2       0x8b\n\n#define GZIP_FLAG_CHECKSUM      0x02\n#define GZIP_FLAG_EXTRA_FIELDS  0x04\n#define GZIP_FLAG_FILE_NAME     0x08\n#define GZIP_FLAG_COMMENT       0x10\n#define GZIP_FLAG_RESERVED_BITS 0xe0\n#endif\n\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif\n\n#include \"project.h\"\n\n#ifdef FEATURE_PTHREAD\n#include \"jcc.h\"\n/* jcc.h is for mutex semapores only */\n#endif /* def FEATURE_PTHREAD */\n#include \"list.h\"\n#include \"parsers.h\"\n#include \"ssplit.h\"\n#include \"errlog.h\"\n#include \"jbsockets.h\"\n#include \"miscutil.h\"\n#include \"list.h\"\n#include \"actions.h\"\n#include \"filters.h\"\n\n#ifndef HAVE_STRPTIME\n#include \"strptime.h\"\n#endif\n\nconst char parsers_h_rcs[] = PARSERS_H_VERSION;\n\nstatic char *get_header_line(struct iob *iob);\nstatic jb_err scan_headers(struct client_state *csp);\nstatic jb_err header_tagger(struct client_state *csp, char *header);\nstatic jb_err parse_header_time(const char *header_time, time_t *result);\nstatic jb_err parse_time_header(const char *header, time_t *result);\n\nstatic jb_err crumble                   (struct client_state *csp, char **header);\nstatic jb_err filter_header             (struct client_state *csp, char **header);\nstatic jb_err client_connection         (struct client_state *csp, char **header);\nstatic jb_err client_referrer           (struct client_state *csp, char **header);\nstatic jb_err client_uagent             (struct client_state *csp, char **header);\nstatic jb_err client_ua                 (struct client_state *csp, char **header);\nstatic jb_err client_from               (struct client_state *csp, char **header);\nstatic jb_err client_send_cookie        (struct client_state *csp, char **header);\nstatic jb_err client_x_forwarded        (struct client_state *csp, char **header);\nstatic jb_err client_accept_encoding    (struct client_state *csp, char **header);\nstatic jb_err client_te                 (struct client_state *csp, char **header);\nstatic jb_err client_max_forwards       (struct client_state *csp, char **header);\nstatic jb_err client_host               (struct client_state *csp, char **header);\nstatic jb_err client_if_modified_since  (struct client_state *csp, char **header);\nstatic jb_err client_accept_language    (struct client_state *csp, char **header);\nstatic jb_err client_if_none_match      (struct client_state *csp, char **header);\nstatic jb_err crunch_client_header      (struct client_state *csp, char **header);\nstatic jb_err client_x_filter           (struct client_state *csp, char **header);\nstatic jb_err client_range              (struct client_state *csp, char **header);\nstatic jb_err client_expect             (struct client_state *csp, char **header);\nstatic jb_err server_set_cookie         (struct client_state *csp, char **header);\nstatic jb_err server_connection         (struct client_state *csp, char **header);\nstatic jb_err server_content_type       (struct client_state *csp, char **header);\nstatic jb_err server_adjust_content_length(struct client_state *csp, char **header);\nstatic jb_err server_content_md5        (struct client_state *csp, char **header);\nstatic jb_err server_content_encoding   (struct client_state *csp, char **header);\nstatic jb_err server_transfer_coding    (struct client_state *csp, char **header);\nstatic jb_err server_http               (struct client_state *csp, char **header);\nstatic jb_err crunch_server_header      (struct client_state *csp, char **header);\nstatic jb_err server_last_modified      (struct client_state *csp, char **header);\nstatic jb_err server_content_disposition(struct client_state *csp, char **header);\n#ifdef FEATURE_ZLIB\nstatic jb_err server_adjust_content_encoding(struct client_state *csp, char **header);\n#endif\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\nstatic jb_err server_save_content_length(struct client_state *csp, char **header);\nstatic jb_err server_keep_alive(struct client_state *csp, char **header);\nstatic jb_err server_proxy_connection(struct client_state *csp, char **header);\nstatic jb_err client_keep_alive(struct client_state *csp, char **header);\nstatic jb_err client_save_content_length(struct client_state *csp, char **header);\nstatic jb_err client_proxy_connection(struct client_state *csp, char **header);\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\nstatic jb_err client_host_adder       (struct client_state *csp);\nstatic jb_err client_xtra_adder       (struct client_state *csp);\nstatic jb_err client_x_forwarded_for_adder(struct client_state *csp);\nstatic jb_err client_connection_header_adder(struct client_state *csp);\nstatic jb_err server_connection_adder(struct client_state *csp);\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\nstatic jb_err server_proxy_connection_adder(struct client_state *csp);\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\nstatic jb_err proxy_authentication(struct client_state *csp, char **header);\n\nstatic jb_err create_forged_referrer(char **header, const char *hostport);\nstatic jb_err create_fake_referrer(char **header, const char *fake_referrer);\nstatic jb_err handle_conditional_hide_referrer_parameter(char **header,\n   const char *host, const int parameter_conditional_block);\nstatic void create_content_length_header(unsigned long long content_length,\n                                         char *header, size_t buffer_length);\n\n/*\n * List of functions to run on a list of headers.\n */\nstruct parsers\n{\n   /** The header prefix to match */\n   const char *str;\n\n   /** The length of the prefix to match */\n   const size_t len;\n\n   /** The function to apply to this line */\n   const parser_func_ptr parser;\n};\n\nstatic const struct parsers client_patterns[] = {\n   { \"referer:\",                  8,   client_referrer },\n   { \"user-agent:\",              11,   client_uagent },\n   { \"ua-\",                       3,   client_ua },\n   { \"from:\",                     5,   client_from },\n   { \"cookie:\",                   7,   client_send_cookie },\n   { \"x-forwarded-for:\",         16,   client_x_forwarded },\n   { \"Accept-Encoding:\",         16,   client_accept_encoding },\n   { \"TE:\",                       3,   client_te },\n   { \"Host:\",                     5,   client_host },\n   { \"if-modified-since:\",       18,   client_if_modified_since },\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   { \"Keep-Alive:\",              11,   client_keep_alive },\n   { \"Content-Length:\",          15,   client_save_content_length },\n   { \"Proxy-Connection:\",        17,   client_proxy_connection },\n#else\n   { \"Keep-Alive:\",              11,   crumble },\n   { \"Proxy-Connection:\",        17,   crumble },\n#endif\n   { \"connection:\",              11,   client_connection },\n   { \"max-forwards:\",            13,   client_max_forwards },\n   { \"Accept-Language:\",         16,   client_accept_language },\n   { \"if-none-match:\",           14,   client_if_none_match },\n   { \"Range:\",                    6,   client_range },\n   { \"Request-Range:\",           14,   client_range },\n   { \"If-Range:\",                 9,   client_range },\n   { \"X-Filter:\",                 9,   client_x_filter },\n   { \"Proxy-Authorization:\",     20,   proxy_authentication },\n#if 0\n   { \"Transfer-Encoding:\",       18,   client_transfer_encoding },\n#endif\n   { \"Expect:\",                   7,   client_expect },\n   { \"*\",                         0,   crunch_client_header },\n   { \"*\",                         0,   filter_header },\n   { NULL,                        0,   NULL }\n};\n\nstatic const struct parsers server_patterns[] = {\n   { \"HTTP/\",                     5, server_http },\n   { \"set-cookie:\",              11, server_set_cookie },\n   { \"connection:\",              11, server_connection },\n   { \"Content-Type:\",            13, server_content_type },\n   { \"Content-MD5:\",             12, server_content_md5 },\n   { \"Content-Encoding:\",        17, server_content_encoding },\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   { \"Content-Length:\",          15, server_save_content_length },\n   { \"Keep-Alive:\",              11, server_keep_alive },\n   { \"Proxy-Connection:\",        17, server_proxy_connection },\n#else\n   { \"Keep-Alive:\",              11, crumble },\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n   { \"Transfer-Encoding:\",       18, server_transfer_coding },\n   { \"content-disposition:\",     20, server_content_disposition },\n   { \"Last-Modified:\",           14, server_last_modified },\n   { \"Proxy-Authenticate:\",      19, proxy_authentication },\n   { \"*\",                         0, crunch_server_header },\n   { \"*\",                         0, filter_header },\n   { NULL,                        0, NULL }\n};\n\nstatic const add_header_func_ptr add_client_headers[] = {\n   client_host_adder,\n   client_x_forwarded_for_adder,\n   client_xtra_adder,\n   client_connection_header_adder,\n   NULL\n};\n\nstatic const add_header_func_ptr add_server_headers[] = {\n   server_connection_adder,\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   server_proxy_connection_adder,\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n   NULL\n};\n\n/*********************************************************************\n *\n * Function    :  flush_socket\n *\n * Description :  Write any pending \"buffered\" content.\n *\n * Parameters  :\n *          1  :  fd = file descriptor of the socket to read\n *          2  :  iob = The I/O buffer to flush, usually csp->iob.\n *\n * Returns     :  On success, the number of bytes written are returned (zero\n *                indicates nothing was written).  On error, -1 is returned,\n *                and errno is set appropriately.  If count is zero and the\n *                file descriptor refers to a regular file, 0 will be\n *                returned without causing any other effect.  For a special\n *                file, the results are not portable.\n *\n *********************************************************************/\nlong flush_socket(jb_socket fd, struct iob *iob)\n{\n   long len = iob->eod - iob->cur;\n\n   if (len <= 0)\n   {\n      return(0);\n   }\n\n   if (write_socket(fd, iob->cur, (size_t)len))\n   {\n      return(-1);\n   }\n   iob->eod = iob->cur = iob->buf;\n   return(len);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  add_to_iob\n *\n * Description :  Add content to the buffer, expanding the\n *                buffer if necessary.\n *\n * Parameters  :\n *          1  :  iob = Destination buffer.\n *          2  :  buffer_limit = Limit to which the destination may grow\n *          3  :  src = holds the content to be added\n *          4  :  n = number of bytes to be added\n *\n * Returns     :  JB_ERR_OK on success, JB_ERR_MEMORY if out-of-memory\n *                or buffer limit reached.\n *\n *********************************************************************/\njb_err add_to_iob(struct iob *iob, const size_t buffer_limit, char *src, long n)\n{\n   size_t used, offset, need;\n   char *p;\n\n   if (n <= 0) return JB_ERR_OK;\n\n   used   = (size_t)(iob->eod - iob->buf);\n   offset = (size_t)(iob->cur - iob->buf);\n   need   = used + (size_t)n + 1;\n\n   /*\n    * If the buffer can't hold the new data, extend it first.\n    * Use the next power of two if possible, else use the actual need.\n    */\n   if (need > buffer_limit)\n   {\n      log_error(LOG_LEVEL_INFO,\n         \"Buffer limit reached while extending the buffer (iob). Needed: %d. Limit: %d\",\n         need, buffer_limit);\n      return JB_ERR_MEMORY;\n   }\n\n   if (need > iob->size)\n   {\n      size_t want = iob->size ? iob->size : 512;\n\n      while (want <= need)\n      {\n         want *= 2;\n      }\n\n      if (want <= buffer_limit && NULL != (p = (char *)realloc(iob->buf, want)))\n      {\n         iob->size = want;\n      }\n      else if (NULL != (p = (char *)realloc(iob->buf, need)))\n      {\n         iob->size = need;\n      }\n      else\n      {\n         log_error(LOG_LEVEL_ERROR, \"Extending the buffer (iob) failed: %E\");\n         return JB_ERR_MEMORY;\n      }\n\n      /* Update the iob pointers */\n      iob->cur = p + offset;\n      iob->eod = p + used;\n      iob->buf = p;\n   }\n\n   /* copy the new data into the iob buffer */\n   memcpy(iob->eod, src, (size_t)n);\n\n   /* point to the end of the data */\n   iob->eod += n;\n\n   /* null terminate == cheap insurance */\n   *iob->eod = '\\0';\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  clear_iob\n *\n * Description :  Frees the memory allocated for an I/O buffer and\n *                resets the structure.\n *\n * Parameters  :\n *          1  :  iob = I/O buffer to clear.\n *\n * Returns     :  JB_ERR_OK on success, JB_ERR_MEMORY if out-of-memory\n *                or buffer limit reached.\n *\n *********************************************************************/\nvoid clear_iob(struct iob *iob)\n{\n   free(iob->buf);\n   memset(iob, '\\0', sizeof(*iob));;\n}\n\n\n#ifdef FEATURE_ZLIB\n/*********************************************************************\n *\n * Function    :  decompress_iob\n *\n * Description :  Decompress buffered page, expanding the\n *                buffer as necessary.  csp->iob->cur\n *                should point to the the beginning of the\n *                compressed data block.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success,\n *                JB_ERR_MEMORY if out-of-memory limit reached, and\n *                JB_ERR_COMPRESS if error decompressing buffer.\n *\n *********************************************************************/\njb_err decompress_iob(struct client_state *csp)\n{\n   char  *buf;       /* new, uncompressed buffer */\n   char  *cur;       /* Current iob position (to keep the original\n                      * iob->cur unmodified if we return early) */\n   size_t bufsize;   /* allocated size of the new buffer */\n   size_t old_size;  /* Content size before decompression */\n   size_t skip_size; /* Number of bytes at the beginning of the iob\n                        that we should NOT decompress. */\n   int status;       /* return status of the inflate() call */\n   z_stream zstr;    /* used by calls to zlib */\n\n   assert(csp->iob->cur - csp->iob->buf > 0);\n   assert(csp->iob->eod - csp->iob->cur > 0);\n\n   bufsize = csp->iob->size;\n   skip_size = (size_t)(csp->iob->cur - csp->iob->buf);\n   old_size = (size_t)(csp->iob->eod - csp->iob->cur);\n\n   cur = csp->iob->cur;\n\n   if (bufsize < (size_t)10)\n   {\n      /*\n       * This is to protect the parsing of gzipped data,\n       * but it should(?) be valid for deflated data also.\n       */\n      log_error(LOG_LEVEL_ERROR,\n         \"Insufficient data to start decompression. Bytes in buffer: %d\",\n         csp->iob->eod - csp->iob->cur);\n      return JB_ERR_COMPRESS;\n   }\n\n   if (csp->content_type & CT_GZIP)\n   {\n      /*\n       * Our task is slightly complicated by the facts that data\n       * compressed by gzip does not include a zlib header, and\n       * that there is no easily accessible interface in zlib to\n       * handle a gzip header. We strip off the gzip header by\n       * hand, and later inform zlib not to expect a header.\n       */\n\n      /*\n       * Strip off the gzip header. Please see RFC 1952 for more\n       * explanation of the appropriate fields.\n       */\n      if (((*cur++ & 0xff) != GZIP_IDENTIFIER_1)\n       || ((*cur++ & 0xff) != GZIP_IDENTIFIER_2)\n       || (*cur++ != Z_DEFLATED))\n      {\n         log_error(LOG_LEVEL_ERROR, \"Invalid gzip header when decompressing\");\n         return JB_ERR_COMPRESS;\n      }\n      else\n      {\n         int flags = *cur++;\n         if (flags & GZIP_FLAG_RESERVED_BITS)\n         {\n            /* The gzip header has reserved bits set; bail out. */\n            log_error(LOG_LEVEL_ERROR, \"Invalid gzip header flags when decompressing\");\n            return JB_ERR_COMPRESS;\n         }\n\n         /*\n          * Skip mtime (4 bytes), extra flags (1 byte)\n          * and OS type (1 byte).\n          */\n         cur += 6;\n\n         /* Skip extra fields if necessary. */\n         if (flags & GZIP_FLAG_EXTRA_FIELDS)\n         {\n            /*\n             * Skip a given number of bytes, specified\n             * as a 16-bit little-endian value.\n             *\n             * XXX: this code is untested and should probably be removed.\n             */\n            int skip_bytes;\n            skip_bytes = *cur++;\n            skip_bytes += *cur++ << 8;\n\n            /*\n             * The number of bytes to skip should be positive\n             * and we'd like to stay in the buffer.\n             */\n            if ((skip_bytes < 0) || (skip_bytes >= (csp->iob->eod - cur)))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Unreasonable amount of bytes to skip (%d). Stopping decompression\",\n                  skip_bytes);\n               return JB_ERR_COMPRESS;\n            }\n            log_error(LOG_LEVEL_INFO,\n               \"Skipping %d bytes for gzip compression. Does this sound right?\",\n               skip_bytes);\n            cur += skip_bytes;\n         }\n\n         /* Skip the filename if necessary. */\n         if (flags & GZIP_FLAG_FILE_NAME)\n         {\n            /* A null-terminated string is supposed to follow. */\n            while (*cur++ && (cur < csp->iob->eod));\n         }\n\n         /* Skip the comment if necessary. */\n         if (flags & GZIP_FLAG_COMMENT)\n         {\n            /* A null-terminated string is supposed to follow. */\n            while (*cur++ && (cur < csp->iob->eod));\n         }\n\n         /* Skip the CRC if necessary. */\n         if (flags & GZIP_FLAG_CHECKSUM)\n         {\n            cur += 2;\n         }\n\n         if (cur >= csp->iob->eod)\n         {\n            /*\n             * If the current position pointer reached or passed\n             * the buffer end, we were obviously tricked to skip\n             * too much.\n             */\n            log_error(LOG_LEVEL_ERROR,\n               \"Malformed gzip header detected. Aborting decompression.\");\n            return JB_ERR_COMPRESS;\n         }\n      }\n   }\n   else if (csp->content_type & CT_DEFLATE)\n   {\n      /*\n       * In theory (that is, according to RFC 1950), deflate-compressed\n       * data should begin with a two-byte zlib header and have an\n       * adler32 checksum at the end. It seems that in practice only\n       * the raw compressed data is sent. Note that this means that\n       * we are not RFC 1950-compliant here, but the advantage is that\n       * this actually works. :)\n       *\n       * We add a dummy null byte to tell zlib where the data ends,\n       * and later inform it not to expect a header.\n       *\n       * Fortunately, add_to_iob() has thoughtfully null-terminated\n       * the buffer; we can just increment the end pointer to include\n       * the dummy byte.\n       */\n      csp->iob->eod++;\n   }\n   else\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Unable to determine compression format for decompression\");\n      return JB_ERR_COMPRESS;\n   }\n\n   /* Set up the fields required by zlib. */\n   zstr.next_in  = (Bytef *)cur;\n   zstr.avail_in = (unsigned int)(csp->iob->eod - cur);\n   zstr.zalloc   = Z_NULL;\n   zstr.zfree    = Z_NULL;\n   zstr.opaque   = Z_NULL;\n\n   /*\n    * Passing -MAX_WBITS to inflateInit2 tells the library\n    * that there is no zlib header.\n    */\n   if (inflateInit2(&zstr, -MAX_WBITS) != Z_OK)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Error initializing decompression\");\n      return JB_ERR_COMPRESS;\n   }\n\n   /*\n    * Next, we allocate new storage for the inflated data.\n    * We don't modify the existing iob yet, so in case there\n    * is error in decompression we can recover gracefully.\n    */\n   buf = zalloc(bufsize);\n   if (NULL == buf)\n   {\n      log_error(LOG_LEVEL_ERROR, \"Out of memory decompressing iob\");\n      return JB_ERR_MEMORY;\n   }\n\n   assert(bufsize >= skip_size);\n   memcpy(buf, csp->iob->buf, skip_size);\n   zstr.avail_out = (uInt)(bufsize - skip_size);\n   zstr.next_out  = (Bytef *)buf + skip_size;\n\n   /* Try to decompress the whole stream in one shot. */\n   while (Z_BUF_ERROR == (status = inflate(&zstr, Z_FINISH)))\n   {\n      /* We need to allocate more memory for the output buffer. */\n\n      char *tmpbuf;                /* used for realloc'ing the buffer */\n      size_t oldbufsize = bufsize; /* keep track of the old bufsize */\n\n      if (0 == zstr.avail_in)\n      {\n         /*\n          * If zlib wants more data then there's a problem, because\n          * the complete compressed file should have been buffered.\n          */\n         log_error(LOG_LEVEL_ERROR,\n            \"Unexpected end of compressed iob. Using what we got so far.\");\n         break;\n      }\n\n      /*\n       * If we reached the buffer limit and still didn't have enough\n       * memory, just give up. Due to the ceiling enforced by the next\n       * if block we could actually check for equality here, but as it\n       * can be easily mistaken for a bug we don't.\n       */\n      if (bufsize >= csp->config->buffer_limit)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Buffer limit reached while decompressing iob\");\n         return JB_ERR_MEMORY;\n      }\n\n      /* Try doubling the buffer size each time. */\n      bufsize *= 2;\n\n      /* Don't exceed the buffer limit. */\n      if (bufsize > csp->config->buffer_limit)\n      {\n         bufsize = csp->config->buffer_limit;\n      }\n\n      /* Try to allocate the new buffer. */\n      tmpbuf = realloc(buf, bufsize);\n      if (NULL == tmpbuf)\n      {\n         log_error(LOG_LEVEL_ERROR, \"Out of memory decompressing iob\");\n         freez(buf);\n         return JB_ERR_MEMORY;\n      }\n      else\n      {\n         char *oldnext_out = (char *)zstr.next_out;\n\n         /*\n          * Update the fields for inflate() to use the new\n          * buffer, which may be in a location different from\n          * the old one.\n          */\n         zstr.avail_out += (uInt)(bufsize - oldbufsize);\n         zstr.next_out   = (Bytef *)tmpbuf + bufsize - zstr.avail_out;\n\n         /*\n          * Compare with an uglier method of calculating these values\n          * that doesn't require the extra oldbufsize variable.\n          */\n         assert(zstr.avail_out == tmpbuf + bufsize - (char *)zstr.next_out);\n         assert((char *)zstr.next_out == tmpbuf + ((char *)oldnext_out - buf));\n\n         buf = tmpbuf;\n      }\n   }\n\n   if (Z_STREAM_ERROR == inflateEnd(&zstr))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Inconsistent stream state after decompression: %s\", zstr.msg);\n      /*\n       * XXX: Intentionally no return.\n       *\n       * According to zlib.h, Z_STREAM_ERROR is returned\n       * \"if the stream state was inconsistent\".\n       *\n       * I assume in this case inflate()'s status\n       * would also be something different than Z_STREAM_END\n       * so this check should be redundant, but lets see.\n       */\n   }\n\n   if ((status != Z_STREAM_END) && (0 != zstr.avail_in))\n   {\n      /*\n       * We failed to decompress the stream and it's\n       * not simply because of missing data.\n       */\n      log_error(LOG_LEVEL_ERROR,\n         \"Unexpected error while decompressing to the buffer (iob): %s\",\n         zstr.msg);\n      return JB_ERR_COMPRESS;\n   }\n\n   /*\n    * Finally, we can actually update the iob, since the\n    * decompression was successful. First, free the old\n    * buffer.\n    */\n   freez(csp->iob->buf);\n\n   /* Now, update the iob to use the new buffer. */\n   csp->iob->buf  = buf;\n   csp->iob->cur  = csp->iob->buf + skip_size;\n   csp->iob->eod  = (char *)zstr.next_out;\n   csp->iob->size = bufsize;\n\n   /*\n    * Make sure the new uncompressed iob obeys some minimal\n    * consistency conditions.\n    */\n   if ((csp->iob->buf <  csp->iob->cur)\n    && (csp->iob->cur <= csp->iob->eod)\n    && (csp->iob->eod <= csp->iob->buf + csp->iob->size))\n   {\n      const size_t new_size = (size_t)(csp->iob->eod - csp->iob->cur);\n      if (new_size > (size_t)0)\n      {\n         log_error(LOG_LEVEL_RE_FILTER,\n            \"Decompression successful. Old size: %d, new size: %d.\",\n            old_size, new_size);\n      }\n      else\n      {\n         /* zlib thinks this is OK, so lets do the same. */\n         log_error(LOG_LEVEL_INFO, \"Decompression didn't result in any content.\");\n      }\n   }\n   else\n   {\n      /* It seems that zlib did something weird. */\n      log_error(LOG_LEVEL_ERROR,\n         \"Unexpected error decompressing the buffer (iob): %d==%d, %d>%d, %d<%d\",\n         csp->iob->cur, csp->iob->buf + skip_size, csp->iob->eod, csp->iob->buf,\n         csp->iob->eod, csp->iob->buf + csp->iob->size);\n      return JB_ERR_COMPRESS;\n   }\n\n   return JB_ERR_OK;\n\n}\n#endif /* defined(FEATURE_ZLIB) */\n\n\n/*********************************************************************\n *\n * Function    :  normalize_lws\n *\n * Description :  Reduces unquoted linear whitespace in headers to\n *                a single space in accordance with RFC 7230 3.2.4.\n *                This simplifies parsing and filtering later on.\n *\n * Parameters  :\n *          1  :  header = A header with linear whitespace to reduce.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void normalize_lws(char *header)\n{\n   char *p = header;\n\n   while (*p != '\\0')\n   {\n      if (privoxy_isspace(*p) && privoxy_isspace(*(p+1)))\n      {\n         char *q = p+1;\n\n         while (privoxy_isspace(*q))\n         {\n            q++;\n         }\n         log_error(LOG_LEVEL_HEADER, \"Reducing whitespace in '%s'\", header);\n         string_move(p+1, q);\n      }\n\n      if (*p == '\\t')\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Converting tab to space in '%s'\", header);\n         *p = ' ';\n      }\n      else if (*p == '\"')\n      {\n         char *end_of_token = strstr(p+1, \"\\\"\");\n\n         if (NULL != end_of_token)\n         {\n            /* Don't mess with quoted text. */\n            p = end_of_token;\n         }\n         else\n         {\n            log_error(LOG_LEVEL_HEADER,\n               \"Ignoring single quote in '%s'\", header);\n         }\n      }\n      p++;\n   }\n\n   p = strchr(header, ':');\n   if ((p != NULL) && (p != header) && privoxy_isspace(*(p-1)))\n   {\n      /*\n       * There's still space before the colon.\n       * We don't want it.\n       */\n      string_move(p-1, p);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_header\n *\n * Description :  This (odd) routine will parse the csp->iob\n *                to get the next complete header.\n *\n * Parameters  :\n *          1  :  iob = The I/O buffer to parse, usually csp->iob.\n *\n * Returns     :  Any one of the following:\n *\n * 1) a pointer to a dynamically allocated string that contains a header line\n * 2) NULL  indicating that the end of the header was reached\n * 3) \"\"    indicating that the end of the iob was reached before finding\n *          a complete header line.\n *\n *********************************************************************/\nchar *get_header(struct iob *iob)\n{\n   char *header;\n\n   header = get_header_line(iob);\n\n   if ((header == NULL) || (*header == '\\0'))\n   {\n      /*\n       * No complete header read yet, tell the client.\n       */\n      return header;\n   }\n\n   while ((iob->cur[0] == ' ') || (iob->cur[0] == '\\t'))\n   {\n      /*\n       * Header spans multiple lines, append the next one.\n       */\n      char *continued_header;\n\n      continued_header = get_header_line(iob);\n      if ((continued_header == NULL) || (*continued_header == '\\0'))\n      {\n         /*\n          * No complete header read yet, return what we got.\n          * XXX: Should \"unread\" header instead.\n          */\n         log_error(LOG_LEVEL_INFO,\n            \"Failed to read a multi-line header properly: '%s'\",\n            header);\n         break;\n      }\n\n      if (JB_ERR_OK != string_join(&header, continued_header))\n      {\n         log_error(LOG_LEVEL_FATAL,\n            \"Out of memory while appending multiple headers.\");\n      }\n      else\n      {\n         /* XXX: remove before next stable release. */\n         log_error(LOG_LEVEL_HEADER,\n            \"Merged multiple header lines to: '%s'\",\n            header);\n      }\n   }\n\n   normalize_lws(header);\n\n   return header;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_header_line\n *\n * Description :  This (odd) routine will parse the csp->iob\n *                to get the next header line.\n *\n * Parameters  :\n *          1  :  iob = The I/O buffer to parse, usually csp->iob.\n *\n * Returns     :  Any one of the following:\n *\n * 1) a pointer to a dynamically allocated string that contains a header line\n * 2) NULL  indicating that the end of the header was reached\n * 3) \"\"    indicating that the end of the iob was reached before finding\n *          a complete header line.\n *\n *********************************************************************/\nstatic char *get_header_line(struct iob *iob)\n{\n   char *p, *q, *ret;\n\n   if ((iob->cur == NULL)\n      || ((p = strchr(iob->cur, '\\n')) == NULL))\n   {\n      return(\"\"); /* couldn't find a complete header */\n   }\n\n   *p = '\\0';\n\n   ret = strdup(iob->cur);\n   if (ret == NULL)\n   {\n      /* FIXME No way to handle error properly */\n      log_error(LOG_LEVEL_FATAL, \"Out of memory in get_header_line()\");\n   }\n   assert(ret != NULL);\n\n   iob->cur = p+1;\n\n   if ((q = strchr(ret, '\\r')) != NULL) *q = '\\0';\n\n   /* is this a blank line (i.e. the end of the header) ? */\n   if (*ret == '\\0')\n   {\n      freez(ret);\n      return NULL;\n   }\n\n   return ret;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_header_value\n *\n * Description :  Get the value of a given header from a chained list\n *                of header lines or return NULL if no such header is\n *                present in the list.\n *\n * Parameters  :\n *          1  :  header_list = pointer to list\n *          2  :  header_name = string with name of header to look for.\n *                              Trailing colon required, capitalization\n *                              doesn't matter.\n *\n * Returns     :  NULL if not found, else value of header\n *\n *********************************************************************/\nchar *get_header_value(const struct list *header_list, const char *header_name)\n{\n   struct list_entry *cur_entry;\n   char *ret = NULL;\n   size_t length = 0;\n\n   assert(header_list);\n   assert(header_name);\n   length = strlen(header_name);\n\n   for (cur_entry = header_list->first; cur_entry ; cur_entry = cur_entry->next)\n   {\n      if (cur_entry->str)\n      {\n         if (!strncmpic(cur_entry->str, header_name, length))\n         {\n            /*\n             * Found: return pointer to start of value\n             */\n            ret = cur_entry->str + length;\n            while (*ret && privoxy_isspace(*ret)) ret++;\n            return ret;\n         }\n      }\n   }\n\n   /*\n    * Not found\n    */\n   return NULL;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  scan_headers\n *\n * Description :  Scans headers, applies tags and updates action bits.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK\n *\n *********************************************************************/\nstatic jb_err scan_headers(struct client_state *csp)\n{\n   struct list_entry *h; /* Header */\n   jb_err err = JB_ERR_OK;\n\n   for (h = csp->headers->first; (err == JB_ERR_OK) && (h != NULL) ; h = h->next)\n   {\n      /* Header crunch()ed in previous run? -> ignore */\n      if (h->str == NULL) continue;\n      log_error(LOG_LEVEL_HEADER, \"scan: %s\", h->str);\n      err = header_tagger(csp, h->str);\n   }\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  enforce_header_order\n *\n * Description :  Enforces a given header order.\n *\n * Parameters  :\n *          1  :  headers         = List of headers to order.\n *          2  :  ordered_headers = List of ordered header names.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void enforce_header_order(struct list *headers, const struct list *ordered_headers)\n{\n   struct list_entry *sorted_header;\n   struct list new_headers[1];\n   struct list_entry *header;\n\n   init_list(new_headers);\n\n   /* The request line is always the first \"header\" */\n\n   assert(NULL != headers->first->str);\n   enlist(new_headers, headers->first->str);\n   freez(headers->first->str)\n\n   /* Enlist the specified headers in the given order */\n\n   for (sorted_header = ordered_headers->first; sorted_header != NULL;\n        sorted_header = sorted_header->next)\n   {\n      const size_t sorted_header_length = strlen(sorted_header->str);\n      for (header = headers->first; header != NULL; header = header->next)\n      {\n         /* Header enlisted in previous run? -> ignore */\n         if (header->str == NULL) continue;\n\n         if (0 == strncmpic(sorted_header->str, header->str, sorted_header_length)\n            && (header->str[sorted_header_length] == ':'))\n         {\n            log_error(LOG_LEVEL_HEADER, \"Enlisting sorted header %s\", header->str);\n            if (JB_ERR_OK != enlist(new_headers, header->str))\n            {\n               log_error(LOG_LEVEL_HEADER, \"Failed to enlist %s\", header->str);\n            }\n            freez(header->str);\n         }\n      }\n   }\n\n   /* Enlist the rest of the headers behind the ordered ones */\n   for (header = headers->first; header != NULL; header = header->next)\n   {\n      /* Header enlisted in previous run? -> ignore */\n      if (header->str == NULL) continue;\n\n      log_error(LOG_LEVEL_HEADER,\n         \"Enlisting left-over header %s\", header->str);\n      if (JB_ERR_OK != enlist(new_headers, header->str))\n      {\n         log_error(LOG_LEVEL_HEADER, \"Failed to enlist %s\", header->str);\n      }\n      freez(header->str);\n   }\n\n   list_remove_all(headers);\n   list_duplicate(headers, new_headers);\n   list_remove_all(new_headers);\n\n   return;\n}\n\n\n/*********************************************************************\n *\n * Function    :  sed\n *\n * Description :  add, delete or modify lines in the HTTP header streams.\n *                On entry, it receives a linked list of headers space\n *                that was allocated dynamically (both the list nodes\n *                and the header contents).\n *\n *                As a side effect it frees the space used by the original\n *                header lines.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  filter_server_headers = Boolean to switch between\n *                                        server and header filtering.\n *\n * Returns     :  JB_ERR_OK in case off success, or\n *                JB_ERR_MEMORY on some out-of-memory errors, or\n *                JB_ERR_PARSE in case of fatal parse errors.\n *\n *********************************************************************/\njb_err sed(struct client_state *csp, int filter_server_headers)\n{\n   /* XXX: use more descriptive names. */\n   struct list_entry *p;\n   const struct parsers *v;\n   const add_header_func_ptr *f;\n   jb_err err = JB_ERR_OK;\n\n   scan_headers(csp);\n\n   if (filter_server_headers)\n   {\n      v = server_patterns;\n      f = add_server_headers;\n      check_negative_tag_patterns(csp, PATTERN_SPEC_NO_RESPONSE_TAG_PATTERN);\n   }\n   else\n   {\n      v = client_patterns;\n      f = add_client_headers;\n      check_negative_tag_patterns(csp, PATTERN_SPEC_NO_REQUEST_TAG_PATTERN);\n   }\n\n   while (v->str != NULL)\n   {\n      for (p = csp->headers->first; p != NULL; p = p->next)\n      {\n         /* Header crunch()ed in previous run? -> ignore */\n         if (p->str == NULL) continue;\n\n         /* Does the current parser handle this header? */\n         if ((strncmpic(p->str, v->str, v->len) == 0) ||\n             (v->len == CHECK_EVERY_HEADER_REMAINING))\n         {\n            err = v->parser(csp, &(p->str));\n            if (err != JB_ERR_OK)\n            {\n               return err;\n            }\n         }\n      }\n      v++;\n   }\n\n   /* place additional headers on the csp->headers list */\n   while ((err == JB_ERR_OK) && (*f))\n   {\n      err = (*f)(csp);\n      f++;\n   }\n\n   if (!filter_server_headers && !list_is_empty(csp->config->ordered_client_headers))\n   {\n      enforce_header_order(csp->headers, csp->config->ordered_client_headers);\n   }\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  update_server_headers\n *\n * Description :  Updates server headers after the body has been modified.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK in case off success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err update_server_headers(struct client_state *csp)\n{\n   jb_err err = JB_ERR_OK;\n\n   static const struct parsers server_patterns_light[] = {\n      { \"Content-Length:\",    15, server_adjust_content_length },\n      { \"Transfer-Encoding:\", 18, server_transfer_coding },\n#ifdef FEATURE_ZLIB\n      { \"Content-Encoding:\",  17, server_adjust_content_encoding },\n#endif /* def FEATURE_ZLIB */\n      { NULL,                  0, NULL }\n   };\n\n   if (strncmpic(csp->http->cmd, \"HEAD\", 4))\n   {\n      const struct parsers *v;\n      struct list_entry *p;\n\n      for (v = server_patterns_light; (err == JB_ERR_OK) && (v->str != NULL); v++)\n      {\n         for (p = csp->headers->first; (err == JB_ERR_OK) && (p != NULL); p = p->next)\n         {\n            /* Header crunch()ed in previous run? -> ignore */\n            if (p->str == NULL) continue;\n\n            /* Does the current parser handle this header? */\n            if (strncmpic(p->str, v->str, v->len) == 0)\n            {\n               err = v->parser(csp, (char **)&(p->str));\n            }\n         }\n      }\n   }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if ((JB_ERR_OK == err)\n    && (csp->flags & CSP_FLAG_MODIFIED)\n    && (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n    && !(csp->flags & CSP_FLAG_SERVER_CONTENT_LENGTH_SET))\n   {\n      char header[50];\n\n      create_content_length_header(csp->content_length, header, sizeof(header));\n      err = enlist(csp->headers, header);\n      if (JB_ERR_OK == err)\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Content modified with no Content-Length header set. \"\n            \"Created: %s.\", header);\n         csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET;\n      }\n   }\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n#ifdef FEATURE_COMPRESSION\n   if ((JB_ERR_OK == err)\n      && (csp->flags & CSP_FLAG_BUFFERED_CONTENT_DEFLATED))\n   {\n      err = enlist_unique_header(csp->headers, \"Content-Encoding\", \"deflate\");\n      if (JB_ERR_OK == err)\n      {\n         log_error(LOG_LEVEL_HEADER, \"Added header: Content-Encoding: deflate\");\n      }\n   }\n#endif\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  header_tagger\n *\n * Description :  Executes all text substitutions from applying\n *                tag actions and saves the result as tag.\n *\n *                XXX: Shares enough code with filter_header() and\n *                pcrs_filter_response() to warrant some helper functions.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = Header that is used as tagger input\n *\n * Returns     :  JB_ERR_OK on success and always succeeds\n *\n *********************************************************************/\nstatic jb_err header_tagger(struct client_state *csp, char *header)\n{\n   enum filter_type wanted_filter_type;\n   int multi_action_index;\n   pcrs_job *job;\n\n   struct re_filterfile_spec *b;\n   struct list_entry *tag_name;\n\n   const size_t header_length = strlen(header);\n\n   if (csp->flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)\n   {\n      wanted_filter_type = FT_SERVER_HEADER_TAGGER;\n      multi_action_index = ACTION_MULTI_SERVER_HEADER_TAGGER;\n   }\n   else\n   {\n      wanted_filter_type = FT_CLIENT_HEADER_TAGGER;\n      multi_action_index = ACTION_MULTI_CLIENT_HEADER_TAGGER;\n   }\n\n   if (list_is_empty(csp->action->multi[multi_action_index])\n      || filters_available(csp) == FALSE)\n   {\n      /* Return early if no taggers apply or if none are available. */\n      return JB_ERR_OK;\n   }\n\n   /* Execute all applying taggers */\n   for (tag_name = csp->action->multi[multi_action_index]->first;\n        NULL != tag_name; tag_name = tag_name->next)\n   {\n      char *modified_tag = NULL;\n      char *tag = header;\n      size_t size = header_length;\n      pcrs_job *joblist;\n\n      b = get_filter(csp, tag_name->str, wanted_filter_type);\n      if (b == NULL)\n      {\n         continue;\n      }\n\n      joblist = b->joblist;\n\n      if (b->dynamic) joblist = compile_dynamic_pcrs_job_list(csp, b);\n\n      if (NULL == joblist)\n      {\n         log_error(LOG_LEVEL_RE_FILTER,\n            \"Tagger %s has empty joblist. Nothing to do.\", b->name);\n         continue;\n      }\n\n      /* execute their pcrs_joblist on the header. */\n      for (job = joblist; NULL != job; job = job->next)\n      {\n         const int hits = pcrs_execute(job, tag, size, &modified_tag, &size);\n\n         if (0 < hits)\n         {\n            /* Success, continue with the modified version. */\n            if (tag != header)\n            {\n               freez(tag);\n            }\n            tag = modified_tag;\n         }\n         else\n         {\n            /* Tagger doesn't match */\n            if (0 > hits)\n            {\n               /* Regex failure, log it but continue anyway. */\n               assert(NULL != header);\n               log_error(LOG_LEVEL_ERROR,\n                  \"Problems with tagger \\'%s\\' and header \\'%s\\': %s\",\n                  b->name, *header, pcrs_strerror(hits));\n            }\n            freez(modified_tag);\n         }\n      }\n\n      if (b->dynamic) pcrs_free_joblist(joblist);\n\n      /* If this tagger matched */\n      if (tag != header)\n      {\n         if (0 == size)\n         {\n            /*\n             * There is no technical limitation which makes\n             * it impossible to use empty tags, but I assume\n             * no one would do it intentionally.\n             */\n            freez(tag);\n            log_error(LOG_LEVEL_INFO,\n               \"Tagger \\'%s\\' created an empty tag. Ignored.\", b->name);\n            continue;\n         }\n\n         if (!list_contains_item(csp->tags, tag))\n         {\n            if (JB_ERR_OK != enlist(csp->tags, tag))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Insufficient memory to add tag \\'%s\\', \"\n                  \"based on tagger \\'%s\\' and header \\'%s\\'\",\n                  tag, b->name, *header);\n            }\n            else\n            {\n               char *action_message;\n               /*\n                * update the action bits right away, to make\n                * tagging based on tags set by earlier taggers\n                * of the same kind possible.\n                */\n               if (update_action_bits_for_tag(csp, tag))\n               {\n                  action_message = \"Action bits updated accordingly.\";\n               }\n               else\n               {\n                  action_message = \"No action bits update necessary.\";\n               }\n\n               log_error(LOG_LEVEL_HEADER,\n                  \"Tagger \\'%s\\' added tag \\'%s\\'. %s\",\n                  b->name, tag, action_message);\n            }\n         }\n         else\n         {\n            /* XXX: Is this log-worthy? */\n            log_error(LOG_LEVEL_HEADER,\n               \"Tagger \\'%s\\' didn't add tag \\'%s\\'. Tag already present\",\n               b->name, tag);\n         }\n         freez(tag);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n/* here begins the family of parser functions that reformat header lines */\n\n/*********************************************************************\n *\n * Function    :  filter_header\n *\n * Description :  Executes all text substitutions from all applying\n *                +(server|client)-header-filter actions on the header.\n *                Most of the code was copied from pcrs_filter_response,\n *                including the rather short variable names\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success and always succeeds\n *\n *********************************************************************/\nstatic jb_err filter_header(struct client_state *csp, char **header)\n{\n   int hits=0;\n   int matches;\n   size_t size = strlen(*header);\n\n   char *newheader = NULL;\n   pcrs_job *job;\n\n   struct re_filterfile_spec *b;\n   struct list_entry *filtername;\n\n   enum filter_type wanted_filter_type;\n   int multi_action_index;\n\n   if (csp->flags & CSP_FLAG_NO_FILTERING)\n   {\n      return JB_ERR_OK;\n   }\n\n   if (csp->flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)\n   {\n      wanted_filter_type = FT_SERVER_HEADER_FILTER;\n      multi_action_index = ACTION_MULTI_SERVER_HEADER_FILTER;\n   }\n   else\n   {\n      wanted_filter_type = FT_CLIENT_HEADER_FILTER;\n      multi_action_index = ACTION_MULTI_CLIENT_HEADER_FILTER;\n   }\n\n   if (list_is_empty(csp->action->multi[multi_action_index])\n      || filters_available(csp) == FALSE)\n   {\n      /* Return early if no filters apply or if none are available. */\n      return JB_ERR_OK;\n   }\n\n   /* Execute all applying header filters */\n   for (filtername = csp->action->multi[multi_action_index]->first;\n        filtername != NULL; filtername = filtername->next)\n   {\n      int current_hits = 0;\n      pcrs_job *joblist;\n\n      b = get_filter(csp, filtername->str, wanted_filter_type);\n      if (b == NULL)\n      {\n         continue;\n      }\n\n      joblist = b->joblist;\n\n      if (b->dynamic) joblist = compile_dynamic_pcrs_job_list(csp, b);\n\n      if (NULL == joblist)\n      {\n         log_error(LOG_LEVEL_RE_FILTER, \"Filter %s has empty joblist. Nothing to do.\", b->name);\n         continue;\n      }\n\n      log_error(LOG_LEVEL_RE_FILTER, \"filtering \\'%s\\' (size %d) with \\'%s\\' ...\",\n         *header, size, b->name);\n\n      /* Apply all jobs from the joblist */\n      for (job = joblist; NULL != job; job = job->next)\n      {\n         matches = pcrs_execute(job, *header, size, &newheader, &size);\n         if (0 < matches)\n         {\n            current_hits += matches;\n            log_error(LOG_LEVEL_HEADER, \"Transforming \\\"%s\\\" to \\\"%s\\\"\", *header, newheader);\n            freez(*header);\n            *header = newheader;\n         }\n         else if (0 == matches)\n         {\n            /* Filter doesn't change header */\n            freez(newheader);\n         }\n         else\n         {\n            /* RegEx failure */\n            log_error(LOG_LEVEL_ERROR, \"Filtering \\'%s\\' with \\'%s\\' didn't work out: %s\",\n               *header, b->name, pcrs_strerror(matches));\n            if (newheader != NULL)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Freeing what's left: %s\", newheader);\n               freez(newheader);\n            }\n         }\n      }\n\n      if (b->dynamic) pcrs_free_joblist(joblist);\n\n      log_error(LOG_LEVEL_RE_FILTER, \"... produced %d hits (new size %d).\", current_hits, size);\n      hits += current_hits;\n   }\n\n   /*\n    * Additionally checking for hits is important because if\n    * the continue hack is triggered, server headers can\n    * arrive empty to separate multiple heads from each other.\n    */\n   if ((0 == size) && hits)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Removing empty header %s\", *header);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_connection\n *\n * Description :  Makes sure a proper \"Connection:\" header is\n *                set and signals connection_header_adder to\n *                do nothing.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success.\n *\n *********************************************************************/\nstatic jb_err server_connection(struct client_state *csp, char **header)\n{\n   if (!strcmpic(*header, \"Connection: keep-alive\")\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n    && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n#endif\n     )\n   {\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n      if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE))\n      {\n         csp->flags |= CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE;\n      }\n\n      if ((csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE))\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Keeping the server header '%s' around.\", *header);\n      }\n      else\n#endif /* FEATURE_CONNECTION_KEEP_ALIVE */\n      {\n         char *old_header = *header;\n\n         *header = strdup_or_die(\"Connection: close\");\n         log_error(LOG_LEVEL_HEADER, \"Replaced: \\'%s\\' with \\'%s\\'\", old_header, *header);\n         freez(old_header);\n      }\n   }\n\n   /* Signal server_connection_adder() to return early. */\n   csp->flags |= CSP_FLAG_SERVER_CONNECTION_HEADER_SET;\n\n   return JB_ERR_OK;\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  server_keep_alive\n *\n * Description :  Stores the server's keep alive timeout.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK.\n *\n *********************************************************************/\nstatic jb_err server_keep_alive(struct client_state *csp, char **header)\n{\n   unsigned int keep_alive_timeout;\n   const char *timeout_position = strstr(*header, \"timeout=\");\n\n   if ((NULL == timeout_position)\n    || (1 != sscanf(timeout_position, \"timeout=%u\", &keep_alive_timeout)))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Couldn't parse: %s\", *header);\n   }\n   else\n   {\n      if (keep_alive_timeout < csp->server_connection.keep_alive_timeout)\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Reducing keep-alive timeout from %u to %u.\",\n            csp->server_connection.keep_alive_timeout, keep_alive_timeout);\n         csp->server_connection.keep_alive_timeout = keep_alive_timeout;\n      }\n      else\n      {\n         /* XXX: Is this log worthy? */\n         log_error(LOG_LEVEL_HEADER,\n            \"Server keep-alive timeout is %u. Sticking with %u.\",\n            keep_alive_timeout, csp->server_connection.keep_alive_timeout);\n      }\n      csp->flags |= CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET;\n   }\n\n   freez(*header);\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_proxy_connection\n *\n * Description :  Figures out whether or not we should add a\n *                Proxy-Connection header.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK.\n *\n *********************************************************************/\nstatic jb_err server_proxy_connection(struct client_state *csp, char **header)\n{\n   csp->flags |= CSP_FLAG_SERVER_PROXY_CONNECTION_HEADER_SET;\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  proxy_authentication\n *\n * Description :  Removes headers that are relevant for proxy\n *                authentication unless forwarding them has\n *                been explicitly requested.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK.\n *\n *********************************************************************/\nstatic jb_err proxy_authentication(struct client_state *csp, char **header)\n{\n   if ((csp->config->feature_flags &\n      RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS) == 0) {\n      log_error(LOG_LEVEL_HEADER,\n         \"Forwarding proxy authentication headers is disabled. Crunching: %s\", *header);\n      freez(*header);\n   }\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_keep_alive\n *\n * Description :  Stores the client's keep alive timeout.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK.\n *\n *********************************************************************/\nstatic jb_err client_keep_alive(struct client_state *csp, char **header)\n{\n   unsigned int keep_alive_timeout;\n   char *timeout_position;\n\n   if (!(csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE))\n   {\n      log_error(LOG_LEVEL_HEADER,\n         \"keep-alive support is disabled. Crunching: %s.\", *header);\n      freez(*header);\n      return JB_ERR_OK;\n   }\n\n   /* Check for parameter-less format \"Keep-Alive: 100\" */\n   timeout_position = strstr(*header, \": \");\n   if ((NULL == timeout_position)\n    || (1 != sscanf(timeout_position, \": %u\", &keep_alive_timeout)))\n   {\n      /* Assume parameter format \"Keep-Alive: timeout=100\" */\n      timeout_position = strstr(*header, \"timeout=\");\n      if ((NULL == timeout_position)\n         || (1 != sscanf(timeout_position, \"timeout=%u\", &keep_alive_timeout)))\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Couldn't parse: '%s'. Using default timeout %u\",\n            *header, csp->config->keep_alive_timeout);\n         freez(*header);\n\n         return JB_ERR_OK;\n      }\n   }\n\n   if (keep_alive_timeout < csp->config->keep_alive_timeout)\n   {\n      log_error(LOG_LEVEL_HEADER,\n         \"Reducing keep-alive timeout from %u to %u.\",\n         csp->config->keep_alive_timeout, keep_alive_timeout);\n      csp->server_connection.keep_alive_timeout = keep_alive_timeout;\n   }\n   else\n   {\n      /* XXX: Is this log worthy? */\n      log_error(LOG_LEVEL_HEADER,\n         \"Client keep-alive timeout is %u. Sticking with %u.\",\n         keep_alive_timeout, csp->config->keep_alive_timeout);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_content_length\n *\n * Description :  Gets the content length specified in a\n *                Content-Length header.\n *\n * Parameters  :\n *          1  :  header_value = The Content-Length header value.\n *          2  :  length = Storage to return the value.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_PARSE if no value is recognized.\n *\n *********************************************************************/\nstatic jb_err get_content_length(const char *header_value, unsigned long long *length)\n{\n#ifdef _WIN32\n   assert(sizeof(unsigned long long) > 4);\n   if (1 != sscanf(header_value, \"%I64u\", length))\n#else\n   if (1 != sscanf(header_value, \"%llu\", length))\n#endif\n   {\n      return JB_ERR_PARSE;\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_save_content_length\n *\n * Description :  Save the Content-Length sent by the client.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_save_content_length(struct client_state *csp, char **header)\n{\n   unsigned long long content_length = 0;\n   const char *header_value;\n\n   assert(*(*header+14) == ':');\n\n   header_value = *header + 15;\n   if (JB_ERR_OK != get_content_length(header_value, &content_length))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Crunching invalid header: %s\", *header);\n      freez(*header);\n   }\n   else\n   {\n      csp->expected_client_content_length = content_length;\n   }\n\n   return JB_ERR_OK;\n}\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n\n/*********************************************************************\n *\n * Function    :  client_connection\n *\n * Description :  Makes sure a proper \"Connection:\" header is\n *                set and signals connection_header_adder\n *                to do nothing.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success.\n *\n *********************************************************************/\nstatic jb_err client_connection(struct client_state *csp, char **header)\n{\n   static const char connection_close[] = \"Connection: close\";\n\n   if (!strcmpic(*header, connection_close))\n   {\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n      if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)\n        && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED))\n      {\n          if (!strcmpic(csp->http->ver, \"HTTP/1.1\"))\n          {\n             log_error(LOG_LEVEL_HEADER,\n                \"Removing \\'%s\\' to imply keep-alive.\", *header);\n             freez(*header);\n             /*\n              * While we imply keep-alive to the server,\n              * we have to remember that the client didn't.\n              */\n             csp->flags &= ~CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n          }\n          else\n          {\n             char *old_header = *header;\n\n             *header = strdup_or_die(\"Connection: keep-alive\");\n             log_error(LOG_LEVEL_HEADER,\n                \"Replaced: \\'%s\\' with \\'%s\\'\", old_header, *header);\n             freez(old_header);\n          }\n      }\n      else\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Keeping the client header '%s' around. \"\n            \"The connection will not be kept alive.\",\n            *header);\n         csp->flags &= ~CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n      }\n   }\n   else if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n        && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED))\n   {\n      log_error(LOG_LEVEL_HEADER,\n         \"Keeping the client header '%s' around. \"\n         \"The server connection will be kept alive if possible.\",\n         *header);\n      csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n#endif  /* def FEATURE_CONNECTION_KEEP_ALIVE */\n   }\n   else\n   {\n      char *old_header = *header;\n\n      *header = strdup_or_die(connection_close);\n      log_error(LOG_LEVEL_HEADER,\n         \"Replaced: \\'%s\\' with \\'%s\\'\", old_header, *header);\n      freez(old_header);\n   }\n\n   /* Signal client_connection_header_adder() to return early. */\n   csp->flags |= CSP_FLAG_CLIENT_CONNECTION_HEADER_SET;\n\n   return JB_ERR_OK;\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  client_proxy_connection\n *\n * Description :  Sets the CLIENT_CONNECTION_KEEP_ALIVE flag when\n *                appropriate and removes the Proxy-Connection\n *                header.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK\n *\n *********************************************************************/\nstatic jb_err client_proxy_connection(struct client_state *csp, char **header)\n{\n   if (0 == (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n      && (csp->http->ssl == 0)\n      && (NULL == strstr(*header, \"close\")))\n   {\n      log_error(LOG_LEVEL_HEADER,\n         \"The client connection can be kept alive due to: %s\", *header);\n      csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n   }\n   crumble(csp, header);\n\n   return JB_ERR_OK;\n}\n#endif  /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n/*********************************************************************\n *\n * Function    :  client_transfer_encoding\n *\n * Description :  Raise the CSP_FLAG_CHUNKED_CLIENT_BODY flag if\n *                the request body is \"chunked\"\n *\n *                XXX: Currently not called through sed() as we\n *                     need the flag earlier on. Should be fixed.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *\n *********************************************************************/\njb_err client_transfer_encoding(struct client_state *csp, char **header)\n{\n   if (strstr(*header, \"chunked\"))\n   {\n      csp->flags |= CSP_FLAG_CHUNKED_CLIENT_BODY;\n      log_error(LOG_LEVEL_HEADER, \"Expecting chunked client body\");\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_expect\n *\n * Description :  Raise the CSP_FLAG_UNSUPPORTED_CLIENT_EXPECTATION\n *                if the Expect header value is unsupported.\n *\n *                Rejecting unsupported expectations is a RFC 7231 5.1.1\n *                MAY and a RFC 2616 (obsolete) MUST.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *\n *********************************************************************/\njb_err client_expect(struct client_state *csp, char **header)\n{\n   if (0 != strcmpic(*header, \"Expect: 100-continue\"))\n   {\n      csp->flags |= CSP_FLAG_UNSUPPORTED_CLIENT_EXPECTATION;\n      log_error(LOG_LEVEL_HEADER,\n         \"Unsupported client expectaction: %s\", *header);\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  crumble\n *\n * Description :  This is called if a header matches a pattern to \"crunch\"\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err crumble(struct client_state *csp, char **header)\n{\n   (void)csp;\n   log_error(LOG_LEVEL_HEADER, \"crumble crunched: %s!\", *header);\n   freez(*header);\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  crunch_server_header\n *\n * Description :  Crunch server header if it matches a string supplied by the\n *                user. Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success and always succeeds\n *\n *********************************************************************/\nstatic jb_err crunch_server_header(struct client_state *csp, char **header)\n{\n   const char *crunch_pattern;\n\n   /* Do we feel like crunching? */\n   if ((csp->action->flags & ACTION_CRUNCH_SERVER_HEADER))\n   {\n      crunch_pattern = csp->action->string[ACTION_STRING_SERVER_HEADER];\n\n      /* Is the current header the lucky one? */\n      if (strstr(*header, crunch_pattern))\n      {\n         log_error(LOG_LEVEL_HEADER, \"Crunching server header: %s (contains: %s)\", *header, crunch_pattern);\n         freez(*header);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_content_type\n *\n * Description :  Set the content-type for filterable types (text/.*,\n *                .*xml.*, .*script.* and image/gif) unless filtering has been\n *                forbidden (CT_TABOO) while parsing earlier headers.\n *                NOTE: Since text/plain is commonly used by web servers\n *                      for files whose correct type is unknown, we don't\n *                      set CT_TEXT for it.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_content_type(struct client_state *csp, char **header)\n{\n   /* Remove header if it isn't the first Content-Type header */\n   if ((csp->content_type & CT_DECLARED))\n   {\n      if (content_filters_enabled(csp->action))\n      {\n         /*\n          * Making sure the client interprets the content the same way\n          * Privoxy did is only relevant if Privoxy modified it.\n          *\n          * Checking for this is \"hard\" as it's not yet known when\n          * this function is called, thus go shopping and and just\n          * check if Privoxy could filter it.\n          *\n          * The main thing is that we don't mess with the headers\n          * unless the user signalled that it's acceptable.\n          */\n         log_error(LOG_LEVEL_HEADER,\n            \"Multiple Content-Type headers detected. \"\n            \"Removing and ignoring: %s\",\n            *header);\n         freez(*header);\n      }\n      return JB_ERR_OK;\n   }\n\n   /*\n    * Signal that the Content-Type has been set.\n    */\n   csp->content_type |= CT_DECLARED;\n\n   if (!(csp->content_type & CT_TABOO))\n   {\n      /*\n       * XXX: The assumption that text/plain is a sign of\n       * binary data seems to be somewhat unreasonable nowadays\n       * and should be dropped after 3.0.8 is out.\n       */\n      if ((strstr(*header, \"text/\") && !strstr(*header, \"plain\"))\n        || strstr(*header, \"xml\")\n        || strstr(*header, \"script\"))\n      {\n         csp->content_type |= CT_TEXT;\n      }\n      else if (strstr(*header, \"image/gif\"))\n      {\n         csp->content_type |= CT_GIF;\n      }\n   }\n\n   /*\n    * Are we messing with the content type?\n    */\n   if (csp->action->flags & ACTION_CONTENT_TYPE_OVERWRITE)\n   {\n      /*\n       * Make sure the user doesn't accidentally\n       * change the content type of binary documents.\n       */\n      if ((csp->content_type & CT_TEXT) || (csp->action->flags & ACTION_FORCE_TEXT_MODE))\n      {\n         jb_err err;\n         freez(*header);\n         *header = strdup_or_die(\"Content-Type: \");\n\n         err = string_append(header, csp->action->string[ACTION_STRING_CONTENT_TYPE]);\n         if (JB_ERR_OK != err)\n         {\n            log_error(LOG_LEVEL_HEADER, \"Insufficient memory to replace Content-Type!\");\n            return JB_ERR_MEMORY;\n         }\n         log_error(LOG_LEVEL_HEADER, \"Modified: %s!\", *header);\n      }\n      else\n      {\n         log_error(LOG_LEVEL_HEADER, \"%s not replaced. \"\n            \"It doesn't look like a content type that should be filtered. \"\n            \"Enable force-text-mode if you know what you're doing.\", *header);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_transfer_coding\n *\n * Description :  - Prohibit filtering (CT_TABOO) if transfer coding compresses\n *                - Raise the CSP_FLAG_CHUNKED flag if coding is \"chunked\"\n *                - Remove header if body was chunked but has been\n *                  de-chunked for filtering.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_transfer_coding(struct client_state *csp, char **header)\n{\n   /*\n    * Turn off pcrs and gif filtering if body compressed\n    */\n   if (strstr(*header, \"gzip\") || strstr(*header, \"compress\") || strstr(*header, \"deflate\"))\n   {\n#ifdef FEATURE_ZLIB\n      /*\n       * XXX: Added to test if we could use CT_GZIP and CT_DEFLATE here.\n       */\n      log_error(LOG_LEVEL_INFO, \"Marking content type for %s as CT_TABOO because of %s.\",\n         csp->http->cmd, *header);\n#endif /* def FEATURE_ZLIB */\n      csp->content_type = CT_TABOO;\n   }\n\n   /*\n    * Raise flag if body chunked\n    */\n   if (strstr(*header, \"chunked\"))\n   {\n      csp->flags |= CSP_FLAG_CHUNKED;\n\n      /*\n       * If the body was modified, it has been de-chunked first\n       * and the header must be removed.\n       *\n       * FIXME: If there is more than one transfer encoding,\n       * only the \"chunked\" part should be removed here.\n       */\n      if (csp->flags & CSP_FLAG_MODIFIED)\n      {\n         log_error(LOG_LEVEL_HEADER, \"Removing: %s\", *header);\n         freez(*header);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_content_encoding\n *\n * Description :  Used to check if the content is compressed, and if\n *                FEATURE_ZLIB is disabled, filtering is disabled as\n *                well.\n *\n *                If FEATURE_ZLIB is enabled and the compression type\n *                supported, the content is marked for decompression.\n *\n *                XXX: Doesn't properly deal with multiple or with\n *                     unsupported but unknown encodings.\n *                     Is case-sensitive but shouldn't be.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_content_encoding(struct client_state *csp, char **header)\n{\n#ifdef FEATURE_ZLIB\n   if (strstr(*header, \"sdch\"))\n   {\n      /*\n       * Shared Dictionary Compression over HTTP isn't supported,\n       * filtering it anyway is pretty much guaranteed to mess up\n       * the encoding.\n       */\n      csp->content_type |= CT_TABOO;\n\n      /*\n       * Log a warning if the user expects the content to be filtered.\n       */\n      if (content_filters_enabled(csp->action))\n      {\n         log_error(LOG_LEVEL_INFO,\n            \"SDCH-compressed content detected, content filtering disabled. \"\n            \"Consider suppressing SDCH offers made by the client.\");\n      }\n   }\n   else if (strstr(*header, \"gzip\"))\n   {\n      /* Mark for gzip decompression */\n      csp->content_type |= CT_GZIP;\n   }\n   else if (strstr(*header, \"deflate\"))\n   {\n      /* Mark for zlib decompression */\n      csp->content_type |= CT_DEFLATE;\n   }\n   else if (strstr(*header, \"compress\"))\n   {\n      /*\n       * We can't decompress this; therefore we can't filter\n       * it either.\n       */\n      csp->content_type |= CT_TABOO;\n   }\n#else /* !defined(FEATURE_ZLIB) */\n   /*\n    * XXX: Using a black list here isn't the right approach.\n    *\n    *      In case of SDCH, building with zlib support isn't\n    *      going to help.\n    */\n   if (strstr(*header, \"gzip\") ||\n       strstr(*header, \"compress\") ||\n       strstr(*header, \"deflate\") ||\n       strstr(*header, \"sdch\"))\n   {\n      /*\n       * Body is compressed, turn off pcrs and gif filtering.\n       */\n      csp->content_type |= CT_TABOO;\n\n      /*\n       * Log a warning if the user expects the content to be filtered.\n       */\n      if (content_filters_enabled(csp->action))\n      {\n         log_error(LOG_LEVEL_INFO,\n            \"Compressed content detected, content filtering disabled. \"\n            \"Consider recompiling Privoxy with zlib support or \"\n            \"enable the prevent-compression action.\");\n      }\n   }\n#endif /* defined(FEATURE_ZLIB) */\n\n   return JB_ERR_OK;\n\n}\n\n\n#ifdef FEATURE_ZLIB\n/*********************************************************************\n *\n * Function    :  server_adjust_content_encoding\n *\n * Description :  Remove the Content-Encoding header if the\n *                decompression was successful and the content\n *                has been modifed.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_adjust_content_encoding(struct client_state *csp, char **header)\n{\n   if ((csp->flags & CSP_FLAG_MODIFIED)\n    && (csp->content_type & (CT_GZIP | CT_DEFLATE)))\n   {\n      /*\n       * We successfully decompressed the content,\n       * and have to clean the header now, so the\n       * client no longer expects compressed data.\n       *\n       * XXX: There is a difference between cleaning\n       * and removing it completely.\n       */\n      log_error(LOG_LEVEL_HEADER, \"Crunching: %s\", *header);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n\n}\n#endif /* defined(FEATURE_ZLIB) */\n\n\n/*********************************************************************\n *\n * Function    :  server_adjust_content_length\n *\n * Description :  Adjust Content-Length header if we modified\n *                the body.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_adjust_content_length(struct client_state *csp, char **header)\n{\n   /* Regenerate header if the content was modified. */\n   if (csp->flags & CSP_FLAG_MODIFIED)\n   {\n      const size_t header_length = 50;\n      freez(*header);\n      *header = malloc(header_length);\n      if (*header == NULL)\n      {\n         return JB_ERR_MEMORY;\n      }\n      create_content_length_header(csp->content_length, *header, header_length);\n      log_error(LOG_LEVEL_HEADER,\n         \"Adjusted Content-Length to %llu\", csp->content_length);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  server_save_content_length\n *\n * Description :  Save the Content-Length sent by the server.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_save_content_length(struct client_state *csp, char **header)\n{\n   unsigned long long content_length = 0;\n   const char *header_value;\n\n   assert(*(*header+14) == ':');\n\n   header_value = *header + 15;\n   if (JB_ERR_OK != get_content_length(header_value, &content_length))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Crunching invalid header: %s\", *header);\n      freez(*header);\n   }\n   else\n   {\n      csp->expected_content_length = content_length;\n      csp->flags |= CSP_FLAG_SERVER_CONTENT_LENGTH_SET;\n      csp->flags |= CSP_FLAG_CONTENT_LENGTH_SET;\n   }\n\n   return JB_ERR_OK;\n}\n#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n/*********************************************************************\n *\n * Function    :  server_content_md5\n *\n * Description :  Crumble any Content-MD5 headers if the document was\n *                modified. FIXME: Should we re-compute instead?\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_content_md5(struct client_state *csp, char **header)\n{\n   if (csp->flags & CSP_FLAG_MODIFIED)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Crunching Content-MD5\");\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_content_disposition\n *\n * Description :  If enabled, blocks or modifies the \"Content-Disposition\" header.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_content_disposition(struct client_state *csp, char **header)\n{\n   const char *newval;\n\n   /*\n    * Are we messing with the Content-Disposition header?\n    */\n   if ((csp->action->flags & ACTION_HIDE_CONTENT_DISPOSITION) == 0)\n   {\n      /* Me tinks not */\n      return JB_ERR_OK;\n   }\n\n   newval = csp->action->string[ACTION_STRING_CONTENT_DISPOSITION];\n\n   if ((newval == NULL) || (0 == strcmpic(newval, \"block\")))\n   {\n      /*\n       * Blocking content-disposition header\n       */\n      log_error(LOG_LEVEL_HEADER, \"Crunching %s!\", *header);\n      freez(*header);\n      return JB_ERR_OK;\n   }\n   else\n   {\n      /*\n       * Replacing Content-Disposition header\n       */\n      freez(*header);\n      *header = strdup(\"Content-Disposition: \");\n      string_append(header, newval);\n\n      if (*header != NULL)\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Content-Disposition header crunched and replaced with: %s\", *header);\n      }\n   }\n   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_last_modified\n *\n * Description :  Changes Last-Modified header to the actual date\n *                to help hide-if-modified-since.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_last_modified(struct client_state *csp, char **header)\n{\n   const char *newval;\n   time_t last_modified;\n   char newheader[50];\n\n   /*\n    * Are we messing with the Last-Modified header?\n    */\n   if ((csp->action->flags & ACTION_OVERWRITE_LAST_MODIFIED) == 0)\n   {\n      /*Nope*/\n      return JB_ERR_OK;\n   }\n\n   newval = csp->action->string[ACTION_STRING_LAST_MODIFIED];\n\n   if (0 == strcmpic(newval, \"block\"))\n   {\n      /*\n       * Blocking Last-Modified header. Useless but why not.\n       */\n      log_error(LOG_LEVEL_HEADER, \"Crunching %s!\", *header);\n      freez(*header);\n      return JB_ERR_OK;\n   }\n   else if (0 == strcmpic(newval, \"reset-to-request-time\"))\n   {\n      /*\n       * Setting Last-Modified Header to now.\n       */\n      char buf[30];\n      get_http_time(0, buf, sizeof(buf));\n      freez(*header);\n      *header = strdup(\"Last-Modified: \");\n      string_append(header, buf);\n\n      if (*header == NULL)\n      {\n         log_error(LOG_LEVEL_HEADER, \"Insufficient memory. Last-Modified header got lost, boohoo.\");\n      }\n      else\n      {\n         log_error(LOG_LEVEL_HEADER, \"Reset to present time: %s\", *header);\n      }\n   }\n   else if (0 == strcmpic(newval, \"randomize\"))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Randomizing: %s\", *header);\n\n      if (JB_ERR_OK != parse_time_header(*header, &last_modified))\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Couldn't parse time in %s (crunching!)\", *header);\n         freez(*header);\n      }\n      else\n      {\n         time_t now;\n         struct tm *timeptr = NULL;\n         long int rtime;\n#ifdef HAVE_GMTIME_R\n         struct tm gmt;\n#endif\n         now = time(NULL);\n         rtime = (long int)difftime(now, last_modified);\n         if (rtime)\n         {\n            long int days, hours, minutes, seconds;\n            const int negative_delta = (rtime < 0);\n\n            if (negative_delta)\n            {\n               rtime *= -1;\n               log_error(LOG_LEVEL_HEADER, \"Server time in the future.\");\n            }\n            rtime = pick_from_range(rtime);\n            if (negative_delta)\n            {\n               rtime *= -1;\n            }\n            last_modified += rtime;\n#ifdef HAVE_GMTIME_R\n            timeptr = gmtime_r(&last_modified, &gmt);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n            privoxy_mutex_lock(&gmtime_mutex);\n            timeptr = gmtime(&last_modified);\n            privoxy_mutex_unlock(&gmtime_mutex);\n#else\n            timeptr = gmtime(&last_modified);\n#endif\n            if ((NULL == timeptr) || !strftime(newheader,\n                  sizeof(newheader), \"%a, %d %b %Y %H:%M:%S GMT\", timeptr))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Randomizing '%s' failed. Crunching the header without replacement.\",\n                  *header);\n               freez(*header);\n               return JB_ERR_OK;\n            }\n\n            freez(*header);\n            *header = strdup(\"Last-Modified: \");\n            string_append(header, newheader);\n\n            if (*header == NULL)\n            {\n               log_error(LOG_LEVEL_ERROR, \"Insufficient memory, header crunched without replacement.\");\n               return JB_ERR_MEMORY;\n            }\n\n            days    = rtime / (3600 * 24);\n            hours   = rtime / 3600 % 24;\n            minutes = rtime / 60 % 60;\n            seconds = rtime % 60;\n\n            log_error(LOG_LEVEL_HEADER,\n               \"Randomized:  %s (added %d da%s %d hou%s %d minut%s %d second%s\",\n               *header, days, (days == 1) ? \"y\" : \"ys\", hours, (hours == 1) ? \"r\" : \"rs\",\n               minutes, (minutes == 1) ? \"e\" : \"es\", seconds, (seconds == 1) ? \")\" : \"s)\");\n         }\n         else\n         {\n            log_error(LOG_LEVEL_HEADER, \"Randomized ... or not. No time difference to work with.\");\n         }\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_accept_encoding\n *\n * Description :  Rewrite the client's Accept-Encoding header so that\n *                if doesn't allow compression, if the action applies.\n *                Note: For HTTP/1.0 the absence of the header is enough.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_accept_encoding(struct client_state *csp, char **header)\n{\n#ifdef FEATURE_COMPRESSION\n   if ((csp->config->feature_flags & RUNTIME_FEATURE_COMPRESSION)\n      && strstr(*header, \"deflate\"))\n   {\n      csp->flags |= CSP_FLAG_CLIENT_SUPPORTS_DEFLATE;\n   }\n#endif\n   if ((csp->action->flags & ACTION_NO_COMPRESSION) != 0)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Suppressed offer to compress content\");\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_te\n *\n * Description :  Rewrite the client's TE header so that\n *                if doesn't allow compression, if the action applies.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_te(struct client_state *csp, char **header)\n{\n   if ((csp->action->flags & ACTION_NO_COMPRESSION) != 0)\n   {\n      freez(*header);\n      log_error(LOG_LEVEL_HEADER, \"Suppressed offer to compress transfer\");\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_referrer\n *\n * Description :  Handle the \"referer\" config setting properly.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_referrer(struct client_state *csp, char **header)\n{\n   const char *parameter;\n   /* booleans for parameters we have to check multiple times */\n   int parameter_conditional_block;\n   int parameter_conditional_forge;\n\n#ifdef FEATURE_FORCE_LOAD\n   /*\n    * Since the referrer can include the prefix even\n    * if the request itself is non-forced, we must\n    * clean it unconditionally.\n    *\n    * XXX: strclean is too broad\n    */\n   strclean(*header, FORCE_PREFIX);\n#endif /* def FEATURE_FORCE_LOAD */\n\n   if ((csp->action->flags & ACTION_HIDE_REFERER) == 0)\n   {\n      /* Nothing left to do */\n      return JB_ERR_OK;\n   }\n\n   parameter = csp->action->string[ACTION_STRING_REFERER];\n   assert(parameter != NULL);\n   parameter_conditional_block = (0 == strcmpic(parameter, \"conditional-block\"));\n   parameter_conditional_forge = (0 == strcmpic(parameter, \"conditional-forge\"));\n\n   if (!parameter_conditional_block && !parameter_conditional_forge)\n   {\n      /*\n       * As conditional-block and conditional-forge are the only\n       * parameters that rely on the original referrer, we can\n       * remove it now for all the others.\n       */\n      freez(*header);\n   }\n\n   if (0 == strcmpic(parameter, \"block\"))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Referer crunched!\");\n      return JB_ERR_OK;\n   }\n   else if (parameter_conditional_block || parameter_conditional_forge)\n   {\n      return handle_conditional_hide_referrer_parameter(header,\n         csp->http->hostport, parameter_conditional_block);\n   }\n   else if (0 == strcmpic(parameter, \"forge\"))\n   {\n      return create_forged_referrer(header, csp->http->hostport);\n   }\n   else\n   {\n      /* interpret parameter as user-supplied referer to fake */\n      return create_fake_referrer(header, parameter);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_accept_language\n *\n * Description :  Handle the \"Accept-Language\" config setting properly.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_accept_language(struct client_state *csp, char **header)\n{\n   const char *newval;\n\n   /*\n    * Are we messing with the Accept-Language?\n    */\n   if ((csp->action->flags & ACTION_HIDE_ACCEPT_LANGUAGE) == 0)\n   {\n      /*I don't think so*/\n      return JB_ERR_OK;\n   }\n\n   newval = csp->action->string[ACTION_STRING_LANGUAGE];\n\n   if ((newval == NULL) || (0 == strcmpic(newval, \"block\")))\n   {\n      /*\n       * Blocking Accept-Language header\n       */\n      log_error(LOG_LEVEL_HEADER, \"Crunching Accept-Language!\");\n      freez(*header);\n      return JB_ERR_OK;\n   }\n   else\n   {\n      /*\n       * Replacing Accept-Language header\n       */\n      freez(*header);\n      *header = strdup(\"Accept-Language: \");\n      string_append(header, newval);\n\n      if (*header == NULL)\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Insufficient memory. Accept-Language header crunched without replacement.\");\n      }\n      else\n      {\n         log_error(LOG_LEVEL_HEADER,\n            \"Accept-Language header crunched and replaced with: %s\", *header);\n      }\n   }\n   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  crunch_client_header\n *\n * Description :  Crunch client header if it matches a string supplied by the\n *                user. Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success and always succeeds\n *\n *********************************************************************/\nstatic jb_err crunch_client_header(struct client_state *csp, char **header)\n{\n   const char *crunch_pattern;\n\n   /* Do we feel like crunching? */\n   if ((csp->action->flags & ACTION_CRUNCH_CLIENT_HEADER))\n   {\n      crunch_pattern = csp->action->string[ACTION_STRING_CLIENT_HEADER];\n\n      /* Is the current header the lucky one? */\n      if (strstr(*header, crunch_pattern))\n      {\n         log_error(LOG_LEVEL_HEADER, \"Crunching client header: %s (contains: %s)\", *header, crunch_pattern);\n         freez(*header);\n      }\n   }\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_uagent\n *\n * Description :  Handle the \"user-agent\" config setting properly\n *                and remember its original value to enable browser\n *                bug workarounds. Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_uagent(struct client_state *csp, char **header)\n{\n   const char *newval;\n\n   if ((csp->action->flags & ACTION_HIDE_USER_AGENT) == 0)\n   {\n      return JB_ERR_OK;\n   }\n\n   newval = csp->action->string[ACTION_STRING_USER_AGENT];\n   if (newval == NULL)\n   {\n      return JB_ERR_OK;\n   }\n\n   freez(*header);\n   *header = strdup(\"User-Agent: \");\n   string_append(header, newval);\n\n   log_error(LOG_LEVEL_HEADER, \"Modified: %s\", *header);\n\n   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_ua\n *\n * Description :  Handle \"ua-\" headers properly.  Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_ua(struct client_state *csp, char **header)\n{\n   if ((csp->action->flags & ACTION_HIDE_USER_AGENT) != 0)\n   {\n      log_error(LOG_LEVEL_HEADER, \"crunched User-Agent!\");\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_from\n *\n * Description :  Handle the \"from\" config setting properly.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_from(struct client_state *csp, char **header)\n{\n   const char *newval;\n\n   if ((csp->action->flags & ACTION_HIDE_FROM) == 0)\n   {\n      return JB_ERR_OK;\n   }\n\n   freez(*header);\n\n   newval = csp->action->string[ACTION_STRING_FROM];\n\n   /*\n    * Are we blocking the e-mail address?\n    */\n   if ((newval == NULL) || (0 == strcmpic(newval, \"block\")))\n   {\n      log_error(LOG_LEVEL_HEADER, \"crunched From!\");\n      return JB_ERR_OK;\n   }\n\n   log_error(LOG_LEVEL_HEADER, \" modified\");\n\n   *header = strdup(\"From: \");\n   string_append(header, newval);\n\n   return (*header == NULL) ? JB_ERR_MEMORY : JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_send_cookie\n *\n * Description :  Crunches the \"cookie\" header if necessary.\n *                Called from `sed'.\n *\n *                XXX: Stupid name, doesn't send squat.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_send_cookie(struct client_state *csp, char **header)\n{\n   if (csp->action->flags & ACTION_CRUNCH_OUTGOING_COOKIES)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Crunched outgoing cookie: %s\", *header);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_x_forwarded\n *\n * Description :  Handle the \"x-forwarded-for\" config setting properly,\n *                also used in the add_client_headers list.  Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\njb_err client_x_forwarded(struct client_state *csp, char **header)\n{\n   if (0 != (csp->action->flags & ACTION_CHANGE_X_FORWARDED_FOR))\n   {\n      const char *parameter = csp->action->string[ACTION_STRING_CHANGE_X_FORWARDED_FOR];\n\n      if (0 == strcmpic(parameter, \"block\"))\n      {\n         freez(*header);\n         log_error(LOG_LEVEL_HEADER, \"crunched x-forwarded-for!\");\n      }\n      else if (0 == strcmpic(parameter, \"add\"))\n      {\n         string_append(header, \", \");\n         string_append(header, csp->ip_addr_str);\n\n         if (*header == NULL)\n         {\n            return JB_ERR_MEMORY;\n         }\n         log_error(LOG_LEVEL_HEADER,\n            \"Appended client IP address to %s\", *header);\n         csp->flags |= CSP_FLAG_X_FORWARDED_FOR_APPENDED;\n      }\n      else\n      {\n         log_error(LOG_LEVEL_FATAL,\n            \"Invalid change-x-forwarded-for parameter: '%s'\", parameter);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_max_forwards\n *\n * Description :  If the HTTP method is OPTIONS or TRACE, subtract one\n *                from the value of the Max-Forwards header field.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_max_forwards(struct client_state *csp, char **header)\n{\n   int max_forwards;\n\n   if ((0 == strcmpic(csp->http->gpc, \"trace\")) ||\n       (0 == strcmpic(csp->http->gpc, \"options\")))\n   {\n      assert(*(*header+12) == ':');\n      if (1 == sscanf(*header+12, \": %d\", &max_forwards))\n      {\n         if (max_forwards > 0)\n         {\n            snprintf(*header, strlen(*header)+1, \"Max-Forwards: %d\", --max_forwards);\n            log_error(LOG_LEVEL_HEADER,\n               \"Max-Forwards value for %s request reduced to %d.\",\n               csp->http->gpc, max_forwards);\n         }\n         else if (max_forwards < 0)\n         {\n            log_error(LOG_LEVEL_ERROR, \"Crunching invalid header: %s\", *header);\n            freez(*header);\n         }\n      }\n      else\n      {\n         log_error(LOG_LEVEL_ERROR, \"Crunching invalid header: %s\", *header);\n         freez(*header);\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_host\n *\n * Description :  If the request URI did not contain host and\n *                port information, parse and evaluate the Host\n *                header field.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_host(struct client_state *csp, char **header)\n{\n   char *p, *q;\n\n   if (strlen(*header) < 7)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Removing empty Host header\");\n      freez(*header);\n      return JB_ERR_OK;\n   }\n\n   if (!csp->http->hostport || (*csp->http->hostport == '*') ||\n       *csp->http->hostport == ' ' || *csp->http->hostport == '\\0')\n   {\n\n      p = strdup_or_die((*header)+6);\n      chomp(p);\n      q = strdup_or_die(p);\n\n      freez(csp->http->hostport);\n      csp->http->hostport = p;\n      freez(csp->http->host);\n      csp->http->host = q;\n      q = strchr(csp->http->host, ':');\n      if (q != NULL)\n      {\n         /* Terminate hostname and evaluate port string */\n         *q++ = '\\0';\n         csp->http->port = atoi(q);\n      }\n      else\n      {\n         csp->http->port = csp->http->ssl ? 443 : 80;\n      }\n\n      log_error(LOG_LEVEL_HEADER, \"New host and port from Host field: %s = %s:%d\",\n                csp->http->hostport, csp->http->host, csp->http->port);\n   }\n\n   /* Signal client_host_adder() to return right away */\n   csp->flags |= CSP_FLAG_HOST_HEADER_IS_SET;\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_if_modified_since\n *\n * Description :  Remove or modify the If-Modified-Since header.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_if_modified_since(struct client_state *csp, char **header)\n{\n   char newheader[50];\n#ifdef HAVE_GMTIME_R\n   struct tm gmt;\n#endif\n   struct tm *timeptr = NULL;\n   time_t tm = 0;\n   const char *newval;\n   char * endptr;\n\n   if (0 == strcmpic(*header, \"If-Modified-Since: Wed, 08 Jun 1955 12:00:00 GMT\"))\n   {\n      /*\n       * The client got an error message because of a temporary problem,\n       * the problem is gone and the client now tries to revalidate our\n       * error message on the real server. The revalidation would always\n       * end with the transmission of the whole document and there is\n       * no need to expose the bogus If-Modified-Since header.\n       */\n      log_error(LOG_LEVEL_HEADER, \"Crunching useless If-Modified-Since header.\");\n      freez(*header);\n   }\n   else if (csp->action->flags & ACTION_HIDE_IF_MODIFIED_SINCE)\n   {\n      newval = csp->action->string[ACTION_STRING_IF_MODIFIED_SINCE];\n\n      if ((0 == strcmpic(newval, \"block\")))\n      {\n         log_error(LOG_LEVEL_HEADER, \"Crunching %s\", *header);\n         freez(*header);\n      }\n      else /* add random value */\n      {\n         if (JB_ERR_OK != parse_time_header(*header, &tm))\n         {\n            log_error(LOG_LEVEL_HEADER,\n               \"Couldn't parse time in %s (crunching!)\", *header);\n            freez(*header);\n         }\n         else\n         {\n            long int hours, minutes, seconds;\n            long int rtime = strtol(newval, &endptr, 0);\n            const int negative_range = (rtime < 0);\n\n            if (rtime)\n            {\n               log_error(LOG_LEVEL_HEADER, \"Randomizing: %s (random range: %d minut%s)\",\n                  *header, rtime, (rtime == 1 || rtime == -1) ? \"e\": \"es\");\n               if (negative_range)\n               {\n                  rtime *= -1;\n               }\n               rtime *= 60;\n               rtime = pick_from_range(rtime);\n            }\n            else\n            {\n               log_error(LOG_LEVEL_ERROR, \"Random range is 0. Assuming time transformation test.\",\n                  *header);\n            }\n            tm += rtime * (negative_range ? -1 : 1);\n#ifdef HAVE_GMTIME_R\n            timeptr = gmtime_r(&tm, &gmt);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n            privoxy_mutex_lock(&gmtime_mutex);\n            timeptr = gmtime(&tm);\n            privoxy_mutex_unlock(&gmtime_mutex);\n#else\n            timeptr = gmtime(&tm);\n#endif\n            if ((NULL == timeptr) || !strftime(newheader,\n                  sizeof(newheader), \"%a, %d %b %Y %H:%M:%S GMT\", timeptr))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Randomizing '%s' failed. Crunching the header without replacement.\",\n                  *header);\n               freez(*header);\n               return JB_ERR_OK;\n            }\n\n            freez(*header);\n            *header = strdup(\"If-Modified-Since: \");\n            string_append(header, newheader);\n\n            if (*header == NULL)\n            {\n               log_error(LOG_LEVEL_HEADER, \"Insufficient memory, header crunched without replacement.\");\n               return JB_ERR_MEMORY;\n            }\n\n            hours   = rtime / 3600;\n            minutes = rtime / 60 % 60;\n            seconds = rtime % 60;\n\n            log_error(LOG_LEVEL_HEADER,\n               \"Randomized:  %s (%s %d hou%s %d minut%s %d second%s\",\n               *header, (negative_range) ? \"subtracted\" : \"added\", hours,\n               (hours == 1) ? \"r\" : \"rs\", minutes, (minutes == 1) ? \"e\" : \"es\",\n               seconds, (seconds == 1) ? \")\" : \"s)\");\n         }\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_if_none_match\n *\n * Description :  Remove the If-None-Match header.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_if_none_match(struct client_state *csp, char **header)\n{\n   if (csp->action->flags & ACTION_CRUNCH_IF_NONE_MATCH)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Crunching %s\", *header);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_x_filter\n *\n * Description :  Disables filtering if the client set \"X-Filter: No\".\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success\n *\n *********************************************************************/\njb_err client_x_filter(struct client_state *csp, char **header)\n{\n   if (0 == strcmpic(*header, \"X-Filter: No\"))\n   {\n      if (!(csp->config->feature_flags & RUNTIME_FEATURE_HTTP_TOGGLE))\n      {\n         log_error(LOG_LEVEL_INFO, \"Ignored the client's request to fetch without filtering.\");\n      }\n      else\n      {\n         if (csp->action->flags & ACTION_FORCE_TEXT_MODE)\n         {\n            log_error(LOG_LEVEL_HEADER,\n               \"force-text-mode overruled the client's request to fetch without filtering!\");\n         }\n         else\n         {\n            csp->content_type = CT_TABOO; /* XXX: This hack shouldn't be necessary */\n            csp->flags |= CSP_FLAG_NO_FILTERING;\n            log_error(LOG_LEVEL_HEADER, \"Accepted the client's request to fetch without filtering.\");\n         }\n         log_error(LOG_LEVEL_HEADER, \"Crunching %s\", *header);\n         freez(*header);\n      }\n   }\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_range\n *\n * Description :  Removes Range, Request-Range and If-Range headers if\n *                content filtering is enabled and the range doesn't\n *                start at byte 0.\n *\n *                If the client's version of the document has been\n *                altered by Privoxy, the server could interpret the\n *                range differently than the client intended in which\n *                case the user could end up with corrupted content.\n *\n *                If the range starts at byte 0 this isn't an issue\n *                so the header can pass. Partial requests like this\n *                are used to render preview images for videos without\n *                downloading the whole video.\n *\n *                While HTTP doesn't require that range requests are\n *                honoured and the client could simply abort the download\n *                after receiving a sufficient amount of data, various\n *                clients don't handle complete responses to range\n *                requests gracefully and emit misleading error messages\n *                instead.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK\n *\n *********************************************************************/\nstatic jb_err client_range(struct client_state *csp, char **header)\n{\n   if (content_filters_enabled(csp->action)\n      && (0 != strncmpic(strstr(*header, \":\"), \": bytes=0-\", 10)))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Content filtering is enabled.\"\n         \" Crunching: \\'%s\\' to prevent range-mismatch problems.\", *header);\n      freez(*header);\n   }\n\n   return JB_ERR_OK;\n}\n\n/* the following functions add headers directly to the header list */\n\n/*********************************************************************\n *\n * Function    :  client_host_adder\n *\n * Description :  Adds the Host: header field if it is missing.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_host_adder(struct client_state *csp)\n{\n   char *p;\n   jb_err err;\n\n   if (csp->flags & CSP_FLAG_HOST_HEADER_IS_SET)\n   {\n      /* Header already set by the client, nothing to do. */\n      return JB_ERR_OK;\n   }\n\n   if (!csp->http->hostport || !*(csp->http->hostport))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Destination host unknown.\");\n      return JB_ERR_PARSE;\n   }\n\n   /*\n    * remove 'user:pass@' from 'proto://user:pass@host'\n    */\n   if ((p = strchr( csp->http->hostport, '@')) != NULL)\n   {\n      p++;\n   }\n   else\n   {\n      p = csp->http->hostport;\n   }\n\n   /* XXX: Just add it, we already made sure that it will be unique */\n   log_error(LOG_LEVEL_HEADER, \"addh-unique: Host: %s\", p);\n   err = enlist_unique_header(csp->headers, \"Host\", p);\n   return err;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_xtra_adder\n *\n * Description :  Used in the add_client_headers list.  Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_xtra_adder(struct client_state *csp)\n{\n   struct list_entry *lst;\n   jb_err err;\n\n   for (lst = csp->action->multi[ACTION_MULTI_ADD_HEADER]->first;\n        lst ; lst = lst->next)\n   {\n      log_error(LOG_LEVEL_HEADER, \"addh: %s\", lst->str);\n      err = enlist(csp->headers, lst->str);\n      if (err)\n      {\n         return err;\n      }\n\n   }\n\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  client_x_forwarded_for_adder\n *\n * Description :  Used in the add_client_headers list.  Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_x_forwarded_for_adder(struct client_state *csp)\n{\n   char *header = NULL;\n   jb_err err;\n\n   if (!((csp->action->flags & ACTION_CHANGE_X_FORWARDED_FOR)\n         && (0 == strcmpic(csp->action->string[ACTION_STRING_CHANGE_X_FORWARDED_FOR], \"add\")))\n      || (csp->flags & CSP_FLAG_X_FORWARDED_FOR_APPENDED))\n   {\n      /*\n       * If we aren't adding X-Forwarded-For headers,\n       * or we already appended an existing X-Forwarded-For\n       * header, there's nothing left to do here.\n       */\n      return JB_ERR_OK;\n   }\n\n   header = strdup(\"X-Forwarded-For: \");\n   string_append(&header, csp->ip_addr_str);\n\n   if (header == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   log_error(LOG_LEVEL_HEADER, \"addh: %s\", header);\n   err = enlist(csp->headers, header);\n   freez(header);\n\n   return err;\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_connection_adder\n *\n * Description :  Adds an appropriate \"Connection:\" header to csp->headers\n *                unless the header was already present. Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_connection_adder(struct client_state *csp)\n{\n   const unsigned int flags = csp->flags;\n   const char *response_status_line = csp->headers->first->str;\n   static const char connection_close[] = \"Connection: close\";\n\n   if ((flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)\n    && (flags & CSP_FLAG_SERVER_CONNECTION_HEADER_SET))\n   {\n      return JB_ERR_OK;\n   }\n\n   /*\n    * XXX: if we downgraded the response, this check will fail.\n    */\n   if ((csp->config->feature_flags &\n        RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n    && (NULL != response_status_line)\n    && !strncmpic(response_status_line, \"HTTP/1.1\", 8)\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n    && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n#endif\n      )\n   {\n      log_error(LOG_LEVEL_HEADER, \"A HTTP/1.1 response \"\n         \"without Connection header implies keep-alive.\");\n      csp->flags |= CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE;\n      return JB_ERR_OK;\n   }\n\n   log_error(LOG_LEVEL_HEADER, \"Adding: %s\", connection_close);\n\n   return enlist(csp->headers, connection_close);\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  server_proxy_connection_adder\n *\n * Description :  Adds a \"Proxy-Connection: keep-alive\" header to\n *                csp->headers when appropriate.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_proxy_connection_adder(struct client_state *csp)\n{\n   static const char proxy_connection_header[] = \"Proxy-Connection: keep-alive\";\n   jb_err err = JB_ERR_OK;\n\n   if ((csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)\n    && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n    && !(csp->flags & CSP_FLAG_SERVER_PROXY_CONNECTION_HEADER_SET)\n    && ((csp->flags & CSP_FLAG_SERVER_CONTENT_LENGTH_SET)\n       || (csp->flags & CSP_FLAG_CHUNKED)))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Adding: %s\", proxy_connection_header);\n      err = enlist(csp->headers, proxy_connection_header);\n   }\n\n   return err;\n}\n#endif /* FEATURE_CONNECTION_KEEP_ALIVE */\n\n\n/*********************************************************************\n *\n * Function    :  client_connection_header_adder\n *\n * Description :  Adds a proper \"Connection:\" header to csp->headers\n *                unless the header was already present. Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err client_connection_header_adder(struct client_state *csp)\n{\n   static const char connection_close[] = \"Connection: close\";\n\n   if (!(csp->flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)\n     && (csp->flags & CSP_FLAG_CLIENT_CONNECTION_HEADER_SET))\n   {\n      return JB_ERR_OK;\n   }\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)\n      && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)\n      && (csp->http->ssl == 0)\n      && !strcmpic(csp->http->ver, \"HTTP/1.1\"))\n   {\n      csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;\n      return JB_ERR_OK;\n   }\n#endif /* FEATURE_CONNECTION_KEEP_ALIVE */\n\n   log_error(LOG_LEVEL_HEADER, \"Adding: %s\", connection_close);\n\n   return enlist(csp->headers, connection_close);\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_http\n *\n * Description :  - Save the HTTP Status into csp->http->status\n *                - Set CT_TABOO to prevent filtering if the answer\n *                  is a partial range (HTTP status 206)\n *                - Rewrite HTTP/1.1 answers to HTTP/1.0 if +downgrade\n *                  action applies.\n *                - Normalize the HTTP-version.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_PARSE on fatal parse errors.\n *\n *********************************************************************/\nstatic jb_err server_http(struct client_state *csp, char **header)\n{\n   char *reason_phrase = NULL;\n   char *new_response_line;\n   char *p;\n   size_t length;\n   unsigned int major_version;\n   unsigned int minor_version;\n\n   /* Get the reason phrase which start after the second whitespace */\n   p = strchr(*header, ' ');\n   if (NULL != p)\n   {\n      p++;\n      reason_phrase = strchr(p, ' ');\n   }\n\n   if (reason_phrase != NULL)\n   {\n      reason_phrase++;\n   }\n   else\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Response line lacks reason phrase: %s\", *header);\n      reason_phrase=\"\";\n   }\n\n   if (3 != sscanf(*header, \"HTTP/%u.%u %d\", &major_version,\n         &minor_version, &(csp->http->status)))\n   {\n      log_error(LOG_LEVEL_ERROR,\n         \"Failed to parse the response line: %s\", *header);\n      return JB_ERR_PARSE;\n   }\n\n   if (csp->http->status == 206)\n   {\n      csp->content_type = CT_TABOO;\n   }\n\n   if (major_version != 1 || (minor_version != 0 && minor_version != 1))\n   {\n      /*\n       * According to RFC 7230 2.6 intermediaries MUST send\n       * their own HTTP-version in forwarded messages.\n       */\n      log_error(LOG_LEVEL_ERROR,\n         \"Unsupported HTTP version. Downgrading to 1.1.\");\n      major_version = 1;\n      minor_version = 1;\n   }\n\n   if (((csp->action->flags & ACTION_DOWNGRADE) != 0) && (minor_version == 1))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Downgrading answer to HTTP/1.0\");\n      minor_version = 0;\n   }\n\n   /* Rebuild response line. */\n   length = sizeof(\"HTTP/1.1 200 \") + strlen(reason_phrase) + 1;\n   new_response_line = malloc_or_die(length);\n\n   snprintf(new_response_line, length, \"HTTP/%u.%u %d %s\",\n      major_version, minor_version, csp->http->status, reason_phrase);\n\n   if (0 != strcmp(*header, new_response_line))\n   {\n      log_error(LOG_LEVEL_HEADER, \"Response line '%s' changed to '%s'\",\n         *header, new_response_line);\n   }\n\n   freez(*header);\n   *header = new_response_line;\n\n   return JB_ERR_OK;\n}\n\n/*********************************************************************\n *\n * Function    :  add_cooky_expiry_date\n *\n * Description :  Adds a cookie expiry date to a string.\n *\n * Parameters  :\n *          1  :  cookie = On input, pointer to cookie to modify.\n *                         On output, pointer to the modified header.\n *                         The original string is freed.\n *          2  :  lifetime = Seconds the cookie should be valid\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nstatic void add_cookie_expiry_date(char **cookie, time_t lifetime)\n{\n   char tmp[50];\n   struct tm *timeptr = NULL;\n   time_t expiry_date = time(NULL) + lifetime;\n#ifdef HAVE_GMTIME_R\n   struct tm gmt;\n\n   timeptr = gmtime_r(&expiry_date, &gmt);\n#elif defined(MUTEX_LOCKS_AVAILABLE)\n   privoxy_mutex_lock(&gmtime_mutex);\n   timeptr = gmtime(&expiry_date);\n   privoxy_mutex_unlock(&gmtime_mutex);\n#else\n   timeptr = gmtime(&expiry_date);\n#endif\n\n   if (NULL == timeptr)\n   {\n      log_error(LOG_LEVEL_FATAL,\n         \"Failed to get the time in add_cooky_expiry_date()\");\n   }\n   strftime(tmp, sizeof(tmp), \"; expires=%a, %d-%b-%Y %H:%M:%S GMT\", timeptr);\n   if (JB_ERR_OK != string_append(cookie, tmp))\n   {\n      log_error(LOG_LEVEL_FATAL, \"Out of memory in add_cooky_expiry()\");\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  server_set_cookie\n *\n * Description :  Handle the server \"cookie\" header properly.\n *                Crunch, accept or rewrite it to a session cookie.\n *                Called from `sed'.\n *\n * Parameters  :\n *          1  :  csp = Current client state (buffers, headers, etc...)\n *          2  :  header = On input, pointer to header to modify.\n *                On output, pointer to the modified header, or NULL\n *                to remove the header.  This function frees the\n *                original string if necessary.\n *\n * Returns     :  JB_ERR_OK on success, or\n *                JB_ERR_MEMORY on out-of-memory error.\n *\n *********************************************************************/\nstatic jb_err server_set_cookie(struct client_state *csp, char **header)\n{\n   if ((csp->action->flags & ACTION_CRUNCH_INCOMING_COOKIES) != 0)\n   {\n      log_error(LOG_LEVEL_HEADER, \"Crunching incoming cookie: %s\", *header);\n      freez(*header);\n   }\n   else if ((0 != (csp->action->flags & ACTION_SESSION_COOKIES_ONLY))\n         || (0 != (csp->action->flags & ACTION_LIMIT_COOKIE_LIFETIME)))\n   {\n      time_t now;\n      time_t cookie_time;\n      long cookie_lifetime = 0;\n      enum\n      {\n         NO_EXPIRY_DATE_SPECIFIED,\n         EXPIRY_DATE_ACCEPTABLE,\n         EXPIRY_DATE_UNACCEPTABLE\n      } expiry_date_status = NO_EXPIRY_DATE_SPECIFIED;\n\n      /* A variable to store the tag we're working on */\n      char *cur_tag;\n\n      /* Skip \"Set-Cookie:\" (11 characters) in header */\n      cur_tag = *header + 11;\n\n      /* skip whitespace between \"Set-Cookie:\" and value */\n      while (*cur_tag && privoxy_isspace(*cur_tag))\n      {\n         cur_tag++;\n      }\n\n      time(&now);\n\n      if ((csp->action->flags & ACTION_LIMIT_COOKIE_LIFETIME) != 0)\n      {\n         const char *param = csp->action->string[ACTION_STRING_LIMIT_COOKIE_LIFETIME];\n\n         cookie_lifetime = strtol(param, NULL, 0);\n         if (cookie_lifetime < 0)\n         {\n            log_error(LOG_LEVEL_FATAL, \"Invalid cookie lifetime limit: %s\", param);\n         }\n         cookie_lifetime *= 60;\n      }\n\n      /* Loop through each tag in the cookie */\n      while (*cur_tag)\n      {\n         /* Find next tag */\n         char *next_tag = strchr(cur_tag, ';');\n         if (next_tag != NULL)\n         {\n            /* Skip the ';' character itself */\n            next_tag++;\n\n            /* skip whitespace \";\" and start of tag */\n            while (*next_tag && privoxy_isspace(*next_tag))\n            {\n               next_tag++;\n            }\n         }\n         else\n         {\n            /* \"Next tag\" is the end of the string */\n            next_tag = cur_tag + strlen(cur_tag);\n         }\n\n         /*\n          * Check the expiration date to see\n          * if the cookie is still valid, if yes,\n          * rewrite it to a session cookie.\n          */\n         if ((strncmpic(cur_tag, \"expires=\", 8) == 0) && *(cur_tag + 8))\n         {\n            char *expiration_date = cur_tag + 8; /* Skip \"[Ee]xpires=\" */\n\n            if ((expiration_date[0] == '\"')\n             && (expiration_date[1] != '\\0'))\n            {\n               /*\n                * Skip quotation mark. RFC 2109 10.1.2 seems to hint\n                * that the expiration date isn't supposed to be quoted,\n                * but some servers do it anyway.\n                */\n               expiration_date++;\n            }\n\n            /* Did we detect the date properly? */\n            if (JB_ERR_OK != parse_header_time(expiration_date, &cookie_time))\n            {\n               /*\n                * Nope, treat it as if it was still valid.\n                *\n                * XXX: Should we remove the whole cookie instead?\n                */\n               log_error(LOG_LEVEL_ERROR,\n                  \"Can't parse \\'%s\\', send by %s. Unsupported time format?\", cur_tag, csp->http->url);\n               string_move(cur_tag, next_tag);\n               expiry_date_status = EXPIRY_DATE_UNACCEPTABLE;\n            }\n            else\n            {\n               /*\n                * Yes. Check if the cookie is still valid.\n                *\n                * If the cookie is already expired it's probably\n                * a delete cookie and even if it isn't, the browser\n                * will discard it anyway.\n                */\n\n               /*\n                * XXX: timegm() isn't available on some AmigaOS\n                * versions and our replacement doesn't work.\n                *\n                * Our options are to either:\n                *\n                * - disable session-cookies-only completely if timegm\n                *   is missing,\n                *\n                * - to simply remove all expired tags, like it has\n                *   been done until Privoxy 3.0.6 and to live with\n                *    the consequence that it can cause login/logout\n                *   problems on servers that don't validate their\n                *   input properly, or\n                *\n                * - to replace it with mktime in which\n                *   case there is a slight chance of valid cookies\n                *   passing as already expired.\n                *\n                *   This is the way it's currently done and it's not\n                *   as bad as it sounds. If the missing GMT offset is\n                *   enough to change the result of the expiration check\n                *   the cookie will be only valid for a few hours\n                *   anyway, which in many cases will be shorter\n                *   than a browser session.\n                */\n               if (cookie_time < now)\n               {\n                  log_error(LOG_LEVEL_HEADER,\n                     \"Cookie \\'%s\\' is already expired and can pass unmodified.\", *header);\n                  /* Just in case some clown sets more then one expiration date */\n                  cur_tag = next_tag;\n                  expiry_date_status = EXPIRY_DATE_ACCEPTABLE;\n               }\n               else if ((cookie_lifetime != 0) && (cookie_time < (now + cookie_lifetime)))\n               {\n                  log_error(LOG_LEVEL_HEADER, \"Cookie \\'%s\\' can pass unmodified. \"\n                     \"Its lifetime is below the limit.\", *header);\n                  /* Just in case some clown sets more then one expiration date */\n                  cur_tag = next_tag;\n                  expiry_date_status = EXPIRY_DATE_ACCEPTABLE;\n               }\n               else\n               {\n                  /*\n                   * Still valid, delete expiration date by copying\n                   * the rest of the string over it.\n                   */\n                  string_move(cur_tag, next_tag);\n\n                  /* That changed the header, need to issue a log message */\n                  expiry_date_status = EXPIRY_DATE_UNACCEPTABLE;\n\n                  /*\n                   * Note that the next tag has now been moved to *cur_tag,\n                   * so we do not need to update the cur_tag pointer.\n                   */\n               }\n            }\n\n         }\n         else\n         {\n            /* Move on to next cookie tag */\n            cur_tag = next_tag;\n         }\n      }\n\n      if (expiry_date_status != EXPIRY_DATE_ACCEPTABLE)\n      {\n         assert(NULL != *header);\n         if (cookie_lifetime != 0)\n         {\n            add_cookie_expiry_date(header, cookie_lifetime);\n            log_error(LOG_LEVEL_HEADER, \"Cookie rewritten to: %s\", *header);\n         }\n         else if (expiry_date_status != NO_EXPIRY_DATE_SPECIFIED)\n         {\n            log_error(LOG_LEVEL_HEADER,\n               \"Cookie rewritten to a temporary one: %s\", *header);\n         }\n      }\n   }\n\n   return JB_ERR_OK;\n}\n\n\n#ifdef FEATURE_FORCE_LOAD\n/*********************************************************************\n *\n * Function    :  strclean\n *\n * Description :  In-Situ-Eliminate all occurrences of substring in\n *                string\n *\n * Parameters  :\n *          1  :  string = string to clean\n *          2  :  substring = substring to eliminate\n *\n * Returns     :  Number of eliminations\n *\n *********************************************************************/\nint strclean(char *string, const char *substring)\n{\n   int hits = 0;\n   size_t len;\n   char *pos, *p;\n\n   len = strlen(substring);\n\n   while((pos = strstr(string, substring)) != NULL)\n   {\n      p = pos + len;\n      do\n      {\n         *(p - len) = *p;\n      }\n      while (*p++ != '\\0');\n\n      hits++;\n   }\n\n   return(hits);\n}\n#endif /* def FEATURE_FORCE_LOAD */\n\n\n/*********************************************************************\n *\n * Function    :  parse_header_time\n *\n * Description :  Parses time formats used in HTTP header strings\n *                to get the numerical respresentation.\n *\n * Parameters  :\n *          1  :  header_time = HTTP header time as string.\n *          2  :  result = storage for header_time in seconds\n *\n * Returns     :  JB_ERR_OK if the time format was recognized, or\n *                JB_ERR_PARSE otherwise.\n *\n *********************************************************************/\nstatic jb_err parse_header_time(const char *header_time, time_t *result)\n{\n   struct tm gmt;\n   /*\n    * Checking for two-digit years first in an\n    * attempt to work around GNU libc's strptime()\n    * reporting negative year values when using %Y.\n    */\n   static const char time_formats[][22] = {\n      /* Tue, 02-Jun-37 20:00:00 */\n      \"%a, %d-%b-%y %H:%M:%S\",\n      /* Tue, 02 Jun 2037 20:00:00 */\n      \"%a, %d %b %Y %H:%M:%S\",\n      /* Tue, 02-Jun-2037 20:00:00 */\n      \"%a, %d-%b-%Y %H:%M:%S\",\n      /* Tuesday, 02-Jun-2037 20:00:00 */\n      \"%A, %d-%b-%Y %H:%M:%S\",\n      /* Tuesday Jun 02 20:00:00 2037 */\n      \"%A %b %d %H:%M:%S %Y\"\n   };\n   unsigned int i;\n\n   for (i = 0; i < SZ(time_formats); i++)\n   {\n      /*\n       * Zero out gmt to prevent time zone offsets.\n       * Documented to be required for GNU libc.\n       */\n      memset(&gmt, 0, sizeof(gmt));\n\n      if (NULL != strptime(header_time, time_formats[i], &gmt))\n      {\n         /* Sanity check for GNU libc. */\n         if (gmt.tm_year < 0)\n         {\n            log_error(LOG_LEVEL_HEADER,\n               \"Failed to parse '%s' using '%s'. Moving on.\",\n               header_time, time_formats[i]);\n            continue;\n         }\n         *result = timegm(&gmt);\n\n#ifdef FEATURE_STRPTIME_SANITY_CHECKS\n         /*\n          * Verify that parsing the date recreated from the first\n          * parse operation gets the previous result. If it doesn't,\n          * either strptime() or strftime() are malfunctioning.\n          *\n          * We could string-compare the recreated date with the original\n          * header date, but this leads to false positives as strptime()\n          * may let %a accept all day formats while strftime() will only\n          * create one.\n          */\n         {\n            char recreated_date[100];\n            struct tm *tm;\n            time_t result2;\n\n            tm = gmtime(result);\n            strftime(recreated_date, sizeof(recreated_date), time_formats[i], tm);\n            memset(&gmt, 0, sizeof(gmt));\n            if (NULL == strptime(recreated_date, time_formats[i], &gmt))\n            {\n               log_error(LOG_LEVEL_ERROR,\n                  \"Failed to parse '%s' generated with '%s' to recreate '%s'.\",\n                  recreated_date, time_formats[i], header_time);\n               continue;\n            }\n            result2 = timegm(&gmt);\n            if (*result != result2)\n            {\n               log_error(LOG_LEVEL_ERROR, \"strftime() and strptime() disagree. \"\n                  \"Format: '%s'. In: '%s', out: '%s'. %d != %d. Rejecting.\",\n                  time_formats[i], header_time, recreated_date, *result, result2);\n               continue;\n            }\n         }\n#endif\n\n         return JB_ERR_OK;\n      }\n   }\n\n   return JB_ERR_PARSE;\n\n}\n\n/*********************************************************************\n *\n * Function    :  parse_time_header\n *\n * Description :  Parses the time in an HTTP time header to get\n *                the numerical respresentation.\n *\n * Parameters  :\n *          1  :  header = HTTP header with a time value\n *          2  :  result = storage for header_time in seconds\n *\n * Returns     :  JB_ERR_OK if the time format was recognized, or\n *                JB_ERR_PARSE otherwise.\n *\n *********************************************************************/\nstatic jb_err parse_time_header(const char *header, time_t *result)\n{\n   const char *header_time;\n\n   header_time = strchr(header, ':');\n\n   /*\n    * Currently this can't happen as all callers are called\n    * through sed() which requires a header name followed by\n    * a colon.\n    */\n   assert(header_time != NULL);\n\n   header_time++;\n   if (*header_time == ' ')\n   {\n      header_time++;\n   }\n\n   return parse_header_time(header_time, result);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  get_destination_from_headers\n *\n * Description :  Parse the \"Host:\" header to get the request's destination.\n *                Only needed if the client's request was forcefully\n *                redirected into Privoxy.\n *\n *                Code mainly copied from client_host() which is currently\n *                run too late for this purpose.\n *\n * Parameters  :\n *          1  :  headers = List of headers (one of them hopefully being\n *                the \"Host:\" header)\n *          2  :  http = storage for the result (host, port and hostport).\n *\n * Returns     :  JB_ERR_MEMORY (or terminates) in case of memory problems,\n *                JB_ERR_PARSE if the host header couldn't be found,\n *                JB_ERR_OK otherwise.\n *\n *********************************************************************/\njb_err get_destination_from_headers(const struct list *headers, struct http_request *http)\n{\n   char *q;\n   char *p;\n   char *host;\n\n   assert(!http->ssl);\n\n   host = get_header_value(headers, \"Host:\");\n\n   if (NULL == host)\n   {\n      log_error(LOG_LEVEL_ERROR, \"No \\\"Host:\\\" header found.\");\n      return JB_ERR_PARSE;\n   }\n\n   p = strdup_or_die(host);\n   chomp(p);\n   q = strdup_or_die(p);\n\n   freez(http->hostport);\n   http->hostport = p;\n   freez(http->host);\n   http->host = q;\n   q = strchr(http->host, ':');\n   if (q != NULL)\n   {\n      /* Terminate hostname and evaluate port string */\n      *q++ = '\\0';\n      http->port = atoi(q);\n   }\n   else\n   {\n      http->port = 80;\n   }\n\n   /* Rebuild request URL */\n   freez(http->url);\n   http->url = strdup(\"http://\");\n   string_append(&http->url, http->hostport);\n   string_append(&http->url, http->path);\n   if (http->url == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   log_error(LOG_LEVEL_HEADER,\n      \"Destination extracted from \\\"Host\\\" header. New request URL: %s\",\n      http->url);\n\n   /*\n    * Regenerate request line in \"proxy format\"\n    * to make rewrites more convenient.\n    */\n   assert(http->cmd != NULL);\n   freez(http->cmd);\n   http->cmd = strdup_or_die(http->gpc);\n   string_append(&http->cmd, \" \");\n   string_append(&http->cmd, http->url);\n   string_append(&http->cmd, \" \");\n   string_append(&http->cmd, http->ver);\n   if (http->cmd == NULL)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  create_forged_referrer\n *\n * Description :  Helper for client_referrer to forge a referer as\n *                'http://hostname[:port]/' to fool stupid\n *                checks for in-site links\n *\n * Parameters  :\n *          1  :  header   = Pointer to header pointer\n *          2  :  hostport = Host and optionally port as string\n *\n * Returns     :  JB_ERR_OK in case of success, or\n *                JB_ERR_MEMORY in case of memory problems.\n *\n *********************************************************************/\nstatic jb_err create_forged_referrer(char **header, const char *hostport)\n{\n    assert(NULL == *header);\n\n    *header = strdup(\"Referer: http://\");\n    string_append(header, hostport);\n    string_append(header, \"/\");\n\n    if (NULL == *header)\n    {\n       return JB_ERR_MEMORY;\n    }\n\n    log_error(LOG_LEVEL_HEADER, \"Referer forged to: %s\", *header);\n\n    return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  create_fake_referrer\n *\n * Description :  Helper for client_referrer to create a fake referrer\n *                based on a string supplied by the user.\n *\n * Parameters  :\n *          1  :  header   = Pointer to header pointer\n *          2  :  hosthost = Referrer to fake\n *\n * Returns     :  JB_ERR_OK in case of success, or\n *                JB_ERR_MEMORY in case of memory problems.\n *\n *********************************************************************/\nstatic jb_err create_fake_referrer(char **header, const char *fake_referrer)\n{\n   assert(NULL == *header);\n\n   if ((0 != strncmpic(fake_referrer, \"http://\", 7)) && (0 != strncmpic(fake_referrer, \"https://\", 8)))\n   {\n      log_error(LOG_LEVEL_HEADER,\n         \"Parameter: +hide-referrer{%s} is a bad idea, but I don't care.\", fake_referrer);\n   }\n   *header = strdup(\"Referer: \");\n   string_append(header, fake_referrer);\n\n   if (NULL == *header)\n   {\n      return JB_ERR_MEMORY;\n   }\n\n   log_error(LOG_LEVEL_HEADER, \"Referer replaced with: %s\", *header);\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  handle_conditional_hide_referrer_parameter\n *\n * Description :  Helper for client_referrer to crunch or forge\n *                the referrer header if the host has changed.\n *\n * Parameters  :\n *          1  :  header = Pointer to header pointer\n *          2  :  host   = The target host (may include the port)\n *          3  :  parameter_conditional_block = Boolean to signal\n *                if we're in conditional-block mode. If not set,\n *                we're in conditional-forge mode.\n *\n * Returns     :  JB_ERR_OK in case of success, or\n *                JB_ERR_MEMORY in case of memory problems.\n *\n *********************************************************************/\nstatic jb_err handle_conditional_hide_referrer_parameter(char **header,\n   const char *host, const int parameter_conditional_block)\n{\n   char *referer = strdup_or_die(*header);\n   const size_t hostlength = strlen(host);\n   const char *referer_url = NULL;\n\n   /* referer begins with 'Referer: http[s]://' */\n   if ((hostlength+17) < strlen(referer))\n   {\n      /*\n       * Shorten referer to make sure the referer is blocked\n       * if www.example.org/www.example.com-shall-see-the-referer/\n       * links to www.example.com/\n       */\n      referer[hostlength+17] = '\\0';\n   }\n   referer_url = strstr(referer, \"http://\");\n   if ((NULL == referer_url) || (NULL == strstr(referer_url, host)))\n   {\n      /* Host has changed, Referer is invalid or a https URL. */\n      if (parameter_conditional_block)\n      {\n         log_error(LOG_LEVEL_HEADER, \"New host is: %s. Crunching %s!\", host, *header);\n         freez(*header);\n      }\n      else\n      {\n         freez(*header);\n         freez(referer);\n         return create_forged_referrer(header, host);\n      }\n   }\n   freez(referer);\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  create_content_length_header\n *\n * Description :  Creates a Content-Length header.\n *\n * Parameters  :\n *          1  :  content_length = The content length to be used in the header.\n *          2  :  header = Allocated space to safe the header.\n *          3  :  buffer_length = The length of the allocated space.\n *\n * Returns     :  void\n *\n *********************************************************************/\nstatic void create_content_length_header(unsigned long long content_length,\n                                         char *header, size_t buffer_length)\n{\n   snprintf(header, buffer_length, \"Content-Length: %llu\", content_length);\n}\n\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n/*********************************************************************\n *\n * Function    :  get_expected_content_length\n *\n * Description :  Figures out the content length from a list of headers.\n *\n * Parameters  :\n *          1  :  headers = List of headers\n *\n * Returns     :  Number of bytes to expect\n *\n *********************************************************************/\nunsigned long long get_expected_content_length(struct list *headers)\n{\n   const char *content_length_header;\n   unsigned long long content_length = 0;\n\n   content_length_header = get_header_value(headers, \"Content-Length:\");\n   if (content_length_header != NULL)\n   {\n      if (JB_ERR_OK != get_content_length(content_length_header, &content_length))\n      {\n         log_error(LOG_LEVEL_ERROR,\n            \"Failed to get the Content-Length in %s\", content_length_header);\n         /* XXX: The header will be removed later on */\n         return 0;\n      }\n   }\n\n   return content_length;\n}\n#endif\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/parsers.h",
    "content": "#ifndef PARSERS_H_INCLUDED\n#define PARSERS_H_INCLUDED\n#define PARSERS_H_VERSION \"$Id: parsers.h,v 1.56 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/parsers.h,v $\n *\n * Purpose     :  Declares functions to parse/crunch headers and pages.\n *                Functions declared include:\n *                   `add_to_iob', `client_cookie_adder', `client_from',\n *                   `client_referrer', `client_send_cookie', `client_ua',\n *                   `client_uagent', `client_x_forwarded',\n *                   `client_x_forwarded_adder', `client_xtra_adder',\n *                   `content_type', `crumble', `destroy_list', `enlist',\n *                   `flush_socket', `free_http_request', `get_header',\n *                   `list_to_text', `parse_http_request', `sed',\n *                   and `server_set_cookie'.\n *\n * Copyright   :  Written by and Copyright (C) 2001 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\n/* Used for sed()'s second argument. */\n#define FILTER_CLIENT_HEADERS 0\n#define FILTER_SERVER_HEADERS 1\n\nextern long flush_socket(jb_socket fd, struct iob *iob);\nextern jb_err add_to_iob(struct iob *iob, const size_t buffer_limit, char *src, long n);\nextern void clear_iob(struct iob *iob);\nextern jb_err decompress_iob(struct client_state *csp);\nextern char *get_header(struct iob *iob);\nextern char *get_header_value(const struct list *header_list, const char *header_name);\nextern jb_err sed(struct client_state *csp, int filter_server_headers);\nextern jb_err update_server_headers(struct client_state *csp);\nextern void get_http_time(int time_offset, char *buf, size_t buffer_size);\nextern jb_err get_destination_from_headers(const struct list *headers, struct http_request *http);\nextern unsigned long long get_expected_content_length(struct list *headers);\nextern jb_err client_transfer_encoding(struct client_state *csp, char **header);\n\n#ifdef FEATURE_FORCE_LOAD\nextern int strclean(char *string, const char *substring);\n#endif /* def FEATURE_FORCE_LOAD */\n\n/* Revision control strings from this header and associated .c file */\nextern const char parsers_rcs[];\nextern const char parsers_h_rcs[];\n\n#endif /* ndef PARSERS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/chartables.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/* This file is automatically written by the dftables auxiliary \nprogram. If you edit it by hand, you might like to edit the Makefile to \nprevent its ever being regenerated.\n\nThis file is #included in the compilation of pcre.c to build the default\ncharacter tables which are used when no tables are passed to the compile\nfunction. */\n\nstatic unsigned char pcre_default_tables[] = {\n\n/* This table is a lower casing table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table is a case flipping table. */\n\n    0,  1,  2,  3,  4,  5,  6,  7,\n    8,  9, 10, 11, 12, 13, 14, 15,\n   16, 17, 18, 19, 20, 21, 22, 23,\n   24, 25, 26, 27, 28, 29, 30, 31,\n   32, 33, 34, 35, 36, 37, 38, 39,\n   40, 41, 42, 43, 44, 45, 46, 47,\n   48, 49, 50, 51, 52, 53, 54, 55,\n   56, 57, 58, 59, 60, 61, 62, 63,\n   64, 97, 98, 99,100,101,102,103,\n  104,105,106,107,108,109,110,111,\n  112,113,114,115,116,117,118,119,\n  120,121,122, 91, 92, 93, 94, 95,\n   96, 65, 66, 67, 68, 69, 70, 71,\n   72, 73, 74, 75, 76, 77, 78, 79,\n   80, 81, 82, 83, 84, 85, 86, 87,\n   88, 89, 90,123,124,125,126,127,\n  128,129,130,131,132,133,134,135,\n  136,137,138,139,140,141,142,143,\n  144,145,146,147,148,149,150,151,\n  152,153,154,155,156,157,158,159,\n  160,161,162,163,164,165,166,167,\n  168,169,170,171,172,173,174,175,\n  176,177,178,179,180,181,182,183,\n  184,185,186,187,188,189,190,191,\n  192,193,194,195,196,197,198,199,\n  200,201,202,203,204,205,206,207,\n  208,209,210,211,212,213,214,215,\n  216,217,218,219,220,221,222,223,\n  224,225,226,227,228,229,230,231,\n  232,233,234,235,236,237,238,239,\n  240,241,242,243,244,245,246,247,\n  248,249,250,251,252,253,254,255,\n\n/* This table contains bit maps for various character classes.\nEach map is 32 bytes long and the bits run from the least\nsignificant end of each byte. The classes that have their own\nmaps are: space, xdigit, digit, upper, lower, word, graph\nprint, punct, and cntrl. Other classes are built from combinations. */\n\n  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,\n  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,\n  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,\n  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\n\n/* This table identifies various classes of character by individual bits:\n  0x01   white space character\n  0x02   letter\n  0x04   decimal digit\n  0x08   hexadecimal digit\n  0x10   alphanumeric or '_'\n  0x80   regular expression metacharacter or binary zero\n*/\n\n  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */\n  0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00, /*   8- 15 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */\n  0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /*    - '  */\n  0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /*  ( - /  */\n  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */\n  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /*  8 - ?  */\n  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  @ - G  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */\n  0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /*  X - _  */\n  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  ` - g  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  h - o  */\n  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  p - w  */\n  0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /*  x -127 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */\n  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */\n\n/* End of chartables.c */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/get.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/*\nThis is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. See\nthe file Tech.Notes for some information on the internals.\n\nWritten by: Philip Hazel <ph10@cam.ac.uk>\n\n           Copyright (c) 1997-2000 University of Cambridge\n\n-----------------------------------------------------------------------------\nPermission is granted to anyone to use this software for any purpose on any\ncomputer system, and to redistribute it freely, subject to the following\nrestrictions:\n\n1. This software 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.\n\n2. The origin of this software must not be misrepresented, either by\n   explicit claim or by omission.\n\n3. Altered versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n4. If PCRE is embedded in any software that is released under the GNU\n   General Purpose Licence (GPL), then the terms of that licence shall\n   supersede any condition above with which it is incompatible.\n-----------------------------------------------------------------------------\n*/\n\n/* This module contains some convenience functions for extracting substrings\nfrom the subject string after a regex match has succeeded. The original idea\nfor these functions came from Scott Wimer <scottw@cgibuilder.com>. */\n\n\n/* Include the internals header, which itself includes Standard C headers plus\nthe external pcre header. */\n\n#include \"internal.h\"\n\n\n\n/*************************************************\n*      Copy captured string to given buffer      *\n*************************************************/\n\n/* This function copies a single captured substring into a given buffer.\nNote that we use memcpy() rather than strncpy() in case there are binary zeros\nin the string.\n\nArguments:\n  subject        the subject string that was matched\n  ovector        pointer to the offsets table\n  stringcount    the number of substrings that were captured\n                   (i.e. the yield of the pcre_exec call, unless\n                   that was zero, in which case it should be 1/3\n                   of the offset table size)\n  stringnumber   the number of the required substring\n  buffer         where to put the substring\n  size           the size of the buffer\n\nReturns:         if successful:\n                   the length of the copied string, not including the zero\n                   that is put on the end; can be zero\n                 if not successful:\n                   PCRE_ERROR_NOMEMORY (-6) buffer too small\n                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring\n*/\n\nint\npcre_copy_substring(const char *subject, int *ovector, int stringcount,\n  int stringnumber, char *buffer, int size)\n{\nint yield;\nif (stringnumber < 0 || stringnumber >= stringcount)\n  return PCRE_ERROR_NOSUBSTRING;\nstringnumber *= 2;\nyield = ovector[stringnumber+1] - ovector[stringnumber];\nif (size < yield + 1) return PCRE_ERROR_NOMEMORY;\nmemcpy(buffer, subject + ovector[stringnumber], yield);\nbuffer[yield] = 0;\nreturn yield;\n}\n\n\n\n/*************************************************\n*      Copy all captured strings to new store    *\n*************************************************/\n\n/* This function gets one chunk of store and builds a list of pointers and all\nof the captured substrings in it. A NULL pointer is put on the end of the list.\n\nArguments:\n  subject        the subject string that was matched\n  ovector        pointer to the offsets table\n  stringcount    the number of substrings that were captured\n                   (i.e. the yield of the pcre_exec call, unless\n                   that was zero, in which case it should be 1/3\n                   of the offset table size)\n  listptr        set to point to the list of pointers\n\nReturns:         if successful: 0\n                 if not successful:\n                   PCRE_ERROR_NOMEMORY (-6) failed to get store\n*/\n\nint\npcre_get_substring_list(const char *subject, int *ovector, int stringcount,\n  const char ***listptr)\n{\nint i;\nint size = sizeof(char *);\nint double_count = stringcount * 2;\nchar **stringlist;\nchar *p;\n\nfor (i = 0; i < double_count; i += 2)\n  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;\n\nstringlist = (char **)(pcre_malloc)(size);\nif (stringlist == NULL) return PCRE_ERROR_NOMEMORY;\n\n*listptr = (const char **)stringlist;\np = (char *)(stringlist + stringcount + 1);\n\nfor (i = 0; i < double_count; i += 2)\n  {\n  int len = ovector[i+1] - ovector[i];\n  memcpy(p, subject + ovector[i], len);\n  *stringlist++ = p;\n  p += len;\n  *p++ = 0;\n  }\n\n*stringlist = NULL;\nreturn 0;\n}\n\n\n\n/*************************************************\n*   Free store obtained by get_substring_list    *\n*************************************************/\n\n/* This function exists for the benefit of people calling PCRE from non-C\nprograms that can call its functions, but not free() or (pcre_free)() directly.\n\nArgument:   the result of a previous pcre_get_substring_list()\nReturns:    nothing\n*/\n\nvoid\npcre_free_substring_list(const char **pointer)\n{\n(pcre_free)((void *)pointer);\n}\n\n\n\n/*************************************************\n*      Copy captured string to new store         *\n*************************************************/\n\n/* This function copies a single captured substring into a piece of new\nstore\n\nArguments:\n  subject        the subject string that was matched\n  ovector        pointer to the offsets table\n  stringcount    the number of substrings that were captured\n                   (i.e. the yield of the pcre_exec call, unless\n                   that was zero, in which case it should be 1/3\n                   of the offset table size)\n  stringnumber   the number of the required substring\n  stringptr      where to put a pointer to the substring\n\nReturns:         if successful:\n                   the length of the string, not including the zero that\n                   is put on the end; can be zero\n                 if not successful:\n                   PCRE_ERROR_NOMEMORY (-6) failed to get store\n                   PCRE_ERROR_NOSUBSTRING (-7) substring not present\n*/\n\nint\npcre_get_substring(const char *subject, int *ovector, int stringcount,\n  int stringnumber, const char **stringptr)\n{\nint yield;\nchar *substring;\nif (stringnumber < 0 || stringnumber >= stringcount)\n  return PCRE_ERROR_NOSUBSTRING;\nstringnumber *= 2;\nyield = ovector[stringnumber+1] - ovector[stringnumber];\nsubstring = (char *)(pcre_malloc)(yield + 1);\nif (substring == NULL) return PCRE_ERROR_NOMEMORY;\nmemcpy(substring, subject + ovector[stringnumber], yield);\nsubstring[yield] = 0;\n*stringptr = substring;\nreturn yield;\n}\n\n\n\n/*************************************************\n*       Free store obtained by get_substring     *\n*************************************************/\n\n/* This function exists for the benefit of people calling PCRE from non-C\nprograms that can call its functions, but not free() or (pcre_free)() directly.\n\nArgument:   the result of a previous pcre_get_substring()\nReturns:    nothing\n*/\n\nvoid\npcre_free_substring(const char *pointer)\n{\n(pcre_free)((void *)pointer);\n}\n\n/* End of get.c */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/internal.h",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n\n/* This is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. See\nthe file Tech.Notes for some information on the internals.\n\nWritten by: Philip Hazel <ph10@cam.ac.uk>\n\n           Copyright (c) 1997-2000 University of Cambridge\n\n-----------------------------------------------------------------------------\nPermission is granted to anyone to use this software for any purpose on any\ncomputer system, and to redistribute it freely, subject to the following\nrestrictions:\n\n1. This software 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.\n\n2. The origin of this software must not be misrepresented, either by\n   explicit claim or by omission.\n\n3. Altered versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n4. If PCRE is embedded in any software that is released under the GNU\n   General Purpose Licence (GPL), then the terms of that licence shall\n   supersede any condition above with which it is incompatible.\n-----------------------------------------------------------------------------\n*/\n\n/* This header contains definitions that are shared between the different\nmodules, but which are not relevant to the outside. */\n\n/* Get the definitions provided by running \"configure\" */\n\n#include \"sp_config.h\"\n\n/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),\ndefine a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY\nis set. Otherwise, include an emulating function for those systems that have\nneither (there some non-Unix environments where this is the case). This assumes\nthat all calls to memmove are moving strings upwards in store, which is the\ncase in PCRE. */\n\n#if ! HAVE_MEMMOVE\n#undef  memmove        /* some systems may have a macro */\n#if HAVE_BCOPY\n#define memmove(a, b, c) bcopy(b, a, c)\n#else\nvoid *\npcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)\n{\nint i;\ndest += n;\nsrc += n;\nfor (i = 0; i < n; ++i) *(--dest) =  *(--src);\n}\n#define memmove(a, b, c) pcre_memmove(a, b, c)\n#endif\n#endif\n\n/* Standard C headers plus the external interface definition */\n\n#include <ctype.h>\n#include <limits.h>\n#include <stddef.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"pcre.h\"\n\n/* In case there is no definition of offsetof() provided - though any proper\nStandard C system should have one. */\n\n#ifndef offsetof\n#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))\n#endif\n\n/* These are the public options that can change during matching. */\n\n#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)\n\n/* Private options flags start at the most significant end of the four bytes,\nbut skip the top bit so we can use ints for convenience without getting tangled\nwith negative values. The public options defined in pcre.h start at the least\nsignificant end. Make sure they don't overlap, though now that we have expanded\nto four bytes there is plenty of space. */\n\n#define PCRE_FIRSTSET      0x40000000  /* first_char is set */\n#define PCRE_REQCHSET      0x20000000  /* req_char is set */\n#define PCRE_STARTLINE     0x10000000  /* start after \\n for multiline */\n#define PCRE_INGROUP       0x08000000  /* compiling inside a group */\n#define PCRE_ICHANGED      0x04000000  /* i option changes within regex */\n\n/* Options for the \"extra\" block produced by pcre_study(). */\n\n#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */\n\n/* Masks for identifying the public options which are permitted at compile\ntime, run time or study time, respectively. */\n\n#define PUBLIC_OPTIONS \\\n  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \\\n   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8)\n\n#define PUBLIC_EXEC_OPTIONS \\\n  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY)\n\n#define PUBLIC_STUDY_OPTIONS 0   /* None defined */\n\n/* Magic number to provide a small check against being handed junk. */\n\n#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */\n\n/* Miscellaneous definitions */\n\ntypedef int BOOL;\n\n#define FALSE   0\n#define TRUE    1\n\n/* These are escaped items that aren't just an encoding of a particular data\nvalue such as \\n. They must have non-zero values, as check_escape() returns\ntheir negation. Also, they must appear in the same order as in the opcode\ndefinitions below, up to ESC_z. The final one must be ESC_REF as subsequent\nvalues are used for \\1, \\2, \\3, etc. There is a test in the code for an escape\ngreater than ESC_b and less than ESC_X to detect the types that may be\nrepeated. If any new escapes are put in-between that don't consume a character,\nthat code will have to change. */\n\nenum { ESC_A = 1, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w,\n       ESC_Z, ESC_z, ESC_REF };\n\n/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets\nthat extract substrings. Starting from 1 (i.e. after OP_END), the values up to\nOP_EOD must correspond in order to the list of escapes immediately above. */\n\nenum {\n  OP_END,            /* End of pattern */\n\n  /* Values corresponding to backslashed metacharacters */\n\n  OP_SOD,            /* Start of data: \\A */\n  OP_NOT_WORD_BOUNDARY,  /* \\B */\n  OP_WORD_BOUNDARY,      /* \\b */\n  OP_NOT_DIGIT,          /* \\D */\n  OP_DIGIT,              /* \\d */\n  OP_NOT_WHITESPACE,     /* \\S */\n  OP_WHITESPACE,         /* \\s */\n  OP_NOT_WORDCHAR,       /* \\W */\n  OP_WORDCHAR,           /* \\w */\n  OP_EODN,           /* End of data or \\n at end of data: \\Z. */\n  OP_EOD,            /* End of data: \\z */\n\n  OP_OPT,            /* Set runtime options */\n  OP_CIRC,           /* Start of line - varies with multiline switch */\n  OP_DOLL,           /* End of line - varies with multiline switch */\n  OP_ANY,            /* Match any character */\n  OP_CHARS,          /* Match string of characters */\n  OP_NOT,            /* Match anything but the following char */\n\n  OP_STAR,           /* The maximizing and minimizing versions of */\n  OP_MINSTAR,        /* all these opcodes must come in pairs, with */\n  OP_PLUS,           /* the minimizing one second. */\n  OP_MINPLUS,        /* This first set applies to single characters */\n  OP_QUERY,\n  OP_MINQUERY,\n  OP_UPTO,           /* From 0 to n matches */\n  OP_MINUPTO,\n  OP_EXACT,          /* Exactly n matches */\n\n  OP_NOTSTAR,        /* The maximizing and minimizing versions of */\n  OP_NOTMINSTAR,     /* all these opcodes must come in pairs, with */\n  OP_NOTPLUS,        /* the minimizing one second. */\n  OP_NOTMINPLUS,     /* This first set applies to \"not\" single characters */\n  OP_NOTQUERY,\n  OP_NOTMINQUERY,\n  OP_NOTUPTO,        /* From 0 to n matches */\n  OP_NOTMINUPTO,\n  OP_NOTEXACT,       /* Exactly n matches */\n\n  OP_TYPESTAR,       /* The maximizing and minimizing versions of */\n  OP_TYPEMINSTAR,    /* all these opcodes must come in pairs, with */\n  OP_TYPEPLUS,       /* the minimizing one second. These codes must */\n  OP_TYPEMINPLUS,    /* be in exactly the same order as those above. */\n  OP_TYPEQUERY,      /* This set applies to character types such as \\d */\n  OP_TYPEMINQUERY,\n  OP_TYPEUPTO,       /* From 0 to n matches */\n  OP_TYPEMINUPTO,\n  OP_TYPEEXACT,      /* Exactly n matches */\n\n  OP_CRSTAR,         /* The maximizing and minimizing versions of */\n  OP_CRMINSTAR,      /* all these opcodes must come in pairs, with */\n  OP_CRPLUS,         /* the minimizing one second. These codes must */\n  OP_CRMINPLUS,      /* be in exactly the same order as those above. */\n  OP_CRQUERY,        /* These are for character classes and back refs */\n  OP_CRMINQUERY,\n  OP_CRRANGE,        /* These are different to the three seta above. */\n  OP_CRMINRANGE,\n\n  OP_CLASS,          /* Match a character class */\n  OP_REF,            /* Match a back reference */\n  OP_RECURSE,        /* Match this pattern recursively */\n\n  OP_ALT,            /* Start of alternation */\n  OP_KET,            /* End of group that doesn't have an unbounded repeat */\n  OP_KETRMAX,        /* These two must remain together and in this */\n  OP_KETRMIN,        /* order. They are for groups the repeat for ever. */\n\n  /* The assertions must come before ONCE and COND */\n\n  OP_ASSERT,         /* Positive lookahead */\n  OP_ASSERT_NOT,     /* Negative lookahead */\n  OP_ASSERTBACK,     /* Positive lookbehind */\n  OP_ASSERTBACK_NOT, /* Negative lookbehind */\n  OP_REVERSE,        /* Move pointer back - used in lookbehind assertions */\n\n  /* ONCE and COND must come after the assertions, with ONCE first, as there's\n  a test for >= ONCE for a subpattern that isn't an assertion. */\n\n  OP_ONCE,           /* Once matched, don't back up into the subpattern */\n  OP_COND,           /* Conditional group */\n  OP_CREF,           /* Used to hold an extraction string number */\n\n  OP_BRAZERO,        /* These two must remain together and in this */\n  OP_BRAMINZERO,     /* order. */\n\n  OP_BRA             /* This and greater values are used for brackets that\n                        extract substrings. */\n};\n\n/* The highest extraction number. This is limited by the number of opcodes\nleft after OP_BRA, i.e. 255 - OP_BRA. We actually set it somewhat lower. */\n\n#define EXTRACT_MAX  99\n\n/* The texts of compile-time error messages are defined as macros here so that\nthey can be accessed by the POSIX wrapper and converted into error codes.  Yes,\nI could have used error codes in the first place, but didn't feel like changing\njust to accommodate the POSIX wrapper. */\n\n#define ERR1  \"\\\\ at end of pattern\"\n#define ERR2  \"\\\\c at end of pattern\"\n#define ERR3  \"unrecognized character follows \\\\\"\n#define ERR4  \"numbers out of order in {} quantifier\"\n#define ERR5  \"number too big in {} quantifier\"\n#define ERR6  \"missing terminating ] for character class\"\n#define ERR7  \"invalid escape sequence in character class\"\n#define ERR8  \"range out of order in character class\"\n#define ERR9  \"nothing to repeat\"\n#define ERR10 \"operand of unlimited repeat could match the empty string\"\n#define ERR11 \"internal error: unexpected repeat\"\n#define ERR12 \"unrecognized character after (?\"\n#define ERR13 \"too many capturing parenthesized sub-patterns\"\n#define ERR14 \"missing )\"\n#define ERR15 \"back reference to non-existent subpattern\"\n#define ERR16 \"erroffset passed as NULL\"\n#define ERR17 \"unknown option bit(s) set\"\n#define ERR18 \"missing ) after comment\"\n#define ERR19 \"too many sets of parentheses\"\n#define ERR20 \"regular expression too large\"\n#define ERR21 \"failed to get memory\"\n#define ERR22 \"unmatched parentheses\"\n#define ERR23 \"internal error: code overflow\"\n#define ERR24 \"unrecognized character after (?<\"\n#define ERR25 \"lookbehind assertion is not fixed length\"\n#define ERR26 \"malformed number after (?(\"\n#define ERR27 \"conditional group contains more than two branches\"\n#define ERR28 \"assertion expected after (?(\"\n#define ERR29 \"(?p must be followed by )\"\n#define ERR30 \"unknown POSIX class name\"\n#define ERR31 \"POSIX collating elements are not supported\"\n#define ERR32 \"this version of PCRE is not compiled with PCRE_UTF8 support\"\n#define ERR33 \"characters with values > 255 are not yet supported in classes\"\n#define ERR34 \"character value in \\\\x{...} sequence is too large\"\n#define ERR35 \"invalid condition (?(0)\"\n\n/* All character handling must be done as unsigned characters. Otherwise there\nare problems with top-bit-set characters and functions such as isspace().\nHowever, we leave the interface to the outside world as char *, because that\nshould make things easier for callers. We define a short type for unsigned char\nto save lots of typing. I tried \"uchar\", but it causes problems on Digital\nUnix, where it is defined in sys/types, so use \"uschar\" instead. */\n\ntypedef unsigned char uschar;\n\n/* The real format of the start of the pcre block; the actual code vector\nruns on as long as necessary after the end. */\n\ntypedef struct real_pcre {\n  unsigned long int magic_number;\n  size_t size;\n  const unsigned char *tables;\n  unsigned long int options;\n  uschar top_bracket;\n  uschar top_backref;\n  uschar first_char;\n  uschar req_char;\n  uschar code[1];\n} real_pcre;\n\n/* The real format of the extra block returned by pcre_study(). */\n\ntypedef struct real_pcre_extra {\n  uschar options;\n  uschar start_bits[32];\n} real_pcre_extra;\n\n\n/* Structure for passing \"static\" information around between the functions\ndoing the compiling, so that they are thread-safe. */\n\ntypedef struct compile_data {\n  const uschar *lcc;            /* Points to lower casing table */\n  const uschar *fcc;            /* Points to case-flipping table */\n  const uschar *cbits;          /* Points to character type table */\n  const uschar *ctypes;         /* Points to table of type maps */\n} compile_data;\n\n/* Structure for passing \"static\" information around between the functions\ndoing the matching, so that they are thread-safe. */\n\ntypedef struct match_data {\n  int    errorcode;             /* As it says */\n  int   *offset_vector;         /* Offset vector */\n  int    offset_end;            /* One past the end */\n  int    offset_max;            /* The maximum usable for return data */\n  const uschar *lcc;            /* Points to lower casing table */\n  const uschar *ctypes;         /* Points to table of type maps */\n  BOOL   offset_overflow;       /* Set if too many extractions */\n  BOOL   notbol;                /* NOTBOL flag */\n  BOOL   noteol;                /* NOTEOL flag */\n  BOOL   utf8;                  /* UTF8 flag */\n  BOOL   endonly;               /* Dollar not before final \\n */\n  BOOL   notempty;              /* Empty string match not wanted */\n  const uschar *start_pattern;  /* For use when recursing */\n  const uschar *start_subject;  /* Start of the subject string */\n  const uschar *end_subject;    /* End of the subject string */\n  const uschar *start_match;    /* Start of this match attempt */\n  const uschar *end_match_ptr;  /* Subject position at end match */\n  int    end_offset_top;        /* Highwater mark at end of match */\n} match_data;\n\n/* Bit definitions for entries in the pcre_ctypes table. */\n\n#define ctype_space   0x01\n#define ctype_letter  0x02\n#define ctype_digit   0x04\n#define ctype_xdigit  0x08\n#define ctype_word    0x10   /* alphameric or '_' */\n#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */\n\n/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set\nof bits for a class map. Some classes are built by combining these tables. */\n\n#define cbit_space     0      /* [:space:] or \\s */\n#define cbit_xdigit   32      /* [:xdigit:] */\n#define cbit_digit    64      /* [:digit:] or \\d */\n#define cbit_upper    96      /* [:upper:] */\n#define cbit_lower   128      /* [:lower:] */\n#define cbit_word    160      /* [:word:] or \\w */\n#define cbit_graph   192      /* [:graph:] */\n#define cbit_print   224      /* [:print:] */\n#define cbit_punct   256      /* [:punct:] */\n#define cbit_cntrl   288      /* [:cntrl:] */\n#define cbit_length  320      /* Length of the cbits table */\n\n/* Offsets of the various tables from the base tables pointer, and\ntotal length. */\n\n#define lcc_offset      0\n#define fcc_offset    256\n#define cbits_offset  512\n#define ctypes_offset (cbits_offset + cbit_length)\n#define tables_length (ctypes_offset + 256)\n\n/* End of internal.h */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/pcre.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/*\nThis is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. See\nthe file Tech.Notes for some information on the internals.\n\nWritten by: Philip Hazel <ph10@cam.ac.uk>\n\n           Copyright (c) 1997-2000 University of Cambridge\n\n-----------------------------------------------------------------------------\nPermission is granted to anyone to use this software for any purpose on any\ncomputer system, and to redistribute it freely, subject to the following\nrestrictions:\n\n1. This software 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.\n\n2. The origin of this software must not be misrepresented, either by\n   explicit claim or by omission.\n\n3. Altered versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n4. If PCRE is embedded in any software that is released under the GNU\n   General Purpose Licence (GPL), then the terms of that licence shall\n   supersede any condition above with which it is incompatible.\n-----------------------------------------------------------------------------\n*/\n\n\n/* Define DEBUG to get debugging output on stdout. */\n\n/* #define DEBUG */\n\n/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef\ninline, and there are *still* stupid compilers about that don't like indented\npre-processor statements. I suppose it's only been 10 years... */\n\n#ifdef DEBUG_PCRE\n#define DPRINTF(p) printf p\n#else\n#define DPRINTF(p) /*nothing*/\n#endif\n\n/* Include the internals header, which itself includes Standard C headers plus\nthe external pcre header. */\n\n#include \"internal.h\"\n\n\n/* Allow compilation as C++ source code, should anybody want to do that. */\n\n#ifdef __cplusplus\n#define class pcre_class\n#endif\n\n\n/* Number of items on the nested bracket stacks at compile time. This should\nnot be set greater than 200. */\n\n#define BRASTACK_SIZE 200\n\n\n/* The number of bytes in a literal character string above which we can't add\nany more is different when UTF-8 characters may be encountered. */\n\n#ifdef SUPPORT_UTF8\n#define MAXLIT 250\n#else\n#define MAXLIT 255\n#endif\n\n\n/* Min and max values for the common repeats; for the maxima, 0 => infinity */\n\nstatic const char rep_min[] = { 0, 0, 1, 1, 0, 0 };\nstatic const char rep_max[] = { 0, 0, 0, 0, 1, 1 };\n\n/* Text forms of OP_ values and things, for debugging (not all used) */\n\n#ifdef DEBUG_PCRE\nstatic const char *OP_names[] = {\n  \"End\", \"\\\\A\", \"\\\\B\", \"\\\\b\", \"\\\\D\", \"\\\\d\",\n  \"\\\\S\", \"\\\\s\", \"\\\\W\", \"\\\\w\", \"\\\\Z\", \"\\\\z\",\n  \"Opt\", \"^\", \"$\", \"Any\", \"chars\", \"not\",\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\", \"{\",\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\", \"{\",\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\", \"{\",\n  \"*\", \"*?\", \"+\", \"+?\", \"?\", \"??\", \"{\", \"{\",\n  \"class\", \"Ref\", \"Recurse\",\n  \"Alt\", \"Ket\", \"KetRmax\", \"KetRmin\", \"Assert\", \"Assert not\",\n  \"AssertB\", \"AssertB not\", \"Reverse\", \"Once\", \"Cond\", \"Cref\",\n  \"Brazero\", \"Braminzero\", \"Bra\"\n};\n#endif\n\n/* Table for handling escaped characters in the range '0'-'z'. Positive returns\nare simple data values; negative values are for special things like \\d and so\non. Zero means further processing is needed (for things like \\x), or the escape\nis invalid. */\n\nstatic const short int escapes[] = {\n    0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */\n    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */\n  '@', -ESC_A, -ESC_B,      0, -ESC_D,      0,      0,      0,   /* @ - G */\n    0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */\n    0,      0,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */\n    0,      0, -ESC_Z,    '[',   '\\\\',    ']',    '^',    '_',   /* X - _ */\n  '`',      7, -ESC_b,      0, -ESC_d,     27,   '\\f',      0,   /* ` - g */\n    0,      0,      0,      0,      0,      0,   '\\n',      0,   /* h - o */\n    0,      0,   '\\r', -ESC_s,   '\\t',      0,      0, -ESC_w,   /* p - w */\n    0,      0, -ESC_z                                            /* x - z */\n};\n\n/* Tables of names of POSIX character classes and their lengths. The list is\nterminated by a zero length entry. The first three must be alpha, upper, lower,\nas this is assumed for handling case independence. */\n\nstatic const char *posix_names[] = {\n  \"alpha\", \"lower\", \"upper\",\n  \"alnum\", \"ascii\", \"cntrl\", \"digit\", \"graph\",\n  \"print\", \"punct\", \"space\", \"word\",  \"xdigit\" };\n\nstatic const uschar posix_name_lengths[] = {\n  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };\n\n/* Table of class bit maps for each POSIX class; up to three may be combined\nto form the class. */\n\nstatic const int posix_class_maps[] = {\n  cbit_lower, cbit_upper, -1,             /* alpha */\n  cbit_lower, -1,         -1,             /* lower */\n  cbit_upper, -1,         -1,             /* upper */\n  cbit_digit, cbit_lower, cbit_upper,     /* alnum */\n  cbit_print, cbit_cntrl, -1,             /* ascii */\n  cbit_cntrl, -1,         -1,             /* cntrl */\n  cbit_digit, -1,         -1,             /* digit */\n  cbit_graph, -1,         -1,             /* graph */\n  cbit_print, -1,         -1,             /* print */\n  cbit_punct, -1,         -1,             /* punct */\n  cbit_space, -1,         -1,             /* space */\n  cbit_word,  -1,         -1,             /* word */\n  cbit_xdigit,-1,         -1              /* xdigit */\n};\n\n\n/* Definition to allow mutual recursion */\n\nstatic BOOL\n  compile_regex(int, int, int *, uschar **, const uschar **, const char **,\n    BOOL, int, int *, int *, compile_data *);\n\n/* Structure for building a chain of data that actually lives on the\nstack, for holding the values of the subject pointer at the start of each\nsubpattern, so as to detect when an empty string has been matched by a\nsubpattern - to break infinite loops. */\n\ntypedef struct eptrblock {\n  struct eptrblock *prev;\n  const uschar *saved_eptr;\n} eptrblock;\n\n/* Flag bits for the match() function */\n\n#define match_condassert   0x01    /* Called to check a condition assertion */\n#define match_isgroup      0x02    /* Set if start of bracketed group */\n\n\n\n/*************************************************\n*               Global variables                 *\n*************************************************/\n\n/* PCRE is thread-clean and doesn't use any global variables in the normal\nsense. However, it calls memory allocation and free functions via the two\nindirections below, which are can be changed by the caller, but are shared\nbetween all threads. */\n\nvoid *(*pcre_malloc)(size_t) = malloc;\nvoid  (*pcre_free)(void *) = free;\n\n\n\n/*************************************************\n*    Macros and tables for character handling    *\n*************************************************/\n\n/* When UTF-8 encoding is being used, a character is no longer just a single\nbyte. The macros for character handling generate simple sequences when used in\nbyte-mode, and more complicated ones for UTF-8 characters. */\n\n#ifndef SUPPORT_UTF8\n#define GETCHARINC(c, eptr) c = *eptr++;\n#define GETCHARLEN(c, eptr, len) c = *eptr;\n#define BACKCHAR(eptr)\n\n#else   /* SUPPORT_UTF8 */\n\n/* Get the next UTF-8 character, advancing the pointer */\n\n#define GETCHARINC(c, eptr) \\\n  c = *eptr++; \\\n  if (md->utf8 && (c & 0xc0) == 0xc0) \\\n    { \\\n    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \\\n    int s = 6 - a;                  /* Amount to shift next byte */  \\\n    c &= utf8_table3[a];            /* Low order bits from first byte */ \\\n    while (a-- > 0) \\\n      { \\\n      c |= (*eptr++ & 0x3f) << s; \\\n      s += 6; \\\n      } \\\n    }\n\n/* Get the next UTF-8 character, not advancing the pointer, setting length */\n\n#define GETCHARLEN(c, eptr, len) \\\n  c = *eptr; \\\n  len = 1; \\\n  if (md->utf8 && (c & 0xc0) == 0xc0) \\\n    { \\\n    int i; \\\n    int a = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \\\n    int s = 6 - a;                  /* Amount to shift next byte */  \\\n    c &= utf8_table3[a];            /* Low order bits from first byte */ \\\n    for (i = 1; i <= a; i++) \\\n      { \\\n      c |= (eptr[i] & 0x3f) << s; \\\n      s += 6; \\\n      } \\\n    len += a; \\\n    }\n\n/* If the pointer is not at the start of a character, move it back until\nit is. */\n\n#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;\n\n#endif\n\n\n\n/*************************************************\n*             Default character tables           *\n*************************************************/\n\n/* A default set of character tables is included in the PCRE binary. Its source\nis built by the maketables auxiliary program, which uses the default C ctypes\nfunctions, and put in the file chartables.c. These tables are used by PCRE\nwhenever the caller of pcre_compile() does not provide an alternate set of\ntables. */\n\n#include \"chartables.c\"\n\n\n\n#ifdef SUPPORT_UTF8\n/*************************************************\n*           Tables for UTF-8 support             *\n*************************************************/\n\n/* These are the breakpoints for different numbers of bytes in a UTF-8\ncharacter. */\n\nstatic int utf8_table1[] = { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};\n\n/* These are the indicator bits and the mask for the data bits to set in the\nfirst byte of a character, indexed by the number of additional bytes. */\n\nstatic int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};\nstatic int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};\n\n/* Table of the number of extra characters, indexed by the first character\nmasked with 0x3f. The highest number for a valid UTF-8 character is in fact\n0x3d. */\n\nstatic uschar utf8_table4[] = {\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\n  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,\n  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };\n\n\n/*************************************************\n*       Convert character value to UTF-8         *\n*************************************************/\n\n/* This function takes an integer value in the range 0 - 0x7fffffff\nand encodes it as a UTF-8 character in 0 to 6 bytes.\n\nArguments:\n  cvalue     the character value\n  buffer     pointer to buffer for result - at least 6 bytes long\n\nReturns:     number of characters placed in the buffer\n*/\n\nstatic int\nord2utf8(int cvalue, uschar *buffer)\n{\nregister int i, j;\nfor (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)\n  if (cvalue <= utf8_table1[i]) break;\n*buffer++ = utf8_table2[i] | (cvalue & utf8_table3[i]);\ncvalue >>= 6 - i;\nfor (j = 0; j < i; j++)\n  {\n  *buffer++ = 0x80 | (cvalue & 0x3f);\n  cvalue >>= 6;\n  }\nreturn i + 1;\n}\n#endif\n\n\n\n/*************************************************\n*          Return version string                 *\n*************************************************/\n\n#define STRING(a)  # a\n#define XSTRING(s) STRING(s)\n\nconst char *\npcre_version(void)\n{\nreturn XSTRING(PCRE_MAJOR) \".\" XSTRING(PCRE_MINOR) \" \" XSTRING(PCRE_DATE);\n}\n\n\n\n\n/*************************************************\n* (Obsolete) Return info about compiled pattern  *\n*************************************************/\n\n/* This is the original \"info\" function. It picks potentially useful data out\nof the private structure, but its interface was too rigid. It remains for\nbackwards compatibility. The public options are passed back in an int - though\nthe re->options field has been expanded to a long int, all the public options\nat the low end of it, and so even on 16-bit systems this will still be OK.\nTherefore, I haven't changed the API for pcre_info().\n\nArguments:\n  external_re   points to compiled code\n  optptr        where to pass back the options\n  first_char    where to pass back the first character,\n                or -1 if multiline and all branches start ^,\n                or -2 otherwise\n\nReturns:        number of capturing subpatterns\n                or negative values on error\n*/\n\nint\npcre_info(const pcre *external_re, int *optptr, int *first_char)\n{\nconst real_pcre *re = (const real_pcre *)external_re;\nif (re == NULL) return PCRE_ERROR_NULL;\nif (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;\nif (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);\nif (first_char != NULL)\n  *first_char = ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :\n     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;\nreturn re->top_bracket;\n}\n\n\n\n/*************************************************\n*        Return info about compiled pattern      *\n*************************************************/\n\n/* This is a newer \"info\" function which has an extensible interface so\nthat additional items can be added compatibly.\n\nArguments:\n  external_re      points to compiled code\n  external_study   points to study data, or NULL\n  what             what information is required\n  where            where to put the information\n\nReturns:           0 if data returned, negative on error\n*/\n\nint\npcre_fullinfo(const pcre *external_re, const pcre_extra *study_data, int what,\n  void *where)\n{\nconst real_pcre *re = (const real_pcre *)external_re;\nconst real_pcre_extra *study = (const real_pcre_extra *)study_data;\n\nif (re == NULL || where == NULL) return PCRE_ERROR_NULL;\nif (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;\n\nswitch (what)\n  {\n  case PCRE_INFO_OPTIONS:\n  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;\n  break;\n\n  case PCRE_INFO_SIZE:\n  *((size_t *)where) = re->size;\n  break;\n\n  case PCRE_INFO_CAPTURECOUNT:\n  *((int *)where) = re->top_bracket;\n  break;\n\n  case PCRE_INFO_BACKREFMAX:\n  *((int *)where) = re->top_backref;\n  break;\n\n  case PCRE_INFO_FIRSTCHAR:\n  *((int *)where) =\n    ((re->options & PCRE_FIRSTSET) != 0)? re->first_char :\n    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;\n  break;\n\n  case PCRE_INFO_FIRSTTABLE:\n  *((const uschar **)where) =\n    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?\n      study->start_bits : NULL;\n  break;\n\n  case PCRE_INFO_LASTLITERAL:\n  *((int *)where) =\n    ((re->options & PCRE_REQCHSET) != 0)? re->req_char : -1;\n  break;\n\n  default: return PCRE_ERROR_BADOPTION;\n  }\n\nreturn 0;\n}\n\n\n\n#ifdef DEBUG_PCRE\n/*************************************************\n*        Debugging function to print chars       *\n*************************************************/\n\n/* Print a sequence of chars in printable format, stopping at the end of the\nsubject if the requested.\n\nArguments:\n  p           points to characters\n  length      number to print\n  is_subject  TRUE if printing from within md->start_subject\n  md          pointer to matching data block, if is_subject is TRUE\n\nReturns:     nothing\n*/\n\nstatic void\npchars(const uschar *p, int length, BOOL is_subject, match_data *md)\n{\nint c;\nif (is_subject && length > md->end_subject - p) length = md->end_subject - p;\nwhile (length-- > 0)\n  if (isprint(c = *(p++))) printf(\"%c\", c); else printf(\"\\\\x%02x\", c);\n}\n#endif\n\n\n\n\n/*************************************************\n*            Handle escapes                      *\n*************************************************/\n\n/* This function is called when a \\ has been encountered. It either returns a\npositive value for a simple escape such as \\n, or a negative value which\nencodes one of the more complicated things such as \\d. When UTF-8 is enabled,\na positive value greater than 255 may be returned. On entry, ptr is pointing at\nthe \\. On exit, it is on the final character of the escape sequence.\n\nArguments:\n  ptrptr     points to the pattern position pointer\n  errorptr   points to the pointer to the error message\n  bracount   number of previous extracting brackets\n  options    the options bits\n  isclass    TRUE if inside a character class\n  cd         pointer to char tables block\n\nReturns:     zero or positive => a data character\n             negative => a special escape sequence\n             on error, errorptr is set\n*/\n\nstatic int\ncheck_escape(const uschar **ptrptr, const char **errorptr, int bracount,\n  int options, BOOL isclass, compile_data *cd)\n{\nconst uschar *ptr = *ptrptr;\nint c, i;\n\n/* If backslash is at the end of the pattern, it's an error. */\n\nc = *(++ptr);\nif (c == 0) *errorptr = ERR1;\n\n/* Digits or letters may have special meaning; all others are literals. */\n\nelse if (c < '0' || c > 'z') {}\n\n/* Do an initial lookup in a table. A non-zero result is something that can be\nreturned immediately. Otherwise further processing may be required. */\n\nelse if ((i = escapes[c - '0']) != 0) c = i;\n\n/* Escapes that need further processing, or are illegal. */\n\nelse\n  {\n  const uschar *oldptr;\n  switch (c)\n    {\n    /* The handling of escape sequences consisting of a string of digits\n    starting with one that is not zero is not straightforward. By experiment,\n    the way Perl works seems to be as follows:\n\n    Outside a character class, the digits are read as a decimal number. If the\n    number is less than 10, or if there are that many previous extracting\n    left brackets, then it is a back reference. Otherwise, up to three octal\n    digits are read to form an escaped byte. Thus \\123 is likely to be octal\n    123 (cf \\0123, which is octal 012 followed by the literal 3). If the octal\n    value is greater than 377, the least significant 8 bits are taken. Inside a\n    character class, \\ followed by a digit is always an octal number. */\n\n    case '1': case '2': case '3': case '4': case '5':\n    case '6': case '7': case '8': case '9':\n\n    if (!isclass)\n      {\n      oldptr = ptr;\n      c -= '0';\n      while ((cd->ctypes[ptr[1]] & ctype_digit) != 0)\n        c = c * 10 + *(++ptr) - '0';\n      if (c < 10 || c <= bracount)\n        {\n        c = -(ESC_REF + c);\n        break;\n        }\n      ptr = oldptr;      /* Put the pointer back and fall through */\n      }\n\n    /* Handle an octal number following \\. If the first digit is 8 or 9, Perl\n    generates a binary zero byte and treats the digit as a following literal.\n    Thus we have to pull back the pointer by one. */\n\n    if ((c = *ptr) >= '8')\n      {\n      ptr--;\n      c = 0;\n      break;\n      }\n\n    /* \\0 always starts an octal number, but we may drop through to here with a\n    larger first octal digit. */\n\n    case '0':\n    c -= '0';\n    while(i++ < 2 && (cd->ctypes[ptr[1]] & ctype_digit) != 0 &&\n      ptr[1] != '8' && ptr[1] != '9')\n        c = c * 8 + *(++ptr) - '0';\n    c &= 255;     /* Take least significant 8 bits */\n    break;\n\n    /* \\x is complicated when UTF-8 is enabled. \\x{ddd} is a character number\n    which can be greater than 0xff, but only if the ddd are hex digits. */\n\n    case 'x':\n#ifdef SUPPORT_UTF8\n    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)\n      {\n      const uschar *pt = ptr + 2;\n      register int count = 0;\n      c = 0;\n      while ((cd->ctypes[*pt] & ctype_xdigit) != 0)\n        {\n        count++;\n        c = c * 16 + cd->lcc[*pt] -\n          (((cd->ctypes[*pt] & ctype_digit) != 0)? '0' : 'W');\n        pt++;\n        }\n      if (*pt == '}')\n        {\n        if (c < 0 || count > 8) *errorptr = ERR34;\n        ptr = pt;\n        break;\n        }\n      /* If the sequence of hex digits does not end with '}', then we don't\n      recognize this construct; fall through to the normal \\x handling. */\n      }\n#endif\n\n    /* Read just a single hex char */\n\n    c = 0;\n    while (i++ < 2 && (cd->ctypes[ptr[1]] & ctype_xdigit) != 0)\n      {\n      ptr++;\n      c = c * 16 + cd->lcc[*ptr] -\n        (((cd->ctypes[*ptr] & ctype_digit) != 0)? '0' : 'W');\n      }\n    break;\n\n    /* Other special escapes not starting with a digit are straightforward */\n\n    case 'c':\n    c = *(++ptr);\n    if (c == 0)\n      {\n      *errorptr = ERR2;\n      return 0;\n      }\n\n    /* A letter is upper-cased; then the 0x40 bit is flipped */\n\n    if (c >= 'a' && c <= 'z') c = cd->fcc[c];\n    c ^= 0x40;\n    break;\n\n    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any\n    other alphameric following \\ is an error if PCRE_EXTRA was set; otherwise,\n    for Perl compatibility, it is a literal. This code looks a bit odd, but\n    there used to be some cases other than the default, and there may be again\n    in future, so I haven't \"optimized\" it. */\n\n    default:\n    if ((options & PCRE_EXTRA) != 0) switch(c)\n      {\n      default:\n      *errorptr = ERR3;\n      break;\n      }\n    break;\n    }\n  }\n\n*ptrptr = ptr;\nreturn c;\n}\n\n\n\n/*************************************************\n*            Check for counted repeat            *\n*************************************************/\n\n/* This function is called when a '{' is encountered in a place where it might\nstart a quantifier. It looks ahead to see if it really is a quantifier or not.\nIt is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}\nwhere the ddds are digits.\n\nArguments:\n  p         pointer to the first char after '{'\n  cd        pointer to char tables block\n\nReturns:    TRUE or FALSE\n*/\n\nstatic BOOL\nis_counted_repeat(const uschar *p, compile_data *cd)\n{\nif ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;\nwhile ((cd->ctypes[*p] & ctype_digit) != 0) p++;\nif (*p == '}') return TRUE;\n\nif (*p++ != ',') return FALSE;\nif (*p == '}') return TRUE;\n\nif ((cd->ctypes[*p++] & ctype_digit) == 0) return FALSE;\nwhile ((cd->ctypes[*p] & ctype_digit) != 0) p++;\nreturn (*p == '}');\n}\n\n\n\n/*************************************************\n*         Read repeat counts                     *\n*************************************************/\n\n/* Read an item of the form {n,m} and return the values. This is called only\nafter is_counted_repeat() has confirmed that a repeat-count quantifier exists,\nso the syntax is guaranteed to be correct, but we need to check the values.\n\nArguments:\n  p          pointer to first char after '{'\n  minp       pointer to int for min\n  maxp       pointer to int for max\n             returned as -1 if no max\n  errorptr   points to pointer to error message\n  cd         pointer to character tables clock\n\nReturns:     pointer to '}' on success;\n             current ptr on error, with errorptr set\n*/\n\nstatic const uschar *\nread_repeat_counts(const uschar *p, int *minp, int *maxp,\n  const char **errorptr, compile_data *cd)\n{\nint min = 0;\nint max = -1;\n\nwhile ((cd->ctypes[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';\n\nif (*p == '}') max = min; else\n  {\n  if (*(++p) != '}')\n    {\n    max = 0;\n    while((cd->ctypes[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';\n    if (max < min)\n      {\n      *errorptr = ERR4;\n      return p;\n      }\n    }\n  }\n\n/* Do paranoid checks, then fill in the required variables, and pass back the\npointer to the terminating '}'. */\n\nif (min > 65535 || max > 65535)\n  *errorptr = ERR5;\nelse\n  {\n  *minp = min;\n  *maxp = max;\n  }\nreturn p;\n}\n\n\n\n/*************************************************\n*        Find the fixed length of a pattern      *\n*************************************************/\n\n/* Scan a pattern and compute the fixed length of subject that will match it,\nif the length is fixed. This is needed for dealing with backward assertions.\n\nArguments:\n  code     points to the start of the pattern (the bracket)\n  options  the compiling options\n\nReturns:   the fixed length, or -1 if there is no fixed length\n*/\n\nstatic int\nfind_fixedlength(uschar *code, int options)\n{\nint length = -1;\n\nregister int branchlength = 0;\nregister uschar *cc = code + 3;\n\n/* Scan along the opcodes for this branch. If we get to the end of the\nbranch, check the length against that of the other branches. */\n\nfor (;;)\n  {\n  int d;\n  register int op = *cc;\n  if (op >= OP_BRA) op = OP_BRA;\n\n  switch (op)\n    {\n    case OP_BRA:\n    case OP_ONCE:\n    case OP_COND:\n    d = find_fixedlength(cc, options);\n    if (d < 0) return -1;\n    branchlength += d;\n    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);\n    cc += 3;\n    break;\n\n    /* Reached end of a branch; if it's a ket it is the end of a nested\n    call. If it's ALT it is an alternation in a nested call. If it is\n    END it's the end of the outer call. All can be handled by the same code. */\n\n    case OP_ALT:\n    case OP_KET:\n    case OP_KETRMAX:\n    case OP_KETRMIN:\n    case OP_END:\n    if (length < 0) length = branchlength;\n      else if (length != branchlength) return -1;\n    if (*cc != OP_ALT) return length;\n    cc += 3;\n    branchlength = 0;\n    break;\n\n    /* Skip over assertive subpatterns */\n\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    do cc += (cc[1] << 8) + cc[2]; while (*cc == OP_ALT);\n    cc += 3;\n    break;\n\n    /* Skip over things that don't match chars */\n\n    case OP_REVERSE:\n    cc++;\n    /* Fall through */\n\n    case OP_CREF:\n    case OP_OPT:\n    cc++;\n    /* Fall through */\n\n    case OP_SOD:\n    case OP_EOD:\n    case OP_EODN:\n    case OP_CIRC:\n    case OP_DOLL:\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n    cc++;\n    break;\n\n    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.\n    This requires a scan of the string, unfortunately. We assume valid UTF-8\n    strings, so all we do is reduce the length by one for byte whose bits are\n    10xxxxxx. */\n\n    case OP_CHARS:\n    branchlength += *(++cc);\n#ifdef SUPPORT_UTF8\n    for (d = 1; d <= *cc; d++)\n      if ((cc[d] & 0xc0) == 0x80) branchlength--;\n#endif\n    cc += *cc + 1;\n    break;\n\n    /* Handle exact repetitions */\n\n    case OP_EXACT:\n    case OP_TYPEEXACT:\n    branchlength += (cc[1] << 8) + cc[2];\n    cc += 4;\n    break;\n\n    /* Handle single-char matchers */\n\n    case OP_NOT_DIGIT:\n    case OP_DIGIT:\n    case OP_NOT_WHITESPACE:\n    case OP_WHITESPACE:\n    case OP_NOT_WORDCHAR:\n    case OP_WORDCHAR:\n    case OP_ANY:\n    branchlength++;\n    cc++;\n    break;\n\n\n    /* Check a class for variable quantification */\n\n    case OP_CLASS:\n    cc += (*cc == OP_REF)? 2 : 33;\n\n    switch (*cc)\n      {\n      case OP_CRSTAR:\n      case OP_CRMINSTAR:\n      case OP_CRQUERY:\n      case OP_CRMINQUERY:\n      return -1;\n\n      case OP_CRRANGE:\n      case OP_CRMINRANGE:\n      if ((cc[1] << 8) + cc[2] != (cc[3] << 8) + cc[4]) return -1;\n      branchlength += (cc[1] << 8) + cc[2];\n      cc += 5;\n      break;\n\n      default:\n      branchlength++;\n      }\n    break;\n\n    /* Anything else is variable length */\n\n    default:\n    return -1;\n    }\n  }\n/* Control never gets here */\n}\n\n\n\n\n/*************************************************\n*           Check for POSIX class syntax         *\n*************************************************/\n\n/* This function is called when the sequence \"[:\" or \"[.\" or \"[=\" is\nencountered in a character class. It checks whether this is followed by an\noptional ^ and then a sequence of letters, terminated by a matching \":]\" or\n\".]\" or \"=]\".\n\nArgument:\n  ptr      pointer to the initial [\n  endptr   where to return the end pointer\n  cd       pointer to compile data\n\nReturns:   TRUE or FALSE\n*/\n\nstatic BOOL\ncheck_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)\n{\nint terminator;          /* Don't combine these lines; the Solaris cc */\nterminator = *(++ptr);   /* compiler warns about \"non-constant\" initializer. */\nif (*(++ptr) == '^') ptr++;\nwhile ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;\nif (*ptr == terminator && ptr[1] == ']')\n  {\n  *endptr = ptr;\n  return TRUE;\n  }\nreturn FALSE;\n}\n\n\n\n\n/*************************************************\n*          Check POSIX class name                *\n*************************************************/\n\n/* This function is called to check the name given in a POSIX-style class entry\nsuch as [:alnum:].\n\nArguments:\n  ptr        points to the first letter\n  len        the length of the name\n\nReturns:     a value representing the name, or -1 if unknown\n*/\n\nstatic int\ncheck_posix_name(const uschar *ptr, int len)\n{\nregister int yield = 0;\nwhile (posix_name_lengths[yield] != 0)\n  {\n  if (len == posix_name_lengths[yield] &&\n    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;\n  yield++;\n  }\nreturn -1;\n}\n\n\n\n\n/*************************************************\n*           Compile one branch                   *\n*************************************************/\n\n/* Scan the pattern, compiling it into the code vector.\n\nArguments:\n  options      the option bits\n  brackets     points to number of brackets used\n  code         points to the pointer to the current code point\n  ptrptr       points to the current pattern pointer\n  errorptr     points to pointer to error message\n  optchanged   set to the value of the last OP_OPT item compiled\n  reqchar      set to the last literal character required, else -1\n  countlits    set to count of mandatory literal characters\n  cd           contains pointers to tables\n\nReturns:       TRUE on success\n               FALSE, with *errorptr set on error\n*/\n\nstatic BOOL\ncompile_branch(int options, int *brackets, uschar **codeptr,\n  const uschar **ptrptr, const char **errorptr, int *optchanged,\n  int *reqchar, int *countlits, compile_data *cd)\n{\nint repeat_type, op_type;\nint repeat_min, repeat_max;\nint bravalue, length;\nint greedy_default, greedy_non_default;\nint prevreqchar;\nint condcount = 0;\nint subcountlits = 0;\nregister int c;\nregister uschar *code = *codeptr;\nuschar *tempcode;\nconst uschar *ptr = *ptrptr;\nconst uschar *tempptr;\nuschar *previous = NULL;\nuschar class[32];\n\n/* Set up the default and non-default settings for greediness */\n\ngreedy_default = ((options & PCRE_UNGREEDY) != 0);\ngreedy_non_default = greedy_default ^ 1;\n\n/* Initialize no required char, and count of literals */\n\n*reqchar = prevreqchar = -1;\n*countlits = 0;\n\n/* Switch on next character until the end of the branch */\n\nfor (;; ptr++)\n  {\n  BOOL negate_class;\n  int class_charcount;\n  int class_lastchar;\n  int newoptions;\n  int condref;\n  int subreqchar;\n\n  c = *ptr;\n  if ((options & PCRE_EXTENDED) != 0)\n    {\n    if ((cd->ctypes[c] & ctype_space) != 0) continue;\n    if (c == '#')\n      {\n      /* The space before the ; is to avoid a warning on a silly compiler\n      on the Macintosh. */\n      while ((c = *(++ptr)) != 0 && c != '\\n') ;\n      continue;\n      }\n    }\n\n  switch(c)\n    {\n    /* The branch terminates at end of string, |, or ). */\n\n    case 0:\n    case '|':\n    case ')':\n    *codeptr = code;\n    *ptrptr = ptr;\n    return TRUE;\n\n    /* Handle single-character metacharacters */\n\n    case '^':\n    previous = NULL;\n    *code++ = OP_CIRC;\n    break;\n\n    case '$':\n    previous = NULL;\n    *code++ = OP_DOLL;\n    break;\n\n    case '.':\n    previous = code;\n    *code++ = OP_ANY;\n    break;\n\n    /* Character classes. These always build a 32-byte bitmap of the permitted\n    characters, except in the special case where there is only one character.\n    For negated classes, we build the map as usual, then invert it at the end.\n    */\n\n    case '[':\n    previous = code;\n    *code++ = OP_CLASS;\n\n    /* If the first character is '^', set the negation flag and skip it. */\n\n    if ((c = *(++ptr)) == '^')\n      {\n      negate_class = TRUE;\n      c = *(++ptr);\n      }\n    else negate_class = FALSE;\n\n    /* Keep a count of chars so that we can optimize the case of just a single\n    character. */\n\n    class_charcount = 0;\n    class_lastchar = -1;\n\n    /* Initialize the 32-char bit map to all zeros. We have to build the\n    map in a temporary bit of store, in case the class contains only 1\n    character, because in that case the compiled code doesn't use the\n    bit map. */\n\n    memset(class, 0, 32 * sizeof(uschar));\n\n    /* Process characters until ] is reached. By writing this as a \"do\" it\n    means that an initial ] is taken as a data character. */\n\n    do\n      {\n      if (c == 0)\n        {\n        *errorptr = ERR6;\n        goto FAILED;\n        }\n\n      /* Handle POSIX class names. Perl allows a negation extension of the\n      form [:^name]. A square bracket that doesn't match the syntax is\n      treated as a literal. We also recognize the POSIX constructions\n      [.ch.] and [=ch=] (\"collating elements\") and fault them, as Perl\n      5.6 does. */\n\n      if (c == '[' &&\n          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&\n          check_posix_syntax(ptr, &tempptr, cd))\n        {\n        BOOL local_negate = FALSE;\n        int posix_class, i;\n        register const uschar *cbits = cd->cbits;\n\n        if (ptr[1] != ':')\n          {\n          *errorptr = ERR31;\n          goto FAILED;\n          }\n\n        ptr += 2;\n        if (*ptr == '^')\n          {\n          local_negate = TRUE;\n          ptr++;\n          }\n\n        posix_class = check_posix_name(ptr, tempptr - ptr);\n        if (posix_class < 0)\n          {\n          *errorptr = ERR30;\n          goto FAILED;\n          }\n\n        /* If matching is caseless, upper and lower are converted to\n        alpha. This relies on the fact that the class table starts with\n        alpha, lower, upper as the first 3 entries. */\n\n        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)\n          posix_class = 0;\n\n        /* Or into the map we are building up to 3 of the static class\n        tables, or their negations. */\n\n        posix_class *= 3;\n        for (i = 0; i < 3; i++)\n          {\n          int taboffset = posix_class_maps[posix_class + i];\n          if (taboffset < 0) break;\n          if (local_negate)\n            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];\n          else\n            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];\n          }\n\n        ptr = tempptr + 1;\n        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */\n        continue;\n        }\n\n      /* Backslash may introduce a single character, or it may introduce one\n      of the specials, which just set a flag. Escaped items are checked for\n      validity in the pre-compiling pass. The sequence \\b is a special case.\n      Inside a class (and only there) it is treated as backspace. Elsewhere\n      it marks a word boundary. Other escapes have preset maps ready to\n      or into the one we are building. We assume they have more than one\n      character in them, so set class_count bigger than one. */\n\n      if (c == '\\\\')\n        {\n        c = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);\n        if (-c == ESC_b) c = '\\b';\n        else if (c < 0)\n          {\n          register const uschar *cbits = cd->cbits;\n          class_charcount = 10;\n          switch (-c)\n            {\n            case ESC_d:\n            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];\n            continue;\n\n            case ESC_D:\n            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];\n            continue;\n\n            case ESC_w:\n            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];\n            continue;\n\n            case ESC_W:\n            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];\n            continue;\n\n            case ESC_s:\n            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];\n            continue;\n\n            case ESC_S:\n            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];\n            continue;\n\n            default:\n            *errorptr = ERR7;\n            goto FAILED;\n            }\n          }\n\n        /* Fall through if single character, but don't at present allow\n        chars > 255 in UTF-8 mode. */\n\n#ifdef SUPPORT_UTF8\n        if (c > 255)\n          {\n          *errorptr = ERR33;\n          goto FAILED;\n          }\n#endif\n        }\n\n      /* A single character may be followed by '-' to form a range. However,\n      Perl does not permit ']' to be the end of the range. A '-' character\n      here is treated as a literal. */\n\n      if (ptr[1] == '-' && ptr[2] != ']')\n        {\n        int d;\n        ptr += 2;\n        d = *ptr;\n\n        if (d == 0)\n          {\n          *errorptr = ERR6;\n          goto FAILED;\n          }\n\n        /* The second part of a range can be a single-character escape, but\n        not any of the other escapes. Perl 5.6 treats a hyphen as a literal\n        in such circumstances. */\n\n        if (d == '\\\\')\n          {\n          const uschar *oldptr = ptr;\n          d = check_escape(&ptr, errorptr, *brackets, options, TRUE, cd);\n\n#ifdef SUPPORT_UTF8\n          if (d > 255)\n            {\n            *errorptr = ERR33;\n            goto FAILED;\n            }\n#endif\n          /* \\b is backslash; any other special means the '-' was literal */\n\n          if (d < 0)\n            {\n            if (d == -ESC_b) d = '\\b'; else\n              {\n              ptr = oldptr - 2;\n              goto SINGLE_CHARACTER;  /* A few lines below */\n              }\n            }\n          }\n\n        if (d < c)\n          {\n          *errorptr = ERR8;\n          goto FAILED;\n          }\n\n        for (; c <= d; c++)\n          {\n          class[c/8] |= (1 << (c&7));\n          if ((options & PCRE_CASELESS) != 0)\n            {\n            int uc = cd->fcc[c];           /* flip case */\n            class[uc/8] |= (1 << (uc&7));\n            }\n          class_charcount++;                /* in case a one-char range */\n          class_lastchar = c;\n          }\n        continue;   /* Go get the next char in the class */\n        }\n\n      /* Handle a lone single character - we can get here for a normal\n      non-escape char, or after \\ that introduces a single character. */\n\n      SINGLE_CHARACTER:\n\n      class [c/8] |= (1 << (c&7));\n      if ((options & PCRE_CASELESS) != 0)\n        {\n        c = cd->fcc[c];   /* flip case */\n        class[c/8] |= (1 << (c&7));\n        }\n      class_charcount++;\n      class_lastchar = c;\n      }\n\n    /* Loop until ']' reached; the check for end of string happens inside the\n    loop. This \"while\" is the end of the \"do\" above. */\n\n    while ((c = *(++ptr)) != ']');\n\n    /* If class_charcount is 1 and class_lastchar is not negative, we saw\n    precisely one character. This doesn't need the whole 32-byte bit map.\n    We turn it into a 1-character OP_CHAR if it's positive, or OP_NOT if\n    it's negative. */\n\n    if (class_charcount == 1 && class_lastchar >= 0)\n      {\n      if (negate_class)\n        {\n        code[-1] = OP_NOT;\n        }\n      else\n        {\n        code[-1] = OP_CHARS;\n        *code++ = 1;\n        }\n      *code++ = class_lastchar;\n      }\n\n    /* Otherwise, negate the 32-byte map if necessary, and copy it into\n    the code vector. */\n\n    else\n      {\n      if (negate_class)\n        for (c = 0; c < 32; c++) code[c] = ~class[c];\n      else\n        memcpy(code, class, 32);\n      code += 32;\n      }\n    break;\n\n    /* Various kinds of repeat */\n\n    case '{':\n    if (!is_counted_repeat(ptr+1, cd)) goto NORMAL_CHAR;\n    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr, cd);\n    if (*errorptr != NULL) goto FAILED;\n    goto REPEAT;\n\n    case '*':\n    repeat_min = 0;\n    repeat_max = -1;\n    goto REPEAT;\n\n    case '+':\n    repeat_min = 1;\n    repeat_max = -1;\n    goto REPEAT;\n\n    case '?':\n    repeat_min = 0;\n    repeat_max = 1;\n\n    REPEAT:\n    if (previous == NULL)\n      {\n      *errorptr = ERR9;\n      goto FAILED;\n      }\n\n    /* If the next character is '?' this is a minimizing repeat, by default,\n    but if PCRE_UNGREEDY is set, it works the other way round. Advance to the\n    next character. */\n\n    if (ptr[1] == '?')\n      { repeat_type = greedy_non_default; ptr++; }\n    else repeat_type = greedy_default;\n\n    /* If previous was a string of characters, chop off the last one and use it\n    as the subject of the repeat. If there was only one character, we can\n    abolish the previous item altogether. A repeat with a zero minimum wipes\n    out any reqchar setting, backing up to the previous value. We must also\n    adjust the countlits value. */\n\n    if (*previous == OP_CHARS)\n      {\n      int len = previous[1];\n\n      if (repeat_min == 0) *reqchar = prevreqchar;\n      *countlits += repeat_min - 1;\n\n      if (len == 1)\n        {\n        c = previous[2];\n        code = previous;\n        }\n      else\n        {\n        c = previous[len+1];\n        previous[1]--;\n        code--;\n        }\n      op_type = 0;                 /* Use single-char op codes */\n      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */\n      }\n\n    /* If previous was a single negated character ([^a] or similar), we use\n    one of the special opcodes, replacing it. The code is shared with single-\n    character repeats by adding a suitable offset into repeat_type. */\n\n    else if ((int)*previous == OP_NOT)\n      {\n      op_type = OP_NOTSTAR - OP_STAR;  /* Use \"not\" opcodes */\n      c = previous[1];\n      code = previous;\n      goto OUTPUT_SINGLE_REPEAT;\n      }\n\n    /* If previous was a character type match (\\d or similar), abolish it and\n    create a suitable repeat item. The code is shared with single-character\n    repeats by adding a suitable offset into repeat_type. */\n\n    else if ((int)*previous < OP_EODN || *previous == OP_ANY)\n      {\n      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */\n      c = *previous;\n      code = previous;\n\n      OUTPUT_SINGLE_REPEAT:\n\n      /* If the maximum is zero then the minimum must also be zero; Perl allows\n      this case, so we do too - by simply omitting the item altogether. */\n\n      if (repeat_max == 0) goto END_REPEAT;\n\n      /* Combine the op_type with the repeat_type */\n\n      repeat_type += op_type;\n\n      /* A minimum of zero is handled either as the special case * or ?, or as\n      an UPTO, with the maximum given. */\n\n      if (repeat_min == 0)\n        {\n        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;\n          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;\n        else\n          {\n          *code++ = OP_UPTO + repeat_type;\n          *code++ = repeat_max >> 8;\n          *code++ = (repeat_max & 255);\n          }\n        }\n\n      /* The case {1,} is handled as the special case + */\n\n      else if (repeat_min == 1 && repeat_max == -1)\n        *code++ = OP_PLUS + repeat_type;\n\n      /* The case {n,n} is just an EXACT, while the general case {n,m} is\n      handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */\n\n      else\n        {\n        if (repeat_min != 1)\n          {\n          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */\n          *code++ = repeat_min >> 8;\n          *code++ = (repeat_min & 255);\n          }\n\n        /* If the mininum is 1 and the previous item was a character string,\n        we either have to put back the item that got cancelled if the string\n        length was 1, or add the character back onto the end of a longer\n        string. For a character type nothing need be done; it will just get\n        put back naturally. Note that the final character is always going to\n        get added below. */\n\n        else if (*previous == OP_CHARS)\n          {\n          if (code == previous) code += 2; else previous[1]++;\n          }\n\n        /*  For a single negated character we also have to put back the\n        item that got cancelled. */\n\n        else if (*previous == OP_NOT) code++;\n\n        /* If the maximum is unlimited, insert an OP_STAR. */\n\n        if (repeat_max < 0)\n          {\n          *code++ = c;\n          *code++ = OP_STAR + repeat_type;\n          }\n\n        /* Else insert an UPTO if the max is greater than the min. */\n\n        else if (repeat_max != repeat_min)\n          {\n          *code++ = c;\n          repeat_max -= repeat_min;\n          *code++ = OP_UPTO + repeat_type;\n          *code++ = repeat_max >> 8;\n          *code++ = (repeat_max & 255);\n          }\n        }\n\n      /* The character or character type itself comes last in all cases. */\n\n      *code++ = c;\n      }\n\n    /* If previous was a character class or a back reference, we put the repeat\n    stuff after it, but just skip the item if the repeat was {0,0}. */\n\n    else if (*previous == OP_CLASS || *previous == OP_REF)\n      {\n      if (repeat_max == 0)\n        {\n        code = previous;\n        goto END_REPEAT;\n        }\n      if (repeat_min == 0 && repeat_max == -1)\n        *code++ = OP_CRSTAR + repeat_type;\n      else if (repeat_min == 1 && repeat_max == -1)\n        *code++ = OP_CRPLUS + repeat_type;\n      else if (repeat_min == 0 && repeat_max == 1)\n        *code++ = OP_CRQUERY + repeat_type;\n      else\n        {\n        *code++ = OP_CRRANGE + repeat_type;\n        *code++ = repeat_min >> 8;\n        *code++ = repeat_min & 255;\n        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */\n        *code++ = repeat_max >> 8;\n        *code++ = repeat_max & 255;\n        }\n      }\n\n    /* If previous was a bracket group, we may have to replicate it in certain\n    cases. */\n\n    else if ((int)*previous >= OP_BRA || (int)*previous == OP_ONCE ||\n             (int)*previous == OP_COND)\n      {\n      register int i;\n      int ketoffset = 0;\n      int len = code - previous;\n      uschar *bralink = NULL;\n\n      /* If the maximum repeat count is unlimited, find the end of the bracket\n      by scanning through from the start, and compute the offset back to it\n      from the current code pointer. There may be an OP_OPT setting following\n      the final KET, so we can't find the end just by going back from the code\n      pointer. */\n\n      if (repeat_max == -1)\n        {\n        register uschar *ket = previous;\n        do ket += (ket[1] << 8) + ket[2]; while (*ket != OP_KET);\n        ketoffset = code - ket;\n        }\n\n      /* The case of a zero minimum is special because of the need to stick\n      OP_BRAZERO in front of it, and because the group appears once in the\n      data, whereas in other cases it appears the minimum number of times. For\n      this reason, it is simplest to treat this case separately, as otherwise\n      the code gets far too mess. There are several special subcases when the\n      minimum is zero. */\n\n      if (repeat_min == 0)\n        {\n        /* If we set up a required char from the bracket, we must back off\n        to the previous value and reset the countlits value too. */\n\n        if (subcountlits > 0)\n          {\n          *reqchar = prevreqchar;\n          *countlits -= subcountlits;\n          }\n\n        /* If the maximum is also zero, we just omit the group from the output\n        altogether. */\n\n        if (repeat_max == 0)\n          {\n          code = previous;\n          goto END_REPEAT;\n          }\n\n        /* If the maximum is 1 or unlimited, we just have to stick in the\n        BRAZERO and do no more at this point. */\n\n        if (repeat_max <= 1)\n          {\n          memmove(previous+1, previous, len);\n          code++;\n          *previous++ = OP_BRAZERO + repeat_type;\n          }\n\n        /* If the maximum is greater than 1 and limited, we have to replicate\n        in a nested fashion, sticking OP_BRAZERO before each set of brackets.\n        The first one has to be handled carefully because it's the original\n        copy, which has to be moved up. The remainder can be handled by code\n        that is common with the non-zero minimum case below. We just have to\n        adjust the value or repeat_max, since one less copy is required. */\n\n        else\n          {\n          int offset;\n          memmove(previous+4, previous, len);\n          code += 4;\n          *previous++ = OP_BRAZERO + repeat_type;\n          *previous++ = OP_BRA;\n\n          /* We chain together the bracket offset fields that have to be\n          filled in later when the ends of the brackets are reached. */\n\n          offset = (bralink == NULL)? 0 : previous - bralink;\n          bralink = previous;\n          *previous++ = offset >> 8;\n          *previous++ = offset & 255;\n          }\n\n        repeat_max--;\n        }\n\n      /* If the minimum is greater than zero, replicate the group as many\n      times as necessary, and adjust the maximum to the number of subsequent\n      copies that we need. */\n\n      else\n        {\n        for (i = 1; i < repeat_min; i++)\n          {\n          memcpy(code, previous, len);\n          code += len;\n          }\n        if (repeat_max > 0) repeat_max -= repeat_min;\n        }\n\n      /* This code is common to both the zero and non-zero minimum cases. If\n      the maximum is limited, it replicates the group in a nested fashion,\n      remembering the bracket starts on a stack. In the case of a zero minimum,\n      the first one was set up above. In all cases the repeat_max now specifies\n      the number of additional copies needed. */\n\n      if (repeat_max >= 0)\n        {\n        for (i = repeat_max - 1; i >= 0; i--)\n          {\n          *code++ = OP_BRAZERO + repeat_type;\n\n          /* All but the final copy start a new nesting, maintaining the\n          chain of brackets outstanding. */\n\n          if (i != 0)\n            {\n            int offset;\n            *code++ = OP_BRA;\n            offset = (bralink == NULL)? 0 : code - bralink;\n            bralink = code;\n            *code++ = offset >> 8;\n            *code++ = offset & 255;\n            }\n\n          memcpy(code, previous, len);\n          code += len;\n          }\n\n        /* Now chain through the pending brackets, and fill in their length\n        fields (which are holding the chain links pro tem). */\n\n        while (bralink != NULL)\n          {\n          int oldlinkoffset;\n          int offset = code - bralink + 1;\n          uschar *bra = code - offset;\n          oldlinkoffset = (bra[1] << 8) + bra[2];\n          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;\n          *code++ = OP_KET;\n          *code++ = bra[1] = offset >> 8;\n          *code++ = bra[2] = (offset & 255);\n          }\n        }\n\n      /* If the maximum is unlimited, set a repeater in the final copy. We\n      can't just offset backwards from the current code point, because we\n      don't know if there's been an options resetting after the ket. The\n      correct offset was computed above. */\n\n      else code[-ketoffset] = OP_KETRMAX + repeat_type;\n      }\n\n    /* Else there's some kind of shambles */\n\n    else\n      {\n      *errorptr = ERR11;\n      goto FAILED;\n      }\n\n    /* In all case we no longer have a previous item. */\n\n    END_REPEAT:\n    previous = NULL;\n    break;\n\n\n    /* Start of nested bracket sub-expression, or comment or lookahead or\n    lookbehind or option setting or condition. First deal with special things\n    that can come after a bracket; all are introduced by ?, and the appearance\n    of any of them means that this is not a referencing group. They were\n    checked for validity in the first pass over the string, so we don't have to\n    check for syntax errors here.  */\n\n    case '(':\n    newoptions = options;\n    condref = -1;\n\n    if (*(++ptr) == '?')\n      {\n      int set, unset;\n      int *optset;\n\n      switch (*(++ptr))\n        {\n        case '#':                 /* Comment; skip to ket */\n        ptr++;\n        while (*ptr != ')') ptr++;\n        continue;\n\n        case ':':                 /* Non-extracting bracket */\n        bravalue = OP_BRA;\n        ptr++;\n        break;\n\n        case '(':\n        bravalue = OP_COND;       /* Conditional group */\n        if ((cd->ctypes[*(++ptr)] & ctype_digit) != 0)\n          {\n          condref = *ptr - '0';\n          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';\n          if (condref == 0)\n            {\n            *errorptr = ERR35;\n            goto FAILED;\n            }\n          ptr++;\n          }\n        else ptr--;\n        break;\n\n        case '=':                 /* Positive lookahead */\n        bravalue = OP_ASSERT;\n        ptr++;\n        break;\n\n        case '!':                 /* Negative lookahead */\n        bravalue = OP_ASSERT_NOT;\n        ptr++;\n        break;\n\n        case '<':                 /* Lookbehinds */\n        switch (*(++ptr))\n          {\n          case '=':               /* Positive lookbehind */\n          bravalue = OP_ASSERTBACK;\n          ptr++;\n          break;\n\n          case '!':               /* Negative lookbehind */\n          bravalue = OP_ASSERTBACK_NOT;\n          ptr++;\n          break;\n\n          default:                /* Syntax error */\n          *errorptr = ERR24;\n          goto FAILED;\n          }\n        break;\n\n        case '>':                 /* One-time brackets */\n        bravalue = OP_ONCE;\n        ptr++;\n        break;\n\n        case 'R':                 /* Pattern recursion */\n        *code++ = OP_RECURSE;\n        ptr++;\n        continue;\n\n        default:                  /* Option setting */\n        set = unset = 0;\n        optset = &set;\n\n        while (*ptr != ')' && *ptr != ':')\n          {\n          switch (*ptr++)\n            {\n            case '-': optset = &unset; break;\n\n            case 'i': *optset |= PCRE_CASELESS; break;\n            case 'm': *optset |= PCRE_MULTILINE; break;\n            case 's': *optset |= PCRE_DOTALL; break;\n            case 'x': *optset |= PCRE_EXTENDED; break;\n            case 'U': *optset |= PCRE_UNGREEDY; break;\n            case 'X': *optset |= PCRE_EXTRA; break;\n\n            default:\n            *errorptr = ERR12;\n            goto FAILED;\n            }\n          }\n\n        /* Set up the changed option bits, but don't change anything yet. */\n\n        newoptions = (options | set) & (~unset);\n\n        /* If the options ended with ')' this is not the start of a nested\n        group with option changes, so the options change at this level. At top\n        level there is nothing else to be done (the options will in fact have\n        been set from the start of compiling as a result of the first pass) but\n        at an inner level we must compile code to change the ims options if\n        necessary, and pass the new setting back so that it can be put at the\n        start of any following branches, and when this group ends, a resetting\n        item can be compiled. */\n\n        if (*ptr == ')')\n          {\n          if ((options & PCRE_INGROUP) != 0 &&\n              (options & PCRE_IMS) != (newoptions & PCRE_IMS))\n            {\n            *code++ = OP_OPT;\n            *code++ = *optchanged = newoptions & PCRE_IMS;\n            }\n          options = newoptions;  /* Change options at this level */\n          previous = NULL;       /* This item can't be repeated */\n          continue;              /* It is complete */\n          }\n\n        /* If the options ended with ':' we are heading into a nested group\n        with possible change of options. Such groups are non-capturing and are\n        not assertions of any kind. All we need to do is skip over the ':';\n        the newoptions value is handled below. */\n\n        bravalue = OP_BRA;\n        ptr++;\n        }\n      }\n\n    /* Else we have a referencing group; adjust the opcode. */\n\n    else\n      {\n      if (++(*brackets) > EXTRACT_MAX)\n        {\n        *errorptr = ERR13;\n        goto FAILED;\n        }\n      bravalue = OP_BRA + *brackets;\n      }\n\n    /* Process nested bracketed re. Assertions may not be repeated, but other\n    kinds can be. We copy code into a non-register variable in order to be able\n    to pass its address because some compilers complain otherwise. Pass in a\n    new setting for the ims options if they have changed. */\n\n    previous = (bravalue >= OP_ONCE)? code : NULL;\n    *code = bravalue;\n    tempcode = code;\n\n    if (!compile_regex(\n         options | PCRE_INGROUP,       /* Set for all nested groups */\n         ((options & PCRE_IMS) != (newoptions & PCRE_IMS))?\n           newoptions & PCRE_IMS : -1, /* Pass ims options if changed */\n         brackets,                     /* Bracket level */\n         &tempcode,                    /* Where to put code (updated) */\n         &ptr,                         /* Input pointer (updated) */\n         errorptr,                     /* Where to put an error message */\n         (bravalue == OP_ASSERTBACK ||\n          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */\n         condref,                      /* Condition reference number */\n         &subreqchar,                  /* For possible last char */\n         &subcountlits,                /* For literal count */\n         cd))                          /* Tables block */\n      goto FAILED;\n\n    /* At the end of compiling, code is still pointing to the start of the\n    group, while tempcode has been updated to point past the end of the group\n    and any option resetting that may follow it. The pattern pointer (ptr)\n    is on the bracket. */\n\n    /* If this is a conditional bracket, check that there are no more than\n    two branches in the group. */\n\n    if (bravalue == OP_COND)\n      {\n      uschar *tc = code;\n      condcount = 0;\n\n      do {\n         condcount++;\n         tc += (tc[1] << 8) | tc[2];\n         }\n      while (*tc != OP_KET);\n\n      if (condcount > 2)\n        {\n        *errorptr = ERR27;\n        goto FAILED;\n        }\n      }\n\n    /* Handle updating of the required character. If the subpattern didn't\n    set one, leave it as it was. Otherwise, update it for normal brackets of\n    all kinds, forward assertions, and conditions with two branches. Don't\n    update the literal count for forward assertions, however. If the bracket\n    is followed by a quantifier with zero repeat, we have to back off. Hence\n    the definition of prevreqchar and subcountlits outside the main loop so\n    that they can be accessed for the back off. */\n\n    if (subreqchar > 0 &&\n         (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_ASSERT ||\n         (bravalue == OP_COND && condcount == 2)))\n      {\n      prevreqchar = *reqchar;\n      *reqchar = subreqchar;\n      if (bravalue != OP_ASSERT) *countlits += subcountlits;\n      }\n\n    /* Now update the main code pointer to the end of the group. */\n\n    code = tempcode;\n\n    /* Error if hit end of pattern */\n\n    if (*ptr != ')')\n      {\n      *errorptr = ERR14;\n      goto FAILED;\n      }\n    break;\n\n    /* Check \\ for being a real metacharacter; if not, fall through and handle\n    it as a data character at the start of a string. Escape items are checked\n    for validity in the pre-compiling pass. */\n\n    case '\\\\':\n    tempptr = ptr;\n    c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);\n\n    /* Handle metacharacters introduced by \\. For ones like \\d, the ESC_ values\n    are arranged to be the negation of the corresponding OP_values. For the\n    back references, the values are ESC_REF plus the reference number. Only\n    back references and those types that consume a character may be repeated.\n    We can test for values between ESC_b and ESC_Z for the latter; this may\n    have to change if any new ones are ever created. */\n\n    if (c < 0)\n      {\n      if (-c >= ESC_REF)\n        {\n        previous = code;\n        *code++ = OP_REF;\n        *code++ = -c - ESC_REF;\n        }\n      else\n        {\n        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;\n        *code++ = -c;\n        }\n      continue;\n      }\n\n    /* Data character: reset and fall through */\n\n    ptr = tempptr;\n    c = '\\\\';\n\n    /* Handle a run of data characters until a metacharacter is encountered.\n    The first character is guaranteed not to be whitespace or # when the\n    extended flag is set. */\n\n    NORMAL_CHAR:\n    default:\n    previous = code;\n    *code = OP_CHARS;\n    code += 2;\n    length = 0;\n\n    do\n      {\n      if ((options & PCRE_EXTENDED) != 0)\n        {\n        if ((cd->ctypes[c] & ctype_space) != 0) continue;\n        if (c == '#')\n          {\n          /* The space before the ; is to avoid a warning on a silly compiler\n          on the Macintosh. */\n          while ((c = *(++ptr)) != 0 && c != '\\n') ;\n          if (c == 0) break;\n          continue;\n          }\n        }\n\n      /* Backslash may introduce a data char or a metacharacter. Escaped items\n      are checked for validity in the pre-compiling pass. Stop the string\n      before a metaitem. */\n\n      if (c == '\\\\')\n        {\n        tempptr = ptr;\n        c = check_escape(&ptr, errorptr, *brackets, options, FALSE, cd);\n        if (c < 0) { ptr = tempptr; break; }\n\n        /* If a character is > 127 in UTF-8 mode, we have to turn it into\n        two or more characters in the UTF-8 encoding. */\n\n#ifdef SUPPORT_UTF8\n        if (c > 127 && (options & PCRE_UTF8) != 0)\n          {\n          uschar buffer[8];\n          int len = ord2utf8(c, buffer);\n          for (c = 0; c < len; c++) *code++ = buffer[c];\n          length += len;\n          continue;\n          }\n#endif\n        }\n\n      /* Ordinary character or single-char escape */\n\n      *code++ = c;\n      length++;\n      }\n\n    /* This \"while\" is the end of the \"do\" above. */\n\n    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);\n\n    /* Update the last character and the count of literals */\n\n    prevreqchar = (length > 1)? code[-2] : *reqchar;\n    *reqchar = code[-1];\n    *countlits += length;\n\n    /* Compute the length and set it in the data vector, and advance to\n    the next state. */\n\n    previous[1] = length;\n    if (length < MAXLIT) ptr--;\n    break;\n    }\n  }                   /* end of big loop */\n\n/* Control never reaches here by falling through, only by a goto for all the\nerror states. Pass back the position in the pattern so that it can be displayed\nto the user for diagnosing the error. */\n\nFAILED:\n*ptrptr = ptr;\nreturn FALSE;\n}\n\n\n\n\n/*************************************************\n*     Compile sequence of alternatives           *\n*************************************************/\n\n/* On entry, ptr is pointing past the bracket character, but on return\nit points to the closing bracket, or vertical bar, or end of string.\nThe code variable is pointing at the byte into which the BRA operator has been\nstored. If the ims options are changed at the start (for a (?ims: group) or\nduring any branch, we need to insert an OP_OPT item at the start of every\nfollowing branch to ensure they get set correctly at run time, and also pass\nthe new options into every subsequent branch compile.\n\nArgument:\n  options     the option bits\n  optchanged  new ims options to set as if (?ims) were at the start, or -1\n               for no change\n  brackets    -> int containing the number of extracting brackets used\n  codeptr     -> the address of the current code pointer\n  ptrptr      -> the address of the current pattern pointer\n  errorptr    -> pointer to error message\n  lookbehind  TRUE if this is a lookbehind assertion\n  condref     >= 0 for OPT_CREF setting at start of conditional group\n  reqchar     -> place to put the last required character, or a negative number\n  countlits   -> place to put the shortest literal count of any branch\n  cd          points to the data block with tables pointers\n\nReturns:      TRUE on success\n*/\n\nstatic BOOL\ncompile_regex(int options, int optchanged, int *brackets, uschar **codeptr,\n  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int condref,\n  int *reqchar, int *countlits, compile_data *cd)\n{\nconst uschar *ptr = *ptrptr;\nuschar *code = *codeptr;\nuschar *last_branch = code;\nuschar *start_bracket = code;\nuschar *reverse_count = NULL;\nint oldoptions = options & PCRE_IMS;\nint branchreqchar, branchcountlits;\n\n*reqchar = -1;\n*countlits = INT_MAX;\ncode += 3;\n\n/* At the start of a reference-based conditional group, insert the reference\nnumber as an OP_CREF item. */\n\nif (condref >= 0)\n  {\n  *code++ = OP_CREF;\n  *code++ = condref;\n  }\n\n/* Loop for each alternative branch */\n\nfor (;;)\n  {\n  int length;\n\n  /* Handle change of options */\n\n  if (optchanged >= 0)\n    {\n    *code++ = OP_OPT;\n    *code++ = optchanged;\n    options = (options & ~PCRE_IMS) | optchanged;\n    }\n\n  /* Set up dummy OP_REVERSE if lookbehind assertion */\n\n  if (lookbehind)\n    {\n    *code++ = OP_REVERSE;\n    reverse_count = code;\n    *code++ = 0;\n    *code++ = 0;\n    }\n\n  /* Now compile the branch */\n\n  if (!compile_branch(options, brackets, &code, &ptr, errorptr, &optchanged,\n      &branchreqchar, &branchcountlits, cd))\n    {\n    *ptrptr = ptr;\n    return FALSE;\n    }\n\n  /* Fill in the length of the last branch */\n\n  length = code - last_branch;\n  last_branch[1] = length >> 8;\n  last_branch[2] = length & 255;\n\n  /* Save the last required character if all branches have the same; a current\n  value of -1 means unset, while -2 means \"previous branch had no last required\n  char\".  */\n\n  if (*reqchar != -2)\n    {\n    if (branchreqchar >= 0)\n      {\n      if (*reqchar == -1) *reqchar = branchreqchar;\n      else if (*reqchar != branchreqchar) *reqchar = -2;\n      }\n    else *reqchar = -2;\n    }\n\n  /* Keep the shortest literal count */\n\n  if (branchcountlits < *countlits) *countlits = branchcountlits;\n  DPRINTF((\"literal count = %d min=%d\\n\", branchcountlits, *countlits));\n\n  /* If lookbehind, check that this branch matches a fixed-length string,\n  and put the length into the OP_REVERSE item. Temporarily mark the end of\n  the branch with OP_END. */\n\n  if (lookbehind)\n    {\n    *code = OP_END;\n    length = find_fixedlength(last_branch, options);\n    DPRINTF((\"fixed length = %d\\n\", length));\n    if (length < 0)\n      {\n      *errorptr = ERR25;\n      *ptrptr = ptr;\n      return FALSE;\n      }\n    reverse_count[0] = (length >> 8);\n    reverse_count[1] = length & 255;\n    }\n\n  /* Reached end of expression, either ')' or end of pattern. Insert a\n  terminating ket and the length of the whole bracketed item, and return,\n  leaving the pointer at the terminating char. If any of the ims options\n  were changed inside the group, compile a resetting op-code following. */\n\n  if (*ptr != '|')\n    {\n    length = code - start_bracket;\n    *code++ = OP_KET;\n    *code++ = length >> 8;\n    *code++ = length & 255;\n    if (optchanged >= 0)\n      {\n      *code++ = OP_OPT;\n      *code++ = oldoptions;\n      }\n    *codeptr = code;\n    *ptrptr = ptr;\n    return TRUE;\n    }\n\n  /* Another branch follows; insert an \"or\" node and advance the pointer. */\n\n  *code = OP_ALT;\n  last_branch = code;\n  code += 3;\n  ptr++;\n  }\n/* Control never reaches here */\n}\n\n\n\n\n/*************************************************\n*      Find first significant op code            *\n*************************************************/\n\n/* This is called by several functions that scan a compiled expression looking\nfor a fixed first character, or an anchoring op code etc. It skips over things\nthat do not influence this. For one application, a change of caseless option is\nimportant.\n\nArguments:\n  code       pointer to the start of the group\n  options    pointer to external options\n  optbit     the option bit whose changing is significant, or\n             zero if none are\n  optstop    TRUE to return on option change, otherwise change the options\n               value and continue\n\nReturns:     pointer to the first significant opcode\n*/\n\nstatic const uschar*\nfirst_significant_code(const uschar *code, int *options, int optbit,\n  BOOL optstop)\n{\nfor (;;)\n  {\n  switch ((int)*code)\n    {\n    case OP_OPT:\n    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))\n      {\n      if (optstop) return code;\n      *options = (int)code[1];\n      }\n    code += 2;\n    break;\n\n    case OP_CREF:\n    code += 2;\n    break;\n\n    case OP_WORD_BOUNDARY:\n    case OP_NOT_WORD_BOUNDARY:\n    code++;\n    break;\n\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    do code += (code[1] << 8) + code[2]; while (*code == OP_ALT);\n    code += 3;\n    break;\n\n    default:\n    return code;\n    }\n  }\n/* Control never reaches here */\n}\n\n\n\n\n/*************************************************\n*          Check for anchored expression         *\n*************************************************/\n\n/* Try to find out if this is an anchored regular expression. Consider each\nalternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket\nall of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then\nit's anchored. However, if this is a multiline pattern, then only OP_SOD\ncounts, since OP_CIRC can match in the middle.\n\nA branch is also implicitly anchored if it starts with .* and DOTALL is set,\nbecause that will try the rest of the pattern at all possible matching points,\nso there is no point trying them again.\n\nArguments:\n  code       points to start of expression (the bracket)\n  options    points to the options setting\n\nReturns:     TRUE or FALSE\n*/\n\nstatic BOOL\nis_anchored(register const uschar *code, int *options)\n{\ndo {\n   const uschar *scode = first_significant_code(code + 3, options,\n     PCRE_MULTILINE, FALSE);\n   register int op = *scode;\n   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)\n     { if (!is_anchored(scode, options)) return FALSE; }\n   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&\n            (*options & PCRE_DOTALL) != 0)\n     { if (scode[1] != OP_ANY) return FALSE; }\n   else if (op != OP_SOD &&\n           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))\n     return FALSE;\n   code += (code[1] << 8) + code[2];\n   }\nwhile (*code == OP_ALT);\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*         Check for starting with ^ or .*        *\n*************************************************/\n\n/* This is called to find out if every branch starts with ^ or .* so that\n\"first char\" processing can be done to speed things up in multiline\nmatching and for non-DOTALL patterns that start with .* (which must start at\nthe beginning or after \\n).\n\nArgument:  points to start of expression (the bracket)\nReturns:   TRUE or FALSE\n*/\n\nstatic BOOL\nis_startline(const uschar *code)\n{\ndo {\n   const uschar *scode = first_significant_code(code + 3, NULL, 0, FALSE);\n   register int op = *scode;\n   if (op >= OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)\n     { if (!is_startline(scode)) return FALSE; }\n   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)\n     { if (scode[1] != OP_ANY) return FALSE; }\n   else if (op != OP_CIRC) return FALSE;\n   code += (code[1] << 8) + code[2];\n   }\nwhile (*code == OP_ALT);\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*          Check for fixed first char            *\n*************************************************/\n\n/* Try to find out if there is a fixed first character. This is called for\nunanchored expressions, as it speeds up their processing quite considerably.\nConsider each alternative branch. If they all start with the same char, or with\na bracket all of whose alternatives start with the same char (recurse ad lib),\nthen we return that char, otherwise -1.\n\nArguments:\n  code       points to start of expression (the bracket)\n  options    pointer to the options (used to check casing changes)\n\nReturns:     -1 or the fixed first char\n*/\n\nstatic int\nfind_firstchar(const uschar *code, int *options)\n{\nregister int c = -1;\ndo {\n   int d;\n   const uschar *scode = first_significant_code(code + 3, options,\n     PCRE_CASELESS, TRUE);\n   register int op = *scode;\n\n   if (op >= OP_BRA) op = OP_BRA;\n\n   switch(op)\n     {\n     default:\n     return -1;\n\n     case OP_BRA:\n     case OP_ASSERT:\n     case OP_ONCE:\n     case OP_COND:\n     if ((d = find_firstchar(scode, options)) < 0) return -1;\n     if (c < 0) c = d; else if (c != d) return -1;\n     break;\n\n     case OP_EXACT:       /* Fall through */\n     scode++;\n\n     case OP_CHARS:       /* Fall through */\n     scode++;\n\n     case OP_PLUS:\n     case OP_MINPLUS:\n     if (c < 0) c = scode[1]; else if (c != scode[1]) return -1;\n     break;\n     }\n\n   code += (code[1] << 8) + code[2];\n   }\nwhile (*code == OP_ALT);\nreturn c;\n}\n\n\n\n\n\n/*************************************************\n*        Compile a Regular Expression            *\n*************************************************/\n\n/* This function takes a string and returns a pointer to a block of store\nholding a compiled version of the expression.\n\nArguments:\n  pattern      the regular expression\n  options      various option bits\n  errorptr     pointer to pointer to error text\n  erroroffset  ptr offset in pattern where error was detected\n  tables       pointer to character tables or NULL\n\nReturns:       pointer to compiled data block, or NULL on error,\n               with errorptr and erroroffset set\n*/\n\npcre *\npcre_compile(const char *pattern, int options, const char **errorptr,\n  int *erroroffset, const unsigned char *tables)\n{\nreal_pcre *re;\nint length = 3;      /* For initial BRA plus length */\nint runlength;\nint c, reqchar, countlits;\nint bracount = 0;\nint top_backref = 0;\nint branch_extra = 0;\nint branch_newextra;\nunsigned int brastackptr = 0;\nsize_t size;\nuschar *code;\nconst uschar *ptr;\ncompile_data compile_block;\nint brastack[BRASTACK_SIZE];\nuschar bralenstack[BRASTACK_SIZE];\nconst size_t pattern_length = strlen(pattern);\n\n#ifdef DEBUG_PCRE\nuschar *code_base, *code_end;\n#endif\n\n/* Can't support UTF8 unless PCRE has been compiled to include the code. */\n\n#ifndef SUPPORT_UTF8\nif ((options & PCRE_UTF8) != 0)\n  {\n  *errorptr = ERR32;\n  return NULL;\n  }\n#endif\n\n/* We can't pass back an error message if errorptr is NULL; I guess the best we\ncan do is just return NULL. */\n\nif (errorptr == NULL) return NULL;\n*errorptr = NULL;\n\n/* However, we can give a message for this error */\n\nif (erroroffset == NULL)\n  {\n  *errorptr = ERR16;\n  return NULL;\n  }\n*erroroffset = 0;\n\nif ((options & ~PUBLIC_OPTIONS) != 0)\n  {\n  *errorptr = ERR17;\n  return NULL;\n  }\n\n/* Set up pointers to the individual character tables */\n\nif (tables == NULL) tables = pcre_default_tables;\ncompile_block.lcc = tables + lcc_offset;\ncompile_block.fcc = tables + fcc_offset;\ncompile_block.cbits = tables + cbits_offset;\ncompile_block.ctypes = tables + ctypes_offset;\n\n/* Reflect pattern for debugging output */\n\nDPRINTF((\"------------------------------------------------------------------\\n\"));\nDPRINTF((\"%s\\n\", pattern));\n\n/* The first thing to do is to make a pass over the pattern to compute the\namount of store required to hold the compiled code. This does not have to be\nperfect as long as errors are overestimates. At the same time we can detect any\ninternal flag settings. Make an attempt to correct for any counted white space\nif an \"extended\" flag setting appears late in the pattern. We can't be so\nclever for #-comments. */\n\nptr = (const uschar *)(pattern - 1);\nwhile ((c = *(++ptr)) != 0)\n  {\n  int min, max;\n  int class_charcount;\n\n  if ((options & PCRE_EXTENDED) != 0)\n    {\n    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;\n    if (c == '#')\n      {\n      /* The space before the ; is to avoid a warning on a silly compiler\n      on the Macintosh. */\n      while ((c = *(++ptr)) != 0 && c != '\\n') ;\n      continue;\n      }\n    }\n\n  switch(c)\n    {\n    /* A backslashed item may be an escaped \"normal\" character or a\n    character type. For a \"normal\" character, put the pointers and\n    character back so that tests for whitespace etc. in the input\n    are done correctly. */\n\n    case '\\\\':\n      {\n      const uschar *save_ptr = ptr;\n      c = check_escape(&ptr, errorptr, bracount, options, FALSE, &compile_block);\n      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n      if (c >= 0)\n        {\n        ptr = save_ptr;\n        c = '\\\\';\n        goto NORMAL_CHAR;\n        }\n      }\n    length++;\n\n    /* A back reference needs an additional char, plus either one or 5\n    bytes for a repeat. We also need to keep the value of the highest\n    back reference. */\n\n    if (c <= -ESC_REF)\n      {\n      int refnum = -c - ESC_REF;\n      if (refnum > top_backref) top_backref = refnum;\n      length++;   /* For single back reference */\n      if (ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))\n        {\n        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);\n        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n        if ((min == 0 && (max == 1 || max == -1)) ||\n          (min == 1 && max == -1))\n            length++;\n        else length += 5;\n        if (ptr[1] == '?') ptr++;\n        }\n      }\n    continue;\n\n    case '^':\n    case '.':\n    case '$':\n    case '*':     /* These repeats won't be after brackets; */\n    case '+':     /* those are handled separately */\n    case '?':\n    length++;\n    continue;\n\n    /* This covers the cases of repeats after a single char, metachar, class,\n    or back reference. */\n\n    case '{':\n    if (!is_counted_repeat(ptr+1, &compile_block)) goto NORMAL_CHAR;\n    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr, &compile_block);\n    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n    if ((min == 0 && (max == 1 || max == -1)) ||\n      (min == 1 && max == -1))\n        length++;\n    else\n      {\n      length--;   /* Uncount the original char or metachar */\n      if (min == 1) length++; else if (min > 0) length += 4;\n      if (max > 0) length += 4; else length += 2;\n      }\n    if (ptr[1] == '?') ptr++;\n    continue;\n\n    /* An alternation contains an offset to the next branch or ket. If any ims\n    options changed in the previous branch(es), and/or if we are in a\n    lookbehind assertion, extra space will be needed at the start of the\n    branch. This is handled by branch_extra. */\n\n    case '|':\n    length += 3 + branch_extra;\n    continue;\n\n    /* A character class uses 33 characters. Don't worry about character types\n    that aren't allowed in classes - they'll get picked up during the compile.\n    A character class that contains only one character uses 2 or 3 bytes,\n    depending on whether it is negated or not. Notice this where we can. */\n\n    case '[':\n    class_charcount = 0;\n    if (*(++ptr) == '^') ptr++;\n    do\n      {\n      if (*ptr == '\\\\')\n        {\n        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE,\n          &compile_block);\n        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n        if (-ch == ESC_b) class_charcount++; else class_charcount = 10;\n        }\n      else class_charcount++;\n      ptr++;\n      }\n    while (*ptr != 0 && *ptr != ']');\n\n    /* Repeats for negated single chars are handled by the general code */\n\n    if (class_charcount == 1) length += 3; else\n      {\n      length += 33;\n\n      /* A repeat needs either 1 or 5 bytes. */\n\n      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2, &compile_block))\n        {\n        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr, &compile_block);\n        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n        if ((min == 0 && (max == 1 || max == -1)) ||\n          (min == 1 && max == -1))\n            length++;\n        else length += 5;\n        if (ptr[1] == '?') ptr++;\n        }\n      }\n    continue;\n\n    /* Brackets may be genuine groups or special things */\n\n    case '(':\n    branch_newextra = 0;\n\n    /* Handle special forms of bracket, which all start (? */\n\n    if (ptr[1] == '?')\n      {\n      int set, unset;\n      int *optset;\n\n      switch (c = ptr[2])\n        {\n        /* Skip over comments entirely */\n        case '#':\n        ptr += 3;\n        while (*ptr != 0 && *ptr != ')') ptr++;\n        if (*ptr == 0)\n          {\n          *errorptr = ERR18;\n          goto PCRE_ERROR_RETURN;\n          }\n        continue;\n\n        /* Non-referencing groups and lookaheads just move the pointer on, and\n        then behave like a non-special bracket, except that they don't increment\n        the count of extracting brackets. Ditto for the \"once only\" bracket,\n        which is in Perl from version 5.005. */\n\n        case ':':\n        case '=':\n        case '!':\n        case '>':\n        ptr += 2;\n        break;\n\n        /* A recursive call to the regex is an extension, to provide the\n        facility which can be obtained by $(?p{perl-code}) in Perl 5.6. */\n\n        case 'R':\n        if (ptr[3] != ')')\n          {\n          *errorptr = ERR29;\n          goto PCRE_ERROR_RETURN;\n          }\n        ptr += 3;\n        length += 1;\n        break;\n\n        /* Lookbehinds are in Perl from version 5.005 */\n\n        case '<':\n        if (ptr[3] == '=' || ptr[3] == '!')\n          {\n          ptr += 3;\n          branch_newextra = 3;\n          length += 3;         /* For the first branch */\n          break;\n          }\n        *errorptr = ERR24;\n        goto PCRE_ERROR_RETURN;\n\n        /* Conditionals are in Perl from version 5.005. The bracket must either\n        be followed by a number (for bracket reference) or by an assertion\n        group. */\n\n        case '(':\n        if ((compile_block.ctypes[ptr[3]] & ctype_digit) != 0)\n          {\n          ptr += 4;\n          length += 2;\n          while ((compile_block.ctypes[*ptr] & ctype_digit) != 0) ptr++;\n          if (*ptr != ')')\n            {\n            *errorptr = ERR26;\n            goto PCRE_ERROR_RETURN;\n            }\n          }\n        else   /* An assertion must follow */\n          {\n          ptr++;   /* Can treat like ':' as far as spacing is concerned */\n          if (ptr[2] != '?' ||\n             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )\n            {\n            ptr += 2;    /* To get right offset in message */\n            *errorptr = ERR28;\n            goto PCRE_ERROR_RETURN;\n            }\n          }\n        break;\n\n        /* Else loop checking valid options until ) is met. Anything else is an\n        error. If we are without any brackets, i.e. at top level, the settings\n        act as if specified in the options, so massage the options immediately.\n        This is for backward compatibility with Perl 5.004. */\n\n        default:\n        set = unset = 0;\n        optset = &set;\n        ptr += 2;\n\n        for (;; ptr++)\n          {\n          c = *ptr;\n          switch (c)\n            {\n            case 'i':\n            *optset |= PCRE_CASELESS;\n            continue;\n\n            case 'm':\n            *optset |= PCRE_MULTILINE;\n            continue;\n\n            case 's':\n            *optset |= PCRE_DOTALL;\n            continue;\n\n            case 'x':\n            *optset |= PCRE_EXTENDED;\n            continue;\n\n            case 'X':\n            *optset |= PCRE_EXTRA;\n            continue;\n\n            case 'U':\n            *optset |= PCRE_UNGREEDY;\n            continue;\n\n            case '-':\n            optset = &unset;\n            continue;\n\n            /* A termination by ')' indicates an options-setting-only item;\n            this is global at top level; otherwise nothing is done here and\n            it is handled during the compiling process on a per-bracket-group\n            basis. */\n\n            case ')':\n            if (brastackptr == 0)\n              {\n              options = (options | set) & (~unset);\n              set = unset = 0;     /* To save length */\n              }\n            /* Fall through */\n\n            /* A termination by ':' indicates the start of a nested group with\n            the given options set. This is again handled at compile time, but\n            we must allow for compiled space if any of the ims options are\n            set. We also have to allow for resetting space at the end of\n            the group, which is why 4 is added to the length and not just 2.\n            If there are several changes of options within the same group, this\n            will lead to an over-estimate on the length, but this shouldn't\n            matter very much. We also have to allow for resetting options at\n            the start of any alternations, which we do by setting\n            branch_newextra to 2. Finally, we record whether the case-dependent\n            flag ever changes within the regex. This is used by the \"required\n            character\" code. */\n\n            case ':':\n            if (((set|unset) & PCRE_IMS) != 0)\n              {\n              length += 4;\n              branch_newextra = 2;\n              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;\n              }\n            goto END_OPTIONS;\n\n            /* Unrecognized option character */\n\n            default:\n            *errorptr = ERR12;\n            goto PCRE_ERROR_RETURN;\n            }\n          }\n\n        /* If we hit a closing bracket, that's it - this is a freestanding\n        option-setting. We need to ensure that branch_extra is updated if\n        necessary. The only values branch_newextra can have here are 0 or 2.\n        If the value is 2, then branch_extra must either be 2 or 5, depending\n        on whether this is a lookbehind group or not. */\n\n        END_OPTIONS:\n        if (c == ')')\n          {\n          if (branch_newextra == 2 && (branch_extra == 0 || branch_extra == 3))\n            branch_extra += branch_newextra;\n          continue;\n          }\n\n        /* If options were terminated by ':' control comes here. Fall through\n        to handle the group below. */\n        }\n      }\n\n    /* Extracting brackets must be counted so we can process escapes in a\n    Perlish way. */\n\n    else bracount++;\n\n    /* Non-special forms of bracket. Save length for computing whole length\n    at end if there's a repeat that requires duplication of the group. Also\n    save the current value of branch_extra, and start the new group with\n    the new value. If non-zero, this will either be 2 for a (?imsx: group, or 3\n    for a lookbehind assertion. */\n\n    if (brastackptr >= sizeof(brastack)/sizeof(int))\n      {\n      *errorptr = ERR19;\n      goto PCRE_ERROR_RETURN;\n      }\n\n    bralenstack[brastackptr] = branch_extra;\n    branch_extra = branch_newextra;\n\n    brastack[brastackptr++] = length;\n    length += 3;\n    continue;\n\n    /* Handle ket. Look for subsequent max/min; for certain sets of values we\n    have to replicate this bracket up to that many times. If brastackptr is\n    0 this is an unmatched bracket which will generate an error, but take care\n    not to try to access brastack[-1] when computing the length and restoring\n    the branch_extra value. */\n\n    case ')':\n    length += 3;\n      {\n      int minval = 1;\n      int maxval = 1;\n      int duplength;\n\n      if (brastackptr > 0)\n        {\n        duplength = length - brastack[--brastackptr];\n        branch_extra = bralenstack[brastackptr];\n        }\n      else duplength = 0;\n\n      /* Leave ptr at the final char; for read_repeat_counts this happens\n      automatically; for the others we need an increment. */\n\n      if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2, &compile_block))\n        {\n        ptr = read_repeat_counts(ptr+2, &minval, &maxval, errorptr,\n          &compile_block);\n        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n        }\n      else if (c == '*') { minval = 0; maxval = -1; ptr++; }\n      else if (c == '+') { maxval = -1; ptr++; }\n      else if (c == '?') { minval = 0; ptr++; }\n\n      /* If the minimum is zero, we have to allow for an OP_BRAZERO before the\n      group, and if the maximum is greater than zero, we have to replicate\n      maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting\n      bracket set - hence the 7. */\n\n      if (minval == 0)\n        {\n        length++;\n        if (maxval > 0) length += (maxval - 1) * (duplength + 7);\n        }\n\n      /* When the minimum is greater than zero, 1 we have to replicate up to\n      minval-1 times, with no additions required in the copies. Then, if\n      there is a limited maximum we have to replicate up to maxval-1 times\n      allowing for a BRAZERO item before each optional copy and nesting\n      brackets for all but one of the optional copies. */\n\n      else\n        {\n        length += (minval - 1) * duplength;\n        if (maxval > minval)   /* Need this test as maxval=-1 means no limit */\n          length += (maxval - minval) * (duplength + 7) - 6;\n        }\n      }\n    continue;\n\n    /* Non-special character. For a run of such characters the length required\n    is the number of characters + 2, except that the maximum run length is 255.\n    We won't get a skipped space or a non-data escape or the start of a #\n    comment as the first character, so the length can't be zero. */\n\n    NORMAL_CHAR:\n    default:\n    length += 2;\n    runlength = 0;\n    do\n      {\n      if ((options & PCRE_EXTENDED) != 0)\n        {\n        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;\n        if (c == '#')\n          {\n          /* The space before the ; is to avoid a warning on a silly compiler\n          on the Macintosh. */\n          while ((c = *(++ptr)) != 0 && c != '\\n') ;\n          continue;\n          }\n        }\n\n      /* Backslash may introduce a data char or a metacharacter; stop the\n      string before the latter. */\n\n      if (c == '\\\\')\n        {\n        const uschar *saveptr = ptr;\n        c = check_escape(&ptr, errorptr, bracount, options, FALSE,\n          &compile_block);\n        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;\n        if (c < 0) { ptr = saveptr; break; }\n\n#ifdef SUPPORT_UTF8\n        if (c > 127 && (options & PCRE_UTF8) != 0)\n          {\n          int i;\n          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)\n            if (c <= utf8_table1[i]) break;\n          runlength += i;\n          }\n#endif\n        }\n\n      /* Ordinary character or single-char escape */\n\n      runlength++;\n\n      if ((const char *)ptr > pattern + pattern_length)\n        {\n        *errorptr = \"internal error\";\n        goto PCRE_ERROR_RETURN;\n        }\n      }\n\n    /* This \"while\" is the end of the \"do\" above. */\n\n    while (runlength < MAXLIT &&\n      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);\n\n    ptr--;\n    length += runlength;\n    continue;\n    }\n  }\n\nlength += 4;    /* For final KET and END */\n\nif (length > 65539)\n  {\n  *errorptr = ERR20;\n  return NULL;\n  }\n\n/* Compute the size of data block needed and get it, either from malloc or\nexternally provided function. We specify \"code[0]\" in the offsetof() expression\nrather than just \"code\", because it has been reported that one broken compiler\nfails on \"code\" because it is also an independent variable. It should make no\ndifference to the value of the offsetof(). */\n\nsize = length + offsetof(real_pcre, code[0]);\nre = (real_pcre *)(pcre_malloc)(size);\n\nif (re == NULL)\n  {\n  *errorptr = ERR21;\n  return NULL;\n  }\n\n/* Put in the magic number, and save the size, options, and table pointer */\n\nre->magic_number = MAGIC_NUMBER;\nre->size = size;\nre->options = options;\nre->tables = tables;\n\n/* Set up a starting, non-extracting bracket, then compile the expression. On\nerror, *errorptr will be set non-NULL, so we don't need to look at the result\nof the function here. */\n\nptr = (const uschar *)pattern;\ncode = re->code;\n*code = OP_BRA;\nbracount = 0;\n(void)compile_regex(options, -1, &bracount, &code, &ptr, errorptr, FALSE, -1,\n  &reqchar, &countlits, &compile_block);\nre->top_bracket = bracount;\nre->top_backref = top_backref;\n\n/* If not reached end of pattern on success, there's an excess bracket. */\n\nif (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;\n\n/* Fill in the terminating state and check for disastrous overflow, but\nif debugging, leave the test till after things are printed out. */\n\n*code++ = OP_END;\n\n#ifndef DEBUG\nif (code - re->code > length) *errorptr = ERR23;\n#endif\n\n/* Give an error if there's back reference to a non-existent capturing\nsubpattern. */\n\nif (top_backref > re->top_bracket) *errorptr = ERR15;\n\n/* Failed to compile */\n\nif (*errorptr != NULL)\n  {\n  (pcre_free)(re);\n  PCRE_ERROR_RETURN:\n  *erroroffset = ptr - (const uschar *)pattern;\n  return NULL;\n  }\n\n/* If the anchored option was not passed, set flag if we can determine that the\npattern is anchored by virtue of ^ characters or \\A or anything else (such as\nstarting with .* when DOTALL is set).\n\nOtherwise, see if we can determine what the first character has to be, because\nthat speeds up unanchored matches no end. If not, see if we can set the\nPCRE_STARTLINE flag. This is helpful for multiline matches when all branches\nstart with ^. and also when all branches start with .* for non-DOTALL matches.\n*/\n\nif ((options & PCRE_ANCHORED) == 0)\n  {\n  int temp_options = options;\n  if (is_anchored(re->code, &temp_options))\n    re->options |= PCRE_ANCHORED;\n  else\n    {\n    int ch = find_firstchar(re->code, &temp_options);\n    if (ch >= 0)\n      {\n      re->first_char = ch;\n      re->options |= PCRE_FIRSTSET;\n      }\n    else if (is_startline(re->code))\n      re->options |= PCRE_STARTLINE;\n    }\n  }\n\n/* Save the last required character if there are at least two literal\ncharacters on all paths, or if there is no first character setting. */\n\nif (reqchar >= 0 && (countlits > 1 || (re->options & PCRE_FIRSTSET) == 0))\n  {\n  re->req_char = reqchar;\n  re->options |= PCRE_REQCHSET;\n  }\n\n/* Print out the compiled data for debugging */\n\n#ifdef DEBUG_PCRE\n\nprintf(\"Length = %d top_bracket = %d top_backref = %d\\n\",\n  length, re->top_bracket, re->top_backref);\n\nif (re->options != 0)\n  {\n  printf(\"%s%s%s%s%s%s%s%s%s\\n\",\n    ((re->options & PCRE_ANCHORED) != 0)? \"anchored \" : \"\",\n    ((re->options & PCRE_CASELESS) != 0)? \"caseless \" : \"\",\n    ((re->options & PCRE_ICHANGED) != 0)? \"case state changed \" : \"\",\n    ((re->options & PCRE_EXTENDED) != 0)? \"extended \" : \"\",\n    ((re->options & PCRE_MULTILINE) != 0)? \"multiline \" : \"\",\n    ((re->options & PCRE_DOTALL) != 0)? \"dotall \" : \"\",\n    ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? \"endonly \" : \"\",\n    ((re->options & PCRE_EXTRA) != 0)? \"extra \" : \"\",\n    ((re->options & PCRE_UNGREEDY) != 0)? \"ungreedy \" : \"\");\n  }\n\nif ((re->options & PCRE_FIRSTSET) != 0)\n  {\n  if (isprint(re->first_char)) printf(\"First char = %c\\n\", re->first_char);\n    else printf(\"First char = \\\\x%02x\\n\", re->first_char);\n  }\n\nif ((re->options & PCRE_REQCHSET) != 0)\n  {\n  if (isprint(re->req_char)) printf(\"Req char = %c\\n\", re->req_char);\n    else printf(\"Req char = \\\\x%02x\\n\", re->req_char);\n  }\n\ncode_end = code;\ncode_base = code = re->code;\n\nwhile (code < code_end)\n  {\n  int charlength;\n\n  printf(\"%3d \", code - code_base);\n\n  if (*code >= OP_BRA)\n    {\n    printf(\"%3d Bra %d\", (code[1] << 8) + code[2], *code - OP_BRA);\n    code += 2;\n    }\n\n  else switch(*code)\n    {\n    case OP_OPT:\n    printf(\" %.2x %s\", code[1], OP_names[*code]);\n    code++;\n    break;\n\n    case OP_COND:\n    printf(\"%3d Cond\", (code[1] << 8) + code[2]);\n    code += 2;\n    break;\n\n    case OP_CREF:\n    printf(\" %.2d %s\", code[1], OP_names[*code]);\n    code++;\n    break;\n\n    case OP_CHARS:\n    charlength = *(++code);\n    printf(\"%3d \", charlength);\n    while (charlength-- > 0)\n      if (isprint(c = *(++code))) printf(\"%c\", c); else printf(\"\\\\x%02x\", c);\n    break;\n\n    case OP_KETRMAX:\n    case OP_KETRMIN:\n    case OP_ALT:\n    case OP_KET:\n    case OP_ASSERT:\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK:\n    case OP_ASSERTBACK_NOT:\n    case OP_ONCE:\n    printf(\"%3d %s\", (code[1] << 8) + code[2], OP_names[*code]);\n    code += 2;\n    break;\n\n    case OP_REVERSE:\n    printf(\"%3d %s\", (code[1] << 8) + code[2], OP_names[*code]);\n    code += 2;\n    break;\n\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    if (*code >= OP_TYPESTAR)\n      printf(\"    %s\", OP_names[code[1]]);\n    else if (isprint(c = code[1])) printf(\"    %c\", c);\n      else printf(\"    \\\\x%02x\", c);\n    printf(\"%s\", OP_names[*code++]);\n    break;\n\n    case OP_EXACT:\n    case OP_UPTO:\n    case OP_MINUPTO:\n    if (isprint(c = code[3])) printf(\"    %c{\", c);\n      else printf(\"    \\\\x%02x{\", c);\n    if (*code != OP_EXACT) printf(\"0,\");\n    printf(\"%d}\", (code[1] << 8) + code[2]);\n    if (*code == OP_MINUPTO) printf(\"?\");\n    code += 3;\n    break;\n\n    case OP_TYPEEXACT:\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    printf(\"    %s{\", OP_names[code[3]]);\n    if (*code != OP_TYPEEXACT) printf(\",\");\n    printf(\"%d}\", (code[1] << 8) + code[2]);\n    if (*code == OP_TYPEMINUPTO) printf(\"?\");\n    code += 3;\n    break;\n\n    case OP_NOT:\n    if (isprint(c = *(++code))) printf(\"    [^%c]\", c);\n      else printf(\"    [^\\\\x%02x]\", c);\n    break;\n\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    if (isprint(c = code[1])) printf(\"    [^%c]\", c);\n      else printf(\"    [^\\\\x%02x]\", c);\n    printf(\"%s\", OP_names[*code++]);\n    break;\n\n    case OP_NOTEXACT:\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    if (isprint(c = code[3])) printf(\"    [^%c]{\", c);\n      else printf(\"    [^\\\\x%02x]{\", c);\n    if (*code != OP_NOTEXACT) printf(\",\");\n    printf(\"%d}\", (code[1] << 8) + code[2]);\n    if (*code == OP_NOTMINUPTO) printf(\"?\");\n    code += 3;\n    break;\n\n    case OP_REF:\n    printf(\"    \\\\%d\", *(++code));\n    code ++;\n    goto CLASS_REF_REPEAT;\n\n    case OP_CLASS:\n      {\n      int i, min, max;\n      code++;\n      printf(\"    [\");\n\n      for (i = 0; i < 256; i++)\n        {\n        if ((code[i/8] & (1 << (i&7))) != 0)\n          {\n          int j;\n          for (j = i+1; j < 256; j++)\n            if ((code[j/8] & (1 << (j&7))) == 0) break;\n          if (i == '-' || i == ']') printf(\"\\\\\");\n          if (isprint(i)) printf(\"%c\", i); else printf(\"\\\\x%02x\", i);\n          if (--j > i)\n            {\n            printf(\"-\");\n            if (j == '-' || j == ']') printf(\"\\\\\");\n            if (isprint(j)) printf(\"%c\", j); else printf(\"\\\\x%02x\", j);\n            }\n          i = j;\n          }\n        }\n      printf(\"]\");\n      code += 32;\n\n      CLASS_REF_REPEAT:\n\n      switch(*code)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        printf(\"%s\", OP_names[*code]);\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        min = (code[1] << 8) + code[2];\n        max = (code[3] << 8) + code[4];\n        if (max == 0) printf(\"{%d,}\", min);\n        else printf(\"{%d,%d}\", min, max);\n        if (*code == OP_CRMINRANGE) printf(\"?\");\n        code += 4;\n        break;\n\n        default:\n        code--;\n        }\n      }\n    break;\n\n    /* Anything else is just a one-node item */\n\n    default:\n    printf(\"    %s\", OP_names[*code]);\n    break;\n    }\n\n  code++;\n  printf(\"\\n\");\n  }\nprintf(\"------------------------------------------------------------------\\n\");\n\n/* This check is done here in the debugging case so that the code that\nwas compiled can be seen. */\n\nif (code - re->code > length)\n  {\n  *errorptr = ERR23;\n  (pcre_free)(re);\n  *erroroffset = ptr - (uschar *)pattern;\n  return NULL;\n  }\n#endif\n\nreturn (pcre *)re;\n}\n\n\n\n/*************************************************\n*          Match a back-reference                *\n*************************************************/\n\n/* If a back reference hasn't been set, the length that is passed is greater\nthan the number of characters left in the string, so the match fails.\n\nArguments:\n  offset      index into the offset vector\n  eptr        points into the subject\n  length      length to be matched\n  md          points to match data block\n  ims         the ims flags\n\nReturns:      TRUE if matched\n*/\n\nstatic BOOL\nmatch_ref(int offset, register const uschar *eptr, int length, match_data *md,\n  unsigned long int ims)\n{\nconst uschar *p = md->start_subject + md->offset_vector[offset];\n\n#ifdef DEBUG_PCRE\nif (eptr >= md->end_subject)\n  printf(\"matching subject <null>\");\nelse\n  {\n  printf(\"matching subject \");\n  pchars(eptr, length, TRUE, md);\n  }\nprintf(\" against backref \");\npchars(p, length, FALSE, md);\nprintf(\"\\n\");\n#endif\n\n/* Always fail if not enough characters left */\n\nif (length > md->end_subject - eptr) return FALSE;\n\n/* Separate the caselesss case for speed */\n\nif ((ims & PCRE_CASELESS) != 0)\n  {\n  while (length-- > 0)\n    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;\n  }\nelse\n  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }\n\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*         Match from current position            *\n*************************************************/\n\n/* On entry ecode points to the first opcode, and eptr to the first character\nin the subject string, while eptrb holds the value of eptr at the start of the\nlast bracketed group - used for breaking infinite loops matching zero-length\nstrings.\n\nArguments:\n   eptr        pointer in subject\n   ecode       position in code\n   offset_top  current top pointer\n   md          pointer to \"static\" info for the match\n   ims         current /i, /m, and /s options\n   eptrb       pointer to chain of blocks containing eptr at start of\n                 brackets - for testing for empty matches\n   flags       can contain\n                 match_condassert - this is an assertion condition\n                 match_isgroup - this is the start of a bracketed group\n\nReturns:       TRUE if matched\n*/\n\nstatic BOOL\nmatch(register const uschar *eptr, register const uschar *ecode,\n  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,\n  int flags)\n{\nunsigned long int original_ims = ims;   /* Save for resetting on ')' */\neptrblock newptrb;\n\n/* At the start of a bracketed group, add the current subject pointer to the\nstack of such pointers, to be re-instated at the end of the group when we hit\nthe closing ket. When match() is called in other circumstances, we don't add to\nthe stack. */\n\nif ((flags & match_isgroup) != 0)\n  {\n  newptrb.prev = eptrb;\n  newptrb.saved_eptr = eptr;\n  eptrb = &newptrb;\n  }\n\n/* Now start processing the operations. */\n\nfor (;;)\n  {\n  int op = (int)*ecode;\n  int min, max, ctype;\n  register int i;\n  register int c;\n  BOOL minimize = FALSE;\n\n  /* Opening capturing bracket. If there is space in the offset vector, save\n  the current subject position in the working slot at the top of the vector. We\n  mustn't change the current values of the data slot, because they may be set\n  from a previous iteration of this group, and be referred to by a reference\n  inside the group.\n\n  If the bracket fails to match, we need to restore this value and also the\n  values of the final offsets, in case they were set by a previous iteration of\n  the same bracket.\n\n  If there isn't enough space in the offset vector, treat this as if it were a\n  non-capturing bracket. Don't worry about setting the flag for the error case\n  here; that is handled in the code for KET. */\n\n  if (op > OP_BRA)\n    {\n    int number = op - OP_BRA;\n    int offset = number << 1;\n\n#ifdef DEBUG_PCRE\n    printf(\"start bracket %d subject=\", number);\n    pchars(eptr, 16, TRUE, md);\n    printf(\"\\n\");\n#endif\n\n    if (offset < md->offset_max)\n      {\n      int save_offset1 = md->offset_vector[offset];\n      int save_offset2 = md->offset_vector[offset+1];\n      int save_offset3 = md->offset_vector[md->offset_end - number];\n\n      DPRINTF((\"saving %d %d %d\\n\", save_offset1, save_offset2, save_offset3));\n      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;\n\n      do\n        {\n        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))\n          return TRUE;\n        ecode += (ecode[1] << 8) + ecode[2];\n        }\n      while (*ecode == OP_ALT);\n\n      DPRINTF((\"bracket %d failed\\n\", number));\n\n      md->offset_vector[offset] = save_offset1;\n      md->offset_vector[offset+1] = save_offset2;\n      md->offset_vector[md->offset_end - number] = save_offset3;\n      return FALSE;\n      }\n\n    /* Insufficient room for saving captured contents */\n\n    else op = OP_BRA;\n    }\n\n  /* Other types of node can be handled by a switch */\n\n  switch(op)\n    {\n    case OP_BRA:     /* Non-capturing bracket: optimized */\n    DPRINTF((\"start bracket 0\\n\"));\n    do\n      {\n      if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))\n        return TRUE;\n      ecode += (ecode[1] << 8) + ecode[2];\n      }\n    while (*ecode == OP_ALT);\n    DPRINTF((\"bracket 0 failed\\n\"));\n    return FALSE;\n\n    /* Conditional group: compilation checked that there are no more than\n    two branches. If the condition is false, skipping the first branch takes us\n    past the end if there is only one branch, but that's OK because that is\n    exactly what going to the ket would do. */\n\n    case OP_COND:\n    if (ecode[3] == OP_CREF)         /* Condition is extraction test */\n      {\n      int offset = ecode[4] << 1;    /* Doubled reference number */\n      return match(eptr,\n        ecode + ((offset < offset_top && md->offset_vector[offset] >= 0)?\n          5 : 3 + (ecode[1] << 8) + ecode[2]),\n        offset_top, md, ims, eptrb, match_isgroup);\n      }\n\n    /* The condition is an assertion. Call match() to evaluate it - setting\n    the final argument TRUE causes it to stop at the end of an assertion. */\n\n    else\n      {\n      if (match(eptr, ecode+3, offset_top, md, ims, NULL,\n          match_condassert | match_isgroup))\n        {\n        ecode += 3 + (ecode[4] << 8) + ecode[5];\n        while (*ecode == OP_ALT) ecode += (ecode[1] << 8) + ecode[2];\n        }\n      else ecode += (ecode[1] << 8) + ecode[2];\n      return match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup);\n      }\n    /* Control never reaches here */\n\n    /* Skip over conditional reference data if encountered (should not be) */\n\n    case OP_CREF:\n    ecode += 2;\n    break;\n\n    /* End of the pattern. If PCRE_NOTEMPTY is set, fail if we have matched\n    an empty string - recursion will then try other alternatives, if any. */\n\n    case OP_END:\n    if (md->notempty && eptr == md->start_match) return FALSE;\n    md->end_match_ptr = eptr;          /* Record where we ended */\n    md->end_offset_top = offset_top;   /* and how many extracts were taken */\n    return TRUE;\n\n    /* Change option settings */\n\n    case OP_OPT:\n    ims = ecode[1];\n    ecode += 2;\n    DPRINTF((\"ims set to %02lx\\n\", ims));\n    break;\n\n    /* Assertion brackets. Check the alternative branches in turn - the\n    matching won't pass the KET for an assertion. If any one branch matches,\n    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the\n    start of each branch to move the current point backwards, so the code at\n    this level is identical to the lookahead case. */\n\n    case OP_ASSERT:\n    case OP_ASSERTBACK:\n    do\n      {\n      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup)) break;\n      ecode += (ecode[1] << 8) + ecode[2];\n      }\n    while (*ecode == OP_ALT);\n    if (*ecode == OP_KET) return FALSE;\n\n    /* If checking an assertion for a condition, return TRUE. */\n\n    if ((flags & match_condassert) != 0) return TRUE;\n\n    /* Continue from after the assertion, updating the offsets high water\n    mark, since extracts may have been taken during the assertion. */\n\n    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);\n    ecode += 3;\n    offset_top = md->end_offset_top;\n    continue;\n\n    /* Negative assertion: all branches must fail to match */\n\n    case OP_ASSERT_NOT:\n    case OP_ASSERTBACK_NOT:\n    do\n      {\n      if (match(eptr, ecode+3, offset_top, md, ims, NULL, match_isgroup))\n        return FALSE;\n      ecode += (ecode[1] << 8) + ecode[2];\n      }\n    while (*ecode == OP_ALT);\n\n    if ((flags & match_condassert) != 0) return TRUE;\n\n    ecode += 3;\n    continue;\n\n    /* Move the subject pointer back. This occurs only at the start of\n    each branch of a lookbehind assertion. If we are too close to the start to\n    move back, this match function fails. When working with UTF-8 we move\n    back a number of characters, not bytes. */\n\n    case OP_REVERSE:\n#ifdef SUPPORT_UTF8\n    c = (ecode[1] << 8) + ecode[2];\n    for (i = 0; i < c; i++)\n      {\n      eptr--;\n      BACKCHAR(eptr)\n      }\n#else\n    eptr -= (ecode[1] << 8) + ecode[2];\n#endif\n\n    if (eptr < md->start_subject) return FALSE;\n    ecode += 3;\n    break;\n\n    /* Recursion matches the current regex, nested. If there are any capturing\n    brackets started but not finished, we have to save their starting points\n    and reinstate them after the recursion. However, we don't know how many\n    such there are (offset_top records the completed total) so we just have\n    to save all the potential data. There may be up to 99 such values, which\n    is a bit large to put on the stack, but using malloc for small numbers\n    seems expensive. As a compromise, the stack is used when there are fewer\n    than 16 values to store; otherwise malloc is used. A problem is what to do\n    if the malloc fails ... there is no way of returning to the top level with\n    an error. Save the top 15 values on the stack, and accept that the rest\n    may be wrong. */\n\n    case OP_RECURSE:\n      {\n      BOOL rc;\n      int *save;\n      int stacksave[15];\n\n      c = md->offset_max;\n\n      if (c < 16) save = stacksave; else\n        {\n        save = (int *)(pcre_malloc)((c+1) * sizeof(int));\n        if (save == NULL)\n          {\n          save = stacksave;\n          c = 15;\n          }\n        }\n\n      for (i = 1; i <= c; i++)\n        save[i] = md->offset_vector[md->offset_end - i];\n      rc = match(eptr, md->start_pattern, offset_top, md, ims, eptrb,\n        match_isgroup);\n      for (i = 1; i <= c; i++)\n        md->offset_vector[md->offset_end - i] = save[i];\n      if (save != stacksave) (pcre_free)(save);\n      if (!rc) return FALSE;\n\n      /* In case the recursion has set more capturing values, save the final\n      number, then move along the subject till after the recursive match,\n      and advance one byte in the pattern code. */\n\n      offset_top = md->end_offset_top;\n      eptr = md->end_match_ptr;\n      ecode++;\n      }\n    break;\n\n    /* \"Once\" brackets are like assertion brackets except that after a match,\n    the point in the subject string is not moved back. Thus there can never be\n    a move back into the brackets. Check the alternative branches in turn - the\n    matching won't pass the KET for this kind of subpattern. If any one branch\n    matches, we carry on as at the end of a normal bracket, leaving the subject\n    pointer. */\n\n    case OP_ONCE:\n      {\n      const uschar *prev = ecode;\n      const uschar *saved_eptr = eptr;\n\n      do\n        {\n        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, match_isgroup))\n          break;\n        ecode += (ecode[1] << 8) + ecode[2];\n        }\n      while (*ecode == OP_ALT);\n\n      /* If hit the end of the group (which could be repeated), fail */\n\n      if (*ecode != OP_ONCE && *ecode != OP_ALT) return FALSE;\n\n      /* Continue as from after the assertion, updating the offsets high water\n      mark, since extracts may have been taken. */\n\n      do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);\n\n      offset_top = md->end_offset_top;\n      eptr = md->end_match_ptr;\n\n      /* For a non-repeating ket, just continue at this level. This also\n      happens for a repeating ket if no characters were matched in the group.\n      This is the forcible breaking of infinite loops as implemented in Perl\n      5.005. If there is an options reset, it will get obeyed in the normal\n      course of events. */\n\n      if (*ecode == OP_KET || eptr == saved_eptr)\n        {\n        ecode += 3;\n        break;\n        }\n\n      /* The repeating kets try the rest of the pattern or restart from the\n      preceding bracket, in the appropriate order. We need to reset any options\n      that changed within the bracket before re-running it, so check the next\n      opcode. */\n\n      if (ecode[3] == OP_OPT)\n        {\n        ims = (ims & ~PCRE_IMS) | ecode[4];\n        DPRINTF((\"ims set to %02lx at group repeat\\n\", ims));\n        }\n\n      if (*ecode == OP_KETRMIN)\n        {\n        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||\n            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))\n              return TRUE;\n        }\n      else  /* OP_KETRMAX */\n        {\n        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||\n            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;\n        }\n      }\n    return FALSE;\n\n    /* An alternation is the end of a branch; scan along to find the end of the\n    bracketed group and go to there. */\n\n    case OP_ALT:\n    do ecode += (ecode[1] << 8) + ecode[2]; while (*ecode == OP_ALT);\n    break;\n\n    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating\n    that it may occur zero times. It may repeat infinitely, or not at all -\n    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper\n    repeat limits are compiled as a number of copies, with the optional ones\n    preceded by BRAZERO or BRAMINZERO. */\n\n    case OP_BRAZERO:\n      {\n      const uschar *next = ecode+1;\n      if (match(eptr, next, offset_top, md, ims, eptrb, match_isgroup))\n        return TRUE;\n      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);\n      ecode = next + 3;\n      }\n    break;\n\n    case OP_BRAMINZERO:\n      {\n      const uschar *next = ecode+1;\n      do next += (next[1] << 8) + next[2]; while (*next == OP_ALT);\n      if (match(eptr, next+3, offset_top, md, ims, eptrb, match_isgroup))\n        return TRUE;\n      ecode++;\n      }\n    break;\n\n    /* End of a group, repeated or non-repeating. If we are at the end of\n    an assertion \"group\", stop matching and return TRUE, but record the\n    current high water mark for use by positive assertions. Do this also\n    for the \"once\" (not-backup up) groups. */\n\n    case OP_KET:\n    case OP_KETRMIN:\n    case OP_KETRMAX:\n      {\n      const uschar *prev = ecode - (ecode[1] << 8) - ecode[2];\n      const uschar *saved_eptr = eptrb->saved_eptr;\n\n      eptrb = eptrb->prev;    /* Back up the stack of bracket start pointers */\n\n      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||\n          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||\n          *prev == OP_ONCE)\n        {\n        md->end_match_ptr = eptr;      /* For ONCE */\n        md->end_offset_top = offset_top;\n        return TRUE;\n        }\n\n      /* In all other cases except a conditional group we have to check the\n      group number back at the start and if necessary complete handling an\n      extraction by setting the offsets and bumping the high water mark. */\n\n      if (*prev != OP_COND)\n        {\n        int number = *prev - OP_BRA;\n        int offset = number << 1;\n\n#ifdef DEBUG_PCRE\n        printf(\"end bracket %d\", number);\n        printf(\"\\n\");\n#endif\n\n        if (number > 0)\n          {\n          if (offset >= md->offset_max) md->offset_overflow = TRUE; else\n            {\n            md->offset_vector[offset] =\n              md->offset_vector[md->offset_end - number];\n            md->offset_vector[offset+1] = eptr - md->start_subject;\n            if (offset_top <= offset) offset_top = offset + 2;\n            }\n          }\n        }\n\n      /* Reset the value of the ims flags, in case they got changed during\n      the group. */\n\n      ims = original_ims;\n      DPRINTF((\"ims reset to %02lx\\n\", ims));\n\n      /* For a non-repeating ket, just continue at this level. This also\n      happens for a repeating ket if no characters were matched in the group.\n      This is the forcible breaking of infinite loops as implemented in Perl\n      5.005. If there is an options reset, it will get obeyed in the normal\n      course of events. */\n\n      if (*ecode == OP_KET || eptr == saved_eptr)\n        {\n        ecode += 3;\n        break;\n        }\n\n      /* The repeating kets try the rest of the pattern or restart from the\n      preceding bracket, in the appropriate order. */\n\n      if (*ecode == OP_KETRMIN)\n        {\n        if (match(eptr, ecode+3, offset_top, md, ims, eptrb, 0) ||\n            match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup))\n              return TRUE;\n        }\n      else  /* OP_KETRMAX */\n        {\n        if (match(eptr, prev, offset_top, md, ims, eptrb, match_isgroup) ||\n            match(eptr, ecode+3, offset_top, md, ims, eptrb, 0)) return TRUE;\n        }\n      }\n    return FALSE;\n\n    /* Start of subject unless notbol, or after internal newline if multiline */\n\n    case OP_CIRC:\n    if (md->notbol && eptr == md->start_subject) return FALSE;\n    if ((ims & PCRE_MULTILINE) != 0)\n      {\n      if (eptr != md->start_subject && eptr[-1] != '\\n') return FALSE;\n      ecode++;\n      break;\n      }\n    /* ... else fall through */\n\n    /* Start of subject assertion */\n\n    case OP_SOD:\n    if (eptr != md->start_subject) return FALSE;\n    ecode++;\n    break;\n\n    /* Assert before internal newline if multiline, or before a terminating\n    newline unless endonly is set, else end of subject unless noteol is set. */\n\n    case OP_DOLL:\n    if ((ims & PCRE_MULTILINE) != 0)\n      {\n      if (eptr < md->end_subject) { if (*eptr != '\\n') return FALSE; }\n        else { if (md->noteol) return FALSE; }\n      ecode++;\n      break;\n      }\n    else\n      {\n      if (md->noteol) return FALSE;\n      if (!md->endonly)\n        {\n        if (eptr < md->end_subject - 1 ||\n           (eptr == md->end_subject - 1 && *eptr != '\\n')) return FALSE;\n\n        ecode++;\n        break;\n        }\n      }\n    /* ... else fall through */\n\n    /* End of subject assertion (\\z) */\n\n    case OP_EOD:\n    if (eptr < md->end_subject) return FALSE;\n    ecode++;\n    break;\n\n    /* End of subject or ending \\n assertion (\\Z) */\n\n    case OP_EODN:\n    if (eptr < md->end_subject - 1 ||\n       (eptr == md->end_subject - 1 && *eptr != '\\n')) return FALSE;\n    ecode++;\n    break;\n\n    /* Word boundary assertions */\n\n    case OP_NOT_WORD_BOUNDARY:\n    case OP_WORD_BOUNDARY:\n      {\n      BOOL prev_is_word = (eptr != md->start_subject) &&\n        ((md->ctypes[eptr[-1]] & ctype_word) != 0);\n      BOOL cur_is_word = (eptr < md->end_subject) &&\n        ((md->ctypes[*eptr] & ctype_word) != 0);\n      if ((*ecode++ == OP_WORD_BOUNDARY)?\n           cur_is_word == prev_is_word : cur_is_word != prev_is_word)\n        return FALSE;\n      }\n    break;\n\n    /* Match a single character type; inline for speed */\n\n    case OP_ANY:\n    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == '\\n')\n      return FALSE;\n    if (eptr++ >= md->end_subject) return FALSE;\n#ifdef SUPPORT_UTF8\n    if (md->utf8)\n      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;\n#endif\n    ecode++;\n    break;\n\n    case OP_NOT_DIGIT:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_digit) != 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    case OP_DIGIT:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_digit) == 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    case OP_NOT_WHITESPACE:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_space) != 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    case OP_WHITESPACE:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_space) == 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    case OP_NOT_WORDCHAR:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_word) != 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    case OP_WORDCHAR:\n    if (eptr >= md->end_subject ||\n       (md->ctypes[*eptr++] & ctype_word) == 0)\n      return FALSE;\n    ecode++;\n    break;\n\n    /* Match a back reference, possibly repeatedly. Look past the end of the\n    item to see if there is repeat information following. The code is similar\n    to that for character classes, but repeated for efficiency. Then obey\n    similar code to character type repeats - written out again for speed.\n    However, if the referenced string is the empty string, always treat\n    it as matched, any number of times (otherwise there could be infinite\n    loops). */\n\n    case OP_REF:\n      {\n      int length;\n      int offset = ecode[1] << 1;                /* Doubled reference number */\n      ecode += 2;                                /* Advance past the item */\n\n      /* If the reference is unset, set the length to be longer than the amount\n      of subject left; this ensures that every attempt at a match fails. We\n      can't just fail here, because of the possibility of quantifiers with zero\n      minima. */\n\n      length = (offset >= offset_top || md->offset_vector[offset] < 0)?\n        md->end_subject - eptr + 1 :\n        md->offset_vector[offset+1] - md->offset_vector[offset];\n\n      /* Set up for repetition, or handle the non-repeated case */\n\n      switch (*ecode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        c = *ecode++ - OP_CRSTAR;\n        minimize = (c & 1) != 0;\n        min = rep_min[c];                 /* Pick up values from tables; */\n        max = rep_max[c];                 /* zero for max => infinity */\n        if (max == 0) max = INT_MAX;\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        minimize = (*ecode == OP_CRMINRANGE);\n        min = (ecode[1] << 8) + ecode[2];\n        max = (ecode[3] << 8) + ecode[4];\n        if (max == 0) max = INT_MAX;\n        ecode += 5;\n        break;\n\n        default:               /* No repeat follows */\n        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;\n        eptr += length;\n        continue;              /* With the main loop */\n        }\n\n      /* If the length of the reference is zero, just continue with the\n      main loop. */\n\n      if (length == 0) continue;\n\n      /* First, ensure the minimum number of matches are present. We get back\n      the length of the reference string explicitly rather than passing the\n      address of eptr, so that eptr can be a register variable. */\n\n      for (i = 1; i <= min; i++)\n        {\n        if (!match_ref(offset, eptr, length, md, ims)) return FALSE;\n        eptr += length;\n        }\n\n      /* If min = max, continue at the same level without recursion.\n      They are not both allowed to be zero. */\n\n      if (min == max) continue;\n\n      /* If minimizing, keep trying and advancing the pointer */\n\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || !match_ref(offset, eptr, length, md, ims))\n            return FALSE;\n          eptr += length;\n          }\n        /* Control never gets here */\n        }\n\n      /* If maximizing, find the longest string and work backwards */\n\n      else\n        {\n        const uschar *pp = eptr;\n        for (i = min; i < max; i++)\n          {\n          if (!match_ref(offset, eptr, length, md, ims)) break;\n          eptr += length;\n          }\n        while (eptr >= pp)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          eptr -= length;\n          }\n        return FALSE;\n        }\n      }\n    /* Control never gets here */\n\n\n\n    /* Match a character class, possibly repeatedly. Look past the end of the\n    item to see if there is repeat information following. Then obey similar\n    code to character type repeats - written out again for speed. */\n\n    case OP_CLASS:\n      {\n      const uschar *data = ecode + 1;  /* Save for matching */\n      ecode += 33;                     /* Advance past the item */\n\n      switch (*ecode)\n        {\n        case OP_CRSTAR:\n        case OP_CRMINSTAR:\n        case OP_CRPLUS:\n        case OP_CRMINPLUS:\n        case OP_CRQUERY:\n        case OP_CRMINQUERY:\n        c = *ecode++ - OP_CRSTAR;\n        minimize = (c & 1) != 0;\n        min = rep_min[c];                 /* Pick up values from tables; */\n        max = rep_max[c];                 /* zero for max => infinity */\n        if (max == 0) max = INT_MAX;\n        break;\n\n        case OP_CRRANGE:\n        case OP_CRMINRANGE:\n        minimize = (*ecode == OP_CRMINRANGE);\n        min = (ecode[1] << 8) + ecode[2];\n        max = (ecode[3] << 8) + ecode[4];\n        if (max == 0) max = INT_MAX;\n        ecode += 5;\n        break;\n\n        default:               /* No repeat follows */\n        min = max = 1;\n        break;\n        }\n\n      /* First, ensure the minimum number of matches are present. */\n\n      for (i = 1; i <= min; i++)\n        {\n        if (eptr >= md->end_subject) return FALSE;\n        GETCHARINC(c, eptr)         /* Get character; increment eptr */\n\n#ifdef SUPPORT_UTF8\n        /* We do not yet support class members > 255 */\n        if (c > 255) return FALSE;\n#endif\n\n        if ((data[c/8] & (1 << (c&7))) != 0) continue;\n        return FALSE;\n        }\n\n      /* If max == min we can continue with the main loop without the\n      need to recurse. */\n\n      if (min == max) continue;\n\n      /* If minimizing, keep testing the rest of the expression and advancing\n      the pointer while it matches the class. */\n\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || eptr >= md->end_subject) return FALSE;\n          GETCHARINC(c, eptr)       /* Get character; increment eptr */\n\n#ifdef SUPPORT_UTF8\n          /* We do not yet support class members > 255 */\n          if (c > 255) return FALSE;\n#endif\n          if ((data[c/8] & (1 << (c&7))) != 0) continue;\n          return FALSE;\n          }\n        /* Control never gets here */\n        }\n\n      /* If maximizing, find the longest possible run, then work backwards. */\n\n      else\n        {\n        const uschar *pp = eptr;\n        int len = 1;\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject) break;\n          GETCHARLEN(c, eptr, len)  /* Get character, set length if UTF-8 */\n\n#ifdef SUPPORT_UTF8\n          /* We do not yet support class members > 255 */\n          if (c > 255) break;\n#endif\n          if ((data[c/8] & (1 << (c&7))) == 0) break;\n          eptr += len;\n          }\n\n        while (eptr >= pp)\n          {\n          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n\n#ifdef SUPPORT_UTF8\n          BACKCHAR(eptr)\n#endif\n          }\n        return FALSE;\n        }\n      }\n    /* Control never gets here */\n\n    /* Match a run of characters */\n\n    case OP_CHARS:\n      {\n      register int length = ecode[1];\n      ecode += 2;\n\n#ifdef DEBUG_PCRE    /* Sigh. Some compilers never learn. */\n      if (eptr >= md->end_subject)\n        printf(\"matching subject <null> against pattern \");\n      else\n        {\n        printf(\"matching subject \");\n        pchars(eptr, length, TRUE, md);\n        printf(\" against pattern \");\n        }\n      pchars(ecode, length, FALSE, md);\n      printf(\"\\n\");\n#endif\n\n      if (length > md->end_subject - eptr) return FALSE;\n      if ((ims & PCRE_CASELESS) != 0)\n        {\n        while (length-- > 0)\n          if (md->lcc[*ecode++] != md->lcc[*eptr++])\n            return FALSE;\n        }\n      else\n        {\n        while (length-- > 0) if (*ecode++ != *eptr++) return FALSE;\n        }\n      }\n    break;\n\n    /* Match a single character repeatedly; different opcodes share code. */\n\n    case OP_EXACT:\n    min = max = (ecode[1] << 8) + ecode[2];\n    ecode += 3;\n    goto REPEATCHAR;\n\n    case OP_UPTO:\n    case OP_MINUPTO:\n    min = 0;\n    max = (ecode[1] << 8) + ecode[2];\n    minimize = *ecode == OP_MINUPTO;\n    ecode += 3;\n    goto REPEATCHAR;\n\n    case OP_STAR:\n    case OP_MINSTAR:\n    case OP_PLUS:\n    case OP_MINPLUS:\n    case OP_QUERY:\n    case OP_MINQUERY:\n    c = *ecode++ - OP_STAR;\n    minimize = (c & 1) != 0;\n    min = rep_min[c];                 /* Pick up values from tables; */\n    max = rep_max[c];                 /* zero for max => infinity */\n    if (max == 0) max = INT_MAX;\n\n    /* Common code for all repeated single-character matches. We can give\n    up quickly if there are fewer than the minimum number of characters left in\n    the subject. */\n\n    REPEATCHAR:\n    if (min > md->end_subject - eptr) return FALSE;\n    c = *ecode++;\n\n    /* The code is duplicated for the caseless and caseful cases, for speed,\n    since matching characters is likely to be quite common. First, ensure the\n    minimum number of matches are present. If min = max, continue at the same\n    level without recursing. Otherwise, if minimizing, keep trying the rest of\n    the expression and advancing one matching character if failing, up to the\n    maximum. Alternatively, if maximizing, find the maximum number of\n    characters and work backwards. */\n\n    DPRINTF((\"matching %c{%d,%d} against subject %.*s\\n\", c, min, max,\n      max, eptr));\n\n    if ((ims & PCRE_CASELESS) != 0)\n      {\n      c = md->lcc[c];\n      for (i = 1; i <= min; i++)\n        if (c != md->lcc[*eptr++]) return FALSE;\n      if (min == max) continue;\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || eptr >= md->end_subject ||\n              c != md->lcc[*eptr++])\n            return FALSE;\n          }\n        /* Control never gets here */\n        }\n      else\n        {\n        const uschar *pp = eptr;\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || c != md->lcc[*eptr]) break;\n          eptr++;\n          }\n        while (eptr >= pp)\n          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n        return FALSE;\n        }\n      /* Control never gets here */\n      }\n\n    /* Caseful comparisons */\n\n    else\n      {\n      for (i = 1; i <= min; i++) if (c != *eptr++) return FALSE;\n      if (min == max) continue;\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || eptr >= md->end_subject || c != *eptr++) return FALSE;\n          }\n        /* Control never gets here */\n        }\n      else\n        {\n        const uschar *pp = eptr;\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || c != *eptr) break;\n          eptr++;\n          }\n        while (eptr >= pp)\n         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n           return TRUE;\n        return FALSE;\n        }\n      }\n    /* Control never gets here */\n\n    /* Match a negated single character */\n\n    case OP_NOT:\n    if (eptr >= md->end_subject) return FALSE;\n    ecode++;\n    if ((ims & PCRE_CASELESS) != 0)\n      {\n      if (md->lcc[*ecode++] == md->lcc[*eptr++]) return FALSE;\n      }\n    else\n      {\n      if (*ecode++ == *eptr++) return FALSE;\n      }\n    break;\n\n    /* Match a negated single character repeatedly. This is almost a repeat of\n    the code for a repeated single character, but I haven't found a nice way of\n    commoning these up that doesn't require a test of the positive/negative\n    option for each character match. Maybe that wouldn't add very much to the\n    time taken, but character matching *is* what this is all about... */\n\n    case OP_NOTEXACT:\n    min = max = (ecode[1] << 8) + ecode[2];\n    ecode += 3;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTUPTO:\n    case OP_NOTMINUPTO:\n    min = 0;\n    max = (ecode[1] << 8) + ecode[2];\n    minimize = *ecode == OP_NOTMINUPTO;\n    ecode += 3;\n    goto REPEATNOTCHAR;\n\n    case OP_NOTSTAR:\n    case OP_NOTMINSTAR:\n    case OP_NOTPLUS:\n    case OP_NOTMINPLUS:\n    case OP_NOTQUERY:\n    case OP_NOTMINQUERY:\n    c = *ecode++ - OP_NOTSTAR;\n    minimize = (c & 1) != 0;\n    min = rep_min[c];                 /* Pick up values from tables; */\n    max = rep_max[c];                 /* zero for max => infinity */\n    if (max == 0) max = INT_MAX;\n\n    /* Common code for all repeated single-character matches. We can give\n    up quickly if there are fewer than the minimum number of characters left in\n    the subject. */\n\n    REPEATNOTCHAR:\n    if (min > md->end_subject - eptr) return FALSE;\n    c = *ecode++;\n\n    /* The code is duplicated for the caseless and caseful cases, for speed,\n    since matching characters is likely to be quite common. First, ensure the\n    minimum number of matches are present. If min = max, continue at the same\n    level without recursing. Otherwise, if minimizing, keep trying the rest of\n    the expression and advancing one matching character if failing, up to the\n    maximum. Alternatively, if maximizing, find the maximum number of\n    characters and work backwards. */\n\n    DPRINTF((\"negative matching %c{%d,%d} against subject %.*s\\n\", c, min, max,\n      max, eptr));\n\n    if ((ims & PCRE_CASELESS) != 0)\n      {\n      c = md->lcc[c];\n      for (i = 1; i <= min; i++)\n        if (c == md->lcc[*eptr++]) return FALSE;\n      if (min == max) continue;\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || eptr >= md->end_subject ||\n              c == md->lcc[*eptr++])\n            return FALSE;\n          }\n        /* Control never gets here */\n        }\n      else\n        {\n        const uschar *pp = eptr;\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || c == md->lcc[*eptr]) break;\n          eptr++;\n          }\n        while (eptr >= pp)\n          if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n        return FALSE;\n        }\n      /* Control never gets here */\n      }\n\n    /* Caseful comparisons */\n\n    else\n      {\n      for (i = 1; i <= min; i++) if (c == *eptr++) return FALSE;\n      if (min == max) continue;\n      if (minimize)\n        {\n        for (i = min;; i++)\n          {\n          if (match(eptr, ecode, offset_top, md, ims, eptrb, 0))\n            return TRUE;\n          if (i >= max || eptr >= md->end_subject || c == *eptr++) return FALSE;\n          }\n        /* Control never gets here */\n        }\n      else\n        {\n        const uschar *pp = eptr;\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || c == *eptr) break;\n          eptr++;\n          }\n        while (eptr >= pp)\n         if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n           return TRUE;\n        return FALSE;\n        }\n      }\n    /* Control never gets here */\n\n    /* Match a single character type repeatedly; several different opcodes\n    share code. This is very similar to the code for single characters, but we\n    repeat it in the interests of efficiency. */\n\n    case OP_TYPEEXACT:\n    min = max = (ecode[1] << 8) + ecode[2];\n    minimize = TRUE;\n    ecode += 3;\n    goto REPEATTYPE;\n\n    case OP_TYPEUPTO:\n    case OP_TYPEMINUPTO:\n    min = 0;\n    max = (ecode[1] << 8) + ecode[2];\n    minimize = *ecode == OP_TYPEMINUPTO;\n    ecode += 3;\n    goto REPEATTYPE;\n\n    case OP_TYPESTAR:\n    case OP_TYPEMINSTAR:\n    case OP_TYPEPLUS:\n    case OP_TYPEMINPLUS:\n    case OP_TYPEQUERY:\n    case OP_TYPEMINQUERY:\n    c = *ecode++ - OP_TYPESTAR;\n    minimize = (c & 1) != 0;\n    min = rep_min[c];                 /* Pick up values from tables; */\n    max = rep_max[c];                 /* zero for max => infinity */\n    if (max == 0) max = INT_MAX;\n\n    /* Common code for all repeated single character type matches */\n\n    REPEATTYPE:\n    ctype = *ecode++;      /* Code for the character type */\n\n    /* First, ensure the minimum number of matches are present. Use inline\n    code for maximizing the speed, and do the type test once at the start\n    (i.e. keep it out of the loop). Also we can test that there are at least\n    the minimum number of bytes before we start, except when doing '.' in\n    UTF8 mode. Leave the test in in all cases; in the special case we have\n    to test after each character. */\n\n    if (min > md->end_subject - eptr) return FALSE;\n    if (min > 0) switch(ctype)\n      {\n      case OP_ANY:\n#ifdef SUPPORT_UTF8\n      if (md->utf8)\n        {\n        for (i = 1; i <= min; i++)\n          {\n          if (eptr >= md->end_subject ||\n             (*eptr++ == '\\n' && (ims & PCRE_DOTALL) == 0))\n            return FALSE;\n          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;\n          }\n        break;\n        }\n#endif\n      /* Non-UTF8 can be faster */\n      if ((ims & PCRE_DOTALL) == 0)\n        { for (i = 1; i <= min; i++) if (*eptr++ == '\\n') return FALSE; }\n      else eptr += min;\n      break;\n\n      case OP_NOT_DIGIT:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_digit) != 0) return FALSE;\n      break;\n\n      case OP_DIGIT:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_digit) == 0) return FALSE;\n      break;\n\n      case OP_NOT_WHITESPACE:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_space) != 0) return FALSE;\n      break;\n\n      case OP_WHITESPACE:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_space) == 0) return FALSE;\n      break;\n\n      case OP_NOT_WORDCHAR:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_word) != 0)\n          return FALSE;\n      break;\n\n      case OP_WORDCHAR:\n      for (i = 1; i <= min; i++)\n        if ((md->ctypes[*eptr++] & ctype_word) == 0)\n          return FALSE;\n      break;\n      }\n\n    /* If min = max, continue at the same level without recursing */\n\n    if (min == max) continue;\n\n    /* If minimizing, we have to test the rest of the pattern before each\n    subsequent match. */\n\n    if (minimize)\n      {\n      for (i = min;; i++)\n        {\n        if (match(eptr, ecode, offset_top, md, ims, eptrb, 0)) return TRUE;\n        if (i >= max || eptr >= md->end_subject) return FALSE;\n\n        c = *eptr++;\n        switch(ctype)\n          {\n          case OP_ANY:\n          if ((ims & PCRE_DOTALL) == 0 && c == '\\n') return FALSE;\n#ifdef SUPPORT_UTF8\n          if (md->utf8)\n            while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;\n#endif\n          break;\n\n          case OP_NOT_DIGIT:\n          if ((md->ctypes[c] & ctype_digit) != 0) return FALSE;\n          break;\n\n          case OP_DIGIT:\n          if ((md->ctypes[c] & ctype_digit) == 0) return FALSE;\n          break;\n\n          case OP_NOT_WHITESPACE:\n          if ((md->ctypes[c] & ctype_space) != 0) return FALSE;\n          break;\n\n          case OP_WHITESPACE:\n          if  ((md->ctypes[c] & ctype_space) == 0) return FALSE;\n          break;\n\n          case OP_NOT_WORDCHAR:\n          if ((md->ctypes[c] & ctype_word) != 0) return FALSE;\n          break;\n\n          case OP_WORDCHAR:\n          if ((md->ctypes[c] & ctype_word) == 0) return FALSE;\n          break;\n          }\n        }\n      /* Control never gets here */\n      }\n\n    /* If maximizing it is worth using inline code for speed, doing the type\n    test once at the start (i.e. keep it out of the loop). */\n\n    else\n      {\n      const uschar *pp = eptr;\n      switch(ctype)\n        {\n        case OP_ANY:\n\n        /* Special code is required for UTF8, but when the maximum is unlimited\n        we don't need it. */\n\n#ifdef SUPPORT_UTF8\n        if (md->utf8 && max < INT_MAX)\n          {\n          if ((ims & PCRE_DOTALL) == 0)\n            {\n            for (i = min; i < max; i++)\n              {\n              if (eptr >= md->end_subject || *eptr++ == '\\n') break;\n              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;\n              }\n            }\n          else\n            {\n            for (i = min; i < max; i++)\n              {\n              eptr++;\n              while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;\n              }\n            }\n          break;\n          }\n#endif\n        /* Non-UTF8 can be faster */\n        if ((ims & PCRE_DOTALL) == 0)\n          {\n          for (i = min; i < max; i++)\n            {\n            if (eptr >= md->end_subject || *eptr == '\\n') break;\n            eptr++;\n            }\n          }\n        else\n          {\n          c = max - min;\n          if (c > md->end_subject - eptr) c = md->end_subject - eptr;\n          eptr += c;\n          }\n        break;\n\n        case OP_NOT_DIGIT:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)\n            break;\n          eptr++;\n          }\n        break;\n\n        case OP_DIGIT:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)\n            break;\n          eptr++;\n          }\n        break;\n\n        case OP_NOT_WHITESPACE:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)\n            break;\n          eptr++;\n          }\n        break;\n\n        case OP_WHITESPACE:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)\n            break;\n          eptr++;\n          }\n        break;\n\n        case OP_NOT_WORDCHAR:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)\n            break;\n          eptr++;\n          }\n        break;\n\n        case OP_WORDCHAR:\n        for (i = min; i < max; i++)\n          {\n          if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)\n            break;\n          eptr++;\n          }\n        break;\n        }\n\n      while (eptr >= pp)\n        {\n        if (match(eptr--, ecode, offset_top, md, ims, eptrb, 0))\n          return TRUE;\n#ifdef SUPPORT_UTF8\n        if (md->utf8)\n          while (eptr > pp && (*eptr & 0xc0) == 0x80) eptr--;\n#endif\n        }\n      return FALSE;\n      }\n    /* Control never gets here */\n\n    /* There's been some horrible disaster. */\n\n    default:\n    DPRINTF((\"Unknown opcode %d\\n\", *ecode));\n    md->errorcode = PCRE_ERROR_UNKNOWN_NODE;\n    return FALSE;\n    }\n\n  /* Do not stick any code in here without much thought; it is assumed\n  that \"continue\" in the code above comes out to here to repeat the main\n  loop. */\n\n  }             /* End of main loop */\n/* Control never reaches here */\n}\n\n\n\n\n/*************************************************\n*         Execute a Regular Expression           *\n*************************************************/\n\n/* This function applies a compiled re to a subject string and picks out\nportions of the string if it matches. Two elements in the vector are set for\neach substring: the offsets to the start and end of the substring.\n\nArguments:\n  external_re     points to the compiled expression\n  external_extra  points to \"hints\" from pcre_study() or is NULL\n  subject         points to the subject string\n  length          length of subject string (may contain binary zeros)\n  start_offset    where to start in the subject string\n  options         option bits\n  offsets         points to a vector of ints to be filled in with offsets\n  offsetcount     the number of elements in the vector\n\nReturns:          > 0 => success; value is the number of elements filled in\n                  = 0 => success, but offsets is not big enough\n                   -1 => failed to match\n                 < -1 => some kind of unexpected problem\n*/\n\nint\npcre_exec(const pcre *external_re, const pcre_extra *external_extra,\n  const char *subject, int length, int start_offset, int options, int *offsets,\n  int offsetcount)\n{\nint resetcount, ocount;\nint first_char = -1;\nint req_char = -1;\nint req_char2 = -1;\nunsigned long int ims = 0;\nmatch_data match_block;\nconst uschar *start_bits = NULL;\nconst uschar *start_match = (const uschar *)subject + start_offset;\nconst uschar *end_subject;\nconst uschar *req_char_ptr = start_match - 1;\nconst real_pcre *re = (const real_pcre *)external_re;\nconst real_pcre_extra *extra = (const real_pcre_extra *)external_extra;\nBOOL using_temporary_offsets = FALSE;\nBOOL anchored = ((re->options | options) & PCRE_ANCHORED) != 0;\nBOOL startline = (re->options & PCRE_STARTLINE) != 0;\n\nif ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;\n\nif (re == NULL || subject == NULL ||\n   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;\nif (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;\n\nmatch_block.start_pattern = re->code;\nmatch_block.start_subject = (const uschar *)subject;\nmatch_block.end_subject = match_block.start_subject + length;\nend_subject = match_block.end_subject;\n\nmatch_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;\nmatch_block.utf8 = (re->options & PCRE_UTF8) != 0;\n\nmatch_block.notbol = (options & PCRE_NOTBOL) != 0;\nmatch_block.noteol = (options & PCRE_NOTEOL) != 0;\nmatch_block.notempty = (options & PCRE_NOTEMPTY) != 0;\n\nmatch_block.errorcode = PCRE_ERROR_NOMATCH;     /* Default error */\n\nmatch_block.lcc = re->tables + lcc_offset;\nmatch_block.ctypes = re->tables + ctypes_offset;\n\n/* The ims options can vary during the matching as a result of the presence\nof (?ims) items in the pattern. They are kept in a local variable so that\nrestoring at the exit of a group is easy. */\n\nims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);\n\n/* If the expression has got more back references than the offsets supplied can\nhold, we get a temporary bit of working store to use during the matching.\nOtherwise, we can use the vector supplied, rounding down its size to a multiple\nof 3. */\n\nocount = offsetcount - (offsetcount % 3);\n\nif (re->top_backref > 0 && re->top_backref >= ocount/3)\n  {\n  ocount = re->top_backref * 3 + 3;\n  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));\n  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;\n  using_temporary_offsets = TRUE;\n  DPRINTF((\"Got memory to hold back references\\n\"));\n  }\nelse match_block.offset_vector = offsets;\n\nmatch_block.offset_end = ocount;\nmatch_block.offset_max = (2*ocount)/3;\nmatch_block.offset_overflow = FALSE;\n\n/* Compute the minimum number of offsets that we need to reset each time. Doing\nthis makes a huge difference to execution time when there aren't many brackets\nin the pattern. */\n\nresetcount = 2 + re->top_bracket * 2;\nif (resetcount > offsetcount) resetcount = ocount;\n\n/* Reset the working variable associated with each extraction. These should\nnever be used unless previously set, but they get saved and restored, and so we\ninitialize them to avoid reading uninitialized locations. */\n\nif (match_block.offset_vector != NULL)\n  {\n  register int *iptr = match_block.offset_vector + ocount;\n  register int *iend = iptr - resetcount/2 + 1;\n  while (--iptr >= iend) *iptr = -1;\n  }\n\n/* Set up the first character to match, if available. The first_char value is\nnever set for an anchored regular expression, but the anchoring may be forced\nat run time, so we have to test for anchoring. The first char may be unset for\nan unanchored pattern, of course. If there's no first char and the pattern was\nstudied, there may be a bitmap of possible first characters. */\n\nif (!anchored)\n  {\n  if ((re->options & PCRE_FIRSTSET) != 0)\n    {\n    first_char = re->first_char;\n    if ((ims & PCRE_CASELESS) != 0) first_char = match_block.lcc[first_char];\n    }\n  else\n    if (!startline && extra != NULL &&\n      (extra->options & PCRE_STUDY_MAPPED) != 0)\n        start_bits = extra->start_bits;\n  }\n\n/* For anchored or unanchored matches, there may be a \"last known required\ncharacter\" set. If the PCRE_CASELESS is set, implying that the match starts\ncaselessly, or if there are any changes of this flag within the regex, set up\nboth cases of the character. Otherwise set the two values the same, which will\navoid duplicate testing (which takes significant time). This covers the vast\nmajority of cases. It will be suboptimal when the case flag changes in a regex\nand the required character in fact is caseful. */\n\nif ((re->options & PCRE_REQCHSET) != 0)\n  {\n  req_char = re->req_char;\n  req_char2 = ((re->options & (PCRE_CASELESS | PCRE_ICHANGED)) != 0)?\n    (re->tables + fcc_offset)[req_char] : req_char;\n  }\n\n/* Loop for handling unanchored repeated matching attempts; for anchored regexs\nthe loop runs just once. */\n\ndo\n  {\n  int rc;\n  register int *iptr = match_block.offset_vector;\n  register int *iend = iptr + resetcount;\n\n  /* Reset the maximum number of extractions we might see. */\n\n  while (iptr < iend) *iptr++ = -1;\n\n  /* Advance to a unique first char if possible */\n\n  if (first_char >= 0)\n    {\n    if ((ims & PCRE_CASELESS) != 0)\n      while (start_match < end_subject &&\n             match_block.lcc[*start_match] != first_char)\n        start_match++;\n    else\n      while (start_match < end_subject && *start_match != first_char)\n        start_match++;\n    }\n\n  /* Or to just after \\n for a multiline match if possible */\n\n  else if (startline)\n    {\n    if (start_match > match_block.start_subject + start_offset)\n      {\n      while (start_match < end_subject && start_match[-1] != '\\n')\n        start_match++;\n      }\n    }\n\n  /* Or to a non-unique first char after study */\n\n  else if (start_bits != NULL)\n    {\n    while (start_match < end_subject)\n      {\n      register int c = *start_match;\n      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;\n      }\n    }\n\n#ifdef DEBUG_PCRE  /* Sigh. Some compilers never learn. */\n  printf(\">>>> Match against: \");\n  pchars(start_match, end_subject - start_match, TRUE, &match_block);\n  printf(\"\\n\");\n#endif\n\n  /* If req_char is set, we know that that character must appear in the subject\n  for the match to succeed. If the first character is set, req_char must be\n  later in the subject; otherwise the test starts at the match point. This\n  optimization can save a huge amount of backtracking in patterns with nested\n  unlimited repeats that aren't going to match. We don't know what the state of\n  case matching may be when this character is hit, so test for it in both its\n  cases if necessary. However, the different cased versions will not be set up\n  unless PCRE_CASELESS was given or the casing state changes within the regex.\n  Writing separate code makes it go faster, as does using an autoincrement and\n  backing off on a match. */\n\n  if (req_char >= 0)\n    {\n    register const uschar *p = start_match + ((first_char >= 0)? 1 : 0);\n\n    /* We don't need to repeat the search if we haven't yet reached the\n    place we found it at last time. */\n\n    if (p > req_char_ptr)\n      {\n      /* Do a single test if no case difference is set up */\n\n      if (req_char == req_char2)\n        {\n        while (p < end_subject)\n          {\n          if (*p++ == req_char) { p--; break; }\n          }\n        }\n\n      /* Otherwise test for either case */\n\n      else\n        {\n        while (p < end_subject)\n          {\n          register int pp = *p++;\n          if (pp == req_char || pp == req_char2) { p--; break; }\n          }\n        }\n\n      /* If we can't find the required character, break the matching loop */\n\n      if (p >= end_subject) break;\n\n      /* If we have found the required character, save the point where we\n      found it, so that we don't search again next time round the loop if\n      the start hasn't passed this character yet. */\n\n      req_char_ptr = p;\n      }\n    }\n\n  /* When a match occurs, substrings will be set for all internal extractions;\n  we just need to set up the whole thing as substring 0 before returning. If\n  there were too many extractions, set the return code to zero. In the case\n  where we had to get some local store to hold offsets for backreferences, copy\n  those back references that we can. In this case there need not be overflow\n  if certain parts of the pattern were not used. */\n\n  match_block.start_match = start_match;\n  if (!match(start_match, re->code, 2, &match_block, ims, NULL, match_isgroup))\n    continue;\n\n  /* Copy the offset information from temporary store if necessary */\n\n  if (using_temporary_offsets)\n    {\n    if (offsetcount >= 4)\n      {\n      memcpy(offsets + 2, match_block.offset_vector + 2,\n        (offsetcount - 2) * sizeof(int));\n      DPRINTF((\"Copied offsets from temporary memory\\n\"));\n      }\n    if (match_block.end_offset_top > offsetcount)\n      match_block.offset_overflow = TRUE;\n\n    DPRINTF((\"Freeing temporary memory\\n\"));\n    (pcre_free)(match_block.offset_vector);\n    }\n\n  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;\n\n  if (match_block.offset_end < 2) rc = 0; else\n    {\n    offsets[0] = start_match - match_block.start_subject;\n    offsets[1] = match_block.end_match_ptr - match_block.start_subject;\n    }\n\n  DPRINTF((\">>>> returning %d\\n\", rc));\n  return rc;\n  }\n\n/* This \"while\" is the end of the \"do\" above */\n\nwhile (!anchored &&\n       match_block.errorcode == PCRE_ERROR_NOMATCH &&\n       start_match++ < end_subject);\n\nif (using_temporary_offsets)\n  {\n  DPRINTF((\"Freeing temporary memory\\n\"));\n  (pcre_free)(match_block.offset_vector);\n  }\n\nDPRINTF((\">>>> returning %d\\n\", match_block.errorcode));\n\nreturn match_block.errorcode;\n}\n\n/* End of pcre.c */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/pcre.h",
    "content": "/*************************************************\n*       Perl-Compatible Regular Expressions      *\n*************************************************/\n\n/* Copyright (c) 1997-2000 University of Cambridge */\n\n#ifndef _PCRE_H\n#define _PCRE_H\n\n/* The file pcre.h is build by \"configure\". Do not edit it; instead\nmake changes to pcre.in. */\n\n#define PCRE_MAJOR 3\n#define PCRE_MINOR 4\n#define PCRE_DATE  22-Aug-2000\n\n/* Win32 uses DLL by default */\n\n#ifdef _WIN32\n# ifdef STATIC_PCRE\n#  define PCRE_DL_IMPORT\n# else\n#  define PCRE_DL_IMPORT __declspec(dllimport)\n# endif\n#else\n# define PCRE_DL_IMPORT\n#endif\n\n/* Have to include stdlib.h in order to ensure that size_t is defined;\nit is needed here for malloc. */\n\n#include <stdlib.h>\n\n/* Allow for C++ users */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Options */\n\n#define PCRE_CASELESS        0x0001\n#define PCRE_MULTILINE       0x0002\n#define PCRE_DOTALL          0x0004\n#define PCRE_EXTENDED        0x0008\n#define PCRE_ANCHORED        0x0010\n#define PCRE_DOLLAR_ENDONLY  0x0020\n#define PCRE_EXTRA           0x0040\n#define PCRE_NOTBOL          0x0080\n#define PCRE_NOTEOL          0x0100\n#define PCRE_UNGREEDY        0x0200\n#define PCRE_NOTEMPTY        0x0400\n#define PCRE_UTF8            0x0800\n\n/* Exec-time and get-time error codes */\n\n#define PCRE_ERROR_NOMATCH        (-1)\n#define PCRE_ERROR_NULL           (-2)\n#define PCRE_ERROR_BADOPTION      (-3)\n#define PCRE_ERROR_BADMAGIC       (-4)\n#define PCRE_ERROR_UNKNOWN_NODE   (-5)\n#define PCRE_ERROR_NOMEMORY       (-6)\n#define PCRE_ERROR_NOSUBSTRING    (-7)\n\n/* Request types for pcre_fullinfo() */\n\n#define PCRE_INFO_OPTIONS         0\n#define PCRE_INFO_SIZE            1\n#define PCRE_INFO_CAPTURECOUNT    2\n#define PCRE_INFO_BACKREFMAX      3\n#define PCRE_INFO_FIRSTCHAR       4\n#define PCRE_INFO_FIRSTTABLE      5\n#define PCRE_INFO_LASTLITERAL     6\n\n/* Types */\n\ntypedef void pcre;\ntypedef void pcre_extra;\n\n/* Store get and free functions. These can be set to alternative malloc/free\nfunctions if required. Some magic is required for Win32 DLL; it is null on\nother OS. */\n\nPCRE_DL_IMPORT extern void *(*pcre_malloc)(size_t);\nPCRE_DL_IMPORT extern void  (*pcre_free)(void *);\n\n#undef PCRE_DL_IMPORT\n\n/* Functions */\n\nextern pcre *pcre_compile(const char *, int, const char **, int *,\n              const unsigned char *);\nextern int  pcre_copy_substring(const char *, int *, int, int, char *, int);\nextern int  pcre_exec(const pcre *, const pcre_extra *, const char *,\n              int, int, int, int *, int);\nextern void pcre_free_substring(const char *);\nextern void pcre_free_substring_list(const char **);\nextern int  pcre_get_substring(const char *, int *, int, int, const char **);\nextern int  pcre_get_substring_list(const char *, int *, int, const char ***);\nextern int  pcre_info(const pcre *, int *, int *);\nextern int  pcre_fullinfo(const pcre *, const pcre_extra *, int, void *);\nextern unsigned const char *pcre_maketables(void);\nextern pcre_extra *pcre_study(const pcre *, int, const char **);\nextern const char *pcre_version(void);\n\n#ifdef __cplusplus\n}  /* extern \"C\" */\n#endif\n\n#endif /* End of pcre.h */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/pcreposix.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/*\nThis is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. See\nthe file Tech.Notes for some information on the internals.\n\nThis module is a wrapper that provides a POSIX API to the underlying PCRE\nfunctions.\n\nWritten by: Philip Hazel <ph10@cam.ac.uk>\n\n           Copyright (c) 1997-2000 University of Cambridge\n\n-----------------------------------------------------------------------------\nPermission is granted to anyone to use this software for any purpose on any\ncomputer system, and to redistribute it freely, subject to the following\nrestrictions:\n\n1. This software 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.\n\n2. The origin of this software must not be misrepresented, either by\n   explicit claim or by omission.\n\n3. Altered versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n4. If PCRE is embedded in any software that is released under the GNU\n   General Purpose Licence (GPL), then the terms of that licence shall\n   supersede any condition above with which it is incompatible.\n-----------------------------------------------------------------------------\n*/\n\n#include \"internal.h\"\n#include \"pcreposix.h\"\n#include \"stdlib.h\"\n\n\n\n/* Corresponding tables of PCRE error messages and POSIX error codes. */\n\nstatic const char *estring[] = {\n  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,  ERR10,\n  ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,\n  ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,\n  ERR31 };\n\nstatic int eint[] = {\n  REG_EESCAPE, /* \"\\\\ at end of pattern\" */\n  REG_EESCAPE, /* \"\\\\c at end of pattern\" */\n  REG_EESCAPE, /* \"unrecognized character follows \\\\\" */\n  REG_BADBR,   /* \"numbers out of order in {} quantifier\" */\n  REG_BADBR,   /* \"number too big in {} quantifier\" */\n  REG_EBRACK,  /* \"missing terminating ] for character class\" */\n  REG_ECTYPE,  /* \"invalid escape sequence in character class\" */\n  REG_ERANGE,  /* \"range out of order in character class\" */\n  REG_BADRPT,  /* \"nothing to repeat\" */\n  REG_BADRPT,  /* \"operand of unlimited repeat could match the empty string\" */\n  REG_ASSERT,  /* \"internal error: unexpected repeat\" */\n  REG_BADPAT,  /* \"unrecognized character after (?\" */\n  REG_ESIZE,   /* \"too many capturing parenthesized sub-patterns\" */\n  REG_EPAREN,  /* \"missing )\" */\n  REG_ESUBREG, /* \"back reference to non-existent subpattern\" */\n  REG_INVARG,  /* \"erroffset passed as NULL\" */\n  REG_INVARG,  /* \"unknown option bit(s) set\" */\n  REG_EPAREN,  /* \"missing ) after comment\" */\n  REG_ESIZE,   /* \"too many sets of parentheses\" */\n  REG_ESIZE,   /* \"regular expression too large\" */\n  REG_ESPACE,  /* \"failed to get memory\" */\n  REG_EPAREN,  /* \"unmatched brackets\" */\n  REG_ASSERT,  /* \"internal error: code overflow\" */\n  REG_BADPAT,  /* \"unrecognized character after (?<\" */\n  REG_BADPAT,  /* \"lookbehind assertion is not fixed length\" */\n  REG_BADPAT,  /* \"malformed number after (?(\" */\n  REG_BADPAT,  /* \"conditional group containe more than two branches\" */\n  REG_BADPAT,  /* \"assertion expected after (?(\" */\n  REG_BADPAT,  /* \"(?p must be followed by )\" */\n  REG_ECTYPE,  /* \"unknown POSIX class name\" */\n  REG_BADPAT,  /* \"POSIX collating elements are not supported\" */\n  REG_INVARG,  /* \"this version of PCRE is not compiled with PCRE_UTF8 support\" */\n  REG_BADPAT,  /* \"characters with values > 255 are not yet supported in classes\" */\n  REG_BADPAT,  /* \"character value in \\x{...} sequence is too large\" */\n  REG_BADPAT   /* \"invalid condition (?(0)\" */\n};\n\n/* Table of texts corresponding to POSIX error codes */\n\nstatic const char *pstring[] = {\n  \"\",                                /* Dummy for value 0 */\n  \"internal error\",                  /* REG_ASSERT */\n  \"invalid repeat counts in {}\",     /* BADBR      */\n  \"pattern error\",                   /* BADPAT     */\n  \"? * + invalid\",                   /* BADRPT     */\n  \"unbalanced {}\",                   /* EBRACE     */\n  \"unbalanced []\",                   /* EBRACK     */\n  \"collation error - not relevant\",  /* ECOLLATE   */\n  \"bad class\",                       /* ECTYPE     */\n  \"bad escape sequence\",             /* EESCAPE    */\n  \"empty expression\",                /* EMPTY      */\n  \"unbalanced ()\",                   /* EPAREN     */\n  \"bad range inside []\",             /* ERANGE     */\n  \"expression too big\",              /* ESIZE      */\n  \"failed to get memory\",            /* ESPACE     */\n  \"bad back reference\",              /* ESUBREG    */\n  \"bad argument\",                    /* INVARG     */\n  \"match failed\"                     /* NOMATCH    */\n};\n\n\n\n\n/*************************************************\n*          Translate PCRE text code to int       *\n*************************************************/\n\n/* PCRE compile-time errors are given as strings defined as macros. We can just\nlook them up in a table to turn them into POSIX-style error codes. */\n\nstatic int\npcre_posix_error_code(const char *s)\n{\nsize_t i;\nfor (i = 0; i < sizeof(estring)/sizeof(char *); i++)\n  if (strcmp(s, estring[i]) == 0) return eint[i];\nreturn REG_ASSERT;\n}\n\n\n\n/*************************************************\n*          Translate error code to string        *\n*************************************************/\n\nsize_t\npcre_regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size)\n{\nconst char *message, *addmessage;\nsize_t length, addlength;\n\nmessage = (errcode >= (int)(sizeof(pstring)/sizeof(char *)))?\n  \"unknown error code\" : pstring[errcode];\nlength = strlen(message) + 1;\n\naddmessage = \" at offset \";\naddlength = (preg != NULL && (int)preg->re_erroffset != -1)?\n  strlen(addmessage) + 6 : 0;\n\nif (errbuf_size > 0)\n  {\n  if (addlength > 0 && errbuf_size >= length + addlength)\n    sprintf(errbuf, \"%s%s%-6d\", message, addmessage, (int)preg->re_erroffset);\n  else\n    {\n    strncpy(errbuf, message, errbuf_size - 1);\n    errbuf[errbuf_size-1] = 0;\n    }\n  }\n\nreturn length + addlength;\n}\n\n\n\n\n/*************************************************\n*           Free store held by a regex           *\n*************************************************/\n\nvoid\npcre_regfree(regex_t *preg)\n{\n(pcre_free)(preg->re_pcre);\n}\n\n\n\n\n/*************************************************\n*            Compile a regular expression        *\n*************************************************/\n\n/*\nArguments:\n  preg        points to a structure for recording the compiled expression\n  pattern     the pattern to compile\n  cflags      compilation flags\n\nReturns:      0 on success\n              various non-zero codes on failure\n*/\n\nint\npcre_regcomp(regex_t *preg, const char *pattern, int cflags)\n{\nconst char *errorptr;\nint erroffset;\nint options = 0;\n\nif ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;\nif ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;\n\npreg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);\npreg->re_erroffset = erroffset;\n\nif (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);\n\npreg->re_nsub = pcre_info(preg->re_pcre, NULL, NULL);\nreturn 0;\n}\n\n\n\n\n/*************************************************\n*              Match a regular expression        *\n*************************************************/\n\n/* Unfortunately, PCRE requires 3 ints of working space for each captured\nsubstring, so we have to get and release working store instead of just using\nthe POSIX structures as was done in earlier releases when PCRE needed only 2\nints. */\n\nint\npcre_regexec(regex_t *preg, const char *string, size_t nmatch,\n  regmatch_t pmatch[], int eflags)\n{\nint rc;\nint options = 0;\nint *ovector = NULL;\n\nif ((eflags & REG_NOTBOL) != 0) options |= PCRE_NOTBOL;\nif ((eflags & REG_NOTEOL) != 0) options |= PCRE_NOTEOL;\n\npreg->re_erroffset = (size_t)(-1);   /* Only has meaning after compile */\n\nif (nmatch > 0)\n  {\n  ovector = (int *)malloc(sizeof(int) * nmatch * 3);\n  if (ovector == NULL) return REG_ESPACE;\n  }\n\nrc = pcre_exec(preg->re_pcre, NULL, string, (int)strlen(string), 0, options,\n  ovector, nmatch * 3);\n\nif (rc == 0) rc = nmatch;    /* All captured slots were filled in */\n\nif (rc >= 0)\n  {\n  size_t i;\n  for (i = 0; i < (size_t)rc; i++)\n    {\n    pmatch[i].rm_so = ovector[i*2];\n    pmatch[i].rm_eo = ovector[i*2+1];\n    }\n  if (ovector != NULL) free(ovector);\n  for (; i < nmatch; i++) pmatch[i].rm_so = pmatch[i].rm_eo = -1;\n  return 0;\n  }\n\nelse\n  {\n  if (ovector != NULL) free(ovector);\n  switch(rc)\n    {\n    case PCRE_ERROR_NOMATCH: return REG_NOMATCH;\n    case PCRE_ERROR_NULL: return REG_INVARG;\n    case PCRE_ERROR_BADOPTION: return REG_INVARG;\n    case PCRE_ERROR_BADMAGIC: return REG_INVARG;\n    case PCRE_ERROR_UNKNOWN_NODE: return REG_ASSERT;\n    case PCRE_ERROR_NOMEMORY: return REG_ESPACE;\n    default: return REG_ASSERT;\n    }\n  }\n}\n\n/* End of pcreposix.c */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/pcreposix.h",
    "content": "/*************************************************\n*       Perl-Compatible Regular Expressions      *\n*************************************************/\n\n/* Copyright (c) 1997-2000 University of Cambridge */\n\n#ifndef _PCREPOSIX_H\n#define _PCREPOSIX_H\n\n/* This is the header for the POSIX wrapper interface to the PCRE Perl-\nCompatible Regular Expression library. It defines the things POSIX says should\nbe there. I hope. */\n\n/* Have to include stdlib.h in order to ensure that size_t is defined. */\n\n#include <stdlib.h>\n\n/* Allow for C++ users */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Options defined by POSIX. */\n\n#define REG_ICASE     0x01\n#define REG_NEWLINE   0x02\n#define REG_NOTBOL    0x04\n#define REG_NOTEOL    0x08\n\n/* These are not used by PCRE, but by defining them we make it easier\nto slot PCRE into existing programs that make POSIX calls. */\n\n#define REG_EXTENDED  0\n#define REG_NOSUB     0\n\n/* Error values. Not all these are relevant or used by the wrapper. */\n\nenum {\n  REG_ASSERT = 1,  /* internal error ? */\n  REG_BADBR,       /* invalid repeat counts in {} */\n  REG_BADPAT,      /* pattern error */\n  REG_BADRPT,      /* ? * + invalid */\n  REG_EBRACE,      /* unbalanced {} */\n  REG_EBRACK,      /* unbalanced [] */\n  REG_ECOLLATE,    /* collation error - not relevant */\n  REG_ECTYPE,      /* bad class */\n  REG_EESCAPE,     /* bad escape sequence */\n  REG_EMPTY,       /* empty expression */\n  REG_EPAREN,      /* unbalanced () */\n  REG_ERANGE,      /* bad range inside [] */\n  REG_ESIZE,       /* expression too big */\n  REG_ESPACE,      /* failed to get memory */\n  REG_ESUBREG,     /* bad back reference */\n  REG_INVARG,      /* bad argument */\n  REG_NOMATCH      /* match failed */\n};\n\n\n/* The structure representing a compiled regular expression. */\n#undef regex_t\n\ntypedef struct {\n  void *re_pcre;\n  size_t re_nsub;\n  size_t re_erroffset;\n} regex_t;\n\n/* The structure in which a captured offset is returned. */\n\ntypedef int regoff_t;\n\ntypedef struct {\n  regoff_t rm_so;\n  regoff_t rm_eo;\n} regmatch_t;\n\n/* The functions */\n\nextern int pcre_regcomp(regex_t *, const char *, int);\nextern int pcre_regexec(regex_t *, const char *, size_t, regmatch_t *, int);\nextern size_t pcre_regerror(int, const regex_t *, char *, size_t);\nextern void pcre_regfree(regex_t *);\n\n#ifdef __cplusplus\n}   /* extern \"C\" */\n#endif\n\n#endif /* End of pcreposix.h */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcre/study.c",
    "content": "/*************************************************\n*      Perl-Compatible Regular Expressions       *\n*************************************************/\n\n/*\nThis is a library of functions to support regular expressions whose syntax\nand semantics are as close as possible to those of the Perl 5 language. See\nthe file Tech.Notes for some information on the internals.\n\nWritten by: Philip Hazel <ph10@cam.ac.uk>\n\n           Copyright (c) 1997-2000 University of Cambridge\n\n-----------------------------------------------------------------------------\nPermission is granted to anyone to use this software for any purpose on any\ncomputer system, and to redistribute it freely, subject to the following\nrestrictions:\n\n1. This software 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.\n\n2. The origin of this software must not be misrepresented, either by\n   explicit claim or by omission.\n\n3. Altered versions must be plainly marked as such, and must not be\n   misrepresented as being the original software.\n\n4. If PCRE is embedded in any software that is released under the GNU\n   General Purpose Licence (GPL), then the terms of that licence shall\n   supersede any condition above with which it is incompatible.\n-----------------------------------------------------------------------------\n*/\n\n\n/* Include the internals header, which itself includes Standard C headers plus\nthe external pcre header. */\n\n#include \"internal.h\"\n\n\n\n/*************************************************\n*      Set a bit and maybe its alternate case    *\n*************************************************/\n\n/* Given a character, set its bit in the table, and also the bit for the other\nversion of a letter if we are caseless.\n\nArguments:\n  start_bits    points to the bit map\n  c             is the character\n  caseless      the caseless flag\n  cd            the block with char table pointers\n\nReturns:        nothing\n*/\n\nstatic void\nset_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)\n{\nstart_bits[c/8] |= (1 << (c&7));\nif (caseless && (cd->ctypes[c] & ctype_letter) != 0)\n  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));\n}\n\n\n\n/*************************************************\n*          Create bitmap of starting chars       *\n*************************************************/\n\n/* This function scans a compiled unanchored expression and attempts to build a\nbitmap of the set of initial characters. If it can't, it returns FALSE. As time\ngoes by, we may be able to get more clever at doing this.\n\nArguments:\n  code         points to an expression\n  start_bits   points to a 32-byte table, initialized to 0\n  caseless     the current state of the caseless flag\n  cd           the block with char table pointers\n\nReturns:       TRUE if table built, FALSE otherwise\n*/\n\nstatic BOOL\nset_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,\n  compile_data *cd)\n{\nregister int c;\n\n/* This next statement and the later reference to dummy are here in order to\ntrick the optimizer of the IBM C compiler for OS/2 into generating correct\ncode. Apparently IBM isn't going to fix the problem, and we would rather not\ndisable optimization (in this module it actually makes a big difference, and\nthe pcre module can use all the optimization it can get). */\n\nvolatile int dummy;\n\ndo\n  {\n  const uschar *tcode = code + 3;\n  BOOL try_next = TRUE;\n\n  while (try_next)\n    {\n    try_next = FALSE;\n\n    /* If a branch starts with a bracket or a positive lookahead assertion,\n    recurse to set bits from within them. That's all for this branch. */\n\n    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)\n      {\n      if (!set_start_bits(tcode, start_bits, caseless, cd))\n        return FALSE;\n      }\n\n    else switch(*tcode)\n      {\n      default:\n      return FALSE;\n\n      /* Skip over lookbehind and negative lookahead assertions */\n\n      case OP_ASSERT_NOT:\n      case OP_ASSERTBACK:\n      case OP_ASSERTBACK_NOT:\n      try_next = TRUE;\n      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);\n      tcode += 3;\n      break;\n\n      /* Skip over an option setting, changing the caseless flag */\n\n      case OP_OPT:\n      caseless = (tcode[1] & PCRE_CASELESS) != 0;\n      tcode += 2;\n      try_next = TRUE;\n      break;\n\n      /* BRAZERO does the bracket, but carries on. */\n\n      case OP_BRAZERO:\n      case OP_BRAMINZERO:\n      if (!set_start_bits(++tcode, start_bits, caseless, cd))\n        return FALSE;\n      dummy = 1;\n      do tcode += (tcode[1] << 8) + tcode[2]; while (*tcode == OP_ALT);\n      tcode += 3;\n      try_next = TRUE;\n      break;\n\n      /* Single-char * or ? sets the bit and tries the next item */\n\n      case OP_STAR:\n      case OP_MINSTAR:\n      case OP_QUERY:\n      case OP_MINQUERY:\n      set_bit(start_bits, tcode[1], caseless, cd);\n      tcode += 2;\n      try_next = TRUE;\n      break;\n\n      /* Single-char upto sets the bit and tries the next */\n\n      case OP_UPTO:\n      case OP_MINUPTO:\n      set_bit(start_bits, tcode[3], caseless, cd);\n      tcode += 4;\n      try_next = TRUE;\n      break;\n\n      /* At least one single char sets the bit and stops */\n\n      case OP_EXACT:       /* Fall through */\n      tcode++;\n\n      case OP_CHARS:       /* Fall through */\n      tcode++;\n\n      case OP_PLUS:\n      case OP_MINPLUS:\n      set_bit(start_bits, tcode[1], caseless, cd);\n      break;\n\n      /* Single character type sets the bits and stops */\n\n      case OP_NOT_DIGIT:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= ~cd->cbits[c+cbit_digit];\n      break;\n\n      case OP_DIGIT:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= cd->cbits[c+cbit_digit];\n      break;\n\n      case OP_NOT_WHITESPACE:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= ~cd->cbits[c+cbit_space];\n      break;\n\n      case OP_WHITESPACE:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= cd->cbits[c+cbit_space];\n      break;\n\n      case OP_NOT_WORDCHAR:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= ~cd->cbits[c+cbit_word];\n      break;\n\n      case OP_WORDCHAR:\n      for (c = 0; c < 32; c++)\n        start_bits[c] |= cd->cbits[c+cbit_word];\n      break;\n\n      /* One or more character type fudges the pointer and restarts, knowing\n      it will hit a single character type and stop there. */\n\n      case OP_TYPEPLUS:\n      case OP_TYPEMINPLUS:\n      tcode++;\n      try_next = TRUE;\n      break;\n\n      case OP_TYPEEXACT:\n      tcode += 3;\n      try_next = TRUE;\n      break;\n\n      /* Zero or more repeats of character types set the bits and then\n      try again. */\n\n      case OP_TYPEUPTO:\n      case OP_TYPEMINUPTO:\n      tcode += 2;               /* Fall through */\n\n      case OP_TYPESTAR:\n      case OP_TYPEMINSTAR:\n      case OP_TYPEQUERY:\n      case OP_TYPEMINQUERY:\n      switch(tcode[1])\n        {\n        case OP_NOT_DIGIT:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= ~cd->cbits[c+cbit_digit];\n        break;\n\n        case OP_DIGIT:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= cd->cbits[c+cbit_digit];\n        break;\n\n        case OP_NOT_WHITESPACE:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= ~cd->cbits[c+cbit_space];\n        break;\n\n        case OP_WHITESPACE:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= cd->cbits[c+cbit_space];\n        break;\n\n        case OP_NOT_WORDCHAR:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= ~cd->cbits[c+cbit_word];\n        break;\n\n        case OP_WORDCHAR:\n        for (c = 0; c < 32; c++)\n          start_bits[c] |= cd->cbits[c+cbit_word];\n        break;\n        }\n\n      tcode += 2;\n      try_next = TRUE;\n      break;\n\n      /* Character class: set the bits and either carry on or not,\n      according to the repeat count. */\n\n      case OP_CLASS:\n        {\n        tcode++;\n        for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];\n        tcode += 32;\n        switch (*tcode)\n          {\n          case OP_CRSTAR:\n          case OP_CRMINSTAR:\n          case OP_CRQUERY:\n          case OP_CRMINQUERY:\n          tcode++;\n          try_next = TRUE;\n          break;\n\n          case OP_CRRANGE:\n          case OP_CRMINRANGE:\n          if (((tcode[1] << 8) + tcode[2]) == 0)\n            {\n            tcode += 5;\n            try_next = TRUE;\n            }\n          break;\n          }\n        }\n      break; /* End of class handling */\n\n      }      /* End of switch */\n    }        /* End of try_next loop */\n\n  code += (code[1] << 8) + code[2];   /* Advance to next branch */\n  }\nwhile (*code == OP_ALT);\nreturn TRUE;\n}\n\n\n\n/*************************************************\n*          Study a compiled expression           *\n*************************************************/\n\n/* This function is handed a compiled expression that it must study to produce\ninformation that will speed up the matching. It returns a pcre_extra block\nwhich then gets handed back to pcre_exec().\n\nArguments:\n  re        points to the compiled expression\n  options   contains option bits\n  errorptr  points to where to place error messages;\n            set NULL unless error\n\nReturns:    pointer to a pcre_extra block,\n            NULL on error or if no optimization possible\n*/\n\npcre_extra *\npcre_study(const pcre *external_re, int options, const char **errorptr)\n{\nuschar start_bits[32];\nreal_pcre_extra *extra;\nconst real_pcre *re = (const real_pcre *)external_re;\ncompile_data compile_block;\n\n*errorptr = NULL;\n\nif (re == NULL || re->magic_number != MAGIC_NUMBER)\n  {\n  *errorptr = \"argument is not a compiled regular expression\";\n  return NULL;\n  }\n\nif ((options & ~PUBLIC_STUDY_OPTIONS) != 0)\n  {\n  *errorptr = \"unknown or incorrect option bit(s) set\";\n  return NULL;\n  }\n\n/* For an anchored pattern, or an unchored pattern that has a first char, or a\nmultiline pattern that matches only at \"line starts\", no further processing at\npresent. */\n\nif ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)\n  return NULL;\n\n/* Set the character tables in the block which is passed around */\n\ncompile_block.lcc = re->tables + lcc_offset;\ncompile_block.fcc = re->tables + fcc_offset;\ncompile_block.cbits = re->tables + cbits_offset;\ncompile_block.ctypes = re->tables + ctypes_offset;\n\n/* See if we can find a fixed set of initial characters for the pattern. */\n\nmemset(start_bits, 0, 32 * sizeof(uschar));\nif (!set_start_bits(re->code, start_bits, (re->options & PCRE_CASELESS) != 0,\n  &compile_block)) return NULL;\n\n/* Get an \"extra\" block and put the information therein. */\n\nextra = (real_pcre_extra *)(pcre_malloc)(sizeof(real_pcre_extra));\n\nif (extra == NULL)\n  {\n  *errorptr = \"failed to get memory\";\n  return NULL;\n  }\n\nextra->options = PCRE_STUDY_MAPPED;\nmemcpy(extra->start_bits, start_bits, sizeof(start_bits));\n\nreturn (pcre_extra *)extra;\n}\n\n/* End of study.c */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcrs.c",
    "content": "const char pcrs_rcs[] = \"$Id: pcrs.c,v 1.48 2015/12/27 12:45:46 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/pcrs.c,v $\n *\n * Purpose     :  pcrs is a supplement to the pcre library by Philip Hazel\n *                <ph10@cam.ac.uk> and adds Perl-style substitution. That\n *                is, it mimics Perl's 's' operator. See pcrs(3) for details.\n *\n *                WARNING: This file contains additional functions and bug\n *                fixes that aren't part of the latest official pcrs package\n *                (which apparently is no longer maintained).\n *\n * Copyright   :  Written and Copyright (C) 2000, 2001 by Andreas S. Oesterhelt\n *                <andreas@oesterhelt.org>\n *\n *                Copyright (C) 2006, 2007 Fabian Keil <fk@fabiankeil.de>\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU Lesser\n *                General Public License (LGPL), version 2.1, which  should\n *                be included in this distribution (see LICENSE.txt), with\n *                the exception that the permission to replace that license\n *                with the GNU General Public License (GPL) given in section\n *                3 is restricted to version 2 of the GPL.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the license for more details.\n *\n *                The GNU Lesser General Public License should be included\n *                with this file.  If not, you can view it at\n *                http://www.gnu.org/licenses/lgpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include <string.h>\n#include <ctype.h>\n#include <assert.h>\n\n/*\n * Include project.h just so that the right pcre.h gets\n * included from there\n */\n#include \"project.h\"\n\n/* For snprintf only */\n#include \"miscutil.h\"\n/* For xtoi */\n#include \"encode.h\"\n\n#include \"pcrs.h\"\n\nconst char pcrs_h_rcs[] = PCRS_H_VERSION;\n\n/*\n * Internal prototypes\n */\n\nstatic int              pcrs_parse_perl_options(const char *optstring, int *flags);\nstatic pcrs_substitute *pcrs_compile_replacement(const char *replacement, int trivialflag,\n                        int capturecount, int *errptr);\nstatic int              is_hex_sequence(const char *sequence);\n\n/*********************************************************************\n *\n * Function    :  pcrs_strerror\n *\n * Description :  Return a string describing a given error code.\n *\n * Parameters  :\n *          1  :  error = the error code\n *\n * Returns     :  char * to the descriptive string\n *\n *********************************************************************/\nconst char *pcrs_strerror(const int error)\n{\n   static char buf[100];\n\n   if (error != 0)\n   {\n      switch (error)\n      {\n         /* Passed-through PCRE error: */\n         case PCRE_ERROR_NOMEMORY:     return \"(pcre:) No memory\";\n\n         /* Shouldn't happen unless PCRE or PCRS bug, or user messed with compiled job: */\n         case PCRE_ERROR_NULL:         return \"(pcre:) NULL code or subject or ovector\";\n         case PCRE_ERROR_BADOPTION:    return \"(pcre:) Unrecognized option bit\";\n         case PCRE_ERROR_BADMAGIC:     return \"(pcre:) Bad magic number in code\";\n         case PCRE_ERROR_UNKNOWN_NODE: return \"(pcre:) Bad node in pattern\";\n\n         /* Can't happen / not passed: */\n         case PCRE_ERROR_NOSUBSTRING:  return \"(pcre:) Fire in power supply\";\n         case PCRE_ERROR_NOMATCH:      return \"(pcre:) Water in power supply\";\n\n#ifdef PCRE_ERROR_MATCHLIMIT\n         /*\n          * Only reported by PCRE versions newer than our own.\n          */\n         case PCRE_ERROR_MATCHLIMIT:   return \"(pcre:) Match limit reached\";\n#endif /* def PCRE_ERROR_MATCHLIMIT */\n\n         /* PCRS errors: */\n         case PCRS_ERR_NOMEM:          return \"(pcrs:) No memory\";\n         case PCRS_ERR_CMDSYNTAX:      return \"(pcrs:) Syntax error while parsing command\";\n         case PCRS_ERR_STUDY:          return \"(pcrs:) PCRE error while studying the pattern\";\n         case PCRS_ERR_BADJOB:         return \"(pcrs:) Bad job - NULL job, pattern or substitute\";\n         case PCRS_WARN_BADREF:        return \"(pcrs:) Backreference out of range\";\n         case PCRS_WARN_TRUNCATION:\n            return \"(pcrs:) At least one variable was too big and has been truncated before compilation\";\n\n         /*\n          * XXX: With the exception of PCRE_ERROR_MATCHLIMIT we\n          * only catch PCRE errors that can happen with our internal\n          * version. If Privoxy is linked against a newer\n          * PCRE version all bets are off ...\n          */\n         default:\n            snprintf(buf, sizeof(buf),\n               \"Error code %d. For details, check the pcre documentation.\",\n               error);\n            return buf;\n      }\n   }\n   /* error >= 0: No error */\n   return \"(pcrs:) Everything's just fine. Thanks for asking.\";\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_parse_perl_options\n *\n * Description :  This function parses a string containing the options to\n *                Perl's s/// operator. It returns an integer that is the\n *                pcre equivalent of the symbolic optstring.\n *                Since pcre doesn't know about Perl's 'g' (global) or pcrs',\n *                'T' (trivial) options but pcrs needs them, the corresponding\n *                flags are set if 'g'or 'T' is encountered.\n *                Note: The 'T' and 'U' options do not conform to Perl.\n *\n * Parameters  :\n *          1  :  optstring = string with options in perl syntax\n *          2  :  flags = see description\n *\n * Returns     :  option integer suitable for pcre\n *\n *********************************************************************/\nstatic int pcrs_parse_perl_options(const char *optstring, int *flags)\n{\n   size_t i;\n   int rc = 0;\n   *flags = 0;\n\n   if (NULL == optstring) return 0;\n\n   for (i = 0; i < strlen(optstring); i++)\n   {\n      switch(optstring[i])\n      {\n         case 'e': break; /* ToDo ;-) */\n         case 'g': *flags |= PCRS_GLOBAL; break;\n         case 'i': rc |= PCRE_CASELESS; break;\n         case 'm': rc |= PCRE_MULTILINE; break;\n         case 'o': break;\n         case 's': rc |= PCRE_DOTALL; break;\n         case 'x': rc |= PCRE_EXTENDED; break;\n         case 'U': rc |= PCRE_UNGREEDY; break;\n         case 'T': *flags |= PCRS_TRIVIAL; break;\n         default: break;\n      }\n   }\n   return rc;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_compile_replacement\n *\n * Description :  This function takes a Perl-style replacement (2nd argument\n *                to the s/// operator and returns a compiled pcrs_substitute,\n *                or NULL if memory allocation for the substitute structure\n *                fails.\n *\n * Parameters  :\n *          1  :  replacement = replacement part of s/// operator\n *                              in perl syntax\n *          2  :  trivialflag = Flag that causes backreferences to be\n *                              ignored.\n *          3  :  capturecount = Number of capturing subpatterns in\n *                               the pattern. Needed for $+ handling.\n *          4  :  errptr = pointer to an integer in which error\n *                         conditions can be returned.\n *\n * Returns     :  pcrs_substitute data structure, or NULL if an\n *                error is encountered. In that case, *errptr has\n *                the reason.\n *\n *********************************************************************/\nstatic pcrs_substitute *pcrs_compile_replacement(const char *replacement, int trivialflag, int capturecount, int *errptr)\n{\n   int i, k, l, quoted;\n   size_t length;\n   char *text;\n   pcrs_substitute *r;\n\n   i = k = l = quoted = 0;\n\n   /*\n    * Sanity check\n    */\n   if (NULL == replacement)\n   {\n      replacement = \"\";\n   }\n\n   /*\n    * Get memory or fail\n    */\n   if (NULL == (r = (pcrs_substitute *)malloc(sizeof(pcrs_substitute))))\n   {\n      *errptr = PCRS_ERR_NOMEM;\n      return NULL;\n   }\n   memset(r, '\\0', sizeof(pcrs_substitute));\n\n   length = strlen(replacement);\n\n   if (NULL == (text = (char *)malloc(length + 1)))\n   {\n      free(r);\n      *errptr = PCRS_ERR_NOMEM;\n      return NULL;\n   }\n   memset(text, '\\0', length + 1);\n\n\n   /*\n    * In trivial mode, just copy the substitute text\n    */\n   if (trivialflag)\n   {\n      text = strncpy(text, replacement, length + 1);\n      k = (int)length;\n   }\n\n   /*\n    * Else, parse, cut out and record all backreferences\n    */\n   else\n   {\n      while (i < (int)length)\n      {\n         /* Quoting */\n         if (replacement[i] == '\\\\')\n         {\n            if (quoted)\n            {\n               text[k++] = replacement[i++];\n               quoted = 0;\n            }\n            else\n            {\n               if (replacement[i+1] && strchr(\"tnrfae0\", replacement[i+1]))\n               {\n                  switch (replacement[++i])\n                  {\n                  case 't':\n                     text[k++] = '\\t';\n                     break;\n                  case 'n':\n                     text[k++] = '\\n';\n                     break;\n                  case 'r':\n                     text[k++] = '\\r';\n                     break;\n                  case 'f':\n                     text[k++] = '\\f';\n                     break;\n                  case 'a':\n                     text[k++] = 7;\n                     break;\n                  case 'e':\n                     text[k++] = 27;\n                     break;\n                  case '0':\n                     text[k++] = '\\0';\n                     break;\n                  }\n                  i++;\n               }\n               else if (is_hex_sequence(&replacement[i]))\n               {\n                  /*\n                   * Replace a hex sequence with a single\n                   * character with the sequence's ascii value.\n                   * e.g.: '\\x7e' => '~'\n                   */\n                  const int ascii_value = xtoi(&replacement[i+2]);\n\n                  assert(ascii_value >= 0);\n                  assert(ascii_value < 256);\n                  text[k++] = (char)ascii_value;\n                  i += 4;\n               }\n               else\n               {\n                  quoted = 1;\n                  i++;\n               }\n            }\n            continue;\n         }\n\n         /* Backreferences */\n         if (replacement[i] == '$' && !quoted && i < (int)(length - 1))\n         {\n            char *symbol, symbols[] = \"'`+&\";\n            if (l >= PCRS_MAX_SUBMATCHES)\n            {\n               freez(text);\n               freez(r);\n               *errptr = PCRS_WARN_BADREF;\n               return NULL;\n            }\n            r->block_length[l] = (size_t)(k - r->block_offset[l]);\n\n            /* Numerical backreferences */\n            if (isdigit((int)replacement[i + 1]))\n            {\n               while (i < (int)length && isdigit((int)replacement[++i]))\n               {\n                  r->backref[l] = r->backref[l] * 10 + replacement[i] - 48;\n               }\n               if (r->backref[l] > capturecount)\n               {\n                  freez(text);\n                  freez(r);\n                  *errptr = PCRS_WARN_BADREF;\n                  return NULL;\n               }\n            }\n\n            /* Symbolic backreferences: */\n            else if (NULL != (symbol = strchr(symbols, replacement[i + 1])))\n            {\n\n               if (symbol - symbols == 2) /* $+ */\n               {\n                  r->backref[l] = capturecount;\n               }\n               else if (symbol - symbols == 3) /* $& */\n               {\n                  r->backref[l] = 0;\n               }\n               else /* $' or $` */\n               {\n                  r->backref[l] = (int)(PCRS_MAX_SUBMATCHES + 1 - (symbol - symbols));\n               }\n               i += 2;\n            }\n\n            /* Invalid backref -> plain '$' */\n            else\n            {\n               goto plainchar;\n            }\n\n            /* Valid and in range? -> record */\n            if (0 <= r->backref[l] && r->backref[l] < PCRS_MAX_SUBMATCHES + 2)\n            {\n               r->backref_count[r->backref[l]] += 1;\n               r->block_offset[++l] = k;\n            }\n            else\n            {\n               freez(text);\n               freez(r);\n               *errptr = PCRS_WARN_BADREF;\n               return NULL;\n            }\n            continue;\n         }\n\nplainchar:\n         /* Plain chars are copied */\n         text[k++] = replacement[i++];\n         quoted = 0;\n      }\n   } /* -END- if (!trivialflag) */\n\n   /*\n    * Finish & return\n    */\n   r->text = text;\n   r->backrefs = l;\n   r->length = (size_t)k;\n   r->block_length[l] = (size_t)(k - r->block_offset[l]);\n\n   return r;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_free_job\n *\n * Description :  Frees the memory used by a pcrs_job struct and its\n *                dependent structures.\n *\n * Parameters  :\n *          1  :  job = pointer to the pcrs_job structure to be freed\n *\n * Returns     :  a pointer to the next job, if there was any, or\n *                NULL otherwise.\n *\n *********************************************************************/\npcrs_job *pcrs_free_job(pcrs_job *job)\n{\n   pcrs_job *next;\n\n   if (job == NULL)\n   {\n      return NULL;\n   }\n   else\n   {\n      next = job->next;\n      if (job->pattern != NULL) free(job->pattern);\n      if (job->hints != NULL) free(job->hints);\n      if (job->substitute != NULL)\n      {\n         if (job->substitute->text != NULL) free(job->substitute->text);\n         free(job->substitute);\n      }\n      free(job);\n   }\n   return next;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_free_joblist\n *\n * Description :  Iterates through a chained list of pcrs_job's and\n *                frees them using pcrs_free_job.\n *\n * Parameters  :\n *          1  :  joblist = pointer to the first pcrs_job structure to\n *                be freed\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid pcrs_free_joblist(pcrs_job *joblist)\n{\n   while (NULL != (joblist = pcrs_free_job(joblist))) {};\n\n   return;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_compile_command\n *\n * Description :  Parses a string with a Perl-style s/// command,\n *                calls pcrs_compile, and returns a corresponding\n *                pcrs_job, or NULL if parsing or compiling the job\n *                fails.\n *\n * Parameters  :\n *          1  :  command = string with perl-style s/// command\n *          2  :  errptr = pointer to an integer in which error\n *                         conditions can be returned.\n *\n * Returns     :  a corresponding pcrs_job data structure, or NULL\n *                if an error was encountered. In that case, *errptr\n *                has the reason.\n *\n *********************************************************************/\npcrs_job *pcrs_compile_command(const char *command, int *errptr)\n{\n   int i, k, l, quoted = FALSE;\n   size_t limit;\n   char delimiter;\n   char *tokens[4];\n   pcrs_job *newjob;\n\n   k = l = 0;\n\n   /*\n    * Tokenize the perl command\n    */\n   limit = strlen(command);\n   if (limit < 4)\n   {\n      *errptr = PCRS_ERR_CMDSYNTAX;\n      return NULL;\n   }\n   else\n   {\n      delimiter = command[1];\n   }\n\n   tokens[l] = (char *) malloc(limit + 1);\n\n   for (i = 0; i <= (int)limit; i++)\n   {\n\n      if (command[i] == delimiter && !quoted)\n      {\n         if (l == 3)\n         {\n            l = -1;\n            break;\n         }\n         tokens[0][k++] = '\\0';\n         tokens[++l] = tokens[0] + k;\n         continue;\n      }\n\n      else if (command[i] == '\\\\' && !quoted)\n      {\n         quoted = TRUE;\n         if (command[i+1] == delimiter) continue;\n      }\n      else\n      {\n         quoted = FALSE;\n      }\n      tokens[0][k++] = command[i];\n   }\n\n   /*\n    * Syntax error ?\n    */\n   if (l != 3)\n   {\n      *errptr = PCRS_ERR_CMDSYNTAX;\n      free(tokens[0]);\n      return NULL;\n   }\n\n   newjob = pcrs_compile(tokens[1], tokens[2], tokens[3], errptr);\n   free(tokens[0]);\n   return newjob;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_compile\n *\n * Description :  Takes the three arguments to a perl s/// command\n *                and compiles a pcrs_job structure from them.\n *\n * Parameters  :\n *          1  :  pattern = string with perl-style pattern\n *          2  :  substitute = string with perl-style substitute\n *          3  :  options = string with perl-style options\n *          4  :  errptr = pointer to an integer in which error\n *                         conditions can be returned.\n *\n * Returns     :  a corresponding pcrs_job data structure, or NULL\n *                if an error was encountered. In that case, *errptr\n *                has the reason.\n *\n *********************************************************************/\npcrs_job *pcrs_compile(const char *pattern, const char *substitute, const char *options, int *errptr)\n{\n   pcrs_job *newjob;\n   int flags;\n   int capturecount;\n   const char *error;\n\n   *errptr = 0;\n\n   /*\n    * Handle NULL arguments\n    */\n   if (pattern == NULL) pattern = \"\";\n   if (substitute == NULL) substitute = \"\";\n\n\n   /*\n    * Get and init memory\n    */\n   if (NULL == (newjob = (pcrs_job *)malloc(sizeof(pcrs_job))))\n   {\n      *errptr = PCRS_ERR_NOMEM;\n      return NULL;\n   }\n   memset(newjob, '\\0', sizeof(pcrs_job));\n\n\n   /*\n    * Evaluate the options\n    */\n   newjob->options = pcrs_parse_perl_options(options, &flags);\n   newjob->flags = flags;\n\n\n   /*\n    * Compile the pattern\n    */\n   newjob->pattern = pcre_compile(pattern, newjob->options, &error, errptr, NULL);\n   if (newjob->pattern == NULL)\n   {\n      pcrs_free_job(newjob);\n      return NULL;\n   }\n\n\n   /*\n    * Generate hints. This has little overhead, since the\n    * hints will be NULL for a boring pattern anyway.\n    */\n   newjob->hints = pcre_study(newjob->pattern, 0, &error);\n   if (error != NULL)\n   {\n      *errptr = PCRS_ERR_STUDY;\n      pcrs_free_job(newjob);\n      return NULL;\n   }\n\n\n   /*\n    * Determine the number of capturing subpatterns.\n    * This is needed for handling $+ in the substitute.\n    */\n   if (0 > (*errptr = pcre_fullinfo(newjob->pattern, newjob->hints, PCRE_INFO_CAPTURECOUNT, &capturecount)))\n   {\n      pcrs_free_job(newjob);\n      return NULL;\n   }\n\n\n   /*\n    * Compile the substitute\n    */\n   if (NULL == (newjob->substitute = pcrs_compile_replacement(substitute, newjob->flags & PCRS_TRIVIAL, capturecount, errptr)))\n   {\n      pcrs_free_job(newjob);\n      return NULL;\n   }\n\n   return newjob;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_execute_list\n *\n * Description :  This is a multiple job wrapper for pcrs_execute().\n *                Apply the regular substitutions defined by the jobs in\n *                the joblist to the subject.\n *                The subject itself is left untouched, memory for the result\n *                is malloc()ed and it is the caller's responsibility to free\n *                the result when it's no longer needed.\n *\n *                Note: For convenient string handling, a null byte is\n *                      appended to the result. It does not count towards the\n *                      result_length, though.\n *\n *\n * Parameters  :\n *          1  :  joblist = the chained list of pcrs_jobs to be executed\n *          2  :  subject = the subject string\n *          3  :  subject_length = the subject's length\n *          4  :  result = char** for returning  the result\n *          5  :  result_length = size_t* for returning the result's length\n *\n * Returns     :  On success, the number of substitutions that were made.\n *                 May be > 1 if job->flags contained PCRS_GLOBAL\n *                On failure, the (negative) pcre error code describing the\n *                 failure, which may be translated to text using pcrs_strerror().\n *\n *********************************************************************/\nint pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length)\n{\n   pcrs_job *job;\n   char *old, *new = NULL;\n   int hits, total_hits;\n\n   old = subject;\n   *result_length = subject_length;\n   total_hits = 0;\n\n   for (job = joblist; job != NULL; job = job->next)\n   {\n      hits = pcrs_execute(job, old, *result_length, &new, result_length);\n\n      if (old != subject) free(old);\n\n      if (hits < 0)\n      {\n         return(hits);\n      }\n      else\n      {\n         total_hits += hits;\n         old = new;\n      }\n   }\n\n   *result = new;\n   return(total_hits);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_execute\n *\n * Description :  Apply the regular substitution defined by the job to the\n *                subject.\n *                The subject itself is left untouched, memory for the result\n *                is malloc()ed and it is the caller's responsibility to free\n *                the result when it's no longer needed.\n *\n *                Note: For convenient string handling, a null byte is\n *                      appended to the result. It does not count towards the\n *                      result_length, though.\n *\n * Parameters  :\n *          1  :  job = the pcrs_job to be executed\n *          2  :  subject = the subject (== original) string\n *          3  :  subject_length = the subject's length\n *          4  :  result = char** for returning the result (NULL on error)\n *          5  :  result_length = size_t* for returning the result's length\n *\n * Returns     :  On success, the number of substitutions that were made.\n *                 May be > 1 if job->flags contained PCRS_GLOBAL\n *                On failure, the (negative) pcre error code describing the\n *                 failure, which may be translated to text using pcrs_strerror().\n *\n *********************************************************************/\nint pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char **result, size_t *result_length)\n{\n   int offsets[3 * PCRS_MAX_SUBMATCHES],\n       offset,\n       i, k,\n       matches_found,\n       submatches,\n       max_matches = PCRS_MAX_MATCH_INIT;\n   size_t newsize;\n   pcrs_match *matches, *dummy;\n   char *result_offset;\n\n   offset = i = 0;\n   *result = NULL;\n\n   /*\n    * Sanity check & memory allocation\n    */\n   if (job == NULL || job->pattern == NULL || job->substitute == NULL || NULL == subject)\n   {\n      return(PCRS_ERR_BADJOB);\n   }\n\n   if (NULL == (matches = (pcrs_match *)malloc((size_t)max_matches * sizeof(pcrs_match))))\n   {\n      return(PCRS_ERR_NOMEM);\n   }\n   memset(matches, '\\0', (size_t)max_matches * sizeof(pcrs_match));\n\n\n   /*\n    * Find the pattern and calculate the space\n    * requirements for the result\n    */\n   newsize = subject_length;\n\n   while ((submatches = pcre_exec(job->pattern, job->hints, subject, (int)subject_length, offset, 0, offsets, 3 * PCRS_MAX_SUBMATCHES)) > 0)\n   {\n      job->flags |= PCRS_SUCCESS;\n      matches[i].submatches = submatches;\n\n      for (k = 0; k < submatches; k++)\n      {\n         matches[i].submatch_offset[k] = offsets[2 * k];\n\n         /* Note: Non-found optional submatches have length -1-(-1)==0 */\n         matches[i].submatch_length[k] = (size_t)(offsets[2 * k + 1] - offsets[2 * k]);\n\n         /* reserve mem for each submatch as often as it is ref'd */\n         newsize += matches[i].submatch_length[k] * (size_t)job->substitute->backref_count[k];\n      }\n      /* plus replacement text size minus match text size */\n      newsize += job->substitute->length - matches[i].submatch_length[0];\n\n      /* chunk before match */\n      matches[i].submatch_offset[PCRS_MAX_SUBMATCHES] = 0;\n      matches[i].submatch_length[PCRS_MAX_SUBMATCHES] = (size_t)offsets[0];\n      newsize += (size_t)offsets[0] * (size_t)job->substitute->backref_count[PCRS_MAX_SUBMATCHES];\n\n      /* chunk after match */\n      matches[i].submatch_offset[PCRS_MAX_SUBMATCHES + 1] = offsets[1];\n      matches[i].submatch_length[PCRS_MAX_SUBMATCHES + 1] = subject_length - (size_t)offsets[1] - 1;\n      newsize += (subject_length - (size_t)offsets[1]) * (size_t)job->substitute->backref_count[PCRS_MAX_SUBMATCHES + 1];\n\n      /* Storage for matches exhausted? -> Extend! */\n      if (++i >= max_matches)\n      {\n         max_matches = (int)(max_matches * PCRS_MAX_MATCH_GROW);\n         if (NULL == (dummy = (pcrs_match *)realloc(matches, (size_t)max_matches * sizeof(pcrs_match))))\n         {\n            free(matches);\n            return(PCRS_ERR_NOMEM);\n         }\n         matches = dummy;\n      }\n\n      /* Non-global search or limit reached? */\n      if (!(job->flags & PCRS_GLOBAL)) break;\n\n      /* Don't loop on empty matches */\n      if (offsets[1] == offset)\n         if ((size_t)offset < subject_length)\n            offset++;\n         else\n            break;\n      /* Go find the next one */\n      else\n         offset = offsets[1];\n   }\n   /* Pass pcre error through if (bad) failure */\n   if (submatches < PCRE_ERROR_NOMATCH)\n   {\n      free(matches);\n      return submatches;\n   }\n   matches_found = i;\n\n\n   /*\n    * Get memory for the result (must be freed by caller!)\n    * and append terminating null byte.\n    */\n   if ((*result = (char *)malloc(newsize + 1)) == NULL)\n   {\n      free(matches);\n      return PCRS_ERR_NOMEM;\n   }\n   else\n   {\n      (*result)[newsize] = '\\0';\n   }\n\n\n   /*\n    * Replace\n    */\n   offset = 0;\n   result_offset = *result;\n\n   for (i = 0; i < matches_found; i++)\n   {\n      /* copy the chunk preceding the match */\n      memcpy(result_offset, subject + offset, (size_t)(matches[i].submatch_offset[0] - offset));\n      result_offset += matches[i].submatch_offset[0] - offset;\n\n      /* For every segment of the substitute.. */\n      for (k = 0; k <= job->substitute->backrefs; k++)\n      {\n         /* ...copy its text.. */\n         memcpy(result_offset, job->substitute->text + job->substitute->block_offset[k], job->substitute->block_length[k]);\n         result_offset += job->substitute->block_length[k];\n\n         /* ..plus, if it's not the last chunk, i.e.: There *is* a backref.. */\n         if (k != job->substitute->backrefs\n             /* ..in legal range.. */\n             && job->substitute->backref[k] < PCRS_MAX_SUBMATCHES + 2\n             /* ..and referencing a real submatch.. */\n             && job->substitute->backref[k] < matches[i].submatches\n             /* ..that is nonempty.. */\n             && matches[i].submatch_length[job->substitute->backref[k]] > 0)\n         {\n            /* ..copy the submatch that is ref'd. */\n            memcpy(\n               result_offset,\n               subject + matches[i].submatch_offset[job->substitute->backref[k]],\n               matches[i].submatch_length[job->substitute->backref[k]]\n            );\n            result_offset += matches[i].submatch_length[job->substitute->backref[k]];\n         }\n      }\n      offset =  matches[i].submatch_offset[0] + (int)matches[i].submatch_length[0];\n   }\n\n   /* Copy the rest. */\n   memcpy(result_offset, subject + offset, subject_length - (size_t)offset);\n\n   *result_length = newsize;\n   free(matches);\n   return matches_found;\n\n}\n\n\n#define is_hex_digit(x) ((x) && strchr(\"0123456789ABCDEF\", toupper(x)))\n\n/*********************************************************************\n *\n * Function    :  is_hex_sequence\n *\n * Description :  Checks the first four characters of a string\n *                and decides if they are a valid hex sequence\n *                (like '\\x40').\n *\n * Parameters  :\n *          1  :  sequence = The string to check\n *\n * Returns     :  Non-zero if it's valid sequence, or\n *                Zero if it isn't.\n *\n *********************************************************************/\nstatic int is_hex_sequence(const char *sequence)\n{\n   return (sequence[0] == '\\\\' &&\n           sequence[1] == 'x'  &&\n           is_hex_digit(sequence[2]) &&\n           is_hex_digit(sequence[3]));\n}\n\n\n/*\n * Functions below this line are only part of the pcrs version\n * included in Privoxy. If you use any of them you should not\n * try to dynamically link against external pcrs versions.\n */\n\n/*********************************************************************\n *\n * Function    :  pcrs_job_is_dynamic\n *\n * Description :  Checks if a job has the \"D\" (dynamic) option set.\n *\n * Parameters  :\n *          1  :  job = The job to check\n *\n * Returns     :  TRUE if the job is indeed dynamic, otherwise\n *                FALSE\n *\n *********************************************************************/\nint pcrs_job_is_dynamic (char *job)\n{\n   const char delimiter = job[1];\n   const size_t length = strlen(job);\n   char *option;\n\n   if (length < 5)\n   {\n      /*\n       * The shortest valid (but useless)\n       * dynamic pattern is \"s@@@D\"\n       */\n      return FALSE;\n   }\n\n   /*\n    * Everything between the last character\n    * and the last delimiter is an option ...\n    */\n   for (option = job + length; *option != delimiter; option--)\n   {\n      if (*option == 'D')\n      {\n         /*\n          * ... and if said option is 'D' the job is dynamic.\n          */\n         return TRUE;\n      }\n   }\n   return FALSE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_get_delimiter\n *\n * Description :  Tries to find a character that is safe to\n *                be used as a pcrs delimiter for a certain string.\n *\n * Parameters  :\n *          1  :  string = The string to search in\n *\n * Returns     :  A safe delimiter if one was found, otherwise '\\0'.\n *\n *********************************************************************/\nchar pcrs_get_delimiter(const char *string)\n{\n   /*\n    * Some characters that are unlikely to\n    * be part of pcrs replacement strings.\n    */\n   static const char delimiters[] = \"><#+*~%^-:;!@\";\n   const char *d = delimiters;\n\n   /* Take the first delimiter that isn't part of the string */\n   while (*d && NULL != strchr(string, *d))\n   {\n      d++;\n   }\n   return *d;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  pcrs_execute_single_command\n *\n * Description :  Apply single pcrs command to the subject.\n *                The subject itself is left untouched, memory for the result\n *                is malloc()ed and it is the caller's responsibility to free\n *                the result when it's no longer needed.\n *\n * Parameters  :\n *          1  :  subject = the subject (== original) string\n *          2  :  pcrs_command = the pcrs command as string (s@foo@bar@)\n *          3  :  hits = int* for returning  the number of modifications\n *\n * Returns     :  NULL in case of errors, otherwise the\n *                result of the pcrs command.\n *\n *********************************************************************/\nchar *pcrs_execute_single_command(const char *subject, const char *pcrs_command, int *hits)\n{\n   size_t size;\n   char *result = NULL;\n   pcrs_job *job;\n\n   assert(subject);\n   assert(pcrs_command);\n\n   *hits = 0;\n   size = strlen(subject);\n\n   job = pcrs_compile_command(pcrs_command, hits);\n   if (NULL != job)\n   {\n      *hits = pcrs_execute(job, subject, size, &result, &size);\n      if (*hits < 0)\n      {\n         freez(result);\n      }\n      pcrs_free_job(job);\n   }\n   return result;\n\n}\n\n\nstatic const char warning[] = \"... [too long, truncated]\";\n/*********************************************************************\n *\n * Function    :  pcrs_compile_dynamic_command\n *\n * Description :  Takes a dynamic pcrs command, fills in the\n *                values of the variables and compiles it.\n *\n * Parameters  :\n *          1  :  pcrs_command = The dynamic pcrs command to compile\n *          2  :  v = NULL terminated array of variables and their values.\n *          3  :  error = pcrs error code\n *\n * Returns     :  NULL in case of hard errors, otherwise the\n *                compiled pcrs job.\n *\n *********************************************************************/\npcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_variable v[], int *error)\n{\n   char buf[PCRS_BUFFER_SIZE];\n   const char *original_pcrs_command = pcrs_command;\n   char *pcrs_command_tmp = NULL;\n   pcrs_job *job = NULL;\n   int truncation = 0;\n   char d;\n   int ret;\n\n   while ((NULL != v->name) && (NULL != pcrs_command))\n   {\n      assert(NULL != v->value);\n\n      if (NULL == strstr(pcrs_command, v->name))\n      {\n         /*\n          * Skip the substitution if the variable\n          * name isn't part of the pattern.\n          */\n         v++;\n         continue;\n      }\n\n      /* Use pcrs to replace the variable with its value. */\n      d = pcrs_get_delimiter(v->value);\n      if ('\\0' == d)\n      {\n         /* No proper delimiter found */\n         *error = PCRS_ERR_CMDSYNTAX;\n         freez(pcrs_command_tmp);\n         return NULL;\n      }\n\n      /*\n       * Variable names are supposed to contain alpha\n       * numerical characters plus '_' only.\n       */\n      assert(NULL == strchr(v->name, d));\n\n      ret = snprintf(buf, sizeof(buf), \"s%c\\\\$%s%c%s%cgT\", d, v->name, d, v->value, d);\n      assert(ret >= 0);\n      if (ret >= sizeof(buf))\n      {\n         /*\n          * Value didn't completely fit into buffer,\n          * overwrite the end of the substitution text\n          * with a truncation message and close the pattern\n          * properly.\n          */\n         const size_t trailer_size = sizeof(warning) + 3; /* 3 for d + \"gT\" */\n         char *trailer_start = buf + sizeof(buf) - trailer_size;\n\n         ret = snprintf(trailer_start, trailer_size, \"%s%cgT\", warning, d);\n         assert(ret == trailer_size - 1);\n         assert(sizeof(buf) == strlen(buf) + 1);\n         truncation = 1;\n      }\n\n      pcrs_command_tmp = pcrs_execute_single_command(pcrs_command, buf, error);\n      if (NULL == pcrs_command_tmp)\n      {\n         return NULL;\n      }\n\n      if (pcrs_command != original_pcrs_command)\n      {\n         freez(pcrs_command);\n      }\n      pcrs_command = pcrs_command_tmp;\n\n      v++;\n   }\n\n   job = pcrs_compile_command(pcrs_command, error);\n   if (pcrs_command != original_pcrs_command)\n   {\n      freez(pcrs_command);\n   }\n\n   if (truncation)\n   {\n      *error = PCRS_WARN_TRUNCATION;\n   }\n\n   return job;\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/pcrs.h",
    "content": "#ifndef PCRS_H_INCLUDED\n#define PCRS_H_INCLUDED\n\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/pcrs.h,v $\n *\n * Purpose     :  Header file for pcrs.c\n *\n * Copyright   :  see pcrs.c\n *\n *********************************************************************/\n\n#define PCRS_H_VERSION \"$Id: pcrs.h,v 1.18 2013/11/24 14:23:28 fabiankeil Exp $\"\n\n\n#ifndef _PCRE_H\n#include <pcre.h>\n#endif\n\n/*\n * Constants:\n */\n\n#define FALSE 0\n#define TRUE 1\n\n/* Capacity */\n#define PCRS_MAX_SUBMATCHES  33     /* Maximum number of capturing subpatterns allowed. MUST be <= 99! FIXME: Should be dynamic */\n#define PCRS_MAX_MATCH_INIT  40     /* Initial amount of matches that can be stored in global searches */\n#define PCRS_MAX_MATCH_GROW  1.6    /* Factor by which storage for matches is extended if exhausted */\n\n/*\n * PCRS error codes\n *\n * They are supposed to be handled together with PCRE error\n * codes and have to start with an offset to prevent overlaps.\n *\n * PCRE 6.7 uses error codes from -1 to -21, PCRS error codes\n * below -100 should be safe for a while.\n */\n#define PCRS_ERR_NOMEM           -100      /* Failed to acquire memory. */\n#define PCRS_ERR_CMDSYNTAX       -101      /* Syntax of s///-command */\n#define PCRS_ERR_STUDY           -102      /* pcre error while studying the pattern */\n#define PCRS_ERR_BADJOB          -103      /* NULL job pointer, pattern or substitute */\n#define PCRS_WARN_BADREF         -104      /* Backreference out of range */\n#define PCRS_WARN_TRUNCATION     -105      /* At least one pcrs variable was too big,\n                                            * only the first part was used. */\n\n/* Flags */\n#define PCRS_GLOBAL          1      /* Job should be applied globally, as with perl's g option */\n#define PCRS_TRIVIAL         2      /* Backreferences in the substitute are ignored */\n#define PCRS_SUCCESS         4      /* Job did previously match */\n\n\n/*\n * Data types:\n */\n\n/* A compiled substitute */\n\ntypedef struct {\n  char  *text;                                   /* The plaintext part of the substitute, with all backreferences stripped */\n  size_t length;                                 /* The substitute may not be a valid C string so we can't rely on strlen(). */\n  int    backrefs;                               /* The number of backreferences */\n  int    block_offset[PCRS_MAX_SUBMATCHES];      /* Array with the offsets of all plaintext blocks in text */\n  size_t block_length[PCRS_MAX_SUBMATCHES];      /* Array with the lengths of all plaintext blocks in text */\n  int    backref[PCRS_MAX_SUBMATCHES];           /* Array with the backref number for all plaintext block borders */\n  int    backref_count[PCRS_MAX_SUBMATCHES + 2]; /* Array with the number of references to each backref index */\n} pcrs_substitute;\n\n\n/*\n * A match, including all captured subpatterns (submatches)\n * Note: The zeroth is the whole match, the PCRS_MAX_SUBMATCHES + 0th\n * is the range before the match, the PCRS_MAX_SUBMATCHES + 1th is the\n * range after the match.\n */\n\ntypedef struct {\n  int    submatches;                               /* Number of captured subpatterns */\n  int    submatch_offset[PCRS_MAX_SUBMATCHES + 2]; /* Offset for each submatch in the subject */\n  size_t submatch_length[PCRS_MAX_SUBMATCHES + 2]; /* Length of each submatch in the subject */\n} pcrs_match;\n\n\n/* A PCRS job */\n\ntypedef struct PCRS_JOB {\n  pcre *pattern;                            /* The compiled pcre pattern */\n  pcre_extra *hints;                        /* The pcre hints for the pattern */\n  int options;                              /* The pcre options (numeric) */\n  int flags;                                /* The pcrs and user flags (see \"Flags\" above) */\n  pcrs_substitute *substitute;              /* The compiled pcrs substitute */\n  struct PCRS_JOB *next;                    /* Pointer for chaining jobs to joblists */\n} pcrs_job;\n\n\n/*\n * Prototypes:\n */\n\n/* Main usage */\nextern pcrs_job        *pcrs_compile_command(const char *command, int *errptr);\nextern pcrs_job        *pcrs_compile(const char *pattern, const char *substitute, const char *options, int *errptr);\nextern int              pcrs_execute(pcrs_job *job, const char *subject, size_t subject_length, char **result, size_t *result_length);\nextern int              pcrs_execute_list(pcrs_job *joblist, char *subject, size_t subject_length, char **result, size_t *result_length);\n\n/* Freeing jobs */\nextern pcrs_job        *pcrs_free_job(pcrs_job *job);\nextern void             pcrs_free_joblist(pcrs_job *joblist);\n\n/* Info on errors: */\nextern const char *pcrs_strerror(const int error);\n\nextern int pcrs_job_is_dynamic(char *job);\nextern char pcrs_get_delimiter(const char *string);\nextern char *pcrs_execute_single_command(const char *subject, const char *pcrs_command, int *hits);\n/*\n * Variable/value pair for dynamic pcrs commands.\n */\nstruct pcrs_variable\n{\n   const char *name;\n   char *value;\n   int static_value;\n};\n\nextern pcrs_job *pcrs_compile_dynamic_command(char *pcrs_command, const struct pcrs_variable v[], int *error);\n\n/* Only relevant for maximum pcrs variable size */\n#ifndef PCRS_BUFFER_SIZE\n#define PCRS_BUFFER_SIZE 4000\n#endif /* ndef PCRS_BUFFER_SIZE */\n\n#endif /* ndef PCRS_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/project.h",
    "content": "#ifndef PROJECT_H_INCLUDED\n#define PROJECT_H_INCLUDED\n/** Version string. */\n#define PROJECT_H_VERSION \"$Id: project.h,v 1.212 2016/01/16 12:30:43 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/project.h,v $\n *\n * Purpose     :  Defines data structures which are widely used in the\n *                project.  Does not define any variables or functions\n *                (though it does declare some macros).\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n/* Declare struct FILE for vars and funcs. */\n#include <stdio.h>\n\n/* Need time_t for file_list */\n#include <time.h>\n/* Needed for pcre choice */\n#include \"sp_config.h\"\n\n/* Need for struct sockaddr_storage */\n#ifdef HAVE_RFC2553\n#  ifndef _WIN32\n#    include <netdb.h>\n#    include <sys/socket.h>\n#  else\n#    include <stdint.h>\n#    include <winsock2.h>\n#    include <ws2tcpip.h>\n     typedef unsigned short in_port_t;\n#  endif\n#endif\n\n\n/*\n * Include appropriate regular expression libraries.\n * Note that pcrs and pcre (native) are needed for cgi\n * and are included anyway.\n */\n\n#ifdef STATIC_PCRE\n#  include \"pcre.h\"\n#else\n#  ifdef PCRE_H_IN_SUBDIR\n#    include <pcre/pcre.h>\n#  else\n#    include \"pcre.h\"\n#  endif\n#endif\n\n#ifdef STATIC_PCRS\n#  include \"pcrs.h\"\n#else\n#  include <pcrs.h>\n#endif\n\n#ifdef STATIC_PCRE\n#  include \"pcreposix.h\"\n#else\n#  ifdef PCRE_H_IN_SUBDIR\n#    include <pcre/pcreposix.h>\n#  else\n#    include \"pcreposix.h\"\n#  endif\n#endif\n\n//#include <regex.h>\n\n#ifdef _WIN32\n/*\n * I don't want to have to #include all this just for the declaration\n * of SOCKET.  However, it looks like we have to...\n */\n#ifndef STRICT\n#define STRICT\n#endif\n#include <windows.h>\n#endif\n\n\n#ifdef _WIN32\n\ntypedef SOCKET jb_socket;\n\n#define JB_INVALID_SOCKET INVALID_SOCKET\n\n#else /* ndef _WIN32 */\n\n/**\n * The type used by sockets.  On UNIX it's an int.  Microsoft decided to\n * make it an unsigned.\n */\ntypedef int jb_socket;\n\n/**\n * The error value used for variables of type jb_socket.  On UNIX this\n * is -1, however Microsoft decided to make socket handles unsigned, so\n * they use a different value.\n */\n\n#define JB_INVALID_SOCKET (-1)\n\n#endif /* ndef _WIN32 */\n\n\n#include \"radix.h\"\n#include \"maxminddb.h\"\n\nextern MMDB_s mmdb;\n\n/**\n * A standard error code.  This should be JB_ERR_OK or one of the JB_ERR_xxx\n * series of errors.\n */\nenum privoxy_err\n{\n   JB_ERR_OK         = 0, /**< Success, no error                        */\n   JB_ERR_MEMORY     = 1, /**< Out of memory                            */\n   JB_ERR_CGI_PARAMS = 2, /**< Missing or corrupt CGI parameters        */\n   JB_ERR_FILE       = 3, /**< Error opening, reading or writing a file */\n   JB_ERR_PARSE      = 4, /**< Error parsing file                       */\n   JB_ERR_MODIFIED   = 5, /**< File has been modified outside of the\n                               CGI actions editor.                      */\n   JB_ERR_COMPRESS   = 6  /**< Error on decompression                   */\n};\n\ntypedef enum privoxy_err jb_err;\n\n/**\n * This macro is used to free a pointer that may be NULL.\n * It also sets the variable to NULL after it's been freed.\n * The paramater should be a simple variable without side effects.\n */\n#define freez(X)  { if(X) { free((void*)X); X = NULL ; } }\n\n\n/**\n * Macro definitions for platforms where isspace() and friends\n * are macros that use their argument directly as an array index\n * and thus better be positive. Supposedly that's the case on\n * some unspecified Solaris versions.\n * Note: Remember to #include <ctype.h> if you use these macros.\n */\n#define privoxy_isdigit(__X) isdigit((int)(unsigned char)(__X))\n#define privoxy_isupper(__X) isupper((int)(unsigned char)(__X))\n#define privoxy_toupper(__X) toupper((int)(unsigned char)(__X))\n#define privoxy_tolower(__X) tolower((int)(unsigned char)(__X))\n#define privoxy_isspace(__X) isspace((int)(unsigned char)(__X))\n\n/**\n * Use for statically allocated buffers if you have no other choice.\n * Remember to check the length of what you write into the buffer\n * - we don't want any buffer overflows!\n */\n#define BUFFER_SIZE 5000\n\n/**\n * Max length of CGI parameters (arbitrary limit).\n */\n#define CGI_PARAM_LEN_MAX 500U\n\n/**\n * Buffer size for capturing struct hostent data in the\n * gethostby(name|addr)_r library calls. Since we don't\n * loop over gethostbyname_r, the buffer must be sufficient\n * to accommodate multiple IN A RRs, as used in DNS round robin\n * load balancing. W3C's wwwlib uses 1K, so that should be\n * good enough for us, too.\n */\n/**\n * XXX: Temporary doubled, for some configurations\n * 1K is still too small and we didn't get the\n * real fix ready for inclusion.\n */\n#define HOSTENT_BUFFER_SIZE 2048\n\n/**\n * Default TCP/IP address to listen on, as a string.\n * Set to \"127.0.0.1:8118\".\n */\n#define HADDR_DEFAULT   \"127.0.0.1:8118\"\n\n\n/* Forward def for struct client_state */\nstruct configuration_spec;\n\n\n/**\n * Entry in a linked list of strings.\n */\nstruct list_entry\n{\n   /**\n    * The string pointer. It must point to a dynamically malloc()ed\n    * string or be NULL for the list functions to work. In the latter\n    * case, just be careful next time you iterate through the list in\n    * your own code.\n    */\n   char *str;\n\n   /** Next entry in the linked list, or NULL if no more. */\n   struct list_entry *next;\n};\n\n/**\n * A header for a linked list of strings.\n */\nstruct list\n{\n   /** First entry in the list, or NULL if the list is empty. */\n   struct list_entry *first;\n\n   /** Last entry in the list, or NULL if the list is empty. */\n   struct list_entry *last;\n};\n\n\n/**\n * An entry in a map.  This is a name=value pair.\n */\nstruct map_entry\n{\n   /** The key for the map. */\n   const char *name;\n   /** The value associated with that key. */\n   const char *value;\n   /** The next map entry, or NULL if none. */\n   struct map_entry *next;\n};\n\n/**\n * A map from a string to another string.\n * This is used for the paramaters passed in a HTTP GET request, and\n * to store the exports when the CGI interface is filling in a template.\n */\nstruct map\n{\n   /** The first map entry, or NULL if the map is empty. */\n   struct map_entry *first;\n   /** The last map entry, or NULL if the map is empty. */\n   struct map_entry *last;\n};\n\n\n/**\n * A HTTP request.  This includes the method (GET, POST) and\n * the parsed URL.\n *\n * This is also used whenever we want to match a URL against a\n * URL pattern.  This always contains the URL to match, and never\n * a URL pattern.  (See struct url_spec).\n */\nstruct http_request\n{\n   char *cmd;      /**< Whole command line: method, URL, Version */\n   char *ocmd;     /**< Backup of original cmd for CLF logging */\n   char *gpc;      /**< HTTP method: GET, POST, ... */\n   char *url;      /**< The URL */\n   char *ver;      /**< Protocol version */\n   int status;     /**< HTTP Status */\n\n   char *host;     /**< Host part of URL */\n   int   port;     /**< Port of URL or 80 (default) */\n   char *path;     /**< Path of URL */\n   char *hostport; /**< host[:port] */\n   int   ssl;      /**< Flag if protocol is https */\n\n   char *remote_host_ip_addr_str; /**< String with dotted decimal representation\n                             of remote host's IP. NULL before connect_to() */\n\n   char *host_ip_addr_str; /**< String with dotted decimal representation\n                                of host's IP. NULL before connect_to() */\n\n#ifndef FEATURE_EXTENDED_HOST_PATTERNS\n   char  *dbuffer; /**< Buffer with '\\0'-delimited domain name.           */\n   char **dvec;    /**< List of pointers to the strings in dbuffer.       */\n   int    dcount;  /**< How many parts to this domain? (length of dvec)   */\n#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */\n};\n\n/**\n * Reasons for generating a http_response instead of delivering\n * the requested resource. Mostly ordered the way they are checked\n * for in chat().\n */\nenum crunch_reason\n{\n   UNSUPPORTED,\n   BLOCKED,\n   UNTRUSTED,\n   REDIRECTED,\n   CGI_CALL,\n   NO_SUCH_DOMAIN,\n   FORWARDING_FAILED,\n   CONNECT_FAILED,\n   OUT_OF_MEMORY,\n   INTERNAL_ERROR,\n   CONNECTION_TIMEOUT,\n   NO_SERVER_DATA\n};\n\n/**\n * Response generated by CGI, blocker, or error handler\n */\nstruct http_response\n{\n  char  *status;                    /**< HTTP status (string). */\n  struct list headers[1];           /**< List of header lines. */\n  char  *head;                      /**< Formatted http response head. */\n  size_t head_length;               /**< Length of http response head. */\n  char  *body;                      /**< HTTP document body. */\n  size_t content_length;            /**< Length of body, REQUIRED if binary body. */\n  int    is_static;                 /**< Nonzero if the content will never change and\n                                         should be cached by the browser (e.g. images). */\n  enum crunch_reason crunch_reason; /**< Why the response was generated in the first place. */\n};\n\nstruct url_spec\n{\n#ifdef FEATURE_EXTENDED_HOST_PATTERNS\n   regex_t *host_regex;/**< Regex for host matching                          */\n#else\n   char  *dbuffer;     /**< Buffer with '\\0'-delimited domain name, or NULL to match all hosts. */\n   char **dvec;        /**< List of pointers to the strings in dbuffer.       */\n   int    dcount;      /**< How many parts to this domain? (length of dvec)   */\n   int    unanchored;  /**< Bitmap - flags are ANCHOR_LEFT and ANCHOR_RIGHT.  */\n#endif /* defined FEATURE_EXTENDED_HOST_PATTERNS */\n\n   char  *port_list;   /**< List of acceptable ports, or NULL to match all ports */\n\n   regex_t *preg;      /**< Regex for matching path part                      */\n};\n\n/**\n * A URL or a tag pattern.\n */\nstruct pattern_spec\n{\n   /** The string which was parsed to produce this pattern_spec.\n       Used for debugging or display only.  */\n   char  *spec;\n\n   union\n   {\n      struct url_spec url_spec;\n      regex_t *tag_regex;\n   } pattern;\n\n   unsigned int flags; /**< Bitmap with various pattern properties. */\n};\n\n/**\n * Constant for host part matching in URLs.  If set, indicates that the start of\n * the pattern must match the start of the URL.  E.g. this is not set for the\n * pattern \".example.com\", so that it will match both \"example.com\" and\n * \"www.example.com\".  It is set for the pattern \"example.com\", which makes it\n * match \"example.com\" only, not \"www.example.com\".\n */\n#define ANCHOR_LEFT  1\n\n/**\n * Constant for host part matching in URLs.  If set, indicates that the end of\n * the pattern must match the end of the URL.  E.g. this is not set for the\n * pattern \"ad.\", so that it will match any host called \"ad\", irrespective\n * of how many subdomains are in the fully-qualified domain name.\n */\n#define ANCHOR_RIGHT 2\n\n/** Pattern spec bitmap: It's an URL pattern. */\n#define PATTERN_SPEC_URL_PATTERN          0x00000001UL\n\n/** Pattern spec bitmap: It's a TAG pattern. */\n#define PATTERN_SPEC_TAG_PATTERN          0x00000002UL\n\n/** Pattern spec bitmap: It's a NO-REQUEST-TAG pattern. */\n#define PATTERN_SPEC_NO_REQUEST_TAG_PATTERN 0x00000004UL\n\n/** Pattern spec bitmap: It's a NO-RESPONSE-TAG pattern. */\n#define PATTERN_SPEC_NO_RESPONSE_TAG_PATTERN 0x00000008UL\n\n/**\n * An I/O buffer.  Holds a string which can be appended to, and can have data\n * removed from the beginning.\n */\nstruct iob\n{\n   char *buf;    /**< Start of buffer        */\n   char *cur;    /**< Start of relevant data */\n   char *eod;    /**< End of relevant data   */\n   size_t size;  /**< Size as malloc()ed     */\n};\n\n\n/**\n * Return the number of bytes in the I/O buffer associated with the passed\n * I/O buffer. May be zero.\n */\n#define IOB_PEEK(IOB) ((IOB->cur > IOB->eod) ? (IOB->eod - IOB->cur) : 0)\n\n\n/* Bits for csp->content_type bitmask: */\n#define CT_TEXT    0x0001U /**< Suitable for pcrs filtering. */\n#define CT_GIF     0x0002U /**< Suitable for GIF filtering.  */\n#define CT_TABOO   0x0004U /**< DO NOT filter, irrespective of other flags. */\n\n/* Although these are not, strictly speaking, content types\n * (they are content encodings), it is simple to handle them\n * as such.\n */\n#define CT_GZIP    0x0010U /**< gzip-compressed data. */\n#define CT_DEFLATE 0x0020U /**< zlib-compressed data. */\n\n/**\n * Flag to signal that the server declared the content type,\n * so we can differentiate between unknown and undeclared\n * content types.\n */\n#define CT_DECLARED 0x0040U\n\n/**\n * The mask which includes all actions.\n */\n#define ACTION_MASK_ALL        (~0UL)\n\n/**\n * The most compatible set of actions - i.e. none.\n */\n#define ACTION_MOST_COMPATIBLE                       0x00000000UL\n\n/** Action bitmap: Block the request. */\n#define ACTION_BLOCK                                 0x00000001UL\n/** Action bitmap: Deanimate if it's a GIF. */\n#define ACTION_DEANIMATE                             0x00000002UL\n/** Action bitmap: Downgrade HTTP/1.1 to 1.0. */\n#define ACTION_DOWNGRADE                             0x00000004UL\n/** Action bitmap: Fast redirects. */\n#define ACTION_FAST_REDIRECTS                        0x00000008UL\n/** Action bitmap: Remove or add \"X-Forwarded-For\" header. */\n#define ACTION_CHANGE_X_FORWARDED_FOR                0x00000010UL\n/** Action bitmap: Hide \"From\" header. */\n#define ACTION_HIDE_FROM                             0x00000020UL\n/** Action bitmap: Hide \"Referer\" header.  (sic - follow HTTP, not English). */\n#define ACTION_HIDE_REFERER                          0x00000040UL\n/** Action bitmap: Hide \"User-Agent\" and similar headers. */\n#define ACTION_HIDE_USER_AGENT                       0x00000080UL\n/** Action bitmap: This is an image. */\n#define ACTION_IMAGE                                 0x00000100UL\n/** Action bitmap: Sets the image blocker. */\n#define ACTION_IMAGE_BLOCKER                         0x00000200UL\n/** Action bitmap: Prevent compression. */\n#define ACTION_NO_COMPRESSION                        0x00000400UL\n/** Action bitmap: Change cookies to session only cookies. */\n#define ACTION_SESSION_COOKIES_ONLY                  0x00000800UL\n/** Action bitmap: Block cookies coming from the client. */\n#define ACTION_CRUNCH_OUTGOING_COOKIES               0x00001000UL\n/** Action bitmap: Block cookies coming from the server. */\n#define ACTION_CRUNCH_INCOMING_COOKIES               0x00002000UL\n/** Action bitmap: Override the forward settings in the config file */\n#define ACTION_FORWARD_OVERRIDE                      0x00004000UL\n/** Action bitmap: Block as empty document */\n#define  ACTION_HANDLE_AS_EMPTY_DOCUMENT             0x00008000UL\n/** Action bitmap: Limit CONNECT requests to safe ports. */\n#define ACTION_LIMIT_CONNECT                         0x00010000UL\n/** Action bitmap: Redirect request. */\n#define  ACTION_REDIRECT                             0x00020000UL\n/** Action bitmap: Crunch or modify \"if-modified-since\" header. */\n#define ACTION_HIDE_IF_MODIFIED_SINCE                0x00040000UL\n/** Action bitmap: Overwrite Content-Type header. */\n#define ACTION_CONTENT_TYPE_OVERWRITE                0x00080000UL\n/** Action bitmap: Crunch specified server header. */\n#define ACTION_CRUNCH_SERVER_HEADER                  0x00100000UL\n/** Action bitmap: Crunch specified client header */\n#define ACTION_CRUNCH_CLIENT_HEADER                  0x00200000UL\n/** Action bitmap: Enable text mode by force */\n#define ACTION_FORCE_TEXT_MODE                       0x00400000UL\n/** Action bitmap: Enable text mode by force */\n#define ACTION_CRUNCH_IF_NONE_MATCH                  0x00800000UL\n/** Action bitmap: Enable content-disposition crunching */\n#define ACTION_HIDE_CONTENT_DISPOSITION              0x01000000UL\n/** Action bitmap: Replace or block Last-Modified header */\n#define ACTION_OVERWRITE_LAST_MODIFIED               0x02000000UL\n/** Action bitmap: Replace or block Accept-Language header */\n#define ACTION_HIDE_ACCEPT_LANGUAGE                  0x04000000UL\n/** Action bitmap: Limit the cookie lifetime */\n#define ACTION_LIMIT_COOKIE_LIFETIME                 0x08000000UL\n\n#define ACTION_FORWARD_RESOLVED_IP                   0x10000000UL\n\n#define ACTION_FORWARD_RULE                          0x20000000UL\n\n\n/** Action string index: How to deanimate GIFs */\n#define ACTION_STRING_DEANIMATE             0\n/** Action string index: Replacement for \"From:\" header */\n#define ACTION_STRING_FROM                  1\n/** Action string index: How to block images */\n#define ACTION_STRING_IMAGE_BLOCKER         2\n/** Action string index: Replacement for \"Referer:\" header */\n#define ACTION_STRING_REFERER               3\n/** Action string index: Replacement for \"User-Agent:\" header */\n#define ACTION_STRING_USER_AGENT            4\n/** Action string index: Legal CONNECT ports. */\n#define ACTION_STRING_LIMIT_CONNECT         5\n/** Action string index: Server headers containing this pattern are crunched*/\n#define ACTION_STRING_SERVER_HEADER         6\n/** Action string index: Client headers containing this pattern are crunched*/\n#define ACTION_STRING_CLIENT_HEADER         7\n/** Action string index: Replacement for the \"Accept-Language:\" header*/\n#define ACTION_STRING_LANGUAGE              8\n/** Action string index: Replacement for the \"Content-Type:\" header*/\n#define ACTION_STRING_CONTENT_TYPE          9\n/** Action string index: Replacement for the \"content-disposition:\" header*/\n#define ACTION_STRING_CONTENT_DISPOSITION  10\n/** Action string index: Replacement for the \"If-Modified-Since:\" header*/\n#define ACTION_STRING_IF_MODIFIED_SINCE    11\n/** Action string index: Replacement for the \"Last-Modified:\" header. */\n#define ACTION_STRING_LAST_MODIFIED        12\n/** Action string index: Redirect URL */\n#define ACTION_STRING_REDIRECT             13\n/** Action string index: Decode before redirect? */\n#define ACTION_STRING_FAST_REDIRECTS       14\n/** Action string index: Overriding forward rule. */\n#define ACTION_STRING_FORWARD_OVERRIDE     15\n/** Action string index: Reason for the block. */\n#define ACTION_STRING_BLOCK                16\n/** Action string index: what to do with the \"X-Forwarded-For\" header. */\n#define ACTION_STRING_CHANGE_X_FORWARDED_FOR 17\n/** Action string index: how many minutes cookies should be valid. */\n#define ACTION_STRING_LIMIT_COOKIE_LIFETIME 18\n/** Action string index: forward resolved ip. */\n#define ACTION_STRING_FORWARD_RESOLVED_IP    19\n/** Action string index: forward rule. */\n#define ACTION_STRING_FORWARD_RULE          20\n/** Number of string actions. */\n#define ACTION_STRING_COUNT                21\n\n\n\n/* To make the ugly hack in sed easier to understand */\n#define CHECK_EVERY_HEADER_REMAINING 0\n\n\n/** Index into current_action_spec::multi[] for headers to add. */\n#define ACTION_MULTI_ADD_HEADER              0\n/** Index into current_action_spec::multi[] for content filters to apply. */\n#define ACTION_MULTI_FILTER                  1\n/** Index into current_action_spec::multi[] for server-header filters to apply. */\n#define ACTION_MULTI_SERVER_HEADER_FILTER    2\n/** Index into current_action_spec::multi[] for client-header filters to apply. */\n#define ACTION_MULTI_CLIENT_HEADER_FILTER    3\n/** Index into current_action_spec::multi[] for client-header tags to apply. */\n#define ACTION_MULTI_CLIENT_HEADER_TAGGER    4\n/** Index into current_action_spec::multi[] for server-header tags to apply. */\n#define ACTION_MULTI_SERVER_HEADER_TAGGER    5\n/** Number of multi-string actions. */\n#define ACTION_MULTI_EXTERNAL_FILTER         6\n/** Number of multi-string actions. */\n#define ACTION_MULTI_COUNT                   7\n\n\n/**\n * This structure contains a list of actions to apply to a URL.\n * It only contains positive instructions - no \"-\" options.\n * It is not used to store the actions list itself, only for\n * url_actions() to return the current values.\n */\nstruct current_action_spec\n{\n   /** Actions to apply.  A bit set to \"1\" means perform the action. */\n   unsigned long flags;\n\n   /**\n    * Paramaters for those actions that require them.\n    * Each entry is valid if & only if the corresponding entry in \"flags\" is\n    * set.\n    */\n   char * string[ACTION_STRING_COUNT];\n\n   /** Lists of strings for multi-string actions. */\n   struct list multi[ACTION_MULTI_COUNT][1];\n};\n\n\n/**\n * This structure contains a set of changes to actions.\n * It can contain both positive and negative instructions.\n * It is used to store an entry in the actions list.\n */\nstruct action_spec\n{\n   unsigned long mask; /**< Actions to keep. A bit set to \"0\" means remove action. */\n   unsigned long add;  /**< Actions to add.  A bit set to \"1\" means add action.    */\n\n   /**\n    * Parameters for those actions that require them.\n    * Each entry is valid if & only if the corresponding entry in \"flags\" is\n    * set.\n    */\n   char * string[ACTION_STRING_COUNT];\n\n   /** Lists of strings to remove, for multi-string actions. */\n   struct list multi_remove[ACTION_MULTI_COUNT][1];\n\n   /** If nonzero, remove *all* strings from the multi-string action. */\n   int         multi_remove_all[ACTION_MULTI_COUNT];\n\n   /** Lists of strings to add, for multi-string actions. */\n   struct list multi_add[ACTION_MULTI_COUNT][1];\n};\n\nenum forward_routing {\n    ROUTE_NONE = 0,\n    ROUTE_DIRECT,\n    ROUTE_PROXY,\n    ROUTE_BLOCK,\n};\n\n\n/**\n * This structure is used to store action files.\n *\n * It contains an URL or tag pattern, and the changes to\n * the actions. It's a linked list and should only be\n * free'd through unload_actions_file() unless there's\n * only a single entry.\n */\nstruct url_actions\n{\n    struct pattern_spec url[1]; /**< The URL or tag pattern. */\n\n    char *rule;\n\n    enum forward_routing routing;\n\n    char *geoip;\n\n    radix_tree_t *tree;\n\n    struct action_spec *action; /**< Action settings that might be shared with\n                                    the list entry before or after the current\n                                    one and can't be free'd willy nilly. */\n\n    struct url_actions *next;   /**< Next action section in file, or NULL. */\n};\n\nenum forwarder_type {\n//   /**< Don't use a SOCKS server, forward to a HTTP proxy directly */\n   SOCKS_NONE =  0,\n   /**< original SOCKS 4 protocol              */\n   SOCKS_4    = 40,\n   /**< SOCKS 4A, DNS resolution is done by the SOCKS server */\n   SOCKS_4A   = 41,\n   /**< SOCKS 5 with hostnames, DNS resolution is done by the SOCKS server */\n   SOCKS_5    = 50,\n   /**< Like SOCKS5, but uses non-standard Tor extensions (currently only optimistic data) */\n   SOCKS_5T,\n   /**<\n    * Don't use a SOCKS server, forward to the specified webserver.\n    * The difference to SOCKS_NONE is that a request line without\n    * full URL is sent.\n    */\n   FORWARD_WEBSERVER,\n};\n\n/*\n * Structure to hold the server socket and the information\n * required to make sure we only reuse the connection if\n * the host and forwarding settings are the same.\n */\nstruct reusable_connection\n{\n   jb_socket sfd;\n   int       in_use;\n   time_t    timestamp; /* XXX: rename? */\n\n   time_t    request_sent;\n   time_t    response_received;\n\n   /*\n    * Number of seconds after which this\n    * connection will no longer be reused.\n    */\n   unsigned int keep_alive_timeout;\n   /*\n    * Number of requests that were sent to this connection.\n    * This is currently only for debugging purposes.\n    */\n   unsigned int requests_sent_total;\n\n   char *host;\n   int  port;\n   enum forwarder_type forwarder_type;\n   char *gateway_host;\n   int  gateway_port;\n   char *forward_host;\n   int  forward_port;\n};\n\n\n/*\n * Flags for use in csp->flags\n */\n\n/**\n * Flag for csp->flags: Set if this client is processing data.\n * Cleared when the thread associated with this structure dies.\n */\n#define CSP_FLAG_ACTIVE     0x01U\n\n/**\n * Flag for csp->flags: Set if the server's reply is in \"chunked\"\n * transfer encoding\n */\n#define CSP_FLAG_CHUNKED    0x02U\n\n/**\n * Flag for csp->flags: Set if this request was enforced, although it would\n * normally have been blocked.\n */\n#define CSP_FLAG_FORCED     0x04U\n\n/**\n * Flag for csp->flags: Set if any modification to the body was done.\n */\n#define CSP_FLAG_MODIFIED   0x08U\n\n/**\n * Flag for csp->flags: Set if request was blocked.\n */\n#define CSP_FLAG_REJECTED   0x10U\n\n/**\n * Flag for csp->flags: Set if we are toggled on (FEATURE_TOGGLE).\n */\n#define CSP_FLAG_TOGGLED_ON 0x20U\n\n/**\n * Flag for csp->flags: Set if an acceptable Connection header\n * has already been set by the client.\n */\n#define CSP_FLAG_CLIENT_CONNECTION_HEADER_SET  0x00000040U\n\n/**\n * Flag for csp->flags: Set if an acceptable Connection header\n * has already been set by the server.\n */\n#define CSP_FLAG_SERVER_CONNECTION_HEADER_SET  0x00000080U\n\n/**\n * Flag for csp->flags: Signals header parsers whether they\n * are parsing server or client headers.\n */\n#define CSP_FLAG_CLIENT_HEADER_PARSING_DONE    0x00000100U\n\n/**\n * Flag for csp->flags: Set if adding the Host: header\n * isn't necessary.\n */\n#define CSP_FLAG_HOST_HEADER_IS_SET            0x00000200U\n\n/**\n * Flag for csp->flags: Set if filtering is disabled by X-Filter: No\n * XXX: As we now have tags we might as well ditch this.\n */\n#define CSP_FLAG_NO_FILTERING                  0x00000400U\n\n/**\n * Flag for csp->flags: Set the client IP has appended to\n * an already existing X-Forwarded-For header in which case\n * no new header has to be generated.\n */\n#define CSP_FLAG_X_FORWARDED_FOR_APPENDED      0x00000800U\n\n/**\n * Flag for csp->flags: Set if the server wants to keep\n * the connection alive.\n */\n#define CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE  0x00001000U\n\n/**\n * Flag for csp->flags: Set if the server specified the\n * content length.\n */\n#define CSP_FLAG_SERVER_CONTENT_LENGTH_SET     0x00002000U\n\n/**\n * Flag for csp->flags: Set if we know the content length,\n * either because the server set it, or we figured it out\n * on our own.\n */\n#define CSP_FLAG_CONTENT_LENGTH_SET            0x00004000U\n\n/**\n * Flag for csp->flags: Set if the client wants to keep\n * the connection alive.\n */\n#define CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE  0x00008000U\n\n/**\n * Flag for csp->flags: Set if we think we got the whole\n * client request and shouldn't read any additional data\n * coming from the client until the current request has\n * been dealt with.\n */\n#define CSP_FLAG_CLIENT_REQUEST_COMPLETELY_READ 0x00010000U\n\n/**\n * Flag for csp->flags: Set if the server promised us to\n * keep the connection open for a known number of seconds.\n */\n#define CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET  0x00020000U\n\n/**\n * Flag for csp->flags: Set if we think we can't reuse\n * the server socket. XXX: It's also set after sabotaging\n * pipelining attempts which is somewhat inconsistent with\n * the name.\n */\n#define CSP_FLAG_SERVER_SOCKET_TAINTED          0x00040000U\n\n/**\n * Flag for csp->flags: Set if the Proxy-Connection header\n * is among the server headers.\n */\n#define CSP_FLAG_SERVER_PROXY_CONNECTION_HEADER_SET 0x00080000U\n\n/**\n * Flag for csp->flags: Set if the client reused its connection.\n */\n#define CSP_FLAG_REUSED_CLIENT_CONNECTION           0x00100000U\n\n/**\n * Flag for csp->flags: Set if the supports deflate compression.\n */\n#define CSP_FLAG_CLIENT_SUPPORTS_DEFLATE            0x00200000U\n\n/**\n * Flag for csp->flags: Set if the content has been deflated by Privoxy\n */\n#define CSP_FLAG_BUFFERED_CONTENT_DEFLATED          0x00400000U\n\n/**\n * Flag for csp->flags: Set if we already read (parts of)\n * a pipelined request in which case the client obviously\n * isn't done talking.\n */\n#define CSP_FLAG_PIPELINED_REQUEST_WAITING          0x00800000U\n\n/**\n * Flag for csp->flags: Set if the client body is chunk-encoded\n */\n#define CSP_FLAG_CHUNKED_CLIENT_BODY                0x01000000U\n\n/**\n * Flag for csp->flags: Set if the client set the Expect header\n */\n#define CSP_FLAG_UNSUPPORTED_CLIENT_EXPECTATION     0x02000000U\n\n/**\n * Flag for csp->flags: Set if we answered the request ourselve.\n */\n#define CSP_FLAG_CRUNCHED                           0x04000000U\n\n#define CSP_FLAG_LOG_REQUEST                        0x08000000U\n\n\n/*\n * Flags for use in return codes of child processes\n */\n\n/**\n * Flag for process return code: Set if exiting process has been toggled\n * during its lifetime.\n */\n#define RC_FLAG_TOGGLED   0x10\n\n/**\n * Flag for process return code: Set if exiting process has blocked its\n * request.\n */\n#define RC_FLAG_BLOCKED   0x20\n\n/**\n * Maximum number of actions/filter files.  This limit is arbitrary - it's just used\n * to size an array.\n */\n#define MAX_AF_FILES 30\n\n/**\n * Maximum number of sockets to listen to.  This limit is arbitrary - it's just used\n * to size an array.\n */\n#define MAX_LISTENING_SOCKETS 10\n\nenum time_stage {\n    TIME_STAGE_INIT = 0,\n    TIME_STAGE_CLOSED,\n    TIME_STAGE_URL_RULE_MATCH_START,\n    TIME_STAGE_URL_RULE_MATCH_END,\n    TIME_STAGE_IP_RULE_MATCH_START,\n    TIME_STAGE_IP_RULE_MATCH_END,\n    TIME_STAGE_DNS_IP_RULE_MATCH_START,\n    TIME_STAGE_DNS_IP_RULE_MATCH_END,\n\n    TIME_STAGE_DNS_START,\n    TIME_STAGE_DNS_FAIL,\n    TIME_STAGE_DNS_END,\n    TIME_STAGE_REMOTE_START,\n    TIME_STAGE_REMOTE_CONNECTED,\n\n    TIME_STAGE_GLOBAL_MODE,\n    TIME_STAGE_NON_GLOBAL_MODE,\n\n    TIME_STAGE_PROXY_DNS_START,\n    TIME_STAGE_PROXY_DNS_FAIL,\n    TIME_STAGE_PROXY_DNS_END,\n    TIME_STAGE_PROXY_START,\n    TIME_STAGE_PROXY_CONNECTED,\n\n    TIME_STAGE_IPV6,\n\n    TIME_STAGE_COUNT\n};\n\nenum forward_stage {\n    FORWARD_STAGE_NONE = 0,\n    FORWARD_STAGE_URL,\n    FORWARD_STAGE_IP,\n    FORWARD_STAGE_DNS_POLLUTION,\n    FORWARD_STAGE_DNS_FAILURE,\n};\n\n/**\n * The state of a Privoxy processing thread.\n */\nstruct client_state\n{\n    /** The proxy's configuration */\n    struct configuration_spec * config;\n\n    /** The actions to perform on the current request */\n    struct current_action_spec  action[1];\n\n    /** socket to talk to client (web browser) */\n    jb_socket cfd;\n\n    /** Number of requests received on the client socket. */\n    unsigned int requests_received_total;\n\n    /** current connection to the server (may go through a proxy) */\n    struct reusable_connection server_connection;\n\n    /** Multi-purpose flag container, see CSP_FLAG_* above */\n    unsigned int flags;\n\n    /** Client PC's IP address, as reported by the accept() function.\n       As a string. */\n    char *ip_addr_str;\n#ifdef HAVE_RFC2553\n    /** Client PC's TCP address, as reported by the accept() function.\n       As a sockaddr. */\n    struct sockaddr_storage tcp_addr;\n#else\n    /** Client PC's IP address, as reported by the accept() function.\n       As a number. */\n    unsigned long ip_addr_long;\n#endif /* def HAVE_RFC2553 */\n\n    /** The URL that was requested */\n    struct http_request http[1];\n\n    // Time Logging\n    enum time_stage current_time_stage;\n    double time_stages[TIME_STAGE_COUNT];\n\n    /*\n    * The final forwarding settings.\n    * XXX: Currently this is only used for forward-override,\n    * so we can free the space in sweep.\n    */\n    struct forward_spec *fwd;\n    enum forward_stage current_forward_stage;\n    int is_ipv6;\n\n    char *rule;\n\n    enum forward_routing routing;\n\n    int forward_determined;\n\n    /** An I/O buffer used for buffering data read from the server */\n    /* XXX: should be renamed to server_iob */\n    struct iob iob[1];\n\n    /** An I/O buffer used for buffering data read from the client */\n    struct iob client_iob[1];\n\n    /** List of all headers for this request */\n    struct list headers[1];\n\n    /** List of all tags that apply to this request */\n    struct list tags[1];\n\n    /** MIME-Type key, see CT_* above */\n    unsigned int content_type;\n\n    /** Actions files associated with this client */\n    struct file_list *actions_list[MAX_AF_FILES];\n\n    /** pcrs job files. */\n    struct file_list *rlist[MAX_AF_FILES];\n\n    /** Length after content modification. */\n    unsigned long long content_length;\n\n    /* XXX: is this the right location? */\n\n    /** Expected length of content after which we\n    * should stop reading from the server socket.\n    */\n    unsigned long long expected_content_length;\n\n    /** Expected length of content after which we\n    *  should stop reading from the client socket.\n    */\n    unsigned long long expected_client_content_length;\n\n#ifdef FEATURE_TRUST\n\n    /** Trust file. */\n    struct file_list *tlist;\n\n#endif /* def FEATURE_TRUST */\n\n    /**\n    * Failure reason to embedded in the CGI error page,\n    * or NULL. Currently only used for socks errors.\n    */\n    char *error_message;\n};\n\nextern struct url_actions *po_url_rules;\nextern struct url_actions *po_ip_rules;\nextern struct url_actions *po_dns_ip_rules;\nextern struct url_actions *po_dns_ip_rules_tail;\n\n/**\n * List of client states so the main thread can keep\n * track of them and garbage collect their resources.\n */\nstruct client_states\n{\n   struct client_states *next;\n   struct client_state csp;\n};\n\nstruct log_client_states\n{\n    struct log_client_states *next;\n    struct client_state *csp;\n};\n\n/**\n * A function to add a header\n */\ntypedef jb_err (*add_header_func_ptr)(struct client_state *);\n\n/**\n * A function to process a header\n */\ntypedef jb_err (*parser_func_ptr    )(struct client_state *, char **);\n\n\n/**\n * List of available CGI functions.\n */\nstruct cgi_dispatcher\n{\n   /** The URL of the CGI, relative to the CGI root. */\n   const char * const name;\n\n   /** The handler function for the CGI */\n   jb_err    (* const handler)(struct client_state *csp, struct http_response *rsp, const struct map *parameters);\n\n   /** The description of the CGI, to appear on the main menu, or NULL to hide it. */\n   const char * const description;\n\n   /** A flag that indicates whether unintentional calls to this CGI can cause damage */\n   int harmless;\n};\n\n\n/**\n * A data file used by Privoxy.  Kept in a linked list.\n */\nstruct file_list\n{\n   /**\n    * This is a pointer to the data structures associated with the file.\n    * Read-only once the structure has been created.\n    */\n   void *f;\n\n   /**\n    * The unloader function.\n    * Normally NULL.  When we are finished with file (i.e. when we have\n    * loaded a new one), set to a pointer to an unloader function.\n    * Unloader will be called by sweep() (called from main loop) when\n    * all clients using this file are done.  This prevents threading\n    * problems.\n    */\n   void (*unloader)(void *);\n\n   /**\n    * Used internally by sweep().  Do not access from elsewhere.\n    */\n   int active;\n\n   /**\n    * File last-modified time, so we can check if file has been changed.\n    * Read-only once the structure has been created.\n    */\n   time_t lastmodified;\n\n   /**\n    * The full filename.\n    */\n   char * filename;\n\n   /**\n    * Pointer to next entry in the linked list of all \"file_list\"s.\n    * This linked list is so that sweep() can navigate it.\n    * Since sweep() can remove items from the list, we must be careful\n    * to only access this value from main thread (when we know sweep\n    * won't be running).\n    */\n   struct file_list *next;\n};\n\n\n#ifdef FEATURE_TRUST\n\n/**\n * The format of a trust file when loaded into memory.\n */\nstruct block_spec\n{\n   struct pattern_spec url[1]; /**< The URL pattern              */\n   int    reject;              /**< FIXME: Please document this! */\n   struct block_spec *next;    /**< Next entry in linked list    */\n};\n\n/**\n * Arbitrary limit for the number of trusted referrers.\n */\n#define MAX_TRUSTED_REFERRERS 512\n\n#endif /* def FEATURE_TRUST */\n\n\n/**\n * An IP address pattern.  Used to specify networks in the ACL.\n */\nstruct access_control_addr\n{\n#ifdef HAVE_RFC2553\n    struct sockaddr_storage addr; /* <The TCP address in network order. */\n    struct sockaddr_storage mask; /* <The TCP mask in network order. */\n#else\n    unsigned long addr;  /**< The IP address as an integer. */\n    unsigned long mask;  /**< The network mask as an integer. */\n    unsigned long port;  /**< The port number. */\n#endif /* HAVE_RFC2553 */\n};\n\n\n/**\n * How to forward a connection to a parent proxy.\n */\nstruct forward_spec\n{\n    /** URL pattern that this forward_spec is for. */\n    struct pattern_spec url[1];\n\n    /** Connection type.  Must be SOCKS_NONE, SOCKS_4, SOCKS_4A or SOCKS_5. */\n    enum forwarder_type type;\n\n    /** SOCKS server hostname.  Only valid if \"type\" is SOCKS_4 or SOCKS_4A. */\n    char *gateway_host;\n\n    /** SOCKS server port. */\n    int   gateway_port;\n\n    /** Parent HTTP proxy hostname, or NULL for none. */\n    char *forward_host;\n\n    /** Parent HTTP proxy port. */\n    int   forward_port;\n\n    /** Next entry in the linked list. */\n    struct forward_spec *next;\n\n    int is_default;\n\n    int should_unload;\n};\n\nextern struct forward_spec *proxy_list;\n\nextern struct forward_spec fwd_default[1]; /* Zero'ed due to being static. */\n\n/* Supported filter types */\nenum filter_type\n{\n   FT_CONTENT_FILTER       = 0,\n   FT_CLIENT_HEADER_FILTER = 1,\n   FT_SERVER_HEADER_FILTER = 2,\n   FT_CLIENT_HEADER_TAGGER = 3,\n   FT_SERVER_HEADER_TAGGER = 4,\n#ifdef FEATURE_EXTERNAL_FILTERS\n   FT_EXTERNAL_CONTENT_FILTER = 5,\n#endif\n   FT_INVALID_FILTER       = 42,\n};\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n#define MAX_FILTER_TYPES        6\n#else\n#define MAX_FILTER_TYPES        5\n#endif\n\n/**\n * This struct represents one filter (one block) from\n * the re_filterfile. If there is more than one filter\n * in the file, the file will be represented by a\n * chained list of re_filterfile specs.\n */\nstruct re_filterfile_spec\n{\n   char *name;                      /**< Name from FILTER: statement in re_filterfile. */\n   char *description;               /**< Description from FILTER: statement in re_filterfile. */\n   struct list patterns[1];         /**< The patterns from the re_filterfile. */\n   pcrs_job *joblist;               /**< The resulting compiled pcrs_jobs. */\n   enum filter_type type;           /**< Filter type (content, client-header, server-header). */\n   int dynamic;                     /**< Set to one if the pattern might contain variables\n                                         and has to be recompiled for every request. */\n   struct re_filterfile_spec *next; /**< The pointer for chaining. */\n};\n\n\n#ifdef FEATURE_ACL\n\n#define ACL_PERMIT   1  /**< Accept connection request */\n#define ACL_DENY     2  /**< Reject connection request */\n\n/**\n * An access control list (ACL) entry.\n *\n * This is a linked list.\n */\nstruct access_control_list\n{\n   struct access_control_addr src[1];  /**< Client IP address */\n   struct access_control_addr dst[1];  /**< Website or parent proxy IP address */\n#ifdef HAVE_RFC2553\n   int wildcard_dst;                   /** < dst address is wildcard */\n#endif\n\n   short action;                       /**< ACL_PERMIT or ACL_DENY */\n   struct access_control_list *next;   /**< The next entry in the ACL. */\n};\n\n#endif /* def FEATURE_ACL */\n\n\n/** Maximum number of loaders (actions, re_filter, ...) */\n#define NLOADERS 8\n\n\n/** configuration_spec::feature_flags: CGI actions editor. */\n#define RUNTIME_FEATURE_CGI_EDIT_ACTIONS             1U\n\n/** configuration_spec::feature_flags: Web-based toggle. */\n#define RUNTIME_FEATURE_CGI_TOGGLE                   2U\n\n/** configuration_spec::feature_flags: HTTP-header-based toggle. */\n#define RUNTIME_FEATURE_HTTP_TOGGLE                  4U\n\n/** configuration_spec::feature_flags: Split large forms to limit the number of GET arguments. */\n#define RUNTIME_FEATURE_SPLIT_LARGE_FORMS            8U\n\n/** configuration_spec::feature_flags: Check the host header for requests with host-less request lines. */\n#define RUNTIME_FEATURE_ACCEPT_INTERCEPTED_REQUESTS 16U\n\n/** configuration_spec::feature_flags: Don't allow to circumvent blocks with the force prefix. */\n#define RUNTIME_FEATURE_ENFORCE_BLOCKS              32U\n\n/** configuration_spec::feature_flags: Allow to block or redirect CGI requests. */\n#define RUNTIME_FEATURE_CGI_CRUNCHING               64U\n\n/** configuration_spec::feature_flags: Try to keep the connection to the server alive. */\n#define RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE      128U\n\n/** configuration_spec::feature_flags: Share outgoing connections between different client connections. */\n#define RUNTIME_FEATURE_CONNECTION_SHARING         256U\n\n/** configuration_spec::feature_flags: Pages blocked with +handle-as-empty-doc get a return status of 200 OK. */\n#define RUNTIME_FEATURE_EMPTY_DOC_RETURNS_OK       512U\n\n/** configuration_spec::feature_flags: Buffered content is sent compressed if the client supports it. */\n#define RUNTIME_FEATURE_COMPRESSION               1024U\n\n/** configuration_spec::feature_flags: Pipelined requests are served instead of being discarded. */\n#define RUNTIME_FEATURE_TOLERATE_PIPELINING       2048U\n\n/** configuration_spec::feature_flags: Proxy authentication headers are forwarded instead of removed. */\n#define RUNTIME_FEATURE_FORWARD_PROXY_AUTHENTICATION_HEADERS      4096U\n\n/**\n * Data loaded from the configuration file.\n *\n * (Anomaly: toggle is still handled through a global, not this structure)\n */\nstruct configuration_spec\n{\n   /** What to log */\n   int debug;\n\n   /** Nonzero to enable multithreading. */\n   int multi_threaded;\n\n   /** Bitmask of features that can be controlled through the config file. */\n   unsigned feature_flags;\n\n   /** The log file name. */\n   const char *logfile;\n\n   /** The config file directory. */\n   const char *confdir;\n\n    /** The mmdbpath. */\n    const char *mmdbpath;\n\n   /** The directory for customized CGI templates. */\n   const char *templdir;\n\n#ifdef FEATURE_EXTERNAL_FILTERS\n   /** The template used to create temporary files. */\n   const char *temporary_directory;\n#endif\n\n   /** The log file directory. */\n   const char *logdir;\n\n   /** The full paths to the actions files. */\n   const char *actions_file[MAX_AF_FILES];\n\n   /** The short names of the actions files. */\n   const char *actions_file_short[MAX_AF_FILES];\n\n   /** The administrator's email address */\n   char *admin_address;\n\n   /** A URL with info on this proxy */\n   char *proxy_info_url;\n\n   /** URL to the user manual (on our website or local copy) */\n   char *usermanual;\n\n   /** The file names of the pcre filter files. */\n   const char *re_filterfile[MAX_AF_FILES];\n\n   /** The short names of the pcre filter files. */\n   const char *re_filterfile_short[MAX_AF_FILES];\n\n   /**< List of ordered client header names. */\n   struct list ordered_client_headers[1];\n\n   /** The hostname to show on CGI pages, or NULL to use the real one. */\n   const char *hostname;\n\n   /** IP addresses to bind to.  Defaults to HADDR_DEFAULT == 127.0.0.1. */\n   const char *haddr[MAX_LISTENING_SOCKETS];\n\n   /** Ports to bind to.  Defaults to HADDR_PORT == 8118. */\n   int         hport[MAX_LISTENING_SOCKETS];\n\n   /** Size limit for IOB */\n   size_t buffer_limit;\n\n#ifdef FEATURE_TRUST\n\n   /** The file name of the trust file. */\n   const char * trustfile;\n\n   /** FIXME: DOCME: Document this. */\n   struct list trust_info[1];\n\n   /** FIXME: DOCME: Document this. */\n   struct pattern_spec *trust_list[MAX_TRUSTED_REFERRERS];\n\n#endif /* def FEATURE_TRUST */\n\n#ifdef FEATURE_ACL\n\n   /** The access control list (ACL). */\n   struct access_control_list *acl;\n\n#endif /* def FEATURE_ACL */\n\n   /** Information about parent proxies (forwarding). */\n   struct forward_spec *forward;\n\n   /** Number of retries in case a forwarded connection attempt fails */\n   int forwarded_connect_retries;\n\n   /** Maximum number of client connections. */\n   int max_client_connections;\n\n   /* Timeout when waiting on sockets for data to become available. */\n   int socket_timeout;\n\n#ifdef FEATURE_CONNECTION_KEEP_ALIVE\n   /* Maximum number of seconds after which an open connection will no longer be reused. */\n   unsigned int keep_alive_timeout;\n\n   /* Assumed server-side keep alive timeout if none is specified. */\n   unsigned int default_server_timeout;\n#endif\n\n#ifdef FEATURE_COMPRESSION\n   int compression_level;\n#endif\n\n   /** All options from the config file, HTML-formatted. */\n   char *proxy_args;\n\n   /** The configuration file object. */\n   struct file_list *config_file_list;\n\n   /** List of loaders */\n   int (*loaders[NLOADERS])(struct client_state *);\n\n};\n\nextern int global_mode;\n\n/** Calculates the number of elements in an array, using sizeof. */\n#define SZ(X)  (sizeof(X) / sizeof(*X))\n\n/** The force load URL prefix. Not behind an ifdef because\n  * it's always used for the show-status page. */\n#define FORCE_PREFIX \"/PRIVOXY-FORCE\"\n\n#ifdef FEATURE_NO_GIFS\n/** The MIME type for images (\"image/png\" or \"image/gif\"). */\n#define BUILTIN_IMAGE_MIMETYPE \"image/png\"\n#else\n#define BUILTIN_IMAGE_MIMETYPE \"image/gif\"\n#endif /* def FEATURE_NO_GIFS */\n\n\n/*\n * Hardwired URLs\n */\n\n/** URL for the Privoxy home page. */\n#define HOME_PAGE_URL     \"http://www.privoxy.org/\"\n\n/** URL for the Privoxy user manual. */\n#define USER_MANUAL_URL   HOME_PAGE_URL VERSION \"/user-manual/\"\n\n/** Prefix for actions help links  (append to USER_MANUAL_URL). */\n#define ACTIONS_HELP_PREFIX \"actions-file.html#\"\n\n/** Prefix for config option help links (append to USER_MANUAL_URL). */\n#define CONFIG_HELP_PREFIX  \"config.html#\"\n\n/*\n * The \"hosts\" to intercept and display CGI pages.\n * First one is a hostname only, second one can specify host and path.\n *\n * Notes:\n * 1) Do not specify the http: prefix\n * 2) CGI_SITE_2_PATH must not end with /, one will be added automatically.\n * 3) CGI_SITE_2_PATH must start with /, unless it is the empty string.\n */\n#define CGI_SITE_1_HOST \"p.p\"\n#define CGI_SITE_2_HOST \"config.privoxy.org\"\n#define CGI_SITE_2_PATH \"\"\n\n/**\n * The prefix for CGI pages.  Written out in generated HTML.\n * INCLUDES the trailing slash.\n */\n#define CGI_PREFIX  \"http://\" CGI_SITE_2_HOST CGI_SITE_2_PATH \"/\"\n\n#endif /* ndef PROJECT_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/radix.c",
    "content": "//\n//  radix.c\n//  ShadowPath\n//\n//  Created by LEI on 5/22/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#include <stdlib.h>\n#include <sys/types.h>\n#include \"radix.h\"\n\nstatic void *radix_alloc(radix_tree_t *tree);\n\nradix_tree_t *radix_tree_create() {\n    radix_tree_t *tree = (radix_tree_t *)malloc(sizeof(*tree));\n    if (!tree) {\n        return NULL;\n    }\n\n    tree->size = 0;\n    tree->root = (radix_node_t *)radix_alloc(tree);\n    if (!tree->root) {\n        return NULL;\n    }\n\n    tree->root->right = NULL;\n    tree->root->left = NULL;\n    tree->root->parent = NULL;\n    tree->root->value = RADIX_NO_VALUE;\n\n    return tree;\n}\n\n/* Need a 'mask' parameter is for storage of CIDR. */\nint radix32tree_insert(radix_tree_t *tree, uint32_t key,\n                       uint32_t mask, char value) {\n    uint32_t        bit;\n    radix_node_t    *node, *next;\n    bit = 0x80000000;\n    node = tree->root;\n    next = tree->root;\n\n    /* find a place in trie to insert */\n    while (bit & mask) {\n        if (key & bit) {\n            next = node->right;\n        } else {\n            next = node->left;\n        }\n\n        if (!next) {\n            break;\n        }\n        bit >>= 1;\n        node = next;\n    }\n\n    if (next) {\n        if (node->value != RADIX_NO_VALUE) {\n            return 1;   /* Return 1 when the node has been existed */\n        }\n\n        node->value = value;\n        return 0;\n    }\n\n    /* inserting value in trie creating all path components */\n    while (bit & mask) {\n        next = radix_alloc(tree);\n        if (!next) {\n            return -1;\n        }\n\n        next->right = NULL;\n        next->left = NULL;\n        next->parent = node;\n        next->value = RADIX_NO_VALUE;\n\n        if (key & bit) {\n            node->right = next;\n        } else {\n            node->left = next;\n        }\n\n        bit >>= 1;\n        node = next;\n    }\n\n    node->value = value;\n    return 0;\n}\n\nint radix32tree_delete(radix_tree_t *tree, uint32_t key, uint32_t mask) {\n    uint32_t        bit;\n    radix_node_t    *node, *tmp;\n\n    bit = 0x80000000;\n    node = tree->root;\n\n    while (node && (bit & mask)) {\n        if (key & bit) {\n            node = node->right;\n        } else {\n            node = node->left;\n        }\n        bit >>= 1;\n    }\n\n    if (!node || !node->parent) {\n        return -1;\n    }\n\n    if (node->right || node->left) {\n        if (node->value != RADIX_NO_VALUE) {\n            node->value = RADIX_NO_VALUE;\n            return 0;\n        }\n        return -1;\n    }\n\n    for ( ; ; ) {\n        if (node->parent->right == node) {\n            node->parent->right = NULL;\n        } else {\n            node->parent->left = NULL;\n        }\n\n        tmp = node;\n        node = node->parent;\n        free(tmp);\n\n        if (node->right || node->left) {\n            break;\n        }\n\n        if (node->value != RADIX_NO_VALUE) {\n            break;\n        }\n\n        if (node->parent == NULL) {\n            break;\n        }\n    }\n\n    return 0;\n}\n\nchar radix32tree_find(radix_tree_t *tree, uint32_t key) {\n    uint32_t        bit;\n    uint32_t        value;\n    radix_node_t    *node;\n\n    bit = 0x80000000;\n    value = RADIX_NO_VALUE;\n    if (NULL == tree) {\n        return value;\n    }\n    node = tree->root;\n\n    while (node) {\n        if (node->value != RADIX_NO_VALUE) {\n            value = node->value;\n        }\n\n        if (key & bit) {\n            node = node->right;\n        } else {\n            node = node->left;\n        }\n        bit >>= 1;\n    }\n\n    return value;\n}\n\nstatic void *radix_alloc(radix_tree_t *tree) {\n    char *p = (char *)malloc(sizeof(radix_node_t));\n    if (p) {\n        tree->size += sizeof(radix_node_t);\n    }\n    return p;\n}\n\nvoid radix_tree_free(radix_tree_t *tree) {\n    radix_node_t *node, *tmp;\n\n    node = tree->root;\n    for ( ; ; ) {\n        /* We are at the trie root and we have no more leaves,\n         * end of algorithm */\n        if (!node->left && !node->right && !node->parent) {\n            free(node);\n            break;\n        }\n\n        /* Traverse to the end of trie */\n        while (node->left || node->right) {\n            if (node->left) {\n                node = node->left;\n            } else {\n                node = node->right;\n            }\n        }\n\n        /* Found leaf node, free it */\n        if (node->parent->right == node) {\n            node->parent->right = NULL;\n        } else {\n            node->parent->left = NULL;\n        }\n        \n        tmp = node;\n        \n        /* Go up */\n        node = node->parent;\n        free(tmp);\n    }\n}"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/radix.h",
    "content": "//\n//  radix.h\n//  ShadowPath\n//\n//  Created by LEI on 5/22/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#ifndef radix_h\n#define radix_h\n\n#include <stdio.h>\n#include <stdint.h>\n\n#define RADIX_NO_VALUE      (uint32_t)0\n\ntypedef struct radix_node_st    radix_node_t;\n\nstruct radix_node_st {\n    radix_node_t    *right;\n    radix_node_t    *left;\n    radix_node_t    *parent;\n    char        value;\n};\n\ntypedef struct {\n    radix_node_t    *root;\n    size_t          size;\n} radix_tree_t;\n\nradix_tree_t *radix_tree_create();\n\nint radix32tree_insert(radix_tree_t *tree,\n                       uint32_t key, uint32_t mask, char value);\n\nint radix32tree_delete(radix_tree_t *tree,\n                       uint32_t key, uint32_t mask);\n\nchar radix32tree_find(radix_tree_t *tree, uint32_t key);\nvoid radix_tree_free(radix_tree_t *tree);\n\n#endif /* radix_h */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/sp_config.h",
    "content": "/* config.h.  Generated from config.h.in by configure.  */\n/* config.h.in.  Generated from configure.in by autoheader.  */\n#ifndef CONFIG_H_INCLUDED\n#define CONFIG_H_INCLUDED\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/acconfig.h,v $\n *\n * Purpose     :  This file should be the first thing included in every\n *                .c file.  (Before even system headers).  It contains\n *                #define statements for various features.  It was\n *                introduced because the compile command line started\n *                getting ludicrously long with feature defines.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n/*\n * Version number - Major (X._._)\n */\n#define VERSION_MAJOR 3\n\n/*\n * Version number - Minor (_.X._)\n */\n#define VERSION_MINOR 0\n\n/*\n * Version number - Point (_._.X)\n */\n#define VERSION_POINT 24\n\n/*\n * Version number, as a string\n */\n#define VERSION \"3.0.24\"\n\n/*\n * Status of the code: \"alpha\", \"beta\" or \"stable\".\n */\n#define CODE_STATUS \"stable\"\n\n/*\n * Should pcre be statically built in instead of linkling with libpcre?\n * (This is determined by configure depending on the availiability of\n * libpcre and user preferences).\n * Don't bother to change this here! Use configure instead.\n */\n#define FEATURE_DYNAMIC_PCRE 1\n\n/*\n * Should pcrs be statically built in instead of linkling with libpcrs?\n * (This is determined by configure depending on the availiability of\n * libpcrs and user preferences).\n * Don't bother to change this here! Use configure instead.\n */\n#define STATIC_PCRS 1\n\n/*\n * Allows the use of an ACL to control access to the proxy by IP address.\n */\n//#define FEATURE_ACL 1\n\n/*\n * Allow Privoxy to use accf_http(9) if supported.\n */\n/* #undef FEATURE_ACCEPT_FILTER */\n\n/*\n * Enables the web-based configuration (actionsfile) editor.  If you\n * have a shared proxy, you might want to turn this off.\n */\n//#define FEATURE_CGI_EDIT_ACTIONS 1\n\n/*\n * Locally redirect remote script-redirect URLs\n */\n#define FEATURE_FAST_REDIRECTS 1\n\n/*\n * Bypass filtering for 1 page only\n */\n#define FEATURE_FORCE_LOAD 1\n\n/*\n * Allow blocking using images as well as HTML.\n * If you do not define this then everything is blocked as HTML.\n *\n * Note that this is required if you want to use FEATURE_IMAGE_DETECT_MSIE.\n */\n//#define FEATURE_IMAGE_BLOCKING 1\n\n/*\n * Detect image requests automatically for MSIE.  Will fall back to\n * other image-detection methods (i.e. \"+image\" permission) for other\n * browsers.\n *\n * You must also define FEATURE_IMAGE_BLOCKING to use this feature.\n *\n * It detects the following header pair as an image request:\n *\n * User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)\n * Accept: * / *\n *\n * And the following as a HTML request:\n *\n * User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)\n * Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, * / *\n *\n * And no, I haven't got that backwards - IE is being weird.\n *\n * Known limitations:\n * 1) If you press shift-reload on a blocked HTML page, you get\n *    the image \"blocked\" page, not the HTML \"blocked\" page.\n * 2) Once an image \"blocked\" page has been sent, viewing it\n *    in it's own browser window *should* bring up the HTML\n *    \"blocked\" page, but it doesn't.  You need to clear the\n *    browser cache to get the HTML version again.\n *\n * These limitations are due to IE making inconsistent choices\n * about which \"Accept:\" header to send.\n */\n/* #undef FEATURE_IMAGE_DETECT_MSIE */\n\n/*\n * Use PNG instead of GIF for built-in images\n */\n/* #undef FEATURE_NO_GIFS */\n\n/*\n * Allow to shutdown Privoxy through the webinterface.\n */\n/* #undef FEATURE_GRACEFUL_TERMINATION */\n\n/*\n * Allow PCRE syntax in host patterns.\n */\n/* #undef FEATURE_EXTENDED_HOST_PATTERNS */\n\n/*\n * Allow filtering with scripts and programs.\n */\n/* #undef FEATURE_EXTERNAL_FILTERS */\n\n/*\n * Keep connections alive if possible.\n */\n#define FEATURE_CONNECTION_KEEP_ALIVE 1\n\n/*\n * Allow to share outgoing connections between incoming connections.\n */\n#define FEATURE_CONNECTION_SHARING 1\n\n/*\n * Use POSIX threads instead of native threads.\n */\n#define FEATURE_PTHREAD 1\n\n/*\n * Enables statistics function.\n */\n#define FEATURE_STATISTICS 1\n\n/*\n * Enable strptime() sanity checks.\n */\n/* #undef FEATURE_STRPTIME_SANITY_CHECKS */\n\n/*\n * Allow Privoxy to be \"disabled\" so it is just a normal non-blocking\n * non-anonymizing proxy.  This is useful if you're trying to access a\n * blocked or broken site - just change the setting in the config file,\n * or use the handy \"Disable\" menu option in the Windows GUI.\n */\n//#define FEATURE_TOGGLE 1\n\n/*\n * Allows the use of trust files.\n */\n//#define FEATURE_TRUST 1\n\n/*\n * Defined on Solaris only.  Makes the system libraries thread safe.\n */\n/* #undef _REENTRANT */\n\n/*\n * Defined on Solaris only.  Without this, many important functions are not\n * defined in the system headers.\n */\n/* #undef __EXTENSIONS__ */\n\n/*\n * Defined always.\n * FIXME: Don't know what it does or why we need it.\n * (presumably something to do with MultiThreading?)\n */\n#define __MT__ 1\n\n/* If the (nonstandard and thread-safe) function gethostbyname_r\n * is available, select which signature to use\n */\n/* #undef HAVE_GETHOSTBYNAME_R_6_ARGS */\n/* #undef HAVE_GETHOSTBYNAME_R_5_ARGS */\n/* #undef HAVE_GETHOSTBYNAME_R_3_ARGS */\n\n/* If the (nonstandard and thread-safe) function gethostbyaddr_r\n * is available, select which signature to use\n */\n/* #undef HAVE_GETHOSTBYADDR_R_8_ARGS */\n/* #undef HAVE_GETHOSTBYADDR_R_7_ARGS */\n/* #undef HAVE_GETHOSTBYADDR_R_5_ARGS */\n\n/* Defined if you have gmtime_r and localtime_r with a signature\n * of (struct time *, struct tm *)\n */\n#define HAVE_GMTIME_R 1\n#define HAVE_LOCALTIME_R 1\n\n/* Define to 'int' if <sys/socket.h> doesn't have it.\n */\n/* #undef socklen_t */\n\n/* Define if pcre.h must be included as <pcre/pcre.h>\n */\n/* #undef PCRE_H_IN_SUBDIR */\n\n/* Define if pcreposix.h must be included as <pcre/pcreposix.h>\n */\n/* #undef PCREPOSIX_H_IN_SUBDIR */\n\n\n/* Define to 1 to use compression through the zlib library. */\n/* #undef FEATURE_COMPRESSION */\n\n/* Define to dynamically link to pcre. */\n#define FEATURE_DYNAMIC_PCRE 1\n\n/* Define to 1 to allow to filter content with scripts and programs. */\n/* #undef FEATURE_EXTERNAL_FILTERS */\n\n/* Define to 1 to use zlib to decompress data before filtering. */\n#define FEATURE_ZLIB 1\n\n/* Define to 1 if you have the `access' function. */\n#define HAVE_ACCESS 1\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#define HAVE_ARPA_INET_H 1\n\n/* Define to 1 if you have the `atexit' function. */\n#define HAVE_ATEXIT 1\n\n/* Define to 1 if you have the `bcopy' function. */\n#define HAVE_BCOPY 1\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 have the <errno.h> header file. */\n#define HAVE_ERRNO_H 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 `getcwd' function. */\n#define HAVE_GETCWD 1\n\n/* Define to 1 if you have the `gethostbyaddr' function. */\n#define HAVE_GETHOSTBYADDR 1\n\n/* Define to 1 if you have the `gethostbyaddr_r' function. */\n/* #undef HAVE_GETHOSTBYADDR_R */\n\n/* Define to 1 if you have the `gethostbyname' function. */\n#define HAVE_GETHOSTBYNAME 1\n\n/* Define to 1 if you have the `gethostbyname_r' function. */\n/* #undef HAVE_GETHOSTBYNAME_R */\n\n/* Define to 1 if you have the `gettimeofday' function. */\n#define HAVE_GETTIMEOFDAY 1\n\n/* Define to 1 if you have the `inet_ntoa' function. */\n#define HAVE_INET_NTOA 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 `nsl' library (-lnsl). */\n/* #undef HAVE_LIBNSL */\n\n/* Define to 1 if you have the `ws2_32' library (-lws2_32). */\n/* #undef HAVE_LIBWS2_32 */\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 `memchr' function. */\n#define HAVE_MEMCHR 1\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 `memset' function. */\n#define HAVE_MEMSET 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 <netdb.h> header file. */\n#define HAVE_NETDB_H 1\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#define HAVE_NETINET_IN_H 1\n\n/* Define to 1 if you have the <OS.h> header file. */\n/* #undef HAVE_OS_H */\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the `putenv' function. */\n#define HAVE_PUTENV 1\n\n/* Define to 1 if you have the `random' function. */\n#define HAVE_RANDOM 1\n\n/* Define to 1 if you have the `regcomp' function. */\n#define HAVE_REGCOMP 1\n\n/* Define if RFC 2553 resolver functions like getaddrinfo(3) and\n   getnameinfo(3) present */\n#define HAVE_RFC2553 1\n\n/* Define to 1 if you have the `select' function. */\n#define HAVE_SELECT 1\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 `shutdown' function. */\n#define HAVE_SHUTDOWN 1\n\n/* Define to 1 if you have the `snprintf' function. */\n#define HAVE_SNPRINTF 1\n\n/* Define to 1 if you have the `socket' function. */\n#define HAVE_SOCKET 1\n\n/* Define to 1 if you have the <stddef.h> header file. */\n#define HAVE_STDDEF_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 `strchr' function. */\n#define HAVE_STRCHR 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 `strftime' function. */\n#define HAVE_STRFTIME 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 `strlcat' function. */\n#define HAVE_STRLCAT 1\n\n/* Define to 1 if you have the `strlcpy' function. */\n#define HAVE_STRLCPY 1\n\n/* Define to 1 if you have the `strptime' function. */\n#define HAVE_STRPTIME 1\n\n/* Define to 1 if you have the `strtoul' function. */\n#define HAVE_STRTOUL 1\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/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\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/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\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#define HAVE_SYS_WAIT_H 1\n\n/* Define to 1 if you have the `timegm' function. */\n#define HAVE_TIMEGM 1\n\n/* Define to 1 if you have the `tzset' function. */\n#define HAVE_TZSET 1\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"\"\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* The size of `char *', as computed by sizeof. */\n#define SIZEOF_CHAR_P 8\n\n/* The size of `int', as computed by sizeof. */\n#define SIZEOF_INT 4\n\n/* The size of `long', as computed by sizeof. */\n#define SIZEOF_LONG 8\n\n/* The size of `long long', as computed by sizeof. */\n#define SIZEOF_LONG_LONG 8\n\n/* The size of `size_t', as computed by sizeof. */\n#define SIZEOF_SIZE_T 8\n\n/* Define to statically link to internal outdated pcre on Windows. */\n/* #undef STATIC_PCRE */\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\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 if your <sys/time.h> declares `struct tm'. */\n/* #undef TM_IN_SYS_TIME */\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> does not define. */\n/* #undef pid_t */\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define to 'int' if <sys/socket.h> doesn't have it. */\n/* #undef socklen_t */\n\n/*\n * Defined always.\n * FIXME: Don't know what it does or why we need it.\n * (presumably something to do with ANSI Standard C?)\n */\n#ifndef __STDC__\n#define __STDC__ 1\n#endif /* ndef __STDC__ */\n\n/*\n * Need to set up this define only for the Pthreads library for\n * Win32, available from http://sources.redhat.com/pthreads-win32/\n */\n#if defined(FEATURE_PTHREAD) && defined(_WIN32)\n#define __CLEANUP_C\n#endif /* defined(FEATURE_PTHREAD) && defined(_WIN32) */\n\n/*\n * BEOS does not currently support POSIX threads.\n * This *should* be detected by ./configure, but let's be sure.\n */\n#if defined(FEATURE_PTHREAD) && defined(__BEOS__)\n#error BEOS does not support pthread - please run ./configure again with \"--disable-pthread\"\n\n#endif /* defined(FEATURE_PTHREAD) && defined(__BEOS__) */\n\n/*\n * On OpenBSD and maybe also FreeBSD, gcc doesn't define the cpp\n * symbol unix; it defines __unix__ and sometimes not even that:\n */\n#if ( defined(__unix__) || defined(__NetBSD__) ) && !defined(unix)\n#define unix 1\n#endif\n\n/*\n * It's too easy to accidentally use a Cygwin or MinGW32 version of config.h\n * under VC++, and it usually gives many weird error messages.  Let's make\n * the error messages understandable, by bailing out now.\n */\n#ifdef _MSC_VER\n#error For MS VC++, please use vc_config_winthreads.h or vc_config_pthreads.h.  You can usually do this by selecting the \"Build\", \"Clean\" menu option.\n#endif /* def _MSC_VER */\n\n#endif /* CONFIG_H_INCLUDED */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/ssplit.c",
    "content": "const char ssplit_rcs[] = \"$Id: ssplit.c,v 1.20 2012/07/23 12:47:01 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/ssplit.c,v $\n *\n * Purpose     :  A function to split a string at specified delimiters.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2012 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n\n#include \"ssplit.h\"\n#include \"miscutil.h\"\n\nconst char ssplit_h_rcs[] = SSPLIT_H_VERSION;\n\n\n/*********************************************************************\n *\n * Function    :  ssplit\n *\n * Description :  Split a string using delimiters in `delim'.  Results\n *                go into `vec'.\n *\n * Parameters  :\n *          1  :  str = string to split.  Will be split in place\n *                (i.e. do not free until you've finished with vec,\n *                previous contents will be trashed by the call).\n *          2  :  delim = array of delimiters (if NULL, uses \" \\t\").\n *          3  :  vec[] = results vector (aka. array) [out]\n *          4  :  vec_len = number of usable slots in the vector (aka. array size)\n *\n * Returns     :  -1 => Error: vec_len is too small to hold all the\n *                      data, or str == NULL.\n *                >=0 => the number of fields put in `vec'.\n *                On error, vec and str may still have been overwritten.\n *\n *********************************************************************/\nint ssplit(char *str, const char *delim, char *vec[], size_t vec_len)\n{\n   unsigned char is_delim[256];\n   unsigned char char_type;\n   int vec_count = 0;\n   enum char_type {\n      WANTED     = 0,\n      SEPARATOR  = 1,\n      TERMINATOR = 2,\n   };\n\n\n   if (!str)\n   {\n      return(-1);\n   }\n\n\n   /* Build is_delim array */\n\n   memset(is_delim, '\\0', sizeof(is_delim));\n\n   if (!delim)\n   {\n      delim = \" \\t\";  /* default field separators */\n   }\n\n   while (*delim)\n   {\n      is_delim[(unsigned)(unsigned char)*delim++] = SEPARATOR;\n   }\n\n   is_delim[(unsigned)(unsigned char)'\\0'] = TERMINATOR;\n   is_delim[(unsigned)(unsigned char)'\\n'] = TERMINATOR;\n\n\n   /* Parse string */\n\n   /* Skip leading separators. XXX: Why do they matter? */\n   while (is_delim[(unsigned)(unsigned char)*str] == SEPARATOR)\n   {\n      str++;\n   }\n\n   /* The first pointer is the beginning of string */\n   if (is_delim[(unsigned)(unsigned char)*str] == WANTED)\n   {\n      /*\n       * The first character in this field is not a\n       * delimiter or the end of string, so save it.\n       */\n      if (vec_count >= vec_len)\n      {\n         return(-1); /* overflow */\n      }\n      vec[vec_count++] = str;\n   }\n\n   while ((char_type = is_delim[(unsigned)(unsigned char)*str]) != TERMINATOR)\n   {\n      if (char_type == SEPARATOR)\n      {\n         /* the char is a separator */\n\n         /* null terminate the substring */\n         *str++ = '\\0';\n\n         /* Check if we want to save this field */\n         if (is_delim[(unsigned)(unsigned char)*str] == WANTED)\n         {\n            /*\n             * The first character in this field is not a\n             * delimiter or the end of string. So save it.\n             */\n            if (vec_count >= vec_len)\n            {\n               return(-1); /* overflow */\n            }\n            vec[vec_count++] = str;\n         }\n      }\n      else\n      {\n         str++;\n      }\n   }\n   /* null terminate the substring */\n   /* XXX: this shouldn't be necessary, so assert that it isn't. */\n   assert(*str == '\\0');\n   *str = '\\0';\n\n   return(vec_count);\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/ssplit.h",
    "content": "#ifndef SSPLIT_H_INCLUDED\n#define SSPLIT_H_INCLUDED\n#define SSPLIT_H_VERSION \"$Id: ssplit.h,v 1.12 2013/11/24 14:23:28 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/ssplit.h,v $\n *\n * Purpose     :  A function to split a string at specified deliminters.\n *\n * Copyright   :  Written by and Copyright (C) 2001 the SourceForge\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\nextern int ssplit(char *str, const char *delim, char *vec[], size_t vec_len);\n\n/* Revision control strings from this header and associated .c file */\nextern const char ssplit_rcs[];\nextern const char ssplit_h_rcs[];\n\n#endif /* ndef SSPLIT_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/urlmatch.c",
    "content": "const char urlmatch_rcs[] = \"$Id: urlmatch.c,v 1.86 2015/12/27 12:47:17 fabiankeil Exp $\";\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.c,v $\n *\n * Purpose     :  Declares functions to match URLs against URL\n *                patterns.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2014\n *                the Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"sp_config.h\"\n\n#ifndef _WIN32\n#include <stdio.h>\n#include <sys/types.h>\n#endif\n\n#include <stdlib.h>\n#include <ctype.h>\n#include <assert.h>\n#include <string.h>\n\n#if !defined(_WIN32) && !defined(__OS2__)\n#include <unistd.h>\n#endif\n\n#include \"project.h\"\n#include \"urlmatch.h\"\n#include \"ssplit.h\"\n#include \"miscutil.h\"\n#include \"errlog.h\"\n\nconst char urlmatch_h_rcs[] = URLMATCH_H_VERSION;\n\nenum regex_anchoring\n{\n   NO_ANCHORING,\n   LEFT_ANCHORED,\n   RIGHT_ANCHORED,\n   RIGHT_ANCHORED_HOST\n};\nstatic jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern);\n\n/*********************************************************************\n *\n * Function    :  free_http_request\n *\n * Description :  Freez a http_request structure\n *\n * Parameters  :\n *          1  :  http = points to a http_request structure to free\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_http_request(struct http_request *http)\n{\n   assert(http);\n\n   freez(http->cmd);\n   freez(http->ocmd);\n   freez(http->gpc);\n   freez(http->host);\n   freez(http->url);\n   freez(http->hostport);\n   freez(http->path);\n   freez(http->ver);\n   freez(http->host_ip_addr_str);\n   freez(http->remote_host_ip_addr_str);\n#ifndef FEATURE_EXTENDED_HOST_PATTERNS\n   freez(http->dbuffer);\n   freez(http->dvec);\n   http->dcount = 0;\n#endif\n}\n\n\n#ifndef FEATURE_EXTENDED_HOST_PATTERNS\n/*********************************************************************\n *\n * Function    :  init_domain_components\n *\n * Description :  Splits the domain name so we can compare it\n *                against wildcards. It used to be part of\n *                parse_http_url, but was separated because the\n *                same code is required in chat in case of\n *                intercepted requests.\n *\n * Parameters  :\n *          1  :  http = pointer to the http structure to hold elements.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_PARSE on malformed command/URL\n *                             or >100 domains deep.\n *\n *********************************************************************/\njb_err init_domain_components(struct http_request *http)\n{\n   char *vec[BUFFER_SIZE];\n   size_t size;\n   char *p;\n\n   http->dbuffer = strdup_or_die(http->host);\n\n   /* map to lower case */\n   for (p = http->dbuffer; *p ; p++)\n   {\n      *p = (char)privoxy_tolower(*p);\n   }\n\n   /* split the domain name into components */\n   http->dcount = ssplit(http->dbuffer, \".\", vec, SZ(vec));\n\n   if (http->dcount <= 0)\n   {\n      /*\n       * Error: More than SZ(vec) components in domain\n       *    or: no components in domain\n       */\n      log_error(LOG_LEVEL_ERROR, \"More than SZ(vec) components in domain or none at all.\");\n      return JB_ERR_PARSE;\n   }\n\n   /* save a copy of the pointers in dvec */\n   size = (size_t)http->dcount * sizeof(*http->dvec);\n\n   http->dvec = malloc_or_die(size);\n\n   memcpy(http->dvec, vec, size);\n\n   return JB_ERR_OK;\n}\n#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */\n\n\n/*********************************************************************\n *\n * Function    :  url_requires_percent_encoding\n *\n * Description :  Checks if an URL contains invalid characters\n *                according to RFC 3986 that should be percent-encoded.\n *                Does not verify whether or not the passed string\n *                actually is a valid URL.\n *\n * Parameters  :\n *          1  :  url = URL to check\n *\n * Returns     :  True in case of valid URLs, false otherwise\n *\n *********************************************************************/\nint url_requires_percent_encoding(const char *url)\n{\n   static const char allowed_characters[128] = {\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0', '\\0',\n      '\\0', '\\0', '\\0', '!',  '\\0', '#',  '$',  '%',  '&',  '\\'',\n      '(',  ')',  '*',  '+',  ',',  '-',  '.',  '/',  '0',  '1',\n      '2',  '3',  '4',  '5',  '6',  '7',  '8',  '9',  ':',  ';',\n      '\\0', '=',  '\\0', '?',  '@',  'A',  'B',  'C',  'D',  'E',\n      'F',  'G',  'H',  'I',  'J',  'K',  'L',  'M',  'N',  'O',\n      'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',  'X',  'Y',\n      'Z',  '[',  '\\0', ']',  '\\0', '_',  '\\0', 'a',  'b',  'c',\n      'd',  'e',  'f',  'g',  'h',  'i',  'j',  'k',  'l',  'm',\n      'n',  'o',  'p',  'q',  'r',  's',  't',  'u',  'v',  'w',\n      'x',  'y',  'z',  '\\0', '\\0', '\\0', '~',  '\\0'\n   };\n\n   while (*url != '\\0')\n   {\n      const unsigned int i = (unsigned char)*url++;\n      if (i >= sizeof(allowed_characters) || '\\0' == allowed_characters[i])\n      {\n         return TRUE;\n      }\n   }\n\n   return FALSE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_http_url\n *\n * Description :  Parse out the host and port from the URL.  Find the\n *                hostname & path, port (if ':'), and/or password (if '@')\n *\n * Parameters  :\n *          1  :  url = URL (or is it URI?) to break down\n *          2  :  http = pointer to the http structure to hold elements.\n *                       Must be initialized with valid values (like NULLs).\n *          3  :  require_protocol = Whether or not URLs without\n *                                   protocol are acceptable.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_PARSE on malformed command/URL\n *                             or >100 domains deep.\n *\n *********************************************************************/\njb_err parse_http_url(const char *url, struct http_request *http, int require_protocol)\n{\n   int host_available = 1; /* A proxy can dream. */\n\n   /*\n    * Save our initial URL\n    */\n   http->url = strdup_or_die(url);\n\n   /*\n    * Check for * URI. If found, we're done.\n    */\n   if (*http->url == '*')\n   {\n      http->path = strdup_or_die(\"*\");\n      http->hostport = strdup_or_die(\"\");\n      if (http->url[1] != '\\0')\n      {\n         return JB_ERR_PARSE;\n      }\n      return JB_ERR_OK;\n   }\n\n\n   /*\n    * Split URL into protocol,hostport,path.\n    */\n   {\n      char *buf;\n      char *url_noproto;\n      char *url_path;\n\n      buf = strdup_or_die(url);\n\n      /* Find the start of the URL in our scratch space */\n      url_noproto = buf;\n      if (strncmpic(url_noproto, \"http://\",  7) == 0)\n      {\n         url_noproto += 7;\n      }\n      else if (strncmpic(url_noproto, \"https://\", 8) == 0)\n      {\n         /*\n          * Should only happen when called from cgi_show_url_info().\n          */\n         url_noproto += 8;\n         http->ssl = 1;\n      }\n      else if (*url_noproto == '/')\n      {\n        /*\n         * Short request line without protocol and host.\n         * Most likely because the client's request\n         * was intercepted and redirected into Privoxy.\n         */\n         http->host = NULL;\n         host_available = 0;\n      }\n      else if (require_protocol)\n      {\n         freez(buf);\n         return JB_ERR_PARSE;\n      }\n\n      url_path = strchr(url_noproto, '/');\n      if (url_path != NULL)\n      {\n         /*\n          * Got a path.\n          *\n          * NOTE: The following line ignores the path for HTTPS URLS.\n          * This means that you get consistent behaviour if you type a\n          * https URL in and it's parsed by the function.  (When the\n          * URL is actually retrieved, SSL hides the path part).\n          */\n         http->path = strdup_or_die(http->ssl ? \"/\" : url_path);\n         *url_path = '\\0';\n         http->hostport = strdup_or_die(url_noproto);\n      }\n      else\n      {\n         /*\n          * Repair broken HTTP requests that don't contain a path,\n          * or CONNECT requests\n          */\n         http->path = strdup_or_die(\"/\");\n         http->hostport = strdup_or_die(url_noproto);\n      }\n\n      freez(buf);\n   }\n\n   if (!host_available)\n   {\n      /* Without host, there is nothing left to do here */\n      return JB_ERR_OK;\n   }\n\n   /*\n    * Split hostport into user/password (ignored), host, port.\n    */\n   {\n      char *buf;\n      char *host;\n      char *port;\n\n      buf = strdup_or_die(http->hostport);\n\n      /* check if url contains username and/or password */\n      host = strchr(buf, '@');\n      if (host != NULL)\n      {\n         /* Contains username/password, skip it and the @ sign. */\n         host++;\n      }\n      else\n      {\n         /* No username or password. */\n         host = buf;\n      }\n\n      /* Move after hostname before port number */\n      if (*host == '[')\n      {\n         /* Numeric IPv6 address delimited by brackets */\n         host++;\n         port = strchr(host, ']');\n\n         if (port == NULL)\n         {\n            /* Missing closing bracket */\n            freez(buf);\n            return JB_ERR_PARSE;\n         }\n\n         *port++ = '\\0';\n\n         if (*port == '\\0')\n         {\n            port = NULL;\n         }\n         else if (*port != ':')\n         {\n            /* Garbage after closing bracket */\n            freez(buf);\n            return JB_ERR_PARSE;\n         }\n      }\n      else\n      {\n         /* Plain non-escaped hostname */\n         port = strchr(host, ':');\n      }\n\n      /* check if url contains port */\n      if (port != NULL)\n      {\n         /* Contains port */\n         char *endptr;\n         long parsed_port;\n         /* Terminate hostname and point to start of port string */\n         *port++ = '\\0';\n         parsed_port = strtol(port, &endptr, 10);\n         if ((parsed_port <= 0) || (parsed_port > 65535) || (*endptr != '\\0'))\n         {\n            log_error(LOG_LEVEL_ERROR, \"Invalid port in URL: %s.\", url);\n            freez(buf);\n            return JB_ERR_PARSE;\n         }\n         http->port = (int)parsed_port;\n      }\n      else\n      {\n         /* No port specified. */\n         http->port = (http->ssl ? 443 : 80);\n      }\n\n      http->host = strdup_or_die(host);\n\n      freez(buf);\n   }\n\n#ifdef FEATURE_EXTENDED_HOST_PATTERNS\n   return JB_ERR_OK;\n#else\n   /* Split domain name so we can compare it against wildcards */\n   return init_domain_components(http);\n#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  unknown_method\n *\n * Description :  Checks whether a method is unknown.\n *\n * Parameters  :\n *          1  :  method = points to a http method\n *\n * Returns     :  TRUE if it's unknown, FALSE otherwise.\n *\n *********************************************************************/\nstatic int unknown_method(const char *method)\n{\n   static const char * const known_http_methods[] = {\n      /* Basic HTTP request type */\n      \"GET\", \"HEAD\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\", \"TRACE\", \"CONNECT\",\n      /* webDAV extensions (RFC2518) */\n      \"PROPFIND\", \"PROPPATCH\", \"MOVE\", \"COPY\", \"MKCOL\", \"LOCK\", \"UNLOCK\",\n      /*\n       * Microsoft webDAV extension for Exchange 2000.  See:\n       * http://lists.w3.org/Archives/Public/w3c-dist-auth/2002JanMar/0001.html\n       * http://msdn.microsoft.com/library/en-us/wss/wss/_webdav_methods.asp\n       */\n      \"BCOPY\", \"BMOVE\", \"BDELETE\", \"BPROPFIND\", \"BPROPPATCH\",\n      /*\n       * Another Microsoft webDAV extension for Exchange 2000.  See:\n       * http://systems.cs.colorado.edu/grunwald/MobileComputing/Papers/draft-cohen-gena-p-base-00.txt\n       * http://lists.w3.org/Archives/Public/w3c-dist-auth/2002JanMar/0001.html\n       * http://msdn.microsoft.com/library/en-us/wss/wss/_webdav_methods.asp\n       */\n      \"SUBSCRIBE\", \"UNSUBSCRIBE\", \"NOTIFY\", \"POLL\",\n      /*\n       * Yet another WebDAV extension, this time for\n       * Web Distributed Authoring and Versioning (RFC3253)\n       */\n      \"VERSION-CONTROL\", \"REPORT\", \"CHECKOUT\", \"CHECKIN\", \"UNCHECKOUT\",\n      \"MKWORKSPACE\", \"UPDATE\", \"LABEL\", \"MERGE\", \"BASELINE-CONTROL\", \"MKACTIVITY\",\n      /*\n       * The PATCH method is defined by RFC5789, the format of the\n       * actual patch in the body depends on the application, but from\n       * Privoxy's point of view it doesn't matter.\n       */\n      \"PATCH\",\n   };\n   int i;\n\n   for (i = 0; i < SZ(known_http_methods); i++)\n   {\n      if (0 == strcmpic(method, known_http_methods[i]))\n      {\n         return FALSE;\n      }\n   }\n\n   return TRUE;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  normalize_http_version\n *\n * Description :  Take a supported HTTP version string and remove\n *                leading zeroes etc., reject unsupported versions.\n *\n *                This is an explicit RFC 2616 (3.1) MUST and\n *                RFC 7230 mandates that intermediaries send their\n *                own HTTP-version in forwarded messages.\n *\n * Parameters  :\n *          1  :  http_version = HTTP version string\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_PARSE if the HTTP version is unsupported\n *\n *********************************************************************/\njb_err static normalize_http_version(char *http_version)\n{\n   unsigned int major_version;\n   unsigned int minor_version;\n\n   if (2 != sscanf(http_version, \"HTTP/%u.%u\", &major_version, &minor_version))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Unsupported HTTP version: %s\", http_version);\n      return JB_ERR_PARSE;\n   }\n\n   if (major_version != 1 || (minor_version != 0 && minor_version != 1))\n   {\n      log_error(LOG_LEVEL_ERROR, \"The only supported HTTP \"\n         \"versions are 1.0 and 1.1. This rules out: %s\", http_version);\n      return JB_ERR_PARSE;\n   }\n\n   assert(strlen(http_version) >= 8);\n   snprintf(http_version, 9, \"HTTP/%u.%u\", major_version, minor_version);\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_http_request\n *\n * Description :  Parse out the host and port from the URL.  Find the\n *                hostname & path, port (if ':'), and/or password (if '@')\n *\n * Parameters  :\n *          1  :  req = HTTP request line to break down\n *          2  :  http = pointer to the http structure to hold elements\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_CGI_PARAMS on malformed command/URL\n *                                  or >100 domains deep.\n *\n *********************************************************************/\njb_err parse_http_request(const char *req, struct http_request *http)\n{\n   char *buf;\n   char *v[3];\n   int n;\n   jb_err err;\n\n   memset(http, '\\0', sizeof(*http));\n\n   buf = strdup_or_die(req);\n\n   n = ssplit(buf, \" \\r\\n\", v, SZ(v));\n   if (n != 3)\n   {\n      freez(buf);\n      return JB_ERR_PARSE;\n   }\n\n   /*\n    * Fail in case of unknown methods\n    * which we might not handle correctly.\n    *\n    * XXX: There should be a config option\n    * to forward requests with unknown methods\n    * anyway. Most of them don't need special\n    * steps.\n    */\n   if (unknown_method(v[0]))\n   {\n      log_error(LOG_LEVEL_ERROR, \"Unknown HTTP method detected: %s\", v[0]);\n      freez(buf);\n      return JB_ERR_PARSE;\n   }\n\n   if (JB_ERR_OK != normalize_http_version(v[2]))\n   {\n      freez(buf);\n      return JB_ERR_PARSE;\n   }\n\n   http->ssl = !strcmpic(v[0], \"CONNECT\");\n\n   err = parse_http_url(v[1], http, !http->ssl);\n   if (err)\n   {\n      freez(buf);\n      return err;\n   }\n\n   /*\n    * Copy the details into the structure\n    */\n   http->cmd = strdup_or_die(req);\n   http->gpc = strdup_or_die(v[0]);\n   http->ver = strdup_or_die(v[2]);\n   http->ocmd = strdup_or_die(http->cmd);\n\n   freez(buf);\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  compile_pattern\n *\n * Description :  Compiles a host, domain or TAG pattern.\n *\n * Parameters  :\n *          1  :  pattern = The pattern to compile.\n *          2  :  anchoring = How the regex should be modified\n *                            before compilation. Can be either\n *                            one of NO_ANCHORING, LEFT_ANCHORED,\n *                            RIGHT_ANCHORED or RIGHT_ANCHORED_HOST.\n *          3  :  url     = In case of failures, the spec member is\n *                          logged and the structure freed.\n *          4  :  regex   = Where the compiled regex should be stored.\n *\n * Returns     :  JB_ERR_OK - Success\n *                JB_ERR_MEMORY - Out of memory\n *                JB_ERR_PARSE - Cannot parse regex\n *\n *********************************************************************/\nstatic jb_err compile_pattern(const char *pattern, enum regex_anchoring anchoring,\n                              struct pattern_spec *url, regex_t **regex)\n{\n   int errcode;\n   char rebuf[BUFFER_SIZE];\n   const char *fmt = NULL;\n\n   assert(pattern);\n   assert(strlen(pattern) < sizeof(rebuf) - 2);\n\n   if (pattern[0] == '\\0')\n   {\n      *regex = NULL;\n      return JB_ERR_OK;\n   }\n\n   switch (anchoring)\n   {\n      case NO_ANCHORING:\n         fmt = \"%s\";\n         break;\n      case RIGHT_ANCHORED:\n         fmt = \"%s$\";\n         break;\n      case RIGHT_ANCHORED_HOST:\n         fmt = \"%s\\\\.?$\";\n         break;\n      case LEFT_ANCHORED:\n         fmt = \"^%s\";\n         break;\n      default:\n         log_error(LOG_LEVEL_FATAL,\n            \"Invalid anchoring in compile_pattern %d\", anchoring);\n   }\n\n   *regex = zalloc(sizeof(**regex));\n   if (NULL == *regex)\n   {\n      free_pattern_spec(url);\n      return JB_ERR_MEMORY;\n   }\n\n   snprintf(rebuf, sizeof(rebuf), fmt, pattern);\n\n   errcode = pcre_regcomp(*regex, rebuf, (REG_EXTENDED|REG_NOSUB|REG_ICASE));\n\n   if (errcode)\n   {\n      size_t errlen = pcre_regerror(errcode, *regex, rebuf, sizeof(rebuf));\n      if (errlen > (sizeof(rebuf) - (size_t)1))\n      {\n         errlen = sizeof(rebuf) - (size_t)1;\n      }\n      rebuf[errlen] = '\\0';\n      log_error(LOG_LEVEL_ERROR, \"error compiling %s from %s: %s\",\n         pattern, url->spec, rebuf);\n      free_pattern_spec(url);\n\n      return JB_ERR_PARSE;\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  compile_url_pattern\n *\n * Description :  Compiles the three parts of an URL pattern.\n *\n * Parameters  :\n *          1  :  url = Target pattern_spec to be filled in.\n *          2  :  buf = The url pattern to compile. Will be messed up.\n *\n * Returns     :  JB_ERR_OK - Success\n *                JB_ERR_MEMORY - Out of memory\n *                JB_ERR_PARSE - Cannot parse regex\n *\n *********************************************************************/\nstatic jb_err compile_url_pattern(struct pattern_spec *url, char *buf)\n{\n   char *p;\n\n   p = strchr(buf, '/');\n   if (NULL != p)\n   {\n      /*\n       * Only compile the regex if it consists of more than\n       * a single slash, otherwise it wouldn't affect the result.\n       */\n      if (p[1] != '\\0')\n      {\n         /*\n          * XXX: does it make sense to compile the slash at the beginning?\n          */\n         jb_err err = compile_pattern(p, LEFT_ANCHORED, url, &url->pattern.url_spec.preg);\n\n         if (JB_ERR_OK != err)\n         {\n            return err;\n         }\n      }\n      *p = '\\0';\n   }\n\n   /*\n    * IPv6 numeric hostnames can contain colons, thus we need\n    * to delimit the hostname before the real port separator.\n    * As brackets are already used in the hostname pattern,\n    * we use angle brackets ('<', '>') instead.\n    */\n   if ((buf[0] == '<') && (NULL != (p = strchr(buf + 1, '>'))))\n   {\n      *p++ = '\\0';\n      buf++;\n\n      if (*p == '\\0')\n      {\n         /* IPv6 address without port number */\n         p = NULL;\n      }\n      else if (*p != ':')\n      {\n         /* Garbage after address delimiter */\n         return JB_ERR_PARSE;\n      }\n   }\n   else\n   {\n      p = strchr(buf, ':');\n   }\n\n   if (NULL != p)\n   {\n      *p++ = '\\0';\n      url->pattern.url_spec.port_list = strdup_or_die(p);\n   }\n   else\n   {\n      url->pattern.url_spec.port_list = NULL;\n   }\n\n   if (buf[0] != '\\0')\n   {\n      return compile_host_pattern(url, buf);\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n#ifdef FEATURE_EXTENDED_HOST_PATTERNS\n/*********************************************************************\n *\n * Function    :  compile_host_pattern\n *\n * Description :  Parses and compiles a host pattern.\n *\n * Parameters  :\n *          1  :  url = Target pattern_spec to be filled in.\n *          2  :  host_pattern = Host pattern to compile.\n *\n * Returns     :  JB_ERR_OK - Success\n *                JB_ERR_MEMORY - Out of memory\n *                JB_ERR_PARSE - Cannot parse regex\n *\n *********************************************************************/\nstatic jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern)\n{\n   return compile_pattern(host_pattern, RIGHT_ANCHORED_HOST, url, &url->pattern.url_spec.host_regex);\n}\n\n#else\n\n/*********************************************************************\n *\n * Function    :  compile_host_pattern\n *\n * Description :  Parses and \"compiles\" an old-school host pattern.\n *\n * Parameters  :\n *          1  :  url = Target pattern_spec to be filled in.\n *          2  :  host_pattern = Host pattern to parse.\n *\n * Returns     :  JB_ERR_OK - Success\n *                JB_ERR_PARSE - Cannot parse regex\n *\n *********************************************************************/\nstatic jb_err compile_host_pattern(struct pattern_spec *url, const char *host_pattern)\n{\n   char *v[150];\n   size_t size;\n   char *p;\n\n   /*\n    * Parse domain part\n    */\n   if (host_pattern[strlen(host_pattern) - 1] == '.')\n   {\n      url->pattern.url_spec.unanchored |= ANCHOR_RIGHT;\n   }\n   if (host_pattern[0] == '.')\n   {\n      url->pattern.url_spec.unanchored |= ANCHOR_LEFT;\n   }\n\n   /*\n    * Split domain into components\n    */\n   url->pattern.url_spec.dbuffer = strdup_or_die(host_pattern);\n\n   /*\n    * Map to lower case\n    */\n   for (p = url->pattern.url_spec.dbuffer; *p ; p++)\n   {\n      *p = (char)privoxy_tolower(*p);\n   }\n\n   /*\n    * Split the domain name into components\n    */\n   url->pattern.url_spec.dcount = ssplit(url->pattern.url_spec.dbuffer, \".\", v, SZ(v));\n\n   if (url->pattern.url_spec.dcount < 0)\n   {\n      free_pattern_spec(url);\n      return JB_ERR_PARSE;\n   }\n   else if (url->pattern.url_spec.dcount != 0)\n   {\n      /*\n       * Save a copy of the pointers in dvec\n       */\n      size = (size_t)url->pattern.url_spec.dcount * sizeof(*url->pattern.url_spec.dvec);\n\n      url->pattern.url_spec.dvec = malloc_or_die(size);\n\n      memcpy(url->pattern.url_spec.dvec, v, size);\n   }\n   /*\n    * else dcount == 0 in which case we needn't do anything,\n    * since dvec will never be accessed and the pattern will\n    * match all domains.\n    */\n   return JB_ERR_OK;\n}\n\n\n/*********************************************************************\n *\n * Function    :  simplematch\n *\n * Description :  String matching, with a (greedy) '*' wildcard that\n *                stands for zero or more arbitrary characters and\n *                character classes in [], which take both enumerations\n *                and ranges.\n *\n * Parameters  :\n *          1  :  pattern = pattern for matching\n *          2  :  text    = text to be matched\n *\n * Returns     :  0 if match, else nonzero\n *\n *********************************************************************/\nstatic int simplematch(const char *pattern, const char *text)\n{\n   const unsigned char *pat = (const unsigned char *)pattern;\n   const unsigned char *txt = (const unsigned char *)text;\n   const unsigned char *fallback = pat;\n   int wildcard = 0;\n\n   unsigned char lastchar = 'a';\n   unsigned i;\n   unsigned char charmap[32];\n\n   while (*txt)\n   {\n\n      /* EOF pattern but !EOF text? */\n      if (*pat == '\\0')\n      {\n         if (wildcard)\n         {\n            pat = fallback;\n         }\n         else\n         {\n            return 1;\n         }\n      }\n\n      /* '*' in the pattern?  */\n      if (*pat == '*')\n      {\n\n         /* The pattern ends afterwards? Speed up the return. */\n         if (*++pat == '\\0')\n         {\n            return 0;\n         }\n\n         /* Else, set wildcard mode and remember position after '*' */\n         wildcard = 1;\n         fallback = pat;\n      }\n\n      /* Character range specification? */\n      if (*pat == '[')\n      {\n         memset(charmap, '\\0', sizeof(charmap));\n\n         while (*++pat != ']')\n         {\n            if (!*pat)\n            {\n               return 1;\n            }\n            else if (*pat == '-')\n            {\n               if ((*++pat == ']') || *pat == '\\0')\n               {\n                  return(1);\n               }\n               for (i = lastchar; i <= *pat; i++)\n               {\n                  charmap[i / 8] |= (unsigned char)(1 << (i % 8));\n               }\n            }\n            else\n            {\n               charmap[*pat / 8] |= (unsigned char)(1 << (*pat % 8));\n               lastchar = *pat;\n            }\n         }\n      } /* -END- if Character range specification */\n\n\n      /*\n       * Char match, or char range match?\n       */\n      if ((*pat == *txt)\n       || (*pat == '?')\n       || ((*pat == ']') && (charmap[*txt / 8] & (1 << (*txt % 8)))))\n      {\n         /*\n          * Success: Go ahead\n          */\n         pat++;\n      }\n      else if (!wildcard)\n      {\n         /*\n          * No match && no wildcard: No luck\n          */\n         return 1;\n      }\n      else if (pat != fallback)\n      {\n         /*\n          * Increment text pointer if in char range matching\n          */\n         if (*pat == ']')\n         {\n            txt++;\n         }\n         /*\n          * Wildcard mode && nonmatch beyond fallback: Rewind pattern\n          */\n         pat = fallback;\n         /*\n          * Restart matching from current text pointer\n          */\n         continue;\n      }\n      txt++;\n   }\n\n   /* Cut off extra '*'s */\n   if (*pat == '*') pat++;\n\n   /* If this is the pattern's end, fine! */\n   return(*pat);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  simple_domaincmp\n *\n * Description :  Domain-wise Compare fqdn's.  The comparison is\n *                both left- and right-anchored.  The individual\n *                domain names are compared with simplematch().\n *                This is only used by domain_match.\n *\n * Parameters  :\n *          1  :  pv = array of patterns to compare\n *          2  :  fv = array of domain components to compare\n *          3  :  len = length of the arrays (both arrays are the\n *                      same length - if they weren't, it couldn't\n *                      possibly be a match).\n *\n * Returns     :  0 => domains are equivalent, else no match.\n *\n *********************************************************************/\nstatic int simple_domaincmp(char **pv, char **fv, int len)\n{\n   int n;\n\n   for (n = 0; n < len; n++)\n   {\n      if (simplematch(pv[n], fv[n]))\n      {\n         return 1;\n      }\n   }\n\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  domain_match\n *\n * Description :  Domain-wise Compare fqdn's. Governed by the bimap in\n *                p.pattern->unachored, the comparison is un-, left-,\n *                right-anchored, or both.\n *                The individual domain names are compared with\n *                simplematch().\n *\n * Parameters  :\n *          1  :  p = a domain that may contain a '*' as a wildcard.\n *          2  :  fqdn = domain name against which the patterns are compared.\n *\n * Returns     :  0 => domains are equivalent, else no match.\n *\n *********************************************************************/\nstatic int domain_match(const struct pattern_spec *p, const struct http_request *fqdn)\n{\n   char **pv, **fv;  /* vectors  */\n   int    plen, flen;\n   int unanchored = p->pattern.url_spec.unanchored & (ANCHOR_RIGHT | ANCHOR_LEFT);\n\n   plen = p->pattern.url_spec.dcount;\n   flen = fqdn->dcount;\n\n   if (flen < plen)\n   {\n      /* fqdn is too short to match this pattern */\n      return 1;\n   }\n\n   pv   = p->pattern.url_spec.dvec;\n   fv   = fqdn->dvec;\n\n   if (unanchored == ANCHOR_LEFT)\n   {\n      /*\n       * Right anchored.\n       *\n       * Convert this into a fully anchored pattern with\n       * the fqdn and pattern the same length\n       */\n      fv += (flen - plen); /* flen - plen >= 0 due to check above */\n      return simple_domaincmp(pv, fv, plen);\n   }\n   else if (unanchored == 0)\n   {\n      /* Fully anchored, check length */\n      if (flen != plen)\n      {\n         return 1;\n      }\n      return simple_domaincmp(pv, fv, plen);\n   }\n   else if (unanchored == ANCHOR_RIGHT)\n   {\n      /* Left anchored, ignore all extra in fqdn */\n      return simple_domaincmp(pv, fv, plen);\n   }\n   else\n   {\n      /* Unanchored */\n      int n;\n      int maxn = flen - plen;\n      for (n = 0; n <= maxn; n++)\n      {\n         if (!simple_domaincmp(pv, fv, plen))\n         {\n            return 0;\n         }\n         /*\n          * Doesn't match from start of fqdn\n          * Try skipping first part of fqdn\n          */\n         fv++;\n      }\n      return 1;\n   }\n\n}\n#endif /* def FEATURE_EXTENDED_HOST_PATTERNS */\n\n\n/*********************************************************************\n *\n * Function    :  create_pattern_spec\n *\n * Description :  Creates a \"pattern_spec\" structure from a string.\n *                When finished, free with free_pattern_spec().\n *\n * Parameters  :\n *          1  :  pattern = Target pattern_spec to be filled in.\n *                          Will be zeroed before use.\n *          2  :  buf = Source pattern, null terminated.  NOTE: The\n *                      contents of this buffer are destroyed by this\n *                      function.  If this function succeeds, the\n *                      buffer is copied to pattern->spec.  If this\n *                      function fails, the contents of the buffer\n *                      are lost forever.\n *\n * Returns     :  JB_ERR_OK - Success\n *                JB_ERR_PARSE - Cannot parse regex (Detailed message\n *                               written to system log)\n *\n *********************************************************************/\njb_err create_pattern_spec(struct pattern_spec *pattern, char *buf)\n{\n   static const struct\n   {\n      /** The tag pattern prefix to match */\n      const char *prefix;\n\n      /** The length of the prefix to match */\n      const size_t prefix_length;\n\n      /** The pattern flag */\n      const unsigned flag;\n   } tag_pattern[] = {\n      { \"TAG:\",              4, PATTERN_SPEC_TAG_PATTERN},\n      { \"NO-REQUEST-TAG:\",  15, PATTERN_SPEC_NO_REQUEST_TAG_PATTERN},\n      { \"NO-RESPONSE-TAG:\", 16, PATTERN_SPEC_NO_RESPONSE_TAG_PATTERN}\n   };\n   int i;\n\n   assert(pattern);\n   assert(buf);\n\n   memset(pattern, '\\0', sizeof(*pattern));\n\n   /* Remember the original specification for the CGI pages. */\n   pattern->spec = strdup_or_die(buf);\n\n   /* Check if it's a tag pattern */\n   for (i = 0; i < SZ(tag_pattern); i++)\n   {\n      if (0 == strncmpic(pattern->spec, tag_pattern[i].prefix, tag_pattern[i].prefix_length))\n      {\n         /* The regex starts after the prefix */\n         const char *tag_regex = buf + tag_pattern[i].prefix_length;\n\n         pattern->flags |= tag_pattern[i].flag;\n\n         return compile_pattern(tag_regex, NO_ANCHORING, pattern,\n            &pattern->pattern.tag_regex);\n      }\n   }\n\n   /* If it isn't a tag pattern it must be an URL pattern. */\n   pattern->flags |= PATTERN_SPEC_URL_PATTERN;\n\n   return compile_url_pattern(pattern, buf);\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  free_pattern_spec\n *\n * Description :  Called from the \"unloaders\".  Freez the pattern\n *                structure elements.\n *\n * Parameters  :\n *          1  :  pattern = pointer to a pattern_spec structure.\n *\n * Returns     :  N/A\n *\n *********************************************************************/\nvoid free_pattern_spec(struct pattern_spec *pattern)\n{\n   if (pattern == NULL) return;\n\n   freez(pattern->spec);\n#ifdef FEATURE_EXTENDED_HOST_PATTERNS\n   if (pattern->pattern.url_spec.host_regex)\n   {\n      regfree(pattern->pattern.url_spec.host_regex);\n      freez(pattern->pattern.url_spec.host_regex);\n   }\n#else\n   freez(pattern->pattern.url_spec.dbuffer);\n   freez(pattern->pattern.url_spec.dvec);\n   pattern->pattern.url_spec.dcount = 0;\n#endif /* ndef FEATURE_EXTENDED_HOST_PATTERNS */\n   freez(pattern->pattern.url_spec.port_list);\n   if (pattern->pattern.url_spec.preg)\n   {\n      pcre_regfree(pattern->pattern.url_spec.preg);\n      freez(pattern->pattern.url_spec.preg);\n   }\n   if (pattern->pattern.tag_regex)\n   {\n      pcre_regfree(pattern->pattern.tag_regex);\n      freez(pattern->pattern.tag_regex);\n   }\n}\n\n\n/*********************************************************************\n *\n * Function    :  port_matches\n *\n * Description :  Compares a port against a port list.\n *\n * Parameters  :\n *          1  :  port      = The port to check.\n *          2  :  port_list = The list of port to compare with.\n *\n * Returns     :  TRUE for yes, FALSE otherwise.\n *\n *********************************************************************/\nstatic int port_matches(const int port, const char *port_list)\n{\n   return ((NULL == port_list) || match_portlist(port_list, port));\n}\n\n\n/*********************************************************************\n *\n * Function    :  host_matches\n *\n * Description :  Compares a host against a host pattern.\n *\n * Parameters  :\n *          1  :  url = The URL to match\n *          2  :  pattern = The URL pattern\n *\n * Returns     :  TRUE for yes, FALSE otherwise.\n *\n *********************************************************************/\nstatic int host_matches(const struct http_request *http,\n                        const struct pattern_spec *pattern)\n{\n   assert(http->host != NULL);\n#ifdef FEATURE_EXTENDED_HOST_PATTERNS\n   return ((NULL == pattern->pattern.url_spec.host_regex)\n      || (0 == regexec(pattern->pattern.url_spec.host_regex, http->host, 0, NULL, 0)));\n#else\n   return ((NULL == pattern->pattern.url_spec.dbuffer) || (0 == domain_match(pattern, http)));\n#endif\n}\n\n\n/*********************************************************************\n *\n * Function    :  path_matches\n *\n * Description :  Compares a path against a path pattern.\n *\n * Parameters  :\n *          1  :  path = The path to match\n *          2  :  pattern = The URL pattern\n *\n * Returns     :  TRUE for yes, FALSE otherwise.\n *\n *********************************************************************/\nstatic int path_matches(const char *path, const struct pattern_spec *pattern)\n{\n   return ((NULL == pattern->pattern.url_spec.preg)\n      || (0 == pcre_regexec(pattern->pattern.url_spec.preg, path, 0, NULL, 0)));\n}\n\n\n/*********************************************************************\n *\n * Function    :  url_match\n *\n * Description :  Compare a URL against a URL pattern.\n *\n * Parameters  :\n *          1  :  pattern = a URL pattern\n *          2  :  url = URL to match\n *\n * Returns     :  Nonzero if the URL matches the pattern, else 0.\n *\n *********************************************************************/\nint url_match(const struct pattern_spec *pattern,\n              const struct http_request *http)\n{\n   if (!(pattern->flags & PATTERN_SPEC_URL_PATTERN))\n   {\n      /* It's not an URL pattern and thus shouldn't be matched against URLs */\n      return 0;\n   }\n\n   return (port_matches(http->port, pattern->pattern.url_spec.port_list)\n      && host_matches(http, pattern) && path_matches(http->path, pattern));\n\n}\n\nint ip_match(const struct pattern_spec *pattern,\n              const struct http_request *http)\n{\n    if (!(pattern->flags & PATTERN_SPEC_URL_PATTERN))\n    {\n        /* It's not an URL pattern and thus shouldn't be matched against URLs */\n        return 0;\n    }\n\n    return (port_matches(http->port, pattern->pattern.url_spec.port_list)\n            && host_matches(http, pattern) && path_matches(http->path, pattern));\n    \n}\n\n\n/*********************************************************************\n *\n * Function    :  match_portlist\n *\n * Description :  Check if a given number is covered by a comma\n *                separated list of numbers and ranges (a,b-c,d,..)\n *\n * Parameters  :\n *          1  :  portlist = String with list\n *          2  :  port = port to check\n *\n * Returns     :  0 => no match\n *                1 => match\n *\n *********************************************************************/\nint match_portlist(const char *portlist, int port)\n{\n   char *min, *max, *next, *portlist_copy;\n\n   min = portlist_copy = strdup_or_die(portlist);\n\n   /*\n    * Zero-terminate first item and remember offset for next\n    */\n   if (NULL != (next = strchr(portlist_copy, (int) ',')))\n   {\n      *next++ = '\\0';\n   }\n\n   /*\n    * Loop through all items, checking for match\n    */\n   while (NULL != min)\n   {\n      if (NULL == (max = strchr(min, (int) '-')))\n      {\n         /*\n          * No dash, check for equality\n          */\n         if (port == atoi(min))\n         {\n            freez(portlist_copy);\n            return(1);\n         }\n      }\n      else\n      {\n         /*\n          * This is a range, so check if between min and max,\n          * or, if max was omitted, between min and 65K\n          */\n         *max++ = '\\0';\n         if (port >= atoi(min) && port <= (atoi(max) ? atoi(max) : 65535))\n         {\n            freez(portlist_copy);\n            return(1);\n         }\n\n      }\n\n      /*\n       * Jump to next item\n       */\n      min = next;\n\n      /*\n       * Zero-terminate next item and remember offset for n+1\n       */\n      if ((NULL != next) && (NULL != (next = strchr(next, (int) ','))))\n      {\n         *next++ = '\\0';\n      }\n   }\n\n   freez(portlist_copy);\n   return 0;\n\n}\n\n\n/*********************************************************************\n *\n * Function    :  parse_forwarder_address\n *\n * Description :  Parse out the host and port from a forwarder address.\n *\n * Parameters  :\n *          1  :  address = The forwarder address to parse.\n *          2  :  hostname = Used to return the hostname. NULL on error.\n *          3  :  port = Used to return the port. Untouched if no port\n *                       is specified.\n *\n * Returns     :  JB_ERR_OK on success\n *                JB_ERR_MEMORY on out of memory\n *                JB_ERR_PARSE on malformed address.\n *\n *********************************************************************/\njb_err parse_forwarder_address(char *address, char **hostname, int *port)\n{\n   char *p = address;\n\n   if ((*address == '[') && (NULL == strchr(address, ']')))\n   {\n      /* XXX: Should do some more validity checks here. */\n      return JB_ERR_PARSE;\n   }\n\n   *hostname = strdup_or_die(address);\n\n   if ((**hostname == '[') && (NULL != (p = strchr(*hostname, ']'))))\n   {\n      *p++ = '\\0';\n      memmove(*hostname, (*hostname + 1), (size_t)(p - *hostname));\n      if (*p == ':')\n      {\n         *port = (int)strtol(++p, NULL, 0);\n      }\n   }\n   else if (NULL != (p = strchr(*hostname, ':')))\n   {\n      *p++ = '\\0';\n      *port = (int)strtol(p, NULL, 0);\n   }\n\n   return JB_ERR_OK;\n\n}\n\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/Privoxy/urlmatch.h",
    "content": "#ifndef URLMATCH_H_INCLUDED\n#define URLMATCH_H_INCLUDED\n#define URLMATCH_H_VERSION \"$Id: urlmatch.h,v 1.21 2013/11/24 14:25:19 fabiankeil Exp $\"\n/*********************************************************************\n *\n * File        :  $Source: /cvsroot/ijbswa/current/urlmatch.h,v $\n *\n * Purpose     :  Declares functions to match URLs against URL\n *                patterns.\n *\n * Copyright   :  Written by and Copyright (C) 2001-2002, 2006 the\n *                Privoxy team. http://www.privoxy.org/\n *\n *                Based on the Internet Junkbuster originally written\n *                by and Copyright (C) 1997 Anonymous Coders and\n *                Junkbusters Corporation.  http://www.junkbusters.com\n *\n *                This program is free software; you can redistribute it\n *                and/or modify it under the terms of the GNU General\n *                Public License as published by the Free Software\n *                Foundation; either version 2 of the License, or (at\n *                your option) any later version.\n *\n *                This program is distributed in the hope that it will\n *                be useful, but WITHOUT ANY WARRANTY; without even the\n *                implied warranty of MERCHANTABILITY or FITNESS FOR A\n *                PARTICULAR PURPOSE.  See the GNU General Public\n *                License for more details.\n *\n *                The GNU General Public License should be included with\n *                this file.  If not, you can view it at\n *                http://www.gnu.org/copyleft/gpl.html\n *                or write to the Free Software Foundation, Inc., 59\n *                Temple Place - Suite 330, Boston, MA  02111-1307, USA.\n *\n *********************************************************************/\n\n\n#include \"project.h\"\n\nextern void free_http_request(struct http_request *http);\n#ifndef FEATURE_EXTENDED_HOST_PATTERNS\nextern jb_err init_domain_components(struct http_request *http);\n#endif\nextern jb_err parse_http_request(const char *req, struct http_request *http);\nextern jb_err parse_http_url(const char *url,\n                             struct http_request *http,\n                             int require_protocol);\nextern int url_requires_percent_encoding(const char *url);\n\n#define REQUIRE_PROTOCOL 1\n\nextern int url_match(const struct pattern_spec *pattern,\n                     const struct http_request *http);\n\nextern jb_err create_pattern_spec(struct pattern_spec *url, char *buf);\nextern void free_pattern_spec(struct pattern_spec *url);\nextern int match_portlist(const char *portlist, int port);\nextern jb_err parse_forwarder_address(char *address, char **hostname, int *port);\n\n\n/* Revision control strings from this header and associated .c file */\nextern const char urlmatch_rcs[];\nextern const char urlmatch_h_rcs[];\n\n#endif /* ndef URLMATCH_H_INCLUDED */\n\n/*\n  Local Variables:\n  tab-width: 3\n  end:\n*/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/ShadowPath.h",
    "content": "//\n//  ShadowPath.h\n//  ShadowPath\n//\n//  Created by LEI on 5/16/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for ShadowPath.\nFOUNDATION_EXPORT double ShadowPathVersionNumber;\n\n//! Project version string for ShadowPath.\nFOUNDATION_EXPORT const unsigned char ShadowPathVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <ShadowPath/PublicHeader.h>\n\n#import \"jcc.h\"\n#import \"project.h\"\n#import \"shadowsocks.h\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/LICENSE",
    "content": "\n  LICENSE ISSUES\n  ==============\n\n  The OpenSSL toolkit stays under a dual license, i.e. both the conditions of\n  the OpenSSL License and the original SSLeay license apply to the toolkit.\n  See below for the actual license texts. Actually both licenses are BSD-style\n  Open Source licenses. In case of any license issues related to OpenSSL\n  please contact openssl-core@openssl.org.\n\n  OpenSSL License\n  ---------------\n\n/* ====================================================================\n * Copyright (c) 1998-2008 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n Original SSLeay License\n -----------------------\n\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n * \n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n * \n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from \n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n * \n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/aes.h",
    "content": "/* crypto/aes/aes.h -*- mode:C; c-file-style: \"eay\" -*- */\n/* ====================================================================\n * Copyright (c) 1998-2002 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n */\n\n#ifndef HEADER_AES_H\n# define HEADER_AES_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_AES\n#  error AES is disabled.\n# endif\n\n# include <stddef.h>\n\n# define AES_ENCRYPT     1\n# define AES_DECRYPT     0\n\n/*\n * Because array size can't be a const in C, the following two are macros.\n * Both sizes are in bytes.\n */\n# define AES_MAXNR 14\n# define AES_BLOCK_SIZE 16\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* This should be a hidden type, but EVP requires that the size be known */\nstruct aes_key_st {\n# ifdef AES_LONG\n    unsigned long rd_key[4 * (AES_MAXNR + 1)];\n# else\n    unsigned int rd_key[4 * (AES_MAXNR + 1)];\n# endif\n    int rounds;\n};\ntypedef struct aes_key_st AES_KEY;\n\nconst char *AES_options(void);\n\nint AES_set_encrypt_key(const unsigned char *userKey, const int bits,\n                        AES_KEY *key);\nint AES_set_decrypt_key(const unsigned char *userKey, const int bits,\n                        AES_KEY *key);\n\nint private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,\n                                AES_KEY *key);\nint private_AES_set_decrypt_key(const unsigned char *userKey, const int bits,\n                                AES_KEY *key);\n\nvoid AES_encrypt(const unsigned char *in, unsigned char *out,\n                 const AES_KEY *key);\nvoid AES_decrypt(const unsigned char *in, unsigned char *out,\n                 const AES_KEY *key);\n\nvoid AES_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                     const AES_KEY *key, const int enc);\nvoid AES_cbc_encrypt(const unsigned char *in, unsigned char *out,\n                     size_t length, const AES_KEY *key,\n                     unsigned char *ivec, const int enc);\nvoid AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,\n                        size_t length, const AES_KEY *key,\n                        unsigned char *ivec, int *num, const int enc);\nvoid AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,\n                      size_t length, const AES_KEY *key,\n                      unsigned char *ivec, int *num, const int enc);\nvoid AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,\n                      size_t length, const AES_KEY *key,\n                      unsigned char *ivec, int *num, const int enc);\nvoid AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,\n                        size_t length, const AES_KEY *key,\n                        unsigned char *ivec, int *num);\nvoid AES_ctr128_encrypt(const unsigned char *in, unsigned char *out,\n                        size_t length, const AES_KEY *key,\n                        unsigned char ivec[AES_BLOCK_SIZE],\n                        unsigned char ecount_buf[AES_BLOCK_SIZE],\n                        unsigned int *num);\n/* NB: the IV is _two_ blocks long */\nvoid AES_ige_encrypt(const unsigned char *in, unsigned char *out,\n                     size_t length, const AES_KEY *key,\n                     unsigned char *ivec, const int enc);\n/* NB: the IV is _four_ blocks long */\nvoid AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,\n                        size_t length, const AES_KEY *key,\n                        const AES_KEY *key2, const unsigned char *ivec,\n                        const int enc);\n\nint AES_wrap_key(AES_KEY *key, const unsigned char *iv,\n                 unsigned char *out,\n                 const unsigned char *in, unsigned int inlen);\nint AES_unwrap_key(AES_KEY *key, const unsigned char *iv,\n                   unsigned char *out,\n                   const unsigned char *in, unsigned int inlen);\n\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif                          /* !HEADER_AES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/asn1.h",
    "content": "/* crypto/asn1/asn1.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_ASN1_H\n# define HEADER_ASN1_H\n\n# include <time.h>\n# include \"openssl/e_os2.h\"\n# ifndef OPENSSL_NO_BIO\n#  include \"openssl/bio.h\"\n# endif\n# include \"openssl/stack.h\"\n# include \"openssl/safestack.h\"\n\n# include \"openssl/symhacks.h\"\n\n# include \"openssl/ossl_typ.h\"\n# ifndef OPENSSL_NO_DEPRECATED\n#  include \"openssl/bn.h\"\n# endif\n\n# ifdef OPENSSL_BUILD_SHLIBCRYPTO\n#  undef OPENSSL_EXTERN\n#  define OPENSSL_EXTERN OPENSSL_EXPORT\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define V_ASN1_UNIVERSAL                0x00\n# define V_ASN1_APPLICATION              0x40\n# define V_ASN1_CONTEXT_SPECIFIC         0x80\n# define V_ASN1_PRIVATE                  0xc0\n\n# define V_ASN1_CONSTRUCTED              0x20\n# define V_ASN1_PRIMITIVE_TAG            0x1f\n# define V_ASN1_PRIMATIVE_TAG            0x1f\n\n# define V_ASN1_APP_CHOOSE               -2/* let the recipient choose */\n# define V_ASN1_OTHER                    -3/* used in ASN1_TYPE */\n# define V_ASN1_ANY                      -4/* used in ASN1 template code */\n\n# define V_ASN1_NEG                      0x100/* negative flag */\n\n# define V_ASN1_UNDEF                    -1\n# define V_ASN1_EOC                      0\n# define V_ASN1_BOOLEAN                  1 /**/\n# define V_ASN1_INTEGER                  2\n# define V_ASN1_NEG_INTEGER              (2 | V_ASN1_NEG)\n# define V_ASN1_BIT_STRING               3\n# define V_ASN1_OCTET_STRING             4\n# define V_ASN1_NULL                     5\n# define V_ASN1_OBJECT                   6\n# define V_ASN1_OBJECT_DESCRIPTOR        7\n# define V_ASN1_EXTERNAL                 8\n# define V_ASN1_REAL                     9\n# define V_ASN1_ENUMERATED               10\n# define V_ASN1_NEG_ENUMERATED           (10 | V_ASN1_NEG)\n# define V_ASN1_UTF8STRING               12\n# define V_ASN1_SEQUENCE                 16\n# define V_ASN1_SET                      17\n# define V_ASN1_NUMERICSTRING            18 /**/\n# define V_ASN1_PRINTABLESTRING          19\n# define V_ASN1_T61STRING                20\n# define V_ASN1_TELETEXSTRING            20/* alias */\n# define V_ASN1_VIDEOTEXSTRING           21 /**/\n# define V_ASN1_IA5STRING                22\n# define V_ASN1_UTCTIME                  23\n# define V_ASN1_GENERALIZEDTIME          24 /**/\n# define V_ASN1_GRAPHICSTRING            25 /**/\n# define V_ASN1_ISO64STRING              26 /**/\n# define V_ASN1_VISIBLESTRING            26/* alias */\n# define V_ASN1_GENERALSTRING            27 /**/\n# define V_ASN1_UNIVERSALSTRING          28 /**/\n# define V_ASN1_BMPSTRING                30\n/* For use with d2i_ASN1_type_bytes() */\n# define B_ASN1_NUMERICSTRING    0x0001\n# define B_ASN1_PRINTABLESTRING  0x0002\n# define B_ASN1_T61STRING        0x0004\n# define B_ASN1_TELETEXSTRING    0x0004\n# define B_ASN1_VIDEOTEXSTRING   0x0008\n# define B_ASN1_IA5STRING        0x0010\n# define B_ASN1_GRAPHICSTRING    0x0020\n# define B_ASN1_ISO64STRING      0x0040\n# define B_ASN1_VISIBLESTRING    0x0040\n# define B_ASN1_GENERALSTRING    0x0080\n# define B_ASN1_UNIVERSALSTRING  0x0100\n# define B_ASN1_OCTET_STRING     0x0200\n# define B_ASN1_BIT_STRING       0x0400\n# define B_ASN1_BMPSTRING        0x0800\n# define B_ASN1_UNKNOWN          0x1000\n# define B_ASN1_UTF8STRING       0x2000\n# define B_ASN1_UTCTIME          0x4000\n# define B_ASN1_GENERALIZEDTIME  0x8000\n# define B_ASN1_SEQUENCE         0x10000\n/* For use with ASN1_mbstring_copy() */\n# define MBSTRING_FLAG           0x1000\n# define MBSTRING_UTF8           (MBSTRING_FLAG)\n# define MBSTRING_ASC            (MBSTRING_FLAG|1)\n# define MBSTRING_BMP            (MBSTRING_FLAG|2)\n# define MBSTRING_UNIV           (MBSTRING_FLAG|4)\n# define SMIME_OLDMIME           0x400\n# define SMIME_CRLFEOL           0x800\n# define SMIME_STREAM            0x1000\n    struct X509_algor_st;\nDECLARE_STACK_OF(X509_ALGOR)\n\n# define DECLARE_ASN1_SET_OF(type)/* filled in by mkstack.pl */\n# define IMPLEMENT_ASN1_SET_OF(type)/* nothing, no longer needed */\n\n/*\n * We MUST make sure that, except for constness, asn1_ctx_st and\n * asn1_const_ctx are exactly the same.  Fortunately, as soon as the old ASN1\n * parsing macros are gone, we can throw this away as well...\n */\ntypedef struct asn1_ctx_st {\n    unsigned char *p;           /* work char pointer */\n    int eos;                    /* end of sequence read for indefinite\n                                 * encoding */\n    int error;                  /* error code to use when returning an error */\n    int inf;                    /* constructed if 0x20, indefinite is 0x21 */\n    int tag;                    /* tag from last 'get object' */\n    int xclass;                 /* class from last 'get object' */\n    long slen;                  /* length of last 'get object' */\n    unsigned char *max;         /* largest value of p allowed */\n    unsigned char *q;           /* temporary variable */\n    unsigned char **pp;         /* variable */\n    int line;                   /* used in error processing */\n} ASN1_CTX;\n\ntypedef struct asn1_const_ctx_st {\n    const unsigned char *p;     /* work char pointer */\n    int eos;                    /* end of sequence read for indefinite\n                                 * encoding */\n    int error;                  /* error code to use when returning an error */\n    int inf;                    /* constructed if 0x20, indefinite is 0x21 */\n    int tag;                    /* tag from last 'get object' */\n    int xclass;                 /* class from last 'get object' */\n    long slen;                  /* length of last 'get object' */\n    const unsigned char *max;   /* largest value of p allowed */\n    const unsigned char *q;     /* temporary variable */\n    const unsigned char **pp;   /* variable */\n    int line;                   /* used in error processing */\n} ASN1_const_CTX;\n\n/*\n * These are used internally in the ASN1_OBJECT to keep track of whether the\n * names and data need to be free()ed\n */\n# define ASN1_OBJECT_FLAG_DYNAMIC         0x01/* internal use */\n# define ASN1_OBJECT_FLAG_CRITICAL        0x02/* critical x509v3 object id */\n# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */\n# define ASN1_OBJECT_FLAG_DYNAMIC_DATA    0x08/* internal use */\nstruct asn1_object_st {\n    const char *sn, *ln;\n    int nid;\n    int length;\n    const unsigned char *data;  /* data remains const after init */\n    int flags;                  /* Should we free this one */\n};\n\n# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */\n/*\n * This indicates that the ASN1_STRING is not a real value but just a place\n * holder for the location where indefinite length constructed data should be\n * inserted in the memory buffer\n */\n# define ASN1_STRING_FLAG_NDEF 0x010\n\n/*\n * This flag is used by the CMS code to indicate that a string is not\n * complete and is a place holder for content when it had all been accessed.\n * The flag will be reset when content has been written to it.\n */\n\n# define ASN1_STRING_FLAG_CONT 0x020\n/*\n * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING\n * type.\n */\n# define ASN1_STRING_FLAG_MSTRING 0x040\n/* This is the base type that holds just about everything :-) */\nstruct asn1_string_st {\n    int length;\n    int type;\n    unsigned char *data;\n    /*\n     * The value of the following field depends on the type being held.  It\n     * is mostly being used for BIT_STRING so if the input data has a\n     * non-zero 'unused bits' value, it will be handled correctly\n     */\n    long flags;\n};\n\n/*\n * ASN1_ENCODING structure: this is used to save the received encoding of an\n * ASN1 type. This is useful to get round problems with invalid encodings\n * which can break signatures.\n */\n\ntypedef struct ASN1_ENCODING_st {\n    unsigned char *enc;         /* DER encoding */\n    long len;                   /* Length of encoding */\n    int modified;               /* set to 1 if 'enc' is invalid */\n} ASN1_ENCODING;\n\n/* Used with ASN1 LONG type: if a long is set to this it is omitted */\n# define ASN1_LONG_UNDEF 0x7fffffffL\n\n# define STABLE_FLAGS_MALLOC     0x01\n# define STABLE_NO_MASK          0x02\n# define DIRSTRING_TYPE  \\\n (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING)\n# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING)\n\ntypedef struct asn1_string_table_st {\n    int nid;\n    long minsize;\n    long maxsize;\n    unsigned long mask;\n    unsigned long flags;\n} ASN1_STRING_TABLE;\n\nDECLARE_STACK_OF(ASN1_STRING_TABLE)\n\n/* size limits: this stuff is taken straight from RFC2459 */\n\n# define ub_name                         32768\n# define ub_common_name                  64\n# define ub_locality_name                128\n# define ub_state_name                   128\n# define ub_organization_name            64\n# define ub_organization_unit_name       64\n# define ub_title                        64\n# define ub_email_address                128\n\n/*\n * Declarations for template structures: for full definitions see asn1t.h\n */\ntypedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE;\ntypedef struct ASN1_TLC_st ASN1_TLC;\n/* This is just an opaque pointer */\ntypedef struct ASN1_VALUE_st ASN1_VALUE;\n\n/* Declare ASN1 functions: the implement macro in in asn1t.h */\n\n# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type)\n\n# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \\\n        DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type)\n\n# define DECLARE_ASN1_FUNCTIONS_name(type, name) \\\n        DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\\n        DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name)\n\n# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \\\n        DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\\n        DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)\n\n# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \\\n        type *d2i_##name(type **a, const unsigned char **in, long len); \\\n        int i2d_##name(type *a, unsigned char **out); \\\n        DECLARE_ASN1_ITEM(itname)\n\n# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \\\n        type *d2i_##name(type **a, const unsigned char **in, long len); \\\n        int i2d_##name(const type *a, unsigned char **out); \\\n        DECLARE_ASN1_ITEM(name)\n\n# define DECLARE_ASN1_NDEF_FUNCTION(name) \\\n        int i2d_##name##_NDEF(name *a, unsigned char **out);\n\n# define DECLARE_ASN1_FUNCTIONS_const(name) \\\n        DECLARE_ASN1_ALLOC_FUNCTIONS(name) \\\n        DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name)\n\n# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \\\n        type *name##_new(void); \\\n        void name##_free(type *a);\n\n# define DECLARE_ASN1_PRINT_FUNCTION(stname) \\\n        DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname)\n\n# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \\\n        int fname##_print_ctx(BIO *out, stname *x, int indent, \\\n                                         const ASN1_PCTX *pctx);\n\n# define D2I_OF(type) type *(*)(type **,const unsigned char **,long)\n# define I2D_OF(type) int (*)(type *,unsigned char **)\n# define I2D_OF_const(type) int (*)(const type *,unsigned char **)\n\n# define CHECKED_D2I_OF(type, d2i) \\\n    ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0)))\n# define CHECKED_I2D_OF(type, i2d) \\\n    ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0)))\n# define CHECKED_NEW_OF(type, xnew) \\\n    ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0)))\n# define CHECKED_PTR_OF(type, p) \\\n    ((void*) (1 ? p : (type*)0))\n# define CHECKED_PPTR_OF(type, p) \\\n    ((void**) (1 ? p : (type**)0))\n\n# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long)\n# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **)\n# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type)\n\nTYPEDEF_D2I2D_OF(void);\n\n/*-\n * The following macros and typedefs allow an ASN1_ITEM\n * to be embedded in a structure and referenced. Since\n * the ASN1_ITEM pointers need to be globally accessible\n * (possibly from shared libraries) they may exist in\n * different forms. On platforms that support it the\n * ASN1_ITEM structure itself will be globally exported.\n * Other platforms will export a function that returns\n * an ASN1_ITEM pointer.\n *\n * To handle both cases transparently the macros below\n * should be used instead of hard coding an ASN1_ITEM\n * pointer in a structure.\n *\n * The structure will look like this:\n *\n * typedef struct SOMETHING_st {\n *      ...\n *      ASN1_ITEM_EXP *iptr;\n *      ...\n * } SOMETHING;\n *\n * It would be initialised as e.g.:\n *\n * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...};\n *\n * and the actual pointer extracted with:\n *\n * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr);\n *\n * Finally an ASN1_ITEM pointer can be extracted from an\n * appropriate reference with: ASN1_ITEM_rptr(X509). This\n * would be used when a function takes an ASN1_ITEM * argument.\n *\n */\n\n# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION\n\n/* ASN1_ITEM pointer exported type */\ntypedef const ASN1_ITEM ASN1_ITEM_EXP;\n\n/* Macro to obtain ASN1_ITEM pointer from exported type */\n#  define ASN1_ITEM_ptr(iptr) (iptr)\n\n/* Macro to include ASN1_ITEM pointer from base type */\n#  define ASN1_ITEM_ref(iptr) (&(iptr##_it))\n\n#  define ASN1_ITEM_rptr(ref) (&(ref##_it))\n\n#  define DECLARE_ASN1_ITEM(name) \\\n        OPENSSL_EXTERN const ASN1_ITEM name##_it;\n\n# else\n\n/*\n * Platforms that can't easily handle shared global variables are declared as\n * functions returning ASN1_ITEM pointers.\n */\n\n/* ASN1_ITEM pointer exported type */\ntypedef const ASN1_ITEM *ASN1_ITEM_EXP (void);\n\n/* Macro to obtain ASN1_ITEM pointer from exported type */\n#  define ASN1_ITEM_ptr(iptr) (iptr())\n\n/* Macro to include ASN1_ITEM pointer from base type */\n#  define ASN1_ITEM_ref(iptr) (iptr##_it)\n\n#  define ASN1_ITEM_rptr(ref) (ref##_it())\n\n#  define DECLARE_ASN1_ITEM(name) \\\n        const ASN1_ITEM * name##_it(void);\n\n# endif\n\n/* Parameters used by ASN1_STRING_print_ex() */\n\n/*\n * These determine which characters to escape: RFC2253 special characters,\n * control characters and MSB set characters\n */\n\n# define ASN1_STRFLGS_ESC_2253           1\n# define ASN1_STRFLGS_ESC_CTRL           2\n# define ASN1_STRFLGS_ESC_MSB            4\n\n/*\n * This flag determines how we do escaping: normally RC2253 backslash only,\n * set this to use backslash and quote.\n */\n\n# define ASN1_STRFLGS_ESC_QUOTE          8\n\n/* These three flags are internal use only. */\n\n/* Character is a valid PrintableString character */\n# define CHARTYPE_PRINTABLESTRING        0x10\n/* Character needs escaping if it is the first character */\n# define CHARTYPE_FIRST_ESC_2253         0x20\n/* Character needs escaping if it is the last character */\n# define CHARTYPE_LAST_ESC_2253          0x40\n\n/*\n * NB the internal flags are safely reused below by flags handled at the top\n * level.\n */\n\n/*\n * If this is set we convert all character strings to UTF8 first\n */\n\n# define ASN1_STRFLGS_UTF8_CONVERT       0x10\n\n/*\n * If this is set we don't attempt to interpret content: just assume all\n * strings are 1 byte per character. This will produce some pretty odd\n * looking output!\n */\n\n# define ASN1_STRFLGS_IGNORE_TYPE        0x20\n\n/* If this is set we include the string type in the output */\n# define ASN1_STRFLGS_SHOW_TYPE          0x40\n\n/*\n * This determines which strings to display and which to 'dump' (hex dump of\n * content octets or DER encoding). We can only dump non character strings or\n * everything. If we don't dump 'unknown' they are interpreted as character\n * strings with 1 octet per character and are subject to the usual escaping\n * options.\n */\n\n# define ASN1_STRFLGS_DUMP_ALL           0x80\n# define ASN1_STRFLGS_DUMP_UNKNOWN       0x100\n\n/*\n * These determine what 'dumping' does, we can dump the content octets or the\n * DER encoding: both use the RFC2253 #XXXXX notation.\n */\n\n# define ASN1_STRFLGS_DUMP_DER           0x200\n\n/*\n * All the string flags consistent with RFC2253, escaping control characters\n * isn't essential in RFC2253 but it is advisable anyway.\n */\n\n# define ASN1_STRFLGS_RFC2253    (ASN1_STRFLGS_ESC_2253 | \\\n                                ASN1_STRFLGS_ESC_CTRL | \\\n                                ASN1_STRFLGS_ESC_MSB | \\\n                                ASN1_STRFLGS_UTF8_CONVERT | \\\n                                ASN1_STRFLGS_DUMP_UNKNOWN | \\\n                                ASN1_STRFLGS_DUMP_DER)\n\nDECLARE_STACK_OF(ASN1_INTEGER)\nDECLARE_ASN1_SET_OF(ASN1_INTEGER)\n\nDECLARE_STACK_OF(ASN1_GENERALSTRING)\n\ntypedef struct asn1_type_st {\n    int type;\n    union {\n        char *ptr;\n        ASN1_BOOLEAN boolean;\n        ASN1_STRING *asn1_string;\n        ASN1_OBJECT *object;\n        ASN1_INTEGER *integer;\n        ASN1_ENUMERATED *enumerated;\n        ASN1_BIT_STRING *bit_string;\n        ASN1_OCTET_STRING *octet_string;\n        ASN1_PRINTABLESTRING *printablestring;\n        ASN1_T61STRING *t61string;\n        ASN1_IA5STRING *ia5string;\n        ASN1_GENERALSTRING *generalstring;\n        ASN1_BMPSTRING *bmpstring;\n        ASN1_UNIVERSALSTRING *universalstring;\n        ASN1_UTCTIME *utctime;\n        ASN1_GENERALIZEDTIME *generalizedtime;\n        ASN1_VISIBLESTRING *visiblestring;\n        ASN1_UTF8STRING *utf8string;\n        /*\n         * set and sequence are left complete and still contain the set or\n         * sequence bytes\n         */\n        ASN1_STRING *set;\n        ASN1_STRING *sequence;\n        ASN1_VALUE *asn1_value;\n    } value;\n} ASN1_TYPE;\n\nDECLARE_STACK_OF(ASN1_TYPE)\nDECLARE_ASN1_SET_OF(ASN1_TYPE)\n\ntypedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY;\n\nDECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY)\nDECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY)\n\ntypedef struct NETSCAPE_X509_st {\n    ASN1_OCTET_STRING *header;\n    X509 *cert;\n} NETSCAPE_X509;\n\n/* This is used to contain a list of bit names */\ntypedef struct BIT_STRING_BITNAME_st {\n    int bitnum;\n    const char *lname;\n    const char *sname;\n} BIT_STRING_BITNAME;\n\n# define M_ASN1_STRING_length(x) ((x)->length)\n# define M_ASN1_STRING_length_set(x, n)  ((x)->length = (n))\n# define M_ASN1_STRING_type(x)   ((x)->type)\n# define M_ASN1_STRING_data(x)   ((x)->data)\n\n/* Macros for string operations */\n# define M_ASN1_BIT_STRING_new() (ASN1_BIT_STRING *)\\\n                ASN1_STRING_type_new(V_ASN1_BIT_STRING)\n# define M_ASN1_BIT_STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_BIT_STRING_dup(a) (ASN1_BIT_STRING *)\\\n                ASN1_STRING_dup((const ASN1_STRING *)a)\n# define M_ASN1_BIT_STRING_cmp(a,b) ASN1_STRING_cmp(\\\n                (const ASN1_STRING *)a,(const ASN1_STRING *)b)\n# define M_ASN1_BIT_STRING_set(a,b,c) ASN1_STRING_set((ASN1_STRING *)a,b,c)\n\n# define M_ASN1_INTEGER_new()    (ASN1_INTEGER *)\\\n                ASN1_STRING_type_new(V_ASN1_INTEGER)\n# define M_ASN1_INTEGER_free(a)          ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_INTEGER_dup(a) (ASN1_INTEGER *)\\\n                ASN1_STRING_dup((const ASN1_STRING *)a)\n# define M_ASN1_INTEGER_cmp(a,b) ASN1_STRING_cmp(\\\n                (const ASN1_STRING *)a,(const ASN1_STRING *)b)\n\n# define M_ASN1_ENUMERATED_new() (ASN1_ENUMERATED *)\\\n                ASN1_STRING_type_new(V_ASN1_ENUMERATED)\n# define M_ASN1_ENUMERATED_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_ENUMERATED_dup(a) (ASN1_ENUMERATED *)\\\n                ASN1_STRING_dup((const ASN1_STRING *)a)\n# define M_ASN1_ENUMERATED_cmp(a,b)      ASN1_STRING_cmp(\\\n                (const ASN1_STRING *)a,(const ASN1_STRING *)b)\n\n# define M_ASN1_OCTET_STRING_new()       (ASN1_OCTET_STRING *)\\\n                ASN1_STRING_type_new(V_ASN1_OCTET_STRING)\n# define M_ASN1_OCTET_STRING_free(a)     ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_OCTET_STRING_dup(a) (ASN1_OCTET_STRING *)\\\n                ASN1_STRING_dup((const ASN1_STRING *)a)\n# define M_ASN1_OCTET_STRING_cmp(a,b) ASN1_STRING_cmp(\\\n                (const ASN1_STRING *)a,(const ASN1_STRING *)b)\n# define M_ASN1_OCTET_STRING_set(a,b,c)  ASN1_STRING_set((ASN1_STRING *)a,b,c)\n# define M_ASN1_OCTET_STRING_print(a,b)  ASN1_STRING_print(a,(ASN1_STRING *)b)\n# define M_i2d_ASN1_OCTET_STRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_OCTET_STRING,\\\n                V_ASN1_UNIVERSAL)\n\n# define B_ASN1_TIME \\\n                        B_ASN1_UTCTIME | \\\n                        B_ASN1_GENERALIZEDTIME\n\n# define B_ASN1_PRINTABLE \\\n                        B_ASN1_NUMERICSTRING| \\\n                        B_ASN1_PRINTABLESTRING| \\\n                        B_ASN1_T61STRING| \\\n                        B_ASN1_IA5STRING| \\\n                        B_ASN1_BIT_STRING| \\\n                        B_ASN1_UNIVERSALSTRING|\\\n                        B_ASN1_BMPSTRING|\\\n                        B_ASN1_UTF8STRING|\\\n                        B_ASN1_SEQUENCE|\\\n                        B_ASN1_UNKNOWN\n\n# define B_ASN1_DIRECTORYSTRING \\\n                        B_ASN1_PRINTABLESTRING| \\\n                        B_ASN1_TELETEXSTRING|\\\n                        B_ASN1_BMPSTRING|\\\n                        B_ASN1_UNIVERSALSTRING|\\\n                        B_ASN1_UTF8STRING\n\n# define B_ASN1_DISPLAYTEXT \\\n                        B_ASN1_IA5STRING| \\\n                        B_ASN1_VISIBLESTRING| \\\n                        B_ASN1_BMPSTRING|\\\n                        B_ASN1_UTF8STRING\n\n# define M_ASN1_PRINTABLE_new()  ASN1_STRING_type_new(V_ASN1_T61STRING)\n# define M_ASN1_PRINTABLE_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_PRINTABLE(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\\n                pp,a->type,V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_PRINTABLE(a,pp,l) \\\n                d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\\n                        B_ASN1_PRINTABLE)\n\n# define M_DIRECTORYSTRING_new() ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)\n# define M_DIRECTORYSTRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_DIRECTORYSTRING(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\\n                                                pp,a->type,V_ASN1_UNIVERSAL)\n# define M_d2i_DIRECTORYSTRING(a,pp,l) \\\n                d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\\n                        B_ASN1_DIRECTORYSTRING)\n\n# define M_DISPLAYTEXT_new() ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)\n# define M_DISPLAYTEXT_free(a) ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_DISPLAYTEXT(a,pp) i2d_ASN1_bytes((ASN1_STRING *)a,\\\n                                                pp,a->type,V_ASN1_UNIVERSAL)\n# define M_d2i_DISPLAYTEXT(a,pp,l) \\\n                d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l, \\\n                        B_ASN1_DISPLAYTEXT)\n\n# define M_ASN1_PRINTABLESTRING_new() (ASN1_PRINTABLESTRING *)\\\n                ASN1_STRING_type_new(V_ASN1_PRINTABLESTRING)\n# define M_ASN1_PRINTABLESTRING_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_PRINTABLESTRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_PRINTABLESTRING,\\\n                V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_PRINTABLESTRING(a,pp,l) \\\n                (ASN1_PRINTABLESTRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_PRINTABLESTRING)\n\n# define M_ASN1_T61STRING_new()  (ASN1_T61STRING *)\\\n                ASN1_STRING_type_new(V_ASN1_T61STRING)\n# define M_ASN1_T61STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_T61STRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_T61STRING,\\\n                V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_T61STRING(a,pp,l) \\\n                (ASN1_T61STRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_T61STRING)\n\n# define M_ASN1_IA5STRING_new()  (ASN1_IA5STRING *)\\\n                ASN1_STRING_type_new(V_ASN1_IA5STRING)\n# define M_ASN1_IA5STRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_IA5STRING_dup(a) \\\n                (ASN1_IA5STRING *)ASN1_STRING_dup((const ASN1_STRING *)a)\n# define M_i2d_ASN1_IA5STRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_IA5STRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_IA5STRING(a,pp,l) \\\n                (ASN1_IA5STRING *)d2i_ASN1_type_bytes((ASN1_STRING **)a,pp,l,\\\n                        B_ASN1_IA5STRING)\n\n# define M_ASN1_UTCTIME_new()    (ASN1_UTCTIME *)\\\n                ASN1_STRING_type_new(V_ASN1_UTCTIME)\n# define M_ASN1_UTCTIME_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_UTCTIME_dup(a) (ASN1_UTCTIME *)\\\n                ASN1_STRING_dup((const ASN1_STRING *)a)\n\n# define M_ASN1_GENERALIZEDTIME_new()    (ASN1_GENERALIZEDTIME *)\\\n                ASN1_STRING_type_new(V_ASN1_GENERALIZEDTIME)\n# define M_ASN1_GENERALIZEDTIME_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_GENERALIZEDTIME_dup(a) (ASN1_GENERALIZEDTIME *)ASN1_STRING_dup(\\\n        (const ASN1_STRING *)a)\n\n# define M_ASN1_TIME_new()       (ASN1_TIME *)\\\n                ASN1_STRING_type_new(V_ASN1_UTCTIME)\n# define M_ASN1_TIME_free(a)     ASN1_STRING_free((ASN1_STRING *)a)\n# define M_ASN1_TIME_dup(a) (ASN1_TIME *)\\\n        ASN1_STRING_dup((const ASN1_STRING *)a)\n\n# define M_ASN1_GENERALSTRING_new()      (ASN1_GENERALSTRING *)\\\n                ASN1_STRING_type_new(V_ASN1_GENERALSTRING)\n# define M_ASN1_GENERALSTRING_free(a)    ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_GENERALSTRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_GENERALSTRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_GENERALSTRING(a,pp,l) \\\n                (ASN1_GENERALSTRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_GENERALSTRING)\n\n# define M_ASN1_UNIVERSALSTRING_new()    (ASN1_UNIVERSALSTRING *)\\\n                ASN1_STRING_type_new(V_ASN1_UNIVERSALSTRING)\n# define M_ASN1_UNIVERSALSTRING_free(a)  ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_UNIVERSALSTRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UNIVERSALSTRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_UNIVERSALSTRING(a,pp,l) \\\n                (ASN1_UNIVERSALSTRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_UNIVERSALSTRING)\n\n# define M_ASN1_BMPSTRING_new()  (ASN1_BMPSTRING *)\\\n                ASN1_STRING_type_new(V_ASN1_BMPSTRING)\n# define M_ASN1_BMPSTRING_free(a)        ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_BMPSTRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_BMPSTRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_BMPSTRING(a,pp,l) \\\n                (ASN1_BMPSTRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_BMPSTRING)\n\n# define M_ASN1_VISIBLESTRING_new()      (ASN1_VISIBLESTRING *)\\\n                ASN1_STRING_type_new(V_ASN1_VISIBLESTRING)\n# define M_ASN1_VISIBLESTRING_free(a)    ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_VISIBLESTRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_VISIBLESTRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_VISIBLESTRING(a,pp,l) \\\n                (ASN1_VISIBLESTRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_VISIBLESTRING)\n\n# define M_ASN1_UTF8STRING_new() (ASN1_UTF8STRING *)\\\n                ASN1_STRING_type_new(V_ASN1_UTF8STRING)\n# define M_ASN1_UTF8STRING_free(a)       ASN1_STRING_free((ASN1_STRING *)a)\n# define M_i2d_ASN1_UTF8STRING(a,pp) \\\n                i2d_ASN1_bytes((ASN1_STRING *)a,pp,V_ASN1_UTF8STRING,\\\n                        V_ASN1_UNIVERSAL)\n# define M_d2i_ASN1_UTF8STRING(a,pp,l) \\\n                (ASN1_UTF8STRING *)d2i_ASN1_type_bytes\\\n                ((ASN1_STRING **)a,pp,l,B_ASN1_UTF8STRING)\n\n  /* for the is_set parameter to i2d_ASN1_SET */\n# define IS_SEQUENCE     0\n# define IS_SET          1\n\nDECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE)\n\nint ASN1_TYPE_get(ASN1_TYPE *a);\nvoid ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);\nint ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value);\nint ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b);\n\nASN1_OBJECT *ASN1_OBJECT_new(void);\nvoid ASN1_OBJECT_free(ASN1_OBJECT *a);\nint i2d_ASN1_OBJECT(ASN1_OBJECT *a, unsigned char **pp);\nASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,\n                             long length);\nASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,\n                             long length);\n\nDECLARE_ASN1_ITEM(ASN1_OBJECT)\n\nDECLARE_STACK_OF(ASN1_OBJECT)\nDECLARE_ASN1_SET_OF(ASN1_OBJECT)\n\nASN1_STRING *ASN1_STRING_new(void);\nvoid ASN1_STRING_free(ASN1_STRING *a);\nvoid ASN1_STRING_clear_free(ASN1_STRING *a);\nint ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);\nASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a);\nASN1_STRING *ASN1_STRING_type_new(int type);\nint ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b);\n  /*\n   * Since this is used to store all sorts of things, via macros, for now,\n   * make its data void *\n   */\nint ASN1_STRING_set(ASN1_STRING *str, const void *data, int len);\nvoid ASN1_STRING_set0(ASN1_STRING *str, void *data, int len);\nint ASN1_STRING_length(const ASN1_STRING *x);\nvoid ASN1_STRING_length_set(ASN1_STRING *x, int n);\nint ASN1_STRING_type(ASN1_STRING *x);\nunsigned char *ASN1_STRING_data(ASN1_STRING *x);\n\nDECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING)\nint i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp);\nASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,\n                                     const unsigned char **pp, long length);\nint ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length);\nint ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value);\nint ASN1_BIT_STRING_get_bit(ASN1_BIT_STRING *a, int n);\nint ASN1_BIT_STRING_check(ASN1_BIT_STRING *a,\n                          unsigned char *flags, int flags_len);\n\n# ifndef OPENSSL_NO_BIO\nint ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs,\n                               BIT_STRING_BITNAME *tbl, int indent);\n# endif\nint ASN1_BIT_STRING_num_asc(char *name, BIT_STRING_BITNAME *tbl);\nint ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,\n                            BIT_STRING_BITNAME *tbl);\n\nint i2d_ASN1_BOOLEAN(int a, unsigned char **pp);\nint d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length);\n\nDECLARE_ASN1_FUNCTIONS(ASN1_INTEGER)\nint i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp);\nASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,\n                               long length);\nASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,\n                                long length);\nASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x);\nint ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y);\n\nDECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)\n\nint ASN1_UTCTIME_check(const ASN1_UTCTIME *a);\nASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t);\nASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,\n                               int offset_day, long offset_sec);\nint ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);\nint ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);\n# if 0\ntime_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);\n# endif\n\nint ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a);\nASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,\n                                               time_t t);\nASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,\n                                               time_t t, int offset_day,\n                                               long offset_sec);\nint ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);\nint ASN1_TIME_diff(int *pday, int *psec,\n                   const ASN1_TIME *from, const ASN1_TIME *to);\n\nDECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)\nASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a);\nint ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a,\n                          const ASN1_OCTET_STRING *b);\nint ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data,\n                          int len);\n\nDECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_NULL)\nDECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING)\n\nint UTF8_getc(const unsigned char *str, int len, unsigned long *val);\nint UTF8_putc(unsigned char *str, int len, unsigned long value);\n\nDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE)\n\nDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING)\nDECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT)\nDECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_T61STRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING)\nDECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME)\nDECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME)\nDECLARE_ASN1_FUNCTIONS(ASN1_TIME)\n\nDECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF)\n\nASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);\nASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t,\n                         int offset_day, long offset_sec);\nint ASN1_TIME_check(ASN1_TIME *t);\nASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZEDTIME\n                                                   **out);\nint ASN1_TIME_set_string(ASN1_TIME *s, const char *str);\n\nint i2d_ASN1_SET(STACK_OF(OPENSSL_BLOCK) *a, unsigned char **pp,\n                 i2d_of_void *i2d, int ex_tag, int ex_class, int is_set);\nSTACK_OF(OPENSSL_BLOCK) *d2i_ASN1_SET(STACK_OF(OPENSSL_BLOCK) **a,\n                                      const unsigned char **pp,\n                                      long length, d2i_of_void *d2i,\n                                      void (*free_func) (OPENSSL_BLOCK),\n                                      int ex_tag, int ex_class);\n\n# ifndef OPENSSL_NO_BIO\nint i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);\nint a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size);\nint i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a);\nint a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size);\nint i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a);\nint a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size);\nint i2a_ASN1_STRING(BIO *bp, ASN1_STRING *a, int type);\n# endif\nint i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *a);\n\nint a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num);\nASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len,\n                                const char *sn, const char *ln);\n\nint ASN1_INTEGER_set(ASN1_INTEGER *a, long v);\nlong ASN1_INTEGER_get(const ASN1_INTEGER *a);\nASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai);\nBIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn);\n\nint ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v);\nlong ASN1_ENUMERATED_get(ASN1_ENUMERATED *a);\nASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai);\nBIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai, BIGNUM *bn);\n\n/* General */\n/* given a string, return the correct type, max is the maximum length */\nint ASN1_PRINTABLE_type(const unsigned char *s, int max);\n\nint i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass);\nASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,\n                            long length, int Ptag, int Pclass);\nunsigned long ASN1_tag2bit(int tag);\n/* type is one or more of the B_ASN1_ values. */\nASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp,\n                                 long length, int type);\n\n/* PARSING */\nint asn1_Finish(ASN1_CTX *c);\nint asn1_const_Finish(ASN1_const_CTX *c);\n\n/* SPECIALS */\nint ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,\n                    int *pclass, long omax);\nint ASN1_check_infinite_end(unsigned char **p, long len);\nint ASN1_const_check_infinite_end(const unsigned char **p, long len);\nvoid ASN1_put_object(unsigned char **pp, int constructed, int length,\n                     int tag, int xclass);\nint ASN1_put_eoc(unsigned char **pp);\nint ASN1_object_size(int constructed, int length, int tag);\n\n/* Used to implement other functions */\nvoid *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x);\n\n# define ASN1_dup_of(type,i2d,d2i,x) \\\n    ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \\\n                     CHECKED_D2I_OF(type, d2i), \\\n                     CHECKED_PTR_OF(type, x)))\n\n# define ASN1_dup_of_const(type,i2d,d2i,x) \\\n    ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \\\n                     CHECKED_D2I_OF(type, d2i), \\\n                     CHECKED_PTR_OF(const type, x)))\n\nvoid *ASN1_item_dup(const ASN1_ITEM *it, void *x);\n\n/* ASN1 alloc/free macros for when a type is only used internally */\n\n# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type))\n# define M_ASN1_free_of(x, type) \\\n                ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type))\n\n# ifndef OPENSSL_NO_FP_API\nvoid *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x);\n\n#  define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \\\n    ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \\\n                        CHECKED_D2I_OF(type, d2i), \\\n                        in, \\\n                        CHECKED_PPTR_OF(type, x)))\n\nvoid *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x);\nint ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x);\n\n#  define ASN1_i2d_fp_of(type,i2d,out,x) \\\n    (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \\\n                 out, \\\n                 CHECKED_PTR_OF(type, x)))\n\n#  define ASN1_i2d_fp_of_const(type,i2d,out,x) \\\n    (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \\\n                 out, \\\n                 CHECKED_PTR_OF(const type, x)))\n\nint ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x);\nint ASN1_STRING_print_ex_fp(FILE *fp, ASN1_STRING *str, unsigned long flags);\n# endif\n\nint ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in);\n\n# ifndef OPENSSL_NO_BIO\nvoid *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x);\n\n#  define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \\\n    ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \\\n                          CHECKED_D2I_OF(type, d2i), \\\n                          in, \\\n                          CHECKED_PPTR_OF(type, x)))\n\nvoid *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x);\nint ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x);\n\n#  define ASN1_i2d_bio_of(type,i2d,out,x) \\\n    (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \\\n                  out, \\\n                  CHECKED_PTR_OF(type, x)))\n\n#  define ASN1_i2d_bio_of_const(type,i2d,out,x) \\\n    (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \\\n                  out, \\\n                  CHECKED_PTR_OF(const type, x)))\n\nint ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x);\nint ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a);\nint ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a);\nint ASN1_TIME_print(BIO *fp, const ASN1_TIME *a);\nint ASN1_STRING_print(BIO *bp, const ASN1_STRING *v);\nint ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags);\nint ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num,\n                  unsigned char *buf, int off);\nint ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent);\nint ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent,\n                    int dump);\n# endif\nconst char *ASN1_tag2str(int tag);\n\n/* Used to load and write netscape format cert */\n\nDECLARE_ASN1_FUNCTIONS(NETSCAPE_X509)\n\nint ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s);\n\nint ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len);\nint ASN1_TYPE_get_octetstring(ASN1_TYPE *a, unsigned char *data, int max_len);\nint ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,\n                                  unsigned char *data, int len);\nint ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num,\n                                  unsigned char *data, int max_len);\n\nSTACK_OF(OPENSSL_BLOCK) *ASN1_seq_unpack(const unsigned char *buf, int len,\n                                         d2i_of_void *d2i,\n                                         void (*free_func) (OPENSSL_BLOCK));\nunsigned char *ASN1_seq_pack(STACK_OF(OPENSSL_BLOCK) *safes, i2d_of_void *i2d,\n                             unsigned char **buf, int *len);\nvoid *ASN1_unpack_string(ASN1_STRING *oct, d2i_of_void *d2i);\nvoid *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it);\nASN1_STRING *ASN1_pack_string(void *obj, i2d_of_void *i2d,\n                              ASN1_OCTET_STRING **oct);\n\n# define ASN1_pack_string_of(type,obj,i2d,oct) \\\n    (ASN1_pack_string(CHECKED_PTR_OF(type, obj), \\\n                      CHECKED_I2D_OF(type, i2d), \\\n                      oct))\n\nASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it,\n                            ASN1_OCTET_STRING **oct);\n\nvoid ASN1_STRING_set_default_mask(unsigned long mask);\nint ASN1_STRING_set_default_mask_asc(const char *p);\nunsigned long ASN1_STRING_get_default_mask(void);\nint ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len,\n                       int inform, unsigned long mask);\nint ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len,\n                        int inform, unsigned long mask,\n                        long minsize, long maxsize);\n\nASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,\n                                    const unsigned char *in, int inlen,\n                                    int inform, int nid);\nASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid);\nint ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long);\nvoid ASN1_STRING_TABLE_cleanup(void);\n\n/* ASN1 template functions */\n\n/* Old API compatible functions */\nASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);\nvoid ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);\nASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in,\n                          long len, const ASN1_ITEM *it);\nint ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);\nint ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out,\n                       const ASN1_ITEM *it);\n\nvoid ASN1_add_oid_module(void);\n\nASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf);\nASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf);\n\n/* ASN1 Print flags */\n\n/* Indicate missing OPTIONAL fields */\n# define ASN1_PCTX_FLAGS_SHOW_ABSENT             0x001\n/* Mark start and end of SEQUENCE */\n# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE           0x002\n/* Mark start and end of SEQUENCE/SET OF */\n# define ASN1_PCTX_FLAGS_SHOW_SSOF               0x004\n/* Show the ASN1 type of primitives */\n# define ASN1_PCTX_FLAGS_SHOW_TYPE               0x008\n/* Don't show ASN1 type of ANY */\n# define ASN1_PCTX_FLAGS_NO_ANY_TYPE             0x010\n/* Don't show ASN1 type of MSTRINGs */\n# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE         0x020\n/* Don't show field names in SEQUENCE */\n# define ASN1_PCTX_FLAGS_NO_FIELD_NAME           0x040\n/* Show structure names of each SEQUENCE field */\n# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME  0x080\n/* Don't show structure name even at top level */\n# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME          0x100\n\nint ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent,\n                    const ASN1_ITEM *it, const ASN1_PCTX *pctx);\nASN1_PCTX *ASN1_PCTX_new(void);\nvoid ASN1_PCTX_free(ASN1_PCTX *p);\nunsigned long ASN1_PCTX_get_flags(ASN1_PCTX *p);\nvoid ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags);\nunsigned long ASN1_PCTX_get_nm_flags(ASN1_PCTX *p);\nvoid ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags);\nunsigned long ASN1_PCTX_get_cert_flags(ASN1_PCTX *p);\nvoid ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags);\nunsigned long ASN1_PCTX_get_oid_flags(ASN1_PCTX *p);\nvoid ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags);\nunsigned long ASN1_PCTX_get_str_flags(ASN1_PCTX *p);\nvoid ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags);\n\nBIO_METHOD *BIO_f_asn1(void);\n\nBIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it);\n\nint i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,\n                        const ASN1_ITEM *it);\nint PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags,\n                              const char *hdr, const ASN1_ITEM *it);\nint SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,\n                     int ctype_nid, int econt_nid,\n                     STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it);\nASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it);\nint SMIME_crlf_copy(BIO *in, BIO *out, int flags);\nint SMIME_text(BIO *in, BIO *out);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_ASN1_strings(void);\n\n/* Error codes for the ASN1 functions. */\n\n/* Function codes. */\n# define ASN1_F_A2D_ASN1_OBJECT                           100\n# define ASN1_F_A2I_ASN1_ENUMERATED                       101\n# define ASN1_F_A2I_ASN1_INTEGER                          102\n# define ASN1_F_A2I_ASN1_STRING                           103\n# define ASN1_F_APPEND_EXP                                176\n# define ASN1_F_ASN1_BIT_STRING_SET_BIT                   183\n# define ASN1_F_ASN1_CB                                   177\n# define ASN1_F_ASN1_CHECK_TLEN                           104\n# define ASN1_F_ASN1_COLLATE_PRIMITIVE                    105\n# define ASN1_F_ASN1_COLLECT                              106\n# define ASN1_F_ASN1_D2I_EX_PRIMITIVE                     108\n# define ASN1_F_ASN1_D2I_FP                               109\n# define ASN1_F_ASN1_D2I_READ_BIO                         107\n# define ASN1_F_ASN1_DIGEST                               184\n# define ASN1_F_ASN1_DO_ADB                               110\n# define ASN1_F_ASN1_DUP                                  111\n# define ASN1_F_ASN1_ENUMERATED_SET                       112\n# define ASN1_F_ASN1_ENUMERATED_TO_BN                     113\n# define ASN1_F_ASN1_EX_C2I                               204\n# define ASN1_F_ASN1_FIND_END                             190\n# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ                  216\n# define ASN1_F_ASN1_GENERALIZEDTIME_SET                  185\n# define ASN1_F_ASN1_GENERATE_V3                          178\n# define ASN1_F_ASN1_GET_OBJECT                           114\n# define ASN1_F_ASN1_HEADER_NEW                           115\n# define ASN1_F_ASN1_I2D_BIO                              116\n# define ASN1_F_ASN1_I2D_FP                               117\n# define ASN1_F_ASN1_INTEGER_SET                          118\n# define ASN1_F_ASN1_INTEGER_TO_BN                        119\n# define ASN1_F_ASN1_ITEM_D2I_FP                          206\n# define ASN1_F_ASN1_ITEM_DUP                             191\n# define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW                  121\n# define ASN1_F_ASN1_ITEM_EX_D2I                          120\n# define ASN1_F_ASN1_ITEM_I2D_BIO                         192\n# define ASN1_F_ASN1_ITEM_I2D_FP                          193\n# define ASN1_F_ASN1_ITEM_PACK                            198\n# define ASN1_F_ASN1_ITEM_SIGN                            195\n# define ASN1_F_ASN1_ITEM_SIGN_CTX                        220\n# define ASN1_F_ASN1_ITEM_UNPACK                          199\n# define ASN1_F_ASN1_ITEM_VERIFY                          197\n# define ASN1_F_ASN1_MBSTRING_NCOPY                       122\n# define ASN1_F_ASN1_OBJECT_NEW                           123\n# define ASN1_F_ASN1_OUTPUT_DATA                          214\n# define ASN1_F_ASN1_PACK_STRING                          124\n# define ASN1_F_ASN1_PCTX_NEW                             205\n# define ASN1_F_ASN1_PKCS5_PBE_SET                        125\n# define ASN1_F_ASN1_SEQ_PACK                             126\n# define ASN1_F_ASN1_SEQ_UNPACK                           127\n# define ASN1_F_ASN1_SIGN                                 128\n# define ASN1_F_ASN1_STR2TYPE                             179\n# define ASN1_F_ASN1_STRING_SET                           186\n# define ASN1_F_ASN1_STRING_TABLE_ADD                     129\n# define ASN1_F_ASN1_STRING_TYPE_NEW                      130\n# define ASN1_F_ASN1_TEMPLATE_EX_D2I                      132\n# define ASN1_F_ASN1_TEMPLATE_NEW                         133\n# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I                   131\n# define ASN1_F_ASN1_TIME_ADJ                             217\n# define ASN1_F_ASN1_TIME_SET                             175\n# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING             134\n# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING                 135\n# define ASN1_F_ASN1_UNPACK_STRING                        136\n# define ASN1_F_ASN1_UTCTIME_ADJ                          218\n# define ASN1_F_ASN1_UTCTIME_SET                          187\n# define ASN1_F_ASN1_VERIFY                               137\n# define ASN1_F_B64_READ_ASN1                             209\n# define ASN1_F_B64_WRITE_ASN1                            210\n# define ASN1_F_BIO_NEW_NDEF                              208\n# define ASN1_F_BITSTR_CB                                 180\n# define ASN1_F_BN_TO_ASN1_ENUMERATED                     138\n# define ASN1_F_BN_TO_ASN1_INTEGER                        139\n# define ASN1_F_C2I_ASN1_BIT_STRING                       189\n# define ASN1_F_C2I_ASN1_INTEGER                          194\n# define ASN1_F_C2I_ASN1_OBJECT                           196\n# define ASN1_F_COLLECT_DATA                              140\n# define ASN1_F_D2I_ASN1_BIT_STRING                       141\n# define ASN1_F_D2I_ASN1_BOOLEAN                          142\n# define ASN1_F_D2I_ASN1_BYTES                            143\n# define ASN1_F_D2I_ASN1_GENERALIZEDTIME                  144\n# define ASN1_F_D2I_ASN1_HEADER                           145\n# define ASN1_F_D2I_ASN1_INTEGER                          146\n# define ASN1_F_D2I_ASN1_OBJECT                           147\n# define ASN1_F_D2I_ASN1_SET                              148\n# define ASN1_F_D2I_ASN1_TYPE_BYTES                       149\n# define ASN1_F_D2I_ASN1_UINTEGER                         150\n# define ASN1_F_D2I_ASN1_UTCTIME                          151\n# define ASN1_F_D2I_AUTOPRIVATEKEY                        207\n# define ASN1_F_D2I_NETSCAPE_RSA                          152\n# define ASN1_F_D2I_NETSCAPE_RSA_2                        153\n# define ASN1_F_D2I_PRIVATEKEY                            154\n# define ASN1_F_D2I_PUBLICKEY                             155\n# define ASN1_F_D2I_RSA_NET                               200\n# define ASN1_F_D2I_RSA_NET_2                             201\n# define ASN1_F_D2I_X509                                  156\n# define ASN1_F_D2I_X509_CINF                             157\n# define ASN1_F_D2I_X509_PKEY                             159\n# define ASN1_F_I2D_ASN1_BIO_STREAM                       211\n# define ASN1_F_I2D_ASN1_SET                              188\n# define ASN1_F_I2D_ASN1_TIME                             160\n# define ASN1_F_I2D_DSA_PUBKEY                            161\n# define ASN1_F_I2D_EC_PUBKEY                             181\n# define ASN1_F_I2D_PRIVATEKEY                            163\n# define ASN1_F_I2D_PUBLICKEY                             164\n# define ASN1_F_I2D_RSA_NET                               162\n# define ASN1_F_I2D_RSA_PUBKEY                            165\n# define ASN1_F_LONG_C2I                                  166\n# define ASN1_F_OID_MODULE_INIT                           174\n# define ASN1_F_PARSE_TAGGING                             182\n# define ASN1_F_PKCS5_PBE2_SET_IV                         167\n# define ASN1_F_PKCS5_PBE_SET                             202\n# define ASN1_F_PKCS5_PBE_SET0_ALGOR                      215\n# define ASN1_F_PKCS5_PBKDF2_SET                          219\n# define ASN1_F_SMIME_READ_ASN1                           212\n# define ASN1_F_SMIME_TEXT                                213\n# define ASN1_F_X509_CINF_NEW                             168\n# define ASN1_F_X509_CRL_ADD0_REVOKED                     169\n# define ASN1_F_X509_INFO_NEW                             170\n# define ASN1_F_X509_NAME_ENCODE                          203\n# define ASN1_F_X509_NAME_EX_D2I                          158\n# define ASN1_F_X509_NAME_EX_NEW                          171\n# define ASN1_F_X509_NEW                                  172\n# define ASN1_F_X509_PKEY_NEW                             173\n\n/* Reason codes. */\n# define ASN1_R_ADDING_OBJECT                             171\n# define ASN1_R_ASN1_PARSE_ERROR                          203\n# define ASN1_R_ASN1_SIG_PARSE_ERROR                      204\n# define ASN1_R_AUX_ERROR                                 100\n# define ASN1_R_BAD_CLASS                                 101\n# define ASN1_R_BAD_OBJECT_HEADER                         102\n# define ASN1_R_BAD_PASSWORD_READ                         103\n# define ASN1_R_BAD_TAG                                   104\n# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH                 214\n# define ASN1_R_BN_LIB                                    105\n# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH                   106\n# define ASN1_R_BUFFER_TOO_SMALL                          107\n# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER           108\n# define ASN1_R_CONTEXT_NOT_INITIALISED                   217\n# define ASN1_R_DATA_IS_WRONG                             109\n# define ASN1_R_DECODE_ERROR                              110\n# define ASN1_R_DECODING_ERROR                            111\n# define ASN1_R_DEPTH_EXCEEDED                            174\n# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED         198\n# define ASN1_R_ENCODE_ERROR                              112\n# define ASN1_R_ERROR_GETTING_TIME                        173\n# define ASN1_R_ERROR_LOADING_SECTION                     172\n# define ASN1_R_ERROR_PARSING_SET_ELEMENT                 113\n# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS               114\n# define ASN1_R_EXPECTING_AN_INTEGER                      115\n# define ASN1_R_EXPECTING_AN_OBJECT                       116\n# define ASN1_R_EXPECTING_A_BOOLEAN                       117\n# define ASN1_R_EXPECTING_A_TIME                          118\n# define ASN1_R_EXPLICIT_LENGTH_MISMATCH                  119\n# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED              120\n# define ASN1_R_FIELD_MISSING                             121\n# define ASN1_R_FIRST_NUM_TOO_LARGE                       122\n# define ASN1_R_HEADER_TOO_LONG                           123\n# define ASN1_R_ILLEGAL_BITSTRING_FORMAT                  175\n# define ASN1_R_ILLEGAL_BOOLEAN                           176\n# define ASN1_R_ILLEGAL_CHARACTERS                        124\n# define ASN1_R_ILLEGAL_FORMAT                            177\n# define ASN1_R_ILLEGAL_HEX                               178\n# define ASN1_R_ILLEGAL_IMPLICIT_TAG                      179\n# define ASN1_R_ILLEGAL_INTEGER                           180\n# define ASN1_R_ILLEGAL_NESTED_TAGGING                    181\n# define ASN1_R_ILLEGAL_NULL                              125\n# define ASN1_R_ILLEGAL_NULL_VALUE                        182\n# define ASN1_R_ILLEGAL_OBJECT                            183\n# define ASN1_R_ILLEGAL_OPTIONAL_ANY                      126\n# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE          170\n# define ASN1_R_ILLEGAL_TAGGED_ANY                        127\n# define ASN1_R_ILLEGAL_TIME_VALUE                        184\n# define ASN1_R_INTEGER_NOT_ASCII_FORMAT                  185\n# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG                128\n# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT              220\n# define ASN1_R_INVALID_BMPSTRING_LENGTH                  129\n# define ASN1_R_INVALID_DIGIT                             130\n# define ASN1_R_INVALID_MIME_TYPE                         205\n# define ASN1_R_INVALID_MODIFIER                          186\n# define ASN1_R_INVALID_NUMBER                            187\n# define ASN1_R_INVALID_OBJECT_ENCODING                   216\n# define ASN1_R_INVALID_SEPARATOR                         131\n# define ASN1_R_INVALID_TIME_FORMAT                       132\n# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH            133\n# define ASN1_R_INVALID_UTF8STRING                        134\n# define ASN1_R_IV_TOO_LARGE                              135\n# define ASN1_R_LENGTH_ERROR                              136\n# define ASN1_R_LIST_ERROR                                188\n# define ASN1_R_MIME_NO_CONTENT_TYPE                      206\n# define ASN1_R_MIME_PARSE_ERROR                          207\n# define ASN1_R_MIME_SIG_PARSE_ERROR                      208\n# define ASN1_R_MISSING_EOC                               137\n# define ASN1_R_MISSING_SECOND_NUMBER                     138\n# define ASN1_R_MISSING_VALUE                             189\n# define ASN1_R_MSTRING_NOT_UNIVERSAL                     139\n# define ASN1_R_MSTRING_WRONG_TAG                         140\n# define ASN1_R_NESTED_ASN1_STRING                        197\n# define ASN1_R_NON_HEX_CHARACTERS                        141\n# define ASN1_R_NOT_ASCII_FORMAT                          190\n# define ASN1_R_NOT_ENOUGH_DATA                           142\n# define ASN1_R_NO_CONTENT_TYPE                           209\n# define ASN1_R_NO_DEFAULT_DIGEST                         201\n# define ASN1_R_NO_MATCHING_CHOICE_TYPE                   143\n# define ASN1_R_NO_MULTIPART_BODY_FAILURE                 210\n# define ASN1_R_NO_MULTIPART_BOUNDARY                     211\n# define ASN1_R_NO_SIG_CONTENT_TYPE                       212\n# define ASN1_R_NULL_IS_WRONG_LENGTH                      144\n# define ASN1_R_OBJECT_NOT_ASCII_FORMAT                   191\n# define ASN1_R_ODD_NUMBER_OF_CHARS                       145\n# define ASN1_R_PRIVATE_KEY_HEADER_MISSING                146\n# define ASN1_R_SECOND_NUMBER_TOO_LARGE                   147\n# define ASN1_R_SEQUENCE_LENGTH_MISMATCH                  148\n# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED                  149\n# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG              192\n# define ASN1_R_SHORT_LINE                                150\n# define ASN1_R_SIG_INVALID_MIME_TYPE                     213\n# define ASN1_R_STREAMING_NOT_SUPPORTED                   202\n# define ASN1_R_STRING_TOO_LONG                           151\n# define ASN1_R_STRING_TOO_SHORT                          152\n# define ASN1_R_TAG_VALUE_TOO_HIGH                        153\n# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154\n# define ASN1_R_TIME_NOT_ASCII_FORMAT                     193\n# define ASN1_R_TOO_LONG                                  155\n# define ASN1_R_TYPE_NOT_CONSTRUCTED                      156\n# define ASN1_R_TYPE_NOT_PRIMITIVE                        218\n# define ASN1_R_UNABLE_TO_DECODE_RSA_KEY                  157\n# define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY          158\n# define ASN1_R_UNEXPECTED_EOC                            159\n# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH           215\n# define ASN1_R_UNKNOWN_FORMAT                            160\n# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM          161\n# define ASN1_R_UNKNOWN_OBJECT_TYPE                       162\n# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE                   163\n# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM               199\n# define ASN1_R_UNKNOWN_TAG                               194\n# define ASN1_R_UNKOWN_FORMAT                             195\n# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE           164\n# define ASN1_R_UNSUPPORTED_CIPHER                        165\n# define ASN1_R_UNSUPPORTED_ENCRYPTION_ALGORITHM          166\n# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE               167\n# define ASN1_R_UNSUPPORTED_TYPE                          196\n# define ASN1_R_WRONG_PUBLIC_KEY_TYPE                     200\n# define ASN1_R_WRONG_TAG                                 168\n# define ASN1_R_WRONG_TYPE                                169\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/asn1_mac.h",
    "content": "/* crypto/asn1/asn1_mac.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_ASN1_MAC_H\n# define HEADER_ASN1_MAC_H\n\n# include <openssl/asn1.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifndef ASN1_MAC_ERR_LIB\n#  define ASN1_MAC_ERR_LIB        ERR_LIB_ASN1\n# endif\n\n# define ASN1_MAC_H_err(f,r,line) \\\n        ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line))\n\n# define M_ASN1_D2I_vars(a,type,func) \\\n        ASN1_const_CTX c; \\\n        type ret=NULL; \\\n        \\\n        c.pp=(const unsigned char **)pp; \\\n        c.q= *(const unsigned char **)pp; \\\n        c.error=ERR_R_NESTED_ASN1_ERROR; \\\n        if ((a == NULL) || ((*a) == NULL)) \\\n                { if ((ret=(type)func()) == NULL) \\\n                        { c.line=__LINE__; goto err; } } \\\n        else    ret=(*a);\n\n# define M_ASN1_D2I_Init() \\\n        c.p= *(const unsigned char **)pp; \\\n        c.max=(length == 0)?0:(c.p+length);\n\n# define M_ASN1_D2I_Finish_2(a) \\\n        if (!asn1_const_Finish(&c)) \\\n                { c.line=__LINE__; goto err; } \\\n        *(const unsigned char **)pp=c.p; \\\n        if (a != NULL) (*a)=ret; \\\n        return(ret);\n\n# define M_ASN1_D2I_Finish(a,func,e) \\\n        M_ASN1_D2I_Finish_2(a); \\\nerr:\\\n        ASN1_MAC_H_err((e),c.error,c.line); \\\n        asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \\\n        if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \\\n        return(NULL)\n\n# define M_ASN1_D2I_start_sequence() \\\n        if (!asn1_GetSequence(&c,&length)) \\\n                { c.line=__LINE__; goto err; }\n/* Begin reading ASN1 without a surrounding sequence */\n# define M_ASN1_D2I_begin() \\\n        c.slen = length;\n\n/* End reading ASN1 with no check on length */\n# define M_ASN1_D2I_Finish_nolen(a, func, e) \\\n        *pp=c.p; \\\n        if (a != NULL) (*a)=ret; \\\n        return(ret); \\\nerr:\\\n        ASN1_MAC_H_err((e),c.error,c.line); \\\n        asn1_add_error(*pp,(int)(c.q- *pp)); \\\n        if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \\\n        return(NULL)\n\n# define M_ASN1_D2I_end_sequence() \\\n        (((c.inf&1) == 0)?(c.slen <= 0): \\\n                (c.eos=ASN1_const_check_infinite_end(&c.p,c.slen)))\n\n/* Don't use this with d2i_ASN1_BOOLEAN() */\n# define M_ASN1_D2I_get(b, func) \\\n        c.q=c.p; \\\n        if (func(&(b),&c.p,c.slen) == NULL) \\\n                {c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n/* Don't use this with d2i_ASN1_BOOLEAN() */\n# define M_ASN1_D2I_get_x(type,b,func) \\\n        c.q=c.p; \\\n        if (((D2I_OF(type))func)(&(b),&c.p,c.slen) == NULL) \\\n                {c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n/* use this instead () */\n# define M_ASN1_D2I_get_int(b,func) \\\n        c.q=c.p; \\\n        if (func(&(b),&c.p,c.slen) < 0) \\\n                {c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n# define M_ASN1_D2I_get_opt(b,func,type) \\\n        if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \\\n                == (V_ASN1_UNIVERSAL|(type)))) \\\n                { \\\n                M_ASN1_D2I_get(b,func); \\\n                }\n\n# define M_ASN1_D2I_get_int_opt(b,func,type) \\\n        if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) \\\n                == (V_ASN1_UNIVERSAL|(type)))) \\\n                { \\\n                M_ASN1_D2I_get_int(b,func); \\\n                }\n\n# define M_ASN1_D2I_get_imp(b,func, type) \\\n        M_ASN1_next=(_tmp& V_ASN1_CONSTRUCTED)|type; \\\n        c.q=c.p; \\\n        if (func(&(b),&c.p,c.slen) == NULL) \\\n                {c.line=__LINE__; M_ASN1_next_prev = _tmp; goto err; } \\\n        c.slen-=(c.p-c.q);\\\n        M_ASN1_next_prev=_tmp;\n\n# define M_ASN1_D2I_get_IMP_opt(b,func,tag,type) \\\n        if ((c.slen != 0) && ((M_ASN1_next & (~V_ASN1_CONSTRUCTED)) == \\\n                (V_ASN1_CONTEXT_SPECIFIC|(tag)))) \\\n                { \\\n                unsigned char _tmp = M_ASN1_next; \\\n                M_ASN1_D2I_get_imp(b,func, type);\\\n                }\n\n# define M_ASN1_D2I_get_set(r,func,free_func) \\\n                M_ASN1_D2I_get_imp_set(r,func,free_func, \\\n                        V_ASN1_SET,V_ASN1_UNIVERSAL);\n\n# define M_ASN1_D2I_get_set_type(type,r,func,free_func) \\\n                M_ASN1_D2I_get_imp_set_type(type,r,func,free_func, \\\n                        V_ASN1_SET,V_ASN1_UNIVERSAL);\n\n# define M_ASN1_D2I_get_set_opt(r,func,free_func) \\\n        if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \\\n                V_ASN1_CONSTRUCTED|V_ASN1_SET)))\\\n                { M_ASN1_D2I_get_set(r,func,free_func); }\n\n# define M_ASN1_D2I_get_set_opt_type(type,r,func,free_func) \\\n        if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \\\n                V_ASN1_CONSTRUCTED|V_ASN1_SET)))\\\n                { M_ASN1_D2I_get_set_type(type,r,func,free_func); }\n\n# define M_ASN1_I2D_len_SET_opt(a,f) \\\n        if ((a != NULL) && (sk_num(a) != 0)) \\\n                M_ASN1_I2D_len_SET(a,f);\n\n# define M_ASN1_I2D_put_SET_opt(a,f) \\\n        if ((a != NULL) && (sk_num(a) != 0)) \\\n                M_ASN1_I2D_put_SET(a,f);\n\n# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \\\n        if ((a != NULL) && (sk_num(a) != 0)) \\\n                M_ASN1_I2D_put_SEQUENCE(a,f);\n\n# define M_ASN1_I2D_put_SEQUENCE_opt_type(type,a,f) \\\n        if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                M_ASN1_I2D_put_SEQUENCE_type(type,a,f);\n\n# define M_ASN1_D2I_get_IMP_set_opt(b,func,free_func,tag) \\\n        if ((c.slen != 0) && \\\n                (M_ASN1_next == \\\n                (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\\\n                { \\\n                M_ASN1_D2I_get_imp_set(b,func,free_func,\\\n                        tag,V_ASN1_CONTEXT_SPECIFIC); \\\n                }\n\n# define M_ASN1_D2I_get_IMP_set_opt_type(type,b,func,free_func,tag) \\\n        if ((c.slen != 0) && \\\n                (M_ASN1_next == \\\n                (V_ASN1_CONTEXT_SPECIFIC|V_ASN1_CONSTRUCTED|(tag))))\\\n                { \\\n                M_ASN1_D2I_get_imp_set_type(type,b,func,free_func,\\\n                        tag,V_ASN1_CONTEXT_SPECIFIC); \\\n                }\n\n# define M_ASN1_D2I_get_seq(r,func,free_func) \\\n                M_ASN1_D2I_get_imp_set(r,func,free_func,\\\n                        V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL);\n\n# define M_ASN1_D2I_get_seq_type(type,r,func,free_func) \\\n                M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\\\n                                            V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL)\n\n# define M_ASN1_D2I_get_seq_opt(r,func,free_func) \\\n        if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \\\n                V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\\\n                { M_ASN1_D2I_get_seq(r,func,free_func); }\n\n# define M_ASN1_D2I_get_seq_opt_type(type,r,func,free_func) \\\n        if ((c.slen != 0) && (M_ASN1_next == (V_ASN1_UNIVERSAL| \\\n                V_ASN1_CONSTRUCTED|V_ASN1_SEQUENCE)))\\\n                { M_ASN1_D2I_get_seq_type(type,r,func,free_func); }\n\n# define M_ASN1_D2I_get_IMP_set(r,func,free_func,x) \\\n                M_ASN1_D2I_get_imp_set(r,func,free_func,\\\n                        x,V_ASN1_CONTEXT_SPECIFIC);\n\n# define M_ASN1_D2I_get_IMP_set_type(type,r,func,free_func,x) \\\n                M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,\\\n                        x,V_ASN1_CONTEXT_SPECIFIC);\n\n# define M_ASN1_D2I_get_imp_set(r,func,free_func,a,b) \\\n        c.q=c.p; \\\n        if (d2i_ASN1_SET(&(r),&c.p,c.slen,(char *(*)())func,\\\n                (void (*)())free_func,a,b) == NULL) \\\n                { c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n# define M_ASN1_D2I_get_imp_set_type(type,r,func,free_func,a,b) \\\n        c.q=c.p; \\\n        if (d2i_ASN1_SET_OF_##type(&(r),&c.p,c.slen,func,\\\n                                   free_func,a,b) == NULL) \\\n                { c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n# define M_ASN1_D2I_get_set_strings(r,func,a,b) \\\n        c.q=c.p; \\\n        if (d2i_ASN1_STRING_SET(&(r),&c.p,c.slen,a,b) == NULL) \\\n                { c.line=__LINE__; goto err; } \\\n        c.slen-=(c.p-c.q);\n\n# define M_ASN1_D2I_get_EXP_opt(r,func,tag) \\\n        if ((c.slen != 0L) && (M_ASN1_next == \\\n                (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \\\n                { \\\n                int Tinf,Ttag,Tclass; \\\n                long Tlen; \\\n                \\\n                c.q=c.p; \\\n                Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \\\n                if (Tinf & 0x80) \\\n                        { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \\\n                        c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) \\\n                                        Tlen = c.slen - (c.p - c.q) - 2; \\\n                if (func(&(r),&c.p,Tlen) == NULL) \\\n                        { c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \\\n                        Tlen = c.slen - (c.p - c.q); \\\n                        if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \\\n                                { c.error=ERR_R_MISSING_ASN1_EOS; \\\n                                c.line=__LINE__; goto err; } \\\n                }\\\n                c.slen-=(c.p-c.q); \\\n                }\n\n# define M_ASN1_D2I_get_EXP_set_opt(r,func,free_func,tag,b) \\\n        if ((c.slen != 0) && (M_ASN1_next == \\\n                (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \\\n                { \\\n                int Tinf,Ttag,Tclass; \\\n                long Tlen; \\\n                \\\n                c.q=c.p; \\\n                Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \\\n                if (Tinf & 0x80) \\\n                        { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \\\n                        c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) \\\n                                        Tlen = c.slen - (c.p - c.q) - 2; \\\n                if (d2i_ASN1_SET(&(r),&c.p,Tlen,(char *(*)())func, \\\n                        (void (*)())free_func, \\\n                        b,V_ASN1_UNIVERSAL) == NULL) \\\n                        { c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \\\n                        Tlen = c.slen - (c.p - c.q); \\\n                        if(!ASN1_check_infinite_end(&c.p, Tlen)) \\\n                                { c.error=ERR_R_MISSING_ASN1_EOS; \\\n                                c.line=__LINE__; goto err; } \\\n                }\\\n                c.slen-=(c.p-c.q); \\\n                }\n\n# define M_ASN1_D2I_get_EXP_set_opt_type(type,r,func,free_func,tag,b) \\\n        if ((c.slen != 0) && (M_ASN1_next == \\\n                (V_ASN1_CONSTRUCTED|V_ASN1_CONTEXT_SPECIFIC|tag))) \\\n                { \\\n                int Tinf,Ttag,Tclass; \\\n                long Tlen; \\\n                \\\n                c.q=c.p; \\\n                Tinf=ASN1_get_object(&c.p,&Tlen,&Ttag,&Tclass,c.slen); \\\n                if (Tinf & 0x80) \\\n                        { c.error=ERR_R_BAD_ASN1_OBJECT_HEADER; \\\n                        c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) \\\n                                        Tlen = c.slen - (c.p - c.q) - 2; \\\n                if (d2i_ASN1_SET_OF_##type(&(r),&c.p,Tlen,func, \\\n                        free_func,b,V_ASN1_UNIVERSAL) == NULL) \\\n                        { c.line=__LINE__; goto err; } \\\n                if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \\\n                        Tlen = c.slen - (c.p - c.q); \\\n                        if(!ASN1_check_infinite_end(&c.p, Tlen)) \\\n                                { c.error=ERR_R_MISSING_ASN1_EOS; \\\n                                c.line=__LINE__; goto err; } \\\n                }\\\n                c.slen-=(c.p-c.q); \\\n                }\n\n/* New macros */\n# define M_ASN1_New_Malloc(ret,type) \\\n        if ((ret=(type *)OPENSSL_malloc(sizeof(type))) == NULL) \\\n                { c.line=__LINE__; goto err2; }\n\n# define M_ASN1_New(arg,func) \\\n        if (((arg)=func()) == NULL) return(NULL)\n\n# define M_ASN1_New_Error(a) \\\n/*-     err:    ASN1_MAC_H_err((a),ERR_R_NESTED_ASN1_ERROR,c.line); \\\n                return(NULL);*/ \\\n        err2:   ASN1_MAC_H_err((a),ERR_R_MALLOC_FAILURE,c.line); \\\n                return(NULL)\n\n/*\n * BIG UGLY WARNING! This is so damn ugly I wanna puke.  Unfortunately, some\n * macros that use ASN1_const_CTX still insist on writing in the input\n * stream.  ARGH! ARGH! ARGH! Let's get rid of this macro package. Please? --\n * Richard Levitte\n */\n# define M_ASN1_next             (*((unsigned char *)(c.p)))\n# define M_ASN1_next_prev        (*((unsigned char *)(c.q)))\n\n/*************************************************/\n\n# define M_ASN1_I2D_vars(a)      int r=0,ret=0; \\\n                                unsigned char *p; \\\n                                if (a == NULL) return(0)\n\n/* Length Macros */\n# define M_ASN1_I2D_len(a,f)     ret+=f(a,NULL)\n# define M_ASN1_I2D_len_IMP_opt(a,f)     if (a != NULL) M_ASN1_I2D_len(a,f)\n\n# define M_ASN1_I2D_len_SET(a,f) \\\n                ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);\n\n# define M_ASN1_I2D_len_SET_type(type,a,f) \\\n                ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SET, \\\n                                            V_ASN1_UNIVERSAL,IS_SET);\n\n# define M_ASN1_I2D_len_SEQUENCE(a,f) \\\n                ret+=i2d_ASN1_SET(a,NULL,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \\\n                                  IS_SEQUENCE);\n\n# define M_ASN1_I2D_len_SEQUENCE_type(type,a,f) \\\n                ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,V_ASN1_SEQUENCE, \\\n                                            V_ASN1_UNIVERSAL,IS_SEQUENCE)\n\n# define M_ASN1_I2D_len_SEQUENCE_opt(a,f) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        M_ASN1_I2D_len_SEQUENCE(a,f);\n\n# define M_ASN1_I2D_len_SEQUENCE_opt_type(type,a,f) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        M_ASN1_I2D_len_SEQUENCE_type(type,a,f);\n\n# define M_ASN1_I2D_len_IMP_SET(a,f,x) \\\n                ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET);\n\n# define M_ASN1_I2D_len_IMP_SET_type(type,a,f,x) \\\n                ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \\\n                                            V_ASN1_CONTEXT_SPECIFIC,IS_SET);\n\n# define M_ASN1_I2D_len_IMP_SET_opt(a,f,x) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \\\n                                          IS_SET);\n\n# define M_ASN1_I2D_len_IMP_SET_opt_type(type,a,f,x) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \\\n                                               V_ASN1_CONTEXT_SPECIFIC,IS_SET);\n\n# define M_ASN1_I2D_len_IMP_SEQUENCE(a,f,x) \\\n                ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \\\n                                  IS_SEQUENCE);\n\n# define M_ASN1_I2D_len_IMP_SEQUENCE_opt(a,f,x) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        ret+=i2d_ASN1_SET(a,NULL,f,x,V_ASN1_CONTEXT_SPECIFIC, \\\n                                          IS_SEQUENCE);\n\n# define M_ASN1_I2D_len_IMP_SEQUENCE_opt_type(type,a,f,x) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        ret+=i2d_ASN1_SET_OF_##type(a,NULL,f,x, \\\n                                                    V_ASN1_CONTEXT_SPECIFIC, \\\n                                                    IS_SEQUENCE);\n\n# define M_ASN1_I2D_len_EXP_opt(a,f,mtag,v) \\\n                if (a != NULL)\\\n                        { \\\n                        v=f(a,NULL); \\\n                        ret+=ASN1_object_size(1,v,mtag); \\\n                        }\n\n# define M_ASN1_I2D_len_EXP_SET_opt(a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_num(a) != 0))\\\n                        { \\\n                        v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL,IS_SET); \\\n                        ret+=ASN1_object_size(1,v,mtag); \\\n                        }\n\n# define M_ASN1_I2D_len_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_num(a) != 0))\\\n                        { \\\n                        v=i2d_ASN1_SET(a,NULL,f,tag,V_ASN1_UNIVERSAL, \\\n                                       IS_SEQUENCE); \\\n                        ret+=ASN1_object_size(1,v,mtag); \\\n                        }\n\n# define M_ASN1_I2D_len_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0))\\\n                        { \\\n                        v=i2d_ASN1_SET_OF_##type(a,NULL,f,tag, \\\n                                                 V_ASN1_UNIVERSAL, \\\n                                                 IS_SEQUENCE); \\\n                        ret+=ASN1_object_size(1,v,mtag); \\\n                        }\n\n/* Put Macros */\n# define M_ASN1_I2D_put(a,f)     f(a,&p)\n\n# define M_ASN1_I2D_put_IMP_opt(a,f,t)   \\\n                if (a != NULL) \\\n                        { \\\n                        unsigned char *q=p; \\\n                        f(a,&p); \\\n                        *q=(V_ASN1_CONTEXT_SPECIFIC|t|(*q&V_ASN1_CONSTRUCTED));\\\n                        }\n\n# define M_ASN1_I2D_put_SET(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SET,\\\n                        V_ASN1_UNIVERSAL,IS_SET)\n# define M_ASN1_I2D_put_SET_type(type,a,f) \\\n     i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET)\n# define M_ASN1_I2D_put_IMP_SET(a,f,x) i2d_ASN1_SET(a,&p,f,x,\\\n                        V_ASN1_CONTEXT_SPECIFIC,IS_SET)\n# define M_ASN1_I2D_put_IMP_SET_type(type,a,f,x) \\\n     i2d_ASN1_SET_OF_##type(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC,IS_SET)\n# define M_ASN1_I2D_put_IMP_SEQUENCE(a,f,x) i2d_ASN1_SET(a,&p,f,x,\\\n                        V_ASN1_CONTEXT_SPECIFIC,IS_SEQUENCE)\n\n# define M_ASN1_I2D_put_SEQUENCE(a,f) i2d_ASN1_SET(a,&p,f,V_ASN1_SEQUENCE,\\\n                                             V_ASN1_UNIVERSAL,IS_SEQUENCE)\n\n# define M_ASN1_I2D_put_SEQUENCE_type(type,a,f) \\\n     i2d_ASN1_SET_OF_##type(a,&p,f,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL, \\\n                            IS_SEQUENCE)\n\n# define M_ASN1_I2D_put_SEQUENCE_opt(a,f) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        M_ASN1_I2D_put_SEQUENCE(a,f);\n\n# define M_ASN1_I2D_put_IMP_SET_opt(a,f,x) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \\\n                                       IS_SET); }\n\n# define M_ASN1_I2D_put_IMP_SET_opt_type(type,a,f,x) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        { i2d_ASN1_SET_OF_##type(a,&p,f,x, \\\n                                                 V_ASN1_CONTEXT_SPECIFIC, \\\n                                                 IS_SET); }\n\n# define M_ASN1_I2D_put_IMP_SEQUENCE_opt(a,f,x) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        { i2d_ASN1_SET(a,&p,f,x,V_ASN1_CONTEXT_SPECIFIC, \\\n                                       IS_SEQUENCE); }\n\n# define M_ASN1_I2D_put_IMP_SEQUENCE_opt_type(type,a,f,x) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        { i2d_ASN1_SET_OF_##type(a,&p,f,x, \\\n                                                 V_ASN1_CONTEXT_SPECIFIC, \\\n                                                 IS_SEQUENCE); }\n\n# define M_ASN1_I2D_put_EXP_opt(a,f,tag,v) \\\n                if (a != NULL) \\\n                        { \\\n                        ASN1_put_object(&p,1,v,tag,V_ASN1_CONTEXT_SPECIFIC); \\\n                        f(a,&p); \\\n                        }\n\n# define M_ASN1_I2D_put_EXP_SET_opt(a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        { \\\n                        ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \\\n                        i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SET); \\\n                        }\n\n# define M_ASN1_I2D_put_EXP_SEQUENCE_opt(a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_num(a) != 0)) \\\n                        { \\\n                        ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \\\n                        i2d_ASN1_SET(a,&p,f,tag,V_ASN1_UNIVERSAL,IS_SEQUENCE); \\\n                        }\n\n# define M_ASN1_I2D_put_EXP_SEQUENCE_opt_type(type,a,f,mtag,tag,v) \\\n                if ((a != NULL) && (sk_##type##_num(a) != 0)) \\\n                        { \\\n                        ASN1_put_object(&p,1,v,mtag,V_ASN1_CONTEXT_SPECIFIC); \\\n                        i2d_ASN1_SET_OF_##type(a,&p,f,tag,V_ASN1_UNIVERSAL, \\\n                                               IS_SEQUENCE); \\\n                        }\n\n# define M_ASN1_I2D_seq_total() \\\n                r=ASN1_object_size(1,ret,V_ASN1_SEQUENCE); \\\n                if (pp == NULL) return(r); \\\n                p= *pp; \\\n                ASN1_put_object(&p,1,ret,V_ASN1_SEQUENCE,V_ASN1_UNIVERSAL)\n\n# define M_ASN1_I2D_INF_seq_start(tag,ctx) \\\n                *(p++)=(V_ASN1_CONSTRUCTED|(tag)|(ctx)); \\\n                *(p++)=0x80\n\n# define M_ASN1_I2D_INF_seq_end() *(p++)=0x00; *(p++)=0x00\n\n# define M_ASN1_I2D_finish()     *pp=p; \\\n                                return(r);\n\nint asn1_GetSequence(ASN1_const_CTX *c, long *length);\nvoid asn1_add_error(const unsigned char *address, int offset);\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/asn1t.h",
    "content": "/* asn1t.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 2000.\n */\n/* ====================================================================\n * Copyright (c) 2000-2005 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n#ifndef HEADER_ASN1T_H\n# define HEADER_ASN1T_H\n\n# include <stddef.h>\n# include <openssl/e_os2.h>\n# include <openssl/asn1.h>\n\n# ifdef OPENSSL_BUILD_SHLIBCRYPTO\n#  undef OPENSSL_EXTERN\n#  define OPENSSL_EXTERN OPENSSL_EXPORT\n# endif\n\n/* ASN1 template defines, structures and functions */\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION\n\n/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */\n#  define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr))\n\n/* Macros for start and end of ASN1_ITEM definition */\n\n#  define ASN1_ITEM_start(itname) \\\n        OPENSSL_GLOBAL const ASN1_ITEM itname##_it = {\n\n#  define ASN1_ITEM_end(itname) \\\n                };\n\n# else\n\n/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */\n#  define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr()))\n\n/* Macros for start and end of ASN1_ITEM definition */\n\n#  define ASN1_ITEM_start(itname) \\\n        const ASN1_ITEM * itname##_it(void) \\\n        { \\\n                static const ASN1_ITEM local_it = {\n\n#  define ASN1_ITEM_end(itname) \\\n                }; \\\n        return &local_it; \\\n        }\n\n# endif\n\n/* Macros to aid ASN1 template writing */\n\n# define ASN1_ITEM_TEMPLATE(tname) \\\n        static const ASN1_TEMPLATE tname##_item_tt\n\n# define ASN1_ITEM_TEMPLATE_END(tname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_PRIMITIVE,\\\n                -1,\\\n                &tname##_item_tt,\\\n                0,\\\n                NULL,\\\n                0,\\\n                #tname \\\n        ASN1_ITEM_end(tname)\n\n/* This is a ASN1 type which just embeds a template */\n\n/*-\n * This pair helps declare a SEQUENCE. We can do:\n *\n *      ASN1_SEQUENCE(stname) = {\n *              ... SEQUENCE components ...\n *      } ASN1_SEQUENCE_END(stname)\n *\n *      This will produce an ASN1_ITEM called stname_it\n *      for a structure called stname.\n *\n *      If you want the same structure but a different\n *      name then use:\n *\n *      ASN1_SEQUENCE(itname) = {\n *              ... SEQUENCE components ...\n *      } ASN1_SEQUENCE_END_name(stname, itname)\n *\n *      This will create an item called itname_it using\n *      a structure called stname.\n */\n\n# define ASN1_SEQUENCE(tname) \\\n        static const ASN1_TEMPLATE tname##_seq_tt[]\n\n# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname)\n\n# define ASN1_SEQUENCE_END_name(stname, tname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_SEQUENCE,\\\n                V_ASN1_SEQUENCE,\\\n                tname##_seq_tt,\\\n                sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\\\n                NULL,\\\n                sizeof(stname),\\\n                #stname \\\n        ASN1_ITEM_end(tname)\n\n# define ASN1_NDEF_SEQUENCE(tname) \\\n        ASN1_SEQUENCE(tname)\n\n# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \\\n        ASN1_SEQUENCE_cb(tname, cb)\n\n# define ASN1_SEQUENCE_cb(tname, cb) \\\n        static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \\\n        ASN1_SEQUENCE(tname)\n\n# define ASN1_BROKEN_SEQUENCE(tname) \\\n        static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \\\n        ASN1_SEQUENCE(tname)\n\n# define ASN1_SEQUENCE_ref(tname, cb, lck) \\\n        static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), lck, cb, 0}; \\\n        ASN1_SEQUENCE(tname)\n\n# define ASN1_SEQUENCE_enc(tname, enc, cb) \\\n        static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \\\n        ASN1_SEQUENCE(tname)\n\n# define ASN1_NDEF_SEQUENCE_END(tname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_NDEF_SEQUENCE,\\\n                V_ASN1_SEQUENCE,\\\n                tname##_seq_tt,\\\n                sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\\\n                NULL,\\\n                sizeof(tname),\\\n                #tname \\\n        ASN1_ITEM_end(tname)\n\n# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname)\n\n# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)\n\n# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname)\n\n# define ASN1_SEQUENCE_END_ref(stname, tname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_SEQUENCE,\\\n                V_ASN1_SEQUENCE,\\\n                tname##_seq_tt,\\\n                sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\\\n                &tname##_aux,\\\n                sizeof(stname),\\\n                #stname \\\n        ASN1_ITEM_end(tname)\n\n# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_NDEF_SEQUENCE,\\\n                V_ASN1_SEQUENCE,\\\n                tname##_seq_tt,\\\n                sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\\\n                &tname##_aux,\\\n                sizeof(stname),\\\n                #stname \\\n        ASN1_ITEM_end(tname)\n\n/*-\n * This pair helps declare a CHOICE type. We can do:\n *\n *      ASN1_CHOICE(chname) = {\n *              ... CHOICE options ...\n *      ASN1_CHOICE_END(chname)\n *\n *      This will produce an ASN1_ITEM called chname_it\n *      for a structure called chname. The structure\n *      definition must look like this:\n *      typedef struct {\n *              int type;\n *              union {\n *                      ASN1_SOMETHING *opt1;\n *                      ASN1_SOMEOTHER *opt2;\n *              } value;\n *      } chname;\n *\n *      the name of the selector must be 'type'.\n *      to use an alternative selector name use the\n *      ASN1_CHOICE_END_selector() version.\n */\n\n# define ASN1_CHOICE(tname) \\\n        static const ASN1_TEMPLATE tname##_ch_tt[]\n\n# define ASN1_CHOICE_cb(tname, cb) \\\n        static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \\\n        ASN1_CHOICE(tname)\n\n# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname)\n\n# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type)\n\n# define ASN1_CHOICE_END_selector(stname, tname, selname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_CHOICE,\\\n                offsetof(stname,selname) ,\\\n                tname##_ch_tt,\\\n                sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\\\n                NULL,\\\n                sizeof(stname),\\\n                #stname \\\n        ASN1_ITEM_end(tname)\n\n# define ASN1_CHOICE_END_cb(stname, tname, selname) \\\n        ;\\\n        ASN1_ITEM_start(tname) \\\n                ASN1_ITYPE_CHOICE,\\\n                offsetof(stname,selname) ,\\\n                tname##_ch_tt,\\\n                sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\\\n                &tname##_aux,\\\n                sizeof(stname),\\\n                #stname \\\n        ASN1_ITEM_end(tname)\n\n/* This helps with the template wrapper form of ASN1_ITEM */\n\n# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \\\n        (flags), (tag), 0,\\\n        #name, ASN1_ITEM_ref(type) }\n\n/* These help with SEQUENCE or CHOICE components */\n\n/* used to declare other types */\n\n# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \\\n        (flags), (tag), offsetof(stname, field),\\\n        #field, ASN1_ITEM_ref(type) }\n\n/* used when the structure is combined with the parent */\n\n# define ASN1_EX_COMBINE(flags, tag, type) { \\\n        (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) }\n\n/* implicit and explicit helper macros */\n\n# define ASN1_IMP_EX(stname, field, type, tag, ex) \\\n                ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | ex, tag, stname, field, type)\n\n# define ASN1_EXP_EX(stname, field, type, tag, ex) \\\n                ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | ex, tag, stname, field, type)\n\n/* Any defined by macros: the field used is in the table itself */\n\n# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION\n#  define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }\n#  define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) }\n# else\n#  define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb }\n#  define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb }\n# endif\n/* Plain simple type */\n# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type)\n\n/* OPTIONAL simple type */\n# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type)\n\n/* IMPLICIT tagged simple type */\n# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0)\n\n/* IMPLICIT tagged OPTIONAL simple type */\n# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)\n\n/* Same as above but EXPLICIT */\n\n# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0)\n# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL)\n\n/* SEQUENCE OF type */\n# define ASN1_SEQUENCE_OF(stname, field, type) \\\n                ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type)\n\n/* OPTIONAL SEQUENCE OF */\n# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \\\n                ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)\n\n/* Same as above but for SET OF */\n\n# define ASN1_SET_OF(stname, field, type) \\\n                ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type)\n\n# define ASN1_SET_OF_OPT(stname, field, type) \\\n                ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type)\n\n/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */\n\n# define ASN1_IMP_SET_OF(stname, field, type, tag) \\\n                        ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)\n\n# define ASN1_EXP_SET_OF(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF)\n\n# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \\\n                        ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)\n\n# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL)\n\n# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \\\n                        ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)\n\n# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \\\n                        ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)\n\n# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF)\n\n# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL)\n\n/* EXPLICIT using indefinite length constructed form */\n# define ASN1_NDEF_EXP(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF)\n\n/* EXPLICIT OPTIONAL using indefinite length constructed form */\n# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \\\n                        ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF)\n\n/* Macros for the ASN1_ADB structure */\n\n# define ASN1_ADB(name) \\\n        static const ASN1_ADB_TABLE name##_adbtbl[]\n\n# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION\n\n#  define ASN1_ADB_END(name, flags, field, app_table, def, none) \\\n        ;\\\n        static const ASN1_ADB name##_adb = {\\\n                flags,\\\n                offsetof(name, field),\\\n                app_table,\\\n                name##_adbtbl,\\\n                sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\\\n                def,\\\n                none\\\n        }\n\n# else\n\n#  define ASN1_ADB_END(name, flags, field, app_table, def, none) \\\n        ;\\\n        static const ASN1_ITEM *name##_adb(void) \\\n        { \\\n        static const ASN1_ADB internal_adb = \\\n                {\\\n                flags,\\\n                offsetof(name, field),\\\n                app_table,\\\n                name##_adbtbl,\\\n                sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\\\n                def,\\\n                none\\\n                }; \\\n                return (const ASN1_ITEM *) &internal_adb; \\\n        } \\\n        void dummy_function(void)\n\n# endif\n\n# define ADB_ENTRY(val, template) {val, template}\n\n# define ASN1_ADB_TEMPLATE(name) \\\n        static const ASN1_TEMPLATE name##_tt\n\n/*\n * This is the ASN1 template structure that defines a wrapper round the\n * actual type. It determines the actual position of the field in the value\n * structure, various flags such as OPTIONAL and the field name.\n */\n\nstruct ASN1_TEMPLATE_st {\n    unsigned long flags;        /* Various flags */\n    long tag;                   /* tag, not used if no tagging */\n    unsigned long offset;       /* Offset of this field in structure */\n# ifndef NO_ASN1_FIELD_NAMES\n    const char *field_name;     /* Field name */\n# endif\n    ASN1_ITEM_EXP *item;        /* Relevant ASN1_ITEM or ASN1_ADB */\n};\n\n/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */\n\n# define ASN1_TEMPLATE_item(t) (t->item_ptr)\n# define ASN1_TEMPLATE_adb(t) (t->item_ptr)\n\ntypedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE;\ntypedef struct ASN1_ADB_st ASN1_ADB;\n\nstruct ASN1_ADB_st {\n    unsigned long flags;        /* Various flags */\n    unsigned long offset;       /* Offset of selector field */\n    STACK_OF(ASN1_ADB_TABLE) **app_items; /* Application defined items */\n    const ASN1_ADB_TABLE *tbl;  /* Table of possible types */\n    long tblcount;              /* Number of entries in tbl */\n    const ASN1_TEMPLATE *default_tt; /* Type to use if no match */\n    const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */\n};\n\nstruct ASN1_ADB_TABLE_st {\n    long value;                 /* NID for an object or value for an int */\n    const ASN1_TEMPLATE tt;     /* item for this value */\n};\n\n/* template flags */\n\n/* Field is optional */\n# define ASN1_TFLG_OPTIONAL      (0x1)\n\n/* Field is a SET OF */\n# define ASN1_TFLG_SET_OF        (0x1 << 1)\n\n/* Field is a SEQUENCE OF */\n# define ASN1_TFLG_SEQUENCE_OF   (0x2 << 1)\n\n/*\n * Special case: this refers to a SET OF that will be sorted into DER order\n * when encoded *and* the corresponding STACK will be modified to match the\n * new order.\n */\n# define ASN1_TFLG_SET_ORDER     (0x3 << 1)\n\n/* Mask for SET OF or SEQUENCE OF */\n# define ASN1_TFLG_SK_MASK       (0x3 << 1)\n\n/*\n * These flags mean the tag should be taken from the tag field. If EXPLICIT\n * then the underlying type is used for the inner tag.\n */\n\n/* IMPLICIT tagging */\n# define ASN1_TFLG_IMPTAG        (0x1 << 3)\n\n/* EXPLICIT tagging, inner tag from underlying type */\n# define ASN1_TFLG_EXPTAG        (0x2 << 3)\n\n# define ASN1_TFLG_TAG_MASK      (0x3 << 3)\n\n/* context specific IMPLICIT */\n# define ASN1_TFLG_IMPLICIT      ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT\n\n/* context specific EXPLICIT */\n# define ASN1_TFLG_EXPLICIT      ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT\n\n/*\n * If tagging is in force these determine the type of tag to use. Otherwise\n * the tag is determined by the underlying type. These values reflect the\n * actual octet format.\n */\n\n/* Universal tag */\n# define ASN1_TFLG_UNIVERSAL     (0x0<<6)\n/* Application tag */\n# define ASN1_TFLG_APPLICATION   (0x1<<6)\n/* Context specific tag */\n# define ASN1_TFLG_CONTEXT       (0x2<<6)\n/* Private tag */\n# define ASN1_TFLG_PRIVATE       (0x3<<6)\n\n# define ASN1_TFLG_TAG_CLASS     (0x3<<6)\n\n/*\n * These are for ANY DEFINED BY type. In this case the 'item' field points to\n * an ASN1_ADB structure which contains a table of values to decode the\n * relevant type\n */\n\n# define ASN1_TFLG_ADB_MASK      (0x3<<8)\n\n# define ASN1_TFLG_ADB_OID       (0x1<<8)\n\n# define ASN1_TFLG_ADB_INT       (0x1<<9)\n\n/*\n * This flag means a parent structure is passed instead of the field: this is\n * useful is a SEQUENCE is being combined with a CHOICE for example. Since\n * this means the structure and item name will differ we need to use the\n * ASN1_CHOICE_END_name() macro for example.\n */\n\n# define ASN1_TFLG_COMBINE       (0x1<<10)\n\n/*\n * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes\n * indefinite length constructed encoding to be used if required.\n */\n\n# define ASN1_TFLG_NDEF          (0x1<<11)\n\n/* This is the actual ASN1 item itself */\n\nstruct ASN1_ITEM_st {\n    char itype;                 /* The item type, primitive, SEQUENCE, CHOICE\n                                 * or extern */\n    long utype;                 /* underlying type */\n    const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains\n                                     * the contents */\n    long tcount;                /* Number of templates if SEQUENCE or CHOICE */\n    const void *funcs;          /* functions that handle this type */\n    long size;                  /* Structure size (usually) */\n# ifndef NO_ASN1_FIELD_NAMES\n    const char *sname;          /* Structure name */\n# endif\n};\n\n/*-\n * These are values for the itype field and\n * determine how the type is interpreted.\n *\n * For PRIMITIVE types the underlying type\n * determines the behaviour if items is NULL.\n *\n * Otherwise templates must contain a single\n * template and the type is treated in the\n * same way as the type specified in the template.\n *\n * For SEQUENCE types the templates field points\n * to the members, the size field is the\n * structure size.\n *\n * For CHOICE types the templates field points\n * to each possible member (typically a union)\n * and the 'size' field is the offset of the\n * selector.\n *\n * The 'funcs' field is used for application\n * specific functions.\n *\n * For COMPAT types the funcs field gives a\n * set of functions that handle this type, this\n * supports the old d2i, i2d convention.\n *\n * The EXTERN type uses a new style d2i/i2d.\n * The new style should be used where possible\n * because it avoids things like the d2i IMPLICIT\n * hack.\n *\n * MSTRING is a multiple string type, it is used\n * for a CHOICE of character strings where the\n * actual strings all occupy an ASN1_STRING\n * structure. In this case the 'utype' field\n * has a special meaning, it is used as a mask\n * of acceptable types using the B_ASN1 constants.\n *\n * NDEF_SEQUENCE is the same as SEQUENCE except\n * that it will use indefinite length constructed\n * encoding if requested.\n *\n */\n\n# define ASN1_ITYPE_PRIMITIVE            0x0\n\n# define ASN1_ITYPE_SEQUENCE             0x1\n\n# define ASN1_ITYPE_CHOICE               0x2\n\n# define ASN1_ITYPE_COMPAT               0x3\n\n# define ASN1_ITYPE_EXTERN               0x4\n\n# define ASN1_ITYPE_MSTRING              0x5\n\n# define ASN1_ITYPE_NDEF_SEQUENCE        0x6\n\n/*\n * Cache for ASN1 tag and length, so we don't keep re-reading it for things\n * like CHOICE\n */\n\nstruct ASN1_TLC_st {\n    char valid;                 /* Values below are valid */\n    int ret;                    /* return value */\n    long plen;                  /* length */\n    int ptag;                   /* class value */\n    int pclass;                 /* class value */\n    int hdrlen;                 /* header length */\n};\n\n/* Typedefs for ASN1 function pointers */\n\ntypedef ASN1_VALUE *ASN1_new_func(void);\ntypedef void ASN1_free_func(ASN1_VALUE *a);\ntypedef ASN1_VALUE *ASN1_d2i_func(ASN1_VALUE **a, const unsigned char **in,\n                                  long length);\ntypedef int ASN1_i2d_func(ASN1_VALUE *a, unsigned char **in);\n\ntypedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,\n                        const ASN1_ITEM *it, int tag, int aclass, char opt,\n                        ASN1_TLC *ctx);\n\ntypedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out,\n                        const ASN1_ITEM *it, int tag, int aclass);\ntypedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);\ntypedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);\n\ntypedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval,\n                               int indent, const char *fname,\n                               const ASN1_PCTX *pctx);\n\ntypedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont,\n                               int *putype, const ASN1_ITEM *it);\ntypedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont,\n                               int len, int utype, char *free_cont,\n                               const ASN1_ITEM *it);\ntypedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval,\n                                 const ASN1_ITEM *it, int indent,\n                                 const ASN1_PCTX *pctx);\n\ntypedef struct ASN1_COMPAT_FUNCS_st {\n    ASN1_new_func *asn1_new;\n    ASN1_free_func *asn1_free;\n    ASN1_d2i_func *asn1_d2i;\n    ASN1_i2d_func *asn1_i2d;\n} ASN1_COMPAT_FUNCS;\n\ntypedef struct ASN1_EXTERN_FUNCS_st {\n    void *app_data;\n    ASN1_ex_new_func *asn1_ex_new;\n    ASN1_ex_free_func *asn1_ex_free;\n    ASN1_ex_free_func *asn1_ex_clear;\n    ASN1_ex_d2i *asn1_ex_d2i;\n    ASN1_ex_i2d *asn1_ex_i2d;\n    ASN1_ex_print_func *asn1_ex_print;\n} ASN1_EXTERN_FUNCS;\n\ntypedef struct ASN1_PRIMITIVE_FUNCS_st {\n    void *app_data;\n    unsigned long flags;\n    ASN1_ex_new_func *prim_new;\n    ASN1_ex_free_func *prim_free;\n    ASN1_ex_free_func *prim_clear;\n    ASN1_primitive_c2i *prim_c2i;\n    ASN1_primitive_i2c *prim_i2c;\n    ASN1_primitive_print *prim_print;\n} ASN1_PRIMITIVE_FUNCS;\n\n/*\n * This is the ASN1_AUX structure: it handles various miscellaneous\n * requirements. For example the use of reference counts and an informational\n * callback. The \"informational callback\" is called at various points during\n * the ASN1 encoding and decoding. It can be used to provide minor\n * customisation of the structures used. This is most useful where the\n * supplied routines *almost* do the right thing but need some extra help at\n * a few points. If the callback returns zero then it is assumed a fatal\n * error has occurred and the main operation should be abandoned. If major\n * changes in the default behaviour are required then an external type is\n * more appropriate.\n */\n\ntypedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it,\n                        void *exarg);\n\ntypedef struct ASN1_AUX_st {\n    void *app_data;\n    int flags;\n    int ref_offset;             /* Offset of reference value */\n    int ref_lock;               /* Lock type to use */\n    ASN1_aux_cb *asn1_cb;\n    int enc_offset;             /* Offset of ASN1_ENCODING structure */\n} ASN1_AUX;\n\n/* For print related callbacks exarg points to this structure */\ntypedef struct ASN1_PRINT_ARG_st {\n    BIO *out;\n    int indent;\n    const ASN1_PCTX *pctx;\n} ASN1_PRINT_ARG;\n\n/* For streaming related callbacks exarg points to this structure */\ntypedef struct ASN1_STREAM_ARG_st {\n    /* BIO to stream through */\n    BIO *out;\n    /* BIO with filters appended */\n    BIO *ndef_bio;\n    /* Streaming I/O boundary */\n    unsigned char **boundary;\n} ASN1_STREAM_ARG;\n\n/* Flags in ASN1_AUX */\n\n/* Use a reference count */\n# define ASN1_AFLG_REFCOUNT      1\n/* Save the encoding of structure (useful for signatures) */\n# define ASN1_AFLG_ENCODING      2\n/* The Sequence length is invalid */\n# define ASN1_AFLG_BROKEN        4\n\n/* operation values for asn1_cb */\n\n# define ASN1_OP_NEW_PRE         0\n# define ASN1_OP_NEW_POST        1\n# define ASN1_OP_FREE_PRE        2\n# define ASN1_OP_FREE_POST       3\n# define ASN1_OP_D2I_PRE         4\n# define ASN1_OP_D2I_POST        5\n# define ASN1_OP_I2D_PRE         6\n# define ASN1_OP_I2D_POST        7\n# define ASN1_OP_PRINT_PRE       8\n# define ASN1_OP_PRINT_POST      9\n# define ASN1_OP_STREAM_PRE      10\n# define ASN1_OP_STREAM_POST     11\n# define ASN1_OP_DETACHED_PRE    12\n# define ASN1_OP_DETACHED_POST   13\n\n/* Macro to implement a primitive type */\n# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0)\n# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \\\n                                ASN1_ITEM_start(itname) \\\n                                        ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \\\n                                ASN1_ITEM_end(itname)\n\n/* Macro to implement a multi string type */\n# define IMPLEMENT_ASN1_MSTRING(itname, mask) \\\n                                ASN1_ITEM_start(itname) \\\n                                        ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \\\n                                ASN1_ITEM_end(itname)\n\n/* Macro to implement an ASN1_ITEM in terms of old style funcs */\n\n# define IMPLEMENT_COMPAT_ASN1(sname) IMPLEMENT_COMPAT_ASN1_type(sname, V_ASN1_SEQUENCE)\n\n# define IMPLEMENT_COMPAT_ASN1_type(sname, tag) \\\n        static const ASN1_COMPAT_FUNCS sname##_ff = { \\\n                (ASN1_new_func *)sname##_new, \\\n                (ASN1_free_func *)sname##_free, \\\n                (ASN1_d2i_func *)d2i_##sname, \\\n                (ASN1_i2d_func *)i2d_##sname, \\\n        }; \\\n        ASN1_ITEM_start(sname) \\\n                ASN1_ITYPE_COMPAT, \\\n                tag, \\\n                NULL, \\\n                0, \\\n                &sname##_ff, \\\n                0, \\\n                #sname \\\n        ASN1_ITEM_end(sname)\n\n# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \\\n        ASN1_ITEM_start(sname) \\\n                ASN1_ITYPE_EXTERN, \\\n                tag, \\\n                NULL, \\\n                0, \\\n                &fptrs, \\\n                0, \\\n                #sname \\\n        ASN1_ITEM_end(sname)\n\n/* Macro to implement standard functions in terms of ASN1_ITEM structures */\n\n# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname)\n\n# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname)\n\n# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \\\n                        IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname)\n\n# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \\\n                IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname)\n\n# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \\\n                IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname)\n\n# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \\\n        pre stname *fname##_new(void) \\\n        { \\\n                return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \\\n        } \\\n        pre void fname##_free(stname *a) \\\n        { \\\n                ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \\\n        }\n\n# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \\\n        stname *fname##_new(void) \\\n        { \\\n                return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \\\n        } \\\n        void fname##_free(stname *a) \\\n        { \\\n                ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \\\n        }\n\n# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \\\n        IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \\\n        IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)\n\n# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \\\n        stname *d2i_##fname(stname **a, const unsigned char **in, long len) \\\n        { \\\n                return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\\\n        } \\\n        int i2d_##fname(stname *a, unsigned char **out) \\\n        { \\\n                return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\\\n        }\n\n# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \\\n        int i2d_##stname##_NDEF(stname *a, unsigned char **out) \\\n        { \\\n                return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\\\n        }\n\n/*\n * This includes evil casts to remove const: they will go away when full ASN1\n * constification is done.\n */\n# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \\\n        stname *d2i_##fname(stname **a, const unsigned char **in, long len) \\\n        { \\\n                return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\\\n        } \\\n        int i2d_##fname(const stname *a, unsigned char **out) \\\n        { \\\n                return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\\\n        }\n\n# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \\\n        stname * stname##_dup(stname *x) \\\n        { \\\n        return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \\\n        }\n\n# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \\\n        IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname)\n\n# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \\\n        int fname##_print_ctx(BIO *out, stname *x, int indent, \\\n                                                const ASN1_PCTX *pctx) \\\n        { \\\n                return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \\\n                        ASN1_ITEM_rptr(itname), pctx); \\\n        }\n\n# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \\\n                IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name)\n\n# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \\\n        IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \\\n        IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)\n\n/* external definitions for primitive types */\n\nDECLARE_ASN1_ITEM(ASN1_BOOLEAN)\nDECLARE_ASN1_ITEM(ASN1_TBOOLEAN)\nDECLARE_ASN1_ITEM(ASN1_FBOOLEAN)\nDECLARE_ASN1_ITEM(ASN1_SEQUENCE)\nDECLARE_ASN1_ITEM(CBIGNUM)\nDECLARE_ASN1_ITEM(BIGNUM)\nDECLARE_ASN1_ITEM(LONG)\nDECLARE_ASN1_ITEM(ZLONG)\n\nDECLARE_STACK_OF(ASN1_VALUE)\n\n/* Functions used internally by the ASN1 code */\n\nint ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it);\nvoid ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it);\nint ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);\nint ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it);\n\nvoid ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);\nint ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,\n                      const ASN1_TEMPLATE *tt);\nint ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,\n                     const ASN1_ITEM *it, int tag, int aclass, char opt,\n                     ASN1_TLC *ctx);\n\nint ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,\n                     const ASN1_ITEM *it, int tag, int aclass);\nint ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out,\n                      const ASN1_TEMPLATE *tt);\nvoid ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);\n\nint asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype,\n                const ASN1_ITEM *it);\nint asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,\n                int utype, char *free_cont, const ASN1_ITEM *it);\n\nint asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);\nint asn1_set_choice_selector(ASN1_VALUE **pval, int value,\n                             const ASN1_ITEM *it);\n\nASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);\n\nconst ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,\n                                 int nullerr);\n\nint asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it);\n\nvoid asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);\nvoid asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);\nint asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,\n                     const ASN1_ITEM *it);\nint asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,\n                  const ASN1_ITEM *it);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/bio.h",
    "content": "/* crypto/bio/bio.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_BIO_H\n# define HEADER_BIO_H\n\n# include \"openssl/e_os2.h\"\n\n# ifndef OPENSSL_NO_FP_API\n#  include <stdio.h>\n# endif\n# include <stdarg.h>\n\n# include \"openssl/crypto.h\"\n\n# ifndef OPENSSL_NO_SCTP\n#  ifndef OPENSSL_SYS_VMS\n#   include <stdint.h>\n#  else\n#   include <inttypes.h>\n#  endif\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* These are the 'types' of BIOs */\n# define BIO_TYPE_NONE           0\n# define BIO_TYPE_MEM            (1|0x0400)\n# define BIO_TYPE_FILE           (2|0x0400)\n\n# define BIO_TYPE_FD             (4|0x0400|0x0100)\n# define BIO_TYPE_SOCKET         (5|0x0400|0x0100)\n# define BIO_TYPE_NULL           (6|0x0400)\n# define BIO_TYPE_SSL            (7|0x0200)\n# define BIO_TYPE_MD             (8|0x0200)/* passive filter */\n# define BIO_TYPE_BUFFER         (9|0x0200)/* filter */\n# define BIO_TYPE_CIPHER         (10|0x0200)/* filter */\n# define BIO_TYPE_BASE64         (11|0x0200)/* filter */\n# define BIO_TYPE_CONNECT        (12|0x0400|0x0100)/* socket - connect */\n# define BIO_TYPE_ACCEPT         (13|0x0400|0x0100)/* socket for accept */\n# define BIO_TYPE_PROXY_CLIENT   (14|0x0200)/* client proxy BIO */\n# define BIO_TYPE_PROXY_SERVER   (15|0x0200)/* server proxy BIO */\n# define BIO_TYPE_NBIO_TEST      (16|0x0200)/* server proxy BIO */\n# define BIO_TYPE_NULL_FILTER    (17|0x0200)\n# define BIO_TYPE_BER            (18|0x0200)/* BER -> bin filter */\n# define BIO_TYPE_BIO            (19|0x0400)/* (half a) BIO pair */\n# define BIO_TYPE_LINEBUFFER     (20|0x0200)/* filter */\n# define BIO_TYPE_DGRAM          (21|0x0400|0x0100)\n# ifndef OPENSSL_NO_SCTP\n#  define BIO_TYPE_DGRAM_SCTP     (24|0x0400|0x0100)\n# endif\n# define BIO_TYPE_ASN1           (22|0x0200)/* filter */\n# define BIO_TYPE_COMP           (23|0x0200)/* filter */\n\n# define BIO_TYPE_DESCRIPTOR     0x0100/* socket, fd, connect or accept */\n# define BIO_TYPE_FILTER         0x0200\n# define BIO_TYPE_SOURCE_SINK    0x0400\n\n/*\n * BIO_FILENAME_READ|BIO_CLOSE to open or close on free.\n * BIO_set_fp(in,stdin,BIO_NOCLOSE);\n */\n# define BIO_NOCLOSE             0x00\n# define BIO_CLOSE               0x01\n\n/*\n * These are used in the following macros and are passed to BIO_ctrl()\n */\n# define BIO_CTRL_RESET          1/* opt - rewind/zero etc */\n# define BIO_CTRL_EOF            2/* opt - are we at the eof */\n# define BIO_CTRL_INFO           3/* opt - extra tit-bits */\n# define BIO_CTRL_SET            4/* man - set the 'IO' type */\n# define BIO_CTRL_GET            5/* man - get the 'IO' type */\n# define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */\n# define BIO_CTRL_POP            7/* opt - internal, used to signify change */\n# define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */\n# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */\n# define BIO_CTRL_PENDING        10/* opt - is their more data buffered */\n# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */\n# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */\n# define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */\n/* callback is int cb(BIO *bio,state,ret); */\n# define BIO_CTRL_SET_CALLBACK   14/* opt - set callback function */\n# define BIO_CTRL_GET_CALLBACK   15/* opt - set callback function */\n\n# define BIO_CTRL_SET_FILENAME   30/* BIO_s_file special */\n\n/* dgram BIO stuff */\n# define BIO_CTRL_DGRAM_CONNECT       31/* BIO dgram special */\n# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected\n                                         * socket to be passed in */\n# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */\n# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */\n# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */\n# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */\n\n# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */\n# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */\n\n/* #ifdef IP_MTU_DISCOVER */\n# define BIO_CTRL_DGRAM_MTU_DISCOVER       39/* set DF bit on egress packets */\n/* #endif */\n\n# define BIO_CTRL_DGRAM_QUERY_MTU          40/* as kernel for current MTU */\n# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU   47\n# define BIO_CTRL_DGRAM_GET_MTU            41/* get cached value for MTU */\n# define BIO_CTRL_DGRAM_SET_MTU            42/* set cached value for MTU.\n                                              * want to use this if asking\n                                              * the kernel fails */\n\n# define BIO_CTRL_DGRAM_MTU_EXCEEDED       43/* check whether the MTU was\n                                              * exceed in the previous write\n                                              * operation */\n\n# define BIO_CTRL_DGRAM_GET_PEER           46\n# define BIO_CTRL_DGRAM_SET_PEER           44/* Destination for the data */\n\n# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT   45/* Next DTLS handshake timeout\n                                              * to adjust socket timeouts */\n# define BIO_CTRL_DGRAM_SET_DONT_FRAG      48\n\n# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD   49\n\n# ifndef OPENSSL_NO_SCTP\n/* SCTP stuff */\n#  define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE    50\n#  define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY                51\n#  define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY               52\n#  define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD               53\n#  define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO         60\n#  define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO         61\n#  define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO         62\n#  define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO         63\n#  define BIO_CTRL_DGRAM_SCTP_GET_PRINFO                  64\n#  define BIO_CTRL_DGRAM_SCTP_SET_PRINFO                  65\n#  define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN               70\n# endif\n\n/* modifiers */\n# define BIO_FP_READ             0x02\n# define BIO_FP_WRITE            0x04\n# define BIO_FP_APPEND           0x08\n# define BIO_FP_TEXT             0x10\n\n# define BIO_FLAGS_READ          0x01\n# define BIO_FLAGS_WRITE         0x02\n# define BIO_FLAGS_IO_SPECIAL    0x04\n# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)\n# define BIO_FLAGS_SHOULD_RETRY  0x08\n# ifndef BIO_FLAGS_UPLINK\n/*\n * \"UPLINK\" flag denotes file descriptors provided by application. It\n * defaults to 0, as most platforms don't require UPLINK interface.\n */\n#  define BIO_FLAGS_UPLINK        0\n# endif\n\n/* Used in BIO_gethostbyname() */\n# define BIO_GHBN_CTRL_HITS              1\n# define BIO_GHBN_CTRL_MISSES            2\n# define BIO_GHBN_CTRL_CACHE_SIZE        3\n# define BIO_GHBN_CTRL_GET_ENTRY         4\n# define BIO_GHBN_CTRL_FLUSH             5\n\n/* Mostly used in the SSL BIO */\n/*-\n * Not used anymore\n * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10\n * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20\n * #define BIO_FLAGS_PROTOCOL_STARTUP   0x40\n */\n\n# define BIO_FLAGS_BASE64_NO_NL  0x100\n\n/*\n * This is used with memory BIOs: it means we shouldn't free up or change the\n * data in any way.\n */\n# define BIO_FLAGS_MEM_RDONLY    0x200\n\ntypedef struct bio_st BIO;\n\nvoid BIO_set_flags(BIO *b, int flags);\nint BIO_test_flags(const BIO *b, int flags);\nvoid BIO_clear_flags(BIO *b, int flags);\n\n# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))\n# define BIO_set_retry_special(b) \\\n                BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))\n# define BIO_set_retry_read(b) \\\n                BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))\n# define BIO_set_retry_write(b) \\\n                BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))\n\n/* These are normally used internally in BIOs */\n# define BIO_clear_retry_flags(b) \\\n                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))\n# define BIO_get_retry_flags(b) \\\n                BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))\n\n/* These should be used by the application to tell why we should retry */\n# define BIO_should_read(a)              BIO_test_flags(a, BIO_FLAGS_READ)\n# define BIO_should_write(a)             BIO_test_flags(a, BIO_FLAGS_WRITE)\n# define BIO_should_io_special(a)        BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)\n# define BIO_retry_type(a)               BIO_test_flags(a, BIO_FLAGS_RWS)\n# define BIO_should_retry(a)             BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)\n\n/*\n * The next three are used in conjunction with the BIO_should_io_special()\n * condition.  After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int\n * *reason); will walk the BIO stack and return the 'reason' for the special\n * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return\n * the code.\n */\n/*\n * Returned from the SSL bio when the certificate retrieval code had an error\n */\n# define BIO_RR_SSL_X509_LOOKUP          0x01\n/* Returned from the connect BIO when a connect would have blocked */\n# define BIO_RR_CONNECT                  0x02\n/* Returned from the accept BIO when an accept would have blocked */\n# define BIO_RR_ACCEPT                   0x03\n\n/* These are passed by the BIO callback */\n# define BIO_CB_FREE     0x01\n# define BIO_CB_READ     0x02\n# define BIO_CB_WRITE    0x03\n# define BIO_CB_PUTS     0x04\n# define BIO_CB_GETS     0x05\n# define BIO_CB_CTRL     0x06\n\n/*\n * The callback is called before and after the underling operation, The\n * BIO_CB_RETURN flag indicates if it is after the call\n */\n# define BIO_CB_RETURN   0x80\n# define BIO_CB_return(a) ((a)|BIO_CB_RETURN))\n# define BIO_cb_pre(a)   (!((a)&BIO_CB_RETURN))\n# define BIO_cb_post(a)  ((a)&BIO_CB_RETURN)\n\nlong (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *,\n                                        int, long, long);\nvoid BIO_set_callback(BIO *b,\n                      long (*callback) (struct bio_st *, int, const char *,\n                                        int, long, long));\nchar *BIO_get_callback_arg(const BIO *b);\nvoid BIO_set_callback_arg(BIO *b, char *arg);\n\nconst char *BIO_method_name(const BIO *b);\nint BIO_method_type(const BIO *b);\n\ntypedef void bio_info_cb (struct bio_st *, int, const char *, int, long,\n                          long);\n\ntypedef struct bio_method_st {\n    int type;\n    const char *name;\n    int (*bwrite) (BIO *, const char *, int);\n    int (*bread) (BIO *, char *, int);\n    int (*bputs) (BIO *, const char *);\n    int (*bgets) (BIO *, char *, int);\n    long (*ctrl) (BIO *, int, long, void *);\n    int (*create) (BIO *);\n    int (*destroy) (BIO *);\n    long (*callback_ctrl) (BIO *, int, bio_info_cb *);\n} BIO_METHOD;\n\nstruct bio_st {\n    BIO_METHOD *method;\n    /* bio, mode, argp, argi, argl, ret */\n    long (*callback) (struct bio_st *, int, const char *, int, long, long);\n    char *cb_arg;               /* first argument for the callback */\n    int init;\n    int shutdown;\n    int flags;                  /* extra storage */\n    int retry_reason;\n    int num;\n    void *ptr;\n    struct bio_st *next_bio;    /* used by filter BIOs */\n    struct bio_st *prev_bio;    /* used by filter BIOs */\n    int references;\n    unsigned long num_read;\n    unsigned long num_write;\n    CRYPTO_EX_DATA ex_data;\n};\n\nDECLARE_STACK_OF(BIO)\n\ntypedef struct bio_f_buffer_ctx_struct {\n    /*-\n     * Buffers are setup like this:\n     *\n     * <---------------------- size ----------------------->\n     * +---------------------------------------------------+\n     * | consumed | remaining          | free space        |\n     * +---------------------------------------------------+\n     * <-- off --><------- len ------->\n     */\n    /*- BIO *bio; *//*\n     * this is now in the BIO struct\n     */\n    int ibuf_size;              /* how big is the input buffer */\n    int obuf_size;              /* how big is the output buffer */\n    char *ibuf;                 /* the char array */\n    int ibuf_len;               /* how many bytes are in it */\n    int ibuf_off;               /* write/read offset */\n    char *obuf;                 /* the char array */\n    int obuf_len;               /* how many bytes are in it */\n    int obuf_off;               /* write/read offset */\n} BIO_F_BUFFER_CTX;\n\n/* Prefix and suffix callback in ASN1 BIO */\ntypedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen,\n                          void *parg);\n\n# ifndef OPENSSL_NO_SCTP\n/* SCTP parameter structs */\nstruct bio_dgram_sctp_sndinfo {\n    uint16_t snd_sid;\n    uint16_t snd_flags;\n    uint32_t snd_ppid;\n    uint32_t snd_context;\n};\n\nstruct bio_dgram_sctp_rcvinfo {\n    uint16_t rcv_sid;\n    uint16_t rcv_ssn;\n    uint16_t rcv_flags;\n    uint32_t rcv_ppid;\n    uint32_t rcv_tsn;\n    uint32_t rcv_cumtsn;\n    uint32_t rcv_context;\n};\n\nstruct bio_dgram_sctp_prinfo {\n    uint16_t pr_policy;\n    uint32_t pr_value;\n};\n# endif\n\n/* connect BIO stuff */\n# define BIO_CONN_S_BEFORE               1\n# define BIO_CONN_S_GET_IP               2\n# define BIO_CONN_S_GET_PORT             3\n# define BIO_CONN_S_CREATE_SOCKET        4\n# define BIO_CONN_S_CONNECT              5\n# define BIO_CONN_S_OK                   6\n# define BIO_CONN_S_BLOCKED_CONNECT      7\n# define BIO_CONN_S_NBIO                 8\n/*\n * #define BIO_CONN_get_param_hostname BIO_ctrl\n */\n\n# define BIO_C_SET_CONNECT                       100\n# define BIO_C_DO_STATE_MACHINE                  101\n# define BIO_C_SET_NBIO                          102\n# define BIO_C_SET_PROXY_PARAM                   103\n# define BIO_C_SET_FD                            104\n# define BIO_C_GET_FD                            105\n# define BIO_C_SET_FILE_PTR                      106\n# define BIO_C_GET_FILE_PTR                      107\n# define BIO_C_SET_FILENAME                      108\n# define BIO_C_SET_SSL                           109\n# define BIO_C_GET_SSL                           110\n# define BIO_C_SET_MD                            111\n# define BIO_C_GET_MD                            112\n# define BIO_C_GET_CIPHER_STATUS                 113\n# define BIO_C_SET_BUF_MEM                       114\n# define BIO_C_GET_BUF_MEM_PTR                   115\n# define BIO_C_GET_BUFF_NUM_LINES                116\n# define BIO_C_SET_BUFF_SIZE                     117\n# define BIO_C_SET_ACCEPT                        118\n# define BIO_C_SSL_MODE                          119\n# define BIO_C_GET_MD_CTX                        120\n# define BIO_C_GET_PROXY_PARAM                   121\n# define BIO_C_SET_BUFF_READ_DATA                122/* data to read first */\n# define BIO_C_GET_CONNECT                       123\n# define BIO_C_GET_ACCEPT                        124\n# define BIO_C_SET_SSL_RENEGOTIATE_BYTES         125\n# define BIO_C_GET_SSL_NUM_RENEGOTIATES          126\n# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT       127\n# define BIO_C_FILE_SEEK                         128\n# define BIO_C_GET_CIPHER_CTX                    129\n# define BIO_C_SET_BUF_MEM_EOF_RETURN            130/* return end of input\n                                                     * value */\n# define BIO_C_SET_BIND_MODE                     131\n# define BIO_C_GET_BIND_MODE                     132\n# define BIO_C_FILE_TELL                         133\n# define BIO_C_GET_SOCKS                         134\n# define BIO_C_SET_SOCKS                         135\n\n# define BIO_C_SET_WRITE_BUF_SIZE                136/* for BIO_s_bio */\n# define BIO_C_GET_WRITE_BUF_SIZE                137\n# define BIO_C_MAKE_BIO_PAIR                     138\n# define BIO_C_DESTROY_BIO_PAIR                  139\n# define BIO_C_GET_WRITE_GUARANTEE               140\n# define BIO_C_GET_READ_REQUEST                  141\n# define BIO_C_SHUTDOWN_WR                       142\n# define BIO_C_NREAD0                            143\n# define BIO_C_NREAD                             144\n# define BIO_C_NWRITE0                           145\n# define BIO_C_NWRITE                            146\n# define BIO_C_RESET_READ_REQUEST                147\n# define BIO_C_SET_MD_CTX                        148\n\n# define BIO_C_SET_PREFIX                        149\n# define BIO_C_GET_PREFIX                        150\n# define BIO_C_SET_SUFFIX                        151\n# define BIO_C_GET_SUFFIX                        152\n\n# define BIO_C_SET_EX_ARG                        153\n# define BIO_C_GET_EX_ARG                        154\n\n# define BIO_set_app_data(s,arg)         BIO_set_ex_data(s,0,arg)\n# define BIO_get_app_data(s)             BIO_get_ex_data(s,0)\n\n/* BIO_s_connect() and BIO_s_socks4a_connect() */\n# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name)\n# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port)\n# define BIO_set_conn_ip(b,ip)     BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip)\n# define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port)\n# define BIO_get_conn_hostname(b)  BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)\n# define BIO_get_conn_port(b)      BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)\n# define BIO_get_conn_ip(b)               BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)\n# define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0)\n\n# define BIO_set_nbio(b,n)       BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)\n\n/* BIO_s_accept_socket() */\n# define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)\n# define BIO_get_accept_port(b)  BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)\n/* #define BIO_set_nbio(b,n)    BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */\n# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)\"a\":NULL)\n# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio)\n\n# define BIO_BIND_NORMAL                 0\n# define BIO_BIND_REUSEADDR_IF_UNUSED    1\n# define BIO_BIND_REUSEADDR              2\n# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)\n# define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)\n\n# define BIO_do_connect(b)       BIO_do_handshake(b)\n# define BIO_do_accept(b)        BIO_do_handshake(b)\n# define BIO_do_handshake(b)     BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)\n\n/* BIO_s_proxy_client() */\n# define BIO_set_url(b,url)      BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url))\n# define BIO_set_proxies(b,p)    BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p))\n/* BIO_set_nbio(b,n) */\n# define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s))\n/* BIO *BIO_get_filter_bio(BIO *bio); */\n# define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)()))\n# define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk)\n# define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool)\n\n# define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp)\n# define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p))\n# define BIO_get_url(b,url)      BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url))\n# define BIO_get_no_connect_return(b)    BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL)\n\n# define BIO_set_fd(b,fd,c)      BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)\n# define BIO_get_fd(b,c)         BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)\n\n# define BIO_set_fp(b,fp,c)      BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp)\n# define BIO_get_fp(b,fpp)       BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp)\n\n# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)\n# define BIO_tell(b)     (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)\n\n/*\n * name is cast to lose const, but might be better to route through a\n * function so we can do it safely\n */\n# ifdef CONST_STRICT\n/*\n * If you are wondering why this isn't defined, its because CONST_STRICT is\n * purely a compile-time kludge to allow const to be checked.\n */\nint BIO_read_filename(BIO *b, const char *name);\n# else\n#  define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\\n                BIO_CLOSE|BIO_FP_READ,(char *)name)\n# endif\n# define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\\n                BIO_CLOSE|BIO_FP_WRITE,name)\n# define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\\n                BIO_CLOSE|BIO_FP_APPEND,name)\n# define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\\n                BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name)\n\n/*\n * WARNING WARNING, this ups the reference count on the read bio of the SSL\n * structure.  This is because the ssl read BIO is now pointed to by the\n * next_bio field in the bio.  So when you free the BIO, make sure you are\n * doing a BIO_free_all() to catch the underlying BIO.\n */\n# define BIO_set_ssl(b,ssl,c)    BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)\n# define BIO_get_ssl(b,sslp)     BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp)\n# define BIO_set_ssl_mode(b,client)      BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL)\n# define BIO_set_ssl_renegotiate_bytes(b,num) \\\n        BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL);\n# define BIO_get_num_renegotiates(b) \\\n        BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL);\n# define BIO_set_ssl_renegotiate_timeout(b,seconds) \\\n        BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL);\n\n/* defined in evp.h */\n/* #define BIO_set_md(b,md)     BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */\n\n# define BIO_get_mem_data(b,pp)  BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)\n# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm)\n# define BIO_get_mem_ptr(b,pp)   BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp)\n# define BIO_set_mem_eof_return(b,v) \\\n                                BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL)\n\n/* For the BIO_f_buffer() type */\n# define BIO_get_buffer_num_lines(b)     BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)\n# define BIO_set_buffer_size(b,size)     BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)\n# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)\n# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)\n# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)\n\n/* Don't use the next one unless you know what you are doing :-) */\n# define BIO_dup_state(b,ret)    BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret))\n\n# define BIO_reset(b)            (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL)\n# define BIO_eof(b)              (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL)\n# define BIO_set_close(b,c)      (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)\n# define BIO_get_close(b)        (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL)\n# define BIO_pending(b)          (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)\n# define BIO_wpending(b)         (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL)\n/* ...pending macros have inappropriate return type */\nsize_t BIO_ctrl_pending(BIO *b);\nsize_t BIO_ctrl_wpending(BIO *b);\n# define BIO_flush(b)            (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)\n# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \\\n                                                   cbp)\n# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb)\n\n/* For the BIO_f_buffer() type */\n# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)\n\n/* For BIO_s_bio() */\n# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL)\n# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)\n# define BIO_make_bio_pair(b1,b2)   (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)\n# define BIO_destroy_bio_pair(b)    (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)\n# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL)\n/* macros with inappropriate type -- but ...pending macros use int too: */\n# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)\n# define BIO_get_read_request(b)    (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)\nsize_t BIO_ctrl_get_write_guarantee(BIO *b);\nsize_t BIO_ctrl_get_read_request(BIO *b);\nint BIO_ctrl_reset_read_request(BIO *b);\n\n/* ctrl macros for dgram */\n# define BIO_ctrl_dgram_connect(b,peer)  \\\n                     (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer)\n# define BIO_ctrl_set_connected(b, state, peer) \\\n         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer)\n# define BIO_dgram_recv_timedout(b) \\\n         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL)\n# define BIO_dgram_send_timedout(b) \\\n         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL)\n# define BIO_dgram_get_peer(b,peer) \\\n         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer)\n# define BIO_dgram_set_peer(b,peer) \\\n         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer)\n# define BIO_dgram_get_mtu_overhead(b) \\\n         (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL)\n\n/* These two aren't currently implemented */\n/* int BIO_get_ex_num(BIO *bio); */\n/* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */\nint BIO_set_ex_data(BIO *bio, int idx, void *data);\nvoid *BIO_get_ex_data(BIO *bio, int idx);\nint BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                         CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nunsigned long BIO_number_read(BIO *bio);\nunsigned long BIO_number_written(BIO *bio);\n\n/* For BIO_f_asn1() */\nint BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,\n                        asn1_ps_func *prefix_free);\nint BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,\n                        asn1_ps_func **pprefix_free);\nint BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,\n                        asn1_ps_func *suffix_free);\nint BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,\n                        asn1_ps_func **psuffix_free);\n\n# ifndef OPENSSL_NO_FP_API\nBIO_METHOD *BIO_s_file(void);\nBIO *BIO_new_file(const char *filename, const char *mode);\nBIO *BIO_new_fp(FILE *stream, int close_flag);\n#  define BIO_s_file_internal    BIO_s_file\n# endif\nBIO *BIO_new(BIO_METHOD *type);\nint BIO_set(BIO *a, BIO_METHOD *type);\nint BIO_free(BIO *a);\nvoid BIO_vfree(BIO *a);\nint BIO_read(BIO *b, void *data, int len);\nint BIO_gets(BIO *bp, char *buf, int size);\nint BIO_write(BIO *b, const void *data, int len);\nint BIO_puts(BIO *bp, const char *buf);\nint BIO_indent(BIO *b, int indent, int max);\nlong BIO_ctrl(BIO *bp, int cmd, long larg, void *parg);\nlong BIO_callback_ctrl(BIO *b, int cmd,\n                       void (*fp) (struct bio_st *, int, const char *, int,\n                                   long, long));\nchar *BIO_ptr_ctrl(BIO *bp, int cmd, long larg);\nlong BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);\nBIO *BIO_push(BIO *b, BIO *append);\nBIO *BIO_pop(BIO *b);\nvoid BIO_free_all(BIO *a);\nBIO *BIO_find_type(BIO *b, int bio_type);\nBIO *BIO_next(BIO *b);\nBIO *BIO_get_retry_BIO(BIO *bio, int *reason);\nint BIO_get_retry_reason(BIO *bio);\nBIO *BIO_dup_chain(BIO *in);\n\nint BIO_nread0(BIO *bio, char **buf);\nint BIO_nread(BIO *bio, char **buf, int num);\nint BIO_nwrite0(BIO *bio, char **buf);\nint BIO_nwrite(BIO *bio, char **buf, int num);\n\nlong BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi,\n                        long argl, long ret);\n\nBIO_METHOD *BIO_s_mem(void);\nBIO *BIO_new_mem_buf(void *buf, int len);\nBIO_METHOD *BIO_s_socket(void);\nBIO_METHOD *BIO_s_connect(void);\nBIO_METHOD *BIO_s_accept(void);\nBIO_METHOD *BIO_s_fd(void);\n# ifndef OPENSSL_SYS_OS2\nBIO_METHOD *BIO_s_log(void);\n# endif\nBIO_METHOD *BIO_s_bio(void);\nBIO_METHOD *BIO_s_null(void);\nBIO_METHOD *BIO_f_null(void);\nBIO_METHOD *BIO_f_buffer(void);\n# ifdef OPENSSL_SYS_VMS\nBIO_METHOD *BIO_f_linebuffer(void);\n# endif\nBIO_METHOD *BIO_f_nbio_test(void);\n# ifndef OPENSSL_NO_DGRAM\nBIO_METHOD *BIO_s_datagram(void);\n#  ifndef OPENSSL_NO_SCTP\nBIO_METHOD *BIO_s_datagram_sctp(void);\n#  endif\n# endif\n\n/* BIO_METHOD *BIO_f_ber(void); */\n\nint BIO_sock_should_retry(int i);\nint BIO_sock_non_fatal_error(int error);\nint BIO_dgram_non_fatal_error(int error);\n\nint BIO_fd_should_retry(int i);\nint BIO_fd_non_fatal_error(int error);\nint BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u),\n                void *u, const char *s, int len);\nint BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u),\n                       void *u, const char *s, int len, int indent);\nint BIO_dump(BIO *b, const char *bytes, int len);\nint BIO_dump_indent(BIO *b, const char *bytes, int len, int indent);\n# ifndef OPENSSL_NO_FP_API\nint BIO_dump_fp(FILE *fp, const char *s, int len);\nint BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);\n# endif\nint BIO_hex_string(BIO *out, int indent, int width, unsigned char *data,\n                   int datalen);\n\nstruct hostent *BIO_gethostbyname(const char *name);\n/*-\n * We might want a thread-safe interface too:\n * struct hostent *BIO_gethostbyname_r(const char *name,\n *     struct hostent *result, void *buffer, size_t buflen);\n * or something similar (caller allocates a struct hostent,\n * pointed to by \"result\", and additional buffer space for the various\n * substructures; if the buffer does not suffice, NULL is returned\n * and an appropriate error code is set).\n */\nint BIO_sock_error(int sock);\nint BIO_socket_ioctl(int fd, long type, void *arg);\nint BIO_socket_nbio(int fd, int mode);\nint BIO_get_port(const char *str, unsigned short *port_ptr);\nint BIO_get_host_ip(const char *str, unsigned char *ip);\nint BIO_get_accept_socket(char *host_port, int mode);\nint BIO_accept(int sock, char **ip_port);\nint BIO_sock_init(void);\nvoid BIO_sock_cleanup(void);\nint BIO_set_tcp_ndelay(int sock, int turn_on);\n\nBIO *BIO_new_socket(int sock, int close_flag);\nBIO *BIO_new_dgram(int fd, int close_flag);\n# ifndef OPENSSL_NO_SCTP\nBIO *BIO_new_dgram_sctp(int fd, int close_flag);\nint BIO_dgram_is_sctp(BIO *bio);\nint BIO_dgram_sctp_notification_cb(BIO *b,\n                                   void (*handle_notifications) (BIO *bio,\n                                                                 void\n                                                                 *context,\n                                                                 void *buf),\n                                   void *context);\nint BIO_dgram_sctp_wait_for_dry(BIO *b);\nint BIO_dgram_sctp_msg_waiting(BIO *b);\n# endif\nBIO *BIO_new_fd(int fd, int close_flag);\nBIO *BIO_new_connect(const char *host_port);\nBIO *BIO_new_accept(const char *host_port);\n\nint BIO_new_bio_pair(BIO **bio1, size_t writebuf1,\n                     BIO **bio2, size_t writebuf2);\n/*\n * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints.\n * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default\n * value.\n */\n\nvoid BIO_copy_next_retry(BIO *b);\n\n/*\n * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);\n */\n\n# ifdef __GNUC__\n#  define __bio_h__attr__ __attribute__\n# else\n#  define __bio_h__attr__(x)\n# endif\nint BIO_printf(BIO *bio, const char *format, ...)\n__bio_h__attr__((__format__(__printf__, 2, 3)));\nint BIO_vprintf(BIO *bio, const char *format, va_list args)\n__bio_h__attr__((__format__(__printf__, 2, 0)));\nint BIO_snprintf(char *buf, size_t n, const char *format, ...)\n__bio_h__attr__((__format__(__printf__, 3, 4)));\nint BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)\n__bio_h__attr__((__format__(__printf__, 3, 0)));\n# undef __bio_h__attr__\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_BIO_strings(void);\n\n/* Error codes for the BIO functions. */\n\n/* Function codes. */\n# define BIO_F_ACPT_STATE                                 100\n# define BIO_F_BIO_ACCEPT                                 101\n# define BIO_F_BIO_BER_GET_HEADER                         102\n# define BIO_F_BIO_CALLBACK_CTRL                          131\n# define BIO_F_BIO_CTRL                                   103\n# define BIO_F_BIO_GETHOSTBYNAME                          120\n# define BIO_F_BIO_GETS                                   104\n# define BIO_F_BIO_GET_ACCEPT_SOCKET                      105\n# define BIO_F_BIO_GET_HOST_IP                            106\n# define BIO_F_BIO_GET_PORT                               107\n# define BIO_F_BIO_MAKE_PAIR                              121\n# define BIO_F_BIO_NEW                                    108\n# define BIO_F_BIO_NEW_FILE                               109\n# define BIO_F_BIO_NEW_MEM_BUF                            126\n# define BIO_F_BIO_NREAD                                  123\n# define BIO_F_BIO_NREAD0                                 124\n# define BIO_F_BIO_NWRITE                                 125\n# define BIO_F_BIO_NWRITE0                                122\n# define BIO_F_BIO_PUTS                                   110\n# define BIO_F_BIO_READ                                   111\n# define BIO_F_BIO_SOCK_INIT                              112\n# define BIO_F_BIO_WRITE                                  113\n# define BIO_F_BUFFER_CTRL                                114\n# define BIO_F_CONN_CTRL                                  127\n# define BIO_F_CONN_STATE                                 115\n# define BIO_F_DGRAM_SCTP_READ                            132\n# define BIO_F_DGRAM_SCTP_WRITE                           133\n# define BIO_F_FILE_CTRL                                  116\n# define BIO_F_FILE_READ                                  130\n# define BIO_F_LINEBUFFER_CTRL                            129\n# define BIO_F_MEM_READ                                   128\n# define BIO_F_MEM_WRITE                                  117\n# define BIO_F_SSL_NEW                                    118\n# define BIO_F_WSASTARTUP                                 119\n\n/* Reason codes. */\n# define BIO_R_ACCEPT_ERROR                               100\n# define BIO_R_BAD_FOPEN_MODE                             101\n# define BIO_R_BAD_HOSTNAME_LOOKUP                        102\n# define BIO_R_BROKEN_PIPE                                124\n# define BIO_R_CONNECT_ERROR                              103\n# define BIO_R_EOF_ON_MEMORY_BIO                          127\n# define BIO_R_ERROR_SETTING_NBIO                         104\n# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET      105\n# define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET        106\n# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET          107\n# define BIO_R_INVALID_ARGUMENT                           125\n# define BIO_R_INVALID_IP_ADDRESS                         108\n# define BIO_R_IN_USE                                     123\n# define BIO_R_KEEPALIVE                                  109\n# define BIO_R_NBIO_CONNECT_ERROR                         110\n# define BIO_R_NO_ACCEPT_PORT_SPECIFIED                   111\n# define BIO_R_NO_HOSTNAME_SPECIFIED                      112\n# define BIO_R_NO_PORT_DEFINED                            113\n# define BIO_R_NO_PORT_SPECIFIED                          114\n# define BIO_R_NO_SUCH_FILE                               128\n# define BIO_R_NULL_PARAMETER                             115\n# define BIO_R_TAG_MISMATCH                               116\n# define BIO_R_UNABLE_TO_BIND_SOCKET                      117\n# define BIO_R_UNABLE_TO_CREATE_SOCKET                    118\n# define BIO_R_UNABLE_TO_LISTEN_SOCKET                    119\n# define BIO_R_UNINITIALIZED                              120\n# define BIO_R_UNSUPPORTED_METHOD                         121\n# define BIO_R_WRITE_TO_READ_ONLY_BIO                     126\n# define BIO_R_WSASTARTUP                                 122\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/blowfish.h",
    "content": "/* crypto/bf/blowfish.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_BLOWFISH_H\n# define HEADER_BLOWFISH_H\n\n# include <openssl/e_os2.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_NO_BF\n#  error BF is disabled.\n# endif\n\n# define BF_ENCRYPT      1\n# define BF_DECRYPT      0\n\n/*-\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * ! BF_LONG has to be at least 32 bits wide. If it's wider, then !\n * ! BF_LONG_LOG2 has to be defined along.                        !\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n */\n\n# if defined(__LP32__)\n#  define BF_LONG unsigned long\n# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)\n#  define BF_LONG unsigned long\n#  define BF_LONG_LOG2 3\n/*\n * _CRAY note. I could declare short, but I have no idea what impact\n * does it have on performance on none-T3E machines. I could declare\n * int, but at least on C90 sizeof(int) can be chosen at compile time.\n * So I've chosen long...\n *                                      <appro@fy.chalmers.se>\n */\n# else\n#  define BF_LONG unsigned int\n# endif\n\n# define BF_ROUNDS       16\n# define BF_BLOCK        8\n\ntypedef struct bf_key_st {\n    BF_LONG P[BF_ROUNDS + 2];\n    BF_LONG S[4 * 256];\n} BF_KEY;\n\n# ifdef OPENSSL_FIPS\nvoid private_BF_set_key(BF_KEY *key, int len, const unsigned char *data);\n# endif\nvoid BF_set_key(BF_KEY *key, int len, const unsigned char *data);\n\nvoid BF_encrypt(BF_LONG *data, const BF_KEY *key);\nvoid BF_decrypt(BF_LONG *data, const BF_KEY *key);\n\nvoid BF_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                    const BF_KEY *key, int enc);\nvoid BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,\n                    const BF_KEY *schedule, unsigned char *ivec, int enc);\nvoid BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                      long length, const BF_KEY *schedule,\n                      unsigned char *ivec, int *num, int enc);\nvoid BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                      long length, const BF_KEY *schedule,\n                      unsigned char *ivec, int *num);\nconst char *BF_options(void);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/bn.h",
    "content": "/* crypto/bn/bn.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n *\n * Portions of the attached software (\"Contribution\") are developed by\n * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\n *\n * The Contribution is licensed pursuant to the Eric Young open source\n * license provided above.\n *\n * The binary polynomial arithmetic software is originally written by\n * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.\n *\n */\n\n#ifndef HEADER_BN_H\n# define HEADER_BN_H\n\n# include \"openssl/e_os2.h\"\n# ifndef OPENSSL_NO_FP_API\n#  include <stdio.h>            /* FILE */\n# endif\n# include \"openssl/ossl_typ.h\"\n# include \"openssl/crypto.h\"\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * These preprocessor symbols control various aspects of the bignum headers\n * and library code. They're not defined by any \"normal\" configuration, as\n * they are intended for development and testing purposes. NB: defining all\n * three can be useful for debugging application code as well as openssl\n * itself. BN_DEBUG - turn on various debugging alterations to the bignum\n * code BN_DEBUG_RAND - uses random poisoning of unused words to trip up\n * mismanagement of bignum internals. You must also define BN_DEBUG.\n */\n/* #define BN_DEBUG */\n/* #define BN_DEBUG_RAND */\n\n# ifndef OPENSSL_SMALL_FOOTPRINT\n#  define BN_MUL_COMBA\n#  define BN_SQR_COMBA\n#  define BN_RECURSION\n# endif\n\n/*\n * This next option uses the C libraries (2 word)/(1 word) function. If it is\n * not defined, I use my C version (which is slower). The reason for this\n * flag is that when the particular C compiler library routine is used, and\n * the library is linked with a different compiler, the library is missing.\n * This mostly happens when the library is built with gcc and then linked\n * using normal cc.  This would be a common occurrence because gcc normally\n * produces code that is 2 times faster than system compilers for the big\n * number stuff. For machines with only one compiler (or shared libraries),\n * this should be on.  Again this in only really a problem on machines using\n * \"long long's\", are 32bit, and are not using my assembler code.\n */\n# if defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_WINDOWS) || \\\n    defined(OPENSSL_SYS_WIN32) || defined(linux)\n#  ifndef BN_DIV2W\n#   define BN_DIV2W\n#  endif\n# endif\n\n/*\n * assuming long is 64bit - this is the DEC Alpha unsigned long long is only\n * 64 bits :-(, don't define BN_LLONG for the DEC Alpha\n */\n# ifdef SIXTY_FOUR_BIT_LONG\n#  define BN_ULLONG       unsigned long long\n#  define BN_ULONG        unsigned long\n#  define BN_LONG         long\n#  define BN_BITS         128\n#  define BN_BYTES        8\n#  define BN_BITS2        64\n#  define BN_BITS4        32\n#  define BN_MASK         (0xffffffffffffffffffffffffffffffffLL)\n#  define BN_MASK2        (0xffffffffffffffffL)\n#  define BN_MASK2l       (0xffffffffL)\n#  define BN_MASK2h       (0xffffffff00000000L)\n#  define BN_MASK2h1      (0xffffffff80000000L)\n#  define BN_TBIT         (0x8000000000000000L)\n#  define BN_DEC_CONV     (10000000000000000000UL)\n#  define BN_DEC_FMT1     \"%lu\"\n#  define BN_DEC_FMT2     \"%019lu\"\n#  define BN_DEC_NUM      19\n#  define BN_HEX_FMT1     \"%lX\"\n#  define BN_HEX_FMT2     \"%016lX\"\n# endif\n\n/*\n * This is where the long long data type is 64 bits, but long is 32. For\n * machines where there are 64bit registers, this is the mode to use. IRIX,\n * on R4000 and above should use this mode, along with the relevant assembler\n * code :-).  Do NOT define BN_LLONG.\n */\n# ifdef SIXTY_FOUR_BIT\n#  undef BN_LLONG\n#  undef BN_ULLONG\n#  define BN_ULONG        unsigned long long\n#  define BN_LONG         long long\n#  define BN_BITS         128\n#  define BN_BYTES        8\n#  define BN_BITS2        64\n#  define BN_BITS4        32\n#  define BN_MASK2        (0xffffffffffffffffLL)\n#  define BN_MASK2l       (0xffffffffL)\n#  define BN_MASK2h       (0xffffffff00000000LL)\n#  define BN_MASK2h1      (0xffffffff80000000LL)\n#  define BN_TBIT         (0x8000000000000000LL)\n#  define BN_DEC_CONV     (10000000000000000000ULL)\n#  define BN_DEC_FMT1     \"%llu\"\n#  define BN_DEC_FMT2     \"%019llu\"\n#  define BN_DEC_NUM      19\n#  define BN_HEX_FMT1     \"%llX\"\n#  define BN_HEX_FMT2     \"%016llX\"\n# endif\n\n# ifdef THIRTY_TWO_BIT\n#  ifdef BN_LLONG\n#   if defined(_WIN32) && !defined(__GNUC__)\n#    define BN_ULLONG     unsigned __int64\n#    define BN_MASK       (0xffffffffffffffffI64)\n#   else\n#    define BN_ULLONG     unsigned long long\n#    define BN_MASK       (0xffffffffffffffffLL)\n#   endif\n#  endif\n#  define BN_ULONG        unsigned int\n#  define BN_LONG         int\n#  define BN_BITS         64\n#  define BN_BYTES        4\n#  define BN_BITS2        32\n#  define BN_BITS4        16\n#  define BN_MASK2        (0xffffffffL)\n#  define BN_MASK2l       (0xffff)\n#  define BN_MASK2h1      (0xffff8000L)\n#  define BN_MASK2h       (0xffff0000L)\n#  define BN_TBIT         (0x80000000L)\n#  define BN_DEC_CONV     (1000000000L)\n#  define BN_DEC_FMT1     \"%u\"\n#  define BN_DEC_FMT2     \"%09u\"\n#  define BN_DEC_NUM      9\n#  define BN_HEX_FMT1     \"%X\"\n#  define BN_HEX_FMT2     \"%08X\"\n# endif\n\n# define BN_DEFAULT_BITS 1280\n\n# define BN_FLG_MALLOCED         0x01\n# define BN_FLG_STATIC_DATA      0x02\n\n/*\n * avoid leaking exponent information through timing,\n * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime,\n * BN_div() will call BN_div_no_branch,\n * BN_mod_inverse() will call BN_mod_inverse_no_branch.\n */\n# define BN_FLG_CONSTTIME        0x04\n\n# ifdef OPENSSL_NO_DEPRECATED\n/* deprecated name for the flag */\n#  define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME\n/*\n * avoid leaking exponent information through timings\n * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime)\n */\n# endif\n\n# ifndef OPENSSL_NO_DEPRECATED\n#  define BN_FLG_FREE             0x8000\n                                       /* used for debuging */\n# endif\n# define BN_set_flags(b,n)       ((b)->flags|=(n))\n# define BN_get_flags(b,n)       ((b)->flags&(n))\n\n/*\n * get a clone of a BIGNUM with changed flags, for *temporary* use only (the\n * two BIGNUMs cannot not be used in parallel!)\n */\n# define BN_with_flags(dest,b,n)  ((dest)->d=(b)->d, \\\n                                  (dest)->top=(b)->top, \\\n                                  (dest)->dmax=(b)->dmax, \\\n                                  (dest)->neg=(b)->neg, \\\n                                  (dest)->flags=(((dest)->flags & BN_FLG_MALLOCED) \\\n                                                 |  ((b)->flags & ~BN_FLG_MALLOCED) \\\n                                                 |  BN_FLG_STATIC_DATA \\\n                                                 |  (n)))\n\n/* Already declared in ossl_typ.h */\n# if 0\ntypedef struct bignum_st BIGNUM;\n/* Used for temp variables (declaration hidden in bn_lcl.h) */\ntypedef struct bignum_ctx BN_CTX;\ntypedef struct bn_blinding_st BN_BLINDING;\ntypedef struct bn_mont_ctx_st BN_MONT_CTX;\ntypedef struct bn_recp_ctx_st BN_RECP_CTX;\ntypedef struct bn_gencb_st BN_GENCB;\n# endif\n\nstruct bignum_st {\n    BN_ULONG *d;                /* Pointer to an array of 'BN_BITS2' bit\n                                 * chunks. */\n    int top;                    /* Index of last used d +1. */\n    /* The next are internal book keeping for bn_expand. */\n    int dmax;                   /* Size of the d array. */\n    int neg;                    /* one if the number is negative */\n    int flags;\n};\n\n/* Used for montgomery multiplication */\nstruct bn_mont_ctx_st {\n    int ri;                     /* number of bits in R */\n    BIGNUM RR;                  /* used to convert to montgomery form */\n    BIGNUM N;                   /* The modulus */\n    BIGNUM Ni;                  /* R*(1/R mod N) - N*Ni = 1 (Ni is only\n                                 * stored for bignum algorithm) */\n    BN_ULONG n0[2];             /* least significant word(s) of Ni; (type\n                                 * changed with 0.9.9, was \"BN_ULONG n0;\"\n                                 * before) */\n    int flags;\n};\n\n/*\n * Used for reciprocal division/mod functions It cannot be shared between\n * threads\n */\nstruct bn_recp_ctx_st {\n    BIGNUM N;                   /* the divisor */\n    BIGNUM Nr;                  /* the reciprocal */\n    int num_bits;\n    int shift;\n    int flags;\n};\n\n/* Used for slow \"generation\" functions. */\nstruct bn_gencb_st {\n    unsigned int ver;           /* To handle binary (in)compatibility */\n    void *arg;                  /* callback-specific data */\n    union {\n        /* if(ver==1) - handles old style callbacks */\n        void (*cb_1) (int, int, void *);\n        /* if(ver==2) - new callback style */\n        int (*cb_2) (int, int, BN_GENCB *);\n    } cb;\n};\n/* Wrapper function to make using BN_GENCB easier,  */\nint BN_GENCB_call(BN_GENCB *cb, int a, int b);\n/* Macro to populate a BN_GENCB structure with an \"old\"-style callback */\n# define BN_GENCB_set_old(gencb, callback, cb_arg) { \\\n                BN_GENCB *tmp_gencb = (gencb); \\\n                tmp_gencb->ver = 1; \\\n                tmp_gencb->arg = (cb_arg); \\\n                tmp_gencb->cb.cb_1 = (callback); }\n/* Macro to populate a BN_GENCB structure with a \"new\"-style callback */\n# define BN_GENCB_set(gencb, callback, cb_arg) { \\\n                BN_GENCB *tmp_gencb = (gencb); \\\n                tmp_gencb->ver = 2; \\\n                tmp_gencb->arg = (cb_arg); \\\n                tmp_gencb->cb.cb_2 = (callback); }\n\n# define BN_prime_checks 0      /* default: select number of iterations based\n                                 * on the size of the number */\n\n/*\n * number of Miller-Rabin iterations for an error rate of less than 2^-80 for\n * random 'b'-bit input, b >= 100 (taken from table 4.4 in the Handbook of\n * Applied Cryptography [Menezes, van Oorschot, Vanstone; CRC Press 1996];\n * original paper: Damgaard, Landrock, Pomerance: Average case error\n * estimates for the strong probable prime test. -- Math. Comp. 61 (1993)\n * 177-194)\n */\n# define BN_prime_checks_for_size(b) ((b) >= 1300 ?  2 : \\\n                                (b) >=  850 ?  3 : \\\n                                (b) >=  650 ?  4 : \\\n                                (b) >=  550 ?  5 : \\\n                                (b) >=  450 ?  6 : \\\n                                (b) >=  400 ?  7 : \\\n                                (b) >=  350 ?  8 : \\\n                                (b) >=  300 ?  9 : \\\n                                (b) >=  250 ? 12 : \\\n                                (b) >=  200 ? 15 : \\\n                                (b) >=  150 ? 18 : \\\n                                /* b >= 100 */ 27)\n\n# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8)\n\n/* Note that BN_abs_is_word didn't work reliably for w == 0 until 0.9.8 */\n# define BN_abs_is_word(a,w) ((((a)->top == 1) && ((a)->d[0] == (BN_ULONG)(w))) || \\\n                                (((w) == 0) && ((a)->top == 0)))\n# define BN_is_zero(a)       ((a)->top == 0)\n# define BN_is_one(a)        (BN_abs_is_word((a),1) && !(a)->neg)\n# define BN_is_word(a,w)     (BN_abs_is_word((a),(w)) && (!(w) || !(a)->neg))\n# define BN_is_odd(a)        (((a)->top > 0) && ((a)->d[0] & 1))\n\n# define BN_one(a)       (BN_set_word((a),1))\n# define BN_zero_ex(a) \\\n        do { \\\n                BIGNUM *_tmp_bn = (a); \\\n                _tmp_bn->top = 0; \\\n                _tmp_bn->neg = 0; \\\n        } while(0)\n# ifdef OPENSSL_NO_DEPRECATED\n#  define BN_zero(a)      BN_zero_ex(a)\n# else\n#  define BN_zero(a)      (BN_set_word((a),0))\n# endif\n\nconst BIGNUM *BN_value_one(void);\nchar *BN_options(void);\nBN_CTX *BN_CTX_new(void);\n# ifndef OPENSSL_NO_DEPRECATED\nvoid BN_CTX_init(BN_CTX *c);\n# endif\nvoid BN_CTX_free(BN_CTX *c);\nvoid BN_CTX_start(BN_CTX *ctx);\nBIGNUM *BN_CTX_get(BN_CTX *ctx);\nvoid BN_CTX_end(BN_CTX *ctx);\nint BN_rand(BIGNUM *rnd, int bits, int top, int bottom);\nint BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom);\nint BN_rand_range(BIGNUM *rnd, const BIGNUM *range);\nint BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);\nint BN_num_bits(const BIGNUM *a);\nint BN_num_bits_word(BN_ULONG);\nBIGNUM *BN_new(void);\nvoid BN_init(BIGNUM *);\nvoid BN_clear_free(BIGNUM *a);\nBIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b);\nvoid BN_swap(BIGNUM *a, BIGNUM *b);\nBIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);\nint BN_bn2bin(const BIGNUM *a, unsigned char *to);\nBIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret);\nint BN_bn2mpi(const BIGNUM *a, unsigned char *to);\nint BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);\nint BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);\nint BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);\nint BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);\nint BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);\nint BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);\n/** BN_set_negative sets sign of a BIGNUM\n * \\param  b  pointer to the BIGNUM object\n * \\param  n  0 if the BIGNUM b should be positive and a value != 0 otherwise\n */\nvoid BN_set_negative(BIGNUM *b, int n);\n/** BN_is_negative returns 1 if the BIGNUM is negative\n * \\param  a  pointer to the BIGNUM object\n * \\return 1 if a < 0 and 0 otherwise\n */\n# define BN_is_negative(a) ((a)->neg != 0)\n\nint BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,\n           BN_CTX *ctx);\n# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx))\nint BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx);\nint BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,\n               BN_CTX *ctx);\nint BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                     const BIGNUM *m);\nint BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,\n               BN_CTX *ctx);\nint BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                     const BIGNUM *m);\nint BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m,\n               BN_CTX *ctx);\nint BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);\nint BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx);\nint BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m);\nint BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m,\n                  BN_CTX *ctx);\nint BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m);\n\nBN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);\nBN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w);\nint BN_mul_word(BIGNUM *a, BN_ULONG w);\nint BN_add_word(BIGNUM *a, BN_ULONG w);\nint BN_sub_word(BIGNUM *a, BN_ULONG w);\nint BN_set_word(BIGNUM *a, BN_ULONG w);\nBN_ULONG BN_get_word(const BIGNUM *a);\n\nint BN_cmp(const BIGNUM *a, const BIGNUM *b);\nvoid BN_free(BIGNUM *a);\nint BN_is_bit_set(const BIGNUM *a, int n);\nint BN_lshift(BIGNUM *r, const BIGNUM *a, int n);\nint BN_lshift1(BIGNUM *r, const BIGNUM *a);\nint BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\n\nint BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n               const BIGNUM *m, BN_CTX *ctx);\nint BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                    const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);\nint BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,\n                              const BIGNUM *m, BN_CTX *ctx,\n                              BN_MONT_CTX *in_mont);\nint BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p,\n                         const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);\nint BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1,\n                     const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m,\n                     BN_CTX *ctx, BN_MONT_CTX *m_ctx);\nint BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                      const BIGNUM *m, BN_CTX *ctx);\n\nint BN_mask_bits(BIGNUM *a, int n);\n# ifndef OPENSSL_NO_FP_API\nint BN_print_fp(FILE *fp, const BIGNUM *a);\n# endif\n# ifdef HEADER_BIO_H\nint BN_print(BIO *fp, const BIGNUM *a);\n# else\nint BN_print(void *fp, const BIGNUM *a);\n# endif\nint BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx);\nint BN_rshift(BIGNUM *r, const BIGNUM *a, int n);\nint BN_rshift1(BIGNUM *r, const BIGNUM *a);\nvoid BN_clear(BIGNUM *a);\nBIGNUM *BN_dup(const BIGNUM *a);\nint BN_ucmp(const BIGNUM *a, const BIGNUM *b);\nint BN_set_bit(BIGNUM *a, int n);\nint BN_clear_bit(BIGNUM *a, int n);\nchar *BN_bn2hex(const BIGNUM *a);\nchar *BN_bn2dec(const BIGNUM *a);\nint BN_hex2bn(BIGNUM **a, const char *str);\nint BN_dec2bn(BIGNUM **a, const char *str);\nint BN_asc2bn(BIGNUM **a, const char *str);\nint BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);\nint BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns\n                                                                  * -2 for\n                                                                  * error */\nBIGNUM *BN_mod_inverse(BIGNUM *ret,\n                       const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);\nBIGNUM *BN_mod_sqrt(BIGNUM *ret,\n                    const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);\n\nvoid BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords);\n\n/* Deprecated versions */\n# ifndef OPENSSL_NO_DEPRECATED\nBIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe,\n                          const BIGNUM *add, const BIGNUM *rem,\n                          void (*callback) (int, int, void *), void *cb_arg);\nint BN_is_prime(const BIGNUM *p, int nchecks,\n                void (*callback) (int, int, void *),\n                BN_CTX *ctx, void *cb_arg);\nint BN_is_prime_fasttest(const BIGNUM *p, int nchecks,\n                         void (*callback) (int, int, void *), BN_CTX *ctx,\n                         void *cb_arg, int do_trial_division);\n# endif                         /* !defined(OPENSSL_NO_DEPRECATED) */\n\n/* Newer versions */\nint BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add,\n                         const BIGNUM *rem, BN_GENCB *cb);\nint BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb);\nint BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx,\n                            int do_trial_division, BN_GENCB *cb);\n\nint BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);\n\nint BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,\n                            const BIGNUM *Xp, const BIGNUM *Xp1,\n                            const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx,\n                            BN_GENCB *cb);\nint BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1,\n                              BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e,\n                              BN_CTX *ctx, BN_GENCB *cb);\n\nBN_MONT_CTX *BN_MONT_CTX_new(void);\nvoid BN_MONT_CTX_init(BN_MONT_CTX *ctx);\nint BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                          BN_MONT_CTX *mont, BN_CTX *ctx);\n# define BN_to_montgomery(r,a,mont,ctx)  BN_mod_mul_montgomery(\\\n        (r),(a),&((mont)->RR),(mont),(ctx))\nint BN_from_montgomery(BIGNUM *r, const BIGNUM *a,\n                       BN_MONT_CTX *mont, BN_CTX *ctx);\nvoid BN_MONT_CTX_free(BN_MONT_CTX *mont);\nint BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx);\nBN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from);\nBN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,\n                                    const BIGNUM *mod, BN_CTX *ctx);\n\n/* BN_BLINDING flags */\n# define BN_BLINDING_NO_UPDATE   0x00000001\n# define BN_BLINDING_NO_RECREATE 0x00000002\n\nBN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);\nvoid BN_BLINDING_free(BN_BLINDING *b);\nint BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx);\nint BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);\nint BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);\nint BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *);\nint BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b,\n                          BN_CTX *);\n# ifndef OPENSSL_NO_DEPRECATED\nunsigned long BN_BLINDING_get_thread_id(const BN_BLINDING *);\nvoid BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);\n# endif\nCRYPTO_THREADID *BN_BLINDING_thread_id(BN_BLINDING *);\nunsigned long BN_BLINDING_get_flags(const BN_BLINDING *);\nvoid BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);\nBN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,\n                                      const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,\n                                      int (*bn_mod_exp) (BIGNUM *r,\n                                                         const BIGNUM *a,\n                                                         const BIGNUM *p,\n                                                         const BIGNUM *m,\n                                                         BN_CTX *ctx,\n                                                         BN_MONT_CTX *m_ctx),\n                                      BN_MONT_CTX *m_ctx);\n\n# ifndef OPENSSL_NO_DEPRECATED\nvoid BN_set_params(int mul, int high, int low, int mont);\nint BN_get_params(int which);   /* 0, mul, 1 high, 2 low, 3 mont */\n# endif\n\nvoid BN_RECP_CTX_init(BN_RECP_CTX *recp);\nBN_RECP_CTX *BN_RECP_CTX_new(void);\nvoid BN_RECP_CTX_free(BN_RECP_CTX *recp);\nint BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx);\nint BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y,\n                          BN_RECP_CTX *recp, BN_CTX *ctx);\nint BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                    const BIGNUM *m, BN_CTX *ctx);\nint BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,\n                BN_RECP_CTX *recp, BN_CTX *ctx);\n\n# ifndef OPENSSL_NO_EC2M\n\n/*\n * Functions for arithmetic over binary polynomials represented by BIGNUMs.\n * The BIGNUM::neg property of BIGNUMs representing binary polynomials is\n * ignored. Note that input arguments are not const so that their bit arrays\n * can be expanded to the appropriate size if needed.\n */\n\n/*\n * r = a + b\n */\nint BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);\n#  define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b)\n/*\n * r=a mod p\n */\nint BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p);\n/* r = (a * b) mod p */\nint BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                    const BIGNUM *p, BN_CTX *ctx);\n/* r = (a * a) mod p */\nint BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\n/* r = (1 / b) mod p */\nint BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx);\n/* r = (a / b) mod p */\nint BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                    const BIGNUM *p, BN_CTX *ctx);\n/* r = (a ^ b) mod p */\nint BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                    const BIGNUM *p, BN_CTX *ctx);\n/* r = sqrt(a) mod p */\nint BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                     BN_CTX *ctx);\n/* r^2 + r = a mod p */\nint BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                           BN_CTX *ctx);\n#  define BN_GF2m_cmp(a, b) BN_ucmp((a), (b))\n/*-\n * Some functions allow for representation of the irreducible polynomials\n * as an unsigned int[], say p.  The irreducible f(t) is then of the form:\n *     t^p[0] + t^p[1] + ... + t^p[k]\n * where m = p[0] > p[1] > ... > p[k] = 0.\n */\n/* r = a mod p */\nint BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]);\n/* r = (a * b) mod p */\nint BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                        const int p[], BN_CTX *ctx);\n/* r = (a * a) mod p */\nint BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],\n                        BN_CTX *ctx);\n/* r = (1 / b) mod p */\nint BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[],\n                        BN_CTX *ctx);\n/* r = (a / b) mod p */\nint BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                        const int p[], BN_CTX *ctx);\n/* r = (a ^ b) mod p */\nint BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,\n                        const int p[], BN_CTX *ctx);\n/* r = sqrt(a) mod p */\nint BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a,\n                         const int p[], BN_CTX *ctx);\n/* r^2 + r = a mod p */\nint BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a,\n                               const int p[], BN_CTX *ctx);\nint BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max);\nint BN_GF2m_arr2poly(const int p[], BIGNUM *a);\n\n# endif\n\n/*\n * faster mod functions for the 'NIST primes' 0 <= a < p^2\n */\nint BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\nint BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\nint BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\nint BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\nint BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx);\n\nconst BIGNUM *BN_get0_nist_prime_192(void);\nconst BIGNUM *BN_get0_nist_prime_224(void);\nconst BIGNUM *BN_get0_nist_prime_256(void);\nconst BIGNUM *BN_get0_nist_prime_384(void);\nconst BIGNUM *BN_get0_nist_prime_521(void);\n\n/* library internal functions */\n\n# define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\\\n        (a):bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2))\n# define bn_wexpand(a,words) (((words) <= (a)->dmax)?(a):bn_expand2((a),(words)))\nBIGNUM *bn_expand2(BIGNUM *a, int words);\n# ifndef OPENSSL_NO_DEPRECATED\nBIGNUM *bn_dup_expand(const BIGNUM *a, int words); /* unused */\n# endif\n\n/*-\n * Bignum consistency macros\n * There is one \"API\" macro, bn_fix_top(), for stripping leading zeroes from\n * bignum data after direct manipulations on the data. There is also an\n * \"internal\" macro, bn_check_top(), for verifying that there are no leading\n * zeroes. Unfortunately, some auditing is required due to the fact that\n * bn_fix_top() has become an overabused duct-tape because bignum data is\n * occasionally passed around in an inconsistent state. So the following\n * changes have been made to sort this out;\n * - bn_fix_top()s implementation has been moved to bn_correct_top()\n * - if BN_DEBUG isn't defined, bn_fix_top() maps to bn_correct_top(), and\n *   bn_check_top() is as before.\n * - if BN_DEBUG *is* defined;\n *   - bn_check_top() tries to pollute unused words even if the bignum 'top' is\n *     consistent. (ed: only if BN_DEBUG_RAND is defined)\n *   - bn_fix_top() maps to bn_check_top() rather than \"fixing\" anything.\n * The idea is to have debug builds flag up inconsistent bignums when they\n * occur. If that occurs in a bn_fix_top(), we examine the code in question; if\n * the use of bn_fix_top() was appropriate (ie. it follows directly after code\n * that manipulates the bignum) it is converted to bn_correct_top(), and if it\n * was not appropriate, we convert it permanently to bn_check_top() and track\n * down the cause of the bug. Eventually, no internal code should be using the\n * bn_fix_top() macro. External applications and libraries should try this with\n * their own code too, both in terms of building against the openssl headers\n * with BN_DEBUG defined *and* linking with a version of OpenSSL built with it\n * defined. This not only improves external code, it provides more test\n * coverage for openssl's own code.\n */\n\n# ifdef BN_DEBUG\n\n/* We only need assert() when debugging */\n#  include <assert.h>\n\n#  ifdef BN_DEBUG_RAND\n/* To avoid \"make update\" cvs wars due to BN_DEBUG, use some tricks */\n#   ifndef RAND_pseudo_bytes\nint RAND_pseudo_bytes(unsigned char *buf, int num);\n#    define BN_DEBUG_TRIX\n#   endif\n#   define bn_pollute(a) \\\n        do { \\\n                const BIGNUM *_bnum1 = (a); \\\n                if(_bnum1->top < _bnum1->dmax) { \\\n                        unsigned char _tmp_char; \\\n                        /* We cast away const without the compiler knowing, any \\\n                         * *genuinely* constant variables that aren't mutable \\\n                         * wouldn't be constructed with top!=dmax. */ \\\n                        BN_ULONG *_not_const; \\\n                        memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \\\n                        RAND_pseudo_bytes(&_tmp_char, 1); \\\n                        memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \\\n                                (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \\\n                } \\\n        } while(0)\n#   ifdef BN_DEBUG_TRIX\n#    undef RAND_pseudo_bytes\n#   endif\n#  else\n#   define bn_pollute(a)\n#  endif\n#  define bn_check_top(a) \\\n        do { \\\n                const BIGNUM *_bnum2 = (a); \\\n                if (_bnum2 != NULL) { \\\n                        assert((_bnum2->top == 0) || \\\n                                (_bnum2->d[_bnum2->top - 1] != 0)); \\\n                        bn_pollute(_bnum2); \\\n                } \\\n        } while(0)\n\n#  define bn_fix_top(a)           bn_check_top(a)\n\n#  define bn_check_size(bn, bits) bn_wcheck_size(bn, ((bits+BN_BITS2-1))/BN_BITS2)\n#  define bn_wcheck_size(bn, words) \\\n        do { \\\n                const BIGNUM *_bnum2 = (bn); \\\n                assert((words) <= (_bnum2)->dmax && (words) >= (_bnum2)->top); \\\n                /* avoid unused variable warning with NDEBUG */ \\\n                (void)(_bnum2); \\\n        } while(0)\n\n# else                          /* !BN_DEBUG */\n\n#  define bn_pollute(a)\n#  define bn_check_top(a)\n#  define bn_fix_top(a)           bn_correct_top(a)\n#  define bn_check_size(bn, bits)\n#  define bn_wcheck_size(bn, words)\n\n# endif\n\n# define bn_correct_top(a) \\\n        { \\\n        BN_ULONG *ftl; \\\n        int tmp_top = (a)->top; \\\n        if (tmp_top > 0) \\\n                { \\\n                for (ftl= &((a)->d[tmp_top-1]); tmp_top > 0; tmp_top--) \\\n                        if (*(ftl--)) break; \\\n                (a)->top = tmp_top; \\\n                } \\\n        bn_pollute(a); \\\n        }\n\nBN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num,\n                          BN_ULONG w);\nBN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w);\nvoid bn_sqr_words(BN_ULONG *rp, const BN_ULONG *ap, int num);\nBN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d);\nBN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,\n                      int num);\nBN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,\n                      int num);\n\n/* Primes from RFC 2409 */\nBIGNUM *get_rfc2409_prime_768(BIGNUM *bn);\nBIGNUM *get_rfc2409_prime_1024(BIGNUM *bn);\n\n/* Primes from RFC 3526 */\nBIGNUM *get_rfc3526_prime_1536(BIGNUM *bn);\nBIGNUM *get_rfc3526_prime_2048(BIGNUM *bn);\nBIGNUM *get_rfc3526_prime_3072(BIGNUM *bn);\nBIGNUM *get_rfc3526_prime_4096(BIGNUM *bn);\nBIGNUM *get_rfc3526_prime_6144(BIGNUM *bn);\nBIGNUM *get_rfc3526_prime_8192(BIGNUM *bn);\n\nint BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_BN_strings(void);\n\n/* Error codes for the BN functions. */\n\n/* Function codes. */\n# define BN_F_BNRAND                                      127\n# define BN_F_BN_BLINDING_CONVERT_EX                      100\n# define BN_F_BN_BLINDING_CREATE_PARAM                    128\n# define BN_F_BN_BLINDING_INVERT_EX                       101\n# define BN_F_BN_BLINDING_NEW                             102\n# define BN_F_BN_BLINDING_UPDATE                          103\n# define BN_F_BN_BN2DEC                                   104\n# define BN_F_BN_BN2HEX                                   105\n# define BN_F_BN_CTX_GET                                  116\n# define BN_F_BN_CTX_NEW                                  106\n# define BN_F_BN_CTX_START                                129\n# define BN_F_BN_DIV                                      107\n# define BN_F_BN_DIV_NO_BRANCH                            138\n# define BN_F_BN_DIV_RECP                                 130\n# define BN_F_BN_EXP                                      123\n# define BN_F_BN_EXPAND2                                  108\n# define BN_F_BN_EXPAND_INTERNAL                          120\n# define BN_F_BN_GF2M_MOD                                 131\n# define BN_F_BN_GF2M_MOD_EXP                             132\n# define BN_F_BN_GF2M_MOD_MUL                             133\n# define BN_F_BN_GF2M_MOD_SOLVE_QUAD                      134\n# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR                  135\n# define BN_F_BN_GF2M_MOD_SQR                             136\n# define BN_F_BN_GF2M_MOD_SQRT                            137\n# define BN_F_BN_MOD_EXP2_MONT                            118\n# define BN_F_BN_MOD_EXP_MONT                             109\n# define BN_F_BN_MOD_EXP_MONT_CONSTTIME                   124\n# define BN_F_BN_MOD_EXP_MONT_WORD                        117\n# define BN_F_BN_MOD_EXP_RECP                             125\n# define BN_F_BN_MOD_EXP_SIMPLE                           126\n# define BN_F_BN_MOD_INVERSE                              110\n# define BN_F_BN_MOD_INVERSE_NO_BRANCH                    139\n# define BN_F_BN_MOD_LSHIFT_QUICK                         119\n# define BN_F_BN_MOD_MUL_RECIPROCAL                       111\n# define BN_F_BN_MOD_SQRT                                 121\n# define BN_F_BN_MPI2BN                                   112\n# define BN_F_BN_NEW                                      113\n# define BN_F_BN_RAND                                     114\n# define BN_F_BN_RAND_RANGE                               122\n# define BN_F_BN_USUB                                     115\n\n/* Reason codes. */\n# define BN_R_ARG2_LT_ARG3                                100\n# define BN_R_BAD_RECIPROCAL                              101\n# define BN_R_BIGNUM_TOO_LONG                             114\n# define BN_R_CALLED_WITH_EVEN_MODULUS                    102\n# define BN_R_DIV_BY_ZERO                                 103\n# define BN_R_ENCODING_ERROR                              104\n# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA                105\n# define BN_R_INPUT_NOT_REDUCED                           110\n# define BN_R_INVALID_LENGTH                              106\n# define BN_R_INVALID_RANGE                               115\n# define BN_R_NOT_A_SQUARE                                111\n# define BN_R_NOT_INITIALIZED                             107\n# define BN_R_NO_INVERSE                                  108\n# define BN_R_NO_SOLUTION                                 116\n# define BN_R_P_IS_NOT_PRIME                              112\n# define BN_R_TOO_MANY_ITERATIONS                         113\n# define BN_R_TOO_MANY_TEMPORARY_VARIABLES                109\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/buffer.h",
    "content": "/* crypto/buffer/buffer.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_BUFFER_H\n# define HEADER_BUFFER_H\n\n# include <openssl/ossl_typ.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# include <stddef.h>\n\n# if !defined(NO_SYS_TYPES_H)\n#  include <sys/types.h>\n# endif\n\n/* Already declared in ossl_typ.h */\n/* typedef struct buf_mem_st BUF_MEM; */\n\nstruct buf_mem_st {\n    size_t length;              /* current number of bytes */\n    char *data;\n    size_t max;                 /* size of buffer */\n};\n\nBUF_MEM *BUF_MEM_new(void);\nvoid BUF_MEM_free(BUF_MEM *a);\nint BUF_MEM_grow(BUF_MEM *str, size_t len);\nint BUF_MEM_grow_clean(BUF_MEM *str, size_t len);\nsize_t BUF_strnlen(const char *str, size_t maxlen);\nchar *BUF_strdup(const char *str);\nchar *BUF_strndup(const char *str, size_t siz);\nvoid *BUF_memdup(const void *data, size_t siz);\nvoid BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz);\n\n/* safe string functions */\nsize_t BUF_strlcpy(char *dst, const char *src, size_t siz);\nsize_t BUF_strlcat(char *dst, const char *src, size_t siz);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_BUF_strings(void);\n\n/* Error codes for the BUF functions. */\n\n/* Function codes. */\n# define BUF_F_BUF_MEMDUP                                 103\n# define BUF_F_BUF_MEM_GROW                               100\n# define BUF_F_BUF_MEM_GROW_CLEAN                         105\n# define BUF_F_BUF_MEM_NEW                                101\n# define BUF_F_BUF_STRDUP                                 102\n# define BUF_F_BUF_STRNDUP                                104\n\n/* Reason codes. */\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/camellia.h",
    "content": "/* crypto/camellia/camellia.h -*- mode:C; c-file-style: \"eay\" -*- */\n/* ====================================================================\n * Copyright (c) 2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n */\n\n#ifndef HEADER_CAMELLIA_H\n# define HEADER_CAMELLIA_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_CAMELLIA\n#  error CAMELLIA is disabled.\n# endif\n\n# include <stddef.h>\n\n# define CAMELLIA_ENCRYPT        1\n# define CAMELLIA_DECRYPT        0\n\n/*\n * Because array size can't be a const in C, the following two are macros.\n * Both sizes are in bytes.\n */\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* This should be a hidden type, but EVP requires that the size be known */\n\n# define CAMELLIA_BLOCK_SIZE 16\n# define CAMELLIA_TABLE_BYTE_LEN 272\n# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4)\n\ntypedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match\n                                                               * with WORD */\n\nstruct camellia_key_st {\n    union {\n        double d;               /* ensures 64-bit align */\n        KEY_TABLE_TYPE rd_key;\n    } u;\n    int grand_rounds;\n};\ntypedef struct camellia_key_st CAMELLIA_KEY;\n\n# ifdef OPENSSL_FIPS\nint private_Camellia_set_key(const unsigned char *userKey, const int bits,\n                             CAMELLIA_KEY *key);\n# endif\nint Camellia_set_key(const unsigned char *userKey, const int bits,\n                     CAMELLIA_KEY *key);\n\nvoid Camellia_encrypt(const unsigned char *in, unsigned char *out,\n                      const CAMELLIA_KEY *key);\nvoid Camellia_decrypt(const unsigned char *in, unsigned char *out,\n                      const CAMELLIA_KEY *key);\n\nvoid Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                          const CAMELLIA_KEY *key, const int enc);\nvoid Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,\n                          size_t length, const CAMELLIA_KEY *key,\n                          unsigned char *ivec, const int enc);\nvoid Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t length, const CAMELLIA_KEY *key,\n                             unsigned char *ivec, int *num, const int enc);\nvoid Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t length, const CAMELLIA_KEY *key,\n                           unsigned char *ivec, int *num, const int enc);\nvoid Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t length, const CAMELLIA_KEY *key,\n                           unsigned char *ivec, int *num, const int enc);\nvoid Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t length, const CAMELLIA_KEY *key,\n                             unsigned char *ivec, int *num);\nvoid Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t length, const CAMELLIA_KEY *key,\n                             unsigned char ivec[CAMELLIA_BLOCK_SIZE],\n                             unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE],\n                             unsigned int *num);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif                          /* !HEADER_Camellia_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/cast.h",
    "content": "/* crypto/cast/cast.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_CAST_H\n# define HEADER_CAST_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_CAST\n#  error CAST is disabled.\n# endif\n\n# define CAST_ENCRYPT    1\n# define CAST_DECRYPT    0\n\n# define CAST_LONG unsigned int\n\n# define CAST_BLOCK      8\n# define CAST_KEY_LENGTH 16\n\ntypedef struct cast_key_st {\n    CAST_LONG data[32];\n    int short_key;              /* Use reduced rounds for short key */\n} CAST_KEY;\n\n# ifdef OPENSSL_FIPS\nvoid private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);\n# endif\nvoid CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);\nvoid CAST_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                      const CAST_KEY *key, int enc);\nvoid CAST_encrypt(CAST_LONG *data, const CAST_KEY *key);\nvoid CAST_decrypt(CAST_LONG *data, const CAST_KEY *key);\nvoid CAST_cbc_encrypt(const unsigned char *in, unsigned char *out,\n                      long length, const CAST_KEY *ks, unsigned char *iv,\n                      int enc);\nvoid CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                        long length, const CAST_KEY *schedule,\n                        unsigned char *ivec, int *num, int enc);\nvoid CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                        long length, const CAST_KEY *schedule,\n                        unsigned char *ivec, int *num);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/cmac.h",
    "content": "/* crypto/cmac/cmac.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL\n * project.\n */\n/* ====================================================================\n * Copyright (c) 2010 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n */\n\n#ifndef HEADER_CMAC_H\n# define HEADER_CMAC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# include <openssl/evp.h>\n\n/* Opaque */\ntypedef struct CMAC_CTX_st CMAC_CTX;\n\nCMAC_CTX *CMAC_CTX_new(void);\nvoid CMAC_CTX_cleanup(CMAC_CTX *ctx);\nvoid CMAC_CTX_free(CMAC_CTX *ctx);\nEVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx);\nint CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in);\n\nint CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,\n              const EVP_CIPHER *cipher, ENGINE *impl);\nint CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen);\nint CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen);\nint CMAC_resume(CMAC_CTX *ctx);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/cms.h",
    "content": "/* crypto/cms/cms.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL\n * project.\n */\n/* ====================================================================\n * Copyright (c) 2008 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n */\n\n#ifndef HEADER_CMS_H\n# define HEADER_CMS_H\n\n# include <openssl/x509.h>\n\n# ifdef OPENSSL_NO_CMS\n#  error CMS is disabled.\n# endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct CMS_ContentInfo_st CMS_ContentInfo;\ntypedef struct CMS_SignerInfo_st CMS_SignerInfo;\ntypedef struct CMS_CertificateChoices CMS_CertificateChoices;\ntypedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;\ntypedef struct CMS_RecipientInfo_st CMS_RecipientInfo;\ntypedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;\ntypedef struct CMS_Receipt_st CMS_Receipt;\ntypedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey;\ntypedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute;\n\nDECLARE_STACK_OF(CMS_SignerInfo)\nDECLARE_STACK_OF(GENERAL_NAMES)\nDECLARE_STACK_OF(CMS_RecipientEncryptedKey)\nDECLARE_ASN1_FUNCTIONS(CMS_ContentInfo)\nDECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest)\nDECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)\n\n# define CMS_SIGNERINFO_ISSUER_SERIAL    0\n# define CMS_SIGNERINFO_KEYIDENTIFIER    1\n\n# define CMS_RECIPINFO_NONE              -1\n# define CMS_RECIPINFO_TRANS             0\n# define CMS_RECIPINFO_AGREE             1\n# define CMS_RECIPINFO_KEK               2\n# define CMS_RECIPINFO_PASS              3\n# define CMS_RECIPINFO_OTHER             4\n\n/* S/MIME related flags */\n\n# define CMS_TEXT                        0x1\n# define CMS_NOCERTS                     0x2\n# define CMS_NO_CONTENT_VERIFY           0x4\n# define CMS_NO_ATTR_VERIFY              0x8\n# define CMS_NOSIGS                      \\\n                        (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY)\n# define CMS_NOINTERN                    0x10\n# define CMS_NO_SIGNER_CERT_VERIFY       0x20\n# define CMS_NOVERIFY                    0x20\n# define CMS_DETACHED                    0x40\n# define CMS_BINARY                      0x80\n# define CMS_NOATTR                      0x100\n# define CMS_NOSMIMECAP                  0x200\n# define CMS_NOOLDMIMETYPE               0x400\n# define CMS_CRLFEOL                     0x800\n# define CMS_STREAM                      0x1000\n# define CMS_NOCRL                       0x2000\n# define CMS_PARTIAL                     0x4000\n# define CMS_REUSE_DIGEST                0x8000\n# define CMS_USE_KEYID                   0x10000\n# define CMS_DEBUG_DECRYPT               0x20000\n# define CMS_KEY_PARAM                   0x40000\n\nconst ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms);\n\nBIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont);\nint CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio);\n\nASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms);\nint CMS_is_detached(CMS_ContentInfo *cms);\nint CMS_set_detached(CMS_ContentInfo *cms, int detached);\n\n# ifdef HEADER_PEM_H\nDECLARE_PEM_rw_const(CMS, CMS_ContentInfo)\n# endif\nint CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms);\nCMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms);\nint i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms);\n\nBIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms);\nint i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags);\nint PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in,\n                             int flags);\nCMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont);\nint SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags);\n\nint CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont,\n              unsigned int flags);\n\nCMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey,\n                          STACK_OF(X509) *certs, BIO *data,\n                          unsigned int flags);\n\nCMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si,\n                                  X509 *signcert, EVP_PKEY *pkey,\n                                  STACK_OF(X509) *certs, unsigned int flags);\n\nint CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags);\nCMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags);\n\nint CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out,\n                      unsigned int flags);\nCMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md,\n                                   unsigned int flags);\n\nint CMS_EncryptedData_decrypt(CMS_ContentInfo *cms,\n                              const unsigned char *key, size_t keylen,\n                              BIO *dcont, BIO *out, unsigned int flags);\n\nCMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher,\n                                           const unsigned char *key,\n                                           size_t keylen, unsigned int flags);\n\nint CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph,\n                               const unsigned char *key, size_t keylen);\n\nint CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs,\n               X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags);\n\nint CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms,\n                       STACK_OF(X509) *certs,\n                       X509_STORE *store, unsigned int flags);\n\nSTACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);\n\nCMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in,\n                             const EVP_CIPHER *cipher, unsigned int flags);\n\nint CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert,\n                BIO *dcont, BIO *out, unsigned int flags);\n\nint CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert);\nint CMS_decrypt_set1_key(CMS_ContentInfo *cms,\n                         unsigned char *key, size_t keylen,\n                         unsigned char *id, size_t idlen);\nint CMS_decrypt_set1_password(CMS_ContentInfo *cms,\n                              unsigned char *pass, ossl_ssize_t passlen);\n\nSTACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);\nint CMS_RecipientInfo_type(CMS_RecipientInfo *ri);\nEVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri);\nCMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher);\nCMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,\n                                           X509 *recip, unsigned int flags);\nint CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey);\nint CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert);\nint CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri,\n                                     EVP_PKEY **pk, X509 **recip,\n                                     X509_ALGOR **palg);\nint CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri,\n                                          ASN1_OCTET_STRING **keyid,\n                                          X509_NAME **issuer,\n                                          ASN1_INTEGER **sno);\n\nCMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,\n                                          unsigned char *key, size_t keylen,\n                                          unsigned char *id, size_t idlen,\n                                          ASN1_GENERALIZEDTIME *date,\n                                          ASN1_OBJECT *otherTypeId,\n                                          ASN1_TYPE *otherType);\n\nint CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri,\n                                    X509_ALGOR **palg,\n                                    ASN1_OCTET_STRING **pid,\n                                    ASN1_GENERALIZEDTIME **pdate,\n                                    ASN1_OBJECT **potherid,\n                                    ASN1_TYPE **pothertype);\n\nint CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri,\n                               unsigned char *key, size_t keylen);\n\nint CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri,\n                                   const unsigned char *id, size_t idlen);\n\nint CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri,\n                                    unsigned char *pass,\n                                    ossl_ssize_t passlen);\n\nCMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms,\n                                               int iter, int wrap_nid,\n                                               int pbe_nid,\n                                               unsigned char *pass,\n                                               ossl_ssize_t passlen,\n                                               const EVP_CIPHER *kekciph);\n\nint CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);\nint CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);\n\nint CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out,\n                   unsigned int flags);\nCMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags);\n\nint CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid);\nconst ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms);\n\nCMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms);\nint CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert);\nint CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert);\nSTACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms);\n\nCMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms);\nint CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl);\nint CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl);\nSTACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms);\n\nint CMS_SignedData_init(CMS_ContentInfo *cms);\nCMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,\n                                X509 *signer, EVP_PKEY *pk, const EVP_MD *md,\n                                unsigned int flags);\nEVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si);\nEVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si);\nSTACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);\n\nvoid CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);\nint CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si,\n                                  ASN1_OCTET_STRING **keyid,\n                                  X509_NAME **issuer, ASN1_INTEGER **sno);\nint CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert);\nint CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs,\n                           unsigned int flags);\nvoid CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk,\n                              X509 **signer, X509_ALGOR **pdig,\n                              X509_ALGOR **psig);\nASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si);\nint CMS_SignerInfo_sign(CMS_SignerInfo *si);\nint CMS_SignerInfo_verify(CMS_SignerInfo *si);\nint CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain);\n\nint CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs);\nint CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs,\n                            int algnid, int keysize);\nint CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap);\n\nint CMS_signed_get_attr_count(const CMS_SignerInfo *si);\nint CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid,\n                               int lastpos);\nint CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,\n                               int lastpos);\nX509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc);\nX509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc);\nint CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);\nint CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si,\n                                const ASN1_OBJECT *obj, int type,\n                                const void *bytes, int len);\nint CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si,\n                                int nid, int type,\n                                const void *bytes, int len);\nint CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si,\n                                const char *attrname, int type,\n                                const void *bytes, int len);\nvoid *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,\n                                  int lastpos, int type);\n\nint CMS_unsigned_get_attr_count(const CMS_SignerInfo *si);\nint CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid,\n                                 int lastpos);\nint CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, ASN1_OBJECT *obj,\n                                 int lastpos);\nX509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc);\nX509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc);\nint CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr);\nint CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si,\n                                  const ASN1_OBJECT *obj, int type,\n                                  const void *bytes, int len);\nint CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si,\n                                  int nid, int type,\n                                  const void *bytes, int len);\nint CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si,\n                                  const char *attrname, int type,\n                                  const void *bytes, int len);\nvoid *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,\n                                    int lastpos, int type);\n\n# ifdef HEADER_X509V3_H\n\nint CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr);\nCMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen,\n                                               int allorfirst,\n                                               STACK_OF(GENERAL_NAMES)\n                                               *receiptList, STACK_OF(GENERAL_NAMES)\n                                               *receiptsTo);\nint CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr);\nvoid CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr,\n                                    ASN1_STRING **pcid,\n                                    int *pallorfirst,\n                                    STACK_OF(GENERAL_NAMES) **plist,\n                                    STACK_OF(GENERAL_NAMES) **prto);\n# endif\nint CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri,\n                                    X509_ALGOR **palg,\n                                    ASN1_OCTET_STRING **pukm);\nSTACK_OF(CMS_RecipientEncryptedKey)\n*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri);\n\nint CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri,\n                                        X509_ALGOR **pubalg,\n                                        ASN1_BIT_STRING **pubkey,\n                                        ASN1_OCTET_STRING **keyid,\n                                        X509_NAME **issuer,\n                                        ASN1_INTEGER **sno);\n\nint CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert);\n\nint CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek,\n                                      ASN1_OCTET_STRING **keyid,\n                                      ASN1_GENERALIZEDTIME **tm,\n                                      CMS_OtherKeyAttribute **other,\n                                      X509_NAME **issuer, ASN1_INTEGER **sno);\nint CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek,\n                                       X509 *cert);\nint CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk);\nEVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri);\nint CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms,\n                                   CMS_RecipientInfo *ri,\n                                   CMS_RecipientEncryptedKey *rek);\n\nint CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg,\n                          ASN1_OCTET_STRING *ukm, int keylen);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_CMS_strings(void);\n\n/* Error codes for the CMS functions. */\n\n/* Function codes. */\n# define CMS_F_CHECK_CONTENT                              99\n# define CMS_F_CMS_ADD0_CERT                              164\n# define CMS_F_CMS_ADD0_RECIPIENT_KEY                     100\n# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD                165\n# define CMS_F_CMS_ADD1_RECEIPTREQUEST                    158\n# define CMS_F_CMS_ADD1_RECIPIENT_CERT                    101\n# define CMS_F_CMS_ADD1_SIGNER                            102\n# define CMS_F_CMS_ADD1_SIGNINGTIME                       103\n# define CMS_F_CMS_COMPRESS                               104\n# define CMS_F_CMS_COMPRESSEDDATA_CREATE                  105\n# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO                106\n# define CMS_F_CMS_COPY_CONTENT                           107\n# define CMS_F_CMS_COPY_MESSAGEDIGEST                     108\n# define CMS_F_CMS_DATA                                   109\n# define CMS_F_CMS_DATAFINAL                              110\n# define CMS_F_CMS_DATAINIT                               111\n# define CMS_F_CMS_DECRYPT                                112\n# define CMS_F_CMS_DECRYPT_SET1_KEY                       113\n# define CMS_F_CMS_DECRYPT_SET1_PASSWORD                  166\n# define CMS_F_CMS_DECRYPT_SET1_PKEY                      114\n# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX               115\n# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO               116\n# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL                  117\n# define CMS_F_CMS_DIGEST_VERIFY                          118\n# define CMS_F_CMS_ENCODE_RECEIPT                         161\n# define CMS_F_CMS_ENCRYPT                                119\n# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO              120\n# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT                  121\n# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT                  122\n# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY                 123\n# define CMS_F_CMS_ENVELOPEDDATA_CREATE                   124\n# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO                 125\n# define CMS_F_CMS_ENVELOPED_DATA_INIT                    126\n# define CMS_F_CMS_ENV_ASN1_CTRL                          171\n# define CMS_F_CMS_FINAL                                  127\n# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES               128\n# define CMS_F_CMS_GET0_CONTENT                           129\n# define CMS_F_CMS_GET0_ECONTENT_TYPE                     130\n# define CMS_F_CMS_GET0_ENVELOPED                         131\n# define CMS_F_CMS_GET0_REVOCATION_CHOICES                132\n# define CMS_F_CMS_GET0_SIGNED                            133\n# define CMS_F_CMS_MSGSIGDIGEST_ADD1                      162\n# define CMS_F_CMS_RECEIPTREQUEST_CREATE0                 159\n# define CMS_F_CMS_RECEIPT_VERIFY                         160\n# define CMS_F_CMS_RECIPIENTINFO_DECRYPT                  134\n# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT                  169\n# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT             178\n# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG            175\n# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID        173\n# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS           172\n# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP         174\n# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT            135\n# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT            136\n# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID            137\n# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP             138\n# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP            139\n# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT             140\n# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT             141\n# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS           142\n# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID      143\n# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT               167\n# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY                 144\n# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD            168\n# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY                145\n# define CMS_F_CMS_SD_ASN1_CTRL                           170\n# define CMS_F_CMS_SET1_IAS                               176\n# define CMS_F_CMS_SET1_KEYID                             177\n# define CMS_F_CMS_SET1_SIGNERIDENTIFIER                  146\n# define CMS_F_CMS_SET_DETACHED                           147\n# define CMS_F_CMS_SIGN                                   148\n# define CMS_F_CMS_SIGNED_DATA_INIT                       149\n# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN                150\n# define CMS_F_CMS_SIGNERINFO_SIGN                        151\n# define CMS_F_CMS_SIGNERINFO_VERIFY                      152\n# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT                 153\n# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT              154\n# define CMS_F_CMS_SIGN_RECEIPT                           163\n# define CMS_F_CMS_STREAM                                 155\n# define CMS_F_CMS_UNCOMPRESS                             156\n# define CMS_F_CMS_VERIFY                                 157\n\n/* Reason codes. */\n# define CMS_R_ADD_SIGNER_ERROR                           99\n# define CMS_R_CERTIFICATE_ALREADY_PRESENT                175\n# define CMS_R_CERTIFICATE_HAS_NO_KEYID                   160\n# define CMS_R_CERTIFICATE_VERIFY_ERROR                   100\n# define CMS_R_CIPHER_INITIALISATION_ERROR                101\n# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR      102\n# define CMS_R_CMS_DATAFINAL_ERROR                        103\n# define CMS_R_CMS_LIB                                    104\n# define CMS_R_CONTENTIDENTIFIER_MISMATCH                 170\n# define CMS_R_CONTENT_NOT_FOUND                          105\n# define CMS_R_CONTENT_TYPE_MISMATCH                      171\n# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA           106\n# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA            107\n# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA               108\n# define CMS_R_CONTENT_VERIFY_ERROR                       109\n# define CMS_R_CTRL_ERROR                                 110\n# define CMS_R_CTRL_FAILURE                               111\n# define CMS_R_DECRYPT_ERROR                              112\n# define CMS_R_DIGEST_ERROR                               161\n# define CMS_R_ERROR_GETTING_PUBLIC_KEY                   113\n# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE      114\n# define CMS_R_ERROR_SETTING_KEY                          115\n# define CMS_R_ERROR_SETTING_RECIPIENTINFO                116\n# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH               117\n# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER           176\n# define CMS_R_INVALID_KEY_LENGTH                         118\n# define CMS_R_MD_BIO_INIT_ERROR                          119\n# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH       120\n# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH                 121\n# define CMS_R_MSGSIGDIGEST_ERROR                         172\n# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE          162\n# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH                  163\n# define CMS_R_NEED_ONE_SIGNER                            164\n# define CMS_R_NOT_A_SIGNED_RECEIPT                       165\n# define CMS_R_NOT_ENCRYPTED_DATA                         122\n# define CMS_R_NOT_KEK                                    123\n# define CMS_R_NOT_KEY_AGREEMENT                          181\n# define CMS_R_NOT_KEY_TRANSPORT                          124\n# define CMS_R_NOT_PWRI                                   177\n# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE            125\n# define CMS_R_NO_CIPHER                                  126\n# define CMS_R_NO_CONTENT                                 127\n# define CMS_R_NO_CONTENT_TYPE                            173\n# define CMS_R_NO_DEFAULT_DIGEST                          128\n# define CMS_R_NO_DIGEST_SET                              129\n# define CMS_R_NO_KEY                                     130\n# define CMS_R_NO_KEY_OR_CERT                             174\n# define CMS_R_NO_MATCHING_DIGEST                         131\n# define CMS_R_NO_MATCHING_RECIPIENT                      132\n# define CMS_R_NO_MATCHING_SIGNATURE                      166\n# define CMS_R_NO_MSGSIGDIGEST                            167\n# define CMS_R_NO_PASSWORD                                178\n# define CMS_R_NO_PRIVATE_KEY                             133\n# define CMS_R_NO_PUBLIC_KEY                              134\n# define CMS_R_NO_RECEIPT_REQUEST                         168\n# define CMS_R_NO_SIGNERS                                 135\n# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE     136\n# define CMS_R_RECEIPT_DECODE_ERROR                       169\n# define CMS_R_RECIPIENT_ERROR                            137\n# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND               138\n# define CMS_R_SIGNFINAL_ERROR                            139\n# define CMS_R_SMIME_TEXT_ERROR                           140\n# define CMS_R_STORE_INIT_ERROR                           141\n# define CMS_R_TYPE_NOT_COMPRESSED_DATA                   142\n# define CMS_R_TYPE_NOT_DATA                              143\n# define CMS_R_TYPE_NOT_DIGESTED_DATA                     144\n# define CMS_R_TYPE_NOT_ENCRYPTED_DATA                    145\n# define CMS_R_TYPE_NOT_ENVELOPED_DATA                    146\n# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT                 147\n# define CMS_R_UNKNOWN_CIPHER                             148\n# define CMS_R_UNKNOWN_DIGEST_ALGORIHM                    149\n# define CMS_R_UNKNOWN_ID                                 150\n# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM          151\n# define CMS_R_UNSUPPORTED_CONTENT_TYPE                   152\n# define CMS_R_UNSUPPORTED_KEK_ALGORITHM                  153\n# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM       179\n# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE                 154\n# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE              155\n# define CMS_R_UNSUPPORTED_TYPE                           156\n# define CMS_R_UNWRAP_ERROR                               157\n# define CMS_R_UNWRAP_FAILURE                             180\n# define CMS_R_VERIFICATION_FAILURE                       158\n# define CMS_R_WRAP_ERROR                                 159\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/comp.h",
    "content": "\n#ifndef HEADER_COMP_H\n# define HEADER_COMP_H\n\n# include <openssl/crypto.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct comp_ctx_st COMP_CTX;\n\ntypedef struct comp_method_st {\n    int type;                   /* NID for compression library */\n    const char *name;           /* A text string to identify the library */\n    int (*init) (COMP_CTX *ctx);\n    void (*finish) (COMP_CTX *ctx);\n    int (*compress) (COMP_CTX *ctx,\n                     unsigned char *out, unsigned int olen,\n                     unsigned char *in, unsigned int ilen);\n    int (*expand) (COMP_CTX *ctx,\n                   unsigned char *out, unsigned int olen,\n                   unsigned char *in, unsigned int ilen);\n    /*\n     * The following two do NOTHING, but are kept for backward compatibility\n     */\n    long (*ctrl) (void);\n    long (*callback_ctrl) (void);\n} COMP_METHOD;\n\nstruct comp_ctx_st {\n    COMP_METHOD *meth;\n    unsigned long compress_in;\n    unsigned long compress_out;\n    unsigned long expand_in;\n    unsigned long expand_out;\n    CRYPTO_EX_DATA ex_data;\n};\n\nCOMP_CTX *COMP_CTX_new(COMP_METHOD *meth);\nvoid COMP_CTX_free(COMP_CTX *ctx);\nint COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,\n                        unsigned char *in, int ilen);\nint COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,\n                      unsigned char *in, int ilen);\nCOMP_METHOD *COMP_rle(void);\nCOMP_METHOD *COMP_zlib(void);\nvoid COMP_zlib_cleanup(void);\n\n# ifdef HEADER_BIO_H\n#  ifdef ZLIB\nBIO_METHOD *BIO_f_zlib(void);\n#  endif\n# endif\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_COMP_strings(void);\n\n/* Error codes for the COMP functions. */\n\n/* Function codes. */\n# define COMP_F_BIO_ZLIB_FLUSH                            99\n# define COMP_F_BIO_ZLIB_NEW                              100\n# define COMP_F_BIO_ZLIB_READ                             101\n# define COMP_F_BIO_ZLIB_WRITE                            102\n\n/* Reason codes. */\n# define COMP_R_ZLIB_DEFLATE_ERROR                        99\n# define COMP_R_ZLIB_INFLATE_ERROR                        100\n# define COMP_R_ZLIB_NOT_SUPPORTED                        101\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/conf.h",
    "content": "/* crypto/conf/conf.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef  HEADER_CONF_H\n# define HEADER_CONF_H\n\n# include <openssl/bio.h>\n# include <openssl/lhash.h>\n# include <openssl/stack.h>\n# include <openssl/safestack.h>\n# include <openssl/e_os2.h>\n\n# include <openssl/ossl_typ.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct {\n    char *section;\n    char *name;\n    char *value;\n} CONF_VALUE;\n\nDECLARE_STACK_OF(CONF_VALUE)\nDECLARE_LHASH_OF(CONF_VALUE);\n\nstruct conf_st;\nstruct conf_method_st;\ntypedef struct conf_method_st CONF_METHOD;\n\nstruct conf_method_st {\n    const char *name;\n    CONF *(*create) (CONF_METHOD *meth);\n    int (*init) (CONF *conf);\n    int (*destroy) (CONF *conf);\n    int (*destroy_data) (CONF *conf);\n    int (*load_bio) (CONF *conf, BIO *bp, long *eline);\n    int (*dump) (const CONF *conf, BIO *bp);\n    int (*is_number) (const CONF *conf, char c);\n    int (*to_int) (const CONF *conf, char c);\n    int (*load) (CONF *conf, const char *name, long *eline);\n};\n\n/* Module definitions */\n\ntypedef struct conf_imodule_st CONF_IMODULE;\ntypedef struct conf_module_st CONF_MODULE;\n\nDECLARE_STACK_OF(CONF_MODULE)\nDECLARE_STACK_OF(CONF_IMODULE)\n\n/* DSO module function typedefs */\ntypedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf);\ntypedef void conf_finish_func (CONF_IMODULE *md);\n\n# define CONF_MFLAGS_IGNORE_ERRORS       0x1\n# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2\n# define CONF_MFLAGS_SILENT              0x4\n# define CONF_MFLAGS_NO_DSO              0x8\n# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10\n# define CONF_MFLAGS_DEFAULT_SECTION     0x20\n\nint CONF_set_default_method(CONF_METHOD *meth);\nvoid CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash);\nLHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file,\n                                long *eline);\n# ifndef OPENSSL_NO_FP_API\nLHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp,\n                                   long *eline);\n# endif\nLHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp,\n                                    long *eline);\nSTACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf,\n                                       const char *section);\nchar *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group,\n                      const char *name);\nlong CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group,\n                     const char *name);\nvoid CONF_free(LHASH_OF(CONF_VALUE) *conf);\nint CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out);\nint CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out);\n\nvoid OPENSSL_config(const char *config_name);\nvoid OPENSSL_no_config(void);\n\n/*\n * New conf code.  The semantics are different from the functions above. If\n * that wasn't the case, the above functions would have been replaced\n */\n\nstruct conf_st {\n    CONF_METHOD *meth;\n    void *meth_data;\n    LHASH_OF(CONF_VALUE) *data;\n};\n\nCONF *NCONF_new(CONF_METHOD *meth);\nCONF_METHOD *NCONF_default(void);\nCONF_METHOD *NCONF_WIN32(void);\n# if 0                          /* Just to give you an idea of what I have in\n                                 * mind */\nCONF_METHOD *NCONF_XML(void);\n# endif\nvoid NCONF_free(CONF *conf);\nvoid NCONF_free_data(CONF *conf);\n\nint NCONF_load(CONF *conf, const char *file, long *eline);\n# ifndef OPENSSL_NO_FP_API\nint NCONF_load_fp(CONF *conf, FILE *fp, long *eline);\n# endif\nint NCONF_load_bio(CONF *conf, BIO *bp, long *eline);\nSTACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,\n                                        const char *section);\nchar *NCONF_get_string(const CONF *conf, const char *group, const char *name);\nint NCONF_get_number_e(const CONF *conf, const char *group, const char *name,\n                       long *result);\nint NCONF_dump_fp(const CONF *conf, FILE *out);\nint NCONF_dump_bio(const CONF *conf, BIO *out);\n\n# if 0                          /* The following function has no error\n                                 * checking, and should therefore be avoided */\nlong NCONF_get_number(CONF *conf, char *group, char *name);\n# else\n#  define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r)\n# endif\n\n/* Module functions */\n\nint CONF_modules_load(const CONF *cnf, const char *appname,\n                      unsigned long flags);\nint CONF_modules_load_file(const char *filename, const char *appname,\n                           unsigned long flags);\nvoid CONF_modules_unload(int all);\nvoid CONF_modules_finish(void);\nvoid CONF_modules_free(void);\nint CONF_module_add(const char *name, conf_init_func *ifunc,\n                    conf_finish_func *ffunc);\n\nconst char *CONF_imodule_get_name(const CONF_IMODULE *md);\nconst char *CONF_imodule_get_value(const CONF_IMODULE *md);\nvoid *CONF_imodule_get_usr_data(const CONF_IMODULE *md);\nvoid CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data);\nCONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md);\nunsigned long CONF_imodule_get_flags(const CONF_IMODULE *md);\nvoid CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags);\nvoid *CONF_module_get_usr_data(CONF_MODULE *pmod);\nvoid CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data);\n\nchar *CONF_get1_default_config_file(void);\n\nint CONF_parse_list(const char *list, int sep, int nospc,\n                    int (*list_cb) (const char *elem, int len, void *usr),\n                    void *arg);\n\nvoid OPENSSL_load_builtin_modules(void);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_CONF_strings(void);\n\n/* Error codes for the CONF functions. */\n\n/* Function codes. */\n# define CONF_F_CONF_DUMP_FP                              104\n# define CONF_F_CONF_LOAD                                 100\n# define CONF_F_CONF_LOAD_BIO                             102\n# define CONF_F_CONF_LOAD_FP                              103\n# define CONF_F_CONF_MODULES_LOAD                         116\n# define CONF_F_CONF_PARSE_LIST                           119\n# define CONF_F_DEF_LOAD                                  120\n# define CONF_F_DEF_LOAD_BIO                              121\n# define CONF_F_MODULE_INIT                               115\n# define CONF_F_MODULE_LOAD_DSO                           117\n# define CONF_F_MODULE_RUN                                118\n# define CONF_F_NCONF_DUMP_BIO                            105\n# define CONF_F_NCONF_DUMP_FP                             106\n# define CONF_F_NCONF_GET_NUMBER                          107\n# define CONF_F_NCONF_GET_NUMBER_E                        112\n# define CONF_F_NCONF_GET_SECTION                         108\n# define CONF_F_NCONF_GET_STRING                          109\n# define CONF_F_NCONF_LOAD                                113\n# define CONF_F_NCONF_LOAD_BIO                            110\n# define CONF_F_NCONF_LOAD_FP                             114\n# define CONF_F_NCONF_NEW                                 111\n# define CONF_F_STR_COPY                                  101\n\n/* Reason codes. */\n# define CONF_R_ERROR_LOADING_DSO                         110\n# define CONF_R_LIST_CANNOT_BE_NULL                       115\n# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET              100\n# define CONF_R_MISSING_EQUAL_SIGN                        101\n# define CONF_R_MISSING_FINISH_FUNCTION                   111\n# define CONF_R_MISSING_INIT_FUNCTION                     112\n# define CONF_R_MODULE_INITIALIZATION_ERROR               109\n# define CONF_R_NO_CLOSE_BRACE                            102\n# define CONF_R_NO_CONF                                   105\n# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE           106\n# define CONF_R_NO_SECTION                                107\n# define CONF_R_NO_SUCH_FILE                              114\n# define CONF_R_NO_VALUE                                  108\n# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION              103\n# define CONF_R_UNKNOWN_MODULE_NAME                       113\n# define CONF_R_VARIABLE_HAS_NO_VALUE                     104\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/conf_api.h",
    "content": "/* conf_api.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef  HEADER_CONF_API_H\n# define HEADER_CONF_API_H\n\n# include <openssl/lhash.h>\n# include <openssl/conf.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Up until OpenSSL 0.9.5a, this was new_section */\nCONF_VALUE *_CONF_new_section(CONF *conf, const char *section);\n/* Up until OpenSSL 0.9.5a, this was get_section */\nCONF_VALUE *_CONF_get_section(const CONF *conf, const char *section);\n/* Up until OpenSSL 0.9.5a, this was CONF_get_section */\nSTACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf,\n                                               const char *section);\n\nint _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value);\nchar *_CONF_get_string(const CONF *conf, const char *section,\n                       const char *name);\nlong _CONF_get_number(const CONF *conf, const char *section,\n                      const char *name);\n\nint _CONF_new_data(CONF *conf);\nvoid _CONF_free_data(CONF *conf);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/crypto.h",
    "content": "/* crypto/crypto.h */\n/* ====================================================================\n * Copyright (c) 1998-2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n * ECDH support in OpenSSL originally developed by\n * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n */\n\n#ifndef HEADER_CRYPTO_H\n# define HEADER_CRYPTO_H\n\n# include <stdlib.h>\n\n# include \"openssl/e_os2.h\"\n\n# ifndef OPENSSL_NO_FP_API\n#  include <stdio.h>\n# endif\n\n# include \"openssl/stack.h\"\n# include \"openssl/safestack.h\"\n# include \"openssl/opensslv.h\"\n# include \"openssl/ossl_typ.h\"\n\n# ifdef CHARSET_EBCDIC\n#  include <openssl/ebcdic.h>\n# endif\n\n/*\n * Resolve problems on some operating systems with symbol names that clash\n * one way or another\n */\n# include \"openssl/symhacks.h\"\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Backward compatibility to SSLeay */\n/*\n * This is more to be used to check the correct DLL is being used in the MS\n * world.\n */\n# define SSLEAY_VERSION_NUMBER   OPENSSL_VERSION_NUMBER\n# define SSLEAY_VERSION          0\n/* #define SSLEAY_OPTIONS       1 no longer supported */\n# define SSLEAY_CFLAGS           2\n# define SSLEAY_BUILT_ON         3\n# define SSLEAY_PLATFORM         4\n# define SSLEAY_DIR              5\n\n/* Already declared in ossl_typ.h */\n# if 0\ntypedef struct crypto_ex_data_st CRYPTO_EX_DATA;\n/* Called when a new object is created */\ntypedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad,\n                           int idx, long argl, void *argp);\n/* Called when an object is free()ed */\ntypedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad,\n                             int idx, long argl, void *argp);\n/* Called when we need to dup an object */\ntypedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from,\n                           void *from_d, int idx, long argl, void *argp);\n# endif\n\n/* A generic structure to pass assorted data in a expandable way */\ntypedef struct openssl_item_st {\n    int code;\n    void *value;                /* Not used for flag attributes */\n    size_t value_size;          /* Max size of value for output, length for\n                                 * input */\n    size_t *value_length;       /* Returned length of value for output */\n} OPENSSL_ITEM;\n\n/*\n * When changing the CRYPTO_LOCK_* list, be sure to maintin the text lock\n * names in cryptlib.c\n */\n\n# define CRYPTO_LOCK_ERR                 1\n# define CRYPTO_LOCK_EX_DATA             2\n# define CRYPTO_LOCK_X509                3\n# define CRYPTO_LOCK_X509_INFO           4\n# define CRYPTO_LOCK_X509_PKEY           5\n# define CRYPTO_LOCK_X509_CRL            6\n# define CRYPTO_LOCK_X509_REQ            7\n# define CRYPTO_LOCK_DSA                 8\n# define CRYPTO_LOCK_RSA                 9\n# define CRYPTO_LOCK_EVP_PKEY            10\n# define CRYPTO_LOCK_X509_STORE          11\n# define CRYPTO_LOCK_SSL_CTX             12\n# define CRYPTO_LOCK_SSL_CERT            13\n# define CRYPTO_LOCK_SSL_SESSION         14\n# define CRYPTO_LOCK_SSL_SESS_CERT       15\n# define CRYPTO_LOCK_SSL                 16\n# define CRYPTO_LOCK_SSL_METHOD          17\n# define CRYPTO_LOCK_RAND                18\n# define CRYPTO_LOCK_RAND2               19\n# define CRYPTO_LOCK_MALLOC              20\n# define CRYPTO_LOCK_BIO                 21\n# define CRYPTO_LOCK_GETHOSTBYNAME       22\n# define CRYPTO_LOCK_GETSERVBYNAME       23\n# define CRYPTO_LOCK_READDIR             24\n# define CRYPTO_LOCK_RSA_BLINDING        25\n# define CRYPTO_LOCK_DH                  26\n# define CRYPTO_LOCK_MALLOC2             27\n# define CRYPTO_LOCK_DSO                 28\n# define CRYPTO_LOCK_DYNLOCK             29\n# define CRYPTO_LOCK_ENGINE              30\n# define CRYPTO_LOCK_UI                  31\n# define CRYPTO_LOCK_ECDSA               32\n# define CRYPTO_LOCK_EC                  33\n# define CRYPTO_LOCK_ECDH                34\n# define CRYPTO_LOCK_BN                  35\n# define CRYPTO_LOCK_EC_PRE_COMP         36\n# define CRYPTO_LOCK_STORE               37\n# define CRYPTO_LOCK_COMP                38\n# define CRYPTO_LOCK_FIPS                39\n# define CRYPTO_LOCK_FIPS2               40\n# define CRYPTO_NUM_LOCKS                41\n\n# define CRYPTO_LOCK             1\n# define CRYPTO_UNLOCK           2\n# define CRYPTO_READ             4\n# define CRYPTO_WRITE            8\n\n# ifndef OPENSSL_NO_LOCKING\n#  ifndef CRYPTO_w_lock\n#   define CRYPTO_w_lock(type)     \\\n        CRYPTO_lock(CRYPTO_LOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)\n#   define CRYPTO_w_unlock(type)   \\\n        CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_WRITE,type,__FILE__,__LINE__)\n#   define CRYPTO_r_lock(type)     \\\n        CRYPTO_lock(CRYPTO_LOCK|CRYPTO_READ,type,__FILE__,__LINE__)\n#   define CRYPTO_r_unlock(type)   \\\n        CRYPTO_lock(CRYPTO_UNLOCK|CRYPTO_READ,type,__FILE__,__LINE__)\n#   define CRYPTO_add(addr,amount,type)    \\\n        CRYPTO_add_lock(addr,amount,type,__FILE__,__LINE__)\n#  endif\n# else\n#  define CRYPTO_w_lock(a)\n#  define CRYPTO_w_unlock(a)\n#  define CRYPTO_r_lock(a)\n#  define CRYPTO_r_unlock(a)\n#  define CRYPTO_add(a,b,c)       ((*(a))+=(b))\n# endif\n\n/*\n * Some applications as well as some parts of OpenSSL need to allocate and\n * deallocate locks in a dynamic fashion.  The following typedef makes this\n * possible in a type-safe manner.\n */\n/* struct CRYPTO_dynlock_value has to be defined by the application. */\ntypedef struct {\n    int references;\n    struct CRYPTO_dynlock_value *data;\n} CRYPTO_dynlock;\n\n/*\n * The following can be used to detect memory leaks in the SSLeay library. It\n * used, it turns on malloc checking\n */\n\n# define CRYPTO_MEM_CHECK_OFF    0x0/* an enume */\n# define CRYPTO_MEM_CHECK_ON     0x1/* a bit */\n# define CRYPTO_MEM_CHECK_ENABLE 0x2/* a bit */\n# define CRYPTO_MEM_CHECK_DISABLE 0x3/* an enume */\n\n/*\n * The following are bit values to turn on or off options connected to the\n * malloc checking functionality\n */\n\n/* Adds time to the memory checking information */\n# define V_CRYPTO_MDEBUG_TIME    0x1/* a bit */\n/* Adds thread number to the memory checking information */\n# define V_CRYPTO_MDEBUG_THREAD  0x2/* a bit */\n\n# define V_CRYPTO_MDEBUG_ALL (V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD)\n\n/* predec of the BIO type */\ntypedef struct bio_st BIO_dummy;\n\nstruct crypto_ex_data_st {\n    STACK_OF(void) *sk;\n    /* gcc is screwing up this data structure :-( */\n    int dummy;\n};\nDECLARE_STACK_OF(void)\n\n/*\n * This stuff is basically class callback functions The current classes are\n * SSL_CTX, SSL, SSL_SESSION, and a few more\n */\n\ntypedef struct crypto_ex_data_func_st {\n    long argl;                  /* Arbitary long */\n    void *argp;                 /* Arbitary void * */\n    CRYPTO_EX_new *new_func;\n    CRYPTO_EX_free *free_func;\n    CRYPTO_EX_dup *dup_func;\n} CRYPTO_EX_DATA_FUNCS;\n\nDECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS)\n\n/*\n * Per class, we have a STACK of CRYPTO_EX_DATA_FUNCS for each CRYPTO_EX_DATA\n * entry.\n */\n\n# define CRYPTO_EX_INDEX_BIO             0\n# define CRYPTO_EX_INDEX_SSL             1\n# define CRYPTO_EX_INDEX_SSL_CTX         2\n# define CRYPTO_EX_INDEX_SSL_SESSION     3\n# define CRYPTO_EX_INDEX_X509_STORE      4\n# define CRYPTO_EX_INDEX_X509_STORE_CTX  5\n# define CRYPTO_EX_INDEX_RSA             6\n# define CRYPTO_EX_INDEX_DSA             7\n# define CRYPTO_EX_INDEX_DH              8\n# define CRYPTO_EX_INDEX_ENGINE          9\n# define CRYPTO_EX_INDEX_X509            10\n# define CRYPTO_EX_INDEX_UI              11\n# define CRYPTO_EX_INDEX_ECDSA           12\n# define CRYPTO_EX_INDEX_ECDH            13\n# define CRYPTO_EX_INDEX_COMP            14\n# define CRYPTO_EX_INDEX_STORE           15\n\n/*\n * Dynamically assigned indexes start from this value (don't use directly,\n * use via CRYPTO_ex_data_new_class).\n */\n# define CRYPTO_EX_INDEX_USER            100\n\n/*\n * This is the default callbacks, but we can have others as well: this is\n * needed in Win32 where the application malloc and the library malloc may\n * not be the same.\n */\n# define CRYPTO_malloc_init()    CRYPTO_set_mem_functions(\\\n        malloc, realloc, free)\n\n# if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD\n#  ifndef CRYPTO_MDEBUG         /* avoid duplicate #define */\n#   define CRYPTO_MDEBUG\n#  endif\n# endif\n\n/*\n * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG\n * is defined)\n */\n# define CRYPTO_malloc_debug_init()      do {\\\n        CRYPTO_set_mem_debug_functions(\\\n                CRYPTO_dbg_malloc,\\\n                CRYPTO_dbg_realloc,\\\n                CRYPTO_dbg_free,\\\n                CRYPTO_dbg_set_options,\\\n                CRYPTO_dbg_get_options);\\\n        } while(0)\n\nint CRYPTO_mem_ctrl(int mode);\nint CRYPTO_is_mem_check_on(void);\n\n/* for applications */\n# define MemCheck_start() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)\n# define MemCheck_stop() CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF)\n\n/* for library-internal use */\n# define MemCheck_on()   CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE)\n# define MemCheck_off()  CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE)\n# define is_MemCheck_on() CRYPTO_is_mem_check_on()\n\n# define OPENSSL_malloc(num)     CRYPTO_malloc((int)num,__FILE__,__LINE__)\n# define OPENSSL_strdup(str)     CRYPTO_strdup((str),__FILE__,__LINE__)\n# define OPENSSL_realloc(addr,num) \\\n        CRYPTO_realloc((char *)addr,(int)num,__FILE__,__LINE__)\n# define OPENSSL_realloc_clean(addr,old_num,num) \\\n        CRYPTO_realloc_clean(addr,old_num,num,__FILE__,__LINE__)\n# define OPENSSL_remalloc(addr,num) \\\n        CRYPTO_remalloc((char **)addr,(int)num,__FILE__,__LINE__)\n# define OPENSSL_freeFunc        CRYPTO_free\n# define OPENSSL_free(addr)      CRYPTO_free(addr)\n\n# define OPENSSL_malloc_locked(num) \\\n        CRYPTO_malloc_locked((int)num,__FILE__,__LINE__)\n# define OPENSSL_free_locked(addr) CRYPTO_free_locked(addr)\n\nconst char *SSLeay_version(int type);\nunsigned long SSLeay(void);\n\nint OPENSSL_issetugid(void);\n\n/* An opaque type representing an implementation of \"ex_data\" support */\ntypedef struct st_CRYPTO_EX_DATA_IMPL CRYPTO_EX_DATA_IMPL;\n/* Return an opaque pointer to the current \"ex_data\" implementation */\nconst CRYPTO_EX_DATA_IMPL *CRYPTO_get_ex_data_implementation(void);\n/* Sets the \"ex_data\" implementation to be used (if it's not too late) */\nint CRYPTO_set_ex_data_implementation(const CRYPTO_EX_DATA_IMPL *i);\n/* Get a new \"ex_data\" class, and return the corresponding \"class_index\" */\nint CRYPTO_ex_data_new_class(void);\n/* Within a given class, get/register a new index */\nint CRYPTO_get_ex_new_index(int class_index, long argl, void *argp,\n                            CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func,\n                            CRYPTO_EX_free *free_func);\n/*\n * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a\n * given class (invokes whatever per-class callbacks are applicable)\n */\nint CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);\nint CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to,\n                       CRYPTO_EX_DATA *from);\nvoid CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad);\n/*\n * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular\n * index (relative to the class type involved)\n */\nint CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);\nvoid *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx);\n/*\n * This function cleans up all \"ex_data\" state. It mustn't be called under\n * potential race-conditions.\n */\nvoid CRYPTO_cleanup_all_ex_data(void);\n\nint CRYPTO_get_new_lockid(char *name);\n\nint CRYPTO_num_locks(void);     /* return CRYPTO_NUM_LOCKS (shared libs!) */\nvoid CRYPTO_lock(int mode, int type, const char *file, int line);\nvoid CRYPTO_set_locking_callback(void (*func) (int mode, int type,\n                                               const char *file, int line));\nvoid (*CRYPTO_get_locking_callback(void)) (int mode, int type,\n                                           const char *file, int line);\nvoid CRYPTO_set_add_lock_callback(int (*func)\n                                   (int *num, int mount, int type,\n                                    const char *file, int line));\nint (*CRYPTO_get_add_lock_callback(void)) (int *num, int mount, int type,\n                                           const char *file, int line);\n\n/* Don't use this structure directly. */\ntypedef struct crypto_threadid_st {\n    void *ptr;\n    unsigned long val;\n} CRYPTO_THREADID;\n/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */\nvoid CRYPTO_THREADID_set_numeric(CRYPTO_THREADID *id, unsigned long val);\nvoid CRYPTO_THREADID_set_pointer(CRYPTO_THREADID *id, void *ptr);\nint CRYPTO_THREADID_set_callback(void (*threadid_func) (CRYPTO_THREADID *));\nvoid (*CRYPTO_THREADID_get_callback(void)) (CRYPTO_THREADID *);\nvoid CRYPTO_THREADID_current(CRYPTO_THREADID *id);\nint CRYPTO_THREADID_cmp(const CRYPTO_THREADID *a, const CRYPTO_THREADID *b);\nvoid CRYPTO_THREADID_cpy(CRYPTO_THREADID *dest, const CRYPTO_THREADID *src);\nunsigned long CRYPTO_THREADID_hash(const CRYPTO_THREADID *id);\n# ifndef OPENSSL_NO_DEPRECATED\nvoid CRYPTO_set_id_callback(unsigned long (*func) (void));\nunsigned long (*CRYPTO_get_id_callback(void)) (void);\nunsigned long CRYPTO_thread_id(void);\n# endif\n\nconst char *CRYPTO_get_lock_name(int type);\nint CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,\n                    int line);\n\nint CRYPTO_get_new_dynlockid(void);\nvoid CRYPTO_destroy_dynlockid(int i);\nstruct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);\nvoid CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value\n                                        *(*dyn_create_function) (const char\n                                                                 *file,\n                                                                 int line));\nvoid CRYPTO_set_dynlock_lock_callback(void (*dyn_lock_function)\n                                       (int mode,\n                                        struct CRYPTO_dynlock_value *l,\n                                        const char *file, int line));\nvoid CRYPTO_set_dynlock_destroy_callback(void (*dyn_destroy_function)\n                                          (struct CRYPTO_dynlock_value *l,\n                                           const char *file, int line));\nstruct CRYPTO_dynlock_value\n*(*CRYPTO_get_dynlock_create_callback(void)) (const char *file, int line);\nvoid (*CRYPTO_get_dynlock_lock_callback(void)) (int mode,\n                                                struct CRYPTO_dynlock_value\n                                                *l, const char *file,\n                                                int line);\nvoid (*CRYPTO_get_dynlock_destroy_callback(void)) (struct CRYPTO_dynlock_value\n                                                   *l, const char *file,\n                                                   int line);\n\n/*\n * CRYPTO_set_mem_functions includes CRYPTO_set_locked_mem_functions -- call\n * the latter last if you need different functions\n */\nint CRYPTO_set_mem_functions(void *(*m) (size_t), void *(*r) (void *, size_t),\n                             void (*f) (void *));\nint CRYPTO_set_locked_mem_functions(void *(*m) (size_t),\n                                    void (*free_func) (void *));\nint CRYPTO_set_mem_ex_functions(void *(*m) (size_t, const char *, int),\n                                void *(*r) (void *, size_t, const char *,\n                                            int), void (*f) (void *));\nint CRYPTO_set_locked_mem_ex_functions(void *(*m) (size_t, const char *, int),\n                                       void (*free_func) (void *));\nint CRYPTO_set_mem_debug_functions(void (*m)\n                                    (void *, int, const char *, int, int),\n                                   void (*r) (void *, void *, int,\n                                              const char *, int, int),\n                                   void (*f) (void *, int), void (*so) (long),\n                                   long (*go) (void));\nvoid CRYPTO_get_mem_functions(void *(**m) (size_t),\n                              void *(**r) (void *, size_t),\n                              void (**f) (void *));\nvoid CRYPTO_get_locked_mem_functions(void *(**m) (size_t),\n                                     void (**f) (void *));\nvoid CRYPTO_get_mem_ex_functions(void *(**m) (size_t, const char *, int),\n                                 void *(**r) (void *, size_t, const char *,\n                                              int), void (**f) (void *));\nvoid CRYPTO_get_locked_mem_ex_functions(void\n                                        *(**m) (size_t, const char *, int),\n                                        void (**f) (void *));\nvoid CRYPTO_get_mem_debug_functions(void (**m)\n                                     (void *, int, const char *, int, int),\n                                    void (**r) (void *, void *, int,\n                                                const char *, int, int),\n                                    void (**f) (void *, int),\n                                    void (**so) (long), long (**go) (void));\n\nvoid *CRYPTO_malloc_locked(int num, const char *file, int line);\nvoid CRYPTO_free_locked(void *ptr);\nvoid *CRYPTO_malloc(int num, const char *file, int line);\nchar *CRYPTO_strdup(const char *str, const char *file, int line);\nvoid CRYPTO_free(void *ptr);\nvoid *CRYPTO_realloc(void *addr, int num, const char *file, int line);\nvoid *CRYPTO_realloc_clean(void *addr, int old_num, int num, const char *file,\n                           int line);\nvoid *CRYPTO_remalloc(void *addr, int num, const char *file, int line);\n\nvoid OPENSSL_cleanse(void *ptr, size_t len);\n\nvoid CRYPTO_set_mem_debug_options(long bits);\nlong CRYPTO_get_mem_debug_options(void);\n\n# define CRYPTO_push_info(info) \\\n        CRYPTO_push_info_(info, __FILE__, __LINE__);\nint CRYPTO_push_info_(const char *info, const char *file, int line);\nint CRYPTO_pop_info(void);\nint CRYPTO_remove_all_info(void);\n\n/*\n * Default debugging functions (enabled by CRYPTO_malloc_debug_init() macro;\n * used as default in CRYPTO_MDEBUG compilations):\n */\n/*-\n * The last argument has the following significance:\n *\n * 0:   called before the actual memory allocation has taken place\n * 1:   called after the actual memory allocation has taken place\n */\nvoid CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line,\n                       int before_p);\nvoid CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, const char *file,\n                        int line, int before_p);\nvoid CRYPTO_dbg_free(void *addr, int before_p);\n/*-\n * Tell the debugging code about options.  By default, the following values\n * apply:\n *\n * 0:                           Clear all options.\n * V_CRYPTO_MDEBUG_TIME (1):    Set the \"Show Time\" option.\n * V_CRYPTO_MDEBUG_THREAD (2):  Set the \"Show Thread Number\" option.\n * V_CRYPTO_MDEBUG_ALL (3):     1 + 2\n */\nvoid CRYPTO_dbg_set_options(long bits);\nlong CRYPTO_dbg_get_options(void);\n\n# ifndef OPENSSL_NO_FP_API\nvoid CRYPTO_mem_leaks_fp(FILE *);\n# endif\nvoid CRYPTO_mem_leaks(struct bio_st *bio);\n/* unsigned long order, char *file, int line, int num_bytes, char *addr */\ntypedef void *CRYPTO_MEM_LEAK_CB (unsigned long, const char *, int, int,\n                                  void *);\nvoid CRYPTO_mem_leaks_cb(CRYPTO_MEM_LEAK_CB *cb);\n\n/* die if we have to */\nvoid OpenSSLDie(const char *file, int line, const char *assertion);\n# define OPENSSL_assert(e)       (void)((e) ? 0 : (OpenSSLDie(__FILE__, __LINE__, #e),1))\n\nunsigned long *OPENSSL_ia32cap_loc(void);\n# define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))\nint OPENSSL_isservice(void);\n\nint FIPS_mode(void);\nint FIPS_mode_set(int r);\n\nvoid OPENSSL_init(void);\n\n# define fips_md_init(alg) fips_md_init_ctx(alg, alg)\n\n# ifdef OPENSSL_FIPS\n#  define fips_md_init_ctx(alg, cx) \\\n        int alg##_Init(cx##_CTX *c) \\\n        { \\\n        if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \\\n                \"Low level API call to digest \" #alg \" forbidden in FIPS mode!\"); \\\n        return private_##alg##_Init(c); \\\n        } \\\n        int private_##alg##_Init(cx##_CTX *c)\n\n#  define fips_cipher_abort(alg) \\\n        if (FIPS_mode()) OpenSSLDie(__FILE__, __LINE__, \\\n                \"Low level API call to cipher \" #alg \" forbidden in FIPS mode!\")\n\n# else\n#  define fips_md_init_ctx(alg, cx) \\\n        int alg##_Init(cx##_CTX *c)\n#  define fips_cipher_abort(alg) while(0)\n# endif\n\n/*\n * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal.\n * It takes an amount of time dependent on |len|, but independent of the\n * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements\n * into a defined order as the return value when a != b is undefined, other\n * than to be non-zero.\n */\nint CRYPTO_memcmp(const void *a, const void *b, size_t len);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_CRYPTO_strings(void);\n\n/* Error codes for the CRYPTO functions. */\n\n/* Function codes. */\n# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX                 100\n# define CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID                103\n# define CRYPTO_F_CRYPTO_GET_NEW_LOCKID                   101\n# define CRYPTO_F_CRYPTO_SET_EX_DATA                      102\n# define CRYPTO_F_DEF_ADD_INDEX                           104\n# define CRYPTO_F_DEF_GET_CLASS                           105\n# define CRYPTO_F_FIPS_MODE_SET                           109\n# define CRYPTO_F_INT_DUP_EX_DATA                         106\n# define CRYPTO_F_INT_FREE_EX_DATA                        107\n# define CRYPTO_F_INT_NEW_EX_DATA                         108\n\n/* Reason codes. */\n# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED                 101\n# define CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK              100\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/des.h",
    "content": "/* crypto/des/des.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_NEW_DES_H\n# define HEADER_NEW_DES_H\n\n# include <openssl/e_os2.h>     /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG\n                                 * (via openssl/opensslconf.h */\n\n# ifdef OPENSSL_NO_DES\n#  error DES is disabled.\n# endif\n\n# ifdef OPENSSL_BUILD_SHLIBCRYPTO\n#  undef OPENSSL_EXTERN\n#  define OPENSSL_EXTERN OPENSSL_EXPORT\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef unsigned char DES_cblock[8];\ntypedef /* const */ unsigned char const_DES_cblock[8];\n/*\n * With \"const\", gcc 2.8.1 on Solaris thinks that DES_cblock * and\n * const_DES_cblock * are incompatible pointer types.\n */\n\ntypedef struct DES_ks {\n    union {\n        DES_cblock cblock;\n        /*\n         * make sure things are correct size on machines with 8 byte longs\n         */\n        DES_LONG deslong[2];\n    } ks[16];\n} DES_key_schedule;\n\n# ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT\n#  ifndef OPENSSL_ENABLE_OLD_DES_SUPPORT\n#   define OPENSSL_ENABLE_OLD_DES_SUPPORT\n#  endif\n# endif\n\n# ifdef OPENSSL_ENABLE_OLD_DES_SUPPORT\n#  include <openssl/des_old.h>\n# endif\n\n# define DES_KEY_SZ      (sizeof(DES_cblock))\n# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule))\n\n# define DES_ENCRYPT     1\n# define DES_DECRYPT     0\n\n# define DES_CBC_MODE    0\n# define DES_PCBC_MODE   1\n\n# define DES_ecb2_encrypt(i,o,k1,k2,e) \\\n        DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))\n\n# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \\\n        DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))\n\n# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \\\n        DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))\n\n# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \\\n        DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))\n\nOPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */\n# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key)\nOPENSSL_DECLARE_GLOBAL(int, DES_rw_mode); /* defaults to DES_PCBC_MODE */\n# define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode)\n\nconst char *DES_options(void);\nvoid DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,\n                      DES_key_schedule *ks1, DES_key_schedule *ks2,\n                      DES_key_schedule *ks3, int enc);\nDES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output,\n                       long length, DES_key_schedule *schedule,\n                       const_DES_cblock *ivec);\n/* DES_cbc_encrypt does not update the IV!  Use DES_ncbc_encrypt instead. */\nvoid DES_cbc_encrypt(const unsigned char *input, unsigned char *output,\n                     long length, DES_key_schedule *schedule,\n                     DES_cblock *ivec, int enc);\nvoid DES_ncbc_encrypt(const unsigned char *input, unsigned char *output,\n                      long length, DES_key_schedule *schedule,\n                      DES_cblock *ivec, int enc);\nvoid DES_xcbc_encrypt(const unsigned char *input, unsigned char *output,\n                      long length, DES_key_schedule *schedule,\n                      DES_cblock *ivec, const_DES_cblock *inw,\n                      const_DES_cblock *outw, int enc);\nvoid DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,\n                     long length, DES_key_schedule *schedule,\n                     DES_cblock *ivec, int enc);\nvoid DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,\n                     DES_key_schedule *ks, int enc);\n\n/*\n * This is the DES encryption function that gets called by just about every\n * other DES routine in the library.  You should not use this function except\n * to implement 'modes' of DES.  I say this because the functions that call\n * this routine do the conversion from 'char *' to long, and this needs to be\n * done to make sure 'non-aligned' memory access do not occur.  The\n * characters are loaded 'little endian'. Data is a pointer to 2 unsigned\n * long's and ks is the DES_key_schedule to use.  enc, is non zero specifies\n * encryption, zero if decryption.\n */\nvoid DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc);\n\n/*\n * This functions is the same as DES_encrypt1() except that the DES initial\n * permutation (IP) and final permutation (FP) have been left out.  As for\n * DES_encrypt1(), you should not use this function. It is used by the\n * routines in the library that implement triple DES. IP() DES_encrypt2()\n * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1()\n * DES_encrypt1() DES_encrypt1() except faster :-).\n */\nvoid DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc);\n\nvoid DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,\n                  DES_key_schedule *ks2, DES_key_schedule *ks3);\nvoid DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,\n                  DES_key_schedule *ks2, DES_key_schedule *ks3);\nvoid DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,\n                          long length,\n                          DES_key_schedule *ks1, DES_key_schedule *ks2,\n                          DES_key_schedule *ks3, DES_cblock *ivec, int enc);\nvoid DES_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,\n                           long length,\n                           DES_key_schedule *ks1, DES_key_schedule *ks2,\n                           DES_key_schedule *ks3,\n                           DES_cblock *ivec1, DES_cblock *ivec2, int enc);\nvoid DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                            long length, DES_key_schedule *ks1,\n                            DES_key_schedule *ks2, DES_key_schedule *ks3,\n                            DES_cblock *ivec, int *num, int enc);\nvoid DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out,\n                          int numbits, long length, DES_key_schedule *ks1,\n                          DES_key_schedule *ks2, DES_key_schedule *ks3,\n                          DES_cblock *ivec, int enc);\nvoid DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                            long length, DES_key_schedule *ks1,\n                            DES_key_schedule *ks2, DES_key_schedule *ks3,\n                            DES_cblock *ivec, int *num);\n# if 0\nvoid DES_xwhite_in2out(const_DES_cblock *DES_key, const_DES_cblock *in_white,\n                       DES_cblock *out_white);\n# endif\n\nint DES_enc_read(int fd, void *buf, int len, DES_key_schedule *sched,\n                 DES_cblock *iv);\nint DES_enc_write(int fd, const void *buf, int len, DES_key_schedule *sched,\n                  DES_cblock *iv);\nchar *DES_fcrypt(const char *buf, const char *salt, char *ret);\nchar *DES_crypt(const char *buf, const char *salt);\nvoid DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,\n                     long length, DES_key_schedule *schedule,\n                     DES_cblock *ivec);\nvoid DES_pcbc_encrypt(const unsigned char *input, unsigned char *output,\n                      long length, DES_key_schedule *schedule,\n                      DES_cblock *ivec, int enc);\nDES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[],\n                        long length, int out_count, DES_cblock *seed);\nint DES_random_key(DES_cblock *ret);\nvoid DES_set_odd_parity(DES_cblock *key);\nint DES_check_key_parity(const_DES_cblock *key);\nint DES_is_weak_key(const_DES_cblock *key);\n/*\n * DES_set_key (= set_key = DES_key_sched = key_sched) calls\n * DES_set_key_checked if global variable DES_check_key is set,\n * DES_set_key_unchecked otherwise.\n */\nint DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule);\nint DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule);\nint DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule);\nvoid DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule);\n# ifdef OPENSSL_FIPS\nvoid private_DES_set_key_unchecked(const_DES_cblock *key,\n                                   DES_key_schedule *schedule);\n# endif\nvoid DES_string_to_key(const char *str, DES_cblock *key);\nvoid DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2);\nvoid DES_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                       long length, DES_key_schedule *schedule,\n                       DES_cblock *ivec, int *num, int enc);\nvoid DES_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                       long length, DES_key_schedule *schedule,\n                       DES_cblock *ivec, int *num);\n\nint DES_read_password(DES_cblock *key, const char *prompt, int verify);\nint DES_read_2passwords(DES_cblock *key1, DES_cblock *key2,\n                        const char *prompt, int verify);\n\n# define DES_fixup_key_parity DES_set_odd_parity\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/des_old.h",
    "content": "/* crypto/des/des_old.h -*- mode:C; c-file-style: \"eay\" -*- */\n\n/*-\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n *\n * The function names in here are deprecated and are only present to\n * provide an interface compatible with openssl 0.9.6 and older as\n * well as libdes.  OpenSSL now provides functions where \"des_\" has\n * been replaced with \"DES_\" in the names, to make it possible to\n * make incompatible changes that are needed for C type security and\n * other stuff.\n *\n * This include files has two compatibility modes:\n *\n *   - If OPENSSL_DES_LIBDES_COMPATIBILITY is defined, you get an API\n *     that is compatible with libdes and SSLeay.\n *   - If OPENSSL_DES_LIBDES_COMPATIBILITY isn't defined, you get an\n *     API that is compatible with OpenSSL 0.9.5x to 0.9.6x.\n *\n * Note that these modes break earlier snapshots of OpenSSL, where\n * libdes compatibility was the only available mode or (later on) the\n * prefered compatibility mode.  However, after much consideration\n * (and more or less violent discussions with external parties), it\n * was concluded that OpenSSL should be compatible with earlier versions\n * of itself before anything else.  Also, in all honesty, libdes is\n * an old beast that shouldn't really be used any more.\n *\n * Please consider starting to use the DES_ functions rather than the\n * des_ ones.  The des_ functions will disappear completely before\n * OpenSSL 1.0!\n *\n * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING\n */\n\n/*\n * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project\n * 2001.\n */\n/* ====================================================================\n * Copyright (c) 1998-2002 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_DES_H\n# define HEADER_DES_H\n\n# include <openssl/e_os2.h>     /* OPENSSL_EXTERN, OPENSSL_NO_DES, DES_LONG */\n\n# ifdef OPENSSL_NO_DES\n#  error DES is disabled.\n# endif\n\n# ifndef HEADER_NEW_DES_H\n#  error You must include des.h, not des_old.h directly.\n# endif\n\n# ifdef _KERBEROS_DES_H\n#  error <openssl/des_old.h> replaces <kerberos/des.h>.\n# endif\n\n# include <openssl/symhacks.h>\n\n# ifdef OPENSSL_BUILD_SHLIBCRYPTO\n#  undef OPENSSL_EXTERN\n#  define OPENSSL_EXTERN OPENSSL_EXPORT\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef _\n#  undef _\n# endif\n\ntypedef unsigned char _ossl_old_des_cblock[8];\ntypedef struct _ossl_old_des_ks_struct {\n    union {\n        _ossl_old_des_cblock _;\n        /*\n         * make sure things are correct size on machines with 8 byte longs\n         */\n        DES_LONG pad[2];\n    } ks;\n} _ossl_old_des_key_schedule[16];\n\n# ifndef OPENSSL_DES_LIBDES_COMPATIBILITY\n#  define des_cblock DES_cblock\n#  define const_des_cblock const_DES_cblock\n#  define des_key_schedule DES_key_schedule\n#  define des_ecb3_encrypt(i,o,k1,k2,k3,e)\\\n        DES_ecb3_encrypt((i),(o),&(k1),&(k2),&(k3),(e))\n#  define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\\\n        DES_ede3_cbc_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(e))\n#  define des_ede3_cbcm_encrypt(i,o,l,k1,k2,k3,iv1,iv2,e)\\\n        DES_ede3_cbcm_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv1),(iv2),(e))\n#  define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\\\n        DES_ede3_cfb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n),(e))\n#  define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\\\n        DES_ede3_ofb64_encrypt((i),(o),(l),&(k1),&(k2),&(k3),(iv),(n))\n#  define des_options()\\\n        DES_options()\n#  define des_cbc_cksum(i,o,l,k,iv)\\\n        DES_cbc_cksum((i),(o),(l),&(k),(iv))\n#  define des_cbc_encrypt(i,o,l,k,iv,e)\\\n        DES_cbc_encrypt((i),(o),(l),&(k),(iv),(e))\n#  define des_ncbc_encrypt(i,o,l,k,iv,e)\\\n        DES_ncbc_encrypt((i),(o),(l),&(k),(iv),(e))\n#  define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\\\n        DES_xcbc_encrypt((i),(o),(l),&(k),(iv),(inw),(outw),(e))\n#  define des_cfb_encrypt(i,o,n,l,k,iv,e)\\\n        DES_cfb_encrypt((i),(o),(n),(l),&(k),(iv),(e))\n#  define des_ecb_encrypt(i,o,k,e)\\\n        DES_ecb_encrypt((i),(o),&(k),(e))\n#  define des_encrypt1(d,k,e)\\\n        DES_encrypt1((d),&(k),(e))\n#  define des_encrypt2(d,k,e)\\\n        DES_encrypt2((d),&(k),(e))\n#  define des_encrypt3(d,k1,k2,k3)\\\n        DES_encrypt3((d),&(k1),&(k2),&(k3))\n#  define des_decrypt3(d,k1,k2,k3)\\\n        DES_decrypt3((d),&(k1),&(k2),&(k3))\n#  define des_xwhite_in2out(k,i,o)\\\n        DES_xwhite_in2out((k),(i),(o))\n#  define des_enc_read(f,b,l,k,iv)\\\n        DES_enc_read((f),(b),(l),&(k),(iv))\n#  define des_enc_write(f,b,l,k,iv)\\\n        DES_enc_write((f),(b),(l),&(k),(iv))\n#  define des_fcrypt(b,s,r)\\\n        DES_fcrypt((b),(s),(r))\n#  if 0\n#   define des_crypt(b,s)\\\n        DES_crypt((b),(s))\n#   if !defined(PERL5) && !defined(__FreeBSD__) && !defined(NeXT) && !defined(__OpenBSD__)\n#    define crypt(b,s)\\\n        DES_crypt((b),(s))\n#   endif\n#  endif\n#  define des_ofb_encrypt(i,o,n,l,k,iv)\\\n        DES_ofb_encrypt((i),(o),(n),(l),&(k),(iv))\n#  define des_pcbc_encrypt(i,o,l,k,iv,e)\\\n        DES_pcbc_encrypt((i),(o),(l),&(k),(iv),(e))\n#  define des_quad_cksum(i,o,l,c,s)\\\n        DES_quad_cksum((i),(o),(l),(c),(s))\n#  define des_random_seed(k)\\\n        _ossl_096_des_random_seed((k))\n#  define des_random_key(r)\\\n        DES_random_key((r))\n#  define des_read_password(k,p,v) \\\n        DES_read_password((k),(p),(v))\n#  define des_read_2passwords(k1,k2,p,v) \\\n        DES_read_2passwords((k1),(k2),(p),(v))\n#  define des_set_odd_parity(k)\\\n        DES_set_odd_parity((k))\n#  define des_check_key_parity(k)\\\n        DES_check_key_parity((k))\n#  define des_is_weak_key(k)\\\n        DES_is_weak_key((k))\n#  define des_set_key(k,ks)\\\n        DES_set_key((k),&(ks))\n#  define des_key_sched(k,ks)\\\n        DES_key_sched((k),&(ks))\n#  define des_set_key_checked(k,ks)\\\n        DES_set_key_checked((k),&(ks))\n#  define des_set_key_unchecked(k,ks)\\\n        DES_set_key_unchecked((k),&(ks))\n#  define des_string_to_key(s,k)\\\n        DES_string_to_key((s),(k))\n#  define des_string_to_2keys(s,k1,k2)\\\n        DES_string_to_2keys((s),(k1),(k2))\n#  define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\\\n        DES_cfb64_encrypt((i),(o),(l),&(ks),(iv),(n),(e))\n#  define des_ofb64_encrypt(i,o,l,ks,iv,n)\\\n        DES_ofb64_encrypt((i),(o),(l),&(ks),(iv),(n))\n\n#  define des_ecb2_encrypt(i,o,k1,k2,e) \\\n        des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))\n\n#  define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \\\n        des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))\n\n#  define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \\\n        des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))\n\n#  define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \\\n        des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))\n\n#  define des_check_key DES_check_key\n#  define des_rw_mode DES_rw_mode\n# else                          /* libdes compatibility */\n/*\n * Map all symbol names to _ossl_old_des_* form, so we avoid all clashes with\n * libdes\n */\n#  define des_cblock _ossl_old_des_cblock\n#  define des_key_schedule _ossl_old_des_key_schedule\n#  define des_ecb3_encrypt(i,o,k1,k2,k3,e)\\\n        _ossl_old_des_ecb3_encrypt((i),(o),(k1),(k2),(k3),(e))\n#  define des_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e)\\\n        _ossl_old_des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(e))\n#  define des_ede3_cfb64_encrypt(i,o,l,k1,k2,k3,iv,n,e)\\\n        _ossl_old_des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n),(e))\n#  define des_ede3_ofb64_encrypt(i,o,l,k1,k2,k3,iv,n)\\\n        _ossl_old_des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k3),(iv),(n))\n#  define des_options()\\\n        _ossl_old_des_options()\n#  define des_cbc_cksum(i,o,l,k,iv)\\\n        _ossl_old_des_cbc_cksum((i),(o),(l),(k),(iv))\n#  define des_cbc_encrypt(i,o,l,k,iv,e)\\\n        _ossl_old_des_cbc_encrypt((i),(o),(l),(k),(iv),(e))\n#  define des_ncbc_encrypt(i,o,l,k,iv,e)\\\n        _ossl_old_des_ncbc_encrypt((i),(o),(l),(k),(iv),(e))\n#  define des_xcbc_encrypt(i,o,l,k,iv,inw,outw,e)\\\n        _ossl_old_des_xcbc_encrypt((i),(o),(l),(k),(iv),(inw),(outw),(e))\n#  define des_cfb_encrypt(i,o,n,l,k,iv,e)\\\n        _ossl_old_des_cfb_encrypt((i),(o),(n),(l),(k),(iv),(e))\n#  define des_ecb_encrypt(i,o,k,e)\\\n        _ossl_old_des_ecb_encrypt((i),(o),(k),(e))\n#  define des_encrypt(d,k,e)\\\n        _ossl_old_des_encrypt((d),(k),(e))\n#  define des_encrypt2(d,k,e)\\\n        _ossl_old_des_encrypt2((d),(k),(e))\n#  define des_encrypt3(d,k1,k2,k3)\\\n        _ossl_old_des_encrypt3((d),(k1),(k2),(k3))\n#  define des_decrypt3(d,k1,k2,k3)\\\n        _ossl_old_des_decrypt3((d),(k1),(k2),(k3))\n#  define des_xwhite_in2out(k,i,o)\\\n        _ossl_old_des_xwhite_in2out((k),(i),(o))\n#  define des_enc_read(f,b,l,k,iv)\\\n        _ossl_old_des_enc_read((f),(b),(l),(k),(iv))\n#  define des_enc_write(f,b,l,k,iv)\\\n        _ossl_old_des_enc_write((f),(b),(l),(k),(iv))\n#  define des_fcrypt(b,s,r)\\\n        _ossl_old_des_fcrypt((b),(s),(r))\n#  define des_crypt(b,s)\\\n        _ossl_old_des_crypt((b),(s))\n#  if 0\n#   define crypt(b,s)\\\n        _ossl_old_crypt((b),(s))\n#  endif\n#  define des_ofb_encrypt(i,o,n,l,k,iv)\\\n        _ossl_old_des_ofb_encrypt((i),(o),(n),(l),(k),(iv))\n#  define des_pcbc_encrypt(i,o,l,k,iv,e)\\\n        _ossl_old_des_pcbc_encrypt((i),(o),(l),(k),(iv),(e))\n#  define des_quad_cksum(i,o,l,c,s)\\\n        _ossl_old_des_quad_cksum((i),(o),(l),(c),(s))\n#  define des_random_seed(k)\\\n        _ossl_old_des_random_seed((k))\n#  define des_random_key(r)\\\n        _ossl_old_des_random_key((r))\n#  define des_read_password(k,p,v) \\\n        _ossl_old_des_read_password((k),(p),(v))\n#  define des_read_2passwords(k1,k2,p,v) \\\n        _ossl_old_des_read_2passwords((k1),(k2),(p),(v))\n#  define des_set_odd_parity(k)\\\n        _ossl_old_des_set_odd_parity((k))\n#  define des_is_weak_key(k)\\\n        _ossl_old_des_is_weak_key((k))\n#  define des_set_key(k,ks)\\\n        _ossl_old_des_set_key((k),(ks))\n#  define des_key_sched(k,ks)\\\n        _ossl_old_des_key_sched((k),(ks))\n#  define des_string_to_key(s,k)\\\n        _ossl_old_des_string_to_key((s),(k))\n#  define des_string_to_2keys(s,k1,k2)\\\n        _ossl_old_des_string_to_2keys((s),(k1),(k2))\n#  define des_cfb64_encrypt(i,o,l,ks,iv,n,e)\\\n        _ossl_old_des_cfb64_encrypt((i),(o),(l),(ks),(iv),(n),(e))\n#  define des_ofb64_encrypt(i,o,l,ks,iv,n)\\\n        _ossl_old_des_ofb64_encrypt((i),(o),(l),(ks),(iv),(n))\n\n#  define des_ecb2_encrypt(i,o,k1,k2,e) \\\n        des_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e))\n\n#  define des_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \\\n        des_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e))\n\n#  define des_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \\\n        des_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e))\n\n#  define des_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \\\n        des_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n))\n\n#  define des_check_key DES_check_key\n#  define des_rw_mode DES_rw_mode\n# endif\n\nconst char *_ossl_old_des_options(void);\nvoid _ossl_old_des_ecb3_encrypt(_ossl_old_des_cblock *input,\n                                _ossl_old_des_cblock *output,\n                                _ossl_old_des_key_schedule ks1,\n                                _ossl_old_des_key_schedule ks2,\n                                _ossl_old_des_key_schedule ks3, int enc);\nDES_LONG _ossl_old_des_cbc_cksum(_ossl_old_des_cblock *input,\n                                 _ossl_old_des_cblock *output, long length,\n                                 _ossl_old_des_key_schedule schedule,\n                                 _ossl_old_des_cblock *ivec);\nvoid _ossl_old_des_cbc_encrypt(_ossl_old_des_cblock *input,\n                               _ossl_old_des_cblock *output, long length,\n                               _ossl_old_des_key_schedule schedule,\n                               _ossl_old_des_cblock *ivec, int enc);\nvoid _ossl_old_des_ncbc_encrypt(_ossl_old_des_cblock *input,\n                                _ossl_old_des_cblock *output, long length,\n                                _ossl_old_des_key_schedule schedule,\n                                _ossl_old_des_cblock *ivec, int enc);\nvoid _ossl_old_des_xcbc_encrypt(_ossl_old_des_cblock *input,\n                                _ossl_old_des_cblock *output, long length,\n                                _ossl_old_des_key_schedule schedule,\n                                _ossl_old_des_cblock *ivec,\n                                _ossl_old_des_cblock *inw,\n                                _ossl_old_des_cblock *outw, int enc);\nvoid _ossl_old_des_cfb_encrypt(unsigned char *in, unsigned char *out,\n                               int numbits, long length,\n                               _ossl_old_des_key_schedule schedule,\n                               _ossl_old_des_cblock *ivec, int enc);\nvoid _ossl_old_des_ecb_encrypt(_ossl_old_des_cblock *input,\n                               _ossl_old_des_cblock *output,\n                               _ossl_old_des_key_schedule ks, int enc);\nvoid _ossl_old_des_encrypt(DES_LONG *data, _ossl_old_des_key_schedule ks,\n                           int enc);\nvoid _ossl_old_des_encrypt2(DES_LONG *data, _ossl_old_des_key_schedule ks,\n                            int enc);\nvoid _ossl_old_des_encrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1,\n                            _ossl_old_des_key_schedule ks2,\n                            _ossl_old_des_key_schedule ks3);\nvoid _ossl_old_des_decrypt3(DES_LONG *data, _ossl_old_des_key_schedule ks1,\n                            _ossl_old_des_key_schedule ks2,\n                            _ossl_old_des_key_schedule ks3);\nvoid _ossl_old_des_ede3_cbc_encrypt(_ossl_old_des_cblock *input,\n                                    _ossl_old_des_cblock *output, long length,\n                                    _ossl_old_des_key_schedule ks1,\n                                    _ossl_old_des_key_schedule ks2,\n                                    _ossl_old_des_key_schedule ks3,\n                                    _ossl_old_des_cblock *ivec, int enc);\nvoid _ossl_old_des_ede3_cfb64_encrypt(unsigned char *in, unsigned char *out,\n                                      long length,\n                                      _ossl_old_des_key_schedule ks1,\n                                      _ossl_old_des_key_schedule ks2,\n                                      _ossl_old_des_key_schedule ks3,\n                                      _ossl_old_des_cblock *ivec, int *num,\n                                      int enc);\nvoid _ossl_old_des_ede3_ofb64_encrypt(unsigned char *in, unsigned char *out,\n                                      long length,\n                                      _ossl_old_des_key_schedule ks1,\n                                      _ossl_old_des_key_schedule ks2,\n                                      _ossl_old_des_key_schedule ks3,\n                                      _ossl_old_des_cblock *ivec, int *num);\n# if 0\nvoid _ossl_old_des_xwhite_in2out(_ossl_old_des_cblock (*des_key),\n                                 _ossl_old_des_cblock (*in_white),\n                                 _ossl_old_des_cblock (*out_white));\n# endif\n\nint _ossl_old_des_enc_read(int fd, char *buf, int len,\n                           _ossl_old_des_key_schedule sched,\n                           _ossl_old_des_cblock *iv);\nint _ossl_old_des_enc_write(int fd, char *buf, int len,\n                            _ossl_old_des_key_schedule sched,\n                            _ossl_old_des_cblock *iv);\nchar *_ossl_old_des_fcrypt(const char *buf, const char *salt, char *ret);\nchar *_ossl_old_des_crypt(const char *buf, const char *salt);\n# if !defined(PERL5) && !defined(NeXT)\nchar *_ossl_old_crypt(const char *buf, const char *salt);\n# endif\nvoid _ossl_old_des_ofb_encrypt(unsigned char *in, unsigned char *out,\n                               int numbits, long length,\n                               _ossl_old_des_key_schedule schedule,\n                               _ossl_old_des_cblock *ivec);\nvoid _ossl_old_des_pcbc_encrypt(_ossl_old_des_cblock *input,\n                                _ossl_old_des_cblock *output, long length,\n                                _ossl_old_des_key_schedule schedule,\n                                _ossl_old_des_cblock *ivec, int enc);\nDES_LONG _ossl_old_des_quad_cksum(_ossl_old_des_cblock *input,\n                                  _ossl_old_des_cblock *output, long length,\n                                  int out_count, _ossl_old_des_cblock *seed);\nvoid _ossl_old_des_random_seed(_ossl_old_des_cblock key);\nvoid _ossl_old_des_random_key(_ossl_old_des_cblock ret);\nint _ossl_old_des_read_password(_ossl_old_des_cblock *key, const char *prompt,\n                                int verify);\nint _ossl_old_des_read_2passwords(_ossl_old_des_cblock *key1,\n                                  _ossl_old_des_cblock *key2,\n                                  const char *prompt, int verify);\nvoid _ossl_old_des_set_odd_parity(_ossl_old_des_cblock *key);\nint _ossl_old_des_is_weak_key(_ossl_old_des_cblock *key);\nint _ossl_old_des_set_key(_ossl_old_des_cblock *key,\n                          _ossl_old_des_key_schedule schedule);\nint _ossl_old_des_key_sched(_ossl_old_des_cblock *key,\n                            _ossl_old_des_key_schedule schedule);\nvoid _ossl_old_des_string_to_key(char *str, _ossl_old_des_cblock *key);\nvoid _ossl_old_des_string_to_2keys(char *str, _ossl_old_des_cblock *key1,\n                                   _ossl_old_des_cblock *key2);\nvoid _ossl_old_des_cfb64_encrypt(unsigned char *in, unsigned char *out,\n                                 long length,\n                                 _ossl_old_des_key_schedule schedule,\n                                 _ossl_old_des_cblock *ivec, int *num,\n                                 int enc);\nvoid _ossl_old_des_ofb64_encrypt(unsigned char *in, unsigned char *out,\n                                 long length,\n                                 _ossl_old_des_key_schedule schedule,\n                                 _ossl_old_des_cblock *ivec, int *num);\n\nvoid _ossl_096_des_random_seed(des_cblock *key);\n\n/*\n * The following definitions provide compatibility with the MIT Kerberos\n * library. The _ossl_old_des_key_schedule structure is not binary\n * compatible.\n */\n\n# define _KERBEROS_DES_H\n\n# define KRBDES_ENCRYPT DES_ENCRYPT\n# define KRBDES_DECRYPT DES_DECRYPT\n\n# ifdef KERBEROS\n#  define ENCRYPT DES_ENCRYPT\n#  define DECRYPT DES_DECRYPT\n# endif\n\n# ifndef NCOMPAT\n#  define C_Block des_cblock\n#  define Key_schedule des_key_schedule\n#  define KEY_SZ DES_KEY_SZ\n#  define string_to_key des_string_to_key\n#  define read_pw_string des_read_pw_string\n#  define random_key des_random_key\n#  define pcbc_encrypt des_pcbc_encrypt\n#  define set_key des_set_key\n#  define key_sched des_key_sched\n#  define ecb_encrypt des_ecb_encrypt\n#  define cbc_encrypt des_cbc_encrypt\n#  define ncbc_encrypt des_ncbc_encrypt\n#  define xcbc_encrypt des_xcbc_encrypt\n#  define cbc_cksum des_cbc_cksum\n#  define quad_cksum des_quad_cksum\n#  define check_parity des_check_key_parity\n# endif\n\n# define des_fixup_key_parity DES_fixup_key_parity\n\n#ifdef  __cplusplus\n}\n#endif\n\n/* for DES_read_pw_string et al */\n# include <openssl/ui_compat.h>\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/dh.h",
    "content": "/* crypto/dh/dh.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_DH_H\n# define HEADER_DH_H\n\n# include <openssl/e_os2.h>\n\n# ifdef OPENSSL_NO_DH\n#  error DH is disabled.\n# endif\n\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/ossl_typ.h>\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n# endif\n\n# ifndef OPENSSL_DH_MAX_MODULUS_BITS\n#  define OPENSSL_DH_MAX_MODULUS_BITS    10000\n# endif\n\n# define DH_FLAG_CACHE_MONT_P     0x01\n\n/*\n * new with 0.9.7h; the built-in DH\n * implementation now uses constant time\n * modular exponentiation for secret exponents\n * by default. This flag causes the\n * faster variable sliding window method to\n * be used for all exponents.\n */\n# define DH_FLAG_NO_EXP_CONSTTIME 0x02\n\n/*\n * If this flag is set the DH method is FIPS compliant and can be used in\n * FIPS mode. This is set in the validated module method. If an application\n * sets this flag in its own methods it is its reposibility to ensure the\n * result is compliant.\n */\n\n# define DH_FLAG_FIPS_METHOD                     0x0400\n\n/*\n * If this flag is set the operations normally disabled in FIPS mode are\n * permitted it is then the applications responsibility to ensure that the\n * usage is compliant.\n */\n\n# define DH_FLAG_NON_FIPS_ALLOW                  0x0400\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Already defined in ossl_typ.h */\n/* typedef struct dh_st DH; */\n/* typedef struct dh_method DH_METHOD; */\n\nstruct dh_method {\n    const char *name;\n    /* Methods here */\n    int (*generate_key) (DH *dh);\n    int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh);\n    /* Can be null */\n    int (*bn_mod_exp) (const DH *dh, BIGNUM *r, const BIGNUM *a,\n                       const BIGNUM *p, const BIGNUM *m, BN_CTX *ctx,\n                       BN_MONT_CTX *m_ctx);\n    int (*init) (DH *dh);\n    int (*finish) (DH *dh);\n    int flags;\n    char *app_data;\n    /* If this is non-NULL, it will be used to generate parameters */\n    int (*generate_params) (DH *dh, int prime_len, int generator,\n                            BN_GENCB *cb);\n};\n\nstruct dh_st {\n    /*\n     * This first argument is used to pick up errors when a DH is passed\n     * instead of a EVP_PKEY\n     */\n    int pad;\n    int version;\n    BIGNUM *p;\n    BIGNUM *g;\n    long length;                /* optional */\n    BIGNUM *pub_key;            /* g^x */\n    BIGNUM *priv_key;           /* x */\n    int flags;\n    BN_MONT_CTX *method_mont_p;\n    /* Place holders if we want to do X9.42 DH */\n    BIGNUM *q;\n    BIGNUM *j;\n    unsigned char *seed;\n    int seedlen;\n    BIGNUM *counter;\n    int references;\n    CRYPTO_EX_DATA ex_data;\n    const DH_METHOD *meth;\n    ENGINE *engine;\n};\n\n# define DH_GENERATOR_2          2\n/* #define DH_GENERATOR_3       3 */\n# define DH_GENERATOR_5          5\n\n/* DH_check error codes */\n# define DH_CHECK_P_NOT_PRIME            0x01\n# define DH_CHECK_P_NOT_SAFE_PRIME       0x02\n# define DH_UNABLE_TO_CHECK_GENERATOR    0x04\n# define DH_NOT_SUITABLE_GENERATOR       0x08\n# define DH_CHECK_Q_NOT_PRIME            0x10\n# define DH_CHECK_INVALID_Q_VALUE        0x20\n# define DH_CHECK_INVALID_J_VALUE        0x40\n\n/* DH_check_pub_key error codes */\n# define DH_CHECK_PUBKEY_TOO_SMALL       0x01\n# define DH_CHECK_PUBKEY_TOO_LARGE       0x02\n\n/*\n * primes p where (p-1)/2 is prime too are called \"safe\"; we define this for\n * backward compatibility:\n */\n# define DH_CHECK_P_NOT_STRONG_PRIME     DH_CHECK_P_NOT_SAFE_PRIME\n\n# define d2i_DHparams_fp(fp,x) (DH *)ASN1_d2i_fp((char *(*)())DH_new, \\\n                (char *(*)())d2i_DHparams,(fp),(unsigned char **)(x))\n# define i2d_DHparams_fp(fp,x) ASN1_i2d_fp(i2d_DHparams,(fp), \\\n                (unsigned char *)(x))\n# define d2i_DHparams_bio(bp,x) ASN1_d2i_bio_of(DH,DH_new,d2i_DHparams,bp,x)\n# define i2d_DHparams_bio(bp,x) ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x)\n\nDH *DHparams_dup(DH *);\n\nconst DH_METHOD *DH_OpenSSL(void);\n\nvoid DH_set_default_method(const DH_METHOD *meth);\nconst DH_METHOD *DH_get_default_method(void);\nint DH_set_method(DH *dh, const DH_METHOD *meth);\nDH *DH_new_method(ENGINE *engine);\n\nDH *DH_new(void);\nvoid DH_free(DH *dh);\nint DH_up_ref(DH *dh);\nint DH_size(const DH *dh);\nint DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                        CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nint DH_set_ex_data(DH *d, int idx, void *arg);\nvoid *DH_get_ex_data(DH *d, int idx);\n\n/* Deprecated version */\n# ifndef OPENSSL_NO_DEPRECATED\nDH *DH_generate_parameters(int prime_len, int generator,\n                           void (*callback) (int, int, void *), void *cb_arg);\n# endif                         /* !defined(OPENSSL_NO_DEPRECATED) */\n\n/* New version */\nint DH_generate_parameters_ex(DH *dh, int prime_len, int generator,\n                              BN_GENCB *cb);\n\nint DH_check(const DH *dh, int *codes);\nint DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes);\nint DH_generate_key(DH *dh);\nint DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh);\nint DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh);\nDH *d2i_DHparams(DH **a, const unsigned char **pp, long length);\nint i2d_DHparams(const DH *a, unsigned char **pp);\nDH *d2i_DHxparams(DH **a, const unsigned char **pp, long length);\nint i2d_DHxparams(const DH *a, unsigned char **pp);\n# ifndef OPENSSL_NO_FP_API\nint DHparams_print_fp(FILE *fp, const DH *x);\n# endif\n# ifndef OPENSSL_NO_BIO\nint DHparams_print(BIO *bp, const DH *x);\n# else\nint DHparams_print(char *bp, const DH *x);\n# endif\n\n/* RFC 5114 parameters */\nDH *DH_get_1024_160(void);\nDH *DH_get_2048_224(void);\nDH *DH_get_2048_256(void);\n\n/* RFC2631 KDF */\nint DH_KDF_X9_42(unsigned char *out, size_t outlen,\n                 const unsigned char *Z, size_t Zlen,\n                 ASN1_OBJECT *key_oid,\n                 const unsigned char *ukm, size_t ukmlen, const EVP_MD *md);\n\n# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL)\n\n# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL)\n\n# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL)\n\n# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL)\n\n# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_RFC5114, gen, NULL)\n\n# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \\\n                        EVP_PKEY_CTRL_DH_RFC5114, gen, NULL)\n\n# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL)\n\n# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL)\n\n# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid)\n\n# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid)\n\n# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md)\n\n# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd)\n\n# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL)\n\n# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                        EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen)\n\n# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p)\n\n# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p)\n\n# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN     (EVP_PKEY_ALG_CTRL + 1)\n# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR     (EVP_PKEY_ALG_CTRL + 2)\n# define EVP_PKEY_CTRL_DH_RFC5114                (EVP_PKEY_ALG_CTRL + 3)\n# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN  (EVP_PKEY_ALG_CTRL + 4)\n# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE          (EVP_PKEY_ALG_CTRL + 5)\n# define EVP_PKEY_CTRL_DH_KDF_TYPE               (EVP_PKEY_ALG_CTRL + 6)\n# define EVP_PKEY_CTRL_DH_KDF_MD                 (EVP_PKEY_ALG_CTRL + 7)\n# define EVP_PKEY_CTRL_GET_DH_KDF_MD             (EVP_PKEY_ALG_CTRL + 8)\n# define EVP_PKEY_CTRL_DH_KDF_OUTLEN             (EVP_PKEY_ALG_CTRL + 9)\n# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN         (EVP_PKEY_ALG_CTRL + 10)\n# define EVP_PKEY_CTRL_DH_KDF_UKM                (EVP_PKEY_ALG_CTRL + 11)\n# define EVP_PKEY_CTRL_GET_DH_KDF_UKM            (EVP_PKEY_ALG_CTRL + 12)\n# define EVP_PKEY_CTRL_DH_KDF_OID                (EVP_PKEY_ALG_CTRL + 13)\n# define EVP_PKEY_CTRL_GET_DH_KDF_OID            (EVP_PKEY_ALG_CTRL + 14)\n\n/* KDF types */\n# define EVP_PKEY_DH_KDF_NONE                            1\n# define EVP_PKEY_DH_KDF_X9_42                           2\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_DH_strings(void);\n\n/* Error codes for the DH functions. */\n\n/* Function codes. */\n# define DH_F_COMPUTE_KEY                                 102\n# define DH_F_DHPARAMS_PRINT_FP                           101\n# define DH_F_DH_BUILTIN_GENPARAMS                        106\n# define DH_F_DH_CMS_DECRYPT                              117\n# define DH_F_DH_CMS_SET_PEERKEY                          118\n# define DH_F_DH_CMS_SET_SHARED_INFO                      119\n# define DH_F_DH_COMPUTE_KEY                              114\n# define DH_F_DH_GENERATE_KEY                             115\n# define DH_F_DH_GENERATE_PARAMETERS_EX                   116\n# define DH_F_DH_NEW_METHOD                               105\n# define DH_F_DH_PARAM_DECODE                             107\n# define DH_F_DH_PRIV_DECODE                              110\n# define DH_F_DH_PRIV_ENCODE                              111\n# define DH_F_DH_PUB_DECODE                               108\n# define DH_F_DH_PUB_ENCODE                               109\n# define DH_F_DO_DH_PRINT                                 100\n# define DH_F_GENERATE_KEY                                103\n# define DH_F_GENERATE_PARAMETERS                         104\n# define DH_F_PKEY_DH_DERIVE                              112\n# define DH_F_PKEY_DH_KEYGEN                              113\n\n/* Reason codes. */\n# define DH_R_BAD_GENERATOR                               101\n# define DH_R_BN_DECODE_ERROR                             109\n# define DH_R_BN_ERROR                                    106\n# define DH_R_DECODE_ERROR                                104\n# define DH_R_INVALID_PUBKEY                              102\n# define DH_R_KDF_PARAMETER_ERROR                         112\n# define DH_R_KEYS_NOT_SET                                108\n# define DH_R_KEY_SIZE_TOO_SMALL                          110\n# define DH_R_MODULUS_TOO_LARGE                           103\n# define DH_R_NON_FIPS_METHOD                             111\n# define DH_R_NO_PARAMETERS_SET                           107\n# define DH_R_NO_PRIVATE_VALUE                            100\n# define DH_R_PARAMETER_ENCODING_ERROR                    105\n# define DH_R_PEER_KEY_ERROR                              113\n# define DH_R_SHARED_INFO_ERROR                           114\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/dsa.h",
    "content": "/* crypto/dsa/dsa.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n/*\n * The DSS routines are based on patches supplied by\n * Steven Schoch <schoch@sheba.arc.nasa.gov>.  He basically did the\n * work and I have just tweaked them a little to fit into my\n * stylistic vision for SSLeay :-) */\n\n#ifndef HEADER_DSA_H\n# define HEADER_DSA_H\n\n# include <openssl/e_os2.h>\n\n# ifdef OPENSSL_NO_DSA\n#  error DSA is disabled.\n# endif\n\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/crypto.h>\n# include <openssl/ossl_typ.h>\n\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n#  ifndef OPENSSL_NO_DH\n#   include <openssl/dh.h>\n#  endif\n# endif\n\n# ifndef OPENSSL_DSA_MAX_MODULUS_BITS\n#  define OPENSSL_DSA_MAX_MODULUS_BITS   10000\n# endif\n\n# define DSA_FLAG_CACHE_MONT_P   0x01\n/*\n * new with 0.9.7h; the built-in DSA implementation now uses constant time\n * modular exponentiation for secret exponents by default. This flag causes\n * the faster variable sliding window method to be used for all exponents.\n */\n# define DSA_FLAG_NO_EXP_CONSTTIME       0x02\n\n/*\n * If this flag is set the DSA method is FIPS compliant and can be used in\n * FIPS mode. This is set in the validated module method. If an application\n * sets this flag in its own methods it is its reposibility to ensure the\n * result is compliant.\n */\n\n# define DSA_FLAG_FIPS_METHOD                    0x0400\n\n/*\n * If this flag is set the operations normally disabled in FIPS mode are\n * permitted it is then the applications responsibility to ensure that the\n * usage is compliant.\n */\n\n# define DSA_FLAG_NON_FIPS_ALLOW                 0x0400\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Already defined in ossl_typ.h */\n/* typedef struct dsa_st DSA; */\n/* typedef struct dsa_method DSA_METHOD; */\n\ntypedef struct DSA_SIG_st {\n    BIGNUM *r;\n    BIGNUM *s;\n} DSA_SIG;\n\nstruct dsa_method {\n    const char *name;\n    DSA_SIG *(*dsa_do_sign) (const unsigned char *dgst, int dlen, DSA *dsa);\n    int (*dsa_sign_setup) (DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp,\n                           BIGNUM **rp);\n    int (*dsa_do_verify) (const unsigned char *dgst, int dgst_len,\n                          DSA_SIG *sig, DSA *dsa);\n    int (*dsa_mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,\n                        BIGNUM *a2, BIGNUM *p2, BIGNUM *m, BN_CTX *ctx,\n                        BN_MONT_CTX *in_mont);\n    /* Can be null */\n    int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p,\n                       const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);\n    int (*init) (DSA *dsa);\n    int (*finish) (DSA *dsa);\n    int flags;\n    char *app_data;\n    /* If this is non-NULL, it is used to generate DSA parameters */\n    int (*dsa_paramgen) (DSA *dsa, int bits,\n                         const unsigned char *seed, int seed_len,\n                         int *counter_ret, unsigned long *h_ret,\n                         BN_GENCB *cb);\n    /* If this is non-NULL, it is used to generate DSA keys */\n    int (*dsa_keygen) (DSA *dsa);\n};\n\nstruct dsa_st {\n    /*\n     * This first variable is used to pick up errors where a DSA is passed\n     * instead of of a EVP_PKEY\n     */\n    int pad;\n    long version;\n    int write_params;\n    BIGNUM *p;\n    BIGNUM *q;                  /* == 20 */\n    BIGNUM *g;\n    BIGNUM *pub_key;            /* y public key */\n    BIGNUM *priv_key;           /* x private key */\n    BIGNUM *kinv;               /* Signing pre-calc */\n    BIGNUM *r;                  /* Signing pre-calc */\n    int flags;\n    /* Normally used to cache montgomery values */\n    BN_MONT_CTX *method_mont_p;\n    int references;\n    CRYPTO_EX_DATA ex_data;\n    const DSA_METHOD *meth;\n    /* functional reference if 'meth' is ENGINE-provided */\n    ENGINE *engine;\n};\n\n# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \\\n                (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x))\n# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \\\n                (unsigned char *)(x))\n# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x)\n# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x)\n\nDSA *DSAparams_dup(DSA *x);\nDSA_SIG *DSA_SIG_new(void);\nvoid DSA_SIG_free(DSA_SIG *a);\nint i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp);\nDSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length);\n\nDSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);\nint DSA_do_verify(const unsigned char *dgst, int dgst_len,\n                  DSA_SIG *sig, DSA *dsa);\n\nconst DSA_METHOD *DSA_OpenSSL(void);\n\nvoid DSA_set_default_method(const DSA_METHOD *);\nconst DSA_METHOD *DSA_get_default_method(void);\nint DSA_set_method(DSA *dsa, const DSA_METHOD *);\n\nDSA *DSA_new(void);\nDSA *DSA_new_method(ENGINE *engine);\nvoid DSA_free(DSA *r);\n/* \"up\" the DSA object's reference count */\nint DSA_up_ref(DSA *r);\nint DSA_size(const DSA *);\n        /* next 4 return -1 on error */\nint DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp);\nint DSA_sign(int type, const unsigned char *dgst, int dlen,\n             unsigned char *sig, unsigned int *siglen, DSA *dsa);\nint DSA_verify(int type, const unsigned char *dgst, int dgst_len,\n               const unsigned char *sigbuf, int siglen, DSA *dsa);\nint DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                         CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nint DSA_set_ex_data(DSA *d, int idx, void *arg);\nvoid *DSA_get_ex_data(DSA *d, int idx);\n\nDSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length);\nDSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length);\nDSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length);\n\n/* Deprecated version */\n# ifndef OPENSSL_NO_DEPRECATED\nDSA *DSA_generate_parameters(int bits,\n                             unsigned char *seed, int seed_len,\n                             int *counter_ret, unsigned long *h_ret, void\n                              (*callback) (int, int, void *), void *cb_arg);\n# endif                         /* !defined(OPENSSL_NO_DEPRECATED) */\n\n/* New version */\nint DSA_generate_parameters_ex(DSA *dsa, int bits,\n                               const unsigned char *seed, int seed_len,\n                               int *counter_ret, unsigned long *h_ret,\n                               BN_GENCB *cb);\n\nint DSA_generate_key(DSA *a);\nint i2d_DSAPublicKey(const DSA *a, unsigned char **pp);\nint i2d_DSAPrivateKey(const DSA *a, unsigned char **pp);\nint i2d_DSAparams(const DSA *a, unsigned char **pp);\n\n# ifndef OPENSSL_NO_BIO\nint DSAparams_print(BIO *bp, const DSA *x);\nint DSA_print(BIO *bp, const DSA *x, int off);\n# endif\n# ifndef OPENSSL_NO_FP_API\nint DSAparams_print_fp(FILE *fp, const DSA *x);\nint DSA_print_fp(FILE *bp, const DSA *x, int off);\n# endif\n\n# define DSS_prime_checks 50\n/*\n * Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of\n * Rabin-Miller\n */\n# define DSA_is_prime(n, callback, cb_arg) \\\n        BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg)\n\n# ifndef OPENSSL_NO_DH\n/*\n * Convert DSA structure (key or just parameters) into DH structure (be\n * careful to avoid small subgroup attacks when using this!)\n */\nDH *DSA_dup_DH(const DSA *r);\n# endif\n\n# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \\\n                                EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL)\n\n# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS         (EVP_PKEY_ALG_CTRL + 1)\n# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS       (EVP_PKEY_ALG_CTRL + 2)\n# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD           (EVP_PKEY_ALG_CTRL + 3)\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_DSA_strings(void);\n\n/* Error codes for the DSA functions. */\n\n/* Function codes. */\n# define DSA_F_D2I_DSA_SIG                                110\n# define DSA_F_DO_DSA_PRINT                               104\n# define DSA_F_DSAPARAMS_PRINT                            100\n# define DSA_F_DSAPARAMS_PRINT_FP                         101\n# define DSA_F_DSA_BUILTIN_PARAMGEN2                      126\n# define DSA_F_DSA_DO_SIGN                                112\n# define DSA_F_DSA_DO_VERIFY                              113\n# define DSA_F_DSA_GENERATE_KEY                           124\n# define DSA_F_DSA_GENERATE_PARAMETERS_EX                 123\n# define DSA_F_DSA_NEW_METHOD                             103\n# define DSA_F_DSA_PARAM_DECODE                           119\n# define DSA_F_DSA_PRINT_FP                               105\n# define DSA_F_DSA_PRIV_DECODE                            115\n# define DSA_F_DSA_PRIV_ENCODE                            116\n# define DSA_F_DSA_PUB_DECODE                             117\n# define DSA_F_DSA_PUB_ENCODE                             118\n# define DSA_F_DSA_SIGN                                   106\n# define DSA_F_DSA_SIGN_SETUP                             107\n# define DSA_F_DSA_SIG_NEW                                109\n# define DSA_F_DSA_SIG_PRINT                              125\n# define DSA_F_DSA_VERIFY                                 108\n# define DSA_F_I2D_DSA_SIG                                111\n# define DSA_F_OLD_DSA_PRIV_DECODE                        122\n# define DSA_F_PKEY_DSA_CTRL                              120\n# define DSA_F_PKEY_DSA_KEYGEN                            121\n# define DSA_F_SIG_CB                                     114\n\n/* Reason codes. */\n# define DSA_R_BAD_Q_VALUE                                102\n# define DSA_R_BN_DECODE_ERROR                            108\n# define DSA_R_BN_ERROR                                   109\n# define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE                100\n# define DSA_R_DECODE_ERROR                               104\n# define DSA_R_INVALID_DIGEST_TYPE                        106\n# define DSA_R_INVALID_PARAMETERS                         112\n# define DSA_R_MISSING_PARAMETERS                         101\n# define DSA_R_MODULUS_TOO_LARGE                          103\n# define DSA_R_NEED_NEW_SETUP_VALUES                      110\n# define DSA_R_NON_FIPS_DSA_METHOD                        111\n# define DSA_R_NO_PARAMETERS_SET                          107\n# define DSA_R_PARAMETER_ENCODING_ERROR                   105\n# define DSA_R_Q_NOT_PRIME                                113\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/dso.h",
    "content": "/* dso.h -*- mode:C; c-file-style: \"eay\" -*- */\n/*\n * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project\n * 2000.\n */\n/* ====================================================================\n * Copyright (c) 2000 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_DSO_H\n# define HEADER_DSO_H\n\n# include <openssl/crypto.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* These values are used as commands to DSO_ctrl() */\n# define DSO_CTRL_GET_FLAGS      1\n# define DSO_CTRL_SET_FLAGS      2\n# define DSO_CTRL_OR_FLAGS       3\n\n/*\n * By default, DSO_load() will translate the provided filename into a form\n * typical for the platform (more specifically the DSO_METHOD) using the\n * dso_name_converter function of the method. Eg. win32 will transform \"blah\"\n * into \"blah.dll\", and dlfcn will transform it into \"libblah.so\". The\n * behaviour can be overriden by setting the name_converter callback in the\n * DSO object (using DSO_set_name_converter()). This callback could even\n * utilise the DSO_METHOD's converter too if it only wants to override\n * behaviour for one or two possible DSO methods. However, the following flag\n * can be set in a DSO to prevent *any* native name-translation at all - eg.\n * if the caller has prompted the user for a path to a driver library so the\n * filename should be interpreted as-is.\n */\n# define DSO_FLAG_NO_NAME_TRANSLATION            0x01\n/*\n * An extra flag to give if only the extension should be added as\n * translation.  This is obviously only of importance on Unix and other\n * operating systems where the translation also may prefix the name with\n * something, like 'lib', and ignored everywhere else. This flag is also\n * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time.\n */\n# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY      0x02\n\n/*\n * The following flag controls the translation of symbol names to upper case.\n * This is currently only being implemented for OpenVMS.\n */\n# define DSO_FLAG_UPCASE_SYMBOL                  0x10\n\n/*\n * This flag loads the library with public symbols. Meaning: The exported\n * symbols of this library are public to all libraries loaded after this\n * library. At the moment only implemented in unix.\n */\n# define DSO_FLAG_GLOBAL_SYMBOLS                 0x20\n\ntypedef void (*DSO_FUNC_TYPE) (void);\n\ntypedef struct dso_st DSO;\n\n/*\n * The function prototype used for method functions (or caller-provided\n * callbacks) that transform filenames. They are passed a DSO structure\n * pointer (or NULL if they are to be used independantly of a DSO object) and\n * a filename to transform. They should either return NULL (if there is an\n * error condition) or a newly allocated string containing the transformed\n * form that the caller will need to free with OPENSSL_free() when done.\n */\ntypedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *);\n/*\n * The function prototype used for method functions (or caller-provided\n * callbacks) that merge two file specifications. They are passed a DSO\n * structure pointer (or NULL if they are to be used independantly of a DSO\n * object) and two file specifications to merge. They should either return\n * NULL (if there is an error condition) or a newly allocated string\n * containing the result of merging that the caller will need to free with\n * OPENSSL_free() when done. Here, merging means that bits and pieces are\n * taken from each of the file specifications and added together in whatever\n * fashion that is sensible for the DSO method in question.  The only rule\n * that really applies is that if the two specification contain pieces of the\n * same type, the copy from the first string takes priority.  One could see\n * it as the first specification is the one given by the user and the second\n * being a bunch of defaults to add on if they're missing in the first.\n */\ntypedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *);\n\ntypedef struct dso_meth_st {\n    const char *name;\n    /*\n     * Loads a shared library, NB: new DSO_METHODs must ensure that a\n     * successful load populates the loaded_filename field, and likewise a\n     * successful unload OPENSSL_frees and NULLs it out.\n     */\n    int (*dso_load) (DSO *dso);\n    /* Unloads a shared library */\n    int (*dso_unload) (DSO *dso);\n    /* Binds a variable */\n    void *(*dso_bind_var) (DSO *dso, const char *symname);\n    /*\n     * Binds a function - assumes a return type of DSO_FUNC_TYPE. This should\n     * be cast to the real function prototype by the caller. Platforms that\n     * don't have compatible representations for different prototypes (this\n     * is possible within ANSI C) are highly unlikely to have shared\n     * libraries at all, let alone a DSO_METHOD implemented for them.\n     */\n    DSO_FUNC_TYPE (*dso_bind_func) (DSO *dso, const char *symname);\n/* I don't think this would actually be used in any circumstances. */\n# if 0\n    /* Unbinds a variable */\n    int (*dso_unbind_var) (DSO *dso, char *symname, void *symptr);\n    /* Unbinds a function */\n    int (*dso_unbind_func) (DSO *dso, char *symname, DSO_FUNC_TYPE symptr);\n# endif\n    /*\n     * The generic (yuck) \"ctrl()\" function. NB: Negative return values\n     * (rather than zero) indicate errors.\n     */\n    long (*dso_ctrl) (DSO *dso, int cmd, long larg, void *parg);\n    /*\n     * The default DSO_METHOD-specific function for converting filenames to a\n     * canonical native form.\n     */\n    DSO_NAME_CONVERTER_FUNC dso_name_converter;\n    /*\n     * The default DSO_METHOD-specific function for converting filenames to a\n     * canonical native form.\n     */\n    DSO_MERGER_FUNC dso_merger;\n    /* [De]Initialisation handlers. */\n    int (*init) (DSO *dso);\n    int (*finish) (DSO *dso);\n    /* Return pathname of the module containing location */\n    int (*pathbyaddr) (void *addr, char *path, int sz);\n    /* Perform global symbol lookup, i.e. among *all* modules */\n    void *(*globallookup) (const char *symname);\n} DSO_METHOD;\n\n/**********************************************************************/\n/* The low-level handle type used to refer to a loaded shared library */\n\nstruct dso_st {\n    DSO_METHOD *meth;\n    /*\n     * Standard dlopen uses a (void *). Win32 uses a HANDLE. VMS doesn't use\n     * anything but will need to cache the filename for use in the dso_bind\n     * handler. All in all, let each method control its own destiny.\n     * \"Handles\" and such go in a STACK.\n     */\n    STACK_OF(void) *meth_data;\n    int references;\n    int flags;\n    /*\n     * For use by applications etc ... use this for your bits'n'pieces, don't\n     * touch meth_data!\n     */\n    CRYPTO_EX_DATA ex_data;\n    /*\n     * If this callback function pointer is set to non-NULL, then it will be\n     * used in DSO_load() in place of meth->dso_name_converter. NB: This\n     * should normally set using DSO_set_name_converter().\n     */\n    DSO_NAME_CONVERTER_FUNC name_converter;\n    /*\n     * If this callback function pointer is set to non-NULL, then it will be\n     * used in DSO_load() in place of meth->dso_merger. NB: This should\n     * normally set using DSO_set_merger().\n     */\n    DSO_MERGER_FUNC merger;\n    /*\n     * This is populated with (a copy of) the platform-independant filename\n     * used for this DSO.\n     */\n    char *filename;\n    /*\n     * This is populated with (a copy of) the translated filename by which\n     * the DSO was actually loaded. It is NULL iff the DSO is not currently\n     * loaded. NB: This is here because the filename translation process may\n     * involve a callback being invoked more than once not only to convert to\n     * a platform-specific form, but also to try different filenames in the\n     * process of trying to perform a load. As such, this variable can be\n     * used to indicate (a) whether this DSO structure corresponds to a\n     * loaded library or not, and (b) the filename with which it was actually\n     * loaded.\n     */\n    char *loaded_filename;\n};\n\nDSO *DSO_new(void);\nDSO *DSO_new_method(DSO_METHOD *method);\nint DSO_free(DSO *dso);\nint DSO_flags(DSO *dso);\nint DSO_up_ref(DSO *dso);\nlong DSO_ctrl(DSO *dso, int cmd, long larg, void *parg);\n\n/*\n * This function sets the DSO's name_converter callback. If it is non-NULL,\n * then it will be used instead of the associated DSO_METHOD's function. If\n * oldcb is non-NULL then it is set to the function pointer value being\n * replaced. Return value is non-zero for success.\n */\nint DSO_set_name_converter(DSO *dso, DSO_NAME_CONVERTER_FUNC cb,\n                           DSO_NAME_CONVERTER_FUNC *oldcb);\n/*\n * These functions can be used to get/set the platform-independant filename\n * used for a DSO. NB: set will fail if the DSO is already loaded.\n */\nconst char *DSO_get_filename(DSO *dso);\nint DSO_set_filename(DSO *dso, const char *filename);\n/*\n * This function will invoke the DSO's name_converter callback to translate a\n * filename, or if the callback isn't set it will instead use the DSO_METHOD's\n * converter. If \"filename\" is NULL, the \"filename\" in the DSO itself will be\n * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is\n * simply duplicated. NB: This function is usually called from within a\n * DSO_METHOD during the processing of a DSO_load() call, and is exposed so\n * that caller-created DSO_METHODs can do the same thing. A non-NULL return\n * value will need to be OPENSSL_free()'d.\n */\nchar *DSO_convert_filename(DSO *dso, const char *filename);\n/*\n * This function will invoke the DSO's merger callback to merge two file\n * specifications, or if the callback isn't set it will instead use the\n * DSO_METHOD's merger.  A non-NULL return value will need to be\n * OPENSSL_free()'d.\n */\nchar *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2);\n/*\n * If the DSO is currently loaded, this returns the filename that it was\n * loaded under, otherwise it returns NULL. So it is also useful as a test as\n * to whether the DSO is currently loaded. NB: This will not necessarily\n * return the same value as DSO_convert_filename(dso, dso->filename), because\n * the DSO_METHOD's load function may have tried a variety of filenames (with\n * and/or without the aid of the converters) before settling on the one it\n * actually loaded.\n */\nconst char *DSO_get_loaded_filename(DSO *dso);\n\nvoid DSO_set_default_method(DSO_METHOD *meth);\nDSO_METHOD *DSO_get_default_method(void);\nDSO_METHOD *DSO_get_method(DSO *dso);\nDSO_METHOD *DSO_set_method(DSO *dso, DSO_METHOD *meth);\n\n/*\n * The all-singing all-dancing load function, you normally pass NULL for the\n * first and third parameters. Use DSO_up and DSO_free for subsequent\n * reference count handling. Any flags passed in will be set in the\n * constructed DSO after its init() function but before the load operation.\n * If 'dso' is non-NULL, 'flags' is ignored.\n */\nDSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags);\n\n/* This function binds to a variable inside a shared library. */\nvoid *DSO_bind_var(DSO *dso, const char *symname);\n\n/* This function binds to a function inside a shared library. */\nDSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname);\n\n/*\n * This method is the default, but will beg, borrow, or steal whatever method\n * should be the default on any particular platform (including\n * DSO_METH_null() if necessary).\n */\nDSO_METHOD *DSO_METHOD_openssl(void);\n\n/*\n * This method is defined for all platforms - if a platform has no DSO\n * support then this will be the only method!\n */\nDSO_METHOD *DSO_METHOD_null(void);\n\n/*\n * If DSO_DLFCN is defined, the standard dlfcn.h-style functions (dlopen,\n * dlclose, dlsym, etc) will be used and incorporated into this method. If\n * not, this method will return NULL.\n */\nDSO_METHOD *DSO_METHOD_dlfcn(void);\n\n/*\n * If DSO_DL is defined, the standard dl.h-style functions (shl_load,\n * shl_unload, shl_findsym, etc) will be used and incorporated into this\n * method. If not, this method will return NULL.\n */\nDSO_METHOD *DSO_METHOD_dl(void);\n\n/* If WIN32 is defined, use DLLs. If not, return NULL. */\nDSO_METHOD *DSO_METHOD_win32(void);\n\n/* If VMS is defined, use shared images. If not, return NULL. */\nDSO_METHOD *DSO_METHOD_vms(void);\n\n/*\n * This function writes null-terminated pathname of DSO module containing\n * 'addr' into 'sz' large caller-provided 'path' and returns the number of\n * characters [including trailing zero] written to it. If 'sz' is 0 or\n * negative, 'path' is ignored and required amount of charachers [including\n * trailing zero] to accomodate pathname is returned. If 'addr' is NULL, then\n * pathname of cryptolib itself is returned. Negative or zero return value\n * denotes error.\n */\nint DSO_pathbyaddr(void *addr, char *path, int sz);\n\n/*\n * This function should be used with caution! It looks up symbols in *all*\n * loaded modules and if module gets unloaded by somebody else attempt to\n * dereference the pointer is doomed to have fatal consequences. Primary\n * usage for this function is to probe *core* system functionality, e.g.\n * check if getnameinfo(3) is available at run-time without bothering about\n * OS-specific details such as libc.so.versioning or where does it actually\n * reside: in libc itself or libsocket.\n */\nvoid *DSO_global_lookup(const char *name);\n\n/* If BeOS is defined, use shared images. If not, return NULL. */\nDSO_METHOD *DSO_METHOD_beos(void);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_DSO_strings(void);\n\n/* Error codes for the DSO functions. */\n\n/* Function codes. */\n# define DSO_F_BEOS_BIND_FUNC                             144\n# define DSO_F_BEOS_BIND_VAR                              145\n# define DSO_F_BEOS_LOAD                                  146\n# define DSO_F_BEOS_NAME_CONVERTER                        147\n# define DSO_F_BEOS_UNLOAD                                148\n# define DSO_F_DLFCN_BIND_FUNC                            100\n# define DSO_F_DLFCN_BIND_VAR                             101\n# define DSO_F_DLFCN_LOAD                                 102\n# define DSO_F_DLFCN_MERGER                               130\n# define DSO_F_DLFCN_NAME_CONVERTER                       123\n# define DSO_F_DLFCN_UNLOAD                               103\n# define DSO_F_DL_BIND_FUNC                               104\n# define DSO_F_DL_BIND_VAR                                105\n# define DSO_F_DL_LOAD                                    106\n# define DSO_F_DL_MERGER                                  131\n# define DSO_F_DL_NAME_CONVERTER                          124\n# define DSO_F_DL_UNLOAD                                  107\n# define DSO_F_DSO_BIND_FUNC                              108\n# define DSO_F_DSO_BIND_VAR                               109\n# define DSO_F_DSO_CONVERT_FILENAME                       126\n# define DSO_F_DSO_CTRL                                   110\n# define DSO_F_DSO_FREE                                   111\n# define DSO_F_DSO_GET_FILENAME                           127\n# define DSO_F_DSO_GET_LOADED_FILENAME                    128\n# define DSO_F_DSO_GLOBAL_LOOKUP                          139\n# define DSO_F_DSO_LOAD                                   112\n# define DSO_F_DSO_MERGE                                  132\n# define DSO_F_DSO_NEW_METHOD                             113\n# define DSO_F_DSO_PATHBYADDR                             140\n# define DSO_F_DSO_SET_FILENAME                           129\n# define DSO_F_DSO_SET_NAME_CONVERTER                     122\n# define DSO_F_DSO_UP_REF                                 114\n# define DSO_F_GLOBAL_LOOKUP_FUNC                         138\n# define DSO_F_PATHBYADDR                                 137\n# define DSO_F_VMS_BIND_SYM                               115\n# define DSO_F_VMS_LOAD                                   116\n# define DSO_F_VMS_MERGER                                 133\n# define DSO_F_VMS_UNLOAD                                 117\n# define DSO_F_WIN32_BIND_FUNC                            118\n# define DSO_F_WIN32_BIND_VAR                             119\n# define DSO_F_WIN32_GLOBALLOOKUP                         142\n# define DSO_F_WIN32_GLOBALLOOKUP_FUNC                    143\n# define DSO_F_WIN32_JOINER                               135\n# define DSO_F_WIN32_LOAD                                 120\n# define DSO_F_WIN32_MERGER                               134\n# define DSO_F_WIN32_NAME_CONVERTER                       125\n# define DSO_F_WIN32_PATHBYADDR                           141\n# define DSO_F_WIN32_SPLITTER                             136\n# define DSO_F_WIN32_UNLOAD                               121\n\n/* Reason codes. */\n# define DSO_R_CTRL_FAILED                                100\n# define DSO_R_DSO_ALREADY_LOADED                         110\n# define DSO_R_EMPTY_FILE_STRUCTURE                       113\n# define DSO_R_FAILURE                                    114\n# define DSO_R_FILENAME_TOO_BIG                           101\n# define DSO_R_FINISH_FAILED                              102\n# define DSO_R_INCORRECT_FILE_SYNTAX                      115\n# define DSO_R_LOAD_FAILED                                103\n# define DSO_R_NAME_TRANSLATION_FAILED                    109\n# define DSO_R_NO_FILENAME                                111\n# define DSO_R_NO_FILE_SPECIFICATION                      116\n# define DSO_R_NULL_HANDLE                                104\n# define DSO_R_SET_FILENAME_FAILED                        112\n# define DSO_R_STACK_ERROR                                105\n# define DSO_R_SYM_FAILURE                                106\n# define DSO_R_UNLOAD_FAILED                              107\n# define DSO_R_UNSUPPORTED                                108\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/dtls1.h",
    "content": "/* ssl/dtls1.h */\n/*\n * DTLS implementation written by Nagendra Modadugu\n * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.\n */\n/* ====================================================================\n * Copyright (c) 1999-2005 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_DTLS1_H\n# define HEADER_DTLS1_H\n\n# include <openssl/buffer.h>\n# include <openssl/pqueue.h>\n# ifdef OPENSSL_SYS_VMS\n#  include <resource.h>\n#  include <sys/timeb.h>\n# endif\n# ifdef OPENSSL_SYS_WIN32\n/* Needed for struct timeval */\n#  include <winsock.h>\n# elif defined(OPENSSL_SYS_NETWARE) && !defined(_WINSOCK2API_)\n#  include <sys/timeval.h>\n# else\n#  if defined(OPENSSL_SYS_VXWORKS)\n#   include <sys/times.h>\n#  else\n#   include <sys/time.h>\n#  endif\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define DTLS1_VERSION                   0xFEFF\n# define DTLS1_2_VERSION                 0xFEFD\n# define DTLS_MAX_VERSION                DTLS1_2_VERSION\n# define DTLS1_VERSION_MAJOR             0xFE\n\n# define DTLS1_BAD_VER                   0x0100\n\n/* Special value for method supporting multiple versions */\n# define DTLS_ANY_VERSION                0x1FFFF\n\n# if 0\n/* this alert description is not specified anywhere... */\n#  define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE    110\n# endif\n\n/* lengths of messages */\n# define DTLS1_COOKIE_LENGTH                     256\n\n# define DTLS1_RT_HEADER_LENGTH                  13\n\n# define DTLS1_HM_HEADER_LENGTH                  12\n\n# define DTLS1_HM_BAD_FRAGMENT                   -2\n# define DTLS1_HM_FRAGMENT_RETRY                 -3\n\n# define DTLS1_CCS_HEADER_LENGTH                  1\n\n# ifdef DTLS1_AD_MISSING_HANDSHAKE_MESSAGE\n#  define DTLS1_AL_HEADER_LENGTH                   7\n# else\n#  define DTLS1_AL_HEADER_LENGTH                   2\n# endif\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\n#  ifndef OPENSSL_NO_SCTP\n#   define DTLS1_SCTP_AUTH_LABEL   \"EXPORTER_DTLS_OVER_SCTP\"\n#  endif\n\n/* Max MTU overhead we know about so far is 40 for IPv6 + 8 for UDP */\n#  define DTLS1_MAX_MTU_OVERHEAD                   48\n\ntypedef struct dtls1_bitmap_st {\n    unsigned long map;          /* track 32 packets on 32-bit systems and 64\n                                 * - on 64-bit systems */\n    unsigned char max_seq_num[8]; /* max record number seen so far, 64-bit\n                                   * value in big-endian encoding */\n} DTLS1_BITMAP;\n\nstruct dtls1_retransmit_state {\n    EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */\n    EVP_MD_CTX *write_hash;     /* used for mac generation */\n#  ifndef OPENSSL_NO_COMP\n    COMP_CTX *compress;         /* compression */\n#  else\n    char *compress;\n#  endif\n    SSL_SESSION *session;\n    unsigned short epoch;\n};\n\nstruct hm_header_st {\n    unsigned char type;\n    unsigned long msg_len;\n    unsigned short seq;\n    unsigned long frag_off;\n    unsigned long frag_len;\n    unsigned int is_ccs;\n    struct dtls1_retransmit_state saved_retransmit_state;\n};\n\nstruct ccs_header_st {\n    unsigned char type;\n    unsigned short seq;\n};\n\nstruct dtls1_timeout_st {\n    /* Number of read timeouts so far */\n    unsigned int read_timeouts;\n    /* Number of write timeouts so far */\n    unsigned int write_timeouts;\n    /* Number of alerts received so far */\n    unsigned int num_alerts;\n};\n\ntypedef struct record_pqueue_st {\n    unsigned short epoch;\n    pqueue q;\n} record_pqueue;\n\ntypedef struct hm_fragment_st {\n    struct hm_header_st msg_header;\n    unsigned char *fragment;\n    unsigned char *reassembly;\n} hm_fragment;\n\ntypedef struct dtls1_state_st {\n    unsigned int send_cookie;\n    unsigned char cookie[DTLS1_COOKIE_LENGTH];\n    unsigned char rcvd_cookie[DTLS1_COOKIE_LENGTH];\n    unsigned int cookie_len;\n    /*\n     * The current data and handshake epoch.  This is initially\n     * undefined, and starts at zero once the initial handshake is\n     * completed\n     */\n    unsigned short r_epoch;\n    unsigned short w_epoch;\n    /* records being received in the current epoch */\n    DTLS1_BITMAP bitmap;\n    /* renegotiation starts a new set of sequence numbers */\n    DTLS1_BITMAP next_bitmap;\n    /* handshake message numbers */\n    unsigned short handshake_write_seq;\n    unsigned short next_handshake_write_seq;\n    unsigned short handshake_read_seq;\n    /* save last sequence number for retransmissions */\n    unsigned char last_write_sequence[8];\n    /* Received handshake records (processed and unprocessed) */\n    record_pqueue unprocessed_rcds;\n    record_pqueue processed_rcds;\n    /* Buffered handshake messages */\n    pqueue buffered_messages;\n    /* Buffered (sent) handshake records */\n    pqueue sent_messages;\n    /*\n     * Buffered application records. Only for records between CCS and\n     * Finished to prevent either protocol violation or unnecessary message\n     * loss.\n     */\n    record_pqueue buffered_app_data;\n    /* Is set when listening for new connections with dtls1_listen() */\n    unsigned int listen;\n    unsigned int link_mtu;      /* max on-the-wire DTLS packet size */\n    unsigned int mtu;           /* max DTLS packet size */\n    struct hm_header_st w_msg_hdr;\n    struct hm_header_st r_msg_hdr;\n    struct dtls1_timeout_st timeout;\n    /*\n     * Indicates when the last handshake msg or heartbeat sent will timeout\n     */\n    struct timeval next_timeout;\n    /* Timeout duration */\n    unsigned short timeout_duration;\n    /*\n     * storage for Alert/Handshake protocol data received but not yet\n     * processed by ssl3_read_bytes:\n     */\n    unsigned char alert_fragment[DTLS1_AL_HEADER_LENGTH];\n    unsigned int alert_fragment_len;\n    unsigned char handshake_fragment[DTLS1_HM_HEADER_LENGTH];\n    unsigned int handshake_fragment_len;\n    unsigned int retransmitting;\n    /*\n     * Set when the handshake is ready to process peer's ChangeCipherSpec message.\n     * Cleared after the message has been processed.\n     */\n    unsigned int change_cipher_spec_ok;\n#  ifndef OPENSSL_NO_SCTP\n    /* used when SSL_ST_XX_FLUSH is entered */\n    int next_state;\n    int shutdown_received;\n#  endif\n} DTLS1_STATE;\n\ntypedef struct dtls1_record_data_st {\n    unsigned char *packet;\n    unsigned int packet_length;\n    SSL3_BUFFER rbuf;\n    SSL3_RECORD rrec;\n#  ifndef OPENSSL_NO_SCTP\n    struct bio_dgram_sctp_rcvinfo recordinfo;\n#  endif\n} DTLS1_RECORD_DATA;\n\n# endif\n\n/* Timeout multipliers (timeout slice is defined in apps/timeouts.h */\n# define DTLS1_TMO_READ_COUNT                      2\n# define DTLS1_TMO_WRITE_COUNT                     2\n\n# define DTLS1_TMO_ALERT_COUNT                     12\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/e_os2.h",
    "content": "/* e_os2.h */\n/* ====================================================================\n * Copyright (c) 1998-2000 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#include \"openssl/opensslconf.h\"\n\n#ifndef HEADER_E_OS2_H\n# define HEADER_E_OS2_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/******************************************************************************\n * Detect operating systems.  This probably needs completing.\n * The result is that at least one OPENSSL_SYS_os macro should be defined.\n * However, if none is defined, Unix is assumed.\n **/\n\n# define OPENSSL_SYS_UNIX\n\n/* ---------------------- Macintosh, before MacOS X ----------------------- */\n# if defined(__MWERKS__) && defined(macintosh) || defined(OPENSSL_SYSNAME_MAC)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_MACINTOSH_CLASSIC\n# endif\n\n/* ---------------------- NetWare ----------------------------------------- */\n# if defined(NETWARE) || defined(OPENSSL_SYSNAME_NETWARE)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_NETWARE\n# endif\n\n/* --------------------- Microsoft operating systems ---------------------- */\n\n/*\n * Note that MSDOS actually denotes 32-bit environments running on top of\n * MS-DOS, such as DJGPP one.\n */\n# if defined(OPENSSL_SYSNAME_MSDOS)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_MSDOS\n# endif\n\n/*\n * For 32 bit environment, there seems to be the CygWin environment and then\n * all the others that try to do the same thing Microsoft does...\n */\n# if defined(OPENSSL_SYSNAME_UWIN)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_WIN32_UWIN\n# else\n#  if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN)\n#   undef OPENSSL_SYS_UNIX\n#   define OPENSSL_SYS_WIN32_CYGWIN\n#  else\n#   if defined(_WIN32) || defined(OPENSSL_SYSNAME_WIN32)\n#    undef OPENSSL_SYS_UNIX\n#    define OPENSSL_SYS_WIN32\n#   endif\n#   if defined(OPENSSL_SYSNAME_WINNT)\n#    undef OPENSSL_SYS_UNIX\n#    define OPENSSL_SYS_WINNT\n#   endif\n#   if defined(OPENSSL_SYSNAME_WINCE)\n#    undef OPENSSL_SYS_UNIX\n#    define OPENSSL_SYS_WINCE\n#   endif\n#  endif\n# endif\n\n/* Anything that tries to look like Microsoft is \"Windows\" */\n# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_WINDOWS\n#  ifndef OPENSSL_SYS_MSDOS\n#   define OPENSSL_SYS_MSDOS\n#  endif\n# endif\n\n/*\n * DLL settings.  This part is a bit tough, because it's up to the\n * application implementor how he or she will link the application, so it\n * requires some macro to be used.\n */\n# ifdef OPENSSL_SYS_WINDOWS\n#  ifndef OPENSSL_OPT_WINDLL\n#   if defined(_WINDLL)         /* This is used when building OpenSSL to\n                                 * indicate that DLL linkage should be used */\n#    define OPENSSL_OPT_WINDLL\n#   endif\n#  endif\n# endif\n\n/* ------------------------------- OpenVMS -------------------------------- */\n# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYSNAME_VMS)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_VMS\n#  if defined(__DECC)\n#   define OPENSSL_SYS_VMS_DECC\n#  elif defined(__DECCXX)\n#   define OPENSSL_SYS_VMS_DECC\n#   define OPENSSL_SYS_VMS_DECCXX\n#  else\n#   define OPENSSL_SYS_VMS_NODECC\n#  endif\n# endif\n\n/* -------------------------------- OS/2 ---------------------------------- */\n# if defined(__EMX__) || defined(__OS2__)\n#  undef OPENSSL_SYS_UNIX\n#  define OPENSSL_SYS_OS2\n# endif\n\n/* -------------------------------- Unix ---------------------------------- */\n# ifdef OPENSSL_SYS_UNIX\n#  if defined(linux) || defined(__linux__) || defined(OPENSSL_SYSNAME_LINUX)\n#   define OPENSSL_SYS_LINUX\n#  endif\n#  ifdef OPENSSL_SYSNAME_MPE\n#   define OPENSSL_SYS_MPE\n#  endif\n#  ifdef OPENSSL_SYSNAME_SNI\n#   define OPENSSL_SYS_SNI\n#  endif\n#  ifdef OPENSSL_SYSNAME_ULTRASPARC\n#   define OPENSSL_SYS_ULTRASPARC\n#  endif\n#  ifdef OPENSSL_SYSNAME_NEWS4\n#   define OPENSSL_SYS_NEWS4\n#  endif\n#  ifdef OPENSSL_SYSNAME_MACOSX\n#   define OPENSSL_SYS_MACOSX\n#  endif\n#  ifdef OPENSSL_SYSNAME_MACOSX_RHAPSODY\n#   define OPENSSL_SYS_MACOSX_RHAPSODY\n#   define OPENSSL_SYS_MACOSX\n#  endif\n#  ifdef OPENSSL_SYSNAME_SUNOS\n#   define OPENSSL_SYS_SUNOS\n#  endif\n#  if defined(_CRAY) || defined(OPENSSL_SYSNAME_CRAY)\n#   define OPENSSL_SYS_CRAY\n#  endif\n#  if defined(_AIX) || defined(OPENSSL_SYSNAME_AIX)\n#   define OPENSSL_SYS_AIX\n#  endif\n# endif\n\n/* -------------------------------- VOS ----------------------------------- */\n# if defined(__VOS__) || defined(OPENSSL_SYSNAME_VOS)\n#  define OPENSSL_SYS_VOS\n#  ifdef __HPPA__\n#   define OPENSSL_SYS_VOS_HPPA\n#  endif\n#  ifdef __IA32__\n#   define OPENSSL_SYS_VOS_IA32\n#  endif\n# endif\n\n/* ------------------------------ VxWorks --------------------------------- */\n# ifdef OPENSSL_SYSNAME_VXWORKS\n#  define OPENSSL_SYS_VXWORKS\n# endif\n\n/* -------------------------------- BeOS ---------------------------------- */\n# if defined(__BEOS__)\n#  define OPENSSL_SYS_BEOS\n#  include <sys/socket.h>\n#  if defined(BONE_VERSION)\n#   define OPENSSL_SYS_BEOS_BONE\n#  else\n#   define OPENSSL_SYS_BEOS_R5\n#  endif\n# endif\n\n/**\n * That's it for OS-specific stuff\n *****************************************************************************/\n\n/* Specials for I/O an exit */\n# ifdef OPENSSL_SYS_MSDOS\n#  define OPENSSL_UNISTD_IO <io.h>\n#  define OPENSSL_DECLARE_EXIT extern void exit(int);\n# else\n#  define OPENSSL_UNISTD_IO OPENSSL_UNISTD\n#  define OPENSSL_DECLARE_EXIT  /* declared in unistd.h */\n# endif\n\n/*-\n * Definitions of OPENSSL_GLOBAL and OPENSSL_EXTERN, to define and declare\n * certain global symbols that, with some compilers under VMS, have to be\n * defined and declared explicitely with globaldef and globalref.\n * Definitions of OPENSSL_EXPORT and OPENSSL_IMPORT, to define and declare\n * DLL exports and imports for compilers under Win32.  These are a little\n * more complicated to use.  Basically, for any library that exports some\n * global variables, the following code must be present in the header file\n * that declares them, before OPENSSL_EXTERN is used:\n *\n * #ifdef SOME_BUILD_FLAG_MACRO\n * # undef OPENSSL_EXTERN\n * # define OPENSSL_EXTERN OPENSSL_EXPORT\n * #endif\n *\n * The default is to have OPENSSL_EXPORT, OPENSSL_IMPORT and OPENSSL_GLOBAL\n * have some generally sensible values, and for OPENSSL_EXTERN to have the\n * value OPENSSL_IMPORT.\n */\n\n# if defined(OPENSSL_SYS_VMS_NODECC)\n#  define OPENSSL_EXPORT globalref\n#  define OPENSSL_IMPORT globalref\n#  define OPENSSL_GLOBAL globaldef\n# elif defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL)\n#  define OPENSSL_EXPORT extern __declspec(dllexport)\n#  define OPENSSL_IMPORT extern __declspec(dllimport)\n#  define OPENSSL_GLOBAL\n# else\n#  define OPENSSL_EXPORT extern\n#  define OPENSSL_IMPORT extern\n#  define OPENSSL_GLOBAL\n# endif\n# define OPENSSL_EXTERN OPENSSL_IMPORT\n\n/*-\n * Macros to allow global variables to be reached through function calls when\n * required (if a shared library version requires it, for example.\n * The way it's done allows definitions like this:\n *\n *      // in foobar.c\n *      OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0)\n *      // in foobar.h\n *      OPENSSL_DECLARE_GLOBAL(int,foobar);\n *      #define foobar OPENSSL_GLOBAL_REF(foobar)\n */\n# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION\n#  define OPENSSL_IMPLEMENT_GLOBAL(type,name,value)                      \\\n        type *_shadow_##name(void)                                      \\\n        { static type _hide_##name=value; return &_hide_##name; }\n#  define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void)\n#  define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name()))\n# else\n#  define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) OPENSSL_GLOBAL type _shadow_##name=value;\n#  define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name\n#  define OPENSSL_GLOBAL_REF(name) _shadow_##name\n# endif\n\n# if defined(OPENSSL_SYS_MACINTOSH_CLASSIC) && macintosh==1 && !defined(MAC_OS_GUSI_SOURCE)\n#  define ossl_ssize_t long\n# endif\n\n# ifdef OPENSSL_SYS_MSDOS\n#  define ossl_ssize_t long\n# endif\n\n# if defined(NeXT) || defined(OPENSSL_SYS_NEWS4) || defined(OPENSSL_SYS_SUNOS)\n#  define ssize_t int\n# endif\n\n# if defined(__ultrix) && !defined(ssize_t)\n#  define ossl_ssize_t int\n# endif\n\n# ifndef ossl_ssize_t\n#  define ossl_ssize_t ssize_t\n# endif\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ebcdic.h",
    "content": "/* crypto/ebcdic.h */\n\n#ifndef HEADER_EBCDIC_H\n# define HEADER_EBCDIC_H\n\n# include <sys/types.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Avoid name clashes with other applications */\n# define os_toascii   _openssl_os_toascii\n# define os_toebcdic  _openssl_os_toebcdic\n# define ebcdic2ascii _openssl_ebcdic2ascii\n# define ascii2ebcdic _openssl_ascii2ebcdic\n\nextern const unsigned char os_toascii[256];\nextern const unsigned char os_toebcdic[256];\nvoid *ebcdic2ascii(void *dest, const void *srce, size_t count);\nvoid *ascii2ebcdic(void *dest, const void *srce, size_t count);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ec.h",
    "content": "/* crypto/ec/ec.h */\n/*\n * Originally written by Bodo Moeller for the OpenSSL project.\n */\n/**\n * \\file crypto/ec/ec.h Include file for the OpenSSL EC functions\n * \\author Originally written by Bodo Moeller for the OpenSSL project\n */\n/* ====================================================================\n * Copyright (c) 1998-2005 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n *\n * Portions of the attached software (\"Contribution\") are developed by\n * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\n *\n * The Contribution is licensed pursuant to the OpenSSL open source\n * license provided above.\n *\n * The elliptic curve binary polynomial software is originally written by\n * Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.\n *\n */\n\n#ifndef HEADER_EC_H\n# define HEADER_EC_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_EC\n#  error EC is disabled.\n# endif\n\n# include <openssl/asn1.h>\n# include <openssl/symhacks.h>\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n# endif\n\n# ifdef  __cplusplus\nextern \"C\" {\n# elif defined(__SUNPRO_C)\n#  if __SUNPRO_C >= 0x520\n#   pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE)\n#  endif\n# endif\n\n# ifndef OPENSSL_ECC_MAX_FIELD_BITS\n#  define OPENSSL_ECC_MAX_FIELD_BITS 661\n# endif\n\n/** Enum for the point conversion form as defined in X9.62 (ECDSA)\n *  for the encoding of a elliptic curve point (x,y) */\ntypedef enum {\n        /** the point is encoded as z||x, where the octet z specifies\n         *  which solution of the quadratic equation y is  */\n    POINT_CONVERSION_COMPRESSED = 2,\n        /** the point is encoded as z||x||y, where z is the octet 0x02  */\n    POINT_CONVERSION_UNCOMPRESSED = 4,\n        /** the point is encoded as z||x||y, where the octet z specifies\n         *  which solution of the quadratic equation y is  */\n    POINT_CONVERSION_HYBRID = 6\n} point_conversion_form_t;\n\ntypedef struct ec_method_st EC_METHOD;\n\ntypedef struct ec_group_st\n    /*-\n     EC_METHOD *meth;\n     -- field definition\n     -- curve coefficients\n     -- optional generator with associated information (order, cofactor)\n     -- optional extra data (precomputed table for fast computation of multiples of generator)\n     -- ASN1 stuff\n    */\n    EC_GROUP;\n\ntypedef struct ec_point_st EC_POINT;\n\n/********************************************************************/\n/*               EC_METHODs for curves over GF(p)                   */\n/********************************************************************/\n\n/** Returns the basic GFp ec methods which provides the basis for the\n *  optimized methods.\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_simple_method(void);\n\n/** Returns GFp methods using montgomery multiplication.\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_mont_method(void);\n\n/** Returns GFp methods using optimized methods for NIST recommended curves\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_nist_method(void);\n\n# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128\n/** Returns 64-bit optimized methods for nistp224\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_nistp224_method(void);\n\n/** Returns 64-bit optimized methods for nistp256\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_nistp256_method(void);\n\n/** Returns 64-bit optimized methods for nistp521\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GFp_nistp521_method(void);\n# endif\n\n# ifndef OPENSSL_NO_EC2M\n/********************************************************************/\n/*           EC_METHOD for curves over GF(2^m)                      */\n/********************************************************************/\n\n/** Returns the basic GF2m ec method\n *  \\return  EC_METHOD object\n */\nconst EC_METHOD *EC_GF2m_simple_method(void);\n\n# endif\n\n/********************************************************************/\n/*                   EC_GROUP functions                             */\n/********************************************************************/\n\n/** Creates a new EC_GROUP object\n *  \\param   meth  EC_METHOD to use\n *  \\return  newly created EC_GROUP object or NULL in case of an error.\n */\nEC_GROUP *EC_GROUP_new(const EC_METHOD *meth);\n\n/** Frees a EC_GROUP object\n *  \\param  group  EC_GROUP object to be freed.\n */\nvoid EC_GROUP_free(EC_GROUP *group);\n\n/** Clears and frees a EC_GROUP object\n *  \\param  group  EC_GROUP object to be cleared and freed.\n */\nvoid EC_GROUP_clear_free(EC_GROUP *group);\n\n/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD.\n *  \\param  dst  destination EC_GROUP object\n *  \\param  src  source EC_GROUP object\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);\n\n/** Creates a new EC_GROUP object and copies the copies the content\n *  form src to the newly created EC_KEY object\n *  \\param  src  source EC_GROUP object\n *  \\return newly created EC_GROUP object or NULL in case of an error.\n */\nEC_GROUP *EC_GROUP_dup(const EC_GROUP *src);\n\n/** Returns the EC_METHOD of the EC_GROUP object.\n *  \\param  group  EC_GROUP object\n *  \\return EC_METHOD used in this EC_GROUP object.\n */\nconst EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);\n\n/** Returns the field type of the EC_METHOD.\n *  \\param  meth  EC_METHOD object\n *  \\return NID of the underlying field type OID.\n */\nint EC_METHOD_get_field_type(const EC_METHOD *meth);\n\n/** Sets the generator and it's order/cofactor of a EC_GROUP object.\n *  \\param  group      EC_GROUP object\n *  \\param  generator  EC_POINT object with the generator.\n *  \\param  order      the order of the group generated by the generator.\n *  \\param  cofactor   the index of the sub-group generated by the generator\n *                     in the group of all points on the elliptic curve.\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,\n                           const BIGNUM *order, const BIGNUM *cofactor);\n\n/** Returns the generator of a EC_GROUP object.\n *  \\param  group  EC_GROUP object\n *  \\return the currently used generator (possibly NULL).\n */\nconst EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);\n\n/** Returns the montgomery data for order(Generator)\n *  \\param  group  EC_GROUP object\n *  \\return the currently used generator (possibly NULL).\n*/\nBN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group);\n\n/** Gets the order of a EC_GROUP\n *  \\param  group  EC_GROUP object\n *  \\param  order  BIGNUM to which the order is copied\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);\n\n/** Gets the cofactor of a EC_GROUP\n *  \\param  group     EC_GROUP object\n *  \\param  cofactor  BIGNUM to which the cofactor is copied\n *  \\param  ctx       BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor,\n                          BN_CTX *ctx);\n\n/** Sets the name of a EC_GROUP object\n *  \\param  group  EC_GROUP object\n *  \\param  nid    NID of the curve name OID\n */\nvoid EC_GROUP_set_curve_name(EC_GROUP *group, int nid);\n\n/** Returns the curve name of a EC_GROUP object\n *  \\param  group  EC_GROUP object\n *  \\return NID of the curve name OID or 0 if not set.\n */\nint EC_GROUP_get_curve_name(const EC_GROUP *group);\n\nvoid EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);\nint EC_GROUP_get_asn1_flag(const EC_GROUP *group);\n\nvoid EC_GROUP_set_point_conversion_form(EC_GROUP *group,\n                                        point_conversion_form_t form);\npoint_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);\n\nunsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);\nsize_t EC_GROUP_get_seed_len(const EC_GROUP *);\nsize_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);\n\n/** Sets the parameter of a ec over GFp defined by y^2 = x^3 + a*x + b\n *  \\param  group  EC_GROUP object\n *  \\param  p      BIGNUM with the prime number\n *  \\param  a      BIGNUM with parameter a of the equation\n *  \\param  b      BIGNUM with parameter b of the equation\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,\n                           const BIGNUM *b, BN_CTX *ctx);\n\n/** Gets the parameter of the ec over GFp defined by y^2 = x^3 + a*x + b\n *  \\param  group  EC_GROUP object\n *  \\param  p      BIGNUM for the prime number\n *  \\param  a      BIGNUM for parameter a of the equation\n *  \\param  b      BIGNUM for parameter b of the equation\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a,\n                           BIGNUM *b, BN_CTX *ctx);\n\n# ifndef OPENSSL_NO_EC2M\n/** Sets the parameter of a ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b\n *  \\param  group  EC_GROUP object\n *  \\param  p      BIGNUM with the polynomial defining the underlying field\n *  \\param  a      BIGNUM with parameter a of the equation\n *  \\param  b      BIGNUM with parameter b of the equation\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a,\n                            const BIGNUM *b, BN_CTX *ctx);\n\n/** Gets the parameter of the ec over GF2m defined by y^2 + x*y = x^3 + a*x^2 + b\n *  \\param  group  EC_GROUP object\n *  \\param  p      BIGNUM for the polynomial defining the underlying field\n *  \\param  a      BIGNUM for parameter a of the equation\n *  \\param  b      BIGNUM for parameter b of the equation\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a,\n                            BIGNUM *b, BN_CTX *ctx);\n# endif\n/** Returns the number of bits needed to represent a field element\n *  \\param  group  EC_GROUP object\n *  \\return number of bits needed to represent a field element\n */\nint EC_GROUP_get_degree(const EC_GROUP *group);\n\n/** Checks whether the parameter in the EC_GROUP define a valid ec group\n *  \\param  group  EC_GROUP object\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 if group is a valid ec group and 0 otherwise\n */\nint EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);\n\n/** Checks whether the discriminant of the elliptic curve is zero or not\n *  \\param  group  EC_GROUP object\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 if the discriminant is not zero and 0 otherwise\n */\nint EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);\n\n/** Compares two EC_GROUP objects\n *  \\param  a    first EC_GROUP object\n *  \\param  b    second EC_GROUP object\n *  \\param  ctx  BN_CTX object (optional)\n *  \\return 0 if both groups are equal and 1 otherwise\n */\nint EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);\n\n/*\n * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after\n * choosing an appropriate EC_METHOD\n */\n\n/** Creates a new EC_GROUP object with the specified parameters defined\n *  over GFp (defined by the equation y^2 = x^3 + a*x + b)\n *  \\param  p    BIGNUM with the prime number\n *  \\param  a    BIGNUM with the parameter a of the equation\n *  \\param  b    BIGNUM with the parameter b of the equation\n *  \\param  ctx  BN_CTX object (optional)\n *  \\return newly created EC_GROUP object with the specified parameters\n */\nEC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,\n                                 const BIGNUM *b, BN_CTX *ctx);\n# ifndef OPENSSL_NO_EC2M\n/** Creates a new EC_GROUP object with the specified parameters defined\n *  over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b)\n *  \\param  p    BIGNUM with the polynomial defining the underlying field\n *  \\param  a    BIGNUM with the parameter a of the equation\n *  \\param  b    BIGNUM with the parameter b of the equation\n *  \\param  ctx  BN_CTX object (optional)\n *  \\return newly created EC_GROUP object with the specified parameters\n */\nEC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a,\n                                  const BIGNUM *b, BN_CTX *ctx);\n# endif\n/** Creates a EC_GROUP object with a curve specified by a NID\n *  \\param  nid  NID of the OID of the curve name\n *  \\return newly created EC_GROUP object with specified curve or NULL\n *          if an error occurred\n */\nEC_GROUP *EC_GROUP_new_by_curve_name(int nid);\n\n/********************************************************************/\n/*               handling of internal curves                        */\n/********************************************************************/\n\ntypedef struct {\n    int nid;\n    const char *comment;\n} EC_builtin_curve;\n\n/*\n * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all\n * available curves or zero if a error occurred. In case r ist not zero\n * nitems EC_builtin_curve structures are filled with the data of the first\n * nitems internal groups\n */\nsize_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);\n\nconst char *EC_curve_nid2nist(int nid);\nint EC_curve_nist2nid(const char *name);\n\n/********************************************************************/\n/*                    EC_POINT functions                            */\n/********************************************************************/\n\n/** Creates a new EC_POINT object for the specified EC_GROUP\n *  \\param  group  EC_GROUP the underlying EC_GROUP object\n *  \\return newly created EC_POINT object or NULL if an error occurred\n */\nEC_POINT *EC_POINT_new(const EC_GROUP *group);\n\n/** Frees a EC_POINT object\n *  \\param  point  EC_POINT object to be freed\n */\nvoid EC_POINT_free(EC_POINT *point);\n\n/** Clears and frees a EC_POINT object\n *  \\param  point  EC_POINT object to be cleared and freed\n */\nvoid EC_POINT_clear_free(EC_POINT *point);\n\n/** Copies EC_POINT object\n *  \\param  dst  destination EC_POINT object\n *  \\param  src  source EC_POINT object\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);\n\n/** Creates a new EC_POINT object and copies the content of the supplied\n *  EC_POINT\n *  \\param  src    source EC_POINT object\n *  \\param  group  underlying the EC_GROUP object\n *  \\return newly created EC_POINT object or NULL if an error occurred\n */\nEC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);\n\n/** Returns the EC_METHOD used in EC_POINT object\n *  \\param  point  EC_POINT object\n *  \\return the EC_METHOD used\n */\nconst EC_METHOD *EC_POINT_method_of(const EC_POINT *point);\n\n/** Sets a point to infinity (neutral element)\n *  \\param  group  underlying EC_GROUP object\n *  \\param  point  EC_POINT to set to infinity\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);\n\n/** Sets the jacobian projective coordinates of a EC_POINT over GFp\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM with the x-coordinate\n *  \\param  y      BIGNUM with the y-coordinate\n *  \\param  z      BIGNUM with the z-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group,\n                                             EC_POINT *p, const BIGNUM *x,\n                                             const BIGNUM *y, const BIGNUM *z,\n                                             BN_CTX *ctx);\n\n/** Gets the jacobian projective coordinates of a EC_POINT over GFp\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM for the x-coordinate\n *  \\param  y      BIGNUM for the y-coordinate\n *  \\param  z      BIGNUM for the z-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,\n                                             const EC_POINT *p, BIGNUM *x,\n                                             BIGNUM *y, BIGNUM *z,\n                                             BN_CTX *ctx);\n\n/** Sets the affine coordinates of a EC_POINT over GFp\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM with the x-coordinate\n *  \\param  y      BIGNUM with the y-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,\n                                        const BIGNUM *x, const BIGNUM *y,\n                                        BN_CTX *ctx);\n\n/** Gets the affine coordinates of a EC_POINT over GFp\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM for the x-coordinate\n *  \\param  y      BIGNUM for the y-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,\n                                        const EC_POINT *p, BIGNUM *x,\n                                        BIGNUM *y, BN_CTX *ctx);\n\n/** Sets the x9.62 compressed coordinates of a EC_POINT over GFp\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM with x-coordinate\n *  \\param  y_bit  integer with the y-Bit (either 0 or 1)\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group,\n                                            EC_POINT *p, const BIGNUM *x,\n                                            int y_bit, BN_CTX *ctx);\n# ifndef OPENSSL_NO_EC2M\n/** Sets the affine coordinates of a EC_POINT over GF2m\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM with the x-coordinate\n *  \\param  y      BIGNUM with the y-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,\n                                         const BIGNUM *x, const BIGNUM *y,\n                                         BN_CTX *ctx);\n\n/** Gets the affine coordinates of a EC_POINT over GF2m\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM for the x-coordinate\n *  \\param  y      BIGNUM for the y-coordinate\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,\n                                         const EC_POINT *p, BIGNUM *x,\n                                         BIGNUM *y, BN_CTX *ctx);\n\n/** Sets the x9.62 compressed coordinates of a EC_POINT over GF2m\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  x      BIGNUM with x-coordinate\n *  \\param  y_bit  integer with the y-Bit (either 0 or 1)\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group,\n                                             EC_POINT *p, const BIGNUM *x,\n                                             int y_bit, BN_CTX *ctx);\n# endif\n/** Encodes a EC_POINT object to a octet string\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  form   point conversion form\n *  \\param  buf    memory buffer for the result. If NULL the function returns\n *                 required buffer size.\n *  \\param  len    length of the memory buffer\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return the length of the encoded octet string or 0 if an error occurred\n */\nsize_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,\n                          point_conversion_form_t form,\n                          unsigned char *buf, size_t len, BN_CTX *ctx);\n\n/** Decodes a EC_POINT from a octet string\n *  \\param  group  underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\param  buf    memory buffer with the encoded ec point\n *  \\param  len    length of the encoded ec point\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,\n                       const unsigned char *buf, size_t len, BN_CTX *ctx);\n\n/* other interfaces to point2oct/oct2point: */\nBIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,\n                          point_conversion_form_t form, BIGNUM *, BN_CTX *);\nEC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,\n                            EC_POINT *, BN_CTX *);\nchar *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,\n                         point_conversion_form_t form, BN_CTX *);\nEC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,\n                             EC_POINT *, BN_CTX *);\n\n/********************************************************************/\n/*         functions for doing EC_POINT arithmetic                  */\n/********************************************************************/\n\n/** Computes the sum of two EC_POINT\n *  \\param  group  underlying EC_GROUP object\n *  \\param  r      EC_POINT object for the result (r = a + b)\n *  \\param  a      EC_POINT object with the first summand\n *  \\param  b      EC_POINT object with the second summand\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,\n                 const EC_POINT *b, BN_CTX *ctx);\n\n/** Computes the double of a EC_POINT\n *  \\param  group  underlying EC_GROUP object\n *  \\param  r      EC_POINT object for the result (r = 2 * a)\n *  \\param  a      EC_POINT object\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,\n                 BN_CTX *ctx);\n\n/** Computes the inverse of a EC_POINT\n *  \\param  group  underlying EC_GROUP object\n *  \\param  a      EC_POINT object to be inverted (it's used for the result as well)\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);\n\n/** Checks whether the point is the neutral element of the group\n *  \\param  group  the underlying EC_GROUP object\n *  \\param  p      EC_POINT object\n *  \\return 1 if the point is the neutral element and 0 otherwise\n */\nint EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);\n\n/** Checks whether the point is on the curve\n *  \\param  group  underlying EC_GROUP object\n *  \\param  point  EC_POINT object to check\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 if point if on the curve and 0 otherwise\n */\nint EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point,\n                         BN_CTX *ctx);\n\n/** Compares two EC_POINTs\n *  \\param  group  underlying EC_GROUP object\n *  \\param  a      first EC_POINT object\n *  \\param  b      second EC_POINT object\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 0 if both points are equal and a value != 0 otherwise\n */\nint EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b,\n                 BN_CTX *ctx);\n\nint EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);\nint EC_POINTs_make_affine(const EC_GROUP *group, size_t num,\n                          EC_POINT *points[], BN_CTX *ctx);\n\n/** Computes r = generator * n sum_{i=0}^{num-1} p[i] * m[i]\n *  \\param  group  underlying EC_GROUP object\n *  \\param  r      EC_POINT object for the result\n *  \\param  n      BIGNUM with the multiplier for the group generator (optional)\n *  \\param  num    number futher summands\n *  \\param  p      array of size num of EC_POINT objects\n *  \\param  m      array of size num of BIGNUM objects\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,\n                  size_t num, const EC_POINT *p[], const BIGNUM *m[],\n                  BN_CTX *ctx);\n\n/** Computes r = generator * n + q * m\n *  \\param  group  underlying EC_GROUP object\n *  \\param  r      EC_POINT object for the result\n *  \\param  n      BIGNUM with the multiplier for the group generator (optional)\n *  \\param  q      EC_POINT object with the first factor of the second summand\n *  \\param  m      BIGNUM with the second factor of the second summand\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n,\n                 const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);\n\n/** Stores multiples of generator for faster point multiplication\n *  \\param  group  EC_GROUP object\n *  \\param  ctx    BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occured\n */\nint EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);\n\n/** Reports whether a precomputation has been done\n *  \\param  group  EC_GROUP object\n *  \\return 1 if a pre-computation has been done and 0 otherwise\n */\nint EC_GROUP_have_precompute_mult(const EC_GROUP *group);\n\n/********************************************************************/\n/*                       ASN1 stuff                                 */\n/********************************************************************/\n\n/*\n * EC_GROUP_get_basis_type() returns the NID of the basis type used to\n * represent the field elements\n */\nint EC_GROUP_get_basis_type(const EC_GROUP *);\n# ifndef OPENSSL_NO_EC2M\nint EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);\nint EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,\n                                   unsigned int *k2, unsigned int *k3);\n# endif\n\n# define OPENSSL_EC_NAMED_CURVE  0x001\n\ntypedef struct ecpk_parameters_st ECPKPARAMETERS;\n\nEC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len);\nint i2d_ECPKParameters(const EC_GROUP *, unsigned char **out);\n\n# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)\n# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)\n# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \\\n                (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))\n# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \\\n                (unsigned char *)(x))\n\n# ifndef OPENSSL_NO_BIO\nint ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);\n# endif\n# ifndef OPENSSL_NO_FP_API\nint ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);\n# endif\n\n/********************************************************************/\n/*                      EC_KEY functions                            */\n/********************************************************************/\n\ntypedef struct ec_key_st EC_KEY;\n\n/* some values for the encoding_flag */\n# define EC_PKEY_NO_PARAMETERS   0x001\n# define EC_PKEY_NO_PUBKEY       0x002\n\n/* some values for the flags field */\n# define EC_FLAG_NON_FIPS_ALLOW  0x1\n# define EC_FLAG_FIPS_CHECKED    0x2\n\n/** Creates a new EC_KEY object.\n *  \\return EC_KEY object or NULL if an error occurred.\n */\nEC_KEY *EC_KEY_new(void);\n\nint EC_KEY_get_flags(const EC_KEY *key);\n\nvoid EC_KEY_set_flags(EC_KEY *key, int flags);\n\nvoid EC_KEY_clear_flags(EC_KEY *key, int flags);\n\n/** Creates a new EC_KEY object using a named curve as underlying\n *  EC_GROUP object.\n *  \\param  nid  NID of the named curve.\n *  \\return EC_KEY object or NULL if an error occurred.\n */\nEC_KEY *EC_KEY_new_by_curve_name(int nid);\n\n/** Frees a EC_KEY object.\n *  \\param  key  EC_KEY object to be freed.\n */\nvoid EC_KEY_free(EC_KEY *key);\n\n/** Copies a EC_KEY object.\n *  \\param  dst  destination EC_KEY object\n *  \\param  src  src EC_KEY object\n *  \\return dst or NULL if an error occurred.\n */\nEC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);\n\n/** Creates a new EC_KEY object and copies the content from src to it.\n *  \\param  src  the source EC_KEY object\n *  \\return newly created EC_KEY object or NULL if an error occurred.\n */\nEC_KEY *EC_KEY_dup(const EC_KEY *src);\n\n/** Increases the internal reference count of a EC_KEY object.\n *  \\param  key  EC_KEY object\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_up_ref(EC_KEY *key);\n\n/** Returns the EC_GROUP object of a EC_KEY object\n *  \\param  key  EC_KEY object\n *  \\return the EC_GROUP object (possibly NULL).\n */\nconst EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);\n\n/** Sets the EC_GROUP of a EC_KEY object.\n *  \\param  key    EC_KEY object\n *  \\param  group  EC_GROUP to use in the EC_KEY object (note: the EC_KEY\n *                 object will use an own copy of the EC_GROUP).\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);\n\n/** Returns the private key of a EC_KEY object.\n *  \\param  key  EC_KEY object\n *  \\return a BIGNUM with the private key (possibly NULL).\n */\nconst BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);\n\n/** Sets the private key of a EC_KEY object.\n *  \\param  key  EC_KEY object\n *  \\param  prv  BIGNUM with the private key (note: the EC_KEY object\n *               will use an own copy of the BIGNUM).\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);\n\n/** Returns the public key of a EC_KEY object.\n *  \\param  key  the EC_KEY object\n *  \\return a EC_POINT object with the public key (possibly NULL)\n */\nconst EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);\n\n/** Sets the public key of a EC_KEY object.\n *  \\param  key  EC_KEY object\n *  \\param  pub  EC_POINT object with the public key (note: the EC_KEY object\n *               will use an own copy of the EC_POINT object).\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);\n\nunsigned EC_KEY_get_enc_flags(const EC_KEY *key);\nvoid EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);\npoint_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);\nvoid EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);\n/* functions to set/get method specific data  */\nvoid *EC_KEY_get_key_method_data(EC_KEY *key,\n                                 void *(*dup_func) (void *),\n                                 void (*free_func) (void *),\n                                 void (*clear_free_func) (void *));\n/** Sets the key method data of an EC_KEY object, if none has yet been set.\n *  \\param  key              EC_KEY object\n *  \\param  data             opaque data to install.\n *  \\param  dup_func         a function that duplicates |data|.\n *  \\param  free_func        a function that frees |data|.\n *  \\param  clear_free_func  a function that wipes and frees |data|.\n *  \\return the previously set data pointer, or NULL if |data| was inserted.\n */\nvoid *EC_KEY_insert_key_method_data(EC_KEY *key, void *data,\n                                    void *(*dup_func) (void *),\n                                    void (*free_func) (void *),\n                                    void (*clear_free_func) (void *));\n/* wrapper functions for the underlying EC_GROUP object */\nvoid EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);\n\n/** Creates a table of pre-computed multiples of the generator to\n *  accelerate further EC_KEY operations.\n *  \\param  key  EC_KEY object\n *  \\param  ctx  BN_CTX object (optional)\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);\n\n/** Creates a new ec private (and optional a new public) key.\n *  \\param  key  EC_KEY object\n *  \\return 1 on success and 0 if an error occurred.\n */\nint EC_KEY_generate_key(EC_KEY *key);\n\n/** Verifies that a private and/or public key is valid.\n *  \\param  key  the EC_KEY object\n *  \\return 1 on success and 0 otherwise.\n */\nint EC_KEY_check_key(const EC_KEY *key);\n\n/** Sets a public key from affine coordindates performing\n *  neccessary NIST PKV tests.\n *  \\param  key  the EC_KEY object\n *  \\param  x    public key x coordinate\n *  \\param  y    public key y coordinate\n *  \\return 1 on success and 0 otherwise.\n */\nint EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x,\n                                             BIGNUM *y);\n\n/********************************************************************/\n/*        de- and encoding functions for SEC1 ECPrivateKey          */\n/********************************************************************/\n\n/** Decodes a private key from a memory buffer.\n *  \\param  key  a pointer to a EC_KEY object which should be used (or NULL)\n *  \\param  in   pointer to memory with the DER encoded private key\n *  \\param  len  length of the DER encoded private key\n *  \\return the decoded private key or NULL if an error occurred.\n */\nEC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);\n\n/** Encodes a private key object and stores the result in a buffer.\n *  \\param  key  the EC_KEY object to encode\n *  \\param  out  the buffer for the result (if NULL the function returns number\n *               of bytes needed).\n *  \\return 1 on success and 0 if an error occurred.\n */\nint i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);\n\n/********************************************************************/\n/*        de- and encoding functions for EC parameters              */\n/********************************************************************/\n\n/** Decodes ec parameter from a memory buffer.\n *  \\param  key  a pointer to a EC_KEY object which should be used (or NULL)\n *  \\param  in   pointer to memory with the DER encoded ec parameters\n *  \\param  len  length of the DER encoded ec parameters\n *  \\return a EC_KEY object with the decoded parameters or NULL if an error\n *          occurred.\n */\nEC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len);\n\n/** Encodes ec parameter and stores the result in a buffer.\n *  \\param  key  the EC_KEY object with ec paramters to encode\n *  \\param  out  the buffer for the result (if NULL the function returns number\n *               of bytes needed).\n *  \\return 1 on success and 0 if an error occurred.\n */\nint i2d_ECParameters(EC_KEY *key, unsigned char **out);\n\n/********************************************************************/\n/*         de- and encoding functions for EC public key             */\n/*         (octet string, not DER -- hence 'o2i' and 'i2o')         */\n/********************************************************************/\n\n/** Decodes a ec public key from a octet string.\n *  \\param  key  a pointer to a EC_KEY object which should be used\n *  \\param  in   memory buffer with the encoded public key\n *  \\param  len  length of the encoded public key\n *  \\return EC_KEY object with decoded public key or NULL if an error\n *          occurred.\n */\nEC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len);\n\n/** Encodes a ec public key in an octet string.\n *  \\param  key  the EC_KEY object with the public key\n *  \\param  out  the buffer for the result (if NULL the function returns number\n *               of bytes needed).\n *  \\return 1 on success and 0 if an error occurred\n */\nint i2o_ECPublicKey(EC_KEY *key, unsigned char **out);\n\n# ifndef OPENSSL_NO_BIO\n/** Prints out the ec parameters on human readable form.\n *  \\param  bp   BIO object to which the information is printed\n *  \\param  key  EC_KEY object\n *  \\return 1 on success and 0 if an error occurred\n */\nint ECParameters_print(BIO *bp, const EC_KEY *key);\n\n/** Prints out the contents of a EC_KEY object\n *  \\param  bp   BIO object to which the information is printed\n *  \\param  key  EC_KEY object\n *  \\param  off  line offset\n *  \\return 1 on success and 0 if an error occurred\n */\nint EC_KEY_print(BIO *bp, const EC_KEY *key, int off);\n\n# endif\n# ifndef OPENSSL_NO_FP_API\n/** Prints out the ec parameters on human readable form.\n *  \\param  fp   file descriptor to which the information is printed\n *  \\param  key  EC_KEY object\n *  \\return 1 on success and 0 if an error occurred\n */\nint ECParameters_print_fp(FILE *fp, const EC_KEY *key);\n\n/** Prints out the contents of a EC_KEY object\n *  \\param  fp   file descriptor to which the information is printed\n *  \\param  key  EC_KEY object\n *  \\param  off  line offset\n *  \\return 1 on success and 0 if an error occurred\n */\nint EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);\n\n# endif\n\n# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x)\n\n# ifndef __cplusplus\n#  if defined(__SUNPRO_C)\n#   if __SUNPRO_C >= 0x520\n#    pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE)\n#   endif\n#  endif\n# endif\n\n# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \\\n                                EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)\n\n# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \\\n                                EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL)\n\n# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL)\n\n# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL)\n\n# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL)\n\n# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL)\n\n# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md)\n\n# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd)\n\n# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL)\n\n# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                        EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen)\n\n# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p)\n\n# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \\\n                                EVP_PKEY_OP_DERIVE, \\\n                                EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p)\n\n# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID             (EVP_PKEY_ALG_CTRL + 1)\n# define EVP_PKEY_CTRL_EC_PARAM_ENC                      (EVP_PKEY_ALG_CTRL + 2)\n# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR                  (EVP_PKEY_ALG_CTRL + 3)\n# define EVP_PKEY_CTRL_EC_KDF_TYPE                       (EVP_PKEY_ALG_CTRL + 4)\n# define EVP_PKEY_CTRL_EC_KDF_MD                         (EVP_PKEY_ALG_CTRL + 5)\n# define EVP_PKEY_CTRL_GET_EC_KDF_MD                     (EVP_PKEY_ALG_CTRL + 6)\n# define EVP_PKEY_CTRL_EC_KDF_OUTLEN                     (EVP_PKEY_ALG_CTRL + 7)\n# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN                 (EVP_PKEY_ALG_CTRL + 8)\n# define EVP_PKEY_CTRL_EC_KDF_UKM                        (EVP_PKEY_ALG_CTRL + 9)\n# define EVP_PKEY_CTRL_GET_EC_KDF_UKM                    (EVP_PKEY_ALG_CTRL + 10)\n/* KDF types */\n# define EVP_PKEY_ECDH_KDF_NONE                          1\n# define EVP_PKEY_ECDH_KDF_X9_62                         2\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_EC_strings(void);\n\n/* Error codes for the EC functions. */\n\n/* Function codes. */\n# define EC_F_BN_TO_FELEM                                 224\n# define EC_F_COMPUTE_WNAF                                143\n# define EC_F_D2I_ECPARAMETERS                            144\n# define EC_F_D2I_ECPKPARAMETERS                          145\n# define EC_F_D2I_ECPRIVATEKEY                            146\n# define EC_F_DO_EC_KEY_PRINT                             221\n# define EC_F_ECDH_CMS_DECRYPT                            238\n# define EC_F_ECDH_CMS_SET_SHARED_INFO                    239\n# define EC_F_ECKEY_PARAM2TYPE                            223\n# define EC_F_ECKEY_PARAM_DECODE                          212\n# define EC_F_ECKEY_PRIV_DECODE                           213\n# define EC_F_ECKEY_PRIV_ENCODE                           214\n# define EC_F_ECKEY_PUB_DECODE                            215\n# define EC_F_ECKEY_PUB_ENCODE                            216\n# define EC_F_ECKEY_TYPE2PARAM                            220\n# define EC_F_ECPARAMETERS_PRINT                          147\n# define EC_F_ECPARAMETERS_PRINT_FP                       148\n# define EC_F_ECPKPARAMETERS_PRINT                        149\n# define EC_F_ECPKPARAMETERS_PRINT_FP                     150\n# define EC_F_ECP_NIST_MOD_192                            203\n# define EC_F_ECP_NIST_MOD_224                            204\n# define EC_F_ECP_NIST_MOD_256                            205\n# define EC_F_ECP_NIST_MOD_521                            206\n# define EC_F_EC_ASN1_GROUP2CURVE                         153\n# define EC_F_EC_ASN1_GROUP2FIELDID                       154\n# define EC_F_EC_ASN1_GROUP2PARAMETERS                    155\n# define EC_F_EC_ASN1_GROUP2PKPARAMETERS                  156\n# define EC_F_EC_ASN1_PARAMETERS2GROUP                    157\n# define EC_F_EC_ASN1_PKPARAMETERS2GROUP                  158\n# define EC_F_EC_EX_DATA_SET_DATA                         211\n# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY           208\n# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT     159\n# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE              195\n# define EC_F_EC_GF2M_SIMPLE_OCT2POINT                    160\n# define EC_F_EC_GF2M_SIMPLE_POINT2OCT                    161\n# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162\n# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163\n# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES   164\n# define EC_F_EC_GFP_MONT_FIELD_DECODE                    133\n# define EC_F_EC_GFP_MONT_FIELD_ENCODE                    134\n# define EC_F_EC_GFP_MONT_FIELD_MUL                       131\n# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE                209\n# define EC_F_EC_GFP_MONT_FIELD_SQR                       132\n# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE                 189\n# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE_GFP             135\n# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE             225\n# define EC_F_EC_GFP_NISTP224_POINTS_MUL                  228\n# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226\n# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE             230\n# define EC_F_EC_GFP_NISTP256_POINTS_MUL                  231\n# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232\n# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE             233\n# define EC_F_EC_GFP_NISTP521_POINTS_MUL                  234\n# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235\n# define EC_F_EC_GFP_NIST_FIELD_MUL                       200\n# define EC_F_EC_GFP_NIST_FIELD_SQR                       201\n# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE                 202\n# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT      165\n# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE               166\n# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE_GFP           100\n# define EC_F_EC_GFP_SIMPLE_GROUP_SET_GENERATOR           101\n# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE                   102\n# define EC_F_EC_GFP_SIMPLE_OCT2POINT                     103\n# define EC_F_EC_GFP_SIMPLE_POINT2OCT                     104\n# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE            137\n# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES  167\n# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES_GFP 105\n# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES  168\n# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES_GFP 128\n# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES    169\n# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES_GFP 129\n# define EC_F_EC_GROUP_CHECK                              170\n# define EC_F_EC_GROUP_CHECK_DISCRIMINANT                 171\n# define EC_F_EC_GROUP_COPY                               106\n# define EC_F_EC_GROUP_GET0_GENERATOR                     139\n# define EC_F_EC_GROUP_GET_COFACTOR                       140\n# define EC_F_EC_GROUP_GET_CURVE_GF2M                     172\n# define EC_F_EC_GROUP_GET_CURVE_GFP                      130\n# define EC_F_EC_GROUP_GET_DEGREE                         173\n# define EC_F_EC_GROUP_GET_ORDER                          141\n# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS              193\n# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS                194\n# define EC_F_EC_GROUP_NEW                                108\n# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME                  174\n# define EC_F_EC_GROUP_NEW_FROM_DATA                      175\n# define EC_F_EC_GROUP_PRECOMPUTE_MULT                    142\n# define EC_F_EC_GROUP_SET_CURVE_GF2M                     176\n# define EC_F_EC_GROUP_SET_CURVE_GFP                      109\n# define EC_F_EC_GROUP_SET_EXTRA_DATA                     110\n# define EC_F_EC_GROUP_SET_GENERATOR                      111\n# define EC_F_EC_KEY_CHECK_KEY                            177\n# define EC_F_EC_KEY_COPY                                 178\n# define EC_F_EC_KEY_GENERATE_KEY                         179\n# define EC_F_EC_KEY_NEW                                  182\n# define EC_F_EC_KEY_PRINT                                180\n# define EC_F_EC_KEY_PRINT_FP                             181\n# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES    229\n# define EC_F_EC_POINTS_MAKE_AFFINE                       136\n# define EC_F_EC_POINT_ADD                                112\n# define EC_F_EC_POINT_CMP                                113\n# define EC_F_EC_POINT_COPY                               114\n# define EC_F_EC_POINT_DBL                                115\n# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M        183\n# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP         116\n# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP    117\n# define EC_F_EC_POINT_INVERT                             210\n# define EC_F_EC_POINT_IS_AT_INFINITY                     118\n# define EC_F_EC_POINT_IS_ON_CURVE                        119\n# define EC_F_EC_POINT_MAKE_AFFINE                        120\n# define EC_F_EC_POINT_MUL                                184\n# define EC_F_EC_POINT_NEW                                121\n# define EC_F_EC_POINT_OCT2POINT                          122\n# define EC_F_EC_POINT_POINT2OCT                          123\n# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M        185\n# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP         124\n# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M    186\n# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP     125\n# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP    126\n# define EC_F_EC_POINT_SET_TO_INFINITY                    127\n# define EC_F_EC_PRE_COMP_DUP                             207\n# define EC_F_EC_PRE_COMP_NEW                             196\n# define EC_F_EC_WNAF_MUL                                 187\n# define EC_F_EC_WNAF_PRECOMPUTE_MULT                     188\n# define EC_F_I2D_ECPARAMETERS                            190\n# define EC_F_I2D_ECPKPARAMETERS                          191\n# define EC_F_I2D_ECPRIVATEKEY                            192\n# define EC_F_I2O_ECPUBLICKEY                             151\n# define EC_F_NISTP224_PRE_COMP_NEW                       227\n# define EC_F_NISTP256_PRE_COMP_NEW                       236\n# define EC_F_NISTP521_PRE_COMP_NEW                       237\n# define EC_F_ECP_NISTZ256_GET_AFFINE                     240\n# define EC_F_ECP_NISTZ256_POINTS_MUL                     241\n# define EC_F_ECP_NISTZ256_WINDOWED_MUL                   242\n# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE                243\n# define EC_F_ECP_NISTZ256_PRE_COMP_NEW                   244\n# define EC_F_O2I_ECPUBLICKEY                             152\n# define EC_F_OLD_EC_PRIV_DECODE                          222\n# define EC_F_PKEY_EC_CTRL                                197\n# define EC_F_PKEY_EC_CTRL_STR                            198\n# define EC_F_PKEY_EC_DERIVE                              217\n# define EC_F_PKEY_EC_KEYGEN                              199\n# define EC_F_PKEY_EC_PARAMGEN                            219\n# define EC_F_PKEY_EC_SIGN                                218\n\n/* Reason codes. */\n# define EC_R_ASN1_ERROR                                  115\n# define EC_R_ASN1_UNKNOWN_FIELD                          116\n# define EC_R_BIGNUM_OUT_OF_RANGE                         144\n# define EC_R_BUFFER_TOO_SMALL                            100\n# define EC_R_COORDINATES_OUT_OF_RANGE                    146\n# define EC_R_D2I_ECPKPARAMETERS_FAILURE                  117\n# define EC_R_DECODE_ERROR                                142\n# define EC_R_DISCRIMINANT_IS_ZERO                        118\n# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE                119\n# define EC_R_FIELD_TOO_LARGE                             143\n# define EC_R_GF2M_NOT_SUPPORTED                          147\n# define EC_R_GROUP2PKPARAMETERS_FAILURE                  120\n# define EC_R_I2D_ECPKPARAMETERS_FAILURE                  121\n# define EC_R_INCOMPATIBLE_OBJECTS                        101\n# define EC_R_INVALID_ARGUMENT                            112\n# define EC_R_INVALID_COMPRESSED_POINT                    110\n# define EC_R_INVALID_COMPRESSION_BIT                     109\n# define EC_R_INVALID_CURVE                               141\n# define EC_R_INVALID_DIGEST                              151\n# define EC_R_INVALID_DIGEST_TYPE                         138\n# define EC_R_INVALID_ENCODING                            102\n# define EC_R_INVALID_FIELD                               103\n# define EC_R_INVALID_FORM                                104\n# define EC_R_INVALID_GROUP_ORDER                         122\n# define EC_R_INVALID_PENTANOMIAL_BASIS                   132\n# define EC_R_INVALID_PRIVATE_KEY                         123\n# define EC_R_INVALID_TRINOMIAL_BASIS                     137\n# define EC_R_KDF_PARAMETER_ERROR                         148\n# define EC_R_KEYS_NOT_SET                                140\n# define EC_R_MISSING_PARAMETERS                          124\n# define EC_R_MISSING_PRIVATE_KEY                         125\n# define EC_R_NOT_A_NIST_PRIME                            135\n# define EC_R_NOT_A_SUPPORTED_NIST_PRIME                  136\n# define EC_R_NOT_IMPLEMENTED                             126\n# define EC_R_NOT_INITIALIZED                             111\n# define EC_R_NO_FIELD_MOD                                133\n# define EC_R_NO_PARAMETERS_SET                           139\n# define EC_R_PASSED_NULL_PARAMETER                       134\n# define EC_R_PEER_KEY_ERROR                              149\n# define EC_R_PKPARAMETERS2GROUP_FAILURE                  127\n# define EC_R_POINT_AT_INFINITY                           106\n# define EC_R_POINT_IS_NOT_ON_CURVE                       107\n# define EC_R_SHARED_INFO_ERROR                           150\n# define EC_R_SLOT_FULL                                   108\n# define EC_R_UNDEFINED_GENERATOR                         113\n# define EC_R_UNDEFINED_ORDER                             128\n# define EC_R_UNKNOWN_GROUP                               129\n# define EC_R_UNKNOWN_ORDER                               114\n# define EC_R_UNSUPPORTED_FIELD                           131\n# define EC_R_WRONG_CURVE_PARAMETERS                      145\n# define EC_R_WRONG_ORDER                                 130\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ecdh.h",
    "content": "/* crypto/ecdh/ecdh.h */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n *\n * The Elliptic Curve Public-Key Crypto Library (ECC Code) included\n * herein is developed by SUN MICROSYSTEMS, INC., and is contributed\n * to the OpenSSL project.\n *\n * The ECC Code is licensed pursuant to the OpenSSL open source\n * license provided below.\n *\n * The ECDH software is originally written by Douglas Stebila of\n * Sun Microsystems Laboratories.\n *\n */\n/* ====================================================================\n * Copyright (c) 2000-2002 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n#ifndef HEADER_ECDH_H\n# define HEADER_ECDH_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_ECDH\n#  error ECDH is disabled.\n# endif\n\n# include <openssl/ec.h>\n# include <openssl/ossl_typ.h>\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n# endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# define EC_FLAG_COFACTOR_ECDH   0x1000\n\nconst ECDH_METHOD *ECDH_OpenSSL(void);\n\nvoid ECDH_set_default_method(const ECDH_METHOD *);\nconst ECDH_METHOD *ECDH_get_default_method(void);\nint ECDH_set_method(EC_KEY *, const ECDH_METHOD *);\n\nint ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,\n                     EC_KEY *ecdh, void *(*KDF) (const void *in, size_t inlen,\n                                                 void *out, size_t *outlen));\n\nint ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new\n                          *new_func, CRYPTO_EX_dup *dup_func,\n                          CRYPTO_EX_free *free_func);\nint ECDH_set_ex_data(EC_KEY *d, int idx, void *arg);\nvoid *ECDH_get_ex_data(EC_KEY *d, int idx);\n\nint ECDH_KDF_X9_62(unsigned char *out, size_t outlen,\n                   const unsigned char *Z, size_t Zlen,\n                   const unsigned char *sinfo, size_t sinfolen,\n                   const EVP_MD *md);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_ECDH_strings(void);\n\n/* Error codes for the ECDH functions. */\n\n/* Function codes. */\n# define ECDH_F_ECDH_CHECK                                102\n# define ECDH_F_ECDH_COMPUTE_KEY                          100\n# define ECDH_F_ECDH_DATA_NEW_METHOD                      101\n\n/* Reason codes. */\n# define ECDH_R_KDF_FAILED                                102\n# define ECDH_R_NON_FIPS_METHOD                           103\n# define ECDH_R_NO_PRIVATE_VALUE                          100\n# define ECDH_R_POINT_ARITHMETIC_FAILURE                  101\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ecdsa.h",
    "content": "/* crypto/ecdsa/ecdsa.h */\n/**\n * \\file   crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions\n * \\author Written by Nils Larsch for the OpenSSL project\n */\n/* ====================================================================\n * Copyright (c) 2000-2005 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n#ifndef HEADER_ECDSA_H\n# define HEADER_ECDSA_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_ECDSA\n#  error ECDSA is disabled.\n# endif\n\n# include <openssl/ec.h>\n# include <openssl/ossl_typ.h>\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n# endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct ECDSA_SIG_st {\n    BIGNUM *r;\n    BIGNUM *s;\n} ECDSA_SIG;\n\n/** Allocates and initialize a ECDSA_SIG structure\n *  \\return pointer to a ECDSA_SIG structure or NULL if an error occurred\n */\nECDSA_SIG *ECDSA_SIG_new(void);\n\n/** frees a ECDSA_SIG structure\n *  \\param  sig  pointer to the ECDSA_SIG structure\n */\nvoid ECDSA_SIG_free(ECDSA_SIG *sig);\n\n/** DER encode content of ECDSA_SIG object (note: this function modifies *pp\n *  (*pp += length of the DER encoded signature)).\n *  \\param  sig  pointer to the ECDSA_SIG object\n *  \\param  pp   pointer to a unsigned char pointer for the output or NULL\n *  \\return the length of the DER encoded ECDSA_SIG object or 0\n */\nint i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);\n\n/** Decodes a DER encoded ECDSA signature (note: this function changes *pp\n *  (*pp += len)).\n *  \\param  sig  pointer to ECDSA_SIG pointer (may be NULL)\n *  \\param  pp   memory buffer with the DER encoded signature\n *  \\param  len  length of the buffer\n *  \\return pointer to the decoded ECDSA_SIG structure (or NULL)\n */\nECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);\n\n/** Computes the ECDSA signature of the given hash value using\n *  the supplied private key and returns the created signature.\n *  \\param  dgst      pointer to the hash value\n *  \\param  dgst_len  length of the hash value\n *  \\param  eckey     EC_KEY object containing a private EC key\n *  \\return pointer to a ECDSA_SIG structure or NULL if an error occurred\n */\nECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len,\n                         EC_KEY *eckey);\n\n/** Computes ECDSA signature of a given hash value using the supplied\n *  private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\n *  \\param  dgst     pointer to the hash value to sign\n *  \\param  dgstlen  length of the hash value\n *  \\param  kinv     BIGNUM with a pre-computed inverse k (optional)\n *  \\param  rp       BIGNUM with a pre-computed rp value (optioanl),\n *                   see ECDSA_sign_setup\n *  \\param  eckey    EC_KEY object containing a private EC key\n *  \\return pointer to a ECDSA_SIG structure or NULL if an error occurred\n */\nECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen,\n                            const BIGNUM *kinv, const BIGNUM *rp,\n                            EC_KEY *eckey);\n\n/** Verifies that the supplied signature is a valid ECDSA\n *  signature of the supplied hash value using the supplied public key.\n *  \\param  dgst      pointer to the hash value\n *  \\param  dgst_len  length of the hash value\n *  \\param  sig       ECDSA_SIG structure\n *  \\param  eckey     EC_KEY object containing a public EC key\n *  \\return 1 if the signature is valid, 0 if the signature is invalid\n *          and -1 on error\n */\nint ECDSA_do_verify(const unsigned char *dgst, int dgst_len,\n                    const ECDSA_SIG *sig, EC_KEY *eckey);\n\nconst ECDSA_METHOD *ECDSA_OpenSSL(void);\n\n/** Sets the default ECDSA method\n *  \\param  meth  new default ECDSA_METHOD\n */\nvoid ECDSA_set_default_method(const ECDSA_METHOD *meth);\n\n/** Returns the default ECDSA method\n *  \\return pointer to ECDSA_METHOD structure containing the default method\n */\nconst ECDSA_METHOD *ECDSA_get_default_method(void);\n\n/** Sets method to be used for the ECDSA operations\n *  \\param  eckey  EC_KEY object\n *  \\param  meth   new method\n *  \\return 1 on success and 0 otherwise\n */\nint ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);\n\n/** Returns the maximum length of the DER encoded signature\n *  \\param  eckey  EC_KEY object\n *  \\return numbers of bytes required for the DER encoded signature\n */\nint ECDSA_size(const EC_KEY *eckey);\n\n/** Precompute parts of the signing operation\n *  \\param  eckey  EC_KEY object containing a private EC key\n *  \\param  ctx    BN_CTX object (optional)\n *  \\param  kinv   BIGNUM pointer for the inverse of k\n *  \\param  rp     BIGNUM pointer for x coordinate of k * generator\n *  \\return 1 on success and 0 otherwise\n */\nint ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp);\n\n/** Computes ECDSA signature of a given hash value using the supplied\n *  private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\n *  \\param  type     this parameter is ignored\n *  \\param  dgst     pointer to the hash value to sign\n *  \\param  dgstlen  length of the hash value\n *  \\param  sig      memory for the DER encoded created signature\n *  \\param  siglen   pointer to the length of the returned signature\n *  \\param  eckey    EC_KEY object containing a private EC key\n *  \\return 1 on success and 0 otherwise\n */\nint ECDSA_sign(int type, const unsigned char *dgst, int dgstlen,\n               unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);\n\n/** Computes ECDSA signature of a given hash value using the supplied\n *  private key (note: sig must point to ECDSA_size(eckey) bytes of memory).\n *  \\param  type     this parameter is ignored\n *  \\param  dgst     pointer to the hash value to sign\n *  \\param  dgstlen  length of the hash value\n *  \\param  sig      buffer to hold the DER encoded signature\n *  \\param  siglen   pointer to the length of the returned signature\n *  \\param  kinv     BIGNUM with a pre-computed inverse k (optional)\n *  \\param  rp       BIGNUM with a pre-computed rp value (optioanl),\n *                   see ECDSA_sign_setup\n *  \\param  eckey    EC_KEY object containing a private EC key\n *  \\return 1 on success and 0 otherwise\n */\nint ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen,\n                  unsigned char *sig, unsigned int *siglen,\n                  const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);\n\n/** Verifies that the given signature is valid ECDSA signature\n *  of the supplied hash value using the specified public key.\n *  \\param  type     this parameter is ignored\n *  \\param  dgst     pointer to the hash value\n *  \\param  dgstlen  length of the hash value\n *  \\param  sig      pointer to the DER encoded signature\n *  \\param  siglen   length of the DER encoded signature\n *  \\param  eckey    EC_KEY object containing a public EC key\n *  \\return 1 if the signature is valid, 0 if the signature is invalid\n *          and -1 on error\n */\nint ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,\n                 const unsigned char *sig, int siglen, EC_KEY *eckey);\n\n/* the standard ex_data functions */\nint ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new\n                           *new_func, CRYPTO_EX_dup *dup_func,\n                           CRYPTO_EX_free *free_func);\nint ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);\nvoid *ECDSA_get_ex_data(EC_KEY *d, int idx);\n\n/** Allocates and initialize a ECDSA_METHOD structure\n *  \\param ecdsa_method pointer to ECDSA_METHOD to copy.  (May be NULL)\n *  \\return pointer to a ECDSA_METHOD structure or NULL if an error occurred\n */\n\nECDSA_METHOD *ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method);\n\n/** frees a ECDSA_METHOD structure\n *  \\param  ecdsa_method  pointer to the ECDSA_METHOD structure\n */\nvoid ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method);\n\n/**  Sets application specific data in the ECDSA_METHOD\n *   \\param  ecdsa_method pointer to existing ECDSA_METHOD\n *   \\param  app application specific data to set\n */\n\nvoid ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app);\n\n/** Returns application specific data from a ECDSA_METHOD structure\n *  \\param ecdsa_method pointer to ECDSA_METHOD structure\n *  \\return pointer to application specific data.\n */\n\nvoid *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method);\n\n/**  Set the ECDSA_do_sign function in the ECDSA_METHOD\n *   \\param  ecdsa_method  pointer to existing ECDSA_METHOD\n *   \\param  ecdsa_do_sign a funtion of type ECDSA_do_sign\n */\n\nvoid ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method,\n                           ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char\n                                                        *dgst, int dgst_len,\n                                                        const BIGNUM *inv,\n                                                        const BIGNUM *rp,\n                                                        EC_KEY *eckey));\n\n/**  Set the  ECDSA_sign_setup function in the ECDSA_METHOD\n *   \\param  ecdsa_method  pointer to existing ECDSA_METHOD\n *   \\param  ecdsa_sign_setup a funtion of type ECDSA_sign_setup\n */\n\nvoid ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method,\n                                 int (*ecdsa_sign_setup) (EC_KEY *eckey,\n                                                          BN_CTX *ctx,\n                                                          BIGNUM **kinv,\n                                                          BIGNUM **r));\n\n/**  Set the ECDSA_do_verify function in the ECDSA_METHOD\n *   \\param  ecdsa_method  pointer to existing ECDSA_METHOD\n *   \\param  ecdsa_do_verify a funtion of type ECDSA_do_verify\n */\n\nvoid ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method,\n                             int (*ecdsa_do_verify) (const unsigned char\n                                                     *dgst, int dgst_len,\n                                                     const ECDSA_SIG *sig,\n                                                     EC_KEY *eckey));\n\nvoid ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags);\n\n/**  Set the flags field in the ECDSA_METHOD\n *   \\param  ecdsa_method  pointer to existing ECDSA_METHOD\n *   \\param  flags flags value to set\n */\n\nvoid ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name);\n\n/**  Set the name field in the ECDSA_METHOD\n *   \\param  ecdsa_method  pointer to existing ECDSA_METHOD\n *   \\param  name name to set\n */\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_ECDSA_strings(void);\n\n/* Error codes for the ECDSA functions. */\n\n/* Function codes. */\n# define ECDSA_F_ECDSA_CHECK                              104\n# define ECDSA_F_ECDSA_DATA_NEW_METHOD                    100\n# define ECDSA_F_ECDSA_DO_SIGN                            101\n# define ECDSA_F_ECDSA_DO_VERIFY                          102\n# define ECDSA_F_ECDSA_METHOD_NEW                         105\n# define ECDSA_F_ECDSA_SIGN_SETUP                         103\n\n/* Reason codes. */\n# define ECDSA_R_BAD_SIGNATURE                            100\n# define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE              101\n# define ECDSA_R_ERR_EC_LIB                               102\n# define ECDSA_R_MISSING_PARAMETERS                       103\n# define ECDSA_R_NEED_NEW_SETUP_VALUES                    106\n# define ECDSA_R_NON_FIPS_METHOD                          107\n# define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED          104\n# define ECDSA_R_SIGNATURE_MALLOC_FAILED                  105\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/engine.h",
    "content": "/* openssl/engine.h */\n/*\n * Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL project\n * 2000.\n */\n/* ====================================================================\n * Copyright (c) 1999-2004 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n * ECDH support in OpenSSL originally developed by\n * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n */\n\n#ifndef HEADER_ENGINE_H\n# define HEADER_ENGINE_H\n\n# include <openssl/opensslconf.h>\n\n# ifdef OPENSSL_NO_ENGINE\n#  error ENGINE is disabled.\n# endif\n\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n#  ifndef OPENSSL_NO_RSA\n#   include <openssl/rsa.h>\n#  endif\n#  ifndef OPENSSL_NO_DSA\n#   include <openssl/dsa.h>\n#  endif\n#  ifndef OPENSSL_NO_DH\n#   include <openssl/dh.h>\n#  endif\n#  ifndef OPENSSL_NO_ECDH\n#   include <openssl/ecdh.h>\n#  endif\n#  ifndef OPENSSL_NO_ECDSA\n#   include <openssl/ecdsa.h>\n#  endif\n#  include <openssl/rand.h>\n#  include <openssl/ui.h>\n#  include <openssl/err.h>\n# endif\n\n# include <openssl/ossl_typ.h>\n# include <openssl/symhacks.h>\n\n# include <openssl/x509.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * These flags are used to control combinations of algorithm (methods) by\n * bitwise \"OR\"ing.\n */\n# define ENGINE_METHOD_RSA               (unsigned int)0x0001\n# define ENGINE_METHOD_DSA               (unsigned int)0x0002\n# define ENGINE_METHOD_DH                (unsigned int)0x0004\n# define ENGINE_METHOD_RAND              (unsigned int)0x0008\n# define ENGINE_METHOD_ECDH              (unsigned int)0x0010\n# define ENGINE_METHOD_ECDSA             (unsigned int)0x0020\n# define ENGINE_METHOD_CIPHERS           (unsigned int)0x0040\n# define ENGINE_METHOD_DIGESTS           (unsigned int)0x0080\n# define ENGINE_METHOD_STORE             (unsigned int)0x0100\n# define ENGINE_METHOD_PKEY_METHS        (unsigned int)0x0200\n# define ENGINE_METHOD_PKEY_ASN1_METHS   (unsigned int)0x0400\n/* Obvious all-or-nothing cases. */\n# define ENGINE_METHOD_ALL               (unsigned int)0xFFFF\n# define ENGINE_METHOD_NONE              (unsigned int)0x0000\n\n/*\n * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used\n * internally to control registration of ENGINE implementations, and can be\n * set by ENGINE_set_table_flags(). The \"NOINIT\" flag prevents attempts to\n * initialise registered ENGINEs if they are not already initialised.\n */\n# define ENGINE_TABLE_FLAG_NOINIT        (unsigned int)0x0001\n\n/* ENGINE flags that can be set by ENGINE_set_flags(). */\n/* Not used */\n/* #define ENGINE_FLAGS_MALLOCED        0x0001 */\n\n/*\n * This flag is for ENGINEs that wish to handle the various 'CMD'-related\n * control commands on their own. Without this flag, ENGINE_ctrl() handles\n * these control commands on behalf of the ENGINE using their \"cmd_defns\"\n * data.\n */\n# define ENGINE_FLAGS_MANUAL_CMD_CTRL    (int)0x0002\n\n/*\n * This flag is for ENGINEs who return new duplicate structures when found\n * via \"ENGINE_by_id()\". When an ENGINE must store state (eg. if\n * ENGINE_ctrl() commands are called in sequence as part of some stateful\n * process like key-generation setup and execution), it can set this flag -\n * then each attempt to obtain the ENGINE will result in it being copied into\n * a new structure. Normally, ENGINEs don't declare this flag so\n * ENGINE_by_id() just increments the existing ENGINE's structural reference\n * count.\n */\n# define ENGINE_FLAGS_BY_ID_COPY         (int)0x0004\n\n/*\n * This flag if for an ENGINE that does not want its methods registered as\n * part of ENGINE_register_all_complete() for example if the methods are not\n * usable as default methods.\n */\n\n# define ENGINE_FLAGS_NO_REGISTER_ALL    (int)0x0008\n\n/*\n * ENGINEs can support their own command types, and these flags are used in\n * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input\n * each command expects. Currently only numeric and string input is\n * supported. If a control command supports none of the _NUMERIC, _STRING, or\n * _NO_INPUT options, then it is regarded as an \"internal\" control command -\n * and not for use in config setting situations. As such, they're not\n * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl()\n * access. Changes to this list of 'command types' should be reflected\n * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string().\n */\n\n/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */\n# define ENGINE_CMD_FLAG_NUMERIC         (unsigned int)0x0001\n/*\n * accepts string input (cast from 'void*' to 'const char *', 4th parameter\n * to ENGINE_ctrl)\n */\n# define ENGINE_CMD_FLAG_STRING          (unsigned int)0x0002\n/*\n * Indicates that the control command takes *no* input. Ie. the control\n * command is unparameterised.\n */\n# define ENGINE_CMD_FLAG_NO_INPUT        (unsigned int)0x0004\n/*\n * Indicates that the control command is internal. This control command won't\n * be shown in any output, and is only usable through the ENGINE_ctrl_cmd()\n * function.\n */\n# define ENGINE_CMD_FLAG_INTERNAL        (unsigned int)0x0008\n\n/*\n * NB: These 3 control commands are deprecated and should not be used.\n * ENGINEs relying on these commands should compile conditional support for\n * compatibility (eg. if these symbols are defined) but should also migrate\n * the same functionality to their own ENGINE-specific control functions that\n * can be \"discovered\" by calling applications. The fact these control\n * commands wouldn't be \"executable\" (ie. usable by text-based config)\n * doesn't change the fact that application code can find and use them\n * without requiring per-ENGINE hacking.\n */\n\n/*\n * These flags are used to tell the ctrl function what should be done. All\n * command numbers are shared between all engines, even if some don't make\n * sense to some engines.  In such a case, they do nothing but return the\n * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED.\n */\n# define ENGINE_CTRL_SET_LOGSTREAM               1\n# define ENGINE_CTRL_SET_PASSWORD_CALLBACK       2\n# define ENGINE_CTRL_HUP                         3/* Close and reinitialise\n                                                   * any handles/connections\n                                                   * etc. */\n# define ENGINE_CTRL_SET_USER_INTERFACE          4/* Alternative to callback */\n# define ENGINE_CTRL_SET_CALLBACK_DATA           5/* User-specific data, used\n                                                   * when calling the password\n                                                   * callback and the user\n                                                   * interface */\n# define ENGINE_CTRL_LOAD_CONFIGURATION          6/* Load a configuration,\n                                                   * given a string that\n                                                   * represents a file name\n                                                   * or so */\n# define ENGINE_CTRL_LOAD_SECTION                7/* Load data from a given\n                                                   * section in the already\n                                                   * loaded configuration */\n\n/*\n * These control commands allow an application to deal with an arbitrary\n * engine in a dynamic way. Warn: Negative return values indicate errors FOR\n * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other\n * commands, including ENGINE-specific command types, return zero for an\n * error. An ENGINE can choose to implement these ctrl functions, and can\n * internally manage things however it chooses - it does so by setting the\n * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise\n * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the\n * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's\n * ctrl() handler need only implement its own commands - the above \"meta\"\n * commands will be taken care of.\n */\n\n/*\n * Returns non-zero if the supplied ENGINE has a ctrl() handler. If \"not\",\n * then all the remaining control commands will return failure, so it is\n * worth checking this first if the caller is trying to \"discover\" the\n * engine's capabilities and doesn't want errors generated unnecessarily.\n */\n# define ENGINE_CTRL_HAS_CTRL_FUNCTION           10\n/*\n * Returns a positive command number for the first command supported by the\n * engine. Returns zero if no ctrl commands are supported.\n */\n# define ENGINE_CTRL_GET_FIRST_CMD_TYPE          11\n/*\n * The 'long' argument specifies a command implemented by the engine, and the\n * return value is the next command supported, or zero if there are no more.\n */\n# define ENGINE_CTRL_GET_NEXT_CMD_TYPE           12\n/*\n * The 'void*' argument is a command name (cast from 'const char *'), and the\n * return value is the command that corresponds to it.\n */\n# define ENGINE_CTRL_GET_CMD_FROM_NAME           13\n/*\n * The next two allow a command to be converted into its corresponding string\n * form. In each case, the 'long' argument supplies the command. In the\n * NAME_LEN case, the return value is the length of the command name (not\n * counting a trailing EOL). In the NAME case, the 'void*' argument must be a\n * string buffer large enough, and it will be populated with the name of the\n * command (WITH a trailing EOL).\n */\n# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD       14\n# define ENGINE_CTRL_GET_NAME_FROM_CMD           15\n/* The next two are similar but give a \"short description\" of a command. */\n# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD       16\n# define ENGINE_CTRL_GET_DESC_FROM_CMD           17\n/*\n * With this command, the return value is the OR'd combination of\n * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given\n * engine-specific ctrl command expects.\n */\n# define ENGINE_CTRL_GET_CMD_FLAGS               18\n\n/*\n * ENGINE implementations should start the numbering of their own control\n * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc).\n */\n# define ENGINE_CMD_BASE                         200\n\n/*\n * NB: These 2 nCipher \"chil\" control commands are deprecated, and their\n * functionality is now available through ENGINE-specific control commands\n * (exposed through the above-mentioned 'CMD'-handling). Code using these 2\n * commands should be migrated to the more general command handling before\n * these are removed.\n */\n\n/* Flags specific to the nCipher \"chil\" engine */\n# define ENGINE_CTRL_CHIL_SET_FORKCHECK          100\n        /*\n         * Depending on the value of the (long)i argument, this sets or\n         * unsets the SimpleForkCheck flag in the CHIL API to enable or\n         * disable checking and workarounds for applications that fork().\n         */\n# define ENGINE_CTRL_CHIL_NO_LOCKING             101\n        /*\n         * This prevents the initialisation function from providing mutex\n         * callbacks to the nCipher library.\n         */\n\n/*\n * If an ENGINE supports its own specific control commands and wishes the\n * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on\n * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN\n * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl()\n * handler that supports the stated commands (ie. the \"cmd_num\" entries as\n * described by the array). NB: The array must be ordered in increasing order\n * of cmd_num. \"null-terminated\" means that the last ENGINE_CMD_DEFN element\n * has cmd_num set to zero and/or cmd_name set to NULL.\n */\ntypedef struct ENGINE_CMD_DEFN_st {\n    unsigned int cmd_num;       /* The command number */\n    const char *cmd_name;       /* The command name itself */\n    const char *cmd_desc;       /* A short description of the command */\n    unsigned int cmd_flags;     /* The input the command expects */\n} ENGINE_CMD_DEFN;\n\n/* Generic function pointer */\ntypedef int (*ENGINE_GEN_FUNC_PTR) (void);\n/* Generic function pointer taking no arguments */\ntypedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *);\n/* Specific control function pointer */\ntypedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *,\n                                     void (*f) (void));\n/* Generic load_key function pointer */\ntypedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *,\n                                         UI_METHOD *ui_method,\n                                         void *callback_data);\ntypedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl,\n                                           STACK_OF(X509_NAME) *ca_dn,\n                                           X509 **pcert, EVP_PKEY **pkey,\n                                           STACK_OF(X509) **pother,\n                                           UI_METHOD *ui_method,\n                                           void *callback_data);\n/*-\n * These callback types are for an ENGINE's handler for cipher and digest logic.\n * These handlers have these prototypes;\n *   int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid);\n *   int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid);\n * Looking at how to implement these handlers in the case of cipher support, if\n * the framework wants the EVP_CIPHER for 'nid', it will call;\n *   foo(e, &p_evp_cipher, NULL, nid);    (return zero for failure)\n * If the framework wants a list of supported 'nid's, it will call;\n *   foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error)\n */\n/*\n * Returns to a pointer to the array of supported cipher 'nid's. If the\n * second parameter is non-NULL it is set to the size of the returned array.\n */\ntypedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **,\n                                   const int **, int);\ntypedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **,\n                                   int);\ntypedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **,\n                                      const int **, int);\ntypedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **,\n                                           const int **, int);\n/*\n * STRUCTURE functions ... all of these functions deal with pointers to\n * ENGINE structures where the pointers have a \"structural reference\". This\n * means that their reference is to allowed access to the structure but it\n * does not imply that the structure is functional. To simply increment or\n * decrement the structural reference count, use ENGINE_by_id and\n * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next\n * as it will automatically decrement the structural reference count of the\n * \"current\" ENGINE and increment the structural reference count of the\n * ENGINE it returns (unless it is NULL).\n */\n\n/* Get the first/last \"ENGINE\" type available. */\nENGINE *ENGINE_get_first(void);\nENGINE *ENGINE_get_last(void);\n/* Iterate to the next/previous \"ENGINE\" type (NULL = end of the list). */\nENGINE *ENGINE_get_next(ENGINE *e);\nENGINE *ENGINE_get_prev(ENGINE *e);\n/* Add another \"ENGINE\" type into the array. */\nint ENGINE_add(ENGINE *e);\n/* Remove an existing \"ENGINE\" type from the array. */\nint ENGINE_remove(ENGINE *e);\n/* Retrieve an engine from the list by its unique \"id\" value. */\nENGINE *ENGINE_by_id(const char *id);\n/* Add all the built-in engines. */\nvoid ENGINE_load_openssl(void);\nvoid ENGINE_load_dynamic(void);\n# ifndef OPENSSL_NO_STATIC_ENGINE\nvoid ENGINE_load_4758cca(void);\nvoid ENGINE_load_aep(void);\nvoid ENGINE_load_atalla(void);\nvoid ENGINE_load_chil(void);\nvoid ENGINE_load_cswift(void);\nvoid ENGINE_load_nuron(void);\nvoid ENGINE_load_sureware(void);\nvoid ENGINE_load_ubsec(void);\nvoid ENGINE_load_padlock(void);\nvoid ENGINE_load_capi(void);\n#  ifndef OPENSSL_NO_GMP\nvoid ENGINE_load_gmp(void);\n#  endif\n#  ifndef OPENSSL_NO_GOST\nvoid ENGINE_load_gost(void);\n#  endif\n# endif\nvoid ENGINE_load_cryptodev(void);\nvoid ENGINE_load_rdrand(void);\nvoid ENGINE_load_builtin_engines(void);\n\n/*\n * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation\n * \"registry\" handling.\n */\nunsigned int ENGINE_get_table_flags(void);\nvoid ENGINE_set_table_flags(unsigned int flags);\n\n/*- Manage registration of ENGINEs per \"table\". For each type, there are 3\n * functions;\n *   ENGINE_register_***(e) - registers the implementation from 'e' (if it has one)\n *   ENGINE_unregister_***(e) - unregister the implementation from 'e'\n *   ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list\n * Cleanup is automatically registered from each table when required, so\n * ENGINE_cleanup() will reverse any \"register\" operations.\n */\n\nint ENGINE_register_RSA(ENGINE *e);\nvoid ENGINE_unregister_RSA(ENGINE *e);\nvoid ENGINE_register_all_RSA(void);\n\nint ENGINE_register_DSA(ENGINE *e);\nvoid ENGINE_unregister_DSA(ENGINE *e);\nvoid ENGINE_register_all_DSA(void);\n\nint ENGINE_register_ECDH(ENGINE *e);\nvoid ENGINE_unregister_ECDH(ENGINE *e);\nvoid ENGINE_register_all_ECDH(void);\n\nint ENGINE_register_ECDSA(ENGINE *e);\nvoid ENGINE_unregister_ECDSA(ENGINE *e);\nvoid ENGINE_register_all_ECDSA(void);\n\nint ENGINE_register_DH(ENGINE *e);\nvoid ENGINE_unregister_DH(ENGINE *e);\nvoid ENGINE_register_all_DH(void);\n\nint ENGINE_register_RAND(ENGINE *e);\nvoid ENGINE_unregister_RAND(ENGINE *e);\nvoid ENGINE_register_all_RAND(void);\n\nint ENGINE_register_STORE(ENGINE *e);\nvoid ENGINE_unregister_STORE(ENGINE *e);\nvoid ENGINE_register_all_STORE(void);\n\nint ENGINE_register_ciphers(ENGINE *e);\nvoid ENGINE_unregister_ciphers(ENGINE *e);\nvoid ENGINE_register_all_ciphers(void);\n\nint ENGINE_register_digests(ENGINE *e);\nvoid ENGINE_unregister_digests(ENGINE *e);\nvoid ENGINE_register_all_digests(void);\n\nint ENGINE_register_pkey_meths(ENGINE *e);\nvoid ENGINE_unregister_pkey_meths(ENGINE *e);\nvoid ENGINE_register_all_pkey_meths(void);\n\nint ENGINE_register_pkey_asn1_meths(ENGINE *e);\nvoid ENGINE_unregister_pkey_asn1_meths(ENGINE *e);\nvoid ENGINE_register_all_pkey_asn1_meths(void);\n\n/*\n * These functions register all support from the above categories. Note, use\n * of these functions can result in static linkage of code your application\n * may not need. If you only need a subset of functionality, consider using\n * more selective initialisation.\n */\nint ENGINE_register_complete(ENGINE *e);\nint ENGINE_register_all_complete(void);\n\n/*\n * Send parametrised control commands to the engine. The possibilities to\n * send down an integer, a pointer to data or a function pointer are\n * provided. Any of the parameters may or may not be NULL, depending on the\n * command number. In actuality, this function only requires a structural\n * (rather than functional) reference to an engine, but many control commands\n * may require the engine be functional. The caller should be aware of trying\n * commands that require an operational ENGINE, and only use functional\n * references in such situations.\n */\nint ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void));\n\n/*\n * This function tests if an ENGINE-specific command is usable as a\n * \"setting\". Eg. in an application's config file that gets processed through\n * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to\n * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl().\n */\nint ENGINE_cmd_is_executable(ENGINE *e, int cmd);\n\n/*\n * This function works like ENGINE_ctrl() with the exception of taking a\n * command name instead of a command number, and can handle optional\n * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation\n * on how to use the cmd_name and cmd_optional.\n */\nint ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name,\n                    long i, void *p, void (*f) (void), int cmd_optional);\n\n/*\n * This function passes a command-name and argument to an ENGINE. The\n * cmd_name is converted to a command number and the control command is\n * called using 'arg' as an argument (unless the ENGINE doesn't support such\n * a command, in which case no control command is called). The command is\n * checked for input flags, and if necessary the argument will be converted\n * to a numeric value. If cmd_optional is non-zero, then if the ENGINE\n * doesn't support the given cmd_name the return value will be success\n * anyway. This function is intended for applications to use so that users\n * (or config files) can supply engine-specific config data to the ENGINE at\n * run-time to control behaviour of specific engines. As such, it shouldn't\n * be used for calling ENGINE_ctrl() functions that return data, deal with\n * binary data, or that are otherwise supposed to be used directly through\n * ENGINE_ctrl() in application code. Any \"return\" data from an ENGINE_ctrl()\n * operation in this function will be lost - the return value is interpreted\n * as failure if the return value is zero, success otherwise, and this\n * function returns a boolean value as a result. In other words, vendors of\n * 'ENGINE'-enabled devices should write ENGINE implementations with\n * parameterisations that work in this scheme, so that compliant ENGINE-based\n * applications can work consistently with the same configuration for the\n * same ENGINE-enabled devices, across applications.\n */\nint ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg,\n                           int cmd_optional);\n\n/*\n * These functions are useful for manufacturing new ENGINE structures. They\n * don't address reference counting at all - one uses them to populate an\n * ENGINE structure with personalised implementations of things prior to\n * using it directly or adding it to the builtin ENGINE list in OpenSSL.\n * These are also here so that the ENGINE structure doesn't have to be\n * exposed and break binary compatibility!\n */\nENGINE *ENGINE_new(void);\nint ENGINE_free(ENGINE *e);\nint ENGINE_up_ref(ENGINE *e);\nint ENGINE_set_id(ENGINE *e, const char *id);\nint ENGINE_set_name(ENGINE *e, const char *name);\nint ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth);\nint ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth);\nint ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *ecdh_meth);\nint ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *ecdsa_meth);\nint ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth);\nint ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth);\nint ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *store_meth);\nint ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f);\nint ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f);\nint ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f);\nint ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f);\nint ENGINE_set_load_privkey_function(ENGINE *e,\n                                     ENGINE_LOAD_KEY_PTR loadpriv_f);\nint ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f);\nint ENGINE_set_load_ssl_client_cert_function(ENGINE *e,\n                                             ENGINE_SSL_CLIENT_CERT_PTR\n                                             loadssl_f);\nint ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f);\nint ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f);\nint ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f);\nint ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f);\nint ENGINE_set_flags(ENGINE *e, int flags);\nint ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns);\n/* These functions allow control over any per-structure ENGINE data. */\nint ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                            CRYPTO_EX_dup *dup_func,\n                            CRYPTO_EX_free *free_func);\nint ENGINE_set_ex_data(ENGINE *e, int idx, void *arg);\nvoid *ENGINE_get_ex_data(const ENGINE *e, int idx);\n\n/*\n * This function cleans up anything that needs it. Eg. the ENGINE_add()\n * function automatically ensures the list cleanup function is registered to\n * be called from ENGINE_cleanup(). Similarly, all ENGINE_register_***\n * functions ensure ENGINE_cleanup() will clean up after them.\n */\nvoid ENGINE_cleanup(void);\n\n/*\n * These return values from within the ENGINE structure. These can be useful\n * with functional references as well as structural references - it depends\n * which you obtained. Using the result for functional purposes if you only\n * obtained a structural reference may be problematic!\n */\nconst char *ENGINE_get_id(const ENGINE *e);\nconst char *ENGINE_get_name(const ENGINE *e);\nconst RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);\nconst DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);\nconst ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e);\nconst ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e);\nconst DH_METHOD *ENGINE_get_DH(const ENGINE *e);\nconst RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);\nconst STORE_METHOD *ENGINE_get_STORE(const ENGINE *e);\nENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e);\nENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e);\nENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e);\nENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e);\nENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e);\nENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e);\nENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE\n                                                               *e);\nENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e);\nENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e);\nENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e);\nENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e);\nconst EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid);\nconst EVP_MD *ENGINE_get_digest(ENGINE *e, int nid);\nconst EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid);\nconst EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid);\nconst EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e,\n                                                          const char *str,\n                                                          int len);\nconst EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe,\n                                                      const char *str,\n                                                      int len);\nconst ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e);\nint ENGINE_get_flags(const ENGINE *e);\n\n/*\n * FUNCTIONAL functions. These functions deal with ENGINE structures that\n * have (or will) be initialised for use. Broadly speaking, the structural\n * functions are useful for iterating the list of available engine types,\n * creating new engine types, and other \"list\" operations. These functions\n * actually deal with ENGINEs that are to be used. As such these functions\n * can fail (if applicable) when particular engines are unavailable - eg. if\n * a hardware accelerator is not attached or not functioning correctly. Each\n * ENGINE has 2 reference counts; structural and functional. Every time a\n * functional reference is obtained or released, a corresponding structural\n * reference is automatically obtained or released too.\n */\n\n/*\n * Initialise a engine type for use (or up its reference count if it's\n * already in use). This will fail if the engine is not currently operational\n * and cannot initialise.\n */\nint ENGINE_init(ENGINE *e);\n/*\n * Free a functional reference to a engine type. This does not require a\n * corresponding call to ENGINE_free as it also releases a structural\n * reference.\n */\nint ENGINE_finish(ENGINE *e);\n\n/*\n * The following functions handle keys that are stored in some secondary\n * location, handled by the engine.  The storage may be on a card or\n * whatever.\n */\nEVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,\n                                  UI_METHOD *ui_method, void *callback_data);\nEVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,\n                                 UI_METHOD *ui_method, void *callback_data);\nint ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s,\n                                STACK_OF(X509_NAME) *ca_dn, X509 **pcert,\n                                EVP_PKEY **ppkey, STACK_OF(X509) **pother,\n                                UI_METHOD *ui_method, void *callback_data);\n\n/*\n * This returns a pointer for the current ENGINE structure that is (by\n * default) performing any RSA operations. The value returned is an\n * incremented reference, so it should be free'd (ENGINE_finish) before it is\n * discarded.\n */\nENGINE *ENGINE_get_default_RSA(void);\n/* Same for the other \"methods\" */\nENGINE *ENGINE_get_default_DSA(void);\nENGINE *ENGINE_get_default_ECDH(void);\nENGINE *ENGINE_get_default_ECDSA(void);\nENGINE *ENGINE_get_default_DH(void);\nENGINE *ENGINE_get_default_RAND(void);\n/*\n * These functions can be used to get a functional reference to perform\n * ciphering or digesting corresponding to \"nid\".\n */\nENGINE *ENGINE_get_cipher_engine(int nid);\nENGINE *ENGINE_get_digest_engine(int nid);\nENGINE *ENGINE_get_pkey_meth_engine(int nid);\nENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid);\n\n/*\n * This sets a new default ENGINE structure for performing RSA operations. If\n * the result is non-zero (success) then the ENGINE structure will have had\n * its reference count up'd so the caller should still free their own\n * reference 'e'.\n */\nint ENGINE_set_default_RSA(ENGINE *e);\nint ENGINE_set_default_string(ENGINE *e, const char *def_list);\n/* Same for the other \"methods\" */\nint ENGINE_set_default_DSA(ENGINE *e);\nint ENGINE_set_default_ECDH(ENGINE *e);\nint ENGINE_set_default_ECDSA(ENGINE *e);\nint ENGINE_set_default_DH(ENGINE *e);\nint ENGINE_set_default_RAND(ENGINE *e);\nint ENGINE_set_default_ciphers(ENGINE *e);\nint ENGINE_set_default_digests(ENGINE *e);\nint ENGINE_set_default_pkey_meths(ENGINE *e);\nint ENGINE_set_default_pkey_asn1_meths(ENGINE *e);\n\n/*\n * The combination \"set\" - the flags are bitwise \"OR\"d from the\n * ENGINE_METHOD_*** defines above. As with the \"ENGINE_register_complete()\"\n * function, this function can result in unnecessary static linkage. If your\n * application requires only specific functionality, consider using more\n * selective functions.\n */\nint ENGINE_set_default(ENGINE *e, unsigned int flags);\n\nvoid ENGINE_add_conf_module(void);\n\n/* Deprecated functions ... */\n/* int ENGINE_clear_defaults(void); */\n\n/**************************/\n/* DYNAMIC ENGINE SUPPORT */\n/**************************/\n\n/* Binary/behaviour compatibility levels */\n# define OSSL_DYNAMIC_VERSION            (unsigned long)0x00020000\n/*\n * Binary versions older than this are too old for us (whether we're a loader\n * or a loadee)\n */\n# define OSSL_DYNAMIC_OLDEST             (unsigned long)0x00020000\n\n/*\n * When compiling an ENGINE entirely as an external shared library, loadable\n * by the \"dynamic\" ENGINE, these types are needed. The 'dynamic_fns'\n * structure type provides the calling application's (or library's) error\n * functionality and memory management function pointers to the loaded\n * library. These should be used/set in the loaded library code so that the\n * loading application's 'state' will be used/changed in all operations. The\n * 'static_state' pointer allows the loaded library to know if it shares the\n * same static data as the calling application (or library), and thus whether\n * these callbacks need to be set or not.\n */\ntypedef void *(*dyn_MEM_malloc_cb) (size_t);\ntypedef void *(*dyn_MEM_realloc_cb) (void *, size_t);\ntypedef void (*dyn_MEM_free_cb) (void *);\ntypedef struct st_dynamic_MEM_fns {\n    dyn_MEM_malloc_cb malloc_cb;\n    dyn_MEM_realloc_cb realloc_cb;\n    dyn_MEM_free_cb free_cb;\n} dynamic_MEM_fns;\n/*\n * FIXME: Perhaps the memory and locking code (crypto.h) should declare and\n * use these types so we (and any other dependant code) can simplify a bit??\n */\ntypedef void (*dyn_lock_locking_cb) (int, int, const char *, int);\ntypedef int (*dyn_lock_add_lock_cb) (int *, int, int, const char *, int);\ntypedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb) (const char *,\n                                                               int);\ntypedef void (*dyn_dynlock_lock_cb) (int, struct CRYPTO_dynlock_value *,\n                                     const char *, int);\ntypedef void (*dyn_dynlock_destroy_cb) (struct CRYPTO_dynlock_value *,\n                                        const char *, int);\ntypedef struct st_dynamic_LOCK_fns {\n    dyn_lock_locking_cb lock_locking_cb;\n    dyn_lock_add_lock_cb lock_add_lock_cb;\n    dyn_dynlock_create_cb dynlock_create_cb;\n    dyn_dynlock_lock_cb dynlock_lock_cb;\n    dyn_dynlock_destroy_cb dynlock_destroy_cb;\n} dynamic_LOCK_fns;\n/* The top-level structure */\ntypedef struct st_dynamic_fns {\n    void *static_state;\n    const ERR_FNS *err_fns;\n    const CRYPTO_EX_DATA_IMPL *ex_data_fns;\n    dynamic_MEM_fns mem_fns;\n    dynamic_LOCK_fns lock_fns;\n} dynamic_fns;\n\n/*\n * The version checking function should be of this prototype. NB: The\n * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading\n * code. If this function returns zero, it indicates a (potential) version\n * incompatibility and the loaded library doesn't believe it can proceed.\n * Otherwise, the returned value is the (latest) version supported by the\n * loading library. The loader may still decide that the loaded code's\n * version is unsatisfactory and could veto the load. The function is\n * expected to be implemented with the symbol name \"v_check\", and a default\n * implementation can be fully instantiated with\n * IMPLEMENT_DYNAMIC_CHECK_FN().\n */\ntypedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version);\n# define IMPLEMENT_DYNAMIC_CHECK_FN() \\\n        OPENSSL_EXPORT unsigned long v_check(unsigned long v); \\\n        OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \\\n                if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \\\n                return 0; }\n\n/*\n * This function is passed the ENGINE structure to initialise with its own\n * function and command settings. It should not adjust the structural or\n * functional reference counts. If this function returns zero, (a) the load\n * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto\n * the structure, and (c) the shared library will be unloaded. So\n * implementations should do their own internal cleanup in failure\n * circumstances otherwise they could leak. The 'id' parameter, if non-NULL,\n * represents the ENGINE id that the loader is looking for. If this is NULL,\n * the shared library can choose to return failure or to initialise a\n * 'default' ENGINE. If non-NULL, the shared library must initialise only an\n * ENGINE matching the passed 'id'. The function is expected to be\n * implemented with the symbol name \"bind_engine\". A standard implementation\n * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter\n * 'fn' is a callback function that populates the ENGINE structure and\n * returns an int value (zero for failure). 'fn' should have prototype;\n * [static] int fn(ENGINE *e, const char *id);\n */\ntypedef int (*dynamic_bind_engine) (ENGINE *e, const char *id,\n                                    const dynamic_fns *fns);\n# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \\\n        OPENSSL_EXPORT \\\n        int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \\\n        OPENSSL_EXPORT \\\n        int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \\\n                if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \\\n                if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \\\n                        fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \\\n                        return 0; \\\n                CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \\\n                CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \\\n                CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \\\n                CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \\\n                CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \\\n                if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \\\n                        return 0; \\\n                if(!ERR_set_implementation(fns->err_fns)) return 0; \\\n        skip_cbs: \\\n                if(!fn(e,id)) return 0; \\\n                return 1; }\n\n/*\n * If the loading application (or library) and the loaded ENGINE library\n * share the same static data (eg. they're both dynamically linked to the\n * same libcrypto.so) we need a way to avoid trying to set system callbacks -\n * this would fail, and for the same reason that it's unnecessary to try. If\n * the loaded ENGINE has (or gets from through the loader) its own copy of\n * the libcrypto static data, we will need to set the callbacks. The easiest\n * way to detect this is to have a function that returns a pointer to some\n * static data and let the loading application and loaded ENGINE compare\n * their respective values.\n */\nvoid *ENGINE_get_static_state(void);\n\n# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV)\nvoid ENGINE_setup_bsd_cryptodev(void);\n# endif\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_ENGINE_strings(void);\n\n/* Error codes for the ENGINE functions. */\n\n/* Function codes. */\n# define ENGINE_F_DYNAMIC_CTRL                            180\n# define ENGINE_F_DYNAMIC_GET_DATA_CTX                    181\n# define ENGINE_F_DYNAMIC_LOAD                            182\n# define ENGINE_F_DYNAMIC_SET_DATA_CTX                    183\n# define ENGINE_F_ENGINE_ADD                              105\n# define ENGINE_F_ENGINE_BY_ID                            106\n# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE                170\n# define ENGINE_F_ENGINE_CTRL                             142\n# define ENGINE_F_ENGINE_CTRL_CMD                         178\n# define ENGINE_F_ENGINE_CTRL_CMD_STRING                  171\n# define ENGINE_F_ENGINE_FINISH                           107\n# define ENGINE_F_ENGINE_FREE_UTIL                        108\n# define ENGINE_F_ENGINE_GET_CIPHER                       185\n# define ENGINE_F_ENGINE_GET_DEFAULT_TYPE                 177\n# define ENGINE_F_ENGINE_GET_DIGEST                       186\n# define ENGINE_F_ENGINE_GET_NEXT                         115\n# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH               193\n# define ENGINE_F_ENGINE_GET_PKEY_METH                    192\n# define ENGINE_F_ENGINE_GET_PREV                         116\n# define ENGINE_F_ENGINE_INIT                             119\n# define ENGINE_F_ENGINE_LIST_ADD                         120\n# define ENGINE_F_ENGINE_LIST_REMOVE                      121\n# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY                 150\n# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY                  151\n# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT             194\n# define ENGINE_F_ENGINE_NEW                              122\n# define ENGINE_F_ENGINE_REMOVE                           123\n# define ENGINE_F_ENGINE_SET_DEFAULT_STRING               189\n# define ENGINE_F_ENGINE_SET_DEFAULT_TYPE                 126\n# define ENGINE_F_ENGINE_SET_ID                           129\n# define ENGINE_F_ENGINE_SET_NAME                         130\n# define ENGINE_F_ENGINE_TABLE_REGISTER                   184\n# define ENGINE_F_ENGINE_UNLOAD_KEY                       152\n# define ENGINE_F_ENGINE_UNLOCKED_FINISH                  191\n# define ENGINE_F_ENGINE_UP_REF                           190\n# define ENGINE_F_INT_CTRL_HELPER                         172\n# define ENGINE_F_INT_ENGINE_CONFIGURE                    188\n# define ENGINE_F_INT_ENGINE_MODULE_INIT                  187\n# define ENGINE_F_LOG_MESSAGE                             141\n\n/* Reason codes. */\n# define ENGINE_R_ALREADY_LOADED                          100\n# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER                133\n# define ENGINE_R_CMD_NOT_EXECUTABLE                      134\n# define ENGINE_R_COMMAND_TAKES_INPUT                     135\n# define ENGINE_R_COMMAND_TAKES_NO_INPUT                  136\n# define ENGINE_R_CONFLICTING_ENGINE_ID                   103\n# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED            119\n# define ENGINE_R_DH_NOT_IMPLEMENTED                      139\n# define ENGINE_R_DSA_NOT_IMPLEMENTED                     140\n# define ENGINE_R_DSO_FAILURE                             104\n# define ENGINE_R_DSO_NOT_FOUND                           132\n# define ENGINE_R_ENGINES_SECTION_ERROR                   148\n# define ENGINE_R_ENGINE_CONFIGURATION_ERROR              102\n# define ENGINE_R_ENGINE_IS_NOT_IN_LIST                   105\n# define ENGINE_R_ENGINE_SECTION_ERROR                    149\n# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY              128\n# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY               129\n# define ENGINE_R_FINISH_FAILED                           106\n# define ENGINE_R_GET_HANDLE_FAILED                       107\n# define ENGINE_R_ID_OR_NAME_MISSING                      108\n# define ENGINE_R_INIT_FAILED                             109\n# define ENGINE_R_INTERNAL_LIST_ERROR                     110\n# define ENGINE_R_INVALID_ARGUMENT                        143\n# define ENGINE_R_INVALID_CMD_NAME                        137\n# define ENGINE_R_INVALID_CMD_NUMBER                      138\n# define ENGINE_R_INVALID_INIT_VALUE                      151\n# define ENGINE_R_INVALID_STRING                          150\n# define ENGINE_R_NOT_INITIALISED                         117\n# define ENGINE_R_NOT_LOADED                              112\n# define ENGINE_R_NO_CONTROL_FUNCTION                     120\n# define ENGINE_R_NO_INDEX                                144\n# define ENGINE_R_NO_LOAD_FUNCTION                        125\n# define ENGINE_R_NO_REFERENCE                            130\n# define ENGINE_R_NO_SUCH_ENGINE                          116\n# define ENGINE_R_NO_UNLOAD_FUNCTION                      126\n# define ENGINE_R_PROVIDE_PARAMETERS                      113\n# define ENGINE_R_RSA_NOT_IMPLEMENTED                     141\n# define ENGINE_R_UNIMPLEMENTED_CIPHER                    146\n# define ENGINE_R_UNIMPLEMENTED_DIGEST                    147\n# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD         101\n# define ENGINE_R_VERSION_INCOMPATIBILITY                 145\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/err.h",
    "content": "/* crypto/err/err.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_ERR_H\n# define HEADER_ERR_H\n\n# include <openssl/e_os2.h>\n\n# ifndef OPENSSL_NO_FP_API\n#  include <stdio.h>\n#  include <stdlib.h>\n# endif\n\n# include <openssl/ossl_typ.h>\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# ifndef OPENSSL_NO_LHASH\n#  include <openssl/lhash.h>\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifndef OPENSSL_NO_ERR\n#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,d,e)\n# else\n#  define ERR_PUT_error(a,b,c,d,e)        ERR_put_error(a,b,c,NULL,0)\n# endif\n\n# include <errno.h>\n\n# define ERR_TXT_MALLOCED        0x01\n# define ERR_TXT_STRING          0x02\n\n# define ERR_FLAG_MARK           0x01\n\n# define ERR_NUM_ERRORS  16\ntypedef struct err_state_st {\n    CRYPTO_THREADID tid;\n    int err_flags[ERR_NUM_ERRORS];\n    unsigned long err_buffer[ERR_NUM_ERRORS];\n    char *err_data[ERR_NUM_ERRORS];\n    int err_data_flags[ERR_NUM_ERRORS];\n    const char *err_file[ERR_NUM_ERRORS];\n    int err_line[ERR_NUM_ERRORS];\n    int top, bottom;\n} ERR_STATE;\n\n/* library */\n# define ERR_LIB_NONE            1\n# define ERR_LIB_SYS             2\n# define ERR_LIB_BN              3\n# define ERR_LIB_RSA             4\n# define ERR_LIB_DH              5\n# define ERR_LIB_EVP             6\n# define ERR_LIB_BUF             7\n# define ERR_LIB_OBJ             8\n# define ERR_LIB_PEM             9\n# define ERR_LIB_DSA             10\n# define ERR_LIB_X509            11\n/* #define ERR_LIB_METH         12 */\n# define ERR_LIB_ASN1            13\n# define ERR_LIB_CONF            14\n# define ERR_LIB_CRYPTO          15\n# define ERR_LIB_EC              16\n# define ERR_LIB_SSL             20\n/* #define ERR_LIB_SSL23        21 */\n/* #define ERR_LIB_SSL2         22 */\n/* #define ERR_LIB_SSL3         23 */\n/* #define ERR_LIB_RSAREF       30 */\n/* #define ERR_LIB_PROXY        31 */\n# define ERR_LIB_BIO             32\n# define ERR_LIB_PKCS7           33\n# define ERR_LIB_X509V3          34\n# define ERR_LIB_PKCS12          35\n# define ERR_LIB_RAND            36\n# define ERR_LIB_DSO             37\n# define ERR_LIB_ENGINE          38\n# define ERR_LIB_OCSP            39\n# define ERR_LIB_UI              40\n# define ERR_LIB_COMP            41\n# define ERR_LIB_ECDSA           42\n# define ERR_LIB_ECDH            43\n# define ERR_LIB_STORE           44\n# define ERR_LIB_FIPS            45\n# define ERR_LIB_CMS             46\n# define ERR_LIB_TS              47\n# define ERR_LIB_HMAC            48\n# define ERR_LIB_JPAKE           49\n\n# define ERR_LIB_USER            128\n\n# define SYSerr(f,r)  ERR_PUT_error(ERR_LIB_SYS,(f),(r),__FILE__,__LINE__)\n# define BNerr(f,r)   ERR_PUT_error(ERR_LIB_BN,(f),(r),__FILE__,__LINE__)\n# define RSAerr(f,r)  ERR_PUT_error(ERR_LIB_RSA,(f),(r),__FILE__,__LINE__)\n# define DHerr(f,r)   ERR_PUT_error(ERR_LIB_DH,(f),(r),__FILE__,__LINE__)\n# define EVPerr(f,r)  ERR_PUT_error(ERR_LIB_EVP,(f),(r),__FILE__,__LINE__)\n# define BUFerr(f,r)  ERR_PUT_error(ERR_LIB_BUF,(f),(r),__FILE__,__LINE__)\n# define OBJerr(f,r)  ERR_PUT_error(ERR_LIB_OBJ,(f),(r),__FILE__,__LINE__)\n# define PEMerr(f,r)  ERR_PUT_error(ERR_LIB_PEM,(f),(r),__FILE__,__LINE__)\n# define DSAerr(f,r)  ERR_PUT_error(ERR_LIB_DSA,(f),(r),__FILE__,__LINE__)\n# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),__FILE__,__LINE__)\n# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),__FILE__,__LINE__)\n# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),__FILE__,__LINE__)\n# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),__FILE__,__LINE__)\n# define ECerr(f,r)   ERR_PUT_error(ERR_LIB_EC,(f),(r),__FILE__,__LINE__)\n# define SSLerr(f,r)  ERR_PUT_error(ERR_LIB_SSL,(f),(r),__FILE__,__LINE__)\n# define BIOerr(f,r)  ERR_PUT_error(ERR_LIB_BIO,(f),(r),__FILE__,__LINE__)\n# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),__FILE__,__LINE__)\n# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),__FILE__,__LINE__)\n# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),__FILE__,__LINE__)\n# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),__FILE__,__LINE__)\n# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),__FILE__,__LINE__)\n# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),__FILE__,__LINE__)\n# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__)\n# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__)\n# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__)\n# define ECDSAerr(f,r)  ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__)\n# define ECDHerr(f,r)  ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__)\n# define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__)\n# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__)\n# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__)\n# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),__FILE__,__LINE__)\n# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),__FILE__,__LINE__)\n# define JPAKEerr(f,r) ERR_PUT_error(ERR_LIB_JPAKE,(f),(r),__FILE__,__LINE__)\n\n/*\n * Borland C seems too stupid to be able to shift and do longs in the\n * pre-processor :-(\n */\n# define ERR_PACK(l,f,r)         (((((unsigned long)l)&0xffL)*0x1000000)| \\\n                                ((((unsigned long)f)&0xfffL)*0x1000)| \\\n                                ((((unsigned long)r)&0xfffL)))\n# define ERR_GET_LIB(l)          (int)((((unsigned long)l)>>24L)&0xffL)\n# define ERR_GET_FUNC(l)         (int)((((unsigned long)l)>>12L)&0xfffL)\n# define ERR_GET_REASON(l)       (int)((l)&0xfffL)\n# define ERR_FATAL_ERROR(l)      (int)((l)&ERR_R_FATAL)\n\n/* OS functions */\n# define SYS_F_FOPEN             1\n# define SYS_F_CONNECT           2\n# define SYS_F_GETSERVBYNAME     3\n# define SYS_F_SOCKET            4\n# define SYS_F_IOCTLSOCKET       5\n# define SYS_F_BIND              6\n# define SYS_F_LISTEN            7\n# define SYS_F_ACCEPT            8\n# define SYS_F_WSASTARTUP        9/* Winsock stuff */\n# define SYS_F_OPENDIR           10\n# define SYS_F_FREAD             11\n\n/* reasons */\n# define ERR_R_SYS_LIB   ERR_LIB_SYS/* 2 */\n# define ERR_R_BN_LIB    ERR_LIB_BN/* 3 */\n# define ERR_R_RSA_LIB   ERR_LIB_RSA/* 4 */\n# define ERR_R_DH_LIB    ERR_LIB_DH/* 5 */\n# define ERR_R_EVP_LIB   ERR_LIB_EVP/* 6 */\n# define ERR_R_BUF_LIB   ERR_LIB_BUF/* 7 */\n# define ERR_R_OBJ_LIB   ERR_LIB_OBJ/* 8 */\n# define ERR_R_PEM_LIB   ERR_LIB_PEM/* 9 */\n# define ERR_R_DSA_LIB   ERR_LIB_DSA/* 10 */\n# define ERR_R_X509_LIB  ERR_LIB_X509/* 11 */\n# define ERR_R_ASN1_LIB  ERR_LIB_ASN1/* 13 */\n# define ERR_R_CONF_LIB  ERR_LIB_CONF/* 14 */\n# define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO/* 15 */\n# define ERR_R_EC_LIB    ERR_LIB_EC/* 16 */\n# define ERR_R_SSL_LIB   ERR_LIB_SSL/* 20 */\n# define ERR_R_BIO_LIB   ERR_LIB_BIO/* 32 */\n# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */\n# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */\n# define ERR_R_PKCS12_LIB ERR_LIB_PKCS12/* 35 */\n# define ERR_R_RAND_LIB  ERR_LIB_RAND/* 36 */\n# define ERR_R_DSO_LIB   ERR_LIB_DSO/* 37 */\n# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */\n# define ERR_R_OCSP_LIB  ERR_LIB_OCSP/* 39 */\n# define ERR_R_UI_LIB    ERR_LIB_UI/* 40 */\n# define ERR_R_COMP_LIB  ERR_LIB_COMP/* 41 */\n# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */\n# define ERR_R_ECDH_LIB  ERR_LIB_ECDH/* 43 */\n# define ERR_R_STORE_LIB ERR_LIB_STORE/* 44 */\n# define ERR_R_TS_LIB    ERR_LIB_TS/* 45 */\n\n# define ERR_R_NESTED_ASN1_ERROR                 58\n# define ERR_R_BAD_ASN1_OBJECT_HEADER            59\n# define ERR_R_BAD_GET_ASN1_OBJECT_CALL          60\n# define ERR_R_EXPECTING_AN_ASN1_SEQUENCE        61\n# define ERR_R_ASN1_LENGTH_MISMATCH              62\n# define ERR_R_MISSING_ASN1_EOS                  63\n\n/* fatal error */\n# define ERR_R_FATAL                             64\n# define ERR_R_MALLOC_FAILURE                    (1|ERR_R_FATAL)\n# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED       (2|ERR_R_FATAL)\n# define ERR_R_PASSED_NULL_PARAMETER             (3|ERR_R_FATAL)\n# define ERR_R_INTERNAL_ERROR                    (4|ERR_R_FATAL)\n# define ERR_R_DISABLED                          (5|ERR_R_FATAL)\n\n/*\n * 99 is the maximum possible ERR_R_... code, higher values are reserved for\n * the individual libraries\n */\n\ntypedef struct ERR_string_data_st {\n    unsigned long error;\n    const char *string;\n} ERR_STRING_DATA;\n\nvoid ERR_put_error(int lib, int func, int reason, const char *file, int line);\nvoid ERR_set_error_data(char *data, int flags);\n\nunsigned long ERR_get_error(void);\nunsigned long ERR_get_error_line(const char **file, int *line);\nunsigned long ERR_get_error_line_data(const char **file, int *line,\n                                      const char **data, int *flags);\nunsigned long ERR_peek_error(void);\nunsigned long ERR_peek_error_line(const char **file, int *line);\nunsigned long ERR_peek_error_line_data(const char **file, int *line,\n                                       const char **data, int *flags);\nunsigned long ERR_peek_last_error(void);\nunsigned long ERR_peek_last_error_line(const char **file, int *line);\nunsigned long ERR_peek_last_error_line_data(const char **file, int *line,\n                                            const char **data, int *flags);\nvoid ERR_clear_error(void);\nchar *ERR_error_string(unsigned long e, char *buf);\nvoid ERR_error_string_n(unsigned long e, char *buf, size_t len);\nconst char *ERR_lib_error_string(unsigned long e);\nconst char *ERR_func_error_string(unsigned long e);\nconst char *ERR_reason_error_string(unsigned long e);\nvoid ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u),\n                         void *u);\n# ifndef OPENSSL_NO_FP_API\nvoid ERR_print_errors_fp(FILE *fp);\n# endif\n# ifndef OPENSSL_NO_BIO\nvoid ERR_print_errors(BIO *bp);\n# endif\nvoid ERR_add_error_data(int num, ...);\nvoid ERR_add_error_vdata(int num, va_list args);\nvoid ERR_load_strings(int lib, ERR_STRING_DATA str[]);\nvoid ERR_unload_strings(int lib, ERR_STRING_DATA str[]);\nvoid ERR_load_ERR_strings(void);\nvoid ERR_load_crypto_strings(void);\nvoid ERR_free_strings(void);\n\nvoid ERR_remove_thread_state(const CRYPTO_THREADID *tid);\n# ifndef OPENSSL_NO_DEPRECATED\nvoid ERR_remove_state(unsigned long pid); /* if zero we look it up */\n# endif\nERR_STATE *ERR_get_state(void);\n\n# ifndef OPENSSL_NO_LHASH\nLHASH_OF(ERR_STRING_DATA) *ERR_get_string_table(void);\nLHASH_OF(ERR_STATE) *ERR_get_err_state_table(void);\nvoid ERR_release_err_state_table(LHASH_OF(ERR_STATE) **hash);\n# endif\n\nint ERR_get_next_error_library(void);\n\nint ERR_set_mark(void);\nint ERR_pop_to_mark(void);\n\n/* Already defined in ossl_typ.h */\n/* typedef struct st_ERR_FNS ERR_FNS; */\n/*\n * An application can use this function and provide the return value to\n * loaded modules that should use the application's ERR state/functionality\n */\nconst ERR_FNS *ERR_get_implementation(void);\n/*\n * A loaded module should call this function prior to any ERR operations\n * using the application's \"ERR_FNS\".\n */\nint ERR_set_implementation(const ERR_FNS *fns);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/evp.h",
    "content": "/* crypto/evp/evp.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_ENVELOPE_H\n# define HEADER_ENVELOPE_H\n\n# ifdef OPENSSL_ALGORITHM_DEFINES\n#  include <openssl/opensslconf.h>\n# else\n#  define OPENSSL_ALGORITHM_DEFINES\n#  include \"openssl/opensslconf.h\"\n#  undef OPENSSL_ALGORITHM_DEFINES\n# endif\n\n# include \"openssl/ossl_typ.h\"\n\n# include \"openssl/symhacks.h\"\n\n# ifndef OPENSSL_NO_BIO\n#  include \"openssl/bio.h\"\n# endif\n\n/*-\n#define EVP_RC2_KEY_SIZE                16\n#define EVP_RC4_KEY_SIZE                16\n#define EVP_BLOWFISH_KEY_SIZE           16\n#define EVP_CAST5_KEY_SIZE              16\n#define EVP_RC5_32_12_16_KEY_SIZE       16\n*/\n# define EVP_MAX_MD_SIZE                 64/* longest known is SHA512 */\n# define EVP_MAX_KEY_LENGTH              64\n# define EVP_MAX_IV_LENGTH               16\n# define EVP_MAX_BLOCK_LENGTH            32\n\n# define PKCS5_SALT_LEN                  8\n/* Default PKCS#5 iteration count */\n# define PKCS5_DEFAULT_ITER              2048\n\n# include \"openssl/objects.h\"\n\n# define EVP_PK_RSA      0x0001\n# define EVP_PK_DSA      0x0002\n# define EVP_PK_DH       0x0004\n# define EVP_PK_EC       0x0008\n# define EVP_PKT_SIGN    0x0010\n# define EVP_PKT_ENC     0x0020\n# define EVP_PKT_EXCH    0x0040\n# define EVP_PKS_RSA     0x0100\n# define EVP_PKS_DSA     0x0200\n# define EVP_PKS_EC      0x0400\n# define EVP_PKT_EXP     0x1000 /* <= 512 bit key */\n\n# define EVP_PKEY_NONE   NID_undef\n# define EVP_PKEY_RSA    NID_rsaEncryption\n# define EVP_PKEY_RSA2   NID_rsa\n# define EVP_PKEY_DSA    NID_dsa\n# define EVP_PKEY_DSA1   NID_dsa_2\n# define EVP_PKEY_DSA2   NID_dsaWithSHA\n# define EVP_PKEY_DSA3   NID_dsaWithSHA1\n# define EVP_PKEY_DSA4   NID_dsaWithSHA1_2\n# define EVP_PKEY_DH     NID_dhKeyAgreement\n# define EVP_PKEY_DHX    NID_dhpublicnumber\n# define EVP_PKEY_EC     NID_X9_62_id_ecPublicKey\n# define EVP_PKEY_HMAC   NID_hmac\n# define EVP_PKEY_CMAC   NID_cmac\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * Type needs to be a bit field Sub-type needs to be for variations on the\n * method, as in, can it do arbitrary encryption....\n */\nstruct evp_pkey_st {\n    int type;\n    int save_type;\n    int references;\n    const EVP_PKEY_ASN1_METHOD *ameth;\n    ENGINE *engine;\n    union {\n        char *ptr;\n# ifndef OPENSSL_NO_RSA\n        struct rsa_st *rsa;     /* RSA */\n# endif\n# ifndef OPENSSL_NO_DSA\n        struct dsa_st *dsa;     /* DSA */\n# endif\n# ifndef OPENSSL_NO_DH\n        struct dh_st *dh;       /* DH */\n# endif\n# ifndef OPENSSL_NO_EC\n        struct ec_key_st *ec;   /* ECC */\n# endif\n    } pkey;\n    int save_parameters;\n    STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */\n} /* EVP_PKEY */ ;\n\n# define EVP_PKEY_MO_SIGN        0x0001\n# define EVP_PKEY_MO_VERIFY      0x0002\n# define EVP_PKEY_MO_ENCRYPT     0x0004\n# define EVP_PKEY_MO_DECRYPT     0x0008\n\n# ifndef EVP_MD\nstruct env_md_st {\n    int type;\n    int pkey_type;\n    int md_size;\n    unsigned long flags;\n    int (*init) (EVP_MD_CTX *ctx);\n    int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count);\n    int (*final) (EVP_MD_CTX *ctx, unsigned char *md);\n    int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from);\n    int (*cleanup) (EVP_MD_CTX *ctx);\n    /* FIXME: prototype these some day */\n    int (*sign) (int type, const unsigned char *m, unsigned int m_length,\n                 unsigned char *sigret, unsigned int *siglen, void *key);\n    int (*verify) (int type, const unsigned char *m, unsigned int m_length,\n                   const unsigned char *sigbuf, unsigned int siglen,\n                   void *key);\n    int required_pkey_type[5];  /* EVP_PKEY_xxx */\n    int block_size;\n    int ctx_size;               /* how big does the ctx->md_data need to be */\n    /* control function */\n    int (*md_ctrl) (EVP_MD_CTX *ctx, int cmd, int p1, void *p2);\n} /* EVP_MD */ ;\n\ntypedef int evp_sign_method(int type, const unsigned char *m,\n                            unsigned int m_length, unsigned char *sigret,\n                            unsigned int *siglen, void *key);\ntypedef int evp_verify_method(int type, const unsigned char *m,\n                              unsigned int m_length,\n                              const unsigned char *sigbuf,\n                              unsigned int siglen, void *key);\n\n/* digest can only handle a single block */\n#  define EVP_MD_FLAG_ONESHOT     0x0001\n\n/*\n * digest is a \"clone\" digest used\n * which is a copy of an existing\n * one for a specific public key type.\n * EVP_dss1() etc\n */\n#  define EVP_MD_FLAG_PKEY_DIGEST 0x0002\n\n/* Digest uses EVP_PKEY_METHOD for signing instead of MD specific signing */\n\n#  define EVP_MD_FLAG_PKEY_METHOD_SIGNATURE       0x0004\n\n/* DigestAlgorithmIdentifier flags... */\n\n#  define EVP_MD_FLAG_DIGALGID_MASK               0x0018\n\n/* NULL or absent parameter accepted. Use NULL */\n\n#  define EVP_MD_FLAG_DIGALGID_NULL               0x0000\n\n/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */\n\n#  define EVP_MD_FLAG_DIGALGID_ABSENT             0x0008\n\n/* Custom handling via ctrl */\n\n#  define EVP_MD_FLAG_DIGALGID_CUSTOM             0x0018\n\n/* Note if suitable for use in FIPS mode */\n#  define EVP_MD_FLAG_FIPS        0x0400\n\n/* Digest ctrls */\n\n#  define EVP_MD_CTRL_DIGALGID                    0x1\n#  define EVP_MD_CTRL_MICALG                      0x2\n\n/* Minimum Algorithm specific ctrl value */\n\n#  define EVP_MD_CTRL_ALG_CTRL                    0x1000\n\n#  define EVP_PKEY_NULL_method    NULL,NULL,{0,0,0,0}\n\n#  ifndef OPENSSL_NO_DSA\n#   define EVP_PKEY_DSA_method     (evp_sign_method *)DSA_sign, \\\n                                (evp_verify_method *)DSA_verify, \\\n                                {EVP_PKEY_DSA,EVP_PKEY_DSA2,EVP_PKEY_DSA3, \\\n                                        EVP_PKEY_DSA4,0}\n#  else\n#   define EVP_PKEY_DSA_method     EVP_PKEY_NULL_method\n#  endif\n\n#  ifndef OPENSSL_NO_ECDSA\n#   define EVP_PKEY_ECDSA_method   (evp_sign_method *)ECDSA_sign, \\\n                                (evp_verify_method *)ECDSA_verify, \\\n                                 {EVP_PKEY_EC,0,0,0}\n#  else\n#   define EVP_PKEY_ECDSA_method   EVP_PKEY_NULL_method\n#  endif\n\n#  ifndef OPENSSL_NO_RSA\n#   define EVP_PKEY_RSA_method     (evp_sign_method *)RSA_sign, \\\n                                (evp_verify_method *)RSA_verify, \\\n                                {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}\n#   define EVP_PKEY_RSA_ASN1_OCTET_STRING_method \\\n                                (evp_sign_method *)RSA_sign_ASN1_OCTET_STRING, \\\n                                (evp_verify_method *)RSA_verify_ASN1_OCTET_STRING, \\\n                                {EVP_PKEY_RSA,EVP_PKEY_RSA2,0,0}\n#  else\n#   define EVP_PKEY_RSA_method     EVP_PKEY_NULL_method\n#   define EVP_PKEY_RSA_ASN1_OCTET_STRING_method EVP_PKEY_NULL_method\n#  endif\n\n# endif                         /* !EVP_MD */\n\nstruct env_md_ctx_st {\n    const EVP_MD *digest;\n    ENGINE *engine;             /* functional reference if 'digest' is\n                                 * ENGINE-provided */\n    unsigned long flags;\n    void *md_data;\n    /* Public key context for sign/verify */\n    EVP_PKEY_CTX *pctx;\n    /* Update function: usually copied from EVP_MD */\n    int (*update) (EVP_MD_CTX *ctx, const void *data, size_t count);\n} /* EVP_MD_CTX */ ;\n\n/* values for EVP_MD_CTX flags */\n\n# define EVP_MD_CTX_FLAG_ONESHOT         0x0001/* digest update will be\n                                                * called once only */\n# define EVP_MD_CTX_FLAG_CLEANED         0x0002/* context has already been\n                                                * cleaned */\n# define EVP_MD_CTX_FLAG_REUSE           0x0004/* Don't free up ctx->md_data\n                                                * in EVP_MD_CTX_cleanup */\n/*\n * FIPS and pad options are ignored in 1.0.0, definitions are here so we\n * don't accidentally reuse the values for other purposes.\n */\n\n# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW  0x0008/* Allow use of non FIPS\n                                                * digest in FIPS mode */\n\n/*\n * The following PAD options are also currently ignored in 1.0.0, digest\n * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*()\n * instead.\n */\n# define EVP_MD_CTX_FLAG_PAD_MASK        0xF0/* RSA mode to use */\n# define EVP_MD_CTX_FLAG_PAD_PKCS1       0x00/* PKCS#1 v1.5 mode */\n# define EVP_MD_CTX_FLAG_PAD_X931        0x10/* X9.31 mode */\n# define EVP_MD_CTX_FLAG_PAD_PSS         0x20/* PSS mode */\n\n# define EVP_MD_CTX_FLAG_NO_INIT         0x0100/* Don't initialize md_data */\n\nstruct evp_cipher_st {\n    int nid;\n    int block_size;\n    /* Default value for variable length ciphers */\n    int key_len;\n    int iv_len;\n    /* Various flags */\n    unsigned long flags;\n    /* init key */\n    int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key,\n                 const unsigned char *iv, int enc);\n    /* encrypt/decrypt data */\n    int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out,\n                      const unsigned char *in, size_t inl);\n    /* cleanup ctx */\n    int (*cleanup) (EVP_CIPHER_CTX *);\n    /* how big ctx->cipher_data needs to be */\n    int ctx_size;\n    /* Populate a ASN1_TYPE with parameters */\n    int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *);\n    /* Get parameters from a ASN1_TYPE */\n    int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *);\n    /* Miscellaneous operations */\n    int (*ctrl) (EVP_CIPHER_CTX *, int type, int arg, void *ptr);\n    /* Application data */\n    void *app_data;\n} /* EVP_CIPHER */ ;\n\n/* Values for cipher flags */\n\n/* Modes for ciphers */\n\n# define         EVP_CIPH_STREAM_CIPHER          0x0\n# define         EVP_CIPH_ECB_MODE               0x1\n# define         EVP_CIPH_CBC_MODE               0x2\n# define         EVP_CIPH_CFB_MODE               0x3\n# define         EVP_CIPH_OFB_MODE               0x4\n# define         EVP_CIPH_CTR_MODE               0x5\n# define         EVP_CIPH_GCM_MODE               0x6\n# define         EVP_CIPH_CCM_MODE               0x7\n# define         EVP_CIPH_XTS_MODE               0x10001\n# define         EVP_CIPH_WRAP_MODE              0x10002\n# define         EVP_CIPH_MODE                   0xF0007\n/* Set if variable length cipher */\n# define         EVP_CIPH_VARIABLE_LENGTH        0x8\n/* Set if the iv handling should be done by the cipher itself */\n# define         EVP_CIPH_CUSTOM_IV              0x10\n/* Set if the cipher's init() function should be called if key is NULL */\n# define         EVP_CIPH_ALWAYS_CALL_INIT       0x20\n/* Call ctrl() to init cipher parameters */\n# define         EVP_CIPH_CTRL_INIT              0x40\n/* Don't use standard key length function */\n# define         EVP_CIPH_CUSTOM_KEY_LENGTH      0x80\n/* Don't use standard block padding */\n# define         EVP_CIPH_NO_PADDING             0x100\n/* cipher handles random key generation */\n# define         EVP_CIPH_RAND_KEY               0x200\n/* cipher has its own additional copying logic */\n# define         EVP_CIPH_CUSTOM_COPY            0x400\n/* Allow use default ASN1 get/set iv */\n# define         EVP_CIPH_FLAG_DEFAULT_ASN1      0x1000\n/* Buffer length in bits not bytes: CFB1 mode only */\n# define         EVP_CIPH_FLAG_LENGTH_BITS       0x2000\n/* Note if suitable for use in FIPS mode */\n# define         EVP_CIPH_FLAG_FIPS              0x4000\n/* Allow non FIPS cipher in FIPS mode */\n# define         EVP_CIPH_FLAG_NON_FIPS_ALLOW    0x8000\n/*\n * Cipher handles any and all padding logic as well as finalisation.\n */\n# define         EVP_CIPH_FLAG_CUSTOM_CIPHER     0x100000\n# define         EVP_CIPH_FLAG_AEAD_CIPHER       0x200000\n# define         EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000\n\n/*\n * Cipher context flag to indicate we can handle wrap mode: if allowed in\n * older applications it could overflow buffers.\n */\n\n# define         EVP_CIPHER_CTX_FLAG_WRAP_ALLOW  0x1\n\n/* ctrl() values */\n\n# define         EVP_CTRL_INIT                   0x0\n# define         EVP_CTRL_SET_KEY_LENGTH         0x1\n# define         EVP_CTRL_GET_RC2_KEY_BITS       0x2\n# define         EVP_CTRL_SET_RC2_KEY_BITS       0x3\n# define         EVP_CTRL_GET_RC5_ROUNDS         0x4\n# define         EVP_CTRL_SET_RC5_ROUNDS         0x5\n# define         EVP_CTRL_RAND_KEY               0x6\n# define         EVP_CTRL_PBE_PRF_NID            0x7\n# define         EVP_CTRL_COPY                   0x8\n# define         EVP_CTRL_GCM_SET_IVLEN          0x9\n# define         EVP_CTRL_GCM_GET_TAG            0x10\n# define         EVP_CTRL_GCM_SET_TAG            0x11\n# define         EVP_CTRL_GCM_SET_IV_FIXED       0x12\n# define         EVP_CTRL_GCM_IV_GEN             0x13\n# define         EVP_CTRL_CCM_SET_IVLEN          EVP_CTRL_GCM_SET_IVLEN\n# define         EVP_CTRL_CCM_GET_TAG            EVP_CTRL_GCM_GET_TAG\n# define         EVP_CTRL_CCM_SET_TAG            EVP_CTRL_GCM_SET_TAG\n# define         EVP_CTRL_CCM_SET_L              0x14\n# define         EVP_CTRL_CCM_SET_MSGLEN         0x15\n/*\n * AEAD cipher deduces payload length and returns number of bytes required to\n * store MAC and eventual padding. Subsequent call to EVP_Cipher even\n * appends/verifies MAC.\n */\n# define         EVP_CTRL_AEAD_TLS1_AAD          0x16\n/* Used by composite AEAD ciphers, no-op in GCM, CCM... */\n# define         EVP_CTRL_AEAD_SET_MAC_KEY       0x17\n/* Set the GCM invocation field, decrypt only */\n# define         EVP_CTRL_GCM_SET_IV_INV         0x18\n\n# define         EVP_CTRL_TLS1_1_MULTIBLOCK_AAD  0x19\n# define         EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT      0x1a\n# define         EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT      0x1b\n# define         EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE  0x1c\n\ntypedef struct {\n    unsigned char *out;\n    const unsigned char *inp;\n    size_t len;\n    unsigned int interleave;\n} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM;\n\n/* GCM TLS constants */\n/* Length of fixed part of IV derived from PRF */\n# define EVP_GCM_TLS_FIXED_IV_LEN                        4\n/* Length of explicit part of IV part of TLS records */\n# define EVP_GCM_TLS_EXPLICIT_IV_LEN                     8\n/* Length of tag for TLS */\n# define EVP_GCM_TLS_TAG_LEN                             16\n\ntypedef struct evp_cipher_info_st {\n    const EVP_CIPHER *cipher;\n    unsigned char iv[EVP_MAX_IV_LENGTH];\n} EVP_CIPHER_INFO;\n\nstruct evp_cipher_ctx_st {\n    const EVP_CIPHER *cipher;\n    ENGINE *engine;             /* functional reference if 'cipher' is\n                                 * ENGINE-provided */\n    int encrypt;                /* encrypt or decrypt */\n    int buf_len;                /* number we have left */\n    unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */\n    unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */\n    unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */\n    int num;                    /* used by cfb/ofb/ctr mode */\n    void *app_data;             /* application stuff */\n    int key_len;                /* May change for variable length cipher */\n    unsigned long flags;        /* Various flags */\n    void *cipher_data;          /* per EVP data */\n    int final_used;\n    int block_mask;\n    unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */\n} /* EVP_CIPHER_CTX */ ;\n\ntypedef struct evp_Encode_Ctx_st {\n    /* number saved in a partial encode/decode */\n    int num;\n    /*\n     * The length is either the output line length (in input bytes) or the\n     * shortest input line length that is ok.  Once decoding begins, the\n     * length is adjusted up each time a longer line is decoded\n     */\n    int length;\n    /* data to encode */\n    unsigned char enc_data[80];\n    /* number read on current line */\n    int line_num;\n    int expect_nl;\n} EVP_ENCODE_CTX;\n\n/* Password based encryption function */\ntypedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass,\n                              int passlen, ASN1_TYPE *param,\n                              const EVP_CIPHER *cipher, const EVP_MD *md,\n                              int en_de);\n\n# ifndef OPENSSL_NO_RSA\n#  define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\\\n                                        (char *)(rsa))\n# endif\n\n# ifndef OPENSSL_NO_DSA\n#  define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\\\n                                        (char *)(dsa))\n# endif\n\n# ifndef OPENSSL_NO_DH\n#  define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\\\n                                        (char *)(dh))\n# endif\n\n# ifndef OPENSSL_NO_EC\n#  define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\\\n                                        (char *)(eckey))\n# endif\n\n/* Add some extra combinations */\n# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a))\n# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a))\n# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a))\n# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a))\n\nint EVP_MD_type(const EVP_MD *md);\n# define EVP_MD_nid(e)                   EVP_MD_type(e)\n# define EVP_MD_name(e)                  OBJ_nid2sn(EVP_MD_nid(e))\nint EVP_MD_pkey_type(const EVP_MD *md);\nint EVP_MD_size(const EVP_MD *md);\nint EVP_MD_block_size(const EVP_MD *md);\nunsigned long EVP_MD_flags(const EVP_MD *md);\n\nconst EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx);\n# define EVP_MD_CTX_size(e)              EVP_MD_size(EVP_MD_CTX_md(e))\n# define EVP_MD_CTX_block_size(e)        EVP_MD_block_size(EVP_MD_CTX_md(e))\n# define EVP_MD_CTX_type(e)              EVP_MD_type(EVP_MD_CTX_md(e))\n\nint EVP_CIPHER_nid(const EVP_CIPHER *cipher);\n# define EVP_CIPHER_name(e)              OBJ_nid2sn(EVP_CIPHER_nid(e))\nint EVP_CIPHER_block_size(const EVP_CIPHER *cipher);\nint EVP_CIPHER_key_length(const EVP_CIPHER *cipher);\nint EVP_CIPHER_iv_length(const EVP_CIPHER *cipher);\nunsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher);\n# define EVP_CIPHER_mode(e)              (EVP_CIPHER_flags(e) & EVP_CIPH_MODE)\n\nconst EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx);\nint EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx);\nint EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx);\nint EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx);\nint EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx);\nint EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in);\nvoid *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx);\nvoid EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data);\n# define EVP_CIPHER_CTX_type(c)         EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c))\nunsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx);\n# define EVP_CIPHER_CTX_mode(e)          (EVP_CIPHER_CTX_flags(e) & EVP_CIPH_MODE)\n\n# define EVP_ENCODE_LENGTH(l)    (((l+2)/3*4)+(l/48+1)*2+80)\n# define EVP_DECODE_LENGTH(l)    ((l+3)/4*3+80)\n\n# define EVP_SignInit_ex(a,b,c)          EVP_DigestInit_ex(a,b,c)\n# define EVP_SignInit(a,b)               EVP_DigestInit(a,b)\n# define EVP_SignUpdate(a,b,c)           EVP_DigestUpdate(a,b,c)\n# define EVP_VerifyInit_ex(a,b,c)        EVP_DigestInit_ex(a,b,c)\n# define EVP_VerifyInit(a,b)             EVP_DigestInit(a,b)\n# define EVP_VerifyUpdate(a,b,c)         EVP_DigestUpdate(a,b,c)\n# define EVP_OpenUpdate(a,b,c,d,e)       EVP_DecryptUpdate(a,b,c,d,e)\n# define EVP_SealUpdate(a,b,c,d,e)       EVP_EncryptUpdate(a,b,c,d,e)\n# define EVP_DigestSignUpdate(a,b,c)     EVP_DigestUpdate(a,b,c)\n# define EVP_DigestVerifyUpdate(a,b,c)   EVP_DigestUpdate(a,b,c)\n\n# ifdef CONST_STRICT\nvoid BIO_set_md(BIO *, const EVP_MD *md);\n# else\n#  define BIO_set_md(b,md)               BIO_ctrl(b,BIO_C_SET_MD,0,(char *)md)\n# endif\n# define BIO_get_md(b,mdp)               BIO_ctrl(b,BIO_C_GET_MD,0,(char *)mdp)\n# define BIO_get_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_GET_MD_CTX,0,(char *)mdcp)\n# define BIO_set_md_ctx(b,mdcp)     BIO_ctrl(b,BIO_C_SET_MD_CTX,0,(char *)mdcp)\n# define BIO_get_cipher_status(b)        BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL)\n# define BIO_get_cipher_ctx(b,c_pp)      BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0,(char *)c_pp)\n\nint EVP_Cipher(EVP_CIPHER_CTX *c,\n               unsigned char *out, const unsigned char *in, unsigned int inl);\n\n# define EVP_add_cipher_alias(n,alias) \\\n        OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n))\n# define EVP_add_digest_alias(n,alias) \\\n        OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n))\n# define EVP_delete_cipher_alias(alias) \\\n        OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS);\n# define EVP_delete_digest_alias(alias) \\\n        OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS);\n\nvoid EVP_MD_CTX_init(EVP_MD_CTX *ctx);\nint EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx);\nEVP_MD_CTX *EVP_MD_CTX_create(void);\nvoid EVP_MD_CTX_destroy(EVP_MD_CTX *ctx);\nint EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in);\nvoid EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags);\nvoid EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags);\nint EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags);\nint EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);\nint EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);\nint EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);\nint EVP_Digest(const void *data, size_t count,\n               unsigned char *md, unsigned int *size, const EVP_MD *type,\n               ENGINE *impl);\n\nint EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);\nint EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);\nint EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);\n\nint EVP_read_pw_string(char *buf, int length, const char *prompt, int verify);\nint EVP_read_pw_string_min(char *buf, int minlen, int maxlen,\n                           const char *prompt, int verify);\nvoid EVP_set_pw_prompt(const char *prompt);\nchar *EVP_get_pw_prompt(void);\n\nint EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,\n                   const unsigned char *salt, const unsigned char *data,\n                   int datal, int count, unsigned char *key,\n                   unsigned char *iv);\n\nvoid EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags);\nvoid EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags);\nint EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags);\n\nint EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                    const unsigned char *key, const unsigned char *iv);\nint EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                       ENGINE *impl, const unsigned char *key,\n                       const unsigned char *iv);\nint EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,\n                      const unsigned char *in, int inl);\nint EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);\nint EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);\n\nint EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                    const unsigned char *key, const unsigned char *iv);\nint EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                       ENGINE *impl, const unsigned char *key,\n                       const unsigned char *iv);\nint EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,\n                      const unsigned char *in, int inl);\nint EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);\nint EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);\n\nint EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                   const unsigned char *key, const unsigned char *iv,\n                   int enc);\nint EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,\n                      ENGINE *impl, const unsigned char *key,\n                      const unsigned char *iv, int enc);\nint EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,\n                     const unsigned char *in, int inl);\nint EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);\nint EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);\n\nint EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s,\n                  EVP_PKEY *pkey);\n\nint EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,\n                    unsigned int siglen, EVP_PKEY *pkey);\n\nint EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,\n                       const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);\nint EVP_DigestSignFinal(EVP_MD_CTX *ctx,\n                        unsigned char *sigret, size_t *siglen);\n\nint EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,\n                         const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);\nint EVP_DigestVerifyFinal(EVP_MD_CTX *ctx,\n                          const unsigned char *sig, size_t siglen);\n\nint EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,\n                 const unsigned char *ek, int ekl, const unsigned char *iv,\n                 EVP_PKEY *priv);\nint EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);\n\nint EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,\n                 unsigned char **ek, int *ekl, unsigned char *iv,\n                 EVP_PKEY **pubk, int npubk);\nint EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);\n\nvoid EVP_EncodeInit(EVP_ENCODE_CTX *ctx);\nvoid EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,\n                      const unsigned char *in, int inl);\nvoid EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);\nint EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);\n\nvoid EVP_DecodeInit(EVP_ENCODE_CTX *ctx);\nint EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,\n                     const unsigned char *in, int inl);\nint EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned\n                    char *out, int *outl);\nint EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);\n\nvoid EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *a);\nint EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *a);\nEVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);\nvoid EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *a);\nint EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen);\nint EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad);\nint EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr);\nint EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key);\n\n# ifndef OPENSSL_NO_BIO\nBIO_METHOD *BIO_f_md(void);\nBIO_METHOD *BIO_f_base64(void);\nBIO_METHOD *BIO_f_cipher(void);\nBIO_METHOD *BIO_f_reliable(void);\nvoid BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,\n                    const unsigned char *i, int enc);\n# endif\n\nconst EVP_MD *EVP_md_null(void);\n# ifndef OPENSSL_NO_MD2\nconst EVP_MD *EVP_md2(void);\n# endif\n# ifndef OPENSSL_NO_MD4\nconst EVP_MD *EVP_md4(void);\n# endif\n# ifndef OPENSSL_NO_MD5\nconst EVP_MD *EVP_md5(void);\n# endif\n# ifndef OPENSSL_NO_SHA\nconst EVP_MD *EVP_sha(void);\nconst EVP_MD *EVP_sha1(void);\nconst EVP_MD *EVP_dss(void);\nconst EVP_MD *EVP_dss1(void);\nconst EVP_MD *EVP_ecdsa(void);\n# endif\n# ifndef OPENSSL_NO_SHA256\nconst EVP_MD *EVP_sha224(void);\nconst EVP_MD *EVP_sha256(void);\n# endif\n# ifndef OPENSSL_NO_SHA512\nconst EVP_MD *EVP_sha384(void);\nconst EVP_MD *EVP_sha512(void);\n# endif\n# ifndef OPENSSL_NO_MDC2\nconst EVP_MD *EVP_mdc2(void);\n# endif\n# ifndef OPENSSL_NO_RIPEMD\nconst EVP_MD *EVP_ripemd160(void);\n# endif\n# ifndef OPENSSL_NO_WHIRLPOOL\nconst EVP_MD *EVP_whirlpool(void);\n# endif\nconst EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */\n# ifndef OPENSSL_NO_DES\nconst EVP_CIPHER *EVP_des_ecb(void);\nconst EVP_CIPHER *EVP_des_ede(void);\nconst EVP_CIPHER *EVP_des_ede3(void);\nconst EVP_CIPHER *EVP_des_ede_ecb(void);\nconst EVP_CIPHER *EVP_des_ede3_ecb(void);\nconst EVP_CIPHER *EVP_des_cfb64(void);\n#  define EVP_des_cfb EVP_des_cfb64\nconst EVP_CIPHER *EVP_des_cfb1(void);\nconst EVP_CIPHER *EVP_des_cfb8(void);\nconst EVP_CIPHER *EVP_des_ede_cfb64(void);\n#  define EVP_des_ede_cfb EVP_des_ede_cfb64\n#  if 0\nconst EVP_CIPHER *EVP_des_ede_cfb1(void);\nconst EVP_CIPHER *EVP_des_ede_cfb8(void);\n#  endif\nconst EVP_CIPHER *EVP_des_ede3_cfb64(void);\n#  define EVP_des_ede3_cfb EVP_des_ede3_cfb64\nconst EVP_CIPHER *EVP_des_ede3_cfb1(void);\nconst EVP_CIPHER *EVP_des_ede3_cfb8(void);\nconst EVP_CIPHER *EVP_des_ofb(void);\nconst EVP_CIPHER *EVP_des_ede_ofb(void);\nconst EVP_CIPHER *EVP_des_ede3_ofb(void);\nconst EVP_CIPHER *EVP_des_cbc(void);\nconst EVP_CIPHER *EVP_des_ede_cbc(void);\nconst EVP_CIPHER *EVP_des_ede3_cbc(void);\nconst EVP_CIPHER *EVP_desx_cbc(void);\nconst EVP_CIPHER *EVP_des_ede3_wrap(void);\n/*\n * This should now be supported through the dev_crypto ENGINE. But also, why\n * are rc4 and md5 declarations made here inside a \"NO_DES\" precompiler\n * branch?\n */\n#  if 0\n#   ifdef OPENSSL_OPENBSD_DEV_CRYPTO\nconst EVP_CIPHER *EVP_dev_crypto_des_ede3_cbc(void);\nconst EVP_CIPHER *EVP_dev_crypto_rc4(void);\nconst EVP_MD *EVP_dev_crypto_md5(void);\n#   endif\n#  endif\n# endif\n# ifndef OPENSSL_NO_RC4\nconst EVP_CIPHER *EVP_rc4(void);\nconst EVP_CIPHER *EVP_rc4_40(void);\n#  ifndef OPENSSL_NO_MD5\nconst EVP_CIPHER *EVP_rc4_hmac_md5(void);\n#  endif\n# endif\n# ifndef OPENSSL_NO_IDEA\nconst EVP_CIPHER *EVP_idea_ecb(void);\nconst EVP_CIPHER *EVP_idea_cfb64(void);\n#  define EVP_idea_cfb EVP_idea_cfb64\nconst EVP_CIPHER *EVP_idea_ofb(void);\nconst EVP_CIPHER *EVP_idea_cbc(void);\n# endif\n# ifndef OPENSSL_NO_RC2\nconst EVP_CIPHER *EVP_rc2_ecb(void);\nconst EVP_CIPHER *EVP_rc2_cbc(void);\nconst EVP_CIPHER *EVP_rc2_40_cbc(void);\nconst EVP_CIPHER *EVP_rc2_64_cbc(void);\nconst EVP_CIPHER *EVP_rc2_cfb64(void);\n#  define EVP_rc2_cfb EVP_rc2_cfb64\nconst EVP_CIPHER *EVP_rc2_ofb(void);\n# endif\n# ifndef OPENSSL_NO_BF\nconst EVP_CIPHER *EVP_bf_ecb(void);\nconst EVP_CIPHER *EVP_bf_cbc(void);\nconst EVP_CIPHER *EVP_bf_cfb64(void);\n#  define EVP_bf_cfb EVP_bf_cfb64\nconst EVP_CIPHER *EVP_bf_ofb(void);\n# endif\n# ifndef OPENSSL_NO_CAST\nconst EVP_CIPHER *EVP_cast5_ecb(void);\nconst EVP_CIPHER *EVP_cast5_cbc(void);\nconst EVP_CIPHER *EVP_cast5_cfb64(void);\n#  define EVP_cast5_cfb EVP_cast5_cfb64\nconst EVP_CIPHER *EVP_cast5_ofb(void);\n# endif\n# ifndef OPENSSL_NO_RC5\nconst EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);\nconst EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);\nconst EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);\n#  define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64\nconst EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);\n# endif\n# ifndef OPENSSL_NO_AES\nconst EVP_CIPHER *EVP_aes_128_ecb(void);\nconst EVP_CIPHER *EVP_aes_128_cbc(void);\nconst EVP_CIPHER *EVP_aes_128_cfb1(void);\nconst EVP_CIPHER *EVP_aes_128_cfb8(void);\nconst EVP_CIPHER *EVP_aes_128_cfb128(void);\n#  define EVP_aes_128_cfb EVP_aes_128_cfb128\nconst EVP_CIPHER *EVP_aes_128_ofb(void);\nconst EVP_CIPHER *EVP_aes_128_ctr(void);\nconst EVP_CIPHER *EVP_aes_128_ccm(void);\nconst EVP_CIPHER *EVP_aes_128_gcm(void);\nconst EVP_CIPHER *EVP_aes_128_xts(void);\nconst EVP_CIPHER *EVP_aes_128_wrap(void);\nconst EVP_CIPHER *EVP_aes_192_ecb(void);\nconst EVP_CIPHER *EVP_aes_192_cbc(void);\nconst EVP_CIPHER *EVP_aes_192_cfb1(void);\nconst EVP_CIPHER *EVP_aes_192_cfb8(void);\nconst EVP_CIPHER *EVP_aes_192_cfb128(void);\n#  define EVP_aes_192_cfb EVP_aes_192_cfb128\nconst EVP_CIPHER *EVP_aes_192_ofb(void);\nconst EVP_CIPHER *EVP_aes_192_ctr(void);\nconst EVP_CIPHER *EVP_aes_192_ccm(void);\nconst EVP_CIPHER *EVP_aes_192_gcm(void);\nconst EVP_CIPHER *EVP_aes_192_wrap(void);\nconst EVP_CIPHER *EVP_aes_256_ecb(void);\nconst EVP_CIPHER *EVP_aes_256_cbc(void);\nconst EVP_CIPHER *EVP_aes_256_cfb1(void);\nconst EVP_CIPHER *EVP_aes_256_cfb8(void);\nconst EVP_CIPHER *EVP_aes_256_cfb128(void);\n#  define EVP_aes_256_cfb EVP_aes_256_cfb128\nconst EVP_CIPHER *EVP_aes_256_ofb(void);\nconst EVP_CIPHER *EVP_aes_256_ctr(void);\nconst EVP_CIPHER *EVP_aes_256_ccm(void);\nconst EVP_CIPHER *EVP_aes_256_gcm(void);\nconst EVP_CIPHER *EVP_aes_256_xts(void);\nconst EVP_CIPHER *EVP_aes_256_wrap(void);\n#  if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)\nconst EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);\nconst EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void);\n#  endif\n#  ifndef OPENSSL_NO_SHA256\nconst EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void);\nconst EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void);\n#  endif\n# endif\n# ifndef OPENSSL_NO_CAMELLIA\nconst EVP_CIPHER *EVP_camellia_128_ecb(void);\nconst EVP_CIPHER *EVP_camellia_128_cbc(void);\nconst EVP_CIPHER *EVP_camellia_128_cfb1(void);\nconst EVP_CIPHER *EVP_camellia_128_cfb8(void);\nconst EVP_CIPHER *EVP_camellia_128_cfb128(void);\n#  define EVP_camellia_128_cfb EVP_camellia_128_cfb128\nconst EVP_CIPHER *EVP_camellia_128_ofb(void);\nconst EVP_CIPHER *EVP_camellia_192_ecb(void);\nconst EVP_CIPHER *EVP_camellia_192_cbc(void);\nconst EVP_CIPHER *EVP_camellia_192_cfb1(void);\nconst EVP_CIPHER *EVP_camellia_192_cfb8(void);\nconst EVP_CIPHER *EVP_camellia_192_cfb128(void);\n#  define EVP_camellia_192_cfb EVP_camellia_192_cfb128\nconst EVP_CIPHER *EVP_camellia_192_ofb(void);\nconst EVP_CIPHER *EVP_camellia_256_ecb(void);\nconst EVP_CIPHER *EVP_camellia_256_cbc(void);\nconst EVP_CIPHER *EVP_camellia_256_cfb1(void);\nconst EVP_CIPHER *EVP_camellia_256_cfb8(void);\nconst EVP_CIPHER *EVP_camellia_256_cfb128(void);\n#  define EVP_camellia_256_cfb EVP_camellia_256_cfb128\nconst EVP_CIPHER *EVP_camellia_256_ofb(void);\n# endif\n\n# ifndef OPENSSL_NO_SEED\nconst EVP_CIPHER *EVP_seed_ecb(void);\nconst EVP_CIPHER *EVP_seed_cbc(void);\nconst EVP_CIPHER *EVP_seed_cfb128(void);\n#  define EVP_seed_cfb EVP_seed_cfb128\nconst EVP_CIPHER *EVP_seed_ofb(void);\n# endif\n\nvoid OPENSSL_add_all_algorithms_noconf(void);\nvoid OPENSSL_add_all_algorithms_conf(void);\n\n# ifdef OPENSSL_LOAD_CONF\n#  define OpenSSL_add_all_algorithms() \\\n                OPENSSL_add_all_algorithms_conf()\n# else\n#  define OpenSSL_add_all_algorithms() \\\n                OPENSSL_add_all_algorithms_noconf()\n# endif\n\nvoid OpenSSL_add_all_ciphers(void);\nvoid OpenSSL_add_all_digests(void);\n# define SSLeay_add_all_algorithms() OpenSSL_add_all_algorithms()\n# define SSLeay_add_all_ciphers() OpenSSL_add_all_ciphers()\n# define SSLeay_add_all_digests() OpenSSL_add_all_digests()\n\nint EVP_add_cipher(const EVP_CIPHER *cipher);\nint EVP_add_digest(const EVP_MD *digest);\n\nconst EVP_CIPHER *EVP_get_cipherbyname(const char *name);\nconst EVP_MD *EVP_get_digestbyname(const char *name);\nvoid EVP_cleanup(void);\n\nvoid EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph,\n                                   const char *from, const char *to, void *x),\n                       void *arg);\nvoid EVP_CIPHER_do_all_sorted(void (*fn)\n                               (const EVP_CIPHER *ciph, const char *from,\n                                const char *to, void *x), void *arg);\n\nvoid EVP_MD_do_all(void (*fn) (const EVP_MD *ciph,\n                               const char *from, const char *to, void *x),\n                   void *arg);\nvoid EVP_MD_do_all_sorted(void (*fn)\n                           (const EVP_MD *ciph, const char *from,\n                            const char *to, void *x), void *arg);\n\nint EVP_PKEY_decrypt_old(unsigned char *dec_key,\n                         const unsigned char *enc_key, int enc_key_len,\n                         EVP_PKEY *private_key);\nint EVP_PKEY_encrypt_old(unsigned char *enc_key,\n                         const unsigned char *key, int key_len,\n                         EVP_PKEY *pub_key);\nint EVP_PKEY_type(int type);\nint EVP_PKEY_id(const EVP_PKEY *pkey);\nint EVP_PKEY_base_id(const EVP_PKEY *pkey);\nint EVP_PKEY_bits(EVP_PKEY *pkey);\nint EVP_PKEY_size(EVP_PKEY *pkey);\nint EVP_PKEY_set_type(EVP_PKEY *pkey, int type);\nint EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len);\nint EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key);\nvoid *EVP_PKEY_get0(EVP_PKEY *pkey);\n\n# ifndef OPENSSL_NO_RSA\nstruct rsa_st;\nint EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key);\nstruct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey);\n# endif\n# ifndef OPENSSL_NO_DSA\nstruct dsa_st;\nint EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key);\nstruct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey);\n# endif\n# ifndef OPENSSL_NO_DH\nstruct dh_st;\nint EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key);\nstruct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey);\n# endif\n# ifndef OPENSSL_NO_EC\nstruct ec_key_st;\nint EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key);\nstruct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);\n# endif\n\nEVP_PKEY *EVP_PKEY_new(void);\nvoid EVP_PKEY_free(EVP_PKEY *pkey);\n\nEVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,\n                        long length);\nint i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);\n\nEVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,\n                         long length);\nEVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,\n                             long length);\nint i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);\n\nint EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from);\nint EVP_PKEY_missing_parameters(const EVP_PKEY *pkey);\nint EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode);\nint EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b);\n\nint EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b);\n\nint EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,\n                          int indent, ASN1_PCTX *pctx);\nint EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,\n                           int indent, ASN1_PCTX *pctx);\nint EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,\n                          int indent, ASN1_PCTX *pctx);\n\nint EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid);\n\nint EVP_CIPHER_type(const EVP_CIPHER *ctx);\n\n/* calls methods */\nint EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type);\nint EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type);\n\n/* These are used by EVP_CIPHER methods */\nint EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);\nint EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type);\n\n/* PKCS5 password based encryption */\nint PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,\n                       ASN1_TYPE *param, const EVP_CIPHER *cipher,\n                       const EVP_MD *md, int en_de);\nint PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,\n                           const unsigned char *salt, int saltlen, int iter,\n                           int keylen, unsigned char *out);\nint PKCS5_PBKDF2_HMAC(const char *pass, int passlen,\n                      const unsigned char *salt, int saltlen, int iter,\n                      const EVP_MD *digest, int keylen, unsigned char *out);\nint PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,\n                          ASN1_TYPE *param, const EVP_CIPHER *cipher,\n                          const EVP_MD *md, int en_de);\n\nvoid PKCS5_PBE_add(void);\n\nint EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen,\n                       ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de);\n\n/* PBE type */\n\n/* Can appear as the outermost AlgorithmIdentifier */\n# define EVP_PBE_TYPE_OUTER      0x0\n/* Is an PRF type OID */\n# define EVP_PBE_TYPE_PRF        0x1\n\nint EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid,\n                         int md_nid, EVP_PBE_KEYGEN *keygen);\nint EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md,\n                    EVP_PBE_KEYGEN *keygen);\nint EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid,\n                 EVP_PBE_KEYGEN **pkeygen);\nvoid EVP_PBE_cleanup(void);\n\n# define ASN1_PKEY_ALIAS         0x1\n# define ASN1_PKEY_DYNAMIC       0x2\n# define ASN1_PKEY_SIGPARAM_NULL 0x4\n\n# define ASN1_PKEY_CTRL_PKCS7_SIGN       0x1\n# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT    0x2\n# define ASN1_PKEY_CTRL_DEFAULT_MD_NID   0x3\n# define ASN1_PKEY_CTRL_CMS_SIGN         0x5\n# define ASN1_PKEY_CTRL_CMS_ENVELOPE     0x7\n# define ASN1_PKEY_CTRL_CMS_RI_TYPE      0x8\n\nint EVP_PKEY_asn1_get_count(void);\nconst EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);\nconst EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type);\nconst EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,\n                                                   const char *str, int len);\nint EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth);\nint EVP_PKEY_asn1_add_alias(int to, int from);\nint EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id,\n                            int *ppkey_flags, const char **pinfo,\n                            const char **ppem_str,\n                            const EVP_PKEY_ASN1_METHOD *ameth);\n\nconst EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(EVP_PKEY *pkey);\nEVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags,\n                                        const char *pem_str,\n                                        const char *info);\nvoid EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst,\n                        const EVP_PKEY_ASN1_METHOD *src);\nvoid EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth);\nvoid EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth,\n                              int (*pub_decode) (EVP_PKEY *pk,\n                                                 X509_PUBKEY *pub),\n                              int (*pub_encode) (X509_PUBKEY *pub,\n                                                 const EVP_PKEY *pk),\n                              int (*pub_cmp) (const EVP_PKEY *a,\n                                              const EVP_PKEY *b),\n                              int (*pub_print) (BIO *out,\n                                                const EVP_PKEY *pkey,\n                                                int indent, ASN1_PCTX *pctx),\n                              int (*pkey_size) (const EVP_PKEY *pk),\n                              int (*pkey_bits) (const EVP_PKEY *pk));\nvoid EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth,\n                               int (*priv_decode) (EVP_PKEY *pk,\n                                                   PKCS8_PRIV_KEY_INFO\n                                                   *p8inf),\n                               int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8,\n                                                   const EVP_PKEY *pk),\n                               int (*priv_print) (BIO *out,\n                                                  const EVP_PKEY *pkey,\n                                                  int indent,\n                                                  ASN1_PCTX *pctx));\nvoid EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth,\n                             int (*param_decode) (EVP_PKEY *pkey,\n                                                  const unsigned char **pder,\n                                                  int derlen),\n                             int (*param_encode) (const EVP_PKEY *pkey,\n                                                  unsigned char **pder),\n                             int (*param_missing) (const EVP_PKEY *pk),\n                             int (*param_copy) (EVP_PKEY *to,\n                                                const EVP_PKEY *from),\n                             int (*param_cmp) (const EVP_PKEY *a,\n                                               const EVP_PKEY *b),\n                             int (*param_print) (BIO *out,\n                                                 const EVP_PKEY *pkey,\n                                                 int indent,\n                                                 ASN1_PCTX *pctx));\n\nvoid EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,\n                            void (*pkey_free) (EVP_PKEY *pkey));\nvoid EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,\n                            int (*pkey_ctrl) (EVP_PKEY *pkey, int op,\n                                              long arg1, void *arg2));\n\n# define EVP_PKEY_OP_UNDEFINED           0\n# define EVP_PKEY_OP_PARAMGEN            (1<<1)\n# define EVP_PKEY_OP_KEYGEN              (1<<2)\n# define EVP_PKEY_OP_SIGN                (1<<3)\n# define EVP_PKEY_OP_VERIFY              (1<<4)\n# define EVP_PKEY_OP_VERIFYRECOVER       (1<<5)\n# define EVP_PKEY_OP_SIGNCTX             (1<<6)\n# define EVP_PKEY_OP_VERIFYCTX           (1<<7)\n# define EVP_PKEY_OP_ENCRYPT             (1<<8)\n# define EVP_PKEY_OP_DECRYPT             (1<<9)\n# define EVP_PKEY_OP_DERIVE              (1<<10)\n\n# define EVP_PKEY_OP_TYPE_SIG    \\\n        (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \\\n                | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX)\n\n# define EVP_PKEY_OP_TYPE_CRYPT \\\n        (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)\n\n# define EVP_PKEY_OP_TYPE_NOGEN \\\n        (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE)\n\n# define EVP_PKEY_OP_TYPE_GEN \\\n                (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)\n\n# define  EVP_PKEY_CTX_set_signature_md(ctx, md) \\\n                EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG,  \\\n                                        EVP_PKEY_CTRL_MD, 0, (void *)md)\n\n# define  EVP_PKEY_CTX_get_signature_md(ctx, pmd)        \\\n                EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG,  \\\n                                        EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd)\n\n# define EVP_PKEY_CTRL_MD                1\n# define EVP_PKEY_CTRL_PEER_KEY          2\n\n# define EVP_PKEY_CTRL_PKCS7_ENCRYPT     3\n# define EVP_PKEY_CTRL_PKCS7_DECRYPT     4\n\n# define EVP_PKEY_CTRL_PKCS7_SIGN        5\n\n# define EVP_PKEY_CTRL_SET_MAC_KEY       6\n\n# define EVP_PKEY_CTRL_DIGESTINIT        7\n\n/* Used by GOST key encryption in TLS */\n# define EVP_PKEY_CTRL_SET_IV            8\n\n# define EVP_PKEY_CTRL_CMS_ENCRYPT       9\n# define EVP_PKEY_CTRL_CMS_DECRYPT       10\n# define EVP_PKEY_CTRL_CMS_SIGN          11\n\n# define EVP_PKEY_CTRL_CIPHER            12\n\n# define EVP_PKEY_CTRL_GET_MD            13\n\n# define EVP_PKEY_ALG_CTRL               0x1000\n\n# define EVP_PKEY_FLAG_AUTOARGLEN        2\n/*\n * Method handles all operations: don't assume any digest related defaults.\n */\n# define EVP_PKEY_FLAG_SIGCTX_CUSTOM     4\n\nconst EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type);\nEVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags);\nvoid EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,\n                             const EVP_PKEY_METHOD *meth);\nvoid EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src);\nvoid EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth);\nint EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth);\n\nEVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);\nEVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e);\nEVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx);\nvoid EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);\n\nint EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,\n                      int cmd, int p1, void *p2);\nint EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,\n                          const char *value);\n\nint EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx);\nvoid EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen);\n\nEVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e,\n                               const unsigned char *key, int keylen);\n\nvoid EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data);\nvoid *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx);\nEVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx);\n\nEVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx);\n\nvoid EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data);\nvoid *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx);\n\nint EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_sign(EVP_PKEY_CTX *ctx,\n                  unsigned char *sig, size_t *siglen,\n                  const unsigned char *tbs, size_t tbslen);\nint EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_verify(EVP_PKEY_CTX *ctx,\n                    const unsigned char *sig, size_t siglen,\n                    const unsigned char *tbs, size_t tbslen);\nint EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,\n                            unsigned char *rout, size_t *routlen,\n                            const unsigned char *sig, size_t siglen);\nint EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,\n                     unsigned char *out, size_t *outlen,\n                     const unsigned char *in, size_t inlen);\nint EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,\n                     unsigned char *out, size_t *outlen,\n                     const unsigned char *in, size_t inlen);\n\nint EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);\nint EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);\n\ntypedef int EVP_PKEY_gen_cb (EVP_PKEY_CTX *ctx);\n\nint EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);\nint EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);\nint EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);\n\nvoid EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb);\nEVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx);\n\nint EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx);\n\nvoid EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,\n                            int (*init) (EVP_PKEY_CTX *ctx));\n\nvoid EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,\n                            int (*copy) (EVP_PKEY_CTX *dst,\n                                         EVP_PKEY_CTX *src));\n\nvoid EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,\n                               void (*cleanup) (EVP_PKEY_CTX *ctx));\n\nvoid EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,\n                                int (*paramgen_init) (EVP_PKEY_CTX *ctx),\n                                int (*paramgen) (EVP_PKEY_CTX *ctx,\n                                                 EVP_PKEY *pkey));\n\nvoid EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,\n                              int (*keygen_init) (EVP_PKEY_CTX *ctx),\n                              int (*keygen) (EVP_PKEY_CTX *ctx,\n                                             EVP_PKEY *pkey));\n\nvoid EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,\n                            int (*sign_init) (EVP_PKEY_CTX *ctx),\n                            int (*sign) (EVP_PKEY_CTX *ctx,\n                                         unsigned char *sig, size_t *siglen,\n                                         const unsigned char *tbs,\n                                         size_t tbslen));\n\nvoid EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,\n                              int (*verify_init) (EVP_PKEY_CTX *ctx),\n                              int (*verify) (EVP_PKEY_CTX *ctx,\n                                             const unsigned char *sig,\n                                             size_t siglen,\n                                             const unsigned char *tbs,\n                                             size_t tbslen));\n\nvoid EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,\n                                      int (*verify_recover_init) (EVP_PKEY_CTX\n                                                                  *ctx),\n                                      int (*verify_recover) (EVP_PKEY_CTX\n                                                             *ctx,\n                                                             unsigned char\n                                                             *sig,\n                                                             size_t *siglen,\n                                                             const unsigned\n                                                             char *tbs,\n                                                             size_t tbslen));\n\nvoid EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,\n                               int (*signctx_init) (EVP_PKEY_CTX *ctx,\n                                                    EVP_MD_CTX *mctx),\n                               int (*signctx) (EVP_PKEY_CTX *ctx,\n                                               unsigned char *sig,\n                                               size_t *siglen,\n                                               EVP_MD_CTX *mctx));\n\nvoid EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,\n                                 int (*verifyctx_init) (EVP_PKEY_CTX *ctx,\n                                                        EVP_MD_CTX *mctx),\n                                 int (*verifyctx) (EVP_PKEY_CTX *ctx,\n                                                   const unsigned char *sig,\n                                                   int siglen,\n                                                   EVP_MD_CTX *mctx));\n\nvoid EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,\n                               int (*encrypt_init) (EVP_PKEY_CTX *ctx),\n                               int (*encryptfn) (EVP_PKEY_CTX *ctx,\n                                                 unsigned char *out,\n                                                 size_t *outlen,\n                                                 const unsigned char *in,\n                                                 size_t inlen));\n\nvoid EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,\n                               int (*decrypt_init) (EVP_PKEY_CTX *ctx),\n                               int (*decrypt) (EVP_PKEY_CTX *ctx,\n                                               unsigned char *out,\n                                               size_t *outlen,\n                                               const unsigned char *in,\n                                               size_t inlen));\n\nvoid EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,\n                              int (*derive_init) (EVP_PKEY_CTX *ctx),\n                              int (*derive) (EVP_PKEY_CTX *ctx,\n                                             unsigned char *key,\n                                             size_t *keylen));\n\nvoid EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,\n                            int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1,\n                                         void *p2),\n                            int (*ctrl_str) (EVP_PKEY_CTX *ctx,\n                                             const char *type,\n                                             const char *value));\n\nvoid EVP_add_alg_module(void);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_EVP_strings(void);\n\n/* Error codes for the EVP functions. */\n\n/* Function codes. */\n# define EVP_F_AESNI_INIT_KEY                             165\n# define EVP_F_AESNI_XTS_CIPHER                           176\n# define EVP_F_AES_INIT_KEY                               133\n# define EVP_F_AES_T4_INIT_KEY                            178\n# define EVP_F_AES_XTS                                    172\n# define EVP_F_AES_XTS_CIPHER                             175\n# define EVP_F_ALG_MODULE_INIT                            177\n# define EVP_F_CAMELLIA_INIT_KEY                          159\n# define EVP_F_CMAC_INIT                                  173\n# define EVP_F_CMLL_T4_INIT_KEY                           179\n# define EVP_F_D2I_PKEY                                   100\n# define EVP_F_DO_SIGVER_INIT                             161\n# define EVP_F_DSAPKEY2PKCS8                              134\n# define EVP_F_DSA_PKEY2PKCS8                             135\n# define EVP_F_ECDSA_PKEY2PKCS8                           129\n# define EVP_F_ECKEY_PKEY2PKCS8                           132\n# define EVP_F_EVP_CIPHERINIT_EX                          123\n# define EVP_F_EVP_CIPHER_CTX_COPY                        163\n# define EVP_F_EVP_CIPHER_CTX_CTRL                        124\n# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH              122\n# define EVP_F_EVP_DECRYPTFINAL_EX                        101\n# define EVP_F_EVP_DIGESTINIT_EX                          128\n# define EVP_F_EVP_ENCRYPTFINAL_EX                        127\n# define EVP_F_EVP_MD_CTX_COPY_EX                         110\n# define EVP_F_EVP_MD_SIZE                                162\n# define EVP_F_EVP_OPENINIT                               102\n# define EVP_F_EVP_PBE_ALG_ADD                            115\n# define EVP_F_EVP_PBE_ALG_ADD_TYPE                       160\n# define EVP_F_EVP_PBE_CIPHERINIT                         116\n# define EVP_F_EVP_PKCS82PKEY                             111\n# define EVP_F_EVP_PKCS82PKEY_BROKEN                      136\n# define EVP_F_EVP_PKEY2PKCS8_BROKEN                      113\n# define EVP_F_EVP_PKEY_COPY_PARAMETERS                   103\n# define EVP_F_EVP_PKEY_CTX_CTRL                          137\n# define EVP_F_EVP_PKEY_CTX_CTRL_STR                      150\n# define EVP_F_EVP_PKEY_CTX_DUP                           156\n# define EVP_F_EVP_PKEY_DECRYPT                           104\n# define EVP_F_EVP_PKEY_DECRYPT_INIT                      138\n# define EVP_F_EVP_PKEY_DECRYPT_OLD                       151\n# define EVP_F_EVP_PKEY_DERIVE                            153\n# define EVP_F_EVP_PKEY_DERIVE_INIT                       154\n# define EVP_F_EVP_PKEY_DERIVE_SET_PEER                   155\n# define EVP_F_EVP_PKEY_ENCRYPT                           105\n# define EVP_F_EVP_PKEY_ENCRYPT_INIT                      139\n# define EVP_F_EVP_PKEY_ENCRYPT_OLD                       152\n# define EVP_F_EVP_PKEY_GET1_DH                           119\n# define EVP_F_EVP_PKEY_GET1_DSA                          120\n# define EVP_F_EVP_PKEY_GET1_ECDSA                        130\n# define EVP_F_EVP_PKEY_GET1_EC_KEY                       131\n# define EVP_F_EVP_PKEY_GET1_RSA                          121\n# define EVP_F_EVP_PKEY_KEYGEN                            146\n# define EVP_F_EVP_PKEY_KEYGEN_INIT                       147\n# define EVP_F_EVP_PKEY_NEW                               106\n# define EVP_F_EVP_PKEY_PARAMGEN                          148\n# define EVP_F_EVP_PKEY_PARAMGEN_INIT                     149\n# define EVP_F_EVP_PKEY_SIGN                              140\n# define EVP_F_EVP_PKEY_SIGN_INIT                         141\n# define EVP_F_EVP_PKEY_VERIFY                            142\n# define EVP_F_EVP_PKEY_VERIFY_INIT                       143\n# define EVP_F_EVP_PKEY_VERIFY_RECOVER                    144\n# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT               145\n# define EVP_F_EVP_RIJNDAEL                               126\n# define EVP_F_EVP_SIGNFINAL                              107\n# define EVP_F_EVP_VERIFYFINAL                            108\n# define EVP_F_FIPS_CIPHERINIT                            166\n# define EVP_F_FIPS_CIPHER_CTX_COPY                       170\n# define EVP_F_FIPS_CIPHER_CTX_CTRL                       167\n# define EVP_F_FIPS_CIPHER_CTX_SET_KEY_LENGTH             171\n# define EVP_F_FIPS_DIGESTINIT                            168\n# define EVP_F_FIPS_MD_CTX_COPY                           169\n# define EVP_F_HMAC_INIT_EX                               174\n# define EVP_F_INT_CTX_NEW                                157\n# define EVP_F_PKCS5_PBE_KEYIVGEN                         117\n# define EVP_F_PKCS5_V2_PBE_KEYIVGEN                      118\n# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN                   164\n# define EVP_F_PKCS8_SET_BROKEN                           112\n# define EVP_F_PKEY_SET_TYPE                              158\n# define EVP_F_RC2_MAGIC_TO_METH                          109\n# define EVP_F_RC5_CTRL                                   125\n\n/* Reason codes. */\n# define EVP_R_AES_IV_SETUP_FAILED                        162\n# define EVP_R_AES_KEY_SETUP_FAILED                       143\n# define EVP_R_ASN1_LIB                                   140\n# define EVP_R_BAD_BLOCK_LENGTH                           136\n# define EVP_R_BAD_DECRYPT                                100\n# define EVP_R_BAD_KEY_LENGTH                             137\n# define EVP_R_BN_DECODE_ERROR                            112\n# define EVP_R_BN_PUBKEY_ERROR                            113\n# define EVP_R_BUFFER_TOO_SMALL                           155\n# define EVP_R_CAMELLIA_KEY_SETUP_FAILED                  157\n# define EVP_R_CIPHER_PARAMETER_ERROR                     122\n# define EVP_R_COMMAND_NOT_SUPPORTED                      147\n# define EVP_R_CTRL_NOT_IMPLEMENTED                       132\n# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED             133\n# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH          138\n# define EVP_R_DECODE_ERROR                               114\n# define EVP_R_DIFFERENT_KEY_TYPES                        101\n# define EVP_R_DIFFERENT_PARAMETERS                       153\n# define EVP_R_DISABLED_FOR_FIPS                          163\n# define EVP_R_ENCODE_ERROR                               115\n# define EVP_R_ERROR_LOADING_SECTION                      165\n# define EVP_R_ERROR_SETTING_FIPS_MODE                    166\n# define EVP_R_EVP_PBE_CIPHERINIT_ERROR                   119\n# define EVP_R_EXPECTING_AN_RSA_KEY                       127\n# define EVP_R_EXPECTING_A_DH_KEY                         128\n# define EVP_R_EXPECTING_A_DSA_KEY                        129\n# define EVP_R_EXPECTING_A_ECDSA_KEY                      141\n# define EVP_R_EXPECTING_A_EC_KEY                         142\n# define EVP_R_FIPS_MODE_NOT_SUPPORTED                    167\n# define EVP_R_INITIALIZATION_ERROR                       134\n# define EVP_R_INPUT_NOT_INITIALIZED                      111\n# define EVP_R_INVALID_DIGEST                             152\n# define EVP_R_INVALID_FIPS_MODE                          168\n# define EVP_R_INVALID_KEY_LENGTH                         130\n# define EVP_R_INVALID_OPERATION                          148\n# define EVP_R_IV_TOO_LARGE                               102\n# define EVP_R_KEYGEN_FAILURE                             120\n# define EVP_R_MESSAGE_DIGEST_IS_NULL                     159\n# define EVP_R_METHOD_NOT_SUPPORTED                       144\n# define EVP_R_MISSING_PARAMETERS                         103\n# define EVP_R_NO_CIPHER_SET                              131\n# define EVP_R_NO_DEFAULT_DIGEST                          158\n# define EVP_R_NO_DIGEST_SET                              139\n# define EVP_R_NO_DSA_PARAMETERS                          116\n# define EVP_R_NO_KEY_SET                                 154\n# define EVP_R_NO_OPERATION_SET                           149\n# define EVP_R_NO_SIGN_FUNCTION_CONFIGURED                104\n# define EVP_R_NO_VERIFY_FUNCTION_CONFIGURED              105\n# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE   150\n# define EVP_R_OPERATON_NOT_INITIALIZED                   151\n# define EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE                  117\n# define EVP_R_PRIVATE_KEY_DECODE_ERROR                   145\n# define EVP_R_PRIVATE_KEY_ENCODE_ERROR                   146\n# define EVP_R_PUBLIC_KEY_NOT_RSA                         106\n# define EVP_R_TOO_LARGE                                  164\n# define EVP_R_UNKNOWN_CIPHER                             160\n# define EVP_R_UNKNOWN_DIGEST                             161\n# define EVP_R_UNKNOWN_OPTION                             169\n# define EVP_R_UNKNOWN_PBE_ALGORITHM                      121\n# define EVP_R_UNSUPORTED_NUMBER_OF_ROUNDS                135\n# define EVP_R_UNSUPPORTED_ALGORITHM                      156\n# define EVP_R_UNSUPPORTED_CIPHER                         107\n# define EVP_R_UNSUPPORTED_KEYLENGTH                      123\n# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION        124\n# define EVP_R_UNSUPPORTED_KEY_SIZE                       108\n# define EVP_R_UNSUPPORTED_PRF                            125\n# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM          118\n# define EVP_R_UNSUPPORTED_SALT_TYPE                      126\n# define EVP_R_WRAP_MODE_NOT_ALLOWED                      170\n# define EVP_R_WRONG_FINAL_BLOCK_LENGTH                   109\n# define EVP_R_WRONG_PUBLIC_KEY_TYPE                      110\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/hmac.h",
    "content": "/* crypto/hmac/hmac.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n#ifndef HEADER_HMAC_H\n# define HEADER_HMAC_H\n\n# include \"openssl/opensslconf.h\"\n\n# ifdef OPENSSL_NO_HMAC\n#  error HMAC is disabled.\n# endif\n\n# include \"openssl/evp.h\"\n\n# define HMAC_MAX_MD_CBLOCK      128/* largest known is SHA512 */\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct hmac_ctx_st {\n    const EVP_MD *md;\n    EVP_MD_CTX md_ctx;\n    EVP_MD_CTX i_ctx;\n    EVP_MD_CTX o_ctx;\n    unsigned int key_length;\n    unsigned char key[HMAC_MAX_MD_CBLOCK];\n} HMAC_CTX;\n\n# define HMAC_size(e)    (EVP_MD_size((e)->md))\n\nvoid HMAC_CTX_init(HMAC_CTX *ctx);\nvoid HMAC_CTX_cleanup(HMAC_CTX *ctx);\n\n/* deprecated */\n# define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx)\n\n/* deprecated */\nint HMAC_Init(HMAC_CTX *ctx, const void *key, int len, const EVP_MD *md);\nint HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,\n                 const EVP_MD *md, ENGINE *impl);\nint HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);\nint HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);\nunsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,\n                    const unsigned char *d, size_t n, unsigned char *md,\n                    unsigned int *md_len);\nint HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx);\n\nvoid HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/idea.h",
    "content": "/* crypto/idea/idea.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_IDEA_H\n# define HEADER_IDEA_H\n\n# include <openssl/opensslconf.h>/* IDEA_INT, OPENSSL_NO_IDEA */\n\n# ifdef OPENSSL_NO_IDEA\n#  error IDEA is disabled.\n# endif\n\n# define IDEA_ENCRYPT    1\n# define IDEA_DECRYPT    0\n\n# define IDEA_BLOCK      8\n# define IDEA_KEY_LENGTH 16\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct idea_key_st {\n    IDEA_INT data[9][6];\n} IDEA_KEY_SCHEDULE;\n\nconst char *idea_options(void);\nvoid idea_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                      IDEA_KEY_SCHEDULE *ks);\n# ifdef OPENSSL_FIPS\nvoid private_idea_set_encrypt_key(const unsigned char *key,\n                                  IDEA_KEY_SCHEDULE *ks);\n# endif\nvoid idea_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks);\nvoid idea_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk);\nvoid idea_cbc_encrypt(const unsigned char *in, unsigned char *out,\n                      long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv,\n                      int enc);\nvoid idea_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                        long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv,\n                        int *num, int enc);\nvoid idea_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                        long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv,\n                        int *num);\nvoid idea_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks);\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/krb5_asn.h",
    "content": "/* krb5_asn.h */\n/*\n * Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project, **\n * using ocsp/{*.h,*asn*.c} as a starting point\n */\n\n/* ====================================================================\n * Copyright (c) 1998-2000 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_KRB5_ASN_H\n# define HEADER_KRB5_ASN_H\n\n/*\n * #include <krb5.h>\n */\n# include <openssl/safestack.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * ASN.1 from Kerberos RFC 1510\n */\n\n/*-     EncryptedData ::=   SEQUENCE {\n *              etype[0]                      INTEGER, -- EncryptionType\n *              kvno[1]                       INTEGER OPTIONAL,\n *              cipher[2]                     OCTET STRING -- ciphertext\n *      }\n */\ntypedef struct krb5_encdata_st {\n    ASN1_INTEGER *etype;\n    ASN1_INTEGER *kvno;\n    ASN1_OCTET_STRING *cipher;\n} KRB5_ENCDATA;\n\nDECLARE_STACK_OF(KRB5_ENCDATA)\n\n/*-     PrincipalName ::=   SEQUENCE {\n *              name-type[0]                  INTEGER,\n *              name-string[1]                SEQUENCE OF GeneralString\n *      }\n */\ntypedef struct krb5_princname_st {\n    ASN1_INTEGER *nametype;\n    STACK_OF(ASN1_GENERALSTRING) *namestring;\n} KRB5_PRINCNAME;\n\nDECLARE_STACK_OF(KRB5_PRINCNAME)\n\n/*-     Ticket ::=      [APPLICATION 1] SEQUENCE {\n *              tkt-vno[0]                    INTEGER,\n *              realm[1]                      Realm,\n *              sname[2]                      PrincipalName,\n *              enc-part[3]                   EncryptedData\n *      }\n */\ntypedef struct krb5_tktbody_st {\n    ASN1_INTEGER *tktvno;\n    ASN1_GENERALSTRING *realm;\n    KRB5_PRINCNAME *sname;\n    KRB5_ENCDATA *encdata;\n} KRB5_TKTBODY;\n\ntypedef STACK_OF(KRB5_TKTBODY) KRB5_TICKET;\nDECLARE_STACK_OF(KRB5_TKTBODY)\n\n/*-     AP-REQ ::=      [APPLICATION 14] SEQUENCE {\n *              pvno[0]                       INTEGER,\n *              msg-type[1]                   INTEGER,\n *              ap-options[2]                 APOptions,\n *              ticket[3]                     Ticket,\n *              authenticator[4]              EncryptedData\n *      }\n *\n *      APOptions ::=   BIT STRING {\n *              reserved(0), use-session-key(1), mutual-required(2) }\n */\ntypedef struct krb5_ap_req_st {\n    ASN1_INTEGER *pvno;\n    ASN1_INTEGER *msgtype;\n    ASN1_BIT_STRING *apoptions;\n    KRB5_TICKET *ticket;\n    KRB5_ENCDATA *authenticator;\n} KRB5_APREQBODY;\n\ntypedef STACK_OF(KRB5_APREQBODY) KRB5_APREQ;\nDECLARE_STACK_OF(KRB5_APREQBODY)\n\n/*      Authenticator Stuff     */\n\n/*-     Checksum ::=   SEQUENCE {\n *              cksumtype[0]                  INTEGER,\n *              checksum[1]                   OCTET STRING\n *      }\n */\ntypedef struct krb5_checksum_st {\n    ASN1_INTEGER *ctype;\n    ASN1_OCTET_STRING *checksum;\n} KRB5_CHECKSUM;\n\nDECLARE_STACK_OF(KRB5_CHECKSUM)\n\n/*-     EncryptionKey ::=   SEQUENCE {\n *              keytype[0]                    INTEGER,\n *              keyvalue[1]                   OCTET STRING\n *      }\n */\ntypedef struct krb5_encryptionkey_st {\n    ASN1_INTEGER *ktype;\n    ASN1_OCTET_STRING *keyvalue;\n} KRB5_ENCKEY;\n\nDECLARE_STACK_OF(KRB5_ENCKEY)\n\n/*-     AuthorizationData ::=   SEQUENCE OF SEQUENCE {\n *              ad-type[0]                    INTEGER,\n *              ad-data[1]                    OCTET STRING\n *      }\n */\ntypedef struct krb5_authorization_st {\n    ASN1_INTEGER *adtype;\n    ASN1_OCTET_STRING *addata;\n} KRB5_AUTHDATA;\n\nDECLARE_STACK_OF(KRB5_AUTHDATA)\n\n/*-     -- Unencrypted authenticator\n *      Authenticator ::=    [APPLICATION 2] SEQUENCE    {\n *              authenticator-vno[0]          INTEGER,\n *              crealm[1]                     Realm,\n *              cname[2]                      PrincipalName,\n *              cksum[3]                      Checksum OPTIONAL,\n *              cusec[4]                      INTEGER,\n *              ctime[5]                      KerberosTime,\n *              subkey[6]                     EncryptionKey OPTIONAL,\n *              seq-number[7]                 INTEGER OPTIONAL,\n *              authorization-data[8]         AuthorizationData OPTIONAL\n *      }\n */\ntypedef struct krb5_authenticator_st {\n    ASN1_INTEGER *avno;\n    ASN1_GENERALSTRING *crealm;\n    KRB5_PRINCNAME *cname;\n    KRB5_CHECKSUM *cksum;\n    ASN1_INTEGER *cusec;\n    ASN1_GENERALIZEDTIME *ctime;\n    KRB5_ENCKEY *subkey;\n    ASN1_INTEGER *seqnum;\n    KRB5_AUTHDATA *authorization;\n} KRB5_AUTHENTBODY;\n\ntypedef STACK_OF(KRB5_AUTHENTBODY) KRB5_AUTHENT;\nDECLARE_STACK_OF(KRB5_AUTHENTBODY)\n\n/*-  DECLARE_ASN1_FUNCTIONS(type) = DECLARE_ASN1_FUNCTIONS_name(type, type) =\n *      type *name##_new(void);\n *      void name##_free(type *a);\n *      DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =\n *       DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =\n *        type *d2i_##name(type **a, const unsigned char **in, long len);\n *        int i2d_##name(type *a, unsigned char **out);\n *        DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it\n */\n\nDECLARE_ASN1_FUNCTIONS(KRB5_ENCDATA)\nDECLARE_ASN1_FUNCTIONS(KRB5_PRINCNAME)\nDECLARE_ASN1_FUNCTIONS(KRB5_TKTBODY)\nDECLARE_ASN1_FUNCTIONS(KRB5_APREQBODY)\nDECLARE_ASN1_FUNCTIONS(KRB5_TICKET)\nDECLARE_ASN1_FUNCTIONS(KRB5_APREQ)\n\nDECLARE_ASN1_FUNCTIONS(KRB5_CHECKSUM)\nDECLARE_ASN1_FUNCTIONS(KRB5_ENCKEY)\nDECLARE_ASN1_FUNCTIONS(KRB5_AUTHDATA)\nDECLARE_ASN1_FUNCTIONS(KRB5_AUTHENTBODY)\nDECLARE_ASN1_FUNCTIONS(KRB5_AUTHENT)\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/kssl.h",
    "content": "/* ssl/kssl.h -*- mode: C; c-file-style: \"eay\" -*- */\n/*\n * Written by Vern Staats <staatsvr@asc.hpc.mil> for the OpenSSL project\n * 2000. project 2000.\n */\n/* ====================================================================\n * Copyright (c) 2000 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n/*\n **      19990701        VRS     Started.\n */\n\n#ifndef KSSL_H\n# define KSSL_H\n\n# include <openssl/opensslconf.h>\n\n# ifndef OPENSSL_NO_KRB5\n\n#  include <stdio.h>\n#  include <ctype.h>\n#  include <krb5.h>\n#  ifdef OPENSSL_SYS_WIN32\n/*\n * These can sometimes get redefined indirectly by krb5 header files after\n * they get undefed in ossl_typ.h\n */\n#   undef X509_NAME\n#   undef X509_EXTENSIONS\n#   undef OCSP_REQUEST\n#   undef OCSP_RESPONSE\n#  endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n *      Depending on which KRB5 implementation used, some types from\n *      the other may be missing.  Resolve that here and now\n */\n#  ifdef KRB5_HEIMDAL\ntypedef unsigned char krb5_octet;\n#   define FAR\n#  else\n\n#   ifndef FAR\n#    define FAR\n#   endif\n\n#  endif\n\n/*-\n *      Uncomment this to debug kssl problems or\n *      to trace usage of the Kerberos session key\n *\n *      #define         KSSL_DEBUG\n */\n\n#  ifndef KRB5SVC\n#   define KRB5SVC \"host\"\n#  endif\n\n#  ifndef KRB5KEYTAB\n#   define KRB5KEYTAB      \"/etc/krb5.keytab\"\n#  endif\n\n#  ifndef KRB5SENDAUTH\n#   define KRB5SENDAUTH    1\n#  endif\n\n#  ifndef KRB5CHECKAUTH\n#   define KRB5CHECKAUTH   1\n#  endif\n\n#  ifndef KSSL_CLOCKSKEW\n#   define KSSL_CLOCKSKEW  300;\n#  endif\n\n#  define KSSL_ERR_MAX    255\ntypedef struct kssl_err_st {\n    int reason;\n    char text[KSSL_ERR_MAX + 1];\n} KSSL_ERR;\n\n/*-     Context for passing\n *              (1) Kerberos session key to SSL, and\n *              (2)     Config data between application and SSL lib\n */\ntypedef struct kssl_ctx_st {\n    /*      used by:    disposition:            */\n    char *service_name;         /* C,S default ok (kssl) */\n    char *service_host;         /* C input, REQUIRED */\n    char *client_princ;         /* S output from krb5 ticket */\n    char *keytab_file;          /* S NULL (/etc/krb5.keytab) */\n    char *cred_cache;           /* C NULL (default) */\n    krb5_enctype enctype;\n    int length;\n    krb5_octet FAR *key;\n} KSSL_CTX;\n\n#  define KSSL_CLIENT     1\n#  define KSSL_SERVER     2\n#  define KSSL_SERVICE    3\n#  define KSSL_KEYTAB     4\n\n#  define KSSL_CTX_OK     0\n#  define KSSL_CTX_ERR    1\n#  define KSSL_NOMEM      2\n\n/* Public (for use by applications that use OpenSSL with Kerberos 5 support */\nkrb5_error_code kssl_ctx_setstring(KSSL_CTX *kssl_ctx, int which, char *text);\nKSSL_CTX *kssl_ctx_new(void);\nKSSL_CTX *kssl_ctx_free(KSSL_CTX *kssl_ctx);\nvoid kssl_ctx_show(KSSL_CTX *kssl_ctx);\nkrb5_error_code kssl_ctx_setprinc(KSSL_CTX *kssl_ctx, int which,\n                                  krb5_data *realm, krb5_data *entity,\n                                  int nentities);\nkrb5_error_code kssl_cget_tkt(KSSL_CTX *kssl_ctx, krb5_data **enc_tktp,\n                              krb5_data *authenp, KSSL_ERR *kssl_err);\nkrb5_error_code kssl_sget_tkt(KSSL_CTX *kssl_ctx, krb5_data *indata,\n                              krb5_ticket_times *ttimes, KSSL_ERR *kssl_err);\nkrb5_error_code kssl_ctx_setkey(KSSL_CTX *kssl_ctx, krb5_keyblock *session);\nvoid kssl_err_set(KSSL_ERR *kssl_err, int reason, char *text);\nvoid kssl_krb5_free_data_contents(krb5_context context, krb5_data *data);\nkrb5_error_code kssl_build_principal_2(krb5_context context,\n                                       krb5_principal *princ, int rlen,\n                                       const char *realm, int slen,\n                                       const char *svc, int hlen,\n                                       const char *host);\nkrb5_error_code kssl_validate_times(krb5_timestamp atime,\n                                    krb5_ticket_times *ttimes);\nkrb5_error_code kssl_check_authent(KSSL_CTX *kssl_ctx, krb5_data *authentp,\n                                   krb5_timestamp *atimep,\n                                   KSSL_ERR *kssl_err);\nunsigned char *kssl_skip_confound(krb5_enctype enctype, unsigned char *authn);\n\nvoid SSL_set0_kssl_ctx(SSL *s, KSSL_CTX *kctx);\nKSSL_CTX *SSL_get0_kssl_ctx(SSL *s);\nchar *kssl_ctx_get0_client_princ(KSSL_CTX *kctx);\n\n#ifdef  __cplusplus\n}\n#endif\n# endif                         /* OPENSSL_NO_KRB5 */\n#endif                          /* KSSL_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/lhash.h",
    "content": "/* crypto/lhash/lhash.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n/*\n * Header for dynamic hash table routines Author - Eric Young\n */\n\n#ifndef HEADER_LHASH_H\n# define HEADER_LHASH_H\n\n# include <openssl/e_os2.h>\n# ifndef OPENSSL_NO_FP_API\n#  include <stdio.h>\n# endif\n\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct lhash_node_st {\n    void *data;\n    struct lhash_node_st *next;\n# ifndef OPENSSL_NO_HASH_COMP\n    unsigned long hash;\n# endif\n} LHASH_NODE;\n\ntypedef int (*LHASH_COMP_FN_TYPE) (const void *, const void *);\ntypedef unsigned long (*LHASH_HASH_FN_TYPE) (const void *);\ntypedef void (*LHASH_DOALL_FN_TYPE) (void *);\ntypedef void (*LHASH_DOALL_ARG_FN_TYPE) (void *, void *);\n\n/*\n * Macros for declaring and implementing type-safe wrappers for LHASH\n * callbacks. This way, callbacks can be provided to LHASH structures without\n * function pointer casting and the macro-defined callbacks provide\n * per-variable casting before deferring to the underlying type-specific\n * callbacks. NB: It is possible to place a \"static\" in front of both the\n * DECLARE and IMPLEMENT macros if the functions are strictly internal.\n */\n\n/* First: \"hash\" functions */\n# define DECLARE_LHASH_HASH_FN(name, o_type) \\\n        unsigned long name##_LHASH_HASH(const void *);\n# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \\\n        unsigned long name##_LHASH_HASH(const void *arg) { \\\n                const o_type *a = arg; \\\n                return name##_hash(a); }\n# define LHASH_HASH_FN(name) name##_LHASH_HASH\n\n/* Second: \"compare\" functions */\n# define DECLARE_LHASH_COMP_FN(name, o_type) \\\n        int name##_LHASH_COMP(const void *, const void *);\n# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \\\n        int name##_LHASH_COMP(const void *arg1, const void *arg2) { \\\n                const o_type *a = arg1;             \\\n                const o_type *b = arg2; \\\n                return name##_cmp(a,b); }\n# define LHASH_COMP_FN(name) name##_LHASH_COMP\n\n/* Third: \"doall\" functions */\n# define DECLARE_LHASH_DOALL_FN(name, o_type) \\\n        void name##_LHASH_DOALL(void *);\n# define IMPLEMENT_LHASH_DOALL_FN(name, o_type) \\\n        void name##_LHASH_DOALL(void *arg) { \\\n                o_type *a = arg; \\\n                name##_doall(a); }\n# define LHASH_DOALL_FN(name) name##_LHASH_DOALL\n\n/* Fourth: \"doall_arg\" functions */\n# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \\\n        void name##_LHASH_DOALL_ARG(void *, void *);\n# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \\\n        void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \\\n                o_type *a = arg1; \\\n                a_type *b = arg2; \\\n                name##_doall_arg(a, b); }\n# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG\n\ntypedef struct lhash_st {\n    LHASH_NODE **b;\n    LHASH_COMP_FN_TYPE comp;\n    LHASH_HASH_FN_TYPE hash;\n    unsigned int num_nodes;\n    unsigned int num_alloc_nodes;\n    unsigned int p;\n    unsigned int pmax;\n    unsigned long up_load;      /* load times 256 */\n    unsigned long down_load;    /* load times 256 */\n    unsigned long num_items;\n    unsigned long num_expands;\n    unsigned long num_expand_reallocs;\n    unsigned long num_contracts;\n    unsigned long num_contract_reallocs;\n    unsigned long num_hash_calls;\n    unsigned long num_comp_calls;\n    unsigned long num_insert;\n    unsigned long num_replace;\n    unsigned long num_delete;\n    unsigned long num_no_delete;\n    unsigned long num_retrieve;\n    unsigned long num_retrieve_miss;\n    unsigned long num_hash_comps;\n    int error;\n} _LHASH;                       /* Do not use _LHASH directly, use LHASH_OF\n                                 * and friends */\n\n# define LH_LOAD_MULT    256\n\n/*\n * Indicates a malloc() error in the last call, this is only bad in\n * lh_insert().\n */\n# define lh_error(lh)    ((lh)->error)\n\n_LHASH *lh_new(LHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c);\nvoid lh_free(_LHASH *lh);\nvoid *lh_insert(_LHASH *lh, void *data);\nvoid *lh_delete(_LHASH *lh, const void *data);\nvoid *lh_retrieve(_LHASH *lh, const void *data);\nvoid lh_doall(_LHASH *lh, LHASH_DOALL_FN_TYPE func);\nvoid lh_doall_arg(_LHASH *lh, LHASH_DOALL_ARG_FN_TYPE func, void *arg);\nunsigned long lh_strhash(const char *c);\nunsigned long lh_num_items(const _LHASH *lh);\n\n# ifndef OPENSSL_NO_FP_API\nvoid lh_stats(const _LHASH *lh, FILE *out);\nvoid lh_node_stats(const _LHASH *lh, FILE *out);\nvoid lh_node_usage_stats(const _LHASH *lh, FILE *out);\n# endif\n\n# ifndef OPENSSL_NO_BIO\nvoid lh_stats_bio(const _LHASH *lh, BIO *out);\nvoid lh_node_stats_bio(const _LHASH *lh, BIO *out);\nvoid lh_node_usage_stats_bio(const _LHASH *lh, BIO *out);\n# endif\n\n/* Type checking... */\n\n# define LHASH_OF(type) struct lhash_st_##type\n\n# define DECLARE_LHASH_OF(type) LHASH_OF(type) { int dummy; }\n\n# define CHECKED_LHASH_OF(type,lh) \\\n  ((_LHASH *)CHECKED_PTR_OF(LHASH_OF(type),lh))\n\n/* Define wrapper functions. */\n# define LHM_lh_new(type, name) \\\n  ((LHASH_OF(type) *)lh_new(LHASH_HASH_FN(name), LHASH_COMP_FN(name)))\n# define LHM_lh_error(type, lh) \\\n  lh_error(CHECKED_LHASH_OF(type,lh))\n# define LHM_lh_insert(type, lh, inst) \\\n  ((type *)lh_insert(CHECKED_LHASH_OF(type, lh), \\\n                     CHECKED_PTR_OF(type, inst)))\n# define LHM_lh_retrieve(type, lh, inst) \\\n  ((type *)lh_retrieve(CHECKED_LHASH_OF(type, lh), \\\n                       CHECKED_PTR_OF(type, inst)))\n# define LHM_lh_delete(type, lh, inst) \\\n  ((type *)lh_delete(CHECKED_LHASH_OF(type, lh),                        \\\n                     CHECKED_PTR_OF(type, inst)))\n# define LHM_lh_doall(type, lh,fn) lh_doall(CHECKED_LHASH_OF(type, lh), fn)\n# define LHM_lh_doall_arg(type, lh, fn, arg_type, arg) \\\n  lh_doall_arg(CHECKED_LHASH_OF(type, lh), fn, CHECKED_PTR_OF(arg_type, arg))\n# define LHM_lh_num_items(type, lh) lh_num_items(CHECKED_LHASH_OF(type, lh))\n# define LHM_lh_down_load(type, lh) (CHECKED_LHASH_OF(type, lh)->down_load)\n# define LHM_lh_node_stats_bio(type, lh, out) \\\n  lh_node_stats_bio(CHECKED_LHASH_OF(type, lh), out)\n# define LHM_lh_node_usage_stats_bio(type, lh, out) \\\n  lh_node_usage_stats_bio(CHECKED_LHASH_OF(type, lh), out)\n# define LHM_lh_stats_bio(type, lh, out) \\\n  lh_stats_bio(CHECKED_LHASH_OF(type, lh), out)\n# define LHM_lh_free(type, lh) lh_free(CHECKED_LHASH_OF(type, lh))\n\nDECLARE_LHASH_OF(OPENSSL_STRING);\nDECLARE_LHASH_OF(OPENSSL_CSTRING);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/md4.h",
    "content": "/* crypto/md4/md4.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_MD4_H\n# define HEADER_MD4_H\n\n# include <openssl/e_os2.h>\n# include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_NO_MD4\n#  error MD4 is disabled.\n# endif\n\n/*-\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * ! MD4_LONG has to be at least 32 bits wide. If it's wider, then !\n * ! MD4_LONG_LOG2 has to be defined along.                        !\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n */\n\n# if defined(__LP32__)\n#  define MD4_LONG unsigned long\n# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)\n#  define MD4_LONG unsigned long\n#  define MD4_LONG_LOG2 3\n/*\n * _CRAY note. I could declare short, but I have no idea what impact\n * does it have on performance on none-T3E machines. I could declare\n * int, but at least on C90 sizeof(int) can be chosen at compile time.\n * So I've chosen long...\n *                                      <appro@fy.chalmers.se>\n */\n# else\n#  define MD4_LONG unsigned int\n# endif\n\n# define MD4_CBLOCK      64\n# define MD4_LBLOCK      (MD4_CBLOCK/4)\n# define MD4_DIGEST_LENGTH 16\n\ntypedef struct MD4state_st {\n    MD4_LONG A, B, C, D;\n    MD4_LONG Nl, Nh;\n    MD4_LONG data[MD4_LBLOCK];\n    unsigned int num;\n} MD4_CTX;\n\n# ifdef OPENSSL_FIPS\nint private_MD4_Init(MD4_CTX *c);\n# endif\nint MD4_Init(MD4_CTX *c);\nint MD4_Update(MD4_CTX *c, const void *data, size_t len);\nint MD4_Final(unsigned char *md, MD4_CTX *c);\nunsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md);\nvoid MD4_Transform(MD4_CTX *c, const unsigned char *b);\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/md5.h",
    "content": "/* crypto/md5/md5.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_MD5_H\n# define HEADER_MD5_H\n\n# include \"openssl/e_os2.h\"\n# include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_NO_MD5\n#  error MD5 is disabled.\n# endif\n\n/*\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * ! MD5_LONG has to be at least 32 bits wide. If it's wider, then !\n * ! MD5_LONG_LOG2 has to be defined along.                        !\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n */\n\n# if defined(__LP32__)\n#  define MD5_LONG unsigned long\n# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)\n#  define MD5_LONG unsigned long\n#  define MD5_LONG_LOG2 3\n/*\n * _CRAY note. I could declare short, but I have no idea what impact\n * does it have on performance on none-T3E machines. I could declare\n * int, but at least on C90 sizeof(int) can be chosen at compile time.\n * So I've chosen long...\n *                                      <appro@fy.chalmers.se>\n */\n# else\n#  define MD5_LONG unsigned int\n# endif\n\n# define MD5_CBLOCK      64\n# define MD5_LBLOCK      (MD5_CBLOCK/4)\n# define MD5_DIGEST_LENGTH 16\n\ntypedef struct MD5state_st {\n    MD5_LONG A, B, C, D;\n    MD5_LONG Nl, Nh;\n    MD5_LONG data[MD5_LBLOCK];\n    unsigned int num;\n} MD5_CTX;\n\n# ifdef OPENSSL_FIPS\nint private_MD5_Init(MD5_CTX *c);\n# endif\nint MD5_Init(MD5_CTX *c);\nint MD5_Update(MD5_CTX *c, const void *data, size_t len);\nint MD5_Final(unsigned char *md, MD5_CTX *c);\nunsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md);\nvoid MD5_Transform(MD5_CTX *c, const unsigned char *b);\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/mdc2.h",
    "content": "/* crypto/mdc2/mdc2.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_MDC2_H\n# define HEADER_MDC2_H\n\n# include <openssl/des.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_NO_MDC2\n#  error MDC2 is disabled.\n# endif\n\n# define MDC2_BLOCK              8\n# define MDC2_DIGEST_LENGTH      16\n\ntypedef struct mdc2_ctx_st {\n    unsigned int num;\n    unsigned char data[MDC2_BLOCK];\n    DES_cblock h, hh;\n    int pad_type;               /* either 1 or 2, default 1 */\n} MDC2_CTX;\n\n# ifdef OPENSSL_FIPS\nint private_MDC2_Init(MDC2_CTX *c);\n# endif\nint MDC2_Init(MDC2_CTX *c);\nint MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len);\nint MDC2_Final(unsigned char *md, MDC2_CTX *c);\nunsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/modes.h",
    "content": "/* ====================================================================\n * Copyright (c) 2008 The OpenSSL Project. All rights reserved.\n *\n * Rights for redistribution and usage in source and binary\n * forms are granted according to the OpenSSL license.\n */\n\n#include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\ntypedef void (*block128_f) (const unsigned char in[16],\n                            unsigned char out[16], const void *key);\n\ntypedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,\n                          size_t len, const void *key,\n                          unsigned char ivec[16], int enc);\n\ntypedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,\n                          size_t blocks, const void *key,\n                          const unsigned char ivec[16]);\n\ntypedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,\n                          size_t blocks, const void *key,\n                          const unsigned char ivec[16],\n                          unsigned char cmac[16]);\n\nvoid CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t len, const void *key,\n                           unsigned char ivec[16], block128_f block);\nvoid CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,\n                           size_t len, const void *key,\n                           unsigned char ivec[16], block128_f block);\n\nvoid CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t len, const void *key,\n                           unsigned char ivec[16],\n                           unsigned char ecount_buf[16], unsigned int *num,\n                           block128_f block);\n\nvoid CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,\n                                 size_t len, const void *key,\n                                 unsigned char ivec[16],\n                                 unsigned char ecount_buf[16],\n                                 unsigned int *num, ctr128_f ctr);\n\nvoid CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t len, const void *key,\n                           unsigned char ivec[16], int *num,\n                           block128_f block);\n\nvoid CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,\n                           size_t len, const void *key,\n                           unsigned char ivec[16], int *num,\n                           int enc, block128_f block);\nvoid CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t length, const void *key,\n                             unsigned char ivec[16], int *num,\n                             int enc, block128_f block);\nvoid CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t bits, const void *key,\n                             unsigned char ivec[16], int *num,\n                             int enc, block128_f block);\n\nsize_t CRYPTO_cts128_encrypt_block(const unsigned char *in,\n                                   unsigned char *out, size_t len,\n                                   const void *key, unsigned char ivec[16],\n                                   block128_f block);\nsize_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out,\n                             size_t len, const void *key,\n                             unsigned char ivec[16], cbc128_f cbc);\nsize_t CRYPTO_cts128_decrypt_block(const unsigned char *in,\n                                   unsigned char *out, size_t len,\n                                   const void *key, unsigned char ivec[16],\n                                   block128_f block);\nsize_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out,\n                             size_t len, const void *key,\n                             unsigned char ivec[16], cbc128_f cbc);\n\nsize_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in,\n                                       unsigned char *out, size_t len,\n                                       const void *key,\n                                       unsigned char ivec[16],\n                                       block128_f block);\nsize_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out,\n                                 size_t len, const void *key,\n                                 unsigned char ivec[16], cbc128_f cbc);\nsize_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in,\n                                       unsigned char *out, size_t len,\n                                       const void *key,\n                                       unsigned char ivec[16],\n                                       block128_f block);\nsize_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out,\n                                 size_t len, const void *key,\n                                 unsigned char ivec[16], cbc128_f cbc);\n\ntypedef struct gcm128_context GCM128_CONTEXT;\n\nGCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block);\nvoid CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block);\nvoid CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv,\n                         size_t len);\nint CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad,\n                      size_t len);\nint CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,\n                          const unsigned char *in, unsigned char *out,\n                          size_t len);\nint CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,\n                          const unsigned char *in, unsigned char *out,\n                          size_t len);\nint CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,\n                                const unsigned char *in, unsigned char *out,\n                                size_t len, ctr128_f stream);\nint CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,\n                                const unsigned char *in, unsigned char *out,\n                                size_t len, ctr128_f stream);\nint CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag,\n                         size_t len);\nvoid CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len);\nvoid CRYPTO_gcm128_release(GCM128_CONTEXT *ctx);\n\ntypedef struct ccm128_context CCM128_CONTEXT;\n\nvoid CRYPTO_ccm128_init(CCM128_CONTEXT *ctx,\n                        unsigned int M, unsigned int L, void *key,\n                        block128_f block);\nint CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce,\n                        size_t nlen, size_t mlen);\nvoid CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad,\n                       size_t alen);\nint CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,\n                          unsigned char *out, size_t len);\nint CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp,\n                          unsigned char *out, size_t len);\nint CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,\n                                unsigned char *out, size_t len,\n                                ccm128_f stream);\nint CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp,\n                                unsigned char *out, size_t len,\n                                ccm128_f stream);\nsize_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len);\n\ntypedef struct xts128_context XTS128_CONTEXT;\n\nint CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,\n                          const unsigned char iv[16],\n                          const unsigned char *inp, unsigned char *out,\n                          size_t len, int enc);\n\nsize_t CRYPTO_128_wrap(void *key, const unsigned char *iv,\n                       unsigned char *out,\n                       const unsigned char *in, size_t inlen,\n                       block128_f block);\n\nsize_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,\n                         unsigned char *out,\n                         const unsigned char *in, size_t inlen,\n                         block128_f block);\n\n#ifdef  __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/obj_mac.h",
    "content": "/* crypto/objects/obj_mac.h */\n\n/*\n * THIS FILE IS GENERATED FROM objects.txt by objects.pl via the following\n * command: perl objects.pl objects.txt obj_mac.num obj_mac.h\n */\n\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#define SN_undef                        \"UNDEF\"\n#define LN_undef                        \"undefined\"\n#define NID_undef                       0\n#define OBJ_undef                       0L\n\n#define SN_itu_t                \"ITU-T\"\n#define LN_itu_t                \"itu-t\"\n#define NID_itu_t               645\n#define OBJ_itu_t               0L\n\n#define NID_ccitt               404\n#define OBJ_ccitt               OBJ_itu_t\n\n#define SN_iso          \"ISO\"\n#define LN_iso          \"iso\"\n#define NID_iso         181\n#define OBJ_iso         1L\n\n#define SN_joint_iso_itu_t              \"JOINT-ISO-ITU-T\"\n#define LN_joint_iso_itu_t              \"joint-iso-itu-t\"\n#define NID_joint_iso_itu_t             646\n#define OBJ_joint_iso_itu_t             2L\n\n#define NID_joint_iso_ccitt             393\n#define OBJ_joint_iso_ccitt             OBJ_joint_iso_itu_t\n\n#define SN_member_body          \"member-body\"\n#define LN_member_body          \"ISO Member Body\"\n#define NID_member_body         182\n#define OBJ_member_body         OBJ_iso,2L\n\n#define SN_identified_organization              \"identified-organization\"\n#define NID_identified_organization             676\n#define OBJ_identified_organization             OBJ_iso,3L\n\n#define SN_hmac_md5             \"HMAC-MD5\"\n#define LN_hmac_md5             \"hmac-md5\"\n#define NID_hmac_md5            780\n#define OBJ_hmac_md5            OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L\n\n#define SN_hmac_sha1            \"HMAC-SHA1\"\n#define LN_hmac_sha1            \"hmac-sha1\"\n#define NID_hmac_sha1           781\n#define OBJ_hmac_sha1           OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L\n\n#define SN_certicom_arc         \"certicom-arc\"\n#define NID_certicom_arc                677\n#define OBJ_certicom_arc                OBJ_identified_organization,132L\n\n#define SN_international_organizations          \"international-organizations\"\n#define LN_international_organizations          \"International Organizations\"\n#define NID_international_organizations         647\n#define OBJ_international_organizations         OBJ_joint_iso_itu_t,23L\n\n#define SN_wap          \"wap\"\n#define NID_wap         678\n#define OBJ_wap         OBJ_international_organizations,43L\n\n#define SN_wap_wsg              \"wap-wsg\"\n#define NID_wap_wsg             679\n#define OBJ_wap_wsg             OBJ_wap,1L\n\n#define SN_selected_attribute_types             \"selected-attribute-types\"\n#define LN_selected_attribute_types             \"Selected Attribute Types\"\n#define NID_selected_attribute_types            394\n#define OBJ_selected_attribute_types            OBJ_joint_iso_itu_t,5L,1L,5L\n\n#define SN_clearance            \"clearance\"\n#define NID_clearance           395\n#define OBJ_clearance           OBJ_selected_attribute_types,55L\n\n#define SN_ISO_US               \"ISO-US\"\n#define LN_ISO_US               \"ISO US Member Body\"\n#define NID_ISO_US              183\n#define OBJ_ISO_US              OBJ_member_body,840L\n\n#define SN_X9_57                \"X9-57\"\n#define LN_X9_57                \"X9.57\"\n#define NID_X9_57               184\n#define OBJ_X9_57               OBJ_ISO_US,10040L\n\n#define SN_X9cm         \"X9cm\"\n#define LN_X9cm         \"X9.57 CM ?\"\n#define NID_X9cm                185\n#define OBJ_X9cm                OBJ_X9_57,4L\n\n#define SN_dsa          \"DSA\"\n#define LN_dsa          \"dsaEncryption\"\n#define NID_dsa         116\n#define OBJ_dsa         OBJ_X9cm,1L\n\n#define SN_dsaWithSHA1          \"DSA-SHA1\"\n#define LN_dsaWithSHA1          \"dsaWithSHA1\"\n#define NID_dsaWithSHA1         113\n#define OBJ_dsaWithSHA1         OBJ_X9cm,3L\n\n#define SN_ansi_X9_62           \"ansi-X9-62\"\n#define LN_ansi_X9_62           \"ANSI X9.62\"\n#define NID_ansi_X9_62          405\n#define OBJ_ansi_X9_62          OBJ_ISO_US,10045L\n\n#define OBJ_X9_62_id_fieldType          OBJ_ansi_X9_62,1L\n\n#define SN_X9_62_prime_field            \"prime-field\"\n#define NID_X9_62_prime_field           406\n#define OBJ_X9_62_prime_field           OBJ_X9_62_id_fieldType,1L\n\n#define SN_X9_62_characteristic_two_field               \"characteristic-two-field\"\n#define NID_X9_62_characteristic_two_field              407\n#define OBJ_X9_62_characteristic_two_field              OBJ_X9_62_id_fieldType,2L\n\n#define SN_X9_62_id_characteristic_two_basis            \"id-characteristic-two-basis\"\n#define NID_X9_62_id_characteristic_two_basis           680\n#define OBJ_X9_62_id_characteristic_two_basis           OBJ_X9_62_characteristic_two_field,3L\n\n#define SN_X9_62_onBasis                \"onBasis\"\n#define NID_X9_62_onBasis               681\n#define OBJ_X9_62_onBasis               OBJ_X9_62_id_characteristic_two_basis,1L\n\n#define SN_X9_62_tpBasis                \"tpBasis\"\n#define NID_X9_62_tpBasis               682\n#define OBJ_X9_62_tpBasis               OBJ_X9_62_id_characteristic_two_basis,2L\n\n#define SN_X9_62_ppBasis                \"ppBasis\"\n#define NID_X9_62_ppBasis               683\n#define OBJ_X9_62_ppBasis               OBJ_X9_62_id_characteristic_two_basis,3L\n\n#define OBJ_X9_62_id_publicKeyType              OBJ_ansi_X9_62,2L\n\n#define SN_X9_62_id_ecPublicKey         \"id-ecPublicKey\"\n#define NID_X9_62_id_ecPublicKey                408\n#define OBJ_X9_62_id_ecPublicKey                OBJ_X9_62_id_publicKeyType,1L\n\n#define OBJ_X9_62_ellipticCurve         OBJ_ansi_X9_62,3L\n\n#define OBJ_X9_62_c_TwoCurve            OBJ_X9_62_ellipticCurve,0L\n\n#define SN_X9_62_c2pnb163v1             \"c2pnb163v1\"\n#define NID_X9_62_c2pnb163v1            684\n#define OBJ_X9_62_c2pnb163v1            OBJ_X9_62_c_TwoCurve,1L\n\n#define SN_X9_62_c2pnb163v2             \"c2pnb163v2\"\n#define NID_X9_62_c2pnb163v2            685\n#define OBJ_X9_62_c2pnb163v2            OBJ_X9_62_c_TwoCurve,2L\n\n#define SN_X9_62_c2pnb163v3             \"c2pnb163v3\"\n#define NID_X9_62_c2pnb163v3            686\n#define OBJ_X9_62_c2pnb163v3            OBJ_X9_62_c_TwoCurve,3L\n\n#define SN_X9_62_c2pnb176v1             \"c2pnb176v1\"\n#define NID_X9_62_c2pnb176v1            687\n#define OBJ_X9_62_c2pnb176v1            OBJ_X9_62_c_TwoCurve,4L\n\n#define SN_X9_62_c2tnb191v1             \"c2tnb191v1\"\n#define NID_X9_62_c2tnb191v1            688\n#define OBJ_X9_62_c2tnb191v1            OBJ_X9_62_c_TwoCurve,5L\n\n#define SN_X9_62_c2tnb191v2             \"c2tnb191v2\"\n#define NID_X9_62_c2tnb191v2            689\n#define OBJ_X9_62_c2tnb191v2            OBJ_X9_62_c_TwoCurve,6L\n\n#define SN_X9_62_c2tnb191v3             \"c2tnb191v3\"\n#define NID_X9_62_c2tnb191v3            690\n#define OBJ_X9_62_c2tnb191v3            OBJ_X9_62_c_TwoCurve,7L\n\n#define SN_X9_62_c2onb191v4             \"c2onb191v4\"\n#define NID_X9_62_c2onb191v4            691\n#define OBJ_X9_62_c2onb191v4            OBJ_X9_62_c_TwoCurve,8L\n\n#define SN_X9_62_c2onb191v5             \"c2onb191v5\"\n#define NID_X9_62_c2onb191v5            692\n#define OBJ_X9_62_c2onb191v5            OBJ_X9_62_c_TwoCurve,9L\n\n#define SN_X9_62_c2pnb208w1             \"c2pnb208w1\"\n#define NID_X9_62_c2pnb208w1            693\n#define OBJ_X9_62_c2pnb208w1            OBJ_X9_62_c_TwoCurve,10L\n\n#define SN_X9_62_c2tnb239v1             \"c2tnb239v1\"\n#define NID_X9_62_c2tnb239v1            694\n#define OBJ_X9_62_c2tnb239v1            OBJ_X9_62_c_TwoCurve,11L\n\n#define SN_X9_62_c2tnb239v2             \"c2tnb239v2\"\n#define NID_X9_62_c2tnb239v2            695\n#define OBJ_X9_62_c2tnb239v2            OBJ_X9_62_c_TwoCurve,12L\n\n#define SN_X9_62_c2tnb239v3             \"c2tnb239v3\"\n#define NID_X9_62_c2tnb239v3            696\n#define OBJ_X9_62_c2tnb239v3            OBJ_X9_62_c_TwoCurve,13L\n\n#define SN_X9_62_c2onb239v4             \"c2onb239v4\"\n#define NID_X9_62_c2onb239v4            697\n#define OBJ_X9_62_c2onb239v4            OBJ_X9_62_c_TwoCurve,14L\n\n#define SN_X9_62_c2onb239v5             \"c2onb239v5\"\n#define NID_X9_62_c2onb239v5            698\n#define OBJ_X9_62_c2onb239v5            OBJ_X9_62_c_TwoCurve,15L\n\n#define SN_X9_62_c2pnb272w1             \"c2pnb272w1\"\n#define NID_X9_62_c2pnb272w1            699\n#define OBJ_X9_62_c2pnb272w1            OBJ_X9_62_c_TwoCurve,16L\n\n#define SN_X9_62_c2pnb304w1             \"c2pnb304w1\"\n#define NID_X9_62_c2pnb304w1            700\n#define OBJ_X9_62_c2pnb304w1            OBJ_X9_62_c_TwoCurve,17L\n\n#define SN_X9_62_c2tnb359v1             \"c2tnb359v1\"\n#define NID_X9_62_c2tnb359v1            701\n#define OBJ_X9_62_c2tnb359v1            OBJ_X9_62_c_TwoCurve,18L\n\n#define SN_X9_62_c2pnb368w1             \"c2pnb368w1\"\n#define NID_X9_62_c2pnb368w1            702\n#define OBJ_X9_62_c2pnb368w1            OBJ_X9_62_c_TwoCurve,19L\n\n#define SN_X9_62_c2tnb431r1             \"c2tnb431r1\"\n#define NID_X9_62_c2tnb431r1            703\n#define OBJ_X9_62_c2tnb431r1            OBJ_X9_62_c_TwoCurve,20L\n\n#define OBJ_X9_62_primeCurve            OBJ_X9_62_ellipticCurve,1L\n\n#define SN_X9_62_prime192v1             \"prime192v1\"\n#define NID_X9_62_prime192v1            409\n#define OBJ_X9_62_prime192v1            OBJ_X9_62_primeCurve,1L\n\n#define SN_X9_62_prime192v2             \"prime192v2\"\n#define NID_X9_62_prime192v2            410\n#define OBJ_X9_62_prime192v2            OBJ_X9_62_primeCurve,2L\n\n#define SN_X9_62_prime192v3             \"prime192v3\"\n#define NID_X9_62_prime192v3            411\n#define OBJ_X9_62_prime192v3            OBJ_X9_62_primeCurve,3L\n\n#define SN_X9_62_prime239v1             \"prime239v1\"\n#define NID_X9_62_prime239v1            412\n#define OBJ_X9_62_prime239v1            OBJ_X9_62_primeCurve,4L\n\n#define SN_X9_62_prime239v2             \"prime239v2\"\n#define NID_X9_62_prime239v2            413\n#define OBJ_X9_62_prime239v2            OBJ_X9_62_primeCurve,5L\n\n#define SN_X9_62_prime239v3             \"prime239v3\"\n#define NID_X9_62_prime239v3            414\n#define OBJ_X9_62_prime239v3            OBJ_X9_62_primeCurve,6L\n\n#define SN_X9_62_prime256v1             \"prime256v1\"\n#define NID_X9_62_prime256v1            415\n#define OBJ_X9_62_prime256v1            OBJ_X9_62_primeCurve,7L\n\n#define OBJ_X9_62_id_ecSigType          OBJ_ansi_X9_62,4L\n\n#define SN_ecdsa_with_SHA1              \"ecdsa-with-SHA1\"\n#define NID_ecdsa_with_SHA1             416\n#define OBJ_ecdsa_with_SHA1             OBJ_X9_62_id_ecSigType,1L\n\n#define SN_ecdsa_with_Recommended               \"ecdsa-with-Recommended\"\n#define NID_ecdsa_with_Recommended              791\n#define OBJ_ecdsa_with_Recommended              OBJ_X9_62_id_ecSigType,2L\n\n#define SN_ecdsa_with_Specified         \"ecdsa-with-Specified\"\n#define NID_ecdsa_with_Specified                792\n#define OBJ_ecdsa_with_Specified                OBJ_X9_62_id_ecSigType,3L\n\n#define SN_ecdsa_with_SHA224            \"ecdsa-with-SHA224\"\n#define NID_ecdsa_with_SHA224           793\n#define OBJ_ecdsa_with_SHA224           OBJ_ecdsa_with_Specified,1L\n\n#define SN_ecdsa_with_SHA256            \"ecdsa-with-SHA256\"\n#define NID_ecdsa_with_SHA256           794\n#define OBJ_ecdsa_with_SHA256           OBJ_ecdsa_with_Specified,2L\n\n#define SN_ecdsa_with_SHA384            \"ecdsa-with-SHA384\"\n#define NID_ecdsa_with_SHA384           795\n#define OBJ_ecdsa_with_SHA384           OBJ_ecdsa_with_Specified,3L\n\n#define SN_ecdsa_with_SHA512            \"ecdsa-with-SHA512\"\n#define NID_ecdsa_with_SHA512           796\n#define OBJ_ecdsa_with_SHA512           OBJ_ecdsa_with_Specified,4L\n\n#define OBJ_secg_ellipticCurve          OBJ_certicom_arc,0L\n\n#define SN_secp112r1            \"secp112r1\"\n#define NID_secp112r1           704\n#define OBJ_secp112r1           OBJ_secg_ellipticCurve,6L\n\n#define SN_secp112r2            \"secp112r2\"\n#define NID_secp112r2           705\n#define OBJ_secp112r2           OBJ_secg_ellipticCurve,7L\n\n#define SN_secp128r1            \"secp128r1\"\n#define NID_secp128r1           706\n#define OBJ_secp128r1           OBJ_secg_ellipticCurve,28L\n\n#define SN_secp128r2            \"secp128r2\"\n#define NID_secp128r2           707\n#define OBJ_secp128r2           OBJ_secg_ellipticCurve,29L\n\n#define SN_secp160k1            \"secp160k1\"\n#define NID_secp160k1           708\n#define OBJ_secp160k1           OBJ_secg_ellipticCurve,9L\n\n#define SN_secp160r1            \"secp160r1\"\n#define NID_secp160r1           709\n#define OBJ_secp160r1           OBJ_secg_ellipticCurve,8L\n\n#define SN_secp160r2            \"secp160r2\"\n#define NID_secp160r2           710\n#define OBJ_secp160r2           OBJ_secg_ellipticCurve,30L\n\n#define SN_secp192k1            \"secp192k1\"\n#define NID_secp192k1           711\n#define OBJ_secp192k1           OBJ_secg_ellipticCurve,31L\n\n#define SN_secp224k1            \"secp224k1\"\n#define NID_secp224k1           712\n#define OBJ_secp224k1           OBJ_secg_ellipticCurve,32L\n\n#define SN_secp224r1            \"secp224r1\"\n#define NID_secp224r1           713\n#define OBJ_secp224r1           OBJ_secg_ellipticCurve,33L\n\n#define SN_secp256k1            \"secp256k1\"\n#define NID_secp256k1           714\n#define OBJ_secp256k1           OBJ_secg_ellipticCurve,10L\n\n#define SN_secp384r1            \"secp384r1\"\n#define NID_secp384r1           715\n#define OBJ_secp384r1           OBJ_secg_ellipticCurve,34L\n\n#define SN_secp521r1            \"secp521r1\"\n#define NID_secp521r1           716\n#define OBJ_secp521r1           OBJ_secg_ellipticCurve,35L\n\n#define SN_sect113r1            \"sect113r1\"\n#define NID_sect113r1           717\n#define OBJ_sect113r1           OBJ_secg_ellipticCurve,4L\n\n#define SN_sect113r2            \"sect113r2\"\n#define NID_sect113r2           718\n#define OBJ_sect113r2           OBJ_secg_ellipticCurve,5L\n\n#define SN_sect131r1            \"sect131r1\"\n#define NID_sect131r1           719\n#define OBJ_sect131r1           OBJ_secg_ellipticCurve,22L\n\n#define SN_sect131r2            \"sect131r2\"\n#define NID_sect131r2           720\n#define OBJ_sect131r2           OBJ_secg_ellipticCurve,23L\n\n#define SN_sect163k1            \"sect163k1\"\n#define NID_sect163k1           721\n#define OBJ_sect163k1           OBJ_secg_ellipticCurve,1L\n\n#define SN_sect163r1            \"sect163r1\"\n#define NID_sect163r1           722\n#define OBJ_sect163r1           OBJ_secg_ellipticCurve,2L\n\n#define SN_sect163r2            \"sect163r2\"\n#define NID_sect163r2           723\n#define OBJ_sect163r2           OBJ_secg_ellipticCurve,15L\n\n#define SN_sect193r1            \"sect193r1\"\n#define NID_sect193r1           724\n#define OBJ_sect193r1           OBJ_secg_ellipticCurve,24L\n\n#define SN_sect193r2            \"sect193r2\"\n#define NID_sect193r2           725\n#define OBJ_sect193r2           OBJ_secg_ellipticCurve,25L\n\n#define SN_sect233k1            \"sect233k1\"\n#define NID_sect233k1           726\n#define OBJ_sect233k1           OBJ_secg_ellipticCurve,26L\n\n#define SN_sect233r1            \"sect233r1\"\n#define NID_sect233r1           727\n#define OBJ_sect233r1           OBJ_secg_ellipticCurve,27L\n\n#define SN_sect239k1            \"sect239k1\"\n#define NID_sect239k1           728\n#define OBJ_sect239k1           OBJ_secg_ellipticCurve,3L\n\n#define SN_sect283k1            \"sect283k1\"\n#define NID_sect283k1           729\n#define OBJ_sect283k1           OBJ_secg_ellipticCurve,16L\n\n#define SN_sect283r1            \"sect283r1\"\n#define NID_sect283r1           730\n#define OBJ_sect283r1           OBJ_secg_ellipticCurve,17L\n\n#define SN_sect409k1            \"sect409k1\"\n#define NID_sect409k1           731\n#define OBJ_sect409k1           OBJ_secg_ellipticCurve,36L\n\n#define SN_sect409r1            \"sect409r1\"\n#define NID_sect409r1           732\n#define OBJ_sect409r1           OBJ_secg_ellipticCurve,37L\n\n#define SN_sect571k1            \"sect571k1\"\n#define NID_sect571k1           733\n#define OBJ_sect571k1           OBJ_secg_ellipticCurve,38L\n\n#define SN_sect571r1            \"sect571r1\"\n#define NID_sect571r1           734\n#define OBJ_sect571r1           OBJ_secg_ellipticCurve,39L\n\n#define OBJ_wap_wsg_idm_ecid            OBJ_wap_wsg,4L\n\n#define SN_wap_wsg_idm_ecid_wtls1               \"wap-wsg-idm-ecid-wtls1\"\n#define NID_wap_wsg_idm_ecid_wtls1              735\n#define OBJ_wap_wsg_idm_ecid_wtls1              OBJ_wap_wsg_idm_ecid,1L\n\n#define SN_wap_wsg_idm_ecid_wtls3               \"wap-wsg-idm-ecid-wtls3\"\n#define NID_wap_wsg_idm_ecid_wtls3              736\n#define OBJ_wap_wsg_idm_ecid_wtls3              OBJ_wap_wsg_idm_ecid,3L\n\n#define SN_wap_wsg_idm_ecid_wtls4               \"wap-wsg-idm-ecid-wtls4\"\n#define NID_wap_wsg_idm_ecid_wtls4              737\n#define OBJ_wap_wsg_idm_ecid_wtls4              OBJ_wap_wsg_idm_ecid,4L\n\n#define SN_wap_wsg_idm_ecid_wtls5               \"wap-wsg-idm-ecid-wtls5\"\n#define NID_wap_wsg_idm_ecid_wtls5              738\n#define OBJ_wap_wsg_idm_ecid_wtls5              OBJ_wap_wsg_idm_ecid,5L\n\n#define SN_wap_wsg_idm_ecid_wtls6               \"wap-wsg-idm-ecid-wtls6\"\n#define NID_wap_wsg_idm_ecid_wtls6              739\n#define OBJ_wap_wsg_idm_ecid_wtls6              OBJ_wap_wsg_idm_ecid,6L\n\n#define SN_wap_wsg_idm_ecid_wtls7               \"wap-wsg-idm-ecid-wtls7\"\n#define NID_wap_wsg_idm_ecid_wtls7              740\n#define OBJ_wap_wsg_idm_ecid_wtls7              OBJ_wap_wsg_idm_ecid,7L\n\n#define SN_wap_wsg_idm_ecid_wtls8               \"wap-wsg-idm-ecid-wtls8\"\n#define NID_wap_wsg_idm_ecid_wtls8              741\n#define OBJ_wap_wsg_idm_ecid_wtls8              OBJ_wap_wsg_idm_ecid,8L\n\n#define SN_wap_wsg_idm_ecid_wtls9               \"wap-wsg-idm-ecid-wtls9\"\n#define NID_wap_wsg_idm_ecid_wtls9              742\n#define OBJ_wap_wsg_idm_ecid_wtls9              OBJ_wap_wsg_idm_ecid,9L\n\n#define SN_wap_wsg_idm_ecid_wtls10              \"wap-wsg-idm-ecid-wtls10\"\n#define NID_wap_wsg_idm_ecid_wtls10             743\n#define OBJ_wap_wsg_idm_ecid_wtls10             OBJ_wap_wsg_idm_ecid,10L\n\n#define SN_wap_wsg_idm_ecid_wtls11              \"wap-wsg-idm-ecid-wtls11\"\n#define NID_wap_wsg_idm_ecid_wtls11             744\n#define OBJ_wap_wsg_idm_ecid_wtls11             OBJ_wap_wsg_idm_ecid,11L\n\n#define SN_wap_wsg_idm_ecid_wtls12              \"wap-wsg-idm-ecid-wtls12\"\n#define NID_wap_wsg_idm_ecid_wtls12             745\n#define OBJ_wap_wsg_idm_ecid_wtls12             OBJ_wap_wsg_idm_ecid,12L\n\n#define SN_cast5_cbc            \"CAST5-CBC\"\n#define LN_cast5_cbc            \"cast5-cbc\"\n#define NID_cast5_cbc           108\n#define OBJ_cast5_cbc           OBJ_ISO_US,113533L,7L,66L,10L\n\n#define SN_cast5_ecb            \"CAST5-ECB\"\n#define LN_cast5_ecb            \"cast5-ecb\"\n#define NID_cast5_ecb           109\n\n#define SN_cast5_cfb64          \"CAST5-CFB\"\n#define LN_cast5_cfb64          \"cast5-cfb\"\n#define NID_cast5_cfb64         110\n\n#define SN_cast5_ofb64          \"CAST5-OFB\"\n#define LN_cast5_ofb64          \"cast5-ofb\"\n#define NID_cast5_ofb64         111\n\n#define LN_pbeWithMD5AndCast5_CBC               \"pbeWithMD5AndCast5CBC\"\n#define NID_pbeWithMD5AndCast5_CBC              112\n#define OBJ_pbeWithMD5AndCast5_CBC              OBJ_ISO_US,113533L,7L,66L,12L\n\n#define SN_id_PasswordBasedMAC          \"id-PasswordBasedMAC\"\n#define LN_id_PasswordBasedMAC          \"password based MAC\"\n#define NID_id_PasswordBasedMAC         782\n#define OBJ_id_PasswordBasedMAC         OBJ_ISO_US,113533L,7L,66L,13L\n\n#define SN_id_DHBasedMac                \"id-DHBasedMac\"\n#define LN_id_DHBasedMac                \"Diffie-Hellman based MAC\"\n#define NID_id_DHBasedMac               783\n#define OBJ_id_DHBasedMac               OBJ_ISO_US,113533L,7L,66L,30L\n\n#define SN_rsadsi               \"rsadsi\"\n#define LN_rsadsi               \"RSA Data Security, Inc.\"\n#define NID_rsadsi              1\n#define OBJ_rsadsi              OBJ_ISO_US,113549L\n\n#define SN_pkcs         \"pkcs\"\n#define LN_pkcs         \"RSA Data Security, Inc. PKCS\"\n#define NID_pkcs                2\n#define OBJ_pkcs                OBJ_rsadsi,1L\n\n#define SN_pkcs1                \"pkcs1\"\n#define NID_pkcs1               186\n#define OBJ_pkcs1               OBJ_pkcs,1L\n\n#define LN_rsaEncryption                \"rsaEncryption\"\n#define NID_rsaEncryption               6\n#define OBJ_rsaEncryption               OBJ_pkcs1,1L\n\n#define SN_md2WithRSAEncryption         \"RSA-MD2\"\n#define LN_md2WithRSAEncryption         \"md2WithRSAEncryption\"\n#define NID_md2WithRSAEncryption                7\n#define OBJ_md2WithRSAEncryption                OBJ_pkcs1,2L\n\n#define SN_md4WithRSAEncryption         \"RSA-MD4\"\n#define LN_md4WithRSAEncryption         \"md4WithRSAEncryption\"\n#define NID_md4WithRSAEncryption                396\n#define OBJ_md4WithRSAEncryption                OBJ_pkcs1,3L\n\n#define SN_md5WithRSAEncryption         \"RSA-MD5\"\n#define LN_md5WithRSAEncryption         \"md5WithRSAEncryption\"\n#define NID_md5WithRSAEncryption                8\n#define OBJ_md5WithRSAEncryption                OBJ_pkcs1,4L\n\n#define SN_sha1WithRSAEncryption                \"RSA-SHA1\"\n#define LN_sha1WithRSAEncryption                \"sha1WithRSAEncryption\"\n#define NID_sha1WithRSAEncryption               65\n#define OBJ_sha1WithRSAEncryption               OBJ_pkcs1,5L\n\n#define SN_rsaesOaep            \"RSAES-OAEP\"\n#define LN_rsaesOaep            \"rsaesOaep\"\n#define NID_rsaesOaep           919\n#define OBJ_rsaesOaep           OBJ_pkcs1,7L\n\n#define SN_mgf1         \"MGF1\"\n#define LN_mgf1         \"mgf1\"\n#define NID_mgf1                911\n#define OBJ_mgf1                OBJ_pkcs1,8L\n\n#define SN_pSpecified           \"PSPECIFIED\"\n#define LN_pSpecified           \"pSpecified\"\n#define NID_pSpecified          935\n#define OBJ_pSpecified          OBJ_pkcs1,9L\n\n#define SN_rsassaPss            \"RSASSA-PSS\"\n#define LN_rsassaPss            \"rsassaPss\"\n#define NID_rsassaPss           912\n#define OBJ_rsassaPss           OBJ_pkcs1,10L\n\n#define SN_sha256WithRSAEncryption              \"RSA-SHA256\"\n#define LN_sha256WithRSAEncryption              \"sha256WithRSAEncryption\"\n#define NID_sha256WithRSAEncryption             668\n#define OBJ_sha256WithRSAEncryption             OBJ_pkcs1,11L\n\n#define SN_sha384WithRSAEncryption              \"RSA-SHA384\"\n#define LN_sha384WithRSAEncryption              \"sha384WithRSAEncryption\"\n#define NID_sha384WithRSAEncryption             669\n#define OBJ_sha384WithRSAEncryption             OBJ_pkcs1,12L\n\n#define SN_sha512WithRSAEncryption              \"RSA-SHA512\"\n#define LN_sha512WithRSAEncryption              \"sha512WithRSAEncryption\"\n#define NID_sha512WithRSAEncryption             670\n#define OBJ_sha512WithRSAEncryption             OBJ_pkcs1,13L\n\n#define SN_sha224WithRSAEncryption              \"RSA-SHA224\"\n#define LN_sha224WithRSAEncryption              \"sha224WithRSAEncryption\"\n#define NID_sha224WithRSAEncryption             671\n#define OBJ_sha224WithRSAEncryption             OBJ_pkcs1,14L\n\n#define SN_pkcs3                \"pkcs3\"\n#define NID_pkcs3               27\n#define OBJ_pkcs3               OBJ_pkcs,3L\n\n#define LN_dhKeyAgreement               \"dhKeyAgreement\"\n#define NID_dhKeyAgreement              28\n#define OBJ_dhKeyAgreement              OBJ_pkcs3,1L\n\n#define SN_pkcs5                \"pkcs5\"\n#define NID_pkcs5               187\n#define OBJ_pkcs5               OBJ_pkcs,5L\n\n#define SN_pbeWithMD2AndDES_CBC         \"PBE-MD2-DES\"\n#define LN_pbeWithMD2AndDES_CBC         \"pbeWithMD2AndDES-CBC\"\n#define NID_pbeWithMD2AndDES_CBC                9\n#define OBJ_pbeWithMD2AndDES_CBC                OBJ_pkcs5,1L\n\n#define SN_pbeWithMD5AndDES_CBC         \"PBE-MD5-DES\"\n#define LN_pbeWithMD5AndDES_CBC         \"pbeWithMD5AndDES-CBC\"\n#define NID_pbeWithMD5AndDES_CBC                10\n#define OBJ_pbeWithMD5AndDES_CBC                OBJ_pkcs5,3L\n\n#define SN_pbeWithMD2AndRC2_CBC         \"PBE-MD2-RC2-64\"\n#define LN_pbeWithMD2AndRC2_CBC         \"pbeWithMD2AndRC2-CBC\"\n#define NID_pbeWithMD2AndRC2_CBC                168\n#define OBJ_pbeWithMD2AndRC2_CBC                OBJ_pkcs5,4L\n\n#define SN_pbeWithMD5AndRC2_CBC         \"PBE-MD5-RC2-64\"\n#define LN_pbeWithMD5AndRC2_CBC         \"pbeWithMD5AndRC2-CBC\"\n#define NID_pbeWithMD5AndRC2_CBC                169\n#define OBJ_pbeWithMD5AndRC2_CBC                OBJ_pkcs5,6L\n\n#define SN_pbeWithSHA1AndDES_CBC                \"PBE-SHA1-DES\"\n#define LN_pbeWithSHA1AndDES_CBC                \"pbeWithSHA1AndDES-CBC\"\n#define NID_pbeWithSHA1AndDES_CBC               170\n#define OBJ_pbeWithSHA1AndDES_CBC               OBJ_pkcs5,10L\n\n#define SN_pbeWithSHA1AndRC2_CBC                \"PBE-SHA1-RC2-64\"\n#define LN_pbeWithSHA1AndRC2_CBC                \"pbeWithSHA1AndRC2-CBC\"\n#define NID_pbeWithSHA1AndRC2_CBC               68\n#define OBJ_pbeWithSHA1AndRC2_CBC               OBJ_pkcs5,11L\n\n#define LN_id_pbkdf2            \"PBKDF2\"\n#define NID_id_pbkdf2           69\n#define OBJ_id_pbkdf2           OBJ_pkcs5,12L\n\n#define LN_pbes2                \"PBES2\"\n#define NID_pbes2               161\n#define OBJ_pbes2               OBJ_pkcs5,13L\n\n#define LN_pbmac1               \"PBMAC1\"\n#define NID_pbmac1              162\n#define OBJ_pbmac1              OBJ_pkcs5,14L\n\n#define SN_pkcs7                \"pkcs7\"\n#define NID_pkcs7               20\n#define OBJ_pkcs7               OBJ_pkcs,7L\n\n#define LN_pkcs7_data           \"pkcs7-data\"\n#define NID_pkcs7_data          21\n#define OBJ_pkcs7_data          OBJ_pkcs7,1L\n\n#define LN_pkcs7_signed         \"pkcs7-signedData\"\n#define NID_pkcs7_signed                22\n#define OBJ_pkcs7_signed                OBJ_pkcs7,2L\n\n#define LN_pkcs7_enveloped              \"pkcs7-envelopedData\"\n#define NID_pkcs7_enveloped             23\n#define OBJ_pkcs7_enveloped             OBJ_pkcs7,3L\n\n#define LN_pkcs7_signedAndEnveloped             \"pkcs7-signedAndEnvelopedData\"\n#define NID_pkcs7_signedAndEnveloped            24\n#define OBJ_pkcs7_signedAndEnveloped            OBJ_pkcs7,4L\n\n#define LN_pkcs7_digest         \"pkcs7-digestData\"\n#define NID_pkcs7_digest                25\n#define OBJ_pkcs7_digest                OBJ_pkcs7,5L\n\n#define LN_pkcs7_encrypted              \"pkcs7-encryptedData\"\n#define NID_pkcs7_encrypted             26\n#define OBJ_pkcs7_encrypted             OBJ_pkcs7,6L\n\n#define SN_pkcs9                \"pkcs9\"\n#define NID_pkcs9               47\n#define OBJ_pkcs9               OBJ_pkcs,9L\n\n#define LN_pkcs9_emailAddress           \"emailAddress\"\n#define NID_pkcs9_emailAddress          48\n#define OBJ_pkcs9_emailAddress          OBJ_pkcs9,1L\n\n#define LN_pkcs9_unstructuredName               \"unstructuredName\"\n#define NID_pkcs9_unstructuredName              49\n#define OBJ_pkcs9_unstructuredName              OBJ_pkcs9,2L\n\n#define LN_pkcs9_contentType            \"contentType\"\n#define NID_pkcs9_contentType           50\n#define OBJ_pkcs9_contentType           OBJ_pkcs9,3L\n\n#define LN_pkcs9_messageDigest          \"messageDigest\"\n#define NID_pkcs9_messageDigest         51\n#define OBJ_pkcs9_messageDigest         OBJ_pkcs9,4L\n\n#define LN_pkcs9_signingTime            \"signingTime\"\n#define NID_pkcs9_signingTime           52\n#define OBJ_pkcs9_signingTime           OBJ_pkcs9,5L\n\n#define LN_pkcs9_countersignature               \"countersignature\"\n#define NID_pkcs9_countersignature              53\n#define OBJ_pkcs9_countersignature              OBJ_pkcs9,6L\n\n#define LN_pkcs9_challengePassword              \"challengePassword\"\n#define NID_pkcs9_challengePassword             54\n#define OBJ_pkcs9_challengePassword             OBJ_pkcs9,7L\n\n#define LN_pkcs9_unstructuredAddress            \"unstructuredAddress\"\n#define NID_pkcs9_unstructuredAddress           55\n#define OBJ_pkcs9_unstructuredAddress           OBJ_pkcs9,8L\n\n#define LN_pkcs9_extCertAttributes              \"extendedCertificateAttributes\"\n#define NID_pkcs9_extCertAttributes             56\n#define OBJ_pkcs9_extCertAttributes             OBJ_pkcs9,9L\n\n#define SN_ext_req              \"extReq\"\n#define LN_ext_req              \"Extension Request\"\n#define NID_ext_req             172\n#define OBJ_ext_req             OBJ_pkcs9,14L\n\n#define SN_SMIMECapabilities            \"SMIME-CAPS\"\n#define LN_SMIMECapabilities            \"S/MIME Capabilities\"\n#define NID_SMIMECapabilities           167\n#define OBJ_SMIMECapabilities           OBJ_pkcs9,15L\n\n#define SN_SMIME                \"SMIME\"\n#define LN_SMIME                \"S/MIME\"\n#define NID_SMIME               188\n#define OBJ_SMIME               OBJ_pkcs9,16L\n\n#define SN_id_smime_mod         \"id-smime-mod\"\n#define NID_id_smime_mod                189\n#define OBJ_id_smime_mod                OBJ_SMIME,0L\n\n#define SN_id_smime_ct          \"id-smime-ct\"\n#define NID_id_smime_ct         190\n#define OBJ_id_smime_ct         OBJ_SMIME,1L\n\n#define SN_id_smime_aa          \"id-smime-aa\"\n#define NID_id_smime_aa         191\n#define OBJ_id_smime_aa         OBJ_SMIME,2L\n\n#define SN_id_smime_alg         \"id-smime-alg\"\n#define NID_id_smime_alg                192\n#define OBJ_id_smime_alg                OBJ_SMIME,3L\n\n#define SN_id_smime_cd          \"id-smime-cd\"\n#define NID_id_smime_cd         193\n#define OBJ_id_smime_cd         OBJ_SMIME,4L\n\n#define SN_id_smime_spq         \"id-smime-spq\"\n#define NID_id_smime_spq                194\n#define OBJ_id_smime_spq                OBJ_SMIME,5L\n\n#define SN_id_smime_cti         \"id-smime-cti\"\n#define NID_id_smime_cti                195\n#define OBJ_id_smime_cti                OBJ_SMIME,6L\n\n#define SN_id_smime_mod_cms             \"id-smime-mod-cms\"\n#define NID_id_smime_mod_cms            196\n#define OBJ_id_smime_mod_cms            OBJ_id_smime_mod,1L\n\n#define SN_id_smime_mod_ess             \"id-smime-mod-ess\"\n#define NID_id_smime_mod_ess            197\n#define OBJ_id_smime_mod_ess            OBJ_id_smime_mod,2L\n\n#define SN_id_smime_mod_oid             \"id-smime-mod-oid\"\n#define NID_id_smime_mod_oid            198\n#define OBJ_id_smime_mod_oid            OBJ_id_smime_mod,3L\n\n#define SN_id_smime_mod_msg_v3          \"id-smime-mod-msg-v3\"\n#define NID_id_smime_mod_msg_v3         199\n#define OBJ_id_smime_mod_msg_v3         OBJ_id_smime_mod,4L\n\n#define SN_id_smime_mod_ets_eSignature_88               \"id-smime-mod-ets-eSignature-88\"\n#define NID_id_smime_mod_ets_eSignature_88              200\n#define OBJ_id_smime_mod_ets_eSignature_88              OBJ_id_smime_mod,5L\n\n#define SN_id_smime_mod_ets_eSignature_97               \"id-smime-mod-ets-eSignature-97\"\n#define NID_id_smime_mod_ets_eSignature_97              201\n#define OBJ_id_smime_mod_ets_eSignature_97              OBJ_id_smime_mod,6L\n\n#define SN_id_smime_mod_ets_eSigPolicy_88               \"id-smime-mod-ets-eSigPolicy-88\"\n#define NID_id_smime_mod_ets_eSigPolicy_88              202\n#define OBJ_id_smime_mod_ets_eSigPolicy_88              OBJ_id_smime_mod,7L\n\n#define SN_id_smime_mod_ets_eSigPolicy_97               \"id-smime-mod-ets-eSigPolicy-97\"\n#define NID_id_smime_mod_ets_eSigPolicy_97              203\n#define OBJ_id_smime_mod_ets_eSigPolicy_97              OBJ_id_smime_mod,8L\n\n#define SN_id_smime_ct_receipt          \"id-smime-ct-receipt\"\n#define NID_id_smime_ct_receipt         204\n#define OBJ_id_smime_ct_receipt         OBJ_id_smime_ct,1L\n\n#define SN_id_smime_ct_authData         \"id-smime-ct-authData\"\n#define NID_id_smime_ct_authData                205\n#define OBJ_id_smime_ct_authData                OBJ_id_smime_ct,2L\n\n#define SN_id_smime_ct_publishCert              \"id-smime-ct-publishCert\"\n#define NID_id_smime_ct_publishCert             206\n#define OBJ_id_smime_ct_publishCert             OBJ_id_smime_ct,3L\n\n#define SN_id_smime_ct_TSTInfo          \"id-smime-ct-TSTInfo\"\n#define NID_id_smime_ct_TSTInfo         207\n#define OBJ_id_smime_ct_TSTInfo         OBJ_id_smime_ct,4L\n\n#define SN_id_smime_ct_TDTInfo          \"id-smime-ct-TDTInfo\"\n#define NID_id_smime_ct_TDTInfo         208\n#define OBJ_id_smime_ct_TDTInfo         OBJ_id_smime_ct,5L\n\n#define SN_id_smime_ct_contentInfo              \"id-smime-ct-contentInfo\"\n#define NID_id_smime_ct_contentInfo             209\n#define OBJ_id_smime_ct_contentInfo             OBJ_id_smime_ct,6L\n\n#define SN_id_smime_ct_DVCSRequestData          \"id-smime-ct-DVCSRequestData\"\n#define NID_id_smime_ct_DVCSRequestData         210\n#define OBJ_id_smime_ct_DVCSRequestData         OBJ_id_smime_ct,7L\n\n#define SN_id_smime_ct_DVCSResponseData         \"id-smime-ct-DVCSResponseData\"\n#define NID_id_smime_ct_DVCSResponseData                211\n#define OBJ_id_smime_ct_DVCSResponseData                OBJ_id_smime_ct,8L\n\n#define SN_id_smime_ct_compressedData           \"id-smime-ct-compressedData\"\n#define NID_id_smime_ct_compressedData          786\n#define OBJ_id_smime_ct_compressedData          OBJ_id_smime_ct,9L\n\n#define SN_id_ct_asciiTextWithCRLF              \"id-ct-asciiTextWithCRLF\"\n#define NID_id_ct_asciiTextWithCRLF             787\n#define OBJ_id_ct_asciiTextWithCRLF             OBJ_id_smime_ct,27L\n\n#define SN_id_smime_aa_receiptRequest           \"id-smime-aa-receiptRequest\"\n#define NID_id_smime_aa_receiptRequest          212\n#define OBJ_id_smime_aa_receiptRequest          OBJ_id_smime_aa,1L\n\n#define SN_id_smime_aa_securityLabel            \"id-smime-aa-securityLabel\"\n#define NID_id_smime_aa_securityLabel           213\n#define OBJ_id_smime_aa_securityLabel           OBJ_id_smime_aa,2L\n\n#define SN_id_smime_aa_mlExpandHistory          \"id-smime-aa-mlExpandHistory\"\n#define NID_id_smime_aa_mlExpandHistory         214\n#define OBJ_id_smime_aa_mlExpandHistory         OBJ_id_smime_aa,3L\n\n#define SN_id_smime_aa_contentHint              \"id-smime-aa-contentHint\"\n#define NID_id_smime_aa_contentHint             215\n#define OBJ_id_smime_aa_contentHint             OBJ_id_smime_aa,4L\n\n#define SN_id_smime_aa_msgSigDigest             \"id-smime-aa-msgSigDigest\"\n#define NID_id_smime_aa_msgSigDigest            216\n#define OBJ_id_smime_aa_msgSigDigest            OBJ_id_smime_aa,5L\n\n#define SN_id_smime_aa_encapContentType         \"id-smime-aa-encapContentType\"\n#define NID_id_smime_aa_encapContentType                217\n#define OBJ_id_smime_aa_encapContentType                OBJ_id_smime_aa,6L\n\n#define SN_id_smime_aa_contentIdentifier                \"id-smime-aa-contentIdentifier\"\n#define NID_id_smime_aa_contentIdentifier               218\n#define OBJ_id_smime_aa_contentIdentifier               OBJ_id_smime_aa,7L\n\n#define SN_id_smime_aa_macValue         \"id-smime-aa-macValue\"\n#define NID_id_smime_aa_macValue                219\n#define OBJ_id_smime_aa_macValue                OBJ_id_smime_aa,8L\n\n#define SN_id_smime_aa_equivalentLabels         \"id-smime-aa-equivalentLabels\"\n#define NID_id_smime_aa_equivalentLabels                220\n#define OBJ_id_smime_aa_equivalentLabels                OBJ_id_smime_aa,9L\n\n#define SN_id_smime_aa_contentReference         \"id-smime-aa-contentReference\"\n#define NID_id_smime_aa_contentReference                221\n#define OBJ_id_smime_aa_contentReference                OBJ_id_smime_aa,10L\n\n#define SN_id_smime_aa_encrypKeyPref            \"id-smime-aa-encrypKeyPref\"\n#define NID_id_smime_aa_encrypKeyPref           222\n#define OBJ_id_smime_aa_encrypKeyPref           OBJ_id_smime_aa,11L\n\n#define SN_id_smime_aa_signingCertificate               \"id-smime-aa-signingCertificate\"\n#define NID_id_smime_aa_signingCertificate              223\n#define OBJ_id_smime_aa_signingCertificate              OBJ_id_smime_aa,12L\n\n#define SN_id_smime_aa_smimeEncryptCerts                \"id-smime-aa-smimeEncryptCerts\"\n#define NID_id_smime_aa_smimeEncryptCerts               224\n#define OBJ_id_smime_aa_smimeEncryptCerts               OBJ_id_smime_aa,13L\n\n#define SN_id_smime_aa_timeStampToken           \"id-smime-aa-timeStampToken\"\n#define NID_id_smime_aa_timeStampToken          225\n#define OBJ_id_smime_aa_timeStampToken          OBJ_id_smime_aa,14L\n\n#define SN_id_smime_aa_ets_sigPolicyId          \"id-smime-aa-ets-sigPolicyId\"\n#define NID_id_smime_aa_ets_sigPolicyId         226\n#define OBJ_id_smime_aa_ets_sigPolicyId         OBJ_id_smime_aa,15L\n\n#define SN_id_smime_aa_ets_commitmentType               \"id-smime-aa-ets-commitmentType\"\n#define NID_id_smime_aa_ets_commitmentType              227\n#define OBJ_id_smime_aa_ets_commitmentType              OBJ_id_smime_aa,16L\n\n#define SN_id_smime_aa_ets_signerLocation               \"id-smime-aa-ets-signerLocation\"\n#define NID_id_smime_aa_ets_signerLocation              228\n#define OBJ_id_smime_aa_ets_signerLocation              OBJ_id_smime_aa,17L\n\n#define SN_id_smime_aa_ets_signerAttr           \"id-smime-aa-ets-signerAttr\"\n#define NID_id_smime_aa_ets_signerAttr          229\n#define OBJ_id_smime_aa_ets_signerAttr          OBJ_id_smime_aa,18L\n\n#define SN_id_smime_aa_ets_otherSigCert         \"id-smime-aa-ets-otherSigCert\"\n#define NID_id_smime_aa_ets_otherSigCert                230\n#define OBJ_id_smime_aa_ets_otherSigCert                OBJ_id_smime_aa,19L\n\n#define SN_id_smime_aa_ets_contentTimestamp             \"id-smime-aa-ets-contentTimestamp\"\n#define NID_id_smime_aa_ets_contentTimestamp            231\n#define OBJ_id_smime_aa_ets_contentTimestamp            OBJ_id_smime_aa,20L\n\n#define SN_id_smime_aa_ets_CertificateRefs              \"id-smime-aa-ets-CertificateRefs\"\n#define NID_id_smime_aa_ets_CertificateRefs             232\n#define OBJ_id_smime_aa_ets_CertificateRefs             OBJ_id_smime_aa,21L\n\n#define SN_id_smime_aa_ets_RevocationRefs               \"id-smime-aa-ets-RevocationRefs\"\n#define NID_id_smime_aa_ets_RevocationRefs              233\n#define OBJ_id_smime_aa_ets_RevocationRefs              OBJ_id_smime_aa,22L\n\n#define SN_id_smime_aa_ets_certValues           \"id-smime-aa-ets-certValues\"\n#define NID_id_smime_aa_ets_certValues          234\n#define OBJ_id_smime_aa_ets_certValues          OBJ_id_smime_aa,23L\n\n#define SN_id_smime_aa_ets_revocationValues             \"id-smime-aa-ets-revocationValues\"\n#define NID_id_smime_aa_ets_revocationValues            235\n#define OBJ_id_smime_aa_ets_revocationValues            OBJ_id_smime_aa,24L\n\n#define SN_id_smime_aa_ets_escTimeStamp         \"id-smime-aa-ets-escTimeStamp\"\n#define NID_id_smime_aa_ets_escTimeStamp                236\n#define OBJ_id_smime_aa_ets_escTimeStamp                OBJ_id_smime_aa,25L\n\n#define SN_id_smime_aa_ets_certCRLTimestamp             \"id-smime-aa-ets-certCRLTimestamp\"\n#define NID_id_smime_aa_ets_certCRLTimestamp            237\n#define OBJ_id_smime_aa_ets_certCRLTimestamp            OBJ_id_smime_aa,26L\n\n#define SN_id_smime_aa_ets_archiveTimeStamp             \"id-smime-aa-ets-archiveTimeStamp\"\n#define NID_id_smime_aa_ets_archiveTimeStamp            238\n#define OBJ_id_smime_aa_ets_archiveTimeStamp            OBJ_id_smime_aa,27L\n\n#define SN_id_smime_aa_signatureType            \"id-smime-aa-signatureType\"\n#define NID_id_smime_aa_signatureType           239\n#define OBJ_id_smime_aa_signatureType           OBJ_id_smime_aa,28L\n\n#define SN_id_smime_aa_dvcs_dvc         \"id-smime-aa-dvcs-dvc\"\n#define NID_id_smime_aa_dvcs_dvc                240\n#define OBJ_id_smime_aa_dvcs_dvc                OBJ_id_smime_aa,29L\n\n#define SN_id_smime_alg_ESDHwith3DES            \"id-smime-alg-ESDHwith3DES\"\n#define NID_id_smime_alg_ESDHwith3DES           241\n#define OBJ_id_smime_alg_ESDHwith3DES           OBJ_id_smime_alg,1L\n\n#define SN_id_smime_alg_ESDHwithRC2             \"id-smime-alg-ESDHwithRC2\"\n#define NID_id_smime_alg_ESDHwithRC2            242\n#define OBJ_id_smime_alg_ESDHwithRC2            OBJ_id_smime_alg,2L\n\n#define SN_id_smime_alg_3DESwrap                \"id-smime-alg-3DESwrap\"\n#define NID_id_smime_alg_3DESwrap               243\n#define OBJ_id_smime_alg_3DESwrap               OBJ_id_smime_alg,3L\n\n#define SN_id_smime_alg_RC2wrap         \"id-smime-alg-RC2wrap\"\n#define NID_id_smime_alg_RC2wrap                244\n#define OBJ_id_smime_alg_RC2wrap                OBJ_id_smime_alg,4L\n\n#define SN_id_smime_alg_ESDH            \"id-smime-alg-ESDH\"\n#define NID_id_smime_alg_ESDH           245\n#define OBJ_id_smime_alg_ESDH           OBJ_id_smime_alg,5L\n\n#define SN_id_smime_alg_CMS3DESwrap             \"id-smime-alg-CMS3DESwrap\"\n#define NID_id_smime_alg_CMS3DESwrap            246\n#define OBJ_id_smime_alg_CMS3DESwrap            OBJ_id_smime_alg,6L\n\n#define SN_id_smime_alg_CMSRC2wrap              \"id-smime-alg-CMSRC2wrap\"\n#define NID_id_smime_alg_CMSRC2wrap             247\n#define OBJ_id_smime_alg_CMSRC2wrap             OBJ_id_smime_alg,7L\n\n#define SN_id_alg_PWRI_KEK              \"id-alg-PWRI-KEK\"\n#define NID_id_alg_PWRI_KEK             893\n#define OBJ_id_alg_PWRI_KEK             OBJ_id_smime_alg,9L\n\n#define SN_id_smime_cd_ldap             \"id-smime-cd-ldap\"\n#define NID_id_smime_cd_ldap            248\n#define OBJ_id_smime_cd_ldap            OBJ_id_smime_cd,1L\n\n#define SN_id_smime_spq_ets_sqt_uri             \"id-smime-spq-ets-sqt-uri\"\n#define NID_id_smime_spq_ets_sqt_uri            249\n#define OBJ_id_smime_spq_ets_sqt_uri            OBJ_id_smime_spq,1L\n\n#define SN_id_smime_spq_ets_sqt_unotice         \"id-smime-spq-ets-sqt-unotice\"\n#define NID_id_smime_spq_ets_sqt_unotice                250\n#define OBJ_id_smime_spq_ets_sqt_unotice                OBJ_id_smime_spq,2L\n\n#define SN_id_smime_cti_ets_proofOfOrigin               \"id-smime-cti-ets-proofOfOrigin\"\n#define NID_id_smime_cti_ets_proofOfOrigin              251\n#define OBJ_id_smime_cti_ets_proofOfOrigin              OBJ_id_smime_cti,1L\n\n#define SN_id_smime_cti_ets_proofOfReceipt              \"id-smime-cti-ets-proofOfReceipt\"\n#define NID_id_smime_cti_ets_proofOfReceipt             252\n#define OBJ_id_smime_cti_ets_proofOfReceipt             OBJ_id_smime_cti,2L\n\n#define SN_id_smime_cti_ets_proofOfDelivery             \"id-smime-cti-ets-proofOfDelivery\"\n#define NID_id_smime_cti_ets_proofOfDelivery            253\n#define OBJ_id_smime_cti_ets_proofOfDelivery            OBJ_id_smime_cti,3L\n\n#define SN_id_smime_cti_ets_proofOfSender               \"id-smime-cti-ets-proofOfSender\"\n#define NID_id_smime_cti_ets_proofOfSender              254\n#define OBJ_id_smime_cti_ets_proofOfSender              OBJ_id_smime_cti,4L\n\n#define SN_id_smime_cti_ets_proofOfApproval             \"id-smime-cti-ets-proofOfApproval\"\n#define NID_id_smime_cti_ets_proofOfApproval            255\n#define OBJ_id_smime_cti_ets_proofOfApproval            OBJ_id_smime_cti,5L\n\n#define SN_id_smime_cti_ets_proofOfCreation             \"id-smime-cti-ets-proofOfCreation\"\n#define NID_id_smime_cti_ets_proofOfCreation            256\n#define OBJ_id_smime_cti_ets_proofOfCreation            OBJ_id_smime_cti,6L\n\n#define LN_friendlyName         \"friendlyName\"\n#define NID_friendlyName                156\n#define OBJ_friendlyName                OBJ_pkcs9,20L\n\n#define LN_localKeyID           \"localKeyID\"\n#define NID_localKeyID          157\n#define OBJ_localKeyID          OBJ_pkcs9,21L\n\n#define SN_ms_csp_name          \"CSPName\"\n#define LN_ms_csp_name          \"Microsoft CSP Name\"\n#define NID_ms_csp_name         417\n#define OBJ_ms_csp_name         1L,3L,6L,1L,4L,1L,311L,17L,1L\n\n#define SN_LocalKeySet          \"LocalKeySet\"\n#define LN_LocalKeySet          \"Microsoft Local Key set\"\n#define NID_LocalKeySet         856\n#define OBJ_LocalKeySet         1L,3L,6L,1L,4L,1L,311L,17L,2L\n\n#define OBJ_certTypes           OBJ_pkcs9,22L\n\n#define LN_x509Certificate              \"x509Certificate\"\n#define NID_x509Certificate             158\n#define OBJ_x509Certificate             OBJ_certTypes,1L\n\n#define LN_sdsiCertificate              \"sdsiCertificate\"\n#define NID_sdsiCertificate             159\n#define OBJ_sdsiCertificate             OBJ_certTypes,2L\n\n#define OBJ_crlTypes            OBJ_pkcs9,23L\n\n#define LN_x509Crl              \"x509Crl\"\n#define NID_x509Crl             160\n#define OBJ_x509Crl             OBJ_crlTypes,1L\n\n#define OBJ_pkcs12              OBJ_pkcs,12L\n\n#define OBJ_pkcs12_pbeids               OBJ_pkcs12,1L\n\n#define SN_pbe_WithSHA1And128BitRC4             \"PBE-SHA1-RC4-128\"\n#define LN_pbe_WithSHA1And128BitRC4             \"pbeWithSHA1And128BitRC4\"\n#define NID_pbe_WithSHA1And128BitRC4            144\n#define OBJ_pbe_WithSHA1And128BitRC4            OBJ_pkcs12_pbeids,1L\n\n#define SN_pbe_WithSHA1And40BitRC4              \"PBE-SHA1-RC4-40\"\n#define LN_pbe_WithSHA1And40BitRC4              \"pbeWithSHA1And40BitRC4\"\n#define NID_pbe_WithSHA1And40BitRC4             145\n#define OBJ_pbe_WithSHA1And40BitRC4             OBJ_pkcs12_pbeids,2L\n\n#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC           \"PBE-SHA1-3DES\"\n#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC           \"pbeWithSHA1And3-KeyTripleDES-CBC\"\n#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC          146\n#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC          OBJ_pkcs12_pbeids,3L\n\n#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC           \"PBE-SHA1-2DES\"\n#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC           \"pbeWithSHA1And2-KeyTripleDES-CBC\"\n#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC          147\n#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC          OBJ_pkcs12_pbeids,4L\n\n#define SN_pbe_WithSHA1And128BitRC2_CBC         \"PBE-SHA1-RC2-128\"\n#define LN_pbe_WithSHA1And128BitRC2_CBC         \"pbeWithSHA1And128BitRC2-CBC\"\n#define NID_pbe_WithSHA1And128BitRC2_CBC                148\n#define OBJ_pbe_WithSHA1And128BitRC2_CBC                OBJ_pkcs12_pbeids,5L\n\n#define SN_pbe_WithSHA1And40BitRC2_CBC          \"PBE-SHA1-RC2-40\"\n#define LN_pbe_WithSHA1And40BitRC2_CBC          \"pbeWithSHA1And40BitRC2-CBC\"\n#define NID_pbe_WithSHA1And40BitRC2_CBC         149\n#define OBJ_pbe_WithSHA1And40BitRC2_CBC         OBJ_pkcs12_pbeids,6L\n\n#define OBJ_pkcs12_Version1             OBJ_pkcs12,10L\n\n#define OBJ_pkcs12_BagIds               OBJ_pkcs12_Version1,1L\n\n#define LN_keyBag               \"keyBag\"\n#define NID_keyBag              150\n#define OBJ_keyBag              OBJ_pkcs12_BagIds,1L\n\n#define LN_pkcs8ShroudedKeyBag          \"pkcs8ShroudedKeyBag\"\n#define NID_pkcs8ShroudedKeyBag         151\n#define OBJ_pkcs8ShroudedKeyBag         OBJ_pkcs12_BagIds,2L\n\n#define LN_certBag              \"certBag\"\n#define NID_certBag             152\n#define OBJ_certBag             OBJ_pkcs12_BagIds,3L\n\n#define LN_crlBag               \"crlBag\"\n#define NID_crlBag              153\n#define OBJ_crlBag              OBJ_pkcs12_BagIds,4L\n\n#define LN_secretBag            \"secretBag\"\n#define NID_secretBag           154\n#define OBJ_secretBag           OBJ_pkcs12_BagIds,5L\n\n#define LN_safeContentsBag              \"safeContentsBag\"\n#define NID_safeContentsBag             155\n#define OBJ_safeContentsBag             OBJ_pkcs12_BagIds,6L\n\n#define SN_md2          \"MD2\"\n#define LN_md2          \"md2\"\n#define NID_md2         3\n#define OBJ_md2         OBJ_rsadsi,2L,2L\n\n#define SN_md4          \"MD4\"\n#define LN_md4          \"md4\"\n#define NID_md4         257\n#define OBJ_md4         OBJ_rsadsi,2L,4L\n\n#define SN_md5          \"MD5\"\n#define LN_md5          \"md5\"\n#define NID_md5         4\n#define OBJ_md5         OBJ_rsadsi,2L,5L\n\n#define SN_md5_sha1             \"MD5-SHA1\"\n#define LN_md5_sha1             \"md5-sha1\"\n#define NID_md5_sha1            114\n\n#define LN_hmacWithMD5          \"hmacWithMD5\"\n#define NID_hmacWithMD5         797\n#define OBJ_hmacWithMD5         OBJ_rsadsi,2L,6L\n\n#define LN_hmacWithSHA1         \"hmacWithSHA1\"\n#define NID_hmacWithSHA1                163\n#define OBJ_hmacWithSHA1                OBJ_rsadsi,2L,7L\n\n#define LN_hmacWithSHA224               \"hmacWithSHA224\"\n#define NID_hmacWithSHA224              798\n#define OBJ_hmacWithSHA224              OBJ_rsadsi,2L,8L\n\n#define LN_hmacWithSHA256               \"hmacWithSHA256\"\n#define NID_hmacWithSHA256              799\n#define OBJ_hmacWithSHA256              OBJ_rsadsi,2L,9L\n\n#define LN_hmacWithSHA384               \"hmacWithSHA384\"\n#define NID_hmacWithSHA384              800\n#define OBJ_hmacWithSHA384              OBJ_rsadsi,2L,10L\n\n#define LN_hmacWithSHA512               \"hmacWithSHA512\"\n#define NID_hmacWithSHA512              801\n#define OBJ_hmacWithSHA512              OBJ_rsadsi,2L,11L\n\n#define SN_rc2_cbc              \"RC2-CBC\"\n#define LN_rc2_cbc              \"rc2-cbc\"\n#define NID_rc2_cbc             37\n#define OBJ_rc2_cbc             OBJ_rsadsi,3L,2L\n\n#define SN_rc2_ecb              \"RC2-ECB\"\n#define LN_rc2_ecb              \"rc2-ecb\"\n#define NID_rc2_ecb             38\n\n#define SN_rc2_cfb64            \"RC2-CFB\"\n#define LN_rc2_cfb64            \"rc2-cfb\"\n#define NID_rc2_cfb64           39\n\n#define SN_rc2_ofb64            \"RC2-OFB\"\n#define LN_rc2_ofb64            \"rc2-ofb\"\n#define NID_rc2_ofb64           40\n\n#define SN_rc2_40_cbc           \"RC2-40-CBC\"\n#define LN_rc2_40_cbc           \"rc2-40-cbc\"\n#define NID_rc2_40_cbc          98\n\n#define SN_rc2_64_cbc           \"RC2-64-CBC\"\n#define LN_rc2_64_cbc           \"rc2-64-cbc\"\n#define NID_rc2_64_cbc          166\n\n#define SN_rc4          \"RC4\"\n#define LN_rc4          \"rc4\"\n#define NID_rc4         5\n#define OBJ_rc4         OBJ_rsadsi,3L,4L\n\n#define SN_rc4_40               \"RC4-40\"\n#define LN_rc4_40               \"rc4-40\"\n#define NID_rc4_40              97\n\n#define SN_des_ede3_cbc         \"DES-EDE3-CBC\"\n#define LN_des_ede3_cbc         \"des-ede3-cbc\"\n#define NID_des_ede3_cbc                44\n#define OBJ_des_ede3_cbc                OBJ_rsadsi,3L,7L\n\n#define SN_rc5_cbc              \"RC5-CBC\"\n#define LN_rc5_cbc              \"rc5-cbc\"\n#define NID_rc5_cbc             120\n#define OBJ_rc5_cbc             OBJ_rsadsi,3L,8L\n\n#define SN_rc5_ecb              \"RC5-ECB\"\n#define LN_rc5_ecb              \"rc5-ecb\"\n#define NID_rc5_ecb             121\n\n#define SN_rc5_cfb64            \"RC5-CFB\"\n#define LN_rc5_cfb64            \"rc5-cfb\"\n#define NID_rc5_cfb64           122\n\n#define SN_rc5_ofb64            \"RC5-OFB\"\n#define LN_rc5_ofb64            \"rc5-ofb\"\n#define NID_rc5_ofb64           123\n\n#define SN_ms_ext_req           \"msExtReq\"\n#define LN_ms_ext_req           \"Microsoft Extension Request\"\n#define NID_ms_ext_req          171\n#define OBJ_ms_ext_req          1L,3L,6L,1L,4L,1L,311L,2L,1L,14L\n\n#define SN_ms_code_ind          \"msCodeInd\"\n#define LN_ms_code_ind          \"Microsoft Individual Code Signing\"\n#define NID_ms_code_ind         134\n#define OBJ_ms_code_ind         1L,3L,6L,1L,4L,1L,311L,2L,1L,21L\n\n#define SN_ms_code_com          \"msCodeCom\"\n#define LN_ms_code_com          \"Microsoft Commercial Code Signing\"\n#define NID_ms_code_com         135\n#define OBJ_ms_code_com         1L,3L,6L,1L,4L,1L,311L,2L,1L,22L\n\n#define SN_ms_ctl_sign          \"msCTLSign\"\n#define LN_ms_ctl_sign          \"Microsoft Trust List Signing\"\n#define NID_ms_ctl_sign         136\n#define OBJ_ms_ctl_sign         1L,3L,6L,1L,4L,1L,311L,10L,3L,1L\n\n#define SN_ms_sgc               \"msSGC\"\n#define LN_ms_sgc               \"Microsoft Server Gated Crypto\"\n#define NID_ms_sgc              137\n#define OBJ_ms_sgc              1L,3L,6L,1L,4L,1L,311L,10L,3L,3L\n\n#define SN_ms_efs               \"msEFS\"\n#define LN_ms_efs               \"Microsoft Encrypted File System\"\n#define NID_ms_efs              138\n#define OBJ_ms_efs              1L,3L,6L,1L,4L,1L,311L,10L,3L,4L\n\n#define SN_ms_smartcard_login           \"msSmartcardLogin\"\n#define LN_ms_smartcard_login           \"Microsoft Smartcardlogin\"\n#define NID_ms_smartcard_login          648\n#define OBJ_ms_smartcard_login          1L,3L,6L,1L,4L,1L,311L,20L,2L,2L\n\n#define SN_ms_upn               \"msUPN\"\n#define LN_ms_upn               \"Microsoft Universal Principal Name\"\n#define NID_ms_upn              649\n#define OBJ_ms_upn              1L,3L,6L,1L,4L,1L,311L,20L,2L,3L\n\n#define SN_idea_cbc             \"IDEA-CBC\"\n#define LN_idea_cbc             \"idea-cbc\"\n#define NID_idea_cbc            34\n#define OBJ_idea_cbc            1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L\n\n#define SN_idea_ecb             \"IDEA-ECB\"\n#define LN_idea_ecb             \"idea-ecb\"\n#define NID_idea_ecb            36\n\n#define SN_idea_cfb64           \"IDEA-CFB\"\n#define LN_idea_cfb64           \"idea-cfb\"\n#define NID_idea_cfb64          35\n\n#define SN_idea_ofb64           \"IDEA-OFB\"\n#define LN_idea_ofb64           \"idea-ofb\"\n#define NID_idea_ofb64          46\n\n#define SN_bf_cbc               \"BF-CBC\"\n#define LN_bf_cbc               \"bf-cbc\"\n#define NID_bf_cbc              91\n#define OBJ_bf_cbc              1L,3L,6L,1L,4L,1L,3029L,1L,2L\n\n#define SN_bf_ecb               \"BF-ECB\"\n#define LN_bf_ecb               \"bf-ecb\"\n#define NID_bf_ecb              92\n\n#define SN_bf_cfb64             \"BF-CFB\"\n#define LN_bf_cfb64             \"bf-cfb\"\n#define NID_bf_cfb64            93\n\n#define SN_bf_ofb64             \"BF-OFB\"\n#define LN_bf_ofb64             \"bf-ofb\"\n#define NID_bf_ofb64            94\n\n#define SN_id_pkix              \"PKIX\"\n#define NID_id_pkix             127\n#define OBJ_id_pkix             1L,3L,6L,1L,5L,5L,7L\n\n#define SN_id_pkix_mod          \"id-pkix-mod\"\n#define NID_id_pkix_mod         258\n#define OBJ_id_pkix_mod         OBJ_id_pkix,0L\n\n#define SN_id_pe                \"id-pe\"\n#define NID_id_pe               175\n#define OBJ_id_pe               OBJ_id_pkix,1L\n\n#define SN_id_qt                \"id-qt\"\n#define NID_id_qt               259\n#define OBJ_id_qt               OBJ_id_pkix,2L\n\n#define SN_id_kp                \"id-kp\"\n#define NID_id_kp               128\n#define OBJ_id_kp               OBJ_id_pkix,3L\n\n#define SN_id_it                \"id-it\"\n#define NID_id_it               260\n#define OBJ_id_it               OBJ_id_pkix,4L\n\n#define SN_id_pkip              \"id-pkip\"\n#define NID_id_pkip             261\n#define OBJ_id_pkip             OBJ_id_pkix,5L\n\n#define SN_id_alg               \"id-alg\"\n#define NID_id_alg              262\n#define OBJ_id_alg              OBJ_id_pkix,6L\n\n#define SN_id_cmc               \"id-cmc\"\n#define NID_id_cmc              263\n#define OBJ_id_cmc              OBJ_id_pkix,7L\n\n#define SN_id_on                \"id-on\"\n#define NID_id_on               264\n#define OBJ_id_on               OBJ_id_pkix,8L\n\n#define SN_id_pda               \"id-pda\"\n#define NID_id_pda              265\n#define OBJ_id_pda              OBJ_id_pkix,9L\n\n#define SN_id_aca               \"id-aca\"\n#define NID_id_aca              266\n#define OBJ_id_aca              OBJ_id_pkix,10L\n\n#define SN_id_qcs               \"id-qcs\"\n#define NID_id_qcs              267\n#define OBJ_id_qcs              OBJ_id_pkix,11L\n\n#define SN_id_cct               \"id-cct\"\n#define NID_id_cct              268\n#define OBJ_id_cct              OBJ_id_pkix,12L\n\n#define SN_id_ppl               \"id-ppl\"\n#define NID_id_ppl              662\n#define OBJ_id_ppl              OBJ_id_pkix,21L\n\n#define SN_id_ad                \"id-ad\"\n#define NID_id_ad               176\n#define OBJ_id_ad               OBJ_id_pkix,48L\n\n#define SN_id_pkix1_explicit_88         \"id-pkix1-explicit-88\"\n#define NID_id_pkix1_explicit_88                269\n#define OBJ_id_pkix1_explicit_88                OBJ_id_pkix_mod,1L\n\n#define SN_id_pkix1_implicit_88         \"id-pkix1-implicit-88\"\n#define NID_id_pkix1_implicit_88                270\n#define OBJ_id_pkix1_implicit_88                OBJ_id_pkix_mod,2L\n\n#define SN_id_pkix1_explicit_93         \"id-pkix1-explicit-93\"\n#define NID_id_pkix1_explicit_93                271\n#define OBJ_id_pkix1_explicit_93                OBJ_id_pkix_mod,3L\n\n#define SN_id_pkix1_implicit_93         \"id-pkix1-implicit-93\"\n#define NID_id_pkix1_implicit_93                272\n#define OBJ_id_pkix1_implicit_93                OBJ_id_pkix_mod,4L\n\n#define SN_id_mod_crmf          \"id-mod-crmf\"\n#define NID_id_mod_crmf         273\n#define OBJ_id_mod_crmf         OBJ_id_pkix_mod,5L\n\n#define SN_id_mod_cmc           \"id-mod-cmc\"\n#define NID_id_mod_cmc          274\n#define OBJ_id_mod_cmc          OBJ_id_pkix_mod,6L\n\n#define SN_id_mod_kea_profile_88                \"id-mod-kea-profile-88\"\n#define NID_id_mod_kea_profile_88               275\n#define OBJ_id_mod_kea_profile_88               OBJ_id_pkix_mod,7L\n\n#define SN_id_mod_kea_profile_93                \"id-mod-kea-profile-93\"\n#define NID_id_mod_kea_profile_93               276\n#define OBJ_id_mod_kea_profile_93               OBJ_id_pkix_mod,8L\n\n#define SN_id_mod_cmp           \"id-mod-cmp\"\n#define NID_id_mod_cmp          277\n#define OBJ_id_mod_cmp          OBJ_id_pkix_mod,9L\n\n#define SN_id_mod_qualified_cert_88             \"id-mod-qualified-cert-88\"\n#define NID_id_mod_qualified_cert_88            278\n#define OBJ_id_mod_qualified_cert_88            OBJ_id_pkix_mod,10L\n\n#define SN_id_mod_qualified_cert_93             \"id-mod-qualified-cert-93\"\n#define NID_id_mod_qualified_cert_93            279\n#define OBJ_id_mod_qualified_cert_93            OBJ_id_pkix_mod,11L\n\n#define SN_id_mod_attribute_cert                \"id-mod-attribute-cert\"\n#define NID_id_mod_attribute_cert               280\n#define OBJ_id_mod_attribute_cert               OBJ_id_pkix_mod,12L\n\n#define SN_id_mod_timestamp_protocol            \"id-mod-timestamp-protocol\"\n#define NID_id_mod_timestamp_protocol           281\n#define OBJ_id_mod_timestamp_protocol           OBJ_id_pkix_mod,13L\n\n#define SN_id_mod_ocsp          \"id-mod-ocsp\"\n#define NID_id_mod_ocsp         282\n#define OBJ_id_mod_ocsp         OBJ_id_pkix_mod,14L\n\n#define SN_id_mod_dvcs          \"id-mod-dvcs\"\n#define NID_id_mod_dvcs         283\n#define OBJ_id_mod_dvcs         OBJ_id_pkix_mod,15L\n\n#define SN_id_mod_cmp2000               \"id-mod-cmp2000\"\n#define NID_id_mod_cmp2000              284\n#define OBJ_id_mod_cmp2000              OBJ_id_pkix_mod,16L\n\n#define SN_info_access          \"authorityInfoAccess\"\n#define LN_info_access          \"Authority Information Access\"\n#define NID_info_access         177\n#define OBJ_info_access         OBJ_id_pe,1L\n\n#define SN_biometricInfo                \"biometricInfo\"\n#define LN_biometricInfo                \"Biometric Info\"\n#define NID_biometricInfo               285\n#define OBJ_biometricInfo               OBJ_id_pe,2L\n\n#define SN_qcStatements         \"qcStatements\"\n#define NID_qcStatements                286\n#define OBJ_qcStatements                OBJ_id_pe,3L\n\n#define SN_ac_auditEntity               \"ac-auditEntity\"\n#define NID_ac_auditEntity              287\n#define OBJ_ac_auditEntity              OBJ_id_pe,4L\n\n#define SN_ac_targeting         \"ac-targeting\"\n#define NID_ac_targeting                288\n#define OBJ_ac_targeting                OBJ_id_pe,5L\n\n#define SN_aaControls           \"aaControls\"\n#define NID_aaControls          289\n#define OBJ_aaControls          OBJ_id_pe,6L\n\n#define SN_sbgp_ipAddrBlock             \"sbgp-ipAddrBlock\"\n#define NID_sbgp_ipAddrBlock            290\n#define OBJ_sbgp_ipAddrBlock            OBJ_id_pe,7L\n\n#define SN_sbgp_autonomousSysNum                \"sbgp-autonomousSysNum\"\n#define NID_sbgp_autonomousSysNum               291\n#define OBJ_sbgp_autonomousSysNum               OBJ_id_pe,8L\n\n#define SN_sbgp_routerIdentifier                \"sbgp-routerIdentifier\"\n#define NID_sbgp_routerIdentifier               292\n#define OBJ_sbgp_routerIdentifier               OBJ_id_pe,9L\n\n#define SN_ac_proxying          \"ac-proxying\"\n#define NID_ac_proxying         397\n#define OBJ_ac_proxying         OBJ_id_pe,10L\n\n#define SN_sinfo_access         \"subjectInfoAccess\"\n#define LN_sinfo_access         \"Subject Information Access\"\n#define NID_sinfo_access                398\n#define OBJ_sinfo_access                OBJ_id_pe,11L\n\n#define SN_proxyCertInfo                \"proxyCertInfo\"\n#define LN_proxyCertInfo                \"Proxy Certificate Information\"\n#define NID_proxyCertInfo               663\n#define OBJ_proxyCertInfo               OBJ_id_pe,14L\n\n#define SN_id_qt_cps            \"id-qt-cps\"\n#define LN_id_qt_cps            \"Policy Qualifier CPS\"\n#define NID_id_qt_cps           164\n#define OBJ_id_qt_cps           OBJ_id_qt,1L\n\n#define SN_id_qt_unotice                \"id-qt-unotice\"\n#define LN_id_qt_unotice                \"Policy Qualifier User Notice\"\n#define NID_id_qt_unotice               165\n#define OBJ_id_qt_unotice               OBJ_id_qt,2L\n\n#define SN_textNotice           \"textNotice\"\n#define NID_textNotice          293\n#define OBJ_textNotice          OBJ_id_qt,3L\n\n#define SN_server_auth          \"serverAuth\"\n#define LN_server_auth          \"TLS Web Server Authentication\"\n#define NID_server_auth         129\n#define OBJ_server_auth         OBJ_id_kp,1L\n\n#define SN_client_auth          \"clientAuth\"\n#define LN_client_auth          \"TLS Web Client Authentication\"\n#define NID_client_auth         130\n#define OBJ_client_auth         OBJ_id_kp,2L\n\n#define SN_code_sign            \"codeSigning\"\n#define LN_code_sign            \"Code Signing\"\n#define NID_code_sign           131\n#define OBJ_code_sign           OBJ_id_kp,3L\n\n#define SN_email_protect                \"emailProtection\"\n#define LN_email_protect                \"E-mail Protection\"\n#define NID_email_protect               132\n#define OBJ_email_protect               OBJ_id_kp,4L\n\n#define SN_ipsecEndSystem               \"ipsecEndSystem\"\n#define LN_ipsecEndSystem               \"IPSec End System\"\n#define NID_ipsecEndSystem              294\n#define OBJ_ipsecEndSystem              OBJ_id_kp,5L\n\n#define SN_ipsecTunnel          \"ipsecTunnel\"\n#define LN_ipsecTunnel          \"IPSec Tunnel\"\n#define NID_ipsecTunnel         295\n#define OBJ_ipsecTunnel         OBJ_id_kp,6L\n\n#define SN_ipsecUser            \"ipsecUser\"\n#define LN_ipsecUser            \"IPSec User\"\n#define NID_ipsecUser           296\n#define OBJ_ipsecUser           OBJ_id_kp,7L\n\n#define SN_time_stamp           \"timeStamping\"\n#define LN_time_stamp           \"Time Stamping\"\n#define NID_time_stamp          133\n#define OBJ_time_stamp          OBJ_id_kp,8L\n\n#define SN_OCSP_sign            \"OCSPSigning\"\n#define LN_OCSP_sign            \"OCSP Signing\"\n#define NID_OCSP_sign           180\n#define OBJ_OCSP_sign           OBJ_id_kp,9L\n\n#define SN_dvcs         \"DVCS\"\n#define LN_dvcs         \"dvcs\"\n#define NID_dvcs                297\n#define OBJ_dvcs                OBJ_id_kp,10L\n\n#define SN_id_it_caProtEncCert          \"id-it-caProtEncCert\"\n#define NID_id_it_caProtEncCert         298\n#define OBJ_id_it_caProtEncCert         OBJ_id_it,1L\n\n#define SN_id_it_signKeyPairTypes               \"id-it-signKeyPairTypes\"\n#define NID_id_it_signKeyPairTypes              299\n#define OBJ_id_it_signKeyPairTypes              OBJ_id_it,2L\n\n#define SN_id_it_encKeyPairTypes                \"id-it-encKeyPairTypes\"\n#define NID_id_it_encKeyPairTypes               300\n#define OBJ_id_it_encKeyPairTypes               OBJ_id_it,3L\n\n#define SN_id_it_preferredSymmAlg               \"id-it-preferredSymmAlg\"\n#define NID_id_it_preferredSymmAlg              301\n#define OBJ_id_it_preferredSymmAlg              OBJ_id_it,4L\n\n#define SN_id_it_caKeyUpdateInfo                \"id-it-caKeyUpdateInfo\"\n#define NID_id_it_caKeyUpdateInfo               302\n#define OBJ_id_it_caKeyUpdateInfo               OBJ_id_it,5L\n\n#define SN_id_it_currentCRL             \"id-it-currentCRL\"\n#define NID_id_it_currentCRL            303\n#define OBJ_id_it_currentCRL            OBJ_id_it,6L\n\n#define SN_id_it_unsupportedOIDs                \"id-it-unsupportedOIDs\"\n#define NID_id_it_unsupportedOIDs               304\n#define OBJ_id_it_unsupportedOIDs               OBJ_id_it,7L\n\n#define SN_id_it_subscriptionRequest            \"id-it-subscriptionRequest\"\n#define NID_id_it_subscriptionRequest           305\n#define OBJ_id_it_subscriptionRequest           OBJ_id_it,8L\n\n#define SN_id_it_subscriptionResponse           \"id-it-subscriptionResponse\"\n#define NID_id_it_subscriptionResponse          306\n#define OBJ_id_it_subscriptionResponse          OBJ_id_it,9L\n\n#define SN_id_it_keyPairParamReq                \"id-it-keyPairParamReq\"\n#define NID_id_it_keyPairParamReq               307\n#define OBJ_id_it_keyPairParamReq               OBJ_id_it,10L\n\n#define SN_id_it_keyPairParamRep                \"id-it-keyPairParamRep\"\n#define NID_id_it_keyPairParamRep               308\n#define OBJ_id_it_keyPairParamRep               OBJ_id_it,11L\n\n#define SN_id_it_revPassphrase          \"id-it-revPassphrase\"\n#define NID_id_it_revPassphrase         309\n#define OBJ_id_it_revPassphrase         OBJ_id_it,12L\n\n#define SN_id_it_implicitConfirm                \"id-it-implicitConfirm\"\n#define NID_id_it_implicitConfirm               310\n#define OBJ_id_it_implicitConfirm               OBJ_id_it,13L\n\n#define SN_id_it_confirmWaitTime                \"id-it-confirmWaitTime\"\n#define NID_id_it_confirmWaitTime               311\n#define OBJ_id_it_confirmWaitTime               OBJ_id_it,14L\n\n#define SN_id_it_origPKIMessage         \"id-it-origPKIMessage\"\n#define NID_id_it_origPKIMessage                312\n#define OBJ_id_it_origPKIMessage                OBJ_id_it,15L\n\n#define SN_id_it_suppLangTags           \"id-it-suppLangTags\"\n#define NID_id_it_suppLangTags          784\n#define OBJ_id_it_suppLangTags          OBJ_id_it,16L\n\n#define SN_id_regCtrl           \"id-regCtrl\"\n#define NID_id_regCtrl          313\n#define OBJ_id_regCtrl          OBJ_id_pkip,1L\n\n#define SN_id_regInfo           \"id-regInfo\"\n#define NID_id_regInfo          314\n#define OBJ_id_regInfo          OBJ_id_pkip,2L\n\n#define SN_id_regCtrl_regToken          \"id-regCtrl-regToken\"\n#define NID_id_regCtrl_regToken         315\n#define OBJ_id_regCtrl_regToken         OBJ_id_regCtrl,1L\n\n#define SN_id_regCtrl_authenticator             \"id-regCtrl-authenticator\"\n#define NID_id_regCtrl_authenticator            316\n#define OBJ_id_regCtrl_authenticator            OBJ_id_regCtrl,2L\n\n#define SN_id_regCtrl_pkiPublicationInfo                \"id-regCtrl-pkiPublicationInfo\"\n#define NID_id_regCtrl_pkiPublicationInfo               317\n#define OBJ_id_regCtrl_pkiPublicationInfo               OBJ_id_regCtrl,3L\n\n#define SN_id_regCtrl_pkiArchiveOptions         \"id-regCtrl-pkiArchiveOptions\"\n#define NID_id_regCtrl_pkiArchiveOptions                318\n#define OBJ_id_regCtrl_pkiArchiveOptions                OBJ_id_regCtrl,4L\n\n#define SN_id_regCtrl_oldCertID         \"id-regCtrl-oldCertID\"\n#define NID_id_regCtrl_oldCertID                319\n#define OBJ_id_regCtrl_oldCertID                OBJ_id_regCtrl,5L\n\n#define SN_id_regCtrl_protocolEncrKey           \"id-regCtrl-protocolEncrKey\"\n#define NID_id_regCtrl_protocolEncrKey          320\n#define OBJ_id_regCtrl_protocolEncrKey          OBJ_id_regCtrl,6L\n\n#define SN_id_regInfo_utf8Pairs         \"id-regInfo-utf8Pairs\"\n#define NID_id_regInfo_utf8Pairs                321\n#define OBJ_id_regInfo_utf8Pairs                OBJ_id_regInfo,1L\n\n#define SN_id_regInfo_certReq           \"id-regInfo-certReq\"\n#define NID_id_regInfo_certReq          322\n#define OBJ_id_regInfo_certReq          OBJ_id_regInfo,2L\n\n#define SN_id_alg_des40         \"id-alg-des40\"\n#define NID_id_alg_des40                323\n#define OBJ_id_alg_des40                OBJ_id_alg,1L\n\n#define SN_id_alg_noSignature           \"id-alg-noSignature\"\n#define NID_id_alg_noSignature          324\n#define OBJ_id_alg_noSignature          OBJ_id_alg,2L\n\n#define SN_id_alg_dh_sig_hmac_sha1              \"id-alg-dh-sig-hmac-sha1\"\n#define NID_id_alg_dh_sig_hmac_sha1             325\n#define OBJ_id_alg_dh_sig_hmac_sha1             OBJ_id_alg,3L\n\n#define SN_id_alg_dh_pop                \"id-alg-dh-pop\"\n#define NID_id_alg_dh_pop               326\n#define OBJ_id_alg_dh_pop               OBJ_id_alg,4L\n\n#define SN_id_cmc_statusInfo            \"id-cmc-statusInfo\"\n#define NID_id_cmc_statusInfo           327\n#define OBJ_id_cmc_statusInfo           OBJ_id_cmc,1L\n\n#define SN_id_cmc_identification                \"id-cmc-identification\"\n#define NID_id_cmc_identification               328\n#define OBJ_id_cmc_identification               OBJ_id_cmc,2L\n\n#define SN_id_cmc_identityProof         \"id-cmc-identityProof\"\n#define NID_id_cmc_identityProof                329\n#define OBJ_id_cmc_identityProof                OBJ_id_cmc,3L\n\n#define SN_id_cmc_dataReturn            \"id-cmc-dataReturn\"\n#define NID_id_cmc_dataReturn           330\n#define OBJ_id_cmc_dataReturn           OBJ_id_cmc,4L\n\n#define SN_id_cmc_transactionId         \"id-cmc-transactionId\"\n#define NID_id_cmc_transactionId                331\n#define OBJ_id_cmc_transactionId                OBJ_id_cmc,5L\n\n#define SN_id_cmc_senderNonce           \"id-cmc-senderNonce\"\n#define NID_id_cmc_senderNonce          332\n#define OBJ_id_cmc_senderNonce          OBJ_id_cmc,6L\n\n#define SN_id_cmc_recipientNonce                \"id-cmc-recipientNonce\"\n#define NID_id_cmc_recipientNonce               333\n#define OBJ_id_cmc_recipientNonce               OBJ_id_cmc,7L\n\n#define SN_id_cmc_addExtensions         \"id-cmc-addExtensions\"\n#define NID_id_cmc_addExtensions                334\n#define OBJ_id_cmc_addExtensions                OBJ_id_cmc,8L\n\n#define SN_id_cmc_encryptedPOP          \"id-cmc-encryptedPOP\"\n#define NID_id_cmc_encryptedPOP         335\n#define OBJ_id_cmc_encryptedPOP         OBJ_id_cmc,9L\n\n#define SN_id_cmc_decryptedPOP          \"id-cmc-decryptedPOP\"\n#define NID_id_cmc_decryptedPOP         336\n#define OBJ_id_cmc_decryptedPOP         OBJ_id_cmc,10L\n\n#define SN_id_cmc_lraPOPWitness         \"id-cmc-lraPOPWitness\"\n#define NID_id_cmc_lraPOPWitness                337\n#define OBJ_id_cmc_lraPOPWitness                OBJ_id_cmc,11L\n\n#define SN_id_cmc_getCert               \"id-cmc-getCert\"\n#define NID_id_cmc_getCert              338\n#define OBJ_id_cmc_getCert              OBJ_id_cmc,15L\n\n#define SN_id_cmc_getCRL                \"id-cmc-getCRL\"\n#define NID_id_cmc_getCRL               339\n#define OBJ_id_cmc_getCRL               OBJ_id_cmc,16L\n\n#define SN_id_cmc_revokeRequest         \"id-cmc-revokeRequest\"\n#define NID_id_cmc_revokeRequest                340\n#define OBJ_id_cmc_revokeRequest                OBJ_id_cmc,17L\n\n#define SN_id_cmc_regInfo               \"id-cmc-regInfo\"\n#define NID_id_cmc_regInfo              341\n#define OBJ_id_cmc_regInfo              OBJ_id_cmc,18L\n\n#define SN_id_cmc_responseInfo          \"id-cmc-responseInfo\"\n#define NID_id_cmc_responseInfo         342\n#define OBJ_id_cmc_responseInfo         OBJ_id_cmc,19L\n\n#define SN_id_cmc_queryPending          \"id-cmc-queryPending\"\n#define NID_id_cmc_queryPending         343\n#define OBJ_id_cmc_queryPending         OBJ_id_cmc,21L\n\n#define SN_id_cmc_popLinkRandom         \"id-cmc-popLinkRandom\"\n#define NID_id_cmc_popLinkRandom                344\n#define OBJ_id_cmc_popLinkRandom                OBJ_id_cmc,22L\n\n#define SN_id_cmc_popLinkWitness                \"id-cmc-popLinkWitness\"\n#define NID_id_cmc_popLinkWitness               345\n#define OBJ_id_cmc_popLinkWitness               OBJ_id_cmc,23L\n\n#define SN_id_cmc_confirmCertAcceptance         \"id-cmc-confirmCertAcceptance\"\n#define NID_id_cmc_confirmCertAcceptance                346\n#define OBJ_id_cmc_confirmCertAcceptance                OBJ_id_cmc,24L\n\n#define SN_id_on_personalData           \"id-on-personalData\"\n#define NID_id_on_personalData          347\n#define OBJ_id_on_personalData          OBJ_id_on,1L\n\n#define SN_id_on_permanentIdentifier            \"id-on-permanentIdentifier\"\n#define LN_id_on_permanentIdentifier            \"Permanent Identifier\"\n#define NID_id_on_permanentIdentifier           858\n#define OBJ_id_on_permanentIdentifier           OBJ_id_on,3L\n\n#define SN_id_pda_dateOfBirth           \"id-pda-dateOfBirth\"\n#define NID_id_pda_dateOfBirth          348\n#define OBJ_id_pda_dateOfBirth          OBJ_id_pda,1L\n\n#define SN_id_pda_placeOfBirth          \"id-pda-placeOfBirth\"\n#define NID_id_pda_placeOfBirth         349\n#define OBJ_id_pda_placeOfBirth         OBJ_id_pda,2L\n\n#define SN_id_pda_gender                \"id-pda-gender\"\n#define NID_id_pda_gender               351\n#define OBJ_id_pda_gender               OBJ_id_pda,3L\n\n#define SN_id_pda_countryOfCitizenship          \"id-pda-countryOfCitizenship\"\n#define NID_id_pda_countryOfCitizenship         352\n#define OBJ_id_pda_countryOfCitizenship         OBJ_id_pda,4L\n\n#define SN_id_pda_countryOfResidence            \"id-pda-countryOfResidence\"\n#define NID_id_pda_countryOfResidence           353\n#define OBJ_id_pda_countryOfResidence           OBJ_id_pda,5L\n\n#define SN_id_aca_authenticationInfo            \"id-aca-authenticationInfo\"\n#define NID_id_aca_authenticationInfo           354\n#define OBJ_id_aca_authenticationInfo           OBJ_id_aca,1L\n\n#define SN_id_aca_accessIdentity                \"id-aca-accessIdentity\"\n#define NID_id_aca_accessIdentity               355\n#define OBJ_id_aca_accessIdentity               OBJ_id_aca,2L\n\n#define SN_id_aca_chargingIdentity              \"id-aca-chargingIdentity\"\n#define NID_id_aca_chargingIdentity             356\n#define OBJ_id_aca_chargingIdentity             OBJ_id_aca,3L\n\n#define SN_id_aca_group         \"id-aca-group\"\n#define NID_id_aca_group                357\n#define OBJ_id_aca_group                OBJ_id_aca,4L\n\n#define SN_id_aca_role          \"id-aca-role\"\n#define NID_id_aca_role         358\n#define OBJ_id_aca_role         OBJ_id_aca,5L\n\n#define SN_id_aca_encAttrs              \"id-aca-encAttrs\"\n#define NID_id_aca_encAttrs             399\n#define OBJ_id_aca_encAttrs             OBJ_id_aca,6L\n\n#define SN_id_qcs_pkixQCSyntax_v1               \"id-qcs-pkixQCSyntax-v1\"\n#define NID_id_qcs_pkixQCSyntax_v1              359\n#define OBJ_id_qcs_pkixQCSyntax_v1              OBJ_id_qcs,1L\n\n#define SN_id_cct_crs           \"id-cct-crs\"\n#define NID_id_cct_crs          360\n#define OBJ_id_cct_crs          OBJ_id_cct,1L\n\n#define SN_id_cct_PKIData               \"id-cct-PKIData\"\n#define NID_id_cct_PKIData              361\n#define OBJ_id_cct_PKIData              OBJ_id_cct,2L\n\n#define SN_id_cct_PKIResponse           \"id-cct-PKIResponse\"\n#define NID_id_cct_PKIResponse          362\n#define OBJ_id_cct_PKIResponse          OBJ_id_cct,3L\n\n#define SN_id_ppl_anyLanguage           \"id-ppl-anyLanguage\"\n#define LN_id_ppl_anyLanguage           \"Any language\"\n#define NID_id_ppl_anyLanguage          664\n#define OBJ_id_ppl_anyLanguage          OBJ_id_ppl,0L\n\n#define SN_id_ppl_inheritAll            \"id-ppl-inheritAll\"\n#define LN_id_ppl_inheritAll            \"Inherit all\"\n#define NID_id_ppl_inheritAll           665\n#define OBJ_id_ppl_inheritAll           OBJ_id_ppl,1L\n\n#define SN_Independent          \"id-ppl-independent\"\n#define LN_Independent          \"Independent\"\n#define NID_Independent         667\n#define OBJ_Independent         OBJ_id_ppl,2L\n\n#define SN_ad_OCSP              \"OCSP\"\n#define LN_ad_OCSP              \"OCSP\"\n#define NID_ad_OCSP             178\n#define OBJ_ad_OCSP             OBJ_id_ad,1L\n\n#define SN_ad_ca_issuers                \"caIssuers\"\n#define LN_ad_ca_issuers                \"CA Issuers\"\n#define NID_ad_ca_issuers               179\n#define OBJ_ad_ca_issuers               OBJ_id_ad,2L\n\n#define SN_ad_timeStamping              \"ad_timestamping\"\n#define LN_ad_timeStamping              \"AD Time Stamping\"\n#define NID_ad_timeStamping             363\n#define OBJ_ad_timeStamping             OBJ_id_ad,3L\n\n#define SN_ad_dvcs              \"AD_DVCS\"\n#define LN_ad_dvcs              \"ad dvcs\"\n#define NID_ad_dvcs             364\n#define OBJ_ad_dvcs             OBJ_id_ad,4L\n\n#define SN_caRepository         \"caRepository\"\n#define LN_caRepository         \"CA Repository\"\n#define NID_caRepository                785\n#define OBJ_caRepository                OBJ_id_ad,5L\n\n#define OBJ_id_pkix_OCSP                OBJ_ad_OCSP\n\n#define SN_id_pkix_OCSP_basic           \"basicOCSPResponse\"\n#define LN_id_pkix_OCSP_basic           \"Basic OCSP Response\"\n#define NID_id_pkix_OCSP_basic          365\n#define OBJ_id_pkix_OCSP_basic          OBJ_id_pkix_OCSP,1L\n\n#define SN_id_pkix_OCSP_Nonce           \"Nonce\"\n#define LN_id_pkix_OCSP_Nonce           \"OCSP Nonce\"\n#define NID_id_pkix_OCSP_Nonce          366\n#define OBJ_id_pkix_OCSP_Nonce          OBJ_id_pkix_OCSP,2L\n\n#define SN_id_pkix_OCSP_CrlID           \"CrlID\"\n#define LN_id_pkix_OCSP_CrlID           \"OCSP CRL ID\"\n#define NID_id_pkix_OCSP_CrlID          367\n#define OBJ_id_pkix_OCSP_CrlID          OBJ_id_pkix_OCSP,3L\n\n#define SN_id_pkix_OCSP_acceptableResponses             \"acceptableResponses\"\n#define LN_id_pkix_OCSP_acceptableResponses             \"Acceptable OCSP Responses\"\n#define NID_id_pkix_OCSP_acceptableResponses            368\n#define OBJ_id_pkix_OCSP_acceptableResponses            OBJ_id_pkix_OCSP,4L\n\n#define SN_id_pkix_OCSP_noCheck         \"noCheck\"\n#define LN_id_pkix_OCSP_noCheck         \"OCSP No Check\"\n#define NID_id_pkix_OCSP_noCheck                369\n#define OBJ_id_pkix_OCSP_noCheck                OBJ_id_pkix_OCSP,5L\n\n#define SN_id_pkix_OCSP_archiveCutoff           \"archiveCutoff\"\n#define LN_id_pkix_OCSP_archiveCutoff           \"OCSP Archive Cutoff\"\n#define NID_id_pkix_OCSP_archiveCutoff          370\n#define OBJ_id_pkix_OCSP_archiveCutoff          OBJ_id_pkix_OCSP,6L\n\n#define SN_id_pkix_OCSP_serviceLocator          \"serviceLocator\"\n#define LN_id_pkix_OCSP_serviceLocator          \"OCSP Service Locator\"\n#define NID_id_pkix_OCSP_serviceLocator         371\n#define OBJ_id_pkix_OCSP_serviceLocator         OBJ_id_pkix_OCSP,7L\n\n#define SN_id_pkix_OCSP_extendedStatus          \"extendedStatus\"\n#define LN_id_pkix_OCSP_extendedStatus          \"Extended OCSP Status\"\n#define NID_id_pkix_OCSP_extendedStatus         372\n#define OBJ_id_pkix_OCSP_extendedStatus         OBJ_id_pkix_OCSP,8L\n\n#define SN_id_pkix_OCSP_valid           \"valid\"\n#define NID_id_pkix_OCSP_valid          373\n#define OBJ_id_pkix_OCSP_valid          OBJ_id_pkix_OCSP,9L\n\n#define SN_id_pkix_OCSP_path            \"path\"\n#define NID_id_pkix_OCSP_path           374\n#define OBJ_id_pkix_OCSP_path           OBJ_id_pkix_OCSP,10L\n\n#define SN_id_pkix_OCSP_trustRoot               \"trustRoot\"\n#define LN_id_pkix_OCSP_trustRoot               \"Trust Root\"\n#define NID_id_pkix_OCSP_trustRoot              375\n#define OBJ_id_pkix_OCSP_trustRoot              OBJ_id_pkix_OCSP,11L\n\n#define SN_algorithm            \"algorithm\"\n#define LN_algorithm            \"algorithm\"\n#define NID_algorithm           376\n#define OBJ_algorithm           1L,3L,14L,3L,2L\n\n#define SN_md5WithRSA           \"RSA-NP-MD5\"\n#define LN_md5WithRSA           \"md5WithRSA\"\n#define NID_md5WithRSA          104\n#define OBJ_md5WithRSA          OBJ_algorithm,3L\n\n#define SN_des_ecb              \"DES-ECB\"\n#define LN_des_ecb              \"des-ecb\"\n#define NID_des_ecb             29\n#define OBJ_des_ecb             OBJ_algorithm,6L\n\n#define SN_des_cbc              \"DES-CBC\"\n#define LN_des_cbc              \"des-cbc\"\n#define NID_des_cbc             31\n#define OBJ_des_cbc             OBJ_algorithm,7L\n\n#define SN_des_ofb64            \"DES-OFB\"\n#define LN_des_ofb64            \"des-ofb\"\n#define NID_des_ofb64           45\n#define OBJ_des_ofb64           OBJ_algorithm,8L\n\n#define SN_des_cfb64            \"DES-CFB\"\n#define LN_des_cfb64            \"des-cfb\"\n#define NID_des_cfb64           30\n#define OBJ_des_cfb64           OBJ_algorithm,9L\n\n#define SN_rsaSignature         \"rsaSignature\"\n#define NID_rsaSignature                377\n#define OBJ_rsaSignature                OBJ_algorithm,11L\n\n#define SN_dsa_2                \"DSA-old\"\n#define LN_dsa_2                \"dsaEncryption-old\"\n#define NID_dsa_2               67\n#define OBJ_dsa_2               OBJ_algorithm,12L\n\n#define SN_dsaWithSHA           \"DSA-SHA\"\n#define LN_dsaWithSHA           \"dsaWithSHA\"\n#define NID_dsaWithSHA          66\n#define OBJ_dsaWithSHA          OBJ_algorithm,13L\n\n#define SN_shaWithRSAEncryption         \"RSA-SHA\"\n#define LN_shaWithRSAEncryption         \"shaWithRSAEncryption\"\n#define NID_shaWithRSAEncryption                42\n#define OBJ_shaWithRSAEncryption                OBJ_algorithm,15L\n\n#define SN_des_ede_ecb          \"DES-EDE\"\n#define LN_des_ede_ecb          \"des-ede\"\n#define NID_des_ede_ecb         32\n#define OBJ_des_ede_ecb         OBJ_algorithm,17L\n\n#define SN_des_ede3_ecb         \"DES-EDE3\"\n#define LN_des_ede3_ecb         \"des-ede3\"\n#define NID_des_ede3_ecb                33\n\n#define SN_des_ede_cbc          \"DES-EDE-CBC\"\n#define LN_des_ede_cbc          \"des-ede-cbc\"\n#define NID_des_ede_cbc         43\n\n#define SN_des_ede_cfb64                \"DES-EDE-CFB\"\n#define LN_des_ede_cfb64                \"des-ede-cfb\"\n#define NID_des_ede_cfb64               60\n\n#define SN_des_ede3_cfb64               \"DES-EDE3-CFB\"\n#define LN_des_ede3_cfb64               \"des-ede3-cfb\"\n#define NID_des_ede3_cfb64              61\n\n#define SN_des_ede_ofb64                \"DES-EDE-OFB\"\n#define LN_des_ede_ofb64                \"des-ede-ofb\"\n#define NID_des_ede_ofb64               62\n\n#define SN_des_ede3_ofb64               \"DES-EDE3-OFB\"\n#define LN_des_ede3_ofb64               \"des-ede3-ofb\"\n#define NID_des_ede3_ofb64              63\n\n#define SN_desx_cbc             \"DESX-CBC\"\n#define LN_desx_cbc             \"desx-cbc\"\n#define NID_desx_cbc            80\n\n#define SN_sha          \"SHA\"\n#define LN_sha          \"sha\"\n#define NID_sha         41\n#define OBJ_sha         OBJ_algorithm,18L\n\n#define SN_sha1         \"SHA1\"\n#define LN_sha1         \"sha1\"\n#define NID_sha1                64\n#define OBJ_sha1                OBJ_algorithm,26L\n\n#define SN_dsaWithSHA1_2                \"DSA-SHA1-old\"\n#define LN_dsaWithSHA1_2                \"dsaWithSHA1-old\"\n#define NID_dsaWithSHA1_2               70\n#define OBJ_dsaWithSHA1_2               OBJ_algorithm,27L\n\n#define SN_sha1WithRSA          \"RSA-SHA1-2\"\n#define LN_sha1WithRSA          \"sha1WithRSA\"\n#define NID_sha1WithRSA         115\n#define OBJ_sha1WithRSA         OBJ_algorithm,29L\n\n#define SN_ripemd160            \"RIPEMD160\"\n#define LN_ripemd160            \"ripemd160\"\n#define NID_ripemd160           117\n#define OBJ_ripemd160           1L,3L,36L,3L,2L,1L\n\n#define SN_ripemd160WithRSA             \"RSA-RIPEMD160\"\n#define LN_ripemd160WithRSA             \"ripemd160WithRSA\"\n#define NID_ripemd160WithRSA            119\n#define OBJ_ripemd160WithRSA            1L,3L,36L,3L,3L,1L,2L\n\n#define SN_sxnet                \"SXNetID\"\n#define LN_sxnet                \"Strong Extranet ID\"\n#define NID_sxnet               143\n#define OBJ_sxnet               1L,3L,101L,1L,4L,1L\n\n#define SN_X500         \"X500\"\n#define LN_X500         \"directory services (X.500)\"\n#define NID_X500                11\n#define OBJ_X500                2L,5L\n\n#define SN_X509         \"X509\"\n#define NID_X509                12\n#define OBJ_X509                OBJ_X500,4L\n\n#define SN_commonName           \"CN\"\n#define LN_commonName           \"commonName\"\n#define NID_commonName          13\n#define OBJ_commonName          OBJ_X509,3L\n\n#define SN_surname              \"SN\"\n#define LN_surname              \"surname\"\n#define NID_surname             100\n#define OBJ_surname             OBJ_X509,4L\n\n#define LN_serialNumber         \"serialNumber\"\n#define NID_serialNumber                105\n#define OBJ_serialNumber                OBJ_X509,5L\n\n#define SN_countryName          \"C\"\n#define LN_countryName          \"countryName\"\n#define NID_countryName         14\n#define OBJ_countryName         OBJ_X509,6L\n\n#define SN_localityName         \"L\"\n#define LN_localityName         \"localityName\"\n#define NID_localityName                15\n#define OBJ_localityName                OBJ_X509,7L\n\n#define SN_stateOrProvinceName          \"ST\"\n#define LN_stateOrProvinceName          \"stateOrProvinceName\"\n#define NID_stateOrProvinceName         16\n#define OBJ_stateOrProvinceName         OBJ_X509,8L\n\n#define SN_streetAddress                \"street\"\n#define LN_streetAddress                \"streetAddress\"\n#define NID_streetAddress               660\n#define OBJ_streetAddress               OBJ_X509,9L\n\n#define SN_organizationName             \"O\"\n#define LN_organizationName             \"organizationName\"\n#define NID_organizationName            17\n#define OBJ_organizationName            OBJ_X509,10L\n\n#define SN_organizationalUnitName               \"OU\"\n#define LN_organizationalUnitName               \"organizationalUnitName\"\n#define NID_organizationalUnitName              18\n#define OBJ_organizationalUnitName              OBJ_X509,11L\n\n#define SN_title                \"title\"\n#define LN_title                \"title\"\n#define NID_title               106\n#define OBJ_title               OBJ_X509,12L\n\n#define LN_description          \"description\"\n#define NID_description         107\n#define OBJ_description         OBJ_X509,13L\n\n#define LN_searchGuide          \"searchGuide\"\n#define NID_searchGuide         859\n#define OBJ_searchGuide         OBJ_X509,14L\n\n#define LN_businessCategory             \"businessCategory\"\n#define NID_businessCategory            860\n#define OBJ_businessCategory            OBJ_X509,15L\n\n#define LN_postalAddress                \"postalAddress\"\n#define NID_postalAddress               861\n#define OBJ_postalAddress               OBJ_X509,16L\n\n#define LN_postalCode           \"postalCode\"\n#define NID_postalCode          661\n#define OBJ_postalCode          OBJ_X509,17L\n\n#define LN_postOfficeBox                \"postOfficeBox\"\n#define NID_postOfficeBox               862\n#define OBJ_postOfficeBox               OBJ_X509,18L\n\n#define LN_physicalDeliveryOfficeName           \"physicalDeliveryOfficeName\"\n#define NID_physicalDeliveryOfficeName          863\n#define OBJ_physicalDeliveryOfficeName          OBJ_X509,19L\n\n#define LN_telephoneNumber              \"telephoneNumber\"\n#define NID_telephoneNumber             864\n#define OBJ_telephoneNumber             OBJ_X509,20L\n\n#define LN_telexNumber          \"telexNumber\"\n#define NID_telexNumber         865\n#define OBJ_telexNumber         OBJ_X509,21L\n\n#define LN_teletexTerminalIdentifier            \"teletexTerminalIdentifier\"\n#define NID_teletexTerminalIdentifier           866\n#define OBJ_teletexTerminalIdentifier           OBJ_X509,22L\n\n#define LN_facsimileTelephoneNumber             \"facsimileTelephoneNumber\"\n#define NID_facsimileTelephoneNumber            867\n#define OBJ_facsimileTelephoneNumber            OBJ_X509,23L\n\n#define LN_x121Address          \"x121Address\"\n#define NID_x121Address         868\n#define OBJ_x121Address         OBJ_X509,24L\n\n#define LN_internationaliSDNNumber              \"internationaliSDNNumber\"\n#define NID_internationaliSDNNumber             869\n#define OBJ_internationaliSDNNumber             OBJ_X509,25L\n\n#define LN_registeredAddress            \"registeredAddress\"\n#define NID_registeredAddress           870\n#define OBJ_registeredAddress           OBJ_X509,26L\n\n#define LN_destinationIndicator         \"destinationIndicator\"\n#define NID_destinationIndicator                871\n#define OBJ_destinationIndicator                OBJ_X509,27L\n\n#define LN_preferredDeliveryMethod              \"preferredDeliveryMethod\"\n#define NID_preferredDeliveryMethod             872\n#define OBJ_preferredDeliveryMethod             OBJ_X509,28L\n\n#define LN_presentationAddress          \"presentationAddress\"\n#define NID_presentationAddress         873\n#define OBJ_presentationAddress         OBJ_X509,29L\n\n#define LN_supportedApplicationContext          \"supportedApplicationContext\"\n#define NID_supportedApplicationContext         874\n#define OBJ_supportedApplicationContext         OBJ_X509,30L\n\n#define SN_member               \"member\"\n#define NID_member              875\n#define OBJ_member              OBJ_X509,31L\n\n#define SN_owner                \"owner\"\n#define NID_owner               876\n#define OBJ_owner               OBJ_X509,32L\n\n#define LN_roleOccupant         \"roleOccupant\"\n#define NID_roleOccupant                877\n#define OBJ_roleOccupant                OBJ_X509,33L\n\n#define SN_seeAlso              \"seeAlso\"\n#define NID_seeAlso             878\n#define OBJ_seeAlso             OBJ_X509,34L\n\n#define LN_userPassword         \"userPassword\"\n#define NID_userPassword                879\n#define OBJ_userPassword                OBJ_X509,35L\n\n#define LN_userCertificate              \"userCertificate\"\n#define NID_userCertificate             880\n#define OBJ_userCertificate             OBJ_X509,36L\n\n#define LN_cACertificate                \"cACertificate\"\n#define NID_cACertificate               881\n#define OBJ_cACertificate               OBJ_X509,37L\n\n#define LN_authorityRevocationList              \"authorityRevocationList\"\n#define NID_authorityRevocationList             882\n#define OBJ_authorityRevocationList             OBJ_X509,38L\n\n#define LN_certificateRevocationList            \"certificateRevocationList\"\n#define NID_certificateRevocationList           883\n#define OBJ_certificateRevocationList           OBJ_X509,39L\n\n#define LN_crossCertificatePair         \"crossCertificatePair\"\n#define NID_crossCertificatePair                884\n#define OBJ_crossCertificatePair                OBJ_X509,40L\n\n#define SN_name         \"name\"\n#define LN_name         \"name\"\n#define NID_name                173\n#define OBJ_name                OBJ_X509,41L\n\n#define SN_givenName            \"GN\"\n#define LN_givenName            \"givenName\"\n#define NID_givenName           99\n#define OBJ_givenName           OBJ_X509,42L\n\n#define SN_initials             \"initials\"\n#define LN_initials             \"initials\"\n#define NID_initials            101\n#define OBJ_initials            OBJ_X509,43L\n\n#define LN_generationQualifier          \"generationQualifier\"\n#define NID_generationQualifier         509\n#define OBJ_generationQualifier         OBJ_X509,44L\n\n#define LN_x500UniqueIdentifier         \"x500UniqueIdentifier\"\n#define NID_x500UniqueIdentifier                503\n#define OBJ_x500UniqueIdentifier                OBJ_X509,45L\n\n#define SN_dnQualifier          \"dnQualifier\"\n#define LN_dnQualifier          \"dnQualifier\"\n#define NID_dnQualifier         174\n#define OBJ_dnQualifier         OBJ_X509,46L\n\n#define LN_enhancedSearchGuide          \"enhancedSearchGuide\"\n#define NID_enhancedSearchGuide         885\n#define OBJ_enhancedSearchGuide         OBJ_X509,47L\n\n#define LN_protocolInformation          \"protocolInformation\"\n#define NID_protocolInformation         886\n#define OBJ_protocolInformation         OBJ_X509,48L\n\n#define LN_distinguishedName            \"distinguishedName\"\n#define NID_distinguishedName           887\n#define OBJ_distinguishedName           OBJ_X509,49L\n\n#define LN_uniqueMember         \"uniqueMember\"\n#define NID_uniqueMember                888\n#define OBJ_uniqueMember                OBJ_X509,50L\n\n#define LN_houseIdentifier              \"houseIdentifier\"\n#define NID_houseIdentifier             889\n#define OBJ_houseIdentifier             OBJ_X509,51L\n\n#define LN_supportedAlgorithms          \"supportedAlgorithms\"\n#define NID_supportedAlgorithms         890\n#define OBJ_supportedAlgorithms         OBJ_X509,52L\n\n#define LN_deltaRevocationList          \"deltaRevocationList\"\n#define NID_deltaRevocationList         891\n#define OBJ_deltaRevocationList         OBJ_X509,53L\n\n#define SN_dmdName              \"dmdName\"\n#define NID_dmdName             892\n#define OBJ_dmdName             OBJ_X509,54L\n\n#define LN_pseudonym            \"pseudonym\"\n#define NID_pseudonym           510\n#define OBJ_pseudonym           OBJ_X509,65L\n\n#define SN_role         \"role\"\n#define LN_role         \"role\"\n#define NID_role                400\n#define OBJ_role                OBJ_X509,72L\n\n#define SN_X500algorithms               \"X500algorithms\"\n#define LN_X500algorithms               \"directory services - algorithms\"\n#define NID_X500algorithms              378\n#define OBJ_X500algorithms              OBJ_X500,8L\n\n#define SN_rsa          \"RSA\"\n#define LN_rsa          \"rsa\"\n#define NID_rsa         19\n#define OBJ_rsa         OBJ_X500algorithms,1L,1L\n\n#define SN_mdc2WithRSA          \"RSA-MDC2\"\n#define LN_mdc2WithRSA          \"mdc2WithRSA\"\n#define NID_mdc2WithRSA         96\n#define OBJ_mdc2WithRSA         OBJ_X500algorithms,3L,100L\n\n#define SN_mdc2         \"MDC2\"\n#define LN_mdc2         \"mdc2\"\n#define NID_mdc2                95\n#define OBJ_mdc2                OBJ_X500algorithms,3L,101L\n\n#define SN_id_ce                \"id-ce\"\n#define NID_id_ce               81\n#define OBJ_id_ce               OBJ_X500,29L\n\n#define SN_subject_directory_attributes         \"subjectDirectoryAttributes\"\n#define LN_subject_directory_attributes         \"X509v3 Subject Directory Attributes\"\n#define NID_subject_directory_attributes                769\n#define OBJ_subject_directory_attributes                OBJ_id_ce,9L\n\n#define SN_subject_key_identifier               \"subjectKeyIdentifier\"\n#define LN_subject_key_identifier               \"X509v3 Subject Key Identifier\"\n#define NID_subject_key_identifier              82\n#define OBJ_subject_key_identifier              OBJ_id_ce,14L\n\n#define SN_key_usage            \"keyUsage\"\n#define LN_key_usage            \"X509v3 Key Usage\"\n#define NID_key_usage           83\n#define OBJ_key_usage           OBJ_id_ce,15L\n\n#define SN_private_key_usage_period             \"privateKeyUsagePeriod\"\n#define LN_private_key_usage_period             \"X509v3 Private Key Usage Period\"\n#define NID_private_key_usage_period            84\n#define OBJ_private_key_usage_period            OBJ_id_ce,16L\n\n#define SN_subject_alt_name             \"subjectAltName\"\n#define LN_subject_alt_name             \"X509v3 Subject Alternative Name\"\n#define NID_subject_alt_name            85\n#define OBJ_subject_alt_name            OBJ_id_ce,17L\n\n#define SN_issuer_alt_name              \"issuerAltName\"\n#define LN_issuer_alt_name              \"X509v3 Issuer Alternative Name\"\n#define NID_issuer_alt_name             86\n#define OBJ_issuer_alt_name             OBJ_id_ce,18L\n\n#define SN_basic_constraints            \"basicConstraints\"\n#define LN_basic_constraints            \"X509v3 Basic Constraints\"\n#define NID_basic_constraints           87\n#define OBJ_basic_constraints           OBJ_id_ce,19L\n\n#define SN_crl_number           \"crlNumber\"\n#define LN_crl_number           \"X509v3 CRL Number\"\n#define NID_crl_number          88\n#define OBJ_crl_number          OBJ_id_ce,20L\n\n#define SN_crl_reason           \"CRLReason\"\n#define LN_crl_reason           \"X509v3 CRL Reason Code\"\n#define NID_crl_reason          141\n#define OBJ_crl_reason          OBJ_id_ce,21L\n\n#define SN_invalidity_date              \"invalidityDate\"\n#define LN_invalidity_date              \"Invalidity Date\"\n#define NID_invalidity_date             142\n#define OBJ_invalidity_date             OBJ_id_ce,24L\n\n#define SN_delta_crl            \"deltaCRL\"\n#define LN_delta_crl            \"X509v3 Delta CRL Indicator\"\n#define NID_delta_crl           140\n#define OBJ_delta_crl           OBJ_id_ce,27L\n\n#define SN_issuing_distribution_point           \"issuingDistributionPoint\"\n#define LN_issuing_distribution_point           \"X509v3 Issuing Distrubution Point\"\n#define NID_issuing_distribution_point          770\n#define OBJ_issuing_distribution_point          OBJ_id_ce,28L\n\n#define SN_certificate_issuer           \"certificateIssuer\"\n#define LN_certificate_issuer           \"X509v3 Certificate Issuer\"\n#define NID_certificate_issuer          771\n#define OBJ_certificate_issuer          OBJ_id_ce,29L\n\n#define SN_name_constraints             \"nameConstraints\"\n#define LN_name_constraints             \"X509v3 Name Constraints\"\n#define NID_name_constraints            666\n#define OBJ_name_constraints            OBJ_id_ce,30L\n\n#define SN_crl_distribution_points              \"crlDistributionPoints\"\n#define LN_crl_distribution_points              \"X509v3 CRL Distribution Points\"\n#define NID_crl_distribution_points             103\n#define OBJ_crl_distribution_points             OBJ_id_ce,31L\n\n#define SN_certificate_policies         \"certificatePolicies\"\n#define LN_certificate_policies         \"X509v3 Certificate Policies\"\n#define NID_certificate_policies                89\n#define OBJ_certificate_policies                OBJ_id_ce,32L\n\n#define SN_any_policy           \"anyPolicy\"\n#define LN_any_policy           \"X509v3 Any Policy\"\n#define NID_any_policy          746\n#define OBJ_any_policy          OBJ_certificate_policies,0L\n\n#define SN_policy_mappings              \"policyMappings\"\n#define LN_policy_mappings              \"X509v3 Policy Mappings\"\n#define NID_policy_mappings             747\n#define OBJ_policy_mappings             OBJ_id_ce,33L\n\n#define SN_authority_key_identifier             \"authorityKeyIdentifier\"\n#define LN_authority_key_identifier             \"X509v3 Authority Key Identifier\"\n#define NID_authority_key_identifier            90\n#define OBJ_authority_key_identifier            OBJ_id_ce,35L\n\n#define SN_policy_constraints           \"policyConstraints\"\n#define LN_policy_constraints           \"X509v3 Policy Constraints\"\n#define NID_policy_constraints          401\n#define OBJ_policy_constraints          OBJ_id_ce,36L\n\n#define SN_ext_key_usage                \"extendedKeyUsage\"\n#define LN_ext_key_usage                \"X509v3 Extended Key Usage\"\n#define NID_ext_key_usage               126\n#define OBJ_ext_key_usage               OBJ_id_ce,37L\n\n#define SN_freshest_crl         \"freshestCRL\"\n#define LN_freshest_crl         \"X509v3 Freshest CRL\"\n#define NID_freshest_crl                857\n#define OBJ_freshest_crl                OBJ_id_ce,46L\n\n#define SN_inhibit_any_policy           \"inhibitAnyPolicy\"\n#define LN_inhibit_any_policy           \"X509v3 Inhibit Any Policy\"\n#define NID_inhibit_any_policy          748\n#define OBJ_inhibit_any_policy          OBJ_id_ce,54L\n\n#define SN_target_information           \"targetInformation\"\n#define LN_target_information           \"X509v3 AC Targeting\"\n#define NID_target_information          402\n#define OBJ_target_information          OBJ_id_ce,55L\n\n#define SN_no_rev_avail         \"noRevAvail\"\n#define LN_no_rev_avail         \"X509v3 No Revocation Available\"\n#define NID_no_rev_avail                403\n#define OBJ_no_rev_avail                OBJ_id_ce,56L\n\n#define SN_anyExtendedKeyUsage          \"anyExtendedKeyUsage\"\n#define LN_anyExtendedKeyUsage          \"Any Extended Key Usage\"\n#define NID_anyExtendedKeyUsage         910\n#define OBJ_anyExtendedKeyUsage         OBJ_ext_key_usage,0L\n\n#define SN_netscape             \"Netscape\"\n#define LN_netscape             \"Netscape Communications Corp.\"\n#define NID_netscape            57\n#define OBJ_netscape            2L,16L,840L,1L,113730L\n\n#define SN_netscape_cert_extension              \"nsCertExt\"\n#define LN_netscape_cert_extension              \"Netscape Certificate Extension\"\n#define NID_netscape_cert_extension             58\n#define OBJ_netscape_cert_extension             OBJ_netscape,1L\n\n#define SN_netscape_data_type           \"nsDataType\"\n#define LN_netscape_data_type           \"Netscape Data Type\"\n#define NID_netscape_data_type          59\n#define OBJ_netscape_data_type          OBJ_netscape,2L\n\n#define SN_netscape_cert_type           \"nsCertType\"\n#define LN_netscape_cert_type           \"Netscape Cert Type\"\n#define NID_netscape_cert_type          71\n#define OBJ_netscape_cert_type          OBJ_netscape_cert_extension,1L\n\n#define SN_netscape_base_url            \"nsBaseUrl\"\n#define LN_netscape_base_url            \"Netscape Base Url\"\n#define NID_netscape_base_url           72\n#define OBJ_netscape_base_url           OBJ_netscape_cert_extension,2L\n\n#define SN_netscape_revocation_url              \"nsRevocationUrl\"\n#define LN_netscape_revocation_url              \"Netscape Revocation Url\"\n#define NID_netscape_revocation_url             73\n#define OBJ_netscape_revocation_url             OBJ_netscape_cert_extension,3L\n\n#define SN_netscape_ca_revocation_url           \"nsCaRevocationUrl\"\n#define LN_netscape_ca_revocation_url           \"Netscape CA Revocation Url\"\n#define NID_netscape_ca_revocation_url          74\n#define OBJ_netscape_ca_revocation_url          OBJ_netscape_cert_extension,4L\n\n#define SN_netscape_renewal_url         \"nsRenewalUrl\"\n#define LN_netscape_renewal_url         \"Netscape Renewal Url\"\n#define NID_netscape_renewal_url                75\n#define OBJ_netscape_renewal_url                OBJ_netscape_cert_extension,7L\n\n#define SN_netscape_ca_policy_url               \"nsCaPolicyUrl\"\n#define LN_netscape_ca_policy_url               \"Netscape CA Policy Url\"\n#define NID_netscape_ca_policy_url              76\n#define OBJ_netscape_ca_policy_url              OBJ_netscape_cert_extension,8L\n\n#define SN_netscape_ssl_server_name             \"nsSslServerName\"\n#define LN_netscape_ssl_server_name             \"Netscape SSL Server Name\"\n#define NID_netscape_ssl_server_name            77\n#define OBJ_netscape_ssl_server_name            OBJ_netscape_cert_extension,12L\n\n#define SN_netscape_comment             \"nsComment\"\n#define LN_netscape_comment             \"Netscape Comment\"\n#define NID_netscape_comment            78\n#define OBJ_netscape_comment            OBJ_netscape_cert_extension,13L\n\n#define SN_netscape_cert_sequence               \"nsCertSequence\"\n#define LN_netscape_cert_sequence               \"Netscape Certificate Sequence\"\n#define NID_netscape_cert_sequence              79\n#define OBJ_netscape_cert_sequence              OBJ_netscape_data_type,5L\n\n#define SN_ns_sgc               \"nsSGC\"\n#define LN_ns_sgc               \"Netscape Server Gated Crypto\"\n#define NID_ns_sgc              139\n#define OBJ_ns_sgc              OBJ_netscape,4L,1L\n\n#define SN_org          \"ORG\"\n#define LN_org          \"org\"\n#define NID_org         379\n#define OBJ_org         OBJ_iso,3L\n\n#define SN_dod          \"DOD\"\n#define LN_dod          \"dod\"\n#define NID_dod         380\n#define OBJ_dod         OBJ_org,6L\n\n#define SN_iana         \"IANA\"\n#define LN_iana         \"iana\"\n#define NID_iana                381\n#define OBJ_iana                OBJ_dod,1L\n\n#define OBJ_internet            OBJ_iana\n\n#define SN_Directory            \"directory\"\n#define LN_Directory            \"Directory\"\n#define NID_Directory           382\n#define OBJ_Directory           OBJ_internet,1L\n\n#define SN_Management           \"mgmt\"\n#define LN_Management           \"Management\"\n#define NID_Management          383\n#define OBJ_Management          OBJ_internet,2L\n\n#define SN_Experimental         \"experimental\"\n#define LN_Experimental         \"Experimental\"\n#define NID_Experimental                384\n#define OBJ_Experimental                OBJ_internet,3L\n\n#define SN_Private              \"private\"\n#define LN_Private              \"Private\"\n#define NID_Private             385\n#define OBJ_Private             OBJ_internet,4L\n\n#define SN_Security             \"security\"\n#define LN_Security             \"Security\"\n#define NID_Security            386\n#define OBJ_Security            OBJ_internet,5L\n\n#define SN_SNMPv2               \"snmpv2\"\n#define LN_SNMPv2               \"SNMPv2\"\n#define NID_SNMPv2              387\n#define OBJ_SNMPv2              OBJ_internet,6L\n\n#define LN_Mail         \"Mail\"\n#define NID_Mail                388\n#define OBJ_Mail                OBJ_internet,7L\n\n#define SN_Enterprises          \"enterprises\"\n#define LN_Enterprises          \"Enterprises\"\n#define NID_Enterprises         389\n#define OBJ_Enterprises         OBJ_Private,1L\n\n#define SN_dcObject             \"dcobject\"\n#define LN_dcObject             \"dcObject\"\n#define NID_dcObject            390\n#define OBJ_dcObject            OBJ_Enterprises,1466L,344L\n\n#define SN_mime_mhs             \"mime-mhs\"\n#define LN_mime_mhs             \"MIME MHS\"\n#define NID_mime_mhs            504\n#define OBJ_mime_mhs            OBJ_Mail,1L\n\n#define SN_mime_mhs_headings            \"mime-mhs-headings\"\n#define LN_mime_mhs_headings            \"mime-mhs-headings\"\n#define NID_mime_mhs_headings           505\n#define OBJ_mime_mhs_headings           OBJ_mime_mhs,1L\n\n#define SN_mime_mhs_bodies              \"mime-mhs-bodies\"\n#define LN_mime_mhs_bodies              \"mime-mhs-bodies\"\n#define NID_mime_mhs_bodies             506\n#define OBJ_mime_mhs_bodies             OBJ_mime_mhs,2L\n\n#define SN_id_hex_partial_message               \"id-hex-partial-message\"\n#define LN_id_hex_partial_message               \"id-hex-partial-message\"\n#define NID_id_hex_partial_message              507\n#define OBJ_id_hex_partial_message              OBJ_mime_mhs_headings,1L\n\n#define SN_id_hex_multipart_message             \"id-hex-multipart-message\"\n#define LN_id_hex_multipart_message             \"id-hex-multipart-message\"\n#define NID_id_hex_multipart_message            508\n#define OBJ_id_hex_multipart_message            OBJ_mime_mhs_headings,2L\n\n#define SN_rle_compression              \"RLE\"\n#define LN_rle_compression              \"run length compression\"\n#define NID_rle_compression             124\n#define OBJ_rle_compression             1L,1L,1L,1L,666L,1L\n\n#define SN_zlib_compression             \"ZLIB\"\n#define LN_zlib_compression             \"zlib compression\"\n#define NID_zlib_compression            125\n#define OBJ_zlib_compression            OBJ_id_smime_alg,8L\n\n#define OBJ_csor                2L,16L,840L,1L,101L,3L\n\n#define OBJ_nistAlgorithms              OBJ_csor,4L\n\n#define OBJ_aes         OBJ_nistAlgorithms,1L\n\n#define SN_aes_128_ecb          \"AES-128-ECB\"\n#define LN_aes_128_ecb          \"aes-128-ecb\"\n#define NID_aes_128_ecb         418\n#define OBJ_aes_128_ecb         OBJ_aes,1L\n\n#define SN_aes_128_cbc          \"AES-128-CBC\"\n#define LN_aes_128_cbc          \"aes-128-cbc\"\n#define NID_aes_128_cbc         419\n#define OBJ_aes_128_cbc         OBJ_aes,2L\n\n#define SN_aes_128_ofb128               \"AES-128-OFB\"\n#define LN_aes_128_ofb128               \"aes-128-ofb\"\n#define NID_aes_128_ofb128              420\n#define OBJ_aes_128_ofb128              OBJ_aes,3L\n\n#define SN_aes_128_cfb128               \"AES-128-CFB\"\n#define LN_aes_128_cfb128               \"aes-128-cfb\"\n#define NID_aes_128_cfb128              421\n#define OBJ_aes_128_cfb128              OBJ_aes,4L\n\n#define SN_id_aes128_wrap               \"id-aes128-wrap\"\n#define NID_id_aes128_wrap              788\n#define OBJ_id_aes128_wrap              OBJ_aes,5L\n\n#define SN_aes_128_gcm          \"id-aes128-GCM\"\n#define LN_aes_128_gcm          \"aes-128-gcm\"\n#define NID_aes_128_gcm         895\n#define OBJ_aes_128_gcm         OBJ_aes,6L\n\n#define SN_aes_128_ccm          \"id-aes128-CCM\"\n#define LN_aes_128_ccm          \"aes-128-ccm\"\n#define NID_aes_128_ccm         896\n#define OBJ_aes_128_ccm         OBJ_aes,7L\n\n#define SN_id_aes128_wrap_pad           \"id-aes128-wrap-pad\"\n#define NID_id_aes128_wrap_pad          897\n#define OBJ_id_aes128_wrap_pad          OBJ_aes,8L\n\n#define SN_aes_192_ecb          \"AES-192-ECB\"\n#define LN_aes_192_ecb          \"aes-192-ecb\"\n#define NID_aes_192_ecb         422\n#define OBJ_aes_192_ecb         OBJ_aes,21L\n\n#define SN_aes_192_cbc          \"AES-192-CBC\"\n#define LN_aes_192_cbc          \"aes-192-cbc\"\n#define NID_aes_192_cbc         423\n#define OBJ_aes_192_cbc         OBJ_aes,22L\n\n#define SN_aes_192_ofb128               \"AES-192-OFB\"\n#define LN_aes_192_ofb128               \"aes-192-ofb\"\n#define NID_aes_192_ofb128              424\n#define OBJ_aes_192_ofb128              OBJ_aes,23L\n\n#define SN_aes_192_cfb128               \"AES-192-CFB\"\n#define LN_aes_192_cfb128               \"aes-192-cfb\"\n#define NID_aes_192_cfb128              425\n#define OBJ_aes_192_cfb128              OBJ_aes,24L\n\n#define SN_id_aes192_wrap               \"id-aes192-wrap\"\n#define NID_id_aes192_wrap              789\n#define OBJ_id_aes192_wrap              OBJ_aes,25L\n\n#define SN_aes_192_gcm          \"id-aes192-GCM\"\n#define LN_aes_192_gcm          \"aes-192-gcm\"\n#define NID_aes_192_gcm         898\n#define OBJ_aes_192_gcm         OBJ_aes,26L\n\n#define SN_aes_192_ccm          \"id-aes192-CCM\"\n#define LN_aes_192_ccm          \"aes-192-ccm\"\n#define NID_aes_192_ccm         899\n#define OBJ_aes_192_ccm         OBJ_aes,27L\n\n#define SN_id_aes192_wrap_pad           \"id-aes192-wrap-pad\"\n#define NID_id_aes192_wrap_pad          900\n#define OBJ_id_aes192_wrap_pad          OBJ_aes,28L\n\n#define SN_aes_256_ecb          \"AES-256-ECB\"\n#define LN_aes_256_ecb          \"aes-256-ecb\"\n#define NID_aes_256_ecb         426\n#define OBJ_aes_256_ecb         OBJ_aes,41L\n\n#define SN_aes_256_cbc          \"AES-256-CBC\"\n#define LN_aes_256_cbc          \"aes-256-cbc\"\n#define NID_aes_256_cbc         427\n#define OBJ_aes_256_cbc         OBJ_aes,42L\n\n#define SN_aes_256_ofb128               \"AES-256-OFB\"\n#define LN_aes_256_ofb128               \"aes-256-ofb\"\n#define NID_aes_256_ofb128              428\n#define OBJ_aes_256_ofb128              OBJ_aes,43L\n\n#define SN_aes_256_cfb128               \"AES-256-CFB\"\n#define LN_aes_256_cfb128               \"aes-256-cfb\"\n#define NID_aes_256_cfb128              429\n#define OBJ_aes_256_cfb128              OBJ_aes,44L\n\n#define SN_id_aes256_wrap               \"id-aes256-wrap\"\n#define NID_id_aes256_wrap              790\n#define OBJ_id_aes256_wrap              OBJ_aes,45L\n\n#define SN_aes_256_gcm          \"id-aes256-GCM\"\n#define LN_aes_256_gcm          \"aes-256-gcm\"\n#define NID_aes_256_gcm         901\n#define OBJ_aes_256_gcm         OBJ_aes,46L\n\n#define SN_aes_256_ccm          \"id-aes256-CCM\"\n#define LN_aes_256_ccm          \"aes-256-ccm\"\n#define NID_aes_256_ccm         902\n#define OBJ_aes_256_ccm         OBJ_aes,47L\n\n#define SN_id_aes256_wrap_pad           \"id-aes256-wrap-pad\"\n#define NID_id_aes256_wrap_pad          903\n#define OBJ_id_aes256_wrap_pad          OBJ_aes,48L\n\n#define SN_aes_128_cfb1         \"AES-128-CFB1\"\n#define LN_aes_128_cfb1         \"aes-128-cfb1\"\n#define NID_aes_128_cfb1                650\n\n#define SN_aes_192_cfb1         \"AES-192-CFB1\"\n#define LN_aes_192_cfb1         \"aes-192-cfb1\"\n#define NID_aes_192_cfb1                651\n\n#define SN_aes_256_cfb1         \"AES-256-CFB1\"\n#define LN_aes_256_cfb1         \"aes-256-cfb1\"\n#define NID_aes_256_cfb1                652\n\n#define SN_aes_128_cfb8         \"AES-128-CFB8\"\n#define LN_aes_128_cfb8         \"aes-128-cfb8\"\n#define NID_aes_128_cfb8                653\n\n#define SN_aes_192_cfb8         \"AES-192-CFB8\"\n#define LN_aes_192_cfb8         \"aes-192-cfb8\"\n#define NID_aes_192_cfb8                654\n\n#define SN_aes_256_cfb8         \"AES-256-CFB8\"\n#define LN_aes_256_cfb8         \"aes-256-cfb8\"\n#define NID_aes_256_cfb8                655\n\n#define SN_aes_128_ctr          \"AES-128-CTR\"\n#define LN_aes_128_ctr          \"aes-128-ctr\"\n#define NID_aes_128_ctr         904\n\n#define SN_aes_192_ctr          \"AES-192-CTR\"\n#define LN_aes_192_ctr          \"aes-192-ctr\"\n#define NID_aes_192_ctr         905\n\n#define SN_aes_256_ctr          \"AES-256-CTR\"\n#define LN_aes_256_ctr          \"aes-256-ctr\"\n#define NID_aes_256_ctr         906\n\n#define SN_aes_128_xts          \"AES-128-XTS\"\n#define LN_aes_128_xts          \"aes-128-xts\"\n#define NID_aes_128_xts         913\n\n#define SN_aes_256_xts          \"AES-256-XTS\"\n#define LN_aes_256_xts          \"aes-256-xts\"\n#define NID_aes_256_xts         914\n\n#define SN_des_cfb1             \"DES-CFB1\"\n#define LN_des_cfb1             \"des-cfb1\"\n#define NID_des_cfb1            656\n\n#define SN_des_cfb8             \"DES-CFB8\"\n#define LN_des_cfb8             \"des-cfb8\"\n#define NID_des_cfb8            657\n\n#define SN_des_ede3_cfb1                \"DES-EDE3-CFB1\"\n#define LN_des_ede3_cfb1                \"des-ede3-cfb1\"\n#define NID_des_ede3_cfb1               658\n\n#define SN_des_ede3_cfb8                \"DES-EDE3-CFB8\"\n#define LN_des_ede3_cfb8                \"des-ede3-cfb8\"\n#define NID_des_ede3_cfb8               659\n\n#define OBJ_nist_hashalgs               OBJ_nistAlgorithms,2L\n\n#define SN_sha256               \"SHA256\"\n#define LN_sha256               \"sha256\"\n#define NID_sha256              672\n#define OBJ_sha256              OBJ_nist_hashalgs,1L\n\n#define SN_sha384               \"SHA384\"\n#define LN_sha384               \"sha384\"\n#define NID_sha384              673\n#define OBJ_sha384              OBJ_nist_hashalgs,2L\n\n#define SN_sha512               \"SHA512\"\n#define LN_sha512               \"sha512\"\n#define NID_sha512              674\n#define OBJ_sha512              OBJ_nist_hashalgs,3L\n\n#define SN_sha224               \"SHA224\"\n#define LN_sha224               \"sha224\"\n#define NID_sha224              675\n#define OBJ_sha224              OBJ_nist_hashalgs,4L\n\n#define OBJ_dsa_with_sha2               OBJ_nistAlgorithms,3L\n\n#define SN_dsa_with_SHA224              \"dsa_with_SHA224\"\n#define NID_dsa_with_SHA224             802\n#define OBJ_dsa_with_SHA224             OBJ_dsa_with_sha2,1L\n\n#define SN_dsa_with_SHA256              \"dsa_with_SHA256\"\n#define NID_dsa_with_SHA256             803\n#define OBJ_dsa_with_SHA256             OBJ_dsa_with_sha2,2L\n\n#define SN_hold_instruction_code                \"holdInstructionCode\"\n#define LN_hold_instruction_code                \"Hold Instruction Code\"\n#define NID_hold_instruction_code               430\n#define OBJ_hold_instruction_code               OBJ_id_ce,23L\n\n#define OBJ_holdInstruction             OBJ_X9_57,2L\n\n#define SN_hold_instruction_none                \"holdInstructionNone\"\n#define LN_hold_instruction_none                \"Hold Instruction None\"\n#define NID_hold_instruction_none               431\n#define OBJ_hold_instruction_none               OBJ_holdInstruction,1L\n\n#define SN_hold_instruction_call_issuer         \"holdInstructionCallIssuer\"\n#define LN_hold_instruction_call_issuer         \"Hold Instruction Call Issuer\"\n#define NID_hold_instruction_call_issuer                432\n#define OBJ_hold_instruction_call_issuer                OBJ_holdInstruction,2L\n\n#define SN_hold_instruction_reject              \"holdInstructionReject\"\n#define LN_hold_instruction_reject              \"Hold Instruction Reject\"\n#define NID_hold_instruction_reject             433\n#define OBJ_hold_instruction_reject             OBJ_holdInstruction,3L\n\n#define SN_data         \"data\"\n#define NID_data                434\n#define OBJ_data                OBJ_itu_t,9L\n\n#define SN_pss          \"pss\"\n#define NID_pss         435\n#define OBJ_pss         OBJ_data,2342L\n\n#define SN_ucl          \"ucl\"\n#define NID_ucl         436\n#define OBJ_ucl         OBJ_pss,19200300L\n\n#define SN_pilot                \"pilot\"\n#define NID_pilot               437\n#define OBJ_pilot               OBJ_ucl,100L\n\n#define LN_pilotAttributeType           \"pilotAttributeType\"\n#define NID_pilotAttributeType          438\n#define OBJ_pilotAttributeType          OBJ_pilot,1L\n\n#define LN_pilotAttributeSyntax         \"pilotAttributeSyntax\"\n#define NID_pilotAttributeSyntax                439\n#define OBJ_pilotAttributeSyntax                OBJ_pilot,3L\n\n#define LN_pilotObjectClass             \"pilotObjectClass\"\n#define NID_pilotObjectClass            440\n#define OBJ_pilotObjectClass            OBJ_pilot,4L\n\n#define LN_pilotGroups          \"pilotGroups\"\n#define NID_pilotGroups         441\n#define OBJ_pilotGroups         OBJ_pilot,10L\n\n#define LN_iA5StringSyntax              \"iA5StringSyntax\"\n#define NID_iA5StringSyntax             442\n#define OBJ_iA5StringSyntax             OBJ_pilotAttributeSyntax,4L\n\n#define LN_caseIgnoreIA5StringSyntax            \"caseIgnoreIA5StringSyntax\"\n#define NID_caseIgnoreIA5StringSyntax           443\n#define OBJ_caseIgnoreIA5StringSyntax           OBJ_pilotAttributeSyntax,5L\n\n#define LN_pilotObject          \"pilotObject\"\n#define NID_pilotObject         444\n#define OBJ_pilotObject         OBJ_pilotObjectClass,3L\n\n#define LN_pilotPerson          \"pilotPerson\"\n#define NID_pilotPerson         445\n#define OBJ_pilotPerson         OBJ_pilotObjectClass,4L\n\n#define SN_account              \"account\"\n#define NID_account             446\n#define OBJ_account             OBJ_pilotObjectClass,5L\n\n#define SN_document             \"document\"\n#define NID_document            447\n#define OBJ_document            OBJ_pilotObjectClass,6L\n\n#define SN_room         \"room\"\n#define NID_room                448\n#define OBJ_room                OBJ_pilotObjectClass,7L\n\n#define LN_documentSeries               \"documentSeries\"\n#define NID_documentSeries              449\n#define OBJ_documentSeries              OBJ_pilotObjectClass,9L\n\n#define SN_Domain               \"domain\"\n#define LN_Domain               \"Domain\"\n#define NID_Domain              392\n#define OBJ_Domain              OBJ_pilotObjectClass,13L\n\n#define LN_rFC822localPart              \"rFC822localPart\"\n#define NID_rFC822localPart             450\n#define OBJ_rFC822localPart             OBJ_pilotObjectClass,14L\n\n#define LN_dNSDomain            \"dNSDomain\"\n#define NID_dNSDomain           451\n#define OBJ_dNSDomain           OBJ_pilotObjectClass,15L\n\n#define LN_domainRelatedObject          \"domainRelatedObject\"\n#define NID_domainRelatedObject         452\n#define OBJ_domainRelatedObject         OBJ_pilotObjectClass,17L\n\n#define LN_friendlyCountry              \"friendlyCountry\"\n#define NID_friendlyCountry             453\n#define OBJ_friendlyCountry             OBJ_pilotObjectClass,18L\n\n#define LN_simpleSecurityObject         \"simpleSecurityObject\"\n#define NID_simpleSecurityObject                454\n#define OBJ_simpleSecurityObject                OBJ_pilotObjectClass,19L\n\n#define LN_pilotOrganization            \"pilotOrganization\"\n#define NID_pilotOrganization           455\n#define OBJ_pilotOrganization           OBJ_pilotObjectClass,20L\n\n#define LN_pilotDSA             \"pilotDSA\"\n#define NID_pilotDSA            456\n#define OBJ_pilotDSA            OBJ_pilotObjectClass,21L\n\n#define LN_qualityLabelledData          \"qualityLabelledData\"\n#define NID_qualityLabelledData         457\n#define OBJ_qualityLabelledData         OBJ_pilotObjectClass,22L\n\n#define SN_userId               \"UID\"\n#define LN_userId               \"userId\"\n#define NID_userId              458\n#define OBJ_userId              OBJ_pilotAttributeType,1L\n\n#define LN_textEncodedORAddress         \"textEncodedORAddress\"\n#define NID_textEncodedORAddress                459\n#define OBJ_textEncodedORAddress                OBJ_pilotAttributeType,2L\n\n#define SN_rfc822Mailbox                \"mail\"\n#define LN_rfc822Mailbox                \"rfc822Mailbox\"\n#define NID_rfc822Mailbox               460\n#define OBJ_rfc822Mailbox               OBJ_pilotAttributeType,3L\n\n#define SN_info         \"info\"\n#define NID_info                461\n#define OBJ_info                OBJ_pilotAttributeType,4L\n\n#define LN_favouriteDrink               \"favouriteDrink\"\n#define NID_favouriteDrink              462\n#define OBJ_favouriteDrink              OBJ_pilotAttributeType,5L\n\n#define LN_roomNumber           \"roomNumber\"\n#define NID_roomNumber          463\n#define OBJ_roomNumber          OBJ_pilotAttributeType,6L\n\n#define SN_photo                \"photo\"\n#define NID_photo               464\n#define OBJ_photo               OBJ_pilotAttributeType,7L\n\n#define LN_userClass            \"userClass\"\n#define NID_userClass           465\n#define OBJ_userClass           OBJ_pilotAttributeType,8L\n\n#define SN_host         \"host\"\n#define NID_host                466\n#define OBJ_host                OBJ_pilotAttributeType,9L\n\n#define SN_manager              \"manager\"\n#define NID_manager             467\n#define OBJ_manager             OBJ_pilotAttributeType,10L\n\n#define LN_documentIdentifier           \"documentIdentifier\"\n#define NID_documentIdentifier          468\n#define OBJ_documentIdentifier          OBJ_pilotAttributeType,11L\n\n#define LN_documentTitle                \"documentTitle\"\n#define NID_documentTitle               469\n#define OBJ_documentTitle               OBJ_pilotAttributeType,12L\n\n#define LN_documentVersion              \"documentVersion\"\n#define NID_documentVersion             470\n#define OBJ_documentVersion             OBJ_pilotAttributeType,13L\n\n#define LN_documentAuthor               \"documentAuthor\"\n#define NID_documentAuthor              471\n#define OBJ_documentAuthor              OBJ_pilotAttributeType,14L\n\n#define LN_documentLocation             \"documentLocation\"\n#define NID_documentLocation            472\n#define OBJ_documentLocation            OBJ_pilotAttributeType,15L\n\n#define LN_homeTelephoneNumber          \"homeTelephoneNumber\"\n#define NID_homeTelephoneNumber         473\n#define OBJ_homeTelephoneNumber         OBJ_pilotAttributeType,20L\n\n#define SN_secretary            \"secretary\"\n#define NID_secretary           474\n#define OBJ_secretary           OBJ_pilotAttributeType,21L\n\n#define LN_otherMailbox         \"otherMailbox\"\n#define NID_otherMailbox                475\n#define OBJ_otherMailbox                OBJ_pilotAttributeType,22L\n\n#define LN_lastModifiedTime             \"lastModifiedTime\"\n#define NID_lastModifiedTime            476\n#define OBJ_lastModifiedTime            OBJ_pilotAttributeType,23L\n\n#define LN_lastModifiedBy               \"lastModifiedBy\"\n#define NID_lastModifiedBy              477\n#define OBJ_lastModifiedBy              OBJ_pilotAttributeType,24L\n\n#define SN_domainComponent              \"DC\"\n#define LN_domainComponent              \"domainComponent\"\n#define NID_domainComponent             391\n#define OBJ_domainComponent             OBJ_pilotAttributeType,25L\n\n#define LN_aRecord              \"aRecord\"\n#define NID_aRecord             478\n#define OBJ_aRecord             OBJ_pilotAttributeType,26L\n\n#define LN_pilotAttributeType27         \"pilotAttributeType27\"\n#define NID_pilotAttributeType27                479\n#define OBJ_pilotAttributeType27                OBJ_pilotAttributeType,27L\n\n#define LN_mXRecord             \"mXRecord\"\n#define NID_mXRecord            480\n#define OBJ_mXRecord            OBJ_pilotAttributeType,28L\n\n#define LN_nSRecord             \"nSRecord\"\n#define NID_nSRecord            481\n#define OBJ_nSRecord            OBJ_pilotAttributeType,29L\n\n#define LN_sOARecord            \"sOARecord\"\n#define NID_sOARecord           482\n#define OBJ_sOARecord           OBJ_pilotAttributeType,30L\n\n#define LN_cNAMERecord          \"cNAMERecord\"\n#define NID_cNAMERecord         483\n#define OBJ_cNAMERecord         OBJ_pilotAttributeType,31L\n\n#define LN_associatedDomain             \"associatedDomain\"\n#define NID_associatedDomain            484\n#define OBJ_associatedDomain            OBJ_pilotAttributeType,37L\n\n#define LN_associatedName               \"associatedName\"\n#define NID_associatedName              485\n#define OBJ_associatedName              OBJ_pilotAttributeType,38L\n\n#define LN_homePostalAddress            \"homePostalAddress\"\n#define NID_homePostalAddress           486\n#define OBJ_homePostalAddress           OBJ_pilotAttributeType,39L\n\n#define LN_personalTitle                \"personalTitle\"\n#define NID_personalTitle               487\n#define OBJ_personalTitle               OBJ_pilotAttributeType,40L\n\n#define LN_mobileTelephoneNumber                \"mobileTelephoneNumber\"\n#define NID_mobileTelephoneNumber               488\n#define OBJ_mobileTelephoneNumber               OBJ_pilotAttributeType,41L\n\n#define LN_pagerTelephoneNumber         \"pagerTelephoneNumber\"\n#define NID_pagerTelephoneNumber                489\n#define OBJ_pagerTelephoneNumber                OBJ_pilotAttributeType,42L\n\n#define LN_friendlyCountryName          \"friendlyCountryName\"\n#define NID_friendlyCountryName         490\n#define OBJ_friendlyCountryName         OBJ_pilotAttributeType,43L\n\n#define LN_organizationalStatus         \"organizationalStatus\"\n#define NID_organizationalStatus                491\n#define OBJ_organizationalStatus                OBJ_pilotAttributeType,45L\n\n#define LN_janetMailbox         \"janetMailbox\"\n#define NID_janetMailbox                492\n#define OBJ_janetMailbox                OBJ_pilotAttributeType,46L\n\n#define LN_mailPreferenceOption         \"mailPreferenceOption\"\n#define NID_mailPreferenceOption                493\n#define OBJ_mailPreferenceOption                OBJ_pilotAttributeType,47L\n\n#define LN_buildingName         \"buildingName\"\n#define NID_buildingName                494\n#define OBJ_buildingName                OBJ_pilotAttributeType,48L\n\n#define LN_dSAQuality           \"dSAQuality\"\n#define NID_dSAQuality          495\n#define OBJ_dSAQuality          OBJ_pilotAttributeType,49L\n\n#define LN_singleLevelQuality           \"singleLevelQuality\"\n#define NID_singleLevelQuality          496\n#define OBJ_singleLevelQuality          OBJ_pilotAttributeType,50L\n\n#define LN_subtreeMinimumQuality                \"subtreeMinimumQuality\"\n#define NID_subtreeMinimumQuality               497\n#define OBJ_subtreeMinimumQuality               OBJ_pilotAttributeType,51L\n\n#define LN_subtreeMaximumQuality                \"subtreeMaximumQuality\"\n#define NID_subtreeMaximumQuality               498\n#define OBJ_subtreeMaximumQuality               OBJ_pilotAttributeType,52L\n\n#define LN_personalSignature            \"personalSignature\"\n#define NID_personalSignature           499\n#define OBJ_personalSignature           OBJ_pilotAttributeType,53L\n\n#define LN_dITRedirect          \"dITRedirect\"\n#define NID_dITRedirect         500\n#define OBJ_dITRedirect         OBJ_pilotAttributeType,54L\n\n#define SN_audio                \"audio\"\n#define NID_audio               501\n#define OBJ_audio               OBJ_pilotAttributeType,55L\n\n#define LN_documentPublisher            \"documentPublisher\"\n#define NID_documentPublisher           502\n#define OBJ_documentPublisher           OBJ_pilotAttributeType,56L\n\n#define SN_id_set               \"id-set\"\n#define LN_id_set               \"Secure Electronic Transactions\"\n#define NID_id_set              512\n#define OBJ_id_set              OBJ_international_organizations,42L\n\n#define SN_set_ctype            \"set-ctype\"\n#define LN_set_ctype            \"content types\"\n#define NID_set_ctype           513\n#define OBJ_set_ctype           OBJ_id_set,0L\n\n#define SN_set_msgExt           \"set-msgExt\"\n#define LN_set_msgExt           \"message extensions\"\n#define NID_set_msgExt          514\n#define OBJ_set_msgExt          OBJ_id_set,1L\n\n#define SN_set_attr             \"set-attr\"\n#define NID_set_attr            515\n#define OBJ_set_attr            OBJ_id_set,3L\n\n#define SN_set_policy           \"set-policy\"\n#define NID_set_policy          516\n#define OBJ_set_policy          OBJ_id_set,5L\n\n#define SN_set_certExt          \"set-certExt\"\n#define LN_set_certExt          \"certificate extensions\"\n#define NID_set_certExt         517\n#define OBJ_set_certExt         OBJ_id_set,7L\n\n#define SN_set_brand            \"set-brand\"\n#define NID_set_brand           518\n#define OBJ_set_brand           OBJ_id_set,8L\n\n#define SN_setct_PANData                \"setct-PANData\"\n#define NID_setct_PANData               519\n#define OBJ_setct_PANData               OBJ_set_ctype,0L\n\n#define SN_setct_PANToken               \"setct-PANToken\"\n#define NID_setct_PANToken              520\n#define OBJ_setct_PANToken              OBJ_set_ctype,1L\n\n#define SN_setct_PANOnly                \"setct-PANOnly\"\n#define NID_setct_PANOnly               521\n#define OBJ_setct_PANOnly               OBJ_set_ctype,2L\n\n#define SN_setct_OIData         \"setct-OIData\"\n#define NID_setct_OIData                522\n#define OBJ_setct_OIData                OBJ_set_ctype,3L\n\n#define SN_setct_PI             \"setct-PI\"\n#define NID_setct_PI            523\n#define OBJ_setct_PI            OBJ_set_ctype,4L\n\n#define SN_setct_PIData         \"setct-PIData\"\n#define NID_setct_PIData                524\n#define OBJ_setct_PIData                OBJ_set_ctype,5L\n\n#define SN_setct_PIDataUnsigned         \"setct-PIDataUnsigned\"\n#define NID_setct_PIDataUnsigned                525\n#define OBJ_setct_PIDataUnsigned                OBJ_set_ctype,6L\n\n#define SN_setct_HODInput               \"setct-HODInput\"\n#define NID_setct_HODInput              526\n#define OBJ_setct_HODInput              OBJ_set_ctype,7L\n\n#define SN_setct_AuthResBaggage         \"setct-AuthResBaggage\"\n#define NID_setct_AuthResBaggage                527\n#define OBJ_setct_AuthResBaggage                OBJ_set_ctype,8L\n\n#define SN_setct_AuthRevReqBaggage              \"setct-AuthRevReqBaggage\"\n#define NID_setct_AuthRevReqBaggage             528\n#define OBJ_setct_AuthRevReqBaggage             OBJ_set_ctype,9L\n\n#define SN_setct_AuthRevResBaggage              \"setct-AuthRevResBaggage\"\n#define NID_setct_AuthRevResBaggage             529\n#define OBJ_setct_AuthRevResBaggage             OBJ_set_ctype,10L\n\n#define SN_setct_CapTokenSeq            \"setct-CapTokenSeq\"\n#define NID_setct_CapTokenSeq           530\n#define OBJ_setct_CapTokenSeq           OBJ_set_ctype,11L\n\n#define SN_setct_PInitResData           \"setct-PInitResData\"\n#define NID_setct_PInitResData          531\n#define OBJ_setct_PInitResData          OBJ_set_ctype,12L\n\n#define SN_setct_PI_TBS         \"setct-PI-TBS\"\n#define NID_setct_PI_TBS                532\n#define OBJ_setct_PI_TBS                OBJ_set_ctype,13L\n\n#define SN_setct_PResData               \"setct-PResData\"\n#define NID_setct_PResData              533\n#define OBJ_setct_PResData              OBJ_set_ctype,14L\n\n#define SN_setct_AuthReqTBS             \"setct-AuthReqTBS\"\n#define NID_setct_AuthReqTBS            534\n#define OBJ_setct_AuthReqTBS            OBJ_set_ctype,16L\n\n#define SN_setct_AuthResTBS             \"setct-AuthResTBS\"\n#define NID_setct_AuthResTBS            535\n#define OBJ_setct_AuthResTBS            OBJ_set_ctype,17L\n\n#define SN_setct_AuthResTBSX            \"setct-AuthResTBSX\"\n#define NID_setct_AuthResTBSX           536\n#define OBJ_setct_AuthResTBSX           OBJ_set_ctype,18L\n\n#define SN_setct_AuthTokenTBS           \"setct-AuthTokenTBS\"\n#define NID_setct_AuthTokenTBS          537\n#define OBJ_setct_AuthTokenTBS          OBJ_set_ctype,19L\n\n#define SN_setct_CapTokenData           \"setct-CapTokenData\"\n#define NID_setct_CapTokenData          538\n#define OBJ_setct_CapTokenData          OBJ_set_ctype,20L\n\n#define SN_setct_CapTokenTBS            \"setct-CapTokenTBS\"\n#define NID_setct_CapTokenTBS           539\n#define OBJ_setct_CapTokenTBS           OBJ_set_ctype,21L\n\n#define SN_setct_AcqCardCodeMsg         \"setct-AcqCardCodeMsg\"\n#define NID_setct_AcqCardCodeMsg                540\n#define OBJ_setct_AcqCardCodeMsg                OBJ_set_ctype,22L\n\n#define SN_setct_AuthRevReqTBS          \"setct-AuthRevReqTBS\"\n#define NID_setct_AuthRevReqTBS         541\n#define OBJ_setct_AuthRevReqTBS         OBJ_set_ctype,23L\n\n#define SN_setct_AuthRevResData         \"setct-AuthRevResData\"\n#define NID_setct_AuthRevResData                542\n#define OBJ_setct_AuthRevResData                OBJ_set_ctype,24L\n\n#define SN_setct_AuthRevResTBS          \"setct-AuthRevResTBS\"\n#define NID_setct_AuthRevResTBS         543\n#define OBJ_setct_AuthRevResTBS         OBJ_set_ctype,25L\n\n#define SN_setct_CapReqTBS              \"setct-CapReqTBS\"\n#define NID_setct_CapReqTBS             544\n#define OBJ_setct_CapReqTBS             OBJ_set_ctype,26L\n\n#define SN_setct_CapReqTBSX             \"setct-CapReqTBSX\"\n#define NID_setct_CapReqTBSX            545\n#define OBJ_setct_CapReqTBSX            OBJ_set_ctype,27L\n\n#define SN_setct_CapResData             \"setct-CapResData\"\n#define NID_setct_CapResData            546\n#define OBJ_setct_CapResData            OBJ_set_ctype,28L\n\n#define SN_setct_CapRevReqTBS           \"setct-CapRevReqTBS\"\n#define NID_setct_CapRevReqTBS          547\n#define OBJ_setct_CapRevReqTBS          OBJ_set_ctype,29L\n\n#define SN_setct_CapRevReqTBSX          \"setct-CapRevReqTBSX\"\n#define NID_setct_CapRevReqTBSX         548\n#define OBJ_setct_CapRevReqTBSX         OBJ_set_ctype,30L\n\n#define SN_setct_CapRevResData          \"setct-CapRevResData\"\n#define NID_setct_CapRevResData         549\n#define OBJ_setct_CapRevResData         OBJ_set_ctype,31L\n\n#define SN_setct_CredReqTBS             \"setct-CredReqTBS\"\n#define NID_setct_CredReqTBS            550\n#define OBJ_setct_CredReqTBS            OBJ_set_ctype,32L\n\n#define SN_setct_CredReqTBSX            \"setct-CredReqTBSX\"\n#define NID_setct_CredReqTBSX           551\n#define OBJ_setct_CredReqTBSX           OBJ_set_ctype,33L\n\n#define SN_setct_CredResData            \"setct-CredResData\"\n#define NID_setct_CredResData           552\n#define OBJ_setct_CredResData           OBJ_set_ctype,34L\n\n#define SN_setct_CredRevReqTBS          \"setct-CredRevReqTBS\"\n#define NID_setct_CredRevReqTBS         553\n#define OBJ_setct_CredRevReqTBS         OBJ_set_ctype,35L\n\n#define SN_setct_CredRevReqTBSX         \"setct-CredRevReqTBSX\"\n#define NID_setct_CredRevReqTBSX                554\n#define OBJ_setct_CredRevReqTBSX                OBJ_set_ctype,36L\n\n#define SN_setct_CredRevResData         \"setct-CredRevResData\"\n#define NID_setct_CredRevResData                555\n#define OBJ_setct_CredRevResData                OBJ_set_ctype,37L\n\n#define SN_setct_PCertReqData           \"setct-PCertReqData\"\n#define NID_setct_PCertReqData          556\n#define OBJ_setct_PCertReqData          OBJ_set_ctype,38L\n\n#define SN_setct_PCertResTBS            \"setct-PCertResTBS\"\n#define NID_setct_PCertResTBS           557\n#define OBJ_setct_PCertResTBS           OBJ_set_ctype,39L\n\n#define SN_setct_BatchAdminReqData              \"setct-BatchAdminReqData\"\n#define NID_setct_BatchAdminReqData             558\n#define OBJ_setct_BatchAdminReqData             OBJ_set_ctype,40L\n\n#define SN_setct_BatchAdminResData              \"setct-BatchAdminResData\"\n#define NID_setct_BatchAdminResData             559\n#define OBJ_setct_BatchAdminResData             OBJ_set_ctype,41L\n\n#define SN_setct_CardCInitResTBS                \"setct-CardCInitResTBS\"\n#define NID_setct_CardCInitResTBS               560\n#define OBJ_setct_CardCInitResTBS               OBJ_set_ctype,42L\n\n#define SN_setct_MeAqCInitResTBS                \"setct-MeAqCInitResTBS\"\n#define NID_setct_MeAqCInitResTBS               561\n#define OBJ_setct_MeAqCInitResTBS               OBJ_set_ctype,43L\n\n#define SN_setct_RegFormResTBS          \"setct-RegFormResTBS\"\n#define NID_setct_RegFormResTBS         562\n#define OBJ_setct_RegFormResTBS         OBJ_set_ctype,44L\n\n#define SN_setct_CertReqData            \"setct-CertReqData\"\n#define NID_setct_CertReqData           563\n#define OBJ_setct_CertReqData           OBJ_set_ctype,45L\n\n#define SN_setct_CertReqTBS             \"setct-CertReqTBS\"\n#define NID_setct_CertReqTBS            564\n#define OBJ_setct_CertReqTBS            OBJ_set_ctype,46L\n\n#define SN_setct_CertResData            \"setct-CertResData\"\n#define NID_setct_CertResData           565\n#define OBJ_setct_CertResData           OBJ_set_ctype,47L\n\n#define SN_setct_CertInqReqTBS          \"setct-CertInqReqTBS\"\n#define NID_setct_CertInqReqTBS         566\n#define OBJ_setct_CertInqReqTBS         OBJ_set_ctype,48L\n\n#define SN_setct_ErrorTBS               \"setct-ErrorTBS\"\n#define NID_setct_ErrorTBS              567\n#define OBJ_setct_ErrorTBS              OBJ_set_ctype,49L\n\n#define SN_setct_PIDualSignedTBE                \"setct-PIDualSignedTBE\"\n#define NID_setct_PIDualSignedTBE               568\n#define OBJ_setct_PIDualSignedTBE               OBJ_set_ctype,50L\n\n#define SN_setct_PIUnsignedTBE          \"setct-PIUnsignedTBE\"\n#define NID_setct_PIUnsignedTBE         569\n#define OBJ_setct_PIUnsignedTBE         OBJ_set_ctype,51L\n\n#define SN_setct_AuthReqTBE             \"setct-AuthReqTBE\"\n#define NID_setct_AuthReqTBE            570\n#define OBJ_setct_AuthReqTBE            OBJ_set_ctype,52L\n\n#define SN_setct_AuthResTBE             \"setct-AuthResTBE\"\n#define NID_setct_AuthResTBE            571\n#define OBJ_setct_AuthResTBE            OBJ_set_ctype,53L\n\n#define SN_setct_AuthResTBEX            \"setct-AuthResTBEX\"\n#define NID_setct_AuthResTBEX           572\n#define OBJ_setct_AuthResTBEX           OBJ_set_ctype,54L\n\n#define SN_setct_AuthTokenTBE           \"setct-AuthTokenTBE\"\n#define NID_setct_AuthTokenTBE          573\n#define OBJ_setct_AuthTokenTBE          OBJ_set_ctype,55L\n\n#define SN_setct_CapTokenTBE            \"setct-CapTokenTBE\"\n#define NID_setct_CapTokenTBE           574\n#define OBJ_setct_CapTokenTBE           OBJ_set_ctype,56L\n\n#define SN_setct_CapTokenTBEX           \"setct-CapTokenTBEX\"\n#define NID_setct_CapTokenTBEX          575\n#define OBJ_setct_CapTokenTBEX          OBJ_set_ctype,57L\n\n#define SN_setct_AcqCardCodeMsgTBE              \"setct-AcqCardCodeMsgTBE\"\n#define NID_setct_AcqCardCodeMsgTBE             576\n#define OBJ_setct_AcqCardCodeMsgTBE             OBJ_set_ctype,58L\n\n#define SN_setct_AuthRevReqTBE          \"setct-AuthRevReqTBE\"\n#define NID_setct_AuthRevReqTBE         577\n#define OBJ_setct_AuthRevReqTBE         OBJ_set_ctype,59L\n\n#define SN_setct_AuthRevResTBE          \"setct-AuthRevResTBE\"\n#define NID_setct_AuthRevResTBE         578\n#define OBJ_setct_AuthRevResTBE         OBJ_set_ctype,60L\n\n#define SN_setct_AuthRevResTBEB         \"setct-AuthRevResTBEB\"\n#define NID_setct_AuthRevResTBEB                579\n#define OBJ_setct_AuthRevResTBEB                OBJ_set_ctype,61L\n\n#define SN_setct_CapReqTBE              \"setct-CapReqTBE\"\n#define NID_setct_CapReqTBE             580\n#define OBJ_setct_CapReqTBE             OBJ_set_ctype,62L\n\n#define SN_setct_CapReqTBEX             \"setct-CapReqTBEX\"\n#define NID_setct_CapReqTBEX            581\n#define OBJ_setct_CapReqTBEX            OBJ_set_ctype,63L\n\n#define SN_setct_CapResTBE              \"setct-CapResTBE\"\n#define NID_setct_CapResTBE             582\n#define OBJ_setct_CapResTBE             OBJ_set_ctype,64L\n\n#define SN_setct_CapRevReqTBE           \"setct-CapRevReqTBE\"\n#define NID_setct_CapRevReqTBE          583\n#define OBJ_setct_CapRevReqTBE          OBJ_set_ctype,65L\n\n#define SN_setct_CapRevReqTBEX          \"setct-CapRevReqTBEX\"\n#define NID_setct_CapRevReqTBEX         584\n#define OBJ_setct_CapRevReqTBEX         OBJ_set_ctype,66L\n\n#define SN_setct_CapRevResTBE           \"setct-CapRevResTBE\"\n#define NID_setct_CapRevResTBE          585\n#define OBJ_setct_CapRevResTBE          OBJ_set_ctype,67L\n\n#define SN_setct_CredReqTBE             \"setct-CredReqTBE\"\n#define NID_setct_CredReqTBE            586\n#define OBJ_setct_CredReqTBE            OBJ_set_ctype,68L\n\n#define SN_setct_CredReqTBEX            \"setct-CredReqTBEX\"\n#define NID_setct_CredReqTBEX           587\n#define OBJ_setct_CredReqTBEX           OBJ_set_ctype,69L\n\n#define SN_setct_CredResTBE             \"setct-CredResTBE\"\n#define NID_setct_CredResTBE            588\n#define OBJ_setct_CredResTBE            OBJ_set_ctype,70L\n\n#define SN_setct_CredRevReqTBE          \"setct-CredRevReqTBE\"\n#define NID_setct_CredRevReqTBE         589\n#define OBJ_setct_CredRevReqTBE         OBJ_set_ctype,71L\n\n#define SN_setct_CredRevReqTBEX         \"setct-CredRevReqTBEX\"\n#define NID_setct_CredRevReqTBEX                590\n#define OBJ_setct_CredRevReqTBEX                OBJ_set_ctype,72L\n\n#define SN_setct_CredRevResTBE          \"setct-CredRevResTBE\"\n#define NID_setct_CredRevResTBE         591\n#define OBJ_setct_CredRevResTBE         OBJ_set_ctype,73L\n\n#define SN_setct_BatchAdminReqTBE               \"setct-BatchAdminReqTBE\"\n#define NID_setct_BatchAdminReqTBE              592\n#define OBJ_setct_BatchAdminReqTBE              OBJ_set_ctype,74L\n\n#define SN_setct_BatchAdminResTBE               \"setct-BatchAdminResTBE\"\n#define NID_setct_BatchAdminResTBE              593\n#define OBJ_setct_BatchAdminResTBE              OBJ_set_ctype,75L\n\n#define SN_setct_RegFormReqTBE          \"setct-RegFormReqTBE\"\n#define NID_setct_RegFormReqTBE         594\n#define OBJ_setct_RegFormReqTBE         OBJ_set_ctype,76L\n\n#define SN_setct_CertReqTBE             \"setct-CertReqTBE\"\n#define NID_setct_CertReqTBE            595\n#define OBJ_setct_CertReqTBE            OBJ_set_ctype,77L\n\n#define SN_setct_CertReqTBEX            \"setct-CertReqTBEX\"\n#define NID_setct_CertReqTBEX           596\n#define OBJ_setct_CertReqTBEX           OBJ_set_ctype,78L\n\n#define SN_setct_CertResTBE             \"setct-CertResTBE\"\n#define NID_setct_CertResTBE            597\n#define OBJ_setct_CertResTBE            OBJ_set_ctype,79L\n\n#define SN_setct_CRLNotificationTBS             \"setct-CRLNotificationTBS\"\n#define NID_setct_CRLNotificationTBS            598\n#define OBJ_setct_CRLNotificationTBS            OBJ_set_ctype,80L\n\n#define SN_setct_CRLNotificationResTBS          \"setct-CRLNotificationResTBS\"\n#define NID_setct_CRLNotificationResTBS         599\n#define OBJ_setct_CRLNotificationResTBS         OBJ_set_ctype,81L\n\n#define SN_setct_BCIDistributionTBS             \"setct-BCIDistributionTBS\"\n#define NID_setct_BCIDistributionTBS            600\n#define OBJ_setct_BCIDistributionTBS            OBJ_set_ctype,82L\n\n#define SN_setext_genCrypt              \"setext-genCrypt\"\n#define LN_setext_genCrypt              \"generic cryptogram\"\n#define NID_setext_genCrypt             601\n#define OBJ_setext_genCrypt             OBJ_set_msgExt,1L\n\n#define SN_setext_miAuth                \"setext-miAuth\"\n#define LN_setext_miAuth                \"merchant initiated auth\"\n#define NID_setext_miAuth               602\n#define OBJ_setext_miAuth               OBJ_set_msgExt,3L\n\n#define SN_setext_pinSecure             \"setext-pinSecure\"\n#define NID_setext_pinSecure            603\n#define OBJ_setext_pinSecure            OBJ_set_msgExt,4L\n\n#define SN_setext_pinAny                \"setext-pinAny\"\n#define NID_setext_pinAny               604\n#define OBJ_setext_pinAny               OBJ_set_msgExt,5L\n\n#define SN_setext_track2                \"setext-track2\"\n#define NID_setext_track2               605\n#define OBJ_setext_track2               OBJ_set_msgExt,7L\n\n#define SN_setext_cv            \"setext-cv\"\n#define LN_setext_cv            \"additional verification\"\n#define NID_setext_cv           606\n#define OBJ_setext_cv           OBJ_set_msgExt,8L\n\n#define SN_set_policy_root              \"set-policy-root\"\n#define NID_set_policy_root             607\n#define OBJ_set_policy_root             OBJ_set_policy,0L\n\n#define SN_setCext_hashedRoot           \"setCext-hashedRoot\"\n#define NID_setCext_hashedRoot          608\n#define OBJ_setCext_hashedRoot          OBJ_set_certExt,0L\n\n#define SN_setCext_certType             \"setCext-certType\"\n#define NID_setCext_certType            609\n#define OBJ_setCext_certType            OBJ_set_certExt,1L\n\n#define SN_setCext_merchData            \"setCext-merchData\"\n#define NID_setCext_merchData           610\n#define OBJ_setCext_merchData           OBJ_set_certExt,2L\n\n#define SN_setCext_cCertRequired                \"setCext-cCertRequired\"\n#define NID_setCext_cCertRequired               611\n#define OBJ_setCext_cCertRequired               OBJ_set_certExt,3L\n\n#define SN_setCext_tunneling            \"setCext-tunneling\"\n#define NID_setCext_tunneling           612\n#define OBJ_setCext_tunneling           OBJ_set_certExt,4L\n\n#define SN_setCext_setExt               \"setCext-setExt\"\n#define NID_setCext_setExt              613\n#define OBJ_setCext_setExt              OBJ_set_certExt,5L\n\n#define SN_setCext_setQualf             \"setCext-setQualf\"\n#define NID_setCext_setQualf            614\n#define OBJ_setCext_setQualf            OBJ_set_certExt,6L\n\n#define SN_setCext_PGWYcapabilities             \"setCext-PGWYcapabilities\"\n#define NID_setCext_PGWYcapabilities            615\n#define OBJ_setCext_PGWYcapabilities            OBJ_set_certExt,7L\n\n#define SN_setCext_TokenIdentifier              \"setCext-TokenIdentifier\"\n#define NID_setCext_TokenIdentifier             616\n#define OBJ_setCext_TokenIdentifier             OBJ_set_certExt,8L\n\n#define SN_setCext_Track2Data           \"setCext-Track2Data\"\n#define NID_setCext_Track2Data          617\n#define OBJ_setCext_Track2Data          OBJ_set_certExt,9L\n\n#define SN_setCext_TokenType            \"setCext-TokenType\"\n#define NID_setCext_TokenType           618\n#define OBJ_setCext_TokenType           OBJ_set_certExt,10L\n\n#define SN_setCext_IssuerCapabilities           \"setCext-IssuerCapabilities\"\n#define NID_setCext_IssuerCapabilities          619\n#define OBJ_setCext_IssuerCapabilities          OBJ_set_certExt,11L\n\n#define SN_setAttr_Cert         \"setAttr-Cert\"\n#define NID_setAttr_Cert                620\n#define OBJ_setAttr_Cert                OBJ_set_attr,0L\n\n#define SN_setAttr_PGWYcap              \"setAttr-PGWYcap\"\n#define LN_setAttr_PGWYcap              \"payment gateway capabilities\"\n#define NID_setAttr_PGWYcap             621\n#define OBJ_setAttr_PGWYcap             OBJ_set_attr,1L\n\n#define SN_setAttr_TokenType            \"setAttr-TokenType\"\n#define NID_setAttr_TokenType           622\n#define OBJ_setAttr_TokenType           OBJ_set_attr,2L\n\n#define SN_setAttr_IssCap               \"setAttr-IssCap\"\n#define LN_setAttr_IssCap               \"issuer capabilities\"\n#define NID_setAttr_IssCap              623\n#define OBJ_setAttr_IssCap              OBJ_set_attr,3L\n\n#define SN_set_rootKeyThumb             \"set-rootKeyThumb\"\n#define NID_set_rootKeyThumb            624\n#define OBJ_set_rootKeyThumb            OBJ_setAttr_Cert,0L\n\n#define SN_set_addPolicy                \"set-addPolicy\"\n#define NID_set_addPolicy               625\n#define OBJ_set_addPolicy               OBJ_setAttr_Cert,1L\n\n#define SN_setAttr_Token_EMV            \"setAttr-Token-EMV\"\n#define NID_setAttr_Token_EMV           626\n#define OBJ_setAttr_Token_EMV           OBJ_setAttr_TokenType,1L\n\n#define SN_setAttr_Token_B0Prime                \"setAttr-Token-B0Prime\"\n#define NID_setAttr_Token_B0Prime               627\n#define OBJ_setAttr_Token_B0Prime               OBJ_setAttr_TokenType,2L\n\n#define SN_setAttr_IssCap_CVM           \"setAttr-IssCap-CVM\"\n#define NID_setAttr_IssCap_CVM          628\n#define OBJ_setAttr_IssCap_CVM          OBJ_setAttr_IssCap,3L\n\n#define SN_setAttr_IssCap_T2            \"setAttr-IssCap-T2\"\n#define NID_setAttr_IssCap_T2           629\n#define OBJ_setAttr_IssCap_T2           OBJ_setAttr_IssCap,4L\n\n#define SN_setAttr_IssCap_Sig           \"setAttr-IssCap-Sig\"\n#define NID_setAttr_IssCap_Sig          630\n#define OBJ_setAttr_IssCap_Sig          OBJ_setAttr_IssCap,5L\n\n#define SN_setAttr_GenCryptgrm          \"setAttr-GenCryptgrm\"\n#define LN_setAttr_GenCryptgrm          \"generate cryptogram\"\n#define NID_setAttr_GenCryptgrm         631\n#define OBJ_setAttr_GenCryptgrm         OBJ_setAttr_IssCap_CVM,1L\n\n#define SN_setAttr_T2Enc                \"setAttr-T2Enc\"\n#define LN_setAttr_T2Enc                \"encrypted track 2\"\n#define NID_setAttr_T2Enc               632\n#define OBJ_setAttr_T2Enc               OBJ_setAttr_IssCap_T2,1L\n\n#define SN_setAttr_T2cleartxt           \"setAttr-T2cleartxt\"\n#define LN_setAttr_T2cleartxt           \"cleartext track 2\"\n#define NID_setAttr_T2cleartxt          633\n#define OBJ_setAttr_T2cleartxt          OBJ_setAttr_IssCap_T2,2L\n\n#define SN_setAttr_TokICCsig            \"setAttr-TokICCsig\"\n#define LN_setAttr_TokICCsig            \"ICC or token signature\"\n#define NID_setAttr_TokICCsig           634\n#define OBJ_setAttr_TokICCsig           OBJ_setAttr_IssCap_Sig,1L\n\n#define SN_setAttr_SecDevSig            \"setAttr-SecDevSig\"\n#define LN_setAttr_SecDevSig            \"secure device signature\"\n#define NID_setAttr_SecDevSig           635\n#define OBJ_setAttr_SecDevSig           OBJ_setAttr_IssCap_Sig,2L\n\n#define SN_set_brand_IATA_ATA           \"set-brand-IATA-ATA\"\n#define NID_set_brand_IATA_ATA          636\n#define OBJ_set_brand_IATA_ATA          OBJ_set_brand,1L\n\n#define SN_set_brand_Diners             \"set-brand-Diners\"\n#define NID_set_brand_Diners            637\n#define OBJ_set_brand_Diners            OBJ_set_brand,30L\n\n#define SN_set_brand_AmericanExpress            \"set-brand-AmericanExpress\"\n#define NID_set_brand_AmericanExpress           638\n#define OBJ_set_brand_AmericanExpress           OBJ_set_brand,34L\n\n#define SN_set_brand_JCB                \"set-brand-JCB\"\n#define NID_set_brand_JCB               639\n#define OBJ_set_brand_JCB               OBJ_set_brand,35L\n\n#define SN_set_brand_Visa               \"set-brand-Visa\"\n#define NID_set_brand_Visa              640\n#define OBJ_set_brand_Visa              OBJ_set_brand,4L\n\n#define SN_set_brand_MasterCard         \"set-brand-MasterCard\"\n#define NID_set_brand_MasterCard                641\n#define OBJ_set_brand_MasterCard                OBJ_set_brand,5L\n\n#define SN_set_brand_Novus              \"set-brand-Novus\"\n#define NID_set_brand_Novus             642\n#define OBJ_set_brand_Novus             OBJ_set_brand,6011L\n\n#define SN_des_cdmf             \"DES-CDMF\"\n#define LN_des_cdmf             \"des-cdmf\"\n#define NID_des_cdmf            643\n#define OBJ_des_cdmf            OBJ_rsadsi,3L,10L\n\n#define SN_rsaOAEPEncryptionSET         \"rsaOAEPEncryptionSET\"\n#define NID_rsaOAEPEncryptionSET                644\n#define OBJ_rsaOAEPEncryptionSET                OBJ_rsadsi,1L,1L,6L\n\n#define SN_ipsec3               \"Oakley-EC2N-3\"\n#define LN_ipsec3               \"ipsec3\"\n#define NID_ipsec3              749\n\n#define SN_ipsec4               \"Oakley-EC2N-4\"\n#define LN_ipsec4               \"ipsec4\"\n#define NID_ipsec4              750\n\n#define SN_whirlpool            \"whirlpool\"\n#define NID_whirlpool           804\n#define OBJ_whirlpool           OBJ_iso,0L,10118L,3L,0L,55L\n\n#define SN_cryptopro            \"cryptopro\"\n#define NID_cryptopro           805\n#define OBJ_cryptopro           OBJ_member_body,643L,2L,2L\n\n#define SN_cryptocom            \"cryptocom\"\n#define NID_cryptocom           806\n#define OBJ_cryptocom           OBJ_member_body,643L,2L,9L\n\n#define SN_id_GostR3411_94_with_GostR3410_2001          \"id-GostR3411-94-with-GostR3410-2001\"\n#define LN_id_GostR3411_94_with_GostR3410_2001          \"GOST R 34.11-94 with GOST R 34.10-2001\"\n#define NID_id_GostR3411_94_with_GostR3410_2001         807\n#define OBJ_id_GostR3411_94_with_GostR3410_2001         OBJ_cryptopro,3L\n\n#define SN_id_GostR3411_94_with_GostR3410_94            \"id-GostR3411-94-with-GostR3410-94\"\n#define LN_id_GostR3411_94_with_GostR3410_94            \"GOST R 34.11-94 with GOST R 34.10-94\"\n#define NID_id_GostR3411_94_with_GostR3410_94           808\n#define OBJ_id_GostR3411_94_with_GostR3410_94           OBJ_cryptopro,4L\n\n#define SN_id_GostR3411_94              \"md_gost94\"\n#define LN_id_GostR3411_94              \"GOST R 34.11-94\"\n#define NID_id_GostR3411_94             809\n#define OBJ_id_GostR3411_94             OBJ_cryptopro,9L\n\n#define SN_id_HMACGostR3411_94          \"id-HMACGostR3411-94\"\n#define LN_id_HMACGostR3411_94          \"HMAC GOST 34.11-94\"\n#define NID_id_HMACGostR3411_94         810\n#define OBJ_id_HMACGostR3411_94         OBJ_cryptopro,10L\n\n#define SN_id_GostR3410_2001            \"gost2001\"\n#define LN_id_GostR3410_2001            \"GOST R 34.10-2001\"\n#define NID_id_GostR3410_2001           811\n#define OBJ_id_GostR3410_2001           OBJ_cryptopro,19L\n\n#define SN_id_GostR3410_94              \"gost94\"\n#define LN_id_GostR3410_94              \"GOST R 34.10-94\"\n#define NID_id_GostR3410_94             812\n#define OBJ_id_GostR3410_94             OBJ_cryptopro,20L\n\n#define SN_id_Gost28147_89              \"gost89\"\n#define LN_id_Gost28147_89              \"GOST 28147-89\"\n#define NID_id_Gost28147_89             813\n#define OBJ_id_Gost28147_89             OBJ_cryptopro,21L\n\n#define SN_gost89_cnt           \"gost89-cnt\"\n#define NID_gost89_cnt          814\n\n#define SN_id_Gost28147_89_MAC          \"gost-mac\"\n#define LN_id_Gost28147_89_MAC          \"GOST 28147-89 MAC\"\n#define NID_id_Gost28147_89_MAC         815\n#define OBJ_id_Gost28147_89_MAC         OBJ_cryptopro,22L\n\n#define SN_id_GostR3411_94_prf          \"prf-gostr3411-94\"\n#define LN_id_GostR3411_94_prf          \"GOST R 34.11-94 PRF\"\n#define NID_id_GostR3411_94_prf         816\n#define OBJ_id_GostR3411_94_prf         OBJ_cryptopro,23L\n\n#define SN_id_GostR3410_2001DH          \"id-GostR3410-2001DH\"\n#define LN_id_GostR3410_2001DH          \"GOST R 34.10-2001 DH\"\n#define NID_id_GostR3410_2001DH         817\n#define OBJ_id_GostR3410_2001DH         OBJ_cryptopro,98L\n\n#define SN_id_GostR3410_94DH            \"id-GostR3410-94DH\"\n#define LN_id_GostR3410_94DH            \"GOST R 34.10-94 DH\"\n#define NID_id_GostR3410_94DH           818\n#define OBJ_id_GostR3410_94DH           OBJ_cryptopro,99L\n\n#define SN_id_Gost28147_89_CryptoPro_KeyMeshing         \"id-Gost28147-89-CryptoPro-KeyMeshing\"\n#define NID_id_Gost28147_89_CryptoPro_KeyMeshing                819\n#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing                OBJ_cryptopro,14L,1L\n\n#define SN_id_Gost28147_89_None_KeyMeshing              \"id-Gost28147-89-None-KeyMeshing\"\n#define NID_id_Gost28147_89_None_KeyMeshing             820\n#define OBJ_id_Gost28147_89_None_KeyMeshing             OBJ_cryptopro,14L,0L\n\n#define SN_id_GostR3411_94_TestParamSet         \"id-GostR3411-94-TestParamSet\"\n#define NID_id_GostR3411_94_TestParamSet                821\n#define OBJ_id_GostR3411_94_TestParamSet                OBJ_cryptopro,30L,0L\n\n#define SN_id_GostR3411_94_CryptoProParamSet            \"id-GostR3411-94-CryptoProParamSet\"\n#define NID_id_GostR3411_94_CryptoProParamSet           822\n#define OBJ_id_GostR3411_94_CryptoProParamSet           OBJ_cryptopro,30L,1L\n\n#define SN_id_Gost28147_89_TestParamSet         \"id-Gost28147-89-TestParamSet\"\n#define NID_id_Gost28147_89_TestParamSet                823\n#define OBJ_id_Gost28147_89_TestParamSet                OBJ_cryptopro,31L,0L\n\n#define SN_id_Gost28147_89_CryptoPro_A_ParamSet         \"id-Gost28147-89-CryptoPro-A-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_A_ParamSet                824\n#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet                OBJ_cryptopro,31L,1L\n\n#define SN_id_Gost28147_89_CryptoPro_B_ParamSet         \"id-Gost28147-89-CryptoPro-B-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_B_ParamSet                825\n#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet                OBJ_cryptopro,31L,2L\n\n#define SN_id_Gost28147_89_CryptoPro_C_ParamSet         \"id-Gost28147-89-CryptoPro-C-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_C_ParamSet                826\n#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet                OBJ_cryptopro,31L,3L\n\n#define SN_id_Gost28147_89_CryptoPro_D_ParamSet         \"id-Gost28147-89-CryptoPro-D-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_D_ParamSet                827\n#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet                OBJ_cryptopro,31L,4L\n\n#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet         \"id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet                828\n#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet                OBJ_cryptopro,31L,5L\n\n#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet         \"id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet                829\n#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet                OBJ_cryptopro,31L,6L\n\n#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet             \"id-Gost28147-89-CryptoPro-RIC-1-ParamSet\"\n#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet            830\n#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet            OBJ_cryptopro,31L,7L\n\n#define SN_id_GostR3410_94_TestParamSet         \"id-GostR3410-94-TestParamSet\"\n#define NID_id_GostR3410_94_TestParamSet                831\n#define OBJ_id_GostR3410_94_TestParamSet                OBJ_cryptopro,32L,0L\n\n#define SN_id_GostR3410_94_CryptoPro_A_ParamSet         \"id-GostR3410-94-CryptoPro-A-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_A_ParamSet                832\n#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet                OBJ_cryptopro,32L,2L\n\n#define SN_id_GostR3410_94_CryptoPro_B_ParamSet         \"id-GostR3410-94-CryptoPro-B-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_B_ParamSet                833\n#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet                OBJ_cryptopro,32L,3L\n\n#define SN_id_GostR3410_94_CryptoPro_C_ParamSet         \"id-GostR3410-94-CryptoPro-C-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_C_ParamSet                834\n#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet                OBJ_cryptopro,32L,4L\n\n#define SN_id_GostR3410_94_CryptoPro_D_ParamSet         \"id-GostR3410-94-CryptoPro-D-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_D_ParamSet                835\n#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet                OBJ_cryptopro,32L,5L\n\n#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet              \"id-GostR3410-94-CryptoPro-XchA-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet             836\n#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet             OBJ_cryptopro,33L,1L\n\n#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet              \"id-GostR3410-94-CryptoPro-XchB-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet             837\n#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet             OBJ_cryptopro,33L,2L\n\n#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet              \"id-GostR3410-94-CryptoPro-XchC-ParamSet\"\n#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet             838\n#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet             OBJ_cryptopro,33L,3L\n\n#define SN_id_GostR3410_2001_TestParamSet               \"id-GostR3410-2001-TestParamSet\"\n#define NID_id_GostR3410_2001_TestParamSet              839\n#define OBJ_id_GostR3410_2001_TestParamSet              OBJ_cryptopro,35L,0L\n\n#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet               \"id-GostR3410-2001-CryptoPro-A-ParamSet\"\n#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet              840\n#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet              OBJ_cryptopro,35L,1L\n\n#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet               \"id-GostR3410-2001-CryptoPro-B-ParamSet\"\n#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet              841\n#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet              OBJ_cryptopro,35L,2L\n\n#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet               \"id-GostR3410-2001-CryptoPro-C-ParamSet\"\n#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet              842\n#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet              OBJ_cryptopro,35L,3L\n\n#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet            \"id-GostR3410-2001-CryptoPro-XchA-ParamSet\"\n#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet           843\n#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet           OBJ_cryptopro,36L,0L\n\n#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet            \"id-GostR3410-2001-CryptoPro-XchB-ParamSet\"\n#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet           844\n#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet           OBJ_cryptopro,36L,1L\n\n#define SN_id_GostR3410_94_a            \"id-GostR3410-94-a\"\n#define NID_id_GostR3410_94_a           845\n#define OBJ_id_GostR3410_94_a           OBJ_id_GostR3410_94,1L\n\n#define SN_id_GostR3410_94_aBis         \"id-GostR3410-94-aBis\"\n#define NID_id_GostR3410_94_aBis                846\n#define OBJ_id_GostR3410_94_aBis                OBJ_id_GostR3410_94,2L\n\n#define SN_id_GostR3410_94_b            \"id-GostR3410-94-b\"\n#define NID_id_GostR3410_94_b           847\n#define OBJ_id_GostR3410_94_b           OBJ_id_GostR3410_94,3L\n\n#define SN_id_GostR3410_94_bBis         \"id-GostR3410-94-bBis\"\n#define NID_id_GostR3410_94_bBis                848\n#define OBJ_id_GostR3410_94_bBis                OBJ_id_GostR3410_94,4L\n\n#define SN_id_Gost28147_89_cc           \"id-Gost28147-89-cc\"\n#define LN_id_Gost28147_89_cc           \"GOST 28147-89 Cryptocom ParamSet\"\n#define NID_id_Gost28147_89_cc          849\n#define OBJ_id_Gost28147_89_cc          OBJ_cryptocom,1L,6L,1L\n\n#define SN_id_GostR3410_94_cc           \"gost94cc\"\n#define LN_id_GostR3410_94_cc           \"GOST 34.10-94 Cryptocom\"\n#define NID_id_GostR3410_94_cc          850\n#define OBJ_id_GostR3410_94_cc          OBJ_cryptocom,1L,5L,3L\n\n#define SN_id_GostR3410_2001_cc         \"gost2001cc\"\n#define LN_id_GostR3410_2001_cc         \"GOST 34.10-2001 Cryptocom\"\n#define NID_id_GostR3410_2001_cc                851\n#define OBJ_id_GostR3410_2001_cc                OBJ_cryptocom,1L,5L,4L\n\n#define SN_id_GostR3411_94_with_GostR3410_94_cc         \"id-GostR3411-94-with-GostR3410-94-cc\"\n#define LN_id_GostR3411_94_with_GostR3410_94_cc         \"GOST R 34.11-94 with GOST R 34.10-94 Cryptocom\"\n#define NID_id_GostR3411_94_with_GostR3410_94_cc                852\n#define OBJ_id_GostR3411_94_with_GostR3410_94_cc                OBJ_cryptocom,1L,3L,3L\n\n#define SN_id_GostR3411_94_with_GostR3410_2001_cc               \"id-GostR3411-94-with-GostR3410-2001-cc\"\n#define LN_id_GostR3411_94_with_GostR3410_2001_cc               \"GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom\"\n#define NID_id_GostR3411_94_with_GostR3410_2001_cc              853\n#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc              OBJ_cryptocom,1L,3L,4L\n\n#define SN_id_GostR3410_2001_ParamSet_cc                \"id-GostR3410-2001-ParamSet-cc\"\n#define LN_id_GostR3410_2001_ParamSet_cc                \"GOST R 3410-2001 Parameter Set Cryptocom\"\n#define NID_id_GostR3410_2001_ParamSet_cc               854\n#define OBJ_id_GostR3410_2001_ParamSet_cc               OBJ_cryptocom,1L,8L,1L\n\n#define SN_camellia_128_cbc             \"CAMELLIA-128-CBC\"\n#define LN_camellia_128_cbc             \"camellia-128-cbc\"\n#define NID_camellia_128_cbc            751\n#define OBJ_camellia_128_cbc            1L,2L,392L,200011L,61L,1L,1L,1L,2L\n\n#define SN_camellia_192_cbc             \"CAMELLIA-192-CBC\"\n#define LN_camellia_192_cbc             \"camellia-192-cbc\"\n#define NID_camellia_192_cbc            752\n#define OBJ_camellia_192_cbc            1L,2L,392L,200011L,61L,1L,1L,1L,3L\n\n#define SN_camellia_256_cbc             \"CAMELLIA-256-CBC\"\n#define LN_camellia_256_cbc             \"camellia-256-cbc\"\n#define NID_camellia_256_cbc            753\n#define OBJ_camellia_256_cbc            1L,2L,392L,200011L,61L,1L,1L,1L,4L\n\n#define SN_id_camellia128_wrap          \"id-camellia128-wrap\"\n#define NID_id_camellia128_wrap         907\n#define OBJ_id_camellia128_wrap         1L,2L,392L,200011L,61L,1L,1L,3L,2L\n\n#define SN_id_camellia192_wrap          \"id-camellia192-wrap\"\n#define NID_id_camellia192_wrap         908\n#define OBJ_id_camellia192_wrap         1L,2L,392L,200011L,61L,1L,1L,3L,3L\n\n#define SN_id_camellia256_wrap          \"id-camellia256-wrap\"\n#define NID_id_camellia256_wrap         909\n#define OBJ_id_camellia256_wrap         1L,2L,392L,200011L,61L,1L,1L,3L,4L\n\n#define OBJ_ntt_ds              0L,3L,4401L,5L\n\n#define OBJ_camellia            OBJ_ntt_ds,3L,1L,9L\n\n#define SN_camellia_128_ecb             \"CAMELLIA-128-ECB\"\n#define LN_camellia_128_ecb             \"camellia-128-ecb\"\n#define NID_camellia_128_ecb            754\n#define OBJ_camellia_128_ecb            OBJ_camellia,1L\n\n#define SN_camellia_128_ofb128          \"CAMELLIA-128-OFB\"\n#define LN_camellia_128_ofb128          \"camellia-128-ofb\"\n#define NID_camellia_128_ofb128         766\n#define OBJ_camellia_128_ofb128         OBJ_camellia,3L\n\n#define SN_camellia_128_cfb128          \"CAMELLIA-128-CFB\"\n#define LN_camellia_128_cfb128          \"camellia-128-cfb\"\n#define NID_camellia_128_cfb128         757\n#define OBJ_camellia_128_cfb128         OBJ_camellia,4L\n\n#define SN_camellia_192_ecb             \"CAMELLIA-192-ECB\"\n#define LN_camellia_192_ecb             \"camellia-192-ecb\"\n#define NID_camellia_192_ecb            755\n#define OBJ_camellia_192_ecb            OBJ_camellia,21L\n\n#define SN_camellia_192_ofb128          \"CAMELLIA-192-OFB\"\n#define LN_camellia_192_ofb128          \"camellia-192-ofb\"\n#define NID_camellia_192_ofb128         767\n#define OBJ_camellia_192_ofb128         OBJ_camellia,23L\n\n#define SN_camellia_192_cfb128          \"CAMELLIA-192-CFB\"\n#define LN_camellia_192_cfb128          \"camellia-192-cfb\"\n#define NID_camellia_192_cfb128         758\n#define OBJ_camellia_192_cfb128         OBJ_camellia,24L\n\n#define SN_camellia_256_ecb             \"CAMELLIA-256-ECB\"\n#define LN_camellia_256_ecb             \"camellia-256-ecb\"\n#define NID_camellia_256_ecb            756\n#define OBJ_camellia_256_ecb            OBJ_camellia,41L\n\n#define SN_camellia_256_ofb128          \"CAMELLIA-256-OFB\"\n#define LN_camellia_256_ofb128          \"camellia-256-ofb\"\n#define NID_camellia_256_ofb128         768\n#define OBJ_camellia_256_ofb128         OBJ_camellia,43L\n\n#define SN_camellia_256_cfb128          \"CAMELLIA-256-CFB\"\n#define LN_camellia_256_cfb128          \"camellia-256-cfb\"\n#define NID_camellia_256_cfb128         759\n#define OBJ_camellia_256_cfb128         OBJ_camellia,44L\n\n#define SN_camellia_128_cfb1            \"CAMELLIA-128-CFB1\"\n#define LN_camellia_128_cfb1            \"camellia-128-cfb1\"\n#define NID_camellia_128_cfb1           760\n\n#define SN_camellia_192_cfb1            \"CAMELLIA-192-CFB1\"\n#define LN_camellia_192_cfb1            \"camellia-192-cfb1\"\n#define NID_camellia_192_cfb1           761\n\n#define SN_camellia_256_cfb1            \"CAMELLIA-256-CFB1\"\n#define LN_camellia_256_cfb1            \"camellia-256-cfb1\"\n#define NID_camellia_256_cfb1           762\n\n#define SN_camellia_128_cfb8            \"CAMELLIA-128-CFB8\"\n#define LN_camellia_128_cfb8            \"camellia-128-cfb8\"\n#define NID_camellia_128_cfb8           763\n\n#define SN_camellia_192_cfb8            \"CAMELLIA-192-CFB8\"\n#define LN_camellia_192_cfb8            \"camellia-192-cfb8\"\n#define NID_camellia_192_cfb8           764\n\n#define SN_camellia_256_cfb8            \"CAMELLIA-256-CFB8\"\n#define LN_camellia_256_cfb8            \"camellia-256-cfb8\"\n#define NID_camellia_256_cfb8           765\n\n#define SN_kisa         \"KISA\"\n#define LN_kisa         \"kisa\"\n#define NID_kisa                773\n#define OBJ_kisa                OBJ_member_body,410L,200004L\n\n#define SN_seed_ecb             \"SEED-ECB\"\n#define LN_seed_ecb             \"seed-ecb\"\n#define NID_seed_ecb            776\n#define OBJ_seed_ecb            OBJ_kisa,1L,3L\n\n#define SN_seed_cbc             \"SEED-CBC\"\n#define LN_seed_cbc             \"seed-cbc\"\n#define NID_seed_cbc            777\n#define OBJ_seed_cbc            OBJ_kisa,1L,4L\n\n#define SN_seed_cfb128          \"SEED-CFB\"\n#define LN_seed_cfb128          \"seed-cfb\"\n#define NID_seed_cfb128         779\n#define OBJ_seed_cfb128         OBJ_kisa,1L,5L\n\n#define SN_seed_ofb128          \"SEED-OFB\"\n#define LN_seed_ofb128          \"seed-ofb\"\n#define NID_seed_ofb128         778\n#define OBJ_seed_ofb128         OBJ_kisa,1L,6L\n\n#define SN_hmac         \"HMAC\"\n#define LN_hmac         \"hmac\"\n#define NID_hmac                855\n\n#define SN_cmac         \"CMAC\"\n#define LN_cmac         \"cmac\"\n#define NID_cmac                894\n\n#define SN_rc4_hmac_md5         \"RC4-HMAC-MD5\"\n#define LN_rc4_hmac_md5         \"rc4-hmac-md5\"\n#define NID_rc4_hmac_md5                915\n\n#define SN_aes_128_cbc_hmac_sha1                \"AES-128-CBC-HMAC-SHA1\"\n#define LN_aes_128_cbc_hmac_sha1                \"aes-128-cbc-hmac-sha1\"\n#define NID_aes_128_cbc_hmac_sha1               916\n\n#define SN_aes_192_cbc_hmac_sha1                \"AES-192-CBC-HMAC-SHA1\"\n#define LN_aes_192_cbc_hmac_sha1                \"aes-192-cbc-hmac-sha1\"\n#define NID_aes_192_cbc_hmac_sha1               917\n\n#define SN_aes_256_cbc_hmac_sha1                \"AES-256-CBC-HMAC-SHA1\"\n#define LN_aes_256_cbc_hmac_sha1                \"aes-256-cbc-hmac-sha1\"\n#define NID_aes_256_cbc_hmac_sha1               918\n\n#define SN_aes_128_cbc_hmac_sha256              \"AES-128-CBC-HMAC-SHA256\"\n#define LN_aes_128_cbc_hmac_sha256              \"aes-128-cbc-hmac-sha256\"\n#define NID_aes_128_cbc_hmac_sha256             948\n\n#define SN_aes_192_cbc_hmac_sha256              \"AES-192-CBC-HMAC-SHA256\"\n#define LN_aes_192_cbc_hmac_sha256              \"aes-192-cbc-hmac-sha256\"\n#define NID_aes_192_cbc_hmac_sha256             949\n\n#define SN_aes_256_cbc_hmac_sha256              \"AES-256-CBC-HMAC-SHA256\"\n#define LN_aes_256_cbc_hmac_sha256              \"aes-256-cbc-hmac-sha256\"\n#define NID_aes_256_cbc_hmac_sha256             950\n\n#define SN_dhpublicnumber               \"dhpublicnumber\"\n#define LN_dhpublicnumber               \"X9.42 DH\"\n#define NID_dhpublicnumber              920\n#define OBJ_dhpublicnumber              OBJ_ISO_US,10046L,2L,1L\n\n#define SN_brainpoolP160r1              \"brainpoolP160r1\"\n#define NID_brainpoolP160r1             921\n#define OBJ_brainpoolP160r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,1L\n\n#define SN_brainpoolP160t1              \"brainpoolP160t1\"\n#define NID_brainpoolP160t1             922\n#define OBJ_brainpoolP160t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,2L\n\n#define SN_brainpoolP192r1              \"brainpoolP192r1\"\n#define NID_brainpoolP192r1             923\n#define OBJ_brainpoolP192r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,3L\n\n#define SN_brainpoolP192t1              \"brainpoolP192t1\"\n#define NID_brainpoolP192t1             924\n#define OBJ_brainpoolP192t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,4L\n\n#define SN_brainpoolP224r1              \"brainpoolP224r1\"\n#define NID_brainpoolP224r1             925\n#define OBJ_brainpoolP224r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,5L\n\n#define SN_brainpoolP224t1              \"brainpoolP224t1\"\n#define NID_brainpoolP224t1             926\n#define OBJ_brainpoolP224t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,6L\n\n#define SN_brainpoolP256r1              \"brainpoolP256r1\"\n#define NID_brainpoolP256r1             927\n#define OBJ_brainpoolP256r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,7L\n\n#define SN_brainpoolP256t1              \"brainpoolP256t1\"\n#define NID_brainpoolP256t1             928\n#define OBJ_brainpoolP256t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,8L\n\n#define SN_brainpoolP320r1              \"brainpoolP320r1\"\n#define NID_brainpoolP320r1             929\n#define OBJ_brainpoolP320r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,9L\n\n#define SN_brainpoolP320t1              \"brainpoolP320t1\"\n#define NID_brainpoolP320t1             930\n#define OBJ_brainpoolP320t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,10L\n\n#define SN_brainpoolP384r1              \"brainpoolP384r1\"\n#define NID_brainpoolP384r1             931\n#define OBJ_brainpoolP384r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,11L\n\n#define SN_brainpoolP384t1              \"brainpoolP384t1\"\n#define NID_brainpoolP384t1             932\n#define OBJ_brainpoolP384t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,12L\n\n#define SN_brainpoolP512r1              \"brainpoolP512r1\"\n#define NID_brainpoolP512r1             933\n#define OBJ_brainpoolP512r1             1L,3L,36L,3L,3L,2L,8L,1L,1L,13L\n\n#define SN_brainpoolP512t1              \"brainpoolP512t1\"\n#define NID_brainpoolP512t1             934\n#define OBJ_brainpoolP512t1             1L,3L,36L,3L,3L,2L,8L,1L,1L,14L\n\n#define OBJ_x9_63_scheme                1L,3L,133L,16L,840L,63L,0L\n\n#define OBJ_secg_scheme         OBJ_certicom_arc,1L\n\n#define SN_dhSinglePass_stdDH_sha1kdf_scheme            \"dhSinglePass-stdDH-sha1kdf-scheme\"\n#define NID_dhSinglePass_stdDH_sha1kdf_scheme           936\n#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme           OBJ_x9_63_scheme,2L\n\n#define SN_dhSinglePass_stdDH_sha224kdf_scheme          \"dhSinglePass-stdDH-sha224kdf-scheme\"\n#define NID_dhSinglePass_stdDH_sha224kdf_scheme         937\n#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme         OBJ_secg_scheme,11L,0L\n\n#define SN_dhSinglePass_stdDH_sha256kdf_scheme          \"dhSinglePass-stdDH-sha256kdf-scheme\"\n#define NID_dhSinglePass_stdDH_sha256kdf_scheme         938\n#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme         OBJ_secg_scheme,11L,1L\n\n#define SN_dhSinglePass_stdDH_sha384kdf_scheme          \"dhSinglePass-stdDH-sha384kdf-scheme\"\n#define NID_dhSinglePass_stdDH_sha384kdf_scheme         939\n#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme         OBJ_secg_scheme,11L,2L\n\n#define SN_dhSinglePass_stdDH_sha512kdf_scheme          \"dhSinglePass-stdDH-sha512kdf-scheme\"\n#define NID_dhSinglePass_stdDH_sha512kdf_scheme         940\n#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme         OBJ_secg_scheme,11L,3L\n\n#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme               \"dhSinglePass-cofactorDH-sha1kdf-scheme\"\n#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme              941\n#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme              OBJ_x9_63_scheme,3L\n\n#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme             \"dhSinglePass-cofactorDH-sha224kdf-scheme\"\n#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme            942\n#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme            OBJ_secg_scheme,14L,0L\n\n#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme             \"dhSinglePass-cofactorDH-sha256kdf-scheme\"\n#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme            943\n#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme            OBJ_secg_scheme,14L,1L\n\n#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme             \"dhSinglePass-cofactorDH-sha384kdf-scheme\"\n#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme            944\n#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme            OBJ_secg_scheme,14L,2L\n\n#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme             \"dhSinglePass-cofactorDH-sha512kdf-scheme\"\n#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme            945\n#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme            OBJ_secg_scheme,14L,3L\n\n#define SN_dh_std_kdf           \"dh-std-kdf\"\n#define NID_dh_std_kdf          946\n\n#define SN_dh_cofactor_kdf              \"dh-cofactor-kdf\"\n#define NID_dh_cofactor_kdf             947\n\n#define SN_ct_precert_scts              \"ct_precert_scts\"\n#define LN_ct_precert_scts              \"CT Precertificate SCTs\"\n#define NID_ct_precert_scts             951\n#define OBJ_ct_precert_scts             1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L\n\n#define SN_ct_precert_poison            \"ct_precert_poison\"\n#define LN_ct_precert_poison            \"CT Precertificate Poison\"\n#define NID_ct_precert_poison           952\n#define OBJ_ct_precert_poison           1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L\n\n#define SN_ct_precert_signer            \"ct_precert_signer\"\n#define LN_ct_precert_signer            \"CT Precertificate Signer\"\n#define NID_ct_precert_signer           953\n#define OBJ_ct_precert_signer           1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L\n\n#define SN_ct_cert_scts         \"ct_cert_scts\"\n#define LN_ct_cert_scts         \"CT Certificate SCTs\"\n#define NID_ct_cert_scts                954\n#define OBJ_ct_cert_scts                1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L\n\n#define SN_jurisdictionLocalityName             \"jurisdictionL\"\n#define LN_jurisdictionLocalityName             \"jurisdictionLocalityName\"\n#define NID_jurisdictionLocalityName            955\n#define OBJ_jurisdictionLocalityName            1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L\n\n#define SN_jurisdictionStateOrProvinceName              \"jurisdictionST\"\n#define LN_jurisdictionStateOrProvinceName              \"jurisdictionStateOrProvinceName\"\n#define NID_jurisdictionStateOrProvinceName             956\n#define OBJ_jurisdictionStateOrProvinceName             1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L\n\n#define SN_jurisdictionCountryName              \"jurisdictionC\"\n#define LN_jurisdictionCountryName              \"jurisdictionCountryName\"\n#define NID_jurisdictionCountryName             957\n#define OBJ_jurisdictionCountryName             1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/objects.h",
    "content": "/* crypto/objects/objects.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_OBJECTS_H\n# define HEADER_OBJECTS_H\n\n# define USE_OBJ_MAC\n\n# ifdef USE_OBJ_MAC\n#  include \"openssl/obj_mac.h\"\n# else\n#  define SN_undef                        \"UNDEF\"\n#  define LN_undef                        \"undefined\"\n#  define NID_undef                       0\n#  define OBJ_undef                       0L\n\n#  define SN_Algorithm                    \"Algorithm\"\n#  define LN_algorithm                    \"algorithm\"\n#  define NID_algorithm                   38\n#  define OBJ_algorithm                   1L,3L,14L,3L,2L\n\n#  define LN_rsadsi                       \"rsadsi\"\n#  define NID_rsadsi                      1\n#  define OBJ_rsadsi                      1L,2L,840L,113549L\n\n#  define LN_pkcs                         \"pkcs\"\n#  define NID_pkcs                        2\n#  define OBJ_pkcs                        OBJ_rsadsi,1L\n\n#  define SN_md2                          \"MD2\"\n#  define LN_md2                          \"md2\"\n#  define NID_md2                         3\n#  define OBJ_md2                         OBJ_rsadsi,2L,2L\n\n#  define SN_md5                          \"MD5\"\n#  define LN_md5                          \"md5\"\n#  define NID_md5                         4\n#  define OBJ_md5                         OBJ_rsadsi,2L,5L\n\n#  define SN_rc4                          \"RC4\"\n#  define LN_rc4                          \"rc4\"\n#  define NID_rc4                         5\n#  define OBJ_rc4                         OBJ_rsadsi,3L,4L\n\n#  define LN_rsaEncryption                \"rsaEncryption\"\n#  define NID_rsaEncryption               6\n#  define OBJ_rsaEncryption               OBJ_pkcs,1L,1L\n\n#  define SN_md2WithRSAEncryption         \"RSA-MD2\"\n#  define LN_md2WithRSAEncryption         \"md2WithRSAEncryption\"\n#  define NID_md2WithRSAEncryption        7\n#  define OBJ_md2WithRSAEncryption        OBJ_pkcs,1L,2L\n\n#  define SN_md5WithRSAEncryption         \"RSA-MD5\"\n#  define LN_md5WithRSAEncryption         \"md5WithRSAEncryption\"\n#  define NID_md5WithRSAEncryption        8\n#  define OBJ_md5WithRSAEncryption        OBJ_pkcs,1L,4L\n\n#  define SN_pbeWithMD2AndDES_CBC         \"PBE-MD2-DES\"\n#  define LN_pbeWithMD2AndDES_CBC         \"pbeWithMD2AndDES-CBC\"\n#  define NID_pbeWithMD2AndDES_CBC        9\n#  define OBJ_pbeWithMD2AndDES_CBC        OBJ_pkcs,5L,1L\n\n#  define SN_pbeWithMD5AndDES_CBC         \"PBE-MD5-DES\"\n#  define LN_pbeWithMD5AndDES_CBC         \"pbeWithMD5AndDES-CBC\"\n#  define NID_pbeWithMD5AndDES_CBC        10\n#  define OBJ_pbeWithMD5AndDES_CBC        OBJ_pkcs,5L,3L\n\n#  define LN_X500                         \"X500\"\n#  define NID_X500                        11\n#  define OBJ_X500                        2L,5L\n\n#  define LN_X509                         \"X509\"\n#  define NID_X509                        12\n#  define OBJ_X509                        OBJ_X500,4L\n\n#  define SN_commonName                   \"CN\"\n#  define LN_commonName                   \"commonName\"\n#  define NID_commonName                  13\n#  define OBJ_commonName                  OBJ_X509,3L\n\n#  define SN_countryName                  \"C\"\n#  define LN_countryName                  \"countryName\"\n#  define NID_countryName                 14\n#  define OBJ_countryName                 OBJ_X509,6L\n\n#  define SN_localityName                 \"L\"\n#  define LN_localityName                 \"localityName\"\n#  define NID_localityName                15\n#  define OBJ_localityName                OBJ_X509,7L\n\n/* Postal Address? PA */\n\n/* should be \"ST\" (rfc1327) but MS uses 'S' */\n#  define SN_stateOrProvinceName          \"ST\"\n#  define LN_stateOrProvinceName          \"stateOrProvinceName\"\n#  define NID_stateOrProvinceName         16\n#  define OBJ_stateOrProvinceName         OBJ_X509,8L\n\n#  define SN_organizationName             \"O\"\n#  define LN_organizationName             \"organizationName\"\n#  define NID_organizationName            17\n#  define OBJ_organizationName            OBJ_X509,10L\n\n#  define SN_organizationalUnitName       \"OU\"\n#  define LN_organizationalUnitName       \"organizationalUnitName\"\n#  define NID_organizationalUnitName      18\n#  define OBJ_organizationalUnitName      OBJ_X509,11L\n\n#  define SN_rsa                          \"RSA\"\n#  define LN_rsa                          \"rsa\"\n#  define NID_rsa                         19\n#  define OBJ_rsa                         OBJ_X500,8L,1L,1L\n\n#  define LN_pkcs7                        \"pkcs7\"\n#  define NID_pkcs7                       20\n#  define OBJ_pkcs7                       OBJ_pkcs,7L\n\n#  define LN_pkcs7_data                   \"pkcs7-data\"\n#  define NID_pkcs7_data                  21\n#  define OBJ_pkcs7_data                  OBJ_pkcs7,1L\n\n#  define LN_pkcs7_signed                 \"pkcs7-signedData\"\n#  define NID_pkcs7_signed                22\n#  define OBJ_pkcs7_signed                OBJ_pkcs7,2L\n\n#  define LN_pkcs7_enveloped              \"pkcs7-envelopedData\"\n#  define NID_pkcs7_enveloped             23\n#  define OBJ_pkcs7_enveloped             OBJ_pkcs7,3L\n\n#  define LN_pkcs7_signedAndEnveloped     \"pkcs7-signedAndEnvelopedData\"\n#  define NID_pkcs7_signedAndEnveloped    24\n#  define OBJ_pkcs7_signedAndEnveloped    OBJ_pkcs7,4L\n\n#  define LN_pkcs7_digest                 \"pkcs7-digestData\"\n#  define NID_pkcs7_digest                25\n#  define OBJ_pkcs7_digest                OBJ_pkcs7,5L\n\n#  define LN_pkcs7_encrypted              \"pkcs7-encryptedData\"\n#  define NID_pkcs7_encrypted             26\n#  define OBJ_pkcs7_encrypted             OBJ_pkcs7,6L\n\n#  define LN_pkcs3                        \"pkcs3\"\n#  define NID_pkcs3                       27\n#  define OBJ_pkcs3                       OBJ_pkcs,3L\n\n#  define LN_dhKeyAgreement               \"dhKeyAgreement\"\n#  define NID_dhKeyAgreement              28\n#  define OBJ_dhKeyAgreement              OBJ_pkcs3,1L\n\n#  define SN_des_ecb                      \"DES-ECB\"\n#  define LN_des_ecb                      \"des-ecb\"\n#  define NID_des_ecb                     29\n#  define OBJ_des_ecb                     OBJ_algorithm,6L\n\n#  define SN_des_cfb64                    \"DES-CFB\"\n#  define LN_des_cfb64                    \"des-cfb\"\n#  define NID_des_cfb64                   30\n/* IV + num */\n#  define OBJ_des_cfb64                   OBJ_algorithm,9L\n\n#  define SN_des_cbc                      \"DES-CBC\"\n#  define LN_des_cbc                      \"des-cbc\"\n#  define NID_des_cbc                     31\n/* IV */\n#  define OBJ_des_cbc                     OBJ_algorithm,7L\n\n#  define SN_des_ede                      \"DES-EDE\"\n#  define LN_des_ede                      \"des-ede\"\n#  define NID_des_ede                     32\n/* ?? */\n#  define OBJ_des_ede                     OBJ_algorithm,17L\n\n#  define SN_des_ede3                     \"DES-EDE3\"\n#  define LN_des_ede3                     \"des-ede3\"\n#  define NID_des_ede3                    33\n\n#  define SN_idea_cbc                     \"IDEA-CBC\"\n#  define LN_idea_cbc                     \"idea-cbc\"\n#  define NID_idea_cbc                    34\n#  define OBJ_idea_cbc                    1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L\n\n#  define SN_idea_cfb64                   \"IDEA-CFB\"\n#  define LN_idea_cfb64                   \"idea-cfb\"\n#  define NID_idea_cfb64                  35\n\n#  define SN_idea_ecb                     \"IDEA-ECB\"\n#  define LN_idea_ecb                     \"idea-ecb\"\n#  define NID_idea_ecb                    36\n\n#  define SN_rc2_cbc                      \"RC2-CBC\"\n#  define LN_rc2_cbc                      \"rc2-cbc\"\n#  define NID_rc2_cbc                     37\n#  define OBJ_rc2_cbc                     OBJ_rsadsi,3L,2L\n\n#  define SN_rc2_ecb                      \"RC2-ECB\"\n#  define LN_rc2_ecb                      \"rc2-ecb\"\n#  define NID_rc2_ecb                     38\n\n#  define SN_rc2_cfb64                    \"RC2-CFB\"\n#  define LN_rc2_cfb64                    \"rc2-cfb\"\n#  define NID_rc2_cfb64                   39\n\n#  define SN_rc2_ofb64                    \"RC2-OFB\"\n#  define LN_rc2_ofb64                    \"rc2-ofb\"\n#  define NID_rc2_ofb64                   40\n\n#  define SN_sha                          \"SHA\"\n#  define LN_sha                          \"sha\"\n#  define NID_sha                         41\n#  define OBJ_sha                         OBJ_algorithm,18L\n\n#  define SN_shaWithRSAEncryption         \"RSA-SHA\"\n#  define LN_shaWithRSAEncryption         \"shaWithRSAEncryption\"\n#  define NID_shaWithRSAEncryption        42\n#  define OBJ_shaWithRSAEncryption        OBJ_algorithm,15L\n\n#  define SN_des_ede_cbc                  \"DES-EDE-CBC\"\n#  define LN_des_ede_cbc                  \"des-ede-cbc\"\n#  define NID_des_ede_cbc                 43\n\n#  define SN_des_ede3_cbc                 \"DES-EDE3-CBC\"\n#  define LN_des_ede3_cbc                 \"des-ede3-cbc\"\n#  define NID_des_ede3_cbc                44\n#  define OBJ_des_ede3_cbc                OBJ_rsadsi,3L,7L\n\n#  define SN_des_ofb64                    \"DES-OFB\"\n#  define LN_des_ofb64                    \"des-ofb\"\n#  define NID_des_ofb64                   45\n#  define OBJ_des_ofb64                   OBJ_algorithm,8L\n\n#  define SN_idea_ofb64                   \"IDEA-OFB\"\n#  define LN_idea_ofb64                   \"idea-ofb\"\n#  define NID_idea_ofb64                  46\n\n#  define LN_pkcs9                        \"pkcs9\"\n#  define NID_pkcs9                       47\n#  define OBJ_pkcs9                       OBJ_pkcs,9L\n\n#  define SN_pkcs9_emailAddress           \"Email\"\n#  define LN_pkcs9_emailAddress           \"emailAddress\"\n#  define NID_pkcs9_emailAddress          48\n#  define OBJ_pkcs9_emailAddress          OBJ_pkcs9,1L\n\n#  define LN_pkcs9_unstructuredName       \"unstructuredName\"\n#  define NID_pkcs9_unstructuredName      49\n#  define OBJ_pkcs9_unstructuredName      OBJ_pkcs9,2L\n\n#  define LN_pkcs9_contentType            \"contentType\"\n#  define NID_pkcs9_contentType           50\n#  define OBJ_pkcs9_contentType           OBJ_pkcs9,3L\n\n#  define LN_pkcs9_messageDigest          \"messageDigest\"\n#  define NID_pkcs9_messageDigest         51\n#  define OBJ_pkcs9_messageDigest         OBJ_pkcs9,4L\n\n#  define LN_pkcs9_signingTime            \"signingTime\"\n#  define NID_pkcs9_signingTime           52\n#  define OBJ_pkcs9_signingTime           OBJ_pkcs9,5L\n\n#  define LN_pkcs9_countersignature       \"countersignature\"\n#  define NID_pkcs9_countersignature      53\n#  define OBJ_pkcs9_countersignature      OBJ_pkcs9,6L\n\n#  define LN_pkcs9_challengePassword      \"challengePassword\"\n#  define NID_pkcs9_challengePassword     54\n#  define OBJ_pkcs9_challengePassword     OBJ_pkcs9,7L\n\n#  define LN_pkcs9_unstructuredAddress    \"unstructuredAddress\"\n#  define NID_pkcs9_unstructuredAddress   55\n#  define OBJ_pkcs9_unstructuredAddress   OBJ_pkcs9,8L\n\n#  define LN_pkcs9_extCertAttributes      \"extendedCertificateAttributes\"\n#  define NID_pkcs9_extCertAttributes     56\n#  define OBJ_pkcs9_extCertAttributes     OBJ_pkcs9,9L\n\n#  define SN_netscape                     \"Netscape\"\n#  define LN_netscape                     \"Netscape Communications Corp.\"\n#  define NID_netscape                    57\n#  define OBJ_netscape                    2L,16L,840L,1L,113730L\n\n#  define SN_netscape_cert_extension      \"nsCertExt\"\n#  define LN_netscape_cert_extension      \"Netscape Certificate Extension\"\n#  define NID_netscape_cert_extension     58\n#  define OBJ_netscape_cert_extension     OBJ_netscape,1L\n\n#  define SN_netscape_data_type           \"nsDataType\"\n#  define LN_netscape_data_type           \"Netscape Data Type\"\n#  define NID_netscape_data_type          59\n#  define OBJ_netscape_data_type          OBJ_netscape,2L\n\n#  define SN_des_ede_cfb64                \"DES-EDE-CFB\"\n#  define LN_des_ede_cfb64                \"des-ede-cfb\"\n#  define NID_des_ede_cfb64               60\n\n#  define SN_des_ede3_cfb64               \"DES-EDE3-CFB\"\n#  define LN_des_ede3_cfb64               \"des-ede3-cfb\"\n#  define NID_des_ede3_cfb64              61\n\n#  define SN_des_ede_ofb64                \"DES-EDE-OFB\"\n#  define LN_des_ede_ofb64                \"des-ede-ofb\"\n#  define NID_des_ede_ofb64               62\n\n#  define SN_des_ede3_ofb64               \"DES-EDE3-OFB\"\n#  define LN_des_ede3_ofb64               \"des-ede3-ofb\"\n#  define NID_des_ede3_ofb64              63\n\n/* I'm not sure about the object ID */\n#  define SN_sha1                         \"SHA1\"\n#  define LN_sha1                         \"sha1\"\n#  define NID_sha1                        64\n#  define OBJ_sha1                        OBJ_algorithm,26L\n/* 28 Jun 1996 - eay */\n/* #define OBJ_sha1                     1L,3L,14L,2L,26L,05L <- wrong */\n\n#  define SN_sha1WithRSAEncryption        \"RSA-SHA1\"\n#  define LN_sha1WithRSAEncryption        \"sha1WithRSAEncryption\"\n#  define NID_sha1WithRSAEncryption       65\n#  define OBJ_sha1WithRSAEncryption       OBJ_pkcs,1L,5L\n\n#  define SN_dsaWithSHA                   \"DSA-SHA\"\n#  define LN_dsaWithSHA                   \"dsaWithSHA\"\n#  define NID_dsaWithSHA                  66\n#  define OBJ_dsaWithSHA                  OBJ_algorithm,13L\n\n#  define SN_dsa_2                        \"DSA-old\"\n#  define LN_dsa_2                        \"dsaEncryption-old\"\n#  define NID_dsa_2                       67\n#  define OBJ_dsa_2                       OBJ_algorithm,12L\n\n/* proposed by microsoft to RSA */\n#  define SN_pbeWithSHA1AndRC2_CBC        \"PBE-SHA1-RC2-64\"\n#  define LN_pbeWithSHA1AndRC2_CBC        \"pbeWithSHA1AndRC2-CBC\"\n#  define NID_pbeWithSHA1AndRC2_CBC       68\n#  define OBJ_pbeWithSHA1AndRC2_CBC       OBJ_pkcs,5L,11L\n\n/*\n * proposed by microsoft to RSA as pbeWithSHA1AndRC4: it is now defined\n * explicitly in PKCS#5 v2.0 as id-PBKDF2 which is something completely\n * different.\n */\n#  define LN_id_pbkdf2                    \"PBKDF2\"\n#  define NID_id_pbkdf2                   69\n#  define OBJ_id_pbkdf2                   OBJ_pkcs,5L,12L\n\n#  define SN_dsaWithSHA1_2                \"DSA-SHA1-old\"\n#  define LN_dsaWithSHA1_2                \"dsaWithSHA1-old\"\n#  define NID_dsaWithSHA1_2               70\n/* Got this one from 'sdn706r20.pdf' which is actually an NSA document :-) */\n#  define OBJ_dsaWithSHA1_2               OBJ_algorithm,27L\n\n#  define SN_netscape_cert_type           \"nsCertType\"\n#  define LN_netscape_cert_type           \"Netscape Cert Type\"\n#  define NID_netscape_cert_type          71\n#  define OBJ_netscape_cert_type          OBJ_netscape_cert_extension,1L\n\n#  define SN_netscape_base_url            \"nsBaseUrl\"\n#  define LN_netscape_base_url            \"Netscape Base Url\"\n#  define NID_netscape_base_url           72\n#  define OBJ_netscape_base_url           OBJ_netscape_cert_extension,2L\n\n#  define SN_netscape_revocation_url      \"nsRevocationUrl\"\n#  define LN_netscape_revocation_url      \"Netscape Revocation Url\"\n#  define NID_netscape_revocation_url     73\n#  define OBJ_netscape_revocation_url     OBJ_netscape_cert_extension,3L\n\n#  define SN_netscape_ca_revocation_url   \"nsCaRevocationUrl\"\n#  define LN_netscape_ca_revocation_url   \"Netscape CA Revocation Url\"\n#  define NID_netscape_ca_revocation_url  74\n#  define OBJ_netscape_ca_revocation_url  OBJ_netscape_cert_extension,4L\n\n#  define SN_netscape_renewal_url         \"nsRenewalUrl\"\n#  define LN_netscape_renewal_url         \"Netscape Renewal Url\"\n#  define NID_netscape_renewal_url        75\n#  define OBJ_netscape_renewal_url        OBJ_netscape_cert_extension,7L\n\n#  define SN_netscape_ca_policy_url       \"nsCaPolicyUrl\"\n#  define LN_netscape_ca_policy_url       \"Netscape CA Policy Url\"\n#  define NID_netscape_ca_policy_url      76\n#  define OBJ_netscape_ca_policy_url      OBJ_netscape_cert_extension,8L\n\n#  define SN_netscape_ssl_server_name     \"nsSslServerName\"\n#  define LN_netscape_ssl_server_name     \"Netscape SSL Server Name\"\n#  define NID_netscape_ssl_server_name    77\n#  define OBJ_netscape_ssl_server_name    OBJ_netscape_cert_extension,12L\n\n#  define SN_netscape_comment             \"nsComment\"\n#  define LN_netscape_comment             \"Netscape Comment\"\n#  define NID_netscape_comment            78\n#  define OBJ_netscape_comment            OBJ_netscape_cert_extension,13L\n\n#  define SN_netscape_cert_sequence       \"nsCertSequence\"\n#  define LN_netscape_cert_sequence       \"Netscape Certificate Sequence\"\n#  define NID_netscape_cert_sequence      79\n#  define OBJ_netscape_cert_sequence      OBJ_netscape_data_type,5L\n\n#  define SN_desx_cbc                     \"DESX-CBC\"\n#  define LN_desx_cbc                     \"desx-cbc\"\n#  define NID_desx_cbc                    80\n\n#  define SN_id_ce                        \"id-ce\"\n#  define NID_id_ce                       81\n#  define OBJ_id_ce                       2L,5L,29L\n\n#  define SN_subject_key_identifier       \"subjectKeyIdentifier\"\n#  define LN_subject_key_identifier       \"X509v3 Subject Key Identifier\"\n#  define NID_subject_key_identifier      82\n#  define OBJ_subject_key_identifier      OBJ_id_ce,14L\n\n#  define SN_key_usage                    \"keyUsage\"\n#  define LN_key_usage                    \"X509v3 Key Usage\"\n#  define NID_key_usage                   83\n#  define OBJ_key_usage                   OBJ_id_ce,15L\n\n#  define SN_private_key_usage_period     \"privateKeyUsagePeriod\"\n#  define LN_private_key_usage_period     \"X509v3 Private Key Usage Period\"\n#  define NID_private_key_usage_period    84\n#  define OBJ_private_key_usage_period    OBJ_id_ce,16L\n\n#  define SN_subject_alt_name             \"subjectAltName\"\n#  define LN_subject_alt_name             \"X509v3 Subject Alternative Name\"\n#  define NID_subject_alt_name            85\n#  define OBJ_subject_alt_name            OBJ_id_ce,17L\n\n#  define SN_issuer_alt_name              \"issuerAltName\"\n#  define LN_issuer_alt_name              \"X509v3 Issuer Alternative Name\"\n#  define NID_issuer_alt_name             86\n#  define OBJ_issuer_alt_name             OBJ_id_ce,18L\n\n#  define SN_basic_constraints            \"basicConstraints\"\n#  define LN_basic_constraints            \"X509v3 Basic Constraints\"\n#  define NID_basic_constraints           87\n#  define OBJ_basic_constraints           OBJ_id_ce,19L\n\n#  define SN_crl_number                   \"crlNumber\"\n#  define LN_crl_number                   \"X509v3 CRL Number\"\n#  define NID_crl_number                  88\n#  define OBJ_crl_number                  OBJ_id_ce,20L\n\n#  define SN_certificate_policies         \"certificatePolicies\"\n#  define LN_certificate_policies         \"X509v3 Certificate Policies\"\n#  define NID_certificate_policies        89\n#  define OBJ_certificate_policies        OBJ_id_ce,32L\n\n#  define SN_authority_key_identifier     \"authorityKeyIdentifier\"\n#  define LN_authority_key_identifier     \"X509v3 Authority Key Identifier\"\n#  define NID_authority_key_identifier    90\n#  define OBJ_authority_key_identifier    OBJ_id_ce,35L\n\n#  define SN_bf_cbc                       \"BF-CBC\"\n#  define LN_bf_cbc                       \"bf-cbc\"\n#  define NID_bf_cbc                      91\n#  define OBJ_bf_cbc                      1L,3L,6L,1L,4L,1L,3029L,1L,2L\n\n#  define SN_bf_ecb                       \"BF-ECB\"\n#  define LN_bf_ecb                       \"bf-ecb\"\n#  define NID_bf_ecb                      92\n\n#  define SN_bf_cfb64                     \"BF-CFB\"\n#  define LN_bf_cfb64                     \"bf-cfb\"\n#  define NID_bf_cfb64                    93\n\n#  define SN_bf_ofb64                     \"BF-OFB\"\n#  define LN_bf_ofb64                     \"bf-ofb\"\n#  define NID_bf_ofb64                    94\n\n#  define SN_mdc2                         \"MDC2\"\n#  define LN_mdc2                         \"mdc2\"\n#  define NID_mdc2                        95\n#  define OBJ_mdc2                        2L,5L,8L,3L,101L\n/* An alternative?                      1L,3L,14L,3L,2L,19L */\n\n#  define SN_mdc2WithRSA                  \"RSA-MDC2\"\n#  define LN_mdc2WithRSA                  \"mdc2withRSA\"\n#  define NID_mdc2WithRSA                 96\n#  define OBJ_mdc2WithRSA                 2L,5L,8L,3L,100L\n\n#  define SN_rc4_40                       \"RC4-40\"\n#  define LN_rc4_40                       \"rc4-40\"\n#  define NID_rc4_40                      97\n\n#  define SN_rc2_40_cbc                   \"RC2-40-CBC\"\n#  define LN_rc2_40_cbc                   \"rc2-40-cbc\"\n#  define NID_rc2_40_cbc                  98\n\n#  define SN_givenName                    \"G\"\n#  define LN_givenName                    \"givenName\"\n#  define NID_givenName                   99\n#  define OBJ_givenName                   OBJ_X509,42L\n\n#  define SN_surname                      \"S\"\n#  define LN_surname                      \"surname\"\n#  define NID_surname                     100\n#  define OBJ_surname                     OBJ_X509,4L\n\n#  define SN_initials                     \"I\"\n#  define LN_initials                     \"initials\"\n#  define NID_initials                    101\n#  define OBJ_initials                    OBJ_X509,43L\n\n#  define SN_uniqueIdentifier             \"UID\"\n#  define LN_uniqueIdentifier             \"uniqueIdentifier\"\n#  define NID_uniqueIdentifier            102\n#  define OBJ_uniqueIdentifier            OBJ_X509,45L\n\n#  define SN_crl_distribution_points      \"crlDistributionPoints\"\n#  define LN_crl_distribution_points      \"X509v3 CRL Distribution Points\"\n#  define NID_crl_distribution_points     103\n#  define OBJ_crl_distribution_points     OBJ_id_ce,31L\n\n#  define SN_md5WithRSA                   \"RSA-NP-MD5\"\n#  define LN_md5WithRSA                   \"md5WithRSA\"\n#  define NID_md5WithRSA                  104\n#  define OBJ_md5WithRSA                  OBJ_algorithm,3L\n\n#  define SN_serialNumber                 \"SN\"\n#  define LN_serialNumber                 \"serialNumber\"\n#  define NID_serialNumber                105\n#  define OBJ_serialNumber                OBJ_X509,5L\n\n#  define SN_title                        \"T\"\n#  define LN_title                        \"title\"\n#  define NID_title                       106\n#  define OBJ_title                       OBJ_X509,12L\n\n#  define SN_description                  \"D\"\n#  define LN_description                  \"description\"\n#  define NID_description                 107\n#  define OBJ_description                 OBJ_X509,13L\n\n/* CAST5 is CAST-128, I'm just sticking with the documentation */\n#  define SN_cast5_cbc                    \"CAST5-CBC\"\n#  define LN_cast5_cbc                    \"cast5-cbc\"\n#  define NID_cast5_cbc                   108\n#  define OBJ_cast5_cbc                   1L,2L,840L,113533L,7L,66L,10L\n\n#  define SN_cast5_ecb                    \"CAST5-ECB\"\n#  define LN_cast5_ecb                    \"cast5-ecb\"\n#  define NID_cast5_ecb                   109\n\n#  define SN_cast5_cfb64                  \"CAST5-CFB\"\n#  define LN_cast5_cfb64                  \"cast5-cfb\"\n#  define NID_cast5_cfb64                 110\n\n#  define SN_cast5_ofb64                  \"CAST5-OFB\"\n#  define LN_cast5_ofb64                  \"cast5-ofb\"\n#  define NID_cast5_ofb64                 111\n\n#  define LN_pbeWithMD5AndCast5_CBC       \"pbeWithMD5AndCast5CBC\"\n#  define NID_pbeWithMD5AndCast5_CBC      112\n#  define OBJ_pbeWithMD5AndCast5_CBC      1L,2L,840L,113533L,7L,66L,12L\n\n/*-\n * This is one sun will soon be using :-(\n * id-dsa-with-sha1 ID  ::= {\n *   iso(1) member-body(2) us(840) x9-57 (10040) x9cm(4) 3 }\n */\n#  define SN_dsaWithSHA1                  \"DSA-SHA1\"\n#  define LN_dsaWithSHA1                  \"dsaWithSHA1\"\n#  define NID_dsaWithSHA1                 113\n#  define OBJ_dsaWithSHA1                 1L,2L,840L,10040L,4L,3L\n\n#  define NID_md5_sha1                    114\n#  define SN_md5_sha1                     \"MD5-SHA1\"\n#  define LN_md5_sha1                     \"md5-sha1\"\n\n#  define SN_sha1WithRSA                  \"RSA-SHA1-2\"\n#  define LN_sha1WithRSA                  \"sha1WithRSA\"\n#  define NID_sha1WithRSA                 115\n#  define OBJ_sha1WithRSA                 OBJ_algorithm,29L\n\n#  define SN_dsa                          \"DSA\"\n#  define LN_dsa                          \"dsaEncryption\"\n#  define NID_dsa                         116\n#  define OBJ_dsa                         1L,2L,840L,10040L,4L,1L\n\n#  define SN_ripemd160                    \"RIPEMD160\"\n#  define LN_ripemd160                    \"ripemd160\"\n#  define NID_ripemd160                   117\n#  define OBJ_ripemd160                   1L,3L,36L,3L,2L,1L\n\n/*\n * The name should actually be rsaSignatureWithripemd160, but I'm going to\n * continue using the convention I'm using with the other ciphers\n */\n#  define SN_ripemd160WithRSA             \"RSA-RIPEMD160\"\n#  define LN_ripemd160WithRSA             \"ripemd160WithRSA\"\n#  define NID_ripemd160WithRSA            119\n#  define OBJ_ripemd160WithRSA            1L,3L,36L,3L,3L,1L,2L\n\n/*-\n * Taken from rfc2040\n *  RC5_CBC_Parameters ::= SEQUENCE {\n *      version           INTEGER (v1_0(16)),\n *      rounds            INTEGER (8..127),\n *      blockSizeInBits   INTEGER (64, 128),\n *      iv                OCTET STRING OPTIONAL\n *      }\n */\n#  define SN_rc5_cbc                      \"RC5-CBC\"\n#  define LN_rc5_cbc                      \"rc5-cbc\"\n#  define NID_rc5_cbc                     120\n#  define OBJ_rc5_cbc                     OBJ_rsadsi,3L,8L\n\n#  define SN_rc5_ecb                      \"RC5-ECB\"\n#  define LN_rc5_ecb                      \"rc5-ecb\"\n#  define NID_rc5_ecb                     121\n\n#  define SN_rc5_cfb64                    \"RC5-CFB\"\n#  define LN_rc5_cfb64                    \"rc5-cfb\"\n#  define NID_rc5_cfb64                   122\n\n#  define SN_rc5_ofb64                    \"RC5-OFB\"\n#  define LN_rc5_ofb64                    \"rc5-ofb\"\n#  define NID_rc5_ofb64                   123\n\n#  define SN_rle_compression              \"RLE\"\n#  define LN_rle_compression              \"run length compression\"\n#  define NID_rle_compression             124\n#  define OBJ_rle_compression             1L,1L,1L,1L,666L,1L\n\n#  define SN_zlib_compression             \"ZLIB\"\n#  define LN_zlib_compression             \"zlib compression\"\n#  define NID_zlib_compression            125\n#  define OBJ_zlib_compression            1L,1L,1L,1L,666L,2L\n\n#  define SN_ext_key_usage                \"extendedKeyUsage\"\n#  define LN_ext_key_usage                \"X509v3 Extended Key Usage\"\n#  define NID_ext_key_usage               126\n#  define OBJ_ext_key_usage               OBJ_id_ce,37\n\n#  define SN_id_pkix                      \"PKIX\"\n#  define NID_id_pkix                     127\n#  define OBJ_id_pkix                     1L,3L,6L,1L,5L,5L,7L\n\n#  define SN_id_kp                        \"id-kp\"\n#  define NID_id_kp                       128\n#  define OBJ_id_kp                       OBJ_id_pkix,3L\n\n/* PKIX extended key usage OIDs */\n\n#  define SN_server_auth                  \"serverAuth\"\n#  define LN_server_auth                  \"TLS Web Server Authentication\"\n#  define NID_server_auth                 129\n#  define OBJ_server_auth                 OBJ_id_kp,1L\n\n#  define SN_client_auth                  \"clientAuth\"\n#  define LN_client_auth                  \"TLS Web Client Authentication\"\n#  define NID_client_auth                 130\n#  define OBJ_client_auth                 OBJ_id_kp,2L\n\n#  define SN_code_sign                    \"codeSigning\"\n#  define LN_code_sign                    \"Code Signing\"\n#  define NID_code_sign                   131\n#  define OBJ_code_sign                   OBJ_id_kp,3L\n\n#  define SN_email_protect                \"emailProtection\"\n#  define LN_email_protect                \"E-mail Protection\"\n#  define NID_email_protect               132\n#  define OBJ_email_protect               OBJ_id_kp,4L\n\n#  define SN_time_stamp                   \"timeStamping\"\n#  define LN_time_stamp                   \"Time Stamping\"\n#  define NID_time_stamp                  133\n#  define OBJ_time_stamp                  OBJ_id_kp,8L\n\n/* Additional extended key usage OIDs: Microsoft */\n\n#  define SN_ms_code_ind                  \"msCodeInd\"\n#  define LN_ms_code_ind                  \"Microsoft Individual Code Signing\"\n#  define NID_ms_code_ind                 134\n#  define OBJ_ms_code_ind                 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L\n\n#  define SN_ms_code_com                  \"msCodeCom\"\n#  define LN_ms_code_com                  \"Microsoft Commercial Code Signing\"\n#  define NID_ms_code_com                 135\n#  define OBJ_ms_code_com                 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L\n\n#  define SN_ms_ctl_sign                  \"msCTLSign\"\n#  define LN_ms_ctl_sign                  \"Microsoft Trust List Signing\"\n#  define NID_ms_ctl_sign                 136\n#  define OBJ_ms_ctl_sign                 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L\n\n#  define SN_ms_sgc                       \"msSGC\"\n#  define LN_ms_sgc                       \"Microsoft Server Gated Crypto\"\n#  define NID_ms_sgc                      137\n#  define OBJ_ms_sgc                      1L,3L,6L,1L,4L,1L,311L,10L,3L,3L\n\n#  define SN_ms_efs                       \"msEFS\"\n#  define LN_ms_efs                       \"Microsoft Encrypted File System\"\n#  define NID_ms_efs                      138\n#  define OBJ_ms_efs                      1L,3L,6L,1L,4L,1L,311L,10L,3L,4L\n\n/* Additional usage: Netscape */\n\n#  define SN_ns_sgc                       \"nsSGC\"\n#  define LN_ns_sgc                       \"Netscape Server Gated Crypto\"\n#  define NID_ns_sgc                      139\n#  define OBJ_ns_sgc                      OBJ_netscape,4L,1L\n\n#  define SN_delta_crl                    \"deltaCRL\"\n#  define LN_delta_crl                    \"X509v3 Delta CRL Indicator\"\n#  define NID_delta_crl                   140\n#  define OBJ_delta_crl                   OBJ_id_ce,27L\n\n#  define SN_crl_reason                   \"CRLReason\"\n#  define LN_crl_reason                   \"CRL Reason Code\"\n#  define NID_crl_reason                  141\n#  define OBJ_crl_reason                  OBJ_id_ce,21L\n\n#  define SN_invalidity_date              \"invalidityDate\"\n#  define LN_invalidity_date              \"Invalidity Date\"\n#  define NID_invalidity_date             142\n#  define OBJ_invalidity_date             OBJ_id_ce,24L\n\n#  define SN_sxnet                        \"SXNetID\"\n#  define LN_sxnet                        \"Strong Extranet ID\"\n#  define NID_sxnet                       143\n#  define OBJ_sxnet                       1L,3L,101L,1L,4L,1L\n\n/* PKCS12 and related OBJECT IDENTIFIERS */\n\n#  define OBJ_pkcs12                      OBJ_pkcs,12L\n#  define OBJ_pkcs12_pbeids               OBJ_pkcs12, 1\n\n#  define SN_pbe_WithSHA1And128BitRC4     \"PBE-SHA1-RC4-128\"\n#  define LN_pbe_WithSHA1And128BitRC4     \"pbeWithSHA1And128BitRC4\"\n#  define NID_pbe_WithSHA1And128BitRC4    144\n#  define OBJ_pbe_WithSHA1And128BitRC4    OBJ_pkcs12_pbeids, 1L\n\n#  define SN_pbe_WithSHA1And40BitRC4      \"PBE-SHA1-RC4-40\"\n#  define LN_pbe_WithSHA1And40BitRC4      \"pbeWithSHA1And40BitRC4\"\n#  define NID_pbe_WithSHA1And40BitRC4     145\n#  define OBJ_pbe_WithSHA1And40BitRC4     OBJ_pkcs12_pbeids, 2L\n\n#  define SN_pbe_WithSHA1And3_Key_TripleDES_CBC   \"PBE-SHA1-3DES\"\n#  define LN_pbe_WithSHA1And3_Key_TripleDES_CBC   \"pbeWithSHA1And3-KeyTripleDES-CBC\"\n#  define NID_pbe_WithSHA1And3_Key_TripleDES_CBC  146\n#  define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC  OBJ_pkcs12_pbeids, 3L\n\n#  define SN_pbe_WithSHA1And2_Key_TripleDES_CBC   \"PBE-SHA1-2DES\"\n#  define LN_pbe_WithSHA1And2_Key_TripleDES_CBC   \"pbeWithSHA1And2-KeyTripleDES-CBC\"\n#  define NID_pbe_WithSHA1And2_Key_TripleDES_CBC  147\n#  define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC  OBJ_pkcs12_pbeids, 4L\n\n#  define SN_pbe_WithSHA1And128BitRC2_CBC         \"PBE-SHA1-RC2-128\"\n#  define LN_pbe_WithSHA1And128BitRC2_CBC         \"pbeWithSHA1And128BitRC2-CBC\"\n#  define NID_pbe_WithSHA1And128BitRC2_CBC        148\n#  define OBJ_pbe_WithSHA1And128BitRC2_CBC        OBJ_pkcs12_pbeids, 5L\n\n#  define SN_pbe_WithSHA1And40BitRC2_CBC  \"PBE-SHA1-RC2-40\"\n#  define LN_pbe_WithSHA1And40BitRC2_CBC  \"pbeWithSHA1And40BitRC2-CBC\"\n#  define NID_pbe_WithSHA1And40BitRC2_CBC 149\n#  define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L\n\n#  define OBJ_pkcs12_Version1     OBJ_pkcs12, 10L\n\n#  define OBJ_pkcs12_BagIds       OBJ_pkcs12_Version1, 1L\n\n#  define LN_keyBag               \"keyBag\"\n#  define NID_keyBag              150\n#  define OBJ_keyBag              OBJ_pkcs12_BagIds, 1L\n\n#  define LN_pkcs8ShroudedKeyBag  \"pkcs8ShroudedKeyBag\"\n#  define NID_pkcs8ShroudedKeyBag 151\n#  define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds, 2L\n\n#  define LN_certBag              \"certBag\"\n#  define NID_certBag             152\n#  define OBJ_certBag             OBJ_pkcs12_BagIds, 3L\n\n#  define LN_crlBag               \"crlBag\"\n#  define NID_crlBag              153\n#  define OBJ_crlBag              OBJ_pkcs12_BagIds, 4L\n\n#  define LN_secretBag            \"secretBag\"\n#  define NID_secretBag           154\n#  define OBJ_secretBag           OBJ_pkcs12_BagIds, 5L\n\n#  define LN_safeContentsBag      \"safeContentsBag\"\n#  define NID_safeContentsBag     155\n#  define OBJ_safeContentsBag     OBJ_pkcs12_BagIds, 6L\n\n#  define LN_friendlyName         \"friendlyName\"\n#  define NID_friendlyName        156\n#  define OBJ_friendlyName        OBJ_pkcs9, 20L\n\n#  define LN_localKeyID           \"localKeyID\"\n#  define NID_localKeyID          157\n#  define OBJ_localKeyID          OBJ_pkcs9, 21L\n\n#  define OBJ_certTypes           OBJ_pkcs9, 22L\n\n#  define LN_x509Certificate      \"x509Certificate\"\n#  define NID_x509Certificate     158\n#  define OBJ_x509Certificate     OBJ_certTypes, 1L\n\n#  define LN_sdsiCertificate      \"sdsiCertificate\"\n#  define NID_sdsiCertificate     159\n#  define OBJ_sdsiCertificate     OBJ_certTypes, 2L\n\n#  define OBJ_crlTypes            OBJ_pkcs9, 23L\n\n#  define LN_x509Crl              \"x509Crl\"\n#  define NID_x509Crl             160\n#  define OBJ_x509Crl             OBJ_crlTypes, 1L\n\n/* PKCS#5 v2 OIDs */\n\n#  define LN_pbes2                \"PBES2\"\n#  define NID_pbes2               161\n#  define OBJ_pbes2               OBJ_pkcs,5L,13L\n\n#  define LN_pbmac1               \"PBMAC1\"\n#  define NID_pbmac1              162\n#  define OBJ_pbmac1              OBJ_pkcs,5L,14L\n\n#  define LN_hmacWithSHA1         \"hmacWithSHA1\"\n#  define NID_hmacWithSHA1        163\n#  define OBJ_hmacWithSHA1        OBJ_rsadsi,2L,7L\n\n/* Policy Qualifier Ids */\n\n#  define LN_id_qt_cps            \"Policy Qualifier CPS\"\n#  define SN_id_qt_cps            \"id-qt-cps\"\n#  define NID_id_qt_cps           164\n#  define OBJ_id_qt_cps           OBJ_id_pkix,2L,1L\n\n#  define LN_id_qt_unotice        \"Policy Qualifier User Notice\"\n#  define SN_id_qt_unotice        \"id-qt-unotice\"\n#  define NID_id_qt_unotice       165\n#  define OBJ_id_qt_unotice       OBJ_id_pkix,2L,2L\n\n#  define SN_rc2_64_cbc                   \"RC2-64-CBC\"\n#  define LN_rc2_64_cbc                   \"rc2-64-cbc\"\n#  define NID_rc2_64_cbc                  166\n\n#  define SN_SMIMECapabilities            \"SMIME-CAPS\"\n#  define LN_SMIMECapabilities            \"S/MIME Capabilities\"\n#  define NID_SMIMECapabilities           167\n#  define OBJ_SMIMECapabilities           OBJ_pkcs9,15L\n\n#  define SN_pbeWithMD2AndRC2_CBC         \"PBE-MD2-RC2-64\"\n#  define LN_pbeWithMD2AndRC2_CBC         \"pbeWithMD2AndRC2-CBC\"\n#  define NID_pbeWithMD2AndRC2_CBC        168\n#  define OBJ_pbeWithMD2AndRC2_CBC        OBJ_pkcs,5L,4L\n\n#  define SN_pbeWithMD5AndRC2_CBC         \"PBE-MD5-RC2-64\"\n#  define LN_pbeWithMD5AndRC2_CBC         \"pbeWithMD5AndRC2-CBC\"\n#  define NID_pbeWithMD5AndRC2_CBC        169\n#  define OBJ_pbeWithMD5AndRC2_CBC        OBJ_pkcs,5L,6L\n\n#  define SN_pbeWithSHA1AndDES_CBC        \"PBE-SHA1-DES\"\n#  define LN_pbeWithSHA1AndDES_CBC        \"pbeWithSHA1AndDES-CBC\"\n#  define NID_pbeWithSHA1AndDES_CBC       170\n#  define OBJ_pbeWithSHA1AndDES_CBC       OBJ_pkcs,5L,10L\n\n/* Extension request OIDs */\n\n#  define LN_ms_ext_req                   \"Microsoft Extension Request\"\n#  define SN_ms_ext_req                   \"msExtReq\"\n#  define NID_ms_ext_req                  171\n#  define OBJ_ms_ext_req                  1L,3L,6L,1L,4L,1L,311L,2L,1L,14L\n\n#  define LN_ext_req                      \"Extension Request\"\n#  define SN_ext_req                      \"extReq\"\n#  define NID_ext_req                     172\n#  define OBJ_ext_req                     OBJ_pkcs9,14L\n\n#  define SN_name                         \"name\"\n#  define LN_name                         \"name\"\n#  define NID_name                        173\n#  define OBJ_name                        OBJ_X509,41L\n\n#  define SN_dnQualifier                  \"dnQualifier\"\n#  define LN_dnQualifier                  \"dnQualifier\"\n#  define NID_dnQualifier                 174\n#  define OBJ_dnQualifier                 OBJ_X509,46L\n\n#  define SN_id_pe                        \"id-pe\"\n#  define NID_id_pe                       175\n#  define OBJ_id_pe                       OBJ_id_pkix,1L\n\n#  define SN_id_ad                        \"id-ad\"\n#  define NID_id_ad                       176\n#  define OBJ_id_ad                       OBJ_id_pkix,48L\n\n#  define SN_info_access                  \"authorityInfoAccess\"\n#  define LN_info_access                  \"Authority Information Access\"\n#  define NID_info_access                 177\n#  define OBJ_info_access                 OBJ_id_pe,1L\n\n#  define SN_ad_OCSP                      \"OCSP\"\n#  define LN_ad_OCSP                      \"OCSP\"\n#  define NID_ad_OCSP                     178\n#  define OBJ_ad_OCSP                     OBJ_id_ad,1L\n\n#  define SN_ad_ca_issuers                \"caIssuers\"\n#  define LN_ad_ca_issuers                \"CA Issuers\"\n#  define NID_ad_ca_issuers               179\n#  define OBJ_ad_ca_issuers               OBJ_id_ad,2L\n\n#  define SN_OCSP_sign                    \"OCSPSigning\"\n#  define LN_OCSP_sign                    \"OCSP Signing\"\n#  define NID_OCSP_sign                   180\n#  define OBJ_OCSP_sign                   OBJ_id_kp,9L\n# endif                         /* USE_OBJ_MAC */\n\n# include \"openssl/bio.h\"\n# include \"openssl/asn1.h\"\n\n# define OBJ_NAME_TYPE_UNDEF             0x00\n# define OBJ_NAME_TYPE_MD_METH           0x01\n# define OBJ_NAME_TYPE_CIPHER_METH       0x02\n# define OBJ_NAME_TYPE_PKEY_METH         0x03\n# define OBJ_NAME_TYPE_COMP_METH         0x04\n# define OBJ_NAME_TYPE_NUM               0x05\n\n# define OBJ_NAME_ALIAS                  0x8000\n\n# define OBJ_BSEARCH_VALUE_ON_NOMATCH            0x01\n# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH        0x02\n\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct obj_name_st {\n    int type;\n    int alias;\n    const char *name;\n    const char *data;\n} OBJ_NAME;\n\n# define         OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c)\n\nint OBJ_NAME_init(void);\nint OBJ_NAME_new_index(unsigned long (*hash_func) (const char *),\n                       int (*cmp_func) (const char *, const char *),\n                       void (*free_func) (const char *, int, const char *));\nconst char *OBJ_NAME_get(const char *name, int type);\nint OBJ_NAME_add(const char *name, int type, const char *data);\nint OBJ_NAME_remove(const char *name, int type);\nvoid OBJ_NAME_cleanup(int type); /* -1 for everything */\nvoid OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg),\n                     void *arg);\nvoid OBJ_NAME_do_all_sorted(int type,\n                            void (*fn) (const OBJ_NAME *, void *arg),\n                            void *arg);\n\nASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o);\nASN1_OBJECT *OBJ_nid2obj(int n);\nconst char *OBJ_nid2ln(int n);\nconst char *OBJ_nid2sn(int n);\nint OBJ_obj2nid(const ASN1_OBJECT *o);\nASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name);\nint OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name);\nint OBJ_txt2nid(const char *s);\nint OBJ_ln2nid(const char *s);\nint OBJ_sn2nid(const char *s);\nint OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b);\nconst void *OBJ_bsearch_(const void *key, const void *base, int num, int size,\n                         int (*cmp) (const void *, const void *));\nconst void *OBJ_bsearch_ex_(const void *key, const void *base, int num,\n                            int size,\n                            int (*cmp) (const void *, const void *),\n                            int flags);\n\n# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm)    \\\n  static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \\\n  static int nm##_cmp(type1 const *, type2 const *); \\\n  scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)\n\n# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp)   \\\n  _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp)\n# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm)     \\\n  type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num)\n\n/*-\n * Unsolved problem: if a type is actually a pointer type, like\n * nid_triple is, then its impossible to get a const where you need\n * it. Consider:\n *\n * typedef int nid_triple[3];\n * const void *a_;\n * const nid_triple const *a = a_;\n *\n * The assignement discards a const because what you really want is:\n *\n * const int const * const *a = a_;\n *\n * But if you do that, you lose the fact that a is an array of 3 ints,\n * which breaks comparison functions.\n *\n * Thus we end up having to cast, sadly, or unpack the\n * declarations. Or, as I finally did in this case, delcare nid_triple\n * to be a struct, which it should have been in the first place.\n *\n * Ben, August 2008.\n *\n * Also, strictly speaking not all types need be const, but handling\n * the non-constness means a lot of complication, and in practice\n * comparison routines do always not touch their arguments.\n */\n\n# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm)  \\\n  static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)    \\\n      { \\\n      type1 const *a = a_; \\\n      type2 const *b = b_; \\\n      return nm##_cmp(a,b); \\\n      } \\\n  static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \\\n      { \\\n      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \\\n                                        nm##_cmp_BSEARCH_CMP_FN); \\\n      } \\\n      extern void dummy_prototype(void)\n\n# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm)   \\\n  static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_)    \\\n      { \\\n      type1 const *a = a_; \\\n      type2 const *b = b_; \\\n      return nm##_cmp(a,b); \\\n      } \\\n  type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \\\n      { \\\n      return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \\\n                                        nm##_cmp_BSEARCH_CMP_FN); \\\n      } \\\n      extern void dummy_prototype(void)\n\n# define OBJ_bsearch(type1,key,type2,base,num,cmp)                              \\\n  ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \\\n                         num,sizeof(type2),                             \\\n                         ((void)CHECKED_PTR_OF(type1,cmp##_type_1),     \\\n                          (void)CHECKED_PTR_OF(type2,cmp##_type_2),     \\\n                          cmp##_BSEARCH_CMP_FN)))\n\n# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags)                      \\\n  ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \\\n                         num,sizeof(type2),                             \\\n                         ((void)CHECKED_PTR_OF(type1,cmp##_type_1),     \\\n                          (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \\\n                          cmp##_BSEARCH_CMP_FN)),flags)\n\nint OBJ_new_nid(int num);\nint OBJ_add_object(const ASN1_OBJECT *obj);\nint OBJ_create(const char *oid, const char *sn, const char *ln);\nvoid OBJ_cleanup(void);\nint OBJ_create_objects(BIO *in);\n\nint OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid);\nint OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid);\nint OBJ_add_sigid(int signid, int dig_id, int pkey_id);\nvoid OBJ_sigid_free(void);\n\nextern int obj_cleanup_defer;\nvoid check_defer(int nid);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_OBJ_strings(void);\n\n/* Error codes for the OBJ functions. */\n\n/* Function codes. */\n# define OBJ_F_OBJ_ADD_OBJECT                             105\n# define OBJ_F_OBJ_CREATE                                 100\n# define OBJ_F_OBJ_DUP                                    101\n# define OBJ_F_OBJ_NAME_NEW_INDEX                         106\n# define OBJ_F_OBJ_NID2LN                                 102\n# define OBJ_F_OBJ_NID2OBJ                                103\n# define OBJ_F_OBJ_NID2SN                                 104\n\n/* Reason codes. */\n# define OBJ_R_MALLOC_FAILURE                             100\n# define OBJ_R_UNKNOWN_NID                                101\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ocsp.h",
    "content": "/* ocsp.h */\n/*\n * Written by Tom Titchener <Tom_Titchener@groove.net> for the OpenSSL\n * project.\n */\n\n/*\n * History: This file was transfered to Richard Levitte from CertCo by Kathy\n * Weinhold in mid-spring 2000 to be included in OpenSSL or released as a\n * patch kit.\n */\n\n/* ====================================================================\n * Copyright (c) 1998-2000 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_OCSP_H\n# define HEADER_OCSP_H\n\n# include <openssl/ossl_typ.h>\n# include <openssl/x509.h>\n# include <openssl/x509v3.h>\n# include <openssl/safestack.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Various flags and values */\n\n# define OCSP_DEFAULT_NONCE_LENGTH       16\n\n# define OCSP_NOCERTS                    0x1\n# define OCSP_NOINTERN                   0x2\n# define OCSP_NOSIGS                     0x4\n# define OCSP_NOCHAIN                    0x8\n# define OCSP_NOVERIFY                   0x10\n# define OCSP_NOEXPLICIT                 0x20\n# define OCSP_NOCASIGN                   0x40\n# define OCSP_NODELEGATED                0x80\n# define OCSP_NOCHECKS                   0x100\n# define OCSP_TRUSTOTHER                 0x200\n# define OCSP_RESPID_KEY                 0x400\n# define OCSP_NOTIME                     0x800\n\n/*-  CertID ::= SEQUENCE {\n *       hashAlgorithm            AlgorithmIdentifier,\n *       issuerNameHash     OCTET STRING, -- Hash of Issuer's DN\n *       issuerKeyHash      OCTET STRING, -- Hash of Issuers public key (excluding the tag & length fields)\n *       serialNumber       CertificateSerialNumber }\n */\ntypedef struct ocsp_cert_id_st {\n    X509_ALGOR *hashAlgorithm;\n    ASN1_OCTET_STRING *issuerNameHash;\n    ASN1_OCTET_STRING *issuerKeyHash;\n    ASN1_INTEGER *serialNumber;\n} OCSP_CERTID;\n\nDECLARE_STACK_OF(OCSP_CERTID)\n\n/*-  Request ::=     SEQUENCE {\n *       reqCert                    CertID,\n *       singleRequestExtensions    [0] EXPLICIT Extensions OPTIONAL }\n */\ntypedef struct ocsp_one_request_st {\n    OCSP_CERTID *reqCert;\n    STACK_OF(X509_EXTENSION) *singleRequestExtensions;\n} OCSP_ONEREQ;\n\nDECLARE_STACK_OF(OCSP_ONEREQ)\nDECLARE_ASN1_SET_OF(OCSP_ONEREQ)\n\n/*-  TBSRequest      ::=     SEQUENCE {\n *       version             [0] EXPLICIT Version DEFAULT v1,\n *       requestorName       [1] EXPLICIT GeneralName OPTIONAL,\n *       requestList             SEQUENCE OF Request,\n *       requestExtensions   [2] EXPLICIT Extensions OPTIONAL }\n */\ntypedef struct ocsp_req_info_st {\n    ASN1_INTEGER *version;\n    GENERAL_NAME *requestorName;\n    STACK_OF(OCSP_ONEREQ) *requestList;\n    STACK_OF(X509_EXTENSION) *requestExtensions;\n} OCSP_REQINFO;\n\n/*-  Signature       ::=     SEQUENCE {\n *       signatureAlgorithm   AlgorithmIdentifier,\n *       signature            BIT STRING,\n *       certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }\n */\ntypedef struct ocsp_signature_st {\n    X509_ALGOR *signatureAlgorithm;\n    ASN1_BIT_STRING *signature;\n    STACK_OF(X509) *certs;\n} OCSP_SIGNATURE;\n\n/*-  OCSPRequest     ::=     SEQUENCE {\n *       tbsRequest                  TBSRequest,\n *       optionalSignature   [0]     EXPLICIT Signature OPTIONAL }\n */\ntypedef struct ocsp_request_st {\n    OCSP_REQINFO *tbsRequest;\n    OCSP_SIGNATURE *optionalSignature; /* OPTIONAL */\n} OCSP_REQUEST;\n\n/*-  OCSPResponseStatus ::= ENUMERATED {\n *       successful            (0),      --Response has valid confirmations\n *       malformedRequest      (1),      --Illegal confirmation request\n *       internalError         (2),      --Internal error in issuer\n *       tryLater              (3),      --Try again later\n *                                       --(4) is not used\n *       sigRequired           (5),      --Must sign the request\n *       unauthorized          (6)       --Request unauthorized\n *   }\n */\n# define OCSP_RESPONSE_STATUS_SUCCESSFUL          0\n# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST     1\n# define OCSP_RESPONSE_STATUS_INTERNALERROR        2\n# define OCSP_RESPONSE_STATUS_TRYLATER             3\n# define OCSP_RESPONSE_STATUS_SIGREQUIRED          5\n# define OCSP_RESPONSE_STATUS_UNAUTHORIZED         6\n\n/*-  ResponseBytes ::=       SEQUENCE {\n *       responseType   OBJECT IDENTIFIER,\n *       response       OCTET STRING }\n */\ntypedef struct ocsp_resp_bytes_st {\n    ASN1_OBJECT *responseType;\n    ASN1_OCTET_STRING *response;\n} OCSP_RESPBYTES;\n\n/*-  OCSPResponse ::= SEQUENCE {\n *      responseStatus         OCSPResponseStatus,\n *      responseBytes          [0] EXPLICIT ResponseBytes OPTIONAL }\n */\nstruct ocsp_response_st {\n    ASN1_ENUMERATED *responseStatus;\n    OCSP_RESPBYTES *responseBytes;\n};\n\n/*-  ResponderID ::= CHOICE {\n *      byName   [1] Name,\n *      byKey    [2] KeyHash }\n */\n# define V_OCSP_RESPID_NAME 0\n# define V_OCSP_RESPID_KEY  1\nstruct ocsp_responder_id_st {\n    int type;\n    union {\n        X509_NAME *byName;\n        ASN1_OCTET_STRING *byKey;\n    } value;\n};\n\nDECLARE_STACK_OF(OCSP_RESPID)\nDECLARE_ASN1_FUNCTIONS(OCSP_RESPID)\n\n/*-  KeyHash ::= OCTET STRING --SHA-1 hash of responder's public key\n *                            --(excluding the tag and length fields)\n */\n\n/*-  RevokedInfo ::= SEQUENCE {\n *       revocationTime              GeneralizedTime,\n *       revocationReason    [0]     EXPLICIT CRLReason OPTIONAL }\n */\ntypedef struct ocsp_revoked_info_st {\n    ASN1_GENERALIZEDTIME *revocationTime;\n    ASN1_ENUMERATED *revocationReason;\n} OCSP_REVOKEDINFO;\n\n/*-  CertStatus ::= CHOICE {\n *       good                [0]     IMPLICIT NULL,\n *       revoked             [1]     IMPLICIT RevokedInfo,\n *       unknown             [2]     IMPLICIT UnknownInfo }\n */\n# define V_OCSP_CERTSTATUS_GOOD    0\n# define V_OCSP_CERTSTATUS_REVOKED 1\n# define V_OCSP_CERTSTATUS_UNKNOWN 2\ntypedef struct ocsp_cert_status_st {\n    int type;\n    union {\n        ASN1_NULL *good;\n        OCSP_REVOKEDINFO *revoked;\n        ASN1_NULL *unknown;\n    } value;\n} OCSP_CERTSTATUS;\n\n/*-  SingleResponse ::= SEQUENCE {\n *      certID                       CertID,\n *      certStatus                   CertStatus,\n *      thisUpdate                   GeneralizedTime,\n *      nextUpdate           [0]     EXPLICIT GeneralizedTime OPTIONAL,\n *      singleExtensions     [1]     EXPLICIT Extensions OPTIONAL }\n */\ntypedef struct ocsp_single_response_st {\n    OCSP_CERTID *certId;\n    OCSP_CERTSTATUS *certStatus;\n    ASN1_GENERALIZEDTIME *thisUpdate;\n    ASN1_GENERALIZEDTIME *nextUpdate;\n    STACK_OF(X509_EXTENSION) *singleExtensions;\n} OCSP_SINGLERESP;\n\nDECLARE_STACK_OF(OCSP_SINGLERESP)\nDECLARE_ASN1_SET_OF(OCSP_SINGLERESP)\n\n/*-  ResponseData ::= SEQUENCE {\n *      version              [0] EXPLICIT Version DEFAULT v1,\n *      responderID              ResponderID,\n *      producedAt               GeneralizedTime,\n *      responses                SEQUENCE OF SingleResponse,\n *      responseExtensions   [1] EXPLICIT Extensions OPTIONAL }\n */\ntypedef struct ocsp_response_data_st {\n    ASN1_INTEGER *version;\n    OCSP_RESPID *responderId;\n    ASN1_GENERALIZEDTIME *producedAt;\n    STACK_OF(OCSP_SINGLERESP) *responses;\n    STACK_OF(X509_EXTENSION) *responseExtensions;\n} OCSP_RESPDATA;\n\n/*-  BasicOCSPResponse       ::= SEQUENCE {\n *      tbsResponseData      ResponseData,\n *      signatureAlgorithm   AlgorithmIdentifier,\n *      signature            BIT STRING,\n *      certs                [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }\n */\n  /*\n   * Note 1: The value for \"signature\" is specified in the OCSP rfc2560 as\n   * follows: \"The value for the signature SHALL be computed on the hash of\n   * the DER encoding ResponseData.\" This means that you must hash the\n   * DER-encoded tbsResponseData, and then run it through a crypto-signing\n   * function, which will (at least w/RSA) do a hash-'n'-private-encrypt\n   * operation.  This seems a bit odd, but that's the spec.  Also note that\n   * the data structures do not leave anywhere to independently specify the\n   * algorithm used for the initial hash. So, we look at the\n   * signature-specification algorithm, and try to do something intelligent.\n   * -- Kathy Weinhold, CertCo\n   */\n  /*\n   * Note 2: It seems that the mentioned passage from RFC 2560 (section\n   * 4.2.1) is open for interpretation.  I've done tests against another\n   * responder, and found that it doesn't do the double hashing that the RFC\n   * seems to say one should.  Therefore, all relevant functions take a flag\n   * saying which variant should be used.  -- Richard Levitte, OpenSSL team\n   * and CeloCom\n   */\ntypedef struct ocsp_basic_response_st {\n    OCSP_RESPDATA *tbsResponseData;\n    X509_ALGOR *signatureAlgorithm;\n    ASN1_BIT_STRING *signature;\n    STACK_OF(X509) *certs;\n} OCSP_BASICRESP;\n\n/*-\n *   CRLReason ::= ENUMERATED {\n *        unspecified             (0),\n *        keyCompromise           (1),\n *        cACompromise            (2),\n *        affiliationChanged      (3),\n *        superseded              (4),\n *        cessationOfOperation    (5),\n *        certificateHold         (6),\n *        removeFromCRL           (8) }\n */\n# define OCSP_REVOKED_STATUS_NOSTATUS               -1\n# define OCSP_REVOKED_STATUS_UNSPECIFIED             0\n# define OCSP_REVOKED_STATUS_KEYCOMPROMISE           1\n# define OCSP_REVOKED_STATUS_CACOMPROMISE            2\n# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED      3\n# define OCSP_REVOKED_STATUS_SUPERSEDED              4\n# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION    5\n# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD         6\n# define OCSP_REVOKED_STATUS_REMOVEFROMCRL           8\n\n/*-\n * CrlID ::= SEQUENCE {\n *     crlUrl               [0]     EXPLICIT IA5String OPTIONAL,\n *     crlNum               [1]     EXPLICIT INTEGER OPTIONAL,\n *     crlTime              [2]     EXPLICIT GeneralizedTime OPTIONAL }\n */\ntypedef struct ocsp_crl_id_st {\n    ASN1_IA5STRING *crlUrl;\n    ASN1_INTEGER *crlNum;\n    ASN1_GENERALIZEDTIME *crlTime;\n} OCSP_CRLID;\n\n/*-\n * ServiceLocator ::= SEQUENCE {\n *      issuer    Name,\n *      locator   AuthorityInfoAccessSyntax OPTIONAL }\n */\ntypedef struct ocsp_service_locator_st {\n    X509_NAME *issuer;\n    STACK_OF(ACCESS_DESCRIPTION) *locator;\n} OCSP_SERVICELOC;\n\n# define PEM_STRING_OCSP_REQUEST \"OCSP REQUEST\"\n# define PEM_STRING_OCSP_RESPONSE \"OCSP RESPONSE\"\n\n# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p)\n\n# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p)\n\n# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \\\n     (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,bp,(char **)x,cb,NULL)\n\n# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb)(OCSP_RESPONSE *)PEM_ASN1_read_bio(\\\n     (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,bp,(char **)x,cb,NULL)\n\n# define PEM_write_bio_OCSP_REQUEST(bp,o) \\\n    PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\\\n                        bp,(char *)o, NULL,NULL,0,NULL,NULL)\n\n# define PEM_write_bio_OCSP_RESPONSE(bp,o) \\\n    PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\\\n                        bp,(char *)o, NULL,NULL,0,NULL,NULL)\n\n# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o)\n\n# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o)\n\n# define OCSP_REQUEST_sign(o,pkey,md) \\\n        ASN1_item_sign(ASN1_ITEM_rptr(OCSP_REQINFO),\\\n                o->optionalSignature->signatureAlgorithm,NULL,\\\n                o->optionalSignature->signature,o->tbsRequest,pkey,md)\n\n# define OCSP_BASICRESP_sign(o,pkey,md,d) \\\n        ASN1_item_sign(ASN1_ITEM_rptr(OCSP_RESPDATA),o->signatureAlgorithm,NULL,\\\n                o->signature,o->tbsResponseData,pkey,md)\n\n# define OCSP_REQUEST_verify(a,r) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_REQINFO),\\\n        a->optionalSignature->signatureAlgorithm,\\\n        a->optionalSignature->signature,a->tbsRequest,r)\n\n# define OCSP_BASICRESP_verify(a,r,d) ASN1_item_verify(ASN1_ITEM_rptr(OCSP_RESPDATA),\\\n        a->signatureAlgorithm,a->signature,a->tbsResponseData,r)\n\n# define ASN1_BIT_STRING_digest(data,type,md,len) \\\n        ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len)\n\n# define OCSP_CERTSTATUS_dup(cs)\\\n                (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\\\n                (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs))\n\nOCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id);\n\nOCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req);\nOCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req,\n                               int maxline);\nint OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx);\nint OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx);\nOCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline);\nvoid OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx);\nvoid OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len);\nint OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it,\n                     ASN1_VALUE *val);\nint OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval,\n                          const ASN1_ITEM *it);\nBIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx);\nint OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it,\n                     ASN1_VALUE *val);\nint OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path);\nint OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req);\nint OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,\n                             const char *name, const char *value);\n\nOCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, X509 *subject, X509 *issuer);\n\nOCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst,\n                              X509_NAME *issuerName,\n                              ASN1_BIT_STRING *issuerKey,\n                              ASN1_INTEGER *serialNumber);\n\nOCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid);\n\nint OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len);\nint OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len);\nint OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs);\nint OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req);\n\nint OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm);\nint OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert);\n\nint OCSP_request_sign(OCSP_REQUEST *req,\n                      X509 *signer,\n                      EVP_PKEY *key,\n                      const EVP_MD *dgst,\n                      STACK_OF(X509) *certs, unsigned long flags);\n\nint OCSP_response_status(OCSP_RESPONSE *resp);\nOCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp);\n\nint OCSP_resp_count(OCSP_BASICRESP *bs);\nOCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx);\nint OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last);\nint OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason,\n                            ASN1_GENERALIZEDTIME **revtime,\n                            ASN1_GENERALIZEDTIME **thisupd,\n                            ASN1_GENERALIZEDTIME **nextupd);\nint OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status,\n                          int *reason,\n                          ASN1_GENERALIZEDTIME **revtime,\n                          ASN1_GENERALIZEDTIME **thisupd,\n                          ASN1_GENERALIZEDTIME **nextupd);\nint OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,\n                        ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec);\n\nint OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs,\n                        X509_STORE *store, unsigned long flags);\n\nint OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath,\n                   int *pssl);\n\nint OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b);\nint OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b);\n\nint OCSP_request_onereq_count(OCSP_REQUEST *req);\nOCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i);\nOCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one);\nint OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd,\n                      ASN1_OCTET_STRING **pikeyHash,\n                      ASN1_INTEGER **pserial, OCSP_CERTID *cid);\nint OCSP_request_is_signed(OCSP_REQUEST *req);\nOCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs);\nOCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp,\n                                        OCSP_CERTID *cid,\n                                        int status, int reason,\n                                        ASN1_TIME *revtime,\n                                        ASN1_TIME *thisupd,\n                                        ASN1_TIME *nextupd);\nint OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert);\nint OCSP_basic_sign(OCSP_BASICRESP *brsp,\n                    X509 *signer, EVP_PKEY *key, const EVP_MD *dgst,\n                    STACK_OF(X509) *certs, unsigned long flags);\n\nX509_EXTENSION *OCSP_crlID_new(char *url, long *n, char *tim);\n\nX509_EXTENSION *OCSP_accept_responses_new(char **oids);\n\nX509_EXTENSION *OCSP_archive_cutoff_new(char *tim);\n\nX509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, char **urls);\n\nint OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x);\nint OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos);\nint OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, ASN1_OBJECT *obj,\n                                int lastpos);\nint OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos);\nX509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc);\nX509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc);\nvoid *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit,\n                                int *idx);\nint OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit,\n                              unsigned long flags);\nint OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc);\n\nint OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x);\nint OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos);\nint OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, ASN1_OBJECT *obj, int lastpos);\nint OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos);\nX509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc);\nX509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc);\nvoid *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx);\nint OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit,\n                             unsigned long flags);\nint OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc);\n\nint OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x);\nint OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos);\nint OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, ASN1_OBJECT *obj,\n                                  int lastpos);\nint OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit,\n                                       int lastpos);\nX509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc);\nX509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc);\nvoid *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit,\n                                  int *idx);\nint OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value,\n                                int crit, unsigned long flags);\nint OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc);\n\nint OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x);\nint OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos);\nint OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, ASN1_OBJECT *obj,\n                                   int lastpos);\nint OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit,\n                                        int lastpos);\nX509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc);\nX509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc);\nvoid *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit,\n                                   int *idx);\nint OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value,\n                                 int crit, unsigned long flags);\nint OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc);\n\nDECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP)\nDECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS)\nDECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO)\nDECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP)\nDECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA)\nDECLARE_ASN1_FUNCTIONS(OCSP_RESPID)\nDECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE)\nDECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES)\nDECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ)\nDECLARE_ASN1_FUNCTIONS(OCSP_CERTID)\nDECLARE_ASN1_FUNCTIONS(OCSP_REQUEST)\nDECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE)\nDECLARE_ASN1_FUNCTIONS(OCSP_REQINFO)\nDECLARE_ASN1_FUNCTIONS(OCSP_CRLID)\nDECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC)\n\nconst char *OCSP_response_status_str(long s);\nconst char *OCSP_cert_status_str(long s);\nconst char *OCSP_crl_reason_str(long s);\n\nint OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags);\nint OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags);\n\nint OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs,\n                      X509_STORE *st, unsigned long flags);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_OCSP_strings(void);\n\n/* Error codes for the OCSP functions. */\n\n/* Function codes. */\n# define OCSP_F_ASN1_STRING_ENCODE                        100\n# define OCSP_F_D2I_OCSP_NONCE                            102\n# define OCSP_F_OCSP_BASIC_ADD1_STATUS                    103\n# define OCSP_F_OCSP_BASIC_SIGN                           104\n# define OCSP_F_OCSP_BASIC_VERIFY                         105\n# define OCSP_F_OCSP_CERT_ID_NEW                          101\n# define OCSP_F_OCSP_CHECK_DELEGATED                      106\n# define OCSP_F_OCSP_CHECK_IDS                            107\n# define OCSP_F_OCSP_CHECK_ISSUER                         108\n# define OCSP_F_OCSP_CHECK_VALIDITY                       115\n# define OCSP_F_OCSP_MATCH_ISSUERID                       109\n# define OCSP_F_OCSP_PARSE_URL                            114\n# define OCSP_F_OCSP_REQUEST_SIGN                         110\n# define OCSP_F_OCSP_REQUEST_VERIFY                       116\n# define OCSP_F_OCSP_RESPONSE_GET1_BASIC                  111\n# define OCSP_F_OCSP_SENDREQ_BIO                          112\n# define OCSP_F_OCSP_SENDREQ_NBIO                         117\n# define OCSP_F_PARSE_HTTP_LINE1                          118\n# define OCSP_F_REQUEST_VERIFY                            113\n\n/* Reason codes. */\n# define OCSP_R_BAD_DATA                                  100\n# define OCSP_R_CERTIFICATE_VERIFY_ERROR                  101\n# define OCSP_R_DIGEST_ERR                                102\n# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD                 122\n# define OCSP_R_ERROR_IN_THISUPDATE_FIELD                 123\n# define OCSP_R_ERROR_PARSING_URL                         121\n# define OCSP_R_MISSING_OCSPSIGNING_USAGE                 103\n# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE              124\n# define OCSP_R_NOT_BASIC_RESPONSE                        104\n# define OCSP_R_NO_CERTIFICATES_IN_CHAIN                  105\n# define OCSP_R_NO_CONTENT                                106\n# define OCSP_R_NO_PUBLIC_KEY                             107\n# define OCSP_R_NO_RESPONSE_DATA                          108\n# define OCSP_R_NO_REVOKED_TIME                           109\n# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE    110\n# define OCSP_R_REQUEST_NOT_SIGNED                        128\n# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA      111\n# define OCSP_R_ROOT_CA_NOT_TRUSTED                       112\n# define OCSP_R_SERVER_READ_ERROR                         113\n# define OCSP_R_SERVER_RESPONSE_ERROR                     114\n# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR               115\n# define OCSP_R_SERVER_WRITE_ERROR                        116\n# define OCSP_R_SIGNATURE_FAILURE                         117\n# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND              118\n# define OCSP_R_STATUS_EXPIRED                            125\n# define OCSP_R_STATUS_NOT_YET_VALID                      126\n# define OCSP_R_STATUS_TOO_OLD                            127\n# define OCSP_R_UNKNOWN_MESSAGE_DIGEST                    119\n# define OCSP_R_UNKNOWN_NID                               120\n# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE            129\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/opensslconf.h",
    "content": "/* opensslconf.h */\n/* WARNING: Generated automatically from opensslconf.h.in by Configure. */\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n/* OpenSSL was configured with the following options: */\n#ifndef OPENSSL_SYSNAME_iOS\n# define OPENSSL_SYSNAME_iOS\n#endif\n#ifndef OPENSSL_DOING_MAKEDEPEND\n\n\n#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128\n# define OPENSSL_NO_EC_NISTP_64_GCC_128\n#endif\n#ifndef OPENSSL_NO_GMP\n# define OPENSSL_NO_GMP\n#endif\n#ifndef OPENSSL_NO_JPAKE\n# define OPENSSL_NO_JPAKE\n#endif\n#ifndef OPENSSL_NO_KRB5\n# define OPENSSL_NO_KRB5\n#endif\n#ifndef OPENSSL_NO_LIBUNBOUND\n# define OPENSSL_NO_LIBUNBOUND\n#endif\n#ifndef OPENSSL_NO_MD2\n# define OPENSSL_NO_MD2\n#endif\n#ifndef OPENSSL_NO_RC5\n# define OPENSSL_NO_RC5\n#endif\n#ifndef OPENSSL_NO_RFC3779\n# define OPENSSL_NO_RFC3779\n#endif\n#ifndef OPENSSL_NO_SCTP\n# define OPENSSL_NO_SCTP\n#endif\n#ifndef OPENSSL_NO_SSL_TRACE\n# define OPENSSL_NO_SSL_TRACE\n#endif\n#ifndef OPENSSL_NO_STORE\n# define OPENSSL_NO_STORE\n#endif\n#ifndef OPENSSL_NO_UNIT_TEST\n# define OPENSSL_NO_UNIT_TEST\n#endif\n\n#endif /* OPENSSL_DOING_MAKEDEPEND */\n\n#ifndef OPENSSL_THREADS\n# define OPENSSL_THREADS\n#endif\n#ifndef OPENSSL_NO_DYNAMIC_ENGINE\n# define OPENSSL_NO_DYNAMIC_ENGINE\n#endif\n\n/* The OPENSSL_NO_* macros are also defined as NO_* if the application\n   asks for it.  This is a transient feature that is provided for those\n   who haven't had the time to do the appropriate changes in their\n   applications.  */\n#ifdef OPENSSL_ALGORITHM_DEFINES\n# if defined(OPENSSL_NO_EC_NISTP_64_GCC_128) && !defined(NO_EC_NISTP_64_GCC_128)\n#  define NO_EC_NISTP_64_GCC_128\n# endif\n# if defined(OPENSSL_NO_GMP) && !defined(NO_GMP)\n#  define NO_GMP\n# endif\n# if defined(OPENSSL_NO_JPAKE) && !defined(NO_JPAKE)\n#  define NO_JPAKE\n# endif\n# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)\n#  define NO_KRB5\n# endif\n# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)\n#  define NO_LIBUNBOUND\n# endif\n# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)\n#  define NO_MD2\n# endif\n# if defined(OPENSSL_NO_RC5) && !defined(NO_RC5)\n#  define NO_RC5\n# endif\n# if defined(OPENSSL_NO_RFC3779) && !defined(NO_RFC3779)\n#  define NO_RFC3779\n# endif\n# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)\n#  define NO_SCTP\n# endif\n# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)\n#  define NO_SSL_TRACE\n# endif\n# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)\n#  define NO_STORE\n# endif\n# if defined(OPENSSL_NO_UNIT_TEST) && !defined(NO_UNIT_TEST)\n#  define NO_UNIT_TEST\n# endif\n#endif\n\n/* crypto/opensslconf.h.in */\n\n/* Generate 80386 code? */\n#undef I386_ONLY\n\n#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */\n#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)\n#define ENGINESDIR \"/Users/wujianguo/Documents/code/tmp/openssl/OpenSSL-for-iPhone/bin/iPhoneSimulator8.3-i386.sdk/lib/engines\"\n#define OPENSSLDIR \"/Users/wujianguo/Documents/code/tmp/openssl/OpenSSL-for-iPhone/bin/iPhoneSimulator8.3-i386.sdk\"\n#endif\n#endif\n\n#undef OPENSSL_UNISTD\n#define OPENSSL_UNISTD <unistd.h>\n\n#undef OPENSSL_EXPORT_VAR_AS_FUNCTION\n\n#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)\n#define IDEA_INT unsigned int\n#endif\n\n#if defined(HEADER_MD2_H) && !defined(MD2_INT)\n#define MD2_INT unsigned int\n#endif\n\n#if defined(HEADER_RC2_H) && !defined(RC2_INT)\n/* I need to put in a mod for the alpha - eay */\n#define RC2_INT unsigned int\n#endif\n\n#if defined(HEADER_RC4_H)\n#if !defined(RC4_INT)\n/* using int types make the structure larger but make the code faster\n * on most boxes I have tested - up to %20 faster. */\n/*\n * I don't know what does \"most\" mean, but declaring \"int\" is a must on:\n * - Intel P6 because partial register stalls are very expensive;\n * - elder Alpha because it lacks byte load/store instructions;\n */\n#define RC4_INT unsigned char\n#endif\n#if !defined(RC4_CHUNK)\n/*\n * This enables code handling data aligned at natural CPU word\n * boundary. See crypto/rc4/rc4_enc.c for further details.\n */\n#define RC4_CHUNK unsigned long\n#endif\n#endif\n\n#if (defined(HEADER_NEW_DES_H) || defined(HEADER_DES_H)) && !defined(DES_LONG)\n/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a\n * %20 speed up (longs are 8 bytes, int's are 4). */\n#ifndef DES_LONG\n#define DES_LONG unsigned long\n#endif\n#endif\n\n#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)\n#define CONFIG_HEADER_BN_H\n#define BN_LLONG\n\n/* Should we define BN_DIV2W here? */\n\n/* Only one for the following should be defined */\n#undef SIXTY_FOUR_BIT_LONG\n#undef SIXTY_FOUR_BIT\n#define THIRTY_TWO_BIT\n#endif\n\n#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)\n#define CONFIG_HEADER_RC4_LOCL_H\n/* if this is defined data[i] is used instead of *data, this is a %20\n * speedup on x86 */\n#undef RC4_INDEX\n#endif\n\n#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)\n#define CONFIG_HEADER_BF_LOCL_H\n#define BF_PTR\n#endif /* HEADER_BF_LOCL_H */\n\n#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)\n#define CONFIG_HEADER_DES_LOCL_H\n#ifndef DES_DEFAULT_OPTIONS\n/* the following is tweaked from a config script, that is why it is a\n * protected undef/define */\n#ifndef DES_PTR\n#undef DES_PTR\n#endif\n\n/* This helps C compiler generate the correct code for multiple functional\n * units.  It reduces register dependancies at the expense of 2 more\n * registers */\n#ifndef DES_RISC1\n#undef DES_RISC1\n#endif\n\n#ifndef DES_RISC2\n#undef DES_RISC2\n#endif\n\n#if defined(DES_RISC1) && defined(DES_RISC2)\nYOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!\n#endif\n\n/* Unroll the inner loop, this sometimes helps, sometimes hinders.\n * Very mucy CPU dependant */\n#ifndef DES_UNROLL\n#define DES_UNROLL\n#endif\n\n/* These default values were supplied by\n * Peter Gutman <pgut001@cs.auckland.ac.nz>\n * They are only used if nothing else has been defined */\n#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)\n/* Special defines which change the way the code is built depending on the\n   CPU and OS.  For SGI machines you can use _MIPS_SZLONG (32 or 64) to find\n   even newer MIPS CPU's, but at the moment one size fits all for\n   optimization options.  Older Sparc's work better with only UNROLL, but\n   there's no way to tell at compile time what it is you're running on */\n \n#if defined( sun )\t\t/* Newer Sparc's */\n#  define DES_PTR\n#  define DES_RISC1\n#  define DES_UNROLL\n#elif defined( __ultrix )\t/* Older MIPS */\n#  define DES_PTR\n#  define DES_RISC2\n#  define DES_UNROLL\n#elif defined( __osf1__ )\t/* Alpha */\n#  define DES_PTR\n#  define DES_RISC2\n#elif defined ( _AIX )\t\t/* RS6000 */\n  /* Unknown */\n#elif defined( __hpux )\t\t/* HP-PA */\n  /* Unknown */\n#elif defined( __aux )\t\t/* 68K */\n  /* Unknown */\n#elif defined( __dgux )\t\t/* 88K (but P6 in latest boxes) */\n#  define DES_UNROLL\n#elif defined( __sgi )\t\t/* Newer MIPS */\n#  define DES_PTR\n#  define DES_RISC2\n#  define DES_UNROLL\n#elif defined(i386) || defined(__i386__)\t/* x86 boxes, should be gcc */\n#  define DES_PTR\n#  define DES_RISC1\n#  define DES_UNROLL\n#endif /* Systems-specific speed defines */\n#endif\n\n#endif /* DES_DEFAULT_OPTIONS */\n#endif /* HEADER_DES_LOCL_H */\n#ifdef  __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/opensslv.h",
    "content": "#ifndef HEADER_OPENSSLV_H\n# define HEADER_OPENSSLV_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*-\n * Numeric release version identifier:\n * MNNFFPPS: major minor fix patch status\n * The status nibble has one of the values 0 for development, 1 to e for betas\n * 1 to 14, and f for release.  The patch level is exactly that.\n * For example:\n * 0.9.3-dev      0x00903000\n * 0.9.3-beta1    0x00903001\n * 0.9.3-beta2-dev 0x00903002\n * 0.9.3-beta2    0x00903002 (same as ...beta2-dev)\n * 0.9.3          0x0090300f\n * 0.9.3a         0x0090301f\n * 0.9.4          0x0090400f\n * 1.2.3z         0x102031af\n *\n * For continuity reasons (because 0.9.5 is already out, and is coded\n * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level\n * part is slightly different, by setting the highest bit.  This means\n * that 0.9.5a looks like this: 0x0090581f.  At 0.9.6, we can start\n * with 0x0090600S...\n *\n * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.)\n * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for\n *  major minor fix final patch/beta)\n */\n# define OPENSSL_VERSION_NUMBER  0x1000201fL\n# ifdef OPENSSL_FIPS\n#  define OPENSSL_VERSION_TEXT    \"OpenSSL 1.0.2a-fips 19 Mar 2015\"\n# else\n#  define OPENSSL_VERSION_TEXT    \"OpenSSL 1.0.2a 19 Mar 2015\"\n# endif\n# define OPENSSL_VERSION_PTEXT   \" part of \" OPENSSL_VERSION_TEXT\n\n/*-\n * The macros below are to be used for shared library (.so, .dll, ...)\n * versioning.  That kind of versioning works a bit differently between\n * operating systems.  The most usual scheme is to set a major and a minor\n * number, and have the runtime loader check that the major number is equal\n * to what it was at application link time, while the minor number has to\n * be greater or equal to what it was at application link time.  With this\n * scheme, the version number is usually part of the file name, like this:\n *\n *      libcrypto.so.0.9\n *\n * Some unixen also make a softlink with the major verson number only:\n *\n *      libcrypto.so.0\n *\n * On Tru64 and IRIX 6.x it works a little bit differently.  There, the\n * shared library version is stored in the file, and is actually a series\n * of versions, separated by colons.  The rightmost version present in the\n * library when linking an application is stored in the application to be\n * matched at run time.  When the application is run, a check is done to\n * see if the library version stored in the application matches any of the\n * versions in the version string of the library itself.\n * This version string can be constructed in any way, depending on what\n * kind of matching is desired.  However, to implement the same scheme as\n * the one used in the other unixen, all compatible versions, from lowest\n * to highest, should be part of the string.  Consecutive builds would\n * give the following versions strings:\n *\n *      3.0\n *      3.0:3.1\n *      3.0:3.1:3.2\n *      4.0\n *      4.0:4.1\n *\n * Notice how version 4 is completely incompatible with version, and\n * therefore give the breach you can see.\n *\n * There may be other schemes as well that I haven't yet discovered.\n *\n * So, here's the way it works here: first of all, the library version\n * number doesn't need at all to match the overall OpenSSL version.\n * However, it's nice and more understandable if it actually does.\n * The current library version is stored in the macro SHLIB_VERSION_NUMBER,\n * which is just a piece of text in the format \"M.m.e\" (Major, minor, edit).\n * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways,\n * we need to keep a history of version numbers, which is done in the\n * macro SHLIB_VERSION_HISTORY.  The numbers are separated by colons and\n * should only keep the versions that are binary compatible with the current.\n */\n# define SHLIB_VERSION_HISTORY \"\"\n# define SHLIB_VERSION_NUMBER \"1.0.0\"\n\n\n#ifdef  __cplusplus\n}\n#endif\n#endif                          /* HEADER_OPENSSLV_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ossl_typ.h",
    "content": "/* ====================================================================\n * Copyright (c) 1998-2001 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_OPENSSL_TYPES_H\n# define HEADER_OPENSSL_TYPES_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# include \"openssl/e_os2.h\"\n\n# ifdef NO_ASN1_TYPEDEFS\n#  define ASN1_INTEGER            ASN1_STRING\n#  define ASN1_ENUMERATED         ASN1_STRING\n#  define ASN1_BIT_STRING         ASN1_STRING\n#  define ASN1_OCTET_STRING       ASN1_STRING\n#  define ASN1_PRINTABLESTRING    ASN1_STRING\n#  define ASN1_T61STRING          ASN1_STRING\n#  define ASN1_IA5STRING          ASN1_STRING\n#  define ASN1_UTCTIME            ASN1_STRING\n#  define ASN1_GENERALIZEDTIME    ASN1_STRING\n#  define ASN1_TIME               ASN1_STRING\n#  define ASN1_GENERALSTRING      ASN1_STRING\n#  define ASN1_UNIVERSALSTRING    ASN1_STRING\n#  define ASN1_BMPSTRING          ASN1_STRING\n#  define ASN1_VISIBLESTRING      ASN1_STRING\n#  define ASN1_UTF8STRING         ASN1_STRING\n#  define ASN1_BOOLEAN            int\n#  define ASN1_NULL               int\n# else\ntypedef struct asn1_string_st ASN1_INTEGER;\ntypedef struct asn1_string_st ASN1_ENUMERATED;\ntypedef struct asn1_string_st ASN1_BIT_STRING;\ntypedef struct asn1_string_st ASN1_OCTET_STRING;\ntypedef struct asn1_string_st ASN1_PRINTABLESTRING;\ntypedef struct asn1_string_st ASN1_T61STRING;\ntypedef struct asn1_string_st ASN1_IA5STRING;\ntypedef struct asn1_string_st ASN1_GENERALSTRING;\ntypedef struct asn1_string_st ASN1_UNIVERSALSTRING;\ntypedef struct asn1_string_st ASN1_BMPSTRING;\ntypedef struct asn1_string_st ASN1_UTCTIME;\ntypedef struct asn1_string_st ASN1_TIME;\ntypedef struct asn1_string_st ASN1_GENERALIZEDTIME;\ntypedef struct asn1_string_st ASN1_VISIBLESTRING;\ntypedef struct asn1_string_st ASN1_UTF8STRING;\ntypedef struct asn1_string_st ASN1_STRING;\ntypedef int ASN1_BOOLEAN;\ntypedef int ASN1_NULL;\n# endif\n\ntypedef struct asn1_object_st ASN1_OBJECT;\n\ntypedef struct ASN1_ITEM_st ASN1_ITEM;\ntypedef struct asn1_pctx_st ASN1_PCTX;\n\n# ifdef OPENSSL_SYS_WIN32\n#  undef X509_NAME\n#  undef X509_EXTENSIONS\n#  undef X509_CERT_PAIR\n#  undef PKCS7_ISSUER_AND_SERIAL\n#  undef OCSP_REQUEST\n#  undef OCSP_RESPONSE\n# endif\n\n# ifdef BIGNUM\n#  undef BIGNUM\n# endif\ntypedef struct bignum_st BIGNUM;\ntypedef struct bignum_ctx BN_CTX;\ntypedef struct bn_blinding_st BN_BLINDING;\ntypedef struct bn_mont_ctx_st BN_MONT_CTX;\ntypedef struct bn_recp_ctx_st BN_RECP_CTX;\ntypedef struct bn_gencb_st BN_GENCB;\n\ntypedef struct buf_mem_st BUF_MEM;\n\ntypedef struct evp_cipher_st EVP_CIPHER;\ntypedef struct evp_cipher_ctx_st EVP_CIPHER_CTX;\ntypedef struct env_md_st EVP_MD;\ntypedef struct env_md_ctx_st EVP_MD_CTX;\ntypedef struct evp_pkey_st EVP_PKEY;\n\ntypedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;\n\ntypedef struct evp_pkey_method_st EVP_PKEY_METHOD;\ntypedef struct evp_pkey_ctx_st EVP_PKEY_CTX;\n\ntypedef struct dh_st DH;\ntypedef struct dh_method DH_METHOD;\n\ntypedef struct dsa_st DSA;\ntypedef struct dsa_method DSA_METHOD;\n\ntypedef struct rsa_st RSA;\ntypedef struct rsa_meth_st RSA_METHOD;\n\ntypedef struct rand_meth_st RAND_METHOD;\n\ntypedef struct ecdh_method ECDH_METHOD;\ntypedef struct ecdsa_method ECDSA_METHOD;\n\ntypedef struct x509_st X509;\ntypedef struct X509_algor_st X509_ALGOR;\ntypedef struct X509_crl_st X509_CRL;\ntypedef struct x509_crl_method_st X509_CRL_METHOD;\ntypedef struct x509_revoked_st X509_REVOKED;\ntypedef struct X509_name_st X509_NAME;\ntypedef struct X509_pubkey_st X509_PUBKEY;\ntypedef struct x509_store_st X509_STORE;\ntypedef struct x509_store_ctx_st X509_STORE_CTX;\n\ntypedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO;\n\ntypedef struct v3_ext_ctx X509V3_CTX;\ntypedef struct conf_st CONF;\n\ntypedef struct store_st STORE;\ntypedef struct store_method_st STORE_METHOD;\n\ntypedef struct ui_st UI;\ntypedef struct ui_method_st UI_METHOD;\n\ntypedef struct st_ERR_FNS ERR_FNS;\n\ntypedef struct engine_st ENGINE;\ntypedef struct ssl_st SSL;\ntypedef struct ssl_ctx_st SSL_CTX;\n\ntypedef struct X509_POLICY_NODE_st X509_POLICY_NODE;\ntypedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL;\ntypedef struct X509_POLICY_TREE_st X509_POLICY_TREE;\ntypedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE;\n\ntypedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID;\ntypedef struct DIST_POINT_st DIST_POINT;\ntypedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT;\ntypedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS;\n\n  /* If placed in pkcs12.h, we end up with a circular depency with pkcs7.h */\n# define DECLARE_PKCS12_STACK_OF(type)/* Nothing */\n# define IMPLEMENT_PKCS12_STACK_OF(type)/* Nothing */\n\ntypedef struct crypto_ex_data_st CRYPTO_EX_DATA;\n/* Callback types for crypto.h */\ntypedef int CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad,\n                           int idx, long argl, void *argp);\ntypedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad,\n                             int idx, long argl, void *argp);\ntypedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from,\n                           void *from_d, int idx, long argl, void *argp);\n\ntypedef struct ocsp_req_ctx_st OCSP_REQ_CTX;\ntypedef struct ocsp_response_st OCSP_RESPONSE;\ntypedef struct ocsp_responder_id_st OCSP_RESPID;\n\n#ifdef  __cplusplus\n}\n#endif\n#endif                          /* def HEADER_OPENSSL_TYPES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/pem.h",
    "content": "/* crypto/pem/pem.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_PEM_H\n# define HEADER_PEM_H\n\n# include <openssl/e_os2.h>\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# ifndef OPENSSL_NO_STACK\n#  include <openssl/stack.h>\n# endif\n# include <openssl/evp.h>\n# include <openssl/x509.h>\n# include <openssl/pem2.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define PEM_BUFSIZE             1024\n\n# define PEM_OBJ_UNDEF           0\n# define PEM_OBJ_X509            1\n# define PEM_OBJ_X509_REQ        2\n# define PEM_OBJ_CRL             3\n# define PEM_OBJ_SSL_SESSION     4\n# define PEM_OBJ_PRIV_KEY        10\n# define PEM_OBJ_PRIV_RSA        11\n# define PEM_OBJ_PRIV_DSA        12\n# define PEM_OBJ_PRIV_DH         13\n# define PEM_OBJ_PUB_RSA         14\n# define PEM_OBJ_PUB_DSA         15\n# define PEM_OBJ_PUB_DH          16\n# define PEM_OBJ_DHPARAMS        17\n# define PEM_OBJ_DSAPARAMS       18\n# define PEM_OBJ_PRIV_RSA_PUBLIC 19\n# define PEM_OBJ_PRIV_ECDSA      20\n# define PEM_OBJ_PUB_ECDSA       21\n# define PEM_OBJ_ECPARAMETERS    22\n\n# define PEM_ERROR               30\n# define PEM_DEK_DES_CBC         40\n# define PEM_DEK_IDEA_CBC        45\n# define PEM_DEK_DES_EDE         50\n# define PEM_DEK_DES_ECB         60\n# define PEM_DEK_RSA             70\n# define PEM_DEK_RSA_MD2         80\n# define PEM_DEK_RSA_MD5         90\n\n# define PEM_MD_MD2              NID_md2\n# define PEM_MD_MD5              NID_md5\n# define PEM_MD_SHA              NID_sha\n# define PEM_MD_MD2_RSA          NID_md2WithRSAEncryption\n# define PEM_MD_MD5_RSA          NID_md5WithRSAEncryption\n# define PEM_MD_SHA_RSA          NID_sha1WithRSAEncryption\n\n# define PEM_STRING_X509_OLD     \"X509 CERTIFICATE\"\n# define PEM_STRING_X509         \"CERTIFICATE\"\n# define PEM_STRING_X509_PAIR    \"CERTIFICATE PAIR\"\n# define PEM_STRING_X509_TRUSTED \"TRUSTED CERTIFICATE\"\n# define PEM_STRING_X509_REQ_OLD \"NEW CERTIFICATE REQUEST\"\n# define PEM_STRING_X509_REQ     \"CERTIFICATE REQUEST\"\n# define PEM_STRING_X509_CRL     \"X509 CRL\"\n# define PEM_STRING_EVP_PKEY     \"ANY PRIVATE KEY\"\n# define PEM_STRING_PUBLIC       \"PUBLIC KEY\"\n# define PEM_STRING_RSA          \"RSA PRIVATE KEY\"\n# define PEM_STRING_RSA_PUBLIC   \"RSA PUBLIC KEY\"\n# define PEM_STRING_DSA          \"DSA PRIVATE KEY\"\n# define PEM_STRING_DSA_PUBLIC   \"DSA PUBLIC KEY\"\n# define PEM_STRING_PKCS7        \"PKCS7\"\n# define PEM_STRING_PKCS7_SIGNED \"PKCS #7 SIGNED DATA\"\n# define PEM_STRING_PKCS8        \"ENCRYPTED PRIVATE KEY\"\n# define PEM_STRING_PKCS8INF     \"PRIVATE KEY\"\n# define PEM_STRING_DHPARAMS     \"DH PARAMETERS\"\n# define PEM_STRING_DHXPARAMS    \"X9.42 DH PARAMETERS\"\n# define PEM_STRING_SSL_SESSION  \"SSL SESSION PARAMETERS\"\n# define PEM_STRING_DSAPARAMS    \"DSA PARAMETERS\"\n# define PEM_STRING_ECDSA_PUBLIC \"ECDSA PUBLIC KEY\"\n# define PEM_STRING_ECPARAMETERS \"EC PARAMETERS\"\n# define PEM_STRING_ECPRIVATEKEY \"EC PRIVATE KEY\"\n# define PEM_STRING_PARAMETERS   \"PARAMETERS\"\n# define PEM_STRING_CMS          \"CMS\"\n\n  /*\n   * Note that this structure is initialised by PEM_SealInit and cleaned up\n   * by PEM_SealFinal (at least for now)\n   */\ntypedef struct PEM_Encode_Seal_st {\n    EVP_ENCODE_CTX encode;\n    EVP_MD_CTX md;\n    EVP_CIPHER_CTX cipher;\n} PEM_ENCODE_SEAL_CTX;\n\n/* enc_type is one off */\n# define PEM_TYPE_ENCRYPTED      10\n# define PEM_TYPE_MIC_ONLY       20\n# define PEM_TYPE_MIC_CLEAR      30\n# define PEM_TYPE_CLEAR          40\n\ntypedef struct pem_recip_st {\n    char *name;\n    X509_NAME *dn;\n    int cipher;\n    int key_enc;\n    /*      char iv[8]; unused and wrong size */\n} PEM_USER;\n\ntypedef struct pem_ctx_st {\n    int type;                   /* what type of object */\n    struct {\n        int version;\n        int mode;\n    } proc_type;\n\n    char *domain;\n\n    struct {\n        int cipher;\n        /*-\n        unused, and wrong size\n        unsigned char iv[8]; */\n    } DEK_info;\n\n    PEM_USER *originator;\n\n    int num_recipient;\n    PEM_USER **recipient;\n/*-\n    XXX(ben): don#t think this is used!\n        STACK *x509_chain;      / * certificate chain */\n    EVP_MD *md;                 /* signature type */\n\n    int md_enc;                 /* is the md encrypted or not? */\n    int md_len;                 /* length of md_data */\n    char *md_data;              /* message digest, could be pkey encrypted */\n\n    EVP_CIPHER *dec;            /* date encryption cipher */\n    int key_len;                /* key length */\n    unsigned char *key;         /* key */\n  /*-\n    unused, and wrong size\n    unsigned char iv[8]; */\n\n    int data_enc;               /* is the data encrypted */\n    int data_len;\n    unsigned char *data;\n} PEM_CTX;\n\n/*\n * These macros make the PEM_read/PEM_write functions easier to maintain and\n * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or\n * IMPLEMENT_PEM_rw_cb(...)\n */\n\n# ifdef OPENSSL_NO_FP_API\n\n#  define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/\n#  define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/\n#  define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/\n#  define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/\n#  define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/\n# else\n\n#  define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \\\ntype *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\\\n{ \\\nreturn PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \\\n}\n\n#  define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \\\nint PEM_write_##name(FILE *fp, type *x) \\\n{ \\\nreturn PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \\\n}\n\n#  define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \\\nint PEM_write_##name(FILE *fp, const type *x) \\\n{ \\\nreturn PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \\\n}\n\n#  define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \\\nint PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, \\\n                  void *u) \\\n        { \\\n        return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \\\n        }\n\n#  define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \\\nint PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, \\\n                  void *u) \\\n        { \\\n        return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \\\n        }\n\n# endif\n\n# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \\\ntype *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\\\n{ \\\nreturn PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \\\n}\n\n# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \\\nint PEM_write_bio_##name(BIO *bp, type *x) \\\n{ \\\nreturn PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \\\n}\n\n# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \\\nint PEM_write_bio_##name(BIO *bp, const type *x) \\\n{ \\\nreturn PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \\\n}\n\n# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \\\nint PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \\\n        { \\\n        return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \\\n        }\n\n# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \\\nint PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \\\n        { \\\n        return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \\\n        }\n\n# define IMPLEMENT_PEM_write(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_bio(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_fp(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_fp_const(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_read(name, type, str, asn1) \\\n        IMPLEMENT_PEM_read_bio(name, type, str, asn1) \\\n        IMPLEMENT_PEM_read_fp(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_rw(name, type, str, asn1) \\\n        IMPLEMENT_PEM_read(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \\\n        IMPLEMENT_PEM_read(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_const(name, type, str, asn1)\n\n# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \\\n        IMPLEMENT_PEM_read(name, type, str, asn1) \\\n        IMPLEMENT_PEM_write_cb(name, type, str, asn1)\n\n/* These are the same except they are for the declarations */\n\n# if defined(OPENSSL_NO_FP_API)\n\n#  define DECLARE_PEM_read_fp(name, type) /**/\n#  define DECLARE_PEM_write_fp(name, type) /**/\n#  define DECLARE_PEM_write_cb_fp(name, type) /**/\n# else\n\n#  define DECLARE_PEM_read_fp(name, type) \\\n        type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u);\n\n#  define DECLARE_PEM_write_fp(name, type) \\\n        int PEM_write_##name(FILE *fp, type *x);\n\n#  define DECLARE_PEM_write_fp_const(name, type) \\\n        int PEM_write_##name(FILE *fp, const type *x);\n\n#  define DECLARE_PEM_write_cb_fp(name, type) \\\n        int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, void *u);\n\n# endif\n\n# ifndef OPENSSL_NO_BIO\n#  define DECLARE_PEM_read_bio(name, type) \\\n        type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u);\n\n#  define DECLARE_PEM_write_bio(name, type) \\\n        int PEM_write_bio_##name(BIO *bp, type *x);\n\n#  define DECLARE_PEM_write_bio_const(name, type) \\\n        int PEM_write_bio_##name(BIO *bp, const type *x);\n\n#  define DECLARE_PEM_write_cb_bio(name, type) \\\n        int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \\\n             unsigned char *kstr, int klen, pem_password_cb *cb, void *u);\n\n# else\n\n#  define DECLARE_PEM_read_bio(name, type) /**/\n#  define DECLARE_PEM_write_bio(name, type) /**/\n#  define DECLARE_PEM_write_bio_const(name, type) /**/\n#  define DECLARE_PEM_write_cb_bio(name, type) /**/\n# endif\n# define DECLARE_PEM_write(name, type) \\\n        DECLARE_PEM_write_bio(name, type) \\\n        DECLARE_PEM_write_fp(name, type)\n# define DECLARE_PEM_write_const(name, type) \\\n        DECLARE_PEM_write_bio_const(name, type) \\\n        DECLARE_PEM_write_fp_const(name, type)\n# define DECLARE_PEM_write_cb(name, type) \\\n        DECLARE_PEM_write_cb_bio(name, type) \\\n        DECLARE_PEM_write_cb_fp(name, type)\n# define DECLARE_PEM_read(name, type) \\\n        DECLARE_PEM_read_bio(name, type) \\\n        DECLARE_PEM_read_fp(name, type)\n# define DECLARE_PEM_rw(name, type) \\\n        DECLARE_PEM_read(name, type) \\\n        DECLARE_PEM_write(name, type)\n# define DECLARE_PEM_rw_const(name, type) \\\n        DECLARE_PEM_read(name, type) \\\n        DECLARE_PEM_write_const(name, type)\n# define DECLARE_PEM_rw_cb(name, type) \\\n        DECLARE_PEM_read(name, type) \\\n        DECLARE_PEM_write_cb(name, type)\n# if 1\n/* \"userdata\": new with OpenSSL 0.9.4 */\ntypedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata);\n# else\n/* OpenSSL 0.9.3, 0.9.3a */\ntypedef int pem_password_cb (char *buf, int size, int rwflag);\n# endif\n\nint PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher);\nint PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len,\n                  pem_password_cb *callback, void *u);\n\n# ifndef OPENSSL_NO_BIO\nint PEM_read_bio(BIO *bp, char **name, char **header,\n                 unsigned char **data, long *len);\nint PEM_write_bio(BIO *bp, const char *name, const char *hdr,\n                  const unsigned char *data, long len);\nint PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm,\n                       const char *name, BIO *bp, pem_password_cb *cb,\n                       void *u);\nvoid *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x,\n                        pem_password_cb *cb, void *u);\nint PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x,\n                       const EVP_CIPHER *enc, unsigned char *kstr, int klen,\n                       pem_password_cb *cb, void *u);\n\nSTACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk,\n                                            pem_password_cb *cb, void *u);\nint PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,\n                            unsigned char *kstr, int klen,\n                            pem_password_cb *cd, void *u);\n# endif\n\nint PEM_read(FILE *fp, char **name, char **header,\n             unsigned char **data, long *len);\nint PEM_write(FILE *fp, const char *name, const char *hdr,\n              const unsigned char *data, long len);\nvoid *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x,\n                    pem_password_cb *cb, void *u);\nint PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,\n                   void *x, const EVP_CIPHER *enc, unsigned char *kstr,\n                   int klen, pem_password_cb *callback, void *u);\nSTACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk,\n                                        pem_password_cb *cb, void *u);\n\nint PEM_SealInit(PEM_ENCODE_SEAL_CTX *ctx, EVP_CIPHER *type,\n                 EVP_MD *md_type, unsigned char **ek, int *ekl,\n                 unsigned char *iv, EVP_PKEY **pubk, int npubk);\nvoid PEM_SealUpdate(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *out, int *outl,\n                    unsigned char *in, int inl);\nint PEM_SealFinal(PEM_ENCODE_SEAL_CTX *ctx, unsigned char *sig, int *sigl,\n                  unsigned char *out, int *outl, EVP_PKEY *priv);\n\nvoid PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type);\nvoid PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt);\nint PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,\n                  unsigned int *siglen, EVP_PKEY *pkey);\n\nint PEM_def_callback(char *buf, int num, int w, void *key);\nvoid PEM_proc_type(char *buf, int type);\nvoid PEM_dek_info(char *buf, const char *type, int len, char *str);\n\n# include <openssl/symhacks.h>\n\nDECLARE_PEM_rw(X509, X509)\nDECLARE_PEM_rw(X509_AUX, X509)\nDECLARE_PEM_rw(X509_CERT_PAIR, X509_CERT_PAIR)\nDECLARE_PEM_rw(X509_REQ, X509_REQ)\nDECLARE_PEM_write(X509_REQ_NEW, X509_REQ)\nDECLARE_PEM_rw(X509_CRL, X509_CRL)\nDECLARE_PEM_rw(PKCS7, PKCS7)\nDECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE)\nDECLARE_PEM_rw(PKCS8, X509_SIG)\nDECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO)\n# ifndef OPENSSL_NO_RSA\nDECLARE_PEM_rw_cb(RSAPrivateKey, RSA)\nDECLARE_PEM_rw_const(RSAPublicKey, RSA)\nDECLARE_PEM_rw(RSA_PUBKEY, RSA)\n# endif\n# ifndef OPENSSL_NO_DSA\nDECLARE_PEM_rw_cb(DSAPrivateKey, DSA)\nDECLARE_PEM_rw(DSA_PUBKEY, DSA)\nDECLARE_PEM_rw_const(DSAparams, DSA)\n# endif\n# ifndef OPENSSL_NO_EC\nDECLARE_PEM_rw_const(ECPKParameters, EC_GROUP)\nDECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY)\nDECLARE_PEM_rw(EC_PUBKEY, EC_KEY)\n# endif\n# ifndef OPENSSL_NO_DH\nDECLARE_PEM_rw_const(DHparams, DH)\nDECLARE_PEM_write_const(DHxparams, DH)\n# endif\nDECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY)\nDECLARE_PEM_rw(PUBKEY, EVP_PKEY)\n\nint PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid,\n                                      char *kstr, int klen,\n                                      pem_password_cb *cb, void *u);\nint PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *,\n                                  char *, int, pem_password_cb *, void *);\nint i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,\n                            char *kstr, int klen,\n                            pem_password_cb *cb, void *u);\nint i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid,\n                                char *kstr, int klen,\n                                pem_password_cb *cb, void *u);\nEVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb,\n                                  void *u);\n\nint i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,\n                           char *kstr, int klen,\n                           pem_password_cb *cb, void *u);\nint i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid,\n                               char *kstr, int klen,\n                               pem_password_cb *cb, void *u);\nint PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid,\n                                  char *kstr, int klen,\n                                  pem_password_cb *cb, void *u);\n\nEVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb,\n                                 void *u);\n\nint PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,\n                              char *kstr, int klen, pem_password_cb *cd,\n                              void *u);\n\nEVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x);\nint PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x);\n\nEVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length);\nEVP_PKEY *b2i_PublicKey(const unsigned char **in, long length);\nEVP_PKEY *b2i_PrivateKey_bio(BIO *in);\nEVP_PKEY *b2i_PublicKey_bio(BIO *in);\nint i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk);\nint i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk);\n# ifndef OPENSSL_NO_RC4\nEVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u);\nint i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel,\n                pem_password_cb *cb, void *u);\n# endif\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_PEM_strings(void);\n\n/* Error codes for the PEM functions. */\n\n/* Function codes. */\n# define PEM_F_B2I_DSS                                    127\n# define PEM_F_B2I_PVK_BIO                                128\n# define PEM_F_B2I_RSA                                    129\n# define PEM_F_CHECK_BITLEN_DSA                           130\n# define PEM_F_CHECK_BITLEN_RSA                           131\n# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO                    120\n# define PEM_F_D2I_PKCS8PRIVATEKEY_FP                     121\n# define PEM_F_DO_B2I                                     132\n# define PEM_F_DO_B2I_BIO                                 133\n# define PEM_F_DO_BLOB_HEADER                             134\n# define PEM_F_DO_PK8PKEY                                 126\n# define PEM_F_DO_PK8PKEY_FP                              125\n# define PEM_F_DO_PVK_BODY                                135\n# define PEM_F_DO_PVK_HEADER                              136\n# define PEM_F_I2B_PVK                                    137\n# define PEM_F_I2B_PVK_BIO                                138\n# define PEM_F_LOAD_IV                                    101\n# define PEM_F_PEM_ASN1_READ                              102\n# define PEM_F_PEM_ASN1_READ_BIO                          103\n# define PEM_F_PEM_ASN1_WRITE                             104\n# define PEM_F_PEM_ASN1_WRITE_BIO                         105\n# define PEM_F_PEM_DEF_CALLBACK                           100\n# define PEM_F_PEM_DO_HEADER                              106\n# define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY            118\n# define PEM_F_PEM_GET_EVP_CIPHER_INFO                    107\n# define PEM_F_PEM_PK8PKEY                                119\n# define PEM_F_PEM_READ                                   108\n# define PEM_F_PEM_READ_BIO                               109\n# define PEM_F_PEM_READ_BIO_DHPARAMS                      141\n# define PEM_F_PEM_READ_BIO_PARAMETERS                    140\n# define PEM_F_PEM_READ_BIO_PRIVATEKEY                    123\n# define PEM_F_PEM_READ_DHPARAMS                          142\n# define PEM_F_PEM_READ_PRIVATEKEY                        124\n# define PEM_F_PEM_SEALFINAL                              110\n# define PEM_F_PEM_SEALINIT                               111\n# define PEM_F_PEM_SIGNFINAL                              112\n# define PEM_F_PEM_WRITE                                  113\n# define PEM_F_PEM_WRITE_BIO                              114\n# define PEM_F_PEM_WRITE_PRIVATEKEY                       139\n# define PEM_F_PEM_X509_INFO_READ                         115\n# define PEM_F_PEM_X509_INFO_READ_BIO                     116\n# define PEM_F_PEM_X509_INFO_WRITE_BIO                    117\n\n/* Reason codes. */\n# define PEM_R_BAD_BASE64_DECODE                          100\n# define PEM_R_BAD_DECRYPT                                101\n# define PEM_R_BAD_END_LINE                               102\n# define PEM_R_BAD_IV_CHARS                               103\n# define PEM_R_BAD_MAGIC_NUMBER                           116\n# define PEM_R_BAD_PASSWORD_READ                          104\n# define PEM_R_BAD_VERSION_NUMBER                         117\n# define PEM_R_BIO_WRITE_FAILURE                          118\n# define PEM_R_CIPHER_IS_NULL                             127\n# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY               115\n# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB                 119\n# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB                  120\n# define PEM_R_INCONSISTENT_HEADER                        121\n# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR                 122\n# define PEM_R_KEYBLOB_TOO_SHORT                          123\n# define PEM_R_NOT_DEK_INFO                               105\n# define PEM_R_NOT_ENCRYPTED                              106\n# define PEM_R_NOT_PROC_TYPE                              107\n# define PEM_R_NO_START_LINE                              108\n# define PEM_R_PROBLEMS_GETTING_PASSWORD                  109\n# define PEM_R_PUBLIC_KEY_NO_RSA                          110\n# define PEM_R_PVK_DATA_TOO_SHORT                         124\n# define PEM_R_PVK_TOO_SHORT                              125\n# define PEM_R_READ_KEY                                   111\n# define PEM_R_SHORT_HEADER                               112\n# define PEM_R_UNSUPPORTED_CIPHER                         113\n# define PEM_R_UNSUPPORTED_ENCRYPTION                     114\n# define PEM_R_UNSUPPORTED_KEY_COMPONENTS                 126\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/pem2.h",
    "content": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n/*\n * This header only exists to break a circular dependency between pem and err\n * Ben 30 Jan 1999.\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef HEADER_PEM_H\nvoid ERR_load_PEM_strings(void);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/pkcs12.h",
    "content": "/* pkcs12.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 1999.\n */\n/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_PKCS12_H\n# define HEADER_PKCS12_H\n\n# include <openssl/bio.h>\n# include <openssl/x509.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# define PKCS12_KEY_ID   1\n# define PKCS12_IV_ID    2\n# define PKCS12_MAC_ID   3\n\n/* Default iteration count */\n# ifndef PKCS12_DEFAULT_ITER\n#  define PKCS12_DEFAULT_ITER     PKCS5_DEFAULT_ITER\n# endif\n\n# define PKCS12_MAC_KEY_LENGTH 20\n\n# define PKCS12_SALT_LEN 8\n\n/* Uncomment out next line for unicode password and names, otherwise ASCII */\n\n/*\n * #define PBE_UNICODE\n */\n\n# ifdef PBE_UNICODE\n#  define PKCS12_key_gen PKCS12_key_gen_uni\n#  define PKCS12_add_friendlyname PKCS12_add_friendlyname_uni\n# else\n#  define PKCS12_key_gen PKCS12_key_gen_asc\n#  define PKCS12_add_friendlyname PKCS12_add_friendlyname_asc\n# endif\n\n/* MS key usage constants */\n\n# define KEY_EX  0x10\n# define KEY_SIG 0x80\n\ntypedef struct {\n    X509_SIG *dinfo;\n    ASN1_OCTET_STRING *salt;\n    ASN1_INTEGER *iter;         /* defaults to 1 */\n} PKCS12_MAC_DATA;\n\ntypedef struct {\n    ASN1_INTEGER *version;\n    PKCS12_MAC_DATA *mac;\n    PKCS7 *authsafes;\n} PKCS12;\n\ntypedef struct {\n    ASN1_OBJECT *type;\n    union {\n        struct pkcs12_bag_st *bag; /* secret, crl and certbag */\n        struct pkcs8_priv_key_info_st *keybag; /* keybag */\n        X509_SIG *shkeybag;     /* shrouded key bag */\n        STACK_OF(PKCS12_SAFEBAG) *safes;\n        ASN1_TYPE *other;\n    } value;\n    STACK_OF(X509_ATTRIBUTE) *attrib;\n} PKCS12_SAFEBAG;\n\nDECLARE_STACK_OF(PKCS12_SAFEBAG)\nDECLARE_ASN1_SET_OF(PKCS12_SAFEBAG)\nDECLARE_PKCS12_STACK_OF(PKCS12_SAFEBAG)\n\ntypedef struct pkcs12_bag_st {\n    ASN1_OBJECT *type;\n    union {\n        ASN1_OCTET_STRING *x509cert;\n        ASN1_OCTET_STRING *x509crl;\n        ASN1_OCTET_STRING *octet;\n        ASN1_IA5STRING *sdsicert;\n        ASN1_TYPE *other;       /* Secret or other bag */\n    } value;\n} PKCS12_BAGS;\n\n# define PKCS12_ERROR    0\n# define PKCS12_OK       1\n\n/* Compatibility macros */\n\n# define M_PKCS12_x5092certbag PKCS12_x5092certbag\n# define M_PKCS12_x509crl2certbag PKCS12_x509crl2certbag\n\n# define M_PKCS12_certbag2x509 PKCS12_certbag2x509\n# define M_PKCS12_certbag2x509crl PKCS12_certbag2x509crl\n\n# define M_PKCS12_unpack_p7data PKCS12_unpack_p7data\n# define M_PKCS12_pack_authsafes PKCS12_pack_authsafes\n# define M_PKCS12_unpack_authsafes PKCS12_unpack_authsafes\n# define M_PKCS12_unpack_p7encdata PKCS12_unpack_p7encdata\n\n# define M_PKCS12_decrypt_skey PKCS12_decrypt_skey\n# define M_PKCS8_decrypt PKCS8_decrypt\n\n# define M_PKCS12_bag_type(bg) OBJ_obj2nid((bg)->type)\n# define M_PKCS12_cert_bag_type(bg) OBJ_obj2nid((bg)->value.bag->type)\n# define M_PKCS12_crl_bag_type M_PKCS12_cert_bag_type\n\n# define PKCS12_get_attr(bag, attr_nid) \\\n                         PKCS12_get_attr_gen(bag->attrib, attr_nid)\n\n# define PKCS8_get_attr(p8, attr_nid) \\\n                PKCS12_get_attr_gen(p8->attributes, attr_nid)\n\n# define PKCS12_mac_present(p12) ((p12)->mac ? 1 : 0)\n\nPKCS12_SAFEBAG *PKCS12_x5092certbag(X509 *x509);\nPKCS12_SAFEBAG *PKCS12_x509crl2certbag(X509_CRL *crl);\nX509 *PKCS12_certbag2x509(PKCS12_SAFEBAG *bag);\nX509_CRL *PKCS12_certbag2x509crl(PKCS12_SAFEBAG *bag);\n\nPKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it,\n                                         int nid1, int nid2);\nPKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG(PKCS8_PRIV_KEY_INFO *p8);\nPKCS8_PRIV_KEY_INFO *PKCS8_decrypt(X509_SIG *p8, const char *pass,\n                                   int passlen);\nPKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(PKCS12_SAFEBAG *bag,\n                                         const char *pass, int passlen);\nX509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher,\n                        const char *pass, int passlen, unsigned char *salt,\n                        int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8);\nPKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass,\n                                     int passlen, unsigned char *salt,\n                                     int saltlen, int iter,\n                                     PKCS8_PRIV_KEY_INFO *p8);\nPKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk);\nSTACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7);\nPKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen,\n                             unsigned char *salt, int saltlen, int iter,\n                             STACK_OF(PKCS12_SAFEBAG) *bags);\nSTACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass,\n                                                  int passlen);\n\nint PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes);\nSTACK_OF(PKCS7) *PKCS12_unpack_authsafes(PKCS12 *p12);\n\nint PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name,\n                          int namelen);\nint PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name,\n                                int namelen);\nint PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name,\n                           int namelen);\nint PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag,\n                                const unsigned char *name, int namelen);\nint PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage);\nASN1_TYPE *PKCS12_get_attr_gen(STACK_OF(X509_ATTRIBUTE) *attrs, int attr_nid);\nchar *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag);\nunsigned char *PKCS12_pbe_crypt(X509_ALGOR *algor, const char *pass,\n                                int passlen, unsigned char *in, int inlen,\n                                unsigned char **data, int *datalen,\n                                int en_de);\nvoid *PKCS12_item_decrypt_d2i(X509_ALGOR *algor, const ASN1_ITEM *it,\n                              const char *pass, int passlen,\n                              ASN1_OCTET_STRING *oct, int zbuf);\nASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor,\n                                           const ASN1_ITEM *it,\n                                           const char *pass, int passlen,\n                                           void *obj, int zbuf);\nPKCS12 *PKCS12_init(int mode);\nint PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt,\n                       int saltlen, int id, int iter, int n,\n                       unsigned char *out, const EVP_MD *md_type);\nint PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt,\n                       int saltlen, int id, int iter, int n,\n                       unsigned char *out, const EVP_MD *md_type);\nint PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,\n                        ASN1_TYPE *param, const EVP_CIPHER *cipher,\n                        const EVP_MD *md_type, int en_de);\nint PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen,\n                   unsigned char *mac, unsigned int *maclen);\nint PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen);\nint PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen,\n                   unsigned char *salt, int saltlen, int iter,\n                   const EVP_MD *md_type);\nint PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt,\n                     int saltlen, const EVP_MD *md_type);\nunsigned char *OPENSSL_asc2uni(const char *asc, int asclen,\n                               unsigned char **uni, int *unilen);\nchar *OPENSSL_uni2asc(unsigned char *uni, int unilen);\n\nDECLARE_ASN1_FUNCTIONS(PKCS12)\nDECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA)\nDECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG)\nDECLARE_ASN1_FUNCTIONS(PKCS12_BAGS)\n\nDECLARE_ASN1_ITEM(PKCS12_SAFEBAGS)\nDECLARE_ASN1_ITEM(PKCS12_AUTHSAFES)\n\nvoid PKCS12_PBE_add(void);\nint PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert,\n                 STACK_OF(X509) **ca);\nPKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert,\n                      STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter,\n                      int mac_iter, int keytype);\n\nPKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert);\nPKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags,\n                               EVP_PKEY *key, int key_usage, int iter,\n                               int key_nid, char *pass);\nint PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags,\n                    int safe_nid, int iter, char *pass);\nPKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid);\n\nint i2d_PKCS12_bio(BIO *bp, PKCS12 *p12);\nint i2d_PKCS12_fp(FILE *fp, PKCS12 *p12);\nPKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12);\nPKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12);\nint PKCS12_newpass(PKCS12 *p12, char *oldpass, char *newpass);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_PKCS12_strings(void);\n\n/* Error codes for the PKCS12 functions. */\n\n/* Function codes. */\n# define PKCS12_F_PARSE_BAG                               129\n# define PKCS12_F_PARSE_BAGS                              103\n# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME                 100\n# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC             127\n# define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI             102\n# define PKCS12_F_PKCS12_ADD_LOCALKEYID                   104\n# define PKCS12_F_PKCS12_CREATE                           105\n# define PKCS12_F_PKCS12_GEN_MAC                          107\n# define PKCS12_F_PKCS12_INIT                             109\n# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I                 106\n# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT                 108\n# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG                117\n# define PKCS12_F_PKCS12_KEY_GEN_ASC                      110\n# define PKCS12_F_PKCS12_KEY_GEN_UNI                      111\n# define PKCS12_F_PKCS12_MAKE_KEYBAG                      112\n# define PKCS12_F_PKCS12_MAKE_SHKEYBAG                    113\n# define PKCS12_F_PKCS12_NEWPASS                          128\n# define PKCS12_F_PKCS12_PACK_P7DATA                      114\n# define PKCS12_F_PKCS12_PACK_P7ENCDATA                   115\n# define PKCS12_F_PKCS12_PARSE                            118\n# define PKCS12_F_PKCS12_PBE_CRYPT                        119\n# define PKCS12_F_PKCS12_PBE_KEYIVGEN                     120\n# define PKCS12_F_PKCS12_SETUP_MAC                        122\n# define PKCS12_F_PKCS12_SET_MAC                          123\n# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES                 130\n# define PKCS12_F_PKCS12_UNPACK_P7DATA                    131\n# define PKCS12_F_PKCS12_VERIFY_MAC                       126\n# define PKCS12_F_PKCS8_ADD_KEYUSAGE                      124\n# define PKCS12_F_PKCS8_ENCRYPT                           125\n\n/* Reason codes. */\n# define PKCS12_R_CANT_PACK_STRUCTURE                     100\n# define PKCS12_R_CONTENT_TYPE_NOT_DATA                   121\n# define PKCS12_R_DECODE_ERROR                            101\n# define PKCS12_R_ENCODE_ERROR                            102\n# define PKCS12_R_ENCRYPT_ERROR                           103\n# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE       120\n# define PKCS12_R_INVALID_NULL_ARGUMENT                   104\n# define PKCS12_R_INVALID_NULL_PKCS12_POINTER             105\n# define PKCS12_R_IV_GEN_ERROR                            106\n# define PKCS12_R_KEY_GEN_ERROR                           107\n# define PKCS12_R_MAC_ABSENT                              108\n# define PKCS12_R_MAC_GENERATION_ERROR                    109\n# define PKCS12_R_MAC_SETUP_ERROR                         110\n# define PKCS12_R_MAC_STRING_SET_ERROR                    111\n# define PKCS12_R_MAC_VERIFY_ERROR                        112\n# define PKCS12_R_MAC_VERIFY_FAILURE                      113\n# define PKCS12_R_PARSE_ERROR                             114\n# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR           115\n# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR                116\n# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR                  117\n# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM                118\n# define PKCS12_R_UNSUPPORTED_PKCS12_MODE                 119\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/pkcs7.h",
    "content": "/* crypto/pkcs7/pkcs7.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_PKCS7_H\n# define HEADER_PKCS7_H\n\n# include <openssl/asn1.h>\n# include <openssl/bio.h>\n# include <openssl/e_os2.h>\n\n# include <openssl/symhacks.h>\n# include <openssl/ossl_typ.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_SYS_WIN32\n/* Under Win32 thes are defined in wincrypt.h */\n#  undef PKCS7_ISSUER_AND_SERIAL\n#  undef PKCS7_SIGNER_INFO\n# endif\n\n/*-\nEncryption_ID           DES-CBC\nDigest_ID               MD5\nDigest_Encryption_ID    rsaEncryption\nKey_Encryption_ID       rsaEncryption\n*/\n\ntypedef struct pkcs7_issuer_and_serial_st {\n    X509_NAME *issuer;\n    ASN1_INTEGER *serial;\n} PKCS7_ISSUER_AND_SERIAL;\n\ntypedef struct pkcs7_signer_info_st {\n    ASN1_INTEGER *version;      /* version 1 */\n    PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;\n    X509_ALGOR *digest_alg;\n    STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */\n    X509_ALGOR *digest_enc_alg;\n    ASN1_OCTET_STRING *enc_digest;\n    STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */\n    /* The private key to sign with */\n    EVP_PKEY *pkey;\n} PKCS7_SIGNER_INFO;\n\nDECLARE_STACK_OF(PKCS7_SIGNER_INFO)\nDECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO)\n\ntypedef struct pkcs7_recip_info_st {\n    ASN1_INTEGER *version;      /* version 0 */\n    PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;\n    X509_ALGOR *key_enc_algor;\n    ASN1_OCTET_STRING *enc_key;\n    X509 *cert;                 /* get the pub-key from this */\n} PKCS7_RECIP_INFO;\n\nDECLARE_STACK_OF(PKCS7_RECIP_INFO)\nDECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO)\n\ntypedef struct pkcs7_signed_st {\n    ASN1_INTEGER *version;      /* version 1 */\n    STACK_OF(X509_ALGOR) *md_algs; /* md used */\n    STACK_OF(X509) *cert;       /* [ 0 ] */\n    STACK_OF(X509_CRL) *crl;    /* [ 1 ] */\n    STACK_OF(PKCS7_SIGNER_INFO) *signer_info;\n    struct pkcs7_st *contents;\n} PKCS7_SIGNED;\n/*\n * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about\n * merging the two\n */\n\ntypedef struct pkcs7_enc_content_st {\n    ASN1_OBJECT *content_type;\n    X509_ALGOR *algorithm;\n    ASN1_OCTET_STRING *enc_data; /* [ 0 ] */\n    const EVP_CIPHER *cipher;\n} PKCS7_ENC_CONTENT;\n\ntypedef struct pkcs7_enveloped_st {\n    ASN1_INTEGER *version;      /* version 0 */\n    STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;\n    PKCS7_ENC_CONTENT *enc_data;\n} PKCS7_ENVELOPE;\n\ntypedef struct pkcs7_signedandenveloped_st {\n    ASN1_INTEGER *version;      /* version 1 */\n    STACK_OF(X509_ALGOR) *md_algs; /* md used */\n    STACK_OF(X509) *cert;       /* [ 0 ] */\n    STACK_OF(X509_CRL) *crl;    /* [ 1 ] */\n    STACK_OF(PKCS7_SIGNER_INFO) *signer_info;\n    PKCS7_ENC_CONTENT *enc_data;\n    STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;\n} PKCS7_SIGN_ENVELOPE;\n\ntypedef struct pkcs7_digest_st {\n    ASN1_INTEGER *version;      /* version 0 */\n    X509_ALGOR *md;             /* md used */\n    struct pkcs7_st *contents;\n    ASN1_OCTET_STRING *digest;\n} PKCS7_DIGEST;\n\ntypedef struct pkcs7_encrypted_st {\n    ASN1_INTEGER *version;      /* version 0 */\n    PKCS7_ENC_CONTENT *enc_data;\n} PKCS7_ENCRYPT;\n\ntypedef struct pkcs7_st {\n    /*\n     * The following is non NULL if it contains ASN1 encoding of this\n     * structure\n     */\n    unsigned char *asn1;\n    long length;\n# define PKCS7_S_HEADER  0\n# define PKCS7_S_BODY    1\n# define PKCS7_S_TAIL    2\n    int state;                  /* used during processing */\n    int detached;\n    ASN1_OBJECT *type;\n    /* content as defined by the type */\n    /*\n     * all encryption/message digests are applied to the 'contents', leaving\n     * out the 'type' field.\n     */\n    union {\n        char *ptr;\n        /* NID_pkcs7_data */\n        ASN1_OCTET_STRING *data;\n        /* NID_pkcs7_signed */\n        PKCS7_SIGNED *sign;\n        /* NID_pkcs7_enveloped */\n        PKCS7_ENVELOPE *enveloped;\n        /* NID_pkcs7_signedAndEnveloped */\n        PKCS7_SIGN_ENVELOPE *signed_and_enveloped;\n        /* NID_pkcs7_digest */\n        PKCS7_DIGEST *digest;\n        /* NID_pkcs7_encrypted */\n        PKCS7_ENCRYPT *encrypted;\n        /* Anything else */\n        ASN1_TYPE *other;\n    } d;\n} PKCS7;\n\nDECLARE_STACK_OF(PKCS7)\nDECLARE_ASN1_SET_OF(PKCS7)\nDECLARE_PKCS12_STACK_OF(PKCS7)\n\n# define PKCS7_OP_SET_DETACHED_SIGNATURE 1\n# define PKCS7_OP_GET_DETACHED_SIGNATURE 2\n\n# define PKCS7_get_signed_attributes(si) ((si)->auth_attr)\n# define PKCS7_get_attributes(si)        ((si)->unauth_attr)\n\n# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed)\n# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted)\n# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped)\n# define PKCS7_type_is_signedAndEnveloped(a) \\\n                (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped)\n# define PKCS7_type_is_data(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_data)\n# define PKCS7_type_is_digest(a)   (OBJ_obj2nid((a)->type) == NID_pkcs7_digest)\n\n# define PKCS7_set_detached(p,v) \\\n                PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL)\n# define PKCS7_get_detached(p) \\\n                PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL)\n\n# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7))\n\n/* S/MIME related flags */\n\n# define PKCS7_TEXT              0x1\n# define PKCS7_NOCERTS           0x2\n# define PKCS7_NOSIGS            0x4\n# define PKCS7_NOCHAIN           0x8\n# define PKCS7_NOINTERN          0x10\n# define PKCS7_NOVERIFY          0x20\n# define PKCS7_DETACHED          0x40\n# define PKCS7_BINARY            0x80\n# define PKCS7_NOATTR            0x100\n# define PKCS7_NOSMIMECAP        0x200\n# define PKCS7_NOOLDMIMETYPE     0x400\n# define PKCS7_CRLFEOL           0x800\n# define PKCS7_STREAM            0x1000\n# define PKCS7_NOCRL             0x2000\n# define PKCS7_PARTIAL           0x4000\n# define PKCS7_REUSE_DIGEST      0x8000\n\n/* Flags: for compatibility with older code */\n\n# define SMIME_TEXT      PKCS7_TEXT\n# define SMIME_NOCERTS   PKCS7_NOCERTS\n# define SMIME_NOSIGS    PKCS7_NOSIGS\n# define SMIME_NOCHAIN   PKCS7_NOCHAIN\n# define SMIME_NOINTERN  PKCS7_NOINTERN\n# define SMIME_NOVERIFY  PKCS7_NOVERIFY\n# define SMIME_DETACHED  PKCS7_DETACHED\n# define SMIME_BINARY    PKCS7_BINARY\n# define SMIME_NOATTR    PKCS7_NOATTR\n\nDECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL)\n\nint PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data,\n                                   const EVP_MD *type, unsigned char *md,\n                                   unsigned int *len);\n# ifndef OPENSSL_NO_FP_API\nPKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7);\nint i2d_PKCS7_fp(FILE *fp, PKCS7 *p7);\n# endif\nPKCS7 *PKCS7_dup(PKCS7 *p7);\nPKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7);\nint i2d_PKCS7_bio(BIO *bp, PKCS7 *p7);\nint i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);\nint PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags);\n\nDECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO)\nDECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO)\nDECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED)\nDECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT)\nDECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE)\nDECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE)\nDECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST)\nDECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT)\nDECLARE_ASN1_FUNCTIONS(PKCS7)\n\nDECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN)\nDECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY)\n\nDECLARE_ASN1_NDEF_FUNCTION(PKCS7)\nDECLARE_ASN1_PRINT_FUNCTION(PKCS7)\n\nlong PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg);\n\nint PKCS7_set_type(PKCS7 *p7, int type);\nint PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other);\nint PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data);\nint PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey,\n                          const EVP_MD *dgst);\nint PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si);\nint PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i);\nint PKCS7_add_certificate(PKCS7 *p7, X509 *x509);\nint PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509);\nint PKCS7_content_new(PKCS7 *p7, int nid);\nint PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx,\n                     BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si);\nint PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si,\n                          X509 *x509);\n\nBIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio);\nint PKCS7_dataFinal(PKCS7 *p7, BIO *bio);\nBIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert);\n\nPKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509,\n                                       EVP_PKEY *pkey, const EVP_MD *dgst);\nX509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si);\nint PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md);\nSTACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7);\n\nPKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509);\nvoid PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk,\n                                 X509_ALGOR **pdig, X509_ALGOR **psig);\nvoid PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc);\nint PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri);\nint PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509);\nint PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher);\nint PKCS7_stream(unsigned char ***boundary, PKCS7 *p7);\n\nPKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx);\nASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk);\nint PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type,\n                               void *data);\nint PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype,\n                        void *value);\nASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid);\nASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid);\nint PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si,\n                                STACK_OF(X509_ATTRIBUTE) *sk);\nint PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si,\n                         STACK_OF(X509_ATTRIBUTE) *sk);\n\nPKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,\n                  BIO *data, int flags);\n\nPKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7,\n                                         X509 *signcert, EVP_PKEY *pkey,\n                                         const EVP_MD *md, int flags);\n\nint PKCS7_final(PKCS7 *p7, BIO *data, int flags);\nint PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\n                 BIO *indata, BIO *out, int flags);\nSTACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs,\n                                   int flags);\nPKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher,\n                     int flags);\nint PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data,\n                  int flags);\n\nint PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si,\n                              STACK_OF(X509_ALGOR) *cap);\nSTACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si);\nint PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg);\n\nint PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid);\nint PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t);\nint PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si,\n                             const unsigned char *md, int mdlen);\n\nint SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);\nPKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);\n\nBIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_PKCS7_strings(void);\n\n/* Error codes for the PKCS7 functions. */\n\n/* Function codes. */\n# define PKCS7_F_B64_READ_PKCS7                           120\n# define PKCS7_F_B64_WRITE_PKCS7                          121\n# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB                   136\n# define PKCS7_F_I2D_PKCS7_BIO_STREAM                     140\n# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME           135\n# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP                118\n# define PKCS7_F_PKCS7_ADD_CERTIFICATE                    100\n# define PKCS7_F_PKCS7_ADD_CRL                            101\n# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO                 102\n# define PKCS7_F_PKCS7_ADD_SIGNATURE                      131\n# define PKCS7_F_PKCS7_ADD_SIGNER                         103\n# define PKCS7_F_PKCS7_BIO_ADD_DIGEST                     125\n# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST               138\n# define PKCS7_F_PKCS7_CTRL                               104\n# define PKCS7_F_PKCS7_DATADECODE                         112\n# define PKCS7_F_PKCS7_DATAFINAL                          128\n# define PKCS7_F_PKCS7_DATAINIT                           105\n# define PKCS7_F_PKCS7_DATASIGN                           106\n# define PKCS7_F_PKCS7_DATAVERIFY                         107\n# define PKCS7_F_PKCS7_DECRYPT                            114\n# define PKCS7_F_PKCS7_DECRYPT_RINFO                      133\n# define PKCS7_F_PKCS7_ENCODE_RINFO                       132\n# define PKCS7_F_PKCS7_ENCRYPT                            115\n# define PKCS7_F_PKCS7_FINAL                              134\n# define PKCS7_F_PKCS7_FIND_DIGEST                        127\n# define PKCS7_F_PKCS7_GET0_SIGNERS                       124\n# define PKCS7_F_PKCS7_RECIP_INFO_SET                     130\n# define PKCS7_F_PKCS7_SET_CIPHER                         108\n# define PKCS7_F_PKCS7_SET_CONTENT                        109\n# define PKCS7_F_PKCS7_SET_DIGEST                         126\n# define PKCS7_F_PKCS7_SET_TYPE                           110\n# define PKCS7_F_PKCS7_SIGN                               116\n# define PKCS7_F_PKCS7_SIGNATUREVERIFY                    113\n# define PKCS7_F_PKCS7_SIGNER_INFO_SET                    129\n# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN                   139\n# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER                    137\n# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP                    119\n# define PKCS7_F_PKCS7_VERIFY                             117\n# define PKCS7_F_SMIME_READ_PKCS7                         122\n# define PKCS7_F_SMIME_TEXT                               123\n\n/* Reason codes. */\n# define PKCS7_R_CERTIFICATE_VERIFY_ERROR                 117\n# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER          144\n# define PKCS7_R_CIPHER_NOT_INITIALIZED                   116\n# define PKCS7_R_CONTENT_AND_DATA_PRESENT                 118\n# define PKCS7_R_CTRL_ERROR                               152\n# define PKCS7_R_DECODE_ERROR                             130\n# define PKCS7_R_DECRYPTED_KEY_IS_WRONG_LENGTH            100\n# define PKCS7_R_DECRYPT_ERROR                            119\n# define PKCS7_R_DIGEST_FAILURE                           101\n# define PKCS7_R_ENCRYPTION_CTRL_FAILURE                  149\n# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150\n# define PKCS7_R_ERROR_ADDING_RECIPIENT                   120\n# define PKCS7_R_ERROR_SETTING_CIPHER                     121\n# define PKCS7_R_INVALID_MIME_TYPE                        131\n# define PKCS7_R_INVALID_NULL_POINTER                     143\n# define PKCS7_R_INVALID_SIGNED_DATA_TYPE                 155\n# define PKCS7_R_MIME_NO_CONTENT_TYPE                     132\n# define PKCS7_R_MIME_PARSE_ERROR                         133\n# define PKCS7_R_MIME_SIG_PARSE_ERROR                     134\n# define PKCS7_R_MISSING_CERIPEND_INFO                    103\n# define PKCS7_R_NO_CONTENT                               122\n# define PKCS7_R_NO_CONTENT_TYPE                          135\n# define PKCS7_R_NO_DEFAULT_DIGEST                        151\n# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND            154\n# define PKCS7_R_NO_MULTIPART_BODY_FAILURE                136\n# define PKCS7_R_NO_MULTIPART_BOUNDARY                    137\n# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE         115\n# define PKCS7_R_NO_RECIPIENT_MATCHES_KEY                 146\n# define PKCS7_R_NO_SIGNATURES_ON_DATA                    123\n# define PKCS7_R_NO_SIGNERS                               142\n# define PKCS7_R_NO_SIG_CONTENT_TYPE                      138\n# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE     104\n# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR                124\n# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR                   153\n# define PKCS7_R_PKCS7_DATAFINAL                          126\n# define PKCS7_R_PKCS7_DATAFINAL_ERROR                    125\n# define PKCS7_R_PKCS7_DATASIGN                           145\n# define PKCS7_R_PKCS7_PARSE_ERROR                        139\n# define PKCS7_R_PKCS7_SIG_PARSE_ERROR                    140\n# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE   127\n# define PKCS7_R_SIGNATURE_FAILURE                        105\n# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND             128\n# define PKCS7_R_SIGNING_CTRL_FAILURE                     147\n# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE  148\n# define PKCS7_R_SIG_INVALID_MIME_TYPE                    141\n# define PKCS7_R_SMIME_TEXT_ERROR                         129\n# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE               106\n# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO                   107\n# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST            108\n# define PKCS7_R_UNKNOWN_DIGEST_TYPE                      109\n# define PKCS7_R_UNKNOWN_OPERATION                        110\n# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE                  111\n# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE                 112\n# define PKCS7_R_WRONG_CONTENT_TYPE                       113\n# define PKCS7_R_WRONG_PKCS7_TYPE                         114\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/pqueue.h",
    "content": "/* crypto/pqueue/pqueue.h */\n/*\n * DTLS implementation written by Nagendra Modadugu\n * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.\n */\n/* ====================================================================\n * Copyright (c) 1999-2005 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_PQUEUE_H\n# define HEADER_PQUEUE_H\n\n# include <stdio.h>\n# include <stdlib.h>\n# include <string.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\ntypedef struct _pqueue *pqueue;\n\ntypedef struct _pitem {\n    unsigned char priority[8];  /* 64-bit value in big-endian encoding */\n    void *data;\n    struct _pitem *next;\n} pitem;\n\ntypedef struct _pitem *piterator;\n\npitem *pitem_new(unsigned char *prio64be, void *data);\nvoid pitem_free(pitem *item);\n\npqueue pqueue_new(void);\nvoid pqueue_free(pqueue pq);\n\npitem *pqueue_insert(pqueue pq, pitem *item);\npitem *pqueue_peek(pqueue pq);\npitem *pqueue_pop(pqueue pq);\npitem *pqueue_find(pqueue pq, unsigned char *prio64be);\npitem *pqueue_iterator(pqueue pq);\npitem *pqueue_next(piterator *iter);\n\nvoid pqueue_print(pqueue pq);\nint pqueue_size(pqueue pq);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif                          /* ! HEADER_PQUEUE_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/rand.h",
    "content": "/* crypto/rand/rand.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_RAND_H\n# define HEADER_RAND_H\n\n# include <stdlib.h>\n# include \"openssl/ossl_typ.h\"\n# include \"openssl/e_os2.h\"\n\n# if defined(OPENSSL_SYS_WINDOWS)\n#  include <windows.h>\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# if defined(OPENSSL_FIPS)\n#  define FIPS_RAND_SIZE_T size_t\n# endif\n\n/* Already defined in ossl_typ.h */\n/* typedef struct rand_meth_st RAND_METHOD; */\n\nstruct rand_meth_st {\n    void (*seed) (const void *buf, int num);\n    int (*bytes) (unsigned char *buf, int num);\n    void (*cleanup) (void);\n    void (*add) (const void *buf, int num, double entropy);\n    int (*pseudorand) (unsigned char *buf, int num);\n    int (*status) (void);\n};\n\n# ifdef BN_DEBUG\nextern int rand_predictable;\n# endif\n\nint RAND_set_rand_method(const RAND_METHOD *meth);\nconst RAND_METHOD *RAND_get_rand_method(void);\n# ifndef OPENSSL_NO_ENGINE\nint RAND_set_rand_engine(ENGINE *engine);\n# endif\nRAND_METHOD *RAND_SSLeay(void);\nvoid RAND_cleanup(void);\nint RAND_bytes(unsigned char *buf, int num);\nint RAND_pseudo_bytes(unsigned char *buf, int num);\nvoid RAND_seed(const void *buf, int num);\nvoid RAND_add(const void *buf, int num, double entropy);\nint RAND_load_file(const char *file, long max_bytes);\nint RAND_write_file(const char *file);\nconst char *RAND_file_name(char *file, size_t num);\nint RAND_status(void);\nint RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes);\nint RAND_egd(const char *path);\nint RAND_egd_bytes(const char *path, int bytes);\nint RAND_poll(void);\n\n# if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)\n\nvoid RAND_screen(void);\nint RAND_event(UINT, WPARAM, LPARAM);\n\n# endif\n\n# ifdef OPENSSL_FIPS\nvoid RAND_set_fips_drbg_type(int type, int flags);\nint RAND_init_fips(void);\n# endif\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_RAND_strings(void);\n\n/* Error codes for the RAND functions. */\n\n/* Function codes. */\n# define RAND_F_RAND_GET_RAND_METHOD                      101\n# define RAND_F_RAND_INIT_FIPS                            102\n# define RAND_F_SSLEAY_RAND_BYTES                         100\n\n/* Reason codes. */\n# define RAND_R_DUAL_EC_DRBG_DISABLED                     104\n# define RAND_R_ERROR_INITIALISING_DRBG                   102\n# define RAND_R_ERROR_INSTANTIATING_DRBG                  103\n# define RAND_R_NO_FIPS_RANDOM_METHOD_SET                 101\n# define RAND_R_PRNG_NOT_SEEDED                           100\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/rc2.h",
    "content": "/* crypto/rc2/rc2.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_RC2_H\n# define HEADER_RC2_H\n\n# include <openssl/opensslconf.h>/* OPENSSL_NO_RC2, RC2_INT */\n# ifdef OPENSSL_NO_RC2\n#  error RC2 is disabled.\n# endif\n\n# define RC2_ENCRYPT     1\n# define RC2_DECRYPT     0\n\n# define RC2_BLOCK       8\n# define RC2_KEY_LENGTH  16\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct rc2_key_st {\n    RC2_INT data[64];\n} RC2_KEY;\n\n# ifdef OPENSSL_FIPS\nvoid private_RC2_set_key(RC2_KEY *key, int len, const unsigned char *data,\n                         int bits);\n# endif\nvoid RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits);\nvoid RC2_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                     RC2_KEY *key, int enc);\nvoid RC2_encrypt(unsigned long *data, RC2_KEY *key);\nvoid RC2_decrypt(unsigned long *data, RC2_KEY *key);\nvoid RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,\n                     RC2_KEY *ks, unsigned char *iv, int enc);\nvoid RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out,\n                       long length, RC2_KEY *schedule, unsigned char *ivec,\n                       int *num, int enc);\nvoid RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out,\n                       long length, RC2_KEY *schedule, unsigned char *ivec,\n                       int *num);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/rc4.h",
    "content": "/* crypto/rc4/rc4.h */\n/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_RC4_H\n# define HEADER_RC4_H\n\n# include <openssl/opensslconf.h>/* OPENSSL_NO_RC4, RC4_INT */\n# ifdef OPENSSL_NO_RC4\n#  error RC4 is disabled.\n# endif\n\n# include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct rc4_key_st {\n    RC4_INT x, y;\n    RC4_INT data[256];\n} RC4_KEY;\n\nconst char *RC4_options(void);\nvoid RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);\nvoid private_RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);\nvoid RC4(RC4_KEY *key, size_t len, const unsigned char *indata,\n         unsigned char *outdata);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ripemd.h",
    "content": "/* crypto/ripemd/ripemd.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_RIPEMD_H\n# define HEADER_RIPEMD_H\n\n# include <openssl/e_os2.h>\n# include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_NO_RIPEMD\n#  error RIPEMD is disabled.\n# endif\n\n# if defined(__LP32__)\n#  define RIPEMD160_LONG unsigned long\n# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)\n#  define RIPEMD160_LONG unsigned long\n#  define RIPEMD160_LONG_LOG2 3\n# else\n#  define RIPEMD160_LONG unsigned int\n# endif\n\n# define RIPEMD160_CBLOCK        64\n# define RIPEMD160_LBLOCK        (RIPEMD160_CBLOCK/4)\n# define RIPEMD160_DIGEST_LENGTH 20\n\ntypedef struct RIPEMD160state_st {\n    RIPEMD160_LONG A, B, C, D, E;\n    RIPEMD160_LONG Nl, Nh;\n    RIPEMD160_LONG data[RIPEMD160_LBLOCK];\n    unsigned int num;\n} RIPEMD160_CTX;\n\n# ifdef OPENSSL_FIPS\nint private_RIPEMD160_Init(RIPEMD160_CTX *c);\n# endif\nint RIPEMD160_Init(RIPEMD160_CTX *c);\nint RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len);\nint RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c);\nunsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md);\nvoid RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b);\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/rsa.h",
    "content": "/* crypto/rsa/rsa.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_RSA_H\n# define HEADER_RSA_H\n\n# include <openssl/asn1.h>\n\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/crypto.h>\n# include <openssl/ossl_typ.h>\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/bn.h>\n# endif\n\n# ifdef OPENSSL_NO_RSA\n#  error RSA is disabled.\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Declared already in ossl_typ.h */\n/* typedef struct rsa_st RSA; */\n/* typedef struct rsa_meth_st RSA_METHOD; */\n\nstruct rsa_meth_st {\n    const char *name;\n    int (*rsa_pub_enc) (int flen, const unsigned char *from,\n                        unsigned char *to, RSA *rsa, int padding);\n    int (*rsa_pub_dec) (int flen, const unsigned char *from,\n                        unsigned char *to, RSA *rsa, int padding);\n    int (*rsa_priv_enc) (int flen, const unsigned char *from,\n                         unsigned char *to, RSA *rsa, int padding);\n    int (*rsa_priv_dec) (int flen, const unsigned char *from,\n                         unsigned char *to, RSA *rsa, int padding);\n    /* Can be null */\n    int (*rsa_mod_exp) (BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx);\n    /* Can be null */\n    int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p,\n                       const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx);\n    /* called at new */\n    int (*init) (RSA *rsa);\n    /* called at free */\n    int (*finish) (RSA *rsa);\n    /* RSA_METHOD_FLAG_* things */\n    int flags;\n    /* may be needed! */\n    char *app_data;\n    /*\n     * New sign and verify functions: some libraries don't allow arbitrary\n     * data to be signed/verified: this allows them to be used. Note: for\n     * this to work the RSA_public_decrypt() and RSA_private_encrypt() should\n     * *NOT* be used RSA_sign(), RSA_verify() should be used instead. Note:\n     * for backwards compatibility this functionality is only enabled if the\n     * RSA_FLAG_SIGN_VER option is set in 'flags'.\n     */\n    int (*rsa_sign) (int type,\n                     const unsigned char *m, unsigned int m_length,\n                     unsigned char *sigret, unsigned int *siglen,\n                     const RSA *rsa);\n    int (*rsa_verify) (int dtype, const unsigned char *m,\n                       unsigned int m_length, const unsigned char *sigbuf,\n                       unsigned int siglen, const RSA *rsa);\n    /*\n     * If this callback is NULL, the builtin software RSA key-gen will be\n     * used. This is for behavioural compatibility whilst the code gets\n     * rewired, but one day it would be nice to assume there are no such\n     * things as \"builtin software\" implementations.\n     */\n    int (*rsa_keygen) (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);\n};\n\nstruct rsa_st {\n    /*\n     * The first parameter is used to pickup errors where this is passed\n     * instead of aEVP_PKEY, it is set to 0\n     */\n    int pad;\n    long version;\n    const RSA_METHOD *meth;\n    /* functional reference if 'meth' is ENGINE-provided */\n    ENGINE *engine;\n    BIGNUM *n;\n    BIGNUM *e;\n    BIGNUM *d;\n    BIGNUM *p;\n    BIGNUM *q;\n    BIGNUM *dmp1;\n    BIGNUM *dmq1;\n    BIGNUM *iqmp;\n    /* be careful using this if the RSA structure is shared */\n    CRYPTO_EX_DATA ex_data;\n    int references;\n    int flags;\n    /* Used to cache montgomery values */\n    BN_MONT_CTX *_method_mod_n;\n    BN_MONT_CTX *_method_mod_p;\n    BN_MONT_CTX *_method_mod_q;\n    /*\n     * all BIGNUM values are actually in the following data, if it is not\n     * NULL\n     */\n    char *bignum_data;\n    BN_BLINDING *blinding;\n    BN_BLINDING *mt_blinding;\n};\n\n# ifndef OPENSSL_RSA_MAX_MODULUS_BITS\n#  define OPENSSL_RSA_MAX_MODULUS_BITS   16384\n# endif\n\n# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS\n#  define OPENSSL_RSA_SMALL_MODULUS_BITS 3072\n# endif\n# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS\n\n/* exponent limit enforced for \"large\" modulus only */\n#  define OPENSSL_RSA_MAX_PUBEXP_BITS    64\n# endif\n\n# define RSA_3   0x3L\n# define RSA_F4  0x10001L\n\n# define RSA_METHOD_FLAG_NO_CHECK        0x0001/* don't check pub/private\n                                                * match */\n\n# define RSA_FLAG_CACHE_PUBLIC           0x0002\n# define RSA_FLAG_CACHE_PRIVATE          0x0004\n# define RSA_FLAG_BLINDING               0x0008\n# define RSA_FLAG_THREAD_SAFE            0x0010\n/*\n * This flag means the private key operations will be handled by rsa_mod_exp\n * and that they do not depend on the private key components being present:\n * for example a key stored in external hardware. Without this flag\n * bn_mod_exp gets called when private key components are absent.\n */\n# define RSA_FLAG_EXT_PKEY               0x0020\n\n/*\n * This flag in the RSA_METHOD enables the new rsa_sign, rsa_verify\n * functions.\n */\n# define RSA_FLAG_SIGN_VER               0x0040\n\n/*\n * new with 0.9.6j and 0.9.7b; the built-in\n * RSA implementation now uses blinding by\n * default (ignoring RSA_FLAG_BLINDING),\n * but other engines might not need it\n */\n# define RSA_FLAG_NO_BLINDING            0x0080\n/*\n * new with 0.9.8f; the built-in RSA\n * implementation now uses constant time\n * operations by default in private key operations,\n * e.g., constant time modular exponentiation,\n * modular inverse without leaking branches,\n * division without leaking branches. This\n * flag disables these constant time\n * operations and results in faster RSA\n * private key operations.\n */\n# define RSA_FLAG_NO_CONSTTIME           0x0100\n# ifdef OPENSSL_USE_DEPRECATED\n/* deprecated name for the flag*/\n/*\n * new with 0.9.7h; the built-in RSA\n * implementation now uses constant time\n * modular exponentiation for secret exponents\n * by default. This flag causes the\n * faster variable sliding window method to\n * be used for all exponents.\n */\n#  define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME\n# endif\n\n# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, EVP_PKEY_CTRL_RSA_PADDING, \\\n                                pad, NULL)\n\n# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, -1, \\\n                                EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad)\n\n# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \\\n                                (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \\\n                                EVP_PKEY_CTRL_RSA_PSS_SALTLEN, \\\n                                len, NULL)\n\n# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \\\n                                (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \\\n                                EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, \\\n                                0, plen)\n\n# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \\\n                                EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL)\n\n# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \\\n        EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_KEYGEN, \\\n                                EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp)\n\n# define  EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md)  \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \\\n                        EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \\\n                                EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md)\n\n# define  EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md)  \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,  \\\n                                EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md)\n\n# define  EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \\\n                        EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \\\n                                EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd)\n\n# define  EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,  \\\n                                EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd)\n\n# define  EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,  \\\n                                EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l)\n\n# define  EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l)       \\\n                EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT,  \\\n                                EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l)\n\n# define EVP_PKEY_CTRL_RSA_PADDING       (EVP_PKEY_ALG_CTRL + 1)\n# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN   (EVP_PKEY_ALG_CTRL + 2)\n\n# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS   (EVP_PKEY_ALG_CTRL + 3)\n# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4)\n# define EVP_PKEY_CTRL_RSA_MGF1_MD       (EVP_PKEY_ALG_CTRL + 5)\n\n# define EVP_PKEY_CTRL_GET_RSA_PADDING           (EVP_PKEY_ALG_CTRL + 6)\n# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN       (EVP_PKEY_ALG_CTRL + 7)\n# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD           (EVP_PKEY_ALG_CTRL + 8)\n\n# define EVP_PKEY_CTRL_RSA_OAEP_MD       (EVP_PKEY_ALG_CTRL + 9)\n# define EVP_PKEY_CTRL_RSA_OAEP_LABEL    (EVP_PKEY_ALG_CTRL + 10)\n\n# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD   (EVP_PKEY_ALG_CTRL + 11)\n# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12)\n\n# define RSA_PKCS1_PADDING       1\n# define RSA_SSLV23_PADDING      2\n# define RSA_NO_PADDING          3\n# define RSA_PKCS1_OAEP_PADDING  4\n# define RSA_X931_PADDING        5\n/* EVP_PKEY_ only */\n# define RSA_PKCS1_PSS_PADDING   6\n\n# define RSA_PKCS1_PADDING_SIZE  11\n\n# define RSA_set_app_data(s,arg)         RSA_set_ex_data(s,0,arg)\n# define RSA_get_app_data(s)             RSA_get_ex_data(s,0)\n\nRSA *RSA_new(void);\nRSA *RSA_new_method(ENGINE *engine);\nint RSA_size(const RSA *rsa);\n\n/* Deprecated version */\n# ifndef OPENSSL_NO_DEPRECATED\nRSA *RSA_generate_key(int bits, unsigned long e, void\n                       (*callback) (int, int, void *), void *cb_arg);\n# endif                         /* !defined(OPENSSL_NO_DEPRECATED) */\n\n/* New version */\nint RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);\n\nint RSA_check_key(const RSA *);\n        /* next 4 return -1 on error */\nint RSA_public_encrypt(int flen, const unsigned char *from,\n                       unsigned char *to, RSA *rsa, int padding);\nint RSA_private_encrypt(int flen, const unsigned char *from,\n                        unsigned char *to, RSA *rsa, int padding);\nint RSA_public_decrypt(int flen, const unsigned char *from,\n                       unsigned char *to, RSA *rsa, int padding);\nint RSA_private_decrypt(int flen, const unsigned char *from,\n                        unsigned char *to, RSA *rsa, int padding);\nvoid RSA_free(RSA *r);\n/* \"up\" the RSA object's reference count */\nint RSA_up_ref(RSA *r);\n\nint RSA_flags(const RSA *r);\n\nvoid RSA_set_default_method(const RSA_METHOD *meth);\nconst RSA_METHOD *RSA_get_default_method(void);\nconst RSA_METHOD *RSA_get_method(const RSA *rsa);\nint RSA_set_method(RSA *rsa, const RSA_METHOD *meth);\n\n/* This function needs the memory locking malloc callbacks to be installed */\nint RSA_memory_lock(RSA *r);\n\n/* these are the actual SSLeay RSA functions */\nconst RSA_METHOD *RSA_PKCS1_SSLeay(void);\n\nconst RSA_METHOD *RSA_null_method(void);\n\nDECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey)\nDECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey)\n\ntypedef struct rsa_pss_params_st {\n    X509_ALGOR *hashAlgorithm;\n    X509_ALGOR *maskGenAlgorithm;\n    ASN1_INTEGER *saltLength;\n    ASN1_INTEGER *trailerField;\n} RSA_PSS_PARAMS;\n\nDECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS)\n\ntypedef struct rsa_oaep_params_st {\n    X509_ALGOR *hashFunc;\n    X509_ALGOR *maskGenFunc;\n    X509_ALGOR *pSourceFunc;\n} RSA_OAEP_PARAMS;\n\nDECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS)\n\n# ifndef OPENSSL_NO_FP_API\nint RSA_print_fp(FILE *fp, const RSA *r, int offset);\n# endif\n\n# ifndef OPENSSL_NO_BIO\nint RSA_print(BIO *bp, const RSA *r, int offset);\n# endif\n\n# ifndef OPENSSL_NO_RC4\nint i2d_RSA_NET(const RSA *a, unsigned char **pp,\n                int (*cb) (char *buf, int len, const char *prompt,\n                           int verify), int sgckey);\nRSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length,\n                 int (*cb) (char *buf, int len, const char *prompt,\n                            int verify), int sgckey);\n\nint i2d_Netscape_RSA(const RSA *a, unsigned char **pp,\n                     int (*cb) (char *buf, int len, const char *prompt,\n                                int verify));\nRSA *d2i_Netscape_RSA(RSA **a, const unsigned char **pp, long length,\n                      int (*cb) (char *buf, int len, const char *prompt,\n                                 int verify));\n# endif\n\n/*\n * The following 2 functions sign and verify a X509_SIG ASN1 object inside\n * PKCS#1 padded RSA encryption\n */\nint RSA_sign(int type, const unsigned char *m, unsigned int m_length,\n             unsigned char *sigret, unsigned int *siglen, RSA *rsa);\nint RSA_verify(int type, const unsigned char *m, unsigned int m_length,\n               const unsigned char *sigbuf, unsigned int siglen, RSA *rsa);\n\n/*\n * The following 2 function sign and verify a ASN1_OCTET_STRING object inside\n * PKCS#1 padded RSA encryption\n */\nint RSA_sign_ASN1_OCTET_STRING(int type,\n                               const unsigned char *m, unsigned int m_length,\n                               unsigned char *sigret, unsigned int *siglen,\n                               RSA *rsa);\nint RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m,\n                                 unsigned int m_length, unsigned char *sigbuf,\n                                 unsigned int siglen, RSA *rsa);\n\nint RSA_blinding_on(RSA *rsa, BN_CTX *ctx);\nvoid RSA_blinding_off(RSA *rsa);\nBN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx);\n\nint RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen,\n                                 const unsigned char *f, int fl);\nint RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen,\n                                   const unsigned char *f, int fl,\n                                   int rsa_len);\nint RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen,\n                                 const unsigned char *f, int fl);\nint RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen,\n                                   const unsigned char *f, int fl,\n                                   int rsa_len);\nint PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed,\n               long seedlen, const EVP_MD *dgst);\nint RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,\n                               const unsigned char *f, int fl,\n                               const unsigned char *p, int pl);\nint RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,\n                                 const unsigned char *f, int fl, int rsa_len,\n                                 const unsigned char *p, int pl);\nint RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,\n                                    const unsigned char *from, int flen,\n                                    const unsigned char *param, int plen,\n                                    const EVP_MD *md, const EVP_MD *mgf1md);\nint RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,\n                                      const unsigned char *from, int flen,\n                                      int num, const unsigned char *param,\n                                      int plen, const EVP_MD *md,\n                                      const EVP_MD *mgf1md);\nint RSA_padding_add_SSLv23(unsigned char *to, int tlen,\n                           const unsigned char *f, int fl);\nint RSA_padding_check_SSLv23(unsigned char *to, int tlen,\n                             const unsigned char *f, int fl, int rsa_len);\nint RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f,\n                         int fl);\nint RSA_padding_check_none(unsigned char *to, int tlen,\n                           const unsigned char *f, int fl, int rsa_len);\nint RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f,\n                         int fl);\nint RSA_padding_check_X931(unsigned char *to, int tlen,\n                           const unsigned char *f, int fl, int rsa_len);\nint RSA_X931_hash_id(int nid);\n\nint RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash,\n                         const EVP_MD *Hash, const unsigned char *EM,\n                         int sLen);\nint RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM,\n                              const unsigned char *mHash, const EVP_MD *Hash,\n                              int sLen);\n\nint RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash,\n                              const EVP_MD *Hash, const EVP_MD *mgf1Hash,\n                              const unsigned char *EM, int sLen);\n\nint RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM,\n                                   const unsigned char *mHash,\n                                   const EVP_MD *Hash, const EVP_MD *mgf1Hash,\n                                   int sLen);\n\nint RSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                         CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nint RSA_set_ex_data(RSA *r, int idx, void *arg);\nvoid *RSA_get_ex_data(const RSA *r, int idx);\n\nRSA *RSAPublicKey_dup(RSA *rsa);\nRSA *RSAPrivateKey_dup(RSA *rsa);\n\n/*\n * If this flag is set the RSA method is FIPS compliant and can be used in\n * FIPS mode. This is set in the validated module method. If an application\n * sets this flag in its own methods it is its responsibility to ensure the\n * result is compliant.\n */\n\n# define RSA_FLAG_FIPS_METHOD                    0x0400\n\n/*\n * If this flag is set the operations normally disabled in FIPS mode are\n * permitted it is then the applications responsibility to ensure that the\n * usage is compliant.\n */\n\n# define RSA_FLAG_NON_FIPS_ALLOW                 0x0400\n/*\n * Application has decided PRNG is good enough to generate a key: don't\n * check.\n */\n# define RSA_FLAG_CHECKED                        0x0800\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_RSA_strings(void);\n\n/* Error codes for the RSA functions. */\n\n/* Function codes. */\n# define RSA_F_CHECK_PADDING_MD                           140\n# define RSA_F_DO_RSA_PRINT                               146\n# define RSA_F_INT_RSA_VERIFY                             145\n# define RSA_F_MEMORY_LOCK                                100\n# define RSA_F_OLD_RSA_PRIV_DECODE                        147\n# define RSA_F_PKEY_RSA_CTRL                              143\n# define RSA_F_PKEY_RSA_CTRL_STR                          144\n# define RSA_F_PKEY_RSA_SIGN                              142\n# define RSA_F_PKEY_RSA_VERIFY                            154\n# define RSA_F_PKEY_RSA_VERIFYRECOVER                     141\n# define RSA_F_RSA_ALGOR_TO_MD                            157\n# define RSA_F_RSA_BUILTIN_KEYGEN                         129\n# define RSA_F_RSA_CHECK_KEY                              123\n# define RSA_F_RSA_CMS_DECRYPT                            158\n# define RSA_F_RSA_EAY_PRIVATE_DECRYPT                    101\n# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT                    102\n# define RSA_F_RSA_EAY_PUBLIC_DECRYPT                     103\n# define RSA_F_RSA_EAY_PUBLIC_ENCRYPT                     104\n# define RSA_F_RSA_GENERATE_KEY                           105\n# define RSA_F_RSA_GENERATE_KEY_EX                        155\n# define RSA_F_RSA_ITEM_VERIFY                            156\n# define RSA_F_RSA_MEMORY_LOCK                            130\n# define RSA_F_RSA_MGF1_TO_MD                             159\n# define RSA_F_RSA_NEW_METHOD                             106\n# define RSA_F_RSA_NULL                                   124\n# define RSA_F_RSA_NULL_MOD_EXP                           131\n# define RSA_F_RSA_NULL_PRIVATE_DECRYPT                   132\n# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT                   133\n# define RSA_F_RSA_NULL_PUBLIC_DECRYPT                    134\n# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT                    135\n# define RSA_F_RSA_PADDING_ADD_NONE                       107\n# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP                 121\n# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1            160\n# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS                  125\n# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1             148\n# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1               108\n# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2               109\n# define RSA_F_RSA_PADDING_ADD_SSLV23                     110\n# define RSA_F_RSA_PADDING_ADD_X931                       127\n# define RSA_F_RSA_PADDING_CHECK_NONE                     111\n# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP               122\n# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1          161\n# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1             112\n# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2             113\n# define RSA_F_RSA_PADDING_CHECK_SSLV23                   114\n# define RSA_F_RSA_PADDING_CHECK_X931                     128\n# define RSA_F_RSA_PRINT                                  115\n# define RSA_F_RSA_PRINT_FP                               116\n# define RSA_F_RSA_PRIVATE_DECRYPT                        150\n# define RSA_F_RSA_PRIVATE_ENCRYPT                        151\n# define RSA_F_RSA_PRIV_DECODE                            137\n# define RSA_F_RSA_PRIV_ENCODE                            138\n# define RSA_F_RSA_PSS_TO_CTX                             162\n# define RSA_F_RSA_PUBLIC_DECRYPT                         152\n# define RSA_F_RSA_PUBLIC_ENCRYPT                         153\n# define RSA_F_RSA_PUB_DECODE                             139\n# define RSA_F_RSA_SETUP_BLINDING                         136\n# define RSA_F_RSA_SIGN                                   117\n# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING                 118\n# define RSA_F_RSA_VERIFY                                 119\n# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING               120\n# define RSA_F_RSA_VERIFY_PKCS1_PSS                       126\n# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1                  149\n\n/* Reason codes. */\n# define RSA_R_ALGORITHM_MISMATCH                         100\n# define RSA_R_BAD_E_VALUE                                101\n# define RSA_R_BAD_FIXED_HEADER_DECRYPT                   102\n# define RSA_R_BAD_PAD_BYTE_COUNT                         103\n# define RSA_R_BAD_SIGNATURE                              104\n# define RSA_R_BLOCK_TYPE_IS_NOT_01                       106\n# define RSA_R_BLOCK_TYPE_IS_NOT_02                       107\n# define RSA_R_DATA_GREATER_THAN_MOD_LEN                  108\n# define RSA_R_DATA_TOO_LARGE                             109\n# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE                110\n# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS                 132\n# define RSA_R_DATA_TOO_SMALL                             111\n# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE                122\n# define RSA_R_DIGEST_DOES_NOT_MATCH                      166\n# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY                 112\n# define RSA_R_DMP1_NOT_CONGRUENT_TO_D                    124\n# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D                    125\n# define RSA_R_D_E_NOT_CONGRUENT_TO_1                     123\n# define RSA_R_FIRST_OCTET_INVALID                        133\n# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE        144\n# define RSA_R_INVALID_DIGEST                             160\n# define RSA_R_INVALID_DIGEST_LENGTH                      143\n# define RSA_R_INVALID_HEADER                             137\n# define RSA_R_INVALID_KEYBITS                            145\n# define RSA_R_INVALID_LABEL                              161\n# define RSA_R_INVALID_MESSAGE_LENGTH                     131\n# define RSA_R_INVALID_MGF1_MD                            156\n# define RSA_R_INVALID_OAEP_PARAMETERS                    162\n# define RSA_R_INVALID_PADDING                            138\n# define RSA_R_INVALID_PADDING_MODE                       141\n# define RSA_R_INVALID_PSS_PARAMETERS                     149\n# define RSA_R_INVALID_PSS_SALTLEN                        146\n# define RSA_R_INVALID_SALT_LENGTH                        150\n# define RSA_R_INVALID_TRAILER                            139\n# define RSA_R_INVALID_X931_DIGEST                        142\n# define RSA_R_IQMP_NOT_INVERSE_OF_Q                      126\n# define RSA_R_KEY_SIZE_TOO_SMALL                         120\n# define RSA_R_LAST_OCTET_INVALID                         134\n# define RSA_R_MODULUS_TOO_LARGE                          105\n# define RSA_R_NON_FIPS_RSA_METHOD                        157\n# define RSA_R_NO_PUBLIC_EXPONENT                         140\n# define RSA_R_NULL_BEFORE_BLOCK_MISSING                  113\n# define RSA_R_N_DOES_NOT_EQUAL_P_Q                       127\n# define RSA_R_OAEP_DECODING_ERROR                        121\n# define RSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE         158\n# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE   148\n# define RSA_R_PADDING_CHECK_FAILED                       114\n# define RSA_R_PKCS_DECODING_ERROR                        159\n# define RSA_R_P_NOT_PRIME                                128\n# define RSA_R_Q_NOT_PRIME                                129\n# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED               130\n# define RSA_R_SLEN_CHECK_FAILED                          136\n# define RSA_R_SLEN_RECOVERY_FAILED                       135\n# define RSA_R_SSLV3_ROLLBACK_ATTACK                      115\n# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116\n# define RSA_R_UNKNOWN_ALGORITHM_TYPE                     117\n# define RSA_R_UNKNOWN_DIGEST                             163\n# define RSA_R_UNKNOWN_MASK_DIGEST                        151\n# define RSA_R_UNKNOWN_PADDING_TYPE                       118\n# define RSA_R_UNKNOWN_PSS_DIGEST                         152\n# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE                164\n# define RSA_R_UNSUPPORTED_LABEL_SOURCE                   165\n# define RSA_R_UNSUPPORTED_MASK_ALGORITHM                 153\n# define RSA_R_UNSUPPORTED_MASK_PARAMETER                 154\n# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE                 155\n# define RSA_R_VALUE_MISSING                              147\n# define RSA_R_WRONG_SIGNATURE_LENGTH                     119\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/safestack.h",
    "content": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_SAFESTACK_H\n# define HEADER_SAFESTACK_H\n\n# include \"openssl/stack.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# ifndef CHECKED_PTR_OF\n#  define CHECKED_PTR_OF(type, p) \\\n    ((void*) (1 ? p : (type*)0))\n# endif\n\n/*\n * In C++ we get problems because an explicit cast is needed from (void *) we\n * use CHECKED_STACK_OF to ensure the correct type is passed in the macros\n * below.\n */\n\n# define CHECKED_STACK_OF(type, p) \\\n    ((_STACK*) (1 ? p : (STACK_OF(type)*)0))\n\n# define CHECKED_SK_COPY_FUNC(type, p) \\\n    ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0)))\n\n# define CHECKED_SK_FREE_FUNC(type, p) \\\n    ((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))\n\n# define CHECKED_SK_CMP_FUNC(type, p) \\\n    ((int (*)(const void *, const void *)) \\\n        ((1 ? p : (int (*)(const type * const *, const type * const *))0)))\n\n# define STACK_OF(type) struct stack_st_##type\n# define PREDECLARE_STACK_OF(type) STACK_OF(type);\n\n# define DECLARE_STACK_OF(type) \\\nSTACK_OF(type) \\\n    { \\\n    _STACK stack; \\\n    };\n# define DECLARE_SPECIAL_STACK_OF(type, type2) \\\nSTACK_OF(type) \\\n    { \\\n    _STACK stack; \\\n    };\n\n/* nada (obsolete in new safestack approach)*/\n# define IMPLEMENT_STACK_OF(type)\n\n/*-\n * Strings are special: normally an lhash entry will point to a single\n * (somewhat) mutable object. In the case of strings:\n *\n * a) Instead of a single char, there is an array of chars, NUL-terminated.\n * b) The string may have be immutable.\n *\n * So, they need their own declarations. Especially important for\n * type-checking tools, such as Deputy.\n *\n * In practice, however, it appears to be hard to have a const\n * string. For now, I'm settling for dealing with the fact it is a\n * string at all.\n */\ntypedef char *OPENSSL_STRING;\n\ntypedef const char *OPENSSL_CSTRING;\n\n/*\n * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but\n * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned\n * above, instead of a single char each entry is a NUL-terminated array of\n * chars. So, we have to implement STRING specially for STACK_OF. This is\n * dealt with in the autogenerated macros below.\n */\n\nDECLARE_SPECIAL_STACK_OF(OPENSSL_STRING, char)\n\n/*\n * Similarly, we sometimes use a block of characters, NOT nul-terminated.\n * These should also be distinguished from \"normal\" stacks.\n */\ntypedef void *OPENSSL_BLOCK;\nDECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)\n\n/*\n * SKM_sk_... stack macros are internal to safestack.h: never use them\n * directly, use sk_<type>_... instead\n */\n# define SKM_sk_new(type, cmp) \\\n        ((STACK_OF(type) *)sk_new(CHECKED_SK_CMP_FUNC(type, cmp)))\n# define SKM_sk_new_null(type) \\\n        ((STACK_OF(type) *)sk_new_null())\n# define SKM_sk_free(type, st) \\\n        sk_free(CHECKED_STACK_OF(type, st))\n# define SKM_sk_num(type, st) \\\n        sk_num(CHECKED_STACK_OF(type, st))\n# define SKM_sk_value(type, st,i) \\\n        ((type *)sk_value(CHECKED_STACK_OF(type, st), i))\n# define SKM_sk_set(type, st,i,val) \\\n        sk_set(CHECKED_STACK_OF(type, st), i, CHECKED_PTR_OF(type, val))\n# define SKM_sk_zero(type, st) \\\n        sk_zero(CHECKED_STACK_OF(type, st))\n# define SKM_sk_push(type, st, val) \\\n        sk_push(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val))\n# define SKM_sk_unshift(type, st, val) \\\n        sk_unshift(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val))\n# define SKM_sk_find(type, st, val) \\\n        sk_find(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val))\n# define SKM_sk_find_ex(type, st, val) \\\n        sk_find_ex(CHECKED_STACK_OF(type, st), \\\n                   CHECKED_PTR_OF(type, val))\n# define SKM_sk_delete(type, st, i) \\\n        (type *)sk_delete(CHECKED_STACK_OF(type, st), i)\n# define SKM_sk_delete_ptr(type, st, ptr) \\\n        (type *)sk_delete_ptr(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, ptr))\n# define SKM_sk_insert(type, st,val, i) \\\n        sk_insert(CHECKED_STACK_OF(type, st), CHECKED_PTR_OF(type, val), i)\n# define SKM_sk_set_cmp_func(type, st, cmp) \\\n        ((int (*)(const type * const *,const type * const *)) \\\n        sk_set_cmp_func(CHECKED_STACK_OF(type, st), CHECKED_SK_CMP_FUNC(type, cmp)))\n# define SKM_sk_dup(type, st) \\\n        (STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st))\n# define SKM_sk_pop_free(type, st, free_func) \\\n        sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func))\n# define SKM_sk_deep_copy(type, st, copy_func, free_func) \\\n        (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func))\n# define SKM_sk_shift(type, st) \\\n        (type *)sk_shift(CHECKED_STACK_OF(type, st))\n# define SKM_sk_pop(type, st) \\\n        (type *)sk_pop(CHECKED_STACK_OF(type, st))\n# define SKM_sk_sort(type, st) \\\n        sk_sort(CHECKED_STACK_OF(type, st))\n# define SKM_sk_is_sorted(type, st) \\\n        sk_is_sorted(CHECKED_STACK_OF(type, st))\n# define SKM_ASN1_SET_OF_d2i(type, st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n  (STACK_OF(type) *)d2i_ASN1_SET( \\\n                                (STACK_OF(OPENSSL_BLOCK) **)CHECKED_PTR_OF(STACK_OF(type)*, st), \\\n                                pp, length, \\\n                                CHECKED_D2I_OF(type, d2i_func), \\\n                                CHECKED_SK_FREE_FUNC(type, free_func), \\\n                                ex_tag, ex_class)\n# define SKM_ASN1_SET_OF_i2d(type, st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n  i2d_ASN1_SET((STACK_OF(OPENSSL_BLOCK) *)CHECKED_STACK_OF(type, st), pp, \\\n                                CHECKED_I2D_OF(type, i2d_func), \\\n                                ex_tag, ex_class, is_set)\n# define SKM_ASN1_seq_pack(type, st, i2d_func, buf, len) \\\n        ASN1_seq_pack(CHECKED_PTR_OF(STACK_OF(type), st), \\\n                        CHECKED_I2D_OF(type, i2d_func), buf, len)\n# define SKM_ASN1_seq_unpack(type, buf, len, d2i_func, free_func) \\\n        (STACK_OF(type) *)ASN1_seq_unpack(buf, len, CHECKED_D2I_OF(type, d2i_func), CHECKED_SK_FREE_FUNC(type, free_func))\n# define SKM_PKCS12_decrypt_d2i(type, algor, d2i_func, free_func, pass, passlen, oct, seq) \\\n        (STACK_OF(type) *)PKCS12_decrypt_d2i(algor, \\\n                                CHECKED_D2I_OF(type, d2i_func), \\\n                                CHECKED_SK_FREE_FUNC(type, free_func), \\\n                                pass, passlen, oct, seq)\n/*\n * This block of defines is updated by util/mkstack.pl, please do not touch!\n */\n# define sk_ACCESS_DESCRIPTION_new(cmp) SKM_sk_new(ACCESS_DESCRIPTION, (cmp))\n# define sk_ACCESS_DESCRIPTION_new_null() SKM_sk_new_null(ACCESS_DESCRIPTION)\n# define sk_ACCESS_DESCRIPTION_free(st) SKM_sk_free(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_num(st) SKM_sk_num(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_value(st, i) SKM_sk_value(ACCESS_DESCRIPTION, (st), (i))\n# define sk_ACCESS_DESCRIPTION_set(st, i, val) SKM_sk_set(ACCESS_DESCRIPTION, (st), (i), (val))\n# define sk_ACCESS_DESCRIPTION_zero(st) SKM_sk_zero(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_push(st, val) SKM_sk_push(ACCESS_DESCRIPTION, (st), (val))\n# define sk_ACCESS_DESCRIPTION_unshift(st, val) SKM_sk_unshift(ACCESS_DESCRIPTION, (st), (val))\n# define sk_ACCESS_DESCRIPTION_find(st, val) SKM_sk_find(ACCESS_DESCRIPTION, (st), (val))\n# define sk_ACCESS_DESCRIPTION_find_ex(st, val) SKM_sk_find_ex(ACCESS_DESCRIPTION, (st), (val))\n# define sk_ACCESS_DESCRIPTION_delete(st, i) SKM_sk_delete(ACCESS_DESCRIPTION, (st), (i))\n# define sk_ACCESS_DESCRIPTION_delete_ptr(st, ptr) SKM_sk_delete_ptr(ACCESS_DESCRIPTION, (st), (ptr))\n# define sk_ACCESS_DESCRIPTION_insert(st, val, i) SKM_sk_insert(ACCESS_DESCRIPTION, (st), (val), (i))\n# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp))\n# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st)\n# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func))\n# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func))\n# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st))\n# define sk_ACCESS_DESCRIPTION_is_sorted(st) SKM_sk_is_sorted(ACCESS_DESCRIPTION, (st))\n# define sk_ASIdOrRange_new(cmp) SKM_sk_new(ASIdOrRange, (cmp))\n# define sk_ASIdOrRange_new_null() SKM_sk_new_null(ASIdOrRange)\n# define sk_ASIdOrRange_free(st) SKM_sk_free(ASIdOrRange, (st))\n# define sk_ASIdOrRange_num(st) SKM_sk_num(ASIdOrRange, (st))\n# define sk_ASIdOrRange_value(st, i) SKM_sk_value(ASIdOrRange, (st), (i))\n# define sk_ASIdOrRange_set(st, i, val) SKM_sk_set(ASIdOrRange, (st), (i), (val))\n# define sk_ASIdOrRange_zero(st) SKM_sk_zero(ASIdOrRange, (st))\n# define sk_ASIdOrRange_push(st, val) SKM_sk_push(ASIdOrRange, (st), (val))\n# define sk_ASIdOrRange_unshift(st, val) SKM_sk_unshift(ASIdOrRange, (st), (val))\n# define sk_ASIdOrRange_find(st, val) SKM_sk_find(ASIdOrRange, (st), (val))\n# define sk_ASIdOrRange_find_ex(st, val) SKM_sk_find_ex(ASIdOrRange, (st), (val))\n# define sk_ASIdOrRange_delete(st, i) SKM_sk_delete(ASIdOrRange, (st), (i))\n# define sk_ASIdOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASIdOrRange, (st), (ptr))\n# define sk_ASIdOrRange_insert(st, val, i) SKM_sk_insert(ASIdOrRange, (st), (val), (i))\n# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp))\n# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st)\n# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func))\n# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func))\n# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st))\n# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st))\n# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st))\n# define sk_ASIdOrRange_is_sorted(st) SKM_sk_is_sorted(ASIdOrRange, (st))\n# define sk_ASN1_GENERALSTRING_new(cmp) SKM_sk_new(ASN1_GENERALSTRING, (cmp))\n# define sk_ASN1_GENERALSTRING_new_null() SKM_sk_new_null(ASN1_GENERALSTRING)\n# define sk_ASN1_GENERALSTRING_free(st) SKM_sk_free(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_num(st) SKM_sk_num(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_value(st, i) SKM_sk_value(ASN1_GENERALSTRING, (st), (i))\n# define sk_ASN1_GENERALSTRING_set(st, i, val) SKM_sk_set(ASN1_GENERALSTRING, (st), (i), (val))\n# define sk_ASN1_GENERALSTRING_zero(st) SKM_sk_zero(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_push(st, val) SKM_sk_push(ASN1_GENERALSTRING, (st), (val))\n# define sk_ASN1_GENERALSTRING_unshift(st, val) SKM_sk_unshift(ASN1_GENERALSTRING, (st), (val))\n# define sk_ASN1_GENERALSTRING_find(st, val) SKM_sk_find(ASN1_GENERALSTRING, (st), (val))\n# define sk_ASN1_GENERALSTRING_find_ex(st, val) SKM_sk_find_ex(ASN1_GENERALSTRING, (st), (val))\n# define sk_ASN1_GENERALSTRING_delete(st, i) SKM_sk_delete(ASN1_GENERALSTRING, (st), (i))\n# define sk_ASN1_GENERALSTRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_GENERALSTRING, (st), (ptr))\n# define sk_ASN1_GENERALSTRING_insert(st, val, i) SKM_sk_insert(ASN1_GENERALSTRING, (st), (val), (i))\n# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp))\n# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st)\n# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func))\n# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func))\n# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_GENERALSTRING_is_sorted(st) SKM_sk_is_sorted(ASN1_GENERALSTRING, (st))\n# define sk_ASN1_INTEGER_new(cmp) SKM_sk_new(ASN1_INTEGER, (cmp))\n# define sk_ASN1_INTEGER_new_null() SKM_sk_new_null(ASN1_INTEGER)\n# define sk_ASN1_INTEGER_free(st) SKM_sk_free(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_num(st) SKM_sk_num(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_value(st, i) SKM_sk_value(ASN1_INTEGER, (st), (i))\n# define sk_ASN1_INTEGER_set(st, i, val) SKM_sk_set(ASN1_INTEGER, (st), (i), (val))\n# define sk_ASN1_INTEGER_zero(st) SKM_sk_zero(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_push(st, val) SKM_sk_push(ASN1_INTEGER, (st), (val))\n# define sk_ASN1_INTEGER_unshift(st, val) SKM_sk_unshift(ASN1_INTEGER, (st), (val))\n# define sk_ASN1_INTEGER_find(st, val) SKM_sk_find(ASN1_INTEGER, (st), (val))\n# define sk_ASN1_INTEGER_find_ex(st, val) SKM_sk_find_ex(ASN1_INTEGER, (st), (val))\n# define sk_ASN1_INTEGER_delete(st, i) SKM_sk_delete(ASN1_INTEGER, (st), (i))\n# define sk_ASN1_INTEGER_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_INTEGER, (st), (ptr))\n# define sk_ASN1_INTEGER_insert(st, val, i) SKM_sk_insert(ASN1_INTEGER, (st), (val), (i))\n# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp))\n# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st)\n# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func))\n# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func))\n# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st))\n# define sk_ASN1_INTEGER_is_sorted(st) SKM_sk_is_sorted(ASN1_INTEGER, (st))\n# define sk_ASN1_OBJECT_new(cmp) SKM_sk_new(ASN1_OBJECT, (cmp))\n# define sk_ASN1_OBJECT_new_null() SKM_sk_new_null(ASN1_OBJECT)\n# define sk_ASN1_OBJECT_free(st) SKM_sk_free(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_num(st) SKM_sk_num(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_value(st, i) SKM_sk_value(ASN1_OBJECT, (st), (i))\n# define sk_ASN1_OBJECT_set(st, i, val) SKM_sk_set(ASN1_OBJECT, (st), (i), (val))\n# define sk_ASN1_OBJECT_zero(st) SKM_sk_zero(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_push(st, val) SKM_sk_push(ASN1_OBJECT, (st), (val))\n# define sk_ASN1_OBJECT_unshift(st, val) SKM_sk_unshift(ASN1_OBJECT, (st), (val))\n# define sk_ASN1_OBJECT_find(st, val) SKM_sk_find(ASN1_OBJECT, (st), (val))\n# define sk_ASN1_OBJECT_find_ex(st, val) SKM_sk_find_ex(ASN1_OBJECT, (st), (val))\n# define sk_ASN1_OBJECT_delete(st, i) SKM_sk_delete(ASN1_OBJECT, (st), (i))\n# define sk_ASN1_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_OBJECT, (st), (ptr))\n# define sk_ASN1_OBJECT_insert(st, val, i) SKM_sk_insert(ASN1_OBJECT, (st), (val), (i))\n# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp))\n# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st)\n# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func))\n# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func))\n# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st))\n# define sk_ASN1_OBJECT_is_sorted(st) SKM_sk_is_sorted(ASN1_OBJECT, (st))\n# define sk_ASN1_STRING_TABLE_new(cmp) SKM_sk_new(ASN1_STRING_TABLE, (cmp))\n# define sk_ASN1_STRING_TABLE_new_null() SKM_sk_new_null(ASN1_STRING_TABLE)\n# define sk_ASN1_STRING_TABLE_free(st) SKM_sk_free(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_num(st) SKM_sk_num(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_value(st, i) SKM_sk_value(ASN1_STRING_TABLE, (st), (i))\n# define sk_ASN1_STRING_TABLE_set(st, i, val) SKM_sk_set(ASN1_STRING_TABLE, (st), (i), (val))\n# define sk_ASN1_STRING_TABLE_zero(st) SKM_sk_zero(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_push(st, val) SKM_sk_push(ASN1_STRING_TABLE, (st), (val))\n# define sk_ASN1_STRING_TABLE_unshift(st, val) SKM_sk_unshift(ASN1_STRING_TABLE, (st), (val))\n# define sk_ASN1_STRING_TABLE_find(st, val) SKM_sk_find(ASN1_STRING_TABLE, (st), (val))\n# define sk_ASN1_STRING_TABLE_find_ex(st, val) SKM_sk_find_ex(ASN1_STRING_TABLE, (st), (val))\n# define sk_ASN1_STRING_TABLE_delete(st, i) SKM_sk_delete(ASN1_STRING_TABLE, (st), (i))\n# define sk_ASN1_STRING_TABLE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_STRING_TABLE, (st), (ptr))\n# define sk_ASN1_STRING_TABLE_insert(st, val, i) SKM_sk_insert(ASN1_STRING_TABLE, (st), (val), (i))\n# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp))\n# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st)\n# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func))\n# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func))\n# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_STRING_TABLE_is_sorted(st) SKM_sk_is_sorted(ASN1_STRING_TABLE, (st))\n# define sk_ASN1_TYPE_new(cmp) SKM_sk_new(ASN1_TYPE, (cmp))\n# define sk_ASN1_TYPE_new_null() SKM_sk_new_null(ASN1_TYPE)\n# define sk_ASN1_TYPE_free(st) SKM_sk_free(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_num(st) SKM_sk_num(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_value(st, i) SKM_sk_value(ASN1_TYPE, (st), (i))\n# define sk_ASN1_TYPE_set(st, i, val) SKM_sk_set(ASN1_TYPE, (st), (i), (val))\n# define sk_ASN1_TYPE_zero(st) SKM_sk_zero(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_push(st, val) SKM_sk_push(ASN1_TYPE, (st), (val))\n# define sk_ASN1_TYPE_unshift(st, val) SKM_sk_unshift(ASN1_TYPE, (st), (val))\n# define sk_ASN1_TYPE_find(st, val) SKM_sk_find(ASN1_TYPE, (st), (val))\n# define sk_ASN1_TYPE_find_ex(st, val) SKM_sk_find_ex(ASN1_TYPE, (st), (val))\n# define sk_ASN1_TYPE_delete(st, i) SKM_sk_delete(ASN1_TYPE, (st), (i))\n# define sk_ASN1_TYPE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_TYPE, (st), (ptr))\n# define sk_ASN1_TYPE_insert(st, val, i) SKM_sk_insert(ASN1_TYPE, (st), (val), (i))\n# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp))\n# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st)\n# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func))\n# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func))\n# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st))\n# define sk_ASN1_TYPE_is_sorted(st) SKM_sk_is_sorted(ASN1_TYPE, (st))\n# define sk_ASN1_UTF8STRING_new(cmp) SKM_sk_new(ASN1_UTF8STRING, (cmp))\n# define sk_ASN1_UTF8STRING_new_null() SKM_sk_new_null(ASN1_UTF8STRING)\n# define sk_ASN1_UTF8STRING_free(st) SKM_sk_free(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_num(st) SKM_sk_num(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_value(st, i) SKM_sk_value(ASN1_UTF8STRING, (st), (i))\n# define sk_ASN1_UTF8STRING_set(st, i, val) SKM_sk_set(ASN1_UTF8STRING, (st), (i), (val))\n# define sk_ASN1_UTF8STRING_zero(st) SKM_sk_zero(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_push(st, val) SKM_sk_push(ASN1_UTF8STRING, (st), (val))\n# define sk_ASN1_UTF8STRING_unshift(st, val) SKM_sk_unshift(ASN1_UTF8STRING, (st), (val))\n# define sk_ASN1_UTF8STRING_find(st, val) SKM_sk_find(ASN1_UTF8STRING, (st), (val))\n# define sk_ASN1_UTF8STRING_find_ex(st, val) SKM_sk_find_ex(ASN1_UTF8STRING, (st), (val))\n# define sk_ASN1_UTF8STRING_delete(st, i) SKM_sk_delete(ASN1_UTF8STRING, (st), (i))\n# define sk_ASN1_UTF8STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_UTF8STRING, (st), (ptr))\n# define sk_ASN1_UTF8STRING_insert(st, val, i) SKM_sk_insert(ASN1_UTF8STRING, (st), (val), (i))\n# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp))\n# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st)\n# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func))\n# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func))\n# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st))\n# define sk_ASN1_UTF8STRING_is_sorted(st) SKM_sk_is_sorted(ASN1_UTF8STRING, (st))\n# define sk_ASN1_VALUE_new(cmp) SKM_sk_new(ASN1_VALUE, (cmp))\n# define sk_ASN1_VALUE_new_null() SKM_sk_new_null(ASN1_VALUE)\n# define sk_ASN1_VALUE_free(st) SKM_sk_free(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_num(st) SKM_sk_num(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_value(st, i) SKM_sk_value(ASN1_VALUE, (st), (i))\n# define sk_ASN1_VALUE_set(st, i, val) SKM_sk_set(ASN1_VALUE, (st), (i), (val))\n# define sk_ASN1_VALUE_zero(st) SKM_sk_zero(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_push(st, val) SKM_sk_push(ASN1_VALUE, (st), (val))\n# define sk_ASN1_VALUE_unshift(st, val) SKM_sk_unshift(ASN1_VALUE, (st), (val))\n# define sk_ASN1_VALUE_find(st, val) SKM_sk_find(ASN1_VALUE, (st), (val))\n# define sk_ASN1_VALUE_find_ex(st, val) SKM_sk_find_ex(ASN1_VALUE, (st), (val))\n# define sk_ASN1_VALUE_delete(st, i) SKM_sk_delete(ASN1_VALUE, (st), (i))\n# define sk_ASN1_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ASN1_VALUE, (st), (ptr))\n# define sk_ASN1_VALUE_insert(st, val, i) SKM_sk_insert(ASN1_VALUE, (st), (val), (i))\n# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp))\n# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st)\n# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func))\n# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func))\n# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st))\n# define sk_ASN1_VALUE_is_sorted(st) SKM_sk_is_sorted(ASN1_VALUE, (st))\n# define sk_BIO_new(cmp) SKM_sk_new(BIO, (cmp))\n# define sk_BIO_new_null() SKM_sk_new_null(BIO)\n# define sk_BIO_free(st) SKM_sk_free(BIO, (st))\n# define sk_BIO_num(st) SKM_sk_num(BIO, (st))\n# define sk_BIO_value(st, i) SKM_sk_value(BIO, (st), (i))\n# define sk_BIO_set(st, i, val) SKM_sk_set(BIO, (st), (i), (val))\n# define sk_BIO_zero(st) SKM_sk_zero(BIO, (st))\n# define sk_BIO_push(st, val) SKM_sk_push(BIO, (st), (val))\n# define sk_BIO_unshift(st, val) SKM_sk_unshift(BIO, (st), (val))\n# define sk_BIO_find(st, val) SKM_sk_find(BIO, (st), (val))\n# define sk_BIO_find_ex(st, val) SKM_sk_find_ex(BIO, (st), (val))\n# define sk_BIO_delete(st, i) SKM_sk_delete(BIO, (st), (i))\n# define sk_BIO_delete_ptr(st, ptr) SKM_sk_delete_ptr(BIO, (st), (ptr))\n# define sk_BIO_insert(st, val, i) SKM_sk_insert(BIO, (st), (val), (i))\n# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp))\n# define sk_BIO_dup(st) SKM_sk_dup(BIO, st)\n# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func))\n# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func))\n# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st))\n# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st))\n# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st))\n# define sk_BIO_is_sorted(st) SKM_sk_is_sorted(BIO, (st))\n# define sk_BY_DIR_ENTRY_new(cmp) SKM_sk_new(BY_DIR_ENTRY, (cmp))\n# define sk_BY_DIR_ENTRY_new_null() SKM_sk_new_null(BY_DIR_ENTRY)\n# define sk_BY_DIR_ENTRY_free(st) SKM_sk_free(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_num(st) SKM_sk_num(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_value(st, i) SKM_sk_value(BY_DIR_ENTRY, (st), (i))\n# define sk_BY_DIR_ENTRY_set(st, i, val) SKM_sk_set(BY_DIR_ENTRY, (st), (i), (val))\n# define sk_BY_DIR_ENTRY_zero(st) SKM_sk_zero(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_push(st, val) SKM_sk_push(BY_DIR_ENTRY, (st), (val))\n# define sk_BY_DIR_ENTRY_unshift(st, val) SKM_sk_unshift(BY_DIR_ENTRY, (st), (val))\n# define sk_BY_DIR_ENTRY_find(st, val) SKM_sk_find(BY_DIR_ENTRY, (st), (val))\n# define sk_BY_DIR_ENTRY_find_ex(st, val) SKM_sk_find_ex(BY_DIR_ENTRY, (st), (val))\n# define sk_BY_DIR_ENTRY_delete(st, i) SKM_sk_delete(BY_DIR_ENTRY, (st), (i))\n# define sk_BY_DIR_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_ENTRY, (st), (ptr))\n# define sk_BY_DIR_ENTRY_insert(st, val, i) SKM_sk_insert(BY_DIR_ENTRY, (st), (val), (i))\n# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp))\n# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st)\n# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func))\n# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func))\n# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_ENTRY_is_sorted(st) SKM_sk_is_sorted(BY_DIR_ENTRY, (st))\n# define sk_BY_DIR_HASH_new(cmp) SKM_sk_new(BY_DIR_HASH, (cmp))\n# define sk_BY_DIR_HASH_new_null() SKM_sk_new_null(BY_DIR_HASH)\n# define sk_BY_DIR_HASH_free(st) SKM_sk_free(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_num(st) SKM_sk_num(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_value(st, i) SKM_sk_value(BY_DIR_HASH, (st), (i))\n# define sk_BY_DIR_HASH_set(st, i, val) SKM_sk_set(BY_DIR_HASH, (st), (i), (val))\n# define sk_BY_DIR_HASH_zero(st) SKM_sk_zero(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_push(st, val) SKM_sk_push(BY_DIR_HASH, (st), (val))\n# define sk_BY_DIR_HASH_unshift(st, val) SKM_sk_unshift(BY_DIR_HASH, (st), (val))\n# define sk_BY_DIR_HASH_find(st, val) SKM_sk_find(BY_DIR_HASH, (st), (val))\n# define sk_BY_DIR_HASH_find_ex(st, val) SKM_sk_find_ex(BY_DIR_HASH, (st), (val))\n# define sk_BY_DIR_HASH_delete(st, i) SKM_sk_delete(BY_DIR_HASH, (st), (i))\n# define sk_BY_DIR_HASH_delete_ptr(st, ptr) SKM_sk_delete_ptr(BY_DIR_HASH, (st), (ptr))\n# define sk_BY_DIR_HASH_insert(st, val, i) SKM_sk_insert(BY_DIR_HASH, (st), (val), (i))\n# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp))\n# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st)\n# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func))\n# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func))\n# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st))\n# define sk_BY_DIR_HASH_is_sorted(st) SKM_sk_is_sorted(BY_DIR_HASH, (st))\n# define sk_CMS_CertificateChoices_new(cmp) SKM_sk_new(CMS_CertificateChoices, (cmp))\n# define sk_CMS_CertificateChoices_new_null() SKM_sk_new_null(CMS_CertificateChoices)\n# define sk_CMS_CertificateChoices_free(st) SKM_sk_free(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_num(st) SKM_sk_num(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_value(st, i) SKM_sk_value(CMS_CertificateChoices, (st), (i))\n# define sk_CMS_CertificateChoices_set(st, i, val) SKM_sk_set(CMS_CertificateChoices, (st), (i), (val))\n# define sk_CMS_CertificateChoices_zero(st) SKM_sk_zero(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_push(st, val) SKM_sk_push(CMS_CertificateChoices, (st), (val))\n# define sk_CMS_CertificateChoices_unshift(st, val) SKM_sk_unshift(CMS_CertificateChoices, (st), (val))\n# define sk_CMS_CertificateChoices_find(st, val) SKM_sk_find(CMS_CertificateChoices, (st), (val))\n# define sk_CMS_CertificateChoices_find_ex(st, val) SKM_sk_find_ex(CMS_CertificateChoices, (st), (val))\n# define sk_CMS_CertificateChoices_delete(st, i) SKM_sk_delete(CMS_CertificateChoices, (st), (i))\n# define sk_CMS_CertificateChoices_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_CertificateChoices, (st), (ptr))\n# define sk_CMS_CertificateChoices_insert(st, val, i) SKM_sk_insert(CMS_CertificateChoices, (st), (val), (i))\n# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp))\n# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st)\n# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func))\n# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func))\n# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st))\n# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st))\n# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp))\n# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey)\n# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i))\n# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val))\n# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val))\n# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val))\n# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val))\n# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val))\n# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i))\n# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr))\n# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i))\n# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp))\n# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st)\n# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func))\n# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func))\n# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st))\n# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp))\n# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo)\n# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_num(st) SKM_sk_num(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_value(st, i) SKM_sk_value(CMS_RecipientInfo, (st), (i))\n# define sk_CMS_RecipientInfo_set(st, i, val) SKM_sk_set(CMS_RecipientInfo, (st), (i), (val))\n# define sk_CMS_RecipientInfo_zero(st) SKM_sk_zero(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_push(st, val) SKM_sk_push(CMS_RecipientInfo, (st), (val))\n# define sk_CMS_RecipientInfo_unshift(st, val) SKM_sk_unshift(CMS_RecipientInfo, (st), (val))\n# define sk_CMS_RecipientInfo_find(st, val) SKM_sk_find(CMS_RecipientInfo, (st), (val))\n# define sk_CMS_RecipientInfo_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientInfo, (st), (val))\n# define sk_CMS_RecipientInfo_delete(st, i) SKM_sk_delete(CMS_RecipientInfo, (st), (i))\n# define sk_CMS_RecipientInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientInfo, (st), (ptr))\n# define sk_CMS_RecipientInfo_insert(st, val, i) SKM_sk_insert(CMS_RecipientInfo, (st), (val), (i))\n# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp))\n# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st)\n# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func))\n# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func))\n# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st))\n# define sk_CMS_RecipientInfo_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientInfo, (st))\n# define sk_CMS_RevocationInfoChoice_new(cmp) SKM_sk_new(CMS_RevocationInfoChoice, (cmp))\n# define sk_CMS_RevocationInfoChoice_new_null() SKM_sk_new_null(CMS_RevocationInfoChoice)\n# define sk_CMS_RevocationInfoChoice_free(st) SKM_sk_free(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_num(st) SKM_sk_num(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_value(st, i) SKM_sk_value(CMS_RevocationInfoChoice, (st), (i))\n# define sk_CMS_RevocationInfoChoice_set(st, i, val) SKM_sk_set(CMS_RevocationInfoChoice, (st), (i), (val))\n# define sk_CMS_RevocationInfoChoice_zero(st) SKM_sk_zero(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_push(st, val) SKM_sk_push(CMS_RevocationInfoChoice, (st), (val))\n# define sk_CMS_RevocationInfoChoice_unshift(st, val) SKM_sk_unshift(CMS_RevocationInfoChoice, (st), (val))\n# define sk_CMS_RevocationInfoChoice_find(st, val) SKM_sk_find(CMS_RevocationInfoChoice, (st), (val))\n# define sk_CMS_RevocationInfoChoice_find_ex(st, val) SKM_sk_find_ex(CMS_RevocationInfoChoice, (st), (val))\n# define sk_CMS_RevocationInfoChoice_delete(st, i) SKM_sk_delete(CMS_RevocationInfoChoice, (st), (i))\n# define sk_CMS_RevocationInfoChoice_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RevocationInfoChoice, (st), (ptr))\n# define sk_CMS_RevocationInfoChoice_insert(st, val, i) SKM_sk_insert(CMS_RevocationInfoChoice, (st), (val), (i))\n# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp))\n# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st)\n# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func))\n# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func))\n# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_RevocationInfoChoice_is_sorted(st) SKM_sk_is_sorted(CMS_RevocationInfoChoice, (st))\n# define sk_CMS_SignerInfo_new(cmp) SKM_sk_new(CMS_SignerInfo, (cmp))\n# define sk_CMS_SignerInfo_new_null() SKM_sk_new_null(CMS_SignerInfo)\n# define sk_CMS_SignerInfo_free(st) SKM_sk_free(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_num(st) SKM_sk_num(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_value(st, i) SKM_sk_value(CMS_SignerInfo, (st), (i))\n# define sk_CMS_SignerInfo_set(st, i, val) SKM_sk_set(CMS_SignerInfo, (st), (i), (val))\n# define sk_CMS_SignerInfo_zero(st) SKM_sk_zero(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_push(st, val) SKM_sk_push(CMS_SignerInfo, (st), (val))\n# define sk_CMS_SignerInfo_unshift(st, val) SKM_sk_unshift(CMS_SignerInfo, (st), (val))\n# define sk_CMS_SignerInfo_find(st, val) SKM_sk_find(CMS_SignerInfo, (st), (val))\n# define sk_CMS_SignerInfo_find_ex(st, val) SKM_sk_find_ex(CMS_SignerInfo, (st), (val))\n# define sk_CMS_SignerInfo_delete(st, i) SKM_sk_delete(CMS_SignerInfo, (st), (i))\n# define sk_CMS_SignerInfo_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_SignerInfo, (st), (ptr))\n# define sk_CMS_SignerInfo_insert(st, val, i) SKM_sk_insert(CMS_SignerInfo, (st), (val), (i))\n# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp))\n# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st)\n# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func))\n# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func))\n# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st))\n# define sk_CMS_SignerInfo_is_sorted(st) SKM_sk_is_sorted(CMS_SignerInfo, (st))\n# define sk_CONF_IMODULE_new(cmp) SKM_sk_new(CONF_IMODULE, (cmp))\n# define sk_CONF_IMODULE_new_null() SKM_sk_new_null(CONF_IMODULE)\n# define sk_CONF_IMODULE_free(st) SKM_sk_free(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_num(st) SKM_sk_num(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_value(st, i) SKM_sk_value(CONF_IMODULE, (st), (i))\n# define sk_CONF_IMODULE_set(st, i, val) SKM_sk_set(CONF_IMODULE, (st), (i), (val))\n# define sk_CONF_IMODULE_zero(st) SKM_sk_zero(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_push(st, val) SKM_sk_push(CONF_IMODULE, (st), (val))\n# define sk_CONF_IMODULE_unshift(st, val) SKM_sk_unshift(CONF_IMODULE, (st), (val))\n# define sk_CONF_IMODULE_find(st, val) SKM_sk_find(CONF_IMODULE, (st), (val))\n# define sk_CONF_IMODULE_find_ex(st, val) SKM_sk_find_ex(CONF_IMODULE, (st), (val))\n# define sk_CONF_IMODULE_delete(st, i) SKM_sk_delete(CONF_IMODULE, (st), (i))\n# define sk_CONF_IMODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_IMODULE, (st), (ptr))\n# define sk_CONF_IMODULE_insert(st, val, i) SKM_sk_insert(CONF_IMODULE, (st), (val), (i))\n# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp))\n# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st)\n# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func))\n# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func))\n# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st))\n# define sk_CONF_IMODULE_is_sorted(st) SKM_sk_is_sorted(CONF_IMODULE, (st))\n# define sk_CONF_MODULE_new(cmp) SKM_sk_new(CONF_MODULE, (cmp))\n# define sk_CONF_MODULE_new_null() SKM_sk_new_null(CONF_MODULE)\n# define sk_CONF_MODULE_free(st) SKM_sk_free(CONF_MODULE, (st))\n# define sk_CONF_MODULE_num(st) SKM_sk_num(CONF_MODULE, (st))\n# define sk_CONF_MODULE_value(st, i) SKM_sk_value(CONF_MODULE, (st), (i))\n# define sk_CONF_MODULE_set(st, i, val) SKM_sk_set(CONF_MODULE, (st), (i), (val))\n# define sk_CONF_MODULE_zero(st) SKM_sk_zero(CONF_MODULE, (st))\n# define sk_CONF_MODULE_push(st, val) SKM_sk_push(CONF_MODULE, (st), (val))\n# define sk_CONF_MODULE_unshift(st, val) SKM_sk_unshift(CONF_MODULE, (st), (val))\n# define sk_CONF_MODULE_find(st, val) SKM_sk_find(CONF_MODULE, (st), (val))\n# define sk_CONF_MODULE_find_ex(st, val) SKM_sk_find_ex(CONF_MODULE, (st), (val))\n# define sk_CONF_MODULE_delete(st, i) SKM_sk_delete(CONF_MODULE, (st), (i))\n# define sk_CONF_MODULE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_MODULE, (st), (ptr))\n# define sk_CONF_MODULE_insert(st, val, i) SKM_sk_insert(CONF_MODULE, (st), (val), (i))\n# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp))\n# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st)\n# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func))\n# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func))\n# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st))\n# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st))\n# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st))\n# define sk_CONF_MODULE_is_sorted(st) SKM_sk_is_sorted(CONF_MODULE, (st))\n# define sk_CONF_VALUE_new(cmp) SKM_sk_new(CONF_VALUE, (cmp))\n# define sk_CONF_VALUE_new_null() SKM_sk_new_null(CONF_VALUE)\n# define sk_CONF_VALUE_free(st) SKM_sk_free(CONF_VALUE, (st))\n# define sk_CONF_VALUE_num(st) SKM_sk_num(CONF_VALUE, (st))\n# define sk_CONF_VALUE_value(st, i) SKM_sk_value(CONF_VALUE, (st), (i))\n# define sk_CONF_VALUE_set(st, i, val) SKM_sk_set(CONF_VALUE, (st), (i), (val))\n# define sk_CONF_VALUE_zero(st) SKM_sk_zero(CONF_VALUE, (st))\n# define sk_CONF_VALUE_push(st, val) SKM_sk_push(CONF_VALUE, (st), (val))\n# define sk_CONF_VALUE_unshift(st, val) SKM_sk_unshift(CONF_VALUE, (st), (val))\n# define sk_CONF_VALUE_find(st, val) SKM_sk_find(CONF_VALUE, (st), (val))\n# define sk_CONF_VALUE_find_ex(st, val) SKM_sk_find_ex(CONF_VALUE, (st), (val))\n# define sk_CONF_VALUE_delete(st, i) SKM_sk_delete(CONF_VALUE, (st), (i))\n# define sk_CONF_VALUE_delete_ptr(st, ptr) SKM_sk_delete_ptr(CONF_VALUE, (st), (ptr))\n# define sk_CONF_VALUE_insert(st, val, i) SKM_sk_insert(CONF_VALUE, (st), (val), (i))\n# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp))\n# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st)\n# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func))\n# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func))\n# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st))\n# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st))\n# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st))\n# define sk_CONF_VALUE_is_sorted(st) SKM_sk_is_sorted(CONF_VALUE, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_new(cmp) SKM_sk_new(CRYPTO_EX_DATA_FUNCS, (cmp))\n# define sk_CRYPTO_EX_DATA_FUNCS_new_null() SKM_sk_new_null(CRYPTO_EX_DATA_FUNCS)\n# define sk_CRYPTO_EX_DATA_FUNCS_free(st) SKM_sk_free(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_num(st) SKM_sk_num(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_value(st, i) SKM_sk_value(CRYPTO_EX_DATA_FUNCS, (st), (i))\n# define sk_CRYPTO_EX_DATA_FUNCS_set(st, i, val) SKM_sk_set(CRYPTO_EX_DATA_FUNCS, (st), (i), (val))\n# define sk_CRYPTO_EX_DATA_FUNCS_zero(st) SKM_sk_zero(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_push(st, val) SKM_sk_push(CRYPTO_EX_DATA_FUNCS, (st), (val))\n# define sk_CRYPTO_EX_DATA_FUNCS_unshift(st, val) SKM_sk_unshift(CRYPTO_EX_DATA_FUNCS, (st), (val))\n# define sk_CRYPTO_EX_DATA_FUNCS_find(st, val) SKM_sk_find(CRYPTO_EX_DATA_FUNCS, (st), (val))\n# define sk_CRYPTO_EX_DATA_FUNCS_find_ex(st, val) SKM_sk_find_ex(CRYPTO_EX_DATA_FUNCS, (st), (val))\n# define sk_CRYPTO_EX_DATA_FUNCS_delete(st, i) SKM_sk_delete(CRYPTO_EX_DATA_FUNCS, (st), (i))\n# define sk_CRYPTO_EX_DATA_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_EX_DATA_FUNCS, (st), (ptr))\n# define sk_CRYPTO_EX_DATA_FUNCS_insert(st, val, i) SKM_sk_insert(CRYPTO_EX_DATA_FUNCS, (st), (val), (i))\n# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp))\n# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st)\n# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func))\n# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func))\n# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_EX_DATA_FUNCS_is_sorted(st) SKM_sk_is_sorted(CRYPTO_EX_DATA_FUNCS, (st))\n# define sk_CRYPTO_dynlock_new(cmp) SKM_sk_new(CRYPTO_dynlock, (cmp))\n# define sk_CRYPTO_dynlock_new_null() SKM_sk_new_null(CRYPTO_dynlock)\n# define sk_CRYPTO_dynlock_free(st) SKM_sk_free(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_num(st) SKM_sk_num(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_value(st, i) SKM_sk_value(CRYPTO_dynlock, (st), (i))\n# define sk_CRYPTO_dynlock_set(st, i, val) SKM_sk_set(CRYPTO_dynlock, (st), (i), (val))\n# define sk_CRYPTO_dynlock_zero(st) SKM_sk_zero(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_push(st, val) SKM_sk_push(CRYPTO_dynlock, (st), (val))\n# define sk_CRYPTO_dynlock_unshift(st, val) SKM_sk_unshift(CRYPTO_dynlock, (st), (val))\n# define sk_CRYPTO_dynlock_find(st, val) SKM_sk_find(CRYPTO_dynlock, (st), (val))\n# define sk_CRYPTO_dynlock_find_ex(st, val) SKM_sk_find_ex(CRYPTO_dynlock, (st), (val))\n# define sk_CRYPTO_dynlock_delete(st, i) SKM_sk_delete(CRYPTO_dynlock, (st), (i))\n# define sk_CRYPTO_dynlock_delete_ptr(st, ptr) SKM_sk_delete_ptr(CRYPTO_dynlock, (st), (ptr))\n# define sk_CRYPTO_dynlock_insert(st, val, i) SKM_sk_insert(CRYPTO_dynlock, (st), (val), (i))\n# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp))\n# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st)\n# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func))\n# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func))\n# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st))\n# define sk_CRYPTO_dynlock_is_sorted(st) SKM_sk_is_sorted(CRYPTO_dynlock, (st))\n# define sk_DIST_POINT_new(cmp) SKM_sk_new(DIST_POINT, (cmp))\n# define sk_DIST_POINT_new_null() SKM_sk_new_null(DIST_POINT)\n# define sk_DIST_POINT_free(st) SKM_sk_free(DIST_POINT, (st))\n# define sk_DIST_POINT_num(st) SKM_sk_num(DIST_POINT, (st))\n# define sk_DIST_POINT_value(st, i) SKM_sk_value(DIST_POINT, (st), (i))\n# define sk_DIST_POINT_set(st, i, val) SKM_sk_set(DIST_POINT, (st), (i), (val))\n# define sk_DIST_POINT_zero(st) SKM_sk_zero(DIST_POINT, (st))\n# define sk_DIST_POINT_push(st, val) SKM_sk_push(DIST_POINT, (st), (val))\n# define sk_DIST_POINT_unshift(st, val) SKM_sk_unshift(DIST_POINT, (st), (val))\n# define sk_DIST_POINT_find(st, val) SKM_sk_find(DIST_POINT, (st), (val))\n# define sk_DIST_POINT_find_ex(st, val) SKM_sk_find_ex(DIST_POINT, (st), (val))\n# define sk_DIST_POINT_delete(st, i) SKM_sk_delete(DIST_POINT, (st), (i))\n# define sk_DIST_POINT_delete_ptr(st, ptr) SKM_sk_delete_ptr(DIST_POINT, (st), (ptr))\n# define sk_DIST_POINT_insert(st, val, i) SKM_sk_insert(DIST_POINT, (st), (val), (i))\n# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp))\n# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st)\n# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func))\n# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func))\n# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st))\n# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st))\n# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st))\n# define sk_DIST_POINT_is_sorted(st) SKM_sk_is_sorted(DIST_POINT, (st))\n# define sk_ENGINE_new(cmp) SKM_sk_new(ENGINE, (cmp))\n# define sk_ENGINE_new_null() SKM_sk_new_null(ENGINE)\n# define sk_ENGINE_free(st) SKM_sk_free(ENGINE, (st))\n# define sk_ENGINE_num(st) SKM_sk_num(ENGINE, (st))\n# define sk_ENGINE_value(st, i) SKM_sk_value(ENGINE, (st), (i))\n# define sk_ENGINE_set(st, i, val) SKM_sk_set(ENGINE, (st), (i), (val))\n# define sk_ENGINE_zero(st) SKM_sk_zero(ENGINE, (st))\n# define sk_ENGINE_push(st, val) SKM_sk_push(ENGINE, (st), (val))\n# define sk_ENGINE_unshift(st, val) SKM_sk_unshift(ENGINE, (st), (val))\n# define sk_ENGINE_find(st, val) SKM_sk_find(ENGINE, (st), (val))\n# define sk_ENGINE_find_ex(st, val) SKM_sk_find_ex(ENGINE, (st), (val))\n# define sk_ENGINE_delete(st, i) SKM_sk_delete(ENGINE, (st), (i))\n# define sk_ENGINE_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE, (st), (ptr))\n# define sk_ENGINE_insert(st, val, i) SKM_sk_insert(ENGINE, (st), (val), (i))\n# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp))\n# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st)\n# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func))\n# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func))\n# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st))\n# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st))\n# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st))\n# define sk_ENGINE_is_sorted(st) SKM_sk_is_sorted(ENGINE, (st))\n# define sk_ENGINE_CLEANUP_ITEM_new(cmp) SKM_sk_new(ENGINE_CLEANUP_ITEM, (cmp))\n# define sk_ENGINE_CLEANUP_ITEM_new_null() SKM_sk_new_null(ENGINE_CLEANUP_ITEM)\n# define sk_ENGINE_CLEANUP_ITEM_free(st) SKM_sk_free(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_num(st) SKM_sk_num(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_value(st, i) SKM_sk_value(ENGINE_CLEANUP_ITEM, (st), (i))\n# define sk_ENGINE_CLEANUP_ITEM_set(st, i, val) SKM_sk_set(ENGINE_CLEANUP_ITEM, (st), (i), (val))\n# define sk_ENGINE_CLEANUP_ITEM_zero(st) SKM_sk_zero(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_push(st, val) SKM_sk_push(ENGINE_CLEANUP_ITEM, (st), (val))\n# define sk_ENGINE_CLEANUP_ITEM_unshift(st, val) SKM_sk_unshift(ENGINE_CLEANUP_ITEM, (st), (val))\n# define sk_ENGINE_CLEANUP_ITEM_find(st, val) SKM_sk_find(ENGINE_CLEANUP_ITEM, (st), (val))\n# define sk_ENGINE_CLEANUP_ITEM_find_ex(st, val) SKM_sk_find_ex(ENGINE_CLEANUP_ITEM, (st), (val))\n# define sk_ENGINE_CLEANUP_ITEM_delete(st, i) SKM_sk_delete(ENGINE_CLEANUP_ITEM, (st), (i))\n# define sk_ENGINE_CLEANUP_ITEM_delete_ptr(st, ptr) SKM_sk_delete_ptr(ENGINE_CLEANUP_ITEM, (st), (ptr))\n# define sk_ENGINE_CLEANUP_ITEM_insert(st, val, i) SKM_sk_insert(ENGINE_CLEANUP_ITEM, (st), (val), (i))\n# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp))\n# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st)\n# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func))\n# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func))\n# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ENGINE_CLEANUP_ITEM_is_sorted(st) SKM_sk_is_sorted(ENGINE_CLEANUP_ITEM, (st))\n# define sk_ESS_CERT_ID_new(cmp) SKM_sk_new(ESS_CERT_ID, (cmp))\n# define sk_ESS_CERT_ID_new_null() SKM_sk_new_null(ESS_CERT_ID)\n# define sk_ESS_CERT_ID_free(st) SKM_sk_free(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_num(st) SKM_sk_num(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_value(st, i) SKM_sk_value(ESS_CERT_ID, (st), (i))\n# define sk_ESS_CERT_ID_set(st, i, val) SKM_sk_set(ESS_CERT_ID, (st), (i), (val))\n# define sk_ESS_CERT_ID_zero(st) SKM_sk_zero(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_push(st, val) SKM_sk_push(ESS_CERT_ID, (st), (val))\n# define sk_ESS_CERT_ID_unshift(st, val) SKM_sk_unshift(ESS_CERT_ID, (st), (val))\n# define sk_ESS_CERT_ID_find(st, val) SKM_sk_find(ESS_CERT_ID, (st), (val))\n# define sk_ESS_CERT_ID_find_ex(st, val) SKM_sk_find_ex(ESS_CERT_ID, (st), (val))\n# define sk_ESS_CERT_ID_delete(st, i) SKM_sk_delete(ESS_CERT_ID, (st), (i))\n# define sk_ESS_CERT_ID_delete_ptr(st, ptr) SKM_sk_delete_ptr(ESS_CERT_ID, (st), (ptr))\n# define sk_ESS_CERT_ID_insert(st, val, i) SKM_sk_insert(ESS_CERT_ID, (st), (val), (i))\n# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp))\n# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st)\n# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func))\n# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func))\n# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st))\n# define sk_ESS_CERT_ID_is_sorted(st) SKM_sk_is_sorted(ESS_CERT_ID, (st))\n# define sk_EVP_MD_new(cmp) SKM_sk_new(EVP_MD, (cmp))\n# define sk_EVP_MD_new_null() SKM_sk_new_null(EVP_MD)\n# define sk_EVP_MD_free(st) SKM_sk_free(EVP_MD, (st))\n# define sk_EVP_MD_num(st) SKM_sk_num(EVP_MD, (st))\n# define sk_EVP_MD_value(st, i) SKM_sk_value(EVP_MD, (st), (i))\n# define sk_EVP_MD_set(st, i, val) SKM_sk_set(EVP_MD, (st), (i), (val))\n# define sk_EVP_MD_zero(st) SKM_sk_zero(EVP_MD, (st))\n# define sk_EVP_MD_push(st, val) SKM_sk_push(EVP_MD, (st), (val))\n# define sk_EVP_MD_unshift(st, val) SKM_sk_unshift(EVP_MD, (st), (val))\n# define sk_EVP_MD_find(st, val) SKM_sk_find(EVP_MD, (st), (val))\n# define sk_EVP_MD_find_ex(st, val) SKM_sk_find_ex(EVP_MD, (st), (val))\n# define sk_EVP_MD_delete(st, i) SKM_sk_delete(EVP_MD, (st), (i))\n# define sk_EVP_MD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_MD, (st), (ptr))\n# define sk_EVP_MD_insert(st, val, i) SKM_sk_insert(EVP_MD, (st), (val), (i))\n# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp))\n# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st)\n# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func))\n# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func))\n# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st))\n# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st))\n# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st))\n# define sk_EVP_MD_is_sorted(st) SKM_sk_is_sorted(EVP_MD, (st))\n# define sk_EVP_PBE_CTL_new(cmp) SKM_sk_new(EVP_PBE_CTL, (cmp))\n# define sk_EVP_PBE_CTL_new_null() SKM_sk_new_null(EVP_PBE_CTL)\n# define sk_EVP_PBE_CTL_free(st) SKM_sk_free(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_num(st) SKM_sk_num(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_value(st, i) SKM_sk_value(EVP_PBE_CTL, (st), (i))\n# define sk_EVP_PBE_CTL_set(st, i, val) SKM_sk_set(EVP_PBE_CTL, (st), (i), (val))\n# define sk_EVP_PBE_CTL_zero(st) SKM_sk_zero(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_push(st, val) SKM_sk_push(EVP_PBE_CTL, (st), (val))\n# define sk_EVP_PBE_CTL_unshift(st, val) SKM_sk_unshift(EVP_PBE_CTL, (st), (val))\n# define sk_EVP_PBE_CTL_find(st, val) SKM_sk_find(EVP_PBE_CTL, (st), (val))\n# define sk_EVP_PBE_CTL_find_ex(st, val) SKM_sk_find_ex(EVP_PBE_CTL, (st), (val))\n# define sk_EVP_PBE_CTL_delete(st, i) SKM_sk_delete(EVP_PBE_CTL, (st), (i))\n# define sk_EVP_PBE_CTL_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PBE_CTL, (st), (ptr))\n# define sk_EVP_PBE_CTL_insert(st, val, i) SKM_sk_insert(EVP_PBE_CTL, (st), (val), (i))\n# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp))\n# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st)\n# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func))\n# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func))\n# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st))\n# define sk_EVP_PBE_CTL_is_sorted(st) SKM_sk_is_sorted(EVP_PBE_CTL, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_ASN1_METHOD, (cmp))\n# define sk_EVP_PKEY_ASN1_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_ASN1_METHOD)\n# define sk_EVP_PKEY_ASN1_METHOD_free(st) SKM_sk_free(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_num(st) SKM_sk_num(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_ASN1_METHOD, (st), (i))\n# define sk_EVP_PKEY_ASN1_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_ASN1_METHOD, (st), (i), (val))\n# define sk_EVP_PKEY_ASN1_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_ASN1_METHOD, (st), (val))\n# define sk_EVP_PKEY_ASN1_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_ASN1_METHOD, (st), (val))\n# define sk_EVP_PKEY_ASN1_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_ASN1_METHOD, (st), (val))\n# define sk_EVP_PKEY_ASN1_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_ASN1_METHOD, (st), (val))\n# define sk_EVP_PKEY_ASN1_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_ASN1_METHOD, (st), (i))\n# define sk_EVP_PKEY_ASN1_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_ASN1_METHOD, (st), (ptr))\n# define sk_EVP_PKEY_ASN1_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_ASN1_METHOD, (st), (val), (i))\n# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp))\n# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st)\n# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func))\n# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func))\n# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_ASN1_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_ASN1_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_new(cmp) SKM_sk_new(EVP_PKEY_METHOD, (cmp))\n# define sk_EVP_PKEY_METHOD_new_null() SKM_sk_new_null(EVP_PKEY_METHOD)\n# define sk_EVP_PKEY_METHOD_free(st) SKM_sk_free(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_num(st) SKM_sk_num(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_value(st, i) SKM_sk_value(EVP_PKEY_METHOD, (st), (i))\n# define sk_EVP_PKEY_METHOD_set(st, i, val) SKM_sk_set(EVP_PKEY_METHOD, (st), (i), (val))\n# define sk_EVP_PKEY_METHOD_zero(st) SKM_sk_zero(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_push(st, val) SKM_sk_push(EVP_PKEY_METHOD, (st), (val))\n# define sk_EVP_PKEY_METHOD_unshift(st, val) SKM_sk_unshift(EVP_PKEY_METHOD, (st), (val))\n# define sk_EVP_PKEY_METHOD_find(st, val) SKM_sk_find(EVP_PKEY_METHOD, (st), (val))\n# define sk_EVP_PKEY_METHOD_find_ex(st, val) SKM_sk_find_ex(EVP_PKEY_METHOD, (st), (val))\n# define sk_EVP_PKEY_METHOD_delete(st, i) SKM_sk_delete(EVP_PKEY_METHOD, (st), (i))\n# define sk_EVP_PKEY_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(EVP_PKEY_METHOD, (st), (ptr))\n# define sk_EVP_PKEY_METHOD_insert(st, val, i) SKM_sk_insert(EVP_PKEY_METHOD, (st), (val), (i))\n# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp))\n# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st)\n# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func))\n# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func))\n# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st))\n# define sk_EVP_PKEY_METHOD_is_sorted(st) SKM_sk_is_sorted(EVP_PKEY_METHOD, (st))\n# define sk_GENERAL_NAME_new(cmp) SKM_sk_new(GENERAL_NAME, (cmp))\n# define sk_GENERAL_NAME_new_null() SKM_sk_new_null(GENERAL_NAME)\n# define sk_GENERAL_NAME_free(st) SKM_sk_free(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_num(st) SKM_sk_num(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_value(st, i) SKM_sk_value(GENERAL_NAME, (st), (i))\n# define sk_GENERAL_NAME_set(st, i, val) SKM_sk_set(GENERAL_NAME, (st), (i), (val))\n# define sk_GENERAL_NAME_zero(st) SKM_sk_zero(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_push(st, val) SKM_sk_push(GENERAL_NAME, (st), (val))\n# define sk_GENERAL_NAME_unshift(st, val) SKM_sk_unshift(GENERAL_NAME, (st), (val))\n# define sk_GENERAL_NAME_find(st, val) SKM_sk_find(GENERAL_NAME, (st), (val))\n# define sk_GENERAL_NAME_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAME, (st), (val))\n# define sk_GENERAL_NAME_delete(st, i) SKM_sk_delete(GENERAL_NAME, (st), (i))\n# define sk_GENERAL_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAME, (st), (ptr))\n# define sk_GENERAL_NAME_insert(st, val, i) SKM_sk_insert(GENERAL_NAME, (st), (val), (i))\n# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp))\n# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st)\n# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func))\n# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func))\n# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st))\n# define sk_GENERAL_NAME_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAME, (st))\n# define sk_GENERAL_NAMES_new(cmp) SKM_sk_new(GENERAL_NAMES, (cmp))\n# define sk_GENERAL_NAMES_new_null() SKM_sk_new_null(GENERAL_NAMES)\n# define sk_GENERAL_NAMES_free(st) SKM_sk_free(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_num(st) SKM_sk_num(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_value(st, i) SKM_sk_value(GENERAL_NAMES, (st), (i))\n# define sk_GENERAL_NAMES_set(st, i, val) SKM_sk_set(GENERAL_NAMES, (st), (i), (val))\n# define sk_GENERAL_NAMES_zero(st) SKM_sk_zero(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_push(st, val) SKM_sk_push(GENERAL_NAMES, (st), (val))\n# define sk_GENERAL_NAMES_unshift(st, val) SKM_sk_unshift(GENERAL_NAMES, (st), (val))\n# define sk_GENERAL_NAMES_find(st, val) SKM_sk_find(GENERAL_NAMES, (st), (val))\n# define sk_GENERAL_NAMES_find_ex(st, val) SKM_sk_find_ex(GENERAL_NAMES, (st), (val))\n# define sk_GENERAL_NAMES_delete(st, i) SKM_sk_delete(GENERAL_NAMES, (st), (i))\n# define sk_GENERAL_NAMES_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_NAMES, (st), (ptr))\n# define sk_GENERAL_NAMES_insert(st, val, i) SKM_sk_insert(GENERAL_NAMES, (st), (val), (i))\n# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp))\n# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st)\n# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func))\n# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func))\n# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st))\n# define sk_GENERAL_NAMES_is_sorted(st) SKM_sk_is_sorted(GENERAL_NAMES, (st))\n# define sk_GENERAL_SUBTREE_new(cmp) SKM_sk_new(GENERAL_SUBTREE, (cmp))\n# define sk_GENERAL_SUBTREE_new_null() SKM_sk_new_null(GENERAL_SUBTREE)\n# define sk_GENERAL_SUBTREE_free(st) SKM_sk_free(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_num(st) SKM_sk_num(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_value(st, i) SKM_sk_value(GENERAL_SUBTREE, (st), (i))\n# define sk_GENERAL_SUBTREE_set(st, i, val) SKM_sk_set(GENERAL_SUBTREE, (st), (i), (val))\n# define sk_GENERAL_SUBTREE_zero(st) SKM_sk_zero(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_push(st, val) SKM_sk_push(GENERAL_SUBTREE, (st), (val))\n# define sk_GENERAL_SUBTREE_unshift(st, val) SKM_sk_unshift(GENERAL_SUBTREE, (st), (val))\n# define sk_GENERAL_SUBTREE_find(st, val) SKM_sk_find(GENERAL_SUBTREE, (st), (val))\n# define sk_GENERAL_SUBTREE_find_ex(st, val) SKM_sk_find_ex(GENERAL_SUBTREE, (st), (val))\n# define sk_GENERAL_SUBTREE_delete(st, i) SKM_sk_delete(GENERAL_SUBTREE, (st), (i))\n# define sk_GENERAL_SUBTREE_delete_ptr(st, ptr) SKM_sk_delete_ptr(GENERAL_SUBTREE, (st), (ptr))\n# define sk_GENERAL_SUBTREE_insert(st, val, i) SKM_sk_insert(GENERAL_SUBTREE, (st), (val), (i))\n# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp))\n# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st)\n# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func))\n# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func))\n# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st))\n# define sk_GENERAL_SUBTREE_is_sorted(st) SKM_sk_is_sorted(GENERAL_SUBTREE, (st))\n# define sk_IPAddressFamily_new(cmp) SKM_sk_new(IPAddressFamily, (cmp))\n# define sk_IPAddressFamily_new_null() SKM_sk_new_null(IPAddressFamily)\n# define sk_IPAddressFamily_free(st) SKM_sk_free(IPAddressFamily, (st))\n# define sk_IPAddressFamily_num(st) SKM_sk_num(IPAddressFamily, (st))\n# define sk_IPAddressFamily_value(st, i) SKM_sk_value(IPAddressFamily, (st), (i))\n# define sk_IPAddressFamily_set(st, i, val) SKM_sk_set(IPAddressFamily, (st), (i), (val))\n# define sk_IPAddressFamily_zero(st) SKM_sk_zero(IPAddressFamily, (st))\n# define sk_IPAddressFamily_push(st, val) SKM_sk_push(IPAddressFamily, (st), (val))\n# define sk_IPAddressFamily_unshift(st, val) SKM_sk_unshift(IPAddressFamily, (st), (val))\n# define sk_IPAddressFamily_find(st, val) SKM_sk_find(IPAddressFamily, (st), (val))\n# define sk_IPAddressFamily_find_ex(st, val) SKM_sk_find_ex(IPAddressFamily, (st), (val))\n# define sk_IPAddressFamily_delete(st, i) SKM_sk_delete(IPAddressFamily, (st), (i))\n# define sk_IPAddressFamily_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressFamily, (st), (ptr))\n# define sk_IPAddressFamily_insert(st, val, i) SKM_sk_insert(IPAddressFamily, (st), (val), (i))\n# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp))\n# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st)\n# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func))\n# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func))\n# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st))\n# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st))\n# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st))\n# define sk_IPAddressFamily_is_sorted(st) SKM_sk_is_sorted(IPAddressFamily, (st))\n# define sk_IPAddressOrRange_new(cmp) SKM_sk_new(IPAddressOrRange, (cmp))\n# define sk_IPAddressOrRange_new_null() SKM_sk_new_null(IPAddressOrRange)\n# define sk_IPAddressOrRange_free(st) SKM_sk_free(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_num(st) SKM_sk_num(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_value(st, i) SKM_sk_value(IPAddressOrRange, (st), (i))\n# define sk_IPAddressOrRange_set(st, i, val) SKM_sk_set(IPAddressOrRange, (st), (i), (val))\n# define sk_IPAddressOrRange_zero(st) SKM_sk_zero(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_push(st, val) SKM_sk_push(IPAddressOrRange, (st), (val))\n# define sk_IPAddressOrRange_unshift(st, val) SKM_sk_unshift(IPAddressOrRange, (st), (val))\n# define sk_IPAddressOrRange_find(st, val) SKM_sk_find(IPAddressOrRange, (st), (val))\n# define sk_IPAddressOrRange_find_ex(st, val) SKM_sk_find_ex(IPAddressOrRange, (st), (val))\n# define sk_IPAddressOrRange_delete(st, i) SKM_sk_delete(IPAddressOrRange, (st), (i))\n# define sk_IPAddressOrRange_delete_ptr(st, ptr) SKM_sk_delete_ptr(IPAddressOrRange, (st), (ptr))\n# define sk_IPAddressOrRange_insert(st, val, i) SKM_sk_insert(IPAddressOrRange, (st), (val), (i))\n# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp))\n# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st)\n# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func))\n# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func))\n# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st))\n# define sk_IPAddressOrRange_is_sorted(st) SKM_sk_is_sorted(IPAddressOrRange, (st))\n# define sk_KRB5_APREQBODY_new(cmp) SKM_sk_new(KRB5_APREQBODY, (cmp))\n# define sk_KRB5_APREQBODY_new_null() SKM_sk_new_null(KRB5_APREQBODY)\n# define sk_KRB5_APREQBODY_free(st) SKM_sk_free(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_num(st) SKM_sk_num(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_value(st, i) SKM_sk_value(KRB5_APREQBODY, (st), (i))\n# define sk_KRB5_APREQBODY_set(st, i, val) SKM_sk_set(KRB5_APREQBODY, (st), (i), (val))\n# define sk_KRB5_APREQBODY_zero(st) SKM_sk_zero(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_push(st, val) SKM_sk_push(KRB5_APREQBODY, (st), (val))\n# define sk_KRB5_APREQBODY_unshift(st, val) SKM_sk_unshift(KRB5_APREQBODY, (st), (val))\n# define sk_KRB5_APREQBODY_find(st, val) SKM_sk_find(KRB5_APREQBODY, (st), (val))\n# define sk_KRB5_APREQBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_APREQBODY, (st), (val))\n# define sk_KRB5_APREQBODY_delete(st, i) SKM_sk_delete(KRB5_APREQBODY, (st), (i))\n# define sk_KRB5_APREQBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_APREQBODY, (st), (ptr))\n# define sk_KRB5_APREQBODY_insert(st, val, i) SKM_sk_insert(KRB5_APREQBODY, (st), (val), (i))\n# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp))\n# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st)\n# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func))\n# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func))\n# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st))\n# define sk_KRB5_APREQBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_APREQBODY, (st))\n# define sk_KRB5_AUTHDATA_new(cmp) SKM_sk_new(KRB5_AUTHDATA, (cmp))\n# define sk_KRB5_AUTHDATA_new_null() SKM_sk_new_null(KRB5_AUTHDATA)\n# define sk_KRB5_AUTHDATA_free(st) SKM_sk_free(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_num(st) SKM_sk_num(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_value(st, i) SKM_sk_value(KRB5_AUTHDATA, (st), (i))\n# define sk_KRB5_AUTHDATA_set(st, i, val) SKM_sk_set(KRB5_AUTHDATA, (st), (i), (val))\n# define sk_KRB5_AUTHDATA_zero(st) SKM_sk_zero(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_push(st, val) SKM_sk_push(KRB5_AUTHDATA, (st), (val))\n# define sk_KRB5_AUTHDATA_unshift(st, val) SKM_sk_unshift(KRB5_AUTHDATA, (st), (val))\n# define sk_KRB5_AUTHDATA_find(st, val) SKM_sk_find(KRB5_AUTHDATA, (st), (val))\n# define sk_KRB5_AUTHDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHDATA, (st), (val))\n# define sk_KRB5_AUTHDATA_delete(st, i) SKM_sk_delete(KRB5_AUTHDATA, (st), (i))\n# define sk_KRB5_AUTHDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHDATA, (st), (ptr))\n# define sk_KRB5_AUTHDATA_insert(st, val, i) SKM_sk_insert(KRB5_AUTHDATA, (st), (val), (i))\n# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp))\n# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st)\n# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func))\n# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func))\n# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHDATA, (st))\n# define sk_KRB5_AUTHENTBODY_new(cmp) SKM_sk_new(KRB5_AUTHENTBODY, (cmp))\n# define sk_KRB5_AUTHENTBODY_new_null() SKM_sk_new_null(KRB5_AUTHENTBODY)\n# define sk_KRB5_AUTHENTBODY_free(st) SKM_sk_free(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_num(st) SKM_sk_num(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_value(st, i) SKM_sk_value(KRB5_AUTHENTBODY, (st), (i))\n# define sk_KRB5_AUTHENTBODY_set(st, i, val) SKM_sk_set(KRB5_AUTHENTBODY, (st), (i), (val))\n# define sk_KRB5_AUTHENTBODY_zero(st) SKM_sk_zero(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_push(st, val) SKM_sk_push(KRB5_AUTHENTBODY, (st), (val))\n# define sk_KRB5_AUTHENTBODY_unshift(st, val) SKM_sk_unshift(KRB5_AUTHENTBODY, (st), (val))\n# define sk_KRB5_AUTHENTBODY_find(st, val) SKM_sk_find(KRB5_AUTHENTBODY, (st), (val))\n# define sk_KRB5_AUTHENTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_AUTHENTBODY, (st), (val))\n# define sk_KRB5_AUTHENTBODY_delete(st, i) SKM_sk_delete(KRB5_AUTHENTBODY, (st), (i))\n# define sk_KRB5_AUTHENTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_AUTHENTBODY, (st), (ptr))\n# define sk_KRB5_AUTHENTBODY_insert(st, val, i) SKM_sk_insert(KRB5_AUTHENTBODY, (st), (val), (i))\n# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp))\n# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st)\n# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func))\n# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func))\n# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_AUTHENTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_AUTHENTBODY, (st))\n# define sk_KRB5_CHECKSUM_new(cmp) SKM_sk_new(KRB5_CHECKSUM, (cmp))\n# define sk_KRB5_CHECKSUM_new_null() SKM_sk_new_null(KRB5_CHECKSUM)\n# define sk_KRB5_CHECKSUM_free(st) SKM_sk_free(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_num(st) SKM_sk_num(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_value(st, i) SKM_sk_value(KRB5_CHECKSUM, (st), (i))\n# define sk_KRB5_CHECKSUM_set(st, i, val) SKM_sk_set(KRB5_CHECKSUM, (st), (i), (val))\n# define sk_KRB5_CHECKSUM_zero(st) SKM_sk_zero(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_push(st, val) SKM_sk_push(KRB5_CHECKSUM, (st), (val))\n# define sk_KRB5_CHECKSUM_unshift(st, val) SKM_sk_unshift(KRB5_CHECKSUM, (st), (val))\n# define sk_KRB5_CHECKSUM_find(st, val) SKM_sk_find(KRB5_CHECKSUM, (st), (val))\n# define sk_KRB5_CHECKSUM_find_ex(st, val) SKM_sk_find_ex(KRB5_CHECKSUM, (st), (val))\n# define sk_KRB5_CHECKSUM_delete(st, i) SKM_sk_delete(KRB5_CHECKSUM, (st), (i))\n# define sk_KRB5_CHECKSUM_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_CHECKSUM, (st), (ptr))\n# define sk_KRB5_CHECKSUM_insert(st, val, i) SKM_sk_insert(KRB5_CHECKSUM, (st), (val), (i))\n# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp))\n# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st)\n# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func))\n# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func))\n# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st))\n# define sk_KRB5_CHECKSUM_is_sorted(st) SKM_sk_is_sorted(KRB5_CHECKSUM, (st))\n# define sk_KRB5_ENCDATA_new(cmp) SKM_sk_new(KRB5_ENCDATA, (cmp))\n# define sk_KRB5_ENCDATA_new_null() SKM_sk_new_null(KRB5_ENCDATA)\n# define sk_KRB5_ENCDATA_free(st) SKM_sk_free(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_num(st) SKM_sk_num(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_value(st, i) SKM_sk_value(KRB5_ENCDATA, (st), (i))\n# define sk_KRB5_ENCDATA_set(st, i, val) SKM_sk_set(KRB5_ENCDATA, (st), (i), (val))\n# define sk_KRB5_ENCDATA_zero(st) SKM_sk_zero(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_push(st, val) SKM_sk_push(KRB5_ENCDATA, (st), (val))\n# define sk_KRB5_ENCDATA_unshift(st, val) SKM_sk_unshift(KRB5_ENCDATA, (st), (val))\n# define sk_KRB5_ENCDATA_find(st, val) SKM_sk_find(KRB5_ENCDATA, (st), (val))\n# define sk_KRB5_ENCDATA_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCDATA, (st), (val))\n# define sk_KRB5_ENCDATA_delete(st, i) SKM_sk_delete(KRB5_ENCDATA, (st), (i))\n# define sk_KRB5_ENCDATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCDATA, (st), (ptr))\n# define sk_KRB5_ENCDATA_insert(st, val, i) SKM_sk_insert(KRB5_ENCDATA, (st), (val), (i))\n# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp))\n# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st)\n# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func))\n# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func))\n# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCDATA_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCDATA, (st))\n# define sk_KRB5_ENCKEY_new(cmp) SKM_sk_new(KRB5_ENCKEY, (cmp))\n# define sk_KRB5_ENCKEY_new_null() SKM_sk_new_null(KRB5_ENCKEY)\n# define sk_KRB5_ENCKEY_free(st) SKM_sk_free(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_num(st) SKM_sk_num(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_value(st, i) SKM_sk_value(KRB5_ENCKEY, (st), (i))\n# define sk_KRB5_ENCKEY_set(st, i, val) SKM_sk_set(KRB5_ENCKEY, (st), (i), (val))\n# define sk_KRB5_ENCKEY_zero(st) SKM_sk_zero(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_push(st, val) SKM_sk_push(KRB5_ENCKEY, (st), (val))\n# define sk_KRB5_ENCKEY_unshift(st, val) SKM_sk_unshift(KRB5_ENCKEY, (st), (val))\n# define sk_KRB5_ENCKEY_find(st, val) SKM_sk_find(KRB5_ENCKEY, (st), (val))\n# define sk_KRB5_ENCKEY_find_ex(st, val) SKM_sk_find_ex(KRB5_ENCKEY, (st), (val))\n# define sk_KRB5_ENCKEY_delete(st, i) SKM_sk_delete(KRB5_ENCKEY, (st), (i))\n# define sk_KRB5_ENCKEY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_ENCKEY, (st), (ptr))\n# define sk_KRB5_ENCKEY_insert(st, val, i) SKM_sk_insert(KRB5_ENCKEY, (st), (val), (i))\n# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp))\n# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st)\n# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func))\n# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func))\n# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st))\n# define sk_KRB5_ENCKEY_is_sorted(st) SKM_sk_is_sorted(KRB5_ENCKEY, (st))\n# define sk_KRB5_PRINCNAME_new(cmp) SKM_sk_new(KRB5_PRINCNAME, (cmp))\n# define sk_KRB5_PRINCNAME_new_null() SKM_sk_new_null(KRB5_PRINCNAME)\n# define sk_KRB5_PRINCNAME_free(st) SKM_sk_free(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_num(st) SKM_sk_num(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_value(st, i) SKM_sk_value(KRB5_PRINCNAME, (st), (i))\n# define sk_KRB5_PRINCNAME_set(st, i, val) SKM_sk_set(KRB5_PRINCNAME, (st), (i), (val))\n# define sk_KRB5_PRINCNAME_zero(st) SKM_sk_zero(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_push(st, val) SKM_sk_push(KRB5_PRINCNAME, (st), (val))\n# define sk_KRB5_PRINCNAME_unshift(st, val) SKM_sk_unshift(KRB5_PRINCNAME, (st), (val))\n# define sk_KRB5_PRINCNAME_find(st, val) SKM_sk_find(KRB5_PRINCNAME, (st), (val))\n# define sk_KRB5_PRINCNAME_find_ex(st, val) SKM_sk_find_ex(KRB5_PRINCNAME, (st), (val))\n# define sk_KRB5_PRINCNAME_delete(st, i) SKM_sk_delete(KRB5_PRINCNAME, (st), (i))\n# define sk_KRB5_PRINCNAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_PRINCNAME, (st), (ptr))\n# define sk_KRB5_PRINCNAME_insert(st, val, i) SKM_sk_insert(KRB5_PRINCNAME, (st), (val), (i))\n# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp))\n# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st)\n# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func))\n# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func))\n# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st))\n# define sk_KRB5_PRINCNAME_is_sorted(st) SKM_sk_is_sorted(KRB5_PRINCNAME, (st))\n# define sk_KRB5_TKTBODY_new(cmp) SKM_sk_new(KRB5_TKTBODY, (cmp))\n# define sk_KRB5_TKTBODY_new_null() SKM_sk_new_null(KRB5_TKTBODY)\n# define sk_KRB5_TKTBODY_free(st) SKM_sk_free(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_num(st) SKM_sk_num(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_value(st, i) SKM_sk_value(KRB5_TKTBODY, (st), (i))\n# define sk_KRB5_TKTBODY_set(st, i, val) SKM_sk_set(KRB5_TKTBODY, (st), (i), (val))\n# define sk_KRB5_TKTBODY_zero(st) SKM_sk_zero(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_push(st, val) SKM_sk_push(KRB5_TKTBODY, (st), (val))\n# define sk_KRB5_TKTBODY_unshift(st, val) SKM_sk_unshift(KRB5_TKTBODY, (st), (val))\n# define sk_KRB5_TKTBODY_find(st, val) SKM_sk_find(KRB5_TKTBODY, (st), (val))\n# define sk_KRB5_TKTBODY_find_ex(st, val) SKM_sk_find_ex(KRB5_TKTBODY, (st), (val))\n# define sk_KRB5_TKTBODY_delete(st, i) SKM_sk_delete(KRB5_TKTBODY, (st), (i))\n# define sk_KRB5_TKTBODY_delete_ptr(st, ptr) SKM_sk_delete_ptr(KRB5_TKTBODY, (st), (ptr))\n# define sk_KRB5_TKTBODY_insert(st, val, i) SKM_sk_insert(KRB5_TKTBODY, (st), (val), (i))\n# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp))\n# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st)\n# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func))\n# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func))\n# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st))\n# define sk_KRB5_TKTBODY_is_sorted(st) SKM_sk_is_sorted(KRB5_TKTBODY, (st))\n# define sk_MEM_OBJECT_DATA_new(cmp) SKM_sk_new(MEM_OBJECT_DATA, (cmp))\n# define sk_MEM_OBJECT_DATA_new_null() SKM_sk_new_null(MEM_OBJECT_DATA)\n# define sk_MEM_OBJECT_DATA_free(st) SKM_sk_free(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_num(st) SKM_sk_num(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_value(st, i) SKM_sk_value(MEM_OBJECT_DATA, (st), (i))\n# define sk_MEM_OBJECT_DATA_set(st, i, val) SKM_sk_set(MEM_OBJECT_DATA, (st), (i), (val))\n# define sk_MEM_OBJECT_DATA_zero(st) SKM_sk_zero(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_push(st, val) SKM_sk_push(MEM_OBJECT_DATA, (st), (val))\n# define sk_MEM_OBJECT_DATA_unshift(st, val) SKM_sk_unshift(MEM_OBJECT_DATA, (st), (val))\n# define sk_MEM_OBJECT_DATA_find(st, val) SKM_sk_find(MEM_OBJECT_DATA, (st), (val))\n# define sk_MEM_OBJECT_DATA_find_ex(st, val) SKM_sk_find_ex(MEM_OBJECT_DATA, (st), (val))\n# define sk_MEM_OBJECT_DATA_delete(st, i) SKM_sk_delete(MEM_OBJECT_DATA, (st), (i))\n# define sk_MEM_OBJECT_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(MEM_OBJECT_DATA, (st), (ptr))\n# define sk_MEM_OBJECT_DATA_insert(st, val, i) SKM_sk_insert(MEM_OBJECT_DATA, (st), (val), (i))\n# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp))\n# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st)\n# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func))\n# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func))\n# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st))\n# define sk_MEM_OBJECT_DATA_is_sorted(st) SKM_sk_is_sorted(MEM_OBJECT_DATA, (st))\n# define sk_MIME_HEADER_new(cmp) SKM_sk_new(MIME_HEADER, (cmp))\n# define sk_MIME_HEADER_new_null() SKM_sk_new_null(MIME_HEADER)\n# define sk_MIME_HEADER_free(st) SKM_sk_free(MIME_HEADER, (st))\n# define sk_MIME_HEADER_num(st) SKM_sk_num(MIME_HEADER, (st))\n# define sk_MIME_HEADER_value(st, i) SKM_sk_value(MIME_HEADER, (st), (i))\n# define sk_MIME_HEADER_set(st, i, val) SKM_sk_set(MIME_HEADER, (st), (i), (val))\n# define sk_MIME_HEADER_zero(st) SKM_sk_zero(MIME_HEADER, (st))\n# define sk_MIME_HEADER_push(st, val) SKM_sk_push(MIME_HEADER, (st), (val))\n# define sk_MIME_HEADER_unshift(st, val) SKM_sk_unshift(MIME_HEADER, (st), (val))\n# define sk_MIME_HEADER_find(st, val) SKM_sk_find(MIME_HEADER, (st), (val))\n# define sk_MIME_HEADER_find_ex(st, val) SKM_sk_find_ex(MIME_HEADER, (st), (val))\n# define sk_MIME_HEADER_delete(st, i) SKM_sk_delete(MIME_HEADER, (st), (i))\n# define sk_MIME_HEADER_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_HEADER, (st), (ptr))\n# define sk_MIME_HEADER_insert(st, val, i) SKM_sk_insert(MIME_HEADER, (st), (val), (i))\n# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp))\n# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st)\n# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func))\n# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func))\n# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st))\n# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st))\n# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st))\n# define sk_MIME_HEADER_is_sorted(st) SKM_sk_is_sorted(MIME_HEADER, (st))\n# define sk_MIME_PARAM_new(cmp) SKM_sk_new(MIME_PARAM, (cmp))\n# define sk_MIME_PARAM_new_null() SKM_sk_new_null(MIME_PARAM)\n# define sk_MIME_PARAM_free(st) SKM_sk_free(MIME_PARAM, (st))\n# define sk_MIME_PARAM_num(st) SKM_sk_num(MIME_PARAM, (st))\n# define sk_MIME_PARAM_value(st, i) SKM_sk_value(MIME_PARAM, (st), (i))\n# define sk_MIME_PARAM_set(st, i, val) SKM_sk_set(MIME_PARAM, (st), (i), (val))\n# define sk_MIME_PARAM_zero(st) SKM_sk_zero(MIME_PARAM, (st))\n# define sk_MIME_PARAM_push(st, val) SKM_sk_push(MIME_PARAM, (st), (val))\n# define sk_MIME_PARAM_unshift(st, val) SKM_sk_unshift(MIME_PARAM, (st), (val))\n# define sk_MIME_PARAM_find(st, val) SKM_sk_find(MIME_PARAM, (st), (val))\n# define sk_MIME_PARAM_find_ex(st, val) SKM_sk_find_ex(MIME_PARAM, (st), (val))\n# define sk_MIME_PARAM_delete(st, i) SKM_sk_delete(MIME_PARAM, (st), (i))\n# define sk_MIME_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(MIME_PARAM, (st), (ptr))\n# define sk_MIME_PARAM_insert(st, val, i) SKM_sk_insert(MIME_PARAM, (st), (val), (i))\n# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp))\n# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st)\n# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func))\n# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func))\n# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st))\n# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st))\n# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st))\n# define sk_MIME_PARAM_is_sorted(st) SKM_sk_is_sorted(MIME_PARAM, (st))\n# define sk_NAME_FUNCS_new(cmp) SKM_sk_new(NAME_FUNCS, (cmp))\n# define sk_NAME_FUNCS_new_null() SKM_sk_new_null(NAME_FUNCS)\n# define sk_NAME_FUNCS_free(st) SKM_sk_free(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_num(st) SKM_sk_num(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_value(st, i) SKM_sk_value(NAME_FUNCS, (st), (i))\n# define sk_NAME_FUNCS_set(st, i, val) SKM_sk_set(NAME_FUNCS, (st), (i), (val))\n# define sk_NAME_FUNCS_zero(st) SKM_sk_zero(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_push(st, val) SKM_sk_push(NAME_FUNCS, (st), (val))\n# define sk_NAME_FUNCS_unshift(st, val) SKM_sk_unshift(NAME_FUNCS, (st), (val))\n# define sk_NAME_FUNCS_find(st, val) SKM_sk_find(NAME_FUNCS, (st), (val))\n# define sk_NAME_FUNCS_find_ex(st, val) SKM_sk_find_ex(NAME_FUNCS, (st), (val))\n# define sk_NAME_FUNCS_delete(st, i) SKM_sk_delete(NAME_FUNCS, (st), (i))\n# define sk_NAME_FUNCS_delete_ptr(st, ptr) SKM_sk_delete_ptr(NAME_FUNCS, (st), (ptr))\n# define sk_NAME_FUNCS_insert(st, val, i) SKM_sk_insert(NAME_FUNCS, (st), (val), (i))\n# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp))\n# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st)\n# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func))\n# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func))\n# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st))\n# define sk_NAME_FUNCS_is_sorted(st) SKM_sk_is_sorted(NAME_FUNCS, (st))\n# define sk_OCSP_CERTID_new(cmp) SKM_sk_new(OCSP_CERTID, (cmp))\n# define sk_OCSP_CERTID_new_null() SKM_sk_new_null(OCSP_CERTID)\n# define sk_OCSP_CERTID_free(st) SKM_sk_free(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_num(st) SKM_sk_num(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_value(st, i) SKM_sk_value(OCSP_CERTID, (st), (i))\n# define sk_OCSP_CERTID_set(st, i, val) SKM_sk_set(OCSP_CERTID, (st), (i), (val))\n# define sk_OCSP_CERTID_zero(st) SKM_sk_zero(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_push(st, val) SKM_sk_push(OCSP_CERTID, (st), (val))\n# define sk_OCSP_CERTID_unshift(st, val) SKM_sk_unshift(OCSP_CERTID, (st), (val))\n# define sk_OCSP_CERTID_find(st, val) SKM_sk_find(OCSP_CERTID, (st), (val))\n# define sk_OCSP_CERTID_find_ex(st, val) SKM_sk_find_ex(OCSP_CERTID, (st), (val))\n# define sk_OCSP_CERTID_delete(st, i) SKM_sk_delete(OCSP_CERTID, (st), (i))\n# define sk_OCSP_CERTID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_CERTID, (st), (ptr))\n# define sk_OCSP_CERTID_insert(st, val, i) SKM_sk_insert(OCSP_CERTID, (st), (val), (i))\n# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp))\n# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st)\n# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func))\n# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func))\n# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st))\n# define sk_OCSP_CERTID_is_sorted(st) SKM_sk_is_sorted(OCSP_CERTID, (st))\n# define sk_OCSP_ONEREQ_new(cmp) SKM_sk_new(OCSP_ONEREQ, (cmp))\n# define sk_OCSP_ONEREQ_new_null() SKM_sk_new_null(OCSP_ONEREQ)\n# define sk_OCSP_ONEREQ_free(st) SKM_sk_free(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_num(st) SKM_sk_num(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_value(st, i) SKM_sk_value(OCSP_ONEREQ, (st), (i))\n# define sk_OCSP_ONEREQ_set(st, i, val) SKM_sk_set(OCSP_ONEREQ, (st), (i), (val))\n# define sk_OCSP_ONEREQ_zero(st) SKM_sk_zero(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_push(st, val) SKM_sk_push(OCSP_ONEREQ, (st), (val))\n# define sk_OCSP_ONEREQ_unshift(st, val) SKM_sk_unshift(OCSP_ONEREQ, (st), (val))\n# define sk_OCSP_ONEREQ_find(st, val) SKM_sk_find(OCSP_ONEREQ, (st), (val))\n# define sk_OCSP_ONEREQ_find_ex(st, val) SKM_sk_find_ex(OCSP_ONEREQ, (st), (val))\n# define sk_OCSP_ONEREQ_delete(st, i) SKM_sk_delete(OCSP_ONEREQ, (st), (i))\n# define sk_OCSP_ONEREQ_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_ONEREQ, (st), (ptr))\n# define sk_OCSP_ONEREQ_insert(st, val, i) SKM_sk_insert(OCSP_ONEREQ, (st), (val), (i))\n# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp))\n# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st)\n# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func))\n# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func))\n# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st))\n# define sk_OCSP_ONEREQ_is_sorted(st) SKM_sk_is_sorted(OCSP_ONEREQ, (st))\n# define sk_OCSP_RESPID_new(cmp) SKM_sk_new(OCSP_RESPID, (cmp))\n# define sk_OCSP_RESPID_new_null() SKM_sk_new_null(OCSP_RESPID)\n# define sk_OCSP_RESPID_free(st) SKM_sk_free(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_num(st) SKM_sk_num(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_value(st, i) SKM_sk_value(OCSP_RESPID, (st), (i))\n# define sk_OCSP_RESPID_set(st, i, val) SKM_sk_set(OCSP_RESPID, (st), (i), (val))\n# define sk_OCSP_RESPID_zero(st) SKM_sk_zero(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_push(st, val) SKM_sk_push(OCSP_RESPID, (st), (val))\n# define sk_OCSP_RESPID_unshift(st, val) SKM_sk_unshift(OCSP_RESPID, (st), (val))\n# define sk_OCSP_RESPID_find(st, val) SKM_sk_find(OCSP_RESPID, (st), (val))\n# define sk_OCSP_RESPID_find_ex(st, val) SKM_sk_find_ex(OCSP_RESPID, (st), (val))\n# define sk_OCSP_RESPID_delete(st, i) SKM_sk_delete(OCSP_RESPID, (st), (i))\n# define sk_OCSP_RESPID_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_RESPID, (st), (ptr))\n# define sk_OCSP_RESPID_insert(st, val, i) SKM_sk_insert(OCSP_RESPID, (st), (val), (i))\n# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp))\n# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st)\n# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func))\n# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func))\n# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st))\n# define sk_OCSP_RESPID_is_sorted(st) SKM_sk_is_sorted(OCSP_RESPID, (st))\n# define sk_OCSP_SINGLERESP_new(cmp) SKM_sk_new(OCSP_SINGLERESP, (cmp))\n# define sk_OCSP_SINGLERESP_new_null() SKM_sk_new_null(OCSP_SINGLERESP)\n# define sk_OCSP_SINGLERESP_free(st) SKM_sk_free(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_num(st) SKM_sk_num(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_value(st, i) SKM_sk_value(OCSP_SINGLERESP, (st), (i))\n# define sk_OCSP_SINGLERESP_set(st, i, val) SKM_sk_set(OCSP_SINGLERESP, (st), (i), (val))\n# define sk_OCSP_SINGLERESP_zero(st) SKM_sk_zero(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_push(st, val) SKM_sk_push(OCSP_SINGLERESP, (st), (val))\n# define sk_OCSP_SINGLERESP_unshift(st, val) SKM_sk_unshift(OCSP_SINGLERESP, (st), (val))\n# define sk_OCSP_SINGLERESP_find(st, val) SKM_sk_find(OCSP_SINGLERESP, (st), (val))\n# define sk_OCSP_SINGLERESP_find_ex(st, val) SKM_sk_find_ex(OCSP_SINGLERESP, (st), (val))\n# define sk_OCSP_SINGLERESP_delete(st, i) SKM_sk_delete(OCSP_SINGLERESP, (st), (i))\n# define sk_OCSP_SINGLERESP_delete_ptr(st, ptr) SKM_sk_delete_ptr(OCSP_SINGLERESP, (st), (ptr))\n# define sk_OCSP_SINGLERESP_insert(st, val, i) SKM_sk_insert(OCSP_SINGLERESP, (st), (val), (i))\n# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp))\n# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st)\n# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func))\n# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func))\n# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st))\n# define sk_OCSP_SINGLERESP_is_sorted(st) SKM_sk_is_sorted(OCSP_SINGLERESP, (st))\n# define sk_PKCS12_SAFEBAG_new(cmp) SKM_sk_new(PKCS12_SAFEBAG, (cmp))\n# define sk_PKCS12_SAFEBAG_new_null() SKM_sk_new_null(PKCS12_SAFEBAG)\n# define sk_PKCS12_SAFEBAG_free(st) SKM_sk_free(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_num(st) SKM_sk_num(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_value(st, i) SKM_sk_value(PKCS12_SAFEBAG, (st), (i))\n# define sk_PKCS12_SAFEBAG_set(st, i, val) SKM_sk_set(PKCS12_SAFEBAG, (st), (i), (val))\n# define sk_PKCS12_SAFEBAG_zero(st) SKM_sk_zero(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_push(st, val) SKM_sk_push(PKCS12_SAFEBAG, (st), (val))\n# define sk_PKCS12_SAFEBAG_unshift(st, val) SKM_sk_unshift(PKCS12_SAFEBAG, (st), (val))\n# define sk_PKCS12_SAFEBAG_find(st, val) SKM_sk_find(PKCS12_SAFEBAG, (st), (val))\n# define sk_PKCS12_SAFEBAG_find_ex(st, val) SKM_sk_find_ex(PKCS12_SAFEBAG, (st), (val))\n# define sk_PKCS12_SAFEBAG_delete(st, i) SKM_sk_delete(PKCS12_SAFEBAG, (st), (i))\n# define sk_PKCS12_SAFEBAG_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS12_SAFEBAG, (st), (ptr))\n# define sk_PKCS12_SAFEBAG_insert(st, val, i) SKM_sk_insert(PKCS12_SAFEBAG, (st), (val), (i))\n# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp))\n# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st)\n# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func))\n# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func))\n# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st))\n# define sk_PKCS12_SAFEBAG_is_sorted(st) SKM_sk_is_sorted(PKCS12_SAFEBAG, (st))\n# define sk_PKCS7_new(cmp) SKM_sk_new(PKCS7, (cmp))\n# define sk_PKCS7_new_null() SKM_sk_new_null(PKCS7)\n# define sk_PKCS7_free(st) SKM_sk_free(PKCS7, (st))\n# define sk_PKCS7_num(st) SKM_sk_num(PKCS7, (st))\n# define sk_PKCS7_value(st, i) SKM_sk_value(PKCS7, (st), (i))\n# define sk_PKCS7_set(st, i, val) SKM_sk_set(PKCS7, (st), (i), (val))\n# define sk_PKCS7_zero(st) SKM_sk_zero(PKCS7, (st))\n# define sk_PKCS7_push(st, val) SKM_sk_push(PKCS7, (st), (val))\n# define sk_PKCS7_unshift(st, val) SKM_sk_unshift(PKCS7, (st), (val))\n# define sk_PKCS7_find(st, val) SKM_sk_find(PKCS7, (st), (val))\n# define sk_PKCS7_find_ex(st, val) SKM_sk_find_ex(PKCS7, (st), (val))\n# define sk_PKCS7_delete(st, i) SKM_sk_delete(PKCS7, (st), (i))\n# define sk_PKCS7_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7, (st), (ptr))\n# define sk_PKCS7_insert(st, val, i) SKM_sk_insert(PKCS7, (st), (val), (i))\n# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp))\n# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st)\n# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func))\n# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func))\n# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st))\n# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st))\n# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st))\n# define sk_PKCS7_is_sorted(st) SKM_sk_is_sorted(PKCS7, (st))\n# define sk_PKCS7_RECIP_INFO_new(cmp) SKM_sk_new(PKCS7_RECIP_INFO, (cmp))\n# define sk_PKCS7_RECIP_INFO_new_null() SKM_sk_new_null(PKCS7_RECIP_INFO)\n# define sk_PKCS7_RECIP_INFO_free(st) SKM_sk_free(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_num(st) SKM_sk_num(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_value(st, i) SKM_sk_value(PKCS7_RECIP_INFO, (st), (i))\n# define sk_PKCS7_RECIP_INFO_set(st, i, val) SKM_sk_set(PKCS7_RECIP_INFO, (st), (i), (val))\n# define sk_PKCS7_RECIP_INFO_zero(st) SKM_sk_zero(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_push(st, val) SKM_sk_push(PKCS7_RECIP_INFO, (st), (val))\n# define sk_PKCS7_RECIP_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_RECIP_INFO, (st), (val))\n# define sk_PKCS7_RECIP_INFO_find(st, val) SKM_sk_find(PKCS7_RECIP_INFO, (st), (val))\n# define sk_PKCS7_RECIP_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_RECIP_INFO, (st), (val))\n# define sk_PKCS7_RECIP_INFO_delete(st, i) SKM_sk_delete(PKCS7_RECIP_INFO, (st), (i))\n# define sk_PKCS7_RECIP_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_RECIP_INFO, (st), (ptr))\n# define sk_PKCS7_RECIP_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_RECIP_INFO, (st), (val), (i))\n# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp))\n# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st)\n# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func))\n# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func))\n# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_RECIP_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_RECIP_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_new(cmp) SKM_sk_new(PKCS7_SIGNER_INFO, (cmp))\n# define sk_PKCS7_SIGNER_INFO_new_null() SKM_sk_new_null(PKCS7_SIGNER_INFO)\n# define sk_PKCS7_SIGNER_INFO_free(st) SKM_sk_free(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_num(st) SKM_sk_num(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_value(st, i) SKM_sk_value(PKCS7_SIGNER_INFO, (st), (i))\n# define sk_PKCS7_SIGNER_INFO_set(st, i, val) SKM_sk_set(PKCS7_SIGNER_INFO, (st), (i), (val))\n# define sk_PKCS7_SIGNER_INFO_zero(st) SKM_sk_zero(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_push(st, val) SKM_sk_push(PKCS7_SIGNER_INFO, (st), (val))\n# define sk_PKCS7_SIGNER_INFO_unshift(st, val) SKM_sk_unshift(PKCS7_SIGNER_INFO, (st), (val))\n# define sk_PKCS7_SIGNER_INFO_find(st, val) SKM_sk_find(PKCS7_SIGNER_INFO, (st), (val))\n# define sk_PKCS7_SIGNER_INFO_find_ex(st, val) SKM_sk_find_ex(PKCS7_SIGNER_INFO, (st), (val))\n# define sk_PKCS7_SIGNER_INFO_delete(st, i) SKM_sk_delete(PKCS7_SIGNER_INFO, (st), (i))\n# define sk_PKCS7_SIGNER_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(PKCS7_SIGNER_INFO, (st), (ptr))\n# define sk_PKCS7_SIGNER_INFO_insert(st, val, i) SKM_sk_insert(PKCS7_SIGNER_INFO, (st), (val), (i))\n# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp))\n# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st)\n# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func))\n# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func))\n# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st))\n# define sk_PKCS7_SIGNER_INFO_is_sorted(st) SKM_sk_is_sorted(PKCS7_SIGNER_INFO, (st))\n# define sk_POLICYINFO_new(cmp) SKM_sk_new(POLICYINFO, (cmp))\n# define sk_POLICYINFO_new_null() SKM_sk_new_null(POLICYINFO)\n# define sk_POLICYINFO_free(st) SKM_sk_free(POLICYINFO, (st))\n# define sk_POLICYINFO_num(st) SKM_sk_num(POLICYINFO, (st))\n# define sk_POLICYINFO_value(st, i) SKM_sk_value(POLICYINFO, (st), (i))\n# define sk_POLICYINFO_set(st, i, val) SKM_sk_set(POLICYINFO, (st), (i), (val))\n# define sk_POLICYINFO_zero(st) SKM_sk_zero(POLICYINFO, (st))\n# define sk_POLICYINFO_push(st, val) SKM_sk_push(POLICYINFO, (st), (val))\n# define sk_POLICYINFO_unshift(st, val) SKM_sk_unshift(POLICYINFO, (st), (val))\n# define sk_POLICYINFO_find(st, val) SKM_sk_find(POLICYINFO, (st), (val))\n# define sk_POLICYINFO_find_ex(st, val) SKM_sk_find_ex(POLICYINFO, (st), (val))\n# define sk_POLICYINFO_delete(st, i) SKM_sk_delete(POLICYINFO, (st), (i))\n# define sk_POLICYINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYINFO, (st), (ptr))\n# define sk_POLICYINFO_insert(st, val, i) SKM_sk_insert(POLICYINFO, (st), (val), (i))\n# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp))\n# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st)\n# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func))\n# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func))\n# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st))\n# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st))\n# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st))\n# define sk_POLICYINFO_is_sorted(st) SKM_sk_is_sorted(POLICYINFO, (st))\n# define sk_POLICYQUALINFO_new(cmp) SKM_sk_new(POLICYQUALINFO, (cmp))\n# define sk_POLICYQUALINFO_new_null() SKM_sk_new_null(POLICYQUALINFO)\n# define sk_POLICYQUALINFO_free(st) SKM_sk_free(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_num(st) SKM_sk_num(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_value(st, i) SKM_sk_value(POLICYQUALINFO, (st), (i))\n# define sk_POLICYQUALINFO_set(st, i, val) SKM_sk_set(POLICYQUALINFO, (st), (i), (val))\n# define sk_POLICYQUALINFO_zero(st) SKM_sk_zero(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_push(st, val) SKM_sk_push(POLICYQUALINFO, (st), (val))\n# define sk_POLICYQUALINFO_unshift(st, val) SKM_sk_unshift(POLICYQUALINFO, (st), (val))\n# define sk_POLICYQUALINFO_find(st, val) SKM_sk_find(POLICYQUALINFO, (st), (val))\n# define sk_POLICYQUALINFO_find_ex(st, val) SKM_sk_find_ex(POLICYQUALINFO, (st), (val))\n# define sk_POLICYQUALINFO_delete(st, i) SKM_sk_delete(POLICYQUALINFO, (st), (i))\n# define sk_POLICYQUALINFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICYQUALINFO, (st), (ptr))\n# define sk_POLICYQUALINFO_insert(st, val, i) SKM_sk_insert(POLICYQUALINFO, (st), (val), (i))\n# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp))\n# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st)\n# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func))\n# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func))\n# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st))\n# define sk_POLICYQUALINFO_is_sorted(st) SKM_sk_is_sorted(POLICYQUALINFO, (st))\n# define sk_POLICY_MAPPING_new(cmp) SKM_sk_new(POLICY_MAPPING, (cmp))\n# define sk_POLICY_MAPPING_new_null() SKM_sk_new_null(POLICY_MAPPING)\n# define sk_POLICY_MAPPING_free(st) SKM_sk_free(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_num(st) SKM_sk_num(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_value(st, i) SKM_sk_value(POLICY_MAPPING, (st), (i))\n# define sk_POLICY_MAPPING_set(st, i, val) SKM_sk_set(POLICY_MAPPING, (st), (i), (val))\n# define sk_POLICY_MAPPING_zero(st) SKM_sk_zero(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_push(st, val) SKM_sk_push(POLICY_MAPPING, (st), (val))\n# define sk_POLICY_MAPPING_unshift(st, val) SKM_sk_unshift(POLICY_MAPPING, (st), (val))\n# define sk_POLICY_MAPPING_find(st, val) SKM_sk_find(POLICY_MAPPING, (st), (val))\n# define sk_POLICY_MAPPING_find_ex(st, val) SKM_sk_find_ex(POLICY_MAPPING, (st), (val))\n# define sk_POLICY_MAPPING_delete(st, i) SKM_sk_delete(POLICY_MAPPING, (st), (i))\n# define sk_POLICY_MAPPING_delete_ptr(st, ptr) SKM_sk_delete_ptr(POLICY_MAPPING, (st), (ptr))\n# define sk_POLICY_MAPPING_insert(st, val, i) SKM_sk_insert(POLICY_MAPPING, (st), (val), (i))\n# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp))\n# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st)\n# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func))\n# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func))\n# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st))\n# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st))\n# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp))\n# define sk_SCT_new_null() SKM_sk_new_null(SCT)\n# define sk_SCT_free(st) SKM_sk_free(SCT, (st))\n# define sk_SCT_num(st) SKM_sk_num(SCT, (st))\n# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i))\n# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val))\n# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st))\n# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val))\n# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val))\n# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val))\n# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val))\n# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i))\n# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr))\n# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i))\n# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp))\n# define sk_SCT_dup(st) SKM_sk_dup(SCT, st)\n# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func))\n# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func))\n# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st))\n# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st))\n# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st))\n# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st))\n# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp))\n# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN)\n# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st))\n# define sk_SRP_gN_num(st) SKM_sk_num(SRP_gN, (st))\n# define sk_SRP_gN_value(st, i) SKM_sk_value(SRP_gN, (st), (i))\n# define sk_SRP_gN_set(st, i, val) SKM_sk_set(SRP_gN, (st), (i), (val))\n# define sk_SRP_gN_zero(st) SKM_sk_zero(SRP_gN, (st))\n# define sk_SRP_gN_push(st, val) SKM_sk_push(SRP_gN, (st), (val))\n# define sk_SRP_gN_unshift(st, val) SKM_sk_unshift(SRP_gN, (st), (val))\n# define sk_SRP_gN_find(st, val) SKM_sk_find(SRP_gN, (st), (val))\n# define sk_SRP_gN_find_ex(st, val) SKM_sk_find_ex(SRP_gN, (st), (val))\n# define sk_SRP_gN_delete(st, i) SKM_sk_delete(SRP_gN, (st), (i))\n# define sk_SRP_gN_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN, (st), (ptr))\n# define sk_SRP_gN_insert(st, val, i) SKM_sk_insert(SRP_gN, (st), (val), (i))\n# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp))\n# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st)\n# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func))\n# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func))\n# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st))\n# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st))\n# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st))\n# define sk_SRP_gN_is_sorted(st) SKM_sk_is_sorted(SRP_gN, (st))\n# define sk_SRP_gN_cache_new(cmp) SKM_sk_new(SRP_gN_cache, (cmp))\n# define sk_SRP_gN_cache_new_null() SKM_sk_new_null(SRP_gN_cache)\n# define sk_SRP_gN_cache_free(st) SKM_sk_free(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_num(st) SKM_sk_num(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_value(st, i) SKM_sk_value(SRP_gN_cache, (st), (i))\n# define sk_SRP_gN_cache_set(st, i, val) SKM_sk_set(SRP_gN_cache, (st), (i), (val))\n# define sk_SRP_gN_cache_zero(st) SKM_sk_zero(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_push(st, val) SKM_sk_push(SRP_gN_cache, (st), (val))\n# define sk_SRP_gN_cache_unshift(st, val) SKM_sk_unshift(SRP_gN_cache, (st), (val))\n# define sk_SRP_gN_cache_find(st, val) SKM_sk_find(SRP_gN_cache, (st), (val))\n# define sk_SRP_gN_cache_find_ex(st, val) SKM_sk_find_ex(SRP_gN_cache, (st), (val))\n# define sk_SRP_gN_cache_delete(st, i) SKM_sk_delete(SRP_gN_cache, (st), (i))\n# define sk_SRP_gN_cache_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_gN_cache, (st), (ptr))\n# define sk_SRP_gN_cache_insert(st, val, i) SKM_sk_insert(SRP_gN_cache, (st), (val), (i))\n# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp))\n# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st)\n# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func))\n# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func))\n# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st))\n# define sk_SRP_gN_cache_is_sorted(st) SKM_sk_is_sorted(SRP_gN_cache, (st))\n# define sk_SRP_user_pwd_new(cmp) SKM_sk_new(SRP_user_pwd, (cmp))\n# define sk_SRP_user_pwd_new_null() SKM_sk_new_null(SRP_user_pwd)\n# define sk_SRP_user_pwd_free(st) SKM_sk_free(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_num(st) SKM_sk_num(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_value(st, i) SKM_sk_value(SRP_user_pwd, (st), (i))\n# define sk_SRP_user_pwd_set(st, i, val) SKM_sk_set(SRP_user_pwd, (st), (i), (val))\n# define sk_SRP_user_pwd_zero(st) SKM_sk_zero(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_push(st, val) SKM_sk_push(SRP_user_pwd, (st), (val))\n# define sk_SRP_user_pwd_unshift(st, val) SKM_sk_unshift(SRP_user_pwd, (st), (val))\n# define sk_SRP_user_pwd_find(st, val) SKM_sk_find(SRP_user_pwd, (st), (val))\n# define sk_SRP_user_pwd_find_ex(st, val) SKM_sk_find_ex(SRP_user_pwd, (st), (val))\n# define sk_SRP_user_pwd_delete(st, i) SKM_sk_delete(SRP_user_pwd, (st), (i))\n# define sk_SRP_user_pwd_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRP_user_pwd, (st), (ptr))\n# define sk_SRP_user_pwd_insert(st, val, i) SKM_sk_insert(SRP_user_pwd, (st), (val), (i))\n# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp))\n# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st)\n# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func))\n# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func))\n# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st))\n# define sk_SRP_user_pwd_is_sorted(st) SKM_sk_is_sorted(SRP_user_pwd, (st))\n# define sk_SRTP_PROTECTION_PROFILE_new(cmp) SKM_sk_new(SRTP_PROTECTION_PROFILE, (cmp))\n# define sk_SRTP_PROTECTION_PROFILE_new_null() SKM_sk_new_null(SRTP_PROTECTION_PROFILE)\n# define sk_SRTP_PROTECTION_PROFILE_free(st) SKM_sk_free(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_num(st) SKM_sk_num(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_value(st, i) SKM_sk_value(SRTP_PROTECTION_PROFILE, (st), (i))\n# define sk_SRTP_PROTECTION_PROFILE_set(st, i, val) SKM_sk_set(SRTP_PROTECTION_PROFILE, (st), (i), (val))\n# define sk_SRTP_PROTECTION_PROFILE_zero(st) SKM_sk_zero(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_push(st, val) SKM_sk_push(SRTP_PROTECTION_PROFILE, (st), (val))\n# define sk_SRTP_PROTECTION_PROFILE_unshift(st, val) SKM_sk_unshift(SRTP_PROTECTION_PROFILE, (st), (val))\n# define sk_SRTP_PROTECTION_PROFILE_find(st, val) SKM_sk_find(SRTP_PROTECTION_PROFILE, (st), (val))\n# define sk_SRTP_PROTECTION_PROFILE_find_ex(st, val) SKM_sk_find_ex(SRTP_PROTECTION_PROFILE, (st), (val))\n# define sk_SRTP_PROTECTION_PROFILE_delete(st, i) SKM_sk_delete(SRTP_PROTECTION_PROFILE, (st), (i))\n# define sk_SRTP_PROTECTION_PROFILE_delete_ptr(st, ptr) SKM_sk_delete_ptr(SRTP_PROTECTION_PROFILE, (st), (ptr))\n# define sk_SRTP_PROTECTION_PROFILE_insert(st, val, i) SKM_sk_insert(SRTP_PROTECTION_PROFILE, (st), (val), (i))\n# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp))\n# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st)\n# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func))\n# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func))\n# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SRTP_PROTECTION_PROFILE_is_sorted(st) SKM_sk_is_sorted(SRTP_PROTECTION_PROFILE, (st))\n# define sk_SSL_CIPHER_new(cmp) SKM_sk_new(SSL_CIPHER, (cmp))\n# define sk_SSL_CIPHER_new_null() SKM_sk_new_null(SSL_CIPHER)\n# define sk_SSL_CIPHER_free(st) SKM_sk_free(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_num(st) SKM_sk_num(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_value(st, i) SKM_sk_value(SSL_CIPHER, (st), (i))\n# define sk_SSL_CIPHER_set(st, i, val) SKM_sk_set(SSL_CIPHER, (st), (i), (val))\n# define sk_SSL_CIPHER_zero(st) SKM_sk_zero(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_push(st, val) SKM_sk_push(SSL_CIPHER, (st), (val))\n# define sk_SSL_CIPHER_unshift(st, val) SKM_sk_unshift(SSL_CIPHER, (st), (val))\n# define sk_SSL_CIPHER_find(st, val) SKM_sk_find(SSL_CIPHER, (st), (val))\n# define sk_SSL_CIPHER_find_ex(st, val) SKM_sk_find_ex(SSL_CIPHER, (st), (val))\n# define sk_SSL_CIPHER_delete(st, i) SKM_sk_delete(SSL_CIPHER, (st), (i))\n# define sk_SSL_CIPHER_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_CIPHER, (st), (ptr))\n# define sk_SSL_CIPHER_insert(st, val, i) SKM_sk_insert(SSL_CIPHER, (st), (val), (i))\n# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp))\n# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st)\n# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func))\n# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func))\n# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st))\n# define sk_SSL_CIPHER_is_sorted(st) SKM_sk_is_sorted(SSL_CIPHER, (st))\n# define sk_SSL_COMP_new(cmp) SKM_sk_new(SSL_COMP, (cmp))\n# define sk_SSL_COMP_new_null() SKM_sk_new_null(SSL_COMP)\n# define sk_SSL_COMP_free(st) SKM_sk_free(SSL_COMP, (st))\n# define sk_SSL_COMP_num(st) SKM_sk_num(SSL_COMP, (st))\n# define sk_SSL_COMP_value(st, i) SKM_sk_value(SSL_COMP, (st), (i))\n# define sk_SSL_COMP_set(st, i, val) SKM_sk_set(SSL_COMP, (st), (i), (val))\n# define sk_SSL_COMP_zero(st) SKM_sk_zero(SSL_COMP, (st))\n# define sk_SSL_COMP_push(st, val) SKM_sk_push(SSL_COMP, (st), (val))\n# define sk_SSL_COMP_unshift(st, val) SKM_sk_unshift(SSL_COMP, (st), (val))\n# define sk_SSL_COMP_find(st, val) SKM_sk_find(SSL_COMP, (st), (val))\n# define sk_SSL_COMP_find_ex(st, val) SKM_sk_find_ex(SSL_COMP, (st), (val))\n# define sk_SSL_COMP_delete(st, i) SKM_sk_delete(SSL_COMP, (st), (i))\n# define sk_SSL_COMP_delete_ptr(st, ptr) SKM_sk_delete_ptr(SSL_COMP, (st), (ptr))\n# define sk_SSL_COMP_insert(st, val, i) SKM_sk_insert(SSL_COMP, (st), (val), (i))\n# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp))\n# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st)\n# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func))\n# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func))\n# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st))\n# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st))\n# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st))\n# define sk_SSL_COMP_is_sorted(st) SKM_sk_is_sorted(SSL_COMP, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_new(cmp) SKM_sk_new(STACK_OF_X509_NAME_ENTRY, (cmp))\n# define sk_STACK_OF_X509_NAME_ENTRY_new_null() SKM_sk_new_null(STACK_OF_X509_NAME_ENTRY)\n# define sk_STACK_OF_X509_NAME_ENTRY_free(st) SKM_sk_free(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_num(st) SKM_sk_num(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_value(st, i) SKM_sk_value(STACK_OF_X509_NAME_ENTRY, (st), (i))\n# define sk_STACK_OF_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(STACK_OF_X509_NAME_ENTRY, (st), (i), (val))\n# define sk_STACK_OF_X509_NAME_ENTRY_zero(st) SKM_sk_zero(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_push(st, val) SKM_sk_push(STACK_OF_X509_NAME_ENTRY, (st), (val))\n# define sk_STACK_OF_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(STACK_OF_X509_NAME_ENTRY, (st), (val))\n# define sk_STACK_OF_X509_NAME_ENTRY_find(st, val) SKM_sk_find(STACK_OF_X509_NAME_ENTRY, (st), (val))\n# define sk_STACK_OF_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(STACK_OF_X509_NAME_ENTRY, (st), (val))\n# define sk_STACK_OF_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(STACK_OF_X509_NAME_ENTRY, (st), (i))\n# define sk_STACK_OF_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(STACK_OF_X509_NAME_ENTRY, (st), (ptr))\n# define sk_STACK_OF_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(STACK_OF_X509_NAME_ENTRY, (st), (val), (i))\n# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp))\n# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st)\n# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func))\n# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func))\n# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STACK_OF_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(STACK_OF_X509_NAME_ENTRY, (st))\n# define sk_STORE_ATTR_INFO_new(cmp) SKM_sk_new(STORE_ATTR_INFO, (cmp))\n# define sk_STORE_ATTR_INFO_new_null() SKM_sk_new_null(STORE_ATTR_INFO)\n# define sk_STORE_ATTR_INFO_free(st) SKM_sk_free(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_num(st) SKM_sk_num(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_value(st, i) SKM_sk_value(STORE_ATTR_INFO, (st), (i))\n# define sk_STORE_ATTR_INFO_set(st, i, val) SKM_sk_set(STORE_ATTR_INFO, (st), (i), (val))\n# define sk_STORE_ATTR_INFO_zero(st) SKM_sk_zero(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_push(st, val) SKM_sk_push(STORE_ATTR_INFO, (st), (val))\n# define sk_STORE_ATTR_INFO_unshift(st, val) SKM_sk_unshift(STORE_ATTR_INFO, (st), (val))\n# define sk_STORE_ATTR_INFO_find(st, val) SKM_sk_find(STORE_ATTR_INFO, (st), (val))\n# define sk_STORE_ATTR_INFO_find_ex(st, val) SKM_sk_find_ex(STORE_ATTR_INFO, (st), (val))\n# define sk_STORE_ATTR_INFO_delete(st, i) SKM_sk_delete(STORE_ATTR_INFO, (st), (i))\n# define sk_STORE_ATTR_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_ATTR_INFO, (st), (ptr))\n# define sk_STORE_ATTR_INFO_insert(st, val, i) SKM_sk_insert(STORE_ATTR_INFO, (st), (val), (i))\n# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp))\n# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st)\n# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func))\n# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func))\n# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st))\n# define sk_STORE_ATTR_INFO_is_sorted(st) SKM_sk_is_sorted(STORE_ATTR_INFO, (st))\n# define sk_STORE_OBJECT_new(cmp) SKM_sk_new(STORE_OBJECT, (cmp))\n# define sk_STORE_OBJECT_new_null() SKM_sk_new_null(STORE_OBJECT)\n# define sk_STORE_OBJECT_free(st) SKM_sk_free(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_num(st) SKM_sk_num(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_value(st, i) SKM_sk_value(STORE_OBJECT, (st), (i))\n# define sk_STORE_OBJECT_set(st, i, val) SKM_sk_set(STORE_OBJECT, (st), (i), (val))\n# define sk_STORE_OBJECT_zero(st) SKM_sk_zero(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_push(st, val) SKM_sk_push(STORE_OBJECT, (st), (val))\n# define sk_STORE_OBJECT_unshift(st, val) SKM_sk_unshift(STORE_OBJECT, (st), (val))\n# define sk_STORE_OBJECT_find(st, val) SKM_sk_find(STORE_OBJECT, (st), (val))\n# define sk_STORE_OBJECT_find_ex(st, val) SKM_sk_find_ex(STORE_OBJECT, (st), (val))\n# define sk_STORE_OBJECT_delete(st, i) SKM_sk_delete(STORE_OBJECT, (st), (i))\n# define sk_STORE_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(STORE_OBJECT, (st), (ptr))\n# define sk_STORE_OBJECT_insert(st, val, i) SKM_sk_insert(STORE_OBJECT, (st), (val), (i))\n# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp))\n# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st)\n# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func))\n# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func))\n# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st))\n# define sk_STORE_OBJECT_is_sorted(st) SKM_sk_is_sorted(STORE_OBJECT, (st))\n# define sk_SXNETID_new(cmp) SKM_sk_new(SXNETID, (cmp))\n# define sk_SXNETID_new_null() SKM_sk_new_null(SXNETID)\n# define sk_SXNETID_free(st) SKM_sk_free(SXNETID, (st))\n# define sk_SXNETID_num(st) SKM_sk_num(SXNETID, (st))\n# define sk_SXNETID_value(st, i) SKM_sk_value(SXNETID, (st), (i))\n# define sk_SXNETID_set(st, i, val) SKM_sk_set(SXNETID, (st), (i), (val))\n# define sk_SXNETID_zero(st) SKM_sk_zero(SXNETID, (st))\n# define sk_SXNETID_push(st, val) SKM_sk_push(SXNETID, (st), (val))\n# define sk_SXNETID_unshift(st, val) SKM_sk_unshift(SXNETID, (st), (val))\n# define sk_SXNETID_find(st, val) SKM_sk_find(SXNETID, (st), (val))\n# define sk_SXNETID_find_ex(st, val) SKM_sk_find_ex(SXNETID, (st), (val))\n# define sk_SXNETID_delete(st, i) SKM_sk_delete(SXNETID, (st), (i))\n# define sk_SXNETID_delete_ptr(st, ptr) SKM_sk_delete_ptr(SXNETID, (st), (ptr))\n# define sk_SXNETID_insert(st, val, i) SKM_sk_insert(SXNETID, (st), (val), (i))\n# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp))\n# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st)\n# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func))\n# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func))\n# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st))\n# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st))\n# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st))\n# define sk_SXNETID_is_sorted(st) SKM_sk_is_sorted(SXNETID, (st))\n# define sk_UI_STRING_new(cmp) SKM_sk_new(UI_STRING, (cmp))\n# define sk_UI_STRING_new_null() SKM_sk_new_null(UI_STRING)\n# define sk_UI_STRING_free(st) SKM_sk_free(UI_STRING, (st))\n# define sk_UI_STRING_num(st) SKM_sk_num(UI_STRING, (st))\n# define sk_UI_STRING_value(st, i) SKM_sk_value(UI_STRING, (st), (i))\n# define sk_UI_STRING_set(st, i, val) SKM_sk_set(UI_STRING, (st), (i), (val))\n# define sk_UI_STRING_zero(st) SKM_sk_zero(UI_STRING, (st))\n# define sk_UI_STRING_push(st, val) SKM_sk_push(UI_STRING, (st), (val))\n# define sk_UI_STRING_unshift(st, val) SKM_sk_unshift(UI_STRING, (st), (val))\n# define sk_UI_STRING_find(st, val) SKM_sk_find(UI_STRING, (st), (val))\n# define sk_UI_STRING_find_ex(st, val) SKM_sk_find_ex(UI_STRING, (st), (val))\n# define sk_UI_STRING_delete(st, i) SKM_sk_delete(UI_STRING, (st), (i))\n# define sk_UI_STRING_delete_ptr(st, ptr) SKM_sk_delete_ptr(UI_STRING, (st), (ptr))\n# define sk_UI_STRING_insert(st, val, i) SKM_sk_insert(UI_STRING, (st), (val), (i))\n# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp))\n# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st)\n# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func))\n# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func))\n# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st))\n# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st))\n# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st))\n# define sk_UI_STRING_is_sorted(st) SKM_sk_is_sorted(UI_STRING, (st))\n# define sk_X509_new(cmp) SKM_sk_new(X509, (cmp))\n# define sk_X509_new_null() SKM_sk_new_null(X509)\n# define sk_X509_free(st) SKM_sk_free(X509, (st))\n# define sk_X509_num(st) SKM_sk_num(X509, (st))\n# define sk_X509_value(st, i) SKM_sk_value(X509, (st), (i))\n# define sk_X509_set(st, i, val) SKM_sk_set(X509, (st), (i), (val))\n# define sk_X509_zero(st) SKM_sk_zero(X509, (st))\n# define sk_X509_push(st, val) SKM_sk_push(X509, (st), (val))\n# define sk_X509_unshift(st, val) SKM_sk_unshift(X509, (st), (val))\n# define sk_X509_find(st, val) SKM_sk_find(X509, (st), (val))\n# define sk_X509_find_ex(st, val) SKM_sk_find_ex(X509, (st), (val))\n# define sk_X509_delete(st, i) SKM_sk_delete(X509, (st), (i))\n# define sk_X509_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509, (st), (ptr))\n# define sk_X509_insert(st, val, i) SKM_sk_insert(X509, (st), (val), (i))\n# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp))\n# define sk_X509_dup(st) SKM_sk_dup(X509, st)\n# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func))\n# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func))\n# define sk_X509_shift(st) SKM_sk_shift(X509, (st))\n# define sk_X509_pop(st) SKM_sk_pop(X509, (st))\n# define sk_X509_sort(st) SKM_sk_sort(X509, (st))\n# define sk_X509_is_sorted(st) SKM_sk_is_sorted(X509, (st))\n# define sk_X509V3_EXT_METHOD_new(cmp) SKM_sk_new(X509V3_EXT_METHOD, (cmp))\n# define sk_X509V3_EXT_METHOD_new_null() SKM_sk_new_null(X509V3_EXT_METHOD)\n# define sk_X509V3_EXT_METHOD_free(st) SKM_sk_free(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_num(st) SKM_sk_num(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_value(st, i) SKM_sk_value(X509V3_EXT_METHOD, (st), (i))\n# define sk_X509V3_EXT_METHOD_set(st, i, val) SKM_sk_set(X509V3_EXT_METHOD, (st), (i), (val))\n# define sk_X509V3_EXT_METHOD_zero(st) SKM_sk_zero(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_push(st, val) SKM_sk_push(X509V3_EXT_METHOD, (st), (val))\n# define sk_X509V3_EXT_METHOD_unshift(st, val) SKM_sk_unshift(X509V3_EXT_METHOD, (st), (val))\n# define sk_X509V3_EXT_METHOD_find(st, val) SKM_sk_find(X509V3_EXT_METHOD, (st), (val))\n# define sk_X509V3_EXT_METHOD_find_ex(st, val) SKM_sk_find_ex(X509V3_EXT_METHOD, (st), (val))\n# define sk_X509V3_EXT_METHOD_delete(st, i) SKM_sk_delete(X509V3_EXT_METHOD, (st), (i))\n# define sk_X509V3_EXT_METHOD_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509V3_EXT_METHOD, (st), (ptr))\n# define sk_X509V3_EXT_METHOD_insert(st, val, i) SKM_sk_insert(X509V3_EXT_METHOD, (st), (val), (i))\n# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp))\n# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st)\n# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func))\n# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func))\n# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st))\n# define sk_X509V3_EXT_METHOD_is_sorted(st) SKM_sk_is_sorted(X509V3_EXT_METHOD, (st))\n# define sk_X509_ALGOR_new(cmp) SKM_sk_new(X509_ALGOR, (cmp))\n# define sk_X509_ALGOR_new_null() SKM_sk_new_null(X509_ALGOR)\n# define sk_X509_ALGOR_free(st) SKM_sk_free(X509_ALGOR, (st))\n# define sk_X509_ALGOR_num(st) SKM_sk_num(X509_ALGOR, (st))\n# define sk_X509_ALGOR_value(st, i) SKM_sk_value(X509_ALGOR, (st), (i))\n# define sk_X509_ALGOR_set(st, i, val) SKM_sk_set(X509_ALGOR, (st), (i), (val))\n# define sk_X509_ALGOR_zero(st) SKM_sk_zero(X509_ALGOR, (st))\n# define sk_X509_ALGOR_push(st, val) SKM_sk_push(X509_ALGOR, (st), (val))\n# define sk_X509_ALGOR_unshift(st, val) SKM_sk_unshift(X509_ALGOR, (st), (val))\n# define sk_X509_ALGOR_find(st, val) SKM_sk_find(X509_ALGOR, (st), (val))\n# define sk_X509_ALGOR_find_ex(st, val) SKM_sk_find_ex(X509_ALGOR, (st), (val))\n# define sk_X509_ALGOR_delete(st, i) SKM_sk_delete(X509_ALGOR, (st), (i))\n# define sk_X509_ALGOR_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ALGOR, (st), (ptr))\n# define sk_X509_ALGOR_insert(st, val, i) SKM_sk_insert(X509_ALGOR, (st), (val), (i))\n# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp))\n# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st)\n# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func))\n# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func))\n# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st))\n# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st))\n# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st))\n# define sk_X509_ALGOR_is_sorted(st) SKM_sk_is_sorted(X509_ALGOR, (st))\n# define sk_X509_ATTRIBUTE_new(cmp) SKM_sk_new(X509_ATTRIBUTE, (cmp))\n# define sk_X509_ATTRIBUTE_new_null() SKM_sk_new_null(X509_ATTRIBUTE)\n# define sk_X509_ATTRIBUTE_free(st) SKM_sk_free(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_num(st) SKM_sk_num(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_value(st, i) SKM_sk_value(X509_ATTRIBUTE, (st), (i))\n# define sk_X509_ATTRIBUTE_set(st, i, val) SKM_sk_set(X509_ATTRIBUTE, (st), (i), (val))\n# define sk_X509_ATTRIBUTE_zero(st) SKM_sk_zero(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_push(st, val) SKM_sk_push(X509_ATTRIBUTE, (st), (val))\n# define sk_X509_ATTRIBUTE_unshift(st, val) SKM_sk_unshift(X509_ATTRIBUTE, (st), (val))\n# define sk_X509_ATTRIBUTE_find(st, val) SKM_sk_find(X509_ATTRIBUTE, (st), (val))\n# define sk_X509_ATTRIBUTE_find_ex(st, val) SKM_sk_find_ex(X509_ATTRIBUTE, (st), (val))\n# define sk_X509_ATTRIBUTE_delete(st, i) SKM_sk_delete(X509_ATTRIBUTE, (st), (i))\n# define sk_X509_ATTRIBUTE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_ATTRIBUTE, (st), (ptr))\n# define sk_X509_ATTRIBUTE_insert(st, val, i) SKM_sk_insert(X509_ATTRIBUTE, (st), (val), (i))\n# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp))\n# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st)\n# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func))\n# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func))\n# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st))\n# define sk_X509_ATTRIBUTE_is_sorted(st) SKM_sk_is_sorted(X509_ATTRIBUTE, (st))\n# define sk_X509_CRL_new(cmp) SKM_sk_new(X509_CRL, (cmp))\n# define sk_X509_CRL_new_null() SKM_sk_new_null(X509_CRL)\n# define sk_X509_CRL_free(st) SKM_sk_free(X509_CRL, (st))\n# define sk_X509_CRL_num(st) SKM_sk_num(X509_CRL, (st))\n# define sk_X509_CRL_value(st, i) SKM_sk_value(X509_CRL, (st), (i))\n# define sk_X509_CRL_set(st, i, val) SKM_sk_set(X509_CRL, (st), (i), (val))\n# define sk_X509_CRL_zero(st) SKM_sk_zero(X509_CRL, (st))\n# define sk_X509_CRL_push(st, val) SKM_sk_push(X509_CRL, (st), (val))\n# define sk_X509_CRL_unshift(st, val) SKM_sk_unshift(X509_CRL, (st), (val))\n# define sk_X509_CRL_find(st, val) SKM_sk_find(X509_CRL, (st), (val))\n# define sk_X509_CRL_find_ex(st, val) SKM_sk_find_ex(X509_CRL, (st), (val))\n# define sk_X509_CRL_delete(st, i) SKM_sk_delete(X509_CRL, (st), (i))\n# define sk_X509_CRL_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_CRL, (st), (ptr))\n# define sk_X509_CRL_insert(st, val, i) SKM_sk_insert(X509_CRL, (st), (val), (i))\n# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp))\n# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st)\n# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func))\n# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func))\n# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st))\n# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st))\n# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st))\n# define sk_X509_CRL_is_sorted(st) SKM_sk_is_sorted(X509_CRL, (st))\n# define sk_X509_EXTENSION_new(cmp) SKM_sk_new(X509_EXTENSION, (cmp))\n# define sk_X509_EXTENSION_new_null() SKM_sk_new_null(X509_EXTENSION)\n# define sk_X509_EXTENSION_free(st) SKM_sk_free(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_num(st) SKM_sk_num(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_value(st, i) SKM_sk_value(X509_EXTENSION, (st), (i))\n# define sk_X509_EXTENSION_set(st, i, val) SKM_sk_set(X509_EXTENSION, (st), (i), (val))\n# define sk_X509_EXTENSION_zero(st) SKM_sk_zero(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_push(st, val) SKM_sk_push(X509_EXTENSION, (st), (val))\n# define sk_X509_EXTENSION_unshift(st, val) SKM_sk_unshift(X509_EXTENSION, (st), (val))\n# define sk_X509_EXTENSION_find(st, val) SKM_sk_find(X509_EXTENSION, (st), (val))\n# define sk_X509_EXTENSION_find_ex(st, val) SKM_sk_find_ex(X509_EXTENSION, (st), (val))\n# define sk_X509_EXTENSION_delete(st, i) SKM_sk_delete(X509_EXTENSION, (st), (i))\n# define sk_X509_EXTENSION_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_EXTENSION, (st), (ptr))\n# define sk_X509_EXTENSION_insert(st, val, i) SKM_sk_insert(X509_EXTENSION, (st), (val), (i))\n# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp))\n# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st)\n# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func))\n# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func))\n# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st))\n# define sk_X509_EXTENSION_is_sorted(st) SKM_sk_is_sorted(X509_EXTENSION, (st))\n# define sk_X509_INFO_new(cmp) SKM_sk_new(X509_INFO, (cmp))\n# define sk_X509_INFO_new_null() SKM_sk_new_null(X509_INFO)\n# define sk_X509_INFO_free(st) SKM_sk_free(X509_INFO, (st))\n# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st))\n# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i))\n# define sk_X509_INFO_set(st, i, val) SKM_sk_set(X509_INFO, (st), (i), (val))\n# define sk_X509_INFO_zero(st) SKM_sk_zero(X509_INFO, (st))\n# define sk_X509_INFO_push(st, val) SKM_sk_push(X509_INFO, (st), (val))\n# define sk_X509_INFO_unshift(st, val) SKM_sk_unshift(X509_INFO, (st), (val))\n# define sk_X509_INFO_find(st, val) SKM_sk_find(X509_INFO, (st), (val))\n# define sk_X509_INFO_find_ex(st, val) SKM_sk_find_ex(X509_INFO, (st), (val))\n# define sk_X509_INFO_delete(st, i) SKM_sk_delete(X509_INFO, (st), (i))\n# define sk_X509_INFO_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_INFO, (st), (ptr))\n# define sk_X509_INFO_insert(st, val, i) SKM_sk_insert(X509_INFO, (st), (val), (i))\n# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp))\n# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st)\n# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func))\n# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func))\n# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st))\n# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st))\n# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st))\n# define sk_X509_INFO_is_sorted(st) SKM_sk_is_sorted(X509_INFO, (st))\n# define sk_X509_LOOKUP_new(cmp) SKM_sk_new(X509_LOOKUP, (cmp))\n# define sk_X509_LOOKUP_new_null() SKM_sk_new_null(X509_LOOKUP)\n# define sk_X509_LOOKUP_free(st) SKM_sk_free(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_num(st) SKM_sk_num(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_value(st, i) SKM_sk_value(X509_LOOKUP, (st), (i))\n# define sk_X509_LOOKUP_set(st, i, val) SKM_sk_set(X509_LOOKUP, (st), (i), (val))\n# define sk_X509_LOOKUP_zero(st) SKM_sk_zero(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_push(st, val) SKM_sk_push(X509_LOOKUP, (st), (val))\n# define sk_X509_LOOKUP_unshift(st, val) SKM_sk_unshift(X509_LOOKUP, (st), (val))\n# define sk_X509_LOOKUP_find(st, val) SKM_sk_find(X509_LOOKUP, (st), (val))\n# define sk_X509_LOOKUP_find_ex(st, val) SKM_sk_find_ex(X509_LOOKUP, (st), (val))\n# define sk_X509_LOOKUP_delete(st, i) SKM_sk_delete(X509_LOOKUP, (st), (i))\n# define sk_X509_LOOKUP_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_LOOKUP, (st), (ptr))\n# define sk_X509_LOOKUP_insert(st, val, i) SKM_sk_insert(X509_LOOKUP, (st), (val), (i))\n# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp))\n# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st)\n# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func))\n# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func))\n# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st))\n# define sk_X509_LOOKUP_is_sorted(st) SKM_sk_is_sorted(X509_LOOKUP, (st))\n# define sk_X509_NAME_new(cmp) SKM_sk_new(X509_NAME, (cmp))\n# define sk_X509_NAME_new_null() SKM_sk_new_null(X509_NAME)\n# define sk_X509_NAME_free(st) SKM_sk_free(X509_NAME, (st))\n# define sk_X509_NAME_num(st) SKM_sk_num(X509_NAME, (st))\n# define sk_X509_NAME_value(st, i) SKM_sk_value(X509_NAME, (st), (i))\n# define sk_X509_NAME_set(st, i, val) SKM_sk_set(X509_NAME, (st), (i), (val))\n# define sk_X509_NAME_zero(st) SKM_sk_zero(X509_NAME, (st))\n# define sk_X509_NAME_push(st, val) SKM_sk_push(X509_NAME, (st), (val))\n# define sk_X509_NAME_unshift(st, val) SKM_sk_unshift(X509_NAME, (st), (val))\n# define sk_X509_NAME_find(st, val) SKM_sk_find(X509_NAME, (st), (val))\n# define sk_X509_NAME_find_ex(st, val) SKM_sk_find_ex(X509_NAME, (st), (val))\n# define sk_X509_NAME_delete(st, i) SKM_sk_delete(X509_NAME, (st), (i))\n# define sk_X509_NAME_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME, (st), (ptr))\n# define sk_X509_NAME_insert(st, val, i) SKM_sk_insert(X509_NAME, (st), (val), (i))\n# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp))\n# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st)\n# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func))\n# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func))\n# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st))\n# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st))\n# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st))\n# define sk_X509_NAME_is_sorted(st) SKM_sk_is_sorted(X509_NAME, (st))\n# define sk_X509_NAME_ENTRY_new(cmp) SKM_sk_new(X509_NAME_ENTRY, (cmp))\n# define sk_X509_NAME_ENTRY_new_null() SKM_sk_new_null(X509_NAME_ENTRY)\n# define sk_X509_NAME_ENTRY_free(st) SKM_sk_free(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_num(st) SKM_sk_num(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_value(st, i) SKM_sk_value(X509_NAME_ENTRY, (st), (i))\n# define sk_X509_NAME_ENTRY_set(st, i, val) SKM_sk_set(X509_NAME_ENTRY, (st), (i), (val))\n# define sk_X509_NAME_ENTRY_zero(st) SKM_sk_zero(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_push(st, val) SKM_sk_push(X509_NAME_ENTRY, (st), (val))\n# define sk_X509_NAME_ENTRY_unshift(st, val) SKM_sk_unshift(X509_NAME_ENTRY, (st), (val))\n# define sk_X509_NAME_ENTRY_find(st, val) SKM_sk_find(X509_NAME_ENTRY, (st), (val))\n# define sk_X509_NAME_ENTRY_find_ex(st, val) SKM_sk_find_ex(X509_NAME_ENTRY, (st), (val))\n# define sk_X509_NAME_ENTRY_delete(st, i) SKM_sk_delete(X509_NAME_ENTRY, (st), (i))\n# define sk_X509_NAME_ENTRY_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_NAME_ENTRY, (st), (ptr))\n# define sk_X509_NAME_ENTRY_insert(st, val, i) SKM_sk_insert(X509_NAME_ENTRY, (st), (val), (i))\n# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp))\n# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st)\n# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func))\n# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func))\n# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st))\n# define sk_X509_NAME_ENTRY_is_sorted(st) SKM_sk_is_sorted(X509_NAME_ENTRY, (st))\n# define sk_X509_OBJECT_new(cmp) SKM_sk_new(X509_OBJECT, (cmp))\n# define sk_X509_OBJECT_new_null() SKM_sk_new_null(X509_OBJECT)\n# define sk_X509_OBJECT_free(st) SKM_sk_free(X509_OBJECT, (st))\n# define sk_X509_OBJECT_num(st) SKM_sk_num(X509_OBJECT, (st))\n# define sk_X509_OBJECT_value(st, i) SKM_sk_value(X509_OBJECT, (st), (i))\n# define sk_X509_OBJECT_set(st, i, val) SKM_sk_set(X509_OBJECT, (st), (i), (val))\n# define sk_X509_OBJECT_zero(st) SKM_sk_zero(X509_OBJECT, (st))\n# define sk_X509_OBJECT_push(st, val) SKM_sk_push(X509_OBJECT, (st), (val))\n# define sk_X509_OBJECT_unshift(st, val) SKM_sk_unshift(X509_OBJECT, (st), (val))\n# define sk_X509_OBJECT_find(st, val) SKM_sk_find(X509_OBJECT, (st), (val))\n# define sk_X509_OBJECT_find_ex(st, val) SKM_sk_find_ex(X509_OBJECT, (st), (val))\n# define sk_X509_OBJECT_delete(st, i) SKM_sk_delete(X509_OBJECT, (st), (i))\n# define sk_X509_OBJECT_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_OBJECT, (st), (ptr))\n# define sk_X509_OBJECT_insert(st, val, i) SKM_sk_insert(X509_OBJECT, (st), (val), (i))\n# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp))\n# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st)\n# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func))\n# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func))\n# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st))\n# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st))\n# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st))\n# define sk_X509_OBJECT_is_sorted(st) SKM_sk_is_sorted(X509_OBJECT, (st))\n# define sk_X509_POLICY_DATA_new(cmp) SKM_sk_new(X509_POLICY_DATA, (cmp))\n# define sk_X509_POLICY_DATA_new_null() SKM_sk_new_null(X509_POLICY_DATA)\n# define sk_X509_POLICY_DATA_free(st) SKM_sk_free(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_num(st) SKM_sk_num(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_value(st, i) SKM_sk_value(X509_POLICY_DATA, (st), (i))\n# define sk_X509_POLICY_DATA_set(st, i, val) SKM_sk_set(X509_POLICY_DATA, (st), (i), (val))\n# define sk_X509_POLICY_DATA_zero(st) SKM_sk_zero(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_push(st, val) SKM_sk_push(X509_POLICY_DATA, (st), (val))\n# define sk_X509_POLICY_DATA_unshift(st, val) SKM_sk_unshift(X509_POLICY_DATA, (st), (val))\n# define sk_X509_POLICY_DATA_find(st, val) SKM_sk_find(X509_POLICY_DATA, (st), (val))\n# define sk_X509_POLICY_DATA_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_DATA, (st), (val))\n# define sk_X509_POLICY_DATA_delete(st, i) SKM_sk_delete(X509_POLICY_DATA, (st), (i))\n# define sk_X509_POLICY_DATA_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_DATA, (st), (ptr))\n# define sk_X509_POLICY_DATA_insert(st, val, i) SKM_sk_insert(X509_POLICY_DATA, (st), (val), (i))\n# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp))\n# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st)\n# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func))\n# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func))\n# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_DATA_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_DATA, (st))\n# define sk_X509_POLICY_NODE_new(cmp) SKM_sk_new(X509_POLICY_NODE, (cmp))\n# define sk_X509_POLICY_NODE_new_null() SKM_sk_new_null(X509_POLICY_NODE)\n# define sk_X509_POLICY_NODE_free(st) SKM_sk_free(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_num(st) SKM_sk_num(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_value(st, i) SKM_sk_value(X509_POLICY_NODE, (st), (i))\n# define sk_X509_POLICY_NODE_set(st, i, val) SKM_sk_set(X509_POLICY_NODE, (st), (i), (val))\n# define sk_X509_POLICY_NODE_zero(st) SKM_sk_zero(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_push(st, val) SKM_sk_push(X509_POLICY_NODE, (st), (val))\n# define sk_X509_POLICY_NODE_unshift(st, val) SKM_sk_unshift(X509_POLICY_NODE, (st), (val))\n# define sk_X509_POLICY_NODE_find(st, val) SKM_sk_find(X509_POLICY_NODE, (st), (val))\n# define sk_X509_POLICY_NODE_find_ex(st, val) SKM_sk_find_ex(X509_POLICY_NODE, (st), (val))\n# define sk_X509_POLICY_NODE_delete(st, i) SKM_sk_delete(X509_POLICY_NODE, (st), (i))\n# define sk_X509_POLICY_NODE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_POLICY_NODE, (st), (ptr))\n# define sk_X509_POLICY_NODE_insert(st, val, i) SKM_sk_insert(X509_POLICY_NODE, (st), (val), (i))\n# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp))\n# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st)\n# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func))\n# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func))\n# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st))\n# define sk_X509_POLICY_NODE_is_sorted(st) SKM_sk_is_sorted(X509_POLICY_NODE, (st))\n# define sk_X509_PURPOSE_new(cmp) SKM_sk_new(X509_PURPOSE, (cmp))\n# define sk_X509_PURPOSE_new_null() SKM_sk_new_null(X509_PURPOSE)\n# define sk_X509_PURPOSE_free(st) SKM_sk_free(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_num(st) SKM_sk_num(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_value(st, i) SKM_sk_value(X509_PURPOSE, (st), (i))\n# define sk_X509_PURPOSE_set(st, i, val) SKM_sk_set(X509_PURPOSE, (st), (i), (val))\n# define sk_X509_PURPOSE_zero(st) SKM_sk_zero(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_push(st, val) SKM_sk_push(X509_PURPOSE, (st), (val))\n# define sk_X509_PURPOSE_unshift(st, val) SKM_sk_unshift(X509_PURPOSE, (st), (val))\n# define sk_X509_PURPOSE_find(st, val) SKM_sk_find(X509_PURPOSE, (st), (val))\n# define sk_X509_PURPOSE_find_ex(st, val) SKM_sk_find_ex(X509_PURPOSE, (st), (val))\n# define sk_X509_PURPOSE_delete(st, i) SKM_sk_delete(X509_PURPOSE, (st), (i))\n# define sk_X509_PURPOSE_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_PURPOSE, (st), (ptr))\n# define sk_X509_PURPOSE_insert(st, val, i) SKM_sk_insert(X509_PURPOSE, (st), (val), (i))\n# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp))\n# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st)\n# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func))\n# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func))\n# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st))\n# define sk_X509_PURPOSE_is_sorted(st) SKM_sk_is_sorted(X509_PURPOSE, (st))\n# define sk_X509_REVOKED_new(cmp) SKM_sk_new(X509_REVOKED, (cmp))\n# define sk_X509_REVOKED_new_null() SKM_sk_new_null(X509_REVOKED)\n# define sk_X509_REVOKED_free(st) SKM_sk_free(X509_REVOKED, (st))\n# define sk_X509_REVOKED_num(st) SKM_sk_num(X509_REVOKED, (st))\n# define sk_X509_REVOKED_value(st, i) SKM_sk_value(X509_REVOKED, (st), (i))\n# define sk_X509_REVOKED_set(st, i, val) SKM_sk_set(X509_REVOKED, (st), (i), (val))\n# define sk_X509_REVOKED_zero(st) SKM_sk_zero(X509_REVOKED, (st))\n# define sk_X509_REVOKED_push(st, val) SKM_sk_push(X509_REVOKED, (st), (val))\n# define sk_X509_REVOKED_unshift(st, val) SKM_sk_unshift(X509_REVOKED, (st), (val))\n# define sk_X509_REVOKED_find(st, val) SKM_sk_find(X509_REVOKED, (st), (val))\n# define sk_X509_REVOKED_find_ex(st, val) SKM_sk_find_ex(X509_REVOKED, (st), (val))\n# define sk_X509_REVOKED_delete(st, i) SKM_sk_delete(X509_REVOKED, (st), (i))\n# define sk_X509_REVOKED_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_REVOKED, (st), (ptr))\n# define sk_X509_REVOKED_insert(st, val, i) SKM_sk_insert(X509_REVOKED, (st), (val), (i))\n# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp))\n# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st)\n# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func))\n# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func))\n# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st))\n# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st))\n# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st))\n# define sk_X509_REVOKED_is_sorted(st) SKM_sk_is_sorted(X509_REVOKED, (st))\n# define sk_X509_TRUST_new(cmp) SKM_sk_new(X509_TRUST, (cmp))\n# define sk_X509_TRUST_new_null() SKM_sk_new_null(X509_TRUST)\n# define sk_X509_TRUST_free(st) SKM_sk_free(X509_TRUST, (st))\n# define sk_X509_TRUST_num(st) SKM_sk_num(X509_TRUST, (st))\n# define sk_X509_TRUST_value(st, i) SKM_sk_value(X509_TRUST, (st), (i))\n# define sk_X509_TRUST_set(st, i, val) SKM_sk_set(X509_TRUST, (st), (i), (val))\n# define sk_X509_TRUST_zero(st) SKM_sk_zero(X509_TRUST, (st))\n# define sk_X509_TRUST_push(st, val) SKM_sk_push(X509_TRUST, (st), (val))\n# define sk_X509_TRUST_unshift(st, val) SKM_sk_unshift(X509_TRUST, (st), (val))\n# define sk_X509_TRUST_find(st, val) SKM_sk_find(X509_TRUST, (st), (val))\n# define sk_X509_TRUST_find_ex(st, val) SKM_sk_find_ex(X509_TRUST, (st), (val))\n# define sk_X509_TRUST_delete(st, i) SKM_sk_delete(X509_TRUST, (st), (i))\n# define sk_X509_TRUST_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_TRUST, (st), (ptr))\n# define sk_X509_TRUST_insert(st, val, i) SKM_sk_insert(X509_TRUST, (st), (val), (i))\n# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp))\n# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st)\n# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func))\n# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func))\n# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st))\n# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st))\n# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st))\n# define sk_X509_TRUST_is_sorted(st) SKM_sk_is_sorted(X509_TRUST, (st))\n# define sk_X509_VERIFY_PARAM_new(cmp) SKM_sk_new(X509_VERIFY_PARAM, (cmp))\n# define sk_X509_VERIFY_PARAM_new_null() SKM_sk_new_null(X509_VERIFY_PARAM)\n# define sk_X509_VERIFY_PARAM_free(st) SKM_sk_free(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_num(st) SKM_sk_num(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_value(st, i) SKM_sk_value(X509_VERIFY_PARAM, (st), (i))\n# define sk_X509_VERIFY_PARAM_set(st, i, val) SKM_sk_set(X509_VERIFY_PARAM, (st), (i), (val))\n# define sk_X509_VERIFY_PARAM_zero(st) SKM_sk_zero(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_push(st, val) SKM_sk_push(X509_VERIFY_PARAM, (st), (val))\n# define sk_X509_VERIFY_PARAM_unshift(st, val) SKM_sk_unshift(X509_VERIFY_PARAM, (st), (val))\n# define sk_X509_VERIFY_PARAM_find(st, val) SKM_sk_find(X509_VERIFY_PARAM, (st), (val))\n# define sk_X509_VERIFY_PARAM_find_ex(st, val) SKM_sk_find_ex(X509_VERIFY_PARAM, (st), (val))\n# define sk_X509_VERIFY_PARAM_delete(st, i) SKM_sk_delete(X509_VERIFY_PARAM, (st), (i))\n# define sk_X509_VERIFY_PARAM_delete_ptr(st, ptr) SKM_sk_delete_ptr(X509_VERIFY_PARAM, (st), (ptr))\n# define sk_X509_VERIFY_PARAM_insert(st, val, i) SKM_sk_insert(X509_VERIFY_PARAM, (st), (val), (i))\n# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp))\n# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st)\n# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func))\n# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func))\n# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st))\n# define sk_X509_VERIFY_PARAM_is_sorted(st) SKM_sk_is_sorted(X509_VERIFY_PARAM, (st))\n# define sk_nid_triple_new(cmp) SKM_sk_new(nid_triple, (cmp))\n# define sk_nid_triple_new_null() SKM_sk_new_null(nid_triple)\n# define sk_nid_triple_free(st) SKM_sk_free(nid_triple, (st))\n# define sk_nid_triple_num(st) SKM_sk_num(nid_triple, (st))\n# define sk_nid_triple_value(st, i) SKM_sk_value(nid_triple, (st), (i))\n# define sk_nid_triple_set(st, i, val) SKM_sk_set(nid_triple, (st), (i), (val))\n# define sk_nid_triple_zero(st) SKM_sk_zero(nid_triple, (st))\n# define sk_nid_triple_push(st, val) SKM_sk_push(nid_triple, (st), (val))\n# define sk_nid_triple_unshift(st, val) SKM_sk_unshift(nid_triple, (st), (val))\n# define sk_nid_triple_find(st, val) SKM_sk_find(nid_triple, (st), (val))\n# define sk_nid_triple_find_ex(st, val) SKM_sk_find_ex(nid_triple, (st), (val))\n# define sk_nid_triple_delete(st, i) SKM_sk_delete(nid_triple, (st), (i))\n# define sk_nid_triple_delete_ptr(st, ptr) SKM_sk_delete_ptr(nid_triple, (st), (ptr))\n# define sk_nid_triple_insert(st, val, i) SKM_sk_insert(nid_triple, (st), (val), (i))\n# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp))\n# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st)\n# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func))\n# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func))\n# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st))\n# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st))\n# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st))\n# define sk_nid_triple_is_sorted(st) SKM_sk_is_sorted(nid_triple, (st))\n# define sk_void_new(cmp) SKM_sk_new(void, (cmp))\n# define sk_void_new_null() SKM_sk_new_null(void)\n# define sk_void_free(st) SKM_sk_free(void, (st))\n# define sk_void_num(st) SKM_sk_num(void, (st))\n# define sk_void_value(st, i) SKM_sk_value(void, (st), (i))\n# define sk_void_set(st, i, val) SKM_sk_set(void, (st), (i), (val))\n# define sk_void_zero(st) SKM_sk_zero(void, (st))\n# define sk_void_push(st, val) SKM_sk_push(void, (st), (val))\n# define sk_void_unshift(st, val) SKM_sk_unshift(void, (st), (val))\n# define sk_void_find(st, val) SKM_sk_find(void, (st), (val))\n# define sk_void_find_ex(st, val) SKM_sk_find_ex(void, (st), (val))\n# define sk_void_delete(st, i) SKM_sk_delete(void, (st), (i))\n# define sk_void_delete_ptr(st, ptr) SKM_sk_delete_ptr(void, (st), (ptr))\n# define sk_void_insert(st, val, i) SKM_sk_insert(void, (st), (val), (i))\n# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp))\n# define sk_void_dup(st) SKM_sk_dup(void, st)\n# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func))\n# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func))\n# define sk_void_shift(st) SKM_sk_shift(void, (st))\n# define sk_void_pop(st) SKM_sk_pop(void, (st))\n# define sk_void_sort(st) SKM_sk_sort(void, (st))\n# define sk_void_is_sorted(st) SKM_sk_is_sorted(void, (st))\n# define sk_OPENSSL_STRING_new(cmp) ((STACK_OF(OPENSSL_STRING) *)sk_new(CHECKED_SK_CMP_FUNC(char, cmp)))\n# define sk_OPENSSL_STRING_new_null() ((STACK_OF(OPENSSL_STRING) *)sk_new_null())\n# define sk_OPENSSL_STRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val))\n# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val))\n# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i))\n# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st)\n# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func))\n# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func)))\n# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i)\n# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st)\n# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val))\n# define sk_OPENSSL_STRING_zero(st) SKM_sk_zero(OPENSSL_STRING, (st))\n# define sk_OPENSSL_STRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val))\n# define sk_OPENSSL_STRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_STRING), st), CHECKED_CONST_PTR_OF(char, val))\n# define sk_OPENSSL_STRING_delete(st, i) SKM_sk_delete(OPENSSL_STRING, (st), (i))\n# define sk_OPENSSL_STRING_delete_ptr(st, ptr) (OPENSSL_STRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, ptr))\n# define sk_OPENSSL_STRING_set_cmp_func(st, cmp)  \\\n        ((int (*)(const char * const *,const char * const *)) \\\n        sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_CMP_FUNC(char, cmp)))\n# define sk_OPENSSL_STRING_dup(st) SKM_sk_dup(OPENSSL_STRING, st)\n# define sk_OPENSSL_STRING_shift(st) SKM_sk_shift(OPENSSL_STRING, (st))\n# define sk_OPENSSL_STRING_pop(st) (char *)sk_pop(CHECKED_STACK_OF(OPENSSL_STRING, st))\n# define sk_OPENSSL_STRING_sort(st) SKM_sk_sort(OPENSSL_STRING, (st))\n# define sk_OPENSSL_STRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_STRING, (st))\n# define sk_OPENSSL_BLOCK_new(cmp) ((STACK_OF(OPENSSL_BLOCK) *)sk_new(CHECKED_SK_CMP_FUNC(void, cmp)))\n# define sk_OPENSSL_BLOCK_new_null() ((STACK_OF(OPENSSL_BLOCK) *)sk_new_null())\n# define sk_OPENSSL_BLOCK_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val))\n# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val))\n# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i))\n# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st)\n# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func))\n# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func)))\n# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i)\n# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st)\n# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val))\n# define sk_OPENSSL_BLOCK_zero(st) SKM_sk_zero(OPENSSL_BLOCK, (st))\n# define sk_OPENSSL_BLOCK_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val))\n# define sk_OPENSSL_BLOCK_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_BLOCK), st), CHECKED_CONST_PTR_OF(void, val))\n# define sk_OPENSSL_BLOCK_delete(st, i) SKM_sk_delete(OPENSSL_BLOCK, (st), (i))\n# define sk_OPENSSL_BLOCK_delete_ptr(st, ptr) (OPENSSL_BLOCK *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, ptr))\n# define sk_OPENSSL_BLOCK_set_cmp_func(st, cmp)  \\\n        ((int (*)(const void * const *,const void * const *)) \\\n        sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_CMP_FUNC(void, cmp)))\n# define sk_OPENSSL_BLOCK_dup(st) SKM_sk_dup(OPENSSL_BLOCK, st)\n# define sk_OPENSSL_BLOCK_shift(st) SKM_sk_shift(OPENSSL_BLOCK, (st))\n# define sk_OPENSSL_BLOCK_pop(st) (void *)sk_pop(CHECKED_STACK_OF(OPENSSL_BLOCK, st))\n# define sk_OPENSSL_BLOCK_sort(st) SKM_sk_sort(OPENSSL_BLOCK, (st))\n# define sk_OPENSSL_BLOCK_is_sorted(st) SKM_sk_is_sorted(OPENSSL_BLOCK, (st))\n# define sk_OPENSSL_PSTRING_new(cmp) ((STACK_OF(OPENSSL_PSTRING) *)sk_new(CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp)))\n# define sk_OPENSSL_PSTRING_new_null() ((STACK_OF(OPENSSL_PSTRING) *)sk_new_null())\n# define sk_OPENSSL_PSTRING_push(st, val) sk_push(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val))\n# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val))\n# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i))\n# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st)\n# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))\n# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)))\n# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i)\n# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st)\n# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val))\n# define sk_OPENSSL_PSTRING_zero(st) SKM_sk_zero(OPENSSL_PSTRING, (st))\n# define sk_OPENSSL_PSTRING_unshift(st, val) sk_unshift(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val))\n# define sk_OPENSSL_PSTRING_find_ex(st, val) sk_find_ex((_STACK *)CHECKED_CONST_PTR_OF(STACK_OF(OPENSSL_PSTRING), st), CHECKED_CONST_PTR_OF(OPENSSL_STRING, val))\n# define sk_OPENSSL_PSTRING_delete(st, i) SKM_sk_delete(OPENSSL_PSTRING, (st), (i))\n# define sk_OPENSSL_PSTRING_delete_ptr(st, ptr) (OPENSSL_PSTRING *)sk_delete_ptr(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, ptr))\n# define sk_OPENSSL_PSTRING_set_cmp_func(st, cmp)  \\\n        ((int (*)(const OPENSSL_STRING * const *,const OPENSSL_STRING * const *)) \\\n        sk_set_cmp_func(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_CMP_FUNC(OPENSSL_STRING, cmp)))\n# define sk_OPENSSL_PSTRING_dup(st) SKM_sk_dup(OPENSSL_PSTRING, st)\n# define sk_OPENSSL_PSTRING_shift(st) SKM_sk_shift(OPENSSL_PSTRING, (st))\n# define sk_OPENSSL_PSTRING_pop(st) (OPENSSL_STRING *)sk_pop(CHECKED_STACK_OF(OPENSSL_PSTRING, st))\n# define sk_OPENSSL_PSTRING_sort(st) SKM_sk_sort(OPENSSL_PSTRING, (st))\n# define sk_OPENSSL_PSTRING_is_sorted(st) SKM_sk_is_sorted(OPENSSL_PSTRING, (st))\n# define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ACCESS_DESCRIPTION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ACCESS_DESCRIPTION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ACCESS_DESCRIPTION(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ACCESS_DESCRIPTION, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ACCESS_DESCRIPTION(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ACCESS_DESCRIPTION, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_ASN1_INTEGER(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ASN1_INTEGER, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ASN1_INTEGER(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ASN1_INTEGER, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ASN1_INTEGER(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ASN1_INTEGER, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ASN1_INTEGER(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ASN1_INTEGER, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_ASN1_OBJECT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ASN1_OBJECT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ASN1_OBJECT(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ASN1_OBJECT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ASN1_OBJECT(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ASN1_OBJECT, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ASN1_OBJECT(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ASN1_OBJECT, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_ASN1_TYPE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ASN1_TYPE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ASN1_TYPE(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ASN1_TYPE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ASN1_TYPE(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ASN1_TYPE, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ASN1_TYPE(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ASN1_TYPE, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ASN1_UTF8STRING, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ASN1_UTF8STRING(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ASN1_UTF8STRING, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ASN1_UTF8STRING(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ASN1_UTF8STRING, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ASN1_UTF8STRING(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ASN1_UTF8STRING, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_DIST_POINT(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(DIST_POINT, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_DIST_POINT(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(DIST_POINT, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_DIST_POINT(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(DIST_POINT, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_DIST_POINT(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(DIST_POINT, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_ESS_CERT_ID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(ESS_CERT_ID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_ESS_CERT_ID(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(ESS_CERT_ID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_ESS_CERT_ID(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(ESS_CERT_ID, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_ESS_CERT_ID(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(ESS_CERT_ID, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_EVP_MD(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(EVP_MD, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_EVP_MD(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(EVP_MD, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_EVP_MD(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(EVP_MD, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_EVP_MD(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(EVP_MD, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_GENERAL_NAME(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(GENERAL_NAME, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_GENERAL_NAME(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(GENERAL_NAME, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_GENERAL_NAME(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(GENERAL_NAME, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_GENERAL_NAME(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(GENERAL_NAME, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_OCSP_ONEREQ(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(OCSP_ONEREQ, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_OCSP_ONEREQ(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(OCSP_ONEREQ, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_OCSP_ONEREQ(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(OCSP_ONEREQ, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_OCSP_ONEREQ(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(OCSP_ONEREQ, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(OCSP_SINGLERESP, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_OCSP_SINGLERESP(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(OCSP_SINGLERESP, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_OCSP_SINGLERESP(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(OCSP_SINGLERESP, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_OCSP_SINGLERESP(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(OCSP_SINGLERESP, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(PKCS12_SAFEBAG, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_PKCS12_SAFEBAG(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(PKCS12_SAFEBAG, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_PKCS12_SAFEBAG(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(PKCS12_SAFEBAG, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_PKCS12_SAFEBAG(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(PKCS12_SAFEBAG, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_PKCS7(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(PKCS7, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_PKCS7(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(PKCS7, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_PKCS7(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(PKCS7, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_PKCS7(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(PKCS7, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(PKCS7_RECIP_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(PKCS7_RECIP_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_PKCS7_RECIP_INFO(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(PKCS7_RECIP_INFO, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_PKCS7_RECIP_INFO(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(PKCS7_RECIP_INFO, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(PKCS7_SIGNER_INFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(PKCS7_SIGNER_INFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_PKCS7_SIGNER_INFO(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(PKCS7_SIGNER_INFO, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_PKCS7_SIGNER_INFO(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(PKCS7_SIGNER_INFO, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_POLICYINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(POLICYINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_POLICYINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(POLICYINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_POLICYINFO(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(POLICYINFO, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_POLICYINFO(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(POLICYINFO, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_POLICYQUALINFO(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(POLICYQUALINFO, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_POLICYQUALINFO(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(POLICYQUALINFO, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_POLICYQUALINFO(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(POLICYQUALINFO, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_POLICYQUALINFO(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(POLICYQUALINFO, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_SXNETID(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(SXNETID, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_SXNETID(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(SXNETID, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_SXNETID(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(SXNETID, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_SXNETID(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(SXNETID, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_ALGOR(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_ALGOR, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_ALGOR(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_ALGOR, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_ALGOR(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_ALGOR, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_ALGOR(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_ALGOR, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_ATTRIBUTE, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_ATTRIBUTE(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_ATTRIBUTE, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_ATTRIBUTE(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_ATTRIBUTE, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_ATTRIBUTE(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_ATTRIBUTE, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_CRL(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_CRL, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_CRL(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_CRL, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_CRL(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_CRL, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_CRL(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_CRL, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_EXTENSION(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_EXTENSION, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_EXTENSION(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_EXTENSION, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_EXTENSION(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_EXTENSION, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_EXTENSION(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_EXTENSION, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_NAME_ENTRY, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_NAME_ENTRY(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_NAME_ENTRY, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_NAME_ENTRY(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_NAME_ENTRY, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_NAME_ENTRY(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_NAME_ENTRY, (buf), (len), (d2i_func), (free_func))\n# define d2i_ASN1_SET_OF_X509_REVOKED(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\\n        SKM_ASN1_SET_OF_d2i(X509_REVOKED, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class))\n# define i2d_ASN1_SET_OF_X509_REVOKED(st, pp, i2d_func, ex_tag, ex_class, is_set) \\\n        SKM_ASN1_SET_OF_i2d(X509_REVOKED, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))\n# define ASN1_seq_pack_X509_REVOKED(st, i2d_func, buf, len) \\\n        SKM_ASN1_seq_pack(X509_REVOKED, (st), (i2d_func), (buf), (len))\n# define ASN1_seq_unpack_X509_REVOKED(buf, len, d2i_func, free_func) \\\n        SKM_ASN1_seq_unpack(X509_REVOKED, (buf), (len), (d2i_func), (free_func))\n# define PKCS12_decrypt_d2i_PKCS12_SAFEBAG(algor, d2i_func, free_func, pass, passlen, oct, seq) \\\n        SKM_PKCS12_decrypt_d2i(PKCS12_SAFEBAG, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))\n# define PKCS12_decrypt_d2i_PKCS7(algor, d2i_func, free_func, pass, passlen, oct, seq) \\\n        SKM_PKCS12_decrypt_d2i(PKCS7, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))\n# define lh_ADDED_OBJ_new() LHM_lh_new(ADDED_OBJ,added_obj)\n# define lh_ADDED_OBJ_insert(lh,inst) LHM_lh_insert(ADDED_OBJ,lh,inst)\n# define lh_ADDED_OBJ_retrieve(lh,inst) LHM_lh_retrieve(ADDED_OBJ,lh,inst)\n# define lh_ADDED_OBJ_delete(lh,inst) LHM_lh_delete(ADDED_OBJ,lh,inst)\n# define lh_ADDED_OBJ_doall(lh,fn) LHM_lh_doall(ADDED_OBJ,lh,fn)\n# define lh_ADDED_OBJ_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(ADDED_OBJ,lh,fn,arg_type,arg)\n# define lh_ADDED_OBJ_error(lh) LHM_lh_error(ADDED_OBJ,lh)\n# define lh_ADDED_OBJ_num_items(lh) LHM_lh_num_items(ADDED_OBJ,lh)\n# define lh_ADDED_OBJ_down_load(lh) LHM_lh_down_load(ADDED_OBJ,lh)\n# define lh_ADDED_OBJ_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(ADDED_OBJ,lh,out)\n# define lh_ADDED_OBJ_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(ADDED_OBJ,lh,out)\n# define lh_ADDED_OBJ_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(ADDED_OBJ,lh,out)\n# define lh_ADDED_OBJ_free(lh) LHM_lh_free(ADDED_OBJ,lh)\n# define lh_APP_INFO_new() LHM_lh_new(APP_INFO,app_info)\n# define lh_APP_INFO_insert(lh,inst) LHM_lh_insert(APP_INFO,lh,inst)\n# define lh_APP_INFO_retrieve(lh,inst) LHM_lh_retrieve(APP_INFO,lh,inst)\n# define lh_APP_INFO_delete(lh,inst) LHM_lh_delete(APP_INFO,lh,inst)\n# define lh_APP_INFO_doall(lh,fn) LHM_lh_doall(APP_INFO,lh,fn)\n# define lh_APP_INFO_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(APP_INFO,lh,fn,arg_type,arg)\n# define lh_APP_INFO_error(lh) LHM_lh_error(APP_INFO,lh)\n# define lh_APP_INFO_num_items(lh) LHM_lh_num_items(APP_INFO,lh)\n# define lh_APP_INFO_down_load(lh) LHM_lh_down_load(APP_INFO,lh)\n# define lh_APP_INFO_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(APP_INFO,lh,out)\n# define lh_APP_INFO_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(APP_INFO,lh,out)\n# define lh_APP_INFO_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(APP_INFO,lh,out)\n# define lh_APP_INFO_free(lh) LHM_lh_free(APP_INFO,lh)\n# define lh_CONF_VALUE_new() LHM_lh_new(CONF_VALUE,conf_value)\n# define lh_CONF_VALUE_insert(lh,inst) LHM_lh_insert(CONF_VALUE,lh,inst)\n# define lh_CONF_VALUE_retrieve(lh,inst) LHM_lh_retrieve(CONF_VALUE,lh,inst)\n# define lh_CONF_VALUE_delete(lh,inst) LHM_lh_delete(CONF_VALUE,lh,inst)\n# define lh_CONF_VALUE_doall(lh,fn) LHM_lh_doall(CONF_VALUE,lh,fn)\n# define lh_CONF_VALUE_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(CONF_VALUE,lh,fn,arg_type,arg)\n# define lh_CONF_VALUE_error(lh) LHM_lh_error(CONF_VALUE,lh)\n# define lh_CONF_VALUE_num_items(lh) LHM_lh_num_items(CONF_VALUE,lh)\n# define lh_CONF_VALUE_down_load(lh) LHM_lh_down_load(CONF_VALUE,lh)\n# define lh_CONF_VALUE_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(CONF_VALUE,lh,out)\n# define lh_CONF_VALUE_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(CONF_VALUE,lh,out)\n# define lh_CONF_VALUE_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(CONF_VALUE,lh,out)\n# define lh_CONF_VALUE_free(lh) LHM_lh_free(CONF_VALUE,lh)\n# define lh_ENGINE_PILE_new() LHM_lh_new(ENGINE_PILE,engine_pile)\n# define lh_ENGINE_PILE_insert(lh,inst) LHM_lh_insert(ENGINE_PILE,lh,inst)\n# define lh_ENGINE_PILE_retrieve(lh,inst) LHM_lh_retrieve(ENGINE_PILE,lh,inst)\n# define lh_ENGINE_PILE_delete(lh,inst) LHM_lh_delete(ENGINE_PILE,lh,inst)\n# define lh_ENGINE_PILE_doall(lh,fn) LHM_lh_doall(ENGINE_PILE,lh,fn)\n# define lh_ENGINE_PILE_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(ENGINE_PILE,lh,fn,arg_type,arg)\n# define lh_ENGINE_PILE_error(lh) LHM_lh_error(ENGINE_PILE,lh)\n# define lh_ENGINE_PILE_num_items(lh) LHM_lh_num_items(ENGINE_PILE,lh)\n# define lh_ENGINE_PILE_down_load(lh) LHM_lh_down_load(ENGINE_PILE,lh)\n# define lh_ENGINE_PILE_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(ENGINE_PILE,lh,out)\n# define lh_ENGINE_PILE_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(ENGINE_PILE,lh,out)\n# define lh_ENGINE_PILE_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(ENGINE_PILE,lh,out)\n# define lh_ENGINE_PILE_free(lh) LHM_lh_free(ENGINE_PILE,lh)\n# define lh_ERR_STATE_new() LHM_lh_new(ERR_STATE,err_state)\n# define lh_ERR_STATE_insert(lh,inst) LHM_lh_insert(ERR_STATE,lh,inst)\n# define lh_ERR_STATE_retrieve(lh,inst) LHM_lh_retrieve(ERR_STATE,lh,inst)\n# define lh_ERR_STATE_delete(lh,inst) LHM_lh_delete(ERR_STATE,lh,inst)\n# define lh_ERR_STATE_doall(lh,fn) LHM_lh_doall(ERR_STATE,lh,fn)\n# define lh_ERR_STATE_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(ERR_STATE,lh,fn,arg_type,arg)\n# define lh_ERR_STATE_error(lh) LHM_lh_error(ERR_STATE,lh)\n# define lh_ERR_STATE_num_items(lh) LHM_lh_num_items(ERR_STATE,lh)\n# define lh_ERR_STATE_down_load(lh) LHM_lh_down_load(ERR_STATE,lh)\n# define lh_ERR_STATE_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(ERR_STATE,lh,out)\n# define lh_ERR_STATE_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(ERR_STATE,lh,out)\n# define lh_ERR_STATE_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(ERR_STATE,lh,out)\n# define lh_ERR_STATE_free(lh) LHM_lh_free(ERR_STATE,lh)\n# define lh_ERR_STRING_DATA_new() LHM_lh_new(ERR_STRING_DATA,err_string_data)\n# define lh_ERR_STRING_DATA_insert(lh,inst) LHM_lh_insert(ERR_STRING_DATA,lh,inst)\n# define lh_ERR_STRING_DATA_retrieve(lh,inst) LHM_lh_retrieve(ERR_STRING_DATA,lh,inst)\n# define lh_ERR_STRING_DATA_delete(lh,inst) LHM_lh_delete(ERR_STRING_DATA,lh,inst)\n# define lh_ERR_STRING_DATA_doall(lh,fn) LHM_lh_doall(ERR_STRING_DATA,lh,fn)\n# define lh_ERR_STRING_DATA_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(ERR_STRING_DATA,lh,fn,arg_type,arg)\n# define lh_ERR_STRING_DATA_error(lh) LHM_lh_error(ERR_STRING_DATA,lh)\n# define lh_ERR_STRING_DATA_num_items(lh) LHM_lh_num_items(ERR_STRING_DATA,lh)\n# define lh_ERR_STRING_DATA_down_load(lh) LHM_lh_down_load(ERR_STRING_DATA,lh)\n# define lh_ERR_STRING_DATA_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(ERR_STRING_DATA,lh,out)\n# define lh_ERR_STRING_DATA_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(ERR_STRING_DATA,lh,out)\n# define lh_ERR_STRING_DATA_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(ERR_STRING_DATA,lh,out)\n# define lh_ERR_STRING_DATA_free(lh) LHM_lh_free(ERR_STRING_DATA,lh)\n# define lh_EX_CLASS_ITEM_new() LHM_lh_new(EX_CLASS_ITEM,ex_class_item)\n# define lh_EX_CLASS_ITEM_insert(lh,inst) LHM_lh_insert(EX_CLASS_ITEM,lh,inst)\n# define lh_EX_CLASS_ITEM_retrieve(lh,inst) LHM_lh_retrieve(EX_CLASS_ITEM,lh,inst)\n# define lh_EX_CLASS_ITEM_delete(lh,inst) LHM_lh_delete(EX_CLASS_ITEM,lh,inst)\n# define lh_EX_CLASS_ITEM_doall(lh,fn) LHM_lh_doall(EX_CLASS_ITEM,lh,fn)\n# define lh_EX_CLASS_ITEM_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(EX_CLASS_ITEM,lh,fn,arg_type,arg)\n# define lh_EX_CLASS_ITEM_error(lh) LHM_lh_error(EX_CLASS_ITEM,lh)\n# define lh_EX_CLASS_ITEM_num_items(lh) LHM_lh_num_items(EX_CLASS_ITEM,lh)\n# define lh_EX_CLASS_ITEM_down_load(lh) LHM_lh_down_load(EX_CLASS_ITEM,lh)\n# define lh_EX_CLASS_ITEM_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(EX_CLASS_ITEM,lh,out)\n# define lh_EX_CLASS_ITEM_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(EX_CLASS_ITEM,lh,out)\n# define lh_EX_CLASS_ITEM_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(EX_CLASS_ITEM,lh,out)\n# define lh_EX_CLASS_ITEM_free(lh) LHM_lh_free(EX_CLASS_ITEM,lh)\n# define lh_FUNCTION_new() LHM_lh_new(FUNCTION,function)\n# define lh_FUNCTION_insert(lh,inst) LHM_lh_insert(FUNCTION,lh,inst)\n# define lh_FUNCTION_retrieve(lh,inst) LHM_lh_retrieve(FUNCTION,lh,inst)\n# define lh_FUNCTION_delete(lh,inst) LHM_lh_delete(FUNCTION,lh,inst)\n# define lh_FUNCTION_doall(lh,fn) LHM_lh_doall(FUNCTION,lh,fn)\n# define lh_FUNCTION_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(FUNCTION,lh,fn,arg_type,arg)\n# define lh_FUNCTION_error(lh) LHM_lh_error(FUNCTION,lh)\n# define lh_FUNCTION_num_items(lh) LHM_lh_num_items(FUNCTION,lh)\n# define lh_FUNCTION_down_load(lh) LHM_lh_down_load(FUNCTION,lh)\n# define lh_FUNCTION_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(FUNCTION,lh,out)\n# define lh_FUNCTION_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(FUNCTION,lh,out)\n# define lh_FUNCTION_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(FUNCTION,lh,out)\n# define lh_FUNCTION_free(lh) LHM_lh_free(FUNCTION,lh)\n# define lh_MEM_new() LHM_lh_new(MEM,mem)\n# define lh_MEM_insert(lh,inst) LHM_lh_insert(MEM,lh,inst)\n# define lh_MEM_retrieve(lh,inst) LHM_lh_retrieve(MEM,lh,inst)\n# define lh_MEM_delete(lh,inst) LHM_lh_delete(MEM,lh,inst)\n# define lh_MEM_doall(lh,fn) LHM_lh_doall(MEM,lh,fn)\n# define lh_MEM_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(MEM,lh,fn,arg_type,arg)\n# define lh_MEM_error(lh) LHM_lh_error(MEM,lh)\n# define lh_MEM_num_items(lh) LHM_lh_num_items(MEM,lh)\n# define lh_MEM_down_load(lh) LHM_lh_down_load(MEM,lh)\n# define lh_MEM_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(MEM,lh,out)\n# define lh_MEM_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(MEM,lh,out)\n# define lh_MEM_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(MEM,lh,out)\n# define lh_MEM_free(lh) LHM_lh_free(MEM,lh)\n# define lh_OBJ_NAME_new() LHM_lh_new(OBJ_NAME,obj_name)\n# define lh_OBJ_NAME_insert(lh,inst) LHM_lh_insert(OBJ_NAME,lh,inst)\n# define lh_OBJ_NAME_retrieve(lh,inst) LHM_lh_retrieve(OBJ_NAME,lh,inst)\n# define lh_OBJ_NAME_delete(lh,inst) LHM_lh_delete(OBJ_NAME,lh,inst)\n# define lh_OBJ_NAME_doall(lh,fn) LHM_lh_doall(OBJ_NAME,lh,fn)\n# define lh_OBJ_NAME_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(OBJ_NAME,lh,fn,arg_type,arg)\n# define lh_OBJ_NAME_error(lh) LHM_lh_error(OBJ_NAME,lh)\n# define lh_OBJ_NAME_num_items(lh) LHM_lh_num_items(OBJ_NAME,lh)\n# define lh_OBJ_NAME_down_load(lh) LHM_lh_down_load(OBJ_NAME,lh)\n# define lh_OBJ_NAME_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(OBJ_NAME,lh,out)\n# define lh_OBJ_NAME_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(OBJ_NAME,lh,out)\n# define lh_OBJ_NAME_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(OBJ_NAME,lh,out)\n# define lh_OBJ_NAME_free(lh) LHM_lh_free(OBJ_NAME,lh)\n# define lh_OPENSSL_CSTRING_new() LHM_lh_new(OPENSSL_CSTRING,openssl_cstring)\n# define lh_OPENSSL_CSTRING_insert(lh,inst) LHM_lh_insert(OPENSSL_CSTRING,lh,inst)\n# define lh_OPENSSL_CSTRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_CSTRING,lh,inst)\n# define lh_OPENSSL_CSTRING_delete(lh,inst) LHM_lh_delete(OPENSSL_CSTRING,lh,inst)\n# define lh_OPENSSL_CSTRING_doall(lh,fn) LHM_lh_doall(OPENSSL_CSTRING,lh,fn)\n# define lh_OPENSSL_CSTRING_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(OPENSSL_CSTRING,lh,fn,arg_type,arg)\n# define lh_OPENSSL_CSTRING_error(lh) LHM_lh_error(OPENSSL_CSTRING,lh)\n# define lh_OPENSSL_CSTRING_num_items(lh) LHM_lh_num_items(OPENSSL_CSTRING,lh)\n# define lh_OPENSSL_CSTRING_down_load(lh) LHM_lh_down_load(OPENSSL_CSTRING,lh)\n# define lh_OPENSSL_CSTRING_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(OPENSSL_CSTRING,lh,out)\n# define lh_OPENSSL_CSTRING_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(OPENSSL_CSTRING,lh,out)\n# define lh_OPENSSL_CSTRING_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(OPENSSL_CSTRING,lh,out)\n# define lh_OPENSSL_CSTRING_free(lh) LHM_lh_free(OPENSSL_CSTRING,lh)\n# define lh_OPENSSL_STRING_new() LHM_lh_new(OPENSSL_STRING,openssl_string)\n# define lh_OPENSSL_STRING_insert(lh,inst) LHM_lh_insert(OPENSSL_STRING,lh,inst)\n# define lh_OPENSSL_STRING_retrieve(lh,inst) LHM_lh_retrieve(OPENSSL_STRING,lh,inst)\n# define lh_OPENSSL_STRING_delete(lh,inst) LHM_lh_delete(OPENSSL_STRING,lh,inst)\n# define lh_OPENSSL_STRING_doall(lh,fn) LHM_lh_doall(OPENSSL_STRING,lh,fn)\n# define lh_OPENSSL_STRING_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(OPENSSL_STRING,lh,fn,arg_type,arg)\n# define lh_OPENSSL_STRING_error(lh) LHM_lh_error(OPENSSL_STRING,lh)\n# define lh_OPENSSL_STRING_num_items(lh) LHM_lh_num_items(OPENSSL_STRING,lh)\n# define lh_OPENSSL_STRING_down_load(lh) LHM_lh_down_load(OPENSSL_STRING,lh)\n# define lh_OPENSSL_STRING_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(OPENSSL_STRING,lh,out)\n# define lh_OPENSSL_STRING_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(OPENSSL_STRING,lh,out)\n# define lh_OPENSSL_STRING_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(OPENSSL_STRING,lh,out)\n# define lh_OPENSSL_STRING_free(lh) LHM_lh_free(OPENSSL_STRING,lh)\n# define lh_SSL_SESSION_new() LHM_lh_new(SSL_SESSION,ssl_session)\n# define lh_SSL_SESSION_insert(lh,inst) LHM_lh_insert(SSL_SESSION,lh,inst)\n# define lh_SSL_SESSION_retrieve(lh,inst) LHM_lh_retrieve(SSL_SESSION,lh,inst)\n# define lh_SSL_SESSION_delete(lh,inst) LHM_lh_delete(SSL_SESSION,lh,inst)\n# define lh_SSL_SESSION_doall(lh,fn) LHM_lh_doall(SSL_SESSION,lh,fn)\n# define lh_SSL_SESSION_doall_arg(lh,fn,arg_type,arg) \\\n  LHM_lh_doall_arg(SSL_SESSION,lh,fn,arg_type,arg)\n# define lh_SSL_SESSION_error(lh) LHM_lh_error(SSL_SESSION,lh)\n# define lh_SSL_SESSION_num_items(lh) LHM_lh_num_items(SSL_SESSION,lh)\n# define lh_SSL_SESSION_down_load(lh) LHM_lh_down_load(SSL_SESSION,lh)\n# define lh_SSL_SESSION_node_stats_bio(lh,out) \\\n  LHM_lh_node_stats_bio(SSL_SESSION,lh,out)\n# define lh_SSL_SESSION_node_usage_stats_bio(lh,out) \\\n  LHM_lh_node_usage_stats_bio(SSL_SESSION,lh,out)\n# define lh_SSL_SESSION_stats_bio(lh,out) \\\n  LHM_lh_stats_bio(SSL_SESSION,lh,out)\n# define lh_SSL_SESSION_free(lh) LHM_lh_free(SSL_SESSION,lh)\n#ifdef  __cplusplus\n}\n#endif\n#endif                          /* !defined HEADER_SAFESTACK_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/seed.h",
    "content": "/*\n * Copyright (c) 2007 KISA(Korea Information Security Agency). 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. Neither the name of author 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 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 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 * Copyright (c) 1998-2007 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_SEED_H\n# define HEADER_SEED_H\n\n# include <openssl/opensslconf.h>\n# include <openssl/e_os2.h>\n# include <openssl/crypto.h>\n\n# ifdef OPENSSL_NO_SEED\n#  error SEED is disabled.\n# endif\n\n/* look whether we need 'long' to get 32 bits */\n# ifdef AES_LONG\n#  ifndef SEED_LONG\n#   define SEED_LONG 1\n#  endif\n# endif\n\n# if !defined(NO_SYS_TYPES_H)\n#  include <sys/types.h>\n# endif\n\n# define SEED_BLOCK_SIZE 16\n# define SEED_KEY_LENGTH 16\n\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct seed_key_st {\n# ifdef SEED_LONG\n    unsigned long data[32];\n# else\n    unsigned int data[32];\n# endif\n} SEED_KEY_SCHEDULE;\n\n# ifdef OPENSSL_FIPS\nvoid private_SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],\n                          SEED_KEY_SCHEDULE *ks);\n# endif\nvoid SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],\n                  SEED_KEY_SCHEDULE *ks);\n\nvoid SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE],\n                  unsigned char d[SEED_BLOCK_SIZE],\n                  const SEED_KEY_SCHEDULE *ks);\nvoid SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE],\n                  unsigned char d[SEED_BLOCK_SIZE],\n                  const SEED_KEY_SCHEDULE *ks);\n\nvoid SEED_ecb_encrypt(const unsigned char *in, unsigned char *out,\n                      const SEED_KEY_SCHEDULE *ks, int enc);\nvoid SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len,\n                      const SEED_KEY_SCHEDULE *ks,\n                      unsigned char ivec[SEED_BLOCK_SIZE], int enc);\nvoid SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out,\n                         size_t len, const SEED_KEY_SCHEDULE *ks,\n                         unsigned char ivec[SEED_BLOCK_SIZE], int *num,\n                         int enc);\nvoid SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out,\n                         size_t len, const SEED_KEY_SCHEDULE *ks,\n                         unsigned char ivec[SEED_BLOCK_SIZE], int *num);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif                          /* HEADER_SEED_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/sha.h",
    "content": "/* crypto/sha/sha.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_SHA_H\n# define HEADER_SHA_H\n\n# include <openssl/e_os2.h>\n# include <stddef.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1))\n#  error SHA is disabled.\n# endif\n\n# if defined(OPENSSL_FIPS)\n#  define FIPS_SHA_SIZE_T size_t\n# endif\n\n/*-\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !\n * ! SHA_LONG_LOG2 has to be defined along.                        !\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n */\n\n# if defined(__LP32__)\n#  define SHA_LONG unsigned long\n# elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)\n#  define SHA_LONG unsigned long\n#  define SHA_LONG_LOG2 3\n# else\n#  define SHA_LONG unsigned int\n# endif\n\n# define SHA_LBLOCK      16\n# define SHA_CBLOCK      (SHA_LBLOCK*4)/* SHA treats input data as a\n                                        * contiguous array of 32 bit wide\n                                        * big-endian values. */\n# define SHA_LAST_BLOCK  (SHA_CBLOCK-8)\n# define SHA_DIGEST_LENGTH 20\n\ntypedef struct SHAstate_st {\n    SHA_LONG h0, h1, h2, h3, h4;\n    SHA_LONG Nl, Nh;\n    SHA_LONG data[SHA_LBLOCK];\n    unsigned int num;\n} SHA_CTX;\n\n# ifndef OPENSSL_NO_SHA0\n#  ifdef OPENSSL_FIPS\nint private_SHA_Init(SHA_CTX *c);\n#  endif\nint SHA_Init(SHA_CTX *c);\nint SHA_Update(SHA_CTX *c, const void *data, size_t len);\nint SHA_Final(unsigned char *md, SHA_CTX *c);\nunsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);\nvoid SHA_Transform(SHA_CTX *c, const unsigned char *data);\n# endif\n# ifndef OPENSSL_NO_SHA1\n#  ifdef OPENSSL_FIPS\nint private_SHA1_Init(SHA_CTX *c);\n#  endif\nint SHA1_Init(SHA_CTX *c);\nint SHA1_Update(SHA_CTX *c, const void *data, size_t len);\nint SHA1_Final(unsigned char *md, SHA_CTX *c);\nunsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);\nvoid SHA1_Transform(SHA_CTX *c, const unsigned char *data);\n# endif\n\n# define SHA256_CBLOCK   (SHA_LBLOCK*4)/* SHA-256 treats input data as a\n                                        * contiguous array of 32 bit wide\n                                        * big-endian values. */\n# define SHA224_DIGEST_LENGTH    28\n# define SHA256_DIGEST_LENGTH    32\n\ntypedef struct SHA256state_st {\n    SHA_LONG h[8];\n    SHA_LONG Nl, Nh;\n    SHA_LONG data[SHA_LBLOCK];\n    unsigned int num, md_len;\n} SHA256_CTX;\n\n# ifndef OPENSSL_NO_SHA256\n#  ifdef OPENSSL_FIPS\nint private_SHA224_Init(SHA256_CTX *c);\nint private_SHA256_Init(SHA256_CTX *c);\n#  endif\nint SHA224_Init(SHA256_CTX *c);\nint SHA224_Update(SHA256_CTX *c, const void *data, size_t len);\nint SHA224_Final(unsigned char *md, SHA256_CTX *c);\nunsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md);\nint SHA256_Init(SHA256_CTX *c);\nint SHA256_Update(SHA256_CTX *c, const void *data, size_t len);\nint SHA256_Final(unsigned char *md, SHA256_CTX *c);\nunsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md);\nvoid SHA256_Transform(SHA256_CTX *c, const unsigned char *data);\n# endif\n\n# define SHA384_DIGEST_LENGTH    48\n# define SHA512_DIGEST_LENGTH    64\n\n# ifndef OPENSSL_NO_SHA512\n/*\n * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64\n * being exactly 64-bit wide. See Implementation Notes in sha512.c\n * for further details.\n */\n/*\n * SHA-512 treats input data as a\n * contiguous array of 64 bit\n * wide big-endian values.\n */\n#  define SHA512_CBLOCK   (SHA_LBLOCK*8)\n#  if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)\n#   define SHA_LONG64 unsigned __int64\n#   define U64(C)     C##UI64\n#  elif defined(__arch64__)\n#   define SHA_LONG64 unsigned long\n#   define U64(C)     C##UL\n#  else\n#   define SHA_LONG64 unsigned long long\n#   define U64(C)     C##ULL\n#  endif\n\ntypedef struct SHA512state_st {\n    SHA_LONG64 h[8];\n    SHA_LONG64 Nl, Nh;\n    union {\n        SHA_LONG64 d[SHA_LBLOCK];\n        unsigned char p[SHA512_CBLOCK];\n    } u;\n    unsigned int num, md_len;\n} SHA512_CTX;\n# endif\n\n# ifndef OPENSSL_NO_SHA512\n#  ifdef OPENSSL_FIPS\nint private_SHA384_Init(SHA512_CTX *c);\nint private_SHA512_Init(SHA512_CTX *c);\n#  endif\nint SHA384_Init(SHA512_CTX *c);\nint SHA384_Update(SHA512_CTX *c, const void *data, size_t len);\nint SHA384_Final(unsigned char *md, SHA512_CTX *c);\nunsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md);\nint SHA512_Init(SHA512_CTX *c);\nint SHA512_Update(SHA512_CTX *c, const void *data, size_t len);\nint SHA512_Final(unsigned char *md, SHA512_CTX *c);\nunsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md);\nvoid SHA512_Transform(SHA512_CTX *c, const unsigned char *data);\n# endif\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/srp.h",
    "content": "/* crypto/srp/srp.h */\n/*\n * Written by Christophe Renou (christophe.renou@edelweb.fr) with the\n * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the\n * EdelKey project and contributed to the OpenSSL project 2004.\n */\n/* ====================================================================\n * Copyright (c) 2004 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n#ifndef __SRP_H__\n# define __SRP_H__\n\n# ifndef OPENSSL_NO_SRP\n\n#  include <stdio.h>\n#  include <string.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n#  include <openssl/safestack.h>\n#  include <openssl/bn.h>\n#  include <openssl/crypto.h>\n\ntypedef struct SRP_gN_cache_st {\n    char *b64_bn;\n    BIGNUM *bn;\n} SRP_gN_cache;\n\n\nDECLARE_STACK_OF(SRP_gN_cache)\n\ntypedef struct SRP_user_pwd_st {\n    char *id;\n    BIGNUM *s;\n    BIGNUM *v;\n    const BIGNUM *g;\n    const BIGNUM *N;\n    char *info;\n} SRP_user_pwd;\n\nDECLARE_STACK_OF(SRP_user_pwd)\n\ntypedef struct SRP_VBASE_st {\n    STACK_OF(SRP_user_pwd) *users_pwd;\n    STACK_OF(SRP_gN_cache) *gN_cache;\n/* to simulate a user */\n    char *seed_key;\n    BIGNUM *default_g;\n    BIGNUM *default_N;\n} SRP_VBASE;\n\n/*\n * Structure interne pour retenir les couples N et g\n */\ntypedef struct SRP_gN_st {\n    char *id;\n    BIGNUM *g;\n    BIGNUM *N;\n} SRP_gN;\n\nDECLARE_STACK_OF(SRP_gN)\n\nSRP_VBASE *SRP_VBASE_new(char *seed_key);\nint SRP_VBASE_free(SRP_VBASE *vb);\nint SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file);\nSRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);\nchar *SRP_create_verifier(const char *user, const char *pass, char **salt,\n                          char **verifier, const char *N, const char *g);\nint SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt,\n                           BIGNUM **verifier, BIGNUM *N, BIGNUM *g);\n\n#  define SRP_NO_ERROR 0\n#  define SRP_ERR_VBASE_INCOMPLETE_FILE 1\n#  define SRP_ERR_VBASE_BN_LIB 2\n#  define SRP_ERR_OPEN_FILE 3\n#  define SRP_ERR_MEMORY 4\n\n#  define DB_srptype      0\n#  define DB_srpverifier  1\n#  define DB_srpsalt      2\n#  define DB_srpid        3\n#  define DB_srpgN        4\n#  define DB_srpinfo      5\n#  undef  DB_NUMBER\n#  define DB_NUMBER       6\n\n#  define DB_SRP_INDEX    'I'\n#  define DB_SRP_VALID    'V'\n#  define DB_SRP_REVOKED  'R'\n#  define DB_SRP_MODIF    'v'\n\n/* see srp.c */\nchar *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N);\nSRP_gN *SRP_get_default_gN(const char *id);\n\n/* server side .... */\nBIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b,\n                            BIGNUM *N);\nBIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v);\nint SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N);\nBIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N);\n\n/* client side .... */\nBIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass);\nBIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g);\nBIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x,\n                            BIGNUM *a, BIGNUM *u);\nint SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N);\n\n#  define SRP_MINIMAL_N 1024\n\n#ifdef  __cplusplus\n}\n#endif\n\n# endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/srtp.h",
    "content": "/* ssl/srtp.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/*\n * DTLS code by Eric Rescorla <ekr@rtfm.com>\n *\n * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc.\n */\n\n#ifndef HEADER_D1_SRTP_H\n# define HEADER_D1_SRTP_H\n\n# include <openssl/ssl.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define SRTP_AES128_CM_SHA1_80 0x0001\n# define SRTP_AES128_CM_SHA1_32 0x0002\n# define SRTP_AES128_F8_SHA1_80 0x0003\n# define SRTP_AES128_F8_SHA1_32 0x0004\n# define SRTP_NULL_SHA1_80      0x0005\n# define SRTP_NULL_SHA1_32      0x0006\n\n# ifndef OPENSSL_NO_SRTP\n\nint SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles);\nint SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles);\n\nSTACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl);\nSRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s);\n\n# endif\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ssl.h",
    "content": "/* ssl/ssl.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2007 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n * ECC cipher suite support in OpenSSL originally developed by\n * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n */\n/* ====================================================================\n * Copyright 2005 Nokia. All rights reserved.\n *\n * The portions of the attached software (\"Contribution\") is developed by\n * Nokia Corporation and is licensed pursuant to the OpenSSL open source\n * license.\n *\n * The Contribution, originally written by Mika Kousa and Pasi Eronen of\n * Nokia Corporation, consists of the \"PSK\" (Pre-Shared Key) ciphersuites\n * support (see RFC 4279) to OpenSSL.\n *\n * No patent licenses or other rights except those expressly stated in\n * the OpenSSL open source license shall be deemed granted or received\n * expressly, by implication, estoppel, or otherwise.\n *\n * No assurances are provided by Nokia that the Contribution does not\n * infringe the patent or other intellectual property rights of any third\n * party or that the license provides you with all the necessary rights\n * to make use of the Contribution.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND. IN\n * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA\n * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY\n * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR\n * OTHERWISE.\n */\n\n#ifndef HEADER_SSL_H\n# define HEADER_SSL_H\n\n# include <openssl/e_os2.h>\n\n# ifndef OPENSSL_NO_COMP\n#  include <openssl/comp.h>\n# endif\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# ifndef OPENSSL_NO_DEPRECATED\n#  ifndef OPENSSL_NO_X509\n#   include <openssl/x509.h>\n#  endif\n#  include <openssl/crypto.h>\n#  include <openssl/lhash.h>\n#  include <openssl/buffer.h>\n# endif\n# include <openssl/pem.h>\n# include <openssl/hmac.h>\n\n# include <openssl/kssl.h>\n# include <openssl/safestack.h>\n# include <openssl/symhacks.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* SSLeay version number for ASN.1 encoding of the session information */\n/*-\n * Version 0 - initial version\n * Version 1 - added the optional peer certificate\n */\n# define SSL_SESSION_ASN1_VERSION 0x0001\n\n/* text strings for the ciphers */\n# define SSL_TXT_NULL_WITH_MD5           SSL2_TXT_NULL_WITH_MD5\n# define SSL_TXT_RC4_128_WITH_MD5        SSL2_TXT_RC4_128_WITH_MD5\n# define SSL_TXT_RC4_128_EXPORT40_WITH_MD5 SSL2_TXT_RC4_128_EXPORT40_WITH_MD5\n# define SSL_TXT_RC2_128_CBC_WITH_MD5    SSL2_TXT_RC2_128_CBC_WITH_MD5\n# define SSL_TXT_RC2_128_CBC_EXPORT40_WITH_MD5 SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5\n# define SSL_TXT_IDEA_128_CBC_WITH_MD5   SSL2_TXT_IDEA_128_CBC_WITH_MD5\n# define SSL_TXT_DES_64_CBC_WITH_MD5     SSL2_TXT_DES_64_CBC_WITH_MD5\n# define SSL_TXT_DES_64_CBC_WITH_SHA     SSL2_TXT_DES_64_CBC_WITH_SHA\n# define SSL_TXT_DES_192_EDE3_CBC_WITH_MD5 SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5\n# define SSL_TXT_DES_192_EDE3_CBC_WITH_SHA SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA\n\n/*\n * VRS Additional Kerberos5 entries\n */\n# define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA\n# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA\n# define SSL_TXT_KRB5_RC4_128_SHA      SSL3_TXT_KRB5_RC4_128_SHA\n# define SSL_TXT_KRB5_IDEA_128_CBC_SHA SSL3_TXT_KRB5_IDEA_128_CBC_SHA\n# define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5\n# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5\n# define SSL_TXT_KRB5_RC4_128_MD5      SSL3_TXT_KRB5_RC4_128_MD5\n# define SSL_TXT_KRB5_IDEA_128_CBC_MD5 SSL3_TXT_KRB5_IDEA_128_CBC_MD5\n\n# define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA\n# define SSL_TXT_KRB5_RC2_40_CBC_SHA   SSL3_TXT_KRB5_RC2_40_CBC_SHA\n# define SSL_TXT_KRB5_RC4_40_SHA       SSL3_TXT_KRB5_RC4_40_SHA\n# define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5\n# define SSL_TXT_KRB5_RC2_40_CBC_MD5   SSL3_TXT_KRB5_RC2_40_CBC_MD5\n# define SSL_TXT_KRB5_RC4_40_MD5       SSL3_TXT_KRB5_RC4_40_MD5\n\n# define SSL_TXT_KRB5_DES_40_CBC_SHA   SSL3_TXT_KRB5_DES_40_CBC_SHA\n# define SSL_TXT_KRB5_DES_40_CBC_MD5   SSL3_TXT_KRB5_DES_40_CBC_MD5\n# define SSL_TXT_KRB5_DES_64_CBC_SHA   SSL3_TXT_KRB5_DES_64_CBC_SHA\n# define SSL_TXT_KRB5_DES_64_CBC_MD5   SSL3_TXT_KRB5_DES_64_CBC_MD5\n# define SSL_TXT_KRB5_DES_192_CBC3_SHA SSL3_TXT_KRB5_DES_192_CBC3_SHA\n# define SSL_TXT_KRB5_DES_192_CBC3_MD5 SSL3_TXT_KRB5_DES_192_CBC3_MD5\n# define SSL_MAX_KRB5_PRINCIPAL_LENGTH  256\n\n# define SSL_MAX_SSL_SESSION_ID_LENGTH           32\n# define SSL_MAX_SID_CTX_LENGTH                  32\n\n# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES     (512/8)\n# define SSL_MAX_KEY_ARG_LENGTH                  8\n# define SSL_MAX_MASTER_KEY_LENGTH               48\n\n/* These are used to specify which ciphers to use and not to use */\n\n# define SSL_TXT_EXP40           \"EXPORT40\"\n# define SSL_TXT_EXP56           \"EXPORT56\"\n# define SSL_TXT_LOW             \"LOW\"\n# define SSL_TXT_MEDIUM          \"MEDIUM\"\n# define SSL_TXT_HIGH            \"HIGH\"\n# define SSL_TXT_FIPS            \"FIPS\"\n\n# define SSL_TXT_kFZA            \"kFZA\"/* unused! */\n# define SSL_TXT_aFZA            \"aFZA\"/* unused! */\n# define SSL_TXT_eFZA            \"eFZA\"/* unused! */\n# define SSL_TXT_FZA             \"FZA\"/* unused! */\n\n# define SSL_TXT_aNULL           \"aNULL\"\n# define SSL_TXT_eNULL           \"eNULL\"\n# define SSL_TXT_NULL            \"NULL\"\n\n# define SSL_TXT_kRSA            \"kRSA\"\n# define SSL_TXT_kDHr            \"kDHr\"\n# define SSL_TXT_kDHd            \"kDHd\"\n# define SSL_TXT_kDH             \"kDH\"\n# define SSL_TXT_kEDH            \"kEDH\"\n# define SSL_TXT_kDHE            \"kDHE\"/* alias for kEDH */\n# define SSL_TXT_kKRB5           \"kKRB5\"\n# define SSL_TXT_kECDHr          \"kECDHr\"\n# define SSL_TXT_kECDHe          \"kECDHe\"\n# define SSL_TXT_kECDH           \"kECDH\"\n# define SSL_TXT_kEECDH          \"kEECDH\"\n# define SSL_TXT_kECDHE          \"kECDHE\"/* alias for kEECDH */\n# define SSL_TXT_kPSK            \"kPSK\"\n# define SSL_TXT_kGOST           \"kGOST\"\n# define SSL_TXT_kSRP            \"kSRP\"\n\n# define SSL_TXT_aRSA            \"aRSA\"\n# define SSL_TXT_aDSS            \"aDSS\"\n# define SSL_TXT_aDH             \"aDH\"\n# define SSL_TXT_aECDH           \"aECDH\"\n# define SSL_TXT_aKRB5           \"aKRB5\"\n# define SSL_TXT_aECDSA          \"aECDSA\"\n# define SSL_TXT_aPSK            \"aPSK\"\n# define SSL_TXT_aGOST94 \"aGOST94\"\n# define SSL_TXT_aGOST01 \"aGOST01\"\n# define SSL_TXT_aGOST  \"aGOST\"\n# define SSL_TXT_aSRP            \"aSRP\"\n\n# define SSL_TXT_DSS             \"DSS\"\n# define SSL_TXT_DH              \"DH\"\n# define SSL_TXT_EDH             \"EDH\"/* same as \"kEDH:-ADH\" */\n# define SSL_TXT_DHE             \"DHE\"/* alias for EDH */\n# define SSL_TXT_ADH             \"ADH\"\n# define SSL_TXT_RSA             \"RSA\"\n# define SSL_TXT_ECDH            \"ECDH\"\n# define SSL_TXT_EECDH           \"EECDH\"/* same as \"kEECDH:-AECDH\" */\n# define SSL_TXT_ECDHE           \"ECDHE\"/* alias for ECDHE\" */\n# define SSL_TXT_AECDH           \"AECDH\"\n# define SSL_TXT_ECDSA           \"ECDSA\"\n# define SSL_TXT_KRB5            \"KRB5\"\n# define SSL_TXT_PSK             \"PSK\"\n# define SSL_TXT_SRP             \"SRP\"\n\n# define SSL_TXT_DES             \"DES\"\n# define SSL_TXT_3DES            \"3DES\"\n# define SSL_TXT_RC4             \"RC4\"\n# define SSL_TXT_RC2             \"RC2\"\n# define SSL_TXT_IDEA            \"IDEA\"\n# define SSL_TXT_SEED            \"SEED\"\n# define SSL_TXT_AES128          \"AES128\"\n# define SSL_TXT_AES256          \"AES256\"\n# define SSL_TXT_AES             \"AES\"\n# define SSL_TXT_AES_GCM         \"AESGCM\"\n# define SSL_TXT_CAMELLIA128     \"CAMELLIA128\"\n# define SSL_TXT_CAMELLIA256     \"CAMELLIA256\"\n# define SSL_TXT_CAMELLIA        \"CAMELLIA\"\n\n# define SSL_TXT_MD5             \"MD5\"\n# define SSL_TXT_SHA1            \"SHA1\"\n# define SSL_TXT_SHA             \"SHA\"/* same as \"SHA1\" */\n# define SSL_TXT_GOST94          \"GOST94\"\n# define SSL_TXT_GOST89MAC               \"GOST89MAC\"\n# define SSL_TXT_SHA256          \"SHA256\"\n# define SSL_TXT_SHA384          \"SHA384\"\n\n# define SSL_TXT_SSLV2           \"SSLv2\"\n# define SSL_TXT_SSLV3           \"SSLv3\"\n# define SSL_TXT_TLSV1           \"TLSv1\"\n# define SSL_TXT_TLSV1_1         \"TLSv1.1\"\n# define SSL_TXT_TLSV1_2         \"TLSv1.2\"\n\n# define SSL_TXT_EXP             \"EXP\"\n# define SSL_TXT_EXPORT          \"EXPORT\"\n\n# define SSL_TXT_ALL             \"ALL\"\n\n/*-\n * COMPLEMENTOF* definitions. These identifiers are used to (de-select)\n * ciphers normally not being used.\n * Example: \"RC4\" will activate all ciphers using RC4 including ciphers\n * without authentication, which would normally disabled by DEFAULT (due\n * the \"!ADH\" being part of default). Therefore \"RC4:!COMPLEMENTOFDEFAULT\"\n * will make sure that it is also disabled in the specific selection.\n * COMPLEMENTOF* identifiers are portable between version, as adjustments\n * to the default cipher setup will also be included here.\n *\n * COMPLEMENTOFDEFAULT does not experience the same special treatment that\n * DEFAULT gets, as only selection is being done and no sorting as needed\n * for DEFAULT.\n */\n# define SSL_TXT_CMPALL          \"COMPLEMENTOFALL\"\n# define SSL_TXT_CMPDEF          \"COMPLEMENTOFDEFAULT\"\n\n/*\n * The following cipher list is used by default. It also is substituted when\n * an application-defined cipher list string starts with 'DEFAULT'.\n */\n# define SSL_DEFAULT_CIPHER_LIST \"ALL:!EXPORT:!aNULL:!eNULL:!SSLv2\"\n/*\n * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always\n * starts with a reasonable order, and all we have to do for DEFAULT is\n * throwing out anonymous and unencrypted ciphersuites! (The latter are not\n * actually enabled by ALL, but \"ALL:RSA\" would enable some of them.)\n */\n\n/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */\n# define SSL_SENT_SHUTDOWN       1\n# define SSL_RECEIVED_SHUTDOWN   2\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# if (defined(OPENSSL_NO_RSA) || defined(OPENSSL_NO_MD5)) && !defined(OPENSSL_NO_SSL2)\n#  define OPENSSL_NO_SSL2\n# endif\n\n# define SSL_FILETYPE_ASN1       X509_FILETYPE_ASN1\n# define SSL_FILETYPE_PEM        X509_FILETYPE_PEM\n\n/*\n * This is needed to stop compilers complaining about the 'struct ssl_st *'\n * function parameters used to prototype callbacks in SSL_CTX.\n */\ntypedef struct ssl_st *ssl_crock_st;\ntypedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;\ntypedef struct ssl_method_st SSL_METHOD;\ntypedef struct ssl_cipher_st SSL_CIPHER;\ntypedef struct ssl_session_st SSL_SESSION;\ntypedef struct tls_sigalgs_st TLS_SIGALGS;\ntypedef struct ssl_conf_ctx_st SSL_CONF_CTX;\n\nDECLARE_STACK_OF(SSL_CIPHER)\n\n/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/\ntypedef struct srtp_protection_profile_st {\n    const char *name;\n    unsigned long id;\n} SRTP_PROTECTION_PROFILE;\n\nDECLARE_STACK_OF(SRTP_PROTECTION_PROFILE)\n\ntypedef int (*tls_session_ticket_ext_cb_fn) (SSL *s,\n                                             const unsigned char *data,\n                                             int len, void *arg);\ntypedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret,\n                                         int *secret_len,\n                                         STACK_OF(SSL_CIPHER) *peer_ciphers,\n                                         SSL_CIPHER **cipher, void *arg);\n\n# ifndef OPENSSL_NO_TLSEXT\n\n/* Typedefs for handling custom extensions */\n\ntypedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type,\n                                  const unsigned char **out,\n                                  size_t *outlen, int *al, void *add_arg);\n\ntypedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type,\n                                    const unsigned char *out, void *add_arg);\n\ntypedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type,\n                                    const unsigned char *in,\n                                    size_t inlen, int *al, void *parse_arg);\n\n# endif\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\n/* used to hold info on the particular ciphers used */\nstruct ssl_cipher_st {\n    int valid;\n    const char *name;           /* text name */\n    unsigned long id;           /* id, 4 bytes, first is version */\n    /*\n     * changed in 0.9.9: these four used to be portions of a single value\n     * 'algorithms'\n     */\n    unsigned long algorithm_mkey; /* key exchange algorithm */\n    unsigned long algorithm_auth; /* server authentication */\n    unsigned long algorithm_enc; /* symmetric encryption */\n    unsigned long algorithm_mac; /* symmetric authentication */\n    unsigned long algorithm_ssl; /* (major) protocol version */\n    unsigned long algo_strength; /* strength and export flags */\n    unsigned long algorithm2;   /* Extra flags */\n    int strength_bits;          /* Number of bits really used */\n    int alg_bits;               /* Number of bits for algorithm */\n};\n\n/* Used to hold functions for SSLv2 or SSLv3/TLSv1 functions */\nstruct ssl_method_st {\n    int version;\n    int (*ssl_new) (SSL *s);\n    void (*ssl_clear) (SSL *s);\n    void (*ssl_free) (SSL *s);\n    int (*ssl_accept) (SSL *s);\n    int (*ssl_connect) (SSL *s);\n    int (*ssl_read) (SSL *s, void *buf, int len);\n    int (*ssl_peek) (SSL *s, void *buf, int len);\n    int (*ssl_write) (SSL *s, const void *buf, int len);\n    int (*ssl_shutdown) (SSL *s);\n    int (*ssl_renegotiate) (SSL *s);\n    int (*ssl_renegotiate_check) (SSL *s);\n    long (*ssl_get_message) (SSL *s, int st1, int stn, int mt, long\n                             max, int *ok);\n    int (*ssl_read_bytes) (SSL *s, int type, unsigned char *buf, int len,\n                           int peek);\n    int (*ssl_write_bytes) (SSL *s, int type, const void *buf_, int len);\n    int (*ssl_dispatch_alert) (SSL *s);\n    long (*ssl_ctrl) (SSL *s, int cmd, long larg, void *parg);\n    long (*ssl_ctx_ctrl) (SSL_CTX *ctx, int cmd, long larg, void *parg);\n    const SSL_CIPHER *(*get_cipher_by_char) (const unsigned char *ptr);\n    int (*put_cipher_by_char) (const SSL_CIPHER *cipher, unsigned char *ptr);\n    int (*ssl_pending) (const SSL *s);\n    int (*num_ciphers) (void);\n    const SSL_CIPHER *(*get_cipher) (unsigned ncipher);\n    const struct ssl_method_st *(*get_ssl_method) (int version);\n    long (*get_timeout) (void);\n    struct ssl3_enc_method *ssl3_enc; /* Extra SSLv3/TLS stuff */\n    int (*ssl_version) (void);\n    long (*ssl_callback_ctrl) (SSL *s, int cb_id, void (*fp) (void));\n    long (*ssl_ctx_callback_ctrl) (SSL_CTX *s, int cb_id, void (*fp) (void));\n};\n\n/*-\n * Lets make this into an ASN.1 type structure as follows\n * SSL_SESSION_ID ::= SEQUENCE {\n *      version                 INTEGER,        -- structure version number\n *      SSLversion              INTEGER,        -- SSL version number\n *      Cipher                  OCTET STRING,   -- the 3 byte cipher ID\n *      Session_ID              OCTET STRING,   -- the Session ID\n *      Master_key              OCTET STRING,   -- the master key\n *      KRB5_principal          OCTET STRING    -- optional Kerberos principal\n *      Key_Arg [ 0 ] IMPLICIT  OCTET STRING,   -- the optional Key argument\n *      Time [ 1 ] EXPLICIT     INTEGER,        -- optional Start Time\n *      Timeout [ 2 ] EXPLICIT  INTEGER,        -- optional Timeout ins seconds\n *      Peer [ 3 ] EXPLICIT     X509,           -- optional Peer Certificate\n *      Session_ID_context [ 4 ] EXPLICIT OCTET STRING,   -- the Session ID context\n *      Verify_result [ 5 ] EXPLICIT INTEGER,   -- X509_V_... code for `Peer'\n *      HostName [ 6 ] EXPLICIT OCTET STRING,   -- optional HostName from servername TLS extension\n *      PSK_identity_hint [ 7 ] EXPLICIT OCTET STRING, -- optional PSK identity hint\n *      PSK_identity [ 8 ] EXPLICIT OCTET STRING,  -- optional PSK identity\n *      Ticket_lifetime_hint [9] EXPLICIT INTEGER, -- server's lifetime hint for session ticket\n *      Ticket [10]             EXPLICIT OCTET STRING, -- session ticket (clients only)\n *      Compression_meth [11]   EXPLICIT OCTET STRING, -- optional compression method\n *      SRP_username [ 12 ] EXPLICIT OCTET STRING -- optional SRP username\n *      }\n * Look in ssl/ssl_asn1.c for more details\n * I'm using EXPLICIT tags so I can read the damn things using asn1parse :-).\n */\nstruct ssl_session_st {\n    int ssl_version;            /* what ssl version session info is being\n                                 * kept in here? */\n    /* only really used in SSLv2 */\n    unsigned int key_arg_length;\n    unsigned char key_arg[SSL_MAX_KEY_ARG_LENGTH];\n    int master_key_length;\n    unsigned char master_key[SSL_MAX_MASTER_KEY_LENGTH];\n    /* session_id - valid? */\n    unsigned int session_id_length;\n    unsigned char session_id[SSL_MAX_SSL_SESSION_ID_LENGTH];\n    /*\n     * this is used to determine whether the session is being reused in the\n     * appropriate context. It is up to the application to set this, via\n     * SSL_new\n     */\n    unsigned int sid_ctx_length;\n    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\n#  ifndef OPENSSL_NO_KRB5\n    unsigned int krb5_client_princ_len;\n    unsigned char krb5_client_princ[SSL_MAX_KRB5_PRINCIPAL_LENGTH];\n#  endif                        /* OPENSSL_NO_KRB5 */\n#  ifndef OPENSSL_NO_PSK\n    char *psk_identity_hint;\n    char *psk_identity;\n#  endif\n    /*\n     * Used to indicate that session resumption is not allowed. Applications\n     * can also set this bit for a new session via not_resumable_session_cb\n     * to disable session caching and tickets.\n     */\n    int not_resumable;\n    /* The cert is the certificate used to establish this connection */\n    struct sess_cert_st /* SESS_CERT */ *sess_cert;\n    /*\n     * This is the cert for the other end. On clients, it will be the same as\n     * sess_cert->peer_key->x509 (the latter is not enough as sess_cert is\n     * not retained in the external representation of sessions, see\n     * ssl_asn1.c).\n     */\n    X509 *peer;\n    /*\n     * when app_verify_callback accepts a session where the peer's\n     * certificate is not ok, we must remember the error for session reuse:\n     */\n    long verify_result;         /* only for servers */\n    int references;\n    long timeout;\n    long time;\n    unsigned int compress_meth; /* Need to lookup the method */\n    const SSL_CIPHER *cipher;\n    unsigned long cipher_id;    /* when ASN.1 loaded, this needs to be used\n                                 * to load the 'cipher' structure */\n    STACK_OF(SSL_CIPHER) *ciphers; /* shared ciphers? */\n    CRYPTO_EX_DATA ex_data;     /* application specific data */\n    /*\n     * These are used to make removal of session-ids more efficient and to\n     * implement a maximum cache size.\n     */\n    struct ssl_session_st *prev, *next;\n#  ifndef OPENSSL_NO_TLSEXT\n    char *tlsext_hostname;\n#   ifndef OPENSSL_NO_EC\n    size_t tlsext_ecpointformatlist_length;\n    unsigned char *tlsext_ecpointformatlist; /* peer's list */\n    size_t tlsext_ellipticcurvelist_length;\n    unsigned char *tlsext_ellipticcurvelist; /* peer's list */\n#   endif                       /* OPENSSL_NO_EC */\n    /* RFC4507 info */\n    unsigned char *tlsext_tick; /* Session ticket */\n    size_t tlsext_ticklen;      /* Session ticket length */\n    long tlsext_tick_lifetime_hint; /* Session lifetime hint in seconds */\n#  endif\n#  ifndef OPENSSL_NO_SRP\n    char *srp_username;\n#  endif\n};\n\n# endif\n\n# define SSL_OP_MICROSOFT_SESS_ID_BUG                    0x00000001L\n# define SSL_OP_NETSCAPE_CHALLENGE_BUG                   0x00000002L\n/* Allow initial connection to servers that don't support RI */\n# define SSL_OP_LEGACY_SERVER_CONNECT                    0x00000004L\n# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG         0x00000008L\n# define SSL_OP_TLSEXT_PADDING                           0x00000010L\n# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER               0x00000020L\n# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG                   0x00000040L\n# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG                 0x00000080L\n# define SSL_OP_TLS_D5_BUG                               0x00000100L\n# define SSL_OP_TLS_BLOCK_PADDING_BUG                    0x00000200L\n\n/* Hasn't done anything since OpenSSL 0.9.7h, retained for compatibility */\n# define SSL_OP_MSIE_SSLV2_RSA_PADDING                   0x0\n/* Refers to ancient SSLREF and SSLv2, retained for compatibility */\n# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG              0x0\n\n/*\n * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in\n * OpenSSL 0.9.6d.  Usually (depending on the application protocol) the\n * workaround is not needed.  Unfortunately some broken SSL/TLS\n * implementations cannot handle it at all, which is why we include it in\n * SSL_OP_ALL.\n */\n/* added in 0.9.6e */\n# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS              0x00000800L\n\n/*\n * SSL_OP_ALL: various bug workarounds that should be rather harmless.  This\n * used to be 0x000FFFFFL before 0.9.7.\n */\n# define SSL_OP_ALL                                      0x80000BFFL\n\n/* DTLS options */\n# define SSL_OP_NO_QUERY_MTU                 0x00001000L\n/* Turn on Cookie Exchange (on relevant for servers) */\n# define SSL_OP_COOKIE_EXCHANGE              0x00002000L\n/* Don't use RFC4507 ticket extension */\n# define SSL_OP_NO_TICKET                    0x00004000L\n/* Use Cisco's \"speshul\" version of DTLS_BAD_VER (as client)  */\n# define SSL_OP_CISCO_ANYCONNECT             0x00008000L\n\n/* As server, disallow session resumption on renegotiation */\n# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION   0x00010000L\n/* Don't use compression even if supported */\n# define SSL_OP_NO_COMPRESSION                           0x00020000L\n/* Permit unsafe legacy renegotiation */\n# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION        0x00040000L\n/* If set, always create a new key when using tmp_ecdh parameters */\n# define SSL_OP_SINGLE_ECDH_USE                          0x00080000L\n/* If set, always create a new key when using tmp_dh parameters */\n# define SSL_OP_SINGLE_DH_USE                            0x00100000L\n/* Does nothing: retained for compatibiity */\n# define SSL_OP_EPHEMERAL_RSA                            0x0\n/*\n * Set on servers to choose the cipher according to the server's preferences\n */\n# define SSL_OP_CIPHER_SERVER_PREFERENCE                 0x00400000L\n/*\n * If set, a server will allow a client to issue a SSLv3.0 version number as\n * latest version supported in the premaster secret, even when TLSv1.0\n * (version 3.1) was announced in the client hello. Normally this is\n * forbidden to prevent version rollback attacks.\n */\n# define SSL_OP_TLS_ROLLBACK_BUG                         0x00800000L\n\n# define SSL_OP_NO_SSLv2                                 0x01000000L\n# define SSL_OP_NO_SSLv3                                 0x02000000L\n# define SSL_OP_NO_TLSv1                                 0x04000000L\n# define SSL_OP_NO_TLSv1_2                               0x08000000L\n# define SSL_OP_NO_TLSv1_1                               0x10000000L\n\n# define SSL_OP_NO_DTLSv1                                0x04000000L\n# define SSL_OP_NO_DTLSv1_2                              0x08000000L\n\n# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\\\n        SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2)\n\n/*\n * These next two were never actually used for anything since SSLeay zap so\n * we have some more flags.\n */\n/*\n * The next flag deliberately changes the ciphertest, this is a check for the\n * PKCS#1 attack\n */\n# define SSL_OP_PKCS1_CHECK_1                            0x0\n# define SSL_OP_PKCS1_CHECK_2                            0x0\n\n# define SSL_OP_NETSCAPE_CA_DN_BUG                       0x20000000L\n# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG          0x40000000L\n/*\n * Make server add server-hello extension from early version of cryptopro\n * draft, when GOST ciphersuite is negotiated. Required for interoperability\n * with CryptoPro CSP 3.x\n */\n# define SSL_OP_CRYPTOPRO_TLSEXT_BUG                     0x80000000L\n\n/*\n * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success\n * when just a single record has been written):\n */\n# define SSL_MODE_ENABLE_PARTIAL_WRITE       0x00000001L\n/*\n * Make it possible to retry SSL_write() with changed buffer location (buffer\n * contents must stay the same!); this is not the default to avoid the\n * misconception that non-blocking SSL_write() behaves like non-blocking\n * write():\n */\n# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002L\n/*\n * Never bother the application with retries if the transport is blocking:\n */\n# define SSL_MODE_AUTO_RETRY 0x00000004L\n/* Don't attempt to automatically build certificate chain */\n# define SSL_MODE_NO_AUTO_CHAIN 0x00000008L\n/*\n * Save RAM by releasing read and write buffers when they're empty. (SSL3 and\n * TLS only.) \"Released\" buffers are put onto a free-list in the context or\n * just freed (depending on the context's setting for freelist_max_len).\n */\n# define SSL_MODE_RELEASE_BUFFERS 0x00000010L\n/*\n * Send the current time in the Random fields of the ClientHello and\n * ServerHello records for compatibility with hypothetical implementations\n * that require it.\n */\n# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020L\n# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040L\n/*\n * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications\n * that reconnect with a downgraded protocol version; see\n * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your\n * application attempts a normal handshake. Only use this in explicit\n * fallback retries, following the guidance in\n * draft-ietf-tls-downgrade-scsv-00.\n */\n# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L\n\n/* Cert related flags */\n/*\n * Many implementations ignore some aspects of the TLS standards such as\n * enforcing certifcate chain algorithms. When this is set we enforce them.\n */\n# define SSL_CERT_FLAG_TLS_STRICT                0x00000001L\n\n/* Suite B modes, takes same values as certificate verify flags */\n# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY       0x10000\n/* Suite B 192 bit only mode */\n# define SSL_CERT_FLAG_SUITEB_192_LOS            0x20000\n/* Suite B 128 bit mode allowing 192 bit algorithms */\n# define SSL_CERT_FLAG_SUITEB_128_LOS            0x30000\n\n/* Perform all sorts of protocol violations for testing purposes */\n# define SSL_CERT_FLAG_BROKEN_PROTOCOL           0x10000000\n\n/* Flags for building certificate chains */\n/* Treat any existing certificates as untrusted CAs */\n# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED          0x1\n/* Don't include root CA in chain */\n# define SSL_BUILD_CHAIN_FLAG_NO_ROOT            0x2\n/* Just check certificates already there */\n# define SSL_BUILD_CHAIN_FLAG_CHECK              0x4\n/* Ignore verification errors */\n# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR       0x8\n/* Clear verification errors from queue */\n# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR        0x10\n\n/* Flags returned by SSL_check_chain */\n/* Certificate can be used with this session */\n# define CERT_PKEY_VALID         0x1\n/* Certificate can also be used for signing */\n# define CERT_PKEY_SIGN          0x2\n/* EE certificate signing algorithm OK */\n# define CERT_PKEY_EE_SIGNATURE  0x10\n/* CA signature algorithms OK */\n# define CERT_PKEY_CA_SIGNATURE  0x20\n/* EE certificate parameters OK */\n# define CERT_PKEY_EE_PARAM      0x40\n/* CA certificate parameters OK */\n# define CERT_PKEY_CA_PARAM      0x80\n/* Signing explicitly allowed as opposed to SHA1 fallback */\n# define CERT_PKEY_EXPLICIT_SIGN 0x100\n/* Client CA issuer names match (always set for server cert) */\n# define CERT_PKEY_ISSUER_NAME   0x200\n/* Cert type matches client types (always set for server cert) */\n# define CERT_PKEY_CERT_TYPE     0x400\n/* Cert chain suitable to Suite B */\n# define CERT_PKEY_SUITEB        0x800\n\n# define SSL_CONF_FLAG_CMDLINE           0x1\n# define SSL_CONF_FLAG_FILE              0x2\n# define SSL_CONF_FLAG_CLIENT            0x4\n# define SSL_CONF_FLAG_SERVER            0x8\n# define SSL_CONF_FLAG_SHOW_ERRORS       0x10\n# define SSL_CONF_FLAG_CERTIFICATE       0x20\n/* Configuration value types */\n# define SSL_CONF_TYPE_UNKNOWN           0x0\n# define SSL_CONF_TYPE_STRING            0x1\n# define SSL_CONF_TYPE_FILE              0x2\n# define SSL_CONF_TYPE_DIR               0x3\n\n/*\n * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they\n * cannot be used to clear bits.\n */\n\n# define SSL_CTX_set_options(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)\n# define SSL_CTX_clear_options(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_OPTIONS,(op),NULL)\n# define SSL_CTX_get_options(ctx) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,0,NULL)\n# define SSL_set_options(ssl,op) \\\n        SSL_ctrl((ssl),SSL_CTRL_OPTIONS,(op),NULL)\n# define SSL_clear_options(ssl,op) \\\n        SSL_ctrl((ssl),SSL_CTRL_CLEAR_OPTIONS,(op),NULL)\n# define SSL_get_options(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_OPTIONS,0,NULL)\n\n# define SSL_CTX_set_mode(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL)\n# define SSL_CTX_clear_mode(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL)\n# define SSL_CTX_get_mode(ctx) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL)\n# define SSL_clear_mode(ssl,op) \\\n        SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL)\n# define SSL_set_mode(ssl,op) \\\n        SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL)\n# define SSL_get_mode(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL)\n# define SSL_set_mtu(ssl, mtu) \\\n        SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)\n# define DTLS_set_link_mtu(ssl, mtu) \\\n        SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL)\n# define DTLS_get_link_min_mtu(ssl) \\\n        SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL)\n\n# define SSL_get_secure_renegotiation_support(ssl) \\\n        SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)\n\n# ifndef OPENSSL_NO_HEARTBEATS\n#  define SSL_heartbeat(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL)\n# endif\n\n# define SSL_CTX_set_cert_flags(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)\n# define SSL_set_cert_flags(s,op) \\\n        SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)\n# define SSL_CTX_clear_cert_flags(ctx,op) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)\n# define SSL_clear_cert_flags(s,op) \\\n        SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)\n\nvoid SSL_CTX_set_msg_callback(SSL_CTX *ctx,\n                              void (*cb) (int write_p, int version,\n                                          int content_type, const void *buf,\n                                          size_t len, SSL *ssl, void *arg));\nvoid SSL_set_msg_callback(SSL *ssl,\n                          void (*cb) (int write_p, int version,\n                                      int content_type, const void *buf,\n                                      size_t len, SSL *ssl, void *arg));\n# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))\n# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg))\n\n# ifndef OPENSSL_NO_SRP\n\n#  ifndef OPENSSL_NO_SSL_INTERN\n\ntypedef struct srp_ctx_st {\n    /* param for all the callbacks */\n    void *SRP_cb_arg;\n    /* set client Hello login callback */\n    int (*TLS_ext_srp_username_callback) (SSL *, int *, void *);\n    /* set SRP N/g param callback for verification */\n    int (*SRP_verify_param_callback) (SSL *, void *);\n    /* set SRP client passwd callback */\n    char *(*SRP_give_srp_client_pwd_callback) (SSL *, void *);\n    char *login;\n    BIGNUM *N, *g, *s, *B, *A;\n    BIGNUM *a, *b, *v;\n    char *info;\n    int strength;\n    unsigned long srp_Mask;\n} SRP_CTX;\n\n#  endif\n\n/* see tls_srp.c */\nint SSL_SRP_CTX_init(SSL *s);\nint SSL_CTX_SRP_CTX_init(SSL_CTX *ctx);\nint SSL_SRP_CTX_free(SSL *ctx);\nint SSL_CTX_SRP_CTX_free(SSL_CTX *ctx);\nint SSL_srp_server_param_with_username(SSL *s, int *ad);\nint SRP_generate_server_master_secret(SSL *s, unsigned char *master_key);\nint SRP_Calc_A_param(SSL *s);\nint SRP_generate_client_master_secret(SSL *s, unsigned char *master_key);\n\n# endif\n\n# if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN32)\n#  define SSL_MAX_CERT_LIST_DEFAULT 1024*30\n                                          /* 30k max cert list :-) */\n# else\n#  define SSL_MAX_CERT_LIST_DEFAULT 1024*100\n                                           /* 100k max cert list :-) */\n# endif\n\n# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT      (1024*20)\n\n/*\n * This callback type is used inside SSL_CTX, SSL, and in the functions that\n * set them. It is used to override the generation of SSL/TLS session IDs in\n * a server. Return value should be zero on an error, non-zero to proceed.\n * Also, callbacks should themselves check if the id they generate is unique\n * otherwise the SSL handshake will fail with an error - callbacks can do\n * this using the 'ssl' value they're passed by;\n * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in\n * is set at the maximum size the session ID can be. In SSLv2 this is 16\n * bytes, whereas SSLv3/TLSv1 it is 32 bytes. The callback can alter this\n * length to be less if desired, but under SSLv2 session IDs are supposed to\n * be fixed at 16 bytes so the id will be padded after the callback returns\n * in this case. It is also an error for the callback to set the size to\n * zero.\n */\ntypedef int (*GEN_SESSION_CB) (const SSL *ssl, unsigned char *id,\n                               unsigned int *id_len);\n\ntypedef struct ssl_comp_st SSL_COMP;\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\nstruct ssl_comp_st {\n    int id;\n    const char *name;\n#  ifndef OPENSSL_NO_COMP\n    COMP_METHOD *method;\n#  else\n    char *method;\n#  endif\n};\n\nDECLARE_STACK_OF(SSL_COMP)\nDECLARE_LHASH_OF(SSL_SESSION);\n\nstruct ssl_ctx_st {\n    const SSL_METHOD *method;\n    STACK_OF(SSL_CIPHER) *cipher_list;\n    /* same as above but sorted for lookup */\n    STACK_OF(SSL_CIPHER) *cipher_list_by_id;\n    struct x509_store_st /* X509_STORE */ *cert_store;\n    LHASH_OF(SSL_SESSION) *sessions;\n    /*\n     * Most session-ids that will be cached, default is\n     * SSL_SESSION_CACHE_MAX_SIZE_DEFAULT. 0 is unlimited.\n     */\n    unsigned long session_cache_size;\n    struct ssl_session_st *session_cache_head;\n    struct ssl_session_st *session_cache_tail;\n    /*\n     * This can have one of 2 values, ored together, SSL_SESS_CACHE_CLIENT,\n     * SSL_SESS_CACHE_SERVER, Default is SSL_SESSION_CACHE_SERVER, which\n     * means only SSL_accept which cache SSL_SESSIONS.\n     */\n    int session_cache_mode;\n    /*\n     * If timeout is not 0, it is the default timeout value set when\n     * SSL_new() is called.  This has been put in to make life easier to set\n     * things up\n     */\n    long session_timeout;\n    /*\n     * If this callback is not null, it will be called each time a session id\n     * is added to the cache.  If this function returns 1, it means that the\n     * callback will do a SSL_SESSION_free() when it has finished using it.\n     * Otherwise, on 0, it means the callback has finished with it. If\n     * remove_session_cb is not null, it will be called when a session-id is\n     * removed from the cache.  After the call, OpenSSL will\n     * SSL_SESSION_free() it.\n     */\n    int (*new_session_cb) (struct ssl_st *ssl, SSL_SESSION *sess);\n    void (*remove_session_cb) (struct ssl_ctx_st *ctx, SSL_SESSION *sess);\n    SSL_SESSION *(*get_session_cb) (struct ssl_st *ssl,\n                                    unsigned char *data, int len, int *copy);\n    struct {\n        int sess_connect;       /* SSL new conn - started */\n        int sess_connect_renegotiate; /* SSL reneg - requested */\n        int sess_connect_good;  /* SSL new conne/reneg - finished */\n        int sess_accept;        /* SSL new accept - started */\n        int sess_accept_renegotiate; /* SSL reneg - requested */\n        int sess_accept_good;   /* SSL accept/reneg - finished */\n        int sess_miss;          /* session lookup misses */\n        int sess_timeout;       /* reuse attempt on timeouted session */\n        int sess_cache_full;    /* session removed due to full cache */\n        int sess_hit;           /* session reuse actually done */\n        int sess_cb_hit;        /* session-id that was not in the cache was\n                                 * passed back via the callback.  This\n                                 * indicates that the application is\n                                 * supplying session-id's from other\n                                 * processes - spooky :-) */\n    } stats;\n\n    int references;\n\n    /* if defined, these override the X509_verify_cert() calls */\n    int (*app_verify_callback) (X509_STORE_CTX *, void *);\n    void *app_verify_arg;\n    /*\n     * before OpenSSL 0.9.7, 'app_verify_arg' was ignored\n     * ('app_verify_callback' was called with just one argument)\n     */\n\n    /* Default password callback. */\n    pem_password_cb *default_passwd_callback;\n\n    /* Default password callback user data. */\n    void *default_passwd_callback_userdata;\n\n    /* get client cert callback */\n    int (*client_cert_cb) (SSL *ssl, X509 **x509, EVP_PKEY **pkey);\n\n    /* cookie generate callback */\n    int (*app_gen_cookie_cb) (SSL *ssl, unsigned char *cookie,\n                              unsigned int *cookie_len);\n\n    /* verify cookie callback */\n    int (*app_verify_cookie_cb) (SSL *ssl, unsigned char *cookie,\n                                 unsigned int cookie_len);\n\n    CRYPTO_EX_DATA ex_data;\n\n    const EVP_MD *rsa_md5;      /* For SSLv2 - name is 'ssl2-md5' */\n    const EVP_MD *md5;          /* For SSLv3/TLSv1 'ssl3-md5' */\n    const EVP_MD *sha1;         /* For SSLv3/TLSv1 'ssl3->sha1' */\n\n    STACK_OF(X509) *extra_certs;\n    STACK_OF(SSL_COMP) *comp_methods; /* stack of SSL_COMP, SSLv3/TLSv1 */\n\n    /* Default values used when no per-SSL value is defined follow */\n\n    /* used if SSL's info_callback is NULL */\n    void (*info_callback) (const SSL *ssl, int type, int val);\n\n    /* what we put in client cert requests */\n    STACK_OF(X509_NAME) *client_CA;\n\n    /*\n     * Default values to use in SSL structures follow (these are copied by\n     * SSL_new)\n     */\n\n    unsigned long options;\n    unsigned long mode;\n    long max_cert_list;\n\n    struct cert_st /* CERT */ *cert;\n    int read_ahead;\n\n    /* callback that allows applications to peek at protocol messages */\n    void (*msg_callback) (int write_p, int version, int content_type,\n                          const void *buf, size_t len, SSL *ssl, void *arg);\n    void *msg_callback_arg;\n\n    int verify_mode;\n    unsigned int sid_ctx_length;\n    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\n    /* called 'verify_callback' in the SSL */\n    int (*default_verify_callback) (int ok, X509_STORE_CTX *ctx);\n\n    /* Default generate session ID callback. */\n    GEN_SESSION_CB generate_session_id;\n\n    X509_VERIFY_PARAM *param;\n\n#  if 0\n    int purpose;                /* Purpose setting */\n    int trust;                  /* Trust setting */\n#  endif\n\n    int quiet_shutdown;\n\n    /*\n     * Maximum amount of data to send in one fragment. actual record size can\n     * be more than this due to padding and MAC overheads.\n     */\n    unsigned int max_send_fragment;\n\n#  ifndef OPENSSL_NO_ENGINE\n    /*\n     * Engine to pass requests for client certs to\n     */\n    ENGINE *client_cert_engine;\n#  endif\n\n#  ifndef OPENSSL_NO_TLSEXT\n    /* TLS extensions servername callback */\n    int (*tlsext_servername_callback) (SSL *, int *, void *);\n    void *tlsext_servername_arg;\n    /* RFC 4507 session ticket keys */\n    unsigned char tlsext_tick_key_name[16];\n    unsigned char tlsext_tick_hmac_key[16];\n    unsigned char tlsext_tick_aes_key[16];\n    /* Callback to support customisation of ticket key setting */\n    int (*tlsext_ticket_key_cb) (SSL *ssl,\n                                 unsigned char *name, unsigned char *iv,\n                                 EVP_CIPHER_CTX *ectx,\n                                 HMAC_CTX *hctx, int enc);\n\n    /* certificate status request info */\n    /* Callback for status request */\n    int (*tlsext_status_cb) (SSL *ssl, void *arg);\n    void *tlsext_status_arg;\n\n    /* draft-rescorla-tls-opaque-prf-input-00.txt information */\n    int (*tlsext_opaque_prf_input_callback) (SSL *, void *peerinput,\n                                             size_t len, void *arg);\n    void *tlsext_opaque_prf_input_callback_arg;\n#  endif\n\n#  ifndef OPENSSL_NO_PSK\n    char *psk_identity_hint;\n    unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,\n                                         char *identity,\n                                         unsigned int max_identity_len,\n                                         unsigned char *psk,\n                                         unsigned int max_psk_len);\n    unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,\n                                         unsigned char *psk,\n                                         unsigned int max_psk_len);\n#  endif\n\n#  ifndef OPENSSL_NO_BUF_FREELISTS\n#   define SSL_MAX_BUF_FREELIST_LEN_DEFAULT 32\n    unsigned int freelist_max_len;\n    struct ssl3_buf_freelist_st *wbuf_freelist;\n    struct ssl3_buf_freelist_st *rbuf_freelist;\n#  endif\n#  ifndef OPENSSL_NO_SRP\n    SRP_CTX srp_ctx;            /* ctx for SRP authentication */\n#  endif\n\n#  ifndef OPENSSL_NO_TLSEXT\n\n#   ifndef OPENSSL_NO_NEXTPROTONEG\n    /* Next protocol negotiation information */\n    /* (for experimental NPN extension). */\n\n    /*\n     * For a server, this contains a callback function by which the set of\n     * advertised protocols can be provided.\n     */\n    int (*next_protos_advertised_cb) (SSL *s, const unsigned char **buf,\n                                      unsigned int *len, void *arg);\n    void *next_protos_advertised_cb_arg;\n    /*\n     * For a client, this contains a callback function that selects the next\n     * protocol from the list provided by the server.\n     */\n    int (*next_proto_select_cb) (SSL *s, unsigned char **out,\n                                 unsigned char *outlen,\n                                 const unsigned char *in,\n                                 unsigned int inlen, void *arg);\n    void *next_proto_select_cb_arg;\n#   endif\n    /* SRTP profiles we are willing to do from RFC 5764 */\n    STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;\n\n    /*\n     * ALPN information (we are in the process of transitioning from NPN to\n     * ALPN.)\n     */\n\n    /*-\n     * For a server, this contains a callback function that allows the\n     * server to select the protocol for the connection.\n     *   out: on successful return, this must point to the raw protocol\n     *        name (without the length prefix).\n     *   outlen: on successful return, this contains the length of |*out|.\n     *   in: points to the client's list of supported protocols in\n     *       wire-format.\n     *   inlen: the length of |in|.\n     */\n    int (*alpn_select_cb) (SSL *s,\n                           const unsigned char **out,\n                           unsigned char *outlen,\n                           const unsigned char *in,\n                           unsigned int inlen, void *arg);\n    void *alpn_select_cb_arg;\n\n    /*\n     * For a client, this contains the list of supported protocols in wire\n     * format.\n     */\n    unsigned char *alpn_client_proto_list;\n    unsigned alpn_client_proto_list_len;\n\n#   ifndef OPENSSL_NO_EC\n    /* EC extension values inherited by SSL structure */\n    size_t tlsext_ecpointformatlist_length;\n    unsigned char *tlsext_ecpointformatlist;\n    size_t tlsext_ellipticcurvelist_length;\n    unsigned char *tlsext_ellipticcurvelist;\n#   endif                       /* OPENSSL_NO_EC */\n#  endif\n};\n\n# endif\n\n# define SSL_SESS_CACHE_OFF                      0x0000\n# define SSL_SESS_CACHE_CLIENT                   0x0001\n# define SSL_SESS_CACHE_SERVER                   0x0002\n# define SSL_SESS_CACHE_BOTH     (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER)\n# define SSL_SESS_CACHE_NO_AUTO_CLEAR            0x0080\n/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */\n# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP       0x0100\n# define SSL_SESS_CACHE_NO_INTERNAL_STORE        0x0200\n# define SSL_SESS_CACHE_NO_INTERNAL \\\n        (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE)\n\nLHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx);\n# define SSL_CTX_sess_number(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL)\n# define SSL_CTX_sess_connect(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL)\n# define SSL_CTX_sess_connect_good(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL)\n# define SSL_CTX_sess_connect_renegotiate(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL)\n# define SSL_CTX_sess_accept(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL)\n# define SSL_CTX_sess_accept_renegotiate(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL)\n# define SSL_CTX_sess_accept_good(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL)\n# define SSL_CTX_sess_hits(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL)\n# define SSL_CTX_sess_cb_hits(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL)\n# define SSL_CTX_sess_misses(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL)\n# define SSL_CTX_sess_timeouts(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL)\n# define SSL_CTX_sess_cache_full(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL)\n\nvoid SSL_CTX_sess_set_new_cb(SSL_CTX *ctx,\n                             int (*new_session_cb) (struct ssl_st *ssl,\n                                                    SSL_SESSION *sess));\nint (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,\n                                              SSL_SESSION *sess);\nvoid SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx,\n                                void (*remove_session_cb) (struct ssl_ctx_st\n                                                           *ctx,\n                                                           SSL_SESSION\n                                                           *sess));\nvoid (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx,\n                                                  SSL_SESSION *sess);\nvoid SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,\n                             SSL_SESSION *(*get_session_cb) (struct ssl_st\n                                                             *ssl,\n                                                             unsigned char\n                                                             *data, int len,\n                                                             int *copy));\nSSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl,\n                                                       unsigned char *Data,\n                                                       int len, int *copy);\nvoid SSL_CTX_set_info_callback(SSL_CTX *ctx,\n                               void (*cb) (const SSL *ssl, int type,\n                                           int val));\nvoid (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type,\n                                                 int val);\nvoid SSL_CTX_set_client_cert_cb(SSL_CTX *ctx,\n                                int (*client_cert_cb) (SSL *ssl, X509 **x509,\n                                                       EVP_PKEY **pkey));\nint (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509,\n                                                 EVP_PKEY **pkey);\n# ifndef OPENSSL_NO_ENGINE\nint SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e);\n# endif\nvoid SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx,\n                                    int (*app_gen_cookie_cb) (SSL *ssl,\n                                                              unsigned char\n                                                              *cookie,\n                                                              unsigned int\n                                                              *cookie_len));\nvoid SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx,\n                                  int (*app_verify_cookie_cb) (SSL *ssl,\n                                                               unsigned char\n                                                               *cookie,\n                                                               unsigned int\n                                                               cookie_len));\n# ifndef OPENSSL_NO_NEXTPROTONEG\nvoid SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s,\n                                           int (*cb) (SSL *ssl,\n                                                      const unsigned char\n                                                      **out,\n                                                      unsigned int *outlen,\n                                                      void *arg), void *arg);\nvoid SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,\n                                      int (*cb) (SSL *ssl,\n                                                 unsigned char **out,\n                                                 unsigned char *outlen,\n                                                 const unsigned char *in,\n                                                 unsigned int inlen,\n                                                 void *arg), void *arg);\nvoid SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,\n                                    unsigned *len);\n# endif\n\n# ifndef OPENSSL_NO_TLSEXT\nint SSL_select_next_proto(unsigned char **out, unsigned char *outlen,\n                          const unsigned char *in, unsigned int inlen,\n                          const unsigned char *client,\n                          unsigned int client_len);\n# endif\n\n# define OPENSSL_NPN_UNSUPPORTED 0\n# define OPENSSL_NPN_NEGOTIATED  1\n# define OPENSSL_NPN_NO_OVERLAP  2\n\nint SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,\n                            unsigned protos_len);\nint SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,\n                        unsigned protos_len);\nvoid SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,\n                                int (*cb) (SSL *ssl,\n                                           const unsigned char **out,\n                                           unsigned char *outlen,\n                                           const unsigned char *in,\n                                           unsigned int inlen,\n                                           void *arg), void *arg);\nvoid SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,\n                            unsigned *len);\n\n# ifndef OPENSSL_NO_PSK\n/*\n * the maximum length of the buffer given to callbacks containing the\n * resulting identity/psk\n */\n#  define PSK_MAX_IDENTITY_LEN 128\n#  define PSK_MAX_PSK_LEN 256\nvoid SSL_CTX_set_psk_client_callback(SSL_CTX *ctx,\n                                     unsigned int (*psk_client_callback) (SSL\n                                                                          *ssl,\n                                                                          const\n                                                                          char\n                                                                          *hint,\n                                                                          char\n                                                                          *identity,\n                                                                          unsigned\n                                                                          int\n                                                                          max_identity_len,\n                                                                          unsigned\n                                                                          char\n                                                                          *psk,\n                                                                          unsigned\n                                                                          int\n                                                                          max_psk_len));\nvoid SSL_set_psk_client_callback(SSL *ssl,\n                                 unsigned int (*psk_client_callback) (SSL\n                                                                      *ssl,\n                                                                      const\n                                                                      char\n                                                                      *hint,\n                                                                      char\n                                                                      *identity,\n                                                                      unsigned\n                                                                      int\n                                                                      max_identity_len,\n                                                                      unsigned\n                                                                      char\n                                                                      *psk,\n                                                                      unsigned\n                                                                      int\n                                                                      max_psk_len));\nvoid SSL_CTX_set_psk_server_callback(SSL_CTX *ctx,\n                                     unsigned int (*psk_server_callback) (SSL\n                                                                          *ssl,\n                                                                          const\n                                                                          char\n                                                                          *identity,\n                                                                          unsigned\n                                                                          char\n                                                                          *psk,\n                                                                          unsigned\n                                                                          int\n                                                                          max_psk_len));\nvoid SSL_set_psk_server_callback(SSL *ssl,\n                                 unsigned int (*psk_server_callback) (SSL\n                                                                      *ssl,\n                                                                      const\n                                                                      char\n                                                                      *identity,\n                                                                      unsigned\n                                                                      char\n                                                                      *psk,\n                                                                      unsigned\n                                                                      int\n                                                                      max_psk_len));\nint SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint);\nint SSL_use_psk_identity_hint(SSL *s, const char *identity_hint);\nconst char *SSL_get_psk_identity_hint(const SSL *s);\nconst char *SSL_get_psk_identity(const SSL *s);\n# endif\n\n# ifndef OPENSSL_NO_TLSEXT\n/* Register callbacks to handle custom TLS Extensions for client or server. */\n\nint SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,\n                                  custom_ext_add_cb add_cb,\n                                  custom_ext_free_cb free_cb,\n                                  void *add_arg,\n                                  custom_ext_parse_cb parse_cb,\n                                  void *parse_arg);\n\nint SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,\n                                  custom_ext_add_cb add_cb,\n                                  custom_ext_free_cb free_cb,\n                                  void *add_arg,\n                                  custom_ext_parse_cb parse_cb,\n                                  void *parse_arg);\n\nint SSL_extension_supported(unsigned int ext_type);\n\n# endif\n\n# define SSL_NOTHING     1\n# define SSL_WRITING     2\n# define SSL_READING     3\n# define SSL_X509_LOOKUP 4\n\n/* These will only be used when doing non-blocking IO */\n# define SSL_want_nothing(s)     (SSL_want(s) == SSL_NOTHING)\n# define SSL_want_read(s)        (SSL_want(s) == SSL_READING)\n# define SSL_want_write(s)       (SSL_want(s) == SSL_WRITING)\n# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP)\n\n# define SSL_MAC_FLAG_READ_MAC_STREAM 1\n# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\nstruct ssl_st {\n    /*\n     * protocol version (one of SSL2_VERSION, SSL3_VERSION, TLS1_VERSION,\n     * DTLS1_VERSION)\n     */\n    int version;\n    /* SSL_ST_CONNECT or SSL_ST_ACCEPT */\n    int type;\n    /* SSLv3 */\n    const SSL_METHOD *method;\n    /*\n     * There are 2 BIO's even though they are normally both the same.  This\n     * is so data can be read and written to different handlers\n     */\n#  ifndef OPENSSL_NO_BIO\n    /* used by SSL_read */\n    BIO *rbio;\n    /* used by SSL_write */\n    BIO *wbio;\n    /* used during session-id reuse to concatenate messages */\n    BIO *bbio;\n#  else\n    /* used by SSL_read */\n    char *rbio;\n    /* used by SSL_write */\n    char *wbio;\n    char *bbio;\n#  endif\n    /*\n     * This holds a variable that indicates what we were doing when a 0 or -1\n     * is returned.  This is needed for non-blocking IO so we know what\n     * request needs re-doing when in SSL_accept or SSL_connect\n     */\n    int rwstate;\n    /* true when we are actually in SSL_accept() or SSL_connect() */\n    int in_handshake;\n    int (*handshake_func) (SSL *);\n    /*\n     * Imagine that here's a boolean member \"init\" that is switched as soon\n     * as SSL_set_{accept/connect}_state is called for the first time, so\n     * that \"state\" and \"handshake_func\" are properly initialized.  But as\n     * handshake_func is == 0 until then, we use this test instead of an\n     * \"init\" member.\n     */\n    /* are we the server side? - mostly used by SSL_clear */\n    int server;\n    /*\n     * Generate a new session or reuse an old one.\n     * NB: For servers, the 'new' session may actually be a previously\n     * cached session or even the previous session unless\n     * SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION is set\n     */\n    int new_session;\n    /* don't send shutdown packets */\n    int quiet_shutdown;\n    /* we have shut things down, 0x01 sent, 0x02 for received */\n    int shutdown;\n    /* where we are */\n    int state;\n    /* where we are when reading */\n    int rstate;\n    BUF_MEM *init_buf;          /* buffer used during init */\n    void *init_msg;             /* pointer to handshake message body, set by\n                                 * ssl3_get_message() */\n    int init_num;               /* amount read/written */\n    int init_off;               /* amount read/written */\n    /* used internally to point at a raw packet */\n    unsigned char *packet;\n    unsigned int packet_length;\n    struct ssl2_state_st *s2;   /* SSLv2 variables */\n    struct ssl3_state_st *s3;   /* SSLv3 variables */\n    struct dtls1_state_st *d1;  /* DTLSv1 variables */\n    int read_ahead;             /* Read as many input bytes as possible (for\n                                 * non-blocking reads) */\n    /* callback that allows applications to peek at protocol messages */\n    void (*msg_callback) (int write_p, int version, int content_type,\n                          const void *buf, size_t len, SSL *ssl, void *arg);\n    void *msg_callback_arg;\n    int hit;                    /* reusing a previous session */\n    X509_VERIFY_PARAM *param;\n#  if 0\n    int purpose;                /* Purpose setting */\n    int trust;                  /* Trust setting */\n#  endif\n    /* crypto */\n    STACK_OF(SSL_CIPHER) *cipher_list;\n    STACK_OF(SSL_CIPHER) *cipher_list_by_id;\n    /*\n     * These are the ones being used, the ones in SSL_SESSION are the ones to\n     * be 'copied' into these ones\n     */\n    int mac_flags;\n    EVP_CIPHER_CTX *enc_read_ctx; /* cryptographic state */\n    EVP_MD_CTX *read_hash;      /* used for mac generation */\n#  ifndef OPENSSL_NO_COMP\n    COMP_CTX *expand;           /* uncompress */\n#  else\n    char *expand;\n#  endif\n    EVP_CIPHER_CTX *enc_write_ctx; /* cryptographic state */\n    EVP_MD_CTX *write_hash;     /* used for mac generation */\n#  ifndef OPENSSL_NO_COMP\n    COMP_CTX *compress;         /* compression */\n#  else\n    char *compress;\n#  endif\n    /* session info */\n    /* client cert? */\n    /* This is used to hold the server certificate used */\n    struct cert_st /* CERT */ *cert;\n    /*\n     * the session_id_context is used to ensure sessions are only reused in\n     * the appropriate context\n     */\n    unsigned int sid_ctx_length;\n    unsigned char sid_ctx[SSL_MAX_SID_CTX_LENGTH];\n    /* This can also be in the session once a session is established */\n    SSL_SESSION *session;\n    /* Default generate session ID callback. */\n    GEN_SESSION_CB generate_session_id;\n    /* Used in SSL2 and SSL3 */\n    /*\n     * 0 don't care about verify failure.\n     * 1 fail if verify fails\n     */\n    int verify_mode;\n    /* fail if callback returns 0 */\n    int (*verify_callback) (int ok, X509_STORE_CTX *ctx);\n    /* optional informational callback */\n    void (*info_callback) (const SSL *ssl, int type, int val);\n    /* error bytes to be written */\n    int error;\n    /* actual code */\n    int error_code;\n#  ifndef OPENSSL_NO_KRB5\n    /* Kerberos 5 context */\n    KSSL_CTX *kssl_ctx;\n#  endif                        /* OPENSSL_NO_KRB5 */\n#  ifndef OPENSSL_NO_PSK\n    unsigned int (*psk_client_callback) (SSL *ssl, const char *hint,\n                                         char *identity,\n                                         unsigned int max_identity_len,\n                                         unsigned char *psk,\n                                         unsigned int max_psk_len);\n    unsigned int (*psk_server_callback) (SSL *ssl, const char *identity,\n                                         unsigned char *psk,\n                                         unsigned int max_psk_len);\n#  endif\n    SSL_CTX *ctx;\n    /*\n     * set this flag to 1 and a sleep(1) is put into all SSL_read() and\n     * SSL_write() calls, good for nbio debuging :-)\n     */\n    int debug;\n    /* extra application data */\n    long verify_result;\n    CRYPTO_EX_DATA ex_data;\n    /* for server side, keep the list of CA_dn we can use */\n    STACK_OF(X509_NAME) *client_CA;\n    int references;\n    /* protocol behaviour */\n    unsigned long options;\n    /* API behaviour */\n    unsigned long mode;\n    long max_cert_list;\n    int first_packet;\n    /* what was passed, used for SSLv3/TLS rollback check */\n    int client_version;\n    unsigned int max_send_fragment;\n#  ifndef OPENSSL_NO_TLSEXT\n    /* TLS extension debug callback */\n    void (*tlsext_debug_cb) (SSL *s, int client_server, int type,\n                             unsigned char *data, int len, void *arg);\n    void *tlsext_debug_arg;\n    char *tlsext_hostname;\n    /*-\n     * no further mod of servername\n     * 0 : call the servername extension callback.\n     * 1 : prepare 2, allow last ack just after in server callback.\n     * 2 : don't call servername callback, no ack in server hello\n     */\n    int servername_done;\n    /* certificate status request info */\n    /* Status type or -1 if no status type */\n    int tlsext_status_type;\n    /* Expect OCSP CertificateStatus message */\n    int tlsext_status_expected;\n    /* OCSP status request only */\n    STACK_OF(OCSP_RESPID) *tlsext_ocsp_ids;\n    X509_EXTENSIONS *tlsext_ocsp_exts;\n    /* OCSP response received or to be sent */\n    unsigned char *tlsext_ocsp_resp;\n    int tlsext_ocsp_resplen;\n    /* RFC4507 session ticket expected to be received or sent */\n    int tlsext_ticket_expected;\n#   ifndef OPENSSL_NO_EC\n    size_t tlsext_ecpointformatlist_length;\n    /* our list */\n    unsigned char *tlsext_ecpointformatlist;\n    size_t tlsext_ellipticcurvelist_length;\n    /* our list */\n    unsigned char *tlsext_ellipticcurvelist;\n#   endif                       /* OPENSSL_NO_EC */\n    /*\n     * draft-rescorla-tls-opaque-prf-input-00.txt information to be used for\n     * handshakes\n     */\n    void *tlsext_opaque_prf_input;\n    size_t tlsext_opaque_prf_input_len;\n    /* TLS Session Ticket extension override */\n    TLS_SESSION_TICKET_EXT *tlsext_session_ticket;\n    /* TLS Session Ticket extension callback */\n    tls_session_ticket_ext_cb_fn tls_session_ticket_ext_cb;\n    void *tls_session_ticket_ext_cb_arg;\n    /* TLS pre-shared secret session resumption */\n    tls_session_secret_cb_fn tls_session_secret_cb;\n    void *tls_session_secret_cb_arg;\n    SSL_CTX *initial_ctx;       /* initial ctx, used to store sessions */\n#   ifndef OPENSSL_NO_NEXTPROTONEG\n    /*\n     * Next protocol negotiation. For the client, this is the protocol that\n     * we sent in NextProtocol and is set when handling ServerHello\n     * extensions. For a server, this is the client's selected_protocol from\n     * NextProtocol and is set when handling the NextProtocol message, before\n     * the Finished message.\n     */\n    unsigned char *next_proto_negotiated;\n    unsigned char next_proto_negotiated_len;\n#   endif\n#   define session_ctx initial_ctx\n    /* What we'll do */\n    STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;\n    /* What's been chosen */\n    SRTP_PROTECTION_PROFILE *srtp_profile;\n        /*-\n         * Is use of the Heartbeat extension negotiated?\n         * 0: disabled\n         * 1: enabled\n         * 2: enabled, but not allowed to send Requests\n         */\n    unsigned int tlsext_heartbeat;\n    /* Indicates if a HeartbeatRequest is in flight */\n    unsigned int tlsext_hb_pending;\n    /* HeartbeatRequest sequence number */\n    unsigned int tlsext_hb_seq;\n#  else\n#   define session_ctx ctx\n#  endif                        /* OPENSSL_NO_TLSEXT */\n    /*-\n     * 1 if we are renegotiating.\n     * 2 if we are a server and are inside a handshake\n     * (i.e. not just sending a HelloRequest)\n     */\n    int renegotiate;\n#  ifndef OPENSSL_NO_SRP\n    /* ctx for SRP authentication */\n    SRP_CTX srp_ctx;\n#  endif\n#  ifndef OPENSSL_NO_TLSEXT\n    /*\n     * For a client, this contains the list of supported protocols in wire\n     * format.\n     */\n    unsigned char *alpn_client_proto_list;\n    unsigned alpn_client_proto_list_len;\n#  endif                        /* OPENSSL_NO_TLSEXT */\n};\n\n# endif\n\n#ifdef __cplusplus\n}\n#endif\n\n# include <openssl/ssl2.h>\n# include <openssl/ssl3.h>\n# include <openssl/tls1.h>      /* This is mostly sslv3 with a few tweaks */\n# include <openssl/dtls1.h>     /* Datagram TLS */\n# include <openssl/ssl23.h>\n# include <openssl/srtp.h>      /* Support for the use_srtp extension */\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* compatibility */\n# define SSL_set_app_data(s,arg)         (SSL_set_ex_data(s,0,(char *)arg))\n# define SSL_get_app_data(s)             (SSL_get_ex_data(s,0))\n# define SSL_SESSION_set_app_data(s,a)   (SSL_SESSION_set_ex_data(s,0,(char *)a))\n# define SSL_SESSION_get_app_data(s)     (SSL_SESSION_get_ex_data(s,0))\n# define SSL_CTX_get_app_data(ctx)       (SSL_CTX_get_ex_data(ctx,0))\n# define SSL_CTX_set_app_data(ctx,arg)   (SSL_CTX_set_ex_data(ctx,0,(char *)arg))\n\n/*\n * The following are the possible values for ssl->state are are used to\n * indicate where we are up to in the SSL connection establishment. The\n * macros that follow are about the only things you should need to use and\n * even then, only when using non-blocking IO. It can also be useful to work\n * out where you were when the connection failed\n */\n\n# define SSL_ST_CONNECT                  0x1000\n# define SSL_ST_ACCEPT                   0x2000\n# define SSL_ST_MASK                     0x0FFF\n# define SSL_ST_INIT                     (SSL_ST_CONNECT|SSL_ST_ACCEPT)\n# define SSL_ST_BEFORE                   0x4000\n# define SSL_ST_OK                       0x03\n# define SSL_ST_RENEGOTIATE              (0x04|SSL_ST_INIT)\n\n# define SSL_CB_LOOP                     0x01\n# define SSL_CB_EXIT                     0x02\n# define SSL_CB_READ                     0x04\n# define SSL_CB_WRITE                    0x08\n# define SSL_CB_ALERT                    0x4000/* used in callback */\n# define SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)\n# define SSL_CB_WRITE_ALERT              (SSL_CB_ALERT|SSL_CB_WRITE)\n# define SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)\n# define SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)\n# define SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)\n# define SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)\n# define SSL_CB_HANDSHAKE_START          0x10\n# define SSL_CB_HANDSHAKE_DONE           0x20\n\n/* Is the SSL_connection established? */\n# define SSL_get_state(a)                SSL_state(a)\n# define SSL_is_init_finished(a)         (SSL_state(a) == SSL_ST_OK)\n# define SSL_in_init(a)                  (SSL_state(a)&SSL_ST_INIT)\n# define SSL_in_before(a)                (SSL_state(a)&SSL_ST_BEFORE)\n# define SSL_in_connect_init(a)          (SSL_state(a)&SSL_ST_CONNECT)\n# define SSL_in_accept_init(a)           (SSL_state(a)&SSL_ST_ACCEPT)\n\n/*\n * The following 2 states are kept in ssl->rstate when reads fail, you should\n * not need these\n */\n# define SSL_ST_READ_HEADER                      0xF0\n# define SSL_ST_READ_BODY                        0xF1\n# define SSL_ST_READ_DONE                        0xF2\n\n/*-\n * Obtain latest Finished message\n *   -- that we sent (SSL_get_finished)\n *   -- that we expected from peer (SSL_get_peer_finished).\n * Returns length (0 == no Finished so far), copies up to 'count' bytes.\n */\nsize_t SSL_get_finished(const SSL *s, void *buf, size_t count);\nsize_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count);\n\n/*\n * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options are\n * 'ored' with SSL_VERIFY_PEER if they are desired\n */\n# define SSL_VERIFY_NONE                 0x00\n# define SSL_VERIFY_PEER                 0x01\n# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02\n# define SSL_VERIFY_CLIENT_ONCE          0x04\n\n# define OpenSSL_add_ssl_algorithms()    SSL_library_init()\n# define SSLeay_add_ssl_algorithms()     SSL_library_init()\n\n/* this is for backward compatibility */\n# if 0                          /* NEW_SSLEAY */\n#  define SSL_CTX_set_default_verify(a,b,c) SSL_CTX_set_verify(a,b,c)\n#  define SSL_set_pref_cipher(c,n)        SSL_set_cipher_list(c,n)\n#  define SSL_add_session(a,b)            SSL_CTX_add_session((a),(b))\n#  define SSL_remove_session(a,b)         SSL_CTX_remove_session((a),(b))\n#  define SSL_flush_sessions(a,b)         SSL_CTX_flush_sessions((a),(b))\n# endif\n/* More backward compatibility */\n# define SSL_get_cipher(s) \\\n                SSL_CIPHER_get_name(SSL_get_current_cipher(s))\n# define SSL_get_cipher_bits(s,np) \\\n                SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np)\n# define SSL_get_cipher_version(s) \\\n                SSL_CIPHER_get_version(SSL_get_current_cipher(s))\n# define SSL_get_cipher_name(s) \\\n                SSL_CIPHER_get_name(SSL_get_current_cipher(s))\n# define SSL_get_time(a)         SSL_SESSION_get_time(a)\n# define SSL_set_time(a,b)       SSL_SESSION_set_time((a),(b))\n# define SSL_get_timeout(a)      SSL_SESSION_get_timeout(a)\n# define SSL_set_timeout(a,b)    SSL_SESSION_set_timeout((a),(b))\n\n# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id)\n# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id)\n\nDECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)\n# define SSL_AD_REASON_OFFSET            1000/* offset to get SSL_R_... value\n                                              * from SSL_AD_... */\n/* These alert types are for SSLv3 and TLSv1 */\n# define SSL_AD_CLOSE_NOTIFY             SSL3_AD_CLOSE_NOTIFY\n/* fatal */\n# define SSL_AD_UNEXPECTED_MESSAGE       SSL3_AD_UNEXPECTED_MESSAGE\n/* fatal */\n# define SSL_AD_BAD_RECORD_MAC           SSL3_AD_BAD_RECORD_MAC\n# define SSL_AD_DECRYPTION_FAILED        TLS1_AD_DECRYPTION_FAILED\n# define SSL_AD_RECORD_OVERFLOW          TLS1_AD_RECORD_OVERFLOW\n/* fatal */\n# define SSL_AD_DECOMPRESSION_FAILURE    SSL3_AD_DECOMPRESSION_FAILURE\n/* fatal */\n# define SSL_AD_HANDSHAKE_FAILURE        SSL3_AD_HANDSHAKE_FAILURE\n/* Not for TLS */\n# define SSL_AD_NO_CERTIFICATE           SSL3_AD_NO_CERTIFICATE\n# define SSL_AD_BAD_CERTIFICATE          SSL3_AD_BAD_CERTIFICATE\n# define SSL_AD_UNSUPPORTED_CERTIFICATE  SSL3_AD_UNSUPPORTED_CERTIFICATE\n# define SSL_AD_CERTIFICATE_REVOKED      SSL3_AD_CERTIFICATE_REVOKED\n# define SSL_AD_CERTIFICATE_EXPIRED      SSL3_AD_CERTIFICATE_EXPIRED\n# define SSL_AD_CERTIFICATE_UNKNOWN      SSL3_AD_CERTIFICATE_UNKNOWN\n/* fatal */\n# define SSL_AD_ILLEGAL_PARAMETER        SSL3_AD_ILLEGAL_PARAMETER\n/* fatal */\n# define SSL_AD_UNKNOWN_CA               TLS1_AD_UNKNOWN_CA\n/* fatal */\n# define SSL_AD_ACCESS_DENIED            TLS1_AD_ACCESS_DENIED\n/* fatal */\n# define SSL_AD_DECODE_ERROR             TLS1_AD_DECODE_ERROR\n# define SSL_AD_DECRYPT_ERROR            TLS1_AD_DECRYPT_ERROR\n/* fatal */\n# define SSL_AD_EXPORT_RESTRICTION       TLS1_AD_EXPORT_RESTRICTION\n/* fatal */\n# define SSL_AD_PROTOCOL_VERSION         TLS1_AD_PROTOCOL_VERSION\n/* fatal */\n# define SSL_AD_INSUFFICIENT_SECURITY    TLS1_AD_INSUFFICIENT_SECURITY\n/* fatal */\n# define SSL_AD_INTERNAL_ERROR           TLS1_AD_INTERNAL_ERROR\n# define SSL_AD_USER_CANCELLED           TLS1_AD_USER_CANCELLED\n# define SSL_AD_NO_RENEGOTIATION         TLS1_AD_NO_RENEGOTIATION\n# define SSL_AD_UNSUPPORTED_EXTENSION    TLS1_AD_UNSUPPORTED_EXTENSION\n# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE\n# define SSL_AD_UNRECOGNIZED_NAME        TLS1_AD_UNRECOGNIZED_NAME\n# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE\n# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE\n/* fatal */\n# define SSL_AD_UNKNOWN_PSK_IDENTITY     TLS1_AD_UNKNOWN_PSK_IDENTITY\n/* fatal */\n# define SSL_AD_INAPPROPRIATE_FALLBACK   TLS1_AD_INAPPROPRIATE_FALLBACK\n# define SSL_ERROR_NONE                  0\n# define SSL_ERROR_SSL                   1\n# define SSL_ERROR_WANT_READ             2\n# define SSL_ERROR_WANT_WRITE            3\n# define SSL_ERROR_WANT_X509_LOOKUP      4\n# define SSL_ERROR_SYSCALL               5/* look at error stack/return\n                                           * value/errno */\n# define SSL_ERROR_ZERO_RETURN           6\n# define SSL_ERROR_WANT_CONNECT          7\n# define SSL_ERROR_WANT_ACCEPT           8\n# define SSL_CTRL_NEED_TMP_RSA                   1\n# define SSL_CTRL_SET_TMP_RSA                    2\n# define SSL_CTRL_SET_TMP_DH                     3\n# define SSL_CTRL_SET_TMP_ECDH                   4\n# define SSL_CTRL_SET_TMP_RSA_CB                 5\n# define SSL_CTRL_SET_TMP_DH_CB                  6\n# define SSL_CTRL_SET_TMP_ECDH_CB                7\n# define SSL_CTRL_GET_SESSION_REUSED             8\n# define SSL_CTRL_GET_CLIENT_CERT_REQUEST        9\n# define SSL_CTRL_GET_NUM_RENEGOTIATIONS         10\n# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS       11\n# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS       12\n# define SSL_CTRL_GET_FLAGS                      13\n# define SSL_CTRL_EXTRA_CHAIN_CERT               14\n# define SSL_CTRL_SET_MSG_CALLBACK               15\n# define SSL_CTRL_SET_MSG_CALLBACK_ARG           16\n/* only applies to datagram connections */\n# define SSL_CTRL_SET_MTU                17\n/* Stats */\n# define SSL_CTRL_SESS_NUMBER                    20\n# define SSL_CTRL_SESS_CONNECT                   21\n# define SSL_CTRL_SESS_CONNECT_GOOD              22\n# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE       23\n# define SSL_CTRL_SESS_ACCEPT                    24\n# define SSL_CTRL_SESS_ACCEPT_GOOD               25\n# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE        26\n# define SSL_CTRL_SESS_HIT                       27\n# define SSL_CTRL_SESS_CB_HIT                    28\n# define SSL_CTRL_SESS_MISSES                    29\n# define SSL_CTRL_SESS_TIMEOUTS                  30\n# define SSL_CTRL_SESS_CACHE_FULL                31\n# define SSL_CTRL_OPTIONS                        32\n# define SSL_CTRL_MODE                           33\n# define SSL_CTRL_GET_READ_AHEAD                 40\n# define SSL_CTRL_SET_READ_AHEAD                 41\n# define SSL_CTRL_SET_SESS_CACHE_SIZE            42\n# define SSL_CTRL_GET_SESS_CACHE_SIZE            43\n# define SSL_CTRL_SET_SESS_CACHE_MODE            44\n# define SSL_CTRL_GET_SESS_CACHE_MODE            45\n# define SSL_CTRL_GET_MAX_CERT_LIST              50\n# define SSL_CTRL_SET_MAX_CERT_LIST              51\n# define SSL_CTRL_SET_MAX_SEND_FRAGMENT          52\n/* see tls1.h for macros based on these */\n# ifndef OPENSSL_NO_TLSEXT\n#  define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB       53\n#  define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG      54\n#  define SSL_CTRL_SET_TLSEXT_HOSTNAME            55\n#  define SSL_CTRL_SET_TLSEXT_DEBUG_CB            56\n#  define SSL_CTRL_SET_TLSEXT_DEBUG_ARG           57\n#  define SSL_CTRL_GET_TLSEXT_TICKET_KEYS         58\n#  define SSL_CTRL_SET_TLSEXT_TICKET_KEYS         59\n#  define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT    60\n#  define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61\n#  define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB       63\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG   64\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE     65\n#  define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS     66\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS     67\n#  define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS      68\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS      69\n#  define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP        70\n#  define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP        71\n#  define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB       72\n#  define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB    75\n#  define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB                76\n#  define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB             77\n#  define SSL_CTRL_SET_SRP_ARG            78\n#  define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME               79\n#  define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH               80\n#  define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD               81\n#  ifndef OPENSSL_NO_HEARTBEATS\n#   define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT                         85\n#   define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING          86\n#   define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS      87\n#  endif\n# endif                         /* OPENSSL_NO_TLSEXT */\n# define DTLS_CTRL_GET_TIMEOUT           73\n# define DTLS_CTRL_HANDLE_TIMEOUT        74\n# define DTLS_CTRL_LISTEN                        75\n# define SSL_CTRL_GET_RI_SUPPORT                 76\n# define SSL_CTRL_CLEAR_OPTIONS                  77\n# define SSL_CTRL_CLEAR_MODE                     78\n# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS          82\n# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS        83\n# define SSL_CTRL_CHAIN                          88\n# define SSL_CTRL_CHAIN_CERT                     89\n# define SSL_CTRL_GET_CURVES                     90\n# define SSL_CTRL_SET_CURVES                     91\n# define SSL_CTRL_SET_CURVES_LIST                92\n# define SSL_CTRL_GET_SHARED_CURVE               93\n# define SSL_CTRL_SET_ECDH_AUTO                  94\n# define SSL_CTRL_SET_SIGALGS                    97\n# define SSL_CTRL_SET_SIGALGS_LIST               98\n# define SSL_CTRL_CERT_FLAGS                     99\n# define SSL_CTRL_CLEAR_CERT_FLAGS               100\n# define SSL_CTRL_SET_CLIENT_SIGALGS             101\n# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST        102\n# define SSL_CTRL_GET_CLIENT_CERT_TYPES          103\n# define SSL_CTRL_SET_CLIENT_CERT_TYPES          104\n# define SSL_CTRL_BUILD_CERT_CHAIN               105\n# define SSL_CTRL_SET_VERIFY_CERT_STORE          106\n# define SSL_CTRL_SET_CHAIN_CERT_STORE           107\n# define SSL_CTRL_GET_PEER_SIGNATURE_NID         108\n# define SSL_CTRL_GET_SERVER_TMP_KEY             109\n# define SSL_CTRL_GET_RAW_CIPHERLIST             110\n# define SSL_CTRL_GET_EC_POINT_FORMATS           111\n# define SSL_CTRL_GET_CHAIN_CERTS                115\n# define SSL_CTRL_SELECT_CURRENT_CERT            116\n# define SSL_CTRL_SET_CURRENT_CERT               117\n# define SSL_CTRL_CHECK_PROTO_VERSION            119\n# define DTLS_CTRL_SET_LINK_MTU                  120\n# define DTLS_CTRL_GET_LINK_MIN_MTU              121\n# define SSL_CERT_SET_FIRST                      1\n# define SSL_CERT_SET_NEXT                       2\n# define SSL_CERT_SET_SERVER                     3\n# define DTLSv1_get_timeout(ssl, arg) \\\n        SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)\n# define DTLSv1_handle_timeout(ssl) \\\n        SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL)\n# define DTLSv1_listen(ssl, peer) \\\n        SSL_ctrl(ssl,DTLS_CTRL_LISTEN,0, (void *)peer)\n# define SSL_session_reused(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_GET_SESSION_REUSED,0,NULL)\n# define SSL_num_renegotiations(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL)\n# define SSL_clear_num_renegotiations(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL)\n# define SSL_total_renegotiations(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL)\n# define SSL_CTX_need_tmp_RSA(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_NEED_TMP_RSA,0,NULL)\n# define SSL_CTX_set_tmp_rsa(ctx,rsa) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)\n# define SSL_CTX_set_tmp_dh(ctx,dh) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)dh)\n# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)\n# define SSL_need_tmp_RSA(ssl) \\\n        SSL_ctrl(ssl,SSL_CTRL_NEED_TMP_RSA,0,NULL)\n# define SSL_set_tmp_rsa(ssl,rsa) \\\n        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_RSA,0,(char *)rsa)\n# define SSL_set_tmp_dh(ssl,dh) \\\n        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)dh)\n# define SSL_set_tmp_ecdh(ssl,ecdh) \\\n        SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)ecdh)\n# define SSL_CTX_add_extra_chain_cert(ctx,x509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)\n# define SSL_CTX_get_extra_chain_certs(ctx,px509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)\n# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)\n# define SSL_CTX_clear_extra_chain_certs(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)\n# define SSL_CTX_set0_chain(ctx,sk) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)\n# define SSL_CTX_set1_chain(ctx,sk) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)\n# define SSL_CTX_add0_chain_cert(ctx,x509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)\n# define SSL_CTX_add1_chain_cert(ctx,x509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)\n# define SSL_CTX_get0_chain_certs(ctx,px509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)\n# define SSL_CTX_clear_chain_certs(ctx) \\\n        SSL_CTX_set0_chain(ctx,NULL)\n# define SSL_CTX_build_cert_chain(ctx, flags) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)\n# define SSL_CTX_select_current_cert(ctx,x509) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)\n# define SSL_CTX_set_current_cert(ctx, op) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)\n# define SSL_CTX_set0_verify_cert_store(ctx,st) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)\n# define SSL_CTX_set1_verify_cert_store(ctx,st) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)\n# define SSL_CTX_set0_chain_cert_store(ctx,st) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)\n# define SSL_CTX_set1_chain_cert_store(ctx,st) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)\n# define SSL_set0_chain(ctx,sk) \\\n        SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)\n# define SSL_set1_chain(ctx,sk) \\\n        SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)\n# define SSL_add0_chain_cert(ctx,x509) \\\n        SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)\n# define SSL_add1_chain_cert(ctx,x509) \\\n        SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)\n# define SSL_get0_chain_certs(ctx,px509) \\\n        SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)\n# define SSL_clear_chain_certs(ctx) \\\n        SSL_set0_chain(ctx,NULL)\n# define SSL_build_cert_chain(s, flags) \\\n        SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)\n# define SSL_select_current_cert(ctx,x509) \\\n        SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)\n# define SSL_set_current_cert(ctx,op) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)\n# define SSL_set0_verify_cert_store(s,st) \\\n        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)\n# define SSL_set1_verify_cert_store(s,st) \\\n        SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)\n# define SSL_set0_chain_cert_store(s,st) \\\n        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)\n# define SSL_set1_chain_cert_store(s,st) \\\n        SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)\n# define SSL_get1_curves(ctx, s) \\\n        SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s)\n# define SSL_CTX_set1_curves(ctx, clist, clistlen) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)\n# define SSL_CTX_set1_curves_list(ctx, s) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)\n# define SSL_set1_curves(ctx, clist, clistlen) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)\n# define SSL_set1_curves_list(ctx, s) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)\n# define SSL_get_shared_curve(s, n) \\\n        SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL)\n# define SSL_CTX_set_ecdh_auto(ctx, onoff) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)\n# define SSL_set_ecdh_auto(s, onoff) \\\n        SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)\n# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist)\n# define SSL_CTX_set1_sigalgs_list(ctx, s) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)\n# define SSL_set1_sigalgs(ctx, slist, slistlen) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,clistlen,(int *)slist)\n# define SSL_set1_sigalgs_list(ctx, s) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)\n# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist)\n# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)\n# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist)\n# define SSL_set1_client_sigalgs_list(ctx, s) \\\n        SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)\n# define SSL_get0_certificate_types(s, clist) \\\n        SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist)\n# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)\n# define SSL_set1_client_certificate_types(s, clist, clistlen) \\\n        SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)\n# define SSL_get_peer_signature_nid(s, pn) \\\n        SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)\n# define SSL_get_server_tmp_key(s, pk) \\\n        SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk)\n# define SSL_get0_raw_cipherlist(s, plst) \\\n        SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst)\n# define SSL_get0_ec_point_formats(s, plst) \\\n        SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst)\n# ifndef OPENSSL_NO_BIO\nBIO_METHOD *BIO_f_ssl(void);\nBIO *BIO_new_ssl(SSL_CTX *ctx, int client);\nBIO *BIO_new_ssl_connect(SSL_CTX *ctx);\nBIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx);\nint BIO_ssl_copy_session_id(BIO *to, BIO *from);\nvoid BIO_ssl_shutdown(BIO *ssl_bio);\n\n# endif\n\nint SSL_CTX_set_cipher_list(SSL_CTX *, const char *str);\nSSL_CTX *SSL_CTX_new(const SSL_METHOD *meth);\nvoid SSL_CTX_free(SSL_CTX *);\nlong SSL_CTX_set_timeout(SSL_CTX *ctx, long t);\nlong SSL_CTX_get_timeout(const SSL_CTX *ctx);\nX509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *);\nvoid SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *);\nint SSL_want(const SSL *s);\nint SSL_clear(SSL *s);\n\nvoid SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm);\n\nconst SSL_CIPHER *SSL_get_current_cipher(const SSL *s);\nint SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits);\nchar *SSL_CIPHER_get_version(const SSL_CIPHER *c);\nconst char *SSL_CIPHER_get_name(const SSL_CIPHER *c);\nunsigned long SSL_CIPHER_get_id(const SSL_CIPHER *c);\n\nint SSL_get_fd(const SSL *s);\nint SSL_get_rfd(const SSL *s);\nint SSL_get_wfd(const SSL *s);\nconst char *SSL_get_cipher_list(const SSL *s, int n);\nchar *SSL_get_shared_ciphers(const SSL *s, char *buf, int len);\nint SSL_get_read_ahead(const SSL *s);\nint SSL_pending(const SSL *s);\n# ifndef OPENSSL_NO_SOCK\nint SSL_set_fd(SSL *s, int fd);\nint SSL_set_rfd(SSL *s, int fd);\nint SSL_set_wfd(SSL *s, int fd);\n# endif\n# ifndef OPENSSL_NO_BIO\nvoid SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio);\nBIO *SSL_get_rbio(const SSL *s);\nBIO *SSL_get_wbio(const SSL *s);\n# endif\nint SSL_set_cipher_list(SSL *s, const char *str);\nvoid SSL_set_read_ahead(SSL *s, int yes);\nint SSL_get_verify_mode(const SSL *s);\nint SSL_get_verify_depth(const SSL *s);\nint (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *);\nvoid SSL_set_verify(SSL *s, int mode,\n                    int (*callback) (int ok, X509_STORE_CTX *ctx));\nvoid SSL_set_verify_depth(SSL *s, int depth);\nvoid SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg);\n# ifndef OPENSSL_NO_RSA\nint SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);\n# endif\nint SSL_use_RSAPrivateKey_ASN1(SSL *ssl, unsigned char *d, long len);\nint SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey);\nint SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d,\n                            long len);\nint SSL_use_certificate(SSL *ssl, X509 *x);\nint SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);\n\n# ifndef OPENSSL_NO_TLSEXT\n/* Set serverinfo data for the current active cert. */\nint SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,\n                           size_t serverinfo_length);\n#  ifndef OPENSSL_NO_STDIO\nint SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);\n#  endif                        /* NO_STDIO */\n\n# endif\n\n# ifndef OPENSSL_NO_STDIO\nint SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);\nint SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);\nint SSL_use_certificate_file(SSL *ssl, const char *file, int type);\nint SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, int type);\nint SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);\nint SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);\n/* PEM type */\nint SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file);\nSTACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file);\nint SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,\n                                        const char *file);\n#  ifndef OPENSSL_SYS_VMS\n/* XXXXX: Better scheme needed! [was: #ifndef MAC_OS_pre_X] */\n#   ifndef OPENSSL_SYS_MACINTOSH_CLASSIC\nint SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs,\n                                       const char *dir);\n#   endif\n#  endif\n\n# endif\n\nvoid SSL_load_error_strings(void);\nconst char *SSL_state_string(const SSL *s);\nconst char *SSL_rstate_string(const SSL *s);\nconst char *SSL_state_string_long(const SSL *s);\nconst char *SSL_rstate_string_long(const SSL *s);\nlong SSL_SESSION_get_time(const SSL_SESSION *s);\nlong SSL_SESSION_set_time(SSL_SESSION *s, long t);\nlong SSL_SESSION_get_timeout(const SSL_SESSION *s);\nlong SSL_SESSION_set_timeout(SSL_SESSION *s, long t);\nvoid SSL_copy_session_id(SSL *to, const SSL *from);\nX509 *SSL_SESSION_get0_peer(SSL_SESSION *s);\nint SSL_SESSION_set1_id_context(SSL_SESSION *s, const unsigned char *sid_ctx,\n                                unsigned int sid_ctx_len);\n\nSSL_SESSION *SSL_SESSION_new(void);\nconst unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s,\n                                        unsigned int *len);\nunsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s);\n# ifndef OPENSSL_NO_FP_API\nint SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses);\n# endif\n# ifndef OPENSSL_NO_BIO\nint SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses);\n# endif\nvoid SSL_SESSION_free(SSL_SESSION *ses);\nint i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp);\nint SSL_set_session(SSL *to, SSL_SESSION *session);\nint SSL_CTX_add_session(SSL_CTX *s, SSL_SESSION *c);\nint SSL_CTX_remove_session(SSL_CTX *, SSL_SESSION *c);\nint SSL_CTX_set_generate_session_id(SSL_CTX *, GEN_SESSION_CB);\nint SSL_set_generate_session_id(SSL *, GEN_SESSION_CB);\nint SSL_has_matching_session_id(const SSL *ssl, const unsigned char *id,\n                                unsigned int id_len);\nSSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,\n                             long length);\n\n# ifdef HEADER_X509_H\nX509 *SSL_get_peer_certificate(const SSL *s);\n# endif\n\nSTACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s);\n\nint SSL_CTX_get_verify_mode(const SSL_CTX *ctx);\nint SSL_CTX_get_verify_depth(const SSL_CTX *ctx);\nint (*SSL_CTX_get_verify_callback(const SSL_CTX *ctx)) (int,\n                                                        X509_STORE_CTX *);\nvoid SSL_CTX_set_verify(SSL_CTX *ctx, int mode,\n                        int (*callback) (int, X509_STORE_CTX *));\nvoid SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);\nvoid SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,\n                                      int (*cb) (X509_STORE_CTX *, void *),\n                                      void *arg);\nvoid SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),\n                         void *arg);\n# ifndef OPENSSL_NO_RSA\nint SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);\n# endif\nint SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d,\n                                   long len);\nint SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey);\nint SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx,\n                                const unsigned char *d, long len);\nint SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x);\nint SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len,\n                                 const unsigned char *d);\n\nvoid SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb);\nvoid SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u);\n\nint SSL_CTX_check_private_key(const SSL_CTX *ctx);\nint SSL_check_private_key(const SSL *ctx);\n\nint SSL_CTX_set_session_id_context(SSL_CTX *ctx, const unsigned char *sid_ctx,\n                                   unsigned int sid_ctx_len);\n\nSSL *SSL_new(SSL_CTX *ctx);\nint SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx,\n                               unsigned int sid_ctx_len);\n\nint SSL_CTX_set_purpose(SSL_CTX *s, int purpose);\nint SSL_set_purpose(SSL *s, int purpose);\nint SSL_CTX_set_trust(SSL_CTX *s, int trust);\nint SSL_set_trust(SSL *s, int trust);\n\nint SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);\nint SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);\n\nX509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);\nX509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);\n\n# ifndef OPENSSL_NO_SRP\nint SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name);\nint SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password);\nint SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength);\nint SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx,\n                                        char *(*cb) (SSL *, void *));\nint SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx,\n                                          int (*cb) (SSL *, void *));\nint SSL_CTX_set_srp_username_callback(SSL_CTX *ctx,\n                                      int (*cb) (SSL *, int *, void *));\nint SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg);\n\nint SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g,\n                             BIGNUM *sa, BIGNUM *v, char *info);\nint SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass,\n                                const char *grp);\n\nBIGNUM *SSL_get_srp_g(SSL *s);\nBIGNUM *SSL_get_srp_N(SSL *s);\n\nchar *SSL_get_srp_username(SSL *s);\nchar *SSL_get_srp_userinfo(SSL *s);\n# endif\n\nvoid SSL_certs_clear(SSL *s);\nvoid SSL_free(SSL *ssl);\nint SSL_accept(SSL *ssl);\nint SSL_connect(SSL *ssl);\nint SSL_read(SSL *ssl, void *buf, int num);\nint SSL_peek(SSL *ssl, void *buf, int num);\nint SSL_write(SSL *ssl, const void *buf, int num);\nlong SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg);\nlong SSL_callback_ctrl(SSL *, int, void (*)(void));\nlong SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg);\nlong SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void));\n\nint SSL_get_error(const SSL *s, int ret_code);\nconst char *SSL_get_version(const SSL *s);\n\n/* This sets the 'default' SSL version that SSL_new() will create */\nint SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);\n\n# ifndef OPENSSL_NO_SSL2\nconst SSL_METHOD *SSLv2_method(void); /* SSLv2 */\nconst SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */\nconst SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */\n# endif\n\n# ifndef OPENSSL_NO_SSL3_METHOD\nconst SSL_METHOD *SSLv3_method(void); /* SSLv3 */\nconst SSL_METHOD *SSLv3_server_method(void); /* SSLv3 */\nconst SSL_METHOD *SSLv3_client_method(void); /* SSLv3 */\n# endif\n\nconst SSL_METHOD *SSLv23_method(void); /* Negotiate highest available SSL/TLS\n                                        * version */\nconst SSL_METHOD *SSLv23_server_method(void); /* Negotiate highest available\n                                               * SSL/TLS version */\nconst SSL_METHOD *SSLv23_client_method(void); /* Negotiate highest available\n                                               * SSL/TLS version */\n\nconst SSL_METHOD *TLSv1_method(void); /* TLSv1.0 */\nconst SSL_METHOD *TLSv1_server_method(void); /* TLSv1.0 */\nconst SSL_METHOD *TLSv1_client_method(void); /* TLSv1.0 */\n\nconst SSL_METHOD *TLSv1_1_method(void); /* TLSv1.1 */\nconst SSL_METHOD *TLSv1_1_server_method(void); /* TLSv1.1 */\nconst SSL_METHOD *TLSv1_1_client_method(void); /* TLSv1.1 */\n\nconst SSL_METHOD *TLSv1_2_method(void); /* TLSv1.2 */\nconst SSL_METHOD *TLSv1_2_server_method(void); /* TLSv1.2 */\nconst SSL_METHOD *TLSv1_2_client_method(void); /* TLSv1.2 */\n\nconst SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */\nconst SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */\nconst SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */\n\nconst SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */\nconst SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */\nconst SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */\n\nconst SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */\nconst SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */\nconst SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */\n\nSTACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);\n\nint SSL_do_handshake(SSL *s);\nint SSL_renegotiate(SSL *s);\nint SSL_renegotiate_abbreviated(SSL *s);\nint SSL_renegotiate_pending(SSL *s);\nint SSL_shutdown(SSL *s);\n\nconst SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);\nconst SSL_METHOD *SSL_get_ssl_method(SSL *s);\nint SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);\nconst char *SSL_alert_type_string_long(int value);\nconst char *SSL_alert_type_string(int value);\nconst char *SSL_alert_desc_string_long(int value);\nconst char *SSL_alert_desc_string(int value);\n\nvoid SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list);\nvoid SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list);\nSTACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s);\nSTACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s);\nint SSL_add_client_CA(SSL *ssl, X509 *x);\nint SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x);\n\nvoid SSL_set_connect_state(SSL *s);\nvoid SSL_set_accept_state(SSL *s);\n\nlong SSL_get_default_timeout(const SSL *s);\n\nint SSL_library_init(void);\n\nchar *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size);\nSTACK_OF(X509_NAME) *SSL_dup_CA_list(STACK_OF(X509_NAME) *sk);\n\nSSL *SSL_dup(SSL *ssl);\n\nX509 *SSL_get_certificate(const SSL *ssl);\n/*\n * EVP_PKEY\n */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);\n\nX509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);\nEVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);\n\nvoid SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);\nint SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);\nvoid SSL_set_quiet_shutdown(SSL *ssl, int mode);\nint SSL_get_quiet_shutdown(const SSL *ssl);\nvoid SSL_set_shutdown(SSL *ssl, int mode);\nint SSL_get_shutdown(const SSL *ssl);\nint SSL_version(const SSL *ssl);\nint SSL_CTX_set_default_verify_paths(SSL_CTX *ctx);\nint SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,\n                                  const char *CApath);\n# define SSL_get0_session SSL_get_session/* just peek at pointer */\nSSL_SESSION *SSL_get_session(const SSL *ssl);\nSSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */\nSSL_CTX *SSL_get_SSL_CTX(const SSL *ssl);\nSSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx);\nvoid SSL_set_info_callback(SSL *ssl,\n                           void (*cb) (const SSL *ssl, int type, int val));\nvoid (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type,\n                                               int val);\nint SSL_state(const SSL *ssl);\nvoid SSL_set_state(SSL *ssl, int state);\n\nvoid SSL_set_verify_result(SSL *ssl, long v);\nlong SSL_get_verify_result(const SSL *ssl);\n\nint SSL_set_ex_data(SSL *ssl, int idx, void *data);\nvoid *SSL_get_ex_data(const SSL *ssl, int idx);\nint SSL_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                         CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\n\nint SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data);\nvoid *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx);\nint SSL_SESSION_get_ex_new_index(long argl, void *argp,\n                                 CRYPTO_EX_new *new_func,\n                                 CRYPTO_EX_dup *dup_func,\n                                 CRYPTO_EX_free *free_func);\n\nint SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);\nvoid *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);\nint SSL_CTX_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                             CRYPTO_EX_dup *dup_func,\n                             CRYPTO_EX_free *free_func);\n\nint SSL_get_ex_data_X509_STORE_CTX_idx(void);\n\n# define SSL_CTX_sess_set_cache_size(ctx,t) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL)\n# define SSL_CTX_sess_get_cache_size(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL)\n# define SSL_CTX_set_session_cache_mode(ctx,m) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL)\n# define SSL_CTX_get_session_cache_mode(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL)\n\n# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx)\n# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m)\n# define SSL_CTX_get_read_ahead(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL)\n# define SSL_CTX_set_read_ahead(ctx,m) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL)\n# define SSL_CTX_get_max_cert_list(ctx) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)\n# define SSL_CTX_set_max_cert_list(ctx,m) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)\n# define SSL_get_max_cert_list(ssl) \\\n        SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL)\n# define SSL_set_max_cert_list(ssl,m) \\\n        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL)\n\n# define SSL_CTX_set_max_send_fragment(ctx,m) \\\n        SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)\n# define SSL_set_max_send_fragment(ssl,m) \\\n        SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL)\n\n     /* NB: the keylength is only applicable when is_export is true */\n# ifndef OPENSSL_NO_RSA\nvoid SSL_CTX_set_tmp_rsa_callback(SSL_CTX *ctx,\n                                  RSA *(*cb) (SSL *ssl, int is_export,\n                                              int keylength));\n\nvoid SSL_set_tmp_rsa_callback(SSL *ssl,\n                              RSA *(*cb) (SSL *ssl, int is_export,\n                                          int keylength));\n# endif\n# ifndef OPENSSL_NO_DH\nvoid SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx,\n                                 DH *(*dh) (SSL *ssl, int is_export,\n                                            int keylength));\nvoid SSL_set_tmp_dh_callback(SSL *ssl,\n                             DH *(*dh) (SSL *ssl, int is_export,\n                                        int keylength));\n# endif\n# ifndef OPENSSL_NO_ECDH\nvoid SSL_CTX_set_tmp_ecdh_callback(SSL_CTX *ctx,\n                                   EC_KEY *(*ecdh) (SSL *ssl, int is_export,\n                                                    int keylength));\nvoid SSL_set_tmp_ecdh_callback(SSL *ssl,\n                               EC_KEY *(*ecdh) (SSL *ssl, int is_export,\n                                                int keylength));\n# endif\n\n# ifndef OPENSSL_NO_COMP\nconst COMP_METHOD *SSL_get_current_compression(SSL *s);\nconst COMP_METHOD *SSL_get_current_expansion(SSL *s);\nconst char *SSL_COMP_get_name(const COMP_METHOD *comp);\nSTACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);\nSTACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)\n                                                      *meths);\nvoid SSL_COMP_free_compression_methods(void);\nint SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);\n# else\nconst void *SSL_get_current_compression(SSL *s);\nconst void *SSL_get_current_expansion(SSL *s);\nconst char *SSL_COMP_get_name(const void *comp);\nvoid *SSL_COMP_get_compression_methods(void);\nint SSL_COMP_add_compression_method(int id, void *cm);\n# endif\n\nconst SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);\n\n/* TLS extensions functions */\nint SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);\n\nint SSL_set_session_ticket_ext_cb(SSL *s, tls_session_ticket_ext_cb_fn cb,\n                                  void *arg);\n\n/* Pre-shared secret session resumption functions */\nint SSL_set_session_secret_cb(SSL *s,\n                              tls_session_secret_cb_fn tls_session_secret_cb,\n                              void *arg);\n\nvoid SSL_set_debug(SSL *s, int debug);\nint SSL_cache_hit(SSL *s);\nint SSL_is_server(SSL *s);\n\nSSL_CONF_CTX *SSL_CONF_CTX_new(void);\nint SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);\nvoid SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);\nunsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);\nunsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);\nint SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);\n\nvoid SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);\nvoid SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);\n\nint SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);\nint SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);\nint SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);\n\n# ifndef OPENSSL_NO_SSL_TRACE\nvoid SSL_trace(int write_p, int version, int content_type,\n               const void *buf, size_t len, SSL *ssl, void *arg);\nconst char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);\n# endif\n\n# ifndef OPENSSL_NO_UNIT_TEST\nconst struct openssl_ssl_test_functions *SSL_test_functions(void);\n# endif\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_SSL_strings(void);\n\n/* Error codes for the SSL functions. */\n\n/* Function codes. */\n# define SSL_F_CHECK_SUITEB_CIPHER_LIST                   331\n# define SSL_F_CLIENT_CERTIFICATE                         100\n# define SSL_F_CLIENT_FINISHED                            167\n# define SSL_F_CLIENT_HELLO                               101\n# define SSL_F_CLIENT_MASTER_KEY                          102\n# define SSL_F_D2I_SSL_SESSION                            103\n# define SSL_F_DO_DTLS1_WRITE                             245\n# define SSL_F_DO_SSL3_WRITE                              104\n# define SSL_F_DTLS1_ACCEPT                               246\n# define SSL_F_DTLS1_ADD_CERT_TO_BUF                      295\n# define SSL_F_DTLS1_BUFFER_RECORD                        247\n# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM                    316\n# define SSL_F_DTLS1_CLIENT_HELLO                         248\n# define SSL_F_DTLS1_CONNECT                              249\n# define SSL_F_DTLS1_ENC                                  250\n# define SSL_F_DTLS1_GET_HELLO_VERIFY                     251\n# define SSL_F_DTLS1_GET_MESSAGE                          252\n# define SSL_F_DTLS1_GET_MESSAGE_FRAGMENT                 253\n# define SSL_F_DTLS1_GET_RECORD                           254\n# define SSL_F_DTLS1_HANDLE_TIMEOUT                       297\n# define SSL_F_DTLS1_HEARTBEAT                            305\n# define SSL_F_DTLS1_OUTPUT_CERT_CHAIN                    255\n# define SSL_F_DTLS1_PREPROCESS_FRAGMENT                  288\n# define SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE           256\n# define SSL_F_DTLS1_PROCESS_RECORD                       257\n# define SSL_F_DTLS1_READ_BYTES                           258\n# define SSL_F_DTLS1_READ_FAILED                          259\n# define SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST             260\n# define SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE              261\n# define SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE             262\n# define SSL_F_DTLS1_SEND_CLIENT_VERIFY                   263\n# define SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST            264\n# define SSL_F_DTLS1_SEND_SERVER_CERTIFICATE              265\n# define SSL_F_DTLS1_SEND_SERVER_HELLO                    266\n# define SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE             267\n# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES                 268\n# define SSL_F_GET_CLIENT_FINISHED                        105\n# define SSL_F_GET_CLIENT_HELLO                           106\n# define SSL_F_GET_CLIENT_MASTER_KEY                      107\n# define SSL_F_GET_SERVER_FINISHED                        108\n# define SSL_F_GET_SERVER_HELLO                           109\n# define SSL_F_GET_SERVER_VERIFY                          110\n# define SSL_F_I2D_SSL_SESSION                            111\n# define SSL_F_READ_N                                     112\n# define SSL_F_REQUEST_CERTIFICATE                        113\n# define SSL_F_SERVER_FINISH                              239\n# define SSL_F_SERVER_HELLO                               114\n# define SSL_F_SERVER_VERIFY                              240\n# define SSL_F_SSL23_ACCEPT                               115\n# define SSL_F_SSL23_CLIENT_HELLO                         116\n# define SSL_F_SSL23_CONNECT                              117\n# define SSL_F_SSL23_GET_CLIENT_HELLO                     118\n# define SSL_F_SSL23_GET_SERVER_HELLO                     119\n# define SSL_F_SSL23_PEEK                                 237\n# define SSL_F_SSL23_READ                                 120\n# define SSL_F_SSL23_WRITE                                121\n# define SSL_F_SSL2_ACCEPT                                122\n# define SSL_F_SSL2_CONNECT                               123\n# define SSL_F_SSL2_ENC_INIT                              124\n# define SSL_F_SSL2_GENERATE_KEY_MATERIAL                 241\n# define SSL_F_SSL2_PEEK                                  234\n# define SSL_F_SSL2_READ                                  125\n# define SSL_F_SSL2_READ_INTERNAL                         236\n# define SSL_F_SSL2_SET_CERTIFICATE                       126\n# define SSL_F_SSL2_WRITE                                 127\n# define SSL_F_SSL3_ACCEPT                                128\n# define SSL_F_SSL3_ADD_CERT_TO_BUF                       296\n# define SSL_F_SSL3_CALLBACK_CTRL                         233\n# define SSL_F_SSL3_CHANGE_CIPHER_STATE                   129\n# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM              130\n# define SSL_F_SSL3_CHECK_CLIENT_HELLO                    304\n# define SSL_F_SSL3_CLIENT_HELLO                          131\n# define SSL_F_SSL3_CONNECT                               132\n# define SSL_F_SSL3_CTRL                                  213\n# define SSL_F_SSL3_CTX_CTRL                              133\n# define SSL_F_SSL3_DIGEST_CACHED_RECORDS                 293\n# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC                 292\n# define SSL_F_SSL3_ENC                                   134\n# define SSL_F_SSL3_GENERATE_KEY_BLOCK                    238\n# define SSL_F_SSL3_GET_CERTIFICATE_REQUEST               135\n# define SSL_F_SSL3_GET_CERT_STATUS                       289\n# define SSL_F_SSL3_GET_CERT_VERIFY                       136\n# define SSL_F_SSL3_GET_CLIENT_CERTIFICATE                137\n# define SSL_F_SSL3_GET_CLIENT_HELLO                      138\n# define SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE               139\n# define SSL_F_SSL3_GET_FINISHED                          140\n# define SSL_F_SSL3_GET_KEY_EXCHANGE                      141\n# define SSL_F_SSL3_GET_MESSAGE                           142\n# define SSL_F_SSL3_GET_NEW_SESSION_TICKET                283\n# define SSL_F_SSL3_GET_NEXT_PROTO                        306\n# define SSL_F_SSL3_GET_RECORD                            143\n# define SSL_F_SSL3_GET_SERVER_CERTIFICATE                144\n# define SSL_F_SSL3_GET_SERVER_DONE                       145\n# define SSL_F_SSL3_GET_SERVER_HELLO                      146\n# define SSL_F_SSL3_HANDSHAKE_MAC                         285\n# define SSL_F_SSL3_NEW_SESSION_TICKET                    287\n# define SSL_F_SSL3_OUTPUT_CERT_CHAIN                     147\n# define SSL_F_SSL3_PEEK                                  235\n# define SSL_F_SSL3_READ_BYTES                            148\n# define SSL_F_SSL3_READ_N                                149\n# define SSL_F_SSL3_SEND_CERTIFICATE_REQUEST              150\n# define SSL_F_SSL3_SEND_CLIENT_CERTIFICATE               151\n# define SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE              152\n# define SSL_F_SSL3_SEND_CLIENT_VERIFY                    153\n# define SSL_F_SSL3_SEND_SERVER_CERTIFICATE               154\n# define SSL_F_SSL3_SEND_SERVER_HELLO                     242\n# define SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE              155\n# define SSL_F_SSL3_SETUP_KEY_BLOCK                       157\n# define SSL_F_SSL3_SETUP_READ_BUFFER                     156\n# define SSL_F_SSL3_SETUP_WRITE_BUFFER                    291\n# define SSL_F_SSL3_WRITE_BYTES                           158\n# define SSL_F_SSL3_WRITE_PENDING                         159\n# define SSL_F_SSL_ADD_CERT_CHAIN                         318\n# define SSL_F_SSL_ADD_CERT_TO_BUF                        319\n# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT        298\n# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT                 277\n# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT           307\n# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK         215\n# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK        216\n# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT        299\n# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT                 278\n# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT           308\n# define SSL_F_SSL_BAD_METHOD                             160\n# define SSL_F_SSL_BUILD_CERT_CHAIN                       332\n# define SSL_F_SSL_BYTES_TO_CIPHER_LIST                   161\n# define SSL_F_SSL_CERT_DUP                               221\n# define SSL_F_SSL_CERT_INST                              222\n# define SSL_F_SSL_CERT_INSTANTIATE                       214\n# define SSL_F_SSL_CERT_NEW                               162\n# define SSL_F_SSL_CHECK_PRIVATE_KEY                      163\n# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT               280\n# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG            279\n# define SSL_F_SSL_CIPHER_PROCESS_RULESTR                 230\n# define SSL_F_SSL_CIPHER_STRENGTH_SORT                   231\n# define SSL_F_SSL_CLEAR                                  164\n# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD            165\n# define SSL_F_SSL_CONF_CMD                               334\n# define SSL_F_SSL_CREATE_CIPHER_LIST                     166\n# define SSL_F_SSL_CTRL                                   232\n# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY                  168\n# define SSL_F_SSL_CTX_MAKE_PROFILES                      309\n# define SSL_F_SSL_CTX_NEW                                169\n# define SSL_F_SSL_CTX_SET_CIPHER_LIST                    269\n# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE             290\n# define SSL_F_SSL_CTX_SET_PURPOSE                        226\n# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT             219\n# define SSL_F_SSL_CTX_SET_SSL_VERSION                    170\n# define SSL_F_SSL_CTX_SET_TRUST                          229\n# define SSL_F_SSL_CTX_USE_CERTIFICATE                    171\n# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1               172\n# define SSL_F_SSL_CTX_USE_CERTIFICATE_CHAIN_FILE         220\n# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE               173\n# define SSL_F_SSL_CTX_USE_PRIVATEKEY                     174\n# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1                175\n# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE                176\n# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT              272\n# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY                  177\n# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1             178\n# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE             179\n# define SSL_F_SSL_CTX_USE_SERVERINFO                     336\n# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE                337\n# define SSL_F_SSL_DO_HANDSHAKE                           180\n# define SSL_F_SSL_GET_NEW_SESSION                        181\n# define SSL_F_SSL_GET_PREV_SESSION                       217\n# define SSL_F_SSL_GET_SERVER_CERT_INDEX                  322\n# define SSL_F_SSL_GET_SERVER_SEND_CERT                   182\n# define SSL_F_SSL_GET_SERVER_SEND_PKEY                   317\n# define SSL_F_SSL_GET_SIGN_PKEY                          183\n# define SSL_F_SSL_INIT_WBIO_BUFFER                       184\n# define SSL_F_SSL_LOAD_CLIENT_CA_FILE                    185\n# define SSL_F_SSL_NEW                                    186\n# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT      300\n# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT               302\n# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT         310\n# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT      301\n# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT               303\n# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT         311\n# define SSL_F_SSL_PEEK                                   270\n# define SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT             281\n# define SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT             282\n# define SSL_F_SSL_READ                                   223\n# define SSL_F_SSL_RSA_PRIVATE_DECRYPT                    187\n# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT                     188\n# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT                320\n# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT                321\n# define SSL_F_SSL_SESSION_NEW                            189\n# define SSL_F_SSL_SESSION_PRINT_FP                       190\n# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT                312\n# define SSL_F_SSL_SESS_CERT_NEW                          225\n# define SSL_F_SSL_SET_CERT                               191\n# define SSL_F_SSL_SET_CIPHER_LIST                        271\n# define SSL_F_SSL_SET_FD                                 192\n# define SSL_F_SSL_SET_PKEY                               193\n# define SSL_F_SSL_SET_PURPOSE                            227\n# define SSL_F_SSL_SET_RFD                                194\n# define SSL_F_SSL_SET_SESSION                            195\n# define SSL_F_SSL_SET_SESSION_ID_CONTEXT                 218\n# define SSL_F_SSL_SET_SESSION_TICKET_EXT                 294\n# define SSL_F_SSL_SET_TRUST                              228\n# define SSL_F_SSL_SET_WFD                                196\n# define SSL_F_SSL_SHUTDOWN                               224\n# define SSL_F_SSL_SRP_CTX_INIT                           313\n# define SSL_F_SSL_UNDEFINED_CONST_FUNCTION               243\n# define SSL_F_SSL_UNDEFINED_FUNCTION                     197\n# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION                244\n# define SSL_F_SSL_USE_CERTIFICATE                        198\n# define SSL_F_SSL_USE_CERTIFICATE_ASN1                   199\n# define SSL_F_SSL_USE_CERTIFICATE_FILE                   200\n# define SSL_F_SSL_USE_PRIVATEKEY                         201\n# define SSL_F_SSL_USE_PRIVATEKEY_ASN1                    202\n# define SSL_F_SSL_USE_PRIVATEKEY_FILE                    203\n# define SSL_F_SSL_USE_PSK_IDENTITY_HINT                  273\n# define SSL_F_SSL_USE_RSAPRIVATEKEY                      204\n# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1                 205\n# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE                 206\n# define SSL_F_SSL_VERIFY_CERT_CHAIN                      207\n# define SSL_F_SSL_WRITE                                  208\n# define SSL_F_TLS12_CHECK_PEER_SIGALG                    333\n# define SSL_F_TLS1_CERT_VERIFY_MAC                       286\n# define SSL_F_TLS1_CHANGE_CIPHER_STATE                   209\n# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT              274\n# define SSL_F_TLS1_ENC                                   210\n# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL                314\n# define SSL_F_TLS1_GET_CURVELIST                         338\n# define SSL_F_TLS1_HEARTBEAT                             315\n# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT            275\n# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT            276\n# define SSL_F_TLS1_PRF                                   284\n# define SSL_F_TLS1_SETUP_KEY_BLOCK                       211\n# define SSL_F_TLS1_SET_SERVER_SIGALGS                    335\n# define SSL_F_WRITE_PENDING                              212\n\n/* Reason codes. */\n# define SSL_R_APP_DATA_IN_HANDSHAKE                      100\n# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272\n# define SSL_R_BAD_ALERT_RECORD                           101\n# define SSL_R_BAD_AUTHENTICATION_TYPE                    102\n# define SSL_R_BAD_CHANGE_CIPHER_SPEC                     103\n# define SSL_R_BAD_CHECKSUM                               104\n# define SSL_R_BAD_DATA                                   390\n# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK              106\n# define SSL_R_BAD_DECOMPRESSION                          107\n# define SSL_R_BAD_DH_G_LENGTH                            108\n# define SSL_R_BAD_DH_PUB_KEY_LENGTH                      109\n# define SSL_R_BAD_DH_P_LENGTH                            110\n# define SSL_R_BAD_DIGEST_LENGTH                          111\n# define SSL_R_BAD_DSA_SIGNATURE                          112\n# define SSL_R_BAD_ECC_CERT                               304\n# define SSL_R_BAD_ECDSA_SIGNATURE                        305\n# define SSL_R_BAD_ECPOINT                                306\n# define SSL_R_BAD_HANDSHAKE_LENGTH                       332\n# define SSL_R_BAD_HELLO_REQUEST                          105\n# define SSL_R_BAD_LENGTH                                 271\n# define SSL_R_BAD_MAC_DECODE                             113\n# define SSL_R_BAD_MAC_LENGTH                             333\n# define SSL_R_BAD_MESSAGE_TYPE                           114\n# define SSL_R_BAD_PACKET_LENGTH                          115\n# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER                116\n# define SSL_R_BAD_PSK_IDENTITY_HINT_LENGTH               316\n# define SSL_R_BAD_RESPONSE_ARGUMENT                      117\n# define SSL_R_BAD_RSA_DECRYPT                            118\n# define SSL_R_BAD_RSA_ENCRYPT                            119\n# define SSL_R_BAD_RSA_E_LENGTH                           120\n# define SSL_R_BAD_RSA_MODULUS_LENGTH                     121\n# define SSL_R_BAD_RSA_SIGNATURE                          122\n# define SSL_R_BAD_SIGNATURE                              123\n# define SSL_R_BAD_SRP_A_LENGTH                           347\n# define SSL_R_BAD_SRP_B_LENGTH                           348\n# define SSL_R_BAD_SRP_G_LENGTH                           349\n# define SSL_R_BAD_SRP_N_LENGTH                           350\n# define SSL_R_BAD_SRP_PARAMETERS                         371\n# define SSL_R_BAD_SRP_S_LENGTH                           351\n# define SSL_R_BAD_SRTP_MKI_VALUE                         352\n# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST           353\n# define SSL_R_BAD_SSL_FILETYPE                           124\n# define SSL_R_BAD_SSL_SESSION_ID_LENGTH                  125\n# define SSL_R_BAD_STATE                                  126\n# define SSL_R_BAD_VALUE                                  384\n# define SSL_R_BAD_WRITE_RETRY                            127\n# define SSL_R_BIO_NOT_SET                                128\n# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG                  129\n# define SSL_R_BN_LIB                                     130\n# define SSL_R_CA_DN_LENGTH_MISMATCH                      131\n# define SSL_R_CA_DN_TOO_LONG                             132\n# define SSL_R_CCS_RECEIVED_EARLY                         133\n# define SSL_R_CERTIFICATE_VERIFY_FAILED                  134\n# define SSL_R_CERT_CB_ERROR                              377\n# define SSL_R_CERT_LENGTH_MISMATCH                       135\n# define SSL_R_CHALLENGE_IS_DIFFERENT                     136\n# define SSL_R_CIPHER_CODE_WRONG_LENGTH                   137\n# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE                 138\n# define SSL_R_CIPHER_TABLE_SRC_ERROR                     139\n# define SSL_R_CLIENTHELLO_TLSEXT                         226\n# define SSL_R_COMPRESSED_LENGTH_TOO_LONG                 140\n# define SSL_R_COMPRESSION_DISABLED                       343\n# define SSL_R_COMPRESSION_FAILURE                        141\n# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE    307\n# define SSL_R_COMPRESSION_LIBRARY_ERROR                  142\n# define SSL_R_CONNECTION_ID_IS_DIFFERENT                 143\n# define SSL_R_CONNECTION_TYPE_NOT_SET                    144\n# define SSL_R_COOKIE_MISMATCH                            308\n# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED              145\n# define SSL_R_DATA_LENGTH_TOO_LONG                       146\n# define SSL_R_DECRYPTION_FAILED                          147\n# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC        281\n# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG            148\n# define SSL_R_DIGEST_CHECK_FAILED                        149\n# define SSL_R_DTLS_MESSAGE_TOO_BIG                       334\n# define SSL_R_DUPLICATE_COMPRESSION_ID                   309\n# define SSL_R_ECC_CERT_NOT_FOR_KEY_AGREEMENT             317\n# define SSL_R_ECC_CERT_NOT_FOR_SIGNING                   318\n# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE         322\n# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE        323\n# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE              374\n# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER               310\n# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST         354\n# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG                  150\n# define SSL_R_ERROR_GENERATING_TMP_RSA_KEY               282\n# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST              151\n# define SSL_R_EXCESSIVE_MESSAGE_SIZE                     152\n# define SSL_R_EXTRA_DATA_IN_MESSAGE                      153\n# define SSL_R_GOT_A_FIN_BEFORE_A_CCS                     154\n# define SSL_R_GOT_NEXT_PROTO_BEFORE_A_CCS                355\n# define SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION           356\n# define SSL_R_HTTPS_PROXY_REQUEST                        155\n# define SSL_R_HTTP_REQUEST                               156\n# define SSL_R_ILLEGAL_PADDING                            283\n# define SSL_R_ILLEGAL_SUITEB_DIGEST                      380\n# define SSL_R_INAPPROPRIATE_FALLBACK                     373\n# define SSL_R_INCONSISTENT_COMPRESSION                   340\n# define SSL_R_INVALID_CHALLENGE_LENGTH                   158\n# define SSL_R_INVALID_COMMAND                            280\n# define SSL_R_INVALID_COMPRESSION_ALGORITHM              341\n# define SSL_R_INVALID_NULL_CMD_NAME                      385\n# define SSL_R_INVALID_PURPOSE                            278\n# define SSL_R_INVALID_SERVERINFO_DATA                    388\n# define SSL_R_INVALID_SRP_USERNAME                       357\n# define SSL_R_INVALID_STATUS_RESPONSE                    328\n# define SSL_R_INVALID_TICKET_KEYS_LENGTH                 325\n# define SSL_R_INVALID_TRUST                              279\n# define SSL_R_KEY_ARG_TOO_LONG                           284\n# define SSL_R_KRB5                                       285\n# define SSL_R_KRB5_C_CC_PRINC                            286\n# define SSL_R_KRB5_C_GET_CRED                            287\n# define SSL_R_KRB5_C_INIT                                288\n# define SSL_R_KRB5_C_MK_REQ                              289\n# define SSL_R_KRB5_S_BAD_TICKET                          290\n# define SSL_R_KRB5_S_INIT                                291\n# define SSL_R_KRB5_S_RD_REQ                              292\n# define SSL_R_KRB5_S_TKT_EXPIRED                         293\n# define SSL_R_KRB5_S_TKT_NYV                             294\n# define SSL_R_KRB5_S_TKT_SKEW                            295\n# define SSL_R_LENGTH_MISMATCH                            159\n# define SSL_R_LENGTH_TOO_SHORT                           160\n# define SSL_R_LIBRARY_BUG                                274\n# define SSL_R_LIBRARY_HAS_NO_CIPHERS                     161\n# define SSL_R_MESSAGE_TOO_LONG                           296\n# define SSL_R_MISSING_DH_DSA_CERT                        162\n# define SSL_R_MISSING_DH_KEY                             163\n# define SSL_R_MISSING_DH_RSA_CERT                        164\n# define SSL_R_MISSING_DSA_SIGNING_CERT                   165\n# define SSL_R_MISSING_ECDH_CERT                          382\n# define SSL_R_MISSING_ECDSA_SIGNING_CERT                 381\n# define SSL_R_MISSING_EXPORT_TMP_DH_KEY                  166\n# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY                 167\n# define SSL_R_MISSING_RSA_CERTIFICATE                    168\n# define SSL_R_MISSING_RSA_ENCRYPTING_CERT                169\n# define SSL_R_MISSING_RSA_SIGNING_CERT                   170\n# define SSL_R_MISSING_SRP_PARAM                          358\n# define SSL_R_MISSING_TMP_DH_KEY                         171\n# define SSL_R_MISSING_TMP_ECDH_KEY                       311\n# define SSL_R_MISSING_TMP_RSA_KEY                        172\n# define SSL_R_MISSING_TMP_RSA_PKEY                       173\n# define SSL_R_MISSING_VERIFY_MESSAGE                     174\n# define SSL_R_MULTIPLE_SGC_RESTARTS                      346\n# define SSL_R_NON_SSLV2_INITIAL_PACKET                   175\n# define SSL_R_NO_CERTIFICATES_RETURNED                   176\n# define SSL_R_NO_CERTIFICATE_ASSIGNED                    177\n# define SSL_R_NO_CERTIFICATE_RETURNED                    178\n# define SSL_R_NO_CERTIFICATE_SET                         179\n# define SSL_R_NO_CERTIFICATE_SPECIFIED                   180\n# define SSL_R_NO_CIPHERS_AVAILABLE                       181\n# define SSL_R_NO_CIPHERS_PASSED                          182\n# define SSL_R_NO_CIPHERS_SPECIFIED                       183\n# define SSL_R_NO_CIPHER_LIST                             184\n# define SSL_R_NO_CIPHER_MATCH                            185\n# define SSL_R_NO_CLIENT_CERT_METHOD                      331\n# define SSL_R_NO_CLIENT_CERT_RECEIVED                    186\n# define SSL_R_NO_COMPRESSION_SPECIFIED                   187\n# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER           330\n# define SSL_R_NO_METHOD_SPECIFIED                        188\n# define SSL_R_NO_PEM_EXTENSIONS                          389\n# define SSL_R_NO_PRIVATEKEY                              189\n# define SSL_R_NO_PRIVATE_KEY_ASSIGNED                    190\n# define SSL_R_NO_PROTOCOLS_AVAILABLE                     191\n# define SSL_R_NO_PUBLICKEY                               192\n# define SSL_R_NO_RENEGOTIATION                           339\n# define SSL_R_NO_REQUIRED_DIGEST                         324\n# define SSL_R_NO_SHARED_CIPHER                           193\n# define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS              376\n# define SSL_R_NO_SRTP_PROFILES                           359\n# define SSL_R_NO_VERIFY_CALLBACK                         194\n# define SSL_R_NULL_SSL_CTX                               195\n# define SSL_R_NULL_SSL_METHOD_PASSED                     196\n# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED            197\n# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344\n# define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE       387\n# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE        379\n# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE              297\n# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG                  327\n# define SSL_R_PACKET_LENGTH_TOO_LONG                     198\n# define SSL_R_PARSE_TLSEXT                               227\n# define SSL_R_PATH_TOO_LONG                              270\n# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE          199\n# define SSL_R_PEER_ERROR                                 200\n# define SSL_R_PEER_ERROR_CERTIFICATE                     201\n# define SSL_R_PEER_ERROR_NO_CERTIFICATE                  202\n# define SSL_R_PEER_ERROR_NO_CIPHER                       203\n# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE    204\n# define SSL_R_PEM_NAME_BAD_PREFIX                        391\n# define SSL_R_PEM_NAME_TOO_SHORT                         392\n# define SSL_R_PRE_MAC_LENGTH_TOO_LONG                    205\n# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS          206\n# define SSL_R_PROTOCOL_IS_SHUTDOWN                       207\n# define SSL_R_PSK_IDENTITY_NOT_FOUND                     223\n# define SSL_R_PSK_NO_CLIENT_CB                           224\n# define SSL_R_PSK_NO_SERVER_CB                           225\n# define SSL_R_PUBLIC_KEY_ENCRYPT_ERROR                   208\n# define SSL_R_PUBLIC_KEY_IS_NOT_RSA                      209\n# define SSL_R_PUBLIC_KEY_NOT_RSA                         210\n# define SSL_R_READ_BIO_NOT_SET                           211\n# define SSL_R_READ_TIMEOUT_EXPIRED                       312\n# define SSL_R_READ_WRONG_PACKET_TYPE                     212\n# define SSL_R_RECORD_LENGTH_MISMATCH                     213\n# define SSL_R_RECORD_TOO_LARGE                           214\n# define SSL_R_RECORD_TOO_SMALL                           298\n# define SSL_R_RENEGOTIATE_EXT_TOO_LONG                   335\n# define SSL_R_RENEGOTIATION_ENCODING_ERR                 336\n# define SSL_R_RENEGOTIATION_MISMATCH                     337\n# define SSL_R_REQUIRED_CIPHER_MISSING                    215\n# define SSL_R_REQUIRED_COMPRESSSION_ALGORITHM_MISSING    342\n# define SSL_R_REUSE_CERT_LENGTH_NOT_ZERO                 216\n# define SSL_R_REUSE_CERT_TYPE_NOT_ZERO                   217\n# define SSL_R_REUSE_CIPHER_LIST_NOT_ZERO                 218\n# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING           345\n# define SSL_R_SERVERHELLO_TLSEXT                         275\n# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED           277\n# define SSL_R_SHORT_READ                                 219\n# define SSL_R_SIGNATURE_ALGORITHMS_ERROR                 360\n# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE      220\n# define SSL_R_SRP_A_CALC                                 361\n# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES           362\n# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG      363\n# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE            364\n# define SSL_R_SSL23_DOING_SESSION_ID_REUSE               221\n# define SSL_R_SSL2_CONNECTION_ID_TOO_LONG                299\n# define SSL_R_SSL3_EXT_INVALID_ECPOINTFORMAT             321\n# define SSL_R_SSL3_EXT_INVALID_SERVERNAME                319\n# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE           320\n# define SSL_R_SSL3_SESSION_ID_TOO_LONG                   300\n# define SSL_R_SSL3_SESSION_ID_TOO_SHORT                  222\n# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE                1042\n# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC                 1020\n# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED            1045\n# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED            1044\n# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN            1046\n# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE          1030\n# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE              1040\n# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER              1047\n# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE                 1041\n# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE             1010\n# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE        1043\n# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION         228\n# define SSL_R_SSL_HANDSHAKE_FAILURE                      229\n# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS                 230\n# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED             301\n# define SSL_R_SSL_SESSION_ID_CONFLICT                    302\n# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG            273\n# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH              303\n# define SSL_R_SSL_SESSION_ID_IS_DIFFERENT                231\n# define SSL_R_TLSV1_ALERT_ACCESS_DENIED                  1049\n# define SSL_R_TLSV1_ALERT_DECODE_ERROR                   1050\n# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED              1021\n# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR                  1051\n# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION             1060\n# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK         1086\n# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY          1071\n# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR                 1080\n# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION               1100\n# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION               1070\n# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW                1022\n# define SSL_R_TLSV1_ALERT_UNKNOWN_CA                     1048\n# define SSL_R_TLSV1_ALERT_USER_CANCELLED                 1090\n# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE           1114\n# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE      1113\n# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE             1111\n# define SSL_R_TLSV1_UNRECOGNIZED_NAME                    1112\n# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION                1110\n# define SSL_R_TLS_CLIENT_CERT_REQ_WITH_ANON_CIPHER       232\n# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT           365\n# define SSL_R_TLS_HEARTBEAT_PENDING                      366\n# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL                 367\n# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST             157\n# define SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST 233\n# define SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG    234\n# define SSL_R_TRIED_TO_USE_UNSUPPORTED_CIPHER            235\n# define SSL_R_UNABLE_TO_DECODE_DH_CERTS                  236\n# define SSL_R_UNABLE_TO_DECODE_ECDH_CERTS                313\n# define SSL_R_UNABLE_TO_EXTRACT_PUBLIC_KEY               237\n# define SSL_R_UNABLE_TO_FIND_DH_PARAMETERS               238\n# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS             314\n# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS       239\n# define SSL_R_UNABLE_TO_FIND_SSL_METHOD                  240\n# define SSL_R_UNABLE_TO_LOAD_SSL2_MD5_ROUTINES           241\n# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES           242\n# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES          243\n# define SSL_R_UNEXPECTED_MESSAGE                         244\n# define SSL_R_UNEXPECTED_RECORD                          245\n# define SSL_R_UNINITIALIZED                              276\n# define SSL_R_UNKNOWN_ALERT_TYPE                         246\n# define SSL_R_UNKNOWN_CERTIFICATE_TYPE                   247\n# define SSL_R_UNKNOWN_CIPHER_RETURNED                    248\n# define SSL_R_UNKNOWN_CIPHER_TYPE                        249\n# define SSL_R_UNKNOWN_CMD_NAME                           386\n# define SSL_R_UNKNOWN_DIGEST                             368\n# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE                  250\n# define SSL_R_UNKNOWN_PKEY_TYPE                          251\n# define SSL_R_UNKNOWN_PROTOCOL                           252\n# define SSL_R_UNKNOWN_REMOTE_ERROR_TYPE                  253\n# define SSL_R_UNKNOWN_SSL_VERSION                        254\n# define SSL_R_UNKNOWN_STATE                              255\n# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED       338\n# define SSL_R_UNSUPPORTED_CIPHER                         256\n# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM          257\n# define SSL_R_UNSUPPORTED_DIGEST_TYPE                    326\n# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE                 315\n# define SSL_R_UNSUPPORTED_PROTOCOL                       258\n# define SSL_R_UNSUPPORTED_SSL_VERSION                    259\n# define SSL_R_UNSUPPORTED_STATUS_TYPE                    329\n# define SSL_R_USE_SRTP_NOT_NEGOTIATED                    369\n# define SSL_R_WRITE_BIO_NOT_SET                          260\n# define SSL_R_WRONG_CERTIFICATE_TYPE                     383\n# define SSL_R_WRONG_CIPHER_RETURNED                      261\n# define SSL_R_WRONG_CURVE                                378\n# define SSL_R_WRONG_MESSAGE_TYPE                         262\n# define SSL_R_WRONG_NUMBER_OF_KEY_BITS                   263\n# define SSL_R_WRONG_SIGNATURE_LENGTH                     264\n# define SSL_R_WRONG_SIGNATURE_SIZE                       265\n# define SSL_R_WRONG_SIGNATURE_TYPE                       370\n# define SSL_R_WRONG_SSL_VERSION                          266\n# define SSL_R_WRONG_VERSION_NUMBER                       267\n# define SSL_R_X509_LIB                                   268\n# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS           269\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ssl2.h",
    "content": "/* ssl/ssl2.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_SSL2_H\n# define HEADER_SSL2_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Protocol Version Codes */\n# define SSL2_VERSION            0x0002\n# define SSL2_VERSION_MAJOR      0x00\n# define SSL2_VERSION_MINOR      0x02\n/* #define SSL2_CLIENT_VERSION  0x0002 */\n/* #define SSL2_SERVER_VERSION  0x0002 */\n\n/* Protocol Message Codes */\n# define SSL2_MT_ERROR                   0\n# define SSL2_MT_CLIENT_HELLO            1\n# define SSL2_MT_CLIENT_MASTER_KEY       2\n# define SSL2_MT_CLIENT_FINISHED         3\n# define SSL2_MT_SERVER_HELLO            4\n# define SSL2_MT_SERVER_VERIFY           5\n# define SSL2_MT_SERVER_FINISHED         6\n# define SSL2_MT_REQUEST_CERTIFICATE     7\n# define SSL2_MT_CLIENT_CERTIFICATE      8\n\n/* Error Message Codes */\n# define SSL2_PE_UNDEFINED_ERROR         0x0000\n# define SSL2_PE_NO_CIPHER               0x0001\n# define SSL2_PE_NO_CERTIFICATE          0x0002\n# define SSL2_PE_BAD_CERTIFICATE         0x0004\n# define SSL2_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006\n\n/* Cipher Kind Values */\n# define SSL2_CK_NULL_WITH_MD5                   0x02000000/* v3 */\n# define SSL2_CK_RC4_128_WITH_MD5                0x02010080\n# define SSL2_CK_RC4_128_EXPORT40_WITH_MD5       0x02020080\n# define SSL2_CK_RC2_128_CBC_WITH_MD5            0x02030080\n# define SSL2_CK_RC2_128_CBC_EXPORT40_WITH_MD5   0x02040080\n# define SSL2_CK_IDEA_128_CBC_WITH_MD5           0x02050080\n# define SSL2_CK_DES_64_CBC_WITH_MD5             0x02060040\n# define SSL2_CK_DES_64_CBC_WITH_SHA             0x02060140/* v3 */\n# define SSL2_CK_DES_192_EDE3_CBC_WITH_MD5       0x020700c0\n# define SSL2_CK_DES_192_EDE3_CBC_WITH_SHA       0x020701c0/* v3 */\n# define SSL2_CK_RC4_64_WITH_MD5                 0x02080080/* MS hack */\n\n# define SSL2_CK_DES_64_CFB64_WITH_MD5_1         0x02ff0800/* SSLeay */\n# define SSL2_CK_NULL                            0x02ff0810/* SSLeay */\n\n# define SSL2_TXT_DES_64_CFB64_WITH_MD5_1        \"DES-CFB-M1\"\n# define SSL2_TXT_NULL_WITH_MD5                  \"NULL-MD5\"\n# define SSL2_TXT_RC4_128_WITH_MD5               \"RC4-MD5\"\n# define SSL2_TXT_RC4_128_EXPORT40_WITH_MD5      \"EXP-RC4-MD5\"\n# define SSL2_TXT_RC2_128_CBC_WITH_MD5           \"RC2-CBC-MD5\"\n# define SSL2_TXT_RC2_128_CBC_EXPORT40_WITH_MD5  \"EXP-RC2-CBC-MD5\"\n# define SSL2_TXT_IDEA_128_CBC_WITH_MD5          \"IDEA-CBC-MD5\"\n# define SSL2_TXT_DES_64_CBC_WITH_MD5            \"DES-CBC-MD5\"\n# define SSL2_TXT_DES_64_CBC_WITH_SHA            \"DES-CBC-SHA\"\n# define SSL2_TXT_DES_192_EDE3_CBC_WITH_MD5      \"DES-CBC3-MD5\"\n# define SSL2_TXT_DES_192_EDE3_CBC_WITH_SHA      \"DES-CBC3-SHA\"\n# define SSL2_TXT_RC4_64_WITH_MD5                \"RC4-64-MD5\"\n\n# define SSL2_TXT_NULL                           \"NULL\"\n\n/* Flags for the SSL_CIPHER.algorithm2 field */\n# define SSL2_CF_5_BYTE_ENC                      0x01\n# define SSL2_CF_8_BYTE_ENC                      0x02\n\n/* Certificate Type Codes */\n# define SSL2_CT_X509_CERTIFICATE                0x01\n\n/* Authentication Type Code */\n# define SSL2_AT_MD5_WITH_RSA_ENCRYPTION         0x01\n\n# define SSL2_MAX_SSL_SESSION_ID_LENGTH          32\n\n/* Upper/Lower Bounds */\n# define SSL2_MAX_MASTER_KEY_LENGTH_IN_BITS      256\n# ifdef OPENSSL_SYS_MPE\n#  define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER    29998u\n# else\n#  define SSL2_MAX_RECORD_LENGTH_2_BYTE_HEADER    32767u\n                                                       /* 2^15-1 */\n# endif\n# define SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER    16383/* 2^14-1 */\n\n# define SSL2_CHALLENGE_LENGTH   16\n/*\n * #define SSL2_CHALLENGE_LENGTH 32\n */\n# define SSL2_MIN_CHALLENGE_LENGTH       16\n# define SSL2_MAX_CHALLENGE_LENGTH       32\n# define SSL2_CONNECTION_ID_LENGTH       16\n# define SSL2_MAX_CONNECTION_ID_LENGTH   16\n# define SSL2_SSL_SESSION_ID_LENGTH      16\n# define SSL2_MAX_CERT_CHALLENGE_LENGTH  32\n# define SSL2_MIN_CERT_CHALLENGE_LENGTH  16\n# define SSL2_MAX_KEY_MATERIAL_LENGTH    24\n\n# ifndef HEADER_SSL_LOCL_H\n#  define  CERT           char\n# endif\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\ntypedef struct ssl2_state_st {\n    int three_byte_header;\n    int clear_text;             /* clear text */\n    int escape;                 /* not used in SSLv2 */\n    int ssl2_rollback;          /* used if SSLv23 rolled back to SSLv2 */\n    /*\n     * non-blocking io info, used to make sure the same args were passwd\n     */\n    unsigned int wnum;          /* number of bytes sent so far */\n    int wpend_tot;\n    const unsigned char *wpend_buf;\n    int wpend_off;              /* offset to data to write */\n    int wpend_len;              /* number of bytes passwd to write */\n    int wpend_ret;              /* number of bytes to return to caller */\n    /* buffer raw data */\n    int rbuf_left;\n    int rbuf_offs;\n    unsigned char *rbuf;\n    unsigned char *wbuf;\n    unsigned char *write_ptr;   /* used to point to the start due to 2/3 byte\n                                 * header. */\n    unsigned int padding;\n    unsigned int rlength;       /* passed to ssl2_enc */\n    int ract_data_length;       /* Set when things are encrypted. */\n    unsigned int wlength;       /* passed to ssl2_enc */\n    int wact_data_length;       /* Set when things are decrypted. */\n    unsigned char *ract_data;\n    unsigned char *wact_data;\n    unsigned char *mac_data;\n    unsigned char *read_key;\n    unsigned char *write_key;\n    /* Stuff specifically to do with this SSL session */\n    unsigned int challenge_length;\n    unsigned char challenge[SSL2_MAX_CHALLENGE_LENGTH];\n    unsigned int conn_id_length;\n    unsigned char conn_id[SSL2_MAX_CONNECTION_ID_LENGTH];\n    unsigned int key_material_length;\n    unsigned char key_material[SSL2_MAX_KEY_MATERIAL_LENGTH * 2];\n    unsigned long read_sequence;\n    unsigned long write_sequence;\n    struct {\n        unsigned int conn_id_length;\n        unsigned int cert_type;\n        unsigned int cert_length;\n        unsigned int csl;\n        unsigned int clear;\n        unsigned int enc;\n        unsigned char ccl[SSL2_MAX_CERT_CHALLENGE_LENGTH];\n        unsigned int cipher_spec_length;\n        unsigned int session_id_length;\n        unsigned int clen;\n        unsigned int rlen;\n    } tmp;\n} SSL2_STATE;\n\n# endif\n\n/* SSLv2 */\n/* client */\n# define SSL2_ST_SEND_CLIENT_HELLO_A             (0x10|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_HELLO_B             (0x11|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_HELLO_A              (0x20|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_HELLO_B              (0x21|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_MASTER_KEY_A        (0x30|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_MASTER_KEY_B        (0x31|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_FINISHED_A          (0x40|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_FINISHED_B          (0x41|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_CERTIFICATE_A       (0x50|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_CERTIFICATE_B       (0x51|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_CERTIFICATE_C       (0x52|SSL_ST_CONNECT)\n# define SSL2_ST_SEND_CLIENT_CERTIFICATE_D       (0x53|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_VERIFY_A             (0x60|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_VERIFY_B             (0x61|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_FINISHED_A           (0x70|SSL_ST_CONNECT)\n# define SSL2_ST_GET_SERVER_FINISHED_B           (0x71|SSL_ST_CONNECT)\n# define SSL2_ST_CLIENT_START_ENCRYPTION         (0x80|SSL_ST_CONNECT)\n# define SSL2_ST_X509_GET_CLIENT_CERTIFICATE     (0x90|SSL_ST_CONNECT)\n/* server */\n# define SSL2_ST_GET_CLIENT_HELLO_A              (0x10|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_HELLO_B              (0x11|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_HELLO_C              (0x12|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_HELLO_A             (0x20|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_HELLO_B             (0x21|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_MASTER_KEY_A         (0x30|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_MASTER_KEY_B         (0x31|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_VERIFY_A            (0x40|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_VERIFY_B            (0x41|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_VERIFY_C            (0x42|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_FINISHED_A           (0x50|SSL_ST_ACCEPT)\n# define SSL2_ST_GET_CLIENT_FINISHED_B           (0x51|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_FINISHED_A          (0x60|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_SERVER_FINISHED_B          (0x61|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_REQUEST_CERTIFICATE_A      (0x70|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_REQUEST_CERTIFICATE_B      (0x71|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_REQUEST_CERTIFICATE_C      (0x72|SSL_ST_ACCEPT)\n# define SSL2_ST_SEND_REQUEST_CERTIFICATE_D      (0x73|SSL_ST_ACCEPT)\n# define SSL2_ST_SERVER_START_ENCRYPTION         (0x80|SSL_ST_ACCEPT)\n# define SSL2_ST_X509_GET_SERVER_CERTIFICATE     (0x90|SSL_ST_ACCEPT)\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ssl23.h",
    "content": "/* ssl/ssl23.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_SSL23_H\n# define HEADER_SSL23_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * client\n */\n/* write to server */\n# define SSL23_ST_CW_CLNT_HELLO_A        (0x210|SSL_ST_CONNECT)\n# define SSL23_ST_CW_CLNT_HELLO_B        (0x211|SSL_ST_CONNECT)\n/* read from server */\n# define SSL23_ST_CR_SRVR_HELLO_A        (0x220|SSL_ST_CONNECT)\n# define SSL23_ST_CR_SRVR_HELLO_B        (0x221|SSL_ST_CONNECT)\n\n/* server */\n/* read from client */\n# define SSL23_ST_SR_CLNT_HELLO_A        (0x210|SSL_ST_ACCEPT)\n# define SSL23_ST_SR_CLNT_HELLO_B        (0x211|SSL_ST_ACCEPT)\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ssl3.h",
    "content": "/* ssl/ssl3.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2002 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n * ECC cipher suite support in OpenSSL originally developed by\n * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n */\n\n#ifndef HEADER_SSL3_H\n# define HEADER_SSL3_H\n\n# ifndef OPENSSL_NO_COMP\n#  include <openssl/comp.h>\n# endif\n# include <openssl/buffer.h>\n# include <openssl/evp.h>\n# include <openssl/ssl.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * Signalling cipher suite value from RFC 5746\n * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV)\n */\n# define SSL3_CK_SCSV                            0x030000FF\n\n/*\n * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00\n * (TLS_FALLBACK_SCSV)\n */\n# define SSL3_CK_FALLBACK_SCSV                   0x03005600\n\n# define SSL3_CK_RSA_NULL_MD5                    0x03000001\n# define SSL3_CK_RSA_NULL_SHA                    0x03000002\n# define SSL3_CK_RSA_RC4_40_MD5                  0x03000003\n# define SSL3_CK_RSA_RC4_128_MD5                 0x03000004\n# define SSL3_CK_RSA_RC4_128_SHA                 0x03000005\n# define SSL3_CK_RSA_RC2_40_MD5                  0x03000006\n# define SSL3_CK_RSA_IDEA_128_SHA                0x03000007\n# define SSL3_CK_RSA_DES_40_CBC_SHA              0x03000008\n# define SSL3_CK_RSA_DES_64_CBC_SHA              0x03000009\n# define SSL3_CK_RSA_DES_192_CBC3_SHA            0x0300000A\n\n# define SSL3_CK_DH_DSS_DES_40_CBC_SHA           0x0300000B\n# define SSL3_CK_DH_DSS_DES_64_CBC_SHA           0x0300000C\n# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA         0x0300000D\n# define SSL3_CK_DH_RSA_DES_40_CBC_SHA           0x0300000E\n# define SSL3_CK_DH_RSA_DES_64_CBC_SHA           0x0300000F\n# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA         0x03000010\n\n# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA          0x03000011\n# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA          SSL3_CK_EDH_DSS_DES_40_CBC_SHA\n# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA          0x03000012\n# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA          SSL3_CK_EDH_DSS_DES_64_CBC_SHA\n# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA        0x03000013\n# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA        SSL3_CK_EDH_DSS_DES_192_CBC3_SHA\n# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA          0x03000014\n# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA          SSL3_CK_EDH_RSA_DES_40_CBC_SHA\n# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA          0x03000015\n# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA          SSL3_CK_EDH_RSA_DES_64_CBC_SHA\n# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA        0x03000016\n# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA        SSL3_CK_EDH_RSA_DES_192_CBC3_SHA\n\n# define SSL3_CK_ADH_RC4_40_MD5                  0x03000017\n# define SSL3_CK_ADH_RC4_128_MD5                 0x03000018\n# define SSL3_CK_ADH_DES_40_CBC_SHA              0x03000019\n# define SSL3_CK_ADH_DES_64_CBC_SHA              0x0300001A\n# define SSL3_CK_ADH_DES_192_CBC_SHA             0x0300001B\n\n# if 0\n#  define SSL3_CK_FZA_DMS_NULL_SHA                0x0300001C\n#  define SSL3_CK_FZA_DMS_FZA_SHA                 0x0300001D\n#  if 0                         /* Because it clashes with KRB5, is never\n                                 * used any more, and is safe to remove\n                                 * according to David Hopwood\n                                 * <david.hopwood@zetnet.co.uk> of the\n                                 * ietf-tls list */\n#   define SSL3_CK_FZA_DMS_RC4_SHA                 0x0300001E\n#  endif\n# endif\n\n/*\n * VRS Additional Kerberos5 entries\n */\n# define SSL3_CK_KRB5_DES_64_CBC_SHA             0x0300001E\n# define SSL3_CK_KRB5_DES_192_CBC3_SHA           0x0300001F\n# define SSL3_CK_KRB5_RC4_128_SHA                0x03000020\n# define SSL3_CK_KRB5_IDEA_128_CBC_SHA           0x03000021\n# define SSL3_CK_KRB5_DES_64_CBC_MD5             0x03000022\n# define SSL3_CK_KRB5_DES_192_CBC3_MD5           0x03000023\n# define SSL3_CK_KRB5_RC4_128_MD5                0x03000024\n# define SSL3_CK_KRB5_IDEA_128_CBC_MD5           0x03000025\n\n# define SSL3_CK_KRB5_DES_40_CBC_SHA             0x03000026\n# define SSL3_CK_KRB5_RC2_40_CBC_SHA             0x03000027\n# define SSL3_CK_KRB5_RC4_40_SHA                 0x03000028\n# define SSL3_CK_KRB5_DES_40_CBC_MD5             0x03000029\n# define SSL3_CK_KRB5_RC2_40_CBC_MD5             0x0300002A\n# define SSL3_CK_KRB5_RC4_40_MD5                 0x0300002B\n\n# define SSL3_TXT_RSA_NULL_MD5                   \"NULL-MD5\"\n# define SSL3_TXT_RSA_NULL_SHA                   \"NULL-SHA\"\n# define SSL3_TXT_RSA_RC4_40_MD5                 \"EXP-RC4-MD5\"\n# define SSL3_TXT_RSA_RC4_128_MD5                \"RC4-MD5\"\n# define SSL3_TXT_RSA_RC4_128_SHA                \"RC4-SHA\"\n# define SSL3_TXT_RSA_RC2_40_MD5                 \"EXP-RC2-CBC-MD5\"\n# define SSL3_TXT_RSA_IDEA_128_SHA               \"IDEA-CBC-SHA\"\n# define SSL3_TXT_RSA_DES_40_CBC_SHA             \"EXP-DES-CBC-SHA\"\n# define SSL3_TXT_RSA_DES_64_CBC_SHA             \"DES-CBC-SHA\"\n# define SSL3_TXT_RSA_DES_192_CBC3_SHA           \"DES-CBC3-SHA\"\n\n# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA          \"EXP-DH-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA          \"DH-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA        \"DH-DSS-DES-CBC3-SHA\"\n# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA          \"EXP-DH-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA          \"DH-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA        \"DH-RSA-DES-CBC3-SHA\"\n\n# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA         \"EXP-DHE-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA         \"DHE-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA       \"DHE-DSS-DES-CBC3-SHA\"\n# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA         \"EXP-DHE-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA         \"DHE-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA       \"DHE-RSA-DES-CBC3-SHA\"\n\n/*\n * This next block of six \"EDH\" labels is for backward compatibility with\n * older versions of OpenSSL.  New code should use the six \"DHE\" labels above\n * instead:\n */\n# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA         \"EXP-EDH-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA         \"EDH-DSS-DES-CBC-SHA\"\n# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA       \"EDH-DSS-DES-CBC3-SHA\"\n# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA         \"EXP-EDH-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA         \"EDH-RSA-DES-CBC-SHA\"\n# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA       \"EDH-RSA-DES-CBC3-SHA\"\n\n# define SSL3_TXT_ADH_RC4_40_MD5                 \"EXP-ADH-RC4-MD5\"\n# define SSL3_TXT_ADH_RC4_128_MD5                \"ADH-RC4-MD5\"\n# define SSL3_TXT_ADH_DES_40_CBC_SHA             \"EXP-ADH-DES-CBC-SHA\"\n# define SSL3_TXT_ADH_DES_64_CBC_SHA             \"ADH-DES-CBC-SHA\"\n# define SSL3_TXT_ADH_DES_192_CBC_SHA            \"ADH-DES-CBC3-SHA\"\n\n# if 0\n#  define SSL3_TXT_FZA_DMS_NULL_SHA               \"FZA-NULL-SHA\"\n#  define SSL3_TXT_FZA_DMS_FZA_SHA                \"FZA-FZA-CBC-SHA\"\n#  define SSL3_TXT_FZA_DMS_RC4_SHA                \"FZA-RC4-SHA\"\n# endif\n\n# define SSL3_TXT_KRB5_DES_64_CBC_SHA            \"KRB5-DES-CBC-SHA\"\n# define SSL3_TXT_KRB5_DES_192_CBC3_SHA          \"KRB5-DES-CBC3-SHA\"\n# define SSL3_TXT_KRB5_RC4_128_SHA               \"KRB5-RC4-SHA\"\n# define SSL3_TXT_KRB5_IDEA_128_CBC_SHA          \"KRB5-IDEA-CBC-SHA\"\n# define SSL3_TXT_KRB5_DES_64_CBC_MD5            \"KRB5-DES-CBC-MD5\"\n# define SSL3_TXT_KRB5_DES_192_CBC3_MD5          \"KRB5-DES-CBC3-MD5\"\n# define SSL3_TXT_KRB5_RC4_128_MD5               \"KRB5-RC4-MD5\"\n# define SSL3_TXT_KRB5_IDEA_128_CBC_MD5          \"KRB5-IDEA-CBC-MD5\"\n\n# define SSL3_TXT_KRB5_DES_40_CBC_SHA            \"EXP-KRB5-DES-CBC-SHA\"\n# define SSL3_TXT_KRB5_RC2_40_CBC_SHA            \"EXP-KRB5-RC2-CBC-SHA\"\n# define SSL3_TXT_KRB5_RC4_40_SHA                \"EXP-KRB5-RC4-SHA\"\n# define SSL3_TXT_KRB5_DES_40_CBC_MD5            \"EXP-KRB5-DES-CBC-MD5\"\n# define SSL3_TXT_KRB5_RC2_40_CBC_MD5            \"EXP-KRB5-RC2-CBC-MD5\"\n# define SSL3_TXT_KRB5_RC4_40_MD5                \"EXP-KRB5-RC4-MD5\"\n\n# define SSL3_SSL_SESSION_ID_LENGTH              32\n# define SSL3_MAX_SSL_SESSION_ID_LENGTH          32\n\n# define SSL3_MASTER_SECRET_SIZE                 48\n# define SSL3_RANDOM_SIZE                        32\n# define SSL3_SESSION_ID_SIZE                    32\n# define SSL3_RT_HEADER_LENGTH                   5\n\n# define SSL3_HM_HEADER_LENGTH                  4\n\n# ifndef SSL3_ALIGN_PAYLOAD\n /*\n  * Some will argue that this increases memory footprint, but it's not\n  * actually true. Point is that malloc has to return at least 64-bit aligned\n  * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case.\n  * Suggested pre-gaping simply moves these wasted bytes from the end of\n  * allocated region to its front, but makes data payload aligned, which\n  * improves performance:-)\n  */\n#  define SSL3_ALIGN_PAYLOAD                     8\n# else\n#  if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0\n#   error \"insane SSL3_ALIGN_PAYLOAD\"\n#   undef SSL3_ALIGN_PAYLOAD\n#  endif\n# endif\n\n/*\n * This is the maximum MAC (digest) size used by the SSL library. Currently\n * maximum of 20 is used by SHA1, but we reserve for future extension for\n * 512-bit hashes.\n */\n\n# define SSL3_RT_MAX_MD_SIZE                     64\n\n/*\n * Maximum block size used in all ciphersuites. Currently 16 for AES.\n */\n\n# define SSL_RT_MAX_CIPHER_BLOCK_SIZE            16\n\n# define SSL3_RT_MAX_EXTRA                       (16384)\n\n/* Maximum plaintext length: defined by SSL/TLS standards */\n# define SSL3_RT_MAX_PLAIN_LENGTH                16384\n/* Maximum compression overhead: defined by SSL/TLS standards */\n# define SSL3_RT_MAX_COMPRESSED_OVERHEAD         1024\n\n/*\n * The standards give a maximum encryption overhead of 1024 bytes. In\n * practice the value is lower than this. The overhead is the maximum number\n * of padding bytes (256) plus the mac size.\n */\n# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD  (256 + SSL3_RT_MAX_MD_SIZE)\n\n/*\n * OpenSSL currently only uses a padding length of at most one block so the\n * send overhead is smaller.\n */\n\n# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \\\n                        (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE)\n\n/* If compression isn't used don't include the compression overhead */\n\n# ifdef OPENSSL_NO_COMP\n#  define SSL3_RT_MAX_COMPRESSED_LENGTH           SSL3_RT_MAX_PLAIN_LENGTH\n# else\n#  define SSL3_RT_MAX_COMPRESSED_LENGTH   \\\n                (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD)\n# endif\n# define SSL3_RT_MAX_ENCRYPTED_LENGTH    \\\n                (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH)\n# define SSL3_RT_MAX_PACKET_SIZE         \\\n                (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH)\n\n# define SSL3_MD_CLIENT_FINISHED_CONST   \"\\x43\\x4C\\x4E\\x54\"\n# define SSL3_MD_SERVER_FINISHED_CONST   \"\\x53\\x52\\x56\\x52\"\n\n# define SSL3_VERSION                    0x0300\n# define SSL3_VERSION_MAJOR              0x03\n# define SSL3_VERSION_MINOR              0x00\n\n# define SSL3_RT_CHANGE_CIPHER_SPEC      20\n# define SSL3_RT_ALERT                   21\n# define SSL3_RT_HANDSHAKE               22\n# define SSL3_RT_APPLICATION_DATA        23\n# define TLS1_RT_HEARTBEAT               24\n\n/* Pseudo content types to indicate additional parameters */\n# define TLS1_RT_CRYPTO                  0x1000\n# define TLS1_RT_CRYPTO_PREMASTER        (TLS1_RT_CRYPTO | 0x1)\n# define TLS1_RT_CRYPTO_CLIENT_RANDOM    (TLS1_RT_CRYPTO | 0x2)\n# define TLS1_RT_CRYPTO_SERVER_RANDOM    (TLS1_RT_CRYPTO | 0x3)\n# define TLS1_RT_CRYPTO_MASTER           (TLS1_RT_CRYPTO | 0x4)\n\n# define TLS1_RT_CRYPTO_READ             0x0000\n# define TLS1_RT_CRYPTO_WRITE            0x0100\n# define TLS1_RT_CRYPTO_MAC              (TLS1_RT_CRYPTO | 0x5)\n# define TLS1_RT_CRYPTO_KEY              (TLS1_RT_CRYPTO | 0x6)\n# define TLS1_RT_CRYPTO_IV               (TLS1_RT_CRYPTO | 0x7)\n# define TLS1_RT_CRYPTO_FIXED_IV         (TLS1_RT_CRYPTO | 0x8)\n\n/* Pseudo content type for SSL/TLS header info */\n# define SSL3_RT_HEADER                  0x100\n\n# define SSL3_AL_WARNING                 1\n# define SSL3_AL_FATAL                   2\n\n# define SSL3_AD_CLOSE_NOTIFY             0\n# define SSL3_AD_UNEXPECTED_MESSAGE      10/* fatal */\n# define SSL3_AD_BAD_RECORD_MAC          20/* fatal */\n# define SSL3_AD_DECOMPRESSION_FAILURE   30/* fatal */\n# define SSL3_AD_HANDSHAKE_FAILURE       40/* fatal */\n# define SSL3_AD_NO_CERTIFICATE          41\n# define SSL3_AD_BAD_CERTIFICATE         42\n# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43\n# define SSL3_AD_CERTIFICATE_REVOKED     44\n# define SSL3_AD_CERTIFICATE_EXPIRED     45\n# define SSL3_AD_CERTIFICATE_UNKNOWN     46\n# define SSL3_AD_ILLEGAL_PARAMETER       47/* fatal */\n\n# define TLS1_HB_REQUEST         1\n# define TLS1_HB_RESPONSE        2\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\ntypedef struct ssl3_record_st {\n    /* type of record */\n    /*\n     * r\n     */ int type;\n    /* How many bytes available */\n    /*\n     * rw\n     */ unsigned int length;\n    /* read/write offset into 'buf' */\n    /*\n     * r\n     */ unsigned int off;\n    /* pointer to the record data */\n    /*\n     * rw\n     */ unsigned char *data;\n    /* where the decode bytes are */\n    /*\n     * rw\n     */ unsigned char *input;\n    /* only used with decompression - malloc()ed */\n    /*\n     * r\n     */ unsigned char *comp;\n    /* epoch number, needed by DTLS1 */\n    /*\n     * r\n     */ unsigned long epoch;\n    /* sequence number, needed by DTLS1 */\n    /*\n     * r\n     */ unsigned char seq_num[8];\n} SSL3_RECORD;\n\ntypedef struct ssl3_buffer_st {\n    /* at least SSL3_RT_MAX_PACKET_SIZE bytes, see ssl3_setup_buffers() */\n    unsigned char *buf;\n    /* buffer size */\n    size_t len;\n    /* where to 'copy from' */\n    int offset;\n    /* how many bytes left */\n    int left;\n} SSL3_BUFFER;\n\n# endif\n\n# define SSL3_CT_RSA_SIGN                        1\n# define SSL3_CT_DSS_SIGN                        2\n# define SSL3_CT_RSA_FIXED_DH                    3\n# define SSL3_CT_DSS_FIXED_DH                    4\n# define SSL3_CT_RSA_EPHEMERAL_DH                5\n# define SSL3_CT_DSS_EPHEMERAL_DH                6\n# define SSL3_CT_FORTEZZA_DMS                    20\n/*\n * SSL3_CT_NUMBER is used to size arrays and it must be large enough to\n * contain all of the cert types defined either for SSLv3 and TLSv1.\n */\n# define SSL3_CT_NUMBER                  9\n\n# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS       0x0001\n# define SSL3_FLAGS_DELAY_CLIENT_FINISHED        0x0002\n# define SSL3_FLAGS_POP_BUFFER                   0x0004\n# define TLS1_FLAGS_TLS_PADDING_BUG              0x0008\n# define TLS1_FLAGS_SKIP_CERT_VERIFY             0x0010\n# define TLS1_FLAGS_KEEP_HANDSHAKE               0x0020\n/*\n * Set when the handshake is ready to process peer's ChangeCipherSpec message.\n * Cleared after the message has been processed.\n */\n# define SSL3_FLAGS_CCS_OK                       0x0080\n\n/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */\n# define SSL3_FLAGS_SGC_RESTART_DONE             0x0040\n\n# ifndef OPENSSL_NO_SSL_INTERN\n\ntypedef struct ssl3_state_st {\n    long flags;\n    int delay_buf_pop_ret;\n    unsigned char read_sequence[8];\n    int read_mac_secret_size;\n    unsigned char read_mac_secret[EVP_MAX_MD_SIZE];\n    unsigned char write_sequence[8];\n    int write_mac_secret_size;\n    unsigned char write_mac_secret[EVP_MAX_MD_SIZE];\n    unsigned char server_random[SSL3_RANDOM_SIZE];\n    unsigned char client_random[SSL3_RANDOM_SIZE];\n    /* flags for countermeasure against known-IV weakness */\n    int need_empty_fragments;\n    int empty_fragment_done;\n    /* The value of 'extra' when the buffers were initialized */\n    int init_extra;\n    SSL3_BUFFER rbuf;           /* read IO goes into here */\n    SSL3_BUFFER wbuf;           /* write IO goes into here */\n    SSL3_RECORD rrec;           /* each decoded record goes in here */\n    SSL3_RECORD wrec;           /* goes out from here */\n    /*\n     * storage for Alert/Handshake protocol data received but not yet\n     * processed by ssl3_read_bytes:\n     */\n    unsigned char alert_fragment[2];\n    unsigned int alert_fragment_len;\n    unsigned char handshake_fragment[4];\n    unsigned int handshake_fragment_len;\n    /* partial write - check the numbers match */\n    unsigned int wnum;          /* number of bytes sent so far */\n    int wpend_tot;              /* number bytes written */\n    int wpend_type;\n    int wpend_ret;              /* number of bytes submitted */\n    const unsigned char *wpend_buf;\n    /* used during startup, digest all incoming/outgoing packets */\n    BIO *handshake_buffer;\n    /*\n     * When set of handshake digests is determined, buffer is hashed and\n     * freed and MD_CTX-es for all required digests are stored in this array\n     */\n    EVP_MD_CTX **handshake_dgst;\n    /*\n     * Set whenever an expected ChangeCipherSpec message is processed.\n     * Unset when the peer's Finished message is received.\n     * Unexpected ChangeCipherSpec messages trigger a fatal alert.\n     */\n    int change_cipher_spec;\n    int warn_alert;\n    int fatal_alert;\n    /*\n     * we allow one fatal and one warning alert to be outstanding, send close\n     * alert via the warning alert\n     */\n    int alert_dispatch;\n    unsigned char send_alert[2];\n    /*\n     * This flag is set when we should renegotiate ASAP, basically when there\n     * is no more data in the read or write buffers\n     */\n    int renegotiate;\n    int total_renegotiations;\n    int num_renegotiations;\n    int in_read_app_data;\n    /*\n     * Opaque PRF input as used for the current handshake. These fields are\n     * used only if TLSEXT_TYPE_opaque_prf_input is defined (otherwise, they\n     * are merely present to improve binary compatibility)\n     */\n    void *client_opaque_prf_input;\n    size_t client_opaque_prf_input_len;\n    void *server_opaque_prf_input;\n    size_t server_opaque_prf_input_len;\n    struct {\n        /* actually only needs to be 16+20 */\n        unsigned char cert_verify_md[EVP_MAX_MD_SIZE * 2];\n        /* actually only need to be 16+20 for SSLv3 and 12 for TLS */\n        unsigned char finish_md[EVP_MAX_MD_SIZE * 2];\n        int finish_md_len;\n        unsigned char peer_finish_md[EVP_MAX_MD_SIZE * 2];\n        int peer_finish_md_len;\n        unsigned long message_size;\n        int message_type;\n        /* used to hold the new cipher we are going to use */\n        const SSL_CIPHER *new_cipher;\n#  ifndef OPENSSL_NO_DH\n        DH *dh;\n#  endif\n#  ifndef OPENSSL_NO_ECDH\n        EC_KEY *ecdh;           /* holds short lived ECDH key */\n#  endif\n        /* used when SSL_ST_FLUSH_DATA is entered */\n        int next_state;\n        int reuse_message;\n        /* used for certificate requests */\n        int cert_req;\n        int ctype_num;\n        char ctype[SSL3_CT_NUMBER];\n        STACK_OF(X509_NAME) *ca_names;\n        int use_rsa_tmp;\n        int key_block_length;\n        unsigned char *key_block;\n        const EVP_CIPHER *new_sym_enc;\n        const EVP_MD *new_hash;\n        int new_mac_pkey_type;\n        int new_mac_secret_size;\n#  ifndef OPENSSL_NO_COMP\n        const SSL_COMP *new_compression;\n#  else\n        char *new_compression;\n#  endif\n        int cert_request;\n    } tmp;\n\n    /* Connection binding to prevent renegotiation attacks */\n    unsigned char previous_client_finished[EVP_MAX_MD_SIZE];\n    unsigned char previous_client_finished_len;\n    unsigned char previous_server_finished[EVP_MAX_MD_SIZE];\n    unsigned char previous_server_finished_len;\n    int send_connection_binding; /* TODOEKR */\n\n#  ifndef OPENSSL_NO_NEXTPROTONEG\n    /*\n     * Set if we saw the Next Protocol Negotiation extension from our peer.\n     */\n    int next_proto_neg_seen;\n#  endif\n\n#  ifndef OPENSSL_NO_TLSEXT\n#   ifndef OPENSSL_NO_EC\n    /*\n     * This is set to true if we believe that this is a version of Safari\n     * running on OS X 10.6 or newer. We wish to know this because Safari on\n     * 10.8 .. 10.8.3 has broken ECDHE-ECDSA support.\n     */\n    char is_probably_safari;\n#   endif                       /* !OPENSSL_NO_EC */\n\n    /*\n     * ALPN information (we are in the process of transitioning from NPN to\n     * ALPN.)\n     */\n\n    /*\n     * In a server these point to the selected ALPN protocol after the\n     * ClientHello has been processed. In a client these contain the protocol\n     * that the server selected once the ServerHello has been processed.\n     */\n    unsigned char *alpn_selected;\n    unsigned alpn_selected_len;\n#  endif                        /* OPENSSL_NO_TLSEXT */\n} SSL3_STATE;\n\n# endif\n\n/* SSLv3 */\n/*\n * client\n */\n/* extra state */\n# define SSL3_ST_CW_FLUSH                (0x100|SSL_ST_CONNECT)\n# ifndef OPENSSL_NO_SCTP\n#  define DTLS1_SCTP_ST_CW_WRITE_SOCK                     (0x310|SSL_ST_CONNECT)\n#  define DTLS1_SCTP_ST_CR_READ_SOCK                      (0x320|SSL_ST_CONNECT)\n# endif\n/* write to server */\n# define SSL3_ST_CW_CLNT_HELLO_A         (0x110|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CLNT_HELLO_B         (0x111|SSL_ST_CONNECT)\n/* read from server */\n# define SSL3_ST_CR_SRVR_HELLO_A         (0x120|SSL_ST_CONNECT)\n# define SSL3_ST_CR_SRVR_HELLO_B         (0x121|SSL_ST_CONNECT)\n# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A (0x126|SSL_ST_CONNECT)\n# define DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B (0x127|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_A               (0x130|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_B               (0x131|SSL_ST_CONNECT)\n# define SSL3_ST_CR_KEY_EXCH_A           (0x140|SSL_ST_CONNECT)\n# define SSL3_ST_CR_KEY_EXCH_B           (0x141|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_REQ_A           (0x150|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_REQ_B           (0x151|SSL_ST_CONNECT)\n# define SSL3_ST_CR_SRVR_DONE_A          (0x160|SSL_ST_CONNECT)\n# define SSL3_ST_CR_SRVR_DONE_B          (0x161|SSL_ST_CONNECT)\n/* write to server */\n# define SSL3_ST_CW_CERT_A               (0x170|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CERT_B               (0x171|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CERT_C               (0x172|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CERT_D               (0x173|SSL_ST_CONNECT)\n# define SSL3_ST_CW_KEY_EXCH_A           (0x180|SSL_ST_CONNECT)\n# define SSL3_ST_CW_KEY_EXCH_B           (0x181|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CERT_VRFY_A          (0x190|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CERT_VRFY_B          (0x191|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CHANGE_A             (0x1A0|SSL_ST_CONNECT)\n# define SSL3_ST_CW_CHANGE_B             (0x1A1|SSL_ST_CONNECT)\n# ifndef OPENSSL_NO_NEXTPROTONEG\n#  define SSL3_ST_CW_NEXT_PROTO_A         (0x200|SSL_ST_CONNECT)\n#  define SSL3_ST_CW_NEXT_PROTO_B         (0x201|SSL_ST_CONNECT)\n# endif\n# define SSL3_ST_CW_FINISHED_A           (0x1B0|SSL_ST_CONNECT)\n# define SSL3_ST_CW_FINISHED_B           (0x1B1|SSL_ST_CONNECT)\n/* read from server */\n# define SSL3_ST_CR_CHANGE_A             (0x1C0|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CHANGE_B             (0x1C1|SSL_ST_CONNECT)\n# define SSL3_ST_CR_FINISHED_A           (0x1D0|SSL_ST_CONNECT)\n# define SSL3_ST_CR_FINISHED_B           (0x1D1|SSL_ST_CONNECT)\n# define SSL3_ST_CR_SESSION_TICKET_A     (0x1E0|SSL_ST_CONNECT)\n# define SSL3_ST_CR_SESSION_TICKET_B     (0x1E1|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_STATUS_A        (0x1F0|SSL_ST_CONNECT)\n# define SSL3_ST_CR_CERT_STATUS_B        (0x1F1|SSL_ST_CONNECT)\n\n/* server */\n/* extra state */\n# define SSL3_ST_SW_FLUSH                (0x100|SSL_ST_ACCEPT)\n# ifndef OPENSSL_NO_SCTP\n#  define DTLS1_SCTP_ST_SW_WRITE_SOCK                     (0x310|SSL_ST_ACCEPT)\n#  define DTLS1_SCTP_ST_SR_READ_SOCK                      (0x320|SSL_ST_ACCEPT)\n# endif\n/* read from client */\n/* Do not change the number values, they do matter */\n# define SSL3_ST_SR_CLNT_HELLO_A         (0x110|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CLNT_HELLO_B         (0x111|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CLNT_HELLO_C         (0x112|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CLNT_HELLO_D         (0x115|SSL_ST_ACCEPT)\n/* write to client */\n# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)\n# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_HELLO_REQ_A          (0x120|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_HELLO_REQ_B          (0x121|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_HELLO_REQ_C          (0x122|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SRVR_HELLO_A         (0x130|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SRVR_HELLO_B         (0x131|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_A               (0x140|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_B               (0x141|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_KEY_EXCH_A           (0x150|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_KEY_EXCH_B           (0x151|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_REQ_A           (0x160|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_REQ_B           (0x161|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SRVR_DONE_A          (0x170|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SRVR_DONE_B          (0x171|SSL_ST_ACCEPT)\n/* read from client */\n# define SSL3_ST_SR_CERT_A               (0x180|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CERT_B               (0x181|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_KEY_EXCH_A           (0x190|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_KEY_EXCH_B           (0x191|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CERT_VRFY_A          (0x1A0|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CERT_VRFY_B          (0x1A1|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CHANGE_A             (0x1B0|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_CHANGE_B             (0x1B1|SSL_ST_ACCEPT)\n# ifndef OPENSSL_NO_NEXTPROTONEG\n#  define SSL3_ST_SR_NEXT_PROTO_A         (0x210|SSL_ST_ACCEPT)\n#  define SSL3_ST_SR_NEXT_PROTO_B         (0x211|SSL_ST_ACCEPT)\n# endif\n# define SSL3_ST_SR_FINISHED_A           (0x1C0|SSL_ST_ACCEPT)\n# define SSL3_ST_SR_FINISHED_B           (0x1C1|SSL_ST_ACCEPT)\n/* write to client */\n# define SSL3_ST_SW_CHANGE_A             (0x1D0|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CHANGE_B             (0x1D1|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_FINISHED_A           (0x1E0|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_FINISHED_B           (0x1E1|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SESSION_TICKET_A     (0x1F0|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_SESSION_TICKET_B     (0x1F1|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_STATUS_A        (0x200|SSL_ST_ACCEPT)\n# define SSL3_ST_SW_CERT_STATUS_B        (0x201|SSL_ST_ACCEPT)\n\n# define SSL3_MT_HELLO_REQUEST                   0\n# define SSL3_MT_CLIENT_HELLO                    1\n# define SSL3_MT_SERVER_HELLO                    2\n# define SSL3_MT_NEWSESSION_TICKET               4\n# define SSL3_MT_CERTIFICATE                     11\n# define SSL3_MT_SERVER_KEY_EXCHANGE             12\n# define SSL3_MT_CERTIFICATE_REQUEST             13\n# define SSL3_MT_SERVER_DONE                     14\n# define SSL3_MT_CERTIFICATE_VERIFY              15\n# define SSL3_MT_CLIENT_KEY_EXCHANGE             16\n# define SSL3_MT_FINISHED                        20\n# define SSL3_MT_CERTIFICATE_STATUS              22\n# ifndef OPENSSL_NO_NEXTPROTONEG\n#  define SSL3_MT_NEXT_PROTO                      67\n# endif\n# define DTLS1_MT_HELLO_VERIFY_REQUEST    3\n\n# define SSL3_MT_CCS                             1\n\n/* These are used when changing over to a new cipher */\n# define SSL3_CC_READ            0x01\n# define SSL3_CC_WRITE           0x02\n# define SSL3_CC_CLIENT          0x10\n# define SSL3_CC_SERVER          0x20\n# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE)\n# define SSL3_CHANGE_CIPHER_SERVER_READ  (SSL3_CC_SERVER|SSL3_CC_READ)\n# define SSL3_CHANGE_CIPHER_CLIENT_READ  (SSL3_CC_CLIENT|SSL3_CC_READ)\n# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE)\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/stack.h",
    "content": "/* crypto/stack/stack.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_STACK_H\n# define HEADER_STACK_H\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct stack_st {\n    int num;\n    char **data;\n    int sorted;\n    int num_alloc;\n    int (*comp) (const void *, const void *);\n} _STACK;                       /* Use STACK_OF(...) instead */\n\n# define M_sk_num(sk)            ((sk) ? (sk)->num:-1)\n# define M_sk_value(sk,n)        ((sk) ? (sk)->data[n] : NULL)\n\nint sk_num(const _STACK *);\nvoid *sk_value(const _STACK *, int);\n\nvoid *sk_set(_STACK *, int, void *);\n\n_STACK *sk_new(int (*cmp) (const void *, const void *));\n_STACK *sk_new_null(void);\nvoid sk_free(_STACK *);\nvoid sk_pop_free(_STACK *st, void (*func) (void *));\n_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *));\nint sk_insert(_STACK *sk, void *data, int where);\nvoid *sk_delete(_STACK *st, int loc);\nvoid *sk_delete_ptr(_STACK *st, void *p);\nint sk_find(_STACK *st, void *data);\nint sk_find_ex(_STACK *st, void *data);\nint sk_push(_STACK *st, void *data);\nint sk_unshift(_STACK *st, void *data);\nvoid *sk_shift(_STACK *st);\nvoid *sk_pop(_STACK *st);\nvoid sk_zero(_STACK *st);\nint (*sk_set_cmp_func(_STACK *sk, int (*c) (const void *, const void *)))\n (const void *, const void *);\n_STACK *sk_dup(_STACK *st);\nvoid sk_sort(_STACK *st);\nint sk_is_sorted(const _STACK *st);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/symhacks.h",
    "content": "/* ====================================================================\n * Copyright (c) 1999 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_SYMHACKS_H\n# define HEADER_SYMHACKS_H\n\n# include \"openssl/e_os2.h\"\n\n/*\n * Hacks to solve the problem with linkers incapable of handling very long\n * symbol names.  In the case of VMS, the limit is 31 characters on VMS for\n * VAX.\n */\n/*\n * Note that this affects util/libeay.num and util/ssleay.num...  you may\n * change those manually, but that's not recommended, as those files are\n * controlled centrally and updated on Unix, and the central definition may\n * disagree with yours, which in turn may come with shareable library\n * incompatibilities.\n */\n# ifdef OPENSSL_SYS_VMS\n\n/* Hack a long name in crypto/ex_data.c */\n#  undef CRYPTO_get_ex_data_implementation\n#  define CRYPTO_get_ex_data_implementation       CRYPTO_get_ex_data_impl\n#  undef CRYPTO_set_ex_data_implementation\n#  define CRYPTO_set_ex_data_implementation       CRYPTO_set_ex_data_impl\n\n/* Hack a long name in crypto/asn1/a_mbstr.c */\n#  undef ASN1_STRING_set_default_mask_asc\n#  define ASN1_STRING_set_default_mask_asc        ASN1_STRING_set_def_mask_asc\n\n#  if 0                         /* No longer needed, since safestack macro\n                                 * magic does the job */\n/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_SIGNER_INFO) */\n#   undef i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO\n#   define i2d_ASN1_SET_OF_PKCS7_SIGNER_INFO       i2d_ASN1_SET_OF_PKCS7_SIGINF\n#   undef d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO\n#   define d2i_ASN1_SET_OF_PKCS7_SIGNER_INFO       d2i_ASN1_SET_OF_PKCS7_SIGINF\n#  endif\n\n#  if 0                         /* No longer needed, since safestack macro\n                                 * magic does the job */\n/* Hack the names created with DECLARE_ASN1_SET_OF(PKCS7_RECIP_INFO) */\n#   undef i2d_ASN1_SET_OF_PKCS7_RECIP_INFO\n#   define i2d_ASN1_SET_OF_PKCS7_RECIP_INFO        i2d_ASN1_SET_OF_PKCS7_RECINF\n#   undef d2i_ASN1_SET_OF_PKCS7_RECIP_INFO\n#   define d2i_ASN1_SET_OF_PKCS7_RECIP_INFO        d2i_ASN1_SET_OF_PKCS7_RECINF\n#  endif\n\n#  if 0                         /* No longer needed, since safestack macro\n                                 * magic does the job */\n/* Hack the names created with DECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION) */\n#   undef i2d_ASN1_SET_OF_ACCESS_DESCRIPTION\n#   define i2d_ASN1_SET_OF_ACCESS_DESCRIPTION      i2d_ASN1_SET_OF_ACC_DESC\n#   undef d2i_ASN1_SET_OF_ACCESS_DESCRIPTION\n#   define d2i_ASN1_SET_OF_ACCESS_DESCRIPTION      d2i_ASN1_SET_OF_ACC_DESC\n#  endif\n\n/* Hack the names created with DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE) */\n#  undef PEM_read_NETSCAPE_CERT_SEQUENCE\n#  define PEM_read_NETSCAPE_CERT_SEQUENCE         PEM_read_NS_CERT_SEQ\n#  undef PEM_write_NETSCAPE_CERT_SEQUENCE\n#  define PEM_write_NETSCAPE_CERT_SEQUENCE        PEM_write_NS_CERT_SEQ\n#  undef PEM_read_bio_NETSCAPE_CERT_SEQUENCE\n#  define PEM_read_bio_NETSCAPE_CERT_SEQUENCE     PEM_read_bio_NS_CERT_SEQ\n#  undef PEM_write_bio_NETSCAPE_CERT_SEQUENCE\n#  define PEM_write_bio_NETSCAPE_CERT_SEQUENCE    PEM_write_bio_NS_CERT_SEQ\n#  undef PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE\n#  define PEM_write_cb_bio_NETSCAPE_CERT_SEQUENCE PEM_write_cb_bio_NS_CERT_SEQ\n\n/* Hack the names created with DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO) */\n#  undef PEM_read_PKCS8_PRIV_KEY_INFO\n#  define PEM_read_PKCS8_PRIV_KEY_INFO            PEM_read_P8_PRIV_KEY_INFO\n#  undef PEM_write_PKCS8_PRIV_KEY_INFO\n#  define PEM_write_PKCS8_PRIV_KEY_INFO           PEM_write_P8_PRIV_KEY_INFO\n#  undef PEM_read_bio_PKCS8_PRIV_KEY_INFO\n#  define PEM_read_bio_PKCS8_PRIV_KEY_INFO        PEM_read_bio_P8_PRIV_KEY_INFO\n#  undef PEM_write_bio_PKCS8_PRIV_KEY_INFO\n#  define PEM_write_bio_PKCS8_PRIV_KEY_INFO       PEM_write_bio_P8_PRIV_KEY_INFO\n#  undef PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO\n#  define PEM_write_cb_bio_PKCS8_PRIV_KEY_INFO    PEM_wrt_cb_bio_P8_PRIV_KEY_INFO\n\n/* Hack other PEM names */\n#  undef PEM_write_bio_PKCS8PrivateKey_nid\n#  define PEM_write_bio_PKCS8PrivateKey_nid       PEM_write_bio_PKCS8PrivKey_nid\n\n/* Hack some long X509 names */\n#  undef X509_REVOKED_get_ext_by_critical\n#  define X509_REVOKED_get_ext_by_critical        X509_REVOKED_get_ext_by_critic\n#  undef X509_policy_tree_get0_user_policies\n#  define X509_policy_tree_get0_user_policies     X509_pcy_tree_get0_usr_policies\n#  undef X509_policy_node_get0_qualifiers\n#  define X509_policy_node_get0_qualifiers        X509_pcy_node_get0_qualifiers\n#  undef X509_STORE_CTX_get_explicit_policy\n#  define X509_STORE_CTX_get_explicit_policy      X509_STORE_CTX_get_expl_policy\n#  undef X509_STORE_CTX_get0_current_issuer\n#  define X509_STORE_CTX_get0_current_issuer      X509_STORE_CTX_get0_cur_issuer\n\n/* Hack some long CRYPTO names */\n#  undef CRYPTO_set_dynlock_destroy_callback\n#  define CRYPTO_set_dynlock_destroy_callback     CRYPTO_set_dynlock_destroy_cb\n#  undef CRYPTO_set_dynlock_create_callback\n#  define CRYPTO_set_dynlock_create_callback      CRYPTO_set_dynlock_create_cb\n#  undef CRYPTO_set_dynlock_lock_callback\n#  define CRYPTO_set_dynlock_lock_callback        CRYPTO_set_dynlock_lock_cb\n#  undef CRYPTO_get_dynlock_lock_callback\n#  define CRYPTO_get_dynlock_lock_callback        CRYPTO_get_dynlock_lock_cb\n#  undef CRYPTO_get_dynlock_destroy_callback\n#  define CRYPTO_get_dynlock_destroy_callback     CRYPTO_get_dynlock_destroy_cb\n#  undef CRYPTO_get_dynlock_create_callback\n#  define CRYPTO_get_dynlock_create_callback      CRYPTO_get_dynlock_create_cb\n#  undef CRYPTO_set_locked_mem_ex_functions\n#  define CRYPTO_set_locked_mem_ex_functions      CRYPTO_set_locked_mem_ex_funcs\n#  undef CRYPTO_get_locked_mem_ex_functions\n#  define CRYPTO_get_locked_mem_ex_functions      CRYPTO_get_locked_mem_ex_funcs\n\n/* Hack some long SSL/TLS names */\n#  undef SSL_CTX_set_default_verify_paths\n#  define SSL_CTX_set_default_verify_paths        SSL_CTX_set_def_verify_paths\n#  undef SSL_get_ex_data_X509_STORE_CTX_idx\n#  define SSL_get_ex_data_X509_STORE_CTX_idx      SSL_get_ex_d_X509_STORE_CTX_idx\n#  undef SSL_add_file_cert_subjects_to_stack\n#  define SSL_add_file_cert_subjects_to_stack     SSL_add_file_cert_subjs_to_stk\n#  undef SSL_add_dir_cert_subjects_to_stack\n#  define SSL_add_dir_cert_subjects_to_stack      SSL_add_dir_cert_subjs_to_stk\n#  undef SSL_CTX_use_certificate_chain_file\n#  define SSL_CTX_use_certificate_chain_file      SSL_CTX_use_cert_chain_file\n#  undef SSL_CTX_set_cert_verify_callback\n#  define SSL_CTX_set_cert_verify_callback        SSL_CTX_set_cert_verify_cb\n#  undef SSL_CTX_set_default_passwd_cb_userdata\n#  define SSL_CTX_set_default_passwd_cb_userdata  SSL_CTX_set_def_passwd_cb_ud\n#  undef SSL_COMP_get_compression_methods\n#  define SSL_COMP_get_compression_methods        SSL_COMP_get_compress_methods\n#  undef SSL_COMP_set0_compression_methods\n#  define SSL_COMP_set0_compression_methods       SSL_COMP_set0_compress_methods\n#  undef SSL_COMP_free_compression_methods\n#  define SSL_COMP_free_compression_methods       SSL_COMP_free_compress_methods\n#  undef ssl_add_clienthello_renegotiate_ext\n#  define ssl_add_clienthello_renegotiate_ext     ssl_add_clienthello_reneg_ext\n#  undef ssl_add_serverhello_renegotiate_ext\n#  define ssl_add_serverhello_renegotiate_ext     ssl_add_serverhello_reneg_ext\n#  undef ssl_parse_clienthello_renegotiate_ext\n#  define ssl_parse_clienthello_renegotiate_ext   ssl_parse_clienthello_reneg_ext\n#  undef ssl_parse_serverhello_renegotiate_ext\n#  define ssl_parse_serverhello_renegotiate_ext   ssl_parse_serverhello_reneg_ext\n#  undef SSL_srp_server_param_with_username\n#  define SSL_srp_server_param_with_username      SSL_srp_server_param_with_un\n#  undef SSL_CTX_set_srp_client_pwd_callback\n#  define SSL_CTX_set_srp_client_pwd_callback     SSL_CTX_set_srp_client_pwd_cb\n#  undef SSL_CTX_set_srp_verify_param_callback\n#  define SSL_CTX_set_srp_verify_param_callback   SSL_CTX_set_srp_vfy_param_cb\n#  undef SSL_CTX_set_srp_username_callback\n#  define SSL_CTX_set_srp_username_callback       SSL_CTX_set_srp_un_cb\n#  undef ssl_add_clienthello_use_srtp_ext\n#  define ssl_add_clienthello_use_srtp_ext        ssl_add_clihello_use_srtp_ext\n#  undef ssl_add_serverhello_use_srtp_ext\n#  define ssl_add_serverhello_use_srtp_ext        ssl_add_serhello_use_srtp_ext\n#  undef ssl_parse_clienthello_use_srtp_ext\n#  define ssl_parse_clienthello_use_srtp_ext      ssl_parse_clihello_use_srtp_ext\n#  undef ssl_parse_serverhello_use_srtp_ext\n#  define ssl_parse_serverhello_use_srtp_ext      ssl_parse_serhello_use_srtp_ext\n#  undef SSL_CTX_set_next_protos_advertised_cb\n#  define SSL_CTX_set_next_protos_advertised_cb   SSL_CTX_set_next_protos_adv_cb\n#  undef SSL_CTX_set_next_proto_select_cb\n#  define SSL_CTX_set_next_proto_select_cb        SSL_CTX_set_next_proto_sel_cb\n\n#  undef tls1_send_server_supplemental_data\n#  define tls1_send_server_supplemental_data      tls1_send_server_suppl_data\n#  undef tls1_send_client_supplemental_data\n#  define tls1_send_client_supplemental_data      tls1_send_client_suppl_data\n#  undef tls1_get_server_supplemental_data\n#  define tls1_get_server_supplemental_data       tls1_get_server_suppl_data\n#  undef tls1_get_client_supplemental_data\n#  define tls1_get_client_supplemental_data       tls1_get_client_suppl_data\n\n#  undef ssl3_cbc_record_digest_supported\n#  define ssl3_cbc_record_digest_supported        ssl3_cbc_record_digest_support\n#  undef ssl_check_clienthello_tlsext_late\n#  define ssl_check_clienthello_tlsext_late       ssl_check_clihello_tlsext_late\n#  undef ssl_check_clienthello_tlsext_early\n#  define ssl_check_clienthello_tlsext_early      ssl_check_clihello_tlsext_early\n\n/* Hack some RSA long names */\n#  undef RSA_padding_check_PKCS1_OAEP_mgf1\n#  define RSA_padding_check_PKCS1_OAEP_mgf1       RSA_pad_check_PKCS1_OAEP_mgf1\n\n/* Hack some ENGINE long names */\n#  undef ENGINE_get_default_BN_mod_exp_crt\n#  define ENGINE_get_default_BN_mod_exp_crt       ENGINE_get_def_BN_mod_exp_crt\n#  undef ENGINE_set_default_BN_mod_exp_crt\n#  define ENGINE_set_default_BN_mod_exp_crt       ENGINE_set_def_BN_mod_exp_crt\n#  undef ENGINE_set_load_privkey_function\n#  define ENGINE_set_load_privkey_function        ENGINE_set_load_privkey_fn\n#  undef ENGINE_get_load_privkey_function\n#  define ENGINE_get_load_privkey_function        ENGINE_get_load_privkey_fn\n#  undef ENGINE_unregister_pkey_asn1_meths\n#  define ENGINE_unregister_pkey_asn1_meths       ENGINE_unreg_pkey_asn1_meths\n#  undef ENGINE_register_all_pkey_asn1_meths\n#  define ENGINE_register_all_pkey_asn1_meths     ENGINE_reg_all_pkey_asn1_meths\n#  undef ENGINE_set_default_pkey_asn1_meths\n#  define ENGINE_set_default_pkey_asn1_meths      ENGINE_set_def_pkey_asn1_meths\n#  undef ENGINE_get_pkey_asn1_meth_engine\n#  define ENGINE_get_pkey_asn1_meth_engine        ENGINE_get_pkey_asn1_meth_eng\n#  undef ENGINE_set_load_ssl_client_cert_function\n#  define ENGINE_set_load_ssl_client_cert_function \\\n                                                ENGINE_set_ld_ssl_clnt_cert_fn\n#  undef ENGINE_get_ssl_client_cert_function\n#  define ENGINE_get_ssl_client_cert_function     ENGINE_get_ssl_client_cert_fn\n\n/* Hack some long OCSP names */\n#  undef OCSP_REQUEST_get_ext_by_critical\n#  define OCSP_REQUEST_get_ext_by_critical        OCSP_REQUEST_get_ext_by_crit\n#  undef OCSP_BASICRESP_get_ext_by_critical\n#  define OCSP_BASICRESP_get_ext_by_critical      OCSP_BASICRESP_get_ext_by_crit\n#  undef OCSP_SINGLERESP_get_ext_by_critical\n#  define OCSP_SINGLERESP_get_ext_by_critical     OCSP_SINGLERESP_get_ext_by_crit\n\n/* Hack some long DES names */\n#  undef _ossl_old_des_ede3_cfb64_encrypt\n#  define _ossl_old_des_ede3_cfb64_encrypt        _ossl_odes_ede3_cfb64_encrypt\n#  undef _ossl_old_des_ede3_ofb64_encrypt\n#  define _ossl_old_des_ede3_ofb64_encrypt        _ossl_odes_ede3_ofb64_encrypt\n\n/* Hack some long EVP names */\n#  undef OPENSSL_add_all_algorithms_noconf\n#  define OPENSSL_add_all_algorithms_noconf       OPENSSL_add_all_algo_noconf\n#  undef OPENSSL_add_all_algorithms_conf\n#  define OPENSSL_add_all_algorithms_conf         OPENSSL_add_all_algo_conf\n#  undef EVP_PKEY_meth_set_verify_recover\n#  define EVP_PKEY_meth_set_verify_recover        EVP_PKEY_meth_set_vrfy_recover\n\n/* Hack some long EC names */\n#  undef EC_GROUP_set_point_conversion_form\n#  define EC_GROUP_set_point_conversion_form      EC_GROUP_set_point_conv_form\n#  undef EC_GROUP_get_point_conversion_form\n#  define EC_GROUP_get_point_conversion_form      EC_GROUP_get_point_conv_form\n#  undef EC_GROUP_clear_free_all_extra_data\n#  define EC_GROUP_clear_free_all_extra_data      EC_GROUP_clr_free_all_xtra_data\n#  undef EC_KEY_set_public_key_affine_coordinates\n#  define EC_KEY_set_public_key_affine_coordinates \\\n                                                EC_KEY_set_pub_key_aff_coords\n#  undef EC_POINT_set_Jprojective_coordinates_GFp\n#  define EC_POINT_set_Jprojective_coordinates_GFp \\\n                                                EC_POINT_set_Jproj_coords_GFp\n#  undef EC_POINT_get_Jprojective_coordinates_GFp\n#  define EC_POINT_get_Jprojective_coordinates_GFp \\\n                                                EC_POINT_get_Jproj_coords_GFp\n#  undef EC_POINT_set_affine_coordinates_GFp\n#  define EC_POINT_set_affine_coordinates_GFp     EC_POINT_set_affine_coords_GFp\n#  undef EC_POINT_get_affine_coordinates_GFp\n#  define EC_POINT_get_affine_coordinates_GFp     EC_POINT_get_affine_coords_GFp\n#  undef EC_POINT_set_compressed_coordinates_GFp\n#  define EC_POINT_set_compressed_coordinates_GFp EC_POINT_set_compr_coords_GFp\n#  undef EC_POINT_set_affine_coordinates_GF2m\n#  define EC_POINT_set_affine_coordinates_GF2m    EC_POINT_set_affine_coords_GF2m\n#  undef EC_POINT_get_affine_coordinates_GF2m\n#  define EC_POINT_get_affine_coordinates_GF2m    EC_POINT_get_affine_coords_GF2m\n#  undef EC_POINT_set_compressed_coordinates_GF2m\n#  define EC_POINT_set_compressed_coordinates_GF2m \\\n                                                EC_POINT_set_compr_coords_GF2m\n#  undef ec_GF2m_simple_group_clear_finish\n#  define ec_GF2m_simple_group_clear_finish       ec_GF2m_simple_grp_clr_finish\n#  undef ec_GF2m_simple_group_check_discriminant\n#  define ec_GF2m_simple_group_check_discriminant ec_GF2m_simple_grp_chk_discrim\n#  undef ec_GF2m_simple_point_clear_finish\n#  define ec_GF2m_simple_point_clear_finish       ec_GF2m_simple_pt_clr_finish\n#  undef ec_GF2m_simple_point_set_to_infinity\n#  define ec_GF2m_simple_point_set_to_infinity    ec_GF2m_simple_pt_set_to_inf\n#  undef ec_GF2m_simple_points_make_affine\n#  define ec_GF2m_simple_points_make_affine       ec_GF2m_simple_pts_make_affine\n#  undef ec_GF2m_simple_point_set_affine_coordinates\n#  define ec_GF2m_simple_point_set_affine_coordinates \\\n                                                ec_GF2m_smp_pt_set_af_coords\n#  undef ec_GF2m_simple_point_get_affine_coordinates\n#  define ec_GF2m_simple_point_get_affine_coordinates \\\n                                                ec_GF2m_smp_pt_get_af_coords\n#  undef ec_GF2m_simple_set_compressed_coordinates\n#  define ec_GF2m_simple_set_compressed_coordinates \\\n                                                ec_GF2m_smp_set_compr_coords\n#  undef ec_GFp_simple_group_set_curve_GFp\n#  define ec_GFp_simple_group_set_curve_GFp       ec_GFp_simple_grp_set_curve_GFp\n#  undef ec_GFp_simple_group_get_curve_GFp\n#  define ec_GFp_simple_group_get_curve_GFp       ec_GFp_simple_grp_get_curve_GFp\n#  undef ec_GFp_simple_group_clear_finish\n#  define ec_GFp_simple_group_clear_finish        ec_GFp_simple_grp_clear_finish\n#  undef ec_GFp_simple_group_set_generator\n#  define ec_GFp_simple_group_set_generator       ec_GFp_simple_grp_set_generator\n#  undef ec_GFp_simple_group_get0_generator\n#  define ec_GFp_simple_group_get0_generator      ec_GFp_simple_grp_gt0_generator\n#  undef ec_GFp_simple_group_get_cofactor\n#  define ec_GFp_simple_group_get_cofactor        ec_GFp_simple_grp_get_cofactor\n#  undef ec_GFp_simple_point_clear_finish\n#  define ec_GFp_simple_point_clear_finish        ec_GFp_simple_pt_clear_finish\n#  undef ec_GFp_simple_point_set_to_infinity\n#  define ec_GFp_simple_point_set_to_infinity     ec_GFp_simple_pt_set_to_inf\n#  undef ec_GFp_simple_points_make_affine\n#  define ec_GFp_simple_points_make_affine        ec_GFp_simple_pts_make_affine\n#  undef ec_GFp_simple_set_Jprojective_coordinates_GFp\n#  define ec_GFp_simple_set_Jprojective_coordinates_GFp \\\n                                                ec_GFp_smp_set_Jproj_coords_GFp\n#  undef ec_GFp_simple_get_Jprojective_coordinates_GFp\n#  define ec_GFp_simple_get_Jprojective_coordinates_GFp \\\n                                                ec_GFp_smp_get_Jproj_coords_GFp\n#  undef ec_GFp_simple_point_set_affine_coordinates_GFp\n#  define ec_GFp_simple_point_set_affine_coordinates_GFp \\\n                                                ec_GFp_smp_pt_set_af_coords_GFp\n#  undef ec_GFp_simple_point_get_affine_coordinates_GFp\n#  define ec_GFp_simple_point_get_affine_coordinates_GFp \\\n                                                ec_GFp_smp_pt_get_af_coords_GFp\n#  undef ec_GFp_simple_set_compressed_coordinates_GFp\n#  define ec_GFp_simple_set_compressed_coordinates_GFp \\\n                                                ec_GFp_smp_set_compr_coords_GFp\n#  undef ec_GFp_simple_point_set_affine_coordinates\n#  define ec_GFp_simple_point_set_affine_coordinates \\\n                                                ec_GFp_smp_pt_set_af_coords\n#  undef ec_GFp_simple_point_get_affine_coordinates\n#  define ec_GFp_simple_point_get_affine_coordinates \\\n                                                ec_GFp_smp_pt_get_af_coords\n#  undef ec_GFp_simple_set_compressed_coordinates\n#  define ec_GFp_simple_set_compressed_coordinates \\\n                                                ec_GFp_smp_set_compr_coords\n#  undef ec_GFp_simple_group_check_discriminant\n#  define ec_GFp_simple_group_check_discriminant  ec_GFp_simple_grp_chk_discrim\n\n/* Hack som long STORE names */\n#  undef STORE_method_set_initialise_function\n#  define STORE_method_set_initialise_function    STORE_meth_set_initialise_fn\n#  undef STORE_method_set_cleanup_function\n#  define STORE_method_set_cleanup_function       STORE_meth_set_cleanup_fn\n#  undef STORE_method_set_generate_function\n#  define STORE_method_set_generate_function      STORE_meth_set_generate_fn\n#  undef STORE_method_set_modify_function\n#  define STORE_method_set_modify_function        STORE_meth_set_modify_fn\n#  undef STORE_method_set_revoke_function\n#  define STORE_method_set_revoke_function        STORE_meth_set_revoke_fn\n#  undef STORE_method_set_delete_function\n#  define STORE_method_set_delete_function        STORE_meth_set_delete_fn\n#  undef STORE_method_set_list_start_function\n#  define STORE_method_set_list_start_function    STORE_meth_set_list_start_fn\n#  undef STORE_method_set_list_next_function\n#  define STORE_method_set_list_next_function     STORE_meth_set_list_next_fn\n#  undef STORE_method_set_list_end_function\n#  define STORE_method_set_list_end_function      STORE_meth_set_list_end_fn\n#  undef STORE_method_set_update_store_function\n#  define STORE_method_set_update_store_function  STORE_meth_set_update_store_fn\n#  undef STORE_method_set_lock_store_function\n#  define STORE_method_set_lock_store_function    STORE_meth_set_lock_store_fn\n#  undef STORE_method_set_unlock_store_function\n#  define STORE_method_set_unlock_store_function  STORE_meth_set_unlock_store_fn\n#  undef STORE_method_get_initialise_function\n#  define STORE_method_get_initialise_function    STORE_meth_get_initialise_fn\n#  undef STORE_method_get_cleanup_function\n#  define STORE_method_get_cleanup_function       STORE_meth_get_cleanup_fn\n#  undef STORE_method_get_generate_function\n#  define STORE_method_get_generate_function      STORE_meth_get_generate_fn\n#  undef STORE_method_get_modify_function\n#  define STORE_method_get_modify_function        STORE_meth_get_modify_fn\n#  undef STORE_method_get_revoke_function\n#  define STORE_method_get_revoke_function        STORE_meth_get_revoke_fn\n#  undef STORE_method_get_delete_function\n#  define STORE_method_get_delete_function        STORE_meth_get_delete_fn\n#  undef STORE_method_get_list_start_function\n#  define STORE_method_get_list_start_function    STORE_meth_get_list_start_fn\n#  undef STORE_method_get_list_next_function\n#  define STORE_method_get_list_next_function     STORE_meth_get_list_next_fn\n#  undef STORE_method_get_list_end_function\n#  define STORE_method_get_list_end_function      STORE_meth_get_list_end_fn\n#  undef STORE_method_get_update_store_function\n#  define STORE_method_get_update_store_function  STORE_meth_get_update_store_fn\n#  undef STORE_method_get_lock_store_function\n#  define STORE_method_get_lock_store_function    STORE_meth_get_lock_store_fn\n#  undef STORE_method_get_unlock_store_function\n#  define STORE_method_get_unlock_store_function  STORE_meth_get_unlock_store_fn\n\n/* Hack some long TS names */\n#  undef TS_RESP_CTX_set_status_info_cond\n#  define TS_RESP_CTX_set_status_info_cond        TS_RESP_CTX_set_stat_info_cond\n#  undef TS_RESP_CTX_set_clock_precision_digits\n#  define TS_RESP_CTX_set_clock_precision_digits  TS_RESP_CTX_set_clk_prec_digits\n#  undef TS_CONF_set_clock_precision_digits\n#  define TS_CONF_set_clock_precision_digits      TS_CONF_set_clk_prec_digits\n\n/* Hack some long CMS names */\n#  undef CMS_RecipientInfo_ktri_get0_algs\n#  define CMS_RecipientInfo_ktri_get0_algs        CMS_RecipInfo_ktri_get0_algs\n#  undef CMS_RecipientInfo_ktri_get0_signer_id\n#  define CMS_RecipientInfo_ktri_get0_signer_id   CMS_RecipInfo_ktri_get0_sigr_id\n#  undef CMS_OtherRevocationInfoFormat_it\n#  define CMS_OtherRevocationInfoFormat_it        CMS_OtherRevocInfoFormat_it\n#  undef CMS_KeyAgreeRecipientIdentifier_it\n#  define CMS_KeyAgreeRecipientIdentifier_it      CMS_KeyAgreeRecipIdentifier_it\n#  undef CMS_OriginatorIdentifierOrKey_it\n#  define CMS_OriginatorIdentifierOrKey_it        CMS_OriginatorIdOrKey_it\n#  undef cms_SignerIdentifier_get0_signer_id\n#  define cms_SignerIdentifier_get0_signer_id     cms_SignerId_get0_signer_id\n#  undef CMS_RecipientInfo_kari_get0_orig_id\n#  define CMS_RecipientInfo_kari_get0_orig_id     CMS_RecipInfo_kari_get0_orig_id\n#  undef CMS_RecipientInfo_kari_get0_reks\n#  define CMS_RecipientInfo_kari_get0_reks        CMS_RecipInfo_kari_get0_reks\n#  undef CMS_RecipientEncryptedKey_cert_cmp\n#  define CMS_RecipientEncryptedKey_cert_cmp      CMS_RecipEncryptedKey_cert_cmp\n#  undef CMS_RecipientInfo_kari_set0_pkey\n#  define CMS_RecipientInfo_kari_set0_pkey        CMS_RecipInfo_kari_set0_pkey\n#  undef CMS_RecipientEncryptedKey_get0_id\n#  define CMS_RecipientEncryptedKey_get0_id       CMS_RecipEncryptedKey_get0_id\n#  undef CMS_RecipientInfo_kari_orig_id_cmp\n#  define CMS_RecipientInfo_kari_orig_id_cmp      CMS_RecipInfo_kari_orig_id_cmp\n\n/* Hack some long DTLS1 names */\n#  undef dtls1_retransmit_buffered_messages\n#  define dtls1_retransmit_buffered_messages      dtls1_retransmit_buffered_msgs\n\n/* Hack some long SRP names */\n#  undef SRP_generate_server_master_secret\n#  define SRP_generate_server_master_secret       SRP_gen_server_master_secret\n#  undef SRP_generate_client_master_secret\n#  define SRP_generate_client_master_secret       SRP_gen_client_master_secret\n\n/* Hack some long UI names */\n#  undef UI_method_get_prompt_constructor\n#  define UI_method_get_prompt_constructor        UI_method_get_prompt_constructr\n#  undef UI_method_set_prompt_constructor\n#  define UI_method_set_prompt_constructor        UI_method_set_prompt_constructr\n\n# endif                         /* defined OPENSSL_SYS_VMS */\n\n/* Case insensitive linking causes problems.... */\n# if defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_OS2)\n#  undef ERR_load_CRYPTO_strings\n#  define ERR_load_CRYPTO_strings                 ERR_load_CRYPTOlib_strings\n#  undef OCSP_crlID_new\n#  define OCSP_crlID_new                          OCSP_crlID2_new\n\n#  undef d2i_ECPARAMETERS\n#  define d2i_ECPARAMETERS                        d2i_UC_ECPARAMETERS\n#  undef i2d_ECPARAMETERS\n#  define i2d_ECPARAMETERS                        i2d_UC_ECPARAMETERS\n#  undef d2i_ECPKPARAMETERS\n#  define d2i_ECPKPARAMETERS                      d2i_UC_ECPKPARAMETERS\n#  undef i2d_ECPKPARAMETERS\n#  define i2d_ECPKPARAMETERS                      i2d_UC_ECPKPARAMETERS\n\n/*\n * These functions do not seem to exist! However, I'm paranoid... Original\n * command in x509v3.h: These functions are being redefined in another\n * directory, and clash when the linker is case-insensitive, so let's hide\n * them a little, by giving them an extra 'o' at the beginning of the name...\n */\n#  undef X509v3_cleanup_extensions\n#  define X509v3_cleanup_extensions               oX509v3_cleanup_extensions\n#  undef X509v3_add_extension\n#  define X509v3_add_extension                    oX509v3_add_extension\n#  undef X509v3_add_netscape_extensions\n#  define X509v3_add_netscape_extensions          oX509v3_add_netscape_extensions\n#  undef X509v3_add_standard_extensions\n#  define X509v3_add_standard_extensions          oX509v3_add_standard_extensions\n\n/* This one clashes with CMS_data_create */\n#  undef cms_Data_create\n#  define cms_Data_create                         priv_cms_Data_create\n\n# endif\n\n#endif                          /* ! defined HEADER_VMS_IDHACKS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/tls1.h",
    "content": "/* ssl/tls1.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright (c) 1998-2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n *\n * Portions of the attached software (\"Contribution\") are developed by\n * SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.\n *\n * The Contribution is licensed pursuant to the OpenSSL open source\n * license provided above.\n *\n * ECC cipher suite support in OpenSSL originally written by\n * Vipul Gupta and Sumit Gupta of Sun Microsystems Laboratories.\n *\n */\n/* ====================================================================\n * Copyright 2005 Nokia. All rights reserved.\n *\n * The portions of the attached software (\"Contribution\") is developed by\n * Nokia Corporation and is licensed pursuant to the OpenSSL open source\n * license.\n *\n * The Contribution, originally written by Mika Kousa and Pasi Eronen of\n * Nokia Corporation, consists of the \"PSK\" (Pre-Shared Key) ciphersuites\n * support (see RFC 4279) to OpenSSL.\n *\n * No patent licenses or other rights except those expressly stated in\n * the OpenSSL open source license shall be deemed granted or received\n * expressly, by implication, estoppel, or otherwise.\n *\n * No assurances are provided by Nokia that the Contribution does not\n * infringe the patent or other intellectual property rights of any third\n * party or that the license provides you with all the necessary rights\n * to make use of the Contribution.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND. IN\n * ADDITION TO THE DISCLAIMERS INCLUDED IN THE LICENSE, NOKIA\n * SPECIFICALLY DISCLAIMS ANY LIABILITY FOR CLAIMS BROUGHT BY YOU OR ANY\n * OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OR\n * OTHERWISE.\n */\n\n#ifndef HEADER_TLS1_H\n# define HEADER_TLS1_H\n\n# include <openssl/buffer.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES    0\n\n# define TLS1_VERSION                    0x0301\n# define TLS1_1_VERSION                  0x0302\n# define TLS1_2_VERSION                  0x0303\n# define TLS_MAX_VERSION                 TLS1_2_VERSION\n\n# define TLS1_VERSION_MAJOR              0x03\n# define TLS1_VERSION_MINOR              0x01\n\n# define TLS1_1_VERSION_MAJOR            0x03\n# define TLS1_1_VERSION_MINOR            0x02\n\n# define TLS1_2_VERSION_MAJOR            0x03\n# define TLS1_2_VERSION_MINOR            0x03\n\n# define TLS1_get_version(s) \\\n                ((s->version >> 8) == TLS1_VERSION_MAJOR ? s->version : 0)\n\n# define TLS1_get_client_version(s) \\\n                ((s->client_version >> 8) == TLS1_VERSION_MAJOR ? s->client_version : 0)\n\n# define TLS1_AD_DECRYPTION_FAILED       21\n# define TLS1_AD_RECORD_OVERFLOW         22\n# define TLS1_AD_UNKNOWN_CA              48/* fatal */\n# define TLS1_AD_ACCESS_DENIED           49/* fatal */\n# define TLS1_AD_DECODE_ERROR            50/* fatal */\n# define TLS1_AD_DECRYPT_ERROR           51\n# define TLS1_AD_EXPORT_RESTRICTION      60/* fatal */\n# define TLS1_AD_PROTOCOL_VERSION        70/* fatal */\n# define TLS1_AD_INSUFFICIENT_SECURITY   71/* fatal */\n# define TLS1_AD_INTERNAL_ERROR          80/* fatal */\n# define TLS1_AD_INAPPROPRIATE_FALLBACK  86/* fatal */\n# define TLS1_AD_USER_CANCELLED          90\n# define TLS1_AD_NO_RENEGOTIATION        100\n/* codes 110-114 are from RFC3546 */\n# define TLS1_AD_UNSUPPORTED_EXTENSION   110\n# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111\n# define TLS1_AD_UNRECOGNIZED_NAME       112\n# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113\n# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114\n# define TLS1_AD_UNKNOWN_PSK_IDENTITY    115/* fatal */\n\n/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */\n# define TLSEXT_TYPE_server_name                 0\n# define TLSEXT_TYPE_max_fragment_length         1\n# define TLSEXT_TYPE_client_certificate_url      2\n# define TLSEXT_TYPE_trusted_ca_keys             3\n# define TLSEXT_TYPE_truncated_hmac              4\n# define TLSEXT_TYPE_status_request              5\n/* ExtensionType values from RFC4681 */\n# define TLSEXT_TYPE_user_mapping                6\n/* ExtensionType values from RFC5878 */\n# define TLSEXT_TYPE_client_authz                7\n# define TLSEXT_TYPE_server_authz                8\n/* ExtensionType values from RFC6091 */\n# define TLSEXT_TYPE_cert_type           9\n\n/* ExtensionType values from RFC4492 */\n# define TLSEXT_TYPE_elliptic_curves             10\n# define TLSEXT_TYPE_ec_point_formats            11\n\n/* ExtensionType value from RFC5054 */\n# define TLSEXT_TYPE_srp                         12\n\n/* ExtensionType values from RFC5246 */\n# define TLSEXT_TYPE_signature_algorithms        13\n\n/* ExtensionType value from RFC5764 */\n# define TLSEXT_TYPE_use_srtp    14\n\n/* ExtensionType value from RFC5620 */\n# define TLSEXT_TYPE_heartbeat   15\n\n/* ExtensionType value from draft-ietf-tls-applayerprotoneg-00 */\n# define TLSEXT_TYPE_application_layer_protocol_negotiation 16\n\n/*\n * ExtensionType value for TLS padding extension.\n * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml\n * http://tools.ietf.org/html/draft-agl-tls-padding-03\n */\n# define TLSEXT_TYPE_padding     21\n\n/* ExtensionType value from RFC4507 */\n# define TLSEXT_TYPE_session_ticket              35\n\n/* ExtensionType value from draft-rescorla-tls-opaque-prf-input-00.txt */\n# if 0\n/*\n * will have to be provided externally for now ,\n * i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183\n * using whatever extension number you'd like to try\n */\n#  define TLSEXT_TYPE_opaque_prf_input           ??\n# endif\n\n/* Temporary extension type */\n# define TLSEXT_TYPE_renegotiate                 0xff01\n\n# ifndef OPENSSL_NO_NEXTPROTONEG\n/* This is not an IANA defined extension number */\n#  define TLSEXT_TYPE_next_proto_neg              13172\n# endif\n\n/* NameType value from RFC 3546 */\n# define TLSEXT_NAMETYPE_host_name 0\n/* status request value from RFC 3546 */\n# define TLSEXT_STATUSTYPE_ocsp 1\n\n/* ECPointFormat values from draft-ietf-tls-ecc-12 */\n# define TLSEXT_ECPOINTFORMAT_first                      0\n# define TLSEXT_ECPOINTFORMAT_uncompressed               0\n# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime  1\n# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2  2\n# define TLSEXT_ECPOINTFORMAT_last                       2\n\n/* Signature and hash algorithms from RFC 5246 */\n\n# define TLSEXT_signature_anonymous                      0\n# define TLSEXT_signature_rsa                            1\n# define TLSEXT_signature_dsa                            2\n# define TLSEXT_signature_ecdsa                          3\n\n/* Total number of different signature algorithms */\n# define TLSEXT_signature_num                            4\n\n# define TLSEXT_hash_none                                0\n# define TLSEXT_hash_md5                                 1\n# define TLSEXT_hash_sha1                                2\n# define TLSEXT_hash_sha224                              3\n# define TLSEXT_hash_sha256                              4\n# define TLSEXT_hash_sha384                              5\n# define TLSEXT_hash_sha512                              6\n\n/* Total number of different digest algorithms */\n\n# define TLSEXT_hash_num                                 7\n\n/* Flag set for unrecognised algorithms */\n# define TLSEXT_nid_unknown                              0x1000000\n\n/* ECC curves */\n\n# define TLSEXT_curve_P_256                              23\n# define TLSEXT_curve_P_384                              24\n\n# ifndef OPENSSL_NO_TLSEXT\n\n#  define TLSEXT_MAXLEN_host_name 255\n\nconst char *SSL_get_servername(const SSL *s, const int type);\nint SSL_get_servername_type(const SSL *s);\n/*\n * SSL_export_keying_material exports a value derived from the master secret,\n * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and\n * optional context. (Since a zero length context is allowed, the |use_context|\n * flag controls whether a context is included.) It returns 1 on success and\n * zero otherwise.\n */\nint SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,\n                               const char *label, size_t llen,\n                               const unsigned char *p, size_t plen,\n                               int use_context);\n\nint SSL_get_sigalgs(SSL *s, int idx,\n                    int *psign, int *phash, int *psignandhash,\n                    unsigned char *rsig, unsigned char *rhash);\n\nint SSL_get_shared_sigalgs(SSL *s, int idx,\n                           int *psign, int *phash, int *psignandhash,\n                           unsigned char *rsig, unsigned char *rhash);\n\nint SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain);\n\n#  define SSL_set_tlsext_host_name(s,name) \\\nSSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name)\n\n#  define SSL_set_tlsext_debug_callback(ssl, cb) \\\nSSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,(void (*)(void))cb)\n\n#  define SSL_set_tlsext_debug_arg(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0, (void *)arg)\n\n#  define SSL_set_tlsext_status_type(ssl, type) \\\nSSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type, NULL)\n\n#  define SSL_get_tlsext_status_exts(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg)\n\n#  define SSL_set_tlsext_status_exts(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0, (void *)arg)\n\n#  define SSL_get_tlsext_status_ids(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg)\n\n#  define SSL_set_tlsext_status_ids(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0, (void *)arg)\n\n#  define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \\\nSSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0, (void *)arg)\n\n#  define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \\\nSSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen, (void *)arg)\n\n#  define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \\\nSSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,(void (*)(void))cb)\n\n#  define SSL_TLSEXT_ERR_OK 0\n#  define SSL_TLSEXT_ERR_ALERT_WARNING 1\n#  define SSL_TLSEXT_ERR_ALERT_FATAL 2\n#  define SSL_TLSEXT_ERR_NOACK 3\n\n#  define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \\\nSSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg)\n\n#  define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_GET_TLSEXT_TICKET_KEYS,(keylen),(keys))\n#  define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \\\n        SSL_CTX_ctrl((ctx),SSL_CTRL_SET_TLSEXT_TICKET_KEYS,(keylen),(keys))\n\n#  define SSL_CTX_set_tlsext_status_cb(ssl, cb) \\\nSSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,(void (*)(void))cb)\n\n#  define SSL_CTX_set_tlsext_status_arg(ssl, arg) \\\nSSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0, (void *)arg)\n\n#  define SSL_set_tlsext_opaque_prf_input(s, src, len) \\\nSSL_ctrl(s,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT, len, src)\n#  define SSL_CTX_set_tlsext_opaque_prf_input_callback(ctx, cb) \\\nSSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB, (void (*)(void))cb)\n#  define SSL_CTX_set_tlsext_opaque_prf_input_callback_arg(ctx, arg) \\\nSSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG, 0, arg)\n\n#  define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \\\nSSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)\n\n#  ifndef OPENSSL_NO_HEARTBEATS\n#   define SSL_TLSEXT_HB_ENABLED                           0x01\n#   define SSL_TLSEXT_HB_DONT_SEND_REQUESTS        0x02\n#   define SSL_TLSEXT_HB_DONT_RECV_REQUESTS        0x04\n\n#   define SSL_get_tlsext_heartbeat_pending(ssl) \\\n        SSL_ctrl((ssl),SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING,0,NULL)\n#   define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \\\n        SSL_ctrl((ssl),SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL)\n#  endif\n# endif\n\n/* PSK ciphersuites from 4279 */\n# define TLS1_CK_PSK_WITH_RC4_128_SHA                    0x0300008A\n# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA               0x0300008B\n# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA                0x0300008C\n# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA                0x0300008D\n\n/*\n * Additional TLS ciphersuites from expired Internet Draft\n * draft-ietf-tls-56-bit-ciphersuites-01.txt (available if\n * TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see s3_lib.c).  We\n * actually treat them like SSL 3.0 ciphers, which we probably shouldn't.\n * Note that the first two are actually not in the IDs.\n */\n# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5          0x03000060/* not in\n                                                                    * ID */\n# define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5      0x03000061/* not in\n                                                                    * ID */\n# define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA         0x03000062\n# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA     0x03000063\n# define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA          0x03000064\n# define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA      0x03000065\n# define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA                0x03000066\n\n/* AES ciphersuites from RFC3268 */\n\n# define TLS1_CK_RSA_WITH_AES_128_SHA                    0x0300002F\n# define TLS1_CK_DH_DSS_WITH_AES_128_SHA                 0x03000030\n# define TLS1_CK_DH_RSA_WITH_AES_128_SHA                 0x03000031\n# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA                0x03000032\n# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA                0x03000033\n# define TLS1_CK_ADH_WITH_AES_128_SHA                    0x03000034\n\n# define TLS1_CK_RSA_WITH_AES_256_SHA                    0x03000035\n# define TLS1_CK_DH_DSS_WITH_AES_256_SHA                 0x03000036\n# define TLS1_CK_DH_RSA_WITH_AES_256_SHA                 0x03000037\n# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA                0x03000038\n# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA                0x03000039\n# define TLS1_CK_ADH_WITH_AES_256_SHA                    0x0300003A\n\n/* TLS v1.2 ciphersuites */\n# define TLS1_CK_RSA_WITH_NULL_SHA256                    0x0300003B\n# define TLS1_CK_RSA_WITH_AES_128_SHA256                 0x0300003C\n# define TLS1_CK_RSA_WITH_AES_256_SHA256                 0x0300003D\n# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256              0x0300003E\n# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256              0x0300003F\n# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256             0x03000040\n\n/* Camellia ciphersuites from RFC4132 */\n# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA           0x03000041\n# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA        0x03000042\n# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA        0x03000043\n# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA       0x03000044\n# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA       0x03000045\n# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA           0x03000046\n\n/* TLS v1.2 ciphersuites */\n# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256             0x03000067\n# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256              0x03000068\n# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256              0x03000069\n# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256             0x0300006A\n# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256             0x0300006B\n# define TLS1_CK_ADH_WITH_AES_128_SHA256                 0x0300006C\n# define TLS1_CK_ADH_WITH_AES_256_SHA256                 0x0300006D\n\n/* Camellia ciphersuites from RFC4132 */\n# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA           0x03000084\n# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA        0x03000085\n# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA        0x03000086\n# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA       0x03000087\n# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA       0x03000088\n# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA           0x03000089\n\n/* SEED ciphersuites from RFC4162 */\n# define TLS1_CK_RSA_WITH_SEED_SHA                       0x03000096\n# define TLS1_CK_DH_DSS_WITH_SEED_SHA                    0x03000097\n# define TLS1_CK_DH_RSA_WITH_SEED_SHA                    0x03000098\n# define TLS1_CK_DHE_DSS_WITH_SEED_SHA                   0x03000099\n# define TLS1_CK_DHE_RSA_WITH_SEED_SHA                   0x0300009A\n# define TLS1_CK_ADH_WITH_SEED_SHA                       0x0300009B\n\n/* TLS v1.2 GCM ciphersuites from RFC5288 */\n# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256             0x0300009C\n# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384             0x0300009D\n# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256         0x0300009E\n# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384         0x0300009F\n# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256          0x030000A0\n# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384          0x030000A1\n# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256         0x030000A2\n# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384         0x030000A3\n# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256          0x030000A4\n# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384          0x030000A5\n# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256             0x030000A6\n# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384             0x030000A7\n\n/*\n * ECC ciphersuites from draft-ietf-tls-ecc-12.txt with changes soon to be in\n * draft 13\n */\n# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA                0x0300C001\n# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA             0x0300C002\n# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA        0x0300C003\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA         0x0300C004\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA         0x0300C005\n\n# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA               0x0300C006\n# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA            0x0300C007\n# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA       0x0300C008\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA        0x0300C009\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA        0x0300C00A\n\n# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA                  0x0300C00B\n# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA               0x0300C00C\n# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA          0x0300C00D\n# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA           0x0300C00E\n# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA           0x0300C00F\n\n# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA                 0x0300C010\n# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA              0x0300C011\n# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA         0x0300C012\n# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA          0x0300C013\n# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA          0x0300C014\n\n# define TLS1_CK_ECDH_anon_WITH_NULL_SHA                 0x0300C015\n# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA              0x0300C016\n# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA         0x0300C017\n# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA          0x0300C018\n# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA          0x0300C019\n\n/* SRP ciphersuites from RFC 5054 */\n# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA           0x0300C01A\n# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA       0x0300C01B\n# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA       0x0300C01C\n# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA            0x0300C01D\n# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA        0x0300C01E\n# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA        0x0300C01F\n# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA            0x0300C020\n# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA        0x0300C021\n# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA        0x0300C022\n\n/* ECDH HMAC based ciphersuites from RFC5289 */\n\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256         0x0300C023\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384         0x0300C024\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256          0x0300C025\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384          0x0300C026\n# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256           0x0300C027\n# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384           0x0300C028\n# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256            0x0300C029\n# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384            0x0300C02A\n\n/* ECDH GCM based ciphersuites from RFC5289 */\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256     0x0300C02B\n# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384     0x0300C02C\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256      0x0300C02D\n# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384      0x0300C02E\n# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256       0x0300C02F\n# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384       0x0300C030\n# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256        0x0300C031\n# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384        0x0300C032\n\n/*\n * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave\n * some DHE ciphers names with \"EDH\" + * instead of \"DHE\".  Going forward, we\n * should be using DHE + * everywhere, though we may indefinitely maintain\n * aliases for users + * or configurations that used \"EDH\" +\n */\n# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5         \"EXP1024-RC4-MD5\"\n# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5     \"EXP1024-RC2-CBC-MD5\"\n# define TLS1_TXT_RSA_EXPORT1024_WITH_DES_CBC_SHA        \"EXP1024-DES-CBC-SHA\"\n# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA    \"EXP1024-DHE-DSS-DES-CBC-SHA\"\n# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_SHA         \"EXP1024-RC4-SHA\"\n# define TLS1_TXT_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA     \"EXP1024-DHE-DSS-RC4-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA               \"DHE-DSS-RC4-SHA\"\n\n/* AES ciphersuites from RFC3268 */\n# define TLS1_TXT_RSA_WITH_AES_128_SHA                   \"AES128-SHA\"\n# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA                \"DH-DSS-AES128-SHA\"\n# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA                \"DH-RSA-AES128-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA               \"DHE-DSS-AES128-SHA\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA               \"DHE-RSA-AES128-SHA\"\n# define TLS1_TXT_ADH_WITH_AES_128_SHA                   \"ADH-AES128-SHA\"\n\n# define TLS1_TXT_RSA_WITH_AES_256_SHA                   \"AES256-SHA\"\n# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA                \"DH-DSS-AES256-SHA\"\n# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA                \"DH-RSA-AES256-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA               \"DHE-DSS-AES256-SHA\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA               \"DHE-RSA-AES256-SHA\"\n# define TLS1_TXT_ADH_WITH_AES_256_SHA                   \"ADH-AES256-SHA\"\n\n/* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */\n# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA               \"ECDH-ECDSA-NULL-SHA\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA            \"ECDH-ECDSA-RC4-SHA\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA       \"ECDH-ECDSA-DES-CBC3-SHA\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA        \"ECDH-ECDSA-AES128-SHA\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA        \"ECDH-ECDSA-AES256-SHA\"\n\n# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA              \"ECDHE-ECDSA-NULL-SHA\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA           \"ECDHE-ECDSA-RC4-SHA\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA      \"ECDHE-ECDSA-DES-CBC3-SHA\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA       \"ECDHE-ECDSA-AES128-SHA\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA       \"ECDHE-ECDSA-AES256-SHA\"\n\n# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA                 \"ECDH-RSA-NULL-SHA\"\n# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA              \"ECDH-RSA-RC4-SHA\"\n# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA         \"ECDH-RSA-DES-CBC3-SHA\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA          \"ECDH-RSA-AES128-SHA\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA          \"ECDH-RSA-AES256-SHA\"\n\n# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA                \"ECDHE-RSA-NULL-SHA\"\n# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA             \"ECDHE-RSA-RC4-SHA\"\n# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA        \"ECDHE-RSA-DES-CBC3-SHA\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA         \"ECDHE-RSA-AES128-SHA\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA         \"ECDHE-RSA-AES256-SHA\"\n\n# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA                \"AECDH-NULL-SHA\"\n# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA             \"AECDH-RC4-SHA\"\n# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA        \"AECDH-DES-CBC3-SHA\"\n# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA         \"AECDH-AES128-SHA\"\n# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA         \"AECDH-AES256-SHA\"\n\n/* PSK ciphersuites from RFC 4279 */\n# define TLS1_TXT_PSK_WITH_RC4_128_SHA                   \"PSK-RC4-SHA\"\n# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA              \"PSK-3DES-EDE-CBC-SHA\"\n# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA               \"PSK-AES128-CBC-SHA\"\n# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA               \"PSK-AES256-CBC-SHA\"\n\n/* SRP ciphersuite from RFC 5054 */\n# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA          \"SRP-3DES-EDE-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA      \"SRP-RSA-3DES-EDE-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA      \"SRP-DSS-3DES-EDE-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA           \"SRP-AES-128-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA       \"SRP-RSA-AES-128-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA       \"SRP-DSS-AES-128-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA           \"SRP-AES-256-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA       \"SRP-RSA-AES-256-CBC-SHA\"\n# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA       \"SRP-DSS-AES-256-CBC-SHA\"\n\n/* Camellia ciphersuites from RFC4132 */\n# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA          \"CAMELLIA128-SHA\"\n# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA       \"DH-DSS-CAMELLIA128-SHA\"\n# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA       \"DH-RSA-CAMELLIA128-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA      \"DHE-DSS-CAMELLIA128-SHA\"\n# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA      \"DHE-RSA-CAMELLIA128-SHA\"\n# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA          \"ADH-CAMELLIA128-SHA\"\n\n# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA          \"CAMELLIA256-SHA\"\n# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA       \"DH-DSS-CAMELLIA256-SHA\"\n# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA       \"DH-RSA-CAMELLIA256-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA      \"DHE-DSS-CAMELLIA256-SHA\"\n# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA      \"DHE-RSA-CAMELLIA256-SHA\"\n# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA          \"ADH-CAMELLIA256-SHA\"\n\n/* SEED ciphersuites from RFC4162 */\n# define TLS1_TXT_RSA_WITH_SEED_SHA                      \"SEED-SHA\"\n# define TLS1_TXT_DH_DSS_WITH_SEED_SHA                   \"DH-DSS-SEED-SHA\"\n# define TLS1_TXT_DH_RSA_WITH_SEED_SHA                   \"DH-RSA-SEED-SHA\"\n# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA                  \"DHE-DSS-SEED-SHA\"\n# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA                  \"DHE-RSA-SEED-SHA\"\n# define TLS1_TXT_ADH_WITH_SEED_SHA                      \"ADH-SEED-SHA\"\n\n/* TLS v1.2 ciphersuites */\n# define TLS1_TXT_RSA_WITH_NULL_SHA256                   \"NULL-SHA256\"\n# define TLS1_TXT_RSA_WITH_AES_128_SHA256                \"AES128-SHA256\"\n# define TLS1_TXT_RSA_WITH_AES_256_SHA256                \"AES256-SHA256\"\n# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256             \"DH-DSS-AES128-SHA256\"\n# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256             \"DH-RSA-AES128-SHA256\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256            \"DHE-DSS-AES128-SHA256\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256            \"DHE-RSA-AES128-SHA256\"\n# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256             \"DH-DSS-AES256-SHA256\"\n# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256             \"DH-RSA-AES256-SHA256\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256            \"DHE-DSS-AES256-SHA256\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256            \"DHE-RSA-AES256-SHA256\"\n# define TLS1_TXT_ADH_WITH_AES_128_SHA256                \"ADH-AES128-SHA256\"\n# define TLS1_TXT_ADH_WITH_AES_256_SHA256                \"ADH-AES256-SHA256\"\n\n/* TLS v1.2 GCM ciphersuites from RFC5288 */\n# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256            \"AES128-GCM-SHA256\"\n# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384            \"AES256-GCM-SHA384\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256        \"DHE-RSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384        \"DHE-RSA-AES256-GCM-SHA384\"\n# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256         \"DH-RSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384         \"DH-RSA-AES256-GCM-SHA384\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256        \"DHE-DSS-AES128-GCM-SHA256\"\n# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384        \"DHE-DSS-AES256-GCM-SHA384\"\n# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256         \"DH-DSS-AES128-GCM-SHA256\"\n# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384         \"DH-DSS-AES256-GCM-SHA384\"\n# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256            \"ADH-AES128-GCM-SHA256\"\n# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384            \"ADH-AES256-GCM-SHA384\"\n\n/* ECDH HMAC based ciphersuites from RFC5289 */\n\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256    \"ECDHE-ECDSA-AES128-SHA256\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384    \"ECDHE-ECDSA-AES256-SHA384\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256     \"ECDH-ECDSA-AES128-SHA256\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384     \"ECDH-ECDSA-AES256-SHA384\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256      \"ECDHE-RSA-AES128-SHA256\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384      \"ECDHE-RSA-AES256-SHA384\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256       \"ECDH-RSA-AES128-SHA256\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384       \"ECDH-RSA-AES256-SHA384\"\n\n/* ECDH GCM based ciphersuites from RFC5289 */\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256    \"ECDHE-ECDSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384    \"ECDHE-ECDSA-AES256-GCM-SHA384\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256     \"ECDH-ECDSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384     \"ECDH-ECDSA-AES256-GCM-SHA384\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256      \"ECDHE-RSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384      \"ECDHE-RSA-AES256-GCM-SHA384\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256       \"ECDH-RSA-AES128-GCM-SHA256\"\n# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384       \"ECDH-RSA-AES256-GCM-SHA384\"\n\n# define TLS_CT_RSA_SIGN                 1\n# define TLS_CT_DSS_SIGN                 2\n# define TLS_CT_RSA_FIXED_DH             3\n# define TLS_CT_DSS_FIXED_DH             4\n# define TLS_CT_ECDSA_SIGN               64\n# define TLS_CT_RSA_FIXED_ECDH           65\n# define TLS_CT_ECDSA_FIXED_ECDH         66\n# define TLS_CT_GOST94_SIGN              21\n# define TLS_CT_GOST01_SIGN              22\n/*\n * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see\n * comment there)\n */\n# define TLS_CT_NUMBER                   9\n\n# define TLS1_FINISH_MAC_LENGTH          12\n\n# define TLS_MD_MAX_CONST_SIZE                   20\n# define TLS_MD_CLIENT_FINISH_CONST              \"client finished\"\n# define TLS_MD_CLIENT_FINISH_CONST_SIZE         15\n# define TLS_MD_SERVER_FINISH_CONST              \"server finished\"\n# define TLS_MD_SERVER_FINISH_CONST_SIZE         15\n# define TLS_MD_SERVER_WRITE_KEY_CONST           \"server write key\"\n# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE      16\n# define TLS_MD_KEY_EXPANSION_CONST              \"key expansion\"\n# define TLS_MD_KEY_EXPANSION_CONST_SIZE         13\n# define TLS_MD_CLIENT_WRITE_KEY_CONST           \"client write key\"\n# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE      16\n# define TLS_MD_SERVER_WRITE_KEY_CONST           \"server write key\"\n# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE      16\n# define TLS_MD_IV_BLOCK_CONST                   \"IV block\"\n# define TLS_MD_IV_BLOCK_CONST_SIZE              8\n# define TLS_MD_MASTER_SECRET_CONST              \"master secret\"\n# define TLS_MD_MASTER_SECRET_CONST_SIZE         13\n\n# ifdef CHARSET_EBCDIC\n#  undef TLS_MD_CLIENT_FINISH_CONST\n/*\n * client finished\n */\n#  define TLS_MD_CLIENT_FINISH_CONST    \"\\x63\\x6c\\x69\\x65\\x6e\\x74\\x20\\x66\\x69\\x6e\\x69\\x73\\x68\\x65\\x64\"\n\n#  undef TLS_MD_SERVER_FINISH_CONST\n/*\n * server finished\n */\n#  define TLS_MD_SERVER_FINISH_CONST    \"\\x73\\x65\\x72\\x76\\x65\\x72\\x20\\x66\\x69\\x6e\\x69\\x73\\x68\\x65\\x64\"\n\n#  undef TLS_MD_SERVER_WRITE_KEY_CONST\n/*\n * server write key\n */\n#  define TLS_MD_SERVER_WRITE_KEY_CONST \"\\x73\\x65\\x72\\x76\\x65\\x72\\x20\\x77\\x72\\x69\\x74\\x65\\x20\\x6b\\x65\\x79\"\n\n#  undef TLS_MD_KEY_EXPANSION_CONST\n/*\n * key expansion\n */\n#  define TLS_MD_KEY_EXPANSION_CONST    \"\\x6b\\x65\\x79\\x20\\x65\\x78\\x70\\x61\\x6e\\x73\\x69\\x6f\\x6e\"\n\n#  undef TLS_MD_CLIENT_WRITE_KEY_CONST\n/*\n * client write key\n */\n#  define TLS_MD_CLIENT_WRITE_KEY_CONST \"\\x63\\x6c\\x69\\x65\\x6e\\x74\\x20\\x77\\x72\\x69\\x74\\x65\\x20\\x6b\\x65\\x79\"\n\n#  undef TLS_MD_SERVER_WRITE_KEY_CONST\n/*\n * server write key\n */\n#  define TLS_MD_SERVER_WRITE_KEY_CONST \"\\x73\\x65\\x72\\x76\\x65\\x72\\x20\\x77\\x72\\x69\\x74\\x65\\x20\\x6b\\x65\\x79\"\n\n#  undef TLS_MD_IV_BLOCK_CONST\n/*\n * IV block\n */\n#  define TLS_MD_IV_BLOCK_CONST         \"\\x49\\x56\\x20\\x62\\x6c\\x6f\\x63\\x6b\"\n\n#  undef TLS_MD_MASTER_SECRET_CONST\n/*\n * master secret\n */\n#  define TLS_MD_MASTER_SECRET_CONST    \"\\x6d\\x61\\x73\\x74\\x65\\x72\\x20\\x73\\x65\\x63\\x72\\x65\\x74\"\n# endif\n\n/* TLS Session Ticket extension struct */\nstruct tls_session_ticket_ext_st {\n    unsigned short length;\n    void *data;\n};\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ts.h",
    "content": "/* crypto/ts/ts.h */\n/*\n * Written by Zoltan Glozik (zglozik@opentsa.org) for the OpenSSL project\n * 2002, 2003, 2004.\n */\n/* ====================================================================\n * Copyright (c) 2006 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_TS_H\n# define HEADER_TS_H\n\n# include <openssl/opensslconf.h>\n# include <openssl/symhacks.h>\n# ifndef OPENSSL_NO_BUFFER\n#  include <openssl/buffer.h>\n# endif\n# ifndef OPENSSL_NO_EVP\n#  include <openssl/evp.h>\n# endif\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/stack.h>\n# include <openssl/asn1.h>\n# include <openssl/safestack.h>\n\n# ifndef OPENSSL_NO_RSA\n#  include <openssl/rsa.h>\n# endif\n\n# ifndef OPENSSL_NO_DSA\n#  include <openssl/dsa.h>\n# endif\n\n# ifndef OPENSSL_NO_DH\n#  include <openssl/dh.h>\n# endif\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef WIN32\n/* Under Win32 this is defined in wincrypt.h */\n#  undef X509_NAME\n# endif\n\n# include <openssl/x509.h>\n# include <openssl/x509v3.h>\n\n/*-\nMessageImprint ::= SEQUENCE  {\n     hashAlgorithm                AlgorithmIdentifier,\n     hashedMessage                OCTET STRING  }\n*/\n\ntypedef struct TS_msg_imprint_st {\n    X509_ALGOR *hash_algo;\n    ASN1_OCTET_STRING *hashed_msg;\n} TS_MSG_IMPRINT;\n\n/*-\nTimeStampReq ::= SEQUENCE  {\n   version                  INTEGER  { v1(1) },\n   messageImprint           MessageImprint,\n     --a hash algorithm OID and the hash value of the data to be\n     --time-stamped\n   reqPolicy                TSAPolicyId                OPTIONAL,\n   nonce                    INTEGER                    OPTIONAL,\n   certReq                  BOOLEAN                    DEFAULT FALSE,\n   extensions               [0] IMPLICIT Extensions    OPTIONAL  }\n*/\n\ntypedef struct TS_req_st {\n    ASN1_INTEGER *version;\n    TS_MSG_IMPRINT *msg_imprint;\n    ASN1_OBJECT *policy_id;     /* OPTIONAL */\n    ASN1_INTEGER *nonce;        /* OPTIONAL */\n    ASN1_BOOLEAN cert_req;      /* DEFAULT FALSE */\n    STACK_OF(X509_EXTENSION) *extensions; /* [0] OPTIONAL */\n} TS_REQ;\n\n/*-\nAccuracy ::= SEQUENCE {\n                seconds        INTEGER           OPTIONAL,\n                millis     [0] INTEGER  (1..999) OPTIONAL,\n                micros     [1] INTEGER  (1..999) OPTIONAL  }\n*/\n\ntypedef struct TS_accuracy_st {\n    ASN1_INTEGER *seconds;\n    ASN1_INTEGER *millis;\n    ASN1_INTEGER *micros;\n} TS_ACCURACY;\n\n/*-\nTSTInfo ::= SEQUENCE  {\n    version                      INTEGER  { v1(1) },\n    policy                       TSAPolicyId,\n    messageImprint               MessageImprint,\n      -- MUST have the same value as the similar field in\n      -- TimeStampReq\n    serialNumber                 INTEGER,\n     -- Time-Stamping users MUST be ready to accommodate integers\n     -- up to 160 bits.\n    genTime                      GeneralizedTime,\n    accuracy                     Accuracy                 OPTIONAL,\n    ordering                     BOOLEAN             DEFAULT FALSE,\n    nonce                        INTEGER                  OPTIONAL,\n      -- MUST be present if the similar field was present\n      -- in TimeStampReq.  In that case it MUST have the same value.\n    tsa                          [0] GeneralName          OPTIONAL,\n    extensions                   [1] IMPLICIT Extensions  OPTIONAL   }\n*/\n\ntypedef struct TS_tst_info_st {\n    ASN1_INTEGER *version;\n    ASN1_OBJECT *policy_id;\n    TS_MSG_IMPRINT *msg_imprint;\n    ASN1_INTEGER *serial;\n    ASN1_GENERALIZEDTIME *time;\n    TS_ACCURACY *accuracy;\n    ASN1_BOOLEAN ordering;\n    ASN1_INTEGER *nonce;\n    GENERAL_NAME *tsa;\n    STACK_OF(X509_EXTENSION) *extensions;\n} TS_TST_INFO;\n\n/*-\nPKIStatusInfo ::= SEQUENCE {\n    status        PKIStatus,\n    statusString  PKIFreeText     OPTIONAL,\n    failInfo      PKIFailureInfo  OPTIONAL  }\n\nFrom RFC 1510 - section 3.1.1:\nPKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String\n        -- text encoded as UTF-8 String (note:  each UTF8String SHOULD\n        -- include an RFC 1766 language tag to indicate the language\n        -- of the contained text)\n*/\n\n/* Possible values for status. See ts_resp_print.c && ts_resp_verify.c. */\n\n# define TS_STATUS_GRANTED                       0\n# define TS_STATUS_GRANTED_WITH_MODS             1\n# define TS_STATUS_REJECTION                     2\n# define TS_STATUS_WAITING                       3\n# define TS_STATUS_REVOCATION_WARNING            4\n# define TS_STATUS_REVOCATION_NOTIFICATION       5\n\n/*\n * Possible values for failure_info. See ts_resp_print.c && ts_resp_verify.c\n */\n\n# define TS_INFO_BAD_ALG                 0\n# define TS_INFO_BAD_REQUEST             2\n# define TS_INFO_BAD_DATA_FORMAT         5\n# define TS_INFO_TIME_NOT_AVAILABLE      14\n# define TS_INFO_UNACCEPTED_POLICY       15\n# define TS_INFO_UNACCEPTED_EXTENSION    16\n# define TS_INFO_ADD_INFO_NOT_AVAILABLE  17\n# define TS_INFO_SYSTEM_FAILURE          25\n\ntypedef struct TS_status_info_st {\n    ASN1_INTEGER *status;\n    STACK_OF(ASN1_UTF8STRING) *text;\n    ASN1_BIT_STRING *failure_info;\n} TS_STATUS_INFO;\n\nDECLARE_STACK_OF(ASN1_UTF8STRING)\nDECLARE_ASN1_SET_OF(ASN1_UTF8STRING)\n\n/*-\nTimeStampResp ::= SEQUENCE  {\n     status                  PKIStatusInfo,\n     timeStampToken          TimeStampToken     OPTIONAL }\n*/\n\ntypedef struct TS_resp_st {\n    TS_STATUS_INFO *status_info;\n    PKCS7 *token;\n    TS_TST_INFO *tst_info;\n} TS_RESP;\n\n/* The structure below would belong to the ESS component. */\n\n/*-\nIssuerSerial ::= SEQUENCE {\n        issuer                   GeneralNames,\n        serialNumber             CertificateSerialNumber\n        }\n*/\n\ntypedef struct ESS_issuer_serial {\n    STACK_OF(GENERAL_NAME) *issuer;\n    ASN1_INTEGER *serial;\n} ESS_ISSUER_SERIAL;\n\n/*-\nESSCertID ::=  SEQUENCE {\n        certHash                 Hash,\n        issuerSerial             IssuerSerial OPTIONAL\n}\n*/\n\ntypedef struct ESS_cert_id {\n    ASN1_OCTET_STRING *hash;    /* Always SHA-1 digest. */\n    ESS_ISSUER_SERIAL *issuer_serial;\n} ESS_CERT_ID;\n\nDECLARE_STACK_OF(ESS_CERT_ID)\nDECLARE_ASN1_SET_OF(ESS_CERT_ID)\n\n/*-\nSigningCertificate ::=  SEQUENCE {\n       certs        SEQUENCE OF ESSCertID,\n       policies     SEQUENCE OF PolicyInformation OPTIONAL\n}\n*/\n\ntypedef struct ESS_signing_cert {\n    STACK_OF(ESS_CERT_ID) *cert_ids;\n    STACK_OF(POLICYINFO) *policy_info;\n} ESS_SIGNING_CERT;\n\nTS_REQ *TS_REQ_new(void);\nvoid TS_REQ_free(TS_REQ *a);\nint i2d_TS_REQ(const TS_REQ *a, unsigned char **pp);\nTS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length);\n\nTS_REQ *TS_REQ_dup(TS_REQ *a);\n\nTS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a);\nint i2d_TS_REQ_fp(FILE *fp, TS_REQ *a);\nTS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a);\nint i2d_TS_REQ_bio(BIO *fp, TS_REQ *a);\n\nTS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void);\nvoid TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a);\nint i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp);\nTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a,\n                                   const unsigned char **pp, long length);\n\nTS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a);\n\nTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a);\nint i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a);\nTS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT **a);\nint i2d_TS_MSG_IMPRINT_bio(BIO *fp, TS_MSG_IMPRINT *a);\n\nTS_RESP *TS_RESP_new(void);\nvoid TS_RESP_free(TS_RESP *a);\nint i2d_TS_RESP(const TS_RESP *a, unsigned char **pp);\nTS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length);\nTS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token);\nTS_RESP *TS_RESP_dup(TS_RESP *a);\n\nTS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a);\nint i2d_TS_RESP_fp(FILE *fp, TS_RESP *a);\nTS_RESP *d2i_TS_RESP_bio(BIO *fp, TS_RESP **a);\nint i2d_TS_RESP_bio(BIO *fp, TS_RESP *a);\n\nTS_STATUS_INFO *TS_STATUS_INFO_new(void);\nvoid TS_STATUS_INFO_free(TS_STATUS_INFO *a);\nint i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp);\nTS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a,\n                                   const unsigned char **pp, long length);\nTS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a);\n\nTS_TST_INFO *TS_TST_INFO_new(void);\nvoid TS_TST_INFO_free(TS_TST_INFO *a);\nint i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp);\nTS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp,\n                             long length);\nTS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a);\n\nTS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a);\nint i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a);\nTS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO **a);\nint i2d_TS_TST_INFO_bio(BIO *fp, TS_TST_INFO *a);\n\nTS_ACCURACY *TS_ACCURACY_new(void);\nvoid TS_ACCURACY_free(TS_ACCURACY *a);\nint i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp);\nTS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp,\n                             long length);\nTS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a);\n\nESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void);\nvoid ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a);\nint i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp);\nESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a,\n                                         const unsigned char **pp,\n                                         long length);\nESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a);\n\nESS_CERT_ID *ESS_CERT_ID_new(void);\nvoid ESS_CERT_ID_free(ESS_CERT_ID *a);\nint i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp);\nESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp,\n                             long length);\nESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a);\n\nESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void);\nvoid ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a);\nint i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp);\nESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a,\n                                       const unsigned char **pp, long length);\nESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a);\n\nvoid ERR_load_TS_strings(void);\n\nint TS_REQ_set_version(TS_REQ *a, long version);\nlong TS_REQ_get_version(const TS_REQ *a);\n\nint TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint);\nTS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a);\n\nint TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg);\nX509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a);\n\nint TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len);\nASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a);\n\nint TS_REQ_set_policy_id(TS_REQ *a, ASN1_OBJECT *policy);\nASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a);\n\nint TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce);\nconst ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a);\n\nint TS_REQ_set_cert_req(TS_REQ *a, int cert_req);\nint TS_REQ_get_cert_req(const TS_REQ *a);\n\nSTACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a);\nvoid TS_REQ_ext_free(TS_REQ *a);\nint TS_REQ_get_ext_count(TS_REQ *a);\nint TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos);\nint TS_REQ_get_ext_by_OBJ(TS_REQ *a, ASN1_OBJECT *obj, int lastpos);\nint TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos);\nX509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc);\nX509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc);\nint TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc);\nvoid *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx);\n\n/* Function declarations for TS_REQ defined in ts/ts_req_print.c */\n\nint TS_REQ_print_bio(BIO *bio, TS_REQ *a);\n\n/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */\n\nint TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info);\nTS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a);\n\n/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */\nvoid TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info);\nPKCS7 *TS_RESP_get_token(TS_RESP *a);\nTS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a);\n\nint TS_TST_INFO_set_version(TS_TST_INFO *a, long version);\nlong TS_TST_INFO_get_version(const TS_TST_INFO *a);\n\nint TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id);\nASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a);\n\nint TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint);\nTS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a);\n\nint TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial);\nconst ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a);\n\nint TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime);\nconst ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a);\n\nint TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy);\nTS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a);\n\nint TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds);\nconst ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a);\n\nint TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis);\nconst ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a);\n\nint TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros);\nconst ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a);\n\nint TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering);\nint TS_TST_INFO_get_ordering(const TS_TST_INFO *a);\n\nint TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce);\nconst ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a);\n\nint TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa);\nGENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a);\n\nSTACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a);\nvoid TS_TST_INFO_ext_free(TS_TST_INFO *a);\nint TS_TST_INFO_get_ext_count(TS_TST_INFO *a);\nint TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos);\nint TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, ASN1_OBJECT *obj, int lastpos);\nint TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos);\nX509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc);\nX509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc);\nint TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc);\nvoid *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx);\n\n/*\n * Declarations related to response generation, defined in ts/ts_resp_sign.c.\n */\n\n/* Optional flags for response generation. */\n\n/* Don't include the TSA name in response. */\n# define TS_TSA_NAME             0x01\n\n/* Set ordering to true in response. */\n# define TS_ORDERING             0x02\n\n/*\n * Include the signer certificate and the other specified certificates in\n * the ESS signing certificate attribute beside the PKCS7 signed data.\n * Only the signer certificates is included by default.\n */\n# define TS_ESS_CERT_ID_CHAIN    0x04\n\n/* Forward declaration. */\nstruct TS_resp_ctx;\n\n/* This must return a unique number less than 160 bits long. */\ntypedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *);\n\n/*\n * This must return the seconds and microseconds since Jan 1, 1970 in the sec\n * and usec variables allocated by the caller. Return non-zero for success\n * and zero for failure.\n */\ntypedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec,\n                           long *usec);\n\n/*\n * This must process the given extension. It can modify the TS_TST_INFO\n * object of the context. Return values: !0 (processed), 0 (error, it must\n * set the status info/failure info of the response).\n */\ntypedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *,\n                                void *);\n\ntypedef struct TS_resp_ctx {\n    X509 *signer_cert;\n    EVP_PKEY *signer_key;\n    STACK_OF(X509) *certs;      /* Certs to include in signed data. */\n    STACK_OF(ASN1_OBJECT) *policies; /* Acceptable policies. */\n    ASN1_OBJECT *default_policy; /* It may appear in policies, too. */\n    STACK_OF(EVP_MD) *mds;      /* Acceptable message digests. */\n    ASN1_INTEGER *seconds;      /* accuracy, 0 means not specified. */\n    ASN1_INTEGER *millis;       /* accuracy, 0 means not specified. */\n    ASN1_INTEGER *micros;       /* accuracy, 0 means not specified. */\n    unsigned clock_precision_digits; /* fraction of seconds in time stamp\n                                      * token. */\n    unsigned flags;             /* Optional info, see values above. */\n    /* Callback functions. */\n    TS_serial_cb serial_cb;\n    void *serial_cb_data;       /* User data for serial_cb. */\n    TS_time_cb time_cb;\n    void *time_cb_data;         /* User data for time_cb. */\n    TS_extension_cb extension_cb;\n    void *extension_cb_data;    /* User data for extension_cb. */\n    /* These members are used only while creating the response. */\n    TS_REQ *request;\n    TS_RESP *response;\n    TS_TST_INFO *tst_info;\n} TS_RESP_CTX;\n\nDECLARE_STACK_OF(EVP_MD)\nDECLARE_ASN1_SET_OF(EVP_MD)\n\n/* Creates a response context that can be used for generating responses. */\nTS_RESP_CTX *TS_RESP_CTX_new(void);\nvoid TS_RESP_CTX_free(TS_RESP_CTX *ctx);\n\n/* This parameter must be set. */\nint TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer);\n\n/* This parameter must be set. */\nint TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key);\n\n/* This parameter must be set. */\nint TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy);\n\n/* No additional certs are included in the response by default. */\nint TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs);\n\n/*\n * Adds a new acceptable policy, only the default policy is accepted by\n * default.\n */\nint TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy);\n\n/*\n * Adds a new acceptable message digest. Note that no message digests are\n * accepted by default. The md argument is shared with the caller.\n */\nint TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md);\n\n/* Accuracy is not included by default. */\nint TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx,\n                             int secs, int millis, int micros);\n\n/*\n * Clock precision digits, i.e. the number of decimal digits: '0' means sec,\n * '3' msec, '6' usec, and so on. Default is 0.\n */\nint TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx,\n                                           unsigned clock_precision_digits);\n/* At most we accept usec precision. */\n# define TS_MAX_CLOCK_PRECISION_DIGITS   6\n\n/* No flags are set by default. */\nvoid TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags);\n\n/* Default callback always returns a constant. */\nvoid TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data);\n\n/* Default callback uses the gettimeofday() and gmtime() system calls. */\nvoid TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data);\n\n/*\n * Default callback rejects all extensions. The extension callback is called\n * when the TS_TST_INFO object is already set up and not signed yet.\n */\n/* FIXME: extension handling is not tested yet. */\nvoid TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx,\n                                  TS_extension_cb cb, void *data);\n\n/* The following methods can be used in the callbacks. */\nint TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx,\n                                int status, const char *text);\n\n/* Sets the status info only if it is still TS_STATUS_GRANTED. */\nint TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx,\n                                     int status, const char *text);\n\nint TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure);\n\n/* The get methods below can be used in the extension callback. */\nTS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx);\n\nTS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx);\n\n/*\n * Creates the signed TS_TST_INFO and puts it in TS_RESP.\n * In case of errors it sets the status info properly.\n * Returns NULL only in case of memory allocation/fatal error.\n */\nTS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio);\n\n/*\n * Declarations related to response verification,\n * they are defined in ts/ts_resp_verify.c.\n */\n\nint TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs,\n                             X509_STORE *store, X509 **signer_out);\n\n/* Context structure for the generic verify method. */\n\n/* Verify the signer's certificate and the signature of the response. */\n# define TS_VFY_SIGNATURE        (1u << 0)\n/* Verify the version number of the response. */\n# define TS_VFY_VERSION          (1u << 1)\n/* Verify if the policy supplied by the user matches the policy of the TSA. */\n# define TS_VFY_POLICY           (1u << 2)\n/*\n * Verify the message imprint provided by the user. This flag should not be\n * specified with TS_VFY_DATA.\n */\n# define TS_VFY_IMPRINT          (1u << 3)\n/*\n * Verify the message imprint computed by the verify method from the user\n * provided data and the MD algorithm of the response. This flag should not\n * be specified with TS_VFY_IMPRINT.\n */\n# define TS_VFY_DATA             (1u << 4)\n/* Verify the nonce value. */\n# define TS_VFY_NONCE            (1u << 5)\n/* Verify if the TSA name field matches the signer certificate. */\n# define TS_VFY_SIGNER           (1u << 6)\n/* Verify if the TSA name field equals to the user provided name. */\n# define TS_VFY_TSA_NAME         (1u << 7)\n\n/* You can use the following convenience constants. */\n# define TS_VFY_ALL_IMPRINT      (TS_VFY_SIGNATURE       \\\n                                 | TS_VFY_VERSION       \\\n                                 | TS_VFY_POLICY        \\\n                                 | TS_VFY_IMPRINT       \\\n                                 | TS_VFY_NONCE         \\\n                                 | TS_VFY_SIGNER        \\\n                                 | TS_VFY_TSA_NAME)\n# define TS_VFY_ALL_DATA         (TS_VFY_SIGNATURE       \\\n                                 | TS_VFY_VERSION       \\\n                                 | TS_VFY_POLICY        \\\n                                 | TS_VFY_DATA          \\\n                                 | TS_VFY_NONCE         \\\n                                 | TS_VFY_SIGNER        \\\n                                 | TS_VFY_TSA_NAME)\n\ntypedef struct TS_verify_ctx {\n    /* Set this to the union of TS_VFY_... flags you want to carry out. */\n    unsigned flags;\n    /* Must be set only with TS_VFY_SIGNATURE. certs is optional. */\n    X509_STORE *store;\n    STACK_OF(X509) *certs;\n    /* Must be set only with TS_VFY_POLICY. */\n    ASN1_OBJECT *policy;\n    /*\n     * Must be set only with TS_VFY_IMPRINT. If md_alg is NULL, the\n     * algorithm from the response is used.\n     */\n    X509_ALGOR *md_alg;\n    unsigned char *imprint;\n    unsigned imprint_len;\n    /* Must be set only with TS_VFY_DATA. */\n    BIO *data;\n    /* Must be set only with TS_VFY_TSA_NAME. */\n    ASN1_INTEGER *nonce;\n    /* Must be set only with TS_VFY_TSA_NAME. */\n    GENERAL_NAME *tsa_name;\n} TS_VERIFY_CTX;\n\nint TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response);\nint TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token);\n\n/*\n * Declarations related to response verification context,\n * they are defined in ts/ts_verify_ctx.c.\n */\n\n/* Set all fields to zero. */\nTS_VERIFY_CTX *TS_VERIFY_CTX_new(void);\nvoid TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx);\nvoid TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx);\nvoid TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx);\n\n/*-\n * If ctx is NULL, it allocates and returns a new object, otherwise\n * it returns ctx. It initialises all the members as follows:\n * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE)\n * certs = NULL\n * store = NULL\n * policy = policy from the request or NULL if absent (in this case\n *      TS_VFY_POLICY is cleared from flags as well)\n * md_alg = MD algorithm from request\n * imprint, imprint_len = imprint from request\n * data = NULL\n * nonce, nonce_len = nonce from the request or NULL if absent (in this case\n *      TS_VFY_NONCE is cleared from flags as well)\n * tsa_name = NULL\n * Important: after calling this method TS_VFY_SIGNATURE should be added!\n */\nTS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx);\n\n/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */\n\nint TS_RESP_print_bio(BIO *bio, TS_RESP *a);\nint TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a);\nint TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a);\n\n/* Common utility functions defined in ts/ts_lib.c */\n\nint TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num);\nint TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj);\nint TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions);\nint TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg);\nint TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg);\n\n/*\n * Function declarations for handling configuration options, defined in\n * ts/ts_conf.c\n */\n\nX509 *TS_CONF_load_cert(const char *file);\nSTACK_OF(X509) *TS_CONF_load_certs(const char *file);\nEVP_PKEY *TS_CONF_load_key(const char *file, const char *pass);\nconst char *TS_CONF_get_tsa_section(CONF *conf, const char *section);\nint TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb,\n                       TS_RESP_CTX *ctx);\nint TS_CONF_set_crypto_device(CONF *conf, const char *section,\n                              const char *device);\nint TS_CONF_set_default_engine(const char *name);\nint TS_CONF_set_signer_cert(CONF *conf, const char *section,\n                            const char *cert, TS_RESP_CTX *ctx);\nint TS_CONF_set_certs(CONF *conf, const char *section, const char *certs,\n                      TS_RESP_CTX *ctx);\nint TS_CONF_set_signer_key(CONF *conf, const char *section,\n                           const char *key, const char *pass,\n                           TS_RESP_CTX *ctx);\nint TS_CONF_set_def_policy(CONF *conf, const char *section,\n                           const char *policy, TS_RESP_CTX *ctx);\nint TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx);\nint TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx);\nint TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx);\nint TS_CONF_set_clock_precision_digits(CONF *conf, const char *section,\n                                       TS_RESP_CTX *ctx);\nint TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx);\nint TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx);\nint TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section,\n                                  TS_RESP_CTX *ctx);\n\n/* -------------------------------------------------- */\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_TS_strings(void);\n\n/* Error codes for the TS functions. */\n\n/* Function codes. */\n# define TS_F_D2I_TS_RESP                                 147\n# define TS_F_DEF_SERIAL_CB                               110\n# define TS_F_DEF_TIME_CB                                 111\n# define TS_F_ESS_ADD_SIGNING_CERT                        112\n# define TS_F_ESS_CERT_ID_NEW_INIT                        113\n# define TS_F_ESS_SIGNING_CERT_NEW_INIT                   114\n# define TS_F_INT_TS_RESP_VERIFY_TOKEN                    149\n# define TS_F_PKCS7_TO_TS_TST_INFO                        148\n# define TS_F_TS_ACCURACY_SET_MICROS                      115\n# define TS_F_TS_ACCURACY_SET_MILLIS                      116\n# define TS_F_TS_ACCURACY_SET_SECONDS                     117\n# define TS_F_TS_CHECK_IMPRINTS                           100\n# define TS_F_TS_CHECK_NONCES                             101\n# define TS_F_TS_CHECK_POLICY                             102\n# define TS_F_TS_CHECK_SIGNING_CERTS                      103\n# define TS_F_TS_CHECK_STATUS_INFO                        104\n# define TS_F_TS_COMPUTE_IMPRINT                          145\n# define TS_F_TS_CONF_SET_DEFAULT_ENGINE                  146\n# define TS_F_TS_GET_STATUS_TEXT                          105\n# define TS_F_TS_MSG_IMPRINT_SET_ALGO                     118\n# define TS_F_TS_REQ_SET_MSG_IMPRINT                      119\n# define TS_F_TS_REQ_SET_NONCE                            120\n# define TS_F_TS_REQ_SET_POLICY_ID                        121\n# define TS_F_TS_RESP_CREATE_RESPONSE                     122\n# define TS_F_TS_RESP_CREATE_TST_INFO                     123\n# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO                124\n# define TS_F_TS_RESP_CTX_ADD_MD                          125\n# define TS_F_TS_RESP_CTX_ADD_POLICY                      126\n# define TS_F_TS_RESP_CTX_NEW                             127\n# define TS_F_TS_RESP_CTX_SET_ACCURACY                    128\n# define TS_F_TS_RESP_CTX_SET_CERTS                       129\n# define TS_F_TS_RESP_CTX_SET_DEF_POLICY                  130\n# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT                 131\n# define TS_F_TS_RESP_CTX_SET_STATUS_INFO                 132\n# define TS_F_TS_RESP_GET_POLICY                          133\n# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION          134\n# define TS_F_TS_RESP_SET_STATUS_INFO                     135\n# define TS_F_TS_RESP_SET_TST_INFO                        150\n# define TS_F_TS_RESP_SIGN                                136\n# define TS_F_TS_RESP_VERIFY_SIGNATURE                    106\n# define TS_F_TS_RESP_VERIFY_TOKEN                        107\n# define TS_F_TS_TST_INFO_SET_ACCURACY                    137\n# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT                 138\n# define TS_F_TS_TST_INFO_SET_NONCE                       139\n# define TS_F_TS_TST_INFO_SET_POLICY_ID                   140\n# define TS_F_TS_TST_INFO_SET_SERIAL                      141\n# define TS_F_TS_TST_INFO_SET_TIME                        142\n# define TS_F_TS_TST_INFO_SET_TSA                         143\n# define TS_F_TS_VERIFY                                   108\n# define TS_F_TS_VERIFY_CERT                              109\n# define TS_F_TS_VERIFY_CTX_NEW                           144\n\n/* Reason codes. */\n# define TS_R_BAD_PKCS7_TYPE                              132\n# define TS_R_BAD_TYPE                                    133\n# define TS_R_CERTIFICATE_VERIFY_ERROR                    100\n# define TS_R_COULD_NOT_SET_ENGINE                        127\n# define TS_R_COULD_NOT_SET_TIME                          115\n# define TS_R_D2I_TS_RESP_INT_FAILED                      128\n# define TS_R_DETACHED_CONTENT                            134\n# define TS_R_ESS_ADD_SIGNING_CERT_ERROR                  116\n# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR               101\n# define TS_R_INVALID_NULL_POINTER                        102\n# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE          117\n# define TS_R_MESSAGE_IMPRINT_MISMATCH                    103\n# define TS_R_NONCE_MISMATCH                              104\n# define TS_R_NONCE_NOT_RETURNED                          105\n# define TS_R_NO_CONTENT                                  106\n# define TS_R_NO_TIME_STAMP_TOKEN                         107\n# define TS_R_PKCS7_ADD_SIGNATURE_ERROR                   118\n# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR                 119\n# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED                 129\n# define TS_R_POLICY_MISMATCH                             108\n# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE      120\n# define TS_R_RESPONSE_SETUP_ERROR                        121\n# define TS_R_SIGNATURE_FAILURE                           109\n# define TS_R_THERE_MUST_BE_ONE_SIGNER                    110\n# define TS_R_TIME_SYSCALL_ERROR                          122\n# define TS_R_TOKEN_NOT_PRESENT                           130\n# define TS_R_TOKEN_PRESENT                               131\n# define TS_R_TSA_NAME_MISMATCH                           111\n# define TS_R_TSA_UNTRUSTED                               112\n# define TS_R_TST_INFO_SETUP_ERROR                        123\n# define TS_R_TS_DATASIGN                                 124\n# define TS_R_UNACCEPTABLE_POLICY                         125\n# define TS_R_UNSUPPORTED_MD_ALGORITHM                    126\n# define TS_R_UNSUPPORTED_VERSION                         113\n# define TS_R_WRONG_CONTENT_TYPE                          114\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/txt_db.h",
    "content": "/* crypto/txt_db/txt_db.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_TXT_DB_H\n# define HEADER_TXT_DB_H\n\n# include <openssl/opensslconf.h>\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/stack.h>\n# include <openssl/lhash.h>\n\n# define DB_ERROR_OK                     0\n# define DB_ERROR_MALLOC                 1\n# define DB_ERROR_INDEX_CLASH            2\n# define DB_ERROR_INDEX_OUT_OF_RANGE     3\n# define DB_ERROR_NO_INDEX               4\n# define DB_ERROR_INSERT_INDEX_CLASH     5\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\ntypedef OPENSSL_STRING *OPENSSL_PSTRING;\nDECLARE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING)\n\ntypedef struct txt_db_st {\n    int num_fields;\n    STACK_OF(OPENSSL_PSTRING) *data;\n    LHASH_OF(OPENSSL_STRING) **index;\n    int (**qual) (OPENSSL_STRING *);\n    long error;\n    long arg1;\n    long arg2;\n    OPENSSL_STRING *arg_row;\n} TXT_DB;\n\n# ifndef OPENSSL_NO_BIO\nTXT_DB *TXT_DB_read(BIO *in, int num);\nlong TXT_DB_write(BIO *out, TXT_DB *db);\n# else\nTXT_DB *TXT_DB_read(char *in, int num);\nlong TXT_DB_write(char *out, TXT_DB *db);\n# endif\nint TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *),\n                        LHASH_HASH_FN_TYPE hash, LHASH_COMP_FN_TYPE cmp);\nvoid TXT_DB_free(TXT_DB *db);\nOPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx,\n                                    OPENSSL_STRING *value);\nint TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value);\n\n#ifdef  __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ui.h",
    "content": "/* crypto/ui/ui.h -*- mode:C; c-file-style: \"eay\" -*- */\n/*\n * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project\n * 2001.\n */\n/* ====================================================================\n * Copyright (c) 2001 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_UI_H\n# define HEADER_UI_H\n\n# ifndef OPENSSL_NO_DEPRECATED\n#  include <openssl/crypto.h>\n# endif\n# include <openssl/safestack.h>\n# include <openssl/ossl_typ.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/* Declared already in ossl_typ.h */\n/* typedef struct ui_st UI; */\n/* typedef struct ui_method_st UI_METHOD; */\n\n/*\n * All the following functions return -1 or NULL on error and in some cases\n * (UI_process()) -2 if interrupted or in some other way cancelled. When\n * everything is fine, they return 0, a positive value or a non-NULL pointer,\n * all depending on their purpose.\n */\n\n/* Creators and destructor.   */\nUI *UI_new(void);\nUI *UI_new_method(const UI_METHOD *method);\nvoid UI_free(UI *ui);\n\n/*-\n   The following functions are used to add strings to be printed and prompt\n   strings to prompt for data.  The names are UI_{add,dup}_<function>_string\n   and UI_{add,dup}_input_boolean.\n\n   UI_{add,dup}_<function>_string have the following meanings:\n        add     add a text or prompt string.  The pointers given to these\n                functions are used verbatim, no copying is done.\n        dup     make a copy of the text or prompt string, then add the copy\n                to the collection of strings in the user interface.\n        <function>\n                The function is a name for the functionality that the given\n                string shall be used for.  It can be one of:\n                        input   use the string as data prompt.\n                        verify  use the string as verification prompt.  This\n                                is used to verify a previous input.\n                        info    use the string for informational output.\n                        error   use the string for error output.\n   Honestly, there's currently no difference between info and error for the\n   moment.\n\n   UI_{add,dup}_input_boolean have the same semantics for \"add\" and \"dup\",\n   and are typically used when one wants to prompt for a yes/no response.\n\n   All of the functions in this group take a UI and a prompt string.\n   The string input and verify addition functions also take a flag argument,\n   a buffer for the result to end up with, a minimum input size and a maximum\n   input size (the result buffer MUST be large enough to be able to contain\n   the maximum number of characters).  Additionally, the verify addition\n   functions takes another buffer to compare the result against.\n   The boolean input functions take an action description string (which should\n   be safe to ignore if the expected user action is obvious, for example with\n   a dialog box with an OK button and a Cancel button), a string of acceptable\n   characters to mean OK and to mean Cancel.  The two last strings are checked\n   to make sure they don't have common characters.  Additionally, the same\n   flag argument as for the string input is taken, as well as a result buffer.\n   The result buffer is required to be at least one byte long.  Depending on\n   the answer, the first character from the OK or the Cancel character strings\n   will be stored in the first byte of the result buffer.  No NUL will be\n   added, so the result is *not* a string.\n\n   On success, the all return an index of the added information.  That index\n   is usefull when retrieving results with UI_get0_result(). */\nint UI_add_input_string(UI *ui, const char *prompt, int flags,\n                        char *result_buf, int minsize, int maxsize);\nint UI_dup_input_string(UI *ui, const char *prompt, int flags,\n                        char *result_buf, int minsize, int maxsize);\nint UI_add_verify_string(UI *ui, const char *prompt, int flags,\n                         char *result_buf, int minsize, int maxsize,\n                         const char *test_buf);\nint UI_dup_verify_string(UI *ui, const char *prompt, int flags,\n                         char *result_buf, int minsize, int maxsize,\n                         const char *test_buf);\nint UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc,\n                         const char *ok_chars, const char *cancel_chars,\n                         int flags, char *result_buf);\nint UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc,\n                         const char *ok_chars, const char *cancel_chars,\n                         int flags, char *result_buf);\nint UI_add_info_string(UI *ui, const char *text);\nint UI_dup_info_string(UI *ui, const char *text);\nint UI_add_error_string(UI *ui, const char *text);\nint UI_dup_error_string(UI *ui, const char *text);\n\n/* These are the possible flags.  They can be or'ed together. */\n/* Use to have echoing of input */\n# define UI_INPUT_FLAG_ECHO              0x01\n/*\n * Use a default password.  Where that password is found is completely up to\n * the application, it might for example be in the user data set with\n * UI_add_user_data().  It is not recommended to have more than one input in\n * each UI being marked with this flag, or the application might get\n * confused.\n */\n# define UI_INPUT_FLAG_DEFAULT_PWD       0x02\n\n/*-\n * The user of these routines may want to define flags of their own.  The core\n * UI won't look at those, but will pass them on to the method routines.  They\n * must use higher bits so they don't get confused with the UI bits above.\n * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use.  A good\n * example of use is this:\n *\n *    #define MY_UI_FLAG1       (0x01 << UI_INPUT_FLAG_USER_BASE)\n *\n*/\n# define UI_INPUT_FLAG_USER_BASE 16\n\n/*-\n * The following function helps construct a prompt.  object_desc is a\n * textual short description of the object, for example \"pass phrase\",\n * and object_name is the name of the object (might be a card name or\n * a file name.\n * The returned string shall always be allocated on the heap with\n * OPENSSL_malloc(), and need to be free'd with OPENSSL_free().\n *\n * If the ui_method doesn't contain a pointer to a user-defined prompt\n * constructor, a default string is built, looking like this:\n *\n *       \"Enter {object_desc} for {object_name}:\"\n *\n * So, if object_desc has the value \"pass phrase\" and object_name has\n * the value \"foo.key\", the resulting string is:\n *\n *       \"Enter pass phrase for foo.key:\"\n*/\nchar *UI_construct_prompt(UI *ui_method,\n                          const char *object_desc, const char *object_name);\n\n/*\n * The following function is used to store a pointer to user-specific data.\n * Any previous such pointer will be returned and replaced.\n *\n * For callback purposes, this function makes a lot more sense than using\n * ex_data, since the latter requires that different parts of OpenSSL or\n * applications share the same ex_data index.\n *\n * Note that the UI_OpenSSL() method completely ignores the user data. Other\n * methods may not, however.\n */\nvoid *UI_add_user_data(UI *ui, void *user_data);\n/* We need a user data retrieving function as well.  */\nvoid *UI_get0_user_data(UI *ui);\n\n/* Return the result associated with a prompt given with the index i. */\nconst char *UI_get0_result(UI *ui, int i);\n\n/* When all strings have been added, process the whole thing. */\nint UI_process(UI *ui);\n\n/*\n * Give a user interface parametrised control commands.  This can be used to\n * send down an integer, a data pointer or a function pointer, as well as be\n * used to get information from a UI.\n */\nint UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void));\n\n/* The commands */\n/*\n * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the\n * OpenSSL error stack before printing any info or added error messages and\n * before any prompting.\n */\n# define UI_CTRL_PRINT_ERRORS            1\n/*\n * Check if a UI_process() is possible to do again with the same instance of\n * a user interface.  This makes UI_ctrl() return 1 if it is redoable, and 0\n * if not.\n */\n# define UI_CTRL_IS_REDOABLE             2\n\n/* Some methods may use extra data */\n# define UI_set_app_data(s,arg)         UI_set_ex_data(s,0,arg)\n# define UI_get_app_data(s)             UI_get_ex_data(s,0)\nint UI_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                        CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nint UI_set_ex_data(UI *r, int idx, void *arg);\nvoid *UI_get_ex_data(UI *r, int idx);\n\n/* Use specific methods instead of the built-in one */\nvoid UI_set_default_method(const UI_METHOD *meth);\nconst UI_METHOD *UI_get_default_method(void);\nconst UI_METHOD *UI_get_method(UI *ui);\nconst UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth);\n\n/* The method with all the built-in thingies */\nUI_METHOD *UI_OpenSSL(void);\n\n/* ---------- For method writers ---------- */\n/*-\n   A method contains a number of functions that implement the low level\n   of the User Interface.  The functions are:\n\n        an opener       This function starts a session, maybe by opening\n                        a channel to a tty, or by opening a window.\n        a writer        This function is called to write a given string,\n                        maybe to the tty, maybe as a field label in a\n                        window.\n        a flusher       This function is called to flush everything that\n                        has been output so far.  It can be used to actually\n                        display a dialog box after it has been built.\n        a reader        This function is called to read a given prompt,\n                        maybe from the tty, maybe from a field in a\n                        window.  Note that it's called wth all string\n                        structures, not only the prompt ones, so it must\n                        check such things itself.\n        a closer        This function closes the session, maybe by closing\n                        the channel to the tty, or closing the window.\n\n   All these functions are expected to return:\n\n        0       on error.\n        1       on success.\n        -1      on out-of-band events, for example if some prompting has\n                been canceled (by pressing Ctrl-C, for example).  This is\n                only checked when returned by the flusher or the reader.\n\n   The way this is used, the opener is first called, then the writer for all\n   strings, then the flusher, then the reader for all strings and finally the\n   closer.  Note that if you want to prompt from a terminal or other command\n   line interface, the best is to have the reader also write the prompts\n   instead of having the writer do it.  If you want to prompt from a dialog\n   box, the writer can be used to build up the contents of the box, and the\n   flusher to actually display the box and run the event loop until all data\n   has been given, after which the reader only grabs the given data and puts\n   them back into the UI strings.\n\n   All method functions take a UI as argument.  Additionally, the writer and\n   the reader take a UI_STRING.\n*/\n\n/*\n * The UI_STRING type is the data structure that contains all the needed info\n * about a string or a prompt, including test data for a verification prompt.\n */\ntypedef struct ui_string_st UI_STRING;\nDECLARE_STACK_OF(UI_STRING)\n\n/*\n * The different types of strings that are currently supported. This is only\n * needed by method authors.\n */\nenum UI_string_types {\n    UIT_NONE = 0,\n    UIT_PROMPT,                 /* Prompt for a string */\n    UIT_VERIFY,                 /* Prompt for a string and verify */\n    UIT_BOOLEAN,                /* Prompt for a yes/no response */\n    UIT_INFO,                   /* Send info to the user */\n    UIT_ERROR                   /* Send an error message to the user */\n};\n\n/* Create and manipulate methods */\nUI_METHOD *UI_create_method(char *name);\nvoid UI_destroy_method(UI_METHOD *ui_method);\nint UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui));\nint UI_method_set_writer(UI_METHOD *method,\n                         int (*writer) (UI *ui, UI_STRING *uis));\nint UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui));\nint UI_method_set_reader(UI_METHOD *method,\n                         int (*reader) (UI *ui, UI_STRING *uis));\nint UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui));\nint UI_method_set_prompt_constructor(UI_METHOD *method,\n                                     char *(*prompt_constructor) (UI *ui,\n                                                                  const char\n                                                                  *object_desc,\n                                                                  const char\n                                                                  *object_name));\nint (*UI_method_get_opener(UI_METHOD *method)) (UI *);\nint (*UI_method_get_writer(UI_METHOD *method)) (UI *, UI_STRING *);\nint (*UI_method_get_flusher(UI_METHOD *method)) (UI *);\nint (*UI_method_get_reader(UI_METHOD *method)) (UI *, UI_STRING *);\nint (*UI_method_get_closer(UI_METHOD *method)) (UI *);\nchar *(*UI_method_get_prompt_constructor(UI_METHOD *method)) (UI *,\n                                                              const char *,\n                                                              const char *);\n\n/*\n * The following functions are helpers for method writers to access relevant\n * data from a UI_STRING.\n */\n\n/* Return type of the UI_STRING */\nenum UI_string_types UI_get_string_type(UI_STRING *uis);\n/* Return input flags of the UI_STRING */\nint UI_get_input_flags(UI_STRING *uis);\n/* Return the actual string to output (the prompt, info or error) */\nconst char *UI_get0_output_string(UI_STRING *uis);\n/*\n * Return the optional action string to output (the boolean promtp\n * instruction)\n */\nconst char *UI_get0_action_string(UI_STRING *uis);\n/* Return the result of a prompt */\nconst char *UI_get0_result_string(UI_STRING *uis);\n/*\n * Return the string to test the result against.  Only useful with verifies.\n */\nconst char *UI_get0_test_string(UI_STRING *uis);\n/* Return the required minimum size of the result */\nint UI_get_result_minsize(UI_STRING *uis);\n/* Return the required maximum size of the result */\nint UI_get_result_maxsize(UI_STRING *uis);\n/* Set the result of a UI_STRING. */\nint UI_set_result(UI *ui, UI_STRING *uis, const char *result);\n\n/* A couple of popular utility functions */\nint UI_UTIL_read_pw_string(char *buf, int length, const char *prompt,\n                           int verify);\nint UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt,\n                    int verify);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_UI_strings(void);\n\n/* Error codes for the UI functions. */\n\n/* Function codes. */\n# define UI_F_GENERAL_ALLOCATE_BOOLEAN                    108\n# define UI_F_GENERAL_ALLOCATE_PROMPT                     109\n# define UI_F_GENERAL_ALLOCATE_STRING                     100\n# define UI_F_UI_CTRL                                     111\n# define UI_F_UI_DUP_ERROR_STRING                         101\n# define UI_F_UI_DUP_INFO_STRING                          102\n# define UI_F_UI_DUP_INPUT_BOOLEAN                        110\n# define UI_F_UI_DUP_INPUT_STRING                         103\n# define UI_F_UI_DUP_VERIFY_STRING                        106\n# define UI_F_UI_GET0_RESULT                              107\n# define UI_F_UI_NEW_METHOD                               104\n# define UI_F_UI_SET_RESULT                               105\n\n/* Reason codes. */\n# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS             104\n# define UI_R_INDEX_TOO_LARGE                             102\n# define UI_R_INDEX_TOO_SMALL                             103\n# define UI_R_NO_RESULT_BUFFER                            105\n# define UI_R_RESULT_TOO_LARGE                            100\n# define UI_R_RESULT_TOO_SMALL                            101\n# define UI_R_UNKNOWN_CONTROL_COMMAND                     106\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/ui_compat.h",
    "content": "/* crypto/ui/ui.h -*- mode:C; c-file-style: \"eay\" -*- */\n/*\n * Written by Richard Levitte (richard@levitte.org) for the OpenSSL project\n * 2001.\n */\n/* ====================================================================\n * Copyright (c) 2001 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    openssl-core@openssl.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.openssl.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n\n#ifndef HEADER_UI_COMPAT_H\n# define HEADER_UI_COMPAT_H\n\n# include <openssl/opensslconf.h>\n# include <openssl/ui.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * The following functions were previously part of the DES section, and are\n * provided here for backward compatibility reasons.\n */\n\n# define des_read_pw_string(b,l,p,v) \\\n        _ossl_old_des_read_pw_string((b),(l),(p),(v))\n# define des_read_pw(b,bf,s,p,v) \\\n        _ossl_old_des_read_pw((b),(bf),(s),(p),(v))\n\nint _ossl_old_des_read_pw_string(char *buf, int length, const char *prompt,\n                                 int verify);\nint _ossl_old_des_read_pw(char *buf, char *buff, int size, const char *prompt,\n                          int verify);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/whrlpool.h",
    "content": "#ifndef HEADER_WHRLPOOL_H\n# define HEADER_WHRLPOOL_H\n\n# include <openssl/e_os2.h>\n# include <stddef.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# define WHIRLPOOL_DIGEST_LENGTH (512/8)\n# define WHIRLPOOL_BBLOCK        512\n# define WHIRLPOOL_COUNTER       (256/8)\n\ntypedef struct {\n    union {\n        unsigned char c[WHIRLPOOL_DIGEST_LENGTH];\n        /* double q is here to ensure 64-bit alignment */\n        double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)];\n    } H;\n    unsigned char data[WHIRLPOOL_BBLOCK / 8];\n    unsigned int bitoff;\n    size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)];\n} WHIRLPOOL_CTX;\n\n# ifndef OPENSSL_NO_WHIRLPOOL\n#  ifdef OPENSSL_FIPS\nint private_WHIRLPOOL_Init(WHIRLPOOL_CTX *c);\n#  endif\nint WHIRLPOOL_Init(WHIRLPOOL_CTX *c);\nint WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes);\nvoid WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits);\nint WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c);\nunsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md);\n# endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/x509.h",
    "content": "/* crypto/x509/x509.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n/* ====================================================================\n * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.\n * ECDH support in OpenSSL originally developed by\n * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.\n */\n\n#ifndef HEADER_X509_H\n# define HEADER_X509_H\n\n# include <openssl/e_os2.h>\n# include <openssl/symhacks.h>\n# ifndef OPENSSL_NO_BUFFER\n#  include <openssl/buffer.h>\n# endif\n# ifndef OPENSSL_NO_EVP\n#  include <openssl/evp.h>\n# endif\n# ifndef OPENSSL_NO_BIO\n#  include <openssl/bio.h>\n# endif\n# include <openssl/stack.h>\n# include <openssl/asn1.h>\n# include <openssl/safestack.h>\n\n# ifndef OPENSSL_NO_EC\n#  include <openssl/ec.h>\n# endif\n\n# ifndef OPENSSL_NO_ECDSA\n#  include <openssl/ecdsa.h>\n# endif\n\n# ifndef OPENSSL_NO_ECDH\n#  include <openssl/ecdh.h>\n# endif\n\n# ifndef OPENSSL_NO_DEPRECATED\n#  ifndef OPENSSL_NO_RSA\n#   include <openssl/rsa.h>\n#  endif\n#  ifndef OPENSSL_NO_DSA\n#   include <openssl/dsa.h>\n#  endif\n#  ifndef OPENSSL_NO_DH\n#   include <openssl/dh.h>\n#  endif\n# endif\n\n# ifndef OPENSSL_NO_SHA\n#  include <openssl/sha.h>\n# endif\n# include <openssl/ossl_typ.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_SYS_WIN32\n/* Under Win32 these are defined in wincrypt.h */\n#  undef X509_NAME\n#  undef X509_CERT_PAIR\n#  undef X509_EXTENSIONS\n# endif\n\n# define X509_FILETYPE_PEM       1\n# define X509_FILETYPE_ASN1      2\n# define X509_FILETYPE_DEFAULT   3\n\n# define X509v3_KU_DIGITAL_SIGNATURE     0x0080\n# define X509v3_KU_NON_REPUDIATION       0x0040\n# define X509v3_KU_KEY_ENCIPHERMENT      0x0020\n# define X509v3_KU_DATA_ENCIPHERMENT     0x0010\n# define X509v3_KU_KEY_AGREEMENT         0x0008\n# define X509v3_KU_KEY_CERT_SIGN         0x0004\n# define X509v3_KU_CRL_SIGN              0x0002\n# define X509v3_KU_ENCIPHER_ONLY         0x0001\n# define X509v3_KU_DECIPHER_ONLY         0x8000\n# define X509v3_KU_UNDEF                 0xffff\n\ntypedef struct X509_objects_st {\n    int nid;\n    int (*a2i) (void);\n    int (*i2a) (void);\n} X509_OBJECTS;\n\nstruct X509_algor_st {\n    ASN1_OBJECT *algorithm;\n    ASN1_TYPE *parameter;\n} /* X509_ALGOR */ ;\n\nDECLARE_ASN1_SET_OF(X509_ALGOR)\n\ntypedef STACK_OF(X509_ALGOR) X509_ALGORS;\n\ntypedef struct X509_val_st {\n    ASN1_TIME *notBefore;\n    ASN1_TIME *notAfter;\n} X509_VAL;\n\nstruct X509_pubkey_st {\n    X509_ALGOR *algor;\n    ASN1_BIT_STRING *public_key;\n    EVP_PKEY *pkey;\n};\n\ntypedef struct X509_sig_st {\n    X509_ALGOR *algor;\n    ASN1_OCTET_STRING *digest;\n} X509_SIG;\n\ntypedef struct X509_name_entry_st {\n    ASN1_OBJECT *object;\n    ASN1_STRING *value;\n    int set;\n    int size;                   /* temp variable */\n} X509_NAME_ENTRY;\n\nDECLARE_STACK_OF(X509_NAME_ENTRY)\nDECLARE_ASN1_SET_OF(X509_NAME_ENTRY)\n\n/* we always keep X509_NAMEs in 2 forms. */\nstruct X509_name_st {\n    STACK_OF(X509_NAME_ENTRY) *entries;\n    int modified;               /* true if 'bytes' needs to be built */\n# ifndef OPENSSL_NO_BUFFER\n    BUF_MEM *bytes;\n# else\n    char *bytes;\n# endif\n/*      unsigned long hash; Keep the hash around for lookups */\n    unsigned char *canon_enc;\n    int canon_enclen;\n} /* X509_NAME */ ;\n\nDECLARE_STACK_OF(X509_NAME)\n\n# define X509_EX_V_NETSCAPE_HACK         0x8000\n# define X509_EX_V_INIT                  0x0001\ntypedef struct X509_extension_st {\n    ASN1_OBJECT *object;\n    ASN1_BOOLEAN critical;\n    ASN1_OCTET_STRING *value;\n} X509_EXTENSION;\n\ntypedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS;\n\nDECLARE_STACK_OF(X509_EXTENSION)\nDECLARE_ASN1_SET_OF(X509_EXTENSION)\n\n/* a sequence of these are used */\ntypedef struct x509_attributes_st {\n    ASN1_OBJECT *object;\n    int single;                 /* 0 for a set, 1 for a single item (which is\n                                 * wrong) */\n    union {\n        char *ptr;\n        /*\n         * 0\n         */ STACK_OF(ASN1_TYPE) *set;\n        /*\n         * 1\n         */ ASN1_TYPE *single;\n    } value;\n} X509_ATTRIBUTE;\n\nDECLARE_STACK_OF(X509_ATTRIBUTE)\nDECLARE_ASN1_SET_OF(X509_ATTRIBUTE)\n\ntypedef struct X509_req_info_st {\n    ASN1_ENCODING enc;\n    ASN1_INTEGER *version;\n    X509_NAME *subject;\n    X509_PUBKEY *pubkey;\n    /*  d=2 hl=2 l=  0 cons: cont: 00 */\n    STACK_OF(X509_ATTRIBUTE) *attributes; /* [ 0 ] */\n} X509_REQ_INFO;\n\ntypedef struct X509_req_st {\n    X509_REQ_INFO *req_info;\n    X509_ALGOR *sig_alg;\n    ASN1_BIT_STRING *signature;\n    int references;\n} X509_REQ;\n\ntypedef struct x509_cinf_st {\n    ASN1_INTEGER *version;      /* [ 0 ] default of v1 */\n    ASN1_INTEGER *serialNumber;\n    X509_ALGOR *signature;\n    X509_NAME *issuer;\n    X509_VAL *validity;\n    X509_NAME *subject;\n    X509_PUBKEY *key;\n    ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */\n    ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */\n    STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */\n    ASN1_ENCODING enc;\n} X509_CINF;\n\n/*\n * This stuff is certificate \"auxiliary info\" it contains details which are\n * useful in certificate stores and databases. When used this is tagged onto\n * the end of the certificate itself\n */\n\ntypedef struct x509_cert_aux_st {\n    STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */\n    STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */\n    ASN1_UTF8STRING *alias;     /* \"friendly name\" */\n    ASN1_OCTET_STRING *keyid;   /* key id of private key */\n    STACK_OF(X509_ALGOR) *other; /* other unspecified info */\n} X509_CERT_AUX;\n\nstruct x509_st {\n    X509_CINF *cert_info;\n    X509_ALGOR *sig_alg;\n    ASN1_BIT_STRING *signature;\n    int valid;\n    int references;\n    char *name;\n    CRYPTO_EX_DATA ex_data;\n    /* These contain copies of various extension values */\n    long ex_pathlen;\n    long ex_pcpathlen;\n    unsigned long ex_flags;\n    unsigned long ex_kusage;\n    unsigned long ex_xkusage;\n    unsigned long ex_nscert;\n    ASN1_OCTET_STRING *skid;\n    AUTHORITY_KEYID *akid;\n    X509_POLICY_CACHE *policy_cache;\n    STACK_OF(DIST_POINT) *crldp;\n    STACK_OF(GENERAL_NAME) *altname;\n    NAME_CONSTRAINTS *nc;\n# ifndef OPENSSL_NO_RFC3779\n    STACK_OF(IPAddressFamily) *rfc3779_addr;\n    struct ASIdentifiers_st *rfc3779_asid;\n# endif\n# ifndef OPENSSL_NO_SHA\n    unsigned char sha1_hash[SHA_DIGEST_LENGTH];\n# endif\n    X509_CERT_AUX *aux;\n} /* X509 */ ;\n\nDECLARE_STACK_OF(X509)\nDECLARE_ASN1_SET_OF(X509)\n\n/* This is used for a table of trust checking functions */\n\ntypedef struct x509_trust_st {\n    int trust;\n    int flags;\n    int (*check_trust) (struct x509_trust_st *, X509 *, int);\n    char *name;\n    int arg1;\n    void *arg2;\n} X509_TRUST;\n\nDECLARE_STACK_OF(X509_TRUST)\n\ntypedef struct x509_cert_pair_st {\n    X509 *forward;\n    X509 *reverse;\n} X509_CERT_PAIR;\n\n/* standard trust ids */\n\n# define X509_TRUST_DEFAULT      -1/* Only valid in purpose settings */\n\n# define X509_TRUST_COMPAT       1\n# define X509_TRUST_SSL_CLIENT   2\n# define X509_TRUST_SSL_SERVER   3\n# define X509_TRUST_EMAIL        4\n# define X509_TRUST_OBJECT_SIGN  5\n# define X509_TRUST_OCSP_SIGN    6\n# define X509_TRUST_OCSP_REQUEST 7\n# define X509_TRUST_TSA          8\n\n/* Keep these up to date! */\n# define X509_TRUST_MIN          1\n# define X509_TRUST_MAX          8\n\n/* trust_flags values */\n# define X509_TRUST_DYNAMIC      1\n# define X509_TRUST_DYNAMIC_NAME 2\n\n/* check_trust return codes */\n\n# define X509_TRUST_TRUSTED      1\n# define X509_TRUST_REJECTED     2\n# define X509_TRUST_UNTRUSTED    3\n\n/* Flags for X509_print_ex() */\n\n# define X509_FLAG_COMPAT                0\n# define X509_FLAG_NO_HEADER             1L\n# define X509_FLAG_NO_VERSION            (1L << 1)\n# define X509_FLAG_NO_SERIAL             (1L << 2)\n# define X509_FLAG_NO_SIGNAME            (1L << 3)\n# define X509_FLAG_NO_ISSUER             (1L << 4)\n# define X509_FLAG_NO_VALIDITY           (1L << 5)\n# define X509_FLAG_NO_SUBJECT            (1L << 6)\n# define X509_FLAG_NO_PUBKEY             (1L << 7)\n# define X509_FLAG_NO_EXTENSIONS         (1L << 8)\n# define X509_FLAG_NO_SIGDUMP            (1L << 9)\n# define X509_FLAG_NO_AUX                (1L << 10)\n# define X509_FLAG_NO_ATTRIBUTES         (1L << 11)\n# define X509_FLAG_NO_IDS                (1L << 12)\n\n/* Flags specific to X509_NAME_print_ex() */\n\n/* The field separator information */\n\n# define XN_FLAG_SEP_MASK        (0xf << 16)\n\n# define XN_FLAG_COMPAT          0/* Traditional SSLeay: use old\n                                   * X509_NAME_print */\n# define XN_FLAG_SEP_COMMA_PLUS  (1 << 16)/* RFC2253 ,+ */\n# define XN_FLAG_SEP_CPLUS_SPC   (2 << 16)/* ,+ spaced: more readable */\n# define XN_FLAG_SEP_SPLUS_SPC   (3 << 16)/* ;+ spaced */\n# define XN_FLAG_SEP_MULTILINE   (4 << 16)/* One line per field */\n\n# define XN_FLAG_DN_REV          (1 << 20)/* Reverse DN order */\n\n/* How the field name is shown */\n\n# define XN_FLAG_FN_MASK         (0x3 << 21)\n\n# define XN_FLAG_FN_SN           0/* Object short name */\n# define XN_FLAG_FN_LN           (1 << 21)/* Object long name */\n# define XN_FLAG_FN_OID          (2 << 21)/* Always use OIDs */\n# define XN_FLAG_FN_NONE         (3 << 21)/* No field names */\n\n# define XN_FLAG_SPC_EQ          (1 << 23)/* Put spaces round '=' */\n\n/*\n * This determines if we dump fields we don't recognise: RFC2253 requires\n * this.\n */\n\n# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)\n\n# define XN_FLAG_FN_ALIGN        (1 << 25)/* Align field names to 20\n                                           * characters */\n\n/* Complete set of RFC2253 flags */\n\n# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \\\n                        XN_FLAG_SEP_COMMA_PLUS | \\\n                        XN_FLAG_DN_REV | \\\n                        XN_FLAG_FN_SN | \\\n                        XN_FLAG_DUMP_UNKNOWN_FIELDS)\n\n/* readable oneline form */\n\n# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \\\n                        ASN1_STRFLGS_ESC_QUOTE | \\\n                        XN_FLAG_SEP_CPLUS_SPC | \\\n                        XN_FLAG_SPC_EQ | \\\n                        XN_FLAG_FN_SN)\n\n/* readable multiline form */\n\n# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \\\n                        ASN1_STRFLGS_ESC_MSB | \\\n                        XN_FLAG_SEP_MULTILINE | \\\n                        XN_FLAG_SPC_EQ | \\\n                        XN_FLAG_FN_LN | \\\n                        XN_FLAG_FN_ALIGN)\n\nstruct x509_revoked_st {\n    ASN1_INTEGER *serialNumber;\n    ASN1_TIME *revocationDate;\n    STACK_OF(X509_EXTENSION) /* optional */ *extensions;\n    /* Set up if indirect CRL */\n    STACK_OF(GENERAL_NAME) *issuer;\n    /* Revocation reason */\n    int reason;\n    int sequence;               /* load sequence */\n};\n\nDECLARE_STACK_OF(X509_REVOKED)\nDECLARE_ASN1_SET_OF(X509_REVOKED)\n\ntypedef struct X509_crl_info_st {\n    ASN1_INTEGER *version;\n    X509_ALGOR *sig_alg;\n    X509_NAME *issuer;\n    ASN1_TIME *lastUpdate;\n    ASN1_TIME *nextUpdate;\n    STACK_OF(X509_REVOKED) *revoked;\n    STACK_OF(X509_EXTENSION) /* [0] */ *extensions;\n    ASN1_ENCODING enc;\n} X509_CRL_INFO;\n\nstruct X509_crl_st {\n    /* actual signature */\n    X509_CRL_INFO *crl;\n    X509_ALGOR *sig_alg;\n    ASN1_BIT_STRING *signature;\n    int references;\n    int flags;\n    /* Copies of various extensions */\n    AUTHORITY_KEYID *akid;\n    ISSUING_DIST_POINT *idp;\n    /* Convenient breakdown of IDP */\n    int idp_flags;\n    int idp_reasons;\n    /* CRL and base CRL numbers for delta processing */\n    ASN1_INTEGER *crl_number;\n    ASN1_INTEGER *base_crl_number;\n# ifndef OPENSSL_NO_SHA\n    unsigned char sha1_hash[SHA_DIGEST_LENGTH];\n# endif\n    STACK_OF(GENERAL_NAMES) *issuers;\n    const X509_CRL_METHOD *meth;\n    void *meth_data;\n} /* X509_CRL */ ;\n\nDECLARE_STACK_OF(X509_CRL)\nDECLARE_ASN1_SET_OF(X509_CRL)\n\ntypedef struct private_key_st {\n    int version;\n    /* The PKCS#8 data types */\n    X509_ALGOR *enc_algor;\n    ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */\n    /* When decrypted, the following will not be NULL */\n    EVP_PKEY *dec_pkey;\n    /* used to encrypt and decrypt */\n    int key_length;\n    char *key_data;\n    int key_free;               /* true if we should auto free key_data */\n    /* expanded version of 'enc_algor' */\n    EVP_CIPHER_INFO cipher;\n    int references;\n} X509_PKEY;\n\n# ifndef OPENSSL_NO_EVP\ntypedef struct X509_info_st {\n    X509 *x509;\n    X509_CRL *crl;\n    X509_PKEY *x_pkey;\n    EVP_CIPHER_INFO enc_cipher;\n    int enc_len;\n    char *enc_data;\n    int references;\n} X509_INFO;\n\nDECLARE_STACK_OF(X509_INFO)\n# endif\n\n/*\n * The next 2 structures and their 8 routines were sent to me by Pat Richard\n * <patr@x509.com> and are used to manipulate Netscapes spki structures -\n * useful if you are writing a CA web page\n */\ntypedef struct Netscape_spkac_st {\n    X509_PUBKEY *pubkey;\n    ASN1_IA5STRING *challenge;  /* challenge sent in atlas >= PR2 */\n} NETSCAPE_SPKAC;\n\ntypedef struct Netscape_spki_st {\n    NETSCAPE_SPKAC *spkac;      /* signed public key and challenge */\n    X509_ALGOR *sig_algor;\n    ASN1_BIT_STRING *signature;\n} NETSCAPE_SPKI;\n\n/* Netscape certificate sequence structure */\ntypedef struct Netscape_certificate_sequence {\n    ASN1_OBJECT *type;\n    STACK_OF(X509) *certs;\n} NETSCAPE_CERT_SEQUENCE;\n\n/*- Unused (and iv length is wrong)\ntypedef struct CBCParameter_st\n        {\n        unsigned char iv[8];\n        } CBC_PARAM;\n*/\n\n/* Password based encryption structure */\n\ntypedef struct PBEPARAM_st {\n    ASN1_OCTET_STRING *salt;\n    ASN1_INTEGER *iter;\n} PBEPARAM;\n\n/* Password based encryption V2 structures */\n\ntypedef struct PBE2PARAM_st {\n    X509_ALGOR *keyfunc;\n    X509_ALGOR *encryption;\n} PBE2PARAM;\n\ntypedef struct PBKDF2PARAM_st {\n/* Usually OCTET STRING but could be anything */\n    ASN1_TYPE *salt;\n    ASN1_INTEGER *iter;\n    ASN1_INTEGER *keylength;\n    X509_ALGOR *prf;\n} PBKDF2PARAM;\n\n/* PKCS#8 private key info structure */\n\nstruct pkcs8_priv_key_info_st {\n    /* Flag for various broken formats */\n    int broken;\n# define PKCS8_OK                0\n# define PKCS8_NO_OCTET          1\n# define PKCS8_EMBEDDED_PARAM    2\n# define PKCS8_NS_DB             3\n# define PKCS8_NEG_PRIVKEY       4\n    ASN1_INTEGER *version;\n    X509_ALGOR *pkeyalg;\n    /* Should be OCTET STRING but some are broken */\n    ASN1_TYPE *pkey;\n    STACK_OF(X509_ATTRIBUTE) *attributes;\n};\n\n#ifdef  __cplusplus\n}\n#endif\n\n# include <openssl/x509_vfy.h>\n# include <openssl/pkcs7.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# define X509_EXT_PACK_UNKNOWN   1\n# define X509_EXT_PACK_STRING    2\n\n# define         X509_get_version(x) ASN1_INTEGER_get((x)->cert_info->version)\n/* #define      X509_get_serialNumber(x) ((x)->cert_info->serialNumber) */\n# define         X509_get_notBefore(x) ((x)->cert_info->validity->notBefore)\n# define         X509_get_notAfter(x) ((x)->cert_info->validity->notAfter)\n# define         X509_extract_key(x)     X509_get_pubkey(x)/*****/\n# define         X509_REQ_get_version(x) ASN1_INTEGER_get((x)->req_info->version)\n# define         X509_REQ_get_subject_name(x) ((x)->req_info->subject)\n# define         X509_REQ_extract_key(a) X509_REQ_get_pubkey(a)\n# define         X509_name_cmp(a,b)      X509_NAME_cmp((a),(b))\n# define         X509_get_signature_type(x) EVP_PKEY_type(OBJ_obj2nid((x)->sig_alg->algorithm))\n\n# define         X509_CRL_get_version(x) ASN1_INTEGER_get((x)->crl->version)\n# define         X509_CRL_get_lastUpdate(x) ((x)->crl->lastUpdate)\n# define         X509_CRL_get_nextUpdate(x) ((x)->crl->nextUpdate)\n# define         X509_CRL_get_issuer(x) ((x)->crl->issuer)\n# define         X509_CRL_get_REVOKED(x) ((x)->crl->revoked)\n\nvoid X509_CRL_set_default_method(const X509_CRL_METHOD *meth);\nX509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl),\n                                     int (*crl_free) (X509_CRL *crl),\n                                     int (*crl_lookup) (X509_CRL *crl,\n                                                        X509_REVOKED **ret,\n                                                        ASN1_INTEGER *ser,\n                                                        X509_NAME *issuer),\n                                     int (*crl_verify) (X509_CRL *crl,\n                                                        EVP_PKEY *pk));\nvoid X509_CRL_METHOD_free(X509_CRL_METHOD *m);\n\nvoid X509_CRL_set_meth_data(X509_CRL *crl, void *dat);\nvoid *X509_CRL_get_meth_data(X509_CRL *crl);\n\n/*\n * This one is only used so that a binary form can output, as in\n * i2d_X509_NAME(X509_get_X509_PUBKEY(x),&buf)\n */\n# define         X509_get_X509_PUBKEY(x) ((x)->cert_info->key)\n\nconst char *X509_verify_cert_error_string(long n);\n\n# ifndef OPENSSL_NO_EVP\nint X509_verify(X509 *a, EVP_PKEY *r);\n\nint X509_REQ_verify(X509_REQ *a, EVP_PKEY *r);\nint X509_CRL_verify(X509_CRL *a, EVP_PKEY *r);\nint NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r);\n\nNETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len);\nchar *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x);\nEVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x);\nint NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey);\n\nint NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki);\n\nint X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent);\nint X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig);\n\nint X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);\nint X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);\nint X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert);\nint X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);\nint X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);\nint X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);\nint X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);\nint X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl);\nint NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);\n\nint X509_pubkey_digest(const X509 *data, const EVP_MD *type,\n                       unsigned char *md, unsigned int *len);\nint X509_digest(const X509 *data, const EVP_MD *type,\n                unsigned char *md, unsigned int *len);\nint X509_CRL_digest(const X509_CRL *data, const EVP_MD *type,\n                    unsigned char *md, unsigned int *len);\nint X509_REQ_digest(const X509_REQ *data, const EVP_MD *type,\n                    unsigned char *md, unsigned int *len);\nint X509_NAME_digest(const X509_NAME *data, const EVP_MD *type,\n                     unsigned char *md, unsigned int *len);\n# endif\n\n# ifndef OPENSSL_NO_FP_API\nX509 *d2i_X509_fp(FILE *fp, X509 **x509);\nint i2d_X509_fp(FILE *fp, X509 *x509);\nX509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl);\nint i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl);\nX509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req);\nint i2d_X509_REQ_fp(FILE *fp, X509_REQ *req);\n#  ifndef OPENSSL_NO_RSA\nRSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa);\nint i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa);\nRSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa);\nint i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa);\nRSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa);\nint i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa);\n#  endif\n#  ifndef OPENSSL_NO_DSA\nDSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa);\nint i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);\nDSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa);\nint i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa);\n#  endif\n#  ifndef OPENSSL_NO_EC\nEC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey);\nint i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey);\nEC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey);\nint i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey);\n#  endif\nX509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8);\nint i2d_PKCS8_fp(FILE *fp, X509_SIG *p8);\nPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp,\n                                                PKCS8_PRIV_KEY_INFO **p8inf);\nint i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf);\nint i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key);\nint i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey);\nEVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a);\nint i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);\nEVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);\n# endif\n\n# ifndef OPENSSL_NO_BIO\nX509 *d2i_X509_bio(BIO *bp, X509 **x509);\nint i2d_X509_bio(BIO *bp, X509 *x509);\nX509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl);\nint i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl);\nX509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req);\nint i2d_X509_REQ_bio(BIO *bp, X509_REQ *req);\n#  ifndef OPENSSL_NO_RSA\nRSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa);\nint i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa);\nRSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa);\nint i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa);\nRSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa);\nint i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa);\n#  endif\n#  ifndef OPENSSL_NO_DSA\nDSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa);\nint i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);\nDSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa);\nint i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa);\n#  endif\n#  ifndef OPENSSL_NO_EC\nEC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey);\nint i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey);\nEC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey);\nint i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey);\n#  endif\nX509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8);\nint i2d_PKCS8_bio(BIO *bp, X509_SIG *p8);\nPKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp,\n                                                 PKCS8_PRIV_KEY_INFO **p8inf);\nint i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf);\nint i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key);\nint i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey);\nEVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);\nint i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);\nEVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);\n# endif\n\nX509 *X509_dup(X509 *x509);\nX509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);\nX509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);\nX509_CRL *X509_CRL_dup(X509_CRL *crl);\nX509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev);\nX509_REQ *X509_REQ_dup(X509_REQ *req);\nX509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);\nint X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,\n                    void *pval);\nvoid X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval,\n                     X509_ALGOR *algor);\nvoid X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md);\nint X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b);\n\nX509_NAME *X509_NAME_dup(X509_NAME *xn);\nX509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne);\n\nint X509_cmp_time(const ASN1_TIME *s, time_t *t);\nint X509_cmp_current_time(const ASN1_TIME *s);\nASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t);\nASN1_TIME *X509_time_adj_ex(ASN1_TIME *s,\n                            int offset_day, long offset_sec, time_t *t);\nASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj);\n\nconst char *X509_get_default_cert_area(void);\nconst char *X509_get_default_cert_dir(void);\nconst char *X509_get_default_cert_file(void);\nconst char *X509_get_default_cert_dir_env(void);\nconst char *X509_get_default_cert_file_env(void);\nconst char *X509_get_default_private_dir(void);\n\nX509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);\nX509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey);\n\nDECLARE_ASN1_FUNCTIONS(X509_ALGOR)\nDECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS)\nDECLARE_ASN1_FUNCTIONS(X509_VAL)\n\nDECLARE_ASN1_FUNCTIONS(X509_PUBKEY)\n\nint X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);\nEVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);\nint X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain);\nint i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);\nEVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);\n# ifndef OPENSSL_NO_RSA\nint i2d_RSA_PUBKEY(RSA *a, unsigned char **pp);\nRSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length);\n# endif\n# ifndef OPENSSL_NO_DSA\nint i2d_DSA_PUBKEY(DSA *a, unsigned char **pp);\nDSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length);\n# endif\n# ifndef OPENSSL_NO_EC\nint i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp);\nEC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length);\n# endif\n\nDECLARE_ASN1_FUNCTIONS(X509_SIG)\nDECLARE_ASN1_FUNCTIONS(X509_REQ_INFO)\nDECLARE_ASN1_FUNCTIONS(X509_REQ)\n\nDECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE)\nX509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value);\n\nDECLARE_ASN1_FUNCTIONS(X509_EXTENSION)\nDECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS)\n\nDECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY)\n\nDECLARE_ASN1_FUNCTIONS(X509_NAME)\n\nint X509_NAME_set(X509_NAME **xn, X509_NAME *name);\n\nDECLARE_ASN1_FUNCTIONS(X509_CINF)\n\nDECLARE_ASN1_FUNCTIONS(X509)\nDECLARE_ASN1_FUNCTIONS(X509_CERT_AUX)\n\nDECLARE_ASN1_FUNCTIONS(X509_CERT_PAIR)\n\nint X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\n                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\nint X509_set_ex_data(X509 *r, int idx, void *arg);\nvoid *X509_get_ex_data(X509 *r, int idx);\nint i2d_X509_AUX(X509 *a, unsigned char **pp);\nX509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length);\n\nint i2d_re_X509_tbs(X509 *x, unsigned char **pp);\n\nvoid X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,\n                         const X509 *x);\nint X509_get_signature_nid(const X509 *x);\n\nint X509_alias_set1(X509 *x, unsigned char *name, int len);\nint X509_keyid_set1(X509 *x, unsigned char *id, int len);\nunsigned char *X509_alias_get0(X509 *x, int *len);\nunsigned char *X509_keyid_get0(X509 *x, int *len);\nint (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *,\n                                                                int);\nint X509_TRUST_set(int *t, int trust);\nint X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj);\nint X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj);\nvoid X509_trust_clear(X509 *x);\nvoid X509_reject_clear(X509 *x);\n\nDECLARE_ASN1_FUNCTIONS(X509_REVOKED)\nDECLARE_ASN1_FUNCTIONS(X509_CRL_INFO)\nDECLARE_ASN1_FUNCTIONS(X509_CRL)\n\nint X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev);\nint X509_CRL_get0_by_serial(X509_CRL *crl,\n                            X509_REVOKED **ret, ASN1_INTEGER *serial);\nint X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x);\n\nX509_PKEY *X509_PKEY_new(void);\nvoid X509_PKEY_free(X509_PKEY *a);\nint i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp);\nX509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp,\n                         long length);\n\nDECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI)\nDECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC)\nDECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE)\n\n# ifndef OPENSSL_NO_EVP\nX509_INFO *X509_INFO_new(void);\nvoid X509_INFO_free(X509_INFO *a);\nchar *X509_NAME_oneline(X509_NAME *a, char *buf, int size);\n\nint ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1,\n                ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey);\n\nint ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data,\n                unsigned char *md, unsigned int *len);\n\nint ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1,\n              X509_ALGOR *algor2, ASN1_BIT_STRING *signature,\n              char *data, EVP_PKEY *pkey, const EVP_MD *type);\n\nint ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data,\n                     unsigned char *md, unsigned int *len);\n\nint ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1,\n                     ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey);\n\nint ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1,\n                   X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data,\n                   EVP_PKEY *pkey, const EVP_MD *type);\nint ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1,\n                       X509_ALGOR *algor2, ASN1_BIT_STRING *signature,\n                       void *asn, EVP_MD_CTX *ctx);\n# endif\n\nint X509_set_version(X509 *x, long version);\nint X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial);\nASN1_INTEGER *X509_get_serialNumber(X509 *x);\nint X509_set_issuer_name(X509 *x, X509_NAME *name);\nX509_NAME *X509_get_issuer_name(X509 *a);\nint X509_set_subject_name(X509 *x, X509_NAME *name);\nX509_NAME *X509_get_subject_name(X509 *a);\nint X509_set_notBefore(X509 *x, const ASN1_TIME *tm);\nint X509_set_notAfter(X509 *x, const ASN1_TIME *tm);\nint X509_set_pubkey(X509 *x, EVP_PKEY *pkey);\nEVP_PKEY *X509_get_pubkey(X509 *x);\nASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x);\nint X509_certificate_type(X509 *x, EVP_PKEY *pubkey /* optional */ );\n\nint X509_REQ_set_version(X509_REQ *x, long version);\nint X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name);\nint X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey);\nEVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req);\nint X509_REQ_extension_nid(int nid);\nint *X509_REQ_get_extension_nids(void);\nvoid X509_REQ_set_extension_nids(int *nids);\nSTACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req);\nint X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts,\n                                int nid);\nint X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts);\nint X509_REQ_get_attr_count(const X509_REQ *req);\nint X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos);\nint X509_REQ_get_attr_by_OBJ(const X509_REQ *req, ASN1_OBJECT *obj,\n                             int lastpos);\nX509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc);\nX509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc);\nint X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr);\nint X509_REQ_add1_attr_by_OBJ(X509_REQ *req,\n                              const ASN1_OBJECT *obj, int type,\n                              const unsigned char *bytes, int len);\nint X509_REQ_add1_attr_by_NID(X509_REQ *req,\n                              int nid, int type,\n                              const unsigned char *bytes, int len);\nint X509_REQ_add1_attr_by_txt(X509_REQ *req,\n                              const char *attrname, int type,\n                              const unsigned char *bytes, int len);\n\nint X509_CRL_set_version(X509_CRL *x, long version);\nint X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name);\nint X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm);\nint X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm);\nint X509_CRL_sort(X509_CRL *crl);\n\nint X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);\nint X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);\n\nX509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,\n                        EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);\n\nint X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);\n\nint X509_check_private_key(X509 *x509, EVP_PKEY *pkey);\nint X509_chain_check_suiteb(int *perror_depth,\n                            X509 *x, STACK_OF(X509) *chain,\n                            unsigned long flags);\nint X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);\nSTACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);\n\nint X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);\nunsigned long X509_issuer_and_serial_hash(X509 *a);\n\nint X509_issuer_name_cmp(const X509 *a, const X509 *b);\nunsigned long X509_issuer_name_hash(X509 *a);\n\nint X509_subject_name_cmp(const X509 *a, const X509 *b);\nunsigned long X509_subject_name_hash(X509 *x);\n\n# ifndef OPENSSL_NO_MD5\nunsigned long X509_issuer_name_hash_old(X509 *a);\nunsigned long X509_subject_name_hash_old(X509 *x);\n# endif\n\nint X509_cmp(const X509 *a, const X509 *b);\nint X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b);\nunsigned long X509_NAME_hash(X509_NAME *x);\nunsigned long X509_NAME_hash_old(X509_NAME *x);\n\nint X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b);\nint X509_CRL_match(const X509_CRL *a, const X509_CRL *b);\n# ifndef OPENSSL_NO_FP_API\nint X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag,\n                     unsigned long cflag);\nint X509_print_fp(FILE *bp, X509 *x);\nint X509_CRL_print_fp(FILE *bp, X509_CRL *x);\nint X509_REQ_print_fp(FILE *bp, X509_REQ *req);\nint X509_NAME_print_ex_fp(FILE *fp, X509_NAME *nm, int indent,\n                          unsigned long flags);\n# endif\n\n# ifndef OPENSSL_NO_BIO\nint X509_NAME_print(BIO *bp, X509_NAME *name, int obase);\nint X509_NAME_print_ex(BIO *out, X509_NAME *nm, int indent,\n                       unsigned long flags);\nint X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag,\n                  unsigned long cflag);\nint X509_print(BIO *bp, X509 *x);\nint X509_ocspid_print(BIO *bp, X509 *x);\nint X509_CERT_AUX_print(BIO *bp, X509_CERT_AUX *x, int indent);\nint X509_CRL_print(BIO *bp, X509_CRL *x);\nint X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag,\n                      unsigned long cflag);\nint X509_REQ_print(BIO *bp, X509_REQ *req);\n# endif\n\nint X509_NAME_entry_count(X509_NAME *name);\nint X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len);\nint X509_NAME_get_text_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,\n                              char *buf, int len);\n\n/*\n * NOTE: you should be passsing -1, not 0 as lastpos.  The functions that use\n * lastpos, search after that position on.\n */\nint X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos);\nint X509_NAME_get_index_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj,\n                               int lastpos);\nX509_NAME_ENTRY *X509_NAME_get_entry(X509_NAME *name, int loc);\nX509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);\nint X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne,\n                        int loc, int set);\nint X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type,\n                               unsigned char *bytes, int len, int loc,\n                               int set);\nint X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type,\n                               unsigned char *bytes, int len, int loc,\n                               int set);\nX509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne,\n                                               const char *field, int type,\n                                               const unsigned char *bytes,\n                                               int len);\nX509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid,\n                                               int type, unsigned char *bytes,\n                                               int len);\nint X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type,\n                               const unsigned char *bytes, int len, int loc,\n                               int set);\nX509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne,\n                                               ASN1_OBJECT *obj, int type,\n                                               const unsigned char *bytes,\n                                               int len);\nint X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, ASN1_OBJECT *obj);\nint X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type,\n                             const unsigned char *bytes, int len);\nASN1_OBJECT *X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *ne);\nASN1_STRING *X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *ne);\n\nint X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x);\nint X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x,\n                          int nid, int lastpos);\nint X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x,\n                          ASN1_OBJECT *obj, int lastpos);\nint X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x,\n                               int crit, int lastpos);\nX509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc);\nX509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc);\nSTACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x,\n                                         X509_EXTENSION *ex, int loc);\n\nint X509_get_ext_count(X509 *x);\nint X509_get_ext_by_NID(X509 *x, int nid, int lastpos);\nint X509_get_ext_by_OBJ(X509 *x, ASN1_OBJECT *obj, int lastpos);\nint X509_get_ext_by_critical(X509 *x, int crit, int lastpos);\nX509_EXTENSION *X509_get_ext(X509 *x, int loc);\nX509_EXTENSION *X509_delete_ext(X509 *x, int loc);\nint X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);\nvoid *X509_get_ext_d2i(X509 *x, int nid, int *crit, int *idx);\nint X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit,\n                      unsigned long flags);\n\nint X509_CRL_get_ext_count(X509_CRL *x);\nint X509_CRL_get_ext_by_NID(X509_CRL *x, int nid, int lastpos);\nint X509_CRL_get_ext_by_OBJ(X509_CRL *x, ASN1_OBJECT *obj, int lastpos);\nint X509_CRL_get_ext_by_critical(X509_CRL *x, int crit, int lastpos);\nX509_EXTENSION *X509_CRL_get_ext(X509_CRL *x, int loc);\nX509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc);\nint X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc);\nvoid *X509_CRL_get_ext_d2i(X509_CRL *x, int nid, int *crit, int *idx);\nint X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit,\n                          unsigned long flags);\n\nint X509_REVOKED_get_ext_count(X509_REVOKED *x);\nint X509_REVOKED_get_ext_by_NID(X509_REVOKED *x, int nid, int lastpos);\nint X509_REVOKED_get_ext_by_OBJ(X509_REVOKED *x, ASN1_OBJECT *obj,\n                                int lastpos);\nint X509_REVOKED_get_ext_by_critical(X509_REVOKED *x, int crit, int lastpos);\nX509_EXTENSION *X509_REVOKED_get_ext(X509_REVOKED *x, int loc);\nX509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc);\nint X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc);\nvoid *X509_REVOKED_get_ext_d2i(X509_REVOKED *x, int nid, int *crit, int *idx);\nint X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit,\n                              unsigned long flags);\n\nX509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,\n                                             int nid, int crit,\n                                             ASN1_OCTET_STRING *data);\nX509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex,\n                                             ASN1_OBJECT *obj, int crit,\n                                             ASN1_OCTET_STRING *data);\nint X509_EXTENSION_set_object(X509_EXTENSION *ex, ASN1_OBJECT *obj);\nint X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit);\nint X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data);\nASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex);\nASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne);\nint X509_EXTENSION_get_critical(X509_EXTENSION *ex);\n\nint X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x);\nint X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid,\n                           int lastpos);\nint X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk,\n                           ASN1_OBJECT *obj, int lastpos);\nX509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc);\nX509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc);\nSTACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x,\n                                           X509_ATTRIBUTE *attr);\nSTACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE)\n                                                  **x, const ASN1_OBJECT *obj,\n                                                  int type,\n                                                  const unsigned char *bytes,\n                                                  int len);\nSTACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE)\n                                                  **x, int nid, int type,\n                                                  const unsigned char *bytes,\n                                                  int len);\nSTACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE)\n                                                  **x, const char *attrname,\n                                                  int type,\n                                                  const unsigned char *bytes,\n                                                  int len);\nvoid *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, ASN1_OBJECT *obj,\n                              int lastpos, int type);\nX509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid,\n                                             int atrtype, const void *data,\n                                             int len);\nX509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr,\n                                             const ASN1_OBJECT *obj,\n                                             int atrtype, const void *data,\n                                             int len);\nX509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr,\n                                             const char *atrname, int type,\n                                             const unsigned char *bytes,\n                                             int len);\nint X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj);\nint X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype,\n                             const void *data, int len);\nvoid *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype,\n                               void *data);\nint X509_ATTRIBUTE_count(X509_ATTRIBUTE *attr);\nASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr);\nASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx);\n\nint EVP_PKEY_get_attr_count(const EVP_PKEY *key);\nint EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos);\nint EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj,\n                             int lastpos);\nX509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc);\nX509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc);\nint EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr);\nint EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key,\n                              const ASN1_OBJECT *obj, int type,\n                              const unsigned char *bytes, int len);\nint EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key,\n                              int nid, int type,\n                              const unsigned char *bytes, int len);\nint EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key,\n                              const char *attrname, int type,\n                              const unsigned char *bytes, int len);\n\nint X509_verify_cert(X509_STORE_CTX *ctx);\n\n/* lookup a cert from a X509 STACK */\nX509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name,\n                                     ASN1_INTEGER *serial);\nX509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name);\n\nDECLARE_ASN1_FUNCTIONS(PBEPARAM)\nDECLARE_ASN1_FUNCTIONS(PBE2PARAM)\nDECLARE_ASN1_FUNCTIONS(PBKDF2PARAM)\n\nint PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter,\n                         const unsigned char *salt, int saltlen);\n\nX509_ALGOR *PKCS5_pbe_set(int alg, int iter,\n                          const unsigned char *salt, int saltlen);\nX509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter,\n                           unsigned char *salt, int saltlen);\nX509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter,\n                              unsigned char *salt, int saltlen,\n                              unsigned char *aiv, int prf_nid);\n\nX509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen,\n                             int prf_nid, int keylen);\n\n/* PKCS#8 utilities */\n\nDECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO)\n\nEVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8);\nPKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey);\nPKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken);\nPKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken);\n\nint PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj,\n                    int version, int ptype, void *pval,\n                    unsigned char *penc, int penclen);\nint PKCS8_pkey_get0(ASN1_OBJECT **ppkalg,\n                    const unsigned char **pk, int *ppklen,\n                    X509_ALGOR **pa, PKCS8_PRIV_KEY_INFO *p8);\n\nint X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,\n                           int ptype, void *pval,\n                           unsigned char *penc, int penclen);\nint X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,\n                           const unsigned char **pk, int *ppklen,\n                           X509_ALGOR **pa, X509_PUBKEY *pub);\n\nint X509_check_trust(X509 *x, int id, int flags);\nint X509_TRUST_get_count(void);\nX509_TRUST *X509_TRUST_get0(int idx);\nint X509_TRUST_get_by_id(int id);\nint X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int),\n                   char *name, int arg1, void *arg2);\nvoid X509_TRUST_cleanup(void);\nint X509_TRUST_get_flags(X509_TRUST *xp);\nchar *X509_TRUST_get0_name(X509_TRUST *xp);\nint X509_TRUST_get_trust(X509_TRUST *xp);\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_X509_strings(void);\n\n/* Error codes for the X509 functions. */\n\n/* Function codes. */\n# define X509_F_ADD_CERT_DIR                              100\n# define X509_F_BY_FILE_CTRL                              101\n# define X509_F_CHECK_POLICY                              145\n# define X509_F_DIR_CTRL                                  102\n# define X509_F_GET_CERT_BY_SUBJECT                       103\n# define X509_F_NETSCAPE_SPKI_B64_DECODE                  129\n# define X509_F_NETSCAPE_SPKI_B64_ENCODE                  130\n# define X509_F_X509AT_ADD1_ATTR                          135\n# define X509_F_X509V3_ADD_EXT                            104\n# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID              136\n# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ              137\n# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT              140\n# define X509_F_X509_ATTRIBUTE_GET0_DATA                  139\n# define X509_F_X509_ATTRIBUTE_SET1_DATA                  138\n# define X509_F_X509_CHECK_PRIVATE_KEY                    128\n# define X509_F_X509_CRL_DIFF                             105\n# define X509_F_X509_CRL_PRINT_FP                         147\n# define X509_F_X509_EXTENSION_CREATE_BY_NID              108\n# define X509_F_X509_EXTENSION_CREATE_BY_OBJ              109\n# define X509_F_X509_GET_PUBKEY_PARAMETERS                110\n# define X509_F_X509_LOAD_CERT_CRL_FILE                   132\n# define X509_F_X509_LOAD_CERT_FILE                       111\n# define X509_F_X509_LOAD_CRL_FILE                        112\n# define X509_F_X509_NAME_ADD_ENTRY                       113\n# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID             114\n# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT             131\n# define X509_F_X509_NAME_ENTRY_SET_OBJECT                115\n# define X509_F_X509_NAME_ONELINE                         116\n# define X509_F_X509_NAME_PRINT                           117\n# define X509_F_X509_PRINT_EX_FP                          118\n# define X509_F_X509_PUBKEY_GET                           119\n# define X509_F_X509_PUBKEY_SET                           120\n# define X509_F_X509_REQ_CHECK_PRIVATE_KEY                144\n# define X509_F_X509_REQ_PRINT_EX                         121\n# define X509_F_X509_REQ_PRINT_FP                         122\n# define X509_F_X509_REQ_TO_X509                          123\n# define X509_F_X509_STORE_ADD_CERT                       124\n# define X509_F_X509_STORE_ADD_CRL                        125\n# define X509_F_X509_STORE_CTX_GET1_ISSUER                146\n# define X509_F_X509_STORE_CTX_INIT                       143\n# define X509_F_X509_STORE_CTX_NEW                        142\n# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT            134\n# define X509_F_X509_TO_X509_REQ                          126\n# define X509_F_X509_TRUST_ADD                            133\n# define X509_F_X509_TRUST_SET                            141\n# define X509_F_X509_VERIFY_CERT                          127\n\n/* Reason codes. */\n# define X509_R_AKID_MISMATCH                             110\n# define X509_R_BAD_X509_FILETYPE                         100\n# define X509_R_BASE64_DECODE_ERROR                       118\n# define X509_R_CANT_CHECK_DH_KEY                         114\n# define X509_R_CERT_ALREADY_IN_HASH_TABLE                101\n# define X509_R_CRL_ALREADY_DELTA                         127\n# define X509_R_CRL_VERIFY_FAILURE                        131\n# define X509_R_ERR_ASN1_LIB                              102\n# define X509_R_IDP_MISMATCH                              128\n# define X509_R_INVALID_DIRECTORY                         113\n# define X509_R_INVALID_FIELD_NAME                        119\n# define X509_R_INVALID_TRUST                             123\n# define X509_R_ISSUER_MISMATCH                           129\n# define X509_R_KEY_TYPE_MISMATCH                         115\n# define X509_R_KEY_VALUES_MISMATCH                       116\n# define X509_R_LOADING_CERT_DIR                          103\n# define X509_R_LOADING_DEFAULTS                          104\n# define X509_R_METHOD_NOT_SUPPORTED                      124\n# define X509_R_NEWER_CRL_NOT_NEWER                       132\n# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY              105\n# define X509_R_NO_CRL_NUMBER                             130\n# define X509_R_PUBLIC_KEY_DECODE_ERROR                   125\n# define X509_R_PUBLIC_KEY_ENCODE_ERROR                   126\n# define X509_R_SHOULD_RETRY                              106\n# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN        107\n# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY            108\n# define X509_R_UNKNOWN_KEY_TYPE                          117\n# define X509_R_UNKNOWN_NID                               109\n# define X509_R_UNKNOWN_PURPOSE_ID                        121\n# define X509_R_UNKNOWN_TRUST_ID                          120\n# define X509_R_UNSUPPORTED_ALGORITHM                     111\n# define X509_R_WRONG_LOOKUP_TYPE                         112\n# define X509_R_WRONG_TYPE                                122\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/x509_vfy.h",
    "content": "/* crypto/x509/x509_vfy.h */\n/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\n * All rights reserved.\n *\n * This package is an SSL implementation written\n * by Eric Young (eay@cryptsoft.com).\n * The implementation was written so as to conform with Netscapes SSL.\n *\n * This library is free for commercial and non-commercial use as long as\n * the following conditions are aheared to.  The following conditions\n * apply to all code found in this distribution, be it the RC4, RSA,\n * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\n * included with this distribution is covered by the same copyright terms\n * except that the holder is Tim Hudson (tjh@cryptsoft.com).\n *\n * Copyright remains Eric Young's, and as such any Copyright notices in\n * the code are not to be removed.\n * If this package is used in a product, Eric Young should be given attribution\n * as the author of the parts of the library used.\n * This can be in the form of a textual message at program startup or\n * in documentation (online or textual) provided with the package.\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 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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *    \"This product includes cryptographic software written by\n *     Eric Young (eay@cryptsoft.com)\"\n *    The word 'cryptographic' can be left out if the rouines from the library\n *    being used are not cryptographic related :-).\n * 4. If you include any Windows specific code (or a derivative thereof) from\n *    the apps directory (application code) you must include an acknowledgement:\n *    \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\"\n *\n * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 * The licence and distribution terms for any publically available version or\n * derivative of this code cannot be changed.  i.e. this code cannot simply be\n * copied and put under another distribution licence\n * [including the GNU Public Licence.]\n */\n\n#ifndef HEADER_X509_H\n# include <openssl/x509.h>\n/*\n * openssl/x509.h ends up #include-ing this file at about the only\n * appropriate moment.\n */\n#endif\n\n#ifndef HEADER_X509_VFY_H\n# define HEADER_X509_VFY_H\n\n# include <openssl/opensslconf.h>\n# ifndef OPENSSL_NO_LHASH\n#  include <openssl/lhash.h>\n# endif\n# include <openssl/bio.h>\n# include <openssl/crypto.h>\n# include <openssl/symhacks.h>\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n# if 0\n/* Outer object */\ntypedef struct x509_hash_dir_st {\n    int num_dirs;\n    char **dirs;\n    int *dirs_type;\n    int num_dirs_alloced;\n} X509_HASH_DIR_CTX;\n# endif\n\ntypedef struct x509_file_st {\n    int num_paths;              /* number of paths to files or directories */\n    int num_alloced;\n    char **paths;               /* the list of paths or directories */\n    int *path_type;\n} X509_CERT_FILE_CTX;\n\n/*******************************/\n/*-\nSSL_CTX -> X509_STORE\n                -> X509_LOOKUP\n                        ->X509_LOOKUP_METHOD\n                -> X509_LOOKUP\n                        ->X509_LOOKUP_METHOD\n\nSSL     -> X509_STORE_CTX\n                ->X509_STORE\n\nThe X509_STORE holds the tables etc for verification stuff.\nA X509_STORE_CTX is used while validating a single certificate.\nThe X509_STORE has X509_LOOKUPs for looking up certs.\nThe X509_STORE then calls a function to actually verify the\ncertificate chain.\n*/\n\n# define X509_LU_RETRY           -1\n# define X509_LU_FAIL            0\n# define X509_LU_X509            1\n# define X509_LU_CRL             2\n# define X509_LU_PKEY            3\n\ntypedef struct x509_object_st {\n    /* one of the above types */\n    int type;\n    union {\n        char *ptr;\n        X509 *x509;\n        X509_CRL *crl;\n        EVP_PKEY *pkey;\n    } data;\n} X509_OBJECT;\n\ntypedef struct x509_lookup_st X509_LOOKUP;\n\nDECLARE_STACK_OF(X509_LOOKUP)\nDECLARE_STACK_OF(X509_OBJECT)\n\n/* This is a static that defines the function interface */\ntypedef struct x509_lookup_method_st {\n    const char *name;\n    int (*new_item) (X509_LOOKUP *ctx);\n    void (*free) (X509_LOOKUP *ctx);\n    int (*init) (X509_LOOKUP *ctx);\n    int (*shutdown) (X509_LOOKUP *ctx);\n    int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl,\n                 char **ret);\n    int (*get_by_subject) (X509_LOOKUP *ctx, int type, X509_NAME *name,\n                           X509_OBJECT *ret);\n    int (*get_by_issuer_serial) (X509_LOOKUP *ctx, int type, X509_NAME *name,\n                                 ASN1_INTEGER *serial, X509_OBJECT *ret);\n    int (*get_by_fingerprint) (X509_LOOKUP *ctx, int type,\n                               unsigned char *bytes, int len,\n                               X509_OBJECT *ret);\n    int (*get_by_alias) (X509_LOOKUP *ctx, int type, char *str, int len,\n                         X509_OBJECT *ret);\n} X509_LOOKUP_METHOD;\n\ntypedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID;\n\n/*\n * This structure hold all parameters associated with a verify operation by\n * including an X509_VERIFY_PARAM structure in related structures the\n * parameters used can be customized\n */\n\ntypedef struct X509_VERIFY_PARAM_st {\n    char *name;\n    time_t check_time;          /* Time to use */\n    unsigned long inh_flags;    /* Inheritance flags */\n    unsigned long flags;        /* Various verify flags */\n    int purpose;                /* purpose to check untrusted certificates */\n    int trust;                  /* trust setting to check */\n    int depth;                  /* Verify depth */\n    STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */\n    X509_VERIFY_PARAM_ID *id;   /* opaque ID data */\n} X509_VERIFY_PARAM;\n\nDECLARE_STACK_OF(X509_VERIFY_PARAM)\n\n/*\n * This is used to hold everything.  It is used for all certificate\n * validation.  Once we have a certificate chain, the 'verify' function is\n * then called to actually check the cert chain.\n */\nstruct x509_store_st {\n    /* The following is a cache of trusted certs */\n    int cache;                  /* if true, stash any hits */\n    STACK_OF(X509_OBJECT) *objs; /* Cache of all objects */\n    /* These are external lookup methods */\n    STACK_OF(X509_LOOKUP) *get_cert_methods;\n    X509_VERIFY_PARAM *param;\n    /* Callbacks for various operations */\n    /* called to verify a certificate */\n    int (*verify) (X509_STORE_CTX *ctx);\n    /* error callback */\n    int (*verify_cb) (int ok, X509_STORE_CTX *ctx);\n    /* get issuers cert from ctx */\n    int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x);\n    /* check issued */\n    int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer);\n    /* Check revocation status of chain */\n    int (*check_revocation) (X509_STORE_CTX *ctx);\n    /* retrieve CRL */\n    int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x);\n    /* Check CRL validity */\n    int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl);\n    /* Check certificate against CRL */\n    int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x);\n    STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm);\n    STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm);\n    int (*cleanup) (X509_STORE_CTX *ctx);\n    CRYPTO_EX_DATA ex_data;\n    int references;\n} /* X509_STORE */ ;\n\nint X509_STORE_set_depth(X509_STORE *store, int depth);\n\n# define X509_STORE_set_verify_cb_func(ctx,func) ((ctx)->verify_cb=(func))\n# define X509_STORE_set_verify_func(ctx,func)    ((ctx)->verify=(func))\n\n/* This is the functions plus an instance of the local variables. */\nstruct x509_lookup_st {\n    int init;                   /* have we been started */\n    int skip;                   /* don't use us. */\n    X509_LOOKUP_METHOD *method; /* the functions */\n    char *method_data;          /* method data */\n    X509_STORE *store_ctx;      /* who owns us */\n} /* X509_LOOKUP */ ;\n\n/*\n * This is a used when verifying cert chains.  Since the gathering of the\n * cert chain can take some time (and have to be 'retried', this needs to be\n * kept and passed around.\n */\nstruct x509_store_ctx_st {      /* X509_STORE_CTX */\n    X509_STORE *ctx;\n    /* used when looking up certs */\n    int current_method;\n    /* The following are set by the caller */\n    /* The cert to check */\n    X509 *cert;\n    /* chain of X509s - untrusted - passed in */\n    STACK_OF(X509) *untrusted;\n    /* set of CRLs passed in */\n    STACK_OF(X509_CRL) *crls;\n    X509_VERIFY_PARAM *param;\n    /* Other info for use with get_issuer() */\n    void *other_ctx;\n    /* Callbacks for various operations */\n    /* called to verify a certificate */\n    int (*verify) (X509_STORE_CTX *ctx);\n    /* error callback */\n    int (*verify_cb) (int ok, X509_STORE_CTX *ctx);\n    /* get issuers cert from ctx */\n    int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x);\n    /* check issued */\n    int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer);\n    /* Check revocation status of chain */\n    int (*check_revocation) (X509_STORE_CTX *ctx);\n    /* retrieve CRL */\n    int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x);\n    /* Check CRL validity */\n    int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl);\n    /* Check certificate against CRL */\n    int (*cert_crl) (X509_STORE_CTX *ctx, X509_CRL *crl, X509 *x);\n    int (*check_policy) (X509_STORE_CTX *ctx);\n    STACK_OF(X509) *(*lookup_certs) (X509_STORE_CTX *ctx, X509_NAME *nm);\n    STACK_OF(X509_CRL) *(*lookup_crls) (X509_STORE_CTX *ctx, X509_NAME *nm);\n    int (*cleanup) (X509_STORE_CTX *ctx);\n    /* The following is built up */\n    /* if 0, rebuild chain */\n    int valid;\n    /* index of last untrusted cert */\n    int last_untrusted;\n    /* chain of X509s - built up and trusted */\n    STACK_OF(X509) *chain;\n    /* Valid policy tree */\n    X509_POLICY_TREE *tree;\n    /* Require explicit policy value */\n    int explicit_policy;\n    /* When something goes wrong, this is why */\n    int error_depth;\n    int error;\n    X509 *current_cert;\n    /* cert currently being tested as valid issuer */\n    X509 *current_issuer;\n    /* current CRL */\n    X509_CRL *current_crl;\n    /* score of current CRL */\n    int current_crl_score;\n    /* Reason mask */\n    unsigned int current_reasons;\n    /* For CRL path validation: parent context */\n    X509_STORE_CTX *parent;\n    CRYPTO_EX_DATA ex_data;\n} /* X509_STORE_CTX */ ;\n\nvoid X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);\n\n# define X509_STORE_CTX_set_app_data(ctx,data) \\\n        X509_STORE_CTX_set_ex_data(ctx,0,data)\n# define X509_STORE_CTX_get_app_data(ctx) \\\n        X509_STORE_CTX_get_ex_data(ctx,0)\n\n# define X509_L_FILE_LOAD        1\n# define X509_L_ADD_DIR          2\n\n# define X509_LOOKUP_load_file(x,name,type) \\\n                X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL)\n\n# define X509_LOOKUP_add_dir(x,name,type) \\\n                X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL)\n\n# define         X509_V_OK                                       0\n/* illegal error (for uninitialized values, to avoid X509_V_OK): 1 */\n\n# define         X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT            2\n# define         X509_V_ERR_UNABLE_TO_GET_CRL                    3\n# define         X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE     4\n# define         X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE      5\n# define         X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY   6\n# define         X509_V_ERR_CERT_SIGNATURE_FAILURE               7\n# define         X509_V_ERR_CRL_SIGNATURE_FAILURE                8\n# define         X509_V_ERR_CERT_NOT_YET_VALID                   9\n# define         X509_V_ERR_CERT_HAS_EXPIRED                     10\n# define         X509_V_ERR_CRL_NOT_YET_VALID                    11\n# define         X509_V_ERR_CRL_HAS_EXPIRED                      12\n# define         X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD       13\n# define         X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD        14\n# define         X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD       15\n# define         X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD       16\n# define         X509_V_ERR_OUT_OF_MEM                           17\n# define         X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT          18\n# define         X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN            19\n# define         X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY    20\n# define         X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE      21\n# define         X509_V_ERR_CERT_CHAIN_TOO_LONG                  22\n# define         X509_V_ERR_CERT_REVOKED                         23\n# define         X509_V_ERR_INVALID_CA                           24\n# define         X509_V_ERR_PATH_LENGTH_EXCEEDED                 25\n# define         X509_V_ERR_INVALID_PURPOSE                      26\n# define         X509_V_ERR_CERT_UNTRUSTED                       27\n# define         X509_V_ERR_CERT_REJECTED                        28\n/* These are 'informational' when looking for issuer cert */\n# define         X509_V_ERR_SUBJECT_ISSUER_MISMATCH              29\n# define         X509_V_ERR_AKID_SKID_MISMATCH                   30\n# define         X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH          31\n# define         X509_V_ERR_KEYUSAGE_NO_CERTSIGN                 32\n\n# define         X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER             33\n# define         X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION         34\n# define         X509_V_ERR_KEYUSAGE_NO_CRL_SIGN                 35\n# define         X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION     36\n# define         X509_V_ERR_INVALID_NON_CA                       37\n# define         X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED           38\n# define         X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE        39\n# define         X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED       40\n\n# define         X509_V_ERR_INVALID_EXTENSION                    41\n# define         X509_V_ERR_INVALID_POLICY_EXTENSION             42\n# define         X509_V_ERR_NO_EXPLICIT_POLICY                   43\n# define         X509_V_ERR_DIFFERENT_CRL_SCOPE                  44\n# define         X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE        45\n\n# define         X509_V_ERR_UNNESTED_RESOURCE                    46\n\n# define         X509_V_ERR_PERMITTED_VIOLATION                  47\n# define         X509_V_ERR_EXCLUDED_VIOLATION                   48\n# define         X509_V_ERR_SUBTREE_MINMAX                       49\n# define         X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE          51\n# define         X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX        52\n# define         X509_V_ERR_UNSUPPORTED_NAME_SYNTAX              53\n# define         X509_V_ERR_CRL_PATH_VALIDATION_ERROR            54\n\n/* Suite B mode algorithm violation */\n# define         X509_V_ERR_SUITE_B_INVALID_VERSION              56\n# define         X509_V_ERR_SUITE_B_INVALID_ALGORITHM            57\n# define         X509_V_ERR_SUITE_B_INVALID_CURVE                58\n# define         X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM  59\n# define         X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED              60\n# define         X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61\n\n/* Host, email and IP check errors */\n# define         X509_V_ERR_HOSTNAME_MISMATCH                    62\n# define         X509_V_ERR_EMAIL_MISMATCH                       63\n# define         X509_V_ERR_IP_ADDRESS_MISMATCH                  64\n\n/* The application is not happy */\n# define         X509_V_ERR_APPLICATION_VERIFICATION             50\n\n/* Certificate verify flags */\n\n/* Send issuer+subject checks to verify_cb */\n# define X509_V_FLAG_CB_ISSUER_CHECK             0x1\n/* Use check time instead of current time */\n# define X509_V_FLAG_USE_CHECK_TIME              0x2\n/* Lookup CRLs */\n# define X509_V_FLAG_CRL_CHECK                   0x4\n/* Lookup CRLs for whole chain */\n# define X509_V_FLAG_CRL_CHECK_ALL               0x8\n/* Ignore unhandled critical extensions */\n# define X509_V_FLAG_IGNORE_CRITICAL             0x10\n/* Disable workarounds for broken certificates */\n# define X509_V_FLAG_X509_STRICT                 0x20\n/* Enable proxy certificate validation */\n# define X509_V_FLAG_ALLOW_PROXY_CERTS           0x40\n/* Enable policy checking */\n# define X509_V_FLAG_POLICY_CHECK                0x80\n/* Policy variable require-explicit-policy */\n# define X509_V_FLAG_EXPLICIT_POLICY             0x100\n/* Policy variable inhibit-any-policy */\n# define X509_V_FLAG_INHIBIT_ANY                 0x200\n/* Policy variable inhibit-policy-mapping */\n# define X509_V_FLAG_INHIBIT_MAP                 0x400\n/* Notify callback that policy is OK */\n# define X509_V_FLAG_NOTIFY_POLICY               0x800\n/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */\n# define X509_V_FLAG_EXTENDED_CRL_SUPPORT        0x1000\n/* Delta CRL support */\n# define X509_V_FLAG_USE_DELTAS                  0x2000\n/* Check selfsigned CA signature */\n# define X509_V_FLAG_CHECK_SS_SIGNATURE          0x4000\n/* Use trusted store first */\n# define X509_V_FLAG_TRUSTED_FIRST               0x8000\n/* Suite B 128 bit only mode: not normally used */\n# define X509_V_FLAG_SUITEB_128_LOS_ONLY         0x10000\n/* Suite B 192 bit only mode */\n# define X509_V_FLAG_SUITEB_192_LOS              0x20000\n/* Suite B 128 bit mode allowing 192 bit algorithms */\n# define X509_V_FLAG_SUITEB_128_LOS              0x30000\n\n/* Allow partial chains if at least one certificate is in trusted store */\n# define X509_V_FLAG_PARTIAL_CHAIN               0x80000\n\n# define X509_VP_FLAG_DEFAULT                    0x1\n# define X509_VP_FLAG_OVERWRITE                  0x2\n# define X509_VP_FLAG_RESET_FLAGS                0x4\n# define X509_VP_FLAG_LOCKED                     0x8\n# define X509_VP_FLAG_ONCE                       0x10\n\n/* Internal use: mask of policy related options */\n# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \\\n                                | X509_V_FLAG_EXPLICIT_POLICY \\\n                                | X509_V_FLAG_INHIBIT_ANY \\\n                                | X509_V_FLAG_INHIBIT_MAP)\n\nint X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, int type,\n                               X509_NAME *name);\nX509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h,\n                                             int type, X509_NAME *name);\nX509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h,\n                                        X509_OBJECT *x);\nvoid X509_OBJECT_up_ref_count(X509_OBJECT *a);\nvoid X509_OBJECT_free_contents(X509_OBJECT *a);\nX509_STORE *X509_STORE_new(void);\nvoid X509_STORE_free(X509_STORE *v);\n\nSTACK_OF(X509) *X509_STORE_get1_certs(X509_STORE_CTX *st, X509_NAME *nm);\nSTACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *st, X509_NAME *nm);\nint X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags);\nint X509_STORE_set_purpose(X509_STORE *ctx, int purpose);\nint X509_STORE_set_trust(X509_STORE *ctx, int trust);\nint X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm);\n\nvoid X509_STORE_set_verify_cb(X509_STORE *ctx,\n                              int (*verify_cb) (int, X509_STORE_CTX *));\n\nvoid X509_STORE_set_lookup_crls_cb(X509_STORE *ctx,\n                                   STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX\n                                                              *ctx,\n                                                              X509_NAME *nm));\n\nX509_STORE_CTX *X509_STORE_CTX_new(void);\n\nint X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);\n\nvoid X509_STORE_CTX_free(X509_STORE_CTX *ctx);\nint X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,\n                        X509 *x509, STACK_OF(X509) *chain);\nvoid X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);\nvoid X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);\n\nX509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx);\n\nX509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m);\n\nX509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);\nX509_LOOKUP_METHOD *X509_LOOKUP_file(void);\n\nint X509_STORE_add_cert(X509_STORE *ctx, X509 *x);\nint X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x);\n\nint X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name,\n                              X509_OBJECT *ret);\n\nint X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc,\n                     long argl, char **ret);\n\n# ifndef OPENSSL_NO_STDIO\nint X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type);\nint X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type);\nint X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type);\n# endif\n\nX509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method);\nvoid X509_LOOKUP_free(X509_LOOKUP *ctx);\nint X509_LOOKUP_init(X509_LOOKUP *ctx);\nint X509_LOOKUP_by_subject(X509_LOOKUP *ctx, int type, X509_NAME *name,\n                           X509_OBJECT *ret);\nint X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, int type, X509_NAME *name,\n                                 ASN1_INTEGER *serial, X509_OBJECT *ret);\nint X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, int type,\n                               unsigned char *bytes, int len,\n                               X509_OBJECT *ret);\nint X509_LOOKUP_by_alias(X509_LOOKUP *ctx, int type, char *str, int len,\n                         X509_OBJECT *ret);\nint X509_LOOKUP_shutdown(X509_LOOKUP *ctx);\n\n# ifndef OPENSSL_NO_STDIO\nint X509_STORE_load_locations(X509_STORE *ctx,\n                              const char *file, const char *dir);\nint X509_STORE_set_default_paths(X509_STORE *ctx);\n# endif\n\nint X509_STORE_CTX_get_ex_new_index(long argl, void *argp,\n                                    CRYPTO_EX_new *new_func,\n                                    CRYPTO_EX_dup *dup_func,\n                                    CRYPTO_EX_free *free_func);\nint X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data);\nvoid *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx);\nint X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);\nvoid X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s);\nint X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);\nX509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);\nX509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx);\nX509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx);\nX509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx);\nSTACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx);\nSTACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);\nvoid X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x);\nvoid X509_STORE_CTX_set_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk);\nvoid X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk);\nint X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);\nint X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);\nint X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,\n                                   int purpose, int trust);\nvoid X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags);\nvoid X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags,\n                             time_t t);\nvoid X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,\n                                  int (*verify_cb) (int, X509_STORE_CTX *));\n\nX509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx);\nint X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx);\n\nX509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx);\nvoid X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);\nint X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);\n\n/* X509_VERIFY_PARAM functions */\n\nX509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void);\nvoid X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param);\nint X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to,\n                              const X509_VERIFY_PARAM *from);\nint X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,\n                           const X509_VERIFY_PARAM *from);\nint X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name);\nint X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param,\n                                unsigned long flags);\nint X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,\n                                  unsigned long flags);\nunsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);\nint X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);\nint X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);\nvoid X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);\nvoid X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);\nint X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,\n                                  ASN1_OBJECT *policy);\nint X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,\n                                    STACK_OF(ASN1_OBJECT) *policies);\n\nint X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,\n                                const char *name, size_t namelen);\nint X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,\n                                const char *name, size_t namelen);\nvoid X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,\n                                     unsigned int flags);\nchar *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *);\nint X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,\n                                 const char *email, size_t emaillen);\nint X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,\n                              const unsigned char *ip, size_t iplen);\nint X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param,\n                                  const char *ipasc);\n\nint X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);\nconst char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param);\n\nint X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param);\nint X509_VERIFY_PARAM_get_count(void);\nconst X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id);\nconst X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name);\nvoid X509_VERIFY_PARAM_table_cleanup(void);\n\nint X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,\n                      STACK_OF(X509) *certs,\n                      STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags);\n\nvoid X509_policy_tree_free(X509_POLICY_TREE *tree);\n\nint X509_policy_tree_level_count(const X509_POLICY_TREE *tree);\nX509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree,\n                                               int i);\n\nSTACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const\n                                                           X509_POLICY_TREE\n                                                           *tree);\n\nSTACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const\n                                                                X509_POLICY_TREE\n                                                                *tree);\n\nint X509_policy_level_node_count(X509_POLICY_LEVEL *level);\n\nX509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level,\n                                              int i);\n\nconst ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node);\n\nSTACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const\n                                                           X509_POLICY_NODE\n                                                           *node);\nconst X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE\n                                                     *node);\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libopenssl/include/openssl/x509v3.h",
    "content": "/* x509v3.h */\n/*\n * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project\n * 1999.\n */\n/* ====================================================================\n * Copyright (c) 1999-2004 The OpenSSL Project.  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\n *    the documentation and/or other materials provided with the\n *    distribution.\n *\n * 3. All advertising materials mentioning features or use of this\n *    software must display the following acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)\"\n *\n * 4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to\n *    endorse or promote products derived from this software without\n *    prior written permission. For written permission, please contact\n *    licensing@OpenSSL.org.\n *\n * 5. Products derived from this software may not be called \"OpenSSL\"\n *    nor may \"OpenSSL\" appear in their names without prior written\n *    permission of the OpenSSL Project.\n *\n * 6. Redistributions of any form whatsoever must retain the following\n *    acknowledgment:\n *    \"This product includes software developed by the OpenSSL Project\n *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)\"\n *\n * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY\n * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR\n * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n * ====================================================================\n *\n * This product includes cryptographic software written by Eric Young\n * (eay@cryptsoft.com).  This product includes software written by Tim\n * Hudson (tjh@cryptsoft.com).\n *\n */\n#ifndef HEADER_X509V3_H\n# define HEADER_X509V3_H\n\n# include <openssl/bio.h>\n# include <openssl/x509.h>\n# include <openssl/conf.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n# ifdef OPENSSL_SYS_WIN32\n/* Under Win32 these are defined in wincrypt.h */\n#  undef X509_NAME\n#  undef X509_CERT_PAIR\n#  undef X509_EXTENSIONS\n# endif\n\n/* Forward reference */\nstruct v3_ext_method;\nstruct v3_ext_ctx;\n\n/* Useful typedefs */\n\ntypedef void *(*X509V3_EXT_NEW)(void);\ntypedef void (*X509V3_EXT_FREE) (void *);\ntypedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long);\ntypedef int (*X509V3_EXT_I2D) (void *, unsigned char **);\ntypedef STACK_OF(CONF_VALUE) *\n    (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext,\n                       STACK_OF(CONF_VALUE) *extlist);\ntypedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method,\n                                struct v3_ext_ctx *ctx,\n                                STACK_OF(CONF_VALUE) *values);\ntypedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method,\n                                void *ext);\ntypedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method,\n                                struct v3_ext_ctx *ctx, const char *str);\ntypedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext,\n                               BIO *out, int indent);\ntypedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method,\n                                struct v3_ext_ctx *ctx, const char *str);\n\n/* V3 extension structure */\n\nstruct v3_ext_method {\n    int ext_nid;\n    int ext_flags;\n/* If this is set the following four fields are ignored */\n    ASN1_ITEM_EXP *it;\n/* Old style ASN1 calls */\n    X509V3_EXT_NEW ext_new;\n    X509V3_EXT_FREE ext_free;\n    X509V3_EXT_D2I d2i;\n    X509V3_EXT_I2D i2d;\n/* The following pair is used for string extensions */\n    X509V3_EXT_I2S i2s;\n    X509V3_EXT_S2I s2i;\n/* The following pair is used for multi-valued extensions */\n    X509V3_EXT_I2V i2v;\n    X509V3_EXT_V2I v2i;\n/* The following are used for raw extensions */\n    X509V3_EXT_I2R i2r;\n    X509V3_EXT_R2I r2i;\n    void *usr_data;             /* Any extension specific data */\n};\n\ntypedef struct X509V3_CONF_METHOD_st {\n    char *(*get_string) (void *db, char *section, char *value);\n    STACK_OF(CONF_VALUE) *(*get_section) (void *db, char *section);\n    void (*free_string) (void *db, char *string);\n    void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section);\n} X509V3_CONF_METHOD;\n\n/* Context specific info */\nstruct v3_ext_ctx {\n# define CTX_TEST 0x1\n    int flags;\n    X509 *issuer_cert;\n    X509 *subject_cert;\n    X509_REQ *subject_req;\n    X509_CRL *crl;\n    X509V3_CONF_METHOD *db_meth;\n    void *db;\n/* Maybe more here */\n};\n\ntypedef struct v3_ext_method X509V3_EXT_METHOD;\n\nDECLARE_STACK_OF(X509V3_EXT_METHOD)\n\n/* ext_flags values */\n# define X509V3_EXT_DYNAMIC      0x1\n# define X509V3_EXT_CTX_DEP      0x2\n# define X509V3_EXT_MULTILINE    0x4\n\ntypedef BIT_STRING_BITNAME ENUMERATED_NAMES;\n\ntypedef struct BASIC_CONSTRAINTS_st {\n    int ca;\n    ASN1_INTEGER *pathlen;\n} BASIC_CONSTRAINTS;\n\ntypedef struct PKEY_USAGE_PERIOD_st {\n    ASN1_GENERALIZEDTIME *notBefore;\n    ASN1_GENERALIZEDTIME *notAfter;\n} PKEY_USAGE_PERIOD;\n\ntypedef struct otherName_st {\n    ASN1_OBJECT *type_id;\n    ASN1_TYPE *value;\n} OTHERNAME;\n\ntypedef struct EDIPartyName_st {\n    ASN1_STRING *nameAssigner;\n    ASN1_STRING *partyName;\n} EDIPARTYNAME;\n\ntypedef struct GENERAL_NAME_st {\n# define GEN_OTHERNAME   0\n# define GEN_EMAIL       1\n# define GEN_DNS         2\n# define GEN_X400        3\n# define GEN_DIRNAME     4\n# define GEN_EDIPARTY    5\n# define GEN_URI         6\n# define GEN_IPADD       7\n# define GEN_RID         8\n    int type;\n    union {\n        char *ptr;\n        OTHERNAME *otherName;   /* otherName */\n        ASN1_IA5STRING *rfc822Name;\n        ASN1_IA5STRING *dNSName;\n        ASN1_TYPE *x400Address;\n        X509_NAME *directoryName;\n        EDIPARTYNAME *ediPartyName;\n        ASN1_IA5STRING *uniformResourceIdentifier;\n        ASN1_OCTET_STRING *iPAddress;\n        ASN1_OBJECT *registeredID;\n        /* Old names */\n        ASN1_OCTET_STRING *ip;  /* iPAddress */\n        X509_NAME *dirn;        /* dirn */\n        ASN1_IA5STRING *ia5;    /* rfc822Name, dNSName,\n                                 * uniformResourceIdentifier */\n        ASN1_OBJECT *rid;       /* registeredID */\n        ASN1_TYPE *other;       /* x400Address */\n    } d;\n} GENERAL_NAME;\n\ntypedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;\n\ntypedef struct ACCESS_DESCRIPTION_st {\n    ASN1_OBJECT *method;\n    GENERAL_NAME *location;\n} ACCESS_DESCRIPTION;\n\ntypedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;\n\ntypedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE;\n\nDECLARE_STACK_OF(GENERAL_NAME)\nDECLARE_ASN1_SET_OF(GENERAL_NAME)\n\nDECLARE_STACK_OF(ACCESS_DESCRIPTION)\nDECLARE_ASN1_SET_OF(ACCESS_DESCRIPTION)\n\ntypedef struct DIST_POINT_NAME_st {\n    int type;\n    union {\n        GENERAL_NAMES *fullname;\n        STACK_OF(X509_NAME_ENTRY) *relativename;\n    } name;\n/* If relativename then this contains the full distribution point name */\n    X509_NAME *dpname;\n} DIST_POINT_NAME;\n/* All existing reasons */\n# define CRLDP_ALL_REASONS       0x807f\n\n# define CRL_REASON_NONE                         -1\n# define CRL_REASON_UNSPECIFIED                  0\n# define CRL_REASON_KEY_COMPROMISE               1\n# define CRL_REASON_CA_COMPROMISE                2\n# define CRL_REASON_AFFILIATION_CHANGED          3\n# define CRL_REASON_SUPERSEDED                   4\n# define CRL_REASON_CESSATION_OF_OPERATION       5\n# define CRL_REASON_CERTIFICATE_HOLD             6\n# define CRL_REASON_REMOVE_FROM_CRL              8\n# define CRL_REASON_PRIVILEGE_WITHDRAWN          9\n# define CRL_REASON_AA_COMPROMISE                10\n\nstruct DIST_POINT_st {\n    DIST_POINT_NAME *distpoint;\n    ASN1_BIT_STRING *reasons;\n    GENERAL_NAMES *CRLissuer;\n    int dp_reasons;\n};\n\ntypedef STACK_OF(DIST_POINT) CRL_DIST_POINTS;\n\nDECLARE_STACK_OF(DIST_POINT)\nDECLARE_ASN1_SET_OF(DIST_POINT)\n\nstruct AUTHORITY_KEYID_st {\n    ASN1_OCTET_STRING *keyid;\n    GENERAL_NAMES *issuer;\n    ASN1_INTEGER *serial;\n};\n\n/* Strong extranet structures */\n\ntypedef struct SXNET_ID_st {\n    ASN1_INTEGER *zone;\n    ASN1_OCTET_STRING *user;\n} SXNETID;\n\nDECLARE_STACK_OF(SXNETID)\nDECLARE_ASN1_SET_OF(SXNETID)\n\ntypedef struct SXNET_st {\n    ASN1_INTEGER *version;\n    STACK_OF(SXNETID) *ids;\n} SXNET;\n\ntypedef struct NOTICEREF_st {\n    ASN1_STRING *organization;\n    STACK_OF(ASN1_INTEGER) *noticenos;\n} NOTICEREF;\n\ntypedef struct USERNOTICE_st {\n    NOTICEREF *noticeref;\n    ASN1_STRING *exptext;\n} USERNOTICE;\n\ntypedef struct POLICYQUALINFO_st {\n    ASN1_OBJECT *pqualid;\n    union {\n        ASN1_IA5STRING *cpsuri;\n        USERNOTICE *usernotice;\n        ASN1_TYPE *other;\n    } d;\n} POLICYQUALINFO;\n\nDECLARE_STACK_OF(POLICYQUALINFO)\nDECLARE_ASN1_SET_OF(POLICYQUALINFO)\n\ntypedef struct POLICYINFO_st {\n    ASN1_OBJECT *policyid;\n    STACK_OF(POLICYQUALINFO) *qualifiers;\n} POLICYINFO;\n\ntypedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES;\n\nDECLARE_STACK_OF(POLICYINFO)\nDECLARE_ASN1_SET_OF(POLICYINFO)\n\ntypedef struct POLICY_MAPPING_st {\n    ASN1_OBJECT *issuerDomainPolicy;\n    ASN1_OBJECT *subjectDomainPolicy;\n} POLICY_MAPPING;\n\nDECLARE_STACK_OF(POLICY_MAPPING)\n\ntypedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS;\n\ntypedef struct GENERAL_SUBTREE_st {\n    GENERAL_NAME *base;\n    ASN1_INTEGER *minimum;\n    ASN1_INTEGER *maximum;\n} GENERAL_SUBTREE;\n\nDECLARE_STACK_OF(GENERAL_SUBTREE)\n\nstruct NAME_CONSTRAINTS_st {\n    STACK_OF(GENERAL_SUBTREE) *permittedSubtrees;\n    STACK_OF(GENERAL_SUBTREE) *excludedSubtrees;\n};\n\ntypedef struct POLICY_CONSTRAINTS_st {\n    ASN1_INTEGER *requireExplicitPolicy;\n    ASN1_INTEGER *inhibitPolicyMapping;\n} POLICY_CONSTRAINTS;\n\n/* Proxy certificate structures, see RFC 3820 */\ntypedef struct PROXY_POLICY_st {\n    ASN1_OBJECT *policyLanguage;\n    ASN1_OCTET_STRING *policy;\n} PROXY_POLICY;\n\ntypedef struct PROXY_CERT_INFO_EXTENSION_st {\n    ASN1_INTEGER *pcPathLengthConstraint;\n    PROXY_POLICY *proxyPolicy;\n} PROXY_CERT_INFO_EXTENSION;\n\nDECLARE_ASN1_FUNCTIONS(PROXY_POLICY)\nDECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION)\n\nstruct ISSUING_DIST_POINT_st {\n    DIST_POINT_NAME *distpoint;\n    int onlyuser;\n    int onlyCA;\n    ASN1_BIT_STRING *onlysomereasons;\n    int indirectCRL;\n    int onlyattr;\n};\n\n/* Values in idp_flags field */\n/* IDP present */\n# define IDP_PRESENT     0x1\n/* IDP values inconsistent */\n# define IDP_INVALID     0x2\n/* onlyuser true */\n# define IDP_ONLYUSER    0x4\n/* onlyCA true */\n# define IDP_ONLYCA      0x8\n/* onlyattr true */\n# define IDP_ONLYATTR    0x10\n/* indirectCRL true */\n# define IDP_INDIRECT    0x20\n/* onlysomereasons present */\n# define IDP_REASONS     0x40\n\n# define X509V3_conf_err(val) ERR_add_error_data(6, \"section:\", val->section, \\\n\",name:\", val->name, \",value:\", val->value);\n\n# define X509V3_set_ctx_test(ctx) \\\n                        X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)\n# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL;\n\n# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \\\n                        0,0,0,0, \\\n                        0,0, \\\n                        (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \\\n                        (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \\\n                        NULL, NULL, \\\n                        table}\n\n# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \\\n                        0,0,0,0, \\\n                        (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \\\n                        (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \\\n                        0,0,0,0, \\\n                        NULL}\n\n# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}\n\n/* X509_PURPOSE stuff */\n\n# define EXFLAG_BCONS            0x1\n# define EXFLAG_KUSAGE           0x2\n# define EXFLAG_XKUSAGE          0x4\n# define EXFLAG_NSCERT           0x8\n\n# define EXFLAG_CA               0x10\n/* Really self issued not necessarily self signed */\n# define EXFLAG_SI               0x20\n# define EXFLAG_V1               0x40\n# define EXFLAG_INVALID          0x80\n# define EXFLAG_SET              0x100\n# define EXFLAG_CRITICAL         0x200\n# define EXFLAG_PROXY            0x400\n\n# define EXFLAG_INVALID_POLICY   0x800\n# define EXFLAG_FRESHEST         0x1000\n/* Self signed */\n# define EXFLAG_SS               0x2000\n\n# define KU_DIGITAL_SIGNATURE    0x0080\n# define KU_NON_REPUDIATION      0x0040\n# define KU_KEY_ENCIPHERMENT     0x0020\n# define KU_DATA_ENCIPHERMENT    0x0010\n# define KU_KEY_AGREEMENT        0x0008\n# define KU_KEY_CERT_SIGN        0x0004\n# define KU_CRL_SIGN             0x0002\n# define KU_ENCIPHER_ONLY        0x0001\n# define KU_DECIPHER_ONLY        0x8000\n\n# define NS_SSL_CLIENT           0x80\n# define NS_SSL_SERVER           0x40\n# define NS_SMIME                0x20\n# define NS_OBJSIGN              0x10\n# define NS_SSL_CA               0x04\n# define NS_SMIME_CA             0x02\n# define NS_OBJSIGN_CA           0x01\n# define NS_ANY_CA               (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA)\n\n# define XKU_SSL_SERVER          0x1\n# define XKU_SSL_CLIENT          0x2\n# define XKU_SMIME               0x4\n# define XKU_CODE_SIGN           0x8\n# define XKU_SGC                 0x10\n# define XKU_OCSP_SIGN           0x20\n# define XKU_TIMESTAMP           0x40\n# define XKU_DVCS                0x80\n# define XKU_ANYEKU              0x100\n\n# define X509_PURPOSE_DYNAMIC    0x1\n# define X509_PURPOSE_DYNAMIC_NAME       0x2\n\ntypedef struct x509_purpose_st {\n    int purpose;\n    int trust;                  /* Default trust ID */\n    int flags;\n    int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int);\n    char *name;\n    char *sname;\n    void *usr_data;\n} X509_PURPOSE;\n\n# define X509_PURPOSE_SSL_CLIENT         1\n# define X509_PURPOSE_SSL_SERVER         2\n# define X509_PURPOSE_NS_SSL_SERVER      3\n# define X509_PURPOSE_SMIME_SIGN         4\n# define X509_PURPOSE_SMIME_ENCRYPT      5\n# define X509_PURPOSE_CRL_SIGN           6\n# define X509_PURPOSE_ANY                7\n# define X509_PURPOSE_OCSP_HELPER        8\n# define X509_PURPOSE_TIMESTAMP_SIGN     9\n\n# define X509_PURPOSE_MIN                1\n# define X509_PURPOSE_MAX                9\n\n/* Flags for X509V3_EXT_print() */\n\n# define X509V3_EXT_UNKNOWN_MASK         (0xfL << 16)\n/* Return error for unknown extensions */\n# define X509V3_EXT_DEFAULT              0\n/* Print error for unknown extensions */\n# define X509V3_EXT_ERROR_UNKNOWN        (1L << 16)\n/* ASN1 parse unknown extensions */\n# define X509V3_EXT_PARSE_UNKNOWN        (2L << 16)\n/* BIO_dump unknown extensions */\n# define X509V3_EXT_DUMP_UNKNOWN         (3L << 16)\n\n/* Flags for X509V3_add1_i2d */\n\n# define X509V3_ADD_OP_MASK              0xfL\n# define X509V3_ADD_DEFAULT              0L\n# define X509V3_ADD_APPEND               1L\n# define X509V3_ADD_REPLACE              2L\n# define X509V3_ADD_REPLACE_EXISTING     3L\n# define X509V3_ADD_KEEP_EXISTING        4L\n# define X509V3_ADD_DELETE               5L\n# define X509V3_ADD_SILENT               0x10\n\nDECLARE_STACK_OF(X509_PURPOSE)\n\nDECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS)\n\nDECLARE_ASN1_FUNCTIONS(SXNET)\nDECLARE_ASN1_FUNCTIONS(SXNETID)\n\nint SXNET_add_id_asc(SXNET **psx, char *zone, char *user, int userlen);\nint SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, char *user,\n                       int userlen);\nint SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, char *user,\n                         int userlen);\n\nASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, char *zone);\nASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone);\nASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone);\n\nDECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID)\n\nDECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD)\n\nDECLARE_ASN1_FUNCTIONS(GENERAL_NAME)\nGENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a);\nint GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b);\n\nASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,\n                                     X509V3_CTX *ctx,\n                                     STACK_OF(CONF_VALUE) *nval);\nSTACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method,\n                                          ASN1_BIT_STRING *bits,\n                                          STACK_OF(CONF_VALUE) *extlist);\n\nSTACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,\n                                       GENERAL_NAME *gen,\n                                       STACK_OF(CONF_VALUE) *ret);\nint GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen);\n\nDECLARE_ASN1_FUNCTIONS(GENERAL_NAMES)\n\nSTACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,\n                                        GENERAL_NAMES *gen,\n                                        STACK_OF(CONF_VALUE) *extlist);\nGENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method,\n                                 X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);\n\nDECLARE_ASN1_FUNCTIONS(OTHERNAME)\nDECLARE_ASN1_FUNCTIONS(EDIPARTYNAME)\nint OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b);\nvoid GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value);\nvoid *GENERAL_NAME_get0_value(GENERAL_NAME *a, int *ptype);\nint GENERAL_NAME_set0_othername(GENERAL_NAME *gen,\n                                ASN1_OBJECT *oid, ASN1_TYPE *value);\nint GENERAL_NAME_get0_otherName(GENERAL_NAME *gen,\n                                ASN1_OBJECT **poid, ASN1_TYPE **pvalue);\n\nchar *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,\n                            ASN1_OCTET_STRING *ia5);\nASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method,\n                                         X509V3_CTX *ctx, char *str);\n\nDECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE)\nint i2a_ACCESS_DESCRIPTION(BIO *bp, ACCESS_DESCRIPTION *a);\n\nDECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)\nDECLARE_ASN1_FUNCTIONS(POLICYINFO)\nDECLARE_ASN1_FUNCTIONS(POLICYQUALINFO)\nDECLARE_ASN1_FUNCTIONS(USERNOTICE)\nDECLARE_ASN1_FUNCTIONS(NOTICEREF)\n\nDECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS)\nDECLARE_ASN1_FUNCTIONS(DIST_POINT)\nDECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME)\nDECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT)\n\nint DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname);\n\nint NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc);\n\nDECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION)\nDECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)\n\nDECLARE_ASN1_ITEM(POLICY_MAPPING)\nDECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING)\nDECLARE_ASN1_ITEM(POLICY_MAPPINGS)\n\nDECLARE_ASN1_ITEM(GENERAL_SUBTREE)\nDECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE)\n\nDECLARE_ASN1_ITEM(NAME_CONSTRAINTS)\nDECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS)\n\nDECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS)\nDECLARE_ASN1_ITEM(POLICY_CONSTRAINTS)\n\nGENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out,\n                               const X509V3_EXT_METHOD *method,\n                               X509V3_CTX *ctx, int gen_type, char *value,\n                               int is_nc);\n\n# ifdef HEADER_CONF_H\nGENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method,\n                               X509V3_CTX *ctx, CONF_VALUE *cnf);\nGENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out,\n                                  const X509V3_EXT_METHOD *method,\n                                  X509V3_CTX *ctx, CONF_VALUE *cnf,\n                                  int is_nc);\nvoid X509V3_conf_free(CONF_VALUE *val);\n\nX509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid,\n                                     char *value);\nX509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, char *name,\n                                 char *value);\nint X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, char *section,\n                            STACK_OF(X509_EXTENSION) **sk);\nint X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,\n                         X509 *cert);\nint X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,\n                             X509_REQ *req);\nint X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section,\n                             X509_CRL *crl);\n\nX509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf,\n                                    X509V3_CTX *ctx, int ext_nid,\n                                    char *value);\nX509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,\n                                char *name, char *value);\nint X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,\n                        char *section, X509 *cert);\nint X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,\n                            char *section, X509_REQ *req);\nint X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx,\n                            char *section, X509_CRL *crl);\n\nint X509V3_add_value_bool_nf(char *name, int asn1_bool,\n                             STACK_OF(CONF_VALUE) **extlist);\nint X509V3_get_value_bool(CONF_VALUE *value, int *asn1_bool);\nint X509V3_get_value_int(CONF_VALUE *value, ASN1_INTEGER **aint);\nvoid X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf);\nvoid X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash);\n# endif\n\nchar *X509V3_get_string(X509V3_CTX *ctx, char *name, char *section);\nSTACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, char *section);\nvoid X509V3_string_free(X509V3_CTX *ctx, char *str);\nvoid X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section);\nvoid X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject,\n                    X509_REQ *req, X509_CRL *crl, int flags);\n\nint X509V3_add_value(const char *name, const char *value,\n                     STACK_OF(CONF_VALUE) **extlist);\nint X509V3_add_value_uchar(const char *name, const unsigned char *value,\n                           STACK_OF(CONF_VALUE) **extlist);\nint X509V3_add_value_bool(const char *name, int asn1_bool,\n                          STACK_OF(CONF_VALUE) **extlist);\nint X509V3_add_value_int(const char *name, ASN1_INTEGER *aint,\n                         STACK_OF(CONF_VALUE) **extlist);\nchar *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, ASN1_INTEGER *aint);\nASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, char *value);\nchar *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, ASN1_ENUMERATED *aint);\nchar *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth,\n                                ASN1_ENUMERATED *aint);\nint X509V3_EXT_add(X509V3_EXT_METHOD *ext);\nint X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist);\nint X509V3_EXT_add_alias(int nid_to, int nid_from);\nvoid X509V3_EXT_cleanup(void);\n\nconst X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext);\nconst X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid);\nint X509V3_add_standard_extensions(void);\nSTACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);\nvoid *X509V3_EXT_d2i(X509_EXTENSION *ext);\nvoid *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,\n                     int *idx);\nint X509V3_EXT_free(int nid, void *ext_data);\n\nX509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);\nint X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,\n                    int crit, unsigned long flags);\n\nchar *hex_to_string(const unsigned char *buffer, long len);\nunsigned char *string_to_hex(const char *str, long *len);\nint name_cmp(const char *name, const char *cmp);\n\nvoid X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent,\n                        int ml);\nint X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag,\n                     int indent);\nint X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);\n\nint X509V3_extensions_print(BIO *out, char *title,\n                            STACK_OF(X509_EXTENSION) *exts,\n                            unsigned long flag, int indent);\n\nint X509_check_ca(X509 *x);\nint X509_check_purpose(X509 *x, int id, int ca);\nint X509_supported_extension(X509_EXTENSION *ex);\nint X509_PURPOSE_set(int *p, int purpose);\nint X509_check_issued(X509 *issuer, X509 *subject);\nint X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid);\nint X509_PURPOSE_get_count(void);\nX509_PURPOSE *X509_PURPOSE_get0(int idx);\nint X509_PURPOSE_get_by_sname(char *sname);\nint X509_PURPOSE_get_by_id(int id);\nint X509_PURPOSE_add(int id, int trust, int flags,\n                     int (*ck) (const X509_PURPOSE *, const X509 *, int),\n                     char *name, char *sname, void *arg);\nchar *X509_PURPOSE_get0_name(X509_PURPOSE *xp);\nchar *X509_PURPOSE_get0_sname(X509_PURPOSE *xp);\nint X509_PURPOSE_get_trust(X509_PURPOSE *xp);\nvoid X509_PURPOSE_cleanup(void);\nint X509_PURPOSE_get_id(X509_PURPOSE *);\n\nSTACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);\nSTACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);\nvoid X509_email_free(STACK_OF(OPENSSL_STRING) *sk);\nSTACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);\n/* Flags for X509_check_* functions */\n\n/*\n * Always check subject name for host match even if subject alt names present\n */\n# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT    0x1\n/* Disable wildcard matching for dnsName fields and common name. */\n# define X509_CHECK_FLAG_NO_WILDCARDS    0x2\n/* Wildcards must not match a partial label. */\n# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4\n/* Allow (non-partial) wildcards to match multiple labels. */\n# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8\n/* Constraint verifier subdomain patterns to match a single labels. */\n# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10\n/*\n * Match reference identifiers starting with \".\" to any sub-domain.\n * This is a non-public flag, turned on implicitly when the subject\n * reference identity is a DNS name.\n */\n# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000\n\nint X509_check_host(X509 *x, const char *chk, size_t chklen,\n                    unsigned int flags, char **peername);\nint X509_check_email(X509 *x, const char *chk, size_t chklen,\n                     unsigned int flags);\nint X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,\n                  unsigned int flags);\nint X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);\n\nASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);\nASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);\nint a2i_ipadd(unsigned char *ipout, const char *ipasc);\nint X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk,\n                             unsigned long chtype);\n\nvoid X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent);\nDECLARE_STACK_OF(X509_POLICY_NODE)\n\n# ifndef OPENSSL_NO_RFC3779\n\ntypedef struct ASRange_st {\n    ASN1_INTEGER *min, *max;\n} ASRange;\n\n#  define ASIdOrRange_id          0\n#  define ASIdOrRange_range       1\n\ntypedef struct ASIdOrRange_st {\n    int type;\n    union {\n        ASN1_INTEGER *id;\n        ASRange *range;\n    } u;\n} ASIdOrRange;\n\ntypedef STACK_OF(ASIdOrRange) ASIdOrRanges;\nDECLARE_STACK_OF(ASIdOrRange)\n\n#  define ASIdentifierChoice_inherit              0\n#  define ASIdentifierChoice_asIdsOrRanges        1\n\ntypedef struct ASIdentifierChoice_st {\n    int type;\n    union {\n        ASN1_NULL *inherit;\n        ASIdOrRanges *asIdsOrRanges;\n    } u;\n} ASIdentifierChoice;\n\ntypedef struct ASIdentifiers_st {\n    ASIdentifierChoice *asnum, *rdi;\n} ASIdentifiers;\n\nDECLARE_ASN1_FUNCTIONS(ASRange)\nDECLARE_ASN1_FUNCTIONS(ASIdOrRange)\nDECLARE_ASN1_FUNCTIONS(ASIdentifierChoice)\nDECLARE_ASN1_FUNCTIONS(ASIdentifiers)\n\ntypedef struct IPAddressRange_st {\n    ASN1_BIT_STRING *min, *max;\n} IPAddressRange;\n\n#  define IPAddressOrRange_addressPrefix  0\n#  define IPAddressOrRange_addressRange   1\n\ntypedef struct IPAddressOrRange_st {\n    int type;\n    union {\n        ASN1_BIT_STRING *addressPrefix;\n        IPAddressRange *addressRange;\n    } u;\n} IPAddressOrRange;\n\ntypedef STACK_OF(IPAddressOrRange) IPAddressOrRanges;\nDECLARE_STACK_OF(IPAddressOrRange)\n\n#  define IPAddressChoice_inherit                 0\n#  define IPAddressChoice_addressesOrRanges       1\n\ntypedef struct IPAddressChoice_st {\n    int type;\n    union {\n        ASN1_NULL *inherit;\n        IPAddressOrRanges *addressesOrRanges;\n    } u;\n} IPAddressChoice;\n\ntypedef struct IPAddressFamily_st {\n    ASN1_OCTET_STRING *addressFamily;\n    IPAddressChoice *ipAddressChoice;\n} IPAddressFamily;\n\ntypedef STACK_OF(IPAddressFamily) IPAddrBlocks;\nDECLARE_STACK_OF(IPAddressFamily)\n\nDECLARE_ASN1_FUNCTIONS(IPAddressRange)\nDECLARE_ASN1_FUNCTIONS(IPAddressOrRange)\nDECLARE_ASN1_FUNCTIONS(IPAddressChoice)\nDECLARE_ASN1_FUNCTIONS(IPAddressFamily)\n\n/*\n * API tag for elements of the ASIdentifer SEQUENCE.\n */\n#  define V3_ASID_ASNUM   0\n#  define V3_ASID_RDI     1\n\n/*\n * AFI values, assigned by IANA.  It'd be nice to make the AFI\n * handling code totally generic, but there are too many little things\n * that would need to be defined for other address families for it to\n * be worth the trouble.\n */\n#  define IANA_AFI_IPV4   1\n#  define IANA_AFI_IPV6   2\n\n/*\n * Utilities to construct and extract values from RFC3779 extensions,\n * since some of the encodings (particularly for IP address prefixes\n * and ranges) are a bit tedious to work with directly.\n */\nint v3_asid_add_inherit(ASIdentifiers *asid, int which);\nint v3_asid_add_id_or_range(ASIdentifiers *asid, int which,\n                            ASN1_INTEGER *min, ASN1_INTEGER *max);\nint v3_addr_add_inherit(IPAddrBlocks *addr,\n                        const unsigned afi, const unsigned *safi);\nint v3_addr_add_prefix(IPAddrBlocks *addr,\n                       const unsigned afi, const unsigned *safi,\n                       unsigned char *a, const int prefixlen);\nint v3_addr_add_range(IPAddrBlocks *addr,\n                      const unsigned afi, const unsigned *safi,\n                      unsigned char *min, unsigned char *max);\nunsigned v3_addr_get_afi(const IPAddressFamily *f);\nint v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi,\n                      unsigned char *min, unsigned char *max,\n                      const int length);\n\n/*\n * Canonical forms.\n */\nint v3_asid_is_canonical(ASIdentifiers *asid);\nint v3_addr_is_canonical(IPAddrBlocks *addr);\nint v3_asid_canonize(ASIdentifiers *asid);\nint v3_addr_canonize(IPAddrBlocks *addr);\n\n/*\n * Tests for inheritance and containment.\n */\nint v3_asid_inherits(ASIdentifiers *asid);\nint v3_addr_inherits(IPAddrBlocks *addr);\nint v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b);\nint v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b);\n\n/*\n * Check whether RFC 3779 extensions nest properly in chains.\n */\nint v3_asid_validate_path(X509_STORE_CTX *);\nint v3_addr_validate_path(X509_STORE_CTX *);\nint v3_asid_validate_resource_set(STACK_OF(X509) *chain,\n                                  ASIdentifiers *ext, int allow_inheritance);\nint v3_addr_validate_resource_set(STACK_OF(X509) *chain,\n                                  IPAddrBlocks *ext, int allow_inheritance);\n\n# endif                         /* OPENSSL_NO_RFC3779 */\n\n/* BEGIN ERROR CODES */\n/*\n * The following lines are auto generated by the script mkerr.pl. Any changes\n * made after this point may be overwritten when the script is next run.\n */\nvoid ERR_load_X509V3_strings(void);\n\n/* Error codes for the X509V3 functions. */\n\n/* Function codes. */\n# define X509V3_F_A2I_GENERAL_NAME                        164\n# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE             161\n# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL         162\n# define X509V3_F_COPY_EMAIL                              122\n# define X509V3_F_COPY_ISSUER                             123\n# define X509V3_F_DO_DIRNAME                              144\n# define X509V3_F_DO_EXT_CONF                             124\n# define X509V3_F_DO_EXT_I2D                              135\n# define X509V3_F_DO_EXT_NCONF                            151\n# define X509V3_F_DO_I2V_NAME_CONSTRAINTS                 148\n# define X509V3_F_GNAMES_FROM_SECTNAME                    156\n# define X509V3_F_HEX_TO_STRING                           111\n# define X509V3_F_I2S_ASN1_ENUMERATED                     121\n# define X509V3_F_I2S_ASN1_IA5STRING                      149\n# define X509V3_F_I2S_ASN1_INTEGER                        120\n# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS               138\n# define X509V3_F_NOTICE_SECTION                          132\n# define X509V3_F_NREF_NOS                                133\n# define X509V3_F_POLICY_SECTION                          131\n# define X509V3_F_PROCESS_PCI_VALUE                       150\n# define X509V3_F_R2I_CERTPOL                             130\n# define X509V3_F_R2I_PCI                                 155\n# define X509V3_F_S2I_ASN1_IA5STRING                      100\n# define X509V3_F_S2I_ASN1_INTEGER                        108\n# define X509V3_F_S2I_ASN1_OCTET_STRING                   112\n# define X509V3_F_S2I_ASN1_SKEY_ID                        114\n# define X509V3_F_S2I_SKEY_ID                             115\n# define X509V3_F_SET_DIST_POINT_NAME                     158\n# define X509V3_F_STRING_TO_HEX                           113\n# define X509V3_F_SXNET_ADD_ID_ASC                        125\n# define X509V3_F_SXNET_ADD_ID_INTEGER                    126\n# define X509V3_F_SXNET_ADD_ID_ULONG                      127\n# define X509V3_F_SXNET_GET_ID_ASC                        128\n# define X509V3_F_SXNET_GET_ID_ULONG                      129\n# define X509V3_F_V2I_ASIDENTIFIERS                       163\n# define X509V3_F_V2I_ASN1_BIT_STRING                     101\n# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS               139\n# define X509V3_F_V2I_AUTHORITY_KEYID                     119\n# define X509V3_F_V2I_BASIC_CONSTRAINTS                   102\n# define X509V3_F_V2I_CRLD                                134\n# define X509V3_F_V2I_EXTENDED_KEY_USAGE                  103\n# define X509V3_F_V2I_GENERAL_NAMES                       118\n# define X509V3_F_V2I_GENERAL_NAME_EX                     117\n# define X509V3_F_V2I_IDP                                 157\n# define X509V3_F_V2I_IPADDRBLOCKS                        159\n# define X509V3_F_V2I_ISSUER_ALT                          153\n# define X509V3_F_V2I_NAME_CONSTRAINTS                    147\n# define X509V3_F_V2I_POLICY_CONSTRAINTS                  146\n# define X509V3_F_V2I_POLICY_MAPPINGS                     145\n# define X509V3_F_V2I_SUBJECT_ALT                         154\n# define X509V3_F_V3_ADDR_VALIDATE_PATH_INTERNAL          160\n# define X509V3_F_V3_GENERIC_EXTENSION                    116\n# define X509V3_F_X509V3_ADD1_I2D                         140\n# define X509V3_F_X509V3_ADD_VALUE                        105\n# define X509V3_F_X509V3_EXT_ADD                          104\n# define X509V3_F_X509V3_EXT_ADD_ALIAS                    106\n# define X509V3_F_X509V3_EXT_CONF                         107\n# define X509V3_F_X509V3_EXT_FREE                         165\n# define X509V3_F_X509V3_EXT_I2D                          136\n# define X509V3_F_X509V3_EXT_NCONF                        152\n# define X509V3_F_X509V3_GET_SECTION                      142\n# define X509V3_F_X509V3_GET_STRING                       143\n# define X509V3_F_X509V3_GET_VALUE_BOOL                   110\n# define X509V3_F_X509V3_PARSE_LIST                       109\n# define X509V3_F_X509_PURPOSE_ADD                        137\n# define X509V3_F_X509_PURPOSE_SET                        141\n\n/* Reason codes. */\n# define X509V3_R_BAD_IP_ADDRESS                          118\n# define X509V3_R_BAD_OBJECT                              119\n# define X509V3_R_BN_DEC2BN_ERROR                         100\n# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR                101\n# define X509V3_R_CANNOT_FIND_FREE_FUNCTION               168\n# define X509V3_R_DIRNAME_ERROR                           149\n# define X509V3_R_DISTPOINT_ALREADY_SET                   160\n# define X509V3_R_DUPLICATE_ZONE_ID                       133\n# define X509V3_R_ERROR_CONVERTING_ZONE                   131\n# define X509V3_R_ERROR_CREATING_EXTENSION                144\n# define X509V3_R_ERROR_IN_EXTENSION                      128\n# define X509V3_R_EXPECTED_A_SECTION_NAME                 137\n# define X509V3_R_EXTENSION_EXISTS                        145\n# define X509V3_R_EXTENSION_NAME_ERROR                    115\n# define X509V3_R_EXTENSION_NOT_FOUND                     102\n# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED         103\n# define X509V3_R_EXTENSION_VALUE_ERROR                   116\n# define X509V3_R_ILLEGAL_EMPTY_EXTENSION                 151\n# define X509V3_R_ILLEGAL_HEX_DIGIT                       113\n# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG             152\n# define X509V3_R_INVALID_ASNUMBER                        162\n# define X509V3_R_INVALID_ASRANGE                         163\n# define X509V3_R_INVALID_BOOLEAN_STRING                  104\n# define X509V3_R_INVALID_EXTENSION_STRING                105\n# define X509V3_R_INVALID_INHERITANCE                     165\n# define X509V3_R_INVALID_IPADDRESS                       166\n# define X509V3_R_INVALID_MULTIPLE_RDNS                   161\n# define X509V3_R_INVALID_NAME                            106\n# define X509V3_R_INVALID_NULL_ARGUMENT                   107\n# define X509V3_R_INVALID_NULL_NAME                       108\n# define X509V3_R_INVALID_NULL_VALUE                      109\n# define X509V3_R_INVALID_NUMBER                          140\n# define X509V3_R_INVALID_NUMBERS                         141\n# define X509V3_R_INVALID_OBJECT_IDENTIFIER               110\n# define X509V3_R_INVALID_OPTION                          138\n# define X509V3_R_INVALID_POLICY_IDENTIFIER               134\n# define X509V3_R_INVALID_PROXY_POLICY_SETTING            153\n# define X509V3_R_INVALID_PURPOSE                         146\n# define X509V3_R_INVALID_SAFI                            164\n# define X509V3_R_INVALID_SECTION                         135\n# define X509V3_R_INVALID_SYNTAX                          143\n# define X509V3_R_ISSUER_DECODE_ERROR                     126\n# define X509V3_R_MISSING_VALUE                           124\n# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS           142\n# define X509V3_R_NO_CONFIG_DATABASE                      136\n# define X509V3_R_NO_ISSUER_CERTIFICATE                   121\n# define X509V3_R_NO_ISSUER_DETAILS                       127\n# define X509V3_R_NO_POLICY_IDENTIFIER                    139\n# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED   154\n# define X509V3_R_NO_PUBLIC_KEY                           114\n# define X509V3_R_NO_SUBJECT_DETAILS                      125\n# define X509V3_R_ODD_NUMBER_OF_DIGITS                    112\n# define X509V3_R_OPERATION_NOT_DEFINED                   148\n# define X509V3_R_OTHERNAME_ERROR                         147\n# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED         155\n# define X509V3_R_POLICY_PATH_LENGTH                      156\n# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED      157\n# define X509V3_R_POLICY_SYNTAX_NOT_CURRENTLY_SUPPORTED   158\n# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159\n# define X509V3_R_SECTION_NOT_FOUND                       150\n# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS            122\n# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID              123\n# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT             111\n# define X509V3_R_UNKNOWN_EXTENSION                       129\n# define X509V3_R_UNKNOWN_EXTENSION_NAME                  130\n# define X509V3_R_UNKNOWN_OPTION                          120\n# define X509V3_R_UNSUPPORTED_OPTION                      117\n# define X509V3_R_UNSUPPORTED_TYPE                        167\n# define X509V3_R_USER_TOO_LONG                           132\n\n#ifdef  __cplusplus\n}\n#endif\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/core.h",
    "content": "\n#ifndef sodium_core_H\n#define sodium_core_H\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint sodium_init(void)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_aead_aes256gcm.h",
    "content": "#ifndef crypto_aead_aes256gcm_H\n#define crypto_aead_aes256gcm_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_is_available(void);\n\n#define crypto_aead_aes256gcm_KEYBYTES  32U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_keybytes(void);\n\n#define crypto_aead_aes256gcm_NSECBYTES 0U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_nsecbytes(void);\n\n#define crypto_aead_aes256gcm_NPUBBYTES 12U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_npubbytes(void);\n\n#define crypto_aead_aes256gcm_ABYTES    16U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_abytes(void);\n\ntypedef CRYPTO_ALIGN(16) unsigned char crypto_aead_aes256gcm_state[512];\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_encrypt(unsigned char *c,\n                                  unsigned long long *clen_p,\n                                  const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *ad,\n                                  unsigned long long adlen,\n                                  const unsigned char *nsec,\n                                  const unsigned char *npub,\n                                  const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_decrypt(unsigned char *m,\n                                  unsigned long long *mlen_p,\n                                  unsigned char *nsec,\n                                  const unsigned char *c,\n                                  unsigned long long clen,\n                                  const unsigned char *ad,\n                                  unsigned long long adlen,\n                                  const unsigned char *npub,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_,\n                                   const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c,\n                                          unsigned long long *clen_p,\n                                          const unsigned char *m,\n                                          unsigned long long mlen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *nsec,\n                                          const unsigned char *npub,\n                                          const crypto_aead_aes256gcm_state *ctx_);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m,\n                                          unsigned long long *mlen_p,\n                                          unsigned char *nsec,\n                                          const unsigned char *c,\n                                          unsigned long long clen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *npub,\n                                          const crypto_aead_aes256gcm_state *ctx_)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_aead_chacha20poly1305.h",
    "content": "#ifndef crypto_aead_chacha20poly1305_H\n#define crypto_aead_chacha20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_aead_chacha20poly1305_ietf_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_ietf_keybytes(void);\n\n#define crypto_aead_chacha20poly1305_ietf_NSECBYTES 0U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_ietf_nsecbytes(void);\n\n#define crypto_aead_chacha20poly1305_ietf_NPUBBYTES 12U\n\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);\n\n#define crypto_aead_chacha20poly1305_ietf_ABYTES 16U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_ietf_abytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,\n                                              unsigned long long *clen_p,\n                                              const unsigned char *m,\n                                              unsigned long long mlen,\n                                              const unsigned char *ad,\n                                              unsigned long long adlen,\n                                              const unsigned char *nsec,\n                                              const unsigned char *npub,\n                                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,\n                                              unsigned long long *mlen_p,\n                                              unsigned char *nsec,\n                                              const unsigned char *c,\n                                              unsigned long long clen,\n                                              const unsigned char *ad,\n                                              unsigned long long adlen,\n                                              const unsigned char *npub,\n                                              const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#define crypto_aead_chacha20poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_keybytes(void);\n\n#define crypto_aead_chacha20poly1305_NSECBYTES 0U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_nsecbytes(void);\n\n#define crypto_aead_chacha20poly1305_NPUBBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_npubbytes(void);\n\n#define crypto_aead_chacha20poly1305_ABYTES 16U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_abytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_encrypt(unsigned char *c,\n                                         unsigned long long *clen_p,\n                                         const unsigned char *m,\n                                         unsigned long long mlen,\n                                         const unsigned char *ad,\n                                         unsigned long long adlen,\n                                         const unsigned char *nsec,\n                                         const unsigned char *npub,\n                                         const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_decrypt(unsigned char *m,\n                                         unsigned long long *mlen_p,\n                                         unsigned char *nsec,\n                                         const unsigned char *c,\n                                         unsigned long long clen,\n                                         const unsigned char *ad,\n                                         unsigned long long adlen,\n                                         const unsigned char *npub,\n                                         const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* Aliases */\n\n#define crypto_aead_chacha20poly1305_IETF_KEYBYTES  crypto_aead_chacha20poly1305_ietf_KEYBYTES\n#define crypto_aead_chacha20poly1305_IETF_NSECBYTES crypto_aead_chacha20poly1305_ietf_NSECBYTES\n#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES crypto_aead_chacha20poly1305_ietf_NPUBBYTES\n#define crypto_aead_chacha20poly1305_IETF_ABYTES    crypto_aead_chacha20poly1305_ietf_ABYTES\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_auth.h",
    "content": "#ifndef crypto_auth_H\n#define crypto_auth_H\n\n#include <stddef.h>\n\n#include \"crypto_auth_hmacsha512256.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES\nSODIUM_EXPORT\nsize_t  crypto_auth_bytes(void);\n\n#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_auth_keybytes(void);\n\n#define crypto_auth_PRIMITIVE \"hmacsha512256\"\nSODIUM_EXPORT\nconst char *crypto_auth_primitive(void);\n\nSODIUM_EXPORT\nint crypto_auth(unsigned char *out, const unsigned char *in,\n                unsigned long long inlen, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_verify(const unsigned char *h, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_auth_hmacsha256.h",
    "content": "#ifndef crypto_auth_hmacsha256_H\n#define crypto_auth_hmacsha256_H\n\n#include <stddef.h>\n#include \"crypto_hash_sha256.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_bytes(void);\n\n#define crypto_auth_hmacsha256_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256(unsigned char *out,\n                           const unsigned char *in,\n                           unsigned long long inlen,\n                           const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_verify(const unsigned char *h,\n                                  const unsigned char *in,\n                                  unsigned long long inlen,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef struct crypto_auth_hmacsha256_state {\n    crypto_hash_sha256_state ictx;\n    crypto_hash_sha256_state octx;\n} crypto_auth_hmacsha256_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state,\n                                const unsigned char *key,\n                                size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state,\n                                  const unsigned char *in,\n                                  unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state,\n                                 unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_auth_hmacsha512.h",
    "content": "#ifndef crypto_auth_hmacsha512_H\n#define crypto_auth_hmacsha512_H\n\n#include <stddef.h>\n#include \"crypto_hash_sha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha512_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_bytes(void);\n\n#define crypto_auth_hmacsha512_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512(unsigned char *out,\n                           const unsigned char *in,\n                           unsigned long long inlen,\n                           const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_verify(const unsigned char *h,\n                                  const unsigned char *in,\n                                  unsigned long long inlen,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef struct crypto_auth_hmacsha512_state {\n    crypto_hash_sha512_state ictx;\n    crypto_hash_sha512_state octx;\n} crypto_auth_hmacsha512_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state,\n                                const unsigned char *key,\n                                size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state,\n                                  const unsigned char *in,\n                                  unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state,\n                                 unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_auth_hmacsha512256.h",
    "content": "#ifndef crypto_auth_hmacsha512256_H\n#define crypto_auth_hmacsha512256_H\n\n#include <stddef.h>\n#include \"crypto_auth_hmacsha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha512256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_bytes(void);\n\n#define crypto_auth_hmacsha512256_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256(unsigned char *out, const unsigned char *in,\n                              unsigned long long inlen,const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_verify(const unsigned char *h,\n                                     const unsigned char *in,\n                                     unsigned long long inlen,\n                                     const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state,\n                                   const unsigned char *key,\n                                   size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state,\n                                     const unsigned char *in,\n                                     unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state,\n                                    unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_box.h",
    "content": "#ifndef crypto_box_H\n#define crypto_box_H\n\n/*\n * THREAD SAFETY: crypto_box_keypair() is thread-safe,\n * provided that you called sodium_init() once before using any\n * other libsodium function.\n * Other functions are always thread-safe.\n */\n\n#include <stddef.h>\n\n#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_seedbytes(void);\n\n#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_publickeybytes(void);\n\n#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_secretkeybytes(void);\n\n#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_noncebytes(void);\n\n#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_macbytes(void);\n\n#define crypto_box_PRIMITIVE \"curve25519xsalsa20poly1305\"\nSODIUM_EXPORT\nconst char *crypto_box_primitive(void);\n\nSODIUM_EXPORT\nint crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,\n                            const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_box_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_box_easy(unsigned char *c, const unsigned char *m,\n                    unsigned long long mlen, const unsigned char *n,\n                    const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open_easy(unsigned char *m, const unsigned char *c,\n                         unsigned long long clen, const unsigned char *n,\n                         const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_detached(unsigned char *c, unsigned char *mac,\n                        const unsigned char *m, unsigned long long mlen,\n                        const unsigned char *n, const unsigned char *pk,\n                        const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open_detached(unsigned char *m, const unsigned char *c,\n                             const unsigned char *mac,\n                             unsigned long long clen,\n                             const unsigned char *n,\n                             const unsigned char *pk,\n                             const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\n/* -- Precomputation interface -- */\n\n#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_beforenmbytes(void);\n\nSODIUM_EXPORT\nint crypto_box_beforenm(unsigned char *k, const unsigned char *pk,\n                        const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,\n                            unsigned long long mlen, const unsigned char *n,\n                            const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,\n                                 unsigned long long clen, const unsigned char *n,\n                                 const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,\n                                const unsigned char *m, unsigned long long mlen,\n                                const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,\n                                     const unsigned char *mac,\n                                     unsigned long long clen, const unsigned char *n,\n                                     const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* -- Ephemeral SK interface -- */\n\n#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES)\nSODIUM_EXPORT\nsize_t crypto_box_sealbytes(void);\n\nSODIUM_EXPORT\nint crypto_box_seal(unsigned char *c, const unsigned char *m,\n                    unsigned long long mlen, const unsigned char *pk);\n\nSODIUM_EXPORT\nint crypto_box_seal_open(unsigned char *m, const unsigned char *c,\n                         unsigned long long clen,\n                         const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\n/* -- NaCl compatibility interface ; Requires padding -- */\n\n#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_zerobytes(void);\n\n#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_boxzerobytes(void);\n\nSODIUM_EXPORT\nint crypto_box(unsigned char *c, const unsigned char *m,\n               unsigned long long mlen, const unsigned char *n,\n               const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open(unsigned char *m, const unsigned char *c,\n                    unsigned long long clen, const unsigned char *n,\n                    const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_afternm(unsigned char *c, const unsigned char *m,\n                       unsigned long long mlen, const unsigned char *n,\n                       const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_afternm(unsigned char *m, const unsigned char *c,\n                            unsigned long long clen, const unsigned char *n,\n                            const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_box_curve25519xsalsa20poly1305.h",
    "content": "#ifndef crypto_box_curve25519xsalsa20poly1305_H\n#define crypto_box_curve25519xsalsa20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_MACBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_macbytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES \\\n    (crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES + \\\n     crypto_box_curve25519xsalsa20poly1305_MACBYTES)\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305(unsigned char *c,\n                                          const unsigned char *m,\n                                          unsigned long long mlen,\n                                          const unsigned char *n,\n                                          const unsigned char *pk,\n                                          const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m,\n                                               const unsigned char *c,\n                                               unsigned long long clen,\n                                               const unsigned char *n,\n                                               const unsigned char *pk,\n                                               const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk,\n                                                       unsigned char *sk,\n                                                       const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk,\n                                                  unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k,\n                                                   const unsigned char *pk,\n                                                   const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c,\n                                                  const unsigned char *m,\n                                                  unsigned long long mlen,\n                                                  const unsigned char *n,\n                                                  const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m,\n                                                       const unsigned char *c,\n                                                       unsigned long long clen,\n                                                       const unsigned char *n,\n                                                       const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_core_hchacha20.h",
    "content": "#ifndef crypto_core_hchacha20_H\n#define crypto_core_hchacha20_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_hchacha20_OUTPUTBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hchacha20_outputbytes(void);\n\n#define crypto_core_hchacha20_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hchacha20_inputbytes(void);\n\n#define crypto_core_hchacha20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hchacha20_keybytes(void);\n\n#define crypto_core_hchacha20_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hchacha20_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_hchacha20(unsigned char *out, const unsigned char *in,\n                          const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_core_hsalsa20.h",
    "content": "#ifndef crypto_core_hsalsa20_H\n#define crypto_core_hsalsa20_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_hsalsa20_OUTPUTBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_outputbytes(void);\n\n#define crypto_core_hsalsa20_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_inputbytes(void);\n\n#define crypto_core_hsalsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_keybytes(void);\n\n#define crypto_core_hsalsa20_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_hsalsa20(unsigned char *out, const unsigned char *in,\n                         const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_core_salsa20.h",
    "content": "#ifndef crypto_core_salsa20_H\n#define crypto_core_salsa20_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa20_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_outputbytes(void);\n\n#define crypto_core_salsa20_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_inputbytes(void);\n\n#define crypto_core_salsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_keybytes(void);\n\n#define crypto_core_salsa20_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa20(unsigned char *out, const unsigned char *in,\n                        const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_core_salsa2012.h",
    "content": "#ifndef crypto_core_salsa2012_H\n#define crypto_core_salsa2012_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa2012_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_outputbytes(void);\n\n#define crypto_core_salsa2012_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_inputbytes(void);\n\n#define crypto_core_salsa2012_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_keybytes(void);\n\n#define crypto_core_salsa2012_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa2012(unsigned char *out, const unsigned char *in,\n                          const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_core_salsa208.h",
    "content": "#ifndef crypto_core_salsa208_H\n#define crypto_core_salsa208_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa208_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_outputbytes(void);\n\n#define crypto_core_salsa208_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_inputbytes(void);\n\n#define crypto_core_salsa208_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_keybytes(void);\n\n#define crypto_core_salsa208_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa208(unsigned char *out, const unsigned char *in,\n                         const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_generichash.h",
    "content": "#ifndef crypto_generichash_H\n#define crypto_generichash_H\n\n#include <stddef.h>\n\n#include \"crypto_generichash_blake2b.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes_min(void);\n\n#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes_max(void);\n\n#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes(void);\n\n#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes_min(void);\n\n#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes_max(void);\n\n#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes(void);\n\n#define crypto_generichash_PRIMITIVE \"blake2b\"\nSODIUM_EXPORT\nconst char *crypto_generichash_primitive(void);\n\ntypedef crypto_generichash_blake2b_state crypto_generichash_state;\nSODIUM_EXPORT\nsize_t  crypto_generichash_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_generichash(unsigned char *out, size_t outlen,\n                       const unsigned char *in, unsigned long long inlen,\n                       const unsigned char *key, size_t keylen);\n\nSODIUM_EXPORT\nint crypto_generichash_init(crypto_generichash_state *state,\n                            const unsigned char *key,\n                            const size_t keylen, const size_t outlen);\n\nSODIUM_EXPORT\nint crypto_generichash_update(crypto_generichash_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_generichash_final(crypto_generichash_state *state,\n                             unsigned char *out, const size_t outlen);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_generichash_blake2b.h",
    "content": "#ifndef crypto_generichash_blake2b_H\n#define crypto_generichash_blake2b_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack(1)\n#else\n# pragma pack(push, 1)\n#endif\n\ntypedef CRYPTO_ALIGN(64) struct crypto_generichash_blake2b_state {\n    uint64_t h[8];\n    uint64_t t[2];\n    uint64_t f[2];\n    uint8_t  buf[2 * 128];\n    size_t   buflen;\n    uint8_t  last_node;\n} crypto_generichash_blake2b_state;\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack()\n#else\n# pragma pack(pop)\n#endif\n\n#define crypto_generichash_blake2b_BYTES_MIN     16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes_min(void);\n\n#define crypto_generichash_blake2b_BYTES_MAX     64U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes_max(void);\n\n#define crypto_generichash_blake2b_BYTES         32U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes(void);\n\n#define crypto_generichash_blake2b_KEYBYTES_MIN  16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes_min(void);\n\n#define crypto_generichash_blake2b_KEYBYTES_MAX  64U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes_max(void);\n\n#define crypto_generichash_blake2b_KEYBYTES      32U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes(void);\n\n#define crypto_generichash_blake2b_SALTBYTES     16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_saltbytes(void);\n\n#define crypto_generichash_blake2b_PERSONALBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_personalbytes(void);\n\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b(unsigned char *out, size_t outlen,\n                               const unsigned char *in,\n                               unsigned long long inlen,\n                               const unsigned char *key, size_t keylen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen,\n                                             const unsigned char *in,\n                                             unsigned long long inlen,\n                                             const unsigned char *key,\n                                             size_t keylen,\n                                             const unsigned char *salt,\n                                             const unsigned char *personal);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state,\n                                    const unsigned char *key,\n                                    const size_t keylen, const size_t outlen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state,\n                                                  const unsigned char *key,\n                                                  const size_t keylen, const size_t outlen,\n                                                  const unsigned char *salt,\n                                                  const unsigned char *personal);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state,\n                                      const unsigned char *in,\n                                      unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state,\n                                     unsigned char *out,\n                                     const size_t outlen);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_generichash_blake2b_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_hash.h",
    "content": "#ifndef crypto_hash_H\n#define crypto_hash_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA512 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA512, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n\n#include \"crypto_hash_sha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_hash_BYTES crypto_hash_sha512_BYTES\nSODIUM_EXPORT\nsize_t crypto_hash_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash(unsigned char *out, const unsigned char *in,\n                unsigned long long inlen);\n\n#define crypto_hash_PRIMITIVE \"sha512\"\nSODIUM_EXPORT\nconst char *crypto_hash_primitive(void)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_hash_sha256.h",
    "content": "#ifndef crypto_hash_sha256_H\n#define crypto_hash_sha256_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA256 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA256, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct crypto_hash_sha256_state {\n    uint32_t      state[8];\n    uint64_t      count;\n    unsigned char buf[64];\n} crypto_hash_sha256_state;\nSODIUM_EXPORT\nsize_t crypto_hash_sha256_statebytes(void);\n\n#define crypto_hash_sha256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_hash_sha256_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash_sha256(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_init(crypto_hash_sha256_state *state);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_update(crypto_hash_sha256_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_final(crypto_hash_sha256_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_hash_sha512.h",
    "content": "#ifndef crypto_hash_sha512_H\n#define crypto_hash_sha512_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA512 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA512, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct crypto_hash_sha512_state {\n    uint64_t      state[8];\n    uint64_t      count[2];\n    unsigned char buf[128];\n} crypto_hash_sha512_state;\nSODIUM_EXPORT\nsize_t crypto_hash_sha512_statebytes(void);\n\n#define crypto_hash_sha512_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_hash_sha512_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash_sha512(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_init(crypto_hash_sha512_state *state);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_update(crypto_hash_sha512_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_final(crypto_hash_sha512_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_int32.h",
    "content": "#ifndef crypto_int32_H\n#define crypto_int32_H\n\n#include <stdint.h>\n\ntypedef int32_t crypto_int32;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_int64.h",
    "content": "#ifndef crypto_int64_H\n#define crypto_int64_H\n\n#include <stdint.h>\n\ntypedef int64_t crypto_int64;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_onetimeauth.h",
    "content": "#ifndef crypto_onetimeauth_H\n#define crypto_onetimeauth_H\n\n#include <stddef.h>\n\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state;\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_statebytes(void);\n\n#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_bytes(void);\n\n#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_keybytes(void);\n\n#define crypto_onetimeauth_PRIMITIVE \"poly1305\"\nSODIUM_EXPORT\nconst char *crypto_onetimeauth_primitive(void);\n\nSODIUM_EXPORT\nint crypto_onetimeauth(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in,\n                              unsigned long long inlen, const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_onetimeauth_init(crypto_onetimeauth_state *state,\n                            const unsigned char *key);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_update(crypto_onetimeauth_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_final(crypto_onetimeauth_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_onetimeauth_poly1305.h",
    "content": "#ifndef crypto_onetimeauth_poly1305_H\n#define crypto_onetimeauth_poly1305_H\n\n#include <stdlib.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <stdio.h>\n\ntypedef CRYPTO_ALIGN(16) struct crypto_onetimeauth_poly1305_state {\n    unsigned char opaque[256];\n} crypto_onetimeauth_poly1305_state;\n\n#define crypto_onetimeauth_poly1305_BYTES 16U\nSODIUM_EXPORT\nsize_t crypto_onetimeauth_poly1305_bytes(void);\n\n#define crypto_onetimeauth_poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_onetimeauth_poly1305_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305(unsigned char *out,\n                                const unsigned char *in,\n                                unsigned long long inlen,\n                                const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_verify(const unsigned char *h,\n                                       const unsigned char *in,\n                                       unsigned long long inlen,\n                                       const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state,\n                                     const unsigned char *key);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state,\n                                       const unsigned char *in,\n                                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state,\n                                      unsigned char *out);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_onetimeauth_poly1305_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_pwhash.h",
    "content": "#ifndef crypto_pwhash_H\n#define crypto_pwhash_H\n\n#include <stddef.h>\n\n#include \"crypto_pwhash_argon2i.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_pwhash_SALTBYTES crypto_pwhash_argon2i_SALTBYTES\nSODIUM_EXPORT\nsize_t crypto_pwhash_saltbytes(void);\n\n#define crypto_pwhash_STRBYTES crypto_pwhash_argon2i_STRBYTES\nSODIUM_EXPORT\nsize_t crypto_pwhash_strbytes(void);\n\n#define crypto_pwhash_STRPREFIX crypto_pwhash_argon2i_STRPREFIX\nSODIUM_EXPORT\nconst char *crypto_pwhash_strprefix(void);\n\n#define crypto_pwhash_OPSLIMIT_INTERACTIVE crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE\nSODIUM_EXPORT\nsize_t crypto_pwhash_opslimit_interactive(void);\n\n#define crypto_pwhash_MEMLIMIT_INTERACTIVE crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE\nSODIUM_EXPORT\nsize_t crypto_pwhash_memlimit_interactive(void);\n\n#define crypto_pwhash_OPSLIMIT_MODERATE crypto_pwhash_argon2i_OPSLIMIT_MODERATE\nSODIUM_EXPORT\nsize_t crypto_pwhash_opslimit_moderate(void);\n\n#define crypto_pwhash_MEMLIMIT_MODERATE crypto_pwhash_argon2i_MEMLIMIT_MODERATE\nSODIUM_EXPORT\nsize_t crypto_pwhash_memlimit_moderate(void);\n\n#define crypto_pwhash_OPSLIMIT_SENSITIVE crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE\nSODIUM_EXPORT\nsize_t crypto_pwhash_opslimit_sensitive(void);\n\n#define crypto_pwhash_MEMLIMIT_SENSITIVE crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE\nSODIUM_EXPORT\nsize_t crypto_pwhash_memlimit_sensitive(void);\n\nSODIUM_EXPORT\nint crypto_pwhash(unsigned char * const out, unsigned long long outlen,\n                  const char * const passwd, unsigned long long passwdlen,\n                  const unsigned char * const salt,\n                  unsigned long long opslimit, size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_str(char out[crypto_pwhash_STRBYTES],\n                      const char * const passwd, unsigned long long passwdlen,\n                      unsigned long long opslimit, size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_str_verify(const char str[crypto_pwhash_STRBYTES],\n                             const char * const passwd,\n                             unsigned long long passwdlen)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_pwhash_argon2i.h",
    "content": "#ifndef crypto_pwhash_argon2i_H\n#define crypto_pwhash_argon2i_H\n\n#include <stddef.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_pwhash_argon2i_SALTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_saltbytes(void);\n\n#define crypto_pwhash_argon2i_STRBYTES 116U\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_strbytes(void);\n\n#define crypto_pwhash_argon2i_STRPREFIX \"$argon2i$\"\nSODIUM_EXPORT\nconst char *crypto_pwhash_argon2i_strprefix(void);\n\n#define crypto_pwhash_argon2i_OPSLIMIT_INTERACTIVE 4ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_opslimit_interactive(void);\n\n#define crypto_pwhash_argon2i_MEMLIMIT_INTERACTIVE 16777216ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_memlimit_interactive(void);\n\n#define crypto_pwhash_argon2i_OPSLIMIT_MODERATE 10ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_opslimit_moderate(void);\n\n#define crypto_pwhash_argon2i_MEMLIMIT_MODERATE 134217728ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_memlimit_moderate(void);\n\n#define crypto_pwhash_argon2i_OPSLIMIT_SENSITIVE 32ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_opslimit_sensitive(void);\n\n#define crypto_pwhash_argon2i_MEMLIMIT_SENSITIVE 536870912ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_argon2i_memlimit_sensitive(void);\n\nSODIUM_EXPORT\nint crypto_pwhash_argon2i(unsigned char * const out,\n                          unsigned long long outlen,\n                          const char * const passwd,\n                          unsigned long long passwdlen,\n                          const unsigned char * const salt,\n                          unsigned long long opslimit,\n                          size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_argon2i_str(char out[crypto_pwhash_argon2i_STRBYTES],\n                              const char * const passwd,\n                              unsigned long long passwdlen,\n                              unsigned long long opslimit,\n                              size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_argon2i_str_verify(const char str[crypto_pwhash_argon2i_STRBYTES],\n                                     const char * const passwd,\n                                     unsigned long long passwdlen)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_pwhash_argon2i_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_pwhash_scryptsalsa208sha256.h",
    "content": "#ifndef crypto_pwhash_scryptsalsa208sha256_H\n#define crypto_pwhash_scryptsalsa208sha256_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_strbytes(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX \"$7$\"\nSODIUM_EXPORT\nconst char *crypto_pwhash_scryptsalsa208sha256_strprefix(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void);\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256(unsigned char * const out,\n                                       unsigned long long outlen,\n                                       const char * const passwd,\n                                       unsigned long long passwdlen,\n                                       const unsigned char * const salt,\n                                       unsigned long long opslimit,\n                                       size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                           const char * const passwd,\n                                           unsigned long long passwdlen,\n                                           unsigned long long opslimit,\n                                           size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                                  const char * const passwd,\n                                                  unsigned long long passwdlen)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen,\n                                          const uint8_t * salt, size_t saltlen,\n                                          uint64_t N, uint32_t r, uint32_t p,\n                                          uint8_t * buf, size_t buflen)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_scalarmult.h",
    "content": "#ifndef crypto_scalarmult_H\n#define crypto_scalarmult_H\n\n#include <stddef.h>\n\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES\nSODIUM_EXPORT\nsize_t  crypto_scalarmult_bytes(void);\n\n#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES\nSODIUM_EXPORT\nsize_t  crypto_scalarmult_scalarbytes(void);\n\n#define crypto_scalarmult_PRIMITIVE \"curve25519\"\nSODIUM_EXPORT\nconst char *crypto_scalarmult_primitive(void);\n\nSODIUM_EXPORT\nint crypto_scalarmult_base(unsigned char *q, const unsigned char *n);\n\nSODIUM_EXPORT\nint crypto_scalarmult(unsigned char *q, const unsigned char *n,\n                      const unsigned char *p)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_scalarmult_curve25519.h",
    "content": "#ifndef crypto_scalarmult_curve25519_H\n#define crypto_scalarmult_curve25519_H\n\n#include <stddef.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_scalarmult_curve25519_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_scalarmult_curve25519_bytes(void);\n\n#define crypto_scalarmult_curve25519_SCALARBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_scalarmult_curve25519_scalarbytes(void);\n\nSODIUM_EXPORT\nint crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n,\n                                 const unsigned char *p)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_scalarmult_curve25519_base(unsigned char *q, const unsigned char *n);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_scalarmult_curve25519_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_secretbox.h",
    "content": "#ifndef crypto_secretbox_H\n#define crypto_secretbox_H\n\n#include <stddef.h>\n\n#include \"crypto_secretbox_xsalsa20poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_keybytes(void);\n\n#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_noncebytes(void);\n\n#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_macbytes(void);\n\n#define crypto_secretbox_PRIMITIVE \"xsalsa20poly1305\"\nSODIUM_EXPORT\nconst char *crypto_secretbox_primitive(void);\n\nSODIUM_EXPORT\nint crypto_secretbox_easy(unsigned char *c, const unsigned char *m,\n                          unsigned long long mlen, const unsigned char *n,\n                          const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c,\n                               unsigned long long clen, const unsigned char *n,\n                               const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_secretbox_detached(unsigned char *c, unsigned char *mac,\n                              const unsigned char *m,\n                              unsigned long long mlen,\n                              const unsigned char *n,\n                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open_detached(unsigned char *m,\n                                   const unsigned char *c,\n                                   const unsigned char *mac,\n                                   unsigned long long clen,\n                                   const unsigned char *n,\n                                   const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* -- NaCl compatibility interface ; Requires padding -- */\n\n#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_zerobytes(void);\n\n#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_boxzerobytes(void);\n\nSODIUM_EXPORT\nint crypto_secretbox(unsigned char *c, const unsigned char *m,\n                     unsigned long long mlen, const unsigned char *n,\n                     const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open(unsigned char *m, const unsigned char *c,\n                          unsigned long long clen, const unsigned char *n,\n                          const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_secretbox_xsalsa20poly1305.h",
    "content": "#ifndef crypto_secretbox_xsalsa20poly1305_H\n#define crypto_secretbox_xsalsa20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_keybytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_noncebytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_MACBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_macbytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES \\\n    (crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES + \\\n     crypto_secretbox_xsalsa20poly1305_MACBYTES)\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_zerobytes(void);\n\nSODIUM_EXPORT\nint crypto_secretbox_xsalsa20poly1305(unsigned char *c,\n                                      const unsigned char *m,\n                                      unsigned long long mlen,\n                                      const unsigned char *n,\n                                      const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_xsalsa20poly1305_open(unsigned char *m,\n                                           const unsigned char *c,\n                                           unsigned long long clen,\n                                           const unsigned char *n,\n                                           const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_shorthash.h",
    "content": "#ifndef crypto_shorthash_H\n#define crypto_shorthash_H\n\n#include <stddef.h>\n\n#include \"crypto_shorthash_siphash24.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES\nSODIUM_EXPORT\nsize_t  crypto_shorthash_bytes(void);\n\n#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_shorthash_keybytes(void);\n\n#define crypto_shorthash_PRIMITIVE \"siphash24\"\nSODIUM_EXPORT\nconst char *crypto_shorthash_primitive(void);\n\nSODIUM_EXPORT\nint crypto_shorthash(unsigned char *out, const unsigned char *in,\n                     unsigned long long inlen, const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_shorthash_siphash24.h",
    "content": "#ifndef crypto_shorthash_siphash24_H\n#define crypto_shorthash_siphash24_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_shorthash_siphash24_BYTES 8U\nSODIUM_EXPORT\nsize_t crypto_shorthash_siphash24_bytes(void);\n\n#define crypto_shorthash_siphash24_KEYBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_shorthash_siphash24_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in,\n                               unsigned long long inlen, const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_sign.h",
    "content": "#ifndef crypto_sign_H\n#define crypto_sign_H\n\n/*\n * THREAD SAFETY: crypto_sign_keypair() is thread-safe,\n * provided that you called sodium_init() once before using any\n * other libsodium function.\n * Other functions, including crypto_sign_seed_keypair() are always thread-safe.\n */\n\n#include <stddef.h>\n\n#include \"crypto_sign_ed25519.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_BYTES crypto_sign_ed25519_BYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_bytes(void);\n\n#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_seedbytes(void);\n\n#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_publickeybytes(void);\n\n#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_secretkeybytes(void);\n\n#define crypto_sign_PRIMITIVE \"ed25519\"\nSODIUM_EXPORT\nconst char *crypto_sign_primitive(void);\n\nSODIUM_EXPORT\nint crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk,\n                             const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_sign_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign(unsigned char *sm, unsigned long long *smlen_p,\n                const unsigned char *m, unsigned long long mlen,\n                const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_open(unsigned char *m, unsigned long long *mlen_p,\n                     const unsigned char *sm, unsigned long long smlen,\n                     const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,\n                         const unsigned char *m, unsigned long long mlen,\n                         const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_verify_detached(const unsigned char *sig,\n                                const unsigned char *m,\n                                unsigned long long mlen,\n                                const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_sign_ed25519.h",
    "content": "#ifndef crypto_sign_ed25519_H\n#define crypto_sign_ed25519_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_ed25519_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_bytes(void);\n\n#define crypto_sign_ed25519_SEEDBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_seedbytes(void);\n\n#define crypto_sign_ed25519_PUBLICKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_publickeybytes(void);\n\n#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U)\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_secretkeybytes(void);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p,\n                        const unsigned char *m, unsigned long long mlen,\n                        const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,\n                             const unsigned char *sm, unsigned long long smlen,\n                             const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_detached(unsigned char *sig,\n                                 unsigned long long *siglen_p,\n                                 const unsigned char *m,\n                                 unsigned long long mlen,\n                                 const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_verify_detached(const unsigned char *sig,\n                                        const unsigned char *m,\n                                        unsigned long long mlen,\n                                        const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,\n                                     const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,\n                                         const unsigned char *ed25519_pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,\n                                         const unsigned char *ed25519_sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_seed(unsigned char *seed,\n                                   const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_sign_edwards25519sha512batch.h",
    "content": "#ifndef crypto_sign_edwards25519sha512batch_H\n#define crypto_sign_edwards25519sha512batch_H\n\n/*\n * WARNING: This construction was a prototype, which should not be used\n * any more in new projects.\n *\n * crypto_sign_edwards25519sha512batch is provided for applications\n * initially built with NaCl, but as recommended by the author of this\n * construction, new applications should use ed25519 instead.\n *\n * In Sodium, you should use the high-level crypto_sign_*() functions instead.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_edwards25519sha512batch_BYTES 64U\n#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U\n#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U)\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch(unsigned char *sm,\n                                        unsigned long long *smlen_p,\n                                        const unsigned char *m,\n                                        unsigned long long mlen,\n                                        const unsigned char *sk)\n       __attribute__ ((deprecated));\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch_open(unsigned char *m,\n                                             unsigned long long *mlen_p,\n                                             const unsigned char *sm,\n                                             unsigned long long smlen,\n                                             const unsigned char *pk)\n       __attribute__ ((deprecated));\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk,\n                                                unsigned char *sk)\n       __attribute__ ((deprecated));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream.h",
    "content": "#ifndef crypto_stream_H\n#define crypto_stream_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n\n#include \"crypto_stream_xsalsa20.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_stream_keybytes(void);\n\n#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_stream_noncebytes(void);\n\n#define crypto_stream_PRIMITIVE \"xsalsa20\"\nSODIUM_EXPORT\nconst char *crypto_stream_primitive(void);\n\nSODIUM_EXPORT\nint crypto_stream(unsigned char *c, unsigned long long clen,\n                  const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xor(unsigned char *c, const unsigned char *m,\n                      unsigned long long mlen, const unsigned char *n,\n                      const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_aes128ctr.h",
    "content": "#ifndef crypto_stream_aes128ctr_H\n#define crypto_stream_aes128ctr_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_aes128ctr_KEYBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_keybytes(void);\n\n#define crypto_stream_aes128ctr_NONCEBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_noncebytes(void);\n\n#define crypto_stream_aes128ctr_BEFORENMBYTES 1408U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_beforenmbytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr(unsigned char *out, unsigned long long outlen,\n                            const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_xor(unsigned char *out, const unsigned char *in,\n                                unsigned long long inlen, const unsigned char *n,\n                                const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_beforenm(unsigned char *c, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_afternm(unsigned char *out, unsigned long long len,\n                                    const unsigned char *nonce, const unsigned char *c);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_xor_afternm(unsigned char *out, const unsigned char *in,\n                                        unsigned long long len,\n                                        const unsigned char *nonce,\n                                        const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_chacha20.h",
    "content": "#ifndef crypto_stream_chacha20_H\n#define crypto_stream_chacha20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_chacha20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_keybytes(void);\n\n#define crypto_stream_chacha20_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_noncebytes(void);\n\n/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */\n\nSODIUM_EXPORT\nint crypto_stream_chacha20(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n\n/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */\n\n#define crypto_stream_chacha20_IETF_NONCEBYTES 12U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_ietf_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen,\n                                const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m,\n                                    unsigned long long mlen, const unsigned char *n,\n                                    const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m,\n                                       unsigned long long mlen,\n                                       const unsigned char *n, uint32_t ic,\n                                       const unsigned char *k);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_stream_chacha20_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_salsa20.h",
    "content": "#ifndef crypto_stream_salsa20_H\n#define crypto_stream_salsa20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa20_keybytes(void);\n\n#define crypto_stream_salsa20_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa20_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20(unsigned char *c, unsigned long long clen,\n                          const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m,\n                              unsigned long long mlen, const unsigned char *n,\n                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m,\n                                 unsigned long long mlen,\n                                 const unsigned char *n, uint64_t ic,\n                                 const unsigned char *k);\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_salsa2012.h",
    "content": "#ifndef crypto_stream_salsa2012_H\n#define crypto_stream_salsa2012_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa2012_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa2012_keybytes(void);\n\n#define crypto_stream_salsa2012_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa2012_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa2012(unsigned char *c, unsigned long long clen,\n                            const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m,\n                                unsigned long long mlen, const unsigned char *n,\n                                const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_salsa208.h",
    "content": "#ifndef crypto_stream_salsa208_H\n#define crypto_stream_salsa208_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa208_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa208_keybytes(void);\n\n#define crypto_stream_salsa208_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa208_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa208(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_stream_xsalsa20.h",
    "content": "#ifndef crypto_stream_xsalsa20_H\n#define crypto_stream_xsalsa20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_xsalsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_xsalsa20_keybytes(void);\n\n#define crypto_stream_xsalsa20_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_stream_xsalsa20_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_uint16.h",
    "content": "#ifndef crypto_uint16_H\n#define crypto_uint16_H\n\n#include <stdint.h>\n\ntypedef uint16_t crypto_uint16;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_uint32.h",
    "content": "#ifndef crypto_uint32_H\n#define crypto_uint32_H\n\n#include <stdint.h>\n\ntypedef uint32_t crypto_uint32;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_uint64.h",
    "content": "#ifndef crypto_uint64_H\n#define crypto_uint64_H\n\n#include <stdint.h>\n\ntypedef uint64_t crypto_uint64;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_uint8.h",
    "content": "#ifndef crypto_uint8_H\n#define crypto_uint8_H\n\n#include <stdint.h>\n\ntypedef uint8_t crypto_uint8;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_verify_16.h",
    "content": "#ifndef crypto_verify_16_H\n#define crypto_verify_16_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_16_BYTES 16U\nSODIUM_EXPORT\nsize_t crypto_verify_16_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_16(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_verify_32.h",
    "content": "#ifndef crypto_verify_32_H\n#define crypto_verify_32_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_32_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_verify_32_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_32(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/crypto_verify_64.h",
    "content": "#ifndef crypto_verify_64_H\n#define crypto_verify_64_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_64_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_verify_64_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_64(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/export.h",
    "content": "\n#ifndef sodium_export_H\n#define sodium_export_H\n\n#ifndef __GNUC__\n# ifdef __attribute__\n#  undef __attribute__\n# endif\n# define __attribute__(a)\n#endif\n\n#ifdef SODIUM_STATIC\n# define SODIUM_EXPORT\n#else\n# if defined(_MSC_VER)\n#  ifdef SODIUM_DLL_EXPORT\n#   define SODIUM_EXPORT __declspec(dllexport)\n#  else\n#   define SODIUM_EXPORT __declspec(dllimport)\n#  endif\n# else\n#  if defined(__SUNPRO_C)\n#   ifndef __GNU_C__\n#    define SODIUM_EXPORT __attribute__ (visibility(__global))\n#   else\n#    define SODIUM_EXPORT __attribute__ __global\n#   endif\n#  elif defined(_MSG_VER)\n#   define SODIUM_EXPORT extern __declspec(dllexport)\n#  else\n#   define SODIUM_EXPORT __attribute__ ((visibility (\"default\")))\n#  endif\n# endif\n#endif\n\n#ifndef CRYPTO_ALIGN\n# if defined(__INTEL_COMPILER) || defined(_MSC_VER)\n#  define CRYPTO_ALIGN(x) __declspec(align(x))\n# else\n#  define CRYPTO_ALIGN(x) __attribute__ ((aligned(x)))\n# endif\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/randombytes.h",
    "content": "\n#ifndef randombytes_H\n#define randombytes_H\n\n#include <sys/types.h>\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct randombytes_implementation {\n    const char *(*implementation_name)(void); /* required */\n    uint32_t    (*random)(void);              /* required */\n    void        (*stir)(void);                /* optional */\n    uint32_t    (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */\n    void        (*buf)(void * const buf, const size_t size); /* required */\n    int         (*close)(void);               /* optional */\n} randombytes_implementation;\n\nSODIUM_EXPORT\nvoid randombytes_buf(void * const buf, const size_t size);\n\nSODIUM_EXPORT\nuint32_t randombytes_random(void);\n\nSODIUM_EXPORT\nuint32_t randombytes_uniform(const uint32_t upper_bound);\n\nSODIUM_EXPORT\nvoid randombytes_stir(void);\n\nSODIUM_EXPORT\nint randombytes_close(void);\n\nSODIUM_EXPORT\nint randombytes_set_implementation(randombytes_implementation *impl);\n\nSODIUM_EXPORT\nconst char *randombytes_implementation_name(void);\n\n/* -- NaCl compatibility interface -- */\n\nSODIUM_EXPORT\nvoid randombytes(unsigned char * const buf, const unsigned long long buf_len);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/randombytes_salsa20_random.h",
    "content": "\n#ifndef randombytes_salsa20_random_H\n#define randombytes_salsa20_random_H\n\n#include \"export.h\"\n#include \"randombytes.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nextern struct randombytes_implementation randombytes_salsa20_implementation;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/randombytes_sysrandom.h",
    "content": "\n#ifndef randombytes_sysrandom_H\n#define randombytes_sysrandom_H\n\n#include \"export.h\"\n#include \"randombytes.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nextern struct randombytes_implementation randombytes_sysrandom_implementation;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/runtime.h",
    "content": "\n#ifndef sodium_runtime_H\n#define sodium_runtime_H\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint sodium_runtime_has_neon(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse2(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse3(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_ssse3(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse41(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_avx(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_pclmul(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_aesni(void);\n\n/* ------------------------------------------------------------------------- */\n\nint _sodium_runtime_get_cpu_features(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/utils.h",
    "content": "\n#ifndef sodium_utils_H\n#define sodium_utils_H\n\n#include <stddef.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef SODIUM_C99\n# if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L\n#  define SODIUM_C99(X)\n# else\n#  define SODIUM_C99(X) X\n# endif\n#endif\n\nSODIUM_EXPORT\nvoid sodium_memzero(void * const pnt, const size_t len);\n\n/*\n * WARNING: sodium_memcmp() must be used to verify if two secret keys\n * are equal, in constant time.\n * It returns 0 if the keys are equal, and -1 if they differ.\n * This function is not designed for lexicographical comparisons.\n */\nSODIUM_EXPORT\nint sodium_memcmp(const void * const b1_, const void * const b2_, size_t len)\n            __attribute__ ((warn_unused_result));\n\n/*\n * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_\n * It is suitable for lexicographical comparisons, or to compare nonces\n * and counters stored in little-endian format.\n * However, it is slower than sodium_memcmp().\n */\nSODIUM_EXPORT\nint sodium_compare(const unsigned char *b1_, const unsigned char *b2_,\n                   size_t len)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint sodium_is_zero(const unsigned char *n, const size_t nlen);\n\nSODIUM_EXPORT\nvoid sodium_increment(unsigned char *n, const size_t nlen);\n\nSODIUM_EXPORT\nvoid sodium_add(unsigned char *a, const unsigned char *b, const size_t len);\n\nSODIUM_EXPORT\nchar *sodium_bin2hex(char * const hex, const size_t hex_maxlen,\n                     const unsigned char * const bin, const size_t bin_len);\n\nSODIUM_EXPORT\nint sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen,\n                   const char * const hex, const size_t hex_len,\n                   const char * const ignore, size_t * const bin_len,\n                   const char ** const hex_end);\n\nSODIUM_EXPORT\nint sodium_mlock(void * const addr, const size_t len);\n\nSODIUM_EXPORT\nint sodium_munlock(void * const addr, const size_t len);\n\n/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose\n * allocation functions.\n *\n * They return a pointer to a region filled with 0xd0 bytes, immediately\n * followed by a guard page.\n * As a result, accessing a single byte after the requested allocation size\n * will intentionally trigger a segmentation fault.\n *\n * A canary and an additional guard page placed before the beginning of the\n * region may also kill the process if a buffer underflow is detected.\n *\n * The memory layout is:\n * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)]\n * With the layout of the unprotected pages being:\n * [optional padding][16-bytes canary][user region]\n *\n * However:\n * - These functions are significantly slower than standard functions\n * - Each allocation requires 3 or 4 additional pages\n * - The returned address will not be aligned if the allocation size is not\n *   a multiple of the required alignment. For this reason, these functions\n *   are designed to store data, such as secret keys and messages.\n *\n * sodium_malloc() can be used to allocate any libsodium data structure,\n * with the exception of crypto_generichash_state.\n *\n * The crypto_generichash_state structure is packed and its length is\n * either 357 or 361 bytes. For this reason, when using sodium_malloc() to\n * allocate a crypto_generichash_state structure, padding must be added in\n * order to ensure proper alignment:\n * state = sodium_malloc((crypto_generichash_statebytes() + (size_t) 63U)\n *                       & ~(size_t) 63U);\n */\n\nSODIUM_EXPORT\nvoid *sodium_malloc(const size_t size)\n            __attribute__ ((malloc));\n\nSODIUM_EXPORT\nvoid *sodium_allocarray(size_t count, size_t size)\n            __attribute__ ((malloc));\n\nSODIUM_EXPORT\nvoid sodium_free(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_noaccess(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_readonly(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_readwrite(void *ptr);\n\n/* -------- */\n\nint _sodium_alloc_init(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium/version.h",
    "content": "\n#ifndef sodium_version_H\n#define sodium_version_H\n\n#include \"export.h\"\n\n#define SODIUM_VERSION_STRING \"1.0.9\"\n\n#define SODIUM_LIBRARY_VERSION_MAJOR 9\n#define SODIUM_LIBRARY_VERSION_MINOR 2\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nconst char *sodium_version_string(void);\n\nSODIUM_EXPORT\nint         sodium_library_version_major(void);\n\nSODIUM_EXPORT\nint         sodium_library_version_minor(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/libsodium-ios/include/sodium.h",
    "content": "\n#ifndef sodium_H\n#define sodium_H\n\n#include \"core.h\"\n#include \"crypto_aead_aes256gcm.h\"\n#include \"crypto_aead_chacha20poly1305.h\"\n#include \"crypto_auth.h\"\n#include \"crypto_auth_hmacsha256.h\"\n#include \"crypto_auth_hmacsha512.h\"\n#include \"crypto_auth_hmacsha512256.h\"\n#include \"crypto_box.h\"\n#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"crypto_core_hsalsa20.h\"\n#include \"crypto_core_hchacha20.h\"\n#include \"crypto_core_salsa20.h\"\n#include \"crypto_core_salsa2012.h\"\n#include \"crypto_core_salsa208.h\"\n#include \"crypto_generichash.h\"\n#include \"crypto_generichash_blake2b.h\"\n#include \"crypto_hash.h\"\n#include \"crypto_hash_sha256.h\"\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_onetimeauth.h\"\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"crypto_pwhash.h\"\n#include \"crypto_pwhash_argon2i.h\"\n#include \"crypto_pwhash_scryptsalsa208sha256.h\"\n#include \"crypto_scalarmult.h\"\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"crypto_secretbox.h\"\n#include \"crypto_secretbox_xsalsa20poly1305.h\"\n#include \"crypto_shorthash.h\"\n#include \"crypto_shorthash_siphash24.h\"\n#include \"crypto_sign.h\"\n#include \"crypto_sign_ed25519.h\"\n#include \"crypto_stream.h\"\n#include \"crypto_stream_aes128ctr.h\"\n#include \"crypto_stream_chacha20.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"crypto_stream_salsa2012.h\"\n#include \"crypto_stream_salsa208.h\"\n#include \"crypto_stream_xsalsa20.h\"\n#include \"crypto_verify_16.h\"\n#include \"crypto_verify_32.h\"\n#include \"crypto_verify_64.h\"\n#include \"randombytes.h\"\n#ifdef __native_client__\n# include \"randombytes_nativeclient.h\"\n#endif\n#include \"randombytes_salsa20_random.h\"\n#include \"randombytes_sysrandom.h\"\n#include \"runtime.h\"\n#include \"utils.h\"\n#include \"version.h\"\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/.gitignore",
    "content": "build/\n.deps/\n/Makefile\nsrc/Makefile\nlibev/Makefile\nlibudns/Makefile\nlibcork/Makefile\nlibipset/Makefile\ndoc/Makefile\nautom4te.cache/\nconfig.log\nconfig.status\nlibtool\npid\nsrc/ss-*\n!src/ss-nat\nstamp-h1\n.libs\n.pc\ndebian/shadowsocks-libev/\ndebian/patches/\ndebian/files\ndebian/shadowsocks-libev.substvars\ndebian/*.debhelper*\n.dirstamp\nshadowsocks-libev.pc\ndebian/libshadowsocks-libev1.symbols\nlibsodium/src/libsodium/include/sodium/version.h\n\n# Ignore per-project vim config\n.vimrc\n\n# Ignore garbage of OS X\n*.DS_Store\n\n# Ignore vim cache\n*.swp\n\n# Documentation files\ndoc/*.1\ndoc/*.8\ndoc/*.gz\ndoc/*.xml\ndoc/*.html\n\n#\tDo not edit the following section\n# \tEdit Compile Debug Document Distribute\n*~\n*.bak\n*.bin\n*.dll\n*.exe\n*-ISO*.bdf\n*-JIS*.bdf\n*-KOI8*.bdf\n*.kld\n*.ko\n*.ko.cmd\n*.lai\n*.l[oa]\n*.[oa]\n*.obj\n*.patch\n*.so\n*.pcf.gz\n*.pdb\n*.tar.bz2\n*.tar.gz\n#\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/.travis.yml",
    "content": "language: c\ncompiler:\n    - gcc\n    - clang\naddons:\n    apt:\n        packages:\n            - asciidoc\n            - xmlto\nscript: \"./configure && make\"\nbranches:\n    only:\n        - master\nnotifications:\n    recipients:\n        - max.c.lv@gmail.com\n    email:\n        on_success: change\n        on_failure: always\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/.uncrustify.cfg",
    "content": "#\n# General options\n#\n\n# The type of line endings\nnewlines                                 = lf       # auto/lf/crlf/cr\n\n# The original size of tabs in the input\ninput_tab_size                           = 8        # number\n\n# The size of tabs in the output (only used if align_with_tabs=true)\noutput_tab_size                          = 8        # number\n\n# The ASCII value of the string escape char, usually 92 (\\) or 94 (^). (Pawn)\nstring_escape_char                       = 92       # number\n\n# Alternate string escape char for Pawn. Only works right before the quote char.\nstring_escape_char2                      = 0        # number\n\n#\n# Indenting\n#\n\n# The number of columns to indent per level.\n# Usually 2, 3, 4, or 8.\nindent_columns                           = 4        # number\n\n# The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents.\n# For FreeBSD, this is set to 4.\nindent_continue                          = 0        # number\n\n# How to use tabs when indenting code\n# 0=spaces only\n# 1=indent with tabs to brace level, align with spaces\n# 2=indent and align with tabs, using spaces when not on a tabstop\nindent_with_tabs                         = 0        # number\n\n# Comments that are not a brace level are indented with tabs on a tabstop.\n# Requires indent_with_tabs=2. If false, will use spaces.\nindent_cmt_with_tabs                     = false    # false/true\n\n# Whether to indent strings broken by '\\' so that they line up\nindent_align_string                      = true     # false/true\n\n# The number of spaces to indent multi-line XML strings.\n# Requires indent_align_string=True\nindent_xml_string                        = 0        # number\n\n# Spaces to indent '{' from level\nindent_brace                             = 0        # number\n\n# Whether braces are indented to the body level\nindent_braces                            = false    # false/true\n\n# Disabled indenting function braces if indent_braces is true\nindent_braces_no_func                    = false    # false/true\n\n# Disabled indenting class braces if indent_braces is true\nindent_braces_no_class                   = false    # false/true\n\n# Disabled indenting struct braces if indent_braces is true\nindent_braces_no_struct                  = false    # false/true\n\n# Indent based on the size of the brace parent, i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc.\nindent_brace_parent                      = false    # false/true\n\n# Whether the 'namespace' body is indented\nindent_namespace                         = false    # false/true\n\n# The number of spaces to indent a namespace block\nindent_namespace_level                   = 0        # number\n\n# If the body of the namespace is longer than this number, it won't be indented.\n# Requires indent_namespace=true. Default=0 (no limit)\nindent_namespace_limit                   = 0        # number\n\n# Whether the 'extern \"C\"' body is indented\nindent_extern                            = false    # false/true\n\n# Whether the 'class' body is indented\nindent_class                             = false    # false/true\n\n# Whether to indent the stuff after a leading class colon\nindent_class_colon                       = false    # false/true\n\n# False=treat 'else\\nif' as 'else if' for indenting purposes\n# True=indent the 'if' one level\nindent_else_if                           = false    # false/true\n\n# Amount to indent variable declarations after a open brace. neg=relative, pos=absolute\nindent_var_def_blk                       = 0        # number\n\n# Indent continued variable declarations instead of aligning.\nindent_var_def_cont                      = false    # false/true\n\n# True:  indent continued function call parameters one indent level\n# False: align parameters under the open paren\nindent_func_call_param                   = false    # false/true\n\n# Same as indent_func_call_param, but for function defs\nindent_func_def_param                    = false    # false/true\n\n# Same as indent_func_call_param, but for function protos\nindent_func_proto_param                  = false    # false/true\n\n# Same as indent_func_call_param, but for class declarations\nindent_func_class_param                  = false    # false/true\n\n# Same as indent_func_call_param, but for class variable constructors\nindent_func_ctor_var_param               = false    # false/true\n\n# Same as indent_func_call_param, but for templates\nindent_template_param                    = false    # false/true\n\n# Double the indent for indent_func_xxx_param options\nindent_func_param_double                 = false    # false/true\n\n# Indentation column for standalone 'const' function decl/proto qualifier\nindent_func_const                        = 0        # number\n\n# Indentation column for standalone 'throw' function decl/proto qualifier\nindent_func_throw                        = 0        # number\n\n# The number of spaces to indent a continued '->' or '.'\n# Usually set to 0, 1, or indent_columns.\nindent_member                            = 0        # number\n\n# Spaces to indent single line ('//') comments on lines before code\nindent_sing_line_comments                = 0        # number\n\n# If set, will indent trailing single line ('//') comments relative\n# to the code instead of trying to keep the same absolute column\nindent_relative_single_line_comments     = false    # false/true\n\n# Spaces to indent 'case' from 'switch'\n# Usually 0 or indent_columns.\nindent_switch_case                       = 0        # number\n\n# Spaces to shift the 'case' line, without affecting any other lines\n# Usually 0.\nindent_case_shift                        = 0        # number\n\n# Spaces to indent '{' from 'case'.\n# By default, the brace will appear under the 'c' in case.\n# Usually set to 0 or indent_columns.\nindent_case_brace                        = 0        # number\n\n# Whether to indent comments found in first column\nindent_col1_comment                      = false    # false/true\n\n# How to indent goto labels\n#  >0 : absolute column where 1 is the leftmost column\n#  <=0 : subtract from brace indent\nindent_label                             = 1        # number\n\n# Same as indent_label, but for access specifiers that are followed by a colon\nindent_access_spec                       = 1        # number\n\n# Indent the code after an access specifier by one level.\n# If set, this option forces 'indent_access_spec=0'\nindent_access_spec_body                  = false    # false/true\n\n# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)\nindent_paren_nl                          = false    # false/true\n\n# Controls the indent of a close paren after a newline.\n# 0: Indent to body level\n# 1: Align under the open paren\n# 2: Indent to the brace level\nindent_paren_close                       = 0        # number\n\n# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren\nindent_comma_paren                       = false    # false/true\n\n# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren\nindent_bool_paren                        = false    # false/true\n\n# If 'indent_bool_paren' is true, controls the indent of the first expression. If TRUE, aligns the first expression to the following ones\nindent_first_bool_expr                   = false    # false/true\n\n# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)\nindent_square_nl                         = false    # false/true\n\n# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies\nindent_preserve_sql                      = false    # false/true\n\n# Align continued statements at the '='. Default=True\n# If FALSE or the '=' is followed by a newline, the next line is indent one tab.\nindent_align_assign                      = true     # false/true\n\n#\n# Spacing options\n#\n\n# Add or remove space around arithmetic operator '+', '-', '/', '*', etc\nsp_arith                                 = force    # ignore/add/remove/force\n\n# Add or remove space around assignment operator '=', '+=', etc\nsp_assign                                = force    # ignore/add/remove/force\n\n# Add or remove space around assignment operator '=' in a prototype\nsp_assign_default                        = ignore   # ignore/add/remove/force\n\n# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.\nsp_before_assign                         = ignore   # ignore/add/remove/force\n\n# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.\nsp_after_assign                          = ignore   # ignore/add/remove/force\n\n# Add or remove space around assignment '=' in enum\nsp_enum_assign                           = force    # ignore/add/remove/force\n\n# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.\nsp_enum_before_assign                    = ignore   # ignore/add/remove/force\n\n# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.\nsp_enum_after_assign                     = ignore   # ignore/add/remove/force\n\n# Add or remove space around preprocessor '##' concatenation operator. Default=Add\nsp_pp_concat                             = add      # ignore/add/remove/force\n\n# Add or remove space after preprocessor '#' stringify operator. Also affects the '#@' charizing operator. Default=Add\nsp_pp_stringify                          = add      # ignore/add/remove/force\n\n# Add or remove space around boolean operators '&&' and '||'\nsp_bool                                  = force    # ignore/add/remove/force\n\n# Add or remove space around compare operator '<', '>', '==', etc\nsp_compare                               = force    # ignore/add/remove/force\n\n# Add or remove space inside '(' and ')'\nsp_inside_paren                          = remove   # ignore/add/remove/force\n\n# Add or remove space between nested parens\nsp_paren_paren                           = remove   # ignore/add/remove/force\n\n# Whether to balance spaces inside nested parens\nsp_balance_nested_parens                 = false    # false/true\n\n# Add or remove space between ')' and '{'\nsp_paren_brace                           = force    # ignore/add/remove/force\n\n# Add or remove space before pointer star '*'\nsp_before_ptr_star                       = add      # ignore/add/remove/force\n\n# Add or remove space before pointer star '*' that isn't followed by a variable name\n# If set to 'ignore', sp_before_ptr_star is used instead.\nsp_before_unnamed_ptr_star               = add      # ignore/add/remove/force\n\n# Add or remove space between pointer stars '*'\nsp_between_ptr_star                      = remove   # ignore/add/remove/force\n\n# Add or remove space after pointer star '*', if followed by a word.\nsp_after_ptr_star                        = remove   # ignore/add/remove/force\n\n# Add or remove space after a pointer star '*', if followed by a func proto/def.\nsp_after_ptr_star_func                   = remove   # ignore/add/remove/force\n\n# Add or remove space before a pointer star '*', if followed by a func proto/def.\nsp_before_ptr_star_func                  = ignore   # ignore/add/remove/force\n\n# Add or remove space before a reference sign '&'\nsp_before_byref                          = force    # ignore/add/remove/force\n\n# Add or remove space before a reference sign '&' that isn't followed by a variable name\n# If set to 'ignore', sp_before_byref is used instead.\nsp_before_unnamed_byref                  = force    # ignore/add/remove/force\n\n# Add or remove space after reference sign '&', if followed by a word.\nsp_after_byref                           = ignore   # ignore/add/remove/force\n\n# Add or remove space after a reference sign '&', if followed by a func proto/def.\nsp_after_byref_func                      = ignore   # ignore/add/remove/force\n\n# Add or remove space before a reference sign '&', if followed by a func proto/def.\nsp_before_byref_func                     = ignore   # ignore/add/remove/force\n\n# Add or remove space between type and word. Default=Force\nsp_after_type                            = force    # ignore/add/remove/force\n\n# Add or remove space in 'template <' vs 'template<'.\n# If set to ignore, sp_before_angle is used.\nsp_template_angle                        = ignore   # ignore/add/remove/force\n\n# Add or remove space before '<>'\nsp_before_angle                          = ignore   # ignore/add/remove/force\n\n# Add or remove space inside '<' and '>'\nsp_inside_angle                          = ignore   # ignore/add/remove/force\n\n# Add or remove space after '<>'\nsp_after_angle                           = ignore   # ignore/add/remove/force\n\n# Add or remove space between '<>' and '(' as found in 'new List<byte>();'\nsp_angle_paren                           = ignore   # ignore/add/remove/force\n\n# Add or remove space between '<>' and a word as in 'List<byte> m;'\nsp_angle_word                            = ignore   # ignore/add/remove/force\n\n# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add\nsp_angle_shift                           = add      # ignore/add/remove/force\n\n# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'\nsp_before_sparen                         = force    # ignore/add/remove/force\n\n# Add or remove space inside if-condition '(' and ')'\nsp_inside_sparen                         = remove   # ignore/add/remove/force\n\n# Add or remove space before if-condition ')'. Overrides sp_inside_sparen.\nsp_inside_sparen_close                   = ignore   # ignore/add/remove/force\n\n# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'\nsp_after_sparen                          = ignore   # ignore/add/remove/force\n\n# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'\nsp_sparen_brace                          = force    # ignore/add/remove/force\n\n# Add or remove space between 'invariant' and '(' in the D language.\nsp_invariant_paren                       = ignore   # ignore/add/remove/force\n\n# Add or remove space after the ')' in 'invariant (C) c' in the D language.\nsp_after_invariant_paren                 = ignore   # ignore/add/remove/force\n\n# Add or remove space before empty statement ';' on 'if', 'for' and 'while'\nsp_special_semi                          = ignore   # ignore/add/remove/force\n\n# Add or remove space before ';'. Default=Remove\nsp_before_semi                           = remove   # ignore/add/remove/force\n\n# Add or remove space before ';' in non-empty 'for' statements\nsp_before_semi_for                       = ignore   # ignore/add/remove/force\n\n# Add or remove space before a semicolon of an empty part of a for statement.\nsp_before_semi_for_empty                 = ignore   # ignore/add/remove/force\n\n# Add or remove space after ';', except when followed by a comment. Default=Add\nsp_after_semi                            = force    # ignore/add/remove/force\n\n# Add or remove space after ';' in non-empty 'for' statements. Default=Force\nsp_after_semi_for                        = force    # ignore/add/remove/force\n\n# Add or remove space after the final semicolon of an empty part of a for statement: for ( ; ; <here> ).\nsp_after_semi_for_empty                  = remove   # ignore/add/remove/force\n\n# Add or remove space before '[' (except '[]')\nsp_before_square                         = remove   # ignore/add/remove/force\n\n# Add or remove space before '[]'\nsp_before_squares                        = ignore   # ignore/add/remove/force\n\n# Add or remove space inside '[' and ']'\nsp_inside_square                         = remove   # ignore/add/remove/force\n\n# Add or remove space after ','\nsp_after_comma                           = force    # ignore/add/remove/force\n\n# Add or remove space before ','\nsp_before_comma                          = remove   # ignore/add/remove/force\n\n# Add or remove space between an open paren and comma: '(,' vs '( ,'\nsp_paren_comma                           = force    # ignore/add/remove/force\n\n# Add or remove space before the variadic '...' when preceded by a non-punctuator\nsp_before_ellipsis                       = ignore   # ignore/add/remove/force\n\n# Add or remove space after class ':'\nsp_after_class_colon                     = ignore   # ignore/add/remove/force\n\n# Add or remove space before class ':'\nsp_before_class_colon                    = ignore   # ignore/add/remove/force\n\n# Add or remove space before case ':'. Default=Remove\nsp_before_case_colon                     = remove   # ignore/add/remove/force\n\n# Add or remove space between 'operator' and operator sign\nsp_after_operator                        = ignore   # ignore/add/remove/force\n\n# Add or remove space between the operator symbol and the open paren, as in 'operator ++('\nsp_after_operator_sym                    = ignore   # ignore/add/remove/force\n\n# Add or remove space after C/D cast, i.e. 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'\nsp_after_cast                            = remove      # ignore/add/remove/force\n\n# Add or remove spaces inside cast parens\nsp_inside_paren_cast                     = remove   # ignore/add/remove/force\n\n# Add or remove space between the type and open paren in a C++ cast, i.e. 'int(exp)' vs 'int (exp)'\nsp_cpp_cast_paren                        = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'sizeof' and '('\nsp_sizeof_paren                          = remove   # ignore/add/remove/force\n\n# Add or remove space after the tag keyword (Pawn)\nsp_after_tag                             = ignore   # ignore/add/remove/force\n\n# Add or remove space inside enum '{' and '}'\nsp_inside_braces_enum                    = remove   # ignore/add/remove/force\n\n# Add or remove space inside struct/union '{' and '}'\nsp_inside_braces_struct                  = force    # ignore/add/remove/force\n\n# Add or remove space inside '{' and '}'\nsp_inside_braces                         = force    # ignore/add/remove/force\n\n# Add or remove space inside '{}'\nsp_inside_braces_empty                   = remove   # ignore/add/remove/force\n\n# Add or remove space between return type and function name\n# A minimum of 1 is forced except for pointer return types.\nsp_type_func                             = remove   # ignore/add/remove/force\n\n# Add or remove space between function name and '(' on function declaration\nsp_func_proto_paren                      = remove   # ignore/add/remove/force\n\n# Add or remove space between function name and '(' on function definition\nsp_func_def_paren                        = remove   # ignore/add/remove/force\n\n# Add or remove space inside empty function '()'\nsp_inside_fparens                        = remove   # ignore/add/remove/force\n\n# Add or remove space inside function '(' and ')'\nsp_inside_fparen                         = remove   # ignore/add/remove/force\n\n# Add or remove space between ']' and '(' when part of a function call.\nsp_square_fparen                         = ignore   # ignore/add/remove/force\n\n# Add or remove space between ')' and '{' of function\nsp_fparen_brace                          = ignore   # ignore/add/remove/force\n\n# Add or remove space between function name and '(' on function calls\nsp_func_call_paren                       = remove   # ignore/add/remove/force\n\n# Add or remove space between function name and '()' on function calls without parameters.\n# If set to 'ignore' (the default), sp_func_call_paren is used.\nsp_func_call_paren_empty                 = ignore   # ignore/add/remove/force\n\n# Add or remove space between the user function name and '(' on function calls\n# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.\nsp_func_call_user_paren                  = ignore   # ignore/add/remove/force\n\n# Add or remove space between a constructor/destructor and the open paren\nsp_func_class_paren                      = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'return' and '('\nsp_return_paren                          = ignore   # ignore/add/remove/force\n\n# Add or remove space between '__attribute__' and '('\nsp_attribute_paren                       = remove   # ignore/add/remove/force\n\n# Add or remove space between 'defined' and '(' in '#if defined (FOO)'\nsp_defined_paren                         = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'throw' and '(' in 'throw (something)'\nsp_throw_paren                           = ignore   # ignore/add/remove/force\n\n# Add or remove space between macro and value\nsp_macro                                 = ignore   # ignore/add/remove/force\n\n# Add or remove space between macro function ')' and value\nsp_macro_func                            = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'else' and '{' if on the same line\nsp_else_brace                            = force    # ignore/add/remove/force\n\n# Add or remove space between '}' and 'else' if on the same line\nsp_brace_else                            = force    # ignore/add/remove/force\n\n# Add or remove space between '}' and the name of a typedef on the same line\nsp_brace_typedef                         = force    # ignore/add/remove/force\n\n# Add or remove space between 'catch' and '{' if on the same line\nsp_catch_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove space between '}' and 'catch' if on the same line\nsp_brace_catch                           = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'finally' and '{' if on the same line\nsp_finally_brace                         = ignore   # ignore/add/remove/force\n\n# Add or remove space between '}' and 'finally' if on the same line\nsp_brace_finally                         = ignore   # ignore/add/remove/force\n\n# Add or remove space between 'try' and '{' if on the same line\nsp_try_brace                             = ignore   # ignore/add/remove/force\n\n# Add or remove space between get/set and '{' if on the same line\nsp_getset_brace                          = ignore   # ignore/add/remove/force\n\n# Add or remove space before the '::' operator\nsp_before_dc                             = ignore   # ignore/add/remove/force\n\n# Add or remove space after the '::' operator\nsp_after_dc                              = ignore   # ignore/add/remove/force\n\n# Add or remove around the D named array initializer ':' operator\nsp_d_array_colon                         = ignore   # ignore/add/remove/force\n\n# Add or remove space after the '!' (not) operator. Default=Remove\nsp_not                                   = remove   # ignore/add/remove/force\n\n# Add or remove space after the '~' (invert) operator. Default=Remove\nsp_inv                                   = remove   # ignore/add/remove/force\n\n# Add or remove space after the '&' (address-of) operator. Default=Remove\n# This does not affect the spacing after a '&' that is part of a type.\nsp_addr                                  = remove   # ignore/add/remove/force\n\n# Add or remove space around the '.' or '->' operators. Default=Remove\nsp_member                                = remove   # ignore/add/remove/force\n\n# Add or remove space after the '*' (dereference) operator. Default=Remove\n# This does not affect the spacing after a '*' that is part of a type.\nsp_deref                                 = remove   # ignore/add/remove/force\n\n# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. Default=Remove\nsp_sign                                  = remove   # ignore/add/remove/force\n\n# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'. Default=Remove\nsp_incdec                                = remove   # ignore/add/remove/force\n\n# Add or remove space before a backslash-newline at the end of a line. Default=Add\nsp_before_nl_cont                        = add      # ignore/add/remove/force\n\n# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'\nsp_after_oc_scope                        = ignore   # ignore/add/remove/force\n\n# Add or remove space after the colon in message specs\n# '-(int) f:(int) x;' vs '-(int) f: (int) x;'\nsp_after_oc_colon                        = ignore   # ignore/add/remove/force\n\n# Add or remove space before the colon in message specs\n# '-(int) f: (int) x;' vs '-(int) f : (int) x;'\nsp_before_oc_colon                       = ignore   # ignore/add/remove/force\n\n# Add or remove space after the colon in message specs\n# '[object setValue:1];' vs '[object setValue: 1];'\nsp_after_send_oc_colon                   = ignore   # ignore/add/remove/force\n\n# Add or remove space before the colon in message specs\n# '[object setValue:1];' vs '[object setValue :1];'\nsp_before_send_oc_colon                  = ignore   # ignore/add/remove/force\n\n# Add or remove space after the (type) in message specs\n# '-(int)f: (int) x;' vs '-(int)f: (int)x;'\nsp_after_oc_type                         = ignore   # ignore/add/remove/force\n\n# Add or remove space after the first (type) in message specs\n# '-(int) f:(int)x;' vs '-(int)f:(int)x;'\nsp_after_oc_return_type                  = ignore   # ignore/add/remove/force\n\n# Add or remove space between '@selector' and '('\n# '@selector(msgName)' vs '@selector (msgName)'\n# Also applies to @protocol() constructs\nsp_after_oc_at_sel                       = ignore   # ignore/add/remove/force\n\n# Add or remove space between '@selector(x)' and the following word\n# '@selector(foo) a:' vs '@selector(foo)a:'\nsp_after_oc_at_sel_parens                = ignore   # ignore/add/remove/force\n\n# Add or remove space inside '@selector' parens\n# '@selector(foo)' vs '@selector( foo )'\n# Also applies to @protocol() constructs\nsp_inside_oc_at_sel_parens               = ignore   # ignore/add/remove/force\n\n# Add or remove space before a block pointer caret\n# '^int (int arg){...}' vs. ' ^int (int arg){...}'\nsp_before_oc_block_caret                 = ignore   # ignore/add/remove/force\n\n# Add or remove space after a block pointer caret\n# '^int (int arg){...}' vs. '^ int (int arg){...}'\nsp_after_oc_block_caret                  = ignore   # ignore/add/remove/force\n\n# Add or remove space around the ':' in 'b ? t : f'\nsp_cond_colon                            = force    # ignore/add/remove/force\n\n# Add or remove space around the '?' in 'b ? t : f'\nsp_cond_question                         = force    # ignore/add/remove/force\n\n# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.\nsp_case_label                            = ignore   # ignore/add/remove/force\n\n# Control the space around the D '..' operator.\nsp_range                                 = ignore   # ignore/add/remove/force\n\n# Control the space after the opening of a C++ comment '// A' vs '//A'\n# MPlayer devs note: we ignore the following setting because it breaks Doxygen comments\n#sp_cmt_cpp_start                         = ignore   # ignore/add/remove/force\nsp_cmt_cpp_start                         = add   # ignore/add/remove/force\n\n# Controls the spaces between #else or #endif and a trailing comment\nsp_endif_cmt                             = ignore   # ignore/add/remove/force\n\n#\n# Code alignment (not left column spaces/tabs)\n#\n\n# Whether to keep non-indenting tabs\nalign_keep_tabs                          = false    # false/true\n\n# Whether to use tabs for aligning\nalign_with_tabs                          = false    # false/true\n\n# Whether to bump out to the next tab when aligning\nalign_on_tabstop                         = false    # false/true\n\n# Whether to left-align numbers\nalign_number_left                        = true     # false/true\n\n# Align variable definitions in prototypes and functions\nalign_func_params                        = false    # false/true\n\n# Align parameters in single-line functions that have the same name.\n# The function names must already be aligned with each other.\nalign_same_func_call_params              = false    # false/true\n\n# The span for aligning variable definitions (0=don't align)\nalign_var_def_span                       = 0        # number\n\n# How to align the star in variable definitions.\n#  0=Part of the type     'void *   foo;'\n#  1=Part of the variable 'void     *foo;'\n#  2=Dangling             'void    *foo;'\nalign_var_def_star_style                 = 2        # number\n\n# How to align the '&' in variable definitions.\n#  0=Part of the type\n#  1=Part of the variable\n#  2=Dangling\nalign_var_def_amp_style                  = 0        # number\n\n# The threshold for aligning variable definitions (0=no limit)\nalign_var_def_thresh                     = 0        # number\n\n# The gap for aligning variable definitions\nalign_var_def_gap                        = 0        # number\n\n# Whether to align the colon in struct bit fields\nalign_var_def_colon                      = false    # false/true\n\n# Whether to align any attribute after the variable name\nalign_var_def_attribute                  = false    # false/true\n\n# Whether to align inline struct/enum/union variable definitions\nalign_var_def_inline                     = false    # false/true\n\n# The span for aligning on '=' in assignments (0=don't align)\nalign_assign_span                        = 1        # number\n\n# The threshold for aligning on '=' in assignments (0=no limit)\nalign_assign_thresh                      = 0        # number\n\n# The span for aligning on '=' in enums (0=don't align)\nalign_enum_equ_span                      = 1        # number\n\n# The threshold for aligning on '=' in enums (0=no limit)\nalign_enum_equ_thresh                    = 0        # number\n\n# The span for aligning struct/union (0=don't align)\nalign_var_struct_span                    = 0        # number\n\n# The threshold for aligning struct/union member definitions (0=no limit)\nalign_var_struct_thresh                  = 0        # number\n\n# The gap for aligning struct/union member definitions\nalign_var_struct_gap                     = 0        # number\n\n# The span for aligning struct initializer values (0=don't align)\nalign_struct_init_span                   = 1        # number\n\n# The minimum space between the type and the synonym of a typedef\nalign_typedef_gap                        = 0        # number\n\n# The span for aligning single-line typedefs (0=don't align)\nalign_typedef_span                       = 0        # number\n\n# How to align typedef'd functions with other typedefs\n# 0: Don't mix them at all\n# 1: align the open paren with the types\n# 2: align the function type name with the other type names\nalign_typedef_func                       = 0        # number\n\n# Controls the positioning of the '*' in typedefs. Just try it.\n# 0: Align on typedef type, ignore '*'\n# 1: The '*' is part of type name: typedef int  *pint;\n# 2: The '*' is part of the type, but dangling: typedef int *pint;\nalign_typedef_star_style                 = 0        # number\n\n# Controls the positioning of the '&' in typedefs. Just try it.\n# 0: Align on typedef type, ignore '&'\n# 1: The '&' is part of type name: typedef int  &pint;\n# 2: The '&' is part of the type, but dangling: typedef int &pint;\nalign_typedef_amp_style                  = 0        # number\n\n# The span for aligning comments that end lines (0=don't align)\nalign_right_cmt_span                     = 0        # number\n\n# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment\nalign_right_cmt_mix                      = false    # false/true\n\n# If a trailing comment is more than this number of columns away from the text it follows,\n# it will qualify for being aligned. This has to be > 0 to do anything.\nalign_right_cmt_gap                      = 0        # number\n\n# Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore)\nalign_right_cmt_at_col                   = 0        # number\n\n# The span for aligning function prototypes (0=don't align)\nalign_func_proto_span                    = 0        # number\n\n# Minimum gap between the return type and the function name.\nalign_func_proto_gap                     = 0        # number\n\n# Align function protos on the 'operator' keyword instead of what follows\nalign_on_operator                        = false    # false/true\n\n# Whether to mix aligning prototype and variable declarations.\n# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.\nalign_mix_var_proto                      = false    # false/true\n\n# Align single-line functions with function prototypes, uses align_func_proto_span\nalign_single_line_func                   = false    # false/true\n\n# Aligning the open brace of single-line functions.\n# Requires align_single_line_func=true, uses align_func_proto_span\nalign_single_line_brace                  = false    # false/true\n\n# Gap for align_single_line_brace.\nalign_single_line_brace_gap              = 0        # number\n\n# The span for aligning ObjC msg spec (0=don't align)\nalign_oc_msg_spec_span                   = 0        # number\n\n# Whether to align macros wrapped with a backslash and a newline.\n# This will not work right if the macro contains a multi-line comment.\nalign_nl_cont                            = false    # false/true\n\n# The minimum space between label and value of a preprocessor define\nalign_pp_define_gap                      = 0        # number\n\n# The span for aligning on '#define' bodies (0=don't align)\nalign_pp_define_span                     = 0        # number\n\n# Align lines that start with '<<' with previous '<<'. Default=true\nalign_left_shift                         = true     # false/true\n\n# Span for aligning parameters in an Obj-C message call on the ':' (0=don't align)\nalign_oc_msg_colon_span                  = 0        # number\n\n# Aligning parameters in an Obj-C '+' or '-' declaration on the ':'\nalign_oc_decl_colon                      = false    # false/true\n\n#\n# Newline adding and removing options\n#\n\n# Whether to collapse empty blocks between '{' and '}'\nnl_collapse_empty_body                   = false    # false/true\n\n# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'\nnl_assign_leave_one_liners               = false    # false/true\n\n# Don't split one-line braced statements inside a class xx { } body\nnl_class_leave_one_liners                = false    # false/true\n\n# Don't split one-line enums: 'enum foo { BAR = 15 };'\nnl_enum_leave_one_liners                 = false    # false/true\n\n# Don't split one-line get or set functions\nnl_getset_leave_one_liners               = false    # false/true\n\n# Don't split one-line function definitions - 'int foo() { return 0; }'\nnl_func_leave_one_liners                 = false    # false/true\n\n# Don't split one-line if/else statements - 'if(a) b++;'\nnl_if_leave_one_liners                   = false    # false/true\n\n# Add or remove newlines at the start of the file\nnl_start_of_file                         = remove   # ignore/add/remove/force\n\n# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'\nnl_start_of_file_min                     = 0        # number\n\n# Add or remove newline at the end of the file\nnl_end_of_file                           = force    # ignore/add/remove/force\n\n# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')\nnl_end_of_file_min                       = 1        # number\n\n# Add or remove newline between '=' and '{'\nnl_assign_brace                          = remove   # ignore/add/remove/force\n\n# Add or remove newline between '=' and '[' (D only)\nnl_assign_square                         = ignore   # ignore/add/remove/force\n\n# Add or remove newline after '= [' (D only). Will also affect the newline before the ']'\nnl_after_square_assign                   = ignore   # ignore/add/remove/force\n\n# The number of blank lines after a block of variable definitions\nnl_func_var_def_blk                      = 0        # number\n\n# Add or remove newline between a function call's ')' and '{', as in:\n# list_for_each(item, &list) { }\nnl_fcall_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'enum' and '{'\nnl_enum_brace                            = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'struct and '{'\nnl_struct_brace                          = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'union' and '{'\nnl_union_brace                           = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'if' and '{'\nnl_if_brace                              = remove   # ignore/add/remove/force\n\n# Add or remove newline between '}' and 'else'\nnl_brace_else                            = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'else if' and '{'\n# If set to ignore, nl_if_brace is used instead\nnl_elseif_brace                          = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'else' and '{'\nnl_else_brace                            = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'else' and 'if'\nnl_else_if                               = remove   # ignore/add/remove/force\n\n# Add or remove newline between '}' and 'finally'\nnl_brace_finally                         = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'finally' and '{'\nnl_finally_brace                         = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'try' and '{'\nnl_try_brace                             = ignore   # ignore/add/remove/force\n\n# Add or remove newline between get/set and '{'\nnl_getset_brace                          = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'for' and '{'\nnl_for_brace                             = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'catch' and '{'\nnl_catch_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline between '}' and 'catch'\nnl_brace_catch                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'while' and '{'\nnl_while_brace                           = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'using' and '{'\nnl_using_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline between two open or close braces.\n# Due to general newline/brace handling, REMOVE may not work.\nnl_brace_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'do' and '{'\nnl_do_brace                              = remove   # ignore/add/remove/force\n\n# Add or remove newline between '}' and 'while' of 'do' statement\nnl_brace_while                           = remove   # ignore/add/remove/force\n\n# Add or remove newline between 'switch' and '{'\nnl_switch_brace                          = remove   # ignore/add/remove/force\n\n# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.\n# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace.\nnl_multi_line_cond                       = false    # false/true\n\n# Force a newline in a define after the macro name for multi-line defines.\nnl_multi_line_define                     = false    # false/true\n\n# Whether to put a newline before 'case' statement\nnl_before_case                           = false    # false/true\n\n# Add or remove newline between ')' and 'throw'\nnl_before_throw                          = ignore   # ignore/add/remove/force\n\n# Whether to put a newline after 'case' statement\nnl_after_case                            = true     # false/true\n\n# Newline between namespace and {\nnl_namespace_brace                       = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'template<>' and whatever follows.\nnl_template_class                        = ignore   # ignore/add/remove/force\n\n# Add or remove newline between 'class' and '{'\nnl_class_brace                           = ignore   # ignore/add/remove/force\n\n# Add or remove newline after each ',' in the constructor member initialization\nnl_class_init_args                       = ignore   # ignore/add/remove/force\n\n# Add or remove newline between return type and function name in a function definition\nnl_func_type_name                        = remove   # ignore/add/remove/force\n\n# Add or remove newline between return type and function name inside a class {}\n# Uses nl_func_type_name or nl_func_proto_type_name if set to ignore.\nnl_func_type_name_class                  = ignore   # ignore/add/remove/force\n\n# Add or remove newline between function scope and name in a definition\n# Controls the newline after '::' in 'void A::f() { }'\nnl_func_scope_name                       = ignore   # ignore/add/remove/force\n\n# Add or remove newline between return type and function name in a prototype\nnl_func_proto_type_name                  = remove   # ignore/add/remove/force\n\n# Add or remove newline between a function name and the opening '('\nnl_func_paren                            = remove   # ignore/add/remove/force\n\n# Add or remove newline between a function name and the opening '(' in the definition\nnl_func_def_paren                        = remove   # ignore/add/remove/force\n\n# Add or remove newline after '(' in a function declaration\nnl_func_decl_start                       = remove   # ignore/add/remove/force\n\n# Add or remove newline after '(' in a function definition\nnl_func_def_start                        = ignore   # ignore/add/remove/force\n\n# Overrides nl_func_decl_start when there is only one parameter.\nnl_func_decl_start_single                = ignore   # ignore/add/remove/force\n\n# Overrides nl_func_def_start when there is only one parameter.\nnl_func_def_start_single                 = ignore   # ignore/add/remove/force\n\n# Add or remove newline after each ',' in a function declaration\nnl_func_decl_args                        = ignore   # ignore/add/remove/force\n\n# Add or remove newline after each ',' in a function definition\nnl_func_def_args                         = ignore   # ignore/add/remove/force\n\n# Add or remove newline before the ')' in a function declaration\nnl_func_decl_end                         = remove   # ignore/add/remove/force\n\n# Add or remove newline before the ')' in a function definition\nnl_func_def_end                          = ignore   # ignore/add/remove/force\n\n# Overrides nl_func_decl_end when there is only one parameter.\nnl_func_decl_end_single                  = ignore   # ignore/add/remove/force\n\n# Overrides nl_func_def_end when there is only one parameter.\nnl_func_def_end_single                   = ignore   # ignore/add/remove/force\n\n# Add or remove newline between '()' in a function declaration.\nnl_func_decl_empty                       = ignore   # ignore/add/remove/force\n\n# Add or remove newline between '()' in a function definition.\nnl_func_def_empty                        = ignore   # ignore/add/remove/force\n\n# Add or remove newline between function signature and '{'\nnl_fdef_brace                            = force    # ignore/add/remove/force\n\n# Whether to put a newline after 'return' statement\nnl_after_return                          = false    # false/true\n\n# Add or remove a newline between the return keyword and return expression.\nnl_return_expr                           = ignore   # ignore/add/remove/force\n\n# Whether to put a newline after semicolons, except in 'for' statements\nnl_after_semicolon                       = true     # false/true\n\n# Whether to put a newline after brace open.\n# This also adds a newline before the matching brace close.\nnl_after_brace_open                      = false    # false/true\n\n# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is\n# placed between the open brace and a trailing single-line comment.\nnl_after_brace_open_cmt                  = false    # false/true\n\n# Whether to put a newline after a virtual brace open with a non-empty body.\n# These occur in un-braced if/while/do/for statement bodies.\nnl_after_vbrace_open                     = true     # false/true\n\n# Whether to put a newline after a virtual brace open with an empty body.\n# These occur in un-braced if/while/do/for statement bodies.\nnl_after_vbrace_open_empty               = false    # false/true\n\n# Whether to put a newline after a brace close.\n# Does not apply if followed by a necessary ';'.\nnl_after_brace_close                     = false    # false/true\n\n# Whether to put a newline after a virtual brace close.\n# Would add a newline before return in: 'if (foo) a++; return;'\nnl_after_vbrace_close                    = false    # false/true\n\n# Whether to alter newlines in '#define' macros\nnl_define_macro                          = false    # false/true\n\n# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'\nnl_squeeze_ifdef                         = false    # false/true\n\n# Add or remove blank line before 'if'\nnl_before_if                             = ignore   # ignore/add/remove/force\n\n# Add or remove blank line after 'if' statement\nnl_after_if                              = ignore   # ignore/add/remove/force\n\n# Add or remove blank line before 'for'\nnl_before_for                            = ignore   # ignore/add/remove/force\n\n# Add or remove blank line after 'for' statement\nnl_after_for                             = ignore   # ignore/add/remove/force\n\n# Add or remove blank line before 'while'\nnl_before_while                          = ignore   # ignore/add/remove/force\n\n# Add or remove blank line after 'while' statement\nnl_after_while                           = ignore   # ignore/add/remove/force\n\n# Add or remove blank line before 'switch'\nnl_before_switch                         = ignore   # ignore/add/remove/force\n\n# Add or remove blank line after 'switch' statement\nnl_after_switch                          = ignore   # ignore/add/remove/force\n\n# Add or remove blank line before 'do'\nnl_before_do                             = ignore   # ignore/add/remove/force\n\n# Add or remove blank line after 'do/while' statement\nnl_after_do                              = ignore   # ignore/add/remove/force\n\n# Whether to double-space commented-entries in struct/enum\nnl_ds_struct_enum_cmt                    = false    # false/true\n\n# Whether to double-space before the close brace of a struct/union/enum\n# (lower priority than 'eat_blanks_before_close_brace')\nnl_ds_struct_enum_close_brace            = false    # false/true\n\n# Add or remove a newline around a class colon.\n# Related to pos_class_colon, nl_class_init_args, and pos_comma.\nnl_class_colon                           = ignore   # ignore/add/remove/force\n\n# Change simple unbraced if statements into a one-liner\n# 'if(b)\\n i++;' => 'if(b) i++;'\nnl_create_if_one_liner                   = false    # false/true\n\n# Change simple unbraced for statements into a one-liner\n# 'for (i=0;i<5;i++)\\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'\nnl_create_for_one_liner                  = false    # false/true\n\n# Change simple unbraced while statements into a one-liner\n# 'while (i<5)\\n foo(i++);' => 'while (i<5) foo(i++);'\nnl_create_while_one_liner                = false    # false/true\n\n#\n# Positioning options\n#\n\n# The position of arithmetic operators in wrapped expressions\npos_arith                                = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of assignment in wrapped expressions.\n# Do not affect '=' followed by '{'\npos_assign                               = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of boolean operators in wrapped expressions\npos_bool                                 = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of comparison operators in wrapped expressions\npos_compare                              = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of conditional (b ? t : f) operators in wrapped expressions\npos_conditional                          = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of the comma in wrapped expressions\npos_comma                                = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of the comma in the constructor initialization list\npos_class_comma                          = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n# The position of colons between constructor and member initialization\npos_class_colon                          = ignore   # ignore/lead/lead_break/lead_force/trail/trail_break/trail_force\n\n#\n# Line Splitting options\n#\n\n# Try to limit code width to N number of columns\ncode_width                               = 120      # number\n\n# Whether to fully split long 'for' statements at semi-colons\nls_for_split_full                        = false    # false/true\n\n# Whether to fully split long function protos/calls at commas\nls_func_split_full                       = false    # false/true\n\n#\n# Blank line options\n#\n\n# The maximum consecutive newlines\nnl_max                                   = 2        # number\n\n# The number of newlines after a function prototype, if followed by another function prototype\nnl_after_func_proto                      = 0        # number\n\n# The number of newlines after a function prototype, if not followed by another function prototype\nnl_after_func_proto_group                = 0        # number\n\n# The number of newlines after '}' of a multi-line function body\nnl_after_func_body                       = 2        # number\n\n# The number of newlines after '}' of a single line function body\nnl_after_func_body_one_liner             = 2        # number\n\n# The minimum number of newlines before a multi-line comment.\n# Doesn't apply if after a brace open or another multi-line comment.\nnl_before_block_comment                  = 0        # number\n\n# The minimum number of newlines before a single-line C comment.\n# Doesn't apply if after a brace open or other single-line C comments.\nnl_before_c_comment                      = 0        # number\n\n# The minimum number of newlines before a CPP comment.\n# Doesn't apply if after a brace open or other CPP comments.\nnl_before_cpp_comment                    = 0        # number\n\n# Whether to force a newline after a multi-line comment.\nnl_after_multiline_comment               = false    # false/true\n\n# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.\n# Will not change the newline count if after a brace open.\n# 0 = No change.\nnl_before_access_spec                    = 0        # number\n\n# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.\n# 0 = No change.\nnl_after_access_spec                     = 0        # number\n\n# The number of newlines between a function def and the function comment.\n# 0 = No change.\nnl_comment_func_def                      = 0        # number\n\n# The number of newlines after a try-catch-finally block that isn't followed by a brace close.\n# 0 = No change.\nnl_after_try_catch_finally               = 0        # number\n\n# The number of newlines before and after a property, indexer or event decl.\n# 0 = No change.\nnl_around_cs_property                    = 0        # number\n\n# The number of newlines between the get/set/add/remove handlers in C#.\n# 0 = No change.\nnl_between_get_set                       = 0        # number\n\n# Whether to remove blank lines after '{'\neat_blanks_after_open_brace              = true     # false/true\n\n# Whether to remove blank lines before '}'\neat_blanks_before_close_brace            = true     # false/true\n\n#\n# Code modifying options (non-whitespace)\n#\n\n# Add or remove braces on single-line 'do' statement\nmod_full_brace_do                        = remove   # ignore/add/remove/force\n\n# Add or remove braces on single-line 'for' statement\nmod_full_brace_for                       = remove   # ignore/add/remove/force\n\n# Add or remove braces on single-line function definitions. (Pawn)\nmod_full_brace_function                  = ignore   # ignore/add/remove/force\n\n# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.\nmod_full_brace_if                        = ignore   # ignore/add/remove/force\n\n# Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.\n# If any must be braced, they are all braced.  If all can be unbraced, then the braces are removed.\nmod_full_brace_if_chain                  = false    # false/true\n\n# Don't remove braces around statements that span N newlines\nmod_full_brace_nl                        = 0        # number\n\n# Add or remove braces on single-line 'while' statement\nmod_full_brace_while                     = remove   # ignore/add/remove/force\n\n# Add or remove braces on single-line 'using ()' statement\nmod_full_brace_using                     = remove   # ignore/add/remove/force\n\n# Add or remove unnecessary paren on 'return' statement\nmod_paren_on_return                      = remove   # ignore/add/remove/force\n\n# Whether to change optional semicolons to real semicolons\nmod_pawn_semicolon                       = false    # false/true\n\n# Add parens on 'while' and 'if' statement around bools\nmod_full_paren_if_bool                   = false    # false/true\n\n# Whether to remove superfluous semicolons\nmod_remove_extra_semicolon               = true     # false/true\n\n# If a function body exceeds the specified number of newlines and doesn't have a comment after\n# the close brace, a comment will be added.\nmod_add_long_function_closebrace_comment = 0        # number\n\n# If a switch body exceeds the specified number of newlines and doesn't have a comment after\n# the close brace, a comment will be added.\nmod_add_long_switch_closebrace_comment   = 0        # number\n\n# If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after\n# the #else, a comment will be added.\nmod_add_long_ifdef_endif_comment         = 0        # number\n\n# If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after\n# the #endif, a comment will be added.\nmod_add_long_ifdef_else_comment          = 0        # number\n\n# If TRUE, will sort consecutive single-line 'import' statements [Java, D]\nmod_sort_import                          = false    # false/true\n\n# If TRUE, will sort consecutive single-line 'using' statements [C#]\nmod_sort_using                           = false    # false/true\n\n# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]\n# This is generally a bad idea, as it may break your code.\nmod_sort_include                         = false    # false/true\n\n# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.\nmod_move_case_break                      = false    # false/true\n\n# Will add or remove the braces around a fully braced case statement.\n# Will only remove the braces if there are no variable declarations in the block.\nmod_case_brace                           = ignore   # ignore/add/remove/force\n\n# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.\nmod_remove_empty_return                  = false    # false/true\n\n#\n# Comment modifications\n#\n\n# Try to wrap comments at cmt_width columns\ncmt_width                                = 0        # number\n\n# Set the comment reflow mode (default: 0)\n# 0: no reflowing (apart from the line wrapping due to cmt_width)\n# 1: no touching at all\n# 2: full reflow\ncmt_reflow_mode                          = 0        # number\n\n# If false, disable all multi-line comment changes, including cmt_width. keyword substitution, and leading chars.\n# Default is true.\ncmt_indent_multi                         = true     # false/true\n\n# Whether to group c-comments that look like they are in a block\ncmt_c_group                              = false    # false/true\n\n# Whether to put an empty '/*' on the first line of the combined c-comment\ncmt_c_nl_start                           = false    # false/true\n\n# Whether to put a newline before the closing '*/' of the combined c-comment\ncmt_c_nl_end                             = false    # false/true\n\n# Whether to group cpp-comments that look like they are in a block\ncmt_cpp_group                            = false    # false/true\n\n# Whether to put an empty '/*' on the first line of the combined cpp-comment\ncmt_cpp_nl_start                         = false    # false/true\n\n# Whether to put a newline before the closing '*/' of the combined cpp-comment\ncmt_cpp_nl_end                           = false    # false/true\n\n# Whether to change cpp-comments into c-comments\ncmt_cpp_to_c                             = false    # false/true\n\n# Whether to put a star on subsequent comment lines\ncmt_star_cont                            = true     # false/true\n\n# The number of spaces to insert at the start of subsequent comment lines\ncmt_sp_before_star_cont                  = 0        # number\n\n# The number of spaces to insert after the star on subsequent comment lines\ncmt_sp_after_star_cont                   = 0        # number\n\n# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of\n# the comment are the same length. Default=True\ncmt_multi_check_last                     = false    # false/true\n\n# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.\n# Will substitute $(filename) with the current file's name.\ncmt_insert_file_header                   = \"\"         # string\n\n# The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment.\n# Will substitute $(filename) with the current file's name.\ncmt_insert_file_footer                   = \"\"         # string\n\n# The filename that contains text to insert before a function implementation if the function isn't preceded with a C/C++ comment.\n# Will substitute $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.\n# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }\ncmt_insert_func_header                   = \"\"         # string\n\n# The filename that contains text to insert before a class if the class isn't preceded with a C/C++ comment.\n# Will substitute $(class) with the class name.\ncmt_insert_class_header                  = \"\"         # string\n\n# If a preprocessor is encountered when stepping backwards from a function name, then\n# this option decides whether the comment should be inserted.\n# Affects cmt_insert_func_header and cmt_insert_class_header.\ncmt_insert_before_preproc                = false    # false/true\n\n#\n# Preprocessor options\n#\n\n# Control indent of preprocessors inside #if blocks at brace level 0\npp_indent                                = remove   # ignore/add/remove/force\n\n# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)\npp_indent_at_level                       = false    # false/true\n\n# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.\npp_indent_count                          = 1        # number\n\n# Add or remove space after # based on pp_level of #if blocks\npp_space                                 = remove   # ignore/add/remove/force\n\n# Sets the number of spaces added with pp_space\npp_space_count                           = 0        # number\n\n# The indent for #region and #endregion in C# and '#pragma region' in C/C++\npp_indent_region                         = 0        # number\n\n# Whether to indent the code between #region and #endregion\npp_region_indent_code                    = false    # false/true\n\n# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level\npp_indent_if                             = 0        # number\n\n# Control whether to indent the code between #if, #else and #endif when not at file-level\npp_if_indent_code                        = false    # false/true\n\n# Whether to indent '#define' at the brace level (true) or from column 1 (false)\npp_define_at_level                       = false    # false/true\n\n# You can force a token to be a type with the 'type' option.\n# Example:\n# type myfoo1 myfoo2\n#\n# You can create custom macro-based indentation using macro-open,\n# macro-else and macro-close.\n# Example:\n# macro-open  BEGIN_TEMPLATE_MESSAGE_MAP\n# macro-open  BEGIN_MESSAGE_MAP\n# macro-close END_MESSAGE_MAP\n#\n# You can assign any keyword to any type with the set option.\n# set func_call_user _ N_\n#\n# The full syntax description of all custom definition config entries\n# is shown below:\n#\n# define custom tokens as:\n# - embed whitespace in token using '' escape character, or\n#   put token in quotes\n# - these: ' \" and ` are recognized as quote delimiters\n#\n# type token1 token2 token3 ...\n#             ^ optionally specify multiple tokens on a single line\n# define def_token output_token\n#                  ^ output_token is optional, then NULL is assumed\n# macro-open token\n# macro-close token\n# macro-else token\n# set id token1 token2 ...\n#               ^ optionally specify multiple tokens on a single line\n#     ^ id is one of the names in token_enum.h sans the CT_ prefix,\n#       e.g. PP_PRAGMA\n#\n# all tokens are separated by any mix of ',' commas, '=' equal signs\n# and whitespace (space, tab)\n#\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/AUTHORS",
    "content": "Shadowsocks-libev was originally created in late 2013, by\nClowwindy <clowwindy@gmail.com>, then rewritten and maintained by\nMax Lv <max.c.lv@gmail.com>.\n\nHere is an inevitably incomplete list of MUCH-APPRECIATED CONTRIBUTORS --\npeople who have submitted patches, fixed bugs, added translations, and\ngenerally made shadowsocks-libev that much better:\n\nhttps://github.com/shadowsocks/shadowsocks-libev/graphs/contributors\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/COPYING",
    "content": "This 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 3 of the License, or\n(at your option) any 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\nalong with this program.  If not, see <http://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/Changes",
    "content": "shadowsocks-libev (2.4.8-1) unstable; urgency=low\n\n  * Update manual pages with asciidoc.\n  * Fix issues of bind_address option.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 20 Jul 2016 09:25:50 +0800\n\nshadowsocks-libev (2.4.7-1) unstable; urgency=low\n\n  * Add ss-nat, a helper script to set up NAT rules for ss-redir.\n  * Fix several issues for debian package.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 1 Jun 2016 18:21:45 +0800\n\nshadowsocks-libev (2.4.6-1) unstable; urgency=low\n\n  * Update manual pages.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 21 Apr 2016 17:33:34 +0800\n\nshadowsocks-libev (2.4.5-1) unstable; urgency=low\n\n  * Fix build issues on OpenWRT.\n  * Reduce the latency of redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 01 Feb 2016 13:22:50 +0800\n\nshadowsocks-libev (2.4.4-1) unstable; urgency=low\n\n  * Fix a potential memory leak.\n  * Fix some compiler related issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 13 Jan 2016 11:50:12 +0800\n\nshadowsocks-libev (2.4.3-1) unstable; urgency=high\n\n  * Refine the buffer allocation.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 19 Dec 2015 12:30:21 +0900\n\nshadowsocks-libev (2.4.1-1) unstable; urgency=high\n\n  * Fix a security bug.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 29 Oct 2015 15:42:47 +0900\n\nshadowsocks-libev (2.4.0-1) unstable; urgency=low\n\n  * Update the one-time authentication\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 24 Sep 2015 14:11:05 +0900\n\nshadowsocks-libev (2.3.3-1) unstable; urgency=low\n\n  * Refine the onetime authentication of header.\n  * Enforce CRC16 on the payload.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 18 Sep 2015 10:38:21 +0900\n\nshadowsocks-libev (2.3.2-1) unstable; urgency=low\n\n  * Fix minor issues of build scripts.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 13 Sep 2015 15:22:28 +0900\n\nshadowsocks-libev (2.3.1-1) unstable; urgency=low\n\n  * Fix an issue of connection cache of UDP relay.\n  * Add support of onetime authentication for header verification.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 04 Sep 2015 07:54:02 +0900\n\nshadowsocks-libev (2.3.0-1) unstable; urgency=low\n\n  * Add manager mode to support multi-user and traffic stat.\n  * Fix a build issue on OS X El Capitan.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 30 Jul 2015 17:30:43 +0900\n\nshadowsocks-libev (2.2.3-1) unstable; urgency=high\n\n  * Fix the multiple UDP source port issue.\n  * Allow working in UDP only mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 11 Jul 2015 08:31:02 +0900\n\nshadowsocks-libev (2.2.2-1) unstable; urgency=low\n\n  * Fix the timer of UDP relay.\n  * Check name_len in the header.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 15 Jun 2015 10:26:40 +0900\n\nshadowsocks-libev (2.2.1-1) unstable; urgency=low\n\n  * Fix an issue of UDP relay.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 10 May 2015 21:23:44 +0900\n\nshadowsocks-libev (2.2.0-1) unstable; urgency=low\n\n  * Add TPROXY support in redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 04 May 2015 02:44:17 -0300\n\nshadowsocks-libev (2.1.4-1) unstable; urgency=low\n\n  * Fix a bug of server mode ACL.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Feb 2015 20:24:43 +0900\n\nshadowsocks-libev (2.1.3-1) unstable; urgency=low\n\n  * Add ACL support to remote server.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Feb 2015 10:59:44 +0900\n\nshadowsocks-libev (2.1.2-1) unstable; urgency=low\n\n  * Refine multiple port binding.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 31 Jan 2015 18:56:25 +0900\n\nshadowsocks-libev (2.1.1-1) unstable; urgency=low\n\n  * Fix a memory leak.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 21 Jan 2015 21:40:58 +0900\n\nshadowsocks-libev (2.1.0-1) unstable; urgency=low\n\n  * Fix a bug of tunnel mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 19 Jan 2015 09:59:52 +0900\n\nshadowsocks-libev (2.0.8-1) unstable; urgency=low\n\n  * Fix a bug of IPv6.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 16 Jan 2015 10:58:12 +0900\n\nshadowsocks-libev (2.0.7-1) unstable; urgency=low\n\n  * Fix some performance issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 13 Jan 2015 13:17:58 +0900\n\nshadowsocks-libev (2.0.6-1) unstable; urgency=high\n\n  * Fix a critical issue in redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 12 Jan 2015 21:51:19 +0900\n\nshadowsocks-libev (2.0.5-1) unstable; urgency=low\n\n  * Refine local, tunnel, and redir modes.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 12 Jan 2015 12:39:05 +0800\n\nshadowsocks-libev (2.0.4-1) unstable; urgency=low\n\n  * Fix building issues with MinGW32.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 11 Jan 2015 13:33:31 +0900\n\nshadowsocks-libev (2.0.3-1) unstable; urgency=high\n\n  * Fix some issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 16:27:54 +0800\n\nshadowsocks-libev (2.0.2-1) unstable; urgency=low\n\n  * Fix issues with MinGW.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 15:17:10 +0800\n\nshadowsocks-libev (2.0.1-1) unstable; urgency=low\n\n  * Implement a real asynchronous DNS resolver.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 10:04:28 +0800\n\nshadowsocks-libev (1.6.4-1) unstable; urgency=low\n\n  * Update documents.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 07 Jan 2015 21:48:58 +0900\n\nshadowsocks-libev (1.6.3-1) unstable; urgency=low\n\n  * Refine ss-redir.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 04 Jan 2015 19:23:52 +0900\n\nshadowsocks-libev (1.6.2-1) unstable; urgency=low\n\n  * Fix some build issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 30 Dec 2014 10:30:28 +0800\n\nshadowsocks-libev (1.6.1-1) unstable; urgency=high\n\n  * Add salsa20 and chacha20 support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 13 Dec 2014 15:11:34 +0800\n\nshadowsocks-libev (1.6.0-1) unstable; urgency=low\n\n  * Solve conflicts with other shadowsocks portings.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 17 Nov 2014 14:10:21 +0800\n\nshadowsocks-libev (1.5.3-2) unstable; urgency=low\n\n  * rename as shadowsocks-libev.\n\n -- Symeon Huang <hzwhuang@gmail.com>  Sat, 15 Nov 2014 14:55:28 +0000\n\nshadowsocks (1.5.3-1) unstable; urgency=low\n\n  * Fix log on Win32.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 14 Nov 2014 09:10:06 +0800\n\nshadowsocks (1.5.2-1) unstable; urgency=low\n\n  * Handle SIGTERM and SIGKILL nicely.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 12 Nov 2014 13:11:29 +0800\n\nshadowsocks (1.5.1-1) unstable; urgency=low\n\n  * Fix a bug of tcp fast open.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 08 Nov 2014 19:45:37 +0900\n\nshadowsocks (1.5.0-1) unstable; urgency=low\n\n  * Support to build static or shared library.\n  * Supprot IPv6 NAT in redirect mode.\n  * Refine the cache size of UDPRelay.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 07 Nov 2014 09:33:19 +0800\n\nshadowsocks (1.4.8-1) unstable; urgency=low\n\n  * Fix a bug of tcp fast open.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 08 Oct 2014 18:02:02 +0800\n\nshadowsocks (1.4.7-1) unstable; urgency=low\n\n  * Add a new encryptor rc4-md5.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 09 Sep 2014 07:50:10 +0800\n\nshadowsocks (1.4.6-1) unstable; urgency=low\n\n  * Add ACL support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 03 May 2014 04:37:10 -0400\n\nshadowsocks (1.4.5-1) unstable; urgency=high\n\n  * Fix the compatibility issue of udprelay.\n  * Enhance asyncns to reduce the latency.\n  * Add TCP_FASTOPEN support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 20 Apr 2014 08:12:45 +0800\n\nshadowsocks (1.4.4-1) unstable; urgency=low\n\n  * Add CommonCrypto support for darwin.\n  * Fix some config related issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 26 Mar 2014 13:29:03 +0800\n\nshadowsocks (1.4.3-1) unstable; urgency=low\n\n  * Add tunnel mode with local port forwarding feature.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 21 Feb 2014 11:52:13 +0900\n\nshadowsocks (1.4.2-1) unstable; urgency=high\n\n  * Fix the UDP relay issues.\n  * Add syslog support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 05 Jan 2014 10:05:29 +0900\n\nshadowsocks (1.4.1-1) unstable; urgency=low\n\n  * Add multi-port support.\n  * Add PolarSSL support by @linusyang.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 12 Nov 2013 03:57:21 +0000\n\nshadowsocks (1.4.0-1) unstable; urgency=low\n\n  * Add standard socks5 udp support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Sep 2013 02:20:40 +0000\n\nshadowsocks (1.3.3-1) unstable; urgency=high\n\n  * Provide more info in verbose mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 21 Jun 2013 09:59:20 +0800\n\nshadowsocks (1.3.2-1) unstable; urgency=high\n\n  * Fix some ciphers by @linusyang.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 09 Jun 2013 09:52:31 +0000\n\nshadowsocks (1.3.1-1) unstable; urgency=low\n\n  * Support more cihpers: camellia, idea, rc2 and seed.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 04 Jun 2013 00:56:17 +0000\n\nshadowsocks (1.3-1) unstable; urgency=low\n\n  * Able to bind connections to specific interface.\n  * Support more ciphers: aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb, cast5-cfb, des-cfb.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 16 May 2013 10:51:15 +0800\n\nshadowsocks (1.2-2) unstable; urgency=low\n\n  * Close timeouted TCP connections.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 07 May 2013 14:10:33 +0800\n\nshadowsocks (1.2-1) unstable; urgency=low\n\n  * Fix a high load issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 18 Apr 2013 10:52:34 +0800\n\nshadowsocks (1.1-1) unstable; urgency=low\n\n  * Fix a IPV6 resolve issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 10 Apr 2013 12:11:36 +0800\n\nshadowsocks (1.0-2) unstable; urgency=low\n\n  * Initial release.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 06 Apr 2013 16:59:15 +0800\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/INSTALL",
    "content": "Installation Instructions\n*************************\n\nCopyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,\n2006, 2007, 2008, 2009 Free Software Foundation, Inc.\n\n   Copying and distribution of this file, with or without modification,\nare permitted in any medium without royalty provided the copyright\nnotice and this notice are preserved.  This file is offered as-is,\nwithout warranty of any kind.\n\nBasic Installation\n==================\n\n   Briefly, the shell commands `./configure; make; make install' should\nconfigure, build, and install this package.  The following\nmore-detailed instructions are generic; see the `README' file for\ninstructions specific to this package.  Some packages provide this\n`INSTALL' file but do not implement all of the features documented\nbelow.  The lack of an optional feature in a given package is not\nnecessarily a bug.  More recommendations for GNU packages can be found\nin *note Makefile Conventions: (standards)Makefile Conventions.\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 need `configure.ac' if\nyou want to change it or regenerate `configure' using a newer version\nof `autoconf'.\n\n   The 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.\n\n     Running `configure' might take a while.  While running, it prints\n     some 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, generally using the just-built uninstalled binaries.\n\n  4. Type `make install' to install the programs and any data files and\n     documentation.  When installing into a prefix owned by root, it is\n     recommended that the package be configured and built as a regular\n     user, and only the `make install' phase executed with root\n     privileges.\n\n  5. Optionally, type `make installcheck' to repeat any self-tests, but\n     this time using the binaries in their final installed location.\n     This target does not install anything.  Running this target as a\n     regular user, particularly if the prior `make install' required\n     root privileges, verifies that the installation completed\n     correctly.\n\n  6. 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\n  7. Often, you can also type `make uninstall' to remove the installed\n     files again.  In practice, not all packages have tested that\n     uninstallation works correctly, even though it is required by the\n     GNU Coding Standards.\n\n  8. Some packages, particularly those that use Automake, provide `make\n     distcheck', which can by used by developers to test that all other\n     targets like `make install' and `make uninstall' work correctly.\n     This target is generally not run by end users.\n\nCompilers and Options\n=====================\n\n   Some systems require unusual options for compilation or linking that\nthe `configure' script does not know about.  Run `./configure --help'\nfor details 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=c99 CFLAGS=-g LIBS=-lposix\n\n   *Note Defining Variables::, for more details.\n\nCompiling For Multiple Architectures\n====================================\n\n   You 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 can use 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 `..'.  This\nis known as a \"VPATH\" build.\n\n   With a non-GNU `make', it is safer to compile the package for one\narchitecture at a time in the source code directory.  After you have\ninstalled the package for one architecture, use `make distclean' before\nreconfiguring for another architecture.\n\n   On MacOS X 10.5 and later systems, you can create libraries and\nexecutables that work on multiple system types--known as \"fat\" or\n\"universal\" binaries--by specifying multiple `-arch' options to the\ncompiler but only a single `-arch' option to the preprocessor.  Like\nthis:\n\n     ./configure CC=\"gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64\" \\\n                 CXX=\"g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64\" \\\n                 CPP=\"gcc -E\" CXXCPP=\"g++ -E\"\n\n   This is not guaranteed to produce working output in all cases, you\nmay have to build one architecture at a time and combine the results\nusing the `lipo' tool if you have problems.\n\nInstallation Names\n==================\n\n   By default, `make install' installs the package's commands under\n`/usr/local/bin', include files under `/usr/local/include', etc.  You\ncan specify an installation prefix other than `/usr/local' by giving\n`configure' the option `--prefix=PREFIX', where PREFIX must be an\nabsolute file name.\n\n   You can specify separate installation prefixes for\narchitecture-specific files and architecture-independent files.  If you\npass the option `--exec-prefix=PREFIX' to `configure', the package uses\nPREFIX as the prefix for installing programs and libraries.\nDocumentation and other data files 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.  In general, the\ndefault for these options is expressed in terms of `${prefix}', so that\nspecifying just `--prefix' will affect all of the other directory\nspecifications that were not explicitly provided.\n\n   The most portable way to affect installation locations is to pass the\ncorrect locations to `configure'; however, many packages provide one or\nboth of the following shortcuts of passing variable assignments to the\n`make install' command line to change installation locations without\nhaving to reconfigure or recompile.\n\n   The first method involves providing an override variable for each\naffected directory.  For example, `make install\nprefix=/alternate/directory' will choose an alternate location for all\ndirectory configuration variables that were expressed in terms of\n`${prefix}'.  Any directories that were specified during `configure',\nbut not in terms of `${prefix}', must each be overridden at install\ntime for the entire installation to be relocated.  The approach of\nmakefile variable overrides for each directory variable is required by\nthe GNU Coding Standards, and ideally causes no recompilation.\nHowever, some platforms have known limitations with the semantics of\nshared libraries that end up requiring recompilation when using this\nmethod, particularly noticeable in packages that use GNU Libtool.\n\n   The second method involves providing the `DESTDIR' variable.  For\nexample, `make install DESTDIR=/alternate/directory' will prepend\n`/alternate/directory' before all installation names.  The approach of\n`DESTDIR' overrides is not required by the GNU Coding Standards, and\ndoes not work on platforms that have drive letters.  On the other hand,\nit does better at avoiding recompilation issues, and works well even\nwhen some directory options were not specified in terms of `${prefix}'\nat `configure' time.\n\nOptional Features\n=================\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\n   Some 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\n   Some packages offer the ability to configure how verbose the\nexecution of `make' will be.  For these packages, running `./configure\n--enable-silent-rules' sets the default to minimal output, which can be\noverridden with `make V=1'; while running `./configure\n--disable-silent-rules' sets the default to verbose, which can be\noverridden with `make V=0'.\n\nParticular systems\n==================\n\n   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU\nCC is not installed, it is recommended to use the following options in\norder to use an ANSI C compiler:\n\n     ./configure CC=\"cc -Ae -D_XOPEN_SOURCE=500\"\n\nand if that doesn't work, install pre-built binaries of GCC for HP-UX.\n\n   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot\nparse its `<wchar.h>' header file.  The option `-nodtk' can be used as\na workaround.  If GNU CC is not installed, it is therefore recommended\nto try\n\n     ./configure CC=\"cc\"\n\nand if that doesn't work, try\n\n     ./configure CC=\"cc -nodtk\"\n\n   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This\ndirectory contains several dysfunctional programs; working variants of\nthese programs are available in `/usr/bin'.  So, if you need `/usr/ucb'\nin your `PATH', put it _after_ `/usr/bin'.\n\n   On Haiku, software installed for all users goes in `/boot/common',\nnot `/usr/local'.  It is recommended to use the following options:\n\n     ./configure --prefix=/boot/common\n\nSpecifying the System Type\n==========================\n\n   There may be some features `configure' cannot figure out\nautomatically, but needs to determine by the type of machine the package\nwill run on.  Usually, assuming the package is built to be run on the\n_same_ architectures, `configure' can figure that out, but if it prints\na message 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\n     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 option `--target=TYPE' 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\n   If you want to set default values for `configure' scripts to share,\nyou can create a site shell script called `config.site' that gives\ndefault values 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\n   Variables 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\ncauses the specified `gcc' to be used as the C compiler (unless it is\noverridden in the site shell script).\n\nUnfortunately, this technique does not work for `CONFIG_SHELL' due to\nan Autoconf bug.  Until the bug is fixed you can use this workaround:\n\n     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash\n\n`configure' Invocation\n======================\n\n   `configure' recognizes the following options to control how it\noperates.\n\n`--help'\n`-h'\n     Print a summary of all of the options to `configure', and exit.\n\n`--help=short'\n`--help=recursive'\n     Print a summary of the options unique to this package's\n     `configure', and exit.  The `short' variant lists options used\n     only in the top level, while the `recursive' variant lists options\n     also present in any nested packages.\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`--prefix=DIR'\n     Use DIR as the installation prefix.  *note Installation Names::\n     for more details, including other options available for fine-tuning\n     the installation locations.\n\n`--no-create'\n`-n'\n     Run the configure checks, but stop before creating any output\n     files.\n\n`configure' also accepts some other, not widely useful, options.  Run\n`configure --help' for more details.\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/LICENSE",
    "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"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/Makefile.am",
    "content": "if USE_SYSTEM_SHARED_LIB\nSUBDIRS = libcork libipset src\nelse\nSUBDIRS = libsodium libcork libipset libudns libev src\nendif\n\nif ENABLE_DOCUMENTATION\nSUBDIRS += doc\nendif\n\nACLOCAL_AMFLAGS = -I m4\n\npkgconfiglibdir = $(libdir)/pkgconfig\npkgconfiglib_DATA = shadowsocks-libev.pc\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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@\n@ENABLE_DOCUMENTATION_TRUE@am__append_1 = doc\nsubdir = .\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/configure $(am__configure_deps) \\\n\t$(srcdir)/config.h.in $(srcdir)/shadowsocks-libev.pc.in \\\n\tAUTHORS COPYING INSTALL auto/ar-lib auto/compile \\\n\tauto/config.guess auto/config.sub auto/depcomp auto/install-sh \\\n\tauto/missing auto/ltmain.sh $(top_srcdir)/auto/ar-lib \\\n\t$(top_srcdir)/auto/compile $(top_srcdir)/auto/config.guess \\\n\t$(top_srcdir)/auto/config.sub $(top_srcdir)/auto/install-sh \\\n\t$(top_srcdir)/auto/ltmain.sh $(top_srcdir)/auto/missing\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\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 config.status.lineno\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = config.h\nCONFIG_CLEAN_FILES = shadowsocks-libev.pc\nCONFIG_CLEAN_VPATH_FILES =\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nSOURCES =\nDIST_SOURCES =\nRECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \\\n\tctags-recursive dvi-recursive html-recursive info-recursive \\\n\tinstall-data-recursive install-dvi-recursive \\\n\tinstall-exec-recursive install-html-recursive \\\n\tinstall-info-recursive install-pdf-recursive \\\n\tinstall-ps-recursive install-recursive installcheck-recursive \\\n\tinstalldirs-recursive pdf-recursive ps-recursive \\\n\ttags-recursive uninstall-recursive\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__uninstall_files_from_dir = { \\\n  test -z \"$$files\" \\\n    || { test ! -d \"$$dir\" && test ! -f \"$$dir\" && test ! -r \"$$dir\"; } \\\n    || { echo \" ( cd '$$dir' && rm -f\" $$files \")\"; \\\n         $(am__cd) \"$$dir\" && rm -f $$files; }; \\\n  }\nam__installdirs = \"$(DESTDIR)$(pkgconfiglibdir)\"\nDATA = $(pkgconfiglib_DATA)\nRECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive\t\\\n  distclean-recursive maintainer-clean-recursive\nam__recursive_targets = \\\n  $(RECURSIVE_TARGETS) \\\n  $(RECURSIVE_CLEAN_TARGETS) \\\n  $(am__extra_recursive_targets)\nAM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \\\n\tcscope distdir dist dist-all distcheck\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \\\n\t$(LISP)config.h.in\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nCSCOPE = cscope\nDIST_SUBDIRS = libsodium libcork libipset libudns libev src doc\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\ndistdir = $(PACKAGE)-$(VERSION)\ntop_distdir = $(distdir)\nam__remove_distdir = \\\n  if test -d \"$(distdir)\"; then \\\n    find \"$(distdir)\" -type d ! -perm -200 -exec chmod u+w {} ';' \\\n      && rm -rf \"$(distdir)\" \\\n      || { sleep 5 && rm -rf \"$(distdir)\"; }; \\\n  else :; fi\nam__post_remove_distdir = $(am__remove_distdir)\nam__relativize = \\\n  dir0=`pwd`; \\\n  sed_first='s,^\\([^/]*\\)/.*$$,\\1,'; \\\n  sed_rest='s,^[^/]*/*,,'; \\\n  sed_last='s,^.*/\\([^/]*\\)$$,\\1,'; \\\n  sed_butlast='s,/*[^/]*$$,,'; \\\n  while test -n \"$$dir1\"; do \\\n    first=`echo \"$$dir1\" | sed -e \"$$sed_first\"`; \\\n    if test \"$$first\" != \".\"; then \\\n      if test \"$$first\" = \"..\"; then \\\n        dir2=`echo \"$$dir0\" | sed -e \"$$sed_last\"`/\"$$dir2\"; \\\n        dir0=`echo \"$$dir0\" | sed -e \"$$sed_butlast\"`; \\\n      else \\\n        first2=`echo \"$$dir2\" | sed -e \"$$sed_first\"`; \\\n        if test \"$$first2\" = \"$$first\"; then \\\n          dir2=`echo \"$$dir2\" | sed -e \"$$sed_rest\"`; \\\n        else \\\n          dir2=\"../$$dir2\"; \\\n        fi; \\\n        dir0=\"$$dir0\"/\"$$first\"; \\\n      fi; \\\n    fi; \\\n    dir1=`echo \"$$dir1\" | sed -e \"$$sed_rest\"`; \\\n  done; \\\n  reldir=\"$$dir2\"\nDIST_ARCHIVES = $(distdir).tar.gz\nGZIP_ENV = --best\nDIST_TARGETS = dist-gzip\ndistuninstallcheck_listfiles = find . -type f -print\nam__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \\\n  | sed 's|^\\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'\ndistcleancheck_listfiles = find . -type f -print\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\n@USE_SYSTEM_SHARED_LIB_FALSE@SUBDIRS = libsodium libcork libipset \\\n@USE_SYSTEM_SHARED_LIB_FALSE@\tlibudns libev src $(am__append_1)\n@USE_SYSTEM_SHARED_LIB_TRUE@SUBDIRS = libcork libipset src \\\n@USE_SYSTEM_SHARED_LIB_TRUE@\t$(am__append_1)\nACLOCAL_AMFLAGS = -I m4\npkgconfiglibdir = $(libdir)/pkgconfig\npkgconfiglib_DATA = shadowsocks-libev.pc\nall: config.h\n\t$(MAKE) $(AM_MAKEFLAGS) all-recursive\n\n.SUFFIXES:\nam--refresh: Makefile\n\t@:\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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) --foreign'; \\\n\t      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\t$(am__cd) $(srcdir) && $(AUTOCONF)\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\t$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)\n$(am__aclocal_m4_deps):\n\nconfig.h: stamp-h1\n\t@test -f $@ || rm -f stamp-h1\n\t@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1\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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) \n\t($(am__cd) $(top_srcdir) && $(AUTOHEADER))\n\trm -f stamp-h1\n\ttouch $@\n\ndistclean-hdr:\n\t-rm -f config.h stamp-h1\nshadowsocks-libev.pc: $(top_builddir)/config.status $(srcdir)/shadowsocks-libev.pc.in\n\tcd $(top_builddir) && $(SHELL) ./config.status $@\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\ndistclean-libtool:\n\t-rm -f libtool config.lt\ninstall-pkgconfiglibDATA: $(pkgconfiglib_DATA)\n\t@$(NORMAL_INSTALL)\n\t@list='$(pkgconfiglib_DATA)'; test -n \"$(pkgconfiglibdir)\" || list=; \\\n\tif test -n \"$$list\"; then \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(pkgconfiglibdir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(pkgconfiglibdir)\" || exit 1; \\\n\tfi; \\\n\tfor p in $$list; do \\\n\t  if test -f \"$$p\"; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; \\\n\tdone | $(am__base_list) | \\\n\twhile read files; do \\\n\t  echo \" $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfiglibdir)'\"; \\\n\t  $(INSTALL_DATA) $$files \"$(DESTDIR)$(pkgconfiglibdir)\" || exit $$?; \\\n\tdone\n\nuninstall-pkgconfiglibDATA:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(pkgconfiglib_DATA)'; test -n \"$(pkgconfiglibdir)\" || list=; \\\n\tfiles=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \\\n\tdir='$(DESTDIR)$(pkgconfiglibdir)'; $(am__uninstall_files_from_dir)\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$(am__recursive_targets):\n\t@fail=; \\\n\tif $(am__make_keepgoing); then \\\n\t  failcom='fail=yes'; \\\n\telse \\\n\t  failcom='exit 1'; \\\n\tfi; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tcase \"$@\" in \\\n\t  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \\\n\t  *) list='$(SUBDIRS)' ;; \\\n\tesac; \\\n\tfor 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  ($(am__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\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-recursive\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\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      set \"$$@\" \"$$include_option=$$here/$$subdir/TAGS\"; \\\n\t  fi; \\\n\tdone; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-recursive\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscope: cscope.files\n\ttest ! -s cscope.files \\\n\t  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)\nclean-cscope:\n\t-rm -f cscope.files\ncscope.files: clean-cscope cscopelist\ncscopelist: cscopelist-recursive\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\t-rm -f cscope.out cscope.in.out cscope.po.out cscope.files\n\ndistdir: $(DISTFILES)\n\t$(am__remove_distdir)\n\ttest -d \"$(distdir)\" || mkdir \"$(distdir)\"\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\tlist='$(DISTFILES)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    $(am__make_dryrun) \\\n\t      || test -d \"$(distdir)/$$subdir\" \\\n\t      || $(MKDIR_P) \"$(distdir)/$$subdir\" \\\n\t      || exit 1; \\\n\t    dir1=$$subdir; dir2=\"$(distdir)/$$subdir\"; \\\n\t    $(am__relativize); \\\n\t    new_distdir=$$reldir; \\\n\t    dir1=$$subdir; dir2=\"$(top_distdir)\"; \\\n\t    $(am__relativize); \\\n\t    new_top_distdir=$$reldir; \\\n\t    echo \" (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=\"$$new_top_distdir\" distdir=\"$$new_distdir\" \\\\\"; \\\n\t    echo \"     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)\"; \\\n\t    ($(am__cd) $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$new_top_distdir\" \\\n\t        distdir=\"$$new_distdir\" \\\n\t\tam__remove_distdir=: \\\n\t\tam__skip_length_check=: \\\n\t\tam__skip_mode_fix=: \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\n\t-test -n \"$(am__skip_mode_fix)\" \\\n\t|| find \"$(distdir)\" -type d ! -perm -755 \\\n\t\t-exec chmod u+rwx,go+rx {} \\; -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 $(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__post_remove_distdir)\n\ndist-bzip2: distdir\n\ttardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2\n\t$(am__post_remove_distdir)\n\ndist-lzip: distdir\n\ttardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz\n\t$(am__post_remove_distdir)\n\ndist-xz: distdir\n\ttardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz\n\t$(am__post_remove_distdir)\n\ndist-tarZ: distdir\n\t@echo WARNING: \"Support for shar distribution archives is\" \\\n\t               \"deprecated.\" >&2\n\t@echo WARNING: \"It will be removed altogether in Automake 2.0\" >&2\n\ttardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z\n\t$(am__post_remove_distdir)\n\ndist-shar: distdir\n\t@echo WARNING: \"Support for distribution archives compressed with\" \\\n\t\t       \"legacy program 'compress' is deprecated.\" >&2\n\t@echo WARNING: \"It will be removed altogether in Automake 2.0\" >&2\n\tshar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz\n\t$(am__post_remove_distdir)\n\ndist-zip: distdir\n\t-rm -f $(distdir).zip\n\tzip -rq $(distdir).zip $(distdir)\n\t$(am__post_remove_distdir)\n\ndist dist-all:\n\t$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'\n\t$(am__post_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) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\\\n\t*.tar.bz2*) \\\n\t  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\\\n\t*.tar.lz*) \\\n\t  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\\\n\t*.tar.xz*) \\\n\t  xz -dc $(distdir).tar.xz | $(am__untar) ;;\\\n\t*.tar.Z*) \\\n\t  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\\\n\t*.shar.gz*) \\\n\t  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\\\n\t*.zip*) \\\n\t  unzip $(distdir).zip ;;\\\n\tesac\n\tchmod -R a-w $(distdir)\n\tchmod u+w $(distdir)\n\tmkdir $(distdir)/_build $(distdir)/_inst\n\tchmod a-w $(distdir)\n\ttest -d $(distdir)/_build || exit 0; \\\n\tdc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\\\/]:[\\\\/],/,'` \\\n\t  && dc_destdir=\"$${TMPDIR-/tmp}/am-dc-$$$$/\" \\\n\t  && am__cwd=`pwd` \\\n\t  && $(am__cd) $(distdir)/_build \\\n\t  && ../configure \\\n\t    $(AM_DISTCHECK_CONFIGURE_FLAGS) \\\n\t    $(DISTCHECK_CONFIGURE_FLAGS) \\\n\t    --srcdir=.. --prefix=\"$$dc_install_base\" \\\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  && cd \"$$am__cwd\" \\\n\t  || exit 1\n\t$(am__post_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 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'\ndistuninstallcheck:\n\t@test -n '$(distuninstallcheck_dir)' || { \\\n\t  echo 'ERROR: trying to run $@ with an empty' \\\n\t       '$$(distuninstallcheck_dir)' >&2; \\\n\t  exit 1; \\\n\t}; \\\n\t$(am__cd) '$(distuninstallcheck_dir)' || { \\\n\t  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \\\n\t  exit 1; \\\n\t}; \\\n\ttest `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \\\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\ncheck: check-recursive\nall-am: Makefile $(DATA) config.h\ninstalldirs: installdirs-recursive\ninstalldirs-am:\n\tfor dir in \"$(DESTDIR)$(pkgconfiglibdir)\"; 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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-recursive\n\nclean-am: clean-generic clean-libtool mostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -f $(am__CONFIG_DISTCLEAN_FILES)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-hdr \\\n\tdistclean-libtool distclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\nhtml: html-recursive\n\nhtml-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am: install-pkgconfiglibDATA\n\ninstall-dvi: install-dvi-recursive\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-recursive\n\ninstall-html-am:\n\ninstall-info: install-info-recursive\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-recursive\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-recursive\n\ninstall-ps-am:\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 -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-recursive\n\nmostlyclean-am: mostlyclean-generic mostlyclean-libtool\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am: uninstall-pkgconfiglibDATA\n\n.MAKE: $(am__recursive_targets) all install-am install-strip\n\n.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \\\n\tam--refresh check check-am clean clean-cscope clean-generic \\\n\tclean-libtool cscope cscopelist-am ctags ctags-am dist \\\n\tdist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \\\n\tdist-xz dist-zip distcheck distclean distclean-generic \\\n\tdistclean-hdr distclean-libtool distclean-tags distcleancheck \\\n\tdistdir distuninstallcheck dvi dvi-am html html-am info \\\n\tinfo-am install install-am install-data install-data-am \\\n\tinstall-dvi install-dvi-am install-exec install-exec-am \\\n\tinstall-html install-html-am install-info install-info-am \\\n\tinstall-man install-pdf install-pdf-am \\\n\tinstall-pkgconfiglibDATA install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tinstalldirs-am maintainer-clean maintainer-clean-generic \\\n\tmostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \\\n\tps ps-am tags tags-am uninstall uninstall-am \\\n\tuninstall-pkgconfiglibDATA\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/README.md",
    "content": "# shadowsocks-libev\n\n## Intro\n\n[Shadowsocks-libev](http://shadowsocks.org) is a lightweight secured SOCKS5\nproxy for embedded devices and low-end boxes.\n\nIt is a port of [Shadowsocks](https://github.com/shadowsocks/shadowsocks)\ncreated by [@clowwindy](https://github.com/clowwindy), which is maintained by\n[@madeye](https://github.com/madeye) and [@linusyang](https://github.com/linusyang).\n\nCurrent version: 2.4.8 | [Changelog](debian/changelog)\n\nTravis CI: [![Travis CI](https://travis-ci.org/shadowsocks/shadowsocks-libev.svg?branch=master)](https://travis-ci.org/shadowsocks/shadowsocks-libev)\n\n## Features\n\nShadowsocks-libev is written in pure C and only depends on\n[libev](http://software.schmorp.de/pkg/libev.html) and\n[OpenSSL](http://www.openssl.org/) or [mbedTLS](https://tls.mbed.org/) or [PolarSSL](https://polarssl.org/).\n\nIn normal usage, the memory footprint is about 600KB and the CPU utilization is\nno more than 5% on a low-end router (Buffalo WHR-G300N V2 with a 400MHz MIPS CPU,\n32MB memory and 4MB flash).\n\nFor a full list of feature comparison between different versions of shadowsocks,\nrefer to the [Wiki page](https://github.com/shadowsocks/shadowsocks/wiki/Feature-Comparison-across-Different-Versions).\n\n## Installation\n\n### Distribution-specific guide\n\n- [Debian & Ubuntu](#debian--ubuntu)\n    + [Install from repository](#install-from-repository)\n    + [Build deb package from source](#build-deb-package-from-source)\n    + [Configure and start the service](#configure-and-start-the-service)\n- [Fedora & RHEL](#fedora--rhel)\n    + [Install from repository](#install-from-repository-1)\n- [OpenSUSE](#opensuse)\n    + [Install from repository](#install-from-repository-2)\n    + [Build from source](#build-from-source)\n- [Archlinux](#archlinux)\n- [NixOS](#nixos)\n- [Nix](#nix)\n- [Directly build and install on UNIX-like system](#linux)\n- [FreeBSD](#freebsd)\n- [OpenWRT](#openwrt)\n- [OS X](#os-x)\n- [Windows](#windows)\n\n* * *\n\n### Pre-build configure guide\n\nFor a complete list of avaliable configure-time option,\ntry `configure --help`.\n\n#### Using alternative crypto library\n\nThere are three crypto libraries available:\n\n- OpenSSL (**default**)\n- mbedTLS\n- PolarSSL (Deprecated)\n\n##### mbedTLS\nTo build against mbedTLS, specify `--with-crypto-library=mbedtls`\nand `--with-mbedtls=/path/to/mbedtls` when running `./configure`.\n\nWindows users will need extra work when compiling mbedTLS library,\nsee [this issue](https://github.com/shadowsocks/shadowsocks-libev/issues/422) for detail info.\n\n##### PolarSSL (Deprecated)\n\nTo build against PolarSSL, specify `--with-crypto-library=polarssl`\nand `--with-polarssl=/path/to/polarssl` when running `./configure`.\n\n* PolarSSL __1.2.5 or newer__ is required. Currently, PolarSSL does __NOT__ support\nCAST5-CFB, DES-CFB, IDEA-CFB, RC2-CFB and SEED-CFB.\n* RC4 is only support by PolarSSL __1.3.0 or above__.\n\n#### Using shared library from system\n\nPlease specify `--enable-system-shared-lib`. This will replace the bundled\n`libev`, `libsodium` and `libudns` with the corresponding libraries installed\nin the system during compilation and linking.\n\n### Debian & Ubuntu\n\n#### Install from repository\n\n**Note: The repositories doesn't always contain the latest version. Please build from source if you want the latest version (see below)**\n\nUsing official repository for Debian unstable:\n\n```bash\nsudo apt update\nsudo apt install shadowsocks-libev\n```\n\n#### Build deb package from source\n\nSupported Platforms:\n\n* Debian 7 (see below), 8, unstable\n* Ubuntu 14.04 (see below), Ubuntu 14.10, 15.04, 15.10 or higher\n\n**Note for Ubuntu 14.04 users**:\nPackages built on Ubuntu 14.04 may be used in later Ubuntu versions. However,\npackages built on Debian 7/8/9 or Ubuntu 14.10+ **cannot** be installed on\nUbuntu 14.04.\n\n**Note for Debian 7.x users**:\nTo build packages on Debian 7 (Wheezy), you need to enable `debian-backports`\nto install systemd-compatibility packages like `dh-systemd` or `init-system-helpers`.\nPlease follow the instructions on [Debian Backports](http://backports.debian.org).\n\nThis also means that you can only install those built packages on systems that have\n`init-system-helpers` installed.\n\nOtherwise, try to build and install directly from source. See the [Linux](#linux)\nsection below.\n\n``` bash\ncd shadowsocks-libev\nsudo apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev \\\n    gawk debhelper dh-systemd init-system-helpers pkg-config asciidoc xmlto\ndpkg-buildpackage -b -us -uc -i\ncd ..\nsudo dpkg -i shadowsocks-libev*.deb\n```\n\n#### Configure and start the service\n\n```\n# Edit the configuration file\nsudo vim /etc/shadowsocks-libev/config.json\n\n# Edit the default configuration for debian\nsudo vim /etc/default/shadowsocks-libev\n\n# Start the service\nsudo /etc/init.d/shadowsocks-libev start    # for sysvinit, or\nsudo systemctl start shadowsocks-libev      # for systemd\n```\n\n### Fedora & RHEL\n\nSupported distributions include\n- Fedora 22, 23, 24\n- RHEL 6, 7 and derivatives (including CentOS, Scientific Linux)\n\n#### Install from repository\n\nEnable repo via `dnf`:\n\n```\nsu -c 'dnf copr enable librehat/shadowsocks'\n```\n\nOr download yum repo on [Fedora Copr](https://copr.fedoraproject.org/coprs/librehat/shadowsocks/) and put it inside `/etc/yum.repos.d/`. The release `Epel` is for RHEL and its derivatives.\n\nThen, install `shadowsocks-libev` via `dnf`:\n\n```bash\nsu -c 'dnf update'\nsu -c 'dnf install shadowsocks-libev'\n```\n\nor `yum`:\n\n```bash\nsu -c 'yum update'\nsu -c 'yum install shadowsocks-libev'\n```\n### OpenSUSE\n\n#### Install from repository\nUse the following command to install from repository.\n\n```bash\nsudo zypper install shadowsocks-libev\n```\n\n#### Build from source\nYou should install `zlib-devel` and `libopenssl-devel` first.\n\n```bash\nsudo zypper update\nsudo zypper install zlib-devel libopenssl-devel\n```\n\nThen download the source package and compile.\n\n```bash\ngit clone https://github.com/shadowsocks/shadowsocks-libev.git\ncd shadowsocks-libev\n./configure && make\nsudo make install\n```\n\n### Archlinux\n\n```bash\nsudo pacman -S shadowsocks-libev\n```\n\nPlease refer to downstream [PKGBUILD](https://projects.archlinux.org/svntogit/community.git/tree/trunk?h=packages/shadowsocks-libev)\nscript for extra modifications and distribution-specific bugs.\n\n### NixOS\n\n```bash\nnix-env -iA nixos.shadowsocks-libev\n```\n\n### Nix\n\n```bash\nnix-env -iA nixpkgs.shadowsocks-libev\n```\n\n### Linux\n\nFor Unix-like systems, especially Debian-based systems,\ne.g. Ubuntu, Debian or Linux Mint, you can build the binary like this:\n\n```bash\nsudo apt-get install --no-install-recommends build-essential autoconf libtool libssl-dev asciidoc xmlto\n./configure && make\nsudo make install\n```\n\n### FreeBSD\n\n```bash\nsu\ncd /usr/ports/net/shadowsocks-libev\nmake install\n```\n\nEdit your config.json file. By default, it's located in /usr/local/etc/shadowsocks-libev.\n\nTo enable shadowsocks-libev, add the following rc variable to your /etc/rc.conf file:\n\n```\nshadowsocks_libev_enable=\"YES\"\n```\n\nStart the Shadowsocks server:\n\n```bash\nservice shadowsocks_libev start\n```\n\n### OpenWRT\n\n**Note**: You may want to use [openwrt-shadowsocks](https://github.com/shadowsocks/openwrt-shadowsocks)\n, which is developed specifically for OpenWRT.\n\n```bash\n# At OpenWRT build root\npushd package\ngit clone https://github.com/shadowsocks/shadowsocks-libev.git\npopd\n\n# Enable shadowsocks-libev in network category\nmake menuconfig\n\n# Optional\nmake -j\n\n# Build the package\nmake V=99 package/shadowsocks-libev/openwrt/compile\n```\n\n### OS X\nFor OS X, use [Homebrew](http://brew.sh) to install or build.\n\nInstall Homebrew:\n\n```bash\nruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n```\nInstall shadowsocks-libev:\n\n```bash\nbrew install shadowsocks-libev\n```\n\n### Windows\n\nFor Windows, use either MinGW (msys) or Cygwin to build.\nAt the moment, only `ss-local` is supported to build against MinGW (msys).\n\nIf you are using MinGW (msys), please download OpenSSL or PolarSSL source tarball\nto the home directory of msys, and build it like this (may take a few minutes):\n\n#### OpenSSL\n\n```bash\ntar zxf openssl-1.0.1e.tar.gz\ncd openssl-1.0.1e\n./config --prefix=\"$HOME/prebuilt\" --openssldir=\"$HOME/prebuilt/openssl\"\nmake && make install\n```\n\n#### PolarSSL\n\n```bash\ntar zxf polarssl-1.3.2-gpl.tgz\ncd polarssl-1.3.2\nmake lib WINDOWS=1\nmake install DESTDIR=\"$HOME/prebuilt\"\n```\n\nThen, build the binary using the commands below, and all `.exe` files\nwill be built at `$HOME/ss/bin`:\n\n#### OpenSSL\n\n```bash\n./configure --prefix=\"$HOME/ss\" --with-openssl=\"$HOME/prebuilt\"\nmake && make install\n```\n\n#### PolarSSL\n\n```bash\n./configure --prefix=\"$HOME/ss\" --with-crypto-library=polarssl --with-polarssl=$HOME/prebuilt\nmake && make install\n```\n\n## Usage\n\nFor a detailed and complete list of all supported arguments, you may refer to the\nman pages of the applications, respectively.\n\n```\n    ss-[local|redir|server|tunnel]\n\n       -s <server_host>           host name or ip address of your remote server\n\n       -p <server_port>           port number of your remote server\n\n       -l <local_port>            port number of your local server\n\n       -k <password>              password of your remote server\n\n       [-m <encrypt_method>]      encrypt method: table, rc4, rc4-md5,\n                                  aes-128-cfb, aes-192-cfb, aes-256-cfb,\n                                  bf-cfb, camellia-128-cfb, camellia-192-cfb,\n                                  camellia-256-cfb, cast5-cfb, des-cfb, idea-cfb,\n                                  rc2-cfb, seed-cfb, salsa20 ,chacha20 and\n                                  chacha20-ietf\n\n       [-f <pid_file>]            the file path to store pid\n\n       [-t <timeout>]             socket timeout in seconds\n\n       [-c <config_file>]         the path to config file\n\n       [-i <interface>]           network interface to bind,\n                                  not available in redir mode\n\n       [-b <local_address>]       local address to bind,\n                                  not available in server mode\n\n       [-u]                       enable udprelay mode,\n                                  TPROXY is required in redir mode\n\n       [-U]                       enable UDP relay and disable TCP relay,\n                                  not available in local mode\n\n       [-A]                       enable onetime authentication\n\n       [-L <addr>:<port>]         specify destination server address and port\n                                  for local port forwarding,\n                                  only available in tunnel mode\n\n       [-d <addr>]                setup name servers for internal DNS resolver,\n                                  only available in server mode\n\n       [--fast-open]              enable TCP fast open,\n                                  only available in local and server mode,\n                                  with Linux kernel > 3.7.0\n\n       [--acl <acl_file>]         config file of ACL (Access Control List)\n                                  only available in local and server mode\n\n       [--manager-address <addr>] UNIX domain socket address\n                                  only available in server and manager mode\n\n       [--executable <path>]      path to the executable of ss-server\n                                  only available in manager mode\n\n       [-v]                       verbose mode\n\nnotes:\n\n    ss-redir provides a transparent proxy function and only works on the\n    Linux platform with iptables.\n\n```\n\n## Advanced usage\n\nThe latest shadowsocks-libev has provided a *redir* mode. You can configure your Linux-based box or router to proxy all TCP traffic transparently.\n\n    # Create new chain\n    root@Wrt:~# iptables -t nat -N SHADOWSOCKS\n    root@Wrt:~# iptables -t mangle -N SHADOWSOCKS\n\n    # Ignore your shadowsocks server's addresses\n    # It's very IMPORTANT, just be careful.\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN\n\n    # Ignore LANs and any other addresses you'd like to bypass the proxy\n    # See Wikipedia and RFC5735 for full list of reserved networks.\n    # See ashi009/bestroutetb for a highly optimized CHN route list.\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN\n\n    # Anything else should be redirected to shadowsocks's local port\n    root@Wrt:~# iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345\n\n    # Add any UDP rules\n    root@Wrt:~# ip rule add fwmark 0x01/0x01 table 100\n    root@Wrt:~# ip route add local 0.0.0.0/0 dev lo table 100\n    root@Wrt:~# iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01\n\n    # Apply the rules\n    root@Wrt:~# iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS\n    root@Wrt:~# iptables -t mangle -A PREROUTING -j SHADOWSOCKS\n\n    # Start the shadowsocks-redir\n    root@Wrt:~# ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid\n\n## Shadowsocks over KCP\n\nIt's quite easy to use shadowsocks and [KCP](https://github.com/skywind3000/kcp) together with [kcptun](https://github.com/xtaci/kcptun).\n\nThe goal of shadowsocks over KCP is to provide a fully configurable, UDP based protocol to improve poor connections, e.g. a high packet loss 3G network.\n\n### Setup your server\n\n```bash\nserver_linux_amd64 -l :21 -t 127.0.0.1:443 --crypt none --mtu 1200 --nocomp --mode normal --dscp 46 &\nss-server -s 0.0.0.0 -p 443 -k passwd -m chacha20 -u\n```\n\n### Setup your client\n\n```bash\nclient_linux_amd64 -l 127.0.0.1:1090 -r <server_ip>:21 --crypt none --mtu 1200 --nocomp --mode normal --dscp 46 &\nss-local -s 127.0.0.1 -p 1090 -k passwd -m chacha20 -l 1080 -b 0.0.0.0 &\nss-local -s <server_ip> -p 443 -k passwd -m chacha20 -l 1080 -U -b 0.0.0.0\n```\n\n## Security Tips\n\nAlthough shadowsocks-libev can handle thousands of concurrent connections nicely, we still recommend\nsetting up your server's firewall rules to limit connections from each user:\n\n    # Up to 32 connections are enough for normal usage\n    iptables -A INPUT -p tcp --syn --dport ${SHADOWSOCKS_PORT} -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset\n\n## License\n\nCopyright (C) 2016 Max Lv <max.c.lv@gmail.com>\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 3 of the License, or\n(at your option) any 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\nalong with this program. If not, see <http://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/acl/chn.acl",
    "content": "1.0.1.0/24\n1.0.2.0/23\n1.0.8.0/21\n1.0.32.0/19\n1.1.0.0/24\n1.1.2.0/23\n1.1.4.0/22\n1.1.8.0/21\n1.1.16.0/20\n1.1.32.0/19\n1.2.0.0/23\n1.2.2.0/24\n1.2.4.0/24\n1.2.5.0/24\n1.2.6.0/23\n1.2.8.0/24\n1.2.9.0/24\n1.2.10.0/23\n1.2.12.0/22\n1.2.16.0/20\n1.2.32.0/19\n1.2.64.0/18\n1.3.0.0/16\n1.4.1.0/24\n1.4.2.0/23\n1.4.4.0/24\n1.4.5.0/24\n1.4.6.0/23\n1.4.8.0/21\n1.4.16.0/20\n1.4.32.0/19\n1.4.64.0/18\n1.8.0.0/16\n1.10.0.0/21\n1.10.8.0/23\n1.10.11.0/24\n1.10.12.0/22\n1.10.16.0/20\n1.10.32.0/19\n1.10.64.0/18\n1.12.0.0/14\n1.24.0.0/13\n1.45.0.0/16\n1.48.0.0/15\n1.50.0.0/16\n1.51.0.0/16\n1.56.0.0/13\n1.68.0.0/14\n1.80.0.0/13\n1.88.0.0/14\n1.92.0.0/15\n1.94.0.0/15\n1.116.0.0/14\n1.180.0.0/14\n1.184.0.0/15\n1.188.0.0/14\n1.192.0.0/13\n1.202.0.0/15\n1.204.0.0/14\n14.0.0.0/21\n14.0.12.0/22\n14.1.0.0/22\n14.16.0.0/12\n14.102.128.0/22\n14.102.156.0/22\n14.103.0.0/16\n14.104.0.0/13\n14.112.0.0/12\n14.130.0.0/15\n14.134.0.0/15\n14.144.0.0/12\n14.192.60.0/22\n14.192.76.0/22\n14.196.0.0/15\n14.204.0.0/15\n14.208.0.0/12\n27.8.0.0/13\n27.16.0.0/12\n27.34.232.0/21\n27.36.0.0/14\n27.40.0.0/13\n27.50.40.0/21\n27.50.128.0/17\n27.54.72.0/21\n27.54.152.0/21\n27.54.192.0/18\n27.98.208.0/20\n27.98.224.0/19\n27.99.128.0/17\n27.103.0.0/16\n27.106.128.0/18\n27.106.204.0/22\n27.109.32.0/19\n27.112.0.0/18\n27.112.80.0/20\n27.113.128.0/18\n27.115.0.0/17\n27.116.44.0/22\n27.121.72.0/21\n27.121.120.0/21\n27.128.0.0/15\n27.131.220.0/22\n27.144.0.0/16\n27.148.0.0/14\n27.152.0.0/13\n27.184.0.0/13\n27.192.0.0/11\n27.224.0.0/14\n36.0.0.0/22\n36.0.8.0/21\n36.0.16.0/20\n36.0.32.0/19\n36.0.64.0/18\n36.0.128.0/17\n36.1.0.0/16\n36.4.0.0/14\n36.16.0.0/12\n36.32.0.0/14\n36.36.0.0/16\n36.37.0.0/19\n36.37.36.0/23\n36.37.39.0/24\n36.37.40.0/21\n36.37.48.0/20\n36.40.0.0/13\n36.48.0.0/15\n36.51.0.0/16\n36.56.0.0/13\n36.96.0.0/11\n36.128.0.0/10\n36.192.0.0/11\n36.248.0.0/14\n36.254.0.0/16\n39.0.0.0/24\n39.0.2.0/23\n39.0.4.0/22\n39.0.8.0/21\n39.0.16.0/20\n39.0.32.0/19\n39.0.64.0/18\n39.0.128.0/17\n39.64.0.0/11\n39.128.0.0/10\n42.0.0.0/22\n42.0.8.0/21\n42.0.16.0/21\n42.0.24.0/22\n42.0.32.0/19\n42.0.128.0/17\n42.1.0.0/19\n42.1.32.0/20\n42.1.48.0/21\n42.1.56.0/22\n42.1.128.0/17\n42.4.0.0/14\n42.48.0.0/15\n42.50.0.0/16\n42.51.0.0/16\n42.52.0.0/14\n42.56.0.0/14\n42.62.0.0/17\n42.62.128.0/19\n42.62.160.0/20\n42.62.180.0/22\n42.62.184.0/21\n42.63.0.0/16\n42.80.0.0/15\n42.83.64.0/20\n42.83.80.0/22\n42.83.88.0/21\n42.83.96.0/19\n42.83.128.0/17\n42.84.0.0/14\n42.88.0.0/13\n42.96.64.0/19\n42.96.96.0/21\n42.96.108.0/22\n42.96.112.0/20\n42.96.128.0/17\n42.97.0.0/16\n42.99.0.0/18\n42.99.64.0/19\n42.99.96.0/20\n42.99.112.0/22\n42.99.120.0/21\n42.100.0.0/14\n42.120.0.0/15\n42.122.0.0/16\n42.123.0.0/19\n42.123.36.0/22\n42.123.40.0/21\n42.123.48.0/20\n42.123.64.0/18\n42.123.128.0/17\n42.128.0.0/12\n42.156.0.0/19\n42.156.36.0/22\n42.156.40.0/21\n42.156.48.0/20\n42.156.64.0/18\n42.156.128.0/17\n42.157.0.0/16\n42.158.0.0/15\n42.160.0.0/12\n42.176.0.0/13\n42.184.0.0/15\n42.186.0.0/16\n42.187.0.0/18\n42.187.64.0/19\n42.187.96.0/20\n42.187.112.0/21\n42.187.120.0/22\n42.187.128.0/17\n42.192.0.0/15\n42.194.0.0/21\n42.194.8.0/22\n42.194.12.0/22\n42.194.16.0/20\n42.194.32.0/19\n42.194.64.0/18\n42.194.128.0/17\n42.195.0.0/16\n42.196.0.0/14\n42.201.0.0/17\n42.202.0.0/15\n42.204.0.0/14\n42.208.0.0/12\n42.224.0.0/12\n42.240.0.0/17\n42.240.128.0/17\n42.242.0.0/15\n42.244.0.0/14\n42.248.0.0/13\n49.4.0.0/14\n49.51.0.0/16\n49.52.0.0/14\n49.64.0.0/11\n49.112.0.0/13\n49.120.0.0/14\n49.128.0.0/24\n49.128.2.0/23\n49.140.0.0/15\n49.152.0.0/14\n49.208.0.0/15\n49.210.0.0/15\n49.220.0.0/14\n49.232.0.0/14\n49.239.0.0/18\n49.239.192.0/18\n49.246.224.0/19\n54.222.0.0/15\n58.14.0.0/15\n58.16.0.0/16\n58.17.0.0/17\n58.17.128.0/17\n58.18.0.0/16\n58.19.0.0/16\n58.20.0.0/16\n58.21.0.0/16\n58.22.0.0/15\n58.24.0.0/15\n58.30.0.0/15\n58.32.0.0/13\n58.40.0.0/15\n58.42.0.0/16\n58.43.0.0/16\n58.44.0.0/14\n58.48.0.0/13\n58.56.0.0/15\n58.58.0.0/16\n58.59.0.0/17\n58.59.128.0/17\n58.60.0.0/14\n58.65.232.0/21\n58.66.0.0/15\n58.68.128.0/17\n58.82.0.0/17\n58.83.0.0/17\n58.83.128.0/17\n58.87.64.0/18\n58.99.128.0/17\n58.100.0.0/15\n58.116.0.0/14\n58.128.0.0/13\n58.144.0.0/16\n58.154.0.0/15\n58.192.0.0/15\n58.194.0.0/15\n58.196.0.0/15\n58.198.0.0/15\n58.200.0.0/13\n58.208.0.0/12\n58.240.0.0/15\n58.242.0.0/15\n58.244.0.0/15\n58.246.0.0/15\n58.248.0.0/13\n59.32.0.0/13\n59.40.0.0/15\n59.42.0.0/16\n59.43.0.0/16\n59.44.0.0/14\n59.48.0.0/16\n59.49.0.0/17\n59.49.128.0/17\n59.50.0.0/16\n59.51.0.0/17\n59.51.128.0/17\n59.52.0.0/14\n59.56.0.0/14\n59.60.0.0/15\n59.62.0.0/15\n59.64.0.0/14\n59.68.0.0/14\n59.72.0.0/15\n59.74.0.0/15\n59.76.0.0/16\n59.77.0.0/16\n59.78.0.0/15\n59.80.0.0/14\n59.107.0.0/17\n59.107.128.0/17\n59.108.0.0/15\n59.110.0.0/15\n59.151.0.0/17\n59.155.0.0/16\n59.172.0.0/15\n59.174.0.0/15\n59.191.0.0/17\n59.191.240.0/20\n59.192.0.0/10\n60.0.0.0/13\n60.8.0.0/15\n60.10.0.0/16\n60.11.0.0/16\n60.12.0.0/16\n60.13.0.0/18\n60.13.64.0/18\n60.13.128.0/17\n60.14.0.0/15\n60.16.0.0/13\n60.24.0.0/14\n60.28.0.0/15\n60.30.0.0/16\n60.31.0.0/16\n60.55.0.0/16\n60.63.0.0/16\n60.160.0.0/15\n60.162.0.0/15\n60.164.0.0/15\n60.166.0.0/15\n60.168.0.0/13\n60.176.0.0/12\n60.194.0.0/15\n60.200.0.0/14\n60.204.0.0/16\n60.205.0.0/16\n60.206.0.0/15\n60.208.0.0/13\n60.216.0.0/15\n60.218.0.0/15\n60.220.0.0/14\n60.232.0.0/15\n60.235.0.0/16\n60.245.128.0/17\n60.247.0.0/16\n60.252.0.0/16\n60.253.128.0/17\n60.255.0.0/16\n61.4.80.0/22\n61.4.84.0/22\n61.4.88.0/21\n61.4.176.0/20\n61.8.160.0/20\n61.28.0.0/20\n61.28.16.0/20\n61.28.32.0/19\n61.28.64.0/18\n61.29.128.0/18\n61.29.192.0/19\n61.29.224.0/20\n61.29.240.0/20\n61.45.128.0/18\n61.45.224.0/20\n61.47.128.0/18\n61.48.0.0/14\n61.52.0.0/15\n61.54.0.0/16\n61.55.0.0/16\n61.87.192.0/18\n61.128.0.0/15\n61.130.0.0/15\n61.132.0.0/16\n61.133.0.0/17\n61.133.128.0/17\n61.134.0.0/18\n61.134.64.0/19\n61.134.96.0/19\n61.134.128.0/18\n61.134.192.0/18\n61.135.0.0/16\n61.136.0.0/18\n61.136.64.0/18\n61.136.128.0/17\n61.137.0.0/17\n61.137.128.0/17\n61.138.0.0/18\n61.138.64.0/18\n61.138.128.0/18\n61.138.192.0/18\n61.139.0.0/17\n61.139.128.0/18\n61.139.192.0/18\n61.140.0.0/14\n61.144.0.0/14\n61.148.0.0/15\n61.150.0.0/15\n61.152.0.0/16\n61.153.0.0/16\n61.154.0.0/15\n61.156.0.0/16\n61.157.0.0/16\n61.158.0.0/17\n61.158.128.0/17\n61.159.0.0/18\n61.159.64.0/18\n61.159.128.0/17\n61.160.0.0/16\n61.161.0.0/18\n61.161.64.0/18\n61.161.128.0/17\n61.162.0.0/16\n61.163.0.0/16\n61.164.0.0/16\n61.165.0.0/16\n61.166.0.0/16\n61.167.0.0/16\n61.168.0.0/16\n61.169.0.0/16\n61.170.0.0/15\n61.172.0.0/14\n61.176.0.0/16\n61.177.0.0/16\n61.178.0.0/16\n61.179.0.0/16\n61.180.0.0/17\n61.180.128.0/17\n61.181.0.0/16\n61.182.0.0/16\n61.183.0.0/16\n61.184.0.0/14\n61.188.0.0/16\n61.189.0.0/17\n61.189.128.0/17\n61.190.0.0/15\n61.232.0.0/14\n61.236.0.0/15\n61.240.0.0/14\n101.0.0.0/22\n101.1.0.0/22\n101.2.172.0/22\n101.4.0.0/14\n101.16.0.0/12\n101.32.0.0/12\n101.48.0.0/15\n101.50.56.0/22\n101.52.0.0/16\n101.53.100.0/22\n101.54.0.0/16\n101.55.224.0/21\n101.64.0.0/13\n101.72.0.0/14\n101.76.0.0/15\n101.78.0.0/22\n101.78.32.0/19\n101.80.0.0/12\n101.96.0.0/21\n101.96.8.0/22\n101.96.16.0/20\n101.96.128.0/17\n101.99.96.0/19\n101.101.64.0/19\n101.101.100.0/24\n101.101.102.0/23\n101.101.104.0/21\n101.101.112.0/20\n101.102.64.0/19\n101.102.100.0/23\n101.102.102.0/24\n101.102.104.0/21\n101.102.112.0/20\n101.104.0.0/14\n101.110.64.0/19\n101.110.96.0/20\n101.110.116.0/22\n101.110.120.0/21\n101.120.0.0/14\n101.124.0.0/15\n101.126.0.0/16\n101.128.0.0/22\n101.128.8.0/21\n101.128.16.0/20\n101.128.32.0/19\n101.129.0.0/16\n101.130.0.0/15\n101.132.0.0/14\n101.144.0.0/12\n101.192.0.0/14\n101.196.0.0/14\n101.200.0.0/15\n101.203.128.0/19\n101.203.160.0/21\n101.203.172.0/22\n101.203.176.0/20\n101.204.0.0/14\n101.224.0.0/13\n101.232.0.0/15\n101.234.64.0/21\n101.234.76.0/22\n101.234.80.0/20\n101.234.96.0/19\n101.236.0.0/14\n101.240.0.0/14\n101.244.0.0/14\n101.248.0.0/15\n101.251.0.0/22\n101.251.8.0/21\n101.251.16.0/20\n101.251.32.0/19\n101.251.64.0/18\n101.251.128.0/17\n101.252.0.0/15\n101.254.0.0/16\n103.1.8.0/22\n103.1.20.0/22\n103.1.24.0/22\n103.1.72.0/22\n103.1.88.0/22\n103.1.168.0/22\n103.2.108.0/22\n103.2.156.0/22\n103.2.164.0/22\n103.2.200.0/22\n103.2.204.0/22\n103.2.208.0/22\n103.2.212.0/22\n103.3.84.0/22\n103.3.88.0/22\n103.3.92.0/22\n103.3.96.0/22\n103.3.100.0/22\n103.3.104.0/22\n103.3.108.0/22\n103.3.112.0/22\n103.3.116.0/22\n103.3.120.0/22\n103.3.124.0/22\n103.3.128.0/22\n103.3.132.0/22\n103.3.136.0/22\n103.3.140.0/22\n103.3.148.0/22\n103.3.152.0/22\n103.3.156.0/22\n103.4.56.0/22\n103.4.168.0/22\n103.4.184.0/22\n103.5.36.0/22\n103.5.52.0/22\n103.5.56.0/22\n103.5.252.0/22\n103.6.76.0/22\n103.6.220.0/22\n103.7.4.0/22\n103.7.28.0/22\n103.7.212.0/22\n103.7.216.0/22\n103.7.220.0/22\n103.8.4.0/22\n103.8.8.0/22\n103.8.32.0/22\n103.8.52.0/22\n103.8.108.0/22\n103.8.156.0/22\n103.8.200.0/22\n103.8.204.0/22\n103.8.220.0/22\n103.9.152.0/22\n103.9.248.0/22\n103.9.252.0/22\n103.10.0.0/22\n103.10.16.0/22\n103.10.84.0/22\n103.10.111.0/24\n103.10.140.0/22\n103.11.180.0/22\n103.12.32.0/22\n103.12.68.0/22\n103.12.136.0/22\n103.12.184.0/22\n103.12.232.0/22\n103.13.124.0/22\n103.13.144.0/22\n103.13.196.0/22\n103.13.244.0/22\n103.14.84.0/22\n103.14.112.0/22\n103.14.132.0/22\n103.14.136.0/22\n103.14.156.0/22\n103.14.240.0/22\n103.15.4.0/22\n103.15.8.0/22\n103.15.16.0/22\n103.15.96.0/22\n103.15.200.0/22\n103.16.52.0/22\n103.16.80.0/22\n103.16.84.0/22\n103.16.88.0/22\n103.16.108.0/22\n103.16.124.0/22\n103.17.40.0/22\n103.17.120.0/22\n103.17.160.0/22\n103.17.204.0/22\n103.17.228.0/22\n103.18.192.0/22\n103.18.208.0/22\n103.18.212.0/22\n103.18.224.0/22\n103.19.12.0/22\n103.19.40.0/22\n103.19.44.0/22\n103.19.64.0/22\n103.19.68.0/22\n103.19.72.0/22\n103.19.232.0/22\n103.20.12.0/22\n103.20.32.0/22\n103.20.112.0/22\n103.20.128.0/22\n103.20.160.0/22\n103.20.248.0/22\n103.21.112.0/22\n103.21.116.0/22\n103.21.136.0/22\n103.21.140.0/22\n103.21.176.0/22\n103.21.208.0/22\n103.21.240.0/22\n103.22.0.0/22\n103.22.4.0/22\n103.22.8.0/22\n103.22.12.0/22\n103.22.16.0/22\n103.22.20.0/22\n103.22.24.0/22\n103.22.28.0/22\n103.22.32.0/22\n103.22.36.0/22\n103.22.40.0/22\n103.22.44.0/22\n103.22.48.0/22\n103.22.52.0/22\n103.22.56.0/22\n103.22.60.0/22\n103.22.64.0/22\n103.22.68.0/22\n103.22.72.0/22\n103.22.76.0/22\n103.22.80.0/22\n103.22.84.0/22\n103.22.88.0/22\n103.22.92.0/22\n103.22.100.0/22\n103.22.104.0/22\n103.22.108.0/22\n103.22.112.0/22\n103.22.116.0/22\n103.22.120.0/22\n103.22.124.0/22\n103.22.188.0/22\n103.22.228.0/22\n103.22.252.0/22\n103.23.8.0/22\n103.23.56.0/22\n103.23.160.0/22\n103.23.164.0/22\n103.23.176.0/22\n103.23.228.0/22\n103.24.116.0/22\n103.24.128.0/22\n103.24.144.0/22\n103.24.176.0/22\n103.24.184.0/22\n103.24.220.0/22\n103.24.228.0/22\n103.24.248.0/22\n103.24.252.0/22\n103.25.8.0/23\n103.25.20.0/22\n103.25.24.0/22\n103.25.28.0/22\n103.25.32.0/22\n103.25.36.0/22\n103.25.40.0/22\n103.25.48.0/22\n103.25.64.0/22\n103.25.68.0/22\n103.25.148.0/22\n103.25.156.0/22\n103.25.216.0/22\n103.26.0.0/22\n103.26.64.0/22\n103.26.156.0/22\n103.26.160.0/22\n103.26.228.0/22\n103.26.240.0/22\n103.27.4.0/22\n103.27.12.0/22\n103.27.24.0/22\n103.27.56.0/22\n103.27.96.0/22\n103.27.208.0/22\n103.27.240.0/22\n103.28.4.0/22\n103.28.8.0/22\n103.28.204.0/22\n103.29.16.0/22\n103.29.128.0/22\n103.29.132.0/22\n103.29.136.0/22\n103.30.20.0/22\n103.30.96.0/22\n103.30.148.0/22\n103.30.200.0/22\n103.30.216.0/22\n103.30.228.0/22\n103.30.232.0/22\n103.30.236.0/22\n103.31.0.0/22\n103.31.48.0/22\n103.31.52.0/22\n103.31.56.0/22\n103.31.60.0/22\n103.31.64.0/22\n103.31.68.0/22\n103.31.72.0/22\n103.31.148.0/22\n103.31.160.0/22\n103.31.168.0/22\n103.31.200.0/22\n103.224.40.0/22\n103.224.44.0/22\n103.224.60.0/22\n103.224.80.0/22\n103.224.220.0/22\n103.224.224.0/22\n103.224.228.0/22\n103.224.232.0/22\n103.225.84.0/22\n103.226.16.0/22\n103.226.40.0/22\n103.226.56.0/22\n103.226.60.0/22\n103.226.80.0/22\n103.226.116.0/22\n103.226.132.0/22\n103.226.156.0/22\n103.226.180.0/22\n103.226.196.0/22\n103.227.48.0/22\n103.227.72.0/22\n103.227.76.0/22\n103.227.80.0/22\n103.227.100.0/22\n103.227.120.0/22\n103.227.132.0/22\n103.227.136.0/22\n103.227.196.0/22\n103.227.204.0/22\n103.227.212.0/22\n103.227.228.0/22\n103.228.12.0/22\n103.228.28.0/22\n103.228.68.0/22\n103.228.88.0/22\n103.228.128.0/22\n103.228.160.0/22\n103.228.176.0/22\n103.228.204.0/22\n103.228.208.0/22\n103.228.228.0/22\n103.228.232.0/22\n103.229.20.0/22\n103.229.136.0/22\n103.229.148.0/22\n103.229.172.0/22\n103.229.212.0/22\n103.229.216.0/22\n103.229.220.0/22\n103.229.228.0/22\n103.229.236.0/22\n103.229.240.0/22\n103.230.0.0/22\n103.230.28.0/22\n103.230.40.0/22\n103.230.44.0/22\n103.230.96.0/22\n103.230.196.0/22\n103.230.200.0/22\n103.230.204.0/22\n103.230.212.0/22\n103.230.236.0/22\n103.231.16.0/22\n103.231.20.0/22\n103.231.64.0/22\n103.231.68.0/22\n103.240.16.0/22\n103.240.36.0/22\n103.240.72.0/22\n103.240.84.0/22\n103.240.124.0/22\n103.240.156.0/22\n103.240.172.0/22\n103.240.244.0/22\n103.241.12.0/22\n103.241.72.0/22\n103.241.92.0/22\n103.241.96.0/22\n103.241.160.0/22\n103.241.184.0/22\n103.241.188.0/22\n103.241.220.0/22\n103.242.8.0/22\n103.242.64.0/22\n103.242.128.0/22\n103.242.132.0/22\n103.242.160.0/22\n103.242.168.0/22\n103.242.172.0/22\n103.242.176.0/22\n103.242.200.0/22\n103.242.212.0/22\n103.242.220.0/22\n103.242.240.0/22\n103.243.24.0/22\n103.243.136.0/22\n103.243.252.0/22\n103.244.16.0/22\n103.244.56.0/22\n103.244.60.0/22\n103.244.64.0/22\n103.244.68.0/22\n103.244.72.0/22\n103.244.76.0/22\n103.244.80.0/22\n103.244.84.0/22\n103.244.164.0/22\n103.244.232.0/22\n103.244.252.0/22\n103.245.23.0/24\n103.245.52.0/22\n103.245.60.0/22\n103.245.80.0/22\n103.245.124.0/22\n103.245.128.0/22\n103.246.8.0/22\n103.246.12.0/22\n103.246.120.0/22\n103.246.124.0/22\n103.246.132.0/22\n103.246.152.0/22\n103.246.156.0/22\n103.247.168.0/22\n103.247.172.0/22\n103.247.176.0/22\n103.247.200.0/22\n103.247.212.0/22\n103.248.0.0/23\n103.248.64.0/22\n103.248.100.0/22\n103.248.124.0/22\n103.248.152.0/22\n103.248.168.0/22\n103.248.192.0/22\n103.248.212.0/22\n103.248.224.0/22\n103.248.228.0/22\n103.249.12.0/22\n103.249.52.0/22\n103.249.128.0/22\n103.249.136.0/22\n103.249.144.0/22\n103.249.164.0/22\n103.249.168.0/22\n103.249.172.0/22\n103.249.176.0/22\n103.249.188.0/22\n103.249.192.0/22\n103.249.244.0/22\n103.249.252.0/22\n103.250.32.0/22\n103.250.104.0/22\n103.250.124.0/22\n103.250.180.0/22\n103.250.192.0/22\n103.250.216.0/22\n103.250.224.0/22\n103.250.236.0/22\n103.250.248.0/22\n103.250.252.0/22\n103.251.32.0/22\n103.251.84.0/22\n103.251.96.0/22\n103.251.124.0/22\n103.251.128.0/22\n103.251.160.0/22\n103.251.204.0/22\n103.251.236.0/22\n103.251.240.0/22\n103.252.28.0/22\n103.252.36.0/22\n103.252.64.0/22\n103.252.104.0/22\n103.252.172.0/22\n103.252.204.0/22\n103.252.208.0/22\n103.252.232.0/22\n103.252.248.0/22\n103.253.4.0/22\n103.253.60.0/22\n103.253.204.0/22\n103.253.220.0/22\n103.253.224.0/22\n103.253.232.0/22\n103.254.8.0/22\n103.254.20.0/22\n103.254.64.0/22\n103.254.68.0/22\n103.254.72.0/22\n103.254.76.0/22\n103.254.112.0/22\n103.254.148.0/22\n103.254.176.0/22\n103.254.188.0/22\n103.254.196.0/24\n103.254.220.0/22\n103.255.68.0/22\n103.255.88.0/22\n103.255.92.0/22\n103.255.136.0/22\n103.255.140.0/22\n103.255.184.0/22\n103.255.200.0/22\n103.255.208.0/22\n103.255.212.0/22\n103.255.228.0/22\n106.0.0.0/24\n106.0.2.0/23\n106.0.4.0/22\n106.0.8.0/21\n106.0.16.0/20\n106.0.64.0/18\n106.2.0.0/15\n106.4.0.0/14\n106.8.0.0/15\n106.11.0.0/16\n106.12.0.0/14\n106.16.0.0/12\n106.32.0.0/12\n106.48.0.0/15\n106.50.0.0/16\n106.52.0.0/14\n106.56.0.0/13\n106.74.0.0/15\n106.80.0.0/12\n106.108.0.0/14\n106.112.0.0/13\n106.120.0.0/13\n106.224.0.0/12\n110.6.0.0/15\n110.16.0.0/14\n110.40.0.0/14\n110.44.144.0/20\n110.48.0.0/16\n110.51.0.0/16\n110.52.0.0/15\n110.56.0.0/13\n110.64.0.0/15\n110.72.0.0/15\n110.75.0.0/17\n110.75.128.0/19\n110.75.160.0/19\n110.75.192.0/18\n110.76.0.0/19\n110.76.32.0/19\n110.76.156.0/22\n110.76.184.0/22\n110.76.192.0/18\n110.77.0.0/17\n110.80.0.0/13\n110.88.0.0/14\n110.93.32.0/19\n110.94.0.0/15\n110.96.0.0/11\n110.152.0.0/14\n110.156.0.0/15\n110.165.32.0/19\n110.166.0.0/15\n110.172.192.0/18\n110.173.0.0/19\n110.173.32.0/20\n110.173.64.0/19\n110.173.96.0/19\n110.173.192.0/19\n110.176.0.0/13\n110.184.0.0/13\n110.192.0.0/11\n110.228.0.0/14\n110.232.32.0/19\n110.236.0.0/15\n110.240.0.0/12\n111.0.0.0/10\n111.66.0.0/16\n111.67.192.0/20\n111.68.64.0/19\n111.72.0.0/13\n111.85.0.0/16\n111.91.192.0/19\n111.112.0.0/15\n111.114.0.0/15\n111.116.0.0/15\n111.118.200.0/21\n111.119.64.0/18\n111.119.128.0/19\n111.120.0.0/14\n111.124.0.0/16\n111.126.0.0/15\n111.128.0.0/11\n111.160.0.0/13\n111.170.0.0/16\n111.172.0.0/14\n111.176.0.0/13\n111.186.0.0/15\n111.192.0.0/12\n111.208.0.0/14\n111.212.0.0/14\n111.221.128.0/17\n111.222.0.0/16\n111.223.240.0/22\n111.223.248.0/22\n111.224.0.0/14\n111.228.0.0/14\n111.235.96.0/19\n111.235.156.0/22\n111.235.160.0/19\n112.0.0.0/10\n112.64.0.0/15\n112.66.0.0/15\n112.73.0.0/16\n112.74.0.0/15\n112.80.0.0/13\n112.88.0.0/13\n112.96.0.0/15\n112.98.0.0/15\n112.100.0.0/14\n112.109.128.0/17\n112.111.0.0/16\n112.112.0.0/14\n112.116.0.0/15\n112.122.0.0/15\n112.124.0.0/14\n112.128.0.0/14\n112.132.0.0/16\n112.137.48.0/21\n112.192.0.0/14\n112.224.0.0/11\n113.0.0.0/13\n113.8.0.0/15\n113.11.192.0/19\n113.12.0.0/14\n113.16.0.0/15\n113.18.0.0/16\n113.24.0.0/14\n113.31.0.0/16\n113.44.0.0/14\n113.48.0.0/14\n113.52.160.0/19\n113.54.0.0/15\n113.56.0.0/15\n113.58.0.0/16\n113.59.0.0/17\n113.59.224.0/22\n113.62.0.0/15\n113.64.0.0/11\n113.96.0.0/12\n113.112.0.0/13\n113.120.0.0/13\n113.128.0.0/15\n113.130.96.0/20\n113.130.112.0/21\n113.132.0.0/14\n113.136.0.0/13\n113.194.0.0/15\n113.197.100.0/22\n113.200.0.0/15\n113.202.0.0/16\n113.204.0.0/14\n113.208.96.0/19\n113.208.128.0/17\n113.209.0.0/16\n113.212.0.0/18\n113.212.100.0/22\n113.212.184.0/21\n113.213.0.0/17\n113.214.0.0/15\n113.218.0.0/15\n113.220.0.0/14\n113.224.0.0/12\n113.240.0.0/13\n113.248.0.0/14\n114.28.0.0/16\n114.54.0.0/15\n114.60.0.0/14\n114.64.0.0/14\n114.68.0.0/16\n114.79.64.0/18\n114.80.0.0/12\n114.96.0.0/13\n114.104.0.0/14\n114.110.0.0/20\n114.110.64.0/18\n114.111.0.0/19\n114.111.160.0/19\n114.112.0.0/14\n114.116.0.0/15\n114.118.0.0/15\n114.132.0.0/16\n114.135.0.0/16\n114.138.0.0/15\n114.141.64.0/21\n114.141.128.0/18\n114.196.0.0/15\n114.198.248.0/21\n114.208.0.0/14\n114.212.0.0/15\n114.214.0.0/16\n114.215.0.0/16\n114.216.0.0/13\n114.224.0.0/12\n114.240.0.0/12\n115.24.0.0/14\n115.28.0.0/15\n115.32.0.0/14\n115.44.0.0/15\n115.46.0.0/16\n115.47.0.0/16\n115.48.0.0/12\n115.69.64.0/20\n115.84.0.0/18\n115.84.192.0/19\n115.85.192.0/18\n115.100.0.0/14\n115.104.0.0/14\n115.120.0.0/14\n115.124.16.0/20\n115.148.0.0/14\n115.152.0.0/15\n115.154.0.0/15\n115.156.0.0/15\n115.158.0.0/16\n115.159.0.0/16\n115.166.64.0/19\n115.168.0.0/14\n115.172.0.0/14\n115.180.0.0/14\n115.190.0.0/15\n115.192.0.0/11\n115.224.0.0/12\n116.0.8.0/21\n116.0.24.0/21\n116.1.0.0/16\n116.2.0.0/15\n116.4.0.0/14\n116.8.0.0/14\n116.13.0.0/16\n116.16.0.0/12\n116.50.0.0/20\n116.52.0.0/14\n116.56.0.0/15\n116.58.128.0/20\n116.58.208.0/20\n116.60.0.0/14\n116.66.0.0/17\n116.69.0.0/16\n116.70.0.0/17\n116.76.0.0/15\n116.78.0.0/15\n116.85.0.0/16\n116.89.144.0/20\n116.90.80.0/20\n116.90.184.0/21\n116.95.0.0/16\n116.112.0.0/14\n116.116.0.0/15\n116.128.0.0/10\n116.192.0.0/16\n116.193.16.0/20\n116.193.32.0/19\n116.193.176.0/21\n116.194.0.0/15\n116.196.0.0/16\n116.198.0.0/16\n116.199.0.0/17\n116.199.128.0/19\n116.204.0.0/15\n116.207.0.0/16\n116.208.0.0/14\n116.212.160.0/20\n116.213.64.0/18\n116.213.128.0/17\n116.214.32.0/19\n116.214.64.0/20\n116.214.128.0/17\n116.215.0.0/16\n116.216.0.0/14\n116.224.0.0/12\n116.242.0.0/15\n116.244.0.0/15\n116.246.0.0/15\n116.248.0.0/15\n116.251.64.0/18\n116.252.0.0/15\n116.254.128.0/17\n116.255.128.0/17\n117.8.0.0/13\n117.21.0.0/16\n117.22.0.0/15\n117.24.0.0/13\n117.32.0.0/13\n117.40.0.0/14\n117.44.0.0/15\n117.48.0.0/14\n117.53.48.0/20\n117.53.176.0/20\n117.57.0.0/16\n117.58.0.0/17\n117.59.0.0/16\n117.60.0.0/14\n117.64.0.0/13\n117.72.0.0/15\n117.74.64.0/20\n117.74.80.0/20\n117.74.128.0/17\n117.75.0.0/16\n117.76.0.0/14\n117.80.0.0/12\n117.100.0.0/15\n117.103.16.0/20\n117.103.40.0/21\n117.103.72.0/21\n117.103.128.0/20\n117.104.168.0/21\n117.106.0.0/15\n117.112.0.0/13\n117.120.64.0/18\n117.120.128.0/17\n117.121.0.0/17\n117.121.128.0/18\n117.121.192.0/21\n117.122.128.0/17\n117.124.0.0/14\n117.128.0.0/10\n118.24.0.0/15\n118.26.0.0/16\n118.28.0.0/15\n118.30.0.0/16\n118.31.0.0/16\n118.64.0.0/15\n118.66.0.0/16\n118.67.112.0/20\n118.72.0.0/13\n118.80.0.0/15\n118.84.0.0/15\n118.88.32.0/19\n118.88.64.0/18\n118.88.128.0/17\n118.89.0.0/16\n118.91.240.0/20\n118.102.16.0/20\n118.102.32.0/21\n118.112.0.0/13\n118.120.0.0/14\n118.124.0.0/15\n118.126.0.0/16\n118.127.128.0/19\n118.132.0.0/14\n118.144.0.0/14\n118.178.0.0/16\n118.180.0.0/14\n118.184.0.0/16\n118.186.0.0/15\n118.188.0.0/16\n118.190.0.0/15\n118.192.0.0/15\n118.194.0.0/17\n118.194.128.0/17\n118.195.0.0/17\n118.195.128.0/17\n118.196.0.0/14\n118.202.0.0/15\n118.204.0.0/14\n118.212.0.0/16\n118.213.0.0/16\n118.224.0.0/14\n118.228.0.0/15\n118.230.0.0/16\n118.239.0.0/16\n118.242.0.0/16\n118.244.0.0/14\n118.248.0.0/13\n119.0.0.0/15\n119.2.0.0/19\n119.2.128.0/17\n119.3.0.0/16\n119.4.0.0/14\n119.8.0.0/16\n119.10.0.0/17\n119.15.136.0/21\n119.16.0.0/16\n119.18.192.0/20\n119.18.208.0/21\n119.18.224.0/20\n119.18.240.0/20\n119.19.0.0/16\n119.20.0.0/14\n119.27.64.0/18\n119.27.128.0/19\n119.27.160.0/19\n119.27.192.0/18\n119.28.0.0/15\n119.30.48.0/20\n119.31.192.0/19\n119.32.0.0/14\n119.36.0.0/16\n119.37.0.0/17\n119.37.128.0/18\n119.37.192.0/18\n119.38.0.0/17\n119.38.128.0/18\n119.38.192.0/20\n119.38.208.0/20\n119.38.224.0/19\n119.39.0.0/16\n119.40.0.0/18\n119.40.64.0/20\n119.40.128.0/17\n119.41.0.0/16\n119.42.0.0/19\n119.42.128.0/21\n119.42.136.0/21\n119.42.224.0/19\n119.44.0.0/15\n119.48.0.0/13\n119.57.0.0/16\n119.58.0.0/16\n119.59.128.0/17\n119.60.0.0/16\n119.61.0.0/16\n119.62.0.0/16\n119.63.32.0/19\n119.75.208.0/20\n119.78.0.0/15\n119.80.0.0/16\n119.82.208.0/20\n119.84.0.0/14\n119.88.0.0/14\n119.96.0.0/13\n119.108.0.0/15\n119.112.0.0/13\n119.120.0.0/13\n119.128.0.0/12\n119.144.0.0/14\n119.148.160.0/20\n119.148.176.0/20\n119.151.192.0/18\n119.160.200.0/21\n119.161.128.0/17\n119.162.0.0/15\n119.164.0.0/14\n119.176.0.0/12\n119.232.0.0/15\n119.235.128.0/18\n119.248.0.0/14\n119.252.96.0/21\n119.252.240.0/20\n119.253.0.0/16\n119.254.0.0/15\n120.0.0.0/12\n120.24.0.0/14\n120.30.0.0/16\n120.31.0.0/16\n120.32.0.0/13\n120.40.0.0/14\n120.44.0.0/14\n120.48.0.0/15\n120.52.0.0/14\n120.64.0.0/14\n120.68.0.0/14\n120.72.32.0/19\n120.72.128.0/17\n120.76.0.0/14\n120.80.0.0/13\n120.88.8.0/21\n120.90.0.0/15\n120.92.0.0/16\n120.94.0.0/16\n120.95.0.0/16\n120.128.0.0/14\n120.132.0.0/17\n120.132.128.0/17\n120.133.0.0/16\n120.134.0.0/15\n120.136.128.0/18\n120.137.0.0/17\n120.143.128.0/19\n120.192.0.0/10\n121.0.8.0/21\n121.0.16.0/20\n121.4.0.0/15\n121.8.0.0/13\n121.16.0.0/13\n121.24.0.0/14\n121.28.0.0/15\n121.30.0.0/16\n121.31.0.0/16\n121.32.0.0/14\n121.36.0.0/16\n121.37.0.0/16\n121.38.0.0/15\n121.40.0.0/14\n121.46.0.0/18\n121.46.128.0/17\n121.47.0.0/16\n121.48.0.0/15\n121.50.8.0/21\n121.51.0.0/16\n121.52.160.0/19\n121.52.208.0/20\n121.52.224.0/19\n121.54.176.0/21\n121.55.0.0/18\n121.56.0.0/15\n121.58.0.0/17\n121.58.136.0/21\n121.58.144.0/20\n121.58.160.0/21\n121.59.0.0/16\n121.60.0.0/14\n121.68.0.0/14\n121.76.0.0/15\n121.79.128.0/18\n121.89.0.0/16\n121.100.128.0/17\n121.101.0.0/18\n121.101.208.0/20\n121.192.0.0/16\n121.193.0.0/16\n121.194.0.0/15\n121.196.0.0/14\n121.200.192.0/21\n121.201.0.0/16\n121.204.0.0/14\n121.224.0.0/12\n121.248.0.0/14\n121.255.0.0/16\n122.0.64.0/18\n122.0.128.0/17\n122.4.0.0/14\n122.8.0.0/16\n122.9.0.0/16\n122.10.0.0/17\n122.10.128.0/17\n122.11.0.0/17\n122.12.0.0/16\n122.13.0.0/16\n122.14.0.0/16\n122.48.0.0/16\n122.49.0.0/18\n122.51.0.0/16\n122.64.0.0/11\n122.96.0.0/15\n122.102.0.0/20\n122.102.64.0/20\n122.102.80.0/20\n122.112.0.0/14\n122.119.0.0/16\n122.128.120.0/21\n122.136.0.0/13\n122.144.128.0/17\n122.152.192.0/18\n122.156.0.0/14\n122.188.0.0/14\n122.192.0.0/14\n122.198.0.0/16\n122.200.64.0/18\n122.201.48.0/20\n122.204.0.0/14\n122.224.0.0/12\n122.240.0.0/13\n122.248.24.0/21\n122.248.48.0/20\n122.255.64.0/21\n123.0.128.0/18\n123.4.0.0/14\n123.8.0.0/13\n123.49.128.0/17\n123.50.160.0/19\n123.52.0.0/14\n123.56.0.0/15\n123.58.0.0/16\n123.59.0.0/16\n123.60.0.0/16\n123.61.0.0/16\n123.62.0.0/16\n123.64.0.0/11\n123.96.0.0/15\n123.98.0.0/17\n123.99.128.0/17\n123.100.0.0/19\n123.101.0.0/16\n123.103.0.0/17\n123.108.128.0/20\n123.108.208.0/20\n123.112.0.0/12\n123.128.0.0/13\n123.136.80.0/20\n123.137.0.0/16\n123.138.0.0/15\n123.144.0.0/14\n123.148.0.0/16\n123.149.0.0/16\n123.150.0.0/15\n123.152.0.0/13\n123.160.0.0/14\n123.164.0.0/14\n123.168.0.0/14\n123.172.0.0/15\n123.174.0.0/15\n123.176.60.0/22\n123.176.80.0/20\n123.177.0.0/16\n123.178.0.0/15\n123.180.0.0/14\n123.184.0.0/14\n123.188.0.0/14\n123.196.0.0/15\n123.199.128.0/17\n123.206.0.0/15\n123.232.0.0/14\n123.242.0.0/17\n123.244.0.0/14\n123.249.0.0/16\n123.253.0.0/16\n124.6.64.0/18\n124.14.0.0/15\n124.16.0.0/15\n124.20.0.0/16\n124.21.0.0/20\n124.21.16.0/20\n124.21.32.0/19\n124.21.64.0/18\n124.21.128.0/17\n124.22.0.0/15\n124.28.192.0/18\n124.29.0.0/17\n124.31.0.0/16\n124.40.112.0/20\n124.40.128.0/18\n124.40.192.0/19\n124.42.0.0/17\n124.42.128.0/17\n124.47.0.0/18\n124.64.0.0/15\n124.66.0.0/17\n124.67.0.0/16\n124.68.0.0/14\n124.72.0.0/16\n124.73.0.0/16\n124.74.0.0/15\n124.76.0.0/14\n124.88.0.0/16\n124.89.0.0/17\n124.89.128.0/17\n124.90.0.0/15\n124.92.0.0/14\n124.108.8.0/21\n124.108.40.0/21\n124.109.96.0/21\n124.112.0.0/15\n124.114.0.0/15\n124.116.0.0/16\n124.117.0.0/16\n124.118.0.0/15\n124.126.0.0/15\n124.128.0.0/13\n124.147.128.0/17\n124.151.0.0/16\n124.152.0.0/16\n124.156.0.0/16\n124.160.0.0/16\n124.161.0.0/16\n124.162.0.0/16\n124.163.0.0/16\n124.164.0.0/14\n124.172.0.0/15\n124.174.0.0/15\n124.192.0.0/15\n124.196.0.0/16\n124.200.0.0/13\n124.220.0.0/14\n124.224.0.0/16\n124.225.0.0/16\n124.226.0.0/15\n124.228.0.0/14\n124.232.0.0/15\n124.234.0.0/15\n124.236.0.0/14\n124.240.0.0/17\n124.240.128.0/18\n124.242.0.0/16\n124.243.192.0/18\n124.248.0.0/17\n124.249.0.0/16\n124.250.0.0/15\n124.254.0.0/18\n125.31.192.0/18\n125.32.0.0/16\n125.33.0.0/16\n125.34.0.0/16\n125.35.0.0/17\n125.35.128.0/17\n125.36.0.0/14\n125.40.0.0/13\n125.58.128.0/17\n125.61.128.0/17\n125.62.0.0/18\n125.64.0.0/13\n125.72.0.0/16\n125.73.0.0/16\n125.74.0.0/15\n125.76.0.0/17\n125.76.128.0/17\n125.77.0.0/16\n125.78.0.0/15\n125.80.0.0/13\n125.88.0.0/13\n125.96.0.0/15\n125.98.0.0/16\n125.104.0.0/13\n125.112.0.0/12\n125.169.0.0/16\n125.171.0.0/16\n125.208.0.0/18\n125.210.0.0/16\n125.211.0.0/16\n125.213.0.0/17\n125.214.96.0/19\n125.215.0.0/18\n125.216.0.0/15\n125.218.0.0/16\n125.219.0.0/16\n125.220.0.0/15\n125.222.0.0/15\n125.254.128.0/18\n125.254.192.0/18\n134.196.0.0/16\n139.9.0.0/16\n139.129.0.0/16\n139.148.0.0/16\n139.155.0.0/16\n139.159.0.0/16\n139.170.0.0/16\n139.176.0.0/16\n139.183.0.0/16\n139.186.0.0/16\n139.189.0.0/16\n139.196.0.0/14\n139.200.0.0/13\n139.208.0.0/13\n139.220.0.0/15\n139.224.0.0/16\n139.226.0.0/15\n140.75.0.0/16\n140.143.0.0/16\n140.205.0.0/16\n140.206.0.0/15\n140.210.0.0/16\n140.224.0.0/16\n140.237.0.0/16\n140.240.0.0/16\n140.243.0.0/16\n140.246.0.0/16\n140.249.0.0/16\n140.250.0.0/16\n140.255.0.0/16\n144.0.0.0/16\n144.7.0.0/16\n144.12.0.0/16\n144.52.0.0/16\n144.123.0.0/16\n144.255.0.0/16\n150.0.0.0/16\n150.115.0.0/16\n150.121.0.0/16\n150.122.0.0/16\n150.138.0.0/15\n150.223.0.0/16\n150.255.0.0/16\n153.0.0.0/16\n153.3.0.0/16\n153.34.0.0/15\n153.36.0.0/15\n153.99.0.0/16\n153.101.0.0/16\n153.118.0.0/15\n157.0.0.0/16\n157.18.0.0/16\n157.61.0.0/16\n157.122.0.0/16\n157.148.0.0/16\n157.156.0.0/16\n157.255.0.0/16\n159.226.0.0/16\n161.207.0.0/16\n162.105.0.0/16\n163.0.0.0/16\n163.125.0.0/16\n163.142.0.0/16\n163.177.0.0/16\n163.179.0.0/16\n163.204.0.0/16\n166.111.0.0/16\n167.139.0.0/16\n167.189.0.0/16\n168.160.0.0/16\n171.8.0.0/13\n171.34.0.0/15\n171.36.0.0/14\n171.40.0.0/13\n171.80.0.0/14\n171.84.0.0/14\n171.88.0.0/13\n171.104.0.0/13\n171.112.0.0/14\n171.116.0.0/14\n171.120.0.0/13\n171.208.0.0/12\n175.0.0.0/12\n175.16.0.0/13\n175.24.0.0/14\n175.30.0.0/15\n175.42.0.0/15\n175.44.0.0/16\n175.46.0.0/15\n175.48.0.0/12\n175.64.0.0/11\n175.102.0.0/16\n175.106.128.0/17\n175.146.0.0/15\n175.148.0.0/14\n175.152.0.0/14\n175.160.0.0/12\n175.178.0.0/16\n175.184.128.0/18\n175.185.0.0/16\n175.186.0.0/15\n175.188.0.0/14\n180.76.0.0/16\n180.77.0.0/16\n180.78.0.0/15\n180.84.0.0/15\n180.86.0.0/16\n180.88.0.0/14\n180.94.56.0/21\n180.94.96.0/20\n180.95.128.0/17\n180.96.0.0/11\n180.129.128.0/17\n180.130.0.0/16\n180.136.0.0/13\n180.148.16.0/21\n180.148.152.0/21\n180.148.216.0/21\n180.148.224.0/19\n180.149.128.0/19\n180.150.160.0/19\n180.152.0.0/13\n180.160.0.0/12\n180.178.192.0/18\n180.184.0.0/14\n180.188.0.0/17\n180.189.148.0/22\n180.200.252.0/22\n180.201.0.0/16\n180.202.0.0/15\n180.208.0.0/15\n180.210.224.0/19\n180.212.0.0/15\n180.222.224.0/19\n180.223.0.0/16\n180.233.0.0/18\n180.233.64.0/19\n180.235.64.0/19\n182.16.192.0/19\n182.18.0.0/17\n182.23.184.0/21\n182.23.200.0/21\n182.32.0.0/12\n182.48.96.0/19\n182.49.0.0/16\n182.50.0.0/20\n182.50.112.0/20\n182.51.0.0/16\n182.54.0.0/17\n182.61.0.0/16\n182.80.0.0/14\n182.84.0.0/14\n182.88.0.0/14\n182.92.0.0/16\n182.96.0.0/12\n182.112.0.0/12\n182.128.0.0/12\n182.144.0.0/13\n182.157.0.0/16\n182.160.64.0/19\n182.174.0.0/15\n182.200.0.0/13\n182.236.128.0/17\n182.238.0.0/16\n182.239.0.0/19\n182.240.0.0/13\n182.254.0.0/16\n183.0.0.0/10\n183.64.0.0/13\n183.78.180.0/22\n183.81.180.0/22\n183.84.0.0/15\n183.91.128.0/22\n183.91.136.0/21\n183.91.144.0/20\n183.92.0.0/14\n183.128.0.0/11\n183.160.0.0/13\n183.168.0.0/15\n183.170.0.0/16\n183.172.0.0/14\n183.182.0.0/19\n183.184.0.0/13\n183.192.0.0/10\n192.124.154.0/24\n192.188.170.0/24\n202.0.100.0/23\n202.0.122.0/23\n202.0.176.0/22\n202.3.128.0/23\n202.4.128.0/19\n202.4.252.0/22\n202.6.6.0/23\n202.6.66.0/23\n202.6.72.0/23\n202.6.87.0/24\n202.6.88.0/23\n202.6.92.0/23\n202.6.103.0/24\n202.6.108.0/24\n202.6.110.0/23\n202.6.114.0/24\n202.6.176.0/20\n202.8.0.0/24\n202.8.2.0/23\n202.8.4.0/23\n202.8.12.0/24\n202.8.24.0/24\n202.8.77.0/24\n202.8.128.0/19\n202.8.192.0/20\n202.9.32.0/24\n202.9.34.0/23\n202.9.48.0/23\n202.9.51.0/24\n202.9.52.0/23\n202.9.54.0/24\n202.9.57.0/24\n202.9.58.0/23\n202.10.64.0/20\n202.12.1.0/24\n202.12.2.0/24\n202.12.17.0/24\n202.12.18.0/24\n202.12.19.0/24\n202.12.72.0/24\n202.12.84.0/23\n202.12.96.0/24\n202.12.98.0/23\n202.12.106.0/24\n202.12.111.0/24\n202.12.116.0/24\n202.14.64.0/23\n202.14.69.0/24\n202.14.73.0/24\n202.14.74.0/23\n202.14.76.0/24\n202.14.78.0/23\n202.14.88.0/24\n202.14.97.0/24\n202.14.104.0/23\n202.14.108.0/23\n202.14.111.0/24\n202.14.114.0/23\n202.14.118.0/23\n202.14.124.0/23\n202.14.127.0/24\n202.14.129.0/24\n202.14.135.0/24\n202.14.136.0/24\n202.14.149.0/24\n202.14.151.0/24\n202.14.157.0/24\n202.14.158.0/23\n202.14.169.0/24\n202.14.170.0/23\n202.14.176.0/24\n202.14.184.0/23\n202.14.208.0/23\n202.14.213.0/24\n202.14.219.0/24\n202.14.220.0/24\n202.14.222.0/23\n202.14.225.0/24\n202.14.226.0/23\n202.14.231.0/24\n202.14.235.0/24\n202.14.236.0/23\n202.14.238.0/24\n202.14.239.0/24\n202.14.246.0/24\n202.14.251.0/24\n202.20.66.0/24\n202.20.79.0/24\n202.20.87.0/24\n202.20.88.0/23\n202.20.90.0/24\n202.20.94.0/23\n202.20.114.0/24\n202.20.117.0/24\n202.20.120.0/24\n202.20.125.0/24\n202.20.127.0/24\n202.21.131.0/24\n202.21.132.0/24\n202.21.141.0/24\n202.21.142.0/24\n202.21.147.0/24\n202.21.148.0/24\n202.21.150.0/23\n202.21.152.0/23\n202.21.154.0/24\n202.21.156.0/24\n202.22.248.0/22\n202.22.252.0/22\n202.27.136.0/23\n202.38.0.0/23\n202.38.2.0/23\n202.38.8.0/21\n202.38.48.0/20\n202.38.64.0/19\n202.38.96.0/19\n202.38.128.0/23\n202.38.130.0/23\n202.38.132.0/23\n202.38.134.0/24\n202.38.135.0/24\n202.38.136.0/23\n202.38.138.0/24\n202.38.140.0/23\n202.38.142.0/23\n202.38.146.0/23\n202.38.149.0/24\n202.38.150.0/23\n202.38.152.0/23\n202.38.154.0/23\n202.38.156.0/24\n202.38.158.0/23\n202.38.160.0/23\n202.38.164.0/22\n202.38.168.0/23\n202.38.170.0/24\n202.38.171.0/24\n202.38.176.0/23\n202.38.184.0/21\n202.38.192.0/18\n202.40.4.0/23\n202.40.7.0/24\n202.40.15.0/24\n202.40.135.0/24\n202.40.136.0/24\n202.40.140.0/24\n202.40.143.0/24\n202.40.144.0/23\n202.40.150.0/24\n202.40.155.0/24\n202.40.156.0/24\n202.40.158.0/23\n202.40.162.0/24\n202.41.8.0/23\n202.41.11.0/24\n202.41.12.0/23\n202.41.128.0/24\n202.41.130.0/23\n202.41.152.0/21\n202.41.192.0/24\n202.41.240.0/20\n202.43.76.0/22\n202.43.144.0/20\n202.44.16.0/20\n202.44.67.0/24\n202.44.74.0/24\n202.44.129.0/24\n202.44.132.0/23\n202.44.146.0/23\n202.45.0.0/23\n202.45.2.0/24\n202.45.15.0/24\n202.45.16.0/20\n202.46.16.0/23\n202.46.18.0/24\n202.46.20.0/23\n202.46.32.0/19\n202.46.128.0/24\n202.46.224.0/20\n202.47.82.0/23\n202.47.126.0/24\n202.47.128.0/24\n202.47.130.0/23\n202.57.240.0/20\n202.58.0.0/24\n202.59.0.0/24\n202.59.212.0/22\n202.59.232.0/23\n202.59.236.0/24\n202.60.48.0/21\n202.60.96.0/21\n202.60.112.0/20\n202.60.132.0/22\n202.60.136.0/21\n202.60.144.0/20\n202.62.112.0/22\n202.62.248.0/22\n202.62.252.0/24\n202.62.255.0/24\n202.63.81.0/24\n202.63.82.0/23\n202.63.84.0/22\n202.63.88.0/21\n202.63.160.0/19\n202.63.248.0/22\n202.65.0.0/21\n202.65.8.0/23\n202.67.0.0/22\n202.69.4.0/22\n202.69.16.0/20\n202.70.0.0/19\n202.70.96.0/20\n202.70.192.0/20\n202.72.40.0/21\n202.72.80.0/20\n202.73.128.0/22\n202.74.8.0/21\n202.74.80.0/20\n202.74.254.0/23\n202.75.208.0/20\n202.75.252.0/22\n202.76.252.0/22\n202.77.80.0/21\n202.77.92.0/22\n202.78.8.0/21\n202.79.224.0/21\n202.79.248.0/22\n202.80.192.0/21\n202.80.200.0/21\n202.81.0.0/22\n202.83.252.0/22\n202.84.4.0/22\n202.84.8.0/21\n202.84.24.0/21\n202.85.208.0/20\n202.86.249.0/24\n202.86.252.0/22\n202.87.80.0/20\n202.89.8.0/21\n202.90.0.0/22\n202.90.112.0/20\n202.90.196.0/24\n202.90.224.0/20\n202.91.0.0/22\n202.91.96.0/20\n202.91.128.0/22\n202.91.176.0/20\n202.91.224.0/19\n202.92.0.0/22\n202.92.8.0/21\n202.92.48.0/20\n202.92.252.0/22\n202.93.0.0/22\n202.93.252.0/22\n202.94.92.0/22\n202.95.0.0/22\n202.95.4.0/22\n202.95.8.0/21\n202.95.16.0/20\n202.95.240.0/21\n202.95.252.0/22\n202.96.0.0/18\n202.96.64.0/21\n202.96.72.0/21\n202.96.80.0/20\n202.96.96.0/21\n202.96.104.0/21\n202.96.112.0/20\n202.96.128.0/21\n202.96.136.0/21\n202.96.144.0/20\n202.96.160.0/21\n202.96.168.0/21\n202.96.176.0/20\n202.96.192.0/21\n202.96.200.0/21\n202.96.208.0/20\n202.96.224.0/21\n202.96.232.0/21\n202.96.240.0/20\n202.97.0.0/21\n202.97.8.0/21\n202.97.16.0/20\n202.97.32.0/19\n202.97.64.0/19\n202.97.96.0/20\n202.97.112.0/20\n202.97.128.0/18\n202.97.192.0/19\n202.97.224.0/21\n202.97.232.0/21\n202.97.240.0/20\n202.98.0.0/21\n202.98.8.0/21\n202.98.16.0/20\n202.98.32.0/21\n202.98.40.0/21\n202.98.48.0/20\n202.98.64.0/19\n202.98.96.0/21\n202.98.104.0/21\n202.98.112.0/20\n202.98.128.0/19\n202.98.160.0/21\n202.98.168.0/21\n202.98.176.0/20\n202.98.192.0/21\n202.98.200.0/21\n202.98.208.0/20\n202.98.224.0/21\n202.98.232.0/21\n202.98.240.0/20\n202.99.0.0/18\n202.99.64.0/19\n202.99.96.0/21\n202.99.104.0/21\n202.99.112.0/20\n202.99.128.0/19\n202.99.160.0/21\n202.99.168.0/21\n202.99.176.0/20\n202.99.192.0/21\n202.99.200.0/21\n202.99.208.0/20\n202.99.224.0/21\n202.99.232.0/21\n202.99.240.0/20\n202.100.0.0/21\n202.100.8.0/21\n202.100.16.0/20\n202.100.32.0/19\n202.100.64.0/21\n202.100.72.0/21\n202.100.80.0/20\n202.100.96.0/21\n202.100.104.0/21\n202.100.112.0/20\n202.100.128.0/21\n202.100.136.0/21\n202.100.144.0/20\n202.100.160.0/21\n202.100.168.0/21\n202.100.176.0/20\n202.100.192.0/21\n202.100.200.0/21\n202.100.208.0/20\n202.100.224.0/19\n202.101.0.0/18\n202.101.64.0/19\n202.101.96.0/19\n202.101.128.0/18\n202.101.192.0/19\n202.101.224.0/21\n202.101.232.0/21\n202.101.240.0/20\n202.102.0.0/19\n202.102.32.0/19\n202.102.64.0/18\n202.102.128.0/21\n202.102.136.0/21\n202.102.144.0/20\n202.102.160.0/19\n202.102.192.0/21\n202.102.200.0/21\n202.102.208.0/20\n202.102.224.0/21\n202.102.232.0/21\n202.102.240.0/20\n202.103.0.0/21\n202.103.8.0/21\n202.103.16.0/20\n202.103.32.0/19\n202.103.64.0/19\n202.103.96.0/21\n202.103.104.0/21\n202.103.112.0/20\n202.103.128.0/18\n202.103.192.0/19\n202.103.224.0/21\n202.103.232.0/21\n202.103.240.0/20\n202.104.0.0/15\n202.106.0.0/16\n202.107.0.0/17\n202.107.128.0/17\n202.108.0.0/16\n202.109.0.0/16\n202.110.0.0/18\n202.110.64.0/18\n202.110.128.0/18\n202.110.192.0/18\n202.111.0.0/17\n202.111.128.0/19\n202.111.160.0/19\n202.111.192.0/18\n202.112.0.0/16\n202.113.0.0/20\n202.113.16.0/20\n202.113.32.0/19\n202.113.64.0/18\n202.113.128.0/18\n202.113.192.0/19\n202.113.224.0/20\n202.113.240.0/20\n202.114.0.0/19\n202.114.32.0/19\n202.114.64.0/18\n202.114.128.0/17\n202.115.0.0/19\n202.115.32.0/19\n202.115.64.0/18\n202.115.128.0/17\n202.116.0.0/19\n202.116.32.0/20\n202.116.48.0/20\n202.116.64.0/19\n202.116.96.0/19\n202.116.128.0/17\n202.117.0.0/18\n202.117.64.0/18\n202.117.128.0/17\n202.118.0.0/19\n202.118.32.0/19\n202.118.64.0/18\n202.118.128.0/17\n202.119.0.0/19\n202.119.32.0/19\n202.119.64.0/20\n202.119.80.0/20\n202.119.96.0/19\n202.119.128.0/17\n202.120.0.0/18\n202.120.64.0/18\n202.120.128.0/17\n202.121.0.0/16\n202.122.0.0/21\n202.122.32.0/21\n202.122.64.0/19\n202.122.112.0/21\n202.122.120.0/21\n202.122.128.0/24\n202.122.132.0/24\n202.123.96.0/20\n202.124.16.0/21\n202.124.24.0/22\n202.125.112.0/20\n202.125.176.0/20\n202.127.0.0/23\n202.127.2.0/24\n202.127.3.0/24\n202.127.4.0/24\n202.127.5.0/24\n202.127.6.0/23\n202.127.12.0/22\n202.127.16.0/20\n202.127.40.0/21\n202.127.48.0/20\n202.127.112.0/20\n202.127.128.0/20\n202.127.144.0/20\n202.127.160.0/21\n202.127.192.0/23\n202.127.194.0/23\n202.127.196.0/22\n202.127.200.0/21\n202.127.208.0/24\n202.127.209.0/24\n202.127.212.0/22\n202.127.216.0/21\n202.127.224.0/19\n202.130.0.0/19\n202.130.224.0/19\n202.131.16.0/21\n202.131.48.0/20\n202.131.208.0/20\n202.133.32.0/20\n202.134.58.0/24\n202.134.128.0/20\n202.136.48.0/20\n202.136.208.0/20\n202.136.224.0/20\n202.137.231.0/24\n202.141.160.0/19\n202.142.16.0/20\n202.143.4.0/22\n202.143.16.0/20\n202.143.32.0/20\n202.143.56.0/21\n202.146.160.0/20\n202.146.188.0/22\n202.146.196.0/22\n202.146.200.0/21\n202.147.144.0/20\n202.148.32.0/20\n202.148.64.0/19\n202.148.96.0/19\n202.149.32.0/19\n202.149.160.0/19\n202.149.224.0/19\n202.150.16.0/20\n202.150.32.0/20\n202.150.56.0/22\n202.150.192.0/20\n202.150.224.0/19\n202.151.0.0/22\n202.151.128.0/19\n202.152.176.0/20\n202.153.0.0/22\n202.153.48.0/20\n202.157.192.0/19\n202.158.160.0/19\n202.160.176.0/20\n202.162.67.0/24\n202.162.75.0/24\n202.164.0.0/20\n202.164.96.0/19\n202.165.96.0/20\n202.165.176.0/20\n202.165.208.0/20\n202.165.239.0/24\n202.165.240.0/23\n202.165.243.0/24\n202.165.245.0/24\n202.165.251.0/24\n202.165.252.0/22\n202.166.224.0/19\n202.168.160.0/20\n202.168.176.0/20\n202.170.128.0/19\n202.170.216.0/21\n202.170.224.0/19\n202.171.216.0/21\n202.171.235.0/24\n202.172.0.0/22\n202.173.0.0/22\n202.173.8.0/21\n202.173.224.0/19\n202.174.64.0/20\n202.176.224.0/19\n202.179.240.0/20\n202.180.128.0/19\n202.180.208.0/21\n202.181.112.0/20\n202.182.32.0/20\n202.182.192.0/19\n202.189.0.0/18\n202.189.80.0/20\n202.189.184.0/21\n202.191.0.0/24\n202.191.68.0/22\n202.191.72.0/21\n202.191.80.0/20\n202.192.0.0/13\n202.200.0.0/14\n202.204.0.0/14\n203.0.4.0/22\n203.0.10.0/23\n203.0.18.0/24\n203.0.24.0/24\n203.0.42.0/23\n203.0.45.0/24\n203.0.46.0/23\n203.0.81.0/24\n203.0.82.0/23\n203.0.90.0/23\n203.0.96.0/23\n203.0.104.0/21\n203.0.114.0/23\n203.0.122.0/24\n203.0.128.0/24\n203.0.130.0/23\n203.0.132.0/22\n203.0.137.0/24\n203.0.142.0/24\n203.0.144.0/24\n203.0.146.0/24\n203.0.148.0/24\n203.0.150.0/23\n203.0.152.0/24\n203.0.177.0/24\n203.0.224.0/24\n203.1.4.0/22\n203.1.18.0/24\n203.1.26.0/23\n203.1.65.0/24\n203.1.66.0/23\n203.1.70.0/23\n203.1.76.0/23\n203.1.90.0/24\n203.1.97.0/24\n203.1.98.0/23\n203.1.100.0/22\n203.1.108.0/24\n203.1.253.0/24\n203.1.254.0/24\n203.2.64.0/21\n203.2.73.0/24\n203.2.112.0/21\n203.2.126.0/23\n203.2.140.0/24\n203.2.150.0/24\n203.2.152.0/22\n203.2.156.0/23\n203.2.160.0/21\n203.2.180.0/23\n203.2.196.0/23\n203.2.209.0/24\n203.2.214.0/23\n203.2.226.0/23\n203.2.229.0/24\n203.2.236.0/23\n203.3.68.0/24\n203.3.72.0/23\n203.3.75.0/24\n203.3.80.0/21\n203.3.96.0/22\n203.3.105.0/24\n203.3.112.0/21\n203.3.120.0/24\n203.3.123.0/24\n203.3.135.0/24\n203.3.139.0/24\n203.3.143.0/24\n203.4.132.0/23\n203.4.134.0/24\n203.4.151.0/24\n203.4.152.0/22\n203.4.174.0/23\n203.4.180.0/24\n203.4.186.0/24\n203.4.205.0/24\n203.4.208.0/22\n203.4.227.0/24\n203.4.230.0/23\n203.5.4.0/23\n203.5.7.0/24\n203.5.8.0/23\n203.5.11.0/24\n203.5.21.0/24\n203.5.22.0/24\n203.5.44.0/24\n203.5.46.0/23\n203.5.52.0/22\n203.5.56.0/23\n203.5.60.0/23\n203.5.114.0/23\n203.5.118.0/24\n203.5.120.0/24\n203.5.172.0/24\n203.5.180.0/23\n203.5.182.0/24\n203.5.185.0/24\n203.5.186.0/24\n203.5.188.0/23\n203.5.190.0/24\n203.5.195.0/24\n203.5.214.0/23\n203.5.218.0/23\n203.6.131.0/24\n203.6.136.0/24\n203.6.138.0/23\n203.6.142.0/24\n203.6.150.0/23\n203.6.157.0/24\n203.6.159.0/24\n203.6.224.0/20\n203.6.248.0/23\n203.7.129.0/24\n203.7.138.0/23\n203.7.147.0/24\n203.7.150.0/23\n203.7.158.0/24\n203.7.192.0/23\n203.7.200.0/24\n203.8.0.0/24\n203.8.8.0/24\n203.8.23.0/24\n203.8.24.0/21\n203.8.70.0/24\n203.8.82.0/24\n203.8.86.0/23\n203.8.91.0/24\n203.8.110.0/23\n203.8.115.0/24\n203.8.166.0/23\n203.8.169.0/24\n203.8.173.0/24\n203.8.184.0/24\n203.8.186.0/23\n203.8.190.0/23\n203.8.192.0/24\n203.8.197.0/24\n203.8.198.0/23\n203.8.203.0/24\n203.8.209.0/24\n203.8.210.0/23\n203.8.212.0/22\n203.8.217.0/24\n203.8.220.0/24\n203.9.32.0/24\n203.9.36.0/23\n203.9.57.0/24\n203.9.63.0/24\n203.9.65.0/24\n203.9.70.0/23\n203.9.72.0/24\n203.9.75.0/24\n203.9.76.0/23\n203.9.96.0/22\n203.9.100.0/23\n203.9.108.0/24\n203.9.158.0/24\n203.10.34.0/24\n203.10.56.0/24\n203.10.74.0/23\n203.10.84.0/22\n203.10.88.0/24\n203.10.95.0/24\n203.10.125.0/24\n203.11.70.0/24\n203.11.76.0/22\n203.11.82.0/24\n203.11.84.0/22\n203.11.100.0/22\n203.11.109.0/24\n203.11.117.0/24\n203.11.122.0/24\n203.11.126.0/24\n203.11.136.0/22\n203.11.141.0/24\n203.11.142.0/23\n203.11.180.0/22\n203.11.208.0/22\n203.12.16.0/24\n203.12.19.0/24\n203.12.24.0/24\n203.12.57.0/24\n203.12.65.0/24\n203.12.66.0/24\n203.12.70.0/23\n203.12.87.0/24\n203.12.88.0/21\n203.12.100.0/23\n203.12.103.0/24\n203.12.114.0/24\n203.12.118.0/24\n203.12.130.0/24\n203.12.137.0/24\n203.12.196.0/22\n203.12.200.0/21\n203.12.211.0/24\n203.12.219.0/24\n203.12.226.0/24\n203.12.240.0/22\n203.13.18.0/24\n203.13.24.0/24\n203.13.44.0/23\n203.13.80.0/21\n203.13.88.0/23\n203.13.92.0/22\n203.13.173.0/24\n203.13.224.0/23\n203.13.227.0/24\n203.13.233.0/24\n203.14.24.0/22\n203.14.33.0/24\n203.14.56.0/24\n203.14.61.0/24\n203.14.62.0/24\n203.14.104.0/24\n203.14.114.0/23\n203.14.118.0/24\n203.14.162.0/24\n203.14.184.0/21\n203.14.192.0/24\n203.14.194.0/23\n203.14.214.0/24\n203.14.231.0/24\n203.14.246.0/24\n203.15.0.0/20\n203.15.20.0/23\n203.15.22.0/24\n203.15.87.0/24\n203.15.88.0/23\n203.15.105.0/24\n203.15.112.0/21\n203.15.130.0/23\n203.15.149.0/24\n203.15.151.0/24\n203.15.156.0/22\n203.15.174.0/24\n203.15.227.0/24\n203.15.232.0/21\n203.15.240.0/23\n203.15.246.0/24\n203.16.10.0/24\n203.16.12.0/23\n203.16.16.0/21\n203.16.27.0/24\n203.16.38.0/24\n203.16.49.0/24\n203.16.50.0/23\n203.16.58.0/24\n203.16.133.0/24\n203.16.161.0/24\n203.16.162.0/24\n203.16.186.0/23\n203.16.228.0/24\n203.16.238.0/24\n203.16.240.0/24\n203.16.245.0/24\n203.17.2.0/24\n203.17.18.0/24\n203.17.28.0/24\n203.17.39.0/24\n203.17.56.0/24\n203.17.74.0/23\n203.17.88.0/23\n203.17.136.0/24\n203.17.164.0/24\n203.17.187.0/24\n203.17.190.0/23\n203.17.231.0/24\n203.17.233.0/24\n203.17.248.0/24\n203.17.255.0/24\n203.18.2.0/23\n203.18.4.0/24\n203.18.7.0/24\n203.18.31.0/24\n203.18.37.0/24\n203.18.48.0/23\n203.18.50.0/24\n203.18.52.0/24\n203.18.72.0/22\n203.18.80.0/23\n203.18.87.0/24\n203.18.100.0/23\n203.18.105.0/24\n203.18.107.0/24\n203.18.110.0/24\n203.18.129.0/24\n203.18.131.0/24\n203.18.132.0/23\n203.18.144.0/24\n203.18.153.0/24\n203.18.199.0/24\n203.18.208.0/24\n203.18.211.0/24\n203.18.215.0/24\n203.19.18.0/24\n203.19.24.0/24\n203.19.30.0/24\n203.19.32.0/21\n203.19.41.0/24\n203.19.44.0/23\n203.19.46.0/24\n203.19.58.0/24\n203.19.60.0/23\n203.19.64.0/24\n203.19.68.0/24\n203.19.72.0/24\n203.19.101.0/24\n203.19.111.0/24\n203.19.131.0/24\n203.19.133.0/24\n203.19.144.0/24\n203.19.149.0/24\n203.19.156.0/24\n203.19.176.0/24\n203.19.178.0/23\n203.19.208.0/24\n203.19.228.0/22\n203.19.233.0/24\n203.19.242.0/24\n203.19.248.0/23\n203.19.255.0/24\n203.20.17.0/24\n203.20.40.0/23\n203.20.48.0/24\n203.20.61.0/24\n203.20.65.0/24\n203.20.84.0/23\n203.20.89.0/24\n203.20.106.0/23\n203.20.115.0/24\n203.20.117.0/24\n203.20.118.0/23\n203.20.122.0/24\n203.20.126.0/23\n203.20.135.0/24\n203.20.136.0/21\n203.20.150.0/24\n203.20.230.0/24\n203.20.232.0/24\n203.20.236.0/24\n203.21.0.0/23\n203.21.2.0/24\n203.21.8.0/24\n203.21.10.0/24\n203.21.18.0/24\n203.21.33.0/24\n203.21.34.0/24\n203.21.41.0/24\n203.21.44.0/24\n203.21.68.0/24\n203.21.82.0/24\n203.21.96.0/22\n203.21.124.0/24\n203.21.136.0/23\n203.21.145.0/24\n203.21.206.0/24\n203.22.24.0/24\n203.22.28.0/23\n203.22.31.0/24\n203.22.68.0/24\n203.22.76.0/24\n203.22.78.0/24\n203.22.84.0/24\n203.22.87.0/24\n203.22.92.0/22\n203.22.99.0/24\n203.22.106.0/24\n203.22.122.0/23\n203.22.131.0/24\n203.22.163.0/24\n203.22.166.0/24\n203.22.170.0/24\n203.22.176.0/21\n203.22.194.0/24\n203.22.242.0/23\n203.22.245.0/24\n203.22.246.0/24\n203.22.252.0/23\n203.23.0.0/24\n203.23.47.0/24\n203.23.61.0/24\n203.23.62.0/23\n203.23.73.0/24\n203.23.85.0/24\n203.23.92.0/22\n203.23.98.0/24\n203.23.107.0/24\n203.23.112.0/24\n203.23.130.0/24\n203.23.140.0/23\n203.23.172.0/24\n203.23.182.0/24\n203.23.186.0/23\n203.23.192.0/24\n203.23.197.0/24\n203.23.198.0/24\n203.23.204.0/22\n203.23.224.0/24\n203.23.226.0/23\n203.23.228.0/22\n203.23.249.0/24\n203.23.251.0/24\n203.24.13.0/24\n203.24.18.0/24\n203.24.27.0/24\n203.24.43.0/24\n203.24.56.0/24\n203.24.58.0/24\n203.24.67.0/24\n203.24.74.0/24\n203.24.79.0/24\n203.24.80.0/23\n203.24.84.0/23\n203.24.86.0/24\n203.24.90.0/24\n203.24.111.0/24\n203.24.112.0/24\n203.24.116.0/24\n203.24.122.0/23\n203.24.145.0/24\n203.24.152.0/23\n203.24.157.0/24\n203.24.161.0/24\n203.24.167.0/24\n203.24.186.0/23\n203.24.199.0/24\n203.24.202.0/24\n203.24.212.0/23\n203.24.217.0/24\n203.24.219.0/24\n203.24.244.0/24\n203.25.19.0/24\n203.25.20.0/23\n203.25.46.0/24\n203.25.48.0/21\n203.25.64.0/23\n203.25.91.0/24\n203.25.99.0/24\n203.25.100.0/24\n203.25.106.0/24\n203.25.131.0/24\n203.25.135.0/24\n203.25.138.0/24\n203.25.147.0/24\n203.25.153.0/24\n203.25.154.0/23\n203.25.164.0/24\n203.25.166.0/24\n203.25.174.0/23\n203.25.180.0/24\n203.25.182.0/24\n203.25.191.0/24\n203.25.199.0/24\n203.25.200.0/24\n203.25.202.0/23\n203.25.208.0/20\n203.25.229.0/24\n203.25.235.0/24\n203.25.236.0/24\n203.25.242.0/24\n203.26.12.0/24\n203.26.34.0/24\n203.26.49.0/24\n203.26.50.0/24\n203.26.55.0/24\n203.26.56.0/23\n203.26.60.0/24\n203.26.65.0/24\n203.26.68.0/24\n203.26.76.0/24\n203.26.80.0/24\n203.26.84.0/24\n203.26.97.0/24\n203.26.102.0/23\n203.26.115.0/24\n203.26.116.0/24\n203.26.129.0/24\n203.26.143.0/24\n203.26.144.0/24\n203.26.148.0/23\n203.26.154.0/24\n203.26.158.0/23\n203.26.170.0/24\n203.26.173.0/24\n203.26.176.0/24\n203.26.185.0/24\n203.26.202.0/23\n203.26.210.0/24\n203.26.214.0/24\n203.26.222.0/24\n203.26.224.0/24\n203.26.228.0/24\n203.26.232.0/24\n203.27.0.0/24\n203.27.10.0/24\n203.27.15.0/24\n203.27.16.0/24\n203.27.20.0/24\n203.27.22.0/23\n203.27.40.0/24\n203.27.45.0/24\n203.27.53.0/24\n203.27.65.0/24\n203.27.66.0/24\n203.27.81.0/24\n203.27.88.0/24\n203.27.102.0/24\n203.27.109.0/24\n203.27.117.0/24\n203.27.121.0/24\n203.27.122.0/23\n203.27.125.0/24\n203.27.200.0/24\n203.27.202.0/24\n203.27.233.0/24\n203.27.241.0/24\n203.27.250.0/24\n203.28.10.0/24\n203.28.12.0/24\n203.28.33.0/24\n203.28.34.0/23\n203.28.43.0/24\n203.28.44.0/24\n203.28.54.0/24\n203.28.56.0/24\n203.28.73.0/24\n203.28.74.0/24\n203.28.76.0/24\n203.28.86.0/24\n203.28.88.0/24\n203.28.112.0/24\n203.28.131.0/24\n203.28.136.0/24\n203.28.140.0/24\n203.28.145.0/24\n203.28.165.0/24\n203.28.169.0/24\n203.28.170.0/24\n203.28.178.0/23\n203.28.185.0/24\n203.28.187.0/24\n203.28.196.0/24\n203.28.226.0/23\n203.28.239.0/24\n203.29.2.0/24\n203.29.8.0/23\n203.29.13.0/24\n203.29.14.0/24\n203.29.28.0/24\n203.29.46.0/24\n203.29.57.0/24\n203.29.61.0/24\n203.29.63.0/24\n203.29.69.0/24\n203.29.73.0/24\n203.29.81.0/24\n203.29.90.0/24\n203.29.95.0/24\n203.29.100.0/24\n203.29.103.0/24\n203.29.112.0/24\n203.29.120.0/22\n203.29.182.0/23\n203.29.187.0/24\n203.29.189.0/24\n203.29.190.0/24\n203.29.205.0/24\n203.29.210.0/24\n203.29.217.0/24\n203.29.227.0/24\n203.29.231.0/24\n203.29.233.0/24\n203.29.234.0/24\n203.29.248.0/24\n203.29.254.0/23\n203.30.16.0/23\n203.30.25.0/24\n203.30.27.0/24\n203.30.29.0/24\n203.30.66.0/24\n203.30.81.0/24\n203.30.87.0/24\n203.30.111.0/24\n203.30.121.0/24\n203.30.123.0/24\n203.30.152.0/24\n203.30.156.0/24\n203.30.162.0/24\n203.30.173.0/24\n203.30.175.0/24\n203.30.187.0/24\n203.30.194.0/24\n203.30.217.0/24\n203.30.220.0/24\n203.30.222.0/24\n203.30.232.0/23\n203.30.235.0/24\n203.30.240.0/23\n203.30.246.0/24\n203.30.250.0/23\n203.31.45.0/24\n203.31.46.0/24\n203.31.49.0/24\n203.31.51.0/24\n203.31.54.0/23\n203.31.69.0/24\n203.31.72.0/24\n203.31.80.0/24\n203.31.85.0/24\n203.31.97.0/24\n203.31.105.0/24\n203.31.106.0/24\n203.31.108.0/23\n203.31.124.0/24\n203.31.162.0/24\n203.31.174.0/24\n203.31.177.0/24\n203.31.181.0/24\n203.31.187.0/24\n203.31.189.0/24\n203.31.204.0/24\n203.31.220.0/24\n203.31.222.0/23\n203.31.225.0/24\n203.31.229.0/24\n203.31.248.0/23\n203.31.253.0/24\n203.32.20.0/24\n203.32.48.0/23\n203.32.56.0/24\n203.32.60.0/24\n203.32.62.0/24\n203.32.68.0/23\n203.32.76.0/24\n203.32.81.0/24\n203.32.84.0/23\n203.32.95.0/24\n203.32.102.0/24\n203.32.105.0/24\n203.32.130.0/24\n203.32.133.0/24\n203.32.140.0/24\n203.32.152.0/24\n203.32.186.0/23\n203.32.192.0/24\n203.32.196.0/24\n203.32.203.0/24\n203.32.204.0/23\n203.32.212.0/24\n203.33.4.0/24\n203.33.7.0/24\n203.33.8.0/21\n203.33.21.0/24\n203.33.26.0/24\n203.33.32.0/24\n203.33.63.0/24\n203.33.64.0/24\n203.33.67.0/24\n203.33.68.0/24\n203.33.73.0/24\n203.33.79.0/24\n203.33.100.0/24\n203.33.122.0/24\n203.33.129.0/24\n203.33.131.0/24\n203.33.145.0/24\n203.33.156.0/24\n203.33.158.0/23\n203.33.174.0/24\n203.33.185.0/24\n203.33.200.0/24\n203.33.202.0/23\n203.33.204.0/24\n203.33.206.0/23\n203.33.214.0/23\n203.33.224.0/23\n203.33.226.0/24\n203.33.233.0/24\n203.33.243.0/24\n203.33.250.0/24\n203.34.4.0/24\n203.34.21.0/24\n203.34.27.0/24\n203.34.39.0/24\n203.34.48.0/23\n203.34.54.0/24\n203.34.56.0/23\n203.34.67.0/24\n203.34.69.0/24\n203.34.76.0/24\n203.34.92.0/24\n203.34.106.0/24\n203.34.113.0/24\n203.34.147.0/24\n203.34.150.0/24\n203.34.152.0/23\n203.34.161.0/24\n203.34.162.0/24\n203.34.187.0/24\n203.34.192.0/21\n203.34.204.0/22\n203.34.232.0/24\n203.34.240.0/24\n203.34.242.0/24\n203.34.245.0/24\n203.34.251.0/24\n203.55.2.0/23\n203.55.4.0/24\n203.55.10.0/24\n203.55.13.0/24\n203.55.22.0/24\n203.55.30.0/24\n203.55.93.0/24\n203.55.101.0/24\n203.55.109.0/24\n203.55.110.0/24\n203.55.116.0/23\n203.55.119.0/24\n203.55.128.0/23\n203.55.146.0/23\n203.55.192.0/24\n203.55.196.0/24\n203.55.218.0/23\n203.55.221.0/24\n203.55.224.0/24\n203.56.1.0/24\n203.56.4.0/24\n203.56.12.0/24\n203.56.24.0/24\n203.56.38.0/24\n203.56.40.0/24\n203.56.46.0/24\n203.56.48.0/21\n203.56.68.0/23\n203.56.82.0/23\n203.56.84.0/23\n203.56.95.0/24\n203.56.110.0/24\n203.56.121.0/24\n203.56.161.0/24\n203.56.169.0/24\n203.56.172.0/23\n203.56.175.0/24\n203.56.183.0/24\n203.56.185.0/24\n203.56.187.0/24\n203.56.192.0/24\n203.56.198.0/24\n203.56.201.0/24\n203.56.208.0/23\n203.56.210.0/24\n203.56.214.0/24\n203.56.216.0/24\n203.56.227.0/24\n203.56.228.0/24\n203.56.232.0/24\n203.56.240.0/24\n203.56.252.0/24\n203.56.254.0/24\n203.57.5.0/24\n203.57.6.0/24\n203.57.12.0/23\n203.57.28.0/24\n203.57.39.0/24\n203.57.46.0/24\n203.57.58.0/24\n203.57.61.0/24\n203.57.66.0/24\n203.57.69.0/24\n203.57.70.0/23\n203.57.73.0/24\n203.57.90.0/24\n203.57.101.0/24\n203.57.109.0/24\n203.57.123.0/24\n203.57.157.0/24\n203.57.200.0/24\n203.57.202.0/24\n203.57.206.0/24\n203.57.222.0/24\n203.57.224.0/20\n203.57.246.0/23\n203.57.249.0/24\n203.57.253.0/24\n203.57.254.0/23\n203.62.2.0/24\n203.62.131.0/24\n203.62.139.0/24\n203.62.161.0/24\n203.62.197.0/24\n203.62.228.0/22\n203.62.234.0/24\n203.62.246.0/24\n203.76.160.0/22\n203.76.168.0/22\n203.77.180.0/22\n203.78.48.0/20\n203.79.0.0/20\n203.79.32.0/20\n203.80.4.0/23\n203.80.32.0/20\n203.80.57.0/24\n203.80.132.0/22\n203.80.136.0/21\n203.80.144.0/20\n203.81.0.0/21\n203.81.16.0/20\n203.82.0.0/23\n203.82.16.0/21\n203.83.0.0/22\n203.83.56.0/21\n203.83.224.0/20\n203.86.0.0/19\n203.86.32.0/19\n203.86.64.0/20\n203.86.80.0/20\n203.86.96.0/19\n203.86.254.0/23\n203.88.32.0/19\n203.88.192.0/19\n203.89.0.0/22\n203.89.8.0/21\n203.89.136.0/22\n203.90.0.0/22\n203.90.8.0/22\n203.90.128.0/19\n203.90.160.0/19\n203.90.192.0/19\n203.91.32.0/19\n203.91.96.0/20\n203.91.120.0/21\n203.92.0.0/22\n203.92.160.0/19\n203.93.0.0/22\n203.93.4.0/22\n203.93.8.0/24\n203.93.9.0/24\n203.93.10.0/23\n203.93.12.0/22\n203.93.16.0/20\n203.93.32.0/19\n203.93.64.0/18\n203.93.128.0/21\n203.93.136.0/22\n203.93.140.0/24\n203.93.141.0/24\n203.93.142.0/23\n203.93.144.0/20\n203.93.160.0/19\n203.93.192.0/18\n203.94.0.0/22\n203.94.4.0/22\n203.94.8.0/21\n203.94.16.0/20\n203.95.0.0/21\n203.95.96.0/20\n203.95.112.0/20\n203.95.128.0/18\n203.95.224.0/19\n203.99.8.0/21\n203.99.16.0/20\n203.99.80.0/20\n203.100.32.0/20\n203.100.48.0/21\n203.100.63.0/24\n203.100.80.0/20\n203.100.96.0/19\n203.100.192.0/20\n203.104.32.0/20\n203.105.96.0/19\n203.105.128.0/19\n203.107.0.0/17\n203.110.160.0/19\n203.110.208.0/20\n203.110.232.0/23\n203.110.234.0/24\n203.114.244.0/22\n203.118.192.0/19\n203.118.241.0/24\n203.118.248.0/22\n203.119.24.0/21\n203.119.32.0/22\n203.119.80.0/22\n203.119.85.0/24\n203.119.113.0/24\n203.119.114.0/23\n203.119.116.0/22\n203.119.120.0/21\n203.119.128.0/17\n203.128.32.0/19\n203.128.96.0/19\n203.128.224.0/21\n203.129.8.0/21\n203.130.32.0/19\n203.132.32.0/19\n203.134.240.0/21\n203.135.96.0/20\n203.135.112.0/20\n203.135.160.0/20\n203.142.224.0/19\n203.144.96.0/19\n203.145.0.0/19\n203.148.0.0/18\n203.148.64.0/20\n203.148.80.0/22\n203.148.86.0/23\n203.149.92.0/22\n203.152.64.0/19\n203.152.128.0/19\n203.153.0.0/22\n203.156.192.0/18\n203.158.16.0/21\n203.160.104.0/21\n203.160.129.0/24\n203.160.192.0/19\n203.161.0.0/22\n203.161.180.0/24\n203.161.192.0/19\n203.166.160.0/19\n203.168.0.0/19\n203.170.58.0/23\n203.171.0.0/22\n203.171.224.0/20\n203.174.4.0/24\n203.174.7.0/24\n203.174.96.0/19\n203.175.128.0/19\n203.175.192.0/18\n203.176.0.0/18\n203.176.64.0/19\n203.176.168.0/21\n203.184.80.0/20\n203.187.160.0/19\n203.189.0.0/23\n203.189.6.0/23\n203.189.112.0/22\n203.189.192.0/19\n203.190.96.0/20\n203.190.249.0/24\n203.191.0.0/23\n203.191.16.0/20\n203.191.64.0/18\n203.191.144.0/21\n203.191.152.0/21\n203.192.0.0/19\n203.193.224.0/19\n203.194.120.0/21\n203.195.64.0/19\n203.195.112.0/21\n203.195.128.0/17\n203.196.0.0/21\n203.196.8.0/21\n203.202.236.0/22\n203.205.64.0/19\n203.205.128.0/17\n203.207.64.0/18\n203.207.128.0/17\n203.208.0.0/20\n203.208.16.0/22\n203.208.32.0/19\n203.209.224.0/19\n203.212.0.0/20\n203.212.80.0/20\n203.215.232.0/21\n203.222.192.0/20\n203.223.0.0/20\n203.223.16.0/21\n210.2.0.0/20\n210.2.16.0/20\n210.5.0.0/19\n210.5.56.0/21\n210.5.128.0/20\n210.5.144.0/20\n210.12.0.0/18\n210.12.64.0/18\n210.12.128.0/18\n210.12.192.0/18\n210.13.0.0/18\n210.13.64.0/18\n210.13.128.0/17\n210.14.64.0/19\n210.14.112.0/20\n210.14.128.0/19\n210.14.160.0/19\n210.14.192.0/19\n210.14.224.0/19\n210.15.0.0/19\n210.15.32.0/19\n210.15.64.0/19\n210.15.96.0/19\n210.15.128.0/18\n210.16.128.0/18\n210.21.0.0/17\n210.21.128.0/17\n210.22.0.0/16\n210.23.32.0/19\n210.25.0.0/16\n210.26.0.0/15\n210.28.0.0/14\n210.32.0.0/14\n210.36.0.0/14\n210.40.0.0/13\n210.48.136.0/21\n210.51.0.0/16\n210.52.0.0/18\n210.52.64.0/18\n210.52.128.0/17\n210.53.0.0/17\n210.53.128.0/17\n210.56.192.0/19\n210.72.0.0/17\n210.72.128.0/19\n210.72.160.0/19\n210.72.192.0/18\n210.73.0.0/19\n210.73.32.0/19\n210.73.64.0/18\n210.73.128.0/17\n210.74.0.0/19\n210.74.32.0/19\n210.74.64.0/19\n210.74.96.0/19\n210.74.128.0/19\n210.74.160.0/19\n210.74.192.0/18\n210.75.0.0/16\n210.76.0.0/19\n210.76.32.0/19\n210.76.64.0/18\n210.76.128.0/17\n210.77.0.0/16\n210.78.0.0/19\n210.78.32.0/19\n210.78.64.0/18\n210.78.128.0/19\n210.78.160.0/19\n210.78.192.0/18\n210.79.64.0/18\n210.79.224.0/19\n210.82.0.0/15\n210.87.128.0/20\n210.87.144.0/20\n210.87.160.0/19\n210.185.192.0/18\n210.192.96.0/19\n211.64.0.0/14\n211.68.0.0/15\n211.70.0.0/15\n211.80.0.0/16\n211.81.0.0/16\n211.82.0.0/16\n211.83.0.0/16\n211.84.0.0/15\n211.86.0.0/15\n211.88.0.0/16\n211.89.0.0/16\n211.90.0.0/15\n211.92.0.0/15\n211.94.0.0/15\n211.96.0.0/15\n211.98.0.0/16\n211.99.0.0/18\n211.99.64.0/19\n211.99.96.0/19\n211.99.128.0/17\n211.100.0.0/16\n211.101.0.0/18\n211.101.64.0/18\n211.101.128.0/17\n211.102.0.0/16\n211.103.0.0/17\n211.103.128.0/17\n211.136.0.0/14\n211.140.0.0/15\n211.142.0.0/17\n211.142.128.0/17\n211.143.0.0/16\n211.144.0.0/15\n211.146.0.0/16\n211.147.0.0/16\n211.148.0.0/14\n211.152.0.0/15\n211.154.0.0/16\n211.155.0.0/18\n211.155.64.0/19\n211.155.96.0/19\n211.155.128.0/17\n211.156.0.0/14\n211.160.0.0/14\n211.164.0.0/14\n218.0.0.0/16\n218.1.0.0/16\n218.2.0.0/15\n218.4.0.0/15\n218.6.0.0/16\n218.7.0.0/16\n218.8.0.0/15\n218.10.0.0/16\n218.11.0.0/16\n218.12.0.0/16\n218.13.0.0/16\n218.14.0.0/15\n218.16.0.0/14\n218.20.0.0/16\n218.21.0.0/17\n218.21.128.0/17\n218.22.0.0/15\n218.24.0.0/15\n218.26.0.0/16\n218.27.0.0/16\n218.28.0.0/15\n218.30.0.0/15\n218.56.0.0/14\n218.60.0.0/15\n218.62.0.0/17\n218.62.128.0/17\n218.63.0.0/16\n218.64.0.0/15\n218.66.0.0/16\n218.67.0.0/17\n218.67.128.0/17\n218.68.0.0/15\n218.70.0.0/15\n218.72.0.0/14\n218.76.0.0/15\n218.78.0.0/15\n218.80.0.0/14\n218.84.0.0/14\n218.88.0.0/13\n218.96.0.0/15\n218.98.0.0/17\n218.98.128.0/18\n218.98.192.0/19\n218.98.224.0/19\n218.99.0.0/16\n218.100.88.0/21\n218.100.96.0/19\n218.100.128.0/17\n218.104.0.0/17\n218.104.128.0/19\n218.104.160.0/19\n218.104.192.0/21\n218.104.200.0/21\n218.104.208.0/20\n218.104.224.0/19\n218.105.0.0/16\n218.106.0.0/15\n218.108.0.0/16\n218.109.0.0/16\n218.185.192.0/19\n218.185.240.0/21\n218.192.0.0/16\n218.193.0.0/16\n218.194.0.0/16\n218.195.0.0/16\n218.196.0.0/14\n218.200.0.0/14\n218.204.0.0/15\n218.206.0.0/15\n218.240.0.0/14\n218.244.0.0/15\n218.246.0.0/15\n218.249.0.0/16\n219.72.0.0/16\n219.82.0.0/16\n219.83.128.0/17\n219.128.0.0/12\n219.144.0.0/14\n219.148.0.0/16\n219.149.0.0/17\n219.149.128.0/18\n219.149.192.0/18\n219.150.0.0/19\n219.150.32.0/19\n219.150.64.0/19\n219.150.96.0/20\n219.150.112.0/20\n219.150.128.0/17\n219.151.0.0/19\n219.151.32.0/19\n219.151.64.0/18\n219.151.128.0/17\n219.152.0.0/15\n219.154.0.0/15\n219.156.0.0/15\n219.158.0.0/17\n219.158.128.0/17\n219.159.0.0/18\n219.159.64.0/18\n219.159.128.0/17\n219.216.0.0/15\n219.218.0.0/15\n219.220.0.0/16\n219.221.0.0/16\n219.222.0.0/15\n219.224.0.0/15\n219.226.0.0/16\n219.227.0.0/16\n219.228.0.0/15\n219.230.0.0/15\n219.232.0.0/14\n219.236.0.0/15\n219.238.0.0/15\n219.242.0.0/15\n219.244.0.0/14\n220.101.192.0/18\n220.112.0.0/14\n220.152.128.0/17\n220.154.0.0/15\n220.160.0.0/11\n220.192.0.0/15\n220.194.0.0/15\n220.196.0.0/14\n220.200.0.0/13\n220.231.0.0/18\n220.231.128.0/17\n220.232.64.0/18\n220.234.0.0/16\n220.242.0.0/15\n220.247.136.0/21\n220.248.0.0/14\n220.252.0.0/16\n221.0.0.0/15\n221.2.0.0/16\n221.3.0.0/17\n221.3.128.0/17\n221.4.0.0/16\n221.5.0.0/17\n221.5.128.0/17\n221.6.0.0/16\n221.7.0.0/19\n221.7.32.0/19\n221.7.64.0/19\n221.7.96.0/19\n221.7.128.0/17\n221.8.0.0/15\n221.10.0.0/16\n221.11.0.0/17\n221.11.128.0/18\n221.11.192.0/19\n221.11.224.0/19\n221.12.0.0/17\n221.12.128.0/18\n221.13.0.0/18\n221.13.64.0/19\n221.13.96.0/19\n221.13.128.0/17\n221.14.0.0/15\n221.122.0.0/15\n221.128.128.0/17\n221.129.0.0/16\n221.130.0.0/15\n221.133.224.0/19\n221.136.0.0/16\n221.137.0.0/16\n221.172.0.0/14\n221.176.0.0/13\n221.192.0.0/15\n221.194.0.0/16\n221.195.0.0/16\n221.196.0.0/15\n221.198.0.0/16\n221.199.0.0/19\n221.199.32.0/20\n221.199.48.0/20\n221.199.64.0/18\n221.199.128.0/18\n221.199.192.0/20\n221.199.224.0/19\n221.200.0.0/14\n221.204.0.0/15\n221.206.0.0/16\n221.207.0.0/18\n221.207.64.0/18\n221.207.128.0/17\n221.208.0.0/14\n221.212.0.0/16\n221.213.0.0/16\n221.214.0.0/15\n221.216.0.0/13\n221.224.0.0/13\n221.232.0.0/14\n221.236.0.0/15\n221.238.0.0/16\n221.239.0.0/17\n221.239.128.0/17\n222.16.0.0/15\n222.18.0.0/15\n222.20.0.0/15\n222.22.0.0/16\n222.23.0.0/16\n222.24.0.0/15\n222.26.0.0/15\n222.28.0.0/14\n222.32.0.0/11\n222.64.0.0/13\n222.72.0.0/15\n222.74.0.0/16\n222.75.0.0/16\n222.76.0.0/14\n222.80.0.0/15\n222.82.0.0/16\n222.83.0.0/17\n222.83.128.0/17\n222.84.0.0/16\n222.85.0.0/17\n222.85.128.0/17\n222.86.0.0/15\n222.88.0.0/15\n222.90.0.0/15\n222.92.0.0/14\n222.125.0.0/16\n222.126.128.0/17\n222.128.0.0/14\n222.132.0.0/14\n222.136.0.0/13\n222.160.0.0/15\n222.162.0.0/16\n222.163.0.0/19\n222.163.32.0/19\n222.163.64.0/18\n222.163.128.0/17\n222.168.0.0/15\n222.170.0.0/15\n222.172.0.0/17\n222.172.128.0/17\n222.173.0.0/16\n222.174.0.0/15\n222.176.0.0/13\n222.184.0.0/13\n222.192.0.0/14\n222.196.0.0/15\n222.198.0.0/16\n222.199.0.0/16\n222.200.0.0/14\n222.204.0.0/15\n222.206.0.0/15\n222.208.0.0/13\n222.216.0.0/15\n222.218.0.0/16\n222.219.0.0/16\n222.220.0.0/15\n222.222.0.0/15\n222.240.0.0/13\n222.248.0.0/16\n222.249.0.0/17\n222.249.128.0/19\n222.249.160.0/20\n222.249.176.0/20\n222.249.192.0/18\n223.0.0.0/15\n223.2.0.0/15\n223.4.0.0/14\n223.8.0.0/13\n223.20.0.0/15\n223.27.184.0/22\n223.64.0.0/11\n223.96.0.0/12\n223.112.0.0/14\n223.116.0.0/15\n223.120.0.0/13\n223.128.0.0/15\n223.144.0.0/12\n223.160.0.0/14\n223.166.0.0/15\n223.192.0.0/15\n223.198.0.0/15\n223.201.0.0/16\n223.202.0.0/15\n223.208.0.0/14\n223.212.0.0/15\n223.214.0.0/15\n223.220.0.0/15\n223.223.176.0/20\n223.223.192.0/20\n223.240.0.0/13\n223.248.0.0/14\n223.252.128.0/17\n223.254.0.0/16\n223.255.0.0/17\n223.255.236.0/22\n223.255.252.0/23\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/acl/local.acl",
    "content": "127.0.0.1\n::1\n10.0.0.0/8\n172.16.0.0/12\n192.168.0.0/16\nfc00::/7\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/aclocal.m4",
    "content": "# generated automatically by aclocal 1.14.1 -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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# 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\nm4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\nm4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,\n[m4_warning([this file was generated for autoconf 2.69.\nYou have another version of autoconf.  It may work, but is not guaranteed to.\nIf you have problems, you may need to regenerate the build system entirely.\nTo do so, use the procedure documented by the package, typically 'autoreconf'.])])\n\n# Copyright (C) 2002-2013 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.\n# (This private macro should not be called outside this file.)\nAC_DEFUN([AM_AUTOMAKE_VERSION],\n[am__api_version='1.14'\ndnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to\ndnl require some minimum version.  Point them to the right macro.\nm4_if([$1], [1.14.1], [],\n      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl\n])\n\n# _AM_AUTOCONF_VERSION(VERSION)\n# -----------------------------\n# aclocal traces this macro to find the Autoconf version.\n# This is a private macro too.  Using m4_define simplifies\n# the logic in aclocal, which can simply ignore this definition.\nm4_define([_AM_AUTOCONF_VERSION], [])\n\n# AM_SET_CURRENT_AUTOMAKE_VERSION\n# -------------------------------\n# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.\n# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.\nAC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\n[AM_AUTOMAKE_VERSION([1.14.1])dnl\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\n_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])\n\n# Copyright (C) 2011-2013 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_AR([ACT-IF-FAIL])\n# -------------------------\n# Try to determine the archiver interface, and trigger the ar-lib wrapper\n# if it is needed.  If the detection of archiver interface fails, run\n# ACT-IF-FAIL (default is to abort configure with a proper error message).\nAC_DEFUN([AM_PROG_AR],\n[AC_BEFORE([$0], [LT_INIT])dnl\nAC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl\nAC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\nAC_REQUIRE_AUX_FILE([ar-lib])dnl\nAC_CHECK_TOOLS([AR], [ar lib \"link -lib\"], [false])\n: ${AR=ar}\n\nAC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],\n  [AC_LANG_PUSH([C])\n   am_cv_ar_interface=ar\n   AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])],\n     [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD'\n      AC_TRY_EVAL([am_ar_try])\n      if test \"$ac_status\" -eq 0; then\n        am_cv_ar_interface=ar\n      else\n        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD'\n        AC_TRY_EVAL([am_ar_try])\n        if test \"$ac_status\" -eq 0; then\n          am_cv_ar_interface=lib\n        else\n          am_cv_ar_interface=unknown\n        fi\n      fi\n      rm -f conftest.lib libconftest.a\n     ])\n   AC_LANG_POP([C])])\n\ncase $am_cv_ar_interface in\nar)\n  ;;\nlib)\n  # Microsoft lib, so override with the ar-lib wrapper script.\n  # FIXME: It is wrong to rewrite AR.\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__AR in this case,\n  # and then we could set am__AR=\"$am_aux_dir/ar-lib \\$(AR)\" or something\n  # similar.\n  AR=\"$am_aux_dir/ar-lib $AR\"\n  ;;\nunknown)\n  m4_default([$1],\n             [AC_MSG_ERROR([could not determine $AR interface])])\n  ;;\nesac\nAC_SUBST([AR])dnl\n])\n\n# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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_COND_IF                                            -*- Autoconf -*-\n\n# Copyright (C) 2008-2013 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_COND_IF\n# _AM_COND_ELSE\n# _AM_COND_ENDIF\n# --------------\n# These macros are only used for tracing.\nm4_define([_AM_COND_IF])\nm4_define([_AM_COND_ELSE])\nm4_define([_AM_COND_ENDIF])\n\n# AM_COND_IF(COND, [IF-TRUE], [IF-FALSE])\n# ---------------------------------------\n# If the shell condition COND is true, execute IF-TRUE, otherwise execute\n# IF-FALSE.  Allow automake to learn about conditional instantiating macros\n# (the AC_CONFIG_FOOS).\nAC_DEFUN([AM_COND_IF],\n[m4_ifndef([_AM_COND_VALUE_$1],\n\t   [m4_fatal([$0: no such condition \"$1\"])])dnl\n_AM_COND_IF([$1])dnl\nif test -z \"$$1_TRUE\"; then :\n  m4_n([$2])[]dnl\nm4_ifval([$3],\n[_AM_COND_ELSE([$1])dnl\nelse\n  $3\n])dnl\n_AM_COND_ENDIF([$1])dnl\nfi[]dnl\n])\n\n# AM_CONDITIONAL                                            -*- Autoconf -*-\n\n# Copyright (C) 1997-2013 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_CONDITIONAL(NAME, SHELL-CONDITION)\n# -------------------------------------\n# Define a conditional.\nAC_DEFUN([AM_CONDITIONAL],\n[AC_PREREQ([2.52])dnl\n m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],\n       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl\nAC_SUBST([$1_TRUE])dnl\nAC_SUBST([$1_FALSE])dnl\n_AM_SUBST_NOTMAKE([$1_TRUE])dnl\n_AM_SUBST_NOTMAKE([$1_FALSE])dnl\nm4_define([_AM_COND_VALUE_$1], [$2])dnl\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# Copyright (C) 1999-2013 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\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\", \"OBJC\", \"OBJCXX\", \"UPC\", or \"GJC\".\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\nm4_if([$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], [OBJCXX], [depcc=\"$OBJCXX\" am_compiler_list='gcc3 gcc'],\n      [$1], [UPC],  [depcc=\"$UPC\"  am_compiler_list=],\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  rm -rf conftest.dir\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  am__universal=false\n  m4_case([$1], [CC],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac],\n    [CXX],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac])\n\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 10 /bin/sh.\n      echo '/* dummy */' > sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\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.  Also, some Intel\n    # versions had trouble with output in subdirs.\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvc7 | msvc7msys | msvisualcpp | msvcmsys)\n      # This compiler won't grok '-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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], [dnl\nAS_HELP_STRING(\n  [--enable-dependency-tracking],\n  [do not reject slow dependency extractors])\nAS_HELP_STRING(\n  [--disable-dependency-tracking],\n  [speeds up one-time build])])\nif test \"x$enable_dependency_tracking\" != xno; then\n  am_depcomp=\"$ac_aux_dir/depcomp\"\n  AMDEPBACKSLASH='\\'\n  am__nodep='_no'\nfi\nAM_CONDITIONAL([AMDEP], [test \"x$enable_dependency_tracking\" != xno])\nAC_SUBST([AMDEPBACKSLASH])dnl\n_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl\nAC_SUBST([am__nodep])dnl\n_AM_SUBST_NOTMAKE([am__nodep])dnl\n])\n\n# Generate code to set up dependency tracking.              -*- Autoconf -*-\n\n# Copyright (C) 1999-2013 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\n# _AM_OUTPUT_DEPENDENCY_COMMANDS\n# ------------------------------\nAC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],\n[{\n  # Older Autoconf quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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    # 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\t sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/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\n  done\n}\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# Do all the work for Automake.                             -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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# 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\ndnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.\nm4_define([AC_PROG_CC],\nm4_defn([AC_PROG_CC])\n[_AM_PROG_CC_C_O\n])\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.65])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\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])\n  fi\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[AC_DIAGNOSE([obsolete],\n             [$0: two- and three-arguments forms are deprecated.])\nm4_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\ndnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.\nm4_if(\n  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),\n  [ok:ok],,\n  [m4_fatal([AC_INIT should be called with package and version arguments])])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])\nAC_REQUIRE([AM_PROG_INSTALL_SH])dnl\nAC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl\nAC_REQUIRE([AC_PROG_MKDIR_P])dnl\n# For better backward compatibility.  To be removed once Automake 1.9.x\n# dies out for good.  For more background, see:\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>\nAC_SUBST([mkdir_p], ['$(MKDIR_P)'])\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\t      [_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\t\t  [_AM_DEPENDENCIES([CC])],\n\t\t  [m4_define([AC_PROG_CC],\n\t\t\t     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_CXX],\n\t\t  [_AM_DEPENDENCIES([CXX])],\n\t\t  [m4_define([AC_PROG_CXX],\n\t\t\t     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_OBJC],\n\t\t  [_AM_DEPENDENCIES([OBJC])],\n\t\t  [m4_define([AC_PROG_OBJC],\n\t\t\t     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_OBJCXX],\n\t\t  [_AM_DEPENDENCIES([OBJCXX])],\n\t\t  [m4_define([AC_PROG_OBJCXX],\n\t\t\t     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl\n])\nAC_REQUIRE([AM_SILENT_RULES])dnl\ndnl The testsuite driver may need to know about EXEEXT, so add the\ndnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This\ndnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.\nAC_CONFIG_COMMANDS_PRE(dnl\n[m4_provide_if([_AM_COMPILER_EXEEXT],\n  [AM_CONDITIONAL([am__EXEEXT], [test -n \"$EXEEXT\"])])])dnl\n\n# POSIX will say in a future version that running \"rm -f\" with no argument\n# is OK; and we want to be able to make that assumption in our Makefile\n# recipes.  So use an aggressive probe to check that the usage we want is\n# actually supported \"in the wild\" to an acceptable degree.\n# See automake bug#10828.\n# To make any issue more visible, cause the running configure to be aborted\n# by default if the 'rm' program in use doesn't match our expectations; the\n# user can still override this though.\nif rm -f && rm -fr && rm -rf; then : OK; else\n  cat >&2 <<'END'\nOops!\n\nYour 'rm' program seems unable to run without file operands specified\non the command line, even when the '-f' option is present.  This is contrary\nto the behaviour of most rm programs out there, and not conforming with\nthe upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>\n\nPlease tell bug-automake@gnu.org about your system, including the value\nof your $PATH and any error possibly output before this message.  This\ncan help us improve future automake versions.\n\nEND\n  if test x\"$ACCEPT_INFERIOR_RM_PROGRAM\" = x\"yes\"; then\n    echo 'Configuration will proceed anyway, since you have set the' >&2\n    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to \"yes\"' >&2\n    echo >&2\n  else\n    cat >&2 <<'END'\nAborting the configuration process, to ensure you take notice of the issue.\n\nYou can download and install GNU coreutils to get an 'rm' implementation\nthat behaves properly: <http://www.gnu.org/software/coreutils/>.\n\nIf you want to complete the configuration process using your problematic\n'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM\nto \"yes\", and re-run configure.\n\nEND\n    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])\n  fi\nfi])\n\ndnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not\ndnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further\ndnl mangled by Autoconf and run in a shell conditional statement.\nm4_define([_AC_COMPILER_EXEEXT],\nm4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])\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_arg=$1\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $_am_arg | $_am_arg:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $_am_arg\" >`AS_DIRNAME([\"$_am_arg\"])`/stamp-h[]$_am_stamp_count])\n\n# Copyright (C) 2001-2013 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\nif test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\nAC_SUBST([install_sh])])\n\n# Copyright (C) 2003-2013 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# 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# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-\n# From Jim Meyering\n\n# Copyright (C) 1996-2013 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_MAINTAINER_MODE([DEFAULT-MODE])\n# ----------------------------------\n# Control maintainer-specific portions of Makefiles.\n# Default is to disable them, unless 'enable' is passed literally.\n# For symmetry, 'disable' may be passed as well.  Anyway, the user\n# can override the default with the --enable/--disable switch.\nAC_DEFUN([AM_MAINTAINER_MODE],\n[m4_case(m4_default([$1], [disable]),\n       [enable], [m4_define([am_maintainer_other], [disable])],\n       [disable], [m4_define([am_maintainer_other], [enable])],\n       [m4_define([am_maintainer_other], [enable])\n        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])\nAC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])\n  dnl maintainer-mode's default is 'disable' unless 'enable' is passed\n  AC_ARG_ENABLE([maintainer-mode],\n    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],\n      am_maintainer_other[ make rules and dependencies not useful\n      (and sometimes confusing) to the casual installer])],\n    [USE_MAINTAINER_MODE=$enableval],\n    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))\n  AC_MSG_RESULT([$USE_MAINTAINER_MODE])\n  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])\n  MAINT=$MAINTAINER_MODE_TRUE\n  AC_SUBST([MAINT])dnl\n]\n)\n\n# Check to see how 'make' treats includes.\t            -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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_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 this is the am__doit target\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# Ignore all kinds of additional output from 'make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\nfi\nAC_SUBST([am__include])\nAC_SUBST([am__quote])\nAC_MSG_RESULT([$_am_result])\nrm -f confinc confmf\n])\n\n# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-\n\n# Copyright (C) 1997-2013 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_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# AM_MISSING_HAS_RUN\n# ------------------\n# Define MISSING if not defined so far and test if it is modern enough.\n# If it is, set am_missing_run to use it, otherwise, to nothing.\nAC_DEFUN([AM_MISSING_HAS_RUN],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\nAC_REQUIRE_AUX_FILE([missing])dnl\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\n# Use eval to expand $SHELL\nif eval \"$MISSING --is-lightweight\"; then\n  am_missing_run=\"$MISSING \"\nelse\n  am_missing_run=\n  AC_MSG_WARN(['missing' script is too old or missing])\nfi\n])\n\n# Helper functions for option handling.                     -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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_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[m4_foreach_w([_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) 1999-2013 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_CC_C_O\n# ---------------\n# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC\n# to automatically call this.\nAC_DEFUN([_AM_PROG_CC_C_O],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\nAC_REQUIRE_AUX_FILE([compile])dnl\nAC_LANG_PUSH([C])dnl\nAC_CACHE_CHECK(\n  [whether $CC understands -c and -o together],\n  [am_cv_prog_cc_c_o],\n  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])\n  # Make sure it works both with $CC and with simple cc.\n  # Following AC_PROG_CC_C_O, we do the test twice because some\n  # compilers refuse to overwrite an existing .o file with -o,\n  # though they will create one.\n  am_cv_prog_cc_c_o=yes\n  for am_i in 1 2; do\n    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \\\n         && test -f conftest2.$ac_objext; then\n      : OK\n    else\n      am_cv_prog_cc_c_o=no\n      break\n    fi\n  done\n  rm -f core conftest*\n  unset am_i])\nif test \"$am_cv_prog_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\nAC_LANG_POP([C])])\n\n# For backward compatibility.\nAC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])\n\n# Copyright (C) 2001-2013 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_RUN_LOG(COMMAND)\n# -------------------\n# Run COMMAND, save the exit status in ac_status, and log it.\n# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)\nAC_DEFUN([AM_RUN_LOG],\n[{ echo \"$as_me:$LINENO: $1\" >&AS_MESSAGE_LOG_FD\n   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   (exit $ac_status); }])\n\n# Check to make sure that the build environment is sane.    -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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_SANITY_CHECK\n# ---------------\nAC_DEFUN([AM_SANITY_CHECK],\n[AC_MSG_CHECKING([whether build environment is sane])\n# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]]*)\n    AC_MSG_ERROR([unsafe absolute working directory name]);;\nesac\ncase $srcdir in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]]*)\n    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;\nesac\n\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   am_has_slept=no\n   for am_try in 1 2; do\n     echo \"timestamp, slept: $am_has_slept\" > conftest.file\n     set X `ls -Lt \"$srcdir/configure\" conftest.file 2> /dev/null`\n     if test \"$[*]\" = \"X\"; then\n\t# -L didn't work.\n\tset X `ls -t \"$srcdir/configure\" conftest.file`\n     fi\n     if test \"$[*]\" != \"X $srcdir/configure conftest.file\" \\\n\t&& test \"$[*]\" != \"X conftest.file $srcdir/configure\"; then\n\n\t# If neither matched, then we have a broken ls.  This can happen\n\t# if, for instance, CONFIG_SHELL is bash and it inherits a\n\t# broken ls alias from the environment.  This has actually\n\t# happened.  Such a system could not be considered \"sane\".\n\tAC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken\n  alias in your environment])\n     fi\n     if test \"$[2]\" = conftest.file || test $am_try -eq 2; then\n       break\n     fi\n     # Just in case.\n     sleep 1\n     am_has_slept=yes\n   done\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# If we didn't sleep, we still need to ensure time stamps of config.status and\n# generated files are strictly newer.\nam_sleep_pid=\nif grep 'slept: no' conftest.file >/dev/null 2>&1; then\n  ( sleep 1 ) &\n  am_sleep_pid=$!\nfi\nAC_CONFIG_COMMANDS_PRE(\n  [AC_MSG_CHECKING([that generated files are newer than configure])\n   if test -n \"$am_sleep_pid\"; then\n     # Hide warnings about reused PIDs.\n     wait $am_sleep_pid 2>/dev/null\n   fi\n   AC_MSG_RESULT([done])])\nrm -f conftest.file\n])\n\n# Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT])\n# --------------------------\n# Enable less verbose build rules; with the default set to DEFAULT\n# (\"yes\" being less verbose, \"no\" or empty being verbose).\nAC_DEFUN([AM_SILENT_RULES],\n[AC_ARG_ENABLE([silent-rules], [dnl\nAS_HELP_STRING(\n  [--enable-silent-rules],\n  [less verbose build output (undo: \"make V=1\")])\nAS_HELP_STRING(\n  [--disable-silent-rules],\n  [verbose build output (undo: \"make V=0\")])dnl\n])\ncase $enable_silent_rules in @%:@ (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;\nesac\ndnl\ndnl A few 'make' implementations (e.g., NonStop OS and NextStep)\ndnl do not support nested variable expansions.\ndnl See automake bug#9928 and bug#10237.\nam_make=${MAKE-make}\nAC_CACHE_CHECK([whether $am_make supports nested variables],\n   [am_cv_make_support_nested_variables],\n   [if AS_ECHO([['TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi])\nif test $am_cv_make_support_nested_variables = yes; then\n  dnl Using '$V' instead of '$(V)' breaks IRIX make.\n  AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAC_SUBST([AM_V])dnl\nAM_SUBST_NOTMAKE([AM_V])dnl\nAC_SUBST([AM_DEFAULT_V])dnl\nAM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl\nAC_SUBST([AM_DEFAULT_VERBOSITY])dnl\nAM_BACKSLASH='\\'\nAC_SUBST([AM_BACKSLASH])dnl\n_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl\n])\n\n# Copyright (C) 2001-2013 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=\"\\$(install_sh) -c -s\"\nAC_SUBST([INSTALL_STRIP_PROGRAM])])\n\n# Copyright (C) 2006-2013 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_SUBST_NOTMAKE(VARIABLE)\n# ---------------------------\n# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.\n# This macro is traced by Automake.\nAC_DEFUN([_AM_SUBST_NOTMAKE])\n\n# AM_SUBST_NOTMAKE(VARIABLE)\n# --------------------------\n# Public sister of _AM_SUBST_NOTMAKE.\nAC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])\n\n# Check how to create a tarball.                            -*- Autoconf -*-\n\n# Copyright (C) 2004-2013 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_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\n#\nAC_DEFUN([_AM_PROG_TAR],\n[# Always define AMTAR for backward compatibility.  Yes, it's still used\n# in the wild :-(  We should find a proper way to deprecate it ...\nAC_SUBST([AMTAR], ['$${TAR-tar}'])\n\n# We'll 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\nm4_if([$1], [v7],\n  [am__tar='$${TAR-tar} chof - \"$$tardir\"' am__untar='$${TAR-tar} xf -'],\n\n  [m4_case([$1],\n    [ustar],\n     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.\n      # There is notably a 21 bits limit for the UID and the GID.  In fact,\n      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343\n      # and bug#13588).\n      am_max_uid=2097151 # 2^21 - 1\n      am_max_gid=$am_max_uid\n      # The $UID and $GID variables are not portable, so we need to resort\n      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls\n      # below are definitely unexpected, so allow the users to see them\n      # (that is, avoid stderr redirection).\n      am_uid=`id -u || echo unknown`\n      am_gid=`id -g || echo unknown`\n      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])\n      if test $am_uid -le $am_max_uid; then\n         AC_MSG_RESULT([yes])\n      else\n         AC_MSG_RESULT([no])\n         _am_tools=none\n      fi\n      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])\n      if test $am_gid -le $am_max_gid; then\n         AC_MSG_RESULT([yes])\n      else\n        AC_MSG_RESULT([no])\n        _am_tools=none\n      fi],\n\n  [pax],\n    [],\n\n  [m4_fatal([Unknown tar format])])\n\n  AC_MSG_CHECKING([how to create a $1 tar archive])\n\n  # Go ahead even if we have the value already cached.  We do so because we\n  # need to set the values for the 'am__tar' and 'am__untar' variables.\n  _am_tools=${am_cv_prog_tar_$1-$_am_tools}\n\n  for _am_tool in $_am_tools; do\n    case $_am_tool in\n    gnutar)\n      for _am_tar in tar gnutar gtar; 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      AM_RUN_LOG([cat conftest.dir/file])\n      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break\n    fi\n  done\n  rm -rf conftest.dir\n\n  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])\n  AC_MSG_RESULT([$am_cv_prog_tar_$1])])\n\nAC_SUBST([am__tar])\nAC_SUBST([am__untar])\n]) # _AM_PROG_TAR\n\nm4_include([m4/ax_pthread.m4])\nm4_include([m4/ax_tls.m4])\nm4_include([m4/inet_ntop.m4])\nm4_include([m4/libtool.m4])\nm4_include([m4/ltoptions.m4])\nm4_include([m4/ltsugar.m4])\nm4_include([m4/ltversion.m4])\nm4_include([m4/lt~obsolete.m4])\nm4_include([m4/mbedtls.m4])\nm4_include([m4/openssl.m4])\nm4_include([m4/polarssl.m4])\nm4_include([m4/stack-protector.m4])\nm4_include([m4/zlib.m4])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/ar-lib",
    "content": "#! /bin/sh\n# Wrapper for Microsoft lib.exe\n\nme=ar-lib\nscriptversion=2012-03-01.08; # UTC\n\n# Copyright (C) 2010-2013 Free Software Foundation, Inc.\n# Written by Peter Rosin <peda@lysator.liu.se>.\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, see <http://www.gnu.org/licenses/>.\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\n\n# func_error message\nfunc_error ()\n{\n  echo \"$me: $1\" 1>&2\n  exit 1\n}\n\nfile_conv=\n\n# func_file_conv build_file\n# Convert a $build file to $host form and store it in $file\n# Currently only supports Windows hosts.\nfunc_file_conv ()\n{\n  file=$1\n  case $file in\n    / | /[!/]*) # absolute file, and not a UNC file\n      if test -z \"$file_conv\"; then\n\t# lazily determine how to convert abs files\n\tcase `uname -s` in\n\t  MINGW*)\n\t    file_conv=mingw\n\t    ;;\n\t  CYGWIN*)\n\t    file_conv=cygwin\n\t    ;;\n\t  *)\n\t    file_conv=wine\n\t    ;;\n\tesac\n      fi\n      case $file_conv in\n\tmingw)\n\t  file=`cmd //C echo \"$file \" | sed -e 's/\"\\(.*\\) \" *$/\\1/'`\n\t  ;;\n\tcygwin)\n\t  file=`cygpath -m \"$file\" || echo \"$file\"`\n\t  ;;\n\twine)\n\t  file=`winepath -w \"$file\" || echo \"$file\"`\n\t  ;;\n      esac\n      ;;\n  esac\n}\n\n# func_at_file at_file operation archive\n# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE\n# for each of them.\n# When interpreting the content of the @FILE, do NOT use func_file_conv,\n# since the user would need to supply preconverted file names to\n# binutils ar, at least for MinGW.\nfunc_at_file ()\n{\n  operation=$2\n  archive=$3\n  at_file_contents=`cat \"$1\"`\n  eval set x \"$at_file_contents\"\n  shift\n\n  for member\n  do\n    $AR -NOLOGO $operation:\"$member\" \"$archive\" || exit $?\n  done\n}\n\ncase $1 in\n  '')\n     func_error \"no command.  Try '$0 --help' for more information.\"\n     ;;\n  -h | --h*)\n    cat <<EOF\nUsage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...]\n\nMembers may be specified in a file named with @FILE.\nEOF\n    exit $?\n    ;;\n  -v | --v*)\n    echo \"$me, version $scriptversion\"\n    exit $?\n    ;;\nesac\n\nif test $# -lt 3; then\n  func_error \"you must specify a program, an action and an archive\"\nfi\n\nAR=$1\nshift\nwhile :\ndo\n  if test $# -lt 2; then\n    func_error \"you must specify a program, an action and an archive\"\n  fi\n  case $1 in\n    -lib | -LIB \\\n    | -ltcg | -LTCG \\\n    | -machine* | -MACHINE* \\\n    | -subsystem* | -SUBSYSTEM* \\\n    | -verbose | -VERBOSE \\\n    | -wx* | -WX* )\n      AR=\"$AR $1\"\n      shift\n      ;;\n    *)\n      action=$1\n      shift\n      break\n      ;;\n  esac\ndone\norig_archive=$1\nshift\nfunc_file_conv \"$orig_archive\"\narchive=$file\n\n# strip leading dash in $action\naction=${action#-}\n\ndelete=\nextract=\nlist=\nquick=\nreplace=\nindex=\ncreate=\n\nwhile test -n \"$action\"\ndo\n  case $action in\n    d*) delete=yes  ;;\n    x*) extract=yes ;;\n    t*) list=yes    ;;\n    q*) quick=yes   ;;\n    r*) replace=yes ;;\n    s*) index=yes   ;;\n    S*)             ;; # the index is always updated implicitly\n    c*) create=yes  ;;\n    u*)             ;; # TODO: don't ignore the update modifier\n    v*)             ;; # TODO: don't ignore the verbose modifier\n    *)\n      func_error \"unknown action specified\"\n      ;;\n  esac\n  action=${action#?}\ndone\n\ncase $delete$extract$list$quick$replace,$index in\n  yes,* | ,yes)\n    ;;\n  yesyes*)\n    func_error \"more than one action specified\"\n    ;;\n  *)\n    func_error \"no action specified\"\n    ;;\nesac\n\nif test -n \"$delete\"; then\n  if test ! -f \"$orig_archive\"; then\n    func_error \"archive not found\"\n  fi\n  for member\n  do\n    case $1 in\n      @*)\n        func_at_file \"${1#@}\" -REMOVE \"$archive\"\n        ;;\n      *)\n        func_file_conv \"$1\"\n        $AR -NOLOGO -REMOVE:\"$file\" \"$archive\" || exit $?\n        ;;\n    esac\n  done\n\nelif test -n \"$extract\"; then\n  if test ! -f \"$orig_archive\"; then\n    func_error \"archive not found\"\n  fi\n  if test $# -gt 0; then\n    for member\n    do\n      case $1 in\n        @*)\n          func_at_file \"${1#@}\" -EXTRACT \"$archive\"\n          ;;\n        *)\n          func_file_conv \"$1\"\n          $AR -NOLOGO -EXTRACT:\"$file\" \"$archive\" || exit $?\n          ;;\n      esac\n    done\n  else\n    $AR -NOLOGO -LIST \"$archive\" | sed -e 's/\\\\/\\\\\\\\/g' | while read member\n    do\n      $AR -NOLOGO -EXTRACT:\"$member\" \"$archive\" || exit $?\n    done\n  fi\n\nelif test -n \"$quick$replace\"; then\n  if test ! -f \"$orig_archive\"; then\n    if test -z \"$create\"; then\n      echo \"$me: creating $orig_archive\"\n    fi\n    orig_archive=\n  else\n    orig_archive=$archive\n  fi\n\n  for member\n  do\n    case $1 in\n    @*)\n      func_file_conv \"${1#@}\"\n      set x \"$@\" \"@$file\"\n      ;;\n    *)\n      func_file_conv \"$1\"\n      set x \"$@\" \"$file\"\n      ;;\n    esac\n    shift\n    shift\n  done\n\n  if test -n \"$orig_archive\"; then\n    $AR -NOLOGO -OUT:\"$archive\" \"$orig_archive\" \"$@\" || exit $?\n  else\n    $AR -NOLOGO -OUT:\"$archive\" \"$@\" || exit $?\n  fi\n\nelif test -n \"$list\"; then\n  if test ! -f \"$orig_archive\"; then\n    func_error \"archive not found\"\n  fi\n  $AR -NOLOGO -LIST \"$archive\" || exit $?\nfi\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/compile",
    "content": "#! /bin/sh\n# Wrapper for compilers which do not understand '-c -o'.\n\nscriptversion=2012-10-14.11; # UTC\n\n# Copyright (C) 1999-2013 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, see <http://www.gnu.org/licenses/>.\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\nnl='\n'\n\n# We need space, tab and new line, in precisely that order.  Quoting is\n# there to prevent tools from complaining about whitespace usage.\nIFS=\" \"\"\t$nl\"\n\nfile_conv=\n\n# func_file_conv build_file lazy\n# Convert a $build file to $host form and store it in $file\n# Currently only supports Windows hosts. If the determined conversion\n# type is listed in (the comma separated) LAZY, no conversion will\n# take place.\nfunc_file_conv ()\n{\n  file=$1\n  case $file in\n    / | /[!/]*) # absolute file, and not a UNC file\n      if test -z \"$file_conv\"; then\n\t# lazily determine how to convert abs files\n\tcase `uname -s` in\n\t  MINGW*)\n\t    file_conv=mingw\n\t    ;;\n\t  CYGWIN*)\n\t    file_conv=cygwin\n\t    ;;\n\t  *)\n\t    file_conv=wine\n\t    ;;\n\tesac\n      fi\n      case $file_conv/,$2, in\n\t*,$file_conv,*)\n\t  ;;\n\tmingw/*)\n\t  file=`cmd //C echo \"$file \" | sed -e 's/\"\\(.*\\) \" *$/\\1/'`\n\t  ;;\n\tcygwin/*)\n\t  file=`cygpath -m \"$file\" || echo \"$file\"`\n\t  ;;\n\twine/*)\n\t  file=`winepath -w \"$file\" || echo \"$file\"`\n\t  ;;\n      esac\n      ;;\n  esac\n}\n\n# func_cl_dashL linkdir\n# Make cl look for libraries in LINKDIR\nfunc_cl_dashL ()\n{\n  func_file_conv \"$1\"\n  if test -z \"$lib_path\"; then\n    lib_path=$file\n  else\n    lib_path=\"$lib_path;$file\"\n  fi\n  linker_opts=\"$linker_opts -LIBPATH:$file\"\n}\n\n# func_cl_dashl library\n# Do a library search-path lookup for cl\nfunc_cl_dashl ()\n{\n  lib=$1\n  found=no\n  save_IFS=$IFS\n  IFS=';'\n  for dir in $lib_path $LIB\n  do\n    IFS=$save_IFS\n    if $shared && test -f \"$dir/$lib.dll.lib\"; then\n      found=yes\n      lib=$dir/$lib.dll.lib\n      break\n    fi\n    if test -f \"$dir/$lib.lib\"; then\n      found=yes\n      lib=$dir/$lib.lib\n      break\n    fi\n    if test -f \"$dir/lib$lib.a\"; then\n      found=yes\n      lib=$dir/lib$lib.a\n      break\n    fi\n  done\n  IFS=$save_IFS\n\n  if test \"$found\" != yes; then\n    lib=$lib.lib\n  fi\n}\n\n# func_cl_wrapper cl arg...\n# Adjust compile command to suit cl\nfunc_cl_wrapper ()\n{\n  # Assume a capable shell\n  lib_path=\n  shared=:\n  linker_opts=\n  for arg\n  do\n    if test -n \"$eat\"; then\n      eat=\n    else\n      case $1 in\n\t-o)\n\t  # configure might choose to run compile as 'compile cc -o foo foo.c'.\n\t  eat=1\n\t  case $2 in\n\t    *.o | *.[oO][bB][jJ])\n\t      func_file_conv \"$2\"\n\t      set x \"$@\" -Fo\"$file\"\n\t      shift\n\t      ;;\n\t    *)\n\t      func_file_conv \"$2\"\n\t      set x \"$@\" -Fe\"$file\"\n\t      shift\n\t      ;;\n\t  esac\n\t  ;;\n\t-I)\n\t  eat=1\n\t  func_file_conv \"$2\" mingw\n\t  set x \"$@\" -I\"$file\"\n\t  shift\n\t  ;;\n\t-I*)\n\t  func_file_conv \"${1#-I}\" mingw\n\t  set x \"$@\" -I\"$file\"\n\t  shift\n\t  ;;\n\t-l)\n\t  eat=1\n\t  func_cl_dashl \"$2\"\n\t  set x \"$@\" \"$lib\"\n\t  shift\n\t  ;;\n\t-l*)\n\t  func_cl_dashl \"${1#-l}\"\n\t  set x \"$@\" \"$lib\"\n\t  shift\n\t  ;;\n\t-L)\n\t  eat=1\n\t  func_cl_dashL \"$2\"\n\t  ;;\n\t-L*)\n\t  func_cl_dashL \"${1#-L}\"\n\t  ;;\n\t-static)\n\t  shared=false\n\t  ;;\n\t-Wl,*)\n\t  arg=${1#-Wl,}\n\t  save_ifs=\"$IFS\"; IFS=','\n\t  for flag in $arg; do\n\t    IFS=\"$save_ifs\"\n\t    linker_opts=\"$linker_opts $flag\"\n\t  done\n\t  IFS=\"$save_ifs\"\n\t  ;;\n\t-Xlinker)\n\t  eat=1\n\t  linker_opts=\"$linker_opts $2\"\n\t  ;;\n\t-*)\n\t  set x \"$@\" \"$1\"\n\t  shift\n\t  ;;\n\t*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)\n\t  func_file_conv \"$1\"\n\t  set x \"$@\" -Tp\"$file\"\n\t  shift\n\t  ;;\n\t*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])\n\t  func_file_conv \"$1\" mingw\n\t  set x \"$@\" \"$file\"\n\t  shift\n\t  ;;\n\t*)\n\t  set x \"$@\" \"$1\"\n\t  shift\n\t  ;;\n      esac\n    fi\n    shift\n  done\n  if test -n \"$linker_opts\"; then\n    linker_opts=\"-link$linker_opts\"\n  fi\n  exec \"$@\" $linker_opts\n  exit 1\n}\n\neat=\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    ;;\n  cl | *[/\\\\]cl | cl.exe | *[/\\\\]cl.exe )\n    func_cl_wrapper \"$@\"      # Doesn't return...\n    ;;\nesac\n\nofile=\ncfile=\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 's|^.*[\\\\/]||; s|^[a-zA-Z]:||; 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  test \"$cofile\" = \"$ofile\" || mv \"$cofile\" \"$ofile\"\nelif test -f \"${cofile}bj\"; then\n  test \"${cofile}bj\" = \"$ofile\" || 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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/config.guess",
    "content": "#! /bin/sh\n# Attempt to guess a canonical system name.\n#   Copyright 1992-2013 Free Software Foundation, Inc.\n\ntimestamp='2013-06-10'\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 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, 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, see <http://www.gnu.org/licenses/>.\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\n# program.  This Exception is an additional permission under section 7\n# of the GNU General Public License, version 3 (\"GPLv3\").\n#\n# Originally written by Per Bothner.\n#\n# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\n#\n# Please send patches with a ChangeLog entry to config-patches@gnu.org.\n\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 1992-2013 Free 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\ncase \"${UNAME_SYSTEM}\" in\nLinux|GNU|GNU/*)\n\t# If the system lacks a compiler, then just pick glibc.\n\t# We could probably try harder.\n\tLIBC=gnu\n\n\teval $set_cc_for_build\n\tcat <<-EOF > $dummy.c\n\t#include <features.h>\n\t#if defined(__UCLIBC__)\n\tLIBC=uclibc\n\t#elif defined(__dietlibc__)\n\tLIBC=dietlibc\n\t#else\n\tLIBC=gnu\n\t#endif\n\tEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`\n\t;;\nesac\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 tuples: *-*-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    sh5el) machine=sh5le-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 -q __ELF__\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\tos=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    *:Bitrig:*:*)\n\tUNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`\n\techo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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 powerpc-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\tUNAME_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\t# Reset EXIT trap before exiting to avoid spurious non-zero exit code.\n\texitcode=$?\n\ttrap '' 0\n\texit $exitcode ;;\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\techo 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    s390x:SunOS:*:*)\n\techo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)\n\techo i386-pc-auroraux${UNAME_RELEASE}\n\texit ;;\n    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)\n\teval $set_cc_for_build\n\tSUN_ARCH=\"i386\"\n\t# If there is a compiler, see if it is configured for 64-bit objects.\n\t# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.\n\t# This test works for both compilers.\n\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\tgrep IS_64BIT_ARCH >/dev/null\n\t    then\n\t\tSUN_ARCH=\"x86_64\"\n\t    fi\n\tfi\n\techo ${SUN_ARCH}-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\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)\n\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)\n\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)\n\techo m68k-milan-mint${UNAME_RELEASE}\n\texit ;;\n    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)\n\techo m68k-hades-mint${UNAME_RELEASE}\n\texit ;;\n    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)\n\techo m68k-unknown-mint${UNAME_RELEASE}\n\texit ;;\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\t# DG/UX returns AViiON for all architectures\n\tUNAME_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:*:[4567])\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\t\t    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`\n\t\t    case \"${sc_cpu_version}\" in\n\t\t      523) HP_ARCH=\"hppa1.0\" ;; # CPU_PA_RISC1_0\n\t\t      528) HP_ARCH=\"hppa1.1\" ;; # CPU_PA_RISC1_1\n\t\t      532)                      # CPU_PA_RISC2_0\n\t\t\tcase \"${sc_kernel_bits}\" in\n\t\t\t  32) HP_ARCH=\"hppa2.0n\" ;;\n\t\t\t  64) HP_ARCH=\"hppa2.0w\" ;;\n\t\t\t  '') HP_ARCH=\"hppa2.0\" ;;   # HP-UX 10.20\n\t\t\tesac ;;\n\t\t    esac\n\t\tfi\n\t\tif [ \"${HP_ARCH}\" = \"\" ]; then\n\t\t    eval $set_cc_for_build\n\t\t    sed 's/^\t\t//' << EOF >$dummy.c\n\n\t\t#define _HPUX_SOURCE\n\t\t#include <stdlib.h>\n\t\t#include <unistd.h>\n\n\t\tint main ()\n\t\t{\n\t\t#if defined(_SC_KERNEL_BITS)\n\t\t    long bits = sysconf(_SC_KERNEL_BITS);\n\t\t#endif\n\t\t    long cpu  = sysconf (_SC_CPU_VERSION);\n\n\t\t    switch (cpu)\n\t\t\t{\n\t\t\tcase CPU_PA_RISC1_0: puts (\"hppa1.0\"); break;\n\t\t\tcase CPU_PA_RISC1_1: puts (\"hppa1.1\"); break;\n\t\t\tcase CPU_PA_RISC2_0:\n\t\t#if defined(_SC_KERNEL_BITS)\n\t\t\t    switch (bits)\n\t\t\t\t{\n\t\t\t\tcase 64: puts (\"hppa2.0w\"); break;\n\t\t\t\tcase 32: puts (\"hppa2.0n\"); break;\n\t\t\t\tdefault: puts (\"hppa2.0\"); break;\n\t\t\t\t} break;\n\t\t#else  /* !defined(_SC_KERNEL_BITS) */\n\t\t\t    puts (\"hppa2.0\"); break;\n\t\t#endif\n\t\t\tdefault: puts (\"hppa1.0\"); break;\n\t\t\t}\n\t\t    exit (0);\n\t\t}\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 -q __LP64__\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\texit ;;\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\texit ;;\n    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)\n\techo c34-convex-bsd\n\texit ;;\n    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)\n\techo c38-convex-bsd\n\texit ;;\n    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)\n\techo c4-convex-bsd\n\texit ;;\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\tFUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n\tFUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`\n\techo \"${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}\"\n\texit ;;\n    5000:UNIX_System_V:4.*:*)\n\tFUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n\tFUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`\n\techo \"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\tUNAME_PROCESSOR=`/usr/bin/uname -p`\n\tcase ${UNAME_PROCESSOR} in\n\t    amd64)\n\t\techo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\t    *)\n\t\techo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\tesac\n\texit ;;\n    i*:CYGWIN*:*)\n\techo ${UNAME_MACHINE}-pc-cygwin\n\texit ;;\n    *:MINGW64*:*)\n\techo ${UNAME_MACHINE}-pc-mingw64\n\texit ;;\n    *:MINGW*:*)\n\techo ${UNAME_MACHINE}-pc-mingw32\n\texit ;;\n    i*:MSYS*:*)\n\techo ${UNAME_MACHINE}-pc-msys\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    *:Interix*:*)\n\tcase ${UNAME_MACHINE} in\n\t    x86)\n\t\techo i586-pc-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    authenticamd | genuineintel | EM64T)\n\t\techo x86_64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    IA64)\n\t\techo ia64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\tesac ;;\n    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)\n\techo i${UNAME_MACHINE}-pc-mks\n\texit ;;\n    8664:Windows_NT:*)\n\techo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC}\n\texit ;;\n    i*86:Minix:*:*)\n\techo ${UNAME_MACHINE}-pc-minix\n\texit ;;\n    aarch64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    aarch64_be:Linux:*:*)\n\tUNAME_MACHINE=aarch64_be\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\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\tesac\n\tobjdump --private-headers /bin/sh | grep -q ld.so.1\n\tif test \"$?\" = 0 ; then LIBC=\"gnulibc1\" ; fi\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    arc:Linux:*:* | arceb:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    arm*:Linux:*:*)\n\teval $set_cc_for_build\n\tif echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t    | grep -q __ARM_EABI__\n\tthen\n\t    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\telse\n\t    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t\t| grep -q __ARM_PCS_VFP\n\t    then\n\t\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi\n\t    else\n\t\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf\n\t    fi\n\tfi\n\texit ;;\n    avr32*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    cris:Linux:*:*)\n\techo ${UNAME_MACHINE}-axis-linux-${LIBC}\n\texit ;;\n    crisv32:Linux:*:*)\n\techo ${UNAME_MACHINE}-axis-linux-${LIBC}\n\texit ;;\n    frv:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    hexagon:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    i*86:Linux:*:*)\n\techo ${UNAME_MACHINE}-pc-linux-${LIBC}\n\texit ;;\n    ia64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    m32r*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    m68*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    mips:Linux:*:* | mips64:Linux:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#undef CPU\n\t#undef ${UNAME_MACHINE}\n\t#undef ${UNAME_MACHINE}el\n\t#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)\n\tCPU=${UNAME_MACHINE}el\n\t#else\n\t#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)\n\tCPU=${UNAME_MACHINE}\n\t#else\n\tCPU=\n\t#endif\n\t#endif\nEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`\n\ttest x\"${CPU}\" != x && { echo \"${CPU}-unknown-linux-${LIBC}\"; exit; }\n\t;;\n    or1k:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    or32:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    padre:Linux:*:*)\n\techo sparc-unknown-linux-${LIBC}\n\texit ;;\n    parisc64:Linux:*:* | hppa64:Linux:*:*)\n\techo hppa64-unknown-linux-${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-${LIBC} ;;\n\t  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;\n\t  *)    echo hppa-unknown-linux-${LIBC} ;;\n\tesac\n\texit ;;\n    ppc64:Linux:*:*)\n\techo powerpc64-unknown-linux-${LIBC}\n\texit ;;\n    ppc:Linux:*:*)\n\techo powerpc-unknown-linux-${LIBC}\n\texit ;;\n    ppc64le:Linux:*:*)\n\techo powerpc64le-unknown-linux-${LIBC}\n\texit ;;\n    ppcle:Linux:*:*)\n\techo powerpcle-unknown-linux-${LIBC}\n\texit ;;\n    s390:Linux:*:* | s390x:Linux:*:*)\n\techo ${UNAME_MACHINE}-ibm-linux-${LIBC}\n\texit ;;\n    sh64*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    sh*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    sparc:Linux:*:* | sparc64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    tile*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    vax:Linux:*:*)\n\techo ${UNAME_MACHINE}-dec-linux-${LIBC}\n\texit ;;\n    x86_64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    xtensa*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\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\t# Unixware is an offshoot of SVR4, but it has its own version\n\t# number series starting with 2...\n\t# I am not positive that other SVR4 systems won't match this,\n\t# I just have to hope.  -- rms.\n\t# 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.[02]*:*)\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\t# uname -m prints for DJGPP always 'pc', but it prints nothing about\n\t# the processor, so we play safe by assuming i586.\n\t# Note: whatever this is, it MUST be the same as what config.sub\n\t# prints for the \"djgpp\" host, or else GDB configury will decide that\n\t# this is a cross-build.\n\techo i586-pc-msdosdjgpp\n\texit ;;\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\t/bin/uname -p 2>/dev/null | grep 86 >/dev/null \\\n\t  && { echo i486-ncr-sysv4; exit; } ;;\n    NCR*:*:4.2:* | MPRAS*:*:4.2:*)\n\tOS_REL='.3'\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\t/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \\\n\t    && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*)\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*:*)\t# Unisys `ClearPath HMP IX 4000' SVR4/MP effort\n\t\t\t# says <Richard.M.Bartel@ccMail.Census.GOV>\n\techo i586-unisys-sysv4\n\texit ;;\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\techo mips-nec-sysv${UNAME_RELEASE}\n\telse\n\t\techo mips-unknown-sysv${UNAME_RELEASE}\n\tfi\n\texit ;;\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    BePC:Haiku:*:*)\t# Haiku running on Intel PC compatible.\n\techo i586-pc-haiku\n\texit ;;\n    x86_64:Haiku:*:*)\n\techo x86_64-unknown-haiku\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    SX-7:SUPER-UX:*:*)\n\techo sx7-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8:SUPER-UX:*:*)\n\techo sx8-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8R:SUPER-UX:*:*)\n\techo sx8r-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\teval $set_cc_for_build\n\tif test \"$UNAME_PROCESSOR\" = unknown ; then\n\t    UNAME_PROCESSOR=powerpc\n\tfi\n\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\tgrep IS_64BIT_ARCH >/dev/null\n\t    then\n\t\tcase $UNAME_PROCESSOR in\n\t\t    i386) UNAME_PROCESSOR=x86_64 ;;\n\t\t    powerpc) UNAME_PROCESSOR=powerpc64 ;;\n\t\tesac\n\t    fi\n\tfi\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    NEO-?:NONSTOP_KERNEL:*:*)\n\techo neo-tandem-nsk${UNAME_RELEASE}\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\techo 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 ;;\n    i*86:AROS:*:*)\n\techo ${UNAME_MACHINE}-pc-aros\n\texit ;;\n    x86_64:VMkernel:*:*)\n\techo ${UNAME_MACHINE}-unknown-esx\n\texit ;;\nesac\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\t\"4\"\n#else\n\t\"\"\n#endif\n\t); 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://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\nand\n  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/config.sub",
    "content": "#! /bin/sh\n# Configuration validation subroutine script.\n#   Copyright 1992-2013 Free Software Foundation, Inc.\n\ntimestamp='2013-08-10'\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 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, 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, see <http://www.gnu.org/licenses/>.\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\n# program.  This Exception is an additional permission under section 7\n# of the GNU General Public License, version 3 (\"GPLv3\").\n\n\n# Please send patches with a ChangeLog entry to config-patches@gnu.org.\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# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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 1992-2013 Free 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-android* | linux-dietlibc | linux-newlib* | \\\n  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \\\n  knetbsd*-gnu* | netbsd*-gnu* | \\\n  kopensolaris*-gnu* | \\\n  storm-chaos* | os2-emx* | rtmk-nova*)\n    os=-$maybe_os\n    basic_machine=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\1/'`\n    ;;\n  android-linux)\n    os=-linux-android\n    basic_machine=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\1/'`-unknown\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 | -microblaze*)\n\t\tos=\n\t\tbasic_machine=$1\n\t\t;;\n\t-bluegene*)\n\t\tos=-cnk\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*178)\n\t\tos=-lynxos178\n\t\t;;\n\t-lynx*5)\n\t\tos=-lynxos5\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| aarch64 | aarch64_be \\\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 | arceb \\\n\t| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \\\n\t| avr | avr32 \\\n\t| be32 | be64 \\\n\t| bfin \\\n\t| c4x | c8051 | clipper \\\n\t| d10v | d30v | dlx | dsp16xx \\\n\t| epiphany \\\n\t| fido | fr30 | frv \\\n\t| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \\\n\t| hexagon \\\n\t| i370 | i860 | i960 | ia64 \\\n\t| ip2k | iq2000 \\\n\t| le32 | le64 \\\n\t| lm32 \\\n\t| m32c | m32r | m32rle | m68000 | m68k | m88k \\\n\t| maxq | mb | microblaze | microblazeel | mcore | mep | metag \\\n\t| mips | mipsbe | mipseb | mipsel | mipsle \\\n\t| mips16 \\\n\t| mips64 | mips64el \\\n\t| mips64octeon | mips64octeonel \\\n\t| mips64orion | mips64orionel \\\n\t| mips64r5900 | mips64r5900el \\\n\t| mips64vr | mips64vrel \\\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| mipsr5900 | mipsr5900el \\\n\t| mipstx39 | mipstx39el \\\n\t| mn10200 | mn10300 \\\n\t| moxie \\\n\t| mt \\\n\t| msp430 \\\n\t| nds32 | nds32le | nds32be \\\n\t| nios | nios2 | nios2eb | nios2el \\\n\t| ns16k | ns32k \\\n\t| open8 \\\n\t| or1k | or32 \\\n\t| pdp10 | pdp11 | pj | pjl \\\n\t| powerpc | powerpc64 | powerpc64le | powerpcle \\\n\t| pyramid \\\n\t| rl78 | rx \\\n\t| score \\\n\t| sh | sh[1234] | sh[24]a | sh[24]aeb | 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| spu \\\n\t| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \\\n\t| ubicom32 \\\n\t| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \\\n\t| we32k \\\n\t| x86 | xc16x | xstormy16 | xtensa \\\n\t| z8k | z80)\n\t\tbasic_machine=$basic_machine-unknown\n\t\t;;\n\tc54x)\n\t\tbasic_machine=tic54x-unknown\n\t\t;;\n\tc55x)\n\t\tbasic_machine=tic55x-unknown\n\t\t;;\n\tc6x)\n\t\tbasic_machine=tic6x-unknown\n\t\t;;\n\tm6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)\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\tstrongarm | thumb | xscale)\n\t\tbasic_machine=arm-unknown\n\t\t;;\n\txgate)\n\t\tbasic_machine=$basic_machine-unknown\n\t\tos=-none\n\t\t;;\n\txscaleeb)\n\t\tbasic_machine=armeb-unknown\n\t\t;;\n\n\txscaleel)\n\t\tbasic_machine=armel-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| aarch64-* | aarch64_be-* \\\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-* | arceb-* \\\n\t| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \\\n\t| avr-* | avr32-* \\\n\t| be32-* | be64-* \\\n\t| bfin-* | bs2000-* \\\n\t| c[123]* | c30-* | [cjt]90-* | c4x-* \\\n\t| c8051-* | clipper-* | craynv-* | cydra-* \\\n\t| d10v-* | d30v-* | dlx-* \\\n\t| elxsi-* \\\n\t| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \\\n\t| h8300-* | h8500-* \\\n\t| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \\\n\t| hexagon-* \\\n\t| i*86-* | i860-* | i960-* | ia64-* \\\n\t| ip2k-* | iq2000-* \\\n\t| le32-* | le64-* \\\n\t| lm32-* \\\n\t| m32c-* | m32r-* | m32rle-* \\\n\t| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \\\n\t| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \\\n\t| microblaze-* | microblazeel-* \\\n\t| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \\\n\t| mips16-* \\\n\t| mips64-* | mips64el-* \\\n\t| mips64octeon-* | mips64octeonel-* \\\n\t| mips64orion-* | mips64orionel-* \\\n\t| mips64r5900-* | mips64r5900el-* \\\n\t| mips64vr-* | mips64vrel-* \\\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| mipsr5900-* | mipsr5900el-* \\\n\t| mipstx39-* | mipstx39el-* \\\n\t| mmix-* \\\n\t| mt-* \\\n\t| msp430-* \\\n\t| nds32-* | nds32le-* | nds32be-* \\\n\t| nios-* | nios2-* | nios2eb-* | nios2el-* \\\n\t| none-* | np1-* | ns16k-* | ns32k-* \\\n\t| open8-* \\\n\t| orion-* \\\n\t| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \\\n\t| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \\\n\t| pyramid-* \\\n\t| rl78-* | romp-* | rs6000-* | rx-* \\\n\t| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | sv1-* | sx?-* \\\n\t| tahoe-* \\\n\t| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \\\n\t| tile*-* \\\n\t| tron-* \\\n\t| ubicom32-* \\\n\t| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \\\n\t| vax-* \\\n\t| we32k-* \\\n\t| x86-* | x86_64-* | xc16x-* | xps100-* \\\n\t| xstormy16-* | xtensa*-* \\\n\t| ymp-* \\\n\t| z8k-* | z80-*)\n\t\t;;\n\t# Recognize the basic CPU types without company name, with glob match.\n\txtensa*)\n\t\tbasic_machine=$basic_machine-unknown\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\taros)\n\t\tbasic_machine=i386-pc\n\t\tos=-aros\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\tblackfin)\n\t\tbasic_machine=bfin-unknown\n\t\tos=-linux\n\t\t;;\n\tblackfin-*)\n\t\tbasic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\n\t\t;;\n\tbluegene*)\n\t\tbasic_machine=powerpc-ibm\n\t\tos=-cnk\n\t\t;;\n\tc54x-*)\n\t\tbasic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc55x-*)\n\t\tbasic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc6x-*)\n\t\tbasic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc90)\n\t\tbasic_machine=c90-cray\n\t\tos=-unicos\n\t\t;;\n\tcegcc)\n\t\tbasic_machine=arm-unknown\n\t\tos=-cegcc\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\tcr16 | cr16-*)\n\t\tbasic_machine=cr16-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\tdicos)\n\t\tbasic_machine=i686-pc\n\t\tos=-dicos\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\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\tm68knommu)\n\t\tbasic_machine=m68k-unknown\n\t\tos=-linux\n\t\t;;\n\tm68knommu-*)\n\t\tbasic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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\tmicroblaze*)\n\t\tbasic_machine=microblaze-xilinx\n\t\t;;\n\tmingw64)\n\t\tbasic_machine=x86_64-pc\n\t\tos=-mingw64\n\t\t;;\n\tmingw32)\n\t\tbasic_machine=i686-pc\n\t\tos=-mingw32\n\t\t;;\n\tmingw32ce)\n\t\tbasic_machine=arm-unknown\n\t\tos=-mingw32ce\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\tmsys)\n\t\tbasic_machine=i686-pc\n\t\tos=-msys\n\t\t;;\n\tmvs)\n\t\tbasic_machine=i370-ibm\n\t\tos=-mvs\n\t\t;;\n\tnacl)\n\t\tbasic_machine=le32-unknown\n\t\tos=-nacl\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\tneo-tandem)\n\t\tbasic_machine=neo-tandem\n\t\t;;\n\tnse-tandem)\n\t\tbasic_machine=nse-tandem\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\tparisc)\n\t\tbasic_machine=hppa-unknown\n\t\tos=-linux\n\t\t;;\n\tparisc-*)\n\t\tbasic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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 | ppcbe)\tbasic_machine=powerpc-unknown\n\t\t;;\n\tppc-* | ppcbe-*)\n\t\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 | rdos64)\n\t\tbasic_machine=x86_64-pc\n\t\tos=-rdos\n\t\t;;\n\trdos32)\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\tsde)\n\t\tbasic_machine=mipsisa32-sde\n\t\tos=-elf\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\tsh5el)\n\t\tbasic_machine=sh5le-unknown\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\tstrongarm-* | thumb-*)\n\t\tbasic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`\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\ttile*)\n\t\tbasic_machine=$basic_machine-unknown\n\t\tos=-linux-gnu\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\txscale-* | xscalee[bl]-*)\n\t\tbasic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`\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\tz80-*-coff)\n\t\tbasic_machine=z80-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[24]aeb | 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\t# First match some system type aliases\n\t# that might get confused with valid system types.\n\t# -solaris* is a basic system type, with this one exception.\n\t-auroraux)\n\t\tos=-auroraux\n\t\t;;\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* | -cnk* | -sunos | -sunos[34]*\\\n\t      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \\\n\t      | -sym* | -kopensolaris* | -plan9* \\\n\t      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \\\n\t      | -aos* | -aros* \\\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      | -bitrig* | -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* | -cegcc* \\\n\t      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \\\n\t      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \\\n\t      | -linux-newlib* | -linux-musl* | -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* | -toppers* | -drops* | -es*)\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\t-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\t-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-zvmoe)\n\t\tos=-zvmoe\n\t\t;;\n\t-dicos*)\n\t\tos=-dicos\n\t\t;;\n\t-nacl*)\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\tscore-*)\n\t\tos=-elf\n\t\t;;\n\tspu-*)\n\t\tos=-elf\n\t\t;;\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\tc4x-* | tic4x-*)\n\t\tos=-coff\n\t\t;;\n\tc8051-*)\n\t\tos=-elf\n\t\t;;\n\thexagon-*)\n\t\tos=-elf\n\t\t;;\n\ttic54x-*)\n\t\tos=-coff\n\t\t;;\n\ttic55x-*)\n\t\tos=-coff\n\t\t;;\n\ttic6x-*)\n\t\tos=-coff\n\t\t;;\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;;\n\tm68*-cisco)\n\t\tos=-aout\n\t\t;;\n\tmep-*)\n\t\tos=-elf\n\t\t;;\n\tmips*-cisco)\n\t\tos=-elf\n\t\t;;\n\tmips*-*)\n\t\tos=-elf\n\t\t;;\n\tor1k-*)\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-cnk*|-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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/depcomp",
    "content": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2013-05-30.07; # UTC\n\n# Copyright (C) 1999-2013 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, see <http://www.gnu.org/licenses/>.\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 outputting 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\n# Get the directory component of the given path, and save it in the\n# global variables '$dir'.  Note that this directory component will\n# be either empty or ending with a '/' character.  This is deliberate.\nset_dir_from ()\n{\n  case $1 in\n    */*) dir=`echo \"$1\" | sed -e 's|/[^/]*$|/|'`;;\n      *) dir=;;\n  esac\n}\n\n# Get the suffix-stripped basename of the given path, and save it the\n# global variable '$base'.\nset_base_from ()\n{\n  base=`echo \"$1\" | sed -e 's|^.*/||' -e 's/\\.[^.]*$//'`\n}\n\n# If no dependency file was actually created by the compiler invocation,\n# we still have to create a dummy depfile, to avoid errors with the\n# Makefile \"include basename.Plo\" scheme.\nmake_dummy_depfile ()\n{\n  echo \"#dummy\" > \"$depfile\"\n}\n\n# Factor out some common post-processing of the generated depfile.\n# Requires the auxiliary global variable '$tmpdepfile' to be set.\naix_post_process_depfile ()\n{\n  # If the compiler actually managed to produce a dependency file,\n  # post-process it.\n  if test -f \"$tmpdepfile\"; then\n    # Each line is of the form 'foo.o: dependency.h'.\n    # Do two passes, one to just change these to\n    #   $object: dependency.h\n    # and one to simply output\n    #   dependency.h:\n    # which is needed to avoid the deleted-header problem.\n    { sed -e \"s,^.*\\.[$lower]*:,$object:,\" < \"$tmpdepfile\"\n      sed -e \"s,^.*\\.[$lower]*:[$tab ]*,,\" -e 's,$,:,' < \"$tmpdepfile\"\n    } > \"$depfile\"\n    rm -f \"$tmpdepfile\"\n  else\n    make_dummy_depfile\n  fi\n}\n\n# A tabulation character.\ntab='\t'\n# A newline character.\nnl='\n'\n# Character ranges might be problematic outside the C locale.\n# These definitions help.\nupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ\nlower=abcdefghijklmnopqrstuvwxyz\ndigits=0123456789\nalpha=${upper}${lower}\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# Avoid interferences from the environment.\ngccflag= dashmflag=\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\ncygpath_u=\"cygpath -u -f -\"\nif test \"$depmode\" = msvcmsys; then\n  # This is just like msvisualcpp but w/o cygpath translation.\n  # Just convert the backslash-escaped backslashes to single forward\n  # slashes to satisfy depend.m4\n  cygpath_u='sed s,\\\\\\\\,/,g'\n  depmode=msvisualcpp\nfi\n\nif test \"$depmode\" = msvc7msys; then\n  # This is just like msvc7 but w/o cygpath translation.\n  # Just convert the backslash-escaped backslashes to single forward\n  # slashes to satisfy depend.m4\n  cygpath_u='sed s,\\\\\\\\,/,g'\n  depmode=msvc7\nfi\n\nif test \"$depmode\" = xlc; then\n  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.\n  gccflag=-qmakedep=gcc,-MF\n  depmode=gcc\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## Unfortunately, FreeBSD c89 acceptance of flags depends upon\n## the command line argument order; so add the flags where they\n## appear in depend2.am.  Note that the slowdown incurred here\n## affects only configure: in makefiles, %FASTDEP% shortcuts this.\n  for arg\n  do\n    case $arg in\n    -c) set fnord \"$@\" -MT \"$object\" -MD -MP -MF \"$tmpdepfile\" \"$arg\" ;;\n    *)  set fnord \"$@\" \"$arg\" ;;\n    esac\n    shift # fnord\n    shift # $arg\n  done\n  \"$@\"\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  mv \"$tmpdepfile\" \"$depfile\"\n  ;;\n\ngcc)\n## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.\n## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.\n## (see the conditional assignment to $gccflag above).\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).  Also, it might not be\n##   supported by the other compilers which use the 'gcc' depmode.\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 -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  # The second -e expression handles DOS-style file names with drive\n  # 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## 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.  hp depmode also adds that space, but also prefixes the VPATH\n## to the object.  Take care to not repeat it in the output.\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  tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e \"s|.*$object$||\" -e '/:$/d' \\\n    | 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 -ne 0; then\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    # 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 ' ' \"$nl\" < \"$tmpdepfile\" \\\n      | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' \\\n      | tr \"$nl\" ' ' >> \"$depfile\"\n    echo >> \"$depfile\"\n    # The second pass generates a dummy entry for each header file.\n    tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n      | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \\\n      >> \"$depfile\"\n  else\n    make_dummy_depfile\n  fi\n  rm -f \"$tmpdepfile\"\n  ;;\n\nxlc)\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\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  set_dir_from \"$object\"\n  set_base_from \"$object\"\n  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$base.u\n    tmpdepfile3=$dir.libs/$base.u\n    \"$@\" -Wc,-M\n  else\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$dir$base.u\n    tmpdepfile3=$dir$base.u\n    \"$@\" -M\n  fi\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n    exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  aix_post_process_depfile\n  ;;\n\ntcc)\n  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26\n  # FIXME: That version still under development at the moment of writing.\n  #        Make that this statement remains true also for stable, released\n  #        versions.\n  # It will wrap lines (doesn't matter whether long or short) with a\n  # trailing '\\', as in:\n  #\n  #   foo.o : \\\n  #    foo.c \\\n  #    foo.h \\\n  #\n  # It will put a trailing '\\' even on the last line, and will use leading\n  # spaces rather than leading tabs (at least since its commit 0394caf7\n  # \"Emit spaces for -MD\").\n  \"$@\" -MD -MF \"$tmpdepfile\"\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  # Each non-empty line is of the form 'foo.o : \\' or ' dep.h \\'.\n  # We have to change lines of the first kind to '$object: \\'.\n  sed -e \"s|.*:|$object :|\" < \"$tmpdepfile\" > \"$depfile\"\n  # And for each line of the second kind, we have to emit a 'dep.h:'\n  # dummy dependency, to avoid the deleted-header problem.\n  sed -n -e 's|^  *\\(.*\\) *\\\\$|\\1:|p' < \"$tmpdepfile\" >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\n## The order of this option in the case statement is important, since the\n## shell code in configure will try each of these formats in the order\n## listed in this file.  A plain '-MD' option would be understood by many\n## compilers, so we must ensure this comes after the gcc and icc options.\npgcc)\n  # Portland's C compiler understands '-MD'.\n  # Will always output deps to 'file.d' where file is the root name of the\n  # source file under compilation, even if file resides in a subdirectory.\n  # The object file name does not affect the name of the '.d' file.\n  # pgcc 10.2 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  set_dir_from \"$object\"\n  # Use the source, not the object, to determine the base name, since\n  # that's sadly what pgcc will do too.\n  set_base_from \"$source\"\n  tmpdepfile=$base.d\n\n  # For projects that build the same source file twice into different object\n  # files, the pgcc approach of using the *source* file root name can cause\n  # problems in parallel builds.  Use a locking strategy to avoid stomping on\n  # the same $tmpdepfile.\n  lockdir=$base.d-lock\n  trap \"\n    echo '$0: caught signal, cleaning up...' >&2\n    rmdir '$lockdir'\n    exit 1\n  \" 1 2 13 15\n  numtries=100\n  i=$numtries\n  while test $i -gt 0; do\n    # mkdir is a portable test-and-set.\n    if mkdir \"$lockdir\" 2>/dev/null; then\n      # This process acquired the lock.\n      \"$@\" -MD\n      stat=$?\n      # Release the lock.\n      rmdir \"$lockdir\"\n      break\n    else\n      # If the lock is being held by a different process, wait\n      # until the winning process is done or we timeout.\n      while test -d \"$lockdir\" && test $i -gt 0; do\n        sleep 1\n        i=`expr $i - 1`\n      done\n    fi\n    i=`expr $i - 1`\n  done\n  trap - 1 2 13 15\n  if test $i -le 0; then\n    echo \"$0: failed to acquire lock after $numtries attempts\" >&2\n    echo \"$0: check lockdir '$lockdir'\" >&2\n    exit 1\n  fi\n\n  if test $stat -ne 0; then\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\nhp2)\n  # The \"hp\" stanza above does not work with aCC (C++) and HP's ia64\n  # compilers, which have integrated preprocessors.  The correct option\n  # to use with these is +Maked; it writes dependencies to a file named\n  # 'foo.d', which lands next to the object file, wherever that\n  # happens to be.\n  # Much of this is similar to the tru64 case; see comments there.\n  set_dir_from  \"$object\"\n  set_base_from \"$object\"\n  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir.libs/$base.d\n    \"$@\" -Wc,+Maked\n  else\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir$base.d\n    \"$@\" +Maked\n  fi\n  stat=$?\n  if test $stat -ne 0; then\n     rm -f \"$tmpdepfile1\" \"$tmpdepfile2\"\n     exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  if test -f \"$tmpdepfile\"; then\n    sed -e \"s,^.*\\.[$lower]*:,$object:,\" \"$tmpdepfile\" > \"$depfile\"\n    # Add 'dependent.h:' lines.\n    sed -ne '2,${\n               s/^ *//\n               s/ \\\\*$//\n               s/$/:/\n               p\n             }' \"$tmpdepfile\" >> \"$depfile\"\n  else\n    make_dummy_depfile\n  fi\n  rm -f \"$tmpdepfile\" \"$tmpdepfile2\"\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  set_dir_from  \"$object\"\n  set_base_from \"$object\"\n\n  if test \"$libtool\" = yes; then\n    # Libtool generates 2 separate objects for the 2 libraries.  These\n    # two compilations output dependencies 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$base.o.d          # libtool 1.5\n    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.\n    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504\n    \"$@\" -Wc,-MD\n  else\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir$base.d\n    tmpdepfile3=$dir$base.d\n    \"$@\" -MD\n  fi\n\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n    exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  # Same post-processing that is required for AIX mode.\n  aix_post_process_depfile\n  ;;\n\nmsvc7)\n  if test \"$libtool\" = yes; then\n    showIncludes=-Wc,-showIncludes\n  else\n    showIncludes=-showIncludes\n  fi\n  \"$@\" $showIncludes > \"$tmpdepfile\"\n  stat=$?\n  grep -v '^Note: including file: ' \"$tmpdepfile\"\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  # The first sed program below extracts the file names and escapes\n  # backslashes for cygpath.  The second sed program outputs the file\n  # name when reading, but also accumulates all include files in the\n  # hold buffer in order to output them again at the end.  This only\n  # works with sed implementations that can handle large buffers.\n  sed < \"$tmpdepfile\" -n '\n/^Note: including file:  *\\(.*\\)/ {\n  s//\\1/\n  s/\\\\/\\\\\\\\/g\n  p\n}' | $cygpath_u | sort -u | sed -n '\ns/ /\\\\ /g\ns/\\(.*\\)/'\"$tab\"'\\1 \\\\/p\ns/.\\(.*\\) \\\\/\\1:/\nH\n$ {\n  s/.*/'\"$tab\"'/\n  G\n  p\n}' >> \"$depfile\"\n  echo >> \"$depfile\" # make sure the fragment doesn't end with a backslash\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvc7msys)\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\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 \"X$1\" != 'X--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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |\" > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  cat < \"$tmpdepfile\" > \"$depfile\"\n  # Some versions of the HPUX 10.20 sed can't process this sed invocation\n  # correctly.  Breaking it into two sed invocations is a workaround.\n  tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' \\\n    | 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 \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n  # X makedepend\n  shift\n  cleared=no eat=no\n  for arg\n  do\n    case $cleared in\n    no)\n      set \"\"; shift\n      cleared=yes ;;\n    esac\n    if test $eat = yes; then\n      eat=no\n      continue\n    fi\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    -arch)\n      eat=yes ;;\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  # makedepend may prepend the VPATH from the source file name to the object.\n  # No need to regex-escape $object, excess matching of '.' is harmless.\n  sed \"s|^.*\\($object *:\\)|\\1|\" \"$tmpdepfile\" > \"$depfile\"\n  # Some versions of the HPUX 10.20 sed can't process the last invocation\n  # correctly.  Breaking it into two sed invocations is a workaround.\n  sed '1,2d' \"$tmpdepfile\" \\\n    | tr ' ' \"$nl\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' \\\n    | 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 \"X$1\" != 'X--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.\n  \"$@\" || exit $?\n\n  # Remove the call to Libtool.\n  if test \"$libtool\" = yes; then\n    while test \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n\n  IFS=\" \"\n  for arg\n  do\n    case \"$arg\" in\n    -o)\n      shift\n      ;;\n    $object)\n      shift\n      ;;\n    \"-Gm\"|\"/Gm\"|\"-Gi\"|\"/Gi\"|\"-ZI\"|\"/ZI\")\n        set fnord \"$@\"\n        shift\n        shift\n        ;;\n    *)\n        set fnord \"$@\" \"$arg\"\n        shift\n        shift\n        ;;\n    esac\n  done\n  \"$@\" -E 2>/dev/null |\n  sed -n '/^#line [0-9][0-9]* \"\\([^\"]*\\)\"/ s::\\1:p' | $cygpath_u | sort -u > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::'\"$tab\"'\\1 \\\\:p' >> \"$depfile\"\n  echo \"$tab\" >> \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::\\1\\::p' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvcmsys)\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\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/install-sh",
    "content": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2011-11-20.07; # UTC\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.\n\nnl='\n'\nIFS=\" \"\"\t$nl\"\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-}\nif test -z \"$doit\"; then\n  doit_exec=exec\nelse\n  doit_exec=$doit\nfi\n\n# Put in absolute file names if you don't have them in your path;\n# or use environment vars.\n\nchgrpprog=${CHGRPPROG-chgrp}\nchmodprog=${CHMODPROG-chmod}\nchownprog=${CHOWNPROG-chown}\ncmpprog=${CMPPROG-cmp}\ncpprog=${CPPROG-cp}\nmkdirprog=${MKDIRPROG-mkdir}\nmvprog=${MVPROG-mv}\nrmprog=${RMPROG-rm}\nstripprog=${STRIPPROG-strip}\n\nposix_glob='?'\ninitialize_posix_glob='\n  test \"$posix_glob\" != \"?\" || {\n    if (set -f) 2>/dev/null; then\n      posix_glob=\n    else\n      posix_glob=:\n    fi\n  }\n'\n\nposix_mkdir=\n\n# Desired mode of installed file.\nmode=0755\n\nchgrpcmd=\nchmodcmd=$chmodprog\nchowncmd=\nmvcmd=$mvprog\nrmcmd=\"$rmprog -f\"\nstripcmd=\n\nsrc=\ndst=\ndir_arg=\ndst_arg=\n\ncopy_on_change=false\nno_target_directory=\n\nusage=\"\\\nUsage: $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     --help     display this help and exit.\n     --version  display version info and exit.\n\n  -c            (ignored)\n  -C            install only if different (preserve the last data modification time)\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\nEnvironment variables override the default commands:\n  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG\n  RMPROG STRIPPROG\n\"\n\nwhile test $# -ne 0; do\n  case $1 in\n    -c) ;;\n\n    -C) copy_on_change=true;;\n\n    -d) dir_arg=true;;\n\n    -g) chgrpcmd=\"$chgrpprog $2\"\n\tshift;;\n\n    --help) echo \"$usage\"; exit $?;;\n\n    -m) mode=$2\n\tcase $mode in\n\t  *' '* | *'\t'* | *'\n'*\t  | *'*'* | *'?'* | *'['*)\n\t    echo \"$0: invalid mode: $mode\" >&2\n\t    exit 1;;\n\tesac\n\tshift;;\n\n    -o) chowncmd=\"$chownprog $2\"\n\tshift;;\n\n    -s) stripcmd=$stripprog;;\n\n    -t) dst_arg=$2\n\t# Protect names problematic for 'test' and other utilities.\n\tcase $dst_arg in\n\t  -* | [=\\(\\)!]) dst_arg=./$dst_arg;;\n\tesac\n\tshift;;\n\n    -T) no_target_directory=true;;\n\n    --version) echo \"$0 $scriptversion\"; exit $?;;\n\n    --)\tshift\n\tbreak;;\n\n    -*)\techo \"$0: invalid option: $1\" >&2\n\texit 1;;\n\n    *)  break;;\n  esac\n  shift\ndone\n\nif test $# -ne 0 && test -z \"$dir_arg$dst_arg\"; then\n  # When -d is used, all remaining arguments are directories to create.\n  # When -t is used, the destination is already specified.\n  # Otherwise, the last argument is the destination.  Remove it from $@.\n  for arg\n  do\n    if test -n \"$dst_arg\"; then\n      # $@ is not empty: it contains at least $arg.\n      set fnord \"$@\" \"$dst_arg\"\n      shift # fnord\n    fi\n    shift # arg\n    dst_arg=$arg\n    # Protect names problematic for 'test' and other utilities.\n    case $dst_arg in\n      -* | [=\\(\\)!]) dst_arg=./$dst_arg;;\n    esac\n  done\nfi\n\nif test $# -eq 0; 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\nif test -z \"$dir_arg\"; then\n  do_exit='(exit $ret); exit $ret'\n  trap \"ret=129; $do_exit\" 1\n  trap \"ret=130; $do_exit\" 2\n  trap \"ret=141; $do_exit\" 13\n  trap \"ret=143; $do_exit\" 15\n\n  # Set umask so as not to create temps with too-generous modes.\n  # However, 'strip' requires both read and write access to temps.\n  case $mode in\n    # Optimize common cases.\n    *644) cp_umask=133;;\n    *755) cp_umask=22;;\n\n    *[0-7])\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw='% 200'\n      fi\n      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;\n    *)\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw=,u+rw\n      fi\n      cp_umask=$mode$u_plus_rw;;\n  esac\nfi\n\nfor src\ndo\n  # Protect names problematic for 'test' and other utilities.\n  case $src in\n    -* | [=\\(\\)!]) src=./$src;;\n  esac\n\n  if test -n \"$dir_arg\"; then\n    dst=$src\n    dstdir=$dst\n    test -d \"$dstdir\"\n    dstdir_status=$?\n  else\n\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 \"$dst_arg\"; then\n      echo \"$0: no destination specified.\" >&2\n      exit 1\n    fi\n    dst=$dst_arg\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: $dst_arg: Is a directory\" >&2\n\texit 1\n      fi\n      dstdir=$dst\n      dst=$dstdir/`basename \"$src\"`\n      dstdir_status=0\n    else\n      # Prefer dirname, but fall back on a substitute if dirname fails.\n      dstdir=`\n\t(dirname \"$dst\") 2>/dev/null ||\n\texpr X\"$dst\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)[^/]' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)$' \\| \\\n\t     X\"$dst\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n\techo X\"$dst\" |\n\t    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)[^/].*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\).*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t s/.*/./; q'\n      `\n\n      test -d \"$dstdir\"\n      dstdir_status=$?\n    fi\n  fi\n\n  obsolete_mkdir_used=false\n\n  if test $dstdir_status != 0; then\n    case $posix_mkdir in\n      '')\n\t# Create intermediate dirs using mode 755 as modified by the umask.\n\t# This is like FreeBSD 'install' as of 1997-10-28.\n\tumask=`umask`\n\tcase $stripcmd.$umask in\n\t  # Optimize common cases.\n\t  *[2367][2367]) mkdir_umask=$umask;;\n\t  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;\n\n\t  *[0-7])\n\t    mkdir_umask=`expr $umask + 22 \\\n\t      - $umask % 100 % 40 + $umask % 20 \\\n\t      - $umask % 10 % 4 + $umask % 2\n\t    `;;\n\t  *) mkdir_umask=$umask,go-w;;\n\tesac\n\n\t# With -d, create the new directory with the user-specified mode.\n\t# Otherwise, rely on $mkdir_umask.\n\tif test -n \"$dir_arg\"; then\n\t  mkdir_mode=-m$mode\n\telse\n\t  mkdir_mode=\n\tfi\n\n\tposix_mkdir=false\n\tcase $umask in\n\t  *[123567][0-7][0-7])\n\t    # POSIX mkdir -p sets u+wx bits regardless of umask, which\n\t    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.\n\t    ;;\n\t  *)\n\t    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$\n\t    trap 'ret=$?; rmdir \"$tmpdir/d\" \"$tmpdir\" 2>/dev/null; exit $ret' 0\n\n\t    if (umask $mkdir_umask &&\n\t\texec $mkdirprog $mkdir_mode -p -- \"$tmpdir/d\") >/dev/null 2>&1\n\t    then\n\t      if test -z \"$dir_arg\" || {\n\t\t   # Check for POSIX incompatibilities with -m.\n\t\t   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or\n\t\t   # other-writable bit of parent directory when it shouldn't.\n\t\t   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.\n\t\t   ls_ld_tmpdir=`ls -ld \"$tmpdir\"`\n\t\t   case $ls_ld_tmpdir in\n\t\t     d????-?r-*) different_mode=700;;\n\t\t     d????-?--*) different_mode=755;;\n\t\t     *) false;;\n\t\t   esac &&\n\t\t   $mkdirprog -m$different_mode -p -- \"$tmpdir\" && {\n\t\t     ls_ld_tmpdir_1=`ls -ld \"$tmpdir\"`\n\t\t     test \"$ls_ld_tmpdir\" = \"$ls_ld_tmpdir_1\"\n\t\t   }\n\t\t }\n\t      then posix_mkdir=:\n\t      fi\n\t      rmdir \"$tmpdir/d\" \"$tmpdir\"\n\t    else\n\t      # Remove any dirs left behind by ancient mkdir implementations.\n\t      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null\n\t    fi\n\t    trap '' 0;;\n\tesac;;\n    esac\n\n    if\n      $posix_mkdir && (\n\tumask $mkdir_umask &&\n\t$doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\"\n      )\n    then :\n    else\n\n      # The umask is ridiculous, or mkdir does not conform to POSIX,\n      # or it failed possibly due to a race condition.  Create the\n      # directory the slow way, step by step, checking for races as we go.\n\n      case $dstdir in\n\t/*) prefix='/';;\n\t[-=\\(\\)!]*) prefix='./';;\n\t*)  prefix='';;\n      esac\n\n      eval \"$initialize_posix_glob\"\n\n      oIFS=$IFS\n      IFS=/\n      $posix_glob set -f\n      set fnord $dstdir\n      shift\n      $posix_glob set +f\n      IFS=$oIFS\n\n      prefixes=\n\n      for d\n      do\n\ttest X\"$d\" = X && continue\n\n\tprefix=$prefix$d\n\tif test -d \"$prefix\"; then\n\t  prefixes=\n\telse\n\t  if $posix_mkdir; then\n\t    (umask=$mkdir_umask &&\n\t     $doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\") && break\n\t    # Don't fail if two instances are running concurrently.\n\t    test -d \"$prefix\" || exit 1\n\t  else\n\t    case $prefix in\n\t      *\\'*) qprefix=`echo \"$prefix\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;;\n\t      *) qprefix=$prefix;;\n\t    esac\n\t    prefixes=\"$prefixes '$qprefix'\"\n\t  fi\n\tfi\n\tprefix=$prefix/\n      done\n\n      if test -n \"$prefixes\"; then\n\t# Don't fail if two instances are running concurrently.\n\t(umask $mkdir_umask &&\n\t eval \"\\$doit_exec \\$mkdirprog $prefixes\") ||\n\t  test -d \"$dstdir\" || exit 1\n\tobsolete_mkdir_used=true\n      fi\n    fi\n  fi\n\n  if test -n \"$dir_arg\"; then\n    { test -z \"$chowncmd\" || $doit $chowncmd \"$dst\"; } &&\n    { test -z \"$chgrpcmd\" || $doit $chgrpcmd \"$dst\"; } &&\n    { test \"$obsolete_mkdir_used$chowncmd$chgrpcmd\" = false ||\n      test -z \"$chmodcmd\" || $doit $chmodcmd $mode \"$dst\"; } || exit 1\n  else\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\n    # Copy the file name to the temp name.\n    (umask $cp_umask && $doit_exec $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 $mode \"$dsttmp\"; } &&\n\n    # If -C, don't bother to copy if it wouldn't change the file.\n    if $copy_on_change &&\n       old=`LC_ALL=C ls -dlL \"$dst\"\t2>/dev/null` &&\n       new=`LC_ALL=C ls -dlL \"$dsttmp\"\t2>/dev/null` &&\n\n       eval \"$initialize_posix_glob\" &&\n       $posix_glob set -f &&\n       set X $old && old=:$2:$4:$5:$6 &&\n       set X $new && new=:$2:$4:$5:$6 &&\n       $posix_glob set +f &&\n\n       test \"$old\" = \"$new\" &&\n       $cmpprog \"$dst\" \"$dsttmp\" >/dev/null 2>&1\n    then\n      rm -f \"$dsttmp\"\n    else\n      # Rename the file to the real destination.\n      $doit $mvcmd -f \"$dsttmp\" \"$dst\" 2>/dev/null ||\n\n      # The rename failed, perhaps because mv can't rename something else\n      # to itself, or perhaps because mv is so ancient that it does not\n      # 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  test ! -f \"$dst\" ||\n\t  $doit $rmcmd -f \"$dst\" 2>/dev/null ||\n\t  { $doit $mvcmd -f \"$dst\" \"$rmtmp\" 2>/dev/null &&\n\t    { $doit $rmcmd -f \"$rmtmp\" 2>/dev/null; :; }\n\t  } ||\n\t  { echo \"$0: cannot unlink or rename $dst\" >&2\n\t    (exit 1); exit 1\n\t  }\n\t} &&\n\n\t# Now rename the file to the real destination.\n\t$doit $mvcmd \"$dsttmp\" \"$dst\"\n      }\n    fi || exit 1\n\n    trap '' 0\n  fi\ndone\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/ltmain.sh",
    "content": "\n# libtool (GNU libtool) 2.4.2\n# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,\n# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.\n# This is free software; see the source for copying conditions.  There is NO\n# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n# GNU Libtool 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# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html,\n# or obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n# Usage: $progname [OPTION]... [MODE-ARG]...\n#\n# Provide generalized library-building support services.\n#\n#       --config             show all configuration variables\n#       --debug              enable verbose shell tracing\n#   -n, --dry-run            display commands without modifying any files\n#       --features           display basic configuration information and exit\n#       --mode=MODE          use operation mode MODE\n#       --preserve-dup-deps  don't remove duplicate dependency libraries\n#       --quiet, --silent    don't print informational messages\n#       --no-quiet, --no-silent\n#                            print informational messages (default)\n#       --no-warn            don't display warning messages\n#       --tag=TAG            use configuration variables from tag TAG\n#   -v, --verbose            print more informational messages than default\n#       --no-verbose         don't print the extra informational messages\n#       --version            print version information\n#   -h, --help, --help-all   print short, long, or detailed help message\n#\n# MODE must be one of the following:\n#\n#         clean              remove files from the build directory\n#         compile            compile a source file into a libtool object\n#         execute            automatically set library path, then run a program\n#         finish             complete the installation of libtool libraries\n#         install            install libraries or executables\n#         link               create a library or an executable\n#         uninstall          remove libraries from an installed directory\n#\n# MODE-ARGS vary depending on the MODE.  When passed as first option,\n# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.\n# Try `$progname --help --mode=MODE' for a more detailed description of MODE.\n#\n# When reporting a bug, please describe a test case to reproduce it and\n# include the following information:\n#\n#         host-triplet:\t$host\n#         shell:\t\t$SHELL\n#         compiler:\t\t$LTCC\n#         compiler flags:\t\t$LTCFLAGS\n#         linker:\t\t$LD (gnu? $with_gnu_ld)\n#         $progname:\t(GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1\n#         automake:\t$automake_version\n#         autoconf:\t$autoconf_version\n#\n# Report bugs to <bug-libtool@gnu.org>.\n# GNU libtool home page: <http://www.gnu.org/software/libtool/>.\n# General help using GNU software: <http://www.gnu.org/gethelp/>.\n\nPROGRAM=libtool\nPACKAGE=libtool\nVERSION=\"2.4.2 Debian-2.4.2-1.7ubuntu1\"\nTIMESTAMP=\"\"\npackage_revision=1.3337\n\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n$1\n_LTECHO_EOF'\n}\n\n# NLS nuisances: We save the old values to restore during execute mode.\nlt_user_locale=\nlt_safe_locale=\nfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\ndo\n  eval \"if test \\\"\\${$lt_var+set}\\\" = set; then\n          save_$lt_var=\\$$lt_var\n          $lt_var=C\n\t  export $lt_var\n\t  lt_user_locale=\\\"$lt_var=\\\\\\$save_\\$lt_var; \\$lt_user_locale\\\"\n\t  lt_safe_locale=\\\"$lt_var=C; \\$lt_safe_locale\\\"\n\tfi\"\ndone\nLC_ALL=C\nLANGUAGE=C\nexport LANGUAGE LC_ALL\n\n$lt_unset CDPATH\n\n\n# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh\n# is ksh but when the shell is invoked as \"sh\" and the current value of\n# the _XPG environment variable is not equal to 1 (one), the special\n# positional parameter $0, within a function call, is the name of the\n# function.\nprogpath=\"$0\"\n\n\n\n: ${CP=\"cp -f\"}\ntest \"${ECHO+set}\" = set || ECHO=${as_echo-'printf %s\\n'}\n: ${MAKE=\"make\"}\n: ${MKDIR=\"mkdir\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n: ${SHELL=\"${CONFIG_SHELL-/bin/sh}\"}\n: ${Xsed=\"$SED -e 1s/^X//\"}\n\n# Global variables:\nEXIT_SUCCESS=0\nEXIT_FAILURE=1\nEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.\nEXIT_SKIP=77\t  # $? = 77 is used to indicate a skipped test to automake.\n\nexit_status=$EXIT_SUCCESS\n\n# Make sure IFS has a sensible default\nlt_nl='\n'\nIFS=\" \t$lt_nl\"\n\ndirname=\"s,/[^/]*$,,\"\nbasename=\"s,^.*/,,\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n    func_dirname_result=`$ECHO \"${1}\" | $SED \"$dirname\"`\n    if test \"X$func_dirname_result\" = \"X${1}\"; then\n      func_dirname_result=\"${3}\"\n    else\n      func_dirname_result=\"$func_dirname_result${2}\"\n    fi\n} # func_dirname may be replaced by extended shell implementation\n\n\n# func_basename file\nfunc_basename ()\n{\n    func_basename_result=`$ECHO \"${1}\" | $SED \"$basename\"`\n} # func_basename may be replaced by extended shell implementation\n\n\n# func_dirname_and_basename file append nondir_replacement\n# perform func_basename and func_dirname in a single function\n# call:\n#   dirname:  Compute the dirname of FILE.  If nonempty,\n#             add APPEND to the result, otherwise set result\n#             to NONDIR_REPLACEMENT.\n#             value returned in \"$func_dirname_result\"\n#   basename: Compute filename of FILE.\n#             value retuned in \"$func_basename_result\"\n# Implementation must be kept synchronized with func_dirname\n# and func_basename. For efficiency, we do not delegate to\n# those functions but instead duplicate the functionality here.\nfunc_dirname_and_basename ()\n{\n    # Extract subdirectory from the argument.\n    func_dirname_result=`$ECHO \"${1}\" | $SED -e \"$dirname\"`\n    if test \"X$func_dirname_result\" = \"X${1}\"; then\n      func_dirname_result=\"${3}\"\n    else\n      func_dirname_result=\"$func_dirname_result${2}\"\n    fi\n    func_basename_result=`$ECHO \"${1}\" | $SED -e \"$basename\"`\n} # func_dirname_and_basename may be replaced by extended shell implementation\n\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n# func_strip_suffix prefix name\nfunc_stripname ()\n{\n    case ${2} in\n      .*) func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%\\\\\\\\${2}\\$%%\"`;;\n      *)  func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%${2}\\$%%\"`;;\n    esac\n} # func_stripname may be replaced by extended shell implementation\n\n\n# These SED scripts presuppose an absolute path with a trailing slash.\npathcar='s,^/\\([^/]*\\).*$,\\1,'\npathcdr='s,^/[^/]*,,'\nremovedotparts=':dotsl\n\t\ts@/\\./@/@g\n\t\tt dotsl\n\t\ts,/\\.$,/,'\ncollapseslashes='s@/\\{1,\\}@/@g'\nfinalslash='s,/*$,/,'\n\n# func_normal_abspath PATH\n# Remove doubled-up and trailing slashes, \".\" path components,\n# and cancel out any \"..\" path components in PATH after making\n# it an absolute path.\n#             value returned in \"$func_normal_abspath_result\"\nfunc_normal_abspath ()\n{\n  # Start from root dir and reassemble the path.\n  func_normal_abspath_result=\n  func_normal_abspath_tpath=$1\n  func_normal_abspath_altnamespace=\n  case $func_normal_abspath_tpath in\n    \"\")\n      # Empty path, that just means $cwd.\n      func_stripname '' '/' \"`pwd`\"\n      func_normal_abspath_result=$func_stripname_result\n      return\n    ;;\n    # The next three entries are used to spot a run of precisely\n    # two leading slashes without using negated character classes;\n    # we take advantage of case's first-match behaviour.\n    ///*)\n      # Unusual form of absolute path, do nothing.\n    ;;\n    //*)\n      # Not necessarily an ordinary path; POSIX reserves leading '//'\n      # and for example Cygwin uses it to access remote file shares\n      # over CIFS/SMB, so we conserve a leading double slash if found.\n      func_normal_abspath_altnamespace=/\n    ;;\n    /*)\n      # Absolute path, do nothing.\n    ;;\n    *)\n      # Relative path, prepend $cwd.\n      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath\n    ;;\n  esac\n  # Cancel out all the simple stuff to save iterations.  We also want\n  # the path to end with a slash for ease of parsing, so make sure\n  # there is one (and only one) here.\n  func_normal_abspath_tpath=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$removedotparts\" -e \"$collapseslashes\" -e \"$finalslash\"`\n  while :; do\n    # Processed it all yet?\n    if test \"$func_normal_abspath_tpath\" = / ; then\n      # If we ascended to the root using \"..\" the result may be empty now.\n      if test -z \"$func_normal_abspath_result\" ; then\n        func_normal_abspath_result=/\n      fi\n      break\n    fi\n    func_normal_abspath_tcomponent=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$pathcar\"`\n    func_normal_abspath_tpath=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$pathcdr\"`\n    # Figure out what to do with it\n    case $func_normal_abspath_tcomponent in\n      \"\")\n        # Trailing empty path component, ignore it.\n      ;;\n      ..)\n        # Parent dir; strip last assembled component from result.\n        func_dirname \"$func_normal_abspath_result\"\n        func_normal_abspath_result=$func_dirname_result\n      ;;\n      *)\n        # Actual path component, append it.\n        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent\n      ;;\n    esac\n  done\n  # Restore leading double-slash if one was found on entry.\n  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result\n}\n\n# func_relative_path SRCDIR DSTDIR\n# generates a relative path from SRCDIR to DSTDIR, with a trailing\n# slash if non-empty, suitable for immediately appending a filename\n# without needing to append a separator.\n#             value returned in \"$func_relative_path_result\"\nfunc_relative_path ()\n{\n  func_relative_path_result=\n  func_normal_abspath \"$1\"\n  func_relative_path_tlibdir=$func_normal_abspath_result\n  func_normal_abspath \"$2\"\n  func_relative_path_tbindir=$func_normal_abspath_result\n\n  # Ascend the tree starting from libdir\n  while :; do\n    # check if we have found a prefix of bindir\n    case $func_relative_path_tbindir in\n      $func_relative_path_tlibdir)\n        # found an exact match\n        func_relative_path_tcancelled=\n        break\n        ;;\n      $func_relative_path_tlibdir*)\n        # found a matching prefix\n        func_stripname \"$func_relative_path_tlibdir\" '' \"$func_relative_path_tbindir\"\n        func_relative_path_tcancelled=$func_stripname_result\n        if test -z \"$func_relative_path_result\"; then\n          func_relative_path_result=.\n        fi\n        break\n        ;;\n      *)\n        func_dirname $func_relative_path_tlibdir\n        func_relative_path_tlibdir=${func_dirname_result}\n        if test \"x$func_relative_path_tlibdir\" = x ; then\n          # Have to descend all the way to the root!\n          func_relative_path_result=../$func_relative_path_result\n          func_relative_path_tcancelled=$func_relative_path_tbindir\n          break\n        fi\n        func_relative_path_result=../$func_relative_path_result\n        ;;\n    esac\n  done\n\n  # Now calculate path; take care to avoid doubling-up slashes.\n  func_stripname '' '/' \"$func_relative_path_result\"\n  func_relative_path_result=$func_stripname_result\n  func_stripname '/' '/' \"$func_relative_path_tcancelled\"\n  if test \"x$func_stripname_result\" != x ; then\n    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}\n  fi\n\n  # Normalisation. If bindir is libdir, return empty string,\n  # else relative path ending with a slash; either way, target\n  # file name can be directly appended.\n  if test ! -z \"$func_relative_path_result\"; then\n    func_stripname './' '' \"$func_relative_path_result/\"\n    func_relative_path_result=$func_stripname_result\n  fi\n}\n\n# The name of this program:\nfunc_dirname_and_basename \"$progpath\"\nprogname=$func_basename_result\n\n# Make sure we have an absolute path for reexecution:\ncase $progpath in\n  [\\\\/]*|[A-Za-z]:\\\\*) ;;\n  *[\\\\/]*)\n     progdir=$func_dirname_result\n     progdir=`cd \"$progdir\" && pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\n  *)\n     save_IFS=\"$IFS\"\n     IFS=${PATH_SEPARATOR-:}\n     for progdir in $PATH; do\n       IFS=\"$save_IFS\"\n       test -x \"$progdir/$progname\" && break\n     done\n     IFS=\"$save_IFS\"\n     test -n \"$progdir\" || progdir=`pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed=\"${SED}\"' -e 1s/^X//'\nsed_quote_subst='s/\\([`\"$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution that turns a string into a regex matching for the\n# string literally.\nsed_make_literal_regex='s,[].[^$\\\\*\\/],\\\\&,g'\n\n# Sed substitution that converts a w32 file name or path\n# which contains forward slashes, into one that contains\n# (escaped) backslashes.  A very naive implementation.\nlt_sed_naive_backslashify='s|\\\\\\\\*|\\\\|g;s|/|\\\\|g;s|\\\\|\\\\\\\\|g'\n\n# Re-`\\' parameter expansions in output of double_quote_subst that were\n# `\\'-ed in input to the same.  If an odd number of `\\' preceded a '$'\n# in input to double_quote_subst, that '$' was protected from expansion.\n# Since each input `\\' is now two `\\'s, look for any number of runs of\n# four `\\'s followed by two `\\'s and then a '$'.  `\\' that '$'.\nbs='\\\\'\nbs2='\\\\\\\\'\nbs4='\\\\\\\\\\\\\\\\'\ndollar='\\$'\nsed_double_backslash=\"\\\n  s/$bs4/&\\\\\n/g\n  s/^$bs2$dollar/$bs&/\n  s/\\\\([^$bs]\\\\)$bs2$dollar/\\\\1$bs2$bs$dollar/g\n  s/\\n//g\"\n\n# Standard options:\nopt_dry_run=false\nopt_help=false\nopt_quiet=false\nopt_verbose=false\nopt_warning=:\n\n# func_echo arg...\n# Echo program name prefixed message, along with the current mode\n# name if it has been set yet.\nfunc_echo ()\n{\n    $ECHO \"$progname: ${opt_mode+$opt_mode: }$*\"\n}\n\n# func_verbose arg...\n# Echo program name prefixed message in verbose mode only.\nfunc_verbose ()\n{\n    $opt_verbose && func_echo ${1+\"$@\"}\n\n    # A bug in bash halts the script if the last line of a function\n    # fails when set -e is in force, so we need another command to\n    # work around that:\n    :\n}\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"$*\"\n}\n\n# func_error arg...\n# Echo program name prefixed message to standard error.\nfunc_error ()\n{\n    $ECHO \"$progname: ${opt_mode+$opt_mode: }\"${1+\"$@\"} 1>&2\n}\n\n# func_warning arg...\n# Echo program name prefixed warning message to standard error.\nfunc_warning ()\n{\n    $opt_warning && $ECHO \"$progname: ${opt_mode+$opt_mode: }warning: \"${1+\"$@\"} 1>&2\n\n    # bash bug again:\n    :\n}\n\n# func_fatal_error arg...\n# Echo program name prefixed message to standard error, and exit.\nfunc_fatal_error ()\n{\n    func_error ${1+\"$@\"}\n    exit $EXIT_FAILURE\n}\n\n# func_fatal_help arg...\n# Echo program name prefixed message to standard error, followed by\n# a help hint, and exit.\nfunc_fatal_help ()\n{\n    func_error ${1+\"$@\"}\n    func_fatal_error \"$help\"\n}\nhelp=\"Try \\`$progname --help' for more information.\"  ## default\n\n\n# func_grep expression filename\n# Check whether EXPRESSION matches any line of FILENAME, without output.\nfunc_grep ()\n{\n    $GREP \"$1\" \"$2\" >/dev/null 2>&1\n}\n\n\n# func_mkdir_p directory-path\n# Make sure the entire path to DIRECTORY-PATH is available.\nfunc_mkdir_p ()\n{\n    my_directory_path=\"$1\"\n    my_dir_list=\n\n    if test -n \"$my_directory_path\" && test \"$opt_dry_run\" != \":\"; then\n\n      # Protect directory names starting with `-'\n      case $my_directory_path in\n        -*) my_directory_path=\"./$my_directory_path\" ;;\n      esac\n\n      # While some portion of DIR does not yet exist...\n      while test ! -d \"$my_directory_path\"; do\n        # ...make a list in topmost first order.  Use a colon delimited\n\t# list incase some portion of path contains whitespace.\n        my_dir_list=\"$my_directory_path:$my_dir_list\"\n\n        # If the last portion added has no slash in it, the list is done\n        case $my_directory_path in */*) ;; *) break ;; esac\n\n        # ...otherwise throw away the child directory and loop\n        my_directory_path=`$ECHO \"$my_directory_path\" | $SED -e \"$dirname\"`\n      done\n      my_dir_list=`$ECHO \"$my_dir_list\" | $SED 's,:*$,,'`\n\n      save_mkdir_p_IFS=\"$IFS\"; IFS=':'\n      for my_dir in $my_dir_list; do\n\tIFS=\"$save_mkdir_p_IFS\"\n        # mkdir can fail with a `File exist' error if two processes\n        # try to create one of the directories concurrently.  Don't\n        # stop in that case!\n        $MKDIR \"$my_dir\" 2>/dev/null || :\n      done\n      IFS=\"$save_mkdir_p_IFS\"\n\n      # Bail out if we (or some other process) failed to create a directory.\n      test -d \"$my_directory_path\" || \\\n        func_fatal_error \"Failed to create \\`$1'\"\n    fi\n}\n\n\n# func_mktempdir [string]\n# Make a temporary directory that won't clash with other running\n# libtool processes, and avoids race conditions if possible.  If\n# given, STRING is the basename for that directory.\nfunc_mktempdir ()\n{\n    my_template=\"${TMPDIR-/tmp}/${1-$progname}\"\n\n    if test \"$opt_dry_run\" = \":\"; then\n      # Return a directory name, but don't create it in dry-run mode\n      my_tmpdir=\"${my_template}-$$\"\n    else\n\n      # If mktemp works, use that first and foremost\n      my_tmpdir=`mktemp -d \"${my_template}-XXXXXXXX\" 2>/dev/null`\n\n      if test ! -d \"$my_tmpdir\"; then\n        # Failing that, at least try and use $RANDOM to avoid a race\n        my_tmpdir=\"${my_template}-${RANDOM-0}$$\"\n\n        save_mktempdir_umask=`umask`\n        umask 0077\n        $MKDIR \"$my_tmpdir\"\n        umask $save_mktempdir_umask\n      fi\n\n      # If we're not in dry-run mode, bomb out on failure\n      test -d \"$my_tmpdir\" || \\\n        func_fatal_error \"cannot create temporary directory \\`$my_tmpdir'\"\n    fi\n\n    $ECHO \"$my_tmpdir\"\n}\n\n\n# func_quote_for_eval arg\n# Aesthetically quote ARG to be evaled later.\n# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT\n# is double-quoted, suitable for a subsequent eval, whereas\n# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters\n# which are still active within double quotes backslashified.\nfunc_quote_for_eval ()\n{\n    case $1 in\n      *[\\\\\\`\\\"\\$]*)\n\tfunc_quote_for_eval_unquoted_result=`$ECHO \"$1\" | $SED \"$sed_quote_subst\"` ;;\n      *)\n        func_quote_for_eval_unquoted_result=\"$1\" ;;\n    esac\n\n    case $func_quote_for_eval_unquoted_result in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting, command substitution and and variable\n      # expansion for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        func_quote_for_eval_result=\"\\\"$func_quote_for_eval_unquoted_result\\\"\"\n        ;;\n      *)\n        func_quote_for_eval_result=\"$func_quote_for_eval_unquoted_result\"\n    esac\n}\n\n\n# func_quote_for_expand arg\n# Aesthetically quote ARG to be evaled later; same as above,\n# but do not quote variable references.\nfunc_quote_for_expand ()\n{\n    case $1 in\n      *[\\\\\\`\\\"]*)\n\tmy_arg=`$ECHO \"$1\" | $SED \\\n\t    -e \"$double_quote_subst\" -e \"$sed_double_backslash\"` ;;\n      *)\n        my_arg=\"$1\" ;;\n    esac\n\n    case $my_arg in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting and command substitution for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        my_arg=\"\\\"$my_arg\\\"\"\n        ;;\n    esac\n\n    func_quote_for_expand_result=\"$my_arg\"\n}\n\n\n# func_show_eval cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.\nfunc_show_eval ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$my_cmd\"\n      my_status=$?\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n\n# func_show_eval_locale cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.  Use the saved locale for evaluation.\nfunc_show_eval_locale ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$lt_user_locale\n\t    $my_cmd\"\n      my_status=$?\n      eval \"$lt_safe_locale\"\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n# func_tr_sh\n# Turn $1 into a string suitable for a shell variable name.\n# Result is stored in $func_tr_sh_result.  All characters\n# not in the set a-zA-Z0-9_ are replaced with '_'. Further,\n# if $1 begins with a digit, a '_' is prepended as well.\nfunc_tr_sh ()\n{\n  case $1 in\n  [0-9]* | *[!a-zA-Z0-9_]*)\n    func_tr_sh_result=`$ECHO \"$1\" | $SED 's/^\\([0-9]\\)/_\\1/; s/[^a-zA-Z0-9_]/_/g'`\n    ;;\n  * )\n    func_tr_sh_result=$1\n    ;;\n  esac\n}\n\n\n# func_version\n# Echo version message to standard output and exit.\nfunc_version ()\n{\n    $opt_debug\n\n    $SED -n '/(C)/!b go\n\t:more\n\t/\\./!{\n\t  N\n\t  s/\\n# / /\n\t  b more\n\t}\n\t:go\n\t/^# '$PROGRAM' (GNU /,/# warranty; / {\n        s/^# //\n\ts/^# *$//\n        s/\\((C)\\)[ 0-9,-]*\\( [1-9][0-9]*\\)/\\1\\2/\n        p\n     }' < \"$progpath\"\n     exit $?\n}\n\n# func_usage\n# Echo short help message to standard output and exit.\nfunc_usage ()\n{\n    $opt_debug\n\n    $SED -n '/^# Usage:/,/^#  *.*--help/ {\n        s/^# //\n\ts/^# *$//\n\ts/\\$progname/'$progname'/\n\tp\n    }' < \"$progpath\"\n    echo\n    $ECHO \"run \\`$progname --help | more' for full usage\"\n    exit $?\n}\n\n# func_help [NOEXIT]\n# Echo long help message to standard output and exit,\n# unless 'noexit' is passed as argument.\nfunc_help ()\n{\n    $opt_debug\n\n    $SED -n '/^# Usage:/,/# Report bugs to/ {\n\t:print\n        s/^# //\n\ts/^# *$//\n\ts*\\$progname*'$progname'*\n\ts*\\$host*'\"$host\"'*\n\ts*\\$SHELL*'\"$SHELL\"'*\n\ts*\\$LTCC*'\"$LTCC\"'*\n\ts*\\$LTCFLAGS*'\"$LTCFLAGS\"'*\n\ts*\\$LD*'\"$LD\"'*\n\ts/\\$with_gnu_ld/'\"$with_gnu_ld\"'/\n\ts/\\$automake_version/'\"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`\"'/\n\ts/\\$autoconf_version/'\"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`\"'/\n\tp\n\td\n     }\n     /^# .* home page:/b print\n     /^# General help using/b print\n     ' < \"$progpath\"\n    ret=$?\n    if test -z \"$1\"; then\n      exit $ret\n    fi\n}\n\n# func_missing_arg argname\n# Echo program name prefixed message to standard error and set global\n# exit_cmd.\nfunc_missing_arg ()\n{\n    $opt_debug\n\n    func_error \"missing argument for $1.\"\n    exit_cmd=exit\n}\n\n\n# func_split_short_opt shortopt\n# Set func_split_short_opt_name and func_split_short_opt_arg shell\n# variables after splitting SHORTOPT after the 2nd character.\nfunc_split_short_opt ()\n{\n    my_sed_short_opt='1s/^\\(..\\).*$/\\1/;q'\n    my_sed_short_rest='1s/^..\\(.*\\)$/\\1/;q'\n\n    func_split_short_opt_name=`$ECHO \"$1\" | $SED \"$my_sed_short_opt\"`\n    func_split_short_opt_arg=`$ECHO \"$1\" | $SED \"$my_sed_short_rest\"`\n} # func_split_short_opt may be replaced by extended shell implementation\n\n\n# func_split_long_opt longopt\n# Set func_split_long_opt_name and func_split_long_opt_arg shell\n# variables after splitting LONGOPT at the `=' sign.\nfunc_split_long_opt ()\n{\n    my_sed_long_opt='1s/^\\(--[^=]*\\)=.*/\\1/;q'\n    my_sed_long_arg='1s/^--[^=]*=//'\n\n    func_split_long_opt_name=`$ECHO \"$1\" | $SED \"$my_sed_long_opt\"`\n    func_split_long_opt_arg=`$ECHO \"$1\" | $SED \"$my_sed_long_arg\"`\n} # func_split_long_opt may be replaced by extended shell implementation\n\nexit_cmd=:\n\n\n\n\n\nmagic=\"%%%MAGIC variable%%%\"\nmagic_exe=\"%%%MAGIC EXE variable%%%\"\n\n# Global variables.\nnonopt=\npreserve_args=\nlo2o=\"s/\\\\.lo\\$/.${objext}/\"\no2lo=\"s/\\\\.${objext}\\$/.lo/\"\nextracted_archives=\nextracted_serial=0\n\n# If this variable is set in any of the actions, the command in it\n# will be execed at the end.  This prevents here-documents from being\n# left over by shells.\nexec_cmd=\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n    eval \"${1}=\\$${1}\\${2}\"\n} # func_append may be replaced by extended shell implementation\n\n# func_append_quoted var value\n# Quote VALUE and append to the end of shell variable VAR, separated\n# by a space.\nfunc_append_quoted ()\n{\n    func_quote_for_eval \"${2}\"\n    eval \"${1}=\\$${1}\\\\ \\$func_quote_for_eval_result\"\n} # func_append_quoted may be replaced by extended shell implementation\n\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n    func_arith_result=`expr \"${@}\"`\n} # func_arith may be replaced by extended shell implementation\n\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n    func_len_result=`expr \"${1}\" : \".*\" 2>/dev/null || echo $max_cmd_len`\n} # func_len may be replaced by extended shell implementation\n\n\n# func_lo2o object\nfunc_lo2o ()\n{\n    func_lo2o_result=`$ECHO \"${1}\" | $SED \"$lo2o\"`\n} # func_lo2o may be replaced by extended shell implementation\n\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n    func_xform_result=`$ECHO \"${1}\" | $SED 's/\\.[^.]*$/.lo/'`\n} # func_xform may be replaced by extended shell implementation\n\n\n# func_fatal_configuration arg...\n# Echo program name prefixed message to standard error, followed by\n# a configuration failure hint, and exit.\nfunc_fatal_configuration ()\n{\n    func_error ${1+\"$@\"}\n    func_error \"See the $PACKAGE documentation for more information.\"\n    func_fatal_error \"Fatal configuration error.\"\n}\n\n\n# func_config\n# Display the configuration for all the tags in this script.\nfunc_config ()\n{\n    re_begincf='^# ### BEGIN LIBTOOL'\n    re_endcf='^# ### END LIBTOOL'\n\n    # Default configuration.\n    $SED \"1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\\$d\" < \"$progpath\"\n\n    # Now print the configurations for the tags.\n    for tagname in $taglist; do\n      $SED -n \"/$re_begincf TAG CONFIG: $tagname\\$/,/$re_endcf TAG CONFIG: $tagname\\$/p\" < \"$progpath\"\n    done\n\n    exit $?\n}\n\n# func_features\n# Display the features supported by this script.\nfunc_features ()\n{\n    echo \"host: $host\"\n    if test \"$build_libtool_libs\" = yes; then\n      echo \"enable shared libraries\"\n    else\n      echo \"disable shared libraries\"\n    fi\n    if test \"$build_old_libs\" = yes; then\n      echo \"enable static libraries\"\n    else\n      echo \"disable static libraries\"\n    fi\n\n    exit $?\n}\n\n# func_enable_tag tagname\n# Verify that TAGNAME is valid, and either flag an error and exit, or\n# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist\n# variable here.\nfunc_enable_tag ()\n{\n  # Global variable:\n  tagname=\"$1\"\n\n  re_begincf=\"^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\\$\"\n  re_endcf=\"^# ### END LIBTOOL TAG CONFIG: $tagname\\$\"\n  sed_extractcf=\"/$re_begincf/,/$re_endcf/p\"\n\n  # Validate tagname.\n  case $tagname in\n    *[!-_A-Za-z0-9,/]*)\n      func_fatal_error \"invalid tag name: $tagname\"\n      ;;\n  esac\n\n  # Don't test for the \"default\" C tag, as we know it's\n  # there but not specially marked.\n  case $tagname in\n    CC) ;;\n    *)\n      if $GREP \"$re_begincf\" \"$progpath\" >/dev/null 2>&1; then\n\ttaglist=\"$taglist $tagname\"\n\n\t# Evaluate the configuration.  Be careful to quote the path\n\t# and the sed script, to avoid splitting on whitespace, but\n\t# also don't use non-portable quotes within backquotes within\n\t# quotes we have to do it in 2 steps:\n\textractedcf=`$SED -n -e \"$sed_extractcf\" < \"$progpath\"`\n\teval \"$extractedcf\"\n      else\n\tfunc_error \"ignoring unknown tag $tagname\"\n      fi\n      ;;\n  esac\n}\n\n# func_check_version_match\n# Ensure that we are using m4 macros, and libtool script from the same\n# release of libtool.\nfunc_check_version_match ()\n{\n  if test \"$package_revision\" != \"$macro_revision\"; then\n    if test \"$VERSION\" != \"$macro_version\"; then\n      if test -z \"$macro_version\"; then\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from an older release.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      else\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      fi\n    else\n      cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,\n$progname: but the definition of this LT_INIT comes from revision $macro_revision.\n$progname: You should recreate aclocal.m4 with macros from revision $package_revision\n$progname: of $PACKAGE $VERSION and run autoconf again.\n_LT_EOF\n    fi\n\n    exit $EXIT_MISMATCH\n  fi\n}\n\n\n# Shorthand for --mode=foo, only valid as the first argument\ncase $1 in\nclean|clea|cle|cl)\n  shift; set dummy --mode clean ${1+\"$@\"}; shift\n  ;;\ncompile|compil|compi|comp|com|co|c)\n  shift; set dummy --mode compile ${1+\"$@\"}; shift\n  ;;\nexecute|execut|execu|exec|exe|ex|e)\n  shift; set dummy --mode execute ${1+\"$@\"}; shift\n  ;;\nfinish|finis|fini|fin|fi|f)\n  shift; set dummy --mode finish ${1+\"$@\"}; shift\n  ;;\ninstall|instal|insta|inst|ins|in|i)\n  shift; set dummy --mode install ${1+\"$@\"}; shift\n  ;;\nlink|lin|li|l)\n  shift; set dummy --mode link ${1+\"$@\"}; shift\n  ;;\nuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)\n  shift; set dummy --mode uninstall ${1+\"$@\"}; shift\n  ;;\nesac\n\n\n\n# Option defaults:\nopt_debug=:\nopt_dry_run=false\nopt_config=false\nopt_preserve_dup_deps=false\nopt_features=false\nopt_finish=false\nopt_help=false\nopt_help_all=false\nopt_silent=:\nopt_warning=:\nopt_verbose=:\nopt_silent=false\nopt_verbose=false\n\n\n# Parse options once, thoroughly.  This comes as soon as possible in the\n# script to make things like `--version' happen as quickly as we can.\n{\n  # this just eases exit handling\n  while test $# -gt 0; do\n    opt=\"$1\"\n    shift\n    case $opt in\n      --debug|-x)\topt_debug='set -x'\n\t\t\tfunc_echo \"enabling shell trace mode\"\n\t\t\t$opt_debug\n\t\t\t;;\n      --dry-run|--dryrun|-n)\n\t\t\topt_dry_run=:\n\t\t\t;;\n      --config)\n\t\t\topt_config=:\nfunc_config\n\t\t\t;;\n      --dlopen|-dlopen)\n\t\t\toptarg=\"$1\"\n\t\t\topt_dlopen=\"${opt_dlopen+$opt_dlopen\n}$optarg\"\n\t\t\tshift\n\t\t\t;;\n      --preserve-dup-deps)\n\t\t\topt_preserve_dup_deps=:\n\t\t\t;;\n      --features)\n\t\t\topt_features=:\nfunc_features\n\t\t\t;;\n      --finish)\n\t\t\topt_finish=:\nset dummy --mode finish ${1+\"$@\"}; shift\n\t\t\t;;\n      --help)\n\t\t\topt_help=:\n\t\t\t;;\n      --help-all)\n\t\t\topt_help_all=:\nopt_help=': help-all'\n\t\t\t;;\n      --mode)\n\t\t\ttest $# = 0 && func_missing_arg $opt && break\n\t\t\toptarg=\"$1\"\n\t\t\topt_mode=\"$optarg\"\ncase $optarg in\n  # Valid mode arguments:\n  clean|compile|execute|finish|install|link|relink|uninstall) ;;\n\n  # Catch anything else as an error\n  *) func_error \"invalid argument for $opt\"\n     exit_cmd=exit\n     break\n     ;;\nesac\n\t\t\tshift\n\t\t\t;;\n      --no-silent|--no-quiet)\n\t\t\topt_silent=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --no-warning|--no-warn)\n\t\t\topt_warning=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --no-verbose)\n\t\t\topt_verbose=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --silent|--quiet)\n\t\t\topt_silent=:\nfunc_append preserve_args \" $opt\"\n        opt_verbose=false\n\t\t\t;;\n      --verbose|-v)\n\t\t\topt_verbose=:\nfunc_append preserve_args \" $opt\"\nopt_silent=false\n\t\t\t;;\n      --tag)\n\t\t\ttest $# = 0 && func_missing_arg $opt && break\n\t\t\toptarg=\"$1\"\n\t\t\topt_tag=\"$optarg\"\nfunc_append preserve_args \" $opt $optarg\"\nfunc_enable_tag \"$optarg\"\n\t\t\tshift\n\t\t\t;;\n\n      -\\?|-h)\t\tfunc_usage\t\t\t\t;;\n      --help)\t\tfunc_help\t\t\t\t;;\n      --version)\tfunc_version\t\t\t\t;;\n\n      # Separate optargs to long options:\n      --*=*)\n\t\t\tfunc_split_long_opt \"$opt\"\n\t\t\tset dummy \"$func_split_long_opt_name\" \"$func_split_long_opt_arg\" ${1+\"$@\"}\n\t\t\tshift\n\t\t\t;;\n\n      # Separate non-argument short options:\n      -\\?*|-h*|-n*|-v*)\n\t\t\tfunc_split_short_opt \"$opt\"\n\t\t\tset dummy \"$func_split_short_opt_name\" \"-$func_split_short_opt_arg\" ${1+\"$@\"}\n\t\t\tshift\n\t\t\t;;\n\n      --)\t\tbreak\t\t\t\t\t;;\n      -*)\t\tfunc_fatal_help \"unrecognized option \\`$opt'\" ;;\n      *)\t\tset dummy \"$opt\" ${1+\"$@\"};\tshift; break  ;;\n    esac\n  done\n\n  # Validate options:\n\n  # save first non-option argument\n  if test \"$#\" -gt 0; then\n    nonopt=\"$opt\"\n    shift\n  fi\n\n  # preserve --debug\n  test \"$opt_debug\" = : || func_append preserve_args \" --debug\"\n\n  case $host in\n    *cygwin* | *mingw* | *pw32* | *cegcc*)\n      # don't eliminate duplications in $postdeps and $predeps\n      opt_duplicate_compiler_generated_deps=:\n      ;;\n    *)\n      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps\n      ;;\n  esac\n\n  $opt_help || {\n    # Sanity checks first:\n    func_check_version_match\n\n    if test \"$build_libtool_libs\" != yes && test \"$build_old_libs\" != yes; then\n      func_fatal_configuration \"not configured to build any kind of library\"\n    fi\n\n    # Darwin sucks\n    eval std_shrext=\\\"$shrext_cmds\\\"\n\n    # Only execute mode is allowed to have -dlopen flags.\n    if test -n \"$opt_dlopen\" && test \"$opt_mode\" != execute; then\n      func_error \"unrecognized option \\`-dlopen'\"\n      $ECHO \"$help\" 1>&2\n      exit $EXIT_FAILURE\n    fi\n\n    # Change the help message to a mode-specific one.\n    generic_help=\"$help\"\n    help=\"Try \\`$progname --help --mode=$opt_mode' for more information.\"\n  }\n\n\n  # Bail if the options were screwed\n  $exit_cmd $EXIT_FAILURE\n}\n\n\n\n\n## ----------- ##\n##    Main.    ##\n## ----------- ##\n\n# func_lalib_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_lalib_p ()\n{\n    test -f \"$1\" &&\n      $SED -e 4q \"$1\" 2>/dev/null \\\n        | $GREP \"^# Generated by .*$PACKAGE\" > /dev/null 2>&1\n}\n\n# func_lalib_unsafe_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function implements the same check as func_lalib_p without\n# resorting to external programs.  To this end, it redirects stdin and\n# closes it afterwards, without saving the original file descriptor.\n# As a safety measure, use it only where a negative result would be\n# fatal anyway.  Works if `file' does not exist.\nfunc_lalib_unsafe_p ()\n{\n    lalib_p=no\n    if test -f \"$1\" && test -r \"$1\" && exec 5<&0 <\"$1\"; then\n\tfor lalib_p_l in 1 2 3 4\n\tdo\n\t    read lalib_p_line\n\t    case \"$lalib_p_line\" in\n\t\t\\#\\ Generated\\ by\\ *$PACKAGE* ) lalib_p=yes; break;;\n\t    esac\n\tdone\n\texec 0<&5 5<&-\n    fi\n    test \"$lalib_p\" = yes\n}\n\n# func_ltwrapper_script_p file\n# True iff FILE is a libtool wrapper script\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_script_p ()\n{\n    func_lalib_p \"$1\"\n}\n\n# func_ltwrapper_executable_p file\n# True iff FILE is a libtool wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_executable_p ()\n{\n    func_ltwrapper_exec_suffix=\n    case $1 in\n    *.exe) ;;\n    *) func_ltwrapper_exec_suffix=.exe ;;\n    esac\n    $GREP \"$magic_exe\" \"$1$func_ltwrapper_exec_suffix\" >/dev/null 2>&1\n}\n\n# func_ltwrapper_scriptname file\n# Assumes file is an ltwrapper_executable\n# uses $file to determine the appropriate filename for a\n# temporary ltwrapper_script.\nfunc_ltwrapper_scriptname ()\n{\n    func_dirname_and_basename \"$1\" \"\" \".\"\n    func_stripname '' '.exe' \"$func_basename_result\"\n    func_ltwrapper_scriptname_result=\"$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper\"\n}\n\n# func_ltwrapper_p file\n# True iff FILE is a libtool wrapper script or wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_p ()\n{\n    func_ltwrapper_script_p \"$1\" || func_ltwrapper_executable_p \"$1\"\n}\n\n\n# func_execute_cmds commands fail_cmd\n# Execute tilde-delimited COMMANDS.\n# If FAIL_CMD is given, eval that upon failure.\n# FAIL_CMD may read-access the current command in variable CMD!\nfunc_execute_cmds ()\n{\n    $opt_debug\n    save_ifs=$IFS; IFS='~'\n    for cmd in $1; do\n      IFS=$save_ifs\n      eval cmd=\\\"$cmd\\\"\n      func_show_eval \"$cmd\" \"${2-:}\"\n    done\n    IFS=$save_ifs\n}\n\n\n# func_source file\n# Source FILE, adding directory component if necessary.\n# Note that it is not necessary on cygwin/mingw to append a dot to\n# FILE even if both FILE and FILE.exe exist: automatic-append-.exe\n# behavior happens only for exec(3), not for open(2)!  Also, sourcing\n# `FILE.' does not work on cygwin managed mounts.\nfunc_source ()\n{\n    $opt_debug\n    case $1 in\n    */* | *\\\\*)\t. \"$1\" ;;\n    *)\t\t. \"./$1\" ;;\n    esac\n}\n\n\n# func_resolve_sysroot PATH\n# Replace a leading = in PATH with a sysroot.  Store the result into\n# func_resolve_sysroot_result\nfunc_resolve_sysroot ()\n{\n  func_resolve_sysroot_result=$1\n  case $func_resolve_sysroot_result in\n  =*)\n    func_stripname '=' '' \"$func_resolve_sysroot_result\"\n    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result\n    ;;\n  esac\n}\n\n# func_replace_sysroot PATH\n# If PATH begins with the sysroot, replace it with = and\n# store the result into func_replace_sysroot_result.\nfunc_replace_sysroot ()\n{\n  case \"$lt_sysroot:$1\" in\n  ?*:\"$lt_sysroot\"*)\n    func_stripname \"$lt_sysroot\" '' \"$1\"\n    func_replace_sysroot_result=\"=$func_stripname_result\"\n    ;;\n  *)\n    # Including no sysroot.\n    func_replace_sysroot_result=$1\n    ;;\n  esac\n}\n\n# func_infer_tag arg\n# Infer tagged configuration to use if any are available and\n# if one wasn't chosen via the \"--tag\" command line option.\n# Only attempt this if the compiler in the base compile\n# command doesn't match the default compiler.\n# arg is usually of the form 'gcc ...'\nfunc_infer_tag ()\n{\n    $opt_debug\n    if test -n \"$available_tags\" && test -z \"$tagname\"; then\n      CC_quoted=\n      for arg in $CC; do\n\tfunc_append_quoted CC_quoted \"$arg\"\n      done\n      CC_expanded=`func_echo_all $CC`\n      CC_quoted_expanded=`func_echo_all $CC_quoted`\n      case $@ in\n      # Blanks in the command may have been stripped by the calling shell,\n      # but not from the CC environment variable when configure was run.\n      \" $CC \"* | \"$CC \"* | \" $CC_expanded \"* | \"$CC_expanded \"* | \\\n      \" $CC_quoted\"* | \"$CC_quoted \"* | \" $CC_quoted_expanded \"* | \"$CC_quoted_expanded \"*) ;;\n      # Blanks at the start of $base_compile will cause this to fail\n      # if we don't check for them as well.\n      *)\n\tfor z in $available_tags; do\n\t  if $GREP \"^# ### BEGIN LIBTOOL TAG CONFIG: $z$\" < \"$progpath\" > /dev/null; then\n\t    # Evaluate the configuration.\n\t    eval \"`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`\"\n\t    CC_quoted=\n\t    for arg in $CC; do\n\t      # Double-quote args containing other shell metacharacters.\n\t      func_append_quoted CC_quoted \"$arg\"\n\t    done\n\t    CC_expanded=`func_echo_all $CC`\n\t    CC_quoted_expanded=`func_echo_all $CC_quoted`\n\t    case \"$@ \" in\n\t    \" $CC \"* | \"$CC \"* | \" $CC_expanded \"* | \"$CC_expanded \"* | \\\n\t    \" $CC_quoted\"* | \"$CC_quoted \"* | \" $CC_quoted_expanded \"* | \"$CC_quoted_expanded \"*)\n\t      # The compiler in the base compile command matches\n\t      # the one in the tagged configuration.\n\t      # Assume this is the tagged configuration we want.\n\t      tagname=$z\n\t      break\n\t      ;;\n\t    esac\n\t  fi\n\tdone\n\t# If $tagname still isn't set, then no tagged configuration\n\t# was found and let the user know that the \"--tag\" command\n\t# line option must be used.\n\tif test -z \"$tagname\"; then\n\t  func_echo \"unable to infer tagged configuration\"\n\t  func_fatal_error \"specify a tag with \\`--tag'\"\n#\telse\n#\t  func_verbose \"using $tagname tagged configuration\"\n\tfi\n\t;;\n      esac\n    fi\n}\n\n\n\n# func_write_libtool_object output_name pic_name nonpic_name\n# Create a libtool object file (analogous to a \".la\" file),\n# but don't create it if we're doing a dry run.\nfunc_write_libtool_object ()\n{\n    write_libobj=${1}\n    if test \"$build_libtool_libs\" = yes; then\n      write_lobj=\\'${2}\\'\n    else\n      write_lobj=none\n    fi\n\n    if test \"$build_old_libs\" = yes; then\n      write_oldobj=\\'${3}\\'\n    else\n      write_oldobj=none\n    fi\n\n    $opt_dry_run || {\n      cat >${write_libobj}T <<EOF\n# $write_libobj - a libtool object file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# Name of the PIC object.\npic_object=$write_lobj\n\n# Name of the non-PIC object\nnon_pic_object=$write_oldobj\n\nEOF\n      $MV \"${write_libobj}T\" \"${write_libobj}\"\n    }\n}\n\n\n##################################################\n# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #\n##################################################\n\n# func_convert_core_file_wine_to_w32 ARG\n# Helper function used by file name conversion functions when $build is *nix,\n# and $host is mingw, cygwin, or some other w32 environment. Relies on a\n# correctly configured wine environment available, with the winepath program\n# in $build's $PATH.\n#\n# ARG is the $build file name to be converted to w32 format.\n# Result is available in $func_convert_core_file_wine_to_w32_result, and will\n# be empty on error (or when ARG is empty)\nfunc_convert_core_file_wine_to_w32 ()\n{\n  $opt_debug\n  func_convert_core_file_wine_to_w32_result=\"$1\"\n  if test -n \"$1\"; then\n    # Unfortunately, winepath does not exit with a non-zero error code, so we\n    # are forced to check the contents of stdout. On the other hand, if the\n    # command is not found, the shell will set an exit code of 127 and print\n    # *an error message* to stdout. So we must check for both error code of\n    # zero AND non-empty stdout, which explains the odd construction:\n    func_convert_core_file_wine_to_w32_tmp=`winepath -w \"$1\" 2>/dev/null`\n    if test \"$?\" -eq 0 && test -n \"${func_convert_core_file_wine_to_w32_tmp}\"; then\n      func_convert_core_file_wine_to_w32_result=`$ECHO \"$func_convert_core_file_wine_to_w32_tmp\" |\n        $SED -e \"$lt_sed_naive_backslashify\"`\n    else\n      func_convert_core_file_wine_to_w32_result=\n    fi\n  fi\n}\n# end: func_convert_core_file_wine_to_w32\n\n\n# func_convert_core_path_wine_to_w32 ARG\n# Helper function used by path conversion functions when $build is *nix, and\n# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly\n# configured wine environment available, with the winepath program in $build's\n# $PATH. Assumes ARG has no leading or trailing path separator characters.\n#\n# ARG is path to be converted from $build format to win32.\n# Result is available in $func_convert_core_path_wine_to_w32_result.\n# Unconvertible file (directory) names in ARG are skipped; if no directory names\n# are convertible, then the result may be empty.\nfunc_convert_core_path_wine_to_w32 ()\n{\n  $opt_debug\n  # unfortunately, winepath doesn't convert paths, only file names\n  func_convert_core_path_wine_to_w32_result=\"\"\n  if test -n \"$1\"; then\n    oldIFS=$IFS\n    IFS=:\n    for func_convert_core_path_wine_to_w32_f in $1; do\n      IFS=$oldIFS\n      func_convert_core_file_wine_to_w32 \"$func_convert_core_path_wine_to_w32_f\"\n      if test -n \"$func_convert_core_file_wine_to_w32_result\" ; then\n        if test -z \"$func_convert_core_path_wine_to_w32_result\"; then\n          func_convert_core_path_wine_to_w32_result=\"$func_convert_core_file_wine_to_w32_result\"\n        else\n          func_append func_convert_core_path_wine_to_w32_result \";$func_convert_core_file_wine_to_w32_result\"\n        fi\n      fi\n    done\n    IFS=$oldIFS\n  fi\n}\n# end: func_convert_core_path_wine_to_w32\n\n\n# func_cygpath ARGS...\n# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when\n# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)\n# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or\n# (2), returns the Cygwin file name or path in func_cygpath_result (input\n# file name or path is assumed to be in w32 format, as previously converted\n# from $build's *nix or MSYS format). In case (3), returns the w32 file name\n# or path in func_cygpath_result (input file name or path is assumed to be in\n# Cygwin format). Returns an empty string on error.\n#\n# ARGS are passed to cygpath, with the last one being the file name or path to\n# be converted.\n#\n# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH\n# environment variable; do not put it in $PATH.\nfunc_cygpath ()\n{\n  $opt_debug\n  if test -n \"$LT_CYGPATH\" && test -f \"$LT_CYGPATH\"; then\n    func_cygpath_result=`$LT_CYGPATH \"$@\" 2>/dev/null`\n    if test \"$?\" -ne 0; then\n      # on failure, ensure result is empty\n      func_cygpath_result=\n    fi\n  else\n    func_cygpath_result=\n    func_error \"LT_CYGPATH is empty or specifies non-existent file: \\`$LT_CYGPATH'\"\n  fi\n}\n#end: func_cygpath\n\n\n# func_convert_core_msys_to_w32 ARG\n# Convert file name or path ARG from MSYS format to w32 format.  Return\n# result in func_convert_core_msys_to_w32_result.\nfunc_convert_core_msys_to_w32 ()\n{\n  $opt_debug\n  # awkward: cmd appends spaces to result\n  func_convert_core_msys_to_w32_result=`( cmd //c echo \"$1\" ) 2>/dev/null |\n    $SED -e 's/[ ]*$//' -e \"$lt_sed_naive_backslashify\"`\n}\n#end: func_convert_core_msys_to_w32\n\n\n# func_convert_file_check ARG1 ARG2\n# Verify that ARG1 (a file name in $build format) was converted to $host\n# format in ARG2. Otherwise, emit an error message, but continue (resetting\n# func_to_host_file_result to ARG1).\nfunc_convert_file_check ()\n{\n  $opt_debug\n  if test -z \"$2\" && test -n \"$1\" ; then\n    func_error \"Could not determine host file name corresponding to\"\n    func_error \"  \\`$1'\"\n    func_error \"Continuing, but uninstalled executables may not work.\"\n    # Fallback:\n    func_to_host_file_result=\"$1\"\n  fi\n}\n# end func_convert_file_check\n\n\n# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH\n# Verify that FROM_PATH (a path in $build format) was converted to $host\n# format in TO_PATH. Otherwise, emit an error message, but continue, resetting\n# func_to_host_file_result to a simplistic fallback value (see below).\nfunc_convert_path_check ()\n{\n  $opt_debug\n  if test -z \"$4\" && test -n \"$3\"; then\n    func_error \"Could not determine the host path corresponding to\"\n    func_error \"  \\`$3'\"\n    func_error \"Continuing, but uninstalled executables may not work.\"\n    # Fallback.  This is a deliberately simplistic \"conversion\" and\n    # should not be \"improved\".  See libtool.info.\n    if test \"x$1\" != \"x$2\"; then\n      lt_replace_pathsep_chars=\"s|$1|$2|g\"\n      func_to_host_path_result=`echo \"$3\" |\n        $SED -e \"$lt_replace_pathsep_chars\"`\n    else\n      func_to_host_path_result=\"$3\"\n    fi\n  fi\n}\n# end func_convert_path_check\n\n\n# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG\n# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT\n# and appending REPL if ORIG matches BACKPAT.\nfunc_convert_path_front_back_pathsep ()\n{\n  $opt_debug\n  case $4 in\n  $1 ) func_to_host_path_result=\"$3$func_to_host_path_result\"\n    ;;\n  esac\n  case $4 in\n  $2 ) func_append func_to_host_path_result \"$3\"\n    ;;\n  esac\n}\n# end func_convert_path_front_back_pathsep\n\n\n##################################################\n# $build to $host FILE NAME CONVERSION FUNCTIONS #\n##################################################\n# invoked via `$to_host_file_cmd ARG'\n#\n# In each case, ARG is the path to be converted from $build to $host format.\n# Result will be available in $func_to_host_file_result.\n\n\n# func_to_host_file ARG\n# Converts the file name ARG from $build format to $host format. Return result\n# in func_to_host_file_result.\nfunc_to_host_file ()\n{\n  $opt_debug\n  $to_host_file_cmd \"$1\"\n}\n# end func_to_host_file\n\n\n# func_to_tool_file ARG LAZY\n# converts the file name ARG from $build format to toolchain format. Return\n# result in func_to_tool_file_result.  If the conversion in use is listed\n# in (the comma separated) LAZY, no conversion takes place.\nfunc_to_tool_file ()\n{\n  $opt_debug\n  case ,$2, in\n    *,\"$to_tool_file_cmd\",*)\n      func_to_tool_file_result=$1\n      ;;\n    *)\n      $to_tool_file_cmd \"$1\"\n      func_to_tool_file_result=$func_to_host_file_result\n      ;;\n  esac\n}\n# end func_to_tool_file\n\n\n# func_convert_file_noop ARG\n# Copy ARG to func_to_host_file_result.\nfunc_convert_file_noop ()\n{\n  func_to_host_file_result=\"$1\"\n}\n# end func_convert_file_noop\n\n\n# func_convert_file_msys_to_w32 ARG\n# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic\n# conversion to w32 is not available inside the cwrapper.  Returns result in\n# func_to_host_file_result.\nfunc_convert_file_msys_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_msys_to_w32 \"$1\"\n    func_to_host_file_result=\"$func_convert_core_msys_to_w32_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_msys_to_w32\n\n\n# func_convert_file_cygwin_to_w32 ARG\n# Convert file name ARG from Cygwin to w32 format.  Returns result in\n# func_to_host_file_result.\nfunc_convert_file_cygwin_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    # because $build is cygwin, we call \"the\" cygpath in $PATH; no need to use\n    # LT_CYGPATH in this case.\n    func_to_host_file_result=`cygpath -m \"$1\"`\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_cygwin_to_w32\n\n\n# func_convert_file_nix_to_w32 ARG\n# Convert file name ARG from *nix to w32 format.  Requires a wine environment\n# and a working winepath. Returns result in func_to_host_file_result.\nfunc_convert_file_nix_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_file_wine_to_w32 \"$1\"\n    func_to_host_file_result=\"$func_convert_core_file_wine_to_w32_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_nix_to_w32\n\n\n# func_convert_file_msys_to_cygwin ARG\n# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.\n# Returns result in func_to_host_file_result.\nfunc_convert_file_msys_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_msys_to_w32 \"$1\"\n    func_cygpath -u \"$func_convert_core_msys_to_w32_result\"\n    func_to_host_file_result=\"$func_cygpath_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_msys_to_cygwin\n\n\n# func_convert_file_nix_to_cygwin ARG\n# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed\n# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result\n# in func_to_host_file_result.\nfunc_convert_file_nix_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.\n    func_convert_core_file_wine_to_w32 \"$1\"\n    func_cygpath -u \"$func_convert_core_file_wine_to_w32_result\"\n    func_to_host_file_result=\"$func_cygpath_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_nix_to_cygwin\n\n\n#############################################\n# $build to $host PATH CONVERSION FUNCTIONS #\n#############################################\n# invoked via `$to_host_path_cmd ARG'\n#\n# In each case, ARG is the path to be converted from $build to $host format.\n# The result will be available in $func_to_host_path_result.\n#\n# Path separators are also converted from $build format to $host format.  If\n# ARG begins or ends with a path separator character, it is preserved (but\n# converted to $host format) on output.\n#\n# All path conversion functions are named using the following convention:\n#   file name conversion function    : func_convert_file_X_to_Y ()\n#   path conversion function         : func_convert_path_X_to_Y ()\n# where, for any given $build/$host combination the 'X_to_Y' value is the\n# same.  If conversion functions are added for new $build/$host combinations,\n# the two new functions must follow this pattern, or func_init_to_host_path_cmd\n# will break.\n\n\n# func_init_to_host_path_cmd\n# Ensures that function \"pointer\" variable $to_host_path_cmd is set to the\n# appropriate value, based on the value of $to_host_file_cmd.\nto_host_path_cmd=\nfunc_init_to_host_path_cmd ()\n{\n  $opt_debug\n  if test -z \"$to_host_path_cmd\"; then\n    func_stripname 'func_convert_file_' '' \"$to_host_file_cmd\"\n    to_host_path_cmd=\"func_convert_path_${func_stripname_result}\"\n  fi\n}\n\n\n# func_to_host_path ARG\n# Converts the path ARG from $build format to $host format. Return result\n# in func_to_host_path_result.\nfunc_to_host_path ()\n{\n  $opt_debug\n  func_init_to_host_path_cmd\n  $to_host_path_cmd \"$1\"\n}\n# end func_to_host_path\n\n\n# func_convert_path_noop ARG\n# Copy ARG to func_to_host_path_result.\nfunc_convert_path_noop ()\n{\n  func_to_host_path_result=\"$1\"\n}\n# end func_convert_path_noop\n\n\n# func_convert_path_msys_to_w32 ARG\n# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic\n# conversion to w32 is not available inside the cwrapper.  Returns result in\n# func_to_host_path_result.\nfunc_convert_path_msys_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # Remove leading and trailing path separator characters from ARG.  MSYS\n    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';\n    # and winepath ignores them completely.\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_msys_to_w32 \"$func_to_host_path_tmp1\"\n    func_to_host_path_result=\"$func_convert_core_msys_to_w32_result\"\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_msys_to_w32\n\n\n# func_convert_path_cygwin_to_w32 ARG\n# Convert path ARG from Cygwin to w32 format.  Returns result in\n# func_to_host_file_result.\nfunc_convert_path_cygwin_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_to_host_path_result=`cygpath -m -p \"$func_to_host_path_tmp1\"`\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_cygwin_to_w32\n\n\n# func_convert_path_nix_to_w32 ARG\n# Convert path ARG from *nix to w32 format.  Requires a wine environment and\n# a working winepath.  Returns result in func_to_host_file_result.\nfunc_convert_path_nix_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_path_wine_to_w32 \"$func_to_host_path_tmp1\"\n    func_to_host_path_result=\"$func_convert_core_path_wine_to_w32_result\"\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_nix_to_w32\n\n\n# func_convert_path_msys_to_cygwin ARG\n# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.\n# Returns result in func_to_host_file_result.\nfunc_convert_path_msys_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_msys_to_w32 \"$func_to_host_path_tmp1\"\n    func_cygpath -u -p \"$func_convert_core_msys_to_w32_result\"\n    func_to_host_path_result=\"$func_cygpath_result\"\n    func_convert_path_check : : \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" : \"$1\"\n  fi\n}\n# end func_convert_path_msys_to_cygwin\n\n\n# func_convert_path_nix_to_cygwin ARG\n# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a\n# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in\n# func_to_host_file_result.\nfunc_convert_path_nix_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # Remove leading and trailing path separator characters from\n    # ARG. msys behavior is inconsistent here, cygpath turns them\n    # into '.;' and ';.', and winepath ignores them completely.\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_path_wine_to_w32 \"$func_to_host_path_tmp1\"\n    func_cygpath -u -p \"$func_convert_core_path_wine_to_w32_result\"\n    func_to_host_path_result=\"$func_cygpath_result\"\n    func_convert_path_check : : \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" : \"$1\"\n  fi\n}\n# end func_convert_path_nix_to_cygwin\n\n\n# func_mode_compile arg...\nfunc_mode_compile ()\n{\n    $opt_debug\n    # Get the compilation command and the source file.\n    base_compile=\n    srcfile=\"$nonopt\"  #  always keep a non-empty value in \"srcfile\"\n    suppress_opt=yes\n    suppress_output=\n    arg_mode=normal\n    libobj=\n    later=\n    pie_flag=\n\n    for arg\n    do\n      case $arg_mode in\n      arg  )\n\t# do not \"continue\".  Instead, add this to base_compile\n\tlastarg=\"$arg\"\n\targ_mode=normal\n\t;;\n\n      target )\n\tlibobj=\"$arg\"\n\targ_mode=normal\n\tcontinue\n\t;;\n\n      normal )\n\t# Accept any command-line options.\n\tcase $arg in\n\t-o)\n\t  test -n \"$libobj\" && \\\n\t    func_fatal_error \"you cannot specify \\`-o' more than once\"\n\t  arg_mode=target\n\t  continue\n\t  ;;\n\n\t-pie | -fpie | -fPIE)\n          func_append pie_flag \" $arg\"\n\t  continue\n\t  ;;\n\n\t-shared | -static | -prefer-pic | -prefer-non-pic)\n\t  func_append later \" $arg\"\n\t  continue\n\t  ;;\n\n\t-no-suppress)\n\t  suppress_opt=no\n\t  continue\n\t  ;;\n\n\t-Xcompiler)\n\t  arg_mode=arg  #  the next one goes into the \"base_compile\" arg list\n\t  continue      #  The current \"srcfile\" will either be retained or\n\t  ;;            #  replaced later.  I would guess that would be a bug.\n\n\t-Wc,*)\n\t  func_stripname '-Wc,' '' \"$arg\"\n\t  args=$func_stripname_result\n\t  lastarg=\n\t  save_ifs=\"$IFS\"; IFS=','\n\t  for arg in $args; do\n\t    IFS=\"$save_ifs\"\n\t    func_append_quoted lastarg \"$arg\"\n\t  done\n\t  IFS=\"$save_ifs\"\n\t  func_stripname ' ' '' \"$lastarg\"\n\t  lastarg=$func_stripname_result\n\n\t  # Add the arguments to base_compile.\n\t  func_append base_compile \" $lastarg\"\n\t  continue\n\t  ;;\n\n\t*)\n\t  # Accept the current argument as the source file.\n\t  # The previous \"srcfile\" becomes the current argument.\n\t  #\n\t  lastarg=\"$srcfile\"\n\t  srcfile=\"$arg\"\n\t  ;;\n\tesac  #  case $arg\n\t;;\n      esac    #  case $arg_mode\n\n      # Aesthetically quote the previous argument.\n      func_append_quoted base_compile \"$lastarg\"\n    done # for arg\n\n    case $arg_mode in\n    arg)\n      func_fatal_error \"you must specify an argument for -Xcompile\"\n      ;;\n    target)\n      func_fatal_error \"you must specify a target with \\`-o'\"\n      ;;\n    *)\n      # Get the name of the library object.\n      test -z \"$libobj\" && {\n\tfunc_basename \"$srcfile\"\n\tlibobj=\"$func_basename_result\"\n      }\n      ;;\n    esac\n\n    # Recognize several different file suffixes.\n    # If the user specifies -o file.o, it is replaced with file.lo\n    case $libobj in\n    *.[cCFSifmso] | \\\n    *.ada | *.adb | *.ads | *.asm | \\\n    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \\\n    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)\n      func_xform \"$libobj\"\n      libobj=$func_xform_result\n      ;;\n    esac\n\n    case $libobj in\n    *.lo) func_lo2o \"$libobj\"; obj=$func_lo2o_result ;;\n    *)\n      func_fatal_error \"cannot determine name of library object from \\`$libobj'\"\n      ;;\n    esac\n\n    func_infer_tag $base_compile\n\n    for arg in $later; do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tcontinue\n\t;;\n\n      -static)\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tcontinue\n\t;;\n\n      -prefer-pic)\n\tpic_mode=yes\n\tcontinue\n\t;;\n\n      -prefer-non-pic)\n\tpic_mode=no\n\tcontinue\n\t;;\n      esac\n    done\n\n    func_quote_for_eval \"$libobj\"\n    test \"X$libobj\" != \"X$func_quote_for_eval_result\" \\\n      && $ECHO \"X$libobj\" | $GREP '[]~#^*{};<>?\"'\"'\"'\t &()|`$[]' \\\n      && func_warning \"libobj name \\`$libobj' may not contain shell special characters.\"\n    func_dirname_and_basename \"$obj\" \"/\" \"\"\n    objname=\"$func_basename_result\"\n    xdir=\"$func_dirname_result\"\n    lobj=${xdir}$objdir/$objname\n\n    test -z \"$base_compile\" && \\\n      func_fatal_help \"you must specify a compilation command\"\n\n    # Delete any leftover library objects.\n    if test \"$build_old_libs\" = yes; then\n      removelist=\"$obj $lobj $libobj ${libobj}T\"\n    else\n      removelist=\"$lobj $libobj ${libobj}T\"\n    fi\n\n    # On Cygwin there's no \"real\" PIC flag so we must build both object types\n    case $host_os in\n    cygwin* | mingw* | pw32* | os2* | cegcc*)\n      pic_mode=default\n      ;;\n    esac\n    if test \"$pic_mode\" = no && test \"$deplibs_check_method\" != pass_all; then\n      # non-PIC code in shared libraries is not supported\n      pic_mode=default\n    fi\n\n    # Calculate the filename of the output object if compiler does\n    # not support -o with -c\n    if test \"$compiler_c_o\" = no; then\n      output_obj=`$ECHO \"$srcfile\" | $SED 's%^.*/%%; s%\\.[^.]*$%%'`.${objext}\n      lockfile=\"$output_obj.lock\"\n    else\n      output_obj=\n      need_locks=no\n      lockfile=\n    fi\n\n    # Lock this critical section if it is needed\n    # We use this script file to make the link, it avoids creating a new file\n    if test \"$need_locks\" = yes; then\n      until $opt_dry_run || ln \"$progpath\" \"$lockfile\" 2>/dev/null; do\n\tfunc_echo \"Waiting for $lockfile to be removed\"\n\tsleep 2\n      done\n    elif test \"$need_locks\" = warn; then\n      if test -f \"$lockfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile exists and contains:\n`cat $lockfile 2>/dev/null`\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n      func_append removelist \" $output_obj\"\n      $ECHO \"$srcfile\" > \"$lockfile\"\n    fi\n\n    $opt_dry_run || $RM $removelist\n    func_append removelist \" $lockfile\"\n    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15\n\n    func_to_tool_file \"$srcfile\" func_convert_file_msys_to_w32\n    srcfile=$func_to_tool_file_result\n    func_quote_for_eval \"$srcfile\"\n    qsrcfile=$func_quote_for_eval_result\n\n    # Only build a PIC object if we are building libtool libraries.\n    if test \"$build_libtool_libs\" = yes; then\n      # Without this assignment, base_compile gets emptied.\n      fbsd_hideous_sh_bug=$base_compile\n\n      if test \"$pic_mode\" != no; then\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      else\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile\"\n      fi\n\n      func_mkdir_p \"$xdir$objdir\"\n\n      if test -z \"$output_obj\"; then\n\t# Place PIC objects in $objdir\n\tfunc_append command \" -o $lobj\"\n      fi\n\n      func_show_eval_locale \"$command\"\t\\\n          'test -n \"$output_obj\" && $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed, then go on to compile the next one\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$lobj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$lobj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n\n      # Allow error messages only from the first compilation.\n      if test \"$suppress_opt\" = yes; then\n\tsuppress_output=' >/dev/null 2>&1'\n      fi\n    fi\n\n    # Only build a position-dependent object if we build old libraries.\n    if test \"$build_old_libs\" = yes; then\n      if test \"$pic_mode\" != yes; then\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile$pie_flag\"\n      else\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      fi\n      if test \"$compiler_c_o\" = yes; then\n\tfunc_append command \" -o $obj\"\n      fi\n\n      # Suppress compiler output if we already did a PIC compilation.\n      func_append command \"$suppress_output\"\n      func_show_eval_locale \"$command\" \\\n        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$obj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$obj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n    fi\n\n    $opt_dry_run || {\n      func_write_libtool_object \"$libobj\" \"$objdir/$objname\" \"$objname\"\n\n      # Unlock the critical section if it was locked\n      if test \"$need_locks\" != no; then\n\tremovelist=$lockfile\n        $RM \"$lockfile\"\n      fi\n    }\n\n    exit $EXIT_SUCCESS\n}\n\n$opt_help || {\n  test \"$opt_mode\" = compile && func_mode_compile ${1+\"$@\"}\n}\n\nfunc_mode_help ()\n{\n    # We need to display help for each of the modes.\n    case $opt_mode in\n      \"\")\n        # Generic help is extracted from the usage comments\n        # at the start of this file.\n        func_help\n        ;;\n\n      clean)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...\n\nRemove files from the build directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, object or program, all the files associated\nwith it are deleted. Otherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      compile)\n      $ECHO \\\n\"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE\n\nCompile a source file into a libtool library object.\n\nThis mode accepts the following additional options:\n\n  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE\n  -no-suppress      do not suppress compiler output for multiple passes\n  -prefer-pic       try to build PIC objects only\n  -prefer-non-pic   try to build non-PIC objects only\n  -shared           do not build a \\`.o' file suitable for static linking\n  -static           only build a \\`.o' file suitable for static linking\n  -Wc,FLAG          pass FLAG directly to the compiler\n\nCOMPILE-COMMAND is a command to be used in creating a \\`standard' object file\nfrom the given SOURCEFILE.\n\nThe output file name is determined by removing the directory component from\nSOURCEFILE, then substituting the C source code suffix \\`.c' with the\nlibrary object suffix, \\`.lo'.\"\n        ;;\n\n      execute)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...\n\nAutomatically set library path, then run a program.\n\nThis mode accepts the following additional options:\n\n  -dlopen FILE      add the directory containing FILE to the library path\n\nThis mode sets the library path environment variable according to \\`-dlopen'\nflags.\n\nIf any of the ARGS are libtool executable wrappers, then they are translated\ninto their corresponding uninstalled binary, and any of their required library\ndirectories are added to the library path.\n\nThen, COMMAND is executed, with ARGS as arguments.\"\n        ;;\n\n      finish)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...\n\nComplete the installation of libtool libraries.\n\nEach LIBDIR is a directory that contains libtool libraries.\n\nThe commands that this mode executes may require superuser privileges.  Use\nthe \\`--dry-run' option if you just want to see what would be executed.\"\n        ;;\n\n      install)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...\n\nInstall executables or libraries.\n\nINSTALL-COMMAND is the installation command.  The first component should be\neither the \\`install' or \\`cp' program.\n\nThe following components of INSTALL-COMMAND are treated specially:\n\n  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation\n\nThe rest of the components are interpreted as arguments to that command (only\nBSD-compatible install options are recognized).\"\n        ;;\n\n      link)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...\n\nLink object files or libraries together to form another library, or to\ncreate an executable program.\n\nLINK-COMMAND is a command using the C compiler that you would use to create\na program from several object files.\n\nThe following components of LINK-COMMAND are treated specially:\n\n  -all-static       do not do any dynamic linking at all\n  -avoid-version    do not add a version suffix if possible\n  -bindir BINDIR    specify path to binaries directory (for systems where\n                    libraries must be found in the PATH setting at runtime)\n  -dlopen FILE      \\`-dlpreopen' FILE if it cannot be dlopened at runtime\n  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols\n  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)\n  -export-symbols SYMFILE\n                    try to export only the symbols listed in SYMFILE\n  -export-symbols-regex REGEX\n                    try to export only the symbols matching REGEX\n  -LLIBDIR          search LIBDIR for required installed libraries\n  -lNAME            OUTPUT-FILE requires the installed library libNAME\n  -module           build a library that can dlopened\n  -no-fast-install  disable the fast-install mode\n  -no-install       link a not-installable executable\n  -no-undefined     declare that a library does not refer to external symbols\n  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects\n  -objectlist FILE  Use a list of object files found in FILE to specify objects\n  -precious-files-regex REGEX\n                    don't remove output files matching REGEX\n  -release RELEASE  specify package release information\n  -rpath LIBDIR     the created library will eventually be installed in LIBDIR\n  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries\n  -shared           only do dynamic linking of libtool libraries\n  -shrext SUFFIX    override the standard shared library file extension\n  -static           do not do any dynamic linking of uninstalled libtool libraries\n  -static-libtool-libs\n                    do not do any dynamic linking of libtool libraries\n  -version-info CURRENT[:REVISION[:AGE]]\n                    specify library version info [each variable defaults to 0]\n  -weak LIBNAME     declare that the target provides the LIBNAME interface\n  -Wc,FLAG\n  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler\n  -Wl,FLAG\n  -Xlinker FLAG     pass linker-specific FLAG directly to the linker\n  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)\n\nAll other options (arguments beginning with \\`-') are ignored.\n\nEvery other argument is treated as a filename.  Files ending in \\`.la' are\ntreated as uninstalled libtool libraries, other files are standard or library\nobject files.\n\nIf the OUTPUT-FILE ends in \\`.la', then a libtool library is created,\nonly library objects (\\`.lo' files) may be specified, and \\`-rpath' is\nrequired, except when creating a convenience library.\n\nIf OUTPUT-FILE ends in \\`.a' or \\`.lib', then a standard library is created\nusing \\`ar' and \\`ranlib', or on Windows using \\`lib'.\n\nIf OUTPUT-FILE ends in \\`.lo' or \\`.${objext}', then a reloadable object file\nis created, otherwise an executable program is created.\"\n        ;;\n\n      uninstall)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...\n\nRemove libraries from an installation directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, all the files associated with it are deleted.\nOtherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      *)\n        func_fatal_help \"invalid operation mode \\`$opt_mode'\"\n        ;;\n    esac\n\n    echo\n    $ECHO \"Try \\`$progname --help' for more information about other modes.\"\n}\n\n# Now that we've collected a possible --mode arg, show help if necessary\nif $opt_help; then\n  if test \"$opt_help\" = :; then\n    func_mode_help\n  else\n    {\n      func_help noexit\n      for opt_mode in compile link execute install finish uninstall clean; do\n\tfunc_mode_help\n      done\n    } | sed -n '1p; 2,$s/^Usage:/  or: /p'\n    {\n      func_help noexit\n      for opt_mode in compile link execute install finish uninstall clean; do\n\techo\n\tfunc_mode_help\n      done\n    } |\n    sed '1d\n      /^When reporting/,/^Report/{\n\tH\n\td\n      }\n      $x\n      /information about other modes/d\n      /more detailed .*MODE/d\n      s/^Usage:.*--mode=\\([^ ]*\\) .*/Description of \\1 mode:/'\n  fi\n  exit $?\nfi\n\n\n# func_mode_execute arg...\nfunc_mode_execute ()\n{\n    $opt_debug\n    # The first argument is the command name.\n    cmd=\"$nonopt\"\n    test -z \"$cmd\" && \\\n      func_fatal_help \"you must specify a COMMAND\"\n\n    # Handle -dlopen flags immediately.\n    for file in $opt_dlopen; do\n      test -f \"$file\" \\\n\t|| func_fatal_help \"\\`$file' is not a file\"\n\n      dir=\n      case $file in\n      *.la)\n\tfunc_resolve_sysroot \"$file\"\n\tfile=$func_resolve_sysroot_result\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$lib' is not a valid libtool archive\"\n\n\t# Read the libtool library.\n\tdlname=\n\tlibrary_names=\n\tfunc_source \"$file\"\n\n\t# Skip this library if it cannot be dlopened.\n\tif test -z \"$dlname\"; then\n\t  # Warn if it was a shared library.\n\t  test -n \"$library_names\" && \\\n\t    func_warning \"\\`$file' was not linked with \\`-export-dynamic'\"\n\t  continue\n\tfi\n\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\n\tif test -f \"$dir/$objdir/$dlname\"; then\n\t  func_append dir \"/$objdir\"\n\telse\n\t  if test ! -f \"$dir/$dlname\"; then\n\t    func_fatal_error \"cannot find \\`$dlname' in \\`$dir' or \\`$dir/$objdir'\"\n\t  fi\n\tfi\n\t;;\n\n      *.lo)\n\t# Just add the directory containing the .lo file.\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\t;;\n\n      *)\n\tfunc_warning \"\\`-dlopen' is ignored for non-libtool libraries and objects\"\n\tcontinue\n\t;;\n      esac\n\n      # Get the absolute pathname.\n      absdir=`cd \"$dir\" && pwd`\n      test -n \"$absdir\" && dir=\"$absdir\"\n\n      # Now add the directory to shlibpath_var.\n      if eval \"test -z \\\"\\$$shlibpath_var\\\"\"; then\n\teval \"$shlibpath_var=\\\"\\$dir\\\"\"\n      else\n\teval \"$shlibpath_var=\\\"\\$dir:\\$$shlibpath_var\\\"\"\n      fi\n    done\n\n    # This variable tells wrapper scripts just to set shlibpath_var\n    # rather than running their programs.\n    libtool_execute_magic=\"$magic\"\n\n    # Check if any of the arguments is a wrapper script.\n    args=\n    for file\n    do\n      case $file in\n      -* | *.la | *.lo ) ;;\n      *)\n\t# Do a test to see if this is really a libtool program.\n\tif func_ltwrapper_script_p \"$file\"; then\n\t  func_source \"$file\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\telif func_ltwrapper_executable_p \"$file\"; then\n\t  func_ltwrapper_scriptname \"$file\"\n\t  func_source \"$func_ltwrapper_scriptname_result\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\tfi\n\t;;\n      esac\n      # Quote arguments (to preserve shell metacharacters).\n      func_append_quoted args \"$file\"\n    done\n\n    if test \"X$opt_dry_run\" = Xfalse; then\n      if test -n \"$shlibpath_var\"; then\n\t# Export the shlibpath_var.\n\teval \"export $shlibpath_var\"\n      fi\n\n      # Restore saved environment variables\n      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\n      do\n\teval \"if test \\\"\\${save_$lt_var+set}\\\" = set; then\n                $lt_var=\\$save_$lt_var; export $lt_var\n\t      else\n\t\t$lt_unset $lt_var\n\t      fi\"\n      done\n\n      # Now prepare to actually exec the command.\n      exec_cmd=\"\\$cmd$args\"\n    else\n      # Display what would be done.\n      if test -n \"$shlibpath_var\"; then\n\teval \"\\$ECHO \\\"\\$shlibpath_var=\\$$shlibpath_var\\\"\"\n\techo \"export $shlibpath_var\"\n      fi\n      $ECHO \"$cmd$args\"\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$opt_mode\" = execute && func_mode_execute ${1+\"$@\"}\n\n\n# func_mode_finish arg...\nfunc_mode_finish ()\n{\n    $opt_debug\n    libs=\n    libdirs=\n    admincmds=\n\n    for opt in \"$nonopt\" ${1+\"$@\"}\n    do\n      if test -d \"$opt\"; then\n\tfunc_append libdirs \" $opt\"\n\n      elif test -f \"$opt\"; then\n\tif func_lalib_unsafe_p \"$opt\"; then\n\t  func_append libs \" $opt\"\n\telse\n\t  func_warning \"\\`$opt' is not a valid libtool archive\"\n\tfi\n\n      else\n\tfunc_fatal_error \"invalid argument \\`$opt'\"\n      fi\n    done\n\n    if test -n \"$libs\"; then\n      if test -n \"$lt_sysroot\"; then\n        sysroot_regex=`$ECHO \"$lt_sysroot\" | $SED \"$sed_make_literal_regex\"`\n        sysroot_cmd=\"s/\\([ ']\\)$sysroot_regex/\\1/g;\"\n      else\n        sysroot_cmd=\n      fi\n\n      # Remove sysroot references\n      if $opt_dry_run; then\n        for lib in $libs; do\n          echo \"removing references to $lt_sysroot and \\`=' prefixes from $lib\"\n        done\n      else\n        tmpdir=`func_mktempdir`\n        for lib in $libs; do\n\t  sed -e \"${sysroot_cmd} s/\\([ ']-[LR]\\)=/\\1/g; s/\\([ ']\\)=/\\1/g\" $lib \\\n\t    > $tmpdir/tmp-la\n\t  mv -f $tmpdir/tmp-la $lib\n\tdone\n        ${RM}r \"$tmpdir\"\n      fi\n    fi\n\n    if test -n \"$finish_cmds$finish_eval\" && test -n \"$libdirs\"; then\n      for libdir in $libdirs; do\n\tif test -n \"$finish_cmds\"; then\n\t  # Do each command in the finish commands.\n\t  func_execute_cmds \"$finish_cmds\" 'admincmds=\"$admincmds\n'\"$cmd\"'\"'\n\tfi\n\tif test -n \"$finish_eval\"; then\n\t  # Do the single finish_eval.\n\t  eval cmds=\\\"$finish_eval\\\"\n\t  $opt_dry_run || eval \"$cmds\" || func_append admincmds \"\n       $cmds\"\n\tfi\n      done\n    fi\n\n    # Exit here if they wanted silent mode.\n    $opt_silent && exit $EXIT_SUCCESS\n\n    if test -n \"$finish_cmds$finish_eval\" && test -n \"$libdirs\"; then\n      echo \"----------------------------------------------------------------------\"\n      echo \"Libraries have been installed in:\"\n      for libdir in $libdirs; do\n\t$ECHO \"   $libdir\"\n      done\n      echo\n      echo \"If you ever happen to want to link against installed libraries\"\n      echo \"in a given directory, LIBDIR, you must either use libtool, and\"\n      echo \"specify the full pathname of the library, or use the \\`-LLIBDIR'\"\n      echo \"flag during linking and do at least one of the following:\"\n      if test -n \"$shlibpath_var\"; then\n\techo \"   - add LIBDIR to the \\`$shlibpath_var' environment variable\"\n\techo \"     during execution\"\n      fi\n      if test -n \"$runpath_var\"; then\n\techo \"   - add LIBDIR to the \\`$runpath_var' environment variable\"\n\techo \"     during linking\"\n      fi\n      if test -n \"$hardcode_libdir_flag_spec\"; then\n\tlibdir=LIBDIR\n\teval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\n\t$ECHO \"   - use the \\`$flag' linker flag\"\n      fi\n      if test -n \"$admincmds\"; then\n\t$ECHO \"   - have your system administrator run these commands:$admincmds\"\n      fi\n      if test -f /etc/ld.so.conf; then\n\techo \"   - have your system administrator add LIBDIR to \\`/etc/ld.so.conf'\"\n      fi\n      echo\n\n      echo \"See any operating system documentation about shared libraries for\"\n      case $host in\n\tsolaris2.[6789]|solaris2.1[0-9])\n\t  echo \"more information, such as the ld(1), crle(1) and ld.so(8) manual\"\n\t  echo \"pages.\"\n\t  ;;\n\t*)\n\t  echo \"more information, such as the ld(1) and ld.so(8) manual pages.\"\n\t  ;;\n      esac\n      echo \"----------------------------------------------------------------------\"\n    fi\n    exit $EXIT_SUCCESS\n}\n\ntest \"$opt_mode\" = finish && func_mode_finish ${1+\"$@\"}\n\n\n# func_mode_install arg...\nfunc_mode_install ()\n{\n    $opt_debug\n    # There may be an optional sh(1) argument at the beginning of\n    # install_prog (especially on Windows NT).\n    if test \"$nonopt\" = \"$SHELL\" || test \"$nonopt\" = /bin/sh ||\n       # Allow the use of GNU shtool's install command.\n       case $nonopt in *shtool*) :;; *) false;; esac; then\n      # Aesthetically quote it.\n      func_quote_for_eval \"$nonopt\"\n      install_prog=\"$func_quote_for_eval_result \"\n      arg=$1\n      shift\n    else\n      install_prog=\n      arg=$nonopt\n    fi\n\n    # The real first argument should be the name of the installation program.\n    # Aesthetically quote it.\n    func_quote_for_eval \"$arg\"\n    func_append install_prog \"$func_quote_for_eval_result\"\n    install_shared_prog=$install_prog\n    case \" $install_prog \" in\n      *[\\\\\\ /]cp\\ *) install_cp=: ;;\n      *) install_cp=false ;;\n    esac\n\n    # We need to accept at least all the BSD install flags.\n    dest=\n    files=\n    opts=\n    prev=\n    install_type=\n    isdir=no\n    stripme=\n    no_mode=:\n    for arg\n    do\n      arg2=\n      if test -n \"$dest\"; then\n\tfunc_append files \" $dest\"\n\tdest=$arg\n\tcontinue\n      fi\n\n      case $arg in\n      -d) isdir=yes ;;\n      -f)\n\tif $install_cp; then :; else\n\t  prev=$arg\n\tfi\n\t;;\n      -g | -m | -o)\n\tprev=$arg\n\t;;\n      -s)\n\tstripme=\" -s\"\n\tcontinue\n\t;;\n      -*)\n\t;;\n      *)\n\t# If the previous option needed an argument, then skip it.\n\tif test -n \"$prev\"; then\n\t  if test \"x$prev\" = x-m && test -n \"$install_override_mode\"; then\n\t    arg2=$install_override_mode\n\t    no_mode=false\n\t  fi\n\t  prev=\n\telse\n\t  dest=$arg\n\t  continue\n\tfi\n\t;;\n      esac\n\n      # Aesthetically quote the argument.\n      func_quote_for_eval \"$arg\"\n      func_append install_prog \" $func_quote_for_eval_result\"\n      if test -n \"$arg2\"; then\n\tfunc_quote_for_eval \"$arg2\"\n      fi\n      func_append install_shared_prog \" $func_quote_for_eval_result\"\n    done\n\n    test -z \"$install_prog\" && \\\n      func_fatal_help \"you must specify an install program\"\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prev' option requires an argument\"\n\n    if test -n \"$install_override_mode\" && $no_mode; then\n      if $install_cp; then :; else\n\tfunc_quote_for_eval \"$install_override_mode\"\n\tfunc_append install_shared_prog \" -m $func_quote_for_eval_result\"\n      fi\n    fi\n\n    if test -z \"$files\"; then\n      if test -z \"$dest\"; then\n\tfunc_fatal_help \"no file or destination specified\"\n      else\n\tfunc_fatal_help \"you must specify a destination\"\n      fi\n    fi\n\n    # Strip any trailing slash from the destination.\n    func_stripname '' '/' \"$dest\"\n    dest=$func_stripname_result\n\n    # Check to see that the destination is a directory.\n    test -d \"$dest\" && isdir=yes\n    if test \"$isdir\" = yes; then\n      destdir=\"$dest\"\n      destname=\n    else\n      func_dirname_and_basename \"$dest\" \"\" \".\"\n      destdir=\"$func_dirname_result\"\n      destname=\"$func_basename_result\"\n\n      # Not a directory, so check to see that there is only one file specified.\n      set dummy $files; shift\n      test \"$#\" -gt 1 && \\\n\tfunc_fatal_help \"\\`$dest' is not a directory\"\n    fi\n    case $destdir in\n    [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n    *)\n      for file in $files; do\n\tcase $file in\n\t*.lo) ;;\n\t*)\n\t  func_fatal_help \"\\`$destdir' must be an absolute directory name\"\n\t  ;;\n\tesac\n      done\n      ;;\n    esac\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    staticlibs=\n    future_libdirs=\n    current_libdirs=\n    for file in $files; do\n\n      # Do each installation.\n      case $file in\n      *.$libext)\n\t# Do the static libraries later.\n\tfunc_append staticlibs \" $file\"\n\t;;\n\n      *.la)\n\tfunc_resolve_sysroot \"$file\"\n\tfile=$func_resolve_sysroot_result\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$file' is not a valid libtool archive\"\n\n\tlibrary_names=\n\told_library=\n\trelink_command=\n\tfunc_source \"$file\"\n\n\t# Add the libdir to current_libdirs if it is the destination.\n\tif test \"X$destdir\" = \"X$libdir\"; then\n\t  case \"$current_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append current_libdirs \" $libdir\" ;;\n\t  esac\n\telse\n\t  # Note the libdir as a future libdir.\n\t  case \"$future_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append future_libdirs \" $libdir\" ;;\n\t  esac\n\tfi\n\n\tfunc_dirname \"$file\" \"/\" \"\"\n\tdir=\"$func_dirname_result\"\n\tfunc_append dir \"$objdir\"\n\n\tif test -n \"$relink_command\"; then\n\t  # Determine the prefix the user has applied to our future dir.\n\t  inst_prefix_dir=`$ECHO \"$destdir\" | $SED -e \"s%$libdir\\$%%\"`\n\n\t  # Don't allow the user to place us outside of our expected\n\t  # location b/c this prevents finding dependent libraries that\n\t  # are installed to the same prefix.\n\t  # At present, this check doesn't affect windows .dll's that\n\t  # are installed into $libdir/../bin (currently, that works fine)\n\t  # but it's something to keep an eye on.\n\t  test \"$inst_prefix_dir\" = \"$destdir\" && \\\n\t    func_fatal_error \"error: cannot install \\`$file' to a directory not ending in $libdir\"\n\n\t  if test -n \"$inst_prefix_dir\"; then\n\t    # Stick the inst_prefix_dir data into the link command.\n\t    relink_command=`$ECHO \"$relink_command\" | $SED \"s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%\"`\n\t  else\n\t    relink_command=`$ECHO \"$relink_command\" | $SED \"s%@inst_prefix_dir@%%\"`\n\t  fi\n\n\t  func_warning \"relinking \\`$file'\"\n\t  func_show_eval \"$relink_command\" \\\n\t    'func_fatal_error \"error: relink \\`$file'\\'' with the above command before installing it\"'\n\tfi\n\n\t# See the names of the shared library.\n\tset dummy $library_names; shift\n\tif test -n \"$1\"; then\n\t  realname=\"$1\"\n\t  shift\n\n\t  srcname=\"$realname\"\n\t  test -n \"$relink_command\" && srcname=\"$realname\"T\n\n\t  # Install the shared library and build the symlinks.\n\t  func_show_eval \"$install_shared_prog $dir/$srcname $destdir/$realname\" \\\n\t      'exit $?'\n\t  tstripme=\"$stripme\"\n\t  case $host_os in\n\t  cygwin* | mingw* | pw32* | cegcc*)\n\t    case $realname in\n\t    *.dll.a)\n\t      tstripme=\"\"\n\t      ;;\n\t    esac\n\t    ;;\n\t  esac\n\t  if test -n \"$tstripme\" && test -n \"$striplib\"; then\n\t    func_show_eval \"$striplib $destdir/$realname\" 'exit $?'\n\t  fi\n\n\t  if test \"$#\" -gt 0; then\n\t    # Delete the old symlinks, and create new ones.\n\t    # Try `ln -sf' first, because the `ln' binary might depend on\n\t    # the symlink we replace!  Solaris /bin/ln does not understand -f,\n\t    # so we also need to try rm && ln -s.\n\t    for linkname\n\t    do\n\t      test \"$linkname\" != \"$realname\" \\\n\t\t&& func_show_eval \"(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })\"\n\t    done\n\t  fi\n\n\t  # Do each command in the postinstall commands.\n\t  lib=\"$destdir/$realname\"\n\t  func_execute_cmds \"$postinstall_cmds\" 'exit $?'\n\tfi\n\n\t# Install the pseudo-library for information purposes.\n\tfunc_basename \"$file\"\n\tname=\"$func_basename_result\"\n\tinstname=\"$dir/$name\"i\n\tfunc_show_eval \"$install_prog $instname $destdir/$name\" 'exit $?'\n\n\t# Maybe install the static library, too.\n\ttest -n \"$old_library\" && func_append staticlibs \" $dir/$old_library\"\n\t;;\n\n      *.lo)\n\t# Install (i.e. copy) a libtool object.\n\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# Deduce the name of the destination old-style object file.\n\tcase $destfile in\n\t*.lo)\n\t  func_lo2o \"$destfile\"\n\t  staticdest=$func_lo2o_result\n\t  ;;\n\t*.$objext)\n\t  staticdest=\"$destfile\"\n\t  destfile=\n\t  ;;\n\t*)\n\t  func_fatal_help \"cannot copy a libtool object to \\`$destfile'\"\n\t  ;;\n\tesac\n\n\t# Install the libtool object if requested.\n\ttest -n \"$destfile\" && \\\n\t  func_show_eval \"$install_prog $file $destfile\" 'exit $?'\n\n\t# Install the old object if enabled.\n\tif test \"$build_old_libs\" = yes; then\n\t  # Deduce the name of the old-style object file.\n\t  func_lo2o \"$file\"\n\t  staticobj=$func_lo2o_result\n\t  func_show_eval \"$install_prog \\$staticobj \\$staticdest\" 'exit $?'\n\tfi\n\texit $EXIT_SUCCESS\n\t;;\n\n      *)\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# If the file is missing, and there is a .exe on the end, strip it\n\t# because it is most likely a libtool script we actually want to\n\t# install\n\tstripped_ext=\"\"\n\tcase $file in\n\t  *.exe)\n\t    if test ! -f \"$file\"; then\n\t      func_stripname '' '.exe' \"$file\"\n\t      file=$func_stripname_result\n\t      stripped_ext=\".exe\"\n\t    fi\n\t    ;;\n\tesac\n\n\t# Do a test to see if this is really a libtool program.\n\tcase $host in\n\t*cygwin* | *mingw*)\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      wrapper=$func_ltwrapper_scriptname_result\n\t    else\n\t      func_stripname '' '.exe' \"$file\"\n\t      wrapper=$func_stripname_result\n\t    fi\n\t    ;;\n\t*)\n\t    wrapper=$file\n\t    ;;\n\tesac\n\tif func_ltwrapper_script_p \"$wrapper\"; then\n\t  notinst_deplibs=\n\t  relink_command=\n\n\t  func_source \"$wrapper\"\n\n\t  # Check the variables that should have been set.\n\t  test -z \"$generated_by_libtool_version\" && \\\n\t    func_fatal_error \"invalid libtool wrapper script \\`$wrapper'\"\n\n\t  finalize=yes\n\t  for lib in $notinst_deplibs; do\n\t    # Check to see that each library is installed.\n\t    libdir=\n\t    if test -f \"$lib\"; then\n\t      func_source \"$lib\"\n\t    fi\n\t    libfile=\"$libdir/\"`$ECHO \"$lib\" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test\n\t    if test -n \"$libdir\" && test ! -f \"$libfile\"; then\n\t      func_warning \"\\`$lib' has not been installed in \\`$libdir'\"\n\t      finalize=no\n\t    fi\n\t  done\n\n\t  relink_command=\n\t  func_source \"$wrapper\"\n\n\t  outputname=\n\t  if test \"$fast_install\" = no && test -n \"$relink_command\"; then\n\t    $opt_dry_run || {\n\t      if test \"$finalize\" = yes; then\n\t        tmpdir=`func_mktempdir`\n\t\tfunc_basename \"$file$stripped_ext\"\n\t\tfile=\"$func_basename_result\"\n\t        outputname=\"$tmpdir/$file\"\n\t        # Replace the output file specification.\n\t        relink_command=`$ECHO \"$relink_command\" | $SED 's%@OUTPUT@%'\"$outputname\"'%g'`\n\n\t        $opt_silent || {\n\t          func_quote_for_expand \"$relink_command\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t        }\n\t        if eval \"$relink_command\"; then :\n\t          else\n\t\t  func_error \"error: relink \\`$file' with the above command before installing it\"\n\t\t  $opt_dry_run || ${RM}r \"$tmpdir\"\n\t\t  continue\n\t        fi\n\t        file=\"$outputname\"\n\t      else\n\t        func_warning \"cannot relink \\`$file'\"\n\t      fi\n\t    }\n\t  else\n\t    # Install the binary that we compiled earlier.\n\t    file=`$ECHO \"$file$stripped_ext\" | $SED \"s%\\([^/]*\\)$%$objdir/\\1%\"`\n\t  fi\n\tfi\n\n\t# remove .exe since cygwin /usr/bin/install will append another\n\t# one anyway\n\tcase $install_prog,$host in\n\t*/usr/bin/install*,*cygwin*)\n\t  case $file:$destfile in\n\t  *.exe:*.exe)\n\t    # this is ok\n\t    ;;\n\t  *.exe:*)\n\t    destfile=$destfile.exe\n\t    ;;\n\t  *:*.exe)\n\t    func_stripname '' '.exe' \"$destfile\"\n\t    destfile=$func_stripname_result\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tfunc_show_eval \"$install_prog\\$stripme \\$file \\$destfile\" 'exit $?'\n\t$opt_dry_run || if test -n \"$outputname\"; then\n\t  ${RM}r \"$tmpdir\"\n\tfi\n\t;;\n      esac\n    done\n\n    for file in $staticlibs; do\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n\n      # Set up the ranlib parameters.\n      oldlib=\"$destdir/$name\"\n      func_to_tool_file \"$oldlib\" func_convert_file_msys_to_w32\n      tool_oldlib=$func_to_tool_file_result\n\n      func_show_eval \"$install_prog \\$file \\$oldlib\" 'exit $?'\n\n      if test -n \"$stripme\" && test -n \"$old_striplib\"; then\n\tfunc_show_eval \"$old_striplib $tool_oldlib\" 'exit $?'\n      fi\n\n      # Do each command in the postinstall commands.\n      func_execute_cmds \"$old_postinstall_cmds\" 'exit $?'\n    done\n\n    test -n \"$future_libdirs\" && \\\n      func_warning \"remember to run \\`$progname --finish$future_libdirs'\"\n\n    if test -n \"$current_libdirs\"; then\n      # Maybe just do a dry run.\n      $opt_dry_run && current_libdirs=\" -n$current_libdirs\"\n      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'\n    else\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$opt_mode\" = install && func_mode_install ${1+\"$@\"}\n\n\n# func_generate_dlsyms outputname originator pic_p\n# Extract symbols from dlprefiles and create ${outputname}S.o with\n# a dlpreopen symbol table.\nfunc_generate_dlsyms ()\n{\n    $opt_debug\n    my_outputname=\"$1\"\n    my_originator=\"$2\"\n    my_pic_p=\"${3-no}\"\n    my_prefix=`$ECHO \"$my_originator\" | sed 's%[^a-zA-Z0-9]%_%g'`\n    my_dlsyms=\n\n    if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n      if test -n \"$NM\" && test -n \"$global_symbol_pipe\"; then\n\tmy_dlsyms=\"${my_outputname}S.c\"\n      else\n\tfunc_error \"not configured to extract global symbols from dlpreopened files\"\n      fi\n    fi\n\n    if test -n \"$my_dlsyms\"; then\n      case $my_dlsyms in\n      \"\") ;;\n      *.c)\n\t# Discover the nlist of each of the dlfiles.\n\tnlist=\"$output_objdir/${my_outputname}.nm\"\n\n\tfunc_show_eval \"$RM $nlist ${nlist}S ${nlist}T\"\n\n\t# Parse the name list into a source file.\n\tfunc_verbose \"creating $output_objdir/$my_dlsyms\"\n\n\t$opt_dry_run || $ECHO > \"$output_objdir/$my_dlsyms\" \"\\\n/* $my_dlsyms - symbol resolution table for \\`$my_outputname' dlsym emulation. */\n/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */\n\n#ifdef __cplusplus\nextern \\\"C\\\" {\n#endif\n\n#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))\n#pragma GCC diagnostic ignored \\\"-Wstrict-prototypes\\\"\n#endif\n\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT_DLSYM_CONST\n#else\n# define LT_DLSYM_CONST const\n#endif\n\n/* External symbol declarations for the compiler. */\\\n\"\n\n\tif test \"$dlself\" = yes; then\n\t  func_verbose \"generating symbol list for \\`$output'\"\n\n\t  $opt_dry_run || echo ': @PROGRAM@ ' > \"$nlist\"\n\n\t  # Add our own program objects to the symbol list.\n\t  progfiles=`$ECHO \"$objs$old_deplibs\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\t  for progfile in $progfiles; do\n\t    func_to_tool_file \"$progfile\" func_convert_file_msys_to_w32\n\t    func_verbose \"extracting global C symbols from \\`$func_to_tool_file_result'\"\n\t    $opt_dry_run || eval \"$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'\"\n\t  done\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  if test -n \"$export_symbols_regex\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -e \"$export_symbols_regex\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  # Prepare the list of exported symbols\n\t  if test -z \"$export_symbols\"; then\n\t    export_symbols=\"$output_objdir/$outputname.exp\"\n\t    $opt_dry_run || {\n\t      $RM $export_symbols\n\t      eval \"${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \\(.*\\)$/\\1/p' \"'< \"$nlist\" > \"$export_symbols\"'\n\t      case $host in\n\t      *cygwin* | *mingw* | *cegcc* )\n                eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n                eval 'cat \"$export_symbols\" >> \"$output_objdir/$outputname.def\"'\n\t        ;;\n\t      esac\n\t    }\n\t  else\n\t    $opt_dry_run || {\n\t      eval \"${SED} -e 's/\\([].[*^$]\\)/\\\\\\\\\\1/g' -e 's/^/ /' -e 's/$/$/'\"' < \"$export_symbols\" > \"$output_objdir/$outputname.exp\"'\n\t      eval '$GREP -f \"$output_objdir/$outputname.exp\" < \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t      case $host in\n\t        *cygwin* | *mingw* | *cegcc* )\n\t          eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n\t          eval 'cat \"$nlist\" >> \"$output_objdir/$outputname.def\"'\n\t          ;;\n\t      esac\n\t    }\n\t  fi\n\tfi\n\n\tfor dlprefile in $dlprefiles; do\n\t  func_verbose \"extracting global C symbols from \\`$dlprefile'\"\n\t  func_basename \"$dlprefile\"\n\t  name=\"$func_basename_result\"\n          case $host in\n\t    *cygwin* | *mingw* | *cegcc* )\n\t      # if an import library, we need to obtain dlname\n\t      if func_win32_import_lib_p \"$dlprefile\"; then\n\t        func_tr_sh \"$dlprefile\"\n\t        eval \"curr_lafile=\\$libfile_$func_tr_sh_result\"\n\t        dlprefile_dlbasename=\"\"\n\t        if test -n \"$curr_lafile\" && func_lalib_p \"$curr_lafile\"; then\n\t          # Use subshell, to avoid clobbering current variable values\n\t          dlprefile_dlname=`source \"$curr_lafile\" && echo \"$dlname\"`\n\t          if test -n \"$dlprefile_dlname\" ; then\n\t            func_basename \"$dlprefile_dlname\"\n\t            dlprefile_dlbasename=\"$func_basename_result\"\n\t          else\n\t            # no lafile. user explicitly requested -dlpreopen <import library>.\n\t            $sharedlib_from_linklib_cmd \"$dlprefile\"\n\t            dlprefile_dlbasename=$sharedlib_from_linklib_result\n\t          fi\n\t        fi\n\t        $opt_dry_run || {\n\t          if test -n \"$dlprefile_dlbasename\" ; then\n\t            eval '$ECHO \": $dlprefile_dlbasename\" >> \"$nlist\"'\n\t          else\n\t            func_warning \"Could not compute DLL name from $name\"\n\t            eval '$ECHO \": $name \" >> \"$nlist\"'\n\t          fi\n\t          func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t          eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe |\n\t            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'\"\n\t        }\n\t      else # not an import lib\n\t        $opt_dry_run || {\n\t          eval '$ECHO \": $name \" >> \"$nlist\"'\n\t          func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t          eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe >> '$nlist'\"\n\t        }\n\t      fi\n\t    ;;\n\t    *)\n\t      $opt_dry_run || {\n\t        eval '$ECHO \": $name \" >> \"$nlist\"'\n\t        func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t        eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe >> '$nlist'\"\n\t      }\n\t    ;;\n          esac\n\tdone\n\n\t$opt_dry_run || {\n\t  # Make sure we have at least an empty file.\n\t  test -f \"$nlist\" || : > \"$nlist\"\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T\n\t    $MV \"$nlist\"T \"$nlist\"\n\t  fi\n\n\t  # Try sorting and uniquifying the output.\n\t  if $GREP -v \"^: \" < \"$nlist\" |\n\t      if sort -k 3 </dev/null >/dev/null 2>&1; then\n\t\tsort -k 3\n\t      else\n\t\tsort +2\n\t      fi |\n\t      uniq > \"$nlist\"S; then\n\t    :\n\t  else\n\t    $GREP -v \"^: \" < \"$nlist\" > \"$nlist\"S\n\t  fi\n\n\t  if test -f \"$nlist\"S; then\n\t    eval \"$global_symbol_to_cdecl\"' < \"$nlist\"S >> \"$output_objdir/$my_dlsyms\"'\n\t  else\n\t    echo '/* NONE */' >> \"$output_objdir/$my_dlsyms\"\n\t  fi\n\n\t  echo >> \"$output_objdir/$my_dlsyms\" \"\\\n\n/* The mapping between symbol names and symbols.  */\ntypedef struct {\n  const char *name;\n  void *address;\n} lt_dlsymlist;\nextern LT_DLSYM_CONST lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[];\nLT_DLSYM_CONST lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[] =\n{\\\n  { \\\"$my_originator\\\", (void *) 0 },\"\n\n\t  case $need_lib_prefix in\n\t  no)\n\t    eval \"$global_symbol_to_c_name_address\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  *)\n\t    eval \"$global_symbol_to_c_name_address_lib_prefix\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  esac\n\t  echo >> \"$output_objdir/$my_dlsyms\" \"\\\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt_${my_prefix}_LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\\\n\"\n\t} # !$opt_dry_run\n\n\tpic_flag_for_symtable=\n\tcase \"$compile_command \" in\n\t*\" -static \"*) ;;\n\t*)\n\t  case $host in\n\t  # compiling the symbol table file with pic_flag works around\n\t  # a FreeBSD bug that causes programs to crash when -lm is\n\t  # linked before any other PIC object.  But we must not use\n\t  # pic_flag when linking with -static.  The problem exists in\n\t  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.\n\t  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)\n\t    pic_flag_for_symtable=\" $pic_flag -DFREEBSD_WORKAROUND\" ;;\n\t  *-*-hpux*)\n\t    pic_flag_for_symtable=\" $pic_flag\"  ;;\n\t  *)\n\t    if test \"X$my_pic_p\" != Xno; then\n\t      pic_flag_for_symtable=\" $pic_flag\"\n\t    fi\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tsymtab_cflags=\n\tfor arg in $LTCFLAGS; do\n\t  case $arg in\n\t  -pie | -fpie | -fPIE) ;;\n\t  *) func_append symtab_cflags \" $arg\" ;;\n\t  esac\n\tdone\n\n\t# Now compile the dynamic symbol file.\n\tfunc_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable \"$my_dlsyms\")' 'exit $?'\n\n\t# Clean up the generated files.\n\tfunc_show_eval '$RM \"$output_objdir/$my_dlsyms\" \"$nlist\" \"${nlist}S\" \"${nlist}T\"'\n\n\t# Transform the symbol file into the correct name.\n\tsymfileobj=\"$output_objdir/${my_outputname}S.$objext\"\n\tcase $host in\n\t*cygwin* | *mingw* | *cegcc* )\n\t  if test -f \"$output_objdir/$my_outputname.def\"; then\n\t    compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t    finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t  else\n\t    compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t    finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  fi\n\t  ;;\n\t*)\n\t  compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  ;;\n\tesac\n\t;;\n      *)\n\tfunc_fatal_error \"unknown suffix for \\`$my_dlsyms'\"\n\t;;\n      esac\n    else\n      # We keep going just in case the user didn't refer to\n      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe\n      # really was required.\n\n      # Nullify the symbol file.\n      compile_command=`$ECHO \"$compile_command\" | $SED \"s% @SYMFILE@%%\"`\n      finalize_command=`$ECHO \"$finalize_command\" | $SED \"s% @SYMFILE@%%\"`\n    fi\n}\n\n# func_win32_libid arg\n# return the library type of file 'arg'\n#\n# Need a lot of goo to handle *both* DLLs and import libs\n# Has to be a shell function in order to 'eat' the argument\n# that is supplied when $file_magic_command is called.\n# Despite the name, also deal with 64 bit binaries.\nfunc_win32_libid ()\n{\n  $opt_debug\n  win32_libid_type=\"unknown\"\n  win32_fileres=`file -L $1 2>/dev/null`\n  case $win32_fileres in\n  *ar\\ archive\\ import\\ library*) # definitely import\n    win32_libid_type=\"x86 archive import\"\n    ;;\n  *ar\\ archive*) # could be an import, or static\n    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.\n    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |\n       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then\n      func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n      win32_nmres=`eval $NM -f posix -A \\\"$func_to_tool_file_result\\\" |\n\t$SED -n -e '\n\t    1,100{\n\t\t/ I /{\n\t\t    s,.*,import,\n\t\t    p\n\t\t    q\n\t\t}\n\t    }'`\n      case $win32_nmres in\n      import*)  win32_libid_type=\"x86 archive import\";;\n      *)        win32_libid_type=\"x86 archive static\";;\n      esac\n    fi\n    ;;\n  *DLL*)\n    win32_libid_type=\"x86 DLL\"\n    ;;\n  *executable*) # but shell scripts are \"executable\" too...\n    case $win32_fileres in\n    *MS\\ Windows\\ PE\\ Intel*)\n      win32_libid_type=\"x86 DLL\"\n      ;;\n    esac\n    ;;\n  esac\n  $ECHO \"$win32_libid_type\"\n}\n\n# func_cygming_dll_for_implib ARG\n#\n# Platform-specific function to extract the\n# name of the DLL associated with the specified\n# import library ARG.\n# Invoked by eval'ing the libtool variable\n#    $sharedlib_from_linklib_cmd\n# Result is available in the variable\n#    $sharedlib_from_linklib_result\nfunc_cygming_dll_for_implib ()\n{\n  $opt_debug\n  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify \"$1\"`\n}\n\n# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs\n#\n# The is the core of a fallback implementation of a\n# platform-specific function to extract the name of the\n# DLL associated with the specified import library LIBNAME.\n#\n# SECTION_NAME is either .idata$6 or .idata$7, depending\n# on the platform and compiler that created the implib.\n#\n# Echos the name of the DLL associated with the\n# specified import library.\nfunc_cygming_dll_for_implib_fallback_core ()\n{\n  $opt_debug\n  match_literal=`$ECHO \"$1\" | $SED \"$sed_make_literal_regex\"`\n  $OBJDUMP -s --section \"$1\" \"$2\" 2>/dev/null |\n    $SED '/^Contents of section '\"$match_literal\"':/{\n      # Place marker at beginning of archive member dllname section\n      s/.*/====MARK====/\n      p\n      d\n    }\n    # These lines can sometimes be longer than 43 characters, but\n    # are always uninteresting\n    /:[\t ]*file format pe[i]\\{,1\\}-/d\n    /^In archive [^:]*:/d\n    # Ensure marker is printed\n    /^====MARK====/p\n    # Remove all lines with less than 43 characters\n    /^.\\{43\\}/!d\n    # From remaining lines, remove first 43 characters\n    s/^.\\{43\\}//' |\n    $SED -n '\n      # Join marker and all lines until next marker into a single line\n      /^====MARK====/ b para\n      H\n      $ b para\n      b\n      :para\n      x\n      s/\\n//g\n      # Remove the marker\n      s/^====MARK====//\n      # Remove trailing dots and whitespace\n      s/[\\. \\t]*$//\n      # Print\n      /./p' |\n    # we now have a list, one entry per line, of the stringified\n    # contents of the appropriate section of all members of the\n    # archive which possess that section. Heuristic: eliminate\n    # all those which have a first or second character that is\n    # a '.' (that is, objdump's representation of an unprintable\n    # character.) This should work for all archives with less than\n    # 0x302f exports -- but will fail for DLLs whose name actually\n    # begins with a literal '.' or a single character followed by\n    # a '.'.\n    #\n    # Of those that remain, print the first one.\n    $SED -e '/^\\./d;/^.\\./d;q'\n}\n\n# func_cygming_gnu_implib_p ARG\n# This predicate returns with zero status (TRUE) if\n# ARG is a GNU/binutils-style import library. Returns\n# with nonzero status (FALSE) otherwise.\nfunc_cygming_gnu_implib_p ()\n{\n  $opt_debug\n  func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n  func_cygming_gnu_implib_tmp=`$NM \"$func_to_tool_file_result\" | eval \"$global_symbol_pipe\" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`\n  test -n \"$func_cygming_gnu_implib_tmp\"\n}\n\n# func_cygming_ms_implib_p ARG\n# This predicate returns with zero status (TRUE) if\n# ARG is an MS-style import library. Returns\n# with nonzero status (FALSE) otherwise.\nfunc_cygming_ms_implib_p ()\n{\n  $opt_debug\n  func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n  func_cygming_ms_implib_tmp=`$NM \"$func_to_tool_file_result\" | eval \"$global_symbol_pipe\" | $GREP '_NULL_IMPORT_DESCRIPTOR'`\n  test -n \"$func_cygming_ms_implib_tmp\"\n}\n\n# func_cygming_dll_for_implib_fallback ARG\n# Platform-specific function to extract the\n# name of the DLL associated with the specified\n# import library ARG.\n#\n# This fallback implementation is for use when $DLLTOOL\n# does not support the --identify-strict option.\n# Invoked by eval'ing the libtool variable\n#    $sharedlib_from_linklib_cmd\n# Result is available in the variable\n#    $sharedlib_from_linklib_result\nfunc_cygming_dll_for_implib_fallback ()\n{\n  $opt_debug\n  if func_cygming_gnu_implib_p \"$1\" ; then\n    # binutils import library\n    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' \"$1\"`\n  elif func_cygming_ms_implib_p \"$1\" ; then\n    # ms-generated import library\n    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' \"$1\"`\n  else\n    # unknown\n    sharedlib_from_linklib_result=\"\"\n  fi\n}\n\n\n# func_extract_an_archive dir oldlib\nfunc_extract_an_archive ()\n{\n    $opt_debug\n    f_ex_an_ar_dir=\"$1\"; shift\n    f_ex_an_ar_oldlib=\"$1\"\n    if test \"$lock_old_archive_extraction\" = yes; then\n      lockfile=$f_ex_an_ar_oldlib.lock\n      until $opt_dry_run || ln \"$progpath\" \"$lockfile\" 2>/dev/null; do\n\tfunc_echo \"Waiting for $lockfile to be removed\"\n\tsleep 2\n      done\n    fi\n    func_show_eval \"(cd \\$f_ex_an_ar_dir && $AR x \\\"\\$f_ex_an_ar_oldlib\\\")\" \\\n\t\t   'stat=$?; rm -f \"$lockfile\"; exit $stat'\n    if test \"$lock_old_archive_extraction\" = yes; then\n      $opt_dry_run || rm -f \"$lockfile\"\n    fi\n    if ($AR t \"$f_ex_an_ar_oldlib\" | sort | sort -uc >/dev/null 2>&1); then\n     :\n    else\n      func_fatal_error \"object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib\"\n    fi\n}\n\n\n# func_extract_archives gentop oldlib ...\nfunc_extract_archives ()\n{\n    $opt_debug\n    my_gentop=\"$1\"; shift\n    my_oldlibs=${1+\"$@\"}\n    my_oldobjs=\"\"\n    my_xlib=\"\"\n    my_xabs=\"\"\n    my_xdir=\"\"\n\n    for my_xlib in $my_oldlibs; do\n      # Extract the objects.\n      case $my_xlib in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) my_xabs=\"$my_xlib\" ;;\n\t*) my_xabs=`pwd`\"/$my_xlib\" ;;\n      esac\n      func_basename \"$my_xlib\"\n      my_xlib=\"$func_basename_result\"\n      my_xlib_u=$my_xlib\n      while :; do\n        case \" $extracted_archives \" in\n\t*\" $my_xlib_u \"*)\n\t  func_arith $extracted_serial + 1\n\t  extracted_serial=$func_arith_result\n\t  my_xlib_u=lt$extracted_serial-$my_xlib ;;\n\t*) break ;;\n\tesac\n      done\n      extracted_archives=\"$extracted_archives $my_xlib_u\"\n      my_xdir=\"$my_gentop/$my_xlib_u\"\n\n      func_mkdir_p \"$my_xdir\"\n\n      case $host in\n      *-darwin*)\n\tfunc_verbose \"Extracting $my_xabs\"\n\t# Do not bother doing anything if just a dry run\n\t$opt_dry_run || {\n\t  darwin_orig_dir=`pwd`\n\t  cd $my_xdir || exit $?\n\t  darwin_archive=$my_xabs\n\t  darwin_curdir=`pwd`\n\t  darwin_base_archive=`basename \"$darwin_archive\"`\n\t  darwin_arches=`$LIPO -info \"$darwin_archive\" 2>/dev/null | $GREP Architectures 2>/dev/null || true`\n\t  if test -n \"$darwin_arches\"; then\n\t    darwin_arches=`$ECHO \"$darwin_arches\" | $SED -e 's/.*are://'`\n\t    darwin_arch=\n\t    func_verbose \"$darwin_base_archive has multiple architectures $darwin_arches\"\n\t    for darwin_arch in  $darwin_arches ; do\n\t      func_mkdir_p \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      $LIPO -thin $darwin_arch -output \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\" \"${darwin_archive}\"\n\t      cd \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      func_extract_an_archive \"`pwd`\" \"${darwin_base_archive}\"\n\t      cd \"$darwin_curdir\"\n\t      $RM \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\"\n\t    done # $darwin_arches\n            ## Okay now we've a bunch of thin objects, gotta fatten them up :)\n\t    darwin_filelist=`find unfat-$$ -type f -name \\*.o -print -o -name \\*.lo -print | $SED -e \"$basename\" | sort -u`\n\t    darwin_file=\n\t    darwin_files=\n\t    for darwin_file in $darwin_filelist; do\n\t      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`\n\t      $LIPO -create -output \"$darwin_file\" $darwin_files\n\t    done # $darwin_filelist\n\t    $RM -rf unfat-$$\n\t    cd \"$darwin_orig_dir\"\n\t  else\n\t    cd $darwin_orig_dir\n\t    func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t  fi # $darwin_arches\n\t} # !$opt_dry_run\n\t;;\n      *)\n        func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t;;\n      esac\n      my_oldobjs=\"$my_oldobjs \"`find $my_xdir -name \\*.$objext -print -o -name \\*.lo -print | sort | $NL2SP`\n    done\n\n    func_extract_archives_result=\"$my_oldobjs\"\n}\n\n\n# func_emit_wrapper [arg=no]\n#\n# Emit a libtool wrapper script on stdout.\n# Don't directly open a file because we may want to\n# incorporate the script contents within a cygwin/mingw\n# wrapper executable.  Must ONLY be called from within\n# func_mode_link because it depends on a number of variables\n# set therein.\n#\n# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\n# variable will take.  If 'yes', then the emitted script\n# will assume that the directory in which it is stored is\n# the $objdir directory.  This is a cygwin/mingw-specific\n# behavior.\nfunc_emit_wrapper ()\n{\n\tfunc_emit_wrapper_arg1=${1-no}\n\n\t$ECHO \"\\\n#! $SHELL\n\n# $output - temporary wrapper script for $objdir/$outputname\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# The $output program cannot be directly executed until all the libtool\n# libraries that it depends on are installed.\n#\n# This wrapper script should never be moved out of the build directory.\n# If it is, it will not operate correctly.\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nsed_quote_subst='$sed_quote_subst'\n\n# Be Bourne compatible\nif test -n \\\"\\${ZSH_VERSION+set}\\\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nrelink_command=\\\"$relink_command\\\"\n\n# This environment variable determines our operation mode.\nif test \\\"\\$libtool_install_magic\\\" = \\\"$magic\\\"; then\n  # install mode needs the following variables:\n  generated_by_libtool_version='$macro_version'\n  notinst_deplibs='$notinst_deplibs'\nelse\n  # When we are sourced in execute mode, \\$file and \\$ECHO are already set.\n  if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n    file=\\\"\\$0\\\"\"\n\n    qECHO=`$ECHO \"$ECHO\" | $SED \"$sed_quote_subst\"`\n    $ECHO \"\\\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$1\n_LTECHO_EOF'\n}\n    ECHO=\\\"$qECHO\\\"\n  fi\n\n# Very basic option parsing. These options are (a) specific to\n# the libtool wrapper, (b) are identical between the wrapper\n# /script/ and the wrapper /executable/ which is used only on\n# windows platforms, and (c) all begin with the string \"--lt-\"\n# (application programs are unlikely to have options which match\n# this pattern).\n#\n# There are only two supported options: --lt-debug and\n# --lt-dump-script. There is, deliberately, no --lt-help.\n#\n# The first argument to this parsing function should be the\n# script's $0 value, followed by \"$@\".\nlt_option_debug=\nfunc_parse_lt_options ()\n{\n  lt_script_arg0=\\$0\n  shift\n  for lt_opt\n  do\n    case \\\"\\$lt_opt\\\" in\n    --lt-debug) lt_option_debug=1 ;;\n    --lt-dump-script)\n        lt_dump_D=\\`\\$ECHO \\\"X\\$lt_script_arg0\\\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\\`\n        test \\\"X\\$lt_dump_D\\\" = \\\"X\\$lt_script_arg0\\\" && lt_dump_D=.\n        lt_dump_F=\\`\\$ECHO \\\"X\\$lt_script_arg0\\\" | $SED -e 's/^X//' -e 's%^.*/%%'\\`\n        cat \\\"\\$lt_dump_D/\\$lt_dump_F\\\"\n        exit 0\n      ;;\n    --lt-*)\n        \\$ECHO \\\"Unrecognized --lt- option: '\\$lt_opt'\\\" 1>&2\n        exit 1\n      ;;\n    esac\n  done\n\n  # Print the debug banner immediately:\n  if test -n \\\"\\$lt_option_debug\\\"; then\n    echo \\\"${outputname}:${output}:\\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\\\" 1>&2\n  fi\n}\n\n# Used when --lt-debug. Prints its arguments to stdout\n# (redirection is the responsibility of the caller)\nfunc_lt_dump_args ()\n{\n  lt_dump_args_N=1;\n  for lt_arg\n  do\n    \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[\\$lt_dump_args_N]: \\$lt_arg\\\"\n    lt_dump_args_N=\\`expr \\$lt_dump_args_N + 1\\`\n  done\n}\n\n# Core function for launching the target application\nfunc_exec_program_core ()\n{\n\"\n  case $host in\n  # Backslashes separate directories on plain windows\n  *-*-mingw | *-*-os2* | *-cegcc*)\n    $ECHO \"\\\n      if test -n \\\"\\$lt_option_debug\\\"; then\n        \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[0]: \\$progdir\\\\\\\\\\$program\\\" 1>&2\n        func_lt_dump_args \\${1+\\\"\\$@\\\"} 1>&2\n      fi\n      exec \\\"\\$progdir\\\\\\\\\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n    ;;\n\n  *)\n    $ECHO \"\\\n      if test -n \\\"\\$lt_option_debug\\\"; then\n        \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[0]: \\$progdir/\\$program\\\" 1>&2\n        func_lt_dump_args \\${1+\\\"\\$@\\\"} 1>&2\n      fi\n      exec \\\"\\$progdir/\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n    ;;\n  esac\n  $ECHO \"\\\n      \\$ECHO \\\"\\$0: cannot exec \\$program \\$*\\\" 1>&2\n      exit 1\n}\n\n# A function to encapsulate launching the target application\n# Strips options in the --lt-* namespace from \\$@ and\n# launches target application with the remaining arguments.\nfunc_exec_program ()\n{\n  case \\\" \\$* \\\" in\n  *\\\\ --lt-*)\n    for lt_wr_arg\n    do\n      case \\$lt_wr_arg in\n      --lt-*) ;;\n      *) set x \\\"\\$@\\\" \\\"\\$lt_wr_arg\\\"; shift;;\n      esac\n      shift\n    done ;;\n  esac\n  func_exec_program_core \\${1+\\\"\\$@\\\"}\n}\n\n  # Parse options\n  func_parse_lt_options \\\"\\$0\\\" \\${1+\\\"\\$@\\\"}\n\n  # Find the directory that this script lives in.\n  thisdir=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%/[^/]*$%%'\\`\n  test \\\"x\\$thisdir\\\" = \\\"x\\$file\\\" && thisdir=.\n\n  # Follow symbolic links until we get to the real thisdir.\n  file=\\`ls -ld \\\"\\$file\\\" | $SED -n 's/.*-> //p'\\`\n  while test -n \\\"\\$file\\\"; do\n    destdir=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%/[^/]*\\$%%'\\`\n\n    # If there was a directory component, then change thisdir.\n    if test \\\"x\\$destdir\\\" != \\\"x\\$file\\\"; then\n      case \\\"\\$destdir\\\" in\n      [\\\\\\\\/]* | [A-Za-z]:[\\\\\\\\/]*) thisdir=\\\"\\$destdir\\\" ;;\n      *) thisdir=\\\"\\$thisdir/\\$destdir\\\" ;;\n      esac\n    fi\n\n    file=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%^.*/%%'\\`\n    file=\\`ls -ld \\\"\\$thisdir/\\$file\\\" | $SED -n 's/.*-> //p'\\`\n  done\n\n  # Usually 'no', except on cygwin/mingw when embedded into\n  # the cwrapper.\n  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1\n  if test \\\"\\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\\\" = \\\"yes\\\"; then\n    # special case for '.'\n    if test \\\"\\$thisdir\\\" = \\\".\\\"; then\n      thisdir=\\`pwd\\`\n    fi\n    # remove .libs from thisdir\n    case \\\"\\$thisdir\\\" in\n    *[\\\\\\\\/]$objdir ) thisdir=\\`\\$ECHO \\\"\\$thisdir\\\" | $SED 's%[\\\\\\\\/][^\\\\\\\\/]*$%%'\\` ;;\n    $objdir )   thisdir=. ;;\n    esac\n  fi\n\n  # Try to get the absolute directory name.\n  absdir=\\`cd \\\"\\$thisdir\\\" && pwd\\`\n  test -n \\\"\\$absdir\\\" && thisdir=\\\"\\$absdir\\\"\n\"\n\n\tif test \"$fast_install\" = yes; then\n\t  $ECHO \"\\\n  program=lt-'$outputname'$exeext\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\n  if test ! -f \\\"\\$progdir/\\$program\\\" ||\n     { file=\\`ls -1dt \\\"\\$progdir/\\$program\\\" \\\"\\$progdir/../\\$program\\\" 2>/dev/null | ${SED} 1q\\`; \\\\\n       test \\\"X\\$file\\\" != \\\"X\\$progdir/\\$program\\\"; }; then\n\n    file=\\\"\\$\\$-\\$program\\\"\n\n    if test ! -d \\\"\\$progdir\\\"; then\n      $MKDIR \\\"\\$progdir\\\"\n    else\n      $RM \\\"\\$progdir/\\$file\\\"\n    fi\"\n\n\t  $ECHO \"\\\n\n    # relink executable if necessary\n    if test -n \\\"\\$relink_command\\\"; then\n      if relink_command_output=\\`eval \\$relink_command 2>&1\\`; then :\n      else\n\t$ECHO \\\"\\$relink_command_output\\\" >&2\n\t$RM \\\"\\$progdir/\\$file\\\"\n\texit 1\n      fi\n    fi\n\n    $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\" 2>/dev/null ||\n    { $RM \\\"\\$progdir/\\$program\\\";\n      $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\"; }\n    $RM \\\"\\$progdir/\\$file\\\"\n  fi\"\n\telse\n\t  $ECHO \"\\\n  program='$outputname'\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\"\n\tfi\n\n\t$ECHO \"\\\n\n  if test -f \\\"\\$progdir/\\$program\\\"; then\"\n\n\t# fixup the dll searchpath if we need to.\n\t#\n\t# Fix the DLL searchpath if we need to.  Do this before prepending\n\t# to shlibpath, because on Windows, both are PATH and uninstalled\n\t# libraries must come first.\n\tif test -n \"$dllsearchpath\"; then\n\t  $ECHO \"\\\n    # Add the dll search path components to the executable PATH\n    PATH=$dllsearchpath:\\$PATH\n\"\n\tfi\n\n\t# Export our shlibpath_var if we have one.\n\tif test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n\t  $ECHO \"\\\n    # Add our own library path to $shlibpath_var\n    $shlibpath_var=\\\"$temp_rpath\\$$shlibpath_var\\\"\n\n    # Some systems cannot cope with colon-terminated $shlibpath_var\n    # The second colon is a workaround for a bug in BeOS R4 sed\n    $shlibpath_var=\\`\\$ECHO \\\"\\$$shlibpath_var\\\" | $SED 's/::*\\$//'\\`\n\n    export $shlibpath_var\n\"\n\tfi\n\n\t$ECHO \"\\\n    if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n      # Run the actual program with our arguments.\n      func_exec_program \\${1+\\\"\\$@\\\"}\n    fi\n  else\n    # The program doesn't exist.\n    \\$ECHO \\\"\\$0: error: \\\\\\`\\$progdir/\\$program' does not exist\\\" 1>&2\n    \\$ECHO \\\"This script is just a wrapper for \\$program.\\\" 1>&2\n    \\$ECHO \\\"See the $PACKAGE documentation for more information.\\\" 1>&2\n    exit 1\n  fi\nfi\\\n\"\n}\n\n\n# func_emit_cwrapperexe_src\n# emit the source code for a wrapper executable on stdout\n# Must ONLY be called from within func_mode_link because\n# it depends on a number of variable set therein.\nfunc_emit_cwrapperexe_src ()\n{\n\tcat <<EOF\n\n/* $cwrappersource - temporary wrapper executable for $objdir/$outputname\n   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n\n   The $output program cannot be directly executed until all the libtool\n   libraries that it depends on are installed.\n\n   This wrapper executable should never be moved out of the build directory.\n   If it is, it will not operate correctly.\n*/\nEOF\n\t    cat <<\"EOF\"\n#ifdef _MSC_VER\n# define _CRT_SECURE_NO_DEPRECATE 1\n#endif\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef _MSC_VER\n# include <direct.h>\n# include <process.h>\n# include <io.h>\n#else\n# include <unistd.h>\n# include <stdint.h>\n# ifdef __CYGWIN__\n#  include <io.h>\n# endif\n#endif\n#include <malloc.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <sys/stat.h>\n\n/* declarations of non-ANSI functions */\n#if defined(__MINGW32__)\n# ifdef __STRICT_ANSI__\nint _putenv (const char *);\n# endif\n#elif defined(__CYGWIN__)\n# ifdef __STRICT_ANSI__\nchar *realpath (const char *, char *);\nint putenv (char *);\nint setenv (const char *, const char *, int);\n# endif\n/* #elif defined (other platforms) ... */\n#endif\n\n/* portability defines, excluding path handling macros */\n#if defined(_MSC_VER)\n# define setmode _setmode\n# define stat    _stat\n# define chmod   _chmod\n# define getcwd  _getcwd\n# define putenv  _putenv\n# define S_IXUSR _S_IEXEC\n# ifndef _INTPTR_T_DEFINED\n#  define _INTPTR_T_DEFINED\n#  define intptr_t int\n# endif\n#elif defined(__MINGW32__)\n# define setmode _setmode\n# define stat    _stat\n# define chmod   _chmod\n# define getcwd  _getcwd\n# define putenv  _putenv\n#elif defined(__CYGWIN__)\n# define HAVE_SETENV\n# define FOPEN_WB \"wb\"\n/* #elif defined (other platforms) ... */\n#endif\n\n#if defined(PATH_MAX)\n# define LT_PATHMAX PATH_MAX\n#elif defined(MAXPATHLEN)\n# define LT_PATHMAX MAXPATHLEN\n#else\n# define LT_PATHMAX 1024\n#endif\n\n#ifndef S_IXOTH\n# define S_IXOTH 0\n#endif\n#ifndef S_IXGRP\n# define S_IXGRP 0\n#endif\n\n/* path handling portability macros */\n#ifndef DIR_SEPARATOR\n# define DIR_SEPARATOR '/'\n# define PATH_SEPARATOR ':'\n#endif\n\n#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \\\n  defined (__OS2__)\n# define HAVE_DOS_BASED_FILE_SYSTEM\n# define FOPEN_WB \"wb\"\n# ifndef DIR_SEPARATOR_2\n#  define DIR_SEPARATOR_2 '\\\\'\n# endif\n# ifndef PATH_SEPARATOR_2\n#  define PATH_SEPARATOR_2 ';'\n# endif\n#endif\n\n#ifndef DIR_SEPARATOR_2\n# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)\n#else /* DIR_SEPARATOR_2 */\n# define IS_DIR_SEPARATOR(ch) \\\n\t(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))\n#endif /* DIR_SEPARATOR_2 */\n\n#ifndef PATH_SEPARATOR_2\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)\n#else /* PATH_SEPARATOR_2 */\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)\n#endif /* PATH_SEPARATOR_2 */\n\n#ifndef FOPEN_WB\n# define FOPEN_WB \"w\"\n#endif\n#ifndef _O_BINARY\n# define _O_BINARY 0\n#endif\n\n#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))\n#define XFREE(stale) do { \\\n  if (stale) { free ((void *) stale); stale = 0; } \\\n} while (0)\n\n#if defined(LT_DEBUGWRAPPER)\nstatic int lt_debug = 1;\n#else\nstatic int lt_debug = 0;\n#endif\n\nconst char *program_name = \"libtool-wrapper\"; /* in case xstrdup fails */\n\nvoid *xmalloc (size_t num);\nchar *xstrdup (const char *string);\nconst char *base_name (const char *name);\nchar *find_executable (const char *wrapper);\nchar *chase_symlinks (const char *pathspec);\nint make_executable (const char *path);\nint check_executable (const char *path);\nchar *strendzap (char *str, const char *pat);\nvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);\nvoid lt_fatal (const char *file, int line, const char *message, ...);\nstatic const char *nonnull (const char *s);\nstatic const char *nonempty (const char *s);\nvoid lt_setenv (const char *name, const char *value);\nchar *lt_extend_str (const char *orig_value, const char *add, int to_end);\nvoid lt_update_exe_path (const char *name, const char *value);\nvoid lt_update_lib_path (const char *name, const char *value);\nchar **prepare_spawn (char **argv);\nvoid lt_dump_script (FILE *f);\nEOF\n\n\t    cat <<EOF\nvolatile const char * MAGIC_EXE = \"$magic_exe\";\nconst char * LIB_PATH_VARNAME = \"$shlibpath_var\";\nEOF\n\n\t    if test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n              func_to_host_path \"$temp_rpath\"\n\t      cat <<EOF\nconst char * LIB_PATH_VALUE   = \"$func_to_host_path_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * LIB_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test -n \"$dllsearchpath\"; then\n              func_to_host_path \"$dllsearchpath:\"\n\t      cat <<EOF\nconst char * EXE_PATH_VARNAME = \"PATH\";\nconst char * EXE_PATH_VALUE   = \"$func_to_host_path_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * EXE_PATH_VARNAME = \"\";\nconst char * EXE_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test \"$fast_install\" = yes; then\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"lt-$outputname\"; /* hopefully, no .exe */\nEOF\n\t    else\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"$outputname\"; /* hopefully, no .exe */\nEOF\n\t    fi\n\n\n\t    cat <<\"EOF\"\n\n#define LTWRAPPER_OPTION_PREFIX         \"--lt-\"\n\nstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;\nstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX \"dump-script\";\nstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX \"debug\";\n\nint\nmain (int argc, char *argv[])\n{\n  char **newargz;\n  int  newargc;\n  char *tmp_pathspec;\n  char *actual_cwrapper_path;\n  char *actual_cwrapper_name;\n  char *target_name;\n  char *lt_argv_zero;\n  intptr_t rval = 127;\n\n  int i;\n\n  program_name = (char *) xstrdup (base_name (argv[0]));\n  newargz = XMALLOC (char *, argc + 1);\n\n  /* very simple arg parsing; don't want to rely on getopt\n   * also, copy all non cwrapper options to newargz, except\n   * argz[0], which is handled differently\n   */\n  newargc=0;\n  for (i = 1; i < argc; i++)\n    {\n      if (strcmp (argv[i], dumpscript_opt) == 0)\n\t{\nEOF\n\t    case \"$host\" in\n\t      *mingw* | *cygwin* )\n\t\t# make stdout use \"unix\" line endings\n\t\techo \"          setmode(1,_O_BINARY);\"\n\t\t;;\n\t      esac\n\n\t    cat <<\"EOF\"\n\t  lt_dump_script (stdout);\n\t  return 0;\n\t}\n      if (strcmp (argv[i], debug_opt) == 0)\n\t{\n          lt_debug = 1;\n          continue;\n\t}\n      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)\n        {\n          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX\n             namespace, but it is not one of the ones we know about and\n             have already dealt with, above (inluding dump-script), then\n             report an error. Otherwise, targets might begin to believe\n             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX\n             namespace. The first time any user complains about this, we'll\n             need to make LTWRAPPER_OPTION_PREFIX a configure-time option\n             or a configure.ac-settable value.\n           */\n          lt_fatal (__FILE__, __LINE__,\n\t\t    \"unrecognized %s option: '%s'\",\n                    ltwrapper_option_prefix, argv[i]);\n        }\n      /* otherwise ... */\n      newargz[++newargc] = xstrdup (argv[i]);\n    }\n  newargz[++newargc] = NULL;\n\nEOF\n\t    cat <<EOF\n  /* The GNU banner must be the first non-error debug message */\n  lt_debugprintf (__FILE__, __LINE__, \"libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\\n\");\nEOF\n\t    cat <<\"EOF\"\n  lt_debugprintf (__FILE__, __LINE__, \"(main) argv[0]: %s\\n\", argv[0]);\n  lt_debugprintf (__FILE__, __LINE__, \"(main) program_name: %s\\n\", program_name);\n\n  tmp_pathspec = find_executable (argv[0]);\n  if (tmp_pathspec == NULL)\n    lt_fatal (__FILE__, __LINE__, \"couldn't find %s\", argv[0]);\n  lt_debugprintf (__FILE__, __LINE__,\n                  \"(main) found exe (before symlink chase) at: %s\\n\",\n\t\t  tmp_pathspec);\n\n  actual_cwrapper_path = chase_symlinks (tmp_pathspec);\n  lt_debugprintf (__FILE__, __LINE__,\n                  \"(main) found exe (after symlink chase) at: %s\\n\",\n\t\t  actual_cwrapper_path);\n  XFREE (tmp_pathspec);\n\n  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));\n  strendzap (actual_cwrapper_path, actual_cwrapper_name);\n\n  /* wrapper name transforms */\n  strendzap (actual_cwrapper_name, \".exe\");\n  tmp_pathspec = lt_extend_str (actual_cwrapper_name, \".exe\", 1);\n  XFREE (actual_cwrapper_name);\n  actual_cwrapper_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  /* target_name transforms -- use actual target program name; might have lt- prefix */\n  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));\n  strendzap (target_name, \".exe\");\n  tmp_pathspec = lt_extend_str (target_name, \".exe\", 1);\n  XFREE (target_name);\n  target_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(main) libtool target name: %s\\n\",\n\t\t  target_name);\nEOF\n\n\t    cat <<EOF\n  newargz[0] =\n    XMALLOC (char, (strlen (actual_cwrapper_path) +\n\t\t    strlen (\"$objdir\") + 1 + strlen (actual_cwrapper_name) + 1));\n  strcpy (newargz[0], actual_cwrapper_path);\n  strcat (newargz[0], \"$objdir\");\n  strcat (newargz[0], \"/\");\nEOF\n\n\t    cat <<\"EOF\"\n  /* stop here, and copy so we don't have to do this twice */\n  tmp_pathspec = xstrdup (newargz[0]);\n\n  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */\n  strcat (newargz[0], actual_cwrapper_name);\n\n  /* DO want the lt- prefix here if it exists, so use target_name */\n  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);\n  XFREE (tmp_pathspec);\n  tmp_pathspec = NULL;\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t    cat <<\"EOF\"\n  {\n    char* p;\n    while ((p = strchr (newargz[0], '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n    while ((p = strchr (lt_argv_zero, '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n  }\nEOF\n\t    ;;\n\t    esac\n\n\t    cat <<\"EOF\"\n  XFREE (target_name);\n  XFREE (actual_cwrapper_path);\n  XFREE (actual_cwrapper_name);\n\n  lt_setenv (\"BIN_SH\", \"xpg4\"); /* for Tru64 */\n  lt_setenv (\"DUALCASE\", \"1\");  /* for MSK sh */\n  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must\n     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)\n     because on Windows, both *_VARNAMEs are PATH but uninstalled\n     libraries must come first. */\n  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);\n  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);\n\n  lt_debugprintf (__FILE__, __LINE__, \"(main) lt_argv_zero: %s\\n\",\n\t\t  nonnull (lt_argv_zero));\n  for (i = 0; i < newargc; i++)\n    {\n      lt_debugprintf (__FILE__, __LINE__, \"(main) newargz[%d]: %s\\n\",\n\t\t      i, nonnull (newargz[i]));\n    }\n\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t\tcat <<\"EOF\"\n  /* execv doesn't actually work on mingw as expected on unix */\n  newargz = prepare_spawn (newargz);\n  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);\n  if (rval == -1)\n    {\n      /* failed to start process */\n      lt_debugprintf (__FILE__, __LINE__,\n\t\t      \"(main) failed to launch target \\\"%s\\\": %s\\n\",\n\t\t      lt_argv_zero, nonnull (strerror (errno)));\n      return 127;\n    }\n  return rval;\nEOF\n\t\t;;\n\t      *)\n\t\tcat <<\"EOF\"\n  execv (lt_argv_zero, newargz);\n  return rval; /* =127, but avoids unused variable warning */\nEOF\n\t\t;;\n\t    esac\n\n\t    cat <<\"EOF\"\n}\n\nvoid *\nxmalloc (size_t num)\n{\n  void *p = (void *) malloc (num);\n  if (!p)\n    lt_fatal (__FILE__, __LINE__, \"memory exhausted\");\n\n  return p;\n}\n\nchar *\nxstrdup (const char *string)\n{\n  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),\n\t\t\t  string) : NULL;\n}\n\nconst char *\nbase_name (const char *name)\n{\n  const char *base;\n\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  /* Skip over the disk name in MSDOS pathnames. */\n  if (isalpha ((unsigned char) name[0]) && name[1] == ':')\n    name += 2;\n#endif\n\n  for (base = name; *name; name++)\n    if (IS_DIR_SEPARATOR (*name))\n      base = name + 1;\n  return base;\n}\n\nint\ncheck_executable (const char *path)\n{\n  struct stat st;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(check_executable): %s\\n\",\n                  nonempty (path));\n  if ((!path) || (!*path))\n    return 0;\n\n  if ((stat (path, &st) >= 0)\n      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))\n    return 1;\n  else\n    return 0;\n}\n\nint\nmake_executable (const char *path)\n{\n  int rval = 0;\n  struct stat st;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(make_executable): %s\\n\",\n                  nonempty (path));\n  if ((!path) || (!*path))\n    return 0;\n\n  if (stat (path, &st) >= 0)\n    {\n      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);\n    }\n  return rval;\n}\n\n/* Searches for the full path of the wrapper.  Returns\n   newly allocated full path name if found, NULL otherwise\n   Does not chase symlinks, even on platforms that support them.\n*/\nchar *\nfind_executable (const char *wrapper)\n{\n  int has_slash = 0;\n  const char *p;\n  const char *p_next;\n  /* static buffer for getcwd */\n  char tmp[LT_PATHMAX + 1];\n  int tmp_len;\n  char *concat_name;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(find_executable): %s\\n\",\n                  nonempty (wrapper));\n\n  if ((wrapper == NULL) || (*wrapper == '\\0'))\n    return NULL;\n\n  /* Absolute path? */\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')\n    {\n      concat_name = xstrdup (wrapper);\n      if (check_executable (concat_name))\n\treturn concat_name;\n      XFREE (concat_name);\n    }\n  else\n    {\n#endif\n      if (IS_DIR_SEPARATOR (wrapper[0]))\n\t{\n\t  concat_name = xstrdup (wrapper);\n\t  if (check_executable (concat_name))\n\t    return concat_name;\n\t  XFREE (concat_name);\n\t}\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n    }\n#endif\n\n  for (p = wrapper; *p; p++)\n    if (*p == '/')\n      {\n\thas_slash = 1;\n\tbreak;\n      }\n  if (!has_slash)\n    {\n      /* no slashes; search PATH */\n      const char *path = getenv (\"PATH\");\n      if (path != NULL)\n\t{\n\t  for (p = path; *p; p = p_next)\n\t    {\n\t      const char *q;\n\t      size_t p_len;\n\t      for (q = p; *q; q++)\n\t\tif (IS_PATH_SEPARATOR (*q))\n\t\t  break;\n\t      p_len = q - p;\n\t      p_next = (*q == '\\0' ? q : q + 1);\n\t      if (p_len == 0)\n\t\t{\n\t\t  /* empty path: current directory */\n\t\t  if (getcwd (tmp, LT_PATHMAX) == NULL)\n\t\t    lt_fatal (__FILE__, __LINE__, \"getcwd failed: %s\",\n                              nonnull (strerror (errno)));\n\t\t  tmp_len = strlen (tmp);\n\t\t  concat_name =\n\t\t    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, tmp, tmp_len);\n\t\t  concat_name[tmp_len] = '/';\n\t\t  strcpy (concat_name + tmp_len + 1, wrapper);\n\t\t}\n\t      else\n\t\t{\n\t\t  concat_name =\n\t\t    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, p, p_len);\n\t\t  concat_name[p_len] = '/';\n\t\t  strcpy (concat_name + p_len + 1, wrapper);\n\t\t}\n\t      if (check_executable (concat_name))\n\t\treturn concat_name;\n\t      XFREE (concat_name);\n\t    }\n\t}\n      /* not found in PATH; assume curdir */\n    }\n  /* Relative path | not found in path: prepend cwd */\n  if (getcwd (tmp, LT_PATHMAX) == NULL)\n    lt_fatal (__FILE__, __LINE__, \"getcwd failed: %s\",\n              nonnull (strerror (errno)));\n  tmp_len = strlen (tmp);\n  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n  memcpy (concat_name, tmp, tmp_len);\n  concat_name[tmp_len] = '/';\n  strcpy (concat_name + tmp_len + 1, wrapper);\n\n  if (check_executable (concat_name))\n    return concat_name;\n  XFREE (concat_name);\n  return NULL;\n}\n\nchar *\nchase_symlinks (const char *pathspec)\n{\n#ifndef S_ISLNK\n  return xstrdup (pathspec);\n#else\n  char buf[LT_PATHMAX];\n  struct stat s;\n  char *tmp_pathspec = xstrdup (pathspec);\n  char *p;\n  int has_symlinks = 0;\n  while (strlen (tmp_pathspec) && !has_symlinks)\n    {\n      lt_debugprintf (__FILE__, __LINE__,\n\t\t      \"checking path component for symlinks: %s\\n\",\n\t\t      tmp_pathspec);\n      if (lstat (tmp_pathspec, &s) == 0)\n\t{\n\t  if (S_ISLNK (s.st_mode) != 0)\n\t    {\n\t      has_symlinks = 1;\n\t      break;\n\t    }\n\n\t  /* search backwards for last DIR_SEPARATOR */\n\t  p = tmp_pathspec + strlen (tmp_pathspec) - 1;\n\t  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    p--;\n\t  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    {\n\t      /* no more DIR_SEPARATORS left */\n\t      break;\n\t    }\n\t  *p = '\\0';\n\t}\n      else\n\t{\n\t  lt_fatal (__FILE__, __LINE__,\n\t\t    \"error accessing file \\\"%s\\\": %s\",\n\t\t    tmp_pathspec, nonnull (strerror (errno)));\n\t}\n    }\n  XFREE (tmp_pathspec);\n\n  if (!has_symlinks)\n    {\n      return xstrdup (pathspec);\n    }\n\n  tmp_pathspec = realpath (pathspec, buf);\n  if (tmp_pathspec == 0)\n    {\n      lt_fatal (__FILE__, __LINE__,\n\t\t\"could not follow symlinks for %s\", pathspec);\n    }\n  return xstrdup (tmp_pathspec);\n#endif\n}\n\nchar *\nstrendzap (char *str, const char *pat)\n{\n  size_t len, patlen;\n\n  assert (str != NULL);\n  assert (pat != NULL);\n\n  len = strlen (str);\n  patlen = strlen (pat);\n\n  if (patlen <= len)\n    {\n      str += len - patlen;\n      if (strcmp (str, pat) == 0)\n\t*str = '\\0';\n    }\n  return str;\n}\n\nvoid\nlt_debugprintf (const char *file, int line, const char *fmt, ...)\n{\n  va_list args;\n  if (lt_debug)\n    {\n      (void) fprintf (stderr, \"%s:%s:%d: \", program_name, file, line);\n      va_start (args, fmt);\n      (void) vfprintf (stderr, fmt, args);\n      va_end (args);\n    }\n}\n\nstatic void\nlt_error_core (int exit_status, const char *file,\n\t       int line, const char *mode,\n\t       const char *message, va_list ap)\n{\n  fprintf (stderr, \"%s:%s:%d: %s: \", program_name, file, line, mode);\n  vfprintf (stderr, message, ap);\n  fprintf (stderr, \".\\n\");\n\n  if (exit_status >= 0)\n    exit (exit_status);\n}\n\nvoid\nlt_fatal (const char *file, int line, const char *message, ...)\n{\n  va_list ap;\n  va_start (ap, message);\n  lt_error_core (EXIT_FAILURE, file, line, \"FATAL\", message, ap);\n  va_end (ap);\n}\n\nstatic const char *\nnonnull (const char *s)\n{\n  return s ? s : \"(null)\";\n}\n\nstatic const char *\nnonempty (const char *s)\n{\n  return (s && !*s) ? \"(empty)\" : nonnull (s);\n}\n\nvoid\nlt_setenv (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_setenv) setting '%s' to '%s'\\n\",\n                  nonnull (name), nonnull (value));\n  {\n#ifdef HAVE_SETENV\n    /* always make a copy, for consistency with !HAVE_SETENV */\n    char *str = xstrdup (value);\n    setenv (name, str, 1);\n#else\n    int len = strlen (name) + 1 + strlen (value) + 1;\n    char *str = XMALLOC (char, len);\n    sprintf (str, \"%s=%s\", name, value);\n    if (putenv (str) != EXIT_SUCCESS)\n      {\n        XFREE (str);\n      }\n#endif\n  }\n}\n\nchar *\nlt_extend_str (const char *orig_value, const char *add, int to_end)\n{\n  char *new_value;\n  if (orig_value && *orig_value)\n    {\n      int orig_value_len = strlen (orig_value);\n      int add_len = strlen (add);\n      new_value = XMALLOC (char, add_len + orig_value_len + 1);\n      if (to_end)\n        {\n          strcpy (new_value, orig_value);\n          strcpy (new_value + orig_value_len, add);\n        }\n      else\n        {\n          strcpy (new_value, add);\n          strcpy (new_value + add_len, orig_value);\n        }\n    }\n  else\n    {\n      new_value = xstrdup (add);\n    }\n  return new_value;\n}\n\nvoid\nlt_update_exe_path (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_update_exe_path) modifying '%s' by prepending '%s'\\n\",\n                  nonnull (name), nonnull (value));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      /* some systems can't cope with a ':'-terminated path #' */\n      int len = strlen (new_value);\n      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))\n        {\n          new_value[len-1] = '\\0';\n        }\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\nvoid\nlt_update_lib_path (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_update_lib_path) modifying '%s' by prepending '%s'\\n\",\n                  nonnull (name), nonnull (value));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\nEOF\n\t    case $host_os in\n\t      mingw*)\n\t\tcat <<\"EOF\"\n\n/* Prepares an argument vector before calling spawn().\n   Note that spawn() does not by itself call the command interpreter\n     (getenv (\"COMSPEC\") != NULL ? getenv (\"COMSPEC\") :\n      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n         GetVersionEx(&v);\n         v.dwPlatformId == VER_PLATFORM_WIN32_NT;\n      }) ? \"cmd.exe\" : \"command.com\").\n   Instead it simply concatenates the arguments, separated by ' ', and calls\n   CreateProcess().  We must quote the arguments since Win32 CreateProcess()\n   interprets characters like ' ', '\\t', '\\\\', '\"' (but not '<' and '>') in a\n   special way:\n   - Space and tab are interpreted as delimiters. They are not treated as\n     delimiters if they are surrounded by double quotes: \"...\".\n   - Unescaped double quotes are removed from the input. Their only effect is\n     that within double quotes, space and tab are treated like normal\n     characters.\n   - Backslashes not followed by double quotes are not special.\n   - But 2*n+1 backslashes followed by a double quote become\n     n backslashes followed by a double quote (n >= 0):\n       \\\" -> \"\n       \\\\\\\" -> \\\"\n       \\\\\\\\\\\" -> \\\\\"\n */\n#define SHELL_SPECIAL_CHARS \"\\\"\\\\ \\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\"\n#define SHELL_SPACE_CHARS \" \\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\"\nchar **\nprepare_spawn (char **argv)\n{\n  size_t argc;\n  char **new_argv;\n  size_t i;\n\n  /* Count number of arguments.  */\n  for (argc = 0; argv[argc] != NULL; argc++)\n    ;\n\n  /* Allocate new argument vector.  */\n  new_argv = XMALLOC (char *, argc + 1);\n\n  /* Put quoted arguments into the new argument vector.  */\n  for (i = 0; i < argc; i++)\n    {\n      const char *string = argv[i];\n\n      if (string[0] == '\\0')\n\tnew_argv[i] = xstrdup (\"\\\"\\\"\");\n      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)\n\t{\n\t  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);\n\t  size_t length;\n\t  unsigned int backslashes;\n\t  const char *s;\n\t  char *quoted_string;\n\t  char *p;\n\n\t  length = 0;\n\t  backslashes = 0;\n\t  if (quote_around)\n\t    length++;\n\t  for (s = string; *s != '\\0'; s++)\n\t    {\n\t      char c = *s;\n\t      if (c == '\"')\n\t\tlength += backslashes + 1;\n\t      length++;\n\t      if (c == '\\\\')\n\t\tbackslashes++;\n\t      else\n\t\tbackslashes = 0;\n\t    }\n\t  if (quote_around)\n\t    length += backslashes + 1;\n\n\t  quoted_string = XMALLOC (char, length + 1);\n\n\t  p = quoted_string;\n\t  backslashes = 0;\n\t  if (quote_around)\n\t    *p++ = '\"';\n\t  for (s = string; *s != '\\0'; s++)\n\t    {\n\t      char c = *s;\n\t      if (c == '\"')\n\t\t{\n\t\t  unsigned int j;\n\t\t  for (j = backslashes + 1; j > 0; j--)\n\t\t    *p++ = '\\\\';\n\t\t}\n\t      *p++ = c;\n\t      if (c == '\\\\')\n\t\tbackslashes++;\n\t      else\n\t\tbackslashes = 0;\n\t    }\n\t  if (quote_around)\n\t    {\n\t      unsigned int j;\n\t      for (j = backslashes; j > 0; j--)\n\t\t*p++ = '\\\\';\n\t      *p++ = '\"';\n\t    }\n\t  *p = '\\0';\n\n\t  new_argv[i] = quoted_string;\n\t}\n      else\n\tnew_argv[i] = (char *) string;\n    }\n  new_argv[argc] = NULL;\n\n  return new_argv;\n}\nEOF\n\t\t;;\n\t    esac\n\n            cat <<\"EOF\"\nvoid lt_dump_script (FILE* f)\n{\nEOF\n\t    func_emit_wrapper yes |\n\t      $SED -n -e '\ns/^\\(.\\{79\\}\\)\\(..*\\)/\\1\\\n\\2/\nh\ns/\\([\\\\\"]\\)/\\\\\\1/g\ns/$/\\\\n/\ns/\\([^\\n]*\\).*/  fputs (\"\\1\", f);/p\ng\nD'\n            cat <<\"EOF\"\n}\nEOF\n}\n# end: func_emit_cwrapperexe_src\n\n# func_win32_import_lib_p ARG\n# True if ARG is an import lib, as indicated by $file_magic_cmd\nfunc_win32_import_lib_p ()\n{\n    $opt_debug\n    case `eval $file_magic_cmd \\\"\\$1\\\" 2>/dev/null | $SED -e 10q` in\n    *import*) : ;;\n    *) false ;;\n    esac\n}\n\n# func_mode_link arg...\nfunc_mode_link ()\n{\n    $opt_debug\n    case $host in\n    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n      # It is impossible to link a dll without this setting, and\n      # we shouldn't force the makefile maintainer to figure out\n      # which system we are compiling for in order to pass an extra\n      # flag for every libtool invocation.\n      # allow_undefined=no\n\n      # FIXME: Unfortunately, there are problems with the above when trying\n      # to make a dll which has undefined symbols, in which case not\n      # even a static library is built.  For now, we need to specify\n      # -no-undefined on the libtool link line when we can be certain\n      # that all symbols are satisfied, otherwise we get a static library.\n      allow_undefined=yes\n      ;;\n    *)\n      allow_undefined=yes\n      ;;\n    esac\n    libtool_args=$nonopt\n    base_compile=\"$nonopt $@\"\n    compile_command=$nonopt\n    finalize_command=$nonopt\n\n    compile_rpath=\n    finalize_rpath=\n    compile_shlibpath=\n    finalize_shlibpath=\n    convenience=\n    old_convenience=\n    deplibs=\n    old_deplibs=\n    compiler_flags=\n    linker_flags=\n    dllsearchpath=\n    lib_search_path=`pwd`\n    inst_prefix_dir=\n    new_inherited_linker_flags=\n\n    avoid_version=no\n    bindir=\n    dlfiles=\n    dlprefiles=\n    dlself=no\n    export_dynamic=no\n    export_symbols=\n    export_symbols_regex=\n    generated=\n    libobjs=\n    ltlibs=\n    module=no\n    no_install=no\n    objs=\n    non_pic_objects=\n    precious_files_regex=\n    prefer_static_libs=no\n    preload=no\n    prev=\n    prevarg=\n    release=\n    rpath=\n    xrpath=\n    perm_rpath=\n    temp_rpath=\n    thread_safe=no\n    vinfo=\n    vinfo_number=no\n    weak_libs=\n    single_module=\"${wl}-single_module\"\n    func_infer_tag $base_compile\n\n    # We need to know -static, to get the right output filenames.\n    for arg\n    do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tbreak\n\t;;\n      -all-static | -static | -static-libtool-libs)\n\tcase $arg in\n\t-all-static)\n\t  if test \"$build_libtool_libs\" = yes && test -z \"$link_static_flag\"; then\n\t    func_warning \"complete static linking is impossible in this configuration\"\n\t  fi\n\t  if test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\t-static)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=built\n\t  ;;\n\t-static-libtool-libs)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\tesac\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tbreak\n\t;;\n      esac\n    done\n\n    # See if our shared archives depend on static archives.\n    test -n \"$old_archive_from_new_cmds\" && build_old_libs=yes\n\n    # Go through the arguments, transforming them on the way.\n    while test \"$#\" -gt 0; do\n      arg=\"$1\"\n      shift\n      func_quote_for_eval \"$arg\"\n      qarg=$func_quote_for_eval_unquoted_result\n      func_append libtool_args \" $func_quote_for_eval_result\"\n\n      # If the previous option needs an argument, assign it.\n      if test -n \"$prev\"; then\n\tcase $prev in\n\toutput)\n\t  func_append compile_command \" @OUTPUT@\"\n\t  func_append finalize_command \" @OUTPUT@\"\n\t  ;;\n\tesac\n\n\tcase $prev in\n\tbindir)\n\t  bindir=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tdlfiles|dlprefiles)\n\t  if test \"$preload\" = no; then\n\t    # Add the symbol object into the linking commands.\n\t    func_append compile_command \" @SYMFILE@\"\n\t    func_append finalize_command \" @SYMFILE@\"\n\t    preload=yes\n\t  fi\n\t  case $arg in\n\t  *.la | *.lo) ;;  # We handle these cases below.\n\t  force)\n\t    if test \"$dlself\" = no; then\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  self)\n\t    if test \"$prev\" = dlprefiles; then\n\t      dlself=yes\n\t    elif test \"$prev\" = dlfiles && test \"$dlopen_self\" != yes; then\n\t      dlself=yes\n\t    else\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  *)\n\t    if test \"$prev\" = dlfiles; then\n\t      func_append dlfiles \" $arg\"\n\t    else\n\t      func_append dlprefiles \" $arg\"\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  esac\n\t  ;;\n\texpsyms)\n\t  export_symbols=\"$arg\"\n\t  test -f \"$arg\" \\\n\t    || func_fatal_error \"symbol file \\`$arg' does not exist\"\n\t  prev=\n\t  continue\n\t  ;;\n\texpsyms_regex)\n\t  export_symbols_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tframework)\n\t  case $host in\n\t    *-*-darwin*)\n\t      case \"$deplibs \" in\n\t\t*\" $qarg.ltframework \"*) ;;\n\t\t*) func_append deplibs \" $qarg.ltframework\" # this is fixed later\n\t\t   ;;\n\t      esac\n\t      ;;\n\t  esac\n\t  prev=\n\t  continue\n\t  ;;\n\tinst_prefix)\n\t  inst_prefix_dir=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tobjectlist)\n\t  if test -f \"$arg\"; then\n\t    save_arg=$arg\n\t    moreargs=\n\t    for fil in `cat \"$save_arg\"`\n\t    do\n#\t      func_append moreargs \" $fil\"\n\t      arg=$fil\n\t      # A libtool-controlled object.\n\n\t      # Check to see that this really is a libtool object.\n\t      if func_lalib_unsafe_p \"$arg\"; then\n\t\tpic_object=\n\t\tnon_pic_object=\n\n\t\t# Read the .lo file\n\t\tfunc_source \"$arg\"\n\n\t\tif test -z \"$pic_object\" ||\n\t\t   test -z \"$non_pic_object\" ||\n\t\t   test \"$pic_object\" = none &&\n\t\t   test \"$non_pic_object\" = none; then\n\t\t  func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t\tfi\n\n\t\t# Extract subdirectory from the argument.\n\t\tfunc_dirname \"$arg\" \"/\" \"\"\n\t\txdir=\"$func_dirname_result\"\n\n\t\tif test \"$pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  pic_object=\"$xdir$pic_object\"\n\n\t\t  if test \"$prev\" = dlfiles; then\n\t\t    if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\t      func_append dlfiles \" $pic_object\"\n\t\t      prev=\n\t\t      continue\n\t\t    else\n\t\t      # If libtool objects are unsupported, then we need to preload.\n\t\t      prev=dlprefiles\n\t\t    fi\n\t\t  fi\n\n\t\t  # CHECK ME:  I think I busted this.  -Ossama\n\t\t  if test \"$prev\" = dlprefiles; then\n\t\t    # Preload the old-style object.\n\t\t    func_append dlprefiles \" $pic_object\"\n\t\t    prev=\n\t\t  fi\n\n\t\t  # A PIC object.\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  arg=\"$pic_object\"\n\t\tfi\n\n\t\t# Non-PIC object.\n\t\tif test \"$non_pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  non_pic_object=\"$xdir$non_pic_object\"\n\n\t\t  # A standard non-PIC object\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\t  if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t\t    arg=\"$non_pic_object\"\n\t\t  fi\n\t\telse\n\t\t  # If the PIC object exists, use it instead.\n\t\t  # $xdir was prepended to $pic_object above.\n\t\t  non_pic_object=\"$pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\tfi\n\t      else\n\t\t# Only an error if not doing a dry-run.\n\t\tif $opt_dry_run; then\n\t\t  # Extract subdirectory from the argument.\n\t\t  func_dirname \"$arg\" \"/\" \"\"\n\t\t  xdir=\"$func_dirname_result\"\n\n\t\t  func_lo2o \"$arg\"\n\t\t  pic_object=$xdir$objdir/$func_lo2o_result\n\t\t  non_pic_object=$xdir$func_lo2o_result\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t        else\n\t\t  func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t\tfi\n\t      fi\n\t    done\n\t  else\n\t    func_fatal_error \"link input file \\`$arg' does not exist\"\n\t  fi\n\t  arg=$save_arg\n\t  prev=\n\t  continue\n\t  ;;\n\tprecious_regex)\n\t  precious_files_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trelease)\n\t  release=\"-$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trpath | xrpath)\n\t  # We need an absolute path.\n\t  case $arg in\n\t  [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t  *)\n\t    func_fatal_error \"only absolute run-paths are allowed\"\n\t    ;;\n\t  esac\n\t  if test \"$prev\" = rpath; then\n\t    case \"$rpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) func_append rpath \" $arg\" ;;\n\t    esac\n\t  else\n\t    case \"$xrpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) func_append xrpath \" $arg\" ;;\n\t    esac\n\t  fi\n\t  prev=\n\t  continue\n\t  ;;\n\tshrext)\n\t  shrext_cmds=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tweak)\n\t  func_append weak_libs \" $arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\txcclinker)\n\t  func_append linker_flags \" $qarg\"\n\t  func_append compiler_flags \" $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txcompiler)\n\t  func_append compiler_flags \" $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txlinker)\n\t  func_append linker_flags \" $qarg\"\n\t  func_append compiler_flags \" $wl$qarg\"\n\t  prev=\n\t  func_append compile_command \" $wl$qarg\"\n\t  func_append finalize_command \" $wl$qarg\"\n\t  continue\n\t  ;;\n\t*)\n\t  eval \"$prev=\\\"\\$arg\\\"\"\n\t  prev=\n\t  continue\n\t  ;;\n\tesac\n      fi # test -n \"$prev\"\n\n      prevarg=\"$arg\"\n\n      case $arg in\n      -all-static)\n\tif test -n \"$link_static_flag\"; then\n\t  # See comment for -static flag below, for more details.\n\t  func_append compile_command \" $link_static_flag\"\n\t  func_append finalize_command \" $link_static_flag\"\n\tfi\n\tcontinue\n\t;;\n\n      -allow-undefined)\n\t# FIXME: remove this flag sometime in the future.\n\tfunc_fatal_error \"\\`-allow-undefined' must not be used because it is the default\"\n\t;;\n\n      -avoid-version)\n\tavoid_version=yes\n\tcontinue\n\t;;\n\n      -bindir)\n\tprev=bindir\n\tcontinue\n\t;;\n\n      -dlopen)\n\tprev=dlfiles\n\tcontinue\n\t;;\n\n      -dlpreopen)\n\tprev=dlprefiles\n\tcontinue\n\t;;\n\n      -export-dynamic)\n\texport_dynamic=yes\n\tcontinue\n\t;;\n\n      -export-symbols | -export-symbols-regex)\n\tif test -n \"$export_symbols\" || test -n \"$export_symbols_regex\"; then\n\t  func_fatal_error \"more than one -exported-symbols argument is not allowed\"\n\tfi\n\tif test \"X$arg\" = \"X-export-symbols\"; then\n\t  prev=expsyms\n\telse\n\t  prev=expsyms_regex\n\tfi\n\tcontinue\n\t;;\n\n      -framework)\n\tprev=framework\n\tcontinue\n\t;;\n\n      -inst-prefix-dir)\n\tprev=inst_prefix\n\tcontinue\n\t;;\n\n      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*\n      # so, if we see these flags be careful not to treat them like -L\n      -L[A-Z][A-Z]*:*)\n\tcase $with_gcc/$host in\n\tno/*-*-irix* | /*-*-irix*)\n\t  func_append compile_command \" $arg\"\n\t  func_append finalize_command \" $arg\"\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -L*)\n\tfunc_stripname \"-L\" '' \"$arg\"\n\tif test -z \"$func_stripname_result\"; then\n\t  if test \"$#\" -gt 0; then\n\t    func_fatal_error \"require no space between \\`-L' and \\`$1'\"\n\t  else\n\t    func_fatal_error \"need path for \\`-L' option\"\n\t  fi\n\tfi\n\tfunc_resolve_sysroot \"$func_stripname_result\"\n\tdir=$func_resolve_sysroot_result\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t*)\n\t  absdir=`cd \"$dir\" && pwd`\n\t  test -z \"$absdir\" && \\\n\t    func_fatal_error \"cannot determine absolute directory name of \\`$dir'\"\n\t  dir=\"$absdir\"\n\t  ;;\n\tesac\n\tcase \"$deplibs \" in\n\t*\" -L$dir \"* | *\" $arg \"*)\n\t  # Will only happen for absolute or sysroot arguments\n\t  ;;\n\t*)\n\t  # Preserve sysroot, but never include relative directories\n\t  case $dir in\n\t    [\\\\/]* | [A-Za-z]:[\\\\/]* | =*) func_append deplibs \" $arg\" ;;\n\t    *) func_append deplibs \" -L$dir\" ;;\n\t  esac\n\t  func_append lib_search_path \" $dir\"\n\t  ;;\n\tesac\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`$ECHO \"$dir\" | $SED 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$dir:\"*) ;;\n\t  ::) dllsearchpath=$dir;;\n\t  *) func_append dllsearchpath \":$dir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) func_append dllsearchpath \":$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -l*)\n\tif test \"X$arg\" = \"X-lc\" || test \"X$arg\" = \"X-lm\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)\n\t    # These systems don't actually have a C or math library (as such)\n\t    continue\n\t    ;;\n\t  *-*-os2*)\n\t    # These systems don't actually have a C library (as such)\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C and math libraries are in the System framework\n\t    func_append deplibs \" System.ltframework\"\n\t    continue\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  esac\n\telif test \"X$arg\" = \"X-lc_r\"; then\n\t case $host in\n\t *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t   # Do not include libc_r directly, use -pthread flag.\n\t   continue\n\t   ;;\n\t esac\n\tfi\n\tfunc_append deplibs \" $arg\"\n\tcontinue\n\t;;\n\n      -module)\n\tmodule=yes\n\tcontinue\n\t;;\n\n      # Tru64 UNIX uses -model [arg] to determine the layout of C++\n      # classes, name mangling, and exception handling.\n      # Darwin uses the -arch flag to determine output architecture.\n      -model|-arch|-isysroot|--sysroot)\n\tfunc_append compiler_flags \" $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \\\n      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)\n\tfunc_append compiler_flags \" $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tcase \"$new_inherited_linker_flags \" in\n\t    *\" $arg \"*) ;;\n\t    * ) func_append new_inherited_linker_flags \" $arg\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -multi_module)\n\tsingle_module=\"${wl}-multi_module\"\n\tcontinue\n\t;;\n\n      -no-fast-install)\n\tfast_install=no\n\tcontinue\n\t;;\n\n      -no-install)\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)\n\t  # The PATH hackery in wrapper scripts is required on Windows\n\t  # and Darwin in order for the loader to find any dlls it needs.\n\t  func_warning \"\\`-no-install' is ignored for $host\"\n\t  func_warning \"assuming \\`-no-fast-install' instead\"\n\t  fast_install=no\n\t  ;;\n\t*) no_install=yes ;;\n\tesac\n\tcontinue\n\t;;\n\n      -no-undefined)\n\tallow_undefined=no\n\tcontinue\n\t;;\n\n      -objectlist)\n\tprev=objectlist\n\tcontinue\n\t;;\n\n      -o) prev=output ;;\n\n      -precious-files-regex)\n\tprev=precious_regex\n\tcontinue\n\t;;\n\n      -release)\n\tprev=release\n\tcontinue\n\t;;\n\n      -rpath)\n\tprev=rpath\n\tcontinue\n\t;;\n\n      -R)\n\tprev=xrpath\n\tcontinue\n\t;;\n\n      -R*)\n\tfunc_stripname '-R' '' \"$arg\"\n\tdir=$func_stripname_result\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t=*)\n\t  func_stripname '=' '' \"$dir\"\n\t  dir=$lt_sysroot$func_stripname_result\n\t  ;;\n\t*)\n\t  func_fatal_error \"only absolute run-paths are allowed\"\n\t  ;;\n\tesac\n\tcase \"$xrpath \" in\n\t*\" $dir \"*) ;;\n\t*) func_append xrpath \" $dir\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -shared)\n\t# The effects of -shared are defined in a previous loop.\n\tcontinue\n\t;;\n\n      -shrext)\n\tprev=shrext\n\tcontinue\n\t;;\n\n      -static | -static-libtool-libs)\n\t# The effects of -static are defined in a previous loop.\n\t# We used to do the same as -all-static on platforms that\n\t# didn't have a PIC flag, but the assumption that the effects\n\t# would be equivalent was wrong.  It would break on at least\n\t# Digital Unix and AIX.\n\tcontinue\n\t;;\n\n      -thread-safe)\n\tthread_safe=yes\n\tcontinue\n\t;;\n\n      -version-info)\n\tprev=vinfo\n\tcontinue\n\t;;\n\n      -version-number)\n\tprev=vinfo\n\tvinfo_number=yes\n\tcontinue\n\t;;\n\n      -weak)\n        prev=weak\n\tcontinue\n\t;;\n\n      -Wc,*)\n\tfunc_stripname '-Wc,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  func_append arg \" $func_quote_for_eval_result\"\n\t  func_append compiler_flags \" $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Wl,*)\n\tfunc_stripname '-Wl,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  func_append arg \" $wl$func_quote_for_eval_result\"\n\t  func_append compiler_flags \" $wl$func_quote_for_eval_result\"\n\t  func_append linker_flags \" $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Xcompiler)\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -Xlinker)\n\tprev=xlinker\n\tcontinue\n\t;;\n\n      -XCClinker)\n\tprev=xcclinker\n\tcontinue\n\t;;\n\n      # -msg_* for osf cc\n      -msg_*)\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      # Flags to be passed through unchanged, with rationale:\n      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler\n      # -r[0-9][0-9]*        specify processor for the SGI compiler\n      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler\n      # +DA*, +DD*           enable 64-bit mode for the HP compiler\n      # -q*                  compiler args for the IBM compiler\n      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC\n      # -F/path              path to uninstalled frameworks, gcc on darwin\n      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC\n      # @file                GCC response files\n      # -tp=*                Portland pgcc target processor selection\n      # --sysroot=*          for sysroot support\n      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization\n      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \\\n      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \\\n      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n        func_append compile_command \" $arg\"\n        func_append finalize_command \" $arg\"\n        func_append compiler_flags \" $arg\"\n        continue\n        ;;\n\n      # Some other compiler flag.\n      -* | +*)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      *.$objext)\n\t# A standard object.\n\tfunc_append objs \" $arg\"\n\t;;\n\n      *.lo)\n\t# A libtool-controlled object.\n\n\t# Check to see that this really is a libtool object.\n\tif func_lalib_unsafe_p \"$arg\"; then\n\t  pic_object=\n\t  non_pic_object=\n\n\t  # Read the .lo file\n\t  func_source \"$arg\"\n\n\t  if test -z \"$pic_object\" ||\n\t     test -z \"$non_pic_object\" ||\n\t     test \"$pic_object\" = none &&\n\t     test \"$non_pic_object\" = none; then\n\t    func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t  fi\n\n\t  # Extract subdirectory from the argument.\n\t  func_dirname \"$arg\" \"/\" \"\"\n\t  xdir=\"$func_dirname_result\"\n\n\t  if test \"$pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    pic_object=\"$xdir$pic_object\"\n\n\t    if test \"$prev\" = dlfiles; then\n\t      if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\tfunc_append dlfiles \" $pic_object\"\n\t\tprev=\n\t\tcontinue\n\t      else\n\t\t# If libtool objects are unsupported, then we need to preload.\n\t\tprev=dlprefiles\n\t      fi\n\t    fi\n\n\t    # CHECK ME:  I think I busted this.  -Ossama\n\t    if test \"$prev\" = dlprefiles; then\n\t      # Preload the old-style object.\n\t      func_append dlprefiles \" $pic_object\"\n\t      prev=\n\t    fi\n\n\t    # A PIC object.\n\t    func_append libobjs \" $pic_object\"\n\t    arg=\"$pic_object\"\n\t  fi\n\n\t  # Non-PIC object.\n\t  if test \"$non_pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    non_pic_object=\"$xdir$non_pic_object\"\n\n\t    # A standard non-PIC object\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t    if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t      arg=\"$non_pic_object\"\n\t    fi\n\t  else\n\t    # If the PIC object exists, use it instead.\n\t    # $xdir was prepended to $pic_object above.\n\t    non_pic_object=\"$pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  fi\n\telse\n\t  # Only an error if not doing a dry-run.\n\t  if $opt_dry_run; then\n\t    # Extract subdirectory from the argument.\n\t    func_dirname \"$arg\" \"/\" \"\"\n\t    xdir=\"$func_dirname_result\"\n\n\t    func_lo2o \"$arg\"\n\t    pic_object=$xdir$objdir/$func_lo2o_result\n\t    non_pic_object=$xdir$func_lo2o_result\n\t    func_append libobjs \" $pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  else\n\t    func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t  fi\n\tfi\n\t;;\n\n      *.$libext)\n\t# An archive.\n\tfunc_append deplibs \" $arg\"\n\tfunc_append old_deplibs \" $arg\"\n\tcontinue\n\t;;\n\n      *.la)\n\t# A libtool-controlled library.\n\n\tfunc_resolve_sysroot \"$arg\"\n\tif test \"$prev\" = dlfiles; then\n\t  # This library was specified with -dlopen.\n\t  func_append dlfiles \" $func_resolve_sysroot_result\"\n\t  prev=\n\telif test \"$prev\" = dlprefiles; then\n\t  # The library was specified with -dlpreopen.\n\t  func_append dlprefiles \" $func_resolve_sysroot_result\"\n\t  prev=\n\telse\n\t  func_append deplibs \" $func_resolve_sysroot_result\"\n\tfi\n\tcontinue\n\t;;\n\n      # Some other compiler argument.\n      *)\n\t# Unknown arguments in both finalize_command and compile_command need\n\t# to be aesthetically quoted because they are evaled later.\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n      esac # arg\n\n      # Now actually substitute the argument into the commands.\n      if test -n \"$arg\"; then\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n      fi\n    done # argument parsing loop\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prevarg' option requires an argument\"\n\n    if test \"$export_dynamic\" = yes && test -n \"$export_dynamic_flag_spec\"; then\n      eval arg=\\\"$export_dynamic_flag_spec\\\"\n      func_append compile_command \" $arg\"\n      func_append finalize_command \" $arg\"\n    fi\n\n    oldlibs=\n    # calculate the name of the file, without its directory\n    func_basename \"$output\"\n    outputname=\"$func_basename_result\"\n    libobjs_save=\"$libobjs\"\n\n    if test -n \"$shlibpath_var\"; then\n      # get the directories listed in $shlibpath_var\n      eval shlib_search_path=\\`\\$ECHO \\\"\\${$shlibpath_var}\\\" \\| \\$SED \\'s/:/ /g\\'\\`\n    else\n      shlib_search_path=\n    fi\n    eval sys_lib_search_path=\\\"$sys_lib_search_path_spec\\\"\n    eval sys_lib_dlsearch_path=\\\"$sys_lib_dlsearch_path_spec\\\"\n\n    func_dirname \"$output\" \"/\" \"\"\n    output_objdir=\"$func_dirname_result$objdir\"\n    func_to_tool_file \"$output_objdir/\"\n    tool_output_objdir=$func_to_tool_file_result\n    # Create the object directory.\n    func_mkdir_p \"$output_objdir\"\n\n    # Determine the type of output\n    case $output in\n    \"\")\n      func_fatal_help \"you must specify an output file\"\n      ;;\n    *.$libext) linkmode=oldlib ;;\n    *.lo | *.$objext) linkmode=obj ;;\n    *.la) linkmode=lib ;;\n    *) linkmode=prog ;; # Anything else should be a program.\n    esac\n\n    specialdeplibs=\n\n    libs=\n    # Find all interdependent deplibs by searching for libraries\n    # that are linked more than once (e.g. -la -lb -la)\n    for deplib in $deplibs; do\n      if $opt_preserve_dup_deps ; then\n\tcase \"$libs \" in\n\t*\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\tesac\n      fi\n      func_append libs \" $deplib\"\n    done\n\n    if test \"$linkmode\" = lib; then\n      libs=\"$predeps $libs $compiler_lib_search_path $postdeps\"\n\n      # Compute libraries that are listed more than once in $predeps\n      # $postdeps and mark them as special (i.e., whose duplicates are\n      # not to be eliminated).\n      pre_post_deps=\n      if $opt_duplicate_compiler_generated_deps; then\n\tfor pre_post_dep in $predeps $postdeps; do\n\t  case \"$pre_post_deps \" in\n\t  *\" $pre_post_dep \"*) func_append specialdeplibs \" $pre_post_deps\" ;;\n\t  esac\n\t  func_append pre_post_deps \" $pre_post_dep\"\n\tdone\n      fi\n      pre_post_deps=\n    fi\n\n    deplibs=\n    newdependency_libs=\n    newlib_search_path=\n    need_relink=no # whether we're linking any uninstalled libtool libraries\n    notinst_deplibs= # not-installed libtool libraries\n    notinst_path= # paths that contain not-installed libtool libraries\n\n    case $linkmode in\n    lib)\n\tpasses=\"conv dlpreopen link\"\n\tfor file in $dlfiles $dlprefiles; do\n\t  case $file in\n\t  *.la) ;;\n\t  *)\n\t    func_fatal_help \"libraries can \\`-dlopen' only libtool libraries: $file\"\n\t    ;;\n\t  esac\n\tdone\n\t;;\n    prog)\n\tcompile_deplibs=\n\tfinalize_deplibs=\n\talldeplibs=no\n\tnewdlfiles=\n\tnewdlprefiles=\n\tpasses=\"conv scan dlopen dlpreopen link\"\n\t;;\n    *)  passes=\"conv\"\n\t;;\n    esac\n\n    for pass in $passes; do\n      # The preopen pass in lib mode reverses $deplibs; put it back here\n      # so that -L comes before libs that need it for instance...\n      if test \"$linkmode,$pass\" = \"lib,link\"; then\n\t## FIXME: Find the place where the list is rebuilt in the wrong\n\t##        order, and fix it there properly\n        tmp_deplibs=\n\tfor deplib in $deplibs; do\n\t  tmp_deplibs=\"$deplib $tmp_deplibs\"\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n      fi\n\n      if test \"$linkmode,$pass\" = \"lib,link\" ||\n\t test \"$linkmode,$pass\" = \"prog,scan\"; then\n\tlibs=\"$deplibs\"\n\tdeplibs=\n      fi\n      if test \"$linkmode\" = prog; then\n\tcase $pass in\n\tdlopen) libs=\"$dlfiles\" ;;\n\tdlpreopen) libs=\"$dlprefiles\" ;;\n\tlink)\n\t  libs=\"$deplibs %DEPLIBS%\"\n\t  test \"X$link_all_deplibs\" != Xno && libs=\"$libs $dependency_libs\"\n\t  ;;\n\tesac\n      fi\n      if test \"$linkmode,$pass\" = \"lib,dlpreopen\"; then\n\t# Collect and forward deplibs of preopened libtool libs\n\tfor lib in $dlprefiles; do\n\t  # Ignore non-libtool-libs\n\t  dependency_libs=\n\t  func_resolve_sysroot \"$lib\"\n\t  case $lib in\n\t  *.la)\tfunc_source \"$func_resolve_sysroot_result\" ;;\n\t  esac\n\n\t  # Collect preopened libtool deplibs, except any this library\n\t  # has declared as weak libs\n\t  for deplib in $dependency_libs; do\n\t    func_basename \"$deplib\"\n            deplib_base=$func_basename_result\n\t    case \" $weak_libs \" in\n\t    *\" $deplib_base \"*) ;;\n\t    *) func_append deplibs \" $deplib\" ;;\n\t    esac\n\t  done\n\tdone\n\tlibs=\"$dlprefiles\"\n      fi\n      if test \"$pass\" = dlopen; then\n\t# Collect dlpreopened libraries\n\tsave_deplibs=\"$deplibs\"\n\tdeplibs=\n      fi\n\n      for deplib in $libs; do\n\tlib=\n\tfound=no\n\tcase $deplib in\n\t-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \\\n        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    func_append compiler_flags \" $deplib\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) func_append new_inherited_linker_flags \" $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-l*)\n\t  if test \"$linkmode\" != lib && test \"$linkmode\" != prog; then\n\t    func_warning \"\\`-l' is ignored for archives/objects\"\n\t    continue\n\t  fi\n\t  func_stripname '-l' '' \"$deplib\"\n\t  name=$func_stripname_result\n\t  if test \"$linkmode\" = lib; then\n\t    searchdirs=\"$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path\"\n\t  else\n\t    searchdirs=\"$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path\"\n\t  fi\n\t  for searchdir in $searchdirs; do\n\t    for search_ext in .la $std_shrext .so .a; do\n\t      # Search the libtool library\n\t      lib=\"$searchdir/lib${name}${search_ext}\"\n\t      if test -f \"$lib\"; then\n\t\tif test \"$search_ext\" = \".la\"; then\n\t\t  found=yes\n\t\telse\n\t\t  found=no\n\t\tfi\n\t\tbreak 2\n\t      fi\n\t    done\n\t  done\n\t  if test \"$found\" != yes; then\n\t    # deplib doesn't seem to be a libtool library\n\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      deplibs=\"$deplib $deplibs\"\n\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    continue\n\t  else # deplib is a libtool library\n\t    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,\n\t    # We need to do some special things here, and not later.\n\t    if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t      case \" $predeps $postdeps \" in\n\t      *\" $deplib \"*)\n\t\tif func_lalib_p \"$lib\"; then\n\t\t  library_names=\n\t\t  old_library=\n\t\t  func_source \"$lib\"\n\t\t  for l in $old_library $library_names; do\n\t\t    ll=\"$l\"\n\t\t  done\n\t\t  if test \"X$ll\" = \"X$old_library\" ; then # only static version available\n\t\t    found=no\n\t\t    func_dirname \"$lib\" \"\" \".\"\n\t\t    ladir=\"$func_dirname_result\"\n\t\t    lib=$ladir/$old_library\n\t\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t\t    else\n\t\t      deplibs=\"$deplib $deplibs\"\n\t\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t\t    fi\n\t\t    continue\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *) ;;\n\t      esac\n\t    fi\n\t  fi\n\t  ;; # -l\n\t*.ltframework)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$deplib $deplibs\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) func_append new_inherited_linker_flags \" $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-L*)\n\t  case $linkmode in\n\t  lib)\n\t    deplibs=\"$deplib $deplibs\"\n\t    test \"$pass\" = conv && continue\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    func_stripname '-L' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" = conv; then\n\t      deplibs=\"$deplib $deplibs\"\n\t      continue\n\t    fi\n\t    if test \"$pass\" = scan; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    func_stripname '-L' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t    ;;\n\t  *)\n\t    func_warning \"\\`-L' is ignored for archives/objects\"\n\t    ;;\n\t  esac # linkmode\n\t  continue\n\t  ;; # -L\n\t-R*)\n\t  if test \"$pass\" = link; then\n\t    func_stripname '-R' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    dir=$func_resolve_sysroot_result\n\t    # Make sure the xrpath contains only unique directories.\n\t    case \"$xrpath \" in\n\t    *\" $dir \"*) ;;\n\t    *) func_append xrpath \" $dir\" ;;\n\t    esac\n\t  fi\n\t  deplibs=\"$deplib $deplibs\"\n\t  continue\n\t  ;;\n\t*.la)\n\t  func_resolve_sysroot \"$deplib\"\n\t  lib=$func_resolve_sysroot_result\n\t  ;;\n\t*.$libext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t    continue\n\t  fi\n\t  case $linkmode in\n\t  lib)\n\t    # Linking convenience modules into shared libraries is allowed,\n\t    # but linking other static libraries is non-portable.\n\t    case \" $dlpreconveniencelibs \" in\n\t    *\" $deplib \"*) ;;\n\t    *)\n\t      valid_a_lib=no\n\t      case $deplibs_check_method in\n\t\tmatch_pattern*)\n\t\t  set dummy $deplibs_check_method; shift\n\t\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t\t  if eval \"\\$ECHO \\\"$deplib\\\"\" 2>/dev/null | $SED 10q \\\n\t\t    | $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t    valid_a_lib=yes\n\t\t  fi\n\t\t;;\n\t\tpass_all)\n\t\t  valid_a_lib=yes\n\t\t;;\n\t      esac\n\t      if test \"$valid_a_lib\" != yes; then\n\t\techo\n\t\t$ECHO \"*** Warning: Trying to link with static lib archive $deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because the file extensions .$libext of this argument makes me believe\"\n\t\techo \"*** that it is just a static archive that I should not use here.\"\n\t      else\n\t\techo\n\t\t$ECHO \"*** Warning: Linking the shared library $output against the\"\n\t\t$ECHO \"*** static library $deplib is not portable!\"\n\t\tdeplibs=\"$deplib $deplibs\"\n\t      fi\n\t      ;;\n\t    esac\n\t    continue\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" != link; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    continue\n\t    ;;\n\t  esac # linkmode\n\t  ;; # *.$libext\n\t*.lo | *.$objext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t  elif test \"$linkmode\" = prog; then\n\t    if test \"$pass\" = dlpreopen || test \"$dlopen_support\" != yes || test \"$build_libtool_libs\" = no; then\n\t      # If there is no dlopen support or we're linking statically,\n\t      # we need to preload.\n\t      func_append newdlprefiles \" $deplib\"\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      func_append newdlfiles \" $deplib\"\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t%DEPLIBS%)\n\t  alldeplibs=yes\n\t  continue\n\t  ;;\n\tesac # case $deplib\n\n\tif test \"$found\" = yes || test -f \"$lib\"; then :\n\telse\n\t  func_fatal_error \"cannot find the library \\`$lib' or unhandled argument \\`$deplib'\"\n\tfi\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$lib\" \\\n\t  || func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\n\tfunc_dirname \"$lib\" \"\" \".\"\n\tladir=\"$func_dirname_result\"\n\n\tdlname=\n\tdlopen=\n\tdlpreopen=\n\tlibdir=\n\tlibrary_names=\n\told_library=\n\tinherited_linker_flags=\n\t# If the library was installed with an old release of libtool,\n\t# it will not redefine variables installed, or shouldnotlink\n\tinstalled=yes\n\tshouldnotlink=no\n\tavoidtemprpath=\n\n\n\t# Read the .la file\n\tfunc_source \"$lib\"\n\n\t# Convert \"-framework foo\" to \"foo.ltframework\"\n\tif test -n \"$inherited_linker_flags\"; then\n\t  tmp_inherited_linker_flags=`$ECHO \"$inherited_linker_flags\" | $SED 's/-framework \\([^ $]*\\)/\\1.ltframework/g'`\n\t  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do\n\t    case \" $new_inherited_linker_flags \" in\n\t      *\" $tmp_inherited_linker_flag \"*) ;;\n\t      *) func_append new_inherited_linker_flags \" $tmp_inherited_linker_flag\";;\n\t    esac\n\t  done\n\tfi\n\tdependency_libs=`$ECHO \" $dependency_libs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tif test \"$linkmode,$pass\" = \"lib,link\" ||\n\t   test \"$linkmode,$pass\" = \"prog,scan\" ||\n\t   { test \"$linkmode\" != prog && test \"$linkmode\" != lib; }; then\n\t  test -n \"$dlopen\" && func_append dlfiles \" $dlopen\"\n\t  test -n \"$dlpreopen\" && func_append dlprefiles \" $dlpreopen\"\n\tfi\n\n\tif test \"$pass\" = conv; then\n\t  # Only check for convenience libraries\n\t  deplibs=\"$lib $deplibs\"\n\t  if test -z \"$libdir\"; then\n\t    if test -z \"$old_library\"; then\n\t      func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\t    fi\n\t    # It is a libtool convenience library, so add in its objects.\n\t    func_append convenience \" $ladir/$objdir/$old_library\"\n\t    func_append old_convenience \" $ladir/$objdir/$old_library\"\n\t    tmp_libs=\n\t    for deplib in $dependency_libs; do\n\t      deplibs=\"$deplib $deplibs\"\n\t      if $opt_preserve_dup_deps ; then\n\t\tcase \"$tmp_libs \" in\n\t\t*\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\t\tesac\n\t      fi\n\t      func_append tmp_libs \" $deplib\"\n\t    done\n\t  elif test \"$linkmode\" != prog && test \"$linkmode\" != lib; then\n\t    func_fatal_error \"\\`$lib' is not a convenience library\"\n\t  fi\n\t  continue\n\tfi # $pass = conv\n\n\n\t# Get the name of the library we link against.\n\tlinklib=\n\tif test -n \"$old_library\" &&\n\t   { test \"$prefer_static_libs\" = yes ||\n\t     test \"$prefer_static_libs,$installed\" = \"built,no\"; }; then\n\t  linklib=$old_library\n\telse\n\t  for l in $old_library $library_names; do\n\t    linklib=\"$l\"\n\t  done\n\tfi\n\tif test -z \"$linklib\"; then\n\t  func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\tfi\n\n\t# This library was specified with -dlopen.\n\tif test \"$pass\" = dlopen; then\n\t  if test -z \"$libdir\"; then\n\t    func_fatal_error \"cannot -dlopen a convenience library: \\`$lib'\"\n\t  fi\n\t  if test -z \"$dlname\" ||\n\t     test \"$dlopen_support\" != yes ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    # If there is no dlname, no dlopen support or we're linking\n\t    # statically, we need to preload.  We also need to preload any\n\t    # dependent libraries so libltdl's deplib preloader doesn't\n\t    # bomb out in the load deplibs phase.\n\t    func_append dlprefiles \" $lib $dependency_libs\"\n\t  else\n\t    func_append newdlfiles \" $lib\"\n\t  fi\n\t  continue\n\tfi # $pass = dlopen\n\n\t# We need an absolute path.\n\tcase $ladir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs_ladir=\"$ladir\" ;;\n\t*)\n\t  abs_ladir=`cd \"$ladir\" && pwd`\n\t  if test -z \"$abs_ladir\"; then\n\t    func_warning \"cannot determine absolute directory name of \\`$ladir'\"\n\t    func_warning \"passing it literally to the linker, although it might fail\"\n\t    abs_ladir=\"$ladir\"\n\t  fi\n\t  ;;\n\tesac\n\tfunc_basename \"$lib\"\n\tlaname=\"$func_basename_result\"\n\n\t# Find the relevant object directory and library name.\n\tif test \"X$installed\" = Xyes; then\n\t  if test ! -f \"$lt_sysroot$libdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    func_warning \"library \\`$lib' was moved.\"\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    libdir=\"$abs_ladir\"\n\t  else\n\t    dir=\"$lt_sysroot$libdir\"\n\t    absdir=\"$lt_sysroot$libdir\"\n\t  fi\n\t  test \"X$hardcode_automatic\" = Xyes && avoidtemprpath=yes\n\telse\n\t  if test ! -f \"$ladir/$objdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    # Remove this search path later\n\t    func_append notinst_path \" $abs_ladir\"\n\t  else\n\t    dir=\"$ladir/$objdir\"\n\t    absdir=\"$abs_ladir/$objdir\"\n\t    # Remove this search path later\n\t    func_append notinst_path \" $abs_ladir\"\n\t  fi\n\tfi # $installed = yes\n\tfunc_stripname 'lib' '.la' \"$laname\"\n\tname=$func_stripname_result\n\n\t# This library was specified with -dlpreopen.\n\tif test \"$pass\" = dlpreopen; then\n\t  if test -z \"$libdir\" && test \"$linkmode\" = prog; then\n\t    func_fatal_error \"only libraries may -dlpreopen a convenience library: \\`$lib'\"\n\t  fi\n\t  case \"$host\" in\n\t    # special handling for platforms with PE-DLLs.\n\t    *cygwin* | *mingw* | *cegcc* )\n\t      # Linker will automatically link against shared library if both\n\t      # static and shared are present.  Therefore, ensure we extract\n\t      # symbols from the import library if a shared library is present\n\t      # (otherwise, the dlopen module name will be incorrect).  We do\n\t      # this by putting the import library name into $newdlprefiles.\n\t      # We recover the dlopen module name by 'saving' the la file\n\t      # name in a special purpose variable, and (later) extracting the\n\t      # dlname from the la file.\n\t      if test -n \"$dlname\"; then\n\t        func_tr_sh \"$dir/$linklib\"\n\t        eval \"libfile_$func_tr_sh_result=\\$abs_ladir/\\$laname\"\n\t        func_append newdlprefiles \" $dir/$linklib\"\n\t      else\n\t        func_append newdlprefiles \" $dir/$old_library\"\n\t        # Keep a list of preopened convenience libraries to check\n\t        # that they are being used correctly in the link pass.\n\t        test -z \"$libdir\" && \\\n\t          func_append dlpreconveniencelibs \" $dir/$old_library\"\n\t      fi\n\t    ;;\n\t    * )\n\t      # Prefer using a static library (so that no silly _DYNAMIC symbols\n\t      # are required to link).\n\t      if test -n \"$old_library\"; then\n\t        func_append newdlprefiles \" $dir/$old_library\"\n\t        # Keep a list of preopened convenience libraries to check\n\t        # that they are being used correctly in the link pass.\n\t        test -z \"$libdir\" && \\\n\t          func_append dlpreconveniencelibs \" $dir/$old_library\"\n\t      # Otherwise, use the dlname, so that lt_dlopen finds it.\n\t      elif test -n \"$dlname\"; then\n\t        func_append newdlprefiles \" $dir/$dlname\"\n\t      else\n\t        func_append newdlprefiles \" $dir/$linklib\"\n\t      fi\n\t    ;;\n\t  esac\n\tfi # $pass = dlpreopen\n\n\tif test -z \"$libdir\"; then\n\t  # Link the convenience library\n\t  if test \"$linkmode\" = lib; then\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t  elif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$dir/$old_library $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$old_library $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$lib $deplibs\" # used for prog,scan pass\n\t  fi\n\t  continue\n\tfi\n\n\n\tif test \"$linkmode\" = prog && test \"$pass\" != link; then\n\t  func_append newlib_search_path \" $ladir\"\n\t  deplibs=\"$lib $deplibs\"\n\n\t  linkalldeplibs=no\n\t  if test \"$link_all_deplibs\" != no || test -z \"$library_names\" ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    linkalldeplibs=yes\n\t  fi\n\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    case $deplib in\n\t    -L*) func_stripname '-L' '' \"$deplib\"\n\t         func_resolve_sysroot \"$func_stripname_result\"\n\t         func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t\t ;;\n\t    esac\n\t    # Need to link against all dependency_libs?\n\t    if test \"$linkalldeplibs\" = yes; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      # Need to hardcode shared library paths\n\t      # or/and link against static libraries\n\t      newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    if $opt_preserve_dup_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\t      esac\n\t    fi\n\t    func_append tmp_libs \" $deplib\"\n\t  done # for deplib\n\t  continue\n\tfi # $linkmode = prog...\n\n\tif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t  if test -n \"$library_names\" &&\n\t     { { test \"$prefer_static_libs\" = no ||\n\t         test \"$prefer_static_libs,$installed\" = \"built,yes\"; } ||\n\t       test -z \"$old_library\"; }; then\n\t    # We need to hardcode the library path\n\t    if test -n \"$shlibpath_var\" && test -z \"$avoidtemprpath\" ; then\n\t      # Make sure the rpath contains only unique directories.\n\t      case \"$temp_rpath:\" in\n\t      *\"$absdir:\"*) ;;\n\t      *) func_append temp_rpath \"$absdir:\" ;;\n\t      esac\n\t    fi\n\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) func_append compile_rpath \" $absdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append finalize_rpath \" $libdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t  fi # $linkmode,$pass = prog,link...\n\n\t  if test \"$alldeplibs\" = yes &&\n\t     { test \"$deplibs_check_method\" = pass_all ||\n\t       { test \"$build_libtool_libs\" = yes &&\n\t\t test -n \"$library_names\"; }; }; then\n\t    # We only need to search for static libraries\n\t    continue\n\t  fi\n\tfi\n\n\tlink_static=no # Whether the deplib will be linked statically\n\tuse_static_libs=$prefer_static_libs\n\tif test \"$use_static_libs\" = built && test \"$installed\" = yes; then\n\t  use_static_libs=no\n\tfi\n\tif test -n \"$library_names\" &&\n\t   { test \"$use_static_libs\" = no || test -z \"$old_library\"; }; then\n\t  case $host in\n\t  *cygwin* | *mingw* | *cegcc*)\n\t      # No point in relinking DLLs because paths are not encoded\n\t      func_append notinst_deplibs \" $lib\"\n\t      need_relink=no\n\t    ;;\n\t  *)\n\t    if test \"$installed\" = no; then\n\t      func_append notinst_deplibs \" $lib\"\n\t      need_relink=yes\n\t    fi\n\t    ;;\n\t  esac\n\t  # This is a shared library\n\n\t  # Warn about portability, can't link against -module's on some\n\t  # systems (darwin).  Don't bleat about dlopened modules though!\n\t  dlopenmodule=\"\"\n\t  for dlpremoduletest in $dlprefiles; do\n\t    if test \"X$dlpremoduletest\" = \"X$lib\"; then\n\t      dlopenmodule=\"$dlpremoduletest\"\n\t      break\n\t    fi\n\t  done\n\t  if test -z \"$dlopenmodule\" && test \"$shouldnotlink\" = yes && test \"$pass\" = link; then\n\t    echo\n\t    if test \"$linkmode\" = prog; then\n\t      $ECHO \"*** Warning: Linking the executable $output against the loadable module\"\n\t    else\n\t      $ECHO \"*** Warning: Linking the shared library $output against the loadable module\"\n\t    fi\n\t    $ECHO \"*** $linklib is not portable!\"\n\t  fi\n\t  if test \"$linkmode\" = lib &&\n\t     test \"$hardcode_into_libs\" = yes; then\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) func_append compile_rpath \" $absdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append finalize_rpath \" $libdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t  fi\n\n\t  if test -n \"$old_archive_from_expsyms_cmds\"; then\n\t    # figure out the soname\n\t    set dummy $library_names\n\t    shift\n\t    realname=\"$1\"\n\t    shift\n\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t    # use dlname if we got it. it's perfectly good, no?\n\t    if test -n \"$dlname\"; then\n\t      soname=\"$dlname\"\n\t    elif test -n \"$soname_spec\"; then\n\t      # bleh windows\n\t      case $host in\n\t      *cygwin* | mingw* | *cegcc*)\n\t        func_arith $current - $age\n\t\tmajor=$func_arith_result\n\t\tversuffix=\"-$major\"\n\t\t;;\n\t      esac\n\t      eval soname=\\\"$soname_spec\\\"\n\t    else\n\t      soname=\"$realname\"\n\t    fi\n\n\t    # Make a new name for the extract_expsyms_cmds to use\n\t    soroot=\"$soname\"\n\t    func_basename \"$soroot\"\n\t    soname=\"$func_basename_result\"\n\t    func_stripname 'lib' '.dll' \"$soname\"\n\t    newlib=libimp-$func_stripname_result.a\n\n\t    # If the library has no export list, then create one now\n\t    if test -f \"$output_objdir/$soname-def\"; then :\n\t    else\n\t      func_verbose \"extracting exported symbol list from \\`$soname'\"\n\t      func_execute_cmds \"$extract_expsyms_cmds\" 'exit $?'\n\t    fi\n\n\t    # Create $newlib\n\t    if test -f \"$output_objdir/$newlib\"; then :; else\n\t      func_verbose \"generating import library for \\`$soname'\"\n\t      func_execute_cmds \"$old_archive_from_expsyms_cmds\" 'exit $?'\n\t    fi\n\t    # make sure the library variables are pointing to the new library\n\t    dir=$output_objdir\n\t    linklib=$newlib\n\t  fi # test -n \"$old_archive_from_expsyms_cmds\"\n\n\t  if test \"$linkmode\" = prog || test \"$opt_mode\" != relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    lib_linked=yes\n\t    case $hardcode_action in\n\t    immediate | unsupported)\n\t      if test \"$hardcode_direct\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t\tcase $host in\n\t\t  *-*-sco3.2v5.0.[024]*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv4*uw2*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \\\n\t\t    *-*-unixware7*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-darwin* )\n\t\t    # if the lib is a (non-dlopened) module then we can not\n\t\t    # link against it, someone is ignoring the earlier warnings\n\t\t    if /usr/bin/file -L $add 2> /dev/null |\n\t\t\t $GREP \": [^:]* bundle\" >/dev/null ; then\n\t\t      if test \"X$dlopenmodule\" != \"X$lib\"; then\n\t\t\t$ECHO \"*** Warning: lib $linklib is a module, not a shared library\"\n\t\t\tif test -z \"$old_library\" ; then\n\t\t\t  echo\n\t\t\t  echo \"*** And there doesn't seem to be a static archive available\"\n\t\t\t  echo \"*** The link will probably fail, sorry\"\n\t\t\telse\n\t\t\t  add=\"$dir/$old_library\"\n\t\t\tfi\n\t\t      elif test -n \"$old_library\"; then\n\t\t\tadd=\"$dir/$old_library\"\n\t\t      fi\n\t\t    fi\n\t\tesac\n\t      elif test \"$hardcode_minus_L\" = no; then\n\t\tcase $host in\n\t\t*-*-sunos*) add_shlibpath=\"$dir\" ;;\n\t\tesac\n\t\tadd_dir=\"-L$dir\"\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = no; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    relink)\n\t      if test \"$hardcode_direct\" = yes &&\n\t         test \"$hardcode_direct_absolute\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t      elif test \"$hardcode_minus_L\" = yes; then\n\t\tadd_dir=\"-L$absdir\"\n\t\t# Try looking first in the location we're being installed to.\n\t\tif test -n \"$inst_prefix_dir\"; then\n\t\t  case $libdir in\n\t\t    [\\\\/]*)\n\t\t      func_append add_dir \" -L$inst_prefix_dir$libdir\"\n\t\t      ;;\n\t\t  esac\n\t\tfi\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = yes; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    *) lib_linked=no ;;\n\t    esac\n\n\t    if test \"$lib_linked\" != yes; then\n\t      func_fatal_configuration \"unsupported hardcode properties\"\n\t    fi\n\n\t    if test -n \"$add_shlibpath\"; then\n\t      case :$compile_shlibpath: in\n\t      *\":$add_shlibpath:\"*) ;;\n\t      *) func_append compile_shlibpath \"$add_shlibpath:\" ;;\n\t      esac\n\t    fi\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && compile_deplibs=\"$add_dir $compile_deplibs\"\n\t      test -n \"$add\" && compile_deplibs=\"$add $compile_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t      if test \"$hardcode_direct\" != yes &&\n\t\t test \"$hardcode_minus_L\" != yes &&\n\t\t test \"$hardcode_shlibpath_var\" = yes; then\n\t\tcase :$finalize_shlibpath: in\n\t\t*\":$libdir:\"*) ;;\n\t\t*) func_append finalize_shlibpath \"$libdir:\" ;;\n\t\tesac\n\t      fi\n\t    fi\n\t  fi\n\n\t  if test \"$linkmode\" = prog || test \"$opt_mode\" = relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    # Finalize command for both is simple: just hardcode it.\n\t    if test \"$hardcode_direct\" = yes &&\n\t       test \"$hardcode_direct_absolute\" = no; then\n\t      add=\"$libdir/$linklib\"\n\t    elif test \"$hardcode_minus_L\" = yes; then\n\t      add_dir=\"-L$libdir\"\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_shlibpath_var\" = yes; then\n\t      case :$finalize_shlibpath: in\n\t      *\":$libdir:\"*) ;;\n\t      *) func_append finalize_shlibpath \"$libdir:\" ;;\n\t      esac\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_automatic\" = yes; then\n\t      if test -n \"$inst_prefix_dir\" &&\n\t\t test -f \"$inst_prefix_dir$libdir/$linklib\" ; then\n\t\tadd=\"$inst_prefix_dir$libdir/$linklib\"\n\t      else\n\t\tadd=\"$libdir/$linklib\"\n\t      fi\n\t    else\n\t      # We cannot seem to hardcode it, guess we'll fake it.\n\t      add_dir=\"-L$libdir\"\n\t      # Try looking first in the location we're being installed to.\n\t      if test -n \"$inst_prefix_dir\"; then\n\t\tcase $libdir in\n\t\t  [\\\\/]*)\n\t\t    func_append add_dir \" -L$inst_prefix_dir$libdir\"\n\t\t    ;;\n\t\tesac\n\t      fi\n\t      add=\"-l$name\"\n\t    fi\n\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && finalize_deplibs=\"$add_dir $finalize_deplibs\"\n\t      test -n \"$add\" && finalize_deplibs=\"$add $finalize_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t    fi\n\t  fi\n\telif test \"$linkmode\" = prog; then\n\t  # Here we assume that one of hardcode_direct or hardcode_minus_L\n\t  # is not unsupported.  This is valid on all known static and\n\t  # shared platforms.\n\t  if test \"$hardcode_direct\" != unsupported; then\n\t    test -n \"$old_library\" && linklib=\"$old_library\"\n\t    compile_deplibs=\"$dir/$linklib $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$linklib $finalize_deplibs\"\n\t  else\n\t    compile_deplibs=\"-l$name -L$dir $compile_deplibs\"\n\t    finalize_deplibs=\"-l$name -L$dir $finalize_deplibs\"\n\t  fi\n\telif test \"$build_libtool_libs\" = yes; then\n\t  # Not a shared library\n\t  if test \"$deplibs_check_method\" != pass_all; then\n\t    # We're trying link a shared library against a static one\n\t    # but the system doesn't support it.\n\n\t    # Just print a warning and add the library to dependency_libs so\n\t    # that the program can be linked against the static library.\n\t    echo\n\t    $ECHO \"*** Warning: This system can not link to static lib archive $lib.\"\n\t    echo \"*** I have the capability to make that library automatically link in when\"\n\t    echo \"*** you link to this library.  But I can only do this if you have a\"\n\t    echo \"*** shared version of the library, which you do not appear to have.\"\n\t    if test \"$module\" = yes; then\n\t      echo \"*** But as you try to build a module library, libtool will still create \"\n\t      echo \"*** a static module, that should work as long as the dlopening application\"\n\t      echo \"*** is linked with the -dlopen flag to resolve symbols at runtime.\"\n\t      if test -z \"$global_symbol_pipe\"; then\n\t\techo\n\t\techo \"*** However, this would only work if libtool was able to extract symbol\"\n\t\techo \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t\techo \"*** not find such a program.  So, this module is probably useless.\"\n\t\techo \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t      fi\n\t      if test \"$build_old_libs\" = no; then\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  else\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t    link_static=yes\n\t  fi\n\tfi # link shared/static library?\n\n\tif test \"$linkmode\" = lib; then\n\t  if test -n \"$dependency_libs\" &&\n\t     { test \"$hardcode_into_libs\" != yes ||\n\t       test \"$build_old_libs\" = yes ||\n\t       test \"$link_static\" = yes; }; then\n\t    # Extract -R from dependency_libs\n\t    temp_deplibs=\n\t    for libdir in $dependency_libs; do\n\t      case $libdir in\n\t      -R*) func_stripname '-R' '' \"$libdir\"\n\t           temp_xrpath=$func_stripname_result\n\t\t   case \" $xrpath \" in\n\t\t   *\" $temp_xrpath \"*) ;;\n\t\t   *) func_append xrpath \" $temp_xrpath\";;\n\t\t   esac;;\n\t      *) func_append temp_deplibs \" $libdir\";;\n\t      esac\n\t    done\n\t    dependency_libs=\"$temp_deplibs\"\n\t  fi\n\n\t  func_append newlib_search_path \" $absdir\"\n\t  # Link against this library\n\t  test \"$link_static\" = no && newdependency_libs=\"$abs_ladir/$laname $newdependency_libs\"\n\t  # ... and its dependency_libs\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    case $deplib in\n              -L*) func_stripname '-L' '' \"$deplib\"\n                   func_resolve_sysroot \"$func_stripname_result\";;\n              *) func_resolve_sysroot \"$deplib\" ;;\n            esac\n\t    if $opt_preserve_dup_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $func_resolve_sysroot_result \"*)\n                func_append specialdeplibs \" $func_resolve_sysroot_result\" ;;\n\t      esac\n\t    fi\n\t    func_append tmp_libs \" $func_resolve_sysroot_result\"\n\t  done\n\n\t  if test \"$link_all_deplibs\" != no; then\n\t    # Add the search paths of all dependency libraries\n\t    for deplib in $dependency_libs; do\n\t      path=\n\t      case $deplib in\n\t      -L*) path=\"$deplib\" ;;\n\t      *.la)\n\t        func_resolve_sysroot \"$deplib\"\n\t        deplib=$func_resolve_sysroot_result\n\t        func_dirname \"$deplib\" \"\" \".\"\n\t\tdir=$func_dirname_result\n\t\t# We need an absolute path.\n\t\tcase $dir in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) absdir=\"$dir\" ;;\n\t\t*)\n\t\t  absdir=`cd \"$dir\" && pwd`\n\t\t  if test -z \"$absdir\"; then\n\t\t    func_warning \"cannot determine absolute directory name of \\`$dir'\"\n\t\t    absdir=\"$dir\"\n\t\t  fi\n\t\t  ;;\n\t\tesac\n\t\tif $GREP \"^installed=no\" $deplib > /dev/null; then\n\t\tcase $host in\n\t\t*-*-darwin*)\n\t\t  depdepl=\n\t\t  eval deplibrary_names=`${SED} -n -e 's/^library_names=\\(.*\\)$/\\1/p' $deplib`\n\t\t  if test -n \"$deplibrary_names\" ; then\n\t\t    for tmp in $deplibrary_names ; do\n\t\t      depdepl=$tmp\n\t\t    done\n\t\t    if test -f \"$absdir/$objdir/$depdepl\" ; then\n\t\t      depdepl=\"$absdir/$objdir/$depdepl\"\n\t\t      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`\n                      if test -z \"$darwin_install_name\"; then\n                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`\n                      fi\n\t\t      func_append compiler_flags \" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}\"\n\t\t      func_append linker_flags \" -dylib_file ${darwin_install_name}:${depdepl}\"\n\t\t      path=\n\t\t    fi\n\t\t  fi\n\t\t  ;;\n\t\t*)\n\t\t  path=\"-L$absdir/$objdir\"\n\t\t  ;;\n\t\tesac\n\t\telse\n\t\t  eval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $deplib`\n\t\t  test -z \"$libdir\" && \\\n\t\t    func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\t  test \"$absdir\" != \"$libdir\" && \\\n\t\t    func_warning \"\\`$deplib' seems to be moved\"\n\n\t\t  path=\"-L$absdir\"\n\t\tfi\n\t\t;;\n\t      esac\n\t      case \" $deplibs \" in\n\t      *\" $path \"*) ;;\n\t      *) deplibs=\"$path $deplibs\" ;;\n\t      esac\n\t    done\n\t  fi # link_all_deplibs != no\n\tfi # linkmode = lib\n      done # for deplib in $libs\n      if test \"$pass\" = link; then\n\tif test \"$linkmode\" = \"prog\"; then\n\t  compile_deplibs=\"$new_inherited_linker_flags $compile_deplibs\"\n\t  finalize_deplibs=\"$new_inherited_linker_flags $finalize_deplibs\"\n\telse\n\t  compiler_flags=\"$compiler_flags \"`$ECHO \" $new_inherited_linker_flags\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfi\n      fi\n      dependency_libs=\"$newdependency_libs\"\n      if test \"$pass\" = dlpreopen; then\n\t# Link the dlpreopened libraries before other libraries\n\tfor deplib in $save_deplibs; do\n\t  deplibs=\"$deplib $deplibs\"\n\tdone\n      fi\n      if test \"$pass\" != dlopen; then\n\tif test \"$pass\" != conv; then\n\t  # Make sure lib_search_path contains only unique directories.\n\t  lib_search_path=\n\t  for dir in $newlib_search_path; do\n\t    case \"$lib_search_path \" in\n\t    *\" $dir \"*) ;;\n\t    *) func_append lib_search_path \" $dir\" ;;\n\t    esac\n\t  done\n\t  newlib_search_path=\n\tfi\n\n\tif test \"$linkmode,$pass\" != \"prog,link\"; then\n\t  vars=\"deplibs\"\n\telse\n\t  vars=\"compile_deplibs finalize_deplibs\"\n\tfi\n\tfor var in $vars dependency_libs; do\n\t  # Add libraries to $var in reverse order\n\t  eval tmp_libs=\\\"\\$$var\\\"\n\t  new_libs=\n\t  for deplib in $tmp_libs; do\n\t    # FIXME: Pedantically, this is the right thing to do, so\n\t    #        that some nasty dependency loop isn't accidentally\n\t    #        broken:\n\t    #new_libs=\"$deplib $new_libs\"\n\t    # Pragmatically, this seems to cause very few problems in\n\t    # practice:\n\t    case $deplib in\n\t    -L*) new_libs=\"$deplib $new_libs\" ;;\n\t    -R*) ;;\n\t    *)\n\t      # And here is the reason: when a library appears more\n\t      # than once as an explicit dependence of a library, or\n\t      # is implicitly linked in more than once by the\n\t      # compiler, it is considered special, and multiple\n\t      # occurrences thereof are not removed.  Compare this\n\t      # with having the same library being listed as a\n\t      # dependency of multiple other libraries: in this case,\n\t      # we know (pedantically, we assume) the library does not\n\t      # need to be listed more than once, so we keep only the\n\t      # last copy.  This is not always right, but it is rare\n\t      # enough that we require users that really mean to play\n\t      # such unportable linking tricks to link the library\n\t      # using -Wl,-lname, so that libtool does not consider it\n\t      # for duplicate removal.\n\t      case \" $specialdeplibs \" in\n\t      *\" $deplib \"*) new_libs=\"$deplib $new_libs\" ;;\n\t      *)\n\t\tcase \" $new_libs \" in\n\t\t*\" $deplib \"*) ;;\n\t\t*) new_libs=\"$deplib $new_libs\" ;;\n\t\tesac\n\t\t;;\n\t      esac\n\t      ;;\n\t    esac\n\t  done\n\t  tmp_libs=\n\t  for deplib in $new_libs; do\n\t    case $deplib in\n\t    -L*)\n\t      case \" $tmp_libs \" in\n\t      *\" $deplib \"*) ;;\n\t      *) func_append tmp_libs \" $deplib\" ;;\n\t      esac\n\t      ;;\n\t    *) func_append tmp_libs \" $deplib\" ;;\n\t    esac\n\t  done\n\t  eval $var=\\\"$tmp_libs\\\"\n\tdone # for var\n      fi\n      # Last step: remove runtime libs from dependency_libs\n      # (they stay in deplibs)\n      tmp_libs=\n      for i in $dependency_libs ; do\n\tcase \" $predeps $postdeps $compiler_lib_search_path \" in\n\t*\" $i \"*)\n\t  i=\"\"\n\t  ;;\n\tesac\n\tif test -n \"$i\" ; then\n\t  func_append tmp_libs \" $i\"\n\tfi\n      done\n      dependency_libs=$tmp_libs\n    done # for pass\n    if test \"$linkmode\" = prog; then\n      dlfiles=\"$newdlfiles\"\n    fi\n    if test \"$linkmode\" = prog || test \"$linkmode\" = lib; then\n      dlprefiles=\"$newdlprefiles\"\n    fi\n\n    case $linkmode in\n    oldlib)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for archives\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for archives\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for archives\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for archives\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info/-version-number' is ignored for archives\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for archives\"\n\n      test -n \"$export_symbols$export_symbols_regex\" && \\\n\tfunc_warning \"\\`-export-symbols' is ignored for archives\"\n\n      # Now set the variables for building old libraries.\n      build_libtool_libs=no\n      oldlibs=\"$output\"\n      func_append objs \"$old_deplibs\"\n      ;;\n\n    lib)\n      # Make sure we only generate libraries of the form `libNAME.la'.\n      case $outputname in\n      lib*)\n\tfunc_stripname 'lib' '.la' \"$outputname\"\n\tname=$func_stripname_result\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval libname=\\\"$libname_spec\\\"\n\t;;\n      *)\n\ttest \"$module\" = no && \\\n\t  func_fatal_help \"libtool library \\`$output' must begin with \\`lib'\"\n\n\tif test \"$need_lib_prefix\" != no; then\n\t  # Add the \"lib\" prefix for modules if required\n\t  func_stripname '' '.la' \"$outputname\"\n\t  name=$func_stripname_result\n\t  eval shared_ext=\\\"$shrext_cmds\\\"\n\t  eval libname=\\\"$libname_spec\\\"\n\telse\n\t  func_stripname '' '.la' \"$outputname\"\n\t  libname=$func_stripname_result\n\tfi\n\t;;\n      esac\n\n      if test -n \"$objs\"; then\n\tif test \"$deplibs_check_method\" != pass_all; then\n\t  func_fatal_error \"cannot build libtool library \\`$output' from non-libtool objects on this host:$objs\"\n\telse\n\t  echo\n\t  $ECHO \"*** Warning: Linking the shared library $output against the non-libtool\"\n\t  $ECHO \"*** objects $objs is not portable!\"\n\t  func_append libobjs \" $objs\"\n\tfi\n      fi\n\n      test \"$dlself\" != no && \\\n\tfunc_warning \"\\`-dlopen self' is ignored for libtool libraries\"\n\n      set dummy $rpath\n      shift\n      test \"$#\" -gt 1 && \\\n\tfunc_warning \"ignoring multiple \\`-rpath's for a libtool library\"\n\n      install_libdir=\"$1\"\n\n      oldlibs=\n      if test -z \"$rpath\"; then\n\tif test \"$build_libtool_libs\" = yes; then\n\t  # Building a libtool convenience library.\n\t  # Some compilers have problems with a `.al' extension so\n\t  # convenience libraries should have the same extension an\n\t  # archive normally would.\n\t  oldlibs=\"$output_objdir/$libname.$libext $oldlibs\"\n\t  build_libtool_libs=convenience\n\t  build_old_libs=yes\n\tfi\n\n\ttest -n \"$vinfo\" && \\\n\t  func_warning \"\\`-version-info/-version-number' is ignored for convenience libraries\"\n\n\ttest -n \"$release\" && \\\n\t  func_warning \"\\`-release' is ignored for convenience libraries\"\n      else\n\n\t# Parse the version information argument.\n\tsave_ifs=\"$IFS\"; IFS=':'\n\tset dummy $vinfo 0 0 0\n\tshift\n\tIFS=\"$save_ifs\"\n\n\ttest -n \"$7\" && \\\n\t  func_fatal_help \"too many parameters to \\`-version-info'\"\n\n\t# convert absolute version numbers to libtool ages\n\t# this retains compatibility with .la files and attempts\n\t# to make the code below a bit more comprehensible\n\n\tcase $vinfo_number in\n\tyes)\n\t  number_major=\"$1\"\n\t  number_minor=\"$2\"\n\t  number_revision=\"$3\"\n\t  #\n\t  # There are really only two kinds -- those that\n\t  # use the current revision as the major version\n\t  # and those that subtract age and use age as\n\t  # a minor version.  But, then there is irix\n\t  # which has an extra 1 added just for fun\n\t  #\n\t  case $version_type in\n\t  # correct linux to gnu/linux during the next big refactor\n\t  darwin|linux|osf|windows|none)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_revision\"\n\t    ;;\n\t  freebsd-aout|freebsd-elf|qnx|sunos)\n\t    current=\"$number_major\"\n\t    revision=\"$number_minor\"\n\t    age=\"0\"\n\t    ;;\n\t  irix|nonstopux)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_minor\"\n\t    lt_irix_increment=no\n\t    ;;\n\t  *)\n\t    func_fatal_configuration \"$modename: unknown library version type \\`$version_type'\"\n\t    ;;\n\t  esac\n\t  ;;\n\tno)\n\t  current=\"$1\"\n\t  revision=\"$2\"\n\t  age=\"$3\"\n\t  ;;\n\tesac\n\n\t# Check that each of the things are valid numbers.\n\tcase $current in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"CURRENT \\`$current' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $revision in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"REVISION \\`$revision' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $age in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"AGE \\`$age' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tif test \"$age\" -gt \"$current\"; then\n\t  func_error \"AGE \\`$age' is greater than the current interface number \\`$current'\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\tfi\n\n\t# Calculate the version variables.\n\tmajor=\n\tversuffix=\n\tverstring=\n\tcase $version_type in\n\tnone) ;;\n\n\tdarwin)\n\t  # Like Linux, but with the current version available in\n\t  # verstring for coding it into the library header\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  # Darwin ld doesn't like 0 for these options...\n\t  func_arith $current + 1\n\t  minor_current=$func_arith_result\n\t  xlcverstring=\"${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision\"\n\t  verstring=\"-compatibility_version $minor_current -current_version $minor_current.$revision\"\n\t  ;;\n\n\tfreebsd-aout)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\";\n\t  ;;\n\n\tfreebsd-elf)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tirix | nonstopux)\n\t  if test \"X$lt_irix_increment\" = \"Xno\"; then\n\t    func_arith $current - $age\n\t  else\n\t    func_arith $current - $age + 1\n\t  fi\n\t  major=$func_arith_result\n\n\t  case $version_type in\n\t    nonstopux) verstring_prefix=nonstopux ;;\n\t    *)         verstring_prefix=sgi ;;\n\t  esac\n\t  verstring=\"$verstring_prefix$major.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$revision\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $revision - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring_prefix$major.$iface:$verstring\"\n\t  done\n\n\t  # Before this point, $major must not contain `.'.\n\t  major=.$major\n\t  versuffix=\"$major.$revision\"\n\t  ;;\n\n\tlinux) # correct to gnu/linux during the next big refactor\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  ;;\n\n\tosf)\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\".$current.$age.$revision\"\n\t  verstring=\"$current.$age.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$age\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $current - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring:${iface}.0\"\n\t  done\n\n\t  # Make executables depend on our current version.\n\t  func_append verstring \":${current}.0\"\n\t  ;;\n\n\tqnx)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tsunos)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\"\n\t  ;;\n\n\twindows)\n\t  # Use '-' rather than '.', since we only want one\n\t  # extension on DOS 8.3 filesystems.\n\t  func_arith $current - $age\n\t  major=$func_arith_result\n\t  versuffix=\"-$major\"\n\t  ;;\n\n\t*)\n\t  func_fatal_configuration \"unknown library version type \\`$version_type'\"\n\t  ;;\n\tesac\n\n\t# Clear the version info if we defaulted, and they specified a release.\n\tif test -z \"$vinfo\" && test -n \"$release\"; then\n\t  major=\n\t  case $version_type in\n\t  darwin)\n\t    # we can't check for \"0.0\" in archive_cmds due to quoting\n\t    # problems, so we reset it completely\n\t    verstring=\n\t    ;;\n\t  *)\n\t    verstring=\"0.0\"\n\t    ;;\n\t  esac\n\t  if test \"$need_version\" = no; then\n\t    versuffix=\n\t  else\n\t    versuffix=\".0.0\"\n\t  fi\n\tfi\n\n\t# Remove version info from name if versioning should be avoided\n\tif test \"$avoid_version\" = yes && test \"$need_version\" = no; then\n\t  major=\n\t  versuffix=\n\t  verstring=\"\"\n\tfi\n\n\t# Check to see if the archive will have undefined symbols.\n\tif test \"$allow_undefined\" = yes; then\n\t  if test \"$allow_undefined_flag\" = unsupported; then\n\t    func_warning \"undefined symbols not allowed in $host shared libraries\"\n\t    build_libtool_libs=no\n\t    build_old_libs=yes\n\t  fi\n\telse\n\t  # Don't allow undefined symbols.\n\t  allow_undefined_flag=\"$no_undefined_flag\"\n\tfi\n\n      fi\n\n      func_generate_dlsyms \"$libname\" \"$libname\" \"yes\"\n      func_append libobjs \" $symfileobj\"\n      test \"X$libobjs\" = \"X \" && libobjs=\n\n      if test \"$opt_mode\" != relink; then\n\t# Remove our outputs, but don't remove object files since they\n\t# may have been created when compiling PIC objects.\n\tremovelist=\n\ttempremovelist=`$ECHO \"$output_objdir/*\"`\n\tfor p in $tempremovelist; do\n\t  case $p in\n\t    *.$objext | *.gcno)\n\t       ;;\n\t    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)\n\t       if test \"X$precious_files_regex\" != \"X\"; then\n\t\t if $ECHO \"$p\" | $EGREP -e \"$precious_files_regex\" >/dev/null 2>&1\n\t\t then\n\t\t   continue\n\t\t fi\n\t       fi\n\t       func_append removelist \" $p\"\n\t       ;;\n\t    *) ;;\n\t  esac\n\tdone\n\ttest -n \"$removelist\" && \\\n\t  func_show_eval \"${RM}r \\$removelist\"\n      fi\n\n      # Now set the variables for building old libraries.\n      if test \"$build_old_libs\" = yes && test \"$build_libtool_libs\" != convenience ; then\n\tfunc_append oldlibs \" $output_objdir/$libname.$libext\"\n\n\t# Transform .lo files to .o files.\n\toldobjs=\"$objs \"`$ECHO \"$libobjs\" | $SP2NL | $SED \"/\\.${libext}$/d; $lo2o\" | $NL2SP`\n      fi\n\n      # Eliminate all temporary directories.\n      #for path in $notinst_path; do\n      #\tlib_search_path=`$ECHO \"$lib_search_path \" | $SED \"s% $path % %g\"`\n      #\tdeplibs=`$ECHO \"$deplibs \" | $SED \"s% -L$path % %g\"`\n      #\tdependency_libs=`$ECHO \"$dependency_libs \" | $SED \"s% -L$path % %g\"`\n      #done\n\n      if test -n \"$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\ttemp_xrpath=\n\tfor libdir in $xrpath; do\n\t  func_replace_sysroot \"$libdir\"\n\t  func_append temp_xrpath \" -R$func_replace_sysroot_result\"\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_rpath \" $libdir\" ;;\n\t  esac\n\tdone\n\tif test \"$hardcode_into_libs\" != yes || test \"$build_old_libs\" = yes; then\n\t  dependency_libs=\"$temp_xrpath $dependency_libs\"\n\tfi\n      fi\n\n      # Make sure dlfiles contains only unique files that won't be dlpreopened\n      old_dlfiles=\"$dlfiles\"\n      dlfiles=\n      for lib in $old_dlfiles; do\n\tcase \" $dlprefiles $dlfiles \" in\n\t*\" $lib \"*) ;;\n\t*) func_append dlfiles \" $lib\" ;;\n\tesac\n      done\n\n      # Make sure dlprefiles contains only unique files\n      old_dlprefiles=\"$dlprefiles\"\n      dlprefiles=\n      for lib in $old_dlprefiles; do\n\tcase \"$dlprefiles \" in\n\t*\" $lib \"*) ;;\n\t*) func_append dlprefiles \" $lib\" ;;\n\tesac\n      done\n\n      if test \"$build_libtool_libs\" = yes; then\n\tif test -n \"$rpath\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)\n\t    # these systems don't actually have a c library (as such)!\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C library is in the System framework\n\t    func_append deplibs \" System.ltframework\"\n\t    ;;\n\t  *-*-netbsd*)\n\t    # Don't link with libc until the a.out ld.so is fixed.\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    ;;\n\t  *)\n\t    # Add libc to deplibs on all other systems if necessary.\n\t    if test \"$build_libtool_need_lc\" = \"yes\"; then\n\t      func_append deplibs \" -lc\"\n\t    fi\n\t    ;;\n\t  esac\n\tfi\n\n\t# Transform deplibs into only deplibs that can be linked in shared.\n\tname_save=$name\n\tlibname_save=$libname\n\trelease_save=$release\n\tversuffix_save=$versuffix\n\tmajor_save=$major\n\t# I'm not sure if I'm treating the release correctly.  I think\n\t# release should show up in the -l (ie -lgmp5) so we don't want to\n\t# add it in twice.  Is that correct?\n\trelease=\"\"\n\tversuffix=\"\"\n\tmajor=\"\"\n\tnewdeplibs=\n\tdroppeddeps=no\n\tcase $deplibs_check_method in\n\tpass_all)\n\t  # Don't check for shared/static.  Everything works.\n\t  # This might be a little naive.  We might want to check\n\t  # whether the library exists or not.  But this is on\n\t  # osf3 & osf4 and I'm not really sure... Just\n\t  # implementing what was already the behavior.\n\t  newdeplibs=$deplibs\n\t  ;;\n\ttest_compile)\n\t  # This code stresses the \"libraries are programs\" paradigm to its\n\t  # limits. Maybe even breaks it.  We compile a program, linking it\n\t  # against the deplibs as a proxy for the library.  Then we can check\n\t  # whether they linked in statically or dynamically with ldd.\n\t  $opt_dry_run || $RM conftest.c\n\t  cat > conftest.c <<EOF\n\t  int main() { return 0; }\nEOF\n\t  $opt_dry_run || $RM conftest\n\t  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then\n\t    ldd_output=`ldd conftest`\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\tif test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t  case \" $predeps $postdeps \" in\n\t\t  *\" $i \"*)\n\t\t    func_append newdeplibs \" $i\"\n\t\t    i=\"\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t\tif test -n \"$i\" ; then\n\t\t  libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t  deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t  set dummy $deplib_matches; shift\n\t\t  deplib_match=$1\n\t\t  if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t    func_append newdeplibs \" $i\"\n\t\t  else\n\t\t    droppeddeps=yes\n\t\t    echo\n\t\t    $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t    echo \"*** I have the capability to make that library automatically link in when\"\n\t\t    echo \"*** you link to this library.  But I can only do this if you have a\"\n\t\t    echo \"*** shared version of the library, which I believe you do not have\"\n\t\t    echo \"*** because a test_compile did reveal that the linker did not use it for\"\n\t\t    echo \"*** its dynamic dependency list that programs get resolved with at runtime.\"\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *)\n\t\tfunc_append newdeplibs \" $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  else\n\t    # Error occurred in the first compile.  Let's try to salvage\n\t    # the situation: Compile a separate program for each library.\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\t$opt_dry_run || $RM conftest\n\t\tif $LTCC $LTCFLAGS -o conftest conftest.c $i; then\n\t\t  ldd_output=`ldd conftest`\n\t\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t    case \" $predeps $postdeps \" in\n\t\t    *\" $i \"*)\n\t\t      func_append newdeplibs \" $i\"\n\t\t      i=\"\"\n\t\t      ;;\n\t\t    esac\n\t\t  fi\n\t\t  if test -n \"$i\" ; then\n\t\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t    deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t    set dummy $deplib_matches; shift\n\t\t    deplib_match=$1\n\t\t    if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t      func_append newdeplibs \" $i\"\n\t\t    else\n\t\t      droppeddeps=yes\n\t\t      echo\n\t\t      $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t      echo \"*** I have the capability to make that library automatically link in when\"\n\t\t      echo \"*** you link to this library.  But I can only do this if you have a\"\n\t\t      echo \"*** shared version of the library, which you do not appear to have\"\n\t\t      echo \"*** because a test_compile did reveal that the linker did not use this one\"\n\t\t      echo \"*** as a dynamic dependency that programs can get resolved with at runtime.\"\n\t\t    fi\n\t\t  fi\n\t\telse\n\t\t  droppeddeps=yes\n\t\t  echo\n\t\t  $ECHO \"*** Warning!  Library $i is needed by this library but I was not able to\"\n\t\t  echo \"*** make it link in!  You will probably need to install it or some\"\n\t\t  echo \"*** library that it depends on before this library will be fully\"\n\t\t  echo \"*** functional.  Installing it before continuing would be even better.\"\n\t\tfi\n\t\t;;\n\t      *)\n\t\tfunc_append newdeplibs \" $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  fi\n\t  ;;\n\tfile_magic*)\n\t  set dummy $deplibs_check_method; shift\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  func_append newdeplibs \" $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tif test -n \"$file_magic_glob\"; then\n\t\t  libnameglob=`func_echo_all \"$libname\" | $SED -e $file_magic_glob`\n\t\telse\n\t\t  libnameglob=$libname\n\t\tfi\n\t\ttest \"$want_nocaseglob\" = yes && nocaseglob=`shopt -p nocaseglob`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  if test \"$want_nocaseglob\" = yes; then\n\t\t    shopt -s nocaseglob\n\t\t    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`\n\t\t    $nocaseglob\n\t\t  else\n\t\t    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`\n\t\t  fi\n\t\t  for potent_lib in $potential_libs; do\n\t\t      # Follow soft links.\n\t\t      if ls -lLd \"$potent_lib\" 2>/dev/null |\n\t\t\t $GREP \" -> \" >/dev/null; then\n\t\t\tcontinue\n\t\t      fi\n\t\t      # The statement above tries to avoid entering an\n\t\t      # endless loop below, in case of cyclic links.\n\t\t      # We might still enter an endless loop, since a link\n\t\t      # loop can be closed while we follow links,\n\t\t      # but so what?\n\t\t      potlib=\"$potent_lib\"\n\t\t      while test -h \"$potlib\" 2>/dev/null; do\n\t\t\tpotliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`\n\t\t\tcase $potliblink in\n\t\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) potlib=\"$potliblink\";;\n\t\t\t*) potlib=`$ECHO \"$potlib\" | $SED 's,[^/]*$,,'`\"$potliblink\";;\n\t\t\tesac\n\t\t      done\n\t\t      if eval $file_magic_cmd \\\"\\$potlib\\\" 2>/dev/null |\n\t\t\t $SED -e 10q |\n\t\t\t $EGREP \"$file_magic_regex\" > /dev/null; then\n\t\t\tfunc_append newdeplibs \" $a_deplib\"\n\t\t\ta_deplib=\"\"\n\t\t\tbreak 2\n\t\t      fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\techo\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for file magic test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a file magic. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      func_append newdeplibs \" $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tmatch_pattern*)\n\t  set dummy $deplibs_check_method; shift\n\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  func_append newdeplibs \" $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`\n\t\t  for potent_lib in $potential_libs; do\n\t\t    potlib=\"$potent_lib\" # see symlink-check above in file_magic test\n\t\t    if eval \"\\$ECHO \\\"$potent_lib\\\"\" 2>/dev/null | $SED 10q | \\\n\t\t       $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t      func_append newdeplibs \" $a_deplib\"\n\t\t      a_deplib=\"\"\n\t\t      break 2\n\t\t    fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\techo\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for regex pattern test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a regex pattern. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      func_append newdeplibs \" $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tnone | unknown | *)\n\t  newdeplibs=\"\"\n\t  tmp_deplibs=`$ECHO \" $deplibs\" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`\n\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t    for i in $predeps $postdeps ; do\n\t      # can't use Xsed below, because $i might contain '/'\n\t      tmp_deplibs=`$ECHO \" $tmp_deplibs\" | $SED \"s,$i,,\"`\n\t    done\n\t  fi\n\t  case $tmp_deplibs in\n\t  *[!\\\t\\ ]*)\n\t    echo\n\t    if test \"X$deplibs_check_method\" = \"Xnone\"; then\n\t      echo \"*** Warning: inter-library dependencies are not supported in this platform.\"\n\t    else\n\t      echo \"*** Warning: inter-library dependencies are not known to be supported.\"\n\t    fi\n\t    echo \"*** All declared inter-library dependencies are being dropped.\"\n\t    droppeddeps=yes\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tversuffix=$versuffix_save\n\tmajor=$major_save\n\trelease=$release_save\n\tlibname=$libname_save\n\tname=$name_save\n\n\tcase $host in\n\t*-*-rhapsody* | *-*-darwin1.[012])\n\t  # On Rhapsody replace the C library with the System framework\n\t  newdeplibs=`$ECHO \" $newdeplibs\" | $SED 's/ -lc / System.ltframework /'`\n\t  ;;\n\tesac\n\n\tif test \"$droppeddeps\" = yes; then\n\t  if test \"$module\" = yes; then\n\t    echo\n\t    echo \"*** Warning: libtool could not satisfy all declared inter-library\"\n\t    $ECHO \"*** dependencies of module $libname.  Therefore, libtool will create\"\n\t    echo \"*** a static module, that should work as long as the dlopening\"\n\t    echo \"*** application is linked with the -dlopen flag.\"\n\t    if test -z \"$global_symbol_pipe\"; then\n\t      echo\n\t      echo \"*** However, this would only work if libtool was able to extract symbol\"\n\t      echo \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t      echo \"*** not find such a program.  So, this module is probably useless.\"\n\t      echo \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t    fi\n\t    if test \"$build_old_libs\" = no; then\n\t      oldlibs=\"$output_objdir/$libname.$libext\"\n\t      build_libtool_libs=module\n\t      build_old_libs=yes\n\t    else\n\t      build_libtool_libs=no\n\t    fi\n\t  else\n\t    echo \"*** The inter-library dependencies that have been dropped here will be\"\n\t    echo \"*** automatically added whenever a program is linked with this library\"\n\t    echo \"*** or is declared to -dlopen it.\"\n\n\t    if test \"$allow_undefined\" = no; then\n\t      echo\n\t      echo \"*** Since this library must not contain undefined symbols,\"\n\t      echo \"*** because either the platform does not support them or\"\n\t      echo \"*** it was explicitly requested with -no-undefined,\"\n\t      echo \"*** libtool will only create a static version of it.\"\n\t      if test \"$build_old_libs\" = no; then\n\t\toldlibs=\"$output_objdir/$libname.$libext\"\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  fi\n\tfi\n\t# Done checking deplibs!\n\tdeplibs=$newdeplibs\n      fi\n      # Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n      case $host in\n\t*-*-darwin*)\n\t  newdeplibs=`$ECHO \" $newdeplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  new_inherited_linker_flags=`$ECHO \" $new_inherited_linker_flags\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  deplibs=`$ECHO \" $deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  ;;\n      esac\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    func_append new_libs \" -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) func_append new_libs \" $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) func_append new_libs \" $deplib\" ;;\n\tesac\n      done\n      deplibs=\"$new_libs\"\n\n      # All the library-specific variables (install_libdir is set above).\n      library_names=\n      old_library=\n      dlname=\n\n      # Test again, we may have decided not to build it any more\n      if test \"$build_libtool_libs\" = yes; then\n\t# Remove ${wl} instances when linking with ld.\n\t# FIXME: should test the right _cmds variable.\n\tcase $archive_cmds in\n\t  *\\$LD\\ *) wl= ;;\n        esac\n\tif test \"$hardcode_into_libs\" = yes; then\n\t  # Hardcode the library paths\n\t  hardcode_libdirs=\n\t  dep_rpath=\n\t  rpath=\"$finalize_rpath\"\n\t  test \"$opt_mode\" != relink && rpath=\"$compile_rpath$rpath\"\n\t  for libdir in $rpath; do\n\t    if test -n \"$hardcode_libdir_flag_spec\"; then\n\t      if test -n \"$hardcode_libdir_separator\"; then\n\t\tfunc_replace_sysroot \"$libdir\"\n\t\tlibdir=$func_replace_sysroot_result\n\t\tif test -z \"$hardcode_libdirs\"; then\n\t\t  hardcode_libdirs=\"$libdir\"\n\t\telse\n\t\t  # Just accumulate the unique libdirs.\n\t\t  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t\t  *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t    ;;\n\t\t  *)\n\t\t    func_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t      else\n\t\teval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t\tfunc_append dep_rpath \" $flag\"\n\t      fi\n\t    elif test -n \"$runpath_var\"; then\n\t      case \"$perm_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append perm_rpath \" $libdir\" ;;\n\t      esac\n\t    fi\n\t  done\n\t  # Substitute the hardcoded libdirs into the rpath.\n\t  if test -n \"$hardcode_libdir_separator\" &&\n\t     test -n \"$hardcode_libdirs\"; then\n\t    libdir=\"$hardcode_libdirs\"\n\t    eval \"dep_rpath=\\\"$hardcode_libdir_flag_spec\\\"\"\n\t  fi\n\t  if test -n \"$runpath_var\" && test -n \"$perm_rpath\"; then\n\t    # We should set the runpath_var.\n\t    rpath=\n\t    for dir in $perm_rpath; do\n\t      func_append rpath \"$dir:\"\n\t    done\n\t    eval \"$runpath_var='$rpath\\$$runpath_var'; export $runpath_var\"\n\t  fi\n\t  test -n \"$dep_rpath\" && deplibs=\"$dep_rpath $deplibs\"\n\tfi\n\n\tshlibpath=\"$finalize_shlibpath\"\n\ttest \"$opt_mode\" != relink && shlibpath=\"$compile_shlibpath$shlibpath\"\n\tif test -n \"$shlibpath\"; then\n\t  eval \"$shlibpath_var='$shlibpath\\$$shlibpath_var'; export $shlibpath_var\"\n\tfi\n\n\t# Get the real and link names of the library.\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval library_names=\\\"$library_names_spec\\\"\n\tset dummy $library_names\n\tshift\n\trealname=\"$1\"\n\tshift\n\n\tif test -n \"$soname_spec\"; then\n\t  eval soname=\\\"$soname_spec\\\"\n\telse\n\t  soname=\"$realname\"\n\tfi\n\tif test -z \"$dlname\"; then\n\t  dlname=$soname\n\tfi\n\n\tlib=\"$output_objdir/$realname\"\n\tlinknames=\n\tfor link\n\tdo\n\t  func_append linknames \" $link\"\n\tdone\n\n\t# Use standard objects if they are pic\n\ttest -z \"$pic_flag\" && libobjs=`$ECHO \"$libobjs\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\ttest \"X$libobjs\" = \"X \" && libobjs=\n\n\tdelfiles=\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  $opt_dry_run || cp \"$export_symbols\" \"$output_objdir/$libname.uexp\"\n\t  export_symbols=\"$output_objdir/$libname.uexp\"\n\t  func_append delfiles \" $export_symbols\"\n\tfi\n\n\torig_export_symbols=\n\tcase $host_os in\n\tcygwin* | mingw* | cegcc*)\n\t  if test -n \"$export_symbols\" && test -z \"$export_symbols_regex\"; then\n\t    # exporting using user supplied symfile\n\t    if test \"x`$SED 1q $export_symbols`\" != xEXPORTS; then\n\t      # and it's NOT already a .def file. Must figure out\n\t      # which of the given symbols are data symbols and tag\n\t      # them as such. So, trigger use of export_symbols_cmds.\n\t      # export_symbols gets reassigned inside the \"prepare\n\t      # the list of exported symbols\" if statement, so the\n\t      # include_expsyms logic still works.\n\t      orig_export_symbols=\"$export_symbols\"\n\t      export_symbols=\n\t      always_export_symbols=yes\n\t    fi\n\t  fi\n\t  ;;\n\tesac\n\n\t# Prepare the list of exported symbols\n\tif test -z \"$export_symbols\"; then\n\t  if test \"$always_export_symbols\" = yes || test -n \"$export_symbols_regex\"; then\n\t    func_verbose \"generating symbol list for \\`$libname.la'\"\n\t    export_symbols=\"$output_objdir/$libname.exp\"\n\t    $opt_dry_run || $RM $export_symbols\n\t    cmds=$export_symbols_cmds\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd1 in $cmds; do\n\t      IFS=\"$save_ifs\"\n\t      # Take the normal branch if the nm_file_list_spec branch\n\t      # doesn't work or if tool conversion is not needed.\n\t      case $nm_file_list_spec~$to_tool_file_cmd in\n\t\t*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)\n\t\t  try_normal_branch=yes\n\t\t  eval cmd=\\\"$cmd1\\\"\n\t\t  func_len \" $cmd\"\n\t\t  len=$func_len_result\n\t\t  ;;\n\t\t*)\n\t\t  try_normal_branch=no\n\t\t  ;;\n\t      esac\n\t      if test \"$try_normal_branch\" = yes \\\n\t\t && { test \"$len\" -lt \"$max_cmd_len\" \\\n\t\t      || test \"$max_cmd_len\" -le -1; }\n\t      then\n\t\tfunc_show_eval \"$cmd\" 'exit $?'\n\t\tskipped_export=false\n\t      elif test -n \"$nm_file_list_spec\"; then\n\t\tfunc_basename \"$output\"\n\t\toutput_la=$func_basename_result\n\t\tsave_libobjs=$libobjs\n\t\tsave_output=$output\n\t\toutput=${output_objdir}/${output_la}.nm\n\t\tfunc_to_tool_file \"$output\"\n\t\tlibobjs=$nm_file_list_spec$func_to_tool_file_result\n\t\tfunc_append delfiles \" $output\"\n\t\tfunc_verbose \"creating $NM input file list: $output\"\n\t\tfor obj in $save_libobjs; do\n\t\t  func_to_tool_file \"$obj\"\n\t\t  $ECHO \"$func_to_tool_file_result\"\n\t\tdone > \"$output\"\n\t\teval cmd=\\\"$cmd1\\\"\n\t\tfunc_show_eval \"$cmd\" 'exit $?'\n\t\toutput=$save_output\n\t\tlibobjs=$save_libobjs\n\t\tskipped_export=false\n\t      else\n\t\t# The command line is too long to execute in one step.\n\t\tfunc_verbose \"using reloadable object file for export list...\"\n\t\tskipped_export=:\n\t\t# Break out early, otherwise skipped_export may be\n\t\t# set to false by a later but shorter cmd.\n\t\tbreak\n\t      fi\n\t    done\n\t    IFS=\"$save_ifs\"\n\t    if test -n \"$export_symbols_regex\" && test \"X$skipped_export\" != \"X:\"; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  tmp_export_symbols=\"$export_symbols\"\n\t  test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t  $opt_dry_run || eval '$ECHO \"$include_expsyms\" | $SP2NL >> \"$tmp_export_symbols\"'\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" && test -n \"$orig_export_symbols\"; then\n\t  # The given exports_symbols file has to be filtered, so filter it.\n\t  func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t  # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t  # 's' commands which not all seds can handle. GNU sed should be fine\n\t  # though. Also, the filter scales superlinearly with the number of\n\t  # global variables. join(1) would be nice here, but unfortunately\n\t  # isn't a blessed tool.\n\t  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t  func_append delfiles \" $export_symbols $output_objdir/$libname.filter\"\n\t  export_symbols=$output_objdir/$libname.def\n\t  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\tfi\n\n\ttmp_deplibs=\n\tfor test_deplib in $deplibs; do\n\t  case \" $convenience \" in\n\t  *\" $test_deplib \"*) ;;\n\t  *)\n\t    func_append tmp_deplibs \" $test_deplib\"\n\t    ;;\n\t  esac\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n\n\tif test -n \"$convenience\"; then\n\t  if test -n \"$whole_archive_flag_spec\" &&\n\t    test \"$compiler_needs_object\" = yes &&\n\t    test -z \"$libobjs\"; then\n\t    # extract the archives, so we have objects to list.\n\t    # TODO: could optimize this to just extract one archive.\n\t    whole_archive_flag_spec=\n\t  fi\n\t  if test -n \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  else\n\t    gentop=\"$output_objdir/${outputname}x\"\n\t    func_append generated \" $gentop\"\n\n\t    func_extract_archives $gentop $convenience\n\t    func_append libobjs \" $func_extract_archives_result\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\tfi\n\n\tif test \"$thread_safe\" = yes && test -n \"$thread_safe_flag_spec\"; then\n\t  eval flag=\\\"$thread_safe_flag_spec\\\"\n\t  func_append linker_flags \" $flag\"\n\tfi\n\n\t# Make a backup of the uninstalled library when relinking\n\tif test \"$opt_mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?\n\tfi\n\n\t# Do each of the archive commands.\n\tif test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t  if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$module_expsym_cmds\\\"\n\t    cmds=$module_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$module_cmds\\\"\n\t    cmds=$module_cmds\n\t  fi\n\telse\n\t  if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$archive_expsym_cmds\\\"\n\t    cmds=$archive_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$archive_cmds\\\"\n\t    cmds=$archive_cmds\n\t  fi\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" &&\n\t   func_len \" $test_cmds\" &&\n\t   len=$func_len_result &&\n\t   test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  :\n\telse\n\t  # The command line is too long to link in one step, link piecewise\n\t  # or, if using GNU ld and skipped_export is not :, use a linker\n\t  # script.\n\n\t  # Save the value of $output and $libobjs because we want to\n\t  # use them later.  If we have whole_archive_flag_spec, we\n\t  # want to use save_libobjs as it was before\n\t  # whole_archive_flag_spec was expanded, because we can't\n\t  # assume the linker understands whole_archive_flag_spec.\n\t  # This may have to be revisited, in case too many\n\t  # convenience libraries get linked in and end up exceeding\n\t  # the spec.\n\t  if test -z \"$convenience\" || test -z \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t  fi\n\t  save_output=$output\n\t  func_basename \"$output\"\n\t  output_la=$func_basename_result\n\n\t  # Clear the reloadable object creation command queue and\n\t  # initialize k to one.\n\t  test_cmds=\n\t  concat_cmds=\n\t  objlist=\n\t  last_robj=\n\t  k=1\n\n\t  if test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"$with_gnu_ld\" = yes; then\n\t    output=${output_objdir}/${output_la}.lnkscript\n\t    func_verbose \"creating GNU ld script: $output\"\n\t    echo 'INPUT (' > $output\n\t    for obj in $save_libobjs\n\t    do\n\t      func_to_tool_file \"$obj\"\n\t      $ECHO \"$func_to_tool_file_result\" >> $output\n\t    done\n\t    echo ')' >> $output\n\t    func_append delfiles \" $output\"\n\t    func_to_tool_file \"$output\"\n\t    output=$func_to_tool_file_result\n\t  elif test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"X$file_list_spec\" != X; then\n\t    output=${output_objdir}/${output_la}.lnk\n\t    func_verbose \"creating linker input file list: $output\"\n\t    : > $output\n\t    set x $save_libobjs\n\t    shift\n\t    firstobj=\n\t    if test \"$compiler_needs_object\" = yes; then\n\t      firstobj=\"$1 \"\n\t      shift\n\t    fi\n\t    for obj\n\t    do\n\t      func_to_tool_file \"$obj\"\n\t      $ECHO \"$func_to_tool_file_result\" >> $output\n\t    done\n\t    func_append delfiles \" $output\"\n\t    func_to_tool_file \"$output\"\n\t    output=$firstobj\\\"$file_list_spec$func_to_tool_file_result\\\"\n\t  else\n\t    if test -n \"$save_libobjs\"; then\n\t      func_verbose \"creating reloadable object files...\"\n\t      output=$output_objdir/$output_la-${k}.$objext\n\t      eval test_cmds=\\\"$reload_cmds\\\"\n\t      func_len \" $test_cmds\"\n\t      len0=$func_len_result\n\t      len=$len0\n\n\t      # Loop over the list of objects to be linked.\n\t      for obj in $save_libobjs\n\t      do\n\t\tfunc_len \" $obj\"\n\t\tfunc_arith $len + $func_len_result\n\t\tlen=$func_arith_result\n\t\tif test \"X$objlist\" = X ||\n\t\t   test \"$len\" -lt \"$max_cmd_len\"; then\n\t\t  func_append objlist \" $obj\"\n\t\telse\n\t\t  # The command $test_cmds is almost too long, add a\n\t\t  # command to the queue.\n\t\t  if test \"$k\" -eq 1 ; then\n\t\t    # The first file doesn't have a previous command to add.\n\t\t    reload_objs=$objlist\n\t\t    eval concat_cmds=\\\"$reload_cmds\\\"\n\t\t  else\n\t\t    # All subsequent reloadable object files will link in\n\t\t    # the last one created.\n\t\t    reload_objs=\"$objlist $last_robj\"\n\t\t    eval concat_cmds=\\\"\\$concat_cmds~$reload_cmds~\\$RM $last_robj\\\"\n\t\t  fi\n\t\t  last_robj=$output_objdir/$output_la-${k}.$objext\n\t\t  func_arith $k + 1\n\t\t  k=$func_arith_result\n\t\t  output=$output_objdir/$output_la-${k}.$objext\n\t\t  objlist=\" $obj\"\n\t\t  func_len \" $last_robj\"\n\t\t  func_arith $len0 + $func_len_result\n\t\t  len=$func_arith_result\n\t\tfi\n\t      done\n\t      # Handle the remaining objects by creating one last\n\t      # reloadable object file.  All subsequent reloadable object\n\t      # files will link in the last one created.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      reload_objs=\"$objlist $last_robj\"\n\t      eval concat_cmds=\\\"\\${concat_cmds}$reload_cmds\\\"\n\t      if test -n \"$last_robj\"; then\n\t        eval concat_cmds=\\\"\\${concat_cmds}~\\$RM $last_robj\\\"\n\t      fi\n\t      func_append delfiles \" $output\"\n\n\t    else\n\t      output=\n\t    fi\n\n\t    if ${skipped_export-false}; then\n\t      func_verbose \"generating symbol list for \\`$libname.la'\"\n\t      export_symbols=\"$output_objdir/$libname.exp\"\n\t      $opt_dry_run || $RM $export_symbols\n\t      libobjs=$output\n\t      # Append the command to create the export file.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\$concat_cmds$export_symbols_cmds\\\"\n\t      if test -n \"$last_robj\"; then\n\t\teval concat_cmds=\\\"\\$concat_cmds~\\$RM $last_robj\\\"\n\t      fi\n\t    fi\n\n\t    test -n \"$save_libobjs\" &&\n\t      func_verbose \"creating a temporary reloadable object file: $output\"\n\n\t    # Loop through the commands generated above and execute them.\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd in $concat_cmds; do\n\t      IFS=\"$save_ifs\"\n\t      $opt_silent || {\n\t\t  func_quote_for_expand \"$cmd\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t      }\n\t      $opt_dry_run || eval \"$cmd\" || {\n\t\tlt_exit=$?\n\n\t\t# Restore the uninstalled library and exit\n\t\tif test \"$opt_mode\" = relink; then\n\t\t  ( cd \"$output_objdir\" && \\\n\t\t    $RM \"${realname}T\" && \\\n\t\t    $MV \"${realname}U\" \"$realname\" )\n\t\tfi\n\n\t\texit $lt_exit\n\t      }\n\t    done\n\t    IFS=\"$save_ifs\"\n\n\t    if test -n \"$export_symbols_regex\" && ${skipped_export-false}; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\n          if ${skipped_export-false}; then\n\t    if test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t      tmp_export_symbols=\"$export_symbols\"\n\t      test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t      $opt_dry_run || eval '$ECHO \"$include_expsyms\" | $SP2NL >> \"$tmp_export_symbols\"'\n\t    fi\n\n\t    if test -n \"$orig_export_symbols\"; then\n\t      # The given exports_symbols file has to be filtered, so filter it.\n\t      func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t      # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t      # 's' commands which not all seds can handle. GNU sed should be fine\n\t      # though. Also, the filter scales superlinearly with the number of\n\t      # global variables. join(1) would be nice here, but unfortunately\n\t      # isn't a blessed tool.\n\t      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t      func_append delfiles \" $export_symbols $output_objdir/$libname.filter\"\n\t      export_symbols=$output_objdir/$libname.def\n\t      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\t    fi\n\t  fi\n\n\t  libobjs=$output\n\t  # Restore the value of output.\n\t  output=$save_output\n\n\t  if test -n \"$convenience\" && test -n \"$whole_archive_flag_spec\"; then\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\t  # Expand the library linking commands again to reset the\n\t  # value of $libobjs for piecewise linking.\n\n\t  # Do each of the archive commands.\n\t  if test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t    if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t      cmds=$module_expsym_cmds\n\t    else\n\t      cmds=$module_cmds\n\t    fi\n\t  else\n\t    if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t      cmds=$archive_expsym_cmds\n\t    else\n\t      cmds=$archive_cmds\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$delfiles\"; then\n\t  # Append the command to remove temporary files to $cmds.\n\t  eval cmds=\\\"\\$cmds~\\$RM $delfiles\\\"\n\tfi\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  func_append libobjs \" $func_extract_archives_result\"\n\t  test \"X$libobjs\" = \"X \" && libobjs=\n\tfi\n\n\tsave_ifs=\"$IFS\"; IFS='~'\n\tfor cmd in $cmds; do\n\t  IFS=\"$save_ifs\"\n\t  eval cmd=\\\"$cmd\\\"\n\t  $opt_silent || {\n\t    func_quote_for_expand \"$cmd\"\n\t    eval \"func_echo $func_quote_for_expand_result\"\n\t  }\n\t  $opt_dry_run || eval \"$cmd\" || {\n\t    lt_exit=$?\n\n\t    # Restore the uninstalled library and exit\n\t    if test \"$opt_mode\" = relink; then\n\t      ( cd \"$output_objdir\" && \\\n\t        $RM \"${realname}T\" && \\\n\t\t$MV \"${realname}U\" \"$realname\" )\n\t    fi\n\n\t    exit $lt_exit\n\t  }\n\tdone\n\tIFS=\"$save_ifs\"\n\n\t# Restore the uninstalled library and exit\n\tif test \"$opt_mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?\n\n\t  if test -n \"$convenience\"; then\n\t    if test -z \"$whole_archive_flag_spec\"; then\n\t      func_show_eval '${RM}r \"$gentop\"'\n\t    fi\n\t  fi\n\n\t  exit $EXIT_SUCCESS\n\tfi\n\n\t# Create links to the real library.\n\tfor linkname in $linknames; do\n\t  if test \"$realname\" != \"$linkname\"; then\n\t    func_show_eval '(cd \"$output_objdir\" && $RM \"$linkname\" && $LN_S \"$realname\" \"$linkname\")' 'exit $?'\n\t  fi\n\tdone\n\n\t# If -module or -export-dynamic was specified, set the dlname.\n\tif test \"$module\" = yes || test \"$export_dynamic\" = yes; then\n\t  # On all known operating systems, these are identical.\n\t  dlname=\"$soname\"\n\tfi\n      fi\n      ;;\n\n    obj)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for objects\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for objects\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for objects\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for objects\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for objects\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for objects\"\n\n      case $output in\n      *.lo)\n\ttest -n \"$objs$old_deplibs\" && \\\n\t  func_fatal_error \"cannot build library object \\`$output' from non-libtool objects\"\n\n\tlibobj=$output\n\tfunc_lo2o \"$libobj\"\n\tobj=$func_lo2o_result\n\t;;\n      *)\n\tlibobj=\n\tobj=\"$output\"\n\t;;\n      esac\n\n      # Delete the old objects.\n      $opt_dry_run || $RM $obj $libobj\n\n      # Objects from convenience libraries.  This assumes\n      # single-version convenience libraries.  Whenever we create\n      # different ones for PIC/non-PIC, this we'll have to duplicate\n      # the extraction.\n      reload_conv_objs=\n      gentop=\n      # reload_cmds runs $LD directly, so let us get rid of\n      # -Wl from whole_archive_flag_spec and hope we can get by with\n      # turning comma into space..\n      wl=\n\n      if test -n \"$convenience\"; then\n\tif test -n \"$whole_archive_flag_spec\"; then\n\t  eval tmp_whole_archive_flags=\\\"$whole_archive_flag_spec\\\"\n\t  reload_conv_objs=$reload_objs\\ `$ECHO \"$tmp_whole_archive_flags\" | $SED 's|,| |g'`\n\telse\n\t  gentop=\"$output_objdir/${obj}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $convenience\n\t  reload_conv_objs=\"$reload_objs $func_extract_archives_result\"\n\tfi\n      fi\n\n      # If we're not building shared, we need to use non_pic_objs\n      test \"$build_libtool_libs\" != yes && libobjs=\"$non_pic_objects\"\n\n      # Create the old-style object.\n      reload_objs=\"$objs$old_deplibs \"`$ECHO \"$libobjs\" | $SP2NL | $SED \"/\\.${libext}$/d; /\\.lib$/d; $lo2o\" | $NL2SP`\" $reload_conv_objs\" ### testsuite: skip nested quoting test\n\n      output=\"$obj\"\n      func_execute_cmds \"$reload_cmds\" 'exit $?'\n\n      # Exit if we aren't doing a library object file.\n      if test -z \"$libobj\"; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$build_libtool_libs\" != yes; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\t# Create an invalid libtool object if no PIC, so that we don't\n\t# accidentally link it into a program.\n\t# $show \"echo timestamp > $libobj\"\n\t# $opt_dry_run || eval \"echo timestamp > $libobj\" || exit $?\n\texit $EXIT_SUCCESS\n      fi\n\n      if test -n \"$pic_flag\" || test \"$pic_mode\" != default; then\n\t# Only do commands if we really have different PIC objects.\n\treload_objs=\"$libobjs $reload_conv_objs\"\n\toutput=\"$libobj\"\n\tfunc_execute_cmds \"$reload_cmds\" 'exit $?'\n      fi\n\n      if test -n \"$gentop\"; then\n\tfunc_show_eval '${RM}r \"$gentop\"'\n      fi\n\n      exit $EXIT_SUCCESS\n      ;;\n\n    prog)\n      case $host in\n\t*cygwin*) func_stripname '' '.exe' \"$output\"\n\t          output=$func_stripname_result.exe;;\n      esac\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for programs\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for programs\"\n\n      test \"$preload\" = yes \\\n        && test \"$dlopen_support\" = unknown \\\n\t&& test \"$dlopen_self\" = unknown \\\n\t&& test \"$dlopen_self_static\" = unknown && \\\n\t  func_warning \"\\`LT_INIT([dlopen])' not used. Assuming no dlopen support.\"\n\n      case $host in\n      *-*-rhapsody* | *-*-darwin1.[012])\n\t# On Rhapsody replace the C library is the System framework\n\tcompile_deplibs=`$ECHO \" $compile_deplibs\" | $SED 's/ -lc / System.ltframework /'`\n\tfinalize_deplibs=`$ECHO \" $finalize_deplibs\" | $SED 's/ -lc / System.ltframework /'`\n\t;;\n      esac\n\n      case $host in\n      *-*-darwin*)\n\t# Don't allow lazy linking, it breaks C++ global constructors\n\t# But is supposedly fixed on 10.4 or later (yay!).\n\tif test \"$tagname\" = CXX ; then\n\t  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in\n\t    10.[0123])\n\t      func_append compile_command \" ${wl}-bind_at_load\"\n\t      func_append finalize_command \" ${wl}-bind_at_load\"\n\t    ;;\n\t  esac\n\tfi\n\t# Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n\tcompile_deplibs=`$ECHO \" $compile_deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfinalize_deplibs=`$ECHO \" $finalize_deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t;;\n      esac\n\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $compile_deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    func_append new_libs \" -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $compile_deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) func_append new_libs \" $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) func_append new_libs \" $deplib\" ;;\n\tesac\n      done\n      compile_deplibs=\"$new_libs\"\n\n\n      func_append compile_command \" $compile_deplibs\"\n      func_append finalize_command \" $finalize_deplibs\"\n\n      if test -n \"$rpath$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\tfor libdir in $rpath $xrpath; do\n\t  # This is the magic to use -rpath.\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_rpath \" $libdir\" ;;\n\t  esac\n\tdone\n      fi\n\n      # Now hardcode the library paths\n      rpath=\n      hardcode_libdirs=\n      for libdir in $compile_rpath $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\tfunc_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    func_append rpath \" $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append perm_rpath \" $libdir\" ;;\n\t  esac\n\tfi\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`${ECHO} \"$libdir\" | ${SED} -e 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$libdir:\"*) ;;\n\t  ::) dllsearchpath=$libdir;;\n\t  *) func_append dllsearchpath \":$libdir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) func_append dllsearchpath \":$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      compile_rpath=\"$rpath\"\n\n      rpath=\n      hardcode_libdirs=\n      for libdir in $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\tfunc_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    func_append rpath \" $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$finalize_perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_perm_rpath \" $libdir\" ;;\n\t  esac\n\tfi\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      finalize_rpath=\"$rpath\"\n\n      if test -n \"$libobjs\" && test \"$build_old_libs\" = yes; then\n\t# Transform all the library objects into standard objects.\n\tcompile_command=`$ECHO \"$compile_command\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\tfinalize_command=`$ECHO \"$finalize_command\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n      fi\n\n      func_generate_dlsyms \"$outputname\" \"@PROGRAM@\" \"no\"\n\n      # template prelinking step\n      if test -n \"$prelink_cmds\"; then\n\tfunc_execute_cmds \"$prelink_cmds\" 'exit $?'\n      fi\n\n      wrappers_required=yes\n      case $host in\n      *cegcc* | *mingw32ce*)\n        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.\n        wrappers_required=no\n        ;;\n      *cygwin* | *mingw* )\n        if test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      *)\n        if test \"$need_relink\" = no || test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      esac\n      if test \"$wrappers_required\" = no; then\n\t# Replace the output file specification.\n\tcompile_command=`$ECHO \"$compile_command\" | $SED 's%@OUTPUT@%'\"$output\"'%g'`\n\tlink_command=\"$compile_command$compile_rpath\"\n\n\t# We have no uninstalled library dependencies, so finalize right now.\n\texit_status=0\n\tfunc_show_eval \"$link_command\" 'exit_status=$?'\n\n\tif test -n \"$postlink_cmds\"; then\n\t  func_to_tool_file \"$output\"\n\t  postlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\t  func_execute_cmds \"$postlink_cmds\" 'exit $?'\n\tfi\n\n\t# Delete the generated files.\n\tif test -f \"$output_objdir/${outputname}S.${objext}\"; then\n\t  func_show_eval '$RM \"$output_objdir/${outputname}S.${objext}\"'\n\tfi\n\n\texit $exit_status\n      fi\n\n      if test -n \"$compile_shlibpath$finalize_shlibpath\"; then\n\tcompile_command=\"$shlibpath_var=\\\"$compile_shlibpath$finalize_shlibpath\\$$shlibpath_var\\\" $compile_command\"\n      fi\n      if test -n \"$finalize_shlibpath\"; then\n\tfinalize_command=\"$shlibpath_var=\\\"$finalize_shlibpath\\$$shlibpath_var\\\" $finalize_command\"\n      fi\n\n      compile_var=\n      finalize_var=\n      if test -n \"$runpath_var\"; then\n\tif test -n \"$perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $perm_rpath; do\n\t    func_append rpath \"$dir:\"\n\t  done\n\t  compile_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n\tif test -n \"$finalize_perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $finalize_perm_rpath; do\n\t    func_append rpath \"$dir:\"\n\t  done\n\t  finalize_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n      fi\n\n      if test \"$no_install\" = yes; then\n\t# We don't need to create a wrapper script.\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\t# Replace the output file specification.\n\tlink_command=`$ECHO \"$link_command\" | $SED 's%@OUTPUT@%'\"$output\"'%g'`\n\t# Delete the old output file.\n\t$opt_dry_run || $RM $output\n\t# Link the executable and exit\n\tfunc_show_eval \"$link_command\" 'exit $?'\n\n\tif test -n \"$postlink_cmds\"; then\n\t  func_to_tool_file \"$output\"\n\t  postlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\t  func_execute_cmds \"$postlink_cmds\" 'exit $?'\n\tfi\n\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$hardcode_action\" = relink; then\n\t# Fast installation is not supported\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\trelink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\n\tfunc_warning \"this platform does not like uninstalled shared libraries\"\n\tfunc_warning \"\\`$output' will be relinked during installation\"\n      else\n\tif test \"$fast_install\" != no; then\n\t  link_command=\"$finalize_var$compile_command$finalize_rpath\"\n\t  if test \"$fast_install\" = yes; then\n\t    relink_command=`$ECHO \"$compile_var$compile_command$compile_rpath\" | $SED 's%@OUTPUT@%\\$progdir/\\$file%g'`\n\t  else\n\t    # fast_install is set to needless\n\t    relink_command=\n\t  fi\n\telse\n\t  link_command=\"$compile_var$compile_command$compile_rpath\"\n\t  relink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\tfi\n      fi\n\n      # Replace the output file specification.\n      link_command=`$ECHO \"$link_command\" | $SED 's%@OUTPUT@%'\"$output_objdir/$outputname\"'%g'`\n\n      # Delete the old output files.\n      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname\n\n      func_show_eval \"$link_command\" 'exit $?'\n\n      if test -n \"$postlink_cmds\"; then\n\tfunc_to_tool_file \"$output_objdir/$outputname\"\n\tpostlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output_objdir/$outputname\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\tfunc_execute_cmds \"$postlink_cmds\" 'exit $?'\n      fi\n\n      # Now create the wrapper script.\n      func_verbose \"creating $output\"\n\n      # Quote the relink command for shipping.\n      if test -n \"$relink_command\"; then\n\t# Preserve any variables that may affect compiler behavior\n\tfor var in $variables_saved_for_relink; do\n\t  if eval test -z \\\"\\${$var+set}\\\"; then\n\t    relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\t  elif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t    relink_command=\"$var=; export $var; $relink_command\"\n\t  else\n\t    func_quote_for_eval \"$var_value\"\n\t    relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\t  fi\n\tdone\n\trelink_command=\"(cd `pwd`; $relink_command)\"\n\trelink_command=`$ECHO \"$relink_command\" | $SED \"$sed_quote_subst\"`\n      fi\n\n      # Only actually do things if not in dry run mode.\n      $opt_dry_run || {\n\t# win32 will think the script is a binary if it has\n\t# a .exe suffix, so we strip it off here.\n\tcase $output in\n\t  *.exe) func_stripname '' '.exe' \"$output\"\n\t         output=$func_stripname_result ;;\n\tesac\n\t# test for cygwin because mv fails w/o .exe extensions\n\tcase $host in\n\t  *cygwin*)\n\t    exeext=.exe\n\t    func_stripname '' '.exe' \"$outputname\"\n\t    outputname=$func_stripname_result ;;\n\t  *) exeext= ;;\n\tesac\n\tcase $host in\n\t  *cygwin* | *mingw* )\n\t    func_dirname_and_basename \"$output\" \"\" \".\"\n\t    output_name=$func_basename_result\n\t    output_path=$func_dirname_result\n\t    cwrappersource=\"$output_path/$objdir/lt-$output_name.c\"\n\t    cwrapper=\"$output_path/$output_name.exe\"\n\t    $RM $cwrappersource $cwrapper\n\t    trap \"$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_cwrapperexe_src > $cwrappersource\n\n\t    # The wrapper executable is built using the $host compiler,\n\t    # because it contains $host paths and files. If cross-\n\t    # compiling, it, like the target executable, must be\n\t    # executed on the $host or under an emulation environment.\n\t    $opt_dry_run || {\n\t      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource\n\t      $STRIP $cwrapper\n\t    }\n\n\t    # Now, create the wrapper script for func_source use:\n\t    func_ltwrapper_scriptname $cwrapper\n\t    $RM $func_ltwrapper_scriptname_result\n\t    trap \"$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE\" 1 2 15\n\t    $opt_dry_run || {\n\t      # note: this script will not be executed, so do not chmod.\n\t      if test \"x$build\" = \"x$host\" ; then\n\t\t$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result\n\t      else\n\t\tfunc_emit_wrapper no > $func_ltwrapper_scriptname_result\n\t      fi\n\t    }\n\t  ;;\n\t  * )\n\t    $RM $output\n\t    trap \"$RM $output; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_wrapper no > $output\n\t    chmod +x $output\n\t  ;;\n\tesac\n      }\n      exit $EXIT_SUCCESS\n      ;;\n    esac\n\n    # See if we need to build an old-fashioned archive.\n    for oldlib in $oldlibs; do\n\n      if test \"$build_libtool_libs\" = convenience; then\n\toldobjs=\"$libobjs_save $symfileobj\"\n\taddlibs=\"$convenience\"\n\tbuild_libtool_libs=no\n      else\n\tif test \"$build_libtool_libs\" = module; then\n\t  oldobjs=\"$libobjs_save\"\n\t  build_libtool_libs=no\n\telse\n\t  oldobjs=\"$old_deplibs $non_pic_objects\"\n\t  if test \"$preload\" = yes && test -f \"$symfileobj\"; then\n\t    func_append oldobjs \" $symfileobj\"\n\t  fi\n\tfi\n\taddlibs=\"$old_convenience\"\n      fi\n\n      if test -n \"$addlibs\"; then\n\tgentop=\"$output_objdir/${outputname}x\"\n\tfunc_append generated \" $gentop\"\n\n\tfunc_extract_archives $gentop $addlibs\n\tfunc_append oldobjs \" $func_extract_archives_result\"\n      fi\n\n      # Do each command in the archive commands.\n      if test -n \"$old_archive_from_new_cmds\" && test \"$build_libtool_libs\" = yes; then\n\tcmds=$old_archive_from_new_cmds\n      else\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  func_append oldobjs \" $func_extract_archives_result\"\n\tfi\n\n\t# POSIX demands no paths to be encoded in archives.  We have\n\t# to avoid creating archives with duplicate basenames if we\n\t# might have to extract them afterwards, e.g., when creating a\n\t# static archive out of a convenience library, or when linking\n\t# the entirety of a libtool archive into another (currently\n\t# not supported by libtool).\n\tif (for obj in $oldobjs\n\t    do\n\t      func_basename \"$obj\"\n\t      $ECHO \"$func_basename_result\"\n\t    done | sort | sort -uc >/dev/null 2>&1); then\n\t  :\n\telse\n\t  echo \"copying selected object files to avoid basename conflicts...\"\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\t  func_mkdir_p \"$gentop\"\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  counter=1\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_basename \"$obj\"\n\t    objbase=\"$func_basename_result\"\n\t    case \" $oldobjs \" in\n\t    \" \") oldobjs=$obj ;;\n\t    *[\\ /]\"$objbase \"*)\n\t      while :; do\n\t\t# Make sure we don't pick an alternate name that also\n\t\t# overlaps.\n\t\tnewobj=lt$counter-$objbase\n\t\tfunc_arith $counter + 1\n\t\tcounter=$func_arith_result\n\t\tcase \" $oldobjs \" in\n\t\t*[\\ /]\"$newobj \"*) ;;\n\t\t*) if test ! -f \"$gentop/$newobj\"; then break; fi ;;\n\t\tesac\n\t      done\n\t      func_show_eval \"ln $obj $gentop/$newobj || cp $obj $gentop/$newobj\"\n\t      func_append oldobjs \" $gentop/$newobj\"\n\t      ;;\n\t    *) func_append oldobjs \" $obj\" ;;\n\t    esac\n\t  done\n\tfi\n\tfunc_to_tool_file \"$oldlib\" func_convert_file_msys_to_w32\n\ttool_oldlib=$func_to_tool_file_result\n\teval cmds=\\\"$old_archive_cmds\\\"\n\n\tfunc_len \" $cmds\"\n\tlen=$func_len_result\n\tif test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  cmds=$old_archive_cmds\n\telif test -n \"$archiver_list_spec\"; then\n\t  func_verbose \"using command file archive linking...\"\n\t  for obj in $oldobjs\n\t  do\n\t    func_to_tool_file \"$obj\"\n\t    $ECHO \"$func_to_tool_file_result\"\n\t  done > $output_objdir/$libname.libcmd\n\t  func_to_tool_file \"$output_objdir/$libname.libcmd\"\n\t  oldobjs=\" $archiver_list_spec$func_to_tool_file_result\"\n\t  cmds=$old_archive_cmds\n\telse\n\t  # the command line is too long to link in one step, link in parts\n\t  func_verbose \"using piecewise archive linking...\"\n\t  save_RANLIB=$RANLIB\n\t  RANLIB=:\n\t  objlist=\n\t  concat_cmds=\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  # Is there a better way of finding the last object in the list?\n\t  for obj in $save_oldobjs\n\t  do\n\t    last_oldobj=$obj\n\t  done\n\t  eval test_cmds=\\\"$old_archive_cmds\\\"\n\t  func_len \" $test_cmds\"\n\t  len0=$func_len_result\n\t  len=$len0\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_len \" $obj\"\n\t    func_arith $len + $func_len_result\n\t    len=$func_arith_result\n\t    func_append objlist \" $obj\"\n\t    if test \"$len\" -lt \"$max_cmd_len\"; then\n\t      :\n\t    else\n\t      # the above command should be used before it gets too long\n\t      oldobjs=$objlist\n\t      if test \"$obj\" = \"$last_oldobj\" ; then\n\t\tRANLIB=$save_RANLIB\n\t      fi\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\${concat_cmds}$old_archive_cmds\\\"\n\t      objlist=\n\t      len=$len0\n\t    fi\n\t  done\n\t  RANLIB=$save_RANLIB\n\t  oldobjs=$objlist\n\t  if test \"X$oldobjs\" = \"X\" ; then\n\t    eval cmds=\\\"\\$concat_cmds\\\"\n\t  else\n\t    eval cmds=\\\"\\$concat_cmds~\\$old_archive_cmds\\\"\n\t  fi\n\tfi\n      fi\n      func_execute_cmds \"$cmds\" 'exit $?'\n    done\n\n    test -n \"$generated\" && \\\n      func_show_eval \"${RM}r$generated\"\n\n    # Now create the libtool archive.\n    case $output in\n    *.la)\n      old_library=\n      test \"$build_old_libs\" = yes && old_library=\"$libname.$libext\"\n      func_verbose \"creating $output\"\n\n      # Preserve any variables that may affect compiler behavior\n      for var in $variables_saved_for_relink; do\n\tif eval test -z \\\"\\${$var+set}\\\"; then\n\t  relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\telif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t  relink_command=\"$var=; export $var; $relink_command\"\n\telse\n\t  func_quote_for_eval \"$var_value\"\n\t  relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\tfi\n      done\n      # Quote the link command for shipping.\n      relink_command=\"(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)\"\n      relink_command=`$ECHO \"$relink_command\" | $SED \"$sed_quote_subst\"`\n      if test \"$hardcode_automatic\" = yes ; then\n\trelink_command=\n      fi\n\n      # Only create the output if not a dry run.\n      $opt_dry_run || {\n\tfor installed in no yes; do\n\t  if test \"$installed\" = yes; then\n\t    if test -z \"$install_libdir\"; then\n\t      break\n\t    fi\n\t    output=\"$output_objdir/$outputname\"i\n\t    # Replace all uninstalled libtool libraries with the installed ones\n\t    newdependency_libs=\n\t    for deplib in $dependency_libs; do\n\t      case $deplib in\n\t      *.la)\n\t\tfunc_basename \"$deplib\"\n\t\tname=\"$func_basename_result\"\n\t\tfunc_resolve_sysroot \"$deplib\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $func_resolve_sysroot_result`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\tfunc_append newdependency_libs \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      -L*)\n\t\tfunc_stripname -L '' \"$deplib\"\n\t\tfunc_replace_sysroot \"$func_stripname_result\"\n\t\tfunc_append newdependency_libs \" -L$func_replace_sysroot_result\"\n\t\t;;\n\t      -R*)\n\t\tfunc_stripname -R '' \"$deplib\"\n\t\tfunc_replace_sysroot \"$func_stripname_result\"\n\t\tfunc_append newdependency_libs \" -R$func_replace_sysroot_result\"\n\t\t;;\n\t      *) func_append newdependency_libs \" $deplib\" ;;\n\t      esac\n\t    done\n\t    dependency_libs=\"$newdependency_libs\"\n\t    newdlfiles=\n\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t      *.la)\n\t        func_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tfunc_append newdlfiles \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      *) func_append newdlfiles \" $lib\" ;;\n\t      esac\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t      *.la)\n\t\t# Only pass preopened files to the pseudo-archive (for\n\t\t# eventual linking with the app. that links it) if we\n\t\t# didn't already link the preopened objects directly into\n\t\t# the library:\n\t\tfunc_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tfunc_append newdlprefiles \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      esac\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  else\n\t    newdlfiles=\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      func_append newdlfiles \" $abs\"\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      func_append newdlprefiles \" $abs\"\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  fi\n\t  $RM $output\n\t  # place dlname in correct position for cygwin\n\t  # In fact, it would be nice if we could use this code for all target\n\t  # systems that can't hard-code library paths into their executables\n\t  # and that have no shared library path variable independent of PATH,\n\t  # but it turns out we can't easily determine that from inspecting\n\t  # libtool variables, so we have to hard-code the OSs to which it\n\t  # applies here; at the moment, that means platforms that use the PE\n\t  # object format with DLL files.  See the long comment at the top of\n\t  # tests/bindir.at for full details.\n\t  tdlname=$dlname\n\t  case $host,$output,$installed,$module,$dlname in\n\t    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)\n\t      # If a -bindir argument was supplied, place the dll there.\n\t      if test \"x$bindir\" != x ;\n\t      then\n\t\tfunc_relative_path \"$install_libdir\" \"$bindir\"\n\t\ttdlname=$func_relative_path_result$dlname\n\t      else\n\t\t# Otherwise fall back on heuristic.\n\t\ttdlname=../bin/$dlname\n\t      fi\n\t      ;;\n\t  esac\n\t  $ECHO > $output \"\\\n# $outputname - a libtool library file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# The name that we can dlopen(3).\ndlname='$tdlname'\n\n# Names of this library.\nlibrary_names='$library_names'\n\n# The name of the static archive.\nold_library='$old_library'\n\n# Linker flags that can not go in dependency_libs.\ninherited_linker_flags='$new_inherited_linker_flags'\n\n# Libraries that this one depends upon.\ndependency_libs='$dependency_libs'\n\n# Names of additional weak libraries provided by this library\nweak_library_names='$weak_libs'\n\n# Version information for $libname.\ncurrent=$current\nage=$age\nrevision=$revision\n\n# Is this an already installed library?\ninstalled=$installed\n\n# Should we warn about portability when linking against -modules?\nshouldnotlink=$module\n\n# Files to dlopen/dlpreopen\ndlopen='$dlfiles'\ndlpreopen='$dlprefiles'\n\n# Directory that this library needs to be installed in:\nlibdir='$install_libdir'\"\n\t  if test \"$installed\" = no && test \"$need_relink\" = yes; then\n\t    $ECHO >> $output \"\\\nrelink_command=\\\"$relink_command\\\"\"\n\t  fi\n\tdone\n      }\n\n      # Do a symbolic link so that the libtool archive can be found in\n      # LD_LIBRARY_PATH before the program is installed.\n      func_show_eval '( cd \"$output_objdir\" && $RM \"$outputname\" && $LN_S \"../$outputname\" \"$outputname\" )' 'exit $?'\n      ;;\n    esac\n    exit $EXIT_SUCCESS\n}\n\n{ test \"$opt_mode\" = link || test \"$opt_mode\" = relink; } &&\n    func_mode_link ${1+\"$@\"}\n\n\n# func_mode_uninstall arg...\nfunc_mode_uninstall ()\n{\n    $opt_debug\n    RM=\"$nonopt\"\n    files=\n    rmforce=\n    exit_status=0\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    for arg\n    do\n      case $arg in\n      -f) func_append RM \" $arg\"; rmforce=yes ;;\n      -*) func_append RM \" $arg\" ;;\n      *) func_append files \" $arg\" ;;\n      esac\n    done\n\n    test -z \"$RM\" && \\\n      func_fatal_help \"you must specify an RM program\"\n\n    rmdirs=\n\n    for file in $files; do\n      func_dirname \"$file\" \"\" \".\"\n      dir=\"$func_dirname_result\"\n      if test \"X$dir\" = X.; then\n\todir=\"$objdir\"\n      else\n\todir=\"$dir/$objdir\"\n      fi\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n      test \"$opt_mode\" = uninstall && odir=\"$dir\"\n\n      # Remember odir for removal later, being careful to avoid duplicates\n      if test \"$opt_mode\" = clean; then\n\tcase \" $rmdirs \" in\n\t  *\" $odir \"*) ;;\n\t  *) func_append rmdirs \" $odir\" ;;\n\tesac\n      fi\n\n      # Don't error if the file doesn't exist and rm -f was used.\n      if { test -L \"$file\"; } >/dev/null 2>&1 ||\n\t { test -h \"$file\"; } >/dev/null 2>&1 ||\n\t test -f \"$file\"; then\n\t:\n      elif test -d \"$file\"; then\n\texit_status=1\n\tcontinue\n      elif test \"$rmforce\" = yes; then\n\tcontinue\n      fi\n\n      rmfiles=\"$file\"\n\n      case $name in\n      *.la)\n\t# Possibly a libtool archive, so verify it.\n\tif func_lalib_p \"$file\"; then\n\t  func_source $dir/$name\n\n\t  # Delete the libtool libraries and symlinks.\n\t  for n in $library_names; do\n\t    func_append rmfiles \" $odir/$n\"\n\t  done\n\t  test -n \"$old_library\" && func_append rmfiles \" $odir/$old_library\"\n\n\t  case \"$opt_mode\" in\n\t  clean)\n\t    case \" $library_names \" in\n\t    *\" $dlname \"*) ;;\n\t    *) test -n \"$dlname\" && func_append rmfiles \" $odir/$dlname\" ;;\n\t    esac\n\t    test -n \"$libdir\" && func_append rmfiles \" $odir/$name $odir/${name}i\"\n\t    ;;\n\t  uninstall)\n\t    if test -n \"$library_names\"; then\n\t      # Do each command in the postuninstall commands.\n\t      func_execute_cmds \"$postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\n\t    if test -n \"$old_library\"; then\n\t      # Do each command in the old_postuninstall commands.\n\t      func_execute_cmds \"$old_postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\t    # FIXME: should reinstall the best remaining shared library.\n\t    ;;\n\t  esac\n\tfi\n\t;;\n\n      *.lo)\n\t# Possibly a libtool object, so verify it.\n\tif func_lalib_p \"$file\"; then\n\n\t  # Read the .lo file\n\t  func_source $dir/$name\n\n\t  # Add PIC object to the list of files to remove.\n\t  if test -n \"$pic_object\" &&\n\t     test \"$pic_object\" != none; then\n\t    func_append rmfiles \" $dir/$pic_object\"\n\t  fi\n\n\t  # Add non-PIC object to the list of files to remove.\n\t  if test -n \"$non_pic_object\" &&\n\t     test \"$non_pic_object\" != none; then\n\t    func_append rmfiles \" $dir/$non_pic_object\"\n\t  fi\n\tfi\n\t;;\n\n      *)\n\tif test \"$opt_mode\" = clean ; then\n\t  noexename=$name\n\t  case $file in\n\t  *.exe)\n\t    func_stripname '' '.exe' \"$file\"\n\t    file=$func_stripname_result\n\t    func_stripname '' '.exe' \"$name\"\n\t    noexename=$func_stripname_result\n\t    # $file with .exe has already been added to rmfiles,\n\t    # add $file without .exe\n\t    func_append rmfiles \" $file\"\n\t    ;;\n\t  esac\n\t  # Do a test to see if this is a libtool program.\n\t  if func_ltwrapper_p \"$file\"; then\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      relink_command=\n\t      func_source $func_ltwrapper_scriptname_result\n\t      func_append rmfiles \" $func_ltwrapper_scriptname_result\"\n\t    else\n\t      relink_command=\n\t      func_source $dir/$noexename\n\t    fi\n\n\t    # note $name still contains .exe if it was in $file originally\n\t    # as does the version of $file that was added into $rmfiles\n\t    func_append rmfiles \" $odir/$name $odir/${name}S.${objext}\"\n\t    if test \"$fast_install\" = yes && test -n \"$relink_command\"; then\n\t      func_append rmfiles \" $odir/lt-$name\"\n\t    fi\n\t    if test \"X$noexename\" != \"X$name\" ; then\n\t      func_append rmfiles \" $odir/lt-${noexename}.c\"\n\t    fi\n\t  fi\n\tfi\n\t;;\n      esac\n      func_show_eval \"$RM $rmfiles\" 'exit_status=1'\n    done\n\n    # Try to remove the ${objdir}s in the directories where we deleted files\n    for dir in $rmdirs; do\n      if test -d \"$dir\"; then\n\tfunc_show_eval \"rmdir $dir >/dev/null 2>&1\"\n      fi\n    done\n\n    exit $exit_status\n}\n\n{ test \"$opt_mode\" = uninstall || test \"$opt_mode\" = clean; } &&\n    func_mode_uninstall ${1+\"$@\"}\n\ntest -z \"$opt_mode\" && {\n  help=\"$generic_help\"\n  func_fatal_help \"you must specify a MODE\"\n}\n\ntest -z \"$exec_cmd\" && \\\n  func_fatal_help \"invalid operation mode \\`$opt_mode'\"\n\nif test -n \"$exec_cmd\"; then\n  eval exec \"$exec_cmd\"\n  exit $EXIT_FAILURE\nfi\n\nexit $exit_status\n\n\n# The TAGs below are defined such that we never get into a situation\n# in which we disable both kinds of libraries.  Given conflicting\n# choices, we go for a static library, that is the most portable,\n# since we can't tell whether shared libraries were disabled because\n# the user asked for that or because the platform doesn't support\n# them.  This is particularly important on AIX, because we don't\n# support having both static and shared libraries enabled at the same\n# time on that platform, so we default to a shared-only configuration.\n# If a disable-shared tag is given, we'll fallback to a static-only\n# configuration.  But we'll never go from static-only to shared-only.\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-shared\nbuild_libtool_libs=no\nbuild_old_libs=yes\n# ### END LIBTOOL TAG CONFIG: disable-shared\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-static\nbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`\n# ### END LIBTOOL TAG CONFIG: disable-static\n\n# Local Variables:\n# mode:shell-script\n# sh-indentation:2\n# End:\n# vi:sw=2\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/auto/missing",
    "content": "#! /bin/sh\n# Common wrapper for a few potentially missing GNU programs.\n\nscriptversion=2013-10-28.13; # UTC\n\n# Copyright (C) 1996-2013 Free Software Foundation, Inc.\n# Originally written 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, see <http://www.gnu.org/licenses/>.\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\ncase $1 in\n\n  --is-lightweight)\n    # Used by our autoconf macros to check whether the available missing\n    # script is modern enough.\n    exit 0\n    ;;\n\n  --run)\n    # Back-compat with the calling convention used by older automake.\n    shift\n    ;;\n\n  -h|--h|--he|--hel|--help)\n    echo \"\\\n$0 [OPTION]... PROGRAM [ARGUMENT]...\n\nRun 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due\nto PROGRAM being missing or too old.\n\nOptions:\n  -h, --help      display this help and exit\n  -v, --version   output version information and exit\n\nSupported PROGRAM values:\n  aclocal   autoconf  autoheader   autom4te  automake  makeinfo\n  bison     yacc      flex         lex       help2man\n\nVersion suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and\n'g' are ignored when checking the name.\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# Run the given program, remember its exit status.\n\"$@\"; st=$?\n\n# If it succeeded, we are done.\ntest $st -eq 0 && exit 0\n\n# Also exit now if we it failed (or wasn't found), and '--version' was\n# passed; such an option is passed most likely to detect whether the\n# program is present and works.\ncase $2 in --version|--help) exit $st;; esac\n\n# Exit code 63 means version mismatch.  This often happens when the user\n# tries to use an ancient version of a tool on a file that requires a\n# minimum version.\nif test $st -eq 63; then\n  msg=\"probably too old\"\nelif test $st -eq 127; then\n  # Program was missing.\n  msg=\"missing on your system\"\nelse\n  # Program was found and executed, but failed.  Give up.\n  exit $st\nfi\n\nperl_URL=http://www.perl.org/\nflex_URL=http://flex.sourceforge.net/\ngnu_software_URL=http://www.gnu.org/software\n\nprogram_details ()\n{\n  case $1 in\n    aclocal|automake)\n      echo \"The '$1' program is part of the GNU Automake package:\"\n      echo \"<$gnu_software_URL/automake>\"\n      echo \"It also requires GNU Autoconf, GNU m4 and Perl in order to run:\"\n      echo \"<$gnu_software_URL/autoconf>\"\n      echo \"<$gnu_software_URL/m4/>\"\n      echo \"<$perl_URL>\"\n      ;;\n    autoconf|autom4te|autoheader)\n      echo \"The '$1' program is part of the GNU Autoconf package:\"\n      echo \"<$gnu_software_URL/autoconf/>\"\n      echo \"It also requires GNU m4 and Perl in order to run:\"\n      echo \"<$gnu_software_URL/m4/>\"\n      echo \"<$perl_URL>\"\n      ;;\n  esac\n}\n\ngive_advice ()\n{\n  # Normalize program name to check for.\n  normalized_program=`echo \"$1\" | sed '\n    s/^gnu-//; t\n    s/^gnu//; t\n    s/^g//; t'`\n\n  printf '%s\\n' \"'$1' is $msg.\"\n\n  configure_deps=\"'configure.ac' or m4 files included by 'configure.ac'\"\n  case $normalized_program in\n    autoconf*)\n      echo \"You should only need it if you modified 'configure.ac',\"\n      echo \"or m4 files included by it.\"\n      program_details 'autoconf'\n      ;;\n    autoheader*)\n      echo \"You should only need it if you modified 'acconfig.h' or\"\n      echo \"$configure_deps.\"\n      program_details 'autoheader'\n      ;;\n    automake*)\n      echo \"You should only need it if you modified 'Makefile.am' or\"\n      echo \"$configure_deps.\"\n      program_details 'automake'\n      ;;\n    aclocal*)\n      echo \"You should only need it if you modified 'acinclude.m4' or\"\n      echo \"$configure_deps.\"\n      program_details 'aclocal'\n      ;;\n   autom4te*)\n      echo \"You might have modified some maintainer files that require\"\n      echo \"the 'autom4te' program to be rebuilt.\"\n      program_details 'autom4te'\n      ;;\n    bison*|yacc*)\n      echo \"You should only need it if you modified a '.y' file.\"\n      echo \"You may want to install the GNU Bison package:\"\n      echo \"<$gnu_software_URL/bison/>\"\n      ;;\n    lex*|flex*)\n      echo \"You should only need it if you modified a '.l' file.\"\n      echo \"You may want to install the Fast Lexical Analyzer package:\"\n      echo \"<$flex_URL>\"\n      ;;\n    help2man*)\n      echo \"You should only need it if you modified a dependency\" \\\n           \"of a man page.\"\n      echo \"You may want to install the GNU Help2man package:\"\n      echo \"<$gnu_software_URL/help2man/>\"\n    ;;\n    makeinfo*)\n      echo \"You should only need it if you modified a '.texi' file, or\"\n      echo \"any other file indirectly affecting the aspect of the manual.\"\n      echo \"You might want to install the Texinfo package:\"\n      echo \"<$gnu_software_URL/texinfo/>\"\n      echo \"The spurious makeinfo call might also be the consequence of\"\n      echo \"using a buggy 'make' (AIX, DU, IRIX), in which case you might\"\n      echo \"want to install GNU make:\"\n      echo \"<$gnu_software_URL/make/>\"\n      ;;\n    *)\n      echo \"You might have modified some files without having the proper\"\n      echo \"tools for further handling them.  Check the 'README' file, it\"\n      echo \"often tells you about the needed prerequisites for installing\"\n      echo \"this package.  You may also peek at any GNU archive site, in\"\n      echo \"case some other package contains this missing '$1' program.\"\n      ;;\n  esac\n}\n\ngive_advice \"$1\" | sed -e '1s/^/WARNING: /' \\\n                       -e '2,$s/^/         /' >&2\n\n# Propagate the correct exit status (expected to be 127 for a program\n# not found, 63 for a program that failed due to version mismatch).\nexit $st\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/autogen.sh",
    "content": "#!/bin/sh\n\nautoreconf --install --force\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/config.h",
    "content": "/* config.h.  Generated from config.h.in by configure.  */\n/* config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* Define if building universal (internal helper macro) */\n/* #undef AC_APPLE_UNIVERSAL_BUILD */\n\n/* errno for incomplete non-blocking connect(2) */\n#define CONNECT_IN_PROGRESS EINPROGRESS\n\n/* Override libev default fd conversion macro. */\n/* #undef EV_FD_TO_WIN32_HANDLE */\n\n/* Override libev default fd close macro. */\n/* #undef EV_WIN32_CLOSE_FD */\n\n/* Override libev default handle conversion macro. */\n/* #undef EV_WIN32_HANDLE_TO_FD */\n\n/* Reset max file descriptor size. */\n/* #undef FD_SETSIZE */\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#define HAVE_ARPA_INET_H 1\n\n/* Define to 1 if you have the `CCCryptorCreateWithMode' function. */\n/* #undef HAVE_CCCRYPTORCREATEWITHMODE */\n\n/* Define to 1 if you have the `clock_gettime' function. */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define to 1 to use the syscall interface for clock_gettime */\n/* #undef HAVE_CLOCK_SYSCALL */\n\n/* Define to 1 if you have the <CommonCrypto/CommonCrypto.h> header file. */\n/* #undef HAVE_COMMONCRYPTO_COMMONCRYPTO_H */\n\n/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you\n   don't. */\n#define HAVE_DECL_INET_NTOP 1\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 `epoll_ctl' function. */\n/* #undef HAVE_EPOLL_CTL */\n\n/* Define to 1 if you have the `eventfd' function. */\n/* #undef HAVE_EVENTFD */\n\n/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */\n#define HAVE_EVP_ENCRYPTINIT_EX 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 the floor function is available */\n#define HAVE_FLOOR 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `getpwnam_r' function. */\n#define HAVE_GETPWNAM_R 1\n\n/* Define to 1 if you have the `inet_ntop' function. */\n/* #undef HAVE_INET_NTOP */\n\n/* Define to 1 if you have the `inotify_init' function. */\n/* #undef HAVE_INOTIFY_INIT */\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Enable IPv6 support in libudns */\n#define HAVE_IPv6 1\n\n/* Define to 1 if you have the `kqueue' function. */\n#define HAVE_KQUEUE 1\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#define HAVE_LANGINFO_H 1\n\n/* Define to 1 if you have the `rt' library (-lrt). */\n/* #undef HAVE_LIBRT */\n\n/* Define to 1 if you have the `socket' library (-lsocket). */\n/* #undef HAVE_LIBSOCKET */\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 <linux/if.h> header file. */\n/* #undef HAVE_LINUX_IF_H */\n\n/* Define to 1 if you have the <linux/netfilter_ipv4.h> header file. */\n/* #undef HAVE_LINUX_NETFILTER_IPV4_H */\n\n/* Define to 1 if you have the <linux/netfilter_ipv6/ip6_tables.h> header\n   file. */\n/* #undef HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_H */\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 `malloc' function. */\n#define HAVE_MALLOC 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 `memset' function. */\n#define HAVE_MEMSET 1\n\n/* Define to 1 if you have the `nanosleep' function. */\n#define HAVE_NANOSLEEP 1\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#define HAVE_NETDB_H 1\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#define HAVE_NETINET_IN_H 1\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#define HAVE_NET_IF_H 1\n\n/* Define to 1 if you have the <openssl/engine.h> header file. */\n#define HAVE_OPENSSL_ENGINE_H 1\n\n/* Define to 1 if you have the <openssl/err.h> header file. */\n#define HAVE_OPENSSL_ERR_H 1\n\n/* Define to 1 if you have the <openssl/evp.h> header file. */\n#define HAVE_OPENSSL_EVP_H 1\n\n/* Define to 1 if you have the <openssl/pem.h> header file. */\n#define HAVE_OPENSSL_PEM_H 1\n\n/* Define to 1 if you have the <openssl/rand.h> header file. */\n#define HAVE_OPENSSL_RAND_H 1\n\n/* Define to 1 if you have the <openssl/rsa.h> header file. */\n#define HAVE_OPENSSL_RSA_H 1\n\n/* Define to 1 if you have the <openssl/sha.h> header file. */\n#define HAVE_OPENSSL_SHA_H 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `port_create' function. */\n/* #undef HAVE_PORT_CREATE */\n\n/* Define to 1 if you have the <port.h> header file. */\n/* #undef HAVE_PORT_H */\n\n/* Have PTHREAD_PRIO_INHERIT. */\n#define HAVE_PTHREAD_PRIO_INHERIT 1\n\n/* Define to 1 if you have the `RAND_pseudo_bytes' function. */\n#define HAVE_RAND_PSEUDO_BYTES 1\n\n/* Define to 1 if you have the 'select' function. */\n#define HAVE_SELECT 1\n\n/* Define to 1 if you have the `setresuid' function. */\n/* #undef HAVE_SETRESUID */\n\n/* Define to 1 if you have the `setreuid' function. */\n#define HAVE_SETREUID 1\n\n/* Define to 1 if you have the `setrlimit' function. */\n#define HAVE_SETRLIMIT 1\n\n/* Define to 1 if you have the `signalfd' function. */\n/* #undef HAVE_SIGNALFD */\n\n/* Define to 1 if you have the `socket' function. */\n#define HAVE_SOCKET 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 `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 <sys/epoll.h> header file. */\n/* #undef HAVE_SYS_EPOLL_H */\n\n/* Define to 1 if you have the <sys/eventfd.h> header file. */\n/* #undef HAVE_SYS_EVENTFD_H */\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n#define HAVE_SYS_EVENT_H 1\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n/* #undef HAVE_SYS_INOTIFY_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/select.h> header file. */\n#define HAVE_SYS_SELECT_H 1\n\n/* Define to 1 if you have the <sys/signalfd.h> header file. */\n/* #undef HAVE_SYS_SIGNALFD_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\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/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#define HAVE_SYS_WAIT_H 1\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 `vfork' function. */\n#define HAVE_VFORK 1\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 <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n/* #undef HAVE_WINSOCK2_H */\n\n/* Define to 1 if `fork' works. */\n#define HAVE_WORKING_FORK 1\n\n/* Define to 1 if `vfork' works. */\n#define HAVE_WORKING_VFORK 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n/* #undef HAVE_WS2TCPIP_H */\n\n/* have zlib compression support */\n#define HAVE_ZLIB 1\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#define HAVE_ZLIB_H 1\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#define LT_OBJDIR \".libs/\"\n\n/* Define to 1 if assertions should be disabled. */\n/* #undef NDEBUG */\n\n/* Name of package */\n#define PACKAGE \"shadowsocks-libev\"\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"max.c.lv@gmail.com\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"shadowsocks-libev\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"shadowsocks-libev 2.4.8\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"shadowsocks-libev\"\n\n/* Define to the home page for this package. */\n#define PACKAGE_URL \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"2.4.8\"\n\n/* Define to necessary symbol if this constant uses a non-standard name on\n   your system. */\n/* #undef PTHREAD_CREATE_JOINABLE */\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define to the type of arg 1 for `select'. */\n#define SELECT_TYPE_ARG1 int\n\n/* Define to the type of args 2, 3 and 4 for `select'. */\n#define SELECT_TYPE_ARG234 (fd_set *)\n\n/* Define to the type of arg 5 for `select'. */\n#define SELECT_TYPE_ARG5 (struct timeval *)\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\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/* If the compiler supports a TLS storage class define it to that here */\n#define TLS __thread\n\n/* Use Apple CommonCrypto library */\n/* #undef USE_CRYPTO_APPLECC */\n\n/* Use mbed TLS library */\n/* #undef USE_CRYPTO_MBEDTLS */\n\n/* Use OpenSSL library */\n#define USE_CRYPTO_OPENSSL 1\n\n/* Use PolarSSL library */\n/* #undef USE_CRYPTO_POLARSSL */\n\n/* Enable extensions on AIX 3, Interix.  */\n#ifndef _ALL_SOURCE\n# define _ALL_SOURCE 1\n#endif\n/* Enable GNU extensions on systems that have them.  */\n#ifndef _GNU_SOURCE\n# define _GNU_SOURCE 1\n#endif\n/* Enable threading extensions on Solaris.  */\n#ifndef _POSIX_PTHREAD_SEMANTICS\n# define _POSIX_PTHREAD_SEMANTICS 1\n#endif\n/* Enable extensions on HP NonStop.  */\n#ifndef _TANDEM_SOURCE\n# define _TANDEM_SOURCE 1\n#endif\n/* Enable general extensions on Solaris.  */\n#ifndef __EXTENSIONS__\n# define __EXTENSIONS__ 1\n#endif\n\n\n/* Version number of package */\n#define VERSION \"2.4.8\"\n\n/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most\n   significant byte first (like Motorola and SPARC, unlike Intel). */\n#if defined AC_APPLE_UNIVERSAL_BUILD\n# if defined __BIG_ENDIAN__\n#  define WORDS_BIGENDIAN 1\n# endif\n#else\n# ifndef WORDS_BIGENDIAN\n/* #  undef WORDS_BIGENDIAN */\n# endif\n#endif\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 for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,\n   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the\n   #define below would cause a syntax error. */\n/* #undef _UINT8_T */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n/* #undef inline */\n#endif\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef pid_t */\n\n/* Define to the equivalent of the C99 'restrict' keyword, or to\n   nothing if this is not supported.  Do not define if restrict is\n   supported directly.  */\n#define restrict __restrict\n/* Work around a bug in Sun C++: it does not support _Restrict or\n   __restrict__, even though the corresponding Sun C compiler ends up with\n   \"#define restrict _Restrict\" or \"#define restrict __restrict__\" in the\n   previous line.  Perhaps some future version of Sun C++ will work with\n   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */\n#if defined __SUNPRO_CC && !defined __RESTRICT\n# define _Restrict\n# define __restrict__\n#endif\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef ssize_t */\n\n/* Define to the type of an unsigned integer type of width exactly 16 bits if\n   such a type exists and the standard includes do not define it. */\n/* #undef uint16_t */\n\n/* Define to the type of an unsigned integer type of width exactly 8 bits if\n   such a type exists and the standard includes do not define it. */\n/* #undef uint8_t */\n\n/* Define as `fork' if `vfork' does not work. */\n/* #undef vfork */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/config.h.in",
    "content": "/* config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* Define if building universal (internal helper macro) */\n#undef AC_APPLE_UNIVERSAL_BUILD\n\n/* errno for incomplete non-blocking connect(2) */\n#undef CONNECT_IN_PROGRESS\n\n/* Override libev default fd conversion macro. */\n#undef EV_FD_TO_WIN32_HANDLE\n\n/* Override libev default fd close macro. */\n#undef EV_WIN32_CLOSE_FD\n\n/* Override libev default handle conversion macro. */\n#undef EV_WIN32_HANDLE_TO_FD\n\n/* Reset max file descriptor size. */\n#undef FD_SETSIZE\n\n/* Define to 1 if you have the <arpa/inet.h> header file. */\n#undef HAVE_ARPA_INET_H\n\n/* Define to 1 if you have the `CCCryptorCreateWithMode' function. */\n#undef HAVE_CCCRYPTORCREATEWITHMODE\n\n/* Define to 1 if you have the `clock_gettime' function. */\n#undef HAVE_CLOCK_GETTIME\n\n/* Define to 1 to use the syscall interface for clock_gettime */\n#undef HAVE_CLOCK_SYSCALL\n\n/* Define to 1 if you have the <CommonCrypto/CommonCrypto.h> header file. */\n#undef HAVE_COMMONCRYPTO_COMMONCRYPTO_H\n\n/* Define to 1 if you have the declaration of `inet_ntop', and to 0 if you\n   don't. */\n#undef HAVE_DECL_INET_NTOP\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#undef HAVE_DLFCN_H\n\n/* Define to 1 if you have the `epoll_ctl' function. */\n#undef HAVE_EPOLL_CTL\n\n/* Define to 1 if you have the `eventfd' function. */\n#undef HAVE_EVENTFD\n\n/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */\n#undef HAVE_EVP_ENCRYPTINIT_EX\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#undef HAVE_FCNTL_H\n\n/* Define to 1 if the floor function is available */\n#undef HAVE_FLOOR\n\n/* Define to 1 if you have the `fork' function. */\n#undef HAVE_FORK\n\n/* Define to 1 if you have the `getpwnam_r' function. */\n#undef HAVE_GETPWNAM_R\n\n/* Define to 1 if you have the `inet_ntop' function. */\n#undef HAVE_INET_NTOP\n\n/* Define to 1 if you have the `inotify_init' function. */\n#undef HAVE_INOTIFY_INIT\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#undef HAVE_INTTYPES_H\n\n/* Enable IPv6 support in libudns */\n#undef HAVE_IPv6\n\n/* Define to 1 if you have the `kqueue' function. */\n#undef HAVE_KQUEUE\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#undef HAVE_LANGINFO_H\n\n/* Define to 1 if you have the `rt' library (-lrt). */\n#undef HAVE_LIBRT\n\n/* Define to 1 if you have the `socket' library (-lsocket). */\n#undef HAVE_LIBSOCKET\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 <linux/if.h> header file. */\n#undef HAVE_LINUX_IF_H\n\n/* Define to 1 if you have the <linux/netfilter_ipv4.h> header file. */\n#undef HAVE_LINUX_NETFILTER_IPV4_H\n\n/* Define to 1 if you have the <linux/netfilter_ipv6/ip6_tables.h> header\n   file. */\n#undef HAVE_LINUX_NETFILTER_IPV6_IP6_TABLES_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 `malloc' function. */\n#undef HAVE_MALLOC\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 `memset' function. */\n#undef HAVE_MEMSET\n\n/* Define to 1 if you have the `nanosleep' function. */\n#undef HAVE_NANOSLEEP\n\n/* Define to 1 if you have the <netdb.h> header file. */\n#undef HAVE_NETDB_H\n\n/* Define to 1 if you have the <netinet/in.h> header file. */\n#undef HAVE_NETINET_IN_H\n\n/* Define to 1 if you have the <net/if.h> header file. */\n#undef HAVE_NET_IF_H\n\n/* Define to 1 if you have the <openssl/engine.h> header file. */\n#undef HAVE_OPENSSL_ENGINE_H\n\n/* Define to 1 if you have the <openssl/err.h> header file. */\n#undef HAVE_OPENSSL_ERR_H\n\n/* Define to 1 if you have the <openssl/evp.h> header file. */\n#undef HAVE_OPENSSL_EVP_H\n\n/* Define to 1 if you have the <openssl/pem.h> header file. */\n#undef HAVE_OPENSSL_PEM_H\n\n/* Define to 1 if you have the <openssl/rand.h> header file. */\n#undef HAVE_OPENSSL_RAND_H\n\n/* Define to 1 if you have the <openssl/rsa.h> header file. */\n#undef HAVE_OPENSSL_RSA_H\n\n/* Define to 1 if you have the <openssl/sha.h> header file. */\n#undef HAVE_OPENSSL_SHA_H\n\n/* Define to 1 if you have the `poll' function. */\n#undef HAVE_POLL\n\n/* Define to 1 if you have the <poll.h> header file. */\n#undef HAVE_POLL_H\n\n/* Define to 1 if you have the `port_create' function. */\n#undef HAVE_PORT_CREATE\n\n/* Define to 1 if you have the <port.h> header file. */\n#undef HAVE_PORT_H\n\n/* Have PTHREAD_PRIO_INHERIT. */\n#undef HAVE_PTHREAD_PRIO_INHERIT\n\n/* Define to 1 if you have the `RAND_pseudo_bytes' function. */\n#undef HAVE_RAND_PSEUDO_BYTES\n\n/* Define to 1 if you have the 'select' function. */\n#undef HAVE_SELECT\n\n/* Define to 1 if you have the `setresuid' function. */\n#undef HAVE_SETRESUID\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 `signalfd' function. */\n#undef HAVE_SIGNALFD\n\n/* Define to 1 if you have the `socket' function. */\n#undef HAVE_SOCKET\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 `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 <sys/epoll.h> header file. */\n#undef HAVE_SYS_EPOLL_H\n\n/* Define to 1 if you have the <sys/eventfd.h> header file. */\n#undef HAVE_SYS_EVENTFD_H\n\n/* Define to 1 if you have the <sys/event.h> header file. */\n#undef HAVE_SYS_EVENT_H\n\n/* Define to 1 if you have the <sys/inotify.h> header file. */\n#undef HAVE_SYS_INOTIFY_H\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#undef HAVE_SYS_IOCTL_H\n\n/* Define to 1 if you have the <sys/select.h> header file. */\n#undef HAVE_SYS_SELECT_H\n\n/* Define to 1 if you have the <sys/signalfd.h> header file. */\n#undef HAVE_SYS_SIGNALFD_H\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#undef HAVE_SYS_SOCKET_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/types.h> header file. */\n#undef HAVE_SYS_TYPES_H\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#undef HAVE_SYS_WAIT_H\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 `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 <windows.h> header file. */\n#undef HAVE_WINDOWS_H\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n#undef HAVE_WINSOCK2_H\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/* Define to 1 if you have the <ws2tcpip.h> header file. */\n#undef HAVE_WS2TCPIP_H\n\n/* have zlib compression support */\n#undef HAVE_ZLIB\n\n/* Define to 1 if you have the <zlib.h> header file. */\n#undef HAVE_ZLIB_H\n\n/* Define to the sub-directory in which libtool stores uninstalled libraries.\n   */\n#undef LT_OBJDIR\n\n/* Define to 1 if assertions should be disabled. */\n#undef NDEBUG\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 necessary symbol if this constant uses a non-standard name on\n   your system. */\n#undef PTHREAD_CREATE_JOINABLE\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#undef RETSIGTYPE\n\n/* Define to the type of arg 1 for `select'. */\n#undef SELECT_TYPE_ARG1\n\n/* Define to the type of args 2, 3 and 4 for `select'. */\n#undef SELECT_TYPE_ARG234\n\n/* Define to the type of arg 5 for `select'. */\n#undef SELECT_TYPE_ARG5\n\n/* Define to 1 if you have the ANSI C header files. */\n#undef STDC_HEADERS\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/* If the compiler supports a TLS storage class define it to that here */\n#undef TLS\n\n/* Use Apple CommonCrypto library */\n#undef USE_CRYPTO_APPLECC\n\n/* Use mbed TLS library */\n#undef USE_CRYPTO_MBEDTLS\n\n/* Use OpenSSL library */\n#undef USE_CRYPTO_OPENSSL\n\n/* Use PolarSSL library */\n#undef USE_CRYPTO_POLARSSL\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/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most\n   significant byte first (like Motorola and SPARC, unlike Intel). */\n#if defined AC_APPLE_UNIVERSAL_BUILD\n# if defined __BIG_ENDIAN__\n#  define WORDS_BIGENDIAN 1\n# endif\n#else\n# ifndef WORDS_BIGENDIAN\n#  undef WORDS_BIGENDIAN\n# endif\n#endif\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 for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,\n   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the\n   #define below would cause a syntax error. */\n#undef _UINT8_T\n\n/* Define to empty if `const' does not conform to ANSI C. */\n#undef const\n\n/* Define to `__inline__' or `__inline' if that's what the C compiler\n   calls it, or to nothing if 'inline' is not supported under any name.  */\n#ifndef __cplusplus\n#undef inline\n#endif\n\n/* Define to `int' if <sys/types.h> does not define. */\n#undef pid_t\n\n/* Define to the equivalent of the C99 'restrict' keyword, or to\n   nothing if this is not supported.  Do not define if restrict is\n   supported directly.  */\n#undef restrict\n/* Work around a bug in Sun C++: it does not support _Restrict or\n   __restrict__, even though the corresponding Sun C compiler ends up with\n   \"#define restrict _Restrict\" or \"#define restrict __restrict__\" in the\n   previous line.  Perhaps some future version of Sun C++ will work with\n   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */\n#if defined __SUNPRO_CC && !defined __RESTRICT\n# define _Restrict\n# define __restrict__\n#endif\n\n/* Define to `unsigned int' if <sys/types.h> does not define. */\n#undef size_t\n\n/* Define to `int' if <sys/types.h> does not define. */\n#undef ssize_t\n\n/* Define to the type of an unsigned integer type of width exactly 16 bits if\n   such a type exists and the standard includes do not define it. */\n#undef uint16_t\n\n/* Define to the type of an unsigned integer type of width exactly 8 bits if\n   such a type exists and the standard includes do not define it. */\n#undef uint8_t\n\n/* Define as `fork' if `vfork' does not work. */\n#undef vfork\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/configure",
    "content": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.69 for shadowsocks-libev 2.4.8.\n#\n# Report bugs to <max.c.lv@gmail.com>.\n#\n#\n# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, 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.\nas_myself=\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# Use a proper internal environment variable to ensure we don't fall\n  # into an infinite loop, continuously re-executing ourselves.\n  if test x\"${_as_can_reexec}\" != xno && test \"x$CONFIG_SHELL\" != x; then\n    _as_can_reexec=no; export _as_can_reexec;\n    # We cannot yet assume a decent shell, so we have to provide a\n# neutralization value for shells without unset; and this also\n# works around shells that cannot unset nonexistent variables.\n# Preserve -v and -x to the replacement shell.\nBASH_ENV=/dev/null\nENV=/dev/null\n(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\ncase $- in # ((((\n  *v*x* | *x*v* ) as_opts=-vx ;;\n  *v* ) as_opts=-v ;;\n  *x* ) as_opts=-x ;;\n  * ) as_opts= ;;\nesac\nexec $CONFIG_SHELL $as_opts \"$as_myself\" ${1+\"$@\"}\n# Admittedly, this is quite paranoid, since all the known shells bail\n# out after a failed `exec'.\n$as_echo \"$0: could not re-execute with $CONFIG_SHELL\" >&2\nas_fn_exit 255\n  fi\n  # We don't want this to propagate to other subprocesses.\n          { _as_can_reexec=; unset _as_can_reexec;}\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\ntest -x / || 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\n  test -n \\\"\\${ZSH_VERSION+set}\\${BASH_VERSION+set}\\\" || (\n    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\n    ECHO=\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\n    ECHO=\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\n    PATH=/empty FPATH=/empty; export PATH FPATH\n    test \\\"X\\`printf %s \\$ECHO\\`\\\" = \\\"X\\$ECHO\\\" \\\\\n      || test \\\"X\\`print -r -- \\$ECHO\\`\\\" = \\\"X\\$ECHO\\\" ) || 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  export CONFIG_SHELL\n             # We cannot yet assume a decent shell, so we have to provide a\n# neutralization value for shells without unset; and this also\n# works around shells that cannot unset nonexistent variables.\n# Preserve -v and -x to the replacement shell.\nBASH_ENV=/dev/null\nENV=/dev/null\n(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\ncase $- in # ((((\n  *v*x* | *x*v* ) as_opts=-vx ;;\n  *v* ) as_opts=-v ;;\n  *x* ) as_opts=-x ;;\n  * ) as_opts= ;;\nesac\nexec $CONFIG_SHELL $as_opts \"$as_myself\" ${1+\"$@\"}\n# Admittedly, this is quite paranoid, since all the known shells bail\n# out after a failed `exec'.\n$as_echo \"$0: could not re-execute with $CONFIG_SHELL\" >&2\nexit 255\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 max.c.lv@gmail.com\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\n# as_fn_executable_p FILE\n# -----------------------\n# Test if FILE is an executable regular file.\nas_fn_executable_p ()\n{\n  test -f \"$1\" && test -x \"$1\"\n} # as_fn_executable_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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have\n  # already done that, so ensure we don't try to do so again and fall\n  # in an infinite loop.  This has already happened in practice.\n  _as_can_reexec=no; export _as_can_reexec\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 -pR'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -pR'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -pR'\n  fi\nelse\n  as_ln_s='cp -pR'\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\nas_test_x='test -x'\nas_executable_p=as_fn_executable_p\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\nSHELL=${CONFIG_SHELL-/bin/sh}\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, old GNU/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='shadowsocks-libev'\nPACKAGE_TARNAME='shadowsocks-libev'\nPACKAGE_VERSION='2.4.8'\nPACKAGE_STRING='shadowsocks-libev 2.4.8'\nPACKAGE_BUGREPORT='max.c.lv@gmail.com'\nPACKAGE_URL=''\n\nac_unique_file=\"src/encrypt.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_header_list=\nenable_option_checking=no\nac_subst_vars='am__EXEEXT_FALSE\nam__EXEEXT_TRUE\nLTLIBOBJS\nLIBOBJS\nsubdirs\nBUILD_WINCOMPAT_FALSE\nBUILD_WINCOMPAT_TRUE\nBUILD_REDIRECTOR_FALSE\nBUILD_REDIRECTOR_TRUE\nPTHREAD_CFLAGS\nPTHREAD_LIBS\nPTHREAD_CC\nax_pthread_config\nINET_NTOP_LIB\nMV\nRM\nGZIP\nXMLTO\nASCIIDOC\nENABLE_DOCUMENTATION_FALSE\nENABLE_DOCUMENTATION_TRUE\nUSE_SYSTEM_SHARED_LIB_FALSE\nUSE_SYSTEM_SHARED_LIB_TRUE\nOTOOL64\nOTOOL\nLIPO\nNMEDIT\nDSYMUTIL\nMANIFEST_TOOL\nRANLIB\nDLLTOOL\nOBJDUMP\nLN_S\nNM\nac_ct_DUMPBIN\nDUMPBIN\nLD\nFGREP\nSED\nhost_os\nhost_vendor\nhost_cpu\nhost\nbuild_os\nbuild_vendor\nbuild_cpu\nbuild\nLIBTOOL\nMAINT\nMAINTAINER_MODE_FALSE\nMAINTAINER_MODE_TRUE\nac_ct_AR\nAR\nAM_BACKSLASH\nAM_DEFAULT_VERBOSITY\nAM_DEFAULT_V\nAM_V\nam__fastdepCC_FALSE\nam__fastdepCC_TRUE\nCCDEPMODE\nam__nodep\nAMDEPBACKSLASH\nAMDEP_FALSE\nAMDEP_TRUE\nam__quote\nam__include\nDEPDIR\nam__untar\nam__tar\nAMTAR\nam__leading_dot\nSET_MAKE\nAWK\nmkdir_p\nMKDIR_P\nINSTALL_STRIP_PROGRAM\nSTRIP\ninstall_sh\nMAKEINFO\nAUTOHEADER\nAUTOMAKE\nAUTOCONF\nACLOCAL\nVERSION\nPACKAGE\nCYGPATH_W\nam__isrc\nINSTALL_DATA\nINSTALL_SCRIPT\nINSTALL_PROGRAM\nEGREP\nGREP\nCPP\nOBJEXT\nEXEEXT\nac_ct_CC\nCPPFLAGS\nLDFLAGS\nCFLAGS\nCC\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=''\nac_user_opts='\nenable_option_checking\nenable_dependency_tracking\nenable_silent_rules\nenable_maintainer_mode\nenable_static\nenable_shared\nwith_pic\nenable_fast_install\nwith_gnu_ld\nwith_sysroot\nenable_libtool_lock\nenable_system_shared_lib\nwith_crypto_library\nenable_documentation\nenable_zlib\nwith_zlib\nwith_zlib_include\nwith_zlib_lib\nwith_openssl\nwith_openssl_include\nwith_openssl_lib\nwith_polarssl\nwith_polarssl_include\nwith_polarssl_lib\nwith_mbedtls\nwith_mbedtls_include\nwith_mbedtls_lib\nenable_applecc\nenable_ssp\nenable_assert\n'\n      ac_precious_vars='build_alias\nhost_alias\ntarget_alias\nCC\nCFLAGS\nLDFLAGS\nLIBS\nCPPFLAGS\nCPP'\nac_subdirs_all='libsodium'\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  *=?*) ac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *=)   ac_optarg= ;;\n  *)    ac_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  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 shadowsocks-libev 2.4.8 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\n                          [DATAROOTDIR/doc/shadowsocks-libev]\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 shadowsocks-libev 2.4.8:\";;\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  --enable-dependency-tracking\n                          do not reject slow dependency extractors\n  --disable-dependency-tracking\n                          speeds up one-time build\n  --enable-silent-rules   less verbose build output (undo: \"make V=1\")\n  --disable-silent-rules  verbose build output (undo: \"make V=0\")\n  --enable-maintainer-mode\n                          enable make rules and dependencies not useful (and\n                          sometimes confusing) to the casual installer\n  --enable-static[=PKGS]  build static libraries [default=no]\n  --enable-shared[=PKGS]  build shared libraries [default=no]\n  --enable-fast-install[=PKGS]\n                          optimize for fast installation [default=yes]\n  --disable-libtool-lock  avoid locking (might break parallel builds)\n  --enable-system-shared-lib\n                          build against shared libraries when possible\n  --disable-documentation do not build documentation\n  --disable-zlib          disable zlib compression support\n  --enable-applecc        enable Apple CommonCrypto API support\n  --disable-ssp           Do not compile with -fstack-protector\n  --disable-assert        turn off assertions\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-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use\n                          both]\n  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]\n  --with-sysroot=DIR Search for dependent libraries within DIR\n                        (or the compiler's sysroot if not specified).\n  --with-crypto-library=library\n                          build with the given crypto library,\n                          TYPE=openssl|polarssl|mbedtls [default=openssl]\n  --with-zlib=DIR         zlib base directory, or:\n  --with-zlib-include=DIR zlib headers directory\n  --with-zlib-lib=DIR     zlib library directory\n  --with-openssl=DIR      OpenSSL base directory, or:\n  --with-openssl-include=DIR\n                          OpenSSL headers directory (without trailing\n                          /openssl)\n  --with-openssl-lib=DIR  OpenSSL library directory\n  --with-polarssl=DIR     PolarSSL base directory, or:\n  --with-polarssl-include=DIR\n                          PolarSSL headers directory (without trailing\n                          /polarssl)\n  --with-polarssl-lib=DIR PolarSSL library directory\n  --with-mbedtls=DIR      mbed TLS base directory, or:\n  --with-mbedtls-include=DIR\n                          mbed TLS headers directory (without trailing\n                          /mbedtls)\n  --with-mbedtls-lib=DIR  mbed TLS library directory\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 <max.c.lv@gmail.com>.\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\nshadowsocks-libev configure 2.4.8\ngenerated by GNU Autoconf 2.69\n\nCopyright (C) 2012 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; ${as_lineno_stack:+:} 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; } > conftest.i && {\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; ${as_lineno_stack:+:} 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 eval \\${$3+:} false; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif eval \\${$3+:} false; 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.i 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( $as_echo \"## --------------------------------- ##\n## Report this to max.c.lv@gmail.com ##\n## --------------------------------- ##\"\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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} 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; ${as_lineno_stack:+:} 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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} 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 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; ${as_lineno_stack:+:} unset as_lineno\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_link\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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno\n\n} # ac_fn_c_check_func\n\n# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES\n# ---------------------------------------------\n# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR\n# accordingly.\nac_fn_c_check_decl ()\n{\n  as_lineno=${as_lineno-\"$1\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n  as_decl_name=`echo $2|sed 's/ *(.*//'`\n  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared\" >&5\n$as_echo_n \"checking whether $as_decl_name is declared... \" >&6; }\nif eval \\${$3+:} false; 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 $as_decl_name\n#ifdef __cplusplus\n  (void) $as_decl_use;\n#else\n  (void) $as_decl_name;\n#endif\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; ${as_lineno_stack:+:} unset as_lineno\n\n} # ac_fn_c_check_decl\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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno\n\n} # ac_fn_c_check_type\n\n# ac_fn_c_find_uintX_t LINENO BITS VAR\n# ------------------------------------\n# Finds an unsigned integer type with width BITS, setting cache variable VAR\n# accordingly.\nac_fn_c_find_uintX_t ()\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 uint$2_t\" >&5\n$as_echo_n \"checking for uint$2_t... \" >&6; }\nif eval \\${$3+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  eval \"$3=no\"\n     # Order is important - never check a type that is potentially smaller\n     # than half of the expected target width.\n     for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \\\n\t 'unsigned long long int' 'unsigned short int' 'unsigned char'; do\n       cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\nstatic int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];\ntest_array [0] = 0;\nreturn test_array [0];\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  case $ac_type in #(\n  uint$2_t) :\n    eval \"$3=yes\" ;; #(\n  *) :\n    eval \"$3=\\$ac_type\" ;;\nesac\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n       if eval test \\\"x\\$\"$3\"\\\" = x\"no\"; then :\n\nelse\n  break\nfi\n     done\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; ${as_lineno_stack:+:} unset as_lineno\n\n} # ac_fn_c_find_uintX_t\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 shadowsocks-libev $as_me 2.4.8, which was\ngenerated by GNU Autoconf 2.69.  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    $as_echo \"## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\"\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    $as_echo \"## ----------------- ##\n## Output variables. ##\n## ----------------- ##\"\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      $as_echo \"## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\"\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      $as_echo \"## ----------- ##\n## confdefs.h. ##\n## ----------- ##\"\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  # We do not want a PATH search for config.site.\n  case $CONFIG_SITE in #((\n    -*)  ac_site_file1=./$CONFIG_SITE;;\n    */*) ac_site_file1=$CONFIG_SITE;;\n    *)   ac_site_file1=./$CONFIG_SITE;;\n  esac\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      || { { $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 $? \"failed to load site script $ac_site_file\nSee \\`config.log' for more details\" \"$LINENO\" 5; }\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\nas_fn_append ac_header_list \" netdb.h\"\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\nac_config_headers=\"$ac_config_headers config.h\"\n\nac_aux_dir=\nfor ac_dir in auto \"$srcdir\"/auto; do\n  if test -f \"$ac_dir/install-sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install-sh -c\"\n    break\n  elif test -f \"$ac_dir/install.sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install.sh -c\"\n    break\n  elif test -f \"$ac_dir/shtool\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/shtool install -c\"\n    break\n  fi\ndone\nif test -z \"$ac_aux_dir\"; then\n  as_fn_error $? \"cannot find install-sh, install.sh, or shtool in auto \\\"$srcdir\\\"/auto\" \"$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\n# expand $ac_aux_dir to an absolute path\nam_aux_dir=`cd $ac_aux_dir && pwd`\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\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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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;}\nas_fn_error 77 \"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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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>\nstruct stat;\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\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 whether $CC understands -c and -o together\" >&5\n$as_echo_n \"checking whether $CC understands -c and -o together... \" >&6; }\nif ${am_cv_prog_cc_c_o+:} false; 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  # Following AC_PROG_CC_C_O, we do the test twice because some\n  # compilers refuse to overwrite an existing .o file with -o,\n  # though they will create one.\n  am_cv_prog_cc_c_o=yes\n  for am_i in 1 2; do\n    if { echo \"$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext\" >&5\n   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); } \\\n         && test -f conftest2.$ac_objext; then\n      : OK\n    else\n      am_cv_prog_cc_c_o=no\n      break\n    fi\n  done\n  rm -f core conftest*\n  unset am_i\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o\" >&5\n$as_echo \"$am_cv_prog_cc_c_o\" >&6; }\nif test \"$am_cv_prog_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\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\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 ${ac_cv_prog_CPP+:} false; 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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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\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 ${ac_cv_path_GREP+:} false; 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      as_fn_executable_p \"$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 ${ac_cv_path_EGREP+:} false; 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      as_fn_executable_p \"$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 ${ac_cv_header_stdc+:} false; 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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\" = xyes; 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 ${ac_cv_safe_to_define___extensions__+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#         define __EXTENSIONS__ 1\n          $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\nam__api_version='1.14'\n\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 ${ac_cv_path_install+:} false; 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 as_fn_executable_p \"$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# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]*)\n    as_fn_error $? \"unsafe absolute working directory name\" \"$LINENO\" 5;;\nesac\ncase $srcdir in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]*)\n    as_fn_error $? \"unsafe srcdir value: '$srcdir'\" \"$LINENO\" 5;;\nesac\n\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   am_has_slept=no\n   for am_try in 1 2; do\n     echo \"timestamp, slept: $am_has_slept\" > conftest.file\n     set X `ls -Lt \"$srcdir/configure\" conftest.file 2> /dev/null`\n     if test \"$*\" = \"X\"; then\n\t# -L didn't work.\n\tset X `ls -t \"$srcdir/configure\" conftest.file`\n     fi\n     if test \"$*\" != \"X $srcdir/configure conftest.file\" \\\n\t&& test \"$*\" != \"X conftest.file $srcdir/configure\"; then\n\n\t# If neither matched, then we have a broken ls.  This can happen\n\t# if, for instance, CONFIG_SHELL is bash and it inherits a\n\t# broken ls alias from the environment.  This has actually\n\t# happened.  Such a system could not be considered \"sane\".\n\tas_fn_error $? \"ls -t appears to fail.  Make sure there is not a broken\n  alias in your environment\" \"$LINENO\" 5\n     fi\n     if test \"$2\" = conftest.file || test $am_try -eq 2; then\n       break\n     fi\n     # Just in case.\n     sleep 1\n     am_has_slept=yes\n   done\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; }\n# If we didn't sleep, we still need to ensure time stamps of config.status and\n# generated files are strictly newer.\nam_sleep_pid=\nif grep 'slept: no' conftest.file >/dev/null 2>&1; then\n  ( sleep 1 ) &\n  am_sleep_pid=$!\nfi\n\nrm -f conftest.file\n\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\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\n# Use eval to expand $SHELL\nif eval \"$MISSING --is-lightweight\"; then\n  am_missing_run=\"$MISSING \"\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 test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p \"$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=\"\\$(install_sh) -c -s\"\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p\" >&5\n$as_echo_n \"checking for a thread-safe mkdir -p... \" >&6; }\nif test -z \"$MKDIR_P\"; then\n  if ${ac_cv_path_mkdir+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in mkdir gmkdir; do\n\t for ac_exec_ext in '' $ac_executable_extensions; do\n\t   as_fn_executable_p \"$as_dir/$ac_prog$ac_exec_ext\" || continue\n\t   case `\"$as_dir/$ac_prog$ac_exec_ext\" --version 2>&1` in #(\n\t     'mkdir (GNU coreutils) '* | \\\n\t     'mkdir (coreutils) '* | \\\n\t     'mkdir (fileutils) '4.1*)\n\t       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext\n\t       break 3;;\n\t   esac\n\t done\n       done\n  done\nIFS=$as_save_IFS\n\nfi\n\n  test -d ./--version && rmdir ./--version\n  if test \"${ac_cv_path_mkdir+set}\" = set; then\n    MKDIR_P=\"$ac_cv_path_mkdir -p\"\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for MKDIR_P 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    MKDIR_P=\"$ac_install_sh -d\"\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MKDIR_P\" >&5\n$as_echo \"$MKDIR_P\" >&6; }\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 ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p \"$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 eval \\${ac_cv_prog_make_${ac_make}_set+:} false; 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\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 this is the am__doit target\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# Ignore all kinds of additional output from 'make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\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='\\'\n  am__nodep='_no'\nfi\n if test \"x$enable_dependency_tracking\" != xno; then\n  AMDEP_TRUE=\n  AMDEP_FALSE='#'\nelse\n  AMDEP_TRUE='#'\n  AMDEP_FALSE=\nfi\n\n\n# Check whether --enable-silent-rules was given.\nif test \"${enable_silent_rules+set}\" = set; then :\n  enableval=$enable_silent_rules;\nfi\n\ncase $enable_silent_rules in # (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=1;;\nesac\nam_make=${MAKE-make}\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables\" >&5\n$as_echo_n \"checking whether $am_make supports nested variables... \" >&6; }\nif ${am_cv_make_support_nested_variables+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if $as_echo 'TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables\" >&5\n$as_echo \"$am_cv_make_support_nested_variables\" >&6; }\nif test $am_cv_make_support_nested_variables = yes; then\n    AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAM_BACKSLASH='\\'\n\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  am__isrc=' -I$(srcdir)'\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    as_fn_error $? \"source directory already configured; run \\\"make distclean\\\" there first\" \"$LINENO\" 5\n  fi\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='shadowsocks-libev'\n VERSION='2.4.8'\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\n# For better backward compatibility.  To be removed once Automake 1.9.x\n# dies out for good.  For more background, see:\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>\nmkdir_p='$(MKDIR_P)'\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.  Yes, it's still used\n# in the wild :-(  We should find a proper way to deprecate it ...\nAMTAR='$${TAR-tar}'\n\n\n# We'll loop over all known methods to create a tar archive until one works.\n_am_tools='gnutar  pax cpio none'\n\nam__tar='$${TAR-tar} chof - \"$$tardir\"' am__untar='$${TAR-tar} xf -'\n\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 ${am_cv_CC_dependencies_compiler_type+:} false; 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  rm -rf conftest.dir\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  am__universal=false\n  case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac\n\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 10 /bin/sh.\n      echo '/* dummy */' > sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\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.  Also, some Intel\n    # versions had trouble with output in subdirs.\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvc7 | msvc7msys | msvisualcpp | msvcmsys)\n      # This compiler won't grok '-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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 if\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\n# POSIX will say in a future version that running \"rm -f\" with no argument\n# is OK; and we want to be able to make that assumption in our Makefile\n# recipes.  So use an aggressive probe to check that the usage we want is\n# actually supported \"in the wild\" to an acceptable degree.\n# See automake bug#10828.\n# To make any issue more visible, cause the running configure to be aborted\n# by default if the 'rm' program in use doesn't match our expectations; the\n# user can still override this though.\nif rm -f && rm -fr && rm -rf; then : OK; else\n  cat >&2 <<'END'\nOops!\n\nYour 'rm' program seems unable to run without file operands specified\non the command line, even when the '-f' option is present.  This is contrary\nto the behaviour of most rm programs out there, and not conforming with\nthe upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>\n\nPlease tell bug-automake@gnu.org about your system, including the value\nof your $PATH and any error possibly output before this message.  This\ncan help us improve future automake versions.\n\nEND\n  if test x\"$ACCEPT_INFERIOR_RM_PROGRAM\" = x\"yes\"; then\n    echo 'Configuration will proceed anyway, since you have set the' >&2\n    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to \"yes\"' >&2\n    echo >&2\n  else\n    cat >&2 <<'END'\nAborting the configuration process, to ensure you take notice of the issue.\n\nYou can download and install GNU coreutils to get an 'rm' implementation\nthat behaves properly: <http://www.gnu.org/software/coreutils/>.\n\nIf you want to complete the configuration process using your problematic\n'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM\nto \"yes\", and re-run configure.\n\nEND\n    as_fn_error $? \"Your 'rm' program is bad, sorry.\" \"$LINENO\" 5\n  fi\nfi\nif test -n \"$ac_tool_prefix\"; then\n  for ac_prog in ar lib \"link -lib\"\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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_AR=\"$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\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    test -n \"$AR\" && break\n  done\nfi\nif test -z \"$AR\"; then\n  ac_ct_AR=$AR\n  for ac_prog in ar lib \"link -lib\"\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 ${ac_cv_prog_ac_ct_AR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_AR=\"$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_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR\" >&5\n$as_echo \"$ac_ct_AR\" >&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_AR\" && break\ndone\n\n  if test \"x$ac_ct_AR\" = x; then\n    AR=\"false\"\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    AR=$ac_ct_AR\n  fi\nfi\n\n: ${AR=ar}\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface\" >&5\n$as_echo_n \"checking the archiver ($AR) interface... \" >&6; }\nif ${am_cv_ar_interface+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_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   am_cv_ar_interface=ar\n   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nint some_variable = 0;\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'\n      { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$am_ar_try\\\"\"; } >&5\n  (eval $am_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n      if test \"$ac_status\" -eq 0; then\n        am_cv_ar_interface=ar\n      else\n        am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5'\n        { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$am_ar_try\\\"\"; } >&5\n  (eval $am_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n        if test \"$ac_status\" -eq 0; then\n          am_cv_ar_interface=lib\n        else\n          am_cv_ar_interface=unknown\n        fi\n      fi\n      rm -f conftest.lib libconftest.a\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n   ac_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\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface\" >&5\n$as_echo \"$am_cv_ar_interface\" >&6; }\n\ncase $am_cv_ar_interface in\nar)\n  ;;\nlib)\n  # Microsoft lib, so override with the ar-lib wrapper script.\n  # FIXME: It is wrong to rewrite AR.\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__AR in this case,\n  # and then we could set am__AR=\"$am_aux_dir/ar-lib \\$(AR)\" or something\n  # similar.\n  AR=\"$am_aux_dir/ar-lib $AR\"\n  ;;\nunknown)\n  as_fn_error $? \"could not determine $AR interface\" \"$LINENO\" 5\n  ;;\nesac\n\n# Check whether --enable-silent-rules was given.\nif test \"${enable_silent_rules+set}\" = set; then :\n  enableval=$enable_silent_rules;\nfi\n\ncase $enable_silent_rules in # (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=0;;\nesac\nam_make=${MAKE-make}\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables\" >&5\n$as_echo_n \"checking whether $am_make supports nested variables... \" >&6; }\nif ${am_cv_make_support_nested_variables+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if $as_echo 'TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables\" >&5\n$as_echo \"$am_cv_make_support_nested_variables\" >&6; }\nif test $am_cv_make_support_nested_variables = yes; then\n    AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAM_BACKSLASH='\\'\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles\" >&5\n$as_echo_n \"checking whether to enable maintainer-specific portions of Makefiles... \" >&6; }\n    # Check whether --enable-maintainer-mode was given.\nif test \"${enable_maintainer_mode+set}\" = set; then :\n  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval\nelse\n  USE_MAINTAINER_MODE=no\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE\" >&5\n$as_echo \"$USE_MAINTAINER_MODE\" >&6; }\n   if test $USE_MAINTAINER_MODE = yes; then\n  MAINTAINER_MODE_TRUE=\n  MAINTAINER_MODE_FALSE='#'\nelse\n  MAINTAINER_MODE_TRUE='#'\n  MAINTAINER_MODE_FALSE=\nfi\n\n  MAINT=$MAINTAINER_MODE_TRUE\n\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='\\'\n  am__nodep='_no'\nfi\n if 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# Check whether --enable-static was given.\nif test \"${enable_static+set}\" = set; then :\n  enableval=$enable_static; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_static=no\nfi\n\n\n\n\n\n\n\n\n\n# Check whether --enable-shared was given.\nif test \"${enable_shared+set}\" = set; then :\n  enableval=$enable_shared; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_shared=no\nfi\n\n\n\n\n\n\n\n\n\ncase `pwd` in\n  *\\ * | *\\\t*)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&5\n$as_echo \"$as_me: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&2;} ;;\nesac\n\n\n\nmacro_version='2.4.2'\nmacro_revision='1.3337'\n\n\n\n\n\n\n\n\n\n\n\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking build system type\" >&5\n$as_echo_n \"checking build system type... \" >&6; }\nif ${ac_cv_build+:} false; 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 ${ac_cv_host+:} false; 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# Backslashify metacharacters that are still active within\n# double-quoted strings.\nsed_quote_subst='s/\\([\"`$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\nECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to print strings\" >&5\n$as_echo_n \"checking how to print strings... \" >&6; }\n# Test print first, because it will be a builtin if present.\nif test \"X`( print -r -- -n ) 2>/dev/null`\" = X-n && \\\n   test \"X`print -r -- $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='print -r --'\nelif test \"X`printf %s $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='printf %s\\n'\nelse\n  # Use this function as a fallback that always works.\n  func_fallback_echo ()\n  {\n    eval 'cat <<_LTECHO_EOF\n$1\n_LTECHO_EOF'\n  }\n  ECHO='func_fallback_echo'\nfi\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"\"\n}\n\ncase \"$ECHO\" in\n  printf*) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: printf\" >&5\n$as_echo \"printf\" >&6; } ;;\n  print*) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: print -r\" >&5\n$as_echo \"print -r\" >&6; } ;;\n  *) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: cat\" >&5\n$as_echo \"cat\" >&6; } ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output\" >&5\n$as_echo_n \"checking for a sed that does not truncate output... \" >&6; }\nif ${ac_cv_path_SED+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/\n     for ac_i in 1 2 3 4 5 6 7; do\n       ac_script=\"$ac_script$as_nl$ac_script\"\n     done\n     echo \"$ac_script\" 2>/dev/null | sed 99q >conftest.sed\n     { ac_script=; unset ac_script;}\n     if test -z \"$SED\"; then\n  ac_path_SED_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\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_SED=\"$as_dir/$ac_prog$ac_exec_ext\"\n      as_fn_executable_p \"$ac_path_SED\" || continue\n# Check for GNU ac_path_SED and select it if it is found.\n  # Check for GNU $ac_path_SED\ncase `\"$ac_path_SED\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_SED=\"$ac_path_SED\" ac_path_SED_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 '' >> \"conftest.nl\"\n    \"$ac_path_SED\" -f conftest.sed < \"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_SED_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_SED=\"$ac_path_SED\"\n      ac_path_SED_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_SED_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_SED\"; then\n    as_fn_error $? \"no acceptable sed could be found in \\$PATH\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_SED=$SED\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED\" >&5\n$as_echo \"$ac_cv_path_SED\" >&6; }\n SED=\"$ac_cv_path_SED\"\n  rm -f conftest.sed\n\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for fgrep\" >&5\n$as_echo_n \"checking for fgrep... \" >&6; }\nif ${ac_cv_path_FGREP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1\n   then ac_cv_path_FGREP=\"$GREP -F\"\n   else\n     if test -z \"$FGREP\"; then\n  ac_path_FGREP_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 fgrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_FGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      as_fn_executable_p \"$ac_path_FGREP\" || continue\n# Check for GNU ac_path_FGREP and select it if it is found.\n  # Check for GNU $ac_path_FGREP\ncase `\"$ac_path_FGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_FGREP=\"$ac_path_FGREP\" ac_path_FGREP_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 'FGREP' >> \"conftest.nl\"\n    \"$ac_path_FGREP\" FGREP < \"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_FGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_FGREP=\"$ac_path_FGREP\"\n      ac_path_FGREP_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_FGREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_FGREP\"; then\n    as_fn_error $? \"no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_FGREP=$FGREP\nfi\n\n   fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP\" >&5\n$as_echo \"$ac_cv_path_FGREP\" >&6; }\n FGREP=\"$ac_cv_path_FGREP\"\n\n\ntest -z \"$GREP\" && GREP=grep\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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\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 $CC\" >&5\n$as_echo_n \"checking for ld used by $CC... \" >&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    [\\\\/]* | ?:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the pathname 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 ${lt_cv_path_LD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$lt_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 ${lt_cv_prog_gnu_ld+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld\" >&5\n$as_echo \"$lt_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)\" >&5\n$as_echo_n \"checking for BSD- or MS-compatible name lister (nm)... \" >&6; }\nif ${lt_cv_path_NM+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM\" >&5\n$as_echo \"$lt_cv_path_NM\" >&6; }\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  if test -n \"$DUMPBIN\"; then :\n    # Let the user override the test.\n  else\n    if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in dumpbin \"link -dump\"\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 ${ac_cv_prog_DUMPBIN+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DUMPBIN\"; then\n  ac_cv_prog_DUMPBIN=\"$DUMPBIN\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DUMPBIN=\"$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\nDUMPBIN=$ac_cv_prog_DUMPBIN\nif test -n \"$DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DUMPBIN\" >&5\n$as_echo \"$DUMPBIN\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n    test -n \"$DUMPBIN\" && break\n  done\nfi\nif test -z \"$DUMPBIN\"; then\n  ac_ct_DUMPBIN=$DUMPBIN\n  for ac_prog in dumpbin \"link -dump\"\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 ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DUMPBIN\"; then\n  ac_cv_prog_ac_ct_DUMPBIN=\"$ac_ct_DUMPBIN\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DUMPBIN=\"$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN\nif test -n \"$ac_ct_DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN\" >&5\n$as_echo \"$ac_ct_DUMPBIN\" >&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_DUMPBIN\" && break\ndone\n\n  if test \"x$ac_ct_DUMPBIN\" = x; then\n    DUMPBIN=\":\"\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    DUMPBIN=$ac_ct_DUMPBIN\n  fi\nfi\n\n    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in\n    *COFF*)\n      DUMPBIN=\"$DUMPBIN -symbols\"\n      ;;\n    *)\n      DUMPBIN=:\n      ;;\n    esac\n  fi\n\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface\" >&5\n$as_echo_n \"checking the name lister ($NM) interface... \" >&6; }\nif ${lt_cv_nm_interface+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:$LINENO: $ac_compile\\\"\" >&5)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:$LINENO: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&5)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:$LINENO: output\\\"\" >&5)\n  cat conftest.out >&5\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface\" >&5\n$as_echo \"$lt_cv_nm_interface\" >&6; }\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ln -s works\" >&5\n$as_echo_n \"checking whether ln -s works... \" >&6; }\nLN_S=$as_ln_s\nif test \"$LN_S\" = \"ln -s\"; 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, using $LN_S\" >&5\n$as_echo \"no, using $LN_S\" >&6; }\nfi\n\n# find the maximum length of command line arguments\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments\" >&5\n$as_echo_n \"checking the maximum length of command line arguments... \" >&6; }\nif ${lt_cv_sys_max_cmd_len+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n    i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  mint*)\n    # On MiNT this can take a long time and run out of memory.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  os2*)\n    # The test takes a long time on OS/2.\n    lt_cv_sys_max_cmd_len=8192\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[\t ]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\" && \\\n\ttest undefined != \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`env echo \"$teststring$teststring\" 2>/dev/null` \\\n\t         = \"X$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n\nfi\n\nif test -n $lt_cv_sys_max_cmd_len ; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len\" >&5\n$as_echo \"$lt_cv_sys_max_cmd_len\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: none\" >&5\n$as_echo \"none\" >&6; }\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n\n\n\n\n\n: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs\" >&5\n$as_echo_n \"checking whether the shell understands some XSI constructs... \" >&6; }\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,b/c, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $xsi_shell\" >&5\n$as_echo \"$xsi_shell\" >&6; }\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands \\\"+=\\\"\" >&5\n$as_echo_n \"checking whether the shell understands \\\"+=\\\"... \" >&6; }\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$1+=\\$2\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_shell_append\" >&5\n$as_echo \"$lt_shell_append\" >&6; }\n\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n\n\n\n\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format\" >&5\n$as_echo_n \"checking how to convert $build file names to $host format... \" >&6; }\nif ${lt_cv_to_host_file_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32\n        ;;\n    esac\n    ;;\n  *-*-cygwin* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_noop\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin\n        ;;\n    esac\n    ;;\n  * ) # unhandled hosts (and \"normal\" native builds)\n    lt_cv_to_host_file_cmd=func_convert_file_noop\n    ;;\nesac\n\nfi\n\nto_host_file_cmd=$lt_cv_to_host_file_cmd\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd\" >&5\n$as_echo \"$lt_cv_to_host_file_cmd\" >&6; }\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format\" >&5\n$as_echo_n \"checking how to convert $build file names to toolchain format... \" >&6; }\nif ${lt_cv_to_tool_file_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  #assume ordinary cross tools, or native build.\nlt_cv_to_tool_file_cmd=func_convert_file_noop\ncase $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32\n        ;;\n    esac\n    ;;\nesac\n\nfi\n\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd\" >&5\n$as_echo \"$lt_cv_to_tool_file_cmd\" >&6; }\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files\" >&5\n$as_echo_n \"checking for $LD option to reload object files... \" >&6; }\nif ${lt_cv_ld_reload_flag+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_reload_flag='-r'\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag\" >&5\n$as_echo \"$lt_cv_ld_reload_flag\" >&6; }\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\n    if test \"$GCC\" != yes; then\n      reload_cmds=false\n    fi\n    ;;\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}objdump\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}objdump; 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 ${ac_cv_prog_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OBJDUMP\"; then\n  ac_cv_prog_OBJDUMP=\"$OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OBJDUMP=\"${ac_tool_prefix}objdump\"\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\nOBJDUMP=$ac_cv_prog_OBJDUMP\nif test -n \"$OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OBJDUMP\" >&5\n$as_echo \"$OBJDUMP\" >&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_OBJDUMP\"; then\n  ac_ct_OBJDUMP=$OBJDUMP\n  # Extract the first word of \"objdump\", so it can be a program name with args.\nset dummy objdump; 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 ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OBJDUMP\"; then\n  ac_cv_prog_ac_ct_OBJDUMP=\"$ac_ct_OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OBJDUMP=\"objdump\"\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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP\nif test -n \"$ac_ct_OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP\" >&5\n$as_echo \"$ac_ct_OBJDUMP\" >&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_OBJDUMP\" = x; then\n    OBJDUMP=\"false\"\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    OBJDUMP=$ac_ct_OBJDUMP\n  fi\nelse\n  OBJDUMP=\"$ac_cv_prog_OBJDUMP\"\nfi\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries\" >&5\n$as_echo_n \"checking how to recognize dependent libraries... \" >&6; }\nif ${lt_cv_deplibs_check_method+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[4-9]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[45]*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.\n  if ( test \"$lt_cv_nm_interface\" = \"BSD nm\" && file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    # Keep this pattern in sync with the one in func_win32_libid.\n    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc*)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\nhaiku*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\\.[0-9]'\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\\.[0-9]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[3-9]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method\" >&5\n$as_echo \"$lt_cv_deplibs_check_method\" >&6; }\n\nfile_magic_glob=\nwant_nocaseglob=no\nif test \"$build\" = \"$host\"; then\n  case $host_os in\n  mingw* | pw32*)\n    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then\n      want_nocaseglob=yes\n    else\n      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e \"s/\\(..\\)/s\\/[\\1]\\/[\\1]\\/g;/g\"`\n    fi\n    ;;\n  esac\nfi\n\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dlltool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dlltool; 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 ${ac_cv_prog_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DLLTOOL\"; then\n  ac_cv_prog_DLLTOOL=\"$DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DLLTOOL=\"${ac_tool_prefix}dlltool\"\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\nDLLTOOL=$ac_cv_prog_DLLTOOL\nif test -n \"$DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DLLTOOL\" >&5\n$as_echo \"$DLLTOOL\" >&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_DLLTOOL\"; then\n  ac_ct_DLLTOOL=$DLLTOOL\n  # Extract the first word of \"dlltool\", so it can be a program name with args.\nset dummy dlltool; 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 ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DLLTOOL\"; then\n  ac_cv_prog_ac_ct_DLLTOOL=\"$ac_ct_DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DLLTOOL=\"dlltool\"\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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL\nif test -n \"$ac_ct_DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL\" >&5\n$as_echo \"$ac_ct_DLLTOOL\" >&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_DLLTOOL\" = x; then\n    DLLTOOL=\"false\"\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    DLLTOOL=$ac_ct_DLLTOOL\n  fi\nelse\n  DLLTOOL=\"$ac_cv_prog_DLLTOOL\"\nfi\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries\" >&5\n$as_echo_n \"checking how to associate runtime and link libraries... \" >&6; }\nif ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_sharedlib_from_linklib_cmd='unknown'\n\ncase $host_os in\ncygwin* | mingw* | pw32* | cegcc*)\n  # two different shell functions defined in ltmain.sh\n  # decide which to use based on capabilities of $DLLTOOL\n  case `$DLLTOOL --help 2>&1` in\n  *--identify-strict*)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib\n    ;;\n  *)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback\n    ;;\n  esac\n  ;;\n*)\n  # fallback: assume linklib IS sharedlib\n  lt_cv_sharedlib_from_linklib_cmd=\"$ECHO\"\n  ;;\nesac\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd\" >&5\n$as_echo \"$lt_cv_sharedlib_from_linklib_cmd\" >&6; }\nsharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd\ntest -z \"$sharedlib_from_linklib_cmd\" && sharedlib_from_linklib_cmd=$ECHO\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  for ac_prog in ar\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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_AR=\"$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\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    test -n \"$AR\" && break\n  done\nfi\nif test -z \"$AR\"; then\n  ac_ct_AR=$AR\n  for ac_prog in ar\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 ${ac_cv_prog_ac_ct_AR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_AR=\"$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_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR\" >&5\n$as_echo \"$ac_ct_AR\" >&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_AR\" && break\ndone\n\n  if test \"x$ac_ct_AR\" = x; then\n    AR=\"false\"\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    AR=$ac_ct_AR\n  fi\nfi\n\n: ${AR=ar}\n: ${AR_FLAGS=cru}\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support\" >&5\n$as_echo_n \"checking for archiver @FILE support... \" >&6; }\nif ${lt_cv_ar_at_file+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ar_at_file=no\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  echo conftest.$ac_objext > conftest.lst\n      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'\n      { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$lt_ar_try\\\"\"; } >&5\n  (eval $lt_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n      if test \"$ac_status\" -eq 0; then\n\t# Ensure the archiver fails upon bogus file names.\n\trm -f conftest.$ac_objext libconftest.a\n\t{ { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$lt_ar_try\\\"\"; } >&5\n  (eval $lt_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n\tif test \"$ac_status\" -ne 0; then\n          lt_cv_ar_at_file=@\n        fi\n      fi\n      rm -f conftest.* libconftest.a\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file\" >&5\n$as_echo \"$lt_cv_ar_at_file\" >&6; }\n\nif test \"x$lt_cv_ar_at_file\" = xno; then\n  archiver_list_spec=\nelse\n  archiver_list_spec=$lt_cv_ar_at_file\nfi\n\n\n\n\n\n\n\nif 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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p \"$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\ntest -z \"$STRIP\" && STRIP=:\n\n\n\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 ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p \"$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\ntest -z \"$RANLIB\" && RANLIB=:\n\n\n\n\n\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$tool_oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$tool_oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$tool_oldlib\"\nfi\n\ncase $host_os in\n  darwin*)\n    lock_old_archive_extraction=yes ;;\n  *)\n    lock_old_archive_extraction=no ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object\" >&5\n$as_echo_n \"checking command to parse $NM output from $compiler object... \" >&6; }\nif ${lt_cv_sys_global_symbol_pipe+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[BCDEGRST]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([_A-Za-z][_A-Za-z0-9]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[BCDT]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[ABCDGISTW]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[ABCDEGRST]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[BCDEGRST]'\n  ;;\nosf*)\n  symcode='[BCDEGQRST]'\n  ;;\nsolaris*)\n  symcode='[BDRT]'\n  ;;\nsco3.2v5*)\n  symcode='[DT]'\n  ;;\nsysv4.2uw2*)\n  symcode='[DT]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[ABDT]'\n  ;;\nsysv4)\n  symcode='[DFNSTU]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[ABCDGIRSTW]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\)[ ]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([^ ]*\\)[ ]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\(lib[^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK '\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[\t ]\\($symcode$symcode*\\)[\t ][\t ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n  lt_cv_sys_global_symbol_pipe=\"$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist\\\"\"; } >&5\n  (eval $NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT_DLSYM_CONST\n#else\n# define LT_DLSYM_CONST const\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nLT_DLSYM_CONST struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_globsym_save_LIBS=$LIBS\n\t  lt_globsym_save_CFLAGS=$CFLAGS\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$lt_prog_compiler_no_builtin_flag\"\n\t  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=$lt_globsym_save_LIBS\n\t  CFLAGS=$lt_globsym_save_CFLAGS\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&5\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&5\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&5\n    fi\n  else\n    echo \"$progname: failed program was:\" >&5\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n\nfi\n\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: failed\" >&5\n$as_echo \"failed\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nfi\n\n# Response file support.\nif test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n  nm_file_list_spec='@'\nelif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then\n  nm_file_list_spec='@'\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for sysroot\" >&5\n$as_echo_n \"checking for sysroot... \" >&6; }\n\n# Check whether --with-sysroot was given.\nif test \"${with_sysroot+set}\" = set; then :\n  withval=$with_sysroot;\nelse\n  with_sysroot=no\nfi\n\n\nlt_sysroot=\ncase ${with_sysroot} in #(\n yes)\n   if test \"$GCC\" = yes; then\n     lt_sysroot=`$CC --print-sysroot 2>/dev/null`\n   fi\n   ;; #(\n /*)\n   lt_sysroot=`echo \"$with_sysroot\" | sed -e \"$sed_quote_subst\"`\n   ;; #(\n no|'')\n   ;; #(\n *)\n   { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}\" >&5\n$as_echo \"${with_sysroot}\" >&6; }\n   as_fn_error $? \"The sysroot must be an absolute path.\" \"$LINENO\" 5\n   ;;\nesac\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}\" >&5\n$as_echo \"${lt_sysroot:-no}\" >&6; }\n\n\n\n\n\n# Check whether --enable-libtool-lock was given.\nif test \"${enable_libtool_lock+set}\" = set; then :\n  enableval=$enable_libtool_lock;\nfi\n\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '#line '$LINENO' \"configure\"' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    case `/usr/bin/file conftest.o` in\n\t      *x86-64*)\n\t\tLD=\"${LD-ld} -m elf32_x86_64\"\n\t\t;;\n\t      *)\n\t\tLD=\"${LD-ld} -m elf_i386\"\n\t\t;;\n\t    esac\n\t    ;;\n\t  powerpc64le-*)\n\t    LD=\"${LD-ld} -m elf32lppclinux\"\n\t    ;;\n\t  powerpc64-*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  powerpcle-*)\n\t    LD=\"${LD-ld} -m elf64lppc\"\n\t    ;;\n\t  powerpc-*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf\" >&5\n$as_echo_n \"checking whether the C compiler needs -belf... \" >&6; }\nif ${lt_cv_cc_needs_belf+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_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     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_link \"$LINENO\"; then :\n  lt_cv_cc_needs_belf=yes\nelse\n  lt_cv_cc_needs_belf=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n     ac_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\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf\" >&5\n$as_echo \"$lt_cv_cc_needs_belf\" >&6; }\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\n*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*)\n        case $host in\n        i?86-*-solaris*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        sparc*-*-solaris*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n        esac\n        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.\n        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then\n          LD=\"${LD-ld}_sol2\"\n        fi\n        ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}mt\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}mt; 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 ${ac_cv_prog_MANIFEST_TOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$MANIFEST_TOOL\"; then\n  ac_cv_prog_MANIFEST_TOOL=\"$MANIFEST_TOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_MANIFEST_TOOL=\"${ac_tool_prefix}mt\"\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\nMANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL\nif test -n \"$MANIFEST_TOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL\" >&5\n$as_echo \"$MANIFEST_TOOL\" >&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_MANIFEST_TOOL\"; then\n  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL\n  # Extract the first word of \"mt\", so it can be a program name with args.\nset dummy mt; 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 ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_MANIFEST_TOOL\"; then\n  ac_cv_prog_ac_ct_MANIFEST_TOOL=\"$ac_ct_MANIFEST_TOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_MANIFEST_TOOL=\"mt\"\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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL\nif test -n \"$ac_ct_MANIFEST_TOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL\" >&5\n$as_echo \"$ac_ct_MANIFEST_TOOL\" >&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_MANIFEST_TOOL\" = x; then\n    MANIFEST_TOOL=\":\"\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    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL\n  fi\nelse\n  MANIFEST_TOOL=\"$ac_cv_prog_MANIFEST_TOOL\"\nfi\n\ntest -z \"$MANIFEST_TOOL\" && MANIFEST_TOOL=mt\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool\" >&5\n$as_echo_n \"checking if $MANIFEST_TOOL is a manifest tool... \" >&6; }\nif ${lt_cv_path_mainfest_tool+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_path_mainfest_tool=no\n  echo \"$as_me:$LINENO: $MANIFEST_TOOL '-?'\" >&5\n  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out\n  cat conftest.err >&5\n  if $GREP 'Manifest Tool' conftest.out > /dev/null; then\n    lt_cv_path_mainfest_tool=yes\n  fi\n  rm -f conftest*\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool\" >&5\n$as_echo \"$lt_cv_path_mainfest_tool\" >&6; }\nif test \"x$lt_cv_path_mainfest_tool\" != xyes; then\n  MANIFEST_TOOL=:\nfi\n\n\n\n\n\n\n  case $host_os in\n    rhapsody* | darwin*)\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dsymutil\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dsymutil; 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 ${ac_cv_prog_DSYMUTIL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DSYMUTIL\"; then\n  ac_cv_prog_DSYMUTIL=\"$DSYMUTIL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DSYMUTIL=\"${ac_tool_prefix}dsymutil\"\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\nDSYMUTIL=$ac_cv_prog_DSYMUTIL\nif test -n \"$DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL\" >&5\n$as_echo \"$DSYMUTIL\" >&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_DSYMUTIL\"; then\n  ac_ct_DSYMUTIL=$DSYMUTIL\n  # Extract the first word of \"dsymutil\", so it can be a program name with args.\nset dummy dsymutil; 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 ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DSYMUTIL\"; then\n  ac_cv_prog_ac_ct_DSYMUTIL=\"$ac_ct_DSYMUTIL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DSYMUTIL=\"dsymutil\"\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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL\nif test -n \"$ac_ct_DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL\" >&5\n$as_echo \"$ac_ct_DSYMUTIL\" >&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_DSYMUTIL\" = x; then\n    DSYMUTIL=\":\"\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    DSYMUTIL=$ac_ct_DSYMUTIL\n  fi\nelse\n  DSYMUTIL=\"$ac_cv_prog_DSYMUTIL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}nmedit\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}nmedit; 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 ${ac_cv_prog_NMEDIT+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NMEDIT\"; then\n  ac_cv_prog_NMEDIT=\"$NMEDIT\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_NMEDIT=\"${ac_tool_prefix}nmedit\"\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\nNMEDIT=$ac_cv_prog_NMEDIT\nif test -n \"$NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $NMEDIT\" >&5\n$as_echo \"$NMEDIT\" >&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_NMEDIT\"; then\n  ac_ct_NMEDIT=$NMEDIT\n  # Extract the first word of \"nmedit\", so it can be a program name with args.\nset dummy nmedit; 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 ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_NMEDIT\"; then\n  ac_cv_prog_ac_ct_NMEDIT=\"$ac_ct_NMEDIT\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_NMEDIT=\"nmedit\"\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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT\nif test -n \"$ac_ct_NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT\" >&5\n$as_echo \"$ac_ct_NMEDIT\" >&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_NMEDIT\" = x; then\n    NMEDIT=\":\"\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    NMEDIT=$ac_ct_NMEDIT\n  fi\nelse\n  NMEDIT=\"$ac_cv_prog_NMEDIT\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}lipo\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}lipo; 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 ${ac_cv_prog_LIPO+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$LIPO\"; then\n  ac_cv_prog_LIPO=\"$LIPO\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_LIPO=\"${ac_tool_prefix}lipo\"\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\nLIPO=$ac_cv_prog_LIPO\nif test -n \"$LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIPO\" >&5\n$as_echo \"$LIPO\" >&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_LIPO\"; then\n  ac_ct_LIPO=$LIPO\n  # Extract the first word of \"lipo\", so it can be a program name with args.\nset dummy lipo; 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 ${ac_cv_prog_ac_ct_LIPO+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_LIPO\"; then\n  ac_cv_prog_ac_ct_LIPO=\"$ac_ct_LIPO\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_LIPO=\"lipo\"\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_LIPO=$ac_cv_prog_ac_ct_LIPO\nif test -n \"$ac_ct_LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO\" >&5\n$as_echo \"$ac_ct_LIPO\" >&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_LIPO\" = x; then\n    LIPO=\":\"\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    LIPO=$ac_ct_LIPO\n  fi\nelse\n  LIPO=\"$ac_cv_prog_LIPO\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool; 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 ${ac_cv_prog_OTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL\"; then\n  ac_cv_prog_OTOOL=\"$OTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OTOOL=\"${ac_tool_prefix}otool\"\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\nOTOOL=$ac_cv_prog_OTOOL\nif test -n \"$OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL\" >&5\n$as_echo \"$OTOOL\" >&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_OTOOL\"; then\n  ac_ct_OTOOL=$OTOOL\n  # Extract the first word of \"otool\", so it can be a program name with args.\nset dummy otool; 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 ${ac_cv_prog_ac_ct_OTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL\"; then\n  ac_cv_prog_ac_ct_OTOOL=\"$ac_ct_OTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OTOOL=\"otool\"\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_OTOOL=$ac_cv_prog_ac_ct_OTOOL\nif test -n \"$ac_ct_OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL\" >&5\n$as_echo \"$ac_ct_OTOOL\" >&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_OTOOL\" = x; then\n    OTOOL=\":\"\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    OTOOL=$ac_ct_OTOOL\n  fi\nelse\n  OTOOL=\"$ac_cv_prog_OTOOL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool64\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool64; 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 ${ac_cv_prog_OTOOL64+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL64\"; then\n  ac_cv_prog_OTOOL64=\"$OTOOL64\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OTOOL64=\"${ac_tool_prefix}otool64\"\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\nOTOOL64=$ac_cv_prog_OTOOL64\nif test -n \"$OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL64\" >&5\n$as_echo \"$OTOOL64\" >&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_OTOOL64\"; then\n  ac_ct_OTOOL64=$OTOOL64\n  # Extract the first word of \"otool64\", so it can be a program name with args.\nset dummy otool64; 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 ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL64\"; then\n  ac_cv_prog_ac_ct_OTOOL64=\"$ac_ct_OTOOL64\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OTOOL64=\"otool64\"\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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64\nif test -n \"$ac_ct_OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64\" >&5\n$as_echo \"$ac_ct_OTOOL64\" >&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_OTOOL64\" = x; then\n    OTOOL64=\":\"\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    OTOOL64=$ac_ct_OTOOL64\n  fi\nelse\n  OTOOL64=\"$ac_cv_prog_OTOOL64\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag\" >&5\n$as_echo_n \"checking for -single_module linker flag... \" >&6; }\nif ${lt_cv_apple_cc_single_mod+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&5\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\t# If there is a non-empty error log, and \"single_module\"\n\t# appears in it, assume the flag caused a linker warning\n        if test -s conftest.err && $GREP single_module conftest.err; then\n\t  cat conftest.err >&5\n\t# Otherwise, if the output was created with a 0 exit code from\n\t# the compiler, it worked.\n\telif test -f libconftest.dylib && test $_lt_result -eq 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&5\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod\" >&5\n$as_echo \"$lt_cv_apple_cc_single_mod\" >&6; }\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag\" >&5\n$as_echo_n \"checking for -exported_symbols_list linker flag... \" >&6; }\nif ${lt_cv_ld_exported_symbols_list+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\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_link \"$LINENO\"; then :\n  lt_cv_ld_exported_symbols_list=yes\nelse\n  lt_cv_ld_exported_symbols_list=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\tLDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list\" >&5\n$as_echo \"$lt_cv_ld_exported_symbols_list\" >&6; }\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag\" >&5\n$as_echo_n \"checking for -force_load linker flag... \" >&6; }\nif ${lt_cv_ld_force_load+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_force_load=no\n      cat > conftest.c << _LT_EOF\nint forced_loaded() { return 2;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS -c -o conftest.o conftest.c\" >&5\n      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5\n      echo \"$AR cru libconftest.a conftest.o\" >&5\n      $AR cru libconftest.a conftest.o 2>&5\n      echo \"$RANLIB libconftest.a\" >&5\n      $RANLIB libconftest.a 2>&5\n      cat > conftest.c << _LT_EOF\nint main() { return 0;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a\" >&5\n      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err\n      _lt_result=$?\n      if test -s conftest.err && $GREP force_load conftest.err; then\n\tcat conftest.err >&5\n      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then\n\tlt_cv_ld_force_load=yes\n      else\n\tcat conftest.err >&5\n      fi\n        rm -f conftest.err libconftest.a conftest conftest.c\n        rm -rf conftest.dSYM\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load\" >&5\n$as_echo \"$lt_cv_ld_force_load\" >&6; }\n    case $host_os in\n    rhapsody* | darwin1.[012])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[91]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[012]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\" && test \"$lt_cv_ld_force_load\" = \"no\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\n\nfor ac_header in dlfcn.h\ndo :\n  ac_fn_c_check_header_compile \"$LINENO\" \"dlfcn.h\" \"ac_cv_header_dlfcn_h\" \"$ac_includes_default\n\"\nif test \"x$ac_cv_header_dlfcn_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_DLFCN_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n\n\n# Set options\nenable_dlopen=yes\n\n\n\n\n  enable_win32_dll=no\n\n\n\n\n\n# Check whether --with-pic was given.\nif test \"${with_pic+set}\" = set; then :\n  withval=$with_pic; lt_p=${PACKAGE-default}\n    case $withval in\n    yes|no) pic_mode=$withval ;;\n    *)\n      pic_mode=default\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for lt_pkg in $withval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$lt_pkg\" = \"X$lt_p\"; then\n\t  pic_mode=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  pic_mode=default\nfi\n\n\ntest -z \"$pic_mode\" && pic_mode=default\n\n\n\n\n\n\n\n  # Check whether --enable-fast-install was given.\nif test \"${enable_fast_install+set}\" = set; then :\n  enableval=$enable_fast_install; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_fast_install=yes\nfi\n\n\n\n\n\n\n\n\n\n\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for objdir\" >&5\n$as_echo_n \"checking for objdir... \" >&6; }\nif ${lt_cv_objdir+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir\" >&5\n$as_echo \"$lt_cv_objdir\" >&6; }\nobjdir=$lt_cv_objdir\n\n\n\n\n\ncat >>confdefs.h <<_ACEOF\n#define LT_OBJDIR \"$lt_cv_objdir/\"\n_ACEOF\n\n\n\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"$cc_temp\" | $SED \"s%.*/%%; s%^$host_alias-%%\"`\n\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file\" >&5\n$as_echo_n \"checking for ${ac_tool_prefix}file... \" >&6; }\nif ${lt_cv_path_MAGIC_CMD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/${ac_tool_prefix}file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/${ac_tool_prefix}file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n\n\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for file\" >&5\n$as_echo_n \"checking for file... \" >&6; }\nif ${lt_cv_path_MAGIC_CMD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  else\n    MAGIC_CMD=:\n  fi\nfi\n\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\n\nlt_save_CC=\"$CC\"\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# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\nobjext=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n\n\n## CAVEAT EMPTOR:\n## There is no encapsulation within the following macros, do not change\n## the running order or otherwise move them around unless you know exactly\n## what you are doing...\nif test -n \"$compiler\"; then\n\nlt_prog_compiler_no_builtin_flag=\n\nif test \"$GCC\" = yes; then\n  case $cc_basename in\n  nvcc*)\n    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;\n  *)\n    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;\n  esac\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions\" >&5\n$as_echo_n \"checking if $compiler supports -fno-rtti -fno-exceptions... \" >&6; }\nif ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_rtti_exceptions=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"-fno-rtti -fno-exceptions\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_rtti_exceptions=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions\" >&5\n$as_echo \"$lt_cv_prog_compiler_rtti_exceptions\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_rtti_exceptions\" = xyes; then\n    lt_prog_compiler_no_builtin_flag=\"$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions\"\nelse\n    :\nfi\n\nfi\n\n\n\n\n\n\n  lt_prog_compiler_wl=\nlt_prog_compiler_pic=\nlt_prog_compiler_static=\n\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl='-Wl,'\n    lt_prog_compiler_static='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            lt_prog_compiler_pic='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic='-fno-common'\n      ;;\n\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      lt_prog_compiler_static=\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[3-9]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      lt_prog_compiler_pic='-fPIC'\n      ;;\n    esac\n\n    case $cc_basename in\n    nvcc*) # Cuda Compiler Driver 2.2\n      lt_prog_compiler_wl='-Xlinker '\n      if test -n \"$lt_prog_compiler_pic\"; then\n        lt_prog_compiler_pic=\"-Xcompiler $lt_prog_compiler_pic\"\n      fi\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      else\n\tlt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-KPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='--shared'\n\tlt_prog_compiler_static='--static'\n\t;;\n      nagfor*)\n\t# NAG Fortran compiler\n\tlt_prog_compiler_wl='-Wl,-Wl,,'\n\tlt_prog_compiler_pic='-PIC'\n\tlt_prog_compiler_static='-Bstatic'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fpic'\n\tlt_prog_compiler_static='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static='-non_shared'\n        ;;\n      xl* | bgxl* | bgf* | mpixl*)\n\t# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-qpic'\n\tlt_prog_compiler_static='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [1-7].* | *Sun*Fortran*\\ 8.[0-3]*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl=''\n\t  ;;\n\t*Sun\\ F* | *Sun*Fortran*)\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl='-Qoption ld '\n\t  ;;\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl='-Wl,'\n\t  ;;\n        *Intel*\\ [CF]*Compiler*)\n\t  lt_prog_compiler_wl='-Wl,'\n\t  lt_prog_compiler_pic='-fPIC'\n\t  lt_prog_compiler_static='-static'\n\t  ;;\n\t*Portland\\ Group*)\n\t  lt_prog_compiler_wl='-Wl,'\n\t  lt_prog_compiler_pic='-fpic'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    rdos*)\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)\n\tlt_prog_compiler_wl='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl='-Qoption ld '\n      lt_prog_compiler_pic='-PIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic='-Kconform_pic'\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_can_build_shared=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic='-pic'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared=no\n      ;;\n    esac\n  fi\n\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic=\n    ;;\n  *)\n    lt_prog_compiler_pic=\"$lt_prog_compiler_pic -DPIC\"\n    ;;\nesac\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC\" >&5\n$as_echo_n \"checking for $compiler option to produce PIC... \" >&6; }\nif ${lt_cv_prog_compiler_pic+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic\" >&5\n$as_echo \"$lt_cv_prog_compiler_pic\" >&6; }\nlt_prog_compiler_pic=$lt_cv_prog_compiler_pic\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works\" >&5\n$as_echo_n \"checking if $compiler PIC flag $lt_prog_compiler_pic works... \" >&6; }\nif ${lt_cv_prog_compiler_pic_works+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_pic_works=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic -DPIC\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_pic_works=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_pic_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_pic_works\" = xyes; then\n    case $lt_prog_compiler_pic in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic=\" $lt_prog_compiler_pic\" ;;\n     esac\nelse\n    lt_prog_compiler_pic=\n     lt_prog_compiler_can_build_shared=no\nfi\n\nfi\n\n\n\n\n\n\n\n\n\n\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static\\\"\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\n$as_echo_n \"checking if $compiler static flag $lt_tmp_static_flag works... \" >&6; }\nif ${lt_cv_prog_compiler_static_works+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_static_works=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_cv_prog_compiler_static_works=yes\n       fi\n     else\n       lt_cv_prog_compiler_static_works=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_static_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_static_works\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static=\nfi\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif ${lt_cv_prog_compiler_c_o+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif ${lt_cv_prog_compiler_c_o+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links\" >&5\n$as_echo_n \"checking if we can lock with hard links... \" >&6; }\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hard_links\" >&5\n$as_echo \"$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\n$as_echo \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\n$as_echo_n \"checking whether the $compiler linker ($LD) supports shared libraries... \" >&6; }\n\n  runpath_var=\n  allow_undefined_flag=\n  always_export_symbols=no\n  archive_cmds=\n  archive_expsym_cmds=\n  compiler_needs_object=no\n  enable_shared_with_static_runtimes=no\n  export_dynamic_flag_spec=\n  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  hardcode_automatic=no\n  hardcode_direct=no\n  hardcode_direct_absolute=no\n  hardcode_libdir_flag_spec=\n  hardcode_libdir_separator=\n  hardcode_minus_L=no\n  hardcode_shlibpath_var=unsupported\n  inherit_rpath=no\n  link_all_deplibs=unknown\n  module_cmds=\n  module_expsym_cmds=\n  old_archive_from_new_cmds=\n  old_archive_from_expsyms_cmds=\n  thread_safe_flag_spec=\n  whole_archive_flag_spec=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    link_all_deplibs=no\n    ;;\n  esac\n\n  ld_shlibs=yes\n\n  # On some targets, GNU ld is compatible enough with the native linker\n  # that we're better off using the native interface for both.\n  lt_use_gnu_ld_interface=no\n  if test \"$with_gnu_ld\" = yes; then\n    case $host_os in\n      aix*)\n\t# The AIX port of GNU ld has always aspired to compatibility\n\t# with the native linker.  However, as the warning in the GNU ld\n\t# block says, versions before 2.19.5* couldn't really create working\n\t# shared libraries, regardless of the interface used.\n\tcase `$LD -v 2>&1` in\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.19.5*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.[2-9]*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ [3-9]*) ;;\n\t  *)\n\t    lt_use_gnu_ld_interface=yes\n\t    ;;\n\tesac\n\t;;\n      *)\n\tlt_use_gnu_ld_interface=yes\n\t;;\n    esac\n  fi\n\n  if test \"$lt_use_gnu_ld_interface\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n    export_dynamic_flag_spec='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      whole_archive_flag_spec=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      whole_archive_flag_spec=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[3-9]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.19, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to install binutils\n*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.\n*** You will then need to restart the configuration process.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec='-L$libdir'\n      export_dynamic_flag_spec='${wl}--export-all-symbols'\n      allow_undefined_flag=unsupported\n      always_export_symbols=no\n      enable_shared_with_static_runtimes=yes\n      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS][ ]/s/.*[ ]\\([^ ]*\\)/\\1 DATA/;s/^.*[ ]__nm__\\([^ ]*\\)[ ][^ ]*/\\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    haiku*)\n      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      link_all_deplibs=yes\n      ;;\n\n    interix[3-9]*)\n      hardcode_direct=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=' $pic_flag'\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95* | pgfortran*)\n\t\t\t\t\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  whole_archive_flag_spec=\n\t  tmp_sharedflag='--shared' ;;\n\txl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tnvcc*)\t# Cuda Compiler Driver 2.2\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  compiler_needs_object=yes\n\t  ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  compiler_needs_object=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\tarchive_cmds='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf* | bgf* | bgxlf* | mpixlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'\n\t  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n\t  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        ld_shlibs=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n\t    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec=\n      export_dynamic_flag_spec=\n      whole_archive_flag_spec=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag=unsupported\n      always_export_symbols=yes\n      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\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 && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct=unsupported\n      fi\n      ;;\n\n    aix[4-9]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\t# Also, AIX nm treats weak defined symbols like other global\n\t# defined symbols, whereas GNU nm marks them as \"W\".\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds=''\n      hardcode_direct=yes\n      hardcode_direct_absolute=yes\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      file_list_spec='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  hardcode_direct=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  hardcode_minus_L=yes\n\t  hardcode_libdir_flag_spec='-L$libdir'\n\t  hardcode_libdir_separator=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\tlink_all_deplibs=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      export_dynamic_flag_spec='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\n        if test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  if ${lt_cv_aix_libpath_+:} false; 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\nif ac_fn_c_try_link \"$LINENO\"; then :\n\n  lt_aix_libpath_sed='\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }'\n  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=\"/usr/lib:/lib\"\n  fi\n\nfi\n\n  aix_libpath=$lt_cv_aix_libpath_\nfi\n\n        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag=\"-z nodefs\"\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\n\t if test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  if ${lt_cv_aix_libpath_+:} false; 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\nif ac_fn_c_try_link \"$LINENO\"; then :\n\n  lt_aix_libpath_sed='\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }'\n  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=\"/usr/lib:/lib\"\n  fi\n\nfi\n\n  aix_libpath=$lt_cv_aix_libpath_\nfi\n\n\t hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag=' ${wl}-bernotok'\n\t  allow_undefined_flag=' ${wl}-berok'\n\t  if test \"$with_gnu_ld\" = yes; then\n\t    # We only use this code for GNU lds that support --whole-archive.\n\t    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t  else\n\t    # Exported symbols can be pulled into shared objects from archives\n\t    whole_archive_flag_spec='$convenience'\n\t  fi\n\t  archive_cmds_need_lc=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      case $cc_basename in\n      cl*)\n\t# Native MSVC\n\thardcode_libdir_flag_spec=' '\n\tallow_undefined_flag=unsupported\n\talways_export_symbols=yes\n\tfile_list_spec='@'\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\tarchive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t    sed -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t  else\n\t    sed -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t  fi~\n\t  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t  linknames='\n\t# The linker will not automatically build a static lib if we build a DLL.\n\t# _LT_TAGVAR(old_archive_from_new_cmds, )='true'\n\tenable_shared_with_static_runtimes=yes\n\texclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n\texport_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS][ ]/s/.*[ ]\\([^ ]*\\)/\\1,DATA/'\\'' | $SED -e '\\''/^[AITW][ ]/s/.*[ ]//'\\'' | sort | uniq > $export_symbols'\n\t# Don't use ranlib\n\told_postinstall_cmds='chmod 644 $oldlib'\n\tpostlink_cmds='lt_outputfile=\"@OUTPUT@\"~\n\t  lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t  case $lt_outputfile in\n\t    *.exe|*.EXE) ;;\n\t    *)\n\t      lt_outputfile=\"$lt_outputfile.exe\"\n\t      lt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t      ;;\n\t  esac~\n\t  if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t    $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t    $RM \"$lt_outputfile.manifest\";\n\t  fi'\n\t;;\n      *)\n\t# Assume MSVC wrapper\n\thardcode_libdir_flag_spec=' '\n\tallow_undefined_flag=unsupported\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\tarchive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all \"$deplibs\" | $SED '\\''s/ -lc$//'\\''` -link -dll~linknames='\n\t# The linker will automatically build a .lib file if we build a DLL.\n\told_archive_from_new_cmds='true'\n\t# FIXME: Should let the user specify the lib program.\n\told_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'\n\tenable_shared_with_static_runtimes=yes\n\t;;\n      esac\n      ;;\n\n    darwin* | rhapsody*)\n\n\n  archive_cmds_need_lc=no\n  hardcode_direct=no\n  hardcode_automatic=yes\n  hardcode_shlibpath_var=unsupported\n  if test \"$lt_cv_ld_force_load\" = \"yes\"; then\n    whole_archive_flag_spec='`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience ${wl}-force_load,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"`'\n\n  else\n    whole_archive_flag_spec=''\n  fi\n  link_all_deplibs=yes\n  allow_undefined_flag=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=func_echo_all\n    archive_cmds=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    module_cmds=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    archive_expsym_cmds=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    module_expsym_cmds=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n\n  else\n  ld_shlibs=no\n  fi\n\n      ;;\n\n    dgux*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2.*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_direct=yes\n\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      export_dynamic_flag_spec='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tarchive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\thardcode_direct=yes\n\thardcode_direct_absolute=yes\n\texport_dynamic_flag_spec='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\n\t  # Older versions of the 11.00 compiler do not understand -b yet\n\t  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $CC understands -b\" >&5\n$as_echo_n \"checking if $CC understands -b... \" >&6; }\nif ${lt_cv_prog_compiler__b+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler__b=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS -b\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_cv_prog_compiler__b=yes\n       fi\n     else\n       lt_cv_prog_compiler__b=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b\" >&5\n$as_echo \"$lt_cv_prog_compiler__b\" >&6; }\n\nif test x\"$lt_cv_prog_compiler__b\" = xyes; then\n    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\nelse\n    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\nfi\n\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_direct=no\n\t  hardcode_shlibpath_var=no\n\t  ;;\n\t*)\n\t  hardcode_direct=yes\n\t  hardcode_direct_absolute=yes\n\t  export_dynamic_flag_spec='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n\t# This should be the same for all languages, so no per-tag cache variable.\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol\" >&5\n$as_echo_n \"checking whether the $host_os linker accepts -exported_symbol... \" >&6; }\nif ${lt_cv_irix_exported_symbol+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  save_LDFLAGS=\"$LDFLAGS\"\n\t   LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n\t   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nint foo (void) { return 0; }\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  lt_cv_irix_exported_symbol=yes\nelse\n  lt_cv_irix_exported_symbol=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n           LDFLAGS=\"$save_LDFLAGS\"\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol\" >&5\n$as_echo \"$lt_cv_irix_exported_symbol\" >&6; }\n\tif test \"$lt_cv_irix_exported_symbol\" = yes; then\n          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n\tfi\n      else\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      inherit_rpath=yes\n      link_all_deplibs=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    newsos6)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_shlibpath_var=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\thardcode_direct=yes\n\thardcode_shlibpath_var=no\n\thardcode_direct_absolute=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t  export_dynamic_flag_spec='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     hardcode_libdir_flag_spec='-R$libdir'\n\t     ;;\n\t   *)\n\t     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      allow_undefined_flag=unsupported\n      archive_cmds='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec='-rpath $libdir'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_separator=:\n      ;;\n\n    solaris*)\n      no_undefined_flag=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_shlibpath_var=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      link_all_deplibs=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds='$CC -r -o $output$reload_objs'\n\t  hardcode_direct=no\n        ;;\n\tmotorola)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var=no\n      export_dynamic_flag_spec='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)\n      no_undefined_flag='${wl}-z,text'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag='${wl}-z,text'\n      allow_undefined_flag='${wl}-z,nodefs'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-R,$libdir'\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      export_dynamic_flag_spec='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      ld_shlibs=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\texport_dynamic_flag_spec='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ld_shlibs\" >&5\n$as_echo \"$ld_shlibs\" >&6; }\ntest \"$ld_shlibs\" = no && can_build_shared=no\n\nwith_gnu_ld=$with_gnu_ld\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in\" >&5\n$as_echo_n \"checking whether -lc should be explicitly linked in... \" >&6; }\nif ${lt_cv_archive_cmds_need_lc+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  $RM conftest*\n\techo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n\tif { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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; } 2>conftest.err; then\n\t  soname=conftest\n\t  lib=conftest\n\t  libobjs=conftest.$ac_objext\n\t  deplibs=\n\t  wl=$lt_prog_compiler_wl\n\t  pic_flag=$lt_prog_compiler_pic\n\t  compiler_flags=-v\n\t  linker_flags=-v\n\t  verstring=\n\t  output_objdir=.\n\t  libname=conftest\n\t  lt_save_allow_undefined_flag=$allow_undefined_flag\n\t  allow_undefined_flag=\n\t  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\"; } >&5\n  (eval $archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n\t  then\n\t    lt_cv_archive_cmds_need_lc=no\n\t  else\n\t    lt_cv_archive_cmds_need_lc=yes\n\t  fi\n\t  allow_undefined_flag=$lt_save_allow_undefined_flag\n\telse\n\t  cat conftest.err 1>&5\n\tfi\n\t$RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc\" >&5\n$as_echo \"$lt_cv_archive_cmds_need_lc\" >&6; }\n      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics\" >&5\n$as_echo_n \"checking dynamic linker characteristics... \" >&6; }\n\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  case $host_os in\n    mingw* | cegcc*) lt_sed_strip_eq=\"s,=\\([A-Za-z]:\\),\\1,g\" ;;\n    *) lt_sed_strip_eq=\"s,=/,/,g\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e $lt_sed_strip_eq`\n  case $lt_search_path_spec in\n  *\\;*)\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED 's/;/ /g'`\n    ;;\n  *)\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED \"s/$PATH_SEPARATOR/ /g\"`\n    ;;\n  esac\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO \"$lt_tmp_lt_search_path_spec\" | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[lt_foo]++; }\n  if (lt_freq[lt_foo] == 1) { print lt_foo; }\n}'`\n  # AWK program above erroneously prepends '/' to C:/dos/paths\n  # for these hosts.\n  case $host_os in\n    mingw* | cegcc*) lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" |\\\n      $SED 's,/\\([A-Za-z]:\\),\\1,g'` ;;\n  esac\n  sys_lib_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $lt_NL2SP`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[4-9]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all \"$lib\" | $SED '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$cc_basename in\n  yes,*)\n    # gcc\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n\n      sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/lib/w32api\"\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    dynamic_linker='Win32 ld.exe'\n    ;;\n\n  *,cl*)\n    # Native MSVC\n    libname_spec='$name'\n    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n    library_names_spec='${libname}.dll.lib'\n\n    case $build_os in\n    mingw*)\n      sys_lib_search_path_spec=\n      lt_save_ifs=$IFS\n      IFS=';'\n      for lt_path in $LIB\n      do\n        IFS=$lt_save_ifs\n        # Let DOS variable expansion print the short 8.3 style file name.\n        lt_path=`cd \"$lt_path\" 2>/dev/null && cmd //C \"for %i in (\".\") do @echo %~si\"`\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec $lt_path\"\n      done\n      IFS=$lt_save_ifs\n      # Convert to MSYS style.\n      sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | sed -e 's|\\\\\\\\|/|g' -e 's| \\\\([a-zA-Z]\\\\):| /\\\\1|g' -e 's|^ ||'`\n      ;;\n    cygwin*)\n      # Convert to unix form, then to dos form, then back to unix form\n      # but this time dos style (no spaces!) so that the unix form looks\n      # like /cygdrive/c/PROGRA~1:/cygdr...\n      sys_lib_search_path_spec=`cygpath --path --unix \"$LIB\"`\n      sys_lib_search_path_spec=`cygpath --path --dos \"$sys_lib_search_path_spec\" 2>/dev/null`\n      sys_lib_search_path_spec=`cygpath --path --unix \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      ;;\n    *)\n      sys_lib_search_path_spec=\"$LIB\"\n      if $ECHO \"$sys_lib_search_path_spec\" | $GREP ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      # FIXME: find the short name or the path components, as spaces are\n      # common. (e.g. \"Program Files\" -> \"PROGRA~1\")\n      ;;\n    esac\n\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n    dynamic_linker='Win32 link.exe'\n    ;;\n\n  *)\n    # Assume MSVC wrapper\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    dynamic_linker='Win32 ld.exe'\n    ;;\n  esac\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[23].*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2.*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\nhaiku*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  dynamic_linker=\"$host_os runtime_loader\"\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...\n  postinstall_cmds='chmod 555 $lib'\n  # or fails outright, so override atomically:\n  install_override_mode=555\n  ;;\n\ninterix[3-9]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux # correct to gnu/linux during the next big refactor\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n\n  # Some binutils ld are patched to set DT_RUNPATH\n  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_shlibpath_overrides_runpath=no\n    save_LDFLAGS=$LDFLAGS\n    save_libdir=$libdir\n    eval \"libdir=/foo; wl=\\\"$lt_prog_compiler_wl\\\"; \\\n\t LDFLAGS=\\\"\\$LDFLAGS $hardcode_libdir_flag_spec\\\"\"\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_link \"$LINENO\"; then :\n  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null; then :\n  lt_cv_shlibpath_overrides_runpath=yes\nfi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n    LDFLAGS=$save_LDFLAGS\n    libdir=$save_libdir\n\nfi\n\n  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/\"//g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux # correct to gnu/linux during the next big refactor\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $dynamic_linker\" >&5\n$as_echo \"$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs\" >&5\n$as_echo_n \"checking how to hardcode library paths into programs... \" >&6; }\nhardcode_action=\nif test -n \"$hardcode_libdir_flag_spec\" ||\n   test -n \"$runpath_var\" ||\n   test \"X$hardcode_automatic\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$hardcode_direct\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, )\" != no &&\n     test \"$hardcode_minus_L\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action=unsupported\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hardcode_action\" >&5\n$as_echo \"$hardcode_action\" >&6; }\n\nif test \"$hardcode_action\" = relink ||\n   test \"$inherit_rpath\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n\n\n\n\n  if test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif ${ac_cv_lib_dl_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n\nfi\n\n    ;;\n\n  *)\n    ac_fn_c_check_func \"$LINENO\" \"shl_load\" \"ac_cv_func_shl_load\"\nif test \"x$ac_cv_func_shl_load\" = xyes; then :\n  lt_cv_dlopen=\"shl_load\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld\" >&5\n$as_echo_n \"checking for shl_load in -ldld... \" >&6; }\nif ${ac_cv_lib_dld_shl_load+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 shl_load ();\nint\nmain ()\n{\nreturn shl_load ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_shl_load=yes\nelse\n  ac_cv_lib_dld_shl_load=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_dld_shl_load\" >&5\n$as_echo \"$ac_cv_lib_dld_shl_load\" >&6; }\nif test \"x$ac_cv_lib_dld_shl_load\" = xyes; then :\n  lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"\nelse\n  ac_fn_c_check_func \"$LINENO\" \"dlopen\" \"ac_cv_func_dlopen\"\nif test \"x$ac_cv_func_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif ${ac_cv_lib_dl_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld\" >&5\n$as_echo_n \"checking for dlopen in -lsvld... \" >&6; }\nif ${ac_cv_lib_svld_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsvld  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_svld_dlopen=yes\nelse\n  ac_cv_lib_svld_dlopen=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_svld_dlopen\" >&5\n$as_echo \"$ac_cv_lib_svld_dlopen\" >&6; }\nif test \"x$ac_cv_lib_svld_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld\" >&5\n$as_echo_n \"checking for dld_link in -ldld... \" >&6; }\nif ${ac_cv_lib_dld_dld_link+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 dld_link ();\nint\nmain ()\n{\nreturn dld_link ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_dld_link=yes\nelse\n  ac_cv_lib_dld_dld_link=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_dld_dld_link\" >&5\n$as_echo \"$ac_cv_lib_dld_dld_link\" >&6; }\nif test \"x$ac_cv_lib_dld_dld_link\" = xyes; then :\n  lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself\" >&5\n$as_echo_n \"checking whether a program can dlopen itself... \" >&6; }\nif ${lt_cv_dlopen_self+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self\" >&5\n$as_echo \"$lt_cv_dlopen_self\" >&6; }\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself\" >&5\n$as_echo_n \"checking whether a statically linked program can dlopen itself... \" >&6; }\nif ${lt_cv_dlopen_self_static+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self_static=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self_static=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static\" >&5\n$as_echo \"$lt_cv_dlopen_self_static\" >&6; }\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nstriplib=\nold_striplib=\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible\" >&5\n$as_echo_n \"checking whether stripping libraries is possible... \" >&6; }\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    fi\n    ;;\n  *)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n  # Report which library types will actually be built\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries\" >&5\n$as_echo_n \"checking if libtool supports shared libraries... \" >&6; }\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $can_build_shared\" >&5\n$as_echo \"$can_build_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries\" >&5\n$as_echo_n \"checking whether to build shared libraries... \" >&6; }\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[4-9]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_shared\" >&5\n$as_echo \"$enable_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build static libraries\" >&5\n$as_echo_n \"checking whether to build static libraries... \" >&6; }\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_static\" >&5\n$as_echo \"$enable_static\" >&6; }\n\n\n\n\nfi\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\nCC=\"$lt_save_CC\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n        ac_config_commands=\"$ac_config_commands libtool\"\n\n\n\n\n# Only expand once:\n\n\n\n# Check whether --enable-system-shared-lib was given.\nif test \"${enable_system_shared_lib+set}\" = set; then :\n  enableval=$enable_system_shared_lib;\n    case \"${enableval}\" in\n      yes) enable_system_shared_lib=true ;;\n      no) enable_system_shared_lib=false ;;\n      *) as_fn_error $? \"bad value ${enableval} for --enable-system-shared-lib\" \"$LINENO\" 5 ;;\n    esac\nelse\n  enable_system_shared_lib=false\nfi\n\n if test x$enable_system_shared_lib = xtrue; then\n  USE_SYSTEM_SHARED_LIB_TRUE=\n  USE_SYSTEM_SHARED_LIB_FALSE='#'\nelse\n  USE_SYSTEM_SHARED_LIB_TRUE='#'\n  USE_SYSTEM_SHARED_LIB_FALSE=\nfi\n\n\n\n# Check whether --with-crypto-library was given.\nif test \"${with_crypto_library+set}\" = set; then :\n  withval=$with_crypto_library;\n    case \"${withval}\" in\n      openssl|polarssl|mbedtls) ;;\n      *) as_fn_error $? \"bad value ${withval} for --with-crypto-library\" \"$LINENO\" 5 ;;\n    esac\n\nelse\n  with_crypto_library=\"openssl\"\n\nfi\n\n\n# Check whether --enable-documentation was given.\nif test \"${enable_documentation+set}\" = set; then :\n  enableval=$enable_documentation; disable_documentation=true\nelse\n  disable_documentation=false\nfi\n\n if test x$disable_documentation = xfalse; then\n  ENABLE_DOCUMENTATION_TRUE=\n  ENABLE_DOCUMENTATION_FALSE='#'\nelse\n  ENABLE_DOCUMENTATION_TRUE='#'\n  ENABLE_DOCUMENTATION_FALSE=\nfi\n\n\nif test -z \"$ENABLE_DOCUMENTATION_TRUE\"; then :\n\n  # Extract the first word of \"asciidoc\", so it can be a program name with args.\nset dummy asciidoc; 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 ${ac_cv_path_ASCIIDOC+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $ASCIIDOC in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_ASCIIDOC=\"$ASCIIDOC\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_path_ASCIIDOC=\"$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_ASCIIDOC\" && ac_cv_path_ASCIIDOC=\"asciidoc\"\n  ;;\nesac\nfi\nASCIIDOC=$ac_cv_path_ASCIIDOC\nif test -n \"$ASCIIDOC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ASCIIDOC\" >&5\n$as_echo \"$ASCIIDOC\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  # Extract the first word of \"xmlto\", so it can be a program name with args.\nset dummy xmlto; 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 ${ac_cv_path_XMLTO+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $XMLTO in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_XMLTO=\"$XMLTO\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_path_XMLTO=\"$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_XMLTO\" && ac_cv_path_XMLTO=\"xmlto\"\n  ;;\nesac\nfi\nXMLTO=$ac_cv_path_XMLTO\nif test -n \"$XMLTO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $XMLTO\" >&5\n$as_echo \"$XMLTO\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  # Extract the first word of \"gzip\", so it can be a program name with args.\nset dummy gzip; 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 ${ac_cv_path_GZIP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $GZIP in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_GZIP=\"$GZIP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_path_GZIP=\"$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_GZIP\" && ac_cv_path_GZIP=\"gzip\"\n  ;;\nesac\nfi\nGZIP=$ac_cv_path_GZIP\nif test -n \"$GZIP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $GZIP\" >&5\n$as_echo \"$GZIP\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  # Extract the first word of \"rm\", so it can be a program name with args.\nset dummy rm; 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 ${ac_cv_path_RM+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $RM in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_RM=\"$RM\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_path_RM=\"$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_RM\" && ac_cv_path_RM=\"rm\"\n  ;;\nesac\nfi\nRM=$ac_cv_path_RM\nif test -n \"$RM\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $RM\" >&5\n$as_echo \"$RM\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  # Extract the first word of \"mv\", so it can be a program name with args.\nset dummy mv; 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 ${ac_cv_path_MV+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MV in\n  [\\\\/]* | ?:[\\\\/]*)\n  ac_cv_path_MV=\"$MV\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_path_MV=\"$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_MV\" && ac_cv_path_MV=\"mv\"\n  ;;\nesac\nfi\nMV=$ac_cv_path_MV\nif test -n \"$MV\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MV\" >&5\n$as_echo \"$MV\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output\" >&5\n$as_echo_n \"checking for a sed that does not truncate output... \" >&6; }\nif ${ac_cv_path_SED+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/\n     for ac_i in 1 2 3 4 5 6 7; do\n       ac_script=\"$ac_script$as_nl$ac_script\"\n     done\n     echo \"$ac_script\" 2>/dev/null | sed 99q >conftest.sed\n     { ac_script=; unset ac_script;}\n     if test -z \"$SED\"; then\n  ac_path_SED_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\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_SED=\"$as_dir/$ac_prog$ac_exec_ext\"\n      as_fn_executable_p \"$ac_path_SED\" || continue\n# Check for GNU ac_path_SED and select it if it is found.\n  # Check for GNU $ac_path_SED\ncase `\"$ac_path_SED\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_SED=\"$ac_path_SED\" ac_path_SED_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 '' >> \"conftest.nl\"\n    \"$ac_path_SED\" -f conftest.sed < \"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_SED_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_SED=\"$ac_path_SED\"\n      ac_path_SED_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_SED_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_SED\"; then\n    as_fn_error $? \"no acceptable sed could be found in \\$PATH\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_SED=$SED\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED\" >&5\n$as_echo \"$ac_cv_path_SED\" >&6; }\n SED=\"$ac_cv_path_SED\"\n  rm -f conftest.sed\n\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\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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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\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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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>\nstruct stat;\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\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 whether $CC understands -c and -o together\" >&5\n$as_echo_n \"checking whether $CC understands -c and -o together... \" >&6; }\nif ${am_cv_prog_cc_c_o+:} false; 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  # Following AC_PROG_CC_C_O, we do the test twice because some\n  # compilers refuse to overwrite an existing .o file with -o,\n  # though they will create one.\n  am_cv_prog_cc_c_o=yes\n  for am_i in 1 2; do\n    if { echo \"$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext\" >&5\n   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); } \\\n         && test -f conftest2.$ac_objext; then\n      : OK\n    else\n      am_cv_prog_cc_c_o=no\n      break\n    fi\n  done\n  rm -f core conftest*\n  unset am_i\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o\" >&5\n$as_echo \"$am_cv_prog_cc_c_o\" >&6; }\nif test \"$am_cv_prog_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\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{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ln -s works\" >&5\n$as_echo_n \"checking whether ln -s works... \" >&6; }\nLN_S=$as_ln_s\nif test \"$LN_S\" = \"ln -s\"; 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, using $LN_S\" >&5\n$as_echo \"no, using $LN_S\" >&6; }\nfi\n\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 eval \\${ac_cv_prog_make_${ac_make}_set+:} false; 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\n\n\nif test -z \"$USE_SYSTEM_SHARED_LIB_TRUE\"; then :\n  else\n\nfor ac_header in sys/inotify.h sys/epoll.h sys/event.h port.h poll.h sys/select.h sys/eventfd.h sys/signalfd.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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\nfor ac_func in inotify_init epoll_ctl kqueue port_create poll select eventfd signalfd\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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\nfor ac_func in clock_gettime\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"clock_gettime\" \"ac_cv_func_clock_gettime\"\nif test \"x$ac_cv_func_clock_gettime\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_CLOCK_GETTIME 1\n_ACEOF\n\nelse\n\n      if test $(uname) = Linux; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for clock_gettime syscall\" >&5\n$as_echo_n \"checking for clock_gettime syscall... \" >&6; }\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <unistd.h>\n                       #include <sys/syscall.h>\n                       #include <time.h>\nint\nmain ()\n{\nstruct timespec ts; int status = syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_have_clock_syscall=1\n\n$as_echo \"#define HAVE_CLOCK_SYSCALL 1\" >>confdefs.h\n\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; }\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n   fi\n   if test -z \"$LIBEV_M4_AVOID_LIBRT\" && test -z \"$ac_have_clock_syscall\"; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt\" >&5\n$as_echo_n \"checking for clock_gettime in -lrt... \" >&6; }\nif ${ac_cv_lib_rt_clock_gettime+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lrt  $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\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_rt_clock_gettime=yes\nelse\n  ac_cv_lib_rt_clock_gettime=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_rt_clock_gettime\" >&5\n$as_echo \"$ac_cv_lib_rt_clock_gettime\" >&6; }\nif test \"x$ac_cv_lib_rt_clock_gettime\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_LIBRT 1\n_ACEOF\n\n  LIBS=\"-lrt $LIBS\"\n\nfi\n\n      unset ac_cv_func_clock_gettime\n      for ac_func in clock_gettime\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"clock_gettime\" \"ac_cv_func_clock_gettime\"\nif test \"x$ac_cv_func_clock_gettime\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_CLOCK_GETTIME 1\n_ACEOF\n\nfi\ndone\n\n   fi\n\nfi\ndone\n\n\nfor ac_func in nanosleep\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"nanosleep\" \"ac_cv_func_nanosleep\"\nif test \"x$ac_cv_func_nanosleep\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_NANOSLEEP 1\n_ACEOF\n\nelse\n\n   if test -z \"$LIBEV_M4_AVOID_LIBRT\"; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for nanosleep in -lrt\" >&5\n$as_echo_n \"checking for nanosleep in -lrt... \" >&6; }\nif ${ac_cv_lib_rt_nanosleep+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lrt  $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 nanosleep ();\nint\nmain ()\n{\nreturn nanosleep ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_rt_nanosleep=yes\nelse\n  ac_cv_lib_rt_nanosleep=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_rt_nanosleep\" >&5\n$as_echo \"$ac_cv_lib_rt_nanosleep\" >&6; }\nif test \"x$ac_cv_lib_rt_nanosleep\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_LIBRT 1\n_ACEOF\n\n  LIBS=\"-lrt $LIBS\"\n\nfi\n\n      unset ac_cv_func_nanosleep\n      for ac_func in nanosleep\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"nanosleep\" \"ac_cv_func_nanosleep\"\nif test \"x$ac_cv_func_nanosleep\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_NANOSLEEP 1\n_ACEOF\n\nfi\ndone\n\n   fi\n\nfi\ndone\n\n\nif test -z \"$LIBEV_M4_AVOID_LIBM\"; then\n   LIBM=m\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing floor\" >&5\n$as_echo_n \"checking for library containing floor... \" >&6; }\nif ${ac_cv_search_floor+:} false; 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 floor ();\nint\nmain ()\n{\nreturn floor ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' $LIBM; 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_floor=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if ${ac_cv_search_floor+:} false; then :\n  break\nfi\ndone\nif ${ac_cv_search_floor+:} false; then :\n\nelse\n  ac_cv_search_floor=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_floor\" >&5\n$as_echo \"$ac_cv_search_floor\" >&6; }\nac_res=$ac_cv_search_floor\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\n$as_echo \"#define HAVE_FLOOR 1\" >>confdefs.h\n\nfi\n\n\n\nfi\n\ncase $host in\n  *-mingw*)\n    LIBS=\"$LIBS -ladvapi32 -lgdi32 -lws2_32 -lcrypt32\"\n    ;;\n  *)\n    ;;\nesac\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class\" >&5\n$as_echo_n \"checking for thread local storage (TLS) class... \" >&6; }\n  if ${ac_cv_tls+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  for ax_tls_keyword in __thread '__declspec(thread)' none; do\n       case $ax_tls_keyword in #(\n  none) :\n    ac_cv_tls=none ; break ;; #(\n  *) :\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdlib.h>\n               static void\n               foo(void) {\n               static  $ax_tls_keyword  int bar;\n               exit(1);\n               }\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_tls=$ax_tls_keyword ; break\nelse\n  ac_cv_tls=none\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;;\nesac\n    done\n\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls\" >&5\n$as_echo \"$ac_cv_tls\" >&6; }\n\n  if test \"$ac_cv_tls\" != \"none\"; then :\n\ncat >>confdefs.h <<_ACEOF\n#define TLS $ac_cv_tls\n_ACEOF\n\n     :\nelse\n  :\nfi\n\n\ncase \"${with_crypto_library}\" in\n  openssl)\n\n  # Check whether --enable-zlib was given.\nif test \"${enable_zlib+set}\" = set; then :\n  enableval=$enable_zlib;\nfi\n\n  if test \"x$enable_zlib\" != \"xno\"; then :\n\n\n$as_echo \"#define HAVE_ZLIB 1\" >>confdefs.h\n\n\n# Check whether --with-zlib was given.\nif test \"${with_zlib+set}\" = set; then :\n  withval=$with_zlib; zlib=\"$withval\"\n       CPPFLAGS=\"$CPPFLAGS -I$withval/include\"\n       LDFLAGS=\"$LDFLAGS -L$withval/lib\"\n\nfi\n\n\n\n# Check whether --with-zlib-include was given.\nif test \"${with_zlib_include+set}\" = set; then :\n  withval=$with_zlib_include; zlib_include=\"$withval\"\n       CPPFLAGS=\"$CPPFLAGS -I$withval\"\n\nfi\n\n\n\n# Check whether --with-zlib-lib was given.\nif test \"${with_zlib_lib+set}\" = set; then :\n  withval=$with_zlib_lib; zlib_lib=\"$withval\"\n       LDFLAGS=\"$LDFLAGS -L$withval\"\n\nfi\n\n\n    for ac_header in zlib.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"zlib.h\" \"ac_cv_header_zlib_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_zlib_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_ZLIB_H 1\n_ACEOF\n\nelse\n  as_fn_error $? \"\\\"zlib header files not found.\\\"\" \"$LINENO\" 5; break\n\nfi\n\ndone\n\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for compress2 in -lz\" >&5\n$as_echo_n \"checking for compress2 in -lz... \" >&6; }\nif ${ac_cv_lib_z_compress2+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lz  $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 compress2 ();\nint\nmain ()\n{\nreturn compress2 ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_z_compress2=yes\nelse\n  ac_cv_lib_z_compress2=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_z_compress2\" >&5\n$as_echo \"$ac_cv_lib_z_compress2\" >&6; }\nif test \"x$ac_cv_lib_z_compress2\" = xyes; then :\n  LIBS=\"$LIBS -lz\"\nelse\n  as_fn_error $? \"\\\"zlib libraries not found.\\\"\" \"$LINENO\" 5\n\nfi\n\n\nfi\n\n\n  case $host_os in\n    *mingw*)\n    ;;\n    *)\n      ac_fn_c_check_func \"$LINENO\" \"dlopen\" \"ac_cv_func_dlopen\"\nif test \"x$ac_cv_func_dlopen\" = xyes; then :\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif ${ac_cv_lib_dl_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = xyes; then :\n  LIBS=\"$LIBS -ldl\"\nelse\n  as_fn_error $? \"OpenSSL depends on libdl.\" \"$LINENO\" 5; break\n\nfi\n\n\nfi\n\n    ;;\n  esac\n\n\n# Check whether --with-openssl was given.\nif test \"${with_openssl+set}\" = set; then :\n  withval=$with_openssl; openssl=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"\n\nfi\n\n\n\n# Check whether --with-openssl-include was given.\nif test \"${with_openssl_include+set}\" = set; then :\n  withval=$with_openssl_include; openssl_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"\n\nfi\n\n\n\n# Check whether --with-openssl-lib was given.\nif test \"${with_openssl_lib+set}\" = set; then :\n  withval=$with_openssl_lib; openssl_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"\n\nfi\n\n\n  for ac_header in openssl/evp.h openssl/rsa.h openssl/rand.h openssl/err.h openssl/sha.h openssl/pem.h openssl/engine.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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = x\"yes\"; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nelse\n  as_fn_error $? \"OpenSSL header files not found.\" \"$LINENO\" 5; break\n\nfi\n\ndone\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for EVP_EncryptInit_ex in -lcrypto\" >&5\n$as_echo_n \"checking for EVP_EncryptInit_ex in -lcrypto... \" >&6; }\nif ${ac_cv_lib_crypto_EVP_EncryptInit_ex+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lcrypto  $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 EVP_EncryptInit_ex ();\nint\nmain ()\n{\nreturn EVP_EncryptInit_ex ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_crypto_EVP_EncryptInit_ex=yes\nelse\n  ac_cv_lib_crypto_EVP_EncryptInit_ex=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_crypto_EVP_EncryptInit_ex\" >&5\n$as_echo \"$ac_cv_lib_crypto_EVP_EncryptInit_ex\" >&6; }\nif test \"x$ac_cv_lib_crypto_EVP_EncryptInit_ex\" = xyes; then :\n  LIBS=\"-lcrypto $LIBS\"\nelse\n  as_fn_error $? \"OpenSSL libraries not found.\" \"$LINENO\" 5\n\nfi\n\n\n  for ac_func in RAND_pseudo_bytes EVP_EncryptInit_ex\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = x\"yes\"; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_func\" | $as_tr_cpp` 1\n_ACEOF\n\nelse\n  as_fn_error $? \"Missing OpenSSL functionality, make sure you have installed the latest version.\" \"$LINENO\" 5; break\nfi\ndone\n\n\n  ac_fn_c_check_decl \"$LINENO\" \"OpenSSL_add_all_algorithms\" \"ac_cv_have_decl_OpenSSL_add_all_algorithms\" \"#include <openssl/evp.h>\n\n\"\nif test \"x$ac_cv_have_decl_OpenSSL_add_all_algorithms\" = xyes; then :\n\nelse\n  as_fn_error $? \"Missing OpenSSL functionality, make sure you have installed the latest version.\" \"$LINENO\" 5; break\nfi\n\n\n\n$as_echo \"#define USE_CRYPTO_OPENSSL 1\" >>confdefs.h\n\n    ;;\n  polarssl)\n\n\n\n# Check whether --with-polarssl was given.\nif test \"${with_polarssl+set}\" = set; then :\n  withval=$with_polarssl; polarssl=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"\n\nfi\n\n\n\n# Check whether --with-polarssl-include was given.\nif test \"${with_polarssl_include+set}\" = set; then :\n  withval=$with_polarssl_include; polarssl_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"\n\nfi\n\n\n\n# Check whether --with-polarssl-lib was given.\nif test \"${with_polarssl_lib+set}\" = set; then :\n  withval=$with_polarssl_lib; polarssl_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"\n\nfi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for cipher_init_ctx in -lpolarssl\" >&5\n$as_echo_n \"checking for cipher_init_ctx in -lpolarssl... \" >&6; }\nif ${ac_cv_lib_polarssl_cipher_init_ctx+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lpolarssl  $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 cipher_init_ctx ();\nint\nmain ()\n{\nreturn cipher_init_ctx ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_polarssl_cipher_init_ctx=yes\nelse\n  ac_cv_lib_polarssl_cipher_init_ctx=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_polarssl_cipher_init_ctx\" >&5\n$as_echo \"$ac_cv_lib_polarssl_cipher_init_ctx\" >&6; }\nif test \"x$ac_cv_lib_polarssl_cipher_init_ctx\" = xyes; then :\n  LIBS=\"-lpolarssl $LIBS\"\nelse\n  as_fn_error $? \"PolarSSL libraries not found.\" \"$LINENO\" 5\n\nfi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking polarssl version\" >&5\n$as_echo_n \"checking polarssl version... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <polarssl/version.h>\n\nint\nmain ()\n{\n\n#if POLARSSL_VERSION_NUMBER < 0x01020500\n#error invalid version\n#endif\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nelse\n  as_fn_error $? \"PolarSSL 1.2.5 or newer required\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\n\n$as_echo \"#define USE_CRYPTO_POLARSSL 1\" >>confdefs.h\n\n    ;;\n  mbedtls)\n\n\n\n# Check whether --with-mbedtls was given.\nif test \"${with_mbedtls+set}\" = set; then :\n  withval=$with_mbedtls; mbedtls=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"\n\nfi\n\n\n\n# Check whether --with-mbedtls-include was given.\nif test \"${with_mbedtls_include+set}\" = set; then :\n  withval=$with_mbedtls_include; mbedtls_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"\n\nfi\n\n\n\n# Check whether --with-mbedtls-lib was given.\nif test \"${with_mbedtls_lib+set}\" = set; then :\n  withval=$with_mbedtls_lib; mbedtls_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"\n\nfi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for mbedtls_cipher_setup in -lmbedcrypto\" >&5\n$as_echo_n \"checking for mbedtls_cipher_setup in -lmbedcrypto... \" >&6; }\nif ${ac_cv_lib_mbedcrypto_mbedtls_cipher_setup+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lmbedcrypto  $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 mbedtls_cipher_setup ();\nint\nmain ()\n{\nreturn mbedtls_cipher_setup ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_mbedcrypto_mbedtls_cipher_setup=yes\nelse\n  ac_cv_lib_mbedcrypto_mbedtls_cipher_setup=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_mbedcrypto_mbedtls_cipher_setup\" >&5\n$as_echo \"$ac_cv_lib_mbedcrypto_mbedtls_cipher_setup\" >&6; }\nif test \"x$ac_cv_lib_mbedcrypto_mbedtls_cipher_setup\" = xyes; then :\n  LIBS=\"-lmbedcrypto $LIBS\"\nelse\n  as_fn_error $? \"mbed TLS libraries not found.\" \"$LINENO\" 5\n\nfi\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether mbedtls supports Cipher Feedback mode or not\" >&5\n$as_echo_n \"checking whether mbedtls supports Cipher Feedback mode or not... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <mbedtls/config.h>\n\nint\nmain ()\n{\n\n#ifndef MBEDTLS_CIPHER_MODE_CFB\n#error Cipher Feedback mode a.k.a CFB not supported by your mbed TLS.\n#endif\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nelse\n  as_fn_error $? \"MBEDTLS_CIPHER_MODE_CFB required\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether mbedtls supports the ARC4 stream cipher or not\" >&5\n$as_echo_n \"checking whether mbedtls supports the ARC4 stream cipher or not... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <mbedtls/config.h>\n\nint\nmain ()\n{\n\n#ifndef MBEDTLS_ARC4_C\n#error the ARC4 stream cipher not supported by your mbed TLS.\n#endif\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nelse\n  as_fn_error $? \"MBEDTLS_ARC4_C required\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether mbedtls supports the Blowfish block cipher or not\" >&5\n$as_echo_n \"checking whether mbedtls supports the Blowfish block cipher or not... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <mbedtls/config.h>\n\nint\nmain ()\n{\n\n#ifndef MBEDTLS_BLOWFISH_C\n#error the Blowfish block cipher not supported by your mbed TLS.\n#endif\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nelse\n  as_fn_error $? \"MBEDTLS_BLOWFISH_C required\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether mbedtls supports the Camellia block cipher or not\" >&5\n$as_echo_n \"checking whether mbedtls supports the Camellia block cipher or not... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <mbedtls/config.h>\n\nint\nmain ()\n{\n\n#ifndef MBEDTLS_CAMELLIA_C\n#error the Camellia block cipher not supported by your mbed TLS.\n#endif\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nelse\n  as_fn_error $? \"MBEDTLS_CAMELLIA_C required\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\n\n$as_echo \"#define USE_CRYPTO_MBEDTLS 1\" >>confdefs.h\n\n    ;;\nesac\n\n# Check whether --enable-applecc was given.\nif test \"${enable_applecc+set}\" = set; then :\n  enableval=$enable_applecc;\n    for ac_header in CommonCrypto/CommonCrypto.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"CommonCrypto/CommonCrypto.h\" \"ac_cv_header_CommonCrypto_CommonCrypto_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_CommonCrypto_CommonCrypto_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_COMMONCRYPTO_COMMONCRYPTO_H 1\n_ACEOF\n\nelse\n  as_fn_error $? \"CommonCrypto header files not found.\" \"$LINENO\" 5; break\n\nfi\n\ndone\n\n    for ac_func in CCCryptorCreateWithMode\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"CCCryptorCreateWithMode\" \"ac_cv_func_CCCryptorCreateWithMode\"\nif test \"x$ac_cv_func_CCCryptorCreateWithMode\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_CCCRYPTORCREATEWITHMODE 1\n_ACEOF\n\nelse\n  as_fn_error $? \"CommonCrypto API needs OS X (>= 10.7) and iOS (>= 5.0).\" \"$LINENO\" 5; break\n\nfi\ndone\n\n\n$as_echo \"#define USE_CRYPTO_APPLECC 1\" >>confdefs.h\n\n\n\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword\" >&5\n$as_echo_n \"checking for C/C++ restrict keyword... \" >&6; }\nif ${ac_cv_c_restrict+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_c_restrict=no\n   # The order here caters to the fact that C++ does not require restrict.\n   for ac_kw in __restrict __restrict__ _Restrict restrict; do\n     cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\ntypedef int * int_ptr;\n\tint foo (int_ptr $ac_kw ip) {\n\treturn ip[0];\n       }\nint\nmain ()\n{\nint s[1];\n\tint * $ac_kw t = s;\n\tt[0] = 0;\n\treturn foo(t)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_restrict=$ac_kw\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n     test \"$ac_cv_c_restrict\" != no && break\n   done\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict\" >&5\n$as_echo \"$ac_cv_c_restrict\" >&6; }\n\n case $ac_cv_c_restrict in\n   restrict) ;;\n   no) $as_echo \"#define restrict /**/\" >>confdefs.h\n ;;\n   *)  cat >>confdefs.h <<_ACEOF\n#define restrict $ac_cv_c_restrict\n_ACEOF\n ;;\n esac\n\n\n\n\n  for ac_header in $ac_header_list\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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\n\n\n        HAVE_INET_NTOP=1\n  INET_NTOP_LIB=\n  ss_save_LIBS=$LIBS\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for library containing inet_ntop\" >&5\n$as_echo_n \"checking for library containing inet_ntop... \" >&6; }\nif ${ac_cv_search_inet_ntop+:} false; 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 inet_ntop ();\nint\nmain ()\n{\nreturn inet_ntop ();\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_lib in '' nsl resolv; 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_inet_ntop=$ac_res\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext\n  if ${ac_cv_search_inet_ntop+:} false; then :\n  break\nfi\ndone\nif ${ac_cv_search_inet_ntop+:} false; then :\n\nelse\n  ac_cv_search_inet_ntop=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_inet_ntop\" >&5\n$as_echo \"$ac_cv_search_inet_ntop\" >&6; }\nac_res=$ac_cv_search_inet_ntop\nif test \"$ac_res\" != no; then :\n  test \"$ac_res\" = \"none required\" || LIBS=\"$ac_res $LIBS\"\n\nelse\n  for ac_func in inet_ntop\ndo :\n  ac_fn_c_check_func \"$LINENO\" \"inet_ntop\" \"ac_cv_func_inet_ntop\"\nif test \"x$ac_cv_func_inet_ntop\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_INET_NTOP 1\n_ACEOF\n\nfi\ndone\n\n     if test $ac_cv_func_inet_ntop = no; then\n       HAVE_INET_NTOP=0\n     fi\n\nfi\n\n  LIBS=$ss_save_LIBS\n\n  if test \"$ac_cv_search_inet_ntop\" != \"no\" \\\n     && test \"$ac_cv_search_inet_ntop\" != \"none required\"; then\n    INET_NTOP_LIB=\"$ac_cv_search_inet_ntop\"\n  fi\n\n\n  ac_fn_c_check_decl \"$LINENO\" \"inet_ntop\" \"ac_cv_have_decl_inet_ntop\" \"#include <arpa/inet.h>\n      #if HAVE_NETDB_H\n      # include <netdb.h>\n      #endif\n\n\"\nif test \"x$ac_cv_have_decl_inet_ntop\" = xyes; then :\n  ac_have_decl=1\nelse\n  ac_have_decl=0\nfi\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_DECL_INET_NTOP $ac_have_decl\n_ACEOF\n\n  if test $ac_cv_have_decl_inet_ntop = no; then\n    HAVE_DECL_INET_NTOP=0\n  fi\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for what kind of host\" >&5\n$as_echo_n \"checking for what kind of host... \" >&6; }\ncase $host in\n  *-linux*)\n    os_support=linux\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: Linux\" >&5\n$as_echo \"Linux\" >&6; }\n    ;;\n  *-mingw*)\n\n$as_echo \"#define FD_SETSIZE 2048\" >>confdefs.h\n\n\n$as_echo \"#define EV_FD_TO_WIN32_HANDLE(fd) (fd)\" >>confdefs.h\n\n\n$as_echo \"#define EV_WIN32_HANDLE_TO_FD(handle) (handle)\" >>confdefs.h\n\n\n$as_echo \"#define EV_WIN32_CLOSE_FD(fd) closesocket(fd)\" >>confdefs.h\n\n\n    os_support=mingw\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: MinGW\" >&5\n$as_echo \"MinGW\" >&6; }\n    ;;\n  *)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: transparent proxy does not support for $host\" >&5\n$as_echo \"transparent proxy does not support for $host\" >&6; }\n    ;;\nesac\n\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\nax_pthread_ok=no\n\n# We used to check for pthread.h first, but this fails if pthread.h\n# requires special compiler flags (e.g. on True64 or Sequent).\n# It gets checked for in the link test anyway.\n\n# First of all, check if the user has set any of the PTHREAD_LIBS,\n# etcetera environment variables, and if threads linking works using\n# them:\nif test x\"$PTHREAD_LIBS$PTHREAD_CFLAGS\" != x; then\n        save_CFLAGS=\"$CFLAGS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n        save_LIBS=\"$LIBS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS\" >&5\n$as_echo_n \"checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... \" >&6; }\n        cat 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 pthread_join ();\nint\nmain ()\n{\nreturn pthread_join ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_pthread_ok=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok\" >&5\n$as_echo \"$ax_pthread_ok\" >&6; }\n        if test x\"$ax_pthread_ok\" = xno; then\n                PTHREAD_LIBS=\"\"\n                PTHREAD_CFLAGS=\"\"\n        fi\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\nfi\n\n# We must check for the threads library under a number of different\n# names; the ordering is very important because some systems\n# (e.g. DEC) have both -lpthread and -lpthreads, where one of the\n# libraries is broken (non-POSIX).\n\n# Create a list of thread flags to try.  Items starting with a \"-\" are\n# C compiler flags, and other items are library names, except for \"none\"\n# which indicates that we try without any flags at all, and \"pthread-config\"\n# which is a program returning the flags for the Pth emulation library.\n\nax_pthread_flags=\"pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config\"\n\n# The ordering *is* (sometimes) important.  Some notes on the\n# individual items follow:\n\n# pthreads: AIX (must check this before -lpthread)\n# none: in case threads are in libc; should be tried before -Kthread and\n#       other compiler flags to prevent continual compiler warnings\n# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)\n# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)\n# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)\n# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)\n# -pthreads: Solaris/gcc\n# -mthreads: Mingw32/gcc, Lynx/gcc\n# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it\n#      doesn't hurt to check since this sometimes defines pthreads too;\n#      also defines -D_REENTRANT)\n#      ... -mt is also the pthreads flag for HP/aCC\n# pthread: Linux, etcetera\n# --thread-safe: KAI C++\n# pthread-config: use pthread-config program (for GNU Pth library)\n\ncase ${host_os} in\n        solaris*)\n\n        # On Solaris (at least, for some versions), libc contains stubbed\n        # (non-functional) versions of the pthreads routines, so link-based\n        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/\n        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather\n        # a function called by this macro, so we could check for that, but\n        # who knows whether they'll stub that too in a future libc.)  So,\n        # we'll just look for -pthreads and -lpthread first:\n\n        ax_pthread_flags=\"-pthreads pthread -mt -pthread $ax_pthread_flags\"\n        ;;\nesac\n\n# Clang doesn't consider unrecognized options an error unless we specify\n# -Werror. We throw in some extra Clang-specific options to ensure that\n# this doesn't happen for GCC, which also accepts -Werror.\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags\" >&5\n$as_echo_n \"checking if compiler needs -Werror to reject unknown flags... \" >&6; }\nsave_CFLAGS=\"$CFLAGS\"\nax_pthread_extra_flags=\"-Werror\"\nCFLAGS=\"$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nint foo(void);\nint\nmain ()\n{\nfoo()\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n  ax_pthread_extra_flags=\n                   { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nCFLAGS=\"$save_CFLAGS\"\n\nif test x\"$ax_pthread_ok\" = xno; then\nfor flag in $ax_pthread_flags; do\n\n        case $flag in\n                none)\n                { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags\" >&5\n$as_echo_n \"checking whether pthreads work without any flags... \" >&6; }\n                ;;\n\n                -*)\n                { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag\" >&5\n$as_echo_n \"checking whether pthreads work with $flag... \" >&6; }\n                PTHREAD_CFLAGS=\"$flag\"\n                ;;\n\n                pthread-config)\n                # Extract the first word of \"pthread-config\", so it can be a program name with args.\nset dummy pthread-config; 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 ${ac_cv_prog_ax_pthread_config+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ax_pthread_config\"; then\n  ac_cv_prog_ax_pthread_config=\"$ax_pthread_config\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ax_pthread_config=\"yes\"\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_ax_pthread_config\" && ac_cv_prog_ax_pthread_config=\"no\"\nfi\nfi\nax_pthread_config=$ac_cv_prog_ax_pthread_config\nif test -n \"$ax_pthread_config\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config\" >&5\n$as_echo \"$ax_pthread_config\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n                if test x\"$ax_pthread_config\" = xno; then continue; fi\n                PTHREAD_CFLAGS=\"`pthread-config --cflags`\"\n                PTHREAD_LIBS=\"`pthread-config --ldflags` `pthread-config --libs`\"\n                ;;\n\n                *)\n                { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag\" >&5\n$as_echo_n \"checking for the pthreads library -l$flag... \" >&6; }\n                PTHREAD_LIBS=\"-l$flag\"\n                ;;\n        esac\n\n        save_LIBS=\"$LIBS\"\n        save_CFLAGS=\"$CFLAGS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags\"\n\n        # Check for various functions.  We must include pthread.h,\n        # since some functions may be macros.  (On the Sequent, we\n        # need a special flag -Kthread to make this header compile.)\n        # We check for pthread_join because it is in -lpthread on IRIX\n        # while pthread_create is in libc.  We check for pthread_attr_init\n        # due to DEC craziness with -lpthreads.  We check for\n        # pthread_cleanup_push because it is one of the few pthread\n        # functions on Solaris that doesn't have a non-functional libc stub.\n        # We try pthread_create on general principles.\n        cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <pthread.h>\n                        static void routine(void *a) { a = 0; }\n                        static void *start_routine(void *a) { return a; }\nint\nmain ()\n{\npthread_t th; pthread_attr_t attr;\n                        pthread_create(&th, 0, start_routine, 0);\n                        pthread_join(th, 0);\n                        pthread_attr_init(&attr);\n                        pthread_cleanup_push(routine, 0);\n                        pthread_cleanup_pop(0) /* ; */\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_pthread_ok=yes\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\n\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok\" >&5\n$as_echo \"$ax_pthread_ok\" >&6; }\n        if test \"x$ax_pthread_ok\" = xyes; then\n                break;\n        fi\n\n        PTHREAD_LIBS=\"\"\n        PTHREAD_CFLAGS=\"\"\ndone\nfi\n\n# Various other checks:\nif test \"x$ax_pthread_ok\" = xyes; then\n        save_LIBS=\"$LIBS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        save_CFLAGS=\"$CFLAGS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n\n        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute\" >&5\n$as_echo_n \"checking for joinable pthread attribute... \" >&6; }\n        attr_name=unknown\n        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do\n            cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <pthread.h>\nint\nmain ()\n{\nint attr = $attr; return attr /* ; */\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  attr_name=$attr; break\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n        done\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $attr_name\" >&5\n$as_echo \"$attr_name\" >&6; }\n        if test \"$attr_name\" != PTHREAD_CREATE_JOINABLE; then\n\ncat >>confdefs.h <<_ACEOF\n#define PTHREAD_CREATE_JOINABLE $attr_name\n_ACEOF\n\n        fi\n\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads\" >&5\n$as_echo_n \"checking if more special flags are required for pthreads... \" >&6; }\n        flag=no\n        case ${host_os} in\n            aix* | freebsd* | darwin*) flag=\"-D_THREAD_SAFE\";;\n            osf* | hpux*) flag=\"-D_REENTRANT\";;\n            solaris*)\n            if test \"$GCC\" = \"yes\"; then\n                flag=\"-D_REENTRANT\"\n            else\n                # TODO: What about Clang on Solaris?\n                flag=\"-mt -D_REENTRANT\"\n            fi\n            ;;\n        esac\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $flag\" >&5\n$as_echo \"$flag\" >&6; }\n        if test \"x$flag\" != xno; then\n            PTHREAD_CFLAGS=\"$flag $PTHREAD_CFLAGS\"\n        fi\n\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT\" >&5\n$as_echo_n \"checking for PTHREAD_PRIO_INHERIT... \" >&6; }\nif ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n                cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <pthread.h>\nint\nmain ()\n{\nint i = PTHREAD_PRIO_INHERIT;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_PTHREAD_PRIO_INHERIT=yes\nelse\n  ax_cv_PTHREAD_PRIO_INHERIT=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT\" >&5\n$as_echo \"$ax_cv_PTHREAD_PRIO_INHERIT\" >&6; }\n        if test \"x$ax_cv_PTHREAD_PRIO_INHERIT\" = \"xyes\"; then :\n\n$as_echo \"#define HAVE_PTHREAD_PRIO_INHERIT 1\" >>confdefs.h\n\nfi\n\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\n\n        # More AIX lossage: compile with *_r variant\n        if test \"x$GCC\" != xyes; then\n            case $host_os in\n                aix*)\n                case \"x/$CC\" in #(\n  x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :\n    #handle absolute path differently from PATH based program lookup\n                   case \"x$CC\" in #(\n  x/*) :\n    if as_fn_executable_p ${CC}_r; then :\n  PTHREAD_CC=\"${CC}_r\"\nfi ;; #(\n  *) :\n    for ac_prog in ${CC}_r\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 ${ac_cv_prog_PTHREAD_CC+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$PTHREAD_CC\"; then\n  ac_cv_prog_PTHREAD_CC=\"$PTHREAD_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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_PTHREAD_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\nPTHREAD_CC=$ac_cv_prog_PTHREAD_CC\nif test -n \"$PTHREAD_CC\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC\" >&5\n$as_echo \"$PTHREAD_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 \"$PTHREAD_CC\" && break\ndone\ntest -n \"$PTHREAD_CC\" || PTHREAD_CC=\"$CC\"\n ;;\nesac ;; #(\n  *) :\n     ;;\nesac\n                ;;\n            esac\n        fi\nfi\n\ntest -n \"$PTHREAD_CC\" || PTHREAD_CC=\"$CC\"\n\n\n\n\n\n# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:\nif test x\"$ax_pthread_ok\" = xyes; then\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n            CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n            CC=\"$PTHREAD_CC\"\n        :\nelse\n        ax_pthread_ok=no\n        as_fn_error $? \"Can not find pthreads.  This is required.\" \"$LINENO\" 5\nfi\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\nggl_check_stack_protector_save_CXXFLAGS=\"$CXXFLAGS\"\nggl_check_stack_protector_save_CFLAGS=\"$CFLAGS\"\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if -fstack-protector and -fstack-protector-all are supported.\" >&5\n$as_echo_n \"checking if -fstack-protector and -fstack-protector-all are supported.... \" >&6; }\n\nCXXFLAGS=\"$CXXFLAGS -fstack-protector\"\nCFLAGS=\"$CFLAGS -fstack-protector\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint main() {\n  return 0;\n}\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ggl_check_stack_protector_ok=yes\nelse\n  ggl_check_stack_protector_ok=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nCXXFLAGS=\"$ggl_check_stack_protector_save_CXXFLAGS -fstack-protector-all\"\nCFLAGS=\"$ggl_check_stack_protector_save_CFLAGS -fstack-protector-all\"\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint main() {\n  return 0;\n}\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ggl_check_stack_protector_all_ok=yes\nelse\n  ggl_check_stack_protector_all_ok=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nif test \"x$ggl_check_stack_protector_ok\" = \"xyes\" -a \\\n        \"x$ggl_check_stack_protector_all_ok\" = \"xyes\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n  has_stack_protector=yes\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n  has_stack_protector=no\nfi\n\nCXXFLAGS=\"$ggl_check_stack_protector_save_CXXFLAGS\"\nCFLAGS=\"$ggl_check_stack_protector_save_CFLAGS\"\n\n\n# XXX - disable -fstack-protector due to missing libssp_nonshared\ncase \"$host_os\" in\n     *aix*)\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}: -fstack-protector disabled on AIX\" >&5\n$as_echo \"$as_me: -fstack-protector disabled on AIX\" >&6;}\n\thas_stack_protector=no\n\t;;\n     *sunos*)\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}: -fstack-protector disabled on SunOS\" >&5\n$as_echo \"$as_me: -fstack-protector disabled on SunOS\" >&6;}\n\thas_stack_protector=no\n\t;;\n     *solaris*)\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}: -fstack-protector disabled on Solaris\" >&5\n$as_echo \"$as_me: -fstack-protector disabled on Solaris\" >&6;}\n\thas_stack_protector=no\n\t;;\nesac\n\n# Check whether --enable-ssp was given.\nif test \"${enable_ssp+set}\" = set; then :\n  enableval=$enable_ssp;\n  enable_ssp=\"no\"\n\nelse\n\n  enable_ssp=\"yes\"\n\nfi\n\n\nif test x$has_stack_protector = xyes && test x$enable_ssp = xyes; then\n   CFLAGS=\"$CFLAGS -fstack-protector\"\n   { $as_echo \"$as_me:${as_lineno-$LINENO}: -fstack-protector enabled in CFLAGS\" >&5\n$as_echo \"$as_me: -fstack-protector enabled in CFLAGS\" >&6;}\nfi\n\n if test \"$os_support\" = \"linux\"; then\n  BUILD_REDIRECTOR_TRUE=\n  BUILD_REDIRECTOR_FALSE='#'\nelse\n  BUILD_REDIRECTOR_TRUE='#'\n  BUILD_REDIRECTOR_FALSE=\nfi\n\n if test \"$os_support\" = \"mingw\"; then\n  BUILD_WINCOMPAT_TRUE=\n  BUILD_WINCOMPAT_FALSE='#'\nelse\n  BUILD_WINCOMPAT_TRUE='#'\n  BUILD_WINCOMPAT_FALSE=\nfi\n\n\nfor ac_header in limits.h stdint.h inttypes.h arpa/inet.h fcntl.h langinfo.h locale.h netdb.h netinet/in.h stdlib.h string.h strings.h unistd.h sys/ioctl.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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\nfor ac_header in sys/socket.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/socket.h\" \"ac_cv_header_sys_socket_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_socket_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_SYS_SOCKET_H 1\n_ACEOF\n\nfi\n\ndone\n\nfor ac_header in net/if.h\ndo :\n  ac_fn_c_check_header_compile \"$LINENO\" \"net/if.h\" \"ac_cv_header_net_if_h\" \"\n#include <stdio.h>\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_SYS_SOCKET_H\n# include <sys/socket.h>\n#endif\n\n\"\nif test \"x$ac_cv_header_net_if_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_NET_IF_H 1\n_ACEOF\n\nfi\n\ndone\n\n\ncase $host in\n  *-mingw*)\n\n$as_echo \"#define CONNECT_IN_PROGRESS WSAEWOULDBLOCK\" >>confdefs.h\n\n    for ac_header in windows.h winsock2.h ws2tcpip.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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = x\"yes\"; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nelse\n  as_fn_error $? \"Missing MinGW headers\" \"$LINENO\" 5\nfi\n\ndone\n\n    ;;\n  *-linux*)\n\n$as_echo \"#define CONNECT_IN_PROGRESS EINPROGRESS\" >>confdefs.h\n\n        for ac_header in linux/if.h linux/netfilter_ipv4.h linux/netfilter_ipv6/ip6_tables.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\" \"\n    #if HAVE_LIMITS_H\n    #include <limits.h>\n    #endif\n    /* Netfilter ip(6)tables v1.4.0 has broken headers */\n    #if HAVE_NETINET_IN_H\n    #include <netinet/in.h>\n    #endif\n    #if HAVE_LINUX_IF_H\n    #include <linux/if.h>\n    #endif\n    #if HAVE_SYS_SOCKET_H\n    #include <sys/socket.h>\n    #endif\n\n\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = x\"yes\"; then :\n  cat >>confdefs.h <<_ACEOF\n#define `$as_echo \"HAVE_$ac_header\" | $as_tr_cpp` 1\n_ACEOF\n\nelse\n  as_fn_error $? \"Missing netfilter headers\" \"$LINENO\" 5\nfi\n\ndone\n\n    ;;\n  *)\n    # These are POSIX-like systems using BSD-like sockets API.\n\n$as_echo \"#define CONNECT_IN_PROGRESS EINPROGRESS\" >>confdefs.h\n\n    ;;\nesac\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian\" >&5\n$as_echo_n \"checking whether byte ordering is bigendian... \" >&6; }\nif ${ac_cv_c_bigendian+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_c_bigendian=unknown\n    # See if we're dealing with a universal compiler.\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifndef __APPLE_CC__\n\t       not a universal capable compiler\n\t     #endif\n\t     typedef int dummy;\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n\n\t# Check for potential -arch flags.  It is not universal unless\n\t# there are at least two -arch flags with different values.\n\tac_arch=\n\tac_prev=\n\tfor ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do\n\t if test -n \"$ac_prev\"; then\n\t   case $ac_word in\n\t     i?86 | x86_64 | ppc | ppc64)\n\t       if test -z \"$ac_arch\" || test \"$ac_arch\" = \"$ac_word\"; then\n\t\t ac_arch=$ac_word\n\t       else\n\t\t ac_cv_c_bigendian=universal\n\t\t break\n\t       fi\n\t       ;;\n\t   esac\n\t   ac_prev=\n\t elif test \"x$ac_word\" = \"x-arch\"; then\n\t   ac_prev=arch\n\t fi\n       done\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n    if test $ac_cv_c_bigendian = unknown; then\n      # See if sys/param.h defines the BYTE_ORDER macro.\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\t     #include <sys/param.h>\n\nint\nmain ()\n{\n#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\\n\t\t     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\\n\t\t     && LITTLE_ENDIAN)\n\t      bogus endian macros\n\t     #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  # It does; now see whether it defined to BIG_ENDIAN or not.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\t\t#include <sys/param.h>\n\nint\nmain ()\n{\n#if BYTE_ORDER != BIG_ENDIAN\n\t\t not big endian\n\t\t#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_bigendian=yes\nelse\n  ac_cv_c_bigendian=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\n    fi\n    if test $ac_cv_c_bigendian = unknown; then\n      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <limits.h>\n\nint\nmain ()\n{\n#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)\n\t      bogus endian macros\n\t     #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  # It does; now see whether it defined to _BIG_ENDIAN or not.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <limits.h>\n\nint\nmain ()\n{\n#ifndef _BIG_ENDIAN\n\t\t not big endian\n\t\t#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_bigendian=yes\nelse\n  ac_cv_c_bigendian=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\n    fi\n    if test $ac_cv_c_bigendian = unknown; then\n      # Compile a test program.\n      if test \"$cross_compiling\" = yes; then :\n  # Try to guess by grepping values from an object file.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nshort int ascii_mm[] =\n\t\t  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };\n\t\tshort int ascii_ii[] =\n\t\t  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };\n\t\tint use_ascii (int i) {\n\t\t  return ascii_mm[i] + ascii_ii[i];\n\t\t}\n\t\tshort int ebcdic_ii[] =\n\t\t  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };\n\t\tshort int ebcdic_mm[] =\n\t\t  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };\n\t\tint use_ebcdic (int i) {\n\t\t  return ebcdic_mm[i] + ebcdic_ii[i];\n\t\t}\n\t\textern int foo;\n\nint\nmain ()\n{\nreturn use_ascii (foo) == use_ebcdic (foo);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then\n\t      ac_cv_c_bigendian=yes\n\t    fi\n\t    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then\n\t      if test \"$ac_cv_c_bigendian\" = unknown; then\n\t\tac_cv_c_bigendian=no\n\t      else\n\t\t# finding both strings is unlikely to happen, but who knows?\n\t\tac_cv_c_bigendian=unknown\n\t      fi\n\t    fi\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\n\n\t     /* Are we little or big endian?  From Harbison&Steele.  */\n\t     union\n\t     {\n\t       long int l;\n\t       char c[sizeof (long int)];\n\t     } u;\n\t     u.l = 1;\n\t     return u.c[sizeof (long int) - 1] == 1;\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_c_bigendian=no\nelse\n  ac_cv_c_bigendian=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\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian\" >&5\n$as_echo \"$ac_cv_c_bigendian\" >&6; }\n case $ac_cv_c_bigendian in #(\n   yes)\n     $as_echo \"#define WORDS_BIGENDIAN 1\" >>confdefs.h\n;; #(\n   no)\n      ;; #(\n   universal)\n\n$as_echo \"#define AC_APPLE_UNIVERSAL_BUILD 1\" >>confdefs.h\n\n     ;; #(\n   *)\n     as_fn_error $? \"unknown endianness\n presetting ac_cv_c_bigendian=no (or yes) will help\" \"$LINENO\" 5 ;;\n esac\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for inline\" >&5\n$as_echo_n \"checking for inline... \" >&6; }\nif ${ac_cv_c_inline+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_c_inline=no\nfor ac_kw in inline __inline__ __inline; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifndef __cplusplus\ntypedef int foo_t;\nstatic $ac_kw foo_t static_foo () {return 0; }\n$ac_kw foo_t foo () {return 0; }\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_inline=$ac_kw\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  test \"$ac_cv_c_inline\" != no && break\ndone\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline\" >&5\n$as_echo \"$ac_cv_c_inline\" >&6; }\n\ncase $ac_cv_c_inline in\n  inline | yes) ;;\n  *)\n    case $ac_cv_c_inline in\n      no) ac_val=;;\n      *) ac_val=$ac_cv_c_inline;;\n    esac\n    cat >>confdefs.h <<_ACEOF\n#ifndef __cplusplus\n#define inline $ac_val\n#endif\n_ACEOF\n    ;;\nesac\n\nac_fn_c_check_type \"$LINENO\" \"ssize_t\" \"ac_cv_type_ssize_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_ssize_t\" = xyes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define ssize_t int\n_ACEOF\n\nfi\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to enable assertions\" >&5\n$as_echo_n \"checking whether to enable assertions... \" >&6; }\n  # Check whether --enable-assert was given.\nif test \"${enable_assert+set}\" = set; then :\n  enableval=$enable_assert; ac_enable_assert=$enableval\n     if       test \"x$enableval\" = xno; then :\n\n$as_echo \"#define NDEBUG 1\" >>confdefs.h\n\nelif test \"x$enableval\" != xyes; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert\" >&5\n$as_echo \"$as_me: WARNING: invalid argument supplied to --enable-assert\" >&2;}\n\tac_enable_assert=yes\nfi\nelse\n  ac_enable_assert=yes\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_enable_assert\" >&5\n$as_echo \"$ac_enable_assert\" >&6; }\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 ${ac_cv_header_stdc+:} false; 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{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible\" >&5\n$as_echo_n \"checking for sys/wait.h that is POSIX.1 compatible... \" >&6; }\nif ${ac_cv_header_sys_wait_h+:} false; 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>\n#ifndef WEXITSTATUS\n# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)\n#endif\n#ifndef WIFEXITED\n# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)\n#endif\n\nint\nmain ()\n{\n  int s;\n  wait (&s);\n  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_header_sys_wait_h=yes\nelse\n  ac_cv_header_sys_wait_h=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_sys_wait_h\" >&5\n$as_echo \"$ac_cv_header_sys_wait_h\" >&6; }\nif test $ac_cv_header_sys_wait_h = yes; then\n\n$as_echo \"#define HAVE_SYS_WAIT_H 1\" >>confdefs.h\n\nfi\n\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 ${ac_cv_c_const+:} false; 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#ifndef __cplusplus\n  /* Ultrix mips cc rejects this sort of thing.  */\n  typedef int charset[2];\n  const charset cs = { 0, 0 };\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 sort of thing.  */\n    char tx;\n    char *t = &tx;\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 sort of thing, 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]; } bx;\n    struct s *b = &bx; 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\nac_fn_c_check_type \"$LINENO\" \"pid_t\" \"ac_cv_type_pid_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_pid_t\" = xyes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define pid_t int\n_ACEOF\n\nfi\n\nac_fn_c_check_type \"$LINENO\" \"size_t\" \"ac_cv_type_size_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_size_t\" = xyes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define size_t unsigned int\n_ACEOF\n\nfi\n\nac_fn_c_check_type \"$LINENO\" \"ssize_t\" \"ac_cv_type_ssize_t\" \"$ac_includes_default\"\nif test \"x$ac_cv_type_ssize_t\" = xyes; then :\n\nelse\n\ncat >>confdefs.h <<_ACEOF\n#define ssize_t int\n_ACEOF\n\nfi\n\nac_fn_c_find_uintX_t \"$LINENO\" \"16\" \"ac_cv_c_uint16_t\"\ncase $ac_cv_c_uint16_t in #(\n  no|yes) ;; #(\n  *)\n\n\ncat >>confdefs.h <<_ACEOF\n#define uint16_t $ac_cv_c_uint16_t\n_ACEOF\n;;\n  esac\n\nac_fn_c_find_uintX_t \"$LINENO\" \"8\" \"ac_cv_c_uint8_t\"\ncase $ac_cv_c_uint8_t in #(\n  no|yes) ;; #(\n  *)\n\n$as_echo \"#define _UINT8_T 1\" >>confdefs.h\n\n\ncat >>confdefs.h <<_ACEOF\n#define uint8_t $ac_cv_c_uint8_t\n_ACEOF\n;;\n  esac\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 ${ac_cv_header_time+:} false; 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\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\" = xyes; 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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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 ${ac_cv_func_fork_works+:} false; 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 ${ac_cv_func_vfork_works+:} false; 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_header in sys/select.h sys/socket.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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking types of arguments for select\" >&5\n$as_echo_n \"checking types of arguments for select... \" >&6; }\nif ${ac_cv_func_select_args+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  for ac_arg234 in 'fd_set *' 'int *' 'void *'; do\n for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do\n  for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do\n   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\n#ifdef HAVE_SYS_SELECT_H\n# include <sys/select.h>\n#endif\n#ifdef HAVE_SYS_SOCKET_H\n# include <sys/socket.h>\n#endif\n\nint\nmain ()\n{\nextern int select ($ac_arg1,\n\t\t\t\t\t    $ac_arg234, $ac_arg234, $ac_arg234,\n\t\t\t\t\t    $ac_arg5);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_func_select_args=\"$ac_arg1,$ac_arg234,$ac_arg5\"; break 3\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  done\n done\ndone\n# Provide a safe default value.\n: \"${ac_cv_func_select_args=int,int *,struct timeval *}\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args\" >&5\n$as_echo \"$ac_cv_func_select_args\" >&6; }\nac_save_IFS=$IFS; IFS=','\nset dummy `echo \"$ac_cv_func_select_args\" | sed 's/\\*/\\*/g'`\nIFS=$ac_save_IFS\nshift\n\ncat >>confdefs.h <<_ACEOF\n#define SELECT_TYPE_ARG1 $1\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define SELECT_TYPE_ARG234 ($2)\n_ACEOF\n\n\ncat >>confdefs.h <<_ACEOF\n#define SELECT_TYPE_ARG5 ($3)\n_ACEOF\n\nrm -f conftest*\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 ${ac_cv_type_signal+:} false; 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\nfor ac_func in memset select setresuid setreuid strerror getpwnam_r setrlimit\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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_select\" != \"yes\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for select in ws2_32\" >&5\n$as_echo_n \"checking for select in ws2_32... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#ifdef HAVE_WINSOCK2_H\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <winsock2.h>\n#endif\n\nint\nmain ()\n{\n\n      select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n      HAVE_SELECT=\"1\"\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_SELECT 1\n_ACEOF\n\n      HAVE_SYS_SELECT_H=\"1\"\n\ncat >>confdefs.h <<_ACEOF\n#define HAVE_SYS_SELECT_H 1\n_ACEOF\n\n\nelse\n\n      as_fn_error $? \"no\" \"$LINENO\" 5\n\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket\" >&5\n$as_echo_n \"checking for connect in -lsocket... \" >&6; }\nif ${ac_cv_lib_socket_connect+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsocket  $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 connect ();\nint\nmain ()\n{\nreturn connect ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_socket_connect=yes\nelse\n  ac_cv_lib_socket_connect=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_connect\" >&5\n$as_echo \"$ac_cv_lib_socket_connect\" >&6; }\nif test \"x$ac_cv_lib_socket_connect\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_LIBSOCKET 1\n_ACEOF\n\n  LIBS=\"-lsocket $LIBS\"\n\nfi\n\n\nfor ac_func in malloc memset socket\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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\n\n$as_echo \"#define HAVE_IPv6 1\" >>confdefs.h\n\n\n\n\nif test -z \"$USE_SYSTEM_SHARED_LIB_TRUE\"; then :\n  else\n  subdirs=\"$subdirs libsodium\"\n\nfi\n\nac_config_files=\"$ac_config_files shadowsocks-libev.pc Makefile libcork/Makefile libipset/Makefile src/Makefile\"\n\nif test -z \"$USE_SYSTEM_SHARED_LIB_TRUE\"; then :\n  else\n  ac_config_files=\"$ac_config_files libudns/Makefile libev/Makefile\"\n\nfi\n\nif test -z \"$ENABLE_DOCUMENTATION_TRUE\"; then :\n  ac_config_files=\"$ac_config_files doc/Makefile\"\n\n\nfi\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    if test \"x$cache_file\" != \"x/dev/null\"; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: updating cache $cache_file\" >&5\n$as_echo \"$as_me: updating cache $cache_file\" >&6;}\n      if test ! -f \"$cache_file\" || test -h \"$cache_file\"; then\n\tcat confcache >\"$cache_file\"\n      else\n        case $cache_file in #(\n        */* | ?:*)\n\t  mv -f confcache \"$cache_file\"$$ &&\n\t  mv -f \"$cache_file\"$$ \"$cache_file\" ;; #(\n        *)\n\t  mv -f confcache \"$cache_file\" ;;\n\tesac\n      fi\n    fi\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=\nU=\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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure\" >&5\n$as_echo_n \"checking that generated files are newer than configure... \" >&6; }\n   if test -n \"$am_sleep_pid\"; then\n     # Hide warnings about reused PIDs.\n     wait $am_sleep_pid 2>/dev/null\n   fi\n   { $as_echo \"$as_me:${as_lineno-$LINENO}: result: done\" >&5\n$as_echo \"done\" >&6; }\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\n if test -n \"$EXEEXT\"; then\n  am__EXEEXT_TRUE=\n  am__EXEEXT_FALSE='#'\nelse\n  am__EXEEXT_TRUE='#'\n  am__EXEEXT_FALSE=\nfi\n\nif test -z \"${MAINTAINER_MODE_TRUE}\" && test -z \"${MAINTAINER_MODE_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"MAINTAINER_MODE\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\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 \"${USE_SYSTEM_SHARED_LIB_TRUE}\" && test -z \"${USE_SYSTEM_SHARED_LIB_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"USE_SYSTEM_SHARED_LIB\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${ENABLE_DOCUMENTATION_TRUE}\" && test -z \"${ENABLE_DOCUMENTATION_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"ENABLE_DOCUMENTATION\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${BUILD_REDIRECTOR_TRUE}\" && test -z \"${BUILD_REDIRECTOR_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"BUILD_REDIRECTOR\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${BUILD_WINCOMPAT_TRUE}\" && test -z \"${BUILD_WINCOMPAT_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"BUILD_WINCOMPAT\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\n\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.\nas_myself=\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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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 -pR'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -pR'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -pR'\n  fi\nelse\n  as_ln_s='cp -pR'\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\n\n# as_fn_executable_p FILE\n# -----------------------\n# Test if FILE is an executable regular file.\nas_fn_executable_p ()\n{\n  test -f \"$1\" && test -x \"$1\"\n} # as_fn_executable_p\nas_test_x='test -x'\nas_executable_p=as_fn_executable_p\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 shadowsocks-libev $as_me 2.4.8, which was\ngenerated by GNU Autoconf 2.69.  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 <max.c.lv@gmail.com>.\"\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=\"\\\\\nshadowsocks-libev config.status 2.4.8\nconfigured by $0, generated by GNU Autoconf 2.69,\n  with options \\\\\"\\$ac_cs_config\\\\\"\n\nCopyright (C) 2012 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'\nMKDIR_P='$MKDIR_P'\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=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=\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    '') as_fn_error $? \"missing file argument\" ;;\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\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\nenable_static='`$ECHO \"$enable_static\" | $SED \"$delay_single_quote_subst\"`'\nenable_shared='`$ECHO \"$enable_shared\" | $SED \"$delay_single_quote_subst\"`'\nmacro_version='`$ECHO \"$macro_version\" | $SED \"$delay_single_quote_subst\"`'\nmacro_revision='`$ECHO \"$macro_revision\" | $SED \"$delay_single_quote_subst\"`'\npic_mode='`$ECHO \"$pic_mode\" | $SED \"$delay_single_quote_subst\"`'\nenable_fast_install='`$ECHO \"$enable_fast_install\" | $SED \"$delay_single_quote_subst\"`'\nSHELL='`$ECHO \"$SHELL\" | $SED \"$delay_single_quote_subst\"`'\nECHO='`$ECHO \"$ECHO\" | $SED \"$delay_single_quote_subst\"`'\nPATH_SEPARATOR='`$ECHO \"$PATH_SEPARATOR\" | $SED \"$delay_single_quote_subst\"`'\nhost_alias='`$ECHO \"$host_alias\" | $SED \"$delay_single_quote_subst\"`'\nhost='`$ECHO \"$host\" | $SED \"$delay_single_quote_subst\"`'\nhost_os='`$ECHO \"$host_os\" | $SED \"$delay_single_quote_subst\"`'\nbuild_alias='`$ECHO \"$build_alias\" | $SED \"$delay_single_quote_subst\"`'\nbuild='`$ECHO \"$build\" | $SED \"$delay_single_quote_subst\"`'\nbuild_os='`$ECHO \"$build_os\" | $SED \"$delay_single_quote_subst\"`'\nSED='`$ECHO \"$SED\" | $SED \"$delay_single_quote_subst\"`'\nXsed='`$ECHO \"$Xsed\" | $SED \"$delay_single_quote_subst\"`'\nGREP='`$ECHO \"$GREP\" | $SED \"$delay_single_quote_subst\"`'\nEGREP='`$ECHO \"$EGREP\" | $SED \"$delay_single_quote_subst\"`'\nFGREP='`$ECHO \"$FGREP\" | $SED \"$delay_single_quote_subst\"`'\nLD='`$ECHO \"$LD\" | $SED \"$delay_single_quote_subst\"`'\nNM='`$ECHO \"$NM\" | $SED \"$delay_single_quote_subst\"`'\nLN_S='`$ECHO \"$LN_S\" | $SED \"$delay_single_quote_subst\"`'\nmax_cmd_len='`$ECHO \"$max_cmd_len\" | $SED \"$delay_single_quote_subst\"`'\nac_objext='`$ECHO \"$ac_objext\" | $SED \"$delay_single_quote_subst\"`'\nexeext='`$ECHO \"$exeext\" | $SED \"$delay_single_quote_subst\"`'\nlt_unset='`$ECHO \"$lt_unset\" | $SED \"$delay_single_quote_subst\"`'\nlt_SP2NL='`$ECHO \"$lt_SP2NL\" | $SED \"$delay_single_quote_subst\"`'\nlt_NL2SP='`$ECHO \"$lt_NL2SP\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_to_host_file_cmd='`$ECHO \"$lt_cv_to_host_file_cmd\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_to_tool_file_cmd='`$ECHO \"$lt_cv_to_tool_file_cmd\" | $SED \"$delay_single_quote_subst\"`'\nreload_flag='`$ECHO \"$reload_flag\" | $SED \"$delay_single_quote_subst\"`'\nreload_cmds='`$ECHO \"$reload_cmds\" | $SED \"$delay_single_quote_subst\"`'\nOBJDUMP='`$ECHO \"$OBJDUMP\" | $SED \"$delay_single_quote_subst\"`'\ndeplibs_check_method='`$ECHO \"$deplibs_check_method\" | $SED \"$delay_single_quote_subst\"`'\nfile_magic_cmd='`$ECHO \"$file_magic_cmd\" | $SED \"$delay_single_quote_subst\"`'\nfile_magic_glob='`$ECHO \"$file_magic_glob\" | $SED \"$delay_single_quote_subst\"`'\nwant_nocaseglob='`$ECHO \"$want_nocaseglob\" | $SED \"$delay_single_quote_subst\"`'\nDLLTOOL='`$ECHO \"$DLLTOOL\" | $SED \"$delay_single_quote_subst\"`'\nsharedlib_from_linklib_cmd='`$ECHO \"$sharedlib_from_linklib_cmd\" | $SED \"$delay_single_quote_subst\"`'\nAR='`$ECHO \"$AR\" | $SED \"$delay_single_quote_subst\"`'\nAR_FLAGS='`$ECHO \"$AR_FLAGS\" | $SED \"$delay_single_quote_subst\"`'\narchiver_list_spec='`$ECHO \"$archiver_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nSTRIP='`$ECHO \"$STRIP\" | $SED \"$delay_single_quote_subst\"`'\nRANLIB='`$ECHO \"$RANLIB\" | $SED \"$delay_single_quote_subst\"`'\nold_postinstall_cmds='`$ECHO \"$old_postinstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_postuninstall_cmds='`$ECHO \"$old_postuninstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_cmds='`$ECHO \"$old_archive_cmds\" | $SED \"$delay_single_quote_subst\"`'\nlock_old_archive_extraction='`$ECHO \"$lock_old_archive_extraction\" | $SED \"$delay_single_quote_subst\"`'\nCC='`$ECHO \"$CC\" | $SED \"$delay_single_quote_subst\"`'\nCFLAGS='`$ECHO \"$CFLAGS\" | $SED \"$delay_single_quote_subst\"`'\ncompiler='`$ECHO \"$compiler\" | $SED \"$delay_single_quote_subst\"`'\nGCC='`$ECHO \"$GCC\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_pipe='`$ECHO \"$lt_cv_sys_global_symbol_pipe\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_cdecl='`$ECHO \"$lt_cv_sys_global_symbol_to_cdecl\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address='`$ECHO \"$lt_cv_sys_global_symbol_to_c_name_address\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO \"$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\" | $SED \"$delay_single_quote_subst\"`'\nnm_file_list_spec='`$ECHO \"$nm_file_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nlt_sysroot='`$ECHO \"$lt_sysroot\" | $SED \"$delay_single_quote_subst\"`'\nobjdir='`$ECHO \"$objdir\" | $SED \"$delay_single_quote_subst\"`'\nMAGIC_CMD='`$ECHO \"$MAGIC_CMD\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_no_builtin_flag='`$ECHO \"$lt_prog_compiler_no_builtin_flag\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_pic='`$ECHO \"$lt_prog_compiler_pic\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_wl='`$ECHO \"$lt_prog_compiler_wl\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_static='`$ECHO \"$lt_prog_compiler_static\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_prog_compiler_c_o='`$ECHO \"$lt_cv_prog_compiler_c_o\" | $SED \"$delay_single_quote_subst\"`'\nneed_locks='`$ECHO \"$need_locks\" | $SED \"$delay_single_quote_subst\"`'\nMANIFEST_TOOL='`$ECHO \"$MANIFEST_TOOL\" | $SED \"$delay_single_quote_subst\"`'\nDSYMUTIL='`$ECHO \"$DSYMUTIL\" | $SED \"$delay_single_quote_subst\"`'\nNMEDIT='`$ECHO \"$NMEDIT\" | $SED \"$delay_single_quote_subst\"`'\nLIPO='`$ECHO \"$LIPO\" | $SED \"$delay_single_quote_subst\"`'\nOTOOL='`$ECHO \"$OTOOL\" | $SED \"$delay_single_quote_subst\"`'\nOTOOL64='`$ECHO \"$OTOOL64\" | $SED \"$delay_single_quote_subst\"`'\nlibext='`$ECHO \"$libext\" | $SED \"$delay_single_quote_subst\"`'\nshrext_cmds='`$ECHO \"$shrext_cmds\" | $SED \"$delay_single_quote_subst\"`'\nextract_expsyms_cmds='`$ECHO \"$extract_expsyms_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_cmds_need_lc='`$ECHO \"$archive_cmds_need_lc\" | $SED \"$delay_single_quote_subst\"`'\nenable_shared_with_static_runtimes='`$ECHO \"$enable_shared_with_static_runtimes\" | $SED \"$delay_single_quote_subst\"`'\nexport_dynamic_flag_spec='`$ECHO \"$export_dynamic_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\nwhole_archive_flag_spec='`$ECHO \"$whole_archive_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\ncompiler_needs_object='`$ECHO \"$compiler_needs_object\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_from_new_cmds='`$ECHO \"$old_archive_from_new_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_from_expsyms_cmds='`$ECHO \"$old_archive_from_expsyms_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_cmds='`$ECHO \"$archive_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_expsym_cmds='`$ECHO \"$archive_expsym_cmds\" | $SED \"$delay_single_quote_subst\"`'\nmodule_cmds='`$ECHO \"$module_cmds\" | $SED \"$delay_single_quote_subst\"`'\nmodule_expsym_cmds='`$ECHO \"$module_expsym_cmds\" | $SED \"$delay_single_quote_subst\"`'\nwith_gnu_ld='`$ECHO \"$with_gnu_ld\" | $SED \"$delay_single_quote_subst\"`'\nallow_undefined_flag='`$ECHO \"$allow_undefined_flag\" | $SED \"$delay_single_quote_subst\"`'\nno_undefined_flag='`$ECHO \"$no_undefined_flag\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_libdir_flag_spec='`$ECHO \"$hardcode_libdir_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_libdir_separator='`$ECHO \"$hardcode_libdir_separator\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_direct='`$ECHO \"$hardcode_direct\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_direct_absolute='`$ECHO \"$hardcode_direct_absolute\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_minus_L='`$ECHO \"$hardcode_minus_L\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_shlibpath_var='`$ECHO \"$hardcode_shlibpath_var\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_automatic='`$ECHO \"$hardcode_automatic\" | $SED \"$delay_single_quote_subst\"`'\ninherit_rpath='`$ECHO \"$inherit_rpath\" | $SED \"$delay_single_quote_subst\"`'\nlink_all_deplibs='`$ECHO \"$link_all_deplibs\" | $SED \"$delay_single_quote_subst\"`'\nalways_export_symbols='`$ECHO \"$always_export_symbols\" | $SED \"$delay_single_quote_subst\"`'\nexport_symbols_cmds='`$ECHO \"$export_symbols_cmds\" | $SED \"$delay_single_quote_subst\"`'\nexclude_expsyms='`$ECHO \"$exclude_expsyms\" | $SED \"$delay_single_quote_subst\"`'\ninclude_expsyms='`$ECHO \"$include_expsyms\" | $SED \"$delay_single_quote_subst\"`'\nprelink_cmds='`$ECHO \"$prelink_cmds\" | $SED \"$delay_single_quote_subst\"`'\npostlink_cmds='`$ECHO \"$postlink_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfile_list_spec='`$ECHO \"$file_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nvariables_saved_for_relink='`$ECHO \"$variables_saved_for_relink\" | $SED \"$delay_single_quote_subst\"`'\nneed_lib_prefix='`$ECHO \"$need_lib_prefix\" | $SED \"$delay_single_quote_subst\"`'\nneed_version='`$ECHO \"$need_version\" | $SED \"$delay_single_quote_subst\"`'\nversion_type='`$ECHO \"$version_type\" | $SED \"$delay_single_quote_subst\"`'\nrunpath_var='`$ECHO \"$runpath_var\" | $SED \"$delay_single_quote_subst\"`'\nshlibpath_var='`$ECHO \"$shlibpath_var\" | $SED \"$delay_single_quote_subst\"`'\nshlibpath_overrides_runpath='`$ECHO \"$shlibpath_overrides_runpath\" | $SED \"$delay_single_quote_subst\"`'\nlibname_spec='`$ECHO \"$libname_spec\" | $SED \"$delay_single_quote_subst\"`'\nlibrary_names_spec='`$ECHO \"$library_names_spec\" | $SED \"$delay_single_quote_subst\"`'\nsoname_spec='`$ECHO \"$soname_spec\" | $SED \"$delay_single_quote_subst\"`'\ninstall_override_mode='`$ECHO \"$install_override_mode\" | $SED \"$delay_single_quote_subst\"`'\npostinstall_cmds='`$ECHO \"$postinstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\npostuninstall_cmds='`$ECHO \"$postuninstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfinish_cmds='`$ECHO \"$finish_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfinish_eval='`$ECHO \"$finish_eval\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_into_libs='`$ECHO \"$hardcode_into_libs\" | $SED \"$delay_single_quote_subst\"`'\nsys_lib_search_path_spec='`$ECHO \"$sys_lib_search_path_spec\" | $SED \"$delay_single_quote_subst\"`'\nsys_lib_dlsearch_path_spec='`$ECHO \"$sys_lib_dlsearch_path_spec\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_action='`$ECHO \"$hardcode_action\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen='`$ECHO \"$enable_dlopen\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen_self='`$ECHO \"$enable_dlopen_self\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen_self_static='`$ECHO \"$enable_dlopen_self_static\" | $SED \"$delay_single_quote_subst\"`'\nold_striplib='`$ECHO \"$old_striplib\" | $SED \"$delay_single_quote_subst\"`'\nstriplib='`$ECHO \"$striplib\" | $SED \"$delay_single_quote_subst\"`'\n\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$1\n_LTECHO_EOF'\n}\n\n# Quote evaled strings.\nfor var in SHELL \\\nECHO \\\nPATH_SEPARATOR \\\nSED \\\nGREP \\\nEGREP \\\nFGREP \\\nLD \\\nNM \\\nLN_S \\\nlt_SP2NL \\\nlt_NL2SP \\\nreload_flag \\\nOBJDUMP \\\ndeplibs_check_method \\\nfile_magic_cmd \\\nfile_magic_glob \\\nwant_nocaseglob \\\nDLLTOOL \\\nsharedlib_from_linklib_cmd \\\nAR \\\nAR_FLAGS \\\narchiver_list_spec \\\nSTRIP \\\nRANLIB \\\nCC \\\nCFLAGS \\\ncompiler \\\nlt_cv_sys_global_symbol_pipe \\\nlt_cv_sys_global_symbol_to_cdecl \\\nlt_cv_sys_global_symbol_to_c_name_address \\\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix \\\nnm_file_list_spec \\\nlt_prog_compiler_no_builtin_flag \\\nlt_prog_compiler_pic \\\nlt_prog_compiler_wl \\\nlt_prog_compiler_static \\\nlt_cv_prog_compiler_c_o \\\nneed_locks \\\nMANIFEST_TOOL \\\nDSYMUTIL \\\nNMEDIT \\\nLIPO \\\nOTOOL \\\nOTOOL64 \\\nshrext_cmds \\\nexport_dynamic_flag_spec \\\nwhole_archive_flag_spec \\\ncompiler_needs_object \\\nwith_gnu_ld \\\nallow_undefined_flag \\\nno_undefined_flag \\\nhardcode_libdir_flag_spec \\\nhardcode_libdir_separator \\\nexclude_expsyms \\\ninclude_expsyms \\\nfile_list_spec \\\nvariables_saved_for_relink \\\nlibname_spec \\\nlibrary_names_spec \\\nsoname_spec \\\ninstall_override_mode \\\nfinish_eval \\\nold_striplib \\\nstriplib; do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in reload_cmds \\\nold_postinstall_cmds \\\nold_postuninstall_cmds \\\nold_archive_cmds \\\nextract_expsyms_cmds \\\nold_archive_from_new_cmds \\\nold_archive_from_expsyms_cmds \\\narchive_cmds \\\narchive_expsym_cmds \\\nmodule_cmds \\\nmodule_expsym_cmds \\\nexport_symbols_cmds \\\nprelink_cmds \\\npostlink_cmds \\\npostinstall_cmds \\\npostuninstall_cmds \\\nfinish_cmds \\\nsys_lib_search_path_spec \\\nsys_lib_dlsearch_path_spec; do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\nac_aux_dir='$ac_aux_dir'\nxsi_shell='$xsi_shell'\nlt_shell_append='$lt_shell_append'\n\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'\n\n\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    \"libtool\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS libtool\" ;;\n    \"shadowsocks-libev.pc\") CONFIG_FILES=\"$CONFIG_FILES shadowsocks-libev.pc\" ;;\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"libcork/Makefile\") CONFIG_FILES=\"$CONFIG_FILES libcork/Makefile\" ;;\n    \"libipset/Makefile\") CONFIG_FILES=\"$CONFIG_FILES libipset/Makefile\" ;;\n    \"src/Makefile\") CONFIG_FILES=\"$CONFIG_FILES src/Makefile\" ;;\n    \"libudns/Makefile\") CONFIG_FILES=\"$CONFIG_FILES libudns/Makefile\" ;;\n    \"libev/Makefile\") CONFIG_FILES=\"$CONFIG_FILES libev/Makefile\" ;;\n    \"doc/Makefile\") CONFIG_FILES=\"$CONFIG_FILES doc/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= ac_tmp=\n  trap 'exit_status=$?\n  : \"${ac_tmp:=$tmp}\"\n  { test ! -d \"$ac_tmp\" || rm -fr \"$ac_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 -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\nac_tmp=$tmp\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\n\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 {' >\"$ac_tmp/subs1.awk\" &&\n_ACEOF\n\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 >>\"\\$ac_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 >>\"\\$ac_tmp/subs1.awk\" <<_ACAWK &&\n  for (key in S) S_is_set[key] = 1\n  FS = \"\u0007\"\n\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\n  print line\n}\n\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 < \"$ac_tmp/subs1.awk\" > \"$ac_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 sole $(srcdir),\n# ${srcdir} and @srcdir@ entries 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 ]*=[\t ]*/{\nh\ns///\ns/^/:/\ns/[\t ]*$/:/\ns/:\\$(srcdir):/:/g\ns/:\\${srcdir}:/:/g\ns/:@srcdir@:/:/g\ns/^:*//\ns/:*$//\nx\ns/\\(=[\t ]*\\).*/\\1/\nG\ns/\\n//\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 >\"$ac_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_tt=`sed -n \"/$ac_delim/p\" confdefs.h`\n  if test -z \"$ac_tt\"; 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=\"$ac_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 1 \"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 >\"$ac_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  ac_MKDIR_P=$MKDIR_P\n  case $MKDIR_P in\n  [\\\\/$]* | ?:[\\\\/]* ) ;;\n  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;\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\ns&@MKDIR_P@&$ac_MKDIR_P&;t t\n$ac_datarootdir_hack\n\"\neval sed \\\"\\$ac_sed_extra\\\" \"$ac_file_inputs\" | $AWK -f \"$ac_tmp/subs.awk\" \\\n  >$ac_tmp/out || 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' \"$ac_tmp/out\"`; test -n \"$ac_out\"; } &&\n  { ac_out=`sed -n '/^[\t ]*datarootdir[\t ]*:*=/p' \\\n      \"$ac_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 \"$ac_tmp/stdin\"\n  case $ac_file in\n  -) cat \"$ac_tmp/out\" && rm -f \"$ac_tmp/out\";;\n  *) rm -f \"$ac_file\" && mv \"$ac_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 \"$ac_tmp/defines.awk\"' \"$ac_file_inputs\"\n    } >\"$ac_tmp/config.h\" \\\n      || as_fn_error $? \"could not create $ac_file\" \"$LINENO\" 5\n    if diff \"$ac_file\" \"$ac_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 \"$ac_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 \"$ac_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_arg=\"$ac_file\"\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $_am_arg | $_am_arg:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $_am_arg\" >`$as_dirname -- \"$_am_arg\" ||\n$as_expr X\"$_am_arg\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t X\"$_am_arg\" : 'X\\(//\\)[^/]' \\| \\\n\t X\"$_am_arg\" : 'X\\(//\\)$' \\| \\\n\t X\"$_am_arg\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n$as_echo X\"$_am_arg\" |\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\"\" || {\n  # Older Autoconf quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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    # 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\t sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/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\n  done\n}\n ;;\n    \"libtool\":C)\n\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n\n# The names of the tagged configurations supported by this script.\navailable_tags=\"\"\n\n# ### BEGIN LIBTOOL CONFIG\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Which release of libtool.m4 was used?\nmacro_version=$macro_version\nmacro_revision=$macro_revision\n\n# What type of objects to build.\npic_mode=$pic_mode\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# An echo program that protects backslashes.\nECHO=$lt_ECHO\n\n# The PATH separator for the build system.\nPATH_SEPARATOR=$lt_PATH_SEPARATOR\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# A sed program that does not truncate output.\nSED=$lt_SED\n\n# Sed that helps us avoid accidentally triggering echo(1) options like -n.\nXsed=\"\\$SED -e 1s/^X//\"\n\n# A grep program that handles long lines.\nGREP=$lt_GREP\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# A literal string matcher.\nFGREP=$lt_FGREP\n\n# A BSD- or MS-compatible name lister.\nNM=$lt_NM\n\n# Whether we need soft or hard links.\nLN_S=$lt_LN_S\n\n# What is the maximum length of a command?\nmax_cmd_len=$max_cmd_len\n\n# Object file suffix (normally \"o\").\nobjext=$ac_objext\n\n# Executable file suffix (normally \"\").\nexeext=$exeext\n\n# whether the shell understands \"unset\".\nlt_unset=$lt_unset\n\n# turn spaces into newlines.\nSP2NL=$lt_lt_SP2NL\n\n# turn newlines into spaces.\nNL2SP=$lt_lt_NL2SP\n\n# convert \\$build file names to \\$host format.\nto_host_file_cmd=$lt_cv_to_host_file_cmd\n\n# convert \\$build files to toolchain format.\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\n\n# An object symbol dumper.\nOBJDUMP=$lt_OBJDUMP\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method = \"file_magic\".\nfile_magic_cmd=$lt_file_magic_cmd\n\n# How to find potential files when deplibs_check_method = \"file_magic\".\nfile_magic_glob=$lt_file_magic_glob\n\n# Find potential files using nocaseglob when deplibs_check_method = \"file_magic\".\nwant_nocaseglob=$lt_want_nocaseglob\n\n# DLL creation program.\nDLLTOOL=$lt_DLLTOOL\n\n# Command to associate shared and link libraries.\nsharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd\n\n# The archiver.\nAR=$lt_AR\n\n# Flags to create an archive.\nAR_FLAGS=$lt_AR_FLAGS\n\n# How to feed a file listing to the archiver.\narchiver_list_spec=$lt_archiver_list_spec\n\n# A symbol stripping program.\nSTRIP=$lt_STRIP\n\n# Commands used to install an old-style archive.\nRANLIB=$lt_RANLIB\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Whether to use a lock for old archive extraction.\nlock_old_archive_extraction=$lock_old_archive_extraction\n\n# A C compiler.\nLTCC=$lt_CC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_CFLAGS\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration.\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair.\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# Transform the output of nm in a C name address pair when lib prefix is needed.\nglobal_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\n\n# Specify filename containing input files for \\$NM.\nnm_file_list_spec=$lt_nm_file_list_spec\n\n# The root where to search for dependent libraries,and in which our libraries should be installed.\nlt_sysroot=$lt_sysroot\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# Used to examine libraries when file_magic_cmd begins with \"file\".\nMAGIC_CMD=$MAGIC_CMD\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Manifest tool.\nMANIFEST_TOOL=$lt_MANIFEST_TOOL\n\n# Tool to manipulate archived DWARF debug symbol files on Mac OS X.\nDSYMUTIL=$lt_DSYMUTIL\n\n# Tool to change global to local symbols on Mac OS X.\nNMEDIT=$lt_NMEDIT\n\n# Tool to manipulate fat objects and archives on Mac OS X.\nLIPO=$lt_LIPO\n\n# ldd/readelf like tool for Mach-O binaries on Mac OS X.\nOTOOL=$lt_OTOOL\n\n# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.\nOTOOL64=$lt_OTOOL64\n\n# Old archive suffix (normally \"a\").\nlibext=$libext\n\n# Shared library suffix (normally \".so\").\nshrext_cmds=$lt_shrext_cmds\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at link time.\nvariables_saved_for_relink=$lt_variables_saved_for_relink\n\n# Do we need the \"lib\" prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Library versioning type.\nversion_type=$version_type\n\n# Shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# Shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Permission mode override for installation of shared libraries.\ninstall_override_mode=$lt_install_override_mode\n\n# Command to use after installation of a shared archive.\npostinstall_cmds=$lt_postinstall_cmds\n\n# Command to use after uninstallation of a shared archive.\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# As \"finish_cmds\", except a single script fragment to be evaled but\n# not shown.\nfinish_eval=$lt_finish_eval\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Compile-time system search path for libraries.\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries.\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n\n# The linker used to build libraries.\nLD=$lt_LD\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# Commands used to build an old-style archive.\nold_archive_cmds=$lt_old_archive_cmds\n\n# A language specific compiler.\nCC=$lt_compiler\n\n# Is the compiler the GNU compiler?\nwith_gcc=$GCC\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc\n\n# Whether or not to disallow shared libs when runtime libs are static.\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec\n\n# Whether the compiler copes with passing no objects directly.\ncompiler_needs_object=$lt_compiler_needs_object\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds\n\n# Commands used to build a shared archive.\narchive_cmds=$lt_archive_cmds\narchive_expsym_cmds=$lt_archive_expsym_cmds\n\n# Commands used to build a loadable module if different from building\n# a shared archive.\nmodule_cmds=$lt_module_cmds\nmodule_expsym_cmds=$lt_module_expsym_cmds\n\n# Whether we are building with GNU ld or not.\nwith_gnu_ld=$lt_with_gnu_ld\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag\n\n# Flag that enforces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag\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=$lt_hardcode_libdir_flag_spec\n\n# Whether we need a single \"-rpath\" flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary.\nhardcode_direct=$hardcode_direct\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary and the resulting library dependency is\n# \"absolute\",i.e impossible to change by setting \\${shlibpath_var} if the\n# library is relocated.\nhardcode_direct_absolute=$hardcode_direct_absolute\n\n# Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n# into the resulting binary.\nhardcode_minus_L=$hardcode_minus_L\n\n# Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n# into the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var\n\n# Set to \"yes\" if building a shared library automatically hardcodes DIR\n# into the library and all subsequent libraries and executables linked\n# against it.\nhardcode_automatic=$hardcode_automatic\n\n# Set to yes if linker adds runtime paths of dependent libraries\n# to runtime path list.\ninherit_rpath=$inherit_rpath\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs\n\n# Set to \"yes\" if exported symbols are required.\nalways_export_symbols=$always_export_symbols\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms\n\n# Commands necessary for linking programs (against libraries) with templates.\nprelink_cmds=$lt_prelink_cmds\n\n# Commands necessary for finishing linking programs.\npostlink_cmds=$lt_postlink_cmds\n\n# Specify filename containing input files.\nfile_list_spec=$lt_file_list_spec\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action\n\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\n\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" \\\n     || (rm -f \"$cfgfile\"; exit 1)\n\n  if test x\"$xsi_shell\" = xyes; then\n  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\\\nfunc_dirname ()\\\n{\\\n\\    case ${1} in\\\n\\      */*) func_dirname_result=\"${1%/*}${2}\" ;;\\\n\\      *  ) func_dirname_result=\"${3}\" ;;\\\n\\    esac\\\n} # Extended-shell func_dirname implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_basename ()$/,/^} # func_basename /c\\\nfunc_basename ()\\\n{\\\n\\    func_basename_result=\"${1##*/}\"\\\n} # Extended-shell func_basename implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\\\nfunc_dirname_and_basename ()\\\n{\\\n\\    case ${1} in\\\n\\      */*) func_dirname_result=\"${1%/*}${2}\" ;;\\\n\\      *  ) func_dirname_result=\"${3}\" ;;\\\n\\    esac\\\n\\    func_basename_result=\"${1##*/}\"\\\n} # Extended-shell func_dirname_and_basename implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\\\nfunc_stripname ()\\\n{\\\n\\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\\\n\\    # positional parameters, so assign one to ordinary parameter first.\\\n\\    func_stripname_result=${3}\\\n\\    func_stripname_result=${func_stripname_result#\"${1}\"}\\\n\\    func_stripname_result=${func_stripname_result%\"${2}\"}\\\n} # Extended-shell func_stripname implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\\\nfunc_split_long_opt ()\\\n{\\\n\\    func_split_long_opt_name=${1%%=*}\\\n\\    func_split_long_opt_arg=${1#*=}\\\n} # Extended-shell func_split_long_opt implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\\\nfunc_split_short_opt ()\\\n{\\\n\\    func_split_short_opt_arg=${1#??}\\\n\\    func_split_short_opt_name=${1%\"$func_split_short_opt_arg\"}\\\n} # Extended-shell func_split_short_opt implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\\\nfunc_lo2o ()\\\n{\\\n\\    case ${1} in\\\n\\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\\\n\\      *)    func_lo2o_result=${1} ;;\\\n\\    esac\\\n} # Extended-shell func_lo2o implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_xform ()$/,/^} # func_xform /c\\\nfunc_xform ()\\\n{\\\n    func_xform_result=${1%.*}.lo\\\n} # Extended-shell func_xform implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_arith ()$/,/^} # func_arith /c\\\nfunc_arith ()\\\n{\\\n    func_arith_result=$(( $* ))\\\n} # Extended-shell func_arith implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_len ()$/,/^} # func_len /c\\\nfunc_len ()\\\n{\\\n    func_len_result=${#1}\\\n} # Extended-shell func_len implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\nfi\n\nif test x\"$lt_shell_append\" = xyes; then\n  sed -e '/^func_append ()$/,/^} # func_append /c\\\nfunc_append ()\\\n{\\\n    eval \"${1}+=\\\\${2}\"\\\n} # Extended-shell func_append implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\\\nfunc_append_quoted ()\\\n{\\\n\\    func_quote_for_eval \"${2}\"\\\n\\    eval \"${1}+=\\\\\\\\ \\\\$func_quote_for_eval_result\"\\\n} # Extended-shell func_append_quoted implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  # Save a `func_append' function call where possible by direct use of '+='\n  sed -e 's%func_append \\([a-zA-Z_]\\{1,\\}\\) \"%\\1+=\"%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nelse\n  # Save a `func_append' function call even when '+=' is not available\n  sed -e 's%func_append \\([a-zA-Z_]\\{1,\\}\\) \"%\\1=\"$\\1%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nfi\n\nif test x\"$_lt_function_replace_fail\" = x\":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile\" >&5\n$as_echo \"$as_me: WARNING: Unable to substitute extended shell functions in $ofile\" >&2;}\nfi\n\n\n   mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n\n ;;\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 1\nfi\n\n#\n# CONFIG_SUBDIRS section.\n#\nif test \"$no_recursion\" != yes; then\n\n  # Remove --cache-file, --srcdir, and --disable-option-checking arguments\n  # so they do not pile up.\n  ac_sub_configure_args=\n  ac_prev=\n  eval \"set x $ac_configure_args\"\n  shift\n  for ac_arg\n  do\n    if test -n \"$ac_prev\"; then\n      ac_prev=\n      continue\n    fi\n    case $ac_arg in\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=* \\\n    | --c=*)\n      ;;\n    --config-cache | -C)\n      ;;\n    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)\n      ac_prev=srcdir ;;\n    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)\n      ;;\n    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)\n      ac_prev=prefix ;;\n    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)\n      ;;\n    --disable-option-checking)\n      ;;\n    *)\n      case $ac_arg in\n      *\\'*) ac_arg=`$as_echo \"$ac_arg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n      esac\n      as_fn_append ac_sub_configure_args \" '$ac_arg'\" ;;\n    esac\n  done\n\n  # Always prepend --prefix to ensure using the same prefix\n  # in subdir configurations.\n  ac_arg=\"--prefix=$prefix\"\n  case $ac_arg in\n  *\\'*) ac_arg=`$as_echo \"$ac_arg\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"` ;;\n  esac\n  ac_sub_configure_args=\"'$ac_arg' $ac_sub_configure_args\"\n\n  # Pass --silent\n  if test \"$silent\" = yes; then\n    ac_sub_configure_args=\"--silent $ac_sub_configure_args\"\n  fi\n\n  # Always prepend --disable-option-checking to silence warnings, since\n  # different subdirs can have different --enable and --with options.\n  ac_sub_configure_args=\"--disable-option-checking $ac_sub_configure_args\"\n\n  ac_popdir=`pwd`\n  for ac_dir in : $subdirs; do test \"x$ac_dir\" = x: && continue\n\n    # Do not complain, so a configure script can configure whichever\n    # parts of a large source tree are present.\n    test -d \"$srcdir/$ac_dir\" || continue\n\n    ac_msg=\"=== configuring in $ac_dir (`pwd`/$ac_dir)\"\n    $as_echo \"$as_me:${as_lineno-$LINENO}: $ac_msg\" >&5\n    $as_echo \"$ac_msg\" >&6\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    cd \"$ac_dir\"\n\n    # Check for guested configure; otherwise get Cygnus style configure.\n    if test -f \"$ac_srcdir/configure.gnu\"; then\n      ac_sub_configure=$ac_srcdir/configure.gnu\n    elif test -f \"$ac_srcdir/configure\"; then\n      ac_sub_configure=$ac_srcdir/configure\n    elif test -f \"$ac_srcdir/configure.in\"; then\n      # This should be Cygnus configure.\n      ac_sub_configure=$ac_aux_dir/configure\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir\" >&5\n$as_echo \"$as_me: WARNING: no configuration information is in $ac_dir\" >&2;}\n      ac_sub_configure=\n    fi\n\n    # The recursion is here.\n    if test -n \"$ac_sub_configure\"; then\n      # Make the cache file name correct relative to the subdirectory.\n      case $cache_file in\n      [\\\\/]* | ?:[\\\\/]* ) ac_sub_cache_file=$cache_file ;;\n      *) # Relative name.\n\tac_sub_cache_file=$ac_top_build_prefix$cache_file ;;\n      esac\n\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir\" >&5\n$as_echo \"$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir\" >&6;}\n      # The eval makes quoting arguments work.\n      eval \"\\$SHELL \\\"\\$ac_sub_configure\\\" $ac_sub_configure_args \\\n\t   --cache-file=\\\"\\$ac_sub_cache_file\\\" --srcdir=\\\"\\$ac_srcdir\\\"\" ||\n\tas_fn_error $? \"$ac_sub_configure failed for $ac_dir\" \"$LINENO\" 5\n    fi\n\n    cd \"$ac_popdir\"\n  done\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"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/configure.ac",
    "content": "dnl                                               -*- Autoconf -*-\ndnl Process this file with autoconf to produce a configure script.\n\nAC_PREREQ([2.67])\nAC_INIT([shadowsocks-libev], [2.4.8], [max.c.lv@gmail.com])\nAC_CONFIG_SRCDIR([src/encrypt.c])\nAC_CONFIG_HEADERS([config.h])\nAC_CONFIG_AUX_DIR(auto)\nAC_CONFIG_MACRO_DIR([m4])\nAC_USE_SYSTEM_EXTENSIONS\n\nAM_INIT_AUTOMAKE([subdir-objects foreign -Wno-gnu -Werror])\nm4_ifdef([AM_PROG_AR], [AM_PROG_AR])\nm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])\nAM_MAINTAINER_MODE\nAM_DEP_TRACK\n\ndnl Checks for lib\nAC_DISABLE_STATIC\nAC_DISABLE_SHARED\nLT_INIT([dlopen])\n\ndnl Checks for using shared libraries from system\nAC_ARG_ENABLE(\n  [system-shared-lib],\n  AS_HELP_STRING([--enable-system-shared-lib], [build against shared libraries when possible]),\n  [\n    case \"${enableval}\" in\n      yes) enable_system_shared_lib=true ;;\n      no) enable_system_shared_lib=false ;;\n      *) AC_MSG_ERROR([bad value ${enableval} for --enable-system-shared-lib]) ;;\n    esac], [enable_system_shared_lib=false])\nAM_CONDITIONAL([USE_SYSTEM_SHARED_LIB], [test x$enable_system_shared_lib = xtrue])\n\ndnl Checks for crypto library\nAC_ARG_WITH(\n  [crypto-library],\n  [AS_HELP_STRING([--with-crypto-library=library], [build with the given crypto library, TYPE=openssl|polarssl|mbedtls @<:@default=openssl@:>@])],\n  [\n    case \"${withval}\" in\n      openssl|polarssl|mbedtls) ;;\n      *) AC_MSG_ERROR([bad value ${withval} for --with-crypto-library]) ;;\n    esac\n  ],\n  [with_crypto_library=\"openssl\"]\n)\n\nAC_ARG_ENABLE([documentation],\n  AS_HELP_STRING([--disable-documentation], [do not build documentation]),\n  [disable_documentation=true],\n  [disable_documentation=false])\nAM_CONDITIONAL([ENABLE_DOCUMENTATION], [test x$disable_documentation = xfalse])\n\nAM_COND_IF([ENABLE_DOCUMENTATION], [\n  AC_PATH_PROG([ASCIIDOC], [asciidoc], [asciidoc])\n  AC_PATH_PROG([XMLTO], [xmlto], [xmlto])\n  AC_PATH_PROG([GZIP], [gzip], [gzip])\n  AC_PATH_PROG([RM], [rm], [rm])\n  AC_PATH_PROG([MV], [mv], [mv])\n  AC_PROG_SED\n])\n\ndnl Checks for programs.\nAC_PROG_CC\nAM_PROG_CC_C_O\nAC_PROG_INSTALL\nAC_PROG_LN_S\nAC_PROG_LIBTOOL\nAC_PROG_MAKE_SET\nAC_LANG_SOURCE\n\ndnl Checks for libev\nAM_COND_IF([USE_SYSTEM_SHARED_LIB],\n  [],\n  [m4_include([libev/libev.m4])])\n\ndnl Add library for mingw\ncase $host in\n  *-mingw*)\n    LIBS=\"$LIBS -ladvapi32 -lgdi32 -lws2_32 -lcrypt32\"\n    ;;\n  *)\n    ;;\nesac\n\ndnl Checks for TLS\nAX_TLS([:], [:])\n\ndnl Checks for crypto library\ncase \"${with_crypto_library}\" in\n  openssl)\n    ss_ZLIB\n    ss_OPENSSL\n    AC_DEFINE([USE_CRYPTO_OPENSSL], [1], [Use OpenSSL library])\n    ;;\n  polarssl)\n    ss_POLARSSL\n    AC_DEFINE([USE_CRYPTO_POLARSSL], [1], [Use PolarSSL library])\n    ;;\n  mbedtls)\n    ss_MBEDTLS\n    AC_DEFINE([USE_CRYPTO_MBEDTLS], [1], [Use mbed TLS library])\n    ;;\nesac\n\ndnl Checks for Apple CommonCrypto API\nAC_ARG_ENABLE(applecc,\n  AS_HELP_STRING([--enable-applecc], [enable Apple CommonCrypto API support]),\n  [\n    AC_CHECK_HEADERS(CommonCrypto/CommonCrypto.h,\n      [],\n      [AC_MSG_ERROR([CommonCrypto header files not found.]); break]\n    )\n    AC_CHECK_FUNCS([CCCryptorCreateWithMode], ,\n      [AC_MSG_ERROR([CommonCrypto API needs OS X (>= 10.7) and iOS (>= 5.0).]); break]\n    )\n    AC_DEFINE([USE_CRYPTO_APPLECC], [1], [Use Apple CommonCrypto library])\n  ]\n)\n\ndnl Checks for inet_ntop\nss_FUNC_INET_NTOP\n\ndnl Checks for host.\nAC_MSG_CHECKING(for what kind of host)\ncase $host in\n  *-linux*)\n    os_support=linux\n    AC_MSG_RESULT(Linux)\n    ;;\n  *-mingw*)\n    dnl Add custom macros for libev\n    AC_DEFINE([FD_SETSIZE], [2048], [Reset max file descriptor size.])\n    AC_DEFINE([EV_FD_TO_WIN32_HANDLE(fd)], [(fd)], [Override libev default fd conversion macro.])\n    AC_DEFINE([EV_WIN32_HANDLE_TO_FD(handle)], [(handle)], [Override libev default handle conversion macro.])\n    AC_DEFINE([EV_WIN32_CLOSE_FD(fd)], [closesocket(fd)], [Override libev default fd close macro.])\n\n    os_support=mingw\n    AC_MSG_RESULT(MinGW)\n    ;;\n  *)\n    AC_MSG_RESULT(transparent proxy does not support for $host)\n    ;;\nesac\n\ndnl Checks for pthread\nAX_PTHREAD([LIBS=\"$PTHREAD_LIBS $LIBS\"\n            CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n            CC=\"$PTHREAD_CC\"], AC_MSG_ERROR(Can not find pthreads.  This is required.))\n\ndnl Checks for stack protector\nGGL_CHECK_STACK_PROTECTOR([has_stack_protector=yes], [has_stack_protector=no])\n# XXX - disable -fstack-protector due to missing libssp_nonshared\ncase \"$host_os\" in\n     *aix*)\n\tAC_MSG_NOTICE([-fstack-protector disabled on AIX])\n\thas_stack_protector=no\n\t;;\n     *sunos*)\n\tAC_MSG_NOTICE([-fstack-protector disabled on SunOS])\n\thas_stack_protector=no\n\t;;\n     *solaris*)\n\tAC_MSG_NOTICE([-fstack-protector disabled on Solaris])\n\thas_stack_protector=no\n\t;;\nesac\n\nAC_ARG_ENABLE(ssp,\n[AS_HELP_STRING(--disable-ssp,Do not compile with -fstack-protector)],\n[\n  enable_ssp=\"no\"\n],\n[\n  enable_ssp=\"yes\"\n])\n\nif test x$has_stack_protector = xyes && test x$enable_ssp = xyes; then\n   CFLAGS=\"$CFLAGS -fstack-protector\"\n   AC_MSG_NOTICE([-fstack-protector enabled in CFLAGS])\nfi\n\nAM_CONDITIONAL(BUILD_REDIRECTOR, test \"$os_support\" = \"linux\")\nAM_CONDITIONAL(BUILD_WINCOMPAT, test \"$os_support\" = \"mingw\")\n\ndnl Checks for header files.\nAC_CHECK_HEADERS([limits.h stdint.h inttypes.h arpa/inet.h fcntl.h langinfo.h locale.h netdb.h netinet/in.h stdlib.h string.h strings.h unistd.h sys/ioctl.h])\n\ndnl A special check required for <net/if.h> on Darwin. See\ndnl http://www.gnu.org/software/autoconf/manual/html_node/Header-Portability.html.\nAC_CHECK_HEADERS([sys/socket.h])\nAC_CHECK_HEADERS([net/if.h], [], [],\n[\n#include <stdio.h>\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_SYS_SOCKET_H\n# include <sys/socket.h>\n#endif\n])\n\ncase $host in\n  *-mingw*)\n    AC_DEFINE([CONNECT_IN_PROGRESS], [WSAEWOULDBLOCK], [errno for incomplete non-blocking connect(2)])\n    AC_CHECK_HEADERS([windows.h winsock2.h ws2tcpip.h], [], [AC_MSG_ERROR([Missing MinGW headers])], [])\n    ;;\n  *-linux*)\n    AC_DEFINE([CONNECT_IN_PROGRESS], [EINPROGRESS], [errno for incomplete non-blocking connect(2)])\n    dnl Checks for netfilter headers\n    AC_CHECK_HEADERS([linux/if.h linux/netfilter_ipv4.h linux/netfilter_ipv6/ip6_tables.h],\n                     [], [AC_MSG_ERROR([Missing netfilter headers])],\n    [[\n    #if HAVE_LIMITS_H\n    #include <limits.h>\n    #endif\n    /* Netfilter ip(6)tables v1.4.0 has broken headers */\n    #if HAVE_NETINET_IN_H\n    #include <netinet/in.h>\n    #endif\n    #if HAVE_LINUX_IF_H\n    #include <linux/if.h>\n    #endif\n    #if HAVE_SYS_SOCKET_H\n    #include <sys/socket.h>\n    #endif\n    ]])\n    ;;\n  *)\n    # These are POSIX-like systems using BSD-like sockets API.\n    AC_DEFINE([CONNECT_IN_PROGRESS], [EINPROGRESS], [errno for incomplete non-blocking connect(2)])\n    ;;\nesac\n\nAC_C_BIGENDIAN\n\ndnl Checks for typedefs, structures, and compiler characteristics.\nAC_C_INLINE\nAC_TYPE_SSIZE_T\n\ndnl Checks for header files.\nAC_HEADER_ASSERT\nAC_HEADER_STDC\nAC_HEADER_SYS_WAIT\n\ndnl Checks for typedefs, structures, and compiler characteristics.\nAC_C_CONST\nAC_TYPE_PID_T\nAC_TYPE_SIZE_T\nAC_TYPE_SSIZE_T\nAC_TYPE_UINT16_T\nAC_TYPE_UINT8_T\nAC_HEADER_TIME\n\ndnl Checks for library functions.\nAC_FUNC_FORK\nAC_FUNC_SELECT_ARGTYPES\nAC_TYPE_SIGNAL\nAC_CHECK_FUNCS([memset select setresuid setreuid strerror getpwnam_r setrlimit])\n\ndnl Check for select() into ws2_32 for Msys/Mingw\nif test \"$ac_cv_func_select\" != \"yes\"; then\n  AC_MSG_CHECKING([for select in ws2_32])\n  AC_TRY_LINK([\n#ifdef HAVE_WINSOCK2_H\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <winsock2.h>\n#endif\n    ],[\n      select(0,(fd_set *)NULL,(fd_set *)NULL,(fd_set *)NULL,(struct timeval *)NULL);\n    ],[\n      AC_MSG_RESULT([yes])\n      HAVE_SELECT=\"1\"\n      AC_DEFINE_UNQUOTED(HAVE_SELECT, 1,\n        [Define to 1 if you have the 'select' function.])\n      HAVE_SYS_SELECT_H=\"1\"\n      AC_DEFINE_UNQUOTED(HAVE_SYS_SELECT_H, 1,\n        [Define to 1 if you have the <sys/select.h> header file.])\n    ],[\n      AC_MSG_ERROR([no])\n  ])\nfi\n\nAC_CHECK_LIB(socket, connect)\n\ndnl Checks for library functions.\nAC_CHECK_FUNCS([malloc memset socket])\n\ndnl Add define for libudns to enable IPv6 support\ndnl This is an option defined in the origin configure script\nAC_DEFINE([HAVE_IPv6], [1], [Enable IPv6 support in libudns])\n\nAM_COND_IF([USE_SYSTEM_SHARED_LIB],\n  [],\n  [AC_CONFIG_SUBDIRS([libsodium])])\n\nAC_CONFIG_FILES([ shadowsocks-libev.pc\n                 Makefile\n                 libcork/Makefile\n                 libipset/Makefile\n                 src/Makefile])\nAM_COND_IF([USE_SYSTEM_SHARED_LIB],\n  [],\n  [AC_CONFIG_FILES([libudns/Makefile\n                 libev/Makefile])])\n\nAM_COND_IF([ENABLE_DOCUMENTATION],\n  [AC_CONFIG_FILES([doc/Makefile])\n])\n\nAC_OUTPUT\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/.gitignore",
    "content": "*.substvars\ndebhelper-build-stamp\nlibshadowsocks-libev1/\nlibshadowsocks-libev-dev/\ntmp/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/README.Debian",
    "content": "shadowsocks-libev for Debian\n----------------------\n\nThe Debian package has added systemd support. A default server service which\nreads the default configuration in /etc/default/shadowsocks-libev is installed\nand enabled by default, plus some other service templates placed in\n/lib/systemd/system, which can be used by users later.\n\nAnother problem is that shadowsocks-libev is licensed under GPLv3+. This will\nconflict with OpenSSL License when linked against OpenSSL library. As a\nresult, this package faces licensing problem. Use it at your own risk.\n\n -- Boyuan Yang <073plan@gmail.com>  Wed, 14 Oct 2015 09:18:50 +0800\n\n(No special notes.)\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 06 Apr 2013 16:59:15 +0800\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/changelog",
    "content": "shadowsocks-libev (2.4.8-1) unstable; urgency=low\n\n  * Update manual pages with asciidoc.\n  * Fix issues of bind_address option.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 20 Jul 2016 09:25:50 +0800\n\nshadowsocks-libev (2.4.7-1) unstable; urgency=low\n\n  * Add ss-nat, a helper script to set up NAT rules for ss-redir.\n  * Fix several issues for debian package.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 1 Jun 2016 18:21:45 +0800\n\nshadowsocks-libev (2.4.6-1) unstable; urgency=low\n\n  * Update manual pages.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 21 Apr 2016 17:33:34 +0800\n\nshadowsocks-libev (2.4.5-1) unstable; urgency=low\n\n  * Fix build issues on OpenWRT.\n  * Reduce the latency of redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 01 Feb 2016 13:22:50 +0800\n\nshadowsocks-libev (2.4.4-1) unstable; urgency=low\n\n  * Fix a potential memory leak.\n  * Fix some compiler related issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 13 Jan 2016 11:50:12 +0800\n\nshadowsocks-libev (2.4.3-1) unstable; urgency=high\n\n  * Refine the buffer allocation.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 19 Dec 2015 12:30:21 +0900\n\nshadowsocks-libev (2.4.1-1) unstable; urgency=high\n\n  * Fix a security bug.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 29 Oct 2015 15:42:47 +0900\n\nshadowsocks-libev (2.4.0-1) unstable; urgency=low\n\n  * Update the one-time authentication\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 24 Sep 2015 14:11:05 +0900\n\nshadowsocks-libev (2.3.3-1) unstable; urgency=low\n\n  * Refine the onetime authentication of header.\n  * Enforce CRC16 on the payload.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 18 Sep 2015 10:38:21 +0900\n\nshadowsocks-libev (2.3.2-1) unstable; urgency=low\n\n  * Fix minor issues of build scripts.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 13 Sep 2015 15:22:28 +0900\n\nshadowsocks-libev (2.3.1-1) unstable; urgency=low\n\n  * Fix an issue of connection cache of UDP relay.\n  * Add support of onetime authentication for header verification.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 04 Sep 2015 07:54:02 +0900\n\nshadowsocks-libev (2.3.0-1) unstable; urgency=low\n\n  * Add manager mode to support multi-user and traffic stat.\n  * Fix a build issue on OS X El Capitan.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 30 Jul 2015 17:30:43 +0900\n\nshadowsocks-libev (2.2.3-1) unstable; urgency=high\n\n  * Fix the multiple UDP source port issue.\n  * Allow working in UDP only mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 11 Jul 2015 08:31:02 +0900\n\nshadowsocks-libev (2.2.2-1) unstable; urgency=low\n\n  * Fix the timer of UDP relay.\n  * Check name_len in the header.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 15 Jun 2015 10:26:40 +0900\n\nshadowsocks-libev (2.2.1-1) unstable; urgency=low\n\n  * Fix an issue of UDP relay.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 10 May 2015 21:23:44 +0900\n\nshadowsocks-libev (2.2.0-1) unstable; urgency=low\n\n  * Add TPROXY support in redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 04 May 2015 02:44:17 -0300\n\nshadowsocks-libev (2.1.4-1) unstable; urgency=low\n\n  * Fix a bug of server mode ACL.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Feb 2015 20:24:43 +0900\n\nshadowsocks-libev (2.1.3-1) unstable; urgency=low\n\n  * Add ACL support to remote server.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Feb 2015 10:59:44 +0900\n\nshadowsocks-libev (2.1.2-1) unstable; urgency=low\n\n  * Refine multiple port binding.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 31 Jan 2015 18:56:25 +0900\n\nshadowsocks-libev (2.1.1-1) unstable; urgency=low\n\n  * Fix a memory leak.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 21 Jan 2015 21:40:58 +0900\n\nshadowsocks-libev (2.1.0-1) unstable; urgency=low\n\n  * Fix a bug of tunnel mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 19 Jan 2015 09:59:52 +0900\n\nshadowsocks-libev (2.0.8-1) unstable; urgency=low\n\n  * Fix a bug of IPv6.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 16 Jan 2015 10:58:12 +0900\n\nshadowsocks-libev (2.0.7-1) unstable; urgency=low\n\n  * Fix some performance issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 13 Jan 2015 13:17:58 +0900\n\nshadowsocks-libev (2.0.6-1) unstable; urgency=high\n\n  * Fix a critical issue in redir mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 12 Jan 2015 21:51:19 +0900\n\nshadowsocks-libev (2.0.5-1) unstable; urgency=low\n\n  * Refine local, tunnel, and redir modes.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 12 Jan 2015 12:39:05 +0800\n\nshadowsocks-libev (2.0.4-1) unstable; urgency=low\n\n  * Fix building issues with MinGW32.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 11 Jan 2015 13:33:31 +0900\n\nshadowsocks-libev (2.0.3-1) unstable; urgency=high\n\n  * Fix some issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 16:27:54 +0800\n\nshadowsocks-libev (2.0.2-1) unstable; urgency=low\n\n  * Fix issues with MinGW.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 15:17:10 +0800\n\nshadowsocks-libev (2.0.1-1) unstable; urgency=low\n\n  * Implement a real asynchronous DNS resolver.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 10 Jan 2015 10:04:28 +0800\n\nshadowsocks-libev (1.6.4-1) unstable; urgency=low\n\n  * Update documents.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 07 Jan 2015 21:48:58 +0900\n\nshadowsocks-libev (1.6.3-1) unstable; urgency=low\n\n  * Refine ss-redir.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 04 Jan 2015 19:23:52 +0900\n\nshadowsocks-libev (1.6.2-1) unstable; urgency=low\n\n  * Fix some build issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 30 Dec 2014 10:30:28 +0800\n\nshadowsocks-libev (1.6.1-1) unstable; urgency=high\n\n  * Add salsa20 and chacha20 support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 13 Dec 2014 15:11:34 +0800\n\nshadowsocks-libev (1.6.0-1) unstable; urgency=low\n\n  * Solve conflicts with other shadowsocks portings.\n\n -- Max Lv <max.c.lv@gmail.com>  Mon, 17 Nov 2014 14:10:21 +0800\n\nshadowsocks-libev (1.5.3-2) unstable; urgency=low\n\n  * rename as shadowsocks-libev.\n\n -- Symeon Huang <hzwhuang@gmail.com>  Sat, 15 Nov 2014 14:55:28 +0000\n\nshadowsocks (1.5.3-1) unstable; urgency=low\n\n  * Fix log on Win32.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 14 Nov 2014 09:10:06 +0800\n\nshadowsocks (1.5.2-1) unstable; urgency=low\n\n  * Handle SIGTERM and SIGKILL nicely.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 12 Nov 2014 13:11:29 +0800\n\nshadowsocks (1.5.1-1) unstable; urgency=low\n\n  * Fix a bug of tcp fast open.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 08 Nov 2014 19:45:37 +0900\n\nshadowsocks (1.5.0-1) unstable; urgency=low\n\n  * Support to build static or shared library.\n  * Supprot IPv6 NAT in redirect mode.\n  * Refine the cache size of UDPRelay.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 07 Nov 2014 09:33:19 +0800\n\nshadowsocks (1.4.8-1) unstable; urgency=low\n\n  * Fix a bug of tcp fast open.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 08 Oct 2014 18:02:02 +0800\n\nshadowsocks (1.4.7-1) unstable; urgency=low\n\n  * Add a new encryptor rc4-md5.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 09 Sep 2014 07:50:10 +0800\n\nshadowsocks (1.4.6-1) unstable; urgency=low\n\n  * Add ACL support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 03 May 2014 04:37:10 -0400\n\nshadowsocks (1.4.5-1) unstable; urgency=high\n\n  * Fix the compatibility issue of udprelay.\n  * Enhance asyncns to reduce the latency.\n  * Add TCP_FASTOPEN support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 20 Apr 2014 08:12:45 +0800\n\nshadowsocks (1.4.4-1) unstable; urgency=low\n\n  * Add CommonCrypto support for darwin.\n  * Fix some config related issues.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 26 Mar 2014 13:29:03 +0800\n\nshadowsocks (1.4.3-1) unstable; urgency=low\n\n  * Add tunnel mode with local port forwarding feature.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 21 Feb 2014 11:52:13 +0900\n\nshadowsocks (1.4.2-1) unstable; urgency=high\n\n  * Fix the UDP relay issues.\n  * Add syslog support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 05 Jan 2014 10:05:29 +0900\n\nshadowsocks (1.4.1-1) unstable; urgency=low\n\n  * Add multi-port support.\n  * Add PolarSSL support by @linusyang.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 12 Nov 2013 03:57:21 +0000\n\nshadowsocks (1.4.0-1) unstable; urgency=low\n\n  * Add standard socks5 udp support.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 08 Sep 2013 02:20:40 +0000\n\nshadowsocks (1.3.3-1) unstable; urgency=high\n\n  * Provide more info in verbose mode.\n\n -- Max Lv <max.c.lv@gmail.com>  Fri, 21 Jun 2013 09:59:20 +0800\n\nshadowsocks (1.3.2-1) unstable; urgency=high\n\n  * Fix some ciphers by @linusyang.\n\n -- Max Lv <max.c.lv@gmail.com>  Sun, 09 Jun 2013 09:52:31 +0000\n\nshadowsocks (1.3.1-1) unstable; urgency=low\n\n  * Support more cihpers: camellia, idea, rc2 and seed.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 04 Jun 2013 00:56:17 +0000\n\nshadowsocks (1.3-1) unstable; urgency=low\n\n  * Able to bind connections to specific interface.\n  * Support more ciphers: aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb, cast5-cfb, des-cfb.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 16 May 2013 10:51:15 +0800\n\nshadowsocks (1.2-2) unstable; urgency=low\n\n  * Close timeouted TCP connections.\n\n -- Max Lv <max.c.lv@gmail.com>  Tue, 07 May 2013 14:10:33 +0800\n\nshadowsocks (1.2-1) unstable; urgency=low\n\n  * Fix a high load issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Thu, 18 Apr 2013 10:52:34 +0800\n\nshadowsocks (1.1-1) unstable; urgency=low\n\n  * Fix a IPV6 resolve issue.\n\n -- Max Lv <max.c.lv@gmail.com>  Wed, 10 Apr 2013 12:11:36 +0800\n\nshadowsocks (1.0-2) unstable; urgency=low\n\n  * Initial release.\n\n -- Max Lv <max.c.lv@gmail.com>  Sat, 06 Apr 2013 16:59:15 +0800\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/compat",
    "content": "9\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/config.json",
    "content": "{\n    \"server\":\"127.0.0.1\",\n    \"server_port\":8388,\n    \"local_port\":1080,\n    \"password\":\"barfoo!\",\n    \"timeout\":60,\n    \"method\":null\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/control",
    "content": "Source: shadowsocks-libev\nSection: net\nPriority: extra\nMaintainer: Max Lv <max.c.lv@gmail.com>\nBuild-Depends: debhelper (>= 9), dh-systemd (>= 1.5), pkg-config,\n               libssl-dev (>= 0.9.8), autotools-dev, mime-support, gawk,\n               asciidoc, xmlto\nStandards-Version: 3.9.8\nHomepage: https://www.shadowsocks.org\nVcs-Git: https://github.com/shadowsocks/shadowsocks-libev.git\nVcs-Browser: https://github.com/shadowsocks/shadowsocks-libev\n\nPackage: shadowsocks-libev\nReplaces: shadowsocks (<< 1.5.3-2)\nBreaks: shadowsocks (<< 1.5.3-2)\nArchitecture: any\nDepends: apg, ${shlibs:Depends}, ${misc:Depends}\nDescription: lightweight and secure socks5 proxy\n Shadowsocks-libev is a lightweight and secure socks5 proxy for\n embedded devices and low end boxes.\n .\n Shadowsocks-libev was inspired by Shadowsock (in Python). It's rewritten\n in pure C and only depends on libev, mbedTLS and a few other tiny\n libraries.\n\nPackage: libshadowsocks-libev1\nArchitecture: any\nMulti-Arch: same\nSection: libs\nBreaks: shadowsocks-libev (<< 2.4.0)\nPre-Depends: ${misc:Pre-Depends}\nDepends: ${shlibs:Depends}, ${misc:Depends}\nDescription: lightweight and secure socks5 proxy (shared library)\n Shadowsocks-libev is a lightweight and secure socks5 proxy for\n embedded devices and low end boxes.\n .\n Shadowsocks-libev was inspired by Shadowsock (in Python). It's rewritten\n in pure C and only depends on libev, mbedTLS and a few other tiny\n libraries.\n .\n This package provides shared libraries.\n\nPackage: libshadowsocks-libev-dev\nArchitecture: any\nSection: libdevel\nBreaks: shadowsocks-libev (<< 2.4.0)\nDepends: libshadowsocks-libev1 (= ${binary:Version}), ${misc:Depends}\nDescription: lightweight and secure socks5 proxy (development files)\n Shadowsocks-libev is a lightweight and secure socks5 proxy for\n embedded devices and low end boxes.\n .\n Shadowsocks-libev was inspired by Shadowsock (in Python). It's rewritten\n in pure C and only depends on libev, mbedTLS and a few other tiny\n libraries.\n .\n This package provides C header files for the libraries.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/copyright",
    "content": "Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/\nUpstream-Name: shadowsocks-libev\nUpstream-Contact: Max Lv <max.c.lv@gmail.com>\nSource: https://github.com/shadowsocks/shadowsocks-libev\n\nFiles: *\nCopyright: 2013-2015, Clow Windy <clowwindy42@gmail.com>\n           2013-2016, Max Lv <max.c.lv@gmail.com>\n           2014, Linus Yang <linusyang@gmail.com>\nLicense: GPL-3+\n\nFiles: debian/*\nCopyright: 2013-2015, Max Lv <max.c.lv@gmail.com>\n           2015, Boyuan Yang <073plan@gmail.com>\n           2016, Roger Shimizu <rogershimizu@gmail.com>\nLicense: GPL-3+\n\nFiles: libcork/* libipset/*\nCopyright: 2011-2013, RedJack, LLC.\nLicense: BSD-3-clause\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 .\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 Neither the name of RedJack Software, LLC nor the names of its\n contributors may be used to endorse or promote products derived\n from 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 HOLDER 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\nFiles: doc/*\nCopyright: 2012-2016, Max Lv <max.c.lv@gmail.com>\nLicense: GFDL-1.1+\n\nFiles: src/json.c src/json.h\nCopyright: 2012-2014, James McLaughlin et al.\nLicense: BSD-2-clause\n\nFiles: src/resolv.c src/resolv.h\nCopyright: 2014, Dustin Lundquist <dustin@null-ptr.net>\nLicense: BSD-2-clause\n\nFiles: src/ss-nat\nCopyright: 2015, OpenWrt-dist\n           2015, Jian Chang <aa65535@live.com>\nLicense: GPL-3+\n\nFiles: src/uthash.h\nCopyright: 2003-2013, Troy D. Hanson\nLicense: BSD-1-clause\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 * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n .\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER\n OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nLicense: BSD-2-clause\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 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\nLicense: GFDL-1.1+\n Permission is granted to copy, distribute and/or modify this document\n under the terms of the GNU Free Documentation License, Version 1.1 or\n any later version published by the Free Software Foundation;\n with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.\n .\n A copy of the license is included in the section entitled\n \"GNU Free Documentation License\".\n\nLicense: GPL-3+\n This package 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 package 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 On Debian systems, the complete text of the GNU General\n Public License version 3 can be found in \"/usr/share/common-licenses/GPL-3\".\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/copyright.original",
    "content": "This work was packaged for Debian by:\n\n    Max Lv <max.c.lv@gmail.com> on Sat, 06 Apr 2013 16:59:15 +0800\n\nIt was downloaded from:\n\n    https://github.com/madeye/shadowsocks-libev\n\nUpstream Author(s):\n\n    clowwindy <clowwindy42@gmail.com>\n\nCopyright:\n\n    Copyright (C) 2013 Max Lv\n\nLicense:\n\n    GPLv3\n\nThe Debian packaging is:\n\n    Copyright (C) 2013 Max Lv <max.c.lv@gmail.com>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/libshadowsocks-libev-dev.install",
    "content": "usr/include/\nusr/lib/*/pkgconfig/\nusr/lib/*/libshadowsocks-libev.so\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/libshadowsocks-libev1.install",
    "content": "usr/lib/*/libshadowsocks-libev.so.*\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/rules",
    "content": "#!/usr/bin/make -f\n# See debhelper(7) (uncomment to enable)\n# output every command that modifies files on the build system.\n#export DH_VERBOSE = 1\n\n# Security Hardening\nexport DEB_BUILD_MAINT_OPTIONS = hardening=+all\n\nDPKG_EXPORT_BUILDFLAGS = 1\ninclude /usr/share/dpkg/buildflags.mk\n\noverride_dh_auto_install:\n\tfind src/ -name '*.la' -delete\n\tdh_auto_install\n\noverride_dh_auto_configure:\n\tdh_auto_configure -- \\\n        --enable-shared \\\n        --disable-ssp\n\noverride_dh_installchangelogs:\n\tdh_installchangelogs -XChanges\n\n%:\n\tdh $@ --with systemd\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev-local@.service",
    "content": "#  This file is part of shadowsocks-libev.\n#\n#  Shadowsocks-libev 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 is a template unit file. Users may copy and rename the file into\n#  config directories to make new service instances. See systemd.unit(5)\n#  for details.\n\n[Unit]\nDescription=Shadowsocks-Libev Custom Client Service for %I\nDocumentation=man:ss-local(1)\nAfter=network.target\n\n[Service]\nType=simple\nCapabilityBoundingSet=CAP_NET_BIND_SERVICE\nExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/%i.json\n\n[Install]\nWantedBy=multi-user.target\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev-redir@.service",
    "content": "#  This file is part of shadowsocks-libev.\n#\n#  Shadowsocks-libev 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 is a template unit file. Users may copy and rename the file into\n#  config directories to make new service instances. See systemd.unit(5)\n#  for details.\n\n[Unit]\nDescription=Shadowsocks-Libev Custom Client Service Redir Mode for %I\nDocumentation=man:ss-redir(1)\nAfter=network.target\n\n[Service]\nType=simple\nCapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE\nExecStart=/usr/bin/ss-redir -c /etc/shadowsocks-libev/%i.json\n\n[Install]\nWantedBy=multi-user.target\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev-server@.service",
    "content": "#  This file is part of shadowsocks-libev.\n#\n#  Shadowsocks-libev 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 is a template unit file. Users may copy and rename the file into\n#  config directories to make new service instances. See systemd.unit(5)\n#  for details.\n\n[Unit]\nDescription=Shadowsocks-Libev Custom Server Service for %I\nDocumentation=man:ss-server(1)\nAfter=network.target\n\n[Service]\nType=simple\nCapabilityBoundingSet=CAP_NET_BIND_SERVICE\nExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/%i.json\n\n[Install]\nWantedBy=multi-user.target\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev-tunnel@.service",
    "content": "#  This file is part of shadowsocks-libev.\n#\n#  Shadowsocks-libev 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 is a template unit file. Users may copy and rename the file into\n#  config directories to make new service instances. See systemd.unit(5)\n#  for details.\n\n[Unit]\nDescription=Shadowsocks-Libev Custom Client Service Tunnel Mode for %I\nDocumentation=man:ss-tunnel(1)\nAfter=network.target\n\n[Service]\nType=simple\nCapabilityBoundingSet=CAP_NET_BIND_SERVICE\nExecStart=/usr/bin/ss-tunnel -c /etc/shadowsocks-libev/%i.json\n\n[Install]\nWantedBy=multi-user.target\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.default",
    "content": "# Defaults for shadowsocks initscript\n# sourced by /etc/init.d/shadowsocks-libev\n# installed at /etc/default/shadowsocks-libev by the maintainer scripts\n\n#\n# This is a POSIX shell fragment\n#\n# Note: `START', `GROUP' and `MAXFD' options are not recognized by systemd.\n# Please change those settings in the corresponding systemd unit file.\n\n# Enable during startup?\nSTART=yes\n\n# Configuration file\nCONFFILE=\"/etc/shadowsocks-libev/config.json\"\n\n# Extra command line arguments\nDAEMON_ARGS=\"-u\"\n\n# User and group to run the server as\nUSER=root\nGROUP=root\n\n# Number of maximum file descriptors\nMAXFD=32768\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.docs",
    "content": "AUTHORS\nREADME.md\ndebian/copyright.original\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.init",
    "content": "#!/bin/sh\n### BEGIN INIT INFO\n# Provides:          shadowsocks-libev\n# Required-Start:    $network $local_fs $remote_fs\n# Required-Stop:     $remote_fs\n# Default-Start:     2 3 4 5\n# Default-Stop:      0 1 6\n# Short-Description: lightweight secured socks5 proxy\n# Description:       Shadowsocks-libev is a lightweight secured\n#                    socks5 proxy for embedded devices and low end boxes.\n### END INIT INFO\n\n# Author: Max Lv <max.c.lv@gmail.com>\n\n# PATH should only include /usr/ if it runs after the mountnfs.sh script\nPATH=/sbin:/usr/sbin:/bin:/usr/bin\nDESC=shadowsocks-libev       # Introduce a short description here\nNAME=shadowsocks-libev       # Introduce the short server's name here\nDAEMON=/usr/bin/ss-server    # Introduce the server's location here\nDAEMON_ARGS=\"\"               # Arguments to run the daemon with\nPIDFILE=/var/run/$NAME/$NAME.pid\nSCRIPTNAME=/etc/init.d/$NAME\n\n# Exit if the package is not installed\n[ -x $DAEMON ] || exit 0\n\n# Read configuration variable file if it is present\n[ -r /etc/default/$NAME ] && . /etc/default/$NAME\n\n[ \"$START\" = \"yes\" ] || exit 0\n\n: ${USER:=\"root\"}\n: ${GROUP:=\"root\"}\n\n# Load the VERBOSE setting and other rcS variables\n. /lib/init/vars.sh\n\n# Define LSB log_* functions.\n# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.\n. /lib/lsb/init-functions\n\n#\n# Function that starts the daemon/service\n#\ndo_start()\n{\n    # Modify the file descriptor limit\n    ulimit -n ${MAXFD}\n\n    # Take care of pidfile permissions\n    mkdir /var/run/$NAME 2>/dev/null || true\n    chown \"$USER:$GROUP\" /var/run/$NAME\n\n    # Return\n    #   0 if daemon has been started\n    #   1 if daemon was already running\n    #   2 if daemon could not be started\n    start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid root:$GROUP --exec $DAEMON --test > /dev/null \\\n        || return 1\n    start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid root:$GROUP --exec $DAEMON -- \\\n        -c \"$CONFFILE\" -a \"$USER\" -u -f $PIDFILE $DAEMON_ARGS \\\n        || return 2\n}\n\n#\n# Function that stops the daemon/service\n#\ndo_stop()\n{\n    # Return\n    #   0 if daemon has been stopped\n    #   1 if daemon was already stopped\n    #   2 if daemon could not be stopped\n    #   other if a failure occurred\n    start-stop-daemon --stop --quiet --retry=KILL/5 --pidfile $PIDFILE --exec $DAEMON\n    RETVAL=\"$?\"\n    [ \"$RETVAL\" = 2 ] && return 2\n    # Wait for children to finish too if this is a daemon that forks\n    # and if the daemon is only ever run from this initscript.\n    # If the above conditions are not satisfied then add some other code\n    # that waits for the process to drop all resources that could be\n    # needed by services started subsequently.  A last resort is to\n    # sleep for some time.\n    start-stop-daemon --stop --quiet --oknodo --retry=KILL/5 --exec $DAEMON\n    [ \"$?\" = 2 ] && return 2\n    # Many daemons don't delete their pidfiles when they exit.\n    rm -f $PIDFILE\n    return \"$RETVAL\"\n}\n\n\ncase \"$1\" in\n    start)\n        [ \"$VERBOSE\" != no ] && log_daemon_msg \"Starting $DESC \" \"$NAME\"\n        do_start\n        case \"$?\" in\n            0|1) [ \"$VERBOSE\" != no ] && log_end_msg 0 ;;\n        2) [ \"$VERBOSE\" != no ] && log_end_msg 1 ;;\n    esac\n    ;;\nstop)\n    [ \"$VERBOSE\" != no ] && log_daemon_msg \"Stopping $DESC\" \"$NAME\"\n    do_stop\n    case \"$?\" in\n        0|1) [ \"$VERBOSE\" != no ] && log_end_msg 0 ;;\n    2) [ \"$VERBOSE\" != no ] && log_end_msg 1 ;;\nesac\n;;\n  status)\n      status_of_proc \"$DAEMON\" \"$NAME\" && exit 0 || exit $?\n      ;;\n  restart|force-reload)\n      log_daemon_msg \"Restarting $DESC\" \"$NAME\"\n      do_stop\n      case \"$?\" in\n          0|1)\n              do_start\n              case \"$?\" in\n                  0) log_end_msg 0 ;;\n              1) log_end_msg 1 ;; # Old process is still running\n          *) log_end_msg 1 ;; # Failed to start\n      esac\n      ;;\n  *)\n      # Failed to stop\n      log_end_msg 1\n      ;;\n    esac\n    ;;\n*)\n    echo \"Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}\" >&2\n    exit 3\n    ;;\nesac\n\n:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.install",
    "content": "usr/bin/\nusr/share/man/\ndebian/config.json usr/share/shadowsocks-libev\ndebian/shadowsocks-libev-*.service lib/systemd/system\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.postinst",
    "content": "#!/bin/sh\n\nset -e\n\ncase \"$1\" in\n\tconfigure|reconfigure)\n\t\tif [ ! -f /etc/shadowsocks-libev/config.json ]; then\n\t\t\tpasswd=$(apg -n 1 -M ncl)\n\t\t\tmkdir -p /etc/shadowsocks-libev\n\t\t\tsed \"s/barfoo!/$passwd/\" /usr/share/shadowsocks-libev/config.json \\\n\t\t\t\t> /etc/shadowsocks-libev/config.json\n\t\tfi\n\t\t;;\n\tabort-upgrade|abort-remove|abort-deconfigure)\n\t\texit 0\n\t\t;;\n\t*)\n\t\techo \"postinst called with unknown argument \\`$1'\" >&2\n\t\texit 0\n\t\t;;\nesac\n\n#DEBHELPER#\n\nexit 0\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.postrm",
    "content": "#!/bin/sh\n\nset -e\n\ncase \"$1\" in\n\tpurge)\n\t\trm -f /etc/shadowsocks-libev/config.json\n\t\ttest -f /etc/shadowsocks-libev/* \\\n\t\t\t|| rm -r /etc/shadowsocks-libev/\n\t\t;;\n\tremove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)\n\t\texit 0\n\t\t;;\n\t*)\n\t\techo \"postrm called with unknown argument \\`$1'\" >&2\n\t\texit 0\n\t\t;;\nesac\n\n#DEBHELPER#\n\nexit 0\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/shadowsocks-libev.service",
    "content": "#  This file is part of shadowsocks-libev.\n#\n#  Shadowsocks-libev 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 file is default for Debian packaging. See also\n#  /etc/default/shadowsocks-libev for environment variables.\n\n[Unit]\nDescription=Shadowsocks-libev Default Server Service\nDocumentation=man:shadowsocks-libev(8)\nAfter=network.target\n\n[Service]\nType=simple\nEnvironmentFile=/etc/default/shadowsocks-libev\nUser=root\nLimitNOFILE=32768\nExecStart=/usr/bin/ss-server -a $USER -c $CONFFILE $DAEMON_ARGS\n\n[Install]\nWantedBy=multi-user.target\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/source/format",
    "content": "3.0 (quilt)\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/source.lintian-overrides",
    "content": "# false positive: #505857\nshadowsocks-libev source: debian-watch-file-should-mangle-version\n# false positive: #765166\nshadowsocks-libev source: license-problem-gfdl-invariants\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/debian/watch",
    "content": "version=4\n\nopts=\" \\\n   filenamemangle=s%(?:.*?)?v?(\\d[\\d.]*)\\.tar\\.gz%shadowsocks-libev-$1.tar.gz%\" \\\n   https://github.com/shadowsocks/shadowsocks-libev/tags \\\n   (?:.*?/)?v?(\\d[\\d.]*)\\.tar\\.gz debian uupdate\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/Makefile.am",
    "content": "ASCIIDOC = @ASCIIDOC@\nASCIIDOC_EXTRA =\nMANPAGE_XSL = manpage-normal.xsl\nXMLTO = @XMLTO@\nXMLTO_EXTRA = -m manpage-bold-literal.xsl\nGZIPCMD = @GZIP@\nINSTALL = @INSTALL@\nRM = @RM@\nMV = @MV@\nSED = @SED@\nVERSION = `$(SED) -n 's/.*PACKAGE_VERSION \"\\(.*\\)\"/\\1/p'\\\n\t\t  ../config.h`\n\n# Guard against environment variables\nif ENABLE_DOCUMENTATION\n  MAN1_DOC =\n  MAN1_DOC += ss-local.1\n  MAN1_DOC += ss-manager.1\n  MAN1_DOC += ss-nat.1\n  MAN1_DOC += ss-redir.1\n  MAN1_DOC += ss-server.1\n  MAN1_DOC += ss-tunnel.1\n\n  MAN8_DOC =\n  MAN8_DOC += shadowsocks-libev.8\nelse\n  MAN1_DOC =\n  MAN8_DOC =\nendif\n\nMAN8_XML = $(MAN8_DOC:%.8=%.xml)\nMAN1_XML = $(MAN1_DOC:%.1=%.xml)\nMAN_XML  = $(MAN8_XML) $(MAN1_XML)\n\nMAN8_HTML = $(MAN8_DOC:%.8=%.html)\nMAN1_HTML = $(MAN1_DOC:%.1=%.html)\nMAN_HTML  = $(MAN8_HTML) $(MAN1_HTML)\n\nMAN8_TXT = $(MAN8_DOC:%.8=%.asciidoc)\nMAN1_TXT = $(MAN1_DOC:%.1=%.asciidoc)\nMAN_TXT  = $(MAN8_TXT) $(MAN1_TXT)\n\nman_MANS = $(MAN8_DOC) $(MAN1_DOC)\n\nhtml-local: $(MAN_HTML)\n\n%.1: %.xml\n\t$(AM_V_GEN)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<\n\n%.8: %.xml\n\t$(AM_V_GEN)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<\n\n%.xml: %.asciidoc\n\t$(AM_V_GEN)$(ASCIIDOC) -b docbook -d manpage -f asciidoc.conf \\\n\t    -aversion=$(VERSION) $(ASCIIDOC_EXTRA) -o $@ $<\n\n%.html: %.asciidoc\n\t$(AM_V_GEN)$(ASCIIDOC) -b html4 -d article -f asciidoc.conf \\\n\t\t-aversion=$(VERSION) $(ASCIIDOC_EXTRA) -o $@ $<\n\ndoc_DATA = $(MAN_HTML)\nCLEANFILES = $(MAN_XML) $(man_MANS) $(MAN_HTML)\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = $(srcdir)/Makefile.in $(srcdir)/Makefile.am\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nSOURCES =\nDIST_SOURCES =\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__uninstall_files_from_dir = { \\\n  test -z \"$$files\" \\\n    || { test ! -d \"$$dir\" && test ! -f \"$$dir\" && test ! -r \"$$dir\"; } \\\n    || { echo \" ( cd '$$dir' && rm -f\" $$files \")\"; \\\n         $(am__cd) \"$$dir\" && rm -f $$files; }; \\\n  }\nman1dir = $(mandir)/man1\nam__installdirs = \"$(DESTDIR)$(man1dir)\" \"$(DESTDIR)$(man8dir)\" \\\n\t\"$(DESTDIR)$(docdir)\"\nman8dir = $(mandir)/man8\nNROFF = nroff\nMANS = $(man_MANS)\nDATA = $(doc_DATA)\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = `$(SED) -n 's/.*PACKAGE_VERSION \"\\(.*\\)\"/\\1/p'\\\n\t\t  ../config.h`\n\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nASCIIDOC_EXTRA = \nMANPAGE_XSL = manpage-normal.xsl\nXMLTO_EXTRA = -m manpage-bold-literal.xsl\nGZIPCMD = @GZIP@\n@ENABLE_DOCUMENTATION_FALSE@MAN1_DOC = \n\n# Guard against environment variables\n@ENABLE_DOCUMENTATION_TRUE@MAN1_DOC = ss-local.1 ss-manager.1 ss-nat.1 \\\n@ENABLE_DOCUMENTATION_TRUE@\tss-redir.1 ss-server.1 ss-tunnel.1\n@ENABLE_DOCUMENTATION_FALSE@MAN8_DOC = \n@ENABLE_DOCUMENTATION_TRUE@MAN8_DOC = shadowsocks-libev.8\nMAN8_XML = $(MAN8_DOC:%.8=%.xml)\nMAN1_XML = $(MAN1_DOC:%.1=%.xml)\nMAN_XML = $(MAN8_XML) $(MAN1_XML)\nMAN8_HTML = $(MAN8_DOC:%.8=%.html)\nMAN1_HTML = $(MAN1_DOC:%.1=%.html)\nMAN_HTML = $(MAN8_HTML) $(MAN1_HTML)\nMAN8_TXT = $(MAN8_DOC:%.8=%.asciidoc)\nMAN1_TXT = $(MAN1_DOC:%.1=%.asciidoc)\nMAN_TXT = $(MAN8_TXT) $(MAN1_TXT)\nman_MANS = $(MAN8_DOC) $(MAN1_DOC)\ndoc_DATA = $(MAN_HTML)\nCLEANFILES = $(MAN_XML) $(man_MANS) $(MAN_HTML)\nall: all-am\n\n.SUFFIXES:\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\ninstall-man1: $(man_MANS)\n\t@$(NORMAL_INSTALL)\n\t@list1=''; \\\n\tlist2='$(man_MANS)'; \\\n\ttest -n \"$(man1dir)\" \\\n\t  && test -n \"`echo $$list1$$list2`\" \\\n\t  || exit 0; \\\n\techo \" $(MKDIR_P) '$(DESTDIR)$(man1dir)'\"; \\\n\t$(MKDIR_P) \"$(DESTDIR)$(man1dir)\" || exit 1; \\\n\t{ for i in $$list1; do echo \"$$i\"; done;  \\\n\tif test -n \"$$list2\"; then \\\n\t  for i in $$list2; do echo \"$$i\"; done \\\n\t    | sed -n '/\\.1[a-z]*$$/p'; \\\n\tfi; \\\n\t} | while read p; do \\\n\t  if test -f $$p; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; echo \"$$p\"; \\\n\tdone | \\\n\tsed -e 'n;s,.*/,,;p;h;s,.*\\.,,;s,^[^1][0-9a-z]*$$,1,;x' \\\n\t      -e 's,\\.[0-9a-z]*$$,,;$(transform);G;s,\\n,.,' | \\\n\tsed 'N;N;s,\\n, ,g' | { \\\n\tlist=; while read file base inst; do \\\n\t  if test \"$$base\" = \"$$inst\"; then list=\"$$list $$file\"; else \\\n\t    echo \" $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'\"; \\\n\t    $(INSTALL_DATA) \"$$file\" \"$(DESTDIR)$(man1dir)/$$inst\" || exit $$?; \\\n\t  fi; \\\n\tdone; \\\n\tfor i in $$list; do echo \"$$i\"; done | $(am__base_list) | \\\n\twhile read files; do \\\n\t  test -z \"$$files\" || { \\\n\t    echo \" $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'\"; \\\n\t    $(INSTALL_DATA) $$files \"$(DESTDIR)$(man1dir)\" || exit $$?; }; \\\n\tdone; }\n\nuninstall-man1:\n\t@$(NORMAL_UNINSTALL)\n\t@list=''; test -n \"$(man1dir)\" || exit 0; \\\n\tfiles=`{ for i in $$list; do echo \"$$i\"; done; \\\n\tl2='$(man_MANS)'; for i in $$l2; do echo \"$$i\"; done | \\\n\t  sed -n '/\\.1[a-z]*$$/p'; \\\n\t} | sed -e 's,.*/,,;h;s,.*\\.,,;s,^[^1][0-9a-z]*$$,1,;x' \\\n\t      -e 's,\\.[0-9a-z]*$$,,;$(transform);G;s,\\n,.,'`; \\\n\tdir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)\ninstall-man8: $(man_MANS)\n\t@$(NORMAL_INSTALL)\n\t@list1=''; \\\n\tlist2='$(man_MANS)'; \\\n\ttest -n \"$(man8dir)\" \\\n\t  && test -n \"`echo $$list1$$list2`\" \\\n\t  || exit 0; \\\n\techo \" $(MKDIR_P) '$(DESTDIR)$(man8dir)'\"; \\\n\t$(MKDIR_P) \"$(DESTDIR)$(man8dir)\" || exit 1; \\\n\t{ for i in $$list1; do echo \"$$i\"; done;  \\\n\tif test -n \"$$list2\"; then \\\n\t  for i in $$list2; do echo \"$$i\"; done \\\n\t    | sed -n '/\\.8[a-z]*$$/p'; \\\n\tfi; \\\n\t} | while read p; do \\\n\t  if test -f $$p; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; echo \"$$p\"; \\\n\tdone | \\\n\tsed -e 'n;s,.*/,,;p;h;s,.*\\.,,;s,^[^8][0-9a-z]*$$,8,;x' \\\n\t      -e 's,\\.[0-9a-z]*$$,,;$(transform);G;s,\\n,.,' | \\\n\tsed 'N;N;s,\\n, ,g' | { \\\n\tlist=; while read file base inst; do \\\n\t  if test \"$$base\" = \"$$inst\"; then list=\"$$list $$file\"; else \\\n\t    echo \" $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'\"; \\\n\t    $(INSTALL_DATA) \"$$file\" \"$(DESTDIR)$(man8dir)/$$inst\" || exit $$?; \\\n\t  fi; \\\n\tdone; \\\n\tfor i in $$list; do echo \"$$i\"; done | $(am__base_list) | \\\n\twhile read files; do \\\n\t  test -z \"$$files\" || { \\\n\t    echo \" $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'\"; \\\n\t    $(INSTALL_DATA) $$files \"$(DESTDIR)$(man8dir)\" || exit $$?; }; \\\n\tdone; }\n\nuninstall-man8:\n\t@$(NORMAL_UNINSTALL)\n\t@list=''; test -n \"$(man8dir)\" || exit 0; \\\n\tfiles=`{ for i in $$list; do echo \"$$i\"; done; \\\n\tl2='$(man_MANS)'; for i in $$l2; do echo \"$$i\"; done | \\\n\t  sed -n '/\\.8[a-z]*$$/p'; \\\n\t} | sed -e 's,.*/,,;h;s,.*\\.,,;s,^[^8][0-9a-z]*$$,8,;x' \\\n\t      -e 's,\\.[0-9a-z]*$$,,;$(transform);G;s,\\n,.,'`; \\\n\tdir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)\ninstall-docDATA: $(doc_DATA)\n\t@$(NORMAL_INSTALL)\n\t@list='$(doc_DATA)'; test -n \"$(docdir)\" || list=; \\\n\tif test -n \"$$list\"; then \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(docdir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(docdir)\" || exit 1; \\\n\tfi; \\\n\tfor p in $$list; do \\\n\t  if test -f \"$$p\"; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; \\\n\tdone | $(am__base_list) | \\\n\twhile read files; do \\\n\t  echo \" $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'\"; \\\n\t  $(INSTALL_DATA) $$files \"$(DESTDIR)$(docdir)\" || exit $$?; \\\n\tdone\n\nuninstall-docDATA:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(doc_DATA)'; test -n \"$(docdir)\" || list=; \\\n\tfiles=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \\\n\tdir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)\ntags TAGS:\n\nctags CTAGS:\n\ncscope cscopelist:\n\n\ndistdir: $(DISTFILES)\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\tlist='$(DISTFILES)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(MANS) $(DATA)\ninstalldirs:\n\tfor dir in \"$(DESTDIR)$(man1dir)\" \"$(DESTDIR)$(man8dir)\" \"$(DESTDIR)$(docdir)\"; 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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\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\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool 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\nhtml-am: html-local\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am: install-docDATA install-man\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man: install-man1 install-man8\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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 mostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-docDATA uninstall-man\n\nuninstall-man: uninstall-man1 uninstall-man8\n\n.MAKE: install-am install-strip\n\n.PHONY: all all-am check check-am clean clean-generic clean-libtool \\\n\tcscopelist-am ctags-am distclean distclean-generic \\\n\tdistclean-libtool distdir dvi dvi-am html html-am html-local \\\n\tinfo info-am install install-am install-data install-data-am \\\n\tinstall-docDATA install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-man1 install-man8 \\\n\tinstall-pdf install-pdf-am install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tmaintainer-clean maintainer-clean-generic mostlyclean \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags-am uninstall uninstall-am uninstall-docDATA uninstall-man \\\n\tuninstall-man1 uninstall-man8\n\n\nhtml-local: $(MAN_HTML)\n\n%.1: %.xml\n\t$(AM_V_GEN)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<\n\n%.8: %.xml\n\t$(AM_V_GEN)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<\n\n%.xml: %.asciidoc\n\t$(AM_V_GEN)$(ASCIIDOC) -b docbook -d manpage -f asciidoc.conf \\\n\t    -aversion=$(VERSION) $(ASCIIDOC_EXTRA) -o $@ $<\n\n%.html: %.asciidoc\n\t$(AM_V_GEN)$(ASCIIDOC) -b html4 -d article -f asciidoc.conf \\\n\t\t-aversion=$(VERSION) $(ASCIIDOC_EXTRA) -o $@ $<\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/asciidoc.conf",
    "content": "[tags]\nbracket-emphasis={1?[{1}]}<emphasis>&lt;|&gt;</emphasis>\n\n[quotes]\n&lt;|&gt;=#bracket-emphasis\n\n[attributes]\nasterisk=&#42;\nplus=&#43;\ncaret=&#94;\nstartsb=&#91;\nendsb=&#93;\nbackslash=&#92;\ntilde=&#126;\napostrophe=&#39;\nbacktick=&#96;\nlitdd=&#45;&#45;\n\nifdef::doctype-manpage[]\nifdef::backend-docbook[]\n[header]\ntemplate::[header-declarations]\n<refentry>\n<refmeta>\n<refentrytitle>{mantitle}</refentrytitle>\n<manvolnum>{manvolnum}</manvolnum>\n<refmiscinfo class=\"source\">Shadowsocks-libev</refmiscinfo>\n<refmiscinfo class=\"version\">{version}</refmiscinfo>\n<refmiscinfo class=\"manual\">Shadowsocks-libev Manual</refmiscinfo>\n</refmeta>\n<refnamediv>\n  <refname>{manname}</refname>\n  <refpurpose>{manpurpose}</refpurpose>\n</refnamediv>\nendif::backend-docbook[]\nendif::doctype-manpage[]\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/manpage-base.xsl",
    "content": "<!-- manpage-base.xsl:\n     special formatting for manpages rendered from asciidoc+docbook -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n\t\tversion=\"1.0\">\n\n<!-- these params silence some output from xmlto -->\n<xsl:param name=\"man.output.quietly\" select=\"1\"/>\n<xsl:param name=\"refentry.meta.get.quietly\" select=\"1\"/>\n\n<!-- convert asciidoc callouts to man page format;\n     git.docbook.backslash and git.docbook.dot params\n     must be supplied by another XSL file or other means -->\n<xsl:template match=\"co\">\n\t<xsl:value-of select=\"concat(\n\t\t\t      $git.docbook.backslash,'fB(',\n\t\t\t      substring-after(@id,'-'),')',\n\t\t\t      $git.docbook.backslash,'fR')\"/>\n</xsl:template>\n<xsl:template match=\"calloutlist\">\n\t<xsl:value-of select=\"$git.docbook.dot\"/>\n\t<xsl:text>sp&#10;</xsl:text>\n\t<xsl:apply-templates/>\n\t<xsl:text>&#10;</xsl:text>\n</xsl:template>\n<xsl:template match=\"callout\">\n\t<xsl:value-of select=\"concat(\n\t\t\t      $git.docbook.backslash,'fB',\n\t\t\t      substring-after(@arearefs,'-'),\n\t\t\t      '. ',$git.docbook.backslash,'fR')\"/>\n\t<xsl:apply-templates/>\n\t<xsl:value-of select=\"$git.docbook.dot\"/>\n\t<xsl:text>br&#10;</xsl:text>\n</xsl:template>\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/manpage-bold-literal.xsl",
    "content": "<!-- manpage-bold-literal.xsl:\n     special formatting for manpages rendered from asciidoc+docbook -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n\t\tversion=\"1.0\">\n\n<!-- render literal text as bold (instead of plain or monospace);\n     this makes literal text easier to distinguish in manpages\n     viewed on a tty -->\n<xsl:template match=\"literal\">\n\t<xsl:value-of select=\"$git.docbook.backslash\"/>\n\t<xsl:text>fB</xsl:text>\n\t<xsl:apply-templates/>\n\t<xsl:value-of select=\"$git.docbook.backslash\"/>\n\t<xsl:text>fR</xsl:text>\n</xsl:template>\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/manpage-normal.xsl",
    "content": "<!-- manpage-normal.xsl:\n     special settings for manpages rendered from asciidoc+docbook\n     handles anything we want to keep away from docbook-xsl 1.72.0 -->\n<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n\t\tversion=\"1.0\">\n\n<xsl:import href=\"manpage-base.xsl\"/>\n\n<!-- these are the normal values for the roff control characters -->\n<xsl:param name=\"git.docbook.backslash\">\\</xsl:param>\n<xsl:param name=\"git.docbook.dot\"\t>.</xsl:param>\n\n</xsl:stylesheet>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/shadowsocks-libev.asciidoc",
    "content": "shadowsocks-libev(8)\n====================\n\nNAME\n----\nshadowsocks-libev - a lightweight and secure socks5 proxy\n\nSYNOPSIS\n--------\n*ss-local*|*ss-redir*|*ss-server*|*ss-tunnel*|*ss-manager*\n [-s <server_host>] [-p <server_port>] [-l <local_port>] [-k <password>]\n [-m <encrypt_method>] [-f <pid_file>] [-t <timeout>] [-c <config_file>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of *libev*\nto achieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components. One is `ss-server`(1)\nthat runs on a remote server to provide secured tunnel service.\n`ss-local`(1) and `ss-redir`(1) are clients on your local machines to proxy\ntraffic(TCP/UDP or both).\n`ss-tunnel`(1) is a tool for local port forwarding.\n\nWhile `ss-local`(1) works as a standard socks5 proxy, `ss-redir`(1) works\nas a transparent proxy and requires netfilter's NAT module. For more\ninformation, check out the 'EXAMPLE' section.\n\n`ss-manager`(1) is a controller for multi-user management and traffic\nstatistics, using UNIX domain socket to talk with `ss-server`(1).\nAlso, it provides a UNIX domain socket or IP based API for other software.\nAbout the details of this API, please refer to the 'PROTOCOL' section.\n\nOPTIONS\n-------\n\n-s <server_host>::\nSet the server's hostname or IP.\n\n-l <local_port>::\nSet the local port number.\n+\nNot available in server nor manager mode.\n\n-k <password>::\nSet the password. The server and the client should use the same password.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n\n-n <number>::\nSpecify max number of open files.\n+\nNot available in manager mode.\n+\nOnly available on Linux.\n\n-i <interface>::\nSend traffic through specific network interface.\n+\nFor example, there are three interfaces in your device, which is\nlo (127.0.0.1), eth0 (192.168.0.1) and eth1 (192.168.0.2).\nMeanwhile, you configure *shadowsocks-libev* to listen on 0.0.0.0:8388\nand bind to eth1. That results the traffic go out through eth1,\nbut not lo nor eth0. This option is useful to control traffic in\nmulti-interface environment.\n+\nNot available in redir mode.\n\n-b <local_address>::\nSpecify local address to bind.\n+\nNot available in server nor manager mode.\n\n-u::\nEnable UDP relay.\n+\nTPROXY is required in redir mode. You may need root permission.\n\n-U::\nEnable UDP relay and disable TCP relay.\n+\nNot available in local mode.\n\n-A::\nEnable onetime authentication.\n\n-w::\nEnable white list mode (when ACL enabled).\n+\nOnly available in server mode.\n\n-L <addr:port>::\nSpecify destination server address and port for local port forwarding.\n+\nOnly available in tunnel mode.\n\n-d <addr>::\nSetup name servers for internal DNS resolver (libudns).\nThe default server is fetched from /etc/resolv.conf.\n+\nOnly available in server and manager mode.\n\n--fast-open::\nEnable TCP fast open.\n+\nNot available in redir nor tunnel mode, with Linux kernel > 3.7.0.\n\n--acl <acl_config>::\nEnable ACL (Access Control List) and specify config file.\n+\nNot available in redir nor tunnel mode.\n\n--manager-address <path_to_unix_domain>::\nSpecify UNIX domain socket address.\n+\nOnly available in server and manager mode.\n\n--executable <path_to_server_executable>::\nSpecify the executable path of `ss-server`.\n+\nOnly available in manager mode.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nCONFIG FILE\n-----------\nThe config file is written in JSON and easy to edit.\n\nThe config file equivalent of command line options is listed as example below.\n[frame=\"topbot\",options=\"header\"]\n|==========================================================================\n| Command line                        | JSON\n| -s some.server.net                  | \"server\": \"some.server.net\"\n| -s some.server.net -p 1234 (client) | \"server\": \"some.server.net:1234\"\n| -p 1234 -k \"PasSworD\" (server)      | \"port_password\": {\"1234\":\"PasSworD\"}\n| -p 1234                             | \"server_port\": \"1234\"\n| -b 0.0.0.0                          | \"local_adress\": \"0.0.0.0\"\n| -l 4321                             | \"local_port\": \"4321\"\n| -k \"PasSworD\"                       | \"password\": \"PasSworD\"\n| -m \"aes-256-cfb\"                    | \"method\": \"aes-256-cfb\"\n| -t 60                               | \"timeout\": 60\n| --fast-open                         | \"fast_open\": true\n| -A                                  | \"auth\": true\n| -n \"/etc/nofile\"                    | \"nofile\": \"/etc/nofile\"\n| -d \"8.8.8.8\"                        | \"nameserver\": \"8.8.8.8\"\n| -L \"somedns.net:53\"                 | \"tunnel_address\": \"somedns.net:53\"\n| -u                                  | \"mode\": \"tcp_and_udp\"\n| -U                                  | \"mode\": \"udp_only\"\n| no \"-u\" nor \"-U\" options (default)  | \"mode\": \"tcp_only\"\n|============================================================================\n\nEXAMPLE\n-------\n`ss-redir` requires netfilter's NAT function. Here is an example:\n\n....\n# Create new chain\nroot@Wrt:~# iptables -t nat -N SHADOWSOCKS\nroot@Wrt:~# iptables -t mangle -N SHADOWSOCKS\n\n# Ignore your shadowsocks server's addresses\n# It's very IMPORTANT, just be careful.\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN\n\n# Ignore LANs and any other addresses you'd like to bypass the proxy\n# See Wikipedia and RFC5735 for full list of reserved networks.\n# See ashi009/bestroutetb for a highly optimized CHN route list.\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN\n\n# Anything else should be redirected to shadowsocks's local port\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345\n\n# Add any UDP rules\nroot@Wrt:~# ip rule add fwmark 0x01/0x01 table 100\nroot@Wrt:~# ip route add local 0.0.0.0/0 dev lo table 100\nroot@Wrt:~# iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01\n\n# Apply the rules\nroot@Wrt:~# iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS\nroot@Wrt:~# iptables -t mangle -A PREROUTING -j SHADOWSOCKS\n\n# Start the shadowsocks-redir\nroot@Wrt:~# ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid\n....\n\nPROTOCOL\n--------\n`ss-manager`(1) provides several APIs through UDP protocol::\n\nSend UDP commands in the following format to the manager-address provided to ss-manager(1): ::::\n command: [JSON data]\n\nTo add a port: ::::\n add: {\"server_port\": 8001, \"password\":\"7cd308cc059\"}\n\nTo remove a port: ::::\n remove: {\"server_port\": 8001}\n\nTo receive a pong: ::::\n ping\n\nThen `ss-manager`(1) will send back the traffic statistics: ::::\n stat: {\"8001\":11370}\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-server`(1),\n`ss-tunnel`(1),\n`ss-redir`(1),\n`ss-manager`(1),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-local.asciidoc",
    "content": "ss-local(1)\n===========\n\nNAME\n----\nss-local - shadowsocks client as socks5 proxy, libev port\n\nSYNOPSIS\n--------\n*ss-local*\n [-Auv] [-h|--help]\n [-s <server_host>] [-p <server_port>] [-l <local_port>]\n [-k <password>] [-m <encrypt_method>] [-f <pid_file>] [-t <timeout>]\n [-c <config_file>] [-b <interface>] [-a <user_name>]\n [-n <nofile>] [--fast-open] [--acl <acl_config>] [--mtu <MTU>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components. `ss-local`(1) works as a standard\nsocks5 proxy on local machines to proxy TCP traffic.\nFor more information, check out `shadowsocks-libev`(8).\n\nOPTIONS\n-------\n\n-s <server_host>::\nSet the server's hostname or IP.\n\n-p <server_port>::\nSet the server's port number.\n\n-l <local_port>::\nSet the local port number.\n\n-k <password>::\nSet the password. The server and the client should use the same password.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n+\nRefer to `shadowsocks-libev`(8) 'CONFIG FILE' section for more details.\n\n-n <number>::\nSpecify max number of open files.\n+\nOnly available on Linux.\n\n-i <interface>::\nSend traffic through specific network interface.\n+\nFor example, there are three interfaces in your device,\nwhich is lo (127.0.0.1), eth0 (192.168.0.1) and eth1 (192.168.0.2).\nMeanwhile, you configure `ss-local` to listen on 0.0.0.0:8388 and bind to eth1.\nThat results the traffic go out through eth1, but not lo nor eth0.\nThis option is useful to control traffic in multi-interface environment.\n\n-b <local_address>::\nSpecify local address to bind.\n\n-u::\nEnable UDP relay.\n\n-U::\nEnable UDP relay and disable TCP relay.\n\n-A::\nEnable onetime authentication.\n\n--fast-open::\nEnable TCP fast open.\n+\nOnly available with Linux kernel > 3.7.0.\n\n--acl <acl_config>::\nEnable ACL (Access Control List) and specify config file.\n\n--mtu <MTU>::\nSpecify the MTU of your network interface.\n\n--mptcp::\nEnable Multipath TCP.\n+\nOnly available with MPTCP enabled Linux kernel.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nEXAMPLE\n-------\n`ss-local`(1) can be started from command line and run in foreground.\nHere is an example:\n....\n# Start ss-local with given parameters\nss-local -s example.com -p 12345 -l 1080 -k foobar -m aes-256-cfb\n....\n\nSEE ALSO\n--------\n`ss-server`(1),\n`ss-tunnel`(1),\n`ss-redir`(1),\n`ss-manager`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-manager.asciidoc",
    "content": "ss-manager(1)\n=============\n\nNAME\n----\nss-manager - ss-server controller for multi-user management and traffic statistics\n\nSYNOPSIS\n--------\n*ss-manager*\n [-AuUv] [-h|--help]\n [-s <server_host>] [-p <server_port>] [-l <local_port>]\n [-k <password>] [-m <encrypt_method>] [-f <pid_file>]\n [-t <timeout>] [-c <config_file>] [-i <interface>]\n [-b <local_addr>] [-a <user_name>]\n [--manager-address <path_to_unix_domain>]\n [--executable <path_to_server_executable>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components.\n`ss-manager`(1) is a controller for multi-user management and\ntraffic statistics, using UNIX domain socket to talk with `ss-server`(1).\nAlso, it provides a UNIX domain socket or IP based API for other software.\nAbout the details of this API, please refer to the following 'PROTOCOL'\nsection.\n\nOPTIONS\n-------\n-s <server_host>::\nSet the server's hostname or IP.\n\n-k <password>::\nSet the password. The server and the client should use the same password.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n\n-i <interface>::\nSend traffic through specific network interface.\n+\nFor example, there are three interfaces in your device,\nwhich is lo (127.0.0.1), eth0 (192.168.0.1) and eth1 (192.168.0.2).\nMeanwhile, you configure `ss-local` to listen on 0.0.0.0:8388 and bind to eth1.\nThat results the traffic go out through eth1, but not lo nor eth0.\nThis option is useful to control traffic in multi-interface environment.\n\n-u::\n Enable UDP relay.\n\n-U::\nEnable UDP relay and disable TCP relay.\n\n-A::\nEnable onetime authentication.\n\n-d <addr>::\nSetup name servers for internal DNS resolver (libudns).\nThe default server is fetched from `/etc/resolv.conf`.\n\n--fast-open::\nEnable TCP fast open.\n+\nOnly available with Linux kernel > 3.7.0.\n\n--acl <acl_config>::\nEnable ACL (Access Control List) and specify config file.\n\n--manager-address <path_to_unix_domain>::\nSpecify UNIX domain socket address for the communication between ss-manager(1) and ss-server(1).\n+\nOnly available in server and manager mode.\n\n--executable <path_to_server_executable>::\nSpecify the executable path of ss-server.\n+\nOnly available in manager mode.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nPROTOCOL\n--------\n`ss-manager`(1) provides several APIs through UDP protocol:\n\nSend UDP commands in the following format to the manager-address provided to ss-manager(1): ::::\n command: [JSON data]\n\nTo add a port: ::::\n add: {\"server_port\": 8001, \"password\":\"7cd308cc059\"}\n\nTo remove a port: ::::\n remove: {\"server_port\": 8001}\n\nTo receive a pong: ::::\n ping\n\nThen `ss-manager`(1) will send back the traffic statistics: ::::\n stat: {\"8001\":11370}\n\nEXAMPLE\n-------\nTo use `ss-manager`(1), First start it and specify necessary information.\n\nThen communicate with `ss-manager`(1) through UNIX Domain Socket using UDP\nprotocol:\n\n....\n# Start the manager. Arguments for ss-server will be passed to generated\n# ss-server process(es) respectively.\nss-manager --manager-address /tmp/manager.sock --executable $(which ss-server) -s example.com -m aes-256-cfb -c /path/to/config.json\n\n# Connect to the socket. Using netcat-openbsd as an example.\n# You should use scripts or other programs for further management.\nnc -Uu /tmp/manager.sock\n....\n\nAfter that, you may communicate with `ss-manager`(1) as described above in the\n'PROTOCOL' section.\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-server`(1),\n`ss-tunnel`(1),\n`ss-redir`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-nat.asciidoc",
    "content": "ss-nat(1)\n=========\n\nNAME\n----\nss-nat - helper script to setup NAT rules for transparent proxy\n\nSYNOPSIS\n--------\n*ss-nat*\n [-ouUfh]\n [-s <server_ip>] [-S <server_ip>] [-l <local_port>]\n [-L <local_port>] [-i <ip_list_file>] [-a <lan_ips>]\n [-b <wan_ips>] [-w <wan_ips>] [-e <extra_options>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n`ss-nat`(1) sets up NAT rules for `ss-redir`(1) to provide traffic redirection.\nIt requires netfilter's NAT module and `iptables`(8).\nFor more information, check out `shadowsocks-libev`(8) and the following\n'EXAMPLE' section.\n\nOPTIONS\n-------\n-s <server_ip>::\nIP address of shadowsocks remote server\n\n-l <local_port>::\nPort number of shadowsocks local server\n\n-S <server_ip>::\nIP address of shadowsocks remote UDP server\n\n-L <local_port>::\nPort number of shadowsocks local UDP server\n\n-i <ip_list_file>::\na file whose content is bypassed ip list\n\n-a <lan_ips>::\nLAN IP of access control, need a prefix to define access control mode\n\n-b <wan_ips>::\nWAN IP of will be bypassed\n\n-w <wan_ips>::\nWAN IP of will be forwarded\n\n-e <extra_options>::\nExtra options for iptables\n\n-o::\nApply the rules to the OUTPUT chain\n\n-u::\nEnable udprelay mode, TPROXY is required\n\n-U::\nEnable udprelay mode, using different IP and ports for TCP and UDP\n\n-f::\nFlush the rules\n\n-h::\nShow this help message and exit\n\nEXAMPLE\n-------\n`ss-nat` requires `iptables`(8). Here is an example:\n\n....\n# Enable NAT rules for shadowsocks,\n# with both TCP and UDP redirection enabled,\n# and applied for both PREROUTING and OUTPUT chains\nroot@Wrt:~# ss-nat -s 192.168.1.100 -l 1080 -u -o\n\n# Disable and flush all NAT rules for shadowsocks\nroot@Wrt:~# ss-nat -f\n....\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-server`(1),\n`ss-tunnel`(1),\n`ss-manager`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-redir.asciidoc",
    "content": "ss-redir(1)\n===========\n\nNAME\n----\nss-redir - shadowsocks client as transparent proxy, libev port\n\nSYNOPSIS\n--------\n*ss-redir*\n [-AuUv] [-h|--help]\n [-s <server_host>] [-p <server_port>] [-l <local_port>]\n [-k <password>] [-m <encrypt_method>] [-f <pid_file>]\n [-t <timeout>] [-c <config_file>] [-b <local_address>]\n [-a <user_name>] [-n <nofile>] [--mtu <MTU>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components.\n`ss-redir`(1) works as a transparent proxy on local machines to proxy TCP\ntraffic and requires netfilter's NAT module.\nFor more information, check out `shadowsocks-libev`(8) and the following\n'EXAMPLE' section.\n\nOPTIONS\n-------\n-s <server_host>::\nSet the server's hostname or IP.\n\n-p <server_port>::\nSet the server's port number.\n\n-l <local_port>::\nSet the local port number.\n\n-k <password>::\nSet the password. The server and the client should use the same\npassword.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n+\nRefer to `shadowsocks-libev`(8) 'CONFIG FILE' section for more details.\n\n-n <number>::\nSpecify max number of open files.\n+\nOnly available on Linux.\n\n-b <local_address>::\nSpecify local address to bind.\n\n-u::\nEnable UDP relay.\n+\nTPROXY is required in redir mode. You may need root permission.\n\n-U::\nEnable UDP relay and disable TCP relay.\n\n-A::\nEnable onetime authentication.\n\n--mtu <MTU>::\nSpecify the MTU of your network interface.\n\n--mptcp::\nEnable Multipath TCP.\n+\nOnly available with MPTCP enabled Linux kernel.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nEXAMPLE\n-------\nss-redir requires netfilter's NAT function. Here is an example:\n\n....\n# Create new chain\nroot@Wrt:~# iptables -t nat -N SHADOWSOCKS\n\n# Ignore your shadowsocks server's addresses\n# It's very IMPORTANT, just be careful.\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN\n\n# Ignore LANs and any other addresses you'd like to bypass the proxy\n# See Wikipedia and RFC5735 for full list of reserved networks.\n# See ashi009/bestroutetb for a highly optimized CHN route list.\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN\n\n# Anything else should be redirected to shadowsocks's local port\nroot@Wrt:~# iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345\n\n# Add any UDP rules\nroot@Wrt:~# ip rule add fwmark 0x01/0x01 table 100\nroot@Wrt:~# ip route add local 0.0.0.0/0 dev lo table 100\nroot@Wrt:~# iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01\n\n# Apply the rules\nroot@Wrt:~# iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS\nroot@Wrt:~# iptables -t mangle -A PREROUTING -j SHADOWSOCKS\n\n# Start the shadowsocks-redir\nroot@Wrt:~# ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid\n....\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-server`(1),\n`ss-tunnel`(1),\n`ss-manager`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-server.asciidoc",
    "content": "ss-server(1)\n============\n\nNAME\n----\nss-server - shadowsocks server, libev port\n\nSYNOPSIS\n--------\n*ss-server*\n [-AuUv] [-h|--help]\n [-s <server_host>] [-p <server_port>] [-l <local_port>]\n [-k <password>] [-m <encrypt_method>] [-f <pid_file>]\n [-t <timeout>] [-c <config_file>] [-i <interface>]\n [-a <user_name>] [-d <addr>] [-n <nofile>]\n [--fast-open] [--acl <acl_config>] [--mtu <MTU>]\n [--manager-address <path_to_unix_domain>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components.\n`ss-server`(1) runs on a remote server to provide secured tunnel service.\nFor more information, check out `shadowsocks-libev`(8).\n\nOPTIONS\n-------\n-s <server_host>::\nSet the server's hostname or IP.\n\n-p <server_port>::\nSet the server's port number.\n\n-k <password>::\nSet the password. The server and the client should use the same password.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n+\nRefer to `shadowsocks-libev`(8) 'CONFIG FILE' section for more details.\n\n-n <number>::\nSpecify max number of open files.\n+\nOnly available on Linux.\n\n-i <interface>::\nSend traffic through specific network interface.\n+\nFor example, there are three interfaces in your device,\nwhich is lo (127.0.0.1), eth0 (192.168.0.1) and eth1 (192.168.0.2).\nMeanwhile, you configure `ss-server` to listen on 0.0.0.0:8388 and bind to eth1.\nThat results the traffic go out through eth1, but not lo nor eth0.\nThis option is useful to control traffic in multi-interface environment.\n\n-b <local_address>::\nSpecify local address to bind.\n\n-u::\nEnable UDP relay.\n\n-U::\nEnable UDP relay and disable TCP relay.\n\n-A::\nEnable onetime authentication.\n\n-6::\nResovle hostname to IPv6 address first.\n\n-w::\nEnable white list mode (when ACL enabled).\n\n-d <addr>::\nSetup name servers for internal DNS resolver (libudns).\nThe default server is fetched from '/etc/resolv.conf'.\n\n--fast-open::\nEnable TCP fast open.\n+\nOnly available with Linux kernel > 3.7.0.\n\n--acl <acl_config>::\nEnable ACL (Access Control List) and specify config file.\n\n--manager-address <path_to_unix_domain>::\nSpecify UNIX domain socket address for the communication between ss-manager(1) and ss-server(1).\n+\nOnly available in server and manager mode.\n\n--mtu <MTU>::\nSpecify the MTU of your network interface.\n\n--mptcp::\nEnable Multipath TCP.\n+\nOnly available with MPTCP enabled Linux kernel.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nEXAMPLE\n-------\nIt is recommended to use a config file when starting `ss-server`(1).\n\nThe config file is written in JSON and is easy to edit.\nCheck out the 'SEE ALSO' section for the default path of config file.\n\n....\n# Start the ss-server\nss-server -c /etc/shadowsocks-libev/config.json\n....\n\nINCOMPATIBILITY\n---------------\nThe config file of `shadowsocks-libev`(8) is slightly different from original\nshadowsocks.\nIn order to listen to both IPv4/IPv6 address, use the following grammar in\nyour config json file:\n....\n{\n\"server\":[\"::0\",\"0.0.0.0\"],\n...\n}\n....\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-tunnel`(1),\n`ss-redir`(1),\n`ss-manager`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/doc/ss-tunnel.asciidoc",
    "content": "ss-tunnel(1)\n============\n\nNAME\n----\nss-tunnel - shadowsocks tools for local port forwarding, libev port\n\nSYNOPSIS\n--------\n*ss-tunnel*\n [-AuUv] [-h|--help]\n [-s <server_host>] [-p <server_port>] [-l <local_port>]\n [-k <password>] [-m <encrypt_method>] [-f <pid_file>]\n [-t <timeout>] [-c <config_file>] [-i <interface>]\n [-b <local_addr>] [-a <user_name>] [-n <nofile>]\n [-L addr:port] [--mtu <MTU>]\n\nDESCRIPTION\n-----------\n*Shadowsocks-libev* is a lightweight and secure socks5 proxy.\nIt is a port of the original shadowsocks created by clowwindy.\n*Shadowsocks-libev* is written in pure C and takes advantage of libev to\nachieve both high performance and low resource consumption.\n\n*Shadowsocks-libev* consists of five components.\n`ss-tunnel`(1) is a tool for local port forwarding.\nSee 'OPTIONS' section for special option needed by `ss-tunnel`(1).\nFor more information, check out `shadowsocks-libev`(8).\n\nOPTIONS\n-------\n-s <server_host>::\nSet the server's hostname or IP.\n\n-p <server_port>::\nSet the server's port number.\n\n-l <local_port>::\nSet the local port number.\n\n-k <password>::\nSet the password. The server and the client should use the same password.\n\n-m <encrypt_method>::\nSet the cipher.\n+\n*Shadowsocks-libev* accepts 18 different ciphers:\n+\ntable, rc4, rc4-md5, aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb,\ncamellia-128-cfb, camellia-192-cfb, camellia-256-cfb, cast5-cfb, des-cfb,\nidea-cfb, rc2-cfb, seed-cfb, salsa20, chacha20 and chacha20-ietf.\n+\nThe default cipher is 'table'.\n+\nIf built with PolarSSL or custom OpenSSL libraries, some of\nthese ciphers may not work.\n\n-a <user_name>::\nRun as a specific user.\n\n-f <pid_file>::\nStart shadowsocks as a daemon with specific pid file.\n\n-t <timeout>::\nSet the socket timeout in seconds. The default value is 60.\n\n-c <config_file>::\nUse a configuration file.\n+\nRefer to `shadowsocks-libev`(8) 'CONFIG FILE' section for more details.\n\n-n <number>::\nSpecify max number of open files.\n+\nOnly available on Linux.\n\n-i <interface>::\nSend traffic through specific network interface.\n+\nFor example, there are three interfaces in your device,\nwhich is lo (127.0.0.1), eth0 (192.168.0.1) and eth1 (192.168.0.2).\nMeanwhile, you configure `ss-tunnel` to listen on 0.0.0.0:8388 and bind to eth1.\nThat results the traffic go out through eth1, but not lo nor eth0.\nThis option is useful to control traffic in multi-interface environment.\n\n-b <local_address>::\nSpecify local address to bind.\n\n-u::\nEnable UDP relay.\n\n-U::\nEnable UDP relay and disable TCP relay.\n\n-A::\nEnable onetime authentication.\n\n-L <addr:port>::\nSpecify destination server address and port for local port forwarding.\n+\nOnly used and available in tunnel mode.\n\n--mtu <MTU>::\nSpecify the MTU of your network interface.\n\n--mptcp::\nEnable Multipath TCP.\n+\nOnly available with MPTCP enabled Linux kernel.\n\n-v::\nEnable verbose mode.\n\n-h|--help::\nPrint help message.\n\nSEE ALSO\n--------\n`ss-local`(1),\n`ss-server`(1),\n`ss-redir`(1),\n`ss-manager`(1),\n`shadowsocks-libev`(8),\n`iptables`(8),\n/etc/shadowsocks-libev/config.json\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/alpine/Dockerfile",
    "content": "#\n# Dockerfile for shadowsocks-libev\n#\n\nFROM alpine\nMAINTAINER kev <noreply@datageek.info>\n\nENV SS_URL https://github.com/shadowsocks/shadowsocks-libev.git\nENV SS_DIR shadowsocks-libev\nENV SS_DEP git autoconf build-base curl libtool linux-headers openssl-dev asciidoc xmlto\n\nRUN set -ex \\\n    && apk add --update $SS_DEP \\\n    && git clone $SS_URL \\\n    && cd $SS_DIR \\\n        && ./configure \\\n        && make install \\\n        && cd .. \\\n        && rm -rf $SS_DIR \\\n    && apk del --purge $SS_DEP \\\n    && rm -rf /var/cache/apk/*\n\nENV SERVER_ADDR 0.0.0.0\nENV SERVER_PORT 8388\nENV PASSWORD=\nENV METHOD      aes-256-cfb\nENV TIMEOUT     300\nENV DNS_ADDR    8.8.8.8\nENV DNS_ADDR_2  8.8.4.4\n\nEXPOSE $SERVER_PORT\nEXPOSE $SERVER_PORT/udp\n\nCMD ss-server -s $SERVER_ADDR \\\n              -p $SERVER_PORT \\\n              -k ${PASSWORD:-$(hostname)} \\\n              -m $METHOD \\\n              -t $TIMEOUT \\\n              --fast-open \\\n              -d $DNS_ADDR \\\n              -d $DNS_ADDR_2 \\\n              -u\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/alpine/README.md",
    "content": "shadowsocks-libev\n=================\n\n[shadowsocks-libev][1] is a lightweight secured socks5 proxy for embedded\ndevices and low end boxes.  It is a port of [shadowsocks][2] created by\n@clowwindy maintained by @madeye and @linusyang.\n\nSuppose we have a VPS running Debian or Ubuntu.\nTo deploy the service quickly, we can use [docker][3].\n\n## Install docker\n\n```\n$ curl -sSL https://get.docker.com/ | sh\n$ docker --version\n```\n\n## Build docker image\n\n```bash\n$ curl -sSL https://github.com/shadowsocks/shadowsocks-libev/raw/master/docker/alpine/Dockerfile | docker build -t shadowsocks-libev .\n$ docker images\n```\n\n> You can also use a pre-built docker image: [vimagick/shadowsocks-libev][4] ![][5].\n\n## Run docker container\n\n```bash\n$ docker run -d -e METHOD=aes-256-cfb -e PASSWORD=9MLSpPmNt -p 8388:8388 --restart always shadowsocks-libev\n$ docker ps\n```\n\n> :warning: Click [here][6] to generate a strong password to protect your server.\n\n## Use docker-compose to manage (optional)\n\nIt is very handy to use [docker-compose][7] to manage docker containers.\nYou can download the binary at <https://github.com/docker/compose/releases>.\n\nThis is a sample `docker-compose.yml` file.\n\n```yaml\nshadowsocks:\n  image: shadowsocks-libev\n  ports:\n    - \"8388:8388\"\n  environment:\n    - METHOD=aes-256-cfb\n    - PASSWORD=9MLSpPmNt\n  restart: always\n```\n\nIt is highly recommended that you setup a directory tree to make things easy to manage.\n\n```bash\n$ mkdir -p ~/fig/shadowsocks/\n$ cd ~/fig/shadowsocks/\n$ curl -sSLO https://github.com/shadowsocks/shadowsocks-libev/raw/master/docker/alpine/docker-compose.yml\n$ docker-compose up -d\n$ docker-compose ps\n```\n\n## Finish\n\nAt last, download shadowsocks client [here][8].\nDon't forget to share internet with your friends.\n\n```yaml\n{\n    \"server\": \"your-vps-ip\",\n    \"server_port\": 8388,\n    \"local_address\": \"0.0.0.0\",\n    \"local_port\": 1080,\n    \"password\": \"9MLSpPmNt\",\n    \"timeout\": 600,\n    \"method\": \"aes-256-cfb\"\n}\n```\n\n[1]: https://github.com/shadowsocks/shadowsocks-libev\n[2]: https://shadowsocks.org/en/index.html\n[3]: https://github.com/docker/docker\n[4]: https://hub.docker.com/r/vimagick/shadowsocks-libev/\n[5]: https://badge.imagelayers.io/vimagick/shadowsocks-libev:latest.svg\n[6]: https://duckduckgo.com/?q=password+12&t=ffsb&ia=answer\n[7]: https://github.com/docker/compose\n[8]: https://shadowsocks.org/en/download/clients.html\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/alpine/docker-compose.yml",
    "content": "shadowsocks:\n  image: shadowsocks-libev\n  ports:\n    - \"8388:8388/tcp\"\n    - \"8388:8388/udp\"\n  environment:\n    - METHOD=aes-256-cfb\n    - PASSWORD=9MLSpPmNt\n  restart: always\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/ubuntu/Dockerfile",
    "content": "FROM ubuntu:latest\n\nMAINTAINER Sah Lee <contact@leesah.name>\n\nENV DEPENDENCIES git-core build-essential autoconf libtool libssl-dev asciidoc xmlto\nENV BASEDIR /tmp/shadowsocks-libev\nENV SERVER_PORT 8338\n\n# Set up building environment\nRUN apt-get update \\\n && apt-get install -y $DEPENDENCIES\n\n# Get the latest code, build and install\nRUN git clone https://github.com/shadowsocks/shadowsocks-libev.git $BASEDIR\nWORKDIR $BASEDIR\nRUN ./configure \\\n && make \\\n && make install\n\n# Tear down building environment and delete git repository\nWORKDIR /\nRUN rm -rf $BASEDIR/shadowsocks-libev\\\n && apt-get --purge autoremove -y $DEPENDENCIES\n\n# Port in the config file won't take affect. Instead we'll use 8388.\nEXPOSE $SERVER_PORT\nEXPOSE $SERVER_PORT/udp\n\n# Override the host and port in the config file.\nADD entrypoint /\nENTRYPOINT [\"/entrypoint\"]\nCMD [\"-h\"]\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/ubuntu/README.md",
    "content": "# Shadowsocks Dockerized\n\n## About this image\n\nThis image is built to ease the deployment of the Shadowsocks server daemon with Docker.\n\nFor Shadowsocks clients, you want to visit http://shadowsocks.org/en/download/clients.html\n\n### What is Shadowsocks\n\nA secure socks5 proxy designed to protect your Internet traffic.\n\nSee http://shadowsocks.org/\n\n### What is Docker\n\nAn open platform for distributed applications for developers and sysadmins.\n\nSee https://www.docker.com/\n\n## How to use this image\n\n### Start the daemon for the first time\n\n```bash\n$ docker run --name shadowsocks-app --detach --publish 58338:8338 shadowsocks/shadowsocks-libev -k \"5ecret!\"\n```\n\nTo see all supported arguments, run\n\n```bash\n$ docker run --rm shadowsocks/shadowsocks-libev --help\n```\n\nTo try the bleeding edge version of Shadowsocks, run with an `unstable` tag\n\n```bash\n$ docker run --name shadowsocks-app --detach --publish 58338:8338 shadowsocks/shadowsocks-libev:unstable -k \"5ecret!\"\n```\n\n### Stop the daemon\n\n```bash\n$ docker stop shadowsocks-app\n```\n\n### Start a stopped daemon\n\n```bash\n$ docker start shadowsocks-app\n```\n\n### Upgrade\n\nSimply run a `docker pull` to upgrade the image.\n\n```bash\n$ docker pull shadowsocks/shadowsocks-libev\n```\n\n### Use in CoreOS\n\nCOMING SOON\n\n### Use with `fig`\n\nCOMING SOON\n\n## Limitations\n\n### JSON Configuration File\n\nThis image doesn't support the JSON configuration at the moment. But I do plan to add the support in the future. So please stay tuned.\n\n### Specifying Hostname & Port\n\nDocker containers don't have the power to specify on what hostname or port of the host should the service listen to. These have to be specified using the `--publish` argument of `docker run`.\n\nSee [Docker run reference](https://docs.docker.com/reference/run/#expose-incoming-ports) for more details.\n\n## References\n\n* [Shadowsocks - Servers](http://shadowsocks.org/en/download/servers.html)\n* [shadowsocks-libev](https://github.com/shadowsocks/shadowsocks-libev/blob/master/README.md)\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/docker/ubuntu/entrypoint",
    "content": "#! /bin/bash\n\nIMAGE_NAME=\"leesah/shadowsocks-libev\"\nPORTNUMBER=\"8338\"\n\nSHADOWSOCKS=\"/usr/local/bin/ss-server\"\nHOST=\"-s 0.0.0.0\"\nPORT=\"-p $PORTNUMBER\"\nJSON=\"\"\n\nfunction print_usage {\n  echo\n  echo \"Usage:\"\n  echo \"  docker run $IMAGE_NAME [OPTIONS]\"\n  echo\n  echo \"OPTIONS\"\n  echo \"  -k <password>            password of your remote server\"\n  echo\n  echo \"  [-m <encrypt_method>]    encrypt method: table, rc4, rc4-md5\"\n  echo \"                           aes-128-cfb, aes-192-cfb, aes-256-cfb,\"\n  echo \"                           bf-cfb, camellia-128-cfb, camellia-192-cfb,\"\n  echo \"                           camellia-256-cfb, cast5-cfb, des-cfb, idea-cfb,\"\n  echo \"                           rc2-cfb, seed-cfb, salsa20 and chacha20\"\n  echo \"  [-t <timeout>]           socket timeout in seconds\"\n  echo \"  [-c <config_file>]       config file in json\"\n  echo \"  [-u]                     enable udprelay mode\"\n  echo \"  [-v]                     verbose mode\"\n  echo\n  echo \"  [--fast-open]            enable TCP fast open\"\n  echo \"  [--acl <acl_file>]       config file of ACL \\(Access Control List\\)\"\n  echo\n  echo \"  [-h]                     print this\"\n  echo\n}\n\nfunction print_usage_configfile {\n  echo \"Config file is currently not supported by this image.\"\n  echo\n  echo \"See https://github.com/leesah/shadowsocks-libev/issues/1 for current progress.\"\n  echo\n}\n\nfunction print_usage_host {\n  echo \"To specify the host on which ss-server should listen, please use\"\n  echo \"  docker run -p $1::$PORTNUMBER ...\"\n  echo \"or\"\n  echo \"  docker run -p $1:<HOST-PORT>:$PORTNUMBER ...\"\n  echo\n  echo \"See manpage of docker-run for more details:\"\n  echo \"  man docker-run\"\n  echo\n}\n\nfunction print_usage_port {\n  echo \"To specify the port on which ss-server should listen, please use\"\n  echo \"  docker run -p $1:$PORTNUMBER ...\"\n  echo\n}\n\nOPTIONS=`getopt -o s:p:k:m:t:c:uvh --long server:,key:,password:,encrypt-method:,timeout:,acl:,server-port:,config-file:,fast-open,help -n \"$IMAGE_NAME\" -- \"$@\"`\nif [ $? -ne 0 ]; then\n  print_usage\n  exit 1\nfi\n\neval set -- \"$OPTIONS\"\nwhile true; do\n  case \"$1\" in\n    -k|--key|--password)      PASSWORD=\"-k $2\";         shift 2;;\n    -m|--encrypt-method)      ENCRYPTION=\"-m $2\";       shift 2;;\n    -t|--timeout)             TIMEOUT=\"-t $2\";          shift 2;;\n    --acl)                    ACL=\"--acl $2\";           shift 2;;\n    --fast-open)              FAST_OPEN=\"--fast-open\";  shift;;\n    -u)                       UDP_RELAY=\"-u\";           shift;;\n    -v)                       VERBOSE=\"-v\";             shift;;\n    --)                                                 shift; break;;\n\n    -c|--config-file)         print_usage_configfile;   exit 128;;\n    -s|--server)              print_usage_host \"$2\";    exit 128;;\n    -p|--server-port)         print_usage_port \"$2\";    exit 128;;\n    -h|--help)                print_usage;              exit 0;;\n\n    *)\n      echo \"$IMAGE_NAME: unexpected argument: $1\"\n      print_usage\n      exit 1;;\n  esac\ndone\n\nif [ -z \"$HOST\" -o -z \"$PORT\" -o -z \"$PASSWORD\" ]; then\n  echo \"$IMAGE_NAME: insufficient arguments.\"\n  print_usage\n  exit 1\nfi\n\necho \"Launching Shadowsocks server...\"\necho \"To watch the output, run\"\necho \"  docker ps -ql | xargs docker logs -f\"\n$SHADOWSOCKS $HOST $PORT $PASSWORD $ENCRYPTION $TIMEOUT $UDP_RELAY $VERBOSE $FAST_OPEN $ACL $JSON\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/COPYING",
    "content": "Copyright © 2011-2012, RedJack, LLC.\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\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\n    the documentation and/or other materials provided with the\n    distribution.\n\n  • Neither the name of RedJack Software, LLC nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this 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\nHOLDER 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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nnoinst_LTLIBRARIES = libcork.la\n\ncli_src = cli/commands.c\ncore_src = core/allocator.c core/error.c core/gc.c \\\n\t\t   core/hash.c core/ip-address.c core/mempool.c \\\n\t\t   core/timestamp.c core/u128.c\nds_src = ds/array.c ds/bitset.c ds/buffer.c ds/dllist.c \\\n\t\t ds/file-stream.c ds/hash-table.c ds/managed-buffer.c \\\n\t\t ds/ring-buffer.c ds/slice.c\nposix_src = posix/directory-walker.c posix/env.c posix/exec.c \\\n\t\t\tposix/files.c posix/process.c posix/subprocess.c\npthreads_src = pthreads/thread.c\n\nlibcork_la_SOURCES = $(cli_src) $(core_src) $(ds_src) \\\n\t\t\t\t\t $(posix_src) $(pthreads_src)\nlibcork_la_CFLAGS = -I$(top_srcdir)/libcork/include -DCORK_API=CORK_LOCAL\n\t\t\t\t\t \nlibcork_la_LDFLAGS = -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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 file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = libcork\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/auto/depcomp COPYING\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibcork_la_LIBADD =\nam__dirstamp = $(am__leading_dot)dirstamp\nam__objects_1 = cli/libcork_la-commands.lo\nam__objects_2 = core/libcork_la-allocator.lo core/libcork_la-error.lo \\\n\tcore/libcork_la-gc.lo core/libcork_la-hash.lo \\\n\tcore/libcork_la-ip-address.lo core/libcork_la-mempool.lo \\\n\tcore/libcork_la-timestamp.lo core/libcork_la-u128.lo\nam__objects_3 = ds/libcork_la-array.lo ds/libcork_la-bitset.lo \\\n\tds/libcork_la-buffer.lo ds/libcork_la-dllist.lo \\\n\tds/libcork_la-file-stream.lo ds/libcork_la-hash-table.lo \\\n\tds/libcork_la-managed-buffer.lo ds/libcork_la-ring-buffer.lo \\\n\tds/libcork_la-slice.lo\nam__objects_4 = posix/libcork_la-directory-walker.lo \\\n\tposix/libcork_la-env.lo posix/libcork_la-exec.lo \\\n\tposix/libcork_la-files.lo posix/libcork_la-process.lo \\\n\tposix/libcork_la-subprocess.lo\nam__objects_5 = pthreads/libcork_la-thread.lo\nam_libcork_la_OBJECTS = $(am__objects_1) $(am__objects_2) \\\n\t$(am__objects_3) $(am__objects_4) $(am__objects_5)\nlibcork_la_OBJECTS = $(am_libcork_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibcork_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcork_la_CFLAGS) \\\n\t$(CFLAGS) $(libcork_la_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/auto/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libcork_la_SOURCES)\nDIST_SOURCES = $(libcork_la_SOURCES)\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nnoinst_LTLIBRARIES = libcork.la\ncli_src = cli/commands.c\ncore_src = core/allocator.c core/error.c core/gc.c \\\n\t\t   core/hash.c core/ip-address.c core/mempool.c \\\n\t\t   core/timestamp.c core/u128.c\n\nds_src = ds/array.c ds/bitset.c ds/buffer.c ds/dllist.c \\\n\t\t ds/file-stream.c ds/hash-table.c ds/managed-buffer.c \\\n\t\t ds/ring-buffer.c ds/slice.c\n\nposix_src = posix/directory-walker.c posix/env.c posix/exec.c \\\n\t\t\tposix/files.c posix/process.c posix/subprocess.c\n\npthreads_src = pthreads/thread.c\nlibcork_la_SOURCES = $(cli_src) $(core_src) $(ds_src) \\\n\t\t\t\t\t $(posix_src) $(pthreads_src)\n\nlibcork_la_CFLAGS = -I$(top_srcdir)/libcork/include -DCORK_API=CORK_LOCAL\nlibcork_la_LDFLAGS = -static\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libcork/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign libcork/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\ncli/$(am__dirstamp):\n\t@$(MKDIR_P) cli\n\t@: > cli/$(am__dirstamp)\ncli/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) cli/$(DEPDIR)\n\t@: > cli/$(DEPDIR)/$(am__dirstamp)\ncli/libcork_la-commands.lo: cli/$(am__dirstamp) \\\n\tcli/$(DEPDIR)/$(am__dirstamp)\ncore/$(am__dirstamp):\n\t@$(MKDIR_P) core\n\t@: > core/$(am__dirstamp)\ncore/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) core/$(DEPDIR)\n\t@: > core/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-allocator.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-error.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-gc.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-hash.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-ip-address.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-mempool.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-timestamp.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\ncore/libcork_la-u128.lo: core/$(am__dirstamp) \\\n\tcore/$(DEPDIR)/$(am__dirstamp)\nds/$(am__dirstamp):\n\t@$(MKDIR_P) ds\n\t@: > ds/$(am__dirstamp)\nds/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) ds/$(DEPDIR)\n\t@: > ds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-array.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-bitset.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-buffer.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-dllist.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-file-stream.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-hash-table.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-managed-buffer.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-ring-buffer.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nds/libcork_la-slice.lo: ds/$(am__dirstamp) \\\n\tds/$(DEPDIR)/$(am__dirstamp)\nposix/$(am__dirstamp):\n\t@$(MKDIR_P) posix\n\t@: > posix/$(am__dirstamp)\nposix/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) posix/$(DEPDIR)\n\t@: > posix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-directory-walker.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-env.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-exec.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-files.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-process.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\nposix/libcork_la-subprocess.lo: posix/$(am__dirstamp) \\\n\tposix/$(DEPDIR)/$(am__dirstamp)\npthreads/$(am__dirstamp):\n\t@$(MKDIR_P) pthreads\n\t@: > pthreads/$(am__dirstamp)\npthreads/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) pthreads/$(DEPDIR)\n\t@: > pthreads/$(DEPDIR)/$(am__dirstamp)\npthreads/libcork_la-thread.lo: pthreads/$(am__dirstamp) \\\n\tpthreads/$(DEPDIR)/$(am__dirstamp)\n\nlibcork.la: $(libcork_la_OBJECTS) $(libcork_la_DEPENDENCIES) $(EXTRA_libcork_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libcork_la_LINK)  $(libcork_la_OBJECTS) $(libcork_la_LIBADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\t-rm -f cli/*.$(OBJEXT)\n\t-rm -f cli/*.lo\n\t-rm -f core/*.$(OBJEXT)\n\t-rm -f core/*.lo\n\t-rm -f ds/*.$(OBJEXT)\n\t-rm -f ds/*.lo\n\t-rm -f posix/*.$(OBJEXT)\n\t-rm -f posix/*.lo\n\t-rm -f pthreads/*.$(OBJEXT)\n\t-rm -f pthreads/*.lo\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@cli/$(DEPDIR)/libcork_la-commands.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-allocator.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-error.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-gc.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-hash.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-ip-address.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-mempool.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-timestamp.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@core/$(DEPDIR)/libcork_la-u128.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-array.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-bitset.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-buffer.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-dllist.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-file-stream.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-hash-table.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-managed-buffer.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-ring-buffer.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@ds/$(DEPDIR)/libcork_la-slice.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-directory-walker.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-env.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-exec.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-files.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-process.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@posix/$(DEPDIR)/libcork_la-subprocess.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@pthreads/$(DEPDIR)/libcork_la-thread.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\ncli/libcork_la-commands.lo: cli/commands.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT cli/libcork_la-commands.lo -MD -MP -MF cli/$(DEPDIR)/libcork_la-commands.Tpo -c -o cli/libcork_la-commands.lo `test -f 'cli/commands.c' || echo '$(srcdir)/'`cli/commands.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) cli/$(DEPDIR)/libcork_la-commands.Tpo cli/$(DEPDIR)/libcork_la-commands.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cli/commands.c' object='cli/libcork_la-commands.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o cli/libcork_la-commands.lo `test -f 'cli/commands.c' || echo '$(srcdir)/'`cli/commands.c\n\ncore/libcork_la-allocator.lo: core/allocator.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-allocator.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-allocator.Tpo -c -o core/libcork_la-allocator.lo `test -f 'core/allocator.c' || echo '$(srcdir)/'`core/allocator.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-allocator.Tpo core/$(DEPDIR)/libcork_la-allocator.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/allocator.c' object='core/libcork_la-allocator.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-allocator.lo `test -f 'core/allocator.c' || echo '$(srcdir)/'`core/allocator.c\n\ncore/libcork_la-error.lo: core/error.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-error.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-error.Tpo -c -o core/libcork_la-error.lo `test -f 'core/error.c' || echo '$(srcdir)/'`core/error.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-error.Tpo core/$(DEPDIR)/libcork_la-error.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/error.c' object='core/libcork_la-error.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-error.lo `test -f 'core/error.c' || echo '$(srcdir)/'`core/error.c\n\ncore/libcork_la-gc.lo: core/gc.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-gc.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-gc.Tpo -c -o core/libcork_la-gc.lo `test -f 'core/gc.c' || echo '$(srcdir)/'`core/gc.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-gc.Tpo core/$(DEPDIR)/libcork_la-gc.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/gc.c' object='core/libcork_la-gc.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-gc.lo `test -f 'core/gc.c' || echo '$(srcdir)/'`core/gc.c\n\ncore/libcork_la-hash.lo: core/hash.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-hash.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-hash.Tpo -c -o core/libcork_la-hash.lo `test -f 'core/hash.c' || echo '$(srcdir)/'`core/hash.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-hash.Tpo core/$(DEPDIR)/libcork_la-hash.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/hash.c' object='core/libcork_la-hash.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-hash.lo `test -f 'core/hash.c' || echo '$(srcdir)/'`core/hash.c\n\ncore/libcork_la-ip-address.lo: core/ip-address.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-ip-address.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-ip-address.Tpo -c -o core/libcork_la-ip-address.lo `test -f 'core/ip-address.c' || echo '$(srcdir)/'`core/ip-address.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-ip-address.Tpo core/$(DEPDIR)/libcork_la-ip-address.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/ip-address.c' object='core/libcork_la-ip-address.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-ip-address.lo `test -f 'core/ip-address.c' || echo '$(srcdir)/'`core/ip-address.c\n\ncore/libcork_la-mempool.lo: core/mempool.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-mempool.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-mempool.Tpo -c -o core/libcork_la-mempool.lo `test -f 'core/mempool.c' || echo '$(srcdir)/'`core/mempool.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-mempool.Tpo core/$(DEPDIR)/libcork_la-mempool.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/mempool.c' object='core/libcork_la-mempool.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-mempool.lo `test -f 'core/mempool.c' || echo '$(srcdir)/'`core/mempool.c\n\ncore/libcork_la-timestamp.lo: core/timestamp.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-timestamp.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-timestamp.Tpo -c -o core/libcork_la-timestamp.lo `test -f 'core/timestamp.c' || echo '$(srcdir)/'`core/timestamp.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-timestamp.Tpo core/$(DEPDIR)/libcork_la-timestamp.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/timestamp.c' object='core/libcork_la-timestamp.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-timestamp.lo `test -f 'core/timestamp.c' || echo '$(srcdir)/'`core/timestamp.c\n\ncore/libcork_la-u128.lo: core/u128.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT core/libcork_la-u128.lo -MD -MP -MF core/$(DEPDIR)/libcork_la-u128.Tpo -c -o core/libcork_la-u128.lo `test -f 'core/u128.c' || echo '$(srcdir)/'`core/u128.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) core/$(DEPDIR)/libcork_la-u128.Tpo core/$(DEPDIR)/libcork_la-u128.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='core/u128.c' object='core/libcork_la-u128.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o core/libcork_la-u128.lo `test -f 'core/u128.c' || echo '$(srcdir)/'`core/u128.c\n\nds/libcork_la-array.lo: ds/array.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-array.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-array.Tpo -c -o ds/libcork_la-array.lo `test -f 'ds/array.c' || echo '$(srcdir)/'`ds/array.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-array.Tpo ds/$(DEPDIR)/libcork_la-array.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/array.c' object='ds/libcork_la-array.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-array.lo `test -f 'ds/array.c' || echo '$(srcdir)/'`ds/array.c\n\nds/libcork_la-bitset.lo: ds/bitset.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-bitset.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-bitset.Tpo -c -o ds/libcork_la-bitset.lo `test -f 'ds/bitset.c' || echo '$(srcdir)/'`ds/bitset.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-bitset.Tpo ds/$(DEPDIR)/libcork_la-bitset.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/bitset.c' object='ds/libcork_la-bitset.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-bitset.lo `test -f 'ds/bitset.c' || echo '$(srcdir)/'`ds/bitset.c\n\nds/libcork_la-buffer.lo: ds/buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-buffer.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-buffer.Tpo -c -o ds/libcork_la-buffer.lo `test -f 'ds/buffer.c' || echo '$(srcdir)/'`ds/buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-buffer.Tpo ds/$(DEPDIR)/libcork_la-buffer.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/buffer.c' object='ds/libcork_la-buffer.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-buffer.lo `test -f 'ds/buffer.c' || echo '$(srcdir)/'`ds/buffer.c\n\nds/libcork_la-dllist.lo: ds/dllist.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-dllist.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-dllist.Tpo -c -o ds/libcork_la-dllist.lo `test -f 'ds/dllist.c' || echo '$(srcdir)/'`ds/dllist.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-dllist.Tpo ds/$(DEPDIR)/libcork_la-dllist.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/dllist.c' object='ds/libcork_la-dllist.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-dllist.lo `test -f 'ds/dllist.c' || echo '$(srcdir)/'`ds/dllist.c\n\nds/libcork_la-file-stream.lo: ds/file-stream.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-file-stream.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-file-stream.Tpo -c -o ds/libcork_la-file-stream.lo `test -f 'ds/file-stream.c' || echo '$(srcdir)/'`ds/file-stream.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-file-stream.Tpo ds/$(DEPDIR)/libcork_la-file-stream.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/file-stream.c' object='ds/libcork_la-file-stream.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-file-stream.lo `test -f 'ds/file-stream.c' || echo '$(srcdir)/'`ds/file-stream.c\n\nds/libcork_la-hash-table.lo: ds/hash-table.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-hash-table.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-hash-table.Tpo -c -o ds/libcork_la-hash-table.lo `test -f 'ds/hash-table.c' || echo '$(srcdir)/'`ds/hash-table.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-hash-table.Tpo ds/$(DEPDIR)/libcork_la-hash-table.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/hash-table.c' object='ds/libcork_la-hash-table.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-hash-table.lo `test -f 'ds/hash-table.c' || echo '$(srcdir)/'`ds/hash-table.c\n\nds/libcork_la-managed-buffer.lo: ds/managed-buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-managed-buffer.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-managed-buffer.Tpo -c -o ds/libcork_la-managed-buffer.lo `test -f 'ds/managed-buffer.c' || echo '$(srcdir)/'`ds/managed-buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-managed-buffer.Tpo ds/$(DEPDIR)/libcork_la-managed-buffer.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/managed-buffer.c' object='ds/libcork_la-managed-buffer.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-managed-buffer.lo `test -f 'ds/managed-buffer.c' || echo '$(srcdir)/'`ds/managed-buffer.c\n\nds/libcork_la-ring-buffer.lo: ds/ring-buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-ring-buffer.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-ring-buffer.Tpo -c -o ds/libcork_la-ring-buffer.lo `test -f 'ds/ring-buffer.c' || echo '$(srcdir)/'`ds/ring-buffer.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-ring-buffer.Tpo ds/$(DEPDIR)/libcork_la-ring-buffer.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/ring-buffer.c' object='ds/libcork_la-ring-buffer.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-ring-buffer.lo `test -f 'ds/ring-buffer.c' || echo '$(srcdir)/'`ds/ring-buffer.c\n\nds/libcork_la-slice.lo: ds/slice.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT ds/libcork_la-slice.lo -MD -MP -MF ds/$(DEPDIR)/libcork_la-slice.Tpo -c -o ds/libcork_la-slice.lo `test -f 'ds/slice.c' || echo '$(srcdir)/'`ds/slice.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) ds/$(DEPDIR)/libcork_la-slice.Tpo ds/$(DEPDIR)/libcork_la-slice.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='ds/slice.c' object='ds/libcork_la-slice.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o ds/libcork_la-slice.lo `test -f 'ds/slice.c' || echo '$(srcdir)/'`ds/slice.c\n\nposix/libcork_la-directory-walker.lo: posix/directory-walker.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-directory-walker.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-directory-walker.Tpo -c -o posix/libcork_la-directory-walker.lo `test -f 'posix/directory-walker.c' || echo '$(srcdir)/'`posix/directory-walker.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-directory-walker.Tpo posix/$(DEPDIR)/libcork_la-directory-walker.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/directory-walker.c' object='posix/libcork_la-directory-walker.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-directory-walker.lo `test -f 'posix/directory-walker.c' || echo '$(srcdir)/'`posix/directory-walker.c\n\nposix/libcork_la-env.lo: posix/env.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-env.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-env.Tpo -c -o posix/libcork_la-env.lo `test -f 'posix/env.c' || echo '$(srcdir)/'`posix/env.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-env.Tpo posix/$(DEPDIR)/libcork_la-env.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/env.c' object='posix/libcork_la-env.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-env.lo `test -f 'posix/env.c' || echo '$(srcdir)/'`posix/env.c\n\nposix/libcork_la-exec.lo: posix/exec.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-exec.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-exec.Tpo -c -o posix/libcork_la-exec.lo `test -f 'posix/exec.c' || echo '$(srcdir)/'`posix/exec.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-exec.Tpo posix/$(DEPDIR)/libcork_la-exec.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/exec.c' object='posix/libcork_la-exec.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-exec.lo `test -f 'posix/exec.c' || echo '$(srcdir)/'`posix/exec.c\n\nposix/libcork_la-files.lo: posix/files.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-files.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-files.Tpo -c -o posix/libcork_la-files.lo `test -f 'posix/files.c' || echo '$(srcdir)/'`posix/files.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-files.Tpo posix/$(DEPDIR)/libcork_la-files.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/files.c' object='posix/libcork_la-files.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-files.lo `test -f 'posix/files.c' || echo '$(srcdir)/'`posix/files.c\n\nposix/libcork_la-process.lo: posix/process.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-process.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-process.Tpo -c -o posix/libcork_la-process.lo `test -f 'posix/process.c' || echo '$(srcdir)/'`posix/process.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-process.Tpo posix/$(DEPDIR)/libcork_la-process.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/process.c' object='posix/libcork_la-process.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-process.lo `test -f 'posix/process.c' || echo '$(srcdir)/'`posix/process.c\n\nposix/libcork_la-subprocess.lo: posix/subprocess.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT posix/libcork_la-subprocess.lo -MD -MP -MF posix/$(DEPDIR)/libcork_la-subprocess.Tpo -c -o posix/libcork_la-subprocess.lo `test -f 'posix/subprocess.c' || echo '$(srcdir)/'`posix/subprocess.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) posix/$(DEPDIR)/libcork_la-subprocess.Tpo posix/$(DEPDIR)/libcork_la-subprocess.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='posix/subprocess.c' object='posix/libcork_la-subprocess.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o posix/libcork_la-subprocess.lo `test -f 'posix/subprocess.c' || echo '$(srcdir)/'`posix/subprocess.c\n\npthreads/libcork_la-thread.lo: pthreads/thread.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -MT pthreads/libcork_la-thread.lo -MD -MP -MF pthreads/$(DEPDIR)/libcork_la-thread.Tpo -c -o pthreads/libcork_la-thread.lo `test -f 'pthreads/thread.c' || echo '$(srcdir)/'`pthreads/thread.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) pthreads/$(DEPDIR)/libcork_la-thread.Tpo pthreads/$(DEPDIR)/libcork_la-thread.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='pthreads/thread.c' object='pthreads/libcork_la-thread.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcork_la_CFLAGS) $(CFLAGS) -c -o pthreads/libcork_la-thread.lo `test -f 'pthreads/thread.c' || echo '$(srcdir)/'`pthreads/thread.c\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\t-rm -rf cli/.libs cli/_libs\n\t-rm -rf core/.libs core/_libs\n\t-rm -rf ds/.libs ds/_libs\n\t-rm -rf posix/.libs posix/_libs\n\t-rm -rf pthreads/.libs pthreads/_libs\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES)\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_FILES)\n\t-rm -f cli/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f cli/$(am__dirstamp)\n\t-rm -f core/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f core/$(am__dirstamp)\n\t-rm -f ds/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f ds/$(am__dirstamp)\n\t-rm -f posix/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f posix/$(am__dirstamp)\n\t-rm -f pthreads/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f pthreads/$(am__dirstamp)\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-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf cli/$(DEPDIR) core/$(DEPDIR) ds/$(DEPDIR) posix/$(DEPDIR) pthreads/$(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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf cli/$(DEPDIR) core/$(DEPDIR) ds/$(DEPDIR) posix/$(DEPDIR) pthreads/$(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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \\\n\tctags-am distclean distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-am uninstall uninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/README.markdown",
    "content": "# libcork\n\nSo what is libcork, exactly?  It's a “simple, easily embeddable,\ncross-platform C library”.  It falls roughly into the same category as\n[glib](http://library.gnome.org/devel/glib/) or\n[APR](http://apr.apache.org/) in the C world; the STL,\n[POCO](http://pocoproject.org/), or [QtCore](http://qt.nokia.com/)\nin the C++ world; or the standard libraries of any decent dynamic\nlanguage.\n\nSo if libcork has all of these comparables, why a new library?  Well,\nnone of the C++ options are really applicable here.  And none of the C\noptions work, because one of the main goals is to have the library be\nhighly modular, and useful in resource-constrained systems.  Once we\ndescribe some of the design decisions that we've made in libcork, you'll\nhopefully see how this fits into an interesting niche of its own.\n\n## Using libcork\n\nThere are two primary ways to use libcork in your own software project:\nas a _shared library_, or _embedded_.\n\nWhen you use libcork as a shared library, you install it just like you\nwould any other C library.  We happen to use CMake as our build system,\nso you follow the usual CMake recipe to install the library.  (See the\n[INSTALL](INSTALL) file for details.)  All of the libcork code is\ncontained within a single shared library (called libcork.so,\nlibcork.dylib, or cork.dll, depending on the system).  We also install a\npkg-config file that makes it easy to add the appropriate compiler flags\nin your own build scripts.  So, you use pkg-config to find libcork's\ninclude and library files, link with libcork, and you're good to go.\n\nThe alternative is to embed libcork into your own software project's\ndirectory structure.  In this case, your build scripts compile the\nlibcork source along with the rest of your code.  This has some\nadvantages for resource-constrained systems, since (assuming your\ncompiler and linker are any good), you only include the libcork routines\nthat you actually use.  And if your toolchain supports link-time\noptimization, the libcork routines can be optimized into the rest of\nyour code.\n\nWhich should you use?  That's really up to you.  Linking against the\nshared library adds a runtime dependency, but gives you the usual\nbenefits of shared libraries: the library in memory is shared across\neach program that uses it; you can install a single bug-fix update and\nall libcork programs automatically take advantage of the new release;\netc.  The embedding option is great if you really need to make your\nlibrary as small as possible, or if you don't want to add that runtime\ndependency.\n\n## Design decisions\n\nNote that having libcork be **easily** embeddable has some ramifications\non the library's design.  In particular, we don't want to make any\nassumptions about which build system you're embedding libcork into.  We\nhappen to use CMake, but you might be using autotools, waf, scons, or\nany number of others.  Most cross-platform libraries follow the\nautotools model of performing some checks at compile time (maybe during\na separate “configure” phase, maybe not) to choose the right API\nimplementation for the current platform.  Since we can't assume a build\nsystem, we have to take a different approach, and do as many checks as\nwe can using the C preprocessor.  Any check that we can't make in the\npreprocessor has to be driven by a C preprocessor macro definition,\nwhich you (the libcork user) are responsible for checking for and\ndefining.  So we need to have as few of those as possible.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/cli/commands.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"libcork/cli.h\"\n#include \"libcork/core.h\"\n#include \"libcork/ds.h\"\n\n\n#define streq(a,b) (strcmp((a), (b)) == 0)\n\nstatic struct cork_buffer  breadcrumbs_buf = CORK_BUFFER_INIT();\n\nstatic void\ncork_command_add_breadcrumb(struct cork_command *command)\n{\n    cork_buffer_append_printf(&breadcrumbs_buf, \" %s\", command->name);\n}\n\n#define cork_command_breadcrumbs() ((char *) breadcrumbs_buf.buf)\n\nstatic void\ncork_command_run(struct cork_command *command, int argc, char **argv);\n\nstatic struct cork_command *\ncork_command_set_get_subcommand(struct cork_command *command,\n                                const char *command_name)\n{\n    struct cork_command  **curr;\n    for (curr = command->set; *curr != NULL; curr++) {\n        if (streq(command_name, (*curr)->name)) {\n            return *curr;\n        }\n    }\n    return NULL;\n}\n\nstatic void\ncork_command_set_show_help(struct cork_command *command)\n{\n    size_t  max_length = 0;\n    struct cork_command  **curr;\n\n    /* Calculate the length of the longest command name. */\n    for (curr = command->set; *curr != NULL; curr++) {\n        size_t  len = strlen((*curr)->name);\n        if (len > max_length) {\n            max_length = len;\n        }\n    }\n\n    /* Then print out the available commands. */\n    printf(\"Usage:%s <command> [<options>]\\n\"\n           \"\\nAvailable commands:\\n\",\n           cork_command_breadcrumbs());\n\n    for (curr = command->set; *curr != NULL; curr++) {\n        printf(\"  %*s\", (int) -max_length, (*curr)->name);\n        if ((*curr)->short_desc != NULL) {\n            printf(\"  %s\\n\", (*curr)->short_desc);\n        } else {\n            printf(\"\\n\");\n        }\n    }\n}\n\nstatic void\ncork_command_leaf_show_help(struct cork_command *command)\n{\n    printf(\"Usage:%s\", cork_command_breadcrumbs());\n    if (command->usage_suffix != NULL) {\n        printf(\" %s\", command->usage_suffix);\n    }\n    if (command->full_help != NULL) {\n        printf(\"\\n\\n%s\", command->full_help);\n    } else {\n        printf(\"\\n\");\n    }\n}\n\nvoid\ncork_command_show_help(struct cork_command *command, const char *message)\n{\n    if (message != NULL) {\n        printf(\"%s\\n\", message);\n    }\n\n    if (command->type == CORK_COMMAND_SET) {\n        cork_command_set_show_help(command);\n    } else if (command->type == CORK_LEAF_COMMAND) {\n        cork_command_leaf_show_help(command);\n    }\n}\n\nstatic void\ncork_command_set_run_help(struct cork_command *command, int argc, char **argv)\n{\n    /* When we see the help command when processing a command set, we use any\n     * remaining arguments to identifity which subcommand the user wants help\n     * with. */\n\n    /* Skip over the name of the command set */\n    argc--;\n    argv++;\n\n    while (argc > 0 && command->type == CORK_COMMAND_SET) {\n        struct cork_command  *subcommand =\n            cork_command_set_get_subcommand(command, argv[0]);\n        if (subcommand == NULL) {\n            printf(\"Unknown command \\\"%s\\\".\\n\"\n                   \"Usage:%s <command> [<options>]\\n\",\n                   argv[0], cork_command_breadcrumbs());\n            exit(EXIT_FAILURE);\n        }\n\n        cork_command_add_breadcrumb(subcommand);\n        command = subcommand;\n        argc--;\n        argv++;\n    }\n\n    cork_command_show_help(command, NULL);\n}\n\nstatic void\ncork_command_set_run(struct cork_command *command, int argc, char **argv)\n{\n    const char  *command_name;\n    struct cork_command  *subcommand;\n\n    if (argc == 0) {\n        printf(\"No command given.\\n\");\n        cork_command_set_show_help(command);\n        exit(EXIT_FAILURE);\n    }\n\n    command_name = argv[0];\n\n    /* The \"help\" command is special. */\n    if (streq(command_name, \"help\")) {\n        cork_command_set_run_help(command, argc, argv);\n        return;\n    }\n\n    /* Otherwise look for a real subcommand with this name. */\n    subcommand = cork_command_set_get_subcommand(command, command_name);\n    if (subcommand == NULL) {\n        printf(\"Unknown command \\\"%s\\\".\\n\"\n               \"Usage:%s <command> [<options>]\\n\",\n               command_name, cork_command_breadcrumbs());\n        exit(EXIT_FAILURE);\n    } else {\n        cork_command_run(subcommand, argc, argv);\n    }\n}\n\nstatic void\ncork_command_leaf_run(struct cork_command *command, int argc, char **argv)\n{\n    command->run(argc, argv);\n}\n\nstatic void\ncork_command_cleanup(void)\n{\n    cork_buffer_done(&breadcrumbs_buf);\n}\n\nstatic void\ncork_command_run(struct cork_command *command, int argc, char **argv)\n{\n    cork_command_add_breadcrumb(command);\n\n    /* If the gives the --help option at this point, describe the current\n     * command. */\n    if (argc >= 2 && (streq(argv[1], \"--help\") || streq(argv[1], \"-h\"))) {\n        cork_command_show_help(command, NULL);\n        return;\n    }\n\n    /* Otherwise let the command parse any options that occur here. */\n    if (command->parse_options != NULL) {\n        int  option_count = command->parse_options(argc, argv);\n        argc -= option_count;\n        argv += option_count;\n    } else {\n        argc--;\n        argv++;\n    }\n\n    switch (command->type) {\n        case CORK_COMMAND_SET:\n            cork_command_set_run(command, argc, argv);\n            return;\n\n        case CORK_LEAF_COMMAND:\n            cork_command_leaf_run(command, argc, argv);\n            return;\n\n        default:\n            cork_unreachable();\n    }\n}\n\n\nint\ncork_command_main(struct cork_command *root, int argc, char **argv)\n{\n    /* Clean up after ourselves when the command finishes. */\n    atexit(cork_command_cleanup);\n\n    /* Run the root command. */\n    cork_command_run(root, argc, argv);\n    return EXIT_SUCCESS;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/allocator.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/attributes.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n\n\n/*-----------------------------------------------------------------------\n * reallocf\n */\n\n#if !CORK_HAVE_REALLOCF\nvoid *\ncork_xrealloc(void *ptr, size_t new_size)\n{\n    void  *result = realloc(ptr, new_size);\n    if (result == NULL) {\n        free(ptr);\n    }\n    return result;\n}\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Allocating strings\n */\n\nstatic inline const char *\nstrndup_internal(const char *str, size_t len)\n{\n    size_t  allocated_size = len + sizeof(size_t) + 1;\n    size_t  *new_str = malloc(allocated_size);\n    if (new_str == NULL) {\n        return NULL;\n    }\n\n    *new_str = allocated_size;\n    char  *dest = (char *) (void *) (new_str + 1);\n    strncpy(dest, str, len);\n    dest[len] = '\\0';\n    return dest;\n}\n\nconst char *\ncork_xstrndup(const char *str, size_t len)\n{\n    return strndup_internal(str, len);\n}\n\nconst char *\ncork_xstrdup(const char *str)\n{\n    return strndup_internal(str, strlen(str));\n}\n\n\nvoid\ncork_strfree(const char *str)\n{\n    size_t  *base = ((size_t *) str) - 1;\n    free(base);\n}\n\n\n/*-----------------------------------------------------------------------\n * Abort on failure\n */\n\nvoid *\ncork_malloc(size_t size)\n{\n    void  *result = cork_xmalloc(size);\n    if (CORK_UNLIKELY(result == NULL)) {\n        abort();\n    }\n    return result;\n}\n\nvoid *\ncork_calloc(size_t count, size_t size)\n{\n    void  *result = cork_xcalloc(count, size);\n    if (CORK_UNLIKELY(result == NULL)) {\n        abort();\n    }\n    return result;\n}\n\nvoid *\ncork_realloc(void *ptr, size_t new_size)\n{\n    void  *result = cork_xrealloc(ptr, new_size);\n    if (CORK_UNLIKELY(result == NULL)) {\n        abort();\n    }\n    return result;\n}\n\nconst char *\ncork_strdup(const char *src)\n{\n    const char  *result = cork_xstrdup(src);\n    if (CORK_UNLIKELY(result == NULL)) {\n        abort();\n    }\n    return result;\n}\n\nconst char *\ncork_strndup(const char *src, size_t size)\n{\n    const char  *result = cork_xstrndup(src, size);\n    if (CORK_UNLIKELY(result == NULL)) {\n        abort();\n    }\n    return result;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/error.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <errno.h>\n#include <stdarg.h>\n#include <string.h>\n\n#include \"libcork/config.h\"\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/ds/buffer.h\"\n#include \"libcork/os/process.h\"\n#include \"libcork/threads/basics.h\"\n\n\n/*-----------------------------------------------------------------------\n * Life cycle\n */\n\nstruct cork_error {\n    cork_error  code;\n    struct cork_buffer  *message;\n    struct cork_buffer  *other;\n    struct cork_buffer  buf1;\n    struct cork_buffer  buf2;\n    struct cork_error  *next;\n};\n\nstatic struct cork_error *\ncork_error_new(void)\n{\n    struct cork_error  *error = cork_new(struct cork_error);\n    error->code = CORK_ERROR_NONE;\n    cork_buffer_init(&error->buf1);\n    cork_buffer_init(&error->buf2);\n    error->message = &error->buf1;\n    error->other = &error->buf2;\n    return error;\n}\n\nstatic void\ncork_error_free(struct cork_error *error)\n{\n    cork_buffer_done(&error->buf1);\n    cork_buffer_done(&error->buf2);\n    free(error);\n}\n\n\nstatic struct cork_error * volatile  errors;\n\ncork_once_barrier(cork_error_list);\n\nstatic void\ncork_error_list_done(void)\n{\n    struct cork_error  *curr;\n    struct cork_error  *next;\n    for (curr = errors; curr != NULL; curr = next) {\n        next = curr->next;\n        cork_error_free(curr);\n    }\n}\n\nstatic void\ncork_error_list_init(void)\n{\n    cork_cleanup_at_exit(0, cork_error_list_done);\n}\n\n\ncork_tls(struct cork_error *, cork_error_);\n\nstatic struct cork_error *\ncork_error_get(void)\n{\n    struct cork_error  **error_ptr = cork_error__get();\n    if (CORK_UNLIKELY(*error_ptr == NULL)) {\n        struct cork_error  *old_head;\n        struct cork_error  *error = cork_error_new();\n        cork_once(cork_error_list, cork_error_list_init());\n        do {\n            old_head = errors;\n            error->next = old_head;\n        } while (cork_ptr_cas(&errors, old_head, error) != old_head);\n        *error_ptr = error;\n        return error;\n    } else {\n        return *error_ptr;\n    }\n}\n\n\n/*-----------------------------------------------------------------------\n * Public error API\n */\n\nbool\ncork_error_occurred(void)\n{\n    struct cork_error  *error = cork_error_get();\n    return error->code != CORK_ERROR_NONE;\n}\n\ncork_error\ncork_error_code(void)\n{\n    struct cork_error  *error = cork_error_get();\n    return error->code;\n}\n\nconst char *\ncork_error_message(void)\n{\n    struct cork_error  *error = cork_error_get();\n    return error->message->buf;\n}\n\nvoid\ncork_error_clear(void)\n{\n    struct cork_error  *error = cork_error_get();\n    error->code = CORK_ERROR_NONE;\n    cork_buffer_clear(error->message);\n}\n\nvoid\ncork_error_set_printf(cork_error code, const char *format, ...)\n{\n    va_list  args;\n    struct cork_error  *error = cork_error_get();\n    error->code = code;\n    va_start(args, format);\n    cork_buffer_vprintf(error->message, format, args);\n    va_end(args);\n}\n\nvoid\ncork_error_set_string(cork_error code, const char *str)\n{\n    struct cork_error  *error = cork_error_get();\n    error->code = code;\n    cork_buffer_set_string(error->message, str);\n}\n\nvoid\ncork_error_set_vprintf(cork_error code, const char *format, va_list args)\n{\n    struct cork_error  *error = cork_error_get();\n    error->code = code;\n    cork_buffer_vprintf(error->message, format, args);\n}\n\nvoid\ncork_error_prefix_printf(const char *format, ...)\n{\n    va_list  args;\n    struct cork_error  *error = cork_error_get();\n    struct cork_buffer  *temp;\n    va_start(args, format);\n    cork_buffer_vprintf(error->other, format, args);\n    va_end(args);\n    cork_buffer_append_copy(error->other, error->message);\n    temp = error->other;\n    error->other = error->message;\n    error->message = temp;\n}\n\nvoid\ncork_error_prefix_string(const char *str)\n{\n    struct cork_error  *error = cork_error_get();\n    struct cork_buffer  *temp;\n    cork_buffer_set_string(error->other, str);\n    cork_buffer_append_copy(error->other, error->message);\n    temp = error->other;\n    error->other = error->message;\n    error->message = temp;\n}\n\nvoid\ncork_error_prefix_vprintf(const char *format, va_list args)\n{\n    struct cork_error  *error = cork_error_get();\n    struct cork_buffer  *temp;\n    cork_buffer_vprintf(error->other, format, args);\n    cork_buffer_append_copy(error->other, error->message);\n    temp = error->other;\n    error->other = error->message;\n    error->message = temp;\n}\n\n\n/*-----------------------------------------------------------------------\n * Deprecated\n */\n\nvoid\ncork_error_set(uint32_t error_class, unsigned int error_code,\n               const char *format, ...)\n{\n    /* Create a fallback error code that's most likely not very useful. */\n    va_list  args;\n    va_start(args, format);\n    cork_error_set_vprintf(error_class + error_code, format, args);\n    va_end(args);\n}\n\nvoid\ncork_error_prefix(const char *format, ...)\n{\n    va_list  args;\n    va_start(args, format);\n    cork_error_prefix_vprintf(format, args);\n    va_end(args);\n}\n\n\n/*-----------------------------------------------------------------------\n * Built-in errors\n */\n\nvoid\ncork_system_error_set_explicit(int err)\n{\n    cork_error_set_string(err, strerror(err));\n}\n\nvoid\ncork_system_error_set(void)\n{\n    cork_error_set_string(errno, strerror(errno));\n}\n\nvoid\ncork_unknown_error_set_(const char *location)\n{\n    cork_error_set_printf(CORK_UNKNOWN_ERROR, \"Unknown error in %s\", location);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/gc.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n\n#include \"libcork/config/config.h\"\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/gc.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/dllist.h\"\n#include \"libcork/threads/basics.h\"\n\n\n#if !defined(CORK_DEBUG_GC)\n#define CORK_DEBUG_GC  0\n#endif\n\n#if CORK_DEBUG_GC\n#include <stdio.h>\n#define SP_DEBUG(...) fprintf(stderr, __VA_ARGS__)\n#else\n#define SP_DEBUG(...) /* no debug messages */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * GC context life cycle\n */\n\n#define ROOTS_SIZE  1024\n\n/* An internal structure allocated with every garbage-collected object. */\nstruct cork_gc_header;\n\n/* A garbage collector context. */\nstruct cork_gc {\n    /* The number of used entries in roots. */\n    size_t  root_count;\n    /* The possible roots of garbage cycles */\n    struct cork_gc_header  *roots[ROOTS_SIZE];\n};\n\ncork_tls(struct cork_gc, cork_gc);\n\nstatic void\ncork_gc_collect_cycles(struct cork_gc *gc);\n\n\n/*-----------------------------------------------------------------------\n * Garbage collection functions\n */\n\nstruct cork_gc_header {\n    /* The current reference count for this object, along with its color\n     * during the mark/sweep process. */\n    volatile int  ref_count_color;\n\n    /* The allocated size of this garbage-collected object (including\n     * the header). */\n    size_t  allocated_size;\n\n    /* The garbage collection interface for this object. */\n    struct cork_gc_obj_iface  *iface;\n};\n\n/*\n * Structure of ref_count_color:\n *\n *   +-----+---+---+---+---+---+\n *   | ... | 4 | 3 | 2 | 1 | 0 |\n *   +-----+---+---+---+---+---+\n *      ref_count    |   color\n *                   |\n *        buffered --/\n */\n\n#define cork_gc_ref_count_color(count, buffered, color) \\\n    (((count) << 3) | ((buffered) << 2) | (color))\n\n#define cork_gc_get_ref_count(hdr) \\\n    ((hdr)->ref_count_color >> 3)\n\n#define cork_gc_inc_ref_count(hdr) \\\n    do { \\\n        (hdr)->ref_count_color += (1 << 3); \\\n    } while (0)\n\n#define cork_gc_dec_ref_count(hdr) \\\n    do { \\\n        (hdr)->ref_count_color -= (1 << 3); \\\n    } while (0)\n\n#define cork_gc_get_color(hdr) \\\n    ((hdr)->ref_count_color & 0x3)\n\n#define cork_gc_set_color(hdr, color) \\\n    do { \\\n        (hdr)->ref_count_color = \\\n            ((hdr)->ref_count_color & ~0x3) | (color & 0x3); \\\n    } while (0)\n\n#define cork_gc_get_buffered(hdr) \\\n    (((hdr)->ref_count_color & 0x4) != 0)\n\n#define cork_gc_set_buffered(hdr, buffered) \\\n    do { \\\n        (hdr)->ref_count_color = \\\n            ((hdr)->ref_count_color & ~0x4) | (((buffered) & 1) << 2); \\\n    } while (0)\n\n#define cork_gc_free(hdr) \\\n    do { \\\n        if ((hdr)->iface->free != NULL) { \\\n            (hdr)->iface->free(cork_gc_get_object((hdr))); \\\n        } \\\n        free((hdr)); \\\n    } while (0)\n\n#define cork_gc_recurse(gc, hdr, recurser) \\\n    do { \\\n        if ((hdr)->iface->recurse != NULL) { \\\n            (hdr)->iface->recurse \\\n                ((gc), cork_gc_get_object((hdr)), (recurser), NULL); \\\n        } \\\n    } while (0)\n\nenum cork_gc_color {\n    /* In use or free */\n    GC_BLACK = 0,\n    /* Possible member of garbage cycle */\n    GC_GRAY = 1,\n    /* Member of garbage cycle */\n    GC_WHITE = 2,\n    /* Possible root of garbage cycle */\n    GC_PURPLE = 3\n};\n\n#define cork_gc_get_header(obj) \\\n    (((struct cork_gc_header *) (obj)) - 1)\n\n#define cork_gc_get_object(hdr) \\\n    ((void *) (((struct cork_gc_header *) (hdr)) + 1))\n\n\nvoid\ncork_gc_init(void)\n{\n    cork_gc_get();\n}\n\nvoid\ncork_gc_done(void)\n{\n    cork_gc_collect_cycles(cork_gc_get());\n}\n\nvoid *\ncork_gc_alloc(size_t instance_size, struct cork_gc_obj_iface *iface)\n{\n    size_t  full_size = instance_size + sizeof(struct cork_gc_header);\n    SP_DEBUG(\"Allocating %zu (%zu) bytes\\n\", instance_size, full_size);\n    struct cork_gc_header  *header = cork_malloc(full_size);\n    SP_DEBUG(\"  Result is %p[%p]\\n\", cork_gc_get_object(header), header);\n    header->ref_count_color = cork_gc_ref_count_color(1, false, GC_BLACK);\n    header->allocated_size = full_size;\n    header->iface = iface;\n    return cork_gc_get_object(header);\n}\n\nvoid *\ncork_gc_incref(void *obj)\n{\n    if (obj != NULL) {\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        cork_gc_inc_ref_count(header);\n        SP_DEBUG(\"Incrementing %p -> %d\\n\",\n              obj, cork_gc_get_ref_count(header));\n        cork_gc_set_color(header, GC_BLACK);\n    }\n    return obj;\n}\n\nstatic void\ncork_gc_decref_step(struct cork_gc *gc, void *obj, void *ud);\n\nstatic void\ncork_gc_release(struct cork_gc *gc, struct cork_gc_header *header)\n{\n    cork_gc_recurse(gc, header, cork_gc_decref_step);\n    cork_gc_set_color(header, GC_BLACK);\n    if (!cork_gc_get_buffered(header)) {\n        cork_gc_free(header);\n    }\n}\n\nstatic void\ncork_gc_possible_root(struct cork_gc *gc, struct cork_gc_header *header)\n{\n    if (cork_gc_get_color(header) != GC_PURPLE) {\n        SP_DEBUG(\"  Possible garbage cycle root\\n\");\n        cork_gc_set_color(header, GC_PURPLE);\n        if (!cork_gc_get_buffered(header)) {\n            cork_gc_set_buffered(header, true);\n            if (gc->root_count >= ROOTS_SIZE) {\n                cork_gc_collect_cycles(gc);\n            }\n            gc->roots[gc->root_count++] = header;\n        }\n    } else {\n        SP_DEBUG(\"  Already marked as possible garbage cycle root\\n\");\n    }\n}\n\nstatic void\ncork_gc_decref_step(struct cork_gc *gc, void *obj, void *ud)\n{\n    if (obj != NULL) {\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        cork_gc_dec_ref_count(header);\n        SP_DEBUG(\"Decrementing %p -> %d\\n\",\n              obj, cork_gc_get_ref_count(header));\n        if (cork_gc_get_ref_count(header) == 0) {\n            SP_DEBUG(\"  Releasing %p\\n\", header);\n            cork_gc_release(gc, header);\n        } else {\n            cork_gc_possible_root(gc, header);\n        }\n    }\n}\n\nvoid\ncork_gc_decref(void *obj)\n{\n    if (obj != NULL) {\n        struct cork_gc  *gc = cork_gc_get();\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        cork_gc_dec_ref_count(header);\n        SP_DEBUG(\"Decrementing %p -> %d\\n\",\n              obj, cork_gc_get_ref_count(header));\n        if (cork_gc_get_ref_count(header) == 0) {\n            SP_DEBUG(\"  Releasing %p\\n\", header);\n            cork_gc_release(gc, header);\n        } else {\n            cork_gc_possible_root(gc, header);\n        }\n    }\n}\n\n\nstatic void\ncork_gc_mark_gray_step(struct cork_gc *gc, void *obj, void *ud);\n\nstatic void\ncork_gc_mark_gray(struct cork_gc *gc, struct cork_gc_header *header)\n{\n    if (cork_gc_get_color(header) != GC_GRAY) {\n        SP_DEBUG(\"      Setting color to gray\\n\");\n        cork_gc_set_color(header, GC_GRAY);\n        cork_gc_recurse(gc, header, cork_gc_mark_gray_step);\n    }\n}\n\nstatic void\ncork_gc_mark_gray_step(struct cork_gc *gc, void *obj, void *ud)\n{\n    if (obj != NULL) {\n        SP_DEBUG(\"    cork_gc_mark_gray(%p)\\n\", obj);\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        cork_gc_dec_ref_count(header);\n        SP_DEBUG(\"      Reference count now %d\\n\", cork_gc_get_ref_count(header));\n        cork_gc_mark_gray(gc, header);\n    }\n}\n\nstatic void\ncork_gc_mark_roots(struct cork_gc *gc)\n{\n    size_t  i;\n    for (i = 0; i < gc->root_count; i++) {\n        struct cork_gc_header  *header = gc->roots[i];\n        if (cork_gc_get_color(header) == GC_PURPLE) {\n            SP_DEBUG(\"  Checking possible garbage cycle root %p\\n\",\n                  cork_gc_get_object(header));\n            SP_DEBUG(\"    cork_gc_mark_gray(%p)\\n\",\n                  cork_gc_get_object(header));\n            cork_gc_mark_gray(gc, header);\n        } else {\n            SP_DEBUG(\"  Possible garbage cycle root %p already checked\\n\",\n                  cork_gc_get_object(header));\n            cork_gc_set_buffered(header, false);\n            gc->roots[i] = NULL;\n            if (cork_gc_get_color(header) == GC_BLACK &&\n                cork_gc_get_ref_count(header) == 0) {\n                SP_DEBUG(\"  Freeing %p\\n\", header);\n                cork_gc_free(header);\n            }\n        }\n    }\n}\n\nstatic void\ncork_gc_scan_black_step(struct cork_gc *gc, void *obj, void *ud);\n\nstatic void\ncork_gc_scan_black(struct cork_gc *gc, struct cork_gc_header *header)\n{\n    SP_DEBUG(\"      Setting color of %p to BLACK\\n\",\n          cork_gc_get_object(header));\n    cork_gc_set_color(header, GC_BLACK);\n    cork_gc_recurse(gc, header, cork_gc_scan_black_step);\n}\n\nstatic void\ncork_gc_scan_black_step(struct cork_gc *gc, void *obj, void *ud)\n{\n    if (obj != NULL) {\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        cork_gc_inc_ref_count(header);\n        SP_DEBUG(\"      Increasing reference count %p -> %d\\n\",\n              obj, cork_gc_get_ref_count(header));\n        if (cork_gc_get_color(header) != GC_BLACK) {\n            cork_gc_scan_black(gc, header);\n        }\n    }\n}\n\nstatic void\ncork_gc_scan(struct cork_gc *gc, void *obj, void *ud)\n{\n    if (obj != NULL) {\n        SP_DEBUG(\"  Scanning possible garbage cycle entry %p\\n\", obj);\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        if (cork_gc_get_color(header) == GC_GRAY) {\n            if (cork_gc_get_ref_count(header) > 0) {\n                SP_DEBUG(\"    Remaining references; can't be a cycle\\n\");\n                cork_gc_scan_black(gc, header);\n            } else {\n                SP_DEBUG(\"    Definitely a garbage cycle\\n\");\n                cork_gc_set_color(header, GC_WHITE);\n                cork_gc_recurse(gc, header, cork_gc_scan);\n            }\n        } else {\n            SP_DEBUG(\"    Already checked\\n\");\n        }\n    }\n}\n\nstatic void\ncork_gc_scan_roots(struct cork_gc *gc)\n{\n    size_t  i;\n    for (i = 0; i < gc->root_count; i++) {\n        if (gc->roots[i] != NULL) {\n            void  *obj = cork_gc_get_object(gc->roots[i]);\n            cork_gc_scan(gc, obj, NULL);\n        }\n    }\n}\n\nstatic void\ncork_gc_collect_white(struct cork_gc *gc, void *obj, void *ud)\n{\n    if (obj != NULL) {\n        struct cork_gc_header  *header = cork_gc_get_header(obj);\n        if (cork_gc_get_color(header) == GC_WHITE &&\n            !cork_gc_get_buffered(header)) {\n            SP_DEBUG(\"  Releasing %p\\n\", obj);\n            cork_gc_set_color(header, GC_BLACK);\n            cork_gc_recurse(gc, header, cork_gc_collect_white);\n            SP_DEBUG(\"  Freeing %p\\n\", header);\n            cork_gc_free(header);\n        }\n    }\n}\n\nstatic void\ncork_gc_collect_roots(struct cork_gc *gc)\n{\n    size_t  i;\n    for (i = 0; i < gc->root_count; i++) {\n        if (gc->roots[i] != NULL) {\n            struct cork_gc_header  *header = gc->roots[i];\n            void  *obj = cork_gc_get_object(header);\n            cork_gc_set_buffered(header, false);\n            SP_DEBUG(\"Collecting cycles from garbage root %p\\n\", obj);\n            cork_gc_collect_white(gc, obj, NULL);\n            gc->roots[i] = NULL;\n        }\n    }\n    gc->root_count = 0;\n}\n\nstatic void\ncork_gc_collect_cycles(struct cork_gc *gc)\n{\n    SP_DEBUG(\"Collecting garbage cycles\\n\");\n    cork_gc_mark_roots(gc);\n    cork_gc_scan_roots(gc);\n    cork_gc_collect_roots(gc);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/hash.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#define CORK_HASH_ATTRIBUTES  CORK_API\n\n#include \"libcork/core/hash.h\"\n#include \"libcork/core/types.h\"\n\n/* All of the following functions will be defined for us by libcork/core/hash.h:\n *   cork_hash_buffer\n *   cork_big_hash_buffer\n *   cork_stable_hash_buffer\n */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/ip-address.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdio.h>\n#include <string.h>\n\n#include \"libcork/core/byte-order.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/core/net-addresses.h\"\n#include \"libcork/core/types.h\"\n\n#ifndef CORK_IP_ADDRESS_DEBUG\n#define CORK_IP_ADDRESS_DEBUG 1\n#endif\n\n#if CORK_IP_ADDRESS_DEBUG\n#include <stdio.h>\n#define SP_DEBUG(...) \\\n    do { \\\n        fprintf(stderr, __VA_ARGS__); \\\n    } while (0)\n#else\n#define SP_DEBUG(...) /* nothing */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * IP addresses\n */\n\n/*** IPv4 ***/\n\nstatic inline const char *\ncork_ipv4_parse(struct cork_ipv4 *addr, const char *str)\n{\n    const char  *ch;\n    bool  seen_digit_in_octet = false;\n    unsigned int  octets = 0;\n    unsigned int  digit = 0;\n    uint8_t  result[4];\n\n    for (ch = str; *ch != '\\0'; ch++) {\n        SP_DEBUG(\"%2u: %c\\t\", (unsigned int) (ch-str), *ch);\n        switch (*ch) {\n            case '0': case '1': case '2': case '3': case '4':\n            case '5': case '6': case '7': case '8': case '9':\n                seen_digit_in_octet = true;\n                digit *= 10;\n                digit += (*ch - '0');\n                SP_DEBUG(\"digit = %u\\n\", digit);\n                if (CORK_UNLIKELY(digit > 255)) {\n                    SP_DEBUG(\"\\t\");\n                    goto parse_error;\n                }\n                break;\n\n            case '.':\n                /* If this would be the fourth octet, it can't have a trailing\n                 * period. */\n                if (CORK_UNLIKELY(octets == 3)) {\n                    goto parse_error;\n                }\n                SP_DEBUG(\"octet %u = %u\\n\", octets, digit);\n                result[octets] = digit;\n                digit = 0;\n                octets++;\n                seen_digit_in_octet = false;\n                break;\n\n            default:\n                /* Any other character is a parse error. */\n                goto parse_error;\n        }\n    }\n\n    /* If we have a valid octet at the end, and that would be the fourth octet,\n     * then we've got a valid final parse. */\n    SP_DEBUG(\"%2u:\\t\", (unsigned int) (ch-str));\n    if (CORK_LIKELY(seen_digit_in_octet && octets == 3)) {\n#if CORK_IP_ADDRESS_DEBUG\n        char  parsed_ipv4[CORK_IPV4_STRING_LENGTH];\n#endif\n        SP_DEBUG(\"octet %u = %u\\n\", octets, digit);\n        result[octets] = digit;\n        cork_ipv4_copy(addr, result);\n#if CORK_IP_ADDRESS_DEBUG\n        cork_ipv4_to_raw_string(addr, parsed_ipv4);\n        SP_DEBUG(\"\\tParsed address: %s\\n\", parsed_ipv4);\n#endif\n        return ch;\n    }\n\nparse_error:\n    SP_DEBUG(\"parse error\\n\");\n    cork_parse_error(\"Invalid IPv4 address: \\\"%s\\\"\", str);\n    return NULL;\n}\n\nint\ncork_ipv4_init(struct cork_ipv4 *addr, const char *str)\n{\n    return cork_ipv4_parse(addr, str) == NULL? -1: 0;\n}\n\nbool\ncork_ipv4_equal_(const struct cork_ipv4 *addr1, const struct cork_ipv4 *addr2)\n{\n    return cork_ipv4_equal(addr1, addr2);\n}\n\nvoid\ncork_ipv4_to_raw_string(const struct cork_ipv4 *addr, char *dest)\n{\n    snprintf(dest, CORK_IPV4_STRING_LENGTH, \"%u.%u.%u.%u\",\n             addr->_.u8[0], addr->_.u8[1], addr->_.u8[2], addr->_.u8[3]);\n}\n\nbool\ncork_ipv4_is_valid_network(const struct cork_ipv4 *addr,\n                           unsigned int cidr_prefix)\n{\n    uint32_t  cidr_mask;\n\n    if (cidr_prefix > 32) {\n        return false;\n    } else if (cidr_prefix == 32) {\n        /* This handles undefined behavior for overflow bit shifts. */\n        cidr_mask = 0;\n    } else {\n        cidr_mask = 0xffffffff >> cidr_prefix;\n    }\n\n    return (CORK_UINT32_BIG_TO_HOST(addr->_.u32) & cidr_mask) == 0;\n}\n\n/*** IPv6 ***/\n\nint\ncork_ipv6_init(struct cork_ipv6 *addr, const char *str)\n{\n    const char  *ch;\n\n    uint16_t  digit = 0;\n    unsigned int  before_count = 0;\n    uint16_t  before_double_colon[8];\n    uint16_t  after_double_colon[8];\n    uint16_t  *dest = before_double_colon;\n\n    unsigned int  digits_seen = 0;\n    unsigned int  hextets_seen = 0;\n    bool  another_required = true;\n    bool  digit_allowed = true;\n    bool  colon_allowed = true;\n    bool  double_colon_allowed = true;\n    bool  just_saw_colon = false;\n\n    for (ch = str; *ch != '\\0'; ch++) {\n        SP_DEBUG(\"%2u: %c\\t\", (unsigned int) (ch-str), *ch);\n        switch (*ch) {\n#define process_digit(base) \\\n                /* Make sure a digit is allowed here. */ \\\n                if (CORK_UNLIKELY(!digit_allowed)) { \\\n                    goto parse_error; \\\n                } \\\n                /* If we've already seen 4 digits, it's a parse error. */ \\\n                if (CORK_UNLIKELY(digits_seen == 4)) { \\\n                    goto parse_error; \\\n                } \\\n                \\\n                digits_seen++; \\\n                colon_allowed = true; \\\n                just_saw_colon = false; \\\n                digit <<= 4; \\\n                digit |= (*ch - (base)); \\\n                SP_DEBUG(\"digit = %04x\\n\", digit);\n\n            case '0': case '1': case '2': case '3': case '4':\n            case '5': case '6': case '7': case '8': case '9':\n                process_digit('0');\n                break;\n\n            case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':\n                process_digit('a'-10);\n                break;\n\n            case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':\n                process_digit('A'-10);\n                break;\n\n#undef process_digit\n\n            case ':':\n                /* We can only see a colon immediately after a hextet or as part\n                 * of a double-colon. */\n                if (CORK_UNLIKELY(!colon_allowed)) {\n                    goto parse_error;\n                }\n\n                /* If this is a double-colon, start parsing hextets into our\n                 * second array. */\n                if (just_saw_colon) {\n                    SP_DEBUG(\"double-colon\\n\");\n                    colon_allowed = false;\n                    digit_allowed = true;\n                    another_required = false;\n                    double_colon_allowed = false;\n                    before_count = hextets_seen;\n                    dest = after_double_colon;\n                    continue;\n                }\n\n                /* If this would end the eighth hextet (regardless of the\n                 * placement of a double-colon), then there can't be a trailing\n                 * colon. */\n                if (CORK_UNLIKELY(hextets_seen == 8)) {\n                    goto parse_error;\n                }\n\n                /* If this is the very beginning of the string, then we can only\n                 * have a double-colon, not a single colon. */\n                if (digits_seen == 0 && hextets_seen == 0) {\n                    SP_DEBUG(\"initial colon\\n\");\n                    colon_allowed = true;\n                    digit_allowed = false;\n                    just_saw_colon = true;\n                    another_required = true;\n                    continue;\n                }\n\n                /* Otherwise this ends the current hextet. */\n                SP_DEBUG(\"hextet %u = %04x\\n\", hextets_seen, digit);\n                *(dest++) = CORK_UINT16_HOST_TO_BIG(digit);\n                digit = 0;\n                hextets_seen++;\n                digits_seen = 0;\n                colon_allowed = double_colon_allowed;\n                just_saw_colon = true;\n                another_required = true;\n                break;\n\n            case '.':\n            {\n                /* If we see a period, then we must be in the middle of an IPv4\n                 * address at the end of the IPv6 address. */\n                struct cork_ipv4  *ipv4 = (struct cork_ipv4 *) dest;\n                SP_DEBUG(\"Detected IPv4 address %s\\n\", ch-digits_seen);\n\n                /* Ensure that we have space for the two hextets that the IPv4\n                 * address will take up. */\n                if (CORK_UNLIKELY(hextets_seen >= 7)) {\n                    goto parse_error;\n                }\n\n                /* Parse the IPv4 address directly into our current hextet\n                 * buffer. */\n                ch = cork_ipv4_parse(ipv4, ch - digits_seen);\n                if (CORK_LIKELY(ch != NULL)) {\n                    hextets_seen += 2;\n                    digits_seen = 0;\n                    another_required = false;\n\n                    /* ch now points at the NUL terminator, but we're about to\n                     * increment ch. */\n                    ch--;\n                    break;\n                }\n\n                /* The IPv4 parse failed, so we have an IPv6 parse error. */\n                goto parse_error;\n            }\n\n            default:\n                /* Any other character is a parse error. */\n                goto parse_error;\n        }\n    }\n\n    /* If we have a valid hextet at the end, and we've either seen a\n     * double-colon, or we have eight hextets in total, then we've got a valid\n     * final parse. */\n    SP_DEBUG(\"%2u:\\t\", (unsigned int) (ch-str));\n    if (CORK_LIKELY(digits_seen > 0)) {\n        SP_DEBUG(\"hextet %u = %04x\\n\\t\", hextets_seen, digit);\n        *(dest++) = CORK_UINT16_HOST_TO_BIG(digit);\n        hextets_seen++;\n    } else if (CORK_UNLIKELY(another_required)) {\n        goto parse_error;\n    }\n\n    if (!double_colon_allowed) {\n        /* We've seen a double-colon, so use 0000 for any hextets that weren't\n         * present. */\n#if CORK_IP_ADDRESS_DEBUG\n        char  parsed_result[CORK_IPV6_STRING_LENGTH];\n#endif\n        unsigned int  after_count = hextets_seen - before_count;\n        SP_DEBUG(\"Saw double-colon; %u hextets before, %u after\\n\",\n              before_count, after_count);\n        memset(addr, 0, sizeof(struct cork_ipv6));\n        memcpy(addr, before_double_colon,\n               sizeof(uint16_t) * before_count);\n        memcpy(&addr->_.u16[8-after_count], after_double_colon,\n               sizeof(uint16_t) * after_count);\n#if CORK_IP_ADDRESS_DEBUG\n        cork_ipv6_to_raw_string(addr, parsed_result);\n        SP_DEBUG(\"\\tParsed address: %s\\n\", parsed_result);\n#endif\n        return 0;\n    } else if (hextets_seen == 8) {\n        /* No double-colon, so we must have exactly eight hextets. */\n#if CORK_IP_ADDRESS_DEBUG\n        char  parsed_result[CORK_IPV6_STRING_LENGTH];\n#endif\n        SP_DEBUG(\"No double-colon\\n\");\n        cork_ipv6_copy(addr, before_double_colon);\n#if CORK_IP_ADDRESS_DEBUG\n        cork_ipv6_to_raw_string(addr, parsed_result);\n        SP_DEBUG(\"\\tParsed address: %s\\n\", parsed_result);\n#endif\n        return 0;\n    }\n\nparse_error:\n    SP_DEBUG(\"parse error\\n\");\n    cork_parse_error(\"Invalid IPv6 address: \\\"%s\\\"\", str);\n    return -1;\n}\n\nbool\ncork_ipv6_equal_(const struct cork_ipv6 *addr1, const struct cork_ipv6 *addr2)\n{\n    return cork_ipv6_equal(addr1, addr2);\n}\n\n#define NS_IN6ADDRSZ 16\n#define NS_INT16SZ 2\n\nvoid\ncork_ipv6_to_raw_string(const struct cork_ipv6 *addr, char *dest)\n{\n    const uint8_t  *src = addr->_.u8;\n\n    /*\n     * Note that int32_t and int16_t need only be \"at least\" large enough\n     * to contain a value of the specified size.  On some systems, like\n     * Crays, there is no such thing as an integer variable with 16 bits.\n     * Keep this in mind if you think this function should have been coded\n     * to use pointer overlays.  All the world's not a VAX.\n     */\n    char *tp;\n    struct { int base, len; } best, cur;\n    unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];\n    int i;\n\n    /*\n     * Preprocess:\n     *      Copy the input (bytewise) array into a wordwise array.\n     *      Find the longest run of 0x00's in src[] for :: shorthanding.\n     */\n    memset(words, '\\0', sizeof words);\n    for (i = 0; i < NS_IN6ADDRSZ; i++)\n        words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));\n    best.base = -1;\n    best.len = 0;\n    cur.base = -1;\n    cur.len = 0;\n    for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {\n        if (words[i] == 0) {\n            if (cur.base == -1)\n                cur.base = i, cur.len = 1;\n            else\n                cur.len++;\n        } else {\n            if (cur.base != -1) {\n                if (best.base == -1 || cur.len > best.len)\n                    best = cur;\n                cur.base = -1;\n            }\n        }\n    }\n    if (cur.base != -1) {\n        if (best.base == -1 || cur.len > best.len)\n            best = cur;\n    }\n    if (best.base != -1 && best.len < 2)\n        best.base = -1;\n\n    /*\n     * Format the result.\n     */\n    tp = dest;\n    for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {\n        /* Are we inside the best run of 0x00's? */\n        if (best.base != -1 && i >= best.base &&\n            i < (best.base + best.len)) {\n            if (i == best.base)\n                *tp++ = ':';\n            continue;\n        }\n        /* Are we following an initial run of 0x00s or any real hex? */\n        if (i != 0)\n            *tp++ = ':';\n        /* Is this address an encapsulated IPv4? */\n        if (i == 6 && best.base == 0 &&\n            (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {\n            tp += sprintf(tp, \"%u.%u.%u.%u\",\n                          src[12], src[13], src[14], src[15]);\n            break;\n        }\n        tp += sprintf(tp, \"%x\", words[i]);\n    }\n    /* Was it a trailing run of 0x00's? */\n    if (best.base != -1 && (best.base + best.len) ==\n        (NS_IN6ADDRSZ / NS_INT16SZ))\n        *tp++ = ':';\n    *tp++ = '\\0';\n}\n\nbool\ncork_ipv6_is_valid_network(const struct cork_ipv6 *addr,\n                           unsigned int cidr_prefix)\n{\n    uint64_t  cidr_mask[2];\n\n    if (cidr_prefix > 128) {\n        return false;\n    } else if (cidr_prefix == 128) {\n        /* This handles undefined behavior for overflow bit shifts. */\n        cidr_mask[0] = cidr_mask[1] = 0;\n    } else if (cidr_prefix == 64) {\n        /* This handles undefined behavior for overflow bit shifts. */\n        cidr_mask[0] = 0;\n        cidr_mask[1] = UINT64_C(0xffffffffffffffff);\n    } else if (cidr_prefix > 64) {\n        cidr_mask[0] = 0;\n        cidr_mask[1] = UINT64_C(0xffffffffffffffff) >> (cidr_prefix-64);\n    } else {\n        cidr_mask[0] = UINT64_C(0xffffffffffffffff) >> cidr_prefix;\n        cidr_mask[1] = UINT64_C(0xffffffffffffffff);\n    }\n\n    return (CORK_UINT64_BIG_TO_HOST(addr->_.u64[0] & cidr_mask[0]) == 0) &&\n           (CORK_UINT64_BIG_TO_HOST(addr->_.u64[1] & cidr_mask[1]) == 0);\n}\n\n\n/*** IP ***/\n\nvoid\ncork_ip_from_ipv4_(struct cork_ip *addr, const void *src)\n{\n    cork_ip_from_ipv4(addr, src);\n}\n\nvoid\ncork_ip_from_ipv6_(struct cork_ip *addr, const void *src)\n{\n    cork_ip_from_ipv6(addr, src);\n}\n\nint\ncork_ip_init(struct cork_ip *addr, const char *str)\n{\n    int  rc;\n\n    /* Try IPv4 first */\n    rc = cork_ipv4_init(&addr->ip.v4, str);\n    if (rc == 0) {\n        /* successful parse */\n        addr->version = 4;\n        return 0;\n    }\n\n    /* Then try IPv6 */\n    cork_error_clear();\n    rc = cork_ipv6_init(&addr->ip.v6, str);\n    if (rc == 0) {\n        /* successful parse */\n        addr->version = 6;\n        return 0;\n    }\n\n    /* Parse error for both address types */\n    cork_parse_error(\"Invalid IP address: \\\"%s\\\"\", str);\n    return -1;\n}\n\nbool\ncork_ip_equal_(const struct cork_ip *addr1, const struct cork_ip *addr2)\n{\n    return cork_ip_equal(addr1, addr2);\n}\n\nvoid\ncork_ip_to_raw_string(const struct cork_ip *addr, char *dest)\n{\n    switch (addr->version) {\n        case 4:\n            cork_ipv4_to_raw_string(&addr->ip.v4, dest);\n            return;\n\n        case 6:\n            cork_ipv6_to_raw_string(&addr->ip.v6, dest);\n            return;\n\n        default:\n            strncpy(dest, \"<INVALID>\", CORK_IP_STRING_LENGTH);\n            return;\n    }\n}\n\nbool\ncork_ip_is_valid_network(const struct cork_ip *addr, unsigned int cidr_prefix)\n{\n    switch (addr->version) {\n        case 4:\n            return cork_ipv4_is_valid_network(&addr->ip.v4, cidr_prefix);\n        case 6:\n            return cork_ipv6_is_valid_network(&addr->ip.v6, cidr_prefix);\n        default:\n            return false;\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/mempool.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <stdlib.h>\n\n#include \"libcork/core/callbacks.h\"\n#include \"libcork/core/mempool.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/helpers/errors.h\"\n\n\n#if !defined(CORK_DEBUG_MEMPOOL)\n#define CORK_DEBUG_MEMPOOL  1\n#endif\n\n#if CORK_DEBUG_MEMPOOL\n#include <stdio.h>\n#define SP_DEBUG(...) fprintf(stderr, __VA_ARGS__)\n#else\n#define SP_DEBUG(...) /* no debug messages */\n#endif\n\n\n\nstruct cork_mempool {\n    size_t  element_size;\n    size_t  block_size;\n    struct cork_mempool_object  *free_list;\n    /* The number of objects that have been given out by\n     * cork_mempool_new but not returned via cork_mempool_free. */\n    size_t  allocated_count;\n    struct cork_mempool_block  *blocks;\n\n    void  *user_data;\n    cork_free_f  free_user_data;\n    cork_init_f  init_object;\n    cork_done_f  done_object;\n};\n\nstruct cork_mempool_object {\n    /* When this object is unclaimed, it will be in the cork_mempool\n     * object's free_list using this pointer. */\n    struct cork_mempool_object  *next_free;\n};\n\nstruct cork_mempool_block {\n    struct cork_mempool_block  *next_block;\n};\n\n#define cork_mempool_object_size(mp) \\\n    (sizeof(struct cork_mempool_object) + (mp)->element_size)\n\n#define cork_mempool_get_header(obj) \\\n    (((struct cork_mempool_object *) (obj)) - 1)\n\n#define cork_mempool_get_object(hdr) \\\n    ((void *) (((struct cork_mempool_object *) (hdr)) + 1))\n\n\nstruct cork_mempool *\ncork_mempool_new_size_ex(size_t element_size, size_t block_size)\n{\n    struct cork_mempool  *mp = cork_new(struct cork_mempool);\n    mp->element_size = element_size;\n    mp->block_size = block_size;\n    mp->free_list = NULL;\n    mp->allocated_count = 0;\n    mp->blocks = NULL;\n    mp->user_data = NULL;\n    mp->free_user_data = NULL;\n    mp->init_object = NULL;\n    mp->done_object = NULL;\n    return mp;\n}\n\nvoid\ncork_mempool_free(struct cork_mempool *mp)\n{\n    struct cork_mempool_block  *curr;\n    assert(mp->allocated_count == 0);\n\n    if (mp->done_object != NULL) {\n        struct cork_mempool_object  *obj;\n        for (obj = mp->free_list; obj != NULL; obj = obj->next_free) {\n            mp->done_object\n                (mp->user_data, cork_mempool_get_object(obj));\n        }\n    }\n\n    for (curr = mp->blocks; curr != NULL; ) {\n        struct cork_mempool_block  *next = curr->next_block;\n        free(curr);\n        /* Do this here instead of in the for statement to avoid\n         * accessing the just-freed block. */\n        curr = next;\n    }\n\n    cork_free_user_data(mp);\n    free(mp);\n}\n\n\nvoid\ncork_mempool_set_callbacks(struct cork_mempool *mp,\n                           void *user_data, cork_free_f free_user_data,\n                           cork_init_f init_object,\n                           cork_done_f done_object)\n{\n    cork_free_user_data(mp);\n    mp->user_data = user_data;\n    mp->free_user_data = free_user_data;\n    mp->init_object = init_object;\n    mp->done_object = done_object;\n}\n\n\n/* If this function succeeds, then we guarantee that there will be at\n * least one object in mp->free_list. */\nstatic void\ncork_mempool_new_block(struct cork_mempool *mp)\n{\n    /* Allocate the new block and add it to mp's block list. */\n    struct cork_mempool_block  *block;\n    void  *vblock;\n    SP_DEBUG(\"Allocating new %zu-byte block\\n\", mp->block_size);\n    block = cork_malloc(mp->block_size);\n    block->next_block = mp->blocks;\n    mp->blocks = block;\n    vblock = block;\n\n    /* Divide the block's memory region into a bunch of objects. */\n    size_t  index = sizeof(struct cork_mempool_block);\n    for (index = sizeof(struct cork_mempool_block);\n         (index + cork_mempool_object_size(mp)) <= mp->block_size;\n         index += cork_mempool_object_size(mp)) {\n        struct cork_mempool_object  *obj = vblock + index;\n        SP_DEBUG(\"  New object at %p[%p]\\n\", cork_mempool_get_object(obj), obj);\n        if (mp->init_object != NULL) {\n            mp->init_object\n                (mp->user_data, cork_mempool_get_object(obj));\n        }\n        obj->next_free = mp->free_list;\n        mp->free_list = obj;\n    }\n}\n\nvoid *\ncork_mempool_new_object(struct cork_mempool *mp)\n{\n    struct cork_mempool_object  *obj;\n    void  *ptr;\n\n    if (CORK_UNLIKELY(mp->free_list == NULL)) {\n        cork_mempool_new_block(mp);\n    }\n\n    obj = mp->free_list;\n    mp->free_list = obj->next_free;\n    mp->allocated_count++;\n    ptr = cork_mempool_get_object(obj);\n    return ptr;\n}\n\nvoid\ncork_mempool_free_object(struct cork_mempool *mp, void *ptr)\n{\n    struct cork_mempool_object  *obj = cork_mempool_get_header(ptr);\n    SP_DEBUG(\"Returning %p[%p] to memory pool\\n\", ptr, obj);\n    obj->next_free = mp->free_list;\n    mp->free_list = obj;\n    mp->allocated_count--;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/timestamp.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n#include <time.h>\n#include <sys/time.h>\n\n#include \"libcork/core/timestamp.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/helpers/errors.h\"\n\nvoid\ncork_timestamp_init_now(cork_timestamp *ts)\n{\n    struct timeval  tp;\n    gettimeofday(&tp, NULL);\n    cork_timestamp_init_usec(ts, tp.tv_sec, tp.tv_usec);\n}\n\n\n#define is_digit(ch)  ((ch) >= '0' && (ch) <= '9')\n\nstatic uint64_t\npower_of_10(unsigned int width)\n{\n    uint64_t  accumulator = 10;\n    uint64_t  result = 1;\n    while (width != 0) {\n        if ((width % 2) == 1) {\n            result *= accumulator;\n            width--;\n        }\n        accumulator *= accumulator;\n        width /= 2;\n    }\n    return result;\n}\n\nstatic int\nappend_fractional(const cork_timestamp ts, unsigned int width,\n                  struct cork_buffer *dest)\n{\n    if (CORK_UNLIKELY(width == 0 || width > 9)) {\n        cork_error_set_printf\n            (EINVAL,\n             \"Invalid width %u for fractional cork_timestamp\", width);\n        return -1;\n    } else {\n        uint64_t  denom = power_of_10(width);\n        uint64_t  frac = cork_timestamp_gsec_to_units(ts, denom);\n        cork_buffer_append_printf(dest, \"%0*\" PRIu64, width, frac);\n        return 0;\n    }\n}\n\nstatic int\ncork_timestamp_format_parts(const cork_timestamp ts, struct tm *tm,\n                            const char *format, struct cork_buffer *dest)\n{\n    const char  *next_percent;\n\n    while ((next_percent = strchr(format, '%')) != NULL) {\n        const char  *spec = next_percent + 1;\n        unsigned int  width = 0;\n\n        /* First append any text in between the previous format specifier and\n         * this one. */\n        cork_buffer_append(dest, format, next_percent - format);\n\n        /* Then parse the format specifier */\n        while (is_digit(*spec)) {\n            width *= 10;\n            width += (*spec++ - '0');\n        }\n\n        switch (*spec) {\n            case '\\0':\n                cork_error_set_string\n                    (EINVAL,\n                     \"Trailing %% at end of cork_timestamp format string\");\n                return -1;\n\n            case '%':\n                cork_buffer_append(dest, \"%\", 1);\n                break;\n\n            case 'Y':\n                cork_buffer_append_printf(dest, \"%04d\", tm->tm_year + 1900);\n                break;\n\n            case 'm':\n                cork_buffer_append_printf(dest, \"%02d\", tm->tm_mon + 1);\n                break;\n\n            case 'd':\n                cork_buffer_append_printf(dest, \"%02d\", tm->tm_mday);\n                break;\n\n            case 'H':\n                cork_buffer_append_printf(dest, \"%02d\", tm->tm_hour);\n                break;\n\n            case 'M':\n                cork_buffer_append_printf(dest, \"%02d\", tm->tm_min);\n                break;\n\n            case 'S':\n                cork_buffer_append_printf(dest, \"%02d\", tm->tm_sec);\n                break;\n\n            case 's':\n                cork_buffer_append_printf\n                    (dest, \"%\" PRIu32, cork_timestamp_sec(ts));\n                break;\n\n            case 'f':\n                rii_check(append_fractional(ts, width, dest));\n                break;\n\n            default:\n                cork_error_set_printf\n                    (EINVAL,\n                     \"Unknown cork_timestamp format specifier %%%c\", *spec);\n                return -1;\n        }\n\n        format = spec + 1;\n    }\n\n    /* When we fall through, there is some additional content after the final\n     * format specifier. */\n    cork_buffer_append_string(dest, format);\n    return 0;\n}\n\nint\ncork_timestamp_format_utc(const cork_timestamp ts, const char *format,\n                          struct cork_buffer *dest)\n{\n    time_t  clock;\n    struct tm  tm;\n    clock = cork_timestamp_sec(ts);\n    gmtime_r(&clock, &tm);\n    return cork_timestamp_format_parts(ts, &tm, format, dest);\n}\n\nint\ncork_timestamp_format_local(const cork_timestamp ts, const char *format,\n                            struct cork_buffer *dest)\n{\n    time_t  clock;\n    struct tm  tm;\n    clock = cork_timestamp_sec(ts);\n    localtime_r(&clock, &tm);\n    return cork_timestamp_format_parts(ts, &tm, format, dest);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/core/u128.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n#include <stdio.h>\n\n#include \"libcork/core/types.h\"\n#include \"libcork/core/u128.h\"\n\n\n/* From http://stackoverflow.com/questions/8023414/how-to-convert-a-128-bit-integer-to-a-decimal-ascii-string-in-c */\n\nconst char *\ncork_u128_to_decimal(char *dest, cork_u128 val)\n{\n    uint32_t  n[4];\n    char  *s = dest;\n    char  *p = dest;\n    unsigned int  i;\n\n    /* This algorithm assumes that n[3] is the MSW. */\n    n[3] = cork_u128_be32(val, 0);\n    n[2] = cork_u128_be32(val, 1);\n    n[1] = cork_u128_be32(val, 2);\n    n[0] = cork_u128_be32(val, 3);\n\n    memset(s, '0', CORK_U128_DECIMAL_LENGTH - 1);\n    s[CORK_U128_DECIMAL_LENGTH - 1] = '\\0';\n\n    for (i = 0; i < 128; i++) {\n        unsigned int  j;\n        unsigned int carry;\n\n        carry = (n[3] >= 0x80000000);\n        /* Shift n[] left, doubling it */\n        n[3] = ((n[3] << 1) & 0xFFFFFFFF) + (n[2] >= 0x80000000);\n        n[2] = ((n[2] << 1) & 0xFFFFFFFF) + (n[1] >= 0x80000000);\n        n[1] = ((n[1] << 1) & 0xFFFFFFFF) + (n[0] >= 0x80000000);\n        n[0] = ((n[0] << 1) & 0xFFFFFFFF);\n\n        /* Add s[] to itself in decimal, doubling it */\n        for (j = CORK_U128_DECIMAL_LENGTH - 1; j-- > 0; ) {\n            s[j] += s[j] - '0' + carry;\n            carry = (s[j] > '9');\n            if (carry) {\n                s[j] -= 10;\n            }\n        }\n    }\n\n    while ((p[0] == '0') && (p < &s[CORK_U128_DECIMAL_LENGTH - 2])) {\n        p++;\n    }\n\n    return p;\n}\n\n\nconst char *\ncork_u128_to_hex(char *buf, cork_u128 val)\n{\n    uint64_t  hi = val._.be64.hi;\n    uint64_t  lo = val._.be64.lo;\n    if (hi == 0) {\n        snprintf(buf, CORK_U128_HEX_LENGTH, \"%\" PRIx64, lo);\n    } else {\n        snprintf(buf, CORK_U128_HEX_LENGTH, \"%\" PRIx64 \"%016\" PRIx64, hi, lo);\n    }\n    return buf;\n}\n\nconst char *\ncork_u128_to_padded_hex(char *buf, cork_u128 val)\n{\n    uint64_t  hi = val._.be64.hi;\n    uint64_t  lo = val._.be64.lo;\n    snprintf(buf, CORK_U128_HEX_LENGTH, \"%016\" PRIx64 \"%016\" PRIx64, hi, lo);\n    return buf;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/array.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/array.h\"\n#include \"libcork/helpers/errors.h\"\n\n#ifndef CORK_ARRAY_DEBUG\n#define CORK_ARRAY_DEBUG 1\n#endif\n\n#if CORK_ARRAY_DEBUG\n#include <stdio.h>\n#define SP_DEBUG(...) \\\n    do { \\\n        fprintf(stderr, __VA_ARGS__); \\\n        fprintf(stderr, \"\\n\"); \\\n    } while (0)\n#else\n#define SP_DEBUG(...) /* nothing */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Resizable arrays\n */\n\nstruct cork_array_priv {\n    size_t  allocated_count;\n    size_t  allocated_size;\n    size_t  element_size;\n    size_t  initialized_count;\n    void  *user_data;\n    cork_free_f  free_user_data;\n    cork_init_f  init;\n    cork_done_f  done;\n    cork_init_f  reuse;\n    cork_done_f  remove;\n};\n\nvoid\ncork_raw_array_init(struct cork_raw_array *array, size_t element_size)\n{\n    array->items = NULL;\n    array->size = 0;\n    array->priv = cork_new(struct cork_array_priv);\n    array->priv->allocated_count = 0;\n    array->priv->allocated_size = 0;\n    array->priv->element_size = element_size;\n    array->priv->initialized_count = 0;\n    array->priv->user_data = NULL;\n    array->priv->free_user_data = NULL;\n    array->priv->init = NULL;\n    array->priv->done = NULL;\n    array->priv->reuse = NULL;\n    array->priv->remove = NULL;\n}\n\nvoid\ncork_raw_array_done(struct cork_raw_array *array)\n{\n    if (array->priv->done != NULL) {\n        size_t  i;\n        char  *element = array->items;\n        for (i = 0; i < array->priv->initialized_count; i++) {\n            array->priv->done(array->priv->user_data, element);\n            element += array->priv->element_size;\n        }\n    }\n    if (array->items != NULL) {\n        free(array->items);\n    }\n    cork_free_user_data(array->priv);\n    free(array->priv);\n}\n\nvoid\ncork_raw_array_set_callback_data(struct cork_raw_array *array,\n                                 void *user_data, cork_free_f free_user_data)\n{\n    array->priv->user_data = user_data;\n    array->priv->free_user_data = free_user_data;\n}\n\nvoid\ncork_raw_array_set_init(struct cork_raw_array *array, cork_init_f init)\n{\n    array->priv->init = init;\n}\n\nvoid\ncork_raw_array_set_done(struct cork_raw_array *array, cork_done_f done)\n{\n    array->priv->done = done;\n}\n\nvoid\ncork_raw_array_set_reuse(struct cork_raw_array *array, cork_init_f reuse)\n{\n    array->priv->reuse = reuse;\n}\n\nvoid\ncork_raw_array_set_remove(struct cork_raw_array *array, cork_done_f remove)\n{\n    array->priv->remove = remove;\n}\n\nsize_t\ncork_raw_array_element_size(const struct cork_raw_array *array)\n{\n    return array->priv->element_size;\n}\n\nvoid\ncork_raw_array_clear(struct cork_raw_array *array)\n{\n    if (array->priv->remove != NULL) {\n        size_t  i;\n        char  *element = array->items;\n        for (i = 0; i < array->priv->initialized_count; i++) {\n            array->priv->remove(array->priv->user_data, element);\n            element += array->priv->element_size;\n        }\n    }\n    array->size = 0;\n}\n\nvoid *\ncork_raw_array_elements(const struct cork_raw_array *array)\n{\n    return array->items;\n}\n\nvoid *\ncork_raw_array_at(const struct cork_raw_array *array, size_t index)\n{\n    return ((char *) array->items) + (array->priv->element_size * index);\n}\n\nsize_t\ncork_raw_array_size(const struct cork_raw_array *array)\n{\n    return array->size;\n}\n\nbool\ncork_raw_array_is_empty(const struct cork_raw_array *array)\n{\n    return (array->size == 0);\n}\n\nvoid\ncork_raw_array_ensure_size(struct cork_raw_array *array, size_t desired_count)\n{\n    size_t  desired_size;\n\n    SP_DEBUG(\"--- Array %p: Ensure %zu %zu-byte elements\",\n          array, desired_count, array->priv->element_size);\n    desired_size = desired_count * array->priv->element_size;\n\n    if (desired_size > array->priv->allocated_size) {\n        size_t  new_count = array->priv->allocated_count * 2;\n        size_t  new_size = array->priv->allocated_size * 2;\n        if (desired_size > new_size) {\n            new_count = desired_count;\n            new_size = desired_size;\n        }\n\n        SP_DEBUG(\"--- Array %p: Reallocating %zu->%zu bytes\",\n              array, array->priv->allocated_size, new_size);\n        array->items = cork_realloc(array->items, new_size);\n\n        array->priv->allocated_count = new_count;\n        array->priv->allocated_size = new_size;\n    }\n}\n\nvoid *\ncork_raw_array_append(struct cork_raw_array *array)\n{\n    size_t  index;\n    void  *element;\n    index = array->size++;\n    cork_raw_array_ensure_size(array, array->size);\n    element = cork_raw_array_at(array, index);\n\n    /* Call the init or reset callback, depending on whether this entry has been\n     * initialized before. */\n\n    /* Since we can currently only add elements by appending them one at a time,\n     * then this entry is either already initialized, or is the first\n     * uninitialized entry. */\n    assert(index <= array->priv->initialized_count);\n\n    if (index == array->priv->initialized_count) {\n        /* This element has not been initialized yet. */\n        array->priv->initialized_count++;\n        if (array->priv->init != NULL) {\n            array->priv->init(array->priv->user_data, element);\n        }\n    } else {\n        /* This element has already been initialized. */\n        if (array->priv->reuse != NULL) {\n            array->priv->reuse(array->priv->user_data, element);\n        }\n    }\n\n    return element;\n}\n\nint\ncork_raw_array_copy(struct cork_raw_array *dest,\n                    const struct cork_raw_array *src,\n                    cork_copy_f copy, void *user_data)\n{\n    size_t  i;\n    size_t  reuse_count;\n    char  *dest_element;\n\n    SP_DEBUG(\"--- Copying %zu elements (%zu bytes) from %p to %p\",\n          src->size, src->size * dest->priv->element_size, src, dest);\n    assert(dest->priv->element_size == src->priv->element_size);\n    cork_array_clear(dest);\n    cork_array_ensure_size(dest, src->size);\n\n    /* Initialize enough elements to hold the contents of src */\n    reuse_count = dest->priv->initialized_count;\n    if (src->size < reuse_count) {\n        reuse_count = src->size;\n    }\n\n    dest_element = dest->items;\n    if (dest->priv->reuse != NULL) {\n        SP_DEBUG(\"    Calling reuse on elements 0-%zu\", reuse_count);\n        for (i = 0; i < reuse_count; i++) {\n            dest->priv->reuse(dest->priv->user_data, dest_element);\n            dest_element += dest->priv->element_size;\n        }\n    } else {\n        dest_element += reuse_count * dest->priv->element_size;\n    }\n\n    if (dest->priv->init != NULL) {\n        SP_DEBUG(\"    Calling init on elements %zu-%zu\", reuse_count, src->size);\n        for (i = reuse_count; i < src->size; i++) {\n            dest->priv->init(dest->priv->user_data, dest_element);\n            dest_element += dest->priv->element_size;\n        }\n    }\n\n    if (src->size > dest->priv->initialized_count) {\n        dest->priv->initialized_count = src->size;\n    }\n\n    /* If the caller provided a copy function, let it copy each element in turn.\n     * Otherwise, bulk copy everything using memcpy. */\n    if (copy == NULL) {\n        memcpy(dest->items, src->items, src->size * dest->priv->element_size);\n    } else {\n        const char  *src_element = src->items;\n        dest_element = dest->items;\n        for (i = 0; i < src->size; i++) {\n            rii_check(copy(user_data, dest_element, src_element));\n            dest_element += dest->priv->element_size;\n            src_element += dest->priv->element_size;\n        }\n    }\n\n    dest->size = src->size;\n    return 0;\n}\n\n\n/*-----------------------------------------------------------------------\n * Pointer arrays\n */\n\nstruct cork_pointer_array {\n    cork_free_f  free;\n};\n\nstatic void\npointer__init(void *user_data, void *vvalue)\n{\n    void **value = vvalue;\n    *value = NULL;\n}\n\nstatic void\npointer__done(void *user_data, void *vvalue)\n{\n    struct cork_pointer_array  *ptr_array = user_data;\n    void **value = vvalue;\n    if (*value != NULL) {\n        ptr_array->free(*value);\n    }\n}\n\nstatic void\npointer__remove(void *user_data, void *vvalue)\n{\n    struct cork_pointer_array  *ptr_array = user_data;\n    void **value = vvalue;\n    if (*value != NULL) {\n        ptr_array->free(*value);\n    }\n    *value = NULL;\n}\n\nvoid\ncork_raw_pointer_array_init(struct cork_raw_array *array, cork_free_f free_ptr)\n{\n    struct cork_pointer_array  *ptr_array = cork_new(struct cork_pointer_array);\n    ptr_array->free = free_ptr;\n    cork_raw_array_init(array, sizeof(void *));\n    cork_array_set_callback_data(array, ptr_array, free);\n    cork_array_set_init(array, pointer__init);\n    cork_array_set_done(array, pointer__done);\n    cork_array_set_remove(array, pointer__remove);\n}\n\n\n/*-----------------------------------------------------------------------\n * String arrays\n */\n\nvoid\ncork_string_array_init(struct cork_string_array *array)\n{\n    cork_raw_pointer_array_init\n        ((struct cork_raw_array *) array, (cork_free_f) cork_strfree);\n}\n\nvoid\ncork_string_array_append(struct cork_string_array *array, const char *str)\n{\n    const char  *copy = cork_strdup(str);\n    cork_array_append(array, copy);\n}\n\nstatic int\nstring__copy(void *user_data, void *vdest, const void *vsrc)\n{\n    const char  **dest = vdest;\n    const char  **src = (const char **) vsrc;\n    *dest = cork_strdup(*src);\n    return 0;\n}\n\nvoid\ncork_string_array_copy(struct cork_string_array *dest,\n                       const struct cork_string_array *src)\n{\n    CORK_ATTR_UNUSED int  rc;\n    rc = cork_array_copy(dest, src, string__copy, NULL);\n    /* cork_array_copy can only fail if the copy callback fails, and ours\n     * doesn't! */\n    assert(rc == 0);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/bitset.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/api.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/bitset.h\"\n\n\nstatic size_t\nbytes_needed(size_t bit_count)\n{\n    /* We need one byte for every bit... */\n    size_t  bytes_needed = bit_count / 8;\n    /* Plus one extra for the leftovers that don't fit into a whole byte. */\n    bytes_needed += ((bit_count % 8) > 0);\n    return bytes_needed;\n}\n\nstruct cork_bitset *\ncork_bitset_new(size_t bit_count)\n{\n    struct cork_bitset  *set = cork_new(struct cork_bitset);\n    set->bit_count = bit_count;\n    set->byte_count = bytes_needed(bit_count);\n    set->bits = cork_malloc(set->byte_count);\n    memset(set->bits, 0, set->byte_count);\n    return set;\n}\n\nvoid\ncork_bitset_free(struct cork_bitset *set)\n{\n    free(set->bits);\n    free(set);\n}\n\nvoid\ncork_bitset_clear(struct cork_bitset *set)\n{\n    memset(set->bits, 0, set->byte_count);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/buffer.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdarg.h>\n#include <stdio.h>\n#include <string.h>\n\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/buffer.h\"\n#include \"libcork/ds/managed-buffer.h\"\n#include \"libcork/ds/stream.h\"\n#include \"libcork/helpers/errors.h\"\n\n\nvoid\ncork_buffer_init(struct cork_buffer *buffer)\n{\n    buffer->buf = NULL;\n    buffer->size = 0;\n    buffer->allocated_size = 0;\n}\n\n\nstruct cork_buffer *\ncork_buffer_new(void)\n{\n    struct cork_buffer  *buffer = cork_new(struct cork_buffer);\n    cork_buffer_init(buffer);\n    return buffer;\n}\n\n\nvoid\ncork_buffer_done(struct cork_buffer *buffer)\n{\n    if (buffer->buf != NULL) {\n        free(buffer->buf);\n        buffer->buf = NULL;\n    }\n    buffer->size = 0;\n    buffer->allocated_size = 0;\n}\n\n\nvoid\ncork_buffer_free(struct cork_buffer *buffer)\n{\n    cork_buffer_done(buffer);\n    free(buffer);\n}\n\n\nbool\ncork_buffer_equal(const struct cork_buffer *buffer1,\n                  const struct cork_buffer *buffer2)\n{\n    if (buffer1 == buffer2) {\n        return true;\n    }\n\n    if (buffer1->size != buffer2->size) {\n        return false;\n    }\n\n    return (memcmp(buffer1->buf, buffer2->buf, buffer1->size) == 0);\n}\n\n\nstatic void\ncork_buffer_ensure_size_int(struct cork_buffer *buffer, size_t desired_size)\n{\n    size_t  new_size;\n\n    if (CORK_LIKELY(buffer->allocated_size >= desired_size)) {\n        return;\n    }\n\n    /* Make sure we at least double the old size when reallocating. */\n    new_size = buffer->allocated_size * 2;\n    if (desired_size > new_size) {\n        new_size = desired_size;\n    }\n\n    buffer->buf = cork_realloc(buffer->buf, new_size);\n    buffer->allocated_size = new_size;\n}\n\nvoid\ncork_buffer_ensure_size(struct cork_buffer *buffer, size_t desired_size)\n{\n    cork_buffer_ensure_size_int(buffer, desired_size);\n}\n\n\nvoid\ncork_buffer_clear(struct cork_buffer *buffer)\n{\n    buffer->size = 0;\n    if (buffer->buf != NULL) {\n        ((char *) buffer->buf)[0] = '\\0';\n    }\n}\n\nvoid\ncork_buffer_truncate(struct cork_buffer *buffer, size_t length)\n{\n    if (buffer->size > length) {\n        buffer->size = length;\n        if (length == 0) {\n            if (buffer->buf != NULL) {\n                ((char *) buffer->buf)[0] = '\\0';\n            }\n        } else {\n            ((char *) buffer->buf)[length] = '\\0';\n        }\n    }\n}\n\n\nvoid\ncork_buffer_set(struct cork_buffer *buffer, const void *src, size_t length)\n{\n    cork_buffer_ensure_size_int(buffer, length+1);\n    memcpy(buffer->buf, src, length);\n    ((char *) buffer->buf)[length] = '\\0';\n    buffer->size = length;\n}\n\n\nvoid\ncork_buffer_append(struct cork_buffer *buffer, const void *src, size_t length)\n{\n    cork_buffer_ensure_size_int(buffer, buffer->size + length + 1);\n    memcpy(buffer->buf + buffer->size, src, length);\n    buffer->size += length;\n    ((char *) buffer->buf)[buffer->size] = '\\0';\n}\n\n\nvoid\ncork_buffer_set_string(struct cork_buffer *buffer, const char *str)\n{\n    cork_buffer_set(buffer, str, strlen(str));\n}\n\n\nvoid\ncork_buffer_append_string(struct cork_buffer *buffer, const char *str)\n{\n    cork_buffer_append(buffer, str, strlen(str));\n}\n\n\nvoid\ncork_buffer_append_vprintf(struct cork_buffer *buffer, const char *format,\n                           va_list args)\n{\n    size_t  format_size;\n    va_list  args1;\n\n    va_copy(args1, args);\n    format_size = vsnprintf(buffer->buf + buffer->size,\n                            buffer->allocated_size - buffer->size,\n                            format, args1);\n    va_end(args1);\n\n    /* If the first call works, then set buffer->size and return. */\n    if (format_size < (buffer->allocated_size - buffer->size)) {\n        buffer->size += format_size;\n        return;\n    }\n\n    /* If the first call fails, resize buffer and try again. */\n    cork_buffer_ensure_size_int\n        (buffer, buffer->allocated_size + format_size + 1);\n    format_size = vsnprintf(buffer->buf + buffer->size,\n                            buffer->allocated_size - buffer->size,\n                            format, args);\n    buffer->size += format_size;\n}\n\n\nvoid\ncork_buffer_vprintf(struct cork_buffer *buffer, const char *format,\n                    va_list args)\n{\n    cork_buffer_clear(buffer);\n    cork_buffer_append_vprintf(buffer, format, args);\n}\n\n\nvoid\ncork_buffer_append_printf(struct cork_buffer *buffer, const char *format, ...)\n{\n    va_list  args;\n    va_start(args, format);\n    cork_buffer_append_vprintf(buffer, format, args);\n    va_end(args);\n}\n\n\nvoid\ncork_buffer_printf(struct cork_buffer *buffer, const char *format, ...)\n{\n    va_list  args;\n    va_start(args, format);\n    cork_buffer_vprintf(buffer, format, args);\n    va_end(args);\n}\n\n\nvoid\ncork_buffer_append_indent(struct cork_buffer *buffer, size_t indent)\n{\n    cork_buffer_ensure_size_int(buffer, buffer->size + indent + 1);\n    memset(buffer->buf + buffer->size, ' ', indent);\n    buffer->size += indent;\n    ((char *) buffer->buf)[buffer->size] = '\\0';\n}\n\n/* including space */\n#define is_sprint(ch)  ((ch) >= 0x20 && (ch) <= 0x7e)\n\n/* not including space */\n#define is_print(ch)  ((ch) > 0x20 && (ch) <= 0x7e)\n\n#define is_space(ch) \\\n    ((ch) == ' ' || \\\n     (ch) == '\\f' || \\\n     (ch) == '\\n' || \\\n     (ch) == '\\r' || \\\n     (ch) == '\\t' || \\\n     (ch) == '\\v')\n\n#define to_hex(nybble) \\\n    ((nybble) < 10? '0' + (nybble): 'a' - 10 + (nybble))\n\nvoid\ncork_buffer_append_c_string(struct cork_buffer *dest,\n                            const char *chars, size_t length)\n{\n    size_t  i;\n    cork_buffer_append(dest, \"\\\"\", 1);\n    for (i = 0; i < length; i++) {\n        char  ch = chars[i];\n        switch (ch) {\n            case '\\\"':\n                cork_buffer_append_literal(dest, \"\\\\\\\"\");\n                break;\n            case '\\\\':\n                cork_buffer_append_literal(dest, \"\\\\\\\\\");\n                break;\n            case '\\f':\n                cork_buffer_append_literal(dest, \"\\\\f\");\n                break;\n            case '\\n':\n                cork_buffer_append_literal(dest, \"\\\\n\");\n                break;\n            case '\\r':\n                cork_buffer_append_literal(dest, \"\\\\r\");\n                break;\n            case '\\t':\n                cork_buffer_append_literal(dest, \"\\\\t\");\n                break;\n            case '\\v':\n                cork_buffer_append_literal(dest, \"\\\\v\");\n                break;\n            default:\n                if (is_sprint(ch)) {\n                    cork_buffer_append(dest, &chars[i], 1);\n                } else {\n                    uint8_t  byte = ch;\n                    cork_buffer_append_printf(dest, \"\\\\x%02\" PRIx8, byte);\n                }\n                break;\n        }\n    }\n    cork_buffer_append(dest, \"\\\"\", 1);\n}\n\nvoid\ncork_buffer_append_hex_dump(struct cork_buffer *dest, size_t indent,\n                            const char *chars, size_t length)\n{\n    char  hex[3 * 16];\n    char  print[16];\n    char  *curr_hex = hex;\n    char  *curr_print = print;\n    size_t  i;\n    size_t  column = 0;\n    for (i = 0; i < length; i++) {\n        char  ch = chars[i];\n        uint8_t  u8 = ch;\n        *curr_hex++ = to_hex(u8 >> 4);\n        *curr_hex++ = to_hex(u8 & 0x0f);\n        *curr_hex++ = ' ';\n        *curr_print++ = is_sprint(ch)? ch: '.';\n        if (column == 0 && i != 0) {\n            cork_buffer_append_literal(dest, \"\\n\");\n            cork_buffer_append_indent(dest, indent);\n            column++;\n        } else if (column == 15) {\n            cork_buffer_append_printf\n                (dest, \"%-48.*s\", (int) (curr_hex - hex), hex);\n            cork_buffer_append_literal(dest, \" |\");\n            cork_buffer_append(dest, print, curr_print - print);\n            cork_buffer_append_literal(dest, \"|\");\n            curr_hex = hex;\n            curr_print = print;\n            column = 0;\n        } else {\n            column++;\n        }\n    }\n\n    if (column > 0) {\n        cork_buffer_append_printf(dest, \"%-48.*s\", (int) (curr_hex - hex), hex);\n        cork_buffer_append_literal(dest, \" |\");\n        cork_buffer_append(dest, print, curr_print - print);\n        cork_buffer_append_literal(dest, \"|\");\n    }\n}\n\nvoid\ncork_buffer_append_multiline(struct cork_buffer *dest, size_t indent,\n                             const char *chars, size_t length)\n{\n    size_t  i;\n    for (i = 0; i < length; i++) {\n        char  ch = chars[i];\n        if (ch == '\\n') {\n            cork_buffer_append_literal(dest, \"\\n\");\n            cork_buffer_append_indent(dest, indent);\n        } else {\n            cork_buffer_append(dest, &chars[i], 1);\n        }\n    }\n}\n\nvoid\ncork_buffer_append_binary(struct cork_buffer *dest, size_t indent,\n                          const char *chars, size_t length)\n{\n    size_t  i;\n    bool  newline = false;\n\n    /* If there are any non-printable characters, print out a hex dump */\n    for (i = 0; i < length; i++) {\n        if (!is_print(chars[i]) && !is_space(chars[i])) {\n            cork_buffer_append_literal(dest, \"(hex)\\n\");\n            cork_buffer_append_indent(dest, indent);\n            cork_buffer_append_hex_dump(dest, indent, chars, length);\n            return;\n        } else if (chars[i] == '\\n') {\n            newline = true;\n            /* Don't immediately use the multiline format, since there might be\n             * a non-printable character later on that kicks us over to the hex\n             * dump format. */\n        }\n    }\n\n    if (newline) {\n        cork_buffer_append_literal(dest, \"(multiline)\\n\");\n        cork_buffer_append_indent(dest, indent);\n        cork_buffer_append_multiline(dest, indent, chars, length);\n    } else {\n        cork_buffer_append(dest, chars, length);\n    }\n}\n\n\nstruct cork_buffer__managed_buffer {\n    struct cork_managed_buffer  parent;\n    struct cork_buffer  *buffer;\n};\n\nstatic void\ncork_buffer__managed_free(struct cork_managed_buffer *vself)\n{\n    struct cork_buffer__managed_buffer  *self =\n        cork_container_of(vself, struct cork_buffer__managed_buffer, parent);\n    cork_buffer_free(self->buffer);\n    free(self);\n}\n\nstatic struct cork_managed_buffer_iface  CORK_BUFFER__MANAGED_BUFFER = {\n    cork_buffer__managed_free\n};\n\nstruct cork_managed_buffer *\ncork_buffer_to_managed_buffer(struct cork_buffer *buffer)\n{\n    struct cork_buffer__managed_buffer  *self =\n        cork_new(struct cork_buffer__managed_buffer);\n    self->parent.buf = buffer->buf;\n    self->parent.size = buffer->size;\n    self->parent.ref_count = 1;\n    self->parent.iface = &CORK_BUFFER__MANAGED_BUFFER;\n    self->buffer = buffer;\n    return &self->parent;\n}\n\n\nint\ncork_buffer_to_slice(struct cork_buffer *buffer, struct cork_slice *slice)\n{\n    struct cork_managed_buffer  *managed =\n        cork_buffer_to_managed_buffer(buffer);\n\n    /* We don't have to check for NULL; cork_managed_buffer_slice_offset\n     * will do that for us. */\n    int  rc = cork_managed_buffer_slice_offset(slice, managed, 0);\n\n    /* Before returning, drop our reference to the managed buffer.  If\n     * the slicing succeeded, then there will be one remaining reference\n     * in the slice.  If it didn't succeed, this will free the managed\n     * buffer for us. */\n    cork_managed_buffer_unref(managed);\n    return rc;\n}\n\n\nstruct cork_buffer__stream_consumer {\n    struct cork_stream_consumer  consumer;\n    struct cork_buffer  *buffer;\n};\n\nstatic int\ncork_buffer_stream_consumer_data(struct cork_stream_consumer *consumer,\n                                 const void *buf, size_t size,\n                                 bool is_first_chunk)\n{\n    struct cork_buffer__stream_consumer  *bconsumer = cork_container_of\n        (consumer, struct cork_buffer__stream_consumer, consumer);\n\n    if (is_first_chunk) {\n        cork_buffer_clear(bconsumer->buffer);\n    }\n\n    cork_buffer_append(bconsumer->buffer, buf, size);\n    return 0;\n}\n\nstatic int\ncork_buffer_stream_consumer_eof(struct cork_stream_consumer *consumer)\n{\n    return 0;\n}\n\nstatic void\ncork_buffer_stream_consumer_free(struct cork_stream_consumer *consumer)\n{\n    struct cork_buffer__stream_consumer  *bconsumer =\n        cork_container_of\n        (consumer, struct cork_buffer__stream_consumer, consumer);\n    free(bconsumer);\n}\n\nstruct cork_stream_consumer *\ncork_buffer_to_stream_consumer(struct cork_buffer *buffer)\n{\n    struct cork_buffer__stream_consumer  *bconsumer =\n        cork_new(struct cork_buffer__stream_consumer);\n    bconsumer->consumer.data = cork_buffer_stream_consumer_data;\n    bconsumer->consumer.eof = cork_buffer_stream_consumer_eof;\n    bconsumer->consumer.free = cork_buffer_stream_consumer_free;\n    bconsumer->buffer = buffer;\n    return &bconsumer->consumer;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/dllist.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2014, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include \"libcork/core/api.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/dllist.h\"\n\n\n/* Include a linkable (but deprecated) version of this to maintain ABI\n * compatibility. */\n#undef cork_dllist_init\nCORK_API void\ncork_dllist_init(struct cork_dllist *list)\n{\n    list->head.next = &list->head;\n    list->head.prev = &list->head;\n}\n\n\nvoid\ncork_dllist_map(struct cork_dllist *list,\n                cork_dllist_map_func func, void *user_data)\n{\n    struct cork_dllist_item  *curr;\n    struct cork_dllist_item  *next;\n    cork_dllist_foreach_void(list, curr, next) {\n        func(curr, user_data);\n    }\n}\n\nint\ncork_dllist_visit(struct cork_dllist *list, void *ud,\n                  cork_dllist_visit_f *visit)\n{\n    struct cork_dllist_item  *curr;\n    struct cork_dllist_item  *next;\n    cork_dllist_foreach_void(list, curr, next) {\n        int  rc = visit(ud, curr);\n        if (rc != 0) {\n            return rc;\n        }\n    }\n    return 0;\n}\n\n\nsize_t\ncork_dllist_size(const struct cork_dllist *list)\n{\n    size_t  size = 0;\n    struct cork_dllist_item  *curr;\n    struct cork_dllist_item  *next;\n    cork_dllist_foreach_void(list, curr, next) {\n        size++;\n    }\n    return size;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/file-stream.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <errno.h>\n#include <fcntl.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <sys/types.h>\n\n#include \"libcork/ds/stream.h\"\n#include \"libcork/helpers/errors.h\"\n#include \"libcork/helpers/posix.h\"\n\n#define BUFFER_SIZE  4096\n\n\n/*-----------------------------------------------------------------------\n * Producers\n */\n\nint\ncork_consume_fd(struct cork_stream_consumer *consumer, int fd)\n{\n    char  buf[BUFFER_SIZE];\n    ssize_t  bytes_read;\n    bool  first = true;\n\n    while (true) {\n        while ((bytes_read = read(fd, buf, BUFFER_SIZE)) > 0) {\n            rii_check(cork_stream_consumer_data\n                      (consumer, buf, bytes_read, first));\n            first = false;\n        }\n\n        if (bytes_read == 0) {\n            return cork_stream_consumer_eof(consumer);\n        } else if (errno != EINTR) {\n            cork_system_error_set();\n            return -1;\n        }\n    }\n}\n\nint\ncork_consume_file(struct cork_stream_consumer *consumer, FILE *fp)\n{\n    char  buf[BUFFER_SIZE];\n    size_t  bytes_read;\n    bool  first = true;\n\n    while (true) {\n        while ((bytes_read = fread(buf, 1, BUFFER_SIZE, fp)) > 0) {\n            rii_check(cork_stream_consumer_data\n                      (consumer, buf, bytes_read, first));\n            first = false;\n        }\n\n        if (feof(fp)) {\n            return cork_stream_consumer_eof(consumer);\n        } else if (errno != EINTR) {\n            cork_system_error_set();\n            return -1;\n        }\n    }\n}\n\nint\ncork_consume_file_from_path(struct cork_stream_consumer *consumer,\n                            const char *path, int flags)\n{\n    int  fd;\n    rii_check_posix(fd = open(path, flags));\n    ei_check(cork_consume_fd(consumer, fd));\n    rii_check_posix(close(fd));\n    return 0;\n\nerror:\n    rii_check_posix(close(fd));\n    return -1;\n}\n\n\n/*-----------------------------------------------------------------------\n * Consumers\n */\n\nstruct cork_file_consumer {\n    struct cork_stream_consumer  parent;\n    FILE  *fp;\n};\n\nstatic int\ncork_file_consumer__data(struct cork_stream_consumer *vself,\n                         const void *buf, size_t size, bool is_first)\n{\n    struct cork_file_consumer  *self =\n        cork_container_of(vself, struct cork_file_consumer, parent);\n    size_t  bytes_written = fwrite(buf, 1, size, self->fp);\n    /* If there was an error writing to the file, then signal this to\n     * the producer */\n    if (bytes_written == size) {\n        return 0;\n    } else {\n        cork_system_error_set();\n        return -1;\n    }\n}\n\nstatic int\ncork_file_consumer__eof(struct cork_stream_consumer *vself)\n{\n    /* We never close the file with this version of the consumer, so there's\n     * nothing special to do at end-of-stream. */\n    return 0;\n}\n\nstatic void\ncork_file_consumer__free(struct cork_stream_consumer *vself)\n{\n    struct cork_file_consumer  *self =\n        cork_container_of(vself, struct cork_file_consumer, parent);\n    free(self);\n}\n\nstruct cork_stream_consumer *\ncork_file_consumer_new(FILE *fp)\n{\n    struct cork_file_consumer  *self = cork_new(struct cork_file_consumer);\n    self->parent.data = cork_file_consumer__data;\n    self->parent.eof = cork_file_consumer__eof;\n    self->parent.free = cork_file_consumer__free;\n    self->fp = fp;\n    return &self->parent;\n}\n\n\nstruct cork_fd_consumer {\n    struct cork_stream_consumer  parent;\n    int  fd;\n};\n\nstatic int\ncork_fd_consumer__data(struct cork_stream_consumer *vself,\n                       const void *buf, size_t size, bool is_first)\n{\n    struct cork_fd_consumer  *self =\n        cork_container_of(vself, struct cork_fd_consumer, parent);\n    size_t  bytes_left = size;\n\n    while (bytes_left > 0) {\n        ssize_t  rc = write(self->fd, buf, bytes_left);\n        if (rc == -1 && errno != EINTR) {\n            cork_system_error_set();\n            return -1;\n        } else {\n            bytes_left -= rc;\n            buf += rc;\n        }\n    }\n\n    return 0;\n}\n\nstatic int\ncork_fd_consumer__eof_close(struct cork_stream_consumer *vself)\n{\n    int  rc;\n    struct cork_fd_consumer  *self =\n        cork_container_of(vself, struct cork_fd_consumer, parent);\n    rii_check_posix(rc = close(self->fd));\n    return 0;\n}\n\nstatic void\ncork_fd_consumer__free(struct cork_stream_consumer *vself)\n{\n    struct cork_fd_consumer  *self =\n        cork_container_of(vself, struct cork_fd_consumer, parent);\n    free(self);\n}\n\nstruct cork_stream_consumer *\ncork_fd_consumer_new(int fd)\n{\n    struct cork_fd_consumer  *self = cork_new(struct cork_fd_consumer);\n    self->parent.data = cork_fd_consumer__data;\n    /* We don't want to close fd, so we reuse file_consumer's eof method */\n    self->parent.eof = cork_file_consumer__eof;\n    self->parent.free = cork_fd_consumer__free;\n    self->fd = fd;\n    return &self->parent;\n}\n\nstruct cork_stream_consumer *\ncork_file_from_path_consumer_new(const char *path, int flags)\n{\n\n    int  fd;\n    struct cork_fd_consumer  *self;\n\n    rpi_check_posix(fd = open(path, flags));\n    self = cork_new(struct cork_fd_consumer);\n    self->parent.data = cork_fd_consumer__data;\n    self->parent.eof = cork_fd_consumer__eof_close;\n    self->parent.free = cork_fd_consumer__free;\n    self->fd = fd;\n    return &self->parent;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/hash-table.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n#include <string.h>\n\n#include \"libcork/core/callbacks.h\"\n#include \"libcork/core/hash.h\"\n#include \"libcork/core/mempool.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/dllist.h\"\n#include \"libcork/ds/hash-table.h\"\n#include \"libcork/helpers/errors.h\"\n\n#ifndef CORK_HASH_TABLE_DEBUG\n#define CORK_HASH_TABLE_DEBUG 0\n#endif\n\n#if CORK_HASH_TABLE_DEBUG\n#include <stdio.h>\n#define SP_DEBUG(...) \\\n    do { \\\n        fprintf(stderr, __VA_ARGS__); \\\n        fprintf(stderr, \"\\n\"); \\\n    } while (0)\n#else\n#define SP_DEBUG(...) /* nothing */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Hash tables\n */\n\nstruct cork_hash_table_entry_priv {\n    struct cork_hash_table_entry  public;\n    struct cork_dllist_item  in_bucket;\n    struct cork_dllist_item  insertion_order;\n};\n\nstruct cork_hash_table {\n    struct cork_dllist  *bins;\n    struct cork_dllist  insertion_order;\n    size_t  bin_count;\n    size_t  bin_mask;\n    size_t  entry_count;\n    struct cork_mempool  *pool;\n    void  *user_data;\n    cork_free_f  free_user_data;\n    cork_hash_f  hash;\n    cork_equals_f  equals;\n    cork_free_f  free_key;\n    cork_free_f  free_value;\n};\n\nstatic cork_hash\ncork_hash_table__default_hash(void *user_data, const void *key)\n{\n    return (cork_hash) (uintptr_t) key;\n}\n\nstatic bool\ncork_hash_table__default_equals(void *user_data,\n                                const void *key1, const void *key2)\n{\n    return key1 == key2;\n}\n\n\n/* The default initial number of bins to allocate in a new table. */\n#define CORK_HASH_TABLE_DEFAULT_INITIAL_SIZE  8\n\n/* The default number of entries per bin to allow before increasing the\n * number of bins. */\n#define CORK_HASH_TABLE_MAX_DENSITY  5\n\n/* Return a power-of-2 bin count that's at least as big as the given requested\n * size. */\nstatic inline size_t\ncork_hash_table_new_size(size_t desired_count)\n{\n    size_t  v = desired_count;\n    size_t  r = 1;\n    while (v >>= 1) {\n        r <<= 1;\n    }\n    if (r != desired_count) {\n        r <<= 1;\n    }\n    return r;\n}\n\n#define bin_index(table, hash)  ((hash) & (table)->bin_mask)\n\n/* Allocates a new bins array in a hash table.  We overwrite the old\n * array, so make sure to stash it away somewhere safe first. */\nstatic void\ncork_hash_table_allocate_bins(struct cork_hash_table *table,\n                              size_t desired_count)\n{\n    size_t  i;\n\n    table->bin_count = cork_hash_table_new_size(desired_count);\n    table->bin_mask = table->bin_count - 1;\n    SP_DEBUG(\"Allocate %zu bins\", table->bin_count);\n    table->bins = cork_calloc(table->bin_count, sizeof(struct cork_dllist));\n    for (i = 0; i < table->bin_count; i++) {\n        cork_dllist_init(&table->bins[i]);\n    }\n}\n\n\nstatic struct cork_hash_table_entry_priv *\ncork_hash_table_new_entry(struct cork_hash_table *table,\n                          cork_hash hash, void *key, void *value)\n{\n    struct cork_hash_table_entry_priv  *entry =\n        cork_mempool_new_object(table->pool);\n    cork_dllist_add(&table->insertion_order, &entry->insertion_order);\n    entry->public.hash = hash;\n    entry->public.key = key;\n    entry->public.value = value;\n    return entry;\n}\n\nstatic void\ncork_hash_table_free_entry(struct cork_hash_table *table,\n                           struct cork_hash_table_entry_priv *entry)\n{\n    if (table->free_key != NULL) {\n        table->free_key(entry->public.key);\n    }\n    if (table->free_value != NULL) {\n        table->free_value(entry->public.value);\n    }\n    cork_dllist_remove(&entry->insertion_order);\n    cork_mempool_free_object(table->pool, entry);\n}\n\n\nstruct cork_hash_table *\ncork_hash_table_new(size_t initial_size, unsigned int flags)\n{\n    struct cork_hash_table  *table = cork_new(struct cork_hash_table);\n    table->entry_count = 0;\n    table->user_data = NULL;\n    table->free_user_data = NULL;\n    table->hash = cork_hash_table__default_hash;\n    table->equals = cork_hash_table__default_equals;\n    table->free_key = NULL;\n    table->free_value = NULL;\n    table->pool = cork_mempool_new(struct cork_hash_table_entry_priv);\n    cork_dllist_init(&table->insertion_order);\n    if (initial_size < CORK_HASH_TABLE_DEFAULT_INITIAL_SIZE) {\n        initial_size = CORK_HASH_TABLE_DEFAULT_INITIAL_SIZE;\n    }\n    cork_hash_table_allocate_bins(table, initial_size);\n    return table;\n}\n\nvoid\ncork_hash_table_clear(struct cork_hash_table *table)\n{\n    size_t  i;\n    struct cork_dllist_item  *curr;\n    struct cork_dllist_item  *next;\n\n    SP_DEBUG(\"(clear) Remove all entries\");\n    for (curr = cork_dllist_start(&table->insertion_order);\n         !cork_dllist_is_end(&table->insertion_order, curr);\n         curr = next) {\n        struct cork_hash_table_entry_priv  *entry =\n            cork_container_of\n            (curr, struct cork_hash_table_entry_priv, insertion_order);\n        next = curr->next;\n        cork_hash_table_free_entry(table, entry);\n    }\n    cork_dllist_init(&table->insertion_order);\n\n    SP_DEBUG(\"(clear) Clear bins\");\n    for (i = 0; i < table->bin_count; i++) {\n        SP_DEBUG(\"  Bin %zu\", i);\n        cork_dllist_init(&table->bins[i]);\n    }\n\n    table->entry_count = 0;\n}\n\nvoid\ncork_hash_table_free(struct cork_hash_table *table)\n{\n    cork_hash_table_clear(table);\n    cork_mempool_free(table->pool);\n    free(table->bins);\n    free(table);\n}\n\nsize_t\ncork_hash_table_size(const struct cork_hash_table *table)\n{\n    return table->entry_count;\n}\n\nvoid\ncork_hash_table_set_user_data(struct cork_hash_table *table,\n                              void *user_data, cork_free_f free_user_data)\n{\n    table->user_data = user_data;\n    table->free_user_data = free_user_data;\n}\n\nvoid\ncork_hash_table_set_hash(struct cork_hash_table *table, cork_hash_f hash)\n{\n    table->hash = hash;\n}\n\nvoid\ncork_hash_table_set_equals(struct cork_hash_table *table, cork_equals_f equals)\n{\n    table->equals = equals;\n}\n\nvoid\ncork_hash_table_set_free_key(struct cork_hash_table *table, cork_free_f free)\n{\n    table->free_key = free;\n}\n\nvoid\ncork_hash_table_set_free_value(struct cork_hash_table *table, cork_free_f free)\n{\n    table->free_value = free;\n}\n\n\nvoid\ncork_hash_table_ensure_size(struct cork_hash_table *table, size_t desired_count)\n{\n    if (desired_count > table->bin_count) {\n        struct cork_dllist  *old_bins = table->bins;\n        size_t  old_bin_count = table->bin_count;\n\n        cork_hash_table_allocate_bins(table, desired_count);\n\n        if (old_bins != NULL) {\n            size_t  i;\n            for (i = 0; i < old_bin_count; i++) {\n                struct cork_dllist  *bin = &old_bins[i];\n                struct cork_dllist_item  *curr = cork_dllist_start(bin);\n                while (!cork_dllist_is_end(bin, curr)) {\n                    struct cork_hash_table_entry_priv  *entry =\n                        cork_container_of\n                        (curr, struct cork_hash_table_entry_priv, in_bucket);\n                    struct cork_dllist_item  *next = curr->next;\n\n                    size_t  bin_index = bin_index(table, entry->public.hash);\n                    SP_DEBUG(\"      Rehash %p from bin %zu to bin %zu\",\n                          entry, i, bin_index);\n                    cork_dllist_add(&table->bins[bin_index], curr);\n\n                    curr = next;\n                }\n            }\n\n            free(old_bins);\n        }\n    }\n}\n\n\nstatic void\ncork_hash_table_rehash(struct cork_hash_table *table)\n{\n    SP_DEBUG(\"    Reached maximum density; rehash\");\n    cork_hash_table_ensure_size(table, table->bin_count + 1);\n}\n\n\nstruct cork_hash_table_entry *\ncork_hash_table_get_entry_hash(const struct cork_hash_table *table,\n                               cork_hash hash, const void *key)\n{\n    size_t  bin_index;\n    struct cork_dllist  *bin;\n    struct cork_dllist_item  *curr;\n\n    if (table->bin_count == 0) {\n        SP_DEBUG(\"(get) Empty table when searching for key %p \"\n              \"(hash 0x%08\" PRIx32 \")\",\n              key, hash);\n        return NULL;\n    }\n\n    bin_index = bin_index(table, hash);\n    SP_DEBUG(\"(get) Search for key %p (hash 0x%08\" PRIx32 \", bin %zu)\",\n          key, hash, bin_index);\n\n    bin = &table->bins[bin_index];\n    curr = cork_dllist_start(bin);\n    while (!cork_dllist_is_end(bin, curr)) {\n        struct cork_hash_table_entry_priv  *entry =\n            cork_container_of\n            (curr, struct cork_hash_table_entry_priv, in_bucket);\n\n        SP_DEBUG(\"  Check entry %p\", entry);\n        if (table->equals(table->user_data, key, entry->public.key)) {\n            SP_DEBUG(\"  Match\");\n            return &entry->public;\n        }\n\n        curr = curr->next;\n    }\n\n    SP_DEBUG(\"  Entry not found\");\n    return NULL;\n}\n\nstruct cork_hash_table_entry *\ncork_hash_table_get_entry(const struct cork_hash_table *table, const void *key)\n{\n    cork_hash  hash = table->hash(table->user_data, key);\n    return cork_hash_table_get_entry_hash(table, hash, key);\n}\n\nvoid *\ncork_hash_table_get_hash(const struct cork_hash_table *table,\n                         cork_hash hash, const void *key)\n{\n    struct cork_hash_table_entry  *entry =\n        cork_hash_table_get_entry_hash(table, hash, key);\n    if (entry == NULL) {\n        return NULL;\n    } else {\n        SP_DEBUG(\"  Extract value pointer %p\", entry->value);\n        return entry->value;\n    }\n}\n\nvoid *\ncork_hash_table_get(const struct cork_hash_table *table, const void *key)\n{\n    struct cork_hash_table_entry  *entry =\n        cork_hash_table_get_entry(table, key);\n    if (entry == NULL) {\n        return NULL;\n    } else {\n        SP_DEBUG(\"  Extract value pointer %p\", entry->value);\n        return entry->value;\n    }\n}\n\n\nstruct cork_hash_table_entry *\ncork_hash_table_get_or_create_hash(struct cork_hash_table *table,\n                                   cork_hash hash, void *key, bool *is_new)\n{\n    struct cork_hash_table_entry_priv  *entry;\n    size_t  bin_index;\n\n    if (table->bin_count > 0) {\n        struct cork_dllist  *bin;\n        struct cork_dllist_item  *curr;\n\n        bin_index = bin_index(table, hash);\n        SP_DEBUG(\"(get_or_create) Search for key %p \"\n              \"(hash 0x%08\" PRIx32 \", bin %zu)\",\n              key, hash, bin_index);\n\n        bin = &table->bins[bin_index];\n        curr = cork_dllist_start(bin);\n        while (!cork_dllist_is_end(bin, curr)) {\n            struct cork_hash_table_entry_priv  *entry =\n                cork_container_of\n                (curr, struct cork_hash_table_entry_priv, in_bucket);\n\n            SP_DEBUG(\"  Check entry %p\", entry);\n            if (table->equals(table->user_data, key, entry->public.key)) {\n                SP_DEBUG(\"    Match\");\n                SP_DEBUG(\"    Return value pointer %p\", entry->public.value);\n                *is_new = false;\n                return &entry->public;\n            }\n\n            curr = curr->next;\n        }\n\n        /* create a new entry */\n        SP_DEBUG(\"  Entry not found\");\n\n        if ((table->entry_count / table->bin_count) >\n            CORK_HASH_TABLE_MAX_DENSITY) {\n            cork_hash_table_rehash(table);\n            bin_index = bin_index(table, hash);\n        }\n    } else {\n        SP_DEBUG(\"(get_or_create) Search for key %p (hash 0x%08\" PRIx32 \")\",\n              key, hash);\n        SP_DEBUG(\"  Empty table\");\n        cork_hash_table_rehash(table);\n        bin_index = bin_index(table, hash);\n    }\n\n    SP_DEBUG(\"    Allocate new entry\");\n    entry = cork_hash_table_new_entry(table, hash, key, NULL);\n    SP_DEBUG(\"    Created new entry %p\", entry);\n\n    SP_DEBUG(\"    Add entry into bin %zu\", bin_index);\n    cork_dllist_add(&table->bins[bin_index], &entry->in_bucket);\n\n    table->entry_count++;\n    *is_new = true;\n    return &entry->public;\n}\n\nstruct cork_hash_table_entry *\ncork_hash_table_get_or_create(struct cork_hash_table *table,\n                              void *key, bool *is_new)\n{\n    cork_hash  hash = table->hash(table->user_data, key);\n    return cork_hash_table_get_or_create_hash(table, hash, key, is_new);\n}\n\n\nvoid\ncork_hash_table_put_hash(struct cork_hash_table *table,\n                         cork_hash hash, void *key, void *value,\n                         bool *is_new, void **old_key, void **old_value)\n{\n    struct cork_hash_table_entry_priv  *entry;\n    size_t  bin_index;\n\n    if (table->bin_count > 0) {\n        struct cork_dllist  *bin;\n        struct cork_dllist_item  *curr;\n\n        bin_index = bin_index(table, hash);\n        SP_DEBUG(\"(put) Search for key %p (hash 0x%08\" PRIx32 \", bin %zu)\",\n              key, hash, bin_index);\n\n        bin = &table->bins[bin_index];\n        curr = cork_dllist_start(bin);\n        while (!cork_dllist_is_end(bin, curr)) {\n            struct cork_hash_table_entry_priv  *entry =\n                cork_container_of\n                (curr, struct cork_hash_table_entry_priv, in_bucket);\n\n            SP_DEBUG(\"  Check entry %p\", entry);\n            if (table->equals(table->user_data, key, entry->public.key)) {\n                SP_DEBUG(\"    Found existing entry; overwriting\");\n                SP_DEBUG(\"    Return old key %p\", entry->public.key);\n                if (old_key != NULL) {\n                    *old_key = entry->public.key;\n                }\n                SP_DEBUG(\"    Return old value %p\", entry->public.value);\n                if (old_value != NULL) {\n                    *old_value = entry->public.value;\n                }\n                SP_DEBUG(\"    Copy key %p into entry\", key);\n                entry->public.key = key;\n                SP_DEBUG(\"    Copy value %p into entry\", value);\n                entry->public.value = value;\n                if (is_new != NULL) {\n                    *is_new = false;\n                }\n                return;\n            }\n\n            curr = curr->next;\n        }\n\n        /* create a new entry */\n        SP_DEBUG(\"  Entry not found\");\n        if ((table->entry_count / table->bin_count) >\n            CORK_HASH_TABLE_MAX_DENSITY) {\n            cork_hash_table_rehash(table);\n            bin_index = bin_index(table, hash);\n        }\n    } else {\n        SP_DEBUG(\"(put) Search for key %p (hash 0x%08\" PRIx32 \")\",\n              key, hash);\n        SP_DEBUG(\"  Empty table\");\n        cork_hash_table_rehash(table);\n        bin_index = bin_index(table, hash);\n    }\n\n    SP_DEBUG(\"    Allocate new entry\");\n    entry = cork_hash_table_new_entry(table, hash, key, value);\n    SP_DEBUG(\"    Created new entry %p\", entry);\n\n    SP_DEBUG(\"    Add entry into bin %zu\", bin_index);\n    cork_dllist_add(&table->bins[bin_index], &entry->in_bucket);\n\n    table->entry_count++;\n    if (old_key != NULL) {\n        *old_key = NULL;\n    }\n    if (old_value != NULL) {\n        *old_value = NULL;\n    }\n    if (is_new != NULL) {\n        *is_new = true;\n    }\n}\n\nvoid\ncork_hash_table_put(struct cork_hash_table *table,\n                    void *key, void *value,\n                    bool *is_new, void **old_key, void **old_value)\n{\n    cork_hash  hash = table->hash(table->user_data, key);\n    cork_hash_table_put_hash\n        (table, hash, key, value, is_new, old_key, old_value);\n}\n\n\nvoid\ncork_hash_table_delete_entry(struct cork_hash_table *table,\n                             struct cork_hash_table_entry *ventry)\n{\n    struct cork_hash_table_entry_priv  *entry =\n        cork_container_of(ventry, struct cork_hash_table_entry_priv, public);\n    cork_dllist_remove(&entry->in_bucket);\n    table->entry_count--;\n    cork_hash_table_free_entry(table, entry);\n}\n\n\nbool\ncork_hash_table_delete_hash(struct cork_hash_table *table,\n                            cork_hash hash, const void *key,\n                            void **deleted_key, void **deleted_value)\n{\n    size_t  bin_index;\n    struct cork_dllist  *bin;\n    struct cork_dllist_item  *curr;\n\n    if (table->bin_count == 0) {\n        SP_DEBUG(\"(delete) Empty table when searching for key %p \"\n              \"(hash 0x%08\" PRIx32 \")\",\n              key, hash);\n        return false;\n    }\n\n    bin_index = bin_index(table, hash);\n    SP_DEBUG(\"(delete) Search for key %p (hash 0x%08\" PRIx32 \", bin %zu)\",\n          key, hash, bin_index);\n\n    bin = &table->bins[bin_index];\n    curr = cork_dllist_start(bin);\n    while (!cork_dllist_is_end(bin, curr)) {\n        struct cork_hash_table_entry_priv  *entry =\n            cork_container_of\n            (curr, struct cork_hash_table_entry_priv, in_bucket);\n\n        SP_DEBUG(\"  Check entry %p\", entry);\n        if (table->equals(table->user_data, key, entry->public.key)) {\n            SP_DEBUG(\"    Match\");\n            if (deleted_key != NULL) {\n                *deleted_key = entry->public.key;\n            }\n            if (deleted_value != NULL) {\n                *deleted_value = entry->public.value;\n            }\n\n            SP_DEBUG(\"    Remove entry from hash bin %zu\", bin_index);\n            cork_dllist_remove(curr);\n            table->entry_count--;\n\n            SP_DEBUG(\"    Free entry %p\", entry);\n            cork_hash_table_free_entry(table, entry);\n            return true;\n        }\n\n        curr = curr->next;\n    }\n\n    SP_DEBUG(\"  Entry not found\");\n    return false;\n}\n\nbool\ncork_hash_table_delete(struct cork_hash_table *table, const void *key,\n                       void **deleted_key, void **deleted_value)\n{\n    cork_hash  hash = table->hash(table->user_data, key);\n    return cork_hash_table_delete_hash\n        (table, hash, key, deleted_key, deleted_value);\n}\n\n\nvoid\ncork_hash_table_map(struct cork_hash_table *table, void *user_data,\n                    cork_hash_table_map_f map)\n{\n    struct cork_dllist_item  *curr;\n    SP_DEBUG(\"Map across hash table\");\n\n    curr = cork_dllist_start(&table->insertion_order);\n    while (!cork_dllist_is_end(&table->insertion_order, curr)) {\n        struct cork_hash_table_entry_priv  *entry =\n            cork_container_of\n            (curr, struct cork_hash_table_entry_priv, insertion_order);\n        struct cork_dllist_item  *next = curr->next;\n        enum cork_hash_table_map_result  result;\n\n        SP_DEBUG(\"    Apply function to entry %p\", entry);\n        result = map(user_data, &entry->public);\n\n        if (result == CORK_HASH_TABLE_MAP_ABORT) {\n            return;\n        } else if (result == CORK_HASH_TABLE_MAP_DELETE) {\n            SP_DEBUG(\"      Delete requested\");\n            cork_dllist_remove(curr);\n            table->entry_count--;\n            cork_hash_table_free_entry(table, entry);\n        }\n\n        curr = next;\n    }\n}\n\n\nvoid\ncork_hash_table_iterator_init(struct cork_hash_table *table,\n                              struct cork_hash_table_iterator *iterator)\n{\n    SP_DEBUG(\"Iterate through hash table\");\n    iterator->table = table;\n    iterator->priv = cork_dllist_start(&table->insertion_order);\n}\n\n\nstruct cork_hash_table_entry *\ncork_hash_table_iterator_next(struct cork_hash_table_iterator *iterator)\n{\n    struct cork_hash_table  *table = iterator->table;\n    struct cork_dllist_item  *curr = iterator->priv;\n    struct cork_hash_table_entry_priv  *entry;\n\n    if (cork_dllist_is_end(&table->insertion_order, curr)) {\n        return NULL;\n    }\n\n    entry = cork_container_of\n        (curr, struct cork_hash_table_entry_priv, insertion_order);\n    SP_DEBUG(\"    Return entry %p\", entry);\n    iterator->priv = curr->next;\n    return &entry->public;\n}\n\n\n/*-----------------------------------------------------------------------\n * Built-in key types\n */\n\nstatic cork_hash\nstring_hash(void *user_data, const void *vk)\n{\n    const char  *k = vk;\n    size_t  len = strlen(k);\n    return cork_hash_buffer(0, k, len);\n}\n\nstatic bool\nstring_equals(void *user_data, const void *vk1, const void *vk2)\n{\n    const char  *k1 = vk1;\n    const char  *k2 = vk2;\n    return strcmp(k1, k2) == 0;\n}\n\nstruct cork_hash_table *\ncork_string_hash_table_new(size_t initial_size, unsigned int flags)\n{\n    struct cork_hash_table  *table = cork_hash_table_new(initial_size, flags);\n    cork_hash_table_set_hash(table, string_hash);\n    cork_hash_table_set_equals(table, string_equals);\n    return table;\n}\n\nstruct cork_hash_table *\ncork_pointer_hash_table_new(size_t initial_size, unsigned int flags)\n{\n    return cork_hash_table_new(initial_size, flags);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/managed-buffer.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n#include <string.h>\n\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/managed-buffer.h\"\n#include \"libcork/ds/slice.h\"\n#include \"libcork/helpers/errors.h\"\n\n\n/*-----------------------------------------------------------------------\n * Error handling\n */\n\nstatic void\ncork_slice_invalid_slice_set(size_t buf_size, size_t requested_offset,\n                             size_t requested_length)\n{\n    cork_error_set\n        (CORK_SLICE_ERROR, CORK_SLICE_INVALID_SLICE,\n         \"Cannot slice %zu-byte buffer at %zu:%zu\",\n         buf_size, requested_offset, requested_length);\n}\n\n\n/*-----------------------------------------------------------------------\n * Managed buffers\n */\n\nstruct cork_managed_buffer_wrapped {\n    struct cork_managed_buffer  parent;\n    void  *buf;\n    size_t  size;\n    cork_managed_buffer_freer  free;\n};\n\nstatic void\ncork_managed_buffer_wrapped__free(struct cork_managed_buffer *vself)\n{\n    struct cork_managed_buffer_wrapped  *self =\n        cork_container_of(vself, struct cork_managed_buffer_wrapped, parent);\n    self->free(self->buf, self->size);\n    free(self);\n}\n\nstatic struct cork_managed_buffer_iface  CORK_MANAGED_BUFFER_WRAPPED = {\n    cork_managed_buffer_wrapped__free\n};\n\nstruct cork_managed_buffer *\ncork_managed_buffer_new(const void *buf, size_t size,\n                        cork_managed_buffer_freer free)\n{\n    /*\n    SP_DEBUG(\"Creating new struct cork_managed_buffer [%p:%zu], refcount now 1\",\n          buf, size);\n    */\n\n    struct cork_managed_buffer_wrapped  *self =\n        cork_new(struct cork_managed_buffer_wrapped);\n    self->parent.buf = buf;\n    self->parent.size = size;\n    self->parent.ref_count = 1;\n    self->parent.iface = &CORK_MANAGED_BUFFER_WRAPPED;\n    self->buf = (void *) buf;\n    self->size = size;\n    self->free = free;\n    return &self->parent;\n}\n\n\nstruct cork_managed_buffer_copied {\n    struct cork_managed_buffer  parent;\n};\n\n#define cork_managed_buffer_copied_data(self) \\\n    (((void *) (self)) + sizeof(struct cork_managed_buffer_copied))\n\n#define cork_managed_buffer_copied_sizeof(sz) \\\n    ((sz) + sizeof(struct cork_managed_buffer_copied))\n\nstatic void\ncork_managed_buffer_copied__free(struct cork_managed_buffer *vself)\n{\n    struct cork_managed_buffer_copied  *self =\n        cork_container_of(vself, struct cork_managed_buffer_copied, parent);\n    free(self);\n}\n\nstatic struct cork_managed_buffer_iface  CORK_MANAGED_BUFFER_COPIED = {\n    cork_managed_buffer_copied__free\n};\n\nstruct cork_managed_buffer *\ncork_managed_buffer_new_copy(const void *buf, size_t size)\n{\n    size_t  allocated_size = cork_managed_buffer_copied_sizeof(size);\n    struct cork_managed_buffer_copied  *self = malloc(allocated_size);\n    if (self == NULL) {\n        return NULL;\n    }\n\n    self->parent.buf = cork_managed_buffer_copied_data(self);\n    self->parent.size = size;\n    self->parent.ref_count = 1;\n    self->parent.iface = &CORK_MANAGED_BUFFER_COPIED;\n    memcpy((void *) self->parent.buf, buf, size);\n    return &self->parent;\n}\n\n\nstatic void\ncork_managed_buffer_free(struct cork_managed_buffer *self)\n{\n    /*\n    SP_DEBUG(\"Freeing struct cork_managed_buffer [%p:%zu]\", self->buf, self->size);\n    */\n\n    self->iface->free(self);\n}\n\n\nstruct cork_managed_buffer *\ncork_managed_buffer_ref(struct cork_managed_buffer *self)\n{\n    /*\n    int  old_count = self->ref_count++;\n    SP_DEBUG(\"Referencing struct cork_managed_buffer [%p:%zu], refcount now %d\",\n          self->buf, self->size, old_count + 1);\n    */\n\n    self->ref_count++;\n    return self;\n}\n\n\nvoid\ncork_managed_buffer_unref(struct cork_managed_buffer *self)\n{\n    /*\n    int  old_count = self->ref_count--;\n    SP_DEBUG(\"Dereferencing struct cork_managed_buffer [%p:%zu], refcount now %d\",\n          self->buf, self->size, old_count - 1);\n    */\n\n    if (--self->ref_count == 0) {\n        cork_managed_buffer_free(self);\n    }\n}\n\n\nstatic struct cork_slice_iface  CORK_MANAGED_BUFFER__SLICE;\n\nstatic void\ncork_managed_buffer__slice_free(struct cork_slice *self)\n{\n    struct cork_managed_buffer  *mbuf = self->user_data;\n    cork_managed_buffer_unref(mbuf);\n}\n\nstatic int\ncork_managed_buffer__slice_copy(struct cork_slice *dest,\n                                const struct cork_slice *src,\n                                size_t offset, size_t length)\n{\n    struct cork_managed_buffer  *mbuf = src->user_data;\n    dest->buf = src->buf + offset;\n    dest->size = length;\n    dest->iface = &CORK_MANAGED_BUFFER__SLICE;\n    dest->user_data = cork_managed_buffer_ref(mbuf);\n    return 0;\n}\n\nstatic struct cork_slice_iface  CORK_MANAGED_BUFFER__SLICE = {\n    cork_managed_buffer__slice_free,\n    cork_managed_buffer__slice_copy,\n    cork_managed_buffer__slice_copy,\n    NULL\n};\n\n\nint\ncork_managed_buffer_slice(struct cork_slice *dest,\n                          struct cork_managed_buffer *buffer,\n                          size_t offset, size_t length)\n{\n    if ((buffer != NULL) &&\n        (offset <= buffer->size) &&\n        ((offset + length) <= buffer->size)) {\n        /*\n        SP_DEBUG(\"Slicing [%p:%zu] at %zu:%zu, gives <%p:%zu>\",\n              buffer->buf, buffer->size,\n              offset, length,\n              buffer->buf + offset, length);\n        */\n        dest->buf = buffer->buf + offset;\n        dest->size = length;\n        dest->iface = &CORK_MANAGED_BUFFER__SLICE;\n        dest->user_data = cork_managed_buffer_ref(buffer);\n        return 0;\n    }\n\n    else {\n        /*\n        SP_DEBUG(\"Cannot slice [%p:%zu] at %zu:%zu\",\n              buffer->buf, buffer->size,\n              offset, length);\n        */\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set(0, offset, 0);\n        return -1;\n    }\n}\n\n\nint\ncork_managed_buffer_slice_offset(struct cork_slice *dest,\n                                 struct cork_managed_buffer *buffer,\n                                 size_t offset)\n{\n    if (buffer == NULL) {\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set(0, offset, 0);\n        return -1;\n    } else {\n        return cork_managed_buffer_slice\n            (dest, buffer, offset, buffer->size - offset);\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/ring-buffer.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/ring-buffer.h\"\n\n\nint\ncork_ring_buffer_init(struct cork_ring_buffer *self, size_t size)\n{\n    self->elements = cork_calloc(size, sizeof(void *));\n    self->allocated_size = size;\n    self->size = 0;\n    self->read_index = 0;\n    self->write_index = 0;\n    return 0;\n}\n\nstruct cork_ring_buffer *\ncork_ring_buffer_new(size_t size)\n{\n    struct cork_ring_buffer  *buf = cork_new(struct cork_ring_buffer);\n    cork_ring_buffer_init(buf, size);\n    return buf;\n}\n\nvoid\ncork_ring_buffer_done(struct cork_ring_buffer *self)\n{\n    free(self->elements);\n}\n\nvoid\ncork_ring_buffer_free(struct cork_ring_buffer *buf)\n{\n    cork_ring_buffer_done(buf);\n    free(buf);\n}\n\nint\ncork_ring_buffer_add(struct cork_ring_buffer *self, void *element)\n{\n    if (cork_ring_buffer_is_full(self)) {\n        return -1;\n    }\n\n    self->elements[self->write_index++] = element;\n    self->size++;\n    if (self->write_index == self->allocated_size) {\n        self->write_index = 0;\n    }\n    return 0;\n}\n\nvoid *\ncork_ring_buffer_pop(struct cork_ring_buffer *self)\n{\n    if (cork_ring_buffer_is_empty(self)) {\n        return NULL;\n    } else {\n        void  *result = self->elements[self->read_index++];\n        self->size--;\n        if (self->read_index == self->allocated_size) {\n            self->read_index = 0;\n        }\n        return result;\n    }\n}\n\nvoid *\ncork_ring_buffer_peek(struct cork_ring_buffer *self)\n{\n    if (cork_ring_buffer_is_empty(self)) {\n        return NULL;\n    } else {\n        return self->elements[self->read_index];\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/ds/slice.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/managed-buffer.h\"\n#include \"libcork/ds/slice.h\"\n#include \"libcork/helpers/errors.h\"\n\n\n/*-----------------------------------------------------------------------\n * Error handling\n */\n\nstatic void\ncork_slice_invalid_slice_set(size_t buf_size, size_t requested_offset,\n                             size_t requested_length)\n{\n    cork_error_set\n        (CORK_SLICE_ERROR, CORK_SLICE_INVALID_SLICE,\n         \"Cannot slice %zu-byte buffer at %zu:%zu\",\n         buf_size, requested_offset, requested_length);\n}\n\n\n/*-----------------------------------------------------------------------\n * Slices\n */\n\nvoid\ncork_slice_clear(struct cork_slice *slice)\n{\n    slice->buf = NULL;\n    slice->size = 0;\n    slice->iface = NULL;\n    slice->user_data = NULL;\n}\n\n\nint\ncork_slice_copy(struct cork_slice *dest, const struct cork_slice *slice,\n                size_t offset, size_t length)\n{\n    if ((slice != NULL) &&\n        (offset <= slice->size) &&\n        ((offset + length) <= slice->size)) {\n        /*\n        SP_DEBUG(\"Slicing <%p:%zu> at %zu:%zu, gives <%p:%zu>\",\n              slice->buf, slice->size,\n              offset, length,\n              slice->buf + offset, length);\n        */\n        return slice->iface->copy(dest, slice, offset, length);\n    }\n\n    else {\n        /*\n        SP_DEBUG(\"Cannot slice <%p:%zu> at %zu:%zu\",\n              slice->buf, slice->size,\n              offset, length);\n        */\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set\n            ((slice == NULL)? 0: slice->size, offset, length);\n        return -1;\n    }\n}\n\n\nint\ncork_slice_copy_offset(struct cork_slice *dest, const struct cork_slice *slice,\n                       size_t offset)\n{\n    if (slice == NULL) {\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set(0, offset, 0);\n        return -1;\n    } else {\n        return cork_slice_copy\n            (dest, slice, offset, slice->size - offset);\n    }\n}\n\n\nint\ncork_slice_light_copy(struct cork_slice *dest, const struct cork_slice *slice,\n                      size_t offset, size_t length)\n{\n    if ((slice != NULL) &&\n        (offset <= slice->size) &&\n        ((offset + length) <= slice->size)) {\n        /*\n        SP_DEBUG(\"Slicing <%p:%zu> at %zu:%zu, gives <%p:%zu>\",\n              slice->buf, slice->size,\n              offset, length,\n              slice->buf + offset, length);\n        */\n        return slice->iface->light_copy(dest, slice, offset, length);\n    }\n\n    else {\n        /*\n        SP_DEBUG(\"Cannot slice <%p:%zu> at %zu:%zu\",\n              slice->buf, slice->size,\n              offset, length);\n        */\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set\n            ((slice == NULL)? 0: slice->size, offset, length);\n        return -1;\n    }\n}\n\n\nint\ncork_slice_light_copy_offset(struct cork_slice *dest,\n                             const struct cork_slice *slice, size_t offset)\n{\n    if (slice == NULL) {\n        cork_slice_clear(dest);\n        cork_slice_invalid_slice_set(0, offset, 0);\n        return -1;\n    } else {\n        return cork_slice_light_copy\n            (dest, slice, offset, slice->size - offset);\n    }\n}\n\n\nint\ncork_slice_slice(struct cork_slice *slice, size_t offset, size_t length)\n{\n    if ((slice != NULL) &&\n        (offset <= slice->size) &&\n        ((offset + length) <= slice->size)) {\n        /*\n        SP_DEBUG(\"Slicing <%p:%zu> at %zu:%zu, gives <%p:%zu>\",\n              slice->buf, slice->size,\n              offset, length,\n              slice->buf + offset, length);\n        */\n        if (slice->iface->slice == NULL) {\n            slice->buf += offset;\n            slice->size = length;\n            return 0;\n        } else {\n            return slice->iface->slice(slice, offset, length);\n        }\n    }\n\n    else {\n        /*\n        SP_DEBUG(\"Cannot slice <%p:%zu> at %zu:%zu\",\n              slice->buf, slice->size,\n              offset, length);\n        */\n        cork_slice_invalid_slice_set(slice->size, offset, length);\n        return -1;\n    }\n}\n\n\nint\ncork_slice_slice_offset(struct cork_slice *slice, size_t offset)\n{\n    if (slice == NULL) {\n        cork_slice_invalid_slice_set(0, offset, 0);\n        return -1;\n    } else {\n        return cork_slice_slice\n            (slice, offset, slice->size - offset);\n    }\n}\n\n\nvoid\ncork_slice_finish(struct cork_slice *slice)\n{\n    /*\n    SP_DEBUG(\"Finalizing <%p:%zu>\", dest->buf, dest->size);\n    */\n\n    if (slice->iface != NULL && slice->iface->free != NULL) {\n        slice->iface->free(slice);\n    }\n\n    cork_slice_clear(slice);\n}\n\n\nbool\ncork_slice_equal(const struct cork_slice *slice1,\n                 const struct cork_slice *slice2)\n{\n    if (slice1 == slice2) {\n        return true;\n    }\n\n    if (slice1->size != slice2->size) {\n        return false;\n    }\n\n    return (memcmp(slice1->buf, slice2->buf, slice1->size) == 0);\n}\n\n\n/*-----------------------------------------------------------------------\n * Slices of static content\n */\n\nstatic struct cork_slice_iface  cork_static_slice;\n\nstatic int\ncork_static_slice_copy(struct cork_slice *dest, const struct cork_slice *src,\n                       size_t offset, size_t length)\n{\n    dest->buf = src->buf + offset;\n    dest->size = length;\n    dest->iface = &cork_static_slice;\n    dest->user_data = NULL;\n    return 0;\n}\n\nstatic struct cork_slice_iface  cork_static_slice = {\n    NULL,\n    cork_static_slice_copy,\n    cork_static_slice_copy,\n    NULL\n};\n\nvoid\ncork_slice_init_static(struct cork_slice *dest, const void *buf, size_t size)\n{\n    dest->buf = buf;\n    dest->size = size;\n    dest->iface = &cork_static_slice;\n    dest->user_data = NULL;\n}\n\n\n/*-----------------------------------------------------------------------\n * Copy-once slices\n */\n\nstatic struct cork_slice_iface  cork_copy_once_slice;\n\nstatic int\ncork_copy_once_slice__copy(struct cork_slice *dest,\n                           const struct cork_slice *src,\n                           size_t offset, size_t length)\n{\n    struct cork_managed_buffer  *mbuf =\n        cork_managed_buffer_new_copy(src->buf, src->size);\n    rii_check(cork_managed_buffer_slice(dest, mbuf, offset, length));\n    rii_check(cork_managed_buffer_slice\n              ((struct cork_slice *) src, mbuf, 0, src->size));\n    cork_managed_buffer_unref(mbuf);\n    return 0;\n}\n\nstatic int\ncork_copy_once_slice__light_copy(struct cork_slice *dest,\n                                 const struct cork_slice *src,\n                                 size_t offset, size_t length)\n{\n    dest->buf = src->buf + offset;\n    dest->size = length;\n    dest->iface = &cork_copy_once_slice;\n    dest->user_data = NULL;\n    return 0;\n}\n\nstatic struct cork_slice_iface  cork_copy_once_slice = {\n    NULL,\n    cork_copy_once_slice__copy,\n    cork_copy_once_slice__light_copy,\n    NULL\n};\n\nvoid\ncork_slice_init_copy_once(struct cork_slice *dest, const void *buf, size_t size)\n{\n    dest->buf = buf;\n    dest->size = size;\n    dest->iface = &cork_copy_once_slice;\n    dest->user_data = NULL;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/cli/commands.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_COMMANDS_H\n#define LIBCORK_COMMANDS_H\n\n#include <libcork/core/api.h>\n\n\ntypedef void\n(*cork_leaf_command_run)(int argc, char **argv);\n\ntypedef int\n(*cork_option_parser)(int argc, char **argv);\n\nenum cork_command_type {\n    CORK_COMMAND_SET,\n    CORK_LEAF_COMMAND\n};\n\nstruct cork_command {\n    enum cork_command_type  type;\n    const char  *name;\n    const char  *short_desc;\n    const char  *usage_suffix;\n    const char  *full_help;\n\n    int\n    (*parse_options)(int argc, char **argv);\n\n    struct cork_command  **set;\n    cork_leaf_command_run  run;\n};\n\n#define cork_command_set(name, sd, parse_options, set) \\\n{ \\\n    CORK_COMMAND_SET, name, sd, NULL, NULL, \\\n    parse_options, set, NULL \\\n}\n\n#define cork_leaf_command(name, sd, us, fh, parse_options, run) \\\n{ \\\n    CORK_LEAF_COMMAND, name, sd, us, fh, \\\n    parse_options, NULL, run \\\n}\n\nCORK_API void\ncork_command_show_help(struct cork_command *command, const char *message);\n\nCORK_API int\ncork_command_main(struct cork_command *root, int argc, char **argv);\n\n\n#endif /* LIBCORK_COMMANDS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/cli.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CLI_H\n#define LIBCORK_CLI_H\n\n/*** include all of the parts ***/\n\n#include <libcork/cli/commands.h>\n\n#endif /* LIBCORK_CLI_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/arch.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_ARCH_H\n#define LIBCORK_CONFIG_ARCH_H\n\n\n/*-----------------------------------------------------------------------\n * Platform\n */\n\n#if defined(__i386__) || defined(_M_IX86)\n#define CORK_CONFIG_ARCH_X86  1\n#else\n#define CORK_CONFIG_ARCH_X86  0\n#endif\n\n#if defined(__x86_64__) || defined(_M_X64)\n#define CORK_CONFIG_ARCH_X64  1\n#else\n#define CORK_CONFIG_ARCH_X64  0\n#endif\n\n#if defined(__powerpc__) || defined(__ppc__)\n/* GCC-ish compiler */\n#define CORK_CONFIG_ARCH_PPC  1\n#elif defined(_M_PPC)\n/* VS-ish compiler */\n#define CORK_CONFIG_ARCH_PPC  1\n#elif defined(_ARCH_PPC)\n/* Something called XL C/C++? */\n#define CORK_CONFIG_ARCH_PPC  1\n#else\n#define CORK_CONFIG_ARCH_PPC  0\n#endif\n\n\n#endif /* LIBCORK_CONFIG_ARCH_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/bsd.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_BSD_H\n#define LIBCORK_CONFIG_BSD_H\n\n/*-----------------------------------------------------------------------\n * Endianness\n */\n\n#include <sys/endian.h>\n\n#if BYTE_ORDER == BIG_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      1\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   0\n#elif BYTE_ORDER == LITTLE_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      0\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   1\n#else\n#error \"Cannot determine system endianness\"\n#endif\n\n#define CORK_HAVE_REALLOCF  1\n#define CORK_HAVE_PTHREADS  1\n\n\n#endif /* LIBCORK_CONFIG_BSD_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/config.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_CONFIG_H\n#define LIBCORK_CONFIG_CONFIG_H\n\n\n/* If you want to skip autodetection, define this to 1, and provide a\n * libcork/config/custom.h header file. */\n\n#if !defined(CORK_CONFIG_SKIP_AUTODETECT)\n#define CORK_CONFIG_SKIP_AUTODETECT  0\n#endif\n\n\n#if CORK_CONFIG_SKIP_AUTODETECT\n/* The user has promised that they'll define everything themselves. */\n#include <libcork/config/custom.h>\n\n#else\n/* Otherwise autodetect! */\n\n\n/**** ARCHITECTURES ****/\n\n#include <libcork/config/arch.h>\n\n\n/**** PLATFORMS ****/\n#if (defined(__unix__) || defined(unix)) && !defined(USG)\n/* We need this to test for BSD, but it's a good idea to have for\n * any brand of Unix.*/\n#include <sys/param.h>\n#endif\n\n#if defined(__linux) || defined(__CYGWIN__)\n/* Do some Linux-specific autodetection. */\n#include <libcork/config/linux.h>\n\n#elif defined(__APPLE__) && defined(__MACH__)\n/* Do some Mac OS X-specific autodetection. */\n#include <libcork/config/macosx.h>\n\n#elif defined(BSD) && (BSD >= 199103)\n/* Do some BSD (4.3 code base or newer)specific autodetection. */\n#include <libcork/config/bsd.h>\n\n#elif defined(__MINGW32__)\n/* Do some mingw32 autodetection. */\n#include <libcork/config/mingw32.h>\n\n#elif defined(__sun)\n/* Do some Solaris autodetection. */\n#include <libcork/config/solaris.h>\n\n#endif  /* platforms */\n\n\n/**** COMPILERS ****/\n\n#if defined(__GNUC__)\n/* Do some GCC-specific autodetection. */\n#include <libcork/config/gcc.h>\n\n#endif  /* compilers */\n\n\n#endif  /* autodetect or not */\n\n\n#endif /* LIBCORK_CONFIG_CONFIG_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/gcc.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_GCC_H\n#define LIBCORK_CONFIG_GCC_H\n\n/* Figure out the GCC version */\n\n#if defined(__GNUC_PATCHLEVEL__)\n#define CORK_CONFIG_GCC_VERSION (__GNUC__ * 10000 \\\n                               + __GNUC_MINOR__ * 100 \\\n                               + __GNUC_PATCHLEVEL__)\n#else\n#define CORK_CONFIG_GCC_VERSION (__GNUC__ * 10000 \\\n                               + __GNUC_MINOR__ * 100)\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Compiler attributes\n */\n\n/* The GCC assembly syntax has been available basically forever. */\n\n#if defined(CORK_CONFIG_GCC_VERSION)\n#define CORK_CONFIG_HAVE_GCC_ASM  1\n#else\n#define CORK_CONFIG_HAVE_GCC_ASM  0\n#endif\n\n/* The GCC atomic instrinsics are available as of GCC 4.1.0. */\n\n#if CORK_CONFIG_GCC_VERSION >= 40100\n#define CORK_CONFIG_HAVE_GCC_ATOMICS  1\n#else\n#define CORK_CONFIG_HAVE_GCC_ATOMICS  0\n#endif\n\n/* The attributes we want to use are available as of GCC 2.96. */\n\n#if CORK_CONFIG_GCC_VERSION >= 29600\n#define CORK_CONFIG_HAVE_GCC_ATTRIBUTES  1\n#else\n#define CORK_CONFIG_HAVE_GCC_ATTRIBUTES  0\n#endif\n\n/* __int128 seems to be available on 64-bit platforms as of GCC 4.6.  The\n * attribute((mode(TI))) syntax seems to be available as of 4.1. */\n\n#if CORK_CONFIG_ARCH_X64 && CORK_CONFIG_GCC_VERSION >= 40600\n#define CORK_CONFIG_HAVE_GCC_INT128  1\n#else\n#define CORK_CONFIG_HAVE_GCC_INT128  0\n#endif\n\n#if CORK_CONFIG_ARCH_X64 && CORK_CONFIG_GCC_VERSION >= 40100\n#define CORK_CONFIG_HAVE_GCC_MODE_ATTRIBUTE  1\n#else\n#define CORK_CONFIG_HAVE_GCC_MODE_ATTRIBUTE  0\n#endif\n\n/* Statement expressions have been available since GCC 3.1. */\n\n#if CORK_CONFIG_GCC_VERSION >= 30100\n#define CORK_CONFIG_HAVE_GCC_STATEMENT_EXPRS  1\n#else\n#define CORK_CONFIG_HAVE_GCC_STATEMENT_EXPRS  0\n#endif\n\n/* Thread-local storage has been available since GCC 3.3, but not on Mac\n * OS X. Also disable TLS for uClibc*/\n\n#if !(defined(__APPLE__) && defined(__MACH__))\n#if CORK_CONFIG_GCC_VERSION >= 30300 && defined(TLS)\n#define CORK_CONFIG_HAVE_THREAD_STORAGE_CLASS  1\n#else\n#define CORK_CONFIG_HAVE_THREAD_STORAGE_CLASS  0\n#endif\n#else\n#define CORK_CONFIG_HAVE_THREAD_STORAGE_CLASS  0\n#endif\n\n\n#endif /* LIBCORK_CONFIG_GCC_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/linux.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_LINUX_H\n#define LIBCORK_CONFIG_LINUX_H\n\n/*-----------------------------------------------------------------------\n * Endianness\n */\n\n#include <endian.h>\n\n#if __BYTE_ORDER == __BIG_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      1\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   0\n#elif __BYTE_ORDER == __LITTLE_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      0\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   1\n#else\n#error \"Cannot determine system endianness\"\n#endif\n\n#define CORK_HAVE_REALLOCF  0\n#define CORK_HAVE_PTHREADS  1\n\n\n#endif /* LIBCORK_CONFIG_LINUX_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/macosx.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_MACOSX_H\n#define LIBCORK_CONFIG_MACOSX_H\n\n/*-----------------------------------------------------------------------\n * Endianness\n */\n\n#include <machine/endian.h>\n\n#if BYTE_ORDER == BIG_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      1\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   0\n#elif BYTE_ORDER == LITTLE_ENDIAN\n#define CORK_CONFIG_IS_BIG_ENDIAN      0\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   1\n#else\n#error \"Cannot determine system endianness\"\n#endif\n\n#define CORK_HAVE_REALLOCF  1\n#define CORK_HAVE_PTHREADS  1\n\n\n#endif /* LIBCORK_CONFIG_MACOSX_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/mingw32.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_MINGW32_H\n#define LIBCORK_CONFIG_MINGW32_H\n\n#include <io.h>\n\n/*-----------------------------------------------------------------------\n * Endianness\n */\n\n/* Assume MinGW32 only works on x86 platform */ \n\n#define CORK_CONFIG_IS_BIG_ENDIAN      0\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   1\n\n#define CORK_HAVE_REALLOCF  0\n#define CORK_HAVE_PTHREADS  1\n\n/*\n * File io stuff. Odd that this is not defined by MinGW.\n * Maybe there is an M$ish way to do it.\n */\n#define F_SETFL    4\n#define O_NONBLOCK 0x4000  /* non blocking I/O (POSIX style) */\n\n#define F_GETFD 1\n#define F_SETFD 2\n#define FD_CLOEXEC 0x1\n\n#define WNOHANG 1\n\n/*\n * simple adaptors\n */\n\nstatic inline int mingw_mkdir(const char *path, int mode)\n{\n        return mkdir(path);\n}\n#define mkdir mingw_mkdir\n\n\n#endif /* LIBCORK_CONFIG_MINGW32_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config/solaris.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_SOLARIS_H\n#define LIBCORK_CONFIG_SOLARIS_H\n\n/*-----------------------------------------------------------------------\n * Endianness\n */\n\n#include <sys/isa_defs.h>\n\n#if defined(_BIG_ENDIAN)\n#define CORK_CONFIG_IS_BIG_ENDIAN      1\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   0\n#elif defined(_LITTLE_ENDIAN)\n#define CORK_CONFIG_IS_BIG_ENDIAN      0\n#define CORK_CONFIG_IS_LITTLE_ENDIAN   1\n#else\n#error \"Cannot determine system endianness\"\n#endif\n\n#define CORK_HAVE_REALLOCF  0\n#define CORK_HAVE_PTHREADS  1\n\n\n#endif /* LIBCORK_CONFIG_SOLARIS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/config.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CONFIG_H\n#define LIBCORK_CONFIG_H\n\n/*** include all of the parts ***/\n\n#include <libcork/config/config.h>\n\n#endif /* LIBCORK_CONFIG_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/allocator.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_ALLOCATOR_H\n#define LIBCORK_CORE_ALLOCATOR_H\n\n#include <stdlib.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/error.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * Recoverable\n */\n\n#define cork_xmalloc  malloc\n#define cork_xcalloc  calloc\n#define cork_xfree    free\n\n#if CORK_HAVE_REALLOCF\n#define cork_xrealloc  reallocf\n#else\nCORK_API void *\ncork_xrealloc(void *ptr, size_t new_size) CORK_ATTR_MALLOC;\n#endif\n\n/* type-based macros */\n#define cork_xnew(type)  ((type *) cork_xmalloc(sizeof(type)))\n\n/* string-related functions */\n\nCORK_API const char *\ncork_xstrdup(const char *str);\n\nCORK_API const char *\ncork_xstrndup(const char *str, size_t size);\n\nCORK_API void\ncork_strfree(const char *str);\n\n\n/*-----------------------------------------------------------------------\n * Abort on failure\n */\n\nCORK_API void *\ncork_malloc(size_t size) CORK_ATTR_MALLOC;\n\nCORK_API void *\ncork_calloc(size_t count, size_t size) CORK_ATTR_MALLOC;\n\nCORK_API void *\ncork_realloc(void *ptr, size_t new_size) CORK_ATTR_MALLOC;\n\nCORK_API const char *\ncork_strdup(const char *src) CORK_ATTR_MALLOC;\n\nCORK_API const char *\ncork_strndup(const char *src, size_t size) CORK_ATTR_MALLOC;\n\n#define cork_new(type) \\\n    cork_malloc(sizeof(type))\n\n\n#endif /* LIBCORK_CORE_ALLOCATOR_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/api.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_API_H\n#define LIBCORK_CORE_API_H\n\n#include <libcork/core/attributes.h>\n\n/* If you're using libcork as a shared library, you don't need to do anything\n * special; the following will automatically set things up so that libcork's\n * public symbols are imported from the library.  When we build the shared\n * library, we define this ourselves to export the symbols. */\n\n#if !defined(CORK_API)\n#define CORK_API  CORK_IMPORT\n#endif\n\n#endif /* LIBCORK_CORE_API_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/attributes.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_ATTRIBUTES_H\n#define LIBCORK_CORE_ATTRIBUTES_H\n\n#include <libcork/config.h>\n\n\n/*\n * Declare a “const” function.\n *\n * A const function is one whose return value depends only on its\n * parameters.  This is slightly more strict than a “pure” function; a\n * const function is not allowed to read from global variables, whereas\n * a pure function is.\n *\n *   int square(int x) CORK_ATTR_CONST;\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_CONST  __attribute__((const))\n#else\n#define CORK_ATTR_CONST\n#endif\n\n\n/*\n * Declare a “pure” function.\n *\n * A pure function is one whose return value depends only on its\n * parameters, and global variables.\n *\n *   int square(int x) CORK_ATTR_PURE;\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_PURE  __attribute__((pure))\n#else\n#define CORK_ATTR_PURE\n#endif\n\n\n/*\n * Declare that a function returns a newly allocated pointer.\n *\n * The compiler can use this information to generate more accurate\n * aliasing information, since it can infer that the result of the\n * function cannot alias any other existing pointer.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_MALLOC  __attribute__((malloc))\n#else\n#define CORK_ATTR_MALLOC\n#endif\n\n\n/*\n * Declare that a function shouldn't be inlined.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_NOINLINE  __attribute__((noinline))\n#else\n#define CORK_ATTR_NOINLINE\n#endif\n\n\n/*\n * Declare an entity that isn't used.\n *\n * This lets you keep -Wall activated in several cases where you're\n * obligated to define something that you don't intend to use.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_UNUSED  __attribute__((unused))\n#else\n#define CORK_ATTR_UNUSED\n#endif\n\n\n/*\n * Declare a function that takes in printf-like parameters.\n *\n * When the compiler supports this attribute, it will check the format\n * string, and the following arguments, to make sure that they match.\n * format_index and args_index are 1-based.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_PRINTF(format_index, args_index) \\\n    __attribute__((format(printf, format_index, args_index)))\n#else\n#define CORK_ATTR_PRINTF(format_index, args_index)\n#endif\n\n\n/*\n * Declare a var-arg function whose last parameter must be a NULL\n * sentinel value.\n *\n * When the compiler supports this attribute, it will check the actual\n * parameters whenever this function is called, and ensure that the last\n * parameter is a @c NULL.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_ATTR_SENTINEL  __attribute__((sentinel))\n#else\n#define CORK_ATTR_SENTINEL\n#endif\n\n\n/*\n * Declare that a boolean expression is likely to be true or false.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_LIKELY(expr)  __builtin_expect((expr), 1)\n#define CORK_UNLIKELY(expr)  __builtin_expect((expr), 0)\n#else\n#define CORK_LIKELY(expr)  (expr)\n#define CORK_UNLIKELY(expr)  (expr)\n#endif\n\n/*\n * Declare that a function is part of the current library's public API, or that\n * it's internal to the current library.\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_EXPORT  __attribute__((visibility(\"default\")))\n#define CORK_IMPORT  __attribute__((visibility(\"default\")))\n#define CORK_LOCAL   __attribute__((visibility(\"hidden\")))\n#else\n#define CORK_EXPORT\n#define CORK_IMPORT\n#define CORK_LOCAL\n#endif\n\n\n/*\n * Declare a static function that should automatically be called at program\n * startup.\n */\n\n/* TODO: When we implement a full Windows port, [1] describes how best to\n * implement an initialization function under Visual Studio.\n *\n * [1] http://stackoverflow.com/questions/1113409/attribute-constructor-equivalent-in-vc\n */\n\n#if CORK_CONFIG_HAVE_GCC_ATTRIBUTES\n#define CORK_INITIALIZER(name) \\\n__attribute__((constructor)) \\\nstatic void \\\nname(void)\n#else\n#error \"Don't know how to implement initialization functions of this platform\"\n#endif\n\n\n#endif /* LIBCORK_CORE_ATTRIBUTES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/byte-order.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_BYTE_ORDER_H\n#define LIBCORK_CORE_BYTE_ORDER_H\n\n\n#include <libcork/config.h>\n#include <libcork/core/types.h>\n\n\n/* Constants to represent big endianness and little endianness */\n#define CORK_BIG_ENDIAN  4321\n#define CORK_LITTLE_ENDIAN  1234\n\n/* Whether the current host is big- or little-endian.  HOST gives us the\n * current system's endianness; OTHER gives the opposite endianness.\n * The _NAME macros can be used in debugging messages and other\n * human-readable output.\n *\n * Note that we actually detect the endianness in the various header\n * files in the libcork/config directory, since we want to keep\n * everything detection-related separated out from what we define based\n * on that detection. */\n\n#if CORK_CONFIG_IS_BIG_ENDIAN\n#define CORK_HOST_ENDIANNESS  CORK_BIG_ENDIAN\n#define CORK_OTHER_ENDIANNESS  CORK_LITTLE_ENDIAN\n#define CORK_HOST_ENDIANNESS_NAME   \"big\"\n#define CORK_OTHER_ENDIANNESS_NAME  \"little\"\n\n#elif CORK_CONFIG_IS_LITTLE_ENDIAN\n#define CORK_HOST_ENDIANNESS  CORK_LITTLE_ENDIAN\n#define CORK_OTHER_ENDIANNESS  CORK_BIG_ENDIAN\n#define CORK_HOST_ENDIANNESS_NAME   \"little\"\n#define CORK_OTHER_ENDIANNESS_NAME  \"big\"\n\n#else\n#error \"Unknown endianness\"\n#endif\n\n\n/* Returns the byte-swapped version an integer, regardless of the\n * underlying endianness.\n *\n * These macros only require an rvalue as their parameter (which can\n * therefore be any arbitrary expression), and they don't modify the\n * original contents if it happens to be a variable.  */\n\n#define CORK_SWAP_UINT16(__u16) \\\n    (((((uint16_t) __u16) & 0xff00u) >> 8) | \\\n     ((((uint16_t) __u16) & 0x00ffu) << 8))\n\n#define CORK_SWAP_UINT32(__u32) \\\n    (((((uint32_t) __u32) & 0xff000000u) >> 24) | \\\n     ((((uint32_t) __u32) & 0x00ff0000u) >>  8) | \\\n     ((((uint32_t) __u32) & 0x0000ff00u) <<  8) | \\\n     ((((uint32_t) __u32) & 0x000000ffu) << 24))\n\n#define CORK_SWAP_UINT64(__u64) \\\n    (((((uint64_t) __u64) & UINT64_C(0xff00000000000000)) >> 56) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x00ff000000000000)) >> 40) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x0000ff0000000000)) >> 24) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x000000ff00000000)) >>  8) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x00000000ff000000)) <<  8) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x0000000000ff0000)) << 24) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x000000000000ff00)) << 40) | \\\n     ((((uint64_t) __u64) & UINT64_C(0x00000000000000ff)) << 56))\n\n/* Bytes-swaps an integer variable in place.\n *\n * These macros require an lvalue as their parameter; the contents of\n * this variable will be modified by the macro. */\n\n#define CORK_SWAP_IN_PLACE_UINT16(__u16) \\\n    do { \\\n        (__u16) = CORK_SWAP_UINT16(__u16); \\\n    } while (0)\n\n#define CORK_SWAP_IN_PLACE_UINT32(__u32) \\\n    do { \\\n        (__u32) = CORK_SWAP_UINT32(__u32); \\\n    } while (0)\n\n#define CORK_SWAP_IN_PLACE_UINT64(__u64) \\\n    do { \\\n        (__u64) = CORK_SWAP_UINT64(__u64); \\\n    } while (0)\n\n\n/*\n * A slew of swapping macros whose operation depends on the endianness\n * of the current system:\n *\n * uint16_t CORK_UINT16_BIG_TO_HOST(u16)\n * uint32_t CORK_UINT32_BIG_TO_HOST(u32)\n * uint64_t CORK_UINT64_BIG_TO_HOST(u64)\n * uint16_t CORK_UINT16_LITTLE_TO_HOST(u16)\n * uint32_t CORK_UINT32_LITTLE_TO_HOST(u32)\n * uint64_t CORK_UINT64_LITTLE_TO_HOST(u64)\n * void CORK_UINT16_BIG_TO_HOST_IN_PLACE(&u16)\n * void CORK_UINT32_BIG_TO_HOST_IN_PLACE(&u32)\n * void CORK_UINT64_BIG_TO_HOST_IN_PLACE(&u64)\n * void CORK_UINT16_LITTLE_TO_HOST_IN_PLACE(&u16)\n * void CORK_UINT32_LITTLE_TO_HOST_IN_PLACE(&u32)\n * void CORK_UINT64_LITTLE_TO_HOST_IN_PLACE(&u64)\n *\n * uint16_t CORK_UINT16_HOST_TO_BIG(u16)\n * uint32_t CORK_UINT32_HOST_TO_BIG(u32)\n * uint64_t CORK_UINT64_HOST_TO_BIG(u64)\n * uint16_t CORK_UINT16_HOST_TO_LITTLE(u16)\n * uint32_t CORK_UINT32_HOST_TO_LITTLE(u32)\n * uint64_t CORK_UINT64_HOST_TO_LITTLE(u64)\n * void CORK_UINT16_HOST_TO_BIG_IN_PLACE(&u16)\n * void CORK_UINT32_HOST_TO_BIG_IN_PLACE(&u32)\n * void CORK_UINT64_HOST_TO_BIG_IN_PLACE(&u64)\n * void CORK_UINT16_HOST_TO_LITTLE_IN_PLACE(&u16)\n * void CORK_UINT32_HOST_TO_LITTLE_IN_PLACE(&u32)\n * void CORK_UINT64_HOST_TO_LITTLE_IN_PLACE(&u64)\n */\n\n#if CORK_HOST_ENDIANNESS == CORK_BIG_ENDIAN\n\n#define CORK_UINT16_BIG_TO_HOST(__u16) (__u16) /* nothing to do */\n#define CORK_UINT16_LITTLE_TO_HOST(__u16)  CORK_SWAP_UINT16(__u16)\n\n#define CORK_UINT32_BIG_TO_HOST(__u32) (__u32) /* nothing to do */\n#define CORK_UINT32_LITTLE_TO_HOST(__u32)  CORK_SWAP_UINT32(__u32)\n\n#define CORK_UINT64_BIG_TO_HOST(__u64) (__u64) /* nothing to do */\n#define CORK_UINT64_LITTLE_TO_HOST(__u64)  CORK_SWAP_UINT64(__u64)\n\n#define CORK_UINT16_BIG_TO_HOST_IN_PLACE(__u16) /* nothing to do */\n#define CORK_UINT16_LITTLE_TO_HOST_IN_PLACE(__u16)  CORK_SWAP_IN_PLACE_UINT16(__u16)\n\n#define CORK_UINT32_BIG_TO_HOST_IN_PLACE(__u32) /* nothing to do */\n#define CORK_UINT32_LITTLE_TO_HOST_IN_PLACE(__u32)  CORK_SWAP_IN_PLACE_UINT32(__u32)\n\n#define CORK_UINT64_BIG_TO_HOST_IN_PLACE(__u64) /* nothing to do */\n#define CORK_UINT64_LITTLE_TO_HOST_IN_PLACE(__u64)  CORK_SWAP_IN_PLACE_UINT64(__u64)\n\n#elif CORK_HOST_ENDIANNESS == CORK_LITTLE_ENDIAN\n\n#define CORK_UINT16_BIG_TO_HOST(__u16)  CORK_SWAP_UINT16(__u16)\n#define CORK_UINT16_LITTLE_TO_HOST(__u16) (__u16) /* nothing to do */\n\n#define CORK_UINT32_BIG_TO_HOST(__u32)  CORK_SWAP_UINT32(__u32)\n#define CORK_UINT32_LITTLE_TO_HOST(__u32) (__u32) /* nothing to do */\n\n#define CORK_UINT64_BIG_TO_HOST(__u64)  CORK_SWAP_UINT64(__u64)\n#define CORK_UINT64_LITTLE_TO_HOST(__u64) (__u64) /* nothing to do */\n\n#define CORK_UINT16_BIG_TO_HOST_IN_PLACE(__u16)  CORK_SWAP_IN_PLACE_UINT16(__u16)\n#define CORK_UINT16_LITTLE_TO_HOST_IN_PLACE(__u16) /* nothing to do */\n\n#define CORK_UINT32_BIG_TO_HOST_IN_PLACE(__u32)  CORK_SWAP_IN_PLACE_UINT32(__u32)\n#define CORK_UINT32_LITTLE_TO_HOST_IN_PLACE(__u32) /* nothing to do */\n\n#define CORK_UINT64_BIG_TO_HOST_IN_PLACE(__u64)  CORK_SWAP_IN_PLACE_UINT64(__u64)\n#define CORK_UINT64_LITTLE_TO_HOST_IN_PLACE(__u64) /* nothing to do */\n\n#endif\n\n\n#define CORK_UINT16_HOST_TO_BIG(__u16)  CORK_UINT16_BIG_TO_HOST(__u16)\n#define CORK_UINT32_HOST_TO_BIG(__u32)  CORK_UINT32_BIG_TO_HOST(__u32)\n#define CORK_UINT64_HOST_TO_BIG(__u64)  CORK_UINT64_BIG_TO_HOST(__u64)\n#define CORK_UINT16_HOST_TO_LITTLE(__u16)  CORK_UINT16_LITTLE_TO_HOST(__u16)\n#define CORK_UINT32_HOST_TO_LITTLE(__u32)  CORK_UINT32_LITTLE_TO_HOST(__u32)\n#define CORK_UINT64_HOST_TO_LITTLE(__u64)  CORK_UINT64_LITTLE_TO_HOST(__u64)\n#define CORK_UINT16_HOST_TO_BIG_IN_PLACE(__u16)  CORK_UINT16_BIG_TO_HOST_IN_PLACE(__u16)\n#define CORK_UINT32_HOST_TO_BIG_IN_PLACE(__u32)  CORK_UINT32_BIG_TO_HOST_IN_PLACE(__u32)\n#define CORK_UINT64_HOST_TO_BIG_IN_PLACE(__u64)  CORK_UINT64_BIG_TO_HOST_IN_PLACE(__u64)\n#define CORK_UINT16_HOST_TO_LITTLE_IN_PLACE(__u16)  CORK_UINT16_LITTLE_TO_HOST_IN_PLACE(__u16)\n#define CORK_UINT32_HOST_TO_LITTLE_IN_PLACE(__u32)  CORK_UINT32_LITTLE_TO_HOST_IN_PLACE(__u32)\n#define CORK_UINT64_HOST_TO_LITTLE_IN_PLACE(__u64)  CORK_UINT64_LITTLE_TO_HOST_IN_PLACE(__u64)\n\n\n#endif /* LIBCORK_CORE_BYTE_ORDER_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/callbacks.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_CALLBACKS_H\n#define LIBCORK_CORE_CALLBACKS_H\n\n\n#include <libcork/core/hash.h>\n\n\ntypedef int\n(*cork_copy_f)(void *user_data, void *dest, const void *src);\n\ntypedef void\n(*cork_done_f)(void *user_data, void *value);\n\ntypedef void\n(*cork_free_f)(void *value);\n\ntypedef cork_hash\n(*cork_hash_f)(void *user_data, const void *value);\n\ntypedef bool\n(*cork_equals_f)(void *user_data, const void *value1, const void *value2);\n\ntypedef void\n(*cork_init_f)(void *user_data, void *value);\n\n#define cork_free_user_data(parent) \\\n    ((parent)->free_user_data == NULL? (void) 0: \\\n     (parent)->free_user_data((parent)->user_data))\n\ntypedef void *\n(*cork_new_f)(void *user_data);\n\n\n#endif /* LIBCORK_CORE_CALLBACKS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/error.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_ERROR_H\n#define LIBCORK_CORE_ERROR_H\n\n#include <errno.h>\n#include <stdarg.h>\n#include <stdio.h>\n#include <stdlib.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/types.h>\n\n\n/* Should be a hash of a string representing the error code. */\ntypedef uint32_t  cork_error;\n\n/* An error code that represents “no error”. */\n#define CORK_ERROR_NONE  ((cork_error) 0)\n\nCORK_API bool\ncork_error_occurred(void);\n\nCORK_API cork_error\ncork_error_code(void);\n\nCORK_API const char *\ncork_error_message(void);\n\n\nCORK_API void\ncork_error_clear(void);\n\nCORK_API void\ncork_error_set_printf(cork_error code, const char *format, ...)\n    CORK_ATTR_PRINTF(2,3);\n\nCORK_API void\ncork_error_set_string(cork_error code, const char *str);\n\nCORK_API void\ncork_error_set_vprintf(cork_error code, const char *format, va_list args)\n    CORK_ATTR_PRINTF(2,0);\n\nCORK_API void\ncork_error_prefix_printf(const char *format, ...)\n    CORK_ATTR_PRINTF(1,2);\n\nCORK_API void\ncork_error_prefix_string(const char *str);\n\nCORK_API void\ncork_error_prefix_vprintf(const char *format, va_list arg)\n    CORK_ATTR_PRINTF(1,0);\n\n\n/* deprecated */\nCORK_API void\ncork_error_set(uint32_t error_class, unsigned int error_code,\n               const char *format, ...)\n    CORK_ATTR_PRINTF(3,4);\n\n/* deprecated */\nCORK_API void\ncork_error_prefix(const char *format, ...)\n    CORK_ATTR_PRINTF(1,2);\n\n\n/*-----------------------------------------------------------------------\n * Built-in errors\n */\n\n#define CORK_PARSE_ERROR               0x95dfd3c8\n#define CORK_REDEFINED                 0x171629cb\n#define CORK_UNDEFINED                 0xedc3d7d9\n#define CORK_UNKNOWN_ERROR             0x8cb0880d\n\n#define cork_parse_error(...) \\\n    cork_error_set_printf(CORK_PARSE_ERROR, __VA_ARGS__)\n#define cork_redefined(...) \\\n    cork_error_set_printf(CORK_REDEFINED, __VA_ARGS__)\n#define cork_undefined(...) \\\n    cork_error_set_printf(CORK_UNDEFINED, __VA_ARGS__)\n\nCORK_API void\ncork_system_error_set(void);\n\nCORK_API void\ncork_system_error_set_explicit(int err);\n\nCORK_API void\ncork_unknown_error_set_(const char *location);\n\n#define cork_unknown_error() \\\n    cork_unknown_error_set_(__func__)\n\n\n/*-----------------------------------------------------------------------\n * Abort on failure\n */\n\n#define cork_abort_(func, file, line, fmt, ...) \\\n    do { \\\n        fprintf(stderr, fmt \"\\n  in %s (%s:%u)\\n\", \\\n                __VA_ARGS__, (func), (file), (unsigned int) (line)); \\\n        abort(); \\\n    } while (0)\n\n#define cork_abort(fmt, ...) \\\n    cork_abort_(__func__, __FILE__, __LINE__, fmt, __VA_ARGS__)\n\nCORK_ATTR_UNUSED\nstatic void *\ncork_abort_if_null_(void *ptr, const char *msg, const char *func,\n                    const char *file, unsigned int line)\n{\n    if (CORK_UNLIKELY(ptr == NULL)) {\n        cork_abort_(func, file, line, \"%s\", msg);\n    } else {\n        return ptr;\n    }\n}\n\n#define cork_abort_if_null(ptr, msg) \\\n    (cork_abort_if_null_(ptr, msg, __func__, __FILE__, __LINE__))\n\n#define cork_unreachable() \\\n    cork_abort(\"%s\", \"Code should not be reachable\")\n\n\n#endif /* LIBCORK_CORE_ERROR_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/gc.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_GC_REFCOUNT_H\n#define LIBCORK_GC_REFCOUNT_H\n\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\nstruct cork_gc;\n\n/* A callback for recursing through the children of a garbage-collected\n * object. */\ntypedef void\n(*cork_gc_recurser)(struct cork_gc *gc, void *obj, void *ud);\n\ntypedef void\n(*cork_gc_free_func)(void *obj);\n\ntypedef void\n(*cork_gc_recurse_func)(struct cork_gc *gc, void *self,\n                        cork_gc_recurser recurser, void *ud);\n\n/* An interface that each garbage-collected object must implement. */\nstruct cork_gc_obj_iface {\n    /* Perform additional cleanup; does *NOT* need to deallocate the\n     * object itself, or release any child references */\n    cork_gc_free_func  free;\n    cork_gc_recurse_func  recurse;\n};\n\n\nCORK_API void\ncork_gc_init(void);\n\nCORK_API void\ncork_gc_done(void);\n\n\nCORK_API void *\ncork_gc_alloc(size_t instance_size, struct cork_gc_obj_iface *iface);\n\n#define cork_gc_new_iface(obj_type, iface) \\\n    ((obj_type *) \\\n     (cork_gc_alloc(sizeof(obj_type), (iface))))\n\n#define cork_gc_new(struct_name) \\\n    (cork_gc_new_iface(struct struct_name, &struct_name##__gc))\n\n\nCORK_API void *\ncork_gc_incref(void *obj);\n\nCORK_API void\ncork_gc_decref(void *obj);\n\n\n#endif /* LIBCORK_GC_REFCOUNT_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/hash.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_HASH_H\n#define LIBCORK_CORE_HASH_H\n\n\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/byte-order.h>\n#include <libcork/core/types.h>\n#include <libcork/core/u128.h>\n\n\n#ifndef CORK_HASH_ATTRIBUTES\n#define CORK_HASH_ATTRIBUTES  CORK_ATTR_UNUSED static inline\n#endif\n\n\ntypedef uint32_t  cork_hash;\n\ntypedef struct {\n    cork_u128  u128;\n} cork_big_hash;\n\n#define cork_big_hash_equal(h1, h2)  (cork_u128_eq((h1).u128, (h2).u128))\n\n#define CORK_BIG_HASH_INIT()  {{{{0}}}}\n\n/* We currently use MurmurHash3 [1], which is public domain, as our hash\n * implementation.\n *\n * [1] http://code.google.com/p/smhasher/\n */\n\n#define CORK_ROTL32(a,b) (((a) << ((b) & 0x1f)) | ((a) >> (32 - ((b) & 0x1f))))\n#define CORK_ROTL64(a,b) (((a) << ((b) & 0x3f)) | ((a) >> (64 - ((b) & 0x3f))))\n\nCORK_ATTR_UNUSED\nstatic inline\nuint32_t cork_fmix32(uint32_t h)\n{\n    h ^= h >> 16;\n    h *= 0x85ebca6b;\n    h ^= h >> 13;\n    h *= 0xc2b2ae35;\n    h ^= h >> 16;\n    return h;\n}\n\nCORK_ATTR_UNUSED\nstatic inline\nuint64_t cork_fmix64(uint64_t k)\n{\n    k ^= k >> 33;\n    k *= UINT64_C(0xff51afd7ed558ccd);\n    k ^= k >> 33;\n    k *= UINT64_C(0xc4ceb9fe1a85ec53);\n    k ^= k >> 33;\n    return k;\n}\n\nCORK_HASH_ATTRIBUTES\ncork_hash\ncork_stable_hash_buffer(cork_hash seed, const void *src, size_t len)\n{\n    typedef uint32_t __attribute__((__may_alias__))  cork_aliased_uint32_t;\n\n    /* This is exactly the same as cork_murmur_hash_x86_32, but with a byte swap\n     * to make sure that we always process the uint32s little-endian. */\n    const unsigned int  nblocks = len / 4;\n    const cork_aliased_uint32_t  *blocks = (const cork_aliased_uint32_t *) src;\n    const cork_aliased_uint32_t  *end = blocks + nblocks;\n    const cork_aliased_uint32_t  *curr;\n    const uint8_t  *tail = (const uint8_t *) end;\n\n    uint32_t  h1 = seed;\n    uint32_t  c1 = 0xcc9e2d51;\n    uint32_t  c2 = 0x1b873593;\n    uint32_t  k1 = 0;\n\n    /* body */\n    for (curr = blocks; curr != end; curr++) {\n        uint32_t  k1 = CORK_UINT32_HOST_TO_LITTLE(*curr);\n\n        k1 *= c1;\n        k1 = CORK_ROTL32(k1,15);\n        k1 *= c2;\n\n        h1 ^= k1;\n        h1 = CORK_ROTL32(h1,13);\n        h1 = h1*5+0xe6546b64;\n    }\n\n    /* tail */\n    switch (len & 3) {\n        case 3: k1 ^= tail[2] << 16;\n        case 2: k1 ^= tail[1] << 8;\n        case 1: k1 ^= tail[0];\n                k1 *= c1; k1 = CORK_ROTL32(k1,15); k1 *= c2; h1 ^= k1;\n    };\n\n    /* finalization */\n    h1 ^= len;\n    h1 = cork_fmix32(h1);\n    return h1;\n}\n\n#define cork_murmur_hash_x86_32(seed, src, len, dest) \\\ndo { \\\n    typedef uint32_t __attribute__((__may_alias__))  cork_aliased_uint32_t; \\\n    \\\n    const unsigned int  nblocks = len / 4; \\\n    const cork_aliased_uint32_t  *blocks = (const cork_aliased_uint32_t *) src; \\\n    const cork_aliased_uint32_t  *end = blocks + nblocks; \\\n    const cork_aliased_uint32_t  *curr; \\\n    const uint8_t  *tail = (const uint8_t *) end; \\\n    \\\n    uint32_t  h1 = seed; \\\n    uint32_t  c1 = 0xcc9e2d51; \\\n    uint32_t  c2 = 0x1b873593; \\\n    uint32_t  k1 = 0; \\\n    \\\n    /* body */ \\\n    for (curr = blocks; curr != end; curr++) { \\\n        uint32_t  k1 = *curr; \\\n        \\\n        k1 *= c1; \\\n        k1 = CORK_ROTL32(k1,15); \\\n        k1 *= c2; \\\n        \\\n        h1 ^= k1; \\\n        h1 = CORK_ROTL32(h1,13); \\\n        h1 = h1*5+0xe6546b64; \\\n    } \\\n    \\\n    /* tail */ \\\n    switch (len & 3) { \\\n        case 3: k1 ^= tail[2] << 16; \\\n        case 2: k1 ^= tail[1] << 8; \\\n        case 1: k1 ^= tail[0]; \\\n                k1 *= c1; k1 = CORK_ROTL32(k1,15); k1 *= c2; h1 ^= k1; \\\n    }; \\\n    \\\n    /* finalization */ \\\n    h1 ^= len; \\\n    h1 = cork_fmix32(h1); \\\n    *(dest) = h1; \\\n} while (0)\n\n#define cork_murmur_hash_x86_128(seed, src, len, dest) \\\ndo { \\\n    typedef uint32_t __attribute__((__may_alias__))  cork_aliased_uint32_t; \\\n    \\\n    const unsigned int  nblocks = len / 16; \\\n    const cork_aliased_uint32_t  *blocks = (const cork_aliased_uint32_t *) src; \\\n    const cork_aliased_uint32_t  *end = blocks + (nblocks * 4); \\\n    const cork_aliased_uint32_t  *curr; \\\n    const uint8_t  *tail = (const uint8_t *) end; \\\n    \\\n    uint32_t  h1 = cork_u128_be32(seed.u128, 0); \\\n    uint32_t  h2 = cork_u128_be32(seed.u128, 1); \\\n    uint32_t  h3 = cork_u128_be32(seed.u128, 2); \\\n    uint32_t  h4 = cork_u128_be32(seed.u128, 3); \\\n    \\\n    uint32_t  c1 = 0x239b961b; \\\n    uint32_t  c2 = 0xab0e9789; \\\n    uint32_t  c3 = 0x38b34ae5; \\\n    uint32_t  c4 = 0xa1e38b93; \\\n    \\\n    uint32_t  k1 = 0; \\\n    uint32_t  k2 = 0; \\\n    uint32_t  k3 = 0; \\\n    uint32_t  k4 = 0; \\\n    \\\n    /* body */ \\\n    for (curr = blocks; curr != end; curr += 4) { \\\n        uint32_t  k1 = curr[0]; \\\n        uint32_t  k2 = curr[1]; \\\n        uint32_t  k3 = curr[2]; \\\n        uint32_t  k4 = curr[3]; \\\n        \\\n        k1 *= c1; k1  = CORK_ROTL32(k1,15); k1 *= c2; h1 ^= k1; \\\n        h1 = CORK_ROTL32(h1,19); h1 += h2; h1 = h1*5+0x561ccd1b; \\\n        \\\n        k2 *= c2; k2  = CORK_ROTL32(k2,16); k2 *= c3; h2 ^= k2; \\\n        h2 = CORK_ROTL32(h2,17); h2 += h3; h2 = h2*5+0x0bcaa747; \\\n        \\\n        k3 *= c3; k3  = CORK_ROTL32(k3,17); k3 *= c4; h3 ^= k3; \\\n        h3 = CORK_ROTL32(h3,15); h3 += h4; h3 = h3*5+0x96cd1c35; \\\n        \\\n        k4 *= c4; k4  = CORK_ROTL32(k4,18); k4 *= c1; h4 ^= k4; \\\n        h4 = CORK_ROTL32(h4,13); h4 += h1; h4 = h4*5+0x32ac3b17; \\\n    } \\\n    \\\n    /* tail */ \\\n    switch (len & 15) { \\\n        case 15: k4 ^= tail[14] << 16; \\\n        case 14: k4 ^= tail[13] << 8; \\\n        case 13: k4 ^= tail[12] << 0; \\\n                 k4 *= c4; k4 = CORK_ROTL32(k4,18); k4 *= c1; h4 ^= k4; \\\n        \\\n        case 12: k3 ^= tail[11] << 24; \\\n        case 11: k3 ^= tail[10] << 16; \\\n        case 10: k3 ^= tail[ 9] << 8; \\\n        case  9: k3 ^= tail[ 8] << 0; \\\n                 k3 *= c3; k3 = CORK_ROTL32(k3,17); k3 *= c4; h3 ^= k3; \\\n        \\\n        case  8: k2 ^= tail[ 7] << 24; \\\n        case  7: k2 ^= tail[ 6] << 16; \\\n        case  6: k2 ^= tail[ 5] << 8; \\\n        case  5: k2 ^= tail[ 4] << 0; \\\n                 k2 *= c2; k2 = CORK_ROTL32(k2,16); k2 *= c3; h2 ^= k2; \\\n        \\\n        case  4: k1 ^= tail[ 3] << 24; \\\n        case  3: k1 ^= tail[ 2] << 16; \\\n        case  2: k1 ^= tail[ 1] << 8; \\\n        case  1: k1 ^= tail[ 0] << 0; \\\n                 k1 *= c1; k1 = CORK_ROTL32(k1,15); k1 *= c2; h1 ^= k1; \\\n    }; \\\n    \\\n    /* finalization */ \\\n    \\\n    h1 ^= len; h2 ^= len; h3 ^= len; h4 ^= len; \\\n    \\\n    h1 += h2; h1 += h3; h1 += h4; \\\n    h2 += h1; h3 += h1; h4 += h1; \\\n    \\\n    h1 = cork_fmix32(h1); \\\n    h2 = cork_fmix32(h2); \\\n    h3 = cork_fmix32(h3); \\\n    h4 = cork_fmix32(h4); \\\n    \\\n    h1 += h2; h1 += h3; h1 += h4; \\\n    h2 += h1; h3 += h1; h4 += h1; \\\n    \\\n    (dest)->u128 = cork_u128_from_32(h1, h2, h3, h4); \\\n} while (0)\n\n#define cork_murmur_hash_x64_128(seed, src, len, dest) \\\ndo { \\\n    typedef uint64_t __attribute__((__may_alias__))  cork_aliased_uint64_t; \\\n    \\\n    const unsigned int  nblocks = len / 16; \\\n    const cork_aliased_uint64_t  *blocks = (const cork_aliased_uint64_t *) src; \\\n    const cork_aliased_uint64_t  *end = blocks + (nblocks * 2); \\\n    const cork_aliased_uint64_t  *curr; \\\n    const uint8_t  *tail = (const uint8_t *) end; \\\n    \\\n    uint64_t  h1 = cork_u128_be64(seed.u128, 0); \\\n    uint64_t  h2 = cork_u128_be64(seed.u128, 1); \\\n    \\\n    uint64_t  c1 = UINT64_C(0x87c37b91114253d5); \\\n    uint64_t  c2 = UINT64_C(0x4cf5ad432745937f); \\\n    \\\n    uint64_t k1 = 0; \\\n    uint64_t k2 = 0; \\\n    \\\n    /* body */ \\\n    for (curr = blocks; curr != end; curr += 2) { \\\n        uint64_t  k1 = curr[0]; \\\n        uint64_t  k2 = curr[1]; \\\n    \\\n        k1 *= c1; k1  = CORK_ROTL64(k1,31); k1 *= c2; h1 ^= k1; \\\n        h1 = CORK_ROTL64(h1,27); h1 += h2; h1 = h1*5+0x52dce729; \\\n    \\\n        k2 *= c2; k2  = CORK_ROTL64(k2,33); k2 *= c1; h2 ^= k2; \\\n        h2 = CORK_ROTL64(h2,31); h2 += h1; h2 = h2*5+0x38495ab5; \\\n    } \\\n    \\\n    /* tail */ \\\n    switch (len & 15) { \\\n        case 15: k2 ^= (uint64_t) (tail[14]) << 48; \\\n        case 14: k2 ^= (uint64_t) (tail[13]) << 40; \\\n        case 13: k2 ^= (uint64_t) (tail[12]) << 32; \\\n        case 12: k2 ^= (uint64_t) (tail[11]) << 24; \\\n        case 11: k2 ^= (uint64_t) (tail[10]) << 16; \\\n        case 10: k2 ^= (uint64_t) (tail[ 9]) << 8; \\\n        case  9: k2 ^= (uint64_t) (tail[ 8]) << 0; \\\n                 k2 *= c2; k2 = CORK_ROTL64(k2,33); k2 *= c1; h2 ^= k2; \\\n        \\\n        case  8: k1 ^= (uint64_t) (tail[ 7]) << 56; \\\n        case  7: k1 ^= (uint64_t) (tail[ 6]) << 48; \\\n        case  6: k1 ^= (uint64_t) (tail[ 5]) << 40; \\\n        case  5: k1 ^= (uint64_t) (tail[ 4]) << 32; \\\n        case  4: k1 ^= (uint64_t) (tail[ 3]) << 24; \\\n        case  3: k1 ^= (uint64_t) (tail[ 2]) << 16; \\\n        case  2: k1 ^= (uint64_t) (tail[ 1]) << 8; \\\n        case  1: k1 ^= (uint64_t) (tail[ 0]) << 0; \\\n                 k1 *= c1; k1 = CORK_ROTL64(k1,31); k1 *= c2; h1 ^= k1; \\\n    }; \\\n    \\\n    /* finalization */ \\\n    \\\n    h1 ^= len; h2 ^= len; \\\n    \\\n    h1 += h2; \\\n    h2 += h1; \\\n    \\\n    h1 = cork_fmix64(h1); \\\n    h2 = cork_fmix64(h2); \\\n    \\\n    h1 += h2; \\\n    h2 += h1; \\\n    \\\n    (dest)->u128 = cork_u128_from_64(h1, h2); \\\n} while (0)\n\n\n#include <stdio.h>\nCORK_HASH_ATTRIBUTES\ncork_hash\ncork_hash_buffer(cork_hash seed, const void *src, size_t len)\n{\n#if CORK_SIZEOF_POINTER == 8\n    cork_big_hash  big_seed = {cork_u128_from_32(seed, seed, seed, seed)};\n    cork_big_hash  hash;\n    cork_murmur_hash_x64_128(big_seed, src, len, &hash);\n    return cork_u128_be32(hash.u128, 0);\n#else\n    cork_hash  hash = 0;\n    cork_murmur_hash_x86_32(seed, src, len, &hash);\n    return hash;\n#endif\n}\n\n\nCORK_HASH_ATTRIBUTES\ncork_big_hash\ncork_big_hash_buffer(cork_big_hash seed, const void *src, size_t len)\n{\n    cork_big_hash  result;\n#if CORK_SIZEOF_POINTER == 8\n    cork_murmur_hash_x64_128(seed, src, len, &result);\n#else\n    cork_murmur_hash_x86_128(seed, src, len, &result);\n#endif\n    return result;\n}\n\n\n#define cork_hash_variable(seed, val) \\\n    (cork_hash_buffer((seed), &(val), sizeof((val))))\n#define cork_stable_hash_variable(seed, val) \\\n    (cork_stable_hash_buffer((seed), &(val), sizeof((val))))\n#define cork_big_hash_variable(seed, val) \\\n    (cork_big_hash_buffer((seed), &(val), sizeof((val))))\n\n\n#endif /* LIBCORK_CORE_HASH_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/id.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_ID_H\n#define LIBCORK_CORE_ID_H\n\n#include <libcork/core/hash.h>\n\n\nstruct cork_uid {\n    const char  *name;\n};\n\ntypedef const struct cork_uid  *cork_uid;\n\n#define CORK_UID_NONE  ((cork_uid) NULL)\n\n#define cork_uid_define_named(c_name, name) \\\n    static const struct cork_uid  c_name##__id = { name }; \\\n    static cork_uid  c_name = &c_name##__id;\n#define cork_uid_define(c_name) \\\n    cork_uid_define_named(c_name, #c_name)\n\n#define cork_uid_equal(id1, id2)  ((id1) == (id2))\n#define cork_uid_hash(id)         ((cork_hash) (uintptr_t) (id))\n#define cork_uid_name(id)         ((id)->name)\n\n\n#endif /* LIBCORK_CORE_ID_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/mempool.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORK_MEMPOOL_H\n#define LIBCORK_CORK_MEMPOOL_H\n\n\n#include <libcork/config.h>\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/callbacks.h>\n#include <libcork/core/types.h>\n\n\n#define CORK_MEMPOOL_DEFAULT_BLOCK_SIZE  4096\n\n\nstruct cork_mempool;\n\n\nCORK_API struct cork_mempool *\ncork_mempool_new_size_ex(size_t element_size, size_t block_size);\n\n#define cork_mempool_new_size(element_size) \\\n    (cork_mempool_new_size_ex \\\n     ((element_size), CORK_MEMPOOL_DEFAULT_BLOCK_SIZE))\n\n#define cork_mempool_new_ex(type, block_size) \\\n    (cork_mempool_new_size_ex(sizeof(type), (block_size)))\n\n#define cork_mempool_new(type) \\\n    (cork_mempool_new_size(sizeof(type)))\n\nCORK_API void\ncork_mempool_free(struct cork_mempool *mp);\n\n\nCORK_API void\ncork_mempool_set_callbacks(struct cork_mempool *mp,\n                           void *user_data, cork_free_f free_user_data,\n                           cork_init_f init_object,\n                           cork_done_f done_object);\n\n\nCORK_API void *\ncork_mempool_new_object(struct cork_mempool *mp);\n\n\nCORK_API void\ncork_mempool_free_object(struct cork_mempool *mp, void *ptr);\n\n\n#endif /* LIBCORK_CORK_MEMPOOL_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/net-addresses.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_NET_ADDRESSES_H\n#define LIBCORK_CORE_NET_ADDRESSES_H\n\n\n#include <string.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/error.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * IP addresses\n */\n\nstruct cork_ipv4 {\n    union {\n        uint8_t  u8[4];\n        uint16_t  u16[2];\n        uint32_t  u32;\n    } _;\n};\n\nstruct cork_ipv6 {\n    union {\n        uint8_t  u8[16];\n        uint16_t  u16[8];\n        uint32_t  u32[4];\n        uint64_t  u64[2];\n    } _;\n};\n\nstruct cork_ip {\n    /* Which version of IP address this is. */\n    unsigned int  version;\n    union {\n        struct cork_ipv4  v4;\n        struct cork_ipv6  v6;\n    } ip;\n};\n\n\n#define CORK_IPV4_STRING_LENGTH  (sizeof \"xxx.xxx.xxx.xxx\")\n#define CORK_IPV6_STRING_LENGTH \\\n    (sizeof \"ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255\")\n#define CORK_IP_STRING_LENGTH  CORK_IPV6_STRING_LENGTH\n\n\n/*** IPv4 ***/\n\n/* src must be well-formed: 4 bytes, big-endian */\n#define cork_ipv4_copy(addr, src) \\\n    (memcpy((addr), (src), sizeof(struct cork_ipv4)))\n\n#define cork_ipv4_equal(a1, a2) \\\n    ((a1)->_.u32 == (a2)->_.u32)\n\nCORK_API int\ncork_ipv4_init(struct cork_ipv4 *addr, const char *str);\n\nCORK_API bool\ncork_ipv4_equal_(const struct cork_ipv4 *addr1, const struct cork_ipv4 *addr2);\n\nCORK_API void\ncork_ipv4_to_raw_string(const struct cork_ipv4 *addr, char *dest);\n\nCORK_API bool\ncork_ipv4_is_valid_network(const struct cork_ipv4 *addr,\n                           unsigned int cidr_prefix);\n\n\n/*** IPv6 ***/\n\n/* src must be well-formed: 16 bytes, big-endian */\n#define cork_ipv6_copy(addr, src) \\\n    (memcpy((addr), (src), sizeof(struct cork_ipv6)))\n\n#define cork_ipv6_equal(a1, a2) \\\n    ((a1)->_.u64[0] == (a2)->_.u64[0] && \\\n     (a1)->_.u64[1] == (a2)->_.u64[1])\n\nCORK_API int\ncork_ipv6_init(struct cork_ipv6 *addr, const char *str);\n\nCORK_API bool\ncork_ipv6_equal_(const struct cork_ipv6 *addr1, const struct cork_ipv6 *addr2);\n\nCORK_API void\ncork_ipv6_to_raw_string(const struct cork_ipv6 *addr, char *dest);\n\nCORK_API bool\ncork_ipv6_is_valid_network(const struct cork_ipv6 *addr,\n                           unsigned int cidr_prefix);\n\n\n/*** Generic IP ***/\n\n#define cork_ip_equal(a1, a2) \\\n    ((a1)->version == 4? \\\n     ((a2)->version == 4 && cork_ipv4_equal(&(a1)->ip.v4, &(a2)->ip.v4)): \\\n     ((a2)->version == 6 && cork_ipv6_equal(&(a1)->ip.v6, &(a2)->ip.v6)))\n\n/* src must be well-formed: 4 bytes, big-endian */\n#define cork_ip_from_ipv4(addr, src) \\\n    do { \\\n        (addr)->version = 4; \\\n        cork_ipv4_copy(&(addr)->ip.v4, (src)); \\\n    } while (0)\n\n/* src must be well-formed: 16 bytes, big-endian */\n#define cork_ip_from_ipv6(addr, src) \\\n    do { \\\n        (addr)->version = 6; \\\n        cork_ipv6_copy(&(addr)->ip.v6, (src)); \\\n    } while (0)\n\n/* src must be well-formed: 4 bytes, big-endian */\nCORK_API void\ncork_ip_from_ipv4_(struct cork_ip *addr, const void *src);\n\n/* src must be well-formed: 16 bytes, big-endian */\nCORK_API void\ncork_ip_from_ipv6_(struct cork_ip *addr, const void *src);\n\nCORK_API int\ncork_ip_init(struct cork_ip *addr, const char *str);\n\nCORK_API bool\ncork_ip_equal_(const struct cork_ip *addr1, const struct cork_ip *addr2);\n\nCORK_API void\ncork_ip_to_raw_string(const struct cork_ip *addr, char *dest);\n\nCORK_API bool\ncork_ip_is_valid_network(const struct cork_ip *addr, unsigned int cidr_prefix);\n\n\n#endif /* LIBCORK_CORE_NET_ADDRESSES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/timestamp.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_TIMESTAMP_H\n#define LIBCORK_CORE_TIMESTAMP_H\n\n\n#include <libcork/core/api.h>\n#include <libcork/core/error.h>\n#include <libcork/core/types.h>\n#include <libcork/ds/buffer.h>\n\n\ntypedef uint64_t  cork_timestamp;\n\n\n#define cork_timestamp_init_sec(ts, sec) \\\n    do { \\\n        *(ts) = (((uint64_t) (sec)) << 32); \\\n    } while (0)\n\n#define cork_timestamp_init_gsec(ts, sec, gsec) \\\n    do { \\\n        *(ts) = (((uint64_t) (sec)) << 32) | \\\n                (((uint64_t) (gsec)) & 0xffffffff); \\\n    } while (0)\n\n#define cork_timestamp_init_msec(ts, sec, msec) \\\n    do { \\\n        *(ts) = (((uint64_t) (sec)) << 32) | \\\n                ((((uint64_t) (msec)) << 32) / 1000); \\\n    } while (0)\n\n#define cork_timestamp_init_usec(ts, sec, usec) \\\n    do { \\\n        *(ts) = (((uint64_t) (sec)) << 32) | \\\n                ((((uint64_t) (usec)) << 32) / 1000000); \\\n    } while (0)\n\n#define cork_timestamp_init_nsec(ts, sec, nsec) \\\n    do { \\\n        *(ts) = (((uint64_t) (sec)) << 32) | \\\n                ((((uint64_t) (nsec)) << 32) / 1000000000); \\\n    } while (0)\n\n\nCORK_API void\ncork_timestamp_init_now(cork_timestamp *ts);\n\n\n#define cork_timestamp_sec(ts)  ((uint32_t) ((ts) >> 32))\n#define cork_timestamp_gsec(ts)  ((uint32_t) ((ts) & 0xffffffff))\n\nCORK_ATTR_UNUSED\nstatic inline uint64_t\ncork_timestamp_gsec_to_units(const cork_timestamp ts, uint64_t denom)\n{\n    uint64_t  half = ((uint64_t) 1 << 31) / denom;\n    uint64_t  gsec = cork_timestamp_gsec(ts);\n    gsec += half;\n    gsec *= denom;\n    gsec >>= 32;\n    return gsec;\n}\n\n#define cork_timestamp_msec(ts)  cork_timestamp_gsec_to_units(ts, 1000)\n#define cork_timestamp_usec(ts)  cork_timestamp_gsec_to_units(ts, 1000000)\n#define cork_timestamp_nsec(ts)  cork_timestamp_gsec_to_units(ts, 1000000000)\n\n\nCORK_API int\ncork_timestamp_format_utc(const cork_timestamp ts, const char *format,\n                          struct cork_buffer *dest);\n\nCORK_API int\ncork_timestamp_format_local(const cork_timestamp ts, const char *format,\n                            struct cork_buffer *dest);\n\n\n#endif /* LIBCORK_CORE_TIMESTAMP_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/types.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_TYPES_H\n#define LIBCORK_CORE_TYPES_H\n\n/* For now, we assume that the C99 integer types are available using the\n * standard headers. */\n\n#include <limits.h>\n#include <inttypes.h>\n#include <stdbool.h>\n#include <stddef.h>\n#include <stdint.h>\n\n\n/* Define preprocessor macros that contain the size of several built-in\n * types.  Again, we assume that we have the C99 definitions available. */\n\n#if SHRT_MAX == INT8_MAX\n#define CORK_SIZEOF_SHORT  1\n#elif SHRT_MAX == INT16_MAX\n#define CORK_SIZEOF_SHORT  2\n#elif SHRT_MAX == INT32_MAX\n#define CORK_SIZEOF_SHORT  4\n#elif SHRT_MAX == INT64_MAX\n#define CORK_SIZEOF_SHORT  8\n#else\n#error \"Cannot determine size of short\"\n#endif\n\n#if INT_MAX == INT8_MAX\n#define CORK_SIZEOF_INT  1\n#elif INT_MAX == INT16_MAX\n#define CORK_SIZEOF_INT  2\n#elif INT_MAX == INT32_MAX\n#define CORK_SIZEOF_INT  4\n#elif INT_MAX == INT64_MAX\n#define CORK_SIZEOF_INT  8\n#else\n#error \"Cannot determine size of int\"\n#endif\n\n#if LONG_MAX == INT8_MAX\n#define CORK_SIZEOF_LONG  1\n#elif LONG_MAX == INT16_MAX\n#define CORK_SIZEOF_LONG  2\n#elif LONG_MAX == INT32_MAX\n#define CORK_SIZEOF_LONG  4\n#elif LONG_MAX == INT64_MAX\n#define CORK_SIZEOF_LONG  8\n#else\n#error \"Cannot determine size of long\"\n#endif\n\n#if INTPTR_MAX == INT8_MAX\n#define CORK_SIZEOF_POINTER  1\n#elif INTPTR_MAX == INT16_MAX\n#define CORK_SIZEOF_POINTER  2\n#elif INTPTR_MAX == INT32_MAX\n#define CORK_SIZEOF_POINTER  4\n#elif INTPTR_MAX == INT64_MAX\n#define CORK_SIZEOF_POINTER  8\n#else\n#error \"Cannot determine size of void *\"\n#endif\n\n\n/* Return a pointer to a @c struct, given a pointer to one of its\n * fields. */\n#define cork_container_of(field, struct_type, field_name) \\\n    ((struct_type *) (- offsetof(struct_type, field_name) + \\\n                      (void *) (field)))\n\n#endif /* LIBCORK_CORE_TYPES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core/u128.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_U128_H\n#define LIBCORK_CORE_U128_H\n\n\n#include <libcork/config.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/byte-order.h>\n#include <libcork/core/types.h>\n#include <libcork/core/api.h>\n\ntypedef struct {\n    union {\n        uint8_t  u8[16];\n        uint16_t  u16[8];\n        uint32_t  u32[4];\n        uint64_t  u64[2];\n#if CORK_HOST_ENDIANNESS == CORK_BIG_ENDIAN\n        struct { uint64_t hi; uint64_t lo; } be64;\n#else\n        struct { uint64_t lo; uint64_t hi; } be64;\n#endif\n#if CORK_CONFIG_HAVE_GCC_INT128\n#define CORK_U128_HAVE_U128  1\n        unsigned __int128  u128;\n#elif CORK_CONFIG_HAVE_GCC_MODE_ATTRIBUTE\n#define CORK_U128_HAVE_U128  1\n        unsigned int  u128 __attribute__((mode(TI)));\n#else\n#define CORK_U128_HAVE_U128  0\n#endif\n    } _;\n} cork_u128;\n\n\n/* i0-3 are given in big-endian order, regardless of host endianness */\nCORK_ATTR_UNUSED\nstatic cork_u128\ncork_u128_from_32(uint32_t i0, uint32_t i1, uint32_t i2, uint32_t i3)\n{\n    cork_u128  value;\n#if CORK_HOST_ENDIANNESS == CORK_BIG_ENDIAN\n    value._.u32[0] = i0;\n    value._.u32[1] = i1;\n    value._.u32[2] = i2;\n    value._.u32[3] = i3;\n#else\n    value._.u32[3] = i0;\n    value._.u32[2] = i1;\n    value._.u32[1] = i2;\n    value._.u32[0] = i3;\n#endif\n    return value;\n}\n\n/* i0-1 are given in big-endian order, regardless of host endianness */\nCORK_ATTR_UNUSED\nstatic cork_u128\ncork_u128_from_64(uint64_t i0, uint64_t i1)\n{\n    cork_u128  value;\n#if CORK_HOST_ENDIANNESS == CORK_BIG_ENDIAN\n    value._.u64[0] = i0;\n    value._.u64[1] = i1;\n#else\n    value._.u64[1] = i0;\n    value._.u64[0] = i1;\n#endif\n    return value;\n}\n\n\n#if CORK_HOST_ENDIANNESS == CORK_BIG_ENDIAN\n#define cork_u128_be8(val, idx)   ((val)._.u8[(idx)])\n#define cork_u128_be16(val, idx)  ((val)._.u16[(idx)])\n#define cork_u128_be32(val, idx)  ((val)._.u32[(idx)])\n#define cork_u128_be64(val, idx)  ((val)._.u64[(idx)])\n#else\n#define cork_u128_be8(val, idx)   ((val)._.u8[15 - (idx)])\n#define cork_u128_be16(val, idx)  ((val)._.u16[7 - (idx)])\n#define cork_u128_be32(val, idx)  ((val)._.u32[3 - (idx)])\n#define cork_u128_be64(val, idx)  ((val)._.u64[1 - (idx)])\n#endif\n\n\nCORK_ATTR_UNUSED\nstatic cork_u128\ncork_u128_add(cork_u128 a, cork_u128 b)\n{\n    cork_u128  result;\n#if CORK_U128_HAVE_U128\n    result._.u128 = a._.u128 + b._.u128;\n#else\n    result._.be64.lo = a._.be64.lo + b._.be64.lo;\n    result._.be64.hi =\n        a._.be64.hi + b._.be64.hi + (result._.be64.lo < a._.be64.lo);\n#endif\n    return result;\n}\n\nCORK_ATTR_UNUSED\nstatic cork_u128\ncork_u128_sub(cork_u128 a, cork_u128 b)\n{\n    cork_u128  result;\n#if CORK_U128_HAVE_U128\n    result._.u128 = a._.u128 - b._.u128;\n#else\n    result._.be64.lo = a._.be64.lo - b._.be64.lo;\n    result._.be64.hi =\n        a._.be64.hi - b._.be64.hi - (result._.be64.lo > a._.be64.lo);\n#endif\n    return result;\n}\n\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_eq(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 == b._.u128);\n#else\n    return (a._.be64.hi == b._.be64.hi) && (a._.be64.lo == b._.be64.lo);\n#endif\n}\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_ne(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 != b._.u128);\n#else\n    return (a._.be64.hi != b._.be64.hi) || (a._.be64.lo != b._.be64.lo);\n#endif\n}\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_lt(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 < b._.u128);\n#else\n    if (a._.be64.hi == b._.be64.hi) {\n        return a._.be64.lo < b._.be64.lo;\n    } else {\n        return a._.be64.hi < b._.be64.hi;\n    }\n#endif\n}\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_le(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 <= b._.u128);\n#else\n    if (a._.be64.hi == b._.be64.hi) {\n        return a._.be64.lo <= b._.be64.lo;\n    } else {\n        return a._.be64.hi <= b._.be64.hi;\n    }\n#endif\n}\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_gt(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 > b._.u128);\n#else\n    if (a._.be64.hi == b._.be64.hi) {\n        return a._.be64.lo > b._.be64.lo;\n    } else {\n        return a._.be64.hi > b._.be64.hi;\n    }\n#endif\n}\n\nCORK_ATTR_UNUSED\nstatic bool\ncork_u128_ge(cork_u128 a, cork_u128 b)\n{\n#if CORK_U128_HAVE_U128\n    return (a._.u128 >= b._.u128);\n#else\n    if (a._.be64.hi == b._.be64.hi) {\n        return a._.be64.lo >= b._.be64.lo;\n    } else {\n        return a._.be64.hi >= b._.be64.hi;\n    }\n#endif\n}\n\n\n/* log10(x) = log2(x) / log2(10) ~= log2(x) / 3.322 */\n#define CORK_U128_DECIMAL_LENGTH  44  /* ~= 128 / 3 + 1 + 1 */\n\nCORK_API const char *\ncork_u128_to_decimal(char *buf, cork_u128 val);\n\n\n#define CORK_U128_HEX_LENGTH  33\n\nCORK_API const char *\ncork_u128_to_hex(char *buf, cork_u128 val);\n\nCORK_API const char *\ncork_u128_to_padded_hex(char *buf, cork_u128 val);\n\n\n#endif /* LIBCORK_CORE_U128_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/core.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_H\n#define LIBCORK_CORE_H\n\n/*** include all of the parts ***/\n\n#include <libcork/core/allocator.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/byte-order.h>\n#include <libcork/core/callbacks.h>\n#include <libcork/core/error.h>\n#include <libcork/core/gc.h>\n#include <libcork/core/hash.h>\n#include <libcork/core/id.h>\n#include <libcork/core/mempool.h>\n#include <libcork/core/net-addresses.h>\n#include <libcork/core/timestamp.h>\n#include <libcork/core/types.h>\n#include <libcork/core/u128.h>\n\n#endif /* LIBCORK_CORE_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/array.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_ARRAY_H\n#define LIBCORK_DS_ARRAY_H\n\n\n#include <libcork/core/api.h>\n#include <libcork/core/callbacks.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * Resizable arrays\n */\n\nstruct cork_array_priv;\n\nstruct cork_raw_array {\n    void  *items;\n    size_t  size;\n    struct cork_array_priv  *priv;\n};\n\nCORK_API void\ncork_raw_array_init(struct cork_raw_array *array, size_t element_size);\n\nCORK_API void\ncork_raw_array_done(struct cork_raw_array *array);\n\nCORK_API void\ncork_raw_array_set_callback_data(struct cork_raw_array *array,\n                                 void *user_data, cork_free_f free_user_data);\n\nCORK_API void\ncork_raw_array_set_init(struct cork_raw_array *array, cork_init_f init);\n\nCORK_API void\ncork_raw_array_set_done(struct cork_raw_array *array, cork_done_f done);\n\nCORK_API void\ncork_raw_array_set_reuse(struct cork_raw_array *array, cork_init_f reuse);\n\nCORK_API void\ncork_raw_array_set_remove(struct cork_raw_array *array, cork_done_f remove);\n\nCORK_API size_t\ncork_raw_array_element_size(const struct cork_raw_array *array);\n\nCORK_API void\ncork_raw_array_clear(struct cork_raw_array *array);\n\nCORK_API void *\ncork_raw_array_elements(const struct cork_raw_array *array);\n\nCORK_API void *\ncork_raw_array_at(const struct cork_raw_array *array, size_t index);\n\nCORK_API size_t\ncork_raw_array_size(const struct cork_raw_array *array);\n\nCORK_API bool\ncork_raw_array_is_empty(const struct cork_raw_array *array);\n\nCORK_API void\ncork_raw_array_ensure_size(struct cork_raw_array *array, size_t count);\n\nCORK_API void *\ncork_raw_array_append(struct cork_raw_array *array);\n\nCORK_API int\ncork_raw_array_copy(struct cork_raw_array *dest,\n                    const struct cork_raw_array *src,\n                    cork_copy_f copy, void *user_data);\n\n\n/*-----------------------------------------------------------------------\n * Type-checked resizable arrays\n */\n\n#define cork_array(T) \\\n    struct { \\\n        T  *items; \\\n        size_t  size; \\\n        struct cork_array_priv  *priv; \\\n    }\n\n#define cork_array_element_size(arr)  (sizeof((arr)->items[0]))\n#define cork_array_elements(arr)  ((arr)->items)\n#define cork_array_at(arr, i)     ((arr)->items[(i)])\n#define cork_array_size(arr)      ((arr)->size)\n#define cork_array_is_empty(arr)  ((arr)->size == 0)\n#define cork_array_to_raw(arr)    ((struct cork_raw_array *) (void *) (arr))\n\n#define cork_array_init(arr) \\\n    (cork_raw_array_init(cork_array_to_raw(arr), cork_array_element_size(arr)))\n#define cork_array_done(arr) \\\n    (cork_raw_array_done(cork_array_to_raw(arr)))\n\n#define cork_array_set_callback_data(arr, ud, fud) \\\n    (cork_raw_array_set_callback_data(cork_array_to_raw(arr), (ud), (fud)))\n#define cork_array_set_init(arr, i) \\\n    (cork_raw_array_set_init(cork_array_to_raw(arr), (i)))\n#define cork_array_set_done(arr, d) \\\n    (cork_raw_array_set_done(cork_array_to_raw(arr), (d)))\n#define cork_array_set_reuse(arr, r) \\\n    (cork_raw_array_set_reuse(cork_array_to_raw(arr), (r)))\n#define cork_array_set_remove(arr, r) \\\n    (cork_raw_array_set_remove(cork_array_to_raw(arr), (r)))\n\n#define cork_array_clear(arr) \\\n    (cork_raw_array_clear(cork_array_to_raw(arr)))\n#define cork_array_copy(d, s, c, ud) \\\n    (cork_raw_array_copy(cork_array_to_raw(d), cork_array_to_raw(s), (c), (ud)))\n\n#define cork_array_ensure_size(arr, count) \\\n    (cork_raw_array_ensure_size(cork_array_to_raw(arr), (count)))\n\n#define cork_array_append(arr, element) \\\n    (cork_raw_array_append(cork_array_to_raw(arr)), \\\n     ((arr)->items[(arr)->size - 1] = (element), (void) 0))\n\n#define cork_array_append_get(arr) \\\n    (cork_raw_array_append(cork_array_to_raw(arr)), \\\n     &(arr)->items[(arr)->size - 1])\n\n\n/*-----------------------------------------------------------------------\n * Builtin array types\n */\n\nCORK_API void\ncork_raw_pointer_array_init(struct cork_raw_array *array, cork_free_f free);\n\n#define cork_pointer_array_init(arr, f) \\\n    (cork_raw_pointer_array_init(cork_array_to_raw(arr), (f)))\n\nstruct cork_string_array {\n    const char  **items;\n    size_t  size;\n    struct cork_array_priv  *priv;\n};\n\nCORK_API void\ncork_string_array_init(struct cork_string_array *array);\n\nCORK_API void\ncork_string_array_append(struct cork_string_array *array, const char *str);\n\nCORK_API void\ncork_string_array_copy(struct cork_string_array *dest,\n                       const struct cork_string_array *src);\n\n\n#endif /* LIBCORK_DS_ARRAY_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/bitset.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_BITS_H\n#define LIBCORK_DS_BITS_H\n\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * Bit sets\n */\n\nstruct cork_bitset {\n    uint8_t  *bits;\n    size_t  bit_count;\n    size_t  byte_count;\n};\n\nCORK_API struct cork_bitset *\ncork_bitset_new(size_t bit_count);\n\nCORK_API void\ncork_bitset_free(struct cork_bitset *set);\n\nCORK_API void\ncork_bitset_clear(struct cork_bitset *set);\n\n/* Extract the byte that contains a particular bit in an array. */\n#define cork_bitset_byte_for_bit(set, i) \\\n    ((set)->bits[(i) / 8])\n\n/* Create a bit mask that extracts a particular bit from the byte that it lives\n * in. */\n#define cork_bitset_pos_mask_for_bit(i) \\\n    (0x80 >> ((i) % 8))\n\n/* Create a bit mask that extracts everything except for a particular bit from\n * the byte that it lives in. */\n#define cork_bitset_neg_mask_for_bit(i) \\\n    (~cork_bitset_pos_mask_for_bit(i))\n\n/* Return whether a particular bit is set in a byte array.  Bits are numbered\n * from 0, in a big-endian order. */\n#define cork_bitset_get(set, i) \\\n    ((cork_bitset_byte_for_bit(set, i) & cork_bitset_pos_mask_for_bit(i)) != 0)\n\n/* Set (or unset) a particular bit is set in a byte array.  Bits are numbered\n * from 0, in a big-endian order. */\n#define cork_bitset_set(set, i, val) \\\n    (cork_bitset_byte_for_bit(set, i) = \\\n     (cork_bitset_byte_for_bit(set, i) & cork_bitset_neg_mask_for_bit(i)) \\\n     | ((val)? cork_bitset_pos_mask_for_bit(i): 0))\n\n\n#endif /* LIBCORK_DS_BITS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/buffer.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_BUFFER_H\n#define LIBCORK_DS_BUFFER_H\n\n\n#include <stdarg.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/types.h>\n\n\nstruct cork_buffer {\n    /* The current contents of the buffer. */\n    void  *buf;\n    /* The current size of the buffer. */\n    size_t  size;\n    /* The amount of space allocated for buf. */\n    size_t  allocated_size;\n};\n\n\nCORK_API void\ncork_buffer_init(struct cork_buffer *buffer);\n\n#define CORK_BUFFER_INIT()  { NULL, 0, 0 }\n\nCORK_API struct cork_buffer *\ncork_buffer_new(void);\n\nCORK_API void\ncork_buffer_done(struct cork_buffer *buffer);\n\nCORK_API void\ncork_buffer_free(struct cork_buffer *buffer);\n\n\nCORK_API bool\ncork_buffer_equal(const struct cork_buffer *buffer1,\n                  const struct cork_buffer *buffer2);\n\n\nCORK_API void\ncork_buffer_ensure_size(struct cork_buffer *buffer, size_t desired_size);\n\n\nCORK_API void\ncork_buffer_clear(struct cork_buffer *buffer);\n\nCORK_API void\ncork_buffer_truncate(struct cork_buffer *buffer, size_t length);\n\n#define cork_buffer_byte(buffer, i)  (((const uint8_t *) (buffer)->buf)[(i)])\n#define cork_buffer_char(buffer, i)  (((const char *) (buffer)->buf)[(i)])\n\n\n/*-----------------------------------------------------------------------\n * A whole bunch of methods for adding data\n */\n\n#define cork_buffer_copy(dest, src) \\\n    (cork_buffer_set((dest), (src)->buf, (src)->size))\n\nCORK_API void\ncork_buffer_set(struct cork_buffer *buffer, const void *src, size_t length);\n\n#define cork_buffer_append_copy(dest, src) \\\n    (cork_buffer_append((dest), (src)->buf, (src)->size))\n\nCORK_API void\ncork_buffer_append(struct cork_buffer *buffer, const void *src, size_t length);\n\n\nCORK_API void\ncork_buffer_set_string(struct cork_buffer *buffer, const char *str);\n\nCORK_API void\ncork_buffer_append_string(struct cork_buffer *buffer, const char *str);\n\n#define cork_buffer_set_literal(buffer, str) \\\n    (cork_buffer_set((buffer), (str), sizeof((str)) - 1))\n\n#define cork_buffer_append_literal(buffer, str) \\\n    (cork_buffer_append((buffer), (str), sizeof((str)) - 1))\n\n\nCORK_API void\ncork_buffer_printf(struct cork_buffer *buffer, const char *format, ...)\n    CORK_ATTR_PRINTF(2,3);\n\nCORK_API void\ncork_buffer_append_printf(struct cork_buffer *buffer, const char *format, ...)\n    CORK_ATTR_PRINTF(2,3);\n\nCORK_API void\ncork_buffer_vprintf(struct cork_buffer *buffer, const char *format,\n                    va_list args)\n    CORK_ATTR_PRINTF(2,0);\n\nCORK_API void\ncork_buffer_append_vprintf(struct cork_buffer *buffer, const char *format,\n                           va_list args)\n    CORK_ATTR_PRINTF(2,0);\n\n\n/*-----------------------------------------------------------------------\n * Some helpers for pretty-printing data\n */\n\nCORK_API void\ncork_buffer_append_indent(struct cork_buffer *buffer, size_t indent);\n\nCORK_API void\ncork_buffer_append_c_string(struct cork_buffer *buffer,\n                            const char *src, size_t length);\n\nCORK_API void\ncork_buffer_append_hex_dump(struct cork_buffer *buffer, size_t indent,\n                            const char *src, size_t length);\n\nCORK_API void\ncork_buffer_append_multiline(struct cork_buffer *buffer, size_t indent,\n                             const char *src, size_t length);\n\nCORK_API void\ncork_buffer_append_binary(struct cork_buffer *buffer, size_t indent,\n                          const char *src, size_t length);\n\n\n/*-----------------------------------------------------------------------\n * Buffer's managed buffer/slice implementation\n */\n\n#include <libcork/ds/managed-buffer.h>\n#include <libcork/ds/slice.h>\n\nCORK_API struct cork_managed_buffer *\ncork_buffer_to_managed_buffer(struct cork_buffer *buffer);\n\nCORK_API int\ncork_buffer_to_slice(struct cork_buffer *buffer, struct cork_slice *slice);\n\n\n/*-----------------------------------------------------------------------\n * Buffer's stream consumer implementation\n */\n\n#include <libcork/ds/stream.h>\n\nCORK_API struct cork_stream_consumer *\ncork_buffer_to_stream_consumer(struct cork_buffer *buffer);\n\n\n#endif /* LIBCORK_DS_BUFFER_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/dllist.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2014, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_DLLIST_H\n#define LIBCORK_DS_DLLIST_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\nstruct cork_dllist_item {\n    /* A pointer to the next element in the list. */\n    struct cork_dllist_item  *next;\n    /* A pointer to the previous element in the list. */\n    struct cork_dllist_item  *prev;\n};\n\n\nstruct cork_dllist {\n    /* The sentinel element for this list. */\n    struct cork_dllist_item  head;\n};\n\n#define CORK_DLLIST_INIT(list)  { { &(list).head, &(list).head } }\n\n#define cork_dllist_init(list) \\\n    do { \\\n        (list)->head.next = &(list)->head; \\\n        (list)->head.prev = &(list)->head; \\\n    } while (0)\n\n\n\n/* DEPRECATED!  Use cork_dllist_foreach or cork_dllist_visit instead. */\ntypedef void\n(*cork_dllist_map_func)(struct cork_dllist_item *element, void *user_data);\n\nCORK_API void\ncork_dllist_map(struct cork_dllist *list,\n                cork_dllist_map_func func, void *user_data);\n\n\ntypedef int\ncork_dllist_visit_f(void *ud, struct cork_dllist_item *element);\n\nCORK_API int\ncork_dllist_visit(struct cork_dllist *list, void *ud,\n                  cork_dllist_visit_f *visit);\n\n\n#define cork_dllist_foreach_void(list, curr, _next) \\\n    for ((curr) = cork_dllist_start((list)), (_next) = (curr)->next; \\\n         !cork_dllist_is_end((list), (curr)); \\\n         (curr) = (_next), (_next) = (curr)->next)\n\n#define cork_dllist_foreach(list, curr, _next, etype, element, item_field) \\\n    for ((curr) = cork_dllist_start((list)), (_next) = (curr)->next, \\\n         (element) = cork_container_of((curr), etype, item_field); \\\n         !cork_dllist_is_end((list), (curr)); \\\n         (curr) = (_next), (_next) = (curr)->next, \\\n         (element) = cork_container_of((curr), etype, item_field))\n\n\nCORK_API size_t\ncork_dllist_size(const struct cork_dllist *list);\n\n\n#define cork_dllist_add_after(pred, element) \\\n    do { \\\n        (element)->prev = (pred); \\\n        (element)->next = (pred)->next; \\\n        (pred)->next->prev = (element); \\\n        (pred)->next = (element); \\\n    } while (0)\n\n#define cork_dllist_add_before(succ, element) \\\n    do { \\\n        (element)->next = (succ); \\\n        (element)->prev = (succ)->prev; \\\n        (succ)->prev->next = (element); \\\n        (succ)->prev = (element); \\\n    } while (0)\n\n#define cork_dllist_add_to_head(list, element) \\\n    cork_dllist_add_after(&(list)->head, (element))\n\n#define cork_dllist_add_to_tail(list, element) \\\n    cork_dllist_add_before(&(list)->head, (element))\n\n#define cork_dllist_add  cork_dllist_add_to_tail\n\n\n#define cork_dllist_add_list_to_head(dest, src) \\\n    do { \\\n        struct cork_dllist_item  *dest_start = cork_dllist_start(dest); \\\n        struct cork_dllist_item  *src_start = cork_dllist_start(src); \\\n        dest_start->prev = &(src)->head; \\\n        src_start->prev = &(dest)->head; \\\n        (src)->head.next = dest_start; \\\n        (dest)->head.next = src_start; \\\n        cork_dllist_remove(&(src)->head); \\\n        cork_dllist_init(src); \\\n    } while (0)\n\n#define cork_dllist_add_list_to_tail(dest, src) \\\n    do { \\\n        struct cork_dllist_item  *dest_end = cork_dllist_end(dest); \\\n        struct cork_dllist_item  *src_end = cork_dllist_end(src); \\\n        dest_end->next = &(src)->head; \\\n        src_end->next = &(dest)->head; \\\n        (src)->head.prev = dest_end; \\\n        (dest)->head.prev = src_end; \\\n        cork_dllist_remove(&(src)->head); \\\n        cork_dllist_init(src); \\\n    } while (0)\n\n\n#define cork_dllist_remove(element) \\\n    do { \\\n        (element)->prev->next = (element)->next; \\\n        (element)->next->prev = (element)->prev; \\\n    } while (0)\n\n\n#define cork_dllist_is_empty(list) \\\n    (cork_dllist_is_end((list), cork_dllist_start((list))))\n\n\n#define cork_dllist_head(list) \\\n    (((list)->head.next == &(list)->head)? NULL: (list)->head.next)\n#define cork_dllist_tail(list) \\\n    (((list)->head.prev == &(list)->head)? NULL: (list)->head.prev)\n\n#define cork_dllist_start(list) \\\n    ((list)->head.next)\n#define cork_dllist_end(list) \\\n    ((list)->head.prev)\n\n#define cork_dllist_is_start(list, element) \\\n    ((element) == &(list)->head)\n#define cork_dllist_is_end(list, element) \\\n    ((element) == &(list)->head)\n\n\n#endif /* LIBCORK_DS_DLLIST_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/hash-table.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_HASH_TABLE_H\n#define LIBCORK_DS_HASH_TABLE_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/callbacks.h>\n#include <libcork/core/hash.h>\n#include <libcork/core/mempool.h>\n#include <libcork/core/types.h>\n#include <libcork/ds/dllist.h>\n\n\n/*-----------------------------------------------------------------------\n * Hash tables\n */\n\nstruct cork_hash_table_entry {\n    cork_hash  hash;\n    void  *key;\n    void  *value;\n};\n\n\nstruct cork_hash_table;\n\nCORK_API struct cork_hash_table *\ncork_hash_table_new(size_t initial_size, unsigned int flags);\n\nCORK_API void\ncork_hash_table_free(struct cork_hash_table *table);\n\n\nCORK_API void\ncork_hash_table_set_user_data(struct cork_hash_table *table,\n                              void *user_data, cork_free_f free_user_data);\n\nCORK_API void\ncork_hash_table_set_equals(struct cork_hash_table *table, cork_equals_f equals);\n\nCORK_API void\ncork_hash_table_set_free_key(struct cork_hash_table *table, cork_free_f free);\n\nCORK_API void\ncork_hash_table_set_free_value(struct cork_hash_table *table, cork_free_f free);\n\nCORK_API void\ncork_hash_table_set_hash(struct cork_hash_table *table, cork_hash_f hash);\n\n\nCORK_API void\ncork_hash_table_clear(struct cork_hash_table *table);\n\n\nCORK_API void\ncork_hash_table_ensure_size(struct cork_hash_table *table,\n                            size_t desired_count);\n\nCORK_API size_t\ncork_hash_table_size(const struct cork_hash_table *table);\n\n\nCORK_API void *\ncork_hash_table_get(const struct cork_hash_table *table, const void *key);\n\nCORK_API void *\ncork_hash_table_get_hash(const struct cork_hash_table *table,\n                         cork_hash hash, const void *key);\n\nCORK_API struct cork_hash_table_entry *\ncork_hash_table_get_entry(const struct cork_hash_table *table,\n                          const void *key);\n\nCORK_API struct cork_hash_table_entry *\ncork_hash_table_get_entry_hash(const struct cork_hash_table *table,\n                               cork_hash hash, const void *key);\n\nCORK_API struct cork_hash_table_entry *\ncork_hash_table_get_or_create(struct cork_hash_table *table,\n                              void *key, bool *is_new);\n\nCORK_API struct cork_hash_table_entry *\ncork_hash_table_get_or_create_hash(struct cork_hash_table *table,\n                                   cork_hash hash, void *key, bool *is_new);\n\nCORK_API void\ncork_hash_table_put(struct cork_hash_table *table,\n                    void *key, void *value,\n                    bool *is_new, void **old_key, void **old_value);\n\nCORK_API void\ncork_hash_table_put_hash(struct cork_hash_table *table,\n                         cork_hash hash, void *key, void *value,\n                         bool *is_new, void **old_key, void **old_value);\n\nCORK_API void\ncork_hash_table_delete_entry(struct cork_hash_table *table,\n                             struct cork_hash_table_entry *entry);\n\nCORK_API bool\ncork_hash_table_delete(struct cork_hash_table *table, const void *key,\n                       void **deleted_key, void **deleted_value);\n\nCORK_API bool\ncork_hash_table_delete_hash(struct cork_hash_table *table,\n                            cork_hash hash, const void *key,\n                            void **deleted_key, void **deleted_value);\n\n\nenum cork_hash_table_map_result {\n    /* Abort the current @ref cork_hash_table_map operation. */\n    CORK_HASH_TABLE_MAP_ABORT = 0,\n    /* Continue on to the next entry in the hash table. */\n    CORK_HASH_TABLE_MAP_CONTINUE = 1,\n    /* Delete the entry that was just processed, and then continue on to\n     * the next entry in the hash table. */\n    CORK_HASH_TABLE_MAP_DELETE = 2\n};\n\ntypedef enum cork_hash_table_map_result\n(*cork_hash_table_map_f)(void *user_data, struct cork_hash_table_entry *entry);\n\nCORK_API void\ncork_hash_table_map(struct cork_hash_table *table, void *user_data,\n                    cork_hash_table_map_f mapper);\n\n\nstruct cork_hash_table_iterator {\n    struct cork_hash_table  *table;\n    void  *priv;\n};\n\nCORK_API void\ncork_hash_table_iterator_init(struct cork_hash_table *table,\n                              struct cork_hash_table_iterator *iterator);\n\nCORK_API struct cork_hash_table_entry *\ncork_hash_table_iterator_next(struct cork_hash_table_iterator *iterator);\n\n\n/*-----------------------------------------------------------------------\n * Built-in key types\n */\n\nCORK_API struct cork_hash_table *\ncork_string_hash_table_new(size_t initial_size, unsigned int flags);\n\nCORK_API struct cork_hash_table *\ncork_pointer_hash_table_new(size_t initial_size, unsigned int flags);\n\n\n#endif /* LIBCORK_DS_HASH_TABLE_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/managed-buffer.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_MANAGED_BUFFER_H\n#define LIBCORK_DS_MANAGED_BUFFER_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n#include <libcork/ds/slice.h>\n\n\n/*-----------------------------------------------------------------------\n * Managed buffers\n */\n\nstruct cork_managed_buffer;\n\nstruct cork_managed_buffer_iface {\n    /* Free the contents of a managed buffer, and the managed buffer\n     * object itself. */\n    void\n    (*free)(struct cork_managed_buffer *buf);\n};\n\n\nstruct cork_managed_buffer {\n    /* The buffer that this instance manages */\n    const void  *buf;\n    /* The size of buf */\n    size_t  size;\n    /* A reference count for the buffer.  If this drops to 0, the buffer\n     * will be finalized. */\n    volatile int  ref_count;\n    /* The managed buffer implementation for this instance. */\n    struct cork_managed_buffer_iface  *iface;\n};\n\n\nCORK_API struct cork_managed_buffer *\ncork_managed_buffer_new_copy(const void *buf, size_t size);\n\n\ntypedef void\n(*cork_managed_buffer_freer)(void *buf, size_t size);\n\nCORK_API struct cork_managed_buffer *\ncork_managed_buffer_new(const void *buf, size_t size,\n                        cork_managed_buffer_freer free);\n\n\nCORK_API struct cork_managed_buffer *\ncork_managed_buffer_ref(struct cork_managed_buffer *buf);\n\nCORK_API void\ncork_managed_buffer_unref(struct cork_managed_buffer *buf);\n\n\nCORK_API int\ncork_managed_buffer_slice(struct cork_slice *dest,\n                          struct cork_managed_buffer *buffer,\n                          size_t offset, size_t length);\n\nCORK_API int\ncork_managed_buffer_slice_offset(struct cork_slice *dest,\n                                 struct cork_managed_buffer *buffer,\n                                 size_t offset);\n\n\n#endif /* LIBCORK_DS_MANAGED_BUFFER_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/ring-buffer.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_RING_BUFFER_H\n#define LIBCORK_DS_RING_BUFFER_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\nstruct cork_ring_buffer {\n    /* The elements of the ring buffer */\n    void  **elements;\n    /* The number of elements that can be stored in this ring\n     * buffer. */\n    size_t  allocated_size;\n    /* The actual number of elements currently in the ring buffer. */\n    size_t  size;\n    /* The index of the next element to read from the buffer */\n    size_t  read_index;\n    /* The index of the next element to write into the buffer */\n    size_t  write_index;\n};\n\n\nCORK_API int\ncork_ring_buffer_init(struct cork_ring_buffer *buf, size_t size);\n\nCORK_API struct cork_ring_buffer *\ncork_ring_buffer_new(size_t size);\n\nCORK_API void\ncork_ring_buffer_done(struct cork_ring_buffer *buf);\n\nCORK_API void\ncork_ring_buffer_free(struct cork_ring_buffer *buf);\n\n\n#define cork_ring_buffer_is_empty(buf) ((buf)->size == 0)\n#define cork_ring_buffer_is_full(buf) ((buf)->size == (buf)->allocated_size)\n\n\nCORK_API int\ncork_ring_buffer_add(struct cork_ring_buffer *buf, void *element);\n\nCORK_API void *\ncork_ring_buffer_pop(struct cork_ring_buffer *buf);\n\nCORK_API void *\ncork_ring_buffer_peek(struct cork_ring_buffer *buf);\n\n\n#endif /* LIBCORK_DS_RING_BUFFER_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/slice.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_SLICE_H\n#define LIBCORK_DS_SLICE_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * Error handling\n */\n\n/* hash of \"libcork/ds/slice.h\" */\n#define CORK_SLICE_ERROR  0x960ca750\n\nenum cork_slice_error {\n    /* Trying to slice a nonexistent subset of a buffer */\n    CORK_SLICE_INVALID_SLICE\n};\n\n\n/*-----------------------------------------------------------------------\n * Slices\n */\n\nstruct cork_slice;\n\nstruct cork_slice_iface {\n    /* Free the slice.  Can be NULL if you don't need to free any\n     * underlying buffer. */\n    void\n    (*free)(struct cork_slice *self);\n\n    /* Create a copy of a slice.  You can assume that offset and length\n     * refer to a valid subset of the buffer. */\n    int\n    (*copy)(struct cork_slice *dest, const struct cork_slice *self,\n            size_t offset, size_t length);\n\n    /* Create a “light” copy of a slice.  A light copy is not allowed to exist\n     * longer than the slice that it was copied from, which can sometimes let\n     * you perform less work to produce the copy.  You can assume that offset\n     * and length refer to a valid subset of the buffer. */\n    int\n    (*light_copy)(struct cork_slice *dest, const struct cork_slice *self,\n                  size_t offset, size_t length);\n\n    /* Update the current slice to point at a different subset.  You can\n     * assume that offset and length refer to a valid subset of the\n     * buffer.  Can be NULL if you don't need to do anything special to\n     * the underlying buffer; in this case, we'll update the slice's buf\n     * and size fields for you. */\n    int\n    (*slice)(struct cork_slice *self, size_t offset, size_t length);\n};\n\n\nstruct cork_slice {\n    /* The beginning of the sliced portion of the buffer. */\n    const void  *buf;\n    /* The length of the sliced portion of the buffer. */\n    size_t  size;\n    /* The slice implementation of the underlying buffer. */\n    struct cork_slice_iface  *iface;\n    /* An opaque pointer used by the slice implementation to refer to\n     * the underlying buffer. */\n    void  *user_data;\n};\n\n\nCORK_API void\ncork_slice_clear(struct cork_slice *slice);\n\n#define cork_slice_is_empty(slice)  ((slice)->buf == NULL)\n\n\nCORK_API int\ncork_slice_copy(struct cork_slice *dest, const struct cork_slice *slice,\n                size_t offset, size_t length);\n\n#define cork_slice_copy_fast(dest, slice, offset, length) \\\n    ((slice)->iface->copy((dest), (slice), (offset), (length)))\n\nCORK_API int\ncork_slice_copy_offset(struct cork_slice *dest, const struct cork_slice *slice,\n                       size_t offset);\n\n#define cork_slice_copy_offset_fast(dest, slice, offset) \\\n    ((slice)->iface->copy \\\n     ((dest), (slice), (offset), (slice)->size - (offset)))\n\n\nCORK_API int\ncork_slice_light_copy(struct cork_slice *dest, const struct cork_slice *slice,\n                      size_t offset, size_t length);\n\n#define cork_slice_light_copy_fast(dest, slice, offset, length) \\\n    ((slice)->iface->light_copy((dest), (slice), (offset), (length)))\n\nCORK_API int\ncork_slice_light_copy_offset(struct cork_slice *dest,\n                             const struct cork_slice *slice, size_t offset);\n\n#define cork_slice_light_copy_offset_fast(dest, slice, offset) \\\n    ((slice)->iface->light_copy \\\n     ((dest), (slice), (offset), (slice)->size - (offset)))\n\n\nCORK_API int\ncork_slice_slice(struct cork_slice *slice, size_t offset, size_t length);\n\n#define cork_slice_slice_fast(_slice, offset, length) \\\n    ((_slice)->iface->slice == NULL? \\\n     ((_slice)->buf += (offset), (_slice)->size = (length), 0): \\\n     ((_slice)->iface->slice((_slice), (offset), (length))))\n\nCORK_API int\ncork_slice_slice_offset(struct cork_slice *slice, size_t offset);\n\n#define cork_slice_slice_offset_fast(_slice, offset) \\\n    ((_slice)->iface->slice == NULL? \\\n     ((_slice)->buf += (offset), (_slice)->size -= (offset), 0): \\\n     ((_slice)->iface->slice \\\n      ((_slice), (offset), (_slice)->size - (offset))))\n\n\nCORK_API void\ncork_slice_finish(struct cork_slice *slice);\n\nCORK_API bool\ncork_slice_equal(const struct cork_slice *slice1,\n                 const struct cork_slice *slice2);\n\nCORK_API void\ncork_slice_init_static(struct cork_slice *dest, const void *buf, size_t size);\n\nCORK_API void\ncork_slice_init_copy_once(struct cork_slice *dest, const void *buf,\n                          size_t size);\n\n\n#endif /* LIBCORK_DS_SLICE_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds/stream.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_STREAM_H\n#define LIBCORK_DS_STREAM_H\n\n#include <stdio.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\nstruct cork_stream_consumer {\n    int\n    (*data)(struct cork_stream_consumer *consumer,\n            const void *buf, size_t size, bool is_first_chunk);\n\n    int\n    (*eof)(struct cork_stream_consumer *consumer);\n\n    void\n    (*free)(struct cork_stream_consumer *consumer);\n};\n\n\n#define cork_stream_consumer_data(consumer, buf, size, is_first) \\\n    ((consumer)->data((consumer), (buf), (size), (is_first)))\n\n#define cork_stream_consumer_eof(consumer) \\\n    ((consumer)->eof((consumer)))\n\n#define cork_stream_consumer_free(consumer) \\\n    ((consumer)->free((consumer)))\n\n\nCORK_API int\ncork_consume_fd(struct cork_stream_consumer *consumer, int fd);\n\nCORK_API int\ncork_consume_file(struct cork_stream_consumer *consumer, FILE *fp);\n\nCORK_API int\ncork_consume_file_from_path(struct cork_stream_consumer *consumer,\n                            const char *path, int flags);\n\n\nCORK_API struct cork_stream_consumer *\ncork_fd_consumer_new(int fd);\n\nCORK_API struct cork_stream_consumer *\ncork_file_consumer_new(FILE *fp);\n\nCORK_API struct cork_stream_consumer *\ncork_file_from_path_consumer_new(const char *path, int flags);\n\n\n#endif /* LIBCORK_DS_STREAM_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/ds.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_DS_H\n#define LIBCORK_DS_H\n\n/*** include all of the parts ***/\n\n#include <libcork/ds/array.h>\n#include <libcork/ds/bitset.h>\n#include <libcork/ds/buffer.h>\n#include <libcork/ds/dllist.h>\n#include <libcork/ds/hash-table.h>\n#include <libcork/ds/managed-buffer.h>\n#include <libcork/ds/ring-buffer.h>\n#include <libcork/ds/slice.h>\n#include <libcork/ds/stream.h>\n\n#endif /* LIBCORK_DS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/helpers/errors.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_HELPERS_ERRORS_H\n#define LIBCORK_HELPERS_ERRORS_H\n\n\n/* This header is *not* automatically included when you include\n * libcork/core.h, since we define some macros that don't include a\n * cork_ or CORK_ prefix.  Don't want to pollute your namespace unless\n * you ask for it! */\n\n\n#include <libcork/core/allocator.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/error.h>\n\n\n#if !defined(CORK_PRINT_ERRORS)\n#define CORK_PRINT_ERRORS 0\n#endif\n\n#if !defined(CORK_PRINT_ERROR)\n#if CORK_PRINT_ERRORS\n#include <stdio.h>\n#define CORK_PRINT_ERROR_(func, file, line) \\\n    fprintf(stderr, \"---\\nError in %s (%s:%u)\\n  %s\\n\", \\\n            (func), (file), (unsigned int) (line), \\\n            cork_error_message());\n#define CORK_PRINT_ERROR()  CORK_PRINT_ERROR_(__func__, __FILE__, __LINE__)\n#else\n#define CORK_PRINT_ERROR()  /* do nothing */\n#endif\n#endif\n\n\n/* A bunch of macros for calling a function that returns an error.  If\n * an error occurs, it will automatically be propagated out as the\n * result of your own function.  With these macros, you won't have a\n * check to check or modify the error condition; it's returned as-is.\n *\n *   XZ_check\n *\n * where:\n *\n *   X = what happens if an error occurs\n *       \"e\" = jump to the \"error\" label\n *       \"rY\" = return a default error result (Y defined below)\n *       \"x\" = return an error result that you specify\n *\n *   Y = your return type\n *       \"i\" = int\n *       \"p\" = some pointer type\n *\n *   Z = the return type of the function you're calling\n *       \"e\" = use cork_error_occurred() to check\n *       \"i\" = int\n *       \"p\" = some pointer type\n *\n * In all cases, we assume that your function has a cork_error parameter\n * called \"err\".\n */\n\n\n/* jump to \"error\" label */\n\n#define ee_check(call) \\\n    do { \\\n        (call); \\\n        if (CORK_UNLIKELY(cork_error_occurred())) { \\\n            CORK_PRINT_ERROR(); \\\n            goto error; \\\n        } \\\n    } while (0)\n\n#define ei_check(call) \\\n    do { \\\n        int  __rc = (call); \\\n        if (CORK_UNLIKELY(__rc != 0)) { \\\n            CORK_PRINT_ERROR(); \\\n            goto error; \\\n        } \\\n    } while (0)\n\n#define ep_check(call) \\\n    do { \\\n        const void  *__result = (call); \\\n        if (CORK_UNLIKELY(__result == NULL)) { \\\n            CORK_PRINT_ERROR(); \\\n            goto error; \\\n        } \\\n    } while (0)\n\n\n/* return specific error code */\n\n#define xe_check(result, call) \\\n    do { \\\n        (call); \\\n        if (CORK_UNLIKELY(cork_error_occurred())) { \\\n            CORK_PRINT_ERROR(); \\\n            return result; \\\n        } \\\n    } while (0)\n\n#define xi_check(result, call) \\\n    do { \\\n        int  __rc = (call); \\\n        if (CORK_UNLIKELY(__rc != 0)) { \\\n            CORK_PRINT_ERROR(); \\\n            return result; \\\n        } \\\n    } while (0)\n\n#define xp_check(result, call) \\\n    do { \\\n        const void  *__result = (call); \\\n        if (CORK_UNLIKELY(__result == NULL)) { \\\n            CORK_PRINT_ERROR(); \\\n            return result; \\\n        } \\\n    } while (0)\n\n\n/* return default error code */\n\n#define rie_check(call)  xe_check(-1, call)\n#define rii_check(call)  xi_check(__rc, call)\n#define rip_check(call)  xp_check(-1, call)\n#define rpe_check(call)  xe_check(NULL, call)\n#define rpi_check(call)  xi_check(NULL, call)\n#define rpp_check(call)  xp_check(NULL, call)\n\n\n#endif /* LIBCORK_HELPERS_ERRORS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/helpers/gc.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2011-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_HELPERS_REFCOUNT_H\n#define LIBCORK_HELPERS_REFCOUNT_H\n\n\n#include <libcork/core/gc.h>\n#include <libcork/core/types.h>\n\n\n#define _free_(name) \\\nstatic void \\\nname##__free(void *obj)\n\n\n#define _recurse_(name) \\\nstatic void \\\nname##__recurse(struct cork_gc *gc, void *obj, \\\n                cork_gc_recurser recurse, void *ud)\n\n\n#define _gc_(name) \\\nstatic struct cork_gc_obj_iface  name##__gc = { \\\n    name##__free, name##__recurse \\\n};\n\n#define _gc_no_free_(name) \\\nstatic struct cork_gc_obj_iface  name##__gc = { \\\n    NULL, name##__recurse \\\n};\n\n#define _gc_no_recurse_(name) \\\nstatic struct cork_gc_obj_iface  name##__gc = { \\\n    name##__free, NULL \\\n};\n\n#define _gc_leaf_(name) \\\nstatic struct cork_gc_obj_iface  name##__gc = { \\\n    NULL, NULL \\\n};\n\n\n#endif /* LIBCORK_HELPERS_REFCOUNT_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/helpers/posix.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_HELPERS_POSIX_H\n#define LIBCORK_HELPERS_POSIX_H\n\n/* This header is *not* automatically included when you include\n * libcork/core.h, since we define some macros that don't include a\n * cork_ or CORK_ prefix.  Don't want to pollute your namespace unless\n * you ask for it! */\n\n#include <errno.h>\n\n#include <libcork/core/allocator.h>\n#include <libcork/core/attributes.h>\n#include <libcork/core/error.h>\n\n\n#if !defined(CORK_PRINT_ERRORS)\n#define CORK_PRINT_ERRORS 0\n#endif\n\n#if !defined(CORK_PRINT_ERROR)\n#if CORK_PRINT_ERRORS\n#include <stdio.h>\n#define CORK_PRINT_ERROR_(func, file, line) \\\n    fprintf(stderr, \"---\\nError in %s (%s:%u)\\n  %s\\n\", \\\n            (func), (file), (unsigned int) (line), \\\n            cork_error_message());\n#define CORK_PRINT_ERROR()  CORK_PRINT_ERROR_(__func__, __FILE__, __LINE__)\n#else\n#define CORK_PRINT_ERROR()  /* do nothing */\n#endif\n#endif\n\n\n#define xi_check_posix(call, on_error) \\\n    do { \\\n        while (true) { \\\n            if ((call) == -1) { \\\n                if (errno == EINTR) { \\\n                    continue; \\\n                } else { \\\n                    cork_system_error_set(); \\\n                    CORK_PRINT_ERROR(); \\\n                    on_error; \\\n                } \\\n            } else { \\\n                break; \\\n            } \\\n        } \\\n    } while (0)\n\n#define xp_check_posix(call, on_error) \\\n    do { \\\n        while (true) { \\\n            if ((call) == NULL) { \\\n                if (errno == EINTR) { \\\n                    continue; \\\n                } else { \\\n                    cork_system_error_set(); \\\n                    CORK_PRINT_ERROR(); \\\n                    on_error; \\\n                } \\\n            } else { \\\n                break; \\\n            } \\\n        } \\\n    } while (0)\n\n\n#define ei_check_posix(call)  xi_check_posix(call, goto error)\n#define rii_check_posix(call) xi_check_posix(call, return -1)\n#define rpi_check_posix(call) xi_check_posix(call, return NULL)\n\n#define ep_check_posix(call)  xp_check_posix(call, goto error)\n#define rip_check_posix(call) xp_check_posix(call, return -1)\n#define rpp_check_posix(call) xp_check_posix(call, return NULL)\n\n\n#endif /* LIBCORK_HELPERS_POSIX_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/os/files.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_FILES_H\n#define LIBCORK_CORE_FILES_H\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n\n\n/*-----------------------------------------------------------------------\n * Paths\n */\n\nstruct cork_path;\n\n/* path can be relative or absolute */\nCORK_API struct cork_path *\ncork_path_new(const char *path);\n\nCORK_API struct cork_path *\ncork_path_clone(const struct cork_path *other);\n\nCORK_API void\ncork_path_free(struct cork_path *path);\n\n\nCORK_API void\ncork_path_set(struct cork_path *path, const char *content);\n\nCORK_API const char *\ncork_path_get(const struct cork_path *path);\n\n\nCORK_API int\ncork_path_set_cwd(struct cork_path *path);\n\nCORK_API struct cork_path *\ncork_path_cwd(void);\n\n\nCORK_API int\ncork_path_set_absolute(struct cork_path *path);\n\nCORK_API struct cork_path *\ncork_path_absolute(const struct cork_path *other);\n\n\nCORK_API void\ncork_path_append(struct cork_path *path, const char *more);\n\nCORK_API void\ncork_path_append_path(struct cork_path *path, const struct cork_path *more);\n\nCORK_API struct cork_path *\ncork_path_join(const struct cork_path *other, const char *more);\n\nCORK_API struct cork_path *\ncork_path_join_path(const struct cork_path *other,\n                    const struct cork_path *more);\n\n\nCORK_API void\ncork_path_set_basename(struct cork_path *path);\n\nCORK_API struct cork_path *\ncork_path_basename(const struct cork_path *other);\n\n\nCORK_API void\ncork_path_set_dirname(struct cork_path *path);\n\nCORK_API struct cork_path *\ncork_path_dirname(const struct cork_path *other);\n\n\n/*-----------------------------------------------------------------------\n * Lists of paths\n */\n\nstruct cork_path_list;\n\nCORK_API struct cork_path_list *\ncork_path_list_new_empty(void);\n\n/* list must be a colon-separated list of paths */\nCORK_API struct cork_path_list *\ncork_path_list_new(const char *list);\n\nCORK_API void\ncork_path_list_free(struct cork_path_list *list);\n\nCORK_API const char *\ncork_path_list_to_string(const struct cork_path_list *list);\n\n/* Takes control of path.  path must not already be in the list. */\nCORK_API void\ncork_path_list_add(struct cork_path_list *list, struct cork_path *path);\n\nCORK_API size_t\ncork_path_list_size(const struct cork_path_list *list);\n\n/* The list still owns path; you must not free it or modify it. */\nCORK_API const struct cork_path *\ncork_path_list_get(const struct cork_path_list *list, size_t index);\n\n\n/*-----------------------------------------------------------------------\n * Files\n */\n\n#define CORK_FILE_RECURSIVE   0x0001\n#define CORK_FILE_PERMISSIVE  0x0002\n\ntypedef unsigned int  cork_file_mode;\n\nenum cork_file_type {\n    CORK_FILE_MISSING = 0,\n    CORK_FILE_REGULAR = 1,\n    CORK_FILE_DIRECTORY = 2,\n    CORK_FILE_SYMLINK = 3,\n    CORK_FILE_UNKNOWN = 4\n};\n\nstruct cork_file;\n\nCORK_API struct cork_file *\ncork_file_new(const char *path);\n\n/* Takes control of path */\nCORK_API struct cork_file *\ncork_file_new_from_path(struct cork_path *path);\n\nCORK_API void\ncork_file_free(struct cork_file *file);\n\n/* File owns the result; you should not free it */\nCORK_API const struct cork_path *\ncork_file_path(struct cork_file *file);\n\nCORK_API int\ncork_file_exists(struct cork_file *file, bool *exists);\n\nCORK_API int\ncork_file_type(struct cork_file *file, enum cork_file_type *type);\n\n\ntypedef int\n(*cork_file_directory_iterator)(struct cork_file *child, const char *rel_name,\n                                void *user_data);\n\nCORK_API int\ncork_file_iterate_directory(struct cork_file *file,\n                            cork_file_directory_iterator iterator,\n                            void *user_data);\n\n/* If flags includes CORK_FILE_RECURSIVE, this creates parent directories,\n * if needed.  If flags doesn't include CORK_FILE_PERMISSIVE, then it's an error\n * if the directory already exists. */\nCORK_API int\ncork_file_mkdir(struct cork_file *file, cork_file_mode mode,\n                unsigned int flags);\n\n/* Removes a file or directory.  If file is a directory, and flags contains\n * CORK_FILE_RECURSIVE, then all of the directory's contents are removed, too.\n * Otherwise, the directory must already be empty. */\nCORK_API int\ncork_file_remove(struct cork_file *file, unsigned int flags);\n\n\nCORK_API struct cork_file *\ncork_path_list_find_file(const struct cork_path_list *list,\n                         const char *rel_path);\n\n\n/*-----------------------------------------------------------------------\n * Lists of files\n */\n\nstruct cork_file_list;\n\nCORK_API struct cork_file_list *\ncork_file_list_new_empty(void);\n\nCORK_API struct cork_file_list *\ncork_file_list_new(struct cork_path_list *path_list);\n\nCORK_API void\ncork_file_list_free(struct cork_file_list *list);\n\n/* Takes control of file.  file must not already be in the list. */\nCORK_API void\ncork_file_list_add(struct cork_file_list *list, struct cork_file *file);\n\nCORK_API size_t\ncork_file_list_size(struct cork_file_list *list);\n\n/* The list still owns file; you must not free it.  Editing the file updates the\n * entry in the list. */\nCORK_API struct cork_file *\ncork_file_list_get(struct cork_file_list *list, size_t index);\n\n\nCORK_API struct cork_file_list *\ncork_path_list_find_files(const struct cork_path_list *list,\n                          const char *rel_path);\n\n\n/*-----------------------------------------------------------------------\n * Walking a directory tree\n */\n\n#define CORK_SKIP_DIRECTORY  1\n\nstruct cork_dir_walker {\n    int\n    (*enter_directory)(struct cork_dir_walker *walker, const char *full_path,\n                       const char *rel_path, const char *base_name);\n\n    int\n    (*file)(struct cork_dir_walker *walker, const char *full_path,\n            const char *rel_path, const char *base_name);\n\n    int\n    (*leave_directory)(struct cork_dir_walker *walker, const char *full_path,\n                       const char *rel_path, const char *base_name);\n};\n\n#define cork_dir_walker_enter_directory(w, fp, rp, bn) \\\n    ((w)->enter_directory((w), (fp), (rp), (bn)))\n\n#define cork_dir_walker_file(w, fp, rp, bn) \\\n    ((w)->file((w), (fp), (rp), (bn)))\n\n#define cork_dir_walker_leave_directory(w, fp, rp, bn) \\\n    ((w)->leave_directory((w), (fp), (rp), (bn)))\n\n\nCORK_API int\ncork_walk_directory(const char *path, struct cork_dir_walker *walker);\n\n\n/*-----------------------------------------------------------------------\n * Standard paths and path lists\n */\n\nCORK_API struct cork_path *\ncork_path_home(void);\n\n\nCORK_API struct cork_path_list *\ncork_path_config_paths(void);\n\nCORK_API struct cork_path_list *\ncork_path_data_paths(void);\n\nCORK_API struct cork_path *\ncork_path_user_cache_path(void);\n\nCORK_API struct cork_path *\ncork_path_user_runtime_path(void);\n\n\n#endif /* LIBCORK_CORE_FILES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/os/process.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_CORE_PROCESS_H\n#define LIBCORK_CORE_PROCESS_H\n\n#include <libcork/core/api.h>\n\n\ntypedef void\n(*cork_cleanup_function)(void);\n\nCORK_API void\ncork_cleanup_at_exit_named(const char *name, int priority,\n                           cork_cleanup_function function);\n\n#define cork_cleanup_at_exit(priority, function) \\\n    cork_cleanup_at_exit_named(#function, priority, function)\n\n\n#endif /* LIBCORK_CORE_PROCESS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/os/subprocess.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_OS_SUBPROCESS_H\n#define LIBCORK_OS_SUBPROCESS_H\n\n#include <stdarg.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/types.h>\n#include <libcork/ds/stream.h>\n#include <libcork/threads/basics.h>\n\n\n/*-----------------------------------------------------------------------\n * Environments\n */\n\nstruct cork_env;\n\nCORK_API struct cork_env *\ncork_env_new(void);\n\nCORK_API struct cork_env *\ncork_env_clone_current(void);\n\nCORK_API void\ncork_env_free(struct cork_env *env);\n\n\nCORK_API void\ncork_env_replace_current(struct cork_env *env);\n\n\n/* For all of the following, if env is NULL, these functions access or update\n * the actual environment of the current process.  Otherwise, they act on the\n * given environment instance. */\n\nCORK_API const char *\ncork_env_get(struct cork_env *env, const char *name);\n\nCORK_API void\ncork_env_add(struct cork_env *env, const char *name, const char *value);\n\nCORK_API void\ncork_env_add_printf(struct cork_env *env, const char *name,\n                    const char *format, ...)\n    CORK_ATTR_PRINTF(3,4);\n\nCORK_API void\ncork_env_add_vprintf(struct cork_env *env, const char *name,\n                     const char *format, va_list args)\n    CORK_ATTR_PRINTF(3,0);\n\nCORK_API void\ncork_env_remove(struct cork_env *env, const char *name);\n\n\n/*-----------------------------------------------------------------------\n * Executing another process\n */\n\nstruct cork_exec;\n\nCORK_API struct cork_exec *\ncork_exec_new(const char *program);\n\nCORK_ATTR_SENTINEL\nCORK_API struct cork_exec *\ncork_exec_new_with_params(const char *program, ...);\n\nCORK_API struct cork_exec *\ncork_exec_new_with_param_array(const char *program, char * const *params);\n\nCORK_API void\ncork_exec_free(struct cork_exec *exec);\n\nCORK_API const char *\ncork_exec_description(struct cork_exec *exec);\n\nCORK_API const char *\ncork_exec_program(struct cork_exec *exec);\n\nCORK_API size_t\ncork_exec_param_count(struct cork_exec *exec);\n\nCORK_API const char *\ncork_exec_param(struct cork_exec *exec, size_t index);\n\nCORK_API void\ncork_exec_add_param(struct cork_exec *exec, const char *param);\n\n/* Can return NULL */\nCORK_API struct cork_env *\ncork_exec_env(struct cork_exec *exec);\n\n/* Takes control of env */\nCORK_API void\ncork_exec_set_env(struct cork_exec *exec, struct cork_env *env);\n\n/* Can return NULL */\nCORK_API const char *\ncork_exec_cwd(struct cork_exec *exec);\n\nCORK_API void\ncork_exec_set_cwd(struct cork_exec *exec, const char *directory);\n\nCORK_API int\ncork_exec_run(struct cork_exec *exec);\n\n\n/*-----------------------------------------------------------------------\n * Subprocesses\n */\n\nstruct cork_subprocess;\n\n/* If env is NULL, we use the environment variables of the calling process. */\n\n/* Takes control of body */\nCORK_API struct cork_subprocess *\ncork_subprocess_new(struct cork_thread_body *body,\n                    struct cork_stream_consumer *stdout_consumer,\n                    struct cork_stream_consumer *stderr_consumer,\n                    int *exit_code);\n\n/* Takes control of exec */\nCORK_API struct cork_subprocess *\ncork_subprocess_new_exec(struct cork_exec *exec,\n                         struct cork_stream_consumer *stdout_consumer,\n                         struct cork_stream_consumer *stderr_consumer,\n                         int *exit_code);\n\nCORK_API void\ncork_subprocess_free(struct cork_subprocess *sub);\n\nCORK_API struct cork_stream_consumer *\ncork_subprocess_stdin(struct cork_subprocess *sub);\n\nCORK_API int\ncork_subprocess_start(struct cork_subprocess *sub);\n\nCORK_API bool\ncork_subprocess_is_finished(struct cork_subprocess *sub);\n\nCORK_API int\ncork_subprocess_abort(struct cork_subprocess *sub);\n\nCORK_API bool\ncork_subprocess_drain(struct cork_subprocess *sub);\n\nCORK_API int\ncork_subprocess_wait(struct cork_subprocess *sub);\n\n\n/*-----------------------------------------------------------------------\n * Groups of subprocesses\n */\n\nstruct cork_subprocess_group;\n\nCORK_API struct cork_subprocess_group *\ncork_subprocess_group_new(void);\n\nCORK_API void\ncork_subprocess_group_free(struct cork_subprocess_group *group);\n\n/* Takes control of sub */\nCORK_API void\ncork_subprocess_group_add(struct cork_subprocess_group *group,\n                          struct cork_subprocess *sub);\n\nCORK_API int\ncork_subprocess_group_start(struct cork_subprocess_group *group);\n\nCORK_API bool\ncork_subprocess_group_is_finished(struct cork_subprocess_group *group);\n\nCORK_API int\ncork_subprocess_group_abort(struct cork_subprocess_group *group);\n\nCORK_API bool\ncork_subprocess_group_drain(struct cork_subprocess_group *group);\n\nCORK_API int\ncork_subprocess_group_wait(struct cork_subprocess_group *group);\n\n\n#endif /* LIBCORK_OS_SUBPROCESS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/os.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_OS_H\n#define LIBCORK_OS_H\n\n/*** include all of the parts ***/\n\n#include <libcork/os/files.h>\n#include <libcork/os/process.h>\n#include <libcork/os/subprocess.h>\n\n#endif /* LIBCORK_OS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/threads/atomics.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_THREADS_ATOMICS_H\n#define LIBCORK_THREADS_ATOMICS_H\n\n#include <libcork/config.h>\n#include <libcork/core/types.h>\n\n/*-----------------------------------------------------------------------\n * GCC intrinsics\n */\n\n/* Ideally we can use GCC's intrinsics to define everything */\n#if defined(CORK_CONFIG_HAVE_GCC_ATOMICS)\n\n#define cork_int_atomic_add        __sync_add_and_fetch\n#define cork_uint_atomic_add       __sync_add_and_fetch\n#define cork_int_atomic_pre_add    __sync_fetch_and_add\n#define cork_uint_atomic_pre_add   __sync_fetch_and_add\n#define cork_int_atomic_sub        __sync_sub_and_fetch\n#define cork_uint_atomic_sub       __sync_sub_and_fetch\n#define cork_int_atomic_pre_sub    __sync_fetch_and_sub\n#define cork_uint_atomic_pre_sub   __sync_fetch_and_sub\n#define cork_int_cas               __sync_val_compare_and_swap\n#define cork_uint_cas              __sync_val_compare_and_swap\n#define cork_ptr_cas               __sync_val_compare_and_swap\n\n\n/*-----------------------------------------------------------------------\n * End of atomic implementations\n */\n#else\n#error \"No atomics implementation!\"\n#endif\n\n\n#endif /* LIBCORK_THREADS_ATOMICS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/threads/basics.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_THREADS_BASICS_H\n#define LIBCORK_THREADS_BASICS_H\n\n#include <assert.h>\n\n#include <libcork/core/api.h>\n#include <libcork/core/attributes.h>\n#include <libcork/threads/atomics.h>\n\n\n/*-----------------------------------------------------------------------\n * Thread IDs\n */\n\ntypedef unsigned int  cork_thread_id;\n\n#define CORK_THREAD_NONE  ((cork_thread_id) 0)\n\n/* Returns a valid ID for any thread — even the main thread and threads that\n * aren't created by libcork. */\nCORK_API cork_thread_id\ncork_current_thread_get_id(void);\n\n\n/*-----------------------------------------------------------------------\n * Main functions\n */\n\nstruct cork_thread_body {\n    int\n    (*run)(struct cork_thread_body *self);\n\n    void\n    (*free)(struct cork_thread_body *self);\n};\n\n#define cork_thread_body_run(tb)  ((tb)->run((tb)))\n#define cork_thread_body_free(tb)  ((tb)->free((tb)))\n\n\n/*-----------------------------------------------------------------------\n * Threads\n */\n\nstruct cork_thread;\n\n/* Returns NULL for the main thread, and for any thread not created via\n * cork_thread_new/cork_thread_start. */\nCORK_API struct cork_thread *\ncork_current_thread_get(void);\n\nCORK_API struct cork_thread *\ncork_thread_new(const char *name, struct cork_thread_body *body);\n\n/* Thread must not have been started yet. */\nCORK_API void\ncork_thread_free(struct cork_thread *thread);\n\nCORK_API const char *\ncork_thread_get_name(struct cork_thread *thread);\n\nCORK_API cork_thread_id\ncork_thread_get_id(struct cork_thread *thread);\n\n/* Can only be called once per thread.  Thread will automatically be freed when\n * its done. */\nCORK_API int\ncork_thread_start(struct cork_thread *thread);\n\n/* Can only be called once per thread; must be called after cork_thread_start. */\nCORK_API int\ncork_thread_join(struct cork_thread *thread);\n\n\n/*-----------------------------------------------------------------------\n * Executing something once\n */\n\n#if CORK_CONFIG_HAVE_GCC_ASM && (CORK_CONFIG_ARCH_X86 || CORK_CONFIG_ARCH_X64)\n#define cork_pause() \\\n    do { \\\n        __asm__ __volatile__ (\"pause\"); \\\n    } while (0)\n#else\n#define cork_pause()  do { /* do nothing */ } while (0)\n#endif\n\n\n#define cork_once_barrier(name) \\\n    static struct { \\\n        volatile int  barrier; \\\n        cork_thread_id  initializing_thread; \\\n    } name##__once;\n\n#define cork_once(name, call) \\\n    do { \\\n        if (CORK_LIKELY(name##__once.barrier == 2)) { \\\n            /* already initialized */ \\\n        } else { \\\n            /* Try to claim the ability to perform the initialization */ \\\n            int  prior_state = cork_int_cas(&name##__once.barrier, 0, 1); \\\n            if (CORK_LIKELY(prior_state == 0)) { \\\n                CORK_ATTR_UNUSED int  result; \\\n                /* we get to initialize */ \\\n                call; \\\n                result = cork_int_cas(&name##__once.barrier, 1, 2); \\\n                assert(result == 1); \\\n            } else { \\\n                /* someone else is initializing, spin/wait until done */ \\\n                while (name##__once.barrier != 2) { cork_pause(); } \\\n            } \\\n        } \\\n    } while (0)\n\n#define cork_once_recursive(name, call) \\\n    do { \\\n        if (CORK_LIKELY(name##__once.barrier == 2)) { \\\n            /* already initialized */ \\\n        } else { \\\n            /* Try to claim the ability to perform the initialization */ \\\n            int  prior_state = cork_int_cas(&name##__once.barrier, 0, 1); \\\n            if (CORK_LIKELY(prior_state == 0)) { \\\n                CORK_ATTR_UNUSED int  result; \\\n                /* we get to initialize */ \\\n                name##__once.initializing_thread = \\\n                    cork_current_thread_get_id(); \\\n                call; \\\n                result = cork_int_cas(&name##__once.barrier, 1, 2); \\\n                assert(result == 1); \\\n            } else { \\\n                /* someone else is initializing, is it us? */ \\\n                if (name##__once.initializing_thread == \\\n                    cork_current_thread_get_id()) { \\\n                    /* yep, fall through to let our recursion continue */ \\\n                } else { \\\n                    /* nope; wait for the initialization to finish */ \\\n                    while (name##__once.barrier != 2) { cork_pause(); } \\\n                } \\\n            } \\\n        } \\\n    } while (0)\n\n\n/*-----------------------------------------------------------------------\n * Thread-local storage\n */\n\n/* Prefer, in order:\n *\n * 1) __thread storage class\n * 2) pthread_key_t\n */\n\n#if CORK_CONFIG_HAVE_THREAD_STORAGE_CLASS\n#define cork_tls(TYPE, NAME) \\\nstatic __thread TYPE  NAME##__tls; \\\n\\\nstatic TYPE * \\\nNAME##_get(void) \\\n{ \\\n    return &NAME##__tls; \\\n}\n\n#elif CORK_HAVE_PTHREADS\n#include <stdlib.h>\n#include <pthread.h>\n\n#include <libcork/core/allocator.h>\n\n#define cork_tls(TYPE, NAME) \\\nstatic pthread_key_t  NAME##__tls_key; \\\ncork_once_barrier(NAME##__tls_barrier); \\\n\\\nstatic void \\\nNAME##__tls_destroy(void *vself) \\\n{ \\\n    free(vself); \\\n} \\\n\\\nstatic void \\\nNAME##__create_key(void) \\\n{ \\\n    CORK_ATTR_UNUSED int  rc; \\\n    rc = pthread_key_create(&NAME##__tls_key, &NAME##__tls_destroy); \\\n    assert(rc == 0); \\\n} \\\n\\\nstatic TYPE * \\\nNAME##_get(void) \\\n{ \\\n    TYPE  *self; \\\n    cork_once(NAME##__tls_barrier, NAME##__create_key()); \\\n    self = pthread_getspecific(NAME##__tls_key); \\\n    if (CORK_UNLIKELY(self == NULL)) { \\\n        self = cork_calloc(1, sizeof(TYPE)); \\\n        pthread_setspecific(NAME##__tls_key, self); \\\n    } \\\n    return self; \\\n}\n\n#else\n#error \"No thread-local storage implementation!\"\n#endif\n\n\n#endif /* LIBCORK_THREADS_BASICS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/include/libcork/threads.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef LIBCORK_THREADS_H\n#define LIBCORK_THREADS_H\n\n/*** include all of the parts ***/\n\n#include <libcork/threads/atomics.h>\n#include <libcork/threads/basics.h>\n\n#endif /* LIBCORK_THREADS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/directory-walker.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <dirent.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n#include \"libcork/core/attributes.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/buffer.h\"\n#include \"libcork/helpers/errors.h\"\n#include \"libcork/helpers/posix.h\"\n#include \"libcork/os/files.h\"\n\n\nstatic int\ncork_walk_one_directory(struct cork_dir_walker *w, struct cork_buffer *path,\n                        size_t root_path_size)\n{\n    DIR  *dir = NULL;\n    struct dirent  *entry;\n    size_t  dir_path_size;\n\n    rip_check_posix(dir = opendir(path->buf));\n\n    cork_buffer_append(path, \"/\", 1);\n    dir_path_size = path->size;\n    errno = 0;\n    while ((entry = readdir(dir)) != NULL) {\n        struct stat  info;\n\n        /* Skip the \".\" and \"..\" entries */\n        if (strcmp(entry->d_name, \".\") == 0 ||\n            strcmp(entry->d_name, \"..\") == 0) {\n            continue;\n        }\n\n        /* Stat the directory entry */\n        cork_buffer_append_string(path, entry->d_name);\n        ei_check_posix(stat(path->buf, &info));\n\n        /* If the entry is a subdirectory, recurse into it. */\n        if (S_ISDIR(info.st_mode)) {\n            int  rc = cork_dir_walker_enter_directory\n                (w, path->buf, path->buf + root_path_size,\n                 path->buf + dir_path_size);\n            if (rc != CORK_SKIP_DIRECTORY) {\n                ei_check(cork_walk_one_directory(w, path, root_path_size));\n                ei_check(cork_dir_walker_leave_directory\n                         (w, path->buf, path->buf + root_path_size,\n                          path->buf + dir_path_size));\n            }\n        } else if (S_ISREG(info.st_mode)) {\n            ei_check(cork_dir_walker_file\n                     (w, path->buf, path->buf + root_path_size,\n                      path->buf + dir_path_size));\n        }\n\n        /* Remove this entry name from the path buffer. */\n        cork_buffer_truncate(path, dir_path_size);\n\n        /* We have to reset errno to 0 because of the ambiguous way\n         * readdir uses a return value of NULL.  Other functions may\n         * return normally yet set errno to a non-zero value.  dlopen\n         * on Mac OS X is an ogreish example.  Since an error readdir\n         * is indicated by returning NULL and setting errno to indicate\n         * the error, then we need to reset it to zero before each call.\n         * We shall assume, perhaps to our great misery, that functions\n         * within this loop do proper error checking and act accordingly.\n         */\n        errno = 0;\n    }\n\n    /* Check errno immediately after the while loop terminates */\n    if (CORK_UNLIKELY(errno != 0)) {\n        cork_system_error_set();\n        goto error;\n    }\n\n    /* Remove the trailing '/' from the path buffer. */\n    cork_buffer_truncate(path, dir_path_size - 1);\n    rii_check_posix(closedir(dir));\n    return 0;\n\nerror:\n    if (dir != NULL) {\n        rii_check_posix(closedir(dir));\n    }\n    return -1;\n}\n\nint\ncork_walk_directory(const char *path, struct cork_dir_walker *w)\n{\n    int  rc;\n    char  *p;\n    struct cork_buffer  buf = CORK_BUFFER_INIT();\n\n    /* Seed the buffer with the directory's path, ensuring that there's no\n     * trailing '/' */\n    cork_buffer_append_string(&buf, path);\n    p = buf.buf;\n    while (p[buf.size-1] == '/') {\n        buf.size--;\n        p[buf.size] = '\\0';\n    }\n    rc = cork_walk_one_directory(w, &buf, buf.size + 1);\n    cork_buffer_done(&buf);\n    return rc;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/env.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n\n#include \"libcork/core.h\"\n#include \"libcork/ds.h\"\n#include \"libcork/os/subprocess.h\"\n#include \"libcork/helpers/errors.h\"\n\n#if defined(__APPLE__)\n\n#include <TargetConditionals.h>\n\n#if TARGET_OS_IPHONE\n    #define NO_ENVIRON 1\n#else\n    /* Apple doesn't provide access to the \"environ\" variable from a shared library.\n     * There's a workaround function to grab the environ pointer described at [1].\n     *\n     * [1] http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html\n     */\n    #include <crt_externs.h>\n    #define environ  (*_NSGetEnviron())\n#endif\n\n#else\n/* On all other POSIX platforms, we assume that environ is available in shared\n * libraries. */\nextern char  **environ;\n\n#endif\n\n\nstruct cork_env_var {\n    const char  *name;\n    const char  *value;\n};\n\nstatic struct cork_env_var *\ncork_env_var_new(const char *name, const char *value)\n{\n    struct cork_env_var  *var = cork_new(struct cork_env_var);\n    var->name = cork_strdup(name);\n    var->value = cork_strdup(value);\n    return var;\n}\n\nstatic void\ncork_env_var_free(void *vvar)\n{\n    struct cork_env_var  *var = vvar;\n    cork_strfree(var->name);\n    cork_strfree(var->value);\n    free(var);\n}\n\n\nstruct cork_env {\n    struct cork_hash_table  *variables;\n    struct cork_buffer  buffer;\n};\n\nstruct cork_env *\ncork_env_new(void)\n{\n    struct cork_env  *env = cork_new(struct cork_env);\n    env->variables = cork_string_hash_table_new(0, 0);\n    cork_hash_table_set_free_value(env->variables, cork_env_var_free);\n    cork_buffer_init(&env->buffer);\n    return env;\n}\n\nstatic void\ncork_env_add_internal(struct cork_env *env, const char *name, const char *value)\n{\n    if (env == NULL) {\n        setenv(name, value, true);\n    } else {\n        struct cork_env_var  *var = cork_env_var_new(name, value);\n        void  *old_var;\n\n        cork_hash_table_put\n            (env->variables, (void *) var->name, var, NULL, NULL, &old_var);\n\n        if (old_var != NULL) {\n            cork_env_var_free(old_var);\n        }\n    }\n}\n\nstruct cork_env *\ncork_env_clone_current(void)\n{\n#ifdef NO_ENVIRON\n    return NULL;\n#else\n    char  **curr;\n    struct cork_env  *env = cork_env_new();\n\n    for (curr = environ; *curr != NULL; curr++) {\n        const char  *entry = *curr;\n        const char  *equal;\n\n        equal = strchr(entry, '=');\n        if (CORK_UNLIKELY(equal == NULL)) {\n            /* This environment entry is malformed; skip it. */\n            continue;\n        }\n\n        /* Make a copy of the name so that it's NUL-terminated rather than\n         * equal-terminated. */\n        cork_buffer_set(&env->buffer, entry, equal - entry);\n        cork_env_add_internal(env, env->buffer.buf, equal + 1);\n    }\n\n    return env;\n#endif\n}\n\n\nvoid\ncork_env_free(struct cork_env *env)\n{\n    cork_hash_table_free(env->variables);\n    cork_buffer_done(&env->buffer);\n    free(env);\n}\n\nconst char *\ncork_env_get(struct cork_env *env, const char *name)\n{\n    if (env == NULL) {\n        return getenv(name);\n    } else {\n        struct cork_env_var  *var =\n            cork_hash_table_get(env->variables, (void *) name);\n        return (var == NULL)? NULL: var->value;\n    }\n}\n\nvoid\ncork_env_add(struct cork_env *env, const char *name, const char *value)\n{\n    cork_env_add_internal(env, name, value);\n}\n\nvoid\ncork_env_add_vprintf(struct cork_env *env, const char *name,\n                     const char *format, va_list args)\n{\n    cork_buffer_vprintf(&env->buffer, format, args);\n    cork_env_add_internal(env, name, env->buffer.buf);\n}\n\nvoid\ncork_env_add_printf(struct cork_env *env, const char *name,\n                    const char *format, ...)\n{\n    va_list  args;\n    va_start(args, format);\n    cork_env_add_vprintf(env, name, format, args);\n    va_end(args);\n}\n\nvoid\ncork_env_remove(struct cork_env *env, const char *name)\n{\n    if (env == NULL) {\n        unsetenv(name);\n    } else {\n        void  *old_var;\n        cork_hash_table_delete(env->variables, (void *) name, NULL, &old_var);\n        if (old_var != NULL) {\n            cork_env_var_free(old_var);\n        }\n    }\n}\n\n\nstatic enum cork_hash_table_map_result\ncork_env_set_vars(void *user_data, struct cork_hash_table_entry *entry)\n{\n    struct cork_env_var  *var = entry->value;\n    setenv(var->name, var->value, false);\n    return CORK_HASH_TABLE_MAP_CONTINUE;\n}\n\n#if defined(__APPLE__) || (defined(BSD) && (BSD >= 199103))\n/* A handful of platforms [1] don't provide clearenv(), so we must implement our\n * own version that clears the environ array directly.\n *\n * [1] http://www.gnu.org/software/gnulib/manual/html_node/clearenv.html\n */\nstatic void\nclearenv(void)\n{\n#ifndef NO_ENVIRON\n    *environ = NULL;\n#endif\n}\n\n#else\n/* Otherwise assume that we have clearenv available. */\n#endif\n\nvoid\ncork_env_replace_current(struct cork_env *env)\n{\n    clearenv();\n    cork_hash_table_map(env->variables, NULL, cork_env_set_vars);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/exec.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <errno.h>\n#include <unistd.h>\n\n#include \"libcork/core.h\"\n#include \"libcork/ds.h\"\n#include \"libcork/os/subprocess.h\"\n#include \"libcork/helpers/errors.h\"\n\n#define ri_check_posix(call) \\\n    do { \\\n        while (true) { \\\n            if ((call) == -1) { \\\n                if (errno == EINTR) { \\\n                    continue; \\\n                } else { \\\n                    cork_system_error_set(); \\\n                    CORK_PRINT_ERROR(); \\\n                    return -1; \\\n                } \\\n            } else { \\\n                break; \\\n            } \\\n        } \\\n    } while (0)\n\n\nstruct cork_exec {\n    const char  *program;\n    struct cork_string_array  params;\n    struct cork_env  *env;\n    const char  *cwd;\n    struct cork_buffer  description;\n};\n\nstruct cork_exec *\ncork_exec_new(const char *program)\n{\n    struct cork_exec  *exec = cork_new(struct cork_exec);\n    exec->program = cork_strdup(program);\n    cork_string_array_init(&exec->params);\n    exec->env = NULL;\n    exec->cwd = NULL;\n    cork_buffer_init(&exec->description);\n    cork_buffer_set_string(&exec->description, program);\n    return exec;\n}\n\nstruct cork_exec *\ncork_exec_new_with_params(const char *program, ...)\n{\n    struct cork_exec  *exec;\n    va_list  args;\n    const char  *param;\n\n    exec = cork_exec_new(program);\n    cork_exec_add_param(exec, program);\n    va_start(args, program);\n    while ((param = va_arg(args, const char *)) != NULL) {\n        cork_exec_add_param(exec, param);\n    }\n    return exec;\n}\n\nstruct cork_exec *\ncork_exec_new_with_param_array(const char *program, char * const *params)\n{\n    char * const  *curr;\n    struct cork_exec  *exec = cork_exec_new(program);\n    for (curr = params; *curr != NULL; curr++) {\n        cork_exec_add_param(exec, *curr);\n    }\n    return exec;\n}\n\nvoid\ncork_exec_free(struct cork_exec *exec)\n{\n    cork_strfree(exec->program);\n    cork_array_done(&exec->params);\n    if (exec->env != NULL) {\n        cork_env_free(exec->env);\n    }\n    if (exec->cwd != NULL) {\n        cork_strfree(exec->cwd);\n    }\n    cork_buffer_done(&exec->description);\n    free(exec);\n}\n\nconst char *\ncork_exec_description(struct cork_exec *exec)\n{\n    return exec->description.buf;\n}\n\nconst char *\ncork_exec_program(struct cork_exec *exec)\n{\n    return exec->program;\n}\n\nsize_t\ncork_exec_param_count(struct cork_exec *exec)\n{\n    return cork_array_size(&exec->params);\n}\n\nconst char *\ncork_exec_param(struct cork_exec *exec, size_t index)\n{\n    return cork_array_at(&exec->params, index);\n}\n\nvoid\ncork_exec_add_param(struct cork_exec *exec, const char *param)\n{\n    /* Don't add the first parameter to the description; that's a copy of the\n     * program name, which we've already added. */\n    if (!cork_array_is_empty(&exec->params)) {\n        cork_buffer_append(&exec->description, \" \", 1);\n        cork_buffer_append_string(&exec->description, param);\n    }\n    cork_array_append(&exec->params, cork_strdup(param));\n}\n\nstruct cork_env *\ncork_exec_env(struct cork_exec *exec)\n{\n    return exec->env;\n}\n\nvoid\ncork_exec_set_env(struct cork_exec *exec, struct cork_env *env)\n{\n    if (exec->env != NULL) {\n        cork_env_free(exec->env);\n    }\n    exec->env = env;\n}\n\nconst char *\ncork_exec_cwd(struct cork_exec *exec)\n{\n    return exec->cwd;\n}\n\nvoid\ncork_exec_set_cwd(struct cork_exec *exec, const char *directory)\n{\n    if (exec->cwd != NULL) {\n        cork_strfree(exec->cwd);\n    }\n    exec->cwd = cork_strdup(directory);\n}\n\nint\ncork_exec_run(struct cork_exec *exec)\n{\n    const char  **params;\n\n    /* Make sure the parameter array is NULL-terminated. */\n    cork_array_append(&exec->params, NULL);\n    params = cork_array_elements(&exec->params);\n\n    /* Fill in the requested environment */\n    if (exec->env != NULL) {\n        cork_env_replace_current(exec->env);\n    }\n\n    /* Change the working directory, if requested */\n    if (exec->cwd != NULL) {\n        ri_check_posix(chdir(exec->cwd));\n    }\n\n    /* Execute the new program */\n    ri_check_posix(execvp(exec->program, (char * const *) params));\n\n    /* This is unreachable */\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/files.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <dirent.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <unistd.h>\n\n#include \"libcork/core/attributes.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/array.h\"\n#include \"libcork/ds/buffer.h\"\n#include \"libcork/helpers/errors.h\"\n#include \"libcork/helpers/posix.h\"\n#include \"libcork/os/files.h\"\n#include \"libcork/os/subprocess.h\"\n\n\n#if !defined(CORK_DEBUG_FILES)\n#define CORK_DEBUG_FILES  0\n#endif\n\n#if CORK_DEBUG_FILES\n#include <stdio.h>\n#define SP_DEBUG(...) fprintf(stderr, __VA_ARGS__)\n#else\n#define SP_DEBUG(...) /* no debug messages */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Paths\n */\n\nstruct cork_path {\n    struct cork_buffer  given;\n};\n\nstatic struct cork_path *\ncork_path_new_internal(const char *str, size_t length)\n{\n    struct cork_path  *path = cork_new(struct cork_path);\n    cork_buffer_init(&path->given);\n    if (length == 0) {\n        cork_buffer_ensure_size(&path->given, 16);\n        cork_buffer_set(&path->given, \"\", 0);\n    } else {\n        cork_buffer_set(&path->given, str, length);\n    }\n    return path;\n}\n\nstruct cork_path *\ncork_path_new(const char *source)\n{\n    return cork_path_new_internal(source, source == NULL? 0: strlen(source));\n}\n\nstruct cork_path *\ncork_path_clone(const struct cork_path *other)\n{\n    return cork_path_new_internal(other->given.buf, other->given.size);\n}\n\nvoid\ncork_path_free(struct cork_path *path)\n{\n    cork_buffer_done(&path->given);\n    free(path);\n}\n\n\nvoid\ncork_path_set(struct cork_path *path, const char *content)\n{\n    if (content == NULL) {\n        cork_buffer_clear(&path->given);\n    } else {\n        cork_buffer_set_string(&path->given, content);\n    }\n}\n\nconst char *\ncork_path_get(const struct cork_path *path)\n{\n    return path->given.buf;\n}\n\n#define cork_path_get(path) ((const char *) (path)->given.buf)\n#define cork_path_size(path)  ((path)->given.size)\n#define cork_path_truncate(path, size) \\\n    (cork_buffer_truncate(&(path)->given, (size)))\n\n\nint\ncork_path_set_cwd(struct cork_path *path)\n{\n    cork_buffer_ensure_size(&path->given, PATH_MAX);\n    rip_check_posix(getcwd(path->given.buf, PATH_MAX));\n    path->given.size = strlen(path->given.buf);\n    return 0;\n}\n\nstruct cork_path *\ncork_path_cwd(void)\n{\n    struct cork_path  *path = cork_path_new(NULL);\n    ei_check(cork_path_set_cwd(path));\n    return path;\n\nerror:\n    cork_path_free(path);\n    return NULL;\n}\n\n\nint\ncork_path_set_absolute(struct cork_path *path)\n{\n    struct cork_buffer  buf;\n\n    if (path->given.size > 0 &&\n        cork_buffer_char(&path->given, path->given.size - 1) == '/') {\n        /* The path is already absolute */\n        return 0;\n    }\n\n    cork_buffer_init(&buf);\n    cork_buffer_ensure_size(&buf, PATH_MAX);\n    ep_check_posix(getcwd(buf.buf, PATH_MAX));\n    buf.size = strlen(buf.buf);\n    cork_buffer_append(&buf, \"/\", 1);\n    cork_buffer_append_copy(&buf, &path->given);\n    cork_buffer_done(&path->given);\n    path->given = buf;\n    return 0;\n\nerror:\n    cork_buffer_done(&buf);\n    return -1;\n}\n\nstruct cork_path *\ncork_path_absolute(const struct cork_path *other)\n{\n    struct cork_path  *path = cork_path_clone(other);\n    ei_check(cork_path_set_absolute(path));\n    return path;\n\nerror:\n    cork_path_free(path);\n    return NULL;\n}\n\n\nvoid\ncork_path_append(struct cork_path *path, const char *more)\n{\n    if (more == NULL || more[0] == '\\0') {\n        return;\n    }\n\n    if (more[0] == '/') {\n        /* If more starts with a \"/\", then its absolute, and should replace the\n         * contents of the current path. */\n        cork_buffer_set_string(&path->given, more);\n    } else {\n        /* Otherwise, more is relative, and should be appended to the current\n         * path.  If the current given path doesn't end in a \"/\", then we need\n         * to add one to keep the path well-formed. */\n\n        if (path->given.size > 0 &&\n            cork_buffer_char(&path->given, path->given.size - 1) != '/') {\n            cork_buffer_append(&path->given, \"/\", 1);\n        }\n\n        cork_buffer_append_string(&path->given, more);\n    }\n}\n\nstruct cork_path *\ncork_path_join(const struct cork_path *other, const char *more)\n{\n    struct cork_path  *path = cork_path_clone(other);\n    cork_path_append(path, more);\n    return path;\n}\n\nvoid\ncork_path_append_path(struct cork_path *path, const struct cork_path *more)\n{\n    cork_path_append(path, more->given.buf);\n}\n\nstruct cork_path *\ncork_path_join_path(const struct cork_path *other, const struct cork_path *more)\n{\n    struct cork_path  *path = cork_path_clone(other);\n    cork_path_append_path(path, more);\n    return path;\n}\n\n\nvoid\ncork_path_set_basename(struct cork_path *path)\n{\n    char  *given = path->given.buf;\n    const char  *last_slash = strrchr(given, '/');\n    if (last_slash != NULL) {\n        size_t  offset = last_slash - given;\n        size_t  basename_length = path->given.size - offset - 1;\n        memmove(given, last_slash + 1, basename_length);\n        given[basename_length] = '\\0';\n        path->given.size = basename_length;\n    }\n}\n\nstruct cork_path *\ncork_path_basename(const struct cork_path *other)\n{\n    struct cork_path  *path = cork_path_clone(other);\n    cork_path_set_basename(path);\n    return path;\n}\n\n\nvoid\ncork_path_set_dirname(struct cork_path *path)\n{\n    const char  *given = path->given.buf;\n    const char  *last_slash = strrchr(given, '/');\n    if (last_slash == NULL) {\n        cork_buffer_clear(&path->given);\n    } else {\n        size_t  offset = last_slash - given;\n        if (offset == 0) {\n            /* A special case for the immediate subdirectories of \"/\" */\n            cork_buffer_truncate(&path->given, 1);\n        } else {\n            cork_buffer_truncate(&path->given, offset);\n        }\n    }\n}\n\nstruct cork_path *\ncork_path_dirname(const struct cork_path *other)\n{\n    struct cork_path  *path = cork_path_clone(other);\n    cork_path_set_dirname(path);\n    return path;\n}\n\n\n/*-----------------------------------------------------------------------\n * Lists of paths\n */\n\nstruct cork_path_list {\n    cork_array(struct cork_path *)  array;\n    struct cork_buffer  string;\n};\n\nstruct cork_path_list *\ncork_path_list_new_empty(void)\n{\n    struct cork_path_list  *list = cork_new(struct cork_path_list);\n    cork_array_init(&list->array);\n    cork_buffer_init(&list->string);\n    return list;\n}\n\nvoid\ncork_path_list_free(struct cork_path_list *list)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&list->array); i++) {\n        struct cork_path  *path = cork_array_at(&list->array, i);\n        cork_path_free(path);\n    }\n    cork_array_done(&list->array);\n    cork_buffer_done(&list->string);\n    free(list);\n}\n\nconst char *\ncork_path_list_to_string(const struct cork_path_list *list)\n{\n    return list->string.buf;\n}\n\nvoid\ncork_path_list_add(struct cork_path_list *list, struct cork_path *path)\n{\n    cork_array_append(&list->array, path);\n    if (cork_array_size(&list->array) > 1) {\n        cork_buffer_append(&list->string, \":\", 1);\n    }\n    cork_buffer_append_string(&list->string, cork_path_get(path));\n}\n\nsize_t\ncork_path_list_size(const struct cork_path_list *list)\n{\n    return cork_array_size(&list->array);\n}\n\nconst struct cork_path *\ncork_path_list_get(const struct cork_path_list *list, size_t index)\n{\n    return cork_array_at(&list->array, index);\n}\n\nstatic void\ncork_path_list_append_string(struct cork_path_list *list, const char *str)\n{\n    struct cork_path  *path;\n    const char  *curr = str;\n    const char  *next;\n\n    while ((next = strchr(curr, ':')) != NULL) {\n        size_t  size = next - curr;\n        path = cork_path_new_internal(curr, size);\n        cork_path_list_add(list, path);\n        curr = next + 1;\n    }\n\n    path = cork_path_new(curr);\n    cork_path_list_add(list, path);\n}\n\nstruct cork_path_list *\ncork_path_list_new(const char *str)\n{\n    struct cork_path_list  *list = cork_path_list_new_empty();\n    cork_path_list_append_string(list, str);\n    return list;\n}\n\n\n/*-----------------------------------------------------------------------\n * Files\n */\n\nstruct cork_file {\n    struct cork_path  *path;\n    struct stat  stat;\n    enum cork_file_type  type;\n    bool  has_stat;\n};\n\nstatic void\ncork_file_init(struct cork_file *file, struct cork_path *path)\n{\n    file->path = path;\n    file->has_stat = false;\n}\n\nstruct cork_file *\ncork_file_new(const char *path)\n{\n    return cork_file_new_from_path(cork_path_new(path));\n}\n\nstruct cork_file *\ncork_file_new_from_path(struct cork_path *path)\n{\n    struct cork_file  *file = cork_new(struct cork_file);\n    cork_file_init(file, path);\n    return file;\n}\n\nstatic void\ncork_file_reset(struct cork_file *file)\n{\n    file->has_stat = false;\n}\n\nstatic void\ncork_file_done(struct cork_file *file)\n{\n    cork_path_free(file->path);\n}\n\nvoid\ncork_file_free(struct cork_file *file)\n{\n    cork_file_done(file);\n    free(file);\n}\n\nconst struct cork_path *\ncork_file_path(struct cork_file *file)\n{\n    return file->path;\n}\n\nstatic int\ncork_file_stat(struct cork_file *file)\n{\n    if (file->has_stat) {\n        return 0;\n    } else {\n        int  rc;\n        rc = stat(cork_path_get(file->path), &file->stat);\n\n        if (rc == -1) {\n            if (errno == ENOENT || errno == ENOTDIR) {\n                file->type = CORK_FILE_MISSING;\n                file->has_stat = true;\n                return 0;\n            } else {\n                cork_system_error_set();\n                return -1;\n            }\n        }\n\n        if (S_ISREG(file->stat.st_mode)) {\n            file->type = CORK_FILE_REGULAR;\n        } else if (S_ISDIR(file->stat.st_mode)) {\n            file->type = CORK_FILE_DIRECTORY;\n        } else if (S_ISLNK(file->stat.st_mode)) {\n            file->type = CORK_FILE_SYMLINK;\n        } else {\n            file->type = CORK_FILE_UNKNOWN;\n        }\n\n        file->has_stat = true;\n        return 0;\n    }\n}\n\nint\ncork_file_exists(struct cork_file *file, bool *exists)\n{\n    rii_check(cork_file_stat(file));\n    *exists = (file->type != CORK_FILE_MISSING);\n    return 0;\n}\n\nint\ncork_file_type(struct cork_file *file, enum cork_file_type *type)\n{\n    rii_check(cork_file_stat(file));\n    *type = file->type;\n    return 0;\n}\n\n\nstruct cork_file *\ncork_path_list_find_file(const struct cork_path_list *list,\n                         const char *rel_path)\n{\n    size_t  i;\n    size_t  count = cork_path_list_size(list);\n    struct cork_file  *file;\n\n    for (i = 0; i < count; i++) {\n        const struct cork_path  *path = cork_path_list_get(list, i);\n        struct cork_path  *joined = cork_path_join(path, rel_path);\n        bool  exists;\n        file = cork_file_new_from_path(joined);\n        ei_check(cork_file_exists(file, &exists));\n        if (exists) {\n            return file;\n        } else {\n            cork_file_free(file);\n        }\n    }\n\n    cork_error_set_printf\n        (ENOENT, \"%s not found in %s\",\n         rel_path, cork_path_list_to_string(list));\n    return NULL;\n\nerror:\n    cork_file_free(file);\n    return NULL;\n}\n\n\n/*-----------------------------------------------------------------------\n * Directories\n */\n\nint\ncork_file_iterate_directory(struct cork_file *file,\n                            cork_file_directory_iterator iterator,\n                            void *user_data)\n{\n    DIR  *dir = NULL;\n    struct dirent  *entry;\n    size_t  dir_path_size;\n    struct cork_path  *child_path;\n    struct cork_file  child_file;\n\n    rip_check_posix(dir = opendir(cork_path_get(file->path)));\n    child_path = cork_path_clone(file->path);\n    cork_file_init(&child_file, child_path);\n    dir_path_size = cork_path_size(child_path);\n\n    errno = 0;\n    while ((entry = readdir(dir)) != NULL) {\n        /* Skip the \".\" and \"..\" entries */\n        if (strcmp(entry->d_name, \".\") == 0 ||\n            strcmp(entry->d_name, \"..\") == 0) {\n            continue;\n        }\n\n        cork_path_append(child_path, entry->d_name);\n        ei_check(cork_file_stat(&child_file));\n\n        /* If the entry is a subdirectory, recurse into it. */\n        ei_check(iterator(&child_file, entry->d_name, user_data));\n\n        /* Remove this entry name from the path buffer. */\n        cork_path_truncate(child_path, dir_path_size);\n        cork_file_reset(&child_file);\n\n        /* We have to reset errno to 0 because of the ambiguous way readdir uses\n         * a return value of NULL.  Other functions may return normally yet set\n         * errno to a non-zero value.  dlopen on Mac OS X is an ogreish example.\n         * Since an error readdir is indicated by returning NULL and setting\n         * errno to indicate the error, then we need to reset it to zero before\n         * each call.  We shall assume, perhaps to our great misery, that\n         * functions within this loop do proper error checking and act\n         * accordingly. */\n        errno = 0;\n    }\n\n    /* Check errno immediately after the while loop terminates */\n    if (CORK_UNLIKELY(errno != 0)) {\n        cork_system_error_set();\n        goto error;\n    }\n\n    cork_file_done(&child_file);\n    rii_check_posix(closedir(dir));\n    return 0;\n\nerror:\n    cork_file_done(&child_file);\n    rii_check_posix(closedir(dir));\n    return -1;\n}\n\nstatic int\ncork_file_mkdir_one(struct cork_file *file, cork_file_mode mode,\n                    unsigned int flags)\n{\n    SP_DEBUG(\"mkdir %s\\n\", cork_path_get(file->path));\n\n    /* First check if the directory already exists. */\n    rii_check(cork_file_stat(file));\n    if (file->type == CORK_FILE_DIRECTORY) {\n        SP_DEBUG(\"  Already exists!\\n\");\n        if (!(flags & CORK_FILE_PERMISSIVE)) {\n            cork_system_error_set_explicit(EEXIST);\n            return -1;\n        } else {\n            return 0;\n        }\n    } else if (file->type != CORK_FILE_MISSING) {\n        SP_DEBUG(\"  Exists and not a directory!\\n\");\n        cork_system_error_set_explicit(EEXIST);\n        return -1;\n    }\n\n    /* If the caller asked for a recursive mkdir, then make sure the parent\n     * directory exists. */\n    if (flags & CORK_FILE_RECURSIVE) {\n        struct cork_path  *parent = cork_path_dirname(file->path);\n        SP_DEBUG(\"  Checking parent %s\\n\", cork_path_get(parent));\n        if (parent->given.size == 0) {\n            /* There is no parent; we're either at the filesystem root (for an\n             * absolute path) or the current directory (for a relative one).\n             * Either way, we can assume it already exists. */\n            cork_path_free(parent);\n        } else {\n            int  rc;\n            struct cork_file  parent_file;\n            cork_file_init(&parent_file, parent);\n            rc = cork_file_mkdir_one\n                (&parent_file, mode, flags | CORK_FILE_PERMISSIVE);\n            cork_file_done(&parent_file);\n            rii_check(rc);\n        }\n    }\n\n    /* Create the directory already! */\n    SP_DEBUG(\"  Creating %s\\n\", cork_path_get(file->path));\n    rii_check_posix(mkdir(cork_path_get(file->path), mode));\n    return 0;\n}\n\nint\ncork_file_mkdir(struct cork_file *file, cork_file_mode mode,\n                unsigned int flags)\n{\n    return cork_file_mkdir_one(file, mode, flags);\n}\n\nstatic int\ncork_file_remove_iterator(struct cork_file *file, const char *rel_name,\n                          void *user_data)\n{\n    unsigned int  *flags = user_data;\n    return cork_file_remove(file, *flags);\n}\n\nint\ncork_file_remove(struct cork_file *file, unsigned int flags)\n{\n    SP_DEBUG(\"rm %s\\n\", cork_path_get(file->path));\n    rii_check(cork_file_stat(file));\n\n    if (file->type == CORK_FILE_MISSING) {\n        if (flags & CORK_FILE_PERMISSIVE) {\n            return 0;\n        } else {\n            cork_system_error_set_explicit(ENOENT);\n            return -1;\n        }\n    } else if (file->type == CORK_FILE_DIRECTORY) {\n        if (flags & CORK_FILE_RECURSIVE) {\n            /* The user asked that we delete the contents of the directory\n             * first. */\n            rii_check(cork_file_iterate_directory\n                      (file, cork_file_remove_iterator, &flags));\n        }\n\n        rii_check_posix(rmdir(cork_path_get(file->path)));\n        return 0;\n    } else {\n        rii_check(unlink(cork_path_get(file->path)));\n        return 0;\n    }\n}\n\n\n/*-----------------------------------------------------------------------\n * Lists of files\n */\n\nstruct cork_file_list {\n    cork_array(struct cork_file *)  array;\n};\n\nstruct cork_file_list *\ncork_file_list_new_empty(void)\n{\n    struct cork_file_list  *list = cork_new(struct cork_file_list);\n    cork_array_init(&list->array);\n    return list;\n}\n\nvoid\ncork_file_list_free(struct cork_file_list *list)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&list->array); i++) {\n        struct cork_file  *file = cork_array_at(&list->array, i);\n        cork_file_free(file);\n    }\n    cork_array_done(&list->array);\n    free(list);\n}\n\nvoid\ncork_file_list_add(struct cork_file_list *list, struct cork_file *file)\n{\n    cork_array_append(&list->array, file);\n}\n\nsize_t\ncork_file_list_size(struct cork_file_list *list)\n{\n    return cork_array_size(&list->array);\n}\n\nstruct cork_file *\ncork_file_list_get(struct cork_file_list *list, size_t index)\n{\n    return cork_array_at(&list->array, index);\n}\n\nstruct cork_file_list *\ncork_file_list_new(struct cork_path_list *path_list)\n{\n    struct cork_file_list  *list = cork_file_list_new_empty();\n    size_t  count = cork_path_list_size(path_list);\n    size_t  i;\n\n    for (i = 0; i < count; i++) {\n        const struct cork_path  *path = cork_path_list_get(path_list, i);\n        struct cork_file  *file = cork_file_new(cork_path_get(path));\n        cork_array_append(&list->array, file);\n    }\n\n    return list;\n}\n\n\nstruct cork_file_list *\ncork_path_list_find_files(const struct cork_path_list *path_list,\n                          const char *rel_path)\n{\n    size_t  i;\n    size_t  count = cork_path_list_size(path_list);\n    struct cork_file_list  *list = cork_file_list_new_empty();\n    struct cork_file  *file;\n\n    for (i = 0; i < count; i++) {\n        const struct cork_path  *path = cork_path_list_get(path_list, i);\n        struct cork_path  *joined = cork_path_join(path, rel_path);\n        bool  exists;\n        file = cork_file_new_from_path(joined);\n        ei_check(cork_file_exists(file, &exists));\n        if (exists) {\n            cork_file_list_add(list, file);\n        } else {\n            cork_file_free(file);\n        }\n    }\n\n    return list;\n\nerror:\n    cork_file_list_free(list);\n    cork_file_free(file);\n    return NULL;\n}\n\n\n/*-----------------------------------------------------------------------\n * Standard paths and path lists\n */\n\n#define empty_string(str)  ((str) == NULL || (str)[0] == '\\0')\n\nstruct cork_path *\ncork_path_home(void)\n{\n    const char  *path = cork_env_get(NULL, \"HOME\");\n    if (empty_string(path)) {\n        cork_undefined(\"Cannot determine home directory\");\n        return NULL;\n    } else {\n        return cork_path_new(path);\n    }\n}\n\n\nstruct cork_path_list *\ncork_path_config_paths(void)\n{\n    struct cork_path_list  *list = cork_path_list_new_empty();\n    const char  *var;\n    struct cork_path  *path;\n\n    /* The first entry should be the user's configuration directory.  This is\n     * specified by $XDG_CONFIG_HOME, with $HOME/.config as the default. */\n    var = cork_env_get(NULL, \"XDG_CONFIG_HOME\");\n    if (empty_string(var)) {\n        ep_check(path = cork_path_home());\n        cork_path_append(path, \".config\");\n        cork_path_list_add(list, path);\n    } else {\n        path = cork_path_new(var);\n        cork_path_list_add(list, path);\n    }\n\n    /* The remaining entries should be the system-wide configuration\n     * directories.  These are specified by $XDG_CONFIG_DIRS, with /etc/xdg as\n     * the default. */\n    var = cork_env_get(NULL, \"XDG_CONFIG_DIRS\");\n    if (empty_string(var)) {\n        path = cork_path_new(\"/etc/xdg\");\n        cork_path_list_add(list, path);\n    } else {\n        cork_path_list_append_string(list, var);\n    }\n\n    return list;\n\nerror:\n    cork_path_list_free(list);\n    return NULL;\n}\n\nstruct cork_path_list *\ncork_path_data_paths(void)\n{\n    struct cork_path_list  *list = cork_path_list_new_empty();\n    const char  *var;\n    struct cork_path  *path;\n\n    /* The first entry should be the user's data directory.  This is specified\n     * by $XDG_DATA_HOME, with $HOME/.local/share as the default. */\n    var = cork_env_get(NULL, \"XDG_DATA_HOME\");\n    if (empty_string(var)) {\n        ep_check(path = cork_path_home());\n        cork_path_append(path, \".local/share\");\n        cork_path_list_add(list, path);\n    } else {\n        path = cork_path_new(var);\n        cork_path_list_add(list, path);\n    }\n\n    /* The remaining entries should be the system-wide configuration\n     * directories.  These are specified by $XDG_DATA_DIRS, with\n     * /usr/local/share:/usr/share as the the default. */\n    var = cork_env_get(NULL, \"XDG_DATA_DIRS\");\n    if (empty_string(var)) {\n        path = cork_path_new(\"/usr/local/share\");\n        cork_path_list_add(list, path);\n        path = cork_path_new(\"/usr/share\");\n        cork_path_list_add(list, path);\n    } else {\n        cork_path_list_append_string(list, var);\n    }\n\n    return list;\n\nerror:\n    cork_path_list_free(list);\n    return NULL;\n}\n\nstruct cork_path *\ncork_path_user_cache_path(void)\n{\n    const char  *var;\n    struct cork_path  *path;\n\n    /* The user's cache directory is specified by $XDG_CACHE_HOME, with\n     * $HOME/.cache as the default. */\n    var = cork_env_get(NULL, \"XDG_CACHE_HOME\");\n    if (empty_string(var)) {\n        rpp_check(path = cork_path_home());\n        cork_path_append(path, \".cache\");\n        return path;\n    } else {\n        return cork_path_new(var);\n    }\n}\n\nstruct cork_path *\ncork_path_user_runtime_path(void)\n{\n    const char  *var;\n\n    /* The user's cache directory is specified by $XDG_RUNTIME_DIR, with\n     * no default given by the spec. */\n    var = cork_env_get(NULL, \"XDG_RUNTIME_DIR\");\n    if (empty_string(var)) {\n        cork_undefined(\"Cannot determine user-specific runtime directory\");\n        return NULL;\n    } else {\n        return cork_path_new(var);\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/process.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdlib.h>\n\n#include \"libcork/core.h\"\n#include \"libcork/ds.h\"\n#include \"libcork/os/process.h\"\n#include \"libcork/helpers/errors.h\"\n\n\n#if !defined(CORK_DEBUG_PROCESS)\n#define CORK_DEBUG_PROCESS  1\n#endif\n\n#if CORK_DEBUG_PROCESS\n#include <stdio.h>\n#define SP_DEBUG(...) fprintf(stderr, __VA_ARGS__)\n#else\n#define SP_DEBUG(...) /* no debug messages */\n#endif\n\n\nstruct cork_cleanup_entry {\n    struct cork_dllist_item  item;\n    int  priority;\n    const char  *name;\n    cork_cleanup_function  function;\n};\n\nstatic struct cork_cleanup_entry *\ncork_cleanup_entry_new(const char *name, int priority,\n                       cork_cleanup_function function)\n{\n    struct cork_cleanup_entry  *self = cork_new(struct cork_cleanup_entry);\n    self->priority = priority;\n    self->name = cork_strdup(name);\n    self->function = function;\n    return self;\n}\n\nstatic void\ncork_cleanup_entry_free(struct cork_cleanup_entry *self)\n{\n    cork_strfree(self->name);\n    free(self);\n}\n\nstatic struct cork_dllist  cleanup_entries = CORK_DLLIST_INIT(cleanup_entries);\n\nstatic void\ncork_cleanup_entry_add(struct cork_cleanup_entry *entry)\n{\n    struct cork_dllist_item  *curr;\n\n    /* Linear search through the list of existing cleanup functions.  When we\n     * find the first existing function with a higher priority, we've found\n     * where to insert the new function. */\n    for (curr = cork_dllist_start(&cleanup_entries);\n         !cork_dllist_is_end(&cleanup_entries, curr); curr = curr->next) {\n        struct cork_cleanup_entry  *existing =\n            cork_container_of(curr, struct cork_cleanup_entry, item);\n        if (existing->priority > entry->priority) {\n            cork_dllist_add_before(&existing->item, &entry->item);\n            return;\n        }\n    }\n\n    /* If we fall through the loop, then the new function should be appended to\n     * the end of the list. */\n    cork_dllist_add(&cleanup_entries, &entry->item);\n}\n\nstatic void\ncork_cleanup_call_one(struct cork_dllist_item *item, void *user_data)\n{\n    struct cork_cleanup_entry  *entry =\n        cork_container_of(item, struct cork_cleanup_entry, item);\n    SP_DEBUG(\"Call cleanup function [%d] %s\\n\", entry->priority, entry->name);\n    entry->function();\n    cork_cleanup_entry_free(entry);\n}\n\nstatic void\ncork_cleanup_call_all(void)\n{\n    cork_dllist_map(&cleanup_entries, cork_cleanup_call_one, NULL);\n}\n\n\nCORK_INITIALIZER(cleanup_init)\n{\n    atexit(cork_cleanup_call_all);\n}\n\nCORK_API void\ncork_cleanup_at_exit_named(const char *name, int priority,\n                           cork_cleanup_function function)\n{\n    struct cork_cleanup_entry  *entry =\n        cork_cleanup_entry_new(name, priority, function);\n    SP_DEBUG(\"Register cleanup function [%d] %s\\n\", priority, name);\n    cork_cleanup_entry_add(entry);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/posix/subprocess.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <signal.h>\n#ifndef __MINGW32__\n#include <sys/select.h>\n#include <sys/wait.h>\n#endif\n#include <unistd.h>\n\n#include \"libcork/core.h\"\n#include \"libcork/ds.h\"\n#include \"libcork/os/subprocess.h\"\n#include \"libcork/threads/basics.h\"\n#include \"libcork/helpers/errors.h\"\n#include \"libcork/helpers/posix.h\"\n\n\n#if !defined(CORK_DEBUG_SUBPROCESS)\n#define CORK_DEBUG_SUBPROCESS  1\n#endif\n\n#if CORK_DEBUG_SUBPROCESS\n#include <stdio.h>\n#define SP_DEBUG(...) fprintf(stderr, __VA_ARGS__)\n#else\n#define SP_DEBUG(...) /* no debug messages */\n#endif\n\n\n/*-----------------------------------------------------------------------\n * Subprocess groups\n */\n\n#define BUF_SIZE  4096\n\nstruct cork_subprocess_group {\n    cork_array(struct cork_subprocess *)  subprocesses;\n};\n\nstruct cork_subprocess_group *\ncork_subprocess_group_new(void)\n{\n    struct cork_subprocess_group  *group =\n        cork_new(struct cork_subprocess_group);\n    cork_pointer_array_init\n        (&group->subprocesses, (cork_free_f) cork_subprocess_free);\n    return group;\n}\n\nvoid\ncork_subprocess_group_free(struct cork_subprocess_group *group)\n{\n    cork_array_done(&group->subprocesses);\n    free(group);\n}\n\nvoid\ncork_subprocess_group_add(struct cork_subprocess_group *group,\n                          struct cork_subprocess *sub)\n{\n    cork_array_append(&group->subprocesses, sub);\n}\n\n\n/*-----------------------------------------------------------------------\n * Pipes (parent reads)\n */\n\nstruct cork_read_pipe {\n    struct cork_stream_consumer  *consumer;\n    int  fds[2];\n    bool  first;\n};\n\nstatic void\ncork_read_pipe_init(struct cork_read_pipe *p, struct cork_stream_consumer *consumer)\n{\n    p->consumer = consumer;\n    p->fds[0] = -1;\n    p->fds[1] = -1;\n}\n\nstatic int\ncork_read_pipe_close_read(struct cork_read_pipe *p)\n{\n    if (p->fds[0] != -1) {\n        SP_DEBUG(\"Closing read pipe %d\\n\", p->fds[0]);\n        rii_check_posix(close(p->fds[0]));\n        p->fds[0] = -1;\n    }\n    return 0;\n}\n\nstatic int\ncork_read_pipe_close_write(struct cork_read_pipe *p)\n{\n    if (p->fds[1] != -1) {\n        SP_DEBUG(\"Closing write pipe %d\\n\", p->fds[1]);\n        rii_check_posix(close(p->fds[1]));\n        p->fds[1] = -1;\n    }\n    return 0;\n}\n\nstatic void\ncork_read_pipe_close(struct cork_read_pipe *p)\n{\n    cork_read_pipe_close_read(p);\n    cork_read_pipe_close_write(p);\n}\n\nstatic void\ncork_read_pipe_done(struct cork_read_pipe *p)\n{\n    cork_read_pipe_close(p);\n}\n\nstatic int\ncork_read_pipe_open(struct cork_read_pipe *p)\n{\n    if (p->consumer != NULL) {\n        int  flags;\n\n        /* We want the read end of the pipe to be non-blocking. */\n        SP_DEBUG(\"[read] Opening pipe\\n\");\n        rii_check_posix(pipe(p->fds));\n        SP_DEBUG(\"[read]   Got read=%d write=%d\\n\", p->fds[0], p->fds[1]);\n        SP_DEBUG(\"[read]   Setting non-blocking flag on read pipe\\n\");\n        ei_check_posix(flags = fcntl(p->fds[0], F_GETFD));\n        flags |= O_NONBLOCK;\n        ei_check_posix(fcntl(p->fds[0], F_SETFD, flags));\n    }\n\n    p->first = true;\n    return 0;\n\nerror:\n    cork_read_pipe_close(p);\n    return -1;\n}\n\nstatic int\ncork_read_pipe_dup(struct cork_read_pipe *p, int fd)\n{\n    if (p->fds[1] != -1) {\n        rii_check_posix(dup2(p->fds[1], fd));\n    }\n    return 0;\n}\n\nstatic int\ncork_read_pipe_read(struct cork_read_pipe *p, char *buf, bool *progress)\n{\n    if (p->fds[0] == -1) {\n        return 0;\n    }\n\n    do {\n        SP_DEBUG(\"[read] Reading from pipe %d\\n\", p->fds[0]);\n        ssize_t  bytes_read = read(p->fds[0], buf, BUF_SIZE);\n        if (bytes_read == -1) {\n            if (errno == EAGAIN) {\n                /* We've exhausted all of the data currently available. */\n                SP_DEBUG(\"[read]   No more bytes without blocking\\n\");\n                return 0;\n            } else if (errno == EINTR) {\n                /* Interrupted by a signal; return so that our wait loop can\n                 * catch that. */\n                SP_DEBUG(\"[read]   Interrupted by signal\\n\");\n                return 0;\n            } else {\n                /* An actual error */\n                cork_system_error_set();\n                SP_DEBUG(\"[read]   Error: %s\\n\", cork_error_message());\n                return -1;\n            }\n        } else if (bytes_read == 0) {\n            SP_DEBUG(\"[read]   End of stream\\n\");\n            *progress = true;\n            rii_check(cork_stream_consumer_eof(p->consumer));\n            rii_check_posix(close(p->fds[0]));\n            p->fds[0] = -1;\n            return 0;\n        } else {\n            SP_DEBUG(\"[read]   Got %zd bytes\\n\", bytes_read);\n            *progress = true;\n            rii_check(cork_stream_consumer_data\n                      (p->consumer, buf, bytes_read, p->first));\n            p->first = false;\n        }\n    } while (true);\n}\n\nstatic bool\ncork_read_pipe_is_finished(struct cork_read_pipe *p)\n{\n    return p->fds[0] == -1;\n}\n\n\n/*-----------------------------------------------------------------------\n * Pipes (parent writes)\n */\n\nstruct cork_write_pipe {\n    struct cork_stream_consumer  consumer;\n    int  fds[2];\n};\n\nstatic int\ncork_write_pipe_close_read(struct cork_write_pipe *p)\n{\n    if (p->fds[0] != -1) {\n        SP_DEBUG(\"[write] Closing read pipe %d\\n\", p->fds[0]);\n        rii_check_posix(close(p->fds[0]));\n        p->fds[0] = -1;\n    }\n    return 0;\n}\n\nstatic int\ncork_write_pipe_close_write(struct cork_write_pipe *p)\n{\n    if (p->fds[1] != -1) {\n        SP_DEBUG(\"[write] Closing write pipe %d\\n\", p->fds[1]);\n        rii_check_posix(close(p->fds[1]));\n        p->fds[1] = -1;\n    }\n    return 0;\n}\n\nstatic int\ncork_write_pipe__data(struct cork_stream_consumer *consumer,\n                      const void *buf, size_t size, bool is_first_chunk)\n{\n    struct cork_write_pipe  *p =\n        cork_container_of(consumer, struct cork_write_pipe, consumer);\n    rii_check_posix(write(p->fds[1], buf, size));\n    return 0;\n}\n\nstatic int\ncork_write_pipe__eof(struct cork_stream_consumer *consumer)\n{\n    struct cork_write_pipe  *p =\n        cork_container_of(consumer, struct cork_write_pipe, consumer);\n    return cork_write_pipe_close_write(p);\n}\n\nstatic void\ncork_write_pipe__free(struct cork_stream_consumer *consumer)\n{\n}\n\nstatic void\ncork_write_pipe_init(struct cork_write_pipe *p)\n{\n    p->consumer.data = cork_write_pipe__data;\n    p->consumer.eof = cork_write_pipe__eof;\n    p->consumer.free = cork_write_pipe__free;\n    p->fds[0] = -1;\n    p->fds[1] = -1;\n}\n\nstatic void\ncork_write_pipe_close(struct cork_write_pipe *p)\n{\n    cork_write_pipe_close_read(p);\n    cork_write_pipe_close_write(p);\n}\n\nstatic void\ncork_write_pipe_done(struct cork_write_pipe *p)\n{\n    cork_write_pipe_close(p);\n}\n\nstatic int\ncork_write_pipe_open(struct cork_write_pipe *p)\n{\n    SP_DEBUG(\"[write] Opening writer pipe\\n\");\n    rii_check_posix(pipe(p->fds));\n    SP_DEBUG(\"[write]   Got read=%d write=%d\\n\", p->fds[0], p->fds[1]);\n    return 0;\n}\n\nstatic int\ncork_write_pipe_dup(struct cork_write_pipe *p, int fd)\n{\n    if (p->fds[0] != -1) {\n        rii_check_posix(dup2(p->fds[0], fd));\n    }\n    return 0;\n}\n\n\n/*-----------------------------------------------------------------------\n * Subprocesses\n */\n\nstruct cork_subprocess {\n    pid_t  pid;\n    struct cork_write_pipe  stdin_pipe;\n    struct cork_read_pipe  stdout_pipe;\n    struct cork_read_pipe  stderr_pipe;\n    struct cork_thread_body  *body;\n    int  *exit_code;\n    char  buf[BUF_SIZE];\n};\n\nstruct cork_subprocess *\ncork_subprocess_new(struct cork_thread_body *body,\n                    struct cork_stream_consumer *stdout_consumer,\n                    struct cork_stream_consumer *stderr_consumer,\n                    int *exit_code)\n{\n    struct cork_subprocess  *self = cork_new(struct cork_subprocess);\n    cork_write_pipe_init(&self->stdin_pipe);\n    cork_read_pipe_init(&self->stdout_pipe, stdout_consumer);\n    cork_read_pipe_init(&self->stderr_pipe, stderr_consumer);\n    self->pid = 0;\n    self->body = body;\n    self->exit_code = exit_code;\n    return self;\n}\n\nvoid\ncork_subprocess_free(struct cork_subprocess *self)\n{\n    cork_thread_body_free(self->body);\n    cork_write_pipe_done(&self->stdin_pipe);\n    cork_read_pipe_done(&self->stdout_pipe);\n    cork_read_pipe_done(&self->stderr_pipe);\n    free(self);\n}\n\nstruct cork_stream_consumer *\ncork_subprocess_stdin(struct cork_subprocess *self)\n{\n    return &self->stdin_pipe.consumer;\n}\n\n\n/*-----------------------------------------------------------------------\n * Executing another program\n */\n\nstruct cork_exec_body {\n    struct cork_thread_body  parent;\n    struct cork_exec  *exec;\n};\n\nstatic int\ncork_exec__run(struct cork_thread_body *vself)\n{\n    struct cork_exec_body  *self =\n        cork_container_of(vself, struct cork_exec_body, parent);\n    return cork_exec_run(self->exec);\n}\n\nstatic void\ncork_exec__free(struct cork_thread_body *vself)\n{\n    struct cork_exec_body  *self =\n        cork_container_of(vself, struct cork_exec_body, parent);\n    cork_exec_free(self->exec);\n    free(self);\n}\n\nstatic struct cork_thread_body *\ncork_exec_body_new(struct cork_exec *exec)\n{\n    struct cork_exec_body  *self = cork_new(struct cork_exec_body);\n    self->parent.run = cork_exec__run;\n    self->parent.free = cork_exec__free;\n    self->exec = exec;\n    return &self->parent;\n}\n\nstruct cork_subprocess *\ncork_subprocess_new_exec(struct cork_exec *exec,\n                         struct cork_stream_consumer *out,\n                         struct cork_stream_consumer *err,\n                         int *exit_code)\n{\n    struct cork_thread_body  *body = cork_exec_body_new(exec);\n    return cork_subprocess_new(body, out, err, exit_code);\n}\n\n\n/*-----------------------------------------------------------------------\n * Running subprocesses\n */\n\nint\ncork_subprocess_start(struct cork_subprocess *self)\n{\n    pid_t  pid;\n\n    /* Create the stdout and stderr pipes. */\n    if (cork_write_pipe_open(&self->stdin_pipe) == -1) {\n        return -1;\n    }\n    if (cork_read_pipe_open(&self->stdout_pipe) == -1) {\n        cork_write_pipe_close(&self->stdin_pipe);\n        return -1;\n    }\n    if (cork_read_pipe_open(&self->stderr_pipe) == -1) {\n        cork_write_pipe_close(&self->stdin_pipe);\n        cork_read_pipe_close(&self->stdout_pipe);\n        return -1;\n    }\n\n    /* Fork the child process. */\n    SP_DEBUG(\"Forking child process\\n\");\n    pid = fork();\n    if (pid == 0) {\n        /* Child process */\n        int  rc;\n\n        /* Close the parent's end of the pipes */\n        SP_DEBUG(\"[child] \");\n        cork_write_pipe_close_write(&self->stdin_pipe);\n        SP_DEBUG(\"[child] \");\n        cork_read_pipe_close_read(&self->stdout_pipe);\n        SP_DEBUG(\"[child] \");\n        cork_read_pipe_close_read(&self->stderr_pipe);\n\n        /* Bind the stdout and stderr pipes */\n        if (cork_write_pipe_dup(&self->stdin_pipe, STDIN_FILENO) == -1) {\n            _exit(EXIT_FAILURE);\n        }\n        if (cork_read_pipe_dup(&self->stdout_pipe, STDOUT_FILENO) == -1) {\n            _exit(EXIT_FAILURE);\n        }\n        if (cork_read_pipe_dup(&self->stderr_pipe, STDERR_FILENO) == -1) {\n            _exit(EXIT_FAILURE);\n        }\n\n        /* Run the subprocess's body */\n        rc = cork_thread_body_run(self->body);\n        if (CORK_LIKELY(rc == 0)) {\n            _exit(EXIT_SUCCESS);\n        } else {\n            fprintf(stderr, \"%s\\n\", cork_error_message());\n            _exit(EXIT_FAILURE);\n        }\n    } else if (pid < 0) {\n        /* Error forking */\n        cork_system_error_set();\n        return -1;\n    } else {\n        /* Parent process */\n        SP_DEBUG(\"  Child PID=%d\\n\", (int) pid);\n        self->pid = pid;\n        cork_write_pipe_close_read(&self->stdin_pipe);\n        cork_read_pipe_close_write(&self->stdout_pipe);\n        cork_read_pipe_close_write(&self->stderr_pipe);\n        return 0;\n    }\n}\n\nstatic int\ncork_subprocess_reap(struct cork_subprocess *self, int flags, bool *progress)\n{\n    int  pid;\n    int  status;\n    rii_check_posix(pid = waitpid(self->pid, &status, flags));\n    if (pid == self->pid) {\n        *progress = true;\n        self->pid = 0;\n        if (self->exit_code != NULL) {\n            *self->exit_code = WEXITSTATUS(status);\n        }\n    }\n    return 0;\n}\n\nint\ncork_subprocess_abort(struct cork_subprocess *self)\n{\n    if (self->pid > 0) {\n        CORK_ATTR_UNUSED bool  progress;\n        SP_DEBUG(\"Terminating child process %d\\n\", (int) self->pid);\n        kill(self->pid, SIGTERM);\n        return cork_subprocess_reap(self, 0, &progress);\n    } else {\n        return 0;\n    }\n}\n\nbool\ncork_subprocess_is_finished(struct cork_subprocess *self)\n{\n    return (self->pid == 0)\n        && cork_read_pipe_is_finished(&self->stdout_pipe)\n        && cork_read_pipe_is_finished(&self->stderr_pipe);\n}\n\n#if defined(__APPLE__) || defined(__MINGW32__) || defined(__CYGWIN__)\n#include <pthread.h>\n#define THREAD_YIELD   pthread_yield_np\n#elif defined(__linux__) || defined(BSD) || defined(__sun)\n#include <sched.h>\n#define THREAD_YIELD   sched_yield\n#else\n#error \"Unknown thread yield implementation\"\n#endif\n\nstatic void\ncork_subprocess_yield(unsigned int *spin_count)\n{\n    /* Adapted from\n     * http://www.1024cores.net/home/lock-free-algorithms/tricks/spinning */\n\n    if (*spin_count < 10) {\n        /* Spin-wait */\n        cork_pause();\n    } else if (*spin_count < 20) {\n        /* A more intense spin-wait */\n        int  i;\n        for (i = 0; i < 50; i++) {\n            cork_pause();\n        }\n    } else if (*spin_count < 22) {\n        THREAD_YIELD();\n    } else if (*spin_count < 24) {\n        usleep(0);\n    } else if (*spin_count < 50) {\n        usleep(1);\n    } else if (*spin_count < 75) {\n        usleep((*spin_count - 49) * 1000);\n    } else {\n        usleep(25000);\n    }\n\n    (*spin_count)++;\n}\n\nstatic int\ncork_subprocess_drain_(struct cork_subprocess *self, bool *progress)\n{\n    rii_check(cork_read_pipe_read(&self->stdout_pipe, self->buf, progress));\n    rii_check(cork_read_pipe_read(&self->stderr_pipe, self->buf, progress));\n    if (self->pid > 0) {\n        return cork_subprocess_reap(self, WNOHANG, progress);\n    } else {\n        return 0;\n    }\n}\n\nbool\ncork_subprocess_drain(struct cork_subprocess *self)\n{\n    bool  progress;\n    cork_subprocess_drain_(self, &progress);\n    return progress;\n}\n\nint\ncork_subprocess_wait(struct cork_subprocess *self)\n{\n    unsigned int  spin_count = 0;\n    bool  progress;\n    while (!cork_subprocess_is_finished(self)) {\n        progress = false;\n        rii_check(cork_subprocess_drain_(self, &progress));\n        if (!progress) {\n            cork_subprocess_yield(&spin_count);\n        }\n    }\n    return 0;\n}\n\n\n/*-----------------------------------------------------------------------\n * Running subprocess groups\n */\n\nstatic int\ncork_subprocess_group_terminate(struct cork_subprocess_group *group)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&group->subprocesses); i++) {\n        struct cork_subprocess  *sub = cork_array_at(&group->subprocesses, i);\n        rii_check(cork_subprocess_abort(sub));\n    }\n    return 0;\n}\n\nint\ncork_subprocess_group_start(struct cork_subprocess_group *group)\n{\n    size_t  i;\n    SP_DEBUG(\"Starting subprocess group\\n\");\n    /* Start each subprocess. */\n    for (i = 0; i < cork_array_size(&group->subprocesses); i++) {\n        struct cork_subprocess  *sub = cork_array_at(&group->subprocesses, i);\n        ei_check(cork_subprocess_start(sub));\n    }\n    return 0;\n\nerror:\n    cork_subprocess_group_terminate(group);\n    return -1;\n}\n\n\nint\ncork_subprocess_group_abort(struct cork_subprocess_group *group)\n{\n    SP_DEBUG(\"Aborting subprocess group\\n\");\n    return cork_subprocess_group_terminate(group);\n}\n\n\nbool\ncork_subprocess_group_is_finished(struct cork_subprocess_group *group)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&group->subprocesses); i++) {\n        struct cork_subprocess  *sub = cork_array_at(&group->subprocesses, i);\n        bool  sub_finished = cork_subprocess_is_finished(sub);\n        if (!sub_finished) {\n            return false;\n        }\n    }\n    return true;\n}\n\nstatic int\ncork_subprocess_group_drain_(struct cork_subprocess_group *group,\n                             bool *progress)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&group->subprocesses); i++) {\n        struct cork_subprocess  *sub = cork_array_at(&group->subprocesses, i);\n        rii_check(cork_subprocess_drain_(sub, progress));\n    }\n    return 0;\n}\n\nbool\ncork_subprocess_group_drain(struct cork_subprocess_group *group)\n{\n    bool  progress = false;\n    cork_subprocess_group_drain_(group, &progress);\n    return progress;\n}\n\nint\ncork_subprocess_group_wait(struct cork_subprocess_group *group)\n{\n    unsigned int  spin_count = 0;\n    bool  progress;\n    SP_DEBUG(\"Waiting for subprocess group to finish\\n\");\n    while (!cork_subprocess_group_is_finished(group)) {\n        progress = false;\n        rii_check(cork_subprocess_group_drain_(group, &progress));\n        if (!progress) {\n            cork_subprocess_yield(&spin_count);\n        }\n    }\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libcork/pthreads/thread.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the COPYING file in this distribution for license details.\n * ----------------------------------------------------------------------\n */\n\n#include <assert.h>\n\n#include <pthread.h>\n\n#include \"libcork/core/allocator.h\"\n#include \"libcork/core/error.h\"\n#include \"libcork/core/types.h\"\n#include \"libcork/ds/buffer.h\"\n#include \"libcork/threads/basics.h\"\n\n\n/*-----------------------------------------------------------------------\n * Current thread\n */\n\nstatic volatile cork_thread_id  last_thread_descriptor = 0;\n\nstruct cork_thread {\n    const char  *name;\n    cork_thread_id  id;\n    pthread_t  thread_id;\n    struct cork_thread_body  *body;\n    cork_error  error_code;\n    struct cork_buffer  error_message;\n    bool  started;\n    bool  joined;\n};\n\nstruct cork_thread_descriptor {\n    struct cork_thread  *current_thread;\n    cork_thread_id  id;\n};\n\ncork_tls(struct cork_thread_descriptor, cork_thread_descriptor);\n\nstruct cork_thread *\ncork_current_thread_get(void)\n{\n    struct cork_thread_descriptor  *desc = cork_thread_descriptor_get();\n    return desc->current_thread;\n}\n\ncork_thread_id\ncork_current_thread_get_id(void)\n{\n    struct cork_thread_descriptor  *desc = cork_thread_descriptor_get();\n    if (CORK_UNLIKELY(desc->id == 0)) {\n        if (desc->current_thread == NULL) {\n            desc->id = cork_uint_atomic_add(&last_thread_descriptor, 1);\n        } else {\n            desc->id = desc->current_thread->id;\n        }\n    }\n    return desc->id;\n}\n\n\n/*-----------------------------------------------------------------------\n * Threads\n */\n\nstruct cork_thread *\ncork_thread_new(const char *name, struct cork_thread_body *body)\n{\n    struct cork_thread  *self = cork_new(struct cork_thread);\n    self->name = cork_strdup(name);\n    self->id = cork_uint_atomic_add(&last_thread_descriptor, 1);\n    self->body = body;\n    self->error_code = CORK_ERROR_NONE;\n    cork_buffer_init(&self->error_message);\n    self->started = false;\n    self->joined = false;\n    return self;\n}\n\nstatic void\ncork_thread_free_private(struct cork_thread *self)\n{\n    cork_strfree(self->name);\n    cork_thread_body_free(self->body);\n    cork_buffer_done(&self->error_message);\n    free(self);\n}\n\nvoid\ncork_thread_free(struct cork_thread *self)\n{\n    assert(!self->started);\n    cork_thread_free_private(self);\n}\n\nconst char *\ncork_thread_get_name(struct cork_thread *self)\n{\n    return self->name;\n}\n\ncork_thread_id\ncork_thread_get_id(struct cork_thread *self)\n{\n    return self->id;\n}\n\nstatic void *\ncork_thread_pthread_run(void *vself)\n{\n    int  rc;\n    struct cork_thread  *self = vself;\n    struct cork_thread_descriptor  *desc = cork_thread_descriptor_get();\n\n    desc->current_thread = self;\n    desc->id = self->id;\n    rc = cork_thread_body_run(self->body);\n\n    /* If an error occurred in the body of the thread, save the error into the\n     * cork_thread object so that we can propagate that error when some calls\n     * cork_thread_join. */\n    if (CORK_UNLIKELY(rc != 0)) {\n        if (CORK_LIKELY(cork_error_occurred())) {\n            self->error_code = cork_error_code();\n            cork_buffer_set_string(&self->error_message, cork_error_message());\n        } else {\n            self->error_code = CORK_UNKNOWN_ERROR;\n            cork_buffer_set_string(&self->error_message, \"Unknown error\");\n        }\n    }\n\n    return NULL;\n}\n\nint\ncork_thread_start(struct cork_thread *self)\n{\n    int  rc;\n    pthread_t  thread_id;\n\n    assert(!self->started);\n\n    rc = pthread_create(&thread_id, NULL, cork_thread_pthread_run, self);\n    if (CORK_UNLIKELY(rc != 0)) {\n        cork_system_error_set_explicit(rc);\n        return -1;\n    }\n\n    self->thread_id = thread_id;\n    self->started = true;\n    return 0;\n}\n\nint\ncork_thread_join(struct cork_thread *self)\n{\n    int  rc;\n\n    assert(self->started && !self->joined);\n\n    rc = pthread_join(self->thread_id, NULL);\n    if (CORK_UNLIKELY(rc != 0)) {\n        cork_system_error_set_explicit(rc);\n        cork_thread_free_private(self);\n        return -1;\n    }\n\n    if (CORK_UNLIKELY(self->error_code != CORK_ERROR_NONE)) {\n        cork_error_set_printf\n            (self->error_code, \"Error from thread %s: %s\",\n             self->name, (char *) self->error_message.buf);\n        cork_thread_free_private(self);\n        return -1;\n    }\n\n    cork_thread_free_private(self);\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/Changes",
    "content": "Revision history for libev, a high-performance and full-featured event loop.\n\nTODO: ev_loop_wakeup\nTODO: EV_STANDALONE == NO_HASSEL (do not use clock_gettime in ev_standalone)\nTODO: faq, process a thing in each iteration\nTODO: dbeugging tips, ev_verify, ev_init twice\nTODO: ev_break for immediate exit (EVBREAK_NOW?)\nTODO: ev_feed_child_event\nTODO: document the special problem of signals around fork.\nTODO: store pid for each signal\nTODO: document file descriptor usage per loop\nTODO: store loop pid_t and compare isndie signal handler,store 1 for same, 2 for differign pid, clean up in loop_fork\nTODO: embed watchers need updating when fd changes\nTODO: document portability requirements for atomic pointer access\nTODO: document requirements for function pointers and calling conventions.\n\n4.20 Sat Jun 20 13:01:43 CEST 2015\n\t- prefer noexcept over throw () with C++ 11.\n        - update ecb.h due to incompatibilities with c11.\n        - fix a potential aliasing issue when reading and writing\n          watcher callbacks.\n\n4.19 Thu Sep 25 08:18:25 CEST 2014\n\t- ev.h wasn't valid C++ anymore, which tripped compilers other than\n          clang, msvc or gcc (analyzed by Raphael 'kena' Poss). Unfortunately,\n          C++ doesn't support typedefs for function pointers fully, so the affected\n          declarations have to spell out the types each time.\n\t- when not using autoconf, tighten the check for clock_gettime and related\n          functionality.\n\n4.18 Fri Sep  5 17:55:26 CEST 2014\n\t- events on files were not always generated properly with the\n          epoll backend (testcase by Assaf Inbal).\n\t- mark event pipe fd as cloexec after a fork (analyzed by Sami Farin).\n        - (ecb) support m68k, m88k and sh (patch by Miod Vallat).\n        - use a reasonable fallback for EV_NSIG instead of erroring out\n          when we can't detect the signal set size.\n        - in the absence of autoconf, do not use the clock syscall\n          on glibc >= 2.17 (avoids the syscall AND -lrt on systems\n          doing clock_gettime in userspace).\n        - ensure extern \"C\" function pointers are used for externally-visible\n          loop callbacks (not watcher callbacks yet).\n        - (ecb) work around memory barriers and volatile apparently both being\n          broken in visual studio 2008 and later (analysed and patch by Nicolas Noble).\n\n4.15 Fri Mar  1 12:04:50 CET 2013\n        - destroying a non-default loop would stop the global waitpid\n          watcher (Denis Bilenko).\n\t- queueing pending watchers of higher priority from a watcher now invokes\n          them in a timely fashion (reported by Denis Bilenko).\n\t- add throw() to all libev functions that cannot throw exceptions, for\n          further code size decrease when compiling for C++.\n        - add throw () to callbacks that must not throw exceptions (allocator,\n          syserr, loop acquire/release, periodic reschedule cbs).\n\t- fix event_base_loop return code, add event_get_callback, event_base_new,\n          event_base_get_method calls to improve libevent 1.x emulation and add\n          some libevent 2.x functionality (based on a patch by Jeff Davey).\n        - add more memory fences to fix a bug reported by Jeff Davey. Better\n          be overfenced than underprotected.\n\t- ev_run now returns a boolean status (true meaning watchers are\n          still active).\n\t- ev_once: undef EV_ERROR in ev_kqueue.c, to avoid clashing with\n          libev's EV_ERROR (reported by 191919).\n\t- (ecb) add memory fence support for xlC (Darin McBride).\n\t- (ecb) add memory fence support for gcc-mips (Anton Kirilov).\n\t- (ecb) add memory fence support for gcc-alpha (Christian Weisgerber).\n        - work around some kernels losing file descriptors by leaking\n          the kqueue descriptor in the child.\n        - work around linux inotify not reporting IN_ATTRIB changes for directories\n          in many cases.\n        - include sys/syscall.h instead of plain syscall.h.\n        - check for io watcher loops in ev_verify, check for the most\n          common reported usage bug in ev_io_start.\n        - choose socket vs. WSASocket at compiletime using EV_USE_WSASOCKET.\n        - always use WSASend/WSARecv directly on windows, hoping that this\n          works in all cases (unlike read/write/send/recv...).\n        - try to detect signals around a fork faster (test program by\n          Denis Bilenko).\n        - work around recent glibc versions that leak memory in realloc.\n        - rename ev::embed::set to ev::embed::set_embed to avoid clashing\n          the watcher base set (loop) method.\n        - rewrite the async/signal pipe logic to always keep a valid fd, which\n          simplifies (and hopefully correctifies :) the race checking\n          on fork, at the cost of one extra fd.\n        - add fat, msdos, jffs2, ramfs, ntfs and btrfs to the list of\n          inotify-supporting filesystems.\n        - move orig_CFLAGS assignment to after AC_INIT, as newer autoconf\n          versions ignore it before\n          (https://bugzilla.redhat.com/show_bug.cgi?id=908096).\n        - add some untested android support.\n        - enum expressions must be of type int (reported by Juan Pablo L).\n\n4.11 Sat Feb  4 19:52:39 CET 2012\n\t- INCOMPATIBLE CHANGE: ev_timer_again now clears the pending status, as\n          was documented already, but not implemented in the repeating case.\n        - new compiletime symbols: EV_NO_SMP and EV_NO_THREADS.\n\t- fix a race where the workaround against the epoll fork bugs\n          caused signals to not be handled anymore.\n\t- correct backend_fudge for most backends, and implement a windows\n          specific workaround to avoid looping because we call both\n          select and Sleep, both with different time resolutions.\n        - document range and guarantees of ev_sleep.\n        - document reasonable ranges for periodics interval and offset.\n        - rename backend_fudge to backend_mintime to avoid future confusion :)\n\t- change the default periodic reschedule function to hopefully be more\n          exact and correct even in corner cases or in the far future.\n        - do not rely on -lm anymore: use it when available but use our\n          own floor () if it is missing. This should make it easier to embed,\n          as no external libraries are required.\n        - strategically import macros from libecb and mark rarely-used functions\n          as cache-cold (saving almost 2k code size on typical amd64 setups).\n        - add Symbols.ev and Symbols.event files, that were missing.\n        - fix backend_mintime value for epoll (was 1/1024, is 1/1000 now).\n        - fix #3 \"be smart about timeouts\" to not \"deadlock\" when\n          timeout == now, also improve the section overall.\n        - avoid \"AVOIDING FINISHING BEFORE RETURNING\" idiom.\n        - support new EV_API_STATIC mode to make all libev symbols\n          static.\n        - supply default CFLAGS of -g -O3 with gcc when original CFLAGS\n          were empty.\n\n4.04 Wed Feb 16 09:01:51 CET 2011\n\t- fix two problems in the native win32 backend, where reuse of fd's\n          with different underlying handles caused handles not to be removed\n          or added to the select set (analyzed and tested by Bert Belder).\n\t- do no rely on ceil() in ev_e?poll.c.\n        - backport libev to HP-UX versions before 11 v3.\n        - configure did not detect nanosleep and clock_gettime properly when\n          they are available in the libc (as opposed to -lrt).\n\n4.03 Tue Jan 11 14:37:25 CET 2011\n\t- officially support polling files with all backends.\n\t- support files, /dev/zero etc. the same way as select in the epoll\n          backend, by generating events on our own.\n        - ports backend: work around solaris bug 6874410 and many related ones\n          (EINTR, maybe more), with no performance loss (note that the solaris\n          bug report is actually wrong, reality is far more bizarre and broken\n          than that).\n\t- define EV_READ/EV_WRITE as macros in event.h, as some programs use\n          #ifdef to test for them.\n        - new (experimental) function: ev_feed_signal.\n        - new (to become default) EVFLAG_NOSIGMASK flag.\n        - new EVBACKEND_MASK symbol.\n        - updated COMMON IDIOMS SECTION.\n\n4.01 Fri Nov  5 21:51:29 CET 2010\n        - automake fucked it up, apparently, --add-missing -f is not quite enough\n          to make it update its files, so 4.00 didn't install ev++.h and\n          event.h on make install. grrr.\n        - ev_loop(count|depth) didn't return anything (Robin Haberkorn).\n        - change EV_UNDEF to 0xffffffff to silence some overzealous compilers.\n        - use \"(libev) \" prefix for all libev error messages now.\n\n4.00 Mon Oct 25 12:32:12 CEST 2010\n\t- \"PORTING FROM LIBEV 3.X TO 4.X\" (in ev.pod) is recommended reading.\n\t- ev_embed_stop did not correctly stop the watcher (very good\n          testcase by Vladimir Timofeev).\n        - ev_run will now always update the current loop time - it erroneously\n          didn't when idle watchers were active, causing timers not to fire.\n        - fix a bug where a timeout of zero caused the timer not to fire\n          in the libevent emulation (testcase by Péter Szabó).\n\t- applied win32 fixes by Michael Lenaghan (also James Mansion).\n\t- replace EV_MINIMAL by EV_FEATURES.\n        - prefer EPOLL_CTL_ADD over EPOLL_CTL_MOD in some more cases, as it\n          seems the former is *much* faster than the latter.\n        - linux kernel version detection (for inotify bug workarounds)\n          did not work properly.\n        - reduce the number of spurious wake-ups with the ports backend.\n        - remove dependency on sys/queue.h on freebsd (patch by Vanilla Hsu).\n        - do async init within ev_async_start, not ev_async_set, which avoids\n          an API quirk where the set function must be called in the C++ API\n          even when there is nothing to set.\n        - add (undocumented) EV_ENABLE when adding events with kqueue,\n          this might help with OS X, which seems to need it despite documenting\n          not to need it (helpfully pointed out by Tilghman Lesher).\n        - do not use poll by default on freebsd, it's broken (what isn't\n          on freebsd...).\n        - allow to embed epoll on kernels >= 2.6.32.\n        - configure now prepends -O3, not appends it, so one can still\n          override it.\n        - ev.pod: greatly expanded the portability section, added a porting\n          section, a description of watcher states and made lots of minor fixes.\n        - disable poll backend on AIX, the poll header spams the namespace\n          and it's not worth working around dead platforms (reported\n          and analyzed by Aivars Kalvans).\n        - improve header file compatibility of the standalone eventfd code\n          in an obscure case.\n        - implement EV_AVOID_STDIO option.\n        - do not use sscanf to parse linux version number (smaller, faster,\n          no sscanf dependency).\n        - new EV_CHILD_ENABLE and EV_SIGNAL_ENABLE configurable settings.\n        - update libev.m4 HAVE_CLOCK_SYSCALL test for newer glibcs.\n        - add section on accept() problems to the manpage.\n        - rename EV_TIMEOUT to EV_TIMER.\n        - rename ev_loop_count/depth/verify/loop/unloop.\n        - remove ev_default_destroy and ev_default_fork.\n        - switch to two-digit minor version.\n        - work around an apparent gentoo compiler bug.\n        - define _DARWIN_UNLIMITED_SELECT. just so.\n        - use enum instead of #define for most constants.\n        - improve compatibility to older C++ compilers.\n        - (experimental) ev_run/ev_default_loop/ev_break/ev_loop_new have now\n          default arguments when compiled as C++.\n        - enable automake dependency tracking.\n        - ev_loop_new no longer leaks memory when loop creation failed.\n        - new ev_cleanup watcher type.\n\n3.9  Thu Dec 31 07:59:59 CET 2009\n\t- signalfd is no longer used by default and has to be requested\n          explicitly - this means that easy to catch bugs become hard to\n          catch race conditions, but the users have spoken.\n        - point out the unspecified signal mask in the documentation, and\n          that this is a race condition regardless of EV_SIGNALFD.\n\t- backport inotify code to C89.\n        - inotify file descriptors could leak into child processes.\n        - ev_stat watchers could keep an erroneous extra ref on the loop,\n          preventing exit when unregistering all watchers (testcases\n          provided by ry@tinyclouds.org).\n        - implement EV_WIN32_HANDLE_TO_FD and EV_WIN32_CLOSE_FD configuration\n          symbols to make it easier for apps to do their own fd management.\n        - support EV_IDLE_ENABLE being disabled in ev++.h\n          (patch by Didier Spezia).\n        - take advantage of inotify_init1, if available, to set cloexec/nonblock\n          on fd creation, to avoid races.\n        - the signal handling pipe wasn't always initialised under windows\n          (analysed by lekma).\n        - changed minimum glibc requirement from glibc 2.9 to 2.7, for\n          signalfd.\n        - add missing string.h include (Denis F. Latypoff).\n        - only replace ev_stat.prev when we detect an actual difference,\n          so prev is (almost) always different to attr. this might\n          have caused the problems with 04_stat.t.\n        - add ev::timer->remaining () method to C++ API.\n\n3.8  Sun Aug  9 14:30:45 CEST 2009\n\t- incompatible change: do not necessarily reset signal handler\n          to SIG_DFL when a sighandler is stopped.\n        - ev_default_destroy did not properly free or zero some members,\n          potentially causing crashes and memory corruption on repeated\n          ev_default_destroy/ev_default_loop calls.\n\t- take advantage of signalfd on GNU/Linux systems.\n\t- document that the signal mask might be in an unspecified\n          state when using libev's signal handling.\n        - take advantage of some GNU/Linux calls to set cloexec/nonblock\n          on fd creation, to avoid race conditions.\n\n3.7  Fri Jul 17 16:36:32 CEST 2009\n\t- ev_unloop and ev_loop wrongly used a global variable to exit loops,\n          instead of using a per-loop variable (bug caught by accident...).\n\t- the ev_set_io_collect_interval interpretation has changed.\n        - add new functionality: ev_set_userdata, ev_userdata,\n          ev_set_invoke_pending_cb, ev_set_loop_release_cb,\n          ev_invoke_pending, ev_pending_count, together with a long example\n          about thread locking.\n        - add ev_timer_remaining (as requested by Denis F. Latypoff).\n        - add ev_loop_depth.\n        - calling ev_unloop in fork/prepare watchers will no longer poll\n          for new events.\n\t- Denis F. Latypoff corrected many typos in example code snippets.\n        - honor autoconf detection of EV_USE_CLOCK_SYSCALL, also double-\n          check that the syscall number is available before trying to\n          use it (reported by ry@tinyclouds).\n        - use GetSystemTimeAsFileTime instead of _timeb on windows, for\n          slightly higher accuracy.\n        - properly declare ev_loop_verify and ev_now_update even when\n          !EV_MULTIPLICITY.\n        - do not compile in any priority code when EV_MAXPRI == EV_MINPRI.\n        - support EV_MINIMAL==2 for a reduced API.\n        - actually 0-initialise struct sigaction when installing signals.\n        - add section on hibernate and stopped processes to ev_timer docs.\n\n3.6  Tue Apr 28 02:49:30 CEST 2009\n\t- multiple timers becoming ready within an event loop iteration\n          will be invoked in the \"correct\" order now.\n\t- do not leave the event loop early just because we have no active\n          watchers, fixing a problem when embedding a kqueue loop\n          that has active kernel events but no registered watchers\n          (reported by blacksand blacksand).\n\t- correctly zero the idx values for arrays, so destroying and\n          reinitialising the default loop actually works (patch by\n          Malek Hadj-Ali).\n        - implement ev_suspend and ev_resume.\n        - new EV_CUSTOM revents flag for use by applications.\n        - add documentation section about priorities.\n        - add a glossary to the documentation.\n        - extend the ev_fork description slightly.\n        - optimize a jump out of call_pending.\n\n3.53 Sun Feb 15 02:38:20 CET 2009\n\t- fix a bug in event pipe creation on win32 that would cause a\n          failed assertion on event loop creation (patch by Malek Hadj-Ali).\n\t- probe for CLOCK_REALTIME support at runtime as well and fall\n          back to gettimeofday if there is an error, to support older\n          operating systems with newer header files/libraries.\n        - prefer gettimeofday over clock_gettime with USE_CLOCK_SYSCALL\n          (default most everywhere), otherwise not.\n\n3.52 Wed Jan  7 21:43:02 CET 2009\n\t- fix compilation of select backend in fd_set mode when NFDBITS is\n          missing (to get it to compile on QNX, reported by Rodrigo Campos).\n        - better select-nfds handling when select backend is in fd_set mode.\n        - diagnose fd_set overruns when select backend is in fd_set mode.\n        - due to a thinko, instead of disabling everything but\n          select on the borked OS X platform, everything but select was\n          allowed (reported by Emanuele Giaquinta).\n        - actually verify that local and remote port are matching in\n          libev's socketpair emulation, which makes denial-of-service\n          attacks harder (but not impossible - it's windows). Make sure\n          it even works under vista, which thinks that getpeer/sockname\n          should return fantasy port numbers.\n        - include \"libev\" in all assertion messages for potentially\n          clearer diagnostics.\n        - event_get_version (libevent compatibility) returned\n          a useless string instead of the expected version string\n          (patch by W.C.A. Wijngaards).\n\n3.51 Wed Dec 24 23:00:11 CET 2008\n        - fix a bug where an inotify watcher was added twice, causing\n          freezes on hash collisions (reported and analysed by Graham Leggett).\n\t- new config symbol, EV_USE_CLOCK_SYSCALL, to make libev use\n          a direct syscall - slower, but no dependency on librt et al.\n        - assume negative return values != -1 signals success of port_getn\n          (http://cvs.epicsol.org/cgi/viewcvs.cgi/epic5/source/newio.c?rev=1.52)\n          (no known failure reports, but it doesn't hurt).\n        - fork detection in ev_embed now stops and restarts the watcher\n          automatically.\n        - EXPERIMENTAL: default the method to operator () in ev++.h,\n          to make it nicer to use functors (requested by Benedek László).\n        - fixed const object callbacks in ev++.h.\n        - replaced loop_ref argument of watcher.set (loop) by a direct\n          ev_loop * in ev++.h, to avoid clashes with functor patch.\n        - do not try to watch the empty string via inotify.\n        - inotify watchers could be leaked under certain circumstances.\n        - OS X 10.5 is actually even more broken than earlier versions,\n          so fall back to select on that piece of garbage.\n        - fixed some weirdness in the ev_embed documentation.\n\n3.49 Wed Nov 19 11:26:53 CET 2008\n\t- ev_stat watchers will now use inotify as a mere hint on\n          kernels <2.6.25, or if the filesystem is not in the\n          \"known to be good\" list.\n        - better mingw32 compatibility (it's not as borked as native win32)\n          (analysed by Roger Pack).\n        - include stdio.h in the example program, as too many people are\n          confused by the weird C language otherwise. I guess the next thing\n          I get told is that the \"...\" ellipses in the examples don't compile\n          with their C compiler.\n\n3.48 Thu Oct 30 09:02:37 CET 2008\n\t- further optimise away the EPOLL_CTL_ADD/MOD combo in the epoll\n          backend by assuming the kernel event mask hasn't changed if\n          ADD fails with EEXIST.\n        - work around spurious event notification bugs in epoll by using\n          a 32-bit generation counter. recreate kernel state if we receive\n          spurious notifications or unwanted events. this is very costly,\n          but I didn't come up with this horrible design.\n        - use memset to initialise most arrays now and do away with the\n          init functions.\n        - expand time-out strategies into a \"Be smart about timeouts\" section.\n        - drop the \"struct\" from all ev_watcher declarations in the\n          documentation and did other clarifications (yeah, it was a mistake\n          to have a struct AND a function called ev_loop).\n\t- fix a bug where ev_default would not initialise the default\n          loop again after it was destroyed with ev_default_destroy.\n        - rename syserr to ev_syserr to avoid name clashes when embedding,\n          do similar changes for event.c.\n\n3.45 Tue Oct 21 21:59:26 CEST 2008\n\t- disable inotify usage on linux <2.6.25, as it is broken\n          (reported by Yoann Vandoorselaere).\n        - ev_stat erroneously would try to add inotify watchers\n          even when inotify wasn't available (this should only\n          have a performance impact).\n\t- ev_once now passes both timeout and io to the callback if both\n          occur concurrently, instead of giving timeouts precedence.\n\t- disable EV_USE_INOTIFY when sys/inotify.h is too old.\n\n3.44 Mon Sep 29 05:18:39 CEST 2008\n\t- embed watchers now automatically invoke ev_loop_fork on the\n          embedded loop when the parent loop forks.\n\t- new function: ev_now_update (loop).\n\t- verify_watcher was not marked static.\n        - improve the \"associating...\" manpage section.\n        - documentation tweaks here and there.\n\n3.43 Sun Jul  6 05:34:41 CEST 2008\n\t- include more include files on windows to get struct _stati64\n          (reported by Chris Hulbert, but doesn't quite fix his issue).\n\t- add missing #include <io.h> in ev.c on windows (reported by\n          Matt Tolton).\n\n3.42 Tue Jun 17 12:12:07 CEST 2008\n\t- work around yet another windows bug: FD_SET actually adds fd's\n          multiple times to the fd_*SET*, despite official MSN docs claiming\n          otherwise. Reported and well-analysed by Matt Tolton.\n\t- define NFDBITS to 0 when EV_SELECT_IS_WINSOCKET to make it compile\n          (reported any analysed by Chris Hulbert).\n        - fix a bug in ev_ebadf (this function is only used to catch\n          programming errors in the libev user). reported by Matt Tolton.\n        - fix a bug in fd_intern on win32 (could lead to compile errors\n          under some circumstances, but would work correctly if it compiles).\n          reported by Matt Tolton.\n        - (try to) work around missing lstat on windows.\n\t- pass in the write fd set as except fd set under windows. windows\n          is so uncontrollably lame that it requires this. this means that\n          switching off oobinline is not supported (but tcp/ip doesn't\n          have oob, so that would be stupid anyways.\n        - use posix module symbol to auto-detect monotonic clock presence\n          and some other default values.\n\n3.41 Fri May 23 18:42:54 CEST 2008\n\t- work around an obscure bug in winsocket select: if you\n          provide only empty fd sets then select returns WSAEINVAL. how sucky.\n        - improve timer scheduling stability and reduce use of time_epsilon.\n        - use 1-based 2-heap for EV_MINIMAL, simplifies code, reduces\n          codesize and makes for better cache-efficiency.\n        - use 3-based 4-heap for !EV_MINIMAL. this makes better use\n          of cpu cache lines and gives better growth behaviour than\n          2-based heaps.\n        - cache timestamp within heap for !EV_MINIMAL, to avoid random\n          memory accesses.\n        - document/add EV_USE_4HEAP and EV_HEAP_CACHE_AT.\n        - fix a potential aliasing issue in ev_timer_again.\n        - add/document ev_periodic_at, retract direct access to ->at.\n        - improve ev_stat docs.\n        - add portability requirements section.\n\t- fix manpage headers etc.\n        - normalise WSA error codes to lower range on windows.\n        - add consistency check code that can be called automatically\n          or on demand to check for internal structures (ev_loop_verify).\n\n3.31 Wed Apr 16 20:45:04 CEST 2008\n\t- added last minute fix for ev_poll.c by Brandon Black.\n\n3.3  Wed Apr 16 19:04:10 CEST 2008\n        - event_base_loopexit should return 0 on success\n          (W.C.A. Wijngaards).\n\t- added linux eventfd support.\n        - try to autodetect epoll and inotify support\n          by libc header version if not using autoconf.\n        - new symbols: EV_DEFAULT_UC and EV_DEFAULT_UC_.\n        - declare functions defined in ev.h as inline if\n          C99 or gcc are available.\n        - enable inlining with gcc versions 2 and 3.\n        - work around broken poll implementations potentially\n          not clearing revents field in ev_poll (Brandon Black)\n          (no such systems are known at this time).\n        - work around a bug in realloc on openbsd and darwin,\n          also makes the erroneous valgrind complaints\n          go away (noted by various people).\n        - fix ev_async_pending, add c++ wrapper for ev_async\n          (based on patch sent by Johannes Deisenhofer).\n        - add sensible set method to ev::embed.\n        - made integer constants type int in ev.h.\n\n3.2  Wed Apr  2 17:11:19 CEST 2008\n\t- fix a 64 bit overflow issue in the select backend,\n          by using fd_mask instead of int for the mask.\n        - rename internal sighandler to avoid clash with very old perls.\n        - entering ev_loop will not clear the ONESHOT or NONBLOCKING\n          flags of any outer loops anymore.\n        - add ev_async_pending.\n\n3.1  Thu Mar 13 13:45:22 CET 2008\n\t- implement ev_async watchers.\n        - only initialise signal pipe on demand.\n\t- make use of sig_atomic_t configurable.\n        - improved documentation.\n\n3.0  Mon Jan 28 13:14:47 CET 2008\n\t- API/ABI bump to version 3.0.\n\t- ev++.h includes \"ev.h\" by default now, not <ev.h>.\n\t- slightly improved documentation.\n\t- speed up signal detection after a fork.\n        - only optionally return trace status changed in ev_child\n          watchers.\n        - experimental (and undocumented) loop wrappers for ev++.h.\n\n2.01 Tue Dec 25 08:04:41 CET 2007\n\t- separate Changes file.\n\t- fix ev_path_set => ev_stat_set typo.\n        - remove event_compat.h from the libev tarball.\n        - change how include files are found.\n        - doc updates.\n        - update licenses, explicitly allow for GPL relicensing.\n\n2.0  Sat Dec 22 17:47:03 CET 2007\n        - new ev_sleep, ev_set_(io|timeout)_collect_interval.\n        - removed epoll from embeddable fd set.\n        - fix embed watchers.\n\t- renamed ev_embed.loop to other.\n\t- added exported Symbol tables.\n        - undefine member wrapper macros at the end of ev.c.\n        - respect EV_H in ev++.h.\n\n1.86 Tue Dec 18 02:36:57 CET 2007\n\t- fix memleak on loop destroy (not relevant for perl).\n\n1.85 Fri Dec 14 20:32:40 CET 2007\n        - fix some aliasing issues w.r.t. timers and periodics\n          (not relevant for perl).\n\n(for historic versions refer to EV/Changes, found in the Perl interface)\n\n0.1  Wed Oct 31 21:31:48 CET 2007\n\t- original version; hacked together in <24h.\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/LICENSE",
    "content": "All files in libev are\nCopyright (c)2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann.\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\n      notice, this list of conditions and the following disclaimer.\n\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\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\nAlternatively, the contents of this package may be used under the terms\nof the GNU General Public License (\"GPL\") version 2 or any later version,\nin which case the provisions of the GPL are applicable instead of the\nabove. If you wish to allow the use of your version of this package only\nunder the terms of the GPL and not to allow others to use your version of\nthis file under the BSD license, indicate your decision by deleting the\nprovisions above and replace them with the notice and other provisions\nrequired by the GPL in this and the other files of this package. If you do\nnot delete the provisions above, a recipient may use your version of this\nfile under either the BSD or the GPL.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/Makefile.am",
    "content": "AUTOMAKE_OPTIONS = foreign\n\nVERSION_INFO = 4:0:0\n\nEXTRA_DIST = LICENSE Changes libev.m4 autogen.sh \\\n\t     ev_vars.h ev_wrap.h \\\n\t     ev_epoll.c ev_select.c ev_poll.c ev_kqueue.c ev_port.c ev_win32.c \\\n\t     ev.3 ev.pod Symbols.ev Symbols.event\n\nnoinst_MANS = ev.3\n\nnoinst_HEADERS = ev.h ev++.h event.h\n\nnoinst_LTLIBRARIES = libev.la\n\nlibev_la_SOURCES = ev.c event.c\nlibev_la_LDFLAGS = -version-info $(VERSION_INFO)\n\nev.3: ev.pod\n\tpod2man -n LIBEV -r \"libev-$(VERSION)\" -c \"libev - high performance full featured event loop\" -s3 <$< >$@\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = libev\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/auto/depcomp $(noinst_HEADERS) README\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibev_la_LIBADD =\nam_libev_la_OBJECTS = ev.lo event.lo\nlibev_la_OBJECTS = $(am_libev_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibev_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libev_la_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/auto/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libev_la_SOURCES)\nDIST_SOURCES = $(libev_la_SOURCES)\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nHEADERS = $(noinst_HEADERS)\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nAUTOMAKE_OPTIONS = foreign\nVERSION_INFO = 4:0:0\nEXTRA_DIST = LICENSE Changes libev.m4 autogen.sh \\\n\t     ev_vars.h ev_wrap.h \\\n\t     ev_epoll.c ev_select.c ev_poll.c ev_kqueue.c ev_port.c ev_win32.c \\\n\t     ev.3 ev.pod Symbols.ev Symbols.event\n\nnoinst_MANS = ev.3\nnoinst_HEADERS = ev.h ev++.h event.h\nnoinst_LTLIBRARIES = libev.la\nlibev_la_SOURCES = ev.c event.c\nlibev_la_LDFLAGS = -version-info $(VERSION_INFO)\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libev/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign libev/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\n\nlibev.la: $(libev_la_OBJECTS) $(libev_la_DEPENDENCIES) $(EXTRA_libev_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libev_la_LINK)  $(libev_la_OBJECTS) $(libev_la_LIBADD) $(LIBS)\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)/ev.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES) $(HEADERS)\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \\\n\tctags-am distclean distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-am uninstall uninstall-am\n\n\nev.3: ev.pod\n\tpod2man -n LIBEV -r \"libev-$(VERSION)\" -c \"libev - high performance full featured event loop\" -s3 <$< >$@\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/README",
    "content": "libev is a high-performance event loop/event model with lots of features.\n(see benchmark at http://libev.schmorp.de/bench.html)\n\n\nABOUT\n\n   Homepage: http://software.schmorp.de/pkg/libev\n   Mailinglist: libev@lists.schmorp.de\n                http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev\n   Library Documentation: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod\n\n   Libev is modelled (very losely) after libevent and the Event perl\n   module, but is faster, scales better and is more correct, and also more\n   featureful. And also smaller. Yay.\n\n   Some of the specialties of libev not commonly found elsewhere are:\n   \n   - extensive and detailed, readable documentation (not doxygen garbage).\n   - fully supports fork, can detect fork in various ways and automatically\n     re-arms kernel mechanisms that do not support fork.\n   - highly optimised select, poll, epoll, kqueue and event ports backends.\n   - filesystem object (path) watching (with optional linux inotify support).\n   - wallclock-based times (using absolute time, cron-like).\n   - relative timers/timeouts (handle time jumps).\n   - fast intra-thread communication between multiple\n     event loops (with optional fast linux eventfd backend).\n   - extremely easy to embed (fully documented, no dependencies,\n     autoconf supported but optional).\n   - very small codebase, no bloated library, simple code.\n   - fully extensible by being able to plug into the event loop,\n     integrate other event loops, integrate other event loop users.\n   - very little memory use (small watchers, small event loop data).\n   - optional C++ interface allowing method and function callbacks\n     at no extra memory or runtime overhead.\n   - optional Perl interface with similar characteristics (capable\n     of running Glib/Gtk2 on libev).\n   - support for other languages (multiple C++ interfaces, D, Ruby,\n     Python) available from third-parties.\n\n   Examples of programs that embed libev: the EV perl module, node.js,\n   auditd, rxvt-unicode, gvpe (GNU Virtual Private Ethernet), the\n   Deliantra MMORPG server (http://www.deliantra.net/), Rubinius (a\n   next-generation Ruby VM), the Ebb web server, the Rev event toolkit.\n\n\nCONTRIBUTORS\n\n   libev was written and designed by Marc Lehmann and Emanuele Giaquinta.\n\n   The following people sent in patches or made other noteworthy\n   contributions to the design (for minor patches, see the Changes\n   file. If I forgot to include you, please shout at me, it was an\n   accident):\n\n   W.C.A. Wijngaards\n   Christopher Layne\n   Chris Brody\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/Symbols.ev",
    "content": "ev_async_send\nev_async_start\nev_async_stop\nev_backend\nev_break\nev_check_start\nev_check_stop\nev_child_start\nev_child_stop\nev_cleanup_start\nev_cleanup_stop\nev_clear_pending\nev_default_loop\nev_default_loop_ptr\nev_depth\nev_embed_start\nev_embed_stop\nev_embed_sweep\nev_embeddable_backends\nev_feed_event\nev_feed_fd_event\nev_feed_signal\nev_feed_signal_event\nev_fork_start\nev_fork_stop\nev_idle_start\nev_idle_stop\nev_invoke\nev_invoke_pending\nev_io_start\nev_io_stop\nev_iteration\nev_loop_destroy\nev_loop_fork\nev_loop_new\nev_now\nev_now_update\nev_once\nev_pending_count\nev_periodic_again\nev_periodic_start\nev_periodic_stop\nev_prepare_start\nev_prepare_stop\nev_recommended_backends\nev_ref\nev_resume\nev_run\nev_set_allocator\nev_set_invoke_pending_cb\nev_set_io_collect_interval\nev_set_loop_release_cb\nev_set_syserr_cb\nev_set_timeout_collect_interval\nev_set_userdata\nev_signal_start\nev_signal_stop\nev_sleep\nev_stat_start\nev_stat_stat\nev_stat_stop\nev_supported_backends\nev_suspend\nev_time\nev_timer_again\nev_timer_remaining\nev_timer_start\nev_timer_stop\nev_unref\nev_userdata\nev_verify\nev_version_major\nev_version_minor\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/Symbols.event",
    "content": "event_active\nevent_add\nevent_base_dispatch\nevent_base_free\nevent_base_get_method\nevent_base_loop\nevent_base_loopexit\nevent_base_new\nevent_base_once\nevent_base_priority_init\nevent_base_set\nevent_del\nevent_dispatch\nevent_get_callback\nevent_get_method\nevent_get_version\nevent_init\nevent_loop\nevent_loopexit\nevent_once\nevent_pending\nevent_priority_init\nevent_priority_set\nevent_set\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/aclocal.m4",
    "content": "# generated automatically by aclocal 1.14.1 -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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# 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\nm4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\nm4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,\n[m4_warning([this file was generated for autoconf 2.69.\nYou have another version of autoconf.  It may work, but is not guaranteed to.\nIf you have problems, you may need to regenerate the build system entirely.\nTo do so, use the procedure documented by the package, typically 'autoreconf'.])])\n\n# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\nm4_define([_LT_COPYING], [dnl\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n])\n\n# serial 57 LT_INIT\n\n\n# LT_PREREQ(VERSION)\n# ------------------\n# Complain and exit if this libtool version is less that VERSION.\nm4_defun([LT_PREREQ],\n[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,\n       [m4_default([$3],\n\t\t   [m4_fatal([Libtool version $1 or higher is required],\n\t\t             63)])],\n       [$2])])\n\n\n# _LT_CHECK_BUILDDIR\n# ------------------\n# Complain if the absolute build directory name contains unusual characters\nm4_defun([_LT_CHECK_BUILDDIR],\n[case `pwd` in\n  *\\ * | *\\\t*)\n    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;\nesac\n])\n\n\n# LT_INIT([OPTIONS])\n# ------------------\nAC_DEFUN([LT_INIT],\n[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT\nAC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl\nAC_BEFORE([$0], [LT_LANG])dnl\nAC_BEFORE([$0], [LT_OUTPUT])dnl\nAC_BEFORE([$0], [LTDL_INIT])dnl\nm4_require([_LT_CHECK_BUILDDIR])dnl\n\ndnl Autoconf doesn't catch unexpanded LT_ macros by default:\nm4_pattern_forbid([^_?LT_[A-Z_]+$])dnl\nm4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl\ndnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4\ndnl unless we require an AC_DEFUNed macro:\nAC_REQUIRE([LTOPTIONS_VERSION])dnl\nAC_REQUIRE([LTSUGAR_VERSION])dnl\nAC_REQUIRE([LTVERSION_VERSION])dnl\nAC_REQUIRE([LTOBSOLETE_VERSION])dnl\nm4_require([_LT_PROG_LTMAIN])dnl\n\n_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])\n\ndnl Parse OPTIONS\n_LT_SET_OPTIONS([$0], [$1])\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\nAC_SUBST(LIBTOOL)dnl\n\n_LT_SETUP\n\n# Only expand once:\nm4_define([LT_INIT])\n])# LT_INIT\n\n# Old names:\nAU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])\nAU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PROG_LIBTOOL], [])\ndnl AC_DEFUN([AM_PROG_LIBTOOL], [])\n\n\n# _LT_CC_BASENAME(CC)\n# -------------------\n# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.\nm4_defun([_LT_CC_BASENAME],\n[for cc_temp in $1\"\"; do\n  case $cc_temp in\n    compile | *[[\\\\/]]compile | ccache | *[[\\\\/]]ccache ) ;;\n    distcc | *[[\\\\/]]distcc | purify | *[[\\\\/]]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"$cc_temp\" | $SED \"s%.*/%%; s%^$host_alias-%%\"`\n])\n\n\n# _LT_FILEUTILS_DEFAULTS\n# ----------------------\n# It is okay to use these file commands and assume they have been set\n# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.\nm4_defun([_LT_FILEUTILS_DEFAULTS],\n[: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n])# _LT_FILEUTILS_DEFAULTS\n\n\n# _LT_SETUP\n# ---------\nm4_defun([_LT_SETUP],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nAC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl\nAC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl\n\n_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl\ndnl\n_LT_DECL([], [host_alias], [0], [The host system])dnl\n_LT_DECL([], [host], [0])dnl\n_LT_DECL([], [host_os], [0])dnl\ndnl\n_LT_DECL([], [build_alias], [0], [The build system])dnl\n_LT_DECL([], [build], [0])dnl\n_LT_DECL([], [build_os], [0])dnl\ndnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\ndnl\nAC_REQUIRE([AC_PROG_LN_S])dnl\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl\ndnl\nAC_REQUIRE([LT_CMD_MAX_LEN])dnl\n_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally \"o\")])dnl\n_LT_DECL([], [exeext], [0], [Executable file suffix (normally \"\")])dnl\ndnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_CHECK_SHELL_FEATURES])dnl\nm4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl\nm4_require([_LT_CMD_RELOAD])dnl\nm4_require([_LT_CHECK_MAGIC_METHOD])dnl\nm4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl\nm4_require([_LT_CMD_OLD_ARCHIVE])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\nm4_require([_LT_WITH_SYSROOT])dnl\n\n_LT_CONFIG_LIBTOOL_INIT([\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n])\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n_LT_CHECK_OBJDIR\n\nm4_require([_LT_TAG_COMPILER])dnl\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\n_LT_CC_BASENAME([$compiler])\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    _LT_PATH_MAGIC\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\nLT_SUPPORTED_TAG([CC])\n_LT_LANG_C_CONFIG\n_LT_LANG_DEFAULT_CONFIG\n_LT_CONFIG_COMMANDS\n])# _LT_SETUP\n\n\n# _LT_PREPARE_SED_QUOTE_VARS\n# --------------------------\n# Define a few sed substitution that help us do robust quoting.\nm4_defun([_LT_PREPARE_SED_QUOTE_VARS],\n[# Backslashify metacharacters that are still active within\n# double-quoted strings.\nsed_quote_subst='s/\\([[\"`$\\\\]]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([[\"`\\\\]]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n])\n\n# _LT_PROG_LTMAIN\n# ---------------\n# Note that this code is called both from `configure', and `config.status'\n# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,\n# `config.status' has no value for ac_aux_dir unless we are using Automake,\n# so we pass a copy along to make sure it has a sensible value anyway.\nm4_defun([_LT_PROG_LTMAIN],\n[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl\n_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])\nltmain=\"$ac_aux_dir/ltmain.sh\"\n])# _LT_PROG_LTMAIN\n\n\n\n# So that we can recreate a full libtool script including additional\n# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS\n# in macros and then make a single call at the end using the `libtool'\n# label.\n\n\n# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])\n# ----------------------------------------\n# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL_INIT],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_INIT])\n\n\n# _LT_CONFIG_LIBTOOL([COMMANDS])\n# ------------------------------\n# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])\n\n\n# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])\n# -----------------------------------------------------\nm4_defun([_LT_CONFIG_SAVE_COMMANDS],\n[_LT_CONFIG_LIBTOOL([$1])\n_LT_CONFIG_LIBTOOL_INIT([$2])\n])\n\n\n# _LT_FORMAT_COMMENT([COMMENT])\n# -----------------------------\n# Add leading comment marks to the start of each line, and a trailing\n# full-stop to the whole comment if one is not present already.\nm4_define([_LT_FORMAT_COMMENT],\n[m4_ifval([$1], [\nm4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],\n              [['`$\\]], [\\\\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])\n)])\n\n\n\n\n\n# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])\n# -------------------------------------------------------------------\n# CONFIGNAME is the name given to the value in the libtool script.\n# VARNAME is the (base) name used in the configure script.\n# VALUE may be 0, 1 or 2 for a computed quote escaped value based on\n# VARNAME.  Any other value will be used directly.\nm4_define([_LT_DECL],\n[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],\n    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],\n\t[m4_ifval([$1], [$1], [$2])])\n    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])\n    m4_ifval([$4],\n\t[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])\n    lt_dict_add_subkey([lt_decl_dict], [$2],\n\t[tagged?], [m4_ifval([$5], [yes], [no])])])\n])\n\n\n# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])\n# --------------------------------------------------------\nm4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])\n\n\n# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_tag_varnames],\n[_lt_decl_filter([tagged?], [yes], $@)])\n\n\n# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])\n# ---------------------------------------------------------\nm4_define([_lt_decl_filter],\n[m4_case([$#],\n  [0], [m4_fatal([$0: too few arguments: $#])],\n  [1], [m4_fatal([$0: too few arguments: $#: $1])],\n  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],\n  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],\n  [lt_dict_filter([lt_decl_dict], $@)])[]dnl\n])\n\n\n# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])\n# --------------------------------------------------\nm4_define([lt_decl_quote_varnames],\n[_lt_decl_filter([value], [1], $@)])\n\n\n# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_dquote_varnames],\n[_lt_decl_filter([value], [2], $@)])\n\n\n# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_varnames_tagged],\n[m4_assert([$# <= 2])dnl\n_$0(m4_quote(m4_default([$1], [[, ]])),\n    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),\n    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])\nm4_define([_lt_decl_varnames_tagged],\n[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])\n\n\n# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_all_varnames],\n[_$0(m4_quote(m4_default([$1], [[, ]])),\n     m4_if([$2], [],\n\t   m4_quote(lt_decl_varnames),\n\tm4_quote(m4_shift($@))))[]dnl\n])\nm4_define([_lt_decl_all_varnames],\n[lt_join($@, lt_decl_varnames_tagged([$1],\n\t\t\tlt_decl_tag_varnames([[, ]], m4_shift($@))))dnl\n])\n\n\n# _LT_CONFIG_STATUS_DECLARE([VARNAME])\n# ------------------------------------\n# Quote a variable value, and forward it to `config.status' so that its\n# declaration there will have the same value as in `configure'.  VARNAME\n# must have a single quote delimited value for this to work.\nm4_define([_LT_CONFIG_STATUS_DECLARE],\n[$1='`$ECHO \"$][$1\" | $SED \"$delay_single_quote_subst\"`'])\n\n\n# _LT_CONFIG_STATUS_DECLARATIONS\n# ------------------------------\n# We delimit libtool config variables with single quotes, so when\n# we write them to config.status, we have to be sure to quote all\n# embedded single quotes properly.  In configure, this macro expands\n# each variable declared with _LT_DECL (and _LT_TAGDECL) into:\n#\n#    <var>='`$ECHO \"$<var>\" | $SED \"$delay_single_quote_subst\"`'\nm4_defun([_LT_CONFIG_STATUS_DECLARATIONS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),\n    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAGS\n# ----------------\n# Output comment and list of tags supported by the script\nm4_defun([_LT_LIBTOOL_TAGS],\n[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl\navailable_tags=\"_LT_TAGS\"dnl\n])\n\n\n# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])\n# -----------------------------------\n# Extract the dictionary values for VARNAME (optionally with TAG) and\n# expand to a commented shell variable setting:\n#\n#    # Some comment about what VAR is for.\n#    visible_name=$lt_internal_name\nm4_define([_LT_LIBTOOL_DECLARE],\n[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],\n\t\t\t\t\t   [description])))[]dnl\nm4_pushdef([_libtool_name],\n    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl\nm4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),\n    [0], [_libtool_name=[$]$1],\n    [1], [_libtool_name=$lt_[]$1],\n    [2], [_libtool_name=$lt_[]$1],\n    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl\nm4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl\n])\n\n\n# _LT_LIBTOOL_CONFIG_VARS\n# -----------------------\n# Produce commented declarations of non-tagged libtool config variables\n# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'\n# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG\n# section) are produced by _LT_LIBTOOL_TAG_VARS.\nm4_defun([_LT_LIBTOOL_CONFIG_VARS],\n[m4_foreach([_lt_var],\n    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAG_VARS(TAG)\n# -------------------------\nm4_define([_LT_LIBTOOL_TAG_VARS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])\n\n\n# _LT_TAGVAR(VARNAME, [TAGNAME])\n# ------------------------------\nm4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])\n\n\n# _LT_CONFIG_COMMANDS\n# -------------------\n# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of\n# variables for single and double quote escaping we saved from calls\n# to _LT_DECL, we can put quote escaped variables declarations\n# into `config.status', and then the shell code to quote escape them in\n# for loops in `config.status'.  Finally, any additional code accumulated\n# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.\nm4_defun([_LT_CONFIG_COMMANDS],\n[AC_PROVIDE_IFELSE([LT_OUTPUT],\n\tdnl If the libtool generation code has been placed in $CONFIG_LT,\n\tdnl instead of duplicating it all over again into config.status,\n\tdnl then we will have config.status run $CONFIG_LT later, so it\n\tdnl needs to know what name is stored there:\n        [AC_CONFIG_COMMANDS([libtool],\n            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],\n    dnl If the libtool generation code is destined for config.status,\n    dnl expand the accumulated commands and init code now:\n    [AC_CONFIG_COMMANDS([libtool],\n        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])\n])#_LT_CONFIG_COMMANDS\n\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],\n[\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\n_LT_CONFIG_STATUS_DECLARATIONS\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$[]1\n_LTECHO_EOF'\n}\n\n# Quote evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_quote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_dquote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n_LT_OUTPUT_LIBTOOL_INIT\n])\n\n# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])\n# ------------------------------------\n# Generate a child script FILE with all initialization necessary to\n# reuse the environment learned by the parent script, and make the\n# file executable.  If COMMENT is supplied, it is inserted after the\n# `#!' sequence but before initialization text begins.  After this\n# macro, additional text can be appended to FILE to form the body of\n# the child script.  The macro ends with non-zero status if the\n# file could not be fully written (such as if the disk is full).\nm4_ifdef([AS_INIT_GENERATED],\n[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],\n[m4_defun([_LT_GENERATED_FILE_INIT],\n[m4_require([AS_PREPARE])]dnl\n[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl\n[lt_write_fail=0\ncat >$1 <<_ASEOF || lt_write_fail=1\n#! $SHELL\n# Generated by $as_me.\n$2\nSHELL=\\${CONFIG_SHELL-$SHELL}\nexport SHELL\n_ASEOF\ncat >>$1 <<\\_ASEOF || lt_write_fail=1\nAS_SHELL_SANITIZE\n_AS_PREPARE\nexec AS_MESSAGE_FD>&1\n_ASEOF\ntest $lt_write_fail = 0 && chmod +x $1[]dnl\nm4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT\n\n# LT_OUTPUT\n# ---------\n# This macro allows early generation of the libtool script (before\n# AC_OUTPUT is called), incase it is used in configure for compilation\n# tests.\nAC_DEFUN([LT_OUTPUT],\n[: ${CONFIG_LT=./config.lt}\nAC_MSG_NOTICE([creating $CONFIG_LT])\n_LT_GENERATED_FILE_INIT([\"$CONFIG_LT\"],\n[# Run this file to recreate a libtool stub with the current configuration.])\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nlt_cl_silent=false\nexec AS_MESSAGE_LOG_FD>>config.log\n{\n  echo\n  AS_BOX([Running $as_me.])\n} >&AS_MESSAGE_LOG_FD\n\nlt_cl_help=\"\\\n\\`$as_me' creates a local libtool stub from the current configuration,\nfor use in further configure time tests before the real libtool is\ngenerated.\n\nUsage: $[0] [[OPTIONS]]\n\n  -h, --help      print this help, then exit\n  -V, --version   print version number, then exit\n  -q, --quiet     do not print progress messages\n  -d, --debug     don't remove temporary files\n\nReport bugs to <bug-libtool@gnu.org>.\"\n\nlt_cl_version=\"\\\nm4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl\nm4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])\nconfigured by $[0], generated by m4_PACKAGE_STRING.\n\nCopyright (C) 2011 Free Software Foundation, Inc.\nThis config.lt script is free software; the Free Software Foundation\ngives unlimited permision to copy, distribute and modify it.\"\n\nwhile test $[#] != 0\ndo\n  case $[1] in\n    --version | --v* | -V )\n      echo \"$lt_cl_version\"; exit 0 ;;\n    --help | --h* | -h )\n      echo \"$lt_cl_help\"; exit 0 ;;\n    --debug | --d* | -d )\n      debug=: ;;\n    --quiet | --q* | --silent | --s* | -q )\n      lt_cl_silent=: ;;\n\n    -*) AC_MSG_ERROR([unrecognized option: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n\n    *) AC_MSG_ERROR([unrecognized argument: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n  esac\n  shift\ndone\n\nif $lt_cl_silent; then\n  exec AS_MESSAGE_FD>/dev/null\nfi\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<_LTEOF\n_LT_OUTPUT_LIBTOOL_COMMANDS_INIT\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nAC_MSG_NOTICE([creating $ofile])\n_LT_OUTPUT_LIBTOOL_COMMANDS\nAS_EXIT(0)\n_LTEOF\nchmod +x \"$CONFIG_LT\"\n\n# configure is writing to config.log, but config.lt does its own redirection,\n# appending to config.log, which fails on DOS, as config.log is still kept\n# open by configure.  Here we exec the FD to /dev/null, effectively closing\n# config.log, so it can be properly (re)opened and appended to by config.lt.\nlt_cl_success=:\ntest \"$silent\" = yes &&\n  lt_config_lt_args=\"$lt_config_lt_args --quiet\"\nexec AS_MESSAGE_LOG_FD>/dev/null\n$SHELL \"$CONFIG_LT\" $lt_config_lt_args || lt_cl_success=false\nexec AS_MESSAGE_LOG_FD>>config.log\n$lt_cl_success || AS_EXIT(1)\n])# LT_OUTPUT\n\n\n# _LT_CONFIG(TAG)\n# ---------------\n# If TAG is the built-in tag, create an initial libtool script with a\n# default configuration from the untagged config vars.  Otherwise add code\n# to config.status for appending the configuration named by TAG from the\n# matching tagged config vars.\nm4_defun([_LT_CONFIG],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_CONFIG_SAVE_COMMANDS([\n  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl\n  m4_if(_LT_TAG, [C], [\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n_LT_COPYING\n_LT_LIBTOOL_TAGS\n\n# ### BEGIN LIBTOOL CONFIG\n_LT_LIBTOOL_CONFIG_VARS\n_LT_LIBTOOL_TAG_VARS\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n  _LT_PROG_LTMAIN\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" \\\n     || (rm -f \"$cfgfile\"; exit 1)\n\n  _LT_PROG_REPLACE_SHELLFNS\n\n   mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n],\n[cat <<_LT_EOF >> \"$ofile\"\n\ndnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded\ndnl in a comment (ie after a #).\n# ### BEGIN LIBTOOL TAG CONFIG: $1\n_LT_LIBTOOL_TAG_VARS(_LT_TAG)\n# ### END LIBTOOL TAG CONFIG: $1\n_LT_EOF\n])dnl /m4_if\n],\n[m4_if([$1], [], [\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'], [])\n])dnl /_LT_CONFIG_SAVE_COMMANDS\n])# _LT_CONFIG\n\n\n# LT_SUPPORTED_TAG(TAG)\n# ---------------------\n# Trace this macro to discover what tags are supported by the libtool\n# --tag option, using:\n#    autoconf --trace 'LT_SUPPORTED_TAG:$1'\nAC_DEFUN([LT_SUPPORTED_TAG], [])\n\n\n# C support is built-in for now\nm4_define([_LT_LANG_C_enabled], [])\nm4_define([_LT_TAGS], [])\n\n\n# LT_LANG(LANG)\n# -------------\n# Enable libtool support for the given language if not already enabled.\nAC_DEFUN([LT_LANG],\n[AC_BEFORE([$0], [LT_OUTPUT])dnl\nm4_case([$1],\n  [C],\t\t\t[_LT_LANG(C)],\n  [C++],\t\t[_LT_LANG(CXX)],\n  [Go],\t\t\t[_LT_LANG(GO)],\n  [Java],\t\t[_LT_LANG(GCJ)],\n  [Fortran 77],\t\t[_LT_LANG(F77)],\n  [Fortran],\t\t[_LT_LANG(FC)],\n  [Windows Resource],\t[_LT_LANG(RC)],\n  [m4_ifdef([_LT_LANG_]$1[_CONFIG],\n    [_LT_LANG($1)],\n    [m4_fatal([$0: unsupported language: \"$1\"])])])dnl\n])# LT_LANG\n\n\n# _LT_LANG(LANGNAME)\n# ------------------\nm4_defun([_LT_LANG],\n[m4_ifdef([_LT_LANG_]$1[_enabled], [],\n  [LT_SUPPORTED_TAG([$1])dnl\n  m4_append([_LT_TAGS], [$1 ])dnl\n  m4_define([_LT_LANG_]$1[_enabled], [])dnl\n  _LT_LANG_$1_CONFIG($1)])dnl\n])# _LT_LANG\n\n\nm4_ifndef([AC_PROG_GO], [\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_GO.  When it is available in    #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\nm4_defun([AC_PROG_GO],\n[AC_LANG_PUSH(Go)dnl\nAC_ARG_VAR([GOC],     [Go compiler command])dnl\nAC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl\n_AC_ARG_VAR_LDFLAGS()dnl\nAC_CHECK_TOOL(GOC, gccgo)\nif test -z \"$GOC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])\n  fi\nfi\nif test -z \"$GOC\"; then\n  AC_CHECK_PROG(GOC, gccgo, gccgo, false)\nfi\n])#m4_defun\n])#m4_ifndef\n\n\n# _LT_LANG_DEFAULT_CONFIG\n# -----------------------\nm4_defun([_LT_LANG_DEFAULT_CONFIG],\n[AC_PROVIDE_IFELSE([AC_PROG_CXX],\n  [LT_LANG(CXX)],\n  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_F77],\n  [LT_LANG(F77)],\n  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_FC],\n  [LT_LANG(FC)],\n  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])\n\ndnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal\ndnl pulling things in needlessly.\nAC_PROVIDE_IFELSE([AC_PROG_GCJ],\n  [LT_LANG(GCJ)],\n  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],\n    [LT_LANG(GCJ)],\n    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],\n      [LT_LANG(GCJ)],\n      [m4_ifdef([AC_PROG_GCJ],\n\t[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([A][M_PROG_GCJ],\n\t[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([LT_PROG_GCJ],\n\t[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])\n\nAC_PROVIDE_IFELSE([AC_PROG_GO],\n  [LT_LANG(GO)],\n  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])\n\nAC_PROVIDE_IFELSE([LT_PROG_RC],\n  [LT_LANG(RC)],\n  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])\n])# _LT_LANG_DEFAULT_CONFIG\n\n# Obsolete macros:\nAU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])\nAU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])\nAU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])\nAU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])\nAU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_CXX], [])\ndnl AC_DEFUN([AC_LIBTOOL_F77], [])\ndnl AC_DEFUN([AC_LIBTOOL_FC], [])\ndnl AC_DEFUN([AC_LIBTOOL_GCJ], [])\ndnl AC_DEFUN([AC_LIBTOOL_RC], [])\n\n\n# _LT_TAG_COMPILER\n# ----------------\nm4_defun([_LT_TAG_COMPILER],\n[AC_REQUIRE([AC_PROG_CC])dnl\n\n_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl\n_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl\n_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl\n_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n])# _LT_TAG_COMPILER\n\n\n# _LT_COMPILER_BOILERPLATE\n# ------------------------\n# Check for compiler boilerplate output or warnings with\n# the simple compiler test code.\nm4_defun([_LT_COMPILER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n])# _LT_COMPILER_BOILERPLATE\n\n\n# _LT_LINKER_BOILERPLATE\n# ----------------------\n# Check for linker boilerplate output or warnings with\n# the simple link test code.\nm4_defun([_LT_LINKER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n])# _LT_LINKER_BOILERPLATE\n\n# _LT_REQUIRED_DARWIN_CHECKS\n# -------------------------\nm4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[\n  case $host_os in\n    rhapsody* | darwin*)\n    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])\n    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])\n    AC_CHECK_TOOL([LIPO], [lipo], [:])\n    AC_CHECK_TOOL([OTOOL], [otool], [:])\n    AC_CHECK_TOOL([OTOOL64], [otool64], [:])\n    _LT_DECL([], [DSYMUTIL], [1],\n      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])\n    _LT_DECL([], [NMEDIT], [1],\n      [Tool to change global to local symbols on Mac OS X])\n    _LT_DECL([], [LIPO], [1],\n      [Tool to manipulate fat objects and archives on Mac OS X])\n    _LT_DECL([], [OTOOL], [1],\n      [ldd/readelf like tool for Mach-O binaries on Mac OS X])\n    _LT_DECL([], [OTOOL64], [1],\n      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])\n\n    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],\n      [lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&AS_MESSAGE_LOG_FD\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\t# If there is a non-empty error log, and \"single_module\"\n\t# appears in it, assume the flag caused a linker warning\n        if test -s conftest.err && $GREP single_module conftest.err; then\n\t  cat conftest.err >&AS_MESSAGE_LOG_FD\n\t# Otherwise, if the output was created with a 0 exit code from\n\t# the compiler, it worked.\n\telif test -f libconftest.dylib && test $_lt_result -eq 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&AS_MESSAGE_LOG_FD\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi])\n\n    AC_CACHE_CHECK([for -exported_symbols_list linker flag],\n      [lt_cv_ld_exported_symbols_list],\n      [lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\n      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n\t[lt_cv_ld_exported_symbols_list=yes],\n\t[lt_cv_ld_exported_symbols_list=no])\n\tLDFLAGS=\"$save_LDFLAGS\"\n    ])\n\n    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],\n      [lt_cv_ld_force_load=no\n      cat > conftest.c << _LT_EOF\nint forced_loaded() { return 2;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS -c -o conftest.o conftest.c\" >&AS_MESSAGE_LOG_FD\n      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD\n      echo \"$AR cru libconftest.a conftest.o\" >&AS_MESSAGE_LOG_FD\n      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD\n      echo \"$RANLIB libconftest.a\" >&AS_MESSAGE_LOG_FD\n      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD\n      cat > conftest.c << _LT_EOF\nint main() { return 0;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a\" >&AS_MESSAGE_LOG_FD\n      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err\n      _lt_result=$?\n      if test -s conftest.err && $GREP force_load conftest.err; then\n\tcat conftest.err >&AS_MESSAGE_LOG_FD\n      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then\n\tlt_cv_ld_force_load=yes\n      else\n\tcat conftest.err >&AS_MESSAGE_LOG_FD\n      fi\n        rm -f conftest.err libconftest.a conftest conftest.c\n        rm -rf conftest.dSYM\n    ])\n    case $host_os in\n    rhapsody* | darwin1.[[012]])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[[012]]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\" && test \"$lt_cv_ld_force_load\" = \"no\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\n])\n\n\n# _LT_DARWIN_LINKER_FEATURES([TAG])\n# ---------------------------------\n# Checks for linker and compiler features on darwin\nm4_defun([_LT_DARWIN_LINKER_FEATURES],\n[\n  m4_require([_LT_REQUIRED_DARWIN_CHECKS])\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_automatic, $1)=yes\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  if test \"$lt_cv_ld_force_load\" = \"yes\"; then\n    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience ${wl}-force_load,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"`'\n    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],\n                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])\n  else\n    _LT_TAGVAR(whole_archive_flag_spec, $1)=''\n  fi\n  _LT_TAGVAR(link_all_deplibs, $1)=yes\n  _LT_TAGVAR(allow_undefined_flag, $1)=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=func_echo_all\n    _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    _LT_TAGVAR(module_cmds, $1)=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    _LT_TAGVAR(module_expsym_cmds, $1)=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n    m4_if([$1], [CXX],\n[   if test \"$lt_cv_apple_cc_single_mod\" != \"yes\"; then\n      _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dsymutil}\"\n      _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dar_export_syms}${_lt_dsymutil}\"\n    fi\n],[])\n  else\n  _LT_TAGVAR(ld_shlibs, $1)=no\n  fi\n])\n\n# _LT_SYS_MODULE_PATH_AIX([TAGNAME])\n# ----------------------------------\n# Links a minimal program and checks the executable\n# for the system default hardcoded library path. In most cases,\n# this is /usr/lib:/lib, but when the MPI compilers are used\n# the location of the communication and MPI libs are included too.\n# If we don't find anything, use the default library path according\n# to the aix ld manual.\n# Store the results from the different compilers for each TAGNAME.\n# Allow to override them for all tags through lt_cv_aix_libpath.\nm4_defun([_LT_SYS_MODULE_PATH_AIX],\n[m4_require([_LT_DECL_SED])dnl\nif test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],\n  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[\n  lt_aix_libpath_sed='[\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }]'\n  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\"; then\n    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi],[])\n  if test -z \"$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\"; then\n    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=\"/usr/lib:/lib\"\n  fi\n  ])\n  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\nfi\n])# _LT_SYS_MODULE_PATH_AIX\n\n\n# _LT_SHELL_INIT(ARG)\n# -------------------\nm4_define([_LT_SHELL_INIT],\n[m4_divert_text([M4SH-INIT], [$1\n])])# _LT_SHELL_INIT\n\n\n\n# _LT_PROG_ECHO_BACKSLASH\n# -----------------------\n# Find how we can fake an echo command that does not interpret backslash.\n# In particular, with Autoconf 2.60 or later we add some code to the start\n# of the generated configure script which will find a shell with a builtin\n# printf (which we can use as an echo command).\nm4_defun([_LT_PROG_ECHO_BACKSLASH],\n[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n\nAC_MSG_CHECKING([how to print strings])\n# Test print first, because it will be a builtin if present.\nif test \"X`( print -r -- -n ) 2>/dev/null`\" = X-n && \\\n   test \"X`print -r -- $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='print -r --'\nelif test \"X`printf %s $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='printf %s\\n'\nelse\n  # Use this function as a fallback that always works.\n  func_fallback_echo ()\n  {\n    eval 'cat <<_LTECHO_EOF\n$[]1\n_LTECHO_EOF'\n  }\n  ECHO='func_fallback_echo'\nfi\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"$*\" \n}\n\ncase \"$ECHO\" in\n  printf*) AC_MSG_RESULT([printf]) ;;\n  print*) AC_MSG_RESULT([print -r]) ;;\n  *) AC_MSG_RESULT([cat]) ;;\nesac\n\nm4_ifdef([_AS_DETECT_SUGGESTED],\n[_AS_DETECT_SUGGESTED([\n  test -n \"${ZSH_VERSION+set}${BASH_VERSION+set}\" || (\n    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\n    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\n    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n    PATH=/empty FPATH=/empty; export PATH FPATH\n    test \"X`printf %s $ECHO`\" = \"X$ECHO\" \\\n      || test \"X`print -r -- $ECHO`\" = \"X$ECHO\" )])])\n\n_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])\n_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])\n])# _LT_PROG_ECHO_BACKSLASH\n\n\n# _LT_WITH_SYSROOT\n# ----------------\nAC_DEFUN([_LT_WITH_SYSROOT],\n[AC_MSG_CHECKING([for sysroot])\nAC_ARG_WITH([sysroot],\n[  --with-sysroot[=DIR] Search for dependent libraries within DIR\n                        (or the compiler's sysroot if not specified).],\n[], [with_sysroot=no])\n\ndnl lt_sysroot will always be passed unquoted.  We quote it here\ndnl in case the user passed a directory name.\nlt_sysroot=\ncase ${with_sysroot} in #(\n yes)\n   if test \"$GCC\" = yes; then\n     lt_sysroot=`$CC --print-sysroot 2>/dev/null`\n   fi\n   ;; #(\n /*)\n   lt_sysroot=`echo \"$with_sysroot\" | sed -e \"$sed_quote_subst\"`\n   ;; #(\n no|'')\n   ;; #(\n *)\n   AC_MSG_RESULT([${with_sysroot}])\n   AC_MSG_ERROR([The sysroot must be an absolute path.])\n   ;;\nesac\n\n AC_MSG_RESULT([${lt_sysroot:-no}])\n_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl\n[dependent libraries, and in which our libraries should be installed.])])\n\n# _LT_ENABLE_LOCK\n# ---------------\nm4_defun([_LT_ENABLE_LOCK],\n[AC_ARG_ENABLE([libtool-lock],\n  [AS_HELP_STRING([--disable-libtool-lock],\n    [avoid locking (might break parallel builds)])])\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '[#]line '$LINENO' \"configure\"' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    case `/usr/bin/file conftest.o` in\n\t      *x86-64*)\n\t\tLD=\"${LD-ld} -m elf32_x86_64\"\n\t\t;;\n\t      *)\n\t\tLD=\"${LD-ld} -m elf_i386\"\n\t\t;;\n\t    esac\n\t    ;;\n\t  powerpc64le-*)\n\t    LD=\"${LD-ld} -m elf32lppclinux\"\n\t    ;;\n\t  powerpc64-*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  powerpcle-*)\n\t    LD=\"${LD-ld} -m elf64lppc\"\n\t    ;;\n\t  powerpc-*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,\n    [AC_LANG_PUSH(C)\n     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])\n     AC_LANG_POP])\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\n*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*)\n        case $host in\n        i?86-*-solaris*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        sparc*-*-solaris*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n        esac\n        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.\n        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then\n          LD=\"${LD-ld}_sol2\"\n        fi\n        ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n])# _LT_ENABLE_LOCK\n\n\n# _LT_PROG_AR\n# -----------\nm4_defun([_LT_PROG_AR],\n[AC_CHECK_TOOLS(AR, [ar], false)\n: ${AR=ar}\n: ${AR_FLAGS=cru}\n_LT_DECL([], [AR], [1], [The archiver])\n_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])\n\nAC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],\n  [lt_cv_ar_at_file=no\n   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],\n     [echo conftest.$ac_objext > conftest.lst\n      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'\n      AC_TRY_EVAL([lt_ar_try])\n      if test \"$ac_status\" -eq 0; then\n\t# Ensure the archiver fails upon bogus file names.\n\trm -f conftest.$ac_objext libconftest.a\n\tAC_TRY_EVAL([lt_ar_try])\n\tif test \"$ac_status\" -ne 0; then\n          lt_cv_ar_at_file=@\n        fi\n      fi\n      rm -f conftest.* libconftest.a\n     ])\n  ])\n\nif test \"x$lt_cv_ar_at_file\" = xno; then\n  archiver_list_spec=\nelse\n  archiver_list_spec=$lt_cv_ar_at_file\nfi\n_LT_DECL([], [archiver_list_spec], [1],\n  [How to feed a file listing to the archiver])\n])# _LT_PROG_AR\n\n\n# _LT_CMD_OLD_ARCHIVE\n# -------------------\nm4_defun([_LT_CMD_OLD_ARCHIVE],\n[_LT_PROG_AR\n\nAC_CHECK_TOOL(STRIP, strip, :)\ntest -z \"$STRIP\" && STRIP=:\n_LT_DECL([], [STRIP], [1], [A symbol stripping program])\n\nAC_CHECK_TOOL(RANLIB, ranlib, :)\ntest -z \"$RANLIB\" && RANLIB=:\n_LT_DECL([], [RANLIB], [1],\n    [Commands used to install an old-style archive])\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$tool_oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$tool_oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$tool_oldlib\"\nfi\n\ncase $host_os in\n  darwin*)\n    lock_old_archive_extraction=yes ;;\n  *)\n    lock_old_archive_extraction=no ;;\nesac\n_LT_DECL([], [old_postinstall_cmds], [2])\n_LT_DECL([], [old_postuninstall_cmds], [2])\n_LT_TAGDECL([], [old_archive_cmds], [2],\n    [Commands used to build an old-style archive])\n_LT_DECL([], [lock_old_archive_extraction], [0],\n    [Whether to use a lock for old archive extraction])\n])# _LT_CMD_OLD_ARCHIVE\n\n\n# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#\t\t[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------------------\n# Check whether the given compiler option works\nAC_DEFUN([_LT_COMPILER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$3\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       $2=yes\n     fi\n   fi\n   $RM conftest*\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$5], , :, [$5])\nelse\n    m4_if([$6], , :, [$6])\nfi\n])# _LT_COMPILER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])\n\n\n# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#                  [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------\n# Check whether the given linker option works\nAC_DEFUN([_LT_LINKER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $3\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&AS_MESSAGE_LOG_FD\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         $2=yes\n       fi\n     else\n       $2=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$4], , :, [$4])\nelse\n    m4_if([$5], , :, [$5])\nfi\n])# _LT_LINKER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])\n\n\n# LT_CMD_MAX_LEN\n#---------------\nAC_DEFUN([LT_CMD_MAX_LEN],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n# find the maximum length of command line arguments\nAC_MSG_CHECKING([the maximum length of command line arguments])\nAC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl\n  i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  mint*)\n    # On MiNT this can take a long time and run out of memory.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  os2*)\n    # The test takes a long time on OS/2.\n    lt_cv_sys_max_cmd_len=8192\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[\t ]]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\" && \\\n\ttest undefined != \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`env echo \"$teststring$teststring\" 2>/dev/null` \\\n\t         = \"X$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n])\nif test -n $lt_cv_sys_max_cmd_len ; then\n  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)\nelse\n  AC_MSG_RESULT(none)\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n_LT_DECL([], [max_cmd_len], [0],\n    [What is the maximum length of a command?])\n])# LT_CMD_MAX_LEN\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])\n\n\n# _LT_HEADER_DLFCN\n# ----------------\nm4_defun([_LT_HEADER_DLFCN],\n[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl\n])# _LT_HEADER_DLFCN\n\n\n# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,\n#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)\n# ----------------------------------------------------------------\nm4_defun([_LT_TRY_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"$cross_compiling\" = yes; then :\n  [$4]\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n[#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}]\n_LT_EOF\n  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) $1 ;;\n      x$lt_dlneed_uscore) $2 ;;\n      x$lt_dlunknown|x*) $3 ;;\n    esac\n  else :\n    # compilation failed\n    $3\n  fi\nfi\nrm -fr conftest*\n])# _LT_TRY_DLOPEN_SELF\n\n\n# LT_SYS_DLOPEN_SELF\n# ------------------\nAC_DEFUN([LT_SYS_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],[\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ])\n    ;;\n\n  *)\n    AC_CHECK_FUNC([shl_load],\n\t  [lt_cv_dlopen=\"shl_load\"],\n      [AC_CHECK_LIB([dld], [shl_load],\n\t    [lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"],\n\t[AC_CHECK_FUNC([dlopen],\n\t      [lt_cv_dlopen=\"dlopen\"],\n\t  [AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],\n\t    [AC_CHECK_LIB([svld], [dlopen],\n\t\t  [lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"],\n\t      [AC_CHECK_LIB([dld], [dld_link],\n\t\t    [lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"])\n\t      ])\n\t    ])\n\t  ])\n\t])\n      ])\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    AC_CACHE_CHECK([whether a program can dlopen itself],\n\t  lt_cv_dlopen_self, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,\n\t    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)\n    ])\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],\n\t  lt_cv_dlopen_self_static, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,\n\t    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)\n      ])\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n_LT_DECL([dlopen_support], [enable_dlopen], [0],\n\t [Whether dlopen is supported])\n_LT_DECL([dlopen_self], [enable_dlopen_self], [0],\n\t [Whether dlopen of programs is supported])\n_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],\n\t [Whether dlopen of statically linked programs is supported])\n])# LT_SYS_DLOPEN_SELF\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])\n\n\n# _LT_COMPILER_C_O([TAGNAME])\n# ---------------------------\n# Check to see if options -c and -o are simultaneously supported by compiler.\n# This macro does not hard code the compiler like AC_PROG_CC_C_O.\nm4_defun([_LT_COMPILER_C_O],\n[m4_require([_LT_DECL_SED])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n     fi\n   fi\n   chmod u+w . 2>&AS_MESSAGE_LOG_FD\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n])\n_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],\n\t[Does compiler simultaneously support -c and -o options?])\n])# _LT_COMPILER_C_O\n\n\n# _LT_COMPILER_FILE_LOCKS([TAGNAME])\n# ----------------------------------\n# Check to see if we can do hard links to lock some files if needed\nm4_defun([_LT_COMPILER_FILE_LOCKS],\n[m4_require([_LT_ENABLE_LOCK])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_COMPILER_C_O([$1])\n\nhard_links=\"nottested\"\nif test \"$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  AC_MSG_CHECKING([if we can lock with hard links])\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  AC_MSG_RESULT([$hard_links])\n  if test \"$hard_links\" = no; then\n    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])\n])# _LT_COMPILER_FILE_LOCKS\n\n\n# _LT_CHECK_OBJDIR\n# ----------------\nm4_defun([_LT_CHECK_OBJDIR],\n[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],\n[rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null])\nobjdir=$lt_cv_objdir\n_LT_DECL([], [objdir], [0],\n         [The name of the directory that contains temporary libtool files])dnl\nm4_pattern_allow([LT_OBJDIR])dnl\nAC_DEFINE_UNQUOTED(LT_OBJDIR, \"$lt_cv_objdir/\",\n  [Define to the sub-directory in which libtool stores uninstalled libraries.])\n])# _LT_CHECK_OBJDIR\n\n\n# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])\n# --------------------------------------\n# Check hardcoding attributes.\nm4_defun([_LT_LINKER_HARDCODE_LIBPATH],\n[AC_MSG_CHECKING([how to hardcode library paths into programs])\n_LT_TAGVAR(hardcode_action, $1)=\nif test -n \"$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\" ||\n   test -n \"$_LT_TAGVAR(runpath_var, $1)\" ||\n   test \"X$_LT_TAGVAR(hardcode_automatic, $1)\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$_LT_TAGVAR(hardcode_direct, $1)\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, $1)\" != no &&\n     test \"$_LT_TAGVAR(hardcode_minus_L, $1)\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    _LT_TAGVAR(hardcode_action, $1)=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    _LT_TAGVAR(hardcode_action, $1)=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  _LT_TAGVAR(hardcode_action, $1)=unsupported\nfi\nAC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])\n\nif test \"$_LT_TAGVAR(hardcode_action, $1)\" = relink ||\n   test \"$_LT_TAGVAR(inherit_rpath, $1)\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n_LT_TAGDECL([], [hardcode_action], [0],\n    [How to hardcode a shared library path into an executable])\n])# _LT_LINKER_HARDCODE_LIBPATH\n\n\n# _LT_CMD_STRIPLIB\n# ----------------\nm4_defun([_LT_CMD_STRIPLIB],\n[m4_require([_LT_DECL_EGREP])\nstriplib=\nold_striplib=\nAC_MSG_CHECKING([whether stripping libraries is possible])\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  AC_MSG_RESULT([yes])\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      AC_MSG_RESULT([yes])\n    else\n      AC_MSG_RESULT([no])\n    fi\n    ;;\n  *)\n    AC_MSG_RESULT([no])\n    ;;\n  esac\nfi\n_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])\n_LT_DECL([], [striplib], [1])\n])# _LT_CMD_STRIPLIB\n\n\n# _LT_SYS_DYNAMIC_LINKER([TAG])\n# -----------------------------\n# PORTME Fill in your ld.so characteristics\nm4_defun([_LT_SYS_DYNAMIC_LINKER],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_OBJDUMP])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_CHECK_SHELL_FEATURES])dnl\nAC_MSG_CHECKING([dynamic linker characteristics])\nm4_if([$1],\n\t[], [\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  case $host_os in\n    mingw* | cegcc*) lt_sed_strip_eq=\"s,=\\([[A-Za-z]]:\\),\\1,g\" ;;\n    *) lt_sed_strip_eq=\"s,=/,/,g\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e $lt_sed_strip_eq`\n  case $lt_search_path_spec in\n  *\\;*)\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED 's/;/ /g'`\n    ;;\n  *)\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED \"s/$PATH_SEPARATOR/ /g\"`\n    ;;\n  esac\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO \"$lt_tmp_lt_search_path_spec\" | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[[lt_foo]]++; }\n  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }\n}'`\n  # AWK program above erroneously prepends '/' to C:/dos/paths\n  # for these hosts.\n  case $host_os in\n    mingw* | cegcc*) lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" |\\\n      $SED 's,/\\([[A-Za-z]]:\\),\\1,g'` ;;\n  esac\n  sys_lib_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $lt_NL2SP`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi])\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[[4-9]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[[01]] | aix4.[[01]].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all \"$lib\" | $SED '\\''s%^.*/\\([[^/]]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[[45]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$cc_basename in\n  yes,*)\n    # gcc\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\nm4_if([$1], [],[\n      sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/lib/w32api\"])\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    dynamic_linker='Win32 ld.exe'\n    ;;\n\n  *,cl*)\n    # Native MSVC\n    libname_spec='$name'\n    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n    library_names_spec='${libname}.dll.lib'\n\n    case $build_os in\n    mingw*)\n      sys_lib_search_path_spec=\n      lt_save_ifs=$IFS\n      IFS=';'\n      for lt_path in $LIB\n      do\n        IFS=$lt_save_ifs\n        # Let DOS variable expansion print the short 8.3 style file name.\n        lt_path=`cd \"$lt_path\" 2>/dev/null && cmd //C \"for %i in (\".\") do @echo %~si\"`\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec $lt_path\"\n      done\n      IFS=$lt_save_ifs\n      # Convert to MSYS style.\n      sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | sed -e 's|\\\\\\\\|/|g' -e 's| \\\\([[a-zA-Z]]\\\\):| /\\\\1|g' -e 's|^ ||'`\n      ;;\n    cygwin*)\n      # Convert to unix form, then to dos form, then back to unix form\n      # but this time dos style (no spaces!) so that the unix form looks\n      # like /cygdrive/c/PROGRA~1:/cygdr...\n      sys_lib_search_path_spec=`cygpath --path --unix \"$LIB\"`\n      sys_lib_search_path_spec=`cygpath --path --dos \"$sys_lib_search_path_spec\" 2>/dev/null`\n      sys_lib_search_path_spec=`cygpath --path --unix \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      ;;\n    *)\n      sys_lib_search_path_spec=\"$LIB\"\n      if $ECHO \"$sys_lib_search_path_spec\" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then\n        # It is most probably a Windows format PATH.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      # FIXME: find the short name or the path components, as spaces are\n      # common. (e.g. \"Program Files\" -> \"PROGRA~1\")\n      ;;\n    esac\n\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n    dynamic_linker='Win32 link.exe'\n    ;;\n\n  *)\n    # Assume MSVC wrapper\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    dynamic_linker='Win32 ld.exe'\n    ;;\n  esac\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\nm4_if([$1], [],[\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"])\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[[23]].*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2.*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[[01]]* | freebsdelf3.[[01]]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \\\n  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\nhaiku*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  dynamic_linker=\"$host_os runtime_loader\"\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...\n  postinstall_cmds='chmod 555 $lib'\n  # or fails outright, so override atomically:\n  install_override_mode=555\n  ;;\n\ninterix[[3-9]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux # correct to gnu/linux during the next big refactor\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n\n  # Some binutils ld are patched to set DT_RUNPATH\n  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],\n    [lt_cv_shlibpath_overrides_runpath=no\n    save_LDFLAGS=$LDFLAGS\n    save_libdir=$libdir\n    eval \"libdir=/foo; wl=\\\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\\\"; \\\n\t LDFLAGS=\\\"\\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\\\"\"\n    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null],\n\t [lt_cv_shlibpath_overrides_runpath=yes])])\n    LDFLAGS=$save_LDFLAGS\n    libdir=$save_libdir\n    ])\n  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\[$]2)); skip = 1; } { if (!skip) print \\[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/\"//g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[[89]] | openbsd2.[[89]].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux # correct to gnu/linux during the next big refactor\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\nAC_MSG_RESULT([$dynamic_linker])\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n_LT_DECL([], [variables_saved_for_relink], [1],\n    [Variables whose values should be saved in libtool wrapper scripts and\n    restored at link time])\n_LT_DECL([], [need_lib_prefix], [0],\n    [Do we need the \"lib\" prefix for modules?])\n_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])\n_LT_DECL([], [version_type], [0], [Library versioning type])\n_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])\n_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])\n_LT_DECL([], [shlibpath_overrides_runpath], [0],\n    [Is shlibpath searched before the hard-coded library search path?])\n_LT_DECL([], [libname_spec], [1], [Format of library name prefix])\n_LT_DECL([], [library_names_spec], [1],\n    [[List of archive names.  First name is the real one, the rest are links.\n    The last name is the one that the linker finds with -lNAME]])\n_LT_DECL([], [soname_spec], [1],\n    [[The coded name of the library, if different from the real name]])\n_LT_DECL([], [install_override_mode], [1],\n    [Permission mode override for installation of shared libraries])\n_LT_DECL([], [postinstall_cmds], [2],\n    [Command to use after installation of a shared archive])\n_LT_DECL([], [postuninstall_cmds], [2],\n    [Command to use after uninstallation of a shared archive])\n_LT_DECL([], [finish_cmds], [2],\n    [Commands used to finish a libtool library installation in a directory])\n_LT_DECL([], [finish_eval], [1],\n    [[As \"finish_cmds\", except a single script fragment to be evaled but\n    not shown]])\n_LT_DECL([], [hardcode_into_libs], [0],\n    [Whether we should hardcode library paths into libraries])\n_LT_DECL([], [sys_lib_search_path_spec], [2],\n    [Compile-time system search path for libraries])\n_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],\n    [Run-time system search path for libraries])\n])# _LT_SYS_DYNAMIC_LINKER\n\n\n# _LT_PATH_TOOL_PREFIX(TOOL)\n# --------------------------\n# find a file program which can recognize shared library\nAC_DEFUN([_LT_PATH_TOOL_PREFIX],\n[m4_require([_LT_DECL_EGREP])dnl\nAC_MSG_CHECKING([for $1])\nAC_CACHE_VAL(lt_cv_path_MAGIC_CMD,\n[case $MAGIC_CMD in\n[[\\\\/*] |  ?:[\\\\/]*])\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\ndnl $ac_dummy forces splitting on constant user-supplied paths.\ndnl POSIX.2 word splitting is done only on the output of word expansions,\ndnl not every word.  This closes a longstanding sh security hole.\n  ac_dummy=\"m4_if([$2], , $PATH, [$2])\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/$1; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/$1\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac])\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  AC_MSG_RESULT($MAGIC_CMD)\nelse\n  AC_MSG_RESULT(no)\nfi\n_LT_DECL([], [MAGIC_CMD], [0],\n\t [Used to examine libraries when file_magic_cmd begins with \"file\"])dnl\n])# _LT_PATH_TOOL_PREFIX\n\n# Old name:\nAU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])\n\n\n# _LT_PATH_MAGIC\n# --------------\n# find a file program which can recognize a shared library\nm4_defun([_LT_PATH_MAGIC],\n[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)\n  else\n    MAGIC_CMD=:\n  fi\nfi\n])# _LT_PATH_MAGIC\n\n\n# LT_PATH_LD\n# ----------\n# find the pathname to the GNU or non-GNU linker\nAC_DEFUN([LT_PATH_LD],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_PROG_ECHO_BACKSLASH])dnl\n\nAC_ARG_WITH([gnu-ld],\n    [AS_HELP_STRING([--with-gnu-ld],\n\t[assume the C compiler uses GNU ld @<:@default=no@:>@])],\n    [test \"$withval\" = no || with_gnu_ld=yes],\n    [with_gnu_ld=no])dnl\n\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 $CC])\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    [[\\\\/]]* | ?:[[\\\\/]]*)\n      re_direlt='/[[^/]][[^/]]*/\\.\\./'\n      # Canonicalize the pathname 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(lt_cv_path_LD,\n[if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$lt_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])\n_LT_PATH_LD_GNU\nAC_SUBST([LD])\n\n_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])\n])# LT_PATH_LD\n\n# Old names:\nAU_ALIAS([AM_PROG_LD], [LT_PATH_LD])\nAU_ALIAS([AC_PROG_LD], [LT_PATH_LD])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_LD], [])\ndnl AC_DEFUN([AC_PROG_LD], [])\n\n\n# _LT_PATH_LD_GNU\n#- --------------\nm4_defun([_LT_PATH_LD_GNU],\n[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac])\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n])# _LT_PATH_LD_GNU\n\n\n# _LT_CMD_RELOAD\n# --------------\n# find reload flag for linker\n#   -- PORTME Some linkers may need a different reload flag.\nm4_defun([_LT_CMD_RELOAD],\n[AC_CACHE_CHECK([for $LD option to reload object files],\n  lt_cv_ld_reload_flag,\n  [lt_cv_ld_reload_flag='-r'])\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\n    if test \"$GCC\" != yes; then\n      reload_cmds=false\n    fi\n    ;;\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl\n_LT_TAGDECL([], [reload_cmds], [2])dnl\n])# _LT_CMD_RELOAD\n\n\n# _LT_CHECK_MAGIC_METHOD\n# ----------------------\n# how to check for library dependencies\n#  -- PORTME fill in with the dynamic library characteristics\nm4_defun([_LT_CHECK_MAGIC_METHOD],\n[m4_require([_LT_DECL_EGREP])\nm4_require([_LT_DECL_OBJDUMP])\nAC_CACHE_CHECK([how to recognize dependent libraries],\nlt_cv_deplibs_check_method,\n[lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[[4-9]]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[[45]]*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.\n  if ( test \"$lt_cv_nm_interface\" = \"BSD nm\" && file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    # Keep this pattern in sync with the one in func_win32_libid.\n    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc*)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\nhaiku*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\\.[0-9]']\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\\.[[0-9]]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[[3-9]]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n])\n\nfile_magic_glob=\nwant_nocaseglob=no\nif test \"$build\" = \"$host\"; then\n  case $host_os in\n  mingw* | pw32*)\n    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then\n      want_nocaseglob=yes\n    else\n      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e \"s/\\(..\\)/s\\/[[\\1]]\\/[[\\1]]\\/g;/g\"`\n    fi\n    ;;\n  esac\nfi\n\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n_LT_DECL([], [deplibs_check_method], [1],\n    [Method to check whether dependent libraries are shared objects])\n_LT_DECL([], [file_magic_cmd], [1],\n    [Command to use when deplibs_check_method = \"file_magic\"])\n_LT_DECL([], [file_magic_glob], [1],\n    [How to find potential files when deplibs_check_method = \"file_magic\"])\n_LT_DECL([], [want_nocaseglob], [1],\n    [Find potential files using nocaseglob when deplibs_check_method = \"file_magic\"])\n])# _LT_CHECK_MAGIC_METHOD\n\n\n# LT_PATH_NM\n# ----------\n# find the pathname to a BSD- or MS-compatible name lister\nAC_DEFUN([LT_PATH_NM],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,\n[if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi])\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  if test -n \"$DUMPBIN\"; then :\n    # Let the user override the test.\n  else\n    AC_CHECK_TOOLS(DUMPBIN, [dumpbin \"link -dump\"], :)\n    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in\n    *COFF*)\n      DUMPBIN=\"$DUMPBIN -symbols\"\n      ;;\n    *)\n      DUMPBIN=:\n      ;;\n    esac\n  fi\n  AC_SUBST([DUMPBIN])\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\nAC_SUBST([NM])\n_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl\n\nAC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],\n  [lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:$LINENO: $ac_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:$LINENO: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:$LINENO: output\\\"\" >&AS_MESSAGE_LOG_FD)\n  cat conftest.out >&AS_MESSAGE_LOG_FD\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*])\n])# LT_PATH_NM\n\n# Old names:\nAU_ALIAS([AM_PROG_NM], [LT_PATH_NM])\nAU_ALIAS([AC_PROG_NM], [LT_PATH_NM])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_NM], [])\ndnl AC_DEFUN([AC_PROG_NM], [])\n\n# _LT_CHECK_SHAREDLIB_FROM_LINKLIB\n# --------------------------------\n# how to determine the name of the shared library\n# associated with a specific link library.\n#  -- PORTME fill in with the dynamic library characteristics\nm4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],\n[m4_require([_LT_DECL_EGREP])\nm4_require([_LT_DECL_OBJDUMP])\nm4_require([_LT_DECL_DLLTOOL])\nAC_CACHE_CHECK([how to associate runtime and link libraries],\nlt_cv_sharedlib_from_linklib_cmd,\n[lt_cv_sharedlib_from_linklib_cmd='unknown'\n\ncase $host_os in\ncygwin* | mingw* | pw32* | cegcc*)\n  # two different shell functions defined in ltmain.sh\n  # decide which to use based on capabilities of $DLLTOOL\n  case `$DLLTOOL --help 2>&1` in\n  *--identify-strict*)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib\n    ;;\n  *)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback\n    ;;\n  esac\n  ;;\n*)\n  # fallback: assume linklib IS sharedlib\n  lt_cv_sharedlib_from_linklib_cmd=\"$ECHO\"\n  ;;\nesac\n])\nsharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd\ntest -z \"$sharedlib_from_linklib_cmd\" && sharedlib_from_linklib_cmd=$ECHO\n\n_LT_DECL([], [sharedlib_from_linklib_cmd], [1],\n    [Command to associate shared and link libraries])\n])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB\n\n\n# _LT_PATH_MANIFEST_TOOL\n# ----------------------\n# locate the manifest tool\nm4_defun([_LT_PATH_MANIFEST_TOOL],\n[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)\ntest -z \"$MANIFEST_TOOL\" && MANIFEST_TOOL=mt\nAC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],\n  [lt_cv_path_mainfest_tool=no\n  echo \"$as_me:$LINENO: $MANIFEST_TOOL '-?'\" >&AS_MESSAGE_LOG_FD\n  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  if $GREP 'Manifest Tool' conftest.out > /dev/null; then\n    lt_cv_path_mainfest_tool=yes\n  fi\n  rm -f conftest*])\nif test \"x$lt_cv_path_mainfest_tool\" != xyes; then\n  MANIFEST_TOOL=:\nfi\n_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl\n])# _LT_PATH_MANIFEST_TOOL\n\n\n# LT_LIB_M\n# --------\n# check for math library\nAC_DEFUN([LT_LIB_M],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nLIBM=\ncase $host in\n*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)\n  # These system don't have libm, or don't need it\n  ;;\n*-ncr-sysv4.3*)\n  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=\"-lmw\")\n  AC_CHECK_LIB(m, cos, LIBM=\"$LIBM -lm\")\n  ;;\n*)\n  AC_CHECK_LIB(m, cos, LIBM=\"-lm\")\n  ;;\nesac\nAC_SUBST([LIBM])\n])# LT_LIB_M\n\n# Old name:\nAU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_CHECK_LIBM], [])\n\n\n# _LT_COMPILER_NO_RTTI([TAGNAME])\n# -------------------------------\nm4_defun([_LT_COMPILER_NO_RTTI],\n[m4_require([_LT_TAG_COMPILER])dnl\n\n_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n\nif test \"$GCC\" = yes; then\n  case $cc_basename in\n  nvcc*)\n    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;\n  *)\n    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;\n  esac\n\n  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],\n    lt_cv_prog_compiler_rtti_exceptions,\n    [-fno-rtti -fno-exceptions], [],\n    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\"$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions\"])\nfi\n_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],\n\t[Compiler flag to turn off builtin functions])\n])# _LT_COMPILER_NO_RTTI\n\n\n# _LT_CMD_GLOBAL_SYMBOLS\n# ----------------------\nm4_defun([_LT_CMD_GLOBAL_SYMBOLS],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_PROG_AWK])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_TAG_COMPILER])dnl\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\nAC_MSG_CHECKING([command to parse $NM output from $compiler object])\nAC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],\n[\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[[BCDEGRST]]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([[_A-Za-z]][[_A-Za-z0-9]]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[[BCDT]]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[[ABCDGISTW]]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[[ABCDEGRST]]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[[BCDEGRST]]'\n  ;;\nosf*)\n  symcode='[[BCDEGQRST]]'\n  ;;\nsolaris*)\n  symcode='[[BDRT]]'\n  ;;\nsco3.2v5*)\n  symcode='[[DT]]'\n  ;;\nsysv4.2uw2*)\n  symcode='[[DT]]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[[ABDT]]'\n  ;;\nsysv4)\n  symcode='[[DFNSTU]]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[[ABCDGIRSTW]]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\)[[ ]]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([[^ ]]*\\)[[ ]]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\(lib[[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK ['\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx]\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[[\t ]]\\($symcode$symcode*\\)[[\t ]][[\t ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n  lt_cv_sys_global_symbol_pipe=\"$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if AC_TRY_EVAL(ac_compile); then\n    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if AC_TRY_EVAL(NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist) && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT@&t@_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT@&t@_DLSYM_CONST\n#else\n# define LT@&t@_DLSYM_CONST const\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nLT@&t@_DLSYM_CONST struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[[]] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_globsym_save_LIBS=$LIBS\n\t  lt_globsym_save_CFLAGS=$CFLAGS\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)\"\n\t  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=$lt_globsym_save_LIBS\n\t  CFLAGS=$lt_globsym_save_CFLAGS\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&AS_MESSAGE_LOG_FD\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&AS_MESSAGE_LOG_FD\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&AS_MESSAGE_LOG_FD\n    fi\n  else\n    echo \"$progname: failed program was:\" >&AS_MESSAGE_LOG_FD\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n])\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  AC_MSG_RESULT(failed)\nelse\n  AC_MSG_RESULT(ok)\nfi\n\n# Response file support.\nif test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n  nm_file_list_spec='@'\nelif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then\n  nm_file_list_spec='@'\nfi\n\n_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],\n    [Take the output of nm and produce a listing of raw symbols and C names])\n_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],\n    [Transform the output of nm in a proper C declaration])\n_LT_DECL([global_symbol_to_c_name_address],\n    [lt_cv_sys_global_symbol_to_c_name_address], [1],\n    [Transform the output of nm in a C name address pair])\n_LT_DECL([global_symbol_to_c_name_address_lib_prefix],\n    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],\n    [Transform the output of nm in a C name address pair when lib prefix is needed])\n_LT_DECL([], [nm_file_list_spec], [1],\n    [Specify filename containing input files for $NM])\n]) # _LT_CMD_GLOBAL_SYMBOLS\n\n\n# _LT_COMPILER_PIC([TAGNAME])\n# ---------------------------\nm4_defun([_LT_COMPILER_PIC],\n[m4_require([_LT_TAG_COMPILER])dnl\n_LT_TAGVAR(lt_prog_compiler_wl, $1)=\n_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n_LT_TAGVAR(lt_prog_compiler_static, $1)=\n\nm4_if([$1], [CXX], [\n  # C++ specific cases for pic, static, wl, etc.\n  if test \"$GXX\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n    aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n    mingw* | cygwin* | os2* | pw32* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n    *djgpp*)\n      # DJGPP does not support shared libraries at all\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n      ;;\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)=\n      ;;\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n    *qnx* | *nto*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    case $host_os in\n      aix[[4-9]]*)\n\t# All AIX code is PIC.\n\tif test \"$host_cpu\" = ia64; then\n\t  # AIX 5 now supports IA64 processor\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\telse\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n\tfi\n\t;;\n      chorus*)\n\tcase $cc_basename in\n\tcxch68*)\n\t  # Green Hills C++ Compiler\n\t  # _LT_TAGVAR(lt_prog_compiler_static, $1)=\"--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a\"\n\t  ;;\n\tesac\n\t;;\n      mingw* | cygwin* | os2* | pw32* | cegcc*)\n\t# This hack is so that the source file can tell whether it is being\n\t# built for inclusion in a dll (and should export symbols for example).\n\tm4_if([$1], [GCJ], [],\n\t  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n\t;;\n      dgux*)\n\tcase $cc_basename in\n\t  ec++*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  ghcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      freebsd* | dragonfly*)\n\t# FreeBSD uses GNU C++\n\t;;\n      hpux9* | hpux10* | hpux11*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    if test \"$host_cpu\" != ia64; then\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t    fi\n\t    ;;\n\t  aCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    case $host_cpu in\n\t    hppa*64*|ia64*)\n\t      # +Z the default\n\t      ;;\n\t    *)\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t      ;;\n\t    esac\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      interix*)\n\t# This is c89, which is MS Visual C++ (no shared libs)\n\t# Anyone wants to do a port?\n\t;;\n      irix5* | irix6* | nonstopux*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    # CC pic flag -KPIC is the default.\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    # KAI C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    ;;\n\t  ecpc* )\n\t    # old Intel C++ for x86_64 which still supported -KPIC.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  icpc* )\n\t    # Intel C++, used to be incompatible with GCC.\n\t    # ICC 10 doesn't accept -KPIC any more.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  pgCC* | pgcpp*)\n\t    # Portland Group C++ compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)\n\t    # IBM XL 8.0, 9.0 on PPC and BlueGene\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n      lynxos*)\n\t;;\n      m88k*)\n\t;;\n      mvs*)\n\tcase $cc_basename in\n\t  cxx*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      netbsd* | netbsdelf*-gnu)\n\t;;\n      *qnx* | *nto*)\n        # QNX uses GNU C++, but need to define -shared option too, otherwise\n        # it will coredump.\n        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n        ;;\n      osf3* | osf4* | osf5*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    ;;\n\t  RCC*)\n\t    # Rational C++ 2.4.1\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  cxx*)\n\t    # Digital/Compaq C++\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      psos*)\n\t;;\n      solaris*)\n\tcase $cc_basename in\n\t  CC* | sunCC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t    ;;\n\t  gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sunos4*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.x\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  lcc*)\n\t    # Lucid\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\tesac\n\t;;\n      tandem*)\n\tcase $cc_basename in\n\t  NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      vxworks*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n\t;;\n    esac\n  fi\n],\n[\n  if test \"$GCC\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)=\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n\n    case $cc_basename in\n    nvcc*) # Cuda Compiler Driver 2.2\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '\n      if test -n \"$_LT_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n        _LT_TAGVAR(lt_prog_compiler_pic, $1)=\"-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)\"\n      fi\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      else\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC (with -KPIC) is the default.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'\n\t;;\n      nagfor*)\n\t# NAG Fortran compiler\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n        ;;\n      ccc*)\n        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n        # All Alpha code is PIC.\n        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n        ;;\n      xl* | bgxl* | bgf* | mpixl*)\n\t# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [[1-7]].* | *Sun*Fortran*\\ 8.[[0-3]]*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''\n\t  ;;\n\t*Sun\\ F* | *Sun*Fortran*)\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t  ;;\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  ;;\n        *Intel*\\ [[CF]]*Compiler*)\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t  ;;\n\t*Portland\\ Group*)\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # All OSF/1 code is PIC.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    rdos*)\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    unicos*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n    esac\n  fi\n])\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n    ;;\n  *)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\"$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])\"\n    ;;\nesac\n\nAC_CACHE_CHECK([for $compiler option to produce PIC],\n  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],\n  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])\n_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$_LT_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],\n    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],\n    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],\n    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in\n     \"\" | \" \"*) ;;\n     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=\" $_LT_TAGVAR(lt_prog_compiler_pic, $1)\" ;;\n     esac],\n    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])\nfi\n_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],\n\t[Additional compiler flags for building library objects])\n\n_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],\n\t[How to pass a linker flag through the compiler])\n#\n# Check to make sure the static flag actually works.\n#\nwl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\\\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\\\"\n_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],\n  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),\n  $lt_tmp_static_flag,\n  [],\n  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])\n_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],\n\t[Compiler flag to prevent dynamic linking])\n])# _LT_COMPILER_PIC\n\n\n# _LT_LINKER_SHLIBS([TAGNAME])\n# ----------------------------\n# See if the linker supports building shared libraries.\nm4_defun([_LT_LINKER_SHLIBS],\n[AC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nm4_require([_LT_PATH_MANIFEST_TOOL])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\nm4_if([$1], [CXX], [\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n  case $host_os in\n  aix[[4-9]]*)\n    # If we're using GNU nm, then we don't want the \"-C\" option.\n    # -C means demangle to AIX nm, but means don't demangle with GNU nm\n    # Also, AIX nm treats weak defined symbols like other global defined\n    # symbols, whereas GNU nm marks them as \"W\".\n    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    else\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    fi\n    ;;\n  pw32*)\n    _LT_TAGVAR(export_symbols_cmds, $1)=\"$ltdll_cmds\"\n    ;;\n  cygwin* | mingw* | cegcc*)\n    case $cc_basename in\n    cl*)\n      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n      ;;\n    *)\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/;s/^.*[[ ]]__nm__\\([[^ ]]*\\)[[ ]][[^ ]]*/\\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']\n      ;;\n    esac\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n    ;;\n  *)\n    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n    ;;\n  esac\n], [\n  runpath_var=\n  _LT_TAGVAR(allow_undefined_flag, $1)=\n  _LT_TAGVAR(always_export_symbols, $1)=no\n  _LT_TAGVAR(archive_cmds, $1)=\n  _LT_TAGVAR(archive_expsym_cmds, $1)=\n  _LT_TAGVAR(compiler_needs_object, $1)=no\n  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n  _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  _LT_TAGVAR(hardcode_automatic, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_direct_absolute, $1)=no\n  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n  _LT_TAGVAR(hardcode_minus_L, $1)=no\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  _LT_TAGVAR(inherit_rpath, $1)=no\n  _LT_TAGVAR(link_all_deplibs, $1)=unknown\n  _LT_TAGVAR(module_cmds, $1)=\n  _LT_TAGVAR(module_expsym_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_new_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=\n  _LT_TAGVAR(thread_safe_flag_spec, $1)=\n  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  _LT_TAGVAR(include_expsyms, $1)=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\ndnl Note also adjust exclude_expsyms for C++ above.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n    ;;\n  esac\n\n  _LT_TAGVAR(ld_shlibs, $1)=yes\n\n  # On some targets, GNU ld is compatible enough with the native linker\n  # that we're better off using the native interface for both.\n  lt_use_gnu_ld_interface=no\n  if test \"$with_gnu_ld\" = yes; then\n    case $host_os in\n      aix*)\n\t# The AIX port of GNU ld has always aspired to compatibility\n\t# with the native linker.  However, as the warning in the GNU ld\n\t# block says, versions before 2.19.5* couldn't really create working\n\t# shared libraries, regardless of the interface used.\n\tcase `$LD -v 2>&1` in\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.19.5*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.[[2-9]]*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ [[3-9]]*) ;;\n\t  *)\n\t    lt_use_gnu_ld_interface=yes\n\t    ;;\n\tesac\n\t;;\n      *)\n\tlt_use_gnu_ld_interface=yes\n\t;;\n    esac\n  fi\n\n  if test \"$lt_use_gnu_ld_interface\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[[3-9]]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.19, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to install binutils\n*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.\n*** You will then need to restart the configuration process.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n      # as there is no search path for DLLs.\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=no\n      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/;s/^.*[[ ]]__nm__\\([[^ ]]*\\)[[ ]][[^ ]]*/\\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    haiku*)\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    interix[[3-9]]*)\n      _LT_TAGVAR(hardcode_direct, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      _LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=' $pic_flag'\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95* | pgfortran*)\n\t\t\t\t\t# Portland Group f77 and f90 compilers\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n\t  tmp_sharedflag='--shared' ;;\n\txl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tnvcc*)\t# Cuda Compiler Driver 2.2\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  _LT_TAGVAR(compiler_needs_object, $1)=yes\n\t  ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  _LT_TAGVAR(compiler_needs_object, $1)=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\t_LT_TAGVAR(archive_cmds, $1)='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf* | bgf* | bgxlf* | mpixlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        _LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.1[[0-5]].*)\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n    esac\n\n    if test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no; then\n      runpath_var=\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\t_LT_TAGVAR(hardcode_direct, $1)=unsupported\n      fi\n      ;;\n\n    aix[[4-9]]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\t# Also, AIX nm treats weak defined symbols like other global\n\t# defined symbols, whereas GNU nm marks them as \"W\".\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      _LT_TAGVAR(archive_cmds, $1)=''\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[[012]]|aix4.[[012]].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\t_LT_TAGVAR(link_all_deplibs, $1)=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\t_LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\n        _LT_SYS_MODULE_PATH_AIX([$1])\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\n\t _LT_SYS_MODULE_PATH_AIX([$1])\n\t _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t  if test \"$with_gnu_ld\" = yes; then\n\t    # We only use this code for GNU lds that support --whole-archive.\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t  else\n\t    # Exported symbols can be pulled into shared objects from archives\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t  fi\n\t  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[[45]]*)\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      case $cc_basename in\n      cl*)\n\t# Native MSVC\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t_LT_TAGVAR(always_export_symbols, $1)=yes\n\t_LT_TAGVAR(file_list_spec, $1)='@'\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t    sed -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t  else\n\t    sed -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t  fi~\n\t  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t  linknames='\n\t# The linker will not automatically build a static lib if we build a DLL.\n\t# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n\t_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1,DATA/'\\'' | $SED -e '\\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\\'' | sort | uniq > $export_symbols'\n\t# Don't use ranlib\n\t_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'\n\t_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile=\"@OUTPUT@\"~\n\t  lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t  case $lt_outputfile in\n\t    *.exe|*.EXE) ;;\n\t    *)\n\t      lt_outputfile=\"$lt_outputfile.exe\"\n\t      lt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t      ;;\n\t  esac~\n\t  if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t    $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t    $RM \"$lt_outputfile.manifest\";\n\t  fi'\n\t;;\n      *)\n\t# Assume MSVC wrapper\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all \"$deplibs\" | $SED '\\''s/ -lc$//'\\''` -link -dll~linknames='\n\t# The linker will automatically build a .lib file if we build a DLL.\n\t_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t# FIXME: Should let the user specify the lib program.\n\t_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'\n\t_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t;;\n      esac\n      ;;\n\n    darwin* | rhapsody*)\n      _LT_DARWIN_LINKER_FEATURES($1)\n      ;;\n\n    dgux*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2.*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\t_LT_TAGVAR(hardcode_minus_L, $1)=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\tm4_if($1, [], [\n\t  # Older versions of the 11.00 compiler do not understand -b yet\n\t  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)\n\t  _LT_LINKER_OPTION([if $CC understands -b],\n\t    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],\n\t    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],\n\t    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],\n\t  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n\t# This should be the same for all languages, so no per-tag cache variable.\n\tAC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],\n\t  [lt_cv_irix_exported_symbol],\n\t  [save_LDFLAGS=\"$LDFLAGS\"\n\t   LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n\t   AC_LINK_IFELSE(\n\t     [AC_LANG_SOURCE(\n\t        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],\n\t\t\t      [C++], [[int foo (void) { return 0; }]],\n\t\t\t      [Fortran 77], [[\n      subroutine foo\n      end]],\n\t\t\t      [Fortran], [[\n      subroutine foo\n      end]])])],\n\t      [lt_cv_irix_exported_symbol=yes],\n\t      [lt_cv_irix_exported_symbol=no])\n           LDFLAGS=\"$save_LDFLAGS\"])\n\tif test \"$lt_cv_irix_exported_symbol\" = yes; then\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n\tfi\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(inherit_rpath, $1)=yes\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)\n\t     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t     ;;\n\t   *)\n\t     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    os2*)\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(archive_cmds, $1)='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      case $host_os in\n      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n        ;;\n\tmotorola)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4.3*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\t_LT_TAGVAR(ld_shlibs, $1)=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      _LT_TAGVAR(ld_shlibs, $1)=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n])\nAC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\ntest \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld\n\n_LT_DECL([], [libext], [0], [Old archive suffix (normally \"a\")])dnl\n_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally \".so\")])dnl\n_LT_DECL([], [extract_expsyms_cmds], [2],\n    [The commands to extract the exported symbol list from a shared archive])\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$_LT_TAGVAR(archive_cmds_need_lc, $1)\" in\nx|xyes)\n  # Assume -lc should be added\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $_LT_TAGVAR(archive_cmds, $1) in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      AC_CACHE_CHECK([whether -lc should be explicitly linked in],\n\t[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),\n\t[$RM conftest*\n\techo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n\tif AC_TRY_EVAL(ac_compile) 2>conftest.err; then\n\t  soname=conftest\n\t  lib=conftest\n\t  libobjs=conftest.$ac_objext\n\t  deplibs=\n\t  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)\n\t  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)\n\t  compiler_flags=-v\n\t  linker_flags=-v\n\t  verstring=\n\t  output_objdir=.\n\t  libname=conftest\n\t  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=\n\t  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1)\n\t  then\n\t    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t  else\n\t    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  fi\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag\n\telse\n\t  cat conftest.err 1>&5\n\tfi\n\t$RM conftest*\n\t])\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],\n    [Whether or not to add -lc for building shared libraries])\n_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],\n    [enable_shared_with_static_runtimes], [0],\n    [Whether or not to disallow shared libs when runtime libs are static])\n_LT_TAGDECL([], [export_dynamic_flag_spec], [1],\n    [Compiler flag to allow reflexive dlopens])\n_LT_TAGDECL([], [whole_archive_flag_spec], [1],\n    [Compiler flag to generate shared objects directly from archives])\n_LT_TAGDECL([], [compiler_needs_object], [1],\n    [Whether the compiler copes with passing no objects directly])\n_LT_TAGDECL([], [old_archive_from_new_cmds], [2],\n    [Create an old-style archive from a shared archive])\n_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],\n    [Create a temporary old-style archive to link instead of a shared archive])\n_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])\n_LT_TAGDECL([], [archive_expsym_cmds], [2])\n_LT_TAGDECL([], [module_cmds], [2],\n    [Commands used to build a loadable module if different from building\n    a shared archive.])\n_LT_TAGDECL([], [module_expsym_cmds], [2])\n_LT_TAGDECL([], [with_gnu_ld], [1],\n    [Whether we are building with GNU ld or not])\n_LT_TAGDECL([], [allow_undefined_flag], [1],\n    [Flag that allows shared libraries with undefined symbols to be built])\n_LT_TAGDECL([], [no_undefined_flag], [1],\n    [Flag that enforces no undefined symbols])\n_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],\n    [Flag to hardcode $libdir into a binary during linking.\n    This must work even if $libdir does not exist])\n_LT_TAGDECL([], [hardcode_libdir_separator], [1],\n    [Whether we need a single \"-rpath\" flag with a separated argument])\n_LT_TAGDECL([], [hardcode_direct], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary])\n_LT_TAGDECL([], [hardcode_direct_absolute], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary and the resulting library dependency is\n    \"absolute\", i.e impossible to change by setting ${shlibpath_var} if the\n    library is relocated])\n_LT_TAGDECL([], [hardcode_minus_L], [0],\n    [Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_shlibpath_var], [0],\n    [Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_automatic], [0],\n    [Set to \"yes\" if building a shared library automatically hardcodes DIR\n    into the library and all subsequent libraries and executables linked\n    against it])\n_LT_TAGDECL([], [inherit_rpath], [0],\n    [Set to yes if linker adds runtime paths of dependent libraries\n    to runtime path list])\n_LT_TAGDECL([], [link_all_deplibs], [0],\n    [Whether libtool must link a program against all its dependency libraries])\n_LT_TAGDECL([], [always_export_symbols], [0],\n    [Set to \"yes\" if exported symbols are required])\n_LT_TAGDECL([], [export_symbols_cmds], [2],\n    [The commands to list exported symbols])\n_LT_TAGDECL([], [exclude_expsyms], [1],\n    [Symbols that should not be listed in the preloaded symbols])\n_LT_TAGDECL([], [include_expsyms], [1],\n    [Symbols that must always be exported])\n_LT_TAGDECL([], [prelink_cmds], [2],\n    [Commands necessary for linking programs (against libraries) with templates])\n_LT_TAGDECL([], [postlink_cmds], [2],\n    [Commands necessary for finishing linking programs])\n_LT_TAGDECL([], [file_list_spec], [1],\n    [Specify filename containing input files])\ndnl FIXME: Not yet implemented\ndnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],\ndnl    [Compiler flag to generate thread safe objects])\n])# _LT_LINKER_SHLIBS\n\n\n# _LT_LANG_C_CONFIG([TAG])\n# ------------------------\n# Ensure that the configuration variables for a C compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_C_CONFIG],\n[m4_require([_LT_DECL_EGREP])dnl\nlt_save_CC=\"$CC\"\nAC_LANG_PUSH(C)\n\n# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n_LT_TAG_COMPILER\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_SYS_DYNAMIC_LINKER($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n  LT_SYS_DLOPEN_SELF\n  _LT_CMD_STRIPLIB\n\n  # Report which library types will actually be built\n  AC_MSG_CHECKING([if libtool supports shared libraries])\n  AC_MSG_RESULT([$can_build_shared])\n\n  AC_MSG_CHECKING([whether to build shared libraries])\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[[4-9]]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  AC_MSG_RESULT([$enable_shared])\n\n  AC_MSG_CHECKING([whether to build static libraries])\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  AC_MSG_RESULT([$enable_static])\n\n  _LT_CONFIG($1)\nfi\nAC_LANG_POP\nCC=\"$lt_save_CC\"\n])# _LT_LANG_C_CONFIG\n\n\n# _LT_LANG_CXX_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a C++ compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_CXX_CONFIG],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_PATH_MANIFEST_TOOL])dnl\nif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n    (test \"X$CXX\" != \"Xg++\"))) ; then\n  AC_PROG_CXXCPP\nelse\n  _lt_caught_CXX_error=yes\nfi\n\nAC_LANG_PUSH(C++)\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(compiler_needs_object, $1)=no\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for C++ test sources.\nac_ext=cpp\n\n# Object file extension for compiled C++ test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the CXX compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_caught_CXX_error\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"int some_variable = 0;\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=$CC\n  lt_save_CFLAGS=$CFLAGS\n  lt_save_LD=$LD\n  lt_save_GCC=$GCC\n  GCC=$GXX\n  lt_save_with_gnu_ld=$with_gnu_ld\n  lt_save_path_LD=$lt_cv_path_LD\n  if test -n \"${lt_cv_prog_gnu_ldcxx+set}\"; then\n    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx\n  else\n    $as_unset lt_cv_prog_gnu_ld\n  fi\n  if test -n \"${lt_cv_path_LDCXX+set}\"; then\n    lt_cv_path_LD=$lt_cv_path_LDCXX\n  else\n    $as_unset lt_cv_path_LD\n  fi\n  test -z \"${LDCXX+set}\" || LD=$LDCXX\n  CC=${CXX-\"c++\"}\n  CFLAGS=$CXXFLAGS\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    # We don't want -fno-exception when compiling C++ code, so set the\n    # no_builtin_flag separately\n    if test \"$GXX\" = yes; then\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\n    else\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n    fi\n\n    if test \"$GXX\" = yes; then\n      # Set up default GNU C++ configuration\n\n      LT_PATH_LD\n\n      # Check if GNU C++ uses GNU ld as the underlying linker, since the\n      # archiving commands below assume that GNU ld is being used.\n      if test \"$with_gnu_ld\" = yes; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n        # If archive_cmds runs LD, not CC, wlarc should be empty\n        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to\n        #     investigate it a little bit more. (MM)\n        wlarc='${wl}'\n\n        # ancient GNU ld didn't support --whole-archive et. al.\n        if eval \"`$CC -print-prog-name=ld` --help 2>&1\" |\n\t  $GREP 'no-whole-archive' > /dev/null; then\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n        else\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\n        fi\n      else\n        with_gnu_ld=no\n        wlarc=\n\n        # A generic and very simple default shared library creation\n        # command for GNU C++ for the case where it uses the native\n        # linker, instead of GNU ld.  If possible, this setting should\n        # overridden to take advantage of the native linker features on\n        # the platform it is being used on.\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n      fi\n\n      # Commands to make compiler produce verbose output that lists\n      # what \"hidden\" libraries, object files and flags are used when\n      # linking a shared library.\n      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\n    else\n      GXX=no\n      with_gnu_ld=no\n      wlarc=\n    fi\n\n    # PORTME: fill in a description of your system's C++ link characteristics\n    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\n    _LT_TAGVAR(ld_shlibs, $1)=yes\n    case $host_os in\n      aix3*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n      aix[[4-9]]*)\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          exp_sym_flag='-Bexport'\n          no_entry_flag=\"\"\n        else\n          aix_use_runtimelinking=no\n\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]].*|aix[[5-9]]*)\n\t    for ld_flag in $LDFLAGS; do\n\t      case $ld_flag in\n\t      *-brtl*)\n\t        aix_use_runtimelinking=yes\n\t        break\n\t        ;;\n\t      esac\n\t    done\n\t    ;;\n          esac\n\n          exp_sym_flag='-bexport'\n          no_entry_flag='-bnoentry'\n        fi\n\n        # When large executables or shared objects are built, AIX ld can\n        # have problems creating the table of contents.  If linking a library\n        # or program results in \"error TOC overflow\" add -mminimal-toc to\n        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n        _LT_TAGVAR(archive_cmds, $1)=''\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n        _LT_TAGVAR(link_all_deplibs, $1)=yes\n        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n        if test \"$GXX\" = yes; then\n          case $host_os in aix4.[[012]]|aix4.[[012]].*)\n          # We only want to do this on AIX 4.2 and lower, the check\n          # below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t     strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t    # We have reworked collect2\n\t    :\n\t  else\n\t    # We have old collect2\n\t    _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t    # It fails to find uninstalled libraries when the uninstalled\n\t    # path is not listed in the libpath.  Setting hardcode_minus_L\n\t    # to unsupported forces relinking\n\t    _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n          esac\n          shared_flag='-shared'\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag=\"$shared_flag \"'${wl}-G'\n\t  fi\n        else\n          # not using gcc\n          if test \"$host_cpu\" = ia64; then\n\t  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t  # chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n          else\n\t    if test \"$aix_use_runtimelinking\" = yes; then\n\t      shared_flag='${wl}-G'\n\t    else\n\t      shared_flag='${wl}-bM:SRE'\n\t    fi\n          fi\n        fi\n\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n        # It seems that -bexpall does not export symbols beginning with\n        # underscore (_), so it is better to generate a list of symbols to\n\t# export.\n        _LT_TAGVAR(always_export_symbols, $1)=yes\n        if test \"$aix_use_runtimelinking\" = yes; then\n          # Warning - without using the other runtime loading flags (-brtl),\n          # -berok will link without error, but may produce a broken library.\n          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n          # Determine the default libpath from the value encoded in an empty\n          # executable.\n          _LT_SYS_MODULE_PATH_AIX([$1])\n          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n        else\n          if test \"$host_cpu\" = ia64; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n          else\n\t    # Determine the default libpath from the value encoded in an\n\t    # empty executable.\n\t    _LT_SYS_MODULE_PATH_AIX([$1])\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t    # Warning - without using the other run time loading flags,\n\t    # -berok will link without error, but may produce a broken library.\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t    if test \"$with_gnu_ld\" = yes; then\n\t      # We only use this code for GNU lds that support --whole-archive.\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t    else\n\t      # Exported symbols can be pulled into shared objects from archives\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t    fi\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t    # This is similar to how AIX traditionally builds its shared\n\t    # libraries.\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n          fi\n        fi\n        ;;\n\n      beos*)\n\tif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t  # support --undefined.  This deserves some investigation.  FIXME\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      chorus*)\n        case $cc_basename in\n          *)\n\t  # FIXME: insert proper C++ library support\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\t  ;;\n        esac\n        ;;\n\n      cygwin* | mingw* | pw32* | cegcc*)\n\tcase $GXX,$cc_basename in\n\t,cl* | no,cl*)\n\t  # Native MSVC\n\t  # hardcode_libdir_flag_spec is actually meaningless, as there is\n\t  # no search path for DLLs.\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  _LT_TAGVAR(always_export_symbols, $1)=yes\n\t  _LT_TAGVAR(file_list_spec, $1)='@'\n\t  # Tell ltmain to make .lib files, not .a files.\n\t  libext=lib\n\t  # Tell ltmain to make .dll files, not .so files.\n\t  shrext_cmds=\".dll\"\n\t  # FIXME: Setting linknames here is a bad hack.\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t      $SED -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t    else\n\t      $SED -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t    fi~\n\t    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t    linknames='\n\t  # The linker will not automatically build a static lib if we build a DLL.\n\t  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t  # Don't use ranlib\n\t  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'\n\t  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile=\"@OUTPUT@\"~\n\t    lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t    case $lt_outputfile in\n\t      *.exe|*.EXE) ;;\n\t      *)\n\t\tlt_outputfile=\"$lt_outputfile.exe\"\n\t\tlt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t\t;;\n\t    esac~\n\t    func_to_tool_file \"$lt_outputfile\"~\n\t    if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t      $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t      $RM \"$lt_outputfile.manifest\";\n\t    fi'\n\t  ;;\n\t*)\n\t  # g++\n\t  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n\t  # as there is no search path for DLLs.\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  _LT_TAGVAR(always_export_symbols, $1)=no\n\t  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\n\t  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t    # If the export-symbols file already is a .def file (1st line\n\t    # is EXPORTS), use it as is; otherwise, prepend...\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t      cp $export_symbols $output_objdir/$soname.def;\n\t    else\n\t      echo EXPORTS > $output_objdir/$soname.def;\n\t      cat $export_symbols >> $output_objdir/$soname.def;\n\t    fi~\n\t    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t  else\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t  ;;\n\tesac\n\t;;\n      darwin* | rhapsody*)\n        _LT_DARWIN_LINKER_FEATURES($1)\n\t;;\n\n      dgux*)\n        case $cc_basename in\n          ec++*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          ghcx*)\n\t    # Green Hills C++ Compiler\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      freebsd2.*)\n        # C++ shared libraries reported to be fairly broken before\n\t# switch to ELF\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      freebsd-elf*)\n        _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n        ;;\n\n      freebsd* | dragonfly*)\n        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF\n        # conventions\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n        ;;\n\n      haiku*)\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n        _LT_TAGVAR(link_all_deplibs, $1)=yes\n        ;;\n\n      hpux9*)\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t             # but as the default\n\t\t\t\t             # location of the library.\n\n        case $cc_basename in\n          CC*)\n            # FIXME: insert proper C++ library support\n            _LT_TAGVAR(ld_shlibs, $1)=no\n            ;;\n          aCC*)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            # Commands to make compiler produce verbose output that lists\n            # what \"hidden\" libraries, object files and flags are used when\n            # linking a shared library.\n            #\n            # There doesn't appear to be a way to prevent this compiler from\n            # explicitly linking system object files so we need to strip them\n            # from the output so that they don't get included in the library\n            # dependencies.\n            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n            ;;\n          *)\n            if test \"$GXX\" = yes; then\n              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            else\n              # FIXME: insert proper C++ library support\n              _LT_TAGVAR(ld_shlibs, $1)=no\n            fi\n            ;;\n        esac\n        ;;\n\n      hpux10*|hpux11*)\n        if test $with_gnu_ld = no; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n          case $host_cpu in\n            hppa*64*|ia64*)\n              ;;\n            *)\n\t      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n              ;;\n          esac\n        fi\n        case $host_cpu in\n          hppa*64*|ia64*)\n            _LT_TAGVAR(hardcode_direct, $1)=no\n            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n            ;;\n          *)\n            _LT_TAGVAR(hardcode_direct, $1)=yes\n            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t\t         # but as the default\n\t\t\t\t\t         # location of the library.\n            ;;\n        esac\n\n        case $cc_basename in\n          CC*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          aCC*)\n\t    case $host_cpu in\n\t      hppa*64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      ia64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      *)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t    esac\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test $with_gnu_ld = no; then\n\t        case $host_cpu in\n\t          hppa*64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          ia64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          *)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t        esac\n\t      fi\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      interix[[3-9]]*)\n\t_LT_TAGVAR(hardcode_direct, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n\t# Instead, shared libraries are loaded at an image base (0x10000000 by\n\t# default) and relocated if they conflict, which is a slow very memory\n\t# consuming and fragmenting process.  To avoid this, we pick a random,\n\t# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n\t# time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t;;\n      irix5* | irix6*)\n        case $cc_basename in\n          CC*)\n\t    # SGI C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -ar\", where \"CC\" is the IRIX C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test \"$with_gnu_ld\" = no; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t      else\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` -o $lib'\n\t      fi\n\t    fi\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\t    ;;\n        esac\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(inherit_rpath, $1)=yes\n        ;;\n\n      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib ${wl}-retain-symbols-file,$export_symbols; mv \\$templib $lib'\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP \"ld\"`; rm -f libconftest$shared_ext; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'\n\t    ;;\n\t  icpc* | ecpc* )\n\t    # Intel C++\n\t    with_gnu_ld=yes\n\t    # version 8.0 and above of icpc choke on multiply defined symbols\n\t    # if we add $predep_objects and $postdep_objects, however 7.1 and\n\t    # earlier do not add the objects themselves.\n\t    case `$CC -V 2>&1` in\n\t      *\"Version 7.\"*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t      *)  # Version 8.0 or newer\n\t        tmp_idyn=\n\t        case $host_cpu in\n\t\t  ia64*) tmp_idyn=' -i_dynamic';;\n\t\tesac\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t    esac\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t    ;;\n          pgCC* | pgcpp*)\n            # Portland Group C++ compiler\n\t    case `$CC -V` in\n\t    *pgCC\\ [[1-5]].* | *pgcpp\\ [[1-5]].*)\n\t      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~\n\t\tcompile_command=\"$compile_command `find $tpldir -name \\*.o | sort | $NL2SP`\"'\n\t      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~\n\t\t$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \\*.o | sort | $NL2SP`~\n\t\t$RANLIB $oldlib'\n\t      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    *) # Version 6 and above use weak symbols\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n            ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'\n\n\t    runpath_var=LD_RUN_PATH\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\"`; templist=`func_echo_all \"$templist\" | $SED \"s/\\(^.*ld.*\\)\\( .*ld .*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"X$list\" | $Xsed'\n\t    ;;\n\t  xl* | mpixl* | bgxl*)\n\t    # IBM XL 8.0 on PPC, with GNU ld\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    if test \"x$supports_anon_versioning\" = xyes; then\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t\tcat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t\techo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t\t$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\t    fi\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t      _LT_TAGVAR(compiler_needs_object, $1)=yes\n\n\t      # Not sure whether something based on\n\t      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1\n\t      # would be better.\n\t      output_verbose_link_cmd='func_echo_all'\n\n\t      # Archives containing C++ object files must be created using\n\t      # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t      # necessary to make sure instantiated templates are included\n\t      # in the archive.\n\t      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n\n      lynxos*)\n        # FIXME: insert proper C++ library support\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      m88k*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      mvs*)\n        case $cc_basename in\n          cxx*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\t  *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\tesac\n\t;;\n\n      netbsd*)\n        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'\n\t  wlarc=\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\tfi\n\t# Workaround some broken pre-1.5 toolchains\n\toutput_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e \"s:-lgcc -lc -lgcc::\"'\n\t;;\n\n      *nto* | *qnx*)\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n\t;;\n\n      openbsd2*)\n        # C++ shared libraries are fairly broken\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      openbsd*)\n\tif test -f /usr/libexec/ld.so; then\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n\t  fi\n\t  output_verbose_link_cmd=func_echo_all\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      osf3* | osf4* | osf5*)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo \"$lib\" | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Archives containing C++ object files must be created using\n\t    # the KAI C++ compiler.\n\t    case $host in\n\t      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;\n\t      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;\n\t    esac\n\t    ;;\n          RCC*)\n\t    # Rational C++ 2.4.1\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          cxx*)\n\t    case $host in\n\t      osf3*)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t\t;;\n\t      *)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done~\n\t          echo \"-hidden\">> $lib.exp~\n\t          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~\n\t          $RM $lib.exp'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t\t;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\" | $GREP -v \"ld:\"`; templist=`func_echo_all \"$templist\" | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\t    ;;\n\t  *)\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t      case $host in\n\t        osf3*)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t        *)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t      esac\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t      # Commands to make compiler produce verbose output that lists\n\t      # what \"hidden\" libraries, object files and flags are used when\n\t      # linking a shared library.\n\t      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      psos*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      sunos4*)\n        case $cc_basename in\n          CC*)\n\t    # Sun C++ 4.x\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          lcc*)\n\t    # Lucid\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      solaris*)\n        case $cc_basename in\n          CC* | sunCC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t    case $host_os in\n\t      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t      *)\n\t\t# The compiler driver will combine and reorder linker options,\n\t\t# but understands `-z linker_flag'.\n\t        # Supported since Solaris 2.6 (maybe 2.5.1?)\n\t\t_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\t        ;;\n\t    esac\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\n\t    output_verbose_link_cmd='func_echo_all'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t    ;;\n          gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\n\t    # The C++ compiler must be used to create the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    # GNU C++ compiler with Solaris linker\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'\n\t      if $CC --version | $GREP -v '^2\\.7' > /dev/null; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\t      else\n\t        # g++ 2.7 appears to require `-G' NOT `-shared' on this\n\t        # platform.\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\t      fi\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'\n\t      case $host_os in\n\t\tsolaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t\t*)\n\t\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\t\t  ;;\n\t      esac\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      case $cc_basename in\n        CC*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n      esac\n      ;;\n\n      sysv5* | sco3.2v5* | sco5v6*)\n\t# Note: We can NOT use -z defs as we might desire, because we do not\n\t# link with -lc, and that would cause any symbols used from libc to\n\t# always be unresolved, which means just about no library would\n\t# ever link correctly.  If we're not using GNU ld we use -z text\n\t# though, which does catch some bad symbols but isn't as heavy-handed\n\t# as -z defs.\n\t_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n\t_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n\t_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n\t_LT_TAGVAR(link_all_deplibs, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n\trunpath_var='LD_RUN_PATH'\n\n\tcase $cc_basename in\n          CC*)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~\n\t      '\"$_LT_TAGVAR(old_archive_cmds, $1)\"\n\t    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~\n\t      '\"$_LT_TAGVAR(reload_cmds, $1)\"\n\t    ;;\n\t  *)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    ;;\n\tesac\n      ;;\n\n      tandem*)\n        case $cc_basename in\n          NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      vxworks*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      *)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n    esac\n\n    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\n    test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n    _LT_TAGVAR(GCC, $1)=\"$GXX\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  CC=$lt_save_CC\n  CFLAGS=$lt_save_CFLAGS\n  LDCXX=$LD\n  LD=$lt_save_LD\n  GCC=$lt_save_GCC\n  with_gnu_ld=$lt_save_with_gnu_ld\n  lt_cv_path_LDCXX=$lt_cv_path_LD\n  lt_cv_path_LD=$lt_save_path_LD\n  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld\n  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld\nfi # test \"$_lt_caught_CXX_error\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_CXX_CONFIG\n\n\n# _LT_FUNC_STRIPNAME_CNF\n# ----------------------\n# func_stripname_cnf prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n#\n# This function is identical to the (non-XSI) version of func_stripname,\n# except this one can be used by m4 code that may be executed by configure,\n# rather than the libtool script.\nm4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl\nAC_REQUIRE([_LT_DECL_SED])\nAC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])\nfunc_stripname_cnf ()\n{\n  case ${2} in\n  .*) func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%\\\\\\\\${2}\\$%%\"`;;\n  *)  func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%${2}\\$%%\"`;;\n  esac\n} # func_stripname_cnf\n])# _LT_FUNC_STRIPNAME_CNF\n\n# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])\n# ---------------------------------\n# Figure out \"hidden\" library dependencies from verbose\n# compiler output when linking a shared library.\n# Parse the compiler output and extract the necessary\n# objects, libraries and library flags.\nm4_defun([_LT_SYS_HIDDEN_LIBDEPS],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nAC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl\n# Dependencies to place before and after the object being linked:\n_LT_TAGVAR(predep_objects, $1)=\n_LT_TAGVAR(postdep_objects, $1)=\n_LT_TAGVAR(predeps, $1)=\n_LT_TAGVAR(postdeps, $1)=\n_LT_TAGVAR(compiler_lib_search_path, $1)=\n\ndnl we can't use the lt_simple_compile_test_code here,\ndnl because it contains code intended for an executable,\ndnl not a library.  It's possible we should let each\ndnl tag define a new lt_????_link_test_code variable,\ndnl but it's only used here...\nm4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF\nint a;\nvoid foo (void) { a = 0; }\n_LT_EOF\n], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF\nclass Foo\n{\npublic:\n  Foo (void) { a = 0; }\nprivate:\n  int a;\n};\n_LT_EOF\n], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer*4 a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF\npublic class foo {\n  private int a;\n  public void bar (void) {\n    a = 0;\n  }\n};\n_LT_EOF\n], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF\npackage foo\nfunc foo() {\n}\n_LT_EOF\n])\n\n_lt_libdeps_save_CFLAGS=$CFLAGS\ncase \"$CC $CFLAGS \" in #(\n*\\ -flto*\\ *) CFLAGS=\"$CFLAGS -fno-lto\" ;;\n*\\ -fwhopr*\\ *) CFLAGS=\"$CFLAGS -fno-whopr\" ;;\n*\\ -fuse-linker-plugin*\\ *) CFLAGS=\"$CFLAGS -fno-use-linker-plugin\" ;;\nesac\n\ndnl Parse the compiler output and extract the necessary\ndnl objects, libraries and library flags.\nif AC_TRY_EVAL(ac_compile); then\n  # Parse the compiler output and extract the necessary\n  # objects, libraries and library flags.\n\n  # Sentinel used to keep track of whether or not we are before\n  # the conftest object file.\n  pre_test_object_deps_done=no\n\n  for p in `eval \"$output_verbose_link_cmd\"`; do\n    case ${prev}${p} in\n\n    -L* | -R* | -l*)\n       # Some compilers place space between \"-{L,R}\" and the path.\n       # Remove the space.\n       if test $p = \"-L\" ||\n          test $p = \"-R\"; then\n\t prev=$p\n\t continue\n       fi\n\n       # Expand the sysroot to ease extracting the directories later.\n       if test -z \"$prev\"; then\n         case $p in\n         -L*) func_stripname_cnf '-L' '' \"$p\"; prev=-L; p=$func_stripname_result ;;\n         -R*) func_stripname_cnf '-R' '' \"$p\"; prev=-R; p=$func_stripname_result ;;\n         -l*) func_stripname_cnf '-l' '' \"$p\"; prev=-l; p=$func_stripname_result ;;\n         esac\n       fi\n       case $p in\n       =*) func_stripname_cnf '=' '' \"$p\"; p=$lt_sysroot$func_stripname_result ;;\n       esac\n       if test \"$pre_test_object_deps_done\" = no; then\n\t case ${prev} in\n\t -L | -R)\n\t   # Internal compiler library paths should come after those\n\t   # provided the user.  The postdeps already come after the\n\t   # user supplied libs so there is no need to process them.\n\t   if test -z \"$_LT_TAGVAR(compiler_lib_search_path, $1)\"; then\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${prev}${p}\"\n\t   else\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}\"\n\t   fi\n\t   ;;\n\t # The \"-l\" case would never come before the object being\n\t # linked, so don't bother handling this case.\n\t esac\n       else\n\t if test -z \"$_LT_TAGVAR(postdeps, $1)\"; then\n\t   _LT_TAGVAR(postdeps, $1)=\"${prev}${p}\"\n\t else\n\t   _LT_TAGVAR(postdeps, $1)=\"${_LT_TAGVAR(postdeps, $1)} ${prev}${p}\"\n\t fi\n       fi\n       prev=\n       ;;\n\n    *.lto.$objext) ;; # Ignore GCC LTO objects\n    *.$objext)\n       # This assumes that the test object file only shows up\n       # once in the compiler output.\n       if test \"$p\" = \"conftest.$objext\"; then\n\t pre_test_object_deps_done=yes\n\t continue\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t if test -z \"$_LT_TAGVAR(predep_objects, $1)\"; then\n\t   _LT_TAGVAR(predep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(predep_objects, $1)=\"$_LT_TAGVAR(predep_objects, $1) $p\"\n\t fi\n       else\n\t if test -z \"$_LT_TAGVAR(postdep_objects, $1)\"; then\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$_LT_TAGVAR(postdep_objects, $1) $p\"\n\t fi\n       fi\n       ;;\n\n    *) ;; # Ignore the rest.\n\n    esac\n  done\n\n  # Clean up.\n  rm -f a.out a.exe\nelse\n  echo \"libtool.m4: error: problem compiling $1 test program\"\nfi\n\n$RM -f confest.$objext\nCFLAGS=$_lt_libdeps_save_CFLAGS\n\n# PORTME: override above test on systems where it is broken\nm4_if([$1], [CXX],\n[case $host_os in\ninterix[[3-9]]*)\n  # Interix 3.5 installs completely hosed .la files for C++, so rather than\n  # hack all around it, let's just trust \"g++\" to DTRT.\n  _LT_TAGVAR(predep_objects,$1)=\n  _LT_TAGVAR(postdep_objects,$1)=\n  _LT_TAGVAR(postdeps,$1)=\n  ;;\n\nlinux*)\n  case `$CC -V 2>&1 | sed 5q` in\n  *Sun\\ C*)\n    # Sun C++ 5.9\n\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\n\nsolaris*)\n  case $cc_basename in\n  CC* | sunCC*)\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    # Adding this requires a known-good setup of shared libraries for\n    # Sun compiler versions before 5.6, else PIC objects from an old\n    # archive will be linked into the output, leading to subtle bugs.\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\nesac\n])\n\ncase \" $_LT_TAGVAR(postdeps, $1) \" in\n*\" -lc \"*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;\nesac\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=\nif test -n \"${_LT_TAGVAR(compiler_lib_search_path, $1)}\"; then\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo \" ${_LT_TAGVAR(compiler_lib_search_path, $1)}\" | ${SED} -e 's! -L! !g' -e 's!^ !!'`\nfi\n_LT_TAGDECL([], [compiler_lib_search_dirs], [1],\n    [The directories searched by this compiler when creating a shared library])\n_LT_TAGDECL([], [predep_objects], [1],\n    [Dependencies to place before and after the objects being linked to\n    create a shared library])\n_LT_TAGDECL([], [postdep_objects], [1])\n_LT_TAGDECL([], [predeps], [1])\n_LT_TAGDECL([], [postdeps], [1])\n_LT_TAGDECL([], [compiler_lib_search_path], [1],\n    [The library search path used internally by the compiler when linking\n    a shared library])\n])# _LT_SYS_HIDDEN_LIBDEPS\n\n\n# _LT_LANG_F77_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a Fortran 77 compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_F77_CONFIG],\n[AC_LANG_PUSH(Fortran 77)\nif test -z \"$F77\" || test \"X$F77\" = \"Xno\"; then\n  _lt_disable_F77=yes\nfi\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for f77 test sources.\nac_ext=f\n\n# Object file extension for compiled f77 test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the F77 compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_F77\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  lt_save_CFLAGS=$CFLAGS\n  CC=${F77-\"f77\"}\n  CFLAGS=$FFLAGS\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n  GCC=$G77\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$G77\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=\"$lt_save_CC\"\n  CFLAGS=\"$lt_save_CFLAGS\"\nfi # test \"$_lt_disable_F77\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_F77_CONFIG\n\n\n# _LT_LANG_FC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for a Fortran compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_FC_CONFIG],\n[AC_LANG_PUSH(Fortran)\n\nif test -z \"$FC\" || test \"X$FC\" = \"Xno\"; then\n  _lt_disable_FC=yes\nfi\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for fc test sources.\nac_ext=${ac_fc_srcext-f}\n\n# Object file extension for compiled fc test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the FC compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_FC\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  lt_save_CFLAGS=$CFLAGS\n  CC=${FC-\"f95\"}\n  CFLAGS=$FCFLAGS\n  compiler=$CC\n  GCC=$ac_cv_fc_compiler_gnu\n\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$ac_cv_fc_compiler_gnu\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=$lt_save_CC\n  CFLAGS=$lt_save_CFLAGS\nfi # test \"$_lt_disable_FC\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_FC_CONFIG\n\n\n# _LT_LANG_GCJ_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for the GNU Java Compiler compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_GCJ_CONFIG],\n[AC_REQUIRE([LT_PROG_GCJ])dnl\nAC_LANG_SAVE\n\n# Source file extension for Java test sources.\nac_ext=java\n\n# Object file extension for compiled Java test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"class foo {}\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=yes\nCC=${GCJ-\"gcj\"}\nCFLAGS=$GCJFLAGS\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_TAGVAR(LD, $1)=\"$LD\"\n_LT_CC_BASENAME([$compiler])\n\n# GCJ did not exist at the time GCC didn't implicitly link libc in.\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n\n  _LT_CONFIG($1)\nfi\n\nAC_LANG_RESTORE\n\nGCC=$lt_save_GCC\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_GCJ_CONFIG\n\n\n# _LT_LANG_GO_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for the GNU Go compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_GO_CONFIG],\n[AC_REQUIRE([LT_PROG_GO])dnl\nAC_LANG_SAVE\n\n# Source file extension for Go test sources.\nac_ext=go\n\n# Object file extension for compiled Go test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"package main; func main() { }\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='package main; func main() { }'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=yes\nCC=${GOC-\"gccgo\"}\nCFLAGS=$GOFLAGS\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_TAGVAR(LD, $1)=\"$LD\"\n_LT_CC_BASENAME([$compiler])\n\n# Go did not exist at the time GCC didn't implicitly link libc in.\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n\n  _LT_CONFIG($1)\nfi\n\nAC_LANG_RESTORE\n\nGCC=$lt_save_GCC\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_GO_CONFIG\n\n\n# _LT_LANG_RC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for the Windows resource compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_RC_CONFIG],\n[AC_REQUIRE([LT_PROG_RC])dnl\nAC_LANG_SAVE\n\n# Source file extension for RC test sources.\nac_ext=rc\n\n# Object file extension for compiled RC test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code='sample MENU { MENUITEM \"&Soup\", 100, CHECKED }'\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"$lt_simple_compile_test_code\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=\nCC=${RC-\"windres\"}\nCFLAGS=\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n\nif test -n \"$compiler\"; then\n  :\n  _LT_CONFIG($1)\nfi\n\nGCC=$lt_save_GCC\nAC_LANG_RESTORE\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_RC_CONFIG\n\n\n# LT_PROG_GCJ\n# -----------\nAC_DEFUN([LT_PROG_GCJ],\n[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],\n  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],\n    [AC_CHECK_TOOL(GCJ, gcj,)\n      test \"x${GCJFLAGS+set}\" = xset || GCJFLAGS=\"-g -O2\"\n      AC_SUBST(GCJFLAGS)])])[]dnl\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_GCJ], [])\n\n\n# LT_PROG_GO\n# ----------\nAC_DEFUN([LT_PROG_GO],\n[AC_CHECK_TOOL(GOC, gccgo,)\n])\n\n\n# LT_PROG_RC\n# ----------\nAC_DEFUN([LT_PROG_RC],\n[AC_CHECK_TOOL(RC, windres,)\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_RC], [])\n\n\n# _LT_DECL_EGREP\n# --------------\n# If we don't have a new enough Autoconf to choose the best grep\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_EGREP],\n[AC_REQUIRE([AC_PROG_EGREP])dnl\nAC_REQUIRE([AC_PROG_FGREP])dnl\ntest -z \"$GREP\" && GREP=grep\n_LT_DECL([], [GREP], [1], [A grep program that handles long lines])\n_LT_DECL([], [EGREP], [1], [An ERE matcher])\n_LT_DECL([], [FGREP], [1], [A literal string matcher])\ndnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too\nAC_SUBST([GREP])\n])\n\n\n# _LT_DECL_OBJDUMP\n# --------------\n# If we don't have a new enough Autoconf to choose the best objdump\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_OBJDUMP],\n[AC_CHECK_TOOL(OBJDUMP, objdump, false)\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])\nAC_SUBST([OBJDUMP])\n])\n\n# _LT_DECL_DLLTOOL\n# ----------------\n# Ensure DLLTOOL variable is set.\nm4_defun([_LT_DECL_DLLTOOL],\n[AC_CHECK_TOOL(DLLTOOL, dlltool, false)\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n_LT_DECL([], [DLLTOOL], [1], [DLL creation program])\nAC_SUBST([DLLTOOL])\n])\n\n# _LT_DECL_SED\n# ------------\n# Check for a fully-functional sed program, that truncates\n# as few characters as possible.  Prefer GNU sed if found.\nm4_defun([_LT_DECL_SED],\n[AC_PROG_SED\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n_LT_DECL([], [SED], [1], [A sed program that does not truncate output])\n_LT_DECL([], [Xsed], [\"\\$SED -e 1s/^X//\"],\n    [Sed that helps us avoid accidentally triggering echo(1) options like -n])\n])# _LT_DECL_SED\n\nm4_ifndef([AC_PROG_SED], [\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_SED.  When it is available in   #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\n\nm4_defun([AC_PROG_SED],\n[AC_MSG_CHECKING([for a sed that does not truncate output])\nAC_CACHE_VAL(lt_cv_path_SED,\n[# Loop through the user's path and test for sed and gsed.\n# Then use that list of sed's as ones to test for truncation.\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 lt_ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      if $as_executable_p \"$as_dir/$lt_ac_prog$ac_exec_ext\"; then\n        lt_ac_sed_list=\"$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext\"\n      fi\n    done\n  done\ndone\nIFS=$as_save_IFS\nlt_ac_max=0\nlt_ac_count=0\n# Add /usr/xpg4/bin/sed as it is typically found on Solaris\n# along with /bin/sed that truncates output.\nfor lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do\n  test ! -f $lt_ac_sed && continue\n  cat /dev/null > conftest.in\n  lt_ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >conftest.in\n  # Check for GNU sed and select it if it is found.\n  if \"$lt_ac_sed\" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then\n    lt_cv_path_SED=$lt_ac_sed\n    break\n  fi\n  while true; do\n    cat conftest.in conftest.in >conftest.tmp\n    mv conftest.tmp conftest.in\n    cp conftest.in conftest.nl\n    echo >>conftest.nl\n    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break\n    cmp -s conftest.out conftest.nl || break\n    # 10000 chars as input seems more than enough\n    test $lt_ac_count -gt 10 && break\n    lt_ac_count=`expr $lt_ac_count + 1`\n    if test $lt_ac_count -gt $lt_ac_max; then\n      lt_ac_max=$lt_ac_count\n      lt_cv_path_SED=$lt_ac_sed\n    fi\n  done\ndone\n])\nSED=$lt_cv_path_SED\nAC_SUBST([SED])\nAC_MSG_RESULT([$SED])\n])#AC_PROG_SED\n])#m4_ifndef\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_SED], [])\n\n\n# _LT_CHECK_SHELL_FEATURES\n# ------------------------\n# Find out whether the shell is Bourne or XSI compatible,\n# or has some other useful features.\nm4_defun([_LT_CHECK_SHELL_FEATURES],\n[AC_MSG_CHECKING([whether the shell understands some XSI constructs])\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,b/c, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\nAC_MSG_RESULT([$xsi_shell])\n_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])\n\nAC_MSG_CHECKING([whether the shell understands \"+=\"])\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$[1]+=\\$[2]\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\nAC_MSG_RESULT([$lt_shell_append])\n_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n_LT_DECL([], [lt_unset], [0], [whether the shell understands \"unset\"])dnl\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl\n_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl\n])# _LT_CHECK_SHELL_FEATURES\n\n\n# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)\n# ------------------------------------------------------\n# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and\n# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.\nm4_defun([_LT_PROG_FUNCTION_REPLACE],\n[dnl {\nsed -e '/^$1 ()$/,/^} # $1 /c\\\n$1 ()\\\n{\\\nm4_bpatsubsts([$2], [$], [\\\\], [^\\([\t ]\\)], [\\\\\\1])\n} # Extended-shell $1 implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n])\n\n\n# _LT_PROG_REPLACE_SHELLFNS\n# -------------------------\n# Replace existing portable implementations of several shell functions with\n# equivalent extended shell implementations where those features are available..\nm4_defun([_LT_PROG_REPLACE_SHELLFNS],\n[if test x\"$xsi_shell\" = xyes; then\n  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl\n    case ${1} in\n      */*) func_dirname_result=\"${1%/*}${2}\" ;;\n      *  ) func_dirname_result=\"${3}\" ;;\n    esac])\n\n  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl\n    func_basename_result=\"${1##*/}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl\n    case ${1} in\n      */*) func_dirname_result=\"${1%/*}${2}\" ;;\n      *  ) func_dirname_result=\"${3}\" ;;\n    esac\n    func_basename_result=\"${1##*/}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl\n    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\n    # positional parameters, so assign one to ordinary parameter first.\n    func_stripname_result=${3}\n    func_stripname_result=${func_stripname_result#\"${1}\"}\n    func_stripname_result=${func_stripname_result%\"${2}\"}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl\n    func_split_long_opt_name=${1%%=*}\n    func_split_long_opt_arg=${1#*=}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl\n    func_split_short_opt_arg=${1#??}\n    func_split_short_opt_name=${1%\"$func_split_short_opt_arg\"}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl\n    case ${1} in\n      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\n      *)    func_lo2o_result=${1} ;;\n    esac])\n\n  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])\n\n  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])\n\n  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])\nfi\n\nif test x\"$lt_shell_append\" = xyes; then\n  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval \"${1}+=\\\\${2}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl\n    func_quote_for_eval \"${2}\"\ndnl m4 expansion turns \\\\\\\\ into \\\\, and then the shell eval turns that into \\\n    eval \"${1}+=\\\\\\\\ \\\\$func_quote_for_eval_result\"])\n\n  # Save a `func_append' function call where possible by direct use of '+='\n  sed -e 's%func_append \\([[a-zA-Z_]]\\{1,\\}\\) \"%\\1+=\"%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nelse\n  # Save a `func_append' function call even when '+=' is not available\n  sed -e 's%func_append \\([[a-zA-Z_]]\\{1,\\}\\) \"%\\1=\"$\\1%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nfi\n\nif test x\"$_lt_function_replace_fail\" = x\":\"; then\n  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])\nfi\n])\n\n# _LT_PATH_CONVERSION_FUNCTIONS\n# -----------------------------\n# Determine which file name conversion functions should be used by\n# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed\n# for certain cross-compile configurations and native mingw.\nm4_defun([_LT_PATH_CONVERSION_FUNCTIONS],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nAC_MSG_CHECKING([how to convert $build file names to $host format])\nAC_CACHE_VAL(lt_cv_to_host_file_cmd,\n[case $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32\n        ;;\n    esac\n    ;;\n  *-*-cygwin* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_noop\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin\n        ;;\n    esac\n    ;;\n  * ) # unhandled hosts (and \"normal\" native builds)\n    lt_cv_to_host_file_cmd=func_convert_file_noop\n    ;;\nesac\n])\nto_host_file_cmd=$lt_cv_to_host_file_cmd\nAC_MSG_RESULT([$lt_cv_to_host_file_cmd])\n_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],\n         [0], [convert $build file names to $host format])dnl\n\nAC_MSG_CHECKING([how to convert $build file names to toolchain format])\nAC_CACHE_VAL(lt_cv_to_tool_file_cmd,\n[#assume ordinary cross tools, or native build.\nlt_cv_to_tool_file_cmd=func_convert_file_noop\ncase $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32\n        ;;\n    esac\n    ;;\nesac\n])\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\nAC_MSG_RESULT([$lt_cv_to_tool_file_cmd])\n_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],\n         [0], [convert $build files to toolchain format])dnl\n])# _LT_PATH_CONVERSION_FUNCTIONS\n\n# Helper functions for option handling.                    -*- Autoconf -*-\n#\n#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,\n#   Inc.\n#   Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 7 ltoptions.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])\n\n\n# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)\n# ------------------------------------------\nm4_define([_LT_MANGLE_OPTION],\n[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])\n\n\n# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)\n# ---------------------------------------\n# Set option OPTION-NAME for macro MACRO-NAME, and if there is a\n# matching handler defined, dispatch to it.  Other OPTION-NAMEs are\n# saved as a flag.\nm4_define([_LT_SET_OPTION],\n[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl\nm4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),\n        _LT_MANGLE_DEFUN([$1], [$2]),\n    [m4_warning([Unknown $1 option `$2'])])[]dnl\n])\n\n\n# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])\n# ------------------------------------------------------------\n# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.\nm4_define([_LT_IF_OPTION],\n[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])\n\n\n# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)\n# -------------------------------------------------------\n# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME\n# are set.\nm4_define([_LT_UNLESS_OPTIONS],\n[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n\t    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),\n\t\t      [m4_define([$0_found])])])[]dnl\nm4_ifdef([$0_found], [m4_undefine([$0_found])], [$3\n])[]dnl\n])\n\n\n# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)\n# ----------------------------------------\n# OPTION-LIST is a space-separated list of Libtool options associated\n# with MACRO-NAME.  If any OPTION has a matching handler declared with\n# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about\n# the unknown option and exit.\nm4_defun([_LT_SET_OPTIONS],\n[# Set options\nm4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n    [_LT_SET_OPTION([$1], _LT_Option)])\n\nm4_if([$1],[LT_INIT],[\n  dnl\n  dnl Simply set some default values (i.e off) if boolean options were not\n  dnl specified:\n  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no\n  ])\n  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no\n  ])\n  dnl\n  dnl If no reference was made to various pairs of opposing options, then\n  dnl we run the default mode handler for the pair.  For example, if neither\n  dnl `shared' nor `disable-shared' was passed, we enable building of shared\n  dnl archives by default:\n  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])\n  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],\n  \t\t   [_LT_ENABLE_FAST_INSTALL])\n  ])\n])# _LT_SET_OPTIONS\n\n\n\n# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)\n# -----------------------------------------\nm4_define([_LT_MANGLE_DEFUN],\n[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])\n\n\n# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)\n# -----------------------------------------------\nm4_define([LT_OPTION_DEFINE],\n[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl\n])# LT_OPTION_DEFINE\n\n\n# dlopen\n# ------\nLT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes\n])\n\nAU_DEFUN([AC_LIBTOOL_DLOPEN],\n[_LT_SET_OPTION([LT_INIT], [dlopen])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `dlopen' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])\n\n\n# win32-dll\n# ---------\n# Declare package support for building win32 dll's.\nLT_OPTION_DEFINE([LT_INIT], [win32-dll],\n[enable_win32_dll=yes\n\ncase $host in\n*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)\n  AC_CHECK_TOOL(AS, as, false)\n  AC_CHECK_TOOL(DLLTOOL, dlltool, false)\n  AC_CHECK_TOOL(OBJDUMP, objdump, false)\n  ;;\nesac\n\ntest -z \"$AS\" && AS=as\n_LT_DECL([], [AS],      [1], [Assembler program])dnl\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl\n])# win32-dll\n\nAU_DEFUN([AC_LIBTOOL_WIN32_DLL],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n_LT_SET_OPTION([LT_INIT], [win32-dll])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `win32-dll' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])\n\n\n# _LT_ENABLE_SHARED([DEFAULT])\n# ----------------------------\n# implement the --enable-shared flag, and supports the `shared' and\n# `disable-shared' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_SHARED],\n[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([shared],\n    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],\n\t[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)\n\n    _LT_DECL([build_libtool_libs], [enable_shared], [0],\n\t[Whether or not to build shared libraries])\n])# _LT_ENABLE_SHARED\n\nLT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])\n])\n\nAC_DEFUN([AC_DISABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], [disable-shared])\n])\n\nAU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])\nAU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_SHARED], [])\ndnl AC_DEFUN([AM_DISABLE_SHARED], [])\n\n\n\n# _LT_ENABLE_STATIC([DEFAULT])\n# ----------------------------\n# implement the --enable-static flag, and support the `static' and\n# `disable-static' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_STATIC],\n[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([static],\n    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],\n\t[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)\n\n    _LT_DECL([build_old_libs], [enable_static], [0],\n\t[Whether or not to build static libraries])\n])# _LT_ENABLE_STATIC\n\nLT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])\n])\n\nAC_DEFUN([AC_DISABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], [disable-static])\n])\n\nAU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])\nAU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_STATIC], [])\ndnl AC_DEFUN([AM_DISABLE_STATIC], [])\n\n\n\n# _LT_ENABLE_FAST_INSTALL([DEFAULT])\n# ----------------------------------\n# implement the --enable-fast-install flag, and support the `fast-install'\n# and `disable-fast-install' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_FAST_INSTALL],\n[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([fast-install],\n    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],\n    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)\n\n_LT_DECL([fast_install], [enable_fast_install], [0],\n\t [Whether or not to optimize for fast installation])dnl\n])# _LT_ENABLE_FAST_INSTALL\n\nLT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])\n\n# Old names:\nAU_DEFUN([AC_ENABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `fast-install' option into LT_INIT's first parameter.])\n])\n\nAU_DEFUN([AC_DISABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], [disable-fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `disable-fast-install' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])\ndnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])\n\n\n# _LT_WITH_PIC([MODE])\n# --------------------\n# implement the --with-pic flag, and support the `pic-only' and `no-pic'\n# LT_INIT options.\n# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.\nm4_define([_LT_WITH_PIC],\n[AC_ARG_WITH([pic],\n    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],\n\t[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],\n    [lt_p=${PACKAGE-default}\n    case $withval in\n    yes|no) pic_mode=$withval ;;\n    *)\n      pic_mode=default\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for lt_pkg in $withval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$lt_pkg\" = \"X$lt_p\"; then\n\t  pic_mode=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [pic_mode=default])\n\ntest -z \"$pic_mode\" && pic_mode=m4_default([$1], [default])\n\n_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl\n])# _LT_WITH_PIC\n\nLT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])\n\n# Old name:\nAU_DEFUN([AC_LIBTOOL_PICMODE],\n[_LT_SET_OPTION([LT_INIT], [pic-only])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `pic-only' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])\n\n\nm4_define([_LTDL_MODE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],\n\t\t [m4_define([_LTDL_MODE], [nonrecursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [recursive],\n\t\t [m4_define([_LTDL_MODE], [recursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [subproject],\n\t\t [m4_define([_LTDL_MODE], [subproject])])\n\nm4_define([_LTDL_TYPE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [installable],\n\t\t [m4_define([_LTDL_TYPE], [installable])])\nLT_OPTION_DEFINE([LTDL_INIT], [convenience],\n\t\t [m4_define([_LTDL_TYPE], [convenience])])\n\n# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-\n#\n# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.\n# Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 6 ltsugar.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])\n\n\n# lt_join(SEP, ARG1, [ARG2...])\n# -----------------------------\n# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their\n# associated separator.\n# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier\n# versions in m4sugar had bugs.\nm4_define([lt_join],\n[m4_if([$#], [1], [],\n       [$#], [2], [[$2]],\n       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])\nm4_define([_lt_join],\n[m4_if([$#$2], [2], [],\n       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])\n\n\n# lt_car(LIST)\n# lt_cdr(LIST)\n# ------------\n# Manipulate m4 lists.\n# These macros are necessary as long as will still need to support\n# Autoconf-2.59 which quotes differently.\nm4_define([lt_car], [[$1]])\nm4_define([lt_cdr],\n[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],\n       [$#], 1, [],\n       [m4_dquote(m4_shift($@))])])\nm4_define([lt_unquote], $1)\n\n\n# lt_append(MACRO-NAME, STRING, [SEPARATOR])\n# ------------------------------------------\n# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.\n# Note that neither SEPARATOR nor STRING are expanded; they are appended\n# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).\n# No SEPARATOR is output if MACRO-NAME was previously undefined (different\n# than defined and empty).\n#\n# This macro is needed until we can rely on Autoconf 2.62, since earlier\n# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.\nm4_define([lt_append],\n[m4_define([$1],\n\t   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])\n\n\n\n# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])\n# ----------------------------------------------------------\n# Produce a SEP delimited list of all paired combinations of elements of\n# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list\n# has the form PREFIXmINFIXSUFFIXn.\n# Needed until we can rely on m4_combine added in Autoconf 2.62.\nm4_define([lt_combine],\n[m4_if(m4_eval([$# > 3]), [1],\n       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl\n[[m4_foreach([_Lt_prefix], [$2],\n\t     [m4_foreach([_Lt_suffix],\n\t\t]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,\n\t[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])\n\n\n# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])\n# -----------------------------------------------------------------------\n# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited\n# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.\nm4_define([lt_if_append_uniq],\n[m4_ifdef([$1],\n\t  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],\n\t\t [lt_append([$1], [$2], [$3])$4],\n\t\t [$5])],\n\t  [lt_append([$1], [$2], [$3])$4])])\n\n\n# lt_dict_add(DICT, KEY, VALUE)\n# -----------------------------\nm4_define([lt_dict_add],\n[m4_define([$1($2)], [$3])])\n\n\n# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)\n# --------------------------------------------\nm4_define([lt_dict_add_subkey],\n[m4_define([$1($2:$3)], [$4])])\n\n\n# lt_dict_fetch(DICT, KEY, [SUBKEY])\n# ----------------------------------\nm4_define([lt_dict_fetch],\n[m4_ifval([$3],\n\tm4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),\n    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])\n\n\n# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])\n# -----------------------------------------------------------------\nm4_define([lt_if_dict_fetch],\n[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],\n\t[$5],\n    [$6])])\n\n\n# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])\n# --------------------------------------------------------------\nm4_define([lt_dict_filter],\n[m4_if([$5], [], [],\n  [lt_join(m4_quote(m4_default([$4], [[, ]])),\n           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),\n\t\t      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl\n])\n\n# ltversion.m4 -- version numbers\t\t\t-*- Autoconf -*-\n#\n#   Copyright (C) 2004 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# @configure_input@\n\n# serial 3337 ltversion.m4\n# This file is part of GNU Libtool\n\nm4_define([LT_PACKAGE_VERSION], [2.4.2])\nm4_define([LT_PACKAGE_REVISION], [1.3337])\n\nAC_DEFUN([LTVERSION_VERSION],\n[macro_version='2.4.2'\nmacro_revision='1.3337'\n_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])\n_LT_DECL(, macro_revision, 0)\n])\n\n# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-\n#\n#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004.\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 5 lt~obsolete.m4\n\n# These exist entirely to fool aclocal when bootstrapping libtool.\n#\n# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)\n# which have later been changed to m4_define as they aren't part of the\n# exported API, or moved to Autoconf or Automake where they belong.\n#\n# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN\n# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us\n# using a macro with the same name in our local m4/libtool.m4 it'll\n# pull the old libtool.m4 in (it doesn't see our shiny new m4_define\n# and doesn't know about Autoconf macros at all.)\n#\n# So we provide this file, which has a silly filename so it's always\n# included after everything else.  This provides aclocal with the\n# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything\n# because those macros already exist, or will be overwritten later.\n# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. \n#\n# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.\n# Yes, that means every name once taken will need to remain here until\n# we give up compatibility with versions before 1.7, at which point\n# we need to keep only those names which we still refer to.\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])\n\nm4_ifndef([AC_LIBTOOL_LINKER_OPTION],\t[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])\nm4_ifndef([AC_PROG_EGREP],\t\t[AC_DEFUN([AC_PROG_EGREP])])\nm4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],\t[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])\nm4_ifndef([_LT_AC_SHELL_INIT],\t\t[AC_DEFUN([_LT_AC_SHELL_INIT])])\nm4_ifndef([_LT_AC_SYS_LIBPATH_AIX],\t[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])\nm4_ifndef([_LT_PROG_LTMAIN],\t\t[AC_DEFUN([_LT_PROG_LTMAIN])])\nm4_ifndef([_LT_AC_TAGVAR],\t\t[AC_DEFUN([_LT_AC_TAGVAR])])\nm4_ifndef([AC_LTDL_ENABLE_INSTALL],\t[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])\nm4_ifndef([AC_LTDL_PREOPEN],\t\t[AC_DEFUN([AC_LTDL_PREOPEN])])\nm4_ifndef([_LT_AC_SYS_COMPILER],\t[AC_DEFUN([_LT_AC_SYS_COMPILER])])\nm4_ifndef([_LT_AC_LOCK],\t\t[AC_DEFUN([_LT_AC_LOCK])])\nm4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],\t[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])\nm4_ifndef([_LT_AC_TRY_DLOPEN_SELF],\t[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])\nm4_ifndef([AC_LIBTOOL_PROG_CC_C_O],\t[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])\nm4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])\nm4_ifndef([AC_LIBTOOL_OBJDIR],\t\t[AC_DEFUN([AC_LIBTOOL_OBJDIR])])\nm4_ifndef([AC_LTDL_OBJDIR],\t\t[AC_DEFUN([AC_LTDL_OBJDIR])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])\nm4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],\t[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])\nm4_ifndef([AC_PATH_MAGIC],\t\t[AC_DEFUN([AC_PATH_MAGIC])])\nm4_ifndef([AC_PROG_LD_GNU],\t\t[AC_DEFUN([AC_PROG_LD_GNU])])\nm4_ifndef([AC_PROG_LD_RELOAD_FLAG],\t[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])\nm4_ifndef([AC_DEPLIBS_CHECK_METHOD],\t[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])\nm4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],\t[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])\nm4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],\t[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])\nm4_ifndef([LT_AC_PROG_EGREP],\t\t[AC_DEFUN([LT_AC_PROG_EGREP])])\nm4_ifndef([LT_AC_PROG_SED],\t\t[AC_DEFUN([LT_AC_PROG_SED])])\nm4_ifndef([_LT_CC_BASENAME],\t\t[AC_DEFUN([_LT_CC_BASENAME])])\nm4_ifndef([_LT_COMPILER_BOILERPLATE],\t[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])\nm4_ifndef([_LT_LINKER_BOILERPLATE],\t[AC_DEFUN([_LT_LINKER_BOILERPLATE])])\nm4_ifndef([_AC_PROG_LIBTOOL],\t\t[AC_DEFUN([_AC_PROG_LIBTOOL])])\nm4_ifndef([AC_LIBTOOL_SETUP],\t\t[AC_DEFUN([AC_LIBTOOL_SETUP])])\nm4_ifndef([_LT_AC_CHECK_DLFCN],\t\t[AC_DEFUN([_LT_AC_CHECK_DLFCN])])\nm4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],\t[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])\nm4_ifndef([_LT_AC_TAGCONFIG],\t\t[AC_DEFUN([_LT_AC_TAGCONFIG])])\nm4_ifndef([AC_DISABLE_FAST_INSTALL],\t[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])\nm4_ifndef([_LT_AC_LANG_CXX],\t\t[AC_DEFUN([_LT_AC_LANG_CXX])])\nm4_ifndef([_LT_AC_LANG_F77],\t\t[AC_DEFUN([_LT_AC_LANG_F77])])\nm4_ifndef([_LT_AC_LANG_GCJ],\t\t[AC_DEFUN([_LT_AC_LANG_GCJ])])\nm4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])\nm4_ifndef([_LT_AC_LANG_C_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])\nm4_ifndef([_LT_AC_LANG_CXX_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])\nm4_ifndef([_LT_AC_LANG_F77_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])\nm4_ifndef([_LT_AC_LANG_GCJ_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])\nm4_ifndef([_LT_AC_LANG_RC_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])\nm4_ifndef([AC_LIBTOOL_CONFIG],\t\t[AC_DEFUN([AC_LIBTOOL_CONFIG])])\nm4_ifndef([_LT_AC_FILE_LTDLL_C],\t[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])\nm4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],\t[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])\nm4_ifndef([_LT_AC_PROG_CXXCPP],\t\t[AC_DEFUN([_LT_AC_PROG_CXXCPP])])\nm4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],\t[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])\nm4_ifndef([_LT_PROG_ECHO_BACKSLASH],\t[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])\nm4_ifndef([_LT_PROG_F77],\t\t[AC_DEFUN([_LT_PROG_F77])])\nm4_ifndef([_LT_PROG_FC],\t\t[AC_DEFUN([_LT_PROG_FC])])\nm4_ifndef([_LT_PROG_CXX],\t\t[AC_DEFUN([_LT_PROG_CXX])])\n\n# Copyright (C) 2002-2013 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.\n# (This private macro should not be called outside this file.)\nAC_DEFUN([AM_AUTOMAKE_VERSION],\n[am__api_version='1.14'\ndnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to\ndnl require some minimum version.  Point them to the right macro.\nm4_if([$1], [1.14.1], [],\n      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl\n])\n\n# _AM_AUTOCONF_VERSION(VERSION)\n# -----------------------------\n# aclocal traces this macro to find the Autoconf version.\n# This is a private macro too.  Using m4_define simplifies\n# the logic in aclocal, which can simply ignore this definition.\nm4_define([_AM_AUTOCONF_VERSION], [])\n\n# AM_SET_CURRENT_AUTOMAKE_VERSION\n# -------------------------------\n# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.\n# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.\nAC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],\n[AM_AUTOMAKE_VERSION([1.14.1])dnl\nm4_ifndef([AC_AUTOCONF_VERSION],\n  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl\n_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])\n\n# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])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-2013 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_CONDITIONAL(NAME, SHELL-CONDITION)\n# -------------------------------------\n# Define a conditional.\nAC_DEFUN([AM_CONDITIONAL],\n[AC_PREREQ([2.52])dnl\n m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],\n       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl\nAC_SUBST([$1_TRUE])dnl\nAC_SUBST([$1_FALSE])dnl\n_AM_SUBST_NOTMAKE([$1_TRUE])dnl\n_AM_SUBST_NOTMAKE([$1_FALSE])dnl\nm4_define([_AM_COND_VALUE_$1], [$2])dnl\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# Copyright (C) 1999-2013 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\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\", \"OBJC\", \"OBJCXX\", \"UPC\", or \"GJC\".\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\nm4_if([$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], [OBJCXX], [depcc=\"$OBJCXX\" am_compiler_list='gcc3 gcc'],\n      [$1], [UPC],  [depcc=\"$UPC\"  am_compiler_list=],\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  rm -rf conftest.dir\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  am__universal=false\n  m4_case([$1], [CC],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac],\n    [CXX],\n    [case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac])\n\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 10 /bin/sh.\n      echo '/* dummy */' > sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\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.  Also, some Intel\n    # versions had trouble with output in subdirs.\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvc7 | msvc7msys | msvisualcpp | msvcmsys)\n      # This compiler won't grok '-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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], [dnl\nAS_HELP_STRING(\n  [--enable-dependency-tracking],\n  [do not reject slow dependency extractors])\nAS_HELP_STRING(\n  [--disable-dependency-tracking],\n  [speeds up one-time build])])\nif test \"x$enable_dependency_tracking\" != xno; then\n  am_depcomp=\"$ac_aux_dir/depcomp\"\n  AMDEPBACKSLASH='\\'\n  am__nodep='_no'\nfi\nAM_CONDITIONAL([AMDEP], [test \"x$enable_dependency_tracking\" != xno])\nAC_SUBST([AMDEPBACKSLASH])dnl\n_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl\nAC_SUBST([am__nodep])dnl\n_AM_SUBST_NOTMAKE([am__nodep])dnl\n])\n\n# Generate code to set up dependency tracking.              -*- Autoconf -*-\n\n# Copyright (C) 1999-2013 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\n# _AM_OUTPUT_DEPENDENCY_COMMANDS\n# ------------------------------\nAC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],\n[{\n  # Older Autoconf quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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    # 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\t sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/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\n  done\n}\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# Do all the work for Automake.                             -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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# 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\ndnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.\nm4_define([AC_PROG_CC],\nm4_defn([AC_PROG_CC])\n[_AM_PROG_CC_C_O\n])\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.65])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\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])\n  fi\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[AC_DIAGNOSE([obsolete],\n             [$0: two- and three-arguments forms are deprecated.])\nm4_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\ndnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.\nm4_if(\n  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),\n  [ok:ok],,\n  [m4_fatal([AC_INIT should be called with package and version arguments])])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])\nAC_REQUIRE([AM_PROG_INSTALL_SH])dnl\nAC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl\nAC_REQUIRE([AC_PROG_MKDIR_P])dnl\n# For better backward compatibility.  To be removed once Automake 1.9.x\n# dies out for good.  For more background, see:\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>\nAC_SUBST([mkdir_p], ['$(MKDIR_P)'])\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\t      [_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\t\t  [_AM_DEPENDENCIES([CC])],\n\t\t  [m4_define([AC_PROG_CC],\n\t\t\t     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_CXX],\n\t\t  [_AM_DEPENDENCIES([CXX])],\n\t\t  [m4_define([AC_PROG_CXX],\n\t\t\t     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_OBJC],\n\t\t  [_AM_DEPENDENCIES([OBJC])],\n\t\t  [m4_define([AC_PROG_OBJC],\n\t\t\t     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl\nAC_PROVIDE_IFELSE([AC_PROG_OBJCXX],\n\t\t  [_AM_DEPENDENCIES([OBJCXX])],\n\t\t  [m4_define([AC_PROG_OBJCXX],\n\t\t\t     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl\n])\nAC_REQUIRE([AM_SILENT_RULES])dnl\ndnl The testsuite driver may need to know about EXEEXT, so add the\ndnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This\ndnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.\nAC_CONFIG_COMMANDS_PRE(dnl\n[m4_provide_if([_AM_COMPILER_EXEEXT],\n  [AM_CONDITIONAL([am__EXEEXT], [test -n \"$EXEEXT\"])])])dnl\n\n# POSIX will say in a future version that running \"rm -f\" with no argument\n# is OK; and we want to be able to make that assumption in our Makefile\n# recipes.  So use an aggressive probe to check that the usage we want is\n# actually supported \"in the wild\" to an acceptable degree.\n# See automake bug#10828.\n# To make any issue more visible, cause the running configure to be aborted\n# by default if the 'rm' program in use doesn't match our expectations; the\n# user can still override this though.\nif rm -f && rm -fr && rm -rf; then : OK; else\n  cat >&2 <<'END'\nOops!\n\nYour 'rm' program seems unable to run without file operands specified\non the command line, even when the '-f' option is present.  This is contrary\nto the behaviour of most rm programs out there, and not conforming with\nthe upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>\n\nPlease tell bug-automake@gnu.org about your system, including the value\nof your $PATH and any error possibly output before this message.  This\ncan help us improve future automake versions.\n\nEND\n  if test x\"$ACCEPT_INFERIOR_RM_PROGRAM\" = x\"yes\"; then\n    echo 'Configuration will proceed anyway, since you have set the' >&2\n    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to \"yes\"' >&2\n    echo >&2\n  else\n    cat >&2 <<'END'\nAborting the configuration process, to ensure you take notice of the issue.\n\nYou can download and install GNU coreutils to get an 'rm' implementation\nthat behaves properly: <http://www.gnu.org/software/coreutils/>.\n\nIf you want to complete the configuration process using your problematic\n'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM\nto \"yes\", and re-run configure.\n\nEND\n    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])\n  fi\nfi\n])\n\ndnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not\ndnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further\ndnl mangled by Autoconf and run in a shell conditional statement.\nm4_define([_AC_COMPILER_EXEEXT],\nm4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])\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_arg=$1\n_am_stamp_count=1\nfor _am_header in $config_headers :; do\n  case $_am_header in\n    $_am_arg | $_am_arg:* )\n      break ;;\n    * )\n      _am_stamp_count=`expr $_am_stamp_count + 1` ;;\n  esac\ndone\necho \"timestamp for $_am_arg\" >`AS_DIRNAME([\"$_am_arg\"])`/stamp-h[]$_am_stamp_count])\n\n# Copyright (C) 2001-2013 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\nif test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\nAC_SUBST([install_sh])])\n\n# Copyright (C) 2003-2013 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# 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# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-\n# From Jim Meyering\n\n# Copyright (C) 1996-2013 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_MAINTAINER_MODE([DEFAULT-MODE])\n# ----------------------------------\n# Control maintainer-specific portions of Makefiles.\n# Default is to disable them, unless 'enable' is passed literally.\n# For symmetry, 'disable' may be passed as well.  Anyway, the user\n# can override the default with the --enable/--disable switch.\nAC_DEFUN([AM_MAINTAINER_MODE],\n[m4_case(m4_default([$1], [disable]),\n       [enable], [m4_define([am_maintainer_other], [disable])],\n       [disable], [m4_define([am_maintainer_other], [enable])],\n       [m4_define([am_maintainer_other], [enable])\n        m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])\nAC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])\n  dnl maintainer-mode's default is 'disable' unless 'enable' is passed\n  AC_ARG_ENABLE([maintainer-mode],\n    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],\n      am_maintainer_other[ make rules and dependencies not useful\n      (and sometimes confusing) to the casual installer])],\n    [USE_MAINTAINER_MODE=$enableval],\n    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))\n  AC_MSG_RESULT([$USE_MAINTAINER_MODE])\n  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])\n  MAINT=$MAINTAINER_MODE_TRUE\n  AC_SUBST([MAINT])dnl\n]\n)\n\n# Check to see how 'make' treats includes.\t            -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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_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 this is the am__doit target\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# Ignore all kinds of additional output from 'make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\nfi\nAC_SUBST([am__include])\nAC_SUBST([am__quote])\nAC_MSG_RESULT([$_am_result])\nrm -f confinc confmf\n])\n\n# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-\n\n# Copyright (C) 1997-2013 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_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# AM_MISSING_HAS_RUN\n# ------------------\n# Define MISSING if not defined so far and test if it is modern enough.\n# If it is, set am_missing_run to use it, otherwise, to nothing.\nAC_DEFUN([AM_MISSING_HAS_RUN],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\nAC_REQUIRE_AUX_FILE([missing])dnl\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\n# Use eval to expand $SHELL\nif eval \"$MISSING --is-lightweight\"; then\n  am_missing_run=\"$MISSING \"\nelse\n  am_missing_run=\n  AC_MSG_WARN(['missing' script is too old or missing])\nfi\n])\n\n# Helper functions for option handling.                     -*- Autoconf -*-\n\n# Copyright (C) 2001-2013 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_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[m4_foreach_w([_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) 1999-2013 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_CC_C_O\n# ---------------\n# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC\n# to automatically call this.\nAC_DEFUN([_AM_PROG_CC_C_O],\n[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl\nAC_REQUIRE_AUX_FILE([compile])dnl\nAC_LANG_PUSH([C])dnl\nAC_CACHE_CHECK(\n  [whether $CC understands -c and -o together],\n  [am_cv_prog_cc_c_o],\n  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])\n  # Make sure it works both with $CC and with simple cc.\n  # Following AC_PROG_CC_C_O, we do the test twice because some\n  # compilers refuse to overwrite an existing .o file with -o,\n  # though they will create one.\n  am_cv_prog_cc_c_o=yes\n  for am_i in 1 2; do\n    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \\\n         && test -f conftest2.$ac_objext; then\n      : OK\n    else\n      am_cv_prog_cc_c_o=no\n      break\n    fi\n  done\n  rm -f core conftest*\n  unset am_i])\nif test \"$am_cv_prog_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\nAC_LANG_POP([C])])\n\n# For backward compatibility.\nAC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])\n\n# Copyright (C) 2001-2013 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_RUN_LOG(COMMAND)\n# -------------------\n# Run COMMAND, save the exit status in ac_status, and log it.\n# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)\nAC_DEFUN([AM_RUN_LOG],\n[{ echo \"$as_me:$LINENO: $1\" >&AS_MESSAGE_LOG_FD\n   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   (exit $ac_status); }])\n\n# Check to make sure that the build environment is sane.    -*- Autoconf -*-\n\n# Copyright (C) 1996-2013 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_SANITY_CHECK\n# ---------------\nAC_DEFUN([AM_SANITY_CHECK],\n[AC_MSG_CHECKING([whether build environment is sane])\n# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]]*)\n    AC_MSG_ERROR([unsafe absolute working directory name]);;\nesac\ncase $srcdir in\n  *[[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]]*)\n    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;\nesac\n\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   am_has_slept=no\n   for am_try in 1 2; do\n     echo \"timestamp, slept: $am_has_slept\" > conftest.file\n     set X `ls -Lt \"$srcdir/configure\" conftest.file 2> /dev/null`\n     if test \"$[*]\" = \"X\"; then\n\t# -L didn't work.\n\tset X `ls -t \"$srcdir/configure\" conftest.file`\n     fi\n     if test \"$[*]\" != \"X $srcdir/configure conftest.file\" \\\n\t&& test \"$[*]\" != \"X conftest.file $srcdir/configure\"; then\n\n\t# If neither matched, then we have a broken ls.  This can happen\n\t# if, for instance, CONFIG_SHELL is bash and it inherits a\n\t# broken ls alias from the environment.  This has actually\n\t# happened.  Such a system could not be considered \"sane\".\n\tAC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken\n  alias in your environment])\n     fi\n     if test \"$[2]\" = conftest.file || test $am_try -eq 2; then\n       break\n     fi\n     # Just in case.\n     sleep 1\n     am_has_slept=yes\n   done\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# If we didn't sleep, we still need to ensure time stamps of config.status and\n# generated files are strictly newer.\nam_sleep_pid=\nif grep 'slept: no' conftest.file >/dev/null 2>&1; then\n  ( sleep 1 ) &\n  am_sleep_pid=$!\nfi\nAC_CONFIG_COMMANDS_PRE(\n  [AC_MSG_CHECKING([that generated files are newer than configure])\n   if test -n \"$am_sleep_pid\"; then\n     # Hide warnings about reused PIDs.\n     wait $am_sleep_pid 2>/dev/null\n   fi\n   AC_MSG_RESULT([done])])\nrm -f conftest.file\n])\n\n# Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT])\n# --------------------------\n# Enable less verbose build rules; with the default set to DEFAULT\n# (\"yes\" being less verbose, \"no\" or empty being verbose).\nAC_DEFUN([AM_SILENT_RULES],\n[AC_ARG_ENABLE([silent-rules], [dnl\nAS_HELP_STRING(\n  [--enable-silent-rules],\n  [less verbose build output (undo: \"make V=1\")])\nAS_HELP_STRING(\n  [--disable-silent-rules],\n  [verbose build output (undo: \"make V=0\")])dnl\n])\ncase $enable_silent_rules in @%:@ (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;\nesac\ndnl\ndnl A few 'make' implementations (e.g., NonStop OS and NextStep)\ndnl do not support nested variable expansions.\ndnl See automake bug#9928 and bug#10237.\nam_make=${MAKE-make}\nAC_CACHE_CHECK([whether $am_make supports nested variables],\n   [am_cv_make_support_nested_variables],\n   [if AS_ECHO([['TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi])\nif test $am_cv_make_support_nested_variables = yes; then\n  dnl Using '$V' instead of '$(V)' breaks IRIX make.\n  AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAC_SUBST([AM_V])dnl\nAM_SUBST_NOTMAKE([AM_V])dnl\nAC_SUBST([AM_DEFAULT_V])dnl\nAM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl\nAC_SUBST([AM_DEFAULT_VERBOSITY])dnl\nAM_BACKSLASH='\\'\nAC_SUBST([AM_BACKSLASH])dnl\n_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl\n])\n\n# Copyright (C) 2001-2013 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=\"\\$(install_sh) -c -s\"\nAC_SUBST([INSTALL_STRIP_PROGRAM])])\n\n# Copyright (C) 2006-2013 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_SUBST_NOTMAKE(VARIABLE)\n# ---------------------------\n# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.\n# This macro is traced by Automake.\nAC_DEFUN([_AM_SUBST_NOTMAKE])\n\n# AM_SUBST_NOTMAKE(VARIABLE)\n# --------------------------\n# Public sister of _AM_SUBST_NOTMAKE.\nAC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])\n\n# Check how to create a tarball.                            -*- Autoconf -*-\n\n# Copyright (C) 2004-2013 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_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\n#\nAC_DEFUN([_AM_PROG_TAR],\n[# Always define AMTAR for backward compatibility.  Yes, it's still used\n# in the wild :-(  We should find a proper way to deprecate it ...\nAC_SUBST([AMTAR], ['$${TAR-tar}'])\n\n# We'll 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\nm4_if([$1], [v7],\n  [am__tar='$${TAR-tar} chof - \"$$tardir\"' am__untar='$${TAR-tar} xf -'],\n\n  [m4_case([$1],\n    [ustar],\n     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.\n      # There is notably a 21 bits limit for the UID and the GID.  In fact,\n      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343\n      # and bug#13588).\n      am_max_uid=2097151 # 2^21 - 1\n      am_max_gid=$am_max_uid\n      # The $UID and $GID variables are not portable, so we need to resort\n      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls\n      # below are definitely unexpected, so allow the users to see them\n      # (that is, avoid stderr redirection).\n      am_uid=`id -u || echo unknown`\n      am_gid=`id -g || echo unknown`\n      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])\n      if test $am_uid -le $am_max_uid; then\n         AC_MSG_RESULT([yes])\n      else\n         AC_MSG_RESULT([no])\n         _am_tools=none\n      fi\n      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])\n      if test $am_gid -le $am_max_gid; then\n         AC_MSG_RESULT([yes])\n      else\n        AC_MSG_RESULT([no])\n        _am_tools=none\n      fi],\n\n  [pax],\n    [],\n\n  [m4_fatal([Unknown tar format])])\n\n  AC_MSG_CHECKING([how to create a $1 tar archive])\n\n  # Go ahead even if we have the value already cached.  We do so because we\n  # need to set the values for the 'am__tar' and 'am__untar' variables.\n  _am_tools=${am_cv_prog_tar_$1-$_am_tools}\n\n  for _am_tool in $_am_tools; do\n    case $_am_tool in\n    gnutar)\n      for _am_tar in tar gnutar gtar; 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      AM_RUN_LOG([cat conftest.dir/file])\n      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break\n    fi\n  done\n  rm -rf conftest.dir\n\n  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])\n  AC_MSG_RESULT([$am_cv_prog_tar_$1])])\n\nAC_SUBST([am__tar])\nAC_SUBST([am__untar])\n]) # _AM_PROG_TAR\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/autogen.sh",
    "content": "#!/bin/sh\n\nautoreconf --install --symlink --force\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/configure.ac",
    "content": "AC_INIT\n\norig_CFLAGS=\"$CFLAGS\"\n\nAC_CONFIG_SRCDIR([ev_epoll.c])\n\ndnl also update ev.h!\nAM_INIT_AUTOMAKE(libev,4.20)\nAC_CONFIG_HEADERS([config.h])\nAM_MAINTAINER_MODE\n\nAC_PROG_CC\n\ndnl Supply default CFLAGS, if not specified\nif test -z \"$orig_CFLAGS\"; then\n  if test x$GCC = xyes; then\n    CFLAGS=\"-g -O3\"\n  fi\nfi\n\nAC_PROG_INSTALL\nAC_PROG_LIBTOOL\n\nm4_include([libev.m4])\n\nAC_CONFIG_FILES([Makefile])\nAC_OUTPUT\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev++.h",
    "content": "/*\n * libev simple C++ wrapper classes\n *\n * Copyright (c) 2007,2008,2010 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifndef EVPP_H__\n#define EVPP_H__\n\n#ifdef EV_H\n# include EV_H\n#else\n# include \"ev.h\"\n#endif\n\n#ifndef EV_USE_STDEXCEPT\n# define EV_USE_STDEXCEPT 1\n#endif\n\n#if EV_USE_STDEXCEPT\n# include <stdexcept>\n#endif\n\nnamespace ev {\n\n  typedef ev_tstamp tstamp;\n\n  enum {\n    UNDEF    = EV_UNDEF,\n    NONE     = EV_NONE,\n    READ     = EV_READ,\n    WRITE    = EV_WRITE,\n#if EV_COMPAT3\n    TIMEOUT  = EV_TIMEOUT,\n#endif\n    TIMER    = EV_TIMER,\n    PERIODIC = EV_PERIODIC,\n    SIGNAL   = EV_SIGNAL,\n    CHILD    = EV_CHILD,\n    STAT     = EV_STAT,\n    IDLE     = EV_IDLE,\n    CHECK    = EV_CHECK,\n    PREPARE  = EV_PREPARE,\n    FORK     = EV_FORK,\n    ASYNC    = EV_ASYNC,\n    EMBED    = EV_EMBED,\n#   undef ERROR // some systems stupidly #define ERROR\n    ERROR    = EV_ERROR\n  };\n\n  enum\n  {\n    AUTO      = EVFLAG_AUTO,\n    NOENV     = EVFLAG_NOENV,\n    FORKCHECK = EVFLAG_FORKCHECK,\n\n    SELECT    = EVBACKEND_SELECT,\n    POLL      = EVBACKEND_POLL,\n    EPOLL     = EVBACKEND_EPOLL,\n    KQUEUE    = EVBACKEND_KQUEUE,\n    DEVPOLL   = EVBACKEND_DEVPOLL,\n    PORT      = EVBACKEND_PORT\n  };\n\n  enum\n  {\n#if EV_COMPAT3\n    NONBLOCK = EVLOOP_NONBLOCK,\n    ONESHOT  = EVLOOP_ONESHOT,\n#endif\n    NOWAIT   = EVRUN_NOWAIT,\n    ONCE     = EVRUN_ONCE\n  };\n\n  enum how_t\n  {\n    ONE = EVBREAK_ONE,\n    ALL = EVBREAK_ALL\n  };\n\n  struct bad_loop\n#if EV_USE_STDEXCEPT\n  : std::runtime_error\n#endif\n  {\n#if EV_USE_STDEXCEPT\n    bad_loop ()\n    : std::runtime_error (\"libev event loop cannot be initialized, bad value of LIBEV_FLAGS?\")\n    {\n    }\n#endif\n  };\n\n#ifdef EV_AX\n#  undef EV_AX\n#endif\n\n#ifdef EV_AX_\n#  undef EV_AX_\n#endif\n\n#if EV_MULTIPLICITY\n#  define EV_AX  raw_loop\n#  define EV_AX_ raw_loop,\n#else\n#  define EV_AX\n#  define EV_AX_\n#endif\n\n  struct loop_ref\n  {\n    loop_ref (EV_P) throw ()\n#if EV_MULTIPLICITY\n    : EV_AX (EV_A)\n#endif\n    {\n    }\n\n    bool operator == (const loop_ref &other) const throw ()\n    {\n#if EV_MULTIPLICITY\n      return EV_AX == other.EV_AX;\n#else\n      return true;\n#endif\n    }\n\n    bool operator != (const loop_ref &other) const throw ()\n    {\n#if EV_MULTIPLICITY\n      return ! (*this == other);\n#else\n      return false;\n#endif\n    }\n\n#if EV_MULTIPLICITY\n    bool operator == (const EV_P) const throw ()\n    {\n      return this->EV_AX == EV_A;\n    }\n\n    bool operator != (const EV_P) const throw ()\n    {\n      return (*this == EV_A);\n    }\n\n    operator struct ev_loop * () const throw ()\n    {\n      return EV_AX;\n    }\n\n    operator const struct ev_loop * () const throw ()\n    {\n      return EV_AX;\n    }\n\n    bool is_default () const throw ()\n    {\n      return EV_AX == ev_default_loop (0);\n    }\n#endif\n\n#if EV_COMPAT3\n    void loop (int flags = 0)\n    {\n      ev_run (EV_AX_ flags);\n    }\n\n    void unloop (how_t how = ONE) throw ()\n    {\n      ev_break (EV_AX_ how);\n    }\n#endif\n\n    void run (int flags = 0)\n    {\n      ev_run (EV_AX_ flags);\n    }\n\n    void break_loop (how_t how = ONE) throw ()\n    {\n      ev_break (EV_AX_ how);\n    }\n\n    void post_fork () throw ()\n    {\n      ev_loop_fork (EV_AX);\n    }\n\n    unsigned int backend () const throw ()\n    {\n      return ev_backend (EV_AX);\n    }\n\n    tstamp now () const throw ()\n    {\n      return ev_now (EV_AX);\n    }\n\n    void ref () throw ()\n    {\n      ev_ref (EV_AX);\n    }\n\n    void unref () throw ()\n    {\n      ev_unref (EV_AX);\n    }\n\n#if EV_FEATURE_API\n    unsigned int iteration () const throw ()\n    {\n      return ev_iteration (EV_AX);\n    }\n\n    unsigned int depth () const throw ()\n    {\n      return ev_depth (EV_AX);\n    }\n\n    void set_io_collect_interval (tstamp interval) throw ()\n    {\n      ev_set_io_collect_interval (EV_AX_ interval);\n    }\n\n    void set_timeout_collect_interval (tstamp interval) throw ()\n    {\n      ev_set_timeout_collect_interval (EV_AX_ interval);\n    }\n#endif\n\n    // function callback\n    void once (int fd, int events, tstamp timeout, void (*cb)(int, void *), void *arg = 0) throw ()\n    {\n      ev_once (EV_AX_ fd, events, timeout, cb, arg);\n    }\n\n    // method callback\n    template<class K, void (K::*method)(int)>\n    void once (int fd, int events, tstamp timeout, K *object) throw ()\n    {\n      once (fd, events, timeout, method_thunk<K, method>, object);\n    }\n\n    // default method == operator ()\n    template<class K>\n    void once (int fd, int events, tstamp timeout, K *object) throw ()\n    {\n      once (fd, events, timeout, method_thunk<K, &K::operator ()>, object);\n    }\n\n    template<class K, void (K::*method)(int)>\n    static void method_thunk (int revents, void *arg)\n    {\n      (static_cast<K *>(arg)->*method)\n        (revents);\n    }\n\n    // no-argument method callback\n    template<class K, void (K::*method)()>\n    void once (int fd, int events, tstamp timeout, K *object) throw ()\n    {\n      once (fd, events, timeout, method_noargs_thunk<K, method>, object);\n    }\n\n    template<class K, void (K::*method)()>\n    static void method_noargs_thunk (int revents, void *arg)\n    {\n      (static_cast<K *>(arg)->*method)\n        ();\n    }\n\n    // simpler function callback\n    template<void (*cb)(int)>\n    void once (int fd, int events, tstamp timeout) throw ()\n    {\n      once (fd, events, timeout, simpler_func_thunk<cb>);\n    }\n\n    template<void (*cb)(int)>\n    static void simpler_func_thunk (int revents, void *arg)\n    {\n      (*cb)\n        (revents);\n    }\n\n    // simplest function callback\n    template<void (*cb)()>\n    void once (int fd, int events, tstamp timeout) throw ()\n    {\n      once (fd, events, timeout, simplest_func_thunk<cb>);\n    }\n\n    template<void (*cb)()>\n    static void simplest_func_thunk (int revents, void *arg)\n    {\n      (*cb)\n        ();\n    }\n\n    void feed_fd_event (int fd, int revents) throw ()\n    {\n      ev_feed_fd_event (EV_AX_ fd, revents);\n    }\n\n    void feed_signal_event (int signum) throw ()\n    {\n      ev_feed_signal_event (EV_AX_ signum);\n    }\n\n#if EV_MULTIPLICITY\n    struct ev_loop* EV_AX;\n#endif\n\n  };\n\n#if EV_MULTIPLICITY\n  struct dynamic_loop : loop_ref\n  {\n\n    dynamic_loop (unsigned int flags = AUTO) throw (bad_loop)\n    : loop_ref (ev_loop_new (flags))\n    {\n      if (!EV_AX)\n        throw bad_loop ();\n    }\n\n    ~dynamic_loop () throw ()\n    {\n      ev_loop_destroy (EV_AX);\n      EV_AX = 0;\n    }\n\n  private:\n\n    dynamic_loop (const dynamic_loop &);\n\n    dynamic_loop & operator= (const dynamic_loop &);\n\n  };\n#endif\n\n  struct default_loop : loop_ref\n  {\n    default_loop (unsigned int flags = AUTO) throw (bad_loop)\n#if EV_MULTIPLICITY\n    : loop_ref (ev_default_loop (flags))\n#endif\n    {\n      if (\n#if EV_MULTIPLICITY\n          !EV_AX\n#else\n          !ev_default_loop (flags)\n#endif\n      )\n        throw bad_loop ();\n    }\n\n  private:\n    default_loop (const default_loop &);\n    default_loop &operator = (const default_loop &);\n  };\n\n  inline loop_ref get_default_loop () throw ()\n  {\n#if EV_MULTIPLICITY\n    return ev_default_loop (0);\n#else\n    return loop_ref ();\n#endif\n  }\n\n#undef EV_AX\n#undef EV_AX_\n\n#undef EV_PX\n#undef EV_PX_\n#if EV_MULTIPLICITY\n#  define EV_PX  loop_ref EV_A\n#  define EV_PX_ loop_ref EV_A_\n#else\n#  define EV_PX\n#  define EV_PX_\n#endif\n\n  template<class ev_watcher, class watcher>\n  struct base : ev_watcher\n  {\n    #if EV_MULTIPLICITY\n      EV_PX;\n\n      // loop set\n      void set (EV_P) throw ()\n      {\n        this->EV_A = EV_A;\n      }\n    #endif\n\n    base (EV_PX) throw ()\n    #if EV_MULTIPLICITY\n      : EV_A (EV_A)\n    #endif\n    {\n      ev_init (this, 0);\n    }\n\n    void set_ (const void *data, void (*cb)(EV_P_ ev_watcher *w, int revents)) throw ()\n    {\n      this->data = (void *)data;\n      ev_set_cb (static_cast<ev_watcher *>(this), cb);\n    }\n\n    // function callback\n    template<void (*function)(watcher &w, int)>\n    void set (void *data = 0) throw ()\n    {\n      set_ (data, function_thunk<function>);\n    }\n\n    template<void (*function)(watcher &w, int)>\n    static void function_thunk (EV_P_ ev_watcher *w, int revents)\n    {\n      function\n        (*static_cast<watcher *>(w), revents);\n    }\n\n    // method callback\n    template<class K, void (K::*method)(watcher &w, int)>\n    void set (K *object) throw ()\n    {\n      set_ (object, method_thunk<K, method>);\n    }\n\n    // default method == operator ()\n    template<class K>\n    void set (K *object) throw ()\n    {\n      set_ (object, method_thunk<K, &K::operator ()>);\n    }\n\n    template<class K, void (K::*method)(watcher &w, int)>\n    static void method_thunk (EV_P_ ev_watcher *w, int revents)\n    {\n      (static_cast<K *>(w->data)->*method)\n        (*static_cast<watcher *>(w), revents);\n    }\n\n    // no-argument callback\n    template<class K, void (K::*method)()>\n    void set (K *object) throw ()\n    {\n      set_ (object, method_noargs_thunk<K, method>);\n    }\n\n    template<class K, void (K::*method)()>\n    static void method_noargs_thunk (EV_P_ ev_watcher *w, int revents)\n    {\n      (static_cast<K *>(w->data)->*method)\n        ();\n    }\n\n    void operator ()(int events = EV_UNDEF)\n    {\n      return\n        ev_cb (static_cast<ev_watcher *>(this))\n          (static_cast<ev_watcher *>(this), events);\n    }\n\n    bool is_active () const throw ()\n    {\n      return ev_is_active (static_cast<const ev_watcher *>(this));\n    }\n\n    bool is_pending () const throw ()\n    {\n      return ev_is_pending (static_cast<const ev_watcher *>(this));\n    }\n\n    void feed_event (int revents) throw ()\n    {\n      ev_feed_event (EV_A_ static_cast<ev_watcher *>(this), revents);\n    }\n  };\n\n  inline tstamp now (EV_P) throw ()\n  {\n    return ev_now (EV_A);\n  }\n\n  inline void delay (tstamp interval) throw ()\n  {\n    ev_sleep (interval);\n  }\n\n  inline int version_major () throw ()\n  {\n    return ev_version_major ();\n  }\n\n  inline int version_minor () throw ()\n  {\n    return ev_version_minor ();\n  }\n\n  inline unsigned int supported_backends () throw ()\n  {\n    return ev_supported_backends ();\n  }\n\n  inline unsigned int recommended_backends () throw ()\n  {\n    return ev_recommended_backends ();\n  }\n\n  inline unsigned int embeddable_backends () throw ()\n  {\n    return ev_embeddable_backends ();\n  }\n\n  inline void set_allocator (void *(*cb)(void *ptr, long size) throw ()) throw ()\n  {\n    ev_set_allocator (cb);\n  }\n\n  inline void set_syserr_cb (void (*cb)(const char *msg) throw ()) throw ()\n  {\n    ev_set_syserr_cb (cb);\n  }\n\n  #if EV_MULTIPLICITY\n    #define EV_CONSTRUCT(cppstem,cstem)\t                                                \\\n      (EV_PX = get_default_loop ()) throw ()                                            \\\n        : base<ev_ ## cstem, cppstem> (EV_A)                                            \\\n      {                                                                                 \\\n      }\n  #else\n    #define EV_CONSTRUCT(cppstem,cstem)                                                 \\\n      () throw ()                                                                       \\\n      {                                                                                 \\\n      }\n  #endif\n\n  /* using a template here would require quite a bit more lines,\n   * so a macro solution was chosen */\n  #define EV_BEGIN_WATCHER(cppstem,cstem)\t                                        \\\n                                                                                        \\\n  struct cppstem : base<ev_ ## cstem, cppstem>                                          \\\n  {                                                                                     \\\n    void start () throw ()                                                              \\\n    {                                                                                   \\\n      ev_ ## cstem ## _start (EV_A_ static_cast<ev_ ## cstem *>(this));                 \\\n    }                                                                                   \\\n                                                                                        \\\n    void stop () throw ()                                                               \\\n    {                                                                                   \\\n      ev_ ## cstem ## _stop (EV_A_ static_cast<ev_ ## cstem *>(this));                  \\\n    }                                                                                   \\\n                                                                                        \\\n    cppstem EV_CONSTRUCT(cppstem,cstem)                                                 \\\n                                                                                        \\\n    ~cppstem () throw ()                                                                \\\n    {                                                                                   \\\n      stop ();                                                                          \\\n    }                                                                                   \\\n                                                                                        \\\n    using base<ev_ ## cstem, cppstem>::set;                                             \\\n                                                                                        \\\n  private:                                                                              \\\n                                                                                        \\\n    cppstem (const cppstem &o);                                                         \\\n                                                                                        \\\n    cppstem &operator =(const cppstem &o);                                              \\\n                                                                                        \\\n  public:\n\n  #define EV_END_WATCHER(cppstem,cstem)\t                                                \\\n  };\n\n  EV_BEGIN_WATCHER (io, io)\n    void set (int fd, int events) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_io_set (static_cast<ev_io *>(this), fd, events);\n      if (active) start ();\n    }\n\n    void set (int events) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_io_set (static_cast<ev_io *>(this), fd, events);\n      if (active) start ();\n    }\n\n    void start (int fd, int events) throw ()\n    {\n      set (fd, events);\n      start ();\n    }\n  EV_END_WATCHER (io, io)\n\n  EV_BEGIN_WATCHER (timer, timer)\n    void set (ev_tstamp after, ev_tstamp repeat = 0.) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_timer_set (static_cast<ev_timer *>(this), after, repeat);\n      if (active) start ();\n    }\n\n    void start (ev_tstamp after, ev_tstamp repeat = 0.) throw ()\n    {\n      set (after, repeat);\n      start ();\n    }\n\n    void again () throw ()\n    {\n      ev_timer_again (EV_A_ static_cast<ev_timer *>(this));\n    }\n\n    ev_tstamp remaining ()\n    {\n      return ev_timer_remaining (EV_A_ static_cast<ev_timer *>(this));\n    }\n  EV_END_WATCHER (timer, timer)\n\n  #if EV_PERIODIC_ENABLE\n  EV_BEGIN_WATCHER (periodic, periodic)\n    void set (ev_tstamp at, ev_tstamp interval = 0.) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_periodic_set (static_cast<ev_periodic *>(this), at, interval, 0);\n      if (active) start ();\n    }\n\n    void start (ev_tstamp at, ev_tstamp interval = 0.) throw ()\n    {\n      set (at, interval);\n      start ();\n    }\n\n    void again () throw ()\n    {\n      ev_periodic_again (EV_A_ static_cast<ev_periodic *>(this));\n    }\n  EV_END_WATCHER (periodic, periodic)\n  #endif\n\n  #if EV_SIGNAL_ENABLE\n  EV_BEGIN_WATCHER (sig, signal)\n    void set (int signum) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_signal_set (static_cast<ev_signal *>(this), signum);\n      if (active) start ();\n    }\n\n    void start (int signum) throw ()\n    {\n      set (signum);\n      start ();\n    }\n  EV_END_WATCHER (sig, signal)\n  #endif\n\n  #if EV_CHILD_ENABLE\n  EV_BEGIN_WATCHER (child, child)\n    void set (int pid, int trace = 0) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_child_set (static_cast<ev_child *>(this), pid, trace);\n      if (active) start ();\n    }\n\n    void start (int pid, int trace = 0) throw ()\n    {\n      set (pid, trace);\n      start ();\n    }\n  EV_END_WATCHER (child, child)\n  #endif\n\n  #if EV_STAT_ENABLE\n  EV_BEGIN_WATCHER (stat, stat)\n    void set (const char *path, ev_tstamp interval = 0.) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_stat_set (static_cast<ev_stat *>(this), path, interval);\n      if (active) start ();\n    }\n\n    void start (const char *path, ev_tstamp interval = 0.) throw ()\n    {\n      stop ();\n      set (path, interval);\n      start ();\n    }\n\n    void update () throw ()\n    {\n      ev_stat_stat (EV_A_ static_cast<ev_stat *>(this));\n    }\n  EV_END_WATCHER (stat, stat)\n  #endif\n\n  #if EV_IDLE_ENABLE\n  EV_BEGIN_WATCHER (idle, idle)\n    void set () throw () { }\n  EV_END_WATCHER (idle, idle)\n  #endif\n\n  #if EV_PREPARE_ENABLE\n  EV_BEGIN_WATCHER (prepare, prepare)\n    void set () throw () { }\n  EV_END_WATCHER (prepare, prepare)\n  #endif\n\n  #if EV_CHECK_ENABLE\n  EV_BEGIN_WATCHER (check, check)\n    void set () throw () { }\n  EV_END_WATCHER (check, check)\n  #endif\n\n  #if EV_EMBED_ENABLE\n  EV_BEGIN_WATCHER (embed, embed)\n    void set_embed (struct ev_loop *embedded_loop) throw ()\n    {\n      int active = is_active ();\n      if (active) stop ();\n      ev_embed_set (static_cast<ev_embed *>(this), embedded_loop);\n      if (active) start ();\n    }\n\n    void start (struct ev_loop *embedded_loop) throw ()\n    {\n      set (embedded_loop);\n      start ();\n    }\n\n    void sweep ()\n    {\n      ev_embed_sweep (EV_A_ static_cast<ev_embed *>(this));\n    }\n  EV_END_WATCHER (embed, embed)\n  #endif\n\n  #if EV_FORK_ENABLE\n  EV_BEGIN_WATCHER (fork, fork)\n    void set () throw () { }\n  EV_END_WATCHER (fork, fork)\n  #endif\n\n  #if EV_ASYNC_ENABLE\n  EV_BEGIN_WATCHER (async, async)\n    void send () throw ()\n    {\n      ev_async_send (EV_A_ static_cast<ev_async *>(this));\n    }\n\n    bool async_pending () throw ()\n    {\n      return ev_async_pending (static_cast<ev_async *>(this));\n    }\n  EV_END_WATCHER (async, async)\n  #endif\n\n  #undef EV_PX\n  #undef EV_PX_\n  #undef EV_CONSTRUCT\n  #undef EV_BEGIN_WATCHER\n  #undef EV_END_WATCHER\n}\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev.3",
    "content": ".\\\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)\n.\\\"\n.\\\" Standard preamble:\n.\\\" ========================================================================\n.de Sp \\\" Vertical space (when we can't use .PP)\n.if t .sp .5v\n.if n .sp\n..\n.de Vb \\\" Begin verbatim text\n.ft CW\n.nf\n.ne \\\\$1\n..\n.de Ve \\\" End verbatim text\n.ft R\n.fi\n..\n.\\\" Set up some character translations and predefined strings.  \\*(-- will\n.\\\" give an unbreakable dash, \\*(PI will give pi, \\*(L\" will give a left\n.\\\" double quote, and \\*(R\" will give a right double quote.  \\*(C+ will\n.\\\" give a nicer C++.  Capital omega is used to do unbreakable dashes and\n.\\\" therefore won't be available.  \\*(C` and \\*(C' expand to `' in nroff,\n.\\\" nothing in troff, for use with C<>.\n.tr \\(*W-\n.ds C+ C\\v'-.1v'\\h'-1p'\\s-2+\\h'-1p'+\\s0\\v'.1v'\\h'-1p'\n.ie n \\{\\\n.    ds -- \\(*W-\n.    ds PI pi\n.    if (\\n(.H=4u)&(1m=24u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-12u'-\\\" diablo 10 pitch\n.    if (\\n(.H=4u)&(1m=20u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-8u'-\\\"  diablo 12 pitch\n.    ds L\" \"\"\n.    ds R\" \"\"\n.    ds C` \"\"\n.    ds C' \"\"\n'br\\}\n.el\\{\\\n.    ds -- \\|\\(em\\|\n.    ds PI \\(*p\n.    ds L\" ``\n.    ds R\" ''\n'br\\}\n.\\\"\n.\\\" Escape single quotes in literal strings from groff's Unicode transform.\n.ie \\n(.g .ds Aq \\(aq\n.el       .ds Aq '\n.\\\"\n.\\\" If the F register is turned on, we'll generate index entries on stderr for\n.\\\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index\n.\\\" entries marked with X<> in POD.  Of course, you'll have to process the\n.\\\" output yourself in some meaningful fashion.\n.ie \\nF \\{\\\n.    de IX\n.    tm Index:\\\\$1\\t\\\\n%\\t\"\\\\$2\"\n..\n.    nr % 0\n.    rr F\n.\\}\n.el \\{\\\n.    de IX\n..\n.\\}\n.\\\"\n.\\\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).\n.\\\" Fear.  Run.  Save yourself.  No user-serviceable parts.\n.    \\\" fudge factors for nroff and troff\n.if n \\{\\\n.    ds #H 0\n.    ds #V .8m\n.    ds #F .3m\n.    ds #[ \\f1\n.    ds #] \\fP\n.\\}\n.if t \\{\\\n.    ds #H ((1u-(\\\\\\\\n(.fu%2u))*.13m)\n.    ds #V .6m\n.    ds #F 0\n.    ds #[ \\&\n.    ds #] \\&\n.\\}\n.    \\\" simple accents for nroff and troff\n.if n \\{\\\n.    ds ' \\&\n.    ds ` \\&\n.    ds ^ \\&\n.    ds , \\&\n.    ds ~ ~\n.    ds /\n.\\}\n.if t \\{\\\n.    ds ' \\\\k:\\h'-(\\\\n(.wu*8/10-\\*(#H)'\\'\\h\"|\\\\n:u\"\n.    ds ` \\\\k:\\h'-(\\\\n(.wu*8/10-\\*(#H)'\\`\\h'|\\\\n:u'\n.    ds ^ \\\\k:\\h'-(\\\\n(.wu*10/11-\\*(#H)'^\\h'|\\\\n:u'\n.    ds , \\\\k:\\h'-(\\\\n(.wu*8/10)',\\h'|\\\\n:u'\n.    ds ~ \\\\k:\\h'-(\\\\n(.wu-\\*(#H-.1m)'~\\h'|\\\\n:u'\n.    ds / \\\\k:\\h'-(\\\\n(.wu*8/10-\\*(#H)'\\z\\(sl\\h'|\\\\n:u'\n.\\}\n.    \\\" troff and (daisy-wheel) nroff accents\n.ds : \\\\k:\\h'-(\\\\n(.wu*8/10-\\*(#H+.1m+\\*(#F)'\\v'-\\*(#V'\\z.\\h'.2m+\\*(#F'.\\h'|\\\\n:u'\\v'\\*(#V'\n.ds 8 \\h'\\*(#H'\\(*b\\h'-\\*(#H'\n.ds o \\\\k:\\h'-(\\\\n(.wu+\\w'\\(de'u-\\*(#H)/2u'\\v'-.3n'\\*(#[\\z\\(de\\v'.3n'\\h'|\\\\n:u'\\*(#]\n.ds d- \\h'\\*(#H'\\(pd\\h'-\\w'~'u'\\v'-.25m'\\f2\\(hy\\fP\\v'.25m'\\h'-\\*(#H'\n.ds D- D\\\\k:\\h'-\\w'D'u'\\v'-.11m'\\z\\(hy\\v'.11m'\\h'|\\\\n:u'\n.ds th \\*(#[\\v'.3m'\\s+1I\\s-1\\v'-.3m'\\h'-(\\w'I'u*2/3)'\\s-1o\\s+1\\*(#]\n.ds Th \\*(#[\\s+2I\\s-2\\h'-\\w'I'u*3/5'\\v'-.3m'o\\v'.3m'\\*(#]\n.ds ae a\\h'-(\\w'a'u*4/10)'e\n.ds Ae A\\h'-(\\w'A'u*4/10)'E\n.    \\\" corrections for vroff\n.if v .ds ~ \\\\k:\\h'-(\\\\n(.wu*9/10-\\*(#H)'\\s-2\\u~\\d\\s+2\\h'|\\\\n:u'\n.if v .ds ^ \\\\k:\\h'-(\\\\n(.wu*10/11-\\*(#H)'\\v'-.4m'^\\v'.4m'\\h'|\\\\n:u'\n.    \\\" for low resolution devices (crt and lpr)\n.if \\n(.H>23 .if \\n(.V>19 \\\n\\{\\\n.    ds : e\n.    ds 8 ss\n.    ds o a\n.    ds d- d\\h'-1'\\(ga\n.    ds D- D\\h'-1'\\(hy\n.    ds th \\o'bp'\n.    ds Th \\o'LP'\n.    ds ae ae\n.    ds Ae AE\n.\\}\n.rm #[ #] #H #V #F C\n.\\\" ========================================================================\n.\\\"\n.IX Title \"LIBEV 3\"\n.TH LIBEV 3 \"2015-07-28\" \"libev-2.2.3\" \"libev - high performance full featured event loop\"\n.\\\" For nroff, turn off justification.  Always turn off hyphenation; it makes\n.\\\" way too many mistakes in technical documents.\n.if n .ad l\n.nh\n.SH \"NAME\"\nlibev \\- a high performance full\\-featured event loop written in C\n.SH \"SYNOPSIS\"\n.IX Header \"SYNOPSIS\"\n.Vb 1\n\\&   #include <ev.h>\n.Ve\n.SS \"\\s-1EXAMPLE\\s0 \\s-1PROGRAM\\s0\"\n.IX Subsection \"EXAMPLE PROGRAM\"\n.Vb 2\n\\&   // a single header file is required\n\\&   #include <ev.h>\n\\&\n\\&   #include <stdio.h> // for puts\n\\&\n\\&   // every watcher type has its own typedef\\*(Aqd struct\n\\&   // with the name ev_TYPE\n\\&   ev_io stdin_watcher;\n\\&   ev_timer timeout_watcher;\n\\&\n\\&   // all watcher callbacks have a similar signature\n\\&   // this callback is called when data is readable on stdin\n\\&   static void\n\\&   stdin_cb (EV_P_ ev_io *w, int revents)\n\\&   {\n\\&     puts (\"stdin ready\");\n\\&     // for one\\-shot events, one must manually stop the watcher\n\\&     // with its corresponding stop function.\n\\&     ev_io_stop (EV_A_ w);\n\\&\n\\&     // this causes all nested ev_run\\*(Aqs to stop iterating\n\\&     ev_break (EV_A_ EVBREAK_ALL);\n\\&   }\n\\&\n\\&   // another callback, this time for a time\\-out\n\\&   static void\n\\&   timeout_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     puts (\"timeout\");\n\\&     // this causes the innermost ev_run to stop iterating\n\\&     ev_break (EV_A_ EVBREAK_ONE);\n\\&   }\n\\&\n\\&   int\n\\&   main (void)\n\\&   {\n\\&     // use the default event loop unless you have special needs\n\\&     struct ev_loop *loop = EV_DEFAULT;\n\\&\n\\&     // initialise an io watcher, then start it\n\\&     // this one will watch for stdin to become readable\n\\&     ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);\n\\&     ev_io_start (loop, &stdin_watcher);\n\\&\n\\&     // initialise a timer watcher, then start it\n\\&     // simple non\\-repeating 5.5 second timeout\n\\&     ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);\n\\&     ev_timer_start (loop, &timeout_watcher);\n\\&\n\\&     // now wait for events to arrive\n\\&     ev_run (loop, 0);\n\\&\n\\&     // break was called, so exit\n\\&     return 0;\n\\&   }\n.Ve\n.SH \"ABOUT THIS DOCUMENT\"\n.IX Header \"ABOUT THIS DOCUMENT\"\nThis document documents the libev software package.\n.PP\nThe newest version of this document is also available as an html-formatted\nweb page you might find easier to navigate when reading it for the first\ntime: <http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod>.\n.PP\nWhile this document tries to be as complete as possible in documenting\nlibev, its usage and the rationale behind its design, it is not a tutorial\non event-based programming, nor will it introduce event-based programming\nwith libev.\n.PP\nFamiliarity with event based programming techniques in general is assumed\nthroughout this document.\n.SH \"WHAT TO READ WHEN IN A HURRY\"\n.IX Header \"WHAT TO READ WHEN IN A HURRY\"\nThis manual tries to be very detailed, but unfortunately, this also makes\nit very long. If you just want to know the basics of libev, I suggest\nreading \\*(L\"\\s-1ANATOMY\\s0 \\s-1OF\\s0 A \\s-1WATCHER\\s0\\*(R\", then the \\*(L\"\\s-1EXAMPLE\\s0 \\s-1PROGRAM\\s0\\*(R\" above and\nlook up the missing functions in \\*(L\"\\s-1GLOBAL\\s0 \\s-1FUNCTIONS\\s0\\*(R\" and the \\f(CW\\*(C`ev_io\\*(C'\\fR and\n\\&\\f(CW\\*(C`ev_timer\\*(C'\\fR sections in \\*(L\"\\s-1WATCHER\\s0 \\s-1TYPES\\s0\\*(R\".\n.SH \"ABOUT LIBEV\"\n.IX Header \"ABOUT LIBEV\"\nLibev is an event loop: you register interest in certain events (such as a\nfile descriptor being readable or a timeout occurring), and it will manage\nthese event sources and provide your program with events.\n.PP\nTo do this, it must take more or less complete control over your process\n(or thread) by executing the \\fIevent loop\\fR handler, and will then\ncommunicate events via a callback mechanism.\n.PP\nYou register interest in certain events by registering so-called \\fIevent\nwatchers\\fR, which are relatively small C structures you initialise with the\ndetails of the event, and then hand it over to libev by \\fIstarting\\fR the\nwatcher.\n.SS \"\\s-1FEATURES\\s0\"\n.IX Subsection \"FEATURES\"\nLibev supports \\f(CW\\*(C`select\\*(C'\\fR, \\f(CW\\*(C`poll\\*(C'\\fR, the Linux-specific \\f(CW\\*(C`epoll\\*(C'\\fR, the\nBSD-specific \\f(CW\\*(C`kqueue\\*(C'\\fR and the Solaris-specific event port mechanisms\nfor file descriptor events (\\f(CW\\*(C`ev_io\\*(C'\\fR), the Linux \\f(CW\\*(C`inotify\\*(C'\\fR interface\n(for \\f(CW\\*(C`ev_stat\\*(C'\\fR), Linux eventfd/signalfd (for faster and cleaner\ninter-thread wakeup (\\f(CW\\*(C`ev_async\\*(C'\\fR)/signal handling (\\f(CW\\*(C`ev_signal\\*(C'\\fR)) relative\ntimers (\\f(CW\\*(C`ev_timer\\*(C'\\fR), absolute timers with customised rescheduling\n(\\f(CW\\*(C`ev_periodic\\*(C'\\fR), synchronous signals (\\f(CW\\*(C`ev_signal\\*(C'\\fR), process status\nchange events (\\f(CW\\*(C`ev_child\\*(C'\\fR), and event watchers dealing with the event\nloop mechanism itself (\\f(CW\\*(C`ev_idle\\*(C'\\fR, \\f(CW\\*(C`ev_embed\\*(C'\\fR, \\f(CW\\*(C`ev_prepare\\*(C'\\fR and\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watchers) as well as file watchers (\\f(CW\\*(C`ev_stat\\*(C'\\fR) and even\nlimited support for fork events (\\f(CW\\*(C`ev_fork\\*(C'\\fR).\n.PP\nIt also is quite fast (see this\nbenchmark <http://libev.schmorp.de/bench.html> comparing it to libevent\nfor example).\n.SS \"\\s-1CONVENTIONS\\s0\"\n.IX Subsection \"CONVENTIONS\"\nLibev is very configurable. In this manual the default (and most common)\nconfiguration will be described, which supports multiple event loops. For\nmore info about various configuration options please have a look at\n\\&\\fB\\s-1EMBED\\s0\\fR section in this manual. If libev was configured without support\nfor multiple event loops, then all functions taking an initial argument of\nname \\f(CW\\*(C`loop\\*(C'\\fR (which is always of type \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR) will not have\nthis argument.\n.SS \"\\s-1TIME\\s0 \\s-1REPRESENTATION\\s0\"\n.IX Subsection \"TIME REPRESENTATION\"\nLibev represents time as a single floating point number, representing\nthe (fractional) number of seconds since the (\\s-1POSIX\\s0) epoch (in practice\nsomewhere near the beginning of 1970, details are complicated, don't\nask). This type is called \\f(CW\\*(C`ev_tstamp\\*(C'\\fR, which is what you should use\ntoo. It usually aliases to the \\f(CW\\*(C`double\\*(C'\\fR type in C. When you need to do\nany calculations on it, you should treat it as some floating point value.\n.PP\nUnlike the name component \\f(CW\\*(C`stamp\\*(C'\\fR might indicate, it is also used for\ntime differences (e.g. delays) throughout libev.\n.SH \"ERROR HANDLING\"\n.IX Header \"ERROR HANDLING\"\nLibev knows three classes of errors: operating system errors, usage errors\nand internal errors (bugs).\n.PP\nWhen libev catches an operating system error it cannot handle (for example\na system call indicating a condition libev cannot fix), it calls the callback\nset via \\f(CW\\*(C`ev_set_syserr_cb\\*(C'\\fR, which is supposed to fix the problem or\nabort. The default is to print a diagnostic message and to call \\f(CW\\*(C`abort\n()\\*(C'\\fR.\n.PP\nWhen libev detects a usage error such as a negative timer interval, then\nit will print a diagnostic message and abort (via the \\f(CW\\*(C`assert\\*(C'\\fR mechanism,\nso \\f(CW\\*(C`NDEBUG\\*(C'\\fR will disable this checking): these are programming errors in\nthe libev caller and need to be fixed there.\n.PP\nLibev also has a few internal error-checking \\f(CW\\*(C`assert\\*(C'\\fRions, and also has\nextensive consistency checking code. These do not trigger under normal\ncircumstances, as they indicate either a bug in libev or worse.\n.SH \"GLOBAL FUNCTIONS\"\n.IX Header \"GLOBAL FUNCTIONS\"\nThese functions can be called anytime, even before initialising the\nlibrary in any way.\n.IP \"ev_tstamp ev_time ()\" 4\n.IX Item \"ev_tstamp ev_time ()\"\nReturns the current time as libev would use it. Please note that the\n\\&\\f(CW\\*(C`ev_now\\*(C'\\fR function is usually faster and also often returns the timestamp\nyou actually want to know. Also interesting is the combination of\n\\&\\f(CW\\*(C`ev_now_update\\*(C'\\fR and \\f(CW\\*(C`ev_now\\*(C'\\fR.\n.IP \"ev_sleep (ev_tstamp interval)\" 4\n.IX Item \"ev_sleep (ev_tstamp interval)\"\nSleep for the given interval: The current thread will be blocked\nuntil either it is interrupted or the given time interval has\npassed (approximately \\- it might return a bit earlier even if not\ninterrupted). Returns immediately if \\f(CW\\*(C`interval <= 0\\*(C'\\fR.\n.Sp\nBasically this is a sub-second-resolution \\f(CW\\*(C`sleep ()\\*(C'\\fR.\n.Sp\nThe range of the \\f(CW\\*(C`interval\\*(C'\\fR is limited \\- libev only guarantees to work\nwith sleep times of up to one day (\\f(CW\\*(C`interval <= 86400\\*(C'\\fR).\n.IP \"int ev_version_major ()\" 4\n.IX Item \"int ev_version_major ()\"\n.PD 0\n.IP \"int ev_version_minor ()\" 4\n.IX Item \"int ev_version_minor ()\"\n.PD\nYou can find out the major and minor \\s-1ABI\\s0 version numbers of the library\nyou linked against by calling the functions \\f(CW\\*(C`ev_version_major\\*(C'\\fR and\n\\&\\f(CW\\*(C`ev_version_minor\\*(C'\\fR. If you want, you can compare against the global\nsymbols \\f(CW\\*(C`EV_VERSION_MAJOR\\*(C'\\fR and \\f(CW\\*(C`EV_VERSION_MINOR\\*(C'\\fR, which specify the\nversion of the library your program was compiled against.\n.Sp\nThese version numbers refer to the \\s-1ABI\\s0 version of the library, not the\nrelease version.\n.Sp\nUsually, it's a good idea to terminate if the major versions mismatch,\nas this indicates an incompatible change. Minor versions are usually\ncompatible to older versions, so a larger minor version alone is usually\nnot a problem.\n.Sp\nExample: Make sure we haven't accidentally been linked against the wrong\nversion (note, however, that this will not detect other \\s-1ABI\\s0 mismatches,\nsuch as \\s-1LFS\\s0 or reentrancy).\n.Sp\n.Vb 3\n\\&   assert ((\"libev version mismatch\",\n\\&            ev_version_major () == EV_VERSION_MAJOR\n\\&            && ev_version_minor () >= EV_VERSION_MINOR));\n.Ve\n.IP \"unsigned int ev_supported_backends ()\" 4\n.IX Item \"unsigned int ev_supported_backends ()\"\nReturn the set of all backends (i.e. their corresponding \\f(CW\\*(C`EV_BACKEND_*\\*(C'\\fR\nvalue) compiled into this binary of libev (independent of their\navailability on the system you are running on). See \\f(CW\\*(C`ev_default_loop\\*(C'\\fR for\na description of the set values.\n.Sp\nExample: make sure we have the epoll method, because yeah this is cool and\na must have and can we have a torrent of it please!!!11\n.Sp\n.Vb 2\n\\&   assert ((\"sorry, no epoll, no sex\",\n\\&            ev_supported_backends () & EVBACKEND_EPOLL));\n.Ve\n.IP \"unsigned int ev_recommended_backends ()\" 4\n.IX Item \"unsigned int ev_recommended_backends ()\"\nReturn the set of all backends compiled into this binary of libev and\nalso recommended for this platform, meaning it will work for most file\ndescriptor types. This set is often smaller than the one returned by\n\\&\\f(CW\\*(C`ev_supported_backends\\*(C'\\fR, as for example kqueue is broken on most BSDs\nand will not be auto-detected unless you explicitly request it (assuming\nyou know what you are doing). This is the set of backends that libev will\nprobe for if you specify no backends explicitly.\n.IP \"unsigned int ev_embeddable_backends ()\" 4\n.IX Item \"unsigned int ev_embeddable_backends ()\"\nReturns the set of backends that are embeddable in other event loops. This\nvalue is platform-specific but can include backends not available on the\ncurrent system. To find which embeddable backends might be supported on\nthe current system, you would need to look at \\f(CW\\*(C`ev_embeddable_backends ()\n& ev_supported_backends ()\\*(C'\\fR, likewise for recommended ones.\n.Sp\nSee the description of \\f(CW\\*(C`ev_embed\\*(C'\\fR watchers for more info.\n.IP \"ev_set_allocator (void *(*cb)(void *ptr, long size) throw ())\" 4\n.IX Item \"ev_set_allocator (void *(*cb)(void *ptr, long size) throw ())\"\nSets the allocation function to use (the prototype is similar \\- the\nsemantics are identical to the \\f(CW\\*(C`realloc\\*(C'\\fR C89/SuS/POSIX function). It is\nused to allocate and free memory (no surprises here). If it returns zero\nwhen memory needs to be allocated (\\f(CW\\*(C`size != 0\\*(C'\\fR), the library might abort\nor take some potentially destructive action.\n.Sp\nSince some systems (at least OpenBSD and Darwin) fail to implement\ncorrect \\f(CW\\*(C`realloc\\*(C'\\fR semantics, libev will use a wrapper around the system\n\\&\\f(CW\\*(C`realloc\\*(C'\\fR and \\f(CW\\*(C`free\\*(C'\\fR functions by default.\n.Sp\nYou could override this function in high-availability programs to, say,\nfree some memory if it cannot allocate memory, to use a special allocator,\nor even to sleep a while and retry until some memory is available.\n.Sp\nExample: Replace the libev allocator with one that waits a bit and then\nretries (example requires a standards-compliant \\f(CW\\*(C`realloc\\*(C'\\fR).\n.Sp\n.Vb 6\n\\&   static void *\n\\&   persistent_realloc (void *ptr, size_t size)\n\\&   {\n\\&     for (;;)\n\\&       {\n\\&         void *newptr = realloc (ptr, size);\n\\&\n\\&         if (newptr)\n\\&           return newptr;\n\\&\n\\&         sleep (60);\n\\&       }\n\\&   }\n\\&\n\\&   ...\n\\&   ev_set_allocator (persistent_realloc);\n.Ve\n.IP \"ev_set_syserr_cb (void (*cb)(const char *msg) throw ())\" 4\n.IX Item \"ev_set_syserr_cb (void (*cb)(const char *msg) throw ())\"\nSet the callback function to call on a retryable system call error (such\nas failed select, poll, epoll_wait). The message is a printable string\nindicating the system call or subsystem causing the problem. If this\ncallback is set, then libev will expect it to remedy the situation, no\nmatter what, when it returns. That is, libev will generally retry the\nrequested operation, or, if the condition doesn't go away, do bad stuff\n(such as abort).\n.Sp\nExample: This is basically the same thing that libev does internally, too.\n.Sp\n.Vb 6\n\\&   static void\n\\&   fatal_error (const char *msg)\n\\&   {\n\\&     perror (msg);\n\\&     abort ();\n\\&   }\n\\&\n\\&   ...\n\\&   ev_set_syserr_cb (fatal_error);\n.Ve\n.IP \"ev_feed_signal (int signum)\" 4\n.IX Item \"ev_feed_signal (int signum)\"\nThis function can be used to \\*(L\"simulate\\*(R\" a signal receive. It is completely\nsafe to call this function at any time, from any context, including signal\nhandlers or random threads.\n.Sp\nIts main use is to customise signal handling in your process, especially\nin the presence of threads. For example, you could block signals\nby default in all threads (and specifying \\f(CW\\*(C`EVFLAG_NOSIGMASK\\*(C'\\fR when\ncreating any loops), and in one thread, use \\f(CW\\*(C`sigwait\\*(C'\\fR or any other\nmechanism to wait for signals, then \\*(L\"deliver\\*(R\" them to libev by calling\n\\&\\f(CW\\*(C`ev_feed_signal\\*(C'\\fR.\n.SH \"FUNCTIONS CONTROLLING EVENT LOOPS\"\n.IX Header \"FUNCTIONS CONTROLLING EVENT LOOPS\"\nAn event loop is described by a \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR (the \\f(CW\\*(C`struct\\*(C'\\fR is\n\\&\\fInot\\fR optional in this case unless libev 3 compatibility is disabled, as\nlibev 3 had an \\f(CW\\*(C`ev_loop\\*(C'\\fR function colliding with the struct name).\n.PP\nThe library knows two types of such loops, the \\fIdefault\\fR loop, which\nsupports child process events, and dynamically created event loops which\ndo not.\n.IP \"struct ev_loop *ev_default_loop (unsigned int flags)\" 4\n.IX Item \"struct ev_loop *ev_default_loop (unsigned int flags)\"\nThis returns the \\*(L\"default\\*(R\" event loop object, which is what you should\nnormally use when you just need \\*(L\"the event loop\\*(R\". Event loop objects and\nthe \\f(CW\\*(C`flags\\*(C'\\fR parameter are described in more detail in the entry for\n\\&\\f(CW\\*(C`ev_loop_new\\*(C'\\fR.\n.Sp\nIf the default loop is already initialised then this function simply\nreturns it (and ignores the flags. If that is troubling you, check\n\\&\\f(CW\\*(C`ev_backend ()\\*(C'\\fR afterwards). Otherwise it will create it with the given\nflags, which should almost always be \\f(CW0\\fR, unless the caller is also the\none calling \\f(CW\\*(C`ev_run\\*(C'\\fR or otherwise qualifies as \\*(L\"the main program\\*(R\".\n.Sp\nIf you don't know what event loop to use, use the one returned from this\nfunction (or via the \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR macro).\n.Sp\nNote that this function is \\fInot\\fR thread-safe, so if you want to use it\nfrom multiple threads, you have to employ some kind of mutex (note also\nthat this case is unlikely, as loops cannot be shared easily between\nthreads anyway).\n.Sp\nThe default loop is the only loop that can handle \\f(CW\\*(C`ev_child\\*(C'\\fR watchers,\nand to do this, it always registers a handler for \\f(CW\\*(C`SIGCHLD\\*(C'\\fR. If this is\na problem for your application you can either create a dynamic loop with\n\\&\\f(CW\\*(C`ev_loop_new\\*(C'\\fR which doesn't do that, or you can simply overwrite the\n\\&\\f(CW\\*(C`SIGCHLD\\*(C'\\fR signal handler \\fIafter\\fR calling \\f(CW\\*(C`ev_default_init\\*(C'\\fR.\n.Sp\nExample: This is the most typical usage.\n.Sp\n.Vb 2\n\\&   if (!ev_default_loop (0))\n\\&     fatal (\"could not initialise libev, bad $LIBEV_FLAGS in environment?\");\n.Ve\n.Sp\nExample: Restrict libev to the select and poll backends, and do not allow\nenvironment settings to be taken into account:\n.Sp\n.Vb 1\n\\&   ev_default_loop (EVBACKEND_POLL | EVBACKEND_SELECT | EVFLAG_NOENV);\n.Ve\n.IP \"struct ev_loop *ev_loop_new (unsigned int flags)\" 4\n.IX Item \"struct ev_loop *ev_loop_new (unsigned int flags)\"\nThis will create and initialise a new event loop object. If the loop\ncould not be initialised, returns false.\n.Sp\nThis function is thread-safe, and one common way to use libev with\nthreads is indeed to create one loop per thread, and using the default\nloop in the \\*(L\"main\\*(R\" or \\*(L\"initial\\*(R\" thread.\n.Sp\nThe flags argument can be used to specify special behaviour or specific\nbackends to use, and is usually specified as \\f(CW0\\fR (or \\f(CW\\*(C`EVFLAG_AUTO\\*(C'\\fR).\n.Sp\nThe following flags are supported:\n.RS 4\n.ie n .IP \"\"\"EVFLAG_AUTO\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_AUTO\\fR\" 4\n.IX Item \"EVFLAG_AUTO\"\nThe default flags value. Use this if you have no clue (it's the right\nthing, believe me).\n.ie n .IP \"\"\"EVFLAG_NOENV\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_NOENV\\fR\" 4\n.IX Item \"EVFLAG_NOENV\"\nIf this flag bit is or'ed into the flag value (or the program runs setuid\nor setgid) then libev will \\fInot\\fR look at the environment variable\n\\&\\f(CW\\*(C`LIBEV_FLAGS\\*(C'\\fR. Otherwise (the default), this environment variable will\noverride the flags completely if it is found in the environment. This is\nuseful to try out specific backends to test their performance, to work\naround bugs, or to make libev threadsafe (accessing environment variables\ncannot be done in a threadsafe way, but usually it works if no other\nthread modifies them).\n.ie n .IP \"\"\"EVFLAG_FORKCHECK\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_FORKCHECK\\fR\" 4\n.IX Item \"EVFLAG_FORKCHECK\"\nInstead of calling \\f(CW\\*(C`ev_loop_fork\\*(C'\\fR manually after a fork, you can also\nmake libev check for a fork in each iteration by enabling this flag.\n.Sp\nThis works by calling \\f(CW\\*(C`getpid ()\\*(C'\\fR on every iteration of the loop,\nand thus this might slow down your event loop if you do a lot of loop\niterations and little real work, but is usually not noticeable (on my\nGNU/Linux system for example, \\f(CW\\*(C`getpid\\*(C'\\fR is actually a simple 5\\-insn sequence\nwithout a system call and thus \\fIvery\\fR fast, but my GNU/Linux system also has\n\\&\\f(CW\\*(C`pthread_atfork\\*(C'\\fR which is even faster).\n.Sp\nThe big advantage of this flag is that you can forget about fork (and\nforget about forgetting to tell libev about forking) when you use this\nflag.\n.Sp\nThis flag setting cannot be overridden or specified in the \\f(CW\\*(C`LIBEV_FLAGS\\*(C'\\fR\nenvironment variable.\n.ie n .IP \"\"\"EVFLAG_NOINOTIFY\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_NOINOTIFY\\fR\" 4\n.IX Item \"EVFLAG_NOINOTIFY\"\nWhen this flag is specified, then libev will not attempt to use the\n\\&\\fIinotify\\fR \\s-1API\\s0 for its \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers. Apart from debugging and\ntesting, this flag can be useful to conserve inotify file descriptors, as\notherwise each loop using \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers consumes one inotify handle.\n.ie n .IP \"\"\"EVFLAG_SIGNALFD\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_SIGNALFD\\fR\" 4\n.IX Item \"EVFLAG_SIGNALFD\"\nWhen this flag is specified, then libev will attempt to use the\n\\&\\fIsignalfd\\fR \\s-1API\\s0 for its \\f(CW\\*(C`ev_signal\\*(C'\\fR (and \\f(CW\\*(C`ev_child\\*(C'\\fR) watchers. This \\s-1API\\s0\ndelivers signals synchronously, which makes it both faster and might make\nit possible to get the queued signal data. It can also simplify signal\nhandling with threads, as long as you properly block signals in your\nthreads that are not interested in handling them.\n.Sp\nSignalfd will not be used by default as this changes your signal mask, and\nthere are a lot of shoddy libraries and programs (glib's threadpool for\nexample) that can't properly initialise their signal masks.\n.ie n .IP \"\"\"EVFLAG_NOSIGMASK\"\"\" 4\n.el .IP \"\\f(CWEVFLAG_NOSIGMASK\\fR\" 4\n.IX Item \"EVFLAG_NOSIGMASK\"\nWhen this flag is specified, then libev will avoid to modify the signal\nmask. Specifically, this means you have to make sure signals are unblocked\nwhen you want to receive them.\n.Sp\nThis behaviour is useful when you want to do your own signal handling, or\nwant to handle signals only in specific threads and want to avoid libev\nunblocking the signals.\n.Sp\nIt's also required by \\s-1POSIX\\s0 in a threaded program, as libev calls\n\\&\\f(CW\\*(C`sigprocmask\\*(C'\\fR, whose behaviour is officially unspecified.\n.Sp\nThis flag's behaviour will become the default in future versions of libev.\n.ie n .IP \"\"\"EVBACKEND_SELECT\"\"  (value 1, portable select backend)\" 4\n.el .IP \"\\f(CWEVBACKEND_SELECT\\fR  (value 1, portable select backend)\" 4\n.IX Item \"EVBACKEND_SELECT  (value 1, portable select backend)\"\nThis is your standard \\fIselect\\fR\\|(2) backend. Not \\fIcompletely\\fR standard, as\nlibev tries to roll its own fd_set with no limits on the number of fds,\nbut if that fails, expect a fairly low limit on the number of fds when\nusing this backend. It doesn't scale too well (O(highest_fd)), but its\nusually the fastest backend for a low number of (low-numbered :) fds.\n.Sp\nTo get good performance out of this backend you need a high amount of\nparallelism (most of the file descriptors should be busy). If you are\nwriting a server, you should \\f(CW\\*(C`accept ()\\*(C'\\fR in a loop to accept as many\nconnections as possible during one iteration. You might also want to have\na look at \\f(CW\\*(C`ev_set_io_collect_interval ()\\*(C'\\fR to increase the amount of\nreadiness notifications you get per iteration.\n.Sp\nThis backend maps \\f(CW\\*(C`EV_READ\\*(C'\\fR to the \\f(CW\\*(C`readfds\\*(C'\\fR set and \\f(CW\\*(C`EV_WRITE\\*(C'\\fR to the\n\\&\\f(CW\\*(C`writefds\\*(C'\\fR set (and to work around Microsoft Windows bugs, also onto the\n\\&\\f(CW\\*(C`exceptfds\\*(C'\\fR set on that platform).\n.ie n .IP \"\"\"EVBACKEND_POLL\"\"    (value 2, poll backend, available everywhere except on windows)\" 4\n.el .IP \"\\f(CWEVBACKEND_POLL\\fR    (value 2, poll backend, available everywhere except on windows)\" 4\n.IX Item \"EVBACKEND_POLL    (value 2, poll backend, available everywhere except on windows)\"\nAnd this is your standard \\fIpoll\\fR\\|(2) backend. It's more complicated\nthan select, but handles sparse fds better and has no artificial\nlimit on the number of fds you can use (except it will slow down\nconsiderably with a lot of inactive fds). It scales similarly to select,\ni.e. O(total_fds). See the entry for \\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR, above, for\nperformance tips.\n.Sp\nThis backend maps \\f(CW\\*(C`EV_READ\\*(C'\\fR to \\f(CW\\*(C`POLLIN | POLLERR | POLLHUP\\*(C'\\fR, and\n\\&\\f(CW\\*(C`EV_WRITE\\*(C'\\fR to \\f(CW\\*(C`POLLOUT | POLLERR | POLLHUP\\*(C'\\fR.\n.ie n .IP \"\"\"EVBACKEND_EPOLL\"\"   (value 4, Linux)\" 4\n.el .IP \"\\f(CWEVBACKEND_EPOLL\\fR   (value 4, Linux)\" 4\n.IX Item \"EVBACKEND_EPOLL   (value 4, Linux)\"\nUse the linux-specific \\fIepoll\\fR\\|(7) interface (for both pre\\- and post\\-2.6.9\nkernels).\n.Sp\nFor few fds, this backend is a bit little slower than poll and select, but\nit scales phenomenally better. While poll and select usually scale like\nO(total_fds) where total_fds is the total number of fds (or the highest\nfd), epoll scales either O(1) or O(active_fds).\n.Sp\nThe epoll mechanism deserves honorable mention as the most misdesigned\nof the more advanced event mechanisms: mere annoyances include silently\ndropping file descriptors, requiring a system call per change per file\ndescriptor (and unnecessary guessing of parameters), problems with dup,\nreturning before the timeout value, resulting in additional iterations\n(and only giving 5ms accuracy while select on the same platform gives\n0.1ms) and so on. The biggest issue is fork races, however \\- if a program\nforks then \\fIboth\\fR parent and child process have to recreate the epoll\nset, which can take considerable time (one syscall per file descriptor)\nand is of course hard to detect.\n.Sp\nEpoll is also notoriously buggy \\- embedding epoll fds \\fIshould\\fR work,\nbut of course \\fIdoesn't\\fR, and epoll just loves to report events for\ntotally \\fIdifferent\\fR file descriptors (even already closed ones, so\none cannot even remove them from the set) than registered in the set\n(especially on \\s-1SMP\\s0 systems). Libev tries to counter these spurious\nnotifications by employing an additional generation counter and comparing\nthat against the events to filter out spurious ones, recreating the set\nwhen required. Epoll also erroneously rounds down timeouts, but gives you\nno way to know when and by how much, so sometimes you have to busy-wait\nbecause epoll returns immediately despite a nonzero timeout. And last\nnot least, it also refuses to work with some file descriptors which work\nperfectly fine with \\f(CW\\*(C`select\\*(C'\\fR (files, many character devices...).\n.Sp\nEpoll is truly the train wreck among event poll mechanisms, a frankenpoll,\ncobbled together in a hurry, no thought to design or interaction with\nothers. Oh, the pain, will it ever stop...\n.Sp\nWhile stopping, setting and starting an I/O watcher in the same iteration\nwill result in some caching, there is still a system call per such\nincident (because the same \\fIfile descriptor\\fR could point to a different\n\\&\\fIfile description\\fR now), so its best to avoid that. Also, \\f(CW\\*(C`dup ()\\*(C'\\fR'ed\nfile descriptors might not work very well if you register events for both\nfile descriptors.\n.Sp\nBest performance from this backend is achieved by not unregistering all\nwatchers for a file descriptor until it has been closed, if possible,\ni.e. keep at least one watcher active per fd at all times. Stopping and\nstarting a watcher (without re-setting it) also usually doesn't cause\nextra overhead. A fork can both result in spurious notifications as well\nas in libev having to destroy and recreate the epoll object, which can\ntake considerable time and thus should be avoided.\n.Sp\nAll this means that, in practice, \\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR can be as fast or\nfaster than epoll for maybe up to a hundred file descriptors, depending on\nthe usage. So sad.\n.Sp\nWhile nominally embeddable in other event loops, this feature is broken in\nall kernel versions tested so far.\n.Sp\nThis backend maps \\f(CW\\*(C`EV_READ\\*(C'\\fR and \\f(CW\\*(C`EV_WRITE\\*(C'\\fR in the same way as\n\\&\\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR.\n.ie n .IP \"\"\"EVBACKEND_KQUEUE\"\"  (value 8, most \\s-1BSD\\s0 clones)\" 4\n.el .IP \"\\f(CWEVBACKEND_KQUEUE\\fR  (value 8, most \\s-1BSD\\s0 clones)\" 4\n.IX Item \"EVBACKEND_KQUEUE  (value 8, most BSD clones)\"\nKqueue deserves special mention, as at the time of this writing, it\nwas broken on all BSDs except NetBSD (usually it doesn't work reliably\nwith anything but sockets and pipes, except on Darwin, where of course\nit's completely useless). Unlike epoll, however, whose brokenness\nis by design, these kqueue bugs can (and eventually will) be fixed\nwithout \\s-1API\\s0 changes to existing programs. For this reason it's not being\n\\&\\*(L\"auto-detected\\*(R\" unless you explicitly specify it in the flags (i.e. using\n\\&\\f(CW\\*(C`EVBACKEND_KQUEUE\\*(C'\\fR) or libev was compiled on a known-to-be-good (\\-enough)\nsystem like NetBSD.\n.Sp\nYou still can embed kqueue into a normal poll or select backend and use it\nonly for sockets (after having made sure that sockets work with kqueue on\nthe target platform). See \\f(CW\\*(C`ev_embed\\*(C'\\fR watchers for more info.\n.Sp\nIt scales in the same way as the epoll backend, but the interface to the\nkernel is more efficient (which says nothing about its actual speed, of\ncourse). While stopping, setting and starting an I/O watcher does never\ncause an extra system call as with \\f(CW\\*(C`EVBACKEND_EPOLL\\*(C'\\fR, it still adds up to\ntwo event changes per incident. Support for \\f(CW\\*(C`fork ()\\*(C'\\fR is very bad (you\nmight have to leak fd's on fork, but it's more sane than epoll) and it\ndrops fds silently in similarly hard-to-detect cases.\n.Sp\nThis backend usually performs well under most conditions.\n.Sp\nWhile nominally embeddable in other event loops, this doesn't work\neverywhere, so you might need to test for this. And since it is broken\nalmost everywhere, you should only use it when you have a lot of sockets\n(for which it usually works), by embedding it into another event loop\n(e.g. \\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR or \\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR (but \\f(CW\\*(C`poll\\*(C'\\fR is of course\nalso broken on \\s-1OS\\s0 X)) and, did I mention it, using it only for sockets.\n.Sp\nThis backend maps \\f(CW\\*(C`EV_READ\\*(C'\\fR into an \\f(CW\\*(C`EVFILT_READ\\*(C'\\fR kevent with\n\\&\\f(CW\\*(C`NOTE_EOF\\*(C'\\fR, and \\f(CW\\*(C`EV_WRITE\\*(C'\\fR into an \\f(CW\\*(C`EVFILT_WRITE\\*(C'\\fR kevent with\n\\&\\f(CW\\*(C`NOTE_EOF\\*(C'\\fR.\n.ie n .IP \"\"\"EVBACKEND_DEVPOLL\"\" (value 16, Solaris 8)\" 4\n.el .IP \"\\f(CWEVBACKEND_DEVPOLL\\fR (value 16, Solaris 8)\" 4\n.IX Item \"EVBACKEND_DEVPOLL (value 16, Solaris 8)\"\nThis is not implemented yet (and might never be, unless you send me an\nimplementation). According to reports, \\f(CW\\*(C`/dev/poll\\*(C'\\fR only supports sockets\nand is not embeddable, which would limit the usefulness of this backend\nimmensely.\n.ie n .IP \"\"\"EVBACKEND_PORT\"\"    (value 32, Solaris 10)\" 4\n.el .IP \"\\f(CWEVBACKEND_PORT\\fR    (value 32, Solaris 10)\" 4\n.IX Item \"EVBACKEND_PORT    (value 32, Solaris 10)\"\nThis uses the Solaris 10 event port mechanism. As with everything on Solaris,\nit's really slow, but it still scales very well (O(active_fds)).\n.Sp\nWhile this backend scales well, it requires one system call per active\nfile descriptor per loop iteration. For small and medium numbers of file\ndescriptors a \\*(L\"slow\\*(R\" \\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR or \\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR backend\nmight perform better.\n.Sp\nOn the positive side, this backend actually performed fully to\nspecification in all tests and is fully embeddable, which is a rare feat\namong the OS-specific backends (I vastly prefer correctness over speed\nhacks).\n.Sp\nOn the negative side, the interface is \\fIbizarre\\fR \\- so bizarre that\neven sun itself gets it wrong in their code examples: The event polling\nfunction sometimes returns events to the caller even though an error\noccurred, but with no indication whether it has done so or not (yes, it's\neven documented that way) \\- deadly for edge-triggered interfaces where you\nabsolutely have to know whether an event occurred or not because you have\nto re-arm the watcher.\n.Sp\nFortunately libev seems to be able to work around these idiocies.\n.Sp\nThis backend maps \\f(CW\\*(C`EV_READ\\*(C'\\fR and \\f(CW\\*(C`EV_WRITE\\*(C'\\fR in the same way as\n\\&\\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR.\n.ie n .IP \"\"\"EVBACKEND_ALL\"\"\" 4\n.el .IP \"\\f(CWEVBACKEND_ALL\\fR\" 4\n.IX Item \"EVBACKEND_ALL\"\nTry all backends (even potentially broken ones that wouldn't be tried\nwith \\f(CW\\*(C`EVFLAG_AUTO\\*(C'\\fR). Since this is a mask, you can do stuff such as\n\\&\\f(CW\\*(C`EVBACKEND_ALL & ~EVBACKEND_KQUEUE\\*(C'\\fR.\n.Sp\nIt is definitely not recommended to use this flag, use whatever\n\\&\\f(CW\\*(C`ev_recommended_backends ()\\*(C'\\fR returns, or simply do not specify a backend\nat all.\n.ie n .IP \"\"\"EVBACKEND_MASK\"\"\" 4\n.el .IP \"\\f(CWEVBACKEND_MASK\\fR\" 4\n.IX Item \"EVBACKEND_MASK\"\nNot a backend at all, but a mask to select all backend bits from a\n\\&\\f(CW\\*(C`flags\\*(C'\\fR value, in case you want to mask out any backends from a flags\nvalue (e.g. when modifying the \\f(CW\\*(C`LIBEV_FLAGS\\*(C'\\fR environment variable).\n.RE\n.RS 4\n.Sp\nIf one or more of the backend flags are or'ed into the flags value,\nthen only these backends will be tried (in the reverse order as listed\nhere). If none are specified, all backends in \\f(CW\\*(C`ev_recommended_backends\n()\\*(C'\\fR will be tried.\n.Sp\nExample: Try to create a event loop that uses epoll and nothing else.\n.Sp\n.Vb 3\n\\&   struct ev_loop *epoller = ev_loop_new (EVBACKEND_EPOLL | EVFLAG_NOENV);\n\\&   if (!epoller)\n\\&     fatal (\"no epoll found here, maybe it hides under your chair\");\n.Ve\n.Sp\nExample: Use whatever libev has to offer, but make sure that kqueue is\nused if available.\n.Sp\n.Vb 1\n\\&   struct ev_loop *loop = ev_loop_new (ev_recommended_backends () | EVBACKEND_KQUEUE);\n.Ve\n.RE\n.IP \"ev_loop_destroy (loop)\" 4\n.IX Item \"ev_loop_destroy (loop)\"\nDestroys an event loop object (frees all memory and kernel state\netc.). None of the active event watchers will be stopped in the normal\nsense, so e.g. \\f(CW\\*(C`ev_is_active\\*(C'\\fR might still return true. It is your\nresponsibility to either stop all watchers cleanly yourself \\fIbefore\\fR\ncalling this function, or cope with the fact afterwards (which is usually\nthe easiest thing, you can just ignore the watchers and/or \\f(CW\\*(C`free ()\\*(C'\\fR them\nfor example).\n.Sp\nNote that certain global state, such as signal state (and installed signal\nhandlers), will not be freed by this function, and related watchers (such\nas signal and child watchers) would need to be stopped manually.\n.Sp\nThis function is normally used on loop objects allocated by\n\\&\\f(CW\\*(C`ev_loop_new\\*(C'\\fR, but it can also be used on the default loop returned by\n\\&\\f(CW\\*(C`ev_default_loop\\*(C'\\fR, in which case it is not thread-safe.\n.Sp\nNote that it is not advisable to call this function on the default loop\nexcept in the rare occasion where you really need to free its resources.\nIf you need dynamically allocated loops it is better to use \\f(CW\\*(C`ev_loop_new\\*(C'\\fR\nand \\f(CW\\*(C`ev_loop_destroy\\*(C'\\fR.\n.IP \"ev_loop_fork (loop)\" 4\n.IX Item \"ev_loop_fork (loop)\"\nThis function sets a flag that causes subsequent \\f(CW\\*(C`ev_run\\*(C'\\fR iterations\nto reinitialise the kernel state for backends that have one. Despite\nthe name, you can call it anytime you are allowed to start or stop\nwatchers (except inside an \\f(CW\\*(C`ev_prepare\\*(C'\\fR callback), but it makes most\nsense after forking, in the child process. You \\fImust\\fR call it (or use\n\\&\\f(CW\\*(C`EVFLAG_FORKCHECK\\*(C'\\fR) in the child before resuming or calling \\f(CW\\*(C`ev_run\\*(C'\\fR.\n.Sp\nAgain, you \\fIhave\\fR to call it on \\fIany\\fR loop that you want to re-use after\na fork, \\fIeven if you do not plan to use the loop in the parent\\fR. This is\nbecause some kernel interfaces *cough* \\fIkqueue\\fR *cough* do funny things\nduring fork.\n.Sp\nOn the other hand, you only need to call this function in the child\nprocess if and only if you want to use the event loop in the child. If\nyou just fork+exec or create a new loop in the child, you don't have to\ncall it at all (in fact, \\f(CW\\*(C`epoll\\*(C'\\fR is so badly broken that it makes a\ndifference, but libev will usually detect this case on its own and do a\ncostly reset of the backend).\n.Sp\nThe function itself is quite fast and it's usually not a problem to call\nit just in case after a fork.\n.Sp\nExample: Automate calling \\f(CW\\*(C`ev_loop_fork\\*(C'\\fR on the default loop when\nusing pthreads.\n.Sp\n.Vb 5\n\\&   static void\n\\&   post_fork_child (void)\n\\&   {\n\\&     ev_loop_fork (EV_DEFAULT);\n\\&   }\n\\&\n\\&   ...\n\\&   pthread_atfork (0, 0, post_fork_child);\n.Ve\n.IP \"int ev_is_default_loop (loop)\" 4\n.IX Item \"int ev_is_default_loop (loop)\"\nReturns true when the given loop is, in fact, the default loop, and false\notherwise.\n.IP \"unsigned int ev_iteration (loop)\" 4\n.IX Item \"unsigned int ev_iteration (loop)\"\nReturns the current iteration count for the event loop, which is identical\nto the number of times libev did poll for new events. It starts at \\f(CW0\\fR\nand happily wraps around with enough iterations.\n.Sp\nThis value can sometimes be useful as a generation counter of sorts (it\n\\&\\*(L\"ticks\\*(R\" the number of loop iterations), as it roughly corresponds with\n\\&\\f(CW\\*(C`ev_prepare\\*(C'\\fR and \\f(CW\\*(C`ev_check\\*(C'\\fR calls \\- and is incremented between the\nprepare and check phases.\n.IP \"unsigned int ev_depth (loop)\" 4\n.IX Item \"unsigned int ev_depth (loop)\"\nReturns the number of times \\f(CW\\*(C`ev_run\\*(C'\\fR was entered minus the number of\ntimes \\f(CW\\*(C`ev_run\\*(C'\\fR was exited normally, in other words, the recursion depth.\n.Sp\nOutside \\f(CW\\*(C`ev_run\\*(C'\\fR, this number is zero. In a callback, this number is\n\\&\\f(CW1\\fR, unless \\f(CW\\*(C`ev_run\\*(C'\\fR was invoked recursively (or from another thread),\nin which case it is higher.\n.Sp\nLeaving \\f(CW\\*(C`ev_run\\*(C'\\fR abnormally (setjmp/longjmp, cancelling the thread,\nthrowing an exception etc.), doesn't count as \\*(L\"exit\\*(R\" \\- consider this\nas a hint to avoid such ungentleman-like behaviour unless it's really\nconvenient, in which case it is fully supported.\n.IP \"unsigned int ev_backend (loop)\" 4\n.IX Item \"unsigned int ev_backend (loop)\"\nReturns one of the \\f(CW\\*(C`EVBACKEND_*\\*(C'\\fR flags indicating the event backend in\nuse.\n.IP \"ev_tstamp ev_now (loop)\" 4\n.IX Item \"ev_tstamp ev_now (loop)\"\nReturns the current \\*(L\"event loop time\\*(R\", which is the time the event loop\nreceived events and started processing them. This timestamp does not\nchange as long as callbacks are being processed, and this is also the base\ntime used for relative timers. You can treat it as the timestamp of the\nevent occurring (or more correctly, libev finding out about it).\n.IP \"ev_now_update (loop)\" 4\n.IX Item \"ev_now_update (loop)\"\nEstablishes the current time by querying the kernel, updating the time\nreturned by \\f(CW\\*(C`ev_now ()\\*(C'\\fR in the progress. This is a costly operation and\nis usually done automatically within \\f(CW\\*(C`ev_run ()\\*(C'\\fR.\n.Sp\nThis function is rarely useful, but when some event callback runs for a\nvery long time without entering the event loop, updating libev's idea of\nthe current time is a good idea.\n.Sp\nSee also \\*(L\"The special problem of time updates\\*(R\" in the \\f(CW\\*(C`ev_timer\\*(C'\\fR section.\n.IP \"ev_suspend (loop)\" 4\n.IX Item \"ev_suspend (loop)\"\n.PD 0\n.IP \"ev_resume (loop)\" 4\n.IX Item \"ev_resume (loop)\"\n.PD\nThese two functions suspend and resume an event loop, for use when the\nloop is not used for a while and timeouts should not be processed.\n.Sp\nA typical use case would be an interactive program such as a game:  When\nthe user presses \\f(CW\\*(C`^Z\\*(C'\\fR to suspend the game and resumes it an hour later it\nwould be best to handle timeouts as if no time had actually passed while\nthe program was suspended. This can be achieved by calling \\f(CW\\*(C`ev_suspend\\*(C'\\fR\nin your \\f(CW\\*(C`SIGTSTP\\*(C'\\fR handler, sending yourself a \\f(CW\\*(C`SIGSTOP\\*(C'\\fR and calling\n\\&\\f(CW\\*(C`ev_resume\\*(C'\\fR directly afterwards to resume timer processing.\n.Sp\nEffectively, all \\f(CW\\*(C`ev_timer\\*(C'\\fR watchers will be delayed by the time spend\nbetween \\f(CW\\*(C`ev_suspend\\*(C'\\fR and \\f(CW\\*(C`ev_resume\\*(C'\\fR, and all \\f(CW\\*(C`ev_periodic\\*(C'\\fR watchers\nwill be rescheduled (that is, they will lose any events that would have\noccurred while suspended).\n.Sp\nAfter calling \\f(CW\\*(C`ev_suspend\\*(C'\\fR you \\fBmust not\\fR call \\fIany\\fR function on the\ngiven loop other than \\f(CW\\*(C`ev_resume\\*(C'\\fR, and you \\fBmust not\\fR call \\f(CW\\*(C`ev_resume\\*(C'\\fR\nwithout a previous call to \\f(CW\\*(C`ev_suspend\\*(C'\\fR.\n.Sp\nCalling \\f(CW\\*(C`ev_suspend\\*(C'\\fR/\\f(CW\\*(C`ev_resume\\*(C'\\fR has the side effect of updating the\nevent loop time (see \\f(CW\\*(C`ev_now_update\\*(C'\\fR).\n.IP \"bool ev_run (loop, int flags)\" 4\n.IX Item \"bool ev_run (loop, int flags)\"\nFinally, this is it, the event handler. This function usually is called\nafter you have initialised all your watchers and you want to start\nhandling events. It will ask the operating system for any new events, call\nthe watcher callbacks, and then repeat the whole process indefinitely: This\nis why event loops are called \\fIloops\\fR.\n.Sp\nIf the flags argument is specified as \\f(CW0\\fR, it will keep handling events\nuntil either no event watchers are active anymore or \\f(CW\\*(C`ev_break\\*(C'\\fR was\ncalled.\n.Sp\nThe return value is false if there are no more active watchers (which\nusually means \\*(L\"all jobs done\\*(R\" or \\*(L\"deadlock\\*(R\"), and true in all other cases\n(which usually means \" you should call \\f(CW\\*(C`ev_run\\*(C'\\fR again\").\n.Sp\nPlease note that an explicit \\f(CW\\*(C`ev_break\\*(C'\\fR is usually better than\nrelying on all watchers to be stopped when deciding when a program has\nfinished (especially in interactive programs), but having a program\nthat automatically loops as long as it has to and no longer by virtue\nof relying on its watchers stopping correctly, that is truly a thing of\nbeauty.\n.Sp\nThis function is \\fImostly\\fR exception-safe \\- you can break out of a\n\\&\\f(CW\\*(C`ev_run\\*(C'\\fR call by calling \\f(CW\\*(C`longjmp\\*(C'\\fR in a callback, throwing a \\*(C+\nexception and so on. This does not decrement the \\f(CW\\*(C`ev_depth\\*(C'\\fR value, nor\nwill it clear any outstanding \\f(CW\\*(C`EVBREAK_ONE\\*(C'\\fR breaks.\n.Sp\nA flags value of \\f(CW\\*(C`EVRUN_NOWAIT\\*(C'\\fR will look for new events, will handle\nthose events and any already outstanding ones, but will not wait and\nblock your process in case there are no events and will return after one\niteration of the loop. This is sometimes useful to poll and handle new\nevents while doing lengthy calculations, to keep the program responsive.\n.Sp\nA flags value of \\f(CW\\*(C`EVRUN_ONCE\\*(C'\\fR will look for new events (waiting if\nnecessary) and will handle those and any already outstanding ones. It\nwill block your process until at least one new event arrives (which could\nbe an event internal to libev itself, so there is no guarantee that a\nuser-registered callback will be called), and will return after one\niteration of the loop.\n.Sp\nThis is useful if you are waiting for some external event in conjunction\nwith something not expressible using other libev watchers (i.e. \"roll your\nown \\f(CW\\*(C`ev_run\\*(C'\\fR\"). However, a pair of \\f(CW\\*(C`ev_prepare\\*(C'\\fR/\\f(CW\\*(C`ev_check\\*(C'\\fR watchers is\nusually a better approach for this kind of thing.\n.Sp\nHere are the gory details of what \\f(CW\\*(C`ev_run\\*(C'\\fR does (this is for your\nunderstanding, not a guarantee that things will work exactly like this in\nfuture versions):\n.Sp\n.Vb 10\n\\&   \\- Increment loop depth.\n\\&   \\- Reset the ev_break status.\n\\&   \\- Before the first iteration, call any pending watchers.\n\\&   LOOP:\n\\&   \\- If EVFLAG_FORKCHECK was used, check for a fork.\n\\&   \\- If a fork was detected (by any means), queue and call all fork watchers.\n\\&   \\- Queue and call all prepare watchers.\n\\&   \\- If ev_break was called, goto FINISH.\n\\&   \\- If we have been forked, detach and recreate the kernel state\n\\&     as to not disturb the other process.\n\\&   \\- Update the kernel state with all outstanding changes.\n\\&   \\- Update the \"event loop time\" (ev_now ()).\n\\&   \\- Calculate for how long to sleep or block, if at all\n\\&     (active idle watchers, EVRUN_NOWAIT or not having\n\\&     any active watchers at all will result in not sleeping).\n\\&   \\- Sleep if the I/O and timer collect interval say so.\n\\&   \\- Increment loop iteration counter.\n\\&   \\- Block the process, waiting for any events.\n\\&   \\- Queue all outstanding I/O (fd) events.\n\\&   \\- Update the \"event loop time\" (ev_now ()), and do time jump adjustments.\n\\&   \\- Queue all expired timers.\n\\&   \\- Queue all expired periodics.\n\\&   \\- Queue all idle watchers with priority higher than that of pending events.\n\\&   \\- Queue all check watchers.\n\\&   \\- Call all queued watchers in reverse order (i.e. check watchers first).\n\\&     Signals and child watchers are implemented as I/O watchers, and will\n\\&     be handled here by queueing them when their watcher gets executed.\n\\&   \\- If ev_break has been called, or EVRUN_ONCE or EVRUN_NOWAIT\n\\&     were used, or there are no active watchers, goto FINISH, otherwise\n\\&     continue with step LOOP.\n\\&   FINISH:\n\\&   \\- Reset the ev_break status iff it was EVBREAK_ONE.\n\\&   \\- Decrement the loop depth.\n\\&   \\- Return.\n.Ve\n.Sp\nExample: Queue some jobs and then loop until no events are outstanding\nanymore.\n.Sp\n.Vb 4\n\\&   ... queue jobs here, make sure they register event watchers as long\n\\&   ... as they still have work to do (even an idle watcher will do..)\n\\&   ev_run (my_loop, 0);\n\\&   ... jobs done or somebody called break. yeah!\n.Ve\n.IP \"ev_break (loop, how)\" 4\n.IX Item \"ev_break (loop, how)\"\nCan be used to make a call to \\f(CW\\*(C`ev_run\\*(C'\\fR return early (but only after it\nhas processed all outstanding events). The \\f(CW\\*(C`how\\*(C'\\fR argument must be either\n\\&\\f(CW\\*(C`EVBREAK_ONE\\*(C'\\fR, which will make the innermost \\f(CW\\*(C`ev_run\\*(C'\\fR call return, or\n\\&\\f(CW\\*(C`EVBREAK_ALL\\*(C'\\fR, which will make all nested \\f(CW\\*(C`ev_run\\*(C'\\fR calls return.\n.Sp\nThis \\*(L\"break state\\*(R\" will be cleared on the next call to \\f(CW\\*(C`ev_run\\*(C'\\fR.\n.Sp\nIt is safe to call \\f(CW\\*(C`ev_break\\*(C'\\fR from outside any \\f(CW\\*(C`ev_run\\*(C'\\fR calls, too, in\nwhich case it will have no effect.\n.IP \"ev_ref (loop)\" 4\n.IX Item \"ev_ref (loop)\"\n.PD 0\n.IP \"ev_unref (loop)\" 4\n.IX Item \"ev_unref (loop)\"\n.PD\nRef/unref can be used to add or remove a reference count on the event\nloop: Every watcher keeps one reference, and as long as the reference\ncount is nonzero, \\f(CW\\*(C`ev_run\\*(C'\\fR will not return on its own.\n.Sp\nThis is useful when you have a watcher that you never intend to\nunregister, but that nevertheless should not keep \\f(CW\\*(C`ev_run\\*(C'\\fR from\nreturning. In such a case, call \\f(CW\\*(C`ev_unref\\*(C'\\fR after starting, and \\f(CW\\*(C`ev_ref\\*(C'\\fR\nbefore stopping it.\n.Sp\nAs an example, libev itself uses this for its internal signal pipe: It\nis not visible to the libev user and should not keep \\f(CW\\*(C`ev_run\\*(C'\\fR from\nexiting if no event watchers registered by it are active. It is also an\nexcellent way to do this for generic recurring timers or from within\nthird-party libraries. Just remember to \\fIunref after start\\fR and \\fIref\nbefore stop\\fR (but only if the watcher wasn't active before, or was active\nbefore, respectively. Note also that libev might stop watchers itself\n(e.g. non-repeating timers) in which case you have to \\f(CW\\*(C`ev_ref\\*(C'\\fR\nin the callback).\n.Sp\nExample: Create a signal watcher, but keep it from keeping \\f(CW\\*(C`ev_run\\*(C'\\fR\nrunning when nothing else is active.\n.Sp\n.Vb 4\n\\&   ev_signal exitsig;\n\\&   ev_signal_init (&exitsig, sig_cb, SIGINT);\n\\&   ev_signal_start (loop, &exitsig);\n\\&   ev_unref (loop);\n.Ve\n.Sp\nExample: For some weird reason, unregister the above signal handler again.\n.Sp\n.Vb 2\n\\&   ev_ref (loop);\n\\&   ev_signal_stop (loop, &exitsig);\n.Ve\n.IP \"ev_set_io_collect_interval (loop, ev_tstamp interval)\" 4\n.IX Item \"ev_set_io_collect_interval (loop, ev_tstamp interval)\"\n.PD 0\n.IP \"ev_set_timeout_collect_interval (loop, ev_tstamp interval)\" 4\n.IX Item \"ev_set_timeout_collect_interval (loop, ev_tstamp interval)\"\n.PD\nThese advanced functions influence the time that libev will spend waiting\nfor events. Both time intervals are by default \\f(CW0\\fR, meaning that libev\nwill try to invoke timer/periodic callbacks and I/O callbacks with minimum\nlatency.\n.Sp\nSetting these to a higher value (the \\f(CW\\*(C`interval\\*(C'\\fR \\fImust\\fR be >= \\f(CW0\\fR)\nallows libev to delay invocation of I/O and timer/periodic callbacks\nto increase efficiency of loop iterations (or to increase power-saving\nopportunities).\n.Sp\nThe idea is that sometimes your program runs just fast enough to handle\none (or very few) event(s) per loop iteration. While this makes the\nprogram responsive, it also wastes a lot of \\s-1CPU\\s0 time to poll for new\nevents, especially with backends like \\f(CW\\*(C`select ()\\*(C'\\fR which have a high\noverhead for the actual polling but can deliver many events at once.\n.Sp\nBy setting a higher \\fIio collect interval\\fR you allow libev to spend more\ntime collecting I/O events, so you can handle more events per iteration,\nat the cost of increasing latency. Timeouts (both \\f(CW\\*(C`ev_periodic\\*(C'\\fR and\n\\&\\f(CW\\*(C`ev_timer\\*(C'\\fR) will not be affected. Setting this to a non-null value will\nintroduce an additional \\f(CW\\*(C`ev_sleep ()\\*(C'\\fR call into most loop iterations. The\nsleep time ensures that libev will not poll for I/O events more often then\nonce per this interval, on average (as long as the host time resolution is\ngood enough).\n.Sp\nLikewise, by setting a higher \\fItimeout collect interval\\fR you allow libev\nto spend more time collecting timeouts, at the expense of increased\nlatency/jitter/inexactness (the watcher callback will be called\nlater). \\f(CW\\*(C`ev_io\\*(C'\\fR watchers will not be affected. Setting this to a non-null\nvalue will not introduce any overhead in libev.\n.Sp\nMany (busy) programs can usually benefit by setting the I/O collect\ninterval to a value near \\f(CW0.1\\fR or so, which is often enough for\ninteractive servers (of course not for games), likewise for timeouts. It\nusually doesn't make much sense to set it to a lower value than \\f(CW0.01\\fR,\nas this approaches the timing granularity of most systems. Note that if\nyou do transactions with the outside world and you can't increase the\nparallelity, then this setting will limit your transaction rate (if you\nneed to poll once per transaction and the I/O collect interval is 0.01,\nthen you can't do more than 100 transactions per second).\n.Sp\nSetting the \\fItimeout collect interval\\fR can improve the opportunity for\nsaving power, as the program will \\*(L\"bundle\\*(R\" timer callback invocations that\nare \\*(L\"near\\*(R\" in time together, by delaying some, thus reducing the number of\ntimes the process sleeps and wakes up again. Another useful technique to\nreduce iterations/wake\\-ups is to use \\f(CW\\*(C`ev_periodic\\*(C'\\fR watchers and make sure\nthey fire on, say, one-second boundaries only.\n.Sp\nExample: we only need 0.1s timeout granularity, and we wish not to poll\nmore often than 100 times per second:\n.Sp\n.Vb 2\n\\&   ev_set_timeout_collect_interval (EV_DEFAULT_UC_ 0.1);\n\\&   ev_set_io_collect_interval (EV_DEFAULT_UC_ 0.01);\n.Ve\n.IP \"ev_invoke_pending (loop)\" 4\n.IX Item \"ev_invoke_pending (loop)\"\nThis call will simply invoke all pending watchers while resetting their\npending state. Normally, \\f(CW\\*(C`ev_run\\*(C'\\fR does this automatically when required,\nbut when overriding the invoke callback this call comes handy. This\nfunction can be invoked from a watcher \\- this can be useful for example\nwhen you want to do some lengthy calculation and want to pass further\nevent handling to another thread (you still have to make sure only one\nthread executes within \\f(CW\\*(C`ev_invoke_pending\\*(C'\\fR or \\f(CW\\*(C`ev_run\\*(C'\\fR of course).\n.IP \"int ev_pending_count (loop)\" 4\n.IX Item \"int ev_pending_count (loop)\"\nReturns the number of pending watchers \\- zero indicates that no watchers\nare pending.\n.IP \"ev_set_invoke_pending_cb (loop, void (*invoke_pending_cb)(\\s-1EV_P\\s0))\" 4\n.IX Item \"ev_set_invoke_pending_cb (loop, void (*invoke_pending_cb)(EV_P))\"\nThis overrides the invoke pending functionality of the loop: Instead of\ninvoking all pending watchers when there are any, \\f(CW\\*(C`ev_run\\*(C'\\fR will call\nthis callback instead. This is useful, for example, when you want to\ninvoke the actual watchers inside another context (another thread etc.).\n.Sp\nIf you want to reset the callback, use \\f(CW\\*(C`ev_invoke_pending\\*(C'\\fR as new\ncallback.\n.IP \"ev_set_loop_release_cb (loop, void (*release)(\\s-1EV_P\\s0) throw (), void (*acquire)(\\s-1EV_P\\s0) throw ())\" 4\n.IX Item \"ev_set_loop_release_cb (loop, void (*release)(EV_P) throw (), void (*acquire)(EV_P) throw ())\"\nSometimes you want to share the same loop between multiple threads. This\ncan be done relatively simply by putting mutex_lock/unlock calls around\neach call to a libev function.\n.Sp\nHowever, \\f(CW\\*(C`ev_run\\*(C'\\fR can run an indefinite time, so it is not feasible\nto wait for it to return. One way around this is to wake up the event\nloop via \\f(CW\\*(C`ev_break\\*(C'\\fR and \\f(CW\\*(C`ev_async_send\\*(C'\\fR, another way is to set these\n\\&\\fIrelease\\fR and \\fIacquire\\fR callbacks on the loop.\n.Sp\nWhen set, then \\f(CW\\*(C`release\\*(C'\\fR will be called just before the thread is\nsuspended waiting for new events, and \\f(CW\\*(C`acquire\\*(C'\\fR is called just\nafterwards.\n.Sp\nIdeally, \\f(CW\\*(C`release\\*(C'\\fR will just call your mutex_unlock function, and\n\\&\\f(CW\\*(C`acquire\\*(C'\\fR will just call the mutex_lock function again.\n.Sp\nWhile event loop modifications are allowed between invocations of\n\\&\\f(CW\\*(C`release\\*(C'\\fR and \\f(CW\\*(C`acquire\\*(C'\\fR (that's their only purpose after all), no\nmodifications done will affect the event loop, i.e. adding watchers will\nhave no effect on the set of file descriptors being watched, or the time\nwaited. Use an \\f(CW\\*(C`ev_async\\*(C'\\fR watcher to wake up \\f(CW\\*(C`ev_run\\*(C'\\fR when you want it\nto take note of any changes you made.\n.Sp\nIn theory, threads executing \\f(CW\\*(C`ev_run\\*(C'\\fR will be async-cancel safe between\ninvocations of \\f(CW\\*(C`release\\*(C'\\fR and \\f(CW\\*(C`acquire\\*(C'\\fR.\n.Sp\nSee also the locking example in the \\f(CW\\*(C`THREADS\\*(C'\\fR section later in this\ndocument.\n.IP \"ev_set_userdata (loop, void *data)\" 4\n.IX Item \"ev_set_userdata (loop, void *data)\"\n.PD 0\n.IP \"void *ev_userdata (loop)\" 4\n.IX Item \"void *ev_userdata (loop)\"\n.PD\nSet and retrieve a single \\f(CW\\*(C`void *\\*(C'\\fR associated with a loop. When\n\\&\\f(CW\\*(C`ev_set_userdata\\*(C'\\fR has never been called, then \\f(CW\\*(C`ev_userdata\\*(C'\\fR returns\n\\&\\f(CW0\\fR.\n.Sp\nThese two functions can be used to associate arbitrary data with a loop,\nand are intended solely for the \\f(CW\\*(C`invoke_pending_cb\\*(C'\\fR, \\f(CW\\*(C`release\\*(C'\\fR and\n\\&\\f(CW\\*(C`acquire\\*(C'\\fR callbacks described above, but of course can be (ab\\-)used for\nany other purpose as well.\n.IP \"ev_verify (loop)\" 4\n.IX Item \"ev_verify (loop)\"\nThis function only does something when \\f(CW\\*(C`EV_VERIFY\\*(C'\\fR support has been\ncompiled in, which is the default for non-minimal builds. It tries to go\nthrough all internal structures and checks them for validity. If anything\nis found to be inconsistent, it will print an error message to standard\nerror and call \\f(CW\\*(C`abort ()\\*(C'\\fR.\n.Sp\nThis can be used to catch bugs inside libev itself: under normal\ncircumstances, this function will never abort as of course libev keeps its\ndata structures consistent.\n.SH \"ANATOMY OF A WATCHER\"\n.IX Header \"ANATOMY OF A WATCHER\"\nIn the following description, uppercase \\f(CW\\*(C`TYPE\\*(C'\\fR in names stands for the\nwatcher type, e.g. \\f(CW\\*(C`ev_TYPE_start\\*(C'\\fR can mean \\f(CW\\*(C`ev_timer_start\\*(C'\\fR for timer\nwatchers and \\f(CW\\*(C`ev_io_start\\*(C'\\fR for I/O watchers.\n.PP\nA watcher is an opaque structure that you allocate and register to record\nyour interest in some event. To make a concrete example, imagine you want\nto wait for \\s-1STDIN\\s0 to become readable, you would create an \\f(CW\\*(C`ev_io\\*(C'\\fR watcher\nfor that:\n.PP\n.Vb 5\n\\&   static void my_cb (struct ev_loop *loop, ev_io *w, int revents)\n\\&   {\n\\&     ev_io_stop (w);\n\\&     ev_break (loop, EVBREAK_ALL);\n\\&   }\n\\&\n\\&   struct ev_loop *loop = ev_default_loop (0);\n\\&\n\\&   ev_io stdin_watcher;\n\\&\n\\&   ev_init (&stdin_watcher, my_cb);\n\\&   ev_io_set (&stdin_watcher, STDIN_FILENO, EV_READ);\n\\&   ev_io_start (loop, &stdin_watcher);\n\\&\n\\&   ev_run (loop, 0);\n.Ve\n.PP\nAs you can see, you are responsible for allocating the memory for your\nwatcher structures (and it is \\fIusually\\fR a bad idea to do this on the\nstack).\n.PP\nEach watcher has an associated watcher structure (called \\f(CW\\*(C`struct ev_TYPE\\*(C'\\fR\nor simply \\f(CW\\*(C`ev_TYPE\\*(C'\\fR, as typedefs are provided for all watcher structs).\n.PP\nEach watcher structure must be initialised by a call to \\f(CW\\*(C`ev_init (watcher\n*, callback)\\*(C'\\fR, which expects a callback to be provided. This callback is\ninvoked each time the event occurs (or, in the case of I/O watchers, each\ntime the event loop detects that the file descriptor given is readable\nand/or writable).\n.PP\nEach watcher type further has its own \\f(CW\\*(C`ev_TYPE_set (watcher *, ...)\\*(C'\\fR\nmacro to configure it, with arguments specific to the watcher type. There\nis also a macro to combine initialisation and setting in one call: \\f(CW\\*(C`ev_TYPE_init (watcher *, callback, ...)\\*(C'\\fR.\n.PP\nTo make the watcher actually watch out for events, you have to start it\nwith a watcher-specific start function (\\f(CW\\*(C`ev_TYPE_start (loop, watcher\n*)\\*(C'\\fR), and you can stop watching for events at any time by calling the\ncorresponding stop function (\\f(CW\\*(C`ev_TYPE_stop (loop, watcher *)\\*(C'\\fR.\n.PP\nAs long as your watcher is active (has been started but not stopped) you\nmust not touch the values stored in it. Most specifically you must never\nreinitialise it or call its \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR macro.\n.PP\nEach and every callback receives the event loop pointer as first, the\nregistered watcher structure as second, and a bitset of received events as\nthird argument.\n.PP\nThe received events usually include a single bit per event type received\n(you can receive multiple events at the same time). The possible bit masks\nare:\n.ie n .IP \"\"\"EV_READ\"\"\" 4\n.el .IP \"\\f(CWEV_READ\\fR\" 4\n.IX Item \"EV_READ\"\n.PD 0\n.ie n .IP \"\"\"EV_WRITE\"\"\" 4\n.el .IP \"\\f(CWEV_WRITE\\fR\" 4\n.IX Item \"EV_WRITE\"\n.PD\nThe file descriptor in the \\f(CW\\*(C`ev_io\\*(C'\\fR watcher has become readable and/or\nwritable.\n.ie n .IP \"\"\"EV_TIMER\"\"\" 4\n.el .IP \"\\f(CWEV_TIMER\\fR\" 4\n.IX Item \"EV_TIMER\"\nThe \\f(CW\\*(C`ev_timer\\*(C'\\fR watcher has timed out.\n.ie n .IP \"\"\"EV_PERIODIC\"\"\" 4\n.el .IP \"\\f(CWEV_PERIODIC\\fR\" 4\n.IX Item \"EV_PERIODIC\"\nThe \\f(CW\\*(C`ev_periodic\\*(C'\\fR watcher has timed out.\n.ie n .IP \"\"\"EV_SIGNAL\"\"\" 4\n.el .IP \"\\f(CWEV_SIGNAL\\fR\" 4\n.IX Item \"EV_SIGNAL\"\nThe signal specified in the \\f(CW\\*(C`ev_signal\\*(C'\\fR watcher has been received by a thread.\n.ie n .IP \"\"\"EV_CHILD\"\"\" 4\n.el .IP \"\\f(CWEV_CHILD\\fR\" 4\n.IX Item \"EV_CHILD\"\nThe pid specified in the \\f(CW\\*(C`ev_child\\*(C'\\fR watcher has received a status change.\n.ie n .IP \"\"\"EV_STAT\"\"\" 4\n.el .IP \"\\f(CWEV_STAT\\fR\" 4\n.IX Item \"EV_STAT\"\nThe path specified in the \\f(CW\\*(C`ev_stat\\*(C'\\fR watcher changed its attributes somehow.\n.ie n .IP \"\"\"EV_IDLE\"\"\" 4\n.el .IP \"\\f(CWEV_IDLE\\fR\" 4\n.IX Item \"EV_IDLE\"\nThe \\f(CW\\*(C`ev_idle\\*(C'\\fR watcher has determined that you have nothing better to do.\n.ie n .IP \"\"\"EV_PREPARE\"\"\" 4\n.el .IP \"\\f(CWEV_PREPARE\\fR\" 4\n.IX Item \"EV_PREPARE\"\n.PD 0\n.ie n .IP \"\"\"EV_CHECK\"\"\" 4\n.el .IP \"\\f(CWEV_CHECK\\fR\" 4\n.IX Item \"EV_CHECK\"\n.PD\nAll \\f(CW\\*(C`ev_prepare\\*(C'\\fR watchers are invoked just \\fIbefore\\fR \\f(CW\\*(C`ev_run\\*(C'\\fR starts to\ngather new events, and all \\f(CW\\*(C`ev_check\\*(C'\\fR watchers are queued (not invoked)\njust after \\f(CW\\*(C`ev_run\\*(C'\\fR has gathered them, but before it queues any callbacks\nfor any received events. That means \\f(CW\\*(C`ev_prepare\\*(C'\\fR watchers are the last\nwatchers invoked before the event loop sleeps or polls for new events, and\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watchers will be invoked before any other watchers of the same\nor lower priority within an event loop iteration.\n.Sp\nCallbacks of both watcher types can start and stop as many watchers as\nthey want, and all of them will be taken into account (for example, a\n\\&\\f(CW\\*(C`ev_prepare\\*(C'\\fR watcher might start an idle watcher to keep \\f(CW\\*(C`ev_run\\*(C'\\fR from\nblocking).\n.ie n .IP \"\"\"EV_EMBED\"\"\" 4\n.el .IP \"\\f(CWEV_EMBED\\fR\" 4\n.IX Item \"EV_EMBED\"\nThe embedded event loop specified in the \\f(CW\\*(C`ev_embed\\*(C'\\fR watcher needs attention.\n.ie n .IP \"\"\"EV_FORK\"\"\" 4\n.el .IP \"\\f(CWEV_FORK\\fR\" 4\n.IX Item \"EV_FORK\"\nThe event loop has been resumed in the child process after fork (see\n\\&\\f(CW\\*(C`ev_fork\\*(C'\\fR).\n.ie n .IP \"\"\"EV_CLEANUP\"\"\" 4\n.el .IP \"\\f(CWEV_CLEANUP\\fR\" 4\n.IX Item \"EV_CLEANUP\"\nThe event loop is about to be destroyed (see \\f(CW\\*(C`ev_cleanup\\*(C'\\fR).\n.ie n .IP \"\"\"EV_ASYNC\"\"\" 4\n.el .IP \"\\f(CWEV_ASYNC\\fR\" 4\n.IX Item \"EV_ASYNC\"\nThe given async watcher has been asynchronously notified (see \\f(CW\\*(C`ev_async\\*(C'\\fR).\n.ie n .IP \"\"\"EV_CUSTOM\"\"\" 4\n.el .IP \"\\f(CWEV_CUSTOM\\fR\" 4\n.IX Item \"EV_CUSTOM\"\nNot ever sent (or otherwise used) by libev itself, but can be freely used\nby libev users to signal watchers (e.g. via \\f(CW\\*(C`ev_feed_event\\*(C'\\fR).\n.ie n .IP \"\"\"EV_ERROR\"\"\" 4\n.el .IP \"\\f(CWEV_ERROR\\fR\" 4\n.IX Item \"EV_ERROR\"\nAn unspecified error has occurred, the watcher has been stopped. This might\nhappen because the watcher could not be properly started because libev\nran out of memory, a file descriptor was found to be closed or any other\nproblem. Libev considers these application bugs.\n.Sp\nYou best act on it by reporting the problem and somehow coping with the\nwatcher being stopped. Note that well-written programs should not receive\nan error ever, so when your watcher receives it, this usually indicates a\nbug in your program.\n.Sp\nLibev will usually signal a few \\*(L\"dummy\\*(R\" events together with an error, for\nexample it might indicate that a fd is readable or writable, and if your\ncallbacks is well-written it can just attempt the operation and cope with\nthe error from \\fIread()\\fR or \\fIwrite()\\fR. This will not work in multi-threaded\nprograms, though, as the fd could already be closed and reused for another\nthing, so beware.\n.SS \"\\s-1GENERIC\\s0 \\s-1WATCHER\\s0 \\s-1FUNCTIONS\\s0\"\n.IX Subsection \"GENERIC WATCHER FUNCTIONS\"\n.ie n .IP \"\"\"ev_init\"\" (ev_TYPE *watcher, callback)\" 4\n.el .IP \"\\f(CWev_init\\fR (ev_TYPE *watcher, callback)\" 4\n.IX Item \"ev_init (ev_TYPE *watcher, callback)\"\nThis macro initialises the generic portion of a watcher. The contents\nof the watcher object can be arbitrary (so \\f(CW\\*(C`malloc\\*(C'\\fR will do). Only\nthe generic parts of the watcher are initialised, you \\fIneed\\fR to call\nthe type-specific \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR macro afterwards to initialise the\ntype-specific parts. For each type there is also a \\f(CW\\*(C`ev_TYPE_init\\*(C'\\fR macro\nwhich rolls both calls into one.\n.Sp\nYou can reinitialise a watcher at any time as long as it has been stopped\n(or never started) and there are no pending events outstanding.\n.Sp\nThe callback is always of type \\f(CW\\*(C`void (*)(struct ev_loop *loop, ev_TYPE *watcher,\nint revents)\\*(C'\\fR.\n.Sp\nExample: Initialise an \\f(CW\\*(C`ev_io\\*(C'\\fR watcher in two steps.\n.Sp\n.Vb 3\n\\&   ev_io w;\n\\&   ev_init (&w, my_cb);\n\\&   ev_io_set (&w, STDIN_FILENO, EV_READ);\n.Ve\n.ie n .IP \"\"\"ev_TYPE_set\"\" (ev_TYPE *watcher, [args])\" 4\n.el .IP \"\\f(CWev_TYPE_set\\fR (ev_TYPE *watcher, [args])\" 4\n.IX Item \"ev_TYPE_set (ev_TYPE *watcher, [args])\"\nThis macro initialises the type-specific parts of a watcher. You need to\ncall \\f(CW\\*(C`ev_init\\*(C'\\fR at least once before you call this macro, but you can\ncall \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR any number of times. You must not, however, call this\nmacro on a watcher that is active (it can be pending, however, which is a\ndifference to the \\f(CW\\*(C`ev_init\\*(C'\\fR macro).\n.Sp\nAlthough some watcher types do not have type-specific arguments\n(e.g. \\f(CW\\*(C`ev_prepare\\*(C'\\fR) you still need to call its \\f(CW\\*(C`set\\*(C'\\fR macro.\n.Sp\nSee \\f(CW\\*(C`ev_init\\*(C'\\fR, above, for an example.\n.ie n .IP \"\"\"ev_TYPE_init\"\" (ev_TYPE *watcher, callback, [args])\" 4\n.el .IP \"\\f(CWev_TYPE_init\\fR (ev_TYPE *watcher, callback, [args])\" 4\n.IX Item \"ev_TYPE_init (ev_TYPE *watcher, callback, [args])\"\nThis convenience macro rolls both \\f(CW\\*(C`ev_init\\*(C'\\fR and \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR macro\ncalls into a single call. This is the most convenient method to initialise\na watcher. The same limitations apply, of course.\n.Sp\nExample: Initialise and set an \\f(CW\\*(C`ev_io\\*(C'\\fR watcher in one step.\n.Sp\n.Vb 1\n\\&   ev_io_init (&w, my_cb, STDIN_FILENO, EV_READ);\n.Ve\n.ie n .IP \"\"\"ev_TYPE_start\"\" (loop, ev_TYPE *watcher)\" 4\n.el .IP \"\\f(CWev_TYPE_start\\fR (loop, ev_TYPE *watcher)\" 4\n.IX Item \"ev_TYPE_start (loop, ev_TYPE *watcher)\"\nStarts (activates) the given watcher. Only active watchers will receive\nevents. If the watcher is already active nothing will happen.\n.Sp\nExample: Start the \\f(CW\\*(C`ev_io\\*(C'\\fR watcher that is being abused as example in this\nwhole section.\n.Sp\n.Vb 1\n\\&   ev_io_start (EV_DEFAULT_UC, &w);\n.Ve\n.ie n .IP \"\"\"ev_TYPE_stop\"\" (loop, ev_TYPE *watcher)\" 4\n.el .IP \"\\f(CWev_TYPE_stop\\fR (loop, ev_TYPE *watcher)\" 4\n.IX Item \"ev_TYPE_stop (loop, ev_TYPE *watcher)\"\nStops the given watcher if active, and clears the pending status (whether\nthe watcher was active or not).\n.Sp\nIt is possible that stopped watchers are pending \\- for example,\nnon-repeating timers are being stopped when they become pending \\- but\ncalling \\f(CW\\*(C`ev_TYPE_stop\\*(C'\\fR ensures that the watcher is neither active nor\npending. If you want to free or reuse the memory used by the watcher it is\ntherefore a good idea to always call its \\f(CW\\*(C`ev_TYPE_stop\\*(C'\\fR function.\n.IP \"bool ev_is_active (ev_TYPE *watcher)\" 4\n.IX Item \"bool ev_is_active (ev_TYPE *watcher)\"\nReturns a true value iff the watcher is active (i.e. it has been started\nand not yet been stopped). As long as a watcher is active you must not modify\nit.\n.IP \"bool ev_is_pending (ev_TYPE *watcher)\" 4\n.IX Item \"bool ev_is_pending (ev_TYPE *watcher)\"\nReturns a true value iff the watcher is pending, (i.e. it has outstanding\nevents but its callback has not yet been invoked). As long as a watcher\nis pending (but not active) you must not call an init function on it (but\n\\&\\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR is safe), you must not change its priority, and you must\nmake sure the watcher is available to libev (e.g. you cannot \\f(CW\\*(C`free ()\\*(C'\\fR\nit).\n.IP \"callback ev_cb (ev_TYPE *watcher)\" 4\n.IX Item \"callback ev_cb (ev_TYPE *watcher)\"\nReturns the callback currently set on the watcher.\n.IP \"ev_set_cb (ev_TYPE *watcher, callback)\" 4\n.IX Item \"ev_set_cb (ev_TYPE *watcher, callback)\"\nChange the callback. You can change the callback at virtually any time\n(modulo threads).\n.IP \"ev_set_priority (ev_TYPE *watcher, int priority)\" 4\n.IX Item \"ev_set_priority (ev_TYPE *watcher, int priority)\"\n.PD 0\n.IP \"int ev_priority (ev_TYPE *watcher)\" 4\n.IX Item \"int ev_priority (ev_TYPE *watcher)\"\n.PD\nSet and query the priority of the watcher. The priority is a small\ninteger between \\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR (default: \\f(CW2\\fR) and \\f(CW\\*(C`EV_MINPRI\\*(C'\\fR\n(default: \\f(CW\\*(C`\\-2\\*(C'\\fR). Pending watchers with higher priority will be invoked\nbefore watchers with lower priority, but priority will not keep watchers\nfrom being executed (except for \\f(CW\\*(C`ev_idle\\*(C'\\fR watchers).\n.Sp\nIf you need to suppress invocation when higher priority events are pending\nyou need to look at \\f(CW\\*(C`ev_idle\\*(C'\\fR watchers, which provide this functionality.\n.Sp\nYou \\fImust not\\fR change the priority of a watcher as long as it is active or\npending.\n.Sp\nSetting a priority outside the range of \\f(CW\\*(C`EV_MINPRI\\*(C'\\fR to \\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR is\nfine, as long as you do not mind that the priority value you query might\nor might not have been clamped to the valid range.\n.Sp\nThe default priority used by watchers when no priority has been set is\nalways \\f(CW0\\fR, which is supposed to not be too high and not be too low :).\n.Sp\nSee \\*(L\"\\s-1WATCHER\\s0 \\s-1PRIORITY\\s0 \\s-1MODELS\\s0\\*(R\", below, for a more thorough treatment of\npriorities.\n.IP \"ev_invoke (loop, ev_TYPE *watcher, int revents)\" 4\n.IX Item \"ev_invoke (loop, ev_TYPE *watcher, int revents)\"\nInvoke the \\f(CW\\*(C`watcher\\*(C'\\fR with the given \\f(CW\\*(C`loop\\*(C'\\fR and \\f(CW\\*(C`revents\\*(C'\\fR. Neither\n\\&\\f(CW\\*(C`loop\\*(C'\\fR nor \\f(CW\\*(C`revents\\*(C'\\fR need to be valid as long as the watcher callback\ncan deal with that fact, as both are simply passed through to the\ncallback.\n.IP \"int ev_clear_pending (loop, ev_TYPE *watcher)\" 4\n.IX Item \"int ev_clear_pending (loop, ev_TYPE *watcher)\"\nIf the watcher is pending, this function clears its pending status and\nreturns its \\f(CW\\*(C`revents\\*(C'\\fR bitset (as if its callback was invoked). If the\nwatcher isn't pending it does nothing and returns \\f(CW0\\fR.\n.Sp\nSometimes it can be useful to \\*(L\"poll\\*(R\" a watcher instead of waiting for its\ncallback to be invoked, which can be accomplished with this function.\n.IP \"ev_feed_event (loop, ev_TYPE *watcher, int revents)\" 4\n.IX Item \"ev_feed_event (loop, ev_TYPE *watcher, int revents)\"\nFeeds the given event set into the event loop, as if the specified event\nhad happened for the specified watcher (which must be a pointer to an\ninitialised but not necessarily started event watcher). Obviously you must\nnot free the watcher as long as it has pending events.\n.Sp\nStopping the watcher, letting libev invoke it, or calling\n\\&\\f(CW\\*(C`ev_clear_pending\\*(C'\\fR will clear the pending event, even if the watcher was\nnot started in the first place.\n.Sp\nSee also \\f(CW\\*(C`ev_feed_fd_event\\*(C'\\fR and \\f(CW\\*(C`ev_feed_signal_event\\*(C'\\fR for related\nfunctions that do not need a watcher.\n.PP\nSee also the \\*(L\"\\s-1ASSOCIATING\\s0 \\s-1CUSTOM\\s0 \\s-1DATA\\s0 \\s-1WITH\\s0 A \\s-1WATCHER\\s0\\*(R\" and \\*(L\"\\s-1BUILDING\\s0 \\s-1YOUR\\s0\n\\&\\s-1OWN\\s0 \\s-1COMPOSITE\\s0 \\s-1WATCHERS\\s0\\*(R\" idioms.\n.SS \"\\s-1WATCHER\\s0 \\s-1STATES\\s0\"\n.IX Subsection \"WATCHER STATES\"\nThere are various watcher states mentioned throughout this manual \\-\nactive, pending and so on. In this section these states and the rules to\ntransition between them will be described in more detail \\- and while these\nrules might look complicated, they usually do \\*(L\"the right thing\\*(R\".\n.IP \"initialised\" 4\n.IX Item \"initialised\"\nBefore a watcher can be registered with the event loop it has to be\ninitialised. This can be done with a call to \\f(CW\\*(C`ev_TYPE_init\\*(C'\\fR, or calls to\n\\&\\f(CW\\*(C`ev_init\\*(C'\\fR followed by the watcher-specific \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR function.\n.Sp\nIn this state it is simply some block of memory that is suitable for\nuse in an event loop. It can be moved around, freed, reused etc. at\nwill \\- as long as you either keep the memory contents intact, or call\n\\&\\f(CW\\*(C`ev_TYPE_init\\*(C'\\fR again.\n.IP \"started/running/active\" 4\n.IX Item \"started/running/active\"\nOnce a watcher has been started with a call to \\f(CW\\*(C`ev_TYPE_start\\*(C'\\fR it becomes\nproperty of the event loop, and is actively waiting for events. While in\nthis state it cannot be accessed (except in a few documented ways), moved,\nfreed or anything else \\- the only legal thing is to keep a pointer to it,\nand call libev functions on it that are documented to work on active watchers.\n.IP \"pending\" 4\n.IX Item \"pending\"\nIf a watcher is active and libev determines that an event it is interested\nin has occurred (such as a timer expiring), it will become pending. It will\nstay in this pending state until either it is stopped or its callback is\nabout to be invoked, so it is not normally pending inside the watcher\ncallback.\n.Sp\nThe watcher might or might not be active while it is pending (for example,\nan expired non-repeating timer can be pending but no longer active). If it\nis stopped, it can be freely accessed (e.g. by calling \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR),\nbut it is still property of the event loop at this time, so cannot be\nmoved, freed or reused. And if it is active the rules described in the\nprevious item still apply.\n.Sp\nIt is also possible to feed an event on a watcher that is not active (e.g.\nvia \\f(CW\\*(C`ev_feed_event\\*(C'\\fR), in which case it becomes pending without being\nactive.\n.IP \"stopped\" 4\n.IX Item \"stopped\"\nA watcher can be stopped implicitly by libev (in which case it might still\nbe pending), or explicitly by calling its \\f(CW\\*(C`ev_TYPE_stop\\*(C'\\fR function. The\nlatter will clear any pending state the watcher might be in, regardless\nof whether it was active or not, so stopping a watcher explicitly before\nfreeing it is often a good idea.\n.Sp\nWhile stopped (and not pending) the watcher is essentially in the\ninitialised state, that is, it can be reused, moved, modified in any way\nyou wish (but when you trash the memory block, you need to \\f(CW\\*(C`ev_TYPE_init\\*(C'\\fR\nit again).\n.SS \"\\s-1WATCHER\\s0 \\s-1PRIORITY\\s0 \\s-1MODELS\\s0\"\n.IX Subsection \"WATCHER PRIORITY MODELS\"\nMany event loops support \\fIwatcher priorities\\fR, which are usually small\nintegers that influence the ordering of event callback invocation\nbetween watchers in some way, all else being equal.\n.PP\nIn libev, Watcher priorities can be set using \\f(CW\\*(C`ev_set_priority\\*(C'\\fR. See its\ndescription for the more technical details such as the actual priority\nrange.\n.PP\nThere are two common ways how these these priorities are being interpreted\nby event loops:\n.PP\nIn the more common lock-out model, higher priorities \\*(L\"lock out\\*(R\" invocation\nof lower priority watchers, which means as long as higher priority\nwatchers receive events, lower priority watchers are not being invoked.\n.PP\nThe less common only-for-ordering model uses priorities solely to order\ncallback invocation within a single event loop iteration: Higher priority\nwatchers are invoked before lower priority ones, but they all get invoked\nbefore polling for new events.\n.PP\nLibev uses the second (only-for-ordering) model for all its watchers\nexcept for idle watchers (which use the lock-out model).\n.PP\nThe rationale behind this is that implementing the lock-out model for\nwatchers is not well supported by most kernel interfaces, and most event\nlibraries will just poll for the same events again and again as long as\ntheir callbacks have not been executed, which is very inefficient in the\ncommon case of one high-priority watcher locking out a mass of lower\npriority ones.\n.PP\nStatic (ordering) priorities are most useful when you have two or more\nwatchers handling the same resource: a typical usage example is having an\n\\&\\f(CW\\*(C`ev_io\\*(C'\\fR watcher to receive data, and an associated \\f(CW\\*(C`ev_timer\\*(C'\\fR to handle\ntimeouts. Under load, data might be received while the program handles\nother jobs, but since timers normally get invoked first, the timeout\nhandler will be executed before checking for data. In that case, giving\nthe timer a lower priority than the I/O watcher ensures that I/O will be\nhandled first even under adverse conditions (which is usually, but not\nalways, what you want).\n.PP\nSince idle watchers use the \\*(L\"lock-out\\*(R\" model, meaning that idle watchers\nwill only be executed when no same or higher priority watchers have\nreceived events, they can be used to implement the \\*(L\"lock-out\\*(R\" model when\nrequired.\n.PP\nFor example, to emulate how many other event libraries handle priorities,\nyou can associate an \\f(CW\\*(C`ev_idle\\*(C'\\fR watcher to each such watcher, and in\nthe normal watcher callback, you just start the idle watcher. The real\nprocessing is done in the idle watcher callback. This causes libev to\ncontinuously poll and process kernel event data for the watcher, but when\nthe lock-out case is known to be rare (which in turn is rare :), this is\nworkable.\n.PP\nUsually, however, the lock-out model implemented that way will perform\nmiserably under the type of load it was designed to handle. In that case,\nit might be preferable to stop the real watcher before starting the\nidle watcher, so the kernel will not have to process the event in case\nthe actual processing will be delayed for considerable time.\n.PP\nHere is an example of an I/O watcher that should run at a strictly lower\npriority than the default, and which should only process data when no\nother events are pending:\n.PP\n.Vb 2\n\\&   ev_idle idle; // actual processing watcher\n\\&   ev_io io;     // actual event watcher\n\\&\n\\&   static void\n\\&   io_cb (EV_P_ ev_io *w, int revents)\n\\&   {\n\\&     // stop the I/O watcher, we received the event, but\n\\&     // are not yet ready to handle it.\n\\&     ev_io_stop (EV_A_ w);\n\\&\n\\&     // start the idle watcher to handle the actual event.\n\\&     // it will not be executed as long as other watchers\n\\&     // with the default priority are receiving events.\n\\&     ev_idle_start (EV_A_ &idle);\n\\&   }\n\\&\n\\&   static void\n\\&   idle_cb (EV_P_ ev_idle *w, int revents)\n\\&   {\n\\&     // actual processing\n\\&     read (STDIN_FILENO, ...);\n\\&\n\\&     // have to start the I/O watcher again, as\n\\&     // we have handled the event\n\\&     ev_io_start (EV_P_ &io);\n\\&   }\n\\&\n\\&   // initialisation\n\\&   ev_idle_init (&idle, idle_cb);\n\\&   ev_io_init (&io, io_cb, STDIN_FILENO, EV_READ);\n\\&   ev_io_start (EV_DEFAULT_ &io);\n.Ve\n.PP\nIn the \\*(L\"real\\*(R\" world, it might also be beneficial to start a timer, so that\nlow-priority connections can not be locked out forever under load. This\nenables your program to keep a lower latency for important connections\nduring short periods of high load, while not completely locking out less\nimportant ones.\n.SH \"WATCHER TYPES\"\n.IX Header \"WATCHER TYPES\"\nThis section describes each watcher in detail, but will not repeat\ninformation given in the last section. Any initialisation/set macros,\nfunctions and members specific to the watcher type are explained.\n.PP\nMembers are additionally marked with either \\fI[read\\-only]\\fR, meaning that,\nwhile the watcher is active, you can look at the member and expect some\nsensible content, but you must not modify it (you can modify it while the\nwatcher is stopped to your hearts content), or \\fI[read\\-write]\\fR, which\nmeans you can expect it to have some sensible content while the watcher\nis active, but you can also modify it. Modifying it may not do something\nsensible or take immediate effect (or do anything at all), but libev will\nnot crash or malfunction in any way.\n.ie n .SS \"\"\"ev_io\"\" \\- is this file descriptor readable or writable?\"\n.el .SS \"\\f(CWev_io\\fP \\- is this file descriptor readable or writable?\"\n.IX Subsection \"ev_io - is this file descriptor readable or writable?\"\nI/O watchers check whether a file descriptor is readable or writable\nin each iteration of the event loop, or, more precisely, when reading\nwould not block the process and writing would at least be able to write\nsome data. This behaviour is called level-triggering because you keep\nreceiving events as long as the condition persists. Remember you can stop\nthe watcher if you don't want to act on the event and neither want to\nreceive future events.\n.PP\nIn general you can register as many read and/or write event watchers per\nfd as you want (as long as you don't confuse yourself). Setting all file\ndescriptors to non-blocking mode is also usually a good idea (but not\nrequired if you know what you are doing).\n.PP\nAnother thing you have to watch out for is that it is quite easy to\nreceive \\*(L\"spurious\\*(R\" readiness notifications, that is, your callback might\nbe called with \\f(CW\\*(C`EV_READ\\*(C'\\fR but a subsequent \\f(CW\\*(C`read\\*(C'\\fR(2) will actually block\nbecause there is no data. It is very easy to get into this situation even\nwith a relatively standard program structure. Thus it is best to always\nuse non-blocking I/O: An extra \\f(CW\\*(C`read\\*(C'\\fR(2) returning \\f(CW\\*(C`EAGAIN\\*(C'\\fR is far\npreferable to a program hanging until some data arrives.\n.PP\nIf you cannot run the fd in non-blocking mode (for example you should\nnot play around with an Xlib connection), then you have to separately\nre-test whether a file descriptor is really ready with a known-to-be good\ninterface such as poll (fortunately in the case of Xlib, it already does\nthis on its own, so its quite safe to use). Some people additionally\nuse \\f(CW\\*(C`SIGALRM\\*(C'\\fR and an interval timer, just to be sure you won't block\nindefinitely.\n.PP\nBut really, best use non-blocking mode.\n.PP\n\\fIThe special problem of disappearing file descriptors\\fR\n.IX Subsection \"The special problem of disappearing file descriptors\"\n.PP\nSome backends (e.g. kqueue, epoll) need to be told about closing a file\ndescriptor (either due to calling \\f(CW\\*(C`close\\*(C'\\fR explicitly or any other means,\nsuch as \\f(CW\\*(C`dup2\\*(C'\\fR). The reason is that you register interest in some file\ndescriptor, but when it goes away, the operating system will silently drop\nthis interest. If another file descriptor with the same number then is\nregistered with libev, there is no efficient way to see that this is, in\nfact, a different file descriptor.\n.PP\nTo avoid having to explicitly tell libev about such cases, libev follows\nthe following policy:  Each time \\f(CW\\*(C`ev_io_set\\*(C'\\fR is being called, libev\nwill assume that this is potentially a new file descriptor, otherwise\nit is assumed that the file descriptor stays the same. That means that\nyou \\fIhave\\fR to call \\f(CW\\*(C`ev_io_set\\*(C'\\fR (or \\f(CW\\*(C`ev_io_init\\*(C'\\fR) when you change the\ndescriptor even if the file descriptor number itself did not change.\n.PP\nThis is how one would do it normally anyway, the important point is that\nthe libev application should not optimise around libev but should leave\noptimisations to libev.\n.PP\n\\fIThe special problem of dup'ed file descriptors\\fR\n.IX Subsection \"The special problem of dup'ed file descriptors\"\n.PP\nSome backends (e.g. epoll), cannot register events for file descriptors,\nbut only events for the underlying file descriptions. That means when you\nhave \\f(CW\\*(C`dup ()\\*(C'\\fR'ed file descriptors or weirder constellations, and register\nevents for them, only one file descriptor might actually receive events.\n.PP\nThere is no workaround possible except not registering events\nfor potentially \\f(CW\\*(C`dup ()\\*(C'\\fR'ed file descriptors, or to resort to\n\\&\\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR or \\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR.\n.PP\n\\fIThe special problem of files\\fR\n.IX Subsection \"The special problem of files\"\n.PP\nMany people try to use \\f(CW\\*(C`select\\*(C'\\fR (or libev) on file descriptors\nrepresenting files, and expect it to become ready when their program\ndoesn't block on disk accesses (which can take a long time on their own).\n.PP\nHowever, this cannot ever work in the \\*(L\"expected\\*(R\" way \\- you get a readiness\nnotification as soon as the kernel knows whether and how much data is\nthere, and in the case of open files, that's always the case, so you\nalways get a readiness notification instantly, and your read (or possibly\nwrite) will still block on the disk I/O.\n.PP\nAnother way to view it is that in the case of sockets, pipes, character\ndevices and so on, there is another party (the sender) that delivers data\non its own, but in the case of files, there is no such thing: the disk\nwill not send data on its own, simply because it doesn't know what you\nwish to read \\- you would first have to request some data.\n.PP\nSince files are typically not-so-well supported by advanced notification\nmechanism, libev tries hard to emulate \\s-1POSIX\\s0 behaviour with respect\nto files, even though you should not use it. The reason for this is\nconvenience: sometimes you want to watch \\s-1STDIN\\s0 or \\s-1STDOUT\\s0, which is\nusually a tty, often a pipe, but also sometimes files or special devices\n(for example, \\f(CW\\*(C`epoll\\*(C'\\fR on Linux works with \\fI/dev/random\\fR but not with\n\\&\\fI/dev/urandom\\fR), and even though the file might better be served with\nasynchronous I/O instead of with non-blocking I/O, it is still useful when\nit \\*(L\"just works\\*(R\" instead of freezing.\n.PP\nSo avoid file descriptors pointing to files when you know it (e.g. use\nlibeio), but use them when it is convenient, e.g. for \\s-1STDIN/STDOUT\\s0, or\nwhen you rarely read from a file instead of from a socket, and want to\nreuse the same code path.\n.PP\n\\fIThe special problem of fork\\fR\n.IX Subsection \"The special problem of fork\"\n.PP\nSome backends (epoll, kqueue) do not support \\f(CW\\*(C`fork ()\\*(C'\\fR at all or exhibit\nuseless behaviour. Libev fully supports fork, but needs to be told about\nit in the child if you want to continue to use it in the child.\n.PP\nTo support fork in your child processes, you have to call \\f(CW\\*(C`ev_loop_fork\n()\\*(C'\\fR after a fork in the child, enable \\f(CW\\*(C`EVFLAG_FORKCHECK\\*(C'\\fR, or resort to\n\\&\\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR or \\f(CW\\*(C`EVBACKEND_POLL\\*(C'\\fR.\n.PP\n\\fIThe special problem of \\s-1SIGPIPE\\s0\\fR\n.IX Subsection \"The special problem of SIGPIPE\"\n.PP\nWhile not really specific to libev, it is easy to forget about \\f(CW\\*(C`SIGPIPE\\*(C'\\fR:\nwhen writing to a pipe whose other end has been closed, your program gets\nsent a \\s-1SIGPIPE\\s0, which, by default, aborts your program. For most programs\nthis is sensible behaviour, for daemons, this is usually undesirable.\n.PP\nSo when you encounter spurious, unexplained daemon exits, make sure you\nignore \\s-1SIGPIPE\\s0 (and maybe make sure you log the exit status of your daemon\nsomewhere, as that would have given you a big clue).\n.PP\n\\fIThe special problem of \\fIaccept()\\fIing when you can't\\fR\n.IX Subsection \"The special problem of accept()ing when you can't\"\n.PP\nMany implementations of the \\s-1POSIX\\s0 \\f(CW\\*(C`accept\\*(C'\\fR function (for example,\nfound in post\\-2004 Linux) have the peculiar behaviour of not removing a\nconnection from the pending queue in all error cases.\n.PP\nFor example, larger servers often run out of file descriptors (because\nof resource limits), causing \\f(CW\\*(C`accept\\*(C'\\fR to fail with \\f(CW\\*(C`ENFILE\\*(C'\\fR but not\nrejecting the connection, leading to libev signalling readiness on\nthe next iteration again (the connection still exists after all), and\ntypically causing the program to loop at 100% \\s-1CPU\\s0 usage.\n.PP\nUnfortunately, the set of errors that cause this issue differs between\noperating systems, there is usually little the app can do to remedy the\nsituation, and no known thread-safe method of removing the connection to\ncope with overload is known (to me).\n.PP\nOne of the easiest ways to handle this situation is to just ignore it\n\\&\\- when the program encounters an overload, it will just loop until the\nsituation is over. While this is a form of busy waiting, no \\s-1OS\\s0 offers an\nevent-based way to handle this situation, so it's the best one can do.\n.PP\nA better way to handle the situation is to log any errors other than\n\\&\\f(CW\\*(C`EAGAIN\\*(C'\\fR and \\f(CW\\*(C`EWOULDBLOCK\\*(C'\\fR, making sure not to flood the log with such\nmessages, and continue as usual, which at least gives the user an idea of\nwhat could be wrong (\\*(L\"raise the ulimit!\\*(R\"). For extra points one could stop\nthe \\f(CW\\*(C`ev_io\\*(C'\\fR watcher on the listening fd \\*(L\"for a while\\*(R\", which reduces \\s-1CPU\\s0\nusage.\n.PP\nIf your program is single-threaded, then you could also keep a dummy file\ndescriptor for overload situations (e.g. by opening \\fI/dev/null\\fR), and\nwhen you run into \\f(CW\\*(C`ENFILE\\*(C'\\fR or \\f(CW\\*(C`EMFILE\\*(C'\\fR, close it, run \\f(CW\\*(C`accept\\*(C'\\fR,\nclose that fd, and create a new dummy fd. This will gracefully refuse\nclients under typical overload conditions.\n.PP\nThe last way to handle it is to simply log the error and \\f(CW\\*(C`exit\\*(C'\\fR, as\nis often done with \\f(CW\\*(C`malloc\\*(C'\\fR failures, but this results in an easy\nopportunity for a DoS attack.\n.PP\n\\fIWatcher-Specific Functions\\fR\n.IX Subsection \"Watcher-Specific Functions\"\n.IP \"ev_io_init (ev_io *, callback, int fd, int events)\" 4\n.IX Item \"ev_io_init (ev_io *, callback, int fd, int events)\"\n.PD 0\n.IP \"ev_io_set (ev_io *, int fd, int events)\" 4\n.IX Item \"ev_io_set (ev_io *, int fd, int events)\"\n.PD\nConfigures an \\f(CW\\*(C`ev_io\\*(C'\\fR watcher. The \\f(CW\\*(C`fd\\*(C'\\fR is the file descriptor to\nreceive events for and \\f(CW\\*(C`events\\*(C'\\fR is either \\f(CW\\*(C`EV_READ\\*(C'\\fR, \\f(CW\\*(C`EV_WRITE\\*(C'\\fR or\n\\&\\f(CW\\*(C`EV_READ | EV_WRITE\\*(C'\\fR, to express the desire to receive the given events.\n.IP \"int fd [read\\-only]\" 4\n.IX Item \"int fd [read-only]\"\nThe file descriptor being watched.\n.IP \"int events [read\\-only]\" 4\n.IX Item \"int events [read-only]\"\nThe events being watched.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Call \\f(CW\\*(C`stdin_readable_cb\\*(C'\\fR when \\s-1STDIN_FILENO\\s0 has become, well\nreadable, but only once. Since it is likely line-buffered, you could\nattempt to read a whole line in the callback.\n.PP\n.Vb 6\n\\&   static void\n\\&   stdin_readable_cb (struct ev_loop *loop, ev_io *w, int revents)\n\\&   {\n\\&      ev_io_stop (loop, w);\n\\&     .. read from stdin here (or from w\\->fd) and handle any I/O errors\n\\&   }\n\\&\n\\&   ...\n\\&   struct ev_loop *loop = ev_default_init (0);\n\\&   ev_io stdin_readable;\n\\&   ev_io_init (&stdin_readable, stdin_readable_cb, STDIN_FILENO, EV_READ);\n\\&   ev_io_start (loop, &stdin_readable);\n\\&   ev_run (loop, 0);\n.Ve\n.ie n .SS \"\"\"ev_timer\"\" \\- relative and optionally repeating timeouts\"\n.el .SS \"\\f(CWev_timer\\fP \\- relative and optionally repeating timeouts\"\n.IX Subsection \"ev_timer - relative and optionally repeating timeouts\"\nTimer watchers are simple relative timers that generate an event after a\ngiven time, and optionally repeating in regular intervals after that.\n.PP\nThe timers are based on real time, that is, if you register an event that\ntimes out after an hour and you reset your system clock to January last\nyear, it will still time out after (roughly) one hour. \\*(L\"Roughly\\*(R\" because\ndetecting time jumps is hard, and some inaccuracies are unavoidable (the\nmonotonic clock option helps a lot here).\n.PP\nThe callback is guaranteed to be invoked only \\fIafter\\fR its timeout has\npassed (not \\fIat\\fR, so on systems with very low-resolution clocks this\nmight introduce a small delay, see \\*(L\"the special problem of being too\nearly\\*(R\", below). If multiple timers become ready during the same loop\niteration then the ones with earlier time-out values are invoked before\nones of the same priority with later time-out values (but this is no\nlonger true when a callback calls \\f(CW\\*(C`ev_run\\*(C'\\fR recursively).\n.PP\n\\fIBe smart about timeouts\\fR\n.IX Subsection \"Be smart about timeouts\"\n.PP\nMany real-world problems involve some kind of timeout, usually for error\nrecovery. A typical example is an \\s-1HTTP\\s0 request \\- if the other side hangs,\nyou want to raise some error after a while.\n.PP\nWhat follows are some ways to handle this problem, from obvious and\ninefficient to smart and efficient.\n.PP\nIn the following, a 60 second activity timeout is assumed \\- a timeout that\ngets reset to 60 seconds each time there is activity (e.g. each time some\ndata or other life sign was received).\n.IP \"1. Use a timer and stop, reinitialise and start it on activity.\" 4\n.IX Item \"1. Use a timer and stop, reinitialise and start it on activity.\"\nThis is the most obvious, but not the most simple way: In the beginning,\nstart the watcher:\n.Sp\n.Vb 2\n\\&   ev_timer_init (timer, callback, 60., 0.);\n\\&   ev_timer_start (loop, timer);\n.Ve\n.Sp\nThen, each time there is some activity, \\f(CW\\*(C`ev_timer_stop\\*(C'\\fR it, initialise it\nand start it again:\n.Sp\n.Vb 3\n\\&   ev_timer_stop (loop, timer);\n\\&   ev_timer_set (timer, 60., 0.);\n\\&   ev_timer_start (loop, timer);\n.Ve\n.Sp\nThis is relatively simple to implement, but means that each time there is\nsome activity, libev will first have to remove the timer from its internal\ndata structure and then add it again. Libev tries to be fast, but it's\nstill not a constant-time operation.\n.ie n .IP \"2. Use a timer and re-start it with \"\"ev_timer_again\"\" inactivity.\" 4\n.el .IP \"2. Use a timer and re-start it with \\f(CWev_timer_again\\fR inactivity.\" 4\n.IX Item \"2. Use a timer and re-start it with ev_timer_again inactivity.\"\nThis is the easiest way, and involves using \\f(CW\\*(C`ev_timer_again\\*(C'\\fR instead of\n\\&\\f(CW\\*(C`ev_timer_start\\*(C'\\fR.\n.Sp\nTo implement this, configure an \\f(CW\\*(C`ev_timer\\*(C'\\fR with a \\f(CW\\*(C`repeat\\*(C'\\fR value\nof \\f(CW60\\fR and then call \\f(CW\\*(C`ev_timer_again\\*(C'\\fR at start and each time you\nsuccessfully read or write some data. If you go into an idle state where\nyou do not expect data to travel on the socket, you can \\f(CW\\*(C`ev_timer_stop\\*(C'\\fR\nthe timer, and \\f(CW\\*(C`ev_timer_again\\*(C'\\fR will automatically restart it if need be.\n.Sp\nThat means you can ignore both the \\f(CW\\*(C`ev_timer_start\\*(C'\\fR function and the\n\\&\\f(CW\\*(C`after\\*(C'\\fR argument to \\f(CW\\*(C`ev_timer_set\\*(C'\\fR, and only ever use the \\f(CW\\*(C`repeat\\*(C'\\fR\nmember and \\f(CW\\*(C`ev_timer_again\\*(C'\\fR.\n.Sp\nAt start:\n.Sp\n.Vb 3\n\\&   ev_init (timer, callback);\n\\&   timer\\->repeat = 60.;\n\\&   ev_timer_again (loop, timer);\n.Ve\n.Sp\nEach time there is some activity:\n.Sp\n.Vb 1\n\\&   ev_timer_again (loop, timer);\n.Ve\n.Sp\nIt is even possible to change the time-out on the fly, regardless of\nwhether the watcher is active or not:\n.Sp\n.Vb 2\n\\&   timer\\->repeat = 30.;\n\\&   ev_timer_again (loop, timer);\n.Ve\n.Sp\nThis is slightly more efficient then stopping/starting the timer each time\nyou want to modify its timeout value, as libev does not have to completely\nremove and re-insert the timer from/into its internal data structure.\n.Sp\nIt is, however, even simpler than the \\*(L\"obvious\\*(R\" way to do it.\n.IP \"3. Let the timer time out, but then re-arm it as required.\" 4\n.IX Item \"3. Let the timer time out, but then re-arm it as required.\"\nThis method is more tricky, but usually most efficient: Most timeouts are\nrelatively long compared to the intervals between other activity \\- in\nour example, within 60 seconds, there are usually many I/O events with\nassociated activity resets.\n.Sp\nIn this case, it would be more efficient to leave the \\f(CW\\*(C`ev_timer\\*(C'\\fR alone,\nbut remember the time of last activity, and check for a real timeout only\nwithin the callback:\n.Sp\n.Vb 3\n\\&   ev_tstamp timeout = 60.;\n\\&   ev_tstamp last_activity; // time of last activity\n\\&   ev_timer timer;\n\\&\n\\&   static void\n\\&   callback (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     // calculate when the timeout would happen\n\\&     ev_tstamp after = last_activity \\- ev_now (EV_A) + timeout;\n\\&\n\\&     // if negative, it means we the timeout already occurred\n\\&     if (after < 0.)\n\\&       {\n\\&         // timeout occurred, take action\n\\&       }\n\\&     else\n\\&       {\n\\&         // callback was invoked, but there was some recent \n\\&         // activity. simply restart the timer to time out\n\\&         // after \"after\" seconds, which is the earliest time\n\\&         // the timeout can occur.\n\\&         ev_timer_set (w, after, 0.);\n\\&         ev_timer_start (EV_A_ w);\n\\&       }\n\\&   }\n.Ve\n.Sp\nTo summarise the callback: first calculate in how many seconds the\ntimeout will occur (by calculating the absolute time when it would occur,\n\\&\\f(CW\\*(C`last_activity + timeout\\*(C'\\fR, and subtracting the current time, \\f(CW\\*(C`ev_now\n(EV_A)\\*(C'\\fR from that).\n.Sp\nIf this value is negative, then we are already past the timeout, i.e. we\ntimed out, and need to do whatever is needed in this case.\n.Sp\nOtherwise, we now the earliest time at which the timeout would trigger,\nand simply start the timer with this timeout value.\n.Sp\nIn other words, each time the callback is invoked it will check whether\nthe timeout occurred. If not, it will simply reschedule itself to check\nagain at the earliest time it could time out. Rinse. Repeat.\n.Sp\nThis scheme causes more callback invocations (about one every 60 seconds\nminus half the average time between activity), but virtually no calls to\nlibev to change the timeout.\n.Sp\nTo start the machinery, simply initialise the watcher and set\n\\&\\f(CW\\*(C`last_activity\\*(C'\\fR to the current time (meaning there was some activity just\nnow), then call the callback, which will \\*(L\"do the right thing\\*(R\" and start\nthe timer:\n.Sp\n.Vb 3\n\\&   last_activity = ev_now (EV_A);\n\\&   ev_init (&timer, callback);\n\\&   callback (EV_A_ &timer, 0);\n.Ve\n.Sp\nWhen there is some activity, simply store the current time in\n\\&\\f(CW\\*(C`last_activity\\*(C'\\fR, no libev calls at all:\n.Sp\n.Vb 2\n\\&   if (activity detected)\n\\&     last_activity = ev_now (EV_A);\n.Ve\n.Sp\nWhen your timeout value changes, then the timeout can be changed by simply\nproviding a new value, stopping the timer and calling the callback, which\nwill again do the right thing (for example, time out immediately :).\n.Sp\n.Vb 3\n\\&   timeout = new_value;\n\\&   ev_timer_stop (EV_A_ &timer);\n\\&   callback (EV_A_ &timer, 0);\n.Ve\n.Sp\nThis technique is slightly more complex, but in most cases where the\ntime-out is unlikely to be triggered, much more efficient.\n.IP \"4. Wee, just use a double-linked list for your timeouts.\" 4\n.IX Item \"4. Wee, just use a double-linked list for your timeouts.\"\nIf there is not one request, but many thousands (millions...), all\nemploying some kind of timeout with the same timeout value, then one can\ndo even better:\n.Sp\nWhen starting the timeout, calculate the timeout value and put the timeout\nat the \\fIend\\fR of the list.\n.Sp\nThen use an \\f(CW\\*(C`ev_timer\\*(C'\\fR to fire when the timeout at the \\fIbeginning\\fR of\nthe list is expected to fire (for example, using the technique #3).\n.Sp\nWhen there is some activity, remove the timer from the list, recalculate\nthe timeout, append it to the end of the list again, and make sure to\nupdate the \\f(CW\\*(C`ev_timer\\*(C'\\fR if it was taken from the beginning of the list.\n.Sp\nThis way, one can manage an unlimited number of timeouts in O(1) time for\nstarting, stopping and updating the timers, at the expense of a major\ncomplication, and having to use a constant timeout. The constant timeout\nensures that the list stays sorted.\n.PP\nSo which method the best?\n.PP\nMethod #2 is a simple no-brain-required solution that is adequate in most\nsituations. Method #3 requires a bit more thinking, but handles many cases\nbetter, and isn't very complicated either. In most case, choosing either\none is fine, with #3 being better in typical situations.\n.PP\nMethod #1 is almost always a bad idea, and buys you nothing. Method #4 is\nrather complicated, but extremely efficient, something that really pays\noff after the first million or so of active timers, i.e. it's usually\noverkill :)\n.PP\n\\fIThe special problem of being too early\\fR\n.IX Subsection \"The special problem of being too early\"\n.PP\nIf you ask a timer to call your callback after three seconds, then\nyou expect it to be invoked after three seconds \\- but of course, this\ncannot be guaranteed to infinite precision. Less obviously, it cannot be\nguaranteed to any precision by libev \\- imagine somebody suspending the\nprocess with a \\s-1STOP\\s0 signal for a few hours for example.\n.PP\nSo, libev tries to invoke your callback as soon as possible \\fIafter\\fR the\ndelay has occurred, but cannot guarantee this.\n.PP\nA less obvious failure mode is calling your callback too early: many event\nloops compare timestamps with a \\*(L\"elapsed delay >= requested delay\\*(R\", but\nthis can cause your callback to be invoked much earlier than you would\nexpect.\n.PP\nTo see why, imagine a system with a clock that only offers full second\nresolution (think windows if you can't come up with a broken enough \\s-1OS\\s0\nyourself). If you schedule a one-second timer at the time 500.9, then the\nevent loop will schedule your timeout to elapse at a system time of 500\n(500.9 truncated to the resolution) + 1, or 501.\n.PP\nIf an event library looks at the timeout 0.1s later, it will see \\*(L\"501 >=\n501\\*(R\" and invoke the callback 0.1s after it was started, even though a\none-second delay was requested \\- this is being \\*(L\"too early\\*(R\", despite best\nintentions.\n.PP\nThis is the reason why libev will never invoke the callback if the elapsed\ndelay equals the requested delay, but only when the elapsed delay is\nlarger than the requested delay. In the example above, libev would only invoke\nthe callback at system time 502, or 1.1s after the timer was started.\n.PP\nSo, while libev cannot guarantee that your callback will be invoked\nexactly when requested, it \\fIcan\\fR and \\fIdoes\\fR guarantee that the requested\ndelay has actually elapsed, or in other words, it always errs on the \\*(L\"too\nlate\\*(R\" side of things.\n.PP\n\\fIThe special problem of time updates\\fR\n.IX Subsection \"The special problem of time updates\"\n.PP\nEstablishing the current time is a costly operation (it usually takes\nat least one system call): \\s-1EV\\s0 therefore updates its idea of the current\ntime only before and after \\f(CW\\*(C`ev_run\\*(C'\\fR collects new events, which causes a\ngrowing difference between \\f(CW\\*(C`ev_now ()\\*(C'\\fR and \\f(CW\\*(C`ev_time ()\\*(C'\\fR when handling\nlots of events in one iteration.\n.PP\nThe relative timeouts are calculated relative to the \\f(CW\\*(C`ev_now ()\\*(C'\\fR\ntime. This is usually the right thing as this timestamp refers to the time\nof the event triggering whatever timeout you are modifying/starting. If\nyou suspect event processing to be delayed and you \\fIneed\\fR to base the\ntimeout on the current time, use something like the following to adjust\nfor it:\n.PP\n.Vb 1\n\\&   ev_timer_set (&timer, after + (ev_time () \\- ev_now ()), 0.);\n.Ve\n.PP\nIf the event loop is suspended for a long time, you can also force an\nupdate of the time returned by \\f(CW\\*(C`ev_now ()\\*(C'\\fR by calling \\f(CW\\*(C`ev_now_update\n()\\*(C'\\fR, although that will push the event time of all outstanding events\nfurther into the future.\n.PP\n\\fIThe special problem of unsynchronised clocks\\fR\n.IX Subsection \"The special problem of unsynchronised clocks\"\n.PP\nModern systems have a variety of clocks \\- libev itself uses the normal\n\\&\\*(L\"wall clock\\*(R\" clock and, if available, the monotonic clock (to avoid time\njumps).\n.PP\nNeither of these clocks is synchronised with each other or any other clock\non the system, so \\f(CW\\*(C`ev_time ()\\*(C'\\fR might return a considerably different time\nthan \\f(CW\\*(C`gettimeofday ()\\*(C'\\fR or \\f(CW\\*(C`time ()\\*(C'\\fR. On a GNU/Linux system, for example,\na call to \\f(CW\\*(C`gettimeofday\\*(C'\\fR might return a second count that is one higher\nthan a directly following call to \\f(CW\\*(C`time\\*(C'\\fR.\n.PP\nThe moral of this is to only compare libev-related timestamps with\n\\&\\f(CW\\*(C`ev_time ()\\*(C'\\fR and \\f(CW\\*(C`ev_now ()\\*(C'\\fR, at least if you want better precision than\na second or so.\n.PP\nOne more problem arises due to this lack of synchronisation: if libev uses\nthe system monotonic clock and you compare timestamps from \\f(CW\\*(C`ev_time\\*(C'\\fR\nor \\f(CW\\*(C`ev_now\\*(C'\\fR from when you started your timer and when your callback is\ninvoked, you will find that sometimes the callback is a bit \\*(L\"early\\*(R\".\n.PP\nThis is because \\f(CW\\*(C`ev_timer\\*(C'\\fRs work in real time, not wall clock time, so\nlibev makes sure your callback is not invoked before the delay happened,\n\\&\\fImeasured according to the real time\\fR, not the system clock.\n.PP\nIf your timeouts are based on a physical timescale (e.g. \\*(L\"time out this\nconnection after 100 seconds\\*(R\") then this shouldn't bother you as it is\nexactly the right behaviour.\n.PP\nIf you want to compare wall clock/system timestamps to your timers, then\nyou need to use \\f(CW\\*(C`ev_periodic\\*(C'\\fRs, as these are based on the wall clock\ntime, where your comparisons will always generate correct results.\n.PP\n\\fIThe special problems of suspended animation\\fR\n.IX Subsection \"The special problems of suspended animation\"\n.PP\nWhen you leave the server world it is quite customary to hit machines that\ncan suspend/hibernate \\- what happens to the clocks during such a suspend?\n.PP\nSome quick tests made with a Linux 2.6.28 indicate that a suspend freezes\nall processes, while the clocks (\\f(CW\\*(C`times\\*(C'\\fR, \\f(CW\\*(C`CLOCK_MONOTONIC\\*(C'\\fR) continue\nto run until the system is suspended, but they will not advance while the\nsystem is suspended. That means, on resume, it will be as if the program\nwas frozen for a few seconds, but the suspend time will not be counted\ntowards \\f(CW\\*(C`ev_timer\\*(C'\\fR when a monotonic clock source is used. The real time\nclock advanced as expected, but if it is used as sole clocksource, then a\nlong suspend would be detected as a time jump by libev, and timers would\nbe adjusted accordingly.\n.PP\nI would not be surprised to see different behaviour in different between\noperating systems, \\s-1OS\\s0 versions or even different hardware.\n.PP\nThe other form of suspend (job control, or sending a \\s-1SIGSTOP\\s0) will see a\ntime jump in the monotonic clocks and the realtime clock. If the program\nis suspended for a very long time, and monotonic clock sources are in use,\nthen you can expect \\f(CW\\*(C`ev_timer\\*(C'\\fRs to expire as the full suspension time\nwill be counted towards the timers. When no monotonic clock source is in\nuse, then libev will again assume a timejump and adjust accordingly.\n.PP\nIt might be beneficial for this latter case to call \\f(CW\\*(C`ev_suspend\\*(C'\\fR\nand \\f(CW\\*(C`ev_resume\\*(C'\\fR in code that handles \\f(CW\\*(C`SIGTSTP\\*(C'\\fR, to at least get\ndeterministic behaviour in this case (you can do nothing against\n\\&\\f(CW\\*(C`SIGSTOP\\*(C'\\fR).\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)\" 4\n.IX Item \"ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)\"\n.PD 0\n.IP \"ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)\" 4\n.IX Item \"ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)\"\n.PD\nConfigure the timer to trigger after \\f(CW\\*(C`after\\*(C'\\fR seconds. If \\f(CW\\*(C`repeat\\*(C'\\fR\nis \\f(CW0.\\fR, then it will automatically be stopped once the timeout is\nreached. If it is positive, then the timer will automatically be\nconfigured to trigger again \\f(CW\\*(C`repeat\\*(C'\\fR seconds later, again, and again,\nuntil stopped manually.\n.Sp\nThe timer itself will do a best-effort at avoiding drift, that is, if\nyou configure a timer to trigger every 10 seconds, then it will normally\ntrigger at exactly 10 second intervals. If, however, your program cannot\nkeep up with the timer (because it takes longer than those 10 seconds to\ndo stuff) the timer will not fire more than once per event loop iteration.\n.IP \"ev_timer_again (loop, ev_timer *)\" 4\n.IX Item \"ev_timer_again (loop, ev_timer *)\"\nThis will act as if the timer timed out, and restarts it again if it is\nrepeating. It basically works like calling \\f(CW\\*(C`ev_timer_stop\\*(C'\\fR, updating the\ntimeout to the \\f(CW\\*(C`repeat\\*(C'\\fR value and calling \\f(CW\\*(C`ev_timer_start\\*(C'\\fR.\n.Sp\nThe exact semantics are as in the following rules, all of which will be\napplied to the watcher:\n.RS 4\n.IP \"If the timer is pending, the pending status is always cleared.\" 4\n.IX Item \"If the timer is pending, the pending status is always cleared.\"\n.PD 0\n.IP \"If the timer is started but non-repeating, stop it (as if it timed out, without invoking it).\" 4\n.IX Item \"If the timer is started but non-repeating, stop it (as if it timed out, without invoking it).\"\n.ie n .IP \"If the timer is repeating, make the \"\"repeat\"\" value the new timeout and start the timer, if necessary.\" 4\n.el .IP \"If the timer is repeating, make the \\f(CWrepeat\\fR value the new timeout and start the timer, if necessary.\" 4\n.IX Item \"If the timer is repeating, make the repeat value the new timeout and start the timer, if necessary.\"\n.RE\n.RS 4\n.PD\n.Sp\nThis sounds a bit complicated, see \\*(L\"Be smart about timeouts\\*(R\", above, for a\nusage example.\n.RE\n.IP \"ev_tstamp ev_timer_remaining (loop, ev_timer *)\" 4\n.IX Item \"ev_tstamp ev_timer_remaining (loop, ev_timer *)\"\nReturns the remaining time until a timer fires. If the timer is active,\nthen this time is relative to the current event loop time, otherwise it's\nthe timeout value currently configured.\n.Sp\nThat is, after an \\f(CW\\*(C`ev_timer_set (w, 5, 7)\\*(C'\\fR, \\f(CW\\*(C`ev_timer_remaining\\*(C'\\fR returns\n\\&\\f(CW5\\fR. When the timer is started and one second passes, \\f(CW\\*(C`ev_timer_remaining\\*(C'\\fR\nwill return \\f(CW4\\fR. When the timer expires and is restarted, it will return\nroughly \\f(CW7\\fR (likely slightly less as callback invocation takes some time,\ntoo), and so on.\n.IP \"ev_tstamp repeat [read\\-write]\" 4\n.IX Item \"ev_tstamp repeat [read-write]\"\nThe current \\f(CW\\*(C`repeat\\*(C'\\fR value. Will be used each time the watcher times out\nor \\f(CW\\*(C`ev_timer_again\\*(C'\\fR is called, and determines the next timeout (if any),\nwhich is also when any modifications are taken into account.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Create a timer that fires after 60 seconds.\n.PP\n.Vb 5\n\\&   static void\n\\&   one_minute_cb (struct ev_loop *loop, ev_timer *w, int revents)\n\\&   {\n\\&     .. one minute over, w is actually stopped right here\n\\&   }\n\\&\n\\&   ev_timer mytimer;\n\\&   ev_timer_init (&mytimer, one_minute_cb, 60., 0.);\n\\&   ev_timer_start (loop, &mytimer);\n.Ve\n.PP\nExample: Create a timeout timer that times out after 10 seconds of\ninactivity.\n.PP\n.Vb 5\n\\&   static void\n\\&   timeout_cb (struct ev_loop *loop, ev_timer *w, int revents)\n\\&   {\n\\&     .. ten seconds without any activity\n\\&   }\n\\&\n\\&   ev_timer mytimer;\n\\&   ev_timer_init (&mytimer, timeout_cb, 0., 10.); /* note, only repeat used */\n\\&   ev_timer_again (&mytimer); /* start timer */\n\\&   ev_run (loop, 0);\n\\&\n\\&   // and in some piece of code that gets executed on any \"activity\":\n\\&   // reset the timeout to start ticking again at 10 seconds\n\\&   ev_timer_again (&mytimer);\n.Ve\n.ie n .SS \"\"\"ev_periodic\"\" \\- to cron or not to cron?\"\n.el .SS \"\\f(CWev_periodic\\fP \\- to cron or not to cron?\"\n.IX Subsection \"ev_periodic - to cron or not to cron?\"\nPeriodic watchers are also timers of a kind, but they are very versatile\n(and unfortunately a bit complex).\n.PP\nUnlike \\f(CW\\*(C`ev_timer\\*(C'\\fR, periodic watchers are not based on real time (or\nrelative time, the physical time that passes) but on wall clock time\n(absolute time, the thing you can read on your calender or clock). The\ndifference is that wall clock time can run faster or slower than real\ntime, and time jumps are not uncommon (e.g. when you adjust your\nwrist-watch).\n.PP\nYou can tell a periodic watcher to trigger after some specific point\nin time: for example, if you tell a periodic watcher to trigger \\*(L\"in 10\nseconds\\*(R\" (by specifying e.g. \\f(CW\\*(C`ev_now () + 10.\\*(C'\\fR, that is, an absolute time\nnot a delay) and then reset your system clock to January of the previous\nyear, then it will take a year or more to trigger the event (unlike an\n\\&\\f(CW\\*(C`ev_timer\\*(C'\\fR, which would still trigger roughly 10 seconds after starting\nit, as it uses a relative timeout).\n.PP\n\\&\\f(CW\\*(C`ev_periodic\\*(C'\\fR watchers can also be used to implement vastly more complex\ntimers, such as triggering an event on each \\*(L\"midnight, local time\\*(R\", or\nother complicated rules. This cannot be done with \\f(CW\\*(C`ev_timer\\*(C'\\fR watchers, as\nthose cannot react to time jumps.\n.PP\nAs with timers, the callback is guaranteed to be invoked only when the\npoint in time where it is supposed to trigger has passed. If multiple\ntimers become ready during the same loop iteration then the ones with\nearlier time-out values are invoked before ones with later time-out values\n(but this is no longer true when a callback calls \\f(CW\\*(C`ev_run\\*(C'\\fR recursively).\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_periodic_init (ev_periodic *, callback, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\" 4\n.IX Item \"ev_periodic_init (ev_periodic *, callback, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\"\n.PD 0\n.IP \"ev_periodic_set (ev_periodic *, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\" 4\n.IX Item \"ev_periodic_set (ev_periodic *, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\"\n.PD\nLots of arguments, let's sort it out... There are basically three modes of\noperation, and we will explain them from simplest to most complex:\n.RS 4\n.IP \"\\(bu\" 4\nabsolute timer (offset = absolute time, interval = 0, reschedule_cb = 0)\n.Sp\nIn this configuration the watcher triggers an event after the wall clock\ntime \\f(CW\\*(C`offset\\*(C'\\fR has passed. It will not repeat and will not adjust when a\ntime jump occurs, that is, if it is to be run at January 1st 2011 then it\nwill be stopped and invoked when the system clock reaches or surpasses\nthis point in time.\n.IP \"\\(bu\" 4\nrepeating interval timer (offset = offset within interval, interval > 0, reschedule_cb = 0)\n.Sp\nIn this mode the watcher will always be scheduled to time out at the next\n\\&\\f(CW\\*(C`offset + N * interval\\*(C'\\fR time (for some integer N, which can also be\nnegative) and then repeat, regardless of any time jumps. The \\f(CW\\*(C`offset\\*(C'\\fR\nargument is merely an offset into the \\f(CW\\*(C`interval\\*(C'\\fR periods.\n.Sp\nThis can be used to create timers that do not drift with respect to the\nsystem clock, for example, here is an \\f(CW\\*(C`ev_periodic\\*(C'\\fR that triggers each\nhour, on the hour (with respect to \\s-1UTC\\s0):\n.Sp\n.Vb 1\n\\&   ev_periodic_set (&periodic, 0., 3600., 0);\n.Ve\n.Sp\nThis doesn't mean there will always be 3600 seconds in between triggers,\nbut only that the callback will be called when the system time shows a\nfull hour (\\s-1UTC\\s0), or more correctly, when the system time is evenly divisible\nby 3600.\n.Sp\nAnother way to think about it (for the mathematically inclined) is that\n\\&\\f(CW\\*(C`ev_periodic\\*(C'\\fR will try to run the callback in this mode at the next possible\ntime where \\f(CW\\*(C`time = offset (mod interval)\\*(C'\\fR, regardless of any time jumps.\n.Sp\nThe \\f(CW\\*(C`interval\\*(C'\\fR \\fI\\s-1MUST\\s0\\fR be positive, and for numerical stability, the\ninterval value should be higher than \\f(CW\\*(C`1/8192\\*(C'\\fR (which is around 100\nmicroseconds) and \\f(CW\\*(C`offset\\*(C'\\fR should be higher than \\f(CW0\\fR and should have\nat most a similar magnitude as the current time (say, within a factor of\nten). Typical values for offset are, in fact, \\f(CW0\\fR or something between\n\\&\\f(CW0\\fR and \\f(CW\\*(C`interval\\*(C'\\fR, which is also the recommended range.\n.Sp\nNote also that there is an upper limit to how often a timer can fire (\\s-1CPU\\s0\nspeed for example), so if \\f(CW\\*(C`interval\\*(C'\\fR is very small then timing stability\nwill of course deteriorate. Libev itself tries to be exact to be about one\nmillisecond (if the \\s-1OS\\s0 supports it and the machine is fast enough).\n.IP \"\\(bu\" 4\nmanual reschedule mode (offset ignored, interval ignored, reschedule_cb = callback)\n.Sp\nIn this mode the values for \\f(CW\\*(C`interval\\*(C'\\fR and \\f(CW\\*(C`offset\\*(C'\\fR are both being\nignored. Instead, each time the periodic watcher gets scheduled, the\nreschedule callback will be called with the watcher as first, and the\ncurrent time as second argument.\n.Sp\n\\&\\s-1NOTE:\\s0 \\fIThis callback \\s-1MUST\\s0 \\s-1NOT\\s0 stop or destroy any periodic watcher, ever,\nor make \\s-1ANY\\s0 other event loop modifications whatsoever, unless explicitly\nallowed by documentation here\\fR.\n.Sp\nIf you need to stop it, return \\f(CW\\*(C`now + 1e30\\*(C'\\fR (or so, fudge fudge) and stop\nit afterwards (e.g. by starting an \\f(CW\\*(C`ev_prepare\\*(C'\\fR watcher, which is the\nonly event loop modification you are allowed to do).\n.Sp\nThe callback prototype is \\f(CW\\*(C`ev_tstamp (*reschedule_cb)(ev_periodic\n*w, ev_tstamp now)\\*(C'\\fR, e.g.:\n.Sp\n.Vb 5\n\\&   static ev_tstamp\n\\&   my_rescheduler (ev_periodic *w, ev_tstamp now)\n\\&   {\n\\&     return now + 60.;\n\\&   }\n.Ve\n.Sp\nIt must return the next time to trigger, based on the passed time value\n(that is, the lowest time value larger than to the second argument). It\nwill usually be called just before the callback will be triggered, but\nmight be called at other times, too.\n.Sp\n\\&\\s-1NOTE:\\s0 \\fIThis callback must always return a time that is higher than or\nequal to the passed \\f(CI\\*(C`now\\*(C'\\fI value\\fR.\n.Sp\nThis can be used to create very complex timers, such as a timer that\ntriggers on \\*(L\"next midnight, local time\\*(R\". To do this, you would calculate the\nnext midnight after \\f(CW\\*(C`now\\*(C'\\fR and return the timestamp value for this. How\nyou do this is, again, up to you (but it is not trivial, which is the main\nreason I omitted it as an example).\n.RE\n.RS 4\n.RE\n.IP \"ev_periodic_again (loop, ev_periodic *)\" 4\n.IX Item \"ev_periodic_again (loop, ev_periodic *)\"\nSimply stops and restarts the periodic watcher again. This is only useful\nwhen you changed some parameters or the reschedule callback would return\na different time than the last time it was called (e.g. in a crond like\nprogram when the crontabs have changed).\n.IP \"ev_tstamp ev_periodic_at (ev_periodic *)\" 4\n.IX Item \"ev_tstamp ev_periodic_at (ev_periodic *)\"\nWhen active, returns the absolute time that the watcher is supposed\nto trigger next. This is not the same as the \\f(CW\\*(C`offset\\*(C'\\fR argument to\n\\&\\f(CW\\*(C`ev_periodic_set\\*(C'\\fR, but indeed works even in interval and manual\nrescheduling modes.\n.IP \"ev_tstamp offset [read\\-write]\" 4\n.IX Item \"ev_tstamp offset [read-write]\"\nWhen repeating, this contains the offset value, otherwise this is the\nabsolute point in time (the \\f(CW\\*(C`offset\\*(C'\\fR value passed to \\f(CW\\*(C`ev_periodic_set\\*(C'\\fR,\nalthough libev might modify this value for better numerical stability).\n.Sp\nCan be modified any time, but changes only take effect when the periodic\ntimer fires or \\f(CW\\*(C`ev_periodic_again\\*(C'\\fR is being called.\n.IP \"ev_tstamp interval [read\\-write]\" 4\n.IX Item \"ev_tstamp interval [read-write]\"\nThe current interval value. Can be modified any time, but changes only\ntake effect when the periodic timer fires or \\f(CW\\*(C`ev_periodic_again\\*(C'\\fR is being\ncalled.\n.IP \"ev_tstamp (*reschedule_cb)(ev_periodic *w, ev_tstamp now) [read\\-write]\" 4\n.IX Item \"ev_tstamp (*reschedule_cb)(ev_periodic *w, ev_tstamp now) [read-write]\"\nThe current reschedule callback, or \\f(CW0\\fR, if this functionality is\nswitched off. Can be changed any time, but changes only take effect when\nthe periodic timer fires or \\f(CW\\*(C`ev_periodic_again\\*(C'\\fR is being called.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Call a callback every hour, or, more precisely, whenever the\nsystem time is divisible by 3600. The callback invocation times have\npotentially a lot of jitter, but good long-term stability.\n.PP\n.Vb 5\n\\&   static void\n\\&   clock_cb (struct ev_loop *loop, ev_periodic *w, int revents)\n\\&   {\n\\&     ... its now a full hour (UTC, or TAI or whatever your clock follows)\n\\&   }\n\\&\n\\&   ev_periodic hourly_tick;\n\\&   ev_periodic_init (&hourly_tick, clock_cb, 0., 3600., 0);\n\\&   ev_periodic_start (loop, &hourly_tick);\n.Ve\n.PP\nExample: The same as above, but use a reschedule callback to do it:\n.PP\n.Vb 1\n\\&   #include <math.h>\n\\&\n\\&   static ev_tstamp\n\\&   my_scheduler_cb (ev_periodic *w, ev_tstamp now)\n\\&   {\n\\&     return now + (3600. \\- fmod (now, 3600.));\n\\&   }\n\\&\n\\&   ev_periodic_init (&hourly_tick, clock_cb, 0., 0., my_scheduler_cb);\n.Ve\n.PP\nExample: Call a callback every hour, starting now:\n.PP\n.Vb 4\n\\&   ev_periodic hourly_tick;\n\\&   ev_periodic_init (&hourly_tick, clock_cb,\n\\&                     fmod (ev_now (loop), 3600.), 3600., 0);\n\\&   ev_periodic_start (loop, &hourly_tick);\n.Ve\n.ie n .SS \"\"\"ev_signal\"\" \\- signal me when a signal gets signalled!\"\n.el .SS \"\\f(CWev_signal\\fP \\- signal me when a signal gets signalled!\"\n.IX Subsection \"ev_signal - signal me when a signal gets signalled!\"\nSignal watchers will trigger an event when the process receives a specific\nsignal one or more times. Even though signals are very asynchronous, libev\nwill try its best to deliver signals synchronously, i.e. as part of the\nnormal event processing, like any other event.\n.PP\nIf you want signals to be delivered truly asynchronously, just use\n\\&\\f(CW\\*(C`sigaction\\*(C'\\fR as you would do without libev and forget about sharing\nthe signal. You can even use \\f(CW\\*(C`ev_async\\*(C'\\fR from a signal handler to\nsynchronously wake up an event loop.\n.PP\nYou can configure as many watchers as you like for the same signal, but\nonly within the same loop, i.e. you can watch for \\f(CW\\*(C`SIGINT\\*(C'\\fR in your\ndefault loop and for \\f(CW\\*(C`SIGIO\\*(C'\\fR in another loop, but you cannot watch for\n\\&\\f(CW\\*(C`SIGINT\\*(C'\\fR in both the default loop and another loop at the same time. At\nthe moment, \\f(CW\\*(C`SIGCHLD\\*(C'\\fR is permanently tied to the default loop.\n.PP\nOnly after the first watcher for a signal is started will libev actually\nregister something with the kernel. It thus coexists with your own signal\nhandlers as long as you don't register any with libev for the same signal.\n.PP\nIf possible and supported, libev will install its handlers with\n\\&\\f(CW\\*(C`SA_RESTART\\*(C'\\fR (or equivalent) behaviour enabled, so system calls should\nnot be unduly interrupted. If you have a problem with system calls getting\ninterrupted by signals you can block all signals in an \\f(CW\\*(C`ev_check\\*(C'\\fR watcher\nand unblock them in an \\f(CW\\*(C`ev_prepare\\*(C'\\fR watcher.\n.PP\n\\fIThe special problem of inheritance over fork/execve/pthread_create\\fR\n.IX Subsection \"The special problem of inheritance over fork/execve/pthread_create\"\n.PP\nBoth the signal mask (\\f(CW\\*(C`sigprocmask\\*(C'\\fR) and the signal disposition\n(\\f(CW\\*(C`sigaction\\*(C'\\fR) are unspecified after starting a signal watcher (and after\nstopping it again), that is, libev might or might not block the signal,\nand might or might not set or restore the installed signal handler (but\nsee \\f(CW\\*(C`EVFLAG_NOSIGMASK\\*(C'\\fR).\n.PP\nWhile this does not matter for the signal disposition (libev never\nsets signals to \\f(CW\\*(C`SIG_IGN\\*(C'\\fR, so handlers will be reset to \\f(CW\\*(C`SIG_DFL\\*(C'\\fR on\n\\&\\f(CW\\*(C`execve\\*(C'\\fR), this matters for the signal mask: many programs do not expect\ncertain signals to be blocked.\n.PP\nThis means that before calling \\f(CW\\*(C`exec\\*(C'\\fR (from the child) you should reset\nthe signal mask to whatever \\*(L\"default\\*(R\" you expect (all clear is a good\nchoice usually).\n.PP\nThe simplest way to ensure that the signal mask is reset in the child is\nto install a fork handler with \\f(CW\\*(C`pthread_atfork\\*(C'\\fR that resets it. That will\ncatch fork calls done by libraries (such as the libc) as well.\n.PP\nIn current versions of libev, the signal will not be blocked indefinitely\nunless you use the \\f(CW\\*(C`signalfd\\*(C'\\fR \\s-1API\\s0 (\\f(CW\\*(C`EV_SIGNALFD\\*(C'\\fR). While this reduces\nthe window of opportunity for problems, it will not go away, as libev\n\\&\\fIhas\\fR to modify the signal mask, at least temporarily.\n.PP\nSo I can't stress this enough: \\fIIf you do not reset your signal mask when\nyou expect it to be empty, you have a race condition in your code\\fR. This\nis not a libev-specific thing, this is true for most event libraries.\n.PP\n\\fIThe special problem of threads signal handling\\fR\n.IX Subsection \"The special problem of threads signal handling\"\n.PP\n\\&\\s-1POSIX\\s0 threads has problematic signal handling semantics, specifically,\na lot of functionality (sigfd, sigwait etc.) only really works if all\nthreads in a process block signals, which is hard to achieve.\n.PP\nWhen you want to use sigwait (or mix libev signal handling with your own\nfor the same signals), you can tackle this problem by globally blocking\nall signals before creating any threads (or creating them with a fully set\nsigprocmask) and also specifying the \\f(CW\\*(C`EVFLAG_NOSIGMASK\\*(C'\\fR when creating\nloops. Then designate one thread as \\*(L\"signal receiver thread\\*(R\" which handles\nthese signals. You can pass on any signals that libev might be interested\nin by calling \\f(CW\\*(C`ev_feed_signal\\*(C'\\fR.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_signal_init (ev_signal *, callback, int signum)\" 4\n.IX Item \"ev_signal_init (ev_signal *, callback, int signum)\"\n.PD 0\n.IP \"ev_signal_set (ev_signal *, int signum)\" 4\n.IX Item \"ev_signal_set (ev_signal *, int signum)\"\n.PD\nConfigures the watcher to trigger on the given signal number (usually one\nof the \\f(CW\\*(C`SIGxxx\\*(C'\\fR constants).\n.IP \"int signum [read\\-only]\" 4\n.IX Item \"int signum [read-only]\"\nThe signal the watcher watches out for.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Try to exit cleanly on \\s-1SIGINT\\s0.\n.PP\n.Vb 5\n\\&   static void\n\\&   sigint_cb (struct ev_loop *loop, ev_signal *w, int revents)\n\\&   {\n\\&     ev_break (loop, EVBREAK_ALL);\n\\&   }\n\\&\n\\&   ev_signal signal_watcher;\n\\&   ev_signal_init (&signal_watcher, sigint_cb, SIGINT);\n\\&   ev_signal_start (loop, &signal_watcher);\n.Ve\n.ie n .SS \"\"\"ev_child\"\" \\- watch out for process status changes\"\n.el .SS \"\\f(CWev_child\\fP \\- watch out for process status changes\"\n.IX Subsection \"ev_child - watch out for process status changes\"\nChild watchers trigger when your process receives a \\s-1SIGCHLD\\s0 in response to\nsome child status changes (most typically when a child of yours dies or\nexits). It is permissible to install a child watcher \\fIafter\\fR the child\nhas been forked (which implies it might have already exited), as long\nas the event loop isn't entered (or is continued from a watcher), i.e.,\nforking and then immediately registering a watcher for the child is fine,\nbut forking and registering a watcher a few event loop iterations later or\nin the next callback invocation is not.\n.PP\nOnly the default event loop is capable of handling signals, and therefore\nyou can only register child watchers in the default event loop.\n.PP\nDue to some design glitches inside libev, child watchers will always be\nhandled at maximum priority (their priority is set to \\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR by\nlibev)\n.PP\n\\fIProcess Interaction\\fR\n.IX Subsection \"Process Interaction\"\n.PP\nLibev grabs \\f(CW\\*(C`SIGCHLD\\*(C'\\fR as soon as the default event loop is\ninitialised. This is necessary to guarantee proper behaviour even if the\nfirst child watcher is started after the child exits. The occurrence\nof \\f(CW\\*(C`SIGCHLD\\*(C'\\fR is recorded asynchronously, but child reaping is done\nsynchronously as part of the event loop processing. Libev always reaps all\nchildren, even ones not watched.\n.PP\n\\fIOverriding the Built-In Processing\\fR\n.IX Subsection \"Overriding the Built-In Processing\"\n.PP\nLibev offers no special support for overriding the built-in child\nprocessing, but if your application collides with libev's default child\nhandler, you can override it easily by installing your own handler for\n\\&\\f(CW\\*(C`SIGCHLD\\*(C'\\fR after initialising the default loop, and making sure the\ndefault loop never gets destroyed. You are encouraged, however, to use an\nevent-based approach to child reaping and thus use libev's support for\nthat, so other libev users can use \\f(CW\\*(C`ev_child\\*(C'\\fR watchers freely.\n.PP\n\\fIStopping the Child Watcher\\fR\n.IX Subsection \"Stopping the Child Watcher\"\n.PP\nCurrently, the child watcher never gets stopped, even when the\nchild terminates, so normally one needs to stop the watcher in the\ncallback. Future versions of libev might stop the watcher automatically\nwhen a child exit is detected (calling \\f(CW\\*(C`ev_child_stop\\*(C'\\fR twice is not a\nproblem).\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_child_init (ev_child *, callback, int pid, int trace)\" 4\n.IX Item \"ev_child_init (ev_child *, callback, int pid, int trace)\"\n.PD 0\n.IP \"ev_child_set (ev_child *, int pid, int trace)\" 4\n.IX Item \"ev_child_set (ev_child *, int pid, int trace)\"\n.PD\nConfigures the watcher to wait for status changes of process \\f(CW\\*(C`pid\\*(C'\\fR (or\n\\&\\fIany\\fR process if \\f(CW\\*(C`pid\\*(C'\\fR is specified as \\f(CW0\\fR). The callback can look\nat the \\f(CW\\*(C`rstatus\\*(C'\\fR member of the \\f(CW\\*(C`ev_child\\*(C'\\fR watcher structure to see\nthe status word (use the macros from \\f(CW\\*(C`sys/wait.h\\*(C'\\fR and see your systems\n\\&\\f(CW\\*(C`waitpid\\*(C'\\fR documentation). The \\f(CW\\*(C`rpid\\*(C'\\fR member contains the pid of the\nprocess causing the status change. \\f(CW\\*(C`trace\\*(C'\\fR must be either \\f(CW0\\fR (only\nactivate the watcher when the process terminates) or \\f(CW1\\fR (additionally\nactivate the watcher when the process is stopped or continued).\n.IP \"int pid [read\\-only]\" 4\n.IX Item \"int pid [read-only]\"\nThe process id this watcher watches out for, or \\f(CW0\\fR, meaning any process id.\n.IP \"int rpid [read\\-write]\" 4\n.IX Item \"int rpid [read-write]\"\nThe process id that detected a status change.\n.IP \"int rstatus [read\\-write]\" 4\n.IX Item \"int rstatus [read-write]\"\nThe process exit/trace status caused by \\f(CW\\*(C`rpid\\*(C'\\fR (see your systems\n\\&\\f(CW\\*(C`waitpid\\*(C'\\fR and \\f(CW\\*(C`sys/wait.h\\*(C'\\fR documentation for details).\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: \\f(CW\\*(C`fork()\\*(C'\\fR a new process and install a child handler to wait for\nits completion.\n.PP\n.Vb 1\n\\&   ev_child cw;\n\\&\n\\&   static void\n\\&   child_cb (EV_P_ ev_child *w, int revents)\n\\&   {\n\\&     ev_child_stop (EV_A_ w);\n\\&     printf (\"process %d exited with status %x\\en\", w\\->rpid, w\\->rstatus);\n\\&   }\n\\&\n\\&   pid_t pid = fork ();\n\\&\n\\&   if (pid < 0)\n\\&     // error\n\\&   else if (pid == 0)\n\\&     {\n\\&       // the forked child executes here\n\\&       exit (1);\n\\&     }\n\\&   else\n\\&     {\n\\&       ev_child_init (&cw, child_cb, pid, 0);\n\\&       ev_child_start (EV_DEFAULT_ &cw);\n\\&     }\n.Ve\n.ie n .SS \"\"\"ev_stat\"\" \\- did the file attributes just change?\"\n.el .SS \"\\f(CWev_stat\\fP \\- did the file attributes just change?\"\n.IX Subsection \"ev_stat - did the file attributes just change?\"\nThis watches a file system path for attribute changes. That is, it calls\n\\&\\f(CW\\*(C`stat\\*(C'\\fR on that path in regular intervals (or when the \\s-1OS\\s0 says it changed)\nand sees if it changed compared to the last time, invoking the callback\nif it did. Starting the watcher \\f(CW\\*(C`stat\\*(C'\\fR's the file, so only changes that\nhappen after the watcher has been started will be reported.\n.PP\nThe path does not need to exist: changing from \\*(L\"path exists\\*(R\" to \\*(L\"path does\nnot exist\\*(R\" is a status change like any other. The condition \\*(L\"path does not\nexist\\*(R\" (or more correctly \\*(L\"path cannot be stat'ed\\*(R\") is signified by the\n\\&\\f(CW\\*(C`st_nlink\\*(C'\\fR field being zero (which is otherwise always forced to be at\nleast one) and all the other fields of the stat buffer having unspecified\ncontents.\n.PP\nThe path \\fImust not\\fR end in a slash or contain special components such as\n\\&\\f(CW\\*(C`.\\*(C'\\fR or \\f(CW\\*(C`..\\*(C'\\fR. The path \\fIshould\\fR be absolute: If it is relative and\nyour working directory changes, then the behaviour is undefined.\n.PP\nSince there is no portable change notification interface available, the\nportable implementation simply calls \\f(CWstat(2)\\fR regularly on the path\nto see if it changed somehow. You can specify a recommended polling\ninterval for this case. If you specify a polling interval of \\f(CW0\\fR (highly\nrecommended!) then a \\fIsuitable, unspecified default\\fR value will be used\n(which you can expect to be around five seconds, although this might\nchange dynamically). Libev will also impose a minimum interval which is\ncurrently around \\f(CW0.1\\fR, but that's usually overkill.\n.PP\nThis watcher type is not meant for massive numbers of stat watchers,\nas even with OS-supported change notifications, this can be\nresource-intensive.\n.PP\nAt the time of this writing, the only OS-specific interface implemented\nis the Linux inotify interface (implementing kqueue support is left as an\nexercise for the reader. Note, however, that the author sees no way of\nimplementing \\f(CW\\*(C`ev_stat\\*(C'\\fR semantics with kqueue, except as a hint).\n.PP\n\\fI\\s-1ABI\\s0 Issues (Largefile Support)\\fR\n.IX Subsection \"ABI Issues (Largefile Support)\"\n.PP\nLibev by default (unless the user overrides this) uses the default\ncompilation environment, which means that on systems with large file\nsupport disabled by default, you get the 32 bit version of the stat\nstructure. When using the library from programs that change the \\s-1ABI\\s0 to\nuse 64 bit file offsets the programs will fail. In that case you have to\ncompile libev with the same flags to get binary compatibility. This is\nobviously the case with any flags that change the \\s-1ABI\\s0, but the problem is\nmost noticeably displayed with ev_stat and large file support.\n.PP\nThe solution for this is to lobby your distribution maker to make large\nfile interfaces available by default (as e.g. FreeBSD does) and not\noptional. Libev cannot simply switch on large file support because it has\nto exchange stat structures with application programs compiled using the\ndefault compilation environment.\n.PP\n\\fIInotify and Kqueue\\fR\n.IX Subsection \"Inotify and Kqueue\"\n.PP\nWhen \\f(CW\\*(C`inotify (7)\\*(C'\\fR support has been compiled into libev and present at\nruntime, it will be used to speed up change detection where possible. The\ninotify descriptor will be created lazily when the first \\f(CW\\*(C`ev_stat\\*(C'\\fR\nwatcher is being started.\n.PP\nInotify presence does not change the semantics of \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers\nexcept that changes might be detected earlier, and in some cases, to avoid\nmaking regular \\f(CW\\*(C`stat\\*(C'\\fR calls. Even in the presence of inotify support\nthere are many cases where libev has to resort to regular \\f(CW\\*(C`stat\\*(C'\\fR polling,\nbut as long as kernel 2.6.25 or newer is used (2.6.24 and older have too\nmany bugs), the path exists (i.e. stat succeeds), and the path resides on\na local filesystem (libev currently assumes only ext2/3, jfs, reiserfs and\nxfs are fully working) libev usually gets away without polling.\n.PP\nThere is no support for kqueue, as apparently it cannot be used to\nimplement this functionality, due to the requirement of having a file\ndescriptor open on the object at all times, and detecting renames, unlinks\netc. is difficult.\n.PP\n\\fI\\f(CI\\*(C`stat ()\\*(C'\\fI is a synchronous operation\\fR\n.IX Subsection \"stat () is a synchronous operation\"\n.PP\nLibev doesn't normally do any kind of I/O itself, and so is not blocking\nthe process. The exception are \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers \\- those call \\f(CW\\*(C`stat\n()\\*(C'\\fR, which is a synchronous operation.\n.PP\nFor local paths, this usually doesn't matter: unless the system is very\nbusy or the intervals between stat's are large, a stat call will be fast,\nas the path data is usually in memory already (except when starting the\nwatcher).\n.PP\nFor networked file systems, calling \\f(CW\\*(C`stat ()\\*(C'\\fR can block an indefinite\ntime due to network issues, and even under good conditions, a stat call\noften takes multiple milliseconds.\n.PP\nTherefore, it is best to avoid using \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers on networked\npaths, although this is fully supported by libev.\n.PP\n\\fIThe special problem of stat time resolution\\fR\n.IX Subsection \"The special problem of stat time resolution\"\n.PP\nThe \\f(CW\\*(C`stat ()\\*(C'\\fR system call only supports full-second resolution portably,\nand even on systems where the resolution is higher, most file systems\nstill only support whole seconds.\n.PP\nThat means that, if the time is the only thing that changes, you can\neasily miss updates: on the first update, \\f(CW\\*(C`ev_stat\\*(C'\\fR detects a change and\ncalls your callback, which does something. When there is another update\nwithin the same second, \\f(CW\\*(C`ev_stat\\*(C'\\fR will be unable to detect unless the\nstat data does change in other ways (e.g. file size).\n.PP\nThe solution to this is to delay acting on a change for slightly more\nthan a second (or till slightly after the next full second boundary), using\na roughly one-second-delay \\f(CW\\*(C`ev_timer\\*(C'\\fR (e.g. \\f(CW\\*(C`ev_timer_set (w, 0., 1.02);\nev_timer_again (loop, w)\\*(C'\\fR).\n.PP\nThe \\f(CW.02\\fR offset is added to work around small timing inconsistencies\nof some operating systems (where the second counter of the current time\nmight be be delayed. One such system is the Linux kernel, where a call to\n\\&\\f(CW\\*(C`gettimeofday\\*(C'\\fR might return a timestamp with a full second later than\na subsequent \\f(CW\\*(C`time\\*(C'\\fR call \\- if the equivalent of \\f(CW\\*(C`time ()\\*(C'\\fR is used to\nupdate file times then there will be a small window where the kernel uses\nthe previous second to update file times but libev might already execute\nthe timer callback).\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)\" 4\n.IX Item \"ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)\"\n.PD 0\n.IP \"ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)\" 4\n.IX Item \"ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)\"\n.PD\nConfigures the watcher to wait for status changes of the given\n\\&\\f(CW\\*(C`path\\*(C'\\fR. The \\f(CW\\*(C`interval\\*(C'\\fR is a hint on how quickly a change is expected to\nbe detected and should normally be specified as \\f(CW0\\fR to let libev choose\na suitable value. The memory pointed to by \\f(CW\\*(C`path\\*(C'\\fR must point to the same\npath for as long as the watcher is active.\n.Sp\nThe callback will receive an \\f(CW\\*(C`EV_STAT\\*(C'\\fR event when a change was detected,\nrelative to the attributes at the time the watcher was started (or the\nlast change was detected).\n.IP \"ev_stat_stat (loop, ev_stat *)\" 4\n.IX Item \"ev_stat_stat (loop, ev_stat *)\"\nUpdates the stat buffer immediately with new values. If you change the\nwatched path in your callback, you could call this function to avoid\ndetecting this change (while introducing a race condition if you are not\nthe only one changing the path). Can also be useful simply to find out the\nnew values.\n.IP \"ev_statdata attr [read\\-only]\" 4\n.IX Item \"ev_statdata attr [read-only]\"\nThe most-recently detected attributes of the file. Although the type is\n\\&\\f(CW\\*(C`ev_statdata\\*(C'\\fR, this is usually the (or one of the) \\f(CW\\*(C`struct stat\\*(C'\\fR types\nsuitable for your system, but you can only rely on the POSIX-standardised\nmembers to be present. If the \\f(CW\\*(C`st_nlink\\*(C'\\fR member is \\f(CW0\\fR, then there was\nsome error while \\f(CW\\*(C`stat\\*(C'\\fRing the file.\n.IP \"ev_statdata prev [read\\-only]\" 4\n.IX Item \"ev_statdata prev [read-only]\"\nThe previous attributes of the file. The callback gets invoked whenever\n\\&\\f(CW\\*(C`prev\\*(C'\\fR != \\f(CW\\*(C`attr\\*(C'\\fR, or, more precisely, one or more of these members\ndiffer: \\f(CW\\*(C`st_dev\\*(C'\\fR, \\f(CW\\*(C`st_ino\\*(C'\\fR, \\f(CW\\*(C`st_mode\\*(C'\\fR, \\f(CW\\*(C`st_nlink\\*(C'\\fR, \\f(CW\\*(C`st_uid\\*(C'\\fR,\n\\&\\f(CW\\*(C`st_gid\\*(C'\\fR, \\f(CW\\*(C`st_rdev\\*(C'\\fR, \\f(CW\\*(C`st_size\\*(C'\\fR, \\f(CW\\*(C`st_atime\\*(C'\\fR, \\f(CW\\*(C`st_mtime\\*(C'\\fR, \\f(CW\\*(C`st_ctime\\*(C'\\fR.\n.IP \"ev_tstamp interval [read\\-only]\" 4\n.IX Item \"ev_tstamp interval [read-only]\"\nThe specified interval.\n.IP \"const char *path [read\\-only]\" 4\n.IX Item \"const char *path [read-only]\"\nThe file system path that is being watched.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Watch \\f(CW\\*(C`/etc/passwd\\*(C'\\fR for attribute changes.\n.PP\n.Vb 10\n\\&   static void\n\\&   passwd_cb (struct ev_loop *loop, ev_stat *w, int revents)\n\\&   {\n\\&     /* /etc/passwd changed in some way */\n\\&     if (w\\->attr.st_nlink)\n\\&       {\n\\&         printf (\"passwd current size  %ld\\en\", (long)w\\->attr.st_size);\n\\&         printf (\"passwd current atime %ld\\en\", (long)w\\->attr.st_mtime);\n\\&         printf (\"passwd current mtime %ld\\en\", (long)w\\->attr.st_mtime);\n\\&       }\n\\&     else\n\\&       /* you shalt not abuse printf for puts */\n\\&       puts (\"wow, /etc/passwd is not there, expect problems. \"\n\\&             \"if this is windows, they already arrived\\en\");\n\\&   }\n\\&\n\\&   ...\n\\&   ev_stat passwd;\n\\&\n\\&   ev_stat_init (&passwd, passwd_cb, \"/etc/passwd\", 0.);\n\\&   ev_stat_start (loop, &passwd);\n.Ve\n.PP\nExample: Like above, but additionally use a one-second delay so we do not\nmiss updates (however, frequent updates will delay processing, too, so\none might do the work both on \\f(CW\\*(C`ev_stat\\*(C'\\fR callback invocation \\fIand\\fR on\n\\&\\f(CW\\*(C`ev_timer\\*(C'\\fR callback invocation).\n.PP\n.Vb 2\n\\&   static ev_stat passwd;\n\\&   static ev_timer timer;\n\\&\n\\&   static void\n\\&   timer_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     ev_timer_stop (EV_A_ w);\n\\&\n\\&     /* now it\\*(Aqs one second after the most recent passwd change */\n\\&   }\n\\&\n\\&   static void\n\\&   stat_cb (EV_P_ ev_stat *w, int revents)\n\\&   {\n\\&     /* reset the one\\-second timer */\n\\&     ev_timer_again (EV_A_ &timer);\n\\&   }\n\\&\n\\&   ...\n\\&   ev_stat_init (&passwd, stat_cb, \"/etc/passwd\", 0.);\n\\&   ev_stat_start (loop, &passwd);\n\\&   ev_timer_init (&timer, timer_cb, 0., 1.02);\n.Ve\n.ie n .SS \"\"\"ev_idle\"\" \\- when you've got nothing better to do...\"\n.el .SS \"\\f(CWev_idle\\fP \\- when you've got nothing better to do...\"\n.IX Subsection \"ev_idle - when you've got nothing better to do...\"\nIdle watchers trigger events when no other events of the same or higher\npriority are pending (prepare, check and other idle watchers do not count\nas receiving \\*(L\"events\\*(R\").\n.PP\nThat is, as long as your process is busy handling sockets or timeouts\n(or even signals, imagine) of the same or higher priority it will not be\ntriggered. But when your process is idle (or only lower-priority watchers\nare pending), the idle watchers are being called once per event loop\niteration \\- until stopped, that is, or your process receives more events\nand becomes busy again with higher priority stuff.\n.PP\nThe most noteworthy effect is that as long as any idle watchers are\nactive, the process will not block when waiting for new events.\n.PP\nApart from keeping your process non-blocking (which is a useful\neffect on its own sometimes), idle watchers are a good place to do\n\\&\\*(L\"pseudo-background processing\\*(R\", or delay processing stuff to after the\nevent loop has handled all outstanding events.\n.PP\n\\fIAbusing an \\f(CI\\*(C`ev_idle\\*(C'\\fI watcher for its side-effect\\fR\n.IX Subsection \"Abusing an ev_idle watcher for its side-effect\"\n.PP\nAs long as there is at least one active idle watcher, libev will never\nsleep unnecessarily. Or in other words, it will loop as fast as possible.\nFor this to work, the idle watcher doesn't need to be invoked at all \\- the\nlowest priority will do.\n.PP\nThis mode of operation can be useful together with an \\f(CW\\*(C`ev_check\\*(C'\\fR watcher,\nto do something on each event loop iteration \\- for example to balance load\nbetween different connections.\n.PP\nSee \\*(L\"Abusing an ev_check watcher for its side-effect\\*(R\" for a longer\nexample.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_idle_init (ev_idle *, callback)\" 4\n.IX Item \"ev_idle_init (ev_idle *, callback)\"\nInitialises and configures the idle watcher \\- it has no parameters of any\nkind. There is a \\f(CW\\*(C`ev_idle_set\\*(C'\\fR macro, but using it is utterly pointless,\nbelieve me.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Dynamically allocate an \\f(CW\\*(C`ev_idle\\*(C'\\fR watcher, start it, and in the\ncallback, free it. Also, use no error checking, as usual.\n.PP\n.Vb 5\n\\&   static void\n\\&   idle_cb (struct ev_loop *loop, ev_idle *w, int revents)\n\\&   {\n\\&     // stop the watcher\n\\&     ev_idle_stop (loop, w);\n\\&\n\\&     // now we can free it\n\\&     free (w);\n\\&\n\\&     // now do something you wanted to do when the program has\n\\&     // no longer anything immediate to do.\n\\&   }\n\\&\n\\&   ev_idle *idle_watcher = malloc (sizeof (ev_idle));\n\\&   ev_idle_init (idle_watcher, idle_cb);\n\\&   ev_idle_start (loop, idle_watcher);\n.Ve\n.ie n .SS \"\"\"ev_prepare\"\" and \"\"ev_check\"\" \\- customise your event loop!\"\n.el .SS \"\\f(CWev_prepare\\fP and \\f(CWev_check\\fP \\- customise your event loop!\"\n.IX Subsection \"ev_prepare and ev_check - customise your event loop!\"\nPrepare and check watchers are often (but not always) used in pairs:\nprepare watchers get invoked before the process blocks and check watchers\nafterwards.\n.PP\nYou \\fImust not\\fR call \\f(CW\\*(C`ev_run\\*(C'\\fR (or similar functions that enter the\ncurrent event loop) or \\f(CW\\*(C`ev_loop_fork\\*(C'\\fR from either \\f(CW\\*(C`ev_prepare\\*(C'\\fR or\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watchers. Other loops than the current one are fine,\nhowever. The rationale behind this is that you do not need to check\nfor recursion in those watchers, i.e. the sequence will always be\n\\&\\f(CW\\*(C`ev_prepare\\*(C'\\fR, blocking, \\f(CW\\*(C`ev_check\\*(C'\\fR so if you have one watcher of each\nkind they will always be called in pairs bracketing the blocking call.\n.PP\nTheir main purpose is to integrate other event mechanisms into libev and\ntheir use is somewhat advanced. They could be used, for example, to track\nvariable changes, implement your own watchers, integrate net-snmp or a\ncoroutine library and lots more. They are also occasionally useful if\nyou cache some data and want to flush it before blocking (for example,\nin X programs you might want to do an \\f(CW\\*(C`XFlush ()\\*(C'\\fR in an \\f(CW\\*(C`ev_prepare\\*(C'\\fR\nwatcher).\n.PP\nThis is done by examining in each prepare call which file descriptors\nneed to be watched by the other library, registering \\f(CW\\*(C`ev_io\\*(C'\\fR watchers\nfor them and starting an \\f(CW\\*(C`ev_timer\\*(C'\\fR watcher for any timeouts (many\nlibraries provide exactly this functionality). Then, in the check watcher,\nyou check for any events that occurred (by checking the pending status\nof all watchers and stopping them) and call back into the library. The\nI/O and timer callbacks will never actually be called (but must be valid\nnevertheless, because you never know, you know?).\n.PP\nAs another example, the Perl Coro module uses these hooks to integrate\ncoroutines into libev programs, by yielding to other active coroutines\nduring each prepare and only letting the process block if no coroutines\nare ready to run (it's actually more complicated: it only runs coroutines\nwith priority higher than or equal to the event loop and one coroutine\nof lower priority, but only once, using idle watchers to keep the event\nloop from blocking if lower-priority coroutines are active, thus mapping\nlow-priority coroutines to idle/background tasks).\n.PP\nWhen used for this purpose, it is recommended to give \\f(CW\\*(C`ev_check\\*(C'\\fR watchers\nhighest (\\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR) priority, to ensure that they are being run before\nany other watchers after the poll (this doesn't matter for \\f(CW\\*(C`ev_prepare\\*(C'\\fR\nwatchers).\n.PP\nAlso, \\f(CW\\*(C`ev_check\\*(C'\\fR watchers (and \\f(CW\\*(C`ev_prepare\\*(C'\\fR watchers, too) should not\nactivate (\\*(L\"feed\\*(R\") events into libev. While libev fully supports this, they\nmight get executed before other \\f(CW\\*(C`ev_check\\*(C'\\fR watchers did their job. As\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watchers are often used to embed other (non-libev) event\nloops those other event loops might be in an unusable state until their\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watcher ran (always remind yourself to coexist peacefully with\nothers).\n.PP\n\\fIAbusing an \\f(CI\\*(C`ev_check\\*(C'\\fI watcher for its side-effect\\fR\n.IX Subsection \"Abusing an ev_check watcher for its side-effect\"\n.PP\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR (and less often also \\f(CW\\*(C`ev_prepare\\*(C'\\fR) watchers can also be\nuseful because they are called once per event loop iteration. For\nexample, if you want to handle a large number of connections fairly, you\nnormally only do a bit of work for each active connection, and if there\nis more work to do, you wait for the next event loop iteration, so other\nconnections have a chance of making progress.\n.PP\nUsing an \\f(CW\\*(C`ev_check\\*(C'\\fR watcher is almost enough: it will be called on the\nnext event loop iteration. However, that isn't as soon as possible \\-\nwithout external events, your \\f(CW\\*(C`ev_check\\*(C'\\fR watcher will not be invoked.\n.PP\nThis is where \\f(CW\\*(C`ev_idle\\*(C'\\fR watchers come in handy \\- all you need is a\nsingle global idle watcher that is active as long as you have one active\n\\&\\f(CW\\*(C`ev_check\\*(C'\\fR watcher. The \\f(CW\\*(C`ev_idle\\*(C'\\fR watcher makes sure the event loop\nwill not sleep, and the \\f(CW\\*(C`ev_check\\*(C'\\fR watcher makes sure a callback gets\ninvoked. Neither watcher alone can do that.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_prepare_init (ev_prepare *, callback)\" 4\n.IX Item \"ev_prepare_init (ev_prepare *, callback)\"\n.PD 0\n.IP \"ev_check_init (ev_check *, callback)\" 4\n.IX Item \"ev_check_init (ev_check *, callback)\"\n.PD\nInitialises and configures the prepare or check watcher \\- they have no\nparameters of any kind. There are \\f(CW\\*(C`ev_prepare_set\\*(C'\\fR and \\f(CW\\*(C`ev_check_set\\*(C'\\fR\nmacros, but using them is utterly, utterly, utterly and completely\npointless.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nThere are a number of principal ways to embed other event loops or modules\ninto libev. Here are some ideas on how to include libadns into libev\n(there is a Perl module named \\f(CW\\*(C`EV::ADNS\\*(C'\\fR that does this, which you could\nuse as a working example. Another Perl module named \\f(CW\\*(C`EV::Glib\\*(C'\\fR embeds a\nGlib main context into libev, and finally, \\f(CW\\*(C`Glib::EV\\*(C'\\fR embeds \\s-1EV\\s0 into the\nGlib event loop).\n.PP\nMethod 1: Add \\s-1IO\\s0 watchers and a timeout watcher in a prepare handler,\nand in a check watcher, destroy them and call into libadns. What follows\nis pseudo-code only of course. This requires you to either use a low\npriority for the check watcher or use \\f(CW\\*(C`ev_clear_pending\\*(C'\\fR explicitly, as\nthe callbacks for the IO/timeout watchers might not have been called yet.\n.PP\n.Vb 2\n\\&   static ev_io iow [nfd];\n\\&   static ev_timer tw;\n\\&\n\\&   static void\n\\&   io_cb (struct ev_loop *loop, ev_io *w, int revents)\n\\&   {\n\\&   }\n\\&\n\\&   // create io watchers for each fd and a timer before blocking\n\\&   static void\n\\&   adns_prepare_cb (struct ev_loop *loop, ev_prepare *w, int revents)\n\\&   {\n\\&     int timeout = 3600000;\n\\&     struct pollfd fds [nfd];\n\\&     // actual code will need to loop here and realloc etc.\n\\&     adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ()));\n\\&\n\\&     /* the callback is illegal, but won\\*(Aqt be called as we stop during check */\n\\&     ev_timer_init (&tw, 0, timeout * 1e\\-3, 0.);\n\\&     ev_timer_start (loop, &tw);\n\\&\n\\&     // create one ev_io per pollfd\n\\&     for (int i = 0; i < nfd; ++i)\n\\&       {\n\\&         ev_io_init (iow + i, io_cb, fds [i].fd,\n\\&           ((fds [i].events & POLLIN ? EV_READ : 0)\n\\&            | (fds [i].events & POLLOUT ? EV_WRITE : 0)));\n\\&\n\\&         fds [i].revents = 0;\n\\&         ev_io_start (loop, iow + i);\n\\&       }\n\\&   }\n\\&\n\\&   // stop all watchers after blocking\n\\&   static void\n\\&   adns_check_cb (struct ev_loop *loop, ev_check *w, int revents)\n\\&   {\n\\&     ev_timer_stop (loop, &tw);\n\\&\n\\&     for (int i = 0; i < nfd; ++i)\n\\&       {\n\\&         // set the relevant poll flags\n\\&         // could also call adns_processreadable etc. here\n\\&         struct pollfd *fd = fds + i;\n\\&         int revents = ev_clear_pending (iow + i);\n\\&         if (revents & EV_READ ) fd\\->revents |= fd\\->events & POLLIN;\n\\&         if (revents & EV_WRITE) fd\\->revents |= fd\\->events & POLLOUT;\n\\&\n\\&         // now stop the watcher\n\\&         ev_io_stop (loop, iow + i);\n\\&       }\n\\&\n\\&     adns_afterpoll (adns, fds, nfd, timeval_from (ev_now (loop));\n\\&   }\n.Ve\n.PP\nMethod 2: This would be just like method 1, but you run \\f(CW\\*(C`adns_afterpoll\\*(C'\\fR\nin the prepare watcher and would dispose of the check watcher.\n.PP\nMethod 3: If the module to be embedded supports explicit event\nnotification (libadns does), you can also make use of the actual watcher\ncallbacks, and only destroy/create the watchers in the prepare watcher.\n.PP\n.Vb 5\n\\&   static void\n\\&   timer_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     adns_state ads = (adns_state)w\\->data;\n\\&     update_now (EV_A);\n\\&\n\\&     adns_processtimeouts (ads, &tv_now);\n\\&   }\n\\&\n\\&   static void\n\\&   io_cb (EV_P_ ev_io *w, int revents)\n\\&   {\n\\&     adns_state ads = (adns_state)w\\->data;\n\\&     update_now (EV_A);\n\\&\n\\&     if (revents & EV_READ ) adns_processreadable  (ads, w\\->fd, &tv_now);\n\\&     if (revents & EV_WRITE) adns_processwriteable (ads, w\\->fd, &tv_now);\n\\&   }\n\\&\n\\&   // do not ever call adns_afterpoll\n.Ve\n.PP\nMethod 4: Do not use a prepare or check watcher because the module you\nwant to embed is not flexible enough to support it. Instead, you can\noverride their poll function. The drawback with this solution is that the\nmain loop is now no longer controllable by \\s-1EV\\s0. The \\f(CW\\*(C`Glib::EV\\*(C'\\fR module uses\nthis approach, effectively embedding \\s-1EV\\s0 as a client into the horrible\nlibglib event loop.\n.PP\n.Vb 4\n\\&   static gint\n\\&   event_poll_func (GPollFD *fds, guint nfds, gint timeout)\n\\&   {\n\\&     int got_events = 0;\n\\&\n\\&     for (n = 0; n < nfds; ++n)\n\\&       // create/start io watcher that sets the relevant bits in fds[n] and increment got_events\n\\&\n\\&     if (timeout >= 0)\n\\&       // create/start timer\n\\&\n\\&     // poll\n\\&     ev_run (EV_A_ 0);\n\\&\n\\&     // stop timer again\n\\&     if (timeout >= 0)\n\\&       ev_timer_stop (EV_A_ &to);\n\\&\n\\&     // stop io watchers again \\- their callbacks should have set\n\\&     for (n = 0; n < nfds; ++n)\n\\&       ev_io_stop (EV_A_ iow [n]);\n\\&\n\\&     return got_events;\n\\&   }\n.Ve\n.ie n .SS \"\"\"ev_embed\"\" \\- when one backend isn't enough...\"\n.el .SS \"\\f(CWev_embed\\fP \\- when one backend isn't enough...\"\n.IX Subsection \"ev_embed - when one backend isn't enough...\"\nThis is a rather advanced watcher type that lets you embed one event loop\ninto another (currently only \\f(CW\\*(C`ev_io\\*(C'\\fR events are supported in the embedded\nloop, other types of watchers might be handled in a delayed or incorrect\nfashion and must not be used).\n.PP\nThere are primarily two reasons you would want that: work around bugs and\nprioritise I/O.\n.PP\nAs an example for a bug workaround, the kqueue backend might only support\nsockets on some platform, so it is unusable as generic backend, but you\nstill want to make use of it because you have many sockets and it scales\nso nicely. In this case, you would create a kqueue-based loop and embed\nit into your default loop (which might use e.g. poll). Overall operation\nwill be a bit slower because first libev has to call \\f(CW\\*(C`poll\\*(C'\\fR and then\n\\&\\f(CW\\*(C`kevent\\*(C'\\fR, but at least you can use both mechanisms for what they are\nbest: \\f(CW\\*(C`kqueue\\*(C'\\fR for scalable sockets and \\f(CW\\*(C`poll\\*(C'\\fR if you want it to work :)\n.PP\nAs for prioritising I/O: under rare circumstances you have the case where\nsome fds have to be watched and handled very quickly (with low latency),\nand even priorities and idle watchers might have too much overhead. In\nthis case you would put all the high priority stuff in one loop and all\nthe rest in a second one, and embed the second one in the first.\n.PP\nAs long as the watcher is active, the callback will be invoked every\ntime there might be events pending in the embedded loop. The callback\nmust then call \\f(CW\\*(C`ev_embed_sweep (mainloop, watcher)\\*(C'\\fR to make a single\nsweep and invoke their callbacks (the callback doesn't need to invoke the\n\\&\\f(CW\\*(C`ev_embed_sweep\\*(C'\\fR function directly, it could also start an idle watcher\nto give the embedded loop strictly lower priority for example).\n.PP\nYou can also set the callback to \\f(CW0\\fR, in which case the embed watcher\nwill automatically execute the embedded loop sweep whenever necessary.\n.PP\nFork detection will be handled transparently while the \\f(CW\\*(C`ev_embed\\*(C'\\fR watcher\nis active, i.e., the embedded loop will automatically be forked when the\nembedding loop forks. In other cases, the user is responsible for calling\n\\&\\f(CW\\*(C`ev_loop_fork\\*(C'\\fR on the embedded loop.\n.PP\nUnfortunately, not all backends are embeddable: only the ones returned by\n\\&\\f(CW\\*(C`ev_embeddable_backends\\*(C'\\fR are, which, unfortunately, does not include any\nportable one.\n.PP\nSo when you want to use this feature you will always have to be prepared\nthat you cannot get an embeddable loop. The recommended way to get around\nthis is to have a separate variables for your embeddable loop, try to\ncreate it, and if that fails, use the normal loop for everything.\n.PP\n\\fI\\f(CI\\*(C`ev_embed\\*(C'\\fI and fork\\fR\n.IX Subsection \"ev_embed and fork\"\n.PP\nWhile the \\f(CW\\*(C`ev_embed\\*(C'\\fR watcher is running, forks in the embedding loop will\nautomatically be applied to the embedded loop as well, so no special\nfork handling is required in that case. When the watcher is not running,\nhowever, it is still the task of the libev user to call \\f(CW\\*(C`ev_loop_fork ()\\*(C'\\fR\nas applicable.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)\" 4\n.IX Item \"ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)\"\n.PD 0\n.IP \"ev_embed_set (ev_embed *, struct ev_loop *embedded_loop)\" 4\n.IX Item \"ev_embed_set (ev_embed *, struct ev_loop *embedded_loop)\"\n.PD\nConfigures the watcher to embed the given loop, which must be\nembeddable. If the callback is \\f(CW0\\fR, then \\f(CW\\*(C`ev_embed_sweep\\*(C'\\fR will be\ninvoked automatically, otherwise it is the responsibility of the callback\nto invoke it (it will continue to be called until the sweep has been done,\nif you do not want that, you need to temporarily stop the embed watcher).\n.IP \"ev_embed_sweep (loop, ev_embed *)\" 4\n.IX Item \"ev_embed_sweep (loop, ev_embed *)\"\nMake a single, non-blocking sweep over the embedded loop. This works\nsimilarly to \\f(CW\\*(C`ev_run (embedded_loop, EVRUN_NOWAIT)\\*(C'\\fR, but in the most\nappropriate way for embedded loops.\n.IP \"struct ev_loop *other [read\\-only]\" 4\n.IX Item \"struct ev_loop *other [read-only]\"\nThe embedded event loop.\n.PP\n\\fIExamples\\fR\n.IX Subsection \"Examples\"\n.PP\nExample: Try to get an embeddable event loop and embed it into the default\nevent loop. If that is not possible, use the default loop. The default\nloop is stored in \\f(CW\\*(C`loop_hi\\*(C'\\fR, while the embeddable loop is stored in\n\\&\\f(CW\\*(C`loop_lo\\*(C'\\fR (which is \\f(CW\\*(C`loop_hi\\*(C'\\fR in the case no embeddable loop can be\nused).\n.PP\n.Vb 3\n\\&   struct ev_loop *loop_hi = ev_default_init (0);\n\\&   struct ev_loop *loop_lo = 0;\n\\&   ev_embed embed;\n\\&\n\\&   // see if there is a chance of getting one that works\n\\&   // (remember that a flags value of 0 means autodetection)\n\\&   loop_lo = ev_embeddable_backends () & ev_recommended_backends ()\n\\&     ? ev_loop_new (ev_embeddable_backends () & ev_recommended_backends ())\n\\&     : 0;\n\\&\n\\&   // if we got one, then embed it, otherwise default to loop_hi\n\\&   if (loop_lo)\n\\&     {\n\\&       ev_embed_init (&embed, 0, loop_lo);\n\\&       ev_embed_start (loop_hi, &embed);\n\\&     }\n\\&   else\n\\&     loop_lo = loop_hi;\n.Ve\n.PP\nExample: Check if kqueue is available but not recommended and create\na kqueue backend for use with sockets (which usually work with any\nkqueue implementation). Store the kqueue/socket\\-only event loop in\n\\&\\f(CW\\*(C`loop_socket\\*(C'\\fR. (One might optionally use \\f(CW\\*(C`EVFLAG_NOENV\\*(C'\\fR, too).\n.PP\n.Vb 3\n\\&   struct ev_loop *loop = ev_default_init (0);\n\\&   struct ev_loop *loop_socket = 0;\n\\&   ev_embed embed;\n\\&\n\\&   if (ev_supported_backends () & ~ev_recommended_backends () & EVBACKEND_KQUEUE)\n\\&     if ((loop_socket = ev_loop_new (EVBACKEND_KQUEUE))\n\\&       {\n\\&         ev_embed_init (&embed, 0, loop_socket);\n\\&         ev_embed_start (loop, &embed);\n\\&       }\n\\&\n\\&   if (!loop_socket)\n\\&     loop_socket = loop;\n\\&\n\\&   // now use loop_socket for all sockets, and loop for everything else\n.Ve\n.ie n .SS \"\"\"ev_fork\"\" \\- the audacity to resume the event loop after a fork\"\n.el .SS \"\\f(CWev_fork\\fP \\- the audacity to resume the event loop after a fork\"\n.IX Subsection \"ev_fork - the audacity to resume the event loop after a fork\"\nFork watchers are called when a \\f(CW\\*(C`fork ()\\*(C'\\fR was detected (usually because\nwhoever is a good citizen cared to tell libev about it by calling\n\\&\\f(CW\\*(C`ev_loop_fork\\*(C'\\fR). The invocation is done before the event loop blocks next\nand before \\f(CW\\*(C`ev_check\\*(C'\\fR watchers are being called, and only in the child\nafter the fork. If whoever good citizen calling \\f(CW\\*(C`ev_default_fork\\*(C'\\fR cheats\nand calls it in the wrong process, the fork handlers will be invoked, too,\nof course.\n.PP\n\\fIThe special problem of life after fork \\- how is it possible?\\fR\n.IX Subsection \"The special problem of life after fork - how is it possible?\"\n.PP\nMost uses of \\f(CW\\*(C`fork ()\\*(C'\\fR consist of forking, then some simple calls to set\nup/change the process environment, followed by a call to \\f(CW\\*(C`exec()\\*(C'\\fR. This\nsequence should be handled by libev without any problems.\n.PP\nThis changes when the application actually wants to do event handling\nin the child, or both parent in child, in effect \\*(L\"continuing\\*(R\" after the\nfork.\n.PP\nThe default mode of operation (for libev, with application help to detect\nforks) is to duplicate all the state in the child, as would be expected\nwhen \\fIeither\\fR the parent \\fIor\\fR the child process continues.\n.PP\nWhen both processes want to continue using libev, then this is usually the\nwrong result. In that case, usually one process (typically the parent) is\nsupposed to continue with all watchers in place as before, while the other\nprocess typically wants to start fresh, i.e. without any active watchers.\n.PP\nThe cleanest and most efficient way to achieve that with libev is to\nsimply create a new event loop, which of course will be \\*(L\"empty\\*(R\", and\nuse that for new watchers. This has the advantage of not touching more\nmemory than necessary, and thus avoiding the copy-on-write, and the\ndisadvantage of having to use multiple event loops (which do not support\nsignal watchers).\n.PP\nWhen this is not possible, or you want to use the default loop for\nother reasons, then in the process that wants to start \\*(L\"fresh\\*(R\", call\n\\&\\f(CW\\*(C`ev_loop_destroy (EV_DEFAULT)\\*(C'\\fR followed by \\f(CW\\*(C`ev_default_loop (...)\\*(C'\\fR.\nDestroying the default loop will \\*(L\"orphan\\*(R\" (not stop) all registered\nwatchers, so you have to be careful not to execute code that modifies\nthose watchers. Note also that in that case, you have to re-register any\nsignal watchers.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_fork_init (ev_fork *, callback)\" 4\n.IX Item \"ev_fork_init (ev_fork *, callback)\"\nInitialises and configures the fork watcher \\- it has no parameters of any\nkind. There is a \\f(CW\\*(C`ev_fork_set\\*(C'\\fR macro, but using it is utterly pointless,\nreally.\n.ie n .SS \"\"\"ev_cleanup\"\" \\- even the best things end\"\n.el .SS \"\\f(CWev_cleanup\\fP \\- even the best things end\"\n.IX Subsection \"ev_cleanup - even the best things end\"\nCleanup watchers are called just before the event loop is being destroyed\nby a call to \\f(CW\\*(C`ev_loop_destroy\\*(C'\\fR.\n.PP\nWhile there is no guarantee that the event loop gets destroyed, cleanup\nwatchers provide a convenient method to install cleanup hooks for your\nprogram, worker threads and so on \\- you just to make sure to destroy the\nloop when you want them to be invoked.\n.PP\nCleanup watchers are invoked in the same way as any other watcher. Unlike\nall other watchers, they do not keep a reference to the event loop (which\nmakes a lot of sense if you think about it). Like all other watchers, you\ncan call libev functions in the callback, except \\f(CW\\*(C`ev_cleanup_start\\*(C'\\fR.\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_cleanup_init (ev_cleanup *, callback)\" 4\n.IX Item \"ev_cleanup_init (ev_cleanup *, callback)\"\nInitialises and configures the cleanup watcher \\- it has no parameters of\nany kind. There is a \\f(CW\\*(C`ev_cleanup_set\\*(C'\\fR macro, but using it is utterly\npointless, I assure you.\n.PP\nExample: Register an atexit handler to destroy the default loop, so any\ncleanup functions are called.\n.PP\n.Vb 5\n\\&   static void\n\\&   program_exits (void)\n\\&   {\n\\&     ev_loop_destroy (EV_DEFAULT_UC);\n\\&   }\n\\&\n\\&   ...\n\\&   atexit (program_exits);\n.Ve\n.ie n .SS \"\"\"ev_async\"\" \\- how to wake up an event loop\"\n.el .SS \"\\f(CWev_async\\fP \\- how to wake up an event loop\"\n.IX Subsection \"ev_async - how to wake up an event loop\"\nIn general, you cannot use an \\f(CW\\*(C`ev_loop\\*(C'\\fR from multiple threads or other\nasynchronous sources such as signal handlers (as opposed to multiple event\nloops \\- those are of course safe to use in different threads).\n.PP\nSometimes, however, you need to wake up an event loop you do not control,\nfor example because it belongs to another thread. This is what \\f(CW\\*(C`ev_async\\*(C'\\fR\nwatchers do: as long as the \\f(CW\\*(C`ev_async\\*(C'\\fR watcher is active, you can signal\nit by calling \\f(CW\\*(C`ev_async_send\\*(C'\\fR, which is thread\\- and signal safe.\n.PP\nThis functionality is very similar to \\f(CW\\*(C`ev_signal\\*(C'\\fR watchers, as signals,\ntoo, are asynchronous in nature, and signals, too, will be compressed\n(i.e. the number of callback invocations may be less than the number of\n\\&\\f(CW\\*(C`ev_async_send\\*(C'\\fR calls). In fact, you could use signal watchers as a kind\nof \\*(L\"global async watchers\\*(R\" by using a watcher on an otherwise unused\nsignal, and \\f(CW\\*(C`ev_feed_signal\\*(C'\\fR to signal this watcher from another thread,\neven without knowing which loop owns the signal.\n.PP\n\\fIQueueing\\fR\n.IX Subsection \"Queueing\"\n.PP\n\\&\\f(CW\\*(C`ev_async\\*(C'\\fR does not support queueing of data in any way. The reason\nis that the author does not know of a simple (or any) algorithm for a\nmultiple-writer-single-reader queue that works in all cases and doesn't\nneed elaborate support such as pthreads or unportable memory access\nsemantics.\n.PP\nThat means that if you want to queue data, you have to provide your own\nqueue. But at least I can tell you how to implement locking around your\nqueue:\n.IP \"queueing from a signal handler context\" 4\n.IX Item \"queueing from a signal handler context\"\nTo implement race-free queueing, you simply add to the queue in the signal\nhandler but you block the signal handler in the watcher callback. Here is\nan example that does that for some fictitious \\s-1SIGUSR1\\s0 handler:\n.Sp\n.Vb 1\n\\&   static ev_async mysig;\n\\&\n\\&   static void\n\\&   sigusr1_handler (void)\n\\&   {\n\\&     sometype data;\n\\&\n\\&     // no locking etc.\n\\&     queue_put (data);\n\\&     ev_async_send (EV_DEFAULT_ &mysig);\n\\&   }\n\\&\n\\&   static void\n\\&   mysig_cb (EV_P_ ev_async *w, int revents)\n\\&   {\n\\&     sometype data;\n\\&     sigset_t block, prev;\n\\&\n\\&     sigemptyset (&block);\n\\&     sigaddset (&block, SIGUSR1);\n\\&     sigprocmask (SIG_BLOCK, &block, &prev);\n\\&\n\\&     while (queue_get (&data))\n\\&       process (data);\n\\&\n\\&     if (sigismember (&prev, SIGUSR1)\n\\&       sigprocmask (SIG_UNBLOCK, &block, 0);\n\\&   }\n.Ve\n.Sp\n(Note: pthreads in theory requires you to use \\f(CW\\*(C`pthread_setmask\\*(C'\\fR\ninstead of \\f(CW\\*(C`sigprocmask\\*(C'\\fR when you use threads, but libev doesn't do it\neither...).\n.IP \"queueing from a thread context\" 4\n.IX Item \"queueing from a thread context\"\nThe strategy for threads is different, as you cannot (easily) block\nthreads but you can easily preempt them, so to queue safely you need to\nemploy a traditional mutex lock, such as in this pthread example:\n.Sp\n.Vb 2\n\\&   static ev_async mysig;\n\\&   static pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;\n\\&\n\\&   static void\n\\&   otherthread (void)\n\\&   {\n\\&     // only need to lock the actual queueing operation\n\\&     pthread_mutex_lock (&mymutex);\n\\&     queue_put (data);\n\\&     pthread_mutex_unlock (&mymutex);\n\\&\n\\&     ev_async_send (EV_DEFAULT_ &mysig);\n\\&   }\n\\&\n\\&   static void\n\\&   mysig_cb (EV_P_ ev_async *w, int revents)\n\\&   {\n\\&     pthread_mutex_lock (&mymutex);\n\\&\n\\&     while (queue_get (&data))\n\\&       process (data);\n\\&\n\\&     pthread_mutex_unlock (&mymutex);\n\\&   }\n.Ve\n.PP\n\\fIWatcher-Specific Functions and Data Members\\fR\n.IX Subsection \"Watcher-Specific Functions and Data Members\"\n.IP \"ev_async_init (ev_async *, callback)\" 4\n.IX Item \"ev_async_init (ev_async *, callback)\"\nInitialises and configures the async watcher \\- it has no parameters of any\nkind. There is a \\f(CW\\*(C`ev_async_set\\*(C'\\fR macro, but using it is utterly pointless,\ntrust me.\n.IP \"ev_async_send (loop, ev_async *)\" 4\n.IX Item \"ev_async_send (loop, ev_async *)\"\nSends/signals/activates the given \\f(CW\\*(C`ev_async\\*(C'\\fR watcher, that is, feeds\nan \\f(CW\\*(C`EV_ASYNC\\*(C'\\fR event on the watcher into the event loop, and instantly\nreturns.\n.Sp\nUnlike \\f(CW\\*(C`ev_feed_event\\*(C'\\fR, this call is safe to do from other threads,\nsignal or similar contexts (see the discussion of \\f(CW\\*(C`EV_ATOMIC_T\\*(C'\\fR in the\nembedding section below on what exactly this means).\n.Sp\nNote that, as with other watchers in libev, multiple events might get\ncompressed into a single callback invocation (another way to look at\nthis is that \\f(CW\\*(C`ev_async\\*(C'\\fR watchers are level-triggered: they are set on\n\\&\\f(CW\\*(C`ev_async_send\\*(C'\\fR, reset when the event loop detects that).\n.Sp\nThis call incurs the overhead of at most one extra system call per event\nloop iteration, if the event loop is blocked, and no syscall at all if\nthe event loop (or your program) is processing events. That means that\nrepeated calls are basically free (there is no need to avoid calls for\nperformance reasons) and that the overhead becomes smaller (typically\nzero) under load.\n.IP \"bool = ev_async_pending (ev_async *)\" 4\n.IX Item \"bool = ev_async_pending (ev_async *)\"\nReturns a non-zero value when \\f(CW\\*(C`ev_async_send\\*(C'\\fR has been called on the\nwatcher but the event has not yet been processed (or even noted) by the\nevent loop.\n.Sp\n\\&\\f(CW\\*(C`ev_async_send\\*(C'\\fR sets a flag in the watcher and wakes up the loop. When\nthe loop iterates next and checks for the watcher to have become active,\nit will reset the flag again. \\f(CW\\*(C`ev_async_pending\\*(C'\\fR can be used to very\nquickly check whether invoking the loop might be a good idea.\n.Sp\nNot that this does \\fInot\\fR check whether the watcher itself is pending,\nonly whether it has been requested to make this watcher pending: there\nis a time window between the event loop checking and resetting the async\nnotification, and the callback being invoked.\n.SH \"OTHER FUNCTIONS\"\n.IX Header \"OTHER FUNCTIONS\"\nThere are some other functions of possible interest. Described. Here. Now.\n.IP \"ev_once (loop, int fd, int events, ev_tstamp timeout, callback)\" 4\n.IX Item \"ev_once (loop, int fd, int events, ev_tstamp timeout, callback)\"\nThis function combines a simple timer and an I/O watcher, calls your\ncallback on whichever event happens first and automatically stops both\nwatchers. This is useful if you want to wait for a single event on an fd\nor timeout without having to allocate/configure/start/stop/free one or\nmore watchers yourself.\n.Sp\nIf \\f(CW\\*(C`fd\\*(C'\\fR is less than 0, then no I/O watcher will be started and the\n\\&\\f(CW\\*(C`events\\*(C'\\fR argument is being ignored. Otherwise, an \\f(CW\\*(C`ev_io\\*(C'\\fR watcher for\nthe given \\f(CW\\*(C`fd\\*(C'\\fR and \\f(CW\\*(C`events\\*(C'\\fR set will be created and started.\n.Sp\nIf \\f(CW\\*(C`timeout\\*(C'\\fR is less than 0, then no timeout watcher will be\nstarted. Otherwise an \\f(CW\\*(C`ev_timer\\*(C'\\fR watcher with after = \\f(CW\\*(C`timeout\\*(C'\\fR (and\nrepeat = 0) will be started. \\f(CW0\\fR is a valid timeout.\n.Sp\nThe callback has the type \\f(CW\\*(C`void (*cb)(int revents, void *arg)\\*(C'\\fR and is\npassed an \\f(CW\\*(C`revents\\*(C'\\fR set like normal event callbacks (a combination of\n\\&\\f(CW\\*(C`EV_ERROR\\*(C'\\fR, \\f(CW\\*(C`EV_READ\\*(C'\\fR, \\f(CW\\*(C`EV_WRITE\\*(C'\\fR or \\f(CW\\*(C`EV_TIMER\\*(C'\\fR) and the \\f(CW\\*(C`arg\\*(C'\\fR\nvalue passed to \\f(CW\\*(C`ev_once\\*(C'\\fR. Note that it is possible to receive \\fIboth\\fR\na timeout and an io event at the same time \\- you probably should give io\nevents precedence.\n.Sp\nExample: wait up to ten seconds for data to appear on \\s-1STDIN_FILENO\\s0.\n.Sp\n.Vb 7\n\\&   static void stdin_ready (int revents, void *arg)\n\\&   {\n\\&     if (revents & EV_READ)\n\\&       /* stdin might have data for us, joy! */;\n\\&     else if (revents & EV_TIMER)\n\\&       /* doh, nothing entered */;\n\\&   }\n\\&\n\\&   ev_once (STDIN_FILENO, EV_READ, 10., stdin_ready, 0);\n.Ve\n.IP \"ev_feed_fd_event (loop, int fd, int revents)\" 4\n.IX Item \"ev_feed_fd_event (loop, int fd, int revents)\"\nFeed an event on the given fd, as if a file descriptor backend detected\nthe given events.\n.IP \"ev_feed_signal_event (loop, int signum)\" 4\n.IX Item \"ev_feed_signal_event (loop, int signum)\"\nFeed an event as if the given signal occurred. See also \\f(CW\\*(C`ev_feed_signal\\*(C'\\fR,\nwhich is async-safe.\n.SH \"COMMON OR USEFUL IDIOMS (OR BOTH)\"\n.IX Header \"COMMON OR USEFUL IDIOMS (OR BOTH)\"\nThis section explains some common idioms that are not immediately\nobvious. Note that examples are sprinkled over the whole manual, and this\nsection only contains stuff that wouldn't fit anywhere else.\n.SS \"\\s-1ASSOCIATING\\s0 \\s-1CUSTOM\\s0 \\s-1DATA\\s0 \\s-1WITH\\s0 A \\s-1WATCHER\\s0\"\n.IX Subsection \"ASSOCIATING CUSTOM DATA WITH A WATCHER\"\nEach watcher has, by default, a \\f(CW\\*(C`void *data\\*(C'\\fR member that you can read\nor modify at any time: libev will completely ignore it. This can be used\nto associate arbitrary data with your watcher. If you need more data and\ndon't want to allocate memory separately and store a pointer to it in that\ndata member, you can also \\*(L\"subclass\\*(R\" the watcher type and provide your own\ndata:\n.PP\n.Vb 7\n\\&   struct my_io\n\\&   {\n\\&     ev_io io;\n\\&     int otherfd;\n\\&     void *somedata;\n\\&     struct whatever *mostinteresting;\n\\&   };\n\\&\n\\&   ...\n\\&   struct my_io w;\n\\&   ev_io_init (&w.io, my_cb, fd, EV_READ);\n.Ve\n.PP\nAnd since your callback will be called with a pointer to the watcher, you\ncan cast it back to your own type:\n.PP\n.Vb 5\n\\&   static void my_cb (struct ev_loop *loop, ev_io *w_, int revents)\n\\&   {\n\\&     struct my_io *w = (struct my_io *)w_;\n\\&     ...\n\\&   }\n.Ve\n.PP\nMore interesting and less C\\-conformant ways of casting your callback\nfunction type instead have been omitted.\n.SS \"\\s-1BUILDING\\s0 \\s-1YOUR\\s0 \\s-1OWN\\s0 \\s-1COMPOSITE\\s0 \\s-1WATCHERS\\s0\"\n.IX Subsection \"BUILDING YOUR OWN COMPOSITE WATCHERS\"\nAnother common scenario is to use some data structure with multiple\nembedded watchers, in effect creating your own watcher that combines\nmultiple libev event sources into one \\*(L\"super-watcher\\*(R\":\n.PP\n.Vb 6\n\\&   struct my_biggy\n\\&   {\n\\&     int some_data;\n\\&     ev_timer t1;\n\\&     ev_timer t2;\n\\&   }\n.Ve\n.PP\nIn this case getting the pointer to \\f(CW\\*(C`my_biggy\\*(C'\\fR is a bit more\ncomplicated: Either you store the address of your \\f(CW\\*(C`my_biggy\\*(C'\\fR struct in\nthe \\f(CW\\*(C`data\\*(C'\\fR member of the watcher (for woozies or \\*(C+ coders), or you need\nto use some pointer arithmetic using \\f(CW\\*(C`offsetof\\*(C'\\fR inside your watchers (for\nreal programmers):\n.PP\n.Vb 1\n\\&   #include <stddef.h>\n\\&\n\\&   static void\n\\&   t1_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     struct my_biggy big = (struct my_biggy *)\n\\&       (((char *)w) \\- offsetof (struct my_biggy, t1));\n\\&   }\n\\&\n\\&   static void\n\\&   t2_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     struct my_biggy big = (struct my_biggy *)\n\\&       (((char *)w) \\- offsetof (struct my_biggy, t2));\n\\&   }\n.Ve\n.SS \"\\s-1AVOIDING\\s0 \\s-1FINISHING\\s0 \\s-1BEFORE\\s0 \\s-1RETURNING\\s0\"\n.IX Subsection \"AVOIDING FINISHING BEFORE RETURNING\"\nOften you have structures like this in event-based programs:\n.PP\n.Vb 4\n\\&  callback ()\n\\&  {\n\\&    free (request);\n\\&  }\n\\&\n\\&  request = start_new_request (..., callback);\n.Ve\n.PP\nThe intent is to start some \\*(L\"lengthy\\*(R\" operation. The \\f(CW\\*(C`request\\*(C'\\fR could be\nused to cancel the operation, or do other things with it.\n.PP\nIt's not uncommon to have code paths in \\f(CW\\*(C`start_new_request\\*(C'\\fR that\nimmediately invoke the callback, for example, to report errors. Or you add\nsome caching layer that finds that it can skip the lengthy aspects of the\noperation and simply invoke the callback with the result.\n.PP\nThe problem here is that this will happen \\fIbefore\\fR \\f(CW\\*(C`start_new_request\\*(C'\\fR\nhas returned, so \\f(CW\\*(C`request\\*(C'\\fR is not set.\n.PP\nEven if you pass the request by some safer means to the callback, you\nmight want to do something to the request after starting it, such as\ncanceling it, which probably isn't working so well when the callback has\nalready been invoked.\n.PP\nA common way around all these issues is to make sure that\n\\&\\f(CW\\*(C`start_new_request\\*(C'\\fR \\fIalways\\fR returns before the callback is invoked. If\n\\&\\f(CW\\*(C`start_new_request\\*(C'\\fR immediately knows the result, it can artificially\ndelay invoking the callback by using a \\f(CW\\*(C`prepare\\*(C'\\fR or \\f(CW\\*(C`idle\\*(C'\\fR watcher for\nexample, or more sneakily, by reusing an existing (stopped) watcher and\npushing it into the pending queue:\n.PP\n.Vb 2\n\\&   ev_set_cb (watcher, callback);\n\\&   ev_feed_event (EV_A_ watcher, 0);\n.Ve\n.PP\nThis way, \\f(CW\\*(C`start_new_request\\*(C'\\fR can safely return before the callback is\ninvoked, while not delaying callback invocation too much.\n.SS \"\\s-1MODEL/NESTED\\s0 \\s-1EVENT\\s0 \\s-1LOOP\\s0 \\s-1INVOCATIONS\\s0 \\s-1AND\\s0 \\s-1EXIT\\s0 \\s-1CONDITIONS\\s0\"\n.IX Subsection \"MODEL/NESTED EVENT LOOP INVOCATIONS AND EXIT CONDITIONS\"\nOften (especially in \\s-1GUI\\s0 toolkits) there are places where you have\n\\&\\fImodal\\fR interaction, which is most easily implemented by recursively\ninvoking \\f(CW\\*(C`ev_run\\*(C'\\fR.\n.PP\nThis brings the problem of exiting \\- a callback might want to finish the\nmain \\f(CW\\*(C`ev_run\\*(C'\\fR call, but not the nested one (e.g. user clicked \\*(L\"Quit\\*(R\", but\na modal \\*(L\"Are you sure?\\*(R\" dialog is still waiting), or just the nested one\nand not the main one (e.g. user clocked \\*(L\"Ok\\*(R\" in a modal dialog), or some\nother combination: In these cases, a simple \\f(CW\\*(C`ev_break\\*(C'\\fR will not work.\n.PP\nThe solution is to maintain \\*(L\"break this loop\\*(R\" variable for each \\f(CW\\*(C`ev_run\\*(C'\\fR\ninvocation, and use a loop around \\f(CW\\*(C`ev_run\\*(C'\\fR until the condition is\ntriggered, using \\f(CW\\*(C`EVRUN_ONCE\\*(C'\\fR:\n.PP\n.Vb 2\n\\&   // main loop\n\\&   int exit_main_loop = 0;\n\\&\n\\&   while (!exit_main_loop)\n\\&     ev_run (EV_DEFAULT_ EVRUN_ONCE);\n\\&\n\\&   // in a modal watcher\n\\&   int exit_nested_loop = 0;\n\\&\n\\&   while (!exit_nested_loop)\n\\&     ev_run (EV_A_ EVRUN_ONCE);\n.Ve\n.PP\nTo exit from any of these loops, just set the corresponding exit variable:\n.PP\n.Vb 2\n\\&   // exit modal loop\n\\&   exit_nested_loop = 1;\n\\&\n\\&   // exit main program, after modal loop is finished\n\\&   exit_main_loop = 1;\n\\&\n\\&   // exit both\n\\&   exit_main_loop = exit_nested_loop = 1;\n.Ve\n.SS \"\\s-1THREAD\\s0 \\s-1LOCKING\\s0 \\s-1EXAMPLE\\s0\"\n.IX Subsection \"THREAD LOCKING EXAMPLE\"\nHere is a fictitious example of how to run an event loop in a different\nthread from where callbacks are being invoked and watchers are\ncreated/added/removed.\n.PP\nFor a real-world example, see the \\f(CW\\*(C`EV::Loop::Async\\*(C'\\fR perl module,\nwhich uses exactly this technique (which is suited for many high-level\nlanguages).\n.PP\nThe example uses a pthread mutex to protect the loop data, a condition\nvariable to wait for callback invocations, an async watcher to notify the\nevent loop thread and an unspecified mechanism to wake up the main thread.\n.PP\nFirst, you need to associate some data with the event loop:\n.PP\n.Vb 6\n\\&   typedef struct {\n\\&     mutex_t lock; /* global loop lock */\n\\&     ev_async async_w;\n\\&     thread_t tid;\n\\&     cond_t invoke_cv;\n\\&   } userdata;\n\\&\n\\&   void prepare_loop (EV_P)\n\\&   {\n\\&      // for simplicity, we use a static userdata struct.\n\\&      static userdata u;\n\\&\n\\&      ev_async_init (&u\\->async_w, async_cb);\n\\&      ev_async_start (EV_A_ &u\\->async_w);\n\\&\n\\&      pthread_mutex_init (&u\\->lock, 0);\n\\&      pthread_cond_init (&u\\->invoke_cv, 0);\n\\&\n\\&      // now associate this with the loop\n\\&      ev_set_userdata (EV_A_ u);\n\\&      ev_set_invoke_pending_cb (EV_A_ l_invoke);\n\\&      ev_set_loop_release_cb (EV_A_ l_release, l_acquire);\n\\&\n\\&      // then create the thread running ev_run\n\\&      pthread_create (&u\\->tid, 0, l_run, EV_A);\n\\&   }\n.Ve\n.PP\nThe callback for the \\f(CW\\*(C`ev_async\\*(C'\\fR watcher does nothing: the watcher is used\nsolely to wake up the event loop so it takes notice of any new watchers\nthat might have been added:\n.PP\n.Vb 5\n\\&   static void\n\\&   async_cb (EV_P_ ev_async *w, int revents)\n\\&   {\n\\&      // just used for the side effects\n\\&   }\n.Ve\n.PP\nThe \\f(CW\\*(C`l_release\\*(C'\\fR and \\f(CW\\*(C`l_acquire\\*(C'\\fR callbacks simply unlock/lock the mutex\nprotecting the loop data, respectively.\n.PP\n.Vb 6\n\\&   static void\n\\&   l_release (EV_P)\n\\&   {\n\\&     userdata *u = ev_userdata (EV_A);\n\\&     pthread_mutex_unlock (&u\\->lock);\n\\&   }\n\\&\n\\&   static void\n\\&   l_acquire (EV_P)\n\\&   {\n\\&     userdata *u = ev_userdata (EV_A);\n\\&     pthread_mutex_lock (&u\\->lock);\n\\&   }\n.Ve\n.PP\nThe event loop thread first acquires the mutex, and then jumps straight\ninto \\f(CW\\*(C`ev_run\\*(C'\\fR:\n.PP\n.Vb 4\n\\&   void *\n\\&   l_run (void *thr_arg)\n\\&   {\n\\&     struct ev_loop *loop = (struct ev_loop *)thr_arg;\n\\&\n\\&     l_acquire (EV_A);\n\\&     pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);\n\\&     ev_run (EV_A_ 0);\n\\&     l_release (EV_A);\n\\&\n\\&     return 0;\n\\&   }\n.Ve\n.PP\nInstead of invoking all pending watchers, the \\f(CW\\*(C`l_invoke\\*(C'\\fR callback will\nsignal the main thread via some unspecified mechanism (signals? pipe\nwrites? \\f(CW\\*(C`Async::Interrupt\\*(C'\\fR?) and then waits until all pending watchers\nhave been called (in a while loop because a) spurious wakeups are possible\nand b) skipping inter-thread-communication when there are no pending\nwatchers is very beneficial):\n.PP\n.Vb 4\n\\&   static void\n\\&   l_invoke (EV_P)\n\\&   {\n\\&     userdata *u = ev_userdata (EV_A);\n\\&\n\\&     while (ev_pending_count (EV_A))\n\\&       {\n\\&         wake_up_other_thread_in_some_magic_or_not_so_magic_way ();\n\\&         pthread_cond_wait (&u\\->invoke_cv, &u\\->lock);\n\\&       }\n\\&   }\n.Ve\n.PP\nNow, whenever the main thread gets told to invoke pending watchers, it\nwill grab the lock, call \\f(CW\\*(C`ev_invoke_pending\\*(C'\\fR and then signal the loop\nthread to continue:\n.PP\n.Vb 4\n\\&   static void\n\\&   real_invoke_pending (EV_P)\n\\&   {\n\\&     userdata *u = ev_userdata (EV_A);\n\\&\n\\&     pthread_mutex_lock (&u\\->lock);\n\\&     ev_invoke_pending (EV_A);\n\\&     pthread_cond_signal (&u\\->invoke_cv);\n\\&     pthread_mutex_unlock (&u\\->lock);\n\\&   }\n.Ve\n.PP\nWhenever you want to start/stop a watcher or do other modifications to an\nevent loop, you will now have to lock:\n.PP\n.Vb 2\n\\&   ev_timer timeout_watcher;\n\\&   userdata *u = ev_userdata (EV_A);\n\\&\n\\&   ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);\n\\&\n\\&   pthread_mutex_lock (&u\\->lock);\n\\&   ev_timer_start (EV_A_ &timeout_watcher);\n\\&   ev_async_send (EV_A_ &u\\->async_w);\n\\&   pthread_mutex_unlock (&u\\->lock);\n.Ve\n.PP\nNote that sending the \\f(CW\\*(C`ev_async\\*(C'\\fR watcher is required because otherwise\nan event loop currently blocking in the kernel will have no knowledge\nabout the newly added timer. By waking up the loop it will pick up any new\nwatchers in the next event loop iteration.\n.SS \"\\s-1THREADS\\s0, \\s-1COROUTINES\\s0, \\s-1CONTINUATIONS\\s0, \\s-1QUEUES\\s0... \\s-1INSTEAD\\s0 \\s-1OF\\s0 \\s-1CALLBACKS\\s0\"\n.IX Subsection \"THREADS, COROUTINES, CONTINUATIONS, QUEUES... INSTEAD OF CALLBACKS\"\nWhile the overhead of a callback that e.g. schedules a thread is small, it\nis still an overhead. If you embed libev, and your main usage is with some\nkind of threads or coroutines, you might want to customise libev so that\ndoesn't need callbacks anymore.\n.PP\nImagine you have coroutines that you can switch to using a function\n\\&\\f(CW\\*(C`switch_to (coro)\\*(C'\\fR, that libev runs in a coroutine called \\f(CW\\*(C`libev_coro\\*(C'\\fR\nand that due to some magic, the currently active coroutine is stored in a\nglobal called \\f(CW\\*(C`current_coro\\*(C'\\fR. Then you can build your own \\*(L\"wait for libev\nevent\\*(R\" primitive by changing \\f(CW\\*(C`EV_CB_DECLARE\\*(C'\\fR and \\f(CW\\*(C`EV_CB_INVOKE\\*(C'\\fR (note\nthe differing \\f(CW\\*(C`;\\*(C'\\fR conventions):\n.PP\n.Vb 2\n\\&   #define EV_CB_DECLARE(type)   struct my_coro *cb;\n\\&   #define EV_CB_INVOKE(watcher) switch_to ((watcher)\\->cb)\n.Ve\n.PP\nThat means instead of having a C callback function, you store the\ncoroutine to switch to in each watcher, and instead of having libev call\nyour callback, you instead have it switch to that coroutine.\n.PP\nA coroutine might now wait for an event with a function called\n\\&\\f(CW\\*(C`wait_for_event\\*(C'\\fR. (the watcher needs to be started, as always, but it doesn't\nmatter when, or whether the watcher is active or not when this function is\ncalled):\n.PP\n.Vb 6\n\\&   void\n\\&   wait_for_event (ev_watcher *w)\n\\&   {\n\\&     ev_set_cb (w, current_coro);\n\\&     switch_to (libev_coro);\n\\&   }\n.Ve\n.PP\nThat basically suspends the coroutine inside \\f(CW\\*(C`wait_for_event\\*(C'\\fR and\ncontinues the libev coroutine, which, when appropriate, switches back to\nthis or any other coroutine.\n.PP\nYou can do similar tricks if you have, say, threads with an event queue \\-\ninstead of storing a coroutine, you store the queue object and instead of\nswitching to a coroutine, you push the watcher onto the queue and notify\nany waiters.\n.PP\nTo embed libev, see \\*(L\"\\s-1EMBEDDING\\s0\\*(R\", but in short, it's easiest to create two\nfiles, \\fImy_ev.h\\fR and \\fImy_ev.c\\fR that include the respective libev files:\n.PP\n.Vb 4\n\\&   // my_ev.h\n\\&   #define EV_CB_DECLARE(type)   struct my_coro *cb;\n\\&   #define EV_CB_INVOKE(watcher) switch_to ((watcher)\\->cb)\n\\&   #include \"../libev/ev.h\"\n\\&\n\\&   // my_ev.c\n\\&   #define EV_H \"my_ev.h\"\n\\&   #include \"../libev/ev.c\"\n.Ve\n.PP\nAnd then use \\fImy_ev.h\\fR when you would normally use \\fIev.h\\fR, and compile\n\\&\\fImy_ev.c\\fR into your project. When properly specifying include paths, you\ncan even use \\fIev.h\\fR as header file name directly.\n.SH \"LIBEVENT EMULATION\"\n.IX Header \"LIBEVENT EMULATION\"\nLibev offers a compatibility emulation layer for libevent. It cannot\nemulate the internals of libevent, so here are some usage hints:\n.IP \"\\(bu\" 4\nOnly the libevent\\-1.4.1\\-beta \\s-1API\\s0 is being emulated.\n.Sp\nThis was the newest libevent version available when libev was implemented,\nand is still mostly unchanged in 2010.\n.IP \"\\(bu\" 4\nUse it by including <event.h>, as usual.\n.IP \"\\(bu\" 4\nThe following members are fully supported: ev_base, ev_callback,\nev_arg, ev_fd, ev_res, ev_events.\n.IP \"\\(bu\" 4\nAvoid using ev_flags and the EVLIST_*\\-macros, while it is\nmaintained by libev, it does not work exactly the same way as in libevent (consider\nit a private \\s-1API\\s0).\n.IP \"\\(bu\" 4\nPriorities are not currently supported. Initialising priorities\nwill fail and all watchers will have the same priority, even though there\nis an ev_pri field.\n.IP \"\\(bu\" 4\nIn libevent, the last base created gets the signals, in libev, the\nbase that registered the signal gets the signals.\n.IP \"\\(bu\" 4\nOther members are not supported.\n.IP \"\\(bu\" 4\nThe libev emulation is \\fInot\\fR \\s-1ABI\\s0 compatible to libevent, you need\nto use the libev header file and library.\n.SH \"\\*(C+ SUPPORT\"\n.IX Header \" SUPPORT\"\n.SS \"C \\s-1API\\s0\"\n.IX Subsection \"C API\"\nThe normal C \\s-1API\\s0 should work fine when used from \\*(C+: both ev.h and the\nlibev sources can be compiled as \\*(C+. Therefore, code that uses the C \\s-1API\\s0\nwill work fine.\n.PP\nProper exception specifications might have to be added to callbacks passed\nto libev: exceptions may be thrown only from watcher callbacks, all\nother callbacks (allocator, syserr, loop acquire/release and periodic\nreschedule callbacks) must not throw exceptions, and might need a \\f(CW\\*(C`throw\n()\\*(C'\\fR specification. If you have code that needs to be compiled as both C\nand \\*(C+ you can use the \\f(CW\\*(C`EV_THROW\\*(C'\\fR macro for this:\n.PP\n.Vb 6\n\\&   static void\n\\&   fatal_error (const char *msg) EV_THROW\n\\&   {\n\\&     perror (msg);\n\\&     abort ();\n\\&   }\n\\&\n\\&   ...\n\\&   ev_set_syserr_cb (fatal_error);\n.Ve\n.PP\nThe only \\s-1API\\s0 functions that can currently throw exceptions are \\f(CW\\*(C`ev_run\\*(C'\\fR,\n\\&\\f(CW\\*(C`ev_invoke\\*(C'\\fR, \\f(CW\\*(C`ev_invoke_pending\\*(C'\\fR and \\f(CW\\*(C`ev_loop_destroy\\*(C'\\fR (the latter\nbecause it runs cleanup watchers).\n.PP\nThrowing exceptions in watcher callbacks is only supported if libev itself\nis compiled with a \\*(C+ compiler or your C and \\*(C+ environments allow\nthrowing exceptions through C libraries (most do).\n.SS \"\\*(C+ \\s-1API\\s0\"\n.IX Subsection \" API\"\nLibev comes with some simplistic wrapper classes for \\*(C+ that mainly allow\nyou to use some convenience methods to start/stop watchers and also change\nthe callback model to a model using method callbacks on objects.\n.PP\nTo use it,\n.PP\n.Vb 1\n\\&   #include <ev++.h>\n.Ve\n.PP\nThis automatically includes \\fIev.h\\fR and puts all of its definitions (many\nof them macros) into the global namespace. All \\*(C+ specific things are\nput into the \\f(CW\\*(C`ev\\*(C'\\fR namespace. It should support all the same embedding\noptions as \\fIev.h\\fR, most notably \\f(CW\\*(C`EV_MULTIPLICITY\\*(C'\\fR.\n.PP\nCare has been taken to keep the overhead low. The only data member the \\*(C+\nclasses add (compared to plain C\\-style watchers) is the event loop pointer\nthat the watcher is associated with (or no additional members at all if\nyou disable \\f(CW\\*(C`EV_MULTIPLICITY\\*(C'\\fR when embedding libev).\n.PP\nCurrently, functions, static and non-static member functions and classes\nwith \\f(CW\\*(C`operator ()\\*(C'\\fR can be used as callbacks. Other types should be easy\nto add as long as they only need one additional pointer for context. If\nyou need support for other types of functors please contact the author\n(preferably after implementing it).\n.PP\nFor all this to work, your \\*(C+ compiler either has to use the same calling\nconventions as your C compiler (for static member functions), or you have\nto embed libev and compile libev itself as \\*(C+.\n.PP\nHere is a list of things available in the \\f(CW\\*(C`ev\\*(C'\\fR namespace:\n.ie n .IP \"\"\"ev::READ\"\", \"\"ev::WRITE\"\" etc.\" 4\n.el .IP \"\\f(CWev::READ\\fR, \\f(CWev::WRITE\\fR etc.\" 4\n.IX Item \"ev::READ, ev::WRITE etc.\"\nThese are just enum values with the same values as the \\f(CW\\*(C`EV_READ\\*(C'\\fR etc.\nmacros from \\fIev.h\\fR.\n.ie n .IP \"\"\"ev::tstamp\"\", \"\"ev::now\"\"\" 4\n.el .IP \"\\f(CWev::tstamp\\fR, \\f(CWev::now\\fR\" 4\n.IX Item \"ev::tstamp, ev::now\"\nAliases to the same types/functions as with the \\f(CW\\*(C`ev_\\*(C'\\fR prefix.\n.ie n .IP \"\"\"ev::io\"\", \"\"ev::timer\"\", \"\"ev::periodic\"\", \"\"ev::idle\"\", \"\"ev::sig\"\" etc.\" 4\n.el .IP \"\\f(CWev::io\\fR, \\f(CWev::timer\\fR, \\f(CWev::periodic\\fR, \\f(CWev::idle\\fR, \\f(CWev::sig\\fR etc.\" 4\n.IX Item \"ev::io, ev::timer, ev::periodic, ev::idle, ev::sig etc.\"\nFor each \\f(CW\\*(C`ev_TYPE\\*(C'\\fR watcher in \\fIev.h\\fR there is a corresponding class of\nthe same name in the \\f(CW\\*(C`ev\\*(C'\\fR namespace, with the exception of \\f(CW\\*(C`ev_signal\\*(C'\\fR\nwhich is called \\f(CW\\*(C`ev::sig\\*(C'\\fR to avoid clashes with the \\f(CW\\*(C`signal\\*(C'\\fR macro\ndefined by many implementations.\n.Sp\nAll of those classes have these methods:\n.RS 4\n.IP \"ev::TYPE::TYPE ()\" 4\n.IX Item \"ev::TYPE::TYPE ()\"\n.PD 0\n.IP \"ev::TYPE::TYPE (loop)\" 4\n.IX Item \"ev::TYPE::TYPE (loop)\"\n.IP \"ev::TYPE::~TYPE\" 4\n.IX Item \"ev::TYPE::~TYPE\"\n.PD\nThe constructor (optionally) takes an event loop to associate the watcher\nwith. If it is omitted, it will use \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR.\n.Sp\nThe constructor calls \\f(CW\\*(C`ev_init\\*(C'\\fR for you, which means you have to call the\n\\&\\f(CW\\*(C`set\\*(C'\\fR method before starting it.\n.Sp\nIt will not set a callback, however: You have to call the templated \\f(CW\\*(C`set\\*(C'\\fR\nmethod to set a callback before you can start the watcher.\n.Sp\n(The reason why you have to use a method is a limitation in \\*(C+ which does\nnot allow explicit template arguments for constructors).\n.Sp\nThe destructor automatically stops the watcher if it is active.\n.IP \"w\\->set<class, &class::method> (object *)\" 4\n.IX Item \"w->set<class, &class::method> (object *)\"\nThis method sets the callback method to call. The method has to have a\nsignature of \\f(CW\\*(C`void (*)(ev_TYPE &, int)\\*(C'\\fR, it receives the watcher as\nfirst argument and the \\f(CW\\*(C`revents\\*(C'\\fR as second. The object must be given as\nparameter and is stored in the \\f(CW\\*(C`data\\*(C'\\fR member of the watcher.\n.Sp\nThis method synthesizes efficient thunking code to call your method from\nthe C callback that libev requires. If your compiler can inline your\ncallback (i.e. it is visible to it at the place of the \\f(CW\\*(C`set\\*(C'\\fR call and\nyour compiler is good :), then the method will be fully inlined into the\nthunking function, making it as fast as a direct C callback.\n.Sp\nExample: simple class declaration and watcher initialisation\n.Sp\n.Vb 4\n\\&   struct myclass\n\\&   {\n\\&     void io_cb (ev::io &w, int revents) { }\n\\&   }\n\\&\n\\&   myclass obj;\n\\&   ev::io iow;\n\\&   iow.set <myclass, &myclass::io_cb> (&obj);\n.Ve\n.IP \"w\\->set (object *)\" 4\n.IX Item \"w->set (object *)\"\nThis is a variation of a method callback \\- leaving out the method to call\nwill default the method to \\f(CW\\*(C`operator ()\\*(C'\\fR, which makes it possible to use\nfunctor objects without having to manually specify the \\f(CW\\*(C`operator ()\\*(C'\\fR all\nthe time. Incidentally, you can then also leave out the template argument\nlist.\n.Sp\nThe \\f(CW\\*(C`operator ()\\*(C'\\fR method prototype must be \\f(CW\\*(C`void operator ()(watcher &w,\nint revents)\\*(C'\\fR.\n.Sp\nSee the method\\-\\f(CW\\*(C`set\\*(C'\\fR above for more details.\n.Sp\nExample: use a functor object as callback.\n.Sp\n.Vb 7\n\\&   struct myfunctor\n\\&   {\n\\&     void operator() (ev::io &w, int revents)\n\\&     {\n\\&       ...\n\\&     }\n\\&   }\n\\&\n\\&   myfunctor f;\n\\&\n\\&   ev::io w;\n\\&   w.set (&f);\n.Ve\n.IP \"w\\->set<function> (void *data = 0)\" 4\n.IX Item \"w->set<function> (void *data = 0)\"\nAlso sets a callback, but uses a static method or plain function as\ncallback. The optional \\f(CW\\*(C`data\\*(C'\\fR argument will be stored in the watcher's\n\\&\\f(CW\\*(C`data\\*(C'\\fR member and is free for you to use.\n.Sp\nThe prototype of the \\f(CW\\*(C`function\\*(C'\\fR must be \\f(CW\\*(C`void (*)(ev::TYPE &w, int)\\*(C'\\fR.\n.Sp\nSee the method\\-\\f(CW\\*(C`set\\*(C'\\fR above for more details.\n.Sp\nExample: Use a plain function as callback.\n.Sp\n.Vb 2\n\\&   static void io_cb (ev::io &w, int revents) { }\n\\&   iow.set <io_cb> ();\n.Ve\n.IP \"w\\->set (loop)\" 4\n.IX Item \"w->set (loop)\"\nAssociates a different \\f(CW\\*(C`struct ev_loop\\*(C'\\fR with this watcher. You can only\ndo this when the watcher is inactive (and not pending either).\n.IP \"w\\->set ([arguments])\" 4\n.IX Item \"w->set ([arguments])\"\nBasically the same as \\f(CW\\*(C`ev_TYPE_set\\*(C'\\fR (except for \\f(CW\\*(C`ev::embed\\*(C'\\fR watchers>),\nwith the same arguments. Either this method or a suitable start method\nmust be called at least once. Unlike the C counterpart, an active watcher\ngets automatically stopped and restarted when reconfiguring it with this\nmethod.\n.Sp\nFor \\f(CW\\*(C`ev::embed\\*(C'\\fR watchers this method is called \\f(CW\\*(C`set_embed\\*(C'\\fR, to avoid\nclashing with the \\f(CW\\*(C`set (loop)\\*(C'\\fR method.\n.IP \"w\\->start ()\" 4\n.IX Item \"w->start ()\"\nStarts the watcher. Note that there is no \\f(CW\\*(C`loop\\*(C'\\fR argument, as the\nconstructor already stores the event loop.\n.IP \"w\\->start ([arguments])\" 4\n.IX Item \"w->start ([arguments])\"\nInstead of calling \\f(CW\\*(C`set\\*(C'\\fR and \\f(CW\\*(C`start\\*(C'\\fR methods separately, it is often\nconvenient to wrap them in one call. Uses the same type of arguments as\nthe configure \\f(CW\\*(C`set\\*(C'\\fR method of the watcher.\n.IP \"w\\->stop ()\" 4\n.IX Item \"w->stop ()\"\nStops the watcher if it is active. Again, no \\f(CW\\*(C`loop\\*(C'\\fR argument.\n.ie n .IP \"w\\->again () (\"\"ev::timer\"\", \"\"ev::periodic\"\" only)\" 4\n.el .IP \"w\\->again () (\\f(CWev::timer\\fR, \\f(CWev::periodic\\fR only)\" 4\n.IX Item \"w->again () (ev::timer, ev::periodic only)\"\nFor \\f(CW\\*(C`ev::timer\\*(C'\\fR and \\f(CW\\*(C`ev::periodic\\*(C'\\fR, this invokes the corresponding\n\\&\\f(CW\\*(C`ev_TYPE_again\\*(C'\\fR function.\n.ie n .IP \"w\\->sweep () (\"\"ev::embed\"\" only)\" 4\n.el .IP \"w\\->sweep () (\\f(CWev::embed\\fR only)\" 4\n.IX Item \"w->sweep () (ev::embed only)\"\nInvokes \\f(CW\\*(C`ev_embed_sweep\\*(C'\\fR.\n.ie n .IP \"w\\->update () (\"\"ev::stat\"\" only)\" 4\n.el .IP \"w\\->update () (\\f(CWev::stat\\fR only)\" 4\n.IX Item \"w->update () (ev::stat only)\"\nInvokes \\f(CW\\*(C`ev_stat_stat\\*(C'\\fR.\n.RE\n.RS 4\n.RE\n.PP\nExample: Define a class with two I/O and idle watchers, start the I/O\nwatchers in the constructor.\n.PP\n.Vb 5\n\\&   class myclass\n\\&   {\n\\&     ev::io   io  ; void io_cb   (ev::io   &w, int revents);\n\\&     ev::io   io2 ; void io2_cb  (ev::io   &w, int revents);\n\\&     ev::idle idle; void idle_cb (ev::idle &w, int revents);\n\\&\n\\&     myclass (int fd)\n\\&     {\n\\&       io  .set <myclass, &myclass::io_cb  > (this);\n\\&       io2 .set <myclass, &myclass::io2_cb > (this);\n\\&       idle.set <myclass, &myclass::idle_cb> (this);\n\\&\n\\&       io.set (fd, ev::WRITE); // configure the watcher\n\\&       io.start ();            // start it whenever convenient\n\\&\n\\&       io2.start (fd, ev::READ); // set + start in one call\n\\&     }\n\\&   };\n.Ve\n.SH \"OTHER LANGUAGE BINDINGS\"\n.IX Header \"OTHER LANGUAGE BINDINGS\"\nLibev does not offer other language bindings itself, but bindings for a\nnumber of languages exist in the form of third-party packages. If you know\nany interesting language binding in addition to the ones listed here, drop\nme a note.\n.IP \"Perl\" 4\n.IX Item \"Perl\"\nThe \\s-1EV\\s0 module implements the full libev \\s-1API\\s0 and is actually used to test\nlibev. \\s-1EV\\s0 is developed together with libev. Apart from the \\s-1EV\\s0 core module,\nthere are additional modules that implement libev-compatible interfaces\nto \\f(CW\\*(C`libadns\\*(C'\\fR (\\f(CW\\*(C`EV::ADNS\\*(C'\\fR, but \\f(CW\\*(C`AnyEvent::DNS\\*(C'\\fR is preferred nowadays),\n\\&\\f(CW\\*(C`Net::SNMP\\*(C'\\fR (\\f(CW\\*(C`Net::SNMP::EV\\*(C'\\fR) and the \\f(CW\\*(C`libglib\\*(C'\\fR event core (\\f(CW\\*(C`Glib::EV\\*(C'\\fR\nand \\f(CW\\*(C`EV::Glib\\*(C'\\fR).\n.Sp\nIt can be found and installed via \\s-1CPAN\\s0, its homepage is at\n<http://software.schmorp.de/pkg/EV>.\n.IP \"Python\" 4\n.IX Item \"Python\"\nPython bindings can be found at <http://code.google.com/p/pyev/>. It\nseems to be quite complete and well-documented.\n.IP \"Ruby\" 4\n.IX Item \"Ruby\"\nTony Arcieri has written a ruby extension that offers access to a subset\nof the libev \\s-1API\\s0 and adds file handle abstractions, asynchronous \\s-1DNS\\s0 and\nmore on top of it. It can be found via gem servers. Its homepage is at\n<http://rev.rubyforge.org/>.\n.Sp\nRoger Pack reports that using the link order \\f(CW\\*(C`\\-lws2_32 \\-lmsvcrt\\-ruby\\-190\\*(C'\\fR\nmakes rev work even on mingw.\n.IP \"Haskell\" 4\n.IX Item \"Haskell\"\nA haskell binding to libev is available at\nhttp://hackage.haskell.org/cgi\\-bin/hackage\\-scripts/package/hlibev <http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hlibev>.\n.IP \"D\" 4\n.IX Item \"D\"\nLeandro Lucarella has written a D language binding (\\fIev.d\\fR) for libev, to\nbe found at <http://www.llucax.com.ar/proj/ev.d/index.html>.\n.IP \"Ocaml\" 4\n.IX Item \"Ocaml\"\nErkki Seppala has written Ocaml bindings for libev, to be found at\nhttp://modeemi.cs.tut.fi/~flux/software/ocaml\\-ev/ <http://modeemi.cs.tut.fi/~flux/software/ocaml-ev/>.\n.IP \"Lua\" 4\n.IX Item \"Lua\"\nBrian Maher has written a partial interface to libev for lua (at the\ntime of this writing, only \\f(CW\\*(C`ev_io\\*(C'\\fR and \\f(CW\\*(C`ev_timer\\*(C'\\fR), to be found at\nhttp://github.com/brimworks/lua\\-ev <http://github.com/brimworks/lua-ev>.\n.IP \"Javascript\" 4\n.IX Item \"Javascript\"\nNode.js (<http://nodejs.org>) uses libev as the underlying event library.\n.IP \"Others\" 4\n.IX Item \"Others\"\nThere are others, and I stopped counting.\n.SH \"MACRO MAGIC\"\n.IX Header \"MACRO MAGIC\"\nLibev can be compiled with a variety of options, the most fundamental\nof which is \\f(CW\\*(C`EV_MULTIPLICITY\\*(C'\\fR. This option determines whether (most)\nfunctions and callbacks have an initial \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR argument.\n.PP\nTo make it easier to write programs that cope with either variant, the\nfollowing macros are defined:\n.ie n .IP \"\"\"EV_A\"\", \"\"EV_A_\"\"\" 4\n.el .IP \"\\f(CWEV_A\\fR, \\f(CWEV_A_\\fR\" 4\n.IX Item \"EV_A, EV_A_\"\nThis provides the loop \\fIargument\\fR for functions, if one is required (\\*(L\"ev\nloop argument\\*(R\"). The \\f(CW\\*(C`EV_A\\*(C'\\fR form is used when this is the sole argument,\n\\&\\f(CW\\*(C`EV_A_\\*(C'\\fR is used when other arguments are following. Example:\n.Sp\n.Vb 3\n\\&   ev_unref (EV_A);\n\\&   ev_timer_add (EV_A_ watcher);\n\\&   ev_run (EV_A_ 0);\n.Ve\n.Sp\nIt assumes the variable \\f(CW\\*(C`loop\\*(C'\\fR of type \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR is in scope,\nwhich is often provided by the following macro.\n.ie n .IP \"\"\"EV_P\"\", \"\"EV_P_\"\"\" 4\n.el .IP \"\\f(CWEV_P\\fR, \\f(CWEV_P_\\fR\" 4\n.IX Item \"EV_P, EV_P_\"\nThis provides the loop \\fIparameter\\fR for functions, if one is required (\\*(L\"ev\nloop parameter\\*(R\"). The \\f(CW\\*(C`EV_P\\*(C'\\fR form is used when this is the sole parameter,\n\\&\\f(CW\\*(C`EV_P_\\*(C'\\fR is used when other parameters are following. Example:\n.Sp\n.Vb 2\n\\&   // this is how ev_unref is being declared\n\\&   static void ev_unref (EV_P);\n\\&\n\\&   // this is how you can declare your typical callback\n\\&   static void cb (EV_P_ ev_timer *w, int revents)\n.Ve\n.Sp\nIt declares a parameter \\f(CW\\*(C`loop\\*(C'\\fR of type \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR, quite\nsuitable for use with \\f(CW\\*(C`EV_A\\*(C'\\fR.\n.ie n .IP \"\"\"EV_DEFAULT\"\", \"\"EV_DEFAULT_\"\"\" 4\n.el .IP \"\\f(CWEV_DEFAULT\\fR, \\f(CWEV_DEFAULT_\\fR\" 4\n.IX Item \"EV_DEFAULT, EV_DEFAULT_\"\nSimilar to the other two macros, this gives you the value of the default\nloop, if multiple loops are supported (\\*(L\"ev loop default\\*(R\"). The default loop\nwill be initialised if it isn't already initialised.\n.Sp\nFor non-multiplicity builds, these macros do nothing, so you always have\nto initialise the loop somewhere.\n.ie n .IP \"\"\"EV_DEFAULT_UC\"\", \"\"EV_DEFAULT_UC_\"\"\" 4\n.el .IP \"\\f(CWEV_DEFAULT_UC\\fR, \\f(CWEV_DEFAULT_UC_\\fR\" 4\n.IX Item \"EV_DEFAULT_UC, EV_DEFAULT_UC_\"\nUsage identical to \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR and \\f(CW\\*(C`EV_DEFAULT_\\*(C'\\fR, but requires that the\ndefault loop has been initialised (\\f(CW\\*(C`UC\\*(C'\\fR == unchecked). Their behaviour\nis undefined when the default loop has not been initialised by a previous\nexecution of \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR, \\f(CW\\*(C`EV_DEFAULT_\\*(C'\\fR or \\f(CW\\*(C`ev_default_init (...)\\*(C'\\fR.\n.Sp\nIt is often prudent to use \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR when initialising the first\nwatcher in a function but use \\f(CW\\*(C`EV_DEFAULT_UC\\*(C'\\fR afterwards.\n.PP\nExample: Declare and initialise a check watcher, utilising the above\nmacros so it will work regardless of whether multiple loops are supported\nor not.\n.PP\n.Vb 5\n\\&   static void\n\\&   check_cb (EV_P_ ev_timer *w, int revents)\n\\&   {\n\\&     ev_check_stop (EV_A_ w);\n\\&   }\n\\&\n\\&   ev_check check;\n\\&   ev_check_init (&check, check_cb);\n\\&   ev_check_start (EV_DEFAULT_ &check);\n\\&   ev_run (EV_DEFAULT_ 0);\n.Ve\n.SH \"EMBEDDING\"\n.IX Header \"EMBEDDING\"\nLibev can (and often is) directly embedded into host\napplications. Examples of applications that embed it include the Deliantra\nGame Server, the \\s-1EV\\s0 perl module, the \\s-1GNU\\s0 Virtual Private Ethernet (gvpe)\nand rxvt-unicode.\n.PP\nThe goal is to enable you to just copy the necessary files into your\nsource directory without having to change even a single line in them, so\nyou can easily upgrade by simply copying (or having a checked-out copy of\nlibev somewhere in your source tree).\n.SS \"\\s-1FILESETS\\s0\"\n.IX Subsection \"FILESETS\"\nDepending on what features you need you need to include one or more sets of files\nin your application.\n.PP\n\\fI\\s-1CORE\\s0 \\s-1EVENT\\s0 \\s-1LOOP\\s0\\fR\n.IX Subsection \"CORE EVENT LOOP\"\n.PP\nTo include only the libev core (all the \\f(CW\\*(C`ev_*\\*(C'\\fR functions), with manual\nconfiguration (no autoconf):\n.PP\n.Vb 2\n\\&   #define EV_STANDALONE 1\n\\&   #include \"ev.c\"\n.Ve\n.PP\nThis will automatically include \\fIev.h\\fR, too, and should be done in a\nsingle C source file only to provide the function implementations. To use\nit, do the same for \\fIev.h\\fR in all files wishing to use this \\s-1API\\s0 (best\ndone by writing a wrapper around \\fIev.h\\fR that you can include instead and\nwhere you can put other configuration options):\n.PP\n.Vb 2\n\\&   #define EV_STANDALONE 1\n\\&   #include \"ev.h\"\n.Ve\n.PP\nBoth header files and implementation files can be compiled with a \\*(C+\ncompiler (at least, that's a stated goal, and breakage will be treated\nas a bug).\n.PP\nYou need the following files in your source tree, or in a directory\nin your include path (e.g. in libev/ when using \\-Ilibev):\n.PP\n.Vb 4\n\\&   ev.h\n\\&   ev.c\n\\&   ev_vars.h\n\\&   ev_wrap.h\n\\&\n\\&   ev_win32.c      required on win32 platforms only\n\\&\n\\&   ev_select.c     only when select backend is enabled (which is enabled by default)\n\\&   ev_poll.c       only when poll backend is enabled (disabled by default)\n\\&   ev_epoll.c      only when the epoll backend is enabled (disabled by default)\n\\&   ev_kqueue.c     only when the kqueue backend is enabled (disabled by default)\n\\&   ev_port.c       only when the solaris port backend is enabled (disabled by default)\n.Ve\n.PP\n\\&\\fIev.c\\fR includes the backend files directly when enabled, so you only need\nto compile this single file.\n.PP\n\\fI\\s-1LIBEVENT\\s0 \\s-1COMPATIBILITY\\s0 \\s-1API\\s0\\fR\n.IX Subsection \"LIBEVENT COMPATIBILITY API\"\n.PP\nTo include the libevent compatibility \\s-1API\\s0, also include:\n.PP\n.Vb 1\n\\&   #include \"event.c\"\n.Ve\n.PP\nin the file including \\fIev.c\\fR, and:\n.PP\n.Vb 1\n\\&   #include \"event.h\"\n.Ve\n.PP\nin the files that want to use the libevent \\s-1API\\s0. This also includes \\fIev.h\\fR.\n.PP\nYou need the following additional files for this:\n.PP\n.Vb 2\n\\&   event.h\n\\&   event.c\n.Ve\n.PP\n\\fI\\s-1AUTOCONF\\s0 \\s-1SUPPORT\\s0\\fR\n.IX Subsection \"AUTOCONF SUPPORT\"\n.PP\nInstead of using \\f(CW\\*(C`EV_STANDALONE=1\\*(C'\\fR and providing your configuration in\nwhatever way you want, you can also \\f(CW\\*(C`m4_include([libev.m4])\\*(C'\\fR in your\n\\&\\fIconfigure.ac\\fR and leave \\f(CW\\*(C`EV_STANDALONE\\*(C'\\fR undefined. \\fIev.c\\fR will then\ninclude \\fIconfig.h\\fR and configure itself accordingly.\n.PP\nFor this of course you need the m4 file:\n.PP\n.Vb 1\n\\&   libev.m4\n.Ve\n.SS \"\\s-1PREPROCESSOR\\s0 \\s-1SYMBOLS/MACROS\\s0\"\n.IX Subsection \"PREPROCESSOR SYMBOLS/MACROS\"\nLibev can be configured via a variety of preprocessor symbols you have to\ndefine before including (or compiling) any of its files. The default in\nthe absence of autoconf is documented for every option.\n.PP\nSymbols marked with \\*(L\"(h)\\*(R\" do not change the \\s-1ABI\\s0, and can have different\nvalues when compiling libev vs. including \\fIev.h\\fR, so it is permissible\nto redefine them before including \\fIev.h\\fR without breaking compatibility\nto a compiled library. All other symbols change the \\s-1ABI\\s0, which means all\nusers of libev and the libev code itself must be compiled with compatible\nsettings.\n.IP \"\\s-1EV_COMPAT3\\s0 (h)\" 4\n.IX Item \"EV_COMPAT3 (h)\"\nBackwards compatibility is a major concern for libev. This is why this\nrelease of libev comes with wrappers for the functions and symbols that\nhave been renamed between libev version 3 and 4.\n.Sp\nYou can disable these wrappers (to test compatibility with future\nversions) by defining \\f(CW\\*(C`EV_COMPAT3\\*(C'\\fR to \\f(CW0\\fR when compiling your\nsources. This has the additional advantage that you can drop the \\f(CW\\*(C`struct\\*(C'\\fR\nfrom \\f(CW\\*(C`struct ev_loop\\*(C'\\fR declarations, as libev will provide an \\f(CW\\*(C`ev_loop\\*(C'\\fR\ntypedef in that case.\n.Sp\nIn some future version, the default for \\f(CW\\*(C`EV_COMPAT3\\*(C'\\fR will become \\f(CW0\\fR,\nand in some even more future version the compatibility code will be\nremoved completely.\n.IP \"\\s-1EV_STANDALONE\\s0 (h)\" 4\n.IX Item \"EV_STANDALONE (h)\"\nMust always be \\f(CW1\\fR if you do not use autoconf configuration, which\nkeeps libev from including \\fIconfig.h\\fR, and it also defines dummy\nimplementations for some libevent functions (such as logging, which is not\nsupported). It will also not define any of the structs usually found in\n\\&\\fIevent.h\\fR that are not directly supported by the libev core alone.\n.Sp\nIn standalone mode, libev will still try to automatically deduce the\nconfiguration, but has to be more conservative.\n.IP \"\\s-1EV_USE_FLOOR\\s0\" 4\n.IX Item \"EV_USE_FLOOR\"\nIf defined to be \\f(CW1\\fR, libev will use the \\f(CW\\*(C`floor ()\\*(C'\\fR function for its\nperiodic reschedule calculations, otherwise libev will fall back on a\nportable (slower) implementation. If you enable this, you usually have to\nlink against libm or something equivalent. Enabling this when the \\f(CW\\*(C`floor\\*(C'\\fR\nfunction is not available will fail, so the safe default is to not enable\nthis.\n.IP \"\\s-1EV_USE_MONOTONIC\\s0\" 4\n.IX Item \"EV_USE_MONOTONIC\"\nIf defined to be \\f(CW1\\fR, libev will try to detect the availability of the\nmonotonic clock option at both compile time and runtime. Otherwise no\nuse of the monotonic clock option will be attempted. If you enable this,\nyou usually have to link against librt or something similar. Enabling it\nwhen the functionality isn't available is safe, though, although you have\nto make sure you link against any libraries where the \\f(CW\\*(C`clock_gettime\\*(C'\\fR\nfunction is hiding in (often \\fI\\-lrt\\fR). See also \\f(CW\\*(C`EV_USE_CLOCK_SYSCALL\\*(C'\\fR.\n.IP \"\\s-1EV_USE_REALTIME\\s0\" 4\n.IX Item \"EV_USE_REALTIME\"\nIf defined to be \\f(CW1\\fR, libev will try to detect the availability of the\nreal-time clock option at compile time (and assume its availability\nat runtime if successful). Otherwise no use of the real-time clock\noption will be attempted. This effectively replaces \\f(CW\\*(C`gettimeofday\\*(C'\\fR\nby \\f(CW\\*(C`clock_get (CLOCK_REALTIME, ...)\\*(C'\\fR and will not normally affect\ncorrectness. See the note about libraries in the description of\n\\&\\f(CW\\*(C`EV_USE_MONOTONIC\\*(C'\\fR, though. Defaults to the opposite value of\n\\&\\f(CW\\*(C`EV_USE_CLOCK_SYSCALL\\*(C'\\fR.\n.IP \"\\s-1EV_USE_CLOCK_SYSCALL\\s0\" 4\n.IX Item \"EV_USE_CLOCK_SYSCALL\"\nIf defined to be \\f(CW1\\fR, libev will try to use a direct syscall instead\nof calling the system-provided \\f(CW\\*(C`clock_gettime\\*(C'\\fR function. This option\nexists because on GNU/Linux, \\f(CW\\*(C`clock_gettime\\*(C'\\fR is in \\f(CW\\*(C`librt\\*(C'\\fR, but \\f(CW\\*(C`librt\\*(C'\\fR\nunconditionally pulls in \\f(CW\\*(C`libpthread\\*(C'\\fR, slowing down single-threaded\nprograms needlessly. Using a direct syscall is slightly slower (in\ntheory), because no optimised vdso implementation can be used, but avoids\nthe pthread dependency. Defaults to \\f(CW1\\fR on GNU/Linux with glibc 2.x or\nhigher, as it simplifies linking (no need for \\f(CW\\*(C`\\-lrt\\*(C'\\fR).\n.IP \"\\s-1EV_USE_NANOSLEEP\\s0\" 4\n.IX Item \"EV_USE_NANOSLEEP\"\nIf defined to be \\f(CW1\\fR, libev will assume that \\f(CW\\*(C`nanosleep ()\\*(C'\\fR is available\nand will use it for delays. Otherwise it will use \\f(CW\\*(C`select ()\\*(C'\\fR.\n.IP \"\\s-1EV_USE_EVENTFD\\s0\" 4\n.IX Item \"EV_USE_EVENTFD\"\nIf defined to be \\f(CW1\\fR, then libev will assume that \\f(CW\\*(C`eventfd ()\\*(C'\\fR is\navailable and will probe for kernel support at runtime. This will improve\n\\&\\f(CW\\*(C`ev_signal\\*(C'\\fR and \\f(CW\\*(C`ev_async\\*(C'\\fR performance and reduce resource consumption.\nIf undefined, it will be enabled if the headers indicate GNU/Linux + Glibc\n2.7 or newer, otherwise disabled.\n.IP \"\\s-1EV_USE_SELECT\\s0\" 4\n.IX Item \"EV_USE_SELECT\"\nIf undefined or defined to be \\f(CW1\\fR, libev will compile in support for the\n\\&\\f(CW\\*(C`select\\*(C'\\fR(2) backend. No attempt at auto-detection will be done: if no\nother method takes over, select will be it. Otherwise the select backend\nwill not be compiled in.\n.IP \"\\s-1EV_SELECT_USE_FD_SET\\s0\" 4\n.IX Item \"EV_SELECT_USE_FD_SET\"\nIf defined to \\f(CW1\\fR, then the select backend will use the system \\f(CW\\*(C`fd_set\\*(C'\\fR\nstructure. This is useful if libev doesn't compile due to a missing\n\\&\\f(CW\\*(C`NFDBITS\\*(C'\\fR or \\f(CW\\*(C`fd_mask\\*(C'\\fR definition or it mis-guesses the bitset layout\non exotic systems. This usually limits the range of file descriptors to\nsome low limit such as 1024 or might have other limitations (winsocket\nonly allows 64 sockets). The \\f(CW\\*(C`FD_SETSIZE\\*(C'\\fR macro, set before compilation,\nconfigures the maximum size of the \\f(CW\\*(C`fd_set\\*(C'\\fR.\n.IP \"\\s-1EV_SELECT_IS_WINSOCKET\\s0\" 4\n.IX Item \"EV_SELECT_IS_WINSOCKET\"\nWhen defined to \\f(CW1\\fR, the select backend will assume that\nselect/socket/connect etc. don't understand file descriptors but\nwants osf handles on win32 (this is the case when the select to\nbe used is the winsock select). This means that it will call\n\\&\\f(CW\\*(C`_get_osfhandle\\*(C'\\fR on the fd to convert it to an \\s-1OS\\s0 handle. Otherwise,\nit is assumed that all these functions actually work on fds, even\non win32. Should not be defined on non\\-win32 platforms.\n.IP \"\\s-1EV_FD_TO_WIN32_HANDLE\\s0(fd)\" 4\n.IX Item \"EV_FD_TO_WIN32_HANDLE(fd)\"\nIf \\f(CW\\*(C`EV_SELECT_IS_WINSOCKET\\*(C'\\fR is enabled, then libev needs a way to map\nfile descriptors to socket handles. When not defining this symbol (the\ndefault), then libev will call \\f(CW\\*(C`_get_osfhandle\\*(C'\\fR, which is usually\ncorrect. In some cases, programs use their own file descriptor management,\nin which case they can provide this function to map fds to socket handles.\n.IP \"\\s-1EV_WIN32_HANDLE_TO_FD\\s0(handle)\" 4\n.IX Item \"EV_WIN32_HANDLE_TO_FD(handle)\"\nIf \\f(CW\\*(C`EV_SELECT_IS_WINSOCKET\\*(C'\\fR then libev maps handles to file descriptors\nusing the standard \\f(CW\\*(C`_open_osfhandle\\*(C'\\fR function. For programs implementing\ntheir own fd to handle mapping, overwriting this function makes it easier\nto do so. This can be done by defining this macro to an appropriate value.\n.IP \"\\s-1EV_WIN32_CLOSE_FD\\s0(fd)\" 4\n.IX Item \"EV_WIN32_CLOSE_FD(fd)\"\nIf programs implement their own fd to handle mapping on win32, then this\nmacro can be used to override the \\f(CW\\*(C`close\\*(C'\\fR function, useful to unregister\nfile descriptors again. Note that the replacement function has to close\nthe underlying \\s-1OS\\s0 handle.\n.IP \"\\s-1EV_USE_WSASOCKET\\s0\" 4\n.IX Item \"EV_USE_WSASOCKET\"\nIf defined to be \\f(CW1\\fR, libev will use \\f(CW\\*(C`WSASocket\\*(C'\\fR to create its internal\ncommunication socket, which works better in some environments. Otherwise,\nthe normal \\f(CW\\*(C`socket\\*(C'\\fR function will be used, which works better in other\nenvironments.\n.IP \"\\s-1EV_USE_POLL\\s0\" 4\n.IX Item \"EV_USE_POLL\"\nIf defined to be \\f(CW1\\fR, libev will compile in support for the \\f(CW\\*(C`poll\\*(C'\\fR(2)\nbackend. Otherwise it will be enabled on non\\-win32 platforms. It\ntakes precedence over select.\n.IP \"\\s-1EV_USE_EPOLL\\s0\" 4\n.IX Item \"EV_USE_EPOLL\"\nIf defined to be \\f(CW1\\fR, libev will compile in support for the Linux\n\\&\\f(CW\\*(C`epoll\\*(C'\\fR(7) backend. Its availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for GNU/Linux systems. If undefined, it will be enabled if the\nheaders indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.\n.IP \"\\s-1EV_USE_KQUEUE\\s0\" 4\n.IX Item \"EV_USE_KQUEUE\"\nIf defined to be \\f(CW1\\fR, libev will compile in support for the \\s-1BSD\\s0 style\n\\&\\f(CW\\*(C`kqueue\\*(C'\\fR(2) backend. Its actual availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for \\s-1BSD\\s0 and BSD-like systems, although on most BSDs kqueue only\nsupports some types of fds correctly (the only platform we found that\nsupports ptys for example was NetBSD), so kqueue might be compiled in, but\nnot be used unless explicitly requested. The best way to use it is to find\nout whether kqueue supports your type of fd properly and use an embedded\nkqueue loop.\n.IP \"\\s-1EV_USE_PORT\\s0\" 4\n.IX Item \"EV_USE_PORT\"\nIf defined to be \\f(CW1\\fR, libev will compile in support for the Solaris\n10 port style backend. Its availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for Solaris 10 systems.\n.IP \"\\s-1EV_USE_DEVPOLL\\s0\" 4\n.IX Item \"EV_USE_DEVPOLL\"\nReserved for future expansion, works like the \\s-1USE\\s0 symbols above.\n.IP \"\\s-1EV_USE_INOTIFY\\s0\" 4\n.IX Item \"EV_USE_INOTIFY\"\nIf defined to be \\f(CW1\\fR, libev will compile in support for the Linux inotify\ninterface to speed up \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers. Its actual availability will\nbe detected at runtime. If undefined, it will be enabled if the headers\nindicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.\n.IP \"\\s-1EV_NO_SMP\\s0\" 4\n.IX Item \"EV_NO_SMP\"\nIf defined to be \\f(CW1\\fR, libev will assume that memory is always coherent\nbetween threads, that is, threads can be used, but threads never run on\ndifferent cpus (or different cpu cores). This reduces dependencies\nand makes libev faster.\n.IP \"\\s-1EV_NO_THREADS\\s0\" 4\n.IX Item \"EV_NO_THREADS\"\nIf defined to be \\f(CW1\\fR, libev will assume that it will never be called from\ndifferent threads (that includes signal handlers), which is a stronger\nassumption than \\f(CW\\*(C`EV_NO_SMP\\*(C'\\fR, above. This reduces dependencies and makes\nlibev faster.\n.IP \"\\s-1EV_ATOMIC_T\\s0\" 4\n.IX Item \"EV_ATOMIC_T\"\nLibev requires an integer type (suitable for storing \\f(CW0\\fR or \\f(CW1\\fR) whose\naccess is atomic with respect to other threads or signal contexts. No\nsuch type is easily found in the C language, so you can provide your own\ntype that you know is safe for your purposes. It is used both for signal\nhandler \\*(L\"locking\\*(R\" as well as for signal and thread safety in \\f(CW\\*(C`ev_async\\*(C'\\fR\nwatchers.\n.Sp\nIn the absence of this define, libev will use \\f(CW\\*(C`sig_atomic_t volatile\\*(C'\\fR\n(from \\fIsignal.h\\fR), which is usually good enough on most platforms.\n.IP \"\\s-1EV_H\\s0 (h)\" 4\n.IX Item \"EV_H (h)\"\nThe name of the \\fIev.h\\fR header file used to include it. The default if\nundefined is \\f(CW\"ev.h\"\\fR in \\fIevent.h\\fR, \\fIev.c\\fR and \\fIev++.h\\fR. This can be\nused to virtually rename the \\fIev.h\\fR header file in case of conflicts.\n.IP \"\\s-1EV_CONFIG_H\\s0 (h)\" 4\n.IX Item \"EV_CONFIG_H (h)\"\nIf \\f(CW\\*(C`EV_STANDALONE\\*(C'\\fR isn't \\f(CW1\\fR, this variable can be used to override\n\\&\\fIev.c\\fR's idea of where to find the \\fIconfig.h\\fR file, similarly to\n\\&\\f(CW\\*(C`EV_H\\*(C'\\fR, above.\n.IP \"\\s-1EV_EVENT_H\\s0 (h)\" 4\n.IX Item \"EV_EVENT_H (h)\"\nSimilarly to \\f(CW\\*(C`EV_H\\*(C'\\fR, this macro can be used to override \\fIevent.c\\fR's idea\nof how the \\fIevent.h\\fR header can be found, the default is \\f(CW\"event.h\"\\fR.\n.IP \"\\s-1EV_PROTOTYPES\\s0 (h)\" 4\n.IX Item \"EV_PROTOTYPES (h)\"\nIf defined to be \\f(CW0\\fR, then \\fIev.h\\fR will not define any function\nprototypes, but still define all the structs and other symbols. This is\noccasionally useful if you want to provide your own wrapper functions\naround libev functions.\n.IP \"\\s-1EV_MULTIPLICITY\\s0\" 4\n.IX Item \"EV_MULTIPLICITY\"\nIf undefined or defined to \\f(CW1\\fR, then all event-loop-specific functions\nwill have the \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR as first argument, and you can create\nadditional independent event loops. Otherwise there will be no support\nfor multiple event loops and there is no first event loop pointer\nargument. Instead, all functions act on the single default loop.\n.Sp\nNote that \\f(CW\\*(C`EV_DEFAULT\\*(C'\\fR and \\f(CW\\*(C`EV_DEFAULT_\\*(C'\\fR will no longer provide a\ndefault loop when multiplicity is switched off \\- you always have to\ninitialise the loop manually in this case.\n.IP \"\\s-1EV_MINPRI\\s0\" 4\n.IX Item \"EV_MINPRI\"\n.PD 0\n.IP \"\\s-1EV_MAXPRI\\s0\" 4\n.IX Item \"EV_MAXPRI\"\n.PD\nThe range of allowed priorities. \\f(CW\\*(C`EV_MINPRI\\*(C'\\fR must be smaller or equal to\n\\&\\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR, but otherwise there are no non-obvious limitations. You can\nprovide for more priorities by overriding those symbols (usually defined\nto be \\f(CW\\*(C`\\-2\\*(C'\\fR and \\f(CW2\\fR, respectively).\n.Sp\nWhen doing priority-based operations, libev usually has to linearly search\nall the priorities, so having many of them (hundreds) uses a lot of space\nand time, so using the defaults of five priorities (\\-2 .. +2) is usually\nfine.\n.Sp\nIf your embedding application does not need any priorities, defining these\nboth to \\f(CW0\\fR will save some memory and \\s-1CPU\\s0.\n.IP \"\\s-1EV_PERIODIC_ENABLE\\s0, \\s-1EV_IDLE_ENABLE\\s0, \\s-1EV_EMBED_ENABLE\\s0, \\s-1EV_STAT_ENABLE\\s0, \\s-1EV_PREPARE_ENABLE\\s0, \\s-1EV_CHECK_ENABLE\\s0, \\s-1EV_FORK_ENABLE\\s0, \\s-1EV_SIGNAL_ENABLE\\s0, \\s-1EV_ASYNC_ENABLE\\s0, \\s-1EV_CHILD_ENABLE\\s0.\" 4\n.IX Item \"EV_PERIODIC_ENABLE, EV_IDLE_ENABLE, EV_EMBED_ENABLE, EV_STAT_ENABLE, EV_PREPARE_ENABLE, EV_CHECK_ENABLE, EV_FORK_ENABLE, EV_SIGNAL_ENABLE, EV_ASYNC_ENABLE, EV_CHILD_ENABLE.\"\nIf undefined or defined to be \\f(CW1\\fR (and the platform supports it), then\nthe respective watcher type is supported. If defined to be \\f(CW0\\fR, then it\nis not. Disabling watcher types mainly saves code size.\n.IP \"\\s-1EV_FEATURES\\s0\" 4\n.IX Item \"EV_FEATURES\"\nIf you need to shave off some kilobytes of code at the expense of some\nspeed (but with the full \\s-1API\\s0), you can define this symbol to request\ncertain subsets of functionality. The default is to enable all features\nthat can be enabled on the platform.\n.Sp\nA typical way to use this symbol is to define it to \\f(CW0\\fR (or to a bitset\nwith some broad features you want) and then selectively re-enable\nadditional parts you want, for example if you want everything minimal,\nbut multiple event loop support, async and child watchers and the poll\nbackend, use this:\n.Sp\n.Vb 5\n\\&   #define EV_FEATURES 0\n\\&   #define EV_MULTIPLICITY 1\n\\&   #define EV_USE_POLL 1\n\\&   #define EV_CHILD_ENABLE 1\n\\&   #define EV_ASYNC_ENABLE 1\n.Ve\n.Sp\nThe actual value is a bitset, it can be a combination of the following\nvalues (by default, all of these are enabled):\n.RS 4\n.ie n .IP \"1 \\- faster/larger code\" 4\n.el .IP \"\\f(CW1\\fR \\- faster/larger code\" 4\n.IX Item \"1 - faster/larger code\"\nUse larger code to speed up some operations.\n.Sp\nCurrently this is used to override some inlining decisions (enlarging the\ncode size by roughly 30% on amd64).\n.Sp\nWhen optimising for size, use of compiler flags such as \\f(CW\\*(C`\\-Os\\*(C'\\fR with\ngcc is recommended, as well as \\f(CW\\*(C`\\-DNDEBUG\\*(C'\\fR, as libev contains a number of\nassertions.\n.Sp\nThe default is off when \\f(CW\\*(C`_\\|_OPTIMIZE_SIZE_\\|_\\*(C'\\fR is defined by your compiler\n(e.g. gcc with \\f(CW\\*(C`\\-Os\\*(C'\\fR).\n.ie n .IP \"2 \\- faster/larger data structures\" 4\n.el .IP \"\\f(CW2\\fR \\- faster/larger data structures\" 4\n.IX Item \"2 - faster/larger data structures\"\nReplaces the small 2\\-heap for timer management by a faster 4\\-heap, larger\nhash table sizes and so on. This will usually further increase code size\nand can additionally have an effect on the size of data structures at\nruntime.\n.Sp\nThe default is off when \\f(CW\\*(C`_\\|_OPTIMIZE_SIZE_\\|_\\*(C'\\fR is defined by your compiler\n(e.g. gcc with \\f(CW\\*(C`\\-Os\\*(C'\\fR).\n.ie n .IP \"4 \\- full \\s-1API\\s0 configuration\" 4\n.el .IP \"\\f(CW4\\fR \\- full \\s-1API\\s0 configuration\" 4\n.IX Item \"4 - full API configuration\"\nThis enables priorities (sets \\f(CW\\*(C`EV_MAXPRI\\*(C'\\fR=2 and \\f(CW\\*(C`EV_MINPRI\\*(C'\\fR=\\-2), and\nenables multiplicity (\\f(CW\\*(C`EV_MULTIPLICITY\\*(C'\\fR=1).\n.ie n .IP \"8 \\- full \\s-1API\\s0\" 4\n.el .IP \"\\f(CW8\\fR \\- full \\s-1API\\s0\" 4\n.IX Item \"8 - full API\"\nThis enables a lot of the \\*(L\"lesser used\\*(R\" \\s-1API\\s0 functions. See \\f(CW\\*(C`ev.h\\*(C'\\fR for\ndetails on which parts of the \\s-1API\\s0 are still available without this\nfeature, and do not complain if this subset changes over time.\n.ie n .IP \"16 \\- enable all optional watcher types\" 4\n.el .IP \"\\f(CW16\\fR \\- enable all optional watcher types\" 4\n.IX Item \"16 - enable all optional watcher types\"\nEnables all optional watcher types.  If you want to selectively enable\nonly some watcher types other than I/O and timers (e.g. prepare,\nembed, async, child...) you can enable them manually by defining\n\\&\\f(CW\\*(C`EV_watchertype_ENABLE\\*(C'\\fR to \\f(CW1\\fR instead.\n.ie n .IP \"32 \\- enable all backends\" 4\n.el .IP \"\\f(CW32\\fR \\- enable all backends\" 4\n.IX Item \"32 - enable all backends\"\nThis enables all backends \\- without this feature, you need to enable at\nleast one backend manually (\\f(CW\\*(C`EV_USE_SELECT\\*(C'\\fR is a good choice).\n.ie n .IP \"64 \\- enable OS-specific \"\"helper\"\" APIs\" 4\n.el .IP \"\\f(CW64\\fR \\- enable OS-specific ``helper'' APIs\" 4\n.IX Item \"64 - enable OS-specific helper APIs\"\nEnable inotify, eventfd, signalfd and similar OS-specific helper APIs by\ndefault.\n.RE\n.RS 4\n.Sp\nCompiling with \\f(CW\\*(C`gcc \\-Os \\-DEV_STANDALONE \\-DEV_USE_EPOLL=1 \\-DEV_FEATURES=0\\*(C'\\fR\nreduces the compiled size of libev from 24.7Kb code/2.8Kb data to 6.5Kb\ncode/0.3Kb data on my GNU/Linux amd64 system, while still giving you I/O\nwatchers, timers and monotonic clock support.\n.Sp\nWith an intelligent-enough linker (gcc+binutils are intelligent enough\nwhen you use \\f(CW\\*(C`\\-Wl,\\-\\-gc\\-sections \\-ffunction\\-sections\\*(C'\\fR) functions unused by\nyour program might be left out as well \\- a binary starting a timer and an\nI/O watcher then might come out at only 5Kb.\n.RE\n.IP \"\\s-1EV_API_STATIC\\s0\" 4\n.IX Item \"EV_API_STATIC\"\nIf this symbol is defined (by default it is not), then all identifiers\nwill have static linkage. This means that libev will not export any\nidentifiers, and you cannot link against libev anymore. This can be useful\nwhen you embed libev, only want to use libev functions in a single file,\nand do not want its identifiers to be visible.\n.Sp\nTo use this, define \\f(CW\\*(C`EV_API_STATIC\\*(C'\\fR and include \\fIev.c\\fR in the file that\nwants to use libev.\n.Sp\nThis option only works when libev is compiled with a C compiler, as \\*(C+\ndoesn't support the required declaration syntax.\n.IP \"\\s-1EV_AVOID_STDIO\\s0\" 4\n.IX Item \"EV_AVOID_STDIO\"\nIf this is set to \\f(CW1\\fR at compiletime, then libev will avoid using stdio\nfunctions (printf, scanf, perror etc.). This will increase the code size\nsomewhat, but if your program doesn't otherwise depend on stdio and your\nlibc allows it, this avoids linking in the stdio library which is quite\nbig.\n.Sp\nNote that error messages might become less precise when this option is\nenabled.\n.IP \"\\s-1EV_NSIG\\s0\" 4\n.IX Item \"EV_NSIG\"\nThe highest supported signal number, +1 (or, the number of\nsignals): Normally, libev tries to deduce the maximum number of signals\nautomatically, but sometimes this fails, in which case it can be\nspecified. Also, using a lower number than detected (\\f(CW32\\fR should be\ngood for about any system in existence) can save some memory, as libev\nstatically allocates some 12\\-24 bytes per signal number.\n.IP \"\\s-1EV_PID_HASHSIZE\\s0\" 4\n.IX Item \"EV_PID_HASHSIZE\"\n\\&\\f(CW\\*(C`ev_child\\*(C'\\fR watchers use a small hash table to distribute workload by\npid. The default size is \\f(CW16\\fR (or \\f(CW1\\fR with \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR disabled),\nusually more than enough. If you need to manage thousands of children you\nmight want to increase this value (\\fImust\\fR be a power of two).\n.IP \"\\s-1EV_INOTIFY_HASHSIZE\\s0\" 4\n.IX Item \"EV_INOTIFY_HASHSIZE\"\n\\&\\f(CW\\*(C`ev_stat\\*(C'\\fR watchers use a small hash table to distribute workload by\ninotify watch id. The default size is \\f(CW16\\fR (or \\f(CW1\\fR with \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR\ndisabled), usually more than enough. If you need to manage thousands of\n\\&\\f(CW\\*(C`ev_stat\\*(C'\\fR watchers you might want to increase this value (\\fImust\\fR be a\npower of two).\n.IP \"\\s-1EV_USE_4HEAP\\s0\" 4\n.IX Item \"EV_USE_4HEAP\"\nHeaps are not very cache-efficient. To improve the cache-efficiency of the\ntimer and periodics heaps, libev uses a 4\\-heap when this symbol is defined\nto \\f(CW1\\fR. The 4\\-heap uses more complicated (longer) code but has noticeably\nfaster performance with many (thousands) of watchers.\n.Sp\nThe default is \\f(CW1\\fR, unless \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR overrides it, in which case it\nwill be \\f(CW0\\fR.\n.IP \"\\s-1EV_HEAP_CACHE_AT\\s0\" 4\n.IX Item \"EV_HEAP_CACHE_AT\"\nHeaps are not very cache-efficient. To improve the cache-efficiency of the\ntimer and periodics heaps, libev can cache the timestamp (\\fIat\\fR) within\nthe heap structure (selected by defining \\f(CW\\*(C`EV_HEAP_CACHE_AT\\*(C'\\fR to \\f(CW1\\fR),\nwhich uses 8\\-12 bytes more per watcher and a few hundred bytes more code,\nbut avoids random read accesses on heap changes. This improves performance\nnoticeably with many (hundreds) of watchers.\n.Sp\nThe default is \\f(CW1\\fR, unless \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR overrides it, in which case it\nwill be \\f(CW0\\fR.\n.IP \"\\s-1EV_VERIFY\\s0\" 4\n.IX Item \"EV_VERIFY\"\nControls how much internal verification (see \\f(CW\\*(C`ev_verify ()\\*(C'\\fR) will\nbe done: If set to \\f(CW0\\fR, no internal verification code will be compiled\nin. If set to \\f(CW1\\fR, then verification code will be compiled in, but not\ncalled. If set to \\f(CW2\\fR, then the internal verification code will be\ncalled once per loop, which can slow down libev. If set to \\f(CW3\\fR, then the\nverification code will be called very frequently, which will slow down\nlibev considerably.\n.Sp\nThe default is \\f(CW1\\fR, unless \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR overrides it, in which case it\nwill be \\f(CW0\\fR.\n.IP \"\\s-1EV_COMMON\\s0\" 4\n.IX Item \"EV_COMMON\"\nBy default, all watchers have a \\f(CW\\*(C`void *data\\*(C'\\fR member. By redefining\nthis macro to something else you can include more and other types of\nmembers. You have to define it each time you include one of the files,\nthough, and it must be identical each time.\n.Sp\nFor example, the perl \\s-1EV\\s0 module uses something like this:\n.Sp\n.Vb 3\n\\&   #define EV_COMMON                       \\e\n\\&     SV *self; /* contains this struct */  \\e\n\\&     SV *cb_sv, *fh /* note no trailing \";\" */\n.Ve\n.IP \"\\s-1EV_CB_DECLARE\\s0 (type)\" 4\n.IX Item \"EV_CB_DECLARE (type)\"\n.PD 0\n.IP \"\\s-1EV_CB_INVOKE\\s0 (watcher, revents)\" 4\n.IX Item \"EV_CB_INVOKE (watcher, revents)\"\n.IP \"ev_set_cb (ev, cb)\" 4\n.IX Item \"ev_set_cb (ev, cb)\"\n.PD\nCan be used to change the callback member declaration in each watcher,\nand the way callbacks are invoked and set. Must expand to a struct member\ndefinition and a statement, respectively. See the \\fIev.h\\fR header file for\ntheir default definitions. One possible use for overriding these is to\navoid the \\f(CW\\*(C`struct ev_loop *\\*(C'\\fR as first argument in all cases, or to use\nmethod calls instead of plain function calls in \\*(C+.\n.SS \"\\s-1EXPORTED\\s0 \\s-1API\\s0 \\s-1SYMBOLS\\s0\"\n.IX Subsection \"EXPORTED API SYMBOLS\"\nIf you need to re-export the \\s-1API\\s0 (e.g. via a \\s-1DLL\\s0) and you need a list of\nexported symbols, you can use the provided \\fISymbol.*\\fR files which list\nall public symbols, one per line:\n.PP\n.Vb 2\n\\&   Symbols.ev      for libev proper\n\\&   Symbols.event   for the libevent emulation\n.Ve\n.PP\nThis can also be used to rename all public symbols to avoid clashes with\nmultiple versions of libev linked together (which is obviously bad in\nitself, but sometimes it is inconvenient to avoid this).\n.PP\nA sed command like this will create wrapper \\f(CW\\*(C`#define\\*(C'\\fR's that you need to\ninclude before including \\fIev.h\\fR:\n.PP\n.Vb 1\n\\&   <Symbols.ev sed \\-e \"s/.*/#define & myprefix_&/\" >wrap.h\n.Ve\n.PP\nThis would create a file \\fIwrap.h\\fR which essentially looks like this:\n.PP\n.Vb 4\n\\&   #define ev_backend     myprefix_ev_backend\n\\&   #define ev_check_start myprefix_ev_check_start\n\\&   #define ev_check_stop  myprefix_ev_check_stop\n\\&   ...\n.Ve\n.SS \"\\s-1EXAMPLES\\s0\"\n.IX Subsection \"EXAMPLES\"\nFor a real-world example of a program the includes libev\nverbatim, you can have a look at the \\s-1EV\\s0 perl module\n(<http://software.schmorp.de/pkg/EV.html>). It has the libev files in\nthe \\fIlibev/\\fR subdirectory and includes them in the \\fI\\s-1EV/EVAPI\\s0.h\\fR (public\ninterface) and \\fI\\s-1EV\\s0.xs\\fR (implementation) files. Only the \\fI\\s-1EV\\s0.xs\\fR file\nwill be compiled. It is pretty complex because it provides its own header\nfile.\n.PP\nThe usage in rxvt-unicode is simpler. It has a \\fIev_cpp.h\\fR header file\nthat everybody includes and which overrides some configure choices:\n.PP\n.Vb 8\n\\&   #define EV_FEATURES 8\n\\&   #define EV_USE_SELECT 1\n\\&   #define EV_PREPARE_ENABLE 1\n\\&   #define EV_IDLE_ENABLE 1\n\\&   #define EV_SIGNAL_ENABLE 1\n\\&   #define EV_CHILD_ENABLE 1\n\\&   #define EV_USE_STDEXCEPT 0\n\\&   #define EV_CONFIG_H <config.h>\n\\&\n\\&   #include \"ev++.h\"\n.Ve\n.PP\nAnd a \\fIev_cpp.C\\fR implementation file that contains libev proper and is compiled:\n.PP\n.Vb 2\n\\&   #include \"ev_cpp.h\"\n\\&   #include \"ev.c\"\n.Ve\n.SH \"INTERACTION WITH OTHER PROGRAMS, LIBRARIES OR THE ENVIRONMENT\"\n.IX Header \"INTERACTION WITH OTHER PROGRAMS, LIBRARIES OR THE ENVIRONMENT\"\n.SS \"\\s-1THREADS\\s0 \\s-1AND\\s0 \\s-1COROUTINES\\s0\"\n.IX Subsection \"THREADS AND COROUTINES\"\n\\fI\\s-1THREADS\\s0\\fR\n.IX Subsection \"THREADS\"\n.PP\nAll libev functions are reentrant and thread-safe unless explicitly\ndocumented otherwise, but libev implements no locking itself. This means\nthat you can use as many loops as you want in parallel, as long as there\nare no concurrent calls into any libev function with the same loop\nparameter (\\f(CW\\*(C`ev_default_*\\*(C'\\fR calls have an implicit default loop parameter,\nof course): libev guarantees that different event loops share no data\nstructures that need any locking.\n.PP\nOr to put it differently: calls with different loop parameters can be done\nconcurrently from multiple threads, calls with the same loop parameter\nmust be done serially (but can be done from different threads, as long as\nonly one thread ever is inside a call at any point in time, e.g. by using\na mutex per loop).\n.PP\nSpecifically to support threads (and signal handlers), libev implements\nso-called \\f(CW\\*(C`ev_async\\*(C'\\fR watchers, which allow some limited form of\nconcurrency on the same event loop, namely waking it up \\*(L\"from the\noutside\\*(R\".\n.PP\nIf you want to know which design (one loop, locking, or multiple loops\nwithout or something else still) is best for your problem, then I cannot\nhelp you, but here is some generic advice:\n.IP \"\\(bu\" 4\nmost applications have a main thread: use the default libev loop\nin that thread, or create a separate thread running only the default loop.\n.Sp\nThis helps integrating other libraries or software modules that use libev\nthemselves and don't care/know about threading.\n.IP \"\\(bu\" 4\none loop per thread is usually a good model.\n.Sp\nDoing this is almost never wrong, sometimes a better-performance model\nexists, but it is always a good start.\n.IP \"\\(bu\" 4\nother models exist, such as the leader/follower pattern, where one\nloop is handed through multiple threads in a kind of round-robin fashion.\n.Sp\nChoosing a model is hard \\- look around, learn, know that usually you can do\nbetter than you currently do :\\-)\n.IP \"\\(bu\" 4\noften you need to talk to some other thread which blocks in the\nevent loop.\n.Sp\n\\&\\f(CW\\*(C`ev_async\\*(C'\\fR watchers can be used to wake them up from other threads safely\n(or from signal contexts...).\n.Sp\nAn example use would be to communicate signals or other events that only\nwork in the default loop by registering the signal watcher with the\ndefault loop and triggering an \\f(CW\\*(C`ev_async\\*(C'\\fR watcher from the default loop\nwatcher callback into the event loop interested in the signal.\n.PP\nSee also \\*(L\"\\s-1THREAD\\s0 \\s-1LOCKING\\s0 \\s-1EXAMPLE\\s0\\*(R\".\n.PP\n\\fI\\s-1COROUTINES\\s0\\fR\n.IX Subsection \"COROUTINES\"\n.PP\nLibev is very accommodating to coroutines (\\*(L\"cooperative threads\\*(R\"):\nlibev fully supports nesting calls to its functions from different\ncoroutines (e.g. you can call \\f(CW\\*(C`ev_run\\*(C'\\fR on the same loop from two\ndifferent coroutines, and switch freely between both coroutines running\nthe loop, as long as you don't confuse yourself). The only exception is\nthat you must not do this from \\f(CW\\*(C`ev_periodic\\*(C'\\fR reschedule callbacks.\n.PP\nCare has been taken to ensure that libev does not keep local state inside\n\\&\\f(CW\\*(C`ev_run\\*(C'\\fR, and other calls do not usually allow for coroutine switches as\nthey do not call any callbacks.\n.SS \"\\s-1COMPILER\\s0 \\s-1WARNINGS\\s0\"\n.IX Subsection \"COMPILER WARNINGS\"\nDepending on your compiler and compiler settings, you might get no or a\nlot of warnings when compiling libev code. Some people are apparently\nscared by this.\n.PP\nHowever, these are unavoidable for many reasons. For one, each compiler\nhas different warnings, and each user has different tastes regarding\nwarning options. \\*(L\"Warn-free\\*(R\" code therefore cannot be a goal except when\ntargeting a specific compiler and compiler-version.\n.PP\nAnother reason is that some compiler warnings require elaborate\nworkarounds, or other changes to the code that make it less clear and less\nmaintainable.\n.PP\nAnd of course, some compiler warnings are just plain stupid, or simply\nwrong (because they don't actually warn about the condition their message\nseems to warn about). For example, certain older gcc versions had some\nwarnings that resulted in an extreme number of false positives. These have\nbeen fixed, but some people still insist on making code warn-free with\nsuch buggy versions.\n.PP\nWhile libev is written to generate as few warnings as possible,\n\\&\\*(L\"warn-free\\*(R\" code is not a goal, and it is recommended not to build libev\nwith any compiler warnings enabled unless you are prepared to cope with\nthem (e.g. by ignoring them). Remember that warnings are just that:\nwarnings, not errors, or proof of bugs.\n.SS \"\\s-1VALGRIND\\s0\"\n.IX Subsection \"VALGRIND\"\nValgrind has a special section here because it is a popular tool that is\nhighly useful. Unfortunately, valgrind reports are very hard to interpret.\n.PP\nIf you think you found a bug (memory leak, uninitialised data access etc.)\nin libev, then check twice: If valgrind reports something like:\n.PP\n.Vb 3\n\\&   ==2274==    definitely lost: 0 bytes in 0 blocks.\n\\&   ==2274==      possibly lost: 0 bytes in 0 blocks.\n\\&   ==2274==    still reachable: 256 bytes in 1 blocks.\n.Ve\n.PP\nThen there is no memory leak, just as memory accounted to global variables\nis not a memleak \\- the memory is still being referenced, and didn't leak.\n.PP\nSimilarly, under some circumstances, valgrind might report kernel bugs\nas if it were a bug in libev (e.g. in realloc or in the poll backend,\nalthough an acceptable workaround has been found here), or it might be\nconfused.\n.PP\nKeep in mind that valgrind is a very good tool, but only a tool. Don't\nmake it into some kind of religion.\n.PP\nIf you are unsure about something, feel free to contact the mailing list\nwith the full valgrind report and an explanation on why you think this\nis a bug in libev (best check the archives, too :). However, don't be\nannoyed when you get a brisk \\*(L\"this is no bug\\*(R\" answer and take the chance\nof learning how to interpret valgrind properly.\n.PP\nIf you need, for some reason, empty reports from valgrind for your project\nI suggest using suppression lists.\n.SH \"PORTABILITY NOTES\"\n.IX Header \"PORTABILITY NOTES\"\n.SS \"\\s-1GNU/LINUX\\s0 32 \\s-1BIT\\s0 \\s-1LIMITATIONS\\s0\"\n.IX Subsection \"GNU/LINUX 32 BIT LIMITATIONS\"\nGNU/Linux is the only common platform that supports 64 bit file/large file\ninterfaces but \\fIdisables\\fR them by default.\n.PP\nThat means that libev compiled in the default environment doesn't support\nfiles larger than 2GiB or so, which mainly affects \\f(CW\\*(C`ev_stat\\*(C'\\fR watchers.\n.PP\nUnfortunately, many programs try to work around this GNU/Linux issue\nby enabling the large file \\s-1API\\s0, which makes them incompatible with the\nstandard libev compiled for their system.\n.PP\nLikewise, libev cannot enable the large file \\s-1API\\s0 itself as this would\nsuddenly make it incompatible to the default compile time environment,\ni.e. all programs not using special compile switches.\n.SS \"\\s-1OS/X\\s0 \\s-1AND\\s0 \\s-1DARWIN\\s0 \\s-1BUGS\\s0\"\n.IX Subsection \"OS/X AND DARWIN BUGS\"\nThe whole thing is a bug if you ask me \\- basically any system interface\nyou touch is broken, whether it is locales, poll, kqueue or even the\nOpenGL drivers.\n.PP\n\\fI\\f(CI\\*(C`kqueue\\*(C'\\fI is buggy\\fR\n.IX Subsection \"kqueue is buggy\"\n.PP\nThe kqueue syscall is broken in all known versions \\- most versions support\nonly sockets, many support pipes.\n.PP\nLibev tries to work around this by not using \\f(CW\\*(C`kqueue\\*(C'\\fR by default on this\nrotten platform, but of course you can still ask for it when creating a\nloop \\- embedding a socket-only kqueue loop into a select-based one is\nprobably going to work well.\n.PP\n\\fI\\f(CI\\*(C`poll\\*(C'\\fI is buggy\\fR\n.IX Subsection \"poll is buggy\"\n.PP\nInstead of fixing \\f(CW\\*(C`kqueue\\*(C'\\fR, Apple replaced their (working) \\f(CW\\*(C`poll\\*(C'\\fR\nimplementation by something calling \\f(CW\\*(C`kqueue\\*(C'\\fR internally around the 10.5.6\nrelease, so now \\f(CW\\*(C`kqueue\\*(C'\\fR \\fIand\\fR \\f(CW\\*(C`poll\\*(C'\\fR are broken.\n.PP\nLibev tries to work around this by not using \\f(CW\\*(C`poll\\*(C'\\fR by default on\nthis rotten platform, but of course you can still ask for it when creating\na loop.\n.PP\n\\fI\\f(CI\\*(C`select\\*(C'\\fI is buggy\\fR\n.IX Subsection \"select is buggy\"\n.PP\nAll that's left is \\f(CW\\*(C`select\\*(C'\\fR, and of course Apple found a way to fuck this\none up as well: On \\s-1OS/X\\s0, \\f(CW\\*(C`select\\*(C'\\fR actively limits the number of file\ndescriptors you can pass in to 1024 \\- your program suddenly crashes when\nyou use more.\n.PP\nThere is an undocumented \\*(L\"workaround\\*(R\" for this \\- defining\n\\&\\f(CW\\*(C`_DARWIN_UNLIMITED_SELECT\\*(C'\\fR, which libev tries to use, so select \\fIshould\\fR\nwork on \\s-1OS/X\\s0.\n.SS \"\\s-1SOLARIS\\s0 \\s-1PROBLEMS\\s0 \\s-1AND\\s0 \\s-1WORKAROUNDS\\s0\"\n.IX Subsection \"SOLARIS PROBLEMS AND WORKAROUNDS\"\n\\fI\\f(CI\\*(C`errno\\*(C'\\fI reentrancy\\fR\n.IX Subsection \"errno reentrancy\"\n.PP\nThe default compile environment on Solaris is unfortunately so\nthread-unsafe that you can't even use components/libraries compiled\nwithout \\f(CW\\*(C`\\-D_REENTRANT\\*(C'\\fR in a threaded program, which, of course, isn't\ndefined by default. A valid, if stupid, implementation choice.\n.PP\nIf you want to use libev in threaded environments you have to make sure\nit's compiled with \\f(CW\\*(C`_REENTRANT\\*(C'\\fR defined.\n.PP\n\\fIEvent port backend\\fR\n.IX Subsection \"Event port backend\"\n.PP\nThe scalable event interface for Solaris is called \\*(L\"event\nports\\*(R\". Unfortunately, this mechanism is very buggy in all major\nreleases. If you run into high \\s-1CPU\\s0 usage, your program freezes or you get\na large number of spurious wakeups, make sure you have all the relevant\nand latest kernel patches applied. No, I don't know which ones, but there\nare multiple ones to apply, and afterwards, event ports actually work\ngreat.\n.PP\nIf you can't get it to work, you can try running the program by setting\nthe environment variable \\f(CW\\*(C`LIBEV_FLAGS=3\\*(C'\\fR to only allow \\f(CW\\*(C`poll\\*(C'\\fR and\n\\&\\f(CW\\*(C`select\\*(C'\\fR backends.\n.SS \"\\s-1AIX\\s0 \\s-1POLL\\s0 \\s-1BUG\\s0\"\n.IX Subsection \"AIX POLL BUG\"\n\\&\\s-1AIX\\s0 unfortunately has a broken \\f(CW\\*(C`poll.h\\*(C'\\fR header. Libev works around\nthis by trying to avoid the poll backend altogether (i.e. it's not even\ncompiled in), which normally isn't a big problem as \\f(CW\\*(C`select\\*(C'\\fR works fine\nwith large bitsets on \\s-1AIX\\s0, and \\s-1AIX\\s0 is dead anyway.\n.SS \"\\s-1WIN32\\s0 \\s-1PLATFORM\\s0 \\s-1LIMITATIONS\\s0 \\s-1AND\\s0 \\s-1WORKAROUNDS\\s0\"\n.IX Subsection \"WIN32 PLATFORM LIMITATIONS AND WORKAROUNDS\"\n\\fIGeneral issues\\fR\n.IX Subsection \"General issues\"\n.PP\nWin32 doesn't support any of the standards (e.g. \\s-1POSIX\\s0) that libev\nrequires, and its I/O model is fundamentally incompatible with the \\s-1POSIX\\s0\nmodel. Libev still offers limited functionality on this platform in\nthe form of the \\f(CW\\*(C`EVBACKEND_SELECT\\*(C'\\fR backend, and only supports socket\ndescriptors. This only applies when using Win32 natively, not when using\ne.g. cygwin. Actually, it only applies to the microsofts own compilers,\nas every compiler comes with a slightly differently broken/incompatible\nenvironment.\n.PP\nLifting these limitations would basically require the full\nre-implementation of the I/O system. If you are into this kind of thing,\nthen note that glib does exactly that for you in a very portable way (note\nalso that glib is the slowest event library known to man).\n.PP\nThere is no supported compilation method available on windows except\nembedding it into other applications.\n.PP\nSensible signal handling is officially unsupported by Microsoft \\- libev\ntries its best, but under most conditions, signals will simply not work.\n.PP\nNot a libev limitation but worth mentioning: windows apparently doesn't\naccept large writes: instead of resulting in a partial write, windows will\neither accept everything or return \\f(CW\\*(C`ENOBUFS\\*(C'\\fR if the buffer is too large,\nso make sure you only write small amounts into your sockets (less than a\nmegabyte seems safe, but this apparently depends on the amount of memory\navailable).\n.PP\nDue to the many, low, and arbitrary limits on the win32 platform and\nthe abysmal performance of winsockets, using a large number of sockets\nis not recommended (and not reasonable). If your program needs to use\nmore than a hundred or so sockets, then likely it needs to use a totally\ndifferent implementation for windows, as libev offers the \\s-1POSIX\\s0 readiness\nnotification model, which cannot be implemented efficiently on windows\n(due to Microsoft monopoly games).\n.PP\nA typical way to use libev under windows is to embed it (see the embedding\nsection for details) and use the following \\fIevwrap.h\\fR header file instead\nof \\fIev.h\\fR:\n.PP\n.Vb 2\n\\&   #define EV_STANDALONE              /* keeps ev from requiring config.h */\n\\&   #define EV_SELECT_IS_WINSOCKET 1   /* configure libev for windows select */\n\\&\n\\&   #include \"ev.h\"\n.Ve\n.PP\nAnd compile the following \\fIevwrap.c\\fR file into your project (make sure\nyou do \\fInot\\fR compile the \\fIev.c\\fR or any other embedded source files!):\n.PP\n.Vb 2\n\\&   #include \"evwrap.h\"\n\\&   #include \"ev.c\"\n.Ve\n.PP\n\\fIThe winsocket \\f(CI\\*(C`select\\*(C'\\fI function\\fR\n.IX Subsection \"The winsocket select function\"\n.PP\nThe winsocket \\f(CW\\*(C`select\\*(C'\\fR function doesn't follow \\s-1POSIX\\s0 in that it\nrequires socket \\fIhandles\\fR and not socket \\fIfile descriptors\\fR (it is\nalso extremely buggy). This makes select very inefficient, and also\nrequires a mapping from file descriptors to socket handles (the Microsoft\nC runtime provides the function \\f(CW\\*(C`_open_osfhandle\\*(C'\\fR for this). See the\ndiscussion of the \\f(CW\\*(C`EV_SELECT_USE_FD_SET\\*(C'\\fR, \\f(CW\\*(C`EV_SELECT_IS_WINSOCKET\\*(C'\\fR and\n\\&\\f(CW\\*(C`EV_FD_TO_WIN32_HANDLE\\*(C'\\fR preprocessor symbols for more info.\n.PP\nThe configuration for a \\*(L\"naked\\*(R\" win32 using the Microsoft runtime\nlibraries and raw winsocket select is:\n.PP\n.Vb 2\n\\&   #define EV_USE_SELECT 1\n\\&   #define EV_SELECT_IS_WINSOCKET 1   /* forces EV_SELECT_USE_FD_SET, too */\n.Ve\n.PP\nNote that winsockets handling of fd sets is O(n), so you can easily get a\ncomplexity in the O(nX) range when using win32.\n.PP\n\\fILimited number of file descriptors\\fR\n.IX Subsection \"Limited number of file descriptors\"\n.PP\nWindows has numerous arbitrary (and low) limits on things.\n.PP\nEarly versions of winsocket's select only supported waiting for a maximum\nof \\f(CW64\\fR handles (probably owning to the fact that all windows kernels\ncan only wait for \\f(CW64\\fR things at the same time internally; Microsoft\nrecommends spawning a chain of threads and wait for 63 handles and the\nprevious thread in each. Sounds great!).\n.PP\nNewer versions support more handles, but you need to define \\f(CW\\*(C`FD_SETSIZE\\*(C'\\fR\nto some high number (e.g. \\f(CW2048\\fR) before compiling the winsocket select\ncall (which might be in libev or elsewhere, for example, perl and many\nother interpreters do their own select emulation on windows).\n.PP\nAnother limit is the number of file descriptors in the Microsoft runtime\nlibraries, which by default is \\f(CW64\\fR (there must be a hidden \\fI64\\fR\nfetish or something like this inside Microsoft). You can increase this\nby calling \\f(CW\\*(C`_setmaxstdio\\*(C'\\fR, which can increase this limit to \\f(CW2048\\fR\n(another arbitrary limit), but is broken in many versions of the Microsoft\nruntime libraries. This might get you to about \\f(CW512\\fR or \\f(CW2048\\fR sockets\n(depending on windows version and/or the phase of the moon). To get more,\nyou need to wrap all I/O functions and provide your own fd management, but\nthe cost of calling select (O(nX)) will likely make this unworkable.\n.SS \"\\s-1PORTABILITY\\s0 \\s-1REQUIREMENTS\\s0\"\n.IX Subsection \"PORTABILITY REQUIREMENTS\"\nIn addition to a working ISO-C implementation and of course the\nbackend-specific APIs, libev relies on a few additional extensions:\n.ie n .IP \"\"\"void (*)(ev_watcher_type *, int revents)\"\" must have compatible calling conventions regardless of \"\"ev_watcher_type *\"\".\" 4\n.el .IP \"\\f(CWvoid (*)(ev_watcher_type *, int revents)\\fR must have compatible calling conventions regardless of \\f(CWev_watcher_type *\\fR.\" 4\n.IX Item \"void (*)(ev_watcher_type *, int revents) must have compatible calling conventions regardless of ev_watcher_type *.\"\nLibev assumes not only that all watcher pointers have the same internal\nstructure (guaranteed by \\s-1POSIX\\s0 but not by \\s-1ISO\\s0 C for example), but it also\nassumes that the same (machine) code can be used to call any watcher\ncallback: The watcher callbacks have different type signatures, but libev\ncalls them using an \\f(CW\\*(C`ev_watcher *\\*(C'\\fR internally.\n.IP \"pointer accesses must be thread-atomic\" 4\n.IX Item \"pointer accesses must be thread-atomic\"\nAccessing a pointer value must be atomic, it must both be readable and\nwritable in one piece \\- this is the case on all current architectures.\n.ie n .IP \"\"\"sig_atomic_t volatile\"\" must be thread-atomic as well\" 4\n.el .IP \"\\f(CWsig_atomic_t volatile\\fR must be thread-atomic as well\" 4\n.IX Item \"sig_atomic_t volatile must be thread-atomic as well\"\nThe type \\f(CW\\*(C`sig_atomic_t volatile\\*(C'\\fR (or whatever is defined as\n\\&\\f(CW\\*(C`EV_ATOMIC_T\\*(C'\\fR) must be atomic with respect to accesses from different\nthreads. This is not part of the specification for \\f(CW\\*(C`sig_atomic_t\\*(C'\\fR, but is\nbelieved to be sufficiently portable.\n.ie n .IP \"\"\"sigprocmask\"\" must work in a threaded environment\" 4\n.el .IP \"\\f(CWsigprocmask\\fR must work in a threaded environment\" 4\n.IX Item \"sigprocmask must work in a threaded environment\"\nLibev uses \\f(CW\\*(C`sigprocmask\\*(C'\\fR to temporarily block signals. This is not\nallowed in a threaded program (\\f(CW\\*(C`pthread_sigmask\\*(C'\\fR has to be used). Typical\npthread implementations will either allow \\f(CW\\*(C`sigprocmask\\*(C'\\fR in the \\*(L\"main\nthread\\*(R\" or will block signals process-wide, both behaviours would\nbe compatible with libev. Interaction between \\f(CW\\*(C`sigprocmask\\*(C'\\fR and\n\\&\\f(CW\\*(C`pthread_sigmask\\*(C'\\fR could complicate things, however.\n.Sp\nThe most portable way to handle signals is to block signals in all threads\nexcept the initial one, and run the signal handling loop in the initial\nthread as well.\n.ie n .IP \"\"\"long\"\" must be large enough for common memory allocation sizes\" 4\n.el .IP \"\\f(CWlong\\fR must be large enough for common memory allocation sizes\" 4\n.IX Item \"long must be large enough for common memory allocation sizes\"\nTo improve portability and simplify its \\s-1API\\s0, libev uses \\f(CW\\*(C`long\\*(C'\\fR internally\ninstead of \\f(CW\\*(C`size_t\\*(C'\\fR when allocating its data structures. On non-POSIX\nsystems (Microsoft...) this might be unexpectedly low, but is still at\nleast 31 bits everywhere, which is enough for hundreds of millions of\nwatchers.\n.ie n .IP \"\"\"double\"\" must hold a time value in seconds with enough accuracy\" 4\n.el .IP \"\\f(CWdouble\\fR must hold a time value in seconds with enough accuracy\" 4\n.IX Item \"double must hold a time value in seconds with enough accuracy\"\nThe type \\f(CW\\*(C`double\\*(C'\\fR is used to represent timestamps. It is required to\nhave at least 51 bits of mantissa (and 9 bits of exponent), which is\ngood enough for at least into the year 4000 with millisecond accuracy\n(the design goal for libev). This requirement is overfulfilled by\nimplementations using \\s-1IEEE\\s0 754, which is basically all existing ones.\n.Sp\nWith \\s-1IEEE\\s0 754 doubles, you get microsecond accuracy until at least the\nyear 2255 (and millisecond accuracy till the year 287396 \\- by then, libev\nis either obsolete or somebody patched it to use \\f(CW\\*(C`long double\\*(C'\\fR or\nsomething like that, just kidding).\n.PP\nIf you know of other additional requirements drop me a note.\n.SH \"ALGORITHMIC COMPLEXITIES\"\n.IX Header \"ALGORITHMIC COMPLEXITIES\"\nIn this section the complexities of (many of) the algorithms used inside\nlibev will be documented. For complexity discussions about backends see\nthe documentation for \\f(CW\\*(C`ev_default_init\\*(C'\\fR.\n.PP\nAll of the following are about amortised time: If an array needs to be\nextended, libev needs to realloc and move the whole array, but this\nhappens asymptotically rarer with higher number of elements, so O(1) might\nmean that libev does a lengthy realloc operation in rare cases, but on\naverage it is much faster and asymptotically approaches constant time.\n.IP \"Starting and stopping timer/periodic watchers: O(log skipped_other_timers)\" 4\n.IX Item \"Starting and stopping timer/periodic watchers: O(log skipped_other_timers)\"\nThis means that, when you have a watcher that triggers in one hour and\nthere are 100 watchers that would trigger before that, then inserting will\nhave to skip roughly seven (\\f(CW\\*(C`ld 100\\*(C'\\fR) of these watchers.\n.IP \"Changing timer/periodic watchers (by autorepeat or calling again): O(log skipped_other_timers)\" 4\n.IX Item \"Changing timer/periodic watchers (by autorepeat or calling again): O(log skipped_other_timers)\"\nThat means that changing a timer costs less than removing/adding them,\nas only the relative motion in the event queue has to be paid for.\n.IP \"Starting io/check/prepare/idle/signal/child/fork/async watchers: O(1)\" 4\n.IX Item \"Starting io/check/prepare/idle/signal/child/fork/async watchers: O(1)\"\nThese just add the watcher into an array or at the head of a list.\n.IP \"Stopping check/prepare/idle/fork/async watchers: O(1)\" 4\n.IX Item \"Stopping check/prepare/idle/fork/async watchers: O(1)\"\n.PD 0\n.IP \"Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % \\s-1EV_PID_HASHSIZE\\s0))\" 4\n.IX Item \"Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % EV_PID_HASHSIZE))\"\n.PD\nThese watchers are stored in lists, so they need to be walked to find the\ncorrect watcher to remove. The lists are usually short (you don't usually\nhave many watchers waiting for the same fd or signal: one is typical, two\nis rare).\n.IP \"Finding the next timer in each loop iteration: O(1)\" 4\n.IX Item \"Finding the next timer in each loop iteration: O(1)\"\nBy virtue of using a binary or 4\\-heap, the next timer is always found at a\nfixed position in the storage array.\n.IP \"Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)\" 4\n.IX Item \"Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)\"\nA change means an I/O watcher gets started or stopped, which requires\nlibev to recalculate its status (and possibly tell the kernel, depending\non backend and whether \\f(CW\\*(C`ev_io_set\\*(C'\\fR was used).\n.IP \"Activating one watcher (putting it into the pending state): O(1)\" 4\n.IX Item \"Activating one watcher (putting it into the pending state): O(1)\"\n.PD 0\n.IP \"Priority handling: O(number_of_priorities)\" 4\n.IX Item \"Priority handling: O(number_of_priorities)\"\n.PD\nPriorities are implemented by allocating some space for each\npriority. When doing priority-based operations, libev usually has to\nlinearly search all the priorities, but starting/stopping and activating\nwatchers becomes O(1) with respect to priority handling.\n.IP \"Sending an ev_async: O(1)\" 4\n.IX Item \"Sending an ev_async: O(1)\"\n.PD 0\n.IP \"Processing ev_async_send: O(number_of_async_watchers)\" 4\n.IX Item \"Processing ev_async_send: O(number_of_async_watchers)\"\n.IP \"Processing signals: O(max_signal_number)\" 4\n.IX Item \"Processing signals: O(max_signal_number)\"\n.PD\nSending involves a system call \\fIiff\\fR there were no other \\f(CW\\*(C`ev_async_send\\*(C'\\fR\ncalls in the current loop iteration and the loop is currently\nblocked. Checking for async and signal events involves iterating over all\nrunning async watchers or all signal numbers.\n.SH \"PORTING FROM LIBEV 3.X TO 4.X\"\n.IX Header \"PORTING FROM LIBEV 3.X TO 4.X\"\nThe major version 4 introduced some incompatible changes to the \\s-1API\\s0.\n.PP\nAt the moment, the \\f(CW\\*(C`ev.h\\*(C'\\fR header file provides compatibility definitions\nfor all changes, so most programs should still compile. The compatibility\nlayer might be removed in later versions of libev, so better update to the\nnew \\s-1API\\s0 early than late.\n.ie n .IP \"\"\"EV_COMPAT3\"\" backwards compatibility mechanism\" 4\n.el .IP \"\\f(CWEV_COMPAT3\\fR backwards compatibility mechanism\" 4\n.IX Item \"EV_COMPAT3 backwards compatibility mechanism\"\nThe backward compatibility mechanism can be controlled by\n\\&\\f(CW\\*(C`EV_COMPAT3\\*(C'\\fR. See \\*(L\"\\s-1PREPROCESSOR\\s0 \\s-1SYMBOLS/MACROS\\s0\\*(R\" in the \\*(L\"\\s-1EMBEDDING\\s0\\*(R\"\nsection.\n.ie n .IP \"\"\"ev_default_destroy\"\" and \"\"ev_default_fork\"\" have been removed\" 4\n.el .IP \"\\f(CWev_default_destroy\\fR and \\f(CWev_default_fork\\fR have been removed\" 4\n.IX Item \"ev_default_destroy and ev_default_fork have been removed\"\nThese calls can be replaced easily by their \\f(CW\\*(C`ev_loop_xxx\\*(C'\\fR counterparts:\n.Sp\n.Vb 2\n\\&   ev_loop_destroy (EV_DEFAULT_UC);\n\\&   ev_loop_fork (EV_DEFAULT);\n.Ve\n.IP \"function/symbol renames\" 4\n.IX Item \"function/symbol renames\"\nA number of functions and symbols have been renamed:\n.Sp\n.Vb 3\n\\&  ev_loop         => ev_run\n\\&  EVLOOP_NONBLOCK => EVRUN_NOWAIT\n\\&  EVLOOP_ONESHOT  => EVRUN_ONCE\n\\&\n\\&  ev_unloop       => ev_break\n\\&  EVUNLOOP_CANCEL => EVBREAK_CANCEL\n\\&  EVUNLOOP_ONE    => EVBREAK_ONE\n\\&  EVUNLOOP_ALL    => EVBREAK_ALL\n\\&\n\\&  EV_TIMEOUT      => EV_TIMER\n\\&\n\\&  ev_loop_count   => ev_iteration\n\\&  ev_loop_depth   => ev_depth\n\\&  ev_loop_verify  => ev_verify\n.Ve\n.Sp\nMost functions working on \\f(CW\\*(C`struct ev_loop\\*(C'\\fR objects don't have an\n\\&\\f(CW\\*(C`ev_loop_\\*(C'\\fR prefix, so it was removed; \\f(CW\\*(C`ev_loop\\*(C'\\fR, \\f(CW\\*(C`ev_unloop\\*(C'\\fR and\nassociated constants have been renamed to not collide with the \\f(CW\\*(C`struct\nev_loop\\*(C'\\fR anymore and \\f(CW\\*(C`EV_TIMER\\*(C'\\fR now follows the same naming scheme\nas all other watcher types. Note that \\f(CW\\*(C`ev_loop_fork\\*(C'\\fR is still called\n\\&\\f(CW\\*(C`ev_loop_fork\\*(C'\\fR because it would otherwise clash with the \\f(CW\\*(C`ev_fork\\*(C'\\fR\ntypedef.\n.ie n .IP \"\"\"EV_MINIMAL\"\" mechanism replaced by \"\"EV_FEATURES\"\"\" 4\n.el .IP \"\\f(CWEV_MINIMAL\\fR mechanism replaced by \\f(CWEV_FEATURES\\fR\" 4\n.IX Item \"EV_MINIMAL mechanism replaced by EV_FEATURES\"\nThe preprocessor symbol \\f(CW\\*(C`EV_MINIMAL\\*(C'\\fR has been replaced by a different\nmechanism, \\f(CW\\*(C`EV_FEATURES\\*(C'\\fR. Programs using \\f(CW\\*(C`EV_MINIMAL\\*(C'\\fR usually compile\nand work, but the library code will of course be larger.\n.SH \"GLOSSARY\"\n.IX Header \"GLOSSARY\"\n.IP \"active\" 4\n.IX Item \"active\"\nA watcher is active as long as it has been started and not yet stopped.\nSee \\*(L\"\\s-1WATCHER\\s0 \\s-1STATES\\s0\\*(R\" for details.\n.IP \"application\" 4\n.IX Item \"application\"\nIn this document, an application is whatever is using libev.\n.IP \"backend\" 4\n.IX Item \"backend\"\nThe part of the code dealing with the operating system interfaces.\n.IP \"callback\" 4\n.IX Item \"callback\"\nThe address of a function that is called when some event has been\ndetected. Callbacks are being passed the event loop, the watcher that\nreceived the event, and the actual event bitset.\n.IP \"callback/watcher invocation\" 4\n.IX Item \"callback/watcher invocation\"\nThe act of calling the callback associated with a watcher.\n.IP \"event\" 4\n.IX Item \"event\"\nA change of state of some external event, such as data now being available\nfor reading on a file descriptor, time having passed or simply not having\nany other events happening anymore.\n.Sp\nIn libev, events are represented as single bits (such as \\f(CW\\*(C`EV_READ\\*(C'\\fR or\n\\&\\f(CW\\*(C`EV_TIMER\\*(C'\\fR).\n.IP \"event library\" 4\n.IX Item \"event library\"\nA software package implementing an event model and loop.\n.IP \"event loop\" 4\n.IX Item \"event loop\"\nAn entity that handles and processes external events and converts them\ninto callback invocations.\n.IP \"event model\" 4\n.IX Item \"event model\"\nThe model used to describe how an event loop handles and processes\nwatchers and events.\n.IP \"pending\" 4\n.IX Item \"pending\"\nA watcher is pending as soon as the corresponding event has been\ndetected. See \\*(L\"\\s-1WATCHER\\s0 \\s-1STATES\\s0\\*(R\" for details.\n.IP \"real time\" 4\n.IX Item \"real time\"\nThe physical time that is observed. It is apparently strictly monotonic :)\n.IP \"wall-clock time\" 4\n.IX Item \"wall-clock time\"\nThe time and date as shown on clocks. Unlike real time, it can actually\nbe wrong and jump forwards and backwards, e.g. when you adjust your\nclock.\n.IP \"watcher\" 4\n.IX Item \"watcher\"\nA data structure that describes interest in certain events. Watchers need\nto be started (attached to an event loop) before they can receive events.\n.SH \"AUTHOR\"\n.IX Header \"AUTHOR\"\nMarc Lehmann <libev@schmorp.de>, with repeated corrections by Mikael\nMagnusson and Emanuele Giaquinta, and minor corrections by many others.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev.c",
    "content": "/*\n * libev event processing core, watcher management\n *\n * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n/* this big block deduces configuration from config.h */\n#ifndef EV_STANDALONE\n# ifdef EV_CONFIG_H\n#  include EV_CONFIG_H\n# else\n#  include \"config.h\"\n# endif\n\n# if HAVE_FLOOR\n#  ifndef EV_USE_FLOOR\n#   define EV_USE_FLOOR 1\n#  endif\n# endif\n\n# if HAVE_CLOCK_SYSCALL\n#  ifndef EV_USE_CLOCK_SYSCALL\n#   define EV_USE_CLOCK_SYSCALL 1\n#   ifndef EV_USE_REALTIME\n#    define EV_USE_REALTIME  0\n#   endif\n#   ifndef EV_USE_MONOTONIC\n#    define EV_USE_MONOTONIC 1\n#   endif\n#  endif\n# elif !defined EV_USE_CLOCK_SYSCALL\n#  define EV_USE_CLOCK_SYSCALL 0\n# endif\n\n# if HAVE_CLOCK_GETTIME\n#  ifndef EV_USE_MONOTONIC\n#   define EV_USE_MONOTONIC 1\n#  endif\n#  ifndef EV_USE_REALTIME\n#   define EV_USE_REALTIME  0\n#  endif\n# else\n#  ifndef EV_USE_MONOTONIC\n#   define EV_USE_MONOTONIC 0\n#  endif\n#  ifndef EV_USE_REALTIME\n#   define EV_USE_REALTIME  0\n#  endif\n# endif\n\n# if HAVE_NANOSLEEP\n#  ifndef EV_USE_NANOSLEEP\n#    define EV_USE_NANOSLEEP EV_FEATURE_OS\n#  endif\n# else\n#   undef EV_USE_NANOSLEEP\n#   define EV_USE_NANOSLEEP 0\n# endif\n\n# if HAVE_SELECT && HAVE_SYS_SELECT_H\n#  ifndef EV_USE_SELECT\n#   define EV_USE_SELECT EV_FEATURE_BACKENDS\n#  endif\n# else\n#  undef EV_USE_SELECT\n#  define EV_USE_SELECT 0\n# endif\n\n# if HAVE_POLL && HAVE_POLL_H\n#  ifndef EV_USE_POLL\n#   define EV_USE_POLL EV_FEATURE_BACKENDS\n#  endif\n# else\n#  undef EV_USE_POLL\n#  define EV_USE_POLL 0\n# endif\n   \n# if HAVE_EPOLL_CTL && HAVE_SYS_EPOLL_H\n#  ifndef EV_USE_EPOLL\n#   define EV_USE_EPOLL EV_FEATURE_BACKENDS\n#  endif\n# else\n#  undef EV_USE_EPOLL\n#  define EV_USE_EPOLL 0\n# endif\n   \n# if HAVE_KQUEUE && HAVE_SYS_EVENT_H\n#  ifndef EV_USE_KQUEUE\n#   define EV_USE_KQUEUE EV_FEATURE_BACKENDS\n#  endif\n# else\n#  undef EV_USE_KQUEUE\n#  define EV_USE_KQUEUE 0\n# endif\n   \n# if HAVE_PORT_H && HAVE_PORT_CREATE\n#  ifndef EV_USE_PORT\n#   define EV_USE_PORT EV_FEATURE_BACKENDS\n#  endif\n# else\n#  undef EV_USE_PORT\n#  define EV_USE_PORT 0\n# endif\n\n# if HAVE_INOTIFY_INIT && HAVE_SYS_INOTIFY_H\n#  ifndef EV_USE_INOTIFY\n#   define EV_USE_INOTIFY EV_FEATURE_OS\n#  endif\n# else\n#  undef EV_USE_INOTIFY\n#  define EV_USE_INOTIFY 0\n# endif\n\n# if HAVE_SIGNALFD && HAVE_SYS_SIGNALFD_H\n#  ifndef EV_USE_SIGNALFD\n#   define EV_USE_SIGNALFD EV_FEATURE_OS\n#  endif\n# else\n#  undef EV_USE_SIGNALFD\n#  define EV_USE_SIGNALFD 0\n# endif\n\n# if HAVE_EVENTFD\n#  ifndef EV_USE_EVENTFD\n#   define EV_USE_EVENTFD EV_FEATURE_OS\n#  endif\n# else\n#  undef EV_USE_EVENTFD\n#  define EV_USE_EVENTFD 0\n# endif\n \n#endif\n\n#include <stdlib.h>\n#include <string.h>\n#include <fcntl.h>\n#include <stddef.h>\n\n#include <stdio.h>\n\n#include <assert.h>\n#include <errno.h>\n#include <sys/types.h>\n#include <time.h>\n#include <limits.h>\n\n#include <signal.h>\n\n#ifdef EV_H\n# include EV_H\n#else\n# include \"ev.h\"\n#endif\n\n#if EV_NO_THREADS\n# undef EV_NO_SMP\n# define EV_NO_SMP 1\n# undef ECB_NO_THREADS\n# define ECB_NO_THREADS 1\n#endif\n#if EV_NO_SMP\n# undef EV_NO_SMP\n# define ECB_NO_SMP 1\n#endif\n\n#ifndef _WIN32\n# include <sys/time.h>\n# include <sys/wait.h>\n# include <unistd.h>\n#else\n# include <io.h>\n# define WIN32_LEAN_AND_MEAN\n# include <winsock2.h>\n# include <windows.h>\n# ifndef EV_SELECT_IS_WINSOCKET\n#  define EV_SELECT_IS_WINSOCKET 1\n# endif\n# undef EV_AVOID_STDIO\n#endif\n\n/* OS X, in its infinite idiocy, actually HARDCODES\n * a limit of 1024 into their select. Where people have brains,\n * OS X engineers apparently have a vacuum. Or maybe they were\n * ordered to have a vacuum, or they do anything for money.\n * This might help. Or not.\n */\n#define _DARWIN_UNLIMITED_SELECT 1\n\n/* this block tries to deduce configuration from header-defined symbols and defaults */\n\n/* try to deduce the maximum number of signals on this platform */\n#if defined EV_NSIG\n/* use what's provided */\n#elif defined NSIG\n# define EV_NSIG (NSIG)\n#elif defined _NSIG\n# define EV_NSIG (_NSIG)\n#elif defined SIGMAX\n# define EV_NSIG (SIGMAX+1)\n#elif defined SIG_MAX\n# define EV_NSIG (SIG_MAX+1)\n#elif defined _SIG_MAX\n# define EV_NSIG (_SIG_MAX+1)\n#elif defined MAXSIG\n# define EV_NSIG (MAXSIG+1)\n#elif defined MAX_SIG\n# define EV_NSIG (MAX_SIG+1)\n#elif defined SIGARRAYSIZE\n# define EV_NSIG (SIGARRAYSIZE) /* Assume ary[SIGARRAYSIZE] */\n#elif defined _sys_nsig\n# define EV_NSIG (_sys_nsig) /* Solaris 2.5 */\n#else\n# define EV_NSIG (8 * sizeof (sigset_t) + 1)\n#endif\n\n#ifndef EV_USE_FLOOR\n# define EV_USE_FLOOR 0\n#endif\n\n#ifndef EV_USE_CLOCK_SYSCALL\n# if __linux && __GLIBC__ == 2 && __GLIBC_MINOR__ < 17\n#  define EV_USE_CLOCK_SYSCALL EV_FEATURE_OS\n# else\n#  define EV_USE_CLOCK_SYSCALL 0\n# endif\n#endif\n\n#if !(_POSIX_TIMERS > 0)\n# ifndef EV_USE_MONOTONIC\n#  define EV_USE_MONOTONIC 0\n# endif\n# ifndef EV_USE_REALTIME\n#  define EV_USE_REALTIME 0\n# endif\n#endif\n\n#ifndef EV_USE_MONOTONIC\n# if defined _POSIX_MONOTONIC_CLOCK && _POSIX_MONOTONIC_CLOCK >= 0\n#  define EV_USE_MONOTONIC EV_FEATURE_OS\n# else\n#  define EV_USE_MONOTONIC 0\n# endif\n#endif\n\n#ifndef EV_USE_REALTIME\n# define EV_USE_REALTIME !EV_USE_CLOCK_SYSCALL\n#endif\n\n#ifndef EV_USE_NANOSLEEP\n# if _POSIX_C_SOURCE >= 199309L\n#  define EV_USE_NANOSLEEP EV_FEATURE_OS\n# else\n#  define EV_USE_NANOSLEEP 0\n# endif\n#endif\n\n#ifndef EV_USE_SELECT\n# define EV_USE_SELECT EV_FEATURE_BACKENDS\n#endif\n\n#ifndef EV_USE_POLL\n# ifdef _WIN32\n#  define EV_USE_POLL 0\n# else\n#  define EV_USE_POLL EV_FEATURE_BACKENDS\n# endif\n#endif\n\n#ifndef EV_USE_EPOLL\n# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 4))\n#  define EV_USE_EPOLL EV_FEATURE_BACKENDS\n# else\n#  define EV_USE_EPOLL 0\n# endif\n#endif\n\n#ifndef EV_USE_KQUEUE\n# define EV_USE_KQUEUE 0\n#endif\n\n#ifndef EV_USE_PORT\n# define EV_USE_PORT 0\n#endif\n\n#ifndef EV_USE_INOTIFY\n# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 4))\n#  define EV_USE_INOTIFY EV_FEATURE_OS\n# else\n#  define EV_USE_INOTIFY 0\n# endif\n#endif\n\n#ifndef EV_PID_HASHSIZE\n# define EV_PID_HASHSIZE EV_FEATURE_DATA ? 16 : 1\n#endif\n\n#ifndef EV_INOTIFY_HASHSIZE\n# define EV_INOTIFY_HASHSIZE EV_FEATURE_DATA ? 16 : 1\n#endif\n\n#ifndef EV_USE_EVENTFD\n# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))\n#  define EV_USE_EVENTFD EV_FEATURE_OS\n# else\n#  define EV_USE_EVENTFD 0\n# endif\n#endif\n\n#ifndef EV_USE_SIGNALFD\n# if __linux && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))\n#  define EV_USE_SIGNALFD EV_FEATURE_OS\n# else\n#  define EV_USE_SIGNALFD 0\n# endif\n#endif\n\n#if 0 /* debugging */\n# define EV_VERIFY 3\n# define EV_USE_4HEAP 1\n# define EV_HEAP_CACHE_AT 1\n#endif\n\n#ifndef EV_VERIFY\n# define EV_VERIFY (EV_FEATURE_API ? 1 : 0)\n#endif\n\n#ifndef EV_USE_4HEAP\n# define EV_USE_4HEAP EV_FEATURE_DATA\n#endif\n\n#ifndef EV_HEAP_CACHE_AT\n# define EV_HEAP_CACHE_AT EV_FEATURE_DATA\n#endif\n\n#ifdef ANDROID\n/* supposedly, android doesn't typedef fd_mask */\n# undef EV_USE_SELECT\n# define EV_USE_SELECT 0\n/* supposedly, we need to include syscall.h, not sys/syscall.h, so just disable */\n# undef EV_USE_CLOCK_SYSCALL\n# define EV_USE_CLOCK_SYSCALL 0\n#endif\n\n/* aix's poll.h seems to cause lots of trouble */\n#ifdef _AIX\n/* AIX has a completely broken poll.h header */\n# undef EV_USE_POLL\n# define EV_USE_POLL 0\n#endif\n\n/* on linux, we can use a (slow) syscall to avoid a dependency on pthread, */\n/* which makes programs even slower. might work on other unices, too. */\n#if EV_USE_CLOCK_SYSCALL\n# include <sys/syscall.h>\n# ifdef SYS_clock_gettime\n#  define clock_gettime(id, ts) syscall (SYS_clock_gettime, (id), (ts))\n#  undef EV_USE_MONOTONIC\n#  define EV_USE_MONOTONIC 1\n# else\n#  undef EV_USE_CLOCK_SYSCALL\n#  define EV_USE_CLOCK_SYSCALL 0\n# endif\n#endif\n\n/* this block fixes any misconfiguration where we know we run into trouble otherwise */\n\n#ifndef CLOCK_MONOTONIC\n# undef EV_USE_MONOTONIC\n# define EV_USE_MONOTONIC 0\n#endif\n\n#ifndef CLOCK_REALTIME\n# undef EV_USE_REALTIME\n# define EV_USE_REALTIME 0\n#endif\n\n#if !EV_STAT_ENABLE\n# undef EV_USE_INOTIFY\n# define EV_USE_INOTIFY 0\n#endif\n\n#if !EV_USE_NANOSLEEP\n/* hp-ux has it in sys/time.h, which we unconditionally include above */\n# if !defined _WIN32 && !defined __hpux\n#  include <sys/select.h>\n# endif\n#endif\n\n#if EV_USE_INOTIFY\n# include <sys/statfs.h>\n# include <sys/inotify.h>\n/* some very old inotify.h headers don't have IN_DONT_FOLLOW */\n# ifndef IN_DONT_FOLLOW\n#  undef EV_USE_INOTIFY\n#  define EV_USE_INOTIFY 0\n# endif\n#endif\n\n#if EV_USE_EVENTFD\n/* our minimum requirement is glibc 2.7 which has the stub, but not the header */\n# include <stdint.h>\n# ifndef EFD_NONBLOCK\n#  define EFD_NONBLOCK O_NONBLOCK\n# endif\n# ifndef EFD_CLOEXEC\n#  ifdef O_CLOEXEC\n#   define EFD_CLOEXEC O_CLOEXEC\n#  else\n#   define EFD_CLOEXEC 02000000\n#  endif\n# endif\nEV_CPP(extern \"C\") int (eventfd) (unsigned int initval, int flags);\n#endif\n\n#if EV_USE_SIGNALFD\n/* our minimum requirement is glibc 2.7 which has the stub, but not the header */\n# include <stdint.h>\n# ifndef SFD_NONBLOCK\n#  define SFD_NONBLOCK O_NONBLOCK\n# endif\n# ifndef SFD_CLOEXEC\n#  ifdef O_CLOEXEC\n#   define SFD_CLOEXEC O_CLOEXEC\n#  else\n#   define SFD_CLOEXEC 02000000\n#  endif\n# endif\nEV_CPP (extern \"C\") int signalfd (int fd, const sigset_t *mask, int flags);\n\nstruct signalfd_siginfo\n{\n  uint32_t ssi_signo;\n  char pad[128 - sizeof (uint32_t)];\n};\n#endif\n\n/**/\n\n#if EV_VERIFY >= 3\n# define EV_FREQUENT_CHECK ev_verify (EV_A)\n#else\n# define EV_FREQUENT_CHECK do { } while (0)\n#endif\n\n/*\n * This is used to work around floating point rounding problems.\n * This value is good at least till the year 4000.\n */\n#define MIN_INTERVAL  0.0001220703125 /* 1/2**13, good till 4000 */\n/*#define MIN_INTERVAL  0.00000095367431640625 /* 1/2**20, good till 2200 */\n\n#define MIN_TIMEJUMP  1. /* minimum timejump that gets detected (if monotonic clock available) */\n#define MAX_BLOCKTIME 59.743 /* never wait longer than this time (to detect time jumps) */\n\n#define EV_TV_SET(tv,t) do { tv.tv_sec = (long)t; tv.tv_usec = (long)((t - tv.tv_sec) * 1e6); } while (0)\n#define EV_TS_SET(ts,t) do { ts.tv_sec = (long)t; ts.tv_nsec = (long)((t - ts.tv_sec) * 1e9); } while (0)\n\n/* the following is ecb.h embedded into libev - use update_ev_c to update from an external copy */\n/* ECB.H BEGIN */\n/*\n * libecb - http://software.schmorp.de/pkg/libecb\n *\n * Copyright (©) 2009-2015 Marc Alexander Lehmann <libecb@schmorp.de>\n * Copyright (©) 2011 Emanuele Giaquinta\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifndef ECB_H\n#define ECB_H\n\n/* 16 bits major, 16 bits minor */\n#define ECB_VERSION 0x00010004\n\n#ifdef _WIN32\n  typedef   signed char   int8_t;\n  typedef unsigned char  uint8_t;\n  typedef   signed short  int16_t;\n  typedef unsigned short uint16_t;\n  typedef   signed int    int32_t;\n  typedef unsigned int   uint32_t;\n  #if __GNUC__\n    typedef   signed long long int64_t;\n    typedef unsigned long long uint64_t;\n  #else /* _MSC_VER || __BORLANDC__ */\n    typedef   signed __int64   int64_t;\n    typedef unsigned __int64   uint64_t;\n  #endif\n  #ifdef _WIN64\n    #define ECB_PTRSIZE 8\n    typedef uint64_t uintptr_t;\n    typedef  int64_t  intptr_t;\n  #else\n    #define ECB_PTRSIZE 4\n    typedef uint32_t uintptr_t;\n    typedef  int32_t  intptr_t;\n  #endif\n#else\n  #include <inttypes.h>\n  #if UINTMAX_MAX > 0xffffffffU\n    #define ECB_PTRSIZE 8\n  #else\n    #define ECB_PTRSIZE 4\n  #endif\n#endif\n\n#define ECB_GCC_AMD64 (__amd64 || __amd64__ || __x86_64 || __x86_64__)\n#define ECB_MSVC_AMD64 (_M_AMD64 || _M_X64)\n\n/* work around x32 idiocy by defining proper macros */\n#if ECB_GCC_AMD64 || ECB_MSVC_AMD64\n  #if _ILP32\n    #define ECB_AMD64_X32 1\n  #else\n    #define ECB_AMD64 1\n  #endif\n#endif\n\n/* many compilers define _GNUC_ to some versions but then only implement\n * what their idiot authors think are the \"more important\" extensions,\n * causing enormous grief in return for some better fake benchmark numbers.\n * or so.\n * we try to detect these and simply assume they are not gcc - if they have\n * an issue with that they should have done it right in the first place.\n */\n#if !defined __GNUC_MINOR__ || defined __INTEL_COMPILER || defined __SUNPRO_C || defined __SUNPRO_CC || defined __llvm__ || defined __clang__\n  #define ECB_GCC_VERSION(major,minor) 0\n#else\n  #define ECB_GCC_VERSION(major,minor) (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))\n#endif\n\n#define ECB_CLANG_VERSION(major,minor) (__clang_major__ > (major) || (__clang_major__ == (major) && __clang_minor__ >= (minor)))\n\n#if __clang__ && defined __has_builtin\n  #define ECB_CLANG_BUILTIN(x) __has_builtin (x)\n#else\n  #define ECB_CLANG_BUILTIN(x) 0\n#endif\n\n#if __clang__ && defined __has_extension\n  #define ECB_CLANG_EXTENSION(x) __has_extension (x)\n#else\n  #define ECB_CLANG_EXTENSION(x) 0\n#endif\n\n#define ECB_CPP   (__cplusplus+0)\n#define ECB_CPP11 (__cplusplus >= 201103L)\n\n#if ECB_CPP\n  #define ECB_C            0\n  #define ECB_STDC_VERSION 0\n#else\n  #define ECB_C            1\n  #define ECB_STDC_VERSION __STDC_VERSION__\n#endif\n\n#define ECB_C99   (ECB_STDC_VERSION >= 199901L)\n#define ECB_C11   (ECB_STDC_VERSION >= 201112L)\n\n#if ECB_CPP\n  #define ECB_EXTERN_C extern \"C\"\n  #define ECB_EXTERN_C_BEG ECB_EXTERN_C {\n  #define ECB_EXTERN_C_END }\n#else\n  #define ECB_EXTERN_C extern\n  #define ECB_EXTERN_C_BEG\n  #define ECB_EXTERN_C_END\n#endif\n\n/*****************************************************************************/\n\n/* ECB_NO_THREADS - ecb is not used by multiple threads, ever */\n/* ECB_NO_SMP     - ecb might be used in multiple threads, but only on a single cpu */\n\n#if ECB_NO_THREADS\n  #define ECB_NO_SMP 1\n#endif\n\n#if ECB_NO_SMP\n  #define ECB_MEMORY_FENCE do { } while (0)\n#endif\n\n/* http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/compiler_ref/compiler_builtins.html */\n#if __xlC__ && ECB_CPP\n  #include <builtins.h>\n#endif\n\n#ifndef ECB_MEMORY_FENCE\n  #if ECB_GCC_VERSION(2,5) || defined __INTEL_COMPILER || (__llvm__ && __GNUC__) || __SUNPRO_C >= 0x5110 || __SUNPRO_CC >= 0x5110\n    #if __i386 || __i386__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"lock; orb $0, -1(%%esp)\" : : : \"memory\")\n      #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ (\"\"                        : : : \"memory\")\n      #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ (\"\")\n    #elif ECB_GCC_AMD64\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"mfence\"   : : : \"memory\")\n      #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ (\"\"         : : : \"memory\")\n      #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ (\"\")\n    #elif __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"sync\"     : : : \"memory\")\n    #elif defined __ARM_ARCH_6__  || defined __ARM_ARCH_6J__  \\\n       || defined __ARM_ARCH_6K__ || defined __ARM_ARCH_6ZK__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"mcr p15,0,%0,c7,c10,5\" : : \"r\" (0) : \"memory\")\n    #elif defined __ARM_ARCH_7__  || defined __ARM_ARCH_7A__  \\\n       || defined __ARM_ARCH_7M__ || defined __ARM_ARCH_7R__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"dmb\"      : : : \"memory\")\n    #elif __aarch64__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"dmb ish\"  : : : \"memory\")\n    #elif (__sparc || __sparc__) && !__sparcv8\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"membar #LoadStore | #LoadLoad | #StoreStore | #StoreLoad\" : : : \"memory\")\n      #define ECB_MEMORY_FENCE_ACQUIRE __asm__ __volatile__ (\"membar #LoadStore | #LoadLoad\"                            : : : \"memory\")\n      #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ (\"membar #LoadStore             | #StoreStore\")\n    #elif defined __s390__ || defined __s390x__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"bcr 15,0\" : : : \"memory\")\n    #elif defined __mips__\n      /* GNU/Linux emulates sync on mips1 architectures, so we force its use */\n      /* anybody else who still uses mips1 is supposed to send in their version, with detection code. */\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\".set mips2; sync; .set mips0\" : : : \"memory\")\n    #elif defined __alpha__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"mb\"       : : : \"memory\")\n    #elif defined __hppa__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"\"         : : : \"memory\")\n      #define ECB_MEMORY_FENCE_RELEASE __asm__ __volatile__ (\"\")\n    #elif defined __ia64__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"mf\"       : : : \"memory\")\n    #elif defined __m68k__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"\"         : : : \"memory\")\n    #elif defined __m88k__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"tb1 0,%%r0,128\" : : : \"memory\")\n    #elif defined __sh__\n      #define ECB_MEMORY_FENCE         __asm__ __volatile__ (\"\"         : : : \"memory\")\n    #endif\n  #endif\n#endif\n\n#ifndef ECB_MEMORY_FENCE\n  #if ECB_GCC_VERSION(4,7)\n    /* see comment below (stdatomic.h) about the C11 memory model. */\n    #define ECB_MEMORY_FENCE         __atomic_thread_fence (__ATOMIC_SEQ_CST)\n    #define ECB_MEMORY_FENCE_ACQUIRE __atomic_thread_fence (__ATOMIC_ACQUIRE)\n    #define ECB_MEMORY_FENCE_RELEASE __atomic_thread_fence (__ATOMIC_RELEASE)\n\n  #elif ECB_CLANG_EXTENSION(c_atomic)\n    /* see comment below (stdatomic.h) about the C11 memory model. */\n    #define ECB_MEMORY_FENCE         __c11_atomic_thread_fence (__ATOMIC_SEQ_CST)\n    #define ECB_MEMORY_FENCE_ACQUIRE __c11_atomic_thread_fence (__ATOMIC_ACQUIRE)\n    #define ECB_MEMORY_FENCE_RELEASE __c11_atomic_thread_fence (__ATOMIC_RELEASE)\n\n  #elif ECB_GCC_VERSION(4,4) || defined __INTEL_COMPILER || defined __clang__\n    #define ECB_MEMORY_FENCE         __sync_synchronize ()\n  #elif _MSC_VER >= 1500 /* VC++ 2008 */\n    /* apparently, microsoft broke all the memory barrier stuff in Visual Studio 2008... */\n    #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier)\n    #define ECB_MEMORY_FENCE         _ReadWriteBarrier (); MemoryBarrier()\n    #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier (); MemoryBarrier() /* according to msdn, _ReadBarrier is not a load fence */\n    #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier (); MemoryBarrier()\n  #elif _MSC_VER >= 1400 /* VC++ 2005 */\n    #pragma intrinsic(_ReadBarrier,_WriteBarrier,_ReadWriteBarrier)\n    #define ECB_MEMORY_FENCE         _ReadWriteBarrier ()\n    #define ECB_MEMORY_FENCE_ACQUIRE _ReadWriteBarrier () /* according to msdn, _ReadBarrier is not a load fence */\n    #define ECB_MEMORY_FENCE_RELEASE _WriteBarrier ()\n  #elif defined _WIN32\n    #include <WinNT.h>\n    #define ECB_MEMORY_FENCE         MemoryBarrier () /* actually just xchg on x86... scary */\n  #elif __SUNPRO_C >= 0x5110 || __SUNPRO_CC >= 0x5110\n    #include <mbarrier.h>\n    #define ECB_MEMORY_FENCE         __machine_rw_barrier ()\n    #define ECB_MEMORY_FENCE_ACQUIRE __machine_r_barrier  ()\n    #define ECB_MEMORY_FENCE_RELEASE __machine_w_barrier  ()\n  #elif __xlC__\n    #define ECB_MEMORY_FENCE         __sync ()\n  #endif\n#endif\n\n#ifndef ECB_MEMORY_FENCE\n  #if ECB_C11 && !defined __STDC_NO_ATOMICS__\n    /* we assume that these memory fences work on all variables/all memory accesses, */\n    /* not just C11 atomics and atomic accesses */\n    #include <stdatomic.h>\n    /* Unfortunately, neither gcc 4.7 nor clang 3.1 generate any instructions for */\n    /* any fence other than seq_cst, which isn't very efficient for us. */\n    /* Why that is, we don't know - either the C11 memory model is quite useless */\n    /* for most usages, or gcc and clang have a bug */\n    /* I *currently* lean towards the latter, and inefficiently implement */\n    /* all three of ecb's fences as a seq_cst fence */\n    /* Update, gcc-4.8 generates mfence for all c++ fences, but nothing */\n    /* for all __atomic_thread_fence's except seq_cst */\n    #define ECB_MEMORY_FENCE         atomic_thread_fence (memory_order_seq_cst)\n  #endif\n#endif\n\n#ifndef ECB_MEMORY_FENCE\n  #if !ECB_AVOID_PTHREADS\n    /*\n     * if you get undefined symbol references to pthread_mutex_lock,\n     * or failure to find pthread.h, then you should implement\n     * the ECB_MEMORY_FENCE operations for your cpu/compiler\n     * OR provide pthread.h and link against the posix thread library\n     * of your system.\n     */\n    #include <pthread.h>\n    #define ECB_NEEDS_PTHREADS 1\n    #define ECB_MEMORY_FENCE_NEEDS_PTHREADS 1\n\n    static pthread_mutex_t ecb_mf_lock = PTHREAD_MUTEX_INITIALIZER;\n    #define ECB_MEMORY_FENCE do { pthread_mutex_lock (&ecb_mf_lock); pthread_mutex_unlock (&ecb_mf_lock); } while (0)\n  #endif\n#endif\n\n#if !defined ECB_MEMORY_FENCE_ACQUIRE && defined ECB_MEMORY_FENCE\n  #define ECB_MEMORY_FENCE_ACQUIRE ECB_MEMORY_FENCE\n#endif\n\n#if !defined ECB_MEMORY_FENCE_RELEASE && defined ECB_MEMORY_FENCE\n  #define ECB_MEMORY_FENCE_RELEASE ECB_MEMORY_FENCE\n#endif\n\n/*****************************************************************************/\n\n#if ECB_CPP\n  #define ecb_inline static inline\n#elif ECB_GCC_VERSION(2,5)\n  #define ecb_inline static __inline__\n#elif ECB_C99\n  #define ecb_inline static inline\n#else\n  #define ecb_inline static\n#endif\n\n#if ECB_GCC_VERSION(3,3)\n  #define ecb_restrict __restrict__\n#elif ECB_C99\n  #define ecb_restrict restrict\n#else\n  #define ecb_restrict\n#endif\n\ntypedef int ecb_bool;\n\n#define ECB_CONCAT_(a, b) a ## b\n#define ECB_CONCAT(a, b) ECB_CONCAT_(a, b)\n#define ECB_STRINGIFY_(a) # a\n#define ECB_STRINGIFY(a) ECB_STRINGIFY_(a)\n#define ECB_STRINGIFY_EXPR(expr) ((expr), ECB_STRINGIFY_ (expr))\n\n#define ecb_function_ ecb_inline\n\n#if ECB_GCC_VERSION(3,1) || ECB_CLANG_VERSION(2,8)\n  #define ecb_attribute(attrlist)        __attribute__ (attrlist)\n#else\n  #define ecb_attribute(attrlist)\n#endif\n\n#if ECB_GCC_VERSION(3,1) || ECB_CLANG_BUILTIN(__builtin_constant_p)\n  #define ecb_is_constant(expr)          __builtin_constant_p (expr)\n#else\n  /* possible C11 impl for integral types\n  typedef struct ecb_is_constant_struct ecb_is_constant_struct;\n  #define ecb_is_constant(expr)          _Generic ((1 ? (struct ecb_is_constant_struct *)0 : (void *)((expr) - (expr)), ecb_is_constant_struct *: 0, default: 1)) */\n\n  #define ecb_is_constant(expr)          0\n#endif\n\n#if ECB_GCC_VERSION(3,1) || ECB_CLANG_BUILTIN(__builtin_expect)\n  #define ecb_expect(expr,value)         __builtin_expect ((expr),(value))\n#else\n  #define ecb_expect(expr,value)         (expr)\n#endif\n\n#if ECB_GCC_VERSION(3,1) || ECB_CLANG_BUILTIN(__builtin_prefetch)\n  #define ecb_prefetch(addr,rw,locality) __builtin_prefetch (addr, rw, locality)\n#else\n  #define ecb_prefetch(addr,rw,locality)\n#endif\n\n/* no emulation for ecb_decltype */\n#if ECB_CPP11\n  // older implementations might have problems with decltype(x)::type, work around it\n  template<class T> struct ecb_decltype_t { typedef T type; };\n  #define ecb_decltype(x) ecb_decltype_t<decltype (x)>::type\n#elif ECB_GCC_VERSION(3,0) || ECB_CLANG_VERSION(2,8)\n  #define ecb_decltype(x) __typeof__ (x)\n#endif\n\n#if _MSC_VER >= 1300\n  #define ecb_deprecated __declspec (deprecated)\n#else\n  #define ecb_deprecated ecb_attribute ((__deprecated__))\n#endif\n\n#if _MSC_VER >= 1500\n  #define ecb_deprecated_message(msg) __declspec (deprecated (msg))\n#elif ECB_GCC_VERSION(4,5)\n  #define ecb_deprecated_message(msg) ecb_attribute ((__deprecated__ (msg))\n#else\n  #define ecb_deprecated_message(msg) ecb_deprecated\n#endif\n\n#if _MSC_VER >= 1400\n  #define ecb_noinline __declspec (noinline)\n#else\n  #define ecb_noinline ecb_attribute ((__noinline__))\n#endif\n\n#define ecb_unused     ecb_attribute ((__unused__))\n#define ecb_const      ecb_attribute ((__const__))\n#define ecb_pure       ecb_attribute ((__pure__))\n\n#if ECB_C11 || __IBMC_NORETURN\n  /* http://www-01.ibm.com/support/knowledgecenter/SSGH3R_13.1.0/com.ibm.xlcpp131.aix.doc/language_ref/noreturn.html */\n  #define ecb_noreturn   _Noreturn\n#elif ECB_CPP11\n  #define ecb_noreturn   [[noreturn]]\n#elif _MSC_VER >= 1200\n  /* http://msdn.microsoft.com/en-us/library/k6ktzx3s.aspx */\n  #define ecb_noreturn   __declspec (noreturn)\n#else\n  #define ecb_noreturn   ecb_attribute ((__noreturn__))\n#endif\n\n#if ECB_GCC_VERSION(4,3)\n  #define ecb_artificial ecb_attribute ((__artificial__))\n  #define ecb_hot        ecb_attribute ((__hot__))\n  #define ecb_cold       ecb_attribute ((__cold__))\n#else\n  #define ecb_artificial\n  #define ecb_hot\n  #define ecb_cold\n#endif\n\n/* put around conditional expressions if you are very sure that the  */\n/* expression is mostly true or mostly false. note that these return */\n/* booleans, not the expression.                                     */\n#define ecb_expect_false(expr) ecb_expect (!!(expr), 0)\n#define ecb_expect_true(expr)  ecb_expect (!!(expr), 1)\n/* for compatibility to the rest of the world */\n#define ecb_likely(expr)   ecb_expect_true  (expr)\n#define ecb_unlikely(expr) ecb_expect_false (expr)\n\n/* count trailing zero bits and count # of one bits */\n#if ECB_GCC_VERSION(3,4) \\\n    || (ECB_CLANG_BUILTIN(__builtin_clz) && ECB_CLANG_BUILTIN(__builtin_clzll) \\\n        && ECB_CLANG_BUILTIN(__builtin_ctz) && ECB_CLANG_BUILTIN(__builtin_ctzll) \\\n        && ECB_CLANG_BUILTIN(__builtin_popcount))\n  /* we assume int == 32 bit, long == 32 or 64 bit and long long == 64 bit */\n  #define ecb_ld32(x)      (__builtin_clz      (x) ^ 31)\n  #define ecb_ld64(x)      (__builtin_clzll    (x) ^ 63)\n  #define ecb_ctz32(x)      __builtin_ctz      (x)\n  #define ecb_ctz64(x)      __builtin_ctzll    (x)\n  #define ecb_popcount32(x) __builtin_popcount (x)\n  /* no popcountll */\n#else\n  ecb_function_ ecb_const int ecb_ctz32 (uint32_t x);\n  ecb_function_ ecb_const int\n  ecb_ctz32 (uint32_t x)\n  {\n    int r = 0;\n\n    x &= ~x + 1; /* this isolates the lowest bit */\n\n#if ECB_branchless_on_i386\n    r += !!(x & 0xaaaaaaaa) << 0;\n    r += !!(x & 0xcccccccc) << 1;\n    r += !!(x & 0xf0f0f0f0) << 2;\n    r += !!(x & 0xff00ff00) << 3;\n    r += !!(x & 0xffff0000) << 4;\n#else\n    if (x & 0xaaaaaaaa) r +=  1;\n    if (x & 0xcccccccc) r +=  2;\n    if (x & 0xf0f0f0f0) r +=  4;\n    if (x & 0xff00ff00) r +=  8;\n    if (x & 0xffff0000) r += 16;\n#endif\n\n    return r;\n  }\n\n  ecb_function_ ecb_const int ecb_ctz64 (uint64_t x);\n  ecb_function_ ecb_const int\n  ecb_ctz64 (uint64_t x)\n  {\n    int shift = x & 0xffffffffU ? 0 : 32;\n    return ecb_ctz32 (x >> shift) + shift;\n  }\n\n  ecb_function_ ecb_const int ecb_popcount32 (uint32_t x);\n  ecb_function_ ecb_const int\n  ecb_popcount32 (uint32_t x)\n  {\n    x -=  (x >> 1) & 0x55555555;\n    x  = ((x >> 2) & 0x33333333) + (x & 0x33333333);\n    x  = ((x >> 4) + x) & 0x0f0f0f0f;\n    x *= 0x01010101;\n\n    return x >> 24;\n  }\n\n  ecb_function_ ecb_const int ecb_ld32 (uint32_t x);\n  ecb_function_ ecb_const int ecb_ld32 (uint32_t x)\n  {\n    int r = 0;\n\n    if (x >> 16) { x >>= 16; r += 16; }\n    if (x >>  8) { x >>=  8; r +=  8; }\n    if (x >>  4) { x >>=  4; r +=  4; }\n    if (x >>  2) { x >>=  2; r +=  2; }\n    if (x >>  1) {           r +=  1; }\n\n    return r;\n  }\n\n  ecb_function_ ecb_const int ecb_ld64 (uint64_t x);\n  ecb_function_ ecb_const int ecb_ld64 (uint64_t x)\n  {\n    int r = 0;\n\n    if (x >> 32) { x >>= 32; r += 32; }\n\n    return r + ecb_ld32 (x);\n  }\n#endif\n\necb_function_ ecb_const ecb_bool ecb_is_pot32 (uint32_t x);\necb_function_ ecb_const ecb_bool ecb_is_pot32 (uint32_t x) { return !(x & (x - 1)); }\necb_function_ ecb_const ecb_bool ecb_is_pot64 (uint64_t x);\necb_function_ ecb_const ecb_bool ecb_is_pot64 (uint64_t x) { return !(x & (x - 1)); }\n\necb_function_ ecb_const uint8_t  ecb_bitrev8  (uint8_t  x);\necb_function_ ecb_const uint8_t  ecb_bitrev8  (uint8_t  x)\n{\n  return (  (x * 0x0802U & 0x22110U)\n          | (x * 0x8020U & 0x88440U)) * 0x10101U >> 16;\n}\n\necb_function_ ecb_const uint16_t ecb_bitrev16 (uint16_t x);\necb_function_ ecb_const uint16_t ecb_bitrev16 (uint16_t x)\n{\n  x = ((x >>  1) &     0x5555) | ((x &     0x5555) <<  1);\n  x = ((x >>  2) &     0x3333) | ((x &     0x3333) <<  2);\n  x = ((x >>  4) &     0x0f0f) | ((x &     0x0f0f) <<  4);\n  x = ( x >>  8              ) | ( x               <<  8);\n\n  return x;\n}\n\necb_function_ ecb_const uint32_t ecb_bitrev32 (uint32_t x);\necb_function_ ecb_const uint32_t ecb_bitrev32 (uint32_t x)\n{\n  x = ((x >>  1) & 0x55555555) | ((x & 0x55555555) <<  1);\n  x = ((x >>  2) & 0x33333333) | ((x & 0x33333333) <<  2);\n  x = ((x >>  4) & 0x0f0f0f0f) | ((x & 0x0f0f0f0f) <<  4);\n  x = ((x >>  8) & 0x00ff00ff) | ((x & 0x00ff00ff) <<  8);\n  x = ( x >> 16              ) | ( x               << 16);\n\n  return x;\n}\n\n#if ECB_GCC_VERSION(4,3) || (ECB_CLANG_BUILTIN(__builtin_bswap32) && ECB_CLANG_BUILTIN(__builtin_bswap64))\n  #if ECB_GCC_VERSION(4,8) || ECB_CLANG_BUILTIN(__builtin_bswap16)\n  #define ecb_bswap16(x)  __builtin_bswap16 (x)\n  #else\n  #define ecb_bswap16(x) (__builtin_bswap32 (x) >> 16)\n  #endif\n  #define ecb_bswap32(x)  __builtin_bswap32 (x)\n  #define ecb_bswap64(x)  __builtin_bswap64 (x)\n#elif _MSC_VER\n  #include <stdlib.h>\n  #define ecb_bswap16(x) ((uint16_t)_byteswap_ushort ((uint16_t)(x)))\n  #define ecb_bswap32(x) ((uint32_t)_byteswap_ulong  ((uint32_t)(x)))\n  #define ecb_bswap64(x) ((uint64_t)_byteswap_uint64 ((uint64_t)(x)))\n#else\n  ecb_function_ ecb_const uint16_t ecb_bswap16 (uint16_t x);\n  ecb_function_ ecb_const uint16_t\n  ecb_bswap16 (uint16_t x)\n  {\n    return ecb_rotl16 (x, 8);\n  }\n\n  ecb_function_ ecb_const uint32_t ecb_bswap32 (uint32_t x);\n  ecb_function_ ecb_const uint32_t\n  ecb_bswap32 (uint32_t x)\n  {\n    return (((uint32_t)ecb_bswap16 (x)) << 16) | ecb_bswap16 (x >> 16);\n  }\n\n  ecb_function_ ecb_const uint64_t ecb_bswap64 (uint64_t x);\n  ecb_function_ ecb_const uint64_t\n  ecb_bswap64 (uint64_t x)\n  {\n    return (((uint64_t)ecb_bswap32 (x)) << 32) | ecb_bswap32 (x >> 32);\n  }\n#endif\n\n#if ECB_GCC_VERSION(4,5) || ECB_CLANG_BUILTIN(__builtin_unreachable)\n  #define ecb_unreachable() __builtin_unreachable ()\n#else\n  /* this seems to work fine, but gcc always emits a warning for it :/ */\n  ecb_inline ecb_noreturn void ecb_unreachable (void);\n  ecb_inline ecb_noreturn void ecb_unreachable (void) { }\n#endif\n\n/* try to tell the compiler that some condition is definitely true */\n#define ecb_assume(cond) if (!(cond)) ecb_unreachable (); else 0\n\necb_inline ecb_const unsigned char ecb_byteorder_helper (void);\necb_inline ecb_const unsigned char\necb_byteorder_helper (void)\n{\n  /* the union code still generates code under pressure in gcc, */\n  /* but less than using pointers, and always seems to */\n  /* successfully return a constant. */\n  /* the reason why we have this horrible preprocessor mess */\n  /* is to avoid it in all cases, at least on common architectures */\n  /* or when using a recent enough gcc version (>= 4.6) */\n#if ((__i386 || __i386__) && !__VOS__) || _M_IX86 || ECB_GCC_AMD64 || ECB_MSVC_AMD64\n  return 0x44;\n#elif __BYTE_ORDER__ && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n  return 0x44;\n#elif __BYTE_ORDER__ && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__\n  return 0x11;\n#else\n  union\n  {\n    uint32_t i;\n    uint8_t c;\n  } u = { 0x11223344 };\n  return u.c;\n#endif\n}\n\necb_inline ecb_const ecb_bool ecb_big_endian    (void);\necb_inline ecb_const ecb_bool ecb_big_endian    (void) { return ecb_byteorder_helper () == 0x11; }\necb_inline ecb_const ecb_bool ecb_little_endian (void);\necb_inline ecb_const ecb_bool ecb_little_endian (void) { return ecb_byteorder_helper () == 0x44; }\n\n#if ECB_GCC_VERSION(3,0) || ECB_C99\n  #define ecb_mod(m,n) ((m) % (n) + ((m) % (n) < 0 ? (n) : 0))\n#else\n  #define ecb_mod(m,n) ((m) < 0 ? ((n) - 1 - ((-1 - (m)) % (n))) : ((m) % (n)))\n#endif\n\n#if ECB_CPP\n  template<typename T>\n  static inline T ecb_div_rd (T val, T div)\n  {\n    return val < 0 ? - ((-val + div - 1) / div) : (val          ) / div;\n  }\n  template<typename T>\n  static inline T ecb_div_ru (T val, T div)\n  {\n    return val < 0 ? - ((-val          ) / div) : (val + div - 1) / div;\n  }\n#else\n  #define ecb_div_rd(val,div) ((val) < 0 ? - ((-(val) + (div) - 1) / (div)) : ((val)            ) / (div))\n  #define ecb_div_ru(val,div) ((val) < 0 ? - ((-(val)            ) / (div)) : ((val) + (div) - 1) / (div))\n#endif\n\n#if ecb_cplusplus_does_not_suck\n  /* does not work for local types (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm) */\n  template<typename T, int N>\n  static inline int ecb_array_length (const T (&arr)[N])\n  {\n    return N;\n  }\n#else\n  #define ecb_array_length(name) (sizeof (name) / sizeof (name [0]))\n#endif\n\n/*******************************************************************************/\n/* floating point stuff, can be disabled by defining ECB_NO_LIBM */\n\n/* basically, everything uses \"ieee pure-endian\" floating point numbers */\n/* the only noteworthy exception is ancient armle, which uses order 43218765 */\n#if 0 \\\n    || __i386 || __i386__ \\\n    || ECB_GCC_AMD64 \\\n    || __powerpc__ || __ppc__ || __powerpc64__ || __ppc64__ \\\n    || defined __s390__ || defined __s390x__ \\\n    || defined __mips__ \\\n    || defined __alpha__ \\\n    || defined __hppa__ \\\n    || defined __ia64__ \\\n    || defined __m68k__ \\\n    || defined __m88k__ \\\n    || defined __sh__ \\\n    || defined _M_IX86 || defined ECB_MSVC_AMD64 || defined _M_IA64 \\\n    || (defined __arm__ && (defined __ARM_EABI__ || defined __EABI__ || defined __VFP_FP__ || defined _WIN32_WCE || defined __ANDROID__)) \\\n    || defined __aarch64__\n  #define ECB_STDFP 1\n  #include <string.h> /* for memcpy */\n#else\n  #define ECB_STDFP 0\n#endif\n\n#ifndef ECB_NO_LIBM\n\n  #include <math.h> /* for frexp*, ldexp*, INFINITY, NAN */\n\n  /* only the oldest of old doesn't have this one. solaris. */\n  #ifdef INFINITY\n    #define ECB_INFINITY INFINITY\n  #else\n    #define ECB_INFINITY HUGE_VAL\n  #endif\n\n  #ifdef NAN\n    #define ECB_NAN NAN\n  #else\n    #define ECB_NAN ECB_INFINITY\n  #endif\n\n  #if ECB_C99 || _XOPEN_VERSION >= 600 || _POSIX_VERSION >= 200112L\n    #define ecb_ldexpf(x,e) ldexpf ((x), (e))\n    #define ecb_frexpf(x,e) frexpf ((x), (e))\n  #else\n    #define ecb_ldexpf(x,e) (float) ldexp ((double) (x), (e))\n    #define ecb_frexpf(x,e) (float) frexp ((double) (x), (e))\n  #endif\n\n  /* converts an ieee half/binary16 to a float */\n  ecb_function_ ecb_const float ecb_binary16_to_float (uint16_t x);\n  ecb_function_ ecb_const float\n  ecb_binary16_to_float (uint16_t x)\n  {\n    int e = (x >> 10) & 0x1f;\n    int m = x & 0x3ff;\n    float r;\n\n    if      (!e     ) r = ecb_ldexpf (m        ,    -24);\n    else if (e != 31) r = ecb_ldexpf (m + 0x400, e - 25);\n    else if (m      ) r = ECB_NAN;\n    else              r = ECB_INFINITY;\n\n    return x & 0x8000 ? -r : r;\n  }\n\n  /* convert a float to ieee single/binary32 */\n  ecb_function_ ecb_const uint32_t ecb_float_to_binary32 (float x);\n  ecb_function_ ecb_const uint32_t\n  ecb_float_to_binary32 (float x)\n  {\n    uint32_t r;\n\n    #if ECB_STDFP\n      memcpy (&r, &x, 4);\n    #else\n      /* slow emulation, works for anything but -0 */\n      uint32_t m;\n      int e;\n\n      if (x == 0e0f                    ) return 0x00000000U;\n      if (x > +3.40282346638528860e+38f) return 0x7f800000U;\n      if (x < -3.40282346638528860e+38f) return 0xff800000U;\n      if (x != x                       ) return 0x7fbfffffU;\n\n      m = ecb_frexpf (x, &e) * 0x1000000U;\n\n      r = m & 0x80000000U;\n\n      if (r)\n        m = -m;\n\n      if (e <= -126)\n        {\n          m &= 0xffffffU;\n          m >>= (-125 - e);\n          e = -126;\n        }\n\n      r |= (e + 126) << 23;\n      r |= m & 0x7fffffU;\n    #endif\n\n    return r;\n  }\n\n  /* converts an ieee single/binary32 to a float */\n  ecb_function_ ecb_const float ecb_binary32_to_float (uint32_t x);\n  ecb_function_ ecb_const float\n  ecb_binary32_to_float (uint32_t x)\n  {\n    float r;\n\n    #if ECB_STDFP\n      memcpy (&r, &x, 4);\n    #else\n      /* emulation, only works for normals and subnormals and +0 */\n      int neg = x >> 31;\n      int e = (x >> 23) & 0xffU;\n\n      x &= 0x7fffffU;\n\n      if (e)\n        x |= 0x800000U;\n      else\n        e = 1;\n\n      /* we distrust ldexpf a bit and do the 2**-24 scaling by an extra multiply */\n      r = ecb_ldexpf (x * (0.5f / 0x800000U), e - 126);\n\n      r = neg ? -r : r;\n    #endif\n\n    return r;\n  }\n\n  /* convert a double to ieee double/binary64 */\n  ecb_function_ ecb_const uint64_t ecb_double_to_binary64 (double x);\n  ecb_function_ ecb_const uint64_t\n  ecb_double_to_binary64 (double x)\n  {\n    uint64_t r;\n\n    #if ECB_STDFP\n      memcpy (&r, &x, 8);\n    #else\n      /* slow emulation, works for anything but -0 */\n      uint64_t m;\n      int e;\n\n      if (x == 0e0                     ) return 0x0000000000000000U;\n      if (x > +1.79769313486231470e+308) return 0x7ff0000000000000U;\n      if (x < -1.79769313486231470e+308) return 0xfff0000000000000U;\n      if (x != x                       ) return 0X7ff7ffffffffffffU;\n\n      m = frexp (x, &e) * 0x20000000000000U;\n\n      r = m & 0x8000000000000000;;\n\n      if (r)\n        m = -m;\n\n      if (e <= -1022)\n        {\n          m &= 0x1fffffffffffffU;\n          m >>= (-1021 - e);\n          e = -1022;\n        }\n\n      r |= ((uint64_t)(e + 1022)) << 52;\n      r |= m & 0xfffffffffffffU;\n    #endif\n\n    return r;\n  }\n\n  /* converts an ieee double/binary64 to a double */\n  ecb_function_ ecb_const double ecb_binary64_to_double (uint64_t x);\n  ecb_function_ ecb_const double\n  ecb_binary64_to_double (uint64_t x)\n  {\n    double r;\n\n    #if ECB_STDFP\n      memcpy (&r, &x, 8);\n    #else\n      /* emulation, only works for normals and subnormals and +0 */\n      int neg = x >> 63;\n      int e = (x >> 52) & 0x7ffU;\n\n      x &= 0xfffffffffffffU;\n\n      if (e)\n        x |= 0x10000000000000U;\n      else\n        e = 1;\n\n      /* we distrust ldexp a bit and do the 2**-53 scaling by an extra multiply */\n      r = ldexp (x * (0.5 / 0x10000000000000U), e - 1022);\n\n      r = neg ? -r : r;\n    #endif\n\n    return r;\n  }\n\n#endif\n\n#endif\n\n/* ECB.H END */\n\n#if ECB_MEMORY_FENCE_NEEDS_PTHREADS\n/* if your architecture doesn't need memory fences, e.g. because it is\n * single-cpu/core, or if you use libev in a project that doesn't use libev\n * from multiple threads, then you can define ECB_AVOID_PTHREADS when compiling\n * libev, in which cases the memory fences become nops.\n * alternatively, you can remove this #error and link against libpthread,\n * which will then provide the memory fences.\n */\n# error \"memory fences not defined for your architecture, please report\"\n#endif\n\n#ifndef ECB_MEMORY_FENCE\n# define ECB_MEMORY_FENCE do { } while (0)\n# define ECB_MEMORY_FENCE_ACQUIRE ECB_MEMORY_FENCE\n# define ECB_MEMORY_FENCE_RELEASE ECB_MEMORY_FENCE\n#endif\n\n#define expect_false(cond) ecb_expect_false (cond)\n#define expect_true(cond)  ecb_expect_true  (cond)\n#define noinline           ecb_noinline\n\n#define inline_size        ecb_inline\n\n#if EV_FEATURE_CODE\n# define inline_speed      ecb_inline\n#else\n# define inline_speed      static noinline\n#endif\n\n#define NUMPRI (EV_MAXPRI - EV_MINPRI + 1)\n\n#if EV_MINPRI == EV_MAXPRI\n# define ABSPRI(w) (((W)w), 0)\n#else\n# define ABSPRI(w) (((W)w)->priority - EV_MINPRI)\n#endif\n\n#define EMPTY       /* required for microsofts broken pseudo-c compiler */\n#define EMPTY2(a,b) /* used to suppress some warnings */\n\ntypedef ev_watcher *W;\ntypedef ev_watcher_list *WL;\ntypedef ev_watcher_time *WT;\n\n#define ev_active(w) ((W)(w))->active\n#define ev_at(w) ((WT)(w))->at\n\n#if EV_USE_REALTIME\n/* sig_atomic_t is used to avoid per-thread variables or locking but still */\n/* giving it a reasonably high chance of working on typical architectures */\nstatic EV_ATOMIC_T have_realtime; /* did clock_gettime (CLOCK_REALTIME) work? */\n#endif\n\n#if EV_USE_MONOTONIC\nstatic EV_ATOMIC_T have_monotonic; /* did clock_gettime (CLOCK_MONOTONIC) work? */\n#endif\n\n#ifndef EV_FD_TO_WIN32_HANDLE\n# define EV_FD_TO_WIN32_HANDLE(fd) _get_osfhandle (fd)\n#endif\n#ifndef EV_WIN32_HANDLE_TO_FD\n# define EV_WIN32_HANDLE_TO_FD(handle) _open_osfhandle (handle, 0)\n#endif\n#ifndef EV_WIN32_CLOSE_FD\n# define EV_WIN32_CLOSE_FD(fd) close (fd)\n#endif\n\n#ifdef _WIN32\n# include \"ev_win32.c\"\n#endif\n\n/*****************************************************************************/\n\n/* define a suitable floor function (only used by periodics atm) */\n\n#if EV_USE_FLOOR\n# include <math.h>\n# define ev_floor(v) floor (v)\n#else\n\n#include <float.h>\n\n/* a floor() replacement function, should be independent of ev_tstamp type */\nstatic ev_tstamp noinline\nev_floor (ev_tstamp v)\n{\n  /* the choice of shift factor is not terribly important */\n#if FLT_RADIX != 2 /* assume FLT_RADIX == 10 */\n  const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 10000000000000000000. : 1000000000.;\n#else\n  const ev_tstamp shift = sizeof (unsigned long) >= 8 ? 18446744073709551616. : 4294967296.;\n#endif\n\n  /* argument too large for an unsigned long? */\n  if (expect_false (v >= shift))\n    {\n      ev_tstamp f;\n\n      if (v == v - 1.)\n        return v; /* very large number */\n\n      f = shift * ev_floor (v * (1. / shift));\n      return f + ev_floor (v - f);\n    }\n\n  /* special treatment for negative args? */\n  if (expect_false (v < 0.))\n    {\n      ev_tstamp f = -ev_floor (-v);\n\n      return f - (f == v ? 0 : 1);\n    }\n\n  /* fits into an unsigned long */\n  return (unsigned long)v;\n}\n\n#endif\n\n/*****************************************************************************/\n\n#ifdef __linux\n# include <sys/utsname.h>\n#endif\n\nstatic unsigned int noinline ecb_cold\nev_linux_version (void)\n{\n#ifdef __linux\n  unsigned int v = 0;\n  struct utsname buf;\n  int i;\n  char *p = buf.release;\n\n  if (uname (&buf))\n    return 0;\n\n  for (i = 3+1; --i; )\n    {\n      unsigned int c = 0;\n\n      for (;;)\n        {\n          if (*p >= '0' && *p <= '9')\n            c = c * 10 + *p++ - '0';\n          else\n            {\n              p += *p == '.';\n              break;\n            }\n        }\n\n      v = (v << 8) | c;\n    }\n\n  return v;\n#else\n  return 0;\n#endif\n}\n\n/*****************************************************************************/\n\n#if EV_AVOID_STDIO\nstatic void noinline ecb_cold\nev_printerr (const char *msg)\n{\n  write (STDERR_FILENO, msg, strlen (msg));\n}\n#endif\n\nstatic void (*syserr_cb)(const char *msg) EV_THROW;\n\nvoid ecb_cold\nev_set_syserr_cb (void (*cb)(const char *msg) EV_THROW) EV_THROW\n{\n  syserr_cb = cb;\n}\n\nstatic void noinline ecb_cold\nev_syserr (const char *msg)\n{\n  if (!msg)\n    msg = \"(libev) system error\";\n\n  if (syserr_cb)\n    syserr_cb (msg);\n  else\n    {\n#if EV_AVOID_STDIO\n      ev_printerr (msg);\n      ev_printerr (\": \");\n      ev_printerr (strerror (errno));\n      ev_printerr (\"\\n\");\n#else\n      perror (msg);\n#endif\n      abort ();\n    }\n}\n\nstatic void *\nev_realloc_emul (void *ptr, long size) EV_THROW\n{\n  /* some systems, notably openbsd and darwin, fail to properly\n   * implement realloc (x, 0) (as required by both ansi c-89 and\n   * the single unix specification, so work around them here.\n   * recently, also (at least) fedora and debian started breaking it,\n   * despite documenting it otherwise.\n   */\n\n  if (size)\n    return realloc (ptr, size);\n\n  free (ptr);\n  return 0;\n}\n\nstatic void *(*alloc)(void *ptr, long size) EV_THROW = ev_realloc_emul;\n\nvoid ecb_cold\nev_set_allocator (void *(*cb)(void *ptr, long size) EV_THROW) EV_THROW\n{\n  alloc = cb;\n}\n\ninline_speed void *\nev_realloc (void *ptr, long size)\n{\n  ptr = alloc (ptr, size);\n\n  if (!ptr && size)\n    {\n#if EV_AVOID_STDIO\n      ev_printerr (\"(libev) memory allocation failed, aborting.\\n\");\n#else\n      fprintf (stderr, \"(libev) cannot allocate %ld bytes, aborting.\", size);\n#endif\n      abort ();\n    }\n\n  return ptr;\n}\n\n#define ev_malloc(size) ev_realloc (0, (size))\n#define ev_free(ptr)    ev_realloc ((ptr), 0)\n\n/*****************************************************************************/\n\n/* set in reify when reification needed */\n#define EV_ANFD_REIFY 1\n\n/* file descriptor info structure */\ntypedef struct\n{\n  WL head;\n  unsigned char events; /* the events watched for */\n  unsigned char reify;  /* flag set when this ANFD needs reification (EV_ANFD_REIFY, EV__IOFDSET) */\n  unsigned char emask;  /* the epoll backend stores the actual kernel mask in here */\n  unsigned char unused;\n#if EV_USE_EPOLL\n  unsigned int egen;    /* generation counter to counter epoll bugs */\n#endif\n#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP\n  SOCKET handle;\n#endif\n#if EV_USE_IOCP\n  OVERLAPPED or, ow;\n#endif\n} ANFD;\n\n/* stores the pending event set for a given watcher */\ntypedef struct\n{\n  W w;\n  int events; /* the pending event set for the given watcher */\n} ANPENDING;\n\n#if EV_USE_INOTIFY\n/* hash table entry per inotify-id */\ntypedef struct\n{\n  WL head;\n} ANFS;\n#endif\n\n/* Heap Entry */\n#if EV_HEAP_CACHE_AT\n  /* a heap element */\n  typedef struct {\n    ev_tstamp at;\n    WT w;\n  } ANHE;\n\n  #define ANHE_w(he)        (he).w     /* access watcher, read-write */\n  #define ANHE_at(he)       (he).at    /* access cached at, read-only */\n  #define ANHE_at_cache(he) (he).at = (he).w->at /* update at from watcher */\n#else\n  /* a heap element */\n  typedef WT ANHE;\n\n  #define ANHE_w(he)        (he)\n  #define ANHE_at(he)       (he)->at\n  #define ANHE_at_cache(he)\n#endif\n\n#if EV_MULTIPLICITY\n\n  struct ev_loop\n  {\n    ev_tstamp ev_rt_now;\n    #define ev_rt_now ((loop)->ev_rt_now)\n    #define VAR(name,decl) decl;\n      #include \"ev_vars.h\"\n    #undef VAR\n  };\n  #include \"ev_wrap.h\"\n\n  static struct ev_loop default_loop_struct;\n  EV_API_DECL struct ev_loop *ev_default_loop_ptr = 0; /* needs to be initialised to make it a definition despite extern */\n\n#else\n\n  EV_API_DECL ev_tstamp ev_rt_now = 0; /* needs to be initialised to make it a definition despite extern */\n  #define VAR(name,decl) static decl;\n    #include \"ev_vars.h\"\n  #undef VAR\n\n  static int ev_default_loop_ptr;\n\n#endif\n\n#if EV_FEATURE_API\n# define EV_RELEASE_CB if (expect_false (release_cb)) release_cb (EV_A)\n# define EV_ACQUIRE_CB if (expect_false (acquire_cb)) acquire_cb (EV_A)\n# define EV_INVOKE_PENDING invoke_cb (EV_A)\n#else\n# define EV_RELEASE_CB (void)0\n# define EV_ACQUIRE_CB (void)0\n# define EV_INVOKE_PENDING ev_invoke_pending (EV_A)\n#endif\n\n#define EVBREAK_RECURSE 0x80\n\n/*****************************************************************************/\n\n#ifndef EV_HAVE_EV_TIME\nev_tstamp\nev_time (void) EV_THROW\n{\n#if EV_USE_REALTIME\n  if (expect_true (have_realtime))\n    {\n      struct timespec ts;\n      t2s_clock_gettime (CLOCK_REALTIME, &ts);\n      return ts.tv_sec + ts.tv_nsec * 1e-9;\n    }\n#endif\n\n  struct timeval tv;\n  gettimeofday (&tv, 0);\n  return tv.tv_sec + tv.tv_usec * 1e-6;\n}\n#endif\n\ninline_size ev_tstamp\nget_clock (void)\n{\n#if EV_USE_MONOTONIC\n  if (expect_true (have_monotonic))\n    {\n      struct timespec ts;\n      t2s_clock_gettime (CLOCK_MONOTONIC, &ts);\n      return ts.tv_sec + ts.tv_nsec * 1e-9;\n    }\n#endif\n\n  return ev_time ();\n}\n\n#if EV_MULTIPLICITY\nev_tstamp\nev_now (EV_P) EV_THROW\n{\n  return ev_rt_now;\n}\n#endif\n\nvoid\nev_sleep (ev_tstamp delay) EV_THROW\n{\n  if (delay > 0.)\n    {\n#if EV_USE_NANOSLEEP\n      struct timespec ts;\n\n      EV_TS_SET (ts, delay);\n      nanosleep (&ts, 0);\n#elif defined _WIN32\n      Sleep ((unsigned long)(delay * 1e3));\n#else\n      struct timeval tv;\n\n      /* here we rely on sys/time.h + sys/types.h + unistd.h providing select */\n      /* something not guaranteed by newer posix versions, but guaranteed */\n      /* by older ones */\n      EV_TV_SET (tv, delay);\n      select (0, 0, 0, 0, &tv);\n#endif\n    }\n}\n\n/*****************************************************************************/\n\n#define MALLOC_ROUND 4096 /* prefer to allocate in chunks of this size, must be 2**n and >> 4 longs */\n\n/* find a suitable new size for the given array, */\n/* hopefully by rounding to a nice-to-malloc size */\ninline_size int\narray_nextsize (int elem, int cur, int cnt)\n{\n  int ncur = cur + 1;\n\n  do\n    ncur <<= 1;\n  while (cnt > ncur);\n\n  /* if size is large, round to MALLOC_ROUND - 4 * longs to accommodate malloc overhead */\n  if (elem * ncur > MALLOC_ROUND - sizeof (void *) * 4)\n    {\n      ncur *= elem;\n      ncur = (ncur + elem + (MALLOC_ROUND - 1) + sizeof (void *) * 4) & ~(MALLOC_ROUND - 1);\n      ncur = ncur - sizeof (void *) * 4;\n      ncur /= elem;\n    }\n\n  return ncur;\n}\n\nstatic void * noinline ecb_cold\narray_realloc (int elem, void *base, int *cur, int cnt)\n{\n  *cur = array_nextsize (elem, *cur, cnt);\n  return ev_realloc (base, elem * *cur);\n}\n\n#define array_init_zero(base,count)\t\\\n  memset ((void *)(base), 0, sizeof (*(base)) * (count))\n\n#define array_needsize(type,base,cur,cnt,init)\t\t\t\\\n  if (expect_false ((cnt) > (cur)))\t\t\t\t\\\n    {\t\t\t\t\t\t\t\t\\\n      int ecb_unused ocur_ = (cur);\t\t\t\t\t\\\n      (base) = (type *)array_realloc\t\t\t\t\\\n         (sizeof (type), (base), &(cur), (cnt));\t\t\\\n      init ((base) + (ocur_), (cur) - ocur_);\t\t\t\\\n    }\n\n#if 0\n#define array_slim(type,stem)\t\t\t\t\t\\\n  if (stem ## max < array_roundsize (stem ## cnt >> 2))\t\t\\\n    {\t\t\t\t\t\t\t\t\\\n      stem ## max = array_roundsize (stem ## cnt >> 1);\t\t\\\n      base = (type *)ev_realloc (base, sizeof (type) * (stem ## max));\\\n      fprintf (stderr, \"slimmed down \" # stem \" to %d\\n\", stem ## max);/*D*/\\\n    }\n#endif\n\n#define array_free(stem, idx) \\\n  ev_free (stem ## s idx); stem ## cnt idx = stem ## max idx = 0; stem ## s idx = 0\n\n/*****************************************************************************/\n\n/* dummy callback for pending events */\nstatic void noinline\npendingcb (EV_P_ ev_prepare *w, int revents)\n{\n}\n\nvoid noinline\nev_feed_event (EV_P_ void *w, int revents) EV_THROW\n{\n  W w_ = (W)w;\n  int pri = ABSPRI (w_);\n\n  if (expect_false (w_->pending))\n    pendings [pri][w_->pending - 1].events |= revents;\n  else\n    {\n      w_->pending = ++pendingcnt [pri];\n      array_needsize (ANPENDING, pendings [pri], pendingmax [pri], w_->pending, EMPTY2);\n      pendings [pri][w_->pending - 1].w      = w_;\n      pendings [pri][w_->pending - 1].events = revents;\n    }\n\n  pendingpri = NUMPRI - 1;\n}\n\ninline_speed void\nfeed_reverse (EV_P_ W w)\n{\n  array_needsize (W, rfeeds, rfeedmax, rfeedcnt + 1, EMPTY2);\n  rfeeds [rfeedcnt++] = w;\n}\n\ninline_size void\nfeed_reverse_done (EV_P_ int revents)\n{\n  do\n    ev_feed_event (EV_A_ rfeeds [--rfeedcnt], revents);\n  while (rfeedcnt);\n}\n\ninline_speed void\nqueue_events (EV_P_ W *events, int eventcnt, int type)\n{\n  int i;\n\n  for (i = 0; i < eventcnt; ++i)\n    ev_feed_event (EV_A_ events [i], type);\n}\n\n/*****************************************************************************/\n\ninline_speed void\nfd_event_nocheck (EV_P_ int fd, int revents)\n{\n  ANFD *anfd = anfds + fd;\n  ev_io *w;\n\n  for (w = (ev_io *)anfd->head; w; w = (ev_io *)((WL)w)->next)\n    {\n      int ev = w->events & revents;\n\n      if (ev)\n        ev_feed_event (EV_A_ (W)w, ev);\n    }\n}\n\n/* do not submit kernel events for fds that have reify set */\n/* because that means they changed while we were polling for new events */\ninline_speed void\nfd_event (EV_P_ int fd, int revents)\n{\n  ANFD *anfd = anfds + fd;\n\n  if (expect_true (!anfd->reify))\n    fd_event_nocheck (EV_A_ fd, revents);\n}\n\nvoid\nev_feed_fd_event (EV_P_ int fd, int revents) EV_THROW\n{\n  if (fd >= 0 && fd < anfdmax)\n    fd_event_nocheck (EV_A_ fd, revents);\n}\n\n/* make sure the external fd watch events are in-sync */\n/* with the kernel/libev internal state */\ninline_size void\nfd_reify (EV_P)\n{\n  int i;\n\n#if EV_SELECT_IS_WINSOCKET || EV_USE_IOCP\n  for (i = 0; i < fdchangecnt; ++i)\n    {\n      int fd = fdchanges [i];\n      ANFD *anfd = anfds + fd;\n\n      if (anfd->reify & EV__IOFDSET && anfd->head)\n        {\n          SOCKET handle = EV_FD_TO_WIN32_HANDLE (fd);\n\n          if (handle != anfd->handle)\n            {\n              unsigned long arg;\n\n              assert ((\"libev: only socket fds supported in this configuration\", ioctlsocket (handle, FIONREAD, &arg) == 0));\n\n              /* handle changed, but fd didn't - we need to do it in two steps */\n              backend_modify (EV_A_ fd, anfd->events, 0);\n              anfd->events = 0;\n              anfd->handle = handle;\n            }\n        }\n    }\n#endif\n\n  for (i = 0; i < fdchangecnt; ++i)\n    {\n      int fd = fdchanges [i];\n      ANFD *anfd = anfds + fd;\n      ev_io *w;\n\n      unsigned char o_events = anfd->events;\n      unsigned char o_reify  = anfd->reify;\n\n      anfd->reify  = 0;\n\n      /*if (expect_true (o_reify & EV_ANFD_REIFY)) probably a deoptimisation */\n        {\n          anfd->events = 0;\n\n          for (w = (ev_io *)anfd->head; w; w = (ev_io *)((WL)w)->next)\n            anfd->events |= (unsigned char)w->events;\n\n          if (o_events != anfd->events)\n            o_reify = EV__IOFDSET; /* actually |= */\n        }\n\n      if (o_reify & EV__IOFDSET)\n        backend_modify (EV_A_ fd, o_events, anfd->events);\n    }\n\n  fdchangecnt = 0;\n}\n\n/* something about the given fd changed */\ninline_size void\nfd_change (EV_P_ int fd, int flags)\n{\n  unsigned char reify = anfds [fd].reify;\n  anfds [fd].reify |= flags;\n\n  if (expect_true (!reify))\n    {\n      ++fdchangecnt;\n      array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2);\n      fdchanges [fdchangecnt - 1] = fd;\n    }\n}\n\n/* the given fd is invalid/unusable, so make sure it doesn't hurt us anymore */\ninline_speed void ecb_cold\nfd_kill (EV_P_ int fd)\n{\n  ev_io *w;\n\n  while ((w = (ev_io *)anfds [fd].head))\n    {\n      ev_io_stop (EV_A_ w);\n      ev_feed_event (EV_A_ (W)w, EV_ERROR | EV_READ | EV_WRITE);\n    }\n}\n\n/* check whether the given fd is actually valid, for error recovery */\ninline_size int ecb_cold\nfd_valid (int fd)\n{\n#ifdef _WIN32\n  return EV_FD_TO_WIN32_HANDLE (fd) != -1;\n#else\n  return fcntl (fd, F_GETFD) != -1;\n#endif\n}\n\n/* called on EBADF to verify fds */\nstatic void noinline ecb_cold\nfd_ebadf (EV_P)\n{\n  int fd;\n\n  for (fd = 0; fd < anfdmax; ++fd)\n    if (anfds [fd].events)\n      if (!fd_valid (fd) && errno == EBADF)\n        fd_kill (EV_A_ fd);\n}\n\n/* called on ENOMEM in select/poll to kill some fds and retry */\nstatic void noinline ecb_cold\nfd_enomem (EV_P)\n{\n  int fd;\n\n  for (fd = anfdmax; fd--; )\n    if (anfds [fd].events)\n      {\n        fd_kill (EV_A_ fd);\n        break;\n      }\n}\n\n/* usually called after fork if backend needs to re-arm all fds from scratch */\nstatic void noinline\nfd_rearm_all (EV_P)\n{\n  int fd;\n\n  for (fd = 0; fd < anfdmax; ++fd)\n    if (anfds [fd].events)\n      {\n        anfds [fd].events = 0;\n        anfds [fd].emask  = 0;\n        fd_change (EV_A_ fd, EV__IOFDSET | EV_ANFD_REIFY);\n      }\n}\n\n/* used to prepare libev internal fd's */\n/* this is not fork-safe */\ninline_speed void\nfd_intern (int fd)\n{\n#ifdef _WIN32\n  unsigned long arg = 1;\n  ioctlsocket (EV_FD_TO_WIN32_HANDLE (fd), FIONBIO, &arg);\n#else\n  fcntl (fd, F_SETFD, FD_CLOEXEC);\n  fcntl (fd, F_SETFL, O_NONBLOCK);\n#endif\n}\n\n/*****************************************************************************/\n\n/*\n * the heap functions want a real array index. array index 0 is guaranteed to not\n * be in-use at any time. the first heap entry is at array [HEAP0]. DHEAP gives\n * the branching factor of the d-tree.\n */\n\n/*\n * at the moment we allow libev the luxury of two heaps,\n * a small-code-size 2-heap one and a ~1.5kb larger 4-heap\n * which is more cache-efficient.\n * the difference is about 5% with 50000+ watchers.\n */\n#if EV_USE_4HEAP\n\n#define DHEAP 4\n#define HEAP0 (DHEAP - 1) /* index of first element in heap */\n#define HPARENT(k) ((((k) - HEAP0 - 1) / DHEAP) + HEAP0)\n#define UPHEAP_DONE(p,k) ((p) == (k))\n\n/* away from the root */\ninline_speed void\ndownheap (ANHE *heap, int N, int k)\n{\n  ANHE he = heap [k];\n  ANHE *E = heap + N + HEAP0;\n\n  for (;;)\n    {\n      ev_tstamp minat;\n      ANHE *minpos;\n      ANHE *pos = heap + DHEAP * (k - HEAP0) + HEAP0 + 1;\n\n      /* find minimum child */\n      if (expect_true (pos + DHEAP - 1 < E))\n        {\n          /* fast path */                               (minpos = pos + 0), (minat = ANHE_at (*minpos));\n          if (               ANHE_at (pos [1]) < minat) (minpos = pos + 1), (minat = ANHE_at (*minpos));\n          if (               ANHE_at (pos [2]) < minat) (minpos = pos + 2), (minat = ANHE_at (*minpos));\n          if (               ANHE_at (pos [3]) < minat) (minpos = pos + 3), (minat = ANHE_at (*minpos));\n        }\n      else if (pos < E)\n        {\n          /* slow path */                               (minpos = pos + 0), (minat = ANHE_at (*minpos));\n          if (pos + 1 < E && ANHE_at (pos [1]) < minat) (minpos = pos + 1), (minat = ANHE_at (*minpos));\n          if (pos + 2 < E && ANHE_at (pos [2]) < minat) (minpos = pos + 2), (minat = ANHE_at (*minpos));\n          if (pos + 3 < E && ANHE_at (pos [3]) < minat) (minpos = pos + 3), (minat = ANHE_at (*minpos));\n        }\n      else\n        break;\n\n      if (ANHE_at (he) <= minat)\n        break;\n\n      heap [k] = *minpos;\n      ev_active (ANHE_w (*minpos)) = k;\n\n      k = minpos - heap;\n    }\n\n  heap [k] = he;\n  ev_active (ANHE_w (he)) = k;\n}\n\n#else /* 4HEAP */\n\n#define HEAP0 1\n#define HPARENT(k) ((k) >> 1)\n#define UPHEAP_DONE(p,k) (!(p))\n\n/* away from the root */\ninline_speed void\ndownheap (ANHE *heap, int N, int k)\n{\n  ANHE he = heap [k];\n\n  for (;;)\n    {\n      int c = k << 1;\n\n      if (c >= N + HEAP0)\n        break;\n\n      c += c + 1 < N + HEAP0 && ANHE_at (heap [c]) > ANHE_at (heap [c + 1])\n           ? 1 : 0;\n\n      if (ANHE_at (he) <= ANHE_at (heap [c]))\n        break;\n\n      heap [k] = heap [c];\n      ev_active (ANHE_w (heap [k])) = k;\n      \n      k = c;\n    }\n\n  heap [k] = he;\n  ev_active (ANHE_w (he)) = k;\n}\n#endif\n\n/* towards the root */\ninline_speed void\nupheap (ANHE *heap, int k)\n{\n  ANHE he = heap [k];\n\n  for (;;)\n    {\n      int p = HPARENT (k);\n\n      if (UPHEAP_DONE (p, k) || ANHE_at (heap [p]) <= ANHE_at (he))\n        break;\n\n      heap [k] = heap [p];\n      ev_active (ANHE_w (heap [k])) = k;\n      k = p;\n    }\n\n  heap [k] = he;\n  ev_active (ANHE_w (he)) = k;\n}\n\n/* move an element suitably so it is in a correct place */\ninline_size void\nadjustheap (ANHE *heap, int N, int k)\n{\n  if (k > HEAP0 && ANHE_at (heap [k]) <= ANHE_at (heap [HPARENT (k)]))\n    upheap (heap, k);\n  else\n    downheap (heap, N, k);\n}\n\n/* rebuild the heap: this function is used only once and executed rarely */\ninline_size void\nreheap (ANHE *heap, int N)\n{\n  int i;\n\n  /* we don't use floyds algorithm, upheap is simpler and is more cache-efficient */\n  /* also, this is easy to implement and correct for both 2-heaps and 4-heaps */\n  for (i = 0; i < N; ++i)\n    upheap (heap, i + HEAP0);\n}\n\n/*****************************************************************************/\n\n/* associate signal watchers to a signal signal */\ntypedef struct\n{\n  EV_ATOMIC_T pending;\n#if EV_MULTIPLICITY\n  EV_P;\n#endif\n  WL head;\n} ANSIG;\n\nstatic ANSIG signals [EV_NSIG - 1];\n\n/*****************************************************************************/\n\n#if EV_SIGNAL_ENABLE || EV_ASYNC_ENABLE\n\nstatic void noinline ecb_cold\nevpipe_init (EV_P)\n{\n  if (!ev_is_active (&pipe_w))\n    {\n      int fds [2];\n\n# if EV_USE_EVENTFD\n      fds [0] = -1;\n      fds [1] = eventfd (0, EFD_NONBLOCK | EFD_CLOEXEC);\n      if (fds [1] < 0 && errno == EINVAL)\n        fds [1] = eventfd (0, 0);\n\n      if (fds [1] < 0)\n# endif\n        {\n          while (pipe (fds))\n            ev_syserr (\"(libev) error creating signal/async pipe\");\n\n          fd_intern (fds [0]);\n        }\n\n      evpipe [0] = fds [0];\n\n      if (evpipe [1] < 0)\n        evpipe [1] = fds [1]; /* first call, set write fd */\n      else\n        {\n          /* on subsequent calls, do not change evpipe [1] */\n          /* so that evpipe_write can always rely on its value. */\n          /* this branch does not do anything sensible on windows, */\n          /* so must not be executed on windows */\n\n          dup2 (fds [1], evpipe [1]);\n          close (fds [1]);\n        }\n\n      fd_intern (evpipe [1]);\n\n      ev_io_set (&pipe_w, evpipe [0] < 0 ? evpipe [1] : evpipe [0], EV_READ);\n      ev_io_start (EV_A_ &pipe_w);\n      ev_unref (EV_A); /* watcher should not keep loop alive */\n    }\n}\n\ninline_speed void\nevpipe_write (EV_P_ EV_ATOMIC_T *flag)\n{\n  ECB_MEMORY_FENCE; /* push out the write before this function was called, acquire flag */\n\n  if (expect_true (*flag))\n    return;\n\n  *flag = 1;\n  ECB_MEMORY_FENCE_RELEASE; /* make sure flag is visible before the wakeup */\n\n  pipe_write_skipped = 1;\n\n  ECB_MEMORY_FENCE; /* make sure pipe_write_skipped is visible before we check pipe_write_wanted */\n\n  if (pipe_write_wanted)\n    {\n      int old_errno;\n\n      pipe_write_skipped = 0;\n      ECB_MEMORY_FENCE_RELEASE;\n\n      old_errno = errno; /* save errno because write will clobber it */\n\n#if EV_USE_EVENTFD\n      if (evpipe [0] < 0)\n        {\n          uint64_t counter = 1;\n          write (evpipe [1], &counter, sizeof (uint64_t));\n        }\n      else\n#endif\n        {\n#ifdef _WIN32\n          WSABUF buf;\n          DWORD sent;\n          buf.buf = &buf;\n          buf.len = 1;\n          WSASend (EV_FD_TO_WIN32_HANDLE (evpipe [1]), &buf, 1, &sent, 0, 0, 0);\n#else\n          write (evpipe [1], &(evpipe [1]), 1);\n#endif\n        }\n\n      errno = old_errno;\n    }\n}\n\n/* called whenever the libev signal pipe */\n/* got some events (signal, async) */\nstatic void\npipecb (EV_P_ ev_io *iow, int revents)\n{\n  int i;\n\n  if (revents & EV_READ)\n    {\n#if EV_USE_EVENTFD\n      if (evpipe [0] < 0)\n        {\n          uint64_t counter;\n          read (evpipe [1], &counter, sizeof (uint64_t));\n        }\n      else\n#endif\n        {\n          char dummy[4];\n#ifdef _WIN32\n          WSABUF buf;\n          DWORD recvd;\n          DWORD flags = 0;\n          buf.buf = dummy;\n          buf.len = sizeof (dummy);\n          WSARecv (EV_FD_TO_WIN32_HANDLE (evpipe [0]), &buf, 1, &recvd, &flags, 0, 0);\n#else\n          read (evpipe [0], &dummy, sizeof (dummy));\n#endif\n        }\n    }\n\n  pipe_write_skipped = 0;\n\n  ECB_MEMORY_FENCE; /* push out skipped, acquire flags */\n\n#if EV_SIGNAL_ENABLE\n  if (sig_pending)\n    {\n      sig_pending = 0;\n\n      ECB_MEMORY_FENCE;\n\n      for (i = EV_NSIG - 1; i--; )\n        if (expect_false (signals [i].pending))\n          ev_feed_signal_event (EV_A_ i + 1);\n    }\n#endif\n\n#if EV_ASYNC_ENABLE\n  if (async_pending)\n    {\n      async_pending = 0;\n\n      ECB_MEMORY_FENCE;\n\n      for (i = asynccnt; i--; )\n        if (asyncs [i]->sent)\n          {\n            asyncs [i]->sent = 0;\n            ECB_MEMORY_FENCE_RELEASE;\n            ev_feed_event (EV_A_ asyncs [i], EV_ASYNC);\n          }\n    }\n#endif\n}\n\n/*****************************************************************************/\n\nvoid\nev_feed_signal (int signum) EV_THROW\n{\n#if EV_MULTIPLICITY\n  EV_P;\n  ECB_MEMORY_FENCE_ACQUIRE;\n  EV_A = signals [signum - 1].loop;\n\n  if (!EV_A)\n    return;\n#endif\n\n  signals [signum - 1].pending = 1;\n  evpipe_write (EV_A_ &sig_pending);\n}\n\nstatic void\nev_sighandler (int signum)\n{\n#ifdef _WIN32\n  signal (signum, ev_sighandler);\n#endif\n\n  ev_feed_signal (signum);\n}\n\nvoid noinline\nev_feed_signal_event (EV_P_ int signum) EV_THROW\n{\n  WL w;\n\n  if (expect_false (signum <= 0 || signum >= EV_NSIG))\n    return;\n\n  --signum;\n\n#if EV_MULTIPLICITY\n  /* it is permissible to try to feed a signal to the wrong loop */\n  /* or, likely more useful, feeding a signal nobody is waiting for */\n\n  if (expect_false (signals [signum].loop != EV_A))\n    return;\n#endif\n\n  signals [signum].pending = 0;\n  ECB_MEMORY_FENCE_RELEASE;\n\n  for (w = signals [signum].head; w; w = w->next)\n    ev_feed_event (EV_A_ (W)w, EV_SIGNAL);\n}\n\n#if EV_USE_SIGNALFD\nstatic void\nsigfdcb (EV_P_ ev_io *iow, int revents)\n{\n  struct signalfd_siginfo si[2], *sip; /* these structs are big */\n\n  for (;;)\n    {\n      ssize_t res = read (sigfd, si, sizeof (si));\n\n      /* not ISO-C, as res might be -1, but works with SuS */\n      for (sip = si; (char *)sip < (char *)si + res; ++sip)\n        ev_feed_signal_event (EV_A_ sip->ssi_signo);\n\n      if (res < (ssize_t)sizeof (si))\n        break;\n    }\n}\n#endif\n\n#endif\n\n/*****************************************************************************/\n\n#if EV_CHILD_ENABLE\nstatic WL childs [EV_PID_HASHSIZE];\n\nstatic ev_signal childev;\n\n#ifndef WIFCONTINUED\n# define WIFCONTINUED(status) 0\n#endif\n\n/* handle a single child status event */\ninline_speed void\nchild_reap (EV_P_ int chain, int pid, int status)\n{\n  ev_child *w;\n  int traced = WIFSTOPPED (status) || WIFCONTINUED (status);\n\n  for (w = (ev_child *)childs [chain & ((EV_PID_HASHSIZE) - 1)]; w; w = (ev_child *)((WL)w)->next)\n    {\n      if ((w->pid == pid || !w->pid)\n          && (!traced || (w->flags & 1)))\n        {\n          ev_set_priority (w, EV_MAXPRI); /* need to do it *now*, this *must* be the same prio as the signal watcher itself */\n          w->rpid    = pid;\n          w->rstatus = status;\n          ev_feed_event (EV_A_ (W)w, EV_CHILD);\n        }\n    }\n}\n\n#ifndef WCONTINUED\n# define WCONTINUED 0\n#endif\n\n/* called on sigchld etc., calls waitpid */\nstatic void\nchildcb (EV_P_ ev_signal *sw, int revents)\n{\n  int pid, status;\n\n  /* some systems define WCONTINUED but then fail to support it (linux 2.4) */\n  if (0 >= (pid = waitpid (-1, &status, WNOHANG | WUNTRACED | WCONTINUED)))\n    if (!WCONTINUED\n        || errno != EINVAL\n        || 0 >= (pid = waitpid (-1, &status, WNOHANG | WUNTRACED)))\n      return;\n\n  /* make sure we are called again until all children have been reaped */\n  /* we need to do it this way so that the callback gets called before we continue */\n  ev_feed_event (EV_A_ (W)sw, EV_SIGNAL);\n\n  child_reap (EV_A_ pid, pid, status);\n  if ((EV_PID_HASHSIZE) > 1)\n    child_reap (EV_A_ 0, pid, status); /* this might trigger a watcher twice, but feed_event catches that */\n}\n\n#endif\n\n/*****************************************************************************/\n\n#if EV_USE_IOCP\n# include \"ev_iocp.c\"\n#endif\n#if EV_USE_PORT\n# include \"ev_port.c\"\n#endif\n#if EV_USE_KQUEUE\n# include \"ev_kqueue.c\"\n#endif\n#if EV_USE_EPOLL\n# include \"ev_epoll.c\"\n#endif\n#if EV_USE_POLL\n# include \"ev_poll.c\"\n#endif\n#if EV_USE_SELECT\n# include \"ev_select.c\"\n#endif\n\nint ecb_cold\nev_version_major (void) EV_THROW\n{\n  return EV_VERSION_MAJOR;\n}\n\nint ecb_cold\nev_version_minor (void) EV_THROW\n{\n  return EV_VERSION_MINOR;\n}\n\n/* return true if we are running with elevated privileges and should ignore env variables */\nint inline_size ecb_cold\nenable_secure (void)\n{\n#ifdef _WIN32\n  return 0;\n#else\n  return getuid () != geteuid ()\n      || getgid () != getegid ();\n#endif\n}\n\nunsigned int ecb_cold\nev_supported_backends (void) EV_THROW\n{\n  unsigned int flags = 0;\n\n  if (EV_USE_PORT  ) flags |= EVBACKEND_PORT;\n  if (EV_USE_KQUEUE) flags |= EVBACKEND_KQUEUE;\n  if (EV_USE_EPOLL ) flags |= EVBACKEND_EPOLL;\n  if (EV_USE_POLL  ) flags |= EVBACKEND_POLL;\n  if (EV_USE_SELECT) flags |= EVBACKEND_SELECT;\n  \n  return flags;\n}\n\nunsigned int ecb_cold\nev_recommended_backends (void) EV_THROW\n{\n  unsigned int flags = ev_supported_backends ();\n\n#if !defined(__NetBSD__) && !defined(__FreeBSD__)\n  /* kqueue is borked on everything but netbsd apparently */\n  /* it usually doesn't work correctly on anything but sockets and pipes */\n  flags &= ~EVBACKEND_KQUEUE;\n#endif\n#ifdef __APPLE__\n  /* only select works correctly on that \"unix-certified\" platform */\n  flags &= ~EVBACKEND_KQUEUE; /* horribly broken, even for sockets */\n  flags &= ~EVBACKEND_POLL;   /* poll is based on kqueue from 10.5 onwards */\n#endif\n#ifdef __FreeBSD__\n  flags &= ~EVBACKEND_POLL;   /* poll return value is unusable (http://forums.freebsd.org/archive/index.php/t-10270.html) */\n#endif\n\n  return flags;\n}\n\nunsigned int ecb_cold\nev_embeddable_backends (void) EV_THROW\n{\n  int flags = EVBACKEND_EPOLL | EVBACKEND_KQUEUE | EVBACKEND_PORT;\n\n  /* epoll embeddability broken on all linux versions up to at least 2.6.23 */\n  if (ev_linux_version () < 0x020620) /* disable it on linux < 2.6.32 */\n    flags &= ~EVBACKEND_EPOLL;\n\n  return flags;\n}\n\nunsigned int\nev_backend (EV_P) EV_THROW\n{\n  return backend;\n}\n\n#if EV_FEATURE_API\nunsigned int\nev_iteration (EV_P) EV_THROW\n{\n  return loop_count;\n}\n\nunsigned int\nev_depth (EV_P) EV_THROW\n{\n  return loop_depth;\n}\n\nvoid\nev_set_io_collect_interval (EV_P_ ev_tstamp interval) EV_THROW\n{\n  io_blocktime = interval;\n}\n\nvoid\nev_set_timeout_collect_interval (EV_P_ ev_tstamp interval) EV_THROW\n{\n  timeout_blocktime = interval;\n}\n\nvoid\nev_set_userdata (EV_P_ void *data) EV_THROW\n{\n  userdata = data;\n}\n\nvoid *\nev_userdata (EV_P) EV_THROW\n{\n  return userdata;\n}\n\nvoid\nev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW\n{\n  invoke_cb = invoke_pending_cb;\n}\n\nvoid\nev_set_loop_release_cb (EV_P_ void (*release)(EV_P) EV_THROW, void (*acquire)(EV_P) EV_THROW) EV_THROW\n{\n  release_cb = release;\n  acquire_cb = acquire;\n}\n#endif\n\n/* initialise a loop structure, must be zero-initialised */\nstatic void noinline ecb_cold\nloop_init (EV_P_ unsigned int flags) EV_THROW\n{\n  if (!backend)\n    {\n      origflags = flags;\n\n#if EV_USE_REALTIME\n      if (!have_realtime)\n        {\n          struct timespec ts;\n\n          if (!t2s_clock_gettime (CLOCK_REALTIME, &ts))\n            have_realtime = 1;\n        }\n#endif\n\n#if EV_USE_MONOTONIC\n      if (!have_monotonic)\n        {\n          struct timespec ts;\n\n          if (!t2s_clock_gettime (CLOCK_MONOTONIC, &ts))\n            have_monotonic = 1;\n        }\n#endif\n\n      /* pid check not overridable via env */\n#ifndef _WIN32\n      if (flags & EVFLAG_FORKCHECK)\n        curpid = getpid ();\n#endif\n\n      if (!(flags & EVFLAG_NOENV)\n          && !enable_secure ()\n          && getenv (\"LIBEV_FLAGS\"))\n        flags = atoi (getenv (\"LIBEV_FLAGS\"));\n\n      ev_rt_now          = ev_time ();\n      mn_now             = get_clock ();\n      now_floor          = mn_now;\n      rtmn_diff          = ev_rt_now - mn_now;\n#if EV_FEATURE_API\n      invoke_cb          = ev_invoke_pending;\n#endif\n\n      io_blocktime       = 0.;\n      timeout_blocktime  = 0.;\n      backend            = 0;\n      backend_fd         = -1;\n      sig_pending        = 0;\n#if EV_ASYNC_ENABLE\n      async_pending      = 0;\n#endif\n      pipe_write_skipped = 0;\n      pipe_write_wanted  = 0;\n      evpipe [0]         = -1;\n      evpipe [1]         = -1;\n#if EV_USE_INOTIFY\n      fs_fd              = flags & EVFLAG_NOINOTIFY ? -1 : -2;\n#endif\n#if EV_USE_SIGNALFD\n      sigfd              = flags & EVFLAG_SIGNALFD  ? -2 : -1;\n#endif\n\n      if (!(flags & EVBACKEND_MASK))\n        flags |= ev_recommended_backends ();\n\n#if EV_USE_IOCP\n      if (!backend && (flags & EVBACKEND_IOCP  )) backend = iocp_init   (EV_A_ flags);\n#endif\n#if EV_USE_PORT\n      if (!backend && (flags & EVBACKEND_PORT  )) backend = port_init   (EV_A_ flags);\n#endif\n#if EV_USE_KQUEUE\n      if (!backend && (flags & EVBACKEND_KQUEUE)) backend = kqueue_init (EV_A_ flags);\n#endif\n#if EV_USE_EPOLL\n      if (!backend && (flags & EVBACKEND_EPOLL )) backend = epoll_init  (EV_A_ flags);\n#endif\n#if EV_USE_POLL\n      if (!backend && (flags & EVBACKEND_POLL  )) backend = poll_init   (EV_A_ flags);\n#endif\n#if EV_USE_SELECT\n      if (!backend && (flags & EVBACKEND_SELECT)) backend = select_init (EV_A_ flags);\n#endif\n\n      ev_prepare_init (&pending_w, pendingcb);\n\n#if EV_SIGNAL_ENABLE || EV_ASYNC_ENABLE\n      ev_init (&pipe_w, pipecb);\n      ev_set_priority (&pipe_w, EV_MAXPRI);\n#endif\n    }\n}\n\n/* free up a loop structure */\nvoid ecb_cold\nev_loop_destroy (EV_P)\n{\n  int i;\n\n#if EV_MULTIPLICITY\n  /* mimic free (0) */\n  if (!EV_A)\n    return;\n#endif\n\n#if EV_CLEANUP_ENABLE\n  /* queue cleanup watchers (and execute them) */\n  if (expect_false (cleanupcnt))\n    {\n      queue_events (EV_A_ (W *)cleanups, cleanupcnt, EV_CLEANUP);\n      EV_INVOKE_PENDING;\n    }\n#endif\n\n#if EV_CHILD_ENABLE\n  if (ev_is_default_loop (EV_A) && ev_is_active (&childev))\n    {\n      ev_ref (EV_A); /* child watcher */\n      ev_signal_stop (EV_A_ &childev);\n    }\n#endif\n\n  if (ev_is_active (&pipe_w))\n    {\n      /*ev_ref (EV_A);*/\n      /*ev_io_stop (EV_A_ &pipe_w);*/\n\n      if (evpipe [0] >= 0) EV_WIN32_CLOSE_FD (evpipe [0]);\n      if (evpipe [1] >= 0) EV_WIN32_CLOSE_FD (evpipe [1]);\n    }\n\n#if EV_USE_SIGNALFD\n  if (ev_is_active (&sigfd_w))\n    close (sigfd);\n#endif\n\n#if EV_USE_INOTIFY\n  if (fs_fd >= 0)\n    close (fs_fd);\n#endif\n\n  if (backend_fd >= 0)\n    close (backend_fd);\n\n#if EV_USE_IOCP\n  if (backend == EVBACKEND_IOCP  ) iocp_destroy   (EV_A);\n#endif\n#if EV_USE_PORT\n  if (backend == EVBACKEND_PORT  ) port_destroy   (EV_A);\n#endif\n#if EV_USE_KQUEUE\n  if (backend == EVBACKEND_KQUEUE) kqueue_destroy (EV_A);\n#endif\n#if EV_USE_EPOLL\n  if (backend == EVBACKEND_EPOLL ) epoll_destroy  (EV_A);\n#endif\n#if EV_USE_POLL\n  if (backend == EVBACKEND_POLL  ) poll_destroy   (EV_A);\n#endif\n#if EV_USE_SELECT\n  if (backend == EVBACKEND_SELECT) select_destroy (EV_A);\n#endif\n\n  for (i = NUMPRI; i--; )\n    {\n      array_free (pending, [i]);\n#if EV_IDLE_ENABLE\n      array_free (idle, [i]);\n#endif\n    }\n\n  ev_free (anfds); anfds = 0; anfdmax = 0;\n\n  /* have to use the microsoft-never-gets-it-right macro */\n  array_free (rfeed, EMPTY);\n  array_free (fdchange, EMPTY);\n  array_free (timer, EMPTY);\n#if EV_PERIODIC_ENABLE\n  array_free (periodic, EMPTY);\n#endif\n#if EV_FORK_ENABLE\n  array_free (fork, EMPTY);\n#endif\n#if EV_CLEANUP_ENABLE\n  array_free (cleanup, EMPTY);\n#endif\n  array_free (prepare, EMPTY);\n  array_free (check, EMPTY);\n#if EV_ASYNC_ENABLE\n  array_free (async, EMPTY);\n#endif\n\n  backend = 0;\n\n#if EV_MULTIPLICITY\n  if (ev_is_default_loop (EV_A))\n#endif\n    ev_default_loop_ptr = 0;\n#if EV_MULTIPLICITY\n  else\n    ev_free (EV_A);\n#endif\n}\n\n#if EV_USE_INOTIFY\ninline_size void infy_fork (EV_P);\n#endif\n\ninline_size void\nloop_fork (EV_P)\n{\n#if EV_USE_PORT\n  if (backend == EVBACKEND_PORT  ) port_fork   (EV_A);\n#endif\n#if EV_USE_KQUEUE\n  if (backend == EVBACKEND_KQUEUE) kqueue_fork (EV_A);\n#endif\n#if EV_USE_EPOLL\n  if (backend == EVBACKEND_EPOLL ) epoll_fork  (EV_A);\n#endif\n#if EV_USE_INOTIFY\n  infy_fork (EV_A);\n#endif\n\n#if EV_SIGNAL_ENABLE || EV_ASYNC_ENABLE\n  if (ev_is_active (&pipe_w))\n    {\n      /* pipe_write_wanted must be false now, so modifying fd vars should be safe */\n\n      ev_ref (EV_A);\n      ev_io_stop (EV_A_ &pipe_w);\n\n      if (evpipe [0] >= 0)\n        EV_WIN32_CLOSE_FD (evpipe [0]);\n\n      evpipe_init (EV_A);\n      /* iterate over everything, in case we missed something before */\n      ev_feed_event (EV_A_ &pipe_w, EV_CUSTOM);\n    }\n#endif\n\n  postfork = 0;\n}\n\n#if EV_MULTIPLICITY\n\nstruct ev_loop * ecb_cold\nev_loop_new (unsigned int flags) EV_THROW\n{\n  EV_P = (struct ev_loop *)ev_malloc (sizeof (struct ev_loop));\n\n  memset (EV_A, 0, sizeof (struct ev_loop));\n  loop_init (EV_A_ flags);\n\n  if (ev_backend (EV_A))\n    return EV_A;\n\n  ev_free (EV_A);\n  return 0;\n}\n\n#endif /* multiplicity */\n\n#if EV_VERIFY\nstatic void noinline ecb_cold\nverify_watcher (EV_P_ W w)\n{\n  assert ((\"libev: watcher has invalid priority\", ABSPRI (w) >= 0 && ABSPRI (w) < NUMPRI));\n\n  if (w->pending)\n    assert ((\"libev: pending watcher not on pending queue\", pendings [ABSPRI (w)][w->pending - 1].w == w));\n}\n\nstatic void noinline ecb_cold\nverify_heap (EV_P_ ANHE *heap, int N)\n{\n  int i;\n\n  for (i = HEAP0; i < N + HEAP0; ++i)\n    {\n      assert ((\"libev: active index mismatch in heap\", ev_active (ANHE_w (heap [i])) == i));\n      assert ((\"libev: heap condition violated\", i == HEAP0 || ANHE_at (heap [HPARENT (i)]) <= ANHE_at (heap [i])));\n      assert ((\"libev: heap at cache mismatch\", ANHE_at (heap [i]) == ev_at (ANHE_w (heap [i]))));\n\n      verify_watcher (EV_A_ (W)ANHE_w (heap [i]));\n    }\n}\n\nstatic void noinline ecb_cold\narray_verify (EV_P_ W *ws, int cnt)\n{\n  while (cnt--)\n    {\n      assert ((\"libev: active index mismatch\", ev_active (ws [cnt]) == cnt + 1));\n      verify_watcher (EV_A_ ws [cnt]);\n    }\n}\n#endif\n\n#if EV_FEATURE_API\nvoid ecb_cold\nev_verify (EV_P) EV_THROW\n{\n#if EV_VERIFY\n  int i;\n  WL w, w2;\n\n  assert (activecnt >= -1);\n\n  assert (fdchangemax >= fdchangecnt);\n  for (i = 0; i < fdchangecnt; ++i)\n    assert ((\"libev: negative fd in fdchanges\", fdchanges [i] >= 0));\n\n  assert (anfdmax >= 0);\n  for (i = 0; i < anfdmax; ++i)\n    {\n      int j = 0;\n\n      for (w = w2 = anfds [i].head; w; w = w->next)\n        {\n          verify_watcher (EV_A_ (W)w);\n\n          if (j++ & 1)\n            {\n              assert ((\"libev: io watcher list contains a loop\", w != w2));\n              w2 = w2->next;\n            }\n\n          assert ((\"libev: inactive fd watcher on anfd list\", ev_active (w) == 1));\n          assert ((\"libev: fd mismatch between watcher and anfd\", ((ev_io *)w)->fd == i));\n        }\n    }\n\n  assert (timermax >= timercnt);\n  verify_heap (EV_A_ timers, timercnt);\n\n#if EV_PERIODIC_ENABLE\n  assert (periodicmax >= periodiccnt);\n  verify_heap (EV_A_ periodics, periodiccnt);\n#endif\n\n  for (i = NUMPRI; i--; )\n    {\n      assert (pendingmax [i] >= pendingcnt [i]);\n#if EV_IDLE_ENABLE\n      assert (idleall >= 0);\n      assert (idlemax [i] >= idlecnt [i]);\n      array_verify (EV_A_ (W *)idles [i], idlecnt [i]);\n#endif\n    }\n\n#if EV_FORK_ENABLE\n  assert (forkmax >= forkcnt);\n  array_verify (EV_A_ (W *)forks, forkcnt);\n#endif\n\n#if EV_CLEANUP_ENABLE\n  assert (cleanupmax >= cleanupcnt);\n  array_verify (EV_A_ (W *)cleanups, cleanupcnt);\n#endif\n\n#if EV_ASYNC_ENABLE\n  assert (asyncmax >= asynccnt);\n  array_verify (EV_A_ (W *)asyncs, asynccnt);\n#endif\n\n#if EV_PREPARE_ENABLE\n  assert (preparemax >= preparecnt);\n  array_verify (EV_A_ (W *)prepares, preparecnt);\n#endif\n\n#if EV_CHECK_ENABLE\n  assert (checkmax >= checkcnt);\n  array_verify (EV_A_ (W *)checks, checkcnt);\n#endif\n\n# if 0\n#if EV_CHILD_ENABLE\n  for (w = (ev_child *)childs [chain & ((EV_PID_HASHSIZE) - 1)]; w; w = (ev_child *)((WL)w)->next)\n  for (signum = EV_NSIG; signum--; ) if (signals [signum].pending)\n#endif\n# endif\n#endif\n}\n#endif\n\n#if EV_MULTIPLICITY\nstruct ev_loop * ecb_cold\n#else\nint\n#endif\nev_default_loop (unsigned int flags) EV_THROW\n{\n  if (!ev_default_loop_ptr)\n    {\n#if EV_MULTIPLICITY\n      EV_P = ev_default_loop_ptr = &default_loop_struct;\n#else\n      ev_default_loop_ptr = 1;\n#endif\n\n      loop_init (EV_A_ flags);\n\n      if (ev_backend (EV_A))\n        {\n#if EV_CHILD_ENABLE\n          ev_signal_init (&childev, childcb, SIGCHLD);\n          ev_set_priority (&childev, EV_MAXPRI);\n          ev_signal_start (EV_A_ &childev);\n          ev_unref (EV_A); /* child watcher should not keep loop alive */\n#endif\n        }\n      else\n        ev_default_loop_ptr = 0;\n    }\n\n  return ev_default_loop_ptr;\n}\n\nvoid\nev_loop_fork (EV_P) EV_THROW\n{\n  postfork = 1;\n}\n\n/*****************************************************************************/\n\nvoid\nev_invoke (EV_P_ void *w, int revents)\n{\n  EV_CB_INVOKE ((W)w, revents);\n}\n\nunsigned int\nev_pending_count (EV_P) EV_THROW\n{\n  int pri;\n  unsigned int count = 0;\n\n  for (pri = NUMPRI; pri--; )\n    count += pendingcnt [pri];\n\n  return count;\n}\n\nvoid noinline\nev_invoke_pending (EV_P)\n{\n  pendingpri = NUMPRI;\n\n  while (pendingpri) /* pendingpri possibly gets modified in the inner loop */\n    {\n      --pendingpri;\n\n      while (pendingcnt [pendingpri])\n        {\n          ANPENDING *p = pendings [pendingpri] + --pendingcnt [pendingpri];\n\n          p->w->pending = 0;\n          EV_CB_INVOKE (p->w, p->events);\n          EV_FREQUENT_CHECK;\n        }\n    }\n}\n\n#if EV_IDLE_ENABLE\n/* make idle watchers pending. this handles the \"call-idle */\n/* only when higher priorities are idle\" logic */\ninline_size void\nidle_reify (EV_P)\n{\n  if (expect_false (idleall))\n    {\n      int pri;\n\n      for (pri = NUMPRI; pri--; )\n        {\n          if (pendingcnt [pri])\n            break;\n\n          if (idlecnt [pri])\n            {\n              queue_events (EV_A_ (W *)idles [pri], idlecnt [pri], EV_IDLE);\n              break;\n            }\n        }\n    }\n}\n#endif\n\n/* make timers pending */\ninline_size void\ntimers_reify (EV_P)\n{\n  EV_FREQUENT_CHECK;\n\n  if (timercnt && ANHE_at (timers [HEAP0]) < mn_now)\n    {\n      do\n        {\n          ev_timer *w = (ev_timer *)ANHE_w (timers [HEAP0]);\n\n          /*assert ((\"libev: inactive timer on timer heap detected\", ev_is_active (w)));*/\n\n          /* first reschedule or stop timer */\n          if (w->repeat)\n            {\n              ev_at (w) += w->repeat;\n              if (ev_at (w) < mn_now)\n                ev_at (w) = mn_now;\n\n              assert ((\"libev: negative ev_timer repeat value found while processing timers\", w->repeat > 0.));\n\n              ANHE_at_cache (timers [HEAP0]);\n              downheap (timers, timercnt, HEAP0);\n            }\n          else\n            ev_timer_stop (EV_A_ w); /* nonrepeating: stop timer */\n\n          EV_FREQUENT_CHECK;\n          feed_reverse (EV_A_ (W)w);\n        }\n      while (timercnt && ANHE_at (timers [HEAP0]) < mn_now);\n\n      feed_reverse_done (EV_A_ EV_TIMER);\n    }\n}\n\n#if EV_PERIODIC_ENABLE\n\nstatic void noinline\nperiodic_recalc (EV_P_ ev_periodic *w)\n{\n  ev_tstamp interval = w->interval > MIN_INTERVAL ? w->interval : MIN_INTERVAL;\n  ev_tstamp at = w->offset + interval * ev_floor ((ev_rt_now - w->offset) / interval);\n\n  /* the above almost always errs on the low side */\n  while (at <= ev_rt_now)\n    {\n      ev_tstamp nat = at + w->interval;\n\n      /* when resolution fails us, we use ev_rt_now */\n      if (expect_false (nat == at))\n        {\n          at = ev_rt_now;\n          break;\n        }\n\n      at = nat;\n    }\n\n  ev_at (w) = at;\n}\n\n/* make periodics pending */\ninline_size void\nperiodics_reify (EV_P)\n{\n  EV_FREQUENT_CHECK;\n\n  while (periodiccnt && ANHE_at (periodics [HEAP0]) < ev_rt_now)\n    {\n      do\n        {\n          ev_periodic *w = (ev_periodic *)ANHE_w (periodics [HEAP0]);\n\n          /*assert ((\"libev: inactive timer on periodic heap detected\", ev_is_active (w)));*/\n\n          /* first reschedule or stop timer */\n          if (w->reschedule_cb)\n            {\n              ev_at (w) = w->reschedule_cb (w, ev_rt_now);\n\n              assert ((\"libev: ev_periodic reschedule callback returned time in the past\", ev_at (w) >= ev_rt_now));\n\n              ANHE_at_cache (periodics [HEAP0]);\n              downheap (periodics, periodiccnt, HEAP0);\n            }\n          else if (w->interval)\n            {\n              periodic_recalc (EV_A_ w);\n              ANHE_at_cache (periodics [HEAP0]);\n              downheap (periodics, periodiccnt, HEAP0);\n            }\n          else\n            ev_periodic_stop (EV_A_ w); /* nonrepeating: stop timer */\n\n          EV_FREQUENT_CHECK;\n          feed_reverse (EV_A_ (W)w);\n        }\n      while (periodiccnt && ANHE_at (periodics [HEAP0]) < ev_rt_now);\n\n      feed_reverse_done (EV_A_ EV_PERIODIC);\n    }\n}\n\n/* simply recalculate all periodics */\n/* TODO: maybe ensure that at least one event happens when jumping forward? */\nstatic void noinline ecb_cold\nperiodics_reschedule (EV_P)\n{\n  int i;\n\n  /* adjust periodics after time jump */\n  for (i = HEAP0; i < periodiccnt + HEAP0; ++i)\n    {\n      ev_periodic *w = (ev_periodic *)ANHE_w (periodics [i]);\n\n      if (w->reschedule_cb)\n        ev_at (w) = w->reschedule_cb (w, ev_rt_now);\n      else if (w->interval)\n        periodic_recalc (EV_A_ w);\n\n      ANHE_at_cache (periodics [i]);\n    }\n\n  reheap (periodics, periodiccnt);\n}\n#endif\n\n/* adjust all timers by a given offset */\nstatic void noinline ecb_cold\ntimers_reschedule (EV_P_ ev_tstamp adjust)\n{\n  int i;\n\n  for (i = 0; i < timercnt; ++i)\n    {\n      ANHE *he = timers + i + HEAP0;\n      ANHE_w (*he)->at += adjust;\n      ANHE_at_cache (*he);\n    }\n}\n\n/* fetch new monotonic and realtime times from the kernel */\n/* also detect if there was a timejump, and act accordingly */\ninline_speed void\ntime_update (EV_P_ ev_tstamp max_block)\n{\n#if EV_USE_MONOTONIC\n  if (expect_true (have_monotonic))\n    {\n      int i;\n      ev_tstamp odiff = rtmn_diff;\n\n      mn_now = get_clock ();\n\n      /* only fetch the realtime clock every 0.5*MIN_TIMEJUMP seconds */\n      /* interpolate in the meantime */\n      if (expect_true (mn_now - now_floor < MIN_TIMEJUMP * .5))\n        {\n          ev_rt_now = rtmn_diff + mn_now;\n          return;\n        }\n\n      now_floor = mn_now;\n      ev_rt_now = ev_time ();\n\n      /* loop a few times, before making important decisions.\n       * on the choice of \"4\": one iteration isn't enough,\n       * in case we get preempted during the calls to\n       * ev_time and get_clock. a second call is almost guaranteed\n       * to succeed in that case, though. and looping a few more times\n       * doesn't hurt either as we only do this on time-jumps or\n       * in the unlikely event of having been preempted here.\n       */\n      for (i = 4; --i; )\n        {\n          ev_tstamp diff;\n          rtmn_diff = ev_rt_now - mn_now;\n\n          diff = odiff - rtmn_diff;\n\n          if (expect_true ((diff < 0. ? -diff : diff) < MIN_TIMEJUMP))\n            return; /* all is well */\n\n          ev_rt_now = ev_time ();\n          mn_now    = get_clock ();\n          now_floor = mn_now;\n        }\n\n      /* no timer adjustment, as the monotonic clock doesn't jump */\n      /* timers_reschedule (EV_A_ rtmn_diff - odiff) */\n# if EV_PERIODIC_ENABLE\n      periodics_reschedule (EV_A);\n# endif\n    }\n  else\n#endif\n    {\n      ev_rt_now = ev_time ();\n\n      if (expect_false (mn_now > ev_rt_now || ev_rt_now > mn_now + max_block + MIN_TIMEJUMP))\n        {\n          /* adjust timers. this is easy, as the offset is the same for all of them */\n          timers_reschedule (EV_A_ ev_rt_now - mn_now);\n#if EV_PERIODIC_ENABLE\n          periodics_reschedule (EV_A);\n#endif\n        }\n\n      mn_now = ev_rt_now;\n    }\n}\n\nint\nev_run (EV_P_ int flags)\n{\n#if EV_FEATURE_API\n  ++loop_depth;\n#endif\n\n  assert ((\"libev: ev_loop recursion during release detected\", loop_done != EVBREAK_RECURSE));\n\n  loop_done = EVBREAK_CANCEL;\n\n  EV_INVOKE_PENDING; /* in case we recurse, ensure ordering stays nice and clean */\n\n  do\n    {\n#if EV_VERIFY >= 2\n      ev_verify (EV_A);\n#endif\n\n#ifndef _WIN32\n      if (expect_false (curpid)) /* penalise the forking check even more */\n        if (expect_false (getpid () != curpid))\n          {\n            curpid = getpid ();\n            postfork = 1;\n          }\n#endif\n\n#if EV_FORK_ENABLE\n      /* we might have forked, so queue fork handlers */\n      if (expect_false (postfork))\n        if (forkcnt)\n          {\n            queue_events (EV_A_ (W *)forks, forkcnt, EV_FORK);\n            EV_INVOKE_PENDING;\n          }\n#endif\n\n#if EV_PREPARE_ENABLE\n      /* queue prepare watchers (and execute them) */\n      if (expect_false (preparecnt))\n        {\n          queue_events (EV_A_ (W *)prepares, preparecnt, EV_PREPARE);\n          EV_INVOKE_PENDING;\n        }\n#endif\n\n      if (expect_false (loop_done))\n        break;\n\n      /* we might have forked, so reify kernel state if necessary */\n      if (expect_false (postfork))\n        loop_fork (EV_A);\n\n      /* update fd-related kernel structures */\n      fd_reify (EV_A);\n\n      /* calculate blocking time */\n      {\n        ev_tstamp waittime  = 0.;\n        ev_tstamp sleeptime = 0.;\n\n        /* remember old timestamp for io_blocktime calculation */\n        ev_tstamp prev_mn_now = mn_now;\n\n        /* update time to cancel out callback processing overhead */\n        time_update (EV_A_ 1e100);\n\n        /* from now on, we want a pipe-wake-up */\n        pipe_write_wanted = 1;\n\n        ECB_MEMORY_FENCE; /* make sure pipe_write_wanted is visible before we check for potential skips */\n\n        if (expect_true (!(flags & EVRUN_NOWAIT || idleall || !activecnt || pipe_write_skipped)))\n          {\n            waittime = MAX_BLOCKTIME;\n\n            if (timercnt)\n              {\n                ev_tstamp to = ANHE_at (timers [HEAP0]) - mn_now;\n                if (waittime > to) waittime = to;\n              }\n\n#if EV_PERIODIC_ENABLE\n            if (periodiccnt)\n              {\n                ev_tstamp to = ANHE_at (periodics [HEAP0]) - ev_rt_now;\n                if (waittime > to) waittime = to;\n              }\n#endif\n\n            /* don't let timeouts decrease the waittime below timeout_blocktime */\n            if (expect_false (waittime < timeout_blocktime))\n              waittime = timeout_blocktime;\n\n            /* at this point, we NEED to wait, so we have to ensure */\n            /* to pass a minimum nonzero value to the backend */\n            if (expect_false (waittime < backend_mintime))\n              waittime = backend_mintime;\n\n            /* extra check because io_blocktime is commonly 0 */\n            if (expect_false (io_blocktime))\n              {\n                sleeptime = io_blocktime - (mn_now - prev_mn_now);\n\n                if (sleeptime > waittime - backend_mintime)\n                  sleeptime = waittime - backend_mintime;\n\n                if (expect_true (sleeptime > 0.))\n                  {\n                    ev_sleep (sleeptime);\n                    waittime -= sleeptime;\n                  }\n              }\n          }\n\n#if EV_FEATURE_API\n        ++loop_count;\n#endif\n        assert ((loop_done = EVBREAK_RECURSE, 1)); /* assert for side effect */\n        backend_poll (EV_A_ waittime);\n        assert ((loop_done = EVBREAK_CANCEL, 1)); /* assert for side effect */\n\n        pipe_write_wanted = 0; /* just an optimisation, no fence needed */\n\n        ECB_MEMORY_FENCE_ACQUIRE;\n        if (pipe_write_skipped)\n          {\n            assert ((\"libev: pipe_w not active, but pipe not written\", ev_is_active (&pipe_w)));\n            ev_feed_event (EV_A_ &pipe_w, EV_CUSTOM);\n          }\n\n\n        /* update ev_rt_now, do magic */\n        time_update (EV_A_ waittime + sleeptime);\n      }\n\n      /* queue pending timers and reschedule them */\n      timers_reify (EV_A); /* relative timers called last */\n#if EV_PERIODIC_ENABLE\n      periodics_reify (EV_A); /* absolute timers called first */\n#endif\n\n#if EV_IDLE_ENABLE\n      /* queue idle watchers unless other events are pending */\n      idle_reify (EV_A);\n#endif\n\n#if EV_CHECK_ENABLE\n      /* queue check watchers, to be executed first */\n      if (expect_false (checkcnt))\n        queue_events (EV_A_ (W *)checks, checkcnt, EV_CHECK);\n#endif\n\n      EV_INVOKE_PENDING;\n    }\n  while (expect_true (\n    activecnt\n    && !loop_done\n    && !(flags & (EVRUN_ONCE | EVRUN_NOWAIT))\n  ));\n\n  if (loop_done == EVBREAK_ONE)\n    loop_done = EVBREAK_CANCEL;\n\n#if EV_FEATURE_API\n  --loop_depth;\n#endif\n\n  return activecnt;\n}\n\nvoid\nev_break (EV_P_ int how) EV_THROW\n{\n  loop_done = how;\n}\n\nvoid\nev_ref (EV_P) EV_THROW\n{\n  ++activecnt;\n}\n\nvoid\nev_unref (EV_P) EV_THROW\n{\n  --activecnt;\n}\n\nvoid\nev_now_update (EV_P) EV_THROW\n{\n  time_update (EV_A_ 1e100);\n}\n\nvoid\nev_suspend (EV_P) EV_THROW\n{\n  ev_now_update (EV_A);\n}\n\nvoid\nev_resume (EV_P) EV_THROW\n{\n  ev_tstamp mn_prev = mn_now;\n\n  ev_now_update (EV_A);\n  timers_reschedule (EV_A_ mn_now - mn_prev);\n#if EV_PERIODIC_ENABLE\n  /* TODO: really do this? */\n  periodics_reschedule (EV_A);\n#endif\n}\n\n/*****************************************************************************/\n/* singly-linked list management, used when the expected list length is short */\n\ninline_size void\nwlist_add (WL *head, WL elem)\n{\n  elem->next = *head;\n  *head = elem;\n}\n\ninline_size void\nwlist_del (WL *head, WL elem)\n{\n  while (*head)\n    {\n      if (expect_true (*head == elem))\n        {\n          *head = elem->next;\n          break;\n        }\n\n      head = &(*head)->next;\n    }\n}\n\n/* internal, faster, version of ev_clear_pending */\ninline_speed void\nclear_pending (EV_P_ W w)\n{\n  if (w->pending)\n    {\n      pendings [ABSPRI (w)][w->pending - 1].w = (W)&pending_w;\n      w->pending = 0;\n    }\n}\n\nint\nev_clear_pending (EV_P_ void *w) EV_THROW\n{\n  W w_ = (W)w;\n  int pending = w_->pending;\n\n  if (expect_true (pending))\n    {\n      ANPENDING *p = pendings [ABSPRI (w_)] + pending - 1;\n      p->w = (W)&pending_w;\n      w_->pending = 0;\n      return p->events;\n    }\n  else\n    return 0;\n}\n\ninline_size void\npri_adjust (EV_P_ W w)\n{\n  int pri = ev_priority (w);\n  pri = pri < EV_MINPRI ? EV_MINPRI : pri;\n  pri = pri > EV_MAXPRI ? EV_MAXPRI : pri;\n  ev_set_priority (w, pri);\n}\n\ninline_speed void\nev_start (EV_P_ W w, int active)\n{\n  pri_adjust (EV_A_ w);\n  w->active = active;\n  ev_ref (EV_A);\n}\n\ninline_size void\nev_stop (EV_P_ W w)\n{\n  ev_unref (EV_A);\n  w->active = 0;\n}\n\n/*****************************************************************************/\n\nvoid noinline\nev_io_start (EV_P_ ev_io *w) EV_THROW\n{\n  int fd = w->fd;\n\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  assert ((\"libev: ev_io_start called with negative fd\", fd >= 0));\n  assert ((\"libev: ev_io_start called with illegal event mask\", !(w->events & ~(EV__IOFDSET | EV_READ | EV_WRITE))));\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, 1);\n  array_needsize (ANFD, anfds, anfdmax, fd + 1, array_init_zero);\n  wlist_add (&anfds[fd].head, (WL)w);\n\n  /* common bug, apparently */\n  assert ((\"libev: ev_io_start called with corrupted watcher\", ((WL)w)->next != (WL)w));\n\n  fd_change (EV_A_ fd, w->events & EV__IOFDSET | EV_ANFD_REIFY);\n  w->events &= ~EV__IOFDSET;\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid noinline\nev_io_stop (EV_P_ ev_io *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  assert ((\"libev: ev_io_stop called with illegal fd (must stay constant after start!)\", w->fd >= 0 && w->fd < anfdmax));\n\n  EV_FREQUENT_CHECK;\n\n  wlist_del (&anfds[w->fd].head, (WL)w);\n  ev_stop (EV_A_ (W)w);\n\n  fd_change (EV_A_ w->fd, EV_ANFD_REIFY);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid noinline\nev_timer_start (EV_P_ ev_timer *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  ev_at (w) += mn_now;\n\n  assert ((\"libev: ev_timer_start called with negative timer repeat value\", w->repeat >= 0.));\n\n  EV_FREQUENT_CHECK;\n\n  ++timercnt;\n  ev_start (EV_A_ (W)w, timercnt + HEAP0 - 1);\n  array_needsize (ANHE, timers, timermax, ev_active (w) + 1, EMPTY2);\n  ANHE_w (timers [ev_active (w)]) = (WT)w;\n  ANHE_at_cache (timers [ev_active (w)]);\n  upheap (timers, ev_active (w));\n\n  EV_FREQUENT_CHECK;\n\n  /*assert ((\"libev: internal timer heap corruption\", timers [ev_active (w)] == (WT)w));*/\n}\n\nvoid noinline\nev_timer_stop (EV_P_ ev_timer *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    assert ((\"libev: internal timer heap corruption\", ANHE_w (timers [active]) == (WT)w));\n\n    --timercnt;\n\n    if (expect_true (active < timercnt + HEAP0))\n      {\n        timers [active] = timers [timercnt + HEAP0];\n        adjustheap (timers, timercnt, active);\n      }\n  }\n\n  ev_at (w) -= mn_now;\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid noinline\nev_timer_again (EV_P_ ev_timer *w) EV_THROW\n{\n  EV_FREQUENT_CHECK;\n\n  clear_pending (EV_A_ (W)w);\n\n  if (ev_is_active (w))\n    {\n      if (w->repeat)\n        {\n          ev_at (w) = mn_now + w->repeat;\n          ANHE_at_cache (timers [ev_active (w)]);\n          adjustheap (timers, timercnt, ev_active (w));\n        }\n      else\n        ev_timer_stop (EV_A_ w);\n    }\n  else if (w->repeat)\n    {\n      ev_at (w) = w->repeat;\n      ev_timer_start (EV_A_ w);\n    }\n\n  EV_FREQUENT_CHECK;\n}\n\nev_tstamp\nev_timer_remaining (EV_P_ ev_timer *w) EV_THROW\n{\n  return ev_at (w) - (ev_is_active (w) ? mn_now : 0.);\n}\n\n#if EV_PERIODIC_ENABLE\nvoid noinline\nev_periodic_start (EV_P_ ev_periodic *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  if (w->reschedule_cb)\n    ev_at (w) = w->reschedule_cb (w, ev_rt_now);\n  else if (w->interval)\n    {\n      assert ((\"libev: ev_periodic_start called with negative interval value\", w->interval >= 0.));\n      periodic_recalc (EV_A_ w);\n    }\n  else\n    ev_at (w) = w->offset;\n\n  EV_FREQUENT_CHECK;\n\n  ++periodiccnt;\n  ev_start (EV_A_ (W)w, periodiccnt + HEAP0 - 1);\n  array_needsize (ANHE, periodics, periodicmax, ev_active (w) + 1, EMPTY2);\n  ANHE_w (periodics [ev_active (w)]) = (WT)w;\n  ANHE_at_cache (periodics [ev_active (w)]);\n  upheap (periodics, ev_active (w));\n\n  EV_FREQUENT_CHECK;\n\n  /*assert ((\"libev: internal periodic heap corruption\", ANHE_w (periodics [ev_active (w)]) == (WT)w));*/\n}\n\nvoid noinline\nev_periodic_stop (EV_P_ ev_periodic *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    assert ((\"libev: internal periodic heap corruption\", ANHE_w (periodics [active]) == (WT)w));\n\n    --periodiccnt;\n\n    if (expect_true (active < periodiccnt + HEAP0))\n      {\n        periodics [active] = periodics [periodiccnt + HEAP0];\n        adjustheap (periodics, periodiccnt, active);\n      }\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid noinline\nev_periodic_again (EV_P_ ev_periodic *w) EV_THROW\n{\n  /* TODO: use adjustheap and recalculation */\n  ev_periodic_stop (EV_A_ w);\n  ev_periodic_start (EV_A_ w);\n}\n#endif\n\n#ifndef SA_RESTART\n# define SA_RESTART 0\n#endif\n\n#if EV_SIGNAL_ENABLE\n\nvoid noinline\nev_signal_start (EV_P_ ev_signal *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  assert ((\"libev: ev_signal_start called with illegal signal number\", w->signum > 0 && w->signum < EV_NSIG));\n\n#if EV_MULTIPLICITY\n  assert ((\"libev: a signal must not be attached to two different loops\",\n           !signals [w->signum - 1].loop || signals [w->signum - 1].loop == loop));\n\n  signals [w->signum - 1].loop = EV_A;\n  ECB_MEMORY_FENCE_RELEASE;\n#endif\n\n  EV_FREQUENT_CHECK;\n\n#if EV_USE_SIGNALFD\n  if (sigfd == -2)\n    {\n      sigfd = signalfd (-1, &sigfd_set, SFD_NONBLOCK | SFD_CLOEXEC);\n      if (sigfd < 0 && errno == EINVAL)\n        sigfd = signalfd (-1, &sigfd_set, 0); /* retry without flags */\n\n      if (sigfd >= 0)\n        {\n          fd_intern (sigfd); /* doing it twice will not hurt */\n\n          sigemptyset (&sigfd_set);\n\n          ev_io_init (&sigfd_w, sigfdcb, sigfd, EV_READ);\n          ev_set_priority (&sigfd_w, EV_MAXPRI);\n          ev_io_start (EV_A_ &sigfd_w);\n          ev_unref (EV_A); /* signalfd watcher should not keep loop alive */\n        }\n    }\n\n  if (sigfd >= 0)\n    {\n      /* TODO: check .head */\n      sigaddset (&sigfd_set, w->signum);\n      sigprocmask (SIG_BLOCK, &sigfd_set, 0);\n\n      signalfd (sigfd, &sigfd_set, 0);\n    }\n#endif\n\n  ev_start (EV_A_ (W)w, 1);\n  wlist_add (&signals [w->signum - 1].head, (WL)w);\n\n  if (!((WL)w)->next)\n# if EV_USE_SIGNALFD\n    if (sigfd < 0) /*TODO*/\n# endif\n      {\n# ifdef _WIN32\n        evpipe_init (EV_A);\n\n        signal (w->signum, ev_sighandler);\n# else\n        struct sigaction sa;\n\n        evpipe_init (EV_A);\n\n        sa.sa_handler = ev_sighandler;\n        sigfillset (&sa.sa_mask);\n        sa.sa_flags = SA_RESTART; /* if restarting works we save one iteration */\n        sigaction (w->signum, &sa, 0);\n\n        if (origflags & EVFLAG_NOSIGMASK)\n          {\n            sigemptyset (&sa.sa_mask);\n            sigaddset (&sa.sa_mask, w->signum);\n            sigprocmask (SIG_UNBLOCK, &sa.sa_mask, 0);\n          }\n#endif\n      }\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid noinline\nev_signal_stop (EV_P_ ev_signal *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  wlist_del (&signals [w->signum - 1].head, (WL)w);\n  ev_stop (EV_A_ (W)w);\n\n  if (!signals [w->signum - 1].head)\n    {\n#if EV_MULTIPLICITY\n      signals [w->signum - 1].loop = 0; /* unattach from signal */\n#endif\n#if EV_USE_SIGNALFD\n      if (sigfd >= 0)\n        {\n          sigset_t ss;\n\n          sigemptyset (&ss);\n          sigaddset (&ss, w->signum);\n          sigdelset (&sigfd_set, w->signum);\n\n          signalfd (sigfd, &sigfd_set, 0);\n          sigprocmask (SIG_UNBLOCK, &ss, 0);\n        }\n      else\n#endif\n        signal (w->signum, SIG_DFL);\n    }\n\n  EV_FREQUENT_CHECK;\n}\n\n#endif\n\n#if EV_CHILD_ENABLE\n\nvoid\nev_child_start (EV_P_ ev_child *w) EV_THROW\n{\n#if EV_MULTIPLICITY\n  assert ((\"libev: child watchers are only supported in the default loop\", loop == ev_default_loop_ptr));\n#endif\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, 1);\n  wlist_add (&childs [w->pid & ((EV_PID_HASHSIZE) - 1)], (WL)w);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_child_stop (EV_P_ ev_child *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  wlist_del (&childs [w->pid & ((EV_PID_HASHSIZE) - 1)], (WL)w);\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n\n#endif\n\n#if EV_STAT_ENABLE\n\n# ifdef _WIN32\n#  undef lstat\n#  define lstat(a,b) _stati64 (a,b)\n# endif\n\n#define DEF_STAT_INTERVAL  5.0074891\n#define NFS_STAT_INTERVAL 30.1074891 /* for filesystems potentially failing inotify */\n#define MIN_STAT_INTERVAL  0.1074891\n\nstatic void noinline stat_timer_cb (EV_P_ ev_timer *w_, int revents);\n\n#if EV_USE_INOTIFY\n\n/* the * 2 is to allow for alignment padding, which for some reason is >> 8 */\n# define EV_INOTIFY_BUFSIZE (sizeof (struct inotify_event) * 2 + NAME_MAX)\n\nstatic void noinline\ninfy_add (EV_P_ ev_stat *w)\n{\n  w->wd = inotify_add_watch (fs_fd, w->path,\n                             IN_ATTRIB | IN_DELETE_SELF | IN_MOVE_SELF | IN_MODIFY\n                             | IN_CREATE | IN_DELETE | IN_MOVED_FROM | IN_MOVED_TO\n                             | IN_DONT_FOLLOW | IN_MASK_ADD);\n\n  if (w->wd >= 0)\n    {\n      struct statfs sfs;\n\n      /* now local changes will be tracked by inotify, but remote changes won't */\n      /* unless the filesystem is known to be local, we therefore still poll */\n      /* also do poll on <2.6.25, but with normal frequency */\n\n      if (!fs_2625)\n        w->timer.repeat = w->interval ? w->interval : DEF_STAT_INTERVAL;\n      else if (!statfs (w->path, &sfs)\n               && (sfs.f_type == 0x1373 /* devfs */\n                   || sfs.f_type == 0x4006 /* fat */\n                   || sfs.f_type == 0x4d44 /* msdos */\n                   || sfs.f_type == 0xEF53 /* ext2/3 */\n                   || sfs.f_type == 0x72b6 /* jffs2 */\n                   || sfs.f_type == 0x858458f6 /* ramfs */\n                   || sfs.f_type == 0x5346544e /* ntfs */\n                   || sfs.f_type == 0x3153464a /* jfs */\n                   || sfs.f_type == 0x9123683e /* btrfs */\n                   || sfs.f_type == 0x52654973 /* reiser3 */\n                   || sfs.f_type == 0x01021994 /* tmpfs */\n                   || sfs.f_type == 0x58465342 /* xfs */))\n        w->timer.repeat = 0.; /* filesystem is local, kernel new enough */\n      else\n        w->timer.repeat = w->interval ? w->interval : NFS_STAT_INTERVAL; /* remote, use reduced frequency */\n    }\n  else\n    {\n      /* can't use inotify, continue to stat */\n      w->timer.repeat = w->interval ? w->interval : DEF_STAT_INTERVAL;\n\n      /* if path is not there, monitor some parent directory for speedup hints */\n      /* note that exceeding the hardcoded path limit is not a correctness issue, */\n      /* but an efficiency issue only */\n      if ((errno == ENOENT || errno == EACCES) && strlen (w->path) < 4096)\n        {\n          char path [4096];\n          strcpy (path, w->path);\n\n          do\n            {\n              int mask = IN_MASK_ADD | IN_DELETE_SELF | IN_MOVE_SELF\n                       | (errno == EACCES ? IN_ATTRIB : IN_CREATE | IN_MOVED_TO);\n\n              char *pend = strrchr (path, '/');\n\n              if (!pend || pend == path)\n                break;\n\n              *pend = 0;\n              w->wd = inotify_add_watch (fs_fd, path, mask);\n            }\n          while (w->wd < 0 && (errno == ENOENT || errno == EACCES));\n        }\n    }\n\n  if (w->wd >= 0)\n    wlist_add (&fs_hash [w->wd & ((EV_INOTIFY_HASHSIZE) - 1)].head, (WL)w);\n\n  /* now re-arm timer, if required */\n  if (ev_is_active (&w->timer)) ev_ref (EV_A);\n  ev_timer_again (EV_A_ &w->timer);\n  if (ev_is_active (&w->timer)) ev_unref (EV_A);\n}\n\nstatic void noinline\ninfy_del (EV_P_ ev_stat *w)\n{\n  int slot;\n  int wd = w->wd;\n\n  if (wd < 0)\n    return;\n\n  w->wd = -2;\n  slot = wd & ((EV_INOTIFY_HASHSIZE) - 1);\n  wlist_del (&fs_hash [slot].head, (WL)w);\n\n  /* remove this watcher, if others are watching it, they will rearm */\n  inotify_rm_watch (fs_fd, wd);\n}\n\nstatic void noinline\ninfy_wd (EV_P_ int slot, int wd, struct inotify_event *ev)\n{\n  if (slot < 0)\n    /* overflow, need to check for all hash slots */\n    for (slot = 0; slot < (EV_INOTIFY_HASHSIZE); ++slot)\n      infy_wd (EV_A_ slot, wd, ev);\n  else\n    {\n      WL w_;\n\n      for (w_ = fs_hash [slot & ((EV_INOTIFY_HASHSIZE) - 1)].head; w_; )\n        {\n          ev_stat *w = (ev_stat *)w_;\n          w_ = w_->next; /* lets us remove this watcher and all before it */\n\n          if (w->wd == wd || wd == -1)\n            {\n              if (ev->mask & (IN_IGNORED | IN_UNMOUNT | IN_DELETE_SELF))\n                {\n                  wlist_del (&fs_hash [slot & ((EV_INOTIFY_HASHSIZE) - 1)].head, (WL)w);\n                  w->wd = -1;\n                  infy_add (EV_A_ w); /* re-add, no matter what */\n                }\n\n              stat_timer_cb (EV_A_ &w->timer, 0);\n            }\n        }\n    }\n}\n\nstatic void\ninfy_cb (EV_P_ ev_io *w, int revents)\n{\n  char buf [EV_INOTIFY_BUFSIZE];\n  int ofs;\n  int len = read (fs_fd, buf, sizeof (buf));\n\n  for (ofs = 0; ofs < len; )\n    {\n      struct inotify_event *ev = (struct inotify_event *)(buf + ofs);\n      infy_wd (EV_A_ ev->wd, ev->wd, ev);\n      ofs += sizeof (struct inotify_event) + ev->len;\n    }\n}\n\ninline_size void ecb_cold\nev_check_2625 (EV_P)\n{\n  /* kernels < 2.6.25 are borked\n   * http://www.ussg.indiana.edu/hypermail/linux/kernel/0711.3/1208.html\n   */\n  if (ev_linux_version () < 0x020619)\n    return;\n\n  fs_2625 = 1;\n}\n\ninline_size int\ninfy_newfd (void)\n{\n#if defined IN_CLOEXEC && defined IN_NONBLOCK\n  int fd = inotify_init1 (IN_CLOEXEC | IN_NONBLOCK);\n  if (fd >= 0)\n    return fd;\n#endif\n  return inotify_init ();\n}\n\ninline_size void\ninfy_init (EV_P)\n{\n  if (fs_fd != -2)\n    return;\n\n  fs_fd = -1;\n\n  ev_check_2625 (EV_A);\n\n  fs_fd = infy_newfd ();\n\n  if (fs_fd >= 0)\n    {\n      fd_intern (fs_fd);\n      ev_io_init (&fs_w, infy_cb, fs_fd, EV_READ);\n      ev_set_priority (&fs_w, EV_MAXPRI);\n      ev_io_start (EV_A_ &fs_w);\n      ev_unref (EV_A);\n    }\n}\n\ninline_size void\ninfy_fork (EV_P)\n{\n  int slot;\n\n  if (fs_fd < 0)\n    return;\n\n  ev_ref (EV_A);\n  ev_io_stop (EV_A_ &fs_w);\n  close (fs_fd);\n  fs_fd = infy_newfd ();\n\n  if (fs_fd >= 0)\n    {\n      fd_intern (fs_fd);\n      ev_io_set (&fs_w, fs_fd, EV_READ);\n      ev_io_start (EV_A_ &fs_w);\n      ev_unref (EV_A);\n    }\n\n  for (slot = 0; slot < (EV_INOTIFY_HASHSIZE); ++slot)\n    {\n      WL w_ = fs_hash [slot].head;\n      fs_hash [slot].head = 0;\n\n      while (w_)\n        {\n          ev_stat *w = (ev_stat *)w_;\n          w_ = w_->next; /* lets us add this watcher */\n\n          w->wd = -1;\n\n          if (fs_fd >= 0)\n            infy_add (EV_A_ w); /* re-add, no matter what */\n          else\n            {\n              w->timer.repeat = w->interval ? w->interval : DEF_STAT_INTERVAL;\n              if (ev_is_active (&w->timer)) ev_ref (EV_A);\n              ev_timer_again (EV_A_ &w->timer);\n              if (ev_is_active (&w->timer)) ev_unref (EV_A);\n            }\n        }\n    }\n}\n\n#endif\n\n#ifdef _WIN32\n# define EV_LSTAT(p,b) _stati64 (p, b)\n#else\n# define EV_LSTAT(p,b) lstat (p, b)\n#endif\n\nvoid\nev_stat_stat (EV_P_ ev_stat *w) EV_THROW\n{\n  if (lstat (w->path, &w->attr) < 0)\n    w->attr.st_nlink = 0;\n  else if (!w->attr.st_nlink)\n    w->attr.st_nlink = 1;\n}\n\nstatic void noinline\nstat_timer_cb (EV_P_ ev_timer *w_, int revents)\n{\n  ev_stat *w = (ev_stat *)(((char *)w_) - offsetof (ev_stat, timer));\n\n  ev_statdata prev = w->attr;\n  ev_stat_stat (EV_A_ w);\n\n  /* memcmp doesn't work on netbsd, they.... do stuff to their struct stat */\n  if (\n    prev.st_dev      != w->attr.st_dev\n    || prev.st_ino   != w->attr.st_ino\n    || prev.st_mode  != w->attr.st_mode\n    || prev.st_nlink != w->attr.st_nlink\n    || prev.st_uid   != w->attr.st_uid\n    || prev.st_gid   != w->attr.st_gid\n    || prev.st_rdev  != w->attr.st_rdev\n    || prev.st_size  != w->attr.st_size\n    || prev.st_atime != w->attr.st_atime\n    || prev.st_mtime != w->attr.st_mtime\n    || prev.st_ctime != w->attr.st_ctime\n  ) {\n      /* we only update w->prev on actual differences */\n      /* in case we test more often than invoke the callback, */\n      /* to ensure that prev is always different to attr */\n      w->prev = prev;\n\n      #if EV_USE_INOTIFY\n        if (fs_fd >= 0)\n          {\n            infy_del (EV_A_ w);\n            infy_add (EV_A_ w);\n            ev_stat_stat (EV_A_ w); /* avoid race... */\n          }\n      #endif\n\n      ev_feed_event (EV_A_ w, EV_STAT);\n    }\n}\n\nvoid\nev_stat_start (EV_P_ ev_stat *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  ev_stat_stat (EV_A_ w);\n\n  if (w->interval < MIN_STAT_INTERVAL && w->interval)\n    w->interval = MIN_STAT_INTERVAL;\n\n  ev_timer_init (&w->timer, stat_timer_cb, 0., w->interval ? w->interval : DEF_STAT_INTERVAL);\n  ev_set_priority (&w->timer, ev_priority (w));\n\n#if EV_USE_INOTIFY\n  infy_init (EV_A);\n\n  if (fs_fd >= 0)\n    infy_add (EV_A_ w);\n  else\n#endif\n    {\n      ev_timer_again (EV_A_ &w->timer);\n      ev_unref (EV_A);\n    }\n\n  ev_start (EV_A_ (W)w, 1);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_stat_stop (EV_P_ ev_stat *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n#if EV_USE_INOTIFY\n  infy_del (EV_A_ w);\n#endif\n\n  if (ev_is_active (&w->timer))\n    {\n      ev_ref (EV_A);\n      ev_timer_stop (EV_A_ &w->timer);\n    }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_IDLE_ENABLE\nvoid\nev_idle_start (EV_P_ ev_idle *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  pri_adjust (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ++idlecnt [ABSPRI (w)];\n\n    ++idleall;\n    ev_start (EV_A_ (W)w, active);\n\n    array_needsize (ev_idle *, idles [ABSPRI (w)], idlemax [ABSPRI (w)], active, EMPTY2);\n    idles [ABSPRI (w)][active - 1] = w;\n  }\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_idle_stop (EV_P_ ev_idle *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    idles [ABSPRI (w)][active - 1] = idles [ABSPRI (w)][--idlecnt [ABSPRI (w)]];\n    ev_active (idles [ABSPRI (w)][active - 1]) = active;\n\n    ev_stop (EV_A_ (W)w);\n    --idleall;\n  }\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_PREPARE_ENABLE\nvoid\nev_prepare_start (EV_P_ ev_prepare *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, ++preparecnt);\n  array_needsize (ev_prepare *, prepares, preparemax, preparecnt, EMPTY2);\n  prepares [preparecnt - 1] = w;\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_prepare_stop (EV_P_ ev_prepare *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    prepares [active - 1] = prepares [--preparecnt];\n    ev_active (prepares [active - 1]) = active;\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_CHECK_ENABLE\nvoid\nev_check_start (EV_P_ ev_check *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, ++checkcnt);\n  array_needsize (ev_check *, checks, checkmax, checkcnt, EMPTY2);\n  checks [checkcnt - 1] = w;\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_check_stop (EV_P_ ev_check *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    checks [active - 1] = checks [--checkcnt];\n    ev_active (checks [active - 1]) = active;\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_EMBED_ENABLE\nvoid noinline\nev_embed_sweep (EV_P_ ev_embed *w) EV_THROW\n{\n  ev_run (w->other, EVRUN_NOWAIT);\n}\n\nstatic void\nembed_io_cb (EV_P_ ev_io *io, int revents)\n{\n  ev_embed *w = (ev_embed *)(((char *)io) - offsetof (ev_embed, io));\n\n  if (ev_cb (w))\n    ev_feed_event (EV_A_ (W)w, EV_EMBED);\n  else\n    ev_run (w->other, EVRUN_NOWAIT);\n}\n\nstatic void\nembed_prepare_cb (EV_P_ ev_prepare *prepare, int revents)\n{\n  ev_embed *w = (ev_embed *)(((char *)prepare) - offsetof (ev_embed, prepare));\n\n  {\n    EV_P = w->other;\n\n    while (fdchangecnt)\n      {\n        fd_reify (EV_A);\n        ev_run (EV_A_ EVRUN_NOWAIT);\n      }\n  }\n}\n\nstatic void\nembed_fork_cb (EV_P_ ev_fork *fork_w, int revents)\n{\n  ev_embed *w = (ev_embed *)(((char *)fork_w) - offsetof (ev_embed, fork));\n\n  ev_embed_stop (EV_A_ w);\n\n  {\n    EV_P = w->other;\n\n    ev_loop_fork (EV_A);\n    ev_run (EV_A_ EVRUN_NOWAIT);\n  }\n\n  ev_embed_start (EV_A_ w);\n}\n\n#if 0\nstatic void\nembed_idle_cb (EV_P_ ev_idle *idle, int revents)\n{\n  ev_idle_stop (EV_A_ idle);\n}\n#endif\n\nvoid\nev_embed_start (EV_P_ ev_embed *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  {\n    EV_P = w->other;\n    assert ((\"libev: loop to be embedded is not embeddable\", backend & ev_embeddable_backends ()));\n    ev_io_init (&w->io, embed_io_cb, backend_fd, EV_READ);\n  }\n\n  EV_FREQUENT_CHECK;\n\n  ev_set_priority (&w->io, ev_priority (w));\n  ev_io_start (EV_A_ &w->io);\n\n  ev_prepare_init (&w->prepare, embed_prepare_cb);\n  ev_set_priority (&w->prepare, EV_MINPRI);\n  ev_prepare_start (EV_A_ &w->prepare);\n\n  ev_fork_init (&w->fork, embed_fork_cb);\n  ev_fork_start (EV_A_ &w->fork);\n\n  /*ev_idle_init (&w->idle, e,bed_idle_cb);*/\n\n  ev_start (EV_A_ (W)w, 1);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_embed_stop (EV_P_ ev_embed *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_io_stop      (EV_A_ &w->io);\n  ev_prepare_stop (EV_A_ &w->prepare);\n  ev_fork_stop    (EV_A_ &w->fork);\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_FORK_ENABLE\nvoid\nev_fork_start (EV_P_ ev_fork *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, ++forkcnt);\n  array_needsize (ev_fork *, forks, forkmax, forkcnt, EMPTY2);\n  forks [forkcnt - 1] = w;\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_fork_stop (EV_P_ ev_fork *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    forks [active - 1] = forks [--forkcnt];\n    ev_active (forks [active - 1]) = active;\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_CLEANUP_ENABLE\nvoid\nev_cleanup_start (EV_P_ ev_cleanup *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, ++cleanupcnt);\n  array_needsize (ev_cleanup *, cleanups, cleanupmax, cleanupcnt, EMPTY2);\n  cleanups [cleanupcnt - 1] = w;\n\n  /* cleanup watchers should never keep a refcount on the loop */\n  ev_unref (EV_A);\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_cleanup_stop (EV_P_ ev_cleanup *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n  ev_ref (EV_A);\n\n  {\n    int active = ev_active (w);\n\n    cleanups [active - 1] = cleanups [--cleanupcnt];\n    ev_active (cleanups [active - 1]) = active;\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n#endif\n\n#if EV_ASYNC_ENABLE\nvoid\nev_async_start (EV_P_ ev_async *w) EV_THROW\n{\n  if (expect_false (ev_is_active (w)))\n    return;\n\n  w->sent = 0;\n\n  evpipe_init (EV_A);\n\n  EV_FREQUENT_CHECK;\n\n  ev_start (EV_A_ (W)w, ++asynccnt);\n  array_needsize (ev_async *, asyncs, asyncmax, asynccnt, EMPTY2);\n  asyncs [asynccnt - 1] = w;\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_async_stop (EV_P_ ev_async *w) EV_THROW\n{\n  clear_pending (EV_A_ (W)w);\n  if (expect_false (!ev_is_active (w)))\n    return;\n\n  EV_FREQUENT_CHECK;\n\n  {\n    int active = ev_active (w);\n\n    asyncs [active - 1] = asyncs [--asynccnt];\n    ev_active (asyncs [active - 1]) = active;\n  }\n\n  ev_stop (EV_A_ (W)w);\n\n  EV_FREQUENT_CHECK;\n}\n\nvoid\nev_async_send (EV_P_ ev_async *w) EV_THROW\n{\n  w->sent = 1;\n  evpipe_write (EV_A_ &async_pending);\n}\n#endif\n\n/*****************************************************************************/\n\nstruct ev_once\n{\n  ev_io io;\n  ev_timer to;\n  void (*cb)(int revents, void *arg);\n  void *arg;\n};\n\nstatic void\nonce_cb (EV_P_ struct ev_once *once, int revents)\n{\n  void (*cb)(int revents, void *arg) = once->cb;\n  void *arg = once->arg;\n\n  ev_io_stop    (EV_A_ &once->io);\n  ev_timer_stop (EV_A_ &once->to);\n  ev_free (once);\n\n  cb (revents, arg);\n}\n\nstatic void\nonce_cb_io (EV_P_ ev_io *w, int revents)\n{\n  struct ev_once *once = (struct ev_once *)(((char *)w) - offsetof (struct ev_once, io));\n\n  once_cb (EV_A_ once, revents | ev_clear_pending (EV_A_ &once->to));\n}\n\nstatic void\nonce_cb_to (EV_P_ ev_timer *w, int revents)\n{\n  struct ev_once *once = (struct ev_once *)(((char *)w) - offsetof (struct ev_once, to));\n\n  once_cb (EV_A_ once, revents | ev_clear_pending (EV_A_ &once->io));\n}\n\nvoid\nev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg) EV_THROW\n{\n  struct ev_once *once = (struct ev_once *)ev_malloc (sizeof (struct ev_once));\n\n  if (expect_false (!once))\n    {\n      cb (EV_ERROR | EV_READ | EV_WRITE | EV_TIMER, arg);\n      return;\n    }\n\n  once->cb  = cb;\n  once->arg = arg;\n\n  ev_init (&once->io, once_cb_io);\n  if (fd >= 0)\n    {\n      ev_io_set (&once->io, fd, events);\n      ev_io_start (EV_A_ &once->io);\n    }\n\n  ev_init (&once->to, once_cb_to);\n  if (timeout >= 0.)\n    {\n      ev_timer_set (&once->to, timeout, 0.);\n      ev_timer_start (EV_A_ &once->to);\n    }\n}\n\n/*****************************************************************************/\n\n#if EV_WALK_ENABLE\nvoid ecb_cold\nev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)) EV_THROW\n{\n  int i, j;\n  ev_watcher_list *wl, *wn;\n\n  if (types & (EV_IO | EV_EMBED))\n    for (i = 0; i < anfdmax; ++i)\n      for (wl = anfds [i].head; wl; )\n        {\n          wn = wl->next;\n\n#if EV_EMBED_ENABLE\n          if (ev_cb ((ev_io *)wl) == embed_io_cb)\n            {\n              if (types & EV_EMBED)\n                cb (EV_A_ EV_EMBED, ((char *)wl) - offsetof (struct ev_embed, io));\n            }\n          else\n#endif\n#if EV_USE_INOTIFY\n          if (ev_cb ((ev_io *)wl) == infy_cb)\n            ;\n          else\n#endif\n          if ((ev_io *)wl != &pipe_w)\n            if (types & EV_IO)\n              cb (EV_A_ EV_IO, wl);\n\n          wl = wn;\n        }\n\n  if (types & (EV_TIMER | EV_STAT))\n    for (i = timercnt + HEAP0; i-- > HEAP0; )\n#if EV_STAT_ENABLE\n      /*TODO: timer is not always active*/\n      if (ev_cb ((ev_timer *)ANHE_w (timers [i])) == stat_timer_cb)\n        {\n          if (types & EV_STAT)\n            cb (EV_A_ EV_STAT, ((char *)ANHE_w (timers [i])) - offsetof (struct ev_stat, timer));\n        }\n      else\n#endif\n      if (types & EV_TIMER)\n        cb (EV_A_ EV_TIMER, ANHE_w (timers [i]));\n\n#if EV_PERIODIC_ENABLE\n  if (types & EV_PERIODIC)\n    for (i = periodiccnt + HEAP0; i-- > HEAP0; )\n      cb (EV_A_ EV_PERIODIC, ANHE_w (periodics [i]));\n#endif\n\n#if EV_IDLE_ENABLE\n  if (types & EV_IDLE)\n    for (j = NUMPRI; j--; )\n      for (i = idlecnt [j]; i--; )\n        cb (EV_A_ EV_IDLE, idles [j][i]);\n#endif\n\n#if EV_FORK_ENABLE\n  if (types & EV_FORK)\n    for (i = forkcnt; i--; )\n      if (ev_cb (forks [i]) != embed_fork_cb)\n        cb (EV_A_ EV_FORK, forks [i]);\n#endif\n\n#if EV_ASYNC_ENABLE\n  if (types & EV_ASYNC)\n    for (i = asynccnt; i--; )\n      cb (EV_A_ EV_ASYNC, asyncs [i]);\n#endif\n\n#if EV_PREPARE_ENABLE\n  if (types & EV_PREPARE)\n    for (i = preparecnt; i--; )\n# if EV_EMBED_ENABLE\n      if (ev_cb (prepares [i]) != embed_prepare_cb)\n# endif\n        cb (EV_A_ EV_PREPARE, prepares [i]);\n#endif\n\n#if EV_CHECK_ENABLE\n  if (types & EV_CHECK)\n    for (i = checkcnt; i--; )\n      cb (EV_A_ EV_CHECK, checks [i]);\n#endif\n\n#if EV_SIGNAL_ENABLE\n  if (types & EV_SIGNAL)\n    for (i = 0; i < EV_NSIG - 1; ++i)\n      for (wl = signals [i].head; wl; )\n        {\n          wn = wl->next;\n          cb (EV_A_ EV_SIGNAL, wl);\n          wl = wn;\n        }\n#endif\n\n#if EV_CHILD_ENABLE\n  if (types & EV_CHILD)\n    for (i = (EV_PID_HASHSIZE); i--; )\n      for (wl = childs [i]; wl; )\n        {\n          wn = wl->next;\n          cb (EV_A_ EV_CHILD, wl);\n          wl = wn;\n        }\n#endif\n/* EV_STAT     0x00001000 /* stat data changed */\n/* EV_EMBED    0x00010000 /* embedded event loop needs sweep */\n}\n#endif\n\n#if EV_MULTIPLICITY\n  #include \"ev_wrap.h\"\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev.h",
    "content": "/*\n * libev native API header\n *\n * Copyright (c) 2007,2008,2009,2010,2011,2012,2015 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifndef EV_H_\n#define EV_H_\n\n#ifdef __cplusplus\n# define EV_CPP(x) x\n# if __cplusplus >= 201103L\n#  define EV_THROW noexcept\n# else\n#  define EV_THROW throw ()\n# endif\n#else\n# define EV_CPP(x)\n# define EV_THROW\n#endif\n\nEV_CPP(extern \"C\" {)\n\n/*****************************************************************************/\n\n/* pre-4.0 compatibility */\n#ifndef EV_COMPAT3\n# define EV_COMPAT3 1\n#endif\n\n#ifndef EV_FEATURES\n# if defined __OPTIMIZE_SIZE__\n#  define EV_FEATURES 0x7c\n# else\n#  define EV_FEATURES 0x7f\n# endif\n#endif\n\n#define EV_FEATURE_CODE     ((EV_FEATURES) &  1)\n#define EV_FEATURE_DATA     ((EV_FEATURES) &  2)\n#define EV_FEATURE_CONFIG   ((EV_FEATURES) &  4)\n#define EV_FEATURE_API      ((EV_FEATURES) &  8)\n#define EV_FEATURE_WATCHERS ((EV_FEATURES) & 16)\n#define EV_FEATURE_BACKENDS ((EV_FEATURES) & 32)\n#define EV_FEATURE_OS       ((EV_FEATURES) & 64)\n\n/* these priorities are inclusive, higher priorities will be invoked earlier */\n#ifndef EV_MINPRI\n# define EV_MINPRI (EV_FEATURE_CONFIG ? -2 : 0)\n#endif\n#ifndef EV_MAXPRI\n# define EV_MAXPRI (EV_FEATURE_CONFIG ? +2 : 0)\n#endif\n\n#ifndef EV_MULTIPLICITY\n# define EV_MULTIPLICITY EV_FEATURE_CONFIG\n#endif\n\n#ifndef EV_PERIODIC_ENABLE\n# define EV_PERIODIC_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_STAT_ENABLE\n# define EV_STAT_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_PREPARE_ENABLE\n# define EV_PREPARE_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_CHECK_ENABLE\n# define EV_CHECK_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_IDLE_ENABLE\n# define EV_IDLE_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_FORK_ENABLE\n# define EV_FORK_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_CLEANUP_ENABLE\n# define EV_CLEANUP_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_SIGNAL_ENABLE\n# define EV_SIGNAL_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_CHILD_ENABLE\n# ifdef _WIN32\n#  define EV_CHILD_ENABLE 0\n# else\n#  define EV_CHILD_ENABLE EV_FEATURE_WATCHERS\n#endif\n#endif\n\n#ifndef EV_ASYNC_ENABLE\n# define EV_ASYNC_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_EMBED_ENABLE\n# define EV_EMBED_ENABLE EV_FEATURE_WATCHERS\n#endif\n\n#ifndef EV_WALK_ENABLE\n# define EV_WALK_ENABLE 0 /* not yet */\n#endif\n\n/*****************************************************************************/\n\n#if EV_CHILD_ENABLE && !EV_SIGNAL_ENABLE\n# undef EV_SIGNAL_ENABLE\n# define EV_SIGNAL_ENABLE 1\n#endif\n\n/*****************************************************************************/\n\ntypedef double ev_tstamp;\n\n#include <string.h> /* for memmove */\n\n#ifndef EV_ATOMIC_T\n# include <signal.h>\n# define EV_ATOMIC_T sig_atomic_t volatile\n#endif\n\n#if EV_STAT_ENABLE\n# ifdef _WIN32\n#  include <time.h>\n#  include <sys/types.h>\n# endif\n# include <sys/stat.h>\n#endif\n\n/* support multiple event loops? */\n#if EV_MULTIPLICITY\nstruct ev_loop;\n# define EV_P  struct ev_loop *loop               /* a loop as sole parameter in a declaration */\n# define EV_P_ EV_P,                              /* a loop as first of multiple parameters */\n# define EV_A  loop                               /* a loop as sole argument to a function call */\n# define EV_A_ EV_A,                              /* a loop as first of multiple arguments */\n# define EV_DEFAULT_UC  ev_default_loop_uc_ ()    /* the default loop, if initialised, as sole arg */\n# define EV_DEFAULT_UC_ EV_DEFAULT_UC,            /* the default loop as first of multiple arguments */\n# define EV_DEFAULT  ev_default_loop (0)          /* the default loop as sole arg */\n# define EV_DEFAULT_ EV_DEFAULT,                  /* the default loop as first of multiple arguments */\n#else\n# define EV_P void\n# define EV_P_\n# define EV_A\n# define EV_A_\n# define EV_DEFAULT\n# define EV_DEFAULT_\n# define EV_DEFAULT_UC\n# define EV_DEFAULT_UC_\n# undef EV_EMBED_ENABLE\n#endif\n\n/* EV_INLINE is used for functions in header files */\n#if __STDC_VERSION__ >= 199901L || __GNUC__ >= 3\n# define EV_INLINE static inline\n#else\n# define EV_INLINE static\n#endif\n\n#ifdef EV_API_STATIC\n# define EV_API_DECL static\n#else\n# define EV_API_DECL extern\n#endif\n\n/* EV_PROTOTYPES can be used to switch of prototype declarations */\n#ifndef EV_PROTOTYPES\n# define EV_PROTOTYPES 1\n#endif\n\n/*****************************************************************************/\n\n#define EV_VERSION_MAJOR 4\n#define EV_VERSION_MINOR 20\n\n/* eventmask, revents, events... */\nenum {\n  EV_UNDEF    = (int)0xFFFFFFFF, /* guaranteed to be invalid */\n  EV_NONE     =            0x00, /* no events */\n  EV_READ     =            0x01, /* ev_io detected read will not block */\n  EV_WRITE    =            0x02, /* ev_io detected write will not block */\n  EV__IOFDSET =            0x80, /* internal use only */\n  EV_IO       =         EV_READ, /* alias for type-detection */\n  EV_TIMER    =      0x00000100, /* timer timed out */\n#if EV_COMPAT3\n  EV_TIMEOUT  =        EV_TIMER, /* pre 4.0 API compatibility */\n#endif\n  EV_PERIODIC =      0x00000200, /* periodic timer timed out */\n  EV_SIGNAL   =      0x00000400, /* signal was received */\n  EV_CHILD    =      0x00000800, /* child/pid had status change */\n  EV_STAT     =      0x00001000, /* stat data changed */\n  EV_IDLE     =      0x00002000, /* event loop is idling */\n  EV_PREPARE  =      0x00004000, /* event loop about to poll */\n  EV_CHECK    =      0x00008000, /* event loop finished poll */\n  EV_EMBED    =      0x00010000, /* embedded event loop needs sweep */\n  EV_FORK     =      0x00020000, /* event loop resumed in child */\n  EV_CLEANUP  =      0x00040000, /* event loop resumed in child */\n  EV_ASYNC    =      0x00080000, /* async intra-loop signal */\n  EV_CUSTOM   =      0x01000000, /* for use by user code */\n  EV_ERROR    = (int)0x80000000  /* sent when an error occurs */\n};\n\n/* can be used to add custom fields to all watchers, while losing binary compatibility */\n#ifndef EV_COMMON\n# define EV_COMMON void *data;\n#endif\n\n#ifndef EV_CB_DECLARE\n# define EV_CB_DECLARE(type) void (*cb)(EV_P_ struct type *w, int revents);\n#endif\n#ifndef EV_CB_INVOKE\n# define EV_CB_INVOKE(watcher,revents) (watcher)->cb (EV_A_ (watcher), (revents))\n#endif\n\n/* not official, do not use */\n#define EV_CB(type,name) void name (EV_P_ struct ev_ ## type *w, int revents)\n\n/*\n * struct member types:\n * private: you may look at them, but not change them,\n *          and they might not mean anything to you.\n * ro: can be read anytime, but only changed when the watcher isn't active.\n * rw: can be read and modified anytime, even when the watcher is active.\n *\n * some internal details that might be helpful for debugging:\n *\n * active is either 0, which means the watcher is not active,\n *           or the array index of the watcher (periodics, timers)\n *           or the array index + 1 (most other watchers)\n *           or simply 1 for watchers that aren't in some array.\n * pending is either 0, in which case the watcher isn't,\n *           or the array index + 1 in the pendings array.\n */\n\n#if EV_MINPRI == EV_MAXPRI\n# define EV_DECL_PRIORITY\n#elif !defined (EV_DECL_PRIORITY)\n# define EV_DECL_PRIORITY int priority;\n#endif\n\n/* shared by all watchers */\n#define EV_WATCHER(type)\t\t\t\\\n  int active; /* private */\t\t\t\\\n  int pending; /* private */\t\t\t\\\n  EV_DECL_PRIORITY /* private */\t\t\\\n  EV_COMMON /* rw */\t\t\t\t\\\n  EV_CB_DECLARE (type) /* private */\n\n#define EV_WATCHER_LIST(type)\t\t\t\\\n  EV_WATCHER (type)\t\t\t\t\\\n  struct ev_watcher_list *next; /* private */\n\n#define EV_WATCHER_TIME(type)\t\t\t\\\n  EV_WATCHER (type)\t\t\t\t\\\n  ev_tstamp at;     /* private */\n\n/* base class, nothing to see here unless you subclass */\ntypedef struct ev_watcher\n{\n  EV_WATCHER (ev_watcher)\n} ev_watcher;\n\n/* base class, nothing to see here unless you subclass */\ntypedef struct ev_watcher_list\n{\n  EV_WATCHER_LIST (ev_watcher_list)\n} ev_watcher_list;\n\n/* base class, nothing to see here unless you subclass */\ntypedef struct ev_watcher_time\n{\n  EV_WATCHER_TIME (ev_watcher_time)\n} ev_watcher_time;\n\n/* invoked when fd is either EV_READable or EV_WRITEable */\n/* revent EV_READ, EV_WRITE */\ntypedef struct ev_io\n{\n  EV_WATCHER_LIST (ev_io)\n\n  int fd;     /* ro */\n  int events; /* ro */\n} ev_io;\n\n/* invoked after a specific time, repeatable (based on monotonic clock) */\n/* revent EV_TIMEOUT */\ntypedef struct ev_timer\n{\n  EV_WATCHER_TIME (ev_timer)\n\n  ev_tstamp repeat; /* rw */\n} ev_timer;\n\n/* invoked at some specific time, possibly repeating at regular intervals (based on UTC) */\n/* revent EV_PERIODIC */\ntypedef struct ev_periodic\n{\n  EV_WATCHER_TIME (ev_periodic)\n\n  ev_tstamp offset; /* rw */\n  ev_tstamp interval; /* rw */\n  ev_tstamp (*reschedule_cb)(struct ev_periodic *w, ev_tstamp now) EV_THROW; /* rw */\n} ev_periodic;\n\n/* invoked when the given signal has been received */\n/* revent EV_SIGNAL */\ntypedef struct ev_signal\n{\n  EV_WATCHER_LIST (ev_signal)\n\n  int signum; /* ro */\n} ev_signal;\n\n/* invoked when sigchld is received and waitpid indicates the given pid */\n/* revent EV_CHILD */\n/* does not support priorities */\ntypedef struct ev_child\n{\n  EV_WATCHER_LIST (ev_child)\n\n  int flags;   /* private */\n  int pid;     /* ro */\n  int rpid;    /* rw, holds the received pid */\n  int rstatus; /* rw, holds the exit status, use the macros from sys/wait.h */\n} ev_child;\n\n#if EV_STAT_ENABLE\n/* st_nlink = 0 means missing file or other error */\n# ifdef _WIN32\ntypedef struct _stati64 ev_statdata;\n# else\ntypedef struct stat ev_statdata;\n# endif\n\n/* invoked each time the stat data changes for a given path */\n/* revent EV_STAT */\ntypedef struct ev_stat\n{\n  EV_WATCHER_LIST (ev_stat)\n\n  ev_timer timer;     /* private */\n  ev_tstamp interval; /* ro */\n  const char *path;   /* ro */\n  ev_statdata prev;   /* ro */\n  ev_statdata attr;   /* ro */\n\n  int wd; /* wd for inotify, fd for kqueue */\n} ev_stat;\n#endif\n\n#if EV_IDLE_ENABLE\n/* invoked when the nothing else needs to be done, keeps the process from blocking */\n/* revent EV_IDLE */\ntypedef struct ev_idle\n{\n  EV_WATCHER (ev_idle)\n} ev_idle;\n#endif\n\n/* invoked for each run of the mainloop, just before the blocking call */\n/* you can still change events in any way you like */\n/* revent EV_PREPARE */\ntypedef struct ev_prepare\n{\n  EV_WATCHER (ev_prepare)\n} ev_prepare;\n\n/* invoked for each run of the mainloop, just after the blocking call */\n/* revent EV_CHECK */\ntypedef struct ev_check\n{\n  EV_WATCHER (ev_check)\n} ev_check;\n\n#if EV_FORK_ENABLE\n/* the callback gets invoked before check in the child process when a fork was detected */\n/* revent EV_FORK */\ntypedef struct ev_fork\n{\n  EV_WATCHER (ev_fork)\n} ev_fork;\n#endif\n\n#if EV_CLEANUP_ENABLE\n/* is invoked just before the loop gets destroyed */\n/* revent EV_CLEANUP */\ntypedef struct ev_cleanup\n{\n  EV_WATCHER (ev_cleanup)\n} ev_cleanup;\n#endif\n\n#if EV_EMBED_ENABLE\n/* used to embed an event loop inside another */\n/* the callback gets invoked when the event loop has handled events, and can be 0 */\ntypedef struct ev_embed\n{\n  EV_WATCHER (ev_embed)\n\n  struct ev_loop *other; /* ro */\n  ev_io io;              /* private */\n  ev_prepare prepare;    /* private */\n  ev_check check;        /* unused */\n  ev_timer timer;        /* unused */\n  ev_periodic periodic;  /* unused */\n  ev_idle idle;          /* unused */\n  ev_fork fork;          /* private */\n#if EV_CLEANUP_ENABLE\n  ev_cleanup cleanup;    /* unused */\n#endif\n} ev_embed;\n#endif\n\n#if EV_ASYNC_ENABLE\n/* invoked when somebody calls ev_async_send on the watcher */\n/* revent EV_ASYNC */\ntypedef struct ev_async\n{\n  EV_WATCHER (ev_async)\n\n  EV_ATOMIC_T sent; /* private */\n} ev_async;\n\n# define ev_async_pending(w) (+(w)->sent)\n#endif\n\n/* the presence of this union forces similar struct layout */\nunion ev_any_watcher\n{\n  struct ev_watcher w;\n  struct ev_watcher_list wl;\n\n  struct ev_io io;\n  struct ev_timer timer;\n  struct ev_periodic periodic;\n  struct ev_signal signal;\n  struct ev_child child;\n#if EV_STAT_ENABLE\n  struct ev_stat stat;\n#endif\n#if EV_IDLE_ENABLE\n  struct ev_idle idle;\n#endif\n  struct ev_prepare prepare;\n  struct ev_check check;\n#if EV_FORK_ENABLE\n  struct ev_fork fork;\n#endif\n#if EV_CLEANUP_ENABLE\n  struct ev_cleanup cleanup;\n#endif\n#if EV_EMBED_ENABLE\n  struct ev_embed embed;\n#endif\n#if EV_ASYNC_ENABLE\n  struct ev_async async;\n#endif\n};\n\n/* flag bits for ev_default_loop and ev_loop_new */\nenum {\n  /* the default */\n  EVFLAG_AUTO      = 0x00000000U, /* not quite a mask */\n  /* flag bits */\n  EVFLAG_NOENV     = 0x01000000U, /* do NOT consult environment */\n  EVFLAG_FORKCHECK = 0x02000000U, /* check for a fork in each iteration */\n  /* debugging/feature disable */\n  EVFLAG_NOINOTIFY = 0x00100000U, /* do not attempt to use inotify */\n#if EV_COMPAT3\n  EVFLAG_NOSIGFD   = 0, /* compatibility to pre-3.9 */\n#endif\n  EVFLAG_SIGNALFD  = 0x00200000U, /* attempt to use signalfd */\n  EVFLAG_NOSIGMASK = 0x00400000U  /* avoid modifying the signal mask */\n};\n\n/* method bits to be ored together */\nenum {\n  EVBACKEND_SELECT  = 0x00000001U, /* about anywhere */\n  EVBACKEND_POLL    = 0x00000002U, /* !win */\n  EVBACKEND_EPOLL   = 0x00000004U, /* linux */\n  EVBACKEND_KQUEUE  = 0x00000008U, /* bsd */\n  EVBACKEND_DEVPOLL = 0x00000010U, /* solaris 8 */ /* NYI */\n  EVBACKEND_PORT    = 0x00000020U, /* solaris 10 */\n  EVBACKEND_ALL     = 0x0000003FU, /* all known backends */\n  EVBACKEND_MASK    = 0x0000FFFFU  /* all future backends */\n};\n\n#if EV_PROTOTYPES\nEV_API_DECL int ev_version_major (void) EV_THROW;\nEV_API_DECL int ev_version_minor (void) EV_THROW;\n\nEV_API_DECL unsigned int ev_supported_backends (void) EV_THROW;\nEV_API_DECL unsigned int ev_recommended_backends (void) EV_THROW;\nEV_API_DECL unsigned int ev_embeddable_backends (void) EV_THROW;\n\nEV_API_DECL ev_tstamp ev_time (void) EV_THROW;\nEV_API_DECL void ev_sleep (ev_tstamp delay) EV_THROW; /* sleep for a while */\n\n/* Sets the allocation function to use, works like realloc.\n * It is used to allocate and free memory.\n * If it returns zero when memory needs to be allocated, the library might abort\n * or take some potentially destructive action.\n * The default is your system realloc function.\n */\nEV_API_DECL void ev_set_allocator (void *(*cb)(void *ptr, long size) EV_THROW) EV_THROW;\n\n/* set the callback function to call on a\n * retryable syscall error\n * (such as failed select, poll, epoll_wait)\n */\nEV_API_DECL void ev_set_syserr_cb (void (*cb)(const char *msg) EV_THROW) EV_THROW;\n\n#if EV_MULTIPLICITY\n\n/* the default loop is the only one that handles signals and child watchers */\n/* you can call this as often as you like */\nEV_API_DECL struct ev_loop *ev_default_loop (unsigned int flags EV_CPP (= 0)) EV_THROW;\n\n#ifdef EV_API_STATIC\nEV_API_DECL struct ev_loop *ev_default_loop_ptr;\n#endif\n\nEV_INLINE struct ev_loop *\nev_default_loop_uc_ (void) EV_THROW\n{\n  extern struct ev_loop *ev_default_loop_ptr;\n\n  return ev_default_loop_ptr;\n}\n\nEV_INLINE int\nev_is_default_loop (EV_P) EV_THROW\n{\n  return EV_A == EV_DEFAULT_UC;\n}\n\n/* create and destroy alternative loops that don't handle signals */\nEV_API_DECL struct ev_loop *ev_loop_new (unsigned int flags EV_CPP (= 0)) EV_THROW;\n\nEV_API_DECL ev_tstamp ev_now (EV_P) EV_THROW; /* time w.r.t. timers and the eventloop, updated after each poll */\n\n#else\n\nEV_API_DECL int ev_default_loop (unsigned int flags EV_CPP (= 0)) EV_THROW; /* returns true when successful */\n\nEV_API_DECL ev_tstamp ev_rt_now;\n\nEV_INLINE ev_tstamp\nev_now (void) EV_THROW\n{\n  return ev_rt_now;\n}\n\n/* looks weird, but ev_is_default_loop (EV_A) still works if this exists */\nEV_INLINE int\nev_is_default_loop (void) EV_THROW\n{\n  return 1;\n}\n\n#endif /* multiplicity */\n\n/* destroy event loops, also works for the default loop */\nEV_API_DECL void ev_loop_destroy (EV_P);\n\n/* this needs to be called after fork, to duplicate the loop */\n/* when you want to re-use it in the child */\n/* you can call it in either the parent or the child */\n/* you can actually call it at any time, anywhere :) */\nEV_API_DECL void ev_loop_fork (EV_P) EV_THROW;\n\nEV_API_DECL unsigned int ev_backend (EV_P) EV_THROW; /* backend in use by loop */\n\nEV_API_DECL void ev_now_update (EV_P) EV_THROW; /* update event loop time */\n\n#if EV_WALK_ENABLE\n/* walk (almost) all watchers in the loop of a given type, invoking the */\n/* callback on every such watcher. The callback might stop the watcher, */\n/* but do nothing else with the loop */\nEV_API_DECL void ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)) EV_THROW;\n#endif\n\n#endif /* prototypes */\n\n/* ev_run flags values */\nenum {\n  EVRUN_NOWAIT = 1, /* do not block/wait */\n  EVRUN_ONCE   = 2  /* block *once* only */\n};\n\n/* ev_break how values */\nenum {\n  EVBREAK_CANCEL = 0, /* undo unloop */\n  EVBREAK_ONE    = 1, /* unloop once */\n  EVBREAK_ALL    = 2  /* unloop all loops */\n};\n\n#if EV_PROTOTYPES\nEV_API_DECL int  ev_run (EV_P_ int flags EV_CPP (= 0));\nEV_API_DECL void ev_break (EV_P_ int how EV_CPP (= EVBREAK_ONE)) EV_THROW; /* break out of the loop */\n\n/*\n * ref/unref can be used to add or remove a refcount on the mainloop. every watcher\n * keeps one reference. if you have a long-running watcher you never unregister that\n * should not keep ev_loop from running, unref() after starting, and ref() before stopping.\n */\nEV_API_DECL void ev_ref   (EV_P) EV_THROW;\nEV_API_DECL void ev_unref (EV_P) EV_THROW;\n\n/*\n * convenience function, wait for a single event, without registering an event watcher\n * if timeout is < 0, do wait indefinitely\n */\nEV_API_DECL void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg) EV_THROW;\n\n# if EV_FEATURE_API\nEV_API_DECL unsigned int ev_iteration (EV_P) EV_THROW; /* number of loop iterations */\nEV_API_DECL unsigned int ev_depth     (EV_P) EV_THROW; /* #ev_loop enters - #ev_loop leaves */\nEV_API_DECL void         ev_verify    (EV_P) EV_THROW; /* abort if loop data corrupted */\n\nEV_API_DECL void ev_set_io_collect_interval (EV_P_ ev_tstamp interval) EV_THROW; /* sleep at least this time, default 0 */\nEV_API_DECL void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval) EV_THROW; /* sleep at least this time, default 0 */\n\n/* advanced stuff for threading etc. support, see docs */\nEV_API_DECL void ev_set_userdata (EV_P_ void *data) EV_THROW;\nEV_API_DECL void *ev_userdata (EV_P) EV_THROW;\ntypedef void (*ev_loop_callback)(EV_P);\nEV_API_DECL void ev_set_invoke_pending_cb (EV_P_ ev_loop_callback invoke_pending_cb) EV_THROW;\n/* C++ doesn't allow the use of the ev_loop_callback typedef here, so we need to spell it out */\nEV_API_DECL void ev_set_loop_release_cb (EV_P_ void (*release)(EV_P) EV_THROW, void (*acquire)(EV_P) EV_THROW) EV_THROW;\n\nEV_API_DECL unsigned int ev_pending_count (EV_P) EV_THROW; /* number of pending events, if any */\nEV_API_DECL void ev_invoke_pending (EV_P); /* invoke all pending watchers */\n\n/*\n * stop/start the timer handling.\n */\nEV_API_DECL void ev_suspend (EV_P) EV_THROW;\nEV_API_DECL void ev_resume  (EV_P) EV_THROW;\n#endif\n\n#endif\n\n/* these may evaluate ev multiple times, and the other arguments at most once */\n/* either use ev_init + ev_TYPE_set, or the ev_TYPE_init macro, below, to first initialise a watcher */\n#define ev_init(ev,cb_) do {\t\t\t\\\n  ((ev_watcher *)(void *)(ev))->active  =\t\\\n  ((ev_watcher *)(void *)(ev))->pending = 0;\t\\\n  ev_set_priority ((ev), 0);\t\t\t\\\n  ev_set_cb ((ev), cb_);\t\t\t\\\n} while (0)\n\n#define ev_io_set(ev,fd_,events_)            do { (ev)->fd = (fd_); (ev)->events = (events_) | EV__IOFDSET; } while (0)\n#define ev_timer_set(ev,after_,repeat_)      do { ((ev_watcher_time *)(ev))->at = (after_); (ev)->repeat = (repeat_); } while (0)\n#define ev_periodic_set(ev,ofs_,ival_,rcb_)  do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb = (rcb_); } while (0)\n#define ev_signal_set(ev,signum_)            do { (ev)->signum = (signum_); } while (0)\n#define ev_child_set(ev,pid_,trace_)         do { (ev)->pid = (pid_); (ev)->flags = !!(trace_); } while (0)\n#define ev_stat_set(ev,path_,interval_)      do { (ev)->path = (path_); (ev)->interval = (interval_); (ev)->wd = -2; } while (0)\n#define ev_idle_set(ev)                      /* nop, yes, this is a serious in-joke */\n#define ev_prepare_set(ev)                   /* nop, yes, this is a serious in-joke */\n#define ev_check_set(ev)                     /* nop, yes, this is a serious in-joke */\n#define ev_embed_set(ev,other_)              do { (ev)->other = (other_); } while (0)\n#define ev_fork_set(ev)                      /* nop, yes, this is a serious in-joke */\n#define ev_cleanup_set(ev)                   /* nop, yes, this is a serious in-joke */\n#define ev_async_set(ev)                     /* nop, yes, this is a serious in-joke */\n\n#define ev_io_init(ev,cb,fd,events)          do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } while (0)\n#define ev_timer_init(ev,cb,after,repeat)    do { ev_init ((ev), (cb)); ev_timer_set ((ev),(after),(repeat)); } while (0)\n#define ev_periodic_init(ev,cb,ofs,ival,rcb) do { ev_init ((ev), (cb)); ev_periodic_set ((ev),(ofs),(ival),(rcb)); } while (0)\n#define ev_signal_init(ev,cb,signum)         do { ev_init ((ev), (cb)); ev_signal_set ((ev), (signum)); } while (0)\n#define ev_child_init(ev,cb,pid,trace)       do { ev_init ((ev), (cb)); ev_child_set ((ev),(pid),(trace)); } while (0)\n#define ev_stat_init(ev,cb,path,interval)    do { ev_init ((ev), (cb)); ev_stat_set ((ev),(path),(interval)); } while (0)\n#define ev_idle_init(ev,cb)                  do { ev_init ((ev), (cb)); ev_idle_set ((ev)); } while (0)\n#define ev_prepare_init(ev,cb)               do { ev_init ((ev), (cb)); ev_prepare_set ((ev)); } while (0)\n#define ev_check_init(ev,cb)                 do { ev_init ((ev), (cb)); ev_check_set ((ev)); } while (0)\n#define ev_embed_init(ev,cb,other)           do { ev_init ((ev), (cb)); ev_embed_set ((ev),(other)); } while (0)\n#define ev_fork_init(ev,cb)                  do { ev_init ((ev), (cb)); ev_fork_set ((ev)); } while (0)\n#define ev_cleanup_init(ev,cb)               do { ev_init ((ev), (cb)); ev_cleanup_set ((ev)); } while (0)\n#define ev_async_init(ev,cb)                 do { ev_init ((ev), (cb)); ev_async_set ((ev)); } while (0)\n\n#define ev_is_pending(ev)                    (0 + ((ev_watcher *)(void *)(ev))->pending) /* ro, true when watcher is waiting for callback invocation */\n#define ev_is_active(ev)                     (0 + ((ev_watcher *)(void *)(ev))->active) /* ro, true when the watcher has been started */\n\n#define ev_cb_(ev)                           (ev)->cb /* rw */\n#define ev_cb(ev)                            (memmove (&ev_cb_ (ev), &((ev_watcher *)(ev))->cb, sizeof (ev_cb_ (ev))), (ev)->cb)\n\n#if EV_MINPRI == EV_MAXPRI\n# define ev_priority(ev)                     ((ev), EV_MINPRI)\n# define ev_set_priority(ev,pri)             ((ev), (pri))\n#else\n# define ev_priority(ev)                     (+(((ev_watcher *)(void *)(ev))->priority))\n# define ev_set_priority(ev,pri)             (   (ev_watcher *)(void *)(ev))->priority = (pri)\n#endif\n\n#define ev_periodic_at(ev)                   (+((ev_watcher_time *)(ev))->at)\n\n#ifndef ev_set_cb\n# define ev_set_cb(ev,cb_)                   (ev_cb_ (ev) = (cb_), memmove (&((ev_watcher *)(ev))->cb, &ev_cb_ (ev), sizeof (ev_cb_ (ev))))\n#endif\n\n/* stopping (enabling, adding) a watcher does nothing if it is already running */\n/* stopping (disabling, deleting) a watcher does nothing unless it's already running */\n#if EV_PROTOTYPES\n\n/* feeds an event into a watcher as if the event actually occurred */\n/* accepts any ev_watcher type */\nEV_API_DECL void ev_feed_event     (EV_P_ void *w, int revents) EV_THROW;\nEV_API_DECL void ev_feed_fd_event  (EV_P_ int fd, int revents) EV_THROW;\n#if EV_SIGNAL_ENABLE\nEV_API_DECL void ev_feed_signal    (int signum) EV_THROW;\nEV_API_DECL void ev_feed_signal_event (EV_P_ int signum) EV_THROW;\n#endif\nEV_API_DECL void ev_invoke         (EV_P_ void *w, int revents);\nEV_API_DECL int  ev_clear_pending  (EV_P_ void *w) EV_THROW;\n\nEV_API_DECL void ev_io_start       (EV_P_ ev_io *w) EV_THROW;\nEV_API_DECL void ev_io_stop        (EV_P_ ev_io *w) EV_THROW;\n\nEV_API_DECL void ev_timer_start    (EV_P_ ev_timer *w) EV_THROW;\nEV_API_DECL void ev_timer_stop     (EV_P_ ev_timer *w) EV_THROW;\n/* stops if active and no repeat, restarts if active and repeating, starts if inactive and repeating */\nEV_API_DECL void ev_timer_again    (EV_P_ ev_timer *w) EV_THROW;\n/* return remaining time */\nEV_API_DECL ev_tstamp ev_timer_remaining (EV_P_ ev_timer *w) EV_THROW;\n\n#if EV_PERIODIC_ENABLE\nEV_API_DECL void ev_periodic_start (EV_P_ ev_periodic *w) EV_THROW;\nEV_API_DECL void ev_periodic_stop  (EV_P_ ev_periodic *w) EV_THROW;\nEV_API_DECL void ev_periodic_again (EV_P_ ev_periodic *w) EV_THROW;\n#endif\n\n/* only supported in the default loop */\n#if EV_SIGNAL_ENABLE\nEV_API_DECL void ev_signal_start   (EV_P_ ev_signal *w) EV_THROW;\nEV_API_DECL void ev_signal_stop    (EV_P_ ev_signal *w) EV_THROW;\n#endif\n\n/* only supported in the default loop */\n# if EV_CHILD_ENABLE\nEV_API_DECL void ev_child_start    (EV_P_ ev_child *w) EV_THROW;\nEV_API_DECL void ev_child_stop     (EV_P_ ev_child *w) EV_THROW;\n# endif\n\n# if EV_STAT_ENABLE\nEV_API_DECL void ev_stat_start     (EV_P_ ev_stat *w) EV_THROW;\nEV_API_DECL void ev_stat_stop      (EV_P_ ev_stat *w) EV_THROW;\nEV_API_DECL void ev_stat_stat      (EV_P_ ev_stat *w) EV_THROW;\n# endif\n\n# if EV_IDLE_ENABLE\nEV_API_DECL void ev_idle_start     (EV_P_ ev_idle *w) EV_THROW;\nEV_API_DECL void ev_idle_stop      (EV_P_ ev_idle *w) EV_THROW;\n# endif\n\n#if EV_PREPARE_ENABLE\nEV_API_DECL void ev_prepare_start  (EV_P_ ev_prepare *w) EV_THROW;\nEV_API_DECL void ev_prepare_stop   (EV_P_ ev_prepare *w) EV_THROW;\n#endif\n\n#if EV_CHECK_ENABLE\nEV_API_DECL void ev_check_start    (EV_P_ ev_check *w) EV_THROW;\nEV_API_DECL void ev_check_stop     (EV_P_ ev_check *w) EV_THROW;\n#endif\n\n# if EV_FORK_ENABLE\nEV_API_DECL void ev_fork_start     (EV_P_ ev_fork *w) EV_THROW;\nEV_API_DECL void ev_fork_stop      (EV_P_ ev_fork *w) EV_THROW;\n# endif\n\n# if EV_CLEANUP_ENABLE\nEV_API_DECL void ev_cleanup_start  (EV_P_ ev_cleanup *w) EV_THROW;\nEV_API_DECL void ev_cleanup_stop   (EV_P_ ev_cleanup *w) EV_THROW;\n# endif\n\n# if EV_EMBED_ENABLE\n/* only supported when loop to be embedded is in fact embeddable */\nEV_API_DECL void ev_embed_start    (EV_P_ ev_embed *w) EV_THROW;\nEV_API_DECL void ev_embed_stop     (EV_P_ ev_embed *w) EV_THROW;\nEV_API_DECL void ev_embed_sweep    (EV_P_ ev_embed *w) EV_THROW;\n# endif\n\n# if EV_ASYNC_ENABLE\nEV_API_DECL void ev_async_start    (EV_P_ ev_async *w) EV_THROW;\nEV_API_DECL void ev_async_stop     (EV_P_ ev_async *w) EV_THROW;\nEV_API_DECL void ev_async_send     (EV_P_ ev_async *w) EV_THROW;\n# endif\n\n#if EV_COMPAT3\n  #define EVLOOP_NONBLOCK EVRUN_NOWAIT\n  #define EVLOOP_ONESHOT  EVRUN_ONCE\n  #define EVUNLOOP_CANCEL EVBREAK_CANCEL\n  #define EVUNLOOP_ONE    EVBREAK_ONE\n  #define EVUNLOOP_ALL    EVBREAK_ALL\n  #if EV_PROTOTYPES\n    EV_INLINE void ev_loop   (EV_P_ int flags) { ev_run   (EV_A_ flags); }\n    EV_INLINE void ev_unloop (EV_P_ int how  ) { ev_break (EV_A_ how  ); }\n    EV_INLINE void ev_default_destroy (void) { ev_loop_destroy (EV_DEFAULT); }\n    EV_INLINE void ev_default_fork    (void) { ev_loop_fork    (EV_DEFAULT); }\n    #if EV_FEATURE_API\n      EV_INLINE unsigned int ev_loop_count  (EV_P) { return ev_iteration  (EV_A); }\n      EV_INLINE unsigned int ev_loop_depth  (EV_P) { return ev_depth      (EV_A); }\n      EV_INLINE void         ev_loop_verify (EV_P) {        ev_verify     (EV_A); }\n    #endif\n  #endif\n#else\n  typedef struct ev_loop ev_loop;\n#endif\n\n#endif\n\nEV_CPP(})\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev.pod",
    "content": "=encoding utf-8\n\n=head1 NAME\n\nlibev - a high performance full-featured event loop written in C\n\n=head1 SYNOPSIS\n\n   #include <ev.h>\n\n=head2 EXAMPLE PROGRAM\n\n   // a single header file is required\n   #include <ev.h>\n\n   #include <stdio.h> // for puts\n\n   // every watcher type has its own typedef'd struct\n   // with the name ev_TYPE\n   ev_io stdin_watcher;\n   ev_timer timeout_watcher;\n\n   // all watcher callbacks have a similar signature\n   // this callback is called when data is readable on stdin\n   static void\n   stdin_cb (EV_P_ ev_io *w, int revents)\n   {\n     puts (\"stdin ready\");\n     // for one-shot events, one must manually stop the watcher\n     // with its corresponding stop function.\n     ev_io_stop (EV_A_ w);\n\n     // this causes all nested ev_run's to stop iterating\n     ev_break (EV_A_ EVBREAK_ALL);\n   }\n\n   // another callback, this time for a time-out\n   static void\n   timeout_cb (EV_P_ ev_timer *w, int revents)\n   {\n     puts (\"timeout\");\n     // this causes the innermost ev_run to stop iterating\n     ev_break (EV_A_ EVBREAK_ONE);\n   }\n\n   int\n   main (void)\n   {\n     // use the default event loop unless you have special needs\n     struct ev_loop *loop = EV_DEFAULT;\n\n     // initialise an io watcher, then start it\n     // this one will watch for stdin to become readable\n     ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);\n     ev_io_start (loop, &stdin_watcher);\n\n     // initialise a timer watcher, then start it\n     // simple non-repeating 5.5 second timeout\n     ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);\n     ev_timer_start (loop, &timeout_watcher);\n\n     // now wait for events to arrive\n     ev_run (loop, 0);\n\n     // break was called, so exit\n     return 0;\n   }\n\n=head1 ABOUT THIS DOCUMENT\n\nThis document documents the libev software package.\n\nThe newest version of this document is also available as an html-formatted\nweb page you might find easier to navigate when reading it for the first\ntime: L<http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod>.\n\nWhile this document tries to be as complete as possible in documenting\nlibev, its usage and the rationale behind its design, it is not a tutorial\non event-based programming, nor will it introduce event-based programming\nwith libev.\n\nFamiliarity with event based programming techniques in general is assumed\nthroughout this document.\n\n=head1 WHAT TO READ WHEN IN A HURRY\n\nThis manual tries to be very detailed, but unfortunately, this also makes\nit very long. If you just want to know the basics of libev, I suggest\nreading L</ANATOMY OF A WATCHER>, then the L</EXAMPLE PROGRAM> above and\nlook up the missing functions in L</GLOBAL FUNCTIONS> and the C<ev_io> and\nC<ev_timer> sections in L</WATCHER TYPES>.\n\n=head1 ABOUT LIBEV\n\nLibev is an event loop: you register interest in certain events (such as a\nfile descriptor being readable or a timeout occurring), and it will manage\nthese event sources and provide your program with events.\n\nTo do this, it must take more or less complete control over your process\n(or thread) by executing the I<event loop> handler, and will then\ncommunicate events via a callback mechanism.\n\nYou register interest in certain events by registering so-called I<event\nwatchers>, which are relatively small C structures you initialise with the\ndetails of the event, and then hand it over to libev by I<starting> the\nwatcher.\n\n=head2 FEATURES\n\nLibev supports C<select>, C<poll>, the Linux-specific C<epoll>, the\nBSD-specific C<kqueue> and the Solaris-specific event port mechanisms\nfor file descriptor events (C<ev_io>), the Linux C<inotify> interface\n(for C<ev_stat>), Linux eventfd/signalfd (for faster and cleaner\ninter-thread wakeup (C<ev_async>)/signal handling (C<ev_signal>)) relative\ntimers (C<ev_timer>), absolute timers with customised rescheduling\n(C<ev_periodic>), synchronous signals (C<ev_signal>), process status\nchange events (C<ev_child>), and event watchers dealing with the event\nloop mechanism itself (C<ev_idle>, C<ev_embed>, C<ev_prepare> and\nC<ev_check> watchers) as well as file watchers (C<ev_stat>) and even\nlimited support for fork events (C<ev_fork>).\n\nIt also is quite fast (see this\nL<benchmark|http://libev.schmorp.de/bench.html> comparing it to libevent\nfor example).\n\n=head2 CONVENTIONS\n\nLibev is very configurable. In this manual the default (and most common)\nconfiguration will be described, which supports multiple event loops. For\nmore info about various configuration options please have a look at\nB<EMBED> section in this manual. If libev was configured without support\nfor multiple event loops, then all functions taking an initial argument of\nname C<loop> (which is always of type C<struct ev_loop *>) will not have\nthis argument.\n\n=head2 TIME REPRESENTATION\n\nLibev represents time as a single floating point number, representing\nthe (fractional) number of seconds since the (POSIX) epoch (in practice\nsomewhere near the beginning of 1970, details are complicated, don't\nask). This type is called C<ev_tstamp>, which is what you should use\ntoo. It usually aliases to the C<double> type in C. When you need to do\nany calculations on it, you should treat it as some floating point value.\n\nUnlike the name component C<stamp> might indicate, it is also used for\ntime differences (e.g. delays) throughout libev.\n\n=head1 ERROR HANDLING\n\nLibev knows three classes of errors: operating system errors, usage errors\nand internal errors (bugs).\n\nWhen libev catches an operating system error it cannot handle (for example\na system call indicating a condition libev cannot fix), it calls the callback\nset via C<ev_set_syserr_cb>, which is supposed to fix the problem or\nabort. The default is to print a diagnostic message and to call C<abort\n()>.\n\nWhen libev detects a usage error such as a negative timer interval, then\nit will print a diagnostic message and abort (via the C<assert> mechanism,\nso C<NDEBUG> will disable this checking): these are programming errors in\nthe libev caller and need to be fixed there.\n\nLibev also has a few internal error-checking C<assert>ions, and also has\nextensive consistency checking code. These do not trigger under normal\ncircumstances, as they indicate either a bug in libev or worse.\n\n\n=head1 GLOBAL FUNCTIONS\n\nThese functions can be called anytime, even before initialising the\nlibrary in any way.\n\n=over 4\n\n=item ev_tstamp ev_time ()\n\nReturns the current time as libev would use it. Please note that the\nC<ev_now> function is usually faster and also often returns the timestamp\nyou actually want to know. Also interesting is the combination of\nC<ev_now_update> and C<ev_now>.\n\n=item ev_sleep (ev_tstamp interval)\n\nSleep for the given interval: The current thread will be blocked\nuntil either it is interrupted or the given time interval has\npassed (approximately - it might return a bit earlier even if not\ninterrupted). Returns immediately if C<< interval <= 0 >>.\n\nBasically this is a sub-second-resolution C<sleep ()>.\n\nThe range of the C<interval> is limited - libev only guarantees to work\nwith sleep times of up to one day (C<< interval <= 86400 >>).\n\n=item int ev_version_major ()\n\n=item int ev_version_minor ()\n\nYou can find out the major and minor ABI version numbers of the library\nyou linked against by calling the functions C<ev_version_major> and\nC<ev_version_minor>. If you want, you can compare against the global\nsymbols C<EV_VERSION_MAJOR> and C<EV_VERSION_MINOR>, which specify the\nversion of the library your program was compiled against.\n\nThese version numbers refer to the ABI version of the library, not the\nrelease version.\n\nUsually, it's a good idea to terminate if the major versions mismatch,\nas this indicates an incompatible change. Minor versions are usually\ncompatible to older versions, so a larger minor version alone is usually\nnot a problem.\n\nExample: Make sure we haven't accidentally been linked against the wrong\nversion (note, however, that this will not detect other ABI mismatches,\nsuch as LFS or reentrancy).\n\n   assert ((\"libev version mismatch\",\n            ev_version_major () == EV_VERSION_MAJOR\n            && ev_version_minor () >= EV_VERSION_MINOR));\n\n=item unsigned int ev_supported_backends ()\n\nReturn the set of all backends (i.e. their corresponding C<EV_BACKEND_*>\nvalue) compiled into this binary of libev (independent of their\navailability on the system you are running on). See C<ev_default_loop> for\na description of the set values.\n\nExample: make sure we have the epoll method, because yeah this is cool and\na must have and can we have a torrent of it please!!!11\n\n   assert ((\"sorry, no epoll, no sex\",\n            ev_supported_backends () & EVBACKEND_EPOLL));\n\n=item unsigned int ev_recommended_backends ()\n\nReturn the set of all backends compiled into this binary of libev and\nalso recommended for this platform, meaning it will work for most file\ndescriptor types. This set is often smaller than the one returned by\nC<ev_supported_backends>, as for example kqueue is broken on most BSDs\nand will not be auto-detected unless you explicitly request it (assuming\nyou know what you are doing). This is the set of backends that libev will\nprobe for if you specify no backends explicitly.\n\n=item unsigned int ev_embeddable_backends ()\n\nReturns the set of backends that are embeddable in other event loops. This\nvalue is platform-specific but can include backends not available on the\ncurrent system. To find which embeddable backends might be supported on\nthe current system, you would need to look at C<ev_embeddable_backends ()\n& ev_supported_backends ()>, likewise for recommended ones.\n\nSee the description of C<ev_embed> watchers for more info.\n\n=item ev_set_allocator (void *(*cb)(void *ptr, long size) throw ())\n\nSets the allocation function to use (the prototype is similar - the\nsemantics are identical to the C<realloc> C89/SuS/POSIX function). It is\nused to allocate and free memory (no surprises here). If it returns zero\nwhen memory needs to be allocated (C<size != 0>), the library might abort\nor take some potentially destructive action.\n\nSince some systems (at least OpenBSD and Darwin) fail to implement\ncorrect C<realloc> semantics, libev will use a wrapper around the system\nC<realloc> and C<free> functions by default.\n\nYou could override this function in high-availability programs to, say,\nfree some memory if it cannot allocate memory, to use a special allocator,\nor even to sleep a while and retry until some memory is available.\n\nExample: Replace the libev allocator with one that waits a bit and then\nretries (example requires a standards-compliant C<realloc>).\n\n   static void *\n   persistent_realloc (void *ptr, size_t size)\n   {\n     for (;;)\n       {\n         void *newptr = realloc (ptr, size);\n\n         if (newptr)\n           return newptr;\n\n         sleep (60);\n       }\n   }\n\n   ...\n   ev_set_allocator (persistent_realloc);\n\n=item ev_set_syserr_cb (void (*cb)(const char *msg) throw ())\n\nSet the callback function to call on a retryable system call error (such\nas failed select, poll, epoll_wait). The message is a printable string\nindicating the system call or subsystem causing the problem. If this\ncallback is set, then libev will expect it to remedy the situation, no\nmatter what, when it returns. That is, libev will generally retry the\nrequested operation, or, if the condition doesn't go away, do bad stuff\n(such as abort).\n\nExample: This is basically the same thing that libev does internally, too.\n\n   static void\n   fatal_error (const char *msg)\n   {\n     perror (msg);\n     abort ();\n   }\n\n   ...\n   ev_set_syserr_cb (fatal_error);\n\n=item ev_feed_signal (int signum)\n\nThis function can be used to \"simulate\" a signal receive. It is completely\nsafe to call this function at any time, from any context, including signal\nhandlers or random threads.\n\nIts main use is to customise signal handling in your process, especially\nin the presence of threads. For example, you could block signals\nby default in all threads (and specifying C<EVFLAG_NOSIGMASK> when\ncreating any loops), and in one thread, use C<sigwait> or any other\nmechanism to wait for signals, then \"deliver\" them to libev by calling\nC<ev_feed_signal>.\n\n=back\n\n=head1 FUNCTIONS CONTROLLING EVENT LOOPS\n\nAn event loop is described by a C<struct ev_loop *> (the C<struct> is\nI<not> optional in this case unless libev 3 compatibility is disabled, as\nlibev 3 had an C<ev_loop> function colliding with the struct name).\n\nThe library knows two types of such loops, the I<default> loop, which\nsupports child process events, and dynamically created event loops which\ndo not.\n\n=over 4\n\n=item struct ev_loop *ev_default_loop (unsigned int flags)\n\nThis returns the \"default\" event loop object, which is what you should\nnormally use when you just need \"the event loop\". Event loop objects and\nthe C<flags> parameter are described in more detail in the entry for\nC<ev_loop_new>.\n\nIf the default loop is already initialised then this function simply\nreturns it (and ignores the flags. If that is troubling you, check\nC<ev_backend ()> afterwards). Otherwise it will create it with the given\nflags, which should almost always be C<0>, unless the caller is also the\none calling C<ev_run> or otherwise qualifies as \"the main program\".\n\nIf you don't know what event loop to use, use the one returned from this\nfunction (or via the C<EV_DEFAULT> macro).\n\nNote that this function is I<not> thread-safe, so if you want to use it\nfrom multiple threads, you have to employ some kind of mutex (note also\nthat this case is unlikely, as loops cannot be shared easily between\nthreads anyway).\n\nThe default loop is the only loop that can handle C<ev_child> watchers,\nand to do this, it always registers a handler for C<SIGCHLD>. If this is\na problem for your application you can either create a dynamic loop with\nC<ev_loop_new> which doesn't do that, or you can simply overwrite the\nC<SIGCHLD> signal handler I<after> calling C<ev_default_init>.\n\nExample: This is the most typical usage.\n\n   if (!ev_default_loop (0))\n     fatal (\"could not initialise libev, bad $LIBEV_FLAGS in environment?\");\n\nExample: Restrict libev to the select and poll backends, and do not allow\nenvironment settings to be taken into account:\n\n   ev_default_loop (EVBACKEND_POLL | EVBACKEND_SELECT | EVFLAG_NOENV);\n\n=item struct ev_loop *ev_loop_new (unsigned int flags)\n\nThis will create and initialise a new event loop object. If the loop\ncould not be initialised, returns false.\n\nThis function is thread-safe, and one common way to use libev with\nthreads is indeed to create one loop per thread, and using the default\nloop in the \"main\" or \"initial\" thread.\n\nThe flags argument can be used to specify special behaviour or specific\nbackends to use, and is usually specified as C<0> (or C<EVFLAG_AUTO>).\n\nThe following flags are supported:\n\n=over 4\n\n=item C<EVFLAG_AUTO>\n\nThe default flags value. Use this if you have no clue (it's the right\nthing, believe me).\n\n=item C<EVFLAG_NOENV>\n\nIf this flag bit is or'ed into the flag value (or the program runs setuid\nor setgid) then libev will I<not> look at the environment variable\nC<LIBEV_FLAGS>. Otherwise (the default), this environment variable will\noverride the flags completely if it is found in the environment. This is\nuseful to try out specific backends to test their performance, to work\naround bugs, or to make libev threadsafe (accessing environment variables\ncannot be done in a threadsafe way, but usually it works if no other\nthread modifies them).\n\n=item C<EVFLAG_FORKCHECK>\n\nInstead of calling C<ev_loop_fork> manually after a fork, you can also\nmake libev check for a fork in each iteration by enabling this flag.\n\nThis works by calling C<getpid ()> on every iteration of the loop,\nand thus this might slow down your event loop if you do a lot of loop\niterations and little real work, but is usually not noticeable (on my\nGNU/Linux system for example, C<getpid> is actually a simple 5-insn sequence\nwithout a system call and thus I<very> fast, but my GNU/Linux system also has\nC<pthread_atfork> which is even faster).\n\nThe big advantage of this flag is that you can forget about fork (and\nforget about forgetting to tell libev about forking) when you use this\nflag.\n\nThis flag setting cannot be overridden or specified in the C<LIBEV_FLAGS>\nenvironment variable.\n\n=item C<EVFLAG_NOINOTIFY>\n\nWhen this flag is specified, then libev will not attempt to use the\nI<inotify> API for its C<ev_stat> watchers. Apart from debugging and\ntesting, this flag can be useful to conserve inotify file descriptors, as\notherwise each loop using C<ev_stat> watchers consumes one inotify handle.\n\n=item C<EVFLAG_SIGNALFD>\n\nWhen this flag is specified, then libev will attempt to use the\nI<signalfd> API for its C<ev_signal> (and C<ev_child>) watchers. This API\ndelivers signals synchronously, which makes it both faster and might make\nit possible to get the queued signal data. It can also simplify signal\nhandling with threads, as long as you properly block signals in your\nthreads that are not interested in handling them.\n\nSignalfd will not be used by default as this changes your signal mask, and\nthere are a lot of shoddy libraries and programs (glib's threadpool for\nexample) that can't properly initialise their signal masks.\n\n=item C<EVFLAG_NOSIGMASK>\n\nWhen this flag is specified, then libev will avoid to modify the signal\nmask. Specifically, this means you have to make sure signals are unblocked\nwhen you want to receive them.\n\nThis behaviour is useful when you want to do your own signal handling, or\nwant to handle signals only in specific threads and want to avoid libev\nunblocking the signals.\n\nIt's also required by POSIX in a threaded program, as libev calls\nC<sigprocmask>, whose behaviour is officially unspecified.\n\nThis flag's behaviour will become the default in future versions of libev.\n\n=item C<EVBACKEND_SELECT>  (value 1, portable select backend)\n\nThis is your standard select(2) backend. Not I<completely> standard, as\nlibev tries to roll its own fd_set with no limits on the number of fds,\nbut if that fails, expect a fairly low limit on the number of fds when\nusing this backend. It doesn't scale too well (O(highest_fd)), but its\nusually the fastest backend for a low number of (low-numbered :) fds.\n\nTo get good performance out of this backend you need a high amount of\nparallelism (most of the file descriptors should be busy). If you are\nwriting a server, you should C<accept ()> in a loop to accept as many\nconnections as possible during one iteration. You might also want to have\na look at C<ev_set_io_collect_interval ()> to increase the amount of\nreadiness notifications you get per iteration.\n\nThis backend maps C<EV_READ> to the C<readfds> set and C<EV_WRITE> to the\nC<writefds> set (and to work around Microsoft Windows bugs, also onto the\nC<exceptfds> set on that platform).\n\n=item C<EVBACKEND_POLL>    (value 2, poll backend, available everywhere except on windows)\n\nAnd this is your standard poll(2) backend. It's more complicated\nthan select, but handles sparse fds better and has no artificial\nlimit on the number of fds you can use (except it will slow down\nconsiderably with a lot of inactive fds). It scales similarly to select,\ni.e. O(total_fds). See the entry for C<EVBACKEND_SELECT>, above, for\nperformance tips.\n\nThis backend maps C<EV_READ> to C<POLLIN | POLLERR | POLLHUP>, and\nC<EV_WRITE> to C<POLLOUT | POLLERR | POLLHUP>.\n\n=item C<EVBACKEND_EPOLL>   (value 4, Linux)\n\nUse the linux-specific epoll(7) interface (for both pre- and post-2.6.9\nkernels).\n\nFor few fds, this backend is a bit little slower than poll and select, but\nit scales phenomenally better. While poll and select usually scale like\nO(total_fds) where total_fds is the total number of fds (or the highest\nfd), epoll scales either O(1) or O(active_fds).\n\nThe epoll mechanism deserves honorable mention as the most misdesigned\nof the more advanced event mechanisms: mere annoyances include silently\ndropping file descriptors, requiring a system call per change per file\ndescriptor (and unnecessary guessing of parameters), problems with dup,\nreturning before the timeout value, resulting in additional iterations\n(and only giving 5ms accuracy while select on the same platform gives\n0.1ms) and so on. The biggest issue is fork races, however - if a program\nforks then I<both> parent and child process have to recreate the epoll\nset, which can take considerable time (one syscall per file descriptor)\nand is of course hard to detect.\n\nEpoll is also notoriously buggy - embedding epoll fds I<should> work,\nbut of course I<doesn't>, and epoll just loves to report events for\ntotally I<different> file descriptors (even already closed ones, so\none cannot even remove them from the set) than registered in the set\n(especially on SMP systems). Libev tries to counter these spurious\nnotifications by employing an additional generation counter and comparing\nthat against the events to filter out spurious ones, recreating the set\nwhen required. Epoll also erroneously rounds down timeouts, but gives you\nno way to know when and by how much, so sometimes you have to busy-wait\nbecause epoll returns immediately despite a nonzero timeout. And last\nnot least, it also refuses to work with some file descriptors which work\nperfectly fine with C<select> (files, many character devices...).\n\nEpoll is truly the train wreck among event poll mechanisms, a frankenpoll,\ncobbled together in a hurry, no thought to design or interaction with\nothers. Oh, the pain, will it ever stop...\n\nWhile stopping, setting and starting an I/O watcher in the same iteration\nwill result in some caching, there is still a system call per such\nincident (because the same I<file descriptor> could point to a different\nI<file description> now), so its best to avoid that. Also, C<dup ()>'ed\nfile descriptors might not work very well if you register events for both\nfile descriptors.\n\nBest performance from this backend is achieved by not unregistering all\nwatchers for a file descriptor until it has been closed, if possible,\ni.e. keep at least one watcher active per fd at all times. Stopping and\nstarting a watcher (without re-setting it) also usually doesn't cause\nextra overhead. A fork can both result in spurious notifications as well\nas in libev having to destroy and recreate the epoll object, which can\ntake considerable time and thus should be avoided.\n\nAll this means that, in practice, C<EVBACKEND_SELECT> can be as fast or\nfaster than epoll for maybe up to a hundred file descriptors, depending on\nthe usage. So sad.\n\nWhile nominally embeddable in other event loops, this feature is broken in\nall kernel versions tested so far.\n\nThis backend maps C<EV_READ> and C<EV_WRITE> in the same way as\nC<EVBACKEND_POLL>.\n\n=item C<EVBACKEND_KQUEUE>  (value 8, most BSD clones)\n\nKqueue deserves special mention, as at the time of this writing, it\nwas broken on all BSDs except NetBSD (usually it doesn't work reliably\nwith anything but sockets and pipes, except on Darwin, where of course\nit's completely useless). Unlike epoll, however, whose brokenness\nis by design, these kqueue bugs can (and eventually will) be fixed\nwithout API changes to existing programs. For this reason it's not being\n\"auto-detected\" unless you explicitly specify it in the flags (i.e. using\nC<EVBACKEND_KQUEUE>) or libev was compiled on a known-to-be-good (-enough)\nsystem like NetBSD.\n\nYou still can embed kqueue into a normal poll or select backend and use it\nonly for sockets (after having made sure that sockets work with kqueue on\nthe target platform). See C<ev_embed> watchers for more info.\n\nIt scales in the same way as the epoll backend, but the interface to the\nkernel is more efficient (which says nothing about its actual speed, of\ncourse). While stopping, setting and starting an I/O watcher does never\ncause an extra system call as with C<EVBACKEND_EPOLL>, it still adds up to\ntwo event changes per incident. Support for C<fork ()> is very bad (you\nmight have to leak fd's on fork, but it's more sane than epoll) and it\ndrops fds silently in similarly hard-to-detect cases.\n\nThis backend usually performs well under most conditions.\n\nWhile nominally embeddable in other event loops, this doesn't work\neverywhere, so you might need to test for this. And since it is broken\nalmost everywhere, you should only use it when you have a lot of sockets\n(for which it usually works), by embedding it into another event loop\n(e.g. C<EVBACKEND_SELECT> or C<EVBACKEND_POLL> (but C<poll> is of course\nalso broken on OS X)) and, did I mention it, using it only for sockets.\n\nThis backend maps C<EV_READ> into an C<EVFILT_READ> kevent with\nC<NOTE_EOF>, and C<EV_WRITE> into an C<EVFILT_WRITE> kevent with\nC<NOTE_EOF>.\n\n=item C<EVBACKEND_DEVPOLL> (value 16, Solaris 8)\n\nThis is not implemented yet (and might never be, unless you send me an\nimplementation). According to reports, C</dev/poll> only supports sockets\nand is not embeddable, which would limit the usefulness of this backend\nimmensely.\n\n=item C<EVBACKEND_PORT>    (value 32, Solaris 10)\n\nThis uses the Solaris 10 event port mechanism. As with everything on Solaris,\nit's really slow, but it still scales very well (O(active_fds)).\n\nWhile this backend scales well, it requires one system call per active\nfile descriptor per loop iteration. For small and medium numbers of file\ndescriptors a \"slow\" C<EVBACKEND_SELECT> or C<EVBACKEND_POLL> backend\nmight perform better.\n\nOn the positive side, this backend actually performed fully to\nspecification in all tests and is fully embeddable, which is a rare feat\namong the OS-specific backends (I vastly prefer correctness over speed\nhacks).\n\nOn the negative side, the interface is I<bizarre> - so bizarre that\neven sun itself gets it wrong in their code examples: The event polling\nfunction sometimes returns events to the caller even though an error\noccurred, but with no indication whether it has done so or not (yes, it's\neven documented that way) - deadly for edge-triggered interfaces where you\nabsolutely have to know whether an event occurred or not because you have\nto re-arm the watcher.\n\nFortunately libev seems to be able to work around these idiocies.\n\nThis backend maps C<EV_READ> and C<EV_WRITE> in the same way as\nC<EVBACKEND_POLL>.\n\n=item C<EVBACKEND_ALL>\n\nTry all backends (even potentially broken ones that wouldn't be tried\nwith C<EVFLAG_AUTO>). Since this is a mask, you can do stuff such as\nC<EVBACKEND_ALL & ~EVBACKEND_KQUEUE>.\n\nIt is definitely not recommended to use this flag, use whatever\nC<ev_recommended_backends ()> returns, or simply do not specify a backend\nat all.\n\n=item C<EVBACKEND_MASK>\n\nNot a backend at all, but a mask to select all backend bits from a\nC<flags> value, in case you want to mask out any backends from a flags\nvalue (e.g. when modifying the C<LIBEV_FLAGS> environment variable).\n\n=back\n\nIf one or more of the backend flags are or'ed into the flags value,\nthen only these backends will be tried (in the reverse order as listed\nhere). If none are specified, all backends in C<ev_recommended_backends\n()> will be tried.\n\nExample: Try to create a event loop that uses epoll and nothing else.\n\n   struct ev_loop *epoller = ev_loop_new (EVBACKEND_EPOLL | EVFLAG_NOENV);\n   if (!epoller)\n     fatal (\"no epoll found here, maybe it hides under your chair\");\n\nExample: Use whatever libev has to offer, but make sure that kqueue is\nused if available.\n\n   struct ev_loop *loop = ev_loop_new (ev_recommended_backends () | EVBACKEND_KQUEUE);\n\n=item ev_loop_destroy (loop)\n\nDestroys an event loop object (frees all memory and kernel state\netc.). None of the active event watchers will be stopped in the normal\nsense, so e.g. C<ev_is_active> might still return true. It is your\nresponsibility to either stop all watchers cleanly yourself I<before>\ncalling this function, or cope with the fact afterwards (which is usually\nthe easiest thing, you can just ignore the watchers and/or C<free ()> them\nfor example).\n\nNote that certain global state, such as signal state (and installed signal\nhandlers), will not be freed by this function, and related watchers (such\nas signal and child watchers) would need to be stopped manually.\n\nThis function is normally used on loop objects allocated by\nC<ev_loop_new>, but it can also be used on the default loop returned by\nC<ev_default_loop>, in which case it is not thread-safe.\n\nNote that it is not advisable to call this function on the default loop\nexcept in the rare occasion where you really need to free its resources.\nIf you need dynamically allocated loops it is better to use C<ev_loop_new>\nand C<ev_loop_destroy>.\n\n=item ev_loop_fork (loop)\n\nThis function sets a flag that causes subsequent C<ev_run> iterations\nto reinitialise the kernel state for backends that have one. Despite\nthe name, you can call it anytime you are allowed to start or stop\nwatchers (except inside an C<ev_prepare> callback), but it makes most\nsense after forking, in the child process. You I<must> call it (or use\nC<EVFLAG_FORKCHECK>) in the child before resuming or calling C<ev_run>.\n\nAgain, you I<have> to call it on I<any> loop that you want to re-use after\na fork, I<even if you do not plan to use the loop in the parent>. This is\nbecause some kernel interfaces *cough* I<kqueue> *cough* do funny things\nduring fork.\n\nOn the other hand, you only need to call this function in the child\nprocess if and only if you want to use the event loop in the child. If\nyou just fork+exec or create a new loop in the child, you don't have to\ncall it at all (in fact, C<epoll> is so badly broken that it makes a\ndifference, but libev will usually detect this case on its own and do a\ncostly reset of the backend).\n\nThe function itself is quite fast and it's usually not a problem to call\nit just in case after a fork.\n\nExample: Automate calling C<ev_loop_fork> on the default loop when\nusing pthreads.\n\n   static void\n   post_fork_child (void)\n   {\n     ev_loop_fork (EV_DEFAULT);\n   }\n\n   ...\n   pthread_atfork (0, 0, post_fork_child);\n\n=item int ev_is_default_loop (loop)\n\nReturns true when the given loop is, in fact, the default loop, and false\notherwise.\n\n=item unsigned int ev_iteration (loop)\n\nReturns the current iteration count for the event loop, which is identical\nto the number of times libev did poll for new events. It starts at C<0>\nand happily wraps around with enough iterations.\n\nThis value can sometimes be useful as a generation counter of sorts (it\n\"ticks\" the number of loop iterations), as it roughly corresponds with\nC<ev_prepare> and C<ev_check> calls - and is incremented between the\nprepare and check phases.\n\n=item unsigned int ev_depth (loop)\n\nReturns the number of times C<ev_run> was entered minus the number of\ntimes C<ev_run> was exited normally, in other words, the recursion depth.\n\nOutside C<ev_run>, this number is zero. In a callback, this number is\nC<1>, unless C<ev_run> was invoked recursively (or from another thread),\nin which case it is higher.\n\nLeaving C<ev_run> abnormally (setjmp/longjmp, cancelling the thread,\nthrowing an exception etc.), doesn't count as \"exit\" - consider this\nas a hint to avoid such ungentleman-like behaviour unless it's really\nconvenient, in which case it is fully supported.\n\n=item unsigned int ev_backend (loop)\n\nReturns one of the C<EVBACKEND_*> flags indicating the event backend in\nuse.\n\n=item ev_tstamp ev_now (loop)\n\nReturns the current \"event loop time\", which is the time the event loop\nreceived events and started processing them. This timestamp does not\nchange as long as callbacks are being processed, and this is also the base\ntime used for relative timers. You can treat it as the timestamp of the\nevent occurring (or more correctly, libev finding out about it).\n\n=item ev_now_update (loop)\n\nEstablishes the current time by querying the kernel, updating the time\nreturned by C<ev_now ()> in the progress. This is a costly operation and\nis usually done automatically within C<ev_run ()>.\n\nThis function is rarely useful, but when some event callback runs for a\nvery long time without entering the event loop, updating libev's idea of\nthe current time is a good idea.\n\nSee also L</The special problem of time updates> in the C<ev_timer> section.\n\n=item ev_suspend (loop)\n\n=item ev_resume (loop)\n\nThese two functions suspend and resume an event loop, for use when the\nloop is not used for a while and timeouts should not be processed.\n\nA typical use case would be an interactive program such as a game:  When\nthe user presses C<^Z> to suspend the game and resumes it an hour later it\nwould be best to handle timeouts as if no time had actually passed while\nthe program was suspended. This can be achieved by calling C<ev_suspend>\nin your C<SIGTSTP> handler, sending yourself a C<SIGSTOP> and calling\nC<ev_resume> directly afterwards to resume timer processing.\n\nEffectively, all C<ev_timer> watchers will be delayed by the time spend\nbetween C<ev_suspend> and C<ev_resume>, and all C<ev_periodic> watchers\nwill be rescheduled (that is, they will lose any events that would have\noccurred while suspended).\n\nAfter calling C<ev_suspend> you B<must not> call I<any> function on the\ngiven loop other than C<ev_resume>, and you B<must not> call C<ev_resume>\nwithout a previous call to C<ev_suspend>.\n\nCalling C<ev_suspend>/C<ev_resume> has the side effect of updating the\nevent loop time (see C<ev_now_update>).\n\n=item bool ev_run (loop, int flags)\n\nFinally, this is it, the event handler. This function usually is called\nafter you have initialised all your watchers and you want to start\nhandling events. It will ask the operating system for any new events, call\nthe watcher callbacks, and then repeat the whole process indefinitely: This\nis why event loops are called I<loops>.\n\nIf the flags argument is specified as C<0>, it will keep handling events\nuntil either no event watchers are active anymore or C<ev_break> was\ncalled.\n\nThe return value is false if there are no more active watchers (which\nusually means \"all jobs done\" or \"deadlock\"), and true in all other cases\n(which usually means \" you should call C<ev_run> again\").\n\nPlease note that an explicit C<ev_break> is usually better than\nrelying on all watchers to be stopped when deciding when a program has\nfinished (especially in interactive programs), but having a program\nthat automatically loops as long as it has to and no longer by virtue\nof relying on its watchers stopping correctly, that is truly a thing of\nbeauty.\n\nThis function is I<mostly> exception-safe - you can break out of a\nC<ev_run> call by calling C<longjmp> in a callback, throwing a C++\nexception and so on. This does not decrement the C<ev_depth> value, nor\nwill it clear any outstanding C<EVBREAK_ONE> breaks.\n\nA flags value of C<EVRUN_NOWAIT> will look for new events, will handle\nthose events and any already outstanding ones, but will not wait and\nblock your process in case there are no events and will return after one\niteration of the loop. This is sometimes useful to poll and handle new\nevents while doing lengthy calculations, to keep the program responsive.\n\nA flags value of C<EVRUN_ONCE> will look for new events (waiting if\nnecessary) and will handle those and any already outstanding ones. It\nwill block your process until at least one new event arrives (which could\nbe an event internal to libev itself, so there is no guarantee that a\nuser-registered callback will be called), and will return after one\niteration of the loop.\n\nThis is useful if you are waiting for some external event in conjunction\nwith something not expressible using other libev watchers (i.e. \"roll your\nown C<ev_run>\"). However, a pair of C<ev_prepare>/C<ev_check> watchers is\nusually a better approach for this kind of thing.\n\nHere are the gory details of what C<ev_run> does (this is for your\nunderstanding, not a guarantee that things will work exactly like this in\nfuture versions):\n\n   - Increment loop depth.\n   - Reset the ev_break status.\n   - Before the first iteration, call any pending watchers.\n   LOOP:\n   - If EVFLAG_FORKCHECK was used, check for a fork.\n   - If a fork was detected (by any means), queue and call all fork watchers.\n   - Queue and call all prepare watchers.\n   - If ev_break was called, goto FINISH.\n   - If we have been forked, detach and recreate the kernel state\n     as to not disturb the other process.\n   - Update the kernel state with all outstanding changes.\n   - Update the \"event loop time\" (ev_now ()).\n   - Calculate for how long to sleep or block, if at all\n     (active idle watchers, EVRUN_NOWAIT or not having\n     any active watchers at all will result in not sleeping).\n   - Sleep if the I/O and timer collect interval say so.\n   - Increment loop iteration counter.\n   - Block the process, waiting for any events.\n   - Queue all outstanding I/O (fd) events.\n   - Update the \"event loop time\" (ev_now ()), and do time jump adjustments.\n   - Queue all expired timers.\n   - Queue all expired periodics.\n   - Queue all idle watchers with priority higher than that of pending events.\n   - Queue all check watchers.\n   - Call all queued watchers in reverse order (i.e. check watchers first).\n     Signals and child watchers are implemented as I/O watchers, and will\n     be handled here by queueing them when their watcher gets executed.\n   - If ev_break has been called, or EVRUN_ONCE or EVRUN_NOWAIT\n     were used, or there are no active watchers, goto FINISH, otherwise\n     continue with step LOOP.\n   FINISH:\n   - Reset the ev_break status iff it was EVBREAK_ONE.\n   - Decrement the loop depth.\n   - Return.\n\nExample: Queue some jobs and then loop until no events are outstanding\nanymore.\n\n   ... queue jobs here, make sure they register event watchers as long\n   ... as they still have work to do (even an idle watcher will do..)\n   ev_run (my_loop, 0);\n   ... jobs done or somebody called break. yeah!\n\n=item ev_break (loop, how)\n\nCan be used to make a call to C<ev_run> return early (but only after it\nhas processed all outstanding events). The C<how> argument must be either\nC<EVBREAK_ONE>, which will make the innermost C<ev_run> call return, or\nC<EVBREAK_ALL>, which will make all nested C<ev_run> calls return.\n\nThis \"break state\" will be cleared on the next call to C<ev_run>.\n\nIt is safe to call C<ev_break> from outside any C<ev_run> calls, too, in\nwhich case it will have no effect.\n\n=item ev_ref (loop)\n\n=item ev_unref (loop)\n\nRef/unref can be used to add or remove a reference count on the event\nloop: Every watcher keeps one reference, and as long as the reference\ncount is nonzero, C<ev_run> will not return on its own.\n\nThis is useful when you have a watcher that you never intend to\nunregister, but that nevertheless should not keep C<ev_run> from\nreturning. In such a case, call C<ev_unref> after starting, and C<ev_ref>\nbefore stopping it.\n\nAs an example, libev itself uses this for its internal signal pipe: It\nis not visible to the libev user and should not keep C<ev_run> from\nexiting if no event watchers registered by it are active. It is also an\nexcellent way to do this for generic recurring timers or from within\nthird-party libraries. Just remember to I<unref after start> and I<ref\nbefore stop> (but only if the watcher wasn't active before, or was active\nbefore, respectively. Note also that libev might stop watchers itself\n(e.g. non-repeating timers) in which case you have to C<ev_ref>\nin the callback).\n\nExample: Create a signal watcher, but keep it from keeping C<ev_run>\nrunning when nothing else is active.\n\n   ev_signal exitsig;\n   ev_signal_init (&exitsig, sig_cb, SIGINT);\n   ev_signal_start (loop, &exitsig);\n   ev_unref (loop);\n\nExample: For some weird reason, unregister the above signal handler again.\n\n   ev_ref (loop);\n   ev_signal_stop (loop, &exitsig);\n\n=item ev_set_io_collect_interval (loop, ev_tstamp interval)\n\n=item ev_set_timeout_collect_interval (loop, ev_tstamp interval)\n\nThese advanced functions influence the time that libev will spend waiting\nfor events. Both time intervals are by default C<0>, meaning that libev\nwill try to invoke timer/periodic callbacks and I/O callbacks with minimum\nlatency.\n\nSetting these to a higher value (the C<interval> I<must> be >= C<0>)\nallows libev to delay invocation of I/O and timer/periodic callbacks\nto increase efficiency of loop iterations (or to increase power-saving\nopportunities).\n\nThe idea is that sometimes your program runs just fast enough to handle\none (or very few) event(s) per loop iteration. While this makes the\nprogram responsive, it also wastes a lot of CPU time to poll for new\nevents, especially with backends like C<select ()> which have a high\noverhead for the actual polling but can deliver many events at once.\n\nBy setting a higher I<io collect interval> you allow libev to spend more\ntime collecting I/O events, so you can handle more events per iteration,\nat the cost of increasing latency. Timeouts (both C<ev_periodic> and\nC<ev_timer>) will not be affected. Setting this to a non-null value will\nintroduce an additional C<ev_sleep ()> call into most loop iterations. The\nsleep time ensures that libev will not poll for I/O events more often then\nonce per this interval, on average (as long as the host time resolution is\ngood enough).\n\nLikewise, by setting a higher I<timeout collect interval> you allow libev\nto spend more time collecting timeouts, at the expense of increased\nlatency/jitter/inexactness (the watcher callback will be called\nlater). C<ev_io> watchers will not be affected. Setting this to a non-null\nvalue will not introduce any overhead in libev.\n\nMany (busy) programs can usually benefit by setting the I/O collect\ninterval to a value near C<0.1> or so, which is often enough for\ninteractive servers (of course not for games), likewise for timeouts. It\nusually doesn't make much sense to set it to a lower value than C<0.01>,\nas this approaches the timing granularity of most systems. Note that if\nyou do transactions with the outside world and you can't increase the\nparallelity, then this setting will limit your transaction rate (if you\nneed to poll once per transaction and the I/O collect interval is 0.01,\nthen you can't do more than 100 transactions per second).\n\nSetting the I<timeout collect interval> can improve the opportunity for\nsaving power, as the program will \"bundle\" timer callback invocations that\nare \"near\" in time together, by delaying some, thus reducing the number of\ntimes the process sleeps and wakes up again. Another useful technique to\nreduce iterations/wake-ups is to use C<ev_periodic> watchers and make sure\nthey fire on, say, one-second boundaries only.\n\nExample: we only need 0.1s timeout granularity, and we wish not to poll\nmore often than 100 times per second:\n\n   ev_set_timeout_collect_interval (EV_DEFAULT_UC_ 0.1);\n   ev_set_io_collect_interval (EV_DEFAULT_UC_ 0.01);\n\n=item ev_invoke_pending (loop)\n\nThis call will simply invoke all pending watchers while resetting their\npending state. Normally, C<ev_run> does this automatically when required,\nbut when overriding the invoke callback this call comes handy. This\nfunction can be invoked from a watcher - this can be useful for example\nwhen you want to do some lengthy calculation and want to pass further\nevent handling to another thread (you still have to make sure only one\nthread executes within C<ev_invoke_pending> or C<ev_run> of course).\n\n=item int ev_pending_count (loop)\n\nReturns the number of pending watchers - zero indicates that no watchers\nare pending.\n\n=item ev_set_invoke_pending_cb (loop, void (*invoke_pending_cb)(EV_P))\n\nThis overrides the invoke pending functionality of the loop: Instead of\ninvoking all pending watchers when there are any, C<ev_run> will call\nthis callback instead. This is useful, for example, when you want to\ninvoke the actual watchers inside another context (another thread etc.).\n\nIf you want to reset the callback, use C<ev_invoke_pending> as new\ncallback.\n\n=item ev_set_loop_release_cb (loop, void (*release)(EV_P) throw (), void (*acquire)(EV_P) throw ())\n\nSometimes you want to share the same loop between multiple threads. This\ncan be done relatively simply by putting mutex_lock/unlock calls around\neach call to a libev function.\n\nHowever, C<ev_run> can run an indefinite time, so it is not feasible\nto wait for it to return. One way around this is to wake up the event\nloop via C<ev_break> and C<ev_async_send>, another way is to set these\nI<release> and I<acquire> callbacks on the loop.\n\nWhen set, then C<release> will be called just before the thread is\nsuspended waiting for new events, and C<acquire> is called just\nafterwards.\n\nIdeally, C<release> will just call your mutex_unlock function, and\nC<acquire> will just call the mutex_lock function again.\n\nWhile event loop modifications are allowed between invocations of\nC<release> and C<acquire> (that's their only purpose after all), no\nmodifications done will affect the event loop, i.e. adding watchers will\nhave no effect on the set of file descriptors being watched, or the time\nwaited. Use an C<ev_async> watcher to wake up C<ev_run> when you want it\nto take note of any changes you made.\n\nIn theory, threads executing C<ev_run> will be async-cancel safe between\ninvocations of C<release> and C<acquire>.\n\nSee also the locking example in the C<THREADS> section later in this\ndocument.\n\n=item ev_set_userdata (loop, void *data)\n\n=item void *ev_userdata (loop)\n\nSet and retrieve a single C<void *> associated with a loop. When\nC<ev_set_userdata> has never been called, then C<ev_userdata> returns\nC<0>.\n\nThese two functions can be used to associate arbitrary data with a loop,\nand are intended solely for the C<invoke_pending_cb>, C<release> and\nC<acquire> callbacks described above, but of course can be (ab-)used for\nany other purpose as well.\n\n=item ev_verify (loop)\n\nThis function only does something when C<EV_VERIFY> support has been\ncompiled in, which is the default for non-minimal builds. It tries to go\nthrough all internal structures and checks them for validity. If anything\nis found to be inconsistent, it will print an error message to standard\nerror and call C<abort ()>.\n\nThis can be used to catch bugs inside libev itself: under normal\ncircumstances, this function will never abort as of course libev keeps its\ndata structures consistent.\n\n=back\n\n\n=head1 ANATOMY OF A WATCHER\n\nIn the following description, uppercase C<TYPE> in names stands for the\nwatcher type, e.g. C<ev_TYPE_start> can mean C<ev_timer_start> for timer\nwatchers and C<ev_io_start> for I/O watchers.\n\nA watcher is an opaque structure that you allocate and register to record\nyour interest in some event. To make a concrete example, imagine you want\nto wait for STDIN to become readable, you would create an C<ev_io> watcher\nfor that:\n\n   static void my_cb (struct ev_loop *loop, ev_io *w, int revents)\n   {\n     ev_io_stop (w);\n     ev_break (loop, EVBREAK_ALL);\n   }\n\n   struct ev_loop *loop = ev_default_loop (0);\n\n   ev_io stdin_watcher;\n\n   ev_init (&stdin_watcher, my_cb);\n   ev_io_set (&stdin_watcher, STDIN_FILENO, EV_READ);\n   ev_io_start (loop, &stdin_watcher);\n\n   ev_run (loop, 0);\n\nAs you can see, you are responsible for allocating the memory for your\nwatcher structures (and it is I<usually> a bad idea to do this on the\nstack).\n\nEach watcher has an associated watcher structure (called C<struct ev_TYPE>\nor simply C<ev_TYPE>, as typedefs are provided for all watcher structs).\n\nEach watcher structure must be initialised by a call to C<ev_init (watcher\n*, callback)>, which expects a callback to be provided. This callback is\ninvoked each time the event occurs (or, in the case of I/O watchers, each\ntime the event loop detects that the file descriptor given is readable\nand/or writable).\n\nEach watcher type further has its own C<< ev_TYPE_set (watcher *, ...) >>\nmacro to configure it, with arguments specific to the watcher type. There\nis also a macro to combine initialisation and setting in one call: C<<\nev_TYPE_init (watcher *, callback, ...) >>.\n\nTo make the watcher actually watch out for events, you have to start it\nwith a watcher-specific start function (C<< ev_TYPE_start (loop, watcher\n*) >>), and you can stop watching for events at any time by calling the\ncorresponding stop function (C<< ev_TYPE_stop (loop, watcher *) >>.\n\nAs long as your watcher is active (has been started but not stopped) you\nmust not touch the values stored in it. Most specifically you must never\nreinitialise it or call its C<ev_TYPE_set> macro.\n\nEach and every callback receives the event loop pointer as first, the\nregistered watcher structure as second, and a bitset of received events as\nthird argument.\n\nThe received events usually include a single bit per event type received\n(you can receive multiple events at the same time). The possible bit masks\nare:\n\n=over 4\n\n=item C<EV_READ>\n\n=item C<EV_WRITE>\n\nThe file descriptor in the C<ev_io> watcher has become readable and/or\nwritable.\n\n=item C<EV_TIMER>\n\nThe C<ev_timer> watcher has timed out.\n\n=item C<EV_PERIODIC>\n\nThe C<ev_periodic> watcher has timed out.\n\n=item C<EV_SIGNAL>\n\nThe signal specified in the C<ev_signal> watcher has been received by a thread.\n\n=item C<EV_CHILD>\n\nThe pid specified in the C<ev_child> watcher has received a status change.\n\n=item C<EV_STAT>\n\nThe path specified in the C<ev_stat> watcher changed its attributes somehow.\n\n=item C<EV_IDLE>\n\nThe C<ev_idle> watcher has determined that you have nothing better to do.\n\n=item C<EV_PREPARE>\n\n=item C<EV_CHECK>\n\nAll C<ev_prepare> watchers are invoked just I<before> C<ev_run> starts to\ngather new events, and all C<ev_check> watchers are queued (not invoked)\njust after C<ev_run> has gathered them, but before it queues any callbacks\nfor any received events. That means C<ev_prepare> watchers are the last\nwatchers invoked before the event loop sleeps or polls for new events, and\nC<ev_check> watchers will be invoked before any other watchers of the same\nor lower priority within an event loop iteration.\n\nCallbacks of both watcher types can start and stop as many watchers as\nthey want, and all of them will be taken into account (for example, a\nC<ev_prepare> watcher might start an idle watcher to keep C<ev_run> from\nblocking).\n\n=item C<EV_EMBED>\n\nThe embedded event loop specified in the C<ev_embed> watcher needs attention.\n\n=item C<EV_FORK>\n\nThe event loop has been resumed in the child process after fork (see\nC<ev_fork>).\n\n=item C<EV_CLEANUP>\n\nThe event loop is about to be destroyed (see C<ev_cleanup>).\n\n=item C<EV_ASYNC>\n\nThe given async watcher has been asynchronously notified (see C<ev_async>).\n\n=item C<EV_CUSTOM>\n\nNot ever sent (or otherwise used) by libev itself, but can be freely used\nby libev users to signal watchers (e.g. via C<ev_feed_event>).\n\n=item C<EV_ERROR>\n\nAn unspecified error has occurred, the watcher has been stopped. This might\nhappen because the watcher could not be properly started because libev\nran out of memory, a file descriptor was found to be closed or any other\nproblem. Libev considers these application bugs.\n\nYou best act on it by reporting the problem and somehow coping with the\nwatcher being stopped. Note that well-written programs should not receive\nan error ever, so when your watcher receives it, this usually indicates a\nbug in your program.\n\nLibev will usually signal a few \"dummy\" events together with an error, for\nexample it might indicate that a fd is readable or writable, and if your\ncallbacks is well-written it can just attempt the operation and cope with\nthe error from read() or write(). This will not work in multi-threaded\nprograms, though, as the fd could already be closed and reused for another\nthing, so beware.\n\n=back\n\n=head2 GENERIC WATCHER FUNCTIONS\n\n=over 4\n\n=item C<ev_init> (ev_TYPE *watcher, callback)\n\nThis macro initialises the generic portion of a watcher. The contents\nof the watcher object can be arbitrary (so C<malloc> will do). Only\nthe generic parts of the watcher are initialised, you I<need> to call\nthe type-specific C<ev_TYPE_set> macro afterwards to initialise the\ntype-specific parts. For each type there is also a C<ev_TYPE_init> macro\nwhich rolls both calls into one.\n\nYou can reinitialise a watcher at any time as long as it has been stopped\n(or never started) and there are no pending events outstanding.\n\nThe callback is always of type C<void (*)(struct ev_loop *loop, ev_TYPE *watcher,\nint revents)>.\n\nExample: Initialise an C<ev_io> watcher in two steps.\n\n   ev_io w;\n   ev_init (&w, my_cb);\n   ev_io_set (&w, STDIN_FILENO, EV_READ);\n\n=item C<ev_TYPE_set> (ev_TYPE *watcher, [args])\n\nThis macro initialises the type-specific parts of a watcher. You need to\ncall C<ev_init> at least once before you call this macro, but you can\ncall C<ev_TYPE_set> any number of times. You must not, however, call this\nmacro on a watcher that is active (it can be pending, however, which is a\ndifference to the C<ev_init> macro).\n\nAlthough some watcher types do not have type-specific arguments\n(e.g. C<ev_prepare>) you still need to call its C<set> macro.\n\nSee C<ev_init>, above, for an example.\n\n=item C<ev_TYPE_init> (ev_TYPE *watcher, callback, [args])\n\nThis convenience macro rolls both C<ev_init> and C<ev_TYPE_set> macro\ncalls into a single call. This is the most convenient method to initialise\na watcher. The same limitations apply, of course.\n\nExample: Initialise and set an C<ev_io> watcher in one step.\n\n   ev_io_init (&w, my_cb, STDIN_FILENO, EV_READ);\n\n=item C<ev_TYPE_start> (loop, ev_TYPE *watcher)\n\nStarts (activates) the given watcher. Only active watchers will receive\nevents. If the watcher is already active nothing will happen.\n\nExample: Start the C<ev_io> watcher that is being abused as example in this\nwhole section.\n\n   ev_io_start (EV_DEFAULT_UC, &w);\n\n=item C<ev_TYPE_stop> (loop, ev_TYPE *watcher)\n\nStops the given watcher if active, and clears the pending status (whether\nthe watcher was active or not).\n\nIt is possible that stopped watchers are pending - for example,\nnon-repeating timers are being stopped when they become pending - but\ncalling C<ev_TYPE_stop> ensures that the watcher is neither active nor\npending. If you want to free or reuse the memory used by the watcher it is\ntherefore a good idea to always call its C<ev_TYPE_stop> function.\n\n=item bool ev_is_active (ev_TYPE *watcher)\n\nReturns a true value iff the watcher is active (i.e. it has been started\nand not yet been stopped). As long as a watcher is active you must not modify\nit.\n\n=item bool ev_is_pending (ev_TYPE *watcher)\n\nReturns a true value iff the watcher is pending, (i.e. it has outstanding\nevents but its callback has not yet been invoked). As long as a watcher\nis pending (but not active) you must not call an init function on it (but\nC<ev_TYPE_set> is safe), you must not change its priority, and you must\nmake sure the watcher is available to libev (e.g. you cannot C<free ()>\nit).\n\n=item callback ev_cb (ev_TYPE *watcher)\n\nReturns the callback currently set on the watcher.\n\n=item ev_set_cb (ev_TYPE *watcher, callback)\n\nChange the callback. You can change the callback at virtually any time\n(modulo threads).\n\n=item ev_set_priority (ev_TYPE *watcher, int priority)\n\n=item int ev_priority (ev_TYPE *watcher)\n\nSet and query the priority of the watcher. The priority is a small\ninteger between C<EV_MAXPRI> (default: C<2>) and C<EV_MINPRI>\n(default: C<-2>). Pending watchers with higher priority will be invoked\nbefore watchers with lower priority, but priority will not keep watchers\nfrom being executed (except for C<ev_idle> watchers).\n\nIf you need to suppress invocation when higher priority events are pending\nyou need to look at C<ev_idle> watchers, which provide this functionality.\n\nYou I<must not> change the priority of a watcher as long as it is active or\npending.\n\nSetting a priority outside the range of C<EV_MINPRI> to C<EV_MAXPRI> is\nfine, as long as you do not mind that the priority value you query might\nor might not have been clamped to the valid range.\n\nThe default priority used by watchers when no priority has been set is\nalways C<0>, which is supposed to not be too high and not be too low :).\n\nSee L</WATCHER PRIORITY MODELS>, below, for a more thorough treatment of\npriorities.\n\n=item ev_invoke (loop, ev_TYPE *watcher, int revents)\n\nInvoke the C<watcher> with the given C<loop> and C<revents>. Neither\nC<loop> nor C<revents> need to be valid as long as the watcher callback\ncan deal with that fact, as both are simply passed through to the\ncallback.\n\n=item int ev_clear_pending (loop, ev_TYPE *watcher)\n\nIf the watcher is pending, this function clears its pending status and\nreturns its C<revents> bitset (as if its callback was invoked). If the\nwatcher isn't pending it does nothing and returns C<0>.\n\nSometimes it can be useful to \"poll\" a watcher instead of waiting for its\ncallback to be invoked, which can be accomplished with this function.\n\n=item ev_feed_event (loop, ev_TYPE *watcher, int revents)\n\nFeeds the given event set into the event loop, as if the specified event\nhad happened for the specified watcher (which must be a pointer to an\ninitialised but not necessarily started event watcher). Obviously you must\nnot free the watcher as long as it has pending events.\n\nStopping the watcher, letting libev invoke it, or calling\nC<ev_clear_pending> will clear the pending event, even if the watcher was\nnot started in the first place.\n\nSee also C<ev_feed_fd_event> and C<ev_feed_signal_event> for related\nfunctions that do not need a watcher.\n\n=back\n\nSee also the L</ASSOCIATING CUSTOM DATA WITH A WATCHER> and L</BUILDING YOUR\nOWN COMPOSITE WATCHERS> idioms.\n\n=head2 WATCHER STATES\n\nThere are various watcher states mentioned throughout this manual -\nactive, pending and so on. In this section these states and the rules to\ntransition between them will be described in more detail - and while these\nrules might look complicated, they usually do \"the right thing\".\n\n=over 4\n\n=item initialised\n\nBefore a watcher can be registered with the event loop it has to be\ninitialised. This can be done with a call to C<ev_TYPE_init>, or calls to\nC<ev_init> followed by the watcher-specific C<ev_TYPE_set> function.\n\nIn this state it is simply some block of memory that is suitable for\nuse in an event loop. It can be moved around, freed, reused etc. at\nwill - as long as you either keep the memory contents intact, or call\nC<ev_TYPE_init> again.\n\n=item started/running/active\n\nOnce a watcher has been started with a call to C<ev_TYPE_start> it becomes\nproperty of the event loop, and is actively waiting for events. While in\nthis state it cannot be accessed (except in a few documented ways), moved,\nfreed or anything else - the only legal thing is to keep a pointer to it,\nand call libev functions on it that are documented to work on active watchers.\n\n=item pending\n\nIf a watcher is active and libev determines that an event it is interested\nin has occurred (such as a timer expiring), it will become pending. It will\nstay in this pending state until either it is stopped or its callback is\nabout to be invoked, so it is not normally pending inside the watcher\ncallback.\n\nThe watcher might or might not be active while it is pending (for example,\nan expired non-repeating timer can be pending but no longer active). If it\nis stopped, it can be freely accessed (e.g. by calling C<ev_TYPE_set>),\nbut it is still property of the event loop at this time, so cannot be\nmoved, freed or reused. And if it is active the rules described in the\nprevious item still apply.\n\nIt is also possible to feed an event on a watcher that is not active (e.g.\nvia C<ev_feed_event>), in which case it becomes pending without being\nactive.\n\n=item stopped\n\nA watcher can be stopped implicitly by libev (in which case it might still\nbe pending), or explicitly by calling its C<ev_TYPE_stop> function. The\nlatter will clear any pending state the watcher might be in, regardless\nof whether it was active or not, so stopping a watcher explicitly before\nfreeing it is often a good idea.\n\nWhile stopped (and not pending) the watcher is essentially in the\ninitialised state, that is, it can be reused, moved, modified in any way\nyou wish (but when you trash the memory block, you need to C<ev_TYPE_init>\nit again).\n\n=back\n\n=head2 WATCHER PRIORITY MODELS\n\nMany event loops support I<watcher priorities>, which are usually small\nintegers that influence the ordering of event callback invocation\nbetween watchers in some way, all else being equal.\n\nIn libev, Watcher priorities can be set using C<ev_set_priority>. See its\ndescription for the more technical details such as the actual priority\nrange.\n\nThere are two common ways how these these priorities are being interpreted\nby event loops:\n\nIn the more common lock-out model, higher priorities \"lock out\" invocation\nof lower priority watchers, which means as long as higher priority\nwatchers receive events, lower priority watchers are not being invoked.\n\nThe less common only-for-ordering model uses priorities solely to order\ncallback invocation within a single event loop iteration: Higher priority\nwatchers are invoked before lower priority ones, but they all get invoked\nbefore polling for new events.\n\nLibev uses the second (only-for-ordering) model for all its watchers\nexcept for idle watchers (which use the lock-out model).\n\nThe rationale behind this is that implementing the lock-out model for\nwatchers is not well supported by most kernel interfaces, and most event\nlibraries will just poll for the same events again and again as long as\ntheir callbacks have not been executed, which is very inefficient in the\ncommon case of one high-priority watcher locking out a mass of lower\npriority ones.\n\nStatic (ordering) priorities are most useful when you have two or more\nwatchers handling the same resource: a typical usage example is having an\nC<ev_io> watcher to receive data, and an associated C<ev_timer> to handle\ntimeouts. Under load, data might be received while the program handles\nother jobs, but since timers normally get invoked first, the timeout\nhandler will be executed before checking for data. In that case, giving\nthe timer a lower priority than the I/O watcher ensures that I/O will be\nhandled first even under adverse conditions (which is usually, but not\nalways, what you want).\n\nSince idle watchers use the \"lock-out\" model, meaning that idle watchers\nwill only be executed when no same or higher priority watchers have\nreceived events, they can be used to implement the \"lock-out\" model when\nrequired.\n\nFor example, to emulate how many other event libraries handle priorities,\nyou can associate an C<ev_idle> watcher to each such watcher, and in\nthe normal watcher callback, you just start the idle watcher. The real\nprocessing is done in the idle watcher callback. This causes libev to\ncontinuously poll and process kernel event data for the watcher, but when\nthe lock-out case is known to be rare (which in turn is rare :), this is\nworkable.\n\nUsually, however, the lock-out model implemented that way will perform\nmiserably under the type of load it was designed to handle. In that case,\nit might be preferable to stop the real watcher before starting the\nidle watcher, so the kernel will not have to process the event in case\nthe actual processing will be delayed for considerable time.\n\nHere is an example of an I/O watcher that should run at a strictly lower\npriority than the default, and which should only process data when no\nother events are pending:\n\n   ev_idle idle; // actual processing watcher\n   ev_io io;     // actual event watcher\n\n   static void\n   io_cb (EV_P_ ev_io *w, int revents)\n   {\n     // stop the I/O watcher, we received the event, but\n     // are not yet ready to handle it.\n     ev_io_stop (EV_A_ w);\n\n     // start the idle watcher to handle the actual event.\n     // it will not be executed as long as other watchers\n     // with the default priority are receiving events.\n     ev_idle_start (EV_A_ &idle);\n   }\n\n   static void\n   idle_cb (EV_P_ ev_idle *w, int revents)\n   {\n     // actual processing\n     read (STDIN_FILENO, ...);\n\n     // have to start the I/O watcher again, as\n     // we have handled the event\n     ev_io_start (EV_P_ &io);\n   }\n\n   // initialisation\n   ev_idle_init (&idle, idle_cb);\n   ev_io_init (&io, io_cb, STDIN_FILENO, EV_READ);\n   ev_io_start (EV_DEFAULT_ &io);\n\nIn the \"real\" world, it might also be beneficial to start a timer, so that\nlow-priority connections can not be locked out forever under load. This\nenables your program to keep a lower latency for important connections\nduring short periods of high load, while not completely locking out less\nimportant ones.\n\n\n=head1 WATCHER TYPES\n\nThis section describes each watcher in detail, but will not repeat\ninformation given in the last section. Any initialisation/set macros,\nfunctions and members specific to the watcher type are explained.\n\nMembers are additionally marked with either I<[read-only]>, meaning that,\nwhile the watcher is active, you can look at the member and expect some\nsensible content, but you must not modify it (you can modify it while the\nwatcher is stopped to your hearts content), or I<[read-write]>, which\nmeans you can expect it to have some sensible content while the watcher\nis active, but you can also modify it. Modifying it may not do something\nsensible or take immediate effect (or do anything at all), but libev will\nnot crash or malfunction in any way.\n\n\n=head2 C<ev_io> - is this file descriptor readable or writable?\n\nI/O watchers check whether a file descriptor is readable or writable\nin each iteration of the event loop, or, more precisely, when reading\nwould not block the process and writing would at least be able to write\nsome data. This behaviour is called level-triggering because you keep\nreceiving events as long as the condition persists. Remember you can stop\nthe watcher if you don't want to act on the event and neither want to\nreceive future events.\n\nIn general you can register as many read and/or write event watchers per\nfd as you want (as long as you don't confuse yourself). Setting all file\ndescriptors to non-blocking mode is also usually a good idea (but not\nrequired if you know what you are doing).\n\nAnother thing you have to watch out for is that it is quite easy to\nreceive \"spurious\" readiness notifications, that is, your callback might\nbe called with C<EV_READ> but a subsequent C<read>(2) will actually block\nbecause there is no data. It is very easy to get into this situation even\nwith a relatively standard program structure. Thus it is best to always\nuse non-blocking I/O: An extra C<read>(2) returning C<EAGAIN> is far\npreferable to a program hanging until some data arrives.\n\nIf you cannot run the fd in non-blocking mode (for example you should\nnot play around with an Xlib connection), then you have to separately\nre-test whether a file descriptor is really ready with a known-to-be good\ninterface such as poll (fortunately in the case of Xlib, it already does\nthis on its own, so its quite safe to use). Some people additionally\nuse C<SIGALRM> and an interval timer, just to be sure you won't block\nindefinitely.\n\nBut really, best use non-blocking mode.\n\n=head3 The special problem of disappearing file descriptors\n\nSome backends (e.g. kqueue, epoll) need to be told about closing a file\ndescriptor (either due to calling C<close> explicitly or any other means,\nsuch as C<dup2>). The reason is that you register interest in some file\ndescriptor, but when it goes away, the operating system will silently drop\nthis interest. If another file descriptor with the same number then is\nregistered with libev, there is no efficient way to see that this is, in\nfact, a different file descriptor.\n\nTo avoid having to explicitly tell libev about such cases, libev follows\nthe following policy:  Each time C<ev_io_set> is being called, libev\nwill assume that this is potentially a new file descriptor, otherwise\nit is assumed that the file descriptor stays the same. That means that\nyou I<have> to call C<ev_io_set> (or C<ev_io_init>) when you change the\ndescriptor even if the file descriptor number itself did not change.\n\nThis is how one would do it normally anyway, the important point is that\nthe libev application should not optimise around libev but should leave\noptimisations to libev.\n\n=head3 The special problem of dup'ed file descriptors\n\nSome backends (e.g. epoll), cannot register events for file descriptors,\nbut only events for the underlying file descriptions. That means when you\nhave C<dup ()>'ed file descriptors or weirder constellations, and register\nevents for them, only one file descriptor might actually receive events.\n\nThere is no workaround possible except not registering events\nfor potentially C<dup ()>'ed file descriptors, or to resort to\nC<EVBACKEND_SELECT> or C<EVBACKEND_POLL>.\n\n=head3 The special problem of files\n\nMany people try to use C<select> (or libev) on file descriptors\nrepresenting files, and expect it to become ready when their program\ndoesn't block on disk accesses (which can take a long time on their own).\n\nHowever, this cannot ever work in the \"expected\" way - you get a readiness\nnotification as soon as the kernel knows whether and how much data is\nthere, and in the case of open files, that's always the case, so you\nalways get a readiness notification instantly, and your read (or possibly\nwrite) will still block on the disk I/O.\n\nAnother way to view it is that in the case of sockets, pipes, character\ndevices and so on, there is another party (the sender) that delivers data\non its own, but in the case of files, there is no such thing: the disk\nwill not send data on its own, simply because it doesn't know what you\nwish to read - you would first have to request some data.\n\nSince files are typically not-so-well supported by advanced notification\nmechanism, libev tries hard to emulate POSIX behaviour with respect\nto files, even though you should not use it. The reason for this is\nconvenience: sometimes you want to watch STDIN or STDOUT, which is\nusually a tty, often a pipe, but also sometimes files or special devices\n(for example, C<epoll> on Linux works with F</dev/random> but not with\nF</dev/urandom>), and even though the file might better be served with\nasynchronous I/O instead of with non-blocking I/O, it is still useful when\nit \"just works\" instead of freezing.\n\nSo avoid file descriptors pointing to files when you know it (e.g. use\nlibeio), but use them when it is convenient, e.g. for STDIN/STDOUT, or\nwhen you rarely read from a file instead of from a socket, and want to\nreuse the same code path.\n\n=head3 The special problem of fork\n\nSome backends (epoll, kqueue) do not support C<fork ()> at all or exhibit\nuseless behaviour. Libev fully supports fork, but needs to be told about\nit in the child if you want to continue to use it in the child.\n\nTo support fork in your child processes, you have to call C<ev_loop_fork\n()> after a fork in the child, enable C<EVFLAG_FORKCHECK>, or resort to\nC<EVBACKEND_SELECT> or C<EVBACKEND_POLL>.\n\n=head3 The special problem of SIGPIPE\n\nWhile not really specific to libev, it is easy to forget about C<SIGPIPE>:\nwhen writing to a pipe whose other end has been closed, your program gets\nsent a SIGPIPE, which, by default, aborts your program. For most programs\nthis is sensible behaviour, for daemons, this is usually undesirable.\n\nSo when you encounter spurious, unexplained daemon exits, make sure you\nignore SIGPIPE (and maybe make sure you log the exit status of your daemon\nsomewhere, as that would have given you a big clue).\n\n=head3 The special problem of accept()ing when you can't\n\nMany implementations of the POSIX C<accept> function (for example,\nfound in post-2004 Linux) have the peculiar behaviour of not removing a\nconnection from the pending queue in all error cases.\n\nFor example, larger servers often run out of file descriptors (because\nof resource limits), causing C<accept> to fail with C<ENFILE> but not\nrejecting the connection, leading to libev signalling readiness on\nthe next iteration again (the connection still exists after all), and\ntypically causing the program to loop at 100% CPU usage.\n\nUnfortunately, the set of errors that cause this issue differs between\noperating systems, there is usually little the app can do to remedy the\nsituation, and no known thread-safe method of removing the connection to\ncope with overload is known (to me).\n\nOne of the easiest ways to handle this situation is to just ignore it\n- when the program encounters an overload, it will just loop until the\nsituation is over. While this is a form of busy waiting, no OS offers an\nevent-based way to handle this situation, so it's the best one can do.\n\nA better way to handle the situation is to log any errors other than\nC<EAGAIN> and C<EWOULDBLOCK>, making sure not to flood the log with such\nmessages, and continue as usual, which at least gives the user an idea of\nwhat could be wrong (\"raise the ulimit!\"). For extra points one could stop\nthe C<ev_io> watcher on the listening fd \"for a while\", which reduces CPU\nusage.\n\nIf your program is single-threaded, then you could also keep a dummy file\ndescriptor for overload situations (e.g. by opening F</dev/null>), and\nwhen you run into C<ENFILE> or C<EMFILE>, close it, run C<accept>,\nclose that fd, and create a new dummy fd. This will gracefully refuse\nclients under typical overload conditions.\n\nThe last way to handle it is to simply log the error and C<exit>, as\nis often done with C<malloc> failures, but this results in an easy\nopportunity for a DoS attack.\n\n=head3 Watcher-Specific Functions\n\n=over 4\n\n=item ev_io_init (ev_io *, callback, int fd, int events)\n\n=item ev_io_set (ev_io *, int fd, int events)\n\nConfigures an C<ev_io> watcher. The C<fd> is the file descriptor to\nreceive events for and C<events> is either C<EV_READ>, C<EV_WRITE> or\nC<EV_READ | EV_WRITE>, to express the desire to receive the given events.\n\n=item int fd [read-only]\n\nThe file descriptor being watched.\n\n=item int events [read-only]\n\nThe events being watched.\n\n=back\n\n=head3 Examples\n\nExample: Call C<stdin_readable_cb> when STDIN_FILENO has become, well\nreadable, but only once. Since it is likely line-buffered, you could\nattempt to read a whole line in the callback.\n\n   static void\n   stdin_readable_cb (struct ev_loop *loop, ev_io *w, int revents)\n   {\n      ev_io_stop (loop, w);\n     .. read from stdin here (or from w->fd) and handle any I/O errors\n   }\n\n   ...\n   struct ev_loop *loop = ev_default_init (0);\n   ev_io stdin_readable;\n   ev_io_init (&stdin_readable, stdin_readable_cb, STDIN_FILENO, EV_READ);\n   ev_io_start (loop, &stdin_readable);\n   ev_run (loop, 0);\n\n\n=head2 C<ev_timer> - relative and optionally repeating timeouts\n\nTimer watchers are simple relative timers that generate an event after a\ngiven time, and optionally repeating in regular intervals after that.\n\nThe timers are based on real time, that is, if you register an event that\ntimes out after an hour and you reset your system clock to January last\nyear, it will still time out after (roughly) one hour. \"Roughly\" because\ndetecting time jumps is hard, and some inaccuracies are unavoidable (the\nmonotonic clock option helps a lot here).\n\nThe callback is guaranteed to be invoked only I<after> its timeout has\npassed (not I<at>, so on systems with very low-resolution clocks this\nmight introduce a small delay, see \"the special problem of being too\nearly\", below). If multiple timers become ready during the same loop\niteration then the ones with earlier time-out values are invoked before\nones of the same priority with later time-out values (but this is no\nlonger true when a callback calls C<ev_run> recursively).\n\n=head3 Be smart about timeouts\n\nMany real-world problems involve some kind of timeout, usually for error\nrecovery. A typical example is an HTTP request - if the other side hangs,\nyou want to raise some error after a while.\n\nWhat follows are some ways to handle this problem, from obvious and\ninefficient to smart and efficient.\n\nIn the following, a 60 second activity timeout is assumed - a timeout that\ngets reset to 60 seconds each time there is activity (e.g. each time some\ndata or other life sign was received).\n\n=over 4\n\n=item 1. Use a timer and stop, reinitialise and start it on activity.\n\nThis is the most obvious, but not the most simple way: In the beginning,\nstart the watcher:\n\n   ev_timer_init (timer, callback, 60., 0.);\n   ev_timer_start (loop, timer);\n\nThen, each time there is some activity, C<ev_timer_stop> it, initialise it\nand start it again:\n\n   ev_timer_stop (loop, timer);\n   ev_timer_set (timer, 60., 0.);\n   ev_timer_start (loop, timer);\n\nThis is relatively simple to implement, but means that each time there is\nsome activity, libev will first have to remove the timer from its internal\ndata structure and then add it again. Libev tries to be fast, but it's\nstill not a constant-time operation.\n\n=item 2. Use a timer and re-start it with C<ev_timer_again> inactivity.\n\nThis is the easiest way, and involves using C<ev_timer_again> instead of\nC<ev_timer_start>.\n\nTo implement this, configure an C<ev_timer> with a C<repeat> value\nof C<60> and then call C<ev_timer_again> at start and each time you\nsuccessfully read or write some data. If you go into an idle state where\nyou do not expect data to travel on the socket, you can C<ev_timer_stop>\nthe timer, and C<ev_timer_again> will automatically restart it if need be.\n\nThat means you can ignore both the C<ev_timer_start> function and the\nC<after> argument to C<ev_timer_set>, and only ever use the C<repeat>\nmember and C<ev_timer_again>.\n\nAt start:\n\n   ev_init (timer, callback);\n   timer->repeat = 60.;\n   ev_timer_again (loop, timer);\n\nEach time there is some activity:\n\n   ev_timer_again (loop, timer);\n\nIt is even possible to change the time-out on the fly, regardless of\nwhether the watcher is active or not:\n\n   timer->repeat = 30.;\n   ev_timer_again (loop, timer);\n\nThis is slightly more efficient then stopping/starting the timer each time\nyou want to modify its timeout value, as libev does not have to completely\nremove and re-insert the timer from/into its internal data structure.\n\nIt is, however, even simpler than the \"obvious\" way to do it.\n\n=item 3. Let the timer time out, but then re-arm it as required.\n\nThis method is more tricky, but usually most efficient: Most timeouts are\nrelatively long compared to the intervals between other activity - in\nour example, within 60 seconds, there are usually many I/O events with\nassociated activity resets.\n\nIn this case, it would be more efficient to leave the C<ev_timer> alone,\nbut remember the time of last activity, and check for a real timeout only\nwithin the callback:\n\n   ev_tstamp timeout = 60.;\n   ev_tstamp last_activity; // time of last activity\n   ev_timer timer;\n\n   static void\n   callback (EV_P_ ev_timer *w, int revents)\n   {\n     // calculate when the timeout would happen\n     ev_tstamp after = last_activity - ev_now (EV_A) + timeout;\n\n     // if negative, it means we the timeout already occurred\n     if (after < 0.)\n       {\n         // timeout occurred, take action\n       }\n     else\n       {\n         // callback was invoked, but there was some recent \n         // activity. simply restart the timer to time out\n         // after \"after\" seconds, which is the earliest time\n         // the timeout can occur.\n         ev_timer_set (w, after, 0.);\n         ev_timer_start (EV_A_ w);\n       }\n   }\n\nTo summarise the callback: first calculate in how many seconds the\ntimeout will occur (by calculating the absolute time when it would occur,\nC<last_activity + timeout>, and subtracting the current time, C<ev_now\n(EV_A)> from that).\n\nIf this value is negative, then we are already past the timeout, i.e. we\ntimed out, and need to do whatever is needed in this case.\n\nOtherwise, we now the earliest time at which the timeout would trigger,\nand simply start the timer with this timeout value.\n\nIn other words, each time the callback is invoked it will check whether\nthe timeout occurred. If not, it will simply reschedule itself to check\nagain at the earliest time it could time out. Rinse. Repeat.\n\nThis scheme causes more callback invocations (about one every 60 seconds\nminus half the average time between activity), but virtually no calls to\nlibev to change the timeout.\n\nTo start the machinery, simply initialise the watcher and set\nC<last_activity> to the current time (meaning there was some activity just\nnow), then call the callback, which will \"do the right thing\" and start\nthe timer:\n\n   last_activity = ev_now (EV_A);\n   ev_init (&timer, callback);\n   callback (EV_A_ &timer, 0);\n\nWhen there is some activity, simply store the current time in\nC<last_activity>, no libev calls at all:\n\n   if (activity detected)\n     last_activity = ev_now (EV_A);\n\nWhen your timeout value changes, then the timeout can be changed by simply\nproviding a new value, stopping the timer and calling the callback, which\nwill again do the right thing (for example, time out immediately :).\n\n   timeout = new_value;\n   ev_timer_stop (EV_A_ &timer);\n   callback (EV_A_ &timer, 0);\n\nThis technique is slightly more complex, but in most cases where the\ntime-out is unlikely to be triggered, much more efficient.\n\n=item 4. Wee, just use a double-linked list for your timeouts.\n\nIf there is not one request, but many thousands (millions...), all\nemploying some kind of timeout with the same timeout value, then one can\ndo even better:\n\nWhen starting the timeout, calculate the timeout value and put the timeout\nat the I<end> of the list.\n\nThen use an C<ev_timer> to fire when the timeout at the I<beginning> of\nthe list is expected to fire (for example, using the technique #3).\n\nWhen there is some activity, remove the timer from the list, recalculate\nthe timeout, append it to the end of the list again, and make sure to\nupdate the C<ev_timer> if it was taken from the beginning of the list.\n\nThis way, one can manage an unlimited number of timeouts in O(1) time for\nstarting, stopping and updating the timers, at the expense of a major\ncomplication, and having to use a constant timeout. The constant timeout\nensures that the list stays sorted.\n\n=back\n\nSo which method the best?\n\nMethod #2 is a simple no-brain-required solution that is adequate in most\nsituations. Method #3 requires a bit more thinking, but handles many cases\nbetter, and isn't very complicated either. In most case, choosing either\none is fine, with #3 being better in typical situations.\n\nMethod #1 is almost always a bad idea, and buys you nothing. Method #4 is\nrather complicated, but extremely efficient, something that really pays\noff after the first million or so of active timers, i.e. it's usually\noverkill :)\n\n=head3 The special problem of being too early\n\nIf you ask a timer to call your callback after three seconds, then\nyou expect it to be invoked after three seconds - but of course, this\ncannot be guaranteed to infinite precision. Less obviously, it cannot be\nguaranteed to any precision by libev - imagine somebody suspending the\nprocess with a STOP signal for a few hours for example.\n\nSo, libev tries to invoke your callback as soon as possible I<after> the\ndelay has occurred, but cannot guarantee this.\n\nA less obvious failure mode is calling your callback too early: many event\nloops compare timestamps with a \"elapsed delay >= requested delay\", but\nthis can cause your callback to be invoked much earlier than you would\nexpect.\n\nTo see why, imagine a system with a clock that only offers full second\nresolution (think windows if you can't come up with a broken enough OS\nyourself). If you schedule a one-second timer at the time 500.9, then the\nevent loop will schedule your timeout to elapse at a system time of 500\n(500.9 truncated to the resolution) + 1, or 501.\n\nIf an event library looks at the timeout 0.1s later, it will see \"501 >=\n501\" and invoke the callback 0.1s after it was started, even though a\none-second delay was requested - this is being \"too early\", despite best\nintentions.\n\nThis is the reason why libev will never invoke the callback if the elapsed\ndelay equals the requested delay, but only when the elapsed delay is\nlarger than the requested delay. In the example above, libev would only invoke\nthe callback at system time 502, or 1.1s after the timer was started.\n\nSo, while libev cannot guarantee that your callback will be invoked\nexactly when requested, it I<can> and I<does> guarantee that the requested\ndelay has actually elapsed, or in other words, it always errs on the \"too\nlate\" side of things.\n\n=head3 The special problem of time updates\n\nEstablishing the current time is a costly operation (it usually takes\nat least one system call): EV therefore updates its idea of the current\ntime only before and after C<ev_run> collects new events, which causes a\ngrowing difference between C<ev_now ()> and C<ev_time ()> when handling\nlots of events in one iteration.\n\nThe relative timeouts are calculated relative to the C<ev_now ()>\ntime. This is usually the right thing as this timestamp refers to the time\nof the event triggering whatever timeout you are modifying/starting. If\nyou suspect event processing to be delayed and you I<need> to base the\ntimeout on the current time, use something like the following to adjust\nfor it:\n\n   ev_timer_set (&timer, after + (ev_time () - ev_now ()), 0.);\n\nIf the event loop is suspended for a long time, you can also force an\nupdate of the time returned by C<ev_now ()> by calling C<ev_now_update\n()>, although that will push the event time of all outstanding events\nfurther into the future.\n\n=head3 The special problem of unsynchronised clocks\n\nModern systems have a variety of clocks - libev itself uses the normal\n\"wall clock\" clock and, if available, the monotonic clock (to avoid time\njumps).\n\nNeither of these clocks is synchronised with each other or any other clock\non the system, so C<ev_time ()> might return a considerably different time\nthan C<gettimeofday ()> or C<time ()>. On a GNU/Linux system, for example,\na call to C<gettimeofday> might return a second count that is one higher\nthan a directly following call to C<time>.\n\nThe moral of this is to only compare libev-related timestamps with\nC<ev_time ()> and C<ev_now ()>, at least if you want better precision than\na second or so.\n\nOne more problem arises due to this lack of synchronisation: if libev uses\nthe system monotonic clock and you compare timestamps from C<ev_time>\nor C<ev_now> from when you started your timer and when your callback is\ninvoked, you will find that sometimes the callback is a bit \"early\".\n\nThis is because C<ev_timer>s work in real time, not wall clock time, so\nlibev makes sure your callback is not invoked before the delay happened,\nI<measured according to the real time>, not the system clock.\n\nIf your timeouts are based on a physical timescale (e.g. \"time out this\nconnection after 100 seconds\") then this shouldn't bother you as it is\nexactly the right behaviour.\n\nIf you want to compare wall clock/system timestamps to your timers, then\nyou need to use C<ev_periodic>s, as these are based on the wall clock\ntime, where your comparisons will always generate correct results.\n\n=head3 The special problems of suspended animation\n\nWhen you leave the server world it is quite customary to hit machines that\ncan suspend/hibernate - what happens to the clocks during such a suspend?\n\nSome quick tests made with a Linux 2.6.28 indicate that a suspend freezes\nall processes, while the clocks (C<times>, C<CLOCK_MONOTONIC>) continue\nto run until the system is suspended, but they will not advance while the\nsystem is suspended. That means, on resume, it will be as if the program\nwas frozen for a few seconds, but the suspend time will not be counted\ntowards C<ev_timer> when a monotonic clock source is used. The real time\nclock advanced as expected, but if it is used as sole clocksource, then a\nlong suspend would be detected as a time jump by libev, and timers would\nbe adjusted accordingly.\n\nI would not be surprised to see different behaviour in different between\noperating systems, OS versions or even different hardware.\n\nThe other form of suspend (job control, or sending a SIGSTOP) will see a\ntime jump in the monotonic clocks and the realtime clock. If the program\nis suspended for a very long time, and monotonic clock sources are in use,\nthen you can expect C<ev_timer>s to expire as the full suspension time\nwill be counted towards the timers. When no monotonic clock source is in\nuse, then libev will again assume a timejump and adjust accordingly.\n\nIt might be beneficial for this latter case to call C<ev_suspend>\nand C<ev_resume> in code that handles C<SIGTSTP>, to at least get\ndeterministic behaviour in this case (you can do nothing against\nC<SIGSTOP>).\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_timer_init (ev_timer *, callback, ev_tstamp after, ev_tstamp repeat)\n\n=item ev_timer_set (ev_timer *, ev_tstamp after, ev_tstamp repeat)\n\nConfigure the timer to trigger after C<after> seconds. If C<repeat>\nis C<0.>, then it will automatically be stopped once the timeout is\nreached. If it is positive, then the timer will automatically be\nconfigured to trigger again C<repeat> seconds later, again, and again,\nuntil stopped manually.\n\nThe timer itself will do a best-effort at avoiding drift, that is, if\nyou configure a timer to trigger every 10 seconds, then it will normally\ntrigger at exactly 10 second intervals. If, however, your program cannot\nkeep up with the timer (because it takes longer than those 10 seconds to\ndo stuff) the timer will not fire more than once per event loop iteration.\n\n=item ev_timer_again (loop, ev_timer *)\n\nThis will act as if the timer timed out, and restarts it again if it is\nrepeating. It basically works like calling C<ev_timer_stop>, updating the\ntimeout to the C<repeat> value and calling C<ev_timer_start>.\n\nThe exact semantics are as in the following rules, all of which will be\napplied to the watcher:\n\n=over 4\n\n=item If the timer is pending, the pending status is always cleared.\n\n=item If the timer is started but non-repeating, stop it (as if it timed\nout, without invoking it).\n\n=item If the timer is repeating, make the C<repeat> value the new timeout\nand start the timer, if necessary.\n\n=back\n\nThis sounds a bit complicated, see L</Be smart about timeouts>, above, for a\nusage example.\n\n=item ev_tstamp ev_timer_remaining (loop, ev_timer *)\n\nReturns the remaining time until a timer fires. If the timer is active,\nthen this time is relative to the current event loop time, otherwise it's\nthe timeout value currently configured.\n\nThat is, after an C<ev_timer_set (w, 5, 7)>, C<ev_timer_remaining> returns\nC<5>. When the timer is started and one second passes, C<ev_timer_remaining>\nwill return C<4>. When the timer expires and is restarted, it will return\nroughly C<7> (likely slightly less as callback invocation takes some time,\ntoo), and so on.\n\n=item ev_tstamp repeat [read-write]\n\nThe current C<repeat> value. Will be used each time the watcher times out\nor C<ev_timer_again> is called, and determines the next timeout (if any),\nwhich is also when any modifications are taken into account.\n\n=back\n\n=head3 Examples\n\nExample: Create a timer that fires after 60 seconds.\n\n   static void\n   one_minute_cb (struct ev_loop *loop, ev_timer *w, int revents)\n   {\n     .. one minute over, w is actually stopped right here\n   }\n\n   ev_timer mytimer;\n   ev_timer_init (&mytimer, one_minute_cb, 60., 0.);\n   ev_timer_start (loop, &mytimer);\n\nExample: Create a timeout timer that times out after 10 seconds of\ninactivity.\n\n   static void\n   timeout_cb (struct ev_loop *loop, ev_timer *w, int revents)\n   {\n     .. ten seconds without any activity\n   }\n\n   ev_timer mytimer;\n   ev_timer_init (&mytimer, timeout_cb, 0., 10.); /* note, only repeat used */\n   ev_timer_again (&mytimer); /* start timer */\n   ev_run (loop, 0);\n\n   // and in some piece of code that gets executed on any \"activity\":\n   // reset the timeout to start ticking again at 10 seconds\n   ev_timer_again (&mytimer);\n\n\n=head2 C<ev_periodic> - to cron or not to cron?\n\nPeriodic watchers are also timers of a kind, but they are very versatile\n(and unfortunately a bit complex).\n\nUnlike C<ev_timer>, periodic watchers are not based on real time (or\nrelative time, the physical time that passes) but on wall clock time\n(absolute time, the thing you can read on your calender or clock). The\ndifference is that wall clock time can run faster or slower than real\ntime, and time jumps are not uncommon (e.g. when you adjust your\nwrist-watch).\n\nYou can tell a periodic watcher to trigger after some specific point\nin time: for example, if you tell a periodic watcher to trigger \"in 10\nseconds\" (by specifying e.g. C<ev_now () + 10.>, that is, an absolute time\nnot a delay) and then reset your system clock to January of the previous\nyear, then it will take a year or more to trigger the event (unlike an\nC<ev_timer>, which would still trigger roughly 10 seconds after starting\nit, as it uses a relative timeout).\n\nC<ev_periodic> watchers can also be used to implement vastly more complex\ntimers, such as triggering an event on each \"midnight, local time\", or\nother complicated rules. This cannot be done with C<ev_timer> watchers, as\nthose cannot react to time jumps.\n\nAs with timers, the callback is guaranteed to be invoked only when the\npoint in time where it is supposed to trigger has passed. If multiple\ntimers become ready during the same loop iteration then the ones with\nearlier time-out values are invoked before ones with later time-out values\n(but this is no longer true when a callback calls C<ev_run> recursively).\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_periodic_init (ev_periodic *, callback, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\n\n=item ev_periodic_set (ev_periodic *, ev_tstamp offset, ev_tstamp interval, reschedule_cb)\n\nLots of arguments, let's sort it out... There are basically three modes of\noperation, and we will explain them from simplest to most complex:\n\n=over 4\n\n=item * absolute timer (offset = absolute time, interval = 0, reschedule_cb = 0)\n\nIn this configuration the watcher triggers an event after the wall clock\ntime C<offset> has passed. It will not repeat and will not adjust when a\ntime jump occurs, that is, if it is to be run at January 1st 2011 then it\nwill be stopped and invoked when the system clock reaches or surpasses\nthis point in time.\n\n=item * repeating interval timer (offset = offset within interval, interval > 0, reschedule_cb = 0)\n\nIn this mode the watcher will always be scheduled to time out at the next\nC<offset + N * interval> time (for some integer N, which can also be\nnegative) and then repeat, regardless of any time jumps. The C<offset>\nargument is merely an offset into the C<interval> periods.\n\nThis can be used to create timers that do not drift with respect to the\nsystem clock, for example, here is an C<ev_periodic> that triggers each\nhour, on the hour (with respect to UTC):\n\n   ev_periodic_set (&periodic, 0., 3600., 0);\n\nThis doesn't mean there will always be 3600 seconds in between triggers,\nbut only that the callback will be called when the system time shows a\nfull hour (UTC), or more correctly, when the system time is evenly divisible\nby 3600.\n\nAnother way to think about it (for the mathematically inclined) is that\nC<ev_periodic> will try to run the callback in this mode at the next possible\ntime where C<time = offset (mod interval)>, regardless of any time jumps.\n\nThe C<interval> I<MUST> be positive, and for numerical stability, the\ninterval value should be higher than C<1/8192> (which is around 100\nmicroseconds) and C<offset> should be higher than C<0> and should have\nat most a similar magnitude as the current time (say, within a factor of\nten). Typical values for offset are, in fact, C<0> or something between\nC<0> and C<interval>, which is also the recommended range.\n\nNote also that there is an upper limit to how often a timer can fire (CPU\nspeed for example), so if C<interval> is very small then timing stability\nwill of course deteriorate. Libev itself tries to be exact to be about one\nmillisecond (if the OS supports it and the machine is fast enough).\n\n=item * manual reschedule mode (offset ignored, interval ignored, reschedule_cb = callback)\n\nIn this mode the values for C<interval> and C<offset> are both being\nignored. Instead, each time the periodic watcher gets scheduled, the\nreschedule callback will be called with the watcher as first, and the\ncurrent time as second argument.\n\nNOTE: I<This callback MUST NOT stop or destroy any periodic watcher, ever,\nor make ANY other event loop modifications whatsoever, unless explicitly\nallowed by documentation here>.\n\nIf you need to stop it, return C<now + 1e30> (or so, fudge fudge) and stop\nit afterwards (e.g. by starting an C<ev_prepare> watcher, which is the\nonly event loop modification you are allowed to do).\n\nThe callback prototype is C<ev_tstamp (*reschedule_cb)(ev_periodic\n*w, ev_tstamp now)>, e.g.:\n\n   static ev_tstamp\n   my_rescheduler (ev_periodic *w, ev_tstamp now)\n   {\n     return now + 60.;\n   }\n\nIt must return the next time to trigger, based on the passed time value\n(that is, the lowest time value larger than to the second argument). It\nwill usually be called just before the callback will be triggered, but\nmight be called at other times, too.\n\nNOTE: I<< This callback must always return a time that is higher than or\nequal to the passed C<now> value >>.\n\nThis can be used to create very complex timers, such as a timer that\ntriggers on \"next midnight, local time\". To do this, you would calculate the\nnext midnight after C<now> and return the timestamp value for this. How\nyou do this is, again, up to you (but it is not trivial, which is the main\nreason I omitted it as an example).\n\n=back\n\n=item ev_periodic_again (loop, ev_periodic *)\n\nSimply stops and restarts the periodic watcher again. This is only useful\nwhen you changed some parameters or the reschedule callback would return\na different time than the last time it was called (e.g. in a crond like\nprogram when the crontabs have changed).\n\n=item ev_tstamp ev_periodic_at (ev_periodic *)\n\nWhen active, returns the absolute time that the watcher is supposed\nto trigger next. This is not the same as the C<offset> argument to\nC<ev_periodic_set>, but indeed works even in interval and manual\nrescheduling modes.\n\n=item ev_tstamp offset [read-write]\n\nWhen repeating, this contains the offset value, otherwise this is the\nabsolute point in time (the C<offset> value passed to C<ev_periodic_set>,\nalthough libev might modify this value for better numerical stability).\n\nCan be modified any time, but changes only take effect when the periodic\ntimer fires or C<ev_periodic_again> is being called.\n\n=item ev_tstamp interval [read-write]\n\nThe current interval value. Can be modified any time, but changes only\ntake effect when the periodic timer fires or C<ev_periodic_again> is being\ncalled.\n\n=item ev_tstamp (*reschedule_cb)(ev_periodic *w, ev_tstamp now) [read-write]\n\nThe current reschedule callback, or C<0>, if this functionality is\nswitched off. Can be changed any time, but changes only take effect when\nthe periodic timer fires or C<ev_periodic_again> is being called.\n\n=back\n\n=head3 Examples\n\nExample: Call a callback every hour, or, more precisely, whenever the\nsystem time is divisible by 3600. The callback invocation times have\npotentially a lot of jitter, but good long-term stability.\n\n   static void\n   clock_cb (struct ev_loop *loop, ev_periodic *w, int revents)\n   {\n     ... its now a full hour (UTC, or TAI or whatever your clock follows)\n   }\n\n   ev_periodic hourly_tick;\n   ev_periodic_init (&hourly_tick, clock_cb, 0., 3600., 0);\n   ev_periodic_start (loop, &hourly_tick);\n\nExample: The same as above, but use a reschedule callback to do it:\n\n   #include <math.h>\n\n   static ev_tstamp\n   my_scheduler_cb (ev_periodic *w, ev_tstamp now)\n   {\n     return now + (3600. - fmod (now, 3600.));\n   }\n\n   ev_periodic_init (&hourly_tick, clock_cb, 0., 0., my_scheduler_cb);\n\nExample: Call a callback every hour, starting now:\n\n   ev_periodic hourly_tick;\n   ev_periodic_init (&hourly_tick, clock_cb,\n                     fmod (ev_now (loop), 3600.), 3600., 0);\n   ev_periodic_start (loop, &hourly_tick);\n\n\n=head2 C<ev_signal> - signal me when a signal gets signalled!\n\nSignal watchers will trigger an event when the process receives a specific\nsignal one or more times. Even though signals are very asynchronous, libev\nwill try its best to deliver signals synchronously, i.e. as part of the\nnormal event processing, like any other event.\n\nIf you want signals to be delivered truly asynchronously, just use\nC<sigaction> as you would do without libev and forget about sharing\nthe signal. You can even use C<ev_async> from a signal handler to\nsynchronously wake up an event loop.\n\nYou can configure as many watchers as you like for the same signal, but\nonly within the same loop, i.e. you can watch for C<SIGINT> in your\ndefault loop and for C<SIGIO> in another loop, but you cannot watch for\nC<SIGINT> in both the default loop and another loop at the same time. At\nthe moment, C<SIGCHLD> is permanently tied to the default loop.\n\nOnly after the first watcher for a signal is started will libev actually\nregister something with the kernel. It thus coexists with your own signal\nhandlers as long as you don't register any with libev for the same signal.\n\nIf possible and supported, libev will install its handlers with\nC<SA_RESTART> (or equivalent) behaviour enabled, so system calls should\nnot be unduly interrupted. If you have a problem with system calls getting\ninterrupted by signals you can block all signals in an C<ev_check> watcher\nand unblock them in an C<ev_prepare> watcher.\n\n=head3 The special problem of inheritance over fork/execve/pthread_create\n\nBoth the signal mask (C<sigprocmask>) and the signal disposition\n(C<sigaction>) are unspecified after starting a signal watcher (and after\nstopping it again), that is, libev might or might not block the signal,\nand might or might not set or restore the installed signal handler (but\nsee C<EVFLAG_NOSIGMASK>).\n\nWhile this does not matter for the signal disposition (libev never\nsets signals to C<SIG_IGN>, so handlers will be reset to C<SIG_DFL> on\nC<execve>), this matters for the signal mask: many programs do not expect\ncertain signals to be blocked.\n\nThis means that before calling C<exec> (from the child) you should reset\nthe signal mask to whatever \"default\" you expect (all clear is a good\nchoice usually).\n\nThe simplest way to ensure that the signal mask is reset in the child is\nto install a fork handler with C<pthread_atfork> that resets it. That will\ncatch fork calls done by libraries (such as the libc) as well.\n\nIn current versions of libev, the signal will not be blocked indefinitely\nunless you use the C<signalfd> API (C<EV_SIGNALFD>). While this reduces\nthe window of opportunity for problems, it will not go away, as libev\nI<has> to modify the signal mask, at least temporarily.\n\nSo I can't stress this enough: I<If you do not reset your signal mask when\nyou expect it to be empty, you have a race condition in your code>. This\nis not a libev-specific thing, this is true for most event libraries.\n\n=head3 The special problem of threads signal handling\n\nPOSIX threads has problematic signal handling semantics, specifically,\na lot of functionality (sigfd, sigwait etc.) only really works if all\nthreads in a process block signals, which is hard to achieve.\n\nWhen you want to use sigwait (or mix libev signal handling with your own\nfor the same signals), you can tackle this problem by globally blocking\nall signals before creating any threads (or creating them with a fully set\nsigprocmask) and also specifying the C<EVFLAG_NOSIGMASK> when creating\nloops. Then designate one thread as \"signal receiver thread\" which handles\nthese signals. You can pass on any signals that libev might be interested\nin by calling C<ev_feed_signal>.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_signal_init (ev_signal *, callback, int signum)\n\n=item ev_signal_set (ev_signal *, int signum)\n\nConfigures the watcher to trigger on the given signal number (usually one\nof the C<SIGxxx> constants).\n\n=item int signum [read-only]\n\nThe signal the watcher watches out for.\n\n=back\n\n=head3 Examples\n\nExample: Try to exit cleanly on SIGINT.\n\n   static void\n   sigint_cb (struct ev_loop *loop, ev_signal *w, int revents)\n   {\n     ev_break (loop, EVBREAK_ALL);\n   }\n\n   ev_signal signal_watcher;\n   ev_signal_init (&signal_watcher, sigint_cb, SIGINT);\n   ev_signal_start (loop, &signal_watcher);\n\n\n=head2 C<ev_child> - watch out for process status changes\n\nChild watchers trigger when your process receives a SIGCHLD in response to\nsome child status changes (most typically when a child of yours dies or\nexits). It is permissible to install a child watcher I<after> the child\nhas been forked (which implies it might have already exited), as long\nas the event loop isn't entered (or is continued from a watcher), i.e.,\nforking and then immediately registering a watcher for the child is fine,\nbut forking and registering a watcher a few event loop iterations later or\nin the next callback invocation is not.\n\nOnly the default event loop is capable of handling signals, and therefore\nyou can only register child watchers in the default event loop.\n\nDue to some design glitches inside libev, child watchers will always be\nhandled at maximum priority (their priority is set to C<EV_MAXPRI> by\nlibev)\n\n=head3 Process Interaction\n\nLibev grabs C<SIGCHLD> as soon as the default event loop is\ninitialised. This is necessary to guarantee proper behaviour even if the\nfirst child watcher is started after the child exits. The occurrence\nof C<SIGCHLD> is recorded asynchronously, but child reaping is done\nsynchronously as part of the event loop processing. Libev always reaps all\nchildren, even ones not watched.\n\n=head3 Overriding the Built-In Processing\n\nLibev offers no special support for overriding the built-in child\nprocessing, but if your application collides with libev's default child\nhandler, you can override it easily by installing your own handler for\nC<SIGCHLD> after initialising the default loop, and making sure the\ndefault loop never gets destroyed. You are encouraged, however, to use an\nevent-based approach to child reaping and thus use libev's support for\nthat, so other libev users can use C<ev_child> watchers freely.\n\n=head3 Stopping the Child Watcher\n\nCurrently, the child watcher never gets stopped, even when the\nchild terminates, so normally one needs to stop the watcher in the\ncallback. Future versions of libev might stop the watcher automatically\nwhen a child exit is detected (calling C<ev_child_stop> twice is not a\nproblem).\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_child_init (ev_child *, callback, int pid, int trace)\n\n=item ev_child_set (ev_child *, int pid, int trace)\n\nConfigures the watcher to wait for status changes of process C<pid> (or\nI<any> process if C<pid> is specified as C<0>). The callback can look\nat the C<rstatus> member of the C<ev_child> watcher structure to see\nthe status word (use the macros from C<sys/wait.h> and see your systems\nC<waitpid> documentation). The C<rpid> member contains the pid of the\nprocess causing the status change. C<trace> must be either C<0> (only\nactivate the watcher when the process terminates) or C<1> (additionally\nactivate the watcher when the process is stopped or continued).\n\n=item int pid [read-only]\n\nThe process id this watcher watches out for, or C<0>, meaning any process id.\n\n=item int rpid [read-write]\n\nThe process id that detected a status change.\n\n=item int rstatus [read-write]\n\nThe process exit/trace status caused by C<rpid> (see your systems\nC<waitpid> and C<sys/wait.h> documentation for details).\n\n=back\n\n=head3 Examples\n\nExample: C<fork()> a new process and install a child handler to wait for\nits completion.\n\n   ev_child cw;\n\n   static void\n   child_cb (EV_P_ ev_child *w, int revents)\n   {\n     ev_child_stop (EV_A_ w);\n     printf (\"process %d exited with status %x\\n\", w->rpid, w->rstatus);\n   }\n\n   pid_t pid = fork ();\n\n   if (pid < 0)\n     // error\n   else if (pid == 0)\n     {\n       // the forked child executes here\n       exit (1);\n     }\n   else\n     {\n       ev_child_init (&cw, child_cb, pid, 0);\n       ev_child_start (EV_DEFAULT_ &cw);\n     }\n\n\n=head2 C<ev_stat> - did the file attributes just change?\n\nThis watches a file system path for attribute changes. That is, it calls\nC<stat> on that path in regular intervals (or when the OS says it changed)\nand sees if it changed compared to the last time, invoking the callback\nif it did. Starting the watcher C<stat>'s the file, so only changes that\nhappen after the watcher has been started will be reported.\n\nThe path does not need to exist: changing from \"path exists\" to \"path does\nnot exist\" is a status change like any other. The condition \"path does not\nexist\" (or more correctly \"path cannot be stat'ed\") is signified by the\nC<st_nlink> field being zero (which is otherwise always forced to be at\nleast one) and all the other fields of the stat buffer having unspecified\ncontents.\n\nThe path I<must not> end in a slash or contain special components such as\nC<.> or C<..>. The path I<should> be absolute: If it is relative and\nyour working directory changes, then the behaviour is undefined.\n\nSince there is no portable change notification interface available, the\nportable implementation simply calls C<stat(2)> regularly on the path\nto see if it changed somehow. You can specify a recommended polling\ninterval for this case. If you specify a polling interval of C<0> (highly\nrecommended!) then a I<suitable, unspecified default> value will be used\n(which you can expect to be around five seconds, although this might\nchange dynamically). Libev will also impose a minimum interval which is\ncurrently around C<0.1>, but that's usually overkill.\n\nThis watcher type is not meant for massive numbers of stat watchers,\nas even with OS-supported change notifications, this can be\nresource-intensive.\n\nAt the time of this writing, the only OS-specific interface implemented\nis the Linux inotify interface (implementing kqueue support is left as an\nexercise for the reader. Note, however, that the author sees no way of\nimplementing C<ev_stat> semantics with kqueue, except as a hint).\n\n=head3 ABI Issues (Largefile Support)\n\nLibev by default (unless the user overrides this) uses the default\ncompilation environment, which means that on systems with large file\nsupport disabled by default, you get the 32 bit version of the stat\nstructure. When using the library from programs that change the ABI to\nuse 64 bit file offsets the programs will fail. In that case you have to\ncompile libev with the same flags to get binary compatibility. This is\nobviously the case with any flags that change the ABI, but the problem is\nmost noticeably displayed with ev_stat and large file support.\n\nThe solution for this is to lobby your distribution maker to make large\nfile interfaces available by default (as e.g. FreeBSD does) and not\noptional. Libev cannot simply switch on large file support because it has\nto exchange stat structures with application programs compiled using the\ndefault compilation environment.\n\n=head3 Inotify and Kqueue\n\nWhen C<inotify (7)> support has been compiled into libev and present at\nruntime, it will be used to speed up change detection where possible. The\ninotify descriptor will be created lazily when the first C<ev_stat>\nwatcher is being started.\n\nInotify presence does not change the semantics of C<ev_stat> watchers\nexcept that changes might be detected earlier, and in some cases, to avoid\nmaking regular C<stat> calls. Even in the presence of inotify support\nthere are many cases where libev has to resort to regular C<stat> polling,\nbut as long as kernel 2.6.25 or newer is used (2.6.24 and older have too\nmany bugs), the path exists (i.e. stat succeeds), and the path resides on\na local filesystem (libev currently assumes only ext2/3, jfs, reiserfs and\nxfs are fully working) libev usually gets away without polling.\n\nThere is no support for kqueue, as apparently it cannot be used to\nimplement this functionality, due to the requirement of having a file\ndescriptor open on the object at all times, and detecting renames, unlinks\netc. is difficult.\n\n=head3 C<stat ()> is a synchronous operation\n\nLibev doesn't normally do any kind of I/O itself, and so is not blocking\nthe process. The exception are C<ev_stat> watchers - those call C<stat\n()>, which is a synchronous operation.\n\nFor local paths, this usually doesn't matter: unless the system is very\nbusy or the intervals between stat's are large, a stat call will be fast,\nas the path data is usually in memory already (except when starting the\nwatcher).\n\nFor networked file systems, calling C<stat ()> can block an indefinite\ntime due to network issues, and even under good conditions, a stat call\noften takes multiple milliseconds.\n\nTherefore, it is best to avoid using C<ev_stat> watchers on networked\npaths, although this is fully supported by libev.\n\n=head3 The special problem of stat time resolution\n\nThe C<stat ()> system call only supports full-second resolution portably,\nand even on systems where the resolution is higher, most file systems\nstill only support whole seconds.\n\nThat means that, if the time is the only thing that changes, you can\neasily miss updates: on the first update, C<ev_stat> detects a change and\ncalls your callback, which does something. When there is another update\nwithin the same second, C<ev_stat> will be unable to detect unless the\nstat data does change in other ways (e.g. file size).\n\nThe solution to this is to delay acting on a change for slightly more\nthan a second (or till slightly after the next full second boundary), using\na roughly one-second-delay C<ev_timer> (e.g. C<ev_timer_set (w, 0., 1.02);\nev_timer_again (loop, w)>).\n\nThe C<.02> offset is added to work around small timing inconsistencies\nof some operating systems (where the second counter of the current time\nmight be be delayed. One such system is the Linux kernel, where a call to\nC<gettimeofday> might return a timestamp with a full second later than\na subsequent C<time> call - if the equivalent of C<time ()> is used to\nupdate file times then there will be a small window where the kernel uses\nthe previous second to update file times but libev might already execute\nthe timer callback).\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_stat_init (ev_stat *, callback, const char *path, ev_tstamp interval)\n\n=item ev_stat_set (ev_stat *, const char *path, ev_tstamp interval)\n\nConfigures the watcher to wait for status changes of the given\nC<path>. The C<interval> is a hint on how quickly a change is expected to\nbe detected and should normally be specified as C<0> to let libev choose\na suitable value. The memory pointed to by C<path> must point to the same\npath for as long as the watcher is active.\n\nThe callback will receive an C<EV_STAT> event when a change was detected,\nrelative to the attributes at the time the watcher was started (or the\nlast change was detected).\n\n=item ev_stat_stat (loop, ev_stat *)\n\nUpdates the stat buffer immediately with new values. If you change the\nwatched path in your callback, you could call this function to avoid\ndetecting this change (while introducing a race condition if you are not\nthe only one changing the path). Can also be useful simply to find out the\nnew values.\n\n=item ev_statdata attr [read-only]\n\nThe most-recently detected attributes of the file. Although the type is\nC<ev_statdata>, this is usually the (or one of the) C<struct stat> types\nsuitable for your system, but you can only rely on the POSIX-standardised\nmembers to be present. If the C<st_nlink> member is C<0>, then there was\nsome error while C<stat>ing the file.\n\n=item ev_statdata prev [read-only]\n\nThe previous attributes of the file. The callback gets invoked whenever\nC<prev> != C<attr>, or, more precisely, one or more of these members\ndiffer: C<st_dev>, C<st_ino>, C<st_mode>, C<st_nlink>, C<st_uid>,\nC<st_gid>, C<st_rdev>, C<st_size>, C<st_atime>, C<st_mtime>, C<st_ctime>.\n\n=item ev_tstamp interval [read-only]\n\nThe specified interval.\n\n=item const char *path [read-only]\n\nThe file system path that is being watched.\n\n=back\n\n=head3 Examples\n\nExample: Watch C</etc/passwd> for attribute changes.\n\n   static void\n   passwd_cb (struct ev_loop *loop, ev_stat *w, int revents)\n   {\n     /* /etc/passwd changed in some way */\n     if (w->attr.st_nlink)\n       {\n         printf (\"passwd current size  %ld\\n\", (long)w->attr.st_size);\n         printf (\"passwd current atime %ld\\n\", (long)w->attr.st_mtime);\n         printf (\"passwd current mtime %ld\\n\", (long)w->attr.st_mtime);\n       }\n     else\n       /* you shalt not abuse printf for puts */\n       puts (\"wow, /etc/passwd is not there, expect problems. \"\n             \"if this is windows, they already arrived\\n\");\n   }\n\n   ...\n   ev_stat passwd;\n\n   ev_stat_init (&passwd, passwd_cb, \"/etc/passwd\", 0.);\n   ev_stat_start (loop, &passwd);\n\nExample: Like above, but additionally use a one-second delay so we do not\nmiss updates (however, frequent updates will delay processing, too, so\none might do the work both on C<ev_stat> callback invocation I<and> on\nC<ev_timer> callback invocation).\n\n   static ev_stat passwd;\n   static ev_timer timer;\n\n   static void\n   timer_cb (EV_P_ ev_timer *w, int revents)\n   {\n     ev_timer_stop (EV_A_ w);\n\n     /* now it's one second after the most recent passwd change */\n   }\n\n   static void\n   stat_cb (EV_P_ ev_stat *w, int revents)\n   {\n     /* reset the one-second timer */\n     ev_timer_again (EV_A_ &timer);\n   }\n\n   ...\n   ev_stat_init (&passwd, stat_cb, \"/etc/passwd\", 0.);\n   ev_stat_start (loop, &passwd);\n   ev_timer_init (&timer, timer_cb, 0., 1.02);\n\n\n=head2 C<ev_idle> - when you've got nothing better to do...\n\nIdle watchers trigger events when no other events of the same or higher\npriority are pending (prepare, check and other idle watchers do not count\nas receiving \"events\").\n\nThat is, as long as your process is busy handling sockets or timeouts\n(or even signals, imagine) of the same or higher priority it will not be\ntriggered. But when your process is idle (or only lower-priority watchers\nare pending), the idle watchers are being called once per event loop\niteration - until stopped, that is, or your process receives more events\nand becomes busy again with higher priority stuff.\n\nThe most noteworthy effect is that as long as any idle watchers are\nactive, the process will not block when waiting for new events.\n\nApart from keeping your process non-blocking (which is a useful\neffect on its own sometimes), idle watchers are a good place to do\n\"pseudo-background processing\", or delay processing stuff to after the\nevent loop has handled all outstanding events.\n\n=head3 Abusing an C<ev_idle> watcher for its side-effect\n\nAs long as there is at least one active idle watcher, libev will never\nsleep unnecessarily. Or in other words, it will loop as fast as possible.\nFor this to work, the idle watcher doesn't need to be invoked at all - the\nlowest priority will do.\n\nThis mode of operation can be useful together with an C<ev_check> watcher,\nto do something on each event loop iteration - for example to balance load\nbetween different connections.\n\nSee L</Abusing an ev_check watcher for its side-effect> for a longer\nexample.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_idle_init (ev_idle *, callback)\n\nInitialises and configures the idle watcher - it has no parameters of any\nkind. There is a C<ev_idle_set> macro, but using it is utterly pointless,\nbelieve me.\n\n=back\n\n=head3 Examples\n\nExample: Dynamically allocate an C<ev_idle> watcher, start it, and in the\ncallback, free it. Also, use no error checking, as usual.\n\n   static void\n   idle_cb (struct ev_loop *loop, ev_idle *w, int revents)\n   {\n     // stop the watcher\n     ev_idle_stop (loop, w);\n\n     // now we can free it\n     free (w);\n\n     // now do something you wanted to do when the program has\n     // no longer anything immediate to do.\n   }\n\n   ev_idle *idle_watcher = malloc (sizeof (ev_idle));\n   ev_idle_init (idle_watcher, idle_cb);\n   ev_idle_start (loop, idle_watcher);\n\n\n=head2 C<ev_prepare> and C<ev_check> - customise your event loop!\n\nPrepare and check watchers are often (but not always) used in pairs:\nprepare watchers get invoked before the process blocks and check watchers\nafterwards.\n\nYou I<must not> call C<ev_run> (or similar functions that enter the\ncurrent event loop) or C<ev_loop_fork> from either C<ev_prepare> or\nC<ev_check> watchers. Other loops than the current one are fine,\nhowever. The rationale behind this is that you do not need to check\nfor recursion in those watchers, i.e. the sequence will always be\nC<ev_prepare>, blocking, C<ev_check> so if you have one watcher of each\nkind they will always be called in pairs bracketing the blocking call.\n\nTheir main purpose is to integrate other event mechanisms into libev and\ntheir use is somewhat advanced. They could be used, for example, to track\nvariable changes, implement your own watchers, integrate net-snmp or a\ncoroutine library and lots more. They are also occasionally useful if\nyou cache some data and want to flush it before blocking (for example,\nin X programs you might want to do an C<XFlush ()> in an C<ev_prepare>\nwatcher).\n\nThis is done by examining in each prepare call which file descriptors\nneed to be watched by the other library, registering C<ev_io> watchers\nfor them and starting an C<ev_timer> watcher for any timeouts (many\nlibraries provide exactly this functionality). Then, in the check watcher,\nyou check for any events that occurred (by checking the pending status\nof all watchers and stopping them) and call back into the library. The\nI/O and timer callbacks will never actually be called (but must be valid\nnevertheless, because you never know, you know?).\n\nAs another example, the Perl Coro module uses these hooks to integrate\ncoroutines into libev programs, by yielding to other active coroutines\nduring each prepare and only letting the process block if no coroutines\nare ready to run (it's actually more complicated: it only runs coroutines\nwith priority higher than or equal to the event loop and one coroutine\nof lower priority, but only once, using idle watchers to keep the event\nloop from blocking if lower-priority coroutines are active, thus mapping\nlow-priority coroutines to idle/background tasks).\n\nWhen used for this purpose, it is recommended to give C<ev_check> watchers\nhighest (C<EV_MAXPRI>) priority, to ensure that they are being run before\nany other watchers after the poll (this doesn't matter for C<ev_prepare>\nwatchers).\n\nAlso, C<ev_check> watchers (and C<ev_prepare> watchers, too) should not\nactivate (\"feed\") events into libev. While libev fully supports this, they\nmight get executed before other C<ev_check> watchers did their job. As\nC<ev_check> watchers are often used to embed other (non-libev) event\nloops those other event loops might be in an unusable state until their\nC<ev_check> watcher ran (always remind yourself to coexist peacefully with\nothers).\n\n=head3 Abusing an C<ev_check> watcher for its side-effect\n\nC<ev_check> (and less often also C<ev_prepare>) watchers can also be\nuseful because they are called once per event loop iteration. For\nexample, if you want to handle a large number of connections fairly, you\nnormally only do a bit of work for each active connection, and if there\nis more work to do, you wait for the next event loop iteration, so other\nconnections have a chance of making progress.\n\nUsing an C<ev_check> watcher is almost enough: it will be called on the\nnext event loop iteration. However, that isn't as soon as possible -\nwithout external events, your C<ev_check> watcher will not be invoked.\n\nThis is where C<ev_idle> watchers come in handy - all you need is a\nsingle global idle watcher that is active as long as you have one active\nC<ev_check> watcher. The C<ev_idle> watcher makes sure the event loop\nwill not sleep, and the C<ev_check> watcher makes sure a callback gets\ninvoked. Neither watcher alone can do that.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_prepare_init (ev_prepare *, callback)\n\n=item ev_check_init (ev_check *, callback)\n\nInitialises and configures the prepare or check watcher - they have no\nparameters of any kind. There are C<ev_prepare_set> and C<ev_check_set>\nmacros, but using them is utterly, utterly, utterly and completely\npointless.\n\n=back\n\n=head3 Examples\n\nThere are a number of principal ways to embed other event loops or modules\ninto libev. Here are some ideas on how to include libadns into libev\n(there is a Perl module named C<EV::ADNS> that does this, which you could\nuse as a working example. Another Perl module named C<EV::Glib> embeds a\nGlib main context into libev, and finally, C<Glib::EV> embeds EV into the\nGlib event loop).\n\nMethod 1: Add IO watchers and a timeout watcher in a prepare handler,\nand in a check watcher, destroy them and call into libadns. What follows\nis pseudo-code only of course. This requires you to either use a low\npriority for the check watcher or use C<ev_clear_pending> explicitly, as\nthe callbacks for the IO/timeout watchers might not have been called yet.\n\n   static ev_io iow [nfd];\n   static ev_timer tw;\n\n   static void\n   io_cb (struct ev_loop *loop, ev_io *w, int revents)\n   {\n   }\n\n   // create io watchers for each fd and a timer before blocking\n   static void\n   adns_prepare_cb (struct ev_loop *loop, ev_prepare *w, int revents)\n   {\n     int timeout = 3600000;\n     struct pollfd fds [nfd];\n     // actual code will need to loop here and realloc etc.\n     adns_beforepoll (ads, fds, &nfd, &timeout, timeval_from (ev_time ()));\n\n     /* the callback is illegal, but won't be called as we stop during check */\n     ev_timer_init (&tw, 0, timeout * 1e-3, 0.);\n     ev_timer_start (loop, &tw);\n\n     // create one ev_io per pollfd\n     for (int i = 0; i < nfd; ++i)\n       {\n         ev_io_init (iow + i, io_cb, fds [i].fd,\n           ((fds [i].events & POLLIN ? EV_READ : 0)\n            | (fds [i].events & POLLOUT ? EV_WRITE : 0)));\n\n         fds [i].revents = 0;\n         ev_io_start (loop, iow + i);\n       }\n   }\n\n   // stop all watchers after blocking\n   static void\n   adns_check_cb (struct ev_loop *loop, ev_check *w, int revents)\n   {\n     ev_timer_stop (loop, &tw);\n\n     for (int i = 0; i < nfd; ++i)\n       {\n         // set the relevant poll flags\n         // could also call adns_processreadable etc. here\n         struct pollfd *fd = fds + i;\n         int revents = ev_clear_pending (iow + i);\n         if (revents & EV_READ ) fd->revents |= fd->events & POLLIN;\n         if (revents & EV_WRITE) fd->revents |= fd->events & POLLOUT;\n\n         // now stop the watcher\n         ev_io_stop (loop, iow + i);\n       }\n\n     adns_afterpoll (adns, fds, nfd, timeval_from (ev_now (loop));\n   }\n\nMethod 2: This would be just like method 1, but you run C<adns_afterpoll>\nin the prepare watcher and would dispose of the check watcher.\n\nMethod 3: If the module to be embedded supports explicit event\nnotification (libadns does), you can also make use of the actual watcher\ncallbacks, and only destroy/create the watchers in the prepare watcher.\n\n   static void\n   timer_cb (EV_P_ ev_timer *w, int revents)\n   {\n     adns_state ads = (adns_state)w->data;\n     update_now (EV_A);\n\n     adns_processtimeouts (ads, &tv_now);\n   }\n\n   static void\n   io_cb (EV_P_ ev_io *w, int revents)\n   {\n     adns_state ads = (adns_state)w->data;\n     update_now (EV_A);\n\n     if (revents & EV_READ ) adns_processreadable  (ads, w->fd, &tv_now);\n     if (revents & EV_WRITE) adns_processwriteable (ads, w->fd, &tv_now);\n   }\n\n   // do not ever call adns_afterpoll\n\nMethod 4: Do not use a prepare or check watcher because the module you\nwant to embed is not flexible enough to support it. Instead, you can\noverride their poll function. The drawback with this solution is that the\nmain loop is now no longer controllable by EV. The C<Glib::EV> module uses\nthis approach, effectively embedding EV as a client into the horrible\nlibglib event loop.\n\n   static gint\n   event_poll_func (GPollFD *fds, guint nfds, gint timeout)\n   {\n     int got_events = 0;\n\n     for (n = 0; n < nfds; ++n)\n       // create/start io watcher that sets the relevant bits in fds[n] and increment got_events\n\n     if (timeout >= 0)\n       // create/start timer\n\n     // poll\n     ev_run (EV_A_ 0);\n\n     // stop timer again\n     if (timeout >= 0)\n       ev_timer_stop (EV_A_ &to);\n\n     // stop io watchers again - their callbacks should have set\n     for (n = 0; n < nfds; ++n)\n       ev_io_stop (EV_A_ iow [n]);\n\n     return got_events;\n   }\n\n\n=head2 C<ev_embed> - when one backend isn't enough...\n\nThis is a rather advanced watcher type that lets you embed one event loop\ninto another (currently only C<ev_io> events are supported in the embedded\nloop, other types of watchers might be handled in a delayed or incorrect\nfashion and must not be used).\n\nThere are primarily two reasons you would want that: work around bugs and\nprioritise I/O.\n\nAs an example for a bug workaround, the kqueue backend might only support\nsockets on some platform, so it is unusable as generic backend, but you\nstill want to make use of it because you have many sockets and it scales\nso nicely. In this case, you would create a kqueue-based loop and embed\nit into your default loop (which might use e.g. poll). Overall operation\nwill be a bit slower because first libev has to call C<poll> and then\nC<kevent>, but at least you can use both mechanisms for what they are\nbest: C<kqueue> for scalable sockets and C<poll> if you want it to work :)\n\nAs for prioritising I/O: under rare circumstances you have the case where\nsome fds have to be watched and handled very quickly (with low latency),\nand even priorities and idle watchers might have too much overhead. In\nthis case you would put all the high priority stuff in one loop and all\nthe rest in a second one, and embed the second one in the first.\n\nAs long as the watcher is active, the callback will be invoked every\ntime there might be events pending in the embedded loop. The callback\nmust then call C<ev_embed_sweep (mainloop, watcher)> to make a single\nsweep and invoke their callbacks (the callback doesn't need to invoke the\nC<ev_embed_sweep> function directly, it could also start an idle watcher\nto give the embedded loop strictly lower priority for example).\n\nYou can also set the callback to C<0>, in which case the embed watcher\nwill automatically execute the embedded loop sweep whenever necessary.\n\nFork detection will be handled transparently while the C<ev_embed> watcher\nis active, i.e., the embedded loop will automatically be forked when the\nembedding loop forks. In other cases, the user is responsible for calling\nC<ev_loop_fork> on the embedded loop.\n\nUnfortunately, not all backends are embeddable: only the ones returned by\nC<ev_embeddable_backends> are, which, unfortunately, does not include any\nportable one.\n\nSo when you want to use this feature you will always have to be prepared\nthat you cannot get an embeddable loop. The recommended way to get around\nthis is to have a separate variables for your embeddable loop, try to\ncreate it, and if that fails, use the normal loop for everything.\n\n=head3 C<ev_embed> and fork\n\nWhile the C<ev_embed> watcher is running, forks in the embedding loop will\nautomatically be applied to the embedded loop as well, so no special\nfork handling is required in that case. When the watcher is not running,\nhowever, it is still the task of the libev user to call C<ev_loop_fork ()>\nas applicable.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_embed_init (ev_embed *, callback, struct ev_loop *embedded_loop)\n\n=item ev_embed_set (ev_embed *, struct ev_loop *embedded_loop)\n\nConfigures the watcher to embed the given loop, which must be\nembeddable. If the callback is C<0>, then C<ev_embed_sweep> will be\ninvoked automatically, otherwise it is the responsibility of the callback\nto invoke it (it will continue to be called until the sweep has been done,\nif you do not want that, you need to temporarily stop the embed watcher).\n\n=item ev_embed_sweep (loop, ev_embed *)\n\nMake a single, non-blocking sweep over the embedded loop. This works\nsimilarly to C<ev_run (embedded_loop, EVRUN_NOWAIT)>, but in the most\nappropriate way for embedded loops.\n\n=item struct ev_loop *other [read-only]\n\nThe embedded event loop.\n\n=back\n\n=head3 Examples\n\nExample: Try to get an embeddable event loop and embed it into the default\nevent loop. If that is not possible, use the default loop. The default\nloop is stored in C<loop_hi>, while the embeddable loop is stored in\nC<loop_lo> (which is C<loop_hi> in the case no embeddable loop can be\nused).\n\n   struct ev_loop *loop_hi = ev_default_init (0);\n   struct ev_loop *loop_lo = 0;\n   ev_embed embed;\n\n   // see if there is a chance of getting one that works\n   // (remember that a flags value of 0 means autodetection)\n   loop_lo = ev_embeddable_backends () & ev_recommended_backends ()\n     ? ev_loop_new (ev_embeddable_backends () & ev_recommended_backends ())\n     : 0;\n\n   // if we got one, then embed it, otherwise default to loop_hi\n   if (loop_lo)\n     {\n       ev_embed_init (&embed, 0, loop_lo);\n       ev_embed_start (loop_hi, &embed);\n     }\n   else\n     loop_lo = loop_hi;\n\nExample: Check if kqueue is available but not recommended and create\na kqueue backend for use with sockets (which usually work with any\nkqueue implementation). Store the kqueue/socket-only event loop in\nC<loop_socket>. (One might optionally use C<EVFLAG_NOENV>, too).\n\n   struct ev_loop *loop = ev_default_init (0);\n   struct ev_loop *loop_socket = 0;\n   ev_embed embed;\n\n   if (ev_supported_backends () & ~ev_recommended_backends () & EVBACKEND_KQUEUE)\n     if ((loop_socket = ev_loop_new (EVBACKEND_KQUEUE))\n       {\n         ev_embed_init (&embed, 0, loop_socket);\n         ev_embed_start (loop, &embed);\n       }\n\n   if (!loop_socket)\n     loop_socket = loop;\n\n   // now use loop_socket for all sockets, and loop for everything else\n\n\n=head2 C<ev_fork> - the audacity to resume the event loop after a fork\n\nFork watchers are called when a C<fork ()> was detected (usually because\nwhoever is a good citizen cared to tell libev about it by calling\nC<ev_loop_fork>). The invocation is done before the event loop blocks next\nand before C<ev_check> watchers are being called, and only in the child\nafter the fork. If whoever good citizen calling C<ev_default_fork> cheats\nand calls it in the wrong process, the fork handlers will be invoked, too,\nof course.\n\n=head3 The special problem of life after fork - how is it possible?\n\nMost uses of C<fork ()> consist of forking, then some simple calls to set\nup/change the process environment, followed by a call to C<exec()>. This\nsequence should be handled by libev without any problems.\n\nThis changes when the application actually wants to do event handling\nin the child, or both parent in child, in effect \"continuing\" after the\nfork.\n\nThe default mode of operation (for libev, with application help to detect\nforks) is to duplicate all the state in the child, as would be expected\nwhen I<either> the parent I<or> the child process continues.\n\nWhen both processes want to continue using libev, then this is usually the\nwrong result. In that case, usually one process (typically the parent) is\nsupposed to continue with all watchers in place as before, while the other\nprocess typically wants to start fresh, i.e. without any active watchers.\n\nThe cleanest and most efficient way to achieve that with libev is to\nsimply create a new event loop, which of course will be \"empty\", and\nuse that for new watchers. This has the advantage of not touching more\nmemory than necessary, and thus avoiding the copy-on-write, and the\ndisadvantage of having to use multiple event loops (which do not support\nsignal watchers).\n\nWhen this is not possible, or you want to use the default loop for\nother reasons, then in the process that wants to start \"fresh\", call\nC<ev_loop_destroy (EV_DEFAULT)> followed by C<ev_default_loop (...)>.\nDestroying the default loop will \"orphan\" (not stop) all registered\nwatchers, so you have to be careful not to execute code that modifies\nthose watchers. Note also that in that case, you have to re-register any\nsignal watchers.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_fork_init (ev_fork *, callback)\n\nInitialises and configures the fork watcher - it has no parameters of any\nkind. There is a C<ev_fork_set> macro, but using it is utterly pointless,\nreally.\n\n=back\n\n\n=head2 C<ev_cleanup> - even the best things end\n\nCleanup watchers are called just before the event loop is being destroyed\nby a call to C<ev_loop_destroy>.\n\nWhile there is no guarantee that the event loop gets destroyed, cleanup\nwatchers provide a convenient method to install cleanup hooks for your\nprogram, worker threads and so on - you just to make sure to destroy the\nloop when you want them to be invoked.\n\nCleanup watchers are invoked in the same way as any other watcher. Unlike\nall other watchers, they do not keep a reference to the event loop (which\nmakes a lot of sense if you think about it). Like all other watchers, you\ncan call libev functions in the callback, except C<ev_cleanup_start>.\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_cleanup_init (ev_cleanup *, callback)\n\nInitialises and configures the cleanup watcher - it has no parameters of\nany kind. There is a C<ev_cleanup_set> macro, but using it is utterly\npointless, I assure you.\n\n=back\n\nExample: Register an atexit handler to destroy the default loop, so any\ncleanup functions are called.\n\n   static void\n   program_exits (void)\n   {\n     ev_loop_destroy (EV_DEFAULT_UC);\n   }\n\n   ...\n   atexit (program_exits);\n\n\n=head2 C<ev_async> - how to wake up an event loop\n\nIn general, you cannot use an C<ev_loop> from multiple threads or other\nasynchronous sources such as signal handlers (as opposed to multiple event\nloops - those are of course safe to use in different threads).\n\nSometimes, however, you need to wake up an event loop you do not control,\nfor example because it belongs to another thread. This is what C<ev_async>\nwatchers do: as long as the C<ev_async> watcher is active, you can signal\nit by calling C<ev_async_send>, which is thread- and signal safe.\n\nThis functionality is very similar to C<ev_signal> watchers, as signals,\ntoo, are asynchronous in nature, and signals, too, will be compressed\n(i.e. the number of callback invocations may be less than the number of\nC<ev_async_send> calls). In fact, you could use signal watchers as a kind\nof \"global async watchers\" by using a watcher on an otherwise unused\nsignal, and C<ev_feed_signal> to signal this watcher from another thread,\neven without knowing which loop owns the signal.\n\n=head3 Queueing\n\nC<ev_async> does not support queueing of data in any way. The reason\nis that the author does not know of a simple (or any) algorithm for a\nmultiple-writer-single-reader queue that works in all cases and doesn't\nneed elaborate support such as pthreads or unportable memory access\nsemantics.\n\nThat means that if you want to queue data, you have to provide your own\nqueue. But at least I can tell you how to implement locking around your\nqueue:\n\n=over 4\n\n=item queueing from a signal handler context\n\nTo implement race-free queueing, you simply add to the queue in the signal\nhandler but you block the signal handler in the watcher callback. Here is\nan example that does that for some fictitious SIGUSR1 handler:\n\n   static ev_async mysig;\n\n   static void\n   sigusr1_handler (void)\n   {\n     sometype data;\n\n     // no locking etc.\n     queue_put (data);\n     ev_async_send (EV_DEFAULT_ &mysig);\n   }\n\n   static void\n   mysig_cb (EV_P_ ev_async *w, int revents)\n   {\n     sometype data;\n     sigset_t block, prev;\n\n     sigemptyset (&block);\n     sigaddset (&block, SIGUSR1);\n     sigprocmask (SIG_BLOCK, &block, &prev);\n\n     while (queue_get (&data))\n       process (data);\n\n     if (sigismember (&prev, SIGUSR1)\n       sigprocmask (SIG_UNBLOCK, &block, 0);\n   }\n\n(Note: pthreads in theory requires you to use C<pthread_setmask>\ninstead of C<sigprocmask> when you use threads, but libev doesn't do it\neither...).\n\n=item queueing from a thread context\n\nThe strategy for threads is different, as you cannot (easily) block\nthreads but you can easily preempt them, so to queue safely you need to\nemploy a traditional mutex lock, such as in this pthread example:\n\n   static ev_async mysig;\n   static pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER;\n\n   static void\n   otherthread (void)\n   {\n     // only need to lock the actual queueing operation\n     pthread_mutex_lock (&mymutex);\n     queue_put (data);\n     pthread_mutex_unlock (&mymutex);\n\n     ev_async_send (EV_DEFAULT_ &mysig);\n   }\n\n   static void\n   mysig_cb (EV_P_ ev_async *w, int revents)\n   {\n     pthread_mutex_lock (&mymutex);\n\n     while (queue_get (&data))\n       process (data);\n\n     pthread_mutex_unlock (&mymutex);\n   }\n\n=back\n\n\n=head3 Watcher-Specific Functions and Data Members\n\n=over 4\n\n=item ev_async_init (ev_async *, callback)\n\nInitialises and configures the async watcher - it has no parameters of any\nkind. There is a C<ev_async_set> macro, but using it is utterly pointless,\ntrust me.\n\n=item ev_async_send (loop, ev_async *)\n\nSends/signals/activates the given C<ev_async> watcher, that is, feeds\nan C<EV_ASYNC> event on the watcher into the event loop, and instantly\nreturns.\n\nUnlike C<ev_feed_event>, this call is safe to do from other threads,\nsignal or similar contexts (see the discussion of C<EV_ATOMIC_T> in the\nembedding section below on what exactly this means).\n\nNote that, as with other watchers in libev, multiple events might get\ncompressed into a single callback invocation (another way to look at\nthis is that C<ev_async> watchers are level-triggered: they are set on\nC<ev_async_send>, reset when the event loop detects that).\n\nThis call incurs the overhead of at most one extra system call per event\nloop iteration, if the event loop is blocked, and no syscall at all if\nthe event loop (or your program) is processing events. That means that\nrepeated calls are basically free (there is no need to avoid calls for\nperformance reasons) and that the overhead becomes smaller (typically\nzero) under load.\n\n=item bool = ev_async_pending (ev_async *)\n\nReturns a non-zero value when C<ev_async_send> has been called on the\nwatcher but the event has not yet been processed (or even noted) by the\nevent loop.\n\nC<ev_async_send> sets a flag in the watcher and wakes up the loop. When\nthe loop iterates next and checks for the watcher to have become active,\nit will reset the flag again. C<ev_async_pending> can be used to very\nquickly check whether invoking the loop might be a good idea.\n\nNot that this does I<not> check whether the watcher itself is pending,\nonly whether it has been requested to make this watcher pending: there\nis a time window between the event loop checking and resetting the async\nnotification, and the callback being invoked.\n\n=back\n\n\n=head1 OTHER FUNCTIONS\n\nThere are some other functions of possible interest. Described. Here. Now.\n\n=over 4\n\n=item ev_once (loop, int fd, int events, ev_tstamp timeout, callback)\n\nThis function combines a simple timer and an I/O watcher, calls your\ncallback on whichever event happens first and automatically stops both\nwatchers. This is useful if you want to wait for a single event on an fd\nor timeout without having to allocate/configure/start/stop/free one or\nmore watchers yourself.\n\nIf C<fd> is less than 0, then no I/O watcher will be started and the\nC<events> argument is being ignored. Otherwise, an C<ev_io> watcher for\nthe given C<fd> and C<events> set will be created and started.\n\nIf C<timeout> is less than 0, then no timeout watcher will be\nstarted. Otherwise an C<ev_timer> watcher with after = C<timeout> (and\nrepeat = 0) will be started. C<0> is a valid timeout.\n\nThe callback has the type C<void (*cb)(int revents, void *arg)> and is\npassed an C<revents> set like normal event callbacks (a combination of\nC<EV_ERROR>, C<EV_READ>, C<EV_WRITE> or C<EV_TIMER>) and the C<arg>\nvalue passed to C<ev_once>. Note that it is possible to receive I<both>\na timeout and an io event at the same time - you probably should give io\nevents precedence.\n\nExample: wait up to ten seconds for data to appear on STDIN_FILENO.\n\n   static void stdin_ready (int revents, void *arg)\n   {\n     if (revents & EV_READ)\n       /* stdin might have data for us, joy! */;\n     else if (revents & EV_TIMER)\n       /* doh, nothing entered */;\n   }\n\n   ev_once (STDIN_FILENO, EV_READ, 10., stdin_ready, 0);\n\n=item ev_feed_fd_event (loop, int fd, int revents)\n\nFeed an event on the given fd, as if a file descriptor backend detected\nthe given events.\n\n=item ev_feed_signal_event (loop, int signum)\n\nFeed an event as if the given signal occurred. See also C<ev_feed_signal>,\nwhich is async-safe.\n\n=back\n\n\n=head1 COMMON OR USEFUL IDIOMS (OR BOTH)\n\nThis section explains some common idioms that are not immediately\nobvious. Note that examples are sprinkled over the whole manual, and this\nsection only contains stuff that wouldn't fit anywhere else.\n\n=head2 ASSOCIATING CUSTOM DATA WITH A WATCHER\n\nEach watcher has, by default, a C<void *data> member that you can read\nor modify at any time: libev will completely ignore it. This can be used\nto associate arbitrary data with your watcher. If you need more data and\ndon't want to allocate memory separately and store a pointer to it in that\ndata member, you can also \"subclass\" the watcher type and provide your own\ndata:\n\n   struct my_io\n   {\n     ev_io io;\n     int otherfd;\n     void *somedata;\n     struct whatever *mostinteresting;\n   };\n\n   ...\n   struct my_io w;\n   ev_io_init (&w.io, my_cb, fd, EV_READ);\n\nAnd since your callback will be called with a pointer to the watcher, you\ncan cast it back to your own type:\n\n   static void my_cb (struct ev_loop *loop, ev_io *w_, int revents)\n   {\n     struct my_io *w = (struct my_io *)w_;\n     ...\n   }\n\nMore interesting and less C-conformant ways of casting your callback\nfunction type instead have been omitted.\n\n=head2 BUILDING YOUR OWN COMPOSITE WATCHERS\n\nAnother common scenario is to use some data structure with multiple\nembedded watchers, in effect creating your own watcher that combines\nmultiple libev event sources into one \"super-watcher\":\n\n   struct my_biggy\n   {\n     int some_data;\n     ev_timer t1;\n     ev_timer t2;\n   }\n\nIn this case getting the pointer to C<my_biggy> is a bit more\ncomplicated: Either you store the address of your C<my_biggy> struct in\nthe C<data> member of the watcher (for woozies or C++ coders), or you need\nto use some pointer arithmetic using C<offsetof> inside your watchers (for\nreal programmers):\n\n   #include <stddef.h>\n\n   static void\n   t1_cb (EV_P_ ev_timer *w, int revents)\n   {\n     struct my_biggy big = (struct my_biggy *)\n       (((char *)w) - offsetof (struct my_biggy, t1));\n   }\n\n   static void\n   t2_cb (EV_P_ ev_timer *w, int revents)\n   {\n     struct my_biggy big = (struct my_biggy *)\n       (((char *)w) - offsetof (struct my_biggy, t2));\n   }\n\n=head2 AVOIDING FINISHING BEFORE RETURNING\n\nOften you have structures like this in event-based programs:\n\n  callback ()\n  {\n    free (request);\n  }\n\n  request = start_new_request (..., callback);\n\nThe intent is to start some \"lengthy\" operation. The C<request> could be\nused to cancel the operation, or do other things with it.\n\nIt's not uncommon to have code paths in C<start_new_request> that\nimmediately invoke the callback, for example, to report errors. Or you add\nsome caching layer that finds that it can skip the lengthy aspects of the\noperation and simply invoke the callback with the result.\n\nThe problem here is that this will happen I<before> C<start_new_request>\nhas returned, so C<request> is not set.\n\nEven if you pass the request by some safer means to the callback, you\nmight want to do something to the request after starting it, such as\ncanceling it, which probably isn't working so well when the callback has\nalready been invoked.\n\nA common way around all these issues is to make sure that\nC<start_new_request> I<always> returns before the callback is invoked. If\nC<start_new_request> immediately knows the result, it can artificially\ndelay invoking the callback by using a C<prepare> or C<idle> watcher for\nexample, or more sneakily, by reusing an existing (stopped) watcher and\npushing it into the pending queue:\n\n   ev_set_cb (watcher, callback);\n   ev_feed_event (EV_A_ watcher, 0);\n\nThis way, C<start_new_request> can safely return before the callback is\ninvoked, while not delaying callback invocation too much.\n\n=head2 MODEL/NESTED EVENT LOOP INVOCATIONS AND EXIT CONDITIONS\n\nOften (especially in GUI toolkits) there are places where you have\nI<modal> interaction, which is most easily implemented by recursively\ninvoking C<ev_run>.\n\nThis brings the problem of exiting - a callback might want to finish the\nmain C<ev_run> call, but not the nested one (e.g. user clicked \"Quit\", but\na modal \"Are you sure?\" dialog is still waiting), or just the nested one\nand not the main one (e.g. user clocked \"Ok\" in a modal dialog), or some\nother combination: In these cases, a simple C<ev_break> will not work.\n\nThe solution is to maintain \"break this loop\" variable for each C<ev_run>\ninvocation, and use a loop around C<ev_run> until the condition is\ntriggered, using C<EVRUN_ONCE>:\n\n   // main loop\n   int exit_main_loop = 0;\n\n   while (!exit_main_loop)\n     ev_run (EV_DEFAULT_ EVRUN_ONCE);\n\n   // in a modal watcher\n   int exit_nested_loop = 0;\n\n   while (!exit_nested_loop)\n     ev_run (EV_A_ EVRUN_ONCE);\n\nTo exit from any of these loops, just set the corresponding exit variable:\n\n   // exit modal loop\n   exit_nested_loop = 1;\n\n   // exit main program, after modal loop is finished\n   exit_main_loop = 1;\n\n   // exit both\n   exit_main_loop = exit_nested_loop = 1;\n\n=head2 THREAD LOCKING EXAMPLE\n\nHere is a fictitious example of how to run an event loop in a different\nthread from where callbacks are being invoked and watchers are\ncreated/added/removed.\n\nFor a real-world example, see the C<EV::Loop::Async> perl module,\nwhich uses exactly this technique (which is suited for many high-level\nlanguages).\n\nThe example uses a pthread mutex to protect the loop data, a condition\nvariable to wait for callback invocations, an async watcher to notify the\nevent loop thread and an unspecified mechanism to wake up the main thread.\n\nFirst, you need to associate some data with the event loop:\n\n   typedef struct {\n     mutex_t lock; /* global loop lock */\n     ev_async async_w;\n     thread_t tid;\n     cond_t invoke_cv;\n   } userdata;\n\n   void prepare_loop (EV_P)\n   {\n      // for simplicity, we use a static userdata struct.\n      static userdata u;\n\n      ev_async_init (&u->async_w, async_cb);\n      ev_async_start (EV_A_ &u->async_w);\n\n      pthread_mutex_init (&u->lock, 0);\n      pthread_cond_init (&u->invoke_cv, 0);\n\n      // now associate this with the loop\n      ev_set_userdata (EV_A_ u);\n      ev_set_invoke_pending_cb (EV_A_ l_invoke);\n      ev_set_loop_release_cb (EV_A_ l_release, l_acquire);\n\n      // then create the thread running ev_run\n      pthread_create (&u->tid, 0, l_run, EV_A);\n   }\n\nThe callback for the C<ev_async> watcher does nothing: the watcher is used\nsolely to wake up the event loop so it takes notice of any new watchers\nthat might have been added:\n\n   static void\n   async_cb (EV_P_ ev_async *w, int revents)\n   {\n      // just used for the side effects\n   }\n\nThe C<l_release> and C<l_acquire> callbacks simply unlock/lock the mutex\nprotecting the loop data, respectively.\n\n   static void\n   l_release (EV_P)\n   {\n     userdata *u = ev_userdata (EV_A);\n     pthread_mutex_unlock (&u->lock);\n   }\n\n   static void\n   l_acquire (EV_P)\n   {\n     userdata *u = ev_userdata (EV_A);\n     pthread_mutex_lock (&u->lock);\n   }\n\nThe event loop thread first acquires the mutex, and then jumps straight\ninto C<ev_run>:\n\n   void *\n   l_run (void *thr_arg)\n   {\n     struct ev_loop *loop = (struct ev_loop *)thr_arg;\n\n     l_acquire (EV_A);\n     pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0);\n     ev_run (EV_A_ 0);\n     l_release (EV_A);\n\n     return 0;\n   }\n\nInstead of invoking all pending watchers, the C<l_invoke> callback will\nsignal the main thread via some unspecified mechanism (signals? pipe\nwrites? C<Async::Interrupt>?) and then waits until all pending watchers\nhave been called (in a while loop because a) spurious wakeups are possible\nand b) skipping inter-thread-communication when there are no pending\nwatchers is very beneficial):\n\n   static void\n   l_invoke (EV_P)\n   {\n     userdata *u = ev_userdata (EV_A);\n\n     while (ev_pending_count (EV_A))\n       {\n         wake_up_other_thread_in_some_magic_or_not_so_magic_way ();\n         pthread_cond_wait (&u->invoke_cv, &u->lock);\n       }\n   }\n\nNow, whenever the main thread gets told to invoke pending watchers, it\nwill grab the lock, call C<ev_invoke_pending> and then signal the loop\nthread to continue:\n\n   static void\n   real_invoke_pending (EV_P)\n   {\n     userdata *u = ev_userdata (EV_A);\n\n     pthread_mutex_lock (&u->lock);\n     ev_invoke_pending (EV_A);\n     pthread_cond_signal (&u->invoke_cv);\n     pthread_mutex_unlock (&u->lock);\n   }\n\nWhenever you want to start/stop a watcher or do other modifications to an\nevent loop, you will now have to lock:\n\n   ev_timer timeout_watcher;\n   userdata *u = ev_userdata (EV_A);\n\n   ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.);\n\n   pthread_mutex_lock (&u->lock);\n   ev_timer_start (EV_A_ &timeout_watcher);\n   ev_async_send (EV_A_ &u->async_w);\n   pthread_mutex_unlock (&u->lock);\n\nNote that sending the C<ev_async> watcher is required because otherwise\nan event loop currently blocking in the kernel will have no knowledge\nabout the newly added timer. By waking up the loop it will pick up any new\nwatchers in the next event loop iteration.\n\n=head2 THREADS, COROUTINES, CONTINUATIONS, QUEUES... INSTEAD OF CALLBACKS\n\nWhile the overhead of a callback that e.g. schedules a thread is small, it\nis still an overhead. If you embed libev, and your main usage is with some\nkind of threads or coroutines, you might want to customise libev so that\ndoesn't need callbacks anymore.\n\nImagine you have coroutines that you can switch to using a function\nC<switch_to (coro)>, that libev runs in a coroutine called C<libev_coro>\nand that due to some magic, the currently active coroutine is stored in a\nglobal called C<current_coro>. Then you can build your own \"wait for libev\nevent\" primitive by changing C<EV_CB_DECLARE> and C<EV_CB_INVOKE> (note\nthe differing C<;> conventions):\n\n   #define EV_CB_DECLARE(type)   struct my_coro *cb;\n   #define EV_CB_INVOKE(watcher) switch_to ((watcher)->cb)\n\nThat means instead of having a C callback function, you store the\ncoroutine to switch to in each watcher, and instead of having libev call\nyour callback, you instead have it switch to that coroutine.\n\nA coroutine might now wait for an event with a function called\nC<wait_for_event>. (the watcher needs to be started, as always, but it doesn't\nmatter when, or whether the watcher is active or not when this function is\ncalled):\n\n   void\n   wait_for_event (ev_watcher *w)\n   {\n     ev_set_cb (w, current_coro);\n     switch_to (libev_coro);\n   }\n\nThat basically suspends the coroutine inside C<wait_for_event> and\ncontinues the libev coroutine, which, when appropriate, switches back to\nthis or any other coroutine.\n\nYou can do similar tricks if you have, say, threads with an event queue -\ninstead of storing a coroutine, you store the queue object and instead of\nswitching to a coroutine, you push the watcher onto the queue and notify\nany waiters.\n\nTo embed libev, see L</EMBEDDING>, but in short, it's easiest to create two\nfiles, F<my_ev.h> and F<my_ev.c> that include the respective libev files:\n\n   // my_ev.h\n   #define EV_CB_DECLARE(type)   struct my_coro *cb;\n   #define EV_CB_INVOKE(watcher) switch_to ((watcher)->cb)\n   #include \"../libev/ev.h\"\n\n   // my_ev.c\n   #define EV_H \"my_ev.h\"\n   #include \"../libev/ev.c\"\n\nAnd then use F<my_ev.h> when you would normally use F<ev.h>, and compile\nF<my_ev.c> into your project. When properly specifying include paths, you\ncan even use F<ev.h> as header file name directly.\n\n\n=head1 LIBEVENT EMULATION\n\nLibev offers a compatibility emulation layer for libevent. It cannot\nemulate the internals of libevent, so here are some usage hints:\n\n=over 4\n\n=item * Only the libevent-1.4.1-beta API is being emulated.\n\nThis was the newest libevent version available when libev was implemented,\nand is still mostly unchanged in 2010.\n\n=item * Use it by including <event.h>, as usual.\n\n=item * The following members are fully supported: ev_base, ev_callback,\nev_arg, ev_fd, ev_res, ev_events.\n\n=item * Avoid using ev_flags and the EVLIST_*-macros, while it is\nmaintained by libev, it does not work exactly the same way as in libevent (consider\nit a private API).\n\n=item * Priorities are not currently supported. Initialising priorities\nwill fail and all watchers will have the same priority, even though there\nis an ev_pri field.\n\n=item * In libevent, the last base created gets the signals, in libev, the\nbase that registered the signal gets the signals.\n\n=item * Other members are not supported.\n\n=item * The libev emulation is I<not> ABI compatible to libevent, you need\nto use the libev header file and library.\n\n=back\n\n=head1 C++ SUPPORT\n\n=head2 C API\n\nThe normal C API should work fine when used from C++: both ev.h and the\nlibev sources can be compiled as C++. Therefore, code that uses the C API\nwill work fine.\n\nProper exception specifications might have to be added to callbacks passed\nto libev: exceptions may be thrown only from watcher callbacks, all\nother callbacks (allocator, syserr, loop acquire/release and periodic\nreschedule callbacks) must not throw exceptions, and might need a C<throw\n()> specification. If you have code that needs to be compiled as both C\nand C++ you can use the C<EV_THROW> macro for this:\n\n   static void\n   fatal_error (const char *msg) EV_THROW\n   {\n     perror (msg);\n     abort ();\n   }\n\n   ...\n   ev_set_syserr_cb (fatal_error);\n\nThe only API functions that can currently throw exceptions are C<ev_run>,\nC<ev_invoke>, C<ev_invoke_pending> and C<ev_loop_destroy> (the latter\nbecause it runs cleanup watchers).\n\nThrowing exceptions in watcher callbacks is only supported if libev itself\nis compiled with a C++ compiler or your C and C++ environments allow\nthrowing exceptions through C libraries (most do).\n\n=head2 C++ API\n\nLibev comes with some simplistic wrapper classes for C++ that mainly allow\nyou to use some convenience methods to start/stop watchers and also change\nthe callback model to a model using method callbacks on objects.\n\nTo use it,\n\n   #include <ev++.h>\n\nThis automatically includes F<ev.h> and puts all of its definitions (many\nof them macros) into the global namespace. All C++ specific things are\nput into the C<ev> namespace. It should support all the same embedding\noptions as F<ev.h>, most notably C<EV_MULTIPLICITY>.\n\nCare has been taken to keep the overhead low. The only data member the C++\nclasses add (compared to plain C-style watchers) is the event loop pointer\nthat the watcher is associated with (or no additional members at all if\nyou disable C<EV_MULTIPLICITY> when embedding libev).\n\nCurrently, functions, static and non-static member functions and classes\nwith C<operator ()> can be used as callbacks. Other types should be easy\nto add as long as they only need one additional pointer for context. If\nyou need support for other types of functors please contact the author\n(preferably after implementing it).\n\nFor all this to work, your C++ compiler either has to use the same calling\nconventions as your C compiler (for static member functions), or you have\nto embed libev and compile libev itself as C++.\n\nHere is a list of things available in the C<ev> namespace:\n\n=over 4\n\n=item C<ev::READ>, C<ev::WRITE> etc.\n\nThese are just enum values with the same values as the C<EV_READ> etc.\nmacros from F<ev.h>.\n\n=item C<ev::tstamp>, C<ev::now>\n\nAliases to the same types/functions as with the C<ev_> prefix.\n\n=item C<ev::io>, C<ev::timer>, C<ev::periodic>, C<ev::idle>, C<ev::sig> etc.\n\nFor each C<ev_TYPE> watcher in F<ev.h> there is a corresponding class of\nthe same name in the C<ev> namespace, with the exception of C<ev_signal>\nwhich is called C<ev::sig> to avoid clashes with the C<signal> macro\ndefined by many implementations.\n\nAll of those classes have these methods:\n\n=over 4\n\n=item ev::TYPE::TYPE ()\n\n=item ev::TYPE::TYPE (loop)\n\n=item ev::TYPE::~TYPE\n\nThe constructor (optionally) takes an event loop to associate the watcher\nwith. If it is omitted, it will use C<EV_DEFAULT>.\n\nThe constructor calls C<ev_init> for you, which means you have to call the\nC<set> method before starting it.\n\nIt will not set a callback, however: You have to call the templated C<set>\nmethod to set a callback before you can start the watcher.\n\n(The reason why you have to use a method is a limitation in C++ which does\nnot allow explicit template arguments for constructors).\n\nThe destructor automatically stops the watcher if it is active.\n\n=item w->set<class, &class::method> (object *)\n\nThis method sets the callback method to call. The method has to have a\nsignature of C<void (*)(ev_TYPE &, int)>, it receives the watcher as\nfirst argument and the C<revents> as second. The object must be given as\nparameter and is stored in the C<data> member of the watcher.\n\nThis method synthesizes efficient thunking code to call your method from\nthe C callback that libev requires. If your compiler can inline your\ncallback (i.e. it is visible to it at the place of the C<set> call and\nyour compiler is good :), then the method will be fully inlined into the\nthunking function, making it as fast as a direct C callback.\n\nExample: simple class declaration and watcher initialisation\n\n   struct myclass\n   {\n     void io_cb (ev::io &w, int revents) { }\n   }\n\n   myclass obj;\n   ev::io iow;\n   iow.set <myclass, &myclass::io_cb> (&obj);\n\n=item w->set (object *)\n\nThis is a variation of a method callback - leaving out the method to call\nwill default the method to C<operator ()>, which makes it possible to use\nfunctor objects without having to manually specify the C<operator ()> all\nthe time. Incidentally, you can then also leave out the template argument\nlist.\n\nThe C<operator ()> method prototype must be C<void operator ()(watcher &w,\nint revents)>.\n\nSee the method-C<set> above for more details.\n\nExample: use a functor object as callback.\n\n   struct myfunctor\n   {\n     void operator() (ev::io &w, int revents)\n     {\n       ...\n     }\n   }\n\n   myfunctor f;\n\n   ev::io w;\n   w.set (&f);\n\n=item w->set<function> (void *data = 0)\n\nAlso sets a callback, but uses a static method or plain function as\ncallback. The optional C<data> argument will be stored in the watcher's\nC<data> member and is free for you to use.\n\nThe prototype of the C<function> must be C<void (*)(ev::TYPE &w, int)>.\n\nSee the method-C<set> above for more details.\n\nExample: Use a plain function as callback.\n\n   static void io_cb (ev::io &w, int revents) { }\n   iow.set <io_cb> ();\n\n=item w->set (loop)\n\nAssociates a different C<struct ev_loop> with this watcher. You can only\ndo this when the watcher is inactive (and not pending either).\n\n=item w->set ([arguments])\n\nBasically the same as C<ev_TYPE_set> (except for C<ev::embed> watchers>),\nwith the same arguments. Either this method or a suitable start method\nmust be called at least once. Unlike the C counterpart, an active watcher\ngets automatically stopped and restarted when reconfiguring it with this\nmethod.\n\nFor C<ev::embed> watchers this method is called C<set_embed>, to avoid\nclashing with the C<set (loop)> method.\n\n=item w->start ()\n\nStarts the watcher. Note that there is no C<loop> argument, as the\nconstructor already stores the event loop.\n\n=item w->start ([arguments])\n\nInstead of calling C<set> and C<start> methods separately, it is often\nconvenient to wrap them in one call. Uses the same type of arguments as\nthe configure C<set> method of the watcher.\n\n=item w->stop ()\n\nStops the watcher if it is active. Again, no C<loop> argument.\n\n=item w->again () (C<ev::timer>, C<ev::periodic> only)\n\nFor C<ev::timer> and C<ev::periodic>, this invokes the corresponding\nC<ev_TYPE_again> function.\n\n=item w->sweep () (C<ev::embed> only)\n\nInvokes C<ev_embed_sweep>.\n\n=item w->update () (C<ev::stat> only)\n\nInvokes C<ev_stat_stat>.\n\n=back\n\n=back\n\nExample: Define a class with two I/O and idle watchers, start the I/O\nwatchers in the constructor.\n\n   class myclass\n   {\n     ev::io   io  ; void io_cb   (ev::io   &w, int revents);\n     ev::io   io2 ; void io2_cb  (ev::io   &w, int revents);\n     ev::idle idle; void idle_cb (ev::idle &w, int revents);\n\n     myclass (int fd)\n     {\n       io  .set <myclass, &myclass::io_cb  > (this);\n       io2 .set <myclass, &myclass::io2_cb > (this);\n       idle.set <myclass, &myclass::idle_cb> (this);\n\n       io.set (fd, ev::WRITE); // configure the watcher\n       io.start ();            // start it whenever convenient\n\n       io2.start (fd, ev::READ); // set + start in one call\n     }\n   };\n\n\n=head1 OTHER LANGUAGE BINDINGS\n\nLibev does not offer other language bindings itself, but bindings for a\nnumber of languages exist in the form of third-party packages. If you know\nany interesting language binding in addition to the ones listed here, drop\nme a note.\n\n=over 4\n\n=item Perl\n\nThe EV module implements the full libev API and is actually used to test\nlibev. EV is developed together with libev. Apart from the EV core module,\nthere are additional modules that implement libev-compatible interfaces\nto C<libadns> (C<EV::ADNS>, but C<AnyEvent::DNS> is preferred nowadays),\nC<Net::SNMP> (C<Net::SNMP::EV>) and the C<libglib> event core (C<Glib::EV>\nand C<EV::Glib>).\n\nIt can be found and installed via CPAN, its homepage is at\nL<http://software.schmorp.de/pkg/EV>.\n\n=item Python\n\nPython bindings can be found at L<http://code.google.com/p/pyev/>. It\nseems to be quite complete and well-documented.\n\n=item Ruby\n\nTony Arcieri has written a ruby extension that offers access to a subset\nof the libev API and adds file handle abstractions, asynchronous DNS and\nmore on top of it. It can be found via gem servers. Its homepage is at\nL<http://rev.rubyforge.org/>.\n\nRoger Pack reports that using the link order C<-lws2_32 -lmsvcrt-ruby-190>\nmakes rev work even on mingw.\n\n=item Haskell\n\nA haskell binding to libev is available at\nL<http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hlibev>.\n\n=item D\n\nLeandro Lucarella has written a D language binding (F<ev.d>) for libev, to\nbe found at L<http://www.llucax.com.ar/proj/ev.d/index.html>.\n\n=item Ocaml\n\nErkki Seppala has written Ocaml bindings for libev, to be found at\nL<http://modeemi.cs.tut.fi/~flux/software/ocaml-ev/>.\n\n=item Lua\n\nBrian Maher has written a partial interface to libev for lua (at the\ntime of this writing, only C<ev_io> and C<ev_timer>), to be found at\nL<http://github.com/brimworks/lua-ev>.\n\n=item Javascript\n\nNode.js (L<http://nodejs.org>) uses libev as the underlying event library.\n\n=item Others\n\nThere are others, and I stopped counting.\n\n=back\n\n\n=head1 MACRO MAGIC\n\nLibev can be compiled with a variety of options, the most fundamental\nof which is C<EV_MULTIPLICITY>. This option determines whether (most)\nfunctions and callbacks have an initial C<struct ev_loop *> argument.\n\nTo make it easier to write programs that cope with either variant, the\nfollowing macros are defined:\n\n=over 4\n\n=item C<EV_A>, C<EV_A_>\n\nThis provides the loop I<argument> for functions, if one is required (\"ev\nloop argument\"). The C<EV_A> form is used when this is the sole argument,\nC<EV_A_> is used when other arguments are following. Example:\n\n   ev_unref (EV_A);\n   ev_timer_add (EV_A_ watcher);\n   ev_run (EV_A_ 0);\n\nIt assumes the variable C<loop> of type C<struct ev_loop *> is in scope,\nwhich is often provided by the following macro.\n\n=item C<EV_P>, C<EV_P_>\n\nThis provides the loop I<parameter> for functions, if one is required (\"ev\nloop parameter\"). The C<EV_P> form is used when this is the sole parameter,\nC<EV_P_> is used when other parameters are following. Example:\n\n   // this is how ev_unref is being declared\n   static void ev_unref (EV_P);\n\n   // this is how you can declare your typical callback\n   static void cb (EV_P_ ev_timer *w, int revents)\n\nIt declares a parameter C<loop> of type C<struct ev_loop *>, quite\nsuitable for use with C<EV_A>.\n\n=item C<EV_DEFAULT>, C<EV_DEFAULT_>\n\nSimilar to the other two macros, this gives you the value of the default\nloop, if multiple loops are supported (\"ev loop default\"). The default loop\nwill be initialised if it isn't already initialised.\n\nFor non-multiplicity builds, these macros do nothing, so you always have\nto initialise the loop somewhere.\n\n=item C<EV_DEFAULT_UC>, C<EV_DEFAULT_UC_>\n\nUsage identical to C<EV_DEFAULT> and C<EV_DEFAULT_>, but requires that the\ndefault loop has been initialised (C<UC> == unchecked). Their behaviour\nis undefined when the default loop has not been initialised by a previous\nexecution of C<EV_DEFAULT>, C<EV_DEFAULT_> or C<ev_default_init (...)>.\n\nIt is often prudent to use C<EV_DEFAULT> when initialising the first\nwatcher in a function but use C<EV_DEFAULT_UC> afterwards.\n\n=back\n\nExample: Declare and initialise a check watcher, utilising the above\nmacros so it will work regardless of whether multiple loops are supported\nor not.\n\n   static void\n   check_cb (EV_P_ ev_timer *w, int revents)\n   {\n     ev_check_stop (EV_A_ w);\n   }\n\n   ev_check check;\n   ev_check_init (&check, check_cb);\n   ev_check_start (EV_DEFAULT_ &check);\n   ev_run (EV_DEFAULT_ 0);\n\n=head1 EMBEDDING\n\nLibev can (and often is) directly embedded into host\napplications. Examples of applications that embed it include the Deliantra\nGame Server, the EV perl module, the GNU Virtual Private Ethernet (gvpe)\nand rxvt-unicode.\n\nThe goal is to enable you to just copy the necessary files into your\nsource directory without having to change even a single line in them, so\nyou can easily upgrade by simply copying (or having a checked-out copy of\nlibev somewhere in your source tree).\n\n=head2 FILESETS\n\nDepending on what features you need you need to include one or more sets of files\nin your application.\n\n=head3 CORE EVENT LOOP\n\nTo include only the libev core (all the C<ev_*> functions), with manual\nconfiguration (no autoconf):\n\n   #define EV_STANDALONE 1\n   #include \"ev.c\"\n\nThis will automatically include F<ev.h>, too, and should be done in a\nsingle C source file only to provide the function implementations. To use\nit, do the same for F<ev.h> in all files wishing to use this API (best\ndone by writing a wrapper around F<ev.h> that you can include instead and\nwhere you can put other configuration options):\n\n   #define EV_STANDALONE 1\n   #include \"ev.h\"\n\nBoth header files and implementation files can be compiled with a C++\ncompiler (at least, that's a stated goal, and breakage will be treated\nas a bug).\n\nYou need the following files in your source tree, or in a directory\nin your include path (e.g. in libev/ when using -Ilibev):\n\n   ev.h\n   ev.c\n   ev_vars.h\n   ev_wrap.h\n\n   ev_win32.c      required on win32 platforms only\n\n   ev_select.c     only when select backend is enabled (which is enabled by default)\n   ev_poll.c       only when poll backend is enabled (disabled by default)\n   ev_epoll.c      only when the epoll backend is enabled (disabled by default)\n   ev_kqueue.c     only when the kqueue backend is enabled (disabled by default)\n   ev_port.c       only when the solaris port backend is enabled (disabled by default)\n\nF<ev.c> includes the backend files directly when enabled, so you only need\nto compile this single file.\n\n=head3 LIBEVENT COMPATIBILITY API\n\nTo include the libevent compatibility API, also include:\n\n   #include \"event.c\"\n\nin the file including F<ev.c>, and:\n\n   #include \"event.h\"\n\nin the files that want to use the libevent API. This also includes F<ev.h>.\n\nYou need the following additional files for this:\n\n   event.h\n   event.c\n\n=head3 AUTOCONF SUPPORT\n\nInstead of using C<EV_STANDALONE=1> and providing your configuration in\nwhatever way you want, you can also C<m4_include([libev.m4])> in your\nF<configure.ac> and leave C<EV_STANDALONE> undefined. F<ev.c> will then\ninclude F<config.h> and configure itself accordingly.\n\nFor this of course you need the m4 file:\n\n   libev.m4\n\n=head2 PREPROCESSOR SYMBOLS/MACROS\n\nLibev can be configured via a variety of preprocessor symbols you have to\ndefine before including (or compiling) any of its files. The default in\nthe absence of autoconf is documented for every option.\n\nSymbols marked with \"(h)\" do not change the ABI, and can have different\nvalues when compiling libev vs. including F<ev.h>, so it is permissible\nto redefine them before including F<ev.h> without breaking compatibility\nto a compiled library. All other symbols change the ABI, which means all\nusers of libev and the libev code itself must be compiled with compatible\nsettings.\n\n=over 4\n\n=item EV_COMPAT3 (h)\n\nBackwards compatibility is a major concern for libev. This is why this\nrelease of libev comes with wrappers for the functions and symbols that\nhave been renamed between libev version 3 and 4.\n\nYou can disable these wrappers (to test compatibility with future\nversions) by defining C<EV_COMPAT3> to C<0> when compiling your\nsources. This has the additional advantage that you can drop the C<struct>\nfrom C<struct ev_loop> declarations, as libev will provide an C<ev_loop>\ntypedef in that case.\n\nIn some future version, the default for C<EV_COMPAT3> will become C<0>,\nand in some even more future version the compatibility code will be\nremoved completely.\n\n=item EV_STANDALONE (h)\n\nMust always be C<1> if you do not use autoconf configuration, which\nkeeps libev from including F<config.h>, and it also defines dummy\nimplementations for some libevent functions (such as logging, which is not\nsupported). It will also not define any of the structs usually found in\nF<event.h> that are not directly supported by the libev core alone.\n\nIn standalone mode, libev will still try to automatically deduce the\nconfiguration, but has to be more conservative.\n\n=item EV_USE_FLOOR\n\nIf defined to be C<1>, libev will use the C<floor ()> function for its\nperiodic reschedule calculations, otherwise libev will fall back on a\nportable (slower) implementation. If you enable this, you usually have to\nlink against libm or something equivalent. Enabling this when the C<floor>\nfunction is not available will fail, so the safe default is to not enable\nthis.\n\n=item EV_USE_MONOTONIC\n\nIf defined to be C<1>, libev will try to detect the availability of the\nmonotonic clock option at both compile time and runtime. Otherwise no\nuse of the monotonic clock option will be attempted. If you enable this,\nyou usually have to link against librt or something similar. Enabling it\nwhen the functionality isn't available is safe, though, although you have\nto make sure you link against any libraries where the C<clock_gettime>\nfunction is hiding in (often F<-lrt>). See also C<EV_USE_CLOCK_SYSCALL>.\n\n=item EV_USE_REALTIME\n\nIf defined to be C<1>, libev will try to detect the availability of the\nreal-time clock option at compile time (and assume its availability\nat runtime if successful). Otherwise no use of the real-time clock\noption will be attempted. This effectively replaces C<gettimeofday>\nby C<clock_get (CLOCK_REALTIME, ...)> and will not normally affect\ncorrectness. See the note about libraries in the description of\nC<EV_USE_MONOTONIC>, though. Defaults to the opposite value of\nC<EV_USE_CLOCK_SYSCALL>.\n\n=item EV_USE_CLOCK_SYSCALL\n\nIf defined to be C<1>, libev will try to use a direct syscall instead\nof calling the system-provided C<clock_gettime> function. This option\nexists because on GNU/Linux, C<clock_gettime> is in C<librt>, but C<librt>\nunconditionally pulls in C<libpthread>, slowing down single-threaded\nprograms needlessly. Using a direct syscall is slightly slower (in\ntheory), because no optimised vdso implementation can be used, but avoids\nthe pthread dependency. Defaults to C<1> on GNU/Linux with glibc 2.x or\nhigher, as it simplifies linking (no need for C<-lrt>).\n\n=item EV_USE_NANOSLEEP\n\nIf defined to be C<1>, libev will assume that C<nanosleep ()> is available\nand will use it for delays. Otherwise it will use C<select ()>.\n\n=item EV_USE_EVENTFD\n\nIf defined to be C<1>, then libev will assume that C<eventfd ()> is\navailable and will probe for kernel support at runtime. This will improve\nC<ev_signal> and C<ev_async> performance and reduce resource consumption.\nIf undefined, it will be enabled if the headers indicate GNU/Linux + Glibc\n2.7 or newer, otherwise disabled.\n\n=item EV_USE_SELECT\n\nIf undefined or defined to be C<1>, libev will compile in support for the\nC<select>(2) backend. No attempt at auto-detection will be done: if no\nother method takes over, select will be it. Otherwise the select backend\nwill not be compiled in.\n\n=item EV_SELECT_USE_FD_SET\n\nIf defined to C<1>, then the select backend will use the system C<fd_set>\nstructure. This is useful if libev doesn't compile due to a missing\nC<NFDBITS> or C<fd_mask> definition or it mis-guesses the bitset layout\non exotic systems. This usually limits the range of file descriptors to\nsome low limit such as 1024 or might have other limitations (winsocket\nonly allows 64 sockets). The C<FD_SETSIZE> macro, set before compilation,\nconfigures the maximum size of the C<fd_set>.\n\n=item EV_SELECT_IS_WINSOCKET\n\nWhen defined to C<1>, the select backend will assume that\nselect/socket/connect etc. don't understand file descriptors but\nwants osf handles on win32 (this is the case when the select to\nbe used is the winsock select). This means that it will call\nC<_get_osfhandle> on the fd to convert it to an OS handle. Otherwise,\nit is assumed that all these functions actually work on fds, even\non win32. Should not be defined on non-win32 platforms.\n\n=item EV_FD_TO_WIN32_HANDLE(fd)\n\nIf C<EV_SELECT_IS_WINSOCKET> is enabled, then libev needs a way to map\nfile descriptors to socket handles. When not defining this symbol (the\ndefault), then libev will call C<_get_osfhandle>, which is usually\ncorrect. In some cases, programs use their own file descriptor management,\nin which case they can provide this function to map fds to socket handles.\n\n=item EV_WIN32_HANDLE_TO_FD(handle)\n\nIf C<EV_SELECT_IS_WINSOCKET> then libev maps handles to file descriptors\nusing the standard C<_open_osfhandle> function. For programs implementing\ntheir own fd to handle mapping, overwriting this function makes it easier\nto do so. This can be done by defining this macro to an appropriate value.\n\n=item EV_WIN32_CLOSE_FD(fd)\n\nIf programs implement their own fd to handle mapping on win32, then this\nmacro can be used to override the C<close> function, useful to unregister\nfile descriptors again. Note that the replacement function has to close\nthe underlying OS handle.\n\n=item EV_USE_WSASOCKET\n\nIf defined to be C<1>, libev will use C<WSASocket> to create its internal\ncommunication socket, which works better in some environments. Otherwise,\nthe normal C<socket> function will be used, which works better in other\nenvironments.\n\n=item EV_USE_POLL\n\nIf defined to be C<1>, libev will compile in support for the C<poll>(2)\nbackend. Otherwise it will be enabled on non-win32 platforms. It\ntakes precedence over select.\n\n=item EV_USE_EPOLL\n\nIf defined to be C<1>, libev will compile in support for the Linux\nC<epoll>(7) backend. Its availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for GNU/Linux systems. If undefined, it will be enabled if the\nheaders indicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.\n\n=item EV_USE_KQUEUE\n\nIf defined to be C<1>, libev will compile in support for the BSD style\nC<kqueue>(2) backend. Its actual availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for BSD and BSD-like systems, although on most BSDs kqueue only\nsupports some types of fds correctly (the only platform we found that\nsupports ptys for example was NetBSD), so kqueue might be compiled in, but\nnot be used unless explicitly requested. The best way to use it is to find\nout whether kqueue supports your type of fd properly and use an embedded\nkqueue loop.\n\n=item EV_USE_PORT\n\nIf defined to be C<1>, libev will compile in support for the Solaris\n10 port style backend. Its availability will be detected at runtime,\notherwise another method will be used as fallback. This is the preferred\nbackend for Solaris 10 systems.\n\n=item EV_USE_DEVPOLL\n\nReserved for future expansion, works like the USE symbols above.\n\n=item EV_USE_INOTIFY\n\nIf defined to be C<1>, libev will compile in support for the Linux inotify\ninterface to speed up C<ev_stat> watchers. Its actual availability will\nbe detected at runtime. If undefined, it will be enabled if the headers\nindicate GNU/Linux + Glibc 2.4 or newer, otherwise disabled.\n\n=item EV_NO_SMP\n\nIf defined to be C<1>, libev will assume that memory is always coherent\nbetween threads, that is, threads can be used, but threads never run on\ndifferent cpus (or different cpu cores). This reduces dependencies\nand makes libev faster.\n\n=item EV_NO_THREADS\n\nIf defined to be C<1>, libev will assume that it will never be called from\ndifferent threads (that includes signal handlers), which is a stronger\nassumption than C<EV_NO_SMP>, above. This reduces dependencies and makes\nlibev faster.\n\n=item EV_ATOMIC_T\n\nLibev requires an integer type (suitable for storing C<0> or C<1>) whose\naccess is atomic with respect to other threads or signal contexts. No\nsuch type is easily found in the C language, so you can provide your own\ntype that you know is safe for your purposes. It is used both for signal\nhandler \"locking\" as well as for signal and thread safety in C<ev_async>\nwatchers.\n\nIn the absence of this define, libev will use C<sig_atomic_t volatile>\n(from F<signal.h>), which is usually good enough on most platforms.\n\n=item EV_H (h)\n\nThe name of the F<ev.h> header file used to include it. The default if\nundefined is C<\"ev.h\"> in F<event.h>, F<ev.c> and F<ev++.h>. This can be\nused to virtually rename the F<ev.h> header file in case of conflicts.\n\n=item EV_CONFIG_H (h)\n\nIf C<EV_STANDALONE> isn't C<1>, this variable can be used to override\nF<ev.c>'s idea of where to find the F<config.h> file, similarly to\nC<EV_H>, above.\n\n=item EV_EVENT_H (h)\n\nSimilarly to C<EV_H>, this macro can be used to override F<event.c>'s idea\nof how the F<event.h> header can be found, the default is C<\"event.h\">.\n\n=item EV_PROTOTYPES (h)\n\nIf defined to be C<0>, then F<ev.h> will not define any function\nprototypes, but still define all the structs and other symbols. This is\noccasionally useful if you want to provide your own wrapper functions\naround libev functions.\n\n=item EV_MULTIPLICITY\n\nIf undefined or defined to C<1>, then all event-loop-specific functions\nwill have the C<struct ev_loop *> as first argument, and you can create\nadditional independent event loops. Otherwise there will be no support\nfor multiple event loops and there is no first event loop pointer\nargument. Instead, all functions act on the single default loop.\n\nNote that C<EV_DEFAULT> and C<EV_DEFAULT_> will no longer provide a\ndefault loop when multiplicity is switched off - you always have to\ninitialise the loop manually in this case.\n\n=item EV_MINPRI\n\n=item EV_MAXPRI\n\nThe range of allowed priorities. C<EV_MINPRI> must be smaller or equal to\nC<EV_MAXPRI>, but otherwise there are no non-obvious limitations. You can\nprovide for more priorities by overriding those symbols (usually defined\nto be C<-2> and C<2>, respectively).\n\nWhen doing priority-based operations, libev usually has to linearly search\nall the priorities, so having many of them (hundreds) uses a lot of space\nand time, so using the defaults of five priorities (-2 .. +2) is usually\nfine.\n\nIf your embedding application does not need any priorities, defining these\nboth to C<0> will save some memory and CPU.\n\n=item EV_PERIODIC_ENABLE, EV_IDLE_ENABLE, EV_EMBED_ENABLE, EV_STAT_ENABLE,\nEV_PREPARE_ENABLE, EV_CHECK_ENABLE, EV_FORK_ENABLE, EV_SIGNAL_ENABLE,\nEV_ASYNC_ENABLE, EV_CHILD_ENABLE.\n\nIf undefined or defined to be C<1> (and the platform supports it), then\nthe respective watcher type is supported. If defined to be C<0>, then it\nis not. Disabling watcher types mainly saves code size.\n\n=item EV_FEATURES\n\nIf you need to shave off some kilobytes of code at the expense of some\nspeed (but with the full API), you can define this symbol to request\ncertain subsets of functionality. The default is to enable all features\nthat can be enabled on the platform.\n\nA typical way to use this symbol is to define it to C<0> (or to a bitset\nwith some broad features you want) and then selectively re-enable\nadditional parts you want, for example if you want everything minimal,\nbut multiple event loop support, async and child watchers and the poll\nbackend, use this:\n\n   #define EV_FEATURES 0\n   #define EV_MULTIPLICITY 1\n   #define EV_USE_POLL 1\n   #define EV_CHILD_ENABLE 1\n   #define EV_ASYNC_ENABLE 1\n\nThe actual value is a bitset, it can be a combination of the following\nvalues (by default, all of these are enabled):\n\n=over 4\n\n=item C<1> - faster/larger code\n\nUse larger code to speed up some operations.\n\nCurrently this is used to override some inlining decisions (enlarging the\ncode size by roughly 30% on amd64).\n\nWhen optimising for size, use of compiler flags such as C<-Os> with\ngcc is recommended, as well as C<-DNDEBUG>, as libev contains a number of\nassertions.\n\nThe default is off when C<__OPTIMIZE_SIZE__> is defined by your compiler\n(e.g. gcc with C<-Os>).\n\n=item C<2> - faster/larger data structures\n\nReplaces the small 2-heap for timer management by a faster 4-heap, larger\nhash table sizes and so on. This will usually further increase code size\nand can additionally have an effect on the size of data structures at\nruntime.\n\nThe default is off when C<__OPTIMIZE_SIZE__> is defined by your compiler\n(e.g. gcc with C<-Os>).\n\n=item C<4> - full API configuration\n\nThis enables priorities (sets C<EV_MAXPRI>=2 and C<EV_MINPRI>=-2), and\nenables multiplicity (C<EV_MULTIPLICITY>=1).\n\n=item C<8> - full API\n\nThis enables a lot of the \"lesser used\" API functions. See C<ev.h> for\ndetails on which parts of the API are still available without this\nfeature, and do not complain if this subset changes over time.\n\n=item C<16> - enable all optional watcher types\n\nEnables all optional watcher types.  If you want to selectively enable\nonly some watcher types other than I/O and timers (e.g. prepare,\nembed, async, child...) you can enable them manually by defining\nC<EV_watchertype_ENABLE> to C<1> instead.\n\n=item C<32> - enable all backends\n\nThis enables all backends - without this feature, you need to enable at\nleast one backend manually (C<EV_USE_SELECT> is a good choice).\n\n=item C<64> - enable OS-specific \"helper\" APIs\n\nEnable inotify, eventfd, signalfd and similar OS-specific helper APIs by\ndefault.\n\n=back\n\nCompiling with C<gcc -Os -DEV_STANDALONE -DEV_USE_EPOLL=1 -DEV_FEATURES=0>\nreduces the compiled size of libev from 24.7Kb code/2.8Kb data to 6.5Kb\ncode/0.3Kb data on my GNU/Linux amd64 system, while still giving you I/O\nwatchers, timers and monotonic clock support.\n\nWith an intelligent-enough linker (gcc+binutils are intelligent enough\nwhen you use C<-Wl,--gc-sections -ffunction-sections>) functions unused by\nyour program might be left out as well - a binary starting a timer and an\nI/O watcher then might come out at only 5Kb.\n\n=item EV_API_STATIC\n\nIf this symbol is defined (by default it is not), then all identifiers\nwill have static linkage. This means that libev will not export any\nidentifiers, and you cannot link against libev anymore. This can be useful\nwhen you embed libev, only want to use libev functions in a single file,\nand do not want its identifiers to be visible.\n\nTo use this, define C<EV_API_STATIC> and include F<ev.c> in the file that\nwants to use libev.\n\nThis option only works when libev is compiled with a C compiler, as C++\ndoesn't support the required declaration syntax.\n\n=item EV_AVOID_STDIO\n\nIf this is set to C<1> at compiletime, then libev will avoid using stdio\nfunctions (printf, scanf, perror etc.). This will increase the code size\nsomewhat, but if your program doesn't otherwise depend on stdio and your\nlibc allows it, this avoids linking in the stdio library which is quite\nbig.\n\nNote that error messages might become less precise when this option is\nenabled.\n\n=item EV_NSIG\n\nThe highest supported signal number, +1 (or, the number of\nsignals): Normally, libev tries to deduce the maximum number of signals\nautomatically, but sometimes this fails, in which case it can be\nspecified. Also, using a lower number than detected (C<32> should be\ngood for about any system in existence) can save some memory, as libev\nstatically allocates some 12-24 bytes per signal number.\n\n=item EV_PID_HASHSIZE\n\nC<ev_child> watchers use a small hash table to distribute workload by\npid. The default size is C<16> (or C<1> with C<EV_FEATURES> disabled),\nusually more than enough. If you need to manage thousands of children you\nmight want to increase this value (I<must> be a power of two).\n\n=item EV_INOTIFY_HASHSIZE\n\nC<ev_stat> watchers use a small hash table to distribute workload by\ninotify watch id. The default size is C<16> (or C<1> with C<EV_FEATURES>\ndisabled), usually more than enough. If you need to manage thousands of\nC<ev_stat> watchers you might want to increase this value (I<must> be a\npower of two).\n\n=item EV_USE_4HEAP\n\nHeaps are not very cache-efficient. To improve the cache-efficiency of the\ntimer and periodics heaps, libev uses a 4-heap when this symbol is defined\nto C<1>. The 4-heap uses more complicated (longer) code but has noticeably\nfaster performance with many (thousands) of watchers.\n\nThe default is C<1>, unless C<EV_FEATURES> overrides it, in which case it\nwill be C<0>.\n\n=item EV_HEAP_CACHE_AT\n\nHeaps are not very cache-efficient. To improve the cache-efficiency of the\ntimer and periodics heaps, libev can cache the timestamp (I<at>) within\nthe heap structure (selected by defining C<EV_HEAP_CACHE_AT> to C<1>),\nwhich uses 8-12 bytes more per watcher and a few hundred bytes more code,\nbut avoids random read accesses on heap changes. This improves performance\nnoticeably with many (hundreds) of watchers.\n\nThe default is C<1>, unless C<EV_FEATURES> overrides it, in which case it\nwill be C<0>.\n\n=item EV_VERIFY\n\nControls how much internal verification (see C<ev_verify ()>) will\nbe done: If set to C<0>, no internal verification code will be compiled\nin. If set to C<1>, then verification code will be compiled in, but not\ncalled. If set to C<2>, then the internal verification code will be\ncalled once per loop, which can slow down libev. If set to C<3>, then the\nverification code will be called very frequently, which will slow down\nlibev considerably.\n\nThe default is C<1>, unless C<EV_FEATURES> overrides it, in which case it\nwill be C<0>.\n\n=item EV_COMMON\n\nBy default, all watchers have a C<void *data> member. By redefining\nthis macro to something else you can include more and other types of\nmembers. You have to define it each time you include one of the files,\nthough, and it must be identical each time.\n\nFor example, the perl EV module uses something like this:\n\n   #define EV_COMMON                       \\\n     SV *self; /* contains this struct */  \\\n     SV *cb_sv, *fh /* note no trailing \";\" */\n\n=item EV_CB_DECLARE (type)\n\n=item EV_CB_INVOKE (watcher, revents)\n\n=item ev_set_cb (ev, cb)\n\nCan be used to change the callback member declaration in each watcher,\nand the way callbacks are invoked and set. Must expand to a struct member\ndefinition and a statement, respectively. See the F<ev.h> header file for\ntheir default definitions. One possible use for overriding these is to\navoid the C<struct ev_loop *> as first argument in all cases, or to use\nmethod calls instead of plain function calls in C++.\n\n=back\n\n=head2 EXPORTED API SYMBOLS\n\nIf you need to re-export the API (e.g. via a DLL) and you need a list of\nexported symbols, you can use the provided F<Symbol.*> files which list\nall public symbols, one per line:\n\n   Symbols.ev      for libev proper\n   Symbols.event   for the libevent emulation\n\nThis can also be used to rename all public symbols to avoid clashes with\nmultiple versions of libev linked together (which is obviously bad in\nitself, but sometimes it is inconvenient to avoid this).\n\nA sed command like this will create wrapper C<#define>'s that you need to\ninclude before including F<ev.h>:\n\n   <Symbols.ev sed -e \"s/.*/#define & myprefix_&/\" >wrap.h\n\nThis would create a file F<wrap.h> which essentially looks like this:\n\n   #define ev_backend     myprefix_ev_backend\n   #define ev_check_start myprefix_ev_check_start\n   #define ev_check_stop  myprefix_ev_check_stop\n   ...\n\n=head2 EXAMPLES\n\nFor a real-world example of a program the includes libev\nverbatim, you can have a look at the EV perl module\n(L<http://software.schmorp.de/pkg/EV.html>). It has the libev files in\nthe F<libev/> subdirectory and includes them in the F<EV/EVAPI.h> (public\ninterface) and F<EV.xs> (implementation) files. Only the F<EV.xs> file\nwill be compiled. It is pretty complex because it provides its own header\nfile.\n\nThe usage in rxvt-unicode is simpler. It has a F<ev_cpp.h> header file\nthat everybody includes and which overrides some configure choices:\n\n   #define EV_FEATURES 8\n   #define EV_USE_SELECT 1\n   #define EV_PREPARE_ENABLE 1\n   #define EV_IDLE_ENABLE 1\n   #define EV_SIGNAL_ENABLE 1\n   #define EV_CHILD_ENABLE 1\n   #define EV_USE_STDEXCEPT 0\n   #define EV_CONFIG_H <config.h>\n\n   #include \"ev++.h\"\n\nAnd a F<ev_cpp.C> implementation file that contains libev proper and is compiled:\n\n   #include \"ev_cpp.h\"\n   #include \"ev.c\"\n\n=head1 INTERACTION WITH OTHER PROGRAMS, LIBRARIES OR THE ENVIRONMENT\n\n=head2 THREADS AND COROUTINES\n\n=head3 THREADS\n\nAll libev functions are reentrant and thread-safe unless explicitly\ndocumented otherwise, but libev implements no locking itself. This means\nthat you can use as many loops as you want in parallel, as long as there\nare no concurrent calls into any libev function with the same loop\nparameter (C<ev_default_*> calls have an implicit default loop parameter,\nof course): libev guarantees that different event loops share no data\nstructures that need any locking.\n\nOr to put it differently: calls with different loop parameters can be done\nconcurrently from multiple threads, calls with the same loop parameter\nmust be done serially (but can be done from different threads, as long as\nonly one thread ever is inside a call at any point in time, e.g. by using\na mutex per loop).\n\nSpecifically to support threads (and signal handlers), libev implements\nso-called C<ev_async> watchers, which allow some limited form of\nconcurrency on the same event loop, namely waking it up \"from the\noutside\".\n\nIf you want to know which design (one loop, locking, or multiple loops\nwithout or something else still) is best for your problem, then I cannot\nhelp you, but here is some generic advice:\n\n=over 4\n\n=item * most applications have a main thread: use the default libev loop\nin that thread, or create a separate thread running only the default loop.\n\nThis helps integrating other libraries or software modules that use libev\nthemselves and don't care/know about threading.\n\n=item * one loop per thread is usually a good model.\n\nDoing this is almost never wrong, sometimes a better-performance model\nexists, but it is always a good start.\n\n=item * other models exist, such as the leader/follower pattern, where one\nloop is handed through multiple threads in a kind of round-robin fashion.\n\nChoosing a model is hard - look around, learn, know that usually you can do\nbetter than you currently do :-)\n\n=item * often you need to talk to some other thread which blocks in the\nevent loop.\n\nC<ev_async> watchers can be used to wake them up from other threads safely\n(or from signal contexts...).\n\nAn example use would be to communicate signals or other events that only\nwork in the default loop by registering the signal watcher with the\ndefault loop and triggering an C<ev_async> watcher from the default loop\nwatcher callback into the event loop interested in the signal.\n\n=back\n\nSee also L</THREAD LOCKING EXAMPLE>.\n\n=head3 COROUTINES\n\nLibev is very accommodating to coroutines (\"cooperative threads\"):\nlibev fully supports nesting calls to its functions from different\ncoroutines (e.g. you can call C<ev_run> on the same loop from two\ndifferent coroutines, and switch freely between both coroutines running\nthe loop, as long as you don't confuse yourself). The only exception is\nthat you must not do this from C<ev_periodic> reschedule callbacks.\n\nCare has been taken to ensure that libev does not keep local state inside\nC<ev_run>, and other calls do not usually allow for coroutine switches as\nthey do not call any callbacks.\n\n=head2 COMPILER WARNINGS\n\nDepending on your compiler and compiler settings, you might get no or a\nlot of warnings when compiling libev code. Some people are apparently\nscared by this.\n\nHowever, these are unavoidable for many reasons. For one, each compiler\nhas different warnings, and each user has different tastes regarding\nwarning options. \"Warn-free\" code therefore cannot be a goal except when\ntargeting a specific compiler and compiler-version.\n\nAnother reason is that some compiler warnings require elaborate\nworkarounds, or other changes to the code that make it less clear and less\nmaintainable.\n\nAnd of course, some compiler warnings are just plain stupid, or simply\nwrong (because they don't actually warn about the condition their message\nseems to warn about). For example, certain older gcc versions had some\nwarnings that resulted in an extreme number of false positives. These have\nbeen fixed, but some people still insist on making code warn-free with\nsuch buggy versions.\n\nWhile libev is written to generate as few warnings as possible,\n\"warn-free\" code is not a goal, and it is recommended not to build libev\nwith any compiler warnings enabled unless you are prepared to cope with\nthem (e.g. by ignoring them). Remember that warnings are just that:\nwarnings, not errors, or proof of bugs.\n\n\n=head2 VALGRIND\n\nValgrind has a special section here because it is a popular tool that is\nhighly useful. Unfortunately, valgrind reports are very hard to interpret.\n\nIf you think you found a bug (memory leak, uninitialised data access etc.)\nin libev, then check twice: If valgrind reports something like:\n\n   ==2274==    definitely lost: 0 bytes in 0 blocks.\n   ==2274==      possibly lost: 0 bytes in 0 blocks.\n   ==2274==    still reachable: 256 bytes in 1 blocks.\n\nThen there is no memory leak, just as memory accounted to global variables\nis not a memleak - the memory is still being referenced, and didn't leak.\n\nSimilarly, under some circumstances, valgrind might report kernel bugs\nas if it were a bug in libev (e.g. in realloc or in the poll backend,\nalthough an acceptable workaround has been found here), or it might be\nconfused.\n\nKeep in mind that valgrind is a very good tool, but only a tool. Don't\nmake it into some kind of religion.\n\nIf you are unsure about something, feel free to contact the mailing list\nwith the full valgrind report and an explanation on why you think this\nis a bug in libev (best check the archives, too :). However, don't be\nannoyed when you get a brisk \"this is no bug\" answer and take the chance\nof learning how to interpret valgrind properly.\n\nIf you need, for some reason, empty reports from valgrind for your project\nI suggest using suppression lists.\n\n\n=head1 PORTABILITY NOTES\n\n=head2 GNU/LINUX 32 BIT LIMITATIONS\n\nGNU/Linux is the only common platform that supports 64 bit file/large file\ninterfaces but I<disables> them by default.\n\nThat means that libev compiled in the default environment doesn't support\nfiles larger than 2GiB or so, which mainly affects C<ev_stat> watchers.\n\nUnfortunately, many programs try to work around this GNU/Linux issue\nby enabling the large file API, which makes them incompatible with the\nstandard libev compiled for their system.\n\nLikewise, libev cannot enable the large file API itself as this would\nsuddenly make it incompatible to the default compile time environment,\ni.e. all programs not using special compile switches.\n\n=head2 OS/X AND DARWIN BUGS\n\nThe whole thing is a bug if you ask me - basically any system interface\nyou touch is broken, whether it is locales, poll, kqueue or even the\nOpenGL drivers.\n\n=head3 C<kqueue> is buggy\n\nThe kqueue syscall is broken in all known versions - most versions support\nonly sockets, many support pipes.\n\nLibev tries to work around this by not using C<kqueue> by default on this\nrotten platform, but of course you can still ask for it when creating a\nloop - embedding a socket-only kqueue loop into a select-based one is\nprobably going to work well.\n\n=head3 C<poll> is buggy\n\nInstead of fixing C<kqueue>, Apple replaced their (working) C<poll>\nimplementation by something calling C<kqueue> internally around the 10.5.6\nrelease, so now C<kqueue> I<and> C<poll> are broken.\n\nLibev tries to work around this by not using C<poll> by default on\nthis rotten platform, but of course you can still ask for it when creating\na loop.\n\n=head3 C<select> is buggy\n\nAll that's left is C<select>, and of course Apple found a way to fuck this\none up as well: On OS/X, C<select> actively limits the number of file\ndescriptors you can pass in to 1024 - your program suddenly crashes when\nyou use more.\n\nThere is an undocumented \"workaround\" for this - defining\nC<_DARWIN_UNLIMITED_SELECT>, which libev tries to use, so select I<should>\nwork on OS/X.\n\n=head2 SOLARIS PROBLEMS AND WORKAROUNDS\n\n=head3 C<errno> reentrancy\n\nThe default compile environment on Solaris is unfortunately so\nthread-unsafe that you can't even use components/libraries compiled\nwithout C<-D_REENTRANT> in a threaded program, which, of course, isn't\ndefined by default. A valid, if stupid, implementation choice.\n\nIf you want to use libev in threaded environments you have to make sure\nit's compiled with C<_REENTRANT> defined.\n\n=head3 Event port backend\n\nThe scalable event interface for Solaris is called \"event\nports\". Unfortunately, this mechanism is very buggy in all major\nreleases. If you run into high CPU usage, your program freezes or you get\na large number of spurious wakeups, make sure you have all the relevant\nand latest kernel patches applied. No, I don't know which ones, but there\nare multiple ones to apply, and afterwards, event ports actually work\ngreat.\n\nIf you can't get it to work, you can try running the program by setting\nthe environment variable C<LIBEV_FLAGS=3> to only allow C<poll> and\nC<select> backends.\n\n=head2 AIX POLL BUG\n\nAIX unfortunately has a broken C<poll.h> header. Libev works around\nthis by trying to avoid the poll backend altogether (i.e. it's not even\ncompiled in), which normally isn't a big problem as C<select> works fine\nwith large bitsets on AIX, and AIX is dead anyway.\n\n=head2 WIN32 PLATFORM LIMITATIONS AND WORKAROUNDS\n\n=head3 General issues\n\nWin32 doesn't support any of the standards (e.g. POSIX) that libev\nrequires, and its I/O model is fundamentally incompatible with the POSIX\nmodel. Libev still offers limited functionality on this platform in\nthe form of the C<EVBACKEND_SELECT> backend, and only supports socket\ndescriptors. This only applies when using Win32 natively, not when using\ne.g. cygwin. Actually, it only applies to the microsofts own compilers,\nas every compiler comes with a slightly differently broken/incompatible\nenvironment.\n\nLifting these limitations would basically require the full\nre-implementation of the I/O system. If you are into this kind of thing,\nthen note that glib does exactly that for you in a very portable way (note\nalso that glib is the slowest event library known to man).\n\nThere is no supported compilation method available on windows except\nembedding it into other applications.\n\nSensible signal handling is officially unsupported by Microsoft - libev\ntries its best, but under most conditions, signals will simply not work.\n\nNot a libev limitation but worth mentioning: windows apparently doesn't\naccept large writes: instead of resulting in a partial write, windows will\neither accept everything or return C<ENOBUFS> if the buffer is too large,\nso make sure you only write small amounts into your sockets (less than a\nmegabyte seems safe, but this apparently depends on the amount of memory\navailable).\n\nDue to the many, low, and arbitrary limits on the win32 platform and\nthe abysmal performance of winsockets, using a large number of sockets\nis not recommended (and not reasonable). If your program needs to use\nmore than a hundred or so sockets, then likely it needs to use a totally\ndifferent implementation for windows, as libev offers the POSIX readiness\nnotification model, which cannot be implemented efficiently on windows\n(due to Microsoft monopoly games).\n\nA typical way to use libev under windows is to embed it (see the embedding\nsection for details) and use the following F<evwrap.h> header file instead\nof F<ev.h>:\n\n   #define EV_STANDALONE              /* keeps ev from requiring config.h */\n   #define EV_SELECT_IS_WINSOCKET 1   /* configure libev for windows select */\n\n   #include \"ev.h\"\n\nAnd compile the following F<evwrap.c> file into your project (make sure\nyou do I<not> compile the F<ev.c> or any other embedded source files!):\n\n   #include \"evwrap.h\"\n   #include \"ev.c\"\n\n=head3 The winsocket C<select> function\n\nThe winsocket C<select> function doesn't follow POSIX in that it\nrequires socket I<handles> and not socket I<file descriptors> (it is\nalso extremely buggy). This makes select very inefficient, and also\nrequires a mapping from file descriptors to socket handles (the Microsoft\nC runtime provides the function C<_open_osfhandle> for this). See the\ndiscussion of the C<EV_SELECT_USE_FD_SET>, C<EV_SELECT_IS_WINSOCKET> and\nC<EV_FD_TO_WIN32_HANDLE> preprocessor symbols for more info.\n\nThe configuration for a \"naked\" win32 using the Microsoft runtime\nlibraries and raw winsocket select is:\n\n   #define EV_USE_SELECT 1\n   #define EV_SELECT_IS_WINSOCKET 1   /* forces EV_SELECT_USE_FD_SET, too */\n\nNote that winsockets handling of fd sets is O(n), so you can easily get a\ncomplexity in the O(n²) range when using win32.\n\n=head3 Limited number of file descriptors\n\nWindows has numerous arbitrary (and low) limits on things.\n\nEarly versions of winsocket's select only supported waiting for a maximum\nof C<64> handles (probably owning to the fact that all windows kernels\ncan only wait for C<64> things at the same time internally; Microsoft\nrecommends spawning a chain of threads and wait for 63 handles and the\nprevious thread in each. Sounds great!).\n\nNewer versions support more handles, but you need to define C<FD_SETSIZE>\nto some high number (e.g. C<2048>) before compiling the winsocket select\ncall (which might be in libev or elsewhere, for example, perl and many\nother interpreters do their own select emulation on windows).\n\nAnother limit is the number of file descriptors in the Microsoft runtime\nlibraries, which by default is C<64> (there must be a hidden I<64>\nfetish or something like this inside Microsoft). You can increase this\nby calling C<_setmaxstdio>, which can increase this limit to C<2048>\n(another arbitrary limit), but is broken in many versions of the Microsoft\nruntime libraries. This might get you to about C<512> or C<2048> sockets\n(depending on windows version and/or the phase of the moon). To get more,\nyou need to wrap all I/O functions and provide your own fd management, but\nthe cost of calling select (O(n²)) will likely make this unworkable.\n\n=head2 PORTABILITY REQUIREMENTS\n\nIn addition to a working ISO-C implementation and of course the\nbackend-specific APIs, libev relies on a few additional extensions:\n\n=over 4\n\n=item C<void (*)(ev_watcher_type *, int revents)> must have compatible\ncalling conventions regardless of C<ev_watcher_type *>.\n\nLibev assumes not only that all watcher pointers have the same internal\nstructure (guaranteed by POSIX but not by ISO C for example), but it also\nassumes that the same (machine) code can be used to call any watcher\ncallback: The watcher callbacks have different type signatures, but libev\ncalls them using an C<ev_watcher *> internally.\n\n=item pointer accesses must be thread-atomic\n\nAccessing a pointer value must be atomic, it must both be readable and\nwritable in one piece - this is the case on all current architectures.\n\n=item C<sig_atomic_t volatile> must be thread-atomic as well\n\nThe type C<sig_atomic_t volatile> (or whatever is defined as\nC<EV_ATOMIC_T>) must be atomic with respect to accesses from different\nthreads. This is not part of the specification for C<sig_atomic_t>, but is\nbelieved to be sufficiently portable.\n\n=item C<sigprocmask> must work in a threaded environment\n\nLibev uses C<sigprocmask> to temporarily block signals. This is not\nallowed in a threaded program (C<pthread_sigmask> has to be used). Typical\npthread implementations will either allow C<sigprocmask> in the \"main\nthread\" or will block signals process-wide, both behaviours would\nbe compatible with libev. Interaction between C<sigprocmask> and\nC<pthread_sigmask> could complicate things, however.\n\nThe most portable way to handle signals is to block signals in all threads\nexcept the initial one, and run the signal handling loop in the initial\nthread as well.\n\n=item C<long> must be large enough for common memory allocation sizes\n\nTo improve portability and simplify its API, libev uses C<long> internally\ninstead of C<size_t> when allocating its data structures. On non-POSIX\nsystems (Microsoft...) this might be unexpectedly low, but is still at\nleast 31 bits everywhere, which is enough for hundreds of millions of\nwatchers.\n\n=item C<double> must hold a time value in seconds with enough accuracy\n\nThe type C<double> is used to represent timestamps. It is required to\nhave at least 51 bits of mantissa (and 9 bits of exponent), which is\ngood enough for at least into the year 4000 with millisecond accuracy\n(the design goal for libev). This requirement is overfulfilled by\nimplementations using IEEE 754, which is basically all existing ones.\n\nWith IEEE 754 doubles, you get microsecond accuracy until at least the\nyear 2255 (and millisecond accuracy till the year 287396 - by then, libev\nis either obsolete or somebody patched it to use C<long double> or\nsomething like that, just kidding).\n\n=back\n\nIf you know of other additional requirements drop me a note.\n\n\n=head1 ALGORITHMIC COMPLEXITIES\n\nIn this section the complexities of (many of) the algorithms used inside\nlibev will be documented. For complexity discussions about backends see\nthe documentation for C<ev_default_init>.\n\nAll of the following are about amortised time: If an array needs to be\nextended, libev needs to realloc and move the whole array, but this\nhappens asymptotically rarer with higher number of elements, so O(1) might\nmean that libev does a lengthy realloc operation in rare cases, but on\naverage it is much faster and asymptotically approaches constant time.\n\n=over 4\n\n=item Starting and stopping timer/periodic watchers: O(log skipped_other_timers)\n\nThis means that, when you have a watcher that triggers in one hour and\nthere are 100 watchers that would trigger before that, then inserting will\nhave to skip roughly seven (C<ld 100>) of these watchers.\n\n=item Changing timer/periodic watchers (by autorepeat or calling again): O(log skipped_other_timers)\n\nThat means that changing a timer costs less than removing/adding them,\nas only the relative motion in the event queue has to be paid for.\n\n=item Starting io/check/prepare/idle/signal/child/fork/async watchers: O(1)\n\nThese just add the watcher into an array or at the head of a list.\n\n=item Stopping check/prepare/idle/fork/async watchers: O(1)\n\n=item Stopping an io/signal/child watcher: O(number_of_watchers_for_this_(fd/signal/pid % EV_PID_HASHSIZE))\n\nThese watchers are stored in lists, so they need to be walked to find the\ncorrect watcher to remove. The lists are usually short (you don't usually\nhave many watchers waiting for the same fd or signal: one is typical, two\nis rare).\n\n=item Finding the next timer in each loop iteration: O(1)\n\nBy virtue of using a binary or 4-heap, the next timer is always found at a\nfixed position in the storage array.\n\n=item Each change on a file descriptor per loop iteration: O(number_of_watchers_for_this_fd)\n\nA change means an I/O watcher gets started or stopped, which requires\nlibev to recalculate its status (and possibly tell the kernel, depending\non backend and whether C<ev_io_set> was used).\n\n=item Activating one watcher (putting it into the pending state): O(1)\n\n=item Priority handling: O(number_of_priorities)\n\nPriorities are implemented by allocating some space for each\npriority. When doing priority-based operations, libev usually has to\nlinearly search all the priorities, but starting/stopping and activating\nwatchers becomes O(1) with respect to priority handling.\n\n=item Sending an ev_async: O(1)\n\n=item Processing ev_async_send: O(number_of_async_watchers)\n\n=item Processing signals: O(max_signal_number)\n\nSending involves a system call I<iff> there were no other C<ev_async_send>\ncalls in the current loop iteration and the loop is currently\nblocked. Checking for async and signal events involves iterating over all\nrunning async watchers or all signal numbers.\n\n=back\n\n\n=head1 PORTING FROM LIBEV 3.X TO 4.X\n\nThe major version 4 introduced some incompatible changes to the API.\n\nAt the moment, the C<ev.h> header file provides compatibility definitions\nfor all changes, so most programs should still compile. The compatibility\nlayer might be removed in later versions of libev, so better update to the\nnew API early than late.\n\n=over 4\n\n=item C<EV_COMPAT3> backwards compatibility mechanism\n\nThe backward compatibility mechanism can be controlled by\nC<EV_COMPAT3>. See L</\"PREPROCESSOR SYMBOLS/MACROS\"> in the L</EMBEDDING>\nsection.\n\n=item C<ev_default_destroy> and C<ev_default_fork> have been removed\n\nThese calls can be replaced easily by their C<ev_loop_xxx> counterparts:\n\n   ev_loop_destroy (EV_DEFAULT_UC);\n   ev_loop_fork (EV_DEFAULT);\n\n=item function/symbol renames\n\nA number of functions and symbols have been renamed:\n\n  ev_loop         => ev_run\n  EVLOOP_NONBLOCK => EVRUN_NOWAIT\n  EVLOOP_ONESHOT  => EVRUN_ONCE\n\n  ev_unloop       => ev_break\n  EVUNLOOP_CANCEL => EVBREAK_CANCEL\n  EVUNLOOP_ONE    => EVBREAK_ONE\n  EVUNLOOP_ALL    => EVBREAK_ALL\n\n  EV_TIMEOUT      => EV_TIMER\n\n  ev_loop_count   => ev_iteration\n  ev_loop_depth   => ev_depth\n  ev_loop_verify  => ev_verify\n\nMost functions working on C<struct ev_loop> objects don't have an\nC<ev_loop_> prefix, so it was removed; C<ev_loop>, C<ev_unloop> and\nassociated constants have been renamed to not collide with the C<struct\nev_loop> anymore and C<EV_TIMER> now follows the same naming scheme\nas all other watcher types. Note that C<ev_loop_fork> is still called\nC<ev_loop_fork> because it would otherwise clash with the C<ev_fork>\ntypedef.\n\n=item C<EV_MINIMAL> mechanism replaced by C<EV_FEATURES>\n\nThe preprocessor symbol C<EV_MINIMAL> has been replaced by a different\nmechanism, C<EV_FEATURES>. Programs using C<EV_MINIMAL> usually compile\nand work, but the library code will of course be larger.\n\n=back\n\n\n=head1 GLOSSARY\n\n=over 4\n\n=item active\n\nA watcher is active as long as it has been started and not yet stopped.\nSee L</WATCHER STATES> for details.\n\n=item application\n\nIn this document, an application is whatever is using libev.\n\n=item backend\n\nThe part of the code dealing with the operating system interfaces.\n\n=item callback\n\nThe address of a function that is called when some event has been\ndetected. Callbacks are being passed the event loop, the watcher that\nreceived the event, and the actual event bitset.\n\n=item callback/watcher invocation\n\nThe act of calling the callback associated with a watcher.\n\n=item event\n\nA change of state of some external event, such as data now being available\nfor reading on a file descriptor, time having passed or simply not having\nany other events happening anymore.\n\nIn libev, events are represented as single bits (such as C<EV_READ> or\nC<EV_TIMER>).\n\n=item event library\n\nA software package implementing an event model and loop.\n\n=item event loop\n\nAn entity that handles and processes external events and converts them\ninto callback invocations.\n\n=item event model\n\nThe model used to describe how an event loop handles and processes\nwatchers and events.\n\n=item pending\n\nA watcher is pending as soon as the corresponding event has been\ndetected. See L</WATCHER STATES> for details.\n\n=item real time\n\nThe physical time that is observed. It is apparently strictly monotonic :)\n\n=item wall-clock time\n\nThe time and date as shown on clocks. Unlike real time, it can actually\nbe wrong and jump forwards and backwards, e.g. when you adjust your\nclock.\n\n=item watcher\n\nA data structure that describes interest in certain events. Watchers need\nto be started (attached to an event loop) before they can receive events.\n\n=back\n\n=head1 AUTHOR\n\nMarc Lehmann <libev@schmorp.de>, with repeated corrections by Mikael\nMagnusson and Emanuele Giaquinta, and minor corrections by many others.\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_epoll.c",
    "content": "/*\n * libev epoll fd activity backend\n *\n * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n/*\n * general notes about epoll:\n *\n * a) epoll silently removes fds from the fd set. as nothing tells us\n *    that an fd has been removed otherwise, we have to continually\n *    \"rearm\" fds that we suspect *might* have changed (same\n *    problem with kqueue, but much less costly there).\n * b) the fact that ADD != MOD creates a lot of extra syscalls due to a)\n *    and seems not to have any advantage.\n * c) the inability to handle fork or file descriptors (think dup)\n *    limits the applicability over poll, so this is not a generic\n *    poll replacement.\n * d) epoll doesn't work the same as select with many file descriptors\n *    (such as files). while not critical, no other advanced interface\n *    seems to share this (rather non-unixy) limitation.\n * e) epoll claims to be embeddable, but in practise you never get\n *    a ready event for the epoll fd (broken: <=2.6.26, working: >=2.6.32).\n * f) epoll_ctl returning EPERM means the fd is always ready.\n *\n * lots of \"weird code\" and complication handling in this file is due\n * to these design problems with epoll, as we try very hard to avoid\n * epoll_ctl syscalls for common usage patterns and handle the breakage\n * ensuing from receiving events for closed and otherwise long gone\n * file descriptors.\n */\n\n#include <sys/epoll.h>\n\n#define EV_EMASK_EPERM 0x80\n\nstatic void\nepoll_modify (EV_P_ int fd, int oev, int nev)\n{\n  struct epoll_event ev;\n  unsigned char oldmask;\n\n  /*\n   * we handle EPOLL_CTL_DEL by ignoring it here\n   * on the assumption that the fd is gone anyways\n   * if that is wrong, we have to handle the spurious\n   * event in epoll_poll.\n   * if the fd is added again, we try to ADD it, and, if that\n   * fails, we assume it still has the same eventmask.\n   */\n  if (!nev)\n    return;\n\n  oldmask = anfds [fd].emask;\n  anfds [fd].emask = nev;\n\n  /* store the generation counter in the upper 32 bits, the fd in the lower 32 bits */\n  ev.data.u64 = (uint64_t)(uint32_t)fd\n              | ((uint64_t)(uint32_t)++anfds [fd].egen << 32);\n  ev.events   = (nev & EV_READ  ? EPOLLIN  : 0)\n              | (nev & EV_WRITE ? EPOLLOUT : 0);\n\n  if (expect_true (!epoll_ctl (backend_fd, oev && oldmask != nev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))\n    return;\n\n  if (expect_true (errno == ENOENT))\n    {\n      /* if ENOENT then the fd went away, so try to do the right thing */\n      if (!nev)\n        goto dec_egen;\n\n      if (!epoll_ctl (backend_fd, EPOLL_CTL_ADD, fd, &ev))\n        return;\n    }\n  else if (expect_true (errno == EEXIST))\n    {\n      /* EEXIST means we ignored a previous DEL, but the fd is still active */\n      /* if the kernel mask is the same as the new mask, we assume it hasn't changed */\n      if (oldmask == nev)\n        goto dec_egen;\n\n      if (!epoll_ctl (backend_fd, EPOLL_CTL_MOD, fd, &ev))\n        return;\n    }\n  else if (expect_true (errno == EPERM))\n    {\n      /* EPERM means the fd is always ready, but epoll is too snobbish */\n      /* to handle it, unlike select or poll. */\n      anfds [fd].emask = EV_EMASK_EPERM;\n\n      /* add fd to epoll_eperms, if not already inside */\n      if (!(oldmask & EV_EMASK_EPERM))\n        {\n          array_needsize (int, epoll_eperms, epoll_epermmax, epoll_epermcnt + 1, EMPTY2);\n          epoll_eperms [epoll_epermcnt++] = fd;\n        }\n\n      return;\n    }\n\n  fd_kill (EV_A_ fd);\n\ndec_egen:\n  /* we didn't successfully call epoll_ctl, so decrement the generation counter again */\n  --anfds [fd].egen;\n}\n\nstatic void\nepoll_poll (EV_P_ ev_tstamp timeout)\n{\n  int i;\n  int eventcnt;\n\n  if (expect_false (epoll_epermcnt))\n    timeout = 0.;\n\n  /* epoll wait times cannot be larger than (LONG_MAX - 999UL) / HZ msecs, which is below */\n  /* the default libev max wait time, however. */\n  EV_RELEASE_CB;\n  eventcnt = epoll_wait (backend_fd, epoll_events, epoll_eventmax, timeout * 1e3);\n  EV_ACQUIRE_CB;\n\n  if (expect_false (eventcnt < 0))\n    {\n      if (errno != EINTR)\n        ev_syserr (\"(libev) epoll_wait\");\n\n      return;\n    }\n\n  for (i = 0; i < eventcnt; ++i)\n    {\n      struct epoll_event *ev = epoll_events + i;\n\n      int fd = (uint32_t)ev->data.u64; /* mask out the lower 32 bits */\n      int want = anfds [fd].events;\n      int got  = (ev->events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0)\n               | (ev->events & (EPOLLIN  | EPOLLERR | EPOLLHUP) ? EV_READ  : 0);\n\n      /*\n       * check for spurious notification.\n       * this only finds spurious notifications on egen updates\n       * other spurious notifications will be found by epoll_ctl, below\n       * we assume that fd is always in range, as we never shrink the anfds array\n       */\n      if (expect_false ((uint32_t)anfds [fd].egen != (uint32_t)(ev->data.u64 >> 32)))\n        {\n          /* recreate kernel state */\n          postfork = 1;\n          continue;\n        }\n\n      if (expect_false (got & ~want))\n        {\n          anfds [fd].emask = want;\n\n          /*\n           * we received an event but are not interested in it, try mod or del\n           * this often happens because we optimistically do not unregister fds\n           * when we are no longer interested in them, but also when we get spurious\n           * notifications for fds from another process. this is partially handled\n           * above with the gencounter check (== our fd is not the event fd), and\n           * partially here, when epoll_ctl returns an error (== a child has the fd\n           * but we closed it).\n           */\n          ev->events = (want & EV_READ  ? EPOLLIN  : 0)\n                     | (want & EV_WRITE ? EPOLLOUT : 0);\n\n          /* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */\n          /* which is fortunately easy to do for us. */\n          if (epoll_ctl (backend_fd, want ? EPOLL_CTL_MOD : EPOLL_CTL_DEL, fd, ev))\n            {\n              postfork = 1; /* an error occurred, recreate kernel state */\n              continue;\n            }\n        }\n\n      fd_event (EV_A_ fd, got);\n    }\n\n  /* if the receive array was full, increase its size */\n  if (expect_false (eventcnt == epoll_eventmax))\n    {\n      ev_free (epoll_events);\n      epoll_eventmax = array_nextsize (sizeof (struct epoll_event), epoll_eventmax, epoll_eventmax + 1);\n      epoll_events = (struct epoll_event *)ev_malloc (sizeof (struct epoll_event) * epoll_eventmax);\n    }\n\n  /* now synthesize events for all fds where epoll fails, while select works... */\n  for (i = epoll_epermcnt; i--; )\n    {\n      int fd = epoll_eperms [i];\n      unsigned char events = anfds [fd].events & (EV_READ | EV_WRITE);\n\n      if (anfds [fd].emask & EV_EMASK_EPERM && events)\n        fd_event (EV_A_ fd, events);\n      else\n        {\n          epoll_eperms [i] = epoll_eperms [--epoll_epermcnt];\n          anfds [fd].emask = 0;\n        }\n    }\n}\n\nint inline_size\nepoll_init (EV_P_ int flags)\n{\n#ifdef EPOLL_CLOEXEC\n  backend_fd = epoll_create1 (EPOLL_CLOEXEC);\n\n  if (backend_fd < 0 && (errno == EINVAL || errno == ENOSYS))\n#endif\n    backend_fd = epoll_create (256);\n\n  if (backend_fd < 0)\n    return 0;\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC);\n\n  backend_mintime = 1e-3; /* epoll does sometimes return early, this is just to avoid the worst */\n  backend_modify  = epoll_modify;\n  backend_poll    = epoll_poll;\n\n  epoll_eventmax = 64; /* initial number of events receivable per poll */\n  epoll_events = (struct epoll_event *)ev_malloc (sizeof (struct epoll_event) * epoll_eventmax);\n\n  return EVBACKEND_EPOLL;\n}\n\nvoid inline_size\nepoll_destroy (EV_P)\n{\n  ev_free (epoll_events);\n  array_free (epoll_eperm, EMPTY);\n}\n\nvoid inline_size\nepoll_fork (EV_P)\n{\n  close (backend_fd);\n\n  while ((backend_fd = epoll_create (256)) < 0)\n    ev_syserr (\"(libev) epoll_create\");\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC);\n\n  fd_rearm_all (EV_A);\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_kqueue.c",
    "content": "/*\n * libev kqueue backend\n *\n * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#include <sys/types.h>\n#include <sys/time.h>\n#include <sys/event.h>\n#include <string.h>\n#include <errno.h>\n\nvoid inline_speed\nkqueue_change (EV_P_ int fd, int filter, int flags, int fflags)\n{\n  ++kqueue_changecnt;\n  array_needsize (struct kevent, kqueue_changes, kqueue_changemax, kqueue_changecnt, EMPTY2);\n\n  EV_SET (&kqueue_changes [kqueue_changecnt - 1], fd, filter, flags, fflags, 0, 0);\n}\n\n/* OS X at least needs this */\n#ifndef EV_ENABLE\n# define EV_ENABLE 0\n#endif\n#ifndef NOTE_EOF\n# define NOTE_EOF 0\n#endif\n\nstatic void\nkqueue_modify (EV_P_ int fd, int oev, int nev)\n{\n  if (oev != nev)\n    {\n      if (oev & EV_READ)\n        kqueue_change (EV_A_ fd, EVFILT_READ , EV_DELETE, 0);\n\n      if (oev & EV_WRITE)\n        kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_DELETE, 0);\n    }\n\n  /* to detect close/reopen reliably, we have to re-add */\n  /* event requests even when oev == nev */\n\n  if (nev & EV_READ)\n    kqueue_change (EV_A_ fd, EVFILT_READ , EV_ADD | EV_ENABLE, NOTE_EOF);\n\n  if (nev & EV_WRITE)\n    kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_ADD | EV_ENABLE, NOTE_EOF);\n}\n\nstatic void\nkqueue_poll (EV_P_ ev_tstamp timeout)\n{\n  int res, i;\n  struct timespec ts;\n\n  /* need to resize so there is enough space for errors */\n  if (kqueue_changecnt > kqueue_eventmax)\n    {\n      ev_free (kqueue_events);\n      kqueue_eventmax = array_nextsize (sizeof (struct kevent), kqueue_eventmax, kqueue_changecnt);\n      kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax);\n    }\n\n  EV_RELEASE_CB;\n  EV_TS_SET (ts, timeout);\n  res = kevent (backend_fd, kqueue_changes, kqueue_changecnt, kqueue_events, kqueue_eventmax, &ts);\n  EV_ACQUIRE_CB;\n  kqueue_changecnt = 0;\n\n  if (expect_false (res < 0))\n    {\n      if (errno != EINTR)\n        ev_syserr (\"(libev) kevent\");\n\n      return;\n    }\n\n  for (i = 0; i < res; ++i)\n    {\n      int fd = kqueue_events [i].ident;\n\n      if (expect_false (kqueue_events [i].flags & EV_ERROR))\n        {\n          int err = kqueue_events [i].data;\n\n          /* we are only interested in errors for fds that we are interested in :) */\n          if (anfds [fd].events)\n            {\n              if (err == ENOENT) /* resubmit changes on ENOENT */\n                kqueue_modify (EV_A_ fd, 0, anfds [fd].events);\n              else if (err == EBADF) /* on EBADF, we re-check the fd */\n                {\n                  if (fd_valid (fd))\n                    kqueue_modify (EV_A_ fd, 0, anfds [fd].events);\n                  else\n                    fd_kill (EV_A_ fd);\n                }\n              else /* on all other errors, we error out on the fd */\n                fd_kill (EV_A_ fd);\n            }\n        }\n      else\n        fd_event (\n          EV_A_\n          fd,\n          kqueue_events [i].filter == EVFILT_READ ? EV_READ\n          : kqueue_events [i].filter == EVFILT_WRITE ? EV_WRITE\n          : 0\n        );\n    }\n\n  if (expect_false (res == kqueue_eventmax))\n    {\n      ev_free (kqueue_events);\n      kqueue_eventmax = array_nextsize (sizeof (struct kevent), kqueue_eventmax, kqueue_eventmax + 1);\n      kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax);\n    }\n}\n\nint inline_size\nkqueue_init (EV_P_ int flags)\n{\n  /* initialize the kernel queue */\n  kqueue_fd_pid = getpid ();\n  if ((backend_fd = kqueue ()) < 0)\n    return 0;\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC); /* not sure if necessary, hopefully doesn't hurt */\n\n  backend_mintime = 1e-9; /* apparently, they did the right thing in freebsd */\n  backend_modify  = kqueue_modify;\n  backend_poll    = kqueue_poll;\n\n  kqueue_eventmax = 64; /* initial number of events receivable per poll */\n  kqueue_events = (struct kevent *)ev_malloc (sizeof (struct kevent) * kqueue_eventmax);\n\n  kqueue_changes   = 0;\n  kqueue_changemax = 0;\n  kqueue_changecnt = 0;\n\n  return EVBACKEND_KQUEUE;\n}\n\nvoid inline_size\nkqueue_destroy (EV_P)\n{\n  ev_free (kqueue_events);\n  ev_free (kqueue_changes);\n}\n\nvoid inline_size\nkqueue_fork (EV_P)\n{\n  /* some BSD kernels don't just destroy the kqueue itself,\n   * but also close the fd, which isn't documented, and\n   * impossible to support properly.\n   * we remember the pid of the kqueue call and only close\n   * the fd if the pid is still the same.\n   * this leaks fds on sane kernels, but BSD interfaces are\n   * notoriously buggy and rarely get fixed.\n   */\n  pid_t newpid = getpid ();\n\n  if (newpid == kqueue_fd_pid)\n    close (backend_fd);\n\n  kqueue_fd_pid = newpid;\n  while ((backend_fd = kqueue ()) < 0)\n    ev_syserr (\"(libev) kqueue\");\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC);\n\n  /* re-register interest in fds */\n  fd_rearm_all (EV_A);\n}\n\n/* sys/event.h defines EV_ERROR */\n#undef EV_ERROR\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_poll.c",
    "content": "/*\n * libev poll fd activity backend\n *\n * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#include <poll.h>\n\nvoid inline_size\npollidx_init (int *base, int count)\n{\n  /* consider using memset (.., -1, ...), which is practically guaranteed\n   * to work on all systems implementing poll */\n  while (count--)\n    *base++ = -1;\n}\n\nstatic void\npoll_modify (EV_P_ int fd, int oev, int nev)\n{\n  int idx;\n\n  if (oev == nev)\n    return;\n\n  array_needsize (int, pollidxs, pollidxmax, fd + 1, pollidx_init);\n\n  idx = pollidxs [fd];\n\n  if (idx < 0) /* need to allocate a new pollfd */\n    {\n      pollidxs [fd] = idx = pollcnt++;\n      array_needsize (struct pollfd, polls, pollmax, pollcnt, EMPTY2);\n      polls [idx].fd = fd;\n    }\n\n  assert (polls [idx].fd == fd);\n\n  if (nev)\n    polls [idx].events =\n        (nev & EV_READ ? POLLIN : 0)\n        | (nev & EV_WRITE ? POLLOUT : 0);\n  else /* remove pollfd */\n    {\n      pollidxs [fd] = -1;\n\n      if (expect_true (idx < --pollcnt))\n        {\n          polls [idx] = polls [pollcnt];\n          pollidxs [polls [idx].fd] = idx;\n        }\n    }\n}\n\nstatic void\npoll_poll (EV_P_ ev_tstamp timeout)\n{\n  struct pollfd *p;\n  int res;\n  \n  EV_RELEASE_CB;\n  res = poll (polls, pollcnt, timeout * 1e3);\n  EV_ACQUIRE_CB;\n\n  if (expect_false (res < 0))\n    {\n      if (errno == EBADF)\n        fd_ebadf (EV_A);\n      else if (errno == ENOMEM && !syserr_cb)\n        fd_enomem (EV_A);\n      else if (errno != EINTR)\n        ev_syserr (\"(libev) poll\");\n    }\n  else\n    for (p = polls; res; ++p)\n      {\n        assert ((\"libev: poll() returned illegal result, broken BSD kernel?\", p < polls + pollcnt));\n\n        if (expect_false (p->revents)) /* this expect is debatable */\n          {\n            --res;\n\n            if (expect_false (p->revents & POLLNVAL))\n              fd_kill (EV_A_ p->fd);\n            else\n              fd_event (\n                EV_A_\n                p->fd,\n                (p->revents & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)\n                | (p->revents & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)\n              );\n          }\n      }\n}\n\nint inline_size\npoll_init (EV_P_ int flags)\n{\n  backend_mintime = 1e-3;\n  backend_modify  = poll_modify;\n  backend_poll    = poll_poll;\n\n  pollidxs = 0; pollidxmax = 0;\n  polls    = 0; pollmax    = 0; pollcnt = 0;\n\n  return EVBACKEND_POLL;\n}\n\nvoid inline_size\npoll_destroy (EV_P)\n{\n  ev_free (pollidxs);\n  ev_free (polls);\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_port.c",
    "content": "/*\n * libev solaris event port backend\n *\n * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n/* useful reading:\n *\n * http://bugs.opensolaris.org/view_bug.do?bug_id=6268715 (random results)\n * http://bugs.opensolaris.org/view_bug.do?bug_id=6455223 (just totally broken)\n * http://bugs.opensolaris.org/view_bug.do?bug_id=6873782 (manpage ETIME)\n * http://bugs.opensolaris.org/view_bug.do?bug_id=6874410 (implementation ETIME)\n * http://www.mail-archive.com/networking-discuss@opensolaris.org/msg11898.html ETIME vs. nget\n * http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/lib/libc/port/gen/event_port.c (libc)\n * http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/fs/portfs/port.c#1325 (kernel)\n */\n\n#include <sys/types.h>\n#include <sys/time.h>\n#include <poll.h>\n#include <port.h>\n#include <string.h>\n#include <errno.h>\n\nvoid inline_speed\nport_associate_and_check (EV_P_ int fd, int ev)\n{\n  if (0 >\n      port_associate (\n         backend_fd, PORT_SOURCE_FD, fd,\n         (ev & EV_READ ? POLLIN : 0)\n         | (ev & EV_WRITE ? POLLOUT : 0),\n         0\n      )\n  )\n    {\n      if (errno == EBADFD)\n        fd_kill (EV_A_ fd);\n      else\n        ev_syserr (\"(libev) port_associate\");\n    }\n}\n\nstatic void\nport_modify (EV_P_ int fd, int oev, int nev)\n{\n  /* we need to reassociate no matter what, as closes are\n   * once more silently being discarded.\n   */\n  if (!nev)\n    {\n      if (oev)\n        port_dissociate (backend_fd, PORT_SOURCE_FD, fd);\n    }\n  else\n    port_associate_and_check (EV_A_ fd, nev);\n}\n\nstatic void\nport_poll (EV_P_ ev_tstamp timeout)\n{\n  int res, i;\n  struct timespec ts;\n  uint_t nget = 1;\n\n  /* we initialise this to something we will skip in the loop, as */\n  /* port_getn can return with nget unchanged, but no indication */\n  /* whether it was the original value or has been updated :/ */\n  port_events [0].portev_source = 0;\n\n  EV_RELEASE_CB;\n  EV_TS_SET (ts, timeout);\n  res = port_getn (backend_fd, port_events, port_eventmax, &nget, &ts);\n  EV_ACQUIRE_CB;\n\n  /* port_getn may or may not set nget on error */\n  /* so we rely on port_events [0].portev_source not being updated */\n  if (res == -1 && errno != ETIME && errno != EINTR)\n    ev_syserr (\"(libev) port_getn (see http://bugs.opensolaris.org/view_bug.do?bug_id=6268715, try LIBEV_FLAGS=3 env variable)\");\n\n  for (i = 0; i < nget; ++i)\n    {\n      if (port_events [i].portev_source == PORT_SOURCE_FD)\n        {\n          int fd = port_events [i].portev_object;\n\n          fd_event (\n            EV_A_\n            fd,\n            (port_events [i].portev_events & (POLLOUT | POLLERR | POLLHUP) ? EV_WRITE : 0)\n            | (port_events [i].portev_events & (POLLIN | POLLERR | POLLHUP) ? EV_READ : 0)\n          );\n\n          fd_change (EV_A_ fd, EV__IOFDSET);\n        }\n    }\n\n  if (expect_false (nget == port_eventmax))\n    {\n      ev_free (port_events);\n      port_eventmax = array_nextsize (sizeof (port_event_t), port_eventmax, port_eventmax + 1);\n      port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);\n    }\n}\n\nint inline_size\nport_init (EV_P_ int flags)\n{\n  /* Initialize the kernel queue */\n  if ((backend_fd = port_create ()) < 0)\n    return 0;\n\n  assert ((\"libev: PORT_SOURCE_FD must not be zero\", PORT_SOURCE_FD));\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC); /* not sure if necessary, hopefully doesn't hurt */\n\n  /* if my reading of the opensolaris kernel sources are correct, then\n   * opensolaris does something very stupid: it checks if the time has already\n   * elapsed and doesn't round up if that is the case,m otherwise it DOES round\n   * up. Since we can't know what the case is, we need to guess by using a\n   * \"large enough\" timeout. Normally, 1e-9 would be correct.\n   */\n  backend_mintime = 1e-3; /* needed to compensate for port_getn returning early */\n  backend_modify  = port_modify;\n  backend_poll    = port_poll;\n\n  port_eventmax = 64; /* initial number of events receivable per poll */\n  port_events = (port_event_t *)ev_malloc (sizeof (port_event_t) * port_eventmax);\n\n  return EVBACKEND_PORT;\n}\n\nvoid inline_size\nport_destroy (EV_P)\n{\n  ev_free (port_events);\n}\n\nvoid inline_size\nport_fork (EV_P)\n{\n  close (backend_fd);\n\n  while ((backend_fd = port_create ()) < 0)\n    ev_syserr (\"(libev) port\");\n\n  fcntl (backend_fd, F_SETFD, FD_CLOEXEC);\n\n  /* re-register interest in fds */\n  fd_rearm_all (EV_A);\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_select.c",
    "content": "/*\n * libev select fd activity backend\n *\n * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifndef _WIN32\n/* for unix systems */\n# include <inttypes.h>\n# ifndef __hpux\n/* for REAL unix systems */\n#  include <sys/select.h>\n# endif\n#endif\n\n#ifndef EV_SELECT_USE_FD_SET\n# ifdef NFDBITS\n#  define EV_SELECT_USE_FD_SET 0\n# else\n#  define EV_SELECT_USE_FD_SET 1\n# endif\n#endif\n\n#if EV_SELECT_IS_WINSOCKET\n# undef EV_SELECT_USE_FD_SET\n# define EV_SELECT_USE_FD_SET 1\n# undef NFDBITS\n# define NFDBITS 0\n#endif\n\n#if !EV_SELECT_USE_FD_SET\n# define NFDBYTES (NFDBITS / 8)\n#endif\n\n#include <string.h>\n\nstatic void\nselect_modify (EV_P_ int fd, int oev, int nev)\n{\n  if (oev == nev)\n    return;\n\n  {\n#if EV_SELECT_USE_FD_SET\n\n    #if EV_SELECT_IS_WINSOCKET\n    SOCKET handle = anfds [fd].handle;\n    #else\n    int handle = fd;\n    #endif\n\n    assert ((\"libev: fd >= FD_SETSIZE passed to fd_set-based select backend\", fd < FD_SETSIZE));\n\n    /* FD_SET is broken on windows (it adds the fd to a set twice or more,\n     * which eventually leads to overflows). Need to call it only on changes.\n     */\n    #if EV_SELECT_IS_WINSOCKET\n    if ((oev ^ nev) & EV_READ)\n    #endif\n      if (nev & EV_READ)\n        FD_SET (handle, (fd_set *)vec_ri);\n      else\n        FD_CLR (handle, (fd_set *)vec_ri);\n\n    #if EV_SELECT_IS_WINSOCKET\n    if ((oev ^ nev) & EV_WRITE)\n    #endif\n      if (nev & EV_WRITE)\n        FD_SET (handle, (fd_set *)vec_wi);\n      else\n        FD_CLR (handle, (fd_set *)vec_wi);\n\n#else\n\n    int     word = fd / NFDBITS;\n    fd_mask mask = 1UL << (fd % NFDBITS);\n\n    if (expect_false (vec_max <= word))\n      {\n        int new_max = word + 1;\n\n        vec_ri = ev_realloc (vec_ri, new_max * NFDBYTES);\n        vec_ro = ev_realloc (vec_ro, new_max * NFDBYTES); /* could free/malloc */\n        vec_wi = ev_realloc (vec_wi, new_max * NFDBYTES);\n        vec_wo = ev_realloc (vec_wo, new_max * NFDBYTES); /* could free/malloc */\n        #ifdef _WIN32\n        vec_eo = ev_realloc (vec_eo, new_max * NFDBYTES); /* could free/malloc */\n        #endif\n\n        for (; vec_max < new_max; ++vec_max)\n          ((fd_mask *)vec_ri) [vec_max] =\n          ((fd_mask *)vec_wi) [vec_max] = 0;\n      }\n\n    ((fd_mask *)vec_ri) [word] |= mask;\n    if (!(nev & EV_READ))\n      ((fd_mask *)vec_ri) [word] &= ~mask;\n\n    ((fd_mask *)vec_wi) [word] |= mask;\n    if (!(nev & EV_WRITE))\n      ((fd_mask *)vec_wi) [word] &= ~mask;\n#endif\n  }\n}\n\nstatic void\nselect_poll (EV_P_ ev_tstamp timeout)\n{\n  struct timeval tv;\n  int res;\n  int fd_setsize;\n\n  EV_RELEASE_CB;\n  EV_TV_SET (tv, timeout);\n\n#if EV_SELECT_USE_FD_SET\n  fd_setsize = sizeof (fd_set);\n#else\n  fd_setsize = vec_max * NFDBYTES;\n#endif\n\n  memcpy (vec_ro, vec_ri, fd_setsize);\n  memcpy (vec_wo, vec_wi, fd_setsize);\n\n#ifdef _WIN32\n  /* pass in the write set as except set.\n   * the idea behind this is to work around a windows bug that causes\n   * errors to be reported as an exception and not by setting\n   * the writable bit. this is so uncontrollably lame.\n   */\n  memcpy (vec_eo, vec_wi, fd_setsize);\n  res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, (fd_set *)vec_eo, &tv);\n#elif EV_SELECT_USE_FD_SET\n  fd_setsize = anfdmax < FD_SETSIZE ? anfdmax : FD_SETSIZE;\n  res = select (fd_setsize, (fd_set *)vec_ro, (fd_set *)vec_wo, 0, &tv);\n#else\n  res = select (vec_max * NFDBITS, (fd_set *)vec_ro, (fd_set *)vec_wo, 0, &tv);\n#endif\n  EV_ACQUIRE_CB;\n\n  if (expect_false (res < 0))\n    {\n      #if EV_SELECT_IS_WINSOCKET\n      errno = WSAGetLastError ();\n      #endif\n      #ifdef WSABASEERR\n      /* on windows, select returns incompatible error codes, fix this */\n      if (errno >= WSABASEERR && errno < WSABASEERR + 1000)\n        if (errno == WSAENOTSOCK)\n          errno = EBADF;\n        else\n          errno -= WSABASEERR;\n      #endif\n\n      #ifdef _WIN32\n      /* select on windows erroneously returns EINVAL when no fd sets have been\n       * provided (this is documented). what microsoft doesn't tell you that this bug\n       * exists even when the fd sets _are_ provided, so we have to check for this bug\n       * here and emulate by sleeping manually.\n       * we also get EINVAL when the timeout is invalid, but we ignore this case here\n       * and assume that EINVAL always means: you have to wait manually.\n       */\n      if (errno == EINVAL)\n        {\n          if (timeout)\n            {\n              unsigned long ms = timeout * 1e3;\n              Sleep (ms ? ms : 1);\n            }\n\n          return;\n        }\n      #endif\n\n      if (errno == EBADF)\n        fd_ebadf (EV_A);\n      else if (errno == ENOMEM && !syserr_cb)\n        fd_enomem (EV_A);\n      else if (errno != EINTR)\n        ev_syserr (\"(libev) select\");\n\n      return;\n    }\n\n#if EV_SELECT_USE_FD_SET\n\n  {\n    int fd;\n\n    for (fd = 0; fd < anfdmax; ++fd)\n      if (anfds [fd].events)\n        {\n          int events = 0;\n          #if EV_SELECT_IS_WINSOCKET\n          SOCKET handle = anfds [fd].handle;\n          #else\n          int handle = fd;\n          #endif\n\n          if (FD_ISSET (handle, (fd_set *)vec_ro)) events |= EV_READ;\n          if (FD_ISSET (handle, (fd_set *)vec_wo)) events |= EV_WRITE;\n          #ifdef _WIN32\n          if (FD_ISSET (handle, (fd_set *)vec_eo)) events |= EV_WRITE;\n          #endif\n\n          if (expect_true (events))\n            fd_event (EV_A_ fd, events);\n        }\n  }\n\n#else\n\n  {\n    int word, bit;\n    for (word = vec_max; word--; )\n      {\n        fd_mask word_r = ((fd_mask *)vec_ro) [word];\n        fd_mask word_w = ((fd_mask *)vec_wo) [word];\n        #ifdef _WIN32\n        word_w |= ((fd_mask *)vec_eo) [word];\n        #endif\n\n        if (word_r || word_w)\n          for (bit = NFDBITS; bit--; )\n            {\n              fd_mask mask = 1UL << bit;\n              int events = 0;\n\n              events |= word_r & mask ? EV_READ  : 0;\n              events |= word_w & mask ? EV_WRITE : 0;\n\n              if (expect_true (events))\n                fd_event (EV_A_ word * NFDBITS + bit, events);\n            }\n      }\n  }\n\n#endif\n}\n\nint inline_size\nselect_init (EV_P_ int flags)\n{\n  backend_mintime = 1e-6;\n  backend_modify  = select_modify;\n  backend_poll    = select_poll;\n\n#if EV_SELECT_USE_FD_SET\n  vec_ri  = ev_malloc (sizeof (fd_set)); FD_ZERO ((fd_set *)vec_ri);\n  vec_ro  = ev_malloc (sizeof (fd_set));\n  vec_wi  = ev_malloc (sizeof (fd_set)); FD_ZERO ((fd_set *)vec_wi);\n  vec_wo  = ev_malloc (sizeof (fd_set));\n  #ifdef _WIN32\n  vec_eo  = ev_malloc (sizeof (fd_set));\n  #endif\n#else\n  vec_max = 0;\n  vec_ri  = 0;\n  vec_ro  = 0;\n  vec_wi  = 0;\n  vec_wo  = 0;\n  #ifdef _WIN32\n  vec_eo  = 0;\n  #endif\n#endif\n\n  return EVBACKEND_SELECT;\n}\n\nvoid inline_size\nselect_destroy (EV_P)\n{\n  ev_free (vec_ri);\n  ev_free (vec_ro);\n  ev_free (vec_wi);\n  ev_free (vec_wo);\n  #ifdef _WIN32\n  ev_free (vec_eo);\n  #endif\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_vars.h",
    "content": "/*\n * loop member variable declarations\n *\n * Copyright (c) 2007,2008,2009,2010,2011,2012,2013 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#define VARx(type,name) VAR(name, type name)\n\nVARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */\nVARx(ev_tstamp, mn_now)    /* monotonic clock \"now\" */\nVARx(ev_tstamp, rtmn_diff) /* difference realtime - monotonic time */\n\n/* for reverse feeding of events */\nVARx(W *, rfeeds)\nVARx(int, rfeedmax)\nVARx(int, rfeedcnt)\n\nVAR (pendings, ANPENDING *pendings [NUMPRI])\nVAR (pendingmax, int pendingmax [NUMPRI])\nVAR (pendingcnt, int pendingcnt [NUMPRI])\nVARx(int, pendingpri) /* highest priority currently pending */\nVARx(ev_prepare, pending_w) /* dummy pending watcher */\n\nVARx(ev_tstamp, io_blocktime)\nVARx(ev_tstamp, timeout_blocktime)\n\nVARx(int, backend)\nVARx(int, activecnt) /* total number of active events (\"refcount\") */\nVARx(EV_ATOMIC_T, loop_done)  /* signal by ev_break */\n\nVARx(int, backend_fd)\nVARx(ev_tstamp, backend_mintime) /* assumed typical timer resolution */\nVAR (backend_modify, void (*backend_modify)(EV_P_ int fd, int oev, int nev))\nVAR (backend_poll  , void (*backend_poll)(EV_P_ ev_tstamp timeout))\n\nVARx(ANFD *, anfds)\nVARx(int, anfdmax)\n\nVAR (evpipe, int evpipe [2])\nVARx(ev_io, pipe_w)\nVARx(EV_ATOMIC_T, pipe_write_wanted)\nVARx(EV_ATOMIC_T, pipe_write_skipped)\n\n#if !defined(_WIN32) || EV_GENWRAP\nVARx(pid_t, curpid)\n#endif\n\nVARx(char, postfork)  /* true if we need to recreate kernel state after fork */\n\n#if EV_USE_SELECT || EV_GENWRAP\nVARx(void *, vec_ri)\nVARx(void *, vec_ro)\nVARx(void *, vec_wi)\nVARx(void *, vec_wo)\n#if defined(_WIN32) || EV_GENWRAP\nVARx(void *, vec_eo)\n#endif\nVARx(int, vec_max)\n#endif\n\n#if EV_USE_POLL || EV_GENWRAP\nVARx(struct pollfd *, polls)\nVARx(int, pollmax)\nVARx(int, pollcnt)\nVARx(int *, pollidxs) /* maps fds into structure indices */\nVARx(int, pollidxmax)\n#endif\n\n#if EV_USE_EPOLL || EV_GENWRAP\nVARx(struct epoll_event *, epoll_events)\nVARx(int, epoll_eventmax)\nVARx(int *, epoll_eperms)\nVARx(int, epoll_epermcnt)\nVARx(int, epoll_epermmax)\n#endif\n\n#if EV_USE_KQUEUE || EV_GENWRAP\nVARx(pid_t, kqueue_fd_pid)\nVARx(struct kevent *, kqueue_changes)\nVARx(int, kqueue_changemax)\nVARx(int, kqueue_changecnt)\nVARx(struct kevent *, kqueue_events)\nVARx(int, kqueue_eventmax)\n#endif\n\n#if EV_USE_PORT || EV_GENWRAP\nVARx(struct port_event *, port_events)\nVARx(int, port_eventmax)\n#endif\n\n#if EV_USE_IOCP || EV_GENWRAP\nVARx(HANDLE, iocp)\n#endif\n\nVARx(int *, fdchanges)\nVARx(int, fdchangemax)\nVARx(int, fdchangecnt)\n\nVARx(ANHE *, timers)\nVARx(int, timermax)\nVARx(int, timercnt)\n\n#if EV_PERIODIC_ENABLE || EV_GENWRAP\nVARx(ANHE *, periodics)\nVARx(int, periodicmax)\nVARx(int, periodiccnt)\n#endif\n\n#if EV_IDLE_ENABLE || EV_GENWRAP\nVAR (idles, ev_idle **idles [NUMPRI])\nVAR (idlemax, int idlemax [NUMPRI])\nVAR (idlecnt, int idlecnt [NUMPRI])\n#endif\nVARx(int, idleall) /* total number */\n\nVARx(struct ev_prepare **, prepares)\nVARx(int, preparemax)\nVARx(int, preparecnt)\n\nVARx(struct ev_check **, checks)\nVARx(int, checkmax)\nVARx(int, checkcnt)\n\n#if EV_FORK_ENABLE || EV_GENWRAP\nVARx(struct ev_fork **, forks)\nVARx(int, forkmax)\nVARx(int, forkcnt)\n#endif\n\n#if EV_CLEANUP_ENABLE || EV_GENWRAP\nVARx(struct ev_cleanup **, cleanups)\nVARx(int, cleanupmax)\nVARx(int, cleanupcnt)\n#endif\n\n#if EV_ASYNC_ENABLE || EV_GENWRAP\nVARx(EV_ATOMIC_T, async_pending)\nVARx(struct ev_async **, asyncs)\nVARx(int, asyncmax)\nVARx(int, asynccnt)\n#endif\n\n#if EV_USE_INOTIFY || EV_GENWRAP\nVARx(int, fs_fd)\nVARx(ev_io, fs_w)\nVARx(char, fs_2625) /* whether we are running in linux 2.6.25 or newer */\nVAR (fs_hash, ANFS fs_hash [EV_INOTIFY_HASHSIZE])\n#endif\n\nVARx(EV_ATOMIC_T, sig_pending)\n#if EV_USE_SIGNALFD || EV_GENWRAP\nVARx(int, sigfd)\nVARx(ev_io, sigfd_w)\nVARx(sigset_t, sigfd_set)\n#endif\n\nVARx(unsigned int, origflags) /* original loop flags */\n\n#if EV_FEATURE_API || EV_GENWRAP\nVARx(unsigned int, loop_count) /* total number of loop iterations/blocks */\nVARx(unsigned int, loop_depth) /* #ev_run enters - #ev_run leaves */\n\nVARx(void *, userdata)\n/* C++ doesn't support the ev_loop_callback typedef here. stinks. */\nVAR (release_cb, void (*release_cb)(EV_P) EV_THROW)\nVAR (acquire_cb, void (*acquire_cb)(EV_P) EV_THROW)\nVAR (invoke_cb , ev_loop_callback invoke_cb)\n#endif\n\n#undef VARx\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_win32.c",
    "content": "/*\n * libev win32 compatibility cruft (_not_ a backend)\n *\n * Copyright (c) 2007,2008,2009 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifdef _WIN32\n\n/* timeb.h is actually xsi legacy functionality */\n#include <sys/timeb.h>\n\n/* note: the comment below could not be substantiated, but what would I care */\n/* MSDN says this is required to handle SIGFPE */\n/* my wild guess would be that using something floating-pointy is required */\n/* for the crt to do something about it */\nvolatile double SIGFPE_REQ = 0.0f;\n\nstatic SOCKET\nev_tcp_socket (void)\n{\n#if EV_USE_WSASOCKET\n  return WSASocket (AF_INET, SOCK_STREAM, 0, 0, 0, 0);\n#else\n  return socket (AF_INET, SOCK_STREAM, 0);\n#endif\n}\n\n/* oh, the humanity! */\nstatic int\nev_pipe (int filedes [2])\n{\n  struct sockaddr_in addr = { 0 };\n  int addr_size = sizeof (addr);\n  struct sockaddr_in adr2;\n  int adr2_size = sizeof (adr2);\n  SOCKET listener;\n  SOCKET sock [2] = { -1, -1 };\n\n  if ((listener = ev_tcp_socket ()) == INVALID_SOCKET)\n    return -1;\n\n  addr.sin_family = AF_INET;\n  addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK);\n  addr.sin_port = 0;\n\n  if (bind (listener, (struct sockaddr *)&addr, addr_size))\n    goto fail;\n\n  if (getsockname (listener, (struct sockaddr *)&addr, &addr_size))\n    goto fail;\n\n  if (listen (listener, 1))\n    goto fail;\n\n  if ((sock [0] = ev_tcp_socket ()) == INVALID_SOCKET)\n    goto fail;\n\n  if (connect (sock [0], (struct sockaddr *)&addr, addr_size))\n    goto fail;\n\n  if ((sock [1] = accept (listener, 0, 0)) < 0)\n    goto fail;\n\n  /* windows vista returns fantasy port numbers for sockets:\n   * example for two interconnected tcp sockets:\n   *\n   * (Socket::unpack_sockaddr_in getsockname $sock0)[0] == 53364\n   * (Socket::unpack_sockaddr_in getpeername $sock0)[0] == 53363\n   * (Socket::unpack_sockaddr_in getsockname $sock1)[0] == 53363\n   * (Socket::unpack_sockaddr_in getpeername $sock1)[0] == 53365\n   *\n   * wow! tridirectional sockets!\n   *\n   * this way of checking ports seems to work:\n   */\n  if (getpeername (sock [0], (struct sockaddr *)&addr, &addr_size))\n    goto fail;\n\n  if (getsockname (sock [1], (struct sockaddr *)&adr2, &adr2_size))\n    goto fail;\n\n  errno = WSAEINVAL;\n  if (addr_size != adr2_size\n      || addr.sin_addr.s_addr != adr2.sin_addr.s_addr /* just to be sure, I mean, it's windows */\n      || addr.sin_port        != adr2.sin_port)\n    goto fail;\n\n  closesocket (listener);\n\n#if EV_SELECT_IS_WINSOCKET\n  filedes [0] = EV_WIN32_HANDLE_TO_FD (sock [0]);\n  filedes [1] = EV_WIN32_HANDLE_TO_FD (sock [1]);\n#else\n  /* when select isn't winsocket, we also expect socket, connect, accept etc.\n   * to work on fds */\n  filedes [0] = sock [0];\n  filedes [1] = sock [1];\n#endif\n\n  return 0;\n\nfail:\n  closesocket (listener);\n\n  if (sock [0] != INVALID_SOCKET) closesocket (sock [0]);\n  if (sock [1] != INVALID_SOCKET) closesocket (sock [1]);\n\n  return -1;\n}\n\n#undef pipe\n#define pipe(filedes) ev_pipe (filedes)\n\n#define EV_HAVE_EV_TIME 1\nev_tstamp\nev_time (void)\n{\n  FILETIME ft;\n  ULARGE_INTEGER ui;\n\n  GetSystemTimeAsFileTime (&ft);\n  ui.u.LowPart  = ft.dwLowDateTime;\n  ui.u.HighPart = ft.dwHighDateTime;\n\n  /* msvc cannot convert ulonglong to double... yes, it is that sucky */\n  return (LONGLONG)(ui.QuadPart - 116444736000000000) * 1e-7;\n}\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/ev_wrap.h",
    "content": "/* DO NOT EDIT, automatically generated by update_ev_wrap */\n#ifndef EV_WRAP_H\n#define EV_WRAP_H\n#define acquire_cb ((loop)->acquire_cb)\n#define activecnt ((loop)->activecnt)\n#define anfdmax ((loop)->anfdmax)\n#define anfds ((loop)->anfds)\n#define async_pending ((loop)->async_pending)\n#define asynccnt ((loop)->asynccnt)\n#define asyncmax ((loop)->asyncmax)\n#define asyncs ((loop)->asyncs)\n#define backend ((loop)->backend)\n#define backend_fd ((loop)->backend_fd)\n#define backend_mintime ((loop)->backend_mintime)\n#define backend_modify ((loop)->backend_modify)\n#define backend_poll ((loop)->backend_poll)\n#define checkcnt ((loop)->checkcnt)\n#define checkmax ((loop)->checkmax)\n#define checks ((loop)->checks)\n#define cleanupcnt ((loop)->cleanupcnt)\n#define cleanupmax ((loop)->cleanupmax)\n#define cleanups ((loop)->cleanups)\n#define curpid ((loop)->curpid)\n#define epoll_epermcnt ((loop)->epoll_epermcnt)\n#define epoll_epermmax ((loop)->epoll_epermmax)\n#define epoll_eperms ((loop)->epoll_eperms)\n#define epoll_eventmax ((loop)->epoll_eventmax)\n#define epoll_events ((loop)->epoll_events)\n#define evpipe ((loop)->evpipe)\n#define fdchangecnt ((loop)->fdchangecnt)\n#define fdchangemax ((loop)->fdchangemax)\n#define fdchanges ((loop)->fdchanges)\n#define forkcnt ((loop)->forkcnt)\n#define forkmax ((loop)->forkmax)\n#define forks ((loop)->forks)\n#define fs_2625 ((loop)->fs_2625)\n#define fs_fd ((loop)->fs_fd)\n#define fs_hash ((loop)->fs_hash)\n#define fs_w ((loop)->fs_w)\n#define idleall ((loop)->idleall)\n#define idlecnt ((loop)->idlecnt)\n#define idlemax ((loop)->idlemax)\n#define idles ((loop)->idles)\n#define invoke_cb ((loop)->invoke_cb)\n#define io_blocktime ((loop)->io_blocktime)\n#define iocp ((loop)->iocp)\n#define kqueue_changecnt ((loop)->kqueue_changecnt)\n#define kqueue_changemax ((loop)->kqueue_changemax)\n#define kqueue_changes ((loop)->kqueue_changes)\n#define kqueue_eventmax ((loop)->kqueue_eventmax)\n#define kqueue_events ((loop)->kqueue_events)\n#define kqueue_fd_pid ((loop)->kqueue_fd_pid)\n#define loop_count ((loop)->loop_count)\n#define loop_depth ((loop)->loop_depth)\n#define loop_done ((loop)->loop_done)\n#define mn_now ((loop)->mn_now)\n#define now_floor ((loop)->now_floor)\n#define origflags ((loop)->origflags)\n#define pending_w ((loop)->pending_w)\n#define pendingcnt ((loop)->pendingcnt)\n#define pendingmax ((loop)->pendingmax)\n#define pendingpri ((loop)->pendingpri)\n#define pendings ((loop)->pendings)\n#define periodiccnt ((loop)->periodiccnt)\n#define periodicmax ((loop)->periodicmax)\n#define periodics ((loop)->periodics)\n#define pipe_w ((loop)->pipe_w)\n#define pipe_write_skipped ((loop)->pipe_write_skipped)\n#define pipe_write_wanted ((loop)->pipe_write_wanted)\n#define pollcnt ((loop)->pollcnt)\n#define pollidxmax ((loop)->pollidxmax)\n#define pollidxs ((loop)->pollidxs)\n#define pollmax ((loop)->pollmax)\n#define polls ((loop)->polls)\n#define port_eventmax ((loop)->port_eventmax)\n#define port_events ((loop)->port_events)\n#define postfork ((loop)->postfork)\n#define preparecnt ((loop)->preparecnt)\n#define preparemax ((loop)->preparemax)\n#define prepares ((loop)->prepares)\n#define release_cb ((loop)->release_cb)\n#define rfeedcnt ((loop)->rfeedcnt)\n#define rfeedmax ((loop)->rfeedmax)\n#define rfeeds ((loop)->rfeeds)\n#define rtmn_diff ((loop)->rtmn_diff)\n#define sig_pending ((loop)->sig_pending)\n#define sigfd ((loop)->sigfd)\n#define sigfd_set ((loop)->sigfd_set)\n#define sigfd_w ((loop)->sigfd_w)\n#define timeout_blocktime ((loop)->timeout_blocktime)\n#define timercnt ((loop)->timercnt)\n#define timermax ((loop)->timermax)\n#define timers ((loop)->timers)\n#define userdata ((loop)->userdata)\n#define vec_eo ((loop)->vec_eo)\n#define vec_max ((loop)->vec_max)\n#define vec_ri ((loop)->vec_ri)\n#define vec_ro ((loop)->vec_ro)\n#define vec_wi ((loop)->vec_wi)\n#define vec_wo ((loop)->vec_wo)\n#else\n#undef EV_WRAP_H\n#undef acquire_cb\n#undef activecnt\n#undef anfdmax\n#undef anfds\n#undef async_pending\n#undef asynccnt\n#undef asyncmax\n#undef asyncs\n#undef backend\n#undef backend_fd\n#undef backend_mintime\n#undef backend_modify\n#undef backend_poll\n#undef checkcnt\n#undef checkmax\n#undef checks\n#undef cleanupcnt\n#undef cleanupmax\n#undef cleanups\n#undef curpid\n#undef epoll_epermcnt\n#undef epoll_epermmax\n#undef epoll_eperms\n#undef epoll_eventmax\n#undef epoll_events\n#undef evpipe\n#undef fdchangecnt\n#undef fdchangemax\n#undef fdchanges\n#undef forkcnt\n#undef forkmax\n#undef forks\n#undef fs_2625\n#undef fs_fd\n#undef fs_hash\n#undef fs_w\n#undef idleall\n#undef idlecnt\n#undef idlemax\n#undef idles\n#undef invoke_cb\n#undef io_blocktime\n#undef iocp\n#undef kqueue_changecnt\n#undef kqueue_changemax\n#undef kqueue_changes\n#undef kqueue_eventmax\n#undef kqueue_events\n#undef kqueue_fd_pid\n#undef loop_count\n#undef loop_depth\n#undef loop_done\n#undef mn_now\n#undef now_floor\n#undef origflags\n#undef pending_w\n#undef pendingcnt\n#undef pendingmax\n#undef pendingpri\n#undef pendings\n#undef periodiccnt\n#undef periodicmax\n#undef periodics\n#undef pipe_w\n#undef pipe_write_skipped\n#undef pipe_write_wanted\n#undef pollcnt\n#undef pollidxmax\n#undef pollidxs\n#undef pollmax\n#undef polls\n#undef port_eventmax\n#undef port_events\n#undef postfork\n#undef preparecnt\n#undef preparemax\n#undef prepares\n#undef release_cb\n#undef rfeedcnt\n#undef rfeedmax\n#undef rfeeds\n#undef rtmn_diff\n#undef sig_pending\n#undef sigfd\n#undef sigfd_set\n#undef sigfd_w\n#undef timeout_blocktime\n#undef timercnt\n#undef timermax\n#undef timers\n#undef userdata\n#undef vec_eo\n#undef vec_max\n#undef vec_ri\n#undef vec_ro\n#undef vec_wi\n#undef vec_wo\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/event.c",
    "content": "/*\n * libevent compatibility layer\n *\n * Copyright (c) 2007,2008,2009,2010,2012 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#include <stddef.h>\n#include <stdlib.h>\n#include <assert.h>\n\n#ifdef EV_EVENT_H\n# include EV_EVENT_H\n#else\n# include \"event.h\"\n#endif\n\n#if EV_MULTIPLICITY\n# define dLOOPev struct ev_loop *loop = (struct ev_loop *)ev->ev_base\n# define dLOOPbase struct ev_loop *loop = (struct ev_loop *)base\n#else\n# define dLOOPev\n# define dLOOPbase\n#endif\n\n/* never accessed, will always be cast from/to ev_loop */\nstruct event_base\n{\n  int dummy;\n};\n\nstatic struct event_base *ev_x_cur;\n\nstatic ev_tstamp\nev_tv_get (struct timeval *tv)\n{\n  if (tv)\n    {\n      ev_tstamp after = tv->tv_sec + tv->tv_usec * 1e-6;\n      return after ? after : 1e-6;\n    }\n  else\n    return -1.;\n}\n\n#define EVENT_STRINGIFY(s) # s\n#define EVENT_VERSION(a,b) EVENT_STRINGIFY (a) \".\" EVENT_STRINGIFY (b)\n\nconst char *\nevent_get_version (void)\n{\n  /* returns ABI, not API or library, version */\n  return EVENT_VERSION (EV_VERSION_MAJOR, EV_VERSION_MINOR);\n}\n\nconst char *\nevent_get_method (void)\n{\n  return \"libev\";\n}\n\nvoid *event_init (void)\n{\n#if EV_MULTIPLICITY\n  if (ev_x_cur)\n    ev_x_cur = (struct event_base *)ev_loop_new (EVFLAG_AUTO);\n  else\n    ev_x_cur = (struct event_base *)ev_default_loop (EVFLAG_AUTO);\n#else\n  assert ((\"libev: multiple event bases not supported when not compiled with EV_MULTIPLICITY\", !ev_x_cur));\n\n  ev_x_cur = (struct event_base *)(long)ev_default_loop (EVFLAG_AUTO);\n#endif\n\n  return ev_x_cur;\n}\n\nconst char *\nevent_base_get_method (const struct event_base *base)\n{\n  return \"libev\";\n}\n\nstruct event_base *\nevent_base_new (void)\n{\n#if EV_MULTIPLICITY\n  return (struct event_base *)ev_loop_new (EVFLAG_AUTO);\n#else\n  assert ((\"libev: multiple event bases not supported when not compiled with EV_MULTIPLICITY\"));\n  return NULL;\n#endif\n}\n\nvoid event_base_free (struct event_base *base)\n{\n  dLOOPbase;\n\n#if EV_MULTIPLICITY\n  if (!ev_is_default_loop (loop))\n    ev_loop_destroy (loop);\n#endif\n}\n\nint event_dispatch (void)\n{\n  return event_base_dispatch (ev_x_cur);\n}\n\n#ifdef EV_STANDALONE\nvoid event_set_log_callback (event_log_cb cb)\n{\n  /* nop */\n}\n#endif\n\nint event_loop (int flags)\n{\n  return event_base_loop (ev_x_cur, flags);\n}\n\nint event_loopexit (struct timeval *tv)\n{\n  return event_base_loopexit (ev_x_cur, tv);\n}\n\nevent_callback_fn event_get_callback\n(const struct event *ev)\n{\n  return ev->ev_callback;\n}\n\nstatic void\nev_x_cb (struct event *ev, int revents)\n{\n  revents &= EV_READ | EV_WRITE | EV_TIMER | EV_SIGNAL;\n\n  ev->ev_res = revents;\n  ev->ev_callback (ev->ev_fd, (short)revents, ev->ev_arg);\n}\n\nstatic void\nev_x_cb_sig (EV_P_ struct ev_signal *w, int revents)\n{\n  struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.sig));\n\n  if (revents & EV_ERROR)\n    event_del (ev);\n\n  ev_x_cb (ev, revents);\n}\n\nstatic void\nev_x_cb_io (EV_P_ struct ev_io *w, int revents)\n{\n  struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, iosig.io));\n\n  if ((revents & EV_ERROR) || !(ev->ev_events & EV_PERSIST))\n    event_del (ev);\n\n  ev_x_cb (ev, revents);\n}\n\nstatic void\nev_x_cb_to (EV_P_ struct ev_timer *w, int revents)\n{\n  struct event *ev = (struct event *)(((char *)w) - offsetof (struct event, to));\n\n  event_del (ev);\n\n  ev_x_cb (ev, revents);\n}\n\nvoid event_set (struct event *ev, int fd, short events, void (*cb)(int, short, void *), void *arg)\n{\n  if (events & EV_SIGNAL)\n    ev_init (&ev->iosig.sig, ev_x_cb_sig);\n  else\n    ev_init (&ev->iosig.io, ev_x_cb_io);\n\n  ev_init (&ev->to, ev_x_cb_to);\n\n  ev->ev_base     = ev_x_cur; /* not threadsafe, but it's how libevent works */\n  ev->ev_fd       = fd;\n  ev->ev_events   = events;\n  ev->ev_pri      = 0;\n  ev->ev_callback = cb;\n  ev->ev_arg      = arg;\n  ev->ev_res      = 0;\n  ev->ev_flags    = EVLIST_INIT;\n}\n\nint event_once (int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)\n{\n  return event_base_once (ev_x_cur, fd, events, cb, arg, tv);\n}\n\nint event_add (struct event *ev, struct timeval *tv)\n{\n  dLOOPev;\n\n  if (ev->ev_events & EV_SIGNAL)\n    {\n      if (!ev_is_active (&ev->iosig.sig))\n        {\n          ev_signal_set (&ev->iosig.sig, ev->ev_fd);\n          ev_signal_start (EV_A_ &ev->iosig.sig);\n\n          ev->ev_flags |= EVLIST_SIGNAL;\n        }\n    }\n  else if (ev->ev_events & (EV_READ | EV_WRITE))\n    {\n      if (!ev_is_active (&ev->iosig.io))\n        {\n          ev_io_set (&ev->iosig.io, ev->ev_fd, ev->ev_events & (EV_READ | EV_WRITE));\n          ev_io_start (EV_A_ &ev->iosig.io);\n\n          ev->ev_flags |= EVLIST_INSERTED;\n        }\n    }\n\n  if (tv)\n    {\n      ev->to.repeat = ev_tv_get (tv);\n      ev_timer_again (EV_A_ &ev->to);\n      ev->ev_flags |= EVLIST_TIMEOUT;\n    }\n  else\n    {\n      ev_timer_stop (EV_A_ &ev->to);\n      ev->ev_flags &= ~EVLIST_TIMEOUT;\n    }\n\n  ev->ev_flags |= EVLIST_ACTIVE;\n\n  return 0;\n}\n\nint event_del (struct event *ev)\n{\n  dLOOPev;\n\n  if (ev->ev_events & EV_SIGNAL)\n    ev_signal_stop (EV_A_ &ev->iosig.sig);\n  else if (ev->ev_events & (EV_READ | EV_WRITE))\n    ev_io_stop (EV_A_ &ev->iosig.io);\n\n  if (ev_is_active (&ev->to))\n    ev_timer_stop (EV_A_ &ev->to);\n\n  ev->ev_flags = EVLIST_INIT;\n\n  return 0;\n}\n\nvoid event_active (struct event *ev, int res, short ncalls)\n{\n  dLOOPev;\n\n  if (res & EV_TIMEOUT)\n    ev_feed_event (EV_A_ &ev->to, res & EV_TIMEOUT);\n\n  if (res & EV_SIGNAL)\n    ev_feed_event (EV_A_ &ev->iosig.sig, res & EV_SIGNAL);\n\n  if (res & (EV_READ | EV_WRITE))\n    ev_feed_event (EV_A_ &ev->iosig.io, res & (EV_READ | EV_WRITE));\n}\n\nint event_pending (struct event *ev, short events, struct timeval *tv)\n{\n  short revents = 0;\n  dLOOPev;\n\n  if (ev->ev_events & EV_SIGNAL)\n    {\n      /* sig */\n      if (ev_is_active (&ev->iosig.sig) || ev_is_pending (&ev->iosig.sig))\n        revents |= EV_SIGNAL;\n    }\n  else if (ev->ev_events & (EV_READ | EV_WRITE))\n    {\n      /* io */\n      if (ev_is_active (&ev->iosig.io) || ev_is_pending (&ev->iosig.io))\n        revents |= ev->ev_events & (EV_READ | EV_WRITE);\n    }\n\n  if (ev->ev_events & EV_TIMEOUT || ev_is_active (&ev->to) || ev_is_pending (&ev->to))\n    {\n      revents |= EV_TIMEOUT;\n\n      if (tv)\n        {\n          ev_tstamp at = ev_now (EV_A);\n\n          tv->tv_sec  = (long)at;\n          tv->tv_usec = (long)((at - (ev_tstamp)tv->tv_sec) * 1e6);\n        }\n    }\n\n  return events & revents;\n}\n\nint event_priority_init (int npri)\n{\n  return event_base_priority_init (ev_x_cur, npri);\n}\n\nint event_priority_set (struct event *ev, int pri)\n{\n  ev->ev_pri = pri;\n\n  return 0;\n}\n\nint event_base_set (struct event_base *base, struct event *ev)\n{\n  ev->ev_base = base;\n\n  return 0;\n}\n\nint event_base_loop (struct event_base *base, int flags)\n{\n  dLOOPbase;\n\n  return !ev_run (EV_A_ flags);\n}\n\nint event_base_dispatch (struct event_base *base)\n{\n  return event_base_loop (base, 0);\n}\n\nstatic void\nev_x_loopexit_cb (int revents, void *base)\n{\n  dLOOPbase;\n\n  ev_break (EV_A_ EVBREAK_ONE);\n}\n\nint event_base_loopexit (struct event_base *base, struct timeval *tv)\n{\n  ev_tstamp after = ev_tv_get (tv);\n  dLOOPbase;\n\n  ev_once (EV_A_ -1, 0, after >= 0. ? after : 0., ev_x_loopexit_cb, (void *)base);\n\n  return 0;\n}\n\nstruct ev_x_once\n{\n  int fd;\n  void (*cb)(int, short, void *);\n  void *arg;\n};\n\nstatic void\nev_x_once_cb (int revents, void *arg)\n{\n  struct ev_x_once *once = (struct ev_x_once *)arg;\n\n  once->cb (once->fd, (short)revents, once->arg);\n  free (once);\n}\n\nint event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv)\n{\n  struct ev_x_once *once = (struct ev_x_once *)malloc (sizeof (struct ev_x_once));\n  dLOOPbase;\n\n  if (!once)\n    return -1;\n\n  once->fd  = fd;\n  once->cb  = cb;\n  once->arg = arg;\n\n  ev_once (EV_A_ fd, events & (EV_READ | EV_WRITE), ev_tv_get (tv), ev_x_once_cb, (void *)once);\n\n  return 0;\n}\n\nint event_base_priority_init (struct event_base *base, int npri)\n{\n  /*dLOOPbase;*/\n\n  return 0;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/event.h",
    "content": "/*\n * libevent compatibility header, only core events supported\n *\n * Copyright (c) 2007,2008,2010,2012 Marc Alexander Lehmann <libev@schmorp.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modifica-\n * tion, 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\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 IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER-\n * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO\n * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE-\n * CIAL, 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 OTH-\n * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Alternatively, the contents of this file may be used under the terms of\n * the GNU General Public License (\"GPL\") version 2 or any later version,\n * in which case the provisions of the GPL are applicable instead of\n * the above. If you wish to allow the use of your version of this file\n * only under the terms of the GPL and not to allow others to use your\n * version of this file under the BSD license, indicate your decision\n * by deleting the provisions above and replace them with the notice\n * and other provisions required by the GPL. If you do not delete the\n * provisions above, a recipient may use your version of this file under\n * either the BSD or the GPL.\n */\n\n#ifndef EVENT_H_\n#define EVENT_H_\n\n#ifdef EV_H\n# include EV_H\n#else\n# include \"ev.h\"\n#endif\n\n#ifndef EVLOOP_NONBLOCK\n# define EVLOOP_NONBLOCK EVRUN_NOWAIT\n#endif\n#ifndef EVLOOP_ONESHOT\n# define EVLOOP_ONESHOT EVRUN_ONCE\n#endif\n#ifndef EV_TIMEOUT\n# define EV_TIMEOUT EV_TIMER\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* we need sys/time.h for struct timeval only */\n#if !defined (WIN32) || defined (__MINGW32__)\n# include <time.h> /* mingw seems to need this, for whatever reason */\n# include <sys/time.h>\n#endif\n\nstruct event_base;\n\n#define EVLIST_TIMEOUT  0x01\n#define EVLIST_INSERTED 0x02\n#define EVLIST_SIGNAL   0x04\n#define EVLIST_ACTIVE   0x08\n#define EVLIST_INTERNAL 0x10\n#define EVLIST_INIT     0x80\n\ntypedef void (*event_callback_fn)(int, short, void *);\n\nstruct event\n{\n  /* libev watchers we map onto */\n  union {\n    struct ev_io io;\n    struct ev_signal sig;\n  } iosig;\n  struct ev_timer to;\n\n  /* compatibility slots */\n  struct event_base *ev_base;\n  event_callback_fn ev_callback;\n  void *ev_arg;\n  int ev_fd;\n  int ev_pri;\n  int ev_res;\n  int ev_flags;\n  short ev_events;\n};\n\nevent_callback_fn event_get_callback (const struct event *ev);\n\n#define EV_READ                    EV_READ\n#define EV_WRITE                   EV_WRITE\n#define EV_PERSIST                 0x10\n#define EV_ET                      0x20 /* nop */\n\n#define EVENT_SIGNAL(ev)           ((int) (ev)->ev_fd)\n#define EVENT_FD(ev)               ((int) (ev)->ev_fd)\n\n#define event_initialized(ev)      ((ev)->ev_flags & EVLIST_INIT)\n\n#define evtimer_add(ev,tv)         event_add (ev, tv)\n#define evtimer_set(ev,cb,data)    event_set (ev, -1, 0, cb, data)\n#define evtimer_del(ev)            event_del (ev)\n#define evtimer_pending(ev,tv)     event_pending (ev, EV_TIMEOUT, tv)\n#define evtimer_initialized(ev)    event_initialized (ev)\n\n#define timeout_add(ev,tv)         evtimer_add (ev, tv)\n#define timeout_set(ev,cb,data)    evtimer_set (ev, cb, data)\n#define timeout_del(ev)            evtimer_del (ev)\n#define timeout_pending(ev,tv)     evtimer_pending (ev, tv)\n#define timeout_initialized(ev)    evtimer_initialized (ev)\n\n#define signal_add(ev,tv)          event_add (ev, tv)\n#define signal_set(ev,sig,cb,data) event_set (ev, sig, EV_SIGNAL | EV_PERSIST, cb, data)\n#define signal_del(ev)             event_del (ev)\n#define signal_pending(ev,tv)      event_pending (ev, EV_SIGNAL, tv)\n#define signal_initialized(ev)     event_initialized (ev)\n\nconst char *event_get_version (void);\nconst char *event_get_method (void);\n\nvoid *event_init (void);\nvoid event_base_free (struct event_base *base);\n\n#define EVLOOP_ONCE      EVLOOP_ONESHOT\nint event_loop (int);\nint event_loopexit (struct timeval *tv);\nint event_dispatch (void);\n\n#define _EVENT_LOG_DEBUG 0\n#define _EVENT_LOG_MSG   1\n#define _EVENT_LOG_WARN  2\n#define _EVENT_LOG_ERR   3\ntypedef void (*event_log_cb)(int severity, const char *msg);\nvoid event_set_log_callback(event_log_cb cb);\n\nvoid event_set (struct event *ev, int fd, short events, void (*cb)(int, short, void *), void *arg);\nint event_once (int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv);\n\nint event_add (struct event *ev, struct timeval *tv);\nint event_del (struct event *ev);\nvoid event_active (struct event *ev, int res, short ncalls); /* ncalls is being ignored */\n\nint event_pending (struct event *ev, short, struct timeval *tv);\n\nint event_priority_init (int npri);\nint event_priority_set (struct event *ev, int pri);\n\nstruct event_base *event_base_new (void);\nconst char *event_base_get_method (const struct event_base *);\nint event_base_set (struct event_base *base, struct event *ev);\nint event_base_loop (struct event_base *base, int);\nint event_base_loopexit (struct event_base *base, struct timeval *tv);\nint event_base_dispatch (struct event_base *base);\nint event_base_once (struct event_base *base, int fd, short events, void (*cb)(int, short, void *), void *arg, struct timeval *tv);\nint event_base_priority_init (struct event_base *base, int fd);\n\n/* next line is different in the libevent+libev version */\n/*libevent-include*/\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libev/libev.m4",
    "content": "dnl this file is part of libev, do not make local modifications\ndnl http://software.schmorp.de/pkg/libev\n\ndnl libev support\nAC_CHECK_HEADERS(sys/inotify.h sys/epoll.h sys/event.h port.h poll.h sys/select.h sys/eventfd.h sys/signalfd.h)\n \nAC_CHECK_FUNCS(inotify_init epoll_ctl kqueue port_create poll select eventfd signalfd)\n \nAC_CHECK_FUNCS(clock_gettime, [], [\n   dnl on linux, try syscall wrapper first\n   if test $(uname) = Linux; then\n      AC_MSG_CHECKING(for clock_gettime syscall)\n      AC_LINK_IFELSE([AC_LANG_PROGRAM(\n                      [#include <unistd.h>\n                       #include <sys/syscall.h>\n                       #include <time.h>],\n                      [struct timespec ts; int status = syscall (SYS_clock_gettime, CLOCK_REALTIME, &ts)])],\n                     [ac_have_clock_syscall=1\n                      AC_DEFINE(HAVE_CLOCK_SYSCALL, 1, Define to 1 to use the syscall interface for clock_gettime)\n                      AC_MSG_RESULT(yes)],\n                     [AC_MSG_RESULT(no)])\n   fi\n   if test -z \"$LIBEV_M4_AVOID_LIBRT\" && test -z \"$ac_have_clock_syscall\"; then\n      AC_CHECK_LIB(rt, clock_gettime)\n      unset ac_cv_func_clock_gettime\n      AC_CHECK_FUNCS(clock_gettime)\n   fi\n])\n\nAC_CHECK_FUNCS(nanosleep, [], [\n   if test -z \"$LIBEV_M4_AVOID_LIBRT\"; then\n      AC_CHECK_LIB(rt, nanosleep)\n      unset ac_cv_func_nanosleep\n      AC_CHECK_FUNCS(nanosleep)\n   fi\n])\n\nif test -z \"$LIBEV_M4_AVOID_LIBM\"; then\n   LIBM=m\nfi\nAC_SEARCH_LIBS(floor, $LIBM, [AC_DEFINE(HAVE_FLOOR, 1, Define to 1 if the floor function is available)])\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/LICENSE.txt",
    "content": "Copyright © 2009-2013, RedJack, LLC.\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\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\n    the documentation and/or other materials provided with the\n    distribution.\n\n  • Neither the name of RedJack Software, LLC nor the names of its\n    contributors may be used to endorse or promote products derived\n    from this 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\nHOLDER 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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nnoinst_LTLIBRARIES = libipset.la\n\nbdd_src = bdd/assignments.c bdd/basics.c bdd/bdd-iterator.c bdd/expanded.c \\\n\t\t  bdd/reachable.c bdd/read.c bdd/write.c \nmap_src = map/allocation.c map/inspection.c map/ipv4_map.c map/ipv6_map.c \\\n\t\t  map/storage.c\nset_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \\\n\t\t  set/iterator.c set/storage.c\n\nlibipset_la_SOURCES = general.c ${bdd_src} ${map_src} ${set_src}\nlibipset_la_CFLAGS = -I$(top_srcdir)/libipset/include -I$(top_srcdir)/libcork/include\n\nlibipset_la_LDFLAGS = -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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 file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = libipset\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/auto/depcomp\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibipset_la_LIBADD =\nam__dirstamp = $(am__leading_dot)dirstamp\nam__objects_1 = bdd/libipset_la-assignments.lo \\\n\tbdd/libipset_la-basics.lo bdd/libipset_la-bdd-iterator.lo \\\n\tbdd/libipset_la-expanded.lo bdd/libipset_la-reachable.lo \\\n\tbdd/libipset_la-read.lo bdd/libipset_la-write.lo\nam__objects_2 = map/libipset_la-allocation.lo \\\n\tmap/libipset_la-inspection.lo map/libipset_la-ipv4_map.lo \\\n\tmap/libipset_la-ipv6_map.lo map/libipset_la-storage.lo\nam__objects_3 = set/libipset_la-allocation.lo \\\n\tset/libipset_la-inspection.lo set/libipset_la-ipv4_set.lo \\\n\tset/libipset_la-ipv6_set.lo set/libipset_la-iterator.lo \\\n\tset/libipset_la-storage.lo\nam_libipset_la_OBJECTS = libipset_la-general.lo $(am__objects_1) \\\n\t$(am__objects_2) $(am__objects_3)\nlibipset_la_OBJECTS = $(am_libipset_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibipset_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(libipset_la_CFLAGS) \\\n\t$(CFLAGS) $(libipset_la_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/auto/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libipset_la_SOURCES)\nDIST_SOURCES = $(libipset_la_SOURCES)\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nnoinst_LTLIBRARIES = libipset.la\nbdd_src = bdd/assignments.c bdd/basics.c bdd/bdd-iterator.c bdd/expanded.c \\\n\t\t  bdd/reachable.c bdd/read.c bdd/write.c \n\nmap_src = map/allocation.c map/inspection.c map/ipv4_map.c map/ipv6_map.c \\\n\t\t  map/storage.c\n\nset_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \\\n\t\t  set/iterator.c set/storage.c\n\nlibipset_la_SOURCES = general.c ${bdd_src} ${map_src} ${set_src}\nlibipset_la_CFLAGS = -I$(top_srcdir)/libipset/include -I$(top_srcdir)/libcork/include\nlibipset_la_LDFLAGS = -static\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libipset/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign libipset/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\nbdd/$(am__dirstamp):\n\t@$(MKDIR_P) bdd\n\t@: > bdd/$(am__dirstamp)\nbdd/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) bdd/$(DEPDIR)\n\t@: > bdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-assignments.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-basics.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-bdd-iterator.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-expanded.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-reachable.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-read.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nbdd/libipset_la-write.lo: bdd/$(am__dirstamp) \\\n\tbdd/$(DEPDIR)/$(am__dirstamp)\nmap/$(am__dirstamp):\n\t@$(MKDIR_P) map\n\t@: > map/$(am__dirstamp)\nmap/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) map/$(DEPDIR)\n\t@: > map/$(DEPDIR)/$(am__dirstamp)\nmap/libipset_la-allocation.lo: map/$(am__dirstamp) \\\n\tmap/$(DEPDIR)/$(am__dirstamp)\nmap/libipset_la-inspection.lo: map/$(am__dirstamp) \\\n\tmap/$(DEPDIR)/$(am__dirstamp)\nmap/libipset_la-ipv4_map.lo: map/$(am__dirstamp) \\\n\tmap/$(DEPDIR)/$(am__dirstamp)\nmap/libipset_la-ipv6_map.lo: map/$(am__dirstamp) \\\n\tmap/$(DEPDIR)/$(am__dirstamp)\nmap/libipset_la-storage.lo: map/$(am__dirstamp) \\\n\tmap/$(DEPDIR)/$(am__dirstamp)\nset/$(am__dirstamp):\n\t@$(MKDIR_P) set\n\t@: > set/$(am__dirstamp)\nset/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) set/$(DEPDIR)\n\t@: > set/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-allocation.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-inspection.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-ipv4_set.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-ipv6_set.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-iterator.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\nset/libipset_la-storage.lo: set/$(am__dirstamp) \\\n\tset/$(DEPDIR)/$(am__dirstamp)\n\nlibipset.la: $(libipset_la_OBJECTS) $(libipset_la_DEPENDENCIES) $(EXTRA_libipset_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libipset_la_LINK)  $(libipset_la_OBJECTS) $(libipset_la_LIBADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\t-rm -f bdd/*.$(OBJEXT)\n\t-rm -f bdd/*.lo\n\t-rm -f map/*.$(OBJEXT)\n\t-rm -f map/*.lo\n\t-rm -f set/*.$(OBJEXT)\n\t-rm -f set/*.lo\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libipset_la-general.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-assignments.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-basics.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-bdd-iterator.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-expanded.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-reachable.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-read.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@bdd/$(DEPDIR)/libipset_la-write.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@map/$(DEPDIR)/libipset_la-allocation.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@map/$(DEPDIR)/libipset_la-inspection.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@map/$(DEPDIR)/libipset_la-ipv4_map.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@map/$(DEPDIR)/libipset_la-ipv6_map.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@map/$(DEPDIR)/libipset_la-storage.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-allocation.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-inspection.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-ipv4_set.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-ipv6_set.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-iterator.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@set/$(DEPDIR)/libipset_la-storage.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\nlibipset_la-general.lo: general.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT libipset_la-general.lo -MD -MP -MF $(DEPDIR)/libipset_la-general.Tpo -c -o libipset_la-general.lo `test -f 'general.c' || echo '$(srcdir)/'`general.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libipset_la-general.Tpo $(DEPDIR)/libipset_la-general.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='general.c' object='libipset_la-general.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o libipset_la-general.lo `test -f 'general.c' || echo '$(srcdir)/'`general.c\n\nbdd/libipset_la-assignments.lo: bdd/assignments.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-assignments.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-assignments.Tpo -c -o bdd/libipset_la-assignments.lo `test -f 'bdd/assignments.c' || echo '$(srcdir)/'`bdd/assignments.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-assignments.Tpo bdd/$(DEPDIR)/libipset_la-assignments.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/assignments.c' object='bdd/libipset_la-assignments.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-assignments.lo `test -f 'bdd/assignments.c' || echo '$(srcdir)/'`bdd/assignments.c\n\nbdd/libipset_la-basics.lo: bdd/basics.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-basics.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-basics.Tpo -c -o bdd/libipset_la-basics.lo `test -f 'bdd/basics.c' || echo '$(srcdir)/'`bdd/basics.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-basics.Tpo bdd/$(DEPDIR)/libipset_la-basics.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/basics.c' object='bdd/libipset_la-basics.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-basics.lo `test -f 'bdd/basics.c' || echo '$(srcdir)/'`bdd/basics.c\n\nbdd/libipset_la-bdd-iterator.lo: bdd/bdd-iterator.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-bdd-iterator.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-bdd-iterator.Tpo -c -o bdd/libipset_la-bdd-iterator.lo `test -f 'bdd/bdd-iterator.c' || echo '$(srcdir)/'`bdd/bdd-iterator.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-bdd-iterator.Tpo bdd/$(DEPDIR)/libipset_la-bdd-iterator.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/bdd-iterator.c' object='bdd/libipset_la-bdd-iterator.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-bdd-iterator.lo `test -f 'bdd/bdd-iterator.c' || echo '$(srcdir)/'`bdd/bdd-iterator.c\n\nbdd/libipset_la-expanded.lo: bdd/expanded.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-expanded.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-expanded.Tpo -c -o bdd/libipset_la-expanded.lo `test -f 'bdd/expanded.c' || echo '$(srcdir)/'`bdd/expanded.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-expanded.Tpo bdd/$(DEPDIR)/libipset_la-expanded.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/expanded.c' object='bdd/libipset_la-expanded.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-expanded.lo `test -f 'bdd/expanded.c' || echo '$(srcdir)/'`bdd/expanded.c\n\nbdd/libipset_la-reachable.lo: bdd/reachable.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-reachable.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-reachable.Tpo -c -o bdd/libipset_la-reachable.lo `test -f 'bdd/reachable.c' || echo '$(srcdir)/'`bdd/reachable.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-reachable.Tpo bdd/$(DEPDIR)/libipset_la-reachable.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/reachable.c' object='bdd/libipset_la-reachable.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-reachable.lo `test -f 'bdd/reachable.c' || echo '$(srcdir)/'`bdd/reachable.c\n\nbdd/libipset_la-read.lo: bdd/read.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-read.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-read.Tpo -c -o bdd/libipset_la-read.lo `test -f 'bdd/read.c' || echo '$(srcdir)/'`bdd/read.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-read.Tpo bdd/$(DEPDIR)/libipset_la-read.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/read.c' object='bdd/libipset_la-read.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-read.lo `test -f 'bdd/read.c' || echo '$(srcdir)/'`bdd/read.c\n\nbdd/libipset_la-write.lo: bdd/write.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT bdd/libipset_la-write.lo -MD -MP -MF bdd/$(DEPDIR)/libipset_la-write.Tpo -c -o bdd/libipset_la-write.lo `test -f 'bdd/write.c' || echo '$(srcdir)/'`bdd/write.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) bdd/$(DEPDIR)/libipset_la-write.Tpo bdd/$(DEPDIR)/libipset_la-write.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='bdd/write.c' object='bdd/libipset_la-write.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o bdd/libipset_la-write.lo `test -f 'bdd/write.c' || echo '$(srcdir)/'`bdd/write.c\n\nmap/libipset_la-allocation.lo: map/allocation.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT map/libipset_la-allocation.lo -MD -MP -MF map/$(DEPDIR)/libipset_la-allocation.Tpo -c -o map/libipset_la-allocation.lo `test -f 'map/allocation.c' || echo '$(srcdir)/'`map/allocation.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) map/$(DEPDIR)/libipset_la-allocation.Tpo map/$(DEPDIR)/libipset_la-allocation.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='map/allocation.c' object='map/libipset_la-allocation.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o map/libipset_la-allocation.lo `test -f 'map/allocation.c' || echo '$(srcdir)/'`map/allocation.c\n\nmap/libipset_la-inspection.lo: map/inspection.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT map/libipset_la-inspection.lo -MD -MP -MF map/$(DEPDIR)/libipset_la-inspection.Tpo -c -o map/libipset_la-inspection.lo `test -f 'map/inspection.c' || echo '$(srcdir)/'`map/inspection.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) map/$(DEPDIR)/libipset_la-inspection.Tpo map/$(DEPDIR)/libipset_la-inspection.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='map/inspection.c' object='map/libipset_la-inspection.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o map/libipset_la-inspection.lo `test -f 'map/inspection.c' || echo '$(srcdir)/'`map/inspection.c\n\nmap/libipset_la-ipv4_map.lo: map/ipv4_map.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT map/libipset_la-ipv4_map.lo -MD -MP -MF map/$(DEPDIR)/libipset_la-ipv4_map.Tpo -c -o map/libipset_la-ipv4_map.lo `test -f 'map/ipv4_map.c' || echo '$(srcdir)/'`map/ipv4_map.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) map/$(DEPDIR)/libipset_la-ipv4_map.Tpo map/$(DEPDIR)/libipset_la-ipv4_map.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='map/ipv4_map.c' object='map/libipset_la-ipv4_map.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o map/libipset_la-ipv4_map.lo `test -f 'map/ipv4_map.c' || echo '$(srcdir)/'`map/ipv4_map.c\n\nmap/libipset_la-ipv6_map.lo: map/ipv6_map.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT map/libipset_la-ipv6_map.lo -MD -MP -MF map/$(DEPDIR)/libipset_la-ipv6_map.Tpo -c -o map/libipset_la-ipv6_map.lo `test -f 'map/ipv6_map.c' || echo '$(srcdir)/'`map/ipv6_map.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) map/$(DEPDIR)/libipset_la-ipv6_map.Tpo map/$(DEPDIR)/libipset_la-ipv6_map.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='map/ipv6_map.c' object='map/libipset_la-ipv6_map.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o map/libipset_la-ipv6_map.lo `test -f 'map/ipv6_map.c' || echo '$(srcdir)/'`map/ipv6_map.c\n\nmap/libipset_la-storage.lo: map/storage.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT map/libipset_la-storage.lo -MD -MP -MF map/$(DEPDIR)/libipset_la-storage.Tpo -c -o map/libipset_la-storage.lo `test -f 'map/storage.c' || echo '$(srcdir)/'`map/storage.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) map/$(DEPDIR)/libipset_la-storage.Tpo map/$(DEPDIR)/libipset_la-storage.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='map/storage.c' object='map/libipset_la-storage.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o map/libipset_la-storage.lo `test -f 'map/storage.c' || echo '$(srcdir)/'`map/storage.c\n\nset/libipset_la-allocation.lo: set/allocation.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-allocation.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-allocation.Tpo -c -o set/libipset_la-allocation.lo `test -f 'set/allocation.c' || echo '$(srcdir)/'`set/allocation.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-allocation.Tpo set/$(DEPDIR)/libipset_la-allocation.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/allocation.c' object='set/libipset_la-allocation.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-allocation.lo `test -f 'set/allocation.c' || echo '$(srcdir)/'`set/allocation.c\n\nset/libipset_la-inspection.lo: set/inspection.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-inspection.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-inspection.Tpo -c -o set/libipset_la-inspection.lo `test -f 'set/inspection.c' || echo '$(srcdir)/'`set/inspection.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-inspection.Tpo set/$(DEPDIR)/libipset_la-inspection.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/inspection.c' object='set/libipset_la-inspection.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-inspection.lo `test -f 'set/inspection.c' || echo '$(srcdir)/'`set/inspection.c\n\nset/libipset_la-ipv4_set.lo: set/ipv4_set.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-ipv4_set.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-ipv4_set.Tpo -c -o set/libipset_la-ipv4_set.lo `test -f 'set/ipv4_set.c' || echo '$(srcdir)/'`set/ipv4_set.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-ipv4_set.Tpo set/$(DEPDIR)/libipset_la-ipv4_set.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/ipv4_set.c' object='set/libipset_la-ipv4_set.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-ipv4_set.lo `test -f 'set/ipv4_set.c' || echo '$(srcdir)/'`set/ipv4_set.c\n\nset/libipset_la-ipv6_set.lo: set/ipv6_set.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-ipv6_set.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-ipv6_set.Tpo -c -o set/libipset_la-ipv6_set.lo `test -f 'set/ipv6_set.c' || echo '$(srcdir)/'`set/ipv6_set.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-ipv6_set.Tpo set/$(DEPDIR)/libipset_la-ipv6_set.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/ipv6_set.c' object='set/libipset_la-ipv6_set.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-ipv6_set.lo `test -f 'set/ipv6_set.c' || echo '$(srcdir)/'`set/ipv6_set.c\n\nset/libipset_la-iterator.lo: set/iterator.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-iterator.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-iterator.Tpo -c -o set/libipset_la-iterator.lo `test -f 'set/iterator.c' || echo '$(srcdir)/'`set/iterator.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-iterator.Tpo set/$(DEPDIR)/libipset_la-iterator.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/iterator.c' object='set/libipset_la-iterator.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-iterator.lo `test -f 'set/iterator.c' || echo '$(srcdir)/'`set/iterator.c\n\nset/libipset_la-storage.lo: set/storage.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -MT set/libipset_la-storage.lo -MD -MP -MF set/$(DEPDIR)/libipset_la-storage.Tpo -c -o set/libipset_la-storage.lo `test -f 'set/storage.c' || echo '$(srcdir)/'`set/storage.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) set/$(DEPDIR)/libipset_la-storage.Tpo set/$(DEPDIR)/libipset_la-storage.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='set/storage.c' object='set/libipset_la-storage.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libipset_la_CFLAGS) $(CFLAGS) -c -o set/libipset_la-storage.lo `test -f 'set/storage.c' || echo '$(srcdir)/'`set/storage.c\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\t-rm -rf bdd/.libs bdd/_libs\n\t-rm -rf map/.libs map/_libs\n\t-rm -rf set/.libs set/_libs\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES)\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_FILES)\n\t-rm -f bdd/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f bdd/$(am__dirstamp)\n\t-rm -f map/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f map/$(am__dirstamp)\n\t-rm -f set/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f set/$(am__dirstamp)\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-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-am\n\ndistclean: distclean-am\n\t-rm -rf ./$(DEPDIR) bdd/$(DEPDIR) map/$(DEPDIR) set/$(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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-am\n\t-rm -rf ./$(DEPDIR) bdd/$(DEPDIR) map/$(DEPDIR) set/$(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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \\\n\tctags-am distclean distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-am uninstall uninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/README.markdown",
    "content": "# ipset\n\nThe ipset library provides C data types for storing sets of IP\naddresses, and maps of IP addresses to integers.  It supports both\nIPv4 and IPv6 addresses.  It's implemented using [Binary Decision\nDiagrams](http://en.wikipedia.org/wiki/Binary_decision_diagram)\n(BDDs), which (we hypothesize) makes it space efficient for large\nsets.\n\nPlease see the INSTALL file for installation instructions.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nnoinst_LTLIBRARIES = libipset.la\n\nbdd_src = bdd/assignments.c bdd/basics.c bdd/bdd-iterator.c bdd/expanded.c \\\n\t\t  bdd/reachable.c bdd/read.c bdd/write.c \nmap_src = map/allocation.c map/inspection.c map/ipv4_map.c map/ipv6_map.c \\\n\t\t  map/storage.c\nset_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \\\n\t\t  set/iterator.c set/storage.c\n\nlibipset_la_SOURCES = ${bdd_src} ${map_src} ${set_src}\n\nlibipset_la_LDFLAGS = -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/Makefile.in",
    "content": ""
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/assignments.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n\n\nstruct ipset_assignment *\nipset_assignment_new()\n{\n    struct ipset_assignment  *assignment = cork_new(struct ipset_assignment);\n    cork_array_init(&assignment->values);\n    return assignment;\n}\n\n\nvoid\nipset_assignment_free(struct ipset_assignment *assignment)\n{\n    cork_array_done(&assignment->values);\n    free(assignment);\n}\n\n\nbool\nipset_assignment_equal(const struct ipset_assignment *assignment1,\n                       const struct ipset_assignment *assignment2)\n{\n    /* Identical pointers are trivially equal. */\n    if (assignment1 == assignment2) {\n        return true;\n    }\n\n    /* Otherwise we compare the assignments piecewise up through the end\n     * of the smaller vector. */\n    unsigned int  size1 = cork_array_size(&assignment1->values);\n    unsigned int  size2 = cork_array_size(&assignment2->values);\n    unsigned int  smaller_size = (size1 < size2)? size1: size2;\n\n    unsigned int  i;\n    for (i = 0; i < smaller_size; i++) {\n        if (cork_array_at(&assignment1->values, i) !=\n            cork_array_at(&assignment2->values, i)) {\n            return false;\n        }\n    }\n\n    /* If one of the assignment vectors is longer, any remaining\n     * elements must be indeterminate. */\n    if (size1 > smaller_size) {\n        for (i = smaller_size; i < size1; i++) {\n            if (cork_array_at(&assignment1->values, i) != IPSET_EITHER) {\n                return false;\n            }\n        }\n    }\n\n    if (size2 > smaller_size) {\n        for (i = smaller_size; i < size2; i++) {\n            if (cork_array_at(&assignment2->values, i) != IPSET_EITHER) {\n                return false;\n            }\n        }\n    }\n\n    /* If we make it through all of that, the two assignments are equal. */\n    return true;\n}\n\n\nvoid\nipset_assignment_cut(struct ipset_assignment *assignment,\n                     ipset_variable var)\n{\n    if (var < cork_array_size(&assignment->values)) {\n        assignment->values.size = var;\n    }\n}\n\n\nvoid\nipset_assignment_clear(struct ipset_assignment *assignment)\n{\n    ipset_assignment_cut(assignment, 0);\n}\n\n\nenum ipset_tribool\nipset_assignment_get(struct ipset_assignment *assignment, ipset_variable var)\n{\n    if (var < cork_array_size(&assignment->values)) {\n        /* If the requested variable is in the range of the values\n         * array, return whatever is stored there. */\n        return cork_array_at(&assignment->values, var);\n    } else {\n        /* Variables htat aren't in the values array are always EITHER. */\n        return IPSET_EITHER;\n    }\n}\n\n\nvoid\nipset_assignment_set(struct ipset_assignment *assignment,\n                     ipset_variable var, enum ipset_tribool value)\n{\n    /* Ensure that the vector is big enough to hold this variable\n     * assignment, inserting new EITHERs if needed. */\n    if (var >= cork_array_size(&assignment->values)) {\n        unsigned int  old_len = cork_array_size(&assignment->values);\n\n        /* Expand the array. */\n        cork_array_ensure_size(&assignment->values, var+1);\n        assignment->values.size = var+1;\n\n        /* Fill in EITHERs in the newly allocated elements. */\n        if (var != old_len) {\n            unsigned int  i;\n            for (i = old_len; i < var; i++) {\n                cork_array_at(&assignment->values, i) = IPSET_EITHER;\n            }\n        }\n    }\n\n    /* Assign the desired value. */\n    cork_array_at(&assignment->values, var) = value;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/basics.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <stdio.h>\n#include <string.h>\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/bits.h\"\n#include \"ipset/logging.h\"\n\n\nvoid\nipset_node_fprint(FILE *stream, struct ipset_node *node)\n{\n    fprintf(stream,\n            \"nonterminal(x%u? \" IPSET_NODE_ID_FORMAT\n            \": \" IPSET_NODE_ID_FORMAT \")\",\n            node->variable,\n            IPSET_NODE_ID_VALUES(node->high),\n            IPSET_NODE_ID_VALUES(node->low));\n}\n\n\nstatic cork_hash\nipset_node_hash(void *user_data, const void *key)\n{\n    const struct ipset_node  *node = key;\n    /* Hash of \"ipset_node\" */\n    cork_hash  hash = 0xf3b7dc44;\n    hash = cork_hash_variable(hash, node->variable);\n    hash = cork_hash_variable(hash, node->low);\n    hash = cork_hash_variable(hash, node->high);\n    return hash;\n}\n\nstatic bool\nipset_node_equals(void *user_data, const void *key1, const void *key2)\n{\n    const struct ipset_node  *node1 = key1;\n    const struct ipset_node  *node2 = key2;\n\n    if (node1 == node2) {\n        return true;\n    }\n\n    return\n        (node1->variable == node2->variable) &&\n        (node1->low == node2->low) &&\n        (node1->high == node2->high);\n}\n\n\n/* The free list in an ipset_node_cache is represented by a\n * singly-linked list of indices into the chunk array.  Since the\n * ipset_node instance is unused for nodes in the free list, we reuse\n * the refcount field to store the \"next\" index. */\n\n#define IPSET_NULL_INDEX ((ipset_variable) -1)\n\nstruct ipset_node_cache *\nipset_node_cache_new()\n{\n    struct ipset_node_cache  *cache = cork_new(struct ipset_node_cache);\n    cork_array_init(&cache->chunks);\n    cache->largest_index = 0;\n    cache->free_list = IPSET_NULL_INDEX;\n    cache->node_cache = cork_hash_table_new(0, 0);\n    cork_hash_table_set_hash\n        (cache->node_cache, (cork_hash_f) ipset_node_hash);\n    cork_hash_table_set_equals\n        (cache->node_cache, (cork_equals_f) ipset_node_equals);\n    return cache;\n}\n\nvoid\nipset_node_cache_free(struct ipset_node_cache *cache)\n{\n    size_t  i;\n    for (i = 0; i < cork_array_size(&cache->chunks); i++) {\n        free(cork_array_at(&cache->chunks, i));\n    }\n    cork_array_done(&cache->chunks);\n    cork_hash_table_free(cache->node_cache);\n    free(cache);\n}\n\n\n/**\n * Returns the index of a new ipset_node instance.\n */\nstatic ipset_value\nipset_node_cache_alloc_node(struct ipset_node_cache *cache)\n{\n    if (cache->free_list == IPSET_NULL_INDEX) {\n        /* Nothing in the free list; need to allocate a new node. */\n        ipset_value  next_index = cache->largest_index++;\n        ipset_value  chunk_index = next_index >> IPSET_BDD_NODE_CACHE_BIT_SIZE;\n        if (chunk_index >= cork_array_size(&cache->chunks)) {\n            /* We've filled up all of the existing chunks, and need to\n             * create a new one. */\n            DEBUG(\"        (allocating chunk %zu)\",\n                  cork_array_size(&cache->chunks));\n            struct ipset_node  *new_chunk = cork_calloc\n                (IPSET_BDD_NODE_CACHE_SIZE, sizeof(struct ipset_node));\n            cork_array_append(&cache->chunks, new_chunk);\n        }\n        return next_index;\n    } else {\n        /* Reuse a recently freed node. */\n        ipset_value  next_index = cache->free_list;\n        struct ipset_node  *node =\n            ipset_node_cache_get_nonterminal_by_index(cache, next_index);\n        cache->free_list = node->refcount;\n        return next_index;\n    }\n}\n\nipset_node_id\nipset_node_incref(struct ipset_node_cache *cache, ipset_node_id node_id)\n{\n    if (ipset_node_get_type(node_id) == IPSET_NONTERMINAL_NODE) {\n        struct ipset_node  *node =\n            ipset_node_cache_get_nonterminal(cache, node_id);\n        DEBUG(\"        [incref \" IPSET_NODE_ID_FORMAT \"]\",\n              IPSET_NODE_ID_VALUES(node_id));\n        node->refcount++;\n    }\n    return node_id;\n}\n\nvoid\nipset_node_decref(struct ipset_node_cache *cache, ipset_node_id node_id)\n{\n    if (ipset_node_get_type(node_id) == IPSET_NONTERMINAL_NODE) {\n        struct ipset_node  *node =\n            ipset_node_cache_get_nonterminal(cache, node_id);\n        DEBUG(\"        [decref \" IPSET_NODE_ID_FORMAT \"]\",\n              IPSET_NODE_ID_VALUES(node_id));\n        if (--node->refcount == 0) {\n            DEBUG(\"        [free   \" IPSET_NODE_ID_FORMAT \"]\",\n                  IPSET_NODE_ID_VALUES(node_id));\n            ipset_node_decref(cache, node->low);\n            ipset_node_decref(cache, node->high);\n            cork_hash_table_delete(cache->node_cache, node, NULL, NULL);\n\n            /* Add the node to the free list */\n            node->refcount = cache->free_list;\n            cache->free_list = ipset_nonterminal_value(node_id);\n        }\n    }\n}\n\nbool\nipset_node_cache_nodes_equal(const struct ipset_node_cache *cache1,\n                             ipset_node_id node_id1,\n                             const struct ipset_node_cache *cache2,\n                             ipset_node_id node_id2)\n{\n    struct ipset_node  *node1;\n    struct ipset_node  *node2;\n\n    if (ipset_node_get_type(node_id1) != ipset_node_get_type(node_id2)) {\n        return false;\n    }\n\n    if (ipset_node_get_type(node_id1) == IPSET_TERMINAL_NODE) {\n        return node_id1 == node_id2;\n    }\n\n    node1 = ipset_node_cache_get_nonterminal(cache1, node_id1);\n    node2 = ipset_node_cache_get_nonterminal(cache2, node_id2);\n    return\n        (node1->variable == node2->variable) &&\n        ipset_node_cache_nodes_equal(cache1, node1->low, cache2, node2->low) &&\n        ipset_node_cache_nodes_equal(cache1, node1->high, cache2, node2->high);\n}\n\nipset_node_id\nipset_node_cache_nonterminal(struct ipset_node_cache *cache,\n                             ipset_variable variable,\n                             ipset_node_id low, ipset_node_id high)\n{\n    /* Don't allow any nonterminals whose low and high subtrees are the\n     * same, since the nonterminal would be redundant. */\n    if (CORK_UNLIKELY(low == high)) {\n        DEBUG(\"        [ SKIP  nonterminal(x%u? \"\n              IPSET_NODE_ID_FORMAT \": \" IPSET_NODE_ID_FORMAT \")]\",\n              variable, IPSET_NODE_ID_VALUES(high), IPSET_NODE_ID_VALUES(low));\n        ipset_node_decref(cache, high);\n        return low;\n    }\n\n    /* Check to see if there's already a nonterminal with these contents\n     * in the cache. */\n    DEBUG(\"        [search nonterminal(x%u? \"\n          IPSET_NODE_ID_FORMAT \": \" IPSET_NODE_ID_FORMAT \")]\",\n          variable, IPSET_NODE_ID_VALUES(high), IPSET_NODE_ID_VALUES(low));\n\n    struct ipset_node  search_node;\n    search_node.variable = variable;\n    search_node.low = low;\n    search_node.high = high;\n\n    bool  is_new;\n    struct cork_hash_table_entry  *entry =\n        cork_hash_table_get_or_create\n        (cache->node_cache, &search_node, &is_new);\n\n    if (!is_new) {\n        /* There's already a node with these contents, so return its ID. */\n        ipset_node_id  node_id = (uintptr_t) entry->value;\n        DEBUG(\"        [reuse  \" IPSET_NODE_ID_FORMAT \"]\",\n              IPSET_NODE_ID_VALUES(node_id));\n        ipset_node_incref(cache, node_id);\n        ipset_node_decref(cache, low);\n        ipset_node_decref(cache, high);\n        return node_id;\n    } else {\n        /* This node doesn't exist yet.  Allocate a permanent copy of\n         * the node, add it to the cache, and then return its ID. */\n        ipset_value  new_index = ipset_node_cache_alloc_node(cache);\n        ipset_node_id  new_node_id = ipset_nonterminal_node_id(new_index);\n        struct ipset_node  *real_node =\n            ipset_node_cache_get_nonterminal_by_index(cache, new_index);\n        real_node->refcount = 1;\n        real_node->variable = variable;\n        real_node->low = low;\n        real_node->high = high;\n        entry->key = real_node;\n        entry->value = (void *) (uintptr_t) new_node_id;\n        DEBUG(\"        [new    \" IPSET_NODE_ID_FORMAT \"]\",\n              IPSET_NODE_ID_VALUES(new_node_id));\n        return new_node_id;\n    }\n}\n\n\nbool\nipset_bool_array_assignment(const void *user_data, ipset_variable variable)\n{\n    const bool  *bool_array = (const bool *) user_data;\n    return bool_array[variable];\n}\n\n\nbool\nipset_bit_array_assignment(const void *user_data, ipset_variable variable)\n{\n    return IPSET_BIT_GET(user_data, variable);\n}\n\n\nipset_value\nipset_node_evaluate(const struct ipset_node_cache *cache, ipset_node_id node_id,\n                    ipset_assignment_func assignment, const void *user_data)\n{\n    ipset_node_id  curr_node_id = node_id;\n    DEBUG(\"Evaluating BDD node \" IPSET_NODE_ID_FORMAT,\n          IPSET_NODE_ID_VALUES(node_id));\n\n    /* As long as the current node is a nonterminal, we have to check\n     * the value of the current variable. */\n    while (ipset_node_get_type(curr_node_id) == IPSET_NONTERMINAL_NODE) {\n        /* We have to look up this variable in the assignment. */\n        struct ipset_node  *node =\n            ipset_node_cache_get_nonterminal(cache, curr_node_id);\n        bool  this_value = assignment(user_data, node->variable);\n        DEBUG(\"[%3u] Nonterminal \" IPSET_NODE_ID_FORMAT,\n              node->variable, IPSET_NODE_ID_VALUES(curr_node_id));\n        DEBUG(\"[%3u]   x%u = %s\",\n              node->variable, node->variable, this_value? \"TRUE\": \"FALSE\");\n\n        if (this_value) {\n            /* This node's variable is true in the assignment vector, so\n             * trace down the high subtree. */\n            curr_node_id = node->high;\n        } else {\n            /* This node's variable is false in the assignment vector,\n             * so trace down the low subtree. */\n            curr_node_id = node->low;\n        }\n    }\n\n    /* Once we find a terminal node, we've got the final result. */\n    DEBUG(\"Evaluated result is %u\", ipset_terminal_value(curr_node_id));\n    return ipset_terminal_value(curr_node_id);\n}\n\n\n/* A “fake” BDD node given by an assignment. */\nstruct ipset_fake_node {\n    ipset_variable  current_var;\n    ipset_variable  var_count;\n    ipset_assignment_func  assignment;\n    const void  *user_data;\n    ipset_value  value;\n};\n\n/* A fake BDD node representing the terminal 0 value. */\nstatic struct ipset_fake_node  fake_terminal_0 = { 0, 0, NULL, 0, 0 };\n\n/* We set elements in a map using the if-then-else (ITE) operator:\n *\n *   new_set = new_element? new_value: old_set\n *\n * The below is a straight copy of the standard trinary APPLY from the BDD\n * literature, but without the caching of the results.  And also with the\n * wrinkle that the F argument to ITE (i.e., new_element) is given by an\n * assignment, and not by a BDD node.  (This lets us skip constructing the BDD\n * for the assignment, saving us a few cycles.)\n */\n\nstatic ipset_node_id\nipset_apply_ite(struct ipset_node_cache *cache, struct ipset_fake_node *f,\n                ipset_value g, ipset_node_id h)\n{\n    ipset_node_id  h_low;\n    ipset_node_id  h_high;\n    ipset_node_id  result_low;\n    ipset_node_id  result_high;\n\n    /* If F is a terminal, then we're in one of the following two\n     * cases:\n     *\n     *   1? G: H == G\n     *   0? G: H == H\n     */\n    if (f->current_var == f->var_count) {\n        ipset_node_id  result;\n        DEBUG(\"[%3u] F is terminal (value %u)\", f->current_var, f->value);\n\n        if (f->value == 0) {\n            DEBUG(\"[%3u] 0? \" IPSET_NODE_ID_FORMAT \": \" IPSET_NODE_ID_FORMAT\n                  \" = \" IPSET_NODE_ID_FORMAT,\n                  f->current_var,\n                  IPSET_NODE_ID_VALUES(ipset_terminal_node_id(g)),\n                  IPSET_NODE_ID_VALUES(h), IPSET_NODE_ID_VALUES(h));\n            result = ipset_node_incref(cache, h);\n        } else {\n            result = ipset_terminal_node_id(g);\n            DEBUG(\"[%3u] 1? \" IPSET_NODE_ID_FORMAT \": \" IPSET_NODE_ID_FORMAT\n                  \" = \" IPSET_NODE_ID_FORMAT,\n                  f->current_var, IPSET_NODE_ID_VALUES(result),\n                  IPSET_NODE_ID_VALUES(h), IPSET_NODE_ID_VALUES(result));\n        }\n\n        return result;\n    }\n\n    /* F? G: G == G */\n    if (h == ipset_terminal_node_id(g)) {\n        DEBUG(\"[%3u] F? \" IPSET_NODE_ID_FORMAT \": \" IPSET_NODE_ID_FORMAT\n              \" = \" IPSET_NODE_ID_FORMAT,\n              f->current_var, IPSET_NODE_ID_VALUES(h),\n              IPSET_NODE_ID_VALUES(h), IPSET_NODE_ID_VALUES(h));\n        return h;\n    }\n\n    /* From here to the end of the function, we know that F is a\n     * nonterminal. */\n    DEBUG(\"[%3u] F is nonterminal\", f->current_var);\n\n    /* We're going to do two recursive calls, a “low” one and a “high” one.  For\n     * each nonterminal that has the minimum variable number, we use its low and\n     * high pointers in the respective recursive call.  For all other\n     * nonterminals, and for all terminals, we use the operand itself. */\n\n    if (ipset_node_get_type(h) == IPSET_NONTERMINAL_NODE) {\n        struct ipset_node  *h_node =\n            ipset_node_cache_get_nonterminal(cache, h);\n\n        DEBUG(\"[%3u] H is nonterminal (variable %u)\",\n              f->current_var, h_node->variable);\n\n        if (h_node->variable < f->current_var) {\n            /* var(F) > var(H), so we only recurse down the H branches. */\n            DEBUG(\"[%3u] Recursing only down H\", f->current_var);\n            DEBUG(\"[%3u]   Recursing high\", f->current_var);\n            result_high = ipset_apply_ite(cache, f, g, h_node->high);\n            DEBUG(\"[%3u]   Back from high recursion\", f->current_var);\n            DEBUG(\"[%3u]   Recursing low\", f->current_var);\n            result_low = ipset_apply_ite(cache, f, g, h_node->low);\n            DEBUG(\"[%3u]   Back from low recursion\", f->current_var);\n            return ipset_node_cache_nonterminal\n                (cache, h_node->variable, result_low, result_high);\n        } else if (h_node->variable == f->current_var) {\n            /* var(F) == var(H), so we recurse down both branches. */\n            DEBUG(\"[%3u] Recursing down both F and H\", f->current_var);\n            h_low = h_node->low;\n            h_high = h_node->high;\n        } else {\n            /* var(F) < var(H), so we only recurse down the F branches. */\n            DEBUG(\"[%3u] Recursing only down F\", f->current_var);\n            h_low = h;\n            h_high = h;\n        }\n    } else {\n        /* H in nonterminal, so we only recurse down the F branches. */\n        DEBUG(\"[%3u] H is terminal (value %u)\",\n              f->current_var, ipset_terminal_value(h));\n        DEBUG(\"[%3u] Recursing only down F\", f->current_var);\n        h_low = h;\n        h_high = h;\n    }\n\n    /* F is a “fake” nonterminal node, since it comes from our assignment.  One\n     * of its branches will be the 0 terminal, and the other will be the fake\n     * nonterminal for the next variable in the assignment.  (Which one is low\n     * and which one is high depends on the value of the current variable in the\n     * assignment.) */\n\n    if (f->assignment(f->user_data, f->current_var)) {\n        /* The current variable is set in F.  The low branch is terminal 0; the\n         * high branch is the next variable in F. */\n        DEBUG(\"[%3u]   x[%u] is set\", f->current_var, f->current_var);\n        DEBUG(\"[%3u]   Recursing high\", f->current_var);\n        f->current_var++;\n        result_high = ipset_apply_ite(cache, f, g, h_high);\n        f->current_var--;\n        DEBUG(\"[%3u]   Back from high recursion: \" IPSET_NODE_ID_FORMAT,\n              f->current_var, IPSET_NODE_ID_VALUES(result_high));\n        DEBUG(\"[%3u]   Recursing low\", f->current_var);\n        fake_terminal_0.current_var = f->var_count;\n        fake_terminal_0.var_count = f->var_count;\n        result_low = ipset_apply_ite(cache, &fake_terminal_0, g, h_low);\n        DEBUG(\"[%3u]   Back from low recursion: \" IPSET_NODE_ID_FORMAT,\n              f->current_var, IPSET_NODE_ID_VALUES(result_low));\n    } else {\n        /* The current variable is NOT set in F.  The high branch is terminal 0;\n         * the low branch is the next variable in F. */\n        DEBUG(\"[%3u]   x[%u] is NOT set\", f->current_var, f->current_var);\n        DEBUG(\"[%3u]   Recursing high\", f->current_var);\n        fake_terminal_0.current_var = f->var_count;\n        fake_terminal_0.var_count = f->var_count;\n        result_high = ipset_apply_ite(cache, &fake_terminal_0, g, h_high);\n        DEBUG(\"[%3u]   Back from high recursion: \" IPSET_NODE_ID_FORMAT,\n              f->current_var, IPSET_NODE_ID_VALUES(result_high));\n        DEBUG(\"[%3u]   Recursing low\", f->current_var);\n        f->current_var++;\n        result_low = ipset_apply_ite(cache, f, g, h_low);\n        f->current_var--;\n        DEBUG(\"[%3u]   Back from low recursion: \" IPSET_NODE_ID_FORMAT,\n              f->current_var, IPSET_NODE_ID_VALUES(result_low));\n    }\n\n    return ipset_node_cache_nonterminal\n        (cache, f->current_var, result_low, result_high);\n}\n\nipset_node_id\nipset_node_insert(struct ipset_node_cache *cache, ipset_node_id node,\n                  ipset_assignment_func assignment, const void *user_data,\n                  ipset_variable var_count, ipset_value value)\n{\n    struct ipset_fake_node  f = { 0, var_count, assignment, user_data, 1 };\n    DEBUG(\"Inserting new element\");\n    return ipset_apply_ite(cache, &f, value, node);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/bdd-iterator.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/logging.h\"\n\n\n/**\n * Add the given node ID to the node stack, and trace down from it\n * until we find a terminal node.  Assign values to the variables for\n * each nonterminal that encounter along the way.  We check low edges\n * first, so each new variable we encounter will be assigned FALSE.\n * (The high edges will be checked eventually by a call to the\n * ipset_bdd_iterator_advance() function.)\n */\nstatic void\nadd_node(struct ipset_bdd_iterator *iterator, ipset_node_id node_id)\n{\n    /* Keep tracing down low edges until we reach a terminal. */\n    while (ipset_node_get_type(node_id) == IPSET_NONTERMINAL_NODE) {\n        /* Add this nonterminal node to the stack, and trace down\n         * further into the tree.  We check low edges first, so set the\n         * node's variable to FALSE in the assignment. */\n        struct ipset_node  *node =\n            ipset_node_cache_get_nonterminal(iterator->cache, node_id);\n\n        cork_array_append(&iterator->stack, node_id);\n        ipset_assignment_set(iterator->assignment, node->variable, false);\n\n        node_id = node->low;\n    }\n\n    /* Once we find a terminal node, save it away in the iterator result\n     * and return. */\n    iterator->value = ipset_terminal_value(node_id);\n}\n\n\nstruct ipset_bdd_iterator *\nipset_node_iterate(struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* First allocate the iterator itself, and all of its contained\n     * fields. */\n\n    struct ipset_bdd_iterator  *iterator =\n        cork_new(struct ipset_bdd_iterator);\n    iterator->finished = false;\n    iterator->cache = cache;\n    cork_array_init(&iterator->stack);\n    iterator->assignment = ipset_assignment_new();\n\n    /* Then add the root node to the iterator, tracing down until we\n     * find the first terminal node. */\n    add_node(iterator, root);\n    return iterator;\n}\n\n\nvoid\nipset_bdd_iterator_free(struct ipset_bdd_iterator *iterator)\n{\n    cork_array_done(&iterator->stack);\n    ipset_assignment_free(iterator->assignment);\n    free(iterator);\n}\n\n\nvoid\nipset_bdd_iterator_advance(struct ipset_bdd_iterator *iterator)\n{\n    /* If we're already at the end of the iterator, don't do anything. */\n    if (CORK_UNLIKELY(iterator->finished)) {\n        return;\n    }\n\n    /* We look at the last node in the stack.  If it's currently\n     * assigned a false value, then we track down its true branch.  If\n     * it's got a true branch, then we pop it off and check the next to\n     * last node. */\n\n    DEBUG(\"Advancing BDD iterator\");\n\n    while (cork_array_size(&iterator->stack) > 0) {\n        ipset_node_id  last_node_id =\n            cork_array_at\n            (&iterator->stack, cork_array_size(&iterator->stack) - 1);\n\n        struct ipset_node  *last_node =\n            ipset_node_cache_get_nonterminal(iterator->cache, last_node_id);\n\n        enum ipset_tribool  current_value =\n            ipset_assignment_get(iterator->assignment, last_node->variable);\n\n        /* The current value can't be EITHER, because we definitely\n         * assign a TRUE or FALSE to the variables of the nodes that we\n         * encounter. */\n        if (current_value == IPSET_TRUE) {\n            /* We've checked both outgoing edges for this node, so pop\n             * it off and look at its parent. */\n            iterator->stack.size--;\n\n            /* Before continuing, reset this node's variable to\n             * indeterminate in the assignment. */\n            ipset_assignment_set\n                (iterator->assignment, last_node->variable, IPSET_EITHER);\n        } else {\n            /* We've checked this node's low edge, but not its high\n             * edge.  Set the variable to TRUE in the assignment, and\n             * add the high edge's node to the node stack. */\n            ipset_assignment_set\n                (iterator->assignment, last_node->variable, IPSET_TRUE);\n            add_node(iterator, last_node->high);\n            return;\n        }\n    }\n\n    /* If we fall through then we ran out of nodes to check.  That means\n     * the iterator is done! */\n    iterator->finished = true;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/expanded.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/bits.h\"\n#include \"ipset/logging.h\"\n\n\nstatic void\ninitialize(struct ipset_expanded_assignment *exp,\n           const struct ipset_assignment *assignment,\n           ipset_variable var_count)\n{\n    /* First loop through all of the variables in the assignment vector,\n     * making sure not to go further than the caller requested. */\n\n    ipset_variable  last_assignment = cork_array_size(&assignment->values);\n    if (var_count < last_assignment) {\n        last_assignment = var_count;\n    }\n\n    ipset_variable  var;\n    for (var = 0; var < last_assignment; var++) {\n        enum ipset_tribool  curr_value =\n            cork_array_at(&assignment->values, var);\n\n        if (curr_value == IPSET_EITHER) {\n            /* If this variable is EITHER, start it off as FALSE, and\n             * add it to the eithers list. */\n            DEBUG(\"Variable %u is EITHER\", var);\n\n            IPSET_BIT_SET(exp->values.buf, var, false);\n            cork_array_append(&exp->eithers, var);\n        } else {\n            /* Otherwise set the variable to the same value in the\n             * expanded assignment as it is in the non-expanded one. */\n\n            DEBUG(\"Variable %u is %s\", var, curr_value? \"true\": \"false\");\n            IPSET_BIT_SET(exp->values.buf, var, curr_value);\n        }\n    }\n\n    /* If the caller requested more variables than there are in the\n     * assignment vector, add them to the eithers list. */\n    for (var = last_assignment; var < var_count; var++) {\n        DEBUG(\"Variable %u is implicitly EITHER\", var);\n        cork_array_append(&exp->eithers, var);\n    }\n}\n\n\nstruct ipset_expanded_assignment *\nipset_assignment_expand(const struct ipset_assignment *assignment,\n                        ipset_variable var_count)\n{\n    /* First allocate the iterator itself, and all of its contained\n     * fields. */\n\n    struct ipset_expanded_assignment  *exp;\n    unsigned int  values_size = (var_count / 8) + ((var_count % 8) != 0);\n\n    exp = cork_new(struct ipset_expanded_assignment);\n    exp->finished = false;\n    cork_buffer_init(&exp->values);\n    cork_buffer_ensure_size(&exp->values, values_size);\n    memset(exp->values.buf, 0, values_size);\n    cork_array_init(&exp->eithers);\n\n    /* Then initialize the values and eithers fields. */\n    initialize(exp, assignment, var_count);\n    return exp;\n}\n\n\nvoid\nipset_expanded_assignment_free(struct ipset_expanded_assignment *exp)\n{\n    if (exp == NULL) {\n        return;\n    }\n\n    cork_buffer_done(&exp->values);\n    cork_array_done(&exp->eithers);\n    free(exp);\n}\n\n\nvoid\nipset_expanded_assignment_advance(struct ipset_expanded_assignment *exp)\n{\n    /* If we're already at the end of the iterator, don't do anything. */\n    if (CORK_UNLIKELY(exp->finished)) {\n        return;\n    }\n\n    DEBUG(\"Advancing iterator\");\n\n    /* Look at the last EITHER bit in the assignment.  If it's 0, then\n     * set it to 1 and return.  Otherwise we set it to 0 and carry up to\n     * the previous indeterminate bit. */\n\n    size_t  i;\n    for (i = cork_array_size(&exp->eithers); i > 0; i--) {\n        size_t  idx = i - 1;\n        ipset_variable  either_var = cork_array_at(&exp->eithers, idx);\n        DEBUG(\"Checking EITHER variable %u\", either_var);\n\n        if (IPSET_BIT_GET(exp->values.buf, either_var)) {\n            /* This variable is currently true, so set it back to false\n             * and carry. */\n            DEBUG(\"  Variable %u is true, changing to false and carrying\",\n                  either_var);\n            IPSET_BIT_SET(exp->values.buf, either_var, false);\n        } else {\n            /* This variable is currently false, so set it to true and\n             * return. */\n            DEBUG(\"  Variable %u is false, changing to true\",\n                  either_var);\n            IPSET_BIT_SET(exp->values.buf, either_var, true);\n            return;\n        }\n    }\n\n    /* If we fall through then we've made it through all of the expanded\n     * assignments. */\n    exp->finished = true;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/reachable.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n#include <libcork/ds.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/logging.h\"\n\n\nsize_t\nipset_node_reachable_count(const struct ipset_node_cache *cache,\n                           ipset_node_id node)\n{\n    /* Create a set to track when we've visited a given node. */\n    struct cork_hash_table  *visited = cork_pointer_hash_table_new(0, 0);\n\n    /* And a queue of nodes to check. */\n    cork_array(ipset_node_id)  queue;\n    cork_array_init(&queue);\n\n    if (ipset_node_get_type(node) == IPSET_NONTERMINAL_NODE) {\n        DEBUG(\"Adding node %u to queue\", node);\n        cork_array_append(&queue, node);\n    }\n\n    /* And somewhere to store the result. */\n    size_t  node_count = 0;\n\n    /* Check each node in turn. */\n    while (!cork_array_is_empty(&queue)) {\n        ipset_node_id  curr = cork_array_at(&queue, --queue.size);\n\n        /* We don't have to do anything if this node is already in the\n         * visited set. */\n        if (cork_hash_table_get(visited, (void *) (uintptr_t) curr) == NULL) {\n            DEBUG(\"Visiting node %u for the first time\", curr);\n\n            /* Add the node to the visited set. */\n            cork_hash_table_put\n                (visited, (void *) (uintptr_t) curr,\n                 (void *) (uintptr_t) true, NULL, NULL, NULL);\n\n            /* Increase the node count. */\n            node_count++;\n\n            /* And add the node's nonterminal children to the visit\n             * queue. */\n            struct ipset_node  *node =\n                ipset_node_cache_get_nonterminal(cache, curr);\n\n            if (ipset_node_get_type(node->low) == IPSET_NONTERMINAL_NODE) {\n                DEBUG(\"Adding node %u to queue\", node->low);\n                cork_array_append(&queue, node->low);\n            }\n\n            if (ipset_node_get_type(node->high) == IPSET_NONTERMINAL_NODE) {\n                DEBUG(\"Adding node %u to queue\", node->high);\n                cork_array_append(&queue, node->high);\n            }\n        }\n    }\n\n    /* Return the result, freeing everything before we go. */\n    cork_hash_table_free(visited);\n    cork_array_done(&queue);\n    return node_count;\n}\n\n\nsize_t\nipset_node_memory_size(const struct ipset_node_cache *cache,\n                       ipset_node_id node)\n{\n    return ipset_node_reachable_count(cache, node) * sizeof(struct ipset_node);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/read.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <errno.h>\n#include <stdio.h>\n#include <string.h>\n\n#include <libcork/core.h>\n#include <libcork/ds.h>\n#include <libcork/helpers/errors.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/errors.h\"\n#include \"ipset/logging.h\"\n\n\nstatic const char  MAGIC_NUMBER[] = \"IP set\";\nstatic const size_t  MAGIC_NUMBER_LENGTH = sizeof(MAGIC_NUMBER) - 1;\n\n\n/**\n * On disk, we use a different node ID scheme than we do in memory.\n * Terminal node IDs are non-negative, and are equal to the terminal\n * value.  Nonterminal node IDs are negative, starting with -1.\n * Nonterminal -1 appears first on disk, then nonterminal -2, and so on.\n */\n\ntypedef int  serialized_id;\n\n\n/**\n * Sets a libcork error based on the contents of errno.\n */\nstatic void\ncreate_errno_error(FILE *stream)\n{\n    if (ferror(stream)) {\n        cork_error_set(IPSET_ERROR, IPSET_IO_ERROR, \"%s\", strerror(errno));\n    } else {\n        cork_unknown_error();\n    }\n}\n\n\n/**\n * Read in a big-endian uint8 from a stream.  If we can't read the\n * integer for some reason, return an error.\n */\nstatic int\nread_uint8(FILE *stream, uint8_t *dest)\n{\n    size_t  num_read = fread(dest, sizeof(uint8_t), 1, stream);\n    if (num_read != 1) {\n        create_errno_error(stream);\n        return -1;\n    }\n\n    /* for a byte, we don't need to endian-swap */\n    return 0;\n}\n\n\n/**\n * Read in a big-endian uint16 from a stream.  If we can't read the\n * integer for some reason, return an error.\n */\nstatic uint16_t\nread_uint16(FILE *stream, uint16_t *dest)\n{\n    size_t  num_read = fread(dest, sizeof(uint16_t), 1, stream);\n    if (num_read != 1) {\n        create_errno_error(stream);\n        return -1;\n    }\n\n    CORK_UINT16_BIG_TO_HOST_IN_PLACE(*dest);\n    return 0;\n}\n\n\n/**\n * Read in a big-endian uint32 from a stream.  If we can't read the\n * integer for some reason, return an error.\n */\nstatic uint32_t\nread_uint32(FILE *stream, uint32_t *dest)\n{\n    size_t  num_read = fread(dest, sizeof(uint32_t), 1, stream);\n    if (num_read != 1) {\n        create_errno_error(stream);\n        return -1;\n    }\n\n    CORK_UINT32_BIG_TO_HOST_IN_PLACE(*dest);\n    return 0;\n}\n\n\n/**\n * Read in a big-endian uint64 from a stream.  If we can't read the\n * integer for some reason, return an error.\n */\nstatic uint64_t\nread_uint64(FILE *stream, uint64_t *dest)\n{\n    size_t  num_read = fread(dest, sizeof(uint64_t), 1, stream);\n    if (num_read != 1) {\n        create_errno_error(stream);\n        return -1;\n    }\n\n    CORK_UINT64_BIG_TO_HOST_IN_PLACE(*dest);\n    return 0;\n}\n\n\n/**\n * A helper function that verifies that we've read exactly as many bytes\n * as we should, returning an error otherwise.\n */\nstatic int\nverify_cap(size_t bytes_read, size_t cap)\n{\n    if (bytes_read < cap) {\n        /* There's extra data at the end of the stream. */\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"Malformed set: extra data at end of stream.\");\n        return -1;\n    } else if (bytes_read > cap) {\n        /* We read more data than we were supposed to. */\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"Malformed set: read too much data.\");\n        return -1;\n    }\n\n    return 0;\n}\n\n/**\n * A helper function for reading a version 1 BDD stream.\n */\nstatic ipset_node_id\nload_v1(FILE *stream, struct ipset_node_cache *cache)\n{\n    DEBUG(\"Stream contains v1 IP set\");\n    ipset_node_id  result;\n    struct cork_hash_table  *cache_ids = cork_pointer_hash_table_new(0, 0);\n\n    /* We've already read in the magic number and version.  Next should\n     * be the length of the encoded set. */\n    uint64_t  length;\n    DEBUG(\"Reading encoded length\");\n    ei_check(read_uint64(stream, &length));\n\n    /* The length includes the magic number, version number, and the\n     * length field itself.  Remove those to get the cap on the\n     * remaining stream. */\n\n    size_t  bytes_read = 0;\n    size_t  cap = length -\n        MAGIC_NUMBER_LENGTH -\n        sizeof(uint16_t) -\n        sizeof(uint64_t);\n\n    DEBUG(\"Length cap is %zu bytes.\", cap);\n\n    /* Read in the number of nonterminals. */\n\n    uint32_t  nonterminal_count;\n    DEBUG(\"Reading number of nonterminals\");\n    ei_check(read_uint32(stream, &nonterminal_count));\n    bytes_read += sizeof(uint32_t);\n\n    /* If there are no nonterminals, then there's only a single terminal\n     * left to read. */\n\n    if (nonterminal_count == 0) {\n        uint32_t  value;\n        DEBUG(\"Reading single terminal value\");\n        ei_check(read_uint32(stream, &value));\n        bytes_read += sizeof(uint32_t);\n\n        /* We should have reached the end of the encoded set. */\n        ei_check(verify_cap(bytes_read, cap));\n\n        /* Create a terminal node for this value and return it. */\n        cork_hash_table_free(cache_ids);\n        return ipset_terminal_node_id(value);\n    }\n\n    /* Otherwise, read in each nonterminal.  We need to keep track of a\n     * mapping between each nonterminal's ID in the stream (which are\n     * number consecutively from -1), and its ID in the node cache\n     * (which could be anything). */\n\n    size_t  i;\n    for (i = 0; i < nonterminal_count; i++) {\n        serialized_id  serialized_id = -(i+1);\n\n        /* Each serialized node consists of a variable index, a low\n         * pointer, and a high pointer. */\n\n        uint8_t  variable;\n        ei_check(read_uint8(stream, &variable));\n        bytes_read += sizeof(uint8_t);\n\n        int32_t  low;\n        ei_check(read_uint32(stream, (uint32_t *) &low));\n        bytes_read += sizeof(int32_t);\n\n        int32_t  high;\n        ei_check(read_uint32(stream, (uint32_t *) &high));\n        bytes_read += sizeof(int32_t);\n\n        DEBUG(\"Read serialized node %d = (x%d? %\" PRId32 \": %\" PRId32 \")\",\n              serialized_id, variable, high, low);\n\n        /* Turn the low pointer into a node ID.  If the pointer is >= 0,\n         * it's a terminal value.  Otherwise, its a nonterminal ID,\n         * indexing into the serialized nonterminal array.*/\n\n        ipset_node_id  low_id;\n\n        if (low >= 0) {\n            low_id = ipset_terminal_node_id(low);\n        } else {\n            /* The file format guarantees that any node reference points\n             * to a node earlier in the serialized array.  That means we\n             * can assume that cache_ids has already been filled in for\n             * this node. */\n\n            low_id = (ipset_node_id) (uintptr_t)\n                cork_hash_table_get(cache_ids, (void *) (intptr_t) low);\n\n            DEBUG(\"  Serialized ID %\" PRId32 \" is internal ID %u\",\n                  low, low_id);\n        }\n\n        /* Do the same for the high pointer. */\n\n        ipset_node_id  high_id;\n\n        if (high >= 0) {\n            high_id = ipset_terminal_node_id(high);\n        } else {\n            /* The file format guarantees that any node reference points\n             * to a node earlier in the serialized array.  That means we\n             * can assume that cache_ids has already been filled in for\n             * this node. */\n\n            high_id = (ipset_node_id) (uintptr_t)\n                cork_hash_table_get(cache_ids, (void *) (intptr_t) high);\n\n            DEBUG(\"  Serialized ID %\" PRId32 \" is internal ID %u\",\n                  high, high_id);\n        }\n\n        /* Create a nonterminal node in the node cache. */\n        result = ipset_node_cache_nonterminal\n            (cache, variable, low_id, high_id);\n\n        DEBUG(\"Internal node %u = nonterminal(x%d? %u: %u)\",\n              result, (int) variable, high_id, low_id);\n\n        /* Remember the internal node ID for this new node, in case any\n         * later serialized nodes point to it. */\n\n        cork_hash_table_put\n            (cache_ids, (void *) (intptr_t) serialized_id,\n             (void *) (uintptr_t) result, NULL, NULL, NULL);\n    }\n\n    /* We should have reached the end of the encoded set. */\n    ei_check(verify_cap(bytes_read, cap));\n\n    /* The last node is the nonterminal for the entire set. */\n    cork_hash_table_free(cache_ids);\n    return result;\n\n  error:\n    /* If there's an error, clean up the objects that we've created\n     * before returning. */\n\n    cork_hash_table_free(cache_ids);\n    return 0;\n}\n\n\nipset_node_id\nipset_node_cache_load(FILE *stream, struct ipset_node_cache *cache)\n{\n    size_t bytes_read;\n\n    /* First, read in the magic number from the stream to ensure that\n     * this is an IP set. */\n\n    uint8_t  magic[MAGIC_NUMBER_LENGTH];\n\n    DEBUG(\"Reading IP set magic number\");\n    bytes_read = fread(magic, 1, MAGIC_NUMBER_LENGTH, stream);\n\n    if (ferror(stream)) {\n        create_errno_error(stream);\n        return 0;\n    }\n\n    if (bytes_read != MAGIC_NUMBER_LENGTH) {\n        /* We reached EOF before reading the entire magic number. */\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"Unexpected end of file\");\n        return 0;\n    }\n\n    if (memcmp(magic, MAGIC_NUMBER, MAGIC_NUMBER_LENGTH) != 0) {\n        /* The magic number doesn't match, so this isn't a BDD. */\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"Magic number doesn't match; this isn't an IP set.\");\n        return 0;\n    }\n\n    /* Read in the version number and dispatch to the right reading\n     * function. */\n\n    uint16_t  version;\n    DEBUG(\"Reading IP set version\");\n    xi_check(0, read_uint16(stream, &version));\n\n    switch (version) {\n        case 0x0001:\n            return load_v1(stream, cache);\n\n        default:\n            /* We don't know how to read this version number. */\n            cork_error_set\n                (IPSET_ERROR, IPSET_PARSE_ERROR,\n                 \"Unknown version number %\" PRIu16, version);\n            return 0;\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/bdd/write.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n#include <libcork/helpers/errors.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/logging.h\"\n\n\n/*-----------------------------------------------------------------------\n * Generic saving logic\n */\n\n/**\n * On disk, we use a different node ID scheme than we do in memory.\n * Terminal node IDs are non-negative, and are equal to the terminal\n * value.  Nonterminal node IDs are negative, starting with -1.\n * Nonterminal -1 appears first on disk, then nonterminal -2, and so\n * on.\n */\n\ntypedef int  serialized_id;\n\n\n/* forward declaration */\nstruct save_data;\n\n\n/**\n * A callback that outputs any necessary header.  Should return an int\n * status code indicating whether the write was successful.\n */\n\ntypedef int\n(*write_header_func)(struct save_data *save_data,\n                     struct ipset_node_cache *cache,\n                     ipset_node_id root);\n\n\n/**\n * A callback that outputs any necessary footer.  Should return an int\n * status code indicating whether the write was successful.\n */\n\ntypedef int\n(*write_footer_func)(struct save_data *save_data,\n                     struct ipset_node_cache *cache,\n                     ipset_node_id root);\n\n\n/**\n * A callback that actually outputs a terminal node to disk.  Should\n * return an int status code indicating whether the write was successful.\n */\n\ntypedef int\n(*write_terminal_func)(struct save_data *save_data,\n                       ipset_value terminal_value);\n\n\n/**\n * A callback that actually outputs a nonterminal node to disk.\n * Should return an int status code indicating whether the write was\n * successful.\n */\n\ntypedef int\n(*write_nonterminal_func)(struct save_data *save_data,\n                          serialized_id serialized_node,\n                          ipset_variable variable,\n                          serialized_id serialized_low,\n                          serialized_id serialized_high);\n\n\n/**\n * A helper struct containing all of the persistent data items needed\n * during the execution of a save.\n */\n\nstruct save_data {\n    /* The node cache that we're saving nodes from. */\n    struct ipset_node_cache  *cache;\n\n    /* The output stream to save the data to. */\n    struct cork_stream_consumer  *stream;\n\n    /* The cache of serialized IDs for any nonterminals that we've\n     * encountered so far. */\n    struct cork_hash_table  *serialized_ids;\n\n    /* The serialized ID to use for the next nonterminal that we\n     * encounter. */\n    serialized_id  next_serialized_id;\n\n    /* The callback used to write the file header to the stream. */\n    write_header_func  write_header;\n\n    /* The callback used to write the file footer to the stream. */\n    write_footer_func  write_footer;\n\n    /* The callback used to write terminals to the stream. */\n    write_terminal_func  write_terminal;\n\n    /* The callback used to write nonterminals to the stream. */\n    write_nonterminal_func  write_nonterminal;\n\n    /* A pointer to any additional data needed by the callbacks. */\n    void  *user_data;\n};\n\n\n/**\n * A helper function for ipset_node_save().  Outputs a nonterminal\n * node in a BDD tree, if we haven't done so already.  Ensures that\n * the children of the nonterminal are output before the nonterminal\n * is.  Returns the serialized ID of this node.\n */\n\nstatic int\nsave_visit_node(struct save_data *save_data,\n                ipset_node_id node_id, serialized_id *dest)\n{\n    /* Check whether we've already serialized this node. */\n\n    struct cork_hash_table_entry  *entry;\n    bool  is_new;\n    entry = cork_hash_table_get_or_create\n        (save_data->serialized_ids, (void *) (uintptr_t) node_id, &is_new);\n\n    if (!is_new) {\n        *dest = (intptr_t) entry->value;\n        return 0;\n    } else {\n        if (ipset_node_get_type(node_id) == IPSET_TERMINAL_NODE) {\n            /* For terminals, there isn't really anything to do — we\n             * just output the terminal node and use its value as the\n             * serialized ID. */\n\n            ipset_value  value = ipset_terminal_value(node_id);\n\n            DEBUG(\"Writing terminal(%d)\", value);\n            rii_check(save_data->write_terminal(save_data, value));\n            entry->value = (void *) (intptr_t) value;\n            *dest = value;\n            return 0;\n        } else {\n            /* For nonterminals, we drill down into the node's children\n             * first, then output the nonterminal node. */\n\n            struct ipset_node  *node =\n                ipset_node_cache_get_nonterminal(save_data->cache, node_id);\n            DEBUG(\"Visiting node %u nonterminal(x%u? %u: %u)\",\n                  node_id, node->variable, node->high, node->low);\n\n            /* Output the node's nonterminal children before we output\n             * the node itself. */\n            serialized_id  serialized_low;\n            serialized_id  serialized_high;\n            rii_check(save_visit_node(save_data, node->low, &serialized_low));\n            rii_check(save_visit_node(save_data, node->high, &serialized_high));\n\n            /* Output the nonterminal */\n            serialized_id  result = save_data->next_serialized_id--;\n            DEBUG(\"Writing node %u as serialized node %d = (x%u? %d: %d)\",\n                  node_id, result,\n                  node->variable, serialized_low, serialized_high);\n\n            entry->value = (void *) (intptr_t) result;\n            *dest = result;\n            return save_data->write_nonterminal\n                (save_data, result, node->variable,\n                 serialized_low, serialized_high);\n        }\n    }\n}\n\n\nstatic int\nsave_bdd(struct save_data *save_data,\n         struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* First, output the file header. */\n\n    DEBUG(\"Writing file header\");\n    rii_check(save_data->write_header(save_data, cache, root));\n\n    /* The serialized node IDs are different than the in-memory node\n     * IDs.  This means that, for our nonterminal nodes, we need a\n     * mapping from internal node ID to serialized node ID. */\n\n    DEBUG(\"Creating file caches\");\n    save_data->serialized_ids = cork_pointer_hash_table_new(0, 0);\n    save_data->next_serialized_id = -1;\n\n    /* Trace down through the BDD tree, outputting each terminal and\n     * nonterminal node as they're encountered. */\n\n    DEBUG(\"Writing nodes\");\n\n    serialized_id  last_serialized_id;\n    ei_check(save_visit_node(save_data, root, &last_serialized_id));\n\n    /* Finally, output the file footer and cleanup. */\n\n    DEBUG(\"Writing file footer\");\n    ei_check(save_data->write_footer(save_data, cache, root));\n\n    DEBUG(\"Freeing file caches\");\n    cork_hash_table_free(save_data->serialized_ids);\n    return 0;\n\n  error:\n    /* If there's an error, clean up the objects that we've created\n     * before returning. */\n    cork_hash_table_free(save_data->serialized_ids);\n    return -1;\n}\n\n\n/*-----------------------------------------------------------------------\n * Helper functions\n */\n\n/**\n * Write a NUL-terminated string to a stream.  If we can't write the\n * string for some reason, return an error.\n */\nstatic int\nwrite_string(struct cork_stream_consumer *stream, const char *str)\n{\n    size_t  len = strlen(str);\n    return cork_stream_consumer_data(stream, str, len, false);\n}\n\n\n/**\n * Write a big-endian uint8 to a stream.  If we can't write the\n * integer for some reason, return an error.\n */\nstatic int\nwrite_uint8(struct cork_stream_consumer *stream, uint8_t val)\n{\n    /* for a byte, we don't need to endian-swap */\n    return cork_stream_consumer_data(stream, &val, sizeof(uint8_t), false);\n}\n\n\n/**\n * Write a big-endian uint16 to a stream.  If we can't write the\n * integer for some reason, return an error.\n */\nstatic int\nwrite_uint16(struct cork_stream_consumer *stream, uint16_t val)\n{\n    CORK_UINT16_HOST_TO_BIG_IN_PLACE(val);\n    return cork_stream_consumer_data(stream, &val, sizeof(uint16_t), false);\n}\n\n\n/**\n * Write a big-endian uint32 to a stream.  If we can't write the\n * integer for some reason, return an error.\n */\n\nstatic int\nwrite_uint32(struct cork_stream_consumer *stream, uint32_t val)\n{\n    CORK_UINT32_HOST_TO_BIG_IN_PLACE(val);\n    return cork_stream_consumer_data(stream, &val, sizeof(uint32_t), false);\n}\n\n\n/**\n * Write a big-endian uint64 to a stream.  If we can't write the\n * integer for some reason, return an error.\n */\n\nstatic int\nwrite_uint64(struct cork_stream_consumer *stream, uint64_t val)\n{\n    CORK_UINT64_HOST_TO_BIG_IN_PLACE(val);\n    return cork_stream_consumer_data(stream, &val, sizeof(uint64_t), false);\n}\n\n\n/*-----------------------------------------------------------------------\n * V1 BDD file\n */\n\nstatic const char  MAGIC_NUMBER[] = \"IP set\";\nstatic const size_t  MAGIC_NUMBER_LENGTH = sizeof(MAGIC_NUMBER) - 1;\n\n\nstatic int\nwrite_header_v1(struct save_data *save_data,\n                struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* Output the magic number for an IP set, and the file format\n     * version that we're going to write. */\n    rii_check(cork_stream_consumer_data(save_data->stream, NULL, 0, true));\n    rii_check(write_string(save_data->stream, MAGIC_NUMBER));\n    rii_check(write_uint16(save_data->stream, 0x0001));\n\n    /* Determine how many reachable nodes there are, to calculate the\n     * size of the set. */\n    size_t  nonterminal_count = ipset_node_reachable_count(cache, root);\n    size_t  set_size =\n        MAGIC_NUMBER_LENGTH +    /* magic number */\n        sizeof(uint16_t) +        /* version number  */\n        sizeof(uint64_t) +        /* length of set */\n        sizeof(uint32_t) +        /* number of nonterminals */\n        (nonterminal_count *     /* for each nonterminal: */\n         (sizeof(uint8_t) +       /*   variable number */\n          sizeof(uint32_t) +      /*   low pointer */\n          sizeof(uint32_t)        /*   high pointer */\n         ));\n\n    /* If the root is a terminal, we need to add 4 bytes to the set\n     * size, for storing the terminal value. */\n    if (ipset_node_get_type(root) == IPSET_TERMINAL_NODE) {\n        set_size += sizeof(uint32_t);\n    }\n\n    rii_check(write_uint64(save_data->stream, set_size));\n    rii_check(write_uint32(save_data->stream, nonterminal_count));\n    return 0;\n}\n\n\nstatic int\nwrite_footer_v1(struct save_data *save_data,\n                struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* If the root is a terminal node, then we output the terminal value\n     * in place of the (nonexistent) list of nonterminal nodes. */\n\n    if (ipset_node_get_type(root) == IPSET_TERMINAL_NODE) {\n        ipset_value  value = ipset_terminal_value(root);\n        return write_uint32(save_data->stream, value);\n    }\n\n    return 0;\n}\n\n\nstatic int\nwrite_terminal_v1(struct save_data *save_data, ipset_value terminal_value)\n{\n    /* We don't have to write anything out for a terminal in a V1 file,\n     * since the terminal's value will be encoded into the node ID\n     * wherever it's used. */\n    return 0;\n}\n\n\nstatic int\nwrite_nonterminal_v1(struct save_data *save_data,\n                     serialized_id serialized_node,\n                     ipset_variable variable,\n                     serialized_id serialized_low,\n                     serialized_id serialized_high)\n{\n    rii_check(write_uint8(save_data->stream, variable));\n    rii_check(write_uint32(save_data->stream, serialized_low));\n    rii_check(write_uint32(save_data->stream, serialized_high));\n    return 0;\n}\n\n\nint\nipset_node_cache_save(struct cork_stream_consumer *stream, struct ipset_node_cache *cache,\n                      ipset_node_id node)\n{\n    struct save_data  save_data;\n    save_data.cache = cache;\n    save_data.stream = stream;\n    save_data.write_header = write_header_v1;\n    save_data.write_footer = write_footer_v1;\n    save_data.write_terminal = write_terminal_v1;\n    save_data.write_nonterminal = write_nonterminal_v1;\n    return save_bdd(&save_data, cache, node);\n}\n\n\n/*-----------------------------------------------------------------------\n * GraphViz dot file\n */\n\nstatic const char  *GRAPHVIZ_HEADER =\n    \"strict digraph bdd {\\n\";\n\nstatic const char  *GRAPHVIZ_FOOTER =\n    \"}\\n\";\n\n\nstruct dot_data {\n    /* The terminal value to leave out of the dot file.  This should be\n     * the default value of the set or map. */\n    ipset_value  default_value;\n\n    /* A scratch buffer */\n    struct cork_buffer  scratch;\n};\n\n\nstatic int\nwrite_header_dot(struct save_data *save_data,\n                 struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* Output the opening clause of the GraphViz script. */\n    rii_check(cork_stream_consumer_data(save_data->stream, NULL, 0, true));\n    return write_string(save_data->stream, GRAPHVIZ_HEADER);\n}\n\n\nstatic int\nwrite_footer_dot(struct save_data *save_data,\n                 struct ipset_node_cache *cache, ipset_node_id root)\n{\n    /* Output the closing clause of the GraphViz script. */\n    return write_string(save_data->stream, GRAPHVIZ_FOOTER);\n}\n\n\nstatic int\nwrite_terminal_dot(struct save_data *save_data, ipset_value terminal_value)\n{\n    struct dot_data  *dot_data = save_data->user_data;\n\n    /* If this terminal has the default value, skip it. */\n    if (terminal_value == dot_data->default_value) {\n        return 0;\n    }\n\n    /* Output a node for the terminal value. */\n    cork_buffer_printf\n        (&dot_data->scratch,\n         \"    t%d [shape=box, label=%d];\\n\",\n         terminal_value, terminal_value);\n    return write_string(save_data->stream, dot_data->scratch.buf);\n}\n\n\nstatic int\nwrite_nonterminal_dot(struct save_data *save_data,\n                      serialized_id serialized_node,\n                      ipset_variable variable,\n                      serialized_id serialized_low,\n                      serialized_id serialized_high)\n{\n    struct dot_data  *dot_data = save_data->user_data;\n\n    /* Include a node for the nonterminal value. */\n    cork_buffer_printf\n        (&dot_data->scratch,\n         \"    n%d [shape=circle,label=%u];\\n\",\n         (-serialized_node), variable);\n\n    /* Include an edge for the low pointer. */\n    if (serialized_low < 0) {\n        /* The low pointer is a nonterminal. */\n        cork_buffer_append_printf\n            (&dot_data->scratch,\n             \"    n%d -> n%d\",\n             (-serialized_node), (-serialized_low));\n    } else {\n        /* The low pointer is a terminal. */\n        ipset_value  low_value = (ipset_value) serialized_low;\n\n        if (low_value == dot_data->default_value) {\n            /* The terminal is the default value, so instead of a real\n             * terminal, connect this pointer to a dummy circle node. */\n            cork_buffer_append_printf\n                (&dot_data->scratch,\n                 \"    low%d [shape=circle,label=\\\"\\\"]\\n\"\n                 \"    n%d -> low%d\",\n                 (-serialized_node), (-serialized_node), (-serialized_node));\n        } else {\n            /* The terminal isn't a default, so go ahead and output it. */\n            cork_buffer_append_printf\n                (&dot_data->scratch,\n                 \"    n%d -> t%d\",\n                 (-serialized_node), serialized_low);\n        }\n    }\n\n    cork_buffer_append_printf\n        (&dot_data->scratch, \" [style=dashed,color=red]\\n\");\n\n    /* Include an edge for the high pointer. */\n    if (serialized_high < 0) {\n        /* The high pointer is a nonterminal. */\n        cork_buffer_append_printf\n            (&dot_data->scratch,\n             \"    n%d -> n%d\",\n             (-serialized_node), (-serialized_high));\n    } else {\n        /* The high pointer is a terminal. */\n        ipset_value  high_value = (ipset_value) serialized_high;\n\n        if (high_value == dot_data->default_value) {\n            /* The terminal is the default value, so instead of a real\n             * terminal, connect this pointer to a dummy circle node. */\n            cork_buffer_append_printf\n                (&dot_data->scratch,\n                 \"    high%d \"\n                 \"[shape=circle,\"\n                 \"fixedsize=true,\"\n                 \"height=0.25,\"\n                 \"width=0.25,\"\n                 \"label=\\\"\\\"]\\n\"\n                 \"    n%d -> high%d\",\n                 (-serialized_node), (-serialized_node), (-serialized_node));\n        } else {\n            /* The terminal isn't a default, so go ahead and output it. */\n            cork_buffer_append_printf\n                (&dot_data->scratch,\n                 \"    n%d -> t%d\",\n                 (-serialized_node), serialized_high);\n        }\n    }\n\n    cork_buffer_append_printf\n        (&dot_data->scratch, \" [style=solid,color=black]\\n\");\n\n    /* Output the clauses to the stream. */\n    return write_string(save_data->stream, dot_data->scratch.buf);\n}\n\n\nint\nipset_node_cache_save_dot(struct cork_stream_consumer *stream,\n                          struct ipset_node_cache *cache, ipset_node_id node)\n{\n    struct dot_data  dot_data = {\n        0,                       /* default value */\n        {NULL, 0, 0}\n    };\n\n    struct save_data  save_data;\n    save_data.cache = cache;\n    save_data.stream = stream;\n    save_data.write_header = write_header_dot;\n    save_data.write_footer = write_footer_dot;\n    save_data.write_terminal = write_terminal_dot;\n    save_data.write_nonterminal = write_nonterminal_dot;\n    save_data.user_data = &dot_data;\n    return save_bdd(&save_data, cache, node);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/general.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/ipset.h\"\n\n\nint\nipset_init_library()\n{\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/include/ipset/bdd/nodes.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2013, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef IPSET_BDD_NODES_H\n#define IPSET_BDD_NODES_H\n\n\n#include <stdio.h>\n\n#include <libcork/core.h>\n#include <libcork/ds.h>\n\n\n/*-----------------------------------------------------------------------\n * Preliminaries\n */\n\n/**\n * Each variable in a BDD is referred to by number.\n */\ntypedef unsigned int  ipset_variable;\n\n\n/**\n * Each BDD terminal represents an integer value.  The integer must be\n * non-negative, but must be within the range of the <i>signed</i>\n * integer type.\n */\ntypedef unsigned int  ipset_value;\n\n\n/**\n * An identifier for each distinct node in a BDD.\n *\n * Internal implementation note.  Since pointers are aligned to at\n * least two bytes, the ID of a terminal node has its LSB set to 1,\n * and has the terminal value stored in the remaining bits.  The ID of\n * a nonterminal node is simply a pointer to the node struct.\n */\ntypedef unsigned int  ipset_node_id;\n\n\n/**\n * Nodes can either be terminal or nonterminal.\n */\nenum ipset_node_type {\n    IPSET_NONTERMINAL_NODE = 0,\n    IPSET_TERMINAL_NODE = 1\n};\n\n\n/**\n * Return the type of node represented by a particular node ID.\n */\n#define ipset_node_get_type(node_id)  ((node_id) & 0x01)\n\n#define IPSET_NODE_ID_FORMAT  \"%s%u\"\n#define IPSET_NODE_ID_VALUES(node_id) \\\n    (ipset_node_get_type((node_id)) == IPSET_NONTERMINAL_NODE? \"s\": \"\"), \\\n    ((node_id) >> 1)\n\n\n/*-----------------------------------------------------------------------\n * Terminal nodes\n */\n\n/**\n * Return the value of a terminal node.  The result is undefined if\n * the node ID represents a nonterminal.\n */\n#define ipset_terminal_value(node_id)  ((node_id) >> 1)\n\n/**\n * Creates a terminal node ID from a terminal value.\n */\n#define ipset_terminal_node_id(value) \\\n    (((value) << 1) | IPSET_TERMINAL_NODE)\n\n\n/*-----------------------------------------------------------------------\n * Nonterminal nodes\n */\n\n/**\n * A nonterminal BDD node.  This is an inner node of the BDD tree.\n * The node represents one variable in an overall variable assignment.\n * The node has two children: a “low” child and a “high” child.  The\n * low child is the subtree that applies when the node's variable is\n * false or 0; the high child is the subtree that applies when it's\n * true or 1.\n *\n * This type does not take care of ensuring that all BDD nodes are\n * reduced; that is handled by the node_cache class.\n */\nstruct ipset_node {\n    /** The reference count for this node. */\n    unsigned int  refcount;\n    /** The variable that this node represents. */\n    ipset_variable  variable;\n    /** The subtree node for when the variable is false. */\n    ipset_node_id  low;\n    /** The subtree node for when the variable is true. */\n    ipset_node_id  high;\n};\n\n/**\n * Return the \"value\" of a nonterminal node.  The value of a nonterminal\n * is the index into the node array of the cache that the node belongs\n * to.\n */\n#define ipset_nonterminal_value(node_id) ((node_id) >> 1)\n\n/**\n * Creates a nonterminal node ID from a nonterminal value.\n */\n#define ipset_nonterminal_node_id(value) \\\n    (((value) << 1) | IPSET_NONTERMINAL_NODE)\n\n/**\n * Print out a node object.\n */\nvoid\nipset_node_fprint(FILE *stream, struct ipset_node *node);\n\n\n/*-----------------------------------------------------------------------\n * Node caches\n */\n\n/**\n * The log2 of the size of each chunk of BDD nodes.\n */\n/* 16K elements per cache */\n#define IPSET_BDD_NODE_CACHE_BIT_SIZE  6\n#define IPSET_BDD_NODE_CACHE_SIZE  (1 << IPSET_BDD_NODE_CACHE_BIT_SIZE)\n#define IPSET_BDD_NODE_CACHE_MASK  (IPSET_BDD_NODE_CACHE_SIZE - 1)\n\n/**\n * A cache for BDD nodes.  By creating and retrieving nodes through\n * the cache, we ensure that a BDD is reduced.\n */\nstruct ipset_node_cache {\n    /** The storage for the nodes managed by this cache. */\n    cork_array(struct ipset_node *)  chunks;\n    /** The largest nonterminal index that has been handed out. */\n    ipset_value  largest_index;\n    /** The index of the first node in the free list. */\n    ipset_value  free_list;\n    /** A cache of the nonterminal nodes, keyed by their contents. */\n    struct cork_hash_table  *node_cache;\n};\n\n/**\n * Returns the index of the chunk that the given nonterminal lives in.\n */\n#define ipset_nonterminal_chunk_index(index) \\\n    ((index) >> IPSET_BDD_NODE_CACHE_BIT_SIZE)\n\n/**\n * Returns the offset of the given nonterminal within its chunk.\n */\n#define ipset_nonterminal_chunk_offset(index) \\\n    ((index) & IPSET_BDD_NODE_CACHE_MASK)\n\n/**\n * Returns a pointer to the ipset_node for a given nonterminal index.\n */\n#define ipset_node_cache_get_nonterminal_by_index(cache, index) \\\n    (&cork_array_at(&(cache)->chunks, ipset_nonterminal_chunk_index((index))) \\\n     [ipset_nonterminal_chunk_offset((index))])\n\n/**\n * Returns the ipset_node for a given nonterminal node ID.\n */\n#define ipset_node_cache_get_nonterminal(cache, node_id) \\\n    (ipset_node_cache_get_nonterminal_by_index \\\n     ((cache), ipset_nonterminal_value((node_id))))\n\n/**\n * Create a new node cache.\n */\nstruct ipset_node_cache *\nipset_node_cache_new(void);\n\n/**\n * Free a node cache.\n */\nvoid\nipset_node_cache_free(struct ipset_node_cache *cache);\n\n/**\n * Create a new nonterminal node with the given contents, returning\n * its ID.  This function ensures that there is only one node with the\n * given contents in this cache.\n *\n * Steals references to low and high.\n */\nipset_node_id\nipset_node_cache_nonterminal(struct ipset_node_cache *cache,\n                             ipset_variable variable,\n                             ipset_node_id low, ipset_node_id high);\n\n\n/**\n * Increment the reference count of a nonterminal node.  (This is a\n * no-op for terminal nodes.)\n */\nipset_node_id\nipset_node_incref(struct ipset_node_cache *cache, ipset_node_id node);\n\n/**\n * Decrement the reference count of a nonterminal node.  If the\n * reference count reaches 0, the storage for the node will be\n * reclaimed.  (This is a no-op for terminal nodes.)\n */\nvoid\nipset_node_decref(struct ipset_node_cache *cache, ipset_node_id node);\n\n\n/**\n * Return the number of nodes that are reachable from the given node.\n * This does not include duplicates if a node is reachable via more\n * than one path.\n */\nsize_t\nipset_node_reachable_count(const struct ipset_node_cache *cache,\n                           ipset_node_id node);\n\n\n/**\n * Return the amount of memory used by the nodes in the given BDD.\n */\nsize_t\nipset_node_memory_size(const struct ipset_node_cache *cache,\n                       ipset_node_id node);\n\n\n/**\n * Load a BDD from an input stream.  The error field is filled in with\n * an error condition is the BDD can't be read for any reason.\n */\nipset_node_id\nipset_node_cache_load(FILE *stream, struct ipset_node_cache *cache);\n\n\n/**\n * Save a BDD to an output stream.  This encodes the set using only\n * those nodes that are reachable from the BDD's root node.\n */\nint\nipset_node_cache_save(struct cork_stream_consumer *stream,\n                      struct ipset_node_cache *cache, ipset_node_id node);\n\n\n/**\n * Compare two BDD nodes, possibly from different caches, for equality.\n */\nbool\nipset_node_cache_nodes_equal(const struct ipset_node_cache *cache1,\n                             ipset_node_id node1,\n                             const struct ipset_node_cache *cache2,\n                             ipset_node_id node2);\n\n\n/**\n * Save a GraphViz dot graph for a BDD.  The graph script is written\n * to the given output stream.  This graph only includes those nodes\n * that are reachable from the BDD's root node.\n */\nint\nipset_node_cache_save_dot(struct cork_stream_consumer *stream,\n                          struct ipset_node_cache *cache, ipset_node_id node);\n\n\n/*-----------------------------------------------------------------------\n * BDD operators\n */\n\n/**\n * A function that provides the value for each variable in a BDD.\n */\ntypedef bool\n(*ipset_assignment_func)(const void *user_data,\n                         ipset_variable variable);\n\n/**\n * An assignment function that gets the variable values from an array\n * of gbooleans.\n */\nbool\nipset_bool_array_assignment(const void *user_data,\n                            ipset_variable variable);\n\n/**\n * An assignment function that gets the variable values from an array\n * of bits.\n */\nbool\nipset_bit_array_assignment(const void *user_data,\n                           ipset_variable variable);\n\n/**\n * Evaluate a BDD given a particular assignment of variables.\n */\nipset_value\nipset_node_evaluate(const struct ipset_node_cache *cache, ipset_node_id node,\n                    ipset_assignment_func assignment,\n                    const void *user_data);\n\n/**\n * Add an assignment to the BDD.\n */\nipset_node_id\nipset_node_insert(struct ipset_node_cache *cache, ipset_node_id node,\n                  ipset_assignment_func assignment,\n                  const void *user_data, ipset_variable variable_count,\n                  ipset_value value);\n\n\n/*-----------------------------------------------------------------------\n * Variable assignments\n */\n\n/**\n * Each variable in the input to a Boolean function can be true or\n * false; it can also be EITHER, which means that the variable can be\n * either true or false in a particular assignment without affecting\n * the result of the function.\n */\nenum ipset_tribool {\n    IPSET_FALSE = 0,\n    IPSET_TRUE = 1,\n    IPSET_EITHER = 2\n};\n\n\n/**\n * An assignment is a mapping of variable numbers to Boolean values.\n * It represents an input to a Boolean function that maps to a\n * particular output value.  Each variable in the input to a Boolean\n * function can be true or false; it can also be EITHER, which means\n * that the variable can be either true or false in a particular\n * assignment without affecting the result of the function.\n */\n\nstruct ipset_assignment {\n    /**\n     * The underlying variable assignments are stored in a vector of\n     * tribools.  Every variable that has a true or false value must\n     * appear in the vector.  Variables that are EITHER only have to\n     * appear to prevent gaps in the vector.  Any variables outside\n     * the range of the vector are assumed to be EITHER.\n     */\n    cork_array(enum ipset_tribool)  values;\n};\n\n\n/**\n * Create a new assignment where all variables are indeterminite.\n */\nstruct ipset_assignment *\nipset_assignment_new();\n\n\n/**\n * Free an assignment.\n */\nvoid\nipset_assignment_free(struct ipset_assignment *assignment);\n\n\n/**\n * Compare two assignments for equality.\n */\nbool\nipset_assignment_equal(const struct ipset_assignment *assignment1,\n                       const struct ipset_assignment *assignment2);\n\n\n/**\n * Set the given variable, and all higher variables, to the EITHER\n * value.\n */\nvoid\nipset_assignment_cut(struct ipset_assignment *assignment, ipset_variable var);\n\n\n/**\n * Clear the assignment, setting all variables to the EITHER value.\n */\nvoid\nipset_assignment_clear(struct ipset_assignment *assignment);\n\n\n/**\n * Return the value assigned to a particular variable.\n */\nenum ipset_tribool\nipset_assignment_get(struct ipset_assignment *assignment, ipset_variable var);\n\n\n/**\n * Set the value assigned to a particular variable.\n */\nvoid\nipset_assignment_set(struct ipset_assignment *assignment,\n                     ipset_variable var, enum ipset_tribool value);\n\n\n/*-----------------------------------------------------------------------\n * Expanded assignments\n */\n\n/**\n * An iterator for expanding a variable assignment.  For each EITHER\n * variable in the assignment, the iterator yields a result with both\n * values.\n */\nstruct ipset_expanded_assignment {\n    /** Whether there are any more assignments in this iterator. */\n    bool finished;\n\n    /**\n     * The variable values in the current expanded assignment.  Since\n     * there won't be any EITHERs in the expanded assignment, we can\n     * use a byte array, and represent each variable by a single bit.\n     */\n    struct cork_buffer  values;\n\n    /**\n     * An array containing all of the variables that are EITHER in the\n     * original assignment.\n     */\n    cork_array(ipset_variable)  eithers;\n};\n\n\n/**\n * Return an iterator that expands a variable assignment.  For each\n * variable that's EITHER in the assignment, the iterator yields a\n * result with both values.  The iterator will ensure that the\n * specified number of variables are given concrete values.\n */\nstruct ipset_expanded_assignment *\nipset_assignment_expand(const struct ipset_assignment *assignment,\n                        ipset_variable var_count);\n\n\n/**\n * Free an expanded assignment iterator.\n */\nvoid\nipset_expanded_assignment_free(struct ipset_expanded_assignment *exp);\n\n\n/**\n * Advance the iterator to the next assignment.\n */\nvoid\nipset_expanded_assignment_advance(struct ipset_expanded_assignment *exp);\n\n\n/*-----------------------------------------------------------------------\n * BDD iterators\n */\n\n/**\n * An iterator for walking through the assignments for a given BDD\n * node.\n *\n * The iterator walks through each path in the BDD tree, stopping at\n * each terminal node.  Each time we reach a terminal node, we yield a\n * new ipset_assignment object representing the assignment of variables\n * along the current path.\n *\n * We maintain a stack of nodes leading to the current terminal, which\n * allows us to backtrack up the path to find the next terminal when\n * we increment the iterator.\n */\nstruct ipset_bdd_iterator {\n    /** Whether there are any more assignments in this iterator. */\n    bool finished;\n\n    /** The node cache that we're iterating through. */\n    struct ipset_node_cache  *cache;\n\n    /**\n     * The sequence of nonterminal nodes leading to the current\n     * terminal.\n     */\n    cork_array(ipset_node_id)  stack;\n\n    /** The current assignment. */\n    struct ipset_assignment  *assignment;\n\n    /**\n     * The value of the BDD's function when applied to the current\n     * assignment.\n     */\n    ipset_value  value;\n};\n\n\n/**\n * Return an iterator that yields all of the assignments in the given\n * BDD.  The iterator contains two items of interest.  The first is an\n * ipset_assignment providing the value that each variable takes, while\n * the second is the terminal value that is the result of the BDD's\n * function when applied to that variable assignment.\n */\nstruct ipset_bdd_iterator *\nipset_node_iterate(struct ipset_node_cache *cache, ipset_node_id root);\n\n\n/**\n * Free a BDD iterator.\n */\nvoid\nipset_bdd_iterator_free(struct ipset_bdd_iterator *iterator);\n\n\n/**\n * Advance the iterator to the next assignment.\n */\nvoid\nipset_bdd_iterator_advance(struct ipset_bdd_iterator *iterator);\n\n\n#endif  /* IPSET_BDD_NODES_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/include/ipset/bits.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef IPSET_BITS_H\n#define IPSET_BITS_H\n\n#include <libcork/core.h>\n\n/*-----------------------------------------------------------------------\n * Bit arrays\n */\n\n/**\n * Extract the byte that contains a particular bit in an array.\n */\n#define IPSET_BIT_GET_BYTE(array, i)            \\\n    (((uint8_t *) (array))[(i) / 8])\n\n/**\n * Create a bit mask that extracts a particular bit from the byte that\n * it lives in.\n */\n#define IPSET_BIT_ON_MASK(i)                    \\\n    (0x80 >> ((i) % 8))\n\n/**\n * Create a bit mask that extracts everything except for a particular\n * bit from the byte that it lives in.\n */\n#define IPSET_BIT_NEG_MASK(i)                   \\\n    (~IPSET_BIT_ON_MASK(i))\n\n/**\n * Return whether a particular bit is set in a byte array.  Bits are\n * numbered from 0, in a big-endian order.\n */\n#define IPSET_BIT_GET(array, i)                 \\\n    ((IPSET_BIT_GET_BYTE(array, i) &            \\\n      IPSET_BIT_ON_MASK(i)) != 0)\n\n/**\n * Set (or unset) a particular bit is set in a byte array.  Bits are\n * numbered from 0, in a big-endian order.\n */\n#define IPSET_BIT_SET(array, i, val)                           \\\n    (IPSET_BIT_GET_BYTE(array, i) =                            \\\n     (IPSET_BIT_GET_BYTE(array, i) & IPSET_BIT_NEG_MASK(i))    \\\n     | ((val)? IPSET_BIT_ON_MASK(i): 0))\n\n\n#endif  /* IPSET_BITS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/include/ipset/errors.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef IPSET_ERRORS_H\n#define IPSET_ERRORS_H\n\n\n#include <libcork/core.h>\n\n\n/*-----------------------------------------------------------------------\n * Error reporting\n */\n\n/* Hash of \"ipset.h\" */\n#define IPSET_ERROR  0xf2000181\n\nenum ipset_error {\n    IPSET_IO_ERROR,\n    IPSET_PARSE_ERROR\n};\n\n\n#endif  /* IPSET_ERRORS_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/include/ipset/ipset.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef IPSET_IPSET_H\n#define IPSET_IPSET_H\n\n#include <stdio.h>\n\n#include <libcork/core.h>\n#include <libcork/ds.h>\n\n#include <ipset/bdd/nodes.h>\n\n\nstruct ip_set {\n    struct ipset_node_cache  *cache;\n    ipset_node_id  set_bdd;\n};\n\n\nstruct ip_map {\n    struct ipset_node_cache  *cache;\n    ipset_node_id  map_bdd;\n    ipset_node_id  default_bdd;\n};\n\n\n/*---------------------------------------------------------------------\n * General functions\n */\n\nint\nipset_init_library(void);\n\n\n/*---------------------------------------------------------------------\n * IP set functions\n */\n\nvoid\nipset_init(struct ip_set *set);\n\nvoid\nipset_done(struct ip_set *set);\n\nstruct ip_set *\nipset_new(void);\n\nvoid\nipset_free(struct ip_set *set);\n\nbool\nipset_is_empty(const struct ip_set *set);\n\nbool\nipset_is_equal(const struct ip_set *set1, const struct ip_set *set2);\n\nsize_t\nipset_memory_size(const struct ip_set *set);\n\nint\nipset_save(FILE *stream, const struct ip_set *set);\n\nint\nipset_save_to_stream(struct cork_stream_consumer *stream,\n                     const struct ip_set *set);\n\nint\nipset_save_dot(FILE *stream, const struct ip_set *set);\n\nstruct ip_set *\nipset_load(FILE *stream);\n\nbool\nipset_ipv4_add(struct ip_set *set, struct cork_ipv4 *elem);\n\nbool\nipset_ipv4_add_network(struct ip_set *set, struct cork_ipv4 *elem,\n                       unsigned int cidr_prefix);\n\nbool\nipset_ipv4_remove(struct ip_set *set, struct cork_ipv4 *elem);\n\nbool\nipset_ipv4_remove_network(struct ip_set *set, struct cork_ipv4 *elem,\n                          unsigned int cidr_prefix);\n\nbool\nipset_contains_ipv4(const struct ip_set *set, struct cork_ipv4 *elem);\n\nbool\nipset_ipv6_add(struct ip_set *set, struct cork_ipv6 *elem);\n\nbool\nipset_ipv6_add_network(struct ip_set *set, struct cork_ipv6 *elem,\n                       unsigned int cidr_prefix);\n\nbool\nipset_ipv6_remove(struct ip_set *set, struct cork_ipv6 *elem);\n\nbool\nipset_ipv6_remove_network(struct ip_set *set, struct cork_ipv6 *elem,\n                          unsigned int cidr_prefix);\n\nbool\nipset_contains_ipv6(const struct ip_set *set, struct cork_ipv6 *elem);\n\nbool\nipset_ip_add(struct ip_set *set, struct cork_ip *addr);\n\nbool\nipset_ip_add_network(struct ip_set *set, struct cork_ip *addr,\n                     unsigned int cidr_prefix);\n\nbool\nipset_ip_remove(struct ip_set *set, struct cork_ip *addr);\n\nbool\nipset_ip_remove_network(struct ip_set *set, struct cork_ip *addr,\n                        unsigned int cidr_prefix);\n\nbool\nipset_contains_ip(const struct ip_set *set, struct cork_ip *elem);\n\n\n/* An internal state type used by the ipset_iterator_multiple_expansion_state\n * field. */\nenum ipset_iterator_state {\n    IPSET_ITERATOR_NORMAL = 0,\n    IPSET_ITERATOR_MULTIPLE_IPV4,\n    IPSET_ITERATOR_MULTIPLE_IPV6\n};\n\n\n/* An iterator that returns all of the IP addresses that have a given value in\n * an IP set or map. */\nstruct ipset_iterator {\n    /* The address of the current IP network in the iterator. */\n    struct cork_ip  addr;\n\n    /* The netmask of the current IP network in the iterator, given as a\n     * CIDR prefix.  For a single IP address, this will be 32 or 128. */\n    unsigned int  cidr_prefix;\n\n    /* Whether the current assignment needs to be expanded a second\n     * time.\n     *\n     * We have to expand IPv4 and IPv6 assignments separately, since the\n     * set of variables to turn into address bits is different.\n     * Unfortunately, a BDD assignment can contain both IPv4 and IPv6\n     * addresses, if variable 0 is EITHER.  (This is trivially true for\n     * the empty set, for instance.)  In this case, we have to\n     * explicitly set variable 0 to TRUE, expand it as IPv4, and then\n     * set it to FALSE, and expand it as IPv6.  This variable tells us\n     * whether we're in an assignment that needs to be expanded twice,\n     * and if so, which expansion we're currently in.\n     */\n    enum ipset_iterator_state  multiple_expansion_state;\n\n    /* An iterator for retrieving each assignment in the set's BDD. */\n    struct ipset_bdd_iterator  *bdd_iterator;\n\n    /* An iterator for expanding each assignment into individual IP\n     * addresses. */\n    struct ipset_expanded_assignment  *assignment_iterator;\n\n    /* Whether there are any more IP addresses in this iterator. */\n    bool  finished;\n\n    /* The desired value for each IP address. */\n    bool  desired_value;\n\n    /* Whether to summarize the contents of the IP set as networks,\n     * where possible. */\n    bool  summarize;\n};\n\n\nstruct ipset_iterator *\nipset_iterate(struct ip_set *set, bool desired_value);\n\nstruct ipset_iterator *\nipset_iterate_networks(struct ip_set *set, bool desired_value);\n\nvoid\nipset_iterator_free(struct ipset_iterator *iterator);\n\nvoid\nipset_iterator_advance(struct ipset_iterator *iterator);\n\n\n/*---------------------------------------------------------------------\n * IP map functions\n */\n\nvoid\nipmap_init(struct ip_map *map, int default_value);\n\nvoid\nipmap_done(struct ip_map *map);\n\nstruct ip_map *\nipmap_new(int default_value);\n\nvoid\nipmap_free(struct ip_map *map);\n\nbool\nipmap_is_empty(const struct ip_map *map);\n\nbool\nipmap_is_equal(const struct ip_map *map1, const struct ip_map *map2);\n\nsize_t\nipmap_memory_size(const struct ip_map *map);\n\nint\nipmap_save(FILE *stream, const struct ip_map *map);\n\nint\nipmap_save_to_stream(struct cork_stream_consumer *stream,\n                     const struct ip_map *map);\n\nstruct ip_map *\nipmap_load(FILE *stream);\n\nvoid\nipmap_ipv4_set(struct ip_map *map, struct cork_ipv4 *elem, int value);\n\nvoid\nipmap_ipv4_set_network(struct ip_map *map, struct cork_ipv4 *elem,\n                       unsigned int cidr_prefix, int value);\n\nint\nipmap_ipv4_get(struct ip_map *map, struct cork_ipv4 *elem);\n\nvoid\nipmap_ipv6_set(struct ip_map *map, struct cork_ipv6 *elem, int value);\n\nvoid\nipmap_ipv6_set_network(struct ip_map *map, struct cork_ipv6 *elem,\n                       unsigned int cidr_prefix, int value);\n\nint\nipmap_ipv6_get(struct ip_map *map, struct cork_ipv6 *elem);\n\nvoid\nipmap_ip_set(struct ip_map *map, struct cork_ip *addr, int value);\n\nvoid\nipmap_ip_set_network(struct ip_map *map, struct cork_ip *addr,\n                     unsigned int cidr_prefix, int value);\n\nint\nipmap_ip_get(struct ip_map *map, struct cork_ip *addr);\n\n\n#endif  /* IPSET_IPSET_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/include/ipset/logging.h",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#ifndef IPSET_LOGGING_H\n#define IPSET_LOGGING_H\n\n\n#if !defined(IPSET_DEBUG)\n#define IPSET_DEBUG 0\n#endif\n\n#if IPSET_DEBUG\n#include <stdio.h>\n#define DEBUG(...) \\\n    do { \\\n        fprintf(stderr, __VA_ARGS__); \\\n        fprintf(stderr, \"\\n\"); \\\n    } while (0)\n#else\n#define DEBUG(...) /* no debug messages */\n#endif\n\n\n#endif  /* IPSET_LOGGING_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nnoinst_LTLIBRARIES = libipset.la\n\nbdd_src = bdd/assignments.c bdd/basics.c bdd/bdd-iterator.c bdd/expanded.c \\\n\t\t  bdd/reachable.c bdd/read.c bdd/write.c \nmap_src = map/allocation.c map/inspection.c map/ipv4_map.c map/ipv6_map.c \\\n\t\t  map/storage.c\nset_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \\\n\t\t  set/iterator.c set/storage.c\n\nlibipset_la_SOURCES = ${bdd_src} ${map_src} ${set_src}\n\nlibipset_la_LDFLAGS = -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/Makefile.in",
    "content": ""
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/allocation.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/ipset.h\"\n\n\nvoid\nipmap_init(struct ip_map *map, int default_value)\n{\n    /* The map starts empty, so every value assignment should yield the\n     * default. */\n    map->cache = ipset_node_cache_new();\n    map->default_bdd = ipset_terminal_node_id(default_value);\n    map->map_bdd = map->default_bdd;\n}\n\n\nstruct ip_map *\nipmap_new(int default_value)\n{\n    struct ip_map  *result = cork_new(struct ip_map);\n    ipmap_init(result, default_value);\n    return result;\n}\n\n\nvoid\nipmap_done(struct ip_map *map)\n{\n    ipset_node_decref(map->cache, map->map_bdd);\n    ipset_node_cache_free(map->cache);\n}\n\n\nvoid\nipmap_free(struct ip_map *map)\n{\n    ipmap_done(map);\n    free(map);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/inspection-template.c.in",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/bits.h\"\n#include \"ipset/errors.h\"\n#include \"ipset/ipset.h\"\n\n\n/**\n * Given a BDD variable number, return the index of the corresponding\n * bit in an IP address.  IPv4 addresses use variables 1-32; IPv6\n * addresses use 1-128.  (Variable 0 is used to identify the kind of\n * address — TRUE for IPv4, FALSE for IPv6.)\n */\n\nstatic unsigned int\nIPMAP_NAME(bit_for_var)(ipset_variable var)\n{\n    return (var - 1);\n}\n\n\n/**\n * An assignment function that can be used to evaluate an IP map BDD.\n */\n\nstatic bool\nIPMAP_NAME(assignment)(const void *addr, ipset_variable var)\n{\n    if (var == 0) {\n        return IP_DISCRIMINATOR_VALUE;\n    } else {\n        unsigned int  bit = IPMAP_NAME(bit_for_var)(var);\n        return IPSET_BIT_GET(addr, bit);\n    }\n}\n\n\nint\nIPMAP_NAME(get)(struct ip_map *map, CORK_IP *elem)\n{\n    return ipset_node_evaluate\n        (map->cache, map->map_bdd, IPMAP_NAME(assignment), elem);\n}\n\n\nvoid\nIPMAP_NAME(set_network)(struct ip_map *map, CORK_IP *elem,\n                        unsigned int cidr_prefix, int value)\n{\n    /* Special case — the BDD for a netmask that's out of range never\n     * evaluates to true. */\n    if (cidr_prefix > IP_BIT_SIZE) {\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"CIDR block %u out of range [0..%u]\", cidr_prefix, IP_BIT_SIZE);\n        return;\n    }\n\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (map->cache, map->map_bdd,\n         IPMAP_NAME(assignment), elem, cidr_prefix + 1, value);\n    ipset_node_decref(map->cache, map->map_bdd);\n    map->map_bdd = new_bdd;\n}\n\n\nvoid\nIPMAP_NAME(set)(struct ip_map *map, CORK_IP *elem, int value)\n{\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (map->cache, map->map_bdd,\n         IPMAP_NAME(assignment), elem, IP_BIT_SIZE + 1, value);\n    ipset_node_decref(map->cache, map->map_bdd);\n    map->map_bdd = new_bdd;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/inspection.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/ipset.h\"\n\nbool\nipmap_is_empty(const struct ip_map *map)\n{\n    /* Since BDDs are unique, any map that maps all addresses to the\n     * default value is “empty”. */\n    return (map->map_bdd == map->default_bdd);\n}\n\nbool\nipmap_is_equal(const struct ip_map *map1, const struct ip_map *map2)\n{\n    return ipset_node_cache_nodes_equal\n        (map1->cache, map1->map_bdd, map2->cache, map2->map_bdd);\n}\n\nsize_t\nipmap_memory_size(const struct ip_map *map)\n{\n    return ipset_node_memory_size(map->cache, map->map_bdd);\n}\n\n\nvoid\nipmap_ip_set(struct ip_map *map, struct cork_ip *addr, int value)\n{\n    if (addr->version == 4) {\n        ipmap_ipv4_set(map, &addr->ip.v4, value);\n    } else {\n        ipmap_ipv6_set(map, &addr->ip.v6, value);\n    }\n}\n\n\nvoid\nipmap_ip_set_network(struct ip_map *map, struct cork_ip *addr,\n                     unsigned int cidr_prefix, int value)\n{\n    if (addr->version == 4) {\n        ipmap_ipv4_set_network(map, &addr->ip.v4, cidr_prefix, value);\n    } else {\n        ipmap_ipv6_set_network(map, &addr->ip.v6, cidr_prefix, value);\n    }\n}\n\n\nint\nipmap_ip_get(struct ip_map *map, struct cork_ip *addr)\n{\n    if (addr->version == 4) {\n        return ipmap_ipv4_get(map, &addr->ip.v4);\n    } else {\n        return ipmap_ipv6_get(map, &addr->ip.v6);\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/ipv4_map.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n/*\n * The IPv4 and IPv6 map types are basically identical, except for the\n * names of the functions, and the size of the values that are being\n * stored.  Rather than having two mostly duplicate definitions of each\n * function, we define “template functions” where anything that depends\n * on the size of the IP address is defined using the following macros.\n */\n\n\n/* The name of the cork_ipvX type. */\n#define CORK_IP  struct cork_ipv4\n\n/* The number of bits in an IPvX address. */\n#define IP_BIT_SIZE  32\n\n/* The value of the discriminator variable for an IPvX address. */\n#define IP_DISCRIMINATOR_VALUE  true\n\n/* Creates a identifier of the form “ipset_ipv4_<basename>”. */\n#define IPSET_NAME(basename) ipset_ipv4_##basename\n\n/* Creates a identifier of the form “ipmap_ipv4_<basename>”. */\n#define IPMAP_NAME(basename) ipmap_ipv4_##basename\n\n\n/* Now include all of the templates. */\n#include \"inspection-template.c.in\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/ipv6_map.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n/*\n * The IPv4 and IPv6 map types are basically identical, except for the\n * names of the functions, and the size of the values that are being\n * stored.  Rather than having two mostly duplicate definitions of each\n * function, we define “template functions” where anything that depends\n * on the size of the IP address is defined using the following macros.\n */\n\n\n/* The name of the cork_ipvX type. */\n#define CORK_IP  struct cork_ipv6\n\n/* The number of bits in an IPvX address. */\n#define IP_BIT_SIZE  128\n\n/* The value of the discriminator variable for an IPvX address. */\n#define IP_DISCRIMINATOR_VALUE  false\n\n/* Creates a identifier of the form “ipset_ipv6_<basename>”. */\n#define IPSET_NAME(basename) ipset_ipv6_##basename\n\n/* Creates a identifier of the form “ipmap_ipv6_<basename>”. */\n#define IPMAP_NAME(basename) ipmap_ipv6_##basename\n\n\n/* Now include all of the templates. */\n#include \"inspection-template.c.in\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/map/storage.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/errors.h\"\n#include \"ipset/ipset.h\"\n\n\nstatic void\ncreate_errno_error(FILE *stream)\n{\n    if (ferror(stream)) {\n        cork_error_set(IPSET_ERROR, IPSET_IO_ERROR, \"%s\", strerror(errno));\n    } else {\n        cork_unknown_error();\n    }\n}\n\nstruct file_consumer {\n    /* file_consumer is a subclass of cork_stream_consumer */\n    struct cork_stream_consumer  parent;\n    /* the file to write the data into */\n    FILE  *fp;\n};\n\nstatic int\nfile_consumer_data(struct cork_stream_consumer *vself,\n                   const void *buf, size_t size, bool is_first)\n{\n    struct file_consumer  *self =\n        cork_container_of(vself, struct file_consumer, parent);\n    size_t  bytes_written = fwrite(buf, 1, size, self->fp);\n    /* If there was an error writing to the file, then signal this to\n     * the producer */\n    if (bytes_written == size) {\n        return 0;\n    } else {\n        create_errno_error(self->fp);\n        return -1;\n    }\n}\n\nstatic int\nfile_consumer_eof(struct cork_stream_consumer *vself)\n{\n    /* We don't close the file, so there's nothing special to do at\n     * end-of-stream. */\n    return 0;\n}\n\n\nint\nipmap_save_to_stream(struct cork_stream_consumer *stream,\n                     const struct ip_map *map)\n{\n    return ipset_node_cache_save(stream, map->cache, map->map_bdd);\n}\n\nint\nipmap_save(FILE *fp, const struct ip_map *map)\n{\n    struct file_consumer  stream = {\n        { file_consumer_data, file_consumer_eof, NULL }, fp\n    };\n    return ipmap_save_to_stream(&stream.parent, map);\n}\n\n\nstruct ip_map *\nipmap_load(FILE *stream)\n{\n    struct ip_map  *map;\n    ipset_node_id  new_bdd;\n\n    /* It doesn't matter what default value we use here, because we're\n     * going to replace it with the default BDD we load in from the\n     * file. */\n    map = ipmap_new(0);\n    new_bdd = ipset_node_cache_load(stream, map->cache);\n    if (cork_error_occurred()) {\n        ipmap_free(map);\n        return NULL;\n    }\n\n    map->map_bdd = new_bdd;\n    return map;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nnoinst_LTLIBRARIES = libipset.la\n\nbdd_src = bdd/assignments.c bdd/basics.c bdd/bdd-iterator.c bdd/expanded.c \\\n\t\t  bdd/reachable.c bdd/read.c bdd/write.c \nmap_src = map/allocation.c map/inspection.c map/ipv4_map.c map/ipv6_map.c \\\n\t\t  map/storage.c\nset_src = set/allocation.c set/inspection.c set/ipv4_set.c set/ipv6_set.c \\\n\t\t  set/iterator.c set/storage.c\n\nlibipset_la_SOURCES = ${bdd_src} ${map_src} ${set_src}\n\nlibipset_la_LDFLAGS = -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/Makefile.in",
    "content": ""
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/allocation.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/ipset.h\"\n\n\nvoid\nipset_init(struct ip_set *set)\n{\n    /* The set starts empty, so every value assignment should yield\n     * false. */\n    set->cache = ipset_node_cache_new();\n    set->set_bdd = ipset_terminal_node_id(false);\n}\n\n\nstruct ip_set *\nipset_new(void)\n{\n    struct ip_set  *result = cork_new(struct ip_set);\n    ipset_init(result);\n    return result;\n}\n\n\nvoid\nipset_done(struct ip_set *set)\n{\n    ipset_node_decref(set->cache, set->set_bdd);\n    ipset_node_cache_free(set->cache);\n}\n\n\nvoid\nipset_free(struct ip_set *set)\n{\n    ipset_done(set);\n    free(set);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/inspection-template.c.in",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/bits.h\"\n#include \"ipset/errors.h\"\n#include \"ipset/ipset.h\"\n\n\n/**\n * Given a BDD variable number, return the index of the corresponding\n * bit in an IP address.  IPv4 addresses use variables 1-32; IPv6\n * addresses use 1-128.  (Variable 0 is used to identify the kind of\n * address — TRUE for IPv4, FALSE for IPv6.)\n */\n\nstatic unsigned int\nIPSET_NAME(bit_for_var)(ipset_variable var)\n{\n    return (var - 1);\n}\n\n\n/**\n * An assignment function that can be used to evaluate an IP set BDD.\n */\n\nstatic bool\nIPSET_NAME(assignment)(const void *addr, ipset_variable var)\n{\n    if (var == 0) {\n        return IP_DISCRIMINATOR_VALUE;\n    } else {\n        unsigned int  bit = IPSET_NAME(bit_for_var)(var);\n        return IPSET_BIT_GET(addr, bit);\n    }\n}\n\n\nbool\nIPSET_PRENAME(contains)(const struct ip_set *set, CORK_IP *elem)\n{\n    return ipset_node_evaluate\n        (set->cache, set->set_bdd, IPSET_NAME(assignment), elem);\n}\n\n\nbool\nIPSET_NAME(add_network)(struct ip_set *set, CORK_IP *elem,\n                        unsigned int cidr_prefix)\n{\n    /* Special case — the BDD for a netmask that's out of range never\n     * evaluates to true. */\n    if (cidr_prefix > IP_BIT_SIZE) {\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"CIDR block %u out of range [0..%u]\", cidr_prefix, IP_BIT_SIZE);\n        return false;\n    }\n\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (set->cache, set->set_bdd,\n         IPSET_NAME(assignment), elem, cidr_prefix + 1, 1);\n    bool  result = (new_bdd == set->set_bdd);\n    ipset_node_decref(set->cache, set->set_bdd);\n    set->set_bdd = new_bdd;\n    return result;\n}\n\n\nbool\nIPSET_NAME(add)(struct ip_set *set, CORK_IP *elem)\n{\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (set->cache, set->set_bdd,\n         IPSET_NAME(assignment), elem, IP_BIT_SIZE + 1, 1);\n    bool  result = (new_bdd == set->set_bdd);\n    ipset_node_decref(set->cache, set->set_bdd);\n    set->set_bdd = new_bdd;\n    return result;\n}\n\n\nbool\nIPSET_NAME(remove)(struct ip_set *set, CORK_IP *elem)\n{\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (set->cache, set->set_bdd,\n         IPSET_NAME(assignment), elem, IP_BIT_SIZE + 1, 0);\n    bool  result = (new_bdd == set->set_bdd);\n    ipset_node_decref(set->cache, set->set_bdd);\n    set->set_bdd = new_bdd;\n    return result;\n}\n\n\nbool\nIPSET_NAME(remove_network)(struct ip_set *set, CORK_IP *elem,\n                           unsigned int cidr_prefix)\n{\n    /* Special case — the BDD for a netmask that's out of range never\n     * evaluates to true. */\n    if (cidr_prefix > IP_BIT_SIZE) {\n        cork_error_set\n            (IPSET_ERROR, IPSET_PARSE_ERROR,\n             \"CIDR block %u out of range [0..%u]\", cidr_prefix, IP_BIT_SIZE);\n        return false;\n    }\n\n    ipset_node_id  new_bdd =\n        ipset_node_insert\n        (set->cache, set->set_bdd,\n         IPSET_NAME(assignment), elem, cidr_prefix + 1, 0);\n    bool  result = (new_bdd == set->set_bdd);\n    ipset_node_decref(set->cache, set->set_bdd);\n    set->set_bdd = new_bdd;\n    return result;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/inspection.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/ipset.h\"\n\nbool\nipset_is_empty(const struct ip_set *set)\n{\n    /* Since BDDs are unique, the only empty set is the “false” BDD. */\n    return (set->set_bdd == ipset_terminal_node_id(false));\n}\n\nbool\nipset_is_equal(const struct ip_set *set1, const struct ip_set *set2)\n{\n    return ipset_node_cache_nodes_equal\n        (set1->cache, set1->set_bdd, set2->cache, set2->set_bdd);\n}\n\nsize_t\nipset_memory_size(const struct ip_set *set)\n{\n    return ipset_node_memory_size(set->cache, set->set_bdd);\n}\n\n\nbool\nipset_ip_add(struct ip_set *set, struct cork_ip *addr)\n{\n    if (addr->version == 4) {\n        return ipset_ipv4_add(set, &addr->ip.v4);\n    } else {\n        return ipset_ipv6_add(set, &addr->ip.v6);\n    }\n}\n\n\nbool\nipset_ip_add_network(struct ip_set *set, struct cork_ip *addr,\n                     unsigned int cidr_prefix)\n{\n    if (addr->version == 4) {\n        return ipset_ipv4_add_network(set, &addr->ip.v4, cidr_prefix);\n    } else {\n        return ipset_ipv6_add_network(set, &addr->ip.v6, cidr_prefix);\n    }\n}\n\n\nbool\nipset_ip_remove(struct ip_set *set, struct cork_ip *addr)\n{\n    if (addr->version == 4) {\n        return ipset_ipv4_remove(set, &addr->ip.v4);\n    } else {\n        return ipset_ipv6_remove(set, &addr->ip.v6);\n    }\n}\n\n\nbool\nipset_ip_remove_network(struct ip_set *set, struct cork_ip *addr,\n                        unsigned int cidr_prefix)\n{\n    if (addr->version == 4) {\n        return ipset_ipv4_remove_network(set, &addr->ip.v4, cidr_prefix);\n    } else {\n        return ipset_ipv6_remove_network(set, &addr->ip.v6, cidr_prefix);\n    }\n}\n\n\nbool\nipset_contains_ip(const struct ip_set *set, struct cork_ip *addr)\n{\n    if (addr->version == 4) {\n        return ipset_contains_ipv4(set, &addr->ip.v4);\n    } else {\n        return ipset_contains_ipv6(set, &addr->ip.v6);\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/ipv4_set.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n/*\n * The IPv4 and IPv6 set types are basically identical, except for the\n * names of the functions, and the size of the values that are being\n * stored.  Rather than having two mostly duplicate definitions of each\n * function, we define “template functions” where anything that depends\n * on the size of the IP address is defined using the following macros.\n */\n\n\n/* The name of the cork_ipvX type. */\n#define CORK_IP  struct cork_ipv4\n\n/* The number of bits in an IPvX address. */\n#define IP_BIT_SIZE  32\n\n/* The value of the discriminator variable for an IPvX address. */\n#define IP_DISCRIMINATOR_VALUE  true\n\n/* Creates a identifier of the form “ipset_ipv4_<basename>”. */\n#define IPSET_NAME(basename) ipset_ipv4_##basename\n\n/* Creates a identifier of the form “ipset_<basename>_ipv4”. */\n#define IPSET_PRENAME(basename) ipset_##basename##_ipv4\n\n\n/* Now include all of the templates. */\n#include \"inspection-template.c.in\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/ipv6_set.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2009-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n/*\n * The IPv4 and IPv6 set types are basically identical, except for the\n * names of the functions, and the size of the values that are being\n * stored.  Rather than having two mostly duplicate definitions of\n * each function, we define “template functions” where anything that\n * depends on the size of the IP address is defined using the\n * following macros.\n */\n\n\n/* The name of the cork_ipvX type. */\n#define CORK_IP  struct cork_ipv6\n\n/* The number of bits in an IPvX address. */\n#define IP_BIT_SIZE  128\n\n/* The value of the discriminator variable for an IPvX address. */\n#define IP_DISCRIMINATOR_VALUE  false\n\n/* Creates a identifier of the form “ipset_ipv6_<basename>”. */\n#define IPSET_NAME(basename) ipset_ipv6_##basename\n\n/* Creates a identifier of the form “ipset_<basename>_ipv6”. */\n#define IPSET_PRENAME(basename) ipset_##basename##_ipv6\n\n\n/* Now include all of the templates. */\n#include \"inspection-template.c.in\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/iterator.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <string.h>\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/bits.h\"\n#include \"ipset/ipset.h\"\n#include \"ipset/logging.h\"\n\n\n#define IPV4_BIT_SIZE  32\n#define IPV6_BIT_SIZE  128\n\n\n/* Forward declarations */\n\nstatic void\nprocess_assignment(struct ipset_iterator *iterator);\n\nstatic void\nexpand_ipv6(struct ipset_iterator *iterator);\n\n\n/**\n * Find the highest non-EITHER bit in an assignment, starting from the\n * given bit index.\n */\nstatic unsigned int\nfind_last_non_either_bit(struct ipset_assignment *assignment,\n                         unsigned int starting_bit)\n{\n    unsigned int  i;\n\n    for (i = starting_bit; i >= 1; i--) {\n        enum ipset_tribool  value = ipset_assignment_get(assignment, i);\n        if (value != IPSET_EITHER) {\n            return i;\n        }\n    }\n\n    return 0;\n}\n\n\n/**\n * Create a generic IP address object from the current expanded\n * assignment.\n */\nstatic void\ncreate_ip_address(struct ipset_iterator *iterator)\n{\n    struct cork_ip  *addr = &iterator->addr;\n    struct ipset_expanded_assignment  *exp = iterator->assignment_iterator;\n\n    /* Initialize the address to all 0 bits. */\n    memset(addr, 0, sizeof(struct cork_ip));\n\n    /* Check variable 0 to see if this is an IPv4 or IPv6 address. */\n    addr->version = IPSET_BIT_GET(exp->values.buf, 0)? 4: 6;\n\n    /* Copy bits from the expanded assignment.  The number of bits to\n     * copy is given as the current netmask.  We'll have calculated that\n     * already based on the non-expanded assignment. */\n    unsigned int  i;\n    for (i = 0; i < iterator->cidr_prefix; i++) {\n        IPSET_BIT_SET(&addr->ip, i, IPSET_BIT_GET(exp->values.buf, i+1));\n    }\n\n#if IPSET_DEBUG\n    char  buf[CORK_IP_STRING_LENGTH];\n    cork_ip_to_raw_string(addr, buf);\n    DEBUG(\"Current IP address is %s/%u\", buf, iterator->cidr_prefix);\n#endif\n}\n\n\n/**\n * Advance the BDD iterator, taking into account that some assignments\n * need to be expanded twice.\n */\nstatic void\nadvance_assignment(struct ipset_iterator *iterator)\n{\n    /* Check the current state of the iterator to determine how to\n     * advance. */\n\n    /* In most cases, the assignment we just finished only needed to be\n     * expanded once.  So we move on to the next assignment and process\n     * it. */\n    if (CORK_LIKELY(iterator->multiple_expansion_state ==\n                    IPSET_ITERATOR_NORMAL))\n    {\n        ipset_bdd_iterator_advance(iterator->bdd_iterator);\n        process_assignment(iterator);\n        return;\n    }\n\n    /* If the assignment needs to be expanded twice, we'll do the IPv4\n     * expansion first.  If that's what we've just finished, do the IPv6\n     * expansion next. */\n\n    if (iterator->multiple_expansion_state == IPSET_ITERATOR_MULTIPLE_IPV4) {\n        DEBUG(\"Expanding IPv6 second\");\n\n        iterator->multiple_expansion_state = IPSET_ITERATOR_MULTIPLE_IPV6;\n        ipset_assignment_set\n            (iterator->bdd_iterator->assignment, 0, IPSET_FALSE);\n        expand_ipv6(iterator);\n        return;\n    }\n\n    /* If we've just finished the IPv6 expansion, then we've finished\n     * with this assignment.  Before moving on to the next one, we have\n     * to reset variable 0 to EITHER (which it was before we started\n     * this whole mess). */\n\n    if (iterator->multiple_expansion_state == IPSET_ITERATOR_MULTIPLE_IPV6) {\n        DEBUG(\"Finished both expansions\");\n\n        ipset_assignment_set\n            (iterator->bdd_iterator->assignment, 0, IPSET_EITHER);\n        ipset_bdd_iterator_advance(iterator->bdd_iterator);\n        process_assignment(iterator);\n        return;\n    }\n}\n\n\n/**\n * Process the current expanded assignment in the current BDD\n * assignment.\n */\nstatic void\nprocess_expanded_assignment(struct ipset_iterator *iterator)\n{\n    if (iterator->assignment_iterator->finished) {\n        /* If there isn't anything in the expanded assignment, advance\n         * to the next BDD assignment. */\n\n        DEBUG(\"Expanded assignment is finished\");\n        ipset_expanded_assignment_free(iterator->assignment_iterator);\n        iterator->assignment_iterator = NULL;\n        advance_assignment(iterator);\n    } else {\n        /* Otherwise, we've found a fully expanded assignment, so create\n         * an IP address for it and return. */\n        create_ip_address(iterator);\n    }\n}\n\n\n/**\n * Expand the current assignment as IPv4 addresses.\n */\nstatic void\nexpand_ipv4(struct ipset_iterator *iterator)\n{\n    unsigned int  last_bit;\n\n    if (iterator->summarize) {\n        last_bit = find_last_non_either_bit\n            (iterator->bdd_iterator->assignment, IPV4_BIT_SIZE);\n        DEBUG(\"Last non-either bit is %u\", last_bit);\n    } else {\n        last_bit = IPV4_BIT_SIZE;\n    }\n\n    iterator->assignment_iterator =\n        ipset_assignment_expand\n        (iterator->bdd_iterator->assignment, last_bit + 1);\n    iterator->cidr_prefix = last_bit;\n\n    process_expanded_assignment(iterator);\n}\n\n\n/**\n * Expand the current assignment as IPv4 addresses.\n */\nstatic void\nexpand_ipv6(struct ipset_iterator *iterator)\n{\n    unsigned int  last_bit;\n\n    if (iterator->summarize) {\n        last_bit = find_last_non_either_bit\n            (iterator->bdd_iterator->assignment, IPV6_BIT_SIZE);\n        DEBUG(\"Last non-either bit is %u\", last_bit);\n    } else {\n        last_bit = IPV6_BIT_SIZE;\n    }\n\n    iterator->assignment_iterator =\n        ipset_assignment_expand\n        (iterator->bdd_iterator->assignment, last_bit + 1);\n    iterator->cidr_prefix = last_bit;\n\n    process_expanded_assignment(iterator);\n}\n\n\n/**\n * Process the current assignment in the BDD iterator.\n */\n\nstatic void\nprocess_assignment(struct ipset_iterator *iterator)\n{\n    while (!iterator->bdd_iterator->finished) {\n        if (iterator->bdd_iterator->value == iterator->desired_value) {\n            /* If the BDD iterator hasn't finished, and the result of\n             * the function with this assignment matches what the caller\n             * wants, then we've found an assignment to generate IP\n             * addresses from.\n             *\n             * Try to expand this assignment, and process the first\n             * expanded assignment.  We want 32 + 1 variables if the\n             * current address is IPv4; 128 + 1 if it's IPv6. */\n\n            DEBUG(\"Got a matching BDD assignment\");\n            enum ipset_tribool  address_type = ipset_assignment_get\n                (iterator->bdd_iterator->assignment, 0);\n\n            if (address_type == IPSET_FALSE) {\n                /* FALSE means IPv6*/\n                DEBUG(\"Assignment is IPv6\");\n                iterator->multiple_expansion_state = IPSET_ITERATOR_NORMAL;\n                expand_ipv6(iterator);\n                return;\n            } else if (address_type == IPSET_TRUE) {\n                /* TRUE means IPv4*/\n                DEBUG(\"Assignment is IPv4\");\n                iterator->multiple_expansion_state = IPSET_ITERATOR_NORMAL;\n                expand_ipv4(iterator);\n                return;\n            } else {\n                /* EITHER means that this assignment contains both IPv4\n                 * and IPv6 addresses.  Expand it as IPv4 first. */\n                DEBUG(\"Assignment is both IPv4 and IPv6\");\n                DEBUG(\"Expanding IPv4 first\");\n                iterator->multiple_expansion_state =\n                    IPSET_ITERATOR_MULTIPLE_IPV4;\n                ipset_assignment_set\n                    (iterator->bdd_iterator->assignment, 0, IPSET_TRUE);\n                expand_ipv4(iterator);\n                return;\n            }\n        }\n\n        /* The BDD iterator has a value, but it doesn't match the one we\n         * want.  Advance the BDD iterator and try again. */\n        DEBUG(\"Value is %d, skipping\", iterator->bdd_iterator->value);\n        ipset_bdd_iterator_advance(iterator->bdd_iterator);\n    }\n\n    /* If we fall through, then the BDD iterator has finished.  That\n     * means there's nothing left for the set iterator. */\n\n    DEBUG(\"Set iterator is finished\");\n    ipset_expanded_assignment_free(iterator->assignment_iterator);\n    iterator->assignment_iterator = NULL;\n\n    ipset_bdd_iterator_free(iterator->bdd_iterator);\n    iterator->bdd_iterator = NULL;\n    iterator->finished = true;\n}\n\n\nstatic struct ipset_iterator *\ncreate_iterator(struct ip_set *set, bool desired_value, bool summarize)\n{\n    /* First allocate the iterator itself. */\n    struct ipset_iterator  *iterator = cork_new(struct ipset_iterator);\n    iterator->finished = false;\n    iterator->assignment_iterator = NULL;\n    iterator->desired_value = desired_value;\n    iterator->summarize = summarize;\n\n    /* Then create the iterator that returns each BDD assignment. */\n    DEBUG(\"Iterating set\");\n    iterator->bdd_iterator = ipset_node_iterate(set->cache, set->set_bdd);\n\n    /* Then drill down from the current BDD assignment, creating an\n     * expanded assignment for it. */\n    process_assignment(iterator);\n    return iterator;\n}\n\n\nstruct ipset_iterator *\nipset_iterate(struct ip_set *set, bool desired_value)\n{\n    return create_iterator(set, desired_value, false);\n}\n\n\nstruct ipset_iterator *\nipset_iterate_networks(struct ip_set *set, bool desired_value)\n{\n    return create_iterator(set, desired_value, true);\n}\n\n\nvoid\nipset_iterator_free(struct ipset_iterator *iterator)\n{\n    if (iterator->bdd_iterator != NULL) {\n        ipset_bdd_iterator_free(iterator->bdd_iterator);\n    }\n    if (iterator->assignment_iterator != NULL) {\n        ipset_expanded_assignment_free(iterator->assignment_iterator);\n    }\n    free(iterator);\n}\n\n\nvoid\nipset_iterator_advance(struct ipset_iterator *iterator)\n{\n    /* If we're already at the end of the iterator, don't do anything. */\n\n    if (CORK_UNLIKELY(iterator->finished)) {\n        return;\n    }\n\n    /* Otherwise, advance the expanded assignment iterator to the next\n     * assignment, and then drill down into it. */\n\n    DEBUG(\"Advancing set iterator\");\n    ipset_expanded_assignment_advance(iterator->assignment_iterator);\n    process_expanded_assignment(iterator);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libipset/set/storage.c",
    "content": "/* -*- coding: utf-8 -*-\n * ----------------------------------------------------------------------\n * Copyright © 2010-2012, RedJack, LLC.\n * All rights reserved.\n *\n * Please see the LICENSE.txt file in this distribution for license\n * details.\n * ----------------------------------------------------------------------\n */\n\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include <libcork/core.h>\n\n#include \"ipset/bdd/nodes.h\"\n#include \"ipset/errors.h\"\n#include \"ipset/ipset.h\"\n\n\nstatic void\ncreate_errno_error(FILE *stream)\n{\n    if (ferror(stream)) {\n        cork_error_set(IPSET_ERROR, IPSET_IO_ERROR, \"%s\", strerror(errno));\n    } else {\n        cork_unknown_error();\n    }\n}\n\nstruct file_consumer {\n    /* file_consumer is a subclass of cork_stream_consumer */\n    struct cork_stream_consumer  parent;\n    /* the file to write the data into */\n    FILE  *fp;\n};\n\nstatic int\nfile_consumer_data(struct cork_stream_consumer *vself,\n                   const void *buf, size_t size, bool is_first)\n{\n    struct file_consumer  *self =\n        cork_container_of(vself, struct file_consumer, parent);\n    size_t  bytes_written = fwrite(buf, 1, size, self->fp);\n    /* If there was an error writing to the file, then signal this to\n     * the producer */\n    if (bytes_written == size) {\n        return 0;\n    } else {\n        create_errno_error(self->fp);\n        return -1;\n    }\n}\n\nstatic int\nfile_consumer_eof(struct cork_stream_consumer *vself)\n{\n    /* We don't close the file, so there's nothing special to do at\n     * end-of-stream. */\n    return 0;\n}\n\nint\nipset_save_to_stream(struct cork_stream_consumer *stream,\n                     const struct ip_set *set)\n{\n    return ipset_node_cache_save(stream, set->cache, set->set_bdd);\n}\n\nint\nipset_save(FILE *fp, const struct ip_set *set)\n{\n    struct file_consumer  stream = {\n        { file_consumer_data, file_consumer_eof, NULL }, fp\n    };\n    return ipset_save_to_stream(&stream.parent, set);\n}\n\n\nint\nipset_save_dot(FILE *fp, const struct ip_set *set)\n{\n    struct file_consumer  stream = {\n        { file_consumer_data, file_consumer_eof, NULL }, fp\n    };\n    return ipset_node_cache_save_dot(&stream.parent, set->cache, set->set_bdd);\n}\n\n\nstruct ip_set *\nipset_load(FILE *stream)\n{\n    struct ip_set  *set;\n    ipset_node_id  new_bdd;\n\n    set = ipset_new();\n    new_bdd = ipset_node_cache_load(stream, set->cache);\n    if (cork_error_occurred()) {\n        ipset_free(set);\n        return NULL;\n    }\n\n    set->set_bdd = new_bdd;\n    return set;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/.gitignore",
    "content": "*.cmake\n*.dSYM\n*.exp\n*.gcda\n*.gcno\n*.la\n*.lo\n*.log\n*.o\n*.plist\n*.scan\n*.sdf\n*.status\n*.tar.*\n*~\n.DS_Store\n.deps\n.dirstamp\n.done\n.libs\nBuild\nINSTALL\nMakefile\naclocal.m4\nautom4te.cache\nbuild\ncompile\nconfdefs.h\ncoverage.info\nandroid-toolchain\nlibtool\nlibsodium.pc\nlibsodium-*\nm4/argz.m4\nm4/libtool.m4\nm4/ltoptions.m4\nm4/ltsugar.m4\nm4/ltversion.m4\nm4/lt~obsolete.m4\nman/*.html\nman/Makefile.in\nsrc/curvecp/curvecpclient\nsrc/curvecp/curvecpmakekey\nsrc/curvecp/curvecpmessage\nsrc/curvecp/curvecpprintkey\nsrc/curvecp/curvecpserver\nsrc/libsodium/*.def\nsrc/libsodium/include/sodium/version.h\nstamp-*\ntest/default/*.res\ntest/default/*.trs\ntest/default/aead_chacha20poly1305\ntest/default/auth\ntest/default/auth2\ntest/default/auth3\ntest/default/auth5\ntest/default/auth6\ntest/default/auth7\ntest/default/box\ntest/default/box2\ntest/default/box7\ntest/default/box8\ntest/default/box_easy\ntest/default/box_easy2\ntest/default/box_seed\ntest/default/chacha20\ntest/default/core1\ntest/default/core2\ntest/default/core3\ntest/default/core4\ntest/default/core5\ntest/default/core6\ntest/default/ed25519_convert\ntest/default/generichash\ntest/default/generichash2\ntest/default/generichash3\ntest/default/hash\ntest/default/hash3\ntest/default/onetimeauth\ntest/default/onetimeauth2\ntest/default/onetimeauth7\ntest/default/pwhash\ntest/default/pwhash_scrypt_ll\ntest/default/randombytes\ntest/default/scalarmult\ntest/default/scalarmult2\ntest/default/scalarmult5\ntest/default/scalarmult6\ntest/default/scalarmult7\ntest/default/secretbox\ntest/default/secretbox2\ntest/default/secretbox7\ntest/default/secretbox8\ntest/default/secretbox_easy\ntest/default/secretbox_easy2\ntest/default/shorthash\ntest/default/sign\ntest/default/sodium_core\ntest/default/sodium_utils\ntest/default/sodium_utils2\ntest/default/sodium_utils3\ntest/default/sodium_version\ntest/default/stream\ntest/default/stream2\ntest/default/stream3\ntest/default/stream4\ntest/default/verify1\ntest-driver\ntesting\nandroid-toolchain-*\nlibsodium-android-*\n/bin/\n/obj/\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/.travis.yml",
    "content": "language: c\n\nos:\n - linux\n - osx\n\ncompiler:\n - clang\n - gcc\n - g++\n\nbefore_script:\n - ./autogen.sh\n\nscript:\n - ./configure --disable-dependency-tracking\n - make distcheck\n - make distclean\n - ./configure --disable-dependency-tracking --enable-minimal\n - make distcheck\n\nenv:\n  global:\n   - secure: \"P4qv8aX+nogLlSy0lTMDIR6I5OLXq+qMijB4s+oCLME5BL2xPAn3v0QG5IoHdnU0ncRc1tEYZxN3F48Rp+Q7+wEVqSBLFS3oXzfNHJGEYoiaAcPNWO0R1kF8rcy8AuoAEomNeYS+5vhzQtaXklNtx/250p6MgGuMsdpMsRUKS/U=\"\n\naddons:\n  coverity_scan:\n    project:\n      name: \"jedisct1/libsodium\"\n      description: \"libsodium\"\n      notification_email: coverityscan@pureftpd.org\n      build_command_prepend: \"./autogen.sh ; ./configure\"\n      build_command: \"make -j4\"\n      branch_pattern: coverity_scan\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/AUTHORS",
    "content": "\nDesigners\n=========\n\nblake2                                 Jean-Philippe Aumasson\n                                       Christian Winnerlein\n                                       Samuel Neves\n                                       Zooko Wilcox-O'Hearn\n\nchacha20                               Daniel J. Bernstein\n\nsalsa20                                Daniel J. Bernstein\n\nchacha20poly1305                       Adam Langley\n\ncurve25519                             Daniel J. Bernstein\n\ncurve25519xsalsa20poly1305             Daniel J. Bernstein\n\ned25519                                Daniel J. Bernstein\n                                       Bo-Yin Yang\n                                       Niels Duif\n                                       Peter Schwabe\n                                       Tanja Lange\n\npoly1305                               Daniel J. Bernstein\n\nsiphash                                Jean-Philippe Aumasson\n                                       Daniel J. Bernstein\n\nscrypt                                 Colin Percival\n\nImplementors\n============\n\ncrypto_aead/aes256gcm/aesni            Romain Dolbeau\n                                       Frank Denis\n\ncrypto_aead/chacha20poly1305           Frank Denis\n\ncrypto_box/curve25519xsalsa20poly1305  Daniel J. Bernstein\n\ncrypto_core/hsalsa20                   Daniel J. Bernstein\ncrypto_core/salsa20\ncrypto_core/salsa2012\ncrypto_core/salsa208\n\ncrypto_hash/sha256                     Colin Percival\ncrypto_hash/sha512\ncrypto_hash/sha512256\n\ncrypto_auth/hmacsha256                 Colin Percival\ncrypto_auth/hmacsha512\ncrypto_auth/hmacsha512256\n\ncrypto_scalarmult/curve25519/ref10     Daniel J. Bernstein\n\ncrypto_scalarmult/curve25519/donna_c64 Adam Langley\n\ncrypto_scalarmult/curve25519/sandy2x   Tung Chou\n\ncrypto_secretbox/xsalsa20poly1305      Daniel J. Bernstein\n\ncrypto_sign/ed25519                    Peter Schwabe\n                                       Daniel J. Bernstein\n                                       Niels Duif\n                                       Tanja Lange\n                                       Bo-Yin Yang\n\ncrypto_stream/aes128ctr                Peter Schwabe\n\ncrypto_stream/chacha20/ref             Daniel J. Bernstein\n\ncrypto_stream/chacha20/vec             Ted Krovetz\n\ncrypto_stream/salsa20                  Daniel J. Bernstein\ncrypto_stream/salsa2012\ncrypto_stream/salsa208\ncrypto_stream/xsalsa20\n\ncrypto_shorthash/siphash24             Jean-Philippe Aumasson\n                                       Daniel J. Bernstein\n\ncrypto_generichash/blake2b             Jean-Philippe Aumasson\n                                       Christian Winnerlein\n                                       Samuel Neves\n                                       Zooko Wilcox-O'Hearn\n\ncrypto_onetimeauth/poly1305/donna      Andrew \"floodyberry\" Moon\n\ncrypto_onetimeauth/poly1305/sse2       Andrew \"floodyberry\" Moon\n\ncrypto_pwhash/scryptsalsa208sha256     Colin Percival\n                                       Alexander Peslyak\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/ChangeLog",
    "content": "\n* Version 1.0.7\n - More functions whose return value should be checked have been\ntagged with `__attribute__ ((warn_unused_result))`: `crypto_box_easy()`,\n`crypto_box_detached()`, `crypto_box_beforenm()`, `crypto_box()`, and\n`crypto_scalarmult()`.\n - Sandy2x, the fastest Curve25519 implementation ever, has been\nmerged in, and is automatically used on CPUs supporting the AVX\ninstructions set.\n - An SSE2 optimized implementation of Poly1305 was added, and is\ntwice as fast as the portable one.\n - An SSSE3 optimized implementation of ChaCha20 was added, and is\ntwice as fast as the portable one.\n - Faster `sodium_increment()` for common nonce sizes.\n - New helper functions have been added: `sodium_is_zero()` and\n `sodium_add()`.\n - `sodium_runtime_has_aesni()` now properly detects the CPU flag when\n compiled using Visual Studio.\n\n* Version 1.0.6\n - Optimized implementations of Blake2 have been added for modern\nIntel platforms. `crypto_generichash()` is now faster than MD5 and SHA1\nimplementations while being far more secure.\n - Functions for which the return value should be checked have been\ntagged with `__attribute__ ((warn_unused_result))`. This will\nintentionally break code compiled with `-Werror` that didn't bother\nchecking critical return values.\n - The `crypto_sign_edwards25519sha512batch_*()` functions have been\ntagged as deprecated.\n - Undocumented symbols that were exported, but were only useful for\ninternal purposes have been removed or made private:\n`sodium_runtime_get_cpu_features()`, the implementation-specific\n`crypto_onetimeauth_poly1305_donna()` symbols,\n`crypto_onetimeauth_poly1305_set_implementation()`,\n`crypto_onetimeauth_poly1305_implementation_name()` and\n`crypto_onetimeauth_pick_best_implementation()`.\n - `sodium_compare()` now works as documented, and compares numbers\nin little-endian format instead of behaving like `memcmp()`.\n - The previous changes should not break actual applications, but to be\nsafe, the library version major was incremented.\n - `sodium_runtime_has_ssse3()` and `sodium_runtime_has_sse41()` have\nbeen added.\n - The library can now be compiled with the CompCert compiler.\n\n* Version 1.0.5\n - Compilation issues on some platforms were fixed: missing alignment\ndirectives were added (required at least on RHEL-6/i386), a workaround\nfor a VRP bug on gcc/armv7 was added, and the library can now be compiled\nwith the SunPro compiler.\n - Javascript target: io.js is not supported any more. Use nodejs.\n\n* Version 1.0.4\n - Support for AES256-GCM has been added. This requires\na CPU with the aesni and pclmul extensions, and is accessible via the\ncrypto_aead_aes256gcm_*() functions.\n - The Javascript target doesn't use eval() any more, so that the\nlibrary can be used in Chrome packaged applications.\n - QNX and CloudABI are now supported.\n - Support for NaCl has finally been added.\n - ChaCha20 with an extended (96 bit) nonce and a 32-bit counter has\nbeen implemented as crypto_stream_chacha20_ietf(),\ncrypto_stream_chacha20_ietf_xor() and crypto_stream_chacha20_ietf_xor_ic().\nAn IETF-compatible version of ChaCha20Poly1305 is available as\ncrypto_aead_chacha20poly1305_ietf_npubbytes(),\ncrypto_aead_chacha20poly1305_ietf_encrypt() and\ncrypto_aead_chacha20poly1305_ietf_decrypt().\n - The sodium_increment() helper function has been added, to increment\nan arbitrary large number (such as a nonce).\n - The sodium_compare() helper function has been added, to compare\narbitrary large numbers (such as nonces, in order to prevent replay\nattacks).\n\n* Version 1.0.3\n - In addition to sodium_bin2hex(), sodium_hex2bin() is now a\nconstant-time function.\n - crypto_stream_xsalsa20_ic() has been added.\n - crypto_generichash_statebytes(), crypto_auth_*_statebytes() and\ncrypto_hash_*_statebytes() have been added in order to retrieve the\nsize of structures keeping states from foreign languages.\n - The JavaScript target doesn't require /dev/urandom or an external\nrandombytes() implementation any more. Other minor Emscripten-related\nimprovements have been made in order to support libsodium.js\n - Custom randombytes implementations do not need to provide their own\nimplementation of randombytes_uniform() any more. randombytes_stir()\nand randombytes_close() can also be NULL pointers if they are not\nrequired.\n - On Linux, getrandom(2) is being used instead of directly accessing\n/dev/urandom, if the kernel supports this system call.\n - crypto_box_seal() and crypto_box_seal_open() have been added.\n - A solutions for Visual Studio 2015 was added.\n\n* Version 1.0.2\n - The _easy and _detached APIs now support precalculated keys;\ncrypto_box_easy_afternm(), crypto_box_open_easy_afternm(),\ncrypto_box_detached_afternm() and crypto_box_open_detached_afternm()\nhave been added as an alternative to the NaCl interface.\n - Memory allocation functions can now be used on operating systems with\nno memory protection.\n - crypto_sign_open() and crypto_sign_edwards25519sha512batch_open()\nnow accept a NULL pointer instead of a pointer to the message size, if\nstoring this information is not required.\n - The close-on-exec flag is now set on the descriptor returned when\nopening /dev/urandom.\n - A libsodium-uninstalled.pc file to use pkg-config even when\nlibsodium is not installed, has been added.\n - The iOS target now includes armv7s and arm64 optimized code, as well\nas i386 and x86_64 code for the iOS simulator.\n - sodium_free() can now be called on regions with PROT_NONE protection.\n - The Javascript tests can run on Ubuntu, where the node binary was\nrenamed nodejs. io.js can also be used instead of node.\n\n* Version 1.0.1\n - DLL_EXPORT was renamed SODIUM_DLL_EXPORT in order to avoid\ncollisions with similar macros defined by other libraries.\n - sodium_bin2hex() is now constant-time.\n - crypto_secretbox_detached() now supports overlapping input and output\nregions.\n - NaCl's donna_c64 implementation of curve25519 was reading an extra byte\npast the end of the buffer containing the base point. This has been\nfixed.\n\n* Version 1.0.0\n - The API and ABI are now stable. New features will be added, but\nbackward-compatibility is guaranteed through all the 1.x.y releases.\n - crypto_sign() properly works with overlapping regions again. Thanks\nto @pysiak for reporting this regression introduced in version 0.6.1.\n - The test suite has been extended.\n\n* Version 0.7.1 (1.0 RC2)\n - This is the second release candidate of Sodium 1.0. Minor\ncompilation, readability and portability changes have been made and the\ntest suite was improved, but the API is the same as the previous release\ncandidate.\n\n* Version 0.7.0 (1.0 RC1)\n - Allocating memory to store sensitive data can now be done using\nsodium_malloc() and sodium_allocarray(). These functions add guard\npages around the protected data to make it less likely to be\naccessible in a heartbleed-like scenario. In addition, the protection\nfor memory regions allocated that way can be changed using\nsodium_mprotect_noaccess(), sodium_mprotect_readonly() and\nsodium_mprotect_readwrite().\n - ed25519 keys can be converted to curve25519 keys with\ncrypto_sign_ed25519_pk_to_curve25519() and\ncrypto_sign_ed25519_sk_to_curve25519(). This allows using the same\nkeys for signature and encryption.\n - The seed and the public key can be extracted from an ed25519 key\nusing crypto_sign_ed25519_sk_to_seed() and crypto_sign_ed25519_sk_to_pk().\n - aes256 was removed. A timing-attack resistant implementation might\nbe added later, but not before version 1.0 is tagged.\n - The crypto_pwhash_scryptxsalsa208sha256_* compatibility layer was\nremoved. Use crypto_pwhash_scryptsalsa208sha256_*.\n - The compatibility layer for implementation-specific functions was\nremoved.\n - Compilation issues with Mingw64 on MSYS (not MSYS2) were fixed.\n - crypto_pwhash_scryptsalsa208sha256_STRPREFIX was added: it contains\nthe prefix produced by crypto_pwhash_scryptsalsa208sha256_str()\n\n* Version 0.6.1\n - Important bug fix: when crypto_sign_open() was given a signed\nmessage too short to even contain a signature, it was putting an\nunlimited amount of zeros into the target buffer instead of\nimmediately returning -1. The bug was introduced in version 0.5.0.\n - New API: crypto_sign_detached() and crypto_sign_verify_detached()\nto produce and verify ed25519 signatures without having to duplicate\nthe message.\n - New ./configure switch: --enable-minimal, to create a smaller\nlibrary, with only the functions required for the high-level API.\nMainly useful for the JavaScript target and embedded systems.\n - All the symbols are now exported by the Emscripten build script.\n - The pkg-config .pc file is now always installed even if the\npkg-config tool is not available during the installation.\n\n* Version 0.6.0\n - The ChaCha20 stream cipher has been added, as crypto_stream_chacha20_*\n - The ChaCha20Poly1305 AEAD construction has been implemented, as\ncrypto_aead_chacha20poly1305_*\n - The _easy API does not require any heap allocations any more and\ndoes not have any overhead over the NaCl API. With the password\nhashing function being an obvious exception, the library doesn't\nallocate and will not allocate heap memory ever.\n - crypto_box and crypto_secretbox have a new _detached API to store\nthe authentication tag and the encrypted message separately.\n - crypto_pwhash_scryptxsalsa208sha256*() functions have been renamed\ncrypto_pwhash_scryptsalsa208sha256*().\n - The low-level crypto_pwhash_scryptsalsa208sha256_ll() function\nallows setting individual parameters of the scrypt function.\n - New macros and functions for recommended crypto_pwhash_* parameters\nhave been added.\n - Similarly to crypto_sign_seed_keypair(), crypto_box_seed_keypair()\nhas been introduced to deterministically generate a key pair from a seed.\n - crypto_onetimeauth() now provides a streaming interface.\n - crypto_stream_chacha20_xor_ic() and crypto_stream_salsa20_xor_ic()\nhave been added to use a non-zero initial block counter.\n - On Windows, CryptGenRandom() was replaced by RtlGenRandom(), which\ndoesn't require the Crypt API.\n - The high bit in curve25519 is masked instead of processing the key as\na 256-bit value.\n - The curve25519 ref implementation was replaced by the latest ref10\nimplementation from Supercop.\n - sodium_mlock() now prevents memory from being included in coredumps\non Linux 3.4+\n\n* Version 0.5.0\n - sodium_mlock()/sodium_munlock() have been introduced to lock pages\nin memory before storing sensitive data, and to zero them before\nunlocking them.\n - High-level wrappers for crypto_box and crypto_secretbox\n(crypto_box_easy and crypto_secretbox_easy) can be used to avoid\ndealing with the specific memory layout regular functions depend on.\n - crypto_pwhash_scryptsalsa208sha256* functions have been added\nto derive a key from a password, and for password storage.\n - Salsa20 and ed25519 implementations now support overlapping\ninputs/keys/outputs (changes imported from supercop-20140505).\n - New build scripts for Visual Studio, Emscripten, different Android\narchitectures and msys2 are available.\n - The poly1305-53 implementation has been replaced with Floodyberry's\npoly1305-donna32 and poly1305-donna64 implementations.\n - sodium_hex2bin() has been added to complement sodium_bin2hex().\n - On OpenBSD and Bitrig, arc4random() is used instead of reading\n/dev/urandom.\n - crypto_auth_hmac_sha512() has been implemented.\n - sha256 and sha512 now have a streaming interface.\n - hmacsha256, hmacsha512 and hmacsha512256 now support keys of\narbitrary length, and have a streaming interface.\n - crypto_verify_64() has been implemented.\n - first-class Visual Studio build system, thanks to @evoskuil\n - CPU features are now detected at runtime.\n\n* Version 0.4.5\n - Restore compatibility with OSX <= 10.6\n\n* Version 0.4.4\n - Visual Studio is officially supported (VC 2010 & VC 2013)\n - mingw64 is now supported\n - big-endian architectures are now supported as well\n - The donna_c64 implementation of curve25519_donna_c64 now handles\nnon-canonical points like the ref implementation\n - Missing scalarmult_curve25519 and stream_salsa20 constants are now exported\n - A crypto_onetimeauth_poly1305_ref() wrapper has been added\n\n* Version 0.4.3\n - crypto_sign_seedbytes() and crypto_sign_SEEDBYTES were added.\n - crypto_onetimeauth_poly1305_implementation_name() was added.\n - poly1305-ref has been replaced by a faster implementation,\nFloodyberry's poly1305-donna-unrolled.\n - Stackmarkings have been added to assembly code, for Hardened Gentoo.\n - pkg-config can now be used in order to retrieve compilations flags for\nusing libsodium.\n - crypto_stream_aes256estream_*() can now deal with unaligned input\non platforms that require word alignment.\n - portability improvements.\n\n* Version 0.4.2\n - All NaCl constants are now also exposed as functions.\n - The Android and iOS cross-compilation script have been improved.\n - libsodium can now be cross-compiled to Windows from Linux.\n - libsodium can now be compiled with emscripten.\n - New convenience function (prototyped in utils.h): sodium_bin2hex().\n\n* Version 0.4.1\n - sodium_version_*() functions were not exported in version 0.4. They\nare now visible as intended.\n - sodium_init() now calls randombytes_stir().\n - optimized assembly version of salsa20 is now used on amd64.\n - further cleanups and enhanced compatibility with non-C99 compilers.\n\n* Version 0.4\n - Most constants and operations are now available as actual functions\ninstead of macros, making it easier to use from other languages.\n - New operation: crypto_generichash, featuring a variable key size, a\nvariable output size, and a streaming API. Currently implemented using\nBlake2b.\n - The package can be compiled in a separate directory.\n - aes128ctr functions are exported.\n - Optimized versions of curve25519 (curve25519_donna_c64), poly1305\n(poly1305_53) and ed25519 (ed25519_ref10) are available. Optionally calling\nsodium_init() once before using the library makes it pick the fastest\nimplementation.\n - New convenience function: sodium_memzero() in order to securely\nwipe a memory area.\n - A whole bunch of cleanups and portability enhancements.\n - On Windows, a .REF file is generated along with the shared library,\nfor use with Visual Studio. The installation path for these has become\n$prefix/bin as expected by MingW.\n\n* Version 0.3\n - The crypto_shorthash operation has been added, implemented using\nSipHash-2-4.\n\n* Version 0.2\n - crypto_sign_seed_keypair() has been added\n\n* Version 0.1\n - Initial release.\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/LICENSE",
    "content": "/*\n * Copyright (c) 2013-2015\n * Frank Denis <j at pureftpd dot org>\n *\n * Permission to use, copy, modify, and/or 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 THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/Makefile.am",
    "content": "ACLOCAL_AMFLAGS = -I m4\n\nEXTRA_DIST = \\\n\tautogen.sh \\\n\tlibsodium.sln \\\n\tlibsodium.vcxproj \\\n\tlibsodium.vcxproj.filters \\\n\tLICENSE \\\n\tREADME.markdown \\\n\tTHANKS\n\nSUBDIRS = \\\n\tsrc\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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@\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = .\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/configure $(am__configure_deps) \\\n\t$(top_srcdir)/src/libsodium/include/sodium/version.h.in \\\n\tAUTHORS ChangeLog README THANKS build-aux/compile \\\n\tbuild-aux/config.guess build-aux/config.sub build-aux/depcomp \\\n\tbuild-aux/install-sh build-aux/missing build-aux/ltmain.sh \\\n\t$(top_srcdir)/build-aux/compile \\\n\t$(top_srcdir)/build-aux/config.guess \\\n\t$(top_srcdir)/build-aux/config.sub \\\n\t$(top_srcdir)/build-aux/install-sh \\\n\t$(top_srcdir)/build-aux/ltmain.sh \\\n\t$(top_srcdir)/build-aux/missing\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \\\n\t$(top_srcdir)/m4/ax_check_define.m4 \\\n\t$(top_srcdir)/m4/ax_check_link_flag.m4 \\\n\t$(top_srcdir)/m4/ld-output-def.m4 $(top_srcdir)/m4/libtool.m4 \\\n\t$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \\\n\t$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \\\n\t$(top_srcdir)/configure.ac\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 config.status.lineno\nmkinstalldirs = $(install_sh) -d\nCONFIG_CLEAN_FILES = src/libsodium/include/sodium/version.h\nCONFIG_CLEAN_VPATH_FILES =\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nSOURCES =\nDIST_SOURCES =\nRECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \\\n\tctags-recursive dvi-recursive html-recursive info-recursive \\\n\tinstall-data-recursive install-dvi-recursive \\\n\tinstall-exec-recursive install-html-recursive \\\n\tinstall-info-recursive install-pdf-recursive \\\n\tinstall-ps-recursive install-recursive installcheck-recursive \\\n\tinstalldirs-recursive pdf-recursive ps-recursive \\\n\ttags-recursive uninstall-recursive\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nRECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive\t\\\n  distclean-recursive maintainer-clean-recursive\nam__recursive_targets = \\\n  $(RECURSIVE_TARGETS) \\\n  $(RECURSIVE_CLEAN_TARGETS) \\\n  $(am__extra_recursive_targets)\nAM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \\\n\tcscope distdir dist dist-all distcheck\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nCSCOPE = cscope\nDIST_SUBDIRS = $(SUBDIRS)\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\ndistdir = $(PACKAGE)-$(VERSION)\ntop_distdir = $(distdir)\nam__remove_distdir = \\\n  if test -d \"$(distdir)\"; then \\\n    find \"$(distdir)\" -type d ! -perm -200 -exec chmod u+w {} ';' \\\n      && rm -rf \"$(distdir)\" \\\n      || { sleep 5 && rm -rf \"$(distdir)\"; }; \\\n  else :; fi\nam__post_remove_distdir = $(am__remove_distdir)\nam__relativize = \\\n  dir0=`pwd`; \\\n  sed_first='s,^\\([^/]*\\)/.*$$,\\1,'; \\\n  sed_rest='s,^[^/]*/*,,'; \\\n  sed_last='s,^.*/\\([^/]*\\)$$,\\1,'; \\\n  sed_butlast='s,/*[^/]*$$,,'; \\\n  while test -n \"$$dir1\"; do \\\n    first=`echo \"$$dir1\" | sed -e \"$$sed_first\"`; \\\n    if test \"$$first\" != \".\"; then \\\n      if test \"$$first\" = \"..\"; then \\\n        dir2=`echo \"$$dir0\" | sed -e \"$$sed_last\"`/\"$$dir2\"; \\\n        dir0=`echo \"$$dir0\" | sed -e \"$$sed_butlast\"`; \\\n      else \\\n        first2=`echo \"$$dir2\" | sed -e \"$$sed_first\"`; \\\n        if test \"$$first2\" = \"$$first\"; then \\\n          dir2=`echo \"$$dir2\" | sed -e \"$$sed_rest\"`; \\\n        else \\\n          dir2=\"../$$dir2\"; \\\n        fi; \\\n        dir0=\"$$dir0\"/\"$$first\"; \\\n      fi; \\\n    fi; \\\n    dir1=`echo \"$$dir1\" | sed -e \"$$sed_rest\"`; \\\n  done; \\\n  reldir=\"$$dir2\"\nDIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2\nGZIP_ENV = --best\nDIST_TARGETS = dist-bzip2 dist-gzip\ndistuninstallcheck_listfiles = find . -type f -print\nam__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \\\n  | sed 's|^\\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'\ndistcleancheck_listfiles = find . -type f -print\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nAS = @AS@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCAS = @CCAS@\nCCASDEPMODE = @CCASDEPMODE@\nCCASFLAGS = @CCASFLAGS@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCFLAGS_AESNI = @CFLAGS_AESNI@\nCFLAGS_MMX = @CFLAGS_MMX@\nCFLAGS_PCLMUL = @CFLAGS_PCLMUL@\nCFLAGS_SSE2 = @CFLAGS_SSE2@\nCFLAGS_SSE3 = @CFLAGS_SSE3@\nCFLAGS_SSE41 = @CFLAGS_SSE41@\nCFLAGS_SSSE3 = @CFLAGS_SSSE3@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCWFLAGS = @CWFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nDLLTOOL = @DLLTOOL@\nDLL_VERSION = @DLL_VERSION@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nHAVE_AMD64_ASM_V = @HAVE_AMD64_ASM_V@\nHAVE_AVX_ASM_V = @HAVE_AVX_ASM_V@\nHAVE_CPUID_V = @HAVE_CPUID_V@\nHAVE_TI_MODE_V = @HAVE_TI_MODE_V@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nISODATE = @ISODATE@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIBTOOL_DEPS = @LIBTOOL_DEPS@\nLIBTOOL_EXTRA_FLAGS = @LIBTOOL_EXTRA_FLAGS@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSAFECODE_HOME = @SAFECODE_HOME@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSODIUM_LIBRARY_VERSION = @SODIUM_LIBRARY_VERSION@\nSODIUM_LIBRARY_VERSION_MAJOR = @SODIUM_LIBRARY_VERSION_MAJOR@\nSODIUM_LIBRARY_VERSION_MINOR = @SODIUM_LIBRARY_VERSION_MINOR@\nSTRIP = @STRIP@\nTEST_LDFLAGS = @TEST_LDFLAGS@\nVERSION = @VERSION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nACLOCAL_AMFLAGS = -I m4\nEXTRA_DIST = \\\n\tautogen.sh \\\n\tlibsodium.sln \\\n\tlibsodium.vcxproj \\\n\tlibsodium.vcxproj.filters \\\n\tLICENSE \\\n\tREADME.markdown \\\n\tTHANKS\n\nSUBDIRS = \\\n\tsrc\n\nall: all-recursive\n\n.SUFFIXES:\nam--refresh: Makefile\n\t@:\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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) --foreign'; \\\n\t      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \\\n\t\t&& exit 0; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign 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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\t$(am__cd) $(srcdir) && $(AUTOCONF)\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\t$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)\n$(am__aclocal_m4_deps):\nsrc/libsodium/include/sodium/version.h: $(top_builddir)/config.status $(top_srcdir)/src/libsodium/include/sodium/version.h.in\n\tcd $(top_builddir) && $(SHELL) ./config.status $@\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\ndistclean-libtool:\n\t-rm -f libtool config.lt\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$(am__recursive_targets):\n\t@fail=; \\\n\tif $(am__make_keepgoing); then \\\n\t  failcom='fail=yes'; \\\n\telse \\\n\t  failcom='exit 1'; \\\n\tfi; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tcase \"$@\" in \\\n\t  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \\\n\t  *) list='$(SUBDIRS)' ;; \\\n\tesac; \\\n\tfor 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  ($(am__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\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-recursive\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\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      set \"$$@\" \"$$include_option=$$here/$$subdir/TAGS\"; \\\n\t  fi; \\\n\tdone; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-recursive\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscope: cscope.files\n\ttest ! -s cscope.files \\\n\t  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)\nclean-cscope:\n\t-rm -f cscope.files\ncscope.files: clean-cscope cscopelist\ncscopelist: cscopelist-recursive\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\n\ndistclean-tags:\n\t-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags\n\t-rm -f cscope.out cscope.in.out cscope.po.out cscope.files\n\ndistdir: $(DISTFILES)\n\t$(am__remove_distdir)\n\ttest -d \"$(distdir)\" || mkdir \"$(distdir)\"\n\t@srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\ttopsrcdirstrip=`echo \"$(top_srcdir)\" | sed 's/[].[^$$\\\\*]/\\\\\\\\&/g'`; \\\n\tlist='$(DISTFILES)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    $(am__make_dryrun) \\\n\t      || test -d \"$(distdir)/$$subdir\" \\\n\t      || $(MKDIR_P) \"$(distdir)/$$subdir\" \\\n\t      || exit 1; \\\n\t    dir1=$$subdir; dir2=\"$(distdir)/$$subdir\"; \\\n\t    $(am__relativize); \\\n\t    new_distdir=$$reldir; \\\n\t    dir1=$$subdir; dir2=\"$(top_distdir)\"; \\\n\t    $(am__relativize); \\\n\t    new_top_distdir=$$reldir; \\\n\t    echo \" (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=\"$$new_top_distdir\" distdir=\"$$new_distdir\" \\\\\"; \\\n\t    echo \"     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)\"; \\\n\t    ($(am__cd) $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$new_top_distdir\" \\\n\t        distdir=\"$$new_distdir\" \\\n\t\tam__remove_distdir=: \\\n\t\tam__skip_length_check=: \\\n\t\tam__skip_mode_fix=: \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\n\t-test -n \"$(am__skip_mode_fix)\" \\\n\t|| find \"$(distdir)\" -type d ! -perm -755 \\\n\t\t-exec chmod u+rwx,go+rx {} \\; -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 $(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__post_remove_distdir)\ndist-bzip2: distdir\n\ttardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2\n\t$(am__post_remove_distdir)\n\ndist-lzip: distdir\n\ttardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz\n\t$(am__post_remove_distdir)\n\ndist-xz: distdir\n\ttardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz\n\t$(am__post_remove_distdir)\n\ndist-tarZ: distdir\n\t@echo WARNING: \"Support for shar distribution archives is\" \\\n\t               \"deprecated.\" >&2\n\t@echo WARNING: \"It will be removed altogether in Automake 2.0\" >&2\n\ttardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z\n\t$(am__post_remove_distdir)\n\ndist-shar: distdir\n\t@echo WARNING: \"Support for distribution archives compressed with\" \\\n\t\t       \"legacy program 'compress' is deprecated.\" >&2\n\t@echo WARNING: \"It will be removed altogether in Automake 2.0\" >&2\n\tshar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz\n\t$(am__post_remove_distdir)\n\ndist-zip: distdir\n\t-rm -f $(distdir).zip\n\tzip -rq $(distdir).zip $(distdir)\n\t$(am__post_remove_distdir)\n\ndist dist-all:\n\t$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'\n\t$(am__post_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) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\\\n\t*.tar.bz2*) \\\n\t  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\\\n\t*.tar.lz*) \\\n\t  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\\\n\t*.tar.xz*) \\\n\t  xz -dc $(distdir).tar.xz | $(am__untar) ;;\\\n\t*.tar.Z*) \\\n\t  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\\\n\t*.shar.gz*) \\\n\t  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\\\n\t*.zip*) \\\n\t  unzip $(distdir).zip ;;\\\n\tesac\n\tchmod -R a-w $(distdir)\n\tchmod u+w $(distdir)\n\tmkdir $(distdir)/_build $(distdir)/_inst\n\tchmod a-w $(distdir)\n\ttest -d $(distdir)/_build || exit 0; \\\n\tdc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\\\/]:[\\\\/],/,'` \\\n\t  && dc_destdir=\"$${TMPDIR-/tmp}/am-dc-$$$$/\" \\\n\t  && am__cwd=`pwd` \\\n\t  && $(am__cd) $(distdir)/_build \\\n\t  && ../configure \\\n\t    $(AM_DISTCHECK_CONFIGURE_FLAGS) \\\n\t    $(DISTCHECK_CONFIGURE_FLAGS) \\\n\t    --srcdir=.. --prefix=\"$$dc_install_base\" \\\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  && cd \"$$am__cwd\" \\\n\t  || exit 1\n\t$(am__post_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 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'\ndistuninstallcheck:\n\t@test -n '$(distuninstallcheck_dir)' || { \\\n\t  echo 'ERROR: trying to run $@ with an empty' \\\n\t       '$$(distuninstallcheck_dir)' >&2; \\\n\t  exit 1; \\\n\t}; \\\n\t$(am__cd) '$(distuninstallcheck_dir)' || { \\\n\t  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \\\n\t  exit 1; \\\n\t}; \\\n\ttest `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \\\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\ncheck: check-recursive\nall-am: Makefile\ninstalldirs: installdirs-recursive\ninstalldirs-am:\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-recursive\n\nclean-am: clean-generic clean-libtool mostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -f $(am__CONFIG_DISTCLEAN_FILES)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-libtool \\\n\tdistclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\nhtml: html-recursive\n\nhtml-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-recursive\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-recursive\n\ninstall-html-am:\n\ninstall-info: install-info-recursive\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-recursive\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-recursive\n\ninstall-ps-am:\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 -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-recursive\n\nmostlyclean-am: mostlyclean-generic mostlyclean-libtool\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am:\n\n.MAKE: $(am__recursive_targets) install-am install-strip\n\n.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \\\n\tam--refresh check check-am clean clean-cscope clean-generic \\\n\tclean-libtool cscope cscopelist-am ctags ctags-am dist \\\n\tdist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \\\n\tdist-xz dist-zip distcheck distclean distclean-generic \\\n\tdistclean-libtool distclean-tags distcleancheck distdir \\\n\tdistuninstallcheck dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-dvi \\\n\tinstall-dvi-am install-exec install-exec-am install-html \\\n\tinstall-html-am install-info install-info-am install-man \\\n\tinstall-pdf install-pdf-am install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tinstalldirs-am maintainer-clean maintainer-clean-generic \\\n\tmostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \\\n\tps ps-am tags tags-am uninstall uninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/README",
    "content": "See README.markdown\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/README.markdown",
    "content": "[![Build Status](https://travis-ci.org/jedisct1/libsodium.svg?branch=master)](https://travis-ci.org/jedisct1/libsodium?branch=master)\n[![Coverity Scan Build Status](https://scan.coverity.com/projects/2397/badge.svg)](https://scan.coverity.com/projects/2397)\n\n![libsodium](https://raw.github.com/jedisct1/libsodium/master/logo.png)\n============\n\nSodium is a new, easy-to-use software library for encryption,\ndecryption, signatures, password hashing and more.\n\nIt is a portable, cross-compilable, installable, packageable\nfork of [NaCl](http://nacl.cr.yp.to/), with a compatible API, and an\nextended API to improve usability even further.\n\nIts goal is to provide all of the core operations needed to build\nhigher-level cryptographic tools.\n\nSodium supports a variety of compilers and operating systems,\nincluding Windows (with MingW or Visual Studio, x86 and x64), iOS and Android.\n\n## Documentation\n\nThe documentation is a work-in-progress, and is being written using\nGitbook:\n\n[libsodium documentation](https://download.libsodium.org/doc/)\n\n## Community\n\nA mailing-list is available to discuss libsodium.\n\nIn order to join, just send a random mail to `sodium-subscribe` {at}\n`pureftpd` {dot} `org`.\n\n## License\n\n[ISC license](https://en.wikipedia.org/wiki/ISC_license).\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/THANKS",
    "content": "@alethia7\n@dnaq\n@harleqin\n@joshjdevl\n@jshahbazi\n@lvh\n@neheb\nAmit Murthy (@amitmurthy)\nBruno Oliveira (@abstractj)\nChristian Wiese (@morfoh)\nChris Rebert (@cvrebert)\nColm MacCárthaigh (@colmmacc)\nDonald Stufft (@dstufft)\nDouglas Campos (@qmx)\nDrew Crawford (@drewcrawford)\nEric Dong (@quantum1423)\nEric Voskuil (@evoskuil)\nFrank Siebenlist (@franks42)\nGabriel Handford (@gabriel)\nJachym Holecek (@freza)\nJan de Muijnck-Hughes (@jfdm)\nJason McCampbell (@jasonmccampbell)\nJeroen Habraken (@VeXocide)\nJesper Louis Andersen (@jlouis)\nJoseph Abrahamson (@tel)\nKenneth Ballenegger (@kballenegger)\nLoic Maury (@loicmaury)\nMichael Gorlick (@mgorlick)\nMichael Gregorowicz (@mgregoro)\nOmar Ayub (@electricFeel)\nPedro Paixao (@paixaop)\nProject ArteMisc (@artemisc)\nRuben De Visscher (@rubendv)\nRudolf Von Krugstein (@rudolfvonkrugstein)\nSamuel Neves (@sneves)\nScott Arciszewski (@paragonie-scott)\nStefan Marsiske\nStephan Touset (@stouset)\nSteve Gibson (@sggrc)\nTony Arcieri (@bascule)\nTony Garnock-Jones (@tonyg)\nY. T. Chung (@zonyitoo)\n\nFSF France\nCoverity, Inc.\nOpenDNS, Inc.\nOVH\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/autogen.sh",
    "content": "#! /bin/sh\n\nif glibtoolize --version > /dev/null 2>&1; then\n  LIBTOOLIZE='glibtoolize'\nelse\n  LIBTOOLIZE='libtoolize'\nfi\n\nif [ ! -x \"`which $LIBTOOLIZE 2>/dev/null`\" ] ; then\n  echo \"libtool is required, but wasn't found on this system\"\n  exit 1\nfi\n\nif [ ! -x \"`which autoconf 2>/dev/null`\" ] ; then\n  echo \"autoconf is required, but wasn't found on this system\"\n  exit 1\nfi\n\nif [ ! -x \"`which automake 2>/dev/null`\" ] ; then\n  echo \"automake is required, but wasn't found on this system\"\n  exit 1\nfi\n\nif [ ! -x \"`which pkg-config 2>/dev/null`\" ] ; then\n  echo \"pkg-config is required, but wasn't found on this system\"\n  exit 1\nfi\n\nif [ -x \"`which autoreconf 2>/dev/null`\" ] ; then\n  exec autoreconf -ivf\nfi\n\n$LIBTOOLIZE && \\\naclocal && \\\nautomake --add-missing --force-missing --include-deps && \\\nautoconf\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/config.guess",
    "content": "#! /bin/sh\n# Attempt to guess a canonical system name.\n#   Copyright 1992-2013 Free Software Foundation, Inc.\n\ntimestamp='2013-06-10'\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 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, 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, see <http://www.gnu.org/licenses/>.\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\n# program.  This Exception is an additional permission under section 7\n# of the GNU General Public License, version 3 (\"GPLv3\").\n#\n# Originally written by Per Bothner.\n#\n# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\n#\n# Please send patches with a ChangeLog entry to config-patches@gnu.org.\n\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 1992-2013 Free 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\ncase \"${UNAME_SYSTEM}\" in\nLinux|GNU|GNU/*)\n\t# If the system lacks a compiler, then just pick glibc.\n\t# We could probably try harder.\n\tLIBC=gnu\n\n\teval $set_cc_for_build\n\tcat <<-EOF > $dummy.c\n\t#include <features.h>\n\t#if defined(__UCLIBC__)\n\tLIBC=uclibc\n\t#elif defined(__dietlibc__)\n\tLIBC=dietlibc\n\t#else\n\tLIBC=gnu\n\t#endif\n\tEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`\n\t;;\nesac\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 tuples: *-*-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    sh5el) machine=sh5le-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 -q __ELF__\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\tos=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    *:Bitrig:*:*)\n\tUNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`\n\techo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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 powerpc-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\tUNAME_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\t# Reset EXIT trap before exiting to avoid spurious non-zero exit code.\n\texitcode=$?\n\ttrap '' 0\n\texit $exitcode ;;\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\techo 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    s390x:SunOS:*:*)\n\techo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`\n\texit ;;\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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)\n\techo i386-pc-auroraux${UNAME_RELEASE}\n\texit ;;\n    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)\n\teval $set_cc_for_build\n\tSUN_ARCH=\"i386\"\n\t# If there is a compiler, see if it is configured for 64-bit objects.\n\t# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.\n\t# This test works for both compilers.\n\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\tgrep IS_64BIT_ARCH >/dev/null\n\t    then\n\t\tSUN_ARCH=\"x86_64\"\n\t    fi\n\tfi\n\techo ${SUN_ARCH}-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\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)\n\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)\n\techo m68k-atari-mint${UNAME_RELEASE}\n\texit ;;\n    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)\n\techo m68k-milan-mint${UNAME_RELEASE}\n\texit ;;\n    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)\n\techo m68k-hades-mint${UNAME_RELEASE}\n\texit ;;\n    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)\n\techo m68k-unknown-mint${UNAME_RELEASE}\n\texit ;;\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\t# DG/UX returns AViiON for all architectures\n\tUNAME_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:*:[4567])\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\t\t    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`\n\t\t    case \"${sc_cpu_version}\" in\n\t\t      523) HP_ARCH=\"hppa1.0\" ;; # CPU_PA_RISC1_0\n\t\t      528) HP_ARCH=\"hppa1.1\" ;; # CPU_PA_RISC1_1\n\t\t      532)                      # CPU_PA_RISC2_0\n\t\t\tcase \"${sc_kernel_bits}\" in\n\t\t\t  32) HP_ARCH=\"hppa2.0n\" ;;\n\t\t\t  64) HP_ARCH=\"hppa2.0w\" ;;\n\t\t\t  '') HP_ARCH=\"hppa2.0\" ;;   # HP-UX 10.20\n\t\t\tesac ;;\n\t\t    esac\n\t\tfi\n\t\tif [ \"${HP_ARCH}\" = \"\" ]; then\n\t\t    eval $set_cc_for_build\n\t\t    sed 's/^\t\t//' << EOF >$dummy.c\n\n\t\t#define _HPUX_SOURCE\n\t\t#include <stdlib.h>\n\t\t#include <unistd.h>\n\n\t\tint main ()\n\t\t{\n\t\t#if defined(_SC_KERNEL_BITS)\n\t\t    long bits = sysconf(_SC_KERNEL_BITS);\n\t\t#endif\n\t\t    long cpu  = sysconf (_SC_CPU_VERSION);\n\n\t\t    switch (cpu)\n\t\t\t{\n\t\t\tcase CPU_PA_RISC1_0: puts (\"hppa1.0\"); break;\n\t\t\tcase CPU_PA_RISC1_1: puts (\"hppa1.1\"); break;\n\t\t\tcase CPU_PA_RISC2_0:\n\t\t#if defined(_SC_KERNEL_BITS)\n\t\t\t    switch (bits)\n\t\t\t\t{\n\t\t\t\tcase 64: puts (\"hppa2.0w\"); break;\n\t\t\t\tcase 32: puts (\"hppa2.0n\"); break;\n\t\t\t\tdefault: puts (\"hppa2.0\"); break;\n\t\t\t\t} break;\n\t\t#else  /* !defined(_SC_KERNEL_BITS) */\n\t\t\t    puts (\"hppa2.0\"); break;\n\t\t#endif\n\t\t\tdefault: puts (\"hppa1.0\"); break;\n\t\t\t}\n\t\t    exit (0);\n\t\t}\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 -q __LP64__\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\texit ;;\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\texit ;;\n    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)\n\techo c34-convex-bsd\n\texit ;;\n    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)\n\techo c38-convex-bsd\n\texit ;;\n    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)\n\techo c4-convex-bsd\n\texit ;;\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\tFUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n\tFUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`\n\techo \"${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}\"\n\texit ;;\n    5000:UNIX_System_V:4.*:*)\n\tFUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\\///'`\n\tFUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`\n\techo \"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\tUNAME_PROCESSOR=`/usr/bin/uname -p`\n\tcase ${UNAME_PROCESSOR} in\n\t    amd64)\n\t\techo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\t    *)\n\t\techo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;\n\tesac\n\texit ;;\n    i*:CYGWIN*:*)\n\techo ${UNAME_MACHINE}-pc-cygwin\n\texit ;;\n    *:MINGW64*:*)\n\techo ${UNAME_MACHINE}-pc-mingw64\n\texit ;;\n    *:MINGW*:*)\n\techo ${UNAME_MACHINE}-pc-mingw32\n\texit ;;\n    i*:MSYS*:*)\n\techo ${UNAME_MACHINE}-pc-msys\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    *:Interix*:*)\n\tcase ${UNAME_MACHINE} in\n\t    x86)\n\t\techo i586-pc-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    authenticamd | genuineintel | EM64T)\n\t\techo x86_64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\t    IA64)\n\t\techo ia64-unknown-interix${UNAME_RELEASE}\n\t\texit ;;\n\tesac ;;\n    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)\n\techo i${UNAME_MACHINE}-pc-mks\n\texit ;;\n    8664:Windows_NT:*)\n\techo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC}\n\texit ;;\n    i*86:Minix:*:*)\n\techo ${UNAME_MACHINE}-pc-minix\n\texit ;;\n    aarch64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    aarch64_be:Linux:*:*)\n\tUNAME_MACHINE=aarch64_be\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\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\tesac\n\tobjdump --private-headers /bin/sh | grep -q ld.so.1\n\tif test \"$?\" = 0 ; then LIBC=\"gnulibc1\" ; fi\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    arc:Linux:*:* | arceb:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    arm*:Linux:*:*)\n\teval $set_cc_for_build\n\tif echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t    | grep -q __ARM_EABI__\n\tthen\n\t    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\telse\n\t    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \\\n\t\t| grep -q __ARM_PCS_VFP\n\t    then\n\t\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi\n\t    else\n\t\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf\n\t    fi\n\tfi\n\texit ;;\n    avr32*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    cris:Linux:*:*)\n\techo ${UNAME_MACHINE}-axis-linux-${LIBC}\n\texit ;;\n    crisv32:Linux:*:*)\n\techo ${UNAME_MACHINE}-axis-linux-${LIBC}\n\texit ;;\n    frv:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    hexagon:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    i*86:Linux:*:*)\n\techo ${UNAME_MACHINE}-pc-linux-${LIBC}\n\texit ;;\n    ia64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    m32r*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    m68*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    mips:Linux:*:* | mips64:Linux:*:*)\n\teval $set_cc_for_build\n\tsed 's/^\t//' << EOF >$dummy.c\n\t#undef CPU\n\t#undef ${UNAME_MACHINE}\n\t#undef ${UNAME_MACHINE}el\n\t#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)\n\tCPU=${UNAME_MACHINE}el\n\t#else\n\t#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)\n\tCPU=${UNAME_MACHINE}\n\t#else\n\tCPU=\n\t#endif\n\t#endif\nEOF\n\teval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`\n\ttest x\"${CPU}\" != x && { echo \"${CPU}-unknown-linux-${LIBC}\"; exit; }\n\t;;\n    or1k:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    or32:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    padre:Linux:*:*)\n\techo sparc-unknown-linux-${LIBC}\n\texit ;;\n    parisc64:Linux:*:* | hppa64:Linux:*:*)\n\techo hppa64-unknown-linux-${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-${LIBC} ;;\n\t  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;\n\t  *)    echo hppa-unknown-linux-${LIBC} ;;\n\tesac\n\texit ;;\n    ppc64:Linux:*:*)\n\techo powerpc64-unknown-linux-${LIBC}\n\texit ;;\n    ppc:Linux:*:*)\n\techo powerpc-unknown-linux-${LIBC}\n\texit ;;\n    ppc64le:Linux:*:*)\n\techo powerpc64le-unknown-linux-${LIBC}\n\texit ;;\n    ppcle:Linux:*:*)\n\techo powerpcle-unknown-linux-${LIBC}\n\texit ;;\n    s390:Linux:*:* | s390x:Linux:*:*)\n\techo ${UNAME_MACHINE}-ibm-linux-${LIBC}\n\texit ;;\n    sh64*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    sh*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    sparc:Linux:*:* | sparc64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    tile*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    vax:Linux:*:*)\n\techo ${UNAME_MACHINE}-dec-linux-${LIBC}\n\texit ;;\n    x86_64:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\n    xtensa*:Linux:*:*)\n\techo ${UNAME_MACHINE}-unknown-linux-${LIBC}\n\texit ;;\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\t# Unixware is an offshoot of SVR4, but it has its own version\n\t# number series starting with 2...\n\t# I am not positive that other SVR4 systems won't match this,\n\t# I just have to hope.  -- rms.\n\t# 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.[02]*:*)\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\t# uname -m prints for DJGPP always 'pc', but it prints nothing about\n\t# the processor, so we play safe by assuming i586.\n\t# Note: whatever this is, it MUST be the same as what config.sub\n\t# prints for the \"djgpp\" host, or else GDB configury will decide that\n\t# this is a cross-build.\n\techo i586-pc-msdosdjgpp\n\texit ;;\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\t/bin/uname -p 2>/dev/null | grep 86 >/dev/null \\\n\t  && { echo i486-ncr-sysv4; exit; } ;;\n    NCR*:*:4.2:* | MPRAS*:*:4.2:*)\n\tOS_REL='.3'\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\t/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \\\n\t    && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*)\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*:*)\t# Unisys `ClearPath HMP IX 4000' SVR4/MP effort\n\t\t\t# says <Richard.M.Bartel@ccMail.Census.GOV>\n\techo i586-unisys-sysv4\n\texit ;;\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\techo mips-nec-sysv${UNAME_RELEASE}\n\telse\n\t\techo mips-unknown-sysv${UNAME_RELEASE}\n\tfi\n\texit ;;\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    BePC:Haiku:*:*)\t# Haiku running on Intel PC compatible.\n\techo i586-pc-haiku\n\texit ;;\n    x86_64:Haiku:*:*)\n\techo x86_64-unknown-haiku\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    SX-7:SUPER-UX:*:*)\n\techo sx7-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8:SUPER-UX:*:*)\n\techo sx8-nec-superux${UNAME_RELEASE}\n\texit ;;\n    SX-8R:SUPER-UX:*:*)\n\techo sx8r-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\teval $set_cc_for_build\n\tif test \"$UNAME_PROCESSOR\" = unknown ; then\n\t    UNAME_PROCESSOR=powerpc\n\tfi\n\tif [ \"$CC_FOR_BUILD\" != 'no_compiler_found' ]; then\n\t    if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \\\n\t\t(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \\\n\t\tgrep IS_64BIT_ARCH >/dev/null\n\t    then\n\t\tcase $UNAME_PROCESSOR in\n\t\t    i386) UNAME_PROCESSOR=x86_64 ;;\n\t\t    powerpc) UNAME_PROCESSOR=powerpc64 ;;\n\t\tesac\n\t    fi\n\tfi\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    NEO-?:NONSTOP_KERNEL:*:*)\n\techo neo-tandem-nsk${UNAME_RELEASE}\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\techo 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 ;;\n    i*86:AROS:*:*)\n\techo ${UNAME_MACHINE}-pc-aros\n\texit ;;\n    x86_64:VMkernel:*:*)\n\techo ${UNAME_MACHINE}-unknown-esx\n\texit ;;\nesac\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\t\"4\"\n#else\n\t\"\"\n#endif\n\t); 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://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD\nand\n  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/config.sub",
    "content": "#! /bin/sh\n# Configuration validation subroutine script.\n#   Copyright 1992-2013 Free Software Foundation, Inc.\n\ntimestamp='2013-08-10'\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 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, 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, see <http://www.gnu.org/licenses/>.\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\n# program.  This Exception is an additional permission under section 7\n# of the GNU General Public License, version 3 (\"GPLv3\").\n\n\n# Please send patches with a ChangeLog entry to config-patches@gnu.org.\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# You can get the latest version of this script from:\n# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD\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 1992-2013 Free 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-android* | linux-dietlibc | linux-newlib* | \\\n  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \\\n  knetbsd*-gnu* | netbsd*-gnu* | \\\n  kopensolaris*-gnu* | \\\n  storm-chaos* | os2-emx* | rtmk-nova*)\n    os=-$maybe_os\n    basic_machine=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\1/'`\n    ;;\n  android-linux)\n    os=-linux-android\n    basic_machine=`echo $1 | sed 's/^\\(.*\\)-\\([^-]*-[^-]*\\)$/\\1/'`-unknown\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 | -microblaze*)\n\t\tos=\n\t\tbasic_machine=$1\n\t\t;;\n\t-bluegene*)\n\t\tos=-cnk\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*178)\n\t\tos=-lynxos178\n\t\t;;\n\t-lynx*5)\n\t\tos=-lynxos5\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| aarch64 | aarch64_be \\\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 | arceb \\\n\t| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \\\n\t| avr | avr32 \\\n\t| be32 | be64 \\\n\t| bfin \\\n\t| c4x | c8051 | clipper \\\n\t| d10v | d30v | dlx | dsp16xx \\\n\t| epiphany \\\n\t| fido | fr30 | frv \\\n\t| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \\\n\t| hexagon \\\n\t| i370 | i860 | i960 | ia64 \\\n\t| ip2k | iq2000 \\\n\t| le32 | le64 \\\n\t| lm32 \\\n\t| m32c | m32r | m32rle | m68000 | m68k | m88k \\\n\t| maxq | mb | microblaze | microblazeel | mcore | mep | metag \\\n\t| mips | mipsbe | mipseb | mipsel | mipsle \\\n\t| mips16 \\\n\t| mips64 | mips64el \\\n\t| mips64octeon | mips64octeonel \\\n\t| mips64orion | mips64orionel \\\n\t| mips64r5900 | mips64r5900el \\\n\t| mips64vr | mips64vrel \\\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| mipsr5900 | mipsr5900el \\\n\t| mipstx39 | mipstx39el \\\n\t| mn10200 | mn10300 \\\n\t| moxie \\\n\t| mt \\\n\t| msp430 \\\n\t| nds32 | nds32le | nds32be \\\n\t| nios | nios2 | nios2eb | nios2el \\\n\t| ns16k | ns32k \\\n\t| open8 \\\n\t| or1k | or32 \\\n\t| pdp10 | pdp11 | pj | pjl \\\n\t| powerpc | powerpc64 | powerpc64le | powerpcle \\\n\t| pyramid \\\n\t| rl78 | rx \\\n\t| score \\\n\t| sh | sh[1234] | sh[24]a | sh[24]aeb | 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| spu \\\n\t| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \\\n\t| ubicom32 \\\n\t| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \\\n\t| we32k \\\n\t| x86 | xc16x | xstormy16 | xtensa \\\n\t| z8k | z80)\n\t\tbasic_machine=$basic_machine-unknown\n\t\t;;\n\tc54x)\n\t\tbasic_machine=tic54x-unknown\n\t\t;;\n\tc55x)\n\t\tbasic_machine=tic55x-unknown\n\t\t;;\n\tc6x)\n\t\tbasic_machine=tic6x-unknown\n\t\t;;\n\tm6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)\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\tstrongarm | thumb | xscale)\n\t\tbasic_machine=arm-unknown\n\t\t;;\n\txgate)\n\t\tbasic_machine=$basic_machine-unknown\n\t\tos=-none\n\t\t;;\n\txscaleeb)\n\t\tbasic_machine=armeb-unknown\n\t\t;;\n\n\txscaleel)\n\t\tbasic_machine=armel-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| aarch64-* | aarch64_be-* \\\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-* | arceb-* \\\n\t| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \\\n\t| avr-* | avr32-* \\\n\t| be32-* | be64-* \\\n\t| bfin-* | bs2000-* \\\n\t| c[123]* | c30-* | [cjt]90-* | c4x-* \\\n\t| c8051-* | clipper-* | craynv-* | cydra-* \\\n\t| d10v-* | d30v-* | dlx-* \\\n\t| elxsi-* \\\n\t| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \\\n\t| h8300-* | h8500-* \\\n\t| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \\\n\t| hexagon-* \\\n\t| i*86-* | i860-* | i960-* | ia64-* \\\n\t| ip2k-* | iq2000-* \\\n\t| le32-* | le64-* \\\n\t| lm32-* \\\n\t| m32c-* | m32r-* | m32rle-* \\\n\t| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \\\n\t| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \\\n\t| microblaze-* | microblazeel-* \\\n\t| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \\\n\t| mips16-* \\\n\t| mips64-* | mips64el-* \\\n\t| mips64octeon-* | mips64octeonel-* \\\n\t| mips64orion-* | mips64orionel-* \\\n\t| mips64r5900-* | mips64r5900el-* \\\n\t| mips64vr-* | mips64vrel-* \\\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| mipsr5900-* | mipsr5900el-* \\\n\t| mipstx39-* | mipstx39el-* \\\n\t| mmix-* \\\n\t| mt-* \\\n\t| msp430-* \\\n\t| nds32-* | nds32le-* | nds32be-* \\\n\t| nios-* | nios2-* | nios2eb-* | nios2el-* \\\n\t| none-* | np1-* | ns16k-* | ns32k-* \\\n\t| open8-* \\\n\t| orion-* \\\n\t| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \\\n\t| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \\\n\t| pyramid-* \\\n\t| rl78-* | romp-* | rs6000-* | rx-* \\\n\t| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | sv1-* | sx?-* \\\n\t| tahoe-* \\\n\t| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \\\n\t| tile*-* \\\n\t| tron-* \\\n\t| ubicom32-* \\\n\t| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \\\n\t| vax-* \\\n\t| we32k-* \\\n\t| x86-* | x86_64-* | xc16x-* | xps100-* \\\n\t| xstormy16-* | xtensa*-* \\\n\t| ymp-* \\\n\t| z8k-* | z80-*)\n\t\t;;\n\t# Recognize the basic CPU types without company name, with glob match.\n\txtensa*)\n\t\tbasic_machine=$basic_machine-unknown\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\taros)\n\t\tbasic_machine=i386-pc\n\t\tos=-aros\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\tblackfin)\n\t\tbasic_machine=bfin-unknown\n\t\tos=-linux\n\t\t;;\n\tblackfin-*)\n\t\tbasic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\n\t\t;;\n\tbluegene*)\n\t\tbasic_machine=powerpc-ibm\n\t\tos=-cnk\n\t\t;;\n\tc54x-*)\n\t\tbasic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc55x-*)\n\t\tbasic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc6x-*)\n\t\tbasic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\t;;\n\tc90)\n\t\tbasic_machine=c90-cray\n\t\tos=-unicos\n\t\t;;\n\tcegcc)\n\t\tbasic_machine=arm-unknown\n\t\tos=-cegcc\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\tcr16 | cr16-*)\n\t\tbasic_machine=cr16-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\tdicos)\n\t\tbasic_machine=i686-pc\n\t\tos=-dicos\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\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\tm68knommu)\n\t\tbasic_machine=m68k-unknown\n\t\tos=-linux\n\t\t;;\n\tm68knommu-*)\n\t\tbasic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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\tmicroblaze*)\n\t\tbasic_machine=microblaze-xilinx\n\t\t;;\n\tmingw64)\n\t\tbasic_machine=x86_64-pc\n\t\tos=-mingw64\n\t\t;;\n\tmingw32)\n\t\tbasic_machine=i686-pc\n\t\tos=-mingw32\n\t\t;;\n\tmingw32ce)\n\t\tbasic_machine=arm-unknown\n\t\tos=-mingw32ce\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\tmsys)\n\t\tbasic_machine=i686-pc\n\t\tos=-msys\n\t\t;;\n\tmvs)\n\t\tbasic_machine=i370-ibm\n\t\tos=-mvs\n\t\t;;\n\tnacl)\n\t\tbasic_machine=le32-unknown\n\t\tos=-nacl\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\tneo-tandem)\n\t\tbasic_machine=neo-tandem\n\t\t;;\n\tnse-tandem)\n\t\tbasic_machine=nse-tandem\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\tparisc)\n\t\tbasic_machine=hppa-unknown\n\t\tos=-linux\n\t\t;;\n\tparisc-*)\n\t\tbasic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`\n\t\tos=-linux\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 | ppcbe)\tbasic_machine=powerpc-unknown\n\t\t;;\n\tppc-* | ppcbe-*)\n\t\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 | rdos64)\n\t\tbasic_machine=x86_64-pc\n\t\tos=-rdos\n\t\t;;\n\trdos32)\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\tsde)\n\t\tbasic_machine=mipsisa32-sde\n\t\tos=-elf\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\tsh5el)\n\t\tbasic_machine=sh5le-unknown\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\tstrongarm-* | thumb-*)\n\t\tbasic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`\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\ttile*)\n\t\tbasic_machine=$basic_machine-unknown\n\t\tos=-linux-gnu\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\txscale-* | xscalee[bl]-*)\n\t\tbasic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`\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\tz80-*-coff)\n\t\tbasic_machine=z80-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[24]aeb | 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\t# First match some system type aliases\n\t# that might get confused with valid system types.\n\t# -solaris* is a basic system type, with this one exception.\n\t-auroraux)\n\t\tos=-auroraux\n\t\t;;\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* | -cnk* | -sunos | -sunos[34]*\\\n\t      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \\\n\t      | -sym* | -kopensolaris* | -plan9* \\\n\t      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \\\n\t      | -aos* | -aros* \\\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      | -bitrig* | -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* | -cegcc* \\\n\t      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \\\n\t      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \\\n\t      | -linux-newlib* | -linux-musl* | -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* | -toppers* | -drops* | -es*)\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\t-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\t-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-zvmoe)\n\t\tos=-zvmoe\n\t\t;;\n\t-dicos*)\n\t\tos=-dicos\n\t\t;;\n\t-nacl*)\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\tscore-*)\n\t\tos=-elf\n\t\t;;\n\tspu-*)\n\t\tos=-elf\n\t\t;;\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\tc4x-* | tic4x-*)\n\t\tos=-coff\n\t\t;;\n\tc8051-*)\n\t\tos=-elf\n\t\t;;\n\thexagon-*)\n\t\tos=-elf\n\t\t;;\n\ttic54x-*)\n\t\tos=-coff\n\t\t;;\n\ttic55x-*)\n\t\tos=-coff\n\t\t;;\n\ttic6x-*)\n\t\tos=-coff\n\t\t;;\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;;\n\tm68*-cisco)\n\t\tos=-aout\n\t\t;;\n\tmep-*)\n\t\tos=-elf\n\t\t;;\n\tmips*-cisco)\n\t\tos=-elf\n\t\t;;\n\tmips*-*)\n\t\tos=-elf\n\t\t;;\n\tor1k-*)\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-cnk*|-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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/depcomp",
    "content": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2013-05-30.07; # UTC\n\n# Copyright (C) 1999-2013 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, see <http://www.gnu.org/licenses/>.\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 outputting 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\n# Get the directory component of the given path, and save it in the\n# global variables '$dir'.  Note that this directory component will\n# be either empty or ending with a '/' character.  This is deliberate.\nset_dir_from ()\n{\n  case $1 in\n    */*) dir=`echo \"$1\" | sed -e 's|/[^/]*$|/|'`;;\n      *) dir=;;\n  esac\n}\n\n# Get the suffix-stripped basename of the given path, and save it the\n# global variable '$base'.\nset_base_from ()\n{\n  base=`echo \"$1\" | sed -e 's|^.*/||' -e 's/\\.[^.]*$//'`\n}\n\n# If no dependency file was actually created by the compiler invocation,\n# we still have to create a dummy depfile, to avoid errors with the\n# Makefile \"include basename.Plo\" scheme.\nmake_dummy_depfile ()\n{\n  echo \"#dummy\" > \"$depfile\"\n}\n\n# Factor out some common post-processing of the generated depfile.\n# Requires the auxiliary global variable '$tmpdepfile' to be set.\naix_post_process_depfile ()\n{\n  # If the compiler actually managed to produce a dependency file,\n  # post-process it.\n  if test -f \"$tmpdepfile\"; then\n    # Each line is of the form 'foo.o: dependency.h'.\n    # Do two passes, one to just change these to\n    #   $object: dependency.h\n    # and one to simply output\n    #   dependency.h:\n    # which is needed to avoid the deleted-header problem.\n    { sed -e \"s,^.*\\.[$lower]*:,$object:,\" < \"$tmpdepfile\"\n      sed -e \"s,^.*\\.[$lower]*:[$tab ]*,,\" -e 's,$,:,' < \"$tmpdepfile\"\n    } > \"$depfile\"\n    rm -f \"$tmpdepfile\"\n  else\n    make_dummy_depfile\n  fi\n}\n\n# A tabulation character.\ntab='\t'\n# A newline character.\nnl='\n'\n# Character ranges might be problematic outside the C locale.\n# These definitions help.\nupper=ABCDEFGHIJKLMNOPQRSTUVWXYZ\nlower=abcdefghijklmnopqrstuvwxyz\ndigits=0123456789\nalpha=${upper}${lower}\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# Avoid interferences from the environment.\ngccflag= dashmflag=\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\ncygpath_u=\"cygpath -u -f -\"\nif test \"$depmode\" = msvcmsys; then\n  # This is just like msvisualcpp but w/o cygpath translation.\n  # Just convert the backslash-escaped backslashes to single forward\n  # slashes to satisfy depend.m4\n  cygpath_u='sed s,\\\\\\\\,/,g'\n  depmode=msvisualcpp\nfi\n\nif test \"$depmode\" = msvc7msys; then\n  # This is just like msvc7 but w/o cygpath translation.\n  # Just convert the backslash-escaped backslashes to single forward\n  # slashes to satisfy depend.m4\n  cygpath_u='sed s,\\\\\\\\,/,g'\n  depmode=msvc7\nfi\n\nif test \"$depmode\" = xlc; then\n  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.\n  gccflag=-qmakedep=gcc,-MF\n  depmode=gcc\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## Unfortunately, FreeBSD c89 acceptance of flags depends upon\n## the command line argument order; so add the flags where they\n## appear in depend2.am.  Note that the slowdown incurred here\n## affects only configure: in makefiles, %FASTDEP% shortcuts this.\n  for arg\n  do\n    case $arg in\n    -c) set fnord \"$@\" -MT \"$object\" -MD -MP -MF \"$tmpdepfile\" \"$arg\" ;;\n    *)  set fnord \"$@\" \"$arg\" ;;\n    esac\n    shift # fnord\n    shift # $arg\n  done\n  \"$@\"\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  mv \"$tmpdepfile\" \"$depfile\"\n  ;;\n\ngcc)\n## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.\n## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.\n## (see the conditional assignment to $gccflag above).\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).  Also, it might not be\n##   supported by the other compilers which use the 'gcc' depmode.\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 -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  # The second -e expression handles DOS-style file names with drive\n  # 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## 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.  hp depmode also adds that space, but also prefixes the VPATH\n## to the object.  Take care to not repeat it in the output.\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  tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e \"s|.*$object$||\" -e '/:$/d' \\\n    | 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 -ne 0; then\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    # 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 ' ' \"$nl\" < \"$tmpdepfile\" \\\n      | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' \\\n      | tr \"$nl\" ' ' >> \"$depfile\"\n    echo >> \"$depfile\"\n    # The second pass generates a dummy entry for each header file.\n    tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n      | sed -e 's/^.*\\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \\\n      >> \"$depfile\"\n  else\n    make_dummy_depfile\n  fi\n  rm -f \"$tmpdepfile\"\n  ;;\n\nxlc)\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\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  set_dir_from \"$object\"\n  set_base_from \"$object\"\n  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$base.u\n    tmpdepfile3=$dir.libs/$base.u\n    \"$@\" -Wc,-M\n  else\n    tmpdepfile1=$dir$base.u\n    tmpdepfile2=$dir$base.u\n    tmpdepfile3=$dir$base.u\n    \"$@\" -M\n  fi\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n    exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  aix_post_process_depfile\n  ;;\n\ntcc)\n  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26\n  # FIXME: That version still under development at the moment of writing.\n  #        Make that this statement remains true also for stable, released\n  #        versions.\n  # It will wrap lines (doesn't matter whether long or short) with a\n  # trailing '\\', as in:\n  #\n  #   foo.o : \\\n  #    foo.c \\\n  #    foo.h \\\n  #\n  # It will put a trailing '\\' even on the last line, and will use leading\n  # spaces rather than leading tabs (at least since its commit 0394caf7\n  # \"Emit spaces for -MD\").\n  \"$@\" -MD -MF \"$tmpdepfile\"\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  # Each non-empty line is of the form 'foo.o : \\' or ' dep.h \\'.\n  # We have to change lines of the first kind to '$object: \\'.\n  sed -e \"s|.*:|$object :|\" < \"$tmpdepfile\" > \"$depfile\"\n  # And for each line of the second kind, we have to emit a 'dep.h:'\n  # dummy dependency, to avoid the deleted-header problem.\n  sed -n -e 's|^  *\\(.*\\) *\\\\$|\\1:|p' < \"$tmpdepfile\" >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\n## The order of this option in the case statement is important, since the\n## shell code in configure will try each of these formats in the order\n## listed in this file.  A plain '-MD' option would be understood by many\n## compilers, so we must ensure this comes after the gcc and icc options.\npgcc)\n  # Portland's C compiler understands '-MD'.\n  # Will always output deps to 'file.d' where file is the root name of the\n  # source file under compilation, even if file resides in a subdirectory.\n  # The object file name does not affect the name of the '.d' file.\n  # pgcc 10.2 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  set_dir_from \"$object\"\n  # Use the source, not the object, to determine the base name, since\n  # that's sadly what pgcc will do too.\n  set_base_from \"$source\"\n  tmpdepfile=$base.d\n\n  # For projects that build the same source file twice into different object\n  # files, the pgcc approach of using the *source* file root name can cause\n  # problems in parallel builds.  Use a locking strategy to avoid stomping on\n  # the same $tmpdepfile.\n  lockdir=$base.d-lock\n  trap \"\n    echo '$0: caught signal, cleaning up...' >&2\n    rmdir '$lockdir'\n    exit 1\n  \" 1 2 13 15\n  numtries=100\n  i=$numtries\n  while test $i -gt 0; do\n    # mkdir is a portable test-and-set.\n    if mkdir \"$lockdir\" 2>/dev/null; then\n      # This process acquired the lock.\n      \"$@\" -MD\n      stat=$?\n      # Release the lock.\n      rmdir \"$lockdir\"\n      break\n    else\n      # If the lock is being held by a different process, wait\n      # until the winning process is done or we timeout.\n      while test -d \"$lockdir\" && test $i -gt 0; do\n        sleep 1\n        i=`expr $i - 1`\n      done\n    fi\n    i=`expr $i - 1`\n  done\n  trap - 1 2 13 15\n  if test $i -le 0; then\n    echo \"$0: failed to acquire lock after $numtries attempts\" >&2\n    echo \"$0: check lockdir '$lockdir'\" >&2\n    exit 1\n  fi\n\n  if test $stat -ne 0; then\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\nhp2)\n  # The \"hp\" stanza above does not work with aCC (C++) and HP's ia64\n  # compilers, which have integrated preprocessors.  The correct option\n  # to use with these is +Maked; it writes dependencies to a file named\n  # 'foo.d', which lands next to the object file, wherever that\n  # happens to be.\n  # Much of this is similar to the tru64 case; see comments there.\n  set_dir_from  \"$object\"\n  set_base_from \"$object\"\n  if test \"$libtool\" = yes; then\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir.libs/$base.d\n    \"$@\" -Wc,+Maked\n  else\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir$base.d\n    \"$@\" +Maked\n  fi\n  stat=$?\n  if test $stat -ne 0; then\n     rm -f \"$tmpdepfile1\" \"$tmpdepfile2\"\n     exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  if test -f \"$tmpdepfile\"; then\n    sed -e \"s,^.*\\.[$lower]*:,$object:,\" \"$tmpdepfile\" > \"$depfile\"\n    # Add 'dependent.h:' lines.\n    sed -ne '2,${\n               s/^ *//\n               s/ \\\\*$//\n               s/$/:/\n               p\n             }' \"$tmpdepfile\" >> \"$depfile\"\n  else\n    make_dummy_depfile\n  fi\n  rm -f \"$tmpdepfile\" \"$tmpdepfile2\"\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  set_dir_from  \"$object\"\n  set_base_from \"$object\"\n\n  if test \"$libtool\" = yes; then\n    # Libtool generates 2 separate objects for the 2 libraries.  These\n    # two compilations output dependencies 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$base.o.d          # libtool 1.5\n    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.\n    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504\n    \"$@\" -Wc,-MD\n  else\n    tmpdepfile1=$dir$base.d\n    tmpdepfile2=$dir$base.d\n    tmpdepfile3=$dir$base.d\n    \"$@\" -MD\n  fi\n\n  stat=$?\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n    exit $stat\n  fi\n\n  for tmpdepfile in \"$tmpdepfile1\" \"$tmpdepfile2\" \"$tmpdepfile3\"\n  do\n    test -f \"$tmpdepfile\" && break\n  done\n  # Same post-processing that is required for AIX mode.\n  aix_post_process_depfile\n  ;;\n\nmsvc7)\n  if test \"$libtool\" = yes; then\n    showIncludes=-Wc,-showIncludes\n  else\n    showIncludes=-showIncludes\n  fi\n  \"$@\" $showIncludes > \"$tmpdepfile\"\n  stat=$?\n  grep -v '^Note: including file: ' \"$tmpdepfile\"\n  if test $stat -ne 0; then\n    rm -f \"$tmpdepfile\"\n    exit $stat\n  fi\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  # The first sed program below extracts the file names and escapes\n  # backslashes for cygpath.  The second sed program outputs the file\n  # name when reading, but also accumulates all include files in the\n  # hold buffer in order to output them again at the end.  This only\n  # works with sed implementations that can handle large buffers.\n  sed < \"$tmpdepfile\" -n '\n/^Note: including file:  *\\(.*\\)/ {\n  s//\\1/\n  s/\\\\/\\\\\\\\/g\n  p\n}' | $cygpath_u | sort -u | sed -n '\ns/ /\\\\ /g\ns/\\(.*\\)/'\"$tab\"'\\1 \\\\/p\ns/.\\(.*\\) \\\\/\\1:/\nH\n$ {\n  s/.*/'\"$tab\"'/\n  G\n  p\n}' >> \"$depfile\"\n  echo >> \"$depfile\" # make sure the fragment doesn't end with a backslash\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvc7msys)\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\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 \"X$1\" != 'X--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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |\" > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  cat < \"$tmpdepfile\" > \"$depfile\"\n  # Some versions of the HPUX 10.20 sed can't process this sed invocation\n  # correctly.  Breaking it into two sed invocations is a workaround.\n  tr ' ' \"$nl\" < \"$tmpdepfile\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' \\\n    | 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 \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n  # X makedepend\n  shift\n  cleared=no eat=no\n  for arg\n  do\n    case $cleared in\n    no)\n      set \"\"; shift\n      cleared=yes ;;\n    esac\n    if test $eat = yes; then\n      eat=no\n      continue\n    fi\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    -arch)\n      eat=yes ;;\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  # makedepend may prepend the VPATH from the source file name to the object.\n  # No need to regex-escape $object, excess matching of '.' is harmless.\n  sed \"s|^.*\\($object *:\\)|\\1|\" \"$tmpdepfile\" > \"$depfile\"\n  # Some versions of the HPUX 10.20 sed can't process the last invocation\n  # correctly.  Breaking it into two sed invocations is a workaround.\n  sed '1,2d' \"$tmpdepfile\" \\\n    | tr ' ' \"$nl\" \\\n    | sed -e 's/^\\\\$//' -e '/^$/d' -e '/:$/d' \\\n    | 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 \"X$1\" != 'X--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.\n  \"$@\" || exit $?\n\n  # Remove the call to Libtool.\n  if test \"$libtool\" = yes; then\n    while test \"X$1\" != 'X--mode=compile'; do\n      shift\n    done\n    shift\n  fi\n\n  IFS=\" \"\n  for arg\n  do\n    case \"$arg\" in\n    -o)\n      shift\n      ;;\n    $object)\n      shift\n      ;;\n    \"-Gm\"|\"/Gm\"|\"-Gi\"|\"/Gi\"|\"-ZI\"|\"/ZI\")\n        set fnord \"$@\"\n        shift\n        shift\n        ;;\n    *)\n        set fnord \"$@\" \"$arg\"\n        shift\n        shift\n        ;;\n    esac\n  done\n  \"$@\" -E 2>/dev/null |\n  sed -n '/^#line [0-9][0-9]* \"\\([^\"]*\\)\"/ s::\\1:p' | $cygpath_u | sort -u > \"$tmpdepfile\"\n  rm -f \"$depfile\"\n  echo \"$object : \\\\\" > \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::'\"$tab\"'\\1 \\\\:p' >> \"$depfile\"\n  echo \"$tab\" >> \"$depfile\"\n  sed < \"$tmpdepfile\" -n -e 's% %\\\\ %g' -e '/^\\(.*\\)$/ s::\\1\\::p' >> \"$depfile\"\n  rm -f \"$tmpdepfile\"\n  ;;\n\nmsvcmsys)\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\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/install-sh",
    "content": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2011-11-20.07; # UTC\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.\n\nnl='\n'\nIFS=\" \"\"\t$nl\"\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-}\nif test -z \"$doit\"; then\n  doit_exec=exec\nelse\n  doit_exec=$doit\nfi\n\n# Put in absolute file names if you don't have them in your path;\n# or use environment vars.\n\nchgrpprog=${CHGRPPROG-chgrp}\nchmodprog=${CHMODPROG-chmod}\nchownprog=${CHOWNPROG-chown}\ncmpprog=${CMPPROG-cmp}\ncpprog=${CPPROG-cp}\nmkdirprog=${MKDIRPROG-mkdir}\nmvprog=${MVPROG-mv}\nrmprog=${RMPROG-rm}\nstripprog=${STRIPPROG-strip}\n\nposix_glob='?'\ninitialize_posix_glob='\n  test \"$posix_glob\" != \"?\" || {\n    if (set -f) 2>/dev/null; then\n      posix_glob=\n    else\n      posix_glob=:\n    fi\n  }\n'\n\nposix_mkdir=\n\n# Desired mode of installed file.\nmode=0755\n\nchgrpcmd=\nchmodcmd=$chmodprog\nchowncmd=\nmvcmd=$mvprog\nrmcmd=\"$rmprog -f\"\nstripcmd=\n\nsrc=\ndst=\ndir_arg=\ndst_arg=\n\ncopy_on_change=false\nno_target_directory=\n\nusage=\"\\\nUsage: $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     --help     display this help and exit.\n     --version  display version info and exit.\n\n  -c            (ignored)\n  -C            install only if different (preserve the last data modification time)\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\nEnvironment variables override the default commands:\n  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG\n  RMPROG STRIPPROG\n\"\n\nwhile test $# -ne 0; do\n  case $1 in\n    -c) ;;\n\n    -C) copy_on_change=true;;\n\n    -d) dir_arg=true;;\n\n    -g) chgrpcmd=\"$chgrpprog $2\"\n\tshift;;\n\n    --help) echo \"$usage\"; exit $?;;\n\n    -m) mode=$2\n\tcase $mode in\n\t  *' '* | *'\t'* | *'\n'*\t  | *'*'* | *'?'* | *'['*)\n\t    echo \"$0: invalid mode: $mode\" >&2\n\t    exit 1;;\n\tesac\n\tshift;;\n\n    -o) chowncmd=\"$chownprog $2\"\n\tshift;;\n\n    -s) stripcmd=$stripprog;;\n\n    -t) dst_arg=$2\n\t# Protect names problematic for 'test' and other utilities.\n\tcase $dst_arg in\n\t  -* | [=\\(\\)!]) dst_arg=./$dst_arg;;\n\tesac\n\tshift;;\n\n    -T) no_target_directory=true;;\n\n    --version) echo \"$0 $scriptversion\"; exit $?;;\n\n    --)\tshift\n\tbreak;;\n\n    -*)\techo \"$0: invalid option: $1\" >&2\n\texit 1;;\n\n    *)  break;;\n  esac\n  shift\ndone\n\nif test $# -ne 0 && test -z \"$dir_arg$dst_arg\"; then\n  # When -d is used, all remaining arguments are directories to create.\n  # When -t is used, the destination is already specified.\n  # Otherwise, the last argument is the destination.  Remove it from $@.\n  for arg\n  do\n    if test -n \"$dst_arg\"; then\n      # $@ is not empty: it contains at least $arg.\n      set fnord \"$@\" \"$dst_arg\"\n      shift # fnord\n    fi\n    shift # arg\n    dst_arg=$arg\n    # Protect names problematic for 'test' and other utilities.\n    case $dst_arg in\n      -* | [=\\(\\)!]) dst_arg=./$dst_arg;;\n    esac\n  done\nfi\n\nif test $# -eq 0; 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\nif test -z \"$dir_arg\"; then\n  do_exit='(exit $ret); exit $ret'\n  trap \"ret=129; $do_exit\" 1\n  trap \"ret=130; $do_exit\" 2\n  trap \"ret=141; $do_exit\" 13\n  trap \"ret=143; $do_exit\" 15\n\n  # Set umask so as not to create temps with too-generous modes.\n  # However, 'strip' requires both read and write access to temps.\n  case $mode in\n    # Optimize common cases.\n    *644) cp_umask=133;;\n    *755) cp_umask=22;;\n\n    *[0-7])\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw='% 200'\n      fi\n      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;\n    *)\n      if test -z \"$stripcmd\"; then\n\tu_plus_rw=\n      else\n\tu_plus_rw=,u+rw\n      fi\n      cp_umask=$mode$u_plus_rw;;\n  esac\nfi\n\nfor src\ndo\n  # Protect names problematic for 'test' and other utilities.\n  case $src in\n    -* | [=\\(\\)!]) src=./$src;;\n  esac\n\n  if test -n \"$dir_arg\"; then\n    dst=$src\n    dstdir=$dst\n    test -d \"$dstdir\"\n    dstdir_status=$?\n  else\n\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 \"$dst_arg\"; then\n      echo \"$0: no destination specified.\" >&2\n      exit 1\n    fi\n    dst=$dst_arg\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: $dst_arg: Is a directory\" >&2\n\texit 1\n      fi\n      dstdir=$dst\n      dst=$dstdir/`basename \"$src\"`\n      dstdir_status=0\n    else\n      # Prefer dirname, but fall back on a substitute if dirname fails.\n      dstdir=`\n\t(dirname \"$dst\") 2>/dev/null ||\n\texpr X\"$dst\" : 'X\\(.*[^/]\\)//*[^/][^/]*/*$' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)[^/]' \\| \\\n\t     X\"$dst\" : 'X\\(//\\)$' \\| \\\n\t     X\"$dst\" : 'X\\(/\\)' \\| . 2>/dev/null ||\n\techo X\"$dst\" |\n\t    sed '/^X\\(.*[^/]\\)\\/\\/*[^/][^/]*\\/*$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)[^/].*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\/\\)$/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t /^X\\(\\/\\).*/{\n\t\t   s//\\1/\n\t\t   q\n\t\t }\n\t\t s/.*/./; q'\n      `\n\n      test -d \"$dstdir\"\n      dstdir_status=$?\n    fi\n  fi\n\n  obsolete_mkdir_used=false\n\n  if test $dstdir_status != 0; then\n    case $posix_mkdir in\n      '')\n\t# Create intermediate dirs using mode 755 as modified by the umask.\n\t# This is like FreeBSD 'install' as of 1997-10-28.\n\tumask=`umask`\n\tcase $stripcmd.$umask in\n\t  # Optimize common cases.\n\t  *[2367][2367]) mkdir_umask=$umask;;\n\t  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;\n\n\t  *[0-7])\n\t    mkdir_umask=`expr $umask + 22 \\\n\t      - $umask % 100 % 40 + $umask % 20 \\\n\t      - $umask % 10 % 4 + $umask % 2\n\t    `;;\n\t  *) mkdir_umask=$umask,go-w;;\n\tesac\n\n\t# With -d, create the new directory with the user-specified mode.\n\t# Otherwise, rely on $mkdir_umask.\n\tif test -n \"$dir_arg\"; then\n\t  mkdir_mode=-m$mode\n\telse\n\t  mkdir_mode=\n\tfi\n\n\tposix_mkdir=false\n\tcase $umask in\n\t  *[123567][0-7][0-7])\n\t    # POSIX mkdir -p sets u+wx bits regardless of umask, which\n\t    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.\n\t    ;;\n\t  *)\n\t    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$\n\t    trap 'ret=$?; rmdir \"$tmpdir/d\" \"$tmpdir\" 2>/dev/null; exit $ret' 0\n\n\t    if (umask $mkdir_umask &&\n\t\texec $mkdirprog $mkdir_mode -p -- \"$tmpdir/d\") >/dev/null 2>&1\n\t    then\n\t      if test -z \"$dir_arg\" || {\n\t\t   # Check for POSIX incompatibilities with -m.\n\t\t   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or\n\t\t   # other-writable bit of parent directory when it shouldn't.\n\t\t   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.\n\t\t   ls_ld_tmpdir=`ls -ld \"$tmpdir\"`\n\t\t   case $ls_ld_tmpdir in\n\t\t     d????-?r-*) different_mode=700;;\n\t\t     d????-?--*) different_mode=755;;\n\t\t     *) false;;\n\t\t   esac &&\n\t\t   $mkdirprog -m$different_mode -p -- \"$tmpdir\" && {\n\t\t     ls_ld_tmpdir_1=`ls -ld \"$tmpdir\"`\n\t\t     test \"$ls_ld_tmpdir\" = \"$ls_ld_tmpdir_1\"\n\t\t   }\n\t\t }\n\t      then posix_mkdir=:\n\t      fi\n\t      rmdir \"$tmpdir/d\" \"$tmpdir\"\n\t    else\n\t      # Remove any dirs left behind by ancient mkdir implementations.\n\t      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null\n\t    fi\n\t    trap '' 0;;\n\tesac;;\n    esac\n\n    if\n      $posix_mkdir && (\n\tumask $mkdir_umask &&\n\t$doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\"\n      )\n    then :\n    else\n\n      # The umask is ridiculous, or mkdir does not conform to POSIX,\n      # or it failed possibly due to a race condition.  Create the\n      # directory the slow way, step by step, checking for races as we go.\n\n      case $dstdir in\n\t/*) prefix='/';;\n\t[-=\\(\\)!]*) prefix='./';;\n\t*)  prefix='';;\n      esac\n\n      eval \"$initialize_posix_glob\"\n\n      oIFS=$IFS\n      IFS=/\n      $posix_glob set -f\n      set fnord $dstdir\n      shift\n      $posix_glob set +f\n      IFS=$oIFS\n\n      prefixes=\n\n      for d\n      do\n\ttest X\"$d\" = X && continue\n\n\tprefix=$prefix$d\n\tif test -d \"$prefix\"; then\n\t  prefixes=\n\telse\n\t  if $posix_mkdir; then\n\t    (umask=$mkdir_umask &&\n\t     $doit_exec $mkdirprog $mkdir_mode -p -- \"$dstdir\") && break\n\t    # Don't fail if two instances are running concurrently.\n\t    test -d \"$prefix\" || exit 1\n\t  else\n\t    case $prefix in\n\t      *\\'*) qprefix=`echo \"$prefix\" | sed \"s/'/'\\\\\\\\\\\\\\\\''/g\"`;;\n\t      *) qprefix=$prefix;;\n\t    esac\n\t    prefixes=\"$prefixes '$qprefix'\"\n\t  fi\n\tfi\n\tprefix=$prefix/\n      done\n\n      if test -n \"$prefixes\"; then\n\t# Don't fail if two instances are running concurrently.\n\t(umask $mkdir_umask &&\n\t eval \"\\$doit_exec \\$mkdirprog $prefixes\") ||\n\t  test -d \"$dstdir\" || exit 1\n\tobsolete_mkdir_used=true\n      fi\n    fi\n  fi\n\n  if test -n \"$dir_arg\"; then\n    { test -z \"$chowncmd\" || $doit $chowncmd \"$dst\"; } &&\n    { test -z \"$chgrpcmd\" || $doit $chgrpcmd \"$dst\"; } &&\n    { test \"$obsolete_mkdir_used$chowncmd$chgrpcmd\" = false ||\n      test -z \"$chmodcmd\" || $doit $chmodcmd $mode \"$dst\"; } || exit 1\n  else\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\n    # Copy the file name to the temp name.\n    (umask $cp_umask && $doit_exec $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 $mode \"$dsttmp\"; } &&\n\n    # If -C, don't bother to copy if it wouldn't change the file.\n    if $copy_on_change &&\n       old=`LC_ALL=C ls -dlL \"$dst\"\t2>/dev/null` &&\n       new=`LC_ALL=C ls -dlL \"$dsttmp\"\t2>/dev/null` &&\n\n       eval \"$initialize_posix_glob\" &&\n       $posix_glob set -f &&\n       set X $old && old=:$2:$4:$5:$6 &&\n       set X $new && new=:$2:$4:$5:$6 &&\n       $posix_glob set +f &&\n\n       test \"$old\" = \"$new\" &&\n       $cmpprog \"$dst\" \"$dsttmp\" >/dev/null 2>&1\n    then\n      rm -f \"$dsttmp\"\n    else\n      # Rename the file to the real destination.\n      $doit $mvcmd -f \"$dsttmp\" \"$dst\" 2>/dev/null ||\n\n      # The rename failed, perhaps because mv can't rename something else\n      # to itself, or perhaps because mv is so ancient that it does not\n      # 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  test ! -f \"$dst\" ||\n\t  $doit $rmcmd -f \"$dst\" 2>/dev/null ||\n\t  { $doit $mvcmd -f \"$dst\" \"$rmtmp\" 2>/dev/null &&\n\t    { $doit $rmcmd -f \"$rmtmp\" 2>/dev/null; :; }\n\t  } ||\n\t  { echo \"$0: cannot unlink or rename $dst\" >&2\n\t    (exit 1); exit 1\n\t  }\n\t} &&\n\n\t# Now rename the file to the real destination.\n\t$doit $mvcmd \"$dsttmp\" \"$dst\"\n      }\n    fi || exit 1\n\n    trap '' 0\n  fi\ndone\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/ltmain.sh",
    "content": "\n# libtool (GNU libtool) 2.4.2\n# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996\n\n# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,\n# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.\n# This is free software; see the source for copying conditions.  There is NO\n# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n# GNU Libtool 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# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html,\n# or obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n# Usage: $progname [OPTION]... [MODE-ARG]...\n#\n# Provide generalized library-building support services.\n#\n#       --config             show all configuration variables\n#       --debug              enable verbose shell tracing\n#   -n, --dry-run            display commands without modifying any files\n#       --features           display basic configuration information and exit\n#       --mode=MODE          use operation mode MODE\n#       --preserve-dup-deps  don't remove duplicate dependency libraries\n#       --quiet, --silent    don't print informational messages\n#       --no-quiet, --no-silent\n#                            print informational messages (default)\n#       --no-warn            don't display warning messages\n#       --tag=TAG            use configuration variables from tag TAG\n#   -v, --verbose            print more informational messages than default\n#       --no-verbose         don't print the extra informational messages\n#       --version            print version information\n#   -h, --help, --help-all   print short, long, or detailed help message\n#\n# MODE must be one of the following:\n#\n#         clean              remove files from the build directory\n#         compile            compile a source file into a libtool object\n#         execute            automatically set library path, then run a program\n#         finish             complete the installation of libtool libraries\n#         install            install libraries or executables\n#         link               create a library or an executable\n#         uninstall          remove libraries from an installed directory\n#\n# MODE-ARGS vary depending on the MODE.  When passed as first option,\n# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.\n# Try `$progname --help --mode=MODE' for a more detailed description of MODE.\n#\n# When reporting a bug, please describe a test case to reproduce it and\n# include the following information:\n#\n#         host-triplet:\t$host\n#         shell:\t\t$SHELL\n#         compiler:\t\t$LTCC\n#         compiler flags:\t\t$LTCFLAGS\n#         linker:\t\t$LD (gnu? $with_gnu_ld)\n#         $progname:\t(GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1\n#         automake:\t$automake_version\n#         autoconf:\t$autoconf_version\n#\n# Report bugs to <bug-libtool@gnu.org>.\n# GNU libtool home page: <http://www.gnu.org/software/libtool/>.\n# General help using GNU software: <http://www.gnu.org/gethelp/>.\n\nPROGRAM=libtool\nPACKAGE=libtool\nVERSION=\"2.4.2 Debian-2.4.2-1.7ubuntu1\"\nTIMESTAMP=\"\"\npackage_revision=1.3337\n\n# Be Bourne compatible\nif test -n \"${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n$1\n_LTECHO_EOF'\n}\n\n# NLS nuisances: We save the old values to restore during execute mode.\nlt_user_locale=\nlt_safe_locale=\nfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\ndo\n  eval \"if test \\\"\\${$lt_var+set}\\\" = set; then\n          save_$lt_var=\\$$lt_var\n          $lt_var=C\n\t  export $lt_var\n\t  lt_user_locale=\\\"$lt_var=\\\\\\$save_\\$lt_var; \\$lt_user_locale\\\"\n\t  lt_safe_locale=\\\"$lt_var=C; \\$lt_safe_locale\\\"\n\tfi\"\ndone\nLC_ALL=C\nLANGUAGE=C\nexport LANGUAGE LC_ALL\n\n$lt_unset CDPATH\n\n\n# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh\n# is ksh but when the shell is invoked as \"sh\" and the current value of\n# the _XPG environment variable is not equal to 1 (one), the special\n# positional parameter $0, within a function call, is the name of the\n# function.\nprogpath=\"$0\"\n\n\n\n: ${CP=\"cp -f\"}\ntest \"${ECHO+set}\" = set || ECHO=${as_echo-'printf %s\\n'}\n: ${MAKE=\"make\"}\n: ${MKDIR=\"mkdir\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n: ${SHELL=\"${CONFIG_SHELL-/bin/sh}\"}\n: ${Xsed=\"$SED -e 1s/^X//\"}\n\n# Global variables:\nEXIT_SUCCESS=0\nEXIT_FAILURE=1\nEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.\nEXIT_SKIP=77\t  # $? = 77 is used to indicate a skipped test to automake.\n\nexit_status=$EXIT_SUCCESS\n\n# Make sure IFS has a sensible default\nlt_nl='\n'\nIFS=\" \t$lt_nl\"\n\ndirname=\"s,/[^/]*$,,\"\nbasename=\"s,^.*/,,\"\n\n# func_dirname file append nondir_replacement\n# Compute the dirname of FILE.  If nonempty, add APPEND to the result,\n# otherwise set result to NONDIR_REPLACEMENT.\nfunc_dirname ()\n{\n    func_dirname_result=`$ECHO \"${1}\" | $SED \"$dirname\"`\n    if test \"X$func_dirname_result\" = \"X${1}\"; then\n      func_dirname_result=\"${3}\"\n    else\n      func_dirname_result=\"$func_dirname_result${2}\"\n    fi\n} # func_dirname may be replaced by extended shell implementation\n\n\n# func_basename file\nfunc_basename ()\n{\n    func_basename_result=`$ECHO \"${1}\" | $SED \"$basename\"`\n} # func_basename may be replaced by extended shell implementation\n\n\n# func_dirname_and_basename file append nondir_replacement\n# perform func_basename and func_dirname in a single function\n# call:\n#   dirname:  Compute the dirname of FILE.  If nonempty,\n#             add APPEND to the result, otherwise set result\n#             to NONDIR_REPLACEMENT.\n#             value returned in \"$func_dirname_result\"\n#   basename: Compute filename of FILE.\n#             value retuned in \"$func_basename_result\"\n# Implementation must be kept synchronized with func_dirname\n# and func_basename. For efficiency, we do not delegate to\n# those functions but instead duplicate the functionality here.\nfunc_dirname_and_basename ()\n{\n    # Extract subdirectory from the argument.\n    func_dirname_result=`$ECHO \"${1}\" | $SED -e \"$dirname\"`\n    if test \"X$func_dirname_result\" = \"X${1}\"; then\n      func_dirname_result=\"${3}\"\n    else\n      func_dirname_result=\"$func_dirname_result${2}\"\n    fi\n    func_basename_result=`$ECHO \"${1}\" | $SED -e \"$basename\"`\n} # func_dirname_and_basename may be replaced by extended shell implementation\n\n\n# func_stripname prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n# func_strip_suffix prefix name\nfunc_stripname ()\n{\n    case ${2} in\n      .*) func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%\\\\\\\\${2}\\$%%\"`;;\n      *)  func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%${2}\\$%%\"`;;\n    esac\n} # func_stripname may be replaced by extended shell implementation\n\n\n# These SED scripts presuppose an absolute path with a trailing slash.\npathcar='s,^/\\([^/]*\\).*$,\\1,'\npathcdr='s,^/[^/]*,,'\nremovedotparts=':dotsl\n\t\ts@/\\./@/@g\n\t\tt dotsl\n\t\ts,/\\.$,/,'\ncollapseslashes='s@/\\{1,\\}@/@g'\nfinalslash='s,/*$,/,'\n\n# func_normal_abspath PATH\n# Remove doubled-up and trailing slashes, \".\" path components,\n# and cancel out any \"..\" path components in PATH after making\n# it an absolute path.\n#             value returned in \"$func_normal_abspath_result\"\nfunc_normal_abspath ()\n{\n  # Start from root dir and reassemble the path.\n  func_normal_abspath_result=\n  func_normal_abspath_tpath=$1\n  func_normal_abspath_altnamespace=\n  case $func_normal_abspath_tpath in\n    \"\")\n      # Empty path, that just means $cwd.\n      func_stripname '' '/' \"`pwd`\"\n      func_normal_abspath_result=$func_stripname_result\n      return\n    ;;\n    # The next three entries are used to spot a run of precisely\n    # two leading slashes without using negated character classes;\n    # we take advantage of case's first-match behaviour.\n    ///*)\n      # Unusual form of absolute path, do nothing.\n    ;;\n    //*)\n      # Not necessarily an ordinary path; POSIX reserves leading '//'\n      # and for example Cygwin uses it to access remote file shares\n      # over CIFS/SMB, so we conserve a leading double slash if found.\n      func_normal_abspath_altnamespace=/\n    ;;\n    /*)\n      # Absolute path, do nothing.\n    ;;\n    *)\n      # Relative path, prepend $cwd.\n      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath\n    ;;\n  esac\n  # Cancel out all the simple stuff to save iterations.  We also want\n  # the path to end with a slash for ease of parsing, so make sure\n  # there is one (and only one) here.\n  func_normal_abspath_tpath=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$removedotparts\" -e \"$collapseslashes\" -e \"$finalslash\"`\n  while :; do\n    # Processed it all yet?\n    if test \"$func_normal_abspath_tpath\" = / ; then\n      # If we ascended to the root using \"..\" the result may be empty now.\n      if test -z \"$func_normal_abspath_result\" ; then\n        func_normal_abspath_result=/\n      fi\n      break\n    fi\n    func_normal_abspath_tcomponent=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$pathcar\"`\n    func_normal_abspath_tpath=`$ECHO \"$func_normal_abspath_tpath\" | $SED \\\n        -e \"$pathcdr\"`\n    # Figure out what to do with it\n    case $func_normal_abspath_tcomponent in\n      \"\")\n        # Trailing empty path component, ignore it.\n      ;;\n      ..)\n        # Parent dir; strip last assembled component from result.\n        func_dirname \"$func_normal_abspath_result\"\n        func_normal_abspath_result=$func_dirname_result\n      ;;\n      *)\n        # Actual path component, append it.\n        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent\n      ;;\n    esac\n  done\n  # Restore leading double-slash if one was found on entry.\n  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result\n}\n\n# func_relative_path SRCDIR DSTDIR\n# generates a relative path from SRCDIR to DSTDIR, with a trailing\n# slash if non-empty, suitable for immediately appending a filename\n# without needing to append a separator.\n#             value returned in \"$func_relative_path_result\"\nfunc_relative_path ()\n{\n  func_relative_path_result=\n  func_normal_abspath \"$1\"\n  func_relative_path_tlibdir=$func_normal_abspath_result\n  func_normal_abspath \"$2\"\n  func_relative_path_tbindir=$func_normal_abspath_result\n\n  # Ascend the tree starting from libdir\n  while :; do\n    # check if we have found a prefix of bindir\n    case $func_relative_path_tbindir in\n      $func_relative_path_tlibdir)\n        # found an exact match\n        func_relative_path_tcancelled=\n        break\n        ;;\n      $func_relative_path_tlibdir*)\n        # found a matching prefix\n        func_stripname \"$func_relative_path_tlibdir\" '' \"$func_relative_path_tbindir\"\n        func_relative_path_tcancelled=$func_stripname_result\n        if test -z \"$func_relative_path_result\"; then\n          func_relative_path_result=.\n        fi\n        break\n        ;;\n      *)\n        func_dirname $func_relative_path_tlibdir\n        func_relative_path_tlibdir=${func_dirname_result}\n        if test \"x$func_relative_path_tlibdir\" = x ; then\n          # Have to descend all the way to the root!\n          func_relative_path_result=../$func_relative_path_result\n          func_relative_path_tcancelled=$func_relative_path_tbindir\n          break\n        fi\n        func_relative_path_result=../$func_relative_path_result\n        ;;\n    esac\n  done\n\n  # Now calculate path; take care to avoid doubling-up slashes.\n  func_stripname '' '/' \"$func_relative_path_result\"\n  func_relative_path_result=$func_stripname_result\n  func_stripname '/' '/' \"$func_relative_path_tcancelled\"\n  if test \"x$func_stripname_result\" != x ; then\n    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}\n  fi\n\n  # Normalisation. If bindir is libdir, return empty string,\n  # else relative path ending with a slash; either way, target\n  # file name can be directly appended.\n  if test ! -z \"$func_relative_path_result\"; then\n    func_stripname './' '' \"$func_relative_path_result/\"\n    func_relative_path_result=$func_stripname_result\n  fi\n}\n\n# The name of this program:\nfunc_dirname_and_basename \"$progpath\"\nprogname=$func_basename_result\n\n# Make sure we have an absolute path for reexecution:\ncase $progpath in\n  [\\\\/]*|[A-Za-z]:\\\\*) ;;\n  *[\\\\/]*)\n     progdir=$func_dirname_result\n     progdir=`cd \"$progdir\" && pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\n  *)\n     save_IFS=\"$IFS\"\n     IFS=${PATH_SEPARATOR-:}\n     for progdir in $PATH; do\n       IFS=\"$save_IFS\"\n       test -x \"$progdir/$progname\" && break\n     done\n     IFS=\"$save_IFS\"\n     test -n \"$progdir\" || progdir=`pwd`\n     progpath=\"$progdir/$progname\"\n     ;;\nesac\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nXsed=\"${SED}\"' -e 1s/^X//'\nsed_quote_subst='s/\\([`\"$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution that turns a string into a regex matching for the\n# string literally.\nsed_make_literal_regex='s,[].[^$\\\\*\\/],\\\\&,g'\n\n# Sed substitution that converts a w32 file name or path\n# which contains forward slashes, into one that contains\n# (escaped) backslashes.  A very naive implementation.\nlt_sed_naive_backslashify='s|\\\\\\\\*|\\\\|g;s|/|\\\\|g;s|\\\\|\\\\\\\\|g'\n\n# Re-`\\' parameter expansions in output of double_quote_subst that were\n# `\\'-ed in input to the same.  If an odd number of `\\' preceded a '$'\n# in input to double_quote_subst, that '$' was protected from expansion.\n# Since each input `\\' is now two `\\'s, look for any number of runs of\n# four `\\'s followed by two `\\'s and then a '$'.  `\\' that '$'.\nbs='\\\\'\nbs2='\\\\\\\\'\nbs4='\\\\\\\\\\\\\\\\'\ndollar='\\$'\nsed_double_backslash=\"\\\n  s/$bs4/&\\\\\n/g\n  s/^$bs2$dollar/$bs&/\n  s/\\\\([^$bs]\\\\)$bs2$dollar/\\\\1$bs2$bs$dollar/g\n  s/\\n//g\"\n\n# Standard options:\nopt_dry_run=false\nopt_help=false\nopt_quiet=false\nopt_verbose=false\nopt_warning=:\n\n# func_echo arg...\n# Echo program name prefixed message, along with the current mode\n# name if it has been set yet.\nfunc_echo ()\n{\n    $ECHO \"$progname: ${opt_mode+$opt_mode: }$*\"\n}\n\n# func_verbose arg...\n# Echo program name prefixed message in verbose mode only.\nfunc_verbose ()\n{\n    $opt_verbose && func_echo ${1+\"$@\"}\n\n    # A bug in bash halts the script if the last line of a function\n    # fails when set -e is in force, so we need another command to\n    # work around that:\n    :\n}\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"$*\"\n}\n\n# func_error arg...\n# Echo program name prefixed message to standard error.\nfunc_error ()\n{\n    $ECHO \"$progname: ${opt_mode+$opt_mode: }\"${1+\"$@\"} 1>&2\n}\n\n# func_warning arg...\n# Echo program name prefixed warning message to standard error.\nfunc_warning ()\n{\n    $opt_warning && $ECHO \"$progname: ${opt_mode+$opt_mode: }warning: \"${1+\"$@\"} 1>&2\n\n    # bash bug again:\n    :\n}\n\n# func_fatal_error arg...\n# Echo program name prefixed message to standard error, and exit.\nfunc_fatal_error ()\n{\n    func_error ${1+\"$@\"}\n    exit $EXIT_FAILURE\n}\n\n# func_fatal_help arg...\n# Echo program name prefixed message to standard error, followed by\n# a help hint, and exit.\nfunc_fatal_help ()\n{\n    func_error ${1+\"$@\"}\n    func_fatal_error \"$help\"\n}\nhelp=\"Try \\`$progname --help' for more information.\"  ## default\n\n\n# func_grep expression filename\n# Check whether EXPRESSION matches any line of FILENAME, without output.\nfunc_grep ()\n{\n    $GREP \"$1\" \"$2\" >/dev/null 2>&1\n}\n\n\n# func_mkdir_p directory-path\n# Make sure the entire path to DIRECTORY-PATH is available.\nfunc_mkdir_p ()\n{\n    my_directory_path=\"$1\"\n    my_dir_list=\n\n    if test -n \"$my_directory_path\" && test \"$opt_dry_run\" != \":\"; then\n\n      # Protect directory names starting with `-'\n      case $my_directory_path in\n        -*) my_directory_path=\"./$my_directory_path\" ;;\n      esac\n\n      # While some portion of DIR does not yet exist...\n      while test ! -d \"$my_directory_path\"; do\n        # ...make a list in topmost first order.  Use a colon delimited\n\t# list incase some portion of path contains whitespace.\n        my_dir_list=\"$my_directory_path:$my_dir_list\"\n\n        # If the last portion added has no slash in it, the list is done\n        case $my_directory_path in */*) ;; *) break ;; esac\n\n        # ...otherwise throw away the child directory and loop\n        my_directory_path=`$ECHO \"$my_directory_path\" | $SED -e \"$dirname\"`\n      done\n      my_dir_list=`$ECHO \"$my_dir_list\" | $SED 's,:*$,,'`\n\n      save_mkdir_p_IFS=\"$IFS\"; IFS=':'\n      for my_dir in $my_dir_list; do\n\tIFS=\"$save_mkdir_p_IFS\"\n        # mkdir can fail with a `File exist' error if two processes\n        # try to create one of the directories concurrently.  Don't\n        # stop in that case!\n        $MKDIR \"$my_dir\" 2>/dev/null || :\n      done\n      IFS=\"$save_mkdir_p_IFS\"\n\n      # Bail out if we (or some other process) failed to create a directory.\n      test -d \"$my_directory_path\" || \\\n        func_fatal_error \"Failed to create \\`$1'\"\n    fi\n}\n\n\n# func_mktempdir [string]\n# Make a temporary directory that won't clash with other running\n# libtool processes, and avoids race conditions if possible.  If\n# given, STRING is the basename for that directory.\nfunc_mktempdir ()\n{\n    my_template=\"${TMPDIR-/tmp}/${1-$progname}\"\n\n    if test \"$opt_dry_run\" = \":\"; then\n      # Return a directory name, but don't create it in dry-run mode\n      my_tmpdir=\"${my_template}-$$\"\n    else\n\n      # If mktemp works, use that first and foremost\n      my_tmpdir=`mktemp -d \"${my_template}-XXXXXXXX\" 2>/dev/null`\n\n      if test ! -d \"$my_tmpdir\"; then\n        # Failing that, at least try and use $RANDOM to avoid a race\n        my_tmpdir=\"${my_template}-${RANDOM-0}$$\"\n\n        save_mktempdir_umask=`umask`\n        umask 0077\n        $MKDIR \"$my_tmpdir\"\n        umask $save_mktempdir_umask\n      fi\n\n      # If we're not in dry-run mode, bomb out on failure\n      test -d \"$my_tmpdir\" || \\\n        func_fatal_error \"cannot create temporary directory \\`$my_tmpdir'\"\n    fi\n\n    $ECHO \"$my_tmpdir\"\n}\n\n\n# func_quote_for_eval arg\n# Aesthetically quote ARG to be evaled later.\n# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT\n# is double-quoted, suitable for a subsequent eval, whereas\n# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters\n# which are still active within double quotes backslashified.\nfunc_quote_for_eval ()\n{\n    case $1 in\n      *[\\\\\\`\\\"\\$]*)\n\tfunc_quote_for_eval_unquoted_result=`$ECHO \"$1\" | $SED \"$sed_quote_subst\"` ;;\n      *)\n        func_quote_for_eval_unquoted_result=\"$1\" ;;\n    esac\n\n    case $func_quote_for_eval_unquoted_result in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting, command substitution and and variable\n      # expansion for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        func_quote_for_eval_result=\"\\\"$func_quote_for_eval_unquoted_result\\\"\"\n        ;;\n      *)\n        func_quote_for_eval_result=\"$func_quote_for_eval_unquoted_result\"\n    esac\n}\n\n\n# func_quote_for_expand arg\n# Aesthetically quote ARG to be evaled later; same as above,\n# but do not quote variable references.\nfunc_quote_for_expand ()\n{\n    case $1 in\n      *[\\\\\\`\\\"]*)\n\tmy_arg=`$ECHO \"$1\" | $SED \\\n\t    -e \"$double_quote_subst\" -e \"$sed_double_backslash\"` ;;\n      *)\n        my_arg=\"$1\" ;;\n    esac\n\n    case $my_arg in\n      # Double-quote args containing shell metacharacters to delay\n      # word splitting and command substitution for a subsequent eval.\n      # Many Bourne shells cannot handle close brackets correctly\n      # in scan sets, so we specify it separately.\n      *[\\[\\~\\#\\^\\&\\*\\(\\)\\{\\}\\|\\;\\<\\>\\?\\'\\ \\\t]*|*]*|\"\")\n        my_arg=\"\\\"$my_arg\\\"\"\n        ;;\n    esac\n\n    func_quote_for_expand_result=\"$my_arg\"\n}\n\n\n# func_show_eval cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.\nfunc_show_eval ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$my_cmd\"\n      my_status=$?\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n\n# func_show_eval_locale cmd [fail_exp]\n# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is\n# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP\n# is given, then evaluate it.  Use the saved locale for evaluation.\nfunc_show_eval_locale ()\n{\n    my_cmd=\"$1\"\n    my_fail_exp=\"${2-:}\"\n\n    ${opt_silent-false} || {\n      func_quote_for_expand \"$my_cmd\"\n      eval \"func_echo $func_quote_for_expand_result\"\n    }\n\n    if ${opt_dry_run-false}; then :; else\n      eval \"$lt_user_locale\n\t    $my_cmd\"\n      my_status=$?\n      eval \"$lt_safe_locale\"\n      if test \"$my_status\" -eq 0; then :; else\n\teval \"(exit $my_status); $my_fail_exp\"\n      fi\n    fi\n}\n\n# func_tr_sh\n# Turn $1 into a string suitable for a shell variable name.\n# Result is stored in $func_tr_sh_result.  All characters\n# not in the set a-zA-Z0-9_ are replaced with '_'. Further,\n# if $1 begins with a digit, a '_' is prepended as well.\nfunc_tr_sh ()\n{\n  case $1 in\n  [0-9]* | *[!a-zA-Z0-9_]*)\n    func_tr_sh_result=`$ECHO \"$1\" | $SED 's/^\\([0-9]\\)/_\\1/; s/[^a-zA-Z0-9_]/_/g'`\n    ;;\n  * )\n    func_tr_sh_result=$1\n    ;;\n  esac\n}\n\n\n# func_version\n# Echo version message to standard output and exit.\nfunc_version ()\n{\n    $opt_debug\n\n    $SED -n '/(C)/!b go\n\t:more\n\t/\\./!{\n\t  N\n\t  s/\\n# / /\n\t  b more\n\t}\n\t:go\n\t/^# '$PROGRAM' (GNU /,/# warranty; / {\n        s/^# //\n\ts/^# *$//\n        s/\\((C)\\)[ 0-9,-]*\\( [1-9][0-9]*\\)/\\1\\2/\n        p\n     }' < \"$progpath\"\n     exit $?\n}\n\n# func_usage\n# Echo short help message to standard output and exit.\nfunc_usage ()\n{\n    $opt_debug\n\n    $SED -n '/^# Usage:/,/^#  *.*--help/ {\n        s/^# //\n\ts/^# *$//\n\ts/\\$progname/'$progname'/\n\tp\n    }' < \"$progpath\"\n    echo\n    $ECHO \"run \\`$progname --help | more' for full usage\"\n    exit $?\n}\n\n# func_help [NOEXIT]\n# Echo long help message to standard output and exit,\n# unless 'noexit' is passed as argument.\nfunc_help ()\n{\n    $opt_debug\n\n    $SED -n '/^# Usage:/,/# Report bugs to/ {\n\t:print\n        s/^# //\n\ts/^# *$//\n\ts*\\$progname*'$progname'*\n\ts*\\$host*'\"$host\"'*\n\ts*\\$SHELL*'\"$SHELL\"'*\n\ts*\\$LTCC*'\"$LTCC\"'*\n\ts*\\$LTCFLAGS*'\"$LTCFLAGS\"'*\n\ts*\\$LD*'\"$LD\"'*\n\ts/\\$with_gnu_ld/'\"$with_gnu_ld\"'/\n\ts/\\$automake_version/'\"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`\"'/\n\ts/\\$autoconf_version/'\"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`\"'/\n\tp\n\td\n     }\n     /^# .* home page:/b print\n     /^# General help using/b print\n     ' < \"$progpath\"\n    ret=$?\n    if test -z \"$1\"; then\n      exit $ret\n    fi\n}\n\n# func_missing_arg argname\n# Echo program name prefixed message to standard error and set global\n# exit_cmd.\nfunc_missing_arg ()\n{\n    $opt_debug\n\n    func_error \"missing argument for $1.\"\n    exit_cmd=exit\n}\n\n\n# func_split_short_opt shortopt\n# Set func_split_short_opt_name and func_split_short_opt_arg shell\n# variables after splitting SHORTOPT after the 2nd character.\nfunc_split_short_opt ()\n{\n    my_sed_short_opt='1s/^\\(..\\).*$/\\1/;q'\n    my_sed_short_rest='1s/^..\\(.*\\)$/\\1/;q'\n\n    func_split_short_opt_name=`$ECHO \"$1\" | $SED \"$my_sed_short_opt\"`\n    func_split_short_opt_arg=`$ECHO \"$1\" | $SED \"$my_sed_short_rest\"`\n} # func_split_short_opt may be replaced by extended shell implementation\n\n\n# func_split_long_opt longopt\n# Set func_split_long_opt_name and func_split_long_opt_arg shell\n# variables after splitting LONGOPT at the `=' sign.\nfunc_split_long_opt ()\n{\n    my_sed_long_opt='1s/^\\(--[^=]*\\)=.*/\\1/;q'\n    my_sed_long_arg='1s/^--[^=]*=//'\n\n    func_split_long_opt_name=`$ECHO \"$1\" | $SED \"$my_sed_long_opt\"`\n    func_split_long_opt_arg=`$ECHO \"$1\" | $SED \"$my_sed_long_arg\"`\n} # func_split_long_opt may be replaced by extended shell implementation\n\nexit_cmd=:\n\n\n\n\n\nmagic=\"%%%MAGIC variable%%%\"\nmagic_exe=\"%%%MAGIC EXE variable%%%\"\n\n# Global variables.\nnonopt=\npreserve_args=\nlo2o=\"s/\\\\.lo\\$/.${objext}/\"\no2lo=\"s/\\\\.${objext}\\$/.lo/\"\nextracted_archives=\nextracted_serial=0\n\n# If this variable is set in any of the actions, the command in it\n# will be execed at the end.  This prevents here-documents from being\n# left over by shells.\nexec_cmd=\n\n# func_append var value\n# Append VALUE to the end of shell variable VAR.\nfunc_append ()\n{\n    eval \"${1}=\\$${1}\\${2}\"\n} # func_append may be replaced by extended shell implementation\n\n# func_append_quoted var value\n# Quote VALUE and append to the end of shell variable VAR, separated\n# by a space.\nfunc_append_quoted ()\n{\n    func_quote_for_eval \"${2}\"\n    eval \"${1}=\\$${1}\\\\ \\$func_quote_for_eval_result\"\n} # func_append_quoted may be replaced by extended shell implementation\n\n\n# func_arith arithmetic-term...\nfunc_arith ()\n{\n    func_arith_result=`expr \"${@}\"`\n} # func_arith may be replaced by extended shell implementation\n\n\n# func_len string\n# STRING may not start with a hyphen.\nfunc_len ()\n{\n    func_len_result=`expr \"${1}\" : \".*\" 2>/dev/null || echo $max_cmd_len`\n} # func_len may be replaced by extended shell implementation\n\n\n# func_lo2o object\nfunc_lo2o ()\n{\n    func_lo2o_result=`$ECHO \"${1}\" | $SED \"$lo2o\"`\n} # func_lo2o may be replaced by extended shell implementation\n\n\n# func_xform libobj-or-source\nfunc_xform ()\n{\n    func_xform_result=`$ECHO \"${1}\" | $SED 's/\\.[^.]*$/.lo/'`\n} # func_xform may be replaced by extended shell implementation\n\n\n# func_fatal_configuration arg...\n# Echo program name prefixed message to standard error, followed by\n# a configuration failure hint, and exit.\nfunc_fatal_configuration ()\n{\n    func_error ${1+\"$@\"}\n    func_error \"See the $PACKAGE documentation for more information.\"\n    func_fatal_error \"Fatal configuration error.\"\n}\n\n\n# func_config\n# Display the configuration for all the tags in this script.\nfunc_config ()\n{\n    re_begincf='^# ### BEGIN LIBTOOL'\n    re_endcf='^# ### END LIBTOOL'\n\n    # Default configuration.\n    $SED \"1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\\$d\" < \"$progpath\"\n\n    # Now print the configurations for the tags.\n    for tagname in $taglist; do\n      $SED -n \"/$re_begincf TAG CONFIG: $tagname\\$/,/$re_endcf TAG CONFIG: $tagname\\$/p\" < \"$progpath\"\n    done\n\n    exit $?\n}\n\n# func_features\n# Display the features supported by this script.\nfunc_features ()\n{\n    echo \"host: $host\"\n    if test \"$build_libtool_libs\" = yes; then\n      echo \"enable shared libraries\"\n    else\n      echo \"disable shared libraries\"\n    fi\n    if test \"$build_old_libs\" = yes; then\n      echo \"enable static libraries\"\n    else\n      echo \"disable static libraries\"\n    fi\n\n    exit $?\n}\n\n# func_enable_tag tagname\n# Verify that TAGNAME is valid, and either flag an error and exit, or\n# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist\n# variable here.\nfunc_enable_tag ()\n{\n  # Global variable:\n  tagname=\"$1\"\n\n  re_begincf=\"^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\\$\"\n  re_endcf=\"^# ### END LIBTOOL TAG CONFIG: $tagname\\$\"\n  sed_extractcf=\"/$re_begincf/,/$re_endcf/p\"\n\n  # Validate tagname.\n  case $tagname in\n    *[!-_A-Za-z0-9,/]*)\n      func_fatal_error \"invalid tag name: $tagname\"\n      ;;\n  esac\n\n  # Don't test for the \"default\" C tag, as we know it's\n  # there but not specially marked.\n  case $tagname in\n    CC) ;;\n    *)\n      if $GREP \"$re_begincf\" \"$progpath\" >/dev/null 2>&1; then\n\ttaglist=\"$taglist $tagname\"\n\n\t# Evaluate the configuration.  Be careful to quote the path\n\t# and the sed script, to avoid splitting on whitespace, but\n\t# also don't use non-portable quotes within backquotes within\n\t# quotes we have to do it in 2 steps:\n\textractedcf=`$SED -n -e \"$sed_extractcf\" < \"$progpath\"`\n\teval \"$extractedcf\"\n      else\n\tfunc_error \"ignoring unknown tag $tagname\"\n      fi\n      ;;\n  esac\n}\n\n# func_check_version_match\n# Ensure that we are using m4 macros, and libtool script from the same\n# release of libtool.\nfunc_check_version_match ()\n{\n  if test \"$package_revision\" != \"$macro_revision\"; then\n    if test \"$VERSION\" != \"$macro_version\"; then\n      if test -z \"$macro_version\"; then\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from an older release.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      else\n        cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the\n$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.\n$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION\n$progname: and run autoconf again.\n_LT_EOF\n      fi\n    else\n      cat >&2 <<_LT_EOF\n$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,\n$progname: but the definition of this LT_INIT comes from revision $macro_revision.\n$progname: You should recreate aclocal.m4 with macros from revision $package_revision\n$progname: of $PACKAGE $VERSION and run autoconf again.\n_LT_EOF\n    fi\n\n    exit $EXIT_MISMATCH\n  fi\n}\n\n\n# Shorthand for --mode=foo, only valid as the first argument\ncase $1 in\nclean|clea|cle|cl)\n  shift; set dummy --mode clean ${1+\"$@\"}; shift\n  ;;\ncompile|compil|compi|comp|com|co|c)\n  shift; set dummy --mode compile ${1+\"$@\"}; shift\n  ;;\nexecute|execut|execu|exec|exe|ex|e)\n  shift; set dummy --mode execute ${1+\"$@\"}; shift\n  ;;\nfinish|finis|fini|fin|fi|f)\n  shift; set dummy --mode finish ${1+\"$@\"}; shift\n  ;;\ninstall|instal|insta|inst|ins|in|i)\n  shift; set dummy --mode install ${1+\"$@\"}; shift\n  ;;\nlink|lin|li|l)\n  shift; set dummy --mode link ${1+\"$@\"}; shift\n  ;;\nuninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)\n  shift; set dummy --mode uninstall ${1+\"$@\"}; shift\n  ;;\nesac\n\n\n\n# Option defaults:\nopt_debug=:\nopt_dry_run=false\nopt_config=false\nopt_preserve_dup_deps=false\nopt_features=false\nopt_finish=false\nopt_help=false\nopt_help_all=false\nopt_silent=:\nopt_warning=:\nopt_verbose=:\nopt_silent=false\nopt_verbose=false\n\n\n# Parse options once, thoroughly.  This comes as soon as possible in the\n# script to make things like `--version' happen as quickly as we can.\n{\n  # this just eases exit handling\n  while test $# -gt 0; do\n    opt=\"$1\"\n    shift\n    case $opt in\n      --debug|-x)\topt_debug='set -x'\n\t\t\tfunc_echo \"enabling shell trace mode\"\n\t\t\t$opt_debug\n\t\t\t;;\n      --dry-run|--dryrun|-n)\n\t\t\topt_dry_run=:\n\t\t\t;;\n      --config)\n\t\t\topt_config=:\nfunc_config\n\t\t\t;;\n      --dlopen|-dlopen)\n\t\t\toptarg=\"$1\"\n\t\t\topt_dlopen=\"${opt_dlopen+$opt_dlopen\n}$optarg\"\n\t\t\tshift\n\t\t\t;;\n      --preserve-dup-deps)\n\t\t\topt_preserve_dup_deps=:\n\t\t\t;;\n      --features)\n\t\t\topt_features=:\nfunc_features\n\t\t\t;;\n      --finish)\n\t\t\topt_finish=:\nset dummy --mode finish ${1+\"$@\"}; shift\n\t\t\t;;\n      --help)\n\t\t\topt_help=:\n\t\t\t;;\n      --help-all)\n\t\t\topt_help_all=:\nopt_help=': help-all'\n\t\t\t;;\n      --mode)\n\t\t\ttest $# = 0 && func_missing_arg $opt && break\n\t\t\toptarg=\"$1\"\n\t\t\topt_mode=\"$optarg\"\ncase $optarg in\n  # Valid mode arguments:\n  clean|compile|execute|finish|install|link|relink|uninstall) ;;\n\n  # Catch anything else as an error\n  *) func_error \"invalid argument for $opt\"\n     exit_cmd=exit\n     break\n     ;;\nesac\n\t\t\tshift\n\t\t\t;;\n      --no-silent|--no-quiet)\n\t\t\topt_silent=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --no-warning|--no-warn)\n\t\t\topt_warning=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --no-verbose)\n\t\t\topt_verbose=false\nfunc_append preserve_args \" $opt\"\n\t\t\t;;\n      --silent|--quiet)\n\t\t\topt_silent=:\nfunc_append preserve_args \" $opt\"\n        opt_verbose=false\n\t\t\t;;\n      --verbose|-v)\n\t\t\topt_verbose=:\nfunc_append preserve_args \" $opt\"\nopt_silent=false\n\t\t\t;;\n      --tag)\n\t\t\ttest $# = 0 && func_missing_arg $opt && break\n\t\t\toptarg=\"$1\"\n\t\t\topt_tag=\"$optarg\"\nfunc_append preserve_args \" $opt $optarg\"\nfunc_enable_tag \"$optarg\"\n\t\t\tshift\n\t\t\t;;\n\n      -\\?|-h)\t\tfunc_usage\t\t\t\t;;\n      --help)\t\tfunc_help\t\t\t\t;;\n      --version)\tfunc_version\t\t\t\t;;\n\n      # Separate optargs to long options:\n      --*=*)\n\t\t\tfunc_split_long_opt \"$opt\"\n\t\t\tset dummy \"$func_split_long_opt_name\" \"$func_split_long_opt_arg\" ${1+\"$@\"}\n\t\t\tshift\n\t\t\t;;\n\n      # Separate non-argument short options:\n      -\\?*|-h*|-n*|-v*)\n\t\t\tfunc_split_short_opt \"$opt\"\n\t\t\tset dummy \"$func_split_short_opt_name\" \"-$func_split_short_opt_arg\" ${1+\"$@\"}\n\t\t\tshift\n\t\t\t;;\n\n      --)\t\tbreak\t\t\t\t\t;;\n      -*)\t\tfunc_fatal_help \"unrecognized option \\`$opt'\" ;;\n      *)\t\tset dummy \"$opt\" ${1+\"$@\"};\tshift; break  ;;\n    esac\n  done\n\n  # Validate options:\n\n  # save first non-option argument\n  if test \"$#\" -gt 0; then\n    nonopt=\"$opt\"\n    shift\n  fi\n\n  # preserve --debug\n  test \"$opt_debug\" = : || func_append preserve_args \" --debug\"\n\n  case $host in\n    *cygwin* | *mingw* | *pw32* | *cegcc*)\n      # don't eliminate duplications in $postdeps and $predeps\n      opt_duplicate_compiler_generated_deps=:\n      ;;\n    *)\n      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps\n      ;;\n  esac\n\n  $opt_help || {\n    # Sanity checks first:\n    func_check_version_match\n\n    if test \"$build_libtool_libs\" != yes && test \"$build_old_libs\" != yes; then\n      func_fatal_configuration \"not configured to build any kind of library\"\n    fi\n\n    # Darwin sucks\n    eval std_shrext=\\\"$shrext_cmds\\\"\n\n    # Only execute mode is allowed to have -dlopen flags.\n    if test -n \"$opt_dlopen\" && test \"$opt_mode\" != execute; then\n      func_error \"unrecognized option \\`-dlopen'\"\n      $ECHO \"$help\" 1>&2\n      exit $EXIT_FAILURE\n    fi\n\n    # Change the help message to a mode-specific one.\n    generic_help=\"$help\"\n    help=\"Try \\`$progname --help --mode=$opt_mode' for more information.\"\n  }\n\n\n  # Bail if the options were screwed\n  $exit_cmd $EXIT_FAILURE\n}\n\n\n\n\n## ----------- ##\n##    Main.    ##\n## ----------- ##\n\n# func_lalib_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_lalib_p ()\n{\n    test -f \"$1\" &&\n      $SED -e 4q \"$1\" 2>/dev/null \\\n        | $GREP \"^# Generated by .*$PACKAGE\" > /dev/null 2>&1\n}\n\n# func_lalib_unsafe_p file\n# True iff FILE is a libtool `.la' library or `.lo' object file.\n# This function implements the same check as func_lalib_p without\n# resorting to external programs.  To this end, it redirects stdin and\n# closes it afterwards, without saving the original file descriptor.\n# As a safety measure, use it only where a negative result would be\n# fatal anyway.  Works if `file' does not exist.\nfunc_lalib_unsafe_p ()\n{\n    lalib_p=no\n    if test -f \"$1\" && test -r \"$1\" && exec 5<&0 <\"$1\"; then\n\tfor lalib_p_l in 1 2 3 4\n\tdo\n\t    read lalib_p_line\n\t    case \"$lalib_p_line\" in\n\t\t\\#\\ Generated\\ by\\ *$PACKAGE* ) lalib_p=yes; break;;\n\t    esac\n\tdone\n\texec 0<&5 5<&-\n    fi\n    test \"$lalib_p\" = yes\n}\n\n# func_ltwrapper_script_p file\n# True iff FILE is a libtool wrapper script\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_script_p ()\n{\n    func_lalib_p \"$1\"\n}\n\n# func_ltwrapper_executable_p file\n# True iff FILE is a libtool wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_executable_p ()\n{\n    func_ltwrapper_exec_suffix=\n    case $1 in\n    *.exe) ;;\n    *) func_ltwrapper_exec_suffix=.exe ;;\n    esac\n    $GREP \"$magic_exe\" \"$1$func_ltwrapper_exec_suffix\" >/dev/null 2>&1\n}\n\n# func_ltwrapper_scriptname file\n# Assumes file is an ltwrapper_executable\n# uses $file to determine the appropriate filename for a\n# temporary ltwrapper_script.\nfunc_ltwrapper_scriptname ()\n{\n    func_dirname_and_basename \"$1\" \"\" \".\"\n    func_stripname '' '.exe' \"$func_basename_result\"\n    func_ltwrapper_scriptname_result=\"$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper\"\n}\n\n# func_ltwrapper_p file\n# True iff FILE is a libtool wrapper script or wrapper executable\n# This function is only a basic sanity check; it will hardly flush out\n# determined imposters.\nfunc_ltwrapper_p ()\n{\n    func_ltwrapper_script_p \"$1\" || func_ltwrapper_executable_p \"$1\"\n}\n\n\n# func_execute_cmds commands fail_cmd\n# Execute tilde-delimited COMMANDS.\n# If FAIL_CMD is given, eval that upon failure.\n# FAIL_CMD may read-access the current command in variable CMD!\nfunc_execute_cmds ()\n{\n    $opt_debug\n    save_ifs=$IFS; IFS='~'\n    for cmd in $1; do\n      IFS=$save_ifs\n      eval cmd=\\\"$cmd\\\"\n      func_show_eval \"$cmd\" \"${2-:}\"\n    done\n    IFS=$save_ifs\n}\n\n\n# func_source file\n# Source FILE, adding directory component if necessary.\n# Note that it is not necessary on cygwin/mingw to append a dot to\n# FILE even if both FILE and FILE.exe exist: automatic-append-.exe\n# behavior happens only for exec(3), not for open(2)!  Also, sourcing\n# `FILE.' does not work on cygwin managed mounts.\nfunc_source ()\n{\n    $opt_debug\n    case $1 in\n    */* | *\\\\*)\t. \"$1\" ;;\n    *)\t\t. \"./$1\" ;;\n    esac\n}\n\n\n# func_resolve_sysroot PATH\n# Replace a leading = in PATH with a sysroot.  Store the result into\n# func_resolve_sysroot_result\nfunc_resolve_sysroot ()\n{\n  func_resolve_sysroot_result=$1\n  case $func_resolve_sysroot_result in\n  =*)\n    func_stripname '=' '' \"$func_resolve_sysroot_result\"\n    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result\n    ;;\n  esac\n}\n\n# func_replace_sysroot PATH\n# If PATH begins with the sysroot, replace it with = and\n# store the result into func_replace_sysroot_result.\nfunc_replace_sysroot ()\n{\n  case \"$lt_sysroot:$1\" in\n  ?*:\"$lt_sysroot\"*)\n    func_stripname \"$lt_sysroot\" '' \"$1\"\n    func_replace_sysroot_result=\"=$func_stripname_result\"\n    ;;\n  *)\n    # Including no sysroot.\n    func_replace_sysroot_result=$1\n    ;;\n  esac\n}\n\n# func_infer_tag arg\n# Infer tagged configuration to use if any are available and\n# if one wasn't chosen via the \"--tag\" command line option.\n# Only attempt this if the compiler in the base compile\n# command doesn't match the default compiler.\n# arg is usually of the form 'gcc ...'\nfunc_infer_tag ()\n{\n    $opt_debug\n    if test -n \"$available_tags\" && test -z \"$tagname\"; then\n      CC_quoted=\n      for arg in $CC; do\n\tfunc_append_quoted CC_quoted \"$arg\"\n      done\n      CC_expanded=`func_echo_all $CC`\n      CC_quoted_expanded=`func_echo_all $CC_quoted`\n      case $@ in\n      # Blanks in the command may have been stripped by the calling shell,\n      # but not from the CC environment variable when configure was run.\n      \" $CC \"* | \"$CC \"* | \" $CC_expanded \"* | \"$CC_expanded \"* | \\\n      \" $CC_quoted\"* | \"$CC_quoted \"* | \" $CC_quoted_expanded \"* | \"$CC_quoted_expanded \"*) ;;\n      # Blanks at the start of $base_compile will cause this to fail\n      # if we don't check for them as well.\n      *)\n\tfor z in $available_tags; do\n\t  if $GREP \"^# ### BEGIN LIBTOOL TAG CONFIG: $z$\" < \"$progpath\" > /dev/null; then\n\t    # Evaluate the configuration.\n\t    eval \"`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`\"\n\t    CC_quoted=\n\t    for arg in $CC; do\n\t      # Double-quote args containing other shell metacharacters.\n\t      func_append_quoted CC_quoted \"$arg\"\n\t    done\n\t    CC_expanded=`func_echo_all $CC`\n\t    CC_quoted_expanded=`func_echo_all $CC_quoted`\n\t    case \"$@ \" in\n\t    \" $CC \"* | \"$CC \"* | \" $CC_expanded \"* | \"$CC_expanded \"* | \\\n\t    \" $CC_quoted\"* | \"$CC_quoted \"* | \" $CC_quoted_expanded \"* | \"$CC_quoted_expanded \"*)\n\t      # The compiler in the base compile command matches\n\t      # the one in the tagged configuration.\n\t      # Assume this is the tagged configuration we want.\n\t      tagname=$z\n\t      break\n\t      ;;\n\t    esac\n\t  fi\n\tdone\n\t# If $tagname still isn't set, then no tagged configuration\n\t# was found and let the user know that the \"--tag\" command\n\t# line option must be used.\n\tif test -z \"$tagname\"; then\n\t  func_echo \"unable to infer tagged configuration\"\n\t  func_fatal_error \"specify a tag with \\`--tag'\"\n#\telse\n#\t  func_verbose \"using $tagname tagged configuration\"\n\tfi\n\t;;\n      esac\n    fi\n}\n\n\n\n# func_write_libtool_object output_name pic_name nonpic_name\n# Create a libtool object file (analogous to a \".la\" file),\n# but don't create it if we're doing a dry run.\nfunc_write_libtool_object ()\n{\n    write_libobj=${1}\n    if test \"$build_libtool_libs\" = yes; then\n      write_lobj=\\'${2}\\'\n    else\n      write_lobj=none\n    fi\n\n    if test \"$build_old_libs\" = yes; then\n      write_oldobj=\\'${3}\\'\n    else\n      write_oldobj=none\n    fi\n\n    $opt_dry_run || {\n      cat >${write_libobj}T <<EOF\n# $write_libobj - a libtool object file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# Name of the PIC object.\npic_object=$write_lobj\n\n# Name of the non-PIC object\nnon_pic_object=$write_oldobj\n\nEOF\n      $MV \"${write_libobj}T\" \"${write_libobj}\"\n    }\n}\n\n\n##################################################\n# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #\n##################################################\n\n# func_convert_core_file_wine_to_w32 ARG\n# Helper function used by file name conversion functions when $build is *nix,\n# and $host is mingw, cygwin, or some other w32 environment. Relies on a\n# correctly configured wine environment available, with the winepath program\n# in $build's $PATH.\n#\n# ARG is the $build file name to be converted to w32 format.\n# Result is available in $func_convert_core_file_wine_to_w32_result, and will\n# be empty on error (or when ARG is empty)\nfunc_convert_core_file_wine_to_w32 ()\n{\n  $opt_debug\n  func_convert_core_file_wine_to_w32_result=\"$1\"\n  if test -n \"$1\"; then\n    # Unfortunately, winepath does not exit with a non-zero error code, so we\n    # are forced to check the contents of stdout. On the other hand, if the\n    # command is not found, the shell will set an exit code of 127 and print\n    # *an error message* to stdout. So we must check for both error code of\n    # zero AND non-empty stdout, which explains the odd construction:\n    func_convert_core_file_wine_to_w32_tmp=`winepath -w \"$1\" 2>/dev/null`\n    if test \"$?\" -eq 0 && test -n \"${func_convert_core_file_wine_to_w32_tmp}\"; then\n      func_convert_core_file_wine_to_w32_result=`$ECHO \"$func_convert_core_file_wine_to_w32_tmp\" |\n        $SED -e \"$lt_sed_naive_backslashify\"`\n    else\n      func_convert_core_file_wine_to_w32_result=\n    fi\n  fi\n}\n# end: func_convert_core_file_wine_to_w32\n\n\n# func_convert_core_path_wine_to_w32 ARG\n# Helper function used by path conversion functions when $build is *nix, and\n# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly\n# configured wine environment available, with the winepath program in $build's\n# $PATH. Assumes ARG has no leading or trailing path separator characters.\n#\n# ARG is path to be converted from $build format to win32.\n# Result is available in $func_convert_core_path_wine_to_w32_result.\n# Unconvertible file (directory) names in ARG are skipped; if no directory names\n# are convertible, then the result may be empty.\nfunc_convert_core_path_wine_to_w32 ()\n{\n  $opt_debug\n  # unfortunately, winepath doesn't convert paths, only file names\n  func_convert_core_path_wine_to_w32_result=\"\"\n  if test -n \"$1\"; then\n    oldIFS=$IFS\n    IFS=:\n    for func_convert_core_path_wine_to_w32_f in $1; do\n      IFS=$oldIFS\n      func_convert_core_file_wine_to_w32 \"$func_convert_core_path_wine_to_w32_f\"\n      if test -n \"$func_convert_core_file_wine_to_w32_result\" ; then\n        if test -z \"$func_convert_core_path_wine_to_w32_result\"; then\n          func_convert_core_path_wine_to_w32_result=\"$func_convert_core_file_wine_to_w32_result\"\n        else\n          func_append func_convert_core_path_wine_to_w32_result \";$func_convert_core_file_wine_to_w32_result\"\n        fi\n      fi\n    done\n    IFS=$oldIFS\n  fi\n}\n# end: func_convert_core_path_wine_to_w32\n\n\n# func_cygpath ARGS...\n# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when\n# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)\n# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or\n# (2), returns the Cygwin file name or path in func_cygpath_result (input\n# file name or path is assumed to be in w32 format, as previously converted\n# from $build's *nix or MSYS format). In case (3), returns the w32 file name\n# or path in func_cygpath_result (input file name or path is assumed to be in\n# Cygwin format). Returns an empty string on error.\n#\n# ARGS are passed to cygpath, with the last one being the file name or path to\n# be converted.\n#\n# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH\n# environment variable; do not put it in $PATH.\nfunc_cygpath ()\n{\n  $opt_debug\n  if test -n \"$LT_CYGPATH\" && test -f \"$LT_CYGPATH\"; then\n    func_cygpath_result=`$LT_CYGPATH \"$@\" 2>/dev/null`\n    if test \"$?\" -ne 0; then\n      # on failure, ensure result is empty\n      func_cygpath_result=\n    fi\n  else\n    func_cygpath_result=\n    func_error \"LT_CYGPATH is empty or specifies non-existent file: \\`$LT_CYGPATH'\"\n  fi\n}\n#end: func_cygpath\n\n\n# func_convert_core_msys_to_w32 ARG\n# Convert file name or path ARG from MSYS format to w32 format.  Return\n# result in func_convert_core_msys_to_w32_result.\nfunc_convert_core_msys_to_w32 ()\n{\n  $opt_debug\n  # awkward: cmd appends spaces to result\n  func_convert_core_msys_to_w32_result=`( cmd //c echo \"$1\" ) 2>/dev/null |\n    $SED -e 's/[ ]*$//' -e \"$lt_sed_naive_backslashify\"`\n}\n#end: func_convert_core_msys_to_w32\n\n\n# func_convert_file_check ARG1 ARG2\n# Verify that ARG1 (a file name in $build format) was converted to $host\n# format in ARG2. Otherwise, emit an error message, but continue (resetting\n# func_to_host_file_result to ARG1).\nfunc_convert_file_check ()\n{\n  $opt_debug\n  if test -z \"$2\" && test -n \"$1\" ; then\n    func_error \"Could not determine host file name corresponding to\"\n    func_error \"  \\`$1'\"\n    func_error \"Continuing, but uninstalled executables may not work.\"\n    # Fallback:\n    func_to_host_file_result=\"$1\"\n  fi\n}\n# end func_convert_file_check\n\n\n# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH\n# Verify that FROM_PATH (a path in $build format) was converted to $host\n# format in TO_PATH. Otherwise, emit an error message, but continue, resetting\n# func_to_host_file_result to a simplistic fallback value (see below).\nfunc_convert_path_check ()\n{\n  $opt_debug\n  if test -z \"$4\" && test -n \"$3\"; then\n    func_error \"Could not determine the host path corresponding to\"\n    func_error \"  \\`$3'\"\n    func_error \"Continuing, but uninstalled executables may not work.\"\n    # Fallback.  This is a deliberately simplistic \"conversion\" and\n    # should not be \"improved\".  See libtool.info.\n    if test \"x$1\" != \"x$2\"; then\n      lt_replace_pathsep_chars=\"s|$1|$2|g\"\n      func_to_host_path_result=`echo \"$3\" |\n        $SED -e \"$lt_replace_pathsep_chars\"`\n    else\n      func_to_host_path_result=\"$3\"\n    fi\n  fi\n}\n# end func_convert_path_check\n\n\n# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG\n# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT\n# and appending REPL if ORIG matches BACKPAT.\nfunc_convert_path_front_back_pathsep ()\n{\n  $opt_debug\n  case $4 in\n  $1 ) func_to_host_path_result=\"$3$func_to_host_path_result\"\n    ;;\n  esac\n  case $4 in\n  $2 ) func_append func_to_host_path_result \"$3\"\n    ;;\n  esac\n}\n# end func_convert_path_front_back_pathsep\n\n\n##################################################\n# $build to $host FILE NAME CONVERSION FUNCTIONS #\n##################################################\n# invoked via `$to_host_file_cmd ARG'\n#\n# In each case, ARG is the path to be converted from $build to $host format.\n# Result will be available in $func_to_host_file_result.\n\n\n# func_to_host_file ARG\n# Converts the file name ARG from $build format to $host format. Return result\n# in func_to_host_file_result.\nfunc_to_host_file ()\n{\n  $opt_debug\n  $to_host_file_cmd \"$1\"\n}\n# end func_to_host_file\n\n\n# func_to_tool_file ARG LAZY\n# converts the file name ARG from $build format to toolchain format. Return\n# result in func_to_tool_file_result.  If the conversion in use is listed\n# in (the comma separated) LAZY, no conversion takes place.\nfunc_to_tool_file ()\n{\n  $opt_debug\n  case ,$2, in\n    *,\"$to_tool_file_cmd\",*)\n      func_to_tool_file_result=$1\n      ;;\n    *)\n      $to_tool_file_cmd \"$1\"\n      func_to_tool_file_result=$func_to_host_file_result\n      ;;\n  esac\n}\n# end func_to_tool_file\n\n\n# func_convert_file_noop ARG\n# Copy ARG to func_to_host_file_result.\nfunc_convert_file_noop ()\n{\n  func_to_host_file_result=\"$1\"\n}\n# end func_convert_file_noop\n\n\n# func_convert_file_msys_to_w32 ARG\n# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic\n# conversion to w32 is not available inside the cwrapper.  Returns result in\n# func_to_host_file_result.\nfunc_convert_file_msys_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_msys_to_w32 \"$1\"\n    func_to_host_file_result=\"$func_convert_core_msys_to_w32_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_msys_to_w32\n\n\n# func_convert_file_cygwin_to_w32 ARG\n# Convert file name ARG from Cygwin to w32 format.  Returns result in\n# func_to_host_file_result.\nfunc_convert_file_cygwin_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    # because $build is cygwin, we call \"the\" cygpath in $PATH; no need to use\n    # LT_CYGPATH in this case.\n    func_to_host_file_result=`cygpath -m \"$1\"`\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_cygwin_to_w32\n\n\n# func_convert_file_nix_to_w32 ARG\n# Convert file name ARG from *nix to w32 format.  Requires a wine environment\n# and a working winepath. Returns result in func_to_host_file_result.\nfunc_convert_file_nix_to_w32 ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_file_wine_to_w32 \"$1\"\n    func_to_host_file_result=\"$func_convert_core_file_wine_to_w32_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_nix_to_w32\n\n\n# func_convert_file_msys_to_cygwin ARG\n# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.\n# Returns result in func_to_host_file_result.\nfunc_convert_file_msys_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    func_convert_core_msys_to_w32 \"$1\"\n    func_cygpath -u \"$func_convert_core_msys_to_w32_result\"\n    func_to_host_file_result=\"$func_cygpath_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_msys_to_cygwin\n\n\n# func_convert_file_nix_to_cygwin ARG\n# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed\n# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result\n# in func_to_host_file_result.\nfunc_convert_file_nix_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_file_result=\"$1\"\n  if test -n \"$1\"; then\n    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.\n    func_convert_core_file_wine_to_w32 \"$1\"\n    func_cygpath -u \"$func_convert_core_file_wine_to_w32_result\"\n    func_to_host_file_result=\"$func_cygpath_result\"\n  fi\n  func_convert_file_check \"$1\" \"$func_to_host_file_result\"\n}\n# end func_convert_file_nix_to_cygwin\n\n\n#############################################\n# $build to $host PATH CONVERSION FUNCTIONS #\n#############################################\n# invoked via `$to_host_path_cmd ARG'\n#\n# In each case, ARG is the path to be converted from $build to $host format.\n# The result will be available in $func_to_host_path_result.\n#\n# Path separators are also converted from $build format to $host format.  If\n# ARG begins or ends with a path separator character, it is preserved (but\n# converted to $host format) on output.\n#\n# All path conversion functions are named using the following convention:\n#   file name conversion function    : func_convert_file_X_to_Y ()\n#   path conversion function         : func_convert_path_X_to_Y ()\n# where, for any given $build/$host combination the 'X_to_Y' value is the\n# same.  If conversion functions are added for new $build/$host combinations,\n# the two new functions must follow this pattern, or func_init_to_host_path_cmd\n# will break.\n\n\n# func_init_to_host_path_cmd\n# Ensures that function \"pointer\" variable $to_host_path_cmd is set to the\n# appropriate value, based on the value of $to_host_file_cmd.\nto_host_path_cmd=\nfunc_init_to_host_path_cmd ()\n{\n  $opt_debug\n  if test -z \"$to_host_path_cmd\"; then\n    func_stripname 'func_convert_file_' '' \"$to_host_file_cmd\"\n    to_host_path_cmd=\"func_convert_path_${func_stripname_result}\"\n  fi\n}\n\n\n# func_to_host_path ARG\n# Converts the path ARG from $build format to $host format. Return result\n# in func_to_host_path_result.\nfunc_to_host_path ()\n{\n  $opt_debug\n  func_init_to_host_path_cmd\n  $to_host_path_cmd \"$1\"\n}\n# end func_to_host_path\n\n\n# func_convert_path_noop ARG\n# Copy ARG to func_to_host_path_result.\nfunc_convert_path_noop ()\n{\n  func_to_host_path_result=\"$1\"\n}\n# end func_convert_path_noop\n\n\n# func_convert_path_msys_to_w32 ARG\n# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic\n# conversion to w32 is not available inside the cwrapper.  Returns result in\n# func_to_host_path_result.\nfunc_convert_path_msys_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # Remove leading and trailing path separator characters from ARG.  MSYS\n    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';\n    # and winepath ignores them completely.\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_msys_to_w32 \"$func_to_host_path_tmp1\"\n    func_to_host_path_result=\"$func_convert_core_msys_to_w32_result\"\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_msys_to_w32\n\n\n# func_convert_path_cygwin_to_w32 ARG\n# Convert path ARG from Cygwin to w32 format.  Returns result in\n# func_to_host_file_result.\nfunc_convert_path_cygwin_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_to_host_path_result=`cygpath -m -p \"$func_to_host_path_tmp1\"`\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_cygwin_to_w32\n\n\n# func_convert_path_nix_to_w32 ARG\n# Convert path ARG from *nix to w32 format.  Requires a wine environment and\n# a working winepath.  Returns result in func_to_host_file_result.\nfunc_convert_path_nix_to_w32 ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_path_wine_to_w32 \"$func_to_host_path_tmp1\"\n    func_to_host_path_result=\"$func_convert_core_path_wine_to_w32_result\"\n    func_convert_path_check : \";\" \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" \";\" \"$1\"\n  fi\n}\n# end func_convert_path_nix_to_w32\n\n\n# func_convert_path_msys_to_cygwin ARG\n# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.\n# Returns result in func_to_host_file_result.\nfunc_convert_path_msys_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # See func_convert_path_msys_to_w32:\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_msys_to_w32 \"$func_to_host_path_tmp1\"\n    func_cygpath -u -p \"$func_convert_core_msys_to_w32_result\"\n    func_to_host_path_result=\"$func_cygpath_result\"\n    func_convert_path_check : : \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" : \"$1\"\n  fi\n}\n# end func_convert_path_msys_to_cygwin\n\n\n# func_convert_path_nix_to_cygwin ARG\n# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a\n# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in\n# func_to_host_file_result.\nfunc_convert_path_nix_to_cygwin ()\n{\n  $opt_debug\n  func_to_host_path_result=\"$1\"\n  if test -n \"$1\"; then\n    # Remove leading and trailing path separator characters from\n    # ARG. msys behavior is inconsistent here, cygpath turns them\n    # into '.;' and ';.', and winepath ignores them completely.\n    func_stripname : : \"$1\"\n    func_to_host_path_tmp1=$func_stripname_result\n    func_convert_core_path_wine_to_w32 \"$func_to_host_path_tmp1\"\n    func_cygpath -u -p \"$func_convert_core_path_wine_to_w32_result\"\n    func_to_host_path_result=\"$func_cygpath_result\"\n    func_convert_path_check : : \\\n      \"$func_to_host_path_tmp1\" \"$func_to_host_path_result\"\n    func_convert_path_front_back_pathsep \":*\" \"*:\" : \"$1\"\n  fi\n}\n# end func_convert_path_nix_to_cygwin\n\n\n# func_mode_compile arg...\nfunc_mode_compile ()\n{\n    $opt_debug\n    # Get the compilation command and the source file.\n    base_compile=\n    srcfile=\"$nonopt\"  #  always keep a non-empty value in \"srcfile\"\n    suppress_opt=yes\n    suppress_output=\n    arg_mode=normal\n    libobj=\n    later=\n    pie_flag=\n\n    for arg\n    do\n      case $arg_mode in\n      arg  )\n\t# do not \"continue\".  Instead, add this to base_compile\n\tlastarg=\"$arg\"\n\targ_mode=normal\n\t;;\n\n      target )\n\tlibobj=\"$arg\"\n\targ_mode=normal\n\tcontinue\n\t;;\n\n      normal )\n\t# Accept any command-line options.\n\tcase $arg in\n\t-o)\n\t  test -n \"$libobj\" && \\\n\t    func_fatal_error \"you cannot specify \\`-o' more than once\"\n\t  arg_mode=target\n\t  continue\n\t  ;;\n\n\t-pie | -fpie | -fPIE)\n          func_append pie_flag \" $arg\"\n\t  continue\n\t  ;;\n\n\t-shared | -static | -prefer-pic | -prefer-non-pic)\n\t  func_append later \" $arg\"\n\t  continue\n\t  ;;\n\n\t-no-suppress)\n\t  suppress_opt=no\n\t  continue\n\t  ;;\n\n\t-Xcompiler)\n\t  arg_mode=arg  #  the next one goes into the \"base_compile\" arg list\n\t  continue      #  The current \"srcfile\" will either be retained or\n\t  ;;            #  replaced later.  I would guess that would be a bug.\n\n\t-Wc,*)\n\t  func_stripname '-Wc,' '' \"$arg\"\n\t  args=$func_stripname_result\n\t  lastarg=\n\t  save_ifs=\"$IFS\"; IFS=','\n\t  for arg in $args; do\n\t    IFS=\"$save_ifs\"\n\t    func_append_quoted lastarg \"$arg\"\n\t  done\n\t  IFS=\"$save_ifs\"\n\t  func_stripname ' ' '' \"$lastarg\"\n\t  lastarg=$func_stripname_result\n\n\t  # Add the arguments to base_compile.\n\t  func_append base_compile \" $lastarg\"\n\t  continue\n\t  ;;\n\n\t*)\n\t  # Accept the current argument as the source file.\n\t  # The previous \"srcfile\" becomes the current argument.\n\t  #\n\t  lastarg=\"$srcfile\"\n\t  srcfile=\"$arg\"\n\t  ;;\n\tesac  #  case $arg\n\t;;\n      esac    #  case $arg_mode\n\n      # Aesthetically quote the previous argument.\n      func_append_quoted base_compile \"$lastarg\"\n    done # for arg\n\n    case $arg_mode in\n    arg)\n      func_fatal_error \"you must specify an argument for -Xcompile\"\n      ;;\n    target)\n      func_fatal_error \"you must specify a target with \\`-o'\"\n      ;;\n    *)\n      # Get the name of the library object.\n      test -z \"$libobj\" && {\n\tfunc_basename \"$srcfile\"\n\tlibobj=\"$func_basename_result\"\n      }\n      ;;\n    esac\n\n    # Recognize several different file suffixes.\n    # If the user specifies -o file.o, it is replaced with file.lo\n    case $libobj in\n    *.[cCFSifmso] | \\\n    *.ada | *.adb | *.ads | *.asm | \\\n    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \\\n    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)\n      func_xform \"$libobj\"\n      libobj=$func_xform_result\n      ;;\n    esac\n\n    case $libobj in\n    *.lo) func_lo2o \"$libobj\"; obj=$func_lo2o_result ;;\n    *)\n      func_fatal_error \"cannot determine name of library object from \\`$libobj'\"\n      ;;\n    esac\n\n    func_infer_tag $base_compile\n\n    for arg in $later; do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tcontinue\n\t;;\n\n      -static)\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tcontinue\n\t;;\n\n      -prefer-pic)\n\tpic_mode=yes\n\tcontinue\n\t;;\n\n      -prefer-non-pic)\n\tpic_mode=no\n\tcontinue\n\t;;\n      esac\n    done\n\n    func_quote_for_eval \"$libobj\"\n    test \"X$libobj\" != \"X$func_quote_for_eval_result\" \\\n      && $ECHO \"X$libobj\" | $GREP '[]~#^*{};<>?\"'\"'\"'\t &()|`$[]' \\\n      && func_warning \"libobj name \\`$libobj' may not contain shell special characters.\"\n    func_dirname_and_basename \"$obj\" \"/\" \"\"\n    objname=\"$func_basename_result\"\n    xdir=\"$func_dirname_result\"\n    lobj=${xdir}$objdir/$objname\n\n    test -z \"$base_compile\" && \\\n      func_fatal_help \"you must specify a compilation command\"\n\n    # Delete any leftover library objects.\n    if test \"$build_old_libs\" = yes; then\n      removelist=\"$obj $lobj $libobj ${libobj}T\"\n    else\n      removelist=\"$lobj $libobj ${libobj}T\"\n    fi\n\n    # On Cygwin there's no \"real\" PIC flag so we must build both object types\n    case $host_os in\n    cygwin* | mingw* | pw32* | os2* | cegcc*)\n      pic_mode=default\n      ;;\n    esac\n    if test \"$pic_mode\" = no && test \"$deplibs_check_method\" != pass_all; then\n      # non-PIC code in shared libraries is not supported\n      pic_mode=default\n    fi\n\n    # Calculate the filename of the output object if compiler does\n    # not support -o with -c\n    if test \"$compiler_c_o\" = no; then\n      output_obj=`$ECHO \"$srcfile\" | $SED 's%^.*/%%; s%\\.[^.]*$%%'`.${objext}\n      lockfile=\"$output_obj.lock\"\n    else\n      output_obj=\n      need_locks=no\n      lockfile=\n    fi\n\n    # Lock this critical section if it is needed\n    # We use this script file to make the link, it avoids creating a new file\n    if test \"$need_locks\" = yes; then\n      until $opt_dry_run || ln \"$progpath\" \"$lockfile\" 2>/dev/null; do\n\tfunc_echo \"Waiting for $lockfile to be removed\"\n\tsleep 2\n      done\n    elif test \"$need_locks\" = warn; then\n      if test -f \"$lockfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile exists and contains:\n`cat $lockfile 2>/dev/null`\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n      func_append removelist \" $output_obj\"\n      $ECHO \"$srcfile\" > \"$lockfile\"\n    fi\n\n    $opt_dry_run || $RM $removelist\n    func_append removelist \" $lockfile\"\n    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15\n\n    func_to_tool_file \"$srcfile\" func_convert_file_msys_to_w32\n    srcfile=$func_to_tool_file_result\n    func_quote_for_eval \"$srcfile\"\n    qsrcfile=$func_quote_for_eval_result\n\n    # Only build a PIC object if we are building libtool libraries.\n    if test \"$build_libtool_libs\" = yes; then\n      # Without this assignment, base_compile gets emptied.\n      fbsd_hideous_sh_bug=$base_compile\n\n      if test \"$pic_mode\" != no; then\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      else\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile\"\n      fi\n\n      func_mkdir_p \"$xdir$objdir\"\n\n      if test -z \"$output_obj\"; then\n\t# Place PIC objects in $objdir\n\tfunc_append command \" -o $lobj\"\n      fi\n\n      func_show_eval_locale \"$command\"\t\\\n          'test -n \"$output_obj\" && $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed, then go on to compile the next one\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$lobj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$lobj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n\n      # Allow error messages only from the first compilation.\n      if test \"$suppress_opt\" = yes; then\n\tsuppress_output=' >/dev/null 2>&1'\n      fi\n    fi\n\n    # Only build a position-dependent object if we build old libraries.\n    if test \"$build_old_libs\" = yes; then\n      if test \"$pic_mode\" != yes; then\n\t# Don't build PIC code\n\tcommand=\"$base_compile $qsrcfile$pie_flag\"\n      else\n\tcommand=\"$base_compile $qsrcfile $pic_flag\"\n      fi\n      if test \"$compiler_c_o\" = yes; then\n\tfunc_append command \" -o $obj\"\n      fi\n\n      # Suppress compiler output if we already did a PIC compilation.\n      func_append command \"$suppress_output\"\n      func_show_eval_locale \"$command\" \\\n        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'\n\n      if test \"$need_locks\" = warn &&\n\t test \"X`cat $lockfile 2>/dev/null`\" != \"X$srcfile\"; then\n\t$ECHO \"\\\n*** ERROR, $lockfile contains:\n`cat $lockfile 2>/dev/null`\n\nbut it should contain:\n$srcfile\n\nThis indicates that another process is trying to use the same\ntemporary object file, and libtool could not work around it because\nyour compiler does not support \\`-c' and \\`-o' together.  If you\nrepeat this compilation, it may succeed, by chance, but you had better\navoid parallel builds (make -j) in this platform, or get a better\ncompiler.\"\n\n\t$opt_dry_run || $RM $removelist\n\texit $EXIT_FAILURE\n      fi\n\n      # Just move the object if needed\n      if test -n \"$output_obj\" && test \"X$output_obj\" != \"X$obj\"; then\n\tfunc_show_eval '$MV \"$output_obj\" \"$obj\"' \\\n\t  'error=$?; $opt_dry_run || $RM $removelist; exit $error'\n      fi\n    fi\n\n    $opt_dry_run || {\n      func_write_libtool_object \"$libobj\" \"$objdir/$objname\" \"$objname\"\n\n      # Unlock the critical section if it was locked\n      if test \"$need_locks\" != no; then\n\tremovelist=$lockfile\n        $RM \"$lockfile\"\n      fi\n    }\n\n    exit $EXIT_SUCCESS\n}\n\n$opt_help || {\n  test \"$opt_mode\" = compile && func_mode_compile ${1+\"$@\"}\n}\n\nfunc_mode_help ()\n{\n    # We need to display help for each of the modes.\n    case $opt_mode in\n      \"\")\n        # Generic help is extracted from the usage comments\n        # at the start of this file.\n        func_help\n        ;;\n\n      clean)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...\n\nRemove files from the build directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, object or program, all the files associated\nwith it are deleted. Otherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      compile)\n      $ECHO \\\n\"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE\n\nCompile a source file into a libtool library object.\n\nThis mode accepts the following additional options:\n\n  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE\n  -no-suppress      do not suppress compiler output for multiple passes\n  -prefer-pic       try to build PIC objects only\n  -prefer-non-pic   try to build non-PIC objects only\n  -shared           do not build a \\`.o' file suitable for static linking\n  -static           only build a \\`.o' file suitable for static linking\n  -Wc,FLAG          pass FLAG directly to the compiler\n\nCOMPILE-COMMAND is a command to be used in creating a \\`standard' object file\nfrom the given SOURCEFILE.\n\nThe output file name is determined by removing the directory component from\nSOURCEFILE, then substituting the C source code suffix \\`.c' with the\nlibrary object suffix, \\`.lo'.\"\n        ;;\n\n      execute)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...\n\nAutomatically set library path, then run a program.\n\nThis mode accepts the following additional options:\n\n  -dlopen FILE      add the directory containing FILE to the library path\n\nThis mode sets the library path environment variable according to \\`-dlopen'\nflags.\n\nIf any of the ARGS are libtool executable wrappers, then they are translated\ninto their corresponding uninstalled binary, and any of their required library\ndirectories are added to the library path.\n\nThen, COMMAND is executed, with ARGS as arguments.\"\n        ;;\n\n      finish)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...\n\nComplete the installation of libtool libraries.\n\nEach LIBDIR is a directory that contains libtool libraries.\n\nThe commands that this mode executes may require superuser privileges.  Use\nthe \\`--dry-run' option if you just want to see what would be executed.\"\n        ;;\n\n      install)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...\n\nInstall executables or libraries.\n\nINSTALL-COMMAND is the installation command.  The first component should be\neither the \\`install' or \\`cp' program.\n\nThe following components of INSTALL-COMMAND are treated specially:\n\n  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation\n\nThe rest of the components are interpreted as arguments to that command (only\nBSD-compatible install options are recognized).\"\n        ;;\n\n      link)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...\n\nLink object files or libraries together to form another library, or to\ncreate an executable program.\n\nLINK-COMMAND is a command using the C compiler that you would use to create\na program from several object files.\n\nThe following components of LINK-COMMAND are treated specially:\n\n  -all-static       do not do any dynamic linking at all\n  -avoid-version    do not add a version suffix if possible\n  -bindir BINDIR    specify path to binaries directory (for systems where\n                    libraries must be found in the PATH setting at runtime)\n  -dlopen FILE      \\`-dlpreopen' FILE if it cannot be dlopened at runtime\n  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols\n  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)\n  -export-symbols SYMFILE\n                    try to export only the symbols listed in SYMFILE\n  -export-symbols-regex REGEX\n                    try to export only the symbols matching REGEX\n  -LLIBDIR          search LIBDIR for required installed libraries\n  -lNAME            OUTPUT-FILE requires the installed library libNAME\n  -module           build a library that can dlopened\n  -no-fast-install  disable the fast-install mode\n  -no-install       link a not-installable executable\n  -no-undefined     declare that a library does not refer to external symbols\n  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects\n  -objectlist FILE  Use a list of object files found in FILE to specify objects\n  -precious-files-regex REGEX\n                    don't remove output files matching REGEX\n  -release RELEASE  specify package release information\n  -rpath LIBDIR     the created library will eventually be installed in LIBDIR\n  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries\n  -shared           only do dynamic linking of libtool libraries\n  -shrext SUFFIX    override the standard shared library file extension\n  -static           do not do any dynamic linking of uninstalled libtool libraries\n  -static-libtool-libs\n                    do not do any dynamic linking of libtool libraries\n  -version-info CURRENT[:REVISION[:AGE]]\n                    specify library version info [each variable defaults to 0]\n  -weak LIBNAME     declare that the target provides the LIBNAME interface\n  -Wc,FLAG\n  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler\n  -Wl,FLAG\n  -Xlinker FLAG     pass linker-specific FLAG directly to the linker\n  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)\n\nAll other options (arguments beginning with \\`-') are ignored.\n\nEvery other argument is treated as a filename.  Files ending in \\`.la' are\ntreated as uninstalled libtool libraries, other files are standard or library\nobject files.\n\nIf the OUTPUT-FILE ends in \\`.la', then a libtool library is created,\nonly library objects (\\`.lo' files) may be specified, and \\`-rpath' is\nrequired, except when creating a convenience library.\n\nIf OUTPUT-FILE ends in \\`.a' or \\`.lib', then a standard library is created\nusing \\`ar' and \\`ranlib', or on Windows using \\`lib'.\n\nIf OUTPUT-FILE ends in \\`.lo' or \\`.${objext}', then a reloadable object file\nis created, otherwise an executable program is created.\"\n        ;;\n\n      uninstall)\n        $ECHO \\\n\"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...\n\nRemove libraries from an installation directory.\n\nRM is the name of the program to use to delete files associated with each FILE\n(typically \\`/bin/rm').  RM-OPTIONS are options (such as \\`-f') to be passed\nto RM.\n\nIf FILE is a libtool library, all the files associated with it are deleted.\nOtherwise, only FILE itself is deleted using RM.\"\n        ;;\n\n      *)\n        func_fatal_help \"invalid operation mode \\`$opt_mode'\"\n        ;;\n    esac\n\n    echo\n    $ECHO \"Try \\`$progname --help' for more information about other modes.\"\n}\n\n# Now that we've collected a possible --mode arg, show help if necessary\nif $opt_help; then\n  if test \"$opt_help\" = :; then\n    func_mode_help\n  else\n    {\n      func_help noexit\n      for opt_mode in compile link execute install finish uninstall clean; do\n\tfunc_mode_help\n      done\n    } | sed -n '1p; 2,$s/^Usage:/  or: /p'\n    {\n      func_help noexit\n      for opt_mode in compile link execute install finish uninstall clean; do\n\techo\n\tfunc_mode_help\n      done\n    } |\n    sed '1d\n      /^When reporting/,/^Report/{\n\tH\n\td\n      }\n      $x\n      /information about other modes/d\n      /more detailed .*MODE/d\n      s/^Usage:.*--mode=\\([^ ]*\\) .*/Description of \\1 mode:/'\n  fi\n  exit $?\nfi\n\n\n# func_mode_execute arg...\nfunc_mode_execute ()\n{\n    $opt_debug\n    # The first argument is the command name.\n    cmd=\"$nonopt\"\n    test -z \"$cmd\" && \\\n      func_fatal_help \"you must specify a COMMAND\"\n\n    # Handle -dlopen flags immediately.\n    for file in $opt_dlopen; do\n      test -f \"$file\" \\\n\t|| func_fatal_help \"\\`$file' is not a file\"\n\n      dir=\n      case $file in\n      *.la)\n\tfunc_resolve_sysroot \"$file\"\n\tfile=$func_resolve_sysroot_result\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$lib' is not a valid libtool archive\"\n\n\t# Read the libtool library.\n\tdlname=\n\tlibrary_names=\n\tfunc_source \"$file\"\n\n\t# Skip this library if it cannot be dlopened.\n\tif test -z \"$dlname\"; then\n\t  # Warn if it was a shared library.\n\t  test -n \"$library_names\" && \\\n\t    func_warning \"\\`$file' was not linked with \\`-export-dynamic'\"\n\t  continue\n\tfi\n\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\n\tif test -f \"$dir/$objdir/$dlname\"; then\n\t  func_append dir \"/$objdir\"\n\telse\n\t  if test ! -f \"$dir/$dlname\"; then\n\t    func_fatal_error \"cannot find \\`$dlname' in \\`$dir' or \\`$dir/$objdir'\"\n\t  fi\n\tfi\n\t;;\n\n      *.lo)\n\t# Just add the directory containing the .lo file.\n\tfunc_dirname \"$file\" \"\" \".\"\n\tdir=\"$func_dirname_result\"\n\t;;\n\n      *)\n\tfunc_warning \"\\`-dlopen' is ignored for non-libtool libraries and objects\"\n\tcontinue\n\t;;\n      esac\n\n      # Get the absolute pathname.\n      absdir=`cd \"$dir\" && pwd`\n      test -n \"$absdir\" && dir=\"$absdir\"\n\n      # Now add the directory to shlibpath_var.\n      if eval \"test -z \\\"\\$$shlibpath_var\\\"\"; then\n\teval \"$shlibpath_var=\\\"\\$dir\\\"\"\n      else\n\teval \"$shlibpath_var=\\\"\\$dir:\\$$shlibpath_var\\\"\"\n      fi\n    done\n\n    # This variable tells wrapper scripts just to set shlibpath_var\n    # rather than running their programs.\n    libtool_execute_magic=\"$magic\"\n\n    # Check if any of the arguments is a wrapper script.\n    args=\n    for file\n    do\n      case $file in\n      -* | *.la | *.lo ) ;;\n      *)\n\t# Do a test to see if this is really a libtool program.\n\tif func_ltwrapper_script_p \"$file\"; then\n\t  func_source \"$file\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\telif func_ltwrapper_executable_p \"$file\"; then\n\t  func_ltwrapper_scriptname \"$file\"\n\t  func_source \"$func_ltwrapper_scriptname_result\"\n\t  # Transform arg to wrapped name.\n\t  file=\"$progdir/$program\"\n\tfi\n\t;;\n      esac\n      # Quote arguments (to preserve shell metacharacters).\n      func_append_quoted args \"$file\"\n    done\n\n    if test \"X$opt_dry_run\" = Xfalse; then\n      if test -n \"$shlibpath_var\"; then\n\t# Export the shlibpath_var.\n\teval \"export $shlibpath_var\"\n      fi\n\n      # Restore saved environment variables\n      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES\n      do\n\teval \"if test \\\"\\${save_$lt_var+set}\\\" = set; then\n                $lt_var=\\$save_$lt_var; export $lt_var\n\t      else\n\t\t$lt_unset $lt_var\n\t      fi\"\n      done\n\n      # Now prepare to actually exec the command.\n      exec_cmd=\"\\$cmd$args\"\n    else\n      # Display what would be done.\n      if test -n \"$shlibpath_var\"; then\n\teval \"\\$ECHO \\\"\\$shlibpath_var=\\$$shlibpath_var\\\"\"\n\techo \"export $shlibpath_var\"\n      fi\n      $ECHO \"$cmd$args\"\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$opt_mode\" = execute && func_mode_execute ${1+\"$@\"}\n\n\n# func_mode_finish arg...\nfunc_mode_finish ()\n{\n    $opt_debug\n    libs=\n    libdirs=\n    admincmds=\n\n    for opt in \"$nonopt\" ${1+\"$@\"}\n    do\n      if test -d \"$opt\"; then\n\tfunc_append libdirs \" $opt\"\n\n      elif test -f \"$opt\"; then\n\tif func_lalib_unsafe_p \"$opt\"; then\n\t  func_append libs \" $opt\"\n\telse\n\t  func_warning \"\\`$opt' is not a valid libtool archive\"\n\tfi\n\n      else\n\tfunc_fatal_error \"invalid argument \\`$opt'\"\n      fi\n    done\n\n    if test -n \"$libs\"; then\n      if test -n \"$lt_sysroot\"; then\n        sysroot_regex=`$ECHO \"$lt_sysroot\" | $SED \"$sed_make_literal_regex\"`\n        sysroot_cmd=\"s/\\([ ']\\)$sysroot_regex/\\1/g;\"\n      else\n        sysroot_cmd=\n      fi\n\n      # Remove sysroot references\n      if $opt_dry_run; then\n        for lib in $libs; do\n          echo \"removing references to $lt_sysroot and \\`=' prefixes from $lib\"\n        done\n      else\n        tmpdir=`func_mktempdir`\n        for lib in $libs; do\n\t  sed -e \"${sysroot_cmd} s/\\([ ']-[LR]\\)=/\\1/g; s/\\([ ']\\)=/\\1/g\" $lib \\\n\t    > $tmpdir/tmp-la\n\t  mv -f $tmpdir/tmp-la $lib\n\tdone\n        ${RM}r \"$tmpdir\"\n      fi\n    fi\n\n    if test -n \"$finish_cmds$finish_eval\" && test -n \"$libdirs\"; then\n      for libdir in $libdirs; do\n\tif test -n \"$finish_cmds\"; then\n\t  # Do each command in the finish commands.\n\t  func_execute_cmds \"$finish_cmds\" 'admincmds=\"$admincmds\n'\"$cmd\"'\"'\n\tfi\n\tif test -n \"$finish_eval\"; then\n\t  # Do the single finish_eval.\n\t  eval cmds=\\\"$finish_eval\\\"\n\t  $opt_dry_run || eval \"$cmds\" || func_append admincmds \"\n       $cmds\"\n\tfi\n      done\n    fi\n\n    # Exit here if they wanted silent mode.\n    $opt_silent && exit $EXIT_SUCCESS\n\n    if test -n \"$finish_cmds$finish_eval\" && test -n \"$libdirs\"; then\n      echo \"----------------------------------------------------------------------\"\n      echo \"Libraries have been installed in:\"\n      for libdir in $libdirs; do\n\t$ECHO \"   $libdir\"\n      done\n      echo\n      echo \"If you ever happen to want to link against installed libraries\"\n      echo \"in a given directory, LIBDIR, you must either use libtool, and\"\n      echo \"specify the full pathname of the library, or use the \\`-LLIBDIR'\"\n      echo \"flag during linking and do at least one of the following:\"\n      if test -n \"$shlibpath_var\"; then\n\techo \"   - add LIBDIR to the \\`$shlibpath_var' environment variable\"\n\techo \"     during execution\"\n      fi\n      if test -n \"$runpath_var\"; then\n\techo \"   - add LIBDIR to the \\`$runpath_var' environment variable\"\n\techo \"     during linking\"\n      fi\n      if test -n \"$hardcode_libdir_flag_spec\"; then\n\tlibdir=LIBDIR\n\teval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\n\t$ECHO \"   - use the \\`$flag' linker flag\"\n      fi\n      if test -n \"$admincmds\"; then\n\t$ECHO \"   - have your system administrator run these commands:$admincmds\"\n      fi\n      if test -f /etc/ld.so.conf; then\n\techo \"   - have your system administrator add LIBDIR to \\`/etc/ld.so.conf'\"\n      fi\n      echo\n\n      echo \"See any operating system documentation about shared libraries for\"\n      case $host in\n\tsolaris2.[6789]|solaris2.1[0-9])\n\t  echo \"more information, such as the ld(1), crle(1) and ld.so(8) manual\"\n\t  echo \"pages.\"\n\t  ;;\n\t*)\n\t  echo \"more information, such as the ld(1) and ld.so(8) manual pages.\"\n\t  ;;\n      esac\n      echo \"----------------------------------------------------------------------\"\n    fi\n    exit $EXIT_SUCCESS\n}\n\ntest \"$opt_mode\" = finish && func_mode_finish ${1+\"$@\"}\n\n\n# func_mode_install arg...\nfunc_mode_install ()\n{\n    $opt_debug\n    # There may be an optional sh(1) argument at the beginning of\n    # install_prog (especially on Windows NT).\n    if test \"$nonopt\" = \"$SHELL\" || test \"$nonopt\" = /bin/sh ||\n       # Allow the use of GNU shtool's install command.\n       case $nonopt in *shtool*) :;; *) false;; esac; then\n      # Aesthetically quote it.\n      func_quote_for_eval \"$nonopt\"\n      install_prog=\"$func_quote_for_eval_result \"\n      arg=$1\n      shift\n    else\n      install_prog=\n      arg=$nonopt\n    fi\n\n    # The real first argument should be the name of the installation program.\n    # Aesthetically quote it.\n    func_quote_for_eval \"$arg\"\n    func_append install_prog \"$func_quote_for_eval_result\"\n    install_shared_prog=$install_prog\n    case \" $install_prog \" in\n      *[\\\\\\ /]cp\\ *) install_cp=: ;;\n      *) install_cp=false ;;\n    esac\n\n    # We need to accept at least all the BSD install flags.\n    dest=\n    files=\n    opts=\n    prev=\n    install_type=\n    isdir=no\n    stripme=\n    no_mode=:\n    for arg\n    do\n      arg2=\n      if test -n \"$dest\"; then\n\tfunc_append files \" $dest\"\n\tdest=$arg\n\tcontinue\n      fi\n\n      case $arg in\n      -d) isdir=yes ;;\n      -f)\n\tif $install_cp; then :; else\n\t  prev=$arg\n\tfi\n\t;;\n      -g | -m | -o)\n\tprev=$arg\n\t;;\n      -s)\n\tstripme=\" -s\"\n\tcontinue\n\t;;\n      -*)\n\t;;\n      *)\n\t# If the previous option needed an argument, then skip it.\n\tif test -n \"$prev\"; then\n\t  if test \"x$prev\" = x-m && test -n \"$install_override_mode\"; then\n\t    arg2=$install_override_mode\n\t    no_mode=false\n\t  fi\n\t  prev=\n\telse\n\t  dest=$arg\n\t  continue\n\tfi\n\t;;\n      esac\n\n      # Aesthetically quote the argument.\n      func_quote_for_eval \"$arg\"\n      func_append install_prog \" $func_quote_for_eval_result\"\n      if test -n \"$arg2\"; then\n\tfunc_quote_for_eval \"$arg2\"\n      fi\n      func_append install_shared_prog \" $func_quote_for_eval_result\"\n    done\n\n    test -z \"$install_prog\" && \\\n      func_fatal_help \"you must specify an install program\"\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prev' option requires an argument\"\n\n    if test -n \"$install_override_mode\" && $no_mode; then\n      if $install_cp; then :; else\n\tfunc_quote_for_eval \"$install_override_mode\"\n\tfunc_append install_shared_prog \" -m $func_quote_for_eval_result\"\n      fi\n    fi\n\n    if test -z \"$files\"; then\n      if test -z \"$dest\"; then\n\tfunc_fatal_help \"no file or destination specified\"\n      else\n\tfunc_fatal_help \"you must specify a destination\"\n      fi\n    fi\n\n    # Strip any trailing slash from the destination.\n    func_stripname '' '/' \"$dest\"\n    dest=$func_stripname_result\n\n    # Check to see that the destination is a directory.\n    test -d \"$dest\" && isdir=yes\n    if test \"$isdir\" = yes; then\n      destdir=\"$dest\"\n      destname=\n    else\n      func_dirname_and_basename \"$dest\" \"\" \".\"\n      destdir=\"$func_dirname_result\"\n      destname=\"$func_basename_result\"\n\n      # Not a directory, so check to see that there is only one file specified.\n      set dummy $files; shift\n      test \"$#\" -gt 1 && \\\n\tfunc_fatal_help \"\\`$dest' is not a directory\"\n    fi\n    case $destdir in\n    [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n    *)\n      for file in $files; do\n\tcase $file in\n\t*.lo) ;;\n\t*)\n\t  func_fatal_help \"\\`$destdir' must be an absolute directory name\"\n\t  ;;\n\tesac\n      done\n      ;;\n    esac\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    staticlibs=\n    future_libdirs=\n    current_libdirs=\n    for file in $files; do\n\n      # Do each installation.\n      case $file in\n      *.$libext)\n\t# Do the static libraries later.\n\tfunc_append staticlibs \" $file\"\n\t;;\n\n      *.la)\n\tfunc_resolve_sysroot \"$file\"\n\tfile=$func_resolve_sysroot_result\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$file\" \\\n\t  || func_fatal_help \"\\`$file' is not a valid libtool archive\"\n\n\tlibrary_names=\n\told_library=\n\trelink_command=\n\tfunc_source \"$file\"\n\n\t# Add the libdir to current_libdirs if it is the destination.\n\tif test \"X$destdir\" = \"X$libdir\"; then\n\t  case \"$current_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append current_libdirs \" $libdir\" ;;\n\t  esac\n\telse\n\t  # Note the libdir as a future libdir.\n\t  case \"$future_libdirs \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append future_libdirs \" $libdir\" ;;\n\t  esac\n\tfi\n\n\tfunc_dirname \"$file\" \"/\" \"\"\n\tdir=\"$func_dirname_result\"\n\tfunc_append dir \"$objdir\"\n\n\tif test -n \"$relink_command\"; then\n\t  # Determine the prefix the user has applied to our future dir.\n\t  inst_prefix_dir=`$ECHO \"$destdir\" | $SED -e \"s%$libdir\\$%%\"`\n\n\t  # Don't allow the user to place us outside of our expected\n\t  # location b/c this prevents finding dependent libraries that\n\t  # are installed to the same prefix.\n\t  # At present, this check doesn't affect windows .dll's that\n\t  # are installed into $libdir/../bin (currently, that works fine)\n\t  # but it's something to keep an eye on.\n\t  test \"$inst_prefix_dir\" = \"$destdir\" && \\\n\t    func_fatal_error \"error: cannot install \\`$file' to a directory not ending in $libdir\"\n\n\t  if test -n \"$inst_prefix_dir\"; then\n\t    # Stick the inst_prefix_dir data into the link command.\n\t    relink_command=`$ECHO \"$relink_command\" | $SED \"s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%\"`\n\t  else\n\t    relink_command=`$ECHO \"$relink_command\" | $SED \"s%@inst_prefix_dir@%%\"`\n\t  fi\n\n\t  func_warning \"relinking \\`$file'\"\n\t  func_show_eval \"$relink_command\" \\\n\t    'func_fatal_error \"error: relink \\`$file'\\'' with the above command before installing it\"'\n\tfi\n\n\t# See the names of the shared library.\n\tset dummy $library_names; shift\n\tif test -n \"$1\"; then\n\t  realname=\"$1\"\n\t  shift\n\n\t  srcname=\"$realname\"\n\t  test -n \"$relink_command\" && srcname=\"$realname\"T\n\n\t  # Install the shared library and build the symlinks.\n\t  func_show_eval \"$install_shared_prog $dir/$srcname $destdir/$realname\" \\\n\t      'exit $?'\n\t  tstripme=\"$stripme\"\n\t  case $host_os in\n\t  cygwin* | mingw* | pw32* | cegcc*)\n\t    case $realname in\n\t    *.dll.a)\n\t      tstripme=\"\"\n\t      ;;\n\t    esac\n\t    ;;\n\t  esac\n\t  if test -n \"$tstripme\" && test -n \"$striplib\"; then\n\t    func_show_eval \"$striplib $destdir/$realname\" 'exit $?'\n\t  fi\n\n\t  if test \"$#\" -gt 0; then\n\t    # Delete the old symlinks, and create new ones.\n\t    # Try `ln -sf' first, because the `ln' binary might depend on\n\t    # the symlink we replace!  Solaris /bin/ln does not understand -f,\n\t    # so we also need to try rm && ln -s.\n\t    for linkname\n\t    do\n\t      test \"$linkname\" != \"$realname\" \\\n\t\t&& func_show_eval \"(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })\"\n\t    done\n\t  fi\n\n\t  # Do each command in the postinstall commands.\n\t  lib=\"$destdir/$realname\"\n\t  func_execute_cmds \"$postinstall_cmds\" 'exit $?'\n\tfi\n\n\t# Install the pseudo-library for information purposes.\n\tfunc_basename \"$file\"\n\tname=\"$func_basename_result\"\n\tinstname=\"$dir/$name\"i\n\tfunc_show_eval \"$install_prog $instname $destdir/$name\" 'exit $?'\n\n\t# Maybe install the static library, too.\n\ttest -n \"$old_library\" && func_append staticlibs \" $dir/$old_library\"\n\t;;\n\n      *.lo)\n\t# Install (i.e. copy) a libtool object.\n\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# Deduce the name of the destination old-style object file.\n\tcase $destfile in\n\t*.lo)\n\t  func_lo2o \"$destfile\"\n\t  staticdest=$func_lo2o_result\n\t  ;;\n\t*.$objext)\n\t  staticdest=\"$destfile\"\n\t  destfile=\n\t  ;;\n\t*)\n\t  func_fatal_help \"cannot copy a libtool object to \\`$destfile'\"\n\t  ;;\n\tesac\n\n\t# Install the libtool object if requested.\n\ttest -n \"$destfile\" && \\\n\t  func_show_eval \"$install_prog $file $destfile\" 'exit $?'\n\n\t# Install the old object if enabled.\n\tif test \"$build_old_libs\" = yes; then\n\t  # Deduce the name of the old-style object file.\n\t  func_lo2o \"$file\"\n\t  staticobj=$func_lo2o_result\n\t  func_show_eval \"$install_prog \\$staticobj \\$staticdest\" 'exit $?'\n\tfi\n\texit $EXIT_SUCCESS\n\t;;\n\n      *)\n\t# Figure out destination file name, if it wasn't already specified.\n\tif test -n \"$destname\"; then\n\t  destfile=\"$destdir/$destname\"\n\telse\n\t  func_basename \"$file\"\n\t  destfile=\"$func_basename_result\"\n\t  destfile=\"$destdir/$destfile\"\n\tfi\n\n\t# If the file is missing, and there is a .exe on the end, strip it\n\t# because it is most likely a libtool script we actually want to\n\t# install\n\tstripped_ext=\"\"\n\tcase $file in\n\t  *.exe)\n\t    if test ! -f \"$file\"; then\n\t      func_stripname '' '.exe' \"$file\"\n\t      file=$func_stripname_result\n\t      stripped_ext=\".exe\"\n\t    fi\n\t    ;;\n\tesac\n\n\t# Do a test to see if this is really a libtool program.\n\tcase $host in\n\t*cygwin* | *mingw*)\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      wrapper=$func_ltwrapper_scriptname_result\n\t    else\n\t      func_stripname '' '.exe' \"$file\"\n\t      wrapper=$func_stripname_result\n\t    fi\n\t    ;;\n\t*)\n\t    wrapper=$file\n\t    ;;\n\tesac\n\tif func_ltwrapper_script_p \"$wrapper\"; then\n\t  notinst_deplibs=\n\t  relink_command=\n\n\t  func_source \"$wrapper\"\n\n\t  # Check the variables that should have been set.\n\t  test -z \"$generated_by_libtool_version\" && \\\n\t    func_fatal_error \"invalid libtool wrapper script \\`$wrapper'\"\n\n\t  finalize=yes\n\t  for lib in $notinst_deplibs; do\n\t    # Check to see that each library is installed.\n\t    libdir=\n\t    if test -f \"$lib\"; then\n\t      func_source \"$lib\"\n\t    fi\n\t    libfile=\"$libdir/\"`$ECHO \"$lib\" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test\n\t    if test -n \"$libdir\" && test ! -f \"$libfile\"; then\n\t      func_warning \"\\`$lib' has not been installed in \\`$libdir'\"\n\t      finalize=no\n\t    fi\n\t  done\n\n\t  relink_command=\n\t  func_source \"$wrapper\"\n\n\t  outputname=\n\t  if test \"$fast_install\" = no && test -n \"$relink_command\"; then\n\t    $opt_dry_run || {\n\t      if test \"$finalize\" = yes; then\n\t        tmpdir=`func_mktempdir`\n\t\tfunc_basename \"$file$stripped_ext\"\n\t\tfile=\"$func_basename_result\"\n\t        outputname=\"$tmpdir/$file\"\n\t        # Replace the output file specification.\n\t        relink_command=`$ECHO \"$relink_command\" | $SED 's%@OUTPUT@%'\"$outputname\"'%g'`\n\n\t        $opt_silent || {\n\t          func_quote_for_expand \"$relink_command\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t        }\n\t        if eval \"$relink_command\"; then :\n\t          else\n\t\t  func_error \"error: relink \\`$file' with the above command before installing it\"\n\t\t  $opt_dry_run || ${RM}r \"$tmpdir\"\n\t\t  continue\n\t        fi\n\t        file=\"$outputname\"\n\t      else\n\t        func_warning \"cannot relink \\`$file'\"\n\t      fi\n\t    }\n\t  else\n\t    # Install the binary that we compiled earlier.\n\t    file=`$ECHO \"$file$stripped_ext\" | $SED \"s%\\([^/]*\\)$%$objdir/\\1%\"`\n\t  fi\n\tfi\n\n\t# remove .exe since cygwin /usr/bin/install will append another\n\t# one anyway\n\tcase $install_prog,$host in\n\t*/usr/bin/install*,*cygwin*)\n\t  case $file:$destfile in\n\t  *.exe:*.exe)\n\t    # this is ok\n\t    ;;\n\t  *.exe:*)\n\t    destfile=$destfile.exe\n\t    ;;\n\t  *:*.exe)\n\t    func_stripname '' '.exe' \"$destfile\"\n\t    destfile=$func_stripname_result\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tfunc_show_eval \"$install_prog\\$stripme \\$file \\$destfile\" 'exit $?'\n\t$opt_dry_run || if test -n \"$outputname\"; then\n\t  ${RM}r \"$tmpdir\"\n\tfi\n\t;;\n      esac\n    done\n\n    for file in $staticlibs; do\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n\n      # Set up the ranlib parameters.\n      oldlib=\"$destdir/$name\"\n      func_to_tool_file \"$oldlib\" func_convert_file_msys_to_w32\n      tool_oldlib=$func_to_tool_file_result\n\n      func_show_eval \"$install_prog \\$file \\$oldlib\" 'exit $?'\n\n      if test -n \"$stripme\" && test -n \"$old_striplib\"; then\n\tfunc_show_eval \"$old_striplib $tool_oldlib\" 'exit $?'\n      fi\n\n      # Do each command in the postinstall commands.\n      func_execute_cmds \"$old_postinstall_cmds\" 'exit $?'\n    done\n\n    test -n \"$future_libdirs\" && \\\n      func_warning \"remember to run \\`$progname --finish$future_libdirs'\"\n\n    if test -n \"$current_libdirs\"; then\n      # Maybe just do a dry run.\n      $opt_dry_run && current_libdirs=\" -n$current_libdirs\"\n      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'\n    else\n      exit $EXIT_SUCCESS\n    fi\n}\n\ntest \"$opt_mode\" = install && func_mode_install ${1+\"$@\"}\n\n\n# func_generate_dlsyms outputname originator pic_p\n# Extract symbols from dlprefiles and create ${outputname}S.o with\n# a dlpreopen symbol table.\nfunc_generate_dlsyms ()\n{\n    $opt_debug\n    my_outputname=\"$1\"\n    my_originator=\"$2\"\n    my_pic_p=\"${3-no}\"\n    my_prefix=`$ECHO \"$my_originator\" | sed 's%[^a-zA-Z0-9]%_%g'`\n    my_dlsyms=\n\n    if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n      if test -n \"$NM\" && test -n \"$global_symbol_pipe\"; then\n\tmy_dlsyms=\"${my_outputname}S.c\"\n      else\n\tfunc_error \"not configured to extract global symbols from dlpreopened files\"\n      fi\n    fi\n\n    if test -n \"$my_dlsyms\"; then\n      case $my_dlsyms in\n      \"\") ;;\n      *.c)\n\t# Discover the nlist of each of the dlfiles.\n\tnlist=\"$output_objdir/${my_outputname}.nm\"\n\n\tfunc_show_eval \"$RM $nlist ${nlist}S ${nlist}T\"\n\n\t# Parse the name list into a source file.\n\tfunc_verbose \"creating $output_objdir/$my_dlsyms\"\n\n\t$opt_dry_run || $ECHO > \"$output_objdir/$my_dlsyms\" \"\\\n/* $my_dlsyms - symbol resolution table for \\`$my_outputname' dlsym emulation. */\n/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */\n\n#ifdef __cplusplus\nextern \\\"C\\\" {\n#endif\n\n#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))\n#pragma GCC diagnostic ignored \\\"-Wstrict-prototypes\\\"\n#endif\n\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT_DLSYM_CONST\n#else\n# define LT_DLSYM_CONST const\n#endif\n\n/* External symbol declarations for the compiler. */\\\n\"\n\n\tif test \"$dlself\" = yes; then\n\t  func_verbose \"generating symbol list for \\`$output'\"\n\n\t  $opt_dry_run || echo ': @PROGRAM@ ' > \"$nlist\"\n\n\t  # Add our own program objects to the symbol list.\n\t  progfiles=`$ECHO \"$objs$old_deplibs\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\t  for progfile in $progfiles; do\n\t    func_to_tool_file \"$progfile\" func_convert_file_msys_to_w32\n\t    func_verbose \"extracting global C symbols from \\`$func_to_tool_file_result'\"\n\t    $opt_dry_run || eval \"$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'\"\n\t  done\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  if test -n \"$export_symbols_regex\"; then\n\t    $opt_dry_run || {\n\t      eval '$EGREP -e \"$export_symbols_regex\" \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t    }\n\t  fi\n\n\t  # Prepare the list of exported symbols\n\t  if test -z \"$export_symbols\"; then\n\t    export_symbols=\"$output_objdir/$outputname.exp\"\n\t    $opt_dry_run || {\n\t      $RM $export_symbols\n\t      eval \"${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \\(.*\\)$/\\1/p' \"'< \"$nlist\" > \"$export_symbols\"'\n\t      case $host in\n\t      *cygwin* | *mingw* | *cegcc* )\n                eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n                eval 'cat \"$export_symbols\" >> \"$output_objdir/$outputname.def\"'\n\t        ;;\n\t      esac\n\t    }\n\t  else\n\t    $opt_dry_run || {\n\t      eval \"${SED} -e 's/\\([].[*^$]\\)/\\\\\\\\\\1/g' -e 's/^/ /' -e 's/$/$/'\"' < \"$export_symbols\" > \"$output_objdir/$outputname.exp\"'\n\t      eval '$GREP -f \"$output_objdir/$outputname.exp\" < \"$nlist\" > \"$nlist\"T'\n\t      eval '$MV \"$nlist\"T \"$nlist\"'\n\t      case $host in\n\t        *cygwin* | *mingw* | *cegcc* )\n\t          eval \"echo EXPORTS \"'> \"$output_objdir/$outputname.def\"'\n\t          eval 'cat \"$nlist\" >> \"$output_objdir/$outputname.def\"'\n\t          ;;\n\t      esac\n\t    }\n\t  fi\n\tfi\n\n\tfor dlprefile in $dlprefiles; do\n\t  func_verbose \"extracting global C symbols from \\`$dlprefile'\"\n\t  func_basename \"$dlprefile\"\n\t  name=\"$func_basename_result\"\n          case $host in\n\t    *cygwin* | *mingw* | *cegcc* )\n\t      # if an import library, we need to obtain dlname\n\t      if func_win32_import_lib_p \"$dlprefile\"; then\n\t        func_tr_sh \"$dlprefile\"\n\t        eval \"curr_lafile=\\$libfile_$func_tr_sh_result\"\n\t        dlprefile_dlbasename=\"\"\n\t        if test -n \"$curr_lafile\" && func_lalib_p \"$curr_lafile\"; then\n\t          # Use subshell, to avoid clobbering current variable values\n\t          dlprefile_dlname=`source \"$curr_lafile\" && echo \"$dlname\"`\n\t          if test -n \"$dlprefile_dlname\" ; then\n\t            func_basename \"$dlprefile_dlname\"\n\t            dlprefile_dlbasename=\"$func_basename_result\"\n\t          else\n\t            # no lafile. user explicitly requested -dlpreopen <import library>.\n\t            $sharedlib_from_linklib_cmd \"$dlprefile\"\n\t            dlprefile_dlbasename=$sharedlib_from_linklib_result\n\t          fi\n\t        fi\n\t        $opt_dry_run || {\n\t          if test -n \"$dlprefile_dlbasename\" ; then\n\t            eval '$ECHO \": $dlprefile_dlbasename\" >> \"$nlist\"'\n\t          else\n\t            func_warning \"Could not compute DLL name from $name\"\n\t            eval '$ECHO \": $name \" >> \"$nlist\"'\n\t          fi\n\t          func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t          eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe |\n\t            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'\"\n\t        }\n\t      else # not an import lib\n\t        $opt_dry_run || {\n\t          eval '$ECHO \": $name \" >> \"$nlist\"'\n\t          func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t          eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe >> '$nlist'\"\n\t        }\n\t      fi\n\t    ;;\n\t    *)\n\t      $opt_dry_run || {\n\t        eval '$ECHO \": $name \" >> \"$nlist\"'\n\t        func_to_tool_file \"$dlprefile\" func_convert_file_msys_to_w32\n\t        eval \"$NM \\\"$func_to_tool_file_result\\\" 2>/dev/null | $global_symbol_pipe >> '$nlist'\"\n\t      }\n\t    ;;\n          esac\n\tdone\n\n\t$opt_dry_run || {\n\t  # Make sure we have at least an empty file.\n\t  test -f \"$nlist\" || : > \"$nlist\"\n\n\t  if test -n \"$exclude_expsyms\"; then\n\t    $EGREP -v \" ($exclude_expsyms)$\" \"$nlist\" > \"$nlist\"T\n\t    $MV \"$nlist\"T \"$nlist\"\n\t  fi\n\n\t  # Try sorting and uniquifying the output.\n\t  if $GREP -v \"^: \" < \"$nlist\" |\n\t      if sort -k 3 </dev/null >/dev/null 2>&1; then\n\t\tsort -k 3\n\t      else\n\t\tsort +2\n\t      fi |\n\t      uniq > \"$nlist\"S; then\n\t    :\n\t  else\n\t    $GREP -v \"^: \" < \"$nlist\" > \"$nlist\"S\n\t  fi\n\n\t  if test -f \"$nlist\"S; then\n\t    eval \"$global_symbol_to_cdecl\"' < \"$nlist\"S >> \"$output_objdir/$my_dlsyms\"'\n\t  else\n\t    echo '/* NONE */' >> \"$output_objdir/$my_dlsyms\"\n\t  fi\n\n\t  echo >> \"$output_objdir/$my_dlsyms\" \"\\\n\n/* The mapping between symbol names and symbols.  */\ntypedef struct {\n  const char *name;\n  void *address;\n} lt_dlsymlist;\nextern LT_DLSYM_CONST lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[];\nLT_DLSYM_CONST lt_dlsymlist\nlt_${my_prefix}_LTX_preloaded_symbols[] =\n{\\\n  { \\\"$my_originator\\\", (void *) 0 },\"\n\n\t  case $need_lib_prefix in\n\t  no)\n\t    eval \"$global_symbol_to_c_name_address\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  *)\n\t    eval \"$global_symbol_to_c_name_address_lib_prefix\" < \"$nlist\" >> \"$output_objdir/$my_dlsyms\"\n\t    ;;\n\t  esac\n\t  echo >> \"$output_objdir/$my_dlsyms\" \"\\\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt_${my_prefix}_LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\\\n\"\n\t} # !$opt_dry_run\n\n\tpic_flag_for_symtable=\n\tcase \"$compile_command \" in\n\t*\" -static \"*) ;;\n\t*)\n\t  case $host in\n\t  # compiling the symbol table file with pic_flag works around\n\t  # a FreeBSD bug that causes programs to crash when -lm is\n\t  # linked before any other PIC object.  But we must not use\n\t  # pic_flag when linking with -static.  The problem exists in\n\t  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.\n\t  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)\n\t    pic_flag_for_symtable=\" $pic_flag -DFREEBSD_WORKAROUND\" ;;\n\t  *-*-hpux*)\n\t    pic_flag_for_symtable=\" $pic_flag\"  ;;\n\t  *)\n\t    if test \"X$my_pic_p\" != Xno; then\n\t      pic_flag_for_symtable=\" $pic_flag\"\n\t    fi\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tsymtab_cflags=\n\tfor arg in $LTCFLAGS; do\n\t  case $arg in\n\t  -pie | -fpie | -fPIE) ;;\n\t  *) func_append symtab_cflags \" $arg\" ;;\n\t  esac\n\tdone\n\n\t# Now compile the dynamic symbol file.\n\tfunc_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable \"$my_dlsyms\")' 'exit $?'\n\n\t# Clean up the generated files.\n\tfunc_show_eval '$RM \"$output_objdir/$my_dlsyms\" \"$nlist\" \"${nlist}S\" \"${nlist}T\"'\n\n\t# Transform the symbol file into the correct name.\n\tsymfileobj=\"$output_objdir/${my_outputname}S.$objext\"\n\tcase $host in\n\t*cygwin* | *mingw* | *cegcc* )\n\t  if test -f \"$output_objdir/$my_outputname.def\"; then\n\t    compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t    finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%\"`\n\t  else\n\t    compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t    finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  fi\n\t  ;;\n\t*)\n\t  compile_command=`$ECHO \"$compile_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  finalize_command=`$ECHO \"$finalize_command\" | $SED \"s%@SYMFILE@%$symfileobj%\"`\n\t  ;;\n\tesac\n\t;;\n      *)\n\tfunc_fatal_error \"unknown suffix for \\`$my_dlsyms'\"\n\t;;\n      esac\n    else\n      # We keep going just in case the user didn't refer to\n      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe\n      # really was required.\n\n      # Nullify the symbol file.\n      compile_command=`$ECHO \"$compile_command\" | $SED \"s% @SYMFILE@%%\"`\n      finalize_command=`$ECHO \"$finalize_command\" | $SED \"s% @SYMFILE@%%\"`\n    fi\n}\n\n# func_win32_libid arg\n# return the library type of file 'arg'\n#\n# Need a lot of goo to handle *both* DLLs and import libs\n# Has to be a shell function in order to 'eat' the argument\n# that is supplied when $file_magic_command is called.\n# Despite the name, also deal with 64 bit binaries.\nfunc_win32_libid ()\n{\n  $opt_debug\n  win32_libid_type=\"unknown\"\n  win32_fileres=`file -L $1 2>/dev/null`\n  case $win32_fileres in\n  *ar\\ archive\\ import\\ library*) # definitely import\n    win32_libid_type=\"x86 archive import\"\n    ;;\n  *ar\\ archive*) # could be an import, or static\n    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.\n    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |\n       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then\n      func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n      win32_nmres=`eval $NM -f posix -A \\\"$func_to_tool_file_result\\\" |\n\t$SED -n -e '\n\t    1,100{\n\t\t/ I /{\n\t\t    s,.*,import,\n\t\t    p\n\t\t    q\n\t\t}\n\t    }'`\n      case $win32_nmres in\n      import*)  win32_libid_type=\"x86 archive import\";;\n      *)        win32_libid_type=\"x86 archive static\";;\n      esac\n    fi\n    ;;\n  *DLL*)\n    win32_libid_type=\"x86 DLL\"\n    ;;\n  *executable*) # but shell scripts are \"executable\" too...\n    case $win32_fileres in\n    *MS\\ Windows\\ PE\\ Intel*)\n      win32_libid_type=\"x86 DLL\"\n      ;;\n    esac\n    ;;\n  esac\n  $ECHO \"$win32_libid_type\"\n}\n\n# func_cygming_dll_for_implib ARG\n#\n# Platform-specific function to extract the\n# name of the DLL associated with the specified\n# import library ARG.\n# Invoked by eval'ing the libtool variable\n#    $sharedlib_from_linklib_cmd\n# Result is available in the variable\n#    $sharedlib_from_linklib_result\nfunc_cygming_dll_for_implib ()\n{\n  $opt_debug\n  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify \"$1\"`\n}\n\n# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs\n#\n# The is the core of a fallback implementation of a\n# platform-specific function to extract the name of the\n# DLL associated with the specified import library LIBNAME.\n#\n# SECTION_NAME is either .idata$6 or .idata$7, depending\n# on the platform and compiler that created the implib.\n#\n# Echos the name of the DLL associated with the\n# specified import library.\nfunc_cygming_dll_for_implib_fallback_core ()\n{\n  $opt_debug\n  match_literal=`$ECHO \"$1\" | $SED \"$sed_make_literal_regex\"`\n  $OBJDUMP -s --section \"$1\" \"$2\" 2>/dev/null |\n    $SED '/^Contents of section '\"$match_literal\"':/{\n      # Place marker at beginning of archive member dllname section\n      s/.*/====MARK====/\n      p\n      d\n    }\n    # These lines can sometimes be longer than 43 characters, but\n    # are always uninteresting\n    /:[\t ]*file format pe[i]\\{,1\\}-/d\n    /^In archive [^:]*:/d\n    # Ensure marker is printed\n    /^====MARK====/p\n    # Remove all lines with less than 43 characters\n    /^.\\{43\\}/!d\n    # From remaining lines, remove first 43 characters\n    s/^.\\{43\\}//' |\n    $SED -n '\n      # Join marker and all lines until next marker into a single line\n      /^====MARK====/ b para\n      H\n      $ b para\n      b\n      :para\n      x\n      s/\\n//g\n      # Remove the marker\n      s/^====MARK====//\n      # Remove trailing dots and whitespace\n      s/[\\. \\t]*$//\n      # Print\n      /./p' |\n    # we now have a list, one entry per line, of the stringified\n    # contents of the appropriate section of all members of the\n    # archive which possess that section. Heuristic: eliminate\n    # all those which have a first or second character that is\n    # a '.' (that is, objdump's representation of an unprintable\n    # character.) This should work for all archives with less than\n    # 0x302f exports -- but will fail for DLLs whose name actually\n    # begins with a literal '.' or a single character followed by\n    # a '.'.\n    #\n    # Of those that remain, print the first one.\n    $SED -e '/^\\./d;/^.\\./d;q'\n}\n\n# func_cygming_gnu_implib_p ARG\n# This predicate returns with zero status (TRUE) if\n# ARG is a GNU/binutils-style import library. Returns\n# with nonzero status (FALSE) otherwise.\nfunc_cygming_gnu_implib_p ()\n{\n  $opt_debug\n  func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n  func_cygming_gnu_implib_tmp=`$NM \"$func_to_tool_file_result\" | eval \"$global_symbol_pipe\" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`\n  test -n \"$func_cygming_gnu_implib_tmp\"\n}\n\n# func_cygming_ms_implib_p ARG\n# This predicate returns with zero status (TRUE) if\n# ARG is an MS-style import library. Returns\n# with nonzero status (FALSE) otherwise.\nfunc_cygming_ms_implib_p ()\n{\n  $opt_debug\n  func_to_tool_file \"$1\" func_convert_file_msys_to_w32\n  func_cygming_ms_implib_tmp=`$NM \"$func_to_tool_file_result\" | eval \"$global_symbol_pipe\" | $GREP '_NULL_IMPORT_DESCRIPTOR'`\n  test -n \"$func_cygming_ms_implib_tmp\"\n}\n\n# func_cygming_dll_for_implib_fallback ARG\n# Platform-specific function to extract the\n# name of the DLL associated with the specified\n# import library ARG.\n#\n# This fallback implementation is for use when $DLLTOOL\n# does not support the --identify-strict option.\n# Invoked by eval'ing the libtool variable\n#    $sharedlib_from_linklib_cmd\n# Result is available in the variable\n#    $sharedlib_from_linklib_result\nfunc_cygming_dll_for_implib_fallback ()\n{\n  $opt_debug\n  if func_cygming_gnu_implib_p \"$1\" ; then\n    # binutils import library\n    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' \"$1\"`\n  elif func_cygming_ms_implib_p \"$1\" ; then\n    # ms-generated import library\n    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' \"$1\"`\n  else\n    # unknown\n    sharedlib_from_linklib_result=\"\"\n  fi\n}\n\n\n# func_extract_an_archive dir oldlib\nfunc_extract_an_archive ()\n{\n    $opt_debug\n    f_ex_an_ar_dir=\"$1\"; shift\n    f_ex_an_ar_oldlib=\"$1\"\n    if test \"$lock_old_archive_extraction\" = yes; then\n      lockfile=$f_ex_an_ar_oldlib.lock\n      until $opt_dry_run || ln \"$progpath\" \"$lockfile\" 2>/dev/null; do\n\tfunc_echo \"Waiting for $lockfile to be removed\"\n\tsleep 2\n      done\n    fi\n    func_show_eval \"(cd \\$f_ex_an_ar_dir && $AR x \\\"\\$f_ex_an_ar_oldlib\\\")\" \\\n\t\t   'stat=$?; rm -f \"$lockfile\"; exit $stat'\n    if test \"$lock_old_archive_extraction\" = yes; then\n      $opt_dry_run || rm -f \"$lockfile\"\n    fi\n    if ($AR t \"$f_ex_an_ar_oldlib\" | sort | sort -uc >/dev/null 2>&1); then\n     :\n    else\n      func_fatal_error \"object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib\"\n    fi\n}\n\n\n# func_extract_archives gentop oldlib ...\nfunc_extract_archives ()\n{\n    $opt_debug\n    my_gentop=\"$1\"; shift\n    my_oldlibs=${1+\"$@\"}\n    my_oldobjs=\"\"\n    my_xlib=\"\"\n    my_xabs=\"\"\n    my_xdir=\"\"\n\n    for my_xlib in $my_oldlibs; do\n      # Extract the objects.\n      case $my_xlib in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) my_xabs=\"$my_xlib\" ;;\n\t*) my_xabs=`pwd`\"/$my_xlib\" ;;\n      esac\n      func_basename \"$my_xlib\"\n      my_xlib=\"$func_basename_result\"\n      my_xlib_u=$my_xlib\n      while :; do\n        case \" $extracted_archives \" in\n\t*\" $my_xlib_u \"*)\n\t  func_arith $extracted_serial + 1\n\t  extracted_serial=$func_arith_result\n\t  my_xlib_u=lt$extracted_serial-$my_xlib ;;\n\t*) break ;;\n\tesac\n      done\n      extracted_archives=\"$extracted_archives $my_xlib_u\"\n      my_xdir=\"$my_gentop/$my_xlib_u\"\n\n      func_mkdir_p \"$my_xdir\"\n\n      case $host in\n      *-darwin*)\n\tfunc_verbose \"Extracting $my_xabs\"\n\t# Do not bother doing anything if just a dry run\n\t$opt_dry_run || {\n\t  darwin_orig_dir=`pwd`\n\t  cd $my_xdir || exit $?\n\t  darwin_archive=$my_xabs\n\t  darwin_curdir=`pwd`\n\t  darwin_base_archive=`basename \"$darwin_archive\"`\n\t  darwin_arches=`$LIPO -info \"$darwin_archive\" 2>/dev/null | $GREP Architectures 2>/dev/null || true`\n\t  if test -n \"$darwin_arches\"; then\n\t    darwin_arches=`$ECHO \"$darwin_arches\" | $SED -e 's/.*are://'`\n\t    darwin_arch=\n\t    func_verbose \"$darwin_base_archive has multiple architectures $darwin_arches\"\n\t    for darwin_arch in  $darwin_arches ; do\n\t      func_mkdir_p \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      $LIPO -thin $darwin_arch -output \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\" \"${darwin_archive}\"\n\t      cd \"unfat-$$/${darwin_base_archive}-${darwin_arch}\"\n\t      func_extract_an_archive \"`pwd`\" \"${darwin_base_archive}\"\n\t      cd \"$darwin_curdir\"\n\t      $RM \"unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}\"\n\t    done # $darwin_arches\n            ## Okay now we've a bunch of thin objects, gotta fatten them up :)\n\t    darwin_filelist=`find unfat-$$ -type f -name \\*.o -print -o -name \\*.lo -print | $SED -e \"$basename\" | sort -u`\n\t    darwin_file=\n\t    darwin_files=\n\t    for darwin_file in $darwin_filelist; do\n\t      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`\n\t      $LIPO -create -output \"$darwin_file\" $darwin_files\n\t    done # $darwin_filelist\n\t    $RM -rf unfat-$$\n\t    cd \"$darwin_orig_dir\"\n\t  else\n\t    cd $darwin_orig_dir\n\t    func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t  fi # $darwin_arches\n\t} # !$opt_dry_run\n\t;;\n      *)\n        func_extract_an_archive \"$my_xdir\" \"$my_xabs\"\n\t;;\n      esac\n      my_oldobjs=\"$my_oldobjs \"`find $my_xdir -name \\*.$objext -print -o -name \\*.lo -print | sort | $NL2SP`\n    done\n\n    func_extract_archives_result=\"$my_oldobjs\"\n}\n\n\n# func_emit_wrapper [arg=no]\n#\n# Emit a libtool wrapper script on stdout.\n# Don't directly open a file because we may want to\n# incorporate the script contents within a cygwin/mingw\n# wrapper executable.  Must ONLY be called from within\n# func_mode_link because it depends on a number of variables\n# set therein.\n#\n# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\n# variable will take.  If 'yes', then the emitted script\n# will assume that the directory in which it is stored is\n# the $objdir directory.  This is a cygwin/mingw-specific\n# behavior.\nfunc_emit_wrapper ()\n{\n\tfunc_emit_wrapper_arg1=${1-no}\n\n\t$ECHO \"\\\n#! $SHELL\n\n# $output - temporary wrapper script for $objdir/$outputname\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# The $output program cannot be directly executed until all the libtool\n# libraries that it depends on are installed.\n#\n# This wrapper script should never be moved out of the build directory.\n# If it is, it will not operate correctly.\n\n# Sed substitution that helps us do robust quoting.  It backslashifies\n# metacharacters that are still active within double-quoted strings.\nsed_quote_subst='$sed_quote_subst'\n\n# Be Bourne compatible\nif test -n \\\"\\${ZSH_VERSION+set}\\\" && (emulate sh) >/dev/null 2>&1; then\n  emulate sh\n  NULLCMD=:\n  # Zsh 3.x and 4.x performs 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 *posix*) set -o posix;; esac\nfi\nBIN_SH=xpg4; export BIN_SH # for Tru64\nDUALCASE=1; export DUALCASE # for MKS sh\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nrelink_command=\\\"$relink_command\\\"\n\n# This environment variable determines our operation mode.\nif test \\\"\\$libtool_install_magic\\\" = \\\"$magic\\\"; then\n  # install mode needs the following variables:\n  generated_by_libtool_version='$macro_version'\n  notinst_deplibs='$notinst_deplibs'\nelse\n  # When we are sourced in execute mode, \\$file and \\$ECHO are already set.\n  if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n    file=\\\"\\$0\\\"\"\n\n    qECHO=`$ECHO \"$ECHO\" | $SED \"$sed_quote_subst\"`\n    $ECHO \"\\\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$1\n_LTECHO_EOF'\n}\n    ECHO=\\\"$qECHO\\\"\n  fi\n\n# Very basic option parsing. These options are (a) specific to\n# the libtool wrapper, (b) are identical between the wrapper\n# /script/ and the wrapper /executable/ which is used only on\n# windows platforms, and (c) all begin with the string \"--lt-\"\n# (application programs are unlikely to have options which match\n# this pattern).\n#\n# There are only two supported options: --lt-debug and\n# --lt-dump-script. There is, deliberately, no --lt-help.\n#\n# The first argument to this parsing function should be the\n# script's $0 value, followed by \"$@\".\nlt_option_debug=\nfunc_parse_lt_options ()\n{\n  lt_script_arg0=\\$0\n  shift\n  for lt_opt\n  do\n    case \\\"\\$lt_opt\\\" in\n    --lt-debug) lt_option_debug=1 ;;\n    --lt-dump-script)\n        lt_dump_D=\\`\\$ECHO \\\"X\\$lt_script_arg0\\\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\\`\n        test \\\"X\\$lt_dump_D\\\" = \\\"X\\$lt_script_arg0\\\" && lt_dump_D=.\n        lt_dump_F=\\`\\$ECHO \\\"X\\$lt_script_arg0\\\" | $SED -e 's/^X//' -e 's%^.*/%%'\\`\n        cat \\\"\\$lt_dump_D/\\$lt_dump_F\\\"\n        exit 0\n      ;;\n    --lt-*)\n        \\$ECHO \\\"Unrecognized --lt- option: '\\$lt_opt'\\\" 1>&2\n        exit 1\n      ;;\n    esac\n  done\n\n  # Print the debug banner immediately:\n  if test -n \\\"\\$lt_option_debug\\\"; then\n    echo \\\"${outputname}:${output}:\\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\\\" 1>&2\n  fi\n}\n\n# Used when --lt-debug. Prints its arguments to stdout\n# (redirection is the responsibility of the caller)\nfunc_lt_dump_args ()\n{\n  lt_dump_args_N=1;\n  for lt_arg\n  do\n    \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[\\$lt_dump_args_N]: \\$lt_arg\\\"\n    lt_dump_args_N=\\`expr \\$lt_dump_args_N + 1\\`\n  done\n}\n\n# Core function for launching the target application\nfunc_exec_program_core ()\n{\n\"\n  case $host in\n  # Backslashes separate directories on plain windows\n  *-*-mingw | *-*-os2* | *-cegcc*)\n    $ECHO \"\\\n      if test -n \\\"\\$lt_option_debug\\\"; then\n        \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[0]: \\$progdir\\\\\\\\\\$program\\\" 1>&2\n        func_lt_dump_args \\${1+\\\"\\$@\\\"} 1>&2\n      fi\n      exec \\\"\\$progdir\\\\\\\\\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n    ;;\n\n  *)\n    $ECHO \"\\\n      if test -n \\\"\\$lt_option_debug\\\"; then\n        \\$ECHO \\\"${outputname}:${output}:\\${LINENO}: newargv[0]: \\$progdir/\\$program\\\" 1>&2\n        func_lt_dump_args \\${1+\\\"\\$@\\\"} 1>&2\n      fi\n      exec \\\"\\$progdir/\\$program\\\" \\${1+\\\"\\$@\\\"}\n\"\n    ;;\n  esac\n  $ECHO \"\\\n      \\$ECHO \\\"\\$0: cannot exec \\$program \\$*\\\" 1>&2\n      exit 1\n}\n\n# A function to encapsulate launching the target application\n# Strips options in the --lt-* namespace from \\$@ and\n# launches target application with the remaining arguments.\nfunc_exec_program ()\n{\n  case \\\" \\$* \\\" in\n  *\\\\ --lt-*)\n    for lt_wr_arg\n    do\n      case \\$lt_wr_arg in\n      --lt-*) ;;\n      *) set x \\\"\\$@\\\" \\\"\\$lt_wr_arg\\\"; shift;;\n      esac\n      shift\n    done ;;\n  esac\n  func_exec_program_core \\${1+\\\"\\$@\\\"}\n}\n\n  # Parse options\n  func_parse_lt_options \\\"\\$0\\\" \\${1+\\\"\\$@\\\"}\n\n  # Find the directory that this script lives in.\n  thisdir=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%/[^/]*$%%'\\`\n  test \\\"x\\$thisdir\\\" = \\\"x\\$file\\\" && thisdir=.\n\n  # Follow symbolic links until we get to the real thisdir.\n  file=\\`ls -ld \\\"\\$file\\\" | $SED -n 's/.*-> //p'\\`\n  while test -n \\\"\\$file\\\"; do\n    destdir=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%/[^/]*\\$%%'\\`\n\n    # If there was a directory component, then change thisdir.\n    if test \\\"x\\$destdir\\\" != \\\"x\\$file\\\"; then\n      case \\\"\\$destdir\\\" in\n      [\\\\\\\\/]* | [A-Za-z]:[\\\\\\\\/]*) thisdir=\\\"\\$destdir\\\" ;;\n      *) thisdir=\\\"\\$thisdir/\\$destdir\\\" ;;\n      esac\n    fi\n\n    file=\\`\\$ECHO \\\"\\$file\\\" | $SED 's%^.*/%%'\\`\n    file=\\`ls -ld \\\"\\$thisdir/\\$file\\\" | $SED -n 's/.*-> //p'\\`\n  done\n\n  # Usually 'no', except on cygwin/mingw when embedded into\n  # the cwrapper.\n  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1\n  if test \\\"\\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\\\" = \\\"yes\\\"; then\n    # special case for '.'\n    if test \\\"\\$thisdir\\\" = \\\".\\\"; then\n      thisdir=\\`pwd\\`\n    fi\n    # remove .libs from thisdir\n    case \\\"\\$thisdir\\\" in\n    *[\\\\\\\\/]$objdir ) thisdir=\\`\\$ECHO \\\"\\$thisdir\\\" | $SED 's%[\\\\\\\\/][^\\\\\\\\/]*$%%'\\` ;;\n    $objdir )   thisdir=. ;;\n    esac\n  fi\n\n  # Try to get the absolute directory name.\n  absdir=\\`cd \\\"\\$thisdir\\\" && pwd\\`\n  test -n \\\"\\$absdir\\\" && thisdir=\\\"\\$absdir\\\"\n\"\n\n\tif test \"$fast_install\" = yes; then\n\t  $ECHO \"\\\n  program=lt-'$outputname'$exeext\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\n  if test ! -f \\\"\\$progdir/\\$program\\\" ||\n     { file=\\`ls -1dt \\\"\\$progdir/\\$program\\\" \\\"\\$progdir/../\\$program\\\" 2>/dev/null | ${SED} 1q\\`; \\\\\n       test \\\"X\\$file\\\" != \\\"X\\$progdir/\\$program\\\"; }; then\n\n    file=\\\"\\$\\$-\\$program\\\"\n\n    if test ! -d \\\"\\$progdir\\\"; then\n      $MKDIR \\\"\\$progdir\\\"\n    else\n      $RM \\\"\\$progdir/\\$file\\\"\n    fi\"\n\n\t  $ECHO \"\\\n\n    # relink executable if necessary\n    if test -n \\\"\\$relink_command\\\"; then\n      if relink_command_output=\\`eval \\$relink_command 2>&1\\`; then :\n      else\n\t$ECHO \\\"\\$relink_command_output\\\" >&2\n\t$RM \\\"\\$progdir/\\$file\\\"\n\texit 1\n      fi\n    fi\n\n    $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\" 2>/dev/null ||\n    { $RM \\\"\\$progdir/\\$program\\\";\n      $MV \\\"\\$progdir/\\$file\\\" \\\"\\$progdir/\\$program\\\"; }\n    $RM \\\"\\$progdir/\\$file\\\"\n  fi\"\n\telse\n\t  $ECHO \"\\\n  program='$outputname'\n  progdir=\\\"\\$thisdir/$objdir\\\"\n\"\n\tfi\n\n\t$ECHO \"\\\n\n  if test -f \\\"\\$progdir/\\$program\\\"; then\"\n\n\t# fixup the dll searchpath if we need to.\n\t#\n\t# Fix the DLL searchpath if we need to.  Do this before prepending\n\t# to shlibpath, because on Windows, both are PATH and uninstalled\n\t# libraries must come first.\n\tif test -n \"$dllsearchpath\"; then\n\t  $ECHO \"\\\n    # Add the dll search path components to the executable PATH\n    PATH=$dllsearchpath:\\$PATH\n\"\n\tfi\n\n\t# Export our shlibpath_var if we have one.\n\tif test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n\t  $ECHO \"\\\n    # Add our own library path to $shlibpath_var\n    $shlibpath_var=\\\"$temp_rpath\\$$shlibpath_var\\\"\n\n    # Some systems cannot cope with colon-terminated $shlibpath_var\n    # The second colon is a workaround for a bug in BeOS R4 sed\n    $shlibpath_var=\\`\\$ECHO \\\"\\$$shlibpath_var\\\" | $SED 's/::*\\$//'\\`\n\n    export $shlibpath_var\n\"\n\tfi\n\n\t$ECHO \"\\\n    if test \\\"\\$libtool_execute_magic\\\" != \\\"$magic\\\"; then\n      # Run the actual program with our arguments.\n      func_exec_program \\${1+\\\"\\$@\\\"}\n    fi\n  else\n    # The program doesn't exist.\n    \\$ECHO \\\"\\$0: error: \\\\\\`\\$progdir/\\$program' does not exist\\\" 1>&2\n    \\$ECHO \\\"This script is just a wrapper for \\$program.\\\" 1>&2\n    \\$ECHO \\\"See the $PACKAGE documentation for more information.\\\" 1>&2\n    exit 1\n  fi\nfi\\\n\"\n}\n\n\n# func_emit_cwrapperexe_src\n# emit the source code for a wrapper executable on stdout\n# Must ONLY be called from within func_mode_link because\n# it depends on a number of variable set therein.\nfunc_emit_cwrapperexe_src ()\n{\n\tcat <<EOF\n\n/* $cwrappersource - temporary wrapper executable for $objdir/$outputname\n   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n\n   The $output program cannot be directly executed until all the libtool\n   libraries that it depends on are installed.\n\n   This wrapper executable should never be moved out of the build directory.\n   If it is, it will not operate correctly.\n*/\nEOF\n\t    cat <<\"EOF\"\n#ifdef _MSC_VER\n# define _CRT_SECURE_NO_DEPRECATE 1\n#endif\n#include <stdio.h>\n#include <stdlib.h>\n#ifdef _MSC_VER\n# include <direct.h>\n# include <process.h>\n# include <io.h>\n#else\n# include <unistd.h>\n# include <stdint.h>\n# ifdef __CYGWIN__\n#  include <io.h>\n# endif\n#endif\n#include <malloc.h>\n#include <stdarg.h>\n#include <assert.h>\n#include <string.h>\n#include <ctype.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <sys/stat.h>\n\n/* declarations of non-ANSI functions */\n#if defined(__MINGW32__)\n# ifdef __STRICT_ANSI__\nint _putenv (const char *);\n# endif\n#elif defined(__CYGWIN__)\n# ifdef __STRICT_ANSI__\nchar *realpath (const char *, char *);\nint putenv (char *);\nint setenv (const char *, const char *, int);\n# endif\n/* #elif defined (other platforms) ... */\n#endif\n\n/* portability defines, excluding path handling macros */\n#if defined(_MSC_VER)\n# define setmode _setmode\n# define stat    _stat\n# define chmod   _chmod\n# define getcwd  _getcwd\n# define putenv  _putenv\n# define S_IXUSR _S_IEXEC\n# ifndef _INTPTR_T_DEFINED\n#  define _INTPTR_T_DEFINED\n#  define intptr_t int\n# endif\n#elif defined(__MINGW32__)\n# define setmode _setmode\n# define stat    _stat\n# define chmod   _chmod\n# define getcwd  _getcwd\n# define putenv  _putenv\n#elif defined(__CYGWIN__)\n# define HAVE_SETENV\n# define FOPEN_WB \"wb\"\n/* #elif defined (other platforms) ... */\n#endif\n\n#if defined(PATH_MAX)\n# define LT_PATHMAX PATH_MAX\n#elif defined(MAXPATHLEN)\n# define LT_PATHMAX MAXPATHLEN\n#else\n# define LT_PATHMAX 1024\n#endif\n\n#ifndef S_IXOTH\n# define S_IXOTH 0\n#endif\n#ifndef S_IXGRP\n# define S_IXGRP 0\n#endif\n\n/* path handling portability macros */\n#ifndef DIR_SEPARATOR\n# define DIR_SEPARATOR '/'\n# define PATH_SEPARATOR ':'\n#endif\n\n#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \\\n  defined (__OS2__)\n# define HAVE_DOS_BASED_FILE_SYSTEM\n# define FOPEN_WB \"wb\"\n# ifndef DIR_SEPARATOR_2\n#  define DIR_SEPARATOR_2 '\\\\'\n# endif\n# ifndef PATH_SEPARATOR_2\n#  define PATH_SEPARATOR_2 ';'\n# endif\n#endif\n\n#ifndef DIR_SEPARATOR_2\n# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)\n#else /* DIR_SEPARATOR_2 */\n# define IS_DIR_SEPARATOR(ch) \\\n\t(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))\n#endif /* DIR_SEPARATOR_2 */\n\n#ifndef PATH_SEPARATOR_2\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)\n#else /* PATH_SEPARATOR_2 */\n# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)\n#endif /* PATH_SEPARATOR_2 */\n\n#ifndef FOPEN_WB\n# define FOPEN_WB \"w\"\n#endif\n#ifndef _O_BINARY\n# define _O_BINARY 0\n#endif\n\n#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))\n#define XFREE(stale) do { \\\n  if (stale) { free ((void *) stale); stale = 0; } \\\n} while (0)\n\n#if defined(LT_DEBUGWRAPPER)\nstatic int lt_debug = 1;\n#else\nstatic int lt_debug = 0;\n#endif\n\nconst char *program_name = \"libtool-wrapper\"; /* in case xstrdup fails */\n\nvoid *xmalloc (size_t num);\nchar *xstrdup (const char *string);\nconst char *base_name (const char *name);\nchar *find_executable (const char *wrapper);\nchar *chase_symlinks (const char *pathspec);\nint make_executable (const char *path);\nint check_executable (const char *path);\nchar *strendzap (char *str, const char *pat);\nvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);\nvoid lt_fatal (const char *file, int line, const char *message, ...);\nstatic const char *nonnull (const char *s);\nstatic const char *nonempty (const char *s);\nvoid lt_setenv (const char *name, const char *value);\nchar *lt_extend_str (const char *orig_value, const char *add, int to_end);\nvoid lt_update_exe_path (const char *name, const char *value);\nvoid lt_update_lib_path (const char *name, const char *value);\nchar **prepare_spawn (char **argv);\nvoid lt_dump_script (FILE *f);\nEOF\n\n\t    cat <<EOF\nvolatile const char * MAGIC_EXE = \"$magic_exe\";\nconst char * LIB_PATH_VARNAME = \"$shlibpath_var\";\nEOF\n\n\t    if test \"$shlibpath_overrides_runpath\" = yes && test -n \"$shlibpath_var\" && test -n \"$temp_rpath\"; then\n              func_to_host_path \"$temp_rpath\"\n\t      cat <<EOF\nconst char * LIB_PATH_VALUE   = \"$func_to_host_path_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * LIB_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test -n \"$dllsearchpath\"; then\n              func_to_host_path \"$dllsearchpath:\"\n\t      cat <<EOF\nconst char * EXE_PATH_VARNAME = \"PATH\";\nconst char * EXE_PATH_VALUE   = \"$func_to_host_path_result\";\nEOF\n\t    else\n\t      cat <<\"EOF\"\nconst char * EXE_PATH_VARNAME = \"\";\nconst char * EXE_PATH_VALUE   = \"\";\nEOF\n\t    fi\n\n\t    if test \"$fast_install\" = yes; then\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"lt-$outputname\"; /* hopefully, no .exe */\nEOF\n\t    else\n\t      cat <<EOF\nconst char * TARGET_PROGRAM_NAME = \"$outputname\"; /* hopefully, no .exe */\nEOF\n\t    fi\n\n\n\t    cat <<\"EOF\"\n\n#define LTWRAPPER_OPTION_PREFIX         \"--lt-\"\n\nstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;\nstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX \"dump-script\";\nstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX \"debug\";\n\nint\nmain (int argc, char *argv[])\n{\n  char **newargz;\n  int  newargc;\n  char *tmp_pathspec;\n  char *actual_cwrapper_path;\n  char *actual_cwrapper_name;\n  char *target_name;\n  char *lt_argv_zero;\n  intptr_t rval = 127;\n\n  int i;\n\n  program_name = (char *) xstrdup (base_name (argv[0]));\n  newargz = XMALLOC (char *, argc + 1);\n\n  /* very simple arg parsing; don't want to rely on getopt\n   * also, copy all non cwrapper options to newargz, except\n   * argz[0], which is handled differently\n   */\n  newargc=0;\n  for (i = 1; i < argc; i++)\n    {\n      if (strcmp (argv[i], dumpscript_opt) == 0)\n\t{\nEOF\n\t    case \"$host\" in\n\t      *mingw* | *cygwin* )\n\t\t# make stdout use \"unix\" line endings\n\t\techo \"          setmode(1,_O_BINARY);\"\n\t\t;;\n\t      esac\n\n\t    cat <<\"EOF\"\n\t  lt_dump_script (stdout);\n\t  return 0;\n\t}\n      if (strcmp (argv[i], debug_opt) == 0)\n\t{\n          lt_debug = 1;\n          continue;\n\t}\n      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)\n        {\n          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX\n             namespace, but it is not one of the ones we know about and\n             have already dealt with, above (inluding dump-script), then\n             report an error. Otherwise, targets might begin to believe\n             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX\n             namespace. The first time any user complains about this, we'll\n             need to make LTWRAPPER_OPTION_PREFIX a configure-time option\n             or a configure.ac-settable value.\n           */\n          lt_fatal (__FILE__, __LINE__,\n\t\t    \"unrecognized %s option: '%s'\",\n                    ltwrapper_option_prefix, argv[i]);\n        }\n      /* otherwise ... */\n      newargz[++newargc] = xstrdup (argv[i]);\n    }\n  newargz[++newargc] = NULL;\n\nEOF\n\t    cat <<EOF\n  /* The GNU banner must be the first non-error debug message */\n  lt_debugprintf (__FILE__, __LINE__, \"libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\\n\");\nEOF\n\t    cat <<\"EOF\"\n  lt_debugprintf (__FILE__, __LINE__, \"(main) argv[0]: %s\\n\", argv[0]);\n  lt_debugprintf (__FILE__, __LINE__, \"(main) program_name: %s\\n\", program_name);\n\n  tmp_pathspec = find_executable (argv[0]);\n  if (tmp_pathspec == NULL)\n    lt_fatal (__FILE__, __LINE__, \"couldn't find %s\", argv[0]);\n  lt_debugprintf (__FILE__, __LINE__,\n                  \"(main) found exe (before symlink chase) at: %s\\n\",\n\t\t  tmp_pathspec);\n\n  actual_cwrapper_path = chase_symlinks (tmp_pathspec);\n  lt_debugprintf (__FILE__, __LINE__,\n                  \"(main) found exe (after symlink chase) at: %s\\n\",\n\t\t  actual_cwrapper_path);\n  XFREE (tmp_pathspec);\n\n  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));\n  strendzap (actual_cwrapper_path, actual_cwrapper_name);\n\n  /* wrapper name transforms */\n  strendzap (actual_cwrapper_name, \".exe\");\n  tmp_pathspec = lt_extend_str (actual_cwrapper_name, \".exe\", 1);\n  XFREE (actual_cwrapper_name);\n  actual_cwrapper_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  /* target_name transforms -- use actual target program name; might have lt- prefix */\n  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));\n  strendzap (target_name, \".exe\");\n  tmp_pathspec = lt_extend_str (target_name, \".exe\", 1);\n  XFREE (target_name);\n  target_name = tmp_pathspec;\n  tmp_pathspec = 0;\n\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(main) libtool target name: %s\\n\",\n\t\t  target_name);\nEOF\n\n\t    cat <<EOF\n  newargz[0] =\n    XMALLOC (char, (strlen (actual_cwrapper_path) +\n\t\t    strlen (\"$objdir\") + 1 + strlen (actual_cwrapper_name) + 1));\n  strcpy (newargz[0], actual_cwrapper_path);\n  strcat (newargz[0], \"$objdir\");\n  strcat (newargz[0], \"/\");\nEOF\n\n\t    cat <<\"EOF\"\n  /* stop here, and copy so we don't have to do this twice */\n  tmp_pathspec = xstrdup (newargz[0]);\n\n  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */\n  strcat (newargz[0], actual_cwrapper_name);\n\n  /* DO want the lt- prefix here if it exists, so use target_name */\n  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);\n  XFREE (tmp_pathspec);\n  tmp_pathspec = NULL;\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t    cat <<\"EOF\"\n  {\n    char* p;\n    while ((p = strchr (newargz[0], '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n    while ((p = strchr (lt_argv_zero, '\\\\')) != NULL)\n      {\n\t*p = '/';\n      }\n  }\nEOF\n\t    ;;\n\t    esac\n\n\t    cat <<\"EOF\"\n  XFREE (target_name);\n  XFREE (actual_cwrapper_path);\n  XFREE (actual_cwrapper_name);\n\n  lt_setenv (\"BIN_SH\", \"xpg4\"); /* for Tru64 */\n  lt_setenv (\"DUALCASE\", \"1\");  /* for MSK sh */\n  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must\n     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)\n     because on Windows, both *_VARNAMEs are PATH but uninstalled\n     libraries must come first. */\n  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);\n  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);\n\n  lt_debugprintf (__FILE__, __LINE__, \"(main) lt_argv_zero: %s\\n\",\n\t\t  nonnull (lt_argv_zero));\n  for (i = 0; i < newargc; i++)\n    {\n      lt_debugprintf (__FILE__, __LINE__, \"(main) newargz[%d]: %s\\n\",\n\t\t      i, nonnull (newargz[i]));\n    }\n\nEOF\n\n\t    case $host_os in\n\t      mingw*)\n\t\tcat <<\"EOF\"\n  /* execv doesn't actually work on mingw as expected on unix */\n  newargz = prepare_spawn (newargz);\n  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);\n  if (rval == -1)\n    {\n      /* failed to start process */\n      lt_debugprintf (__FILE__, __LINE__,\n\t\t      \"(main) failed to launch target \\\"%s\\\": %s\\n\",\n\t\t      lt_argv_zero, nonnull (strerror (errno)));\n      return 127;\n    }\n  return rval;\nEOF\n\t\t;;\n\t      *)\n\t\tcat <<\"EOF\"\n  execv (lt_argv_zero, newargz);\n  return rval; /* =127, but avoids unused variable warning */\nEOF\n\t\t;;\n\t    esac\n\n\t    cat <<\"EOF\"\n}\n\nvoid *\nxmalloc (size_t num)\n{\n  void *p = (void *) malloc (num);\n  if (!p)\n    lt_fatal (__FILE__, __LINE__, \"memory exhausted\");\n\n  return p;\n}\n\nchar *\nxstrdup (const char *string)\n{\n  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),\n\t\t\t  string) : NULL;\n}\n\nconst char *\nbase_name (const char *name)\n{\n  const char *base;\n\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  /* Skip over the disk name in MSDOS pathnames. */\n  if (isalpha ((unsigned char) name[0]) && name[1] == ':')\n    name += 2;\n#endif\n\n  for (base = name; *name; name++)\n    if (IS_DIR_SEPARATOR (*name))\n      base = name + 1;\n  return base;\n}\n\nint\ncheck_executable (const char *path)\n{\n  struct stat st;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(check_executable): %s\\n\",\n                  nonempty (path));\n  if ((!path) || (!*path))\n    return 0;\n\n  if ((stat (path, &st) >= 0)\n      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))\n    return 1;\n  else\n    return 0;\n}\n\nint\nmake_executable (const char *path)\n{\n  int rval = 0;\n  struct stat st;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(make_executable): %s\\n\",\n                  nonempty (path));\n  if ((!path) || (!*path))\n    return 0;\n\n  if (stat (path, &st) >= 0)\n    {\n      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);\n    }\n  return rval;\n}\n\n/* Searches for the full path of the wrapper.  Returns\n   newly allocated full path name if found, NULL otherwise\n   Does not chase symlinks, even on platforms that support them.\n*/\nchar *\nfind_executable (const char *wrapper)\n{\n  int has_slash = 0;\n  const char *p;\n  const char *p_next;\n  /* static buffer for getcwd */\n  char tmp[LT_PATHMAX + 1];\n  int tmp_len;\n  char *concat_name;\n\n  lt_debugprintf (__FILE__, __LINE__, \"(find_executable): %s\\n\",\n                  nonempty (wrapper));\n\n  if ((wrapper == NULL) || (*wrapper == '\\0'))\n    return NULL;\n\n  /* Absolute path? */\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')\n    {\n      concat_name = xstrdup (wrapper);\n      if (check_executable (concat_name))\n\treturn concat_name;\n      XFREE (concat_name);\n    }\n  else\n    {\n#endif\n      if (IS_DIR_SEPARATOR (wrapper[0]))\n\t{\n\t  concat_name = xstrdup (wrapper);\n\t  if (check_executable (concat_name))\n\t    return concat_name;\n\t  XFREE (concat_name);\n\t}\n#if defined (HAVE_DOS_BASED_FILE_SYSTEM)\n    }\n#endif\n\n  for (p = wrapper; *p; p++)\n    if (*p == '/')\n      {\n\thas_slash = 1;\n\tbreak;\n      }\n  if (!has_slash)\n    {\n      /* no slashes; search PATH */\n      const char *path = getenv (\"PATH\");\n      if (path != NULL)\n\t{\n\t  for (p = path; *p; p = p_next)\n\t    {\n\t      const char *q;\n\t      size_t p_len;\n\t      for (q = p; *q; q++)\n\t\tif (IS_PATH_SEPARATOR (*q))\n\t\t  break;\n\t      p_len = q - p;\n\t      p_next = (*q == '\\0' ? q : q + 1);\n\t      if (p_len == 0)\n\t\t{\n\t\t  /* empty path: current directory */\n\t\t  if (getcwd (tmp, LT_PATHMAX) == NULL)\n\t\t    lt_fatal (__FILE__, __LINE__, \"getcwd failed: %s\",\n                              nonnull (strerror (errno)));\n\t\t  tmp_len = strlen (tmp);\n\t\t  concat_name =\n\t\t    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, tmp, tmp_len);\n\t\t  concat_name[tmp_len] = '/';\n\t\t  strcpy (concat_name + tmp_len + 1, wrapper);\n\t\t}\n\t      else\n\t\t{\n\t\t  concat_name =\n\t\t    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);\n\t\t  memcpy (concat_name, p, p_len);\n\t\t  concat_name[p_len] = '/';\n\t\t  strcpy (concat_name + p_len + 1, wrapper);\n\t\t}\n\t      if (check_executable (concat_name))\n\t\treturn concat_name;\n\t      XFREE (concat_name);\n\t    }\n\t}\n      /* not found in PATH; assume curdir */\n    }\n  /* Relative path | not found in path: prepend cwd */\n  if (getcwd (tmp, LT_PATHMAX) == NULL)\n    lt_fatal (__FILE__, __LINE__, \"getcwd failed: %s\",\n              nonnull (strerror (errno)));\n  tmp_len = strlen (tmp);\n  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);\n  memcpy (concat_name, tmp, tmp_len);\n  concat_name[tmp_len] = '/';\n  strcpy (concat_name + tmp_len + 1, wrapper);\n\n  if (check_executable (concat_name))\n    return concat_name;\n  XFREE (concat_name);\n  return NULL;\n}\n\nchar *\nchase_symlinks (const char *pathspec)\n{\n#ifndef S_ISLNK\n  return xstrdup (pathspec);\n#else\n  char buf[LT_PATHMAX];\n  struct stat s;\n  char *tmp_pathspec = xstrdup (pathspec);\n  char *p;\n  int has_symlinks = 0;\n  while (strlen (tmp_pathspec) && !has_symlinks)\n    {\n      lt_debugprintf (__FILE__, __LINE__,\n\t\t      \"checking path component for symlinks: %s\\n\",\n\t\t      tmp_pathspec);\n      if (lstat (tmp_pathspec, &s) == 0)\n\t{\n\t  if (S_ISLNK (s.st_mode) != 0)\n\t    {\n\t      has_symlinks = 1;\n\t      break;\n\t    }\n\n\t  /* search backwards for last DIR_SEPARATOR */\n\t  p = tmp_pathspec + strlen (tmp_pathspec) - 1;\n\t  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    p--;\n\t  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))\n\t    {\n\t      /* no more DIR_SEPARATORS left */\n\t      break;\n\t    }\n\t  *p = '\\0';\n\t}\n      else\n\t{\n\t  lt_fatal (__FILE__, __LINE__,\n\t\t    \"error accessing file \\\"%s\\\": %s\",\n\t\t    tmp_pathspec, nonnull (strerror (errno)));\n\t}\n    }\n  XFREE (tmp_pathspec);\n\n  if (!has_symlinks)\n    {\n      return xstrdup (pathspec);\n    }\n\n  tmp_pathspec = realpath (pathspec, buf);\n  if (tmp_pathspec == 0)\n    {\n      lt_fatal (__FILE__, __LINE__,\n\t\t\"could not follow symlinks for %s\", pathspec);\n    }\n  return xstrdup (tmp_pathspec);\n#endif\n}\n\nchar *\nstrendzap (char *str, const char *pat)\n{\n  size_t len, patlen;\n\n  assert (str != NULL);\n  assert (pat != NULL);\n\n  len = strlen (str);\n  patlen = strlen (pat);\n\n  if (patlen <= len)\n    {\n      str += len - patlen;\n      if (strcmp (str, pat) == 0)\n\t*str = '\\0';\n    }\n  return str;\n}\n\nvoid\nlt_debugprintf (const char *file, int line, const char *fmt, ...)\n{\n  va_list args;\n  if (lt_debug)\n    {\n      (void) fprintf (stderr, \"%s:%s:%d: \", program_name, file, line);\n      va_start (args, fmt);\n      (void) vfprintf (stderr, fmt, args);\n      va_end (args);\n    }\n}\n\nstatic void\nlt_error_core (int exit_status, const char *file,\n\t       int line, const char *mode,\n\t       const char *message, va_list ap)\n{\n  fprintf (stderr, \"%s:%s:%d: %s: \", program_name, file, line, mode);\n  vfprintf (stderr, message, ap);\n  fprintf (stderr, \".\\n\");\n\n  if (exit_status >= 0)\n    exit (exit_status);\n}\n\nvoid\nlt_fatal (const char *file, int line, const char *message, ...)\n{\n  va_list ap;\n  va_start (ap, message);\n  lt_error_core (EXIT_FAILURE, file, line, \"FATAL\", message, ap);\n  va_end (ap);\n}\n\nstatic const char *\nnonnull (const char *s)\n{\n  return s ? s : \"(null)\";\n}\n\nstatic const char *\nnonempty (const char *s)\n{\n  return (s && !*s) ? \"(empty)\" : nonnull (s);\n}\n\nvoid\nlt_setenv (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_setenv) setting '%s' to '%s'\\n\",\n                  nonnull (name), nonnull (value));\n  {\n#ifdef HAVE_SETENV\n    /* always make a copy, for consistency with !HAVE_SETENV */\n    char *str = xstrdup (value);\n    setenv (name, str, 1);\n#else\n    int len = strlen (name) + 1 + strlen (value) + 1;\n    char *str = XMALLOC (char, len);\n    sprintf (str, \"%s=%s\", name, value);\n    if (putenv (str) != EXIT_SUCCESS)\n      {\n        XFREE (str);\n      }\n#endif\n  }\n}\n\nchar *\nlt_extend_str (const char *orig_value, const char *add, int to_end)\n{\n  char *new_value;\n  if (orig_value && *orig_value)\n    {\n      int orig_value_len = strlen (orig_value);\n      int add_len = strlen (add);\n      new_value = XMALLOC (char, add_len + orig_value_len + 1);\n      if (to_end)\n        {\n          strcpy (new_value, orig_value);\n          strcpy (new_value + orig_value_len, add);\n        }\n      else\n        {\n          strcpy (new_value, add);\n          strcpy (new_value + add_len, orig_value);\n        }\n    }\n  else\n    {\n      new_value = xstrdup (add);\n    }\n  return new_value;\n}\n\nvoid\nlt_update_exe_path (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_update_exe_path) modifying '%s' by prepending '%s'\\n\",\n                  nonnull (name), nonnull (value));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      /* some systems can't cope with a ':'-terminated path #' */\n      int len = strlen (new_value);\n      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))\n        {\n          new_value[len-1] = '\\0';\n        }\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\nvoid\nlt_update_lib_path (const char *name, const char *value)\n{\n  lt_debugprintf (__FILE__, __LINE__,\n\t\t  \"(lt_update_lib_path) modifying '%s' by prepending '%s'\\n\",\n                  nonnull (name), nonnull (value));\n\n  if (name && *name && value && *value)\n    {\n      char *new_value = lt_extend_str (getenv (name), value, 0);\n      lt_setenv (name, new_value);\n      XFREE (new_value);\n    }\n}\n\nEOF\n\t    case $host_os in\n\t      mingw*)\n\t\tcat <<\"EOF\"\n\n/* Prepares an argument vector before calling spawn().\n   Note that spawn() does not by itself call the command interpreter\n     (getenv (\"COMSPEC\") != NULL ? getenv (\"COMSPEC\") :\n      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n         GetVersionEx(&v);\n         v.dwPlatformId == VER_PLATFORM_WIN32_NT;\n      }) ? \"cmd.exe\" : \"command.com\").\n   Instead it simply concatenates the arguments, separated by ' ', and calls\n   CreateProcess().  We must quote the arguments since Win32 CreateProcess()\n   interprets characters like ' ', '\\t', '\\\\', '\"' (but not '<' and '>') in a\n   special way:\n   - Space and tab are interpreted as delimiters. They are not treated as\n     delimiters if they are surrounded by double quotes: \"...\".\n   - Unescaped double quotes are removed from the input. Their only effect is\n     that within double quotes, space and tab are treated like normal\n     characters.\n   - Backslashes not followed by double quotes are not special.\n   - But 2*n+1 backslashes followed by a double quote become\n     n backslashes followed by a double quote (n >= 0):\n       \\\" -> \"\n       \\\\\\\" -> \\\"\n       \\\\\\\\\\\" -> \\\\\"\n */\n#define SHELL_SPECIAL_CHARS \"\\\"\\\\ \\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\"\n#define SHELL_SPACE_CHARS \" \\001\\002\\003\\004\\005\\006\\007\\010\\011\\012\\013\\014\\015\\016\\017\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\"\nchar **\nprepare_spawn (char **argv)\n{\n  size_t argc;\n  char **new_argv;\n  size_t i;\n\n  /* Count number of arguments.  */\n  for (argc = 0; argv[argc] != NULL; argc++)\n    ;\n\n  /* Allocate new argument vector.  */\n  new_argv = XMALLOC (char *, argc + 1);\n\n  /* Put quoted arguments into the new argument vector.  */\n  for (i = 0; i < argc; i++)\n    {\n      const char *string = argv[i];\n\n      if (string[0] == '\\0')\n\tnew_argv[i] = xstrdup (\"\\\"\\\"\");\n      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)\n\t{\n\t  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);\n\t  size_t length;\n\t  unsigned int backslashes;\n\t  const char *s;\n\t  char *quoted_string;\n\t  char *p;\n\n\t  length = 0;\n\t  backslashes = 0;\n\t  if (quote_around)\n\t    length++;\n\t  for (s = string; *s != '\\0'; s++)\n\t    {\n\t      char c = *s;\n\t      if (c == '\"')\n\t\tlength += backslashes + 1;\n\t      length++;\n\t      if (c == '\\\\')\n\t\tbackslashes++;\n\t      else\n\t\tbackslashes = 0;\n\t    }\n\t  if (quote_around)\n\t    length += backslashes + 1;\n\n\t  quoted_string = XMALLOC (char, length + 1);\n\n\t  p = quoted_string;\n\t  backslashes = 0;\n\t  if (quote_around)\n\t    *p++ = '\"';\n\t  for (s = string; *s != '\\0'; s++)\n\t    {\n\t      char c = *s;\n\t      if (c == '\"')\n\t\t{\n\t\t  unsigned int j;\n\t\t  for (j = backslashes + 1; j > 0; j--)\n\t\t    *p++ = '\\\\';\n\t\t}\n\t      *p++ = c;\n\t      if (c == '\\\\')\n\t\tbackslashes++;\n\t      else\n\t\tbackslashes = 0;\n\t    }\n\t  if (quote_around)\n\t    {\n\t      unsigned int j;\n\t      for (j = backslashes; j > 0; j--)\n\t\t*p++ = '\\\\';\n\t      *p++ = '\"';\n\t    }\n\t  *p = '\\0';\n\n\t  new_argv[i] = quoted_string;\n\t}\n      else\n\tnew_argv[i] = (char *) string;\n    }\n  new_argv[argc] = NULL;\n\n  return new_argv;\n}\nEOF\n\t\t;;\n\t    esac\n\n            cat <<\"EOF\"\nvoid lt_dump_script (FILE* f)\n{\nEOF\n\t    func_emit_wrapper yes |\n\t      $SED -n -e '\ns/^\\(.\\{79\\}\\)\\(..*\\)/\\1\\\n\\2/\nh\ns/\\([\\\\\"]\\)/\\\\\\1/g\ns/$/\\\\n/\ns/\\([^\\n]*\\).*/  fputs (\"\\1\", f);/p\ng\nD'\n            cat <<\"EOF\"\n}\nEOF\n}\n# end: func_emit_cwrapperexe_src\n\n# func_win32_import_lib_p ARG\n# True if ARG is an import lib, as indicated by $file_magic_cmd\nfunc_win32_import_lib_p ()\n{\n    $opt_debug\n    case `eval $file_magic_cmd \\\"\\$1\\\" 2>/dev/null | $SED -e 10q` in\n    *import*) : ;;\n    *) false ;;\n    esac\n}\n\n# func_mode_link arg...\nfunc_mode_link ()\n{\n    $opt_debug\n    case $host in\n    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n      # It is impossible to link a dll without this setting, and\n      # we shouldn't force the makefile maintainer to figure out\n      # which system we are compiling for in order to pass an extra\n      # flag for every libtool invocation.\n      # allow_undefined=no\n\n      # FIXME: Unfortunately, there are problems with the above when trying\n      # to make a dll which has undefined symbols, in which case not\n      # even a static library is built.  For now, we need to specify\n      # -no-undefined on the libtool link line when we can be certain\n      # that all symbols are satisfied, otherwise we get a static library.\n      allow_undefined=yes\n      ;;\n    *)\n      allow_undefined=yes\n      ;;\n    esac\n    libtool_args=$nonopt\n    base_compile=\"$nonopt $@\"\n    compile_command=$nonopt\n    finalize_command=$nonopt\n\n    compile_rpath=\n    finalize_rpath=\n    compile_shlibpath=\n    finalize_shlibpath=\n    convenience=\n    old_convenience=\n    deplibs=\n    old_deplibs=\n    compiler_flags=\n    linker_flags=\n    dllsearchpath=\n    lib_search_path=`pwd`\n    inst_prefix_dir=\n    new_inherited_linker_flags=\n\n    avoid_version=no\n    bindir=\n    dlfiles=\n    dlprefiles=\n    dlself=no\n    export_dynamic=no\n    export_symbols=\n    export_symbols_regex=\n    generated=\n    libobjs=\n    ltlibs=\n    module=no\n    no_install=no\n    objs=\n    non_pic_objects=\n    precious_files_regex=\n    prefer_static_libs=no\n    preload=no\n    prev=\n    prevarg=\n    release=\n    rpath=\n    xrpath=\n    perm_rpath=\n    temp_rpath=\n    thread_safe=no\n    vinfo=\n    vinfo_number=no\n    weak_libs=\n    single_module=\"${wl}-single_module\"\n    func_infer_tag $base_compile\n\n    # We need to know -static, to get the right output filenames.\n    for arg\n    do\n      case $arg in\n      -shared)\n\ttest \"$build_libtool_libs\" != yes && \\\n\t  func_fatal_configuration \"can not build a shared library\"\n\tbuild_old_libs=no\n\tbreak\n\t;;\n      -all-static | -static | -static-libtool-libs)\n\tcase $arg in\n\t-all-static)\n\t  if test \"$build_libtool_libs\" = yes && test -z \"$link_static_flag\"; then\n\t    func_warning \"complete static linking is impossible in this configuration\"\n\t  fi\n\t  if test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\t-static)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=built\n\t  ;;\n\t-static-libtool-libs)\n\t  if test -z \"$pic_flag\" && test -n \"$link_static_flag\"; then\n\t    dlopen_self=$dlopen_self_static\n\t  fi\n\t  prefer_static_libs=yes\n\t  ;;\n\tesac\n\tbuild_libtool_libs=no\n\tbuild_old_libs=yes\n\tbreak\n\t;;\n      esac\n    done\n\n    # See if our shared archives depend on static archives.\n    test -n \"$old_archive_from_new_cmds\" && build_old_libs=yes\n\n    # Go through the arguments, transforming them on the way.\n    while test \"$#\" -gt 0; do\n      arg=\"$1\"\n      shift\n      func_quote_for_eval \"$arg\"\n      qarg=$func_quote_for_eval_unquoted_result\n      func_append libtool_args \" $func_quote_for_eval_result\"\n\n      # If the previous option needs an argument, assign it.\n      if test -n \"$prev\"; then\n\tcase $prev in\n\toutput)\n\t  func_append compile_command \" @OUTPUT@\"\n\t  func_append finalize_command \" @OUTPUT@\"\n\t  ;;\n\tesac\n\n\tcase $prev in\n\tbindir)\n\t  bindir=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tdlfiles|dlprefiles)\n\t  if test \"$preload\" = no; then\n\t    # Add the symbol object into the linking commands.\n\t    func_append compile_command \" @SYMFILE@\"\n\t    func_append finalize_command \" @SYMFILE@\"\n\t    preload=yes\n\t  fi\n\t  case $arg in\n\t  *.la | *.lo) ;;  # We handle these cases below.\n\t  force)\n\t    if test \"$dlself\" = no; then\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  self)\n\t    if test \"$prev\" = dlprefiles; then\n\t      dlself=yes\n\t    elif test \"$prev\" = dlfiles && test \"$dlopen_self\" != yes; then\n\t      dlself=yes\n\t    else\n\t      dlself=needless\n\t      export_dynamic=yes\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  *)\n\t    if test \"$prev\" = dlfiles; then\n\t      func_append dlfiles \" $arg\"\n\t    else\n\t      func_append dlprefiles \" $arg\"\n\t    fi\n\t    prev=\n\t    continue\n\t    ;;\n\t  esac\n\t  ;;\n\texpsyms)\n\t  export_symbols=\"$arg\"\n\t  test -f \"$arg\" \\\n\t    || func_fatal_error \"symbol file \\`$arg' does not exist\"\n\t  prev=\n\t  continue\n\t  ;;\n\texpsyms_regex)\n\t  export_symbols_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tframework)\n\t  case $host in\n\t    *-*-darwin*)\n\t      case \"$deplibs \" in\n\t\t*\" $qarg.ltframework \"*) ;;\n\t\t*) func_append deplibs \" $qarg.ltframework\" # this is fixed later\n\t\t   ;;\n\t      esac\n\t      ;;\n\t  esac\n\t  prev=\n\t  continue\n\t  ;;\n\tinst_prefix)\n\t  inst_prefix_dir=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tobjectlist)\n\t  if test -f \"$arg\"; then\n\t    save_arg=$arg\n\t    moreargs=\n\t    for fil in `cat \"$save_arg\"`\n\t    do\n#\t      func_append moreargs \" $fil\"\n\t      arg=$fil\n\t      # A libtool-controlled object.\n\n\t      # Check to see that this really is a libtool object.\n\t      if func_lalib_unsafe_p \"$arg\"; then\n\t\tpic_object=\n\t\tnon_pic_object=\n\n\t\t# Read the .lo file\n\t\tfunc_source \"$arg\"\n\n\t\tif test -z \"$pic_object\" ||\n\t\t   test -z \"$non_pic_object\" ||\n\t\t   test \"$pic_object\" = none &&\n\t\t   test \"$non_pic_object\" = none; then\n\t\t  func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t\tfi\n\n\t\t# Extract subdirectory from the argument.\n\t\tfunc_dirname \"$arg\" \"/\" \"\"\n\t\txdir=\"$func_dirname_result\"\n\n\t\tif test \"$pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  pic_object=\"$xdir$pic_object\"\n\n\t\t  if test \"$prev\" = dlfiles; then\n\t\t    if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\t      func_append dlfiles \" $pic_object\"\n\t\t      prev=\n\t\t      continue\n\t\t    else\n\t\t      # If libtool objects are unsupported, then we need to preload.\n\t\t      prev=dlprefiles\n\t\t    fi\n\t\t  fi\n\n\t\t  # CHECK ME:  I think I busted this.  -Ossama\n\t\t  if test \"$prev\" = dlprefiles; then\n\t\t    # Preload the old-style object.\n\t\t    func_append dlprefiles \" $pic_object\"\n\t\t    prev=\n\t\t  fi\n\n\t\t  # A PIC object.\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  arg=\"$pic_object\"\n\t\tfi\n\n\t\t# Non-PIC object.\n\t\tif test \"$non_pic_object\" != none; then\n\t\t  # Prepend the subdirectory the object is found in.\n\t\t  non_pic_object=\"$xdir$non_pic_object\"\n\n\t\t  # A standard non-PIC object\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\t  if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t\t    arg=\"$non_pic_object\"\n\t\t  fi\n\t\telse\n\t\t  # If the PIC object exists, use it instead.\n\t\t  # $xdir was prepended to $pic_object above.\n\t\t  non_pic_object=\"$pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t\tfi\n\t      else\n\t\t# Only an error if not doing a dry-run.\n\t\tif $opt_dry_run; then\n\t\t  # Extract subdirectory from the argument.\n\t\t  func_dirname \"$arg\" \"/\" \"\"\n\t\t  xdir=\"$func_dirname_result\"\n\n\t\t  func_lo2o \"$arg\"\n\t\t  pic_object=$xdir$objdir/$func_lo2o_result\n\t\t  non_pic_object=$xdir$func_lo2o_result\n\t\t  func_append libobjs \" $pic_object\"\n\t\t  func_append non_pic_objects \" $non_pic_object\"\n\t        else\n\t\t  func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t\tfi\n\t      fi\n\t    done\n\t  else\n\t    func_fatal_error \"link input file \\`$arg' does not exist\"\n\t  fi\n\t  arg=$save_arg\n\t  prev=\n\t  continue\n\t  ;;\n\tprecious_regex)\n\t  precious_files_regex=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trelease)\n\t  release=\"-$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\trpath | xrpath)\n\t  # We need an absolute path.\n\t  case $arg in\n\t  [\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t  *)\n\t    func_fatal_error \"only absolute run-paths are allowed\"\n\t    ;;\n\t  esac\n\t  if test \"$prev\" = rpath; then\n\t    case \"$rpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) func_append rpath \" $arg\" ;;\n\t    esac\n\t  else\n\t    case \"$xrpath \" in\n\t    *\" $arg \"*) ;;\n\t    *) func_append xrpath \" $arg\" ;;\n\t    esac\n\t  fi\n\t  prev=\n\t  continue\n\t  ;;\n\tshrext)\n\t  shrext_cmds=\"$arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\tweak)\n\t  func_append weak_libs \" $arg\"\n\t  prev=\n\t  continue\n\t  ;;\n\txcclinker)\n\t  func_append linker_flags \" $qarg\"\n\t  func_append compiler_flags \" $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txcompiler)\n\t  func_append compiler_flags \" $qarg\"\n\t  prev=\n\t  func_append compile_command \" $qarg\"\n\t  func_append finalize_command \" $qarg\"\n\t  continue\n\t  ;;\n\txlinker)\n\t  func_append linker_flags \" $qarg\"\n\t  func_append compiler_flags \" $wl$qarg\"\n\t  prev=\n\t  func_append compile_command \" $wl$qarg\"\n\t  func_append finalize_command \" $wl$qarg\"\n\t  continue\n\t  ;;\n\t*)\n\t  eval \"$prev=\\\"\\$arg\\\"\"\n\t  prev=\n\t  continue\n\t  ;;\n\tesac\n      fi # test -n \"$prev\"\n\n      prevarg=\"$arg\"\n\n      case $arg in\n      -all-static)\n\tif test -n \"$link_static_flag\"; then\n\t  # See comment for -static flag below, for more details.\n\t  func_append compile_command \" $link_static_flag\"\n\t  func_append finalize_command \" $link_static_flag\"\n\tfi\n\tcontinue\n\t;;\n\n      -allow-undefined)\n\t# FIXME: remove this flag sometime in the future.\n\tfunc_fatal_error \"\\`-allow-undefined' must not be used because it is the default\"\n\t;;\n\n      -avoid-version)\n\tavoid_version=yes\n\tcontinue\n\t;;\n\n      -bindir)\n\tprev=bindir\n\tcontinue\n\t;;\n\n      -dlopen)\n\tprev=dlfiles\n\tcontinue\n\t;;\n\n      -dlpreopen)\n\tprev=dlprefiles\n\tcontinue\n\t;;\n\n      -export-dynamic)\n\texport_dynamic=yes\n\tcontinue\n\t;;\n\n      -export-symbols | -export-symbols-regex)\n\tif test -n \"$export_symbols\" || test -n \"$export_symbols_regex\"; then\n\t  func_fatal_error \"more than one -exported-symbols argument is not allowed\"\n\tfi\n\tif test \"X$arg\" = \"X-export-symbols\"; then\n\t  prev=expsyms\n\telse\n\t  prev=expsyms_regex\n\tfi\n\tcontinue\n\t;;\n\n      -framework)\n\tprev=framework\n\tcontinue\n\t;;\n\n      -inst-prefix-dir)\n\tprev=inst_prefix\n\tcontinue\n\t;;\n\n      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*\n      # so, if we see these flags be careful not to treat them like -L\n      -L[A-Z][A-Z]*:*)\n\tcase $with_gcc/$host in\n\tno/*-*-irix* | /*-*-irix*)\n\t  func_append compile_command \" $arg\"\n\t  func_append finalize_command \" $arg\"\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -L*)\n\tfunc_stripname \"-L\" '' \"$arg\"\n\tif test -z \"$func_stripname_result\"; then\n\t  if test \"$#\" -gt 0; then\n\t    func_fatal_error \"require no space between \\`-L' and \\`$1'\"\n\t  else\n\t    func_fatal_error \"need path for \\`-L' option\"\n\t  fi\n\tfi\n\tfunc_resolve_sysroot \"$func_stripname_result\"\n\tdir=$func_resolve_sysroot_result\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t*)\n\t  absdir=`cd \"$dir\" && pwd`\n\t  test -z \"$absdir\" && \\\n\t    func_fatal_error \"cannot determine absolute directory name of \\`$dir'\"\n\t  dir=\"$absdir\"\n\t  ;;\n\tesac\n\tcase \"$deplibs \" in\n\t*\" -L$dir \"* | *\" $arg \"*)\n\t  # Will only happen for absolute or sysroot arguments\n\t  ;;\n\t*)\n\t  # Preserve sysroot, but never include relative directories\n\t  case $dir in\n\t    [\\\\/]* | [A-Za-z]:[\\\\/]* | =*) func_append deplibs \" $arg\" ;;\n\t    *) func_append deplibs \" -L$dir\" ;;\n\t  esac\n\t  func_append lib_search_path \" $dir\"\n\t  ;;\n\tesac\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`$ECHO \"$dir\" | $SED 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$dir:\"*) ;;\n\t  ::) dllsearchpath=$dir;;\n\t  *) func_append dllsearchpath \":$dir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) func_append dllsearchpath \":$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n\tcontinue\n\t;;\n\n      -l*)\n\tif test \"X$arg\" = \"X-lc\" || test \"X$arg\" = \"X-lm\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)\n\t    # These systems don't actually have a C or math library (as such)\n\t    continue\n\t    ;;\n\t  *-*-os2*)\n\t    # These systems don't actually have a C library (as such)\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C and math libraries are in the System framework\n\t    func_append deplibs \" System.ltframework\"\n\t    continue\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    test \"X$arg\" = \"X-lc\" && continue\n\t    ;;\n\t  esac\n\telif test \"X$arg\" = \"X-lc_r\"; then\n\t case $host in\n\t *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t   # Do not include libc_r directly, use -pthread flag.\n\t   continue\n\t   ;;\n\t esac\n\tfi\n\tfunc_append deplibs \" $arg\"\n\tcontinue\n\t;;\n\n      -module)\n\tmodule=yes\n\tcontinue\n\t;;\n\n      # Tru64 UNIX uses -model [arg] to determine the layout of C++\n      # classes, name mangling, and exception handling.\n      # Darwin uses the -arch flag to determine output architecture.\n      -model|-arch|-isysroot|--sysroot)\n\tfunc_append compiler_flags \" $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \\\n      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)\n\tfunc_append compiler_flags \" $arg\"\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n\tcase \"$new_inherited_linker_flags \" in\n\t    *\" $arg \"*) ;;\n\t    * ) func_append new_inherited_linker_flags \" $arg\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -multi_module)\n\tsingle_module=\"${wl}-multi_module\"\n\tcontinue\n\t;;\n\n      -no-fast-install)\n\tfast_install=no\n\tcontinue\n\t;;\n\n      -no-install)\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)\n\t  # The PATH hackery in wrapper scripts is required on Windows\n\t  # and Darwin in order for the loader to find any dlls it needs.\n\t  func_warning \"\\`-no-install' is ignored for $host\"\n\t  func_warning \"assuming \\`-no-fast-install' instead\"\n\t  fast_install=no\n\t  ;;\n\t*) no_install=yes ;;\n\tesac\n\tcontinue\n\t;;\n\n      -no-undefined)\n\tallow_undefined=no\n\tcontinue\n\t;;\n\n      -objectlist)\n\tprev=objectlist\n\tcontinue\n\t;;\n\n      -o) prev=output ;;\n\n      -precious-files-regex)\n\tprev=precious_regex\n\tcontinue\n\t;;\n\n      -release)\n\tprev=release\n\tcontinue\n\t;;\n\n      -rpath)\n\tprev=rpath\n\tcontinue\n\t;;\n\n      -R)\n\tprev=xrpath\n\tcontinue\n\t;;\n\n      -R*)\n\tfunc_stripname '-R' '' \"$arg\"\n\tdir=$func_stripname_result\n\t# We need an absolute path.\n\tcase $dir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) ;;\n\t=*)\n\t  func_stripname '=' '' \"$dir\"\n\t  dir=$lt_sysroot$func_stripname_result\n\t  ;;\n\t*)\n\t  func_fatal_error \"only absolute run-paths are allowed\"\n\t  ;;\n\tesac\n\tcase \"$xrpath \" in\n\t*\" $dir \"*) ;;\n\t*) func_append xrpath \" $dir\" ;;\n\tesac\n\tcontinue\n\t;;\n\n      -shared)\n\t# The effects of -shared are defined in a previous loop.\n\tcontinue\n\t;;\n\n      -shrext)\n\tprev=shrext\n\tcontinue\n\t;;\n\n      -static | -static-libtool-libs)\n\t# The effects of -static are defined in a previous loop.\n\t# We used to do the same as -all-static on platforms that\n\t# didn't have a PIC flag, but the assumption that the effects\n\t# would be equivalent was wrong.  It would break on at least\n\t# Digital Unix and AIX.\n\tcontinue\n\t;;\n\n      -thread-safe)\n\tthread_safe=yes\n\tcontinue\n\t;;\n\n      -version-info)\n\tprev=vinfo\n\tcontinue\n\t;;\n\n      -version-number)\n\tprev=vinfo\n\tvinfo_number=yes\n\tcontinue\n\t;;\n\n      -weak)\n        prev=weak\n\tcontinue\n\t;;\n\n      -Wc,*)\n\tfunc_stripname '-Wc,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  func_append arg \" $func_quote_for_eval_result\"\n\t  func_append compiler_flags \" $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Wl,*)\n\tfunc_stripname '-Wl,' '' \"$arg\"\n\targs=$func_stripname_result\n\targ=\n\tsave_ifs=\"$IFS\"; IFS=','\n\tfor flag in $args; do\n\t  IFS=\"$save_ifs\"\n          func_quote_for_eval \"$flag\"\n\t  func_append arg \" $wl$func_quote_for_eval_result\"\n\t  func_append compiler_flags \" $wl$func_quote_for_eval_result\"\n\t  func_append linker_flags \" $func_quote_for_eval_result\"\n\tdone\n\tIFS=\"$save_ifs\"\n\tfunc_stripname ' ' '' \"$arg\"\n\targ=$func_stripname_result\n\t;;\n\n      -Xcompiler)\n\tprev=xcompiler\n\tcontinue\n\t;;\n\n      -Xlinker)\n\tprev=xlinker\n\tcontinue\n\t;;\n\n      -XCClinker)\n\tprev=xcclinker\n\tcontinue\n\t;;\n\n      # -msg_* for osf cc\n      -msg_*)\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      # Flags to be passed through unchanged, with rationale:\n      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler\n      # -r[0-9][0-9]*        specify processor for the SGI compiler\n      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler\n      # +DA*, +DD*           enable 64-bit mode for the HP compiler\n      # -q*                  compiler args for the IBM compiler\n      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC\n      # -F/path              path to uninstalled frameworks, gcc on darwin\n      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC\n      # @file                GCC response files\n      # -tp=*                Portland pgcc target processor selection\n      # --sysroot=*          for sysroot support\n      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization\n      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \\\n      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \\\n      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n        func_append compile_command \" $arg\"\n        func_append finalize_command \" $arg\"\n        func_append compiler_flags \" $arg\"\n        continue\n        ;;\n\n      # Some other compiler flag.\n      -* | +*)\n        func_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n\n      *.$objext)\n\t# A standard object.\n\tfunc_append objs \" $arg\"\n\t;;\n\n      *.lo)\n\t# A libtool-controlled object.\n\n\t# Check to see that this really is a libtool object.\n\tif func_lalib_unsafe_p \"$arg\"; then\n\t  pic_object=\n\t  non_pic_object=\n\n\t  # Read the .lo file\n\t  func_source \"$arg\"\n\n\t  if test -z \"$pic_object\" ||\n\t     test -z \"$non_pic_object\" ||\n\t     test \"$pic_object\" = none &&\n\t     test \"$non_pic_object\" = none; then\n\t    func_fatal_error \"cannot find name of object for \\`$arg'\"\n\t  fi\n\n\t  # Extract subdirectory from the argument.\n\t  func_dirname \"$arg\" \"/\" \"\"\n\t  xdir=\"$func_dirname_result\"\n\n\t  if test \"$pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    pic_object=\"$xdir$pic_object\"\n\n\t    if test \"$prev\" = dlfiles; then\n\t      if test \"$build_libtool_libs\" = yes && test \"$dlopen_support\" = yes; then\n\t\tfunc_append dlfiles \" $pic_object\"\n\t\tprev=\n\t\tcontinue\n\t      else\n\t\t# If libtool objects are unsupported, then we need to preload.\n\t\tprev=dlprefiles\n\t      fi\n\t    fi\n\n\t    # CHECK ME:  I think I busted this.  -Ossama\n\t    if test \"$prev\" = dlprefiles; then\n\t      # Preload the old-style object.\n\t      func_append dlprefiles \" $pic_object\"\n\t      prev=\n\t    fi\n\n\t    # A PIC object.\n\t    func_append libobjs \" $pic_object\"\n\t    arg=\"$pic_object\"\n\t  fi\n\n\t  # Non-PIC object.\n\t  if test \"$non_pic_object\" != none; then\n\t    # Prepend the subdirectory the object is found in.\n\t    non_pic_object=\"$xdir$non_pic_object\"\n\n\t    # A standard non-PIC object\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t    if test -z \"$pic_object\" || test \"$pic_object\" = none ; then\n\t      arg=\"$non_pic_object\"\n\t    fi\n\t  else\n\t    # If the PIC object exists, use it instead.\n\t    # $xdir was prepended to $pic_object above.\n\t    non_pic_object=\"$pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  fi\n\telse\n\t  # Only an error if not doing a dry-run.\n\t  if $opt_dry_run; then\n\t    # Extract subdirectory from the argument.\n\t    func_dirname \"$arg\" \"/\" \"\"\n\t    xdir=\"$func_dirname_result\"\n\n\t    func_lo2o \"$arg\"\n\t    pic_object=$xdir$objdir/$func_lo2o_result\n\t    non_pic_object=$xdir$func_lo2o_result\n\t    func_append libobjs \" $pic_object\"\n\t    func_append non_pic_objects \" $non_pic_object\"\n\t  else\n\t    func_fatal_error \"\\`$arg' is not a valid libtool object\"\n\t  fi\n\tfi\n\t;;\n\n      *.$libext)\n\t# An archive.\n\tfunc_append deplibs \" $arg\"\n\tfunc_append old_deplibs \" $arg\"\n\tcontinue\n\t;;\n\n      *.la)\n\t# A libtool-controlled library.\n\n\tfunc_resolve_sysroot \"$arg\"\n\tif test \"$prev\" = dlfiles; then\n\t  # This library was specified with -dlopen.\n\t  func_append dlfiles \" $func_resolve_sysroot_result\"\n\t  prev=\n\telif test \"$prev\" = dlprefiles; then\n\t  # The library was specified with -dlpreopen.\n\t  func_append dlprefiles \" $func_resolve_sysroot_result\"\n\t  prev=\n\telse\n\t  func_append deplibs \" $func_resolve_sysroot_result\"\n\tfi\n\tcontinue\n\t;;\n\n      # Some other compiler argument.\n      *)\n\t# Unknown arguments in both finalize_command and compile_command need\n\t# to be aesthetically quoted because they are evaled later.\n\tfunc_quote_for_eval \"$arg\"\n\targ=\"$func_quote_for_eval_result\"\n\t;;\n      esac # arg\n\n      # Now actually substitute the argument into the commands.\n      if test -n \"$arg\"; then\n\tfunc_append compile_command \" $arg\"\n\tfunc_append finalize_command \" $arg\"\n      fi\n    done # argument parsing loop\n\n    test -n \"$prev\" && \\\n      func_fatal_help \"the \\`$prevarg' option requires an argument\"\n\n    if test \"$export_dynamic\" = yes && test -n \"$export_dynamic_flag_spec\"; then\n      eval arg=\\\"$export_dynamic_flag_spec\\\"\n      func_append compile_command \" $arg\"\n      func_append finalize_command \" $arg\"\n    fi\n\n    oldlibs=\n    # calculate the name of the file, without its directory\n    func_basename \"$output\"\n    outputname=\"$func_basename_result\"\n    libobjs_save=\"$libobjs\"\n\n    if test -n \"$shlibpath_var\"; then\n      # get the directories listed in $shlibpath_var\n      eval shlib_search_path=\\`\\$ECHO \\\"\\${$shlibpath_var}\\\" \\| \\$SED \\'s/:/ /g\\'\\`\n    else\n      shlib_search_path=\n    fi\n    eval sys_lib_search_path=\\\"$sys_lib_search_path_spec\\\"\n    eval sys_lib_dlsearch_path=\\\"$sys_lib_dlsearch_path_spec\\\"\n\n    func_dirname \"$output\" \"/\" \"\"\n    output_objdir=\"$func_dirname_result$objdir\"\n    func_to_tool_file \"$output_objdir/\"\n    tool_output_objdir=$func_to_tool_file_result\n    # Create the object directory.\n    func_mkdir_p \"$output_objdir\"\n\n    # Determine the type of output\n    case $output in\n    \"\")\n      func_fatal_help \"you must specify an output file\"\n      ;;\n    *.$libext) linkmode=oldlib ;;\n    *.lo | *.$objext) linkmode=obj ;;\n    *.la) linkmode=lib ;;\n    *) linkmode=prog ;; # Anything else should be a program.\n    esac\n\n    specialdeplibs=\n\n    libs=\n    # Find all interdependent deplibs by searching for libraries\n    # that are linked more than once (e.g. -la -lb -la)\n    for deplib in $deplibs; do\n      if $opt_preserve_dup_deps ; then\n\tcase \"$libs \" in\n\t*\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\tesac\n      fi\n      func_append libs \" $deplib\"\n    done\n\n    if test \"$linkmode\" = lib; then\n      libs=\"$predeps $libs $compiler_lib_search_path $postdeps\"\n\n      # Compute libraries that are listed more than once in $predeps\n      # $postdeps and mark them as special (i.e., whose duplicates are\n      # not to be eliminated).\n      pre_post_deps=\n      if $opt_duplicate_compiler_generated_deps; then\n\tfor pre_post_dep in $predeps $postdeps; do\n\t  case \"$pre_post_deps \" in\n\t  *\" $pre_post_dep \"*) func_append specialdeplibs \" $pre_post_deps\" ;;\n\t  esac\n\t  func_append pre_post_deps \" $pre_post_dep\"\n\tdone\n      fi\n      pre_post_deps=\n    fi\n\n    deplibs=\n    newdependency_libs=\n    newlib_search_path=\n    need_relink=no # whether we're linking any uninstalled libtool libraries\n    notinst_deplibs= # not-installed libtool libraries\n    notinst_path= # paths that contain not-installed libtool libraries\n\n    case $linkmode in\n    lib)\n\tpasses=\"conv dlpreopen link\"\n\tfor file in $dlfiles $dlprefiles; do\n\t  case $file in\n\t  *.la) ;;\n\t  *)\n\t    func_fatal_help \"libraries can \\`-dlopen' only libtool libraries: $file\"\n\t    ;;\n\t  esac\n\tdone\n\t;;\n    prog)\n\tcompile_deplibs=\n\tfinalize_deplibs=\n\talldeplibs=no\n\tnewdlfiles=\n\tnewdlprefiles=\n\tpasses=\"conv scan dlopen dlpreopen link\"\n\t;;\n    *)  passes=\"conv\"\n\t;;\n    esac\n\n    for pass in $passes; do\n      # The preopen pass in lib mode reverses $deplibs; put it back here\n      # so that -L comes before libs that need it for instance...\n      if test \"$linkmode,$pass\" = \"lib,link\"; then\n\t## FIXME: Find the place where the list is rebuilt in the wrong\n\t##        order, and fix it there properly\n        tmp_deplibs=\n\tfor deplib in $deplibs; do\n\t  tmp_deplibs=\"$deplib $tmp_deplibs\"\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n      fi\n\n      if test \"$linkmode,$pass\" = \"lib,link\" ||\n\t test \"$linkmode,$pass\" = \"prog,scan\"; then\n\tlibs=\"$deplibs\"\n\tdeplibs=\n      fi\n      if test \"$linkmode\" = prog; then\n\tcase $pass in\n\tdlopen) libs=\"$dlfiles\" ;;\n\tdlpreopen) libs=\"$dlprefiles\" ;;\n\tlink)\n\t  libs=\"$deplibs %DEPLIBS%\"\n\t  test \"X$link_all_deplibs\" != Xno && libs=\"$libs $dependency_libs\"\n\t  ;;\n\tesac\n      fi\n      if test \"$linkmode,$pass\" = \"lib,dlpreopen\"; then\n\t# Collect and forward deplibs of preopened libtool libs\n\tfor lib in $dlprefiles; do\n\t  # Ignore non-libtool-libs\n\t  dependency_libs=\n\t  func_resolve_sysroot \"$lib\"\n\t  case $lib in\n\t  *.la)\tfunc_source \"$func_resolve_sysroot_result\" ;;\n\t  esac\n\n\t  # Collect preopened libtool deplibs, except any this library\n\t  # has declared as weak libs\n\t  for deplib in $dependency_libs; do\n\t    func_basename \"$deplib\"\n            deplib_base=$func_basename_result\n\t    case \" $weak_libs \" in\n\t    *\" $deplib_base \"*) ;;\n\t    *) func_append deplibs \" $deplib\" ;;\n\t    esac\n\t  done\n\tdone\n\tlibs=\"$dlprefiles\"\n      fi\n      if test \"$pass\" = dlopen; then\n\t# Collect dlpreopened libraries\n\tsave_deplibs=\"$deplibs\"\n\tdeplibs=\n      fi\n\n      for deplib in $libs; do\n\tlib=\n\tfound=no\n\tcase $deplib in\n\t-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \\\n        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    func_append compiler_flags \" $deplib\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) func_append new_inherited_linker_flags \" $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-l*)\n\t  if test \"$linkmode\" != lib && test \"$linkmode\" != prog; then\n\t    func_warning \"\\`-l' is ignored for archives/objects\"\n\t    continue\n\t  fi\n\t  func_stripname '-l' '' \"$deplib\"\n\t  name=$func_stripname_result\n\t  if test \"$linkmode\" = lib; then\n\t    searchdirs=\"$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path\"\n\t  else\n\t    searchdirs=\"$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path\"\n\t  fi\n\t  for searchdir in $searchdirs; do\n\t    for search_ext in .la $std_shrext .so .a; do\n\t      # Search the libtool library\n\t      lib=\"$searchdir/lib${name}${search_ext}\"\n\t      if test -f \"$lib\"; then\n\t\tif test \"$search_ext\" = \".la\"; then\n\t\t  found=yes\n\t\telse\n\t\t  found=no\n\t\tfi\n\t\tbreak 2\n\t      fi\n\t    done\n\t  done\n\t  if test \"$found\" != yes; then\n\t    # deplib doesn't seem to be a libtool library\n\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      deplibs=\"$deplib $deplibs\"\n\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    continue\n\t  else # deplib is a libtool library\n\t    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,\n\t    # We need to do some special things here, and not later.\n\t    if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t      case \" $predeps $postdeps \" in\n\t      *\" $deplib \"*)\n\t\tif func_lalib_p \"$lib\"; then\n\t\t  library_names=\n\t\t  old_library=\n\t\t  func_source \"$lib\"\n\t\t  for l in $old_library $library_names; do\n\t\t    ll=\"$l\"\n\t\t  done\n\t\t  if test \"X$ll\" = \"X$old_library\" ; then # only static version available\n\t\t    found=no\n\t\t    func_dirname \"$lib\" \"\" \".\"\n\t\t    ladir=\"$func_dirname_result\"\n\t\t    lib=$ladir/$old_library\n\t\t    if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t\t    else\n\t\t      deplibs=\"$deplib $deplibs\"\n\t\t      test \"$linkmode\" = lib && newdependency_libs=\"$deplib $newdependency_libs\"\n\t\t    fi\n\t\t    continue\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *) ;;\n\t      esac\n\t    fi\n\t  fi\n\t  ;; # -l\n\t*.ltframework)\n\t  if test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$deplib $compile_deplibs\"\n\t    finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$deplib $deplibs\"\n\t    if test \"$linkmode\" = lib ; then\n\t\tcase \"$new_inherited_linker_flags \" in\n\t\t    *\" $deplib \"*) ;;\n\t\t    * ) func_append new_inherited_linker_flags \" $deplib\" ;;\n\t\tesac\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t-L*)\n\t  case $linkmode in\n\t  lib)\n\t    deplibs=\"$deplib $deplibs\"\n\t    test \"$pass\" = conv && continue\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    func_stripname '-L' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" = conv; then\n\t      deplibs=\"$deplib $deplibs\"\n\t      continue\n\t    fi\n\t    if test \"$pass\" = scan; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    func_stripname '-L' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t    ;;\n\t  *)\n\t    func_warning \"\\`-L' is ignored for archives/objects\"\n\t    ;;\n\t  esac # linkmode\n\t  continue\n\t  ;; # -L\n\t-R*)\n\t  if test \"$pass\" = link; then\n\t    func_stripname '-R' '' \"$deplib\"\n\t    func_resolve_sysroot \"$func_stripname_result\"\n\t    dir=$func_resolve_sysroot_result\n\t    # Make sure the xrpath contains only unique directories.\n\t    case \"$xrpath \" in\n\t    *\" $dir \"*) ;;\n\t    *) func_append xrpath \" $dir\" ;;\n\t    esac\n\t  fi\n\t  deplibs=\"$deplib $deplibs\"\n\t  continue\n\t  ;;\n\t*.la)\n\t  func_resolve_sysroot \"$deplib\"\n\t  lib=$func_resolve_sysroot_result\n\t  ;;\n\t*.$libext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t    continue\n\t  fi\n\t  case $linkmode in\n\t  lib)\n\t    # Linking convenience modules into shared libraries is allowed,\n\t    # but linking other static libraries is non-portable.\n\t    case \" $dlpreconveniencelibs \" in\n\t    *\" $deplib \"*) ;;\n\t    *)\n\t      valid_a_lib=no\n\t      case $deplibs_check_method in\n\t\tmatch_pattern*)\n\t\t  set dummy $deplibs_check_method; shift\n\t\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t\t  if eval \"\\$ECHO \\\"$deplib\\\"\" 2>/dev/null | $SED 10q \\\n\t\t    | $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t    valid_a_lib=yes\n\t\t  fi\n\t\t;;\n\t\tpass_all)\n\t\t  valid_a_lib=yes\n\t\t;;\n\t      esac\n\t      if test \"$valid_a_lib\" != yes; then\n\t\techo\n\t\t$ECHO \"*** Warning: Trying to link with static lib archive $deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because the file extensions .$libext of this argument makes me believe\"\n\t\techo \"*** that it is just a static archive that I should not use here.\"\n\t      else\n\t\techo\n\t\t$ECHO \"*** Warning: Linking the shared library $output against the\"\n\t\t$ECHO \"*** static library $deplib is not portable!\"\n\t\tdeplibs=\"$deplib $deplibs\"\n\t      fi\n\t      ;;\n\t    esac\n\t    continue\n\t    ;;\n\t  prog)\n\t    if test \"$pass\" != link; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    fi\n\t    continue\n\t    ;;\n\t  esac # linkmode\n\t  ;; # *.$libext\n\t*.lo | *.$objext)\n\t  if test \"$pass\" = conv; then\n\t    deplibs=\"$deplib $deplibs\"\n\t  elif test \"$linkmode\" = prog; then\n\t    if test \"$pass\" = dlpreopen || test \"$dlopen_support\" != yes || test \"$build_libtool_libs\" = no; then\n\t      # If there is no dlopen support or we're linking statically,\n\t      # we need to preload.\n\t      func_append newdlprefiles \" $deplib\"\n\t      compile_deplibs=\"$deplib $compile_deplibs\"\n\t      finalize_deplibs=\"$deplib $finalize_deplibs\"\n\t    else\n\t      func_append newdlfiles \" $deplib\"\n\t    fi\n\t  fi\n\t  continue\n\t  ;;\n\t%DEPLIBS%)\n\t  alldeplibs=yes\n\t  continue\n\t  ;;\n\tesac # case $deplib\n\n\tif test \"$found\" = yes || test -f \"$lib\"; then :\n\telse\n\t  func_fatal_error \"cannot find the library \\`$lib' or unhandled argument \\`$deplib'\"\n\tfi\n\n\t# Check to see that this really is a libtool archive.\n\tfunc_lalib_unsafe_p \"$lib\" \\\n\t  || func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\n\tfunc_dirname \"$lib\" \"\" \".\"\n\tladir=\"$func_dirname_result\"\n\n\tdlname=\n\tdlopen=\n\tdlpreopen=\n\tlibdir=\n\tlibrary_names=\n\told_library=\n\tinherited_linker_flags=\n\t# If the library was installed with an old release of libtool,\n\t# it will not redefine variables installed, or shouldnotlink\n\tinstalled=yes\n\tshouldnotlink=no\n\tavoidtemprpath=\n\n\n\t# Read the .la file\n\tfunc_source \"$lib\"\n\n\t# Convert \"-framework foo\" to \"foo.ltframework\"\n\tif test -n \"$inherited_linker_flags\"; then\n\t  tmp_inherited_linker_flags=`$ECHO \"$inherited_linker_flags\" | $SED 's/-framework \\([^ $]*\\)/\\1.ltframework/g'`\n\t  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do\n\t    case \" $new_inherited_linker_flags \" in\n\t      *\" $tmp_inherited_linker_flag \"*) ;;\n\t      *) func_append new_inherited_linker_flags \" $tmp_inherited_linker_flag\";;\n\t    esac\n\t  done\n\tfi\n\tdependency_libs=`$ECHO \" $dependency_libs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tif test \"$linkmode,$pass\" = \"lib,link\" ||\n\t   test \"$linkmode,$pass\" = \"prog,scan\" ||\n\t   { test \"$linkmode\" != prog && test \"$linkmode\" != lib; }; then\n\t  test -n \"$dlopen\" && func_append dlfiles \" $dlopen\"\n\t  test -n \"$dlpreopen\" && func_append dlprefiles \" $dlpreopen\"\n\tfi\n\n\tif test \"$pass\" = conv; then\n\t  # Only check for convenience libraries\n\t  deplibs=\"$lib $deplibs\"\n\t  if test -z \"$libdir\"; then\n\t    if test -z \"$old_library\"; then\n\t      func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\t    fi\n\t    # It is a libtool convenience library, so add in its objects.\n\t    func_append convenience \" $ladir/$objdir/$old_library\"\n\t    func_append old_convenience \" $ladir/$objdir/$old_library\"\n\t    tmp_libs=\n\t    for deplib in $dependency_libs; do\n\t      deplibs=\"$deplib $deplibs\"\n\t      if $opt_preserve_dup_deps ; then\n\t\tcase \"$tmp_libs \" in\n\t\t*\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\t\tesac\n\t      fi\n\t      func_append tmp_libs \" $deplib\"\n\t    done\n\t  elif test \"$linkmode\" != prog && test \"$linkmode\" != lib; then\n\t    func_fatal_error \"\\`$lib' is not a convenience library\"\n\t  fi\n\t  continue\n\tfi # $pass = conv\n\n\n\t# Get the name of the library we link against.\n\tlinklib=\n\tif test -n \"$old_library\" &&\n\t   { test \"$prefer_static_libs\" = yes ||\n\t     test \"$prefer_static_libs,$installed\" = \"built,no\"; }; then\n\t  linklib=$old_library\n\telse\n\t  for l in $old_library $library_names; do\n\t    linklib=\"$l\"\n\t  done\n\tfi\n\tif test -z \"$linklib\"; then\n\t  func_fatal_error \"cannot find name of link library for \\`$lib'\"\n\tfi\n\n\t# This library was specified with -dlopen.\n\tif test \"$pass\" = dlopen; then\n\t  if test -z \"$libdir\"; then\n\t    func_fatal_error \"cannot -dlopen a convenience library: \\`$lib'\"\n\t  fi\n\t  if test -z \"$dlname\" ||\n\t     test \"$dlopen_support\" != yes ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    # If there is no dlname, no dlopen support or we're linking\n\t    # statically, we need to preload.  We also need to preload any\n\t    # dependent libraries so libltdl's deplib preloader doesn't\n\t    # bomb out in the load deplibs phase.\n\t    func_append dlprefiles \" $lib $dependency_libs\"\n\t  else\n\t    func_append newdlfiles \" $lib\"\n\t  fi\n\t  continue\n\tfi # $pass = dlopen\n\n\t# We need an absolute path.\n\tcase $ladir in\n\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs_ladir=\"$ladir\" ;;\n\t*)\n\t  abs_ladir=`cd \"$ladir\" && pwd`\n\t  if test -z \"$abs_ladir\"; then\n\t    func_warning \"cannot determine absolute directory name of \\`$ladir'\"\n\t    func_warning \"passing it literally to the linker, although it might fail\"\n\t    abs_ladir=\"$ladir\"\n\t  fi\n\t  ;;\n\tesac\n\tfunc_basename \"$lib\"\n\tlaname=\"$func_basename_result\"\n\n\t# Find the relevant object directory and library name.\n\tif test \"X$installed\" = Xyes; then\n\t  if test ! -f \"$lt_sysroot$libdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    func_warning \"library \\`$lib' was moved.\"\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    libdir=\"$abs_ladir\"\n\t  else\n\t    dir=\"$lt_sysroot$libdir\"\n\t    absdir=\"$lt_sysroot$libdir\"\n\t  fi\n\t  test \"X$hardcode_automatic\" = Xyes && avoidtemprpath=yes\n\telse\n\t  if test ! -f \"$ladir/$objdir/$linklib\" && test -f \"$abs_ladir/$linklib\"; then\n\t    dir=\"$ladir\"\n\t    absdir=\"$abs_ladir\"\n\t    # Remove this search path later\n\t    func_append notinst_path \" $abs_ladir\"\n\t  else\n\t    dir=\"$ladir/$objdir\"\n\t    absdir=\"$abs_ladir/$objdir\"\n\t    # Remove this search path later\n\t    func_append notinst_path \" $abs_ladir\"\n\t  fi\n\tfi # $installed = yes\n\tfunc_stripname 'lib' '.la' \"$laname\"\n\tname=$func_stripname_result\n\n\t# This library was specified with -dlpreopen.\n\tif test \"$pass\" = dlpreopen; then\n\t  if test -z \"$libdir\" && test \"$linkmode\" = prog; then\n\t    func_fatal_error \"only libraries may -dlpreopen a convenience library: \\`$lib'\"\n\t  fi\n\t  case \"$host\" in\n\t    # special handling for platforms with PE-DLLs.\n\t    *cygwin* | *mingw* | *cegcc* )\n\t      # Linker will automatically link against shared library if both\n\t      # static and shared are present.  Therefore, ensure we extract\n\t      # symbols from the import library if a shared library is present\n\t      # (otherwise, the dlopen module name will be incorrect).  We do\n\t      # this by putting the import library name into $newdlprefiles.\n\t      # We recover the dlopen module name by 'saving' the la file\n\t      # name in a special purpose variable, and (later) extracting the\n\t      # dlname from the la file.\n\t      if test -n \"$dlname\"; then\n\t        func_tr_sh \"$dir/$linklib\"\n\t        eval \"libfile_$func_tr_sh_result=\\$abs_ladir/\\$laname\"\n\t        func_append newdlprefiles \" $dir/$linklib\"\n\t      else\n\t        func_append newdlprefiles \" $dir/$old_library\"\n\t        # Keep a list of preopened convenience libraries to check\n\t        # that they are being used correctly in the link pass.\n\t        test -z \"$libdir\" && \\\n\t          func_append dlpreconveniencelibs \" $dir/$old_library\"\n\t      fi\n\t    ;;\n\t    * )\n\t      # Prefer using a static library (so that no silly _DYNAMIC symbols\n\t      # are required to link).\n\t      if test -n \"$old_library\"; then\n\t        func_append newdlprefiles \" $dir/$old_library\"\n\t        # Keep a list of preopened convenience libraries to check\n\t        # that they are being used correctly in the link pass.\n\t        test -z \"$libdir\" && \\\n\t          func_append dlpreconveniencelibs \" $dir/$old_library\"\n\t      # Otherwise, use the dlname, so that lt_dlopen finds it.\n\t      elif test -n \"$dlname\"; then\n\t        func_append newdlprefiles \" $dir/$dlname\"\n\t      else\n\t        func_append newdlprefiles \" $dir/$linklib\"\n\t      fi\n\t    ;;\n\t  esac\n\tfi # $pass = dlpreopen\n\n\tif test -z \"$libdir\"; then\n\t  # Link the convenience library\n\t  if test \"$linkmode\" = lib; then\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t  elif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t    compile_deplibs=\"$dir/$old_library $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$old_library $finalize_deplibs\"\n\t  else\n\t    deplibs=\"$lib $deplibs\" # used for prog,scan pass\n\t  fi\n\t  continue\n\tfi\n\n\n\tif test \"$linkmode\" = prog && test \"$pass\" != link; then\n\t  func_append newlib_search_path \" $ladir\"\n\t  deplibs=\"$lib $deplibs\"\n\n\t  linkalldeplibs=no\n\t  if test \"$link_all_deplibs\" != no || test -z \"$library_names\" ||\n\t     test \"$build_libtool_libs\" = no; then\n\t    linkalldeplibs=yes\n\t  fi\n\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    case $deplib in\n\t    -L*) func_stripname '-L' '' \"$deplib\"\n\t         func_resolve_sysroot \"$func_stripname_result\"\n\t         func_append newlib_search_path \" $func_resolve_sysroot_result\"\n\t\t ;;\n\t    esac\n\t    # Need to link against all dependency_libs?\n\t    if test \"$linkalldeplibs\" = yes; then\n\t      deplibs=\"$deplib $deplibs\"\n\t    else\n\t      # Need to hardcode shared library paths\n\t      # or/and link against static libraries\n\t      newdependency_libs=\"$deplib $newdependency_libs\"\n\t    fi\n\t    if $opt_preserve_dup_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $deplib \"*) func_append specialdeplibs \" $deplib\" ;;\n\t      esac\n\t    fi\n\t    func_append tmp_libs \" $deplib\"\n\t  done # for deplib\n\t  continue\n\tfi # $linkmode = prog...\n\n\tif test \"$linkmode,$pass\" = \"prog,link\"; then\n\t  if test -n \"$library_names\" &&\n\t     { { test \"$prefer_static_libs\" = no ||\n\t         test \"$prefer_static_libs,$installed\" = \"built,yes\"; } ||\n\t       test -z \"$old_library\"; }; then\n\t    # We need to hardcode the library path\n\t    if test -n \"$shlibpath_var\" && test -z \"$avoidtemprpath\" ; then\n\t      # Make sure the rpath contains only unique directories.\n\t      case \"$temp_rpath:\" in\n\t      *\"$absdir:\"*) ;;\n\t      *) func_append temp_rpath \"$absdir:\" ;;\n\t      esac\n\t    fi\n\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) func_append compile_rpath \" $absdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append finalize_rpath \" $libdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t  fi # $linkmode,$pass = prog,link...\n\n\t  if test \"$alldeplibs\" = yes &&\n\t     { test \"$deplibs_check_method\" = pass_all ||\n\t       { test \"$build_libtool_libs\" = yes &&\n\t\t test -n \"$library_names\"; }; }; then\n\t    # We only need to search for static libraries\n\t    continue\n\t  fi\n\tfi\n\n\tlink_static=no # Whether the deplib will be linked statically\n\tuse_static_libs=$prefer_static_libs\n\tif test \"$use_static_libs\" = built && test \"$installed\" = yes; then\n\t  use_static_libs=no\n\tfi\n\tif test -n \"$library_names\" &&\n\t   { test \"$use_static_libs\" = no || test -z \"$old_library\"; }; then\n\t  case $host in\n\t  *cygwin* | *mingw* | *cegcc*)\n\t      # No point in relinking DLLs because paths are not encoded\n\t      func_append notinst_deplibs \" $lib\"\n\t      need_relink=no\n\t    ;;\n\t  *)\n\t    if test \"$installed\" = no; then\n\t      func_append notinst_deplibs \" $lib\"\n\t      need_relink=yes\n\t    fi\n\t    ;;\n\t  esac\n\t  # This is a shared library\n\n\t  # Warn about portability, can't link against -module's on some\n\t  # systems (darwin).  Don't bleat about dlopened modules though!\n\t  dlopenmodule=\"\"\n\t  for dlpremoduletest in $dlprefiles; do\n\t    if test \"X$dlpremoduletest\" = \"X$lib\"; then\n\t      dlopenmodule=\"$dlpremoduletest\"\n\t      break\n\t    fi\n\t  done\n\t  if test -z \"$dlopenmodule\" && test \"$shouldnotlink\" = yes && test \"$pass\" = link; then\n\t    echo\n\t    if test \"$linkmode\" = prog; then\n\t      $ECHO \"*** Warning: Linking the executable $output against the loadable module\"\n\t    else\n\t      $ECHO \"*** Warning: Linking the shared library $output against the loadable module\"\n\t    fi\n\t    $ECHO \"*** $linklib is not portable!\"\n\t  fi\n\t  if test \"$linkmode\" = lib &&\n\t     test \"$hardcode_into_libs\" = yes; then\n\t    # Hardcode the library path.\n\t    # Skip directories that are in the system default run-time\n\t    # search path.\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $absdir \"*) ;;\n\t    *)\n\t      case \"$compile_rpath \" in\n\t      *\" $absdir \"*) ;;\n\t      *) func_append compile_rpath \" $absdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t    case \" $sys_lib_dlsearch_path \" in\n\t    *\" $libdir \"*) ;;\n\t    *)\n\t      case \"$finalize_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append finalize_rpath \" $libdir\" ;;\n\t      esac\n\t      ;;\n\t    esac\n\t  fi\n\n\t  if test -n \"$old_archive_from_expsyms_cmds\"; then\n\t    # figure out the soname\n\t    set dummy $library_names\n\t    shift\n\t    realname=\"$1\"\n\t    shift\n\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t    # use dlname if we got it. it's perfectly good, no?\n\t    if test -n \"$dlname\"; then\n\t      soname=\"$dlname\"\n\t    elif test -n \"$soname_spec\"; then\n\t      # bleh windows\n\t      case $host in\n\t      *cygwin* | mingw* | *cegcc*)\n\t        func_arith $current - $age\n\t\tmajor=$func_arith_result\n\t\tversuffix=\"-$major\"\n\t\t;;\n\t      esac\n\t      eval soname=\\\"$soname_spec\\\"\n\t    else\n\t      soname=\"$realname\"\n\t    fi\n\n\t    # Make a new name for the extract_expsyms_cmds to use\n\t    soroot=\"$soname\"\n\t    func_basename \"$soroot\"\n\t    soname=\"$func_basename_result\"\n\t    func_stripname 'lib' '.dll' \"$soname\"\n\t    newlib=libimp-$func_stripname_result.a\n\n\t    # If the library has no export list, then create one now\n\t    if test -f \"$output_objdir/$soname-def\"; then :\n\t    else\n\t      func_verbose \"extracting exported symbol list from \\`$soname'\"\n\t      func_execute_cmds \"$extract_expsyms_cmds\" 'exit $?'\n\t    fi\n\n\t    # Create $newlib\n\t    if test -f \"$output_objdir/$newlib\"; then :; else\n\t      func_verbose \"generating import library for \\`$soname'\"\n\t      func_execute_cmds \"$old_archive_from_expsyms_cmds\" 'exit $?'\n\t    fi\n\t    # make sure the library variables are pointing to the new library\n\t    dir=$output_objdir\n\t    linklib=$newlib\n\t  fi # test -n \"$old_archive_from_expsyms_cmds\"\n\n\t  if test \"$linkmode\" = prog || test \"$opt_mode\" != relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    lib_linked=yes\n\t    case $hardcode_action in\n\t    immediate | unsupported)\n\t      if test \"$hardcode_direct\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t\tcase $host in\n\t\t  *-*-sco3.2v5.0.[024]*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv4*uw2*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \\\n\t\t    *-*-unixware7*) add_dir=\"-L$dir\" ;;\n\t\t  *-*-darwin* )\n\t\t    # if the lib is a (non-dlopened) module then we can not\n\t\t    # link against it, someone is ignoring the earlier warnings\n\t\t    if /usr/bin/file -L $add 2> /dev/null |\n\t\t\t $GREP \": [^:]* bundle\" >/dev/null ; then\n\t\t      if test \"X$dlopenmodule\" != \"X$lib\"; then\n\t\t\t$ECHO \"*** Warning: lib $linklib is a module, not a shared library\"\n\t\t\tif test -z \"$old_library\" ; then\n\t\t\t  echo\n\t\t\t  echo \"*** And there doesn't seem to be a static archive available\"\n\t\t\t  echo \"*** The link will probably fail, sorry\"\n\t\t\telse\n\t\t\t  add=\"$dir/$old_library\"\n\t\t\tfi\n\t\t      elif test -n \"$old_library\"; then\n\t\t\tadd=\"$dir/$old_library\"\n\t\t      fi\n\t\t    fi\n\t\tesac\n\t      elif test \"$hardcode_minus_L\" = no; then\n\t\tcase $host in\n\t\t*-*-sunos*) add_shlibpath=\"$dir\" ;;\n\t\tesac\n\t\tadd_dir=\"-L$dir\"\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = no; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    relink)\n\t      if test \"$hardcode_direct\" = yes &&\n\t         test \"$hardcode_direct_absolute\" = no; then\n\t\tadd=\"$dir/$linklib\"\n\t      elif test \"$hardcode_minus_L\" = yes; then\n\t\tadd_dir=\"-L$absdir\"\n\t\t# Try looking first in the location we're being installed to.\n\t\tif test -n \"$inst_prefix_dir\"; then\n\t\t  case $libdir in\n\t\t    [\\\\/]*)\n\t\t      func_append add_dir \" -L$inst_prefix_dir$libdir\"\n\t\t      ;;\n\t\t  esac\n\t\tfi\n\t\tadd=\"-l$name\"\n\t      elif test \"$hardcode_shlibpath_var\" = yes; then\n\t\tadd_shlibpath=\"$dir\"\n\t\tadd=\"-l$name\"\n\t      else\n\t\tlib_linked=no\n\t      fi\n\t      ;;\n\t    *) lib_linked=no ;;\n\t    esac\n\n\t    if test \"$lib_linked\" != yes; then\n\t      func_fatal_configuration \"unsupported hardcode properties\"\n\t    fi\n\n\t    if test -n \"$add_shlibpath\"; then\n\t      case :$compile_shlibpath: in\n\t      *\":$add_shlibpath:\"*) ;;\n\t      *) func_append compile_shlibpath \"$add_shlibpath:\" ;;\n\t      esac\n\t    fi\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && compile_deplibs=\"$add_dir $compile_deplibs\"\n\t      test -n \"$add\" && compile_deplibs=\"$add $compile_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t      if test \"$hardcode_direct\" != yes &&\n\t\t test \"$hardcode_minus_L\" != yes &&\n\t\t test \"$hardcode_shlibpath_var\" = yes; then\n\t\tcase :$finalize_shlibpath: in\n\t\t*\":$libdir:\"*) ;;\n\t\t*) func_append finalize_shlibpath \"$libdir:\" ;;\n\t\tesac\n\t      fi\n\t    fi\n\t  fi\n\n\t  if test \"$linkmode\" = prog || test \"$opt_mode\" = relink; then\n\t    add_shlibpath=\n\t    add_dir=\n\t    add=\n\t    # Finalize command for both is simple: just hardcode it.\n\t    if test \"$hardcode_direct\" = yes &&\n\t       test \"$hardcode_direct_absolute\" = no; then\n\t      add=\"$libdir/$linklib\"\n\t    elif test \"$hardcode_minus_L\" = yes; then\n\t      add_dir=\"-L$libdir\"\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_shlibpath_var\" = yes; then\n\t      case :$finalize_shlibpath: in\n\t      *\":$libdir:\"*) ;;\n\t      *) func_append finalize_shlibpath \"$libdir:\" ;;\n\t      esac\n\t      add=\"-l$name\"\n\t    elif test \"$hardcode_automatic\" = yes; then\n\t      if test -n \"$inst_prefix_dir\" &&\n\t\t test -f \"$inst_prefix_dir$libdir/$linklib\" ; then\n\t\tadd=\"$inst_prefix_dir$libdir/$linklib\"\n\t      else\n\t\tadd=\"$libdir/$linklib\"\n\t      fi\n\t    else\n\t      # We cannot seem to hardcode it, guess we'll fake it.\n\t      add_dir=\"-L$libdir\"\n\t      # Try looking first in the location we're being installed to.\n\t      if test -n \"$inst_prefix_dir\"; then\n\t\tcase $libdir in\n\t\t  [\\\\/]*)\n\t\t    func_append add_dir \" -L$inst_prefix_dir$libdir\"\n\t\t    ;;\n\t\tesac\n\t      fi\n\t      add=\"-l$name\"\n\t    fi\n\n\t    if test \"$linkmode\" = prog; then\n\t      test -n \"$add_dir\" && finalize_deplibs=\"$add_dir $finalize_deplibs\"\n\t      test -n \"$add\" && finalize_deplibs=\"$add $finalize_deplibs\"\n\t    else\n\t      test -n \"$add_dir\" && deplibs=\"$add_dir $deplibs\"\n\t      test -n \"$add\" && deplibs=\"$add $deplibs\"\n\t    fi\n\t  fi\n\telif test \"$linkmode\" = prog; then\n\t  # Here we assume that one of hardcode_direct or hardcode_minus_L\n\t  # is not unsupported.  This is valid on all known static and\n\t  # shared platforms.\n\t  if test \"$hardcode_direct\" != unsupported; then\n\t    test -n \"$old_library\" && linklib=\"$old_library\"\n\t    compile_deplibs=\"$dir/$linklib $compile_deplibs\"\n\t    finalize_deplibs=\"$dir/$linklib $finalize_deplibs\"\n\t  else\n\t    compile_deplibs=\"-l$name -L$dir $compile_deplibs\"\n\t    finalize_deplibs=\"-l$name -L$dir $finalize_deplibs\"\n\t  fi\n\telif test \"$build_libtool_libs\" = yes; then\n\t  # Not a shared library\n\t  if test \"$deplibs_check_method\" != pass_all; then\n\t    # We're trying link a shared library against a static one\n\t    # but the system doesn't support it.\n\n\t    # Just print a warning and add the library to dependency_libs so\n\t    # that the program can be linked against the static library.\n\t    echo\n\t    $ECHO \"*** Warning: This system can not link to static lib archive $lib.\"\n\t    echo \"*** I have the capability to make that library automatically link in when\"\n\t    echo \"*** you link to this library.  But I can only do this if you have a\"\n\t    echo \"*** shared version of the library, which you do not appear to have.\"\n\t    if test \"$module\" = yes; then\n\t      echo \"*** But as you try to build a module library, libtool will still create \"\n\t      echo \"*** a static module, that should work as long as the dlopening application\"\n\t      echo \"*** is linked with the -dlopen flag to resolve symbols at runtime.\"\n\t      if test -z \"$global_symbol_pipe\"; then\n\t\techo\n\t\techo \"*** However, this would only work if libtool was able to extract symbol\"\n\t\techo \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t\techo \"*** not find such a program.  So, this module is probably useless.\"\n\t\techo \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t      fi\n\t      if test \"$build_old_libs\" = no; then\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  else\n\t    deplibs=\"$dir/$old_library $deplibs\"\n\t    link_static=yes\n\t  fi\n\tfi # link shared/static library?\n\n\tif test \"$linkmode\" = lib; then\n\t  if test -n \"$dependency_libs\" &&\n\t     { test \"$hardcode_into_libs\" != yes ||\n\t       test \"$build_old_libs\" = yes ||\n\t       test \"$link_static\" = yes; }; then\n\t    # Extract -R from dependency_libs\n\t    temp_deplibs=\n\t    for libdir in $dependency_libs; do\n\t      case $libdir in\n\t      -R*) func_stripname '-R' '' \"$libdir\"\n\t           temp_xrpath=$func_stripname_result\n\t\t   case \" $xrpath \" in\n\t\t   *\" $temp_xrpath \"*) ;;\n\t\t   *) func_append xrpath \" $temp_xrpath\";;\n\t\t   esac;;\n\t      *) func_append temp_deplibs \" $libdir\";;\n\t      esac\n\t    done\n\t    dependency_libs=\"$temp_deplibs\"\n\t  fi\n\n\t  func_append newlib_search_path \" $absdir\"\n\t  # Link against this library\n\t  test \"$link_static\" = no && newdependency_libs=\"$abs_ladir/$laname $newdependency_libs\"\n\t  # ... and its dependency_libs\n\t  tmp_libs=\n\t  for deplib in $dependency_libs; do\n\t    newdependency_libs=\"$deplib $newdependency_libs\"\n\t    case $deplib in\n              -L*) func_stripname '-L' '' \"$deplib\"\n                   func_resolve_sysroot \"$func_stripname_result\";;\n              *) func_resolve_sysroot \"$deplib\" ;;\n            esac\n\t    if $opt_preserve_dup_deps ; then\n\t      case \"$tmp_libs \" in\n\t      *\" $func_resolve_sysroot_result \"*)\n                func_append specialdeplibs \" $func_resolve_sysroot_result\" ;;\n\t      esac\n\t    fi\n\t    func_append tmp_libs \" $func_resolve_sysroot_result\"\n\t  done\n\n\t  if test \"$link_all_deplibs\" != no; then\n\t    # Add the search paths of all dependency libraries\n\t    for deplib in $dependency_libs; do\n\t      path=\n\t      case $deplib in\n\t      -L*) path=\"$deplib\" ;;\n\t      *.la)\n\t        func_resolve_sysroot \"$deplib\"\n\t        deplib=$func_resolve_sysroot_result\n\t        func_dirname \"$deplib\" \"\" \".\"\n\t\tdir=$func_dirname_result\n\t\t# We need an absolute path.\n\t\tcase $dir in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) absdir=\"$dir\" ;;\n\t\t*)\n\t\t  absdir=`cd \"$dir\" && pwd`\n\t\t  if test -z \"$absdir\"; then\n\t\t    func_warning \"cannot determine absolute directory name of \\`$dir'\"\n\t\t    absdir=\"$dir\"\n\t\t  fi\n\t\t  ;;\n\t\tesac\n\t\tif $GREP \"^installed=no\" $deplib > /dev/null; then\n\t\tcase $host in\n\t\t*-*-darwin*)\n\t\t  depdepl=\n\t\t  eval deplibrary_names=`${SED} -n -e 's/^library_names=\\(.*\\)$/\\1/p' $deplib`\n\t\t  if test -n \"$deplibrary_names\" ; then\n\t\t    for tmp in $deplibrary_names ; do\n\t\t      depdepl=$tmp\n\t\t    done\n\t\t    if test -f \"$absdir/$objdir/$depdepl\" ; then\n\t\t      depdepl=\"$absdir/$objdir/$depdepl\"\n\t\t      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`\n                      if test -z \"$darwin_install_name\"; then\n                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`\n                      fi\n\t\t      func_append compiler_flags \" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}\"\n\t\t      func_append linker_flags \" -dylib_file ${darwin_install_name}:${depdepl}\"\n\t\t      path=\n\t\t    fi\n\t\t  fi\n\t\t  ;;\n\t\t*)\n\t\t  path=\"-L$absdir/$objdir\"\n\t\t  ;;\n\t\tesac\n\t\telse\n\t\t  eval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $deplib`\n\t\t  test -z \"$libdir\" && \\\n\t\t    func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\t  test \"$absdir\" != \"$libdir\" && \\\n\t\t    func_warning \"\\`$deplib' seems to be moved\"\n\n\t\t  path=\"-L$absdir\"\n\t\tfi\n\t\t;;\n\t      esac\n\t      case \" $deplibs \" in\n\t      *\" $path \"*) ;;\n\t      *) deplibs=\"$path $deplibs\" ;;\n\t      esac\n\t    done\n\t  fi # link_all_deplibs != no\n\tfi # linkmode = lib\n      done # for deplib in $libs\n      if test \"$pass\" = link; then\n\tif test \"$linkmode\" = \"prog\"; then\n\t  compile_deplibs=\"$new_inherited_linker_flags $compile_deplibs\"\n\t  finalize_deplibs=\"$new_inherited_linker_flags $finalize_deplibs\"\n\telse\n\t  compiler_flags=\"$compiler_flags \"`$ECHO \" $new_inherited_linker_flags\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfi\n      fi\n      dependency_libs=\"$newdependency_libs\"\n      if test \"$pass\" = dlpreopen; then\n\t# Link the dlpreopened libraries before other libraries\n\tfor deplib in $save_deplibs; do\n\t  deplibs=\"$deplib $deplibs\"\n\tdone\n      fi\n      if test \"$pass\" != dlopen; then\n\tif test \"$pass\" != conv; then\n\t  # Make sure lib_search_path contains only unique directories.\n\t  lib_search_path=\n\t  for dir in $newlib_search_path; do\n\t    case \"$lib_search_path \" in\n\t    *\" $dir \"*) ;;\n\t    *) func_append lib_search_path \" $dir\" ;;\n\t    esac\n\t  done\n\t  newlib_search_path=\n\tfi\n\n\tif test \"$linkmode,$pass\" != \"prog,link\"; then\n\t  vars=\"deplibs\"\n\telse\n\t  vars=\"compile_deplibs finalize_deplibs\"\n\tfi\n\tfor var in $vars dependency_libs; do\n\t  # Add libraries to $var in reverse order\n\t  eval tmp_libs=\\\"\\$$var\\\"\n\t  new_libs=\n\t  for deplib in $tmp_libs; do\n\t    # FIXME: Pedantically, this is the right thing to do, so\n\t    #        that some nasty dependency loop isn't accidentally\n\t    #        broken:\n\t    #new_libs=\"$deplib $new_libs\"\n\t    # Pragmatically, this seems to cause very few problems in\n\t    # practice:\n\t    case $deplib in\n\t    -L*) new_libs=\"$deplib $new_libs\" ;;\n\t    -R*) ;;\n\t    *)\n\t      # And here is the reason: when a library appears more\n\t      # than once as an explicit dependence of a library, or\n\t      # is implicitly linked in more than once by the\n\t      # compiler, it is considered special, and multiple\n\t      # occurrences thereof are not removed.  Compare this\n\t      # with having the same library being listed as a\n\t      # dependency of multiple other libraries: in this case,\n\t      # we know (pedantically, we assume) the library does not\n\t      # need to be listed more than once, so we keep only the\n\t      # last copy.  This is not always right, but it is rare\n\t      # enough that we require users that really mean to play\n\t      # such unportable linking tricks to link the library\n\t      # using -Wl,-lname, so that libtool does not consider it\n\t      # for duplicate removal.\n\t      case \" $specialdeplibs \" in\n\t      *\" $deplib \"*) new_libs=\"$deplib $new_libs\" ;;\n\t      *)\n\t\tcase \" $new_libs \" in\n\t\t*\" $deplib \"*) ;;\n\t\t*) new_libs=\"$deplib $new_libs\" ;;\n\t\tesac\n\t\t;;\n\t      esac\n\t      ;;\n\t    esac\n\t  done\n\t  tmp_libs=\n\t  for deplib in $new_libs; do\n\t    case $deplib in\n\t    -L*)\n\t      case \" $tmp_libs \" in\n\t      *\" $deplib \"*) ;;\n\t      *) func_append tmp_libs \" $deplib\" ;;\n\t      esac\n\t      ;;\n\t    *) func_append tmp_libs \" $deplib\" ;;\n\t    esac\n\t  done\n\t  eval $var=\\\"$tmp_libs\\\"\n\tdone # for var\n      fi\n      # Last step: remove runtime libs from dependency_libs\n      # (they stay in deplibs)\n      tmp_libs=\n      for i in $dependency_libs ; do\n\tcase \" $predeps $postdeps $compiler_lib_search_path \" in\n\t*\" $i \"*)\n\t  i=\"\"\n\t  ;;\n\tesac\n\tif test -n \"$i\" ; then\n\t  func_append tmp_libs \" $i\"\n\tfi\n      done\n      dependency_libs=$tmp_libs\n    done # for pass\n    if test \"$linkmode\" = prog; then\n      dlfiles=\"$newdlfiles\"\n    fi\n    if test \"$linkmode\" = prog || test \"$linkmode\" = lib; then\n      dlprefiles=\"$newdlprefiles\"\n    fi\n\n    case $linkmode in\n    oldlib)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for archives\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for archives\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for archives\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for archives\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info/-version-number' is ignored for archives\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for archives\"\n\n      test -n \"$export_symbols$export_symbols_regex\" && \\\n\tfunc_warning \"\\`-export-symbols' is ignored for archives\"\n\n      # Now set the variables for building old libraries.\n      build_libtool_libs=no\n      oldlibs=\"$output\"\n      func_append objs \"$old_deplibs\"\n      ;;\n\n    lib)\n      # Make sure we only generate libraries of the form `libNAME.la'.\n      case $outputname in\n      lib*)\n\tfunc_stripname 'lib' '.la' \"$outputname\"\n\tname=$func_stripname_result\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval libname=\\\"$libname_spec\\\"\n\t;;\n      *)\n\ttest \"$module\" = no && \\\n\t  func_fatal_help \"libtool library \\`$output' must begin with \\`lib'\"\n\n\tif test \"$need_lib_prefix\" != no; then\n\t  # Add the \"lib\" prefix for modules if required\n\t  func_stripname '' '.la' \"$outputname\"\n\t  name=$func_stripname_result\n\t  eval shared_ext=\\\"$shrext_cmds\\\"\n\t  eval libname=\\\"$libname_spec\\\"\n\telse\n\t  func_stripname '' '.la' \"$outputname\"\n\t  libname=$func_stripname_result\n\tfi\n\t;;\n      esac\n\n      if test -n \"$objs\"; then\n\tif test \"$deplibs_check_method\" != pass_all; then\n\t  func_fatal_error \"cannot build libtool library \\`$output' from non-libtool objects on this host:$objs\"\n\telse\n\t  echo\n\t  $ECHO \"*** Warning: Linking the shared library $output against the non-libtool\"\n\t  $ECHO \"*** objects $objs is not portable!\"\n\t  func_append libobjs \" $objs\"\n\tfi\n      fi\n\n      test \"$dlself\" != no && \\\n\tfunc_warning \"\\`-dlopen self' is ignored for libtool libraries\"\n\n      set dummy $rpath\n      shift\n      test \"$#\" -gt 1 && \\\n\tfunc_warning \"ignoring multiple \\`-rpath's for a libtool library\"\n\n      install_libdir=\"$1\"\n\n      oldlibs=\n      if test -z \"$rpath\"; then\n\tif test \"$build_libtool_libs\" = yes; then\n\t  # Building a libtool convenience library.\n\t  # Some compilers have problems with a `.al' extension so\n\t  # convenience libraries should have the same extension an\n\t  # archive normally would.\n\t  oldlibs=\"$output_objdir/$libname.$libext $oldlibs\"\n\t  build_libtool_libs=convenience\n\t  build_old_libs=yes\n\tfi\n\n\ttest -n \"$vinfo\" && \\\n\t  func_warning \"\\`-version-info/-version-number' is ignored for convenience libraries\"\n\n\ttest -n \"$release\" && \\\n\t  func_warning \"\\`-release' is ignored for convenience libraries\"\n      else\n\n\t# Parse the version information argument.\n\tsave_ifs=\"$IFS\"; IFS=':'\n\tset dummy $vinfo 0 0 0\n\tshift\n\tIFS=\"$save_ifs\"\n\n\ttest -n \"$7\" && \\\n\t  func_fatal_help \"too many parameters to \\`-version-info'\"\n\n\t# convert absolute version numbers to libtool ages\n\t# this retains compatibility with .la files and attempts\n\t# to make the code below a bit more comprehensible\n\n\tcase $vinfo_number in\n\tyes)\n\t  number_major=\"$1\"\n\t  number_minor=\"$2\"\n\t  number_revision=\"$3\"\n\t  #\n\t  # There are really only two kinds -- those that\n\t  # use the current revision as the major version\n\t  # and those that subtract age and use age as\n\t  # a minor version.  But, then there is irix\n\t  # which has an extra 1 added just for fun\n\t  #\n\t  case $version_type in\n\t  # correct linux to gnu/linux during the next big refactor\n\t  darwin|linux|osf|windows|none)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_revision\"\n\t    ;;\n\t  freebsd-aout|freebsd-elf|qnx|sunos)\n\t    current=\"$number_major\"\n\t    revision=\"$number_minor\"\n\t    age=\"0\"\n\t    ;;\n\t  irix|nonstopux)\n\t    func_arith $number_major + $number_minor\n\t    current=$func_arith_result\n\t    age=\"$number_minor\"\n\t    revision=\"$number_minor\"\n\t    lt_irix_increment=no\n\t    ;;\n\t  *)\n\t    func_fatal_configuration \"$modename: unknown library version type \\`$version_type'\"\n\t    ;;\n\t  esac\n\t  ;;\n\tno)\n\t  current=\"$1\"\n\t  revision=\"$2\"\n\t  age=\"$3\"\n\t  ;;\n\tesac\n\n\t# Check that each of the things are valid numbers.\n\tcase $current in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"CURRENT \\`$current' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $revision in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"REVISION \\`$revision' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tcase $age in\n\t0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;\n\t*)\n\t  func_error \"AGE \\`$age' must be a nonnegative integer\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\t  ;;\n\tesac\n\n\tif test \"$age\" -gt \"$current\"; then\n\t  func_error \"AGE \\`$age' is greater than the current interface number \\`$current'\"\n\t  func_fatal_error \"\\`$vinfo' is not valid version information\"\n\tfi\n\n\t# Calculate the version variables.\n\tmajor=\n\tversuffix=\n\tverstring=\n\tcase $version_type in\n\tnone) ;;\n\n\tdarwin)\n\t  # Like Linux, but with the current version available in\n\t  # verstring for coding it into the library header\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  # Darwin ld doesn't like 0 for these options...\n\t  func_arith $current + 1\n\t  minor_current=$func_arith_result\n\t  xlcverstring=\"${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision\"\n\t  verstring=\"-compatibility_version $minor_current -current_version $minor_current.$revision\"\n\t  ;;\n\n\tfreebsd-aout)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\";\n\t  ;;\n\n\tfreebsd-elf)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tirix | nonstopux)\n\t  if test \"X$lt_irix_increment\" = \"Xno\"; then\n\t    func_arith $current - $age\n\t  else\n\t    func_arith $current - $age + 1\n\t  fi\n\t  major=$func_arith_result\n\n\t  case $version_type in\n\t    nonstopux) verstring_prefix=nonstopux ;;\n\t    *)         verstring_prefix=sgi ;;\n\t  esac\n\t  verstring=\"$verstring_prefix$major.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$revision\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $revision - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring_prefix$major.$iface:$verstring\"\n\t  done\n\n\t  # Before this point, $major must not contain `.'.\n\t  major=.$major\n\t  versuffix=\"$major.$revision\"\n\t  ;;\n\n\tlinux) # correct to gnu/linux during the next big refactor\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\"$major.$age.$revision\"\n\t  ;;\n\n\tosf)\n\t  func_arith $current - $age\n\t  major=.$func_arith_result\n\t  versuffix=\".$current.$age.$revision\"\n\t  verstring=\"$current.$age.$revision\"\n\n\t  # Add in all the interfaces that we are compatible with.\n\t  loop=$age\n\t  while test \"$loop\" -ne 0; do\n\t    func_arith $current - $loop\n\t    iface=$func_arith_result\n\t    func_arith $loop - 1\n\t    loop=$func_arith_result\n\t    verstring=\"$verstring:${iface}.0\"\n\t  done\n\n\t  # Make executables depend on our current version.\n\t  func_append verstring \":${current}.0\"\n\t  ;;\n\n\tqnx)\n\t  major=\".$current\"\n\t  versuffix=\".$current\"\n\t  ;;\n\n\tsunos)\n\t  major=\".$current\"\n\t  versuffix=\".$current.$revision\"\n\t  ;;\n\n\twindows)\n\t  # Use '-' rather than '.', since we only want one\n\t  # extension on DOS 8.3 filesystems.\n\t  func_arith $current - $age\n\t  major=$func_arith_result\n\t  versuffix=\"-$major\"\n\t  ;;\n\n\t*)\n\t  func_fatal_configuration \"unknown library version type \\`$version_type'\"\n\t  ;;\n\tesac\n\n\t# Clear the version info if we defaulted, and they specified a release.\n\tif test -z \"$vinfo\" && test -n \"$release\"; then\n\t  major=\n\t  case $version_type in\n\t  darwin)\n\t    # we can't check for \"0.0\" in archive_cmds due to quoting\n\t    # problems, so we reset it completely\n\t    verstring=\n\t    ;;\n\t  *)\n\t    verstring=\"0.0\"\n\t    ;;\n\t  esac\n\t  if test \"$need_version\" = no; then\n\t    versuffix=\n\t  else\n\t    versuffix=\".0.0\"\n\t  fi\n\tfi\n\n\t# Remove version info from name if versioning should be avoided\n\tif test \"$avoid_version\" = yes && test \"$need_version\" = no; then\n\t  major=\n\t  versuffix=\n\t  verstring=\"\"\n\tfi\n\n\t# Check to see if the archive will have undefined symbols.\n\tif test \"$allow_undefined\" = yes; then\n\t  if test \"$allow_undefined_flag\" = unsupported; then\n\t    func_warning \"undefined symbols not allowed in $host shared libraries\"\n\t    build_libtool_libs=no\n\t    build_old_libs=yes\n\t  fi\n\telse\n\t  # Don't allow undefined symbols.\n\t  allow_undefined_flag=\"$no_undefined_flag\"\n\tfi\n\n      fi\n\n      func_generate_dlsyms \"$libname\" \"$libname\" \"yes\"\n      func_append libobjs \" $symfileobj\"\n      test \"X$libobjs\" = \"X \" && libobjs=\n\n      if test \"$opt_mode\" != relink; then\n\t# Remove our outputs, but don't remove object files since they\n\t# may have been created when compiling PIC objects.\n\tremovelist=\n\ttempremovelist=`$ECHO \"$output_objdir/*\"`\n\tfor p in $tempremovelist; do\n\t  case $p in\n\t    *.$objext | *.gcno)\n\t       ;;\n\t    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)\n\t       if test \"X$precious_files_regex\" != \"X\"; then\n\t\t if $ECHO \"$p\" | $EGREP -e \"$precious_files_regex\" >/dev/null 2>&1\n\t\t then\n\t\t   continue\n\t\t fi\n\t       fi\n\t       func_append removelist \" $p\"\n\t       ;;\n\t    *) ;;\n\t  esac\n\tdone\n\ttest -n \"$removelist\" && \\\n\t  func_show_eval \"${RM}r \\$removelist\"\n      fi\n\n      # Now set the variables for building old libraries.\n      if test \"$build_old_libs\" = yes && test \"$build_libtool_libs\" != convenience ; then\n\tfunc_append oldlibs \" $output_objdir/$libname.$libext\"\n\n\t# Transform .lo files to .o files.\n\toldobjs=\"$objs \"`$ECHO \"$libobjs\" | $SP2NL | $SED \"/\\.${libext}$/d; $lo2o\" | $NL2SP`\n      fi\n\n      # Eliminate all temporary directories.\n      #for path in $notinst_path; do\n      #\tlib_search_path=`$ECHO \"$lib_search_path \" | $SED \"s% $path % %g\"`\n      #\tdeplibs=`$ECHO \"$deplibs \" | $SED \"s% -L$path % %g\"`\n      #\tdependency_libs=`$ECHO \"$dependency_libs \" | $SED \"s% -L$path % %g\"`\n      #done\n\n      if test -n \"$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\ttemp_xrpath=\n\tfor libdir in $xrpath; do\n\t  func_replace_sysroot \"$libdir\"\n\t  func_append temp_xrpath \" -R$func_replace_sysroot_result\"\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_rpath \" $libdir\" ;;\n\t  esac\n\tdone\n\tif test \"$hardcode_into_libs\" != yes || test \"$build_old_libs\" = yes; then\n\t  dependency_libs=\"$temp_xrpath $dependency_libs\"\n\tfi\n      fi\n\n      # Make sure dlfiles contains only unique files that won't be dlpreopened\n      old_dlfiles=\"$dlfiles\"\n      dlfiles=\n      for lib in $old_dlfiles; do\n\tcase \" $dlprefiles $dlfiles \" in\n\t*\" $lib \"*) ;;\n\t*) func_append dlfiles \" $lib\" ;;\n\tesac\n      done\n\n      # Make sure dlprefiles contains only unique files\n      old_dlprefiles=\"$dlprefiles\"\n      dlprefiles=\n      for lib in $old_dlprefiles; do\n\tcase \"$dlprefiles \" in\n\t*\" $lib \"*) ;;\n\t*) func_append dlprefiles \" $lib\" ;;\n\tesac\n      done\n\n      if test \"$build_libtool_libs\" = yes; then\n\tif test -n \"$rpath\"; then\n\t  case $host in\n\t  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)\n\t    # these systems don't actually have a c library (as such)!\n\t    ;;\n\t  *-*-rhapsody* | *-*-darwin1.[012])\n\t    # Rhapsody C library is in the System framework\n\t    func_append deplibs \" System.ltframework\"\n\t    ;;\n\t  *-*-netbsd*)\n\t    # Don't link with libc until the a.out ld.so is fixed.\n\t    ;;\n\t  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)\n\t    # Do not include libc due to us having libc/libc_r.\n\t    ;;\n\t  *-*-sco3.2v5* | *-*-sco5v6*)\n\t    # Causes problems with __ctype\n\t    ;;\n\t  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)\n\t    # Compiler inserts libc in the correct place for threads to work\n\t    ;;\n\t  *)\n\t    # Add libc to deplibs on all other systems if necessary.\n\t    if test \"$build_libtool_need_lc\" = \"yes\"; then\n\t      func_append deplibs \" -lc\"\n\t    fi\n\t    ;;\n\t  esac\n\tfi\n\n\t# Transform deplibs into only deplibs that can be linked in shared.\n\tname_save=$name\n\tlibname_save=$libname\n\trelease_save=$release\n\tversuffix_save=$versuffix\n\tmajor_save=$major\n\t# I'm not sure if I'm treating the release correctly.  I think\n\t# release should show up in the -l (ie -lgmp5) so we don't want to\n\t# add it in twice.  Is that correct?\n\trelease=\"\"\n\tversuffix=\"\"\n\tmajor=\"\"\n\tnewdeplibs=\n\tdroppeddeps=no\n\tcase $deplibs_check_method in\n\tpass_all)\n\t  # Don't check for shared/static.  Everything works.\n\t  # This might be a little naive.  We might want to check\n\t  # whether the library exists or not.  But this is on\n\t  # osf3 & osf4 and I'm not really sure... Just\n\t  # implementing what was already the behavior.\n\t  newdeplibs=$deplibs\n\t  ;;\n\ttest_compile)\n\t  # This code stresses the \"libraries are programs\" paradigm to its\n\t  # limits. Maybe even breaks it.  We compile a program, linking it\n\t  # against the deplibs as a proxy for the library.  Then we can check\n\t  # whether they linked in statically or dynamically with ldd.\n\t  $opt_dry_run || $RM conftest.c\n\t  cat > conftest.c <<EOF\n\t  int main() { return 0; }\nEOF\n\t  $opt_dry_run || $RM conftest\n\t  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then\n\t    ldd_output=`ldd conftest`\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\tif test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t  case \" $predeps $postdeps \" in\n\t\t  *\" $i \"*)\n\t\t    func_append newdeplibs \" $i\"\n\t\t    i=\"\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t\tif test -n \"$i\" ; then\n\t\t  libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t  deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t  set dummy $deplib_matches; shift\n\t\t  deplib_match=$1\n\t\t  if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t    func_append newdeplibs \" $i\"\n\t\t  else\n\t\t    droppeddeps=yes\n\t\t    echo\n\t\t    $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t    echo \"*** I have the capability to make that library automatically link in when\"\n\t\t    echo \"*** you link to this library.  But I can only do this if you have a\"\n\t\t    echo \"*** shared version of the library, which I believe you do not have\"\n\t\t    echo \"*** because a test_compile did reveal that the linker did not use it for\"\n\t\t    echo \"*** its dynamic dependency list that programs get resolved with at runtime.\"\n\t\t  fi\n\t\tfi\n\t\t;;\n\t      *)\n\t\tfunc_append newdeplibs \" $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  else\n\t    # Error occurred in the first compile.  Let's try to salvage\n\t    # the situation: Compile a separate program for each library.\n\t    for i in $deplibs; do\n\t      case $i in\n\t      -l*)\n\t\tfunc_stripname -l '' \"$i\"\n\t\tname=$func_stripname_result\n\t\t$opt_dry_run || $RM conftest\n\t\tif $LTCC $LTCFLAGS -o conftest conftest.c $i; then\n\t\t  ldd_output=`ldd conftest`\n\t\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\t    case \" $predeps $postdeps \" in\n\t\t    *\" $i \"*)\n\t\t      func_append newdeplibs \" $i\"\n\t\t      i=\"\"\n\t\t      ;;\n\t\t    esac\n\t\t  fi\n\t\t  if test -n \"$i\" ; then\n\t\t    libname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\t    deplib_matches=`eval \"\\\\$ECHO \\\"$library_names_spec\\\"\"`\n\t\t    set dummy $deplib_matches; shift\n\t\t    deplib_match=$1\n\t\t    if test `expr \"$ldd_output\" : \".*$deplib_match\"` -ne 0 ; then\n\t\t      func_append newdeplibs \" $i\"\n\t\t    else\n\t\t      droppeddeps=yes\n\t\t      echo\n\t\t      $ECHO \"*** Warning: dynamic linker does not accept needed library $i.\"\n\t\t      echo \"*** I have the capability to make that library automatically link in when\"\n\t\t      echo \"*** you link to this library.  But I can only do this if you have a\"\n\t\t      echo \"*** shared version of the library, which you do not appear to have\"\n\t\t      echo \"*** because a test_compile did reveal that the linker did not use this one\"\n\t\t      echo \"*** as a dynamic dependency that programs can get resolved with at runtime.\"\n\t\t    fi\n\t\t  fi\n\t\telse\n\t\t  droppeddeps=yes\n\t\t  echo\n\t\t  $ECHO \"*** Warning!  Library $i is needed by this library but I was not able to\"\n\t\t  echo \"*** make it link in!  You will probably need to install it or some\"\n\t\t  echo \"*** library that it depends on before this library will be fully\"\n\t\t  echo \"*** functional.  Installing it before continuing would be even better.\"\n\t\tfi\n\t\t;;\n\t      *)\n\t\tfunc_append newdeplibs \" $i\"\n\t\t;;\n\t      esac\n\t    done\n\t  fi\n\t  ;;\n\tfile_magic*)\n\t  set dummy $deplibs_check_method; shift\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  func_append newdeplibs \" $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tif test -n \"$file_magic_glob\"; then\n\t\t  libnameglob=`func_echo_all \"$libname\" | $SED -e $file_magic_glob`\n\t\telse\n\t\t  libnameglob=$libname\n\t\tfi\n\t\ttest \"$want_nocaseglob\" = yes && nocaseglob=`shopt -p nocaseglob`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  if test \"$want_nocaseglob\" = yes; then\n\t\t    shopt -s nocaseglob\n\t\t    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`\n\t\t    $nocaseglob\n\t\t  else\n\t\t    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`\n\t\t  fi\n\t\t  for potent_lib in $potential_libs; do\n\t\t      # Follow soft links.\n\t\t      if ls -lLd \"$potent_lib\" 2>/dev/null |\n\t\t\t $GREP \" -> \" >/dev/null; then\n\t\t\tcontinue\n\t\t      fi\n\t\t      # The statement above tries to avoid entering an\n\t\t      # endless loop below, in case of cyclic links.\n\t\t      # We might still enter an endless loop, since a link\n\t\t      # loop can be closed while we follow links,\n\t\t      # but so what?\n\t\t      potlib=\"$potent_lib\"\n\t\t      while test -h \"$potlib\" 2>/dev/null; do\n\t\t\tpotliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`\n\t\t\tcase $potliblink in\n\t\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) potlib=\"$potliblink\";;\n\t\t\t*) potlib=`$ECHO \"$potlib\" | $SED 's,[^/]*$,,'`\"$potliblink\";;\n\t\t\tesac\n\t\t      done\n\t\t      if eval $file_magic_cmd \\\"\\$potlib\\\" 2>/dev/null |\n\t\t\t $SED -e 10q |\n\t\t\t $EGREP \"$file_magic_regex\" > /dev/null; then\n\t\t\tfunc_append newdeplibs \" $a_deplib\"\n\t\t\ta_deplib=\"\"\n\t\t\tbreak 2\n\t\t      fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\techo\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for file magic test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a file magic. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      func_append newdeplibs \" $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tmatch_pattern*)\n\t  set dummy $deplibs_check_method; shift\n\t  match_pattern_regex=`expr \"$deplibs_check_method\" : \"$1 \\(.*\\)\"`\n\t  for a_deplib in $deplibs; do\n\t    case $a_deplib in\n\t    -l*)\n\t      func_stripname -l '' \"$a_deplib\"\n\t      name=$func_stripname_result\n\t      if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t\tcase \" $predeps $postdeps \" in\n\t\t*\" $a_deplib \"*)\n\t\t  func_append newdeplibs \" $a_deplib\"\n\t\t  a_deplib=\"\"\n\t\t  ;;\n\t\tesac\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tlibname=`eval \"\\\\$ECHO \\\"$libname_spec\\\"\"`\n\t\tfor i in $lib_search_path $sys_lib_search_path $shlib_search_path; do\n\t\t  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`\n\t\t  for potent_lib in $potential_libs; do\n\t\t    potlib=\"$potent_lib\" # see symlink-check above in file_magic test\n\t\t    if eval \"\\$ECHO \\\"$potent_lib\\\"\" 2>/dev/null | $SED 10q | \\\n\t\t       $EGREP \"$match_pattern_regex\" > /dev/null; then\n\t\t      func_append newdeplibs \" $a_deplib\"\n\t\t      a_deplib=\"\"\n\t\t      break 2\n\t\t    fi\n\t\t  done\n\t\tdone\n\t      fi\n\t      if test -n \"$a_deplib\" ; then\n\t\tdroppeddeps=yes\n\t\techo\n\t\t$ECHO \"*** Warning: linker path does not have real file for library $a_deplib.\"\n\t\techo \"*** I have the capability to make that library automatically link in when\"\n\t\techo \"*** you link to this library.  But I can only do this if you have a\"\n\t\techo \"*** shared version of the library, which you do not appear to have\"\n\t\techo \"*** because I did check the linker path looking for a file starting\"\n\t\tif test -z \"$potlib\" ; then\n\t\t  $ECHO \"*** with $libname but no candidates were found. (...for regex pattern test)\"\n\t\telse\n\t\t  $ECHO \"*** with $libname and none of the candidates passed a file format test\"\n\t\t  $ECHO \"*** using a regex pattern. Last file checked: $potlib\"\n\t\tfi\n\t      fi\n\t      ;;\n\t    *)\n\t      # Add a -L argument.\n\t      func_append newdeplibs \" $a_deplib\"\n\t      ;;\n\t    esac\n\t  done # Gone through all deplibs.\n\t  ;;\n\tnone | unknown | *)\n\t  newdeplibs=\"\"\n\t  tmp_deplibs=`$ECHO \" $deplibs\" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`\n\t  if test \"X$allow_libtool_libs_with_static_runtimes\" = \"Xyes\" ; then\n\t    for i in $predeps $postdeps ; do\n\t      # can't use Xsed below, because $i might contain '/'\n\t      tmp_deplibs=`$ECHO \" $tmp_deplibs\" | $SED \"s,$i,,\"`\n\t    done\n\t  fi\n\t  case $tmp_deplibs in\n\t  *[!\\\t\\ ]*)\n\t    echo\n\t    if test \"X$deplibs_check_method\" = \"Xnone\"; then\n\t      echo \"*** Warning: inter-library dependencies are not supported in this platform.\"\n\t    else\n\t      echo \"*** Warning: inter-library dependencies are not known to be supported.\"\n\t    fi\n\t    echo \"*** All declared inter-library dependencies are being dropped.\"\n\t    droppeddeps=yes\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n\tversuffix=$versuffix_save\n\tmajor=$major_save\n\trelease=$release_save\n\tlibname=$libname_save\n\tname=$name_save\n\n\tcase $host in\n\t*-*-rhapsody* | *-*-darwin1.[012])\n\t  # On Rhapsody replace the C library with the System framework\n\t  newdeplibs=`$ECHO \" $newdeplibs\" | $SED 's/ -lc / System.ltframework /'`\n\t  ;;\n\tesac\n\n\tif test \"$droppeddeps\" = yes; then\n\t  if test \"$module\" = yes; then\n\t    echo\n\t    echo \"*** Warning: libtool could not satisfy all declared inter-library\"\n\t    $ECHO \"*** dependencies of module $libname.  Therefore, libtool will create\"\n\t    echo \"*** a static module, that should work as long as the dlopening\"\n\t    echo \"*** application is linked with the -dlopen flag.\"\n\t    if test -z \"$global_symbol_pipe\"; then\n\t      echo\n\t      echo \"*** However, this would only work if libtool was able to extract symbol\"\n\t      echo \"*** lists from a program, using \\`nm' or equivalent, but libtool could\"\n\t      echo \"*** not find such a program.  So, this module is probably useless.\"\n\t      echo \"*** \\`nm' from GNU binutils and a full rebuild may help.\"\n\t    fi\n\t    if test \"$build_old_libs\" = no; then\n\t      oldlibs=\"$output_objdir/$libname.$libext\"\n\t      build_libtool_libs=module\n\t      build_old_libs=yes\n\t    else\n\t      build_libtool_libs=no\n\t    fi\n\t  else\n\t    echo \"*** The inter-library dependencies that have been dropped here will be\"\n\t    echo \"*** automatically added whenever a program is linked with this library\"\n\t    echo \"*** or is declared to -dlopen it.\"\n\n\t    if test \"$allow_undefined\" = no; then\n\t      echo\n\t      echo \"*** Since this library must not contain undefined symbols,\"\n\t      echo \"*** because either the platform does not support them or\"\n\t      echo \"*** it was explicitly requested with -no-undefined,\"\n\t      echo \"*** libtool will only create a static version of it.\"\n\t      if test \"$build_old_libs\" = no; then\n\t\toldlibs=\"$output_objdir/$libname.$libext\"\n\t\tbuild_libtool_libs=module\n\t\tbuild_old_libs=yes\n\t      else\n\t\tbuild_libtool_libs=no\n\t      fi\n\t    fi\n\t  fi\n\tfi\n\t# Done checking deplibs!\n\tdeplibs=$newdeplibs\n      fi\n      # Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n      case $host in\n\t*-*-darwin*)\n\t  newdeplibs=`$ECHO \" $newdeplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  new_inherited_linker_flags=`$ECHO \" $new_inherited_linker_flags\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  deplibs=`$ECHO \" $deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t  ;;\n      esac\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    func_append new_libs \" -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) func_append new_libs \" $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) func_append new_libs \" $deplib\" ;;\n\tesac\n      done\n      deplibs=\"$new_libs\"\n\n      # All the library-specific variables (install_libdir is set above).\n      library_names=\n      old_library=\n      dlname=\n\n      # Test again, we may have decided not to build it any more\n      if test \"$build_libtool_libs\" = yes; then\n\t# Remove ${wl} instances when linking with ld.\n\t# FIXME: should test the right _cmds variable.\n\tcase $archive_cmds in\n\t  *\\$LD\\ *) wl= ;;\n        esac\n\tif test \"$hardcode_into_libs\" = yes; then\n\t  # Hardcode the library paths\n\t  hardcode_libdirs=\n\t  dep_rpath=\n\t  rpath=\"$finalize_rpath\"\n\t  test \"$opt_mode\" != relink && rpath=\"$compile_rpath$rpath\"\n\t  for libdir in $rpath; do\n\t    if test -n \"$hardcode_libdir_flag_spec\"; then\n\t      if test -n \"$hardcode_libdir_separator\"; then\n\t\tfunc_replace_sysroot \"$libdir\"\n\t\tlibdir=$func_replace_sysroot_result\n\t\tif test -z \"$hardcode_libdirs\"; then\n\t\t  hardcode_libdirs=\"$libdir\"\n\t\telse\n\t\t  # Just accumulate the unique libdirs.\n\t\t  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t\t  *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t    ;;\n\t\t  *)\n\t\t    func_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t    ;;\n\t\t  esac\n\t\tfi\n\t      else\n\t\teval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t\tfunc_append dep_rpath \" $flag\"\n\t      fi\n\t    elif test -n \"$runpath_var\"; then\n\t      case \"$perm_rpath \" in\n\t      *\" $libdir \"*) ;;\n\t      *) func_append perm_rpath \" $libdir\" ;;\n\t      esac\n\t    fi\n\t  done\n\t  # Substitute the hardcoded libdirs into the rpath.\n\t  if test -n \"$hardcode_libdir_separator\" &&\n\t     test -n \"$hardcode_libdirs\"; then\n\t    libdir=\"$hardcode_libdirs\"\n\t    eval \"dep_rpath=\\\"$hardcode_libdir_flag_spec\\\"\"\n\t  fi\n\t  if test -n \"$runpath_var\" && test -n \"$perm_rpath\"; then\n\t    # We should set the runpath_var.\n\t    rpath=\n\t    for dir in $perm_rpath; do\n\t      func_append rpath \"$dir:\"\n\t    done\n\t    eval \"$runpath_var='$rpath\\$$runpath_var'; export $runpath_var\"\n\t  fi\n\t  test -n \"$dep_rpath\" && deplibs=\"$dep_rpath $deplibs\"\n\tfi\n\n\tshlibpath=\"$finalize_shlibpath\"\n\ttest \"$opt_mode\" != relink && shlibpath=\"$compile_shlibpath$shlibpath\"\n\tif test -n \"$shlibpath\"; then\n\t  eval \"$shlibpath_var='$shlibpath\\$$shlibpath_var'; export $shlibpath_var\"\n\tfi\n\n\t# Get the real and link names of the library.\n\teval shared_ext=\\\"$shrext_cmds\\\"\n\teval library_names=\\\"$library_names_spec\\\"\n\tset dummy $library_names\n\tshift\n\trealname=\"$1\"\n\tshift\n\n\tif test -n \"$soname_spec\"; then\n\t  eval soname=\\\"$soname_spec\\\"\n\telse\n\t  soname=\"$realname\"\n\tfi\n\tif test -z \"$dlname\"; then\n\t  dlname=$soname\n\tfi\n\n\tlib=\"$output_objdir/$realname\"\n\tlinknames=\n\tfor link\n\tdo\n\t  func_append linknames \" $link\"\n\tdone\n\n\t# Use standard objects if they are pic\n\ttest -z \"$pic_flag\" && libobjs=`$ECHO \"$libobjs\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\ttest \"X$libobjs\" = \"X \" && libobjs=\n\n\tdelfiles=\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  $opt_dry_run || cp \"$export_symbols\" \"$output_objdir/$libname.uexp\"\n\t  export_symbols=\"$output_objdir/$libname.uexp\"\n\t  func_append delfiles \" $export_symbols\"\n\tfi\n\n\torig_export_symbols=\n\tcase $host_os in\n\tcygwin* | mingw* | cegcc*)\n\t  if test -n \"$export_symbols\" && test -z \"$export_symbols_regex\"; then\n\t    # exporting using user supplied symfile\n\t    if test \"x`$SED 1q $export_symbols`\" != xEXPORTS; then\n\t      # and it's NOT already a .def file. Must figure out\n\t      # which of the given symbols are data symbols and tag\n\t      # them as such. So, trigger use of export_symbols_cmds.\n\t      # export_symbols gets reassigned inside the \"prepare\n\t      # the list of exported symbols\" if statement, so the\n\t      # include_expsyms logic still works.\n\t      orig_export_symbols=\"$export_symbols\"\n\t      export_symbols=\n\t      always_export_symbols=yes\n\t    fi\n\t  fi\n\t  ;;\n\tesac\n\n\t# Prepare the list of exported symbols\n\tif test -z \"$export_symbols\"; then\n\t  if test \"$always_export_symbols\" = yes || test -n \"$export_symbols_regex\"; then\n\t    func_verbose \"generating symbol list for \\`$libname.la'\"\n\t    export_symbols=\"$output_objdir/$libname.exp\"\n\t    $opt_dry_run || $RM $export_symbols\n\t    cmds=$export_symbols_cmds\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd1 in $cmds; do\n\t      IFS=\"$save_ifs\"\n\t      # Take the normal branch if the nm_file_list_spec branch\n\t      # doesn't work or if tool conversion is not needed.\n\t      case $nm_file_list_spec~$to_tool_file_cmd in\n\t\t*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)\n\t\t  try_normal_branch=yes\n\t\t  eval cmd=\\\"$cmd1\\\"\n\t\t  func_len \" $cmd\"\n\t\t  len=$func_len_result\n\t\t  ;;\n\t\t*)\n\t\t  try_normal_branch=no\n\t\t  ;;\n\t      esac\n\t      if test \"$try_normal_branch\" = yes \\\n\t\t && { test \"$len\" -lt \"$max_cmd_len\" \\\n\t\t      || test \"$max_cmd_len\" -le -1; }\n\t      then\n\t\tfunc_show_eval \"$cmd\" 'exit $?'\n\t\tskipped_export=false\n\t      elif test -n \"$nm_file_list_spec\"; then\n\t\tfunc_basename \"$output\"\n\t\toutput_la=$func_basename_result\n\t\tsave_libobjs=$libobjs\n\t\tsave_output=$output\n\t\toutput=${output_objdir}/${output_la}.nm\n\t\tfunc_to_tool_file \"$output\"\n\t\tlibobjs=$nm_file_list_spec$func_to_tool_file_result\n\t\tfunc_append delfiles \" $output\"\n\t\tfunc_verbose \"creating $NM input file list: $output\"\n\t\tfor obj in $save_libobjs; do\n\t\t  func_to_tool_file \"$obj\"\n\t\t  $ECHO \"$func_to_tool_file_result\"\n\t\tdone > \"$output\"\n\t\teval cmd=\\\"$cmd1\\\"\n\t\tfunc_show_eval \"$cmd\" 'exit $?'\n\t\toutput=$save_output\n\t\tlibobjs=$save_libobjs\n\t\tskipped_export=false\n\t      else\n\t\t# The command line is too long to execute in one step.\n\t\tfunc_verbose \"using reloadable object file for export list...\"\n\t\tskipped_export=:\n\t\t# Break out early, otherwise skipped_export may be\n\t\t# set to false by a later but shorter cmd.\n\t\tbreak\n\t      fi\n\t    done\n\t    IFS=\"$save_ifs\"\n\t    if test -n \"$export_symbols_regex\" && test \"X$skipped_export\" != \"X:\"; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t  tmp_export_symbols=\"$export_symbols\"\n\t  test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t  $opt_dry_run || eval '$ECHO \"$include_expsyms\" | $SP2NL >> \"$tmp_export_symbols\"'\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" && test -n \"$orig_export_symbols\"; then\n\t  # The given exports_symbols file has to be filtered, so filter it.\n\t  func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t  # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t  # 's' commands which not all seds can handle. GNU sed should be fine\n\t  # though. Also, the filter scales superlinearly with the number of\n\t  # global variables. join(1) would be nice here, but unfortunately\n\t  # isn't a blessed tool.\n\t  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t  func_append delfiles \" $export_symbols $output_objdir/$libname.filter\"\n\t  export_symbols=$output_objdir/$libname.def\n\t  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\tfi\n\n\ttmp_deplibs=\n\tfor test_deplib in $deplibs; do\n\t  case \" $convenience \" in\n\t  *\" $test_deplib \"*) ;;\n\t  *)\n\t    func_append tmp_deplibs \" $test_deplib\"\n\t    ;;\n\t  esac\n\tdone\n\tdeplibs=\"$tmp_deplibs\"\n\n\tif test -n \"$convenience\"; then\n\t  if test -n \"$whole_archive_flag_spec\" &&\n\t    test \"$compiler_needs_object\" = yes &&\n\t    test -z \"$libobjs\"; then\n\t    # extract the archives, so we have objects to list.\n\t    # TODO: could optimize this to just extract one archive.\n\t    whole_archive_flag_spec=\n\t  fi\n\t  if test -n \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  else\n\t    gentop=\"$output_objdir/${outputname}x\"\n\t    func_append generated \" $gentop\"\n\n\t    func_extract_archives $gentop $convenience\n\t    func_append libobjs \" $func_extract_archives_result\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\tfi\n\n\tif test \"$thread_safe\" = yes && test -n \"$thread_safe_flag_spec\"; then\n\t  eval flag=\\\"$thread_safe_flag_spec\\\"\n\t  func_append linker_flags \" $flag\"\n\tfi\n\n\t# Make a backup of the uninstalled library when relinking\n\tif test \"$opt_mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?\n\tfi\n\n\t# Do each of the archive commands.\n\tif test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t  if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$module_expsym_cmds\\\"\n\t    cmds=$module_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$module_cmds\\\"\n\t    cmds=$module_cmds\n\t  fi\n\telse\n\t  if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t    eval test_cmds=\\\"$archive_expsym_cmds\\\"\n\t    cmds=$archive_expsym_cmds\n\t  else\n\t    eval test_cmds=\\\"$archive_cmds\\\"\n\t    cmds=$archive_cmds\n\t  fi\n\tfi\n\n\tif test \"X$skipped_export\" != \"X:\" &&\n\t   func_len \" $test_cmds\" &&\n\t   len=$func_len_result &&\n\t   test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  :\n\telse\n\t  # The command line is too long to link in one step, link piecewise\n\t  # or, if using GNU ld and skipped_export is not :, use a linker\n\t  # script.\n\n\t  # Save the value of $output and $libobjs because we want to\n\t  # use them later.  If we have whole_archive_flag_spec, we\n\t  # want to use save_libobjs as it was before\n\t  # whole_archive_flag_spec was expanded, because we can't\n\t  # assume the linker understands whole_archive_flag_spec.\n\t  # This may have to be revisited, in case too many\n\t  # convenience libraries get linked in and end up exceeding\n\t  # the spec.\n\t  if test -z \"$convenience\" || test -z \"$whole_archive_flag_spec\"; then\n\t    save_libobjs=$libobjs\n\t  fi\n\t  save_output=$output\n\t  func_basename \"$output\"\n\t  output_la=$func_basename_result\n\n\t  # Clear the reloadable object creation command queue and\n\t  # initialize k to one.\n\t  test_cmds=\n\t  concat_cmds=\n\t  objlist=\n\t  last_robj=\n\t  k=1\n\n\t  if test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"$with_gnu_ld\" = yes; then\n\t    output=${output_objdir}/${output_la}.lnkscript\n\t    func_verbose \"creating GNU ld script: $output\"\n\t    echo 'INPUT (' > $output\n\t    for obj in $save_libobjs\n\t    do\n\t      func_to_tool_file \"$obj\"\n\t      $ECHO \"$func_to_tool_file_result\" >> $output\n\t    done\n\t    echo ')' >> $output\n\t    func_append delfiles \" $output\"\n\t    func_to_tool_file \"$output\"\n\t    output=$func_to_tool_file_result\n\t  elif test -n \"$save_libobjs\" && test \"X$skipped_export\" != \"X:\" && test \"X$file_list_spec\" != X; then\n\t    output=${output_objdir}/${output_la}.lnk\n\t    func_verbose \"creating linker input file list: $output\"\n\t    : > $output\n\t    set x $save_libobjs\n\t    shift\n\t    firstobj=\n\t    if test \"$compiler_needs_object\" = yes; then\n\t      firstobj=\"$1 \"\n\t      shift\n\t    fi\n\t    for obj\n\t    do\n\t      func_to_tool_file \"$obj\"\n\t      $ECHO \"$func_to_tool_file_result\" >> $output\n\t    done\n\t    func_append delfiles \" $output\"\n\t    func_to_tool_file \"$output\"\n\t    output=$firstobj\\\"$file_list_spec$func_to_tool_file_result\\\"\n\t  else\n\t    if test -n \"$save_libobjs\"; then\n\t      func_verbose \"creating reloadable object files...\"\n\t      output=$output_objdir/$output_la-${k}.$objext\n\t      eval test_cmds=\\\"$reload_cmds\\\"\n\t      func_len \" $test_cmds\"\n\t      len0=$func_len_result\n\t      len=$len0\n\n\t      # Loop over the list of objects to be linked.\n\t      for obj in $save_libobjs\n\t      do\n\t\tfunc_len \" $obj\"\n\t\tfunc_arith $len + $func_len_result\n\t\tlen=$func_arith_result\n\t\tif test \"X$objlist\" = X ||\n\t\t   test \"$len\" -lt \"$max_cmd_len\"; then\n\t\t  func_append objlist \" $obj\"\n\t\telse\n\t\t  # The command $test_cmds is almost too long, add a\n\t\t  # command to the queue.\n\t\t  if test \"$k\" -eq 1 ; then\n\t\t    # The first file doesn't have a previous command to add.\n\t\t    reload_objs=$objlist\n\t\t    eval concat_cmds=\\\"$reload_cmds\\\"\n\t\t  else\n\t\t    # All subsequent reloadable object files will link in\n\t\t    # the last one created.\n\t\t    reload_objs=\"$objlist $last_robj\"\n\t\t    eval concat_cmds=\\\"\\$concat_cmds~$reload_cmds~\\$RM $last_robj\\\"\n\t\t  fi\n\t\t  last_robj=$output_objdir/$output_la-${k}.$objext\n\t\t  func_arith $k + 1\n\t\t  k=$func_arith_result\n\t\t  output=$output_objdir/$output_la-${k}.$objext\n\t\t  objlist=\" $obj\"\n\t\t  func_len \" $last_robj\"\n\t\t  func_arith $len0 + $func_len_result\n\t\t  len=$func_arith_result\n\t\tfi\n\t      done\n\t      # Handle the remaining objects by creating one last\n\t      # reloadable object file.  All subsequent reloadable object\n\t      # files will link in the last one created.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      reload_objs=\"$objlist $last_robj\"\n\t      eval concat_cmds=\\\"\\${concat_cmds}$reload_cmds\\\"\n\t      if test -n \"$last_robj\"; then\n\t        eval concat_cmds=\\\"\\${concat_cmds}~\\$RM $last_robj\\\"\n\t      fi\n\t      func_append delfiles \" $output\"\n\n\t    else\n\t      output=\n\t    fi\n\n\t    if ${skipped_export-false}; then\n\t      func_verbose \"generating symbol list for \\`$libname.la'\"\n\t      export_symbols=\"$output_objdir/$libname.exp\"\n\t      $opt_dry_run || $RM $export_symbols\n\t      libobjs=$output\n\t      # Append the command to create the export file.\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\$concat_cmds$export_symbols_cmds\\\"\n\t      if test -n \"$last_robj\"; then\n\t\teval concat_cmds=\\\"\\$concat_cmds~\\$RM $last_robj\\\"\n\t      fi\n\t    fi\n\n\t    test -n \"$save_libobjs\" &&\n\t      func_verbose \"creating a temporary reloadable object file: $output\"\n\n\t    # Loop through the commands generated above and execute them.\n\t    save_ifs=\"$IFS\"; IFS='~'\n\t    for cmd in $concat_cmds; do\n\t      IFS=\"$save_ifs\"\n\t      $opt_silent || {\n\t\t  func_quote_for_expand \"$cmd\"\n\t\t  eval \"func_echo $func_quote_for_expand_result\"\n\t      }\n\t      $opt_dry_run || eval \"$cmd\" || {\n\t\tlt_exit=$?\n\n\t\t# Restore the uninstalled library and exit\n\t\tif test \"$opt_mode\" = relink; then\n\t\t  ( cd \"$output_objdir\" && \\\n\t\t    $RM \"${realname}T\" && \\\n\t\t    $MV \"${realname}U\" \"$realname\" )\n\t\tfi\n\n\t\texit $lt_exit\n\t      }\n\t    done\n\t    IFS=\"$save_ifs\"\n\n\t    if test -n \"$export_symbols_regex\" && ${skipped_export-false}; then\n\t      func_show_eval '$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"'\n\t      func_show_eval '$MV \"${export_symbols}T\" \"$export_symbols\"'\n\t    fi\n\t  fi\n\n          if ${skipped_export-false}; then\n\t    if test -n \"$export_symbols\" && test -n \"$include_expsyms\"; then\n\t      tmp_export_symbols=\"$export_symbols\"\n\t      test -n \"$orig_export_symbols\" && tmp_export_symbols=\"$orig_export_symbols\"\n\t      $opt_dry_run || eval '$ECHO \"$include_expsyms\" | $SP2NL >> \"$tmp_export_symbols\"'\n\t    fi\n\n\t    if test -n \"$orig_export_symbols\"; then\n\t      # The given exports_symbols file has to be filtered, so filter it.\n\t      func_verbose \"filter symbol list for \\`$libname.la' to tag DATA exports\"\n\t      # FIXME: $output_objdir/$libname.filter potentially contains lots of\n\t      # 's' commands which not all seds can handle. GNU sed should be fine\n\t      # though. Also, the filter scales superlinearly with the number of\n\t      # global variables. join(1) would be nice here, but unfortunately\n\t      # isn't a blessed tool.\n\t      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\\(.*\\)\\([ \\,].*\\),s|^\\1$|\\1\\2|,' < $export_symbols > $output_objdir/$libname.filter\n\t      func_append delfiles \" $export_symbols $output_objdir/$libname.filter\"\n\t      export_symbols=$output_objdir/$libname.def\n\t      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols\n\t    fi\n\t  fi\n\n\t  libobjs=$output\n\t  # Restore the value of output.\n\t  output=$save_output\n\n\t  if test -n \"$convenience\" && test -n \"$whole_archive_flag_spec\"; then\n\t    eval libobjs=\\\"\\$libobjs $whole_archive_flag_spec\\\"\n\t    test \"X$libobjs\" = \"X \" && libobjs=\n\t  fi\n\t  # Expand the library linking commands again to reset the\n\t  # value of $libobjs for piecewise linking.\n\n\t  # Do each of the archive commands.\n\t  if test \"$module\" = yes && test -n \"$module_cmds\" ; then\n\t    if test -n \"$export_symbols\" && test -n \"$module_expsym_cmds\"; then\n\t      cmds=$module_expsym_cmds\n\t    else\n\t      cmds=$module_cmds\n\t    fi\n\t  else\n\t    if test -n \"$export_symbols\" && test -n \"$archive_expsym_cmds\"; then\n\t      cmds=$archive_expsym_cmds\n\t    else\n\t      cmds=$archive_cmds\n\t    fi\n\t  fi\n\tfi\n\n\tif test -n \"$delfiles\"; then\n\t  # Append the command to remove temporary files to $cmds.\n\t  eval cmds=\\\"\\$cmds~\\$RM $delfiles\\\"\n\tfi\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  func_append libobjs \" $func_extract_archives_result\"\n\t  test \"X$libobjs\" = \"X \" && libobjs=\n\tfi\n\n\tsave_ifs=\"$IFS\"; IFS='~'\n\tfor cmd in $cmds; do\n\t  IFS=\"$save_ifs\"\n\t  eval cmd=\\\"$cmd\\\"\n\t  $opt_silent || {\n\t    func_quote_for_expand \"$cmd\"\n\t    eval \"func_echo $func_quote_for_expand_result\"\n\t  }\n\t  $opt_dry_run || eval \"$cmd\" || {\n\t    lt_exit=$?\n\n\t    # Restore the uninstalled library and exit\n\t    if test \"$opt_mode\" = relink; then\n\t      ( cd \"$output_objdir\" && \\\n\t        $RM \"${realname}T\" && \\\n\t\t$MV \"${realname}U\" \"$realname\" )\n\t    fi\n\n\t    exit $lt_exit\n\t  }\n\tdone\n\tIFS=\"$save_ifs\"\n\n\t# Restore the uninstalled library and exit\n\tif test \"$opt_mode\" = relink; then\n\t  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?\n\n\t  if test -n \"$convenience\"; then\n\t    if test -z \"$whole_archive_flag_spec\"; then\n\t      func_show_eval '${RM}r \"$gentop\"'\n\t    fi\n\t  fi\n\n\t  exit $EXIT_SUCCESS\n\tfi\n\n\t# Create links to the real library.\n\tfor linkname in $linknames; do\n\t  if test \"$realname\" != \"$linkname\"; then\n\t    func_show_eval '(cd \"$output_objdir\" && $RM \"$linkname\" && $LN_S \"$realname\" \"$linkname\")' 'exit $?'\n\t  fi\n\tdone\n\n\t# If -module or -export-dynamic was specified, set the dlname.\n\tif test \"$module\" = yes || test \"$export_dynamic\" = yes; then\n\t  # On all known operating systems, these are identical.\n\t  dlname=\"$soname\"\n\tfi\n      fi\n      ;;\n\n    obj)\n      if test -n \"$dlfiles$dlprefiles\" || test \"$dlself\" != no; then\n\tfunc_warning \"\\`-dlopen' is ignored for objects\"\n      fi\n\n      case \" $deplibs\" in\n      *\\ -l* | *\\ -L*)\n\tfunc_warning \"\\`-l' and \\`-L' are ignored for objects\" ;;\n      esac\n\n      test -n \"$rpath\" && \\\n\tfunc_warning \"\\`-rpath' is ignored for objects\"\n\n      test -n \"$xrpath\" && \\\n\tfunc_warning \"\\`-R' is ignored for objects\"\n\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for objects\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for objects\"\n\n      case $output in\n      *.lo)\n\ttest -n \"$objs$old_deplibs\" && \\\n\t  func_fatal_error \"cannot build library object \\`$output' from non-libtool objects\"\n\n\tlibobj=$output\n\tfunc_lo2o \"$libobj\"\n\tobj=$func_lo2o_result\n\t;;\n      *)\n\tlibobj=\n\tobj=\"$output\"\n\t;;\n      esac\n\n      # Delete the old objects.\n      $opt_dry_run || $RM $obj $libobj\n\n      # Objects from convenience libraries.  This assumes\n      # single-version convenience libraries.  Whenever we create\n      # different ones for PIC/non-PIC, this we'll have to duplicate\n      # the extraction.\n      reload_conv_objs=\n      gentop=\n      # reload_cmds runs $LD directly, so let us get rid of\n      # -Wl from whole_archive_flag_spec and hope we can get by with\n      # turning comma into space..\n      wl=\n\n      if test -n \"$convenience\"; then\n\tif test -n \"$whole_archive_flag_spec\"; then\n\t  eval tmp_whole_archive_flags=\\\"$whole_archive_flag_spec\\\"\n\t  reload_conv_objs=$reload_objs\\ `$ECHO \"$tmp_whole_archive_flags\" | $SED 's|,| |g'`\n\telse\n\t  gentop=\"$output_objdir/${obj}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $convenience\n\t  reload_conv_objs=\"$reload_objs $func_extract_archives_result\"\n\tfi\n      fi\n\n      # If we're not building shared, we need to use non_pic_objs\n      test \"$build_libtool_libs\" != yes && libobjs=\"$non_pic_objects\"\n\n      # Create the old-style object.\n      reload_objs=\"$objs$old_deplibs \"`$ECHO \"$libobjs\" | $SP2NL | $SED \"/\\.${libext}$/d; /\\.lib$/d; $lo2o\" | $NL2SP`\" $reload_conv_objs\" ### testsuite: skip nested quoting test\n\n      output=\"$obj\"\n      func_execute_cmds \"$reload_cmds\" 'exit $?'\n\n      # Exit if we aren't doing a library object file.\n      if test -z \"$libobj\"; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$build_libtool_libs\" != yes; then\n\tif test -n \"$gentop\"; then\n\t  func_show_eval '${RM}r \"$gentop\"'\n\tfi\n\n\t# Create an invalid libtool object if no PIC, so that we don't\n\t# accidentally link it into a program.\n\t# $show \"echo timestamp > $libobj\"\n\t# $opt_dry_run || eval \"echo timestamp > $libobj\" || exit $?\n\texit $EXIT_SUCCESS\n      fi\n\n      if test -n \"$pic_flag\" || test \"$pic_mode\" != default; then\n\t# Only do commands if we really have different PIC objects.\n\treload_objs=\"$libobjs $reload_conv_objs\"\n\toutput=\"$libobj\"\n\tfunc_execute_cmds \"$reload_cmds\" 'exit $?'\n      fi\n\n      if test -n \"$gentop\"; then\n\tfunc_show_eval '${RM}r \"$gentop\"'\n      fi\n\n      exit $EXIT_SUCCESS\n      ;;\n\n    prog)\n      case $host in\n\t*cygwin*) func_stripname '' '.exe' \"$output\"\n\t          output=$func_stripname_result.exe;;\n      esac\n      test -n \"$vinfo\" && \\\n\tfunc_warning \"\\`-version-info' is ignored for programs\"\n\n      test -n \"$release\" && \\\n\tfunc_warning \"\\`-release' is ignored for programs\"\n\n      test \"$preload\" = yes \\\n        && test \"$dlopen_support\" = unknown \\\n\t&& test \"$dlopen_self\" = unknown \\\n\t&& test \"$dlopen_self_static\" = unknown && \\\n\t  func_warning \"\\`LT_INIT([dlopen])' not used. Assuming no dlopen support.\"\n\n      case $host in\n      *-*-rhapsody* | *-*-darwin1.[012])\n\t# On Rhapsody replace the C library is the System framework\n\tcompile_deplibs=`$ECHO \" $compile_deplibs\" | $SED 's/ -lc / System.ltframework /'`\n\tfinalize_deplibs=`$ECHO \" $finalize_deplibs\" | $SED 's/ -lc / System.ltframework /'`\n\t;;\n      esac\n\n      case $host in\n      *-*-darwin*)\n\t# Don't allow lazy linking, it breaks C++ global constructors\n\t# But is supposedly fixed on 10.4 or later (yay!).\n\tif test \"$tagname\" = CXX ; then\n\t  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in\n\t    10.[0123])\n\t      func_append compile_command \" ${wl}-bind_at_load\"\n\t      func_append finalize_command \" ${wl}-bind_at_load\"\n\t    ;;\n\t  esac\n\tfi\n\t# Time to change all our \"foo.ltframework\" stuff back to \"-framework foo\"\n\tcompile_deplibs=`$ECHO \" $compile_deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\tfinalize_deplibs=`$ECHO \" $finalize_deplibs\" | $SED 's% \\([^ $]*\\).ltframework% -framework \\1%g'`\n\t;;\n      esac\n\n\n      # move library search paths that coincide with paths to not yet\n      # installed libraries to the beginning of the library search list\n      new_libs=\n      for path in $notinst_path; do\n\tcase \" $new_libs \" in\n\t*\" -L$path/$objdir \"*) ;;\n\t*)\n\t  case \" $compile_deplibs \" in\n\t  *\" -L$path/$objdir \"*)\n\t    func_append new_libs \" -L$path/$objdir\" ;;\n\t  esac\n\t  ;;\n\tesac\n      done\n      for deplib in $compile_deplibs; do\n\tcase $deplib in\n\t-L*)\n\t  case \" $new_libs \" in\n\t  *\" $deplib \"*) ;;\n\t  *) func_append new_libs \" $deplib\" ;;\n\t  esac\n\t  ;;\n\t*) func_append new_libs \" $deplib\" ;;\n\tesac\n      done\n      compile_deplibs=\"$new_libs\"\n\n\n      func_append compile_command \" $compile_deplibs\"\n      func_append finalize_command \" $finalize_deplibs\"\n\n      if test -n \"$rpath$xrpath\"; then\n\t# If the user specified any rpath flags, then add them.\n\tfor libdir in $rpath $xrpath; do\n\t  # This is the magic to use -rpath.\n\t  case \"$finalize_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_rpath \" $libdir\" ;;\n\t  esac\n\tdone\n      fi\n\n      # Now hardcode the library paths\n      rpath=\n      hardcode_libdirs=\n      for libdir in $compile_rpath $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\tfunc_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    func_append rpath \" $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append perm_rpath \" $libdir\" ;;\n\t  esac\n\tfi\n\tcase $host in\n\t*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)\n\t  testbindir=`${ECHO} \"$libdir\" | ${SED} -e 's*/lib$*/bin*'`\n\t  case :$dllsearchpath: in\n\t  *\":$libdir:\"*) ;;\n\t  ::) dllsearchpath=$libdir;;\n\t  *) func_append dllsearchpath \":$libdir\";;\n\t  esac\n\t  case :$dllsearchpath: in\n\t  *\":$testbindir:\"*) ;;\n\t  ::) dllsearchpath=$testbindir;;\n\t  *) func_append dllsearchpath \":$testbindir\";;\n\t  esac\n\t  ;;\n\tesac\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      compile_rpath=\"$rpath\"\n\n      rpath=\n      hardcode_libdirs=\n      for libdir in $finalize_rpath; do\n\tif test -n \"$hardcode_libdir_flag_spec\"; then\n\t  if test -n \"$hardcode_libdir_separator\"; then\n\t    if test -z \"$hardcode_libdirs\"; then\n\t      hardcode_libdirs=\"$libdir\"\n\t    else\n\t      # Just accumulate the unique libdirs.\n\t      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in\n\t      *\"$hardcode_libdir_separator$libdir$hardcode_libdir_separator\"*)\n\t\t;;\n\t      *)\n\t\tfunc_append hardcode_libdirs \"$hardcode_libdir_separator$libdir\"\n\t\t;;\n\t      esac\n\t    fi\n\t  else\n\t    eval flag=\\\"$hardcode_libdir_flag_spec\\\"\n\t    func_append rpath \" $flag\"\n\t  fi\n\telif test -n \"$runpath_var\"; then\n\t  case \"$finalize_perm_rpath \" in\n\t  *\" $libdir \"*) ;;\n\t  *) func_append finalize_perm_rpath \" $libdir\" ;;\n\t  esac\n\tfi\n      done\n      # Substitute the hardcoded libdirs into the rpath.\n      if test -n \"$hardcode_libdir_separator\" &&\n\t test -n \"$hardcode_libdirs\"; then\n\tlibdir=\"$hardcode_libdirs\"\n\teval rpath=\\\" $hardcode_libdir_flag_spec\\\"\n      fi\n      finalize_rpath=\"$rpath\"\n\n      if test -n \"$libobjs\" && test \"$build_old_libs\" = yes; then\n\t# Transform all the library objects into standard objects.\n\tcompile_command=`$ECHO \"$compile_command\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n\tfinalize_command=`$ECHO \"$finalize_command\" | $SP2NL | $SED \"$lo2o\" | $NL2SP`\n      fi\n\n      func_generate_dlsyms \"$outputname\" \"@PROGRAM@\" \"no\"\n\n      # template prelinking step\n      if test -n \"$prelink_cmds\"; then\n\tfunc_execute_cmds \"$prelink_cmds\" 'exit $?'\n      fi\n\n      wrappers_required=yes\n      case $host in\n      *cegcc* | *mingw32ce*)\n        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.\n        wrappers_required=no\n        ;;\n      *cygwin* | *mingw* )\n        if test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      *)\n        if test \"$need_relink\" = no || test \"$build_libtool_libs\" != yes; then\n          wrappers_required=no\n        fi\n        ;;\n      esac\n      if test \"$wrappers_required\" = no; then\n\t# Replace the output file specification.\n\tcompile_command=`$ECHO \"$compile_command\" | $SED 's%@OUTPUT@%'\"$output\"'%g'`\n\tlink_command=\"$compile_command$compile_rpath\"\n\n\t# We have no uninstalled library dependencies, so finalize right now.\n\texit_status=0\n\tfunc_show_eval \"$link_command\" 'exit_status=$?'\n\n\tif test -n \"$postlink_cmds\"; then\n\t  func_to_tool_file \"$output\"\n\t  postlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\t  func_execute_cmds \"$postlink_cmds\" 'exit $?'\n\tfi\n\n\t# Delete the generated files.\n\tif test -f \"$output_objdir/${outputname}S.${objext}\"; then\n\t  func_show_eval '$RM \"$output_objdir/${outputname}S.${objext}\"'\n\tfi\n\n\texit $exit_status\n      fi\n\n      if test -n \"$compile_shlibpath$finalize_shlibpath\"; then\n\tcompile_command=\"$shlibpath_var=\\\"$compile_shlibpath$finalize_shlibpath\\$$shlibpath_var\\\" $compile_command\"\n      fi\n      if test -n \"$finalize_shlibpath\"; then\n\tfinalize_command=\"$shlibpath_var=\\\"$finalize_shlibpath\\$$shlibpath_var\\\" $finalize_command\"\n      fi\n\n      compile_var=\n      finalize_var=\n      if test -n \"$runpath_var\"; then\n\tif test -n \"$perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $perm_rpath; do\n\t    func_append rpath \"$dir:\"\n\t  done\n\t  compile_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n\tif test -n \"$finalize_perm_rpath\"; then\n\t  # We should set the runpath_var.\n\t  rpath=\n\t  for dir in $finalize_perm_rpath; do\n\t    func_append rpath \"$dir:\"\n\t  done\n\t  finalize_var=\"$runpath_var=\\\"$rpath\\$$runpath_var\\\" \"\n\tfi\n      fi\n\n      if test \"$no_install\" = yes; then\n\t# We don't need to create a wrapper script.\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\t# Replace the output file specification.\n\tlink_command=`$ECHO \"$link_command\" | $SED 's%@OUTPUT@%'\"$output\"'%g'`\n\t# Delete the old output file.\n\t$opt_dry_run || $RM $output\n\t# Link the executable and exit\n\tfunc_show_eval \"$link_command\" 'exit $?'\n\n\tif test -n \"$postlink_cmds\"; then\n\t  func_to_tool_file \"$output\"\n\t  postlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\t  func_execute_cmds \"$postlink_cmds\" 'exit $?'\n\tfi\n\n\texit $EXIT_SUCCESS\n      fi\n\n      if test \"$hardcode_action\" = relink; then\n\t# Fast installation is not supported\n\tlink_command=\"$compile_var$compile_command$compile_rpath\"\n\trelink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\n\tfunc_warning \"this platform does not like uninstalled shared libraries\"\n\tfunc_warning \"\\`$output' will be relinked during installation\"\n      else\n\tif test \"$fast_install\" != no; then\n\t  link_command=\"$finalize_var$compile_command$finalize_rpath\"\n\t  if test \"$fast_install\" = yes; then\n\t    relink_command=`$ECHO \"$compile_var$compile_command$compile_rpath\" | $SED 's%@OUTPUT@%\\$progdir/\\$file%g'`\n\t  else\n\t    # fast_install is set to needless\n\t    relink_command=\n\t  fi\n\telse\n\t  link_command=\"$compile_var$compile_command$compile_rpath\"\n\t  relink_command=\"$finalize_var$finalize_command$finalize_rpath\"\n\tfi\n      fi\n\n      # Replace the output file specification.\n      link_command=`$ECHO \"$link_command\" | $SED 's%@OUTPUT@%'\"$output_objdir/$outputname\"'%g'`\n\n      # Delete the old output files.\n      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname\n\n      func_show_eval \"$link_command\" 'exit $?'\n\n      if test -n \"$postlink_cmds\"; then\n\tfunc_to_tool_file \"$output_objdir/$outputname\"\n\tpostlink_cmds=`func_echo_all \"$postlink_cmds\" | $SED -e 's%@OUTPUT@%'\"$output_objdir/$outputname\"'%g' -e 's%@TOOL_OUTPUT@%'\"$func_to_tool_file_result\"'%g'`\n\tfunc_execute_cmds \"$postlink_cmds\" 'exit $?'\n      fi\n\n      # Now create the wrapper script.\n      func_verbose \"creating $output\"\n\n      # Quote the relink command for shipping.\n      if test -n \"$relink_command\"; then\n\t# Preserve any variables that may affect compiler behavior\n\tfor var in $variables_saved_for_relink; do\n\t  if eval test -z \\\"\\${$var+set}\\\"; then\n\t    relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\t  elif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t    relink_command=\"$var=; export $var; $relink_command\"\n\t  else\n\t    func_quote_for_eval \"$var_value\"\n\t    relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\t  fi\n\tdone\n\trelink_command=\"(cd `pwd`; $relink_command)\"\n\trelink_command=`$ECHO \"$relink_command\" | $SED \"$sed_quote_subst\"`\n      fi\n\n      # Only actually do things if not in dry run mode.\n      $opt_dry_run || {\n\t# win32 will think the script is a binary if it has\n\t# a .exe suffix, so we strip it off here.\n\tcase $output in\n\t  *.exe) func_stripname '' '.exe' \"$output\"\n\t         output=$func_stripname_result ;;\n\tesac\n\t# test for cygwin because mv fails w/o .exe extensions\n\tcase $host in\n\t  *cygwin*)\n\t    exeext=.exe\n\t    func_stripname '' '.exe' \"$outputname\"\n\t    outputname=$func_stripname_result ;;\n\t  *) exeext= ;;\n\tesac\n\tcase $host in\n\t  *cygwin* | *mingw* )\n\t    func_dirname_and_basename \"$output\" \"\" \".\"\n\t    output_name=$func_basename_result\n\t    output_path=$func_dirname_result\n\t    cwrappersource=\"$output_path/$objdir/lt-$output_name.c\"\n\t    cwrapper=\"$output_path/$output_name.exe\"\n\t    $RM $cwrappersource $cwrapper\n\t    trap \"$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_cwrapperexe_src > $cwrappersource\n\n\t    # The wrapper executable is built using the $host compiler,\n\t    # because it contains $host paths and files. If cross-\n\t    # compiling, it, like the target executable, must be\n\t    # executed on the $host or under an emulation environment.\n\t    $opt_dry_run || {\n\t      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource\n\t      $STRIP $cwrapper\n\t    }\n\n\t    # Now, create the wrapper script for func_source use:\n\t    func_ltwrapper_scriptname $cwrapper\n\t    $RM $func_ltwrapper_scriptname_result\n\t    trap \"$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE\" 1 2 15\n\t    $opt_dry_run || {\n\t      # note: this script will not be executed, so do not chmod.\n\t      if test \"x$build\" = \"x$host\" ; then\n\t\t$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result\n\t      else\n\t\tfunc_emit_wrapper no > $func_ltwrapper_scriptname_result\n\t      fi\n\t    }\n\t  ;;\n\t  * )\n\t    $RM $output\n\t    trap \"$RM $output; exit $EXIT_FAILURE\" 1 2 15\n\n\t    func_emit_wrapper no > $output\n\t    chmod +x $output\n\t  ;;\n\tesac\n      }\n      exit $EXIT_SUCCESS\n      ;;\n    esac\n\n    # See if we need to build an old-fashioned archive.\n    for oldlib in $oldlibs; do\n\n      if test \"$build_libtool_libs\" = convenience; then\n\toldobjs=\"$libobjs_save $symfileobj\"\n\taddlibs=\"$convenience\"\n\tbuild_libtool_libs=no\n      else\n\tif test \"$build_libtool_libs\" = module; then\n\t  oldobjs=\"$libobjs_save\"\n\t  build_libtool_libs=no\n\telse\n\t  oldobjs=\"$old_deplibs $non_pic_objects\"\n\t  if test \"$preload\" = yes && test -f \"$symfileobj\"; then\n\t    func_append oldobjs \" $symfileobj\"\n\t  fi\n\tfi\n\taddlibs=\"$old_convenience\"\n      fi\n\n      if test -n \"$addlibs\"; then\n\tgentop=\"$output_objdir/${outputname}x\"\n\tfunc_append generated \" $gentop\"\n\n\tfunc_extract_archives $gentop $addlibs\n\tfunc_append oldobjs \" $func_extract_archives_result\"\n      fi\n\n      # Do each command in the archive commands.\n      if test -n \"$old_archive_from_new_cmds\" && test \"$build_libtool_libs\" = yes; then\n\tcmds=$old_archive_from_new_cmds\n      else\n\n\t# Add any objects from preloaded convenience libraries\n\tif test -n \"$dlprefiles\"; then\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\n\t  func_extract_archives $gentop $dlprefiles\n\t  func_append oldobjs \" $func_extract_archives_result\"\n\tfi\n\n\t# POSIX demands no paths to be encoded in archives.  We have\n\t# to avoid creating archives with duplicate basenames if we\n\t# might have to extract them afterwards, e.g., when creating a\n\t# static archive out of a convenience library, or when linking\n\t# the entirety of a libtool archive into another (currently\n\t# not supported by libtool).\n\tif (for obj in $oldobjs\n\t    do\n\t      func_basename \"$obj\"\n\t      $ECHO \"$func_basename_result\"\n\t    done | sort | sort -uc >/dev/null 2>&1); then\n\t  :\n\telse\n\t  echo \"copying selected object files to avoid basename conflicts...\"\n\t  gentop=\"$output_objdir/${outputname}x\"\n\t  func_append generated \" $gentop\"\n\t  func_mkdir_p \"$gentop\"\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  counter=1\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_basename \"$obj\"\n\t    objbase=\"$func_basename_result\"\n\t    case \" $oldobjs \" in\n\t    \" \") oldobjs=$obj ;;\n\t    *[\\ /]\"$objbase \"*)\n\t      while :; do\n\t\t# Make sure we don't pick an alternate name that also\n\t\t# overlaps.\n\t\tnewobj=lt$counter-$objbase\n\t\tfunc_arith $counter + 1\n\t\tcounter=$func_arith_result\n\t\tcase \" $oldobjs \" in\n\t\t*[\\ /]\"$newobj \"*) ;;\n\t\t*) if test ! -f \"$gentop/$newobj\"; then break; fi ;;\n\t\tesac\n\t      done\n\t      func_show_eval \"ln $obj $gentop/$newobj || cp $obj $gentop/$newobj\"\n\t      func_append oldobjs \" $gentop/$newobj\"\n\t      ;;\n\t    *) func_append oldobjs \" $obj\" ;;\n\t    esac\n\t  done\n\tfi\n\tfunc_to_tool_file \"$oldlib\" func_convert_file_msys_to_w32\n\ttool_oldlib=$func_to_tool_file_result\n\teval cmds=\\\"$old_archive_cmds\\\"\n\n\tfunc_len \" $cmds\"\n\tlen=$func_len_result\n\tif test \"$len\" -lt \"$max_cmd_len\" || test \"$max_cmd_len\" -le -1; then\n\t  cmds=$old_archive_cmds\n\telif test -n \"$archiver_list_spec\"; then\n\t  func_verbose \"using command file archive linking...\"\n\t  for obj in $oldobjs\n\t  do\n\t    func_to_tool_file \"$obj\"\n\t    $ECHO \"$func_to_tool_file_result\"\n\t  done > $output_objdir/$libname.libcmd\n\t  func_to_tool_file \"$output_objdir/$libname.libcmd\"\n\t  oldobjs=\" $archiver_list_spec$func_to_tool_file_result\"\n\t  cmds=$old_archive_cmds\n\telse\n\t  # the command line is too long to link in one step, link in parts\n\t  func_verbose \"using piecewise archive linking...\"\n\t  save_RANLIB=$RANLIB\n\t  RANLIB=:\n\t  objlist=\n\t  concat_cmds=\n\t  save_oldobjs=$oldobjs\n\t  oldobjs=\n\t  # Is there a better way of finding the last object in the list?\n\t  for obj in $save_oldobjs\n\t  do\n\t    last_oldobj=$obj\n\t  done\n\t  eval test_cmds=\\\"$old_archive_cmds\\\"\n\t  func_len \" $test_cmds\"\n\t  len0=$func_len_result\n\t  len=$len0\n\t  for obj in $save_oldobjs\n\t  do\n\t    func_len \" $obj\"\n\t    func_arith $len + $func_len_result\n\t    len=$func_arith_result\n\t    func_append objlist \" $obj\"\n\t    if test \"$len\" -lt \"$max_cmd_len\"; then\n\t      :\n\t    else\n\t      # the above command should be used before it gets too long\n\t      oldobjs=$objlist\n\t      if test \"$obj\" = \"$last_oldobj\" ; then\n\t\tRANLIB=$save_RANLIB\n\t      fi\n\t      test -z \"$concat_cmds\" || concat_cmds=$concat_cmds~\n\t      eval concat_cmds=\\\"\\${concat_cmds}$old_archive_cmds\\\"\n\t      objlist=\n\t      len=$len0\n\t    fi\n\t  done\n\t  RANLIB=$save_RANLIB\n\t  oldobjs=$objlist\n\t  if test \"X$oldobjs\" = \"X\" ; then\n\t    eval cmds=\\\"\\$concat_cmds\\\"\n\t  else\n\t    eval cmds=\\\"\\$concat_cmds~\\$old_archive_cmds\\\"\n\t  fi\n\tfi\n      fi\n      func_execute_cmds \"$cmds\" 'exit $?'\n    done\n\n    test -n \"$generated\" && \\\n      func_show_eval \"${RM}r$generated\"\n\n    # Now create the libtool archive.\n    case $output in\n    *.la)\n      old_library=\n      test \"$build_old_libs\" = yes && old_library=\"$libname.$libext\"\n      func_verbose \"creating $output\"\n\n      # Preserve any variables that may affect compiler behavior\n      for var in $variables_saved_for_relink; do\n\tif eval test -z \\\"\\${$var+set}\\\"; then\n\t  relink_command=\"{ test -z \\\"\\${$var+set}\\\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command\"\n\telif eval var_value=\\$$var; test -z \"$var_value\"; then\n\t  relink_command=\"$var=; export $var; $relink_command\"\n\telse\n\t  func_quote_for_eval \"$var_value\"\n\t  relink_command=\"$var=$func_quote_for_eval_result; export $var; $relink_command\"\n\tfi\n      done\n      # Quote the link command for shipping.\n      relink_command=\"(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)\"\n      relink_command=`$ECHO \"$relink_command\" | $SED \"$sed_quote_subst\"`\n      if test \"$hardcode_automatic\" = yes ; then\n\trelink_command=\n      fi\n\n      # Only create the output if not a dry run.\n      $opt_dry_run || {\n\tfor installed in no yes; do\n\t  if test \"$installed\" = yes; then\n\t    if test -z \"$install_libdir\"; then\n\t      break\n\t    fi\n\t    output=\"$output_objdir/$outputname\"i\n\t    # Replace all uninstalled libtool libraries with the installed ones\n\t    newdependency_libs=\n\t    for deplib in $dependency_libs; do\n\t      case $deplib in\n\t      *.la)\n\t\tfunc_basename \"$deplib\"\n\t\tname=\"$func_basename_result\"\n\t\tfunc_resolve_sysroot \"$deplib\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $func_resolve_sysroot_result`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$deplib' is not a valid libtool archive\"\n\t\tfunc_append newdependency_libs \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      -L*)\n\t\tfunc_stripname -L '' \"$deplib\"\n\t\tfunc_replace_sysroot \"$func_stripname_result\"\n\t\tfunc_append newdependency_libs \" -L$func_replace_sysroot_result\"\n\t\t;;\n\t      -R*)\n\t\tfunc_stripname -R '' \"$deplib\"\n\t\tfunc_replace_sysroot \"$func_stripname_result\"\n\t\tfunc_append newdependency_libs \" -R$func_replace_sysroot_result\"\n\t\t;;\n\t      *) func_append newdependency_libs \" $deplib\" ;;\n\t      esac\n\t    done\n\t    dependency_libs=\"$newdependency_libs\"\n\t    newdlfiles=\n\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t      *.la)\n\t        func_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tfunc_append newdlfiles \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      *) func_append newdlfiles \" $lib\" ;;\n\t      esac\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t      *.la)\n\t\t# Only pass preopened files to the pseudo-archive (for\n\t\t# eventual linking with the app. that links it) if we\n\t\t# didn't already link the preopened objects directly into\n\t\t# the library:\n\t\tfunc_basename \"$lib\"\n\t\tname=\"$func_basename_result\"\n\t\teval libdir=`${SED} -n -e 's/^libdir=\\(.*\\)$/\\1/p' $lib`\n\t\ttest -z \"$libdir\" && \\\n\t\t  func_fatal_error \"\\`$lib' is not a valid libtool archive\"\n\t\tfunc_append newdlprefiles \" ${lt_sysroot:+=}$libdir/$name\"\n\t\t;;\n\t      esac\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  else\n\t    newdlfiles=\n\t    for lib in $dlfiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      func_append newdlfiles \" $abs\"\n\t    done\n\t    dlfiles=\"$newdlfiles\"\n\t    newdlprefiles=\n\t    for lib in $dlprefiles; do\n\t      case $lib in\n\t\t[\\\\/]* | [A-Za-z]:[\\\\/]*) abs=\"$lib\" ;;\n\t\t*) abs=`pwd`\"/$lib\" ;;\n\t      esac\n\t      func_append newdlprefiles \" $abs\"\n\t    done\n\t    dlprefiles=\"$newdlprefiles\"\n\t  fi\n\t  $RM $output\n\t  # place dlname in correct position for cygwin\n\t  # In fact, it would be nice if we could use this code for all target\n\t  # systems that can't hard-code library paths into their executables\n\t  # and that have no shared library path variable independent of PATH,\n\t  # but it turns out we can't easily determine that from inspecting\n\t  # libtool variables, so we have to hard-code the OSs to which it\n\t  # applies here; at the moment, that means platforms that use the PE\n\t  # object format with DLL files.  See the long comment at the top of\n\t  # tests/bindir.at for full details.\n\t  tdlname=$dlname\n\t  case $host,$output,$installed,$module,$dlname in\n\t    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)\n\t      # If a -bindir argument was supplied, place the dll there.\n\t      if test \"x$bindir\" != x ;\n\t      then\n\t\tfunc_relative_path \"$install_libdir\" \"$bindir\"\n\t\ttdlname=$func_relative_path_result$dlname\n\t      else\n\t\t# Otherwise fall back on heuristic.\n\t\ttdlname=../bin/$dlname\n\t      fi\n\t      ;;\n\t  esac\n\t  $ECHO > $output \"\\\n# $outputname - a libtool library file\n# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION\n#\n# Please DO NOT delete this file!\n# It is necessary for linking the library.\n\n# The name that we can dlopen(3).\ndlname='$tdlname'\n\n# Names of this library.\nlibrary_names='$library_names'\n\n# The name of the static archive.\nold_library='$old_library'\n\n# Linker flags that can not go in dependency_libs.\ninherited_linker_flags='$new_inherited_linker_flags'\n\n# Libraries that this one depends upon.\ndependency_libs='$dependency_libs'\n\n# Names of additional weak libraries provided by this library\nweak_library_names='$weak_libs'\n\n# Version information for $libname.\ncurrent=$current\nage=$age\nrevision=$revision\n\n# Is this an already installed library?\ninstalled=$installed\n\n# Should we warn about portability when linking against -modules?\nshouldnotlink=$module\n\n# Files to dlopen/dlpreopen\ndlopen='$dlfiles'\ndlpreopen='$dlprefiles'\n\n# Directory that this library needs to be installed in:\nlibdir='$install_libdir'\"\n\t  if test \"$installed\" = no && test \"$need_relink\" = yes; then\n\t    $ECHO >> $output \"\\\nrelink_command=\\\"$relink_command\\\"\"\n\t  fi\n\tdone\n      }\n\n      # Do a symbolic link so that the libtool archive can be found in\n      # LD_LIBRARY_PATH before the program is installed.\n      func_show_eval '( cd \"$output_objdir\" && $RM \"$outputname\" && $LN_S \"../$outputname\" \"$outputname\" )' 'exit $?'\n      ;;\n    esac\n    exit $EXIT_SUCCESS\n}\n\n{ test \"$opt_mode\" = link || test \"$opt_mode\" = relink; } &&\n    func_mode_link ${1+\"$@\"}\n\n\n# func_mode_uninstall arg...\nfunc_mode_uninstall ()\n{\n    $opt_debug\n    RM=\"$nonopt\"\n    files=\n    rmforce=\n    exit_status=0\n\n    # This variable tells wrapper scripts just to set variables rather\n    # than running their programs.\n    libtool_install_magic=\"$magic\"\n\n    for arg\n    do\n      case $arg in\n      -f) func_append RM \" $arg\"; rmforce=yes ;;\n      -*) func_append RM \" $arg\" ;;\n      *) func_append files \" $arg\" ;;\n      esac\n    done\n\n    test -z \"$RM\" && \\\n      func_fatal_help \"you must specify an RM program\"\n\n    rmdirs=\n\n    for file in $files; do\n      func_dirname \"$file\" \"\" \".\"\n      dir=\"$func_dirname_result\"\n      if test \"X$dir\" = X.; then\n\todir=\"$objdir\"\n      else\n\todir=\"$dir/$objdir\"\n      fi\n      func_basename \"$file\"\n      name=\"$func_basename_result\"\n      test \"$opt_mode\" = uninstall && odir=\"$dir\"\n\n      # Remember odir for removal later, being careful to avoid duplicates\n      if test \"$opt_mode\" = clean; then\n\tcase \" $rmdirs \" in\n\t  *\" $odir \"*) ;;\n\t  *) func_append rmdirs \" $odir\" ;;\n\tesac\n      fi\n\n      # Don't error if the file doesn't exist and rm -f was used.\n      if { test -L \"$file\"; } >/dev/null 2>&1 ||\n\t { test -h \"$file\"; } >/dev/null 2>&1 ||\n\t test -f \"$file\"; then\n\t:\n      elif test -d \"$file\"; then\n\texit_status=1\n\tcontinue\n      elif test \"$rmforce\" = yes; then\n\tcontinue\n      fi\n\n      rmfiles=\"$file\"\n\n      case $name in\n      *.la)\n\t# Possibly a libtool archive, so verify it.\n\tif func_lalib_p \"$file\"; then\n\t  func_source $dir/$name\n\n\t  # Delete the libtool libraries and symlinks.\n\t  for n in $library_names; do\n\t    func_append rmfiles \" $odir/$n\"\n\t  done\n\t  test -n \"$old_library\" && func_append rmfiles \" $odir/$old_library\"\n\n\t  case \"$opt_mode\" in\n\t  clean)\n\t    case \" $library_names \" in\n\t    *\" $dlname \"*) ;;\n\t    *) test -n \"$dlname\" && func_append rmfiles \" $odir/$dlname\" ;;\n\t    esac\n\t    test -n \"$libdir\" && func_append rmfiles \" $odir/$name $odir/${name}i\"\n\t    ;;\n\t  uninstall)\n\t    if test -n \"$library_names\"; then\n\t      # Do each command in the postuninstall commands.\n\t      func_execute_cmds \"$postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\n\t    if test -n \"$old_library\"; then\n\t      # Do each command in the old_postuninstall commands.\n\t      func_execute_cmds \"$old_postuninstall_cmds\" 'test \"$rmforce\" = yes || exit_status=1'\n\t    fi\n\t    # FIXME: should reinstall the best remaining shared library.\n\t    ;;\n\t  esac\n\tfi\n\t;;\n\n      *.lo)\n\t# Possibly a libtool object, so verify it.\n\tif func_lalib_p \"$file\"; then\n\n\t  # Read the .lo file\n\t  func_source $dir/$name\n\n\t  # Add PIC object to the list of files to remove.\n\t  if test -n \"$pic_object\" &&\n\t     test \"$pic_object\" != none; then\n\t    func_append rmfiles \" $dir/$pic_object\"\n\t  fi\n\n\t  # Add non-PIC object to the list of files to remove.\n\t  if test -n \"$non_pic_object\" &&\n\t     test \"$non_pic_object\" != none; then\n\t    func_append rmfiles \" $dir/$non_pic_object\"\n\t  fi\n\tfi\n\t;;\n\n      *)\n\tif test \"$opt_mode\" = clean ; then\n\t  noexename=$name\n\t  case $file in\n\t  *.exe)\n\t    func_stripname '' '.exe' \"$file\"\n\t    file=$func_stripname_result\n\t    func_stripname '' '.exe' \"$name\"\n\t    noexename=$func_stripname_result\n\t    # $file with .exe has already been added to rmfiles,\n\t    # add $file without .exe\n\t    func_append rmfiles \" $file\"\n\t    ;;\n\t  esac\n\t  # Do a test to see if this is a libtool program.\n\t  if func_ltwrapper_p \"$file\"; then\n\t    if func_ltwrapper_executable_p \"$file\"; then\n\t      func_ltwrapper_scriptname \"$file\"\n\t      relink_command=\n\t      func_source $func_ltwrapper_scriptname_result\n\t      func_append rmfiles \" $func_ltwrapper_scriptname_result\"\n\t    else\n\t      relink_command=\n\t      func_source $dir/$noexename\n\t    fi\n\n\t    # note $name still contains .exe if it was in $file originally\n\t    # as does the version of $file that was added into $rmfiles\n\t    func_append rmfiles \" $odir/$name $odir/${name}S.${objext}\"\n\t    if test \"$fast_install\" = yes && test -n \"$relink_command\"; then\n\t      func_append rmfiles \" $odir/lt-$name\"\n\t    fi\n\t    if test \"X$noexename\" != \"X$name\" ; then\n\t      func_append rmfiles \" $odir/lt-${noexename}.c\"\n\t    fi\n\t  fi\n\tfi\n\t;;\n      esac\n      func_show_eval \"$RM $rmfiles\" 'exit_status=1'\n    done\n\n    # Try to remove the ${objdir}s in the directories where we deleted files\n    for dir in $rmdirs; do\n      if test -d \"$dir\"; then\n\tfunc_show_eval \"rmdir $dir >/dev/null 2>&1\"\n      fi\n    done\n\n    exit $exit_status\n}\n\n{ test \"$opt_mode\" = uninstall || test \"$opt_mode\" = clean; } &&\n    func_mode_uninstall ${1+\"$@\"}\n\ntest -z \"$opt_mode\" && {\n  help=\"$generic_help\"\n  func_fatal_help \"you must specify a MODE\"\n}\n\ntest -z \"$exec_cmd\" && \\\n  func_fatal_help \"invalid operation mode \\`$opt_mode'\"\n\nif test -n \"$exec_cmd\"; then\n  eval exec \"$exec_cmd\"\n  exit $EXIT_FAILURE\nfi\n\nexit $exit_status\n\n\n# The TAGs below are defined such that we never get into a situation\n# in which we disable both kinds of libraries.  Given conflicting\n# choices, we go for a static library, that is the most portable,\n# since we can't tell whether shared libraries were disabled because\n# the user asked for that or because the platform doesn't support\n# them.  This is particularly important on AIX, because we don't\n# support having both static and shared libraries enabled at the same\n# time on that platform, so we default to a shared-only configuration.\n# If a disable-shared tag is given, we'll fallback to a static-only\n# configuration.  But we'll never go from static-only to shared-only.\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-shared\nbuild_libtool_libs=no\nbuild_old_libs=yes\n# ### END LIBTOOL TAG CONFIG: disable-shared\n\n# ### BEGIN LIBTOOL TAG CONFIG: disable-static\nbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`\n# ### END LIBTOOL TAG CONFIG: disable-static\n\n# Local Variables:\n# mode:shell-script\n# sh-indentation:2\n# End:\n# vi:sw=2\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/build-aux/missing",
    "content": "#! /bin/sh\n# Common wrapper for a few potentially missing GNU programs.\n\nscriptversion=2013-10-28.13; # UTC\n\n# Copyright (C) 1996-2013 Free Software Foundation, Inc.\n# Originally written 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, see <http://www.gnu.org/licenses/>.\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\ncase $1 in\n\n  --is-lightweight)\n    # Used by our autoconf macros to check whether the available missing\n    # script is modern enough.\n    exit 0\n    ;;\n\n  --run)\n    # Back-compat with the calling convention used by older automake.\n    shift\n    ;;\n\n  -h|--h|--he|--hel|--help)\n    echo \"\\\n$0 [OPTION]... PROGRAM [ARGUMENT]...\n\nRun 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due\nto PROGRAM being missing or too old.\n\nOptions:\n  -h, --help      display this help and exit\n  -v, --version   output version information and exit\n\nSupported PROGRAM values:\n  aclocal   autoconf  autoheader   autom4te  automake  makeinfo\n  bison     yacc      flex         lex       help2man\n\nVersion suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and\n'g' are ignored when checking the name.\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# Run the given program, remember its exit status.\n\"$@\"; st=$?\n\n# If it succeeded, we are done.\ntest $st -eq 0 && exit 0\n\n# Also exit now if we it failed (or wasn't found), and '--version' was\n# passed; such an option is passed most likely to detect whether the\n# program is present and works.\ncase $2 in --version|--help) exit $st;; esac\n\n# Exit code 63 means version mismatch.  This often happens when the user\n# tries to use an ancient version of a tool on a file that requires a\n# minimum version.\nif test $st -eq 63; then\n  msg=\"probably too old\"\nelif test $st -eq 127; then\n  # Program was missing.\n  msg=\"missing on your system\"\nelse\n  # Program was found and executed, but failed.  Give up.\n  exit $st\nfi\n\nperl_URL=http://www.perl.org/\nflex_URL=http://flex.sourceforge.net/\ngnu_software_URL=http://www.gnu.org/software\n\nprogram_details ()\n{\n  case $1 in\n    aclocal|automake)\n      echo \"The '$1' program is part of the GNU Automake package:\"\n      echo \"<$gnu_software_URL/automake>\"\n      echo \"It also requires GNU Autoconf, GNU m4 and Perl in order to run:\"\n      echo \"<$gnu_software_URL/autoconf>\"\n      echo \"<$gnu_software_URL/m4/>\"\n      echo \"<$perl_URL>\"\n      ;;\n    autoconf|autom4te|autoheader)\n      echo \"The '$1' program is part of the GNU Autoconf package:\"\n      echo \"<$gnu_software_URL/autoconf/>\"\n      echo \"It also requires GNU m4 and Perl in order to run:\"\n      echo \"<$gnu_software_URL/m4/>\"\n      echo \"<$perl_URL>\"\n      ;;\n  esac\n}\n\ngive_advice ()\n{\n  # Normalize program name to check for.\n  normalized_program=`echo \"$1\" | sed '\n    s/^gnu-//; t\n    s/^gnu//; t\n    s/^g//; t'`\n\n  printf '%s\\n' \"'$1' is $msg.\"\n\n  configure_deps=\"'configure.ac' or m4 files included by 'configure.ac'\"\n  case $normalized_program in\n    autoconf*)\n      echo \"You should only need it if you modified 'configure.ac',\"\n      echo \"or m4 files included by it.\"\n      program_details 'autoconf'\n      ;;\n    autoheader*)\n      echo \"You should only need it if you modified 'acconfig.h' or\"\n      echo \"$configure_deps.\"\n      program_details 'autoheader'\n      ;;\n    automake*)\n      echo \"You should only need it if you modified 'Makefile.am' or\"\n      echo \"$configure_deps.\"\n      program_details 'automake'\n      ;;\n    aclocal*)\n      echo \"You should only need it if you modified 'acinclude.m4' or\"\n      echo \"$configure_deps.\"\n      program_details 'aclocal'\n      ;;\n   autom4te*)\n      echo \"You might have modified some maintainer files that require\"\n      echo \"the 'autom4te' program to be rebuilt.\"\n      program_details 'autom4te'\n      ;;\n    bison*|yacc*)\n      echo \"You should only need it if you modified a '.y' file.\"\n      echo \"You may want to install the GNU Bison package:\"\n      echo \"<$gnu_software_URL/bison/>\"\n      ;;\n    lex*|flex*)\n      echo \"You should only need it if you modified a '.l' file.\"\n      echo \"You may want to install the Fast Lexical Analyzer package:\"\n      echo \"<$flex_URL>\"\n      ;;\n    help2man*)\n      echo \"You should only need it if you modified a dependency\" \\\n           \"of a man page.\"\n      echo \"You may want to install the GNU Help2man package:\"\n      echo \"<$gnu_software_URL/help2man/>\"\n    ;;\n    makeinfo*)\n      echo \"You should only need it if you modified a '.texi' file, or\"\n      echo \"any other file indirectly affecting the aspect of the manual.\"\n      echo \"You might want to install the Texinfo package:\"\n      echo \"<$gnu_software_URL/texinfo/>\"\n      echo \"The spurious makeinfo call might also be the consequence of\"\n      echo \"using a buggy 'make' (AIX, DU, IRIX), in which case you might\"\n      echo \"want to install GNU make:\"\n      echo \"<$gnu_software_URL/make/>\"\n      ;;\n    *)\n      echo \"You might have modified some files without having the proper\"\n      echo \"tools for further handling them.  Check the 'README' file, it\"\n      echo \"often tells you about the needed prerequisites for installing\"\n      echo \"this package.  You may also peek at any GNU archive site, in\"\n      echo \"case some other package contains this missing '$1' program.\"\n      ;;\n  esac\n}\n\ngive_advice \"$1\" | sed -e '1s/^/WARNING: /' \\\n                       -e '2,$s/^/         /' >&2\n\n# Propagate the correct exit status (expected to be 127 for a program\n# not found, 63 for a program that failed due to version mismatch).\nexit $st\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-time-zone: \"UTC\"\n# time-stamp-end: \"; # UTC\"\n# End:\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/configure",
    "content": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.69 for libsodium 1.0.7.\n#\n# Report bugs to <https://github.com/jedisct1/libsodium/issues>.\n#\n#\n# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, 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.\nas_myself=\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# Use a proper internal environment variable to ensure we don't fall\n  # into an infinite loop, continuously re-executing ourselves.\n  if test x\"${_as_can_reexec}\" != xno && test \"x$CONFIG_SHELL\" != x; then\n    _as_can_reexec=no; export _as_can_reexec;\n    # We cannot yet assume a decent shell, so we have to provide a\n# neutralization value for shells without unset; and this also\n# works around shells that cannot unset nonexistent variables.\n# Preserve -v and -x to the replacement shell.\nBASH_ENV=/dev/null\nENV=/dev/null\n(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\ncase $- in # ((((\n  *v*x* | *x*v* ) as_opts=-vx ;;\n  *v* ) as_opts=-v ;;\n  *x* ) as_opts=-x ;;\n  * ) as_opts= ;;\nesac\nexec $CONFIG_SHELL $as_opts \"$as_myself\" ${1+\"$@\"}\n# Admittedly, this is quite paranoid, since all the known shells bail\n# out after a failed `exec'.\n$as_echo \"$0: could not re-execute with $CONFIG_SHELL\" >&2\nas_fn_exit 255\n  fi\n  # We don't want this to propagate to other subprocesses.\n          { _as_can_reexec=; unset _as_can_reexec;}\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\ntest -x / || 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\n  test -n \\\"\\${ZSH_VERSION+set}\\${BASH_VERSION+set}\\\" || (\n    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\n    ECHO=\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\n    ECHO=\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\\$ECHO\n    PATH=/empty FPATH=/empty; export PATH FPATH\n    test \\\"X\\`printf %s \\$ECHO\\`\\\" = \\\"X\\$ECHO\\\" \\\\\n      || test \\\"X\\`print -r -- \\$ECHO\\`\\\" = \\\"X\\$ECHO\\\" ) || 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  export CONFIG_SHELL\n             # We cannot yet assume a decent shell, so we have to provide a\n# neutralization value for shells without unset; and this also\n# works around shells that cannot unset nonexistent variables.\n# Preserve -v and -x to the replacement shell.\nBASH_ENV=/dev/null\nENV=/dev/null\n(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV\ncase $- in # ((((\n  *v*x* | *x*v* ) as_opts=-vx ;;\n  *v* ) as_opts=-v ;;\n  *x* ) as_opts=-x ;;\n  * ) as_opts= ;;\nesac\nexec $CONFIG_SHELL $as_opts \"$as_myself\" ${1+\"$@\"}\n# Admittedly, this is quite paranoid, since all the known shells bail\n# out after a failed `exec'.\n$as_echo \"$0: could not re-execute with $CONFIG_SHELL\" >&2\nexit 255\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\n$0: https://github.com/jedisct1/libsodium/issues about your\n$0: system, including any error possibly output before this\n$0: message. Then install a modern shell, or manually run\n$0: the script under such a shell if you do 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\n# as_fn_executable_p FILE\n# -----------------------\n# Test if FILE is an executable regular file.\nas_fn_executable_p ()\n{\n  test -f \"$1\" && test -x \"$1\"\n} # as_fn_executable_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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have\n  # already done that, so ensure we don't try to do so again and fall\n  # in an infinite loop.  This has already happened in practice.\n  _as_can_reexec=no; export _as_can_reexec\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 -pR'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -pR'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -pR'\n  fi\nelse\n  as_ln_s='cp -pR'\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\nas_test_x='test -x'\nas_executable_p=as_fn_executable_p\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\nSHELL=${CONFIG_SHELL-/bin/sh}\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, old GNU/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='libsodium'\nPACKAGE_TARNAME='libsodium'\nPACKAGE_VERSION='1.0.7'\nPACKAGE_STRING='libsodium 1.0.7'\nPACKAGE_BUGREPORT='https://github.com/jedisct1/libsodium/issues'\nPACKAGE_URL='https://github.com/jedisct1/libsodium'\n\nac_unique_file=\"src/libsodium/sodium/version.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='am__EXEEXT_FALSE\nam__EXEEXT_TRUE\nLTLIBOBJS\nLIBOBJS\nHAVE_LD_OUTPUT_DEF_FALSE\nHAVE_LD_OUTPUT_DEF_TRUE\nAS\nNATIVECLIENT_FALSE\nNATIVECLIENT_TRUE\nEMSCRIPTEN_FALSE\nEMSCRIPTEN_TRUE\nTEST_LDFLAGS\nLIBTOOL_EXTRA_FLAGS\nHAVE_CPUID_V\nHAVE_TI_MODE_V\nHAVE_TI_MODE_FALSE\nHAVE_TI_MODE_TRUE\nHAVE_AVX_ASM_V\nHAVE_AVX_ASM_FALSE\nHAVE_AVX_ASM_TRUE\nHAVE_AMD64_ASM_V\nHAVE_AMD64_ASM_FALSE\nHAVE_AMD64_ASM_TRUE\nCFLAGS_PCLMUL\nCFLAGS_AESNI\nCFLAGS_SSE41\nCFLAGS_SSSE3\nCFLAGS_SSE3\nCFLAGS_SSE2\nCFLAGS_MMX\nLIBTOOL_DEPS\nOTOOL64\nOTOOL\nLIPO\nNMEDIT\nDSYMUTIL\nMANIFEST_TOOL\nRANLIB\nac_ct_AR\nAR\nDLLTOOL\nOBJDUMP\nLN_S\nNM\nac_ct_DUMPBIN\nDUMPBIN\nLD\nFGREP\nSED\nLIBTOOL\nCWFLAGS\nEGREP\nGREP\nCPP\nam__fastdepCCAS_FALSE\nam__fastdepCCAS_TRUE\nCCASDEPMODE\nCCASFLAGS\nCCAS\nam__fastdepCC_FALSE\nam__fastdepCC_TRUE\nCCDEPMODE\nam__quote\nam__include\nDEPDIR\nOBJEXT\nEXEEXT\nac_ct_CC\nCPPFLAGS\nLDFLAGS\nCFLAGS\nCC\nSAFECODE_HOME\nMINIMAL_FALSE\nMINIMAL_TRUE\nDLL_VERSION\nSODIUM_LIBRARY_VERSION\nSODIUM_LIBRARY_VERSION_MINOR\nSODIUM_LIBRARY_VERSION_MAJOR\nISODATE\nam__nodep\nAMDEPBACKSLASH\nAMDEP_FALSE\nAMDEP_TRUE\nMAINT\nMAINTAINER_MODE_FALSE\nMAINTAINER_MODE_TRUE\nAM_BACKSLASH\nAM_DEFAULT_VERBOSITY\nAM_DEFAULT_V\nAM_V\nam__untar\nam__tar\nAMTAR\nam__leading_dot\nSET_MAKE\nAWK\nmkdir_p\nMKDIR_P\nINSTALL_STRIP_PROGRAM\nSTRIP\ninstall_sh\nMAKEINFO\nAUTOHEADER\nAUTOMAKE\nAUTOCONF\nACLOCAL\nVERSION\nPACKAGE\nCYGPATH_W\nam__isrc\nINSTALL_DATA\nINSTALL_SCRIPT\nINSTALL_PROGRAM\nhost_os\nhost_vendor\nhost_cpu\nhost\nbuild_os\nbuild_vendor\nbuild_cpu\nbuild\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=''\nac_user_opts='\nenable_option_checking\nenable_silent_rules\nenable_maintainer_mode\nenable_dependency_tracking\nenable_ssp\nenable_asm\nenable_pie\nenable_blocking_random\nenable_minimal\nwith_safecode\nenable_debug\nenable_opt\nenable_soname_versions\nenable_shared\nenable_static\nwith_pic\nenable_fast_install\nwith_gnu_ld\nwith_sysroot\nenable_libtool_lock\n'\n      ac_precious_vars='build_alias\nhost_alias\ntarget_alias\nSAFECODE_HOME\nCC\nCFLAGS\nLDFLAGS\nLIBS\nCPPFLAGS\nCCAS\nCCASFLAGS\nCPP\nCWFLAGS\nAR'\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  *=?*) ac_optarg=`expr \"X$ac_option\" : '[^=]*=\\(.*\\)'` ;;\n  *=)   ac_optarg= ;;\n  *)    ac_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  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 libsodium 1.0.7 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/libsodium]\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 libsodium 1.0.7:\";;\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  --enable-silent-rules   less verbose build output (undo: \"make V=1\")\n  --disable-silent-rules  verbose build output (undo: \"make V=0\")\n  --enable-maintainer-mode\n                          enable make rules and dependencies not useful (and\n                          sometimes confusing) to the casual installer\n  --enable-dependency-tracking\n                          do not reject slow dependency extractors\n  --disable-dependency-tracking\n                          speeds up one-time build\n  --disable-ssp           Do not compile with -fstack-protector\n  --disable-asm           Disable assembly implementations\n  --disable-pie           Do not produce position independent executables\n  --enable-blocking-random\n                          Enable this switch only if /dev/urandom is totally\n                          broken on the target platform\n  --enable-minimal        Only compile the minimum set of functions required\n                          for the high-level API\n  --enable-debug          For maintainers only - please do not use\n  --enable-opt            Optimize for the native CPU - The resulting library\n                          will be faster but not portable\n  --enable-soname-versions\n                          enable soname versions (must be disabled for\n                          Android) (default: enabled)\n  --enable-shared[=PKGS]  build shared libraries [default=yes]\n  --enable-static[=PKGS]  build static libraries [default=yes]\n  --enable-fast-install[=PKGS]\n                          optimize for fast installation [default=yes]\n  --disable-libtool-lock  avoid locking (might break parallel builds)\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-safecode         For maintainers only - please do not use\n  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use\n                          both]\n  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]\n  --with-sysroot=DIR Search for dependent libraries within DIR\n                        (or the compiler's sysroot if not specified).\n\nSome influential environment variables:\n  SAFECODE_HOME\n              set to the safecode base directory\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  CCAS        assembler compiler command (defaults to CC)\n  CCASFLAGS   assembler compiler flags (defaults to CFLAGS)\n  CPP         C preprocessor\n  CWFLAGS     define to compilation flags for generating extra warnings\n  AR          path to the ar utility\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 <https://github.com/jedisct1/libsodium/issues>.\nlibsodium home page: <https://github.com/jedisct1/libsodium>.\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\nlibsodium configure 1.0.7\ngenerated by GNU Autoconf 2.69\n\nCopyright (C) 2012 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; ${as_lineno_stack:+:} 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; } > conftest.i && {\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; ${as_lineno_stack:+:} 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 eval \\${$3+:} false; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $2\" >&5\n$as_echo_n \"checking for $2... \" >&6; }\nif eval \\${$3+:} false; 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.i 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( $as_echo \"## ----------------------------------------------------------- ##\n## Report this to https://github.com/jedisct1/libsodium/issues ##\n## ----------------------------------------------------------- ##\"\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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} 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; ${as_lineno_stack:+:} 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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} 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 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; ${as_lineno_stack:+:} unset as_lineno\n  as_fn_set_status $ac_retval\n\n} # ac_fn_c_try_link\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 eval \\${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno\n\n} # ac_fn_c_check_func\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 libsodium $as_me 1.0.7, which was\ngenerated by GNU Autoconf 2.69.  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    $as_echo \"## ---------------- ##\n## Cache variables. ##\n## ---------------- ##\"\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    $as_echo \"## ----------------- ##\n## Output variables. ##\n## ----------------- ##\"\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      $as_echo \"## ------------------- ##\n## File substitutions. ##\n## ------------------- ##\"\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      $as_echo \"## ----------- ##\n## confdefs.h. ##\n## ----------- ##\"\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  # We do not want a PATH search for config.site.\n  case $CONFIG_SITE in #((\n    -*)  ac_site_file1=./$CONFIG_SITE;;\n    */*) ac_site_file1=$CONFIG_SITE;;\n    *)   ac_site_file1=./$CONFIG_SITE;;\n  esac\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      || { { $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 $? \"failed to load site script $ac_site_file\nSee \\`config.log' for more details\" \"$LINENO\" 5; }\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\nac_aux_dir=\nfor ac_dir in build-aux \"$srcdir\"/build-aux; do\n  if test -f \"$ac_dir/install-sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install-sh -c\"\n    break\n  elif test -f \"$ac_dir/install.sh\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/install.sh -c\"\n    break\n  elif test -f \"$ac_dir/shtool\"; then\n    ac_aux_dir=$ac_dir\n    ac_install_sh=\"$ac_aux_dir/shtool install -c\"\n    break\n  fi\ndone\nif test -z \"$ac_aux_dir\"; then\n  as_fn_error $? \"cannot find install-sh, install.sh, or shtool in build-aux \\\"$srcdir\\\"/build-aux\" \"$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\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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking build system type\" >&5\n$as_echo_n \"checking build system type... \" >&6; }\nif ${ac_cv_build+:} false; 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 ${ac_cv_host+:} false; 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\nam__api_version='1.14'\n\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 ${ac_cv_path_install+:} false; 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 as_fn_executable_p \"$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# Reject unsafe characters in $srcdir or the absolute working directory\n# name.  Accept space and tab only in the latter.\nam_lf='\n'\ncase `pwd` in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf]*)\n    as_fn_error $? \"unsafe absolute working directory name\" \"$LINENO\" 5;;\nesac\ncase $srcdir in\n  *[\\\\\\\"\\#\\$\\&\\'\\`$am_lf\\ \\\t]*)\n    as_fn_error $? \"unsafe srcdir value: '$srcdir'\" \"$LINENO\" 5;;\nesac\n\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   am_has_slept=no\n   for am_try in 1 2; do\n     echo \"timestamp, slept: $am_has_slept\" > conftest.file\n     set X `ls -Lt \"$srcdir/configure\" conftest.file 2> /dev/null`\n     if test \"$*\" = \"X\"; then\n\t# -L didn't work.\n\tset X `ls -t \"$srcdir/configure\" conftest.file`\n     fi\n     if test \"$*\" != \"X $srcdir/configure conftest.file\" \\\n\t&& test \"$*\" != \"X conftest.file $srcdir/configure\"; then\n\n\t# If neither matched, then we have a broken ls.  This can happen\n\t# if, for instance, CONFIG_SHELL is bash and it inherits a\n\t# broken ls alias from the environment.  This has actually\n\t# happened.  Such a system could not be considered \"sane\".\n\tas_fn_error $? \"ls -t appears to fail.  Make sure there is not a broken\n  alias in your environment\" \"$LINENO\" 5\n     fi\n     if test \"$2\" = conftest.file || test $am_try -eq 2; then\n       break\n     fi\n     # Just in case.\n     sleep 1\n     am_has_slept=yes\n   done\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; }\n# If we didn't sleep, we still need to ensure time stamps of config.status and\n# generated files are strictly newer.\nam_sleep_pid=\nif grep 'slept: no' conftest.file >/dev/null 2>&1; then\n  ( sleep 1 ) &\n  am_sleep_pid=$!\nfi\n\nrm -f conftest.file\n\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\nif test x\"${MISSING+set}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    MISSING=\"\\${SHELL} \\\"$am_aux_dir/missing\\\"\" ;;\n  *)\n    MISSING=\"\\${SHELL} $am_aux_dir/missing\" ;;\n  esac\nfi\n# Use eval to expand $SHELL\nif eval \"$MISSING --is-lightweight\"; then\n  am_missing_run=\"$MISSING \"\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 test x\"${install_sh}\" != xset; then\n  case $am_aux_dir in\n  *\\ * | *\\\t*)\n    install_sh=\"\\${SHELL} '$am_aux_dir/install-sh'\" ;;\n  *)\n    install_sh=\"\\${SHELL} $am_aux_dir/install-sh\"\n  esac\nfi\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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p \"$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=\"\\$(install_sh) -c -s\"\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p\" >&5\n$as_echo_n \"checking for a thread-safe mkdir -p... \" >&6; }\nif test -z \"$MKDIR_P\"; then\n  if ${ac_cv_path_mkdir+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR\nfor as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in mkdir gmkdir; do\n\t for ac_exec_ext in '' $ac_executable_extensions; do\n\t   as_fn_executable_p \"$as_dir/$ac_prog$ac_exec_ext\" || continue\n\t   case `\"$as_dir/$ac_prog$ac_exec_ext\" --version 2>&1` in #(\n\t     'mkdir (GNU coreutils) '* | \\\n\t     'mkdir (coreutils) '* | \\\n\t     'mkdir (fileutils) '4.1*)\n\t       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext\n\t       break 3;;\n\t   esac\n\t done\n       done\n  done\nIFS=$as_save_IFS\n\nfi\n\n  test -d ./--version && rmdir ./--version\n  if test \"${ac_cv_path_mkdir+set}\" = set; then\n    MKDIR_P=\"$ac_cv_path_mkdir -p\"\n  else\n    # As a last resort, use the slow shell script.  Don't cache a\n    # value for MKDIR_P 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    MKDIR_P=\"$ac_install_sh -d\"\n  fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MKDIR_P\" >&5\n$as_echo \"$MKDIR_P\" >&6; }\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 ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p \"$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 eval \\${ac_cv_prog_make_${ac_make}_set+:} false; 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# Check whether --enable-silent-rules was given.\nif test \"${enable_silent_rules+set}\" = set; then :\n  enableval=$enable_silent_rules;\nfi\n\ncase $enable_silent_rules in # (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=1;;\nesac\nam_make=${MAKE-make}\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables\" >&5\n$as_echo_n \"checking whether $am_make supports nested variables... \" >&6; }\nif ${am_cv_make_support_nested_variables+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if $as_echo 'TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables\" >&5\n$as_echo \"$am_cv_make_support_nested_variables\" >&6; }\nif test $am_cv_make_support_nested_variables = yes; then\n    AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAM_BACKSLASH='\\'\n\nif test \"`cd $srcdir && pwd`\" != \"`pwd`\"; then\n  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output\n  # is not polluted with repeated \"-I.\"\n  am__isrc=' -I$(srcdir)'\n  # test to see if srcdir already configured\n  if test -f $srcdir/config.status; then\n    as_fn_error $? \"source directory already configured; run \\\"make distclean\\\" there first\" \"$LINENO\" 5\n  fi\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='libsodium'\n VERSION='1.0.7'\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\n# For better backward compatibility.  To be removed once Automake 1.9.x\n# dies out for good.  For more background, see:\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>\n# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>\nmkdir_p='$(MKDIR_P)'\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.  Yes, it's still used\n# in the wild :-(  We should find a proper way to deprecate it ...\nAMTAR='$${TAR-tar}'\n\n\n# We'll loop over all known methods to create a tar archive until one works.\n_am_tools='gnutar plaintar pax cpio none'\n\n# The POSIX 1988 'ustar' format is defined with fixed-size fields.\n      # There is notably a 21 bits limit for the UID and the GID.  In fact,\n      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343\n      # and bug#13588).\n      am_max_uid=2097151 # 2^21 - 1\n      am_max_gid=$am_max_uid\n      # The $UID and $GID variables are not portable, so we need to resort\n      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls\n      # below are definitely unexpected, so allow the users to see them\n      # (that is, avoid stderr redirection).\n      am_uid=`id -u || echo unknown`\n      am_gid=`id -g || echo unknown`\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format\" >&5\n$as_echo_n \"checking whether UID '$am_uid' is supported by ustar format... \" >&6; }\n      if test $am_uid -le $am_max_uid; then\n         { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n      else\n         { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n         _am_tools=none\n      fi\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format\" >&5\n$as_echo_n \"checking whether GID '$am_gid' is supported by ustar format... \" >&6; }\n      if test $am_gid -le $am_max_gid; then\n         { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n      else\n        { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n        _am_tools=none\n      fi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive\" >&5\n$as_echo_n \"checking how to create a ustar tar archive... \" >&6; }\n\n  # Go ahead even if we have the value already cached.  We do so because we\n  # need to set the values for the 'am__tar' and 'am__untar' variables.\n  _am_tools=${am_cv_prog_tar_ustar-$_am_tools}\n\n  for _am_tool in $_am_tools; do\n    case $_am_tool in\n    gnutar)\n      for _am_tar in tar gnutar gtar; do\n        { echo \"$as_me:$LINENO: $_am_tar --version\" >&5\n   ($_am_tar --version) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); } && break\n      done\n      am__tar=\"$_am_tar --format=ustar -chf - \"'\"$$tardir\"'\n      am__tar_=\"$_am_tar --format=ustar -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 ustar -w \"$$tardir\"'\n      am__tar_='pax -L -x ustar -w \"$tardir\"'\n      am__untar='pax -r'\n      ;;\n    cpio)\n      am__tar='find \"$$tardir\" -print | cpio -o -H ustar -L'\n      am__tar_='find \"$tardir\" -print | cpio -o -H ustar -L'\n      am__untar='cpio -i -H ustar -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_ustar}\" && 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    { echo \"$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar\" >&5\n   (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); }\n    rm -rf conftest.dir\n    if test -s conftest.tar; then\n      { echo \"$as_me:$LINENO: $am__untar <conftest.tar\" >&5\n   ($am__untar <conftest.tar) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); }\n      { echo \"$as_me:$LINENO: cat conftest.dir/file\" >&5\n   (cat conftest.dir/file) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); }\n      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break\n    fi\n  done\n  rm -rf conftest.dir\n\n  if ${am_cv_prog_tar_ustar+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  am_cv_prog_tar_ustar=$_am_tool\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar\" >&5\n$as_echo \"$am_cv_prog_tar_ustar\" >&6; }\n\n\n\n\n\n\n# POSIX will say in a future version that running \"rm -f\" with no argument\n# is OK; and we want to be able to make that assumption in our Makefile\n# recipes.  So use an aggressive probe to check that the usage we want is\n# actually supported \"in the wild\" to an acceptable degree.\n# See automake bug#10828.\n# To make any issue more visible, cause the running configure to be aborted\n# by default if the 'rm' program in use doesn't match our expectations; the\n# user can still override this though.\nif rm -f && rm -fr && rm -rf; then : OK; else\n  cat >&2 <<'END'\nOops!\n\nYour 'rm' program seems unable to run without file operands specified\non the command line, even when the '-f' option is present.  This is contrary\nto the behaviour of most rm programs out there, and not conforming with\nthe upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>\n\nPlease tell bug-automake@gnu.org about your system, including the value\nof your $PATH and any error possibly output before this message.  This\ncan help us improve future automake versions.\n\nEND\n  if test x\"$ACCEPT_INFERIOR_RM_PROGRAM\" = x\"yes\"; then\n    echo 'Configuration will proceed anyway, since you have set the' >&2\n    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to \"yes\"' >&2\n    echo >&2\n  else\n    cat >&2 <<'END'\nAborting the configuration process, to ensure you take notice of the issue.\n\nYou can download and install GNU coreutils to get an 'rm' implementation\nthat behaves properly: <http://www.gnu.org/software/coreutils/>.\n\nIf you want to complete the configuration process using your problematic\n'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM\nto \"yes\", and re-run configure.\n\nEND\n    as_fn_error $? \"Your 'rm' program is bad, sorry.\" \"$LINENO\" 5\n  fi\nfi\n# Check whether --enable-silent-rules was given.\nif test \"${enable_silent_rules+set}\" = set; then :\n  enableval=$enable_silent_rules;\nfi\n\ncase $enable_silent_rules in # (((\n  yes) AM_DEFAULT_VERBOSITY=0;;\n   no) AM_DEFAULT_VERBOSITY=1;;\n    *) AM_DEFAULT_VERBOSITY=0;;\nesac\nam_make=${MAKE-make}\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables\" >&5\n$as_echo_n \"checking whether $am_make supports nested variables... \" >&6; }\nif ${am_cv_make_support_nested_variables+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if $as_echo 'TRUE=$(BAR$(V))\nBAR0=false\nBAR1=true\nV=1\nam__doit:\n\t@$(TRUE)\n.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then\n  am_cv_make_support_nested_variables=yes\nelse\n  am_cv_make_support_nested_variables=no\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables\" >&5\n$as_echo \"$am_cv_make_support_nested_variables\" >&6; }\nif test $am_cv_make_support_nested_variables = yes; then\n    AM_V='$(V)'\n  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'\nelse\n  AM_V=$AM_DEFAULT_VERBOSITY\n  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY\nfi\nAM_BACKSLASH='\\'\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles\" >&5\n$as_echo_n \"checking whether to enable maintainer-specific portions of Makefiles... \" >&6; }\n    # Check whether --enable-maintainer-mode was given.\nif test \"${enable_maintainer_mode+set}\" = set; then :\n  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval\nelse\n  USE_MAINTAINER_MODE=no\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE\" >&5\n$as_echo \"$USE_MAINTAINER_MODE\" >&6; }\n   if test $USE_MAINTAINER_MODE = yes; then\n  MAINTAINER_MODE_TRUE=\n  MAINTAINER_MODE_FALSE='#'\nelse\n  MAINTAINER_MODE_TRUE='#'\n  MAINTAINER_MODE_FALSE=\nfi\n\n  MAINT=$MAINTAINER_MODE_TRUE\n\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='\\'\n  am__nodep='_no'\nfi\n if 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\nISODATE=`date +%Y-%m-%d`\n\n\nSODIUM_LIBRARY_VERSION_MAJOR=9\nSODIUM_LIBRARY_VERSION_MINOR=0\nDLL_VERSION=8\nSODIUM_LIBRARY_VERSION=18:0:0\n#                       | | |\n#                +------+ | +---+\n#                |        |     |\n#             current:revision:age\n#                |        |     |\n#                |        |     +- increment if interfaces have been added\n#                |        |        set to zero if interfaces have been removed\n#                |        |        or changed\n#                |        +- increment if source code has changed\n#                |           set to zero if current is incremented\n#                +- increment if interfaces have been added, removed or changed\n\n\n\n\n\nLX_CFLAGS=${CFLAGS-NONE}\n\n\nif test pwd | fgrep ' ' > /dev/null 2>&1; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: The build directory contains whitespaces - This can cause tests/installation to fail due to limitations of some libtool versions\" >&5\n$as_echo \"$as_me: WARNING: The build directory contains whitespaces - This can cause tests/installation to fail due to limitations of some libtool versions\" >&2;}\n\nfi\n\n\n# Check whether --enable-ssp was given.\nif test \"${enable_ssp+set}\" = set; then :\n  enableval=$enable_ssp;\n  if test \"x$enableval\" = \"xno\"; then :\n\n    enable_ssp=\"no\"\n\nelse\n\n    enable_ssp=\"yes\"\n\nfi\n\nelse\n\n  enable_ssp=\"yes\"\n\nfi\n\n\n# Check whether --enable-asm was given.\nif test \"${enable_asm+set}\" = set; then :\n  enableval=$enable_asm;\n  if test \"x$enableval\" = \"xno\"; then :\n\n    enable_asm=\"no\"\n\nelse\n\n    enable_asm=\"yes\"\n\nfi\n\nelse\n\n  enable_asm=\"yes\"\n\nfi\n\n\nif test \"x$EMSCRIPTEN\" != \"x\"; then :\n\n  enable_asm=\"no\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: compiling to javascript - asm implementations disabled\" >&5\n$as_echo \"$as_me: WARNING: compiling to javascript - asm implementations disabled\" >&2;}\n\nfi\n\n# Check whether --enable-pie was given.\nif test \"${enable_pie+set}\" = set; then :\n  enableval=$enable_pie; enable_pie=$enableval\nelse\n  enable_pie=\"maybe\"\nfi\n\n\ncase $host_os in #(\n  mingw*|cygwin*|msys) :\n    enable_pie=\"no\" ;; #(\n  *) :\n     ;;\nesac\n\n# Check whether --enable-blocking-random was given.\nif test \"${enable_blocking_random+set}\" = set; then :\n  enableval=$enable_blocking_random;\n  if test \"x$enableval\" = \"xyes\"; then :\n\n\n$as_echo \"#define USE_BLOCKING_RANDOM 1\" >>confdefs.h\n\n\nfi\n\nfi\n\n\n# Check whether --enable-minimal was given.\nif test \"${enable_minimal+set}\" = set; then :\n  enableval=$enable_minimal;\n  if test \"x$enableval\" = \"xyes\"; then :\n\n    enable_minimal=\"yes\"\n\nelse\n\n    enable_minimal=\"no\"\n\nfi\n\nelse\n\n  enable_minimal=\"no\"\n\nfi\n\n if test x$enable_minimal = xyes; then\n  MINIMAL_TRUE=\n  MINIMAL_FALSE='#'\nelse\n  MINIMAL_TRUE='#'\n  MINIMAL_FALSE=\nfi\n\n\n\n# Check whether --with-safecode was given.\nif test \"${with_safecode+set}\" = set; then :\n  withval=$with_safecode; if test \"x$withval\" = \"xyes\"; then :\n\n\n    : ${SAFECODE_HOME:=/opt/safecode}\n    LDFLAGS=\"$LDFLAGS -L${SAFECODE_HOME}/lib\"\n    LIBS=\"$LIBS -lsc_dbg_rt -lpoolalloc_bitmap -lstdc++\"\n    CFLAGS=\"$CFLAGS -fmemsafety\"\n\nfi\n\nfi\n\n\n# Check whether --enable-debug was given.\nif test \"${enable_debug+set}\" = set; then :\n  enableval=$enable_debug;\n  if test \"x$enableval\" = \"xyes\"; then :\n\n    if test \"x$LX_CFLAGS\" = \"xNONE\"; then :\n\n      nxflags=\"\"\n      for flag in `echo $CFLAGS`; do\n        case $flag in #(\n  -O*) :\n      ;; #(\n  -g*) :\n      ;; #(\n  *) :\n    as_fn_append nxflags \" $flag\" ;; #(\n  *) :\n     ;;\nesac\n      done\n      CFLAGS=\"$nxflags -O0 -g3\"\n\nfi\n    CPPFLAGS=\"$CPPFLAGS -DDEBUG=1\"\n\nfi\n\nfi\n\n\n# Check whether --enable-opt was given.\nif test \"${enable_opt+set}\" = set; then :\n  enableval=$enable_opt;\n  if test \"x$enableval\" = \"xyes\"; then :\n\n    CFLAGS=\"$CFLAGS -flto -march=native\"\n    LDFLAGS=\"$LDFLAGS -flto -march=native\"\nfi\n\nfi\n\n\n\n\n\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 this is the am__doit target\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# Ignore all kinds of additional output from 'make'.\ncase `$am_make -s -f confmf 2> /dev/null` in #(\n*the\\ am__doit\\ target*)\n  am__include=include\n  am__quote=\n  _am_result=GNU\n  ;;\nesac\n# Now try BSD make style include.\nif test \"$am__include\" = \"#\"; then\n   echo '.include \"confinc\"' > confmf\n   case `$am_make -s -f confmf 2> /dev/null` in #(\n   *the\\ am__doit\\ target*)\n     am__include=.include\n     am__quote=\"\\\"\"\n     _am_result=BSD\n     ;;\n   esac\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\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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p \"$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;}\nas_fn_error 77 \"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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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>\nstruct stat;\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\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 whether $CC understands -c and -o together\" >&5\n$as_echo_n \"checking whether $CC understands -c and -o together... \" >&6; }\nif ${am_cv_prog_cc_c_o+:} false; 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  # Following AC_PROG_CC_C_O, we do the test twice because some\n  # compilers refuse to overwrite an existing .o file with -o,\n  # though they will create one.\n  am_cv_prog_cc_c_o=yes\n  for am_i in 1 2; do\n    if { echo \"$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext\" >&5\n   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5\n   ac_status=$?\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   (exit $ac_status); } \\\n         && test -f conftest2.$ac_objext; then\n      : OK\n    else\n      am_cv_prog_cc_c_o=no\n      break\n    fi\n  done\n  rm -f core conftest*\n  unset am_i\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o\" >&5\n$as_echo \"$am_cv_prog_cc_c_o\" >&6; }\nif test \"$am_cv_prog_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\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\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 ${am_cv_CC_dependencies_compiler_type+:} false; 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  rm -rf conftest.dir\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  am__universal=false\n  case \" $depcc \" in #(\n     *\\ -arch\\ *\\ -arch\\ *) am__universal=true ;;\n     esac\n\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 10 /bin/sh.\n      echo '/* dummy */' > sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\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.  Also, some Intel\n    # versions had trouble with output in subdirs.\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvc7 | msvc7msys | msvisualcpp | msvcmsys)\n      # This compiler won't grok '-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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 if\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   { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99\" >&5\n$as_echo_n \"checking for $CC option to accept ISO C99... \" >&6; }\nif ${ac_cv_prog_cc_c99+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_prog_cc_c99=no\nac_save_CC=$CC\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stdlib.h>\n#include <wchar.h>\n#include <stdio.h>\n\n// Check varargs macros.  These examples are taken from C99 6.10.3.5.\n#define debug(...) fprintf (stderr, __VA_ARGS__)\n#define showlist(...) puts (#__VA_ARGS__)\n#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))\nstatic void\ntest_varargs_macros (void)\n{\n  int x = 1234;\n  int y = 5678;\n  debug (\"Flag\");\n  debug (\"X = %d\\n\", x);\n  showlist (The first, second, and third items.);\n  report (x>y, \"x is %d but y is %d\", x, y);\n}\n\n// Check long long types.\n#define BIG64 18446744073709551615ull\n#define BIG32 4294967295ul\n#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)\n#if !BIG_OK\n  your preprocessor is broken;\n#endif\n#if BIG_OK\n#else\n  your preprocessor is broken;\n#endif\nstatic long long int bignum = -9223372036854775807LL;\nstatic unsigned long long int ubignum = BIG64;\n\nstruct incomplete_array\n{\n  int datasize;\n  double data[];\n};\n\nstruct named_init {\n  int number;\n  const wchar_t *name;\n  double average;\n};\n\ntypedef const char *ccp;\n\nstatic inline int\ntest_restrict (ccp restrict text)\n{\n  // See if C++-style comments work.\n  // Iterate through items via the restricted pointer.\n  // Also check for declarations in for loops.\n  for (unsigned int i = 0; *(text+i) != '\\0'; ++i)\n    continue;\n  return 0;\n}\n\n// Check varargs and va_copy.\nstatic void\ntest_varargs (const char *format, ...)\n{\n  va_list args;\n  va_start (args, format);\n  va_list args_copy;\n  va_copy (args_copy, args);\n\n  const char *str;\n  int number;\n  float fnumber;\n\n  while (*format)\n    {\n      switch (*format++)\n\t{\n\tcase 's': // string\n\t  str = va_arg (args_copy, const char *);\n\t  break;\n\tcase 'd': // int\n\t  number = va_arg (args_copy, int);\n\t  break;\n\tcase 'f': // float\n\t  fnumber = va_arg (args_copy, double);\n\t  break;\n\tdefault:\n\t  break;\n\t}\n    }\n  va_end (args_copy);\n  va_end (args);\n}\n\nint\nmain ()\n{\n\n  // Check bool.\n  _Bool success = false;\n\n  // Check restrict.\n  if (test_restrict (\"String literal\") == 0)\n    success = true;\n  char *restrict newvar = \"Another string\";\n\n  // Check varargs.\n  test_varargs (\"s, d' f .\", \"string\", 65, 34.234);\n  test_varargs_macros ();\n\n  // Check flexible array members.\n  struct incomplete_array *ia =\n    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));\n  ia->datasize = 10;\n  for (int i = 0; i < ia->datasize; ++i)\n    ia->data[i] = i * 1.234;\n\n  // Check named initializers.\n  struct named_init ni = {\n    .number = 34,\n    .name = L\"Test wide string\",\n    .average = 543.34343,\n  };\n\n  ni.number = 58;\n\n  int dynamic_array[ni.number];\n  dynamic_array[ni.number - 1] = 543;\n\n  // work around unused variable warnings\n  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'\n\t  || dynamic_array[ni.number - 1] != 543);\n\n  ;\n  return 0;\n}\n_ACEOF\nfor ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99\ndo\n  CC=\"$ac_save_CC $ac_arg\"\n  if ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_prog_cc_c99=$ac_arg\nfi\nrm -f core conftest.err conftest.$ac_objext\n  test \"x$ac_cv_prog_cc_c99\" != \"xno\" && break\ndone\nrm -f conftest.$ac_ext\nCC=$ac_save_CC\n\nfi\n# AC_CACHE_VAL\ncase \"x$ac_cv_prog_cc_c99\" 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_c99\"\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99\" >&5\n$as_echo \"$ac_cv_prog_cc_c99\" >&6; } ;;\nesac\nif test \"x$ac_cv_prog_cc_c99\" != xno; then :\n\nfi\n\n\n# By default we simply use the C compiler to build assembly code.\n\ntest \"${CCAS+set}\" = set || CCAS=$CC\ntest \"${CCASFLAGS+set}\" = set || CCASFLAGS=$CFLAGS\n\n\n\ndepcc=\"$CCAS\"   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 ${am_cv_CCAS_dependencies_compiler_type+:} false; 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  rm -rf conftest.dir\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_CCAS_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  am__universal=false\n\n\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 10 /bin/sh.\n      echo '/* dummy */' > sub/conftst$i.h\n    done\n    echo \"${am__include} ${am__quote}sub/conftest.Po${am__quote}\" > confmf\n\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.  Also, some Intel\n    # versions had trouble with output in subdirs.\n    am__obj=sub/conftest.${OBJEXT-o}\n    am__minus_obj=\"-o $am__obj\"\n    case $depmode in\n    gcc)\n      # This depmode causes a compiler race in universal mode.\n      test \"$am__universal\" = false || continue\n      ;;\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    msvc7 | msvc7msys | msvisualcpp | msvcmsys)\n      # This compiler won't grok '-c -o', but also, the minuso test has\n      # not run yet.  These depmodes are late enough in the game, and\n      # so weak that their functioning should not be impacted.\n      am__obj=conftest.${OBJEXT-o}\n      am__minus_obj=\n      ;;\n    none) break ;;\n    esac\n    if depmode=$depmode \\\n       source=sub/conftest.c object=$am__obj \\\n       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \\\n       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \\\n         >/dev/null 2>conftest.err &&\n       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&\n       grep $am__obj 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_CCAS_dependencies_compiler_type=$depmode\n        break\n      fi\n    fi\n  done\n\n  cd ..\n  rm -rf conftest.dir\nelse\n  am_cv_CCAS_dependencies_compiler_type=none\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type\" >&5\n$as_echo \"$am_cv_CCAS_dependencies_compiler_type\" >&6; }\nCCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type\n\n if\n  test \"x$enable_dependency_tracking\" != xno \\\n  && test \"$am_cv_CCAS_dependencies_compiler_type\" = gcc3; then\n  am__fastdepCCAS_TRUE=\n  am__fastdepCCAS_FALSE='#'\nelse\n  am__fastdepCCAS_TRUE='#'\n  am__fastdepCCAS_FALSE=\nfi\n\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{ $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 ${ac_cv_prog_CPP+:} false; 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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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.i 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.i conftest.$ac_ext\n\ndone\n# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.\nrm -f conftest.i 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\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 ${ac_cv_path_GREP+:} false; 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      as_fn_executable_p \"$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 ${ac_cv_path_EGREP+:} false; 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      as_fn_executable_p \"$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 ${ac_cv_header_stdc+:} false; 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\"\nif eval test \\\"x\\$\"$as_ac_Header\"\\\" = 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\" = xyes; 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 ${ac_cv_safe_to_define___extensions__+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#         define __EXTENSIONS__ 1\n          $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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for __native_client__ defined\" >&5\n$as_echo_n \"checking for __native_client__ defined... \" >&6; }\nif ${ac_cv_defined___native_client__+:} false; 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  #ifdef __native_client__\n  int ok;\n  #else\n  choke me\n  #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_defined___native_client__=yes\nelse\n  ac_cv_defined___native_client__=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_defined___native_client__\" >&5\n$as_echo \"$ac_cv_defined___native_client__\" >&6; }\nif test $ac_cv_defined___native_client__ != \"no\"; then :\n  NATIVECLIENT=\"yes\"\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for _FORTIFY_SOURCE defined\" >&5\n$as_echo_n \"checking for _FORTIFY_SOURCE defined... \" >&6; }\nif ${ac_cv_defined__FORTIFY_SOURCE+:} false; 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  #ifdef _FORTIFY_SOURCE\n  int ok;\n  #else\n  choke me\n  #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_defined__FORTIFY_SOURCE=yes\nelse\n  ac_cv_defined__FORTIFY_SOURCE=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_defined__FORTIFY_SOURCE\" >&5\n$as_echo \"$ac_cv_defined__FORTIFY_SOURCE\" >&6; }\nif test $ac_cv_defined__FORTIFY_SOURCE != \"no\"; then :\n\nelse\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -D_FORTIFY_SOURCE=2\" >&5\n$as_echo_n \"checking whether C compiler accepts -D_FORTIFY_SOURCE=2... \" >&6; }\nif ${ax_cv_check_cflags___D_FORTIFY_SOURCE_2+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -D_FORTIFY_SOURCE=2\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___D_FORTIFY_SOURCE_2=yes\nelse\n  ax_cv_check_cflags___D_FORTIFY_SOURCE_2=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___D_FORTIFY_SOURCE_2\" >&5\n$as_echo \"$ax_cv_check_cflags___D_FORTIFY_SOURCE_2\" >&6; }\nif test \"x$ax_cv_check_cflags___D_FORTIFY_SOURCE_2\" = xyes; then :\n  CPPFLAGS=\"$CPPFLAGS -D_FORTIFY_SOURCE=2\"\nelse\n  :\nfi\n\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fvisibility=hidden\" >&5\n$as_echo_n \"checking whether C compiler accepts -fvisibility=hidden... \" >&6; }\nif ${ax_cv_check_cflags___fvisibility_hidden+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fvisibility=hidden\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fvisibility_hidden=yes\nelse\n  ax_cv_check_cflags___fvisibility_hidden=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fvisibility_hidden\" >&5\n$as_echo \"$ax_cv_check_cflags___fvisibility_hidden\" >&6; }\nif test \"x$ax_cv_check_cflags___fvisibility_hidden\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fvisibility=hidden\"\nelse\n  :\nfi\n\n\ncase $host_os in #(\n  cygwin*|mingw*|msys|pw32*|cegcc*) :\n      ;; #(\n  *) :\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fPIC\" >&5\n$as_echo_n \"checking whether C compiler accepts -fPIC... \" >&6; }\nif ${ax_cv_check_cflags___fPIC+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fPIC\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fPIC=yes\nelse\n  ax_cv_check_cflags___fPIC=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fPIC\" >&5\n$as_echo \"$ax_cv_check_cflags___fPIC\" >&6; }\nif test \"x$ax_cv_check_cflags___fPIC\" = xyes; then :\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fPIC\" >&5\n$as_echo_n \"checking whether the linker accepts -fPIC... \" >&6; }\nif ${ax_cv_check_ldflags___fPIC+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -fPIC\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___fPIC=yes\nelse\n  ax_cv_check_ldflags___fPIC=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fPIC\" >&5\n$as_echo \"$ax_cv_check_ldflags___fPIC\" >&6; }\nif test \"x$ax_cv_check_ldflags___fPIC\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fPIC\"\n\nelse\n  :\nfi\n\n\nelse\n  :\nfi\n\n ;;\nesac\n\nif test \"$enable_pie\" != \"no\"; then :\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fPIE\" >&5\n$as_echo_n \"checking whether C compiler accepts -fPIE... \" >&6; }\nif ${ax_cv_check_cflags___fPIE+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fPIE\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fPIE=yes\nelse\n  ax_cv_check_cflags___fPIE=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fPIE\" >&5\n$as_echo \"$ax_cv_check_cflags___fPIE\" >&6; }\nif test \"x$ax_cv_check_cflags___fPIE\" = xyes; then :\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fPIE\" >&5\n$as_echo_n \"checking whether the linker accepts -fPIE... \" >&6; }\nif ${ax_cv_check_ldflags___fPIE+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -fPIE\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___fPIE=yes\nelse\n  ax_cv_check_ldflags___fPIE=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fPIE\" >&5\n$as_echo \"$ax_cv_check_ldflags___fPIE\" >&6; }\nif test \"x$ax_cv_check_ldflags___fPIE\" = xyes; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -pie\" >&5\n$as_echo_n \"checking whether the linker accepts -pie... \" >&6; }\nif ${ax_cv_check_ldflags___pie+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -pie\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___pie=yes\nelse\n  ax_cv_check_ldflags___pie=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___pie\" >&5\n$as_echo \"$ax_cv_check_ldflags___pie\" >&6; }\nif test \"x$ax_cv_check_ldflags___pie\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fPIE\"\n         LDFLAGS=\"$LDFLAGS -pie\"\nelse\n  :\nfi\n\n\nelse\n  :\nfi\n\n\nelse\n  :\nfi\n\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-strict-aliasing\" >&5\n$as_echo_n \"checking whether C compiler accepts -fno-strict-aliasing... \" >&6; }\nif ${ax_cv_check_cflags___fno_strict_aliasing+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fno-strict-aliasing\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fno_strict_aliasing=yes\nelse\n  ax_cv_check_cflags___fno_strict_aliasing=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_strict_aliasing\" >&5\n$as_echo \"$ax_cv_check_cflags___fno_strict_aliasing\" >&6; }\nif test \"x$ax_cv_check_cflags___fno_strict_aliasing\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fno-strict-aliasing\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-strict-overflow\" >&5\n$as_echo_n \"checking whether C compiler accepts -fno-strict-overflow... \" >&6; }\nif ${ax_cv_check_cflags___fno_strict_overflow+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fno-strict-overflow\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fno_strict_overflow=yes\nelse\n  ax_cv_check_cflags___fno_strict_overflow=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_strict_overflow\" >&5\n$as_echo \"$ax_cv_check_cflags___fno_strict_overflow\" >&6; }\nif test \"x$ax_cv_check_cflags___fno_strict_overflow\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fno-strict-overflow\"\nelse\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fwrapv\" >&5\n$as_echo_n \"checking whether C compiler accepts -fwrapv... \" >&6; }\nif ${ax_cv_check_cflags___fwrapv+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fwrapv\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fwrapv=yes\nelse\n  ax_cv_check_cflags___fwrapv=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fwrapv\" >&5\n$as_echo \"$ax_cv_check_cflags___fwrapv\" >&6; }\nif test \"x$ax_cv_check_cflags___fwrapv\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fwrapv\"\nelse\n  :\nfi\n\n\nfi\n\n\nLIBTOOL_OLD_FLAGS=\"$LIBTOOL_EXTRA_FLAGS\"\nLIBTOOL_EXTRA_FLAGS=\"$LIBTOOL_EXTRA_FLAGS -version-info $SODIUM_LIBRARY_VERSION\"\n# Check whether --enable-soname-versions was given.\nif test \"${enable_soname_versions+set}\" = set; then :\n  enableval=$enable_soname_versions;\n        if test \"x$enableval\" = \"xno\"; then :\n\n          LIBTOOL_EXTRA_FLAGS=\"$LIBTOOL_OLD_FLAGS -avoid-version\"\n\nfi\n\n\nfi\n\n\ncase $host_os in #(\n  cygwin*|mingw*|msys|pw32*|cegcc*) :\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,--dynamicbase\" >&5\n$as_echo_n \"checking whether the linker accepts -Wl,--dynamicbase... \" >&6; }\nif ${ax_cv_check_ldflags___Wl___dynamicbase+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -Wl,--dynamicbase\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___Wl___dynamicbase=yes\nelse\n  ax_cv_check_ldflags___Wl___dynamicbase=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl___dynamicbase\" >&5\n$as_echo \"$ax_cv_check_ldflags___Wl___dynamicbase\" >&6; }\nif test \"x$ax_cv_check_ldflags___Wl___dynamicbase\" = xyes; then :\n  LDFLAGS=\"$LDFLAGS -Wl,--dynamicbase\"\nelse\n  :\nfi\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,--nxcompat\" >&5\n$as_echo_n \"checking whether the linker accepts -Wl,--nxcompat... \" >&6; }\nif ${ax_cv_check_ldflags___Wl___nxcompat+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -Wl,--nxcompat\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___Wl___nxcompat=yes\nelse\n  ax_cv_check_ldflags___Wl___nxcompat=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl___nxcompat\" >&5\n$as_echo \"$ax_cv_check_ldflags___Wl___nxcompat\" >&6; }\nif test \"x$ax_cv_check_ldflags___Wl___nxcompat\" = xyes; then :\n  LDFLAGS=\"$LDFLAGS -Wl,--nxcompat\"\nelse\n  :\nfi\n\n   ;; #(\n  *) :\n     ;;\nesac\n\nif test \"x$enable_ssp\" != \"xno\"; then :\n\n\ncase $host_os in #(\n  cygwin*|mingw*|msys|pw32*|cegcc*|*aix*|*sunos*|*solaris*) :\n      ;; #(\n  *) :\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstack-protector\" >&5\n$as_echo_n \"checking whether C compiler accepts -fstack-protector... \" >&6; }\nif ${ax_cv_check_cflags___fstack_protector+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -fstack-protector\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___fstack_protector=yes\nelse\n  ax_cv_check_cflags___fstack_protector=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fstack_protector\" >&5\n$as_echo \"$ax_cv_check_cflags___fstack_protector\" >&6; }\nif test \"x$ax_cv_check_cflags___fstack_protector\" = xyes; then :\n\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fstack-protector\" >&5\n$as_echo_n \"checking whether the linker accepts -fstack-protector... \" >&6; }\nif ${ax_cv_check_ldflags___fstack_protector+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -fstack-protector\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___fstack_protector=yes\nelse\n  ax_cv_check_ldflags___fstack_protector=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fstack_protector\" >&5\n$as_echo \"$ax_cv_check_ldflags___fstack_protector\" >&6; }\nif test \"x$ax_cv_check_ldflags___fstack_protector\" = xyes; then :\n  CFLAGS=\"$CFLAGS -fstack-protector\"\n\nelse\n  :\nfi\n\n\nelse\n  :\nfi\n\n   ;; #(\n  *) :\n     ;;\nesac\n\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Winit-self\" >&5\n$as_echo_n \"checking whether C compiler accepts -Winit-self... \" >&6; }\nif ${ax_cv_check_cflags___Winit_self+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -Winit-self\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___Winit_self=yes\nelse\n  ax_cv_check_cflags___Winit_self=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Winit_self\" >&5\n$as_echo \"$ax_cv_check_cflags___Winit_self\" >&6; }\nif test \"x$ax_cv_check_cflags___Winit_self\" = xyes; then :\n  CFLAGS=\"$CFLAGS -Winit-self\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wwrite-strings\" >&5\n$as_echo_n \"checking whether C compiler accepts -Wwrite-strings... \" >&6; }\nif ${ax_cv_check_cflags___Wwrite_strings+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -Wwrite-strings\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___Wwrite_strings=yes\nelse\n  ax_cv_check_cflags___Wwrite_strings=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wwrite_strings\" >&5\n$as_echo \"$ax_cv_check_cflags___Wwrite_strings\" >&6; }\nif test \"x$ax_cv_check_cflags___Wwrite_strings\" = xyes; then :\n  CFLAGS=\"$CFLAGS -Wwrite-strings\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wdiv-by-zero\" >&5\n$as_echo_n \"checking whether C compiler accepts -Wdiv-by-zero... \" >&6; }\nif ${ax_cv_check_cflags___Wdiv_by_zero+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -Wdiv-by-zero\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___Wdiv_by_zero=yes\nelse\n  ax_cv_check_cflags___Wdiv_by_zero=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wdiv_by_zero\" >&5\n$as_echo \"$ax_cv_check_cflags___Wdiv_by_zero\" >&6; }\nif test \"x$ax_cv_check_cflags___Wdiv_by_zero\" = xyes; then :\n  CFLAGS=\"$CFLAGS -Wdiv-by-zero\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -Wsometimes-uninitialized\" >&5\n$as_echo_n \"checking whether C compiler accepts -Wsometimes-uninitialized... \" >&6; }\nif ${ax_cv_check_cflags___Wsometimes_uninitialized+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -Wsometimes-uninitialized\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___Wsometimes_uninitialized=yes\nelse\n  ax_cv_check_cflags___Wsometimes_uninitialized=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___Wsometimes_uninitialized\" >&5\n$as_echo \"$ax_cv_check_cflags___Wsometimes_uninitialized\" >&6; }\nif test \"x$ax_cv_check_cflags___Wsometimes_uninitialized\" = xyes; then :\n  CFLAGS=\"$CFLAGS -Wsometimes-uninitialized\"\nelse\n  :\nfi\n\n\n\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wall\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wall\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wall... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wall\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wall\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wextra\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wextra\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wextra... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wextra\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wextra\"\nelse\n  :\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for clang\" >&5\n$as_echo_n \"checking for clang... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\n#ifndef __clang__\nbe sad\n#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n   as_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wno-unknown-warning-option\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wno-unknown-warning-option\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wno-unknown-warning-option... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wno-unknown-warning-option\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wno-unknown-warning-option\"\nelse\n  :\nfi\n\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wbad-function-cast\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wbad-function-cast\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wbad-function-cast... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wbad-function-cast\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wbad-function-cast\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wcast-align\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wcast-align\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wcast-align... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wcast-align\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wcast-align\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wcast-qual\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wcast-qual\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wcast-qual... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wcast-qual\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wcast-qual\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wchar-subscripts\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wchar-subscripts\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wchar-subscripts... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wchar-subscripts\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wchar-subscripts\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wcomment\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wcomment\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wcomment... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wcomment\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wcomment\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wfloat-equal\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wfloat-equal\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wfloat-equal... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wfloat-equal\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wfloat-equal\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wformat=2\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wformat=2\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wformat=2... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wformat=2\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wformat=2\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wimplicit\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wimplicit\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wimplicit... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wimplicit\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wimplicit\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wmissing-declarations\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wmissing-declarations\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wmissing-declarations... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wmissing-declarations\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wmissing-declarations\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wmissing-prototypes\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wmissing-prototypes\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wmissing-prototypes... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wmissing-prototypes\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wmissing-prototypes\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wnormalized=id\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wnormalized=id\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wnormalized=id... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wnormalized=id\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wnormalized=id\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Woverride-init\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Woverride-init\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Woverride-init... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Woverride-init\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Woverride-init\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wparentheses\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wparentheses\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wparentheses... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wparentheses\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wparentheses\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wpointer-arith\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wpointer-arith\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wpointer-arith... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wpointer-arith\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wpointer-arith\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wredundant-decls\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wredundant-decls\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wredundant-decls... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wredundant-decls\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wredundant-decls\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wstrict-prototypes\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wstrict-prototypes\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wstrict-prototypes... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wstrict-prototypes\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wstrict-prototypes\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wswitch-enum\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wswitch-enum\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wswitch-enum... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wswitch-enum\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wswitch-enum\"\nelse\n  :\nfi\n\nas_CACHEVAR=`$as_echo \"ax_cv_check_cflags__$CWFLAGS -Wvariable-decl\" | $as_tr_sh`\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CWFLAGS -Wvariable-decl\" >&5\n$as_echo_n \"checking whether C compiler accepts $CWFLAGS -Wvariable-decl... \" >&6; }\nif eval \\${$as_CACHEVAR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  $CWFLAGS -Wvariable-decl\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  eval \"$as_CACHEVAR=yes\"\nelse\n  eval \"$as_CACHEVAR=no\"\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\neval ac_res=\\$$as_CACHEVAR\n\t       { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_res\" >&5\n$as_echo \"$ac_res\" >&6; }\nif eval test \\\"x\\$\"$as_CACHEVAR\"\\\" = x\"yes\"; then :\n  CWFLAGS=\"$CWFLAGS -Wvariable-decl\"\nelse\n  :\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,-z,relro\" >&5\n$as_echo_n \"checking whether the linker accepts -Wl,-z,relro... \" >&6; }\nif ${ax_cv_check_ldflags___Wl__z_relro+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -Wl,-z,relro\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___Wl__z_relro=yes\nelse\n  ax_cv_check_ldflags___Wl__z_relro=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl__z_relro\" >&5\n$as_echo \"$ax_cv_check_ldflags___Wl__z_relro\" >&6; }\nif test \"x$ax_cv_check_ldflags___Wl__z_relro\" = xyes; then :\n  LDFLAGS=\"$LDFLAGS -Wl,-z,relro\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,-z,now\" >&5\n$as_echo_n \"checking whether the linker accepts -Wl,-z,now... \" >&6; }\nif ${ax_cv_check_ldflags___Wl__z_now+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -Wl,-z,now\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___Wl__z_now=yes\nelse\n  ax_cv_check_ldflags___Wl__z_now=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl__z_now\" >&5\n$as_echo \"$ax_cv_check_ldflags___Wl__z_now\" >&6; }\nif test \"x$ax_cv_check_ldflags___Wl__z_now\" = xyes; then :\n  LDFLAGS=\"$LDFLAGS -Wl,-z,now\"\nelse\n  :\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,-z,noexecstack\" >&5\n$as_echo_n \"checking whether the linker accepts -Wl,-z,noexecstack... \" >&6; }\nif ${ax_cv_check_ldflags___Wl__z_noexecstack+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS  -Wl,-z,noexecstack\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U];if (fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ax_cv_check_ldflags___Wl__z_noexecstack=yes\nelse\n  ax_cv_check_ldflags___Wl__z_noexecstack=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  LDFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl__z_noexecstack\" >&5\n$as_echo \"$ax_cv_check_ldflags___Wl__z_noexecstack\" >&6; }\nif test \"x$ax_cv_check_ldflags___Wl__z_noexecstack\" = xyes; then :\n  LDFLAGS=\"$LDFLAGS -Wl,-z,noexecstack\"\nelse\n  :\nfi\n\n\ncase `pwd` in\n  *\\ * | *\\\t*)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&5\n$as_echo \"$as_me: WARNING: Libtool does not cope well with whitespace in \\`pwd\\`\" >&2;} ;;\nesac\n\n\n\nmacro_version='2.4.2'\nmacro_revision='1.3337'\n\n\n\n\n\n\n\n\n\n\n\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\n\n# Backslashify metacharacters that are still active within\n# double-quoted strings.\nsed_quote_subst='s/\\([\"`$\\\\]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([\"`\\\\]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n\nECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to print strings\" >&5\n$as_echo_n \"checking how to print strings... \" >&6; }\n# Test print first, because it will be a builtin if present.\nif test \"X`( print -r -- -n ) 2>/dev/null`\" = X-n && \\\n   test \"X`print -r -- $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='print -r --'\nelif test \"X`printf %s $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='printf %s\\n'\nelse\n  # Use this function as a fallback that always works.\n  func_fallback_echo ()\n  {\n    eval 'cat <<_LTECHO_EOF\n$1\n_LTECHO_EOF'\n  }\n  ECHO='func_fallback_echo'\nfi\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"\"\n}\n\ncase \"$ECHO\" in\n  printf*) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: printf\" >&5\n$as_echo \"printf\" >&6; } ;;\n  print*) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: print -r\" >&5\n$as_echo \"print -r\" >&6; } ;;\n  *) { $as_echo \"$as_me:${as_lineno-$LINENO}: result: cat\" >&5\n$as_echo \"cat\" >&6; } ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output\" >&5\n$as_echo_n \"checking for a sed that does not truncate output... \" >&6; }\nif ${ac_cv_path_SED+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/\n     for ac_i in 1 2 3 4 5 6 7; do\n       ac_script=\"$ac_script$as_nl$ac_script\"\n     done\n     echo \"$ac_script\" 2>/dev/null | sed 99q >conftest.sed\n     { ac_script=; unset ac_script;}\n     if test -z \"$SED\"; then\n  ac_path_SED_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\ndo\n  IFS=$as_save_IFS\n  test -z \"$as_dir\" && as_dir=.\n    for ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_SED=\"$as_dir/$ac_prog$ac_exec_ext\"\n      as_fn_executable_p \"$ac_path_SED\" || continue\n# Check for GNU ac_path_SED and select it if it is found.\n  # Check for GNU $ac_path_SED\ncase `\"$ac_path_SED\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_SED=\"$ac_path_SED\" ac_path_SED_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 '' >> \"conftest.nl\"\n    \"$ac_path_SED\" -f conftest.sed < \"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_SED_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_SED=\"$ac_path_SED\"\n      ac_path_SED_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_SED_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_SED\"; then\n    as_fn_error $? \"no acceptable sed could be found in \\$PATH\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_SED=$SED\nfi\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED\" >&5\n$as_echo \"$ac_cv_path_SED\" >&6; }\n SED=\"$ac_cv_path_SED\"\n  rm -f conftest.sed\n\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for fgrep\" >&5\n$as_echo_n \"checking for fgrep... \" >&6; }\nif ${ac_cv_path_FGREP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1\n   then ac_cv_path_FGREP=\"$GREP -F\"\n   else\n     if test -z \"$FGREP\"; then\n  ac_path_FGREP_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 fgrep; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      ac_path_FGREP=\"$as_dir/$ac_prog$ac_exec_ext\"\n      as_fn_executable_p \"$ac_path_FGREP\" || continue\n# Check for GNU ac_path_FGREP and select it if it is found.\n  # Check for GNU $ac_path_FGREP\ncase `\"$ac_path_FGREP\" --version 2>&1` in\n*GNU*)\n  ac_cv_path_FGREP=\"$ac_path_FGREP\" ac_path_FGREP_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 'FGREP' >> \"conftest.nl\"\n    \"$ac_path_FGREP\" FGREP < \"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_FGREP_max-0}; then\n      # Best one so far, save it but keep looking for a better one\n      ac_cv_path_FGREP=\"$ac_path_FGREP\"\n      ac_path_FGREP_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_FGREP_found && break 3\n    done\n  done\n  done\nIFS=$as_save_IFS\n  if test -z \"$ac_cv_path_FGREP\"; then\n    as_fn_error $? \"no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin\" \"$LINENO\" 5\n  fi\nelse\n  ac_cv_path_FGREP=$FGREP\nfi\n\n   fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP\" >&5\n$as_echo \"$ac_cv_path_FGREP\" >&6; }\n FGREP=\"$ac_cv_path_FGREP\"\n\n\ntest -z \"$GREP\" && GREP=grep\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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\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 $CC\" >&5\n$as_echo_n \"checking for ld used by $CC... \" >&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    [\\\\/]* | ?:[\\\\/]*)\n      re_direlt='/[^/][^/]*/\\.\\./'\n      # Canonicalize the pathname 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 ${lt_cv_path_LD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi\nfi\n\nLD=\"$lt_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 ${lt_cv_prog_gnu_ld+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  # I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld\" >&5\n$as_echo \"$lt_cv_prog_gnu_ld\" >&6; }\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)\" >&5\n$as_echo_n \"checking for BSD- or MS-compatible name lister (nm)... \" >&6; }\nif ${lt_cv_path_NM+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM\" >&5\n$as_echo \"$lt_cv_path_NM\" >&6; }\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  if test -n \"$DUMPBIN\"; then :\n    # Let the user override the test.\n  else\n    if test -n \"$ac_tool_prefix\"; then\n  for ac_prog in dumpbin \"link -dump\"\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 ${ac_cv_prog_DUMPBIN+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DUMPBIN\"; then\n  ac_cv_prog_DUMPBIN=\"$DUMPBIN\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DUMPBIN=\"$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\nDUMPBIN=$ac_cv_prog_DUMPBIN\nif test -n \"$DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DUMPBIN\" >&5\n$as_echo \"$DUMPBIN\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n    test -n \"$DUMPBIN\" && break\n  done\nfi\nif test -z \"$DUMPBIN\"; then\n  ac_ct_DUMPBIN=$DUMPBIN\n  for ac_prog in dumpbin \"link -dump\"\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 ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DUMPBIN\"; then\n  ac_cv_prog_ac_ct_DUMPBIN=\"$ac_ct_DUMPBIN\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DUMPBIN=\"$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN\nif test -n \"$ac_ct_DUMPBIN\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN\" >&5\n$as_echo \"$ac_ct_DUMPBIN\" >&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_DUMPBIN\" && break\ndone\n\n  if test \"x$ac_ct_DUMPBIN\" = x; then\n    DUMPBIN=\":\"\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    DUMPBIN=$ac_ct_DUMPBIN\n  fi\nfi\n\n    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in\n    *COFF*)\n      DUMPBIN=\"$DUMPBIN -symbols\"\n      ;;\n    *)\n      DUMPBIN=:\n      ;;\n    esac\n  fi\n\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface\" >&5\n$as_echo_n \"checking the name lister ($NM) interface... \" >&6; }\nif ${lt_cv_nm_interface+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:$LINENO: $ac_compile\\\"\" >&5)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:$LINENO: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&5)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&5\n  (eval echo \"\\\"\\$as_me:$LINENO: output\\\"\" >&5)\n  cat conftest.out >&5\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface\" >&5\n$as_echo \"$lt_cv_nm_interface\" >&6; }\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether ln -s works\" >&5\n$as_echo_n \"checking whether ln -s works... \" >&6; }\nLN_S=$as_ln_s\nif test \"$LN_S\" = \"ln -s\"; 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, using $LN_S\" >&5\n$as_echo \"no, using $LN_S\" >&6; }\nfi\n\n# find the maximum length of command line arguments\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments\" >&5\n$as_echo_n \"checking the maximum length of command line arguments... \" >&6; }\nif ${lt_cv_sys_max_cmd_len+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n    i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  mint*)\n    # On MiNT this can take a long time and run out of memory.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  os2*)\n    # The test takes a long time on OS/2.\n    lt_cv_sys_max_cmd_len=8192\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[\t ]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\" && \\\n\ttest undefined != \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`env echo \"$teststring$teststring\" 2>/dev/null` \\\n\t         = \"X$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n\nfi\n\nif test -n $lt_cv_sys_max_cmd_len ; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len\" >&5\n$as_echo \"$lt_cv_sys_max_cmd_len\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: none\" >&5\n$as_echo \"none\" >&6; }\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n\n\n\n\n\n\n: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs\" >&5\n$as_echo_n \"checking whether the shell understands some XSI constructs... \" >&6; }\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,b/c, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $xsi_shell\" >&5\n$as_echo \"$xsi_shell\" >&6; }\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the shell understands \\\"+=\\\"\" >&5\n$as_echo_n \"checking whether the shell understands \\\"+=\\\"... \" >&6; }\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$1+=\\$2\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_shell_append\" >&5\n$as_echo \"$lt_shell_append\" >&6; }\n\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n\n\n\n\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format\" >&5\n$as_echo_n \"checking how to convert $build file names to $host format... \" >&6; }\nif ${lt_cv_to_host_file_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32\n        ;;\n    esac\n    ;;\n  *-*-cygwin* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_noop\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin\n        ;;\n    esac\n    ;;\n  * ) # unhandled hosts (and \"normal\" native builds)\n    lt_cv_to_host_file_cmd=func_convert_file_noop\n    ;;\nesac\n\nfi\n\nto_host_file_cmd=$lt_cv_to_host_file_cmd\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd\" >&5\n$as_echo \"$lt_cv_to_host_file_cmd\" >&6; }\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format\" >&5\n$as_echo_n \"checking how to convert $build file names to toolchain format... \" >&6; }\nif ${lt_cv_to_tool_file_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  #assume ordinary cross tools, or native build.\nlt_cv_to_tool_file_cmd=func_convert_file_noop\ncase $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32\n        ;;\n    esac\n    ;;\nesac\n\nfi\n\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd\" >&5\n$as_echo \"$lt_cv_to_tool_file_cmd\" >&6; }\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files\" >&5\n$as_echo_n \"checking for $LD option to reload object files... \" >&6; }\nif ${lt_cv_ld_reload_flag+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_reload_flag='-r'\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag\" >&5\n$as_echo \"$lt_cv_ld_reload_flag\" >&6; }\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\n    if test \"$GCC\" != yes; then\n      reload_cmds=false\n    fi\n    ;;\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}objdump\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}objdump; 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 ${ac_cv_prog_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OBJDUMP\"; then\n  ac_cv_prog_OBJDUMP=\"$OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OBJDUMP=\"${ac_tool_prefix}objdump\"\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\nOBJDUMP=$ac_cv_prog_OBJDUMP\nif test -n \"$OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OBJDUMP\" >&5\n$as_echo \"$OBJDUMP\" >&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_OBJDUMP\"; then\n  ac_ct_OBJDUMP=$OBJDUMP\n  # Extract the first word of \"objdump\", so it can be a program name with args.\nset dummy objdump; 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 ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OBJDUMP\"; then\n  ac_cv_prog_ac_ct_OBJDUMP=\"$ac_ct_OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OBJDUMP=\"objdump\"\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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP\nif test -n \"$ac_ct_OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP\" >&5\n$as_echo \"$ac_ct_OBJDUMP\" >&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_OBJDUMP\" = x; then\n    OBJDUMP=\"false\"\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    OBJDUMP=$ac_ct_OBJDUMP\n  fi\nelse\n  OBJDUMP=\"$ac_cv_prog_OBJDUMP\"\nfi\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries\" >&5\n$as_echo_n \"checking how to recognize dependent libraries... \" >&6; }\nif ${lt_cv_deplibs_check_method+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[4-9]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[45]*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.\n  if ( test \"$lt_cv_nm_interface\" = \"BSD nm\" && file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    # Keep this pattern in sync with the one in func_win32_libid.\n    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc*)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\nhaiku*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\\.[0-9]'\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\\.[0-9]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[3-9]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\\.so\\.[0-9]+\\.[0-9]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method\" >&5\n$as_echo \"$lt_cv_deplibs_check_method\" >&6; }\n\nfile_magic_glob=\nwant_nocaseglob=no\nif test \"$build\" = \"$host\"; then\n  case $host_os in\n  mingw* | pw32*)\n    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then\n      want_nocaseglob=yes\n    else\n      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e \"s/\\(..\\)/s\\/[\\1]\\/[\\1]\\/g;/g\"`\n    fi\n    ;;\n  esac\nfi\n\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dlltool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dlltool; 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 ${ac_cv_prog_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DLLTOOL\"; then\n  ac_cv_prog_DLLTOOL=\"$DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DLLTOOL=\"${ac_tool_prefix}dlltool\"\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\nDLLTOOL=$ac_cv_prog_DLLTOOL\nif test -n \"$DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DLLTOOL\" >&5\n$as_echo \"$DLLTOOL\" >&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_DLLTOOL\"; then\n  ac_ct_DLLTOOL=$DLLTOOL\n  # Extract the first word of \"dlltool\", so it can be a program name with args.\nset dummy dlltool; 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 ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DLLTOOL\"; then\n  ac_cv_prog_ac_ct_DLLTOOL=\"$ac_ct_DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DLLTOOL=\"dlltool\"\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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL\nif test -n \"$ac_ct_DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL\" >&5\n$as_echo \"$ac_ct_DLLTOOL\" >&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_DLLTOOL\" = x; then\n    DLLTOOL=\"false\"\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    DLLTOOL=$ac_ct_DLLTOOL\n  fi\nelse\n  DLLTOOL=\"$ac_cv_prog_DLLTOOL\"\nfi\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries\" >&5\n$as_echo_n \"checking how to associate runtime and link libraries... \" >&6; }\nif ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_sharedlib_from_linklib_cmd='unknown'\n\ncase $host_os in\ncygwin* | mingw* | pw32* | cegcc*)\n  # two different shell functions defined in ltmain.sh\n  # decide which to use based on capabilities of $DLLTOOL\n  case `$DLLTOOL --help 2>&1` in\n  *--identify-strict*)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib\n    ;;\n  *)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback\n    ;;\n  esac\n  ;;\n*)\n  # fallback: assume linklib IS sharedlib\n  lt_cv_sharedlib_from_linklib_cmd=\"$ECHO\"\n  ;;\nesac\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd\" >&5\n$as_echo \"$lt_cv_sharedlib_from_linklib_cmd\" >&6; }\nsharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd\ntest -z \"$sharedlib_from_linklib_cmd\" && sharedlib_from_linklib_cmd=$ECHO\n\n\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  for ac_prog in ar\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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_AR=\"$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\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    test -n \"$AR\" && break\n  done\nfi\nif test -z \"$AR\"; then\n  ac_ct_AR=$AR\n  for ac_prog in ar\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 ${ac_cv_prog_ac_ct_AR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_AR=\"$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_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR\" >&5\n$as_echo \"$ac_ct_AR\" >&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_AR\" && break\ndone\n\n  if test \"x$ac_ct_AR\" = x; then\n    AR=\"false\"\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    AR=$ac_ct_AR\n  fi\nfi\n\n: ${AR=ar}\n: ${AR_FLAGS=cru}\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support\" >&5\n$as_echo_n \"checking for archiver @FILE support... \" >&6; }\nif ${lt_cv_ar_at_file+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ar_at_file=no\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  echo conftest.$ac_objext > conftest.lst\n      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'\n      { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$lt_ar_try\\\"\"; } >&5\n  (eval $lt_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n      if test \"$ac_status\" -eq 0; then\n\t# Ensure the archiver fails upon bogus file names.\n\trm -f conftest.$ac_objext libconftest.a\n\t{ { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$lt_ar_try\\\"\"; } >&5\n  (eval $lt_ar_try) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n\tif test \"$ac_status\" -ne 0; then\n          lt_cv_ar_at_file=@\n        fi\n      fi\n      rm -f conftest.* libconftest.a\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file\" >&5\n$as_echo \"$lt_cv_ar_at_file\" >&6; }\n\nif test \"x$lt_cv_ar_at_file\" = xno; then\n  archiver_list_spec=\nelse\n  archiver_list_spec=$lt_cv_ar_at_file\nfi\n\n\n\n\n\n\n\nif 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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p \"$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\ntest -z \"$STRIP\" && STRIP=:\n\n\n\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 ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p \"$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 ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p \"$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\ntest -z \"$RANLIB\" && RANLIB=:\n\n\n\n\n\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$tool_oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$tool_oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$tool_oldlib\"\nfi\n\ncase $host_os in\n  darwin*)\n    lock_old_archive_extraction=yes ;;\n  *)\n    lock_old_archive_extraction=no ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object\" >&5\n$as_echo_n \"checking command to parse $NM output from $compiler object... \" >&6; }\nif ${lt_cv_sys_global_symbol_pipe+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[BCDEGRST]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([_A-Za-z][_A-Za-z0-9]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[BCDT]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[ABCDGISTW]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[ABCDEGRST]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[BCDEGRST]'\n  ;;\nosf*)\n  symcode='[BCDEGQRST]'\n  ;;\nsolaris*)\n  symcode='[BDRT]'\n  ;;\nsco3.2v5*)\n  symcode='[DT]'\n  ;;\nsysv4.2uw2*)\n  symcode='[DT]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[ABDT]'\n  ;;\nsysv4)\n  symcode='[DFNSTU]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[ABCDGIRSTW]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([^ ]*\\)[ ]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([^ ]*\\)[ ]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([^ ]*\\) \\(lib[^ ]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([^ ]*\\) \\([^ ]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK '\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[\t ]\\($symcode$symcode*\\)[\t ][\t ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n  lt_cv_sys_global_symbol_pipe=\"$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist\\\"\"; } >&5\n  (eval $NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; } && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT_DLSYM_CONST\n#else\n# define LT_DLSYM_CONST const\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nLT_DLSYM_CONST struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_globsym_save_LIBS=$LIBS\n\t  lt_globsym_save_CFLAGS=$CFLAGS\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$lt_prog_compiler_no_builtin_flag\"\n\t  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=$lt_globsym_save_LIBS\n\t  CFLAGS=$lt_globsym_save_CFLAGS\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&5\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&5\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&5\n    fi\n  else\n    echo \"$progname: failed program was:\" >&5\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n\nfi\n\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: failed\" >&5\n$as_echo \"failed\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ok\" >&5\n$as_echo \"ok\" >&6; }\nfi\n\n# Response file support.\nif test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n  nm_file_list_spec='@'\nelif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then\n  nm_file_list_spec='@'\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for sysroot\" >&5\n$as_echo_n \"checking for sysroot... \" >&6; }\n\n# Check whether --with-sysroot was given.\nif test \"${with_sysroot+set}\" = set; then :\n  withval=$with_sysroot;\nelse\n  with_sysroot=no\nfi\n\n\nlt_sysroot=\ncase ${with_sysroot} in #(\n yes)\n   if test \"$GCC\" = yes; then\n     lt_sysroot=`$CC --print-sysroot 2>/dev/null`\n   fi\n   ;; #(\n /*)\n   lt_sysroot=`echo \"$with_sysroot\" | sed -e \"$sed_quote_subst\"`\n   ;; #(\n no|'')\n   ;; #(\n *)\n   { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}\" >&5\n$as_echo \"${with_sysroot}\" >&6; }\n   as_fn_error $? \"The sysroot must be an absolute path.\" \"$LINENO\" 5\n   ;;\nesac\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}\" >&5\n$as_echo \"${lt_sysroot:-no}\" >&6; }\n\n\n\n\n\n# Check whether --enable-libtool-lock was given.\nif test \"${enable_libtool_lock+set}\" = set; then :\n  enableval=$enable_libtool_lock;\nfi\n\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '#line '$LINENO' \"configure\"' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    case `/usr/bin/file conftest.o` in\n\t      *x86-64*)\n\t\tLD=\"${LD-ld} -m elf32_x86_64\"\n\t\t;;\n\t      *)\n\t\tLD=\"${LD-ld} -m elf_i386\"\n\t\t;;\n\t    esac\n\t    ;;\n\t  powerpc64le-*)\n\t    LD=\"${LD-ld} -m elf32lppclinux\"\n\t    ;;\n\t  powerpc64-*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  powerpcle-*)\n\t    LD=\"${LD-ld} -m elf64lppc\"\n\t    ;;\n\t  powerpc-*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf\" >&5\n$as_echo_n \"checking whether the C compiler needs -belf... \" >&6; }\nif ${lt_cv_cc_needs_belf+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_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     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_link \"$LINENO\"; then :\n  lt_cv_cc_needs_belf=yes\nelse\n  lt_cv_cc_needs_belf=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n     ac_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\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf\" >&5\n$as_echo \"$lt_cv_cc_needs_belf\" >&6; }\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\n*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*)\n        case $host in\n        i?86-*-solaris*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        sparc*-*-solaris*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n        esac\n        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.\n        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then\n          LD=\"${LD-ld}_sol2\"\n        fi\n        ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}mt\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}mt; 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 ${ac_cv_prog_MANIFEST_TOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$MANIFEST_TOOL\"; then\n  ac_cv_prog_MANIFEST_TOOL=\"$MANIFEST_TOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_MANIFEST_TOOL=\"${ac_tool_prefix}mt\"\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\nMANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL\nif test -n \"$MANIFEST_TOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL\" >&5\n$as_echo \"$MANIFEST_TOOL\" >&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_MANIFEST_TOOL\"; then\n  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL\n  # Extract the first word of \"mt\", so it can be a program name with args.\nset dummy mt; 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 ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_MANIFEST_TOOL\"; then\n  ac_cv_prog_ac_ct_MANIFEST_TOOL=\"$ac_ct_MANIFEST_TOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_MANIFEST_TOOL=\"mt\"\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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL\nif test -n \"$ac_ct_MANIFEST_TOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL\" >&5\n$as_echo \"$ac_ct_MANIFEST_TOOL\" >&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_MANIFEST_TOOL\" = x; then\n    MANIFEST_TOOL=\":\"\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    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL\n  fi\nelse\n  MANIFEST_TOOL=\"$ac_cv_prog_MANIFEST_TOOL\"\nfi\n\ntest -z \"$MANIFEST_TOOL\" && MANIFEST_TOOL=mt\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool\" >&5\n$as_echo_n \"checking if $MANIFEST_TOOL is a manifest tool... \" >&6; }\nif ${lt_cv_path_mainfest_tool+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_path_mainfest_tool=no\n  echo \"$as_me:$LINENO: $MANIFEST_TOOL '-?'\" >&5\n  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out\n  cat conftest.err >&5\n  if $GREP 'Manifest Tool' conftest.out > /dev/null; then\n    lt_cv_path_mainfest_tool=yes\n  fi\n  rm -f conftest*\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool\" >&5\n$as_echo \"$lt_cv_path_mainfest_tool\" >&6; }\nif test \"x$lt_cv_path_mainfest_tool\" != xyes; then\n  MANIFEST_TOOL=:\nfi\n\n\n\n\n\n\n  case $host_os in\n    rhapsody* | darwin*)\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dsymutil\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dsymutil; 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 ${ac_cv_prog_DSYMUTIL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DSYMUTIL\"; then\n  ac_cv_prog_DSYMUTIL=\"$DSYMUTIL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DSYMUTIL=\"${ac_tool_prefix}dsymutil\"\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\nDSYMUTIL=$ac_cv_prog_DSYMUTIL\nif test -n \"$DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL\" >&5\n$as_echo \"$DSYMUTIL\" >&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_DSYMUTIL\"; then\n  ac_ct_DSYMUTIL=$DSYMUTIL\n  # Extract the first word of \"dsymutil\", so it can be a program name with args.\nset dummy dsymutil; 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 ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DSYMUTIL\"; then\n  ac_cv_prog_ac_ct_DSYMUTIL=\"$ac_ct_DSYMUTIL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DSYMUTIL=\"dsymutil\"\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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL\nif test -n \"$ac_ct_DSYMUTIL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL\" >&5\n$as_echo \"$ac_ct_DSYMUTIL\" >&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_DSYMUTIL\" = x; then\n    DSYMUTIL=\":\"\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    DSYMUTIL=$ac_ct_DSYMUTIL\n  fi\nelse\n  DSYMUTIL=\"$ac_cv_prog_DSYMUTIL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}nmedit\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}nmedit; 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 ${ac_cv_prog_NMEDIT+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$NMEDIT\"; then\n  ac_cv_prog_NMEDIT=\"$NMEDIT\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_NMEDIT=\"${ac_tool_prefix}nmedit\"\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\nNMEDIT=$ac_cv_prog_NMEDIT\nif test -n \"$NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $NMEDIT\" >&5\n$as_echo \"$NMEDIT\" >&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_NMEDIT\"; then\n  ac_ct_NMEDIT=$NMEDIT\n  # Extract the first word of \"nmedit\", so it can be a program name with args.\nset dummy nmedit; 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 ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_NMEDIT\"; then\n  ac_cv_prog_ac_ct_NMEDIT=\"$ac_ct_NMEDIT\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_NMEDIT=\"nmedit\"\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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT\nif test -n \"$ac_ct_NMEDIT\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT\" >&5\n$as_echo \"$ac_ct_NMEDIT\" >&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_NMEDIT\" = x; then\n    NMEDIT=\":\"\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    NMEDIT=$ac_ct_NMEDIT\n  fi\nelse\n  NMEDIT=\"$ac_cv_prog_NMEDIT\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}lipo\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}lipo; 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 ${ac_cv_prog_LIPO+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$LIPO\"; then\n  ac_cv_prog_LIPO=\"$LIPO\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_LIPO=\"${ac_tool_prefix}lipo\"\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\nLIPO=$ac_cv_prog_LIPO\nif test -n \"$LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $LIPO\" >&5\n$as_echo \"$LIPO\" >&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_LIPO\"; then\n  ac_ct_LIPO=$LIPO\n  # Extract the first word of \"lipo\", so it can be a program name with args.\nset dummy lipo; 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 ${ac_cv_prog_ac_ct_LIPO+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_LIPO\"; then\n  ac_cv_prog_ac_ct_LIPO=\"$ac_ct_LIPO\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_LIPO=\"lipo\"\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_LIPO=$ac_cv_prog_ac_ct_LIPO\nif test -n \"$ac_ct_LIPO\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO\" >&5\n$as_echo \"$ac_ct_LIPO\" >&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_LIPO\" = x; then\n    LIPO=\":\"\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    LIPO=$ac_ct_LIPO\n  fi\nelse\n  LIPO=\"$ac_cv_prog_LIPO\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool; 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 ${ac_cv_prog_OTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL\"; then\n  ac_cv_prog_OTOOL=\"$OTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OTOOL=\"${ac_tool_prefix}otool\"\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\nOTOOL=$ac_cv_prog_OTOOL\nif test -n \"$OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL\" >&5\n$as_echo \"$OTOOL\" >&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_OTOOL\"; then\n  ac_ct_OTOOL=$OTOOL\n  # Extract the first word of \"otool\", so it can be a program name with args.\nset dummy otool; 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 ${ac_cv_prog_ac_ct_OTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL\"; then\n  ac_cv_prog_ac_ct_OTOOL=\"$ac_ct_OTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OTOOL=\"otool\"\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_OTOOL=$ac_cv_prog_ac_ct_OTOOL\nif test -n \"$ac_ct_OTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL\" >&5\n$as_echo \"$ac_ct_OTOOL\" >&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_OTOOL\" = x; then\n    OTOOL=\":\"\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    OTOOL=$ac_ct_OTOOL\n  fi\nelse\n  OTOOL=\"$ac_cv_prog_OTOOL\"\nfi\n\n    if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}otool64\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}otool64; 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 ${ac_cv_prog_OTOOL64+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OTOOL64\"; then\n  ac_cv_prog_OTOOL64=\"$OTOOL64\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OTOOL64=\"${ac_tool_prefix}otool64\"\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\nOTOOL64=$ac_cv_prog_OTOOL64\nif test -n \"$OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OTOOL64\" >&5\n$as_echo \"$OTOOL64\" >&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_OTOOL64\"; then\n  ac_ct_OTOOL64=$OTOOL64\n  # Extract the first word of \"otool64\", so it can be a program name with args.\nset dummy otool64; 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 ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OTOOL64\"; then\n  ac_cv_prog_ac_ct_OTOOL64=\"$ac_ct_OTOOL64\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OTOOL64=\"otool64\"\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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64\nif test -n \"$ac_ct_OTOOL64\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64\" >&5\n$as_echo \"$ac_ct_OTOOL64\" >&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_OTOOL64\" = x; then\n    OTOOL64=\":\"\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    OTOOL64=$ac_ct_OTOOL64\n  fi\nelse\n  OTOOL64=\"$ac_cv_prog_OTOOL64\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag\" >&5\n$as_echo_n \"checking for -single_module linker flag... \" >&6; }\nif ${lt_cv_apple_cc_single_mod+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&5\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\t# If there is a non-empty error log, and \"single_module\"\n\t# appears in it, assume the flag caused a linker warning\n        if test -s conftest.err && $GREP single_module conftest.err; then\n\t  cat conftest.err >&5\n\t# Otherwise, if the output was created with a 0 exit code from\n\t# the compiler, it worked.\n\telif test -f libconftest.dylib && test $_lt_result -eq 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&5\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod\" >&5\n$as_echo \"$lt_cv_apple_cc_single_mod\" >&6; }\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag\" >&5\n$as_echo_n \"checking for -exported_symbols_list linker flag... \" >&6; }\nif ${lt_cv_ld_exported_symbols_list+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\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_link \"$LINENO\"; then :\n  lt_cv_ld_exported_symbols_list=yes\nelse\n  lt_cv_ld_exported_symbols_list=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\tLDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list\" >&5\n$as_echo \"$lt_cv_ld_exported_symbols_list\" >&6; }\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag\" >&5\n$as_echo_n \"checking for -force_load linker flag... \" >&6; }\nif ${lt_cv_ld_force_load+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_ld_force_load=no\n      cat > conftest.c << _LT_EOF\nint forced_loaded() { return 2;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS -c -o conftest.o conftest.c\" >&5\n      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5\n      echo \"$AR cru libconftest.a conftest.o\" >&5\n      $AR cru libconftest.a conftest.o 2>&5\n      echo \"$RANLIB libconftest.a\" >&5\n      $RANLIB libconftest.a 2>&5\n      cat > conftest.c << _LT_EOF\nint main() { return 0;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a\" >&5\n      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err\n      _lt_result=$?\n      if test -s conftest.err && $GREP force_load conftest.err; then\n\tcat conftest.err >&5\n      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then\n\tlt_cv_ld_force_load=yes\n      else\n\tcat conftest.err >&5\n      fi\n        rm -f conftest.err libconftest.a conftest conftest.c\n        rm -rf conftest.dSYM\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load\" >&5\n$as_echo \"$lt_cv_ld_force_load\" >&6; }\n    case $host_os in\n    rhapsody* | darwin1.[012])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[91]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[012]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\" && test \"$lt_cv_ld_force_load\" = \"no\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\n\nfor ac_header in dlfcn.h\ndo :\n  ac_fn_c_check_header_compile \"$LINENO\" \"dlfcn.h\" \"ac_cv_header_dlfcn_h\" \"$ac_includes_default\n\"\nif test \"x$ac_cv_header_dlfcn_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_DLFCN_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n\n\n# Set options\n\n\n\n        enable_dlopen=no\n\n\n  enable_win32_dll=no\n\n\n            # Check whether --enable-shared was given.\nif test \"${enable_shared+set}\" = set; then :\n  enableval=$enable_shared; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_shared=yes\nfi\n\n\n\n\n\n\n\n\n\n  # Check whether --enable-static was given.\nif test \"${enable_static+set}\" = set; then :\n  enableval=$enable_static; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_static=yes\nfi\n\n\n\n\n\n\n\n\n\n\n# Check whether --with-pic was given.\nif test \"${with_pic+set}\" = set; then :\n  withval=$with_pic; lt_p=${PACKAGE-default}\n    case $withval in\n    yes|no) pic_mode=$withval ;;\n    *)\n      pic_mode=default\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for lt_pkg in $withval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$lt_pkg\" = \"X$lt_p\"; then\n\t  pic_mode=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  pic_mode=default\nfi\n\n\ntest -z \"$pic_mode\" && pic_mode=default\n\n\n\n\n\n\n\n  # Check whether --enable-fast-install was given.\nif test \"${enable_fast_install+set}\" = set; then :\n  enableval=$enable_fast_install; p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac\nelse\n  enable_fast_install=yes\nfi\n\n\n\n\n\n\n\n\n\n\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for objdir\" >&5\n$as_echo_n \"checking for objdir... \" >&6; }\nif ${lt_cv_objdir+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir\" >&5\n$as_echo \"$lt_cv_objdir\" >&6; }\nobjdir=$lt_cv_objdir\n\n\n\n\n\ncat >>confdefs.h <<_ACEOF\n#define LT_OBJDIR \"$lt_cv_objdir/\"\n_ACEOF\n\n\n\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\nfor cc_temp in $compiler\"\"; do\n  case $cc_temp in\n    compile | *[\\\\/]compile | ccache | *[\\\\/]ccache ) ;;\n    distcc | *[\\\\/]distcc | purify | *[\\\\/]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"$cc_temp\" | $SED \"s%.*/%%; s%^$host_alias-%%\"`\n\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file\" >&5\n$as_echo_n \"checking for ${ac_tool_prefix}file... \" >&6; }\nif ${lt_cv_path_MAGIC_CMD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/${ac_tool_prefix}file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/${ac_tool_prefix}file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n\n\n\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for file\" >&5\n$as_echo_n \"checking for file... \" >&6; }\nif ${lt_cv_path_MAGIC_CMD+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  case $MAGIC_CMD in\n[\\\\/*] |  ?:[\\\\/]*)\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  ac_dummy=\"/usr/bin$PATH_SEPARATOR$PATH\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/file; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/file\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac\nfi\n\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD\" >&5\n$as_echo \"$MAGIC_CMD\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\n\n\n  else\n    MAGIC_CMD=:\n  fi\nfi\n\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\n\nlt_save_CC=\"$CC\"\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# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\nobjext=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n\n\n\n\n\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n\n\n## CAVEAT EMPTOR:\n## There is no encapsulation within the following macros, do not change\n## the running order or otherwise move them around unless you know exactly\n## what you are doing...\nif test -n \"$compiler\"; then\n\nlt_prog_compiler_no_builtin_flag=\n\nif test \"$GCC\" = yes; then\n  case $cc_basename in\n  nvcc*)\n    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;\n  *)\n    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;\n  esac\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions\" >&5\n$as_echo_n \"checking if $compiler supports -fno-rtti -fno-exceptions... \" >&6; }\nif ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_rtti_exceptions=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"-fno-rtti -fno-exceptions\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_rtti_exceptions=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions\" >&5\n$as_echo \"$lt_cv_prog_compiler_rtti_exceptions\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_rtti_exceptions\" = xyes; then\n    lt_prog_compiler_no_builtin_flag=\"$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions\"\nelse\n    :\nfi\n\nfi\n\n\n\n\n\n\n  lt_prog_compiler_wl=\nlt_prog_compiler_pic=\nlt_prog_compiler_static=\n\n\n  if test \"$GCC\" = yes; then\n    lt_prog_compiler_wl='-Wl,'\n    lt_prog_compiler_static='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            lt_prog_compiler_pic='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      lt_prog_compiler_pic='-fno-common'\n      ;;\n\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      lt_prog_compiler_static=\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[3-9]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      lt_prog_compiler_can_build_shared=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tlt_prog_compiler_pic=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      lt_prog_compiler_pic='-fPIC'\n      ;;\n    esac\n\n    case $cc_basename in\n    nvcc*) # Cuda Compiler Driver 2.2\n      lt_prog_compiler_wl='-Xlinker '\n      if test -n \"$lt_prog_compiler_pic\"; then\n        lt_prog_compiler_pic=\"-Xcompiler $lt_prog_compiler_pic\"\n      fi\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      lt_prog_compiler_wl='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\tlt_prog_compiler_static='-Bstatic'\n      else\n\tlt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      lt_prog_compiler_pic='-DDLL_EXPORT'\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\tlt_prog_compiler_pic='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      lt_prog_compiler_static='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      lt_prog_compiler_wl='-Wl,'\n      # PIC (with -KPIC) is the default.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-KPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fPIC'\n\tlt_prog_compiler_static='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='--shared'\n\tlt_prog_compiler_static='--static'\n\t;;\n      nagfor*)\n\t# NAG Fortran compiler\n\tlt_prog_compiler_wl='-Wl,-Wl,,'\n\tlt_prog_compiler_pic='-PIC'\n\tlt_prog_compiler_static='-Bstatic'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-fpic'\n\tlt_prog_compiler_static='-Bstatic'\n        ;;\n      ccc*)\n        lt_prog_compiler_wl='-Wl,'\n        # All Alpha code is PIC.\n        lt_prog_compiler_static='-non_shared'\n        ;;\n      xl* | bgxl* | bgf* | mpixl*)\n\t# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene\n\tlt_prog_compiler_wl='-Wl,'\n\tlt_prog_compiler_pic='-qpic'\n\tlt_prog_compiler_static='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [1-7].* | *Sun*Fortran*\\ 8.[0-3]*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl=''\n\t  ;;\n\t*Sun\\ F* | *Sun*Fortran*)\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl='-Qoption ld '\n\t  ;;\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  lt_prog_compiler_pic='-KPIC'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  lt_prog_compiler_wl='-Wl,'\n\t  ;;\n        *Intel*\\ [CF]*Compiler*)\n\t  lt_prog_compiler_wl='-Wl,'\n\t  lt_prog_compiler_pic='-fPIC'\n\t  lt_prog_compiler_static='-static'\n\t  ;;\n\t*Portland\\ Group*)\n\t  lt_prog_compiler_wl='-Wl,'\n\t  lt_prog_compiler_pic='-fpic'\n\t  lt_prog_compiler_static='-Bstatic'\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      lt_prog_compiler_pic='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      lt_prog_compiler_wl='-Wl,'\n      # All OSF/1 code is PIC.\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    rdos*)\n      lt_prog_compiler_static='-non_shared'\n      ;;\n\n    solaris*)\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)\n\tlt_prog_compiler_wl='-Qoption ld ';;\n      *)\n\tlt_prog_compiler_wl='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      lt_prog_compiler_wl='-Qoption ld '\n      lt_prog_compiler_pic='-PIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\tlt_prog_compiler_pic='-Kconform_pic'\n\tlt_prog_compiler_static='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_pic='-KPIC'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    unicos*)\n      lt_prog_compiler_wl='-Wl,'\n      lt_prog_compiler_can_build_shared=no\n      ;;\n\n    uts4*)\n      lt_prog_compiler_pic='-pic'\n      lt_prog_compiler_static='-Bstatic'\n      ;;\n\n    *)\n      lt_prog_compiler_can_build_shared=no\n      ;;\n    esac\n  fi\n\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    lt_prog_compiler_pic=\n    ;;\n  *)\n    lt_prog_compiler_pic=\"$lt_prog_compiler_pic -DPIC\"\n    ;;\nesac\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC\" >&5\n$as_echo_n \"checking for $compiler option to produce PIC... \" >&6; }\nif ${lt_cv_prog_compiler_pic+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic\" >&5\n$as_echo \"$lt_cv_prog_compiler_pic\" >&6; }\nlt_prog_compiler_pic=$lt_cv_prog_compiler_pic\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$lt_prog_compiler_pic\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works\" >&5\n$as_echo_n \"checking if $compiler PIC flag $lt_prog_compiler_pic works... \" >&6; }\nif ${lt_cv_prog_compiler_pic_works+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_pic_works=no\n   ac_outfile=conftest.$ac_objext\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$lt_prog_compiler_pic -DPIC\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_pic_works=yes\n     fi\n   fi\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_pic_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_pic_works\" = xyes; then\n    case $lt_prog_compiler_pic in\n     \"\" | \" \"*) ;;\n     *) lt_prog_compiler_pic=\" $lt_prog_compiler_pic\" ;;\n     esac\nelse\n    lt_prog_compiler_pic=\n     lt_prog_compiler_can_build_shared=no\nfi\n\nfi\n\n\n\n\n\n\n\n\n\n\n\n#\n# Check to make sure the static flag actually works.\n#\nwl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\\\"$lt_prog_compiler_static\\\"\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works\" >&5\n$as_echo_n \"checking if $compiler static flag $lt_tmp_static_flag works... \" >&6; }\nif ${lt_cv_prog_compiler_static_works+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_static_works=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $lt_tmp_static_flag\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_cv_prog_compiler_static_works=yes\n       fi\n     else\n       lt_cv_prog_compiler_static_works=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works\" >&5\n$as_echo \"$lt_cv_prog_compiler_static_works\" >&6; }\n\nif test x\"$lt_cv_prog_compiler_static_works\" = xyes; then\n    :\nelse\n    lt_prog_compiler_static=\nfi\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif ${lt_cv_prog_compiler_c_o+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext\" >&5\n$as_echo_n \"checking if $compiler supports -c -o file.$ac_objext... \" >&6; }\nif ${lt_cv_prog_compiler_c_o+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler_c_o=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [^ ]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&5)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&5\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&5\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       lt_cv_prog_compiler_c_o=yes\n     fi\n   fi\n   chmod u+w . 2>&5\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o\" >&5\n$as_echo \"$lt_cv_prog_compiler_c_o\" >&6; }\n\n\n\n\nhard_links=\"nottested\"\nif test \"$lt_cv_prog_compiler_c_o\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links\" >&5\n$as_echo_n \"checking if we can lock with hard links... \" >&6; }\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hard_links\" >&5\n$as_echo \"$hard_links\" >&6; }\n  if test \"$hard_links\" = no; then\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&5\n$as_echo \"$as_me: WARNING: \\`$CC' does not support \\`-c -o', so \\`make -j' may be unsafe\" >&2;}\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries\" >&5\n$as_echo_n \"checking whether the $compiler linker ($LD) supports shared libraries... \" >&6; }\n\n  runpath_var=\n  allow_undefined_flag=\n  always_export_symbols=no\n  archive_cmds=\n  archive_expsym_cmds=\n  compiler_needs_object=no\n  enable_shared_with_static_runtimes=no\n  export_dynamic_flag_spec=\n  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  hardcode_automatic=no\n  hardcode_direct=no\n  hardcode_direct_absolute=no\n  hardcode_libdir_flag_spec=\n  hardcode_libdir_separator=\n  hardcode_minus_L=no\n  hardcode_shlibpath_var=unsupported\n  inherit_rpath=no\n  link_all_deplibs=unknown\n  module_cmds=\n  module_expsym_cmds=\n  old_archive_from_new_cmds=\n  old_archive_from_expsyms_cmds=\n  thread_safe_flag_spec=\n  whole_archive_flag_spec=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  include_expsyms=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    link_all_deplibs=no\n    ;;\n  esac\n\n  ld_shlibs=yes\n\n  # On some targets, GNU ld is compatible enough with the native linker\n  # that we're better off using the native interface for both.\n  lt_use_gnu_ld_interface=no\n  if test \"$with_gnu_ld\" = yes; then\n    case $host_os in\n      aix*)\n\t# The AIX port of GNU ld has always aspired to compatibility\n\t# with the native linker.  However, as the warning in the GNU ld\n\t# block says, versions before 2.19.5* couldn't really create working\n\t# shared libraries, regardless of the interface used.\n\tcase `$LD -v 2>&1` in\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.19.5*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.[2-9]*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ [3-9]*) ;;\n\t  *)\n\t    lt_use_gnu_ld_interface=yes\n\t    ;;\n\tesac\n\t;;\n      *)\n\tlt_use_gnu_ld_interface=yes\n\t;;\n    esac\n  fi\n\n  if test \"$lt_use_gnu_ld_interface\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n    export_dynamic_flag_spec='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      whole_archive_flag_spec=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      whole_archive_flag_spec=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[3-9]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.19, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to install binutils\n*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.\n*** You will then need to restart the configuration process.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tallow_undefined_flag=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\tarchive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,\n      # as there is no search path for DLLs.\n      hardcode_libdir_flag_spec='-L$libdir'\n      export_dynamic_flag_spec='${wl}--export-all-symbols'\n      allow_undefined_flag=unsupported\n      always_export_symbols=no\n      enable_shared_with_static_runtimes=yes\n      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS][ ]/s/.*[ ]\\([^ ]*\\)/\\1 DATA/;s/^.*[ ]__nm__\\([^ ]*\\)[ ][^ ]*/\\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    haiku*)\n      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      link_all_deplibs=yes\n      ;;\n\n    interix[3-9]*)\n      hardcode_direct=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n      export_dynamic_flag_spec='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      archive_expsym_cmds='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=' $pic_flag'\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95* | pgfortran*)\n\t\t\t\t\t# Portland Group f77 and f90 compilers\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  whole_archive_flag_spec=\n\t  tmp_sharedflag='--shared' ;;\n\txl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tnvcc*)\t# Cuda Compiler Driver 2.2\n\t  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  compiler_needs_object=yes\n\t  ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  compiler_needs_object=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\tarchive_cmds='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf* | bgf* | bgxlf* | mpixlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'\n\t  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n\t  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    archive_expsym_cmds='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        ld_shlibs=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [01].* | *\\ 2.[0-9].* | *\\ 2.1[0-5].*)\n\tld_shlibs=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n\t    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    ld_shlibs=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\tarchive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\tld_shlibs=no\n      fi\n      ;;\n    esac\n\n    if test \"$ld_shlibs\" = no; then\n      runpath_var=\n      hardcode_libdir_flag_spec=\n      export_dynamic_flag_spec=\n      whole_archive_flag_spec=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      allow_undefined_flag=unsupported\n      always_export_symbols=yes\n      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\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 && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\thardcode_direct=unsupported\n      fi\n      ;;\n\n    aix[4-9]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\t# Also, AIX nm treats weak defined symbols like other global\n\t# defined symbols, whereas GNU nm marks them as \"W\".\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && (substr(\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      archive_cmds=''\n      hardcode_direct=yes\n      hardcode_direct_absolute=yes\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      file_list_spec='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[012]|aix4.[012].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  hardcode_direct=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  hardcode_minus_L=yes\n\t  hardcode_libdir_flag_spec='-L$libdir'\n\t  hardcode_libdir_separator=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\tlink_all_deplibs=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      export_dynamic_flag_spec='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      always_export_symbols=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\tallow_undefined_flag='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\n        if test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  if ${lt_cv_aix_libpath_+:} false; 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\nif ac_fn_c_try_link \"$LINENO\"; then :\n\n  lt_aix_libpath_sed='\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }'\n  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=\"/usr/lib:/lib\"\n  fi\n\nfi\n\n  aix_libpath=$lt_cv_aix_libpath_\nfi\n\n        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'\n\t  allow_undefined_flag=\"-z nodefs\"\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\n\t if test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  if ${lt_cv_aix_libpath_+:} false; 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\nif ac_fn_c_try_link \"$LINENO\"; then :\n\n  lt_aix_libpath_sed='\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }'\n  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n  if test -z \"$lt_cv_aix_libpath_\"; then\n    lt_cv_aix_libpath_=\"/usr/lib:/lib\"\n  fi\n\nfi\n\n  aix_libpath=$lt_cv_aix_libpath_\nfi\n\n\t hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  no_undefined_flag=' ${wl}-bernotok'\n\t  allow_undefined_flag=' ${wl}-berok'\n\t  if test \"$with_gnu_ld\" = yes; then\n\t    # We only use this code for GNU lds that support --whole-archive.\n\t    whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t  else\n\t    # Exported symbols can be pulled into shared objects from archives\n\t    whole_archive_flag_spec='$convenience'\n\t  fi\n\t  archive_cmds_need_lc=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  archive_expsym_cmds=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            archive_expsym_cmds=''\n        ;;\n      m68k)\n            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            hardcode_libdir_flag_spec='-L$libdir'\n            hardcode_minus_L=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[45]*)\n      export_dynamic_flag_spec=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      case $cc_basename in\n      cl*)\n\t# Native MSVC\n\thardcode_libdir_flag_spec=' '\n\tallow_undefined_flag=unsupported\n\talways_export_symbols=yes\n\tfile_list_spec='@'\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\tarchive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\tarchive_expsym_cmds='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t    sed -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t  else\n\t    sed -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t  fi~\n\t  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t  linknames='\n\t# The linker will not automatically build a static lib if we build a DLL.\n\t# _LT_TAGVAR(old_archive_from_new_cmds, )='true'\n\tenable_shared_with_static_runtimes=yes\n\texclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n\texport_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[BCDGRS][ ]/s/.*[ ]\\([^ ]*\\)/\\1,DATA/'\\'' | $SED -e '\\''/^[AITW][ ]/s/.*[ ]//'\\'' | sort | uniq > $export_symbols'\n\t# Don't use ranlib\n\told_postinstall_cmds='chmod 644 $oldlib'\n\tpostlink_cmds='lt_outputfile=\"@OUTPUT@\"~\n\t  lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t  case $lt_outputfile in\n\t    *.exe|*.EXE) ;;\n\t    *)\n\t      lt_outputfile=\"$lt_outputfile.exe\"\n\t      lt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t      ;;\n\t  esac~\n\t  if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t    $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t    $RM \"$lt_outputfile.manifest\";\n\t  fi'\n\t;;\n      *)\n\t# Assume MSVC wrapper\n\thardcode_libdir_flag_spec=' '\n\tallow_undefined_flag=unsupported\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\tarchive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all \"$deplibs\" | $SED '\\''s/ -lc$//'\\''` -link -dll~linknames='\n\t# The linker will automatically build a .lib file if we build a DLL.\n\told_archive_from_new_cmds='true'\n\t# FIXME: Should let the user specify the lib program.\n\told_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'\n\tenable_shared_with_static_runtimes=yes\n\t;;\n      esac\n      ;;\n\n    darwin* | rhapsody*)\n\n\n  archive_cmds_need_lc=no\n  hardcode_direct=no\n  hardcode_automatic=yes\n  hardcode_shlibpath_var=unsupported\n  if test \"$lt_cv_ld_force_load\" = \"yes\"; then\n    whole_archive_flag_spec='`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience ${wl}-force_load,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"`'\n\n  else\n    whole_archive_flag_spec=''\n  fi\n  link_all_deplibs=yes\n  allow_undefined_flag=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=func_echo_all\n    archive_cmds=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    module_cmds=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    archive_expsym_cmds=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    module_expsym_cmds=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n\n  else\n  ld_shlibs=no\n  fi\n\n      ;;\n\n    dgux*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2.*)\n      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\tarchive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_direct=yes\n\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      export_dynamic_flag_spec='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tarchive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\thardcode_direct=yes\n\thardcode_direct_absolute=yes\n\texport_dynamic_flag_spec='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\thardcode_minus_L=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\n\t  # Older versions of the 11.00 compiler do not understand -b yet\n\t  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)\n\t  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if $CC understands -b\" >&5\n$as_echo_n \"checking if $CC understands -b... \" >&6; }\nif ${lt_cv_prog_compiler__b+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_prog_compiler__b=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS -b\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&5\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         lt_cv_prog_compiler__b=yes\n       fi\n     else\n       lt_cv_prog_compiler__b=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b\" >&5\n$as_echo \"$lt_cv_prog_compiler__b\" >&6; }\n\nif test x\"$lt_cv_prog_compiler__b\" = xyes; then\n    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\nelse\n    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\nfi\n\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\thardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'\n\thardcode_libdir_separator=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  hardcode_direct=no\n\t  hardcode_shlibpath_var=no\n\t  ;;\n\t*)\n\t  hardcode_direct=yes\n\t  hardcode_direct_absolute=yes\n\t  export_dynamic_flag_spec='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  hardcode_minus_L=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n\t# This should be the same for all languages, so no per-tag cache variable.\n\t{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol\" >&5\n$as_echo_n \"checking whether the $host_os linker accepts -exported_symbol... \" >&6; }\nif ${lt_cv_irix_exported_symbol+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  save_LDFLAGS=\"$LDFLAGS\"\n\t   LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n\t   cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nint foo (void) { return 0; }\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  lt_cv_irix_exported_symbol=yes\nelse\n  lt_cv_irix_exported_symbol=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n           LDFLAGS=\"$save_LDFLAGS\"\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol\" >&5\n$as_echo \"$lt_cv_irix_exported_symbol\" >&6; }\n\tif test \"$lt_cv_irix_exported_symbol\" = yes; then\n          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n\tfi\n      else\n\tarchive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      inherit_rpath=yes\n      link_all_deplibs=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\tarchive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\tarchive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_direct=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    newsos6)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_direct=yes\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      hardcode_shlibpath_var=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\thardcode_direct=yes\n\thardcode_shlibpath_var=no\n\thardcode_direct_absolute=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t  export_dynamic_flag_spec='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)\n\t     archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     hardcode_libdir_flag_spec='-R$libdir'\n\t     ;;\n\t   *)\n\t     archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     hardcode_libdir_flag_spec='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\tld_shlibs=no\n      fi\n      ;;\n\n    os2*)\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_minus_L=yes\n      allow_undefined_flag=unsupported\n      archive_cmds='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      hardcode_libdir_separator=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\tallow_undefined_flag=' ${wl}-expect_unresolved ${wl}\\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\thardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'\n      else\n\tallow_undefined_flag=' -expect_unresolved \\*'\n\tarchive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\tarchive_expsym_cmds='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\thardcode_libdir_flag_spec='-rpath $libdir'\n      fi\n      archive_cmds_need_lc='no'\n      hardcode_libdir_separator=:\n      ;;\n\n    solaris*)\n      no_undefined_flag=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\tarchive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  archive_expsym_cmds='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      hardcode_libdir_flag_spec='-R$libdir'\n      hardcode_shlibpath_var=no\n      case $host_os in\n      solaris2.[0-5] | solaris2.[0-5].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      link_all_deplibs=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\tarchive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_direct=yes\n      hardcode_minus_L=yes\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  reload_cmds='$CC -r -o $output$reload_objs'\n\t  hardcode_direct=no\n        ;;\n\tmotorola)\n\t  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  hardcode_direct=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      hardcode_shlibpath_var=no\n      ;;\n\n    sysv4.3*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_shlibpath_var=no\n      export_dynamic_flag_spec='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\tarchive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\thardcode_shlibpath_var=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\tld_shlibs=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)\n      no_undefined_flag='${wl}-z,text'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      no_undefined_flag='${wl}-z,text'\n      allow_undefined_flag='${wl}-z,nodefs'\n      archive_cmds_need_lc=no\n      hardcode_shlibpath_var=no\n      hardcode_libdir_flag_spec='${wl}-R,$libdir'\n      hardcode_libdir_separator=':'\n      link_all_deplibs=yes\n      export_dynamic_flag_spec='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\tarchive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\tarchive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\tarchive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      hardcode_libdir_flag_spec='-L$libdir'\n      hardcode_shlibpath_var=no\n      ;;\n\n    *)\n      ld_shlibs=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\texport_dynamic_flag_spec='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ld_shlibs\" >&5\n$as_echo \"$ld_shlibs\" >&6; }\ntest \"$ld_shlibs\" = no && can_build_shared=no\n\nwith_gnu_ld=$with_gnu_ld\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$archive_cmds_need_lc\" in\nx|xyes)\n  # Assume -lc should be added\n  archive_cmds_need_lc=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $archive_cmds in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in\" >&5\n$as_echo_n \"checking whether -lc should be explicitly linked in... \" >&6; }\nif ${lt_cv_archive_cmds_need_lc+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  $RM conftest*\n\techo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n\tif { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_compile\\\"\"; } >&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; } 2>conftest.err; then\n\t  soname=conftest\n\t  lib=conftest\n\t  libobjs=conftest.$ac_objext\n\t  deplibs=\n\t  wl=$lt_prog_compiler_wl\n\t  pic_flag=$lt_prog_compiler_pic\n\t  compiler_flags=-v\n\t  linker_flags=-v\n\t  verstring=\n\t  output_objdir=.\n\t  libname=conftest\n\t  lt_save_allow_undefined_flag=$allow_undefined_flag\n\t  allow_undefined_flag=\n\t  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1\\\"\"; } >&5\n  (eval $archive_cmds 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1) 2>&5\n  ac_status=$?\n  $as_echo \"$as_me:${as_lineno-$LINENO}: \\$? = $ac_status\" >&5\n  test $ac_status = 0; }\n\t  then\n\t    lt_cv_archive_cmds_need_lc=no\n\t  else\n\t    lt_cv_archive_cmds_need_lc=yes\n\t  fi\n\t  allow_undefined_flag=$lt_save_allow_undefined_flag\n\telse\n\t  cat conftest.err 1>&5\n\tfi\n\t$RM conftest*\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc\" >&5\n$as_echo \"$lt_cv_archive_cmds_need_lc\" >&6; }\n      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics\" >&5\n$as_echo_n \"checking dynamic linker characteristics... \" >&6; }\n\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  case $host_os in\n    mingw* | cegcc*) lt_sed_strip_eq=\"s,=\\([A-Za-z]:\\),\\1,g\" ;;\n    *) lt_sed_strip_eq=\"s,=/,/,g\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e $lt_sed_strip_eq`\n  case $lt_search_path_spec in\n  *\\;*)\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED 's/;/ /g'`\n    ;;\n  *)\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED \"s/$PATH_SEPARATOR/ /g\"`\n    ;;\n  esac\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO \"$lt_tmp_lt_search_path_spec\" | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[lt_foo]++; }\n  if (lt_freq[lt_foo] == 1) { print lt_foo; }\n}'`\n  # AWK program above erroneously prepends '/' to C:/dos/paths\n  # for these hosts.\n  case $host_os in\n    mingw* | cegcc*) lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" |\\\n      $SED 's,/\\([A-Za-z]:\\),\\1,g'` ;;\n  esac\n  sys_lib_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $lt_NL2SP`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[4-9]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[01] | aix4.[01].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all \"$lib\" | $SED '\\''s%^.*/\\([^/]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[45]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$cc_basename in\n  yes,*)\n    # gcc\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n\n      sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/lib/w32api\"\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    dynamic_linker='Win32 ld.exe'\n    ;;\n\n  *,cl*)\n    # Native MSVC\n    libname_spec='$name'\n    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'\n    library_names_spec='${libname}.dll.lib'\n\n    case $build_os in\n    mingw*)\n      sys_lib_search_path_spec=\n      lt_save_ifs=$IFS\n      IFS=';'\n      for lt_path in $LIB\n      do\n        IFS=$lt_save_ifs\n        # Let DOS variable expansion print the short 8.3 style file name.\n        lt_path=`cd \"$lt_path\" 2>/dev/null && cmd //C \"for %i in (\".\") do @echo %~si\"`\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec $lt_path\"\n      done\n      IFS=$lt_save_ifs\n      # Convert to MSYS style.\n      sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | sed -e 's|\\\\\\\\|/|g' -e 's| \\\\([a-zA-Z]\\\\):| /\\\\1|g' -e 's|^ ||'`\n      ;;\n    cygwin*)\n      # Convert to unix form, then to dos form, then back to unix form\n      # but this time dos style (no spaces!) so that the unix form looks\n      # like /cygdrive/c/PROGRA~1:/cygdr...\n      sys_lib_search_path_spec=`cygpath --path --unix \"$LIB\"`\n      sys_lib_search_path_spec=`cygpath --path --dos \"$sys_lib_search_path_spec\" 2>/dev/null`\n      sys_lib_search_path_spec=`cygpath --path --unix \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      ;;\n    *)\n      sys_lib_search_path_spec=\"$LIB\"\n      if $ECHO \"$sys_lib_search_path_spec\" | $GREP ';[c-zC-Z]:/' >/dev/null; then\n        # It is most probably a Windows format PATH.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      # FIXME: find the short name or the path components, as spaces are\n      # common. (e.g. \"Program Files\" -> \"PROGRA~1\")\n      ;;\n    esac\n\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n    dynamic_linker='Win32 link.exe'\n    ;;\n\n  *)\n    # Assume MSVC wrapper\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    dynamic_linker='Win32 ld.exe'\n    ;;\n  esac\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\n\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[23].*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2.*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[01]* | freebsdelf3.[01]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \\\n  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\nhaiku*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  dynamic_linker=\"$host_os runtime_loader\"\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...\n  postinstall_cmds='chmod 555 $lib'\n  # or fails outright, so override atomically:\n  install_override_mode=555\n  ;;\n\ninterix[3-9]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux # correct to gnu/linux during the next big refactor\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n\n  # Some binutils ld are patched to set DT_RUNPATH\n  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  lt_cv_shlibpath_overrides_runpath=no\n    save_LDFLAGS=$LDFLAGS\n    save_libdir=$libdir\n    eval \"libdir=/foo; wl=\\\"$lt_prog_compiler_wl\\\"; \\\n\t LDFLAGS=\\\"\\$LDFLAGS $hardcode_libdir_flag_spec\\\"\"\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_link \"$LINENO\"; then :\n  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null; then :\n  lt_cv_shlibpath_overrides_runpath=yes\nfi\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n    LDFLAGS=$save_LDFLAGS\n    libdir=$save_libdir\n\nfi\n\n  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\$2)); skip = 1; } { if (!skip) print \\$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/\"//g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[89] | openbsd2.[89].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux # correct to gnu/linux during the next big refactor\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $dynamic_linker\" >&5\n$as_echo \"$dynamic_linker\" >&6; }\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs\" >&5\n$as_echo_n \"checking how to hardcode library paths into programs... \" >&6; }\nhardcode_action=\nif test -n \"$hardcode_libdir_flag_spec\" ||\n   test -n \"$runpath_var\" ||\n   test \"X$hardcode_automatic\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$hardcode_direct\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, )\" != no &&\n     test \"$hardcode_minus_L\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    hardcode_action=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    hardcode_action=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  hardcode_action=unsupported\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $hardcode_action\" >&5\n$as_echo \"$hardcode_action\" >&6; }\n\nif test \"$hardcode_action\" = relink ||\n   test \"$inherit_rpath\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n\n\n\n\n\n\n  if test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif ${ac_cv_lib_dl_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n\nfi\n\n    ;;\n\n  *)\n    ac_fn_c_check_func \"$LINENO\" \"shl_load\" \"ac_cv_func_shl_load\"\nif test \"x$ac_cv_func_shl_load\" = xyes; then :\n  lt_cv_dlopen=\"shl_load\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld\" >&5\n$as_echo_n \"checking for shl_load in -ldld... \" >&6; }\nif ${ac_cv_lib_dld_shl_load+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 shl_load ();\nint\nmain ()\n{\nreturn shl_load ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_shl_load=yes\nelse\n  ac_cv_lib_dld_shl_load=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_dld_shl_load\" >&5\n$as_echo \"$ac_cv_lib_dld_shl_load\" >&6; }\nif test \"x$ac_cv_lib_dld_shl_load\" = xyes; then :\n  lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"\nelse\n  ac_fn_c_check_func \"$LINENO\" \"dlopen\" \"ac_cv_func_dlopen\"\nif test \"x$ac_cv_func_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl\" >&5\n$as_echo_n \"checking for dlopen in -ldl... \" >&6; }\nif ${ac_cv_lib_dl_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldl  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dl_dlopen=yes\nelse\n  ac_cv_lib_dl_dlopen=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_dl_dlopen\" >&5\n$as_echo \"$ac_cv_lib_dl_dlopen\" >&6; }\nif test \"x$ac_cv_lib_dl_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld\" >&5\n$as_echo_n \"checking for dlopen in -lsvld... \" >&6; }\nif ${ac_cv_lib_svld_dlopen+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-lsvld  $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 dlopen ();\nint\nmain ()\n{\nreturn dlopen ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_svld_dlopen=yes\nelse\n  ac_cv_lib_svld_dlopen=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_svld_dlopen\" >&5\n$as_echo \"$ac_cv_lib_svld_dlopen\" >&6; }\nif test \"x$ac_cv_lib_svld_dlopen\" = xyes; then :\n  lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld\" >&5\n$as_echo_n \"checking for dld_link in -ldld... \" >&6; }\nif ${ac_cv_lib_dld_dld_link+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_check_lib_save_LIBS=$LIBS\nLIBS=\"-ldld  $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 dld_link ();\nint\nmain ()\n{\nreturn dld_link ();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  ac_cv_lib_dld_dld_link=yes\nelse\n  ac_cv_lib_dld_dld_link=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_dld_dld_link\" >&5\n$as_echo \"$ac_cv_lib_dld_dld_link\" >&6; }\nif test \"x$ac_cv_lib_dld_dld_link\" = xyes; then :\n  lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n\nfi\n\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself\" >&5\n$as_echo_n \"checking whether a program can dlopen itself... \" >&6; }\nif ${lt_cv_dlopen_self+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self\" >&5\n$as_echo \"$lt_cv_dlopen_self\" >&6; }\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself\" >&5\n$as_echo_n \"checking whether a statically linked program can dlopen itself... \" >&6; }\nif ${lt_cv_dlopen_self_static+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  \t  if test \"$cross_compiling\" = yes; then :\n  lt_cv_dlopen_self_static=cross\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}\n_LT_EOF\n  if { { eval echo \"\\\"\\$as_me\\\":${as_lineno-$LINENO}: \\\"$ac_link\\\"\"; } >&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; } && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&5 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;\n      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;\n    esac\n  else :\n    # compilation failed\n    lt_cv_dlopen_self_static=no\n  fi\nfi\nrm -fr conftest*\n\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static\" >&5\n$as_echo \"$lt_cv_dlopen_self_static\" >&6; }\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nstriplib=\nold_striplib=\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible\" >&5\n$as_echo_n \"checking whether stripping libraries is possible... \" >&6; }\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n    else\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    fi\n    ;;\n  *)\n    { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\n    ;;\n  esac\nfi\n\n\n\n\n\n\n\n\n\n\n\n\n  # Report which library types will actually be built\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries\" >&5\n$as_echo_n \"checking if libtool supports shared libraries... \" >&6; }\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $can_build_shared\" >&5\n$as_echo \"$can_build_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries\" >&5\n$as_echo_n \"checking whether to build shared libraries... \" >&6; }\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[4-9]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_shared\" >&5\n$as_echo \"$enable_shared\" >&6; }\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether to build static libraries\" >&5\n$as_echo_n \"checking whether to build static libraries... \" >&6; }\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $enable_static\" >&5\n$as_echo \"$enable_static\" >&6; }\n\n\n\n\nfi\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\nCC=\"$lt_save_CC\"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n        ac_config_commands=\"$ac_config_commands libtool\"\n\n\n\n\n# Only expand once:\n\n\n\n\n\nif test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}ar\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_AR=\"${ac_tool_prefix}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\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\nfi\nif test -z \"$ac_cv_prog_AR\"; then\n  ac_ct_AR=$AR\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 ${ac_cv_prog_ac_ct_AR+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AR\"; then\n  ac_cv_prog_ac_ct_AR=\"$ac_ct_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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_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\nfi\nfi\nac_ct_AR=$ac_cv_prog_ac_ct_AR\nif test -n \"$ac_ct_AR\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR\" >&5\n$as_echo \"$ac_ct_AR\" >&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_AR\" = x; then\n    AR=\"ar\"\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    AR=$ac_ct_AR\n  fi\nelse\n  AR=\"$ac_cv_prog_AR\"\nfi\n\n\n\nif test \"x$EMSCRIPTEN\" = \"x\"; then :\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for MMX instructions set\" >&5\n$as_echo_n \"checking for MMX instructions set... \" >&6; }\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mmmx\" >&5\n$as_echo_n \"checking whether C compiler accepts -mmmx... \" >&6; }\nif ${ax_cv_check_cflags___mmmx+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mmmx\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mmmx=yes\nelse\n  ax_cv_check_cflags___mmmx=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mmmx\" >&5\n$as_echo \"$ax_cv_check_cflags___mmmx\" >&6; }\nif test \"x$ax_cv_check_cflags___mmmx\" = xyes; then :\n  CFLAGS=\"$CFLAGS -mmmx\"\nelse\n  :\nfi\n\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"mmx\")\n#include <mmintrin.h>\n\nint\nmain ()\n{\n __m64 x = _mm_setzero_si64();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_MMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mmmx\" >&5\n$as_echo_n \"checking whether C compiler accepts -mmmx... \" >&6; }\nif ${ax_cv_check_cflags___mmmx+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mmmx\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mmmx=yes\nelse\n  ax_cv_check_cflags___mmmx=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mmmx\" >&5\n$as_echo \"$ax_cv_check_cflags___mmmx\" >&6; }\nif test \"x$ax_cv_check_cflags___mmmx\" = xyes; then :\n  CFLAGS_MMX=\"-mmmx\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SSE2 instructions set\" >&5\n$as_echo_n \"checking for SSE2 instructions set... \" >&6; }\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse2\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse2... \" >&6; }\nif ${ax_cv_check_cflags___msse2+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse2\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse2=yes\nelse\n  ax_cv_check_cflags___msse2=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse2\" >&5\n$as_echo \"$ax_cv_check_cflags___msse2\" >&6; }\nif test \"x$ax_cv_check_cflags___msse2\" = xyes; then :\n  CFLAGS=\"$CFLAGS -msse2\"\nelse\n  :\nfi\n\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"sse2\")\n#ifndef __SSE2__\n# define __SSE2__\n#endif\n#include <emmintrin.h>\n\nint\nmain ()\n{\n __m128d x = _mm_setzero_pd();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_EMMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse2\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse2... \" >&6; }\nif ${ax_cv_check_cflags___msse2+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse2\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse2=yes\nelse\n  ax_cv_check_cflags___msse2=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse2\" >&5\n$as_echo \"$ax_cv_check_cflags___msse2\" >&6; }\nif test \"x$ax_cv_check_cflags___msse2\" = xyes; then :\n  CFLAGS_SSE2=\"-msse2\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse3\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse3... \" >&6; }\nif ${ax_cv_check_cflags___msse3+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse3\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse3=yes\nelse\n  ax_cv_check_cflags___msse3=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse3\" >&5\n$as_echo \"$ax_cv_check_cflags___msse3\" >&6; }\nif test \"x$ax_cv_check_cflags___msse3\" = xyes; then :\n  CFLAGS=\"$CFLAGS -msse3\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SSE3 instructions set\" >&5\n$as_echo_n \"checking for SSE3 instructions set... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"sse3\")\n#include <pmmintrin.h>\n\nint\nmain ()\n{\n __m128 x = _mm_addsub_ps(_mm_cvtpd_ps(_mm_setzero_pd()),\n                                _mm_cvtpd_ps(_mm_setzero_pd()));\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_PMMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse3\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse3... \" >&6; }\nif ${ax_cv_check_cflags___msse3+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse3\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse3=yes\nelse\n  ax_cv_check_cflags___msse3=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse3\" >&5\n$as_echo \"$ax_cv_check_cflags___msse3\" >&6; }\nif test \"x$ax_cv_check_cflags___msse3\" = xyes; then :\n  CFLAGS_SSE3=\"-msse3\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mssse3\" >&5\n$as_echo_n \"checking whether C compiler accepts -mssse3... \" >&6; }\nif ${ax_cv_check_cflags___mssse3+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mssse3\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mssse3=yes\nelse\n  ax_cv_check_cflags___mssse3=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mssse3\" >&5\n$as_echo \"$ax_cv_check_cflags___mssse3\" >&6; }\nif test \"x$ax_cv_check_cflags___mssse3\" = xyes; then :\n  CFLAGS=\"$CFLAGS -mssse3\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SSSE3 instructions set\" >&5\n$as_echo_n \"checking for SSSE3 instructions set... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"ssse3\")\n#include <tmmintrin.h>\n\nint\nmain ()\n{\n __m64 x = _mm_abs_pi32(_m_from_int(0));\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_TMMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mssse3\" >&5\n$as_echo_n \"checking whether C compiler accepts -mssse3... \" >&6; }\nif ${ax_cv_check_cflags___mssse3+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mssse3\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mssse3=yes\nelse\n  ax_cv_check_cflags___mssse3=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mssse3\" >&5\n$as_echo \"$ax_cv_check_cflags___mssse3\" >&6; }\nif test \"x$ax_cv_check_cflags___mssse3\" = xyes; then :\n  CFLAGS_SSSE3=\"-mssse3\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse4.1\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse4.1... \" >&6; }\nif ${ax_cv_check_cflags___msse4_1+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse4.1\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse4_1=yes\nelse\n  ax_cv_check_cflags___msse4_1=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse4_1\" >&5\n$as_echo \"$ax_cv_check_cflags___msse4_1\" >&6; }\nif test \"x$ax_cv_check_cflags___msse4_1\" = xyes; then :\n  CFLAGS=\"$CFLAGS -msse4.1\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for SSE4.1 instructions set\" >&5\n$as_echo_n \"checking for SSE4.1 instructions set... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"sse4.1\")\n#include <smmintrin.h>\n\nint\nmain ()\n{\n __m128i x = _mm_minpos_epu16(_mm_setzero_si128());\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_SMMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -msse4.1\" >&5\n$as_echo_n \"checking whether C compiler accepts -msse4.1... \" >&6; }\nif ${ax_cv_check_cflags___msse4_1+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -msse4.1\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___msse4_1=yes\nelse\n  ax_cv_check_cflags___msse4_1=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___msse4_1\" >&5\n$as_echo \"$ax_cv_check_cflags___msse4_1\" >&6; }\nif test \"x$ax_cv_check_cflags___msse4_1\" = xyes; then :\n  CFLAGS_SSE41=\"-msse4.1\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mavx\" >&5\n$as_echo_n \"checking whether C compiler accepts -mavx... \" >&6; }\nif ${ax_cv_check_cflags___mavx+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mavx\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mavx=yes\nelse\n  ax_cv_check_cflags___mavx=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mavx\" >&5\n$as_echo \"$ax_cv_check_cflags___mavx\" >&6; }\nif test \"x$ax_cv_check_cflags___mavx\" = xyes; then :\n  CFLAGS=\"$CFLAGS -mavx\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for AVX instructions set\" >&5\n$as_echo_n \"checking for AVX instructions set... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"avx\")\n#include <immintrin.h>\n\nint\nmain ()\n{\n _mm256_zeroall();\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_AVXINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mavx\" >&5\n$as_echo_n \"checking whether C compiler accepts -mavx... \" >&6; }\nif ${ax_cv_check_cflags___mavx+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mavx\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mavx=yes\nelse\n  ax_cv_check_cflags___mavx=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mavx\" >&5\n$as_echo \"$ax_cv_check_cflags___mavx\" >&6; }\nif test \"x$ax_cv_check_cflags___mavx\" = xyes; then :\n  CFLAGS_AVX=\"-mavx\"\nelse\n  :\nfi\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maes\" >&5\n$as_echo_n \"checking whether C compiler accepts -maes... \" >&6; }\nif ${ax_cv_check_cflags___maes+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -maes\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___maes=yes\nelse\n  ax_cv_check_cflags___maes=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___maes\" >&5\n$as_echo \"$ax_cv_check_cflags___maes\" >&6; }\nif test \"x$ax_cv_check_cflags___maes\" = xyes; then :\n  CFLAGS=\"$CFLAGS -maes\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mpclmul\" >&5\n$as_echo_n \"checking whether C compiler accepts -mpclmul... \" >&6; }\nif ${ax_cv_check_cflags___mpclmul+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mpclmul\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mpclmul=yes\nelse\n  ax_cv_check_cflags___mpclmul=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mpclmul\" >&5\n$as_echo \"$ax_cv_check_cflags___mpclmul\" >&6; }\nif test \"x$ax_cv_check_cflags___mpclmul\" = xyes; then :\n  CFLAGS=\"$CFLAGS -mpclmul\"\nelse\n  :\nfi\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for AESNI instructions set and PCLMULQDQ\" >&5\n$as_echo_n \"checking for AESNI instructions set and PCLMULQDQ... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#pragma GCC target(\"aes\")\n#pragma GCC target(\"pclmul\")\n#include <wmmintrin.h>\n\nint\nmain ()\n{\n __m128i x = _mm_aesimc_si128(_mm_setzero_si128());\n       __m128i y = _mm_clmulepi64_si128(_mm_setzero_si128(), _mm_setzero_si128(), 0);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_WMMINTRIN_H 1\" >>confdefs.h\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maes\" >&5\n$as_echo_n \"checking whether C compiler accepts -maes... \" >&6; }\nif ${ax_cv_check_cflags___maes+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -maes\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___maes=yes\nelse\n  ax_cv_check_cflags___maes=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___maes\" >&5\n$as_echo \"$ax_cv_check_cflags___maes\" >&6; }\nif test \"x$ax_cv_check_cflags___maes\" = xyes; then :\n  CFLAGS_AESNI=\"-maes\"\nelse\n  :\nfi\n\n     { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mpclmul\" >&5\n$as_echo_n \"checking whether C compiler accepts -mpclmul... \" >&6; }\nif ${ax_cv_check_cflags___mpclmul+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n\n  ax_check_save_flags=$CFLAGS\n  CFLAGS=\"$CFLAGS  -mpclmul\"\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <stdio.h>\nint\nmain ()\n{\nchar x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ax_cv_check_cflags___mpclmul=yes\nelse\n  ax_cv_check_cflags___mpclmul=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=$ax_check_save_flags\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___mpclmul\" >&5\n$as_echo \"$ax_cv_check_cflags___mpclmul\" >&6; }\nif test \"x$ax_cv_check_cflags___mpclmul\" = xyes; then :\n  CFLAGS_PCLMUL=\"-mpclmul\"\nelse\n  :\nfi\n\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  CFLAGS=\"$oldcflags\"\n\n\nfi\n\n\n\n\n\n\n\n\n\nfor ac_header in sys/mman.h\ndo :\n  ac_fn_c_check_header_mongrel \"$LINENO\" \"sys/mman.h\" \"ac_cv_header_sys_mman_h\" \"$ac_includes_default\"\nif test \"x$ac_cv_header_sys_mman_h\" = xyes; then :\n  cat >>confdefs.h <<_ACEOF\n#define HAVE_SYS_MMAN_H 1\n_ACEOF\n\nfi\n\ndone\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for inline\" >&5\n$as_echo_n \"checking for inline... \" >&6; }\nif ${ac_cv_c_inline+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_c_inline=no\nfor ac_kw in inline __inline__ __inline; do\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifndef __cplusplus\ntypedef int foo_t;\nstatic $ac_kw foo_t static_foo () {return 0; }\n$ac_kw foo_t foo () {return 0; }\n#endif\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_inline=$ac_kw\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n  test \"$ac_cv_c_inline\" != no && break\ndone\n\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline\" >&5\n$as_echo \"$ac_cv_c_inline\" >&6; }\n\ncase $ac_cv_c_inline in\n  inline | yes) ;;\n  *)\n    case $ac_cv_c_inline in\n      no) ac_val=;;\n      *) ac_val=$ac_cv_c_inline;;\n    esac\n    cat >>confdefs.h <<_ACEOF\n#ifndef __cplusplus\n#define inline $ac_val\n#endif\n_ACEOF\n    ;;\nesac\n\n { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian\" >&5\n$as_echo_n \"checking whether byte ordering is bigendian... \" >&6; }\nif ${ac_cv_c_bigendian+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  ac_cv_c_bigendian=unknown\n    # See if we're dealing with a universal compiler.\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#ifndef __APPLE_CC__\n\t       not a universal capable compiler\n\t     #endif\n\t     typedef int dummy;\n\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n\n\t# Check for potential -arch flags.  It is not universal unless\n\t# there are at least two -arch flags with different values.\n\tac_arch=\n\tac_prev=\n\tfor ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do\n\t if test -n \"$ac_prev\"; then\n\t   case $ac_word in\n\t     i?86 | x86_64 | ppc | ppc64)\n\t       if test -z \"$ac_arch\" || test \"$ac_arch\" = \"$ac_word\"; then\n\t\t ac_arch=$ac_word\n\t       else\n\t\t ac_cv_c_bigendian=universal\n\t\t break\n\t       fi\n\t       ;;\n\t   esac\n\t   ac_prev=\n\t elif test \"x$ac_word\" = \"x-arch\"; then\n\t   ac_prev=arch\n\t fi\n       done\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n    if test $ac_cv_c_bigendian = unknown; then\n      # See if sys/param.h defines the BYTE_ORDER macro.\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\t     #include <sys/param.h>\n\nint\nmain ()\n{\n#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\\n\t\t     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\\n\t\t     && LITTLE_ENDIAN)\n\t      bogus endian macros\n\t     #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  # It does; now see whether it defined to BIG_ENDIAN or not.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <sys/types.h>\n\t\t#include <sys/param.h>\n\nint\nmain ()\n{\n#if BYTE_ORDER != BIG_ENDIAN\n\t\t not big endian\n\t\t#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_bigendian=yes\nelse\n  ac_cv_c_bigendian=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\n    fi\n    if test $ac_cv_c_bigendian = unknown; then\n      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).\n      cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <limits.h>\n\nint\nmain ()\n{\n#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)\n\t      bogus endian macros\n\t     #endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  # It does; now see whether it defined to _BIG_ENDIAN or not.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n#include <limits.h>\n\nint\nmain ()\n{\n#ifndef _BIG_ENDIAN\n\t\t not big endian\n\t\t#endif\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  ac_cv_c_bigendian=yes\nelse\n  ac_cv_c_bigendian=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\n    fi\n    if test $ac_cv_c_bigendian = unknown; then\n      # Compile a test program.\n      if test \"$cross_compiling\" = yes; then :\n  # Try to guess by grepping values from an object file.\n\t cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\nshort int ascii_mm[] =\n\t\t  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };\n\t\tshort int ascii_ii[] =\n\t\t  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };\n\t\tint use_ascii (int i) {\n\t\t  return ascii_mm[i] + ascii_ii[i];\n\t\t}\n\t\tshort int ebcdic_ii[] =\n\t\t  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };\n\t\tshort int ebcdic_mm[] =\n\t\t  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };\n\t\tint use_ebcdic (int i) {\n\t\t  return ebcdic_mm[i] + ebcdic_ii[i];\n\t\t}\n\t\textern int foo;\n\nint\nmain ()\n{\nreturn use_ascii (foo) == use_ebcdic (foo);\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then\n\t      ac_cv_c_bigendian=yes\n\t    fi\n\t    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then\n\t      if test \"$ac_cv_c_bigendian\" = unknown; then\n\t\tac_cv_c_bigendian=no\n\t      else\n\t\t# finding both strings is unlikely to happen, but who knows?\n\t\tac_cv_c_bigendian=unknown\n\t      fi\n\t    fi\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\nelse\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n$ac_includes_default\nint\nmain ()\n{\n\n\t     /* Are we little or big endian?  From Harbison&Steele.  */\n\t     union\n\t     {\n\t       long int l;\n\t       char c[sizeof (long int)];\n\t     } u;\n\t     u.l = 1;\n\t     return u.c[sizeof (long int) - 1] == 1;\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_run \"$LINENO\"; then :\n  ac_cv_c_bigendian=no\nelse\n  ac_cv_c_bigendian=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\n    fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian\" >&5\n$as_echo \"$ac_cv_c_bigendian\" >&6; }\n case $ac_cv_c_bigendian in #(\n   yes)\n\n$as_echo \"#define NATIVE_BIG_ENDIAN 1\" >>confdefs.h\n;; #(\n   no)\n\n$as_echo \"#define NATIVE_LITTLE_ENDIAN 1\" >>confdefs.h\n ;; #(\n   universal)\n     as_fn_error $? \"universal endianess is not supported - compile separately and use lipo(1)\" \"$LINENO\" 5\n\n     ;; #(\n   *)\n     as_fn_error $? \"unknown endianess\" \"$LINENO\" 5 ;;\n esac\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether __STDC_LIMIT_MACROS is required\" >&5\n$as_echo_n \"checking whether __STDC_LIMIT_MACROS is required... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#include <limits.h>\n#include <stdint.h>\n\nint\nmain ()\n{\n\n(void) SIZE_MAX;\n(void) UINT64_MAX;\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n   CPPFLAGS=\"$CPPFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS\"\n\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nHAVE_AMD64_ASM_V=0\nif test \"$enable_asm\" != \"no\"; then :\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we can use x86_64 asm code\" >&5\n$as_echo_n \"checking whether we can use x86_64 asm code... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n\nint\nmain ()\n{\n\n#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)\n# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)\n#  error Windows x86_64 calling conventions are not supported yet\n# endif\n/* neat */\n#else\n# error !x86_64\n#endif\nunsigned char i = 0, o = 0, t;\n__asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \\n\"\n                      \"movb (%[i]), %[t] \\n\"\n                      \"addb %[t], (%[o]) \\n\"\n                      : [t] \"=&r\"(t)\n                      : [o] \"D\"(&o), [i] \"S\"(&i)\n                      : \"memory\", \"flags\", \"cc\");\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_AMD64_ASM 1\" >>confdefs.h\n\n   HAVE_AMD64_ASM_V=1\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n if test $HAVE_AMD64_ASM_V = 1; then\n  HAVE_AMD64_ASM_TRUE=\n  HAVE_AMD64_ASM_FALSE='#'\nelse\n  HAVE_AMD64_ASM_TRUE='#'\n  HAVE_AMD64_ASM_FALSE=\nfi\n\n\n\nHAVE_AVX_ASM_V=0\nif test \"$enable_asm\" != \"no\"; then :\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking whether we can assemble AVX opcodes\" >&5\n$as_echo_n \"checking whether we can assemble AVX opcodes... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n\nint\nmain ()\n{\n\n#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)\n# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)\n#  error Windows x86_64 calling conventions are not supported yet\n# endif\n/* neat */\n#else\n# error !x86_64\n#endif\n__asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\");\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_AVX_ASM 1\" >>confdefs.h\n\n   HAVE_AVX_ASM_V=1\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n if test $HAVE_AVX_ASM_V = 1; then\n  HAVE_AVX_ASM_TRUE=\n  HAVE_AVX_ASM_FALSE='#'\nelse\n  HAVE_AVX_ASM_TRUE='#'\n  HAVE_AVX_ASM_FALSE=\nfi\n\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking for 128-bit arithmetic\" >&5\n$as_echo_n \"checking for 128-bit arithmetic... \" >&6; }\nHAVE_TI_MODE_V=0\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#if !defined(__GNUC__) && !defined(__SIZEOF_INT128__)\n# error mode(TI) is a gcc extension, and __int128 is not available\n#endif\n#if defined(__clang__) && !defined(__x86_64__)\n# error clang does not properly handle the 128-bit type on 32-bit systems\n#endif\n#ifndef NATIVE_LITTLE_ENDIAN\n# error libsodium currently expects a little endian CPU for the 128-bit type\n#endif\n#ifdef __EMSCRIPTEN__\n# error emscripten currently supports only shift operations on integers \\\n#       larger than 64 bits\n#endif\n#include <stddef.h>\n#include <stdint.h>\n#if defined(__SIZEOF_INT128__)\ntypedef unsigned __int128 uint128_t;\n#else\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n#endif\nvoid fcontract(uint128_t *t) {\n  *t += 0x8000000000000 - 1;\n}\n\nint\nmain ()\n{\n\n(void) fcontract;\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_TI_MODE 1\" >>confdefs.h\n\n HAVE_TI_MODE_V=1\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n if test $HAVE_TI_MODE_V = 1; then\n  HAVE_TI_MODE_TRUE=\n  HAVE_TI_MODE_FALSE='#'\nelse\n  HAVE_TI_MODE_TRUE='#'\n  HAVE_TI_MODE_FALSE=\nfi\n\n\n\nHAVE_CPUID_V=0\nif test \"$enable_asm\" != \"no\"; then :\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking for cpuid instruction\" >&5\n$as_echo_n \"checking for cpuid instruction... \" >&6; }\n  cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\nint\nmain ()\n{\n\nunsigned int cpu_info[4];\n__asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" :\n                      \"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]),\n                      \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :\n                      \"0\" (0U), \"2\" (0U));\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_CPUID 1\" >>confdefs.h\n\n   HAVE_CPUID_V=1\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n\nfi\n\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if weak symbols are supported\" >&5\n$as_echo_n \"checking if weak symbols are supported... \" >&6; }\ncat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n__attribute__((weak)) void __dummy(void *x) { }\nvoid f(void *x) { __dummy(x); }\n\nint\nmain ()\n{\n\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_link \"$LINENO\"; then :\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: yes\" >&5\n$as_echo \"yes\" >&6; }\n\n$as_echo \"#define HAVE_WEAK_SYMBOLS 1\" >>confdefs.h\n\nelse\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: no\" >&5\n$as_echo \"no\" >&6; }\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking if data alignment is required\" >&5\n$as_echo_n \"checking if data alignment is required... \" >&6; }\naligned_access_required=yes\ncase $host_cpu in #(\n  i*86 | x86_64 | powerpc* | s390*) :\n    aligned_access_required=no ;; #(\n  arm*) :\n    cat confdefs.h - <<_ACEOF >conftest.$ac_ext\n/* end confdefs.h.  */\n\n#ifndef __ARM_FEATURE_UNALIGNED\n# error data alignment is required\n#endif\n\nint\nmain ()\n{\n\n  ;\n  return 0;\n}\n_ACEOF\nif ac_fn_c_try_compile \"$LINENO\"; then :\n  aligned_access_required=no\nfi\nrm -f core conftest.err conftest.$ac_objext conftest.$ac_ext\n ;; #(\n  *) :\n     ;;\nesac\nif test \"x$aligned_access_required\" = \"xyes\"; 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 CPU_UNALIGNED_ACCESS 1\" >>confdefs.h\n\nfi\n\n\nif test \"x$EMSCRIPTEN\" = \"x\"; then :\n\n  for ac_func in arc4random arc4random_buf\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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  for ac_func in mmap mlock madvise mprotect explicit_bzero\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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\nfi\nfor ac_func in posix_memalign getpid\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\"\nif eval test \\\"x\\$\"$as_ac_var\"\\\" = 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\n\n\nTEST_LDFLAGS=''\nif test \"x$EMSCRIPTEN\" != \"x\"; then :\n\n  EXEEXT=.js\n  TEST_LDFLAGS='--memory-init-file 0 --pre-js pre.js.inc -s NO_BROWSER=1 -s RESERVED_FUNCTION_POINTERS=8'\n\nfi\n\n if test \"x$EMSCRIPTEN\" != \"x\"; then\n  EMSCRIPTEN_TRUE=\n  EMSCRIPTEN_FALSE='#'\nelse\n  EMSCRIPTEN_TRUE='#'\n  EMSCRIPTEN_FALSE=\nfi\n\n\n if test \"x$NATIVECLIENT\" != \"x\"; then\n  NATIVECLIENT_TRUE=\n  NATIVECLIENT_FALSE='#'\nelse\n  NATIVECLIENT_TRUE='#'\n  NATIVECLIENT_FALSE=\nfi\n\n\n\n\nenable_win32_dll=yes\n\ncase $host in\n*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)\n  if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}as\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}as; 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 ${ac_cv_prog_AS+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$AS\"; then\n  ac_cv_prog_AS=\"$AS\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_AS=\"${ac_tool_prefix}as\"\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\nAS=$ac_cv_prog_AS\nif test -n \"$AS\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $AS\" >&5\n$as_echo \"$AS\" >&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_AS\"; then\n  ac_ct_AS=$AS\n  # Extract the first word of \"as\", so it can be a program name with args.\nset dummy as; 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 ${ac_cv_prog_ac_ct_AS+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_AS\"; then\n  ac_cv_prog_ac_ct_AS=\"$ac_ct_AS\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_AS=\"as\"\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_AS=$ac_cv_prog_ac_ct_AS\nif test -n \"$ac_ct_AS\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS\" >&5\n$as_echo \"$ac_ct_AS\" >&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_AS\" = x; then\n    AS=\"false\"\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    AS=$ac_ct_AS\n  fi\nelse\n  AS=\"$ac_cv_prog_AS\"\nfi\n\n  if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}dlltool\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}dlltool; 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 ${ac_cv_prog_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$DLLTOOL\"; then\n  ac_cv_prog_DLLTOOL=\"$DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_DLLTOOL=\"${ac_tool_prefix}dlltool\"\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\nDLLTOOL=$ac_cv_prog_DLLTOOL\nif test -n \"$DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $DLLTOOL\" >&5\n$as_echo \"$DLLTOOL\" >&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_DLLTOOL\"; then\n  ac_ct_DLLTOOL=$DLLTOOL\n  # Extract the first word of \"dlltool\", so it can be a program name with args.\nset dummy dlltool; 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 ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_DLLTOOL\"; then\n  ac_cv_prog_ac_ct_DLLTOOL=\"$ac_ct_DLLTOOL\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_DLLTOOL=\"dlltool\"\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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL\nif test -n \"$ac_ct_DLLTOOL\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL\" >&5\n$as_echo \"$ac_ct_DLLTOOL\" >&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_DLLTOOL\" = x; then\n    DLLTOOL=\"false\"\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    DLLTOOL=$ac_ct_DLLTOOL\n  fi\nelse\n  DLLTOOL=\"$ac_cv_prog_DLLTOOL\"\nfi\n\n  if test -n \"$ac_tool_prefix\"; then\n  # Extract the first word of \"${ac_tool_prefix}objdump\", so it can be a program name with args.\nset dummy ${ac_tool_prefix}objdump; 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 ${ac_cv_prog_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$OBJDUMP\"; then\n  ac_cv_prog_OBJDUMP=\"$OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_OBJDUMP=\"${ac_tool_prefix}objdump\"\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\nOBJDUMP=$ac_cv_prog_OBJDUMP\nif test -n \"$OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $OBJDUMP\" >&5\n$as_echo \"$OBJDUMP\" >&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_OBJDUMP\"; then\n  ac_ct_OBJDUMP=$OBJDUMP\n  # Extract the first word of \"objdump\", so it can be a program name with args.\nset dummy objdump; 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 ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test -n \"$ac_ct_OBJDUMP\"; then\n  ac_cv_prog_ac_ct_OBJDUMP=\"$ac_ct_OBJDUMP\" # 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 as_fn_executable_p \"$as_dir/$ac_word$ac_exec_ext\"; then\n    ac_cv_prog_ac_ct_OBJDUMP=\"objdump\"\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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP\nif test -n \"$ac_ct_OBJDUMP\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP\" >&5\n$as_echo \"$ac_ct_OBJDUMP\" >&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_OBJDUMP\" = x; then\n    OBJDUMP=\"false\"\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    OBJDUMP=$ac_ct_OBJDUMP\n  fi\nelse\n  OBJDUMP=\"$ac_cv_prog_OBJDUMP\"\nfi\n\n  ;;\nesac\n\ntest -z \"$AS\" && AS=as\n\n\n\n\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n\n\n\n\n\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: checking if gcc/ld supports -Wl,--output-def\" >&5\n$as_echo_n \"checking if gcc/ld supports -Wl,--output-def... \" >&6; }\nif ${gl_cv_ld_output_def+:} false; then :\n  $as_echo_n \"(cached) \" >&6\nelse\n  if test \"$enable_shared\" = no; then\n       gl_cv_ld_output_def=\"not needed, shared libraries are disabled\"\n     else\n       gl_ldflags_save=$LDFLAGS\n       LDFLAGS=\"-Wl,--output-def,conftest.def\"\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_link \"$LINENO\"; then :\n  gl_cv_ld_output_def=yes\nelse\n  gl_cv_ld_output_def=no\nfi\nrm -f core conftest.err conftest.$ac_objext \\\n    conftest$ac_exeext conftest.$ac_ext\n       rm -f conftest.def\n       LDFLAGS=\"$gl_ldflags_save\"\n     fi\nfi\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: result: $gl_cv_ld_output_def\" >&5\n$as_echo \"$gl_cv_ld_output_def\" >&6; }\n   if test \"x$gl_cv_ld_output_def\" = \"xyes\"; then\n  HAVE_LD_OUTPUT_DEF_TRUE=\n  HAVE_LD_OUTPUT_DEF_FALSE='#'\nelse\n  HAVE_LD_OUTPUT_DEF_TRUE='#'\n  HAVE_LD_OUTPUT_DEF_FALSE=\nfi\n\n\n\n\n\n\nac_config_files=\"$ac_config_files Makefile src/Makefile src/libsodium/Makefile src/libsodium/include/Makefile src/libsodium/include/sodium/version.h\"\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    if test \"x$cache_file\" != \"x/dev/null\"; then\n      { $as_echo \"$as_me:${as_lineno-$LINENO}: updating cache $cache_file\" >&5\n$as_echo \"$as_me: updating cache $cache_file\" >&6;}\n      if test ! -f \"$cache_file\" || test -h \"$cache_file\"; then\n\tcat confcache >\"$cache_file\"\n      else\n        case $cache_file in #(\n        */* | ?:*)\n\t  mv -f confcache \"$cache_file\"$$ &&\n\t  mv -f \"$cache_file\"$$ \"$cache_file\" ;; #(\n        *)\n\t  mv -f confcache \"$cache_file\" ;;\n\tesac\n      fi\n    fi\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\n# Transform confdefs.h into DEFS.\n# Protect against shell expansion while executing Makefile rules.\n# Protect against Makefile macro expansion.\n#\n# If the first sed substitution is executed (which looks for macros that\n# take arguments), then branch to the quote section.  Otherwise,\n# look for a macro that doesn't take arguments.\nac_script='\n:mline\n/\\\\$/{\n N\n s,\\\\\\n,,\n b mline\n}\nt clear\n:clear\ns/^[\t ]*#[\t ]*define[\t ][\t ]*\\([^\t (][^\t (]*([^)]*)\\)[\t ]*\\(.*\\)/-D\\1=\\2/g\nt quote\ns/^[\t ]*#[\t ]*define[\t ][\t ]*\\([^\t ][^\t ]*\\)[\t ]*\\(.*\\)/-D\\1=\\2/g\nt quote\nb any\n:quote\ns/[\t `~#$^&*(){}\\\\|;'\\''\"<>?]/\\\\&/g\ns/\\[/\\\\&/g\ns/\\]/\\\\&/g\ns/\\$/$$/g\nH\n:any\n${\n\tg\n\ts/^\\n//\n\ts/\\n/ /g\n\tp\n}\n'\nDEFS=`sed -n \"$ac_script\" confdefs.h`\n\n\nac_libobjs=\nac_ltlibobjs=\nU=\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\n{ $as_echo \"$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure\" >&5\n$as_echo_n \"checking that generated files are newer than configure... \" >&6; }\n   if test -n \"$am_sleep_pid\"; then\n     # Hide warnings about reused PIDs.\n     wait $am_sleep_pid 2>/dev/null\n   fi\n   { $as_echo \"$as_me:${as_lineno-$LINENO}: result: done\" >&5\n$as_echo \"done\" >&6; }\n if test -n \"$EXEEXT\"; then\n  am__EXEEXT_TRUE=\n  am__EXEEXT_FALSE='#'\nelse\n  am__EXEEXT_TRUE='#'\n  am__EXEEXT_FALSE=\nfi\n\nif test -z \"${MAINTAINER_MODE_TRUE}\" && test -z \"${MAINTAINER_MODE_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"MAINTAINER_MODE\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\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 \"${MINIMAL_TRUE}\" && test -z \"${MINIMAL_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"MINIMAL\\\" 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 \"${am__fastdepCCAS_TRUE}\" && test -z \"${am__fastdepCCAS_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"am__fastdepCCAS\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${HAVE_AMD64_ASM_TRUE}\" && test -z \"${HAVE_AMD64_ASM_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"HAVE_AMD64_ASM\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${HAVE_AVX_ASM_TRUE}\" && test -z \"${HAVE_AVX_ASM_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"HAVE_AVX_ASM\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${HAVE_TI_MODE_TRUE}\" && test -z \"${HAVE_TI_MODE_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"HAVE_TI_MODE\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${EMSCRIPTEN_TRUE}\" && test -z \"${EMSCRIPTEN_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"EMSCRIPTEN\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${NATIVECLIENT_TRUE}\" && test -z \"${NATIVECLIENT_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"NATIVECLIENT\\\" was never defined.\nUsually this means the macro was only invoked conditionally.\" \"$LINENO\" 5\nfi\nif test -z \"${HAVE_LD_OUTPUT_DEF_TRUE}\" && test -z \"${HAVE_LD_OUTPUT_DEF_FALSE}\"; then\n  as_fn_error $? \"conditional \\\"HAVE_LD_OUTPUT_DEF\\\" 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.\nas_myself=\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 STATUS 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=$1; test $as_status -eq 0 && as_status=1\n  if test \"$4\"; then\n    as_lineno=${as_lineno-\"$3\"} as_lineno_stack=as_lineno_stack=$as_lineno_stack\n    $as_echo \"$as_me:${as_lineno-$LINENO}: error: $2\" >&$4\n  fi\n  $as_echo \"$as_me: error: $2\" >&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 -pR'.\n    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||\n      as_ln_s='cp -pR'\n  elif ln conf$$.file conf$$ 2>/dev/null; then\n    as_ln_s=ln\n  else\n    as_ln_s='cp -pR'\n  fi\nelse\n  as_ln_s='cp -pR'\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\n\n# as_fn_executable_p FILE\n# -----------------------\n# Test if FILE is an executable regular file.\nas_fn_executable_p ()\n{\n  test -f \"$1\" && test -x \"$1\"\n} # as_fn_executable_p\nas_test_x='test -x'\nas_executable_p=as_fn_executable_p\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 libsodium $as_me 1.0.7, which was\ngenerated by GNU Autoconf 2.69.  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\n\n\ncat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1\n# Files that config.status was made for.\nconfig_files=\"$ac_config_files\"\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\nConfiguration files:\n$config_files\n\nConfiguration commands:\n$config_commands\n\nReport bugs to <https://github.com/jedisct1/libsodium/issues>.\nlibsodium home page: <https://github.com/jedisct1/libsodium>.\"\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=\"\\\\\nlibsodium config.status 1.0.7\nconfigured by $0, generated by GNU Autoconf 2.69,\n  with options \\\\\"\\$ac_cs_config\\\\\"\n\nCopyright (C) 2012 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'\nMKDIR_P='$MKDIR_P'\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=`expr \"X$1\" : 'X\\([^=]*\\)='`\n    ac_optarg=\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    '') as_fn_error $? \"missing file argument\" ;;\n    esac\n    as_fn_append CONFIG_FILES \" '$ac_optarg'\"\n    ac_need_defaults=false;;\n  --he | --h |  --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\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\nmacro_version='`$ECHO \"$macro_version\" | $SED \"$delay_single_quote_subst\"`'\nmacro_revision='`$ECHO \"$macro_revision\" | $SED \"$delay_single_quote_subst\"`'\nenable_shared='`$ECHO \"$enable_shared\" | $SED \"$delay_single_quote_subst\"`'\nenable_static='`$ECHO \"$enable_static\" | $SED \"$delay_single_quote_subst\"`'\npic_mode='`$ECHO \"$pic_mode\" | $SED \"$delay_single_quote_subst\"`'\nenable_fast_install='`$ECHO \"$enable_fast_install\" | $SED \"$delay_single_quote_subst\"`'\nSHELL='`$ECHO \"$SHELL\" | $SED \"$delay_single_quote_subst\"`'\nECHO='`$ECHO \"$ECHO\" | $SED \"$delay_single_quote_subst\"`'\nPATH_SEPARATOR='`$ECHO \"$PATH_SEPARATOR\" | $SED \"$delay_single_quote_subst\"`'\nhost_alias='`$ECHO \"$host_alias\" | $SED \"$delay_single_quote_subst\"`'\nhost='`$ECHO \"$host\" | $SED \"$delay_single_quote_subst\"`'\nhost_os='`$ECHO \"$host_os\" | $SED \"$delay_single_quote_subst\"`'\nbuild_alias='`$ECHO \"$build_alias\" | $SED \"$delay_single_quote_subst\"`'\nbuild='`$ECHO \"$build\" | $SED \"$delay_single_quote_subst\"`'\nbuild_os='`$ECHO \"$build_os\" | $SED \"$delay_single_quote_subst\"`'\nSED='`$ECHO \"$SED\" | $SED \"$delay_single_quote_subst\"`'\nXsed='`$ECHO \"$Xsed\" | $SED \"$delay_single_quote_subst\"`'\nGREP='`$ECHO \"$GREP\" | $SED \"$delay_single_quote_subst\"`'\nEGREP='`$ECHO \"$EGREP\" | $SED \"$delay_single_quote_subst\"`'\nFGREP='`$ECHO \"$FGREP\" | $SED \"$delay_single_quote_subst\"`'\nLD='`$ECHO \"$LD\" | $SED \"$delay_single_quote_subst\"`'\nNM='`$ECHO \"$NM\" | $SED \"$delay_single_quote_subst\"`'\nLN_S='`$ECHO \"$LN_S\" | $SED \"$delay_single_quote_subst\"`'\nmax_cmd_len='`$ECHO \"$max_cmd_len\" | $SED \"$delay_single_quote_subst\"`'\nac_objext='`$ECHO \"$ac_objext\" | $SED \"$delay_single_quote_subst\"`'\nexeext='`$ECHO \"$exeext\" | $SED \"$delay_single_quote_subst\"`'\nlt_unset='`$ECHO \"$lt_unset\" | $SED \"$delay_single_quote_subst\"`'\nlt_SP2NL='`$ECHO \"$lt_SP2NL\" | $SED \"$delay_single_quote_subst\"`'\nlt_NL2SP='`$ECHO \"$lt_NL2SP\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_to_host_file_cmd='`$ECHO \"$lt_cv_to_host_file_cmd\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_to_tool_file_cmd='`$ECHO \"$lt_cv_to_tool_file_cmd\" | $SED \"$delay_single_quote_subst\"`'\nreload_flag='`$ECHO \"$reload_flag\" | $SED \"$delay_single_quote_subst\"`'\nreload_cmds='`$ECHO \"$reload_cmds\" | $SED \"$delay_single_quote_subst\"`'\nOBJDUMP='`$ECHO \"$OBJDUMP\" | $SED \"$delay_single_quote_subst\"`'\ndeplibs_check_method='`$ECHO \"$deplibs_check_method\" | $SED \"$delay_single_quote_subst\"`'\nfile_magic_cmd='`$ECHO \"$file_magic_cmd\" | $SED \"$delay_single_quote_subst\"`'\nfile_magic_glob='`$ECHO \"$file_magic_glob\" | $SED \"$delay_single_quote_subst\"`'\nwant_nocaseglob='`$ECHO \"$want_nocaseglob\" | $SED \"$delay_single_quote_subst\"`'\nDLLTOOL='`$ECHO \"$DLLTOOL\" | $SED \"$delay_single_quote_subst\"`'\nsharedlib_from_linklib_cmd='`$ECHO \"$sharedlib_from_linklib_cmd\" | $SED \"$delay_single_quote_subst\"`'\nAR='`$ECHO \"$AR\" | $SED \"$delay_single_quote_subst\"`'\nAR_FLAGS='`$ECHO \"$AR_FLAGS\" | $SED \"$delay_single_quote_subst\"`'\narchiver_list_spec='`$ECHO \"$archiver_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nSTRIP='`$ECHO \"$STRIP\" | $SED \"$delay_single_quote_subst\"`'\nRANLIB='`$ECHO \"$RANLIB\" | $SED \"$delay_single_quote_subst\"`'\nold_postinstall_cmds='`$ECHO \"$old_postinstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_postuninstall_cmds='`$ECHO \"$old_postuninstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_cmds='`$ECHO \"$old_archive_cmds\" | $SED \"$delay_single_quote_subst\"`'\nlock_old_archive_extraction='`$ECHO \"$lock_old_archive_extraction\" | $SED \"$delay_single_quote_subst\"`'\nCC='`$ECHO \"$CC\" | $SED \"$delay_single_quote_subst\"`'\nCFLAGS='`$ECHO \"$CFLAGS\" | $SED \"$delay_single_quote_subst\"`'\ncompiler='`$ECHO \"$compiler\" | $SED \"$delay_single_quote_subst\"`'\nGCC='`$ECHO \"$GCC\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_pipe='`$ECHO \"$lt_cv_sys_global_symbol_pipe\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_cdecl='`$ECHO \"$lt_cv_sys_global_symbol_to_cdecl\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address='`$ECHO \"$lt_cv_sys_global_symbol_to_c_name_address\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO \"$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\" | $SED \"$delay_single_quote_subst\"`'\nnm_file_list_spec='`$ECHO \"$nm_file_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nlt_sysroot='`$ECHO \"$lt_sysroot\" | $SED \"$delay_single_quote_subst\"`'\nobjdir='`$ECHO \"$objdir\" | $SED \"$delay_single_quote_subst\"`'\nMAGIC_CMD='`$ECHO \"$MAGIC_CMD\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_no_builtin_flag='`$ECHO \"$lt_prog_compiler_no_builtin_flag\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_pic='`$ECHO \"$lt_prog_compiler_pic\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_wl='`$ECHO \"$lt_prog_compiler_wl\" | $SED \"$delay_single_quote_subst\"`'\nlt_prog_compiler_static='`$ECHO \"$lt_prog_compiler_static\" | $SED \"$delay_single_quote_subst\"`'\nlt_cv_prog_compiler_c_o='`$ECHO \"$lt_cv_prog_compiler_c_o\" | $SED \"$delay_single_quote_subst\"`'\nneed_locks='`$ECHO \"$need_locks\" | $SED \"$delay_single_quote_subst\"`'\nMANIFEST_TOOL='`$ECHO \"$MANIFEST_TOOL\" | $SED \"$delay_single_quote_subst\"`'\nDSYMUTIL='`$ECHO \"$DSYMUTIL\" | $SED \"$delay_single_quote_subst\"`'\nNMEDIT='`$ECHO \"$NMEDIT\" | $SED \"$delay_single_quote_subst\"`'\nLIPO='`$ECHO \"$LIPO\" | $SED \"$delay_single_quote_subst\"`'\nOTOOL='`$ECHO \"$OTOOL\" | $SED \"$delay_single_quote_subst\"`'\nOTOOL64='`$ECHO \"$OTOOL64\" | $SED \"$delay_single_quote_subst\"`'\nlibext='`$ECHO \"$libext\" | $SED \"$delay_single_quote_subst\"`'\nshrext_cmds='`$ECHO \"$shrext_cmds\" | $SED \"$delay_single_quote_subst\"`'\nextract_expsyms_cmds='`$ECHO \"$extract_expsyms_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_cmds_need_lc='`$ECHO \"$archive_cmds_need_lc\" | $SED \"$delay_single_quote_subst\"`'\nenable_shared_with_static_runtimes='`$ECHO \"$enable_shared_with_static_runtimes\" | $SED \"$delay_single_quote_subst\"`'\nexport_dynamic_flag_spec='`$ECHO \"$export_dynamic_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\nwhole_archive_flag_spec='`$ECHO \"$whole_archive_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\ncompiler_needs_object='`$ECHO \"$compiler_needs_object\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_from_new_cmds='`$ECHO \"$old_archive_from_new_cmds\" | $SED \"$delay_single_quote_subst\"`'\nold_archive_from_expsyms_cmds='`$ECHO \"$old_archive_from_expsyms_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_cmds='`$ECHO \"$archive_cmds\" | $SED \"$delay_single_quote_subst\"`'\narchive_expsym_cmds='`$ECHO \"$archive_expsym_cmds\" | $SED \"$delay_single_quote_subst\"`'\nmodule_cmds='`$ECHO \"$module_cmds\" | $SED \"$delay_single_quote_subst\"`'\nmodule_expsym_cmds='`$ECHO \"$module_expsym_cmds\" | $SED \"$delay_single_quote_subst\"`'\nwith_gnu_ld='`$ECHO \"$with_gnu_ld\" | $SED \"$delay_single_quote_subst\"`'\nallow_undefined_flag='`$ECHO \"$allow_undefined_flag\" | $SED \"$delay_single_quote_subst\"`'\nno_undefined_flag='`$ECHO \"$no_undefined_flag\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_libdir_flag_spec='`$ECHO \"$hardcode_libdir_flag_spec\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_libdir_separator='`$ECHO \"$hardcode_libdir_separator\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_direct='`$ECHO \"$hardcode_direct\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_direct_absolute='`$ECHO \"$hardcode_direct_absolute\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_minus_L='`$ECHO \"$hardcode_minus_L\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_shlibpath_var='`$ECHO \"$hardcode_shlibpath_var\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_automatic='`$ECHO \"$hardcode_automatic\" | $SED \"$delay_single_quote_subst\"`'\ninherit_rpath='`$ECHO \"$inherit_rpath\" | $SED \"$delay_single_quote_subst\"`'\nlink_all_deplibs='`$ECHO \"$link_all_deplibs\" | $SED \"$delay_single_quote_subst\"`'\nalways_export_symbols='`$ECHO \"$always_export_symbols\" | $SED \"$delay_single_quote_subst\"`'\nexport_symbols_cmds='`$ECHO \"$export_symbols_cmds\" | $SED \"$delay_single_quote_subst\"`'\nexclude_expsyms='`$ECHO \"$exclude_expsyms\" | $SED \"$delay_single_quote_subst\"`'\ninclude_expsyms='`$ECHO \"$include_expsyms\" | $SED \"$delay_single_quote_subst\"`'\nprelink_cmds='`$ECHO \"$prelink_cmds\" | $SED \"$delay_single_quote_subst\"`'\npostlink_cmds='`$ECHO \"$postlink_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfile_list_spec='`$ECHO \"$file_list_spec\" | $SED \"$delay_single_quote_subst\"`'\nvariables_saved_for_relink='`$ECHO \"$variables_saved_for_relink\" | $SED \"$delay_single_quote_subst\"`'\nneed_lib_prefix='`$ECHO \"$need_lib_prefix\" | $SED \"$delay_single_quote_subst\"`'\nneed_version='`$ECHO \"$need_version\" | $SED \"$delay_single_quote_subst\"`'\nversion_type='`$ECHO \"$version_type\" | $SED \"$delay_single_quote_subst\"`'\nrunpath_var='`$ECHO \"$runpath_var\" | $SED \"$delay_single_quote_subst\"`'\nshlibpath_var='`$ECHO \"$shlibpath_var\" | $SED \"$delay_single_quote_subst\"`'\nshlibpath_overrides_runpath='`$ECHO \"$shlibpath_overrides_runpath\" | $SED \"$delay_single_quote_subst\"`'\nlibname_spec='`$ECHO \"$libname_spec\" | $SED \"$delay_single_quote_subst\"`'\nlibrary_names_spec='`$ECHO \"$library_names_spec\" | $SED \"$delay_single_quote_subst\"`'\nsoname_spec='`$ECHO \"$soname_spec\" | $SED \"$delay_single_quote_subst\"`'\ninstall_override_mode='`$ECHO \"$install_override_mode\" | $SED \"$delay_single_quote_subst\"`'\npostinstall_cmds='`$ECHO \"$postinstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\npostuninstall_cmds='`$ECHO \"$postuninstall_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfinish_cmds='`$ECHO \"$finish_cmds\" | $SED \"$delay_single_quote_subst\"`'\nfinish_eval='`$ECHO \"$finish_eval\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_into_libs='`$ECHO \"$hardcode_into_libs\" | $SED \"$delay_single_quote_subst\"`'\nsys_lib_search_path_spec='`$ECHO \"$sys_lib_search_path_spec\" | $SED \"$delay_single_quote_subst\"`'\nsys_lib_dlsearch_path_spec='`$ECHO \"$sys_lib_dlsearch_path_spec\" | $SED \"$delay_single_quote_subst\"`'\nhardcode_action='`$ECHO \"$hardcode_action\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen='`$ECHO \"$enable_dlopen\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen_self='`$ECHO \"$enable_dlopen_self\" | $SED \"$delay_single_quote_subst\"`'\nenable_dlopen_self_static='`$ECHO \"$enable_dlopen_self_static\" | $SED \"$delay_single_quote_subst\"`'\nold_striplib='`$ECHO \"$old_striplib\" | $SED \"$delay_single_quote_subst\"`'\nstriplib='`$ECHO \"$striplib\" | $SED \"$delay_single_quote_subst\"`'\nAS='`$ECHO \"$AS\" | $SED \"$delay_single_quote_subst\"`'\n\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$1\n_LTECHO_EOF'\n}\n\n# Quote evaled strings.\nfor var in SHELL \\\nECHO \\\nPATH_SEPARATOR \\\nSED \\\nGREP \\\nEGREP \\\nFGREP \\\nLD \\\nNM \\\nLN_S \\\nlt_SP2NL \\\nlt_NL2SP \\\nreload_flag \\\nOBJDUMP \\\ndeplibs_check_method \\\nfile_magic_cmd \\\nfile_magic_glob \\\nwant_nocaseglob \\\nDLLTOOL \\\nsharedlib_from_linklib_cmd \\\nAR \\\nAR_FLAGS \\\narchiver_list_spec \\\nSTRIP \\\nRANLIB \\\nCC \\\nCFLAGS \\\ncompiler \\\nlt_cv_sys_global_symbol_pipe \\\nlt_cv_sys_global_symbol_to_cdecl \\\nlt_cv_sys_global_symbol_to_c_name_address \\\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix \\\nnm_file_list_spec \\\nlt_prog_compiler_no_builtin_flag \\\nlt_prog_compiler_pic \\\nlt_prog_compiler_wl \\\nlt_prog_compiler_static \\\nlt_cv_prog_compiler_c_o \\\nneed_locks \\\nMANIFEST_TOOL \\\nDSYMUTIL \\\nNMEDIT \\\nLIPO \\\nOTOOL \\\nOTOOL64 \\\nshrext_cmds \\\nexport_dynamic_flag_spec \\\nwhole_archive_flag_spec \\\ncompiler_needs_object \\\nwith_gnu_ld \\\nallow_undefined_flag \\\nno_undefined_flag \\\nhardcode_libdir_flag_spec \\\nhardcode_libdir_separator \\\nexclude_expsyms \\\ninclude_expsyms \\\nfile_list_spec \\\nvariables_saved_for_relink \\\nlibname_spec \\\nlibrary_names_spec \\\nsoname_spec \\\ninstall_override_mode \\\nfinish_eval \\\nold_striplib \\\nstriplib \\\nAS; do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in reload_cmds \\\nold_postinstall_cmds \\\nold_postuninstall_cmds \\\nold_archive_cmds \\\nextract_expsyms_cmds \\\nold_archive_from_new_cmds \\\nold_archive_from_expsyms_cmds \\\narchive_cmds \\\narchive_expsym_cmds \\\nmodule_cmds \\\nmodule_expsym_cmds \\\nexport_symbols_cmds \\\nprelink_cmds \\\npostlink_cmds \\\npostinstall_cmds \\\npostuninstall_cmds \\\nfinish_cmds \\\nsys_lib_search_path_spec \\\nsys_lib_dlsearch_path_spec; do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\nac_aux_dir='$ac_aux_dir'\nxsi_shell='$xsi_shell'\nlt_shell_append='$lt_shell_append'\n\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'\n\n\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    \"depfiles\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS depfiles\" ;;\n    \"libtool\") CONFIG_COMMANDS=\"$CONFIG_COMMANDS libtool\" ;;\n    \"Makefile\") CONFIG_FILES=\"$CONFIG_FILES Makefile\" ;;\n    \"src/Makefile\") CONFIG_FILES=\"$CONFIG_FILES src/Makefile\" ;;\n    \"src/libsodium/Makefile\") CONFIG_FILES=\"$CONFIG_FILES src/libsodium/Makefile\" ;;\n    \"src/libsodium/include/Makefile\") CONFIG_FILES=\"$CONFIG_FILES src/libsodium/include/Makefile\" ;;\n    \"src/libsodium/include/sodium/version.h\") CONFIG_FILES=\"$CONFIG_FILES src/libsodium/include/sodium/version.h\" ;;\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_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= ac_tmp=\n  trap 'exit_status=$?\n  : \"${ac_tmp:=$tmp}\"\n  { test ! -d \"$ac_tmp\" || rm -fr \"$ac_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 -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\nac_tmp=$tmp\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\n\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 {' >\"$ac_tmp/subs1.awk\" &&\n_ACEOF\n\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 >>\"\\$ac_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 >>\"\\$ac_tmp/subs1.awk\" <<_ACAWK &&\n  for (key in S) S_is_set[key] = 1\n  FS = \"\u0007\"\n\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\n  print line\n}\n\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 < \"$ac_tmp/subs1.awk\" > \"$ac_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 sole $(srcdir),\n# ${srcdir} and @srcdir@ entries 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 ]*=[\t ]*/{\nh\ns///\ns/^/:/\ns/[\t ]*$/:/\ns/:\\$(srcdir):/:/g\ns/:\\${srcdir}:/:/g\ns/:@srcdir@:/:/g\ns/^:*//\ns/:*$//\nx\ns/\\(=[\t ]*\\).*/\\1/\nG\ns/\\n//\ns/^[^=]*=[\t ]*$//\n}'\nfi\n\ncat >>$CONFIG_STATUS <<\\_ACEOF || ac_write_fail=1\nfi # test -n \"$CONFIG_FILES\"\n\n\neval set X \"  :F $CONFIG_FILES      :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=\"$ac_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 1 \"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 >\"$ac_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  ac_MKDIR_P=$MKDIR_P\n  case $MKDIR_P in\n  [\\\\/$]* | ?:[\\\\/]* ) ;;\n  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;\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\ns&@MKDIR_P@&$ac_MKDIR_P&;t t\n$ac_datarootdir_hack\n\"\neval sed \\\"\\$ac_sed_extra\\\" \"$ac_file_inputs\" | $AWK -f \"$ac_tmp/subs.awk\" \\\n  >$ac_tmp/out || 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' \"$ac_tmp/out\"`; test -n \"$ac_out\"; } &&\n  { ac_out=`sed -n '/^[\t ]*datarootdir[\t ]*:*=/p' \\\n      \"$ac_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 \"$ac_tmp/stdin\"\n  case $ac_file in\n  -) cat \"$ac_tmp/out\" && rm -f \"$ac_tmp/out\";;\n  *) rm -f \"$ac_file\" && mv \"$ac_tmp/out\" \"$ac_file\";;\n  esac \\\n  || as_fn_error $? \"could not create $ac_file\" \"$LINENO\" 5\n ;;\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\"\" || {\n  # Older Autoconf quotes --file arguments for eval, but not when files\n  # are listed without --file.  Let's play safe and only enable the eval\n  # if we detect the quoting.\n  case $CONFIG_FILES in\n  *\\'*) eval set x \"$CONFIG_FILES\" ;;\n  *)   set x $CONFIG_FILES ;;\n  esac\n  shift\n  for mf\n  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    # Grep'ing the whole file is not good either: AIX grep has a line\n    # limit of 2048, but all sed's we know have understand at least 4000.\n    if sed -n 's,^#.*generated by automake.*,X,p' \"$mf\" | grep X >/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    # 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\t sed -e 's/\\$(DEPDIR)/'\"$DEPDIR\"'/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\n  done\n}\n ;;\n    \"libtool\":C)\n\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\n\n# The names of the tagged configurations supported by this script.\navailable_tags=\"\"\n\n# ### BEGIN LIBTOOL CONFIG\n\n# Which release of libtool.m4 was used?\nmacro_version=$macro_version\nmacro_revision=$macro_revision\n\n# Whether or not to build shared libraries.\nbuild_libtool_libs=$enable_shared\n\n# Whether or not to build static libraries.\nbuild_old_libs=$enable_static\n\n# What type of objects to build.\npic_mode=$pic_mode\n\n# Whether or not to optimize for fast installation.\nfast_install=$enable_fast_install\n\n# Shell to use when invoking shell scripts.\nSHELL=$lt_SHELL\n\n# An echo program that protects backslashes.\nECHO=$lt_ECHO\n\n# The PATH separator for the build system.\nPATH_SEPARATOR=$lt_PATH_SEPARATOR\n\n# The host system.\nhost_alias=$host_alias\nhost=$host\nhost_os=$host_os\n\n# The build system.\nbuild_alias=$build_alias\nbuild=$build\nbuild_os=$build_os\n\n# A sed program that does not truncate output.\nSED=$lt_SED\n\n# Sed that helps us avoid accidentally triggering echo(1) options like -n.\nXsed=\"\\$SED -e 1s/^X//\"\n\n# A grep program that handles long lines.\nGREP=$lt_GREP\n\n# An ERE matcher.\nEGREP=$lt_EGREP\n\n# A literal string matcher.\nFGREP=$lt_FGREP\n\n# A BSD- or MS-compatible name lister.\nNM=$lt_NM\n\n# Whether we need soft or hard links.\nLN_S=$lt_LN_S\n\n# What is the maximum length of a command?\nmax_cmd_len=$max_cmd_len\n\n# Object file suffix (normally \"o\").\nobjext=$ac_objext\n\n# Executable file suffix (normally \"\").\nexeext=$exeext\n\n# whether the shell understands \"unset\".\nlt_unset=$lt_unset\n\n# turn spaces into newlines.\nSP2NL=$lt_lt_SP2NL\n\n# turn newlines into spaces.\nNL2SP=$lt_lt_NL2SP\n\n# convert \\$build file names to \\$host format.\nto_host_file_cmd=$lt_cv_to_host_file_cmd\n\n# convert \\$build files to toolchain format.\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\n\n# An object symbol dumper.\nOBJDUMP=$lt_OBJDUMP\n\n# Method to check whether dependent libraries are shared objects.\ndeplibs_check_method=$lt_deplibs_check_method\n\n# Command to use when deplibs_check_method = \"file_magic\".\nfile_magic_cmd=$lt_file_magic_cmd\n\n# How to find potential files when deplibs_check_method = \"file_magic\".\nfile_magic_glob=$lt_file_magic_glob\n\n# Find potential files using nocaseglob when deplibs_check_method = \"file_magic\".\nwant_nocaseglob=$lt_want_nocaseglob\n\n# DLL creation program.\nDLLTOOL=$lt_DLLTOOL\n\n# Command to associate shared and link libraries.\nsharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd\n\n# The archiver.\nAR=$lt_AR\n\n# Flags to create an archive.\nAR_FLAGS=$lt_AR_FLAGS\n\n# How to feed a file listing to the archiver.\narchiver_list_spec=$lt_archiver_list_spec\n\n# A symbol stripping program.\nSTRIP=$lt_STRIP\n\n# Commands used to install an old-style archive.\nRANLIB=$lt_RANLIB\nold_postinstall_cmds=$lt_old_postinstall_cmds\nold_postuninstall_cmds=$lt_old_postuninstall_cmds\n\n# Whether to use a lock for old archive extraction.\nlock_old_archive_extraction=$lock_old_archive_extraction\n\n# A C compiler.\nLTCC=$lt_CC\n\n# LTCC compiler flags.\nLTCFLAGS=$lt_CFLAGS\n\n# Take the output of nm and produce a listing of raw symbols and C names.\nglobal_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe\n\n# Transform the output of nm in a proper C declaration.\nglobal_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl\n\n# Transform the output of nm in a C name address pair.\nglobal_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address\n\n# Transform the output of nm in a C name address pair when lib prefix is needed.\nglobal_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix\n\n# Specify filename containing input files for \\$NM.\nnm_file_list_spec=$lt_nm_file_list_spec\n\n# The root where to search for dependent libraries,and in which our libraries should be installed.\nlt_sysroot=$lt_sysroot\n\n# The name of the directory that contains temporary libtool files.\nobjdir=$objdir\n\n# Used to examine libraries when file_magic_cmd begins with \"file\".\nMAGIC_CMD=$MAGIC_CMD\n\n# Must we lock files when doing compilation?\nneed_locks=$lt_need_locks\n\n# Manifest tool.\nMANIFEST_TOOL=$lt_MANIFEST_TOOL\n\n# Tool to manipulate archived DWARF debug symbol files on Mac OS X.\nDSYMUTIL=$lt_DSYMUTIL\n\n# Tool to change global to local symbols on Mac OS X.\nNMEDIT=$lt_NMEDIT\n\n# Tool to manipulate fat objects and archives on Mac OS X.\nLIPO=$lt_LIPO\n\n# ldd/readelf like tool for Mach-O binaries on Mac OS X.\nOTOOL=$lt_OTOOL\n\n# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.\nOTOOL64=$lt_OTOOL64\n\n# Old archive suffix (normally \"a\").\nlibext=$libext\n\n# Shared library suffix (normally \".so\").\nshrext_cmds=$lt_shrext_cmds\n\n# The commands to extract the exported symbol list from a shared archive.\nextract_expsyms_cmds=$lt_extract_expsyms_cmds\n\n# Variables whose values should be saved in libtool wrapper scripts and\n# restored at link time.\nvariables_saved_for_relink=$lt_variables_saved_for_relink\n\n# Do we need the \"lib\" prefix for modules?\nneed_lib_prefix=$need_lib_prefix\n\n# Do we need a version for libraries?\nneed_version=$need_version\n\n# Library versioning type.\nversion_type=$version_type\n\n# Shared library runtime path variable.\nrunpath_var=$runpath_var\n\n# Shared library path variable.\nshlibpath_var=$shlibpath_var\n\n# Is shlibpath searched before the hard-coded library search path?\nshlibpath_overrides_runpath=$shlibpath_overrides_runpath\n\n# Format of library name prefix.\nlibname_spec=$lt_libname_spec\n\n# List of archive names.  First name is the real one, the rest are links.\n# The last name is the one that the linker finds with -lNAME\nlibrary_names_spec=$lt_library_names_spec\n\n# The coded name of the library, if different from the real name.\nsoname_spec=$lt_soname_spec\n\n# Permission mode override for installation of shared libraries.\ninstall_override_mode=$lt_install_override_mode\n\n# Command to use after installation of a shared archive.\npostinstall_cmds=$lt_postinstall_cmds\n\n# Command to use after uninstallation of a shared archive.\npostuninstall_cmds=$lt_postuninstall_cmds\n\n# Commands used to finish a libtool library installation in a directory.\nfinish_cmds=$lt_finish_cmds\n\n# As \"finish_cmds\", except a single script fragment to be evaled but\n# not shown.\nfinish_eval=$lt_finish_eval\n\n# Whether we should hardcode library paths into libraries.\nhardcode_into_libs=$hardcode_into_libs\n\n# Compile-time system search path for libraries.\nsys_lib_search_path_spec=$lt_sys_lib_search_path_spec\n\n# Run-time system search path for libraries.\nsys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec\n\n# Whether dlopen is supported.\ndlopen_support=$enable_dlopen\n\n# Whether dlopen of programs is supported.\ndlopen_self=$enable_dlopen_self\n\n# Whether dlopen of statically linked programs is supported.\ndlopen_self_static=$enable_dlopen_self_static\n\n# Commands to strip libraries.\nold_striplib=$lt_old_striplib\nstriplib=$lt_striplib\n\n# Assembler program.\nAS=$lt_AS\n\n\n# The linker used to build libraries.\nLD=$lt_LD\n\n# How to create reloadable object files.\nreload_flag=$lt_reload_flag\nreload_cmds=$lt_reload_cmds\n\n# Commands used to build an old-style archive.\nold_archive_cmds=$lt_old_archive_cmds\n\n# A language specific compiler.\nCC=$lt_compiler\n\n# Is the compiler the GNU compiler?\nwith_gcc=$GCC\n\n# Compiler flag to turn off builtin functions.\nno_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag\n\n# Additional compiler flags for building library objects.\npic_flag=$lt_lt_prog_compiler_pic\n\n# How to pass a linker flag through the compiler.\nwl=$lt_lt_prog_compiler_wl\n\n# Compiler flag to prevent dynamic linking.\nlink_static_flag=$lt_lt_prog_compiler_static\n\n# Does compiler simultaneously support -c and -o options?\ncompiler_c_o=$lt_lt_cv_prog_compiler_c_o\n\n# Whether or not to add -lc for building shared libraries.\nbuild_libtool_need_lc=$archive_cmds_need_lc\n\n# Whether or not to disallow shared libs when runtime libs are static.\nallow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes\n\n# Compiler flag to allow reflexive dlopens.\nexport_dynamic_flag_spec=$lt_export_dynamic_flag_spec\n\n# Compiler flag to generate shared objects directly from archives.\nwhole_archive_flag_spec=$lt_whole_archive_flag_spec\n\n# Whether the compiler copes with passing no objects directly.\ncompiler_needs_object=$lt_compiler_needs_object\n\n# Create an old-style archive from a shared archive.\nold_archive_from_new_cmds=$lt_old_archive_from_new_cmds\n\n# Create a temporary old-style archive to link instead of a shared archive.\nold_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds\n\n# Commands used to build a shared archive.\narchive_cmds=$lt_archive_cmds\narchive_expsym_cmds=$lt_archive_expsym_cmds\n\n# Commands used to build a loadable module if different from building\n# a shared archive.\nmodule_cmds=$lt_module_cmds\nmodule_expsym_cmds=$lt_module_expsym_cmds\n\n# Whether we are building with GNU ld or not.\nwith_gnu_ld=$lt_with_gnu_ld\n\n# Flag that allows shared libraries with undefined symbols to be built.\nallow_undefined_flag=$lt_allow_undefined_flag\n\n# Flag that enforces no undefined symbols.\nno_undefined_flag=$lt_no_undefined_flag\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=$lt_hardcode_libdir_flag_spec\n\n# Whether we need a single \"-rpath\" flag with a separated argument.\nhardcode_libdir_separator=$lt_hardcode_libdir_separator\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary.\nhardcode_direct=$hardcode_direct\n\n# Set to \"yes\" if using DIR/libNAME\\${shared_ext} during linking hardcodes\n# DIR into the resulting binary and the resulting library dependency is\n# \"absolute\",i.e impossible to change by setting \\${shlibpath_var} if the\n# library is relocated.\nhardcode_direct_absolute=$hardcode_direct_absolute\n\n# Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n# into the resulting binary.\nhardcode_minus_L=$hardcode_minus_L\n\n# Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n# into the resulting binary.\nhardcode_shlibpath_var=$hardcode_shlibpath_var\n\n# Set to \"yes\" if building a shared library automatically hardcodes DIR\n# into the library and all subsequent libraries and executables linked\n# against it.\nhardcode_automatic=$hardcode_automatic\n\n# Set to yes if linker adds runtime paths of dependent libraries\n# to runtime path list.\ninherit_rpath=$inherit_rpath\n\n# Whether libtool must link a program against all its dependency libraries.\nlink_all_deplibs=$link_all_deplibs\n\n# Set to \"yes\" if exported symbols are required.\nalways_export_symbols=$always_export_symbols\n\n# The commands to list exported symbols.\nexport_symbols_cmds=$lt_export_symbols_cmds\n\n# Symbols that should not be listed in the preloaded symbols.\nexclude_expsyms=$lt_exclude_expsyms\n\n# Symbols that must always be exported.\ninclude_expsyms=$lt_include_expsyms\n\n# Commands necessary for linking programs (against libraries) with templates.\nprelink_cmds=$lt_prelink_cmds\n\n# Commands necessary for finishing linking programs.\npostlink_cmds=$lt_postlink_cmds\n\n# Specify filename containing input files.\nfile_list_spec=$lt_file_list_spec\n\n# How to hardcode a shared library path into an executable.\nhardcode_action=$hardcode_action\n\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n\nltmain=\"$ac_aux_dir/ltmain.sh\"\n\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" \\\n     || (rm -f \"$cfgfile\"; exit 1)\n\n  if test x\"$xsi_shell\" = xyes; then\n  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\\\nfunc_dirname ()\\\n{\\\n\\    case ${1} in\\\n\\      */*) func_dirname_result=\"${1%/*}${2}\" ;;\\\n\\      *  ) func_dirname_result=\"${3}\" ;;\\\n\\    esac\\\n} # Extended-shell func_dirname implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_basename ()$/,/^} # func_basename /c\\\nfunc_basename ()\\\n{\\\n\\    func_basename_result=\"${1##*/}\"\\\n} # Extended-shell func_basename implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\\\nfunc_dirname_and_basename ()\\\n{\\\n\\    case ${1} in\\\n\\      */*) func_dirname_result=\"${1%/*}${2}\" ;;\\\n\\      *  ) func_dirname_result=\"${3}\" ;;\\\n\\    esac\\\n\\    func_basename_result=\"${1##*/}\"\\\n} # Extended-shell func_dirname_and_basename implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\\\nfunc_stripname ()\\\n{\\\n\\    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\\\n\\    # positional parameters, so assign one to ordinary parameter first.\\\n\\    func_stripname_result=${3}\\\n\\    func_stripname_result=${func_stripname_result#\"${1}\"}\\\n\\    func_stripname_result=${func_stripname_result%\"${2}\"}\\\n} # Extended-shell func_stripname implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\\\nfunc_split_long_opt ()\\\n{\\\n\\    func_split_long_opt_name=${1%%=*}\\\n\\    func_split_long_opt_arg=${1#*=}\\\n} # Extended-shell func_split_long_opt implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\\\nfunc_split_short_opt ()\\\n{\\\n\\    func_split_short_opt_arg=${1#??}\\\n\\    func_split_short_opt_name=${1%\"$func_split_short_opt_arg\"}\\\n} # Extended-shell func_split_short_opt implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\\\nfunc_lo2o ()\\\n{\\\n\\    case ${1} in\\\n\\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\\\n\\      *)    func_lo2o_result=${1} ;;\\\n\\    esac\\\n} # Extended-shell func_lo2o implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_xform ()$/,/^} # func_xform /c\\\nfunc_xform ()\\\n{\\\n    func_xform_result=${1%.*}.lo\\\n} # Extended-shell func_xform implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_arith ()$/,/^} # func_arith /c\\\nfunc_arith ()\\\n{\\\n    func_arith_result=$(( $* ))\\\n} # Extended-shell func_arith implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_len ()$/,/^} # func_len /c\\\nfunc_len ()\\\n{\\\n    func_len_result=${#1}\\\n} # Extended-shell func_len implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\nfi\n\nif test x\"$lt_shell_append\" = xyes; then\n  sed -e '/^func_append ()$/,/^} # func_append /c\\\nfunc_append ()\\\n{\\\n    eval \"${1}+=\\\\${2}\"\\\n} # Extended-shell func_append implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\\\nfunc_append_quoted ()\\\n{\\\n\\    func_quote_for_eval \"${2}\"\\\n\\    eval \"${1}+=\\\\\\\\ \\\\$func_quote_for_eval_result\"\\\n} # Extended-shell func_append_quoted implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n\n\n  # Save a `func_append' function call where possible by direct use of '+='\n  sed -e 's%func_append \\([a-zA-Z_]\\{1,\\}\\) \"%\\1+=\"%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nelse\n  # Save a `func_append' function call even when '+=' is not available\n  sed -e 's%func_append \\([a-zA-Z_]\\{1,\\}\\) \"%\\1=\"$\\1%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nfi\n\nif test x\"$_lt_function_replace_fail\" = x\":\"; then\n  { $as_echo \"$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile\" >&5\n$as_echo \"$as_me: WARNING: Unable to substitute extended shell functions in $ofile\" >&2;}\nfi\n\n\n   mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n\n ;;\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 1\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"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/configure.ac",
    "content": "AC_PREREQ([2.65])\nAC_INIT([libsodium],[1.0.7],\n  [https://github.com/jedisct1/libsodium/issues],\n  [libsodium],\n  [https://github.com/jedisct1/libsodium])\nAC_CONFIG_AUX_DIR([build-aux])\nAC_CONFIG_MACRO_DIR([m4])\nAC_CONFIG_SRCDIR([src/libsodium/sodium/version.c])\nAC_CANONICAL_HOST\nAM_INIT_AUTOMAKE([1.11 dist-bzip2 tar-ustar foreign subdir-objects])\nm4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])\nAM_MAINTAINER_MODE\nAM_DEP_TRACK\n\nAC_SUBST(VERSION)\nISODATE=`date +%Y-%m-%d`\nAC_SUBST(ISODATE)\n\nSODIUM_LIBRARY_VERSION_MAJOR=9\nSODIUM_LIBRARY_VERSION_MINOR=0\nDLL_VERSION=8\nSODIUM_LIBRARY_VERSION=18:0:0\n#                       | | |\n#                +------+ | +---+\n#                |        |     |\n#             current:revision:age\n#                |        |     |\n#                |        |     +- increment if interfaces have been added\n#                |        |        set to zero if interfaces have been removed\n#                |        |        or changed\n#                |        +- increment if source code has changed\n#                |           set to zero if current is incremented\n#                +- increment if interfaces have been added, removed or changed\nAC_SUBST(SODIUM_LIBRARY_VERSION_MAJOR)\nAC_SUBST(SODIUM_LIBRARY_VERSION_MINOR)\nAC_SUBST(SODIUM_LIBRARY_VERSION)\nAC_SUBST(DLL_VERSION)\n\nLX_CFLAGS=${CFLAGS-NONE}\n\ndnl Path check\n\nAS_IF([test pwd | fgrep ' ' > /dev/null 2>&1],\n  [AC_MSG_WARN([The build directory contains whitespaces - This can cause tests/installation to fail due to limitations of some libtool versions])]\n)\n\ndnl Switches\n\nAC_ARG_ENABLE(ssp,\n[AS_HELP_STRING(--disable-ssp,Do not compile with -fstack-protector)],\n[\n  AS_IF([test \"x$enableval\" = \"xno\"], [\n    enable_ssp=\"no\"\n  ], [\n    enable_ssp=\"yes\"\n  ])\n],\n[\n  enable_ssp=\"yes\"\n])\n\nAC_ARG_ENABLE(asm,\n[AS_HELP_STRING(--disable-asm,Disable assembly implementations)],\n[\n  AS_IF([test \"x$enableval\" = \"xno\"], [\n    enable_asm=\"no\"\n  ], [\n    enable_asm=\"yes\"\n  ])\n],\n[\n  enable_asm=\"yes\"\n])\n\nAS_IF([test \"x$EMSCRIPTEN\" != \"x\"],[\n  enable_asm=\"no\"\n  AC_MSG_WARN([compiling to javascript - asm implementations disabled])\n])\n\nAC_ARG_ENABLE(pie,\n[AS_HELP_STRING(--disable-pie,Do not produce position independent executables)],\n enable_pie=$enableval, enable_pie=\"maybe\")\n\nAS_CASE([$host_os], [mingw*|cygwin*|msys], [enable_pie=\"no\"])\n\nAC_ARG_ENABLE(blocking-random,\n[AS_HELP_STRING(--enable-blocking-random,Enable this switch only if /dev/urandom is totally broken on the target platform)],\n[\n  AS_IF([test \"x$enableval\" = \"xyes\"], [\n    AC_DEFINE([USE_BLOCKING_RANDOM], [1], [/dev/urandom is insecure on the target platform])\n  ])\n])\n\nAC_ARG_ENABLE(minimal,\n[AS_HELP_STRING(--enable-minimal,\n  [Only compile the minimum set of functions required for the high-level API])],\n[\n  AS_IF([test \"x$enableval\" = \"xyes\"], [\n    enable_minimal=\"yes\"\n  ], [\n    enable_minimal=\"no\"\n  ])\n],\n[\n  enable_minimal=\"no\"\n])\nAM_CONDITIONAL([MINIMAL], [test x$enable_minimal = xyes])\n\nAC_ARG_WITH(safecode,\n[AS_HELP_STRING(--with-safecode,For maintainers only - please do not use)],\n[AS_IF([test \"x$withval\" = \"xyes\"], [\n    AC_ARG_VAR([SAFECODE_HOME], [set to the safecode base directory])\n    : ${SAFECODE_HOME:=/opt/safecode}\n    LDFLAGS=\"$LDFLAGS -L${SAFECODE_HOME}/lib\"\n    LIBS=\"$LIBS -lsc_dbg_rt -lpoolalloc_bitmap -lstdc++\"\n    CFLAGS=\"$CFLAGS -fmemsafety\"\n  ])\n])\n\nAC_ARG_ENABLE(debug,\n[AS_HELP_STRING(--enable-debug,For maintainers only - please do not use)],\n[\n  AS_IF([test \"x$enableval\" = \"xyes\"], [\n    AS_IF([test \"x$LX_CFLAGS\" = \"xNONE\"], [\n      nxflags=\"\"\n      for flag in `echo $CFLAGS`; do\n        AS_CASE([$flag],\n          [-O*], [ ],\n          [-g*], [ ],\n          [*], [AS_VAR_APPEND([nxflags], [\" $flag\"])])\n      done\n      CFLAGS=\"$nxflags -O0 -g3\"\n    ])\n    CPPFLAGS=\"$CPPFLAGS -DDEBUG=1\"\n  ])\n])\n\nAC_ARG_ENABLE(opt,\n[AS_HELP_STRING(--enable-opt,Optimize for the native CPU - The resulting library will be faster but not portable)],\n[\n  AS_IF([test \"x$enableval\" = \"xyes\"], [\n    CFLAGS=\"$CFLAGS -flto -march=native\"\n    LDFLAGS=\"$LDFLAGS -flto -march=native\"])\n])\n\nAC_SUBST([MAINT])\n\ndnl Checks\n\nAC_PROG_CC_C99\nAM_PROG_AS\nAC_USE_SYSTEM_EXTENSIONS\n\nAC_CHECK_DEFINE([__native_client__], [NATIVECLIENT=\"yes\"], [])\n\nAC_CHECK_DEFINE([_FORTIFY_SOURCE], [], [\n  AX_CHECK_COMPILE_FLAG([-D_FORTIFY_SOURCE=2],\n    [CPPFLAGS=\"$CPPFLAGS -D_FORTIFY_SOURCE=2\"])\n])\n\nAX_CHECK_COMPILE_FLAG([-fvisibility=hidden],\n  [CFLAGS=\"$CFLAGS -fvisibility=hidden\"])\n\nAS_CASE([$host_os], [cygwin*|mingw*|msys|pw32*|cegcc*], [ ], [\n  AX_CHECK_COMPILE_FLAG([-fPIC], [\n    AX_CHECK_LINK_FLAG([-fPIC],\n      [CFLAGS=\"$CFLAGS -fPIC\"]\n    )\n  ])\n])\n\nAS_IF([test \"$enable_pie\" != \"no\"],[\n  AX_CHECK_COMPILE_FLAG([-fPIE], [\n    AX_CHECK_LINK_FLAG([-fPIE],\n      [AX_CHECK_LINK_FLAG([-pie],\n        [CFLAGS=\"$CFLAGS -fPIE\"\n         LDFLAGS=\"$LDFLAGS -pie\"])\n    ])\n  ])\n])\n\nAX_CHECK_COMPILE_FLAG([-fno-strict-aliasing], [CFLAGS=\"$CFLAGS -fno-strict-aliasing\"])\nAX_CHECK_COMPILE_FLAG([-fno-strict-overflow], [CFLAGS=\"$CFLAGS -fno-strict-overflow\"], [\n  AX_CHECK_COMPILE_FLAG([-fwrapv], [CFLAGS=\"$CFLAGS -fwrapv\"])\n])\n\nLIBTOOL_OLD_FLAGS=\"$LIBTOOL_EXTRA_FLAGS\"\nLIBTOOL_EXTRA_FLAGS=\"$LIBTOOL_EXTRA_FLAGS -version-info $SODIUM_LIBRARY_VERSION\"\nAC_ARG_ENABLE(soname-versions,\n  [AC_HELP_STRING([--enable-soname-versions], [enable soname versions (must be disabled for Android) (default: enabled)])],\n    [\n        AS_IF([test \"x$enableval\" = \"xno\"], [\n          LIBTOOL_EXTRA_FLAGS=\"$LIBTOOL_OLD_FLAGS -avoid-version\"\n        ])\n    ]\n)\n\nAS_CASE([$host_os],\n  [cygwin*|mingw*|msys|pw32*|cegcc*], [\n    AX_CHECK_LINK_FLAG([-Wl,--dynamicbase], [LDFLAGS=\"$LDFLAGS -Wl,--dynamicbase\"])\n    AX_CHECK_LINK_FLAG([-Wl,--nxcompat], [LDFLAGS=\"$LDFLAGS -Wl,--nxcompat\"])\n  ])\n\nAS_IF([test \"x$enable_ssp\" != \"xno\"],[\n\nAS_CASE([$host_os],\n  [cygwin*|mingw*|msys|pw32*|cegcc*|*aix*|*sunos*|*solaris*], [ ],\n  [*], [\n    AX_CHECK_COMPILE_FLAG([-fstack-protector], [\n      AX_CHECK_LINK_FLAG([-fstack-protector],\n        [CFLAGS=\"$CFLAGS -fstack-protector\"]\n      )\n    ])\n  ])\n])\n\nAX_CHECK_COMPILE_FLAG([-Winit-self], [CFLAGS=\"$CFLAGS -Winit-self\"])\nAX_CHECK_COMPILE_FLAG([-Wwrite-strings], [CFLAGS=\"$CFLAGS -Wwrite-strings\"])\nAX_CHECK_COMPILE_FLAG([-Wdiv-by-zero], [CFLAGS=\"$CFLAGS -Wdiv-by-zero\"])\nAX_CHECK_COMPILE_FLAG([-Wsometimes-uninitialized], [CFLAGS=\"$CFLAGS -Wsometimes-uninitialized\"])\n\nAC_ARG_VAR([CWFLAGS], [define to compilation flags for generating extra warnings])\n\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wall], [CWFLAGS=\"$CWFLAGS -Wall\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wextra], [CWFLAGS=\"$CWFLAGS -Wextra\"])\n\nAC_MSG_CHECKING(for clang)\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[\n#ifndef __clang__\nbe sad\n#endif\n]])],\n  [AC_MSG_RESULT(yes)\n   AX_CHECK_COMPILE_FLAG([$CWFLAGS -Wno-unknown-warning-option],\n     [CWFLAGS=\"$CWFLAGS -Wno-unknown-warning-option\"])\n  ],\n  [AC_MSG_RESULT(no)\n])\n\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wbad-function-cast], [CWFLAGS=\"$CWFLAGS -Wbad-function-cast\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wcast-align], [CWFLAGS=\"$CWFLAGS -Wcast-align\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wcast-qual], [CWFLAGS=\"$CWFLAGS -Wcast-qual\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wchar-subscripts], [CWFLAGS=\"$CWFLAGS -Wchar-subscripts\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wcomment], [CWFLAGS=\"$CWFLAGS -Wcomment\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wfloat-equal], [CWFLAGS=\"$CWFLAGS -Wfloat-equal\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wformat=2], [CWFLAGS=\"$CWFLAGS -Wformat=2\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wimplicit], [CWFLAGS=\"$CWFLAGS -Wimplicit\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wmissing-declarations], [CWFLAGS=\"$CWFLAGS -Wmissing-declarations\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wmissing-prototypes], [CWFLAGS=\"$CWFLAGS -Wmissing-prototypes\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wnormalized=id], [CWFLAGS=\"$CWFLAGS -Wnormalized=id\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Woverride-init], [CWFLAGS=\"$CWFLAGS -Woverride-init\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wparentheses], [CWFLAGS=\"$CWFLAGS -Wparentheses\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wpointer-arith], [CWFLAGS=\"$CWFLAGS -Wpointer-arith\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wredundant-decls], [CWFLAGS=\"$CWFLAGS -Wredundant-decls\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wstrict-prototypes], [CWFLAGS=\"$CWFLAGS -Wstrict-prototypes\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wswitch-enum], [CWFLAGS=\"$CWFLAGS -Wswitch-enum\"])\nAX_CHECK_COMPILE_FLAG([$CWFLAGS -Wvariable-decl], [CWFLAGS=\"$CWFLAGS -Wvariable-decl\"])\n\nAX_CHECK_LINK_FLAG([-Wl,-z,relro], [LDFLAGS=\"$LDFLAGS -Wl,-z,relro\"])\nAX_CHECK_LINK_FLAG([-Wl,-z,now], [LDFLAGS=\"$LDFLAGS -Wl,-z,now\"])\nAX_CHECK_LINK_FLAG([-Wl,-z,noexecstack], [LDFLAGS=\"$LDFLAGS -Wl,-z,noexecstack\"])\n\nLT_INIT\nAC_SUBST(LIBTOOL_DEPS)\n\nAC_ARG_VAR([AR], [path to the ar utility])\nAC_CHECK_TOOL([AR], [ar], [ar])\n\ndnl Checks for headers\n\nAS_IF([test \"x$EMSCRIPTEN\" = \"x\"],[\n\n  AC_MSG_CHECKING(for MMX instructions set)\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-mmmx], [CFLAGS=\"$CFLAGS -mmmx\"])\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"mmx\")\n#include <mmintrin.h>\n]], [[ __m64 x = _mm_setzero_si64(); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_MMINTRIN_H], [1], [mmx is available])\n     AX_CHECK_COMPILE_FLAG([-mmmx], [CFLAGS_MMX=\"-mmmx\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  AC_MSG_CHECKING(for SSE2 instructions set)\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-msse2], [CFLAGS=\"$CFLAGS -msse2\"])\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"sse2\")\n#ifndef __SSE2__\n# define __SSE2__\n#endif\n#include <emmintrin.h>\n]], [[ __m128d x = _mm_setzero_pd(); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_EMMINTRIN_H], [1], [sse2 is available])\n     AX_CHECK_COMPILE_FLAG([-msse2], [CFLAGS_SSE2=\"-msse2\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-msse3], [CFLAGS=\"$CFLAGS -msse3\"])\n  AC_MSG_CHECKING(for SSE3 instructions set)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"sse3\")\n#include <pmmintrin.h>\n]], [[ __m128 x = _mm_addsub_ps(_mm_cvtpd_ps(_mm_setzero_pd()),\n                                _mm_cvtpd_ps(_mm_setzero_pd())); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_PMMINTRIN_H], [1], [sse3 is available])\n     AX_CHECK_COMPILE_FLAG([-msse3], [CFLAGS_SSE3=\"-msse3\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-mssse3], [CFLAGS=\"$CFLAGS -mssse3\"])\n  AC_MSG_CHECKING(for SSSE3 instructions set)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"ssse3\")\n#include <tmmintrin.h>\n]], [[ __m64 x = _mm_abs_pi32(_m_from_int(0)); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_TMMINTRIN_H], [1], [ssse3 is available])\n     AX_CHECK_COMPILE_FLAG([-mssse3], [CFLAGS_SSSE3=\"-mssse3\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-msse4.1], [CFLAGS=\"$CFLAGS -msse4.1\"])\n  AC_MSG_CHECKING(for SSE4.1 instructions set)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"sse4.1\")\n#include <smmintrin.h>\n]], [[ __m128i x = _mm_minpos_epu16(_mm_setzero_si128()); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_SMMINTRIN_H], [1], [sse4.1 is available])\n     AX_CHECK_COMPILE_FLAG([-msse4.1], [CFLAGS_SSE41=\"-msse4.1\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-mavx], [CFLAGS=\"$CFLAGS -mavx\"])\n  AC_MSG_CHECKING(for AVX instructions set)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"avx\")\n#include <immintrin.h>\n]], [[ _mm256_zeroall(); ]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_AVXINTRIN_H], [1], [AVX is available])\n     AX_CHECK_COMPILE_FLAG([-mavx], [CFLAGS_AVX=\"-mavx\"])],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n  oldcflags=\"$CFLAGS\"\n  AX_CHECK_COMPILE_FLAG([-maes], [CFLAGS=\"$CFLAGS -maes\"])\n  AX_CHECK_COMPILE_FLAG([-mpclmul], [CFLAGS=\"$CFLAGS -mpclmul\"])\n  AC_MSG_CHECKING(for AESNI instructions set and PCLMULQDQ)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#pragma GCC target(\"aes\")\n#pragma GCC target(\"pclmul\")\n#include <wmmintrin.h>\n]], [[ __m128i x = _mm_aesimc_si128(_mm_setzero_si128());\n       __m128i y = _mm_clmulepi64_si128(_mm_setzero_si128(), _mm_setzero_si128(), 0);]])],\n    [AC_MSG_RESULT(yes)\n     AC_DEFINE([HAVE_WMMINTRIN_H], [1], [aesni is available])\n     AX_CHECK_COMPILE_FLAG([-maes], [CFLAGS_AESNI=\"-maes\"])\n     AX_CHECK_COMPILE_FLAG([-mpclmul], [CFLAGS_PCLMUL=\"-mpclmul\"])\n     ],\n    [AC_MSG_RESULT(no)])\n  CFLAGS=\"$oldcflags\"\n\n])\n\nAC_SUBST(CFLAGS_MMX)\nAC_SUBST(CFLAGS_SSE2)\nAC_SUBST(CFLAGS_SSE3)\nAC_SUBST(CFLAGS_SSSE3)\nAC_SUBST(CFLAGS_SSE41)\nAC_SUBST(CFLAGS_AESNI)\nAC_SUBST(CFLAGS_PCLMUL)\n\nAC_CHECK_HEADERS([sys/mman.h])\n\ndnl Checks for typedefs, structures, and compiler characteristics.\n\nAC_C_INLINE\nAC_C_BIGENDIAN(\n  AC_DEFINE(NATIVE_BIG_ENDIAN, 1, [machine is bigendian]),\n  AC_DEFINE(NATIVE_LITTLE_ENDIAN, 1, [machine is littleendian]),\n  AC_MSG_ERROR([unknown endianess]),\n  AC_MSG_ERROR([universal endianess is not supported - compile separately and use lipo(1)])\n)\n\nAC_MSG_CHECKING(whether __STDC_LIMIT_MACROS is required)\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#include <limits.h>\n#include <stdint.h>\n]], [[\n(void) SIZE_MAX;\n(void) UINT64_MAX;\n]])],\n  [AC_MSG_RESULT(no)],\n  [AC_MSG_RESULT(yes)\n   CPPFLAGS=\"$CPPFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS\"\n])\n\nHAVE_AMD64_ASM_V=0\nAS_IF([test \"$enable_asm\" != \"no\"],[\n  AC_MSG_CHECKING(whether we can use x86_64 asm code)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n  ]], [[\n#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)\n# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)\n#  error Windows x86_64 calling conventions are not supported yet\n# endif\n/* neat */\n#else\n# error !x86_64\n#endif\nunsigned char i = 0, o = 0, t;\n__asm__ __volatile__ (\"pxor %%xmm12, %%xmm6 \\n\"\n                      \"movb (%[i]), %[t] \\n\"\n                      \"addb %[t], (%[o]) \\n\"\n                      : [t] \"=&r\"(t)\n                      : [o] \"D\"(&o), [i] \"S\"(&i)\n                      : \"memory\", \"flags\", \"cc\");\n]])],\n  [AC_MSG_RESULT(yes)\n   AC_DEFINE([HAVE_AMD64_ASM], [1], [x86_64 asm code can be used])\n   HAVE_AMD64_ASM_V=1],\n  [AC_MSG_RESULT(no)])\n])\nAM_CONDITIONAL([HAVE_AMD64_ASM], [test $HAVE_AMD64_ASM_V = 1])\nAC_SUBST(HAVE_AMD64_ASM_V)\n\nHAVE_AVX_ASM_V=0\nAS_IF([test \"$enable_asm\" != \"no\"],[\n  AC_MSG_CHECKING(whether we can assemble AVX opcodes)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n  ]], [[\n#if defined(__amd64) || defined(__amd64__) || defined(__x86_64__)\n# if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MINGW64__) || defined(_WIN32) || defined(_WIN64)\n#  error Windows x86_64 calling conventions are not supported yet\n# endif\n/* neat */\n#else\n# error !x86_64\n#endif\n__asm__ __volatile__ (\"vpunpcklqdq %xmm0,%xmm13,%xmm0\");\n]])],\n  [AC_MSG_RESULT(yes)\n   AC_DEFINE([HAVE_AVX_ASM], [1], [AVX opcodes are supported])\n   HAVE_AVX_ASM_V=1],\n  [AC_MSG_RESULT(no)])\n])\nAM_CONDITIONAL([HAVE_AVX_ASM], [test $HAVE_AVX_ASM_V = 1])\nAC_SUBST(HAVE_AVX_ASM_V)\n\nAC_MSG_CHECKING(for 128-bit arithmetic)\nHAVE_TI_MODE_V=0\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#if !defined(__GNUC__) && !defined(__SIZEOF_INT128__)\n# error mode(TI) is a gcc extension, and __int128 is not available\n#endif\n#if defined(__clang__) && !defined(__x86_64__)\n# error clang does not properly handle the 128-bit type on 32-bit systems\n#endif\n#ifndef NATIVE_LITTLE_ENDIAN\n# error libsodium currently expects a little endian CPU for the 128-bit type\n#endif\n#ifdef __EMSCRIPTEN__\n# error emscripten currently supports only shift operations on integers \\\n#       larger than 64 bits\n#endif\n#include <stddef.h>\n#include <stdint.h>\n#if defined(__SIZEOF_INT128__)\ntypedef unsigned __int128 uint128_t;\n#else\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n#endif\nvoid fcontract(uint128_t *t) {\n  *t += 0x8000000000000 - 1;\n}\n]], [[\n(void) fcontract;\n]])],\n[AC_MSG_RESULT(yes)\n AC_DEFINE([HAVE_TI_MODE], [1], [gcc TI mode is available])\n HAVE_TI_MODE_V=1],\n[AC_MSG_RESULT(no)])\nAM_CONDITIONAL([HAVE_TI_MODE], [test $HAVE_TI_MODE_V = 1])\nAC_SUBST(HAVE_TI_MODE_V)\n\nHAVE_CPUID_V=0\nAS_IF([test \"$enable_asm\" != \"no\"],[\n  AC_MSG_CHECKING(for cpuid instruction)\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[\nunsigned int cpu_info[4];\n__asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" :\n                      \"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]),\n                      \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :\n                      \"0\" (0U), \"2\" (0U));\n  ]])],\n  [AC_MSG_RESULT(yes)\n   AC_DEFINE([HAVE_CPUID], [1], [cpuid instruction is available])\n   HAVE_CPUID_V=1],\n  [AC_MSG_RESULT(no)])\n  ])\nAC_SUBST(HAVE_CPUID_V)\n\nAC_MSG_CHECKING(if weak symbols are supported)\nAC_LINK_IFELSE([AC_LANG_PROGRAM([[\n__attribute__((weak)) void __dummy(void *x) { }\nvoid f(void *x) { __dummy(x); }\n]], [[ ]]\n)],\n[AC_MSG_RESULT(yes)\n AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [weak symbols are supported])],\n[AC_MSG_RESULT(no)])\n\nAC_MSG_CHECKING(if data alignment is required)\naligned_access_required=yes\nAS_CASE([$host_cpu],\n  [i*86 | x86_64 | powerpc* | s390*],\n    [aligned_access_required=no],\n  [arm*],\n    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[\n#ifndef __ARM_FEATURE_UNALIGNED\n# error data alignment is required\n#endif\n      ]], [[]])], [aligned_access_required=no], [])]\n)\nAS_IF([test \"x$aligned_access_required\" = \"xyes\"],\n  [AC_MSG_RESULT(yes)],\n  [AC_MSG_RESULT(no)\n   AC_DEFINE([CPU_UNALIGNED_ACCESS], [1], [unaligned memory access is supported])])\n\ndnl Checks for functions and headers\n\nAS_IF([test \"x$EMSCRIPTEN\" = \"x\"],[\n  AC_CHECK_FUNCS([arc4random arc4random_buf])\n  AC_CHECK_FUNCS([mmap mlock madvise mprotect explicit_bzero])\n])\nAC_CHECK_FUNCS([posix_memalign getpid])\n\nAC_SUBST([LIBTOOL_EXTRA_FLAGS])\n\nTEST_LDFLAGS=''\nAS_IF([test \"x$EMSCRIPTEN\" != \"x\"],[\n  EXEEXT=.js\n  TEST_LDFLAGS='--memory-init-file 0 --pre-js pre.js.inc -s NO_BROWSER=1 -s RESERVED_FUNCTION_POINTERS=8'\n])\nAC_SUBST(TEST_LDFLAGS)\nAM_CONDITIONAL([EMSCRIPTEN], [test \"x$EMSCRIPTEN\" != \"x\"])\n\nAM_CONDITIONAL([NATIVECLIENT], [test \"x$NATIVECLIENT\" != \"x\"])\n\ndnl Libtool.\n\nLT_INIT([dlopen])\nAC_LIBTOOL_WIN32_DLL\ngl_LD_OUTPUT_DEF\n\ndnl Output.\n\nAH_VERBATIM([NDEBUG], [/* Always evaluate assert() calls */\n#ifdef NDEBUG\n#/**/undef/**/ NDEBUG\n#endif])\n\nAC_CONFIG_FILES([Makefile\n                 src/Makefile\n                 src/libsodium/Makefile\n                 src/libsodium/include/Makefile\n                 src/libsodium/include/sodium/version.h\n                 ])\nAC_OUTPUT\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/libsodium.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: @PACKAGE_NAME@\nVersion: @PACKAGE_VERSION@\nDescription: A portable, cross-compilable, installable, packageable fork of NaCl, with a compatible API.\n\nLibs: -L${libdir} -lsodium\nCflags: -I${includedir}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/libsodium.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.23107.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"libsodium\", \"libsodium.vcxproj\", \"{A185B162-6CB6-4502-B03F-B56F7699A8D9}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tDebug|x64 = Debug|x64\n\t\tDebugDLL|Win32 = DebugDLL|Win32\n\t\tDebugDLL|x64 = DebugDLL|x64\n\t\tRelease|Win32 = Release|Win32\n\t\tRelease|x64 = Release|x64\n\t\tReleaseDLL|Win32 = ReleaseDLL|Win32\n\t\tReleaseDLL|x64 = ReleaseDLL|x64\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Debug|x64.ActiveCfg = Debug|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Debug|x64.Build.0 = Debug|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.DebugDLL|Win32.ActiveCfg = DebugDLL|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.DebugDLL|Win32.Build.0 = DebugDLL|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.DebugDLL|x64.ActiveCfg = DebugDLL|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.DebugDLL|x64.Build.0 = DebugDLL|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Release|Win32.Build.0 = Release|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Release|x64.ActiveCfg = Release|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.Release|x64.Build.0 = Release|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.ReleaseDLL|Win32.ActiveCfg = ReleaseDLL|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.ReleaseDLL|Win32.Build.0 = ReleaseDLL|Win32\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.ReleaseDLL|x64.ActiveCfg = ReleaseDLL|x64\n\t\t{A185B162-6CB6-4502-B03F-B56F7699A8D9}.ReleaseDLL|x64.Build.0 = ReleaseDLL|x64\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/libsodium.vcxproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup Label=\"ProjectConfigurations\">\n    <ProjectConfiguration Include=\"DebugDLL|Win32\">\n      <Configuration>DebugDLL</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"DebugDLL|x64\">\n      <Configuration>DebugDLL</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|Win32\">\n      <Configuration>Debug</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Debug|x64\">\n      <Configuration>Debug</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseDLL|Win32\">\n      <Configuration>ReleaseDLL</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"ReleaseDLL|x64\">\n      <Configuration>ReleaseDLL</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|Win32\">\n      <Configuration>Release</Configuration>\n      <Platform>Win32</Platform>\n    </ProjectConfiguration>\n    <ProjectConfiguration Include=\"Release|x64\">\n      <Configuration>Release</Configuration>\n      <Platform>x64</Platform>\n    </ProjectConfiguration>\n  </ItemGroup>\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>{A185B162-6CB6-4502-B03F-B56F7699A8D9}</ProjectGuid>\n    <Keyword>Win32Proj</Keyword>\n    <RootNamespace>libsodium</RootNamespace>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>true</UseDebugLibraries>\n    <CharacterSet>MultiByte</CharacterSet>\n    <WholeProgramOptimization>false</WholeProgramOptimization>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"Configuration\">\n    <ConfigurationType>StaticLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'\" Label=\"Configuration\">\n    <ConfigurationType>DynamicLibrary</ConfigurationType>\n    <UseDebugLibraries>false</UseDebugLibraries>\n    <WholeProgramOptimization>true</WholeProgramOptimization>\n    <CharacterSet>MultiByte</CharacterSet>\n    <PlatformToolset>v140</PlatformToolset>\n  </PropertyGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.props\" />\n  <ImportGroup Label=\"ExtensionSettings\">\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Label=\"PropertySheets\" Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <ImportGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'\" Label=\"PropertySheets\">\n    <Import Project=\"$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props\" Condition=\"exists('$(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props')\" Label=\"LocalAppDataPlatform\" />\n    <Import Project=\"msvc-scripts\\sodium.props\" />\n  </ImportGroup>\n  <PropertyGroup Label=\"UserMacros\" />\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|Win32'\">\n    <LinkIncremental>true</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|x64'\">\n    <LinkIncremental>true</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'\">\n    <LinkIncremental>false</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'\">\n    <LinkIncremental>false</LinkIncremental>\n    <OutDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\</OutDir>\n    <IntDir>$(SolutionDir)Build\\$(Configuration)\\$(Platform)\\Intermediate\\</IntDir>\n  </PropertyGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>SODIUM_STATIC;SODIUM_EXPORT=;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n      <AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|Win32'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>SODIUM_EXPORT=__declspec(dllexport);SODIUM_DLL_EXPORT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n      <AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Debug|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>SODIUM_STATIC;SODIUM_EXPORT=;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='DebugDLL|x64'\">\n    <ClCompile>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <WarningLevel>Level3</WarningLevel>\n      <Optimization>Disabled</Optimization>\n      <PreprocessorDefinitions>SODIUM_EXPORT=__declspec(dllexport);SODIUM_DLL_EXPORT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>Full</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>SODIUM_STATIC;SODIUM_EXPORT=;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|Win32'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>Full</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>SODIUM_EXPORT=__declspec(dllexport);SODIUM_DLL_EXPORT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\n      <AdditionalIncludeDirectories>$(SolutionDir);$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include\\sodium;$(SolutionDir)src\\libsodium\\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='Release|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>SODIUM_STATIC;SODIUM_EXPORT=;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$(Configuration)|$(Platform)'=='ReleaseDLL|x64'\">\n    <ClCompile>\n      <WarningLevel>Level3</WarningLevel>\n      <PrecompiledHeader>\n      </PrecompiledHeader>\n      <Optimization>MaxSpeed</Optimization>\n      <FunctionLevelLinking>true</FunctionLevelLinking>\n      <IntrinsicFunctions>true</IntrinsicFunctions>\n      <PreprocessorDefinitions>SODIUM_EXPORT=__declspec(dllexport);SODIUM_DLL_EXPORT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n      <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>\n      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\n    </ClCompile>\n    <Link>\n      <SubSystem>Console</SubSystem>\n      <GenerateDebugInformation>true</GenerateDebugInformation>\n      <EnableCOMDATFolding>true</EnableCOMDATFolding>\n      <OptimizeReferences>true</OptimizeReferences>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemGroup>\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-load-sse2.h\" />\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-load-sse41.h\" />\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-round.h\" />\n    <ClInclude Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\onetimeauth_poly1305.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\core.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_aead_aes256gcm.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_aead_chacha20poly1305.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha256.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha512.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha512256.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_box.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_box_curve25519xsalsa20poly1305.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_hsalsa20.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa20.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa2012.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa208.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_generichash.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_generichash_blake2b.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash_sha256.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash_sha512.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_int32.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_int64.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_onetimeauth.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_onetimeauth_poly1305.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_pwhash_scryptsalsa208sha256.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_scalarmult.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_scalarmult_curve25519.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_secretbox.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_secretbox_xsalsa20poly1305.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_shorthash.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_shorthash_siphash24.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign_ed25519.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign_edwards25519sha512batch.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_aes128ctr.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_chacha20.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa20.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa2012.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa208.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_xsalsa20.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint16.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint32.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint64.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint8.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_16.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_32.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_64.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\export.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes_salsa20_random.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes_sysrandom.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\runtime.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\utils.h\" />\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\version.h\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"src\\libsodium\\crypto_aead\\aes256gcm\\aesni\\aead_aes256gcm_aesni.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_aead\\chacha20poly1305\\sodium\\aead_chacha20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\crypto_auth.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\auth_hmacsha256_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\cp\\hmac_hmacsha256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\cp\\verify_hmacsha256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\auth_hmacsha512_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\cp\\hmac_hmacsha512.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\cp\\verify_hmacsha512.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\auth_hmacsha512256_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\cp\\hmac_hmacsha512256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\cp\\verify_hmacsha512256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box_easy.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box_seal.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\box_curve25519xsalsa20poly1305_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\after_curve25519xsalsa20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\before_curve25519xsalsa20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\box_curve25519xsalsa20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\keypair_curve25519xsalsa20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\hsalsa20\\core_hsalsa20_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\hsalsa20\\ref2\\core_hsalsa20.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa2012\\core_salsa2012_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa2012\\ref\\core_salsa2012.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa208\\core_salsa208_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa208\\ref\\core_salsa208.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa20\\core_salsa20_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa20\\ref\\core_salsa20.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\generichash_blake2_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-ref.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-sse41.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-ssse3.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-ref.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\generichash_blake2b.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\crypto_generichash.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\crypto_hash.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha256\\hash_sha256_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha256\\cp\\hash_sha256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha512\\hash_sha512_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha512\\cp\\hash_sha512.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\crypto_onetimeauth.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\donna\\poly1305_donna.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\onetimeauth_poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\crypto_scrypt-common.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\nosse\\pwhash_scryptsalsa208sha256_nosse.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\pbkdf2-sha256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\pwhash_scryptsalsa208sha256.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\scrypt_platform.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\sse\\pwhash_scryptsalsa208sha256_sse.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\crypto_scalarmult.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\donna_c64\\curve25519_donna_c64.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_0_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_1_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_add_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_copy_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_cswap_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_frombytes_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_invert_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_mul121666_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_mul_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_sq_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_sub_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_tobytes_curve25519_ref10.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\curve25519_sandy2x.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\fe51_invert.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\fe_frombytes_sandy2x.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\scalarmult_curve25519.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\crypto_secretbox.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\crypto_secretbox_easy.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\xsalsa20poly1305\\ref\\box_xsalsa20poly1305.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\xsalsa20poly1305\\secretbox_xsalsa20poly1305_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\crypto_shorthash.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\siphash24\\ref\\shorthash_siphash24.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\siphash24\\shorthash_siphash24_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\crypto_sign.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_0.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_1.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_add.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_cmov.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_copy.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_frombytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_invert.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_isnegative.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_isnonzero.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_mul.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_neg.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_pow22523.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sq.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sq2.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sub.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_tobytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_add.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_double_scalarmult.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_frombytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_madd.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_msub.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p1p1_to_p2.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p1p1_to_p3.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p2_0.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p2_dbl.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_0.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_dbl.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_tobytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_to_cached.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_to_p2.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_precomp_0.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_scalarmult_base.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_sub.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_tobytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\keypair.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\obsolete.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\open.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sc_muladd.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sc_reduce.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sign.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\sign_ed25519_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\afternm_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\beforenm_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\common_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\consts_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\int128_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\stream_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\xor_afternm_aes128ctr.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\stream_aes128ctr_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\chacha20\\ref\\stream_chacha20_ref.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\chacha20\\stream_chacha20.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\crypto_stream.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\ref\\stream_salsa2012.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\ref\\xor_salsa2012.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\stream_salsa2012_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\ref\\stream_salsa208.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\ref\\xor_salsa208.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\stream_salsa208_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\ref\\stream_salsa20_ref.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\ref\\xor_salsa20_ref.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\stream_salsa20_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\ref\\stream_xsalsa20.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\ref\\xor_xsalsa20.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\stream_xsalsa20_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\16\\ref\\verify_16.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\16\\verify_16_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\32\\ref\\verify_32.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\32\\verify_32_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\64\\ref\\verify_64.c\" />\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\64\\verify_64_api.c\" />\n    <ClCompile Include=\"src\\libsodium\\randombytes\\randombytes.c\" />\n    <ClCompile Include=\"src\\libsodium\\randombytes\\salsa20\\randombytes_salsa20_random.c\" />\n    <ClCompile Include=\"src\\libsodium\\randombytes\\sysrandom\\randombytes_sysrandom.c\" />\n    <ClCompile Include=\"src\\libsodium\\sodium\\core.c\" />\n    <ClCompile Include=\"src\\libsodium\\sodium\\runtime.c\" />\n    <ClCompile Include=\"src\\libsodium\\sodium\\utils.c\" />\n    <ClCompile Include=\"src\\libsodium\\sodium\\version.c\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\sandy2x.S\" />\n  </ItemGroup>\n  <Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\" />\n  <ImportGroup Label=\"ExtensionTargets\">\n  </ImportGroup>\n</Project>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/libsodium.vcxproj.filters",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <ItemGroup>\n    <Filter Include=\"Source Files\">\n      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\n      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\n    </Filter>\n    <Filter Include=\"Header Files\">\n      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\n      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\n    </Filter>\n    <Filter Include=\"Resource Files\">\n      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\n      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>\n    </Filter>\n  </ItemGroup>\n  <ItemGroup>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\core.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha256.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha512.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_auth_hmacsha512256.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_box.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_box_curve25519xsalsa20poly1305.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_hsalsa20.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa20.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa208.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_core_salsa2012.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_generichash.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_generichash_blake2b.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash_sha256.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_hash_sha512.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_int32.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_int64.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_onetimeauth.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_scalarmult.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_scalarmult_curve25519.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_secretbox.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_secretbox_xsalsa20poly1305.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_shorthash.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_shorthash_siphash24.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign_ed25519.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_sign_edwards25519sha512batch.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_aes128ctr.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa20.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa208.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_salsa2012.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_xsalsa20.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint8.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint16.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint32.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_uint64.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_16.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_32.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_verify_64.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\export.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes_salsa20_random.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\randombytes_sysrandom.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\utils.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\version.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_pwhash_scryptsalsa208sha256.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\runtime.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_stream_chacha20.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_aead_aes256gcm.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_aead_chacha20poly1305.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\include\\sodium\\crypto_onetimeauth_poly1305.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-load-sse2.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-load-sse41.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-round.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n    <ClInclude Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\onetimeauth_poly1305.h\">\n      <Filter>Header Files</Filter>\n    </ClInclude>\n  </ItemGroup>\n  <ItemGroup>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\hsalsa20\\ref2\\core_hsalsa20.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\hsalsa20\\core_hsalsa20_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa20\\ref\\core_salsa20.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa208\\ref\\core_salsa208.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa2012\\ref\\core_salsa2012.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\auth_hmacsha256_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\auth_hmacsha512_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\auth_hmacsha512256_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\crypto_auth.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\cp\\hmac_hmacsha256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\cp\\hmac_hmacsha512.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\cp\\hmac_hmacsha512256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512\\cp\\verify_hmacsha512.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha512256\\cp\\verify_hmacsha512256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\after_curve25519xsalsa20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\box_curve25519xsalsa20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\box_curve25519xsalsa20poly1305_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\keypair_curve25519xsalsa20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa20\\core_salsa20_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa208\\core_salsa208_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_core\\salsa2012\\core_salsa2012_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-ref.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\crypto_generichash.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\generichash_blake2_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\generichash_blake2b.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\crypto_hash.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha256\\cp\\hash_sha256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha256\\hash_sha256_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha512\\cp\\hash_sha512.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_hash\\sha512\\hash_sha512_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\crypto_onetimeauth.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\onetimeauth_poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\crypto_scalarmult.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\xsalsa20poly1305\\ref\\box_xsalsa20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\crypto_secretbox.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\xsalsa20poly1305\\secretbox_xsalsa20poly1305_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\crypto_shorthash.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\siphash24\\ref\\shorthash_siphash24.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_shorthash\\siphash24\\shorthash_siphash24_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\crypto_sign.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_0.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_1.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_add.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_cmov.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_copy.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_frombytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_invert.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_isnegative.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_isnonzero.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_mul.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_neg.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_pow22523.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sq.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sq2.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_sub.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\fe_tobytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_add.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_double_scalarmult.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_frombytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_madd.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_msub.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p1p1_to_p2.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p1p1_to_p3.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p2_0.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p2_dbl.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_0.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_dbl.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_to_cached.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_to_p2.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_p3_tobytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_precomp_0.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_scalarmult_base.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_sub.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\ge_tobytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\keypair.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\open.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sc_muladd.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sc_reduce.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\sign.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\sign_ed25519_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\afternm_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\beforenm_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\common_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\consts_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\crypto_stream.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\int128_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\stream_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\stream_aes128ctr_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\stream_salsa20_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\ref\\stream_salsa20_ref.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\ref\\stream_salsa208.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\stream_salsa208_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\ref\\stream_salsa2012.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\stream_salsa2012_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\ref\\stream_xsalsa20.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\stream_xsalsa20_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\aes128ctr\\portable\\xor_afternm_aes128ctr.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa20\\ref\\xor_salsa20_ref.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa208\\ref\\xor_salsa208.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\salsa2012\\ref\\xor_salsa2012.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\xsalsa20\\ref\\xor_xsalsa20.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\16\\ref\\verify_16.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\16\\verify_16_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\32\\ref\\verify_32.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\32\\verify_32_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\64\\ref\\verify_64.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_verify\\64\\verify_64_api.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\sodium\\core.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\sodium\\utils.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\sodium\\version.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\randombytes\\randombytes.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\randombytes\\salsa20\\randombytes_salsa20_random.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\randombytes\\sysrandom\\randombytes_sysrandom.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_auth\\hmacsha256\\cp\\verify_hmacsha256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\crypto_scrypt-common.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\pbkdf2-sha256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\pwhash_scryptsalsa208sha256.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\scrypt_platform.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\sodium\\runtime.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box_easy.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\crypto_box_seal.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_secretbox\\crypto_secretbox_easy.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\nosse\\pwhash_scryptsalsa208sha256_nosse.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_pwhash\\scryptsalsa208sha256\\sse\\pwhash_scryptsalsa208sha256_sse.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\chacha20\\stream_chacha20.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_stream\\chacha20\\ref\\stream_chacha20_ref.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_0_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_1_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_add_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_copy_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_cswap_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_frombytes_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_invert_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_mul_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_mul121666_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_sq_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_sub_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\fe_tobytes_curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_box\\curve25519xsalsa20poly1305\\ref\\before_curve25519xsalsa20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_aead\\aes256gcm\\aesni\\aead_aes256gcm_aesni.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_aead\\chacha20poly1305\\sodium\\aead_chacha20poly1305.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-ref.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-sse41.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_generichash\\blake2\\ref\\blake2b-compress-ssse3.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\scalarmult_curve25519.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\donna_c64\\curve25519_donna_c64.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\ref10\\curve25519_ref10.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\curve25519_sandy2x.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\fe_frombytes_sandy2x.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\fe51_invert.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_onetimeauth\\poly1305\\donna\\poly1305_donna.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n    <ClCompile Include=\"src\\libsodium\\crypto_sign\\ed25519\\ref10\\obsolete.c\">\n      <Filter>Source Files</Filter>\n    </ClCompile>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"src\\libsodium\\crypto_scalarmult\\curve25519\\sandy2x\\sandy2x.S\">\n      <Filter>Source Files</Filter>\n    </None>\n  </ItemGroup>\n</Project>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/ax_check_compile_flag.m4",
    "content": "# ===========================================================================\n#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])\n#\n# DESCRIPTION\n#\n#   Check whether the given FLAG works with the current language's compiler\n#   or gives an error.  (Warnings, however, are ignored)\n#\n#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on\n#   success/failure.\n#\n#   If EXTRA-FLAGS is defined, it is added to the current language's default\n#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with\n#   the flags: \"CFLAGS EXTRA-FLAGS FLAG\".  This can for example be used to\n#   force the compiler to issue an error when a bad flag is given.\n#\n#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this\n#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>\n#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   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 General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 2\n\nAC_DEFUN([AX_CHECK_COMPILE_FLAG],\n[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF\nAS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl\nAC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [\n  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS\n  _AC_LANG_PREFIX[]FLAGS=\"$[]_AC_LANG_PREFIX[]FLAGS $4 $1\"\n  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],\n  [[char x[42U], fodder = 0;if (fodder > -1000 && fgets(x,1000,stdin)) puts(x)]])],\n    [AS_VAR_SET(CACHEVAR,[yes])],\n    [AS_VAR_SET(CACHEVAR,[no])])\n  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])\nAS_VAR_IF(CACHEVAR,yes,\n  [m4_default([$2], :)],\n  [m4_default([$3], :)])\nAS_VAR_POPDEF([CACHEVAR])dnl\n])dnl AX_CHECK_COMPILE_FLAGS\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/ax_check_define.m4",
    "content": "# ===========================================================================\n#      http://www.gnu.org/software/autoconf-archive/ax_check_define.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AC_CHECK_DEFINE([symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT])\n#   AX_CHECK_DEFINE([includes],[symbol], [ACTION-IF-FOUND], [ACTION-IF-NOT])\n#\n# DESCRIPTION\n#\n#   Complements AC_CHECK_FUNC but it does not check for a function but for a\n#   define to exist. Consider a usage like:\n#\n#    AC_CHECK_DEFINE(__STRICT_ANSI__, CFLAGS=\"$CFLAGS -D_XOPEN_SOURCE=500\")\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>\n#\n#   This program is free software; you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation; either version 3 of the License, or (at your\n#   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 General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 8\n\nAU_ALIAS([AC_CHECK_DEFINED], [AC_CHECK_DEFINE])\nAC_DEFUN([AC_CHECK_DEFINE],[\nAS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$1])dnl\nAC_CACHE_CHECK([for $1 defined], ac_var,\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[\n  #ifdef $1\n  int ok;\n  #else\n  choke me\n  #endif\n]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)]))\nAS_IF([test AS_VAR_GET(ac_var) != \"no\"], [$2], [$3])dnl\nAS_VAR_POPDEF([ac_var])dnl\n])\n\nAU_ALIAS([AX_CHECK_DEFINED], [AX_CHECK_DEFINE])\nAC_DEFUN([AX_CHECK_DEFINE],[\nAS_VAR_PUSHDEF([ac_var],[ac_cv_defined_$2_$1])dnl\nAC_CACHE_CHECK([for $2 defined in $1], ac_var,\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <$1>]], [[\n  #ifdef $2\n  int ok;\n  #else\n  choke me\n  #endif\n]])],[AS_VAR_SET(ac_var, yes)],[AS_VAR_SET(ac_var, no)]))\nAS_IF([test AS_VAR_GET(ac_var) != \"no\"], [$3], [$4])dnl\nAS_VAR_POPDEF([ac_var])dnl\n])\n\nAC_DEFUN([AX_CHECK_FUNC],\n[AS_VAR_PUSHDEF([ac_var], [ac_cv_func_$2])dnl\nAC_CACHE_CHECK([for $2], ac_var,\ndnl AC_LANG_FUNC_LINK_TRY\n[AC_LINK_IFELSE([AC_LANG_PROGRAM([$1\n                #undef $2\n                char $2 ();],[\n                char (*f) () = $2;\n                return f != $2; ])],\n                [AS_VAR_SET(ac_var, yes)],\n                [AS_VAR_SET(ac_var, no)])])\nAS_IF([test AS_VAR_GET(ac_var) = yes], [$3], [$4])dnl\nAS_VAR_POPDEF([ac_var])dnl\n])# AC_CHECK_FUNC\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/ax_check_gnu_make.m4",
    "content": "# ===========================================================================\n#     http://www.gnu.org/software/autoconf-archive/ax_check_gnu_make.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CHECK_GNU_MAKE()\n#\n# DESCRIPTION\n#\n#   This macro searches for a GNU version of make. If a match is found, the\n#   makefile variable `ifGNUmake' is set to the empty string, otherwise it\n#   is set to \"#\". This is useful for including a special features in a\n#   Makefile, which cannot be handled by other versions of make. The\n#   variable _cv_gnu_make_command is set to the command to invoke GNU make\n#   if it exists, the empty string otherwise.\n#\n#   Here is an example of its use:\n#\n#   Makefile.in might contain:\n#\n#     # A failsafe way of putting a dependency rule into a makefile\n#     $(DEPEND):\n#             $(CC) -MM $(srcdir)/*.c > $(DEPEND)\n#\n#     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))\n#     @ifGNUmake@ include $(DEPEND)\n#     @ifGNUmake@ endif\n#\n#   Then configure.in would normally contain:\n#\n#     AX_CHECK_GNU_MAKE()\n#     AC_OUTPUT(Makefile)\n#\n#   Then perhaps to cause gnu make to override any other make, we could do\n#   something like this (note that GNU make always looks for GNUmakefile\n#   first):\n#\n#     if  ! test x$_cv_gnu_make_command = x ; then\n#             mv Makefile GNUmakefile\n#             echo .DEFAULT: > Makefile ;\n#             echo \\  $_cv_gnu_make_command \\$@ >> Makefile;\n#     fi\n#\n#   Then, if any (well almost any) other make is called, and GNU make also\n#   exists, then the other make wraps the GNU make.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 John Darrington <j.darrington@elvis.murdoch.edu.au>\n#\n#   Copying and distribution of this file, with or without modification, are\n#   permitted in any medium without royalty provided the copyright notice\n#   and this notice are preserved. This file is offered as-is, without any\n#   warranty.\n\n#serial 7\n\nAC_DEFUN([AX_CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command,\n                _cv_gnu_make_command='' ;\ndnl Search all the common names for GNU make\n                for a in \"$MAKE\" make gmake gnumake ; do\n                        if test -z \"$a\" ; then continue ; fi ;\n                        if  ( sh -c \"$a --version\" 2> /dev/null | grep GNU  2>&1 > /dev/null ) ;  then\n                                _cv_gnu_make_command=$a ;\n                                break;\n                        fi\n                done ;\n        ) ;\ndnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise\n        if test  \"x$_cv_gnu_make_command\" != \"x\"  ; then\n                ifGNUmake='' ;\n        else\n                ifGNUmake='#' ;\n                AC_MSG_RESULT(\"Not found\");\n        fi\n        AC_SUBST(ifGNUmake)\n] )\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/ax_check_link_flag.m4",
    "content": "# ===========================================================================\n#    http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])\n#\n# DESCRIPTION\n#\n#   Check whether the given FLAG works with the linker or gives an error.\n#   (Warnings, however, are ignored)\n#\n#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on\n#   success/failure.\n#\n#   If EXTRA-FLAGS is defined, it is added to the linker's default flags\n#   when the check is done.  The check is thus made with the flags: \"LDFLAGS\n#   EXTRA-FLAGS FLAG\".  This can for example be used to force the linker to\n#   issue an error when a bad flag is given.\n#\n#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this\n#   macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>\n#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   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 General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 2\n\nAC_DEFUN([AX_CHECK_LINK_FLAG],\n[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF\nAS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl\nAC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [\n  ax_check_save_flags=$LDFLAGS\n  LDFLAGS=\"$LDFLAGS $4 $1\"\n  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]],\n  [[char x[42U];if (fgets(x,1000,stdin)) puts(x)]])],\n    [AS_VAR_SET(CACHEVAR,[yes])],\n    [AS_VAR_SET(CACHEVAR,[no])])\n  LDFLAGS=$ax_check_save_flags])\nAS_VAR_IF(CACHEVAR,yes,\n  [m4_default([$2], :)],\n  [m4_default([$3], :)])\nAS_VAR_POPDEF([CACHEVAR])dnl\n])dnl AX_CHECK_LINK_FLAGS\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/ld-output-def.m4",
    "content": "# ld-output-def.m4 serial 2\ndnl Copyright (C) 2008-2013 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\ndnl From Simon Josefsson\n\n# gl_LD_OUTPUT_DEF()\n# -------------\n# Check if linker supports -Wl,--output-def and define automake\n# conditional HAVE_LD_OUTPUT_DEF if it is.\nAC_DEFUN([gl_LD_OUTPUT_DEF],\n[\n  AC_CACHE_CHECK([if gcc/ld supports -Wl,--output-def],\n    [gl_cv_ld_output_def],\n    [if test \"$enable_shared\" = no; then\n       gl_cv_ld_output_def=\"not needed, shared libraries are disabled\"\n     else\n       gl_ldflags_save=$LDFLAGS\n       LDFLAGS=\"-Wl,--output-def,conftest.def\"\n       AC_LINK_IFELSE([AC_LANG_PROGRAM([])],\n                   [gl_cv_ld_output_def=yes],\n                   [gl_cv_ld_output_def=no])\n       rm -f conftest.def\n       LDFLAGS=\"$gl_ldflags_save\"\n     fi])\n  AM_CONDITIONAL([HAVE_LD_OUTPUT_DEF], test \"x$gl_cv_ld_output_def\" = \"xyes\")\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/m4/pkg.m4",
    "content": "# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-\n# serial 1 (pkg-config-0.24)\n# \n# Copyright © 2004 Scott James Remnant <scott@netsplit.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 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# PKG_PROG_PKG_CONFIG([MIN-VERSION])\n# ----------------------------------\nAC_DEFUN([PKG_PROG_PKG_CONFIG],\n[m4_pattern_forbid([^_?PKG_[A-Z_]+$])\nm4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])\nm4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])\nAC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])\nAC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])\nAC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])\n\nif test \"x$ac_cv_env_PKG_CONFIG_set\" != \"xset\"; then\n\tAC_PATH_TOOL([PKG_CONFIG], [pkg-config])\nfi\nif test -n \"$PKG_CONFIG\"; then\n\t_pkg_min_version=m4_default([$1], [0.9.0])\n\tAC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])\n\tif $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then\n\t\tAC_MSG_RESULT([yes])\n\telse\n\t\tAC_MSG_RESULT([no])\n\t\tPKG_CONFIG=\"\"\n\tfi\nfi[]dnl\n])# PKG_PROG_PKG_CONFIG\n\n# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])\n#\n# Check to see whether a particular set of modules exists.  Similar\n# to PKG_CHECK_MODULES(), but does not set variables or print errors.\n#\n# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])\n# only at the first occurence in configure.ac, so if the first place\n# it's called might be skipped (such as if it is within an \"if\", you\n# have to call PKG_CHECK_EXISTS manually\n# --------------------------------------------------------------\nAC_DEFUN([PKG_CHECK_EXISTS],\n[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl\nif test -n \"$PKG_CONFIG\" && \\\n    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors \"$1\"]); then\n  m4_default([$2], [:])\nm4_ifvaln([$3], [else\n  $3])dnl\nfi])\n\n# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])\n# ---------------------------------------------\nm4_define([_PKG_CONFIG],\n[if test -n \"$$1\"; then\n    pkg_cv_[]$1=\"$$1\"\n elif test -n \"$PKG_CONFIG\"; then\n    PKG_CHECK_EXISTS([$3],\n                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 \"$3\" 2>/dev/null`\n\t\t      test \"x$?\" != \"x0\" && pkg_failed=yes ],\n\t\t     [pkg_failed=yes])\n else\n    pkg_failed=untried\nfi[]dnl\n])# _PKG_CONFIG\n\n# _PKG_SHORT_ERRORS_SUPPORTED\n# -----------------------------\nAC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],\n[AC_REQUIRE([PKG_PROG_PKG_CONFIG])\nif $PKG_CONFIG --atleast-pkgconfig-version 0.20; then\n        _pkg_short_errors_supported=yes\nelse\n        _pkg_short_errors_supported=no\nfi[]dnl\n])# _PKG_SHORT_ERRORS_SUPPORTED\n\n\n# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],\n# [ACTION-IF-NOT-FOUND])\n#\n#\n# Note that if there is a possibility the first call to\n# PKG_CHECK_MODULES might not happen, you should be sure to include an\n# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac\n#\n#\n# --------------------------------------------------------------\nAC_DEFUN([PKG_CHECK_MODULES],\n[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl\nAC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl\nAC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl\n\npkg_failed=no\nAC_MSG_CHECKING([for $1])\n\n_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])\n_PKG_CONFIG([$1][_LIBS], [libs], [$2])\n\nm4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS\nand $1[]_LIBS to avoid the need to call pkg-config.\nSee the pkg-config man page for more details.])\n\nif test $pkg_failed = yes; then\n   \tAC_MSG_RESULT([no])\n        _PKG_SHORT_ERRORS_SUPPORTED\n        if test $_pkg_short_errors_supported = yes; then\n\t        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs \"$2\" 2>&1`\n        else \n\t        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs \"$2\" 2>&1`\n        fi\n\t# Put the nasty error message in config.log where it belongs\n\techo \"$$1[]_PKG_ERRORS\" >&AS_MESSAGE_LOG_FD\n\n\tm4_default([$4], [AC_MSG_ERROR(\n[Package requirements ($2) were not met:\n\n$$1_PKG_ERRORS\n\nConsider adjusting the PKG_CONFIG_PATH environment variable if you\ninstalled software in a non-standard prefix.\n\n_PKG_TEXT])[]dnl\n        ])\nelif test $pkg_failed = untried; then\n     \tAC_MSG_RESULT([no])\n\tm4_default([$4], [AC_MSG_FAILURE(\n[The pkg-config script could not be found or is too old.  Make sure it\nis in your PATH or set the PKG_CONFIG environment variable to the full\npath to pkg-config.\n\n_PKG_TEXT\n\nTo get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl\n        ])\nelse\n\t$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS\n\t$1[]_LIBS=$pkg_cv_[]$1[]_LIBS\n        AC_MSG_RESULT([yes])\n\t$3\nfi[]dnl\n])# PKG_CHECK_MODULES\n\n\n# PKG_INSTALLDIR(DIRECTORY)\n# -------------------------\n# Substitutes the variable pkgconfigdir as the location where a module\n# should install pkg-config .pc files. By default the directory is\n# $libdir/pkgconfig, but the default can be changed by passing\n# DIRECTORY. The user can override through the --with-pkgconfigdir\n# parameter.\nAC_DEFUN([PKG_INSTALLDIR],\n[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])\nm4_pushdef([pkg_description],\n    [pkg-config installation directory @<:@]pkg_default[@:>@])\nAC_ARG_WITH([pkgconfigdir],\n    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,\n    [with_pkgconfigdir=]pkg_default)\nAC_SUBST([pkgconfigdir], [$with_pkgconfigdir])\nm4_popdef([pkg_default])\nm4_popdef([pkg_description])\n]) dnl PKG_INSTALLDIR\n\n\n# PKG_NOARCH_INSTALLDIR(DIRECTORY)\n# -------------------------\n# Substitutes the variable noarch_pkgconfigdir as the location where a\n# module should install arch-independent pkg-config .pc files. By\n# default the directory is $datadir/pkgconfig, but the default can be\n# changed by passing DIRECTORY. The user can override through the\n# --with-noarch-pkgconfigdir parameter.\nAC_DEFUN([PKG_NOARCH_INSTALLDIR],\n[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])\nm4_pushdef([pkg_description],\n    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])\nAC_ARG_WITH([noarch-pkgconfigdir],\n    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,\n    [with_noarch_pkgconfigdir=]pkg_default)\nAC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])\nm4_popdef([pkg_default])\nm4_popdef([pkg_description])\n]) dnl PKG_NOARCH_INSTALLDIR\n\n\n# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,\n# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])\n# -------------------------------------------\n# Retrieves the value of the pkg-config variable for the given module.\nAC_DEFUN([PKG_CHECK_VAR],\n[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl\nAC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl\n\n_PKG_CONFIG([$1], [variable=\"][$3][\"], [$2])\nAS_VAR_COPY([$1], [pkg_cv_][$1])\n\nAS_VAR_IF([$1], [\"\"], [$5], [$4])dnl\n])# PKG_CHECK_VAR\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/packaging/nuget/.gitignore",
    "content": "*.nupkg\npackage.nuspec\npackage.targets\npackage.xml\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/packaging/nuget/package.bat",
    "content": "@ECHO OFF\nECHO Started nuget packaging build.\nECHO.\nREM http://www.nuget.org/packages/gsl\ngsl -q -script:package.gsl package.config\nECHO.\nREM http://nuget.codeplex.com/releases\nnuget pack package.nuspec -verbosity detailed\nECHO.\nECHO NOTE: Ignore warnings not applicable to native code: \"Issue: Assembly outside lib folder.\"\nECHO.\nECHO Completed nuget packaging build. The package is in the following folder:\nCD"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/packaging/nuget/package.config",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- These values are populated into the package.gsl templates by package.bat. -->\n<!-- The target attribute controls path and file name only, id controls package naming. -->\n<package id=\"libsodium_vc120\" target=\"libsodium\" version = \"1.0.3.0\" pathversion=\"1_0_3_0\" platformtoolset=\"v120\" />\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/packaging/nuget/package.gsl",
    "content": ".#  Generate NuGet nuspec file (for subsequent packing).\n.#\n.#  This is a code generator built using the iMatix GSL code generation\n.#  language. See https://github.com/imatix/gsl for details. This script\n.#  is licensed under MIT/X11.\n.#\n.echo \"Generating package.nuspec from template.\"\n.output \"package.nuspec\"\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n#################################################################\n#   GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY    #\n#################################################################\n-->\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/01/nuspec.xsd\">\n    <metadata minClientVersion=\"2.5\">\n        <id>$(package.id)</id>\n        <version>$(package.version)</version>\n        <title>$(package.id)</title>\n        <authors>libsodium contributors</authors>\n        <owners>Eric Voskuil</owners>\n        <licenseUrl>https://raw.github.com/jedisct1/libsodium/master/LICENSE</licenseUrl>\n        <projectUrl>https://github.com/jedisct1/libsodium</projectUrl>\n        <iconUrl>http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Salt_shaker_on_white_background.jpg/220px-Salt_shaker_on_white_background.jpg</iconUrl>\n        <requireLicenseAcceptance>true</requireLicenseAcceptance>\n        <developmentDependency>false</developmentDependency>\n        <description>Sodium is a portable, cross-compilable, installable, packageable fork of NaCl (based on the latest released upstream version nacl-20110221), with a compatible API.</description>\n        <summary>Portable fork of NaCl, packaged for Visual Studio 2013 (v120) and CTP_Nov2013 compilers.</summary>\n        <releaseNotes>https://raw.github.com/jedisct1/libsodium/master/ChangeLog</releaseNotes>\n        <copyright>(c) 2013-2014, Frank Denis (attribution required)</copyright>\n        <tags>native, NaCl, salt, sodium, libodium, C++</tags>\n        <dependencies>\n.for dependency\n            <dependency id=\"$(id)\" version=\"$(version)\" />\n.endfor\n        </dependencies>        \n        <!-- Salt shaker icon by Dubravko Soric :\n        http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Salt_shaker_on_white_background.jpg/220px-Salt_shaker_on_white_background.jpg -->\n    </metadata>\n    <files>\n        <!-- include -->\n                \n        <file src=\"..\\\\..\\\\src\\\\libsodium\\\\include\\\\sodium.h\" target=\"build\\\\native\\\\include\" />\n        <file src=\"..\\\\..\\\\src\\\\libsodium\\\\include\\\\sodium\\\\*.*\" target=\"build\\\\native\\\\include\\\\sodium\" />    \n\n        <!-- targets -->\n      \n        <file src=\"package.targets\" target=\"build\\\\native\\\\$(package.id).targets\" />\n        <file src=\"package.xml\" target=\"build\\\\native\\\\package.xml\" />\n                \n        <!-- libraries -->\n\n        <!-- x86 Dynamic libraries (.dll) -->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).dll\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).dll\" />\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).dll\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).dll\" />\n\n        <!-- x86 Debugging symbols (.pdb) -->\n        <!--<file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).pdb\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).pdb\" />-->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).pdb\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).pdb\" />\n\n        <!-- x86 Import libraries (.imp.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).imp.lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).imp.lib\" />\n\n        <!-- x86 Export libraries (.exp) -->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).exp\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).exp\" />\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).exp\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).exp\" />\n\n        <!-- x86 Static libraries (.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\static\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-s-$(package.pathversion).lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\static\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-sgd-$(package.pathversion).lib\" />\n\n        <!-- x86 Static link time code generation libraries (.ltcg.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Release\\\\$(package.platformtoolset)\\\\ltcg\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-s-$(package.pathversion).ltcg.lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\Win32\\\\Debug\\\\$(package.platformtoolset)\\\\ltcg\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-sgd-$(package.pathversion).ltcg.lib\" />\n\n        <!-- x64 Dynamic libraries (.dll) -->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).dll\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).dll\" />\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).dll\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).dll\" />\n\n        <!-- x64 Debugging symbols (.pdb) -->\n        <!--<file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).pdb\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).pdb\" />-->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).pdb\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).pdb\" />\n\n        <!-- x64 Import libraries (.imp.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).imp.lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).imp.lib\" />\n\n        <!-- x64 Export libraries (.exp) -->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).exp\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).exp\" />\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\dynamic\\\\$(package.target).exp\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).exp\" />\n\n        <!-- x64 Static libraries (.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\static\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-s-$(package.pathversion).lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\static\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-sgd-$(package.pathversion).lib\" />\n\n        <!-- x64 Static link time code generation libraries (.ltcg.lib) -->\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Release\\\\$(package.platformtoolset)\\\\ltcg\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-s-$(package.pathversion).ltcg.lib\" />\n        <file src=\"..\\\\..\\\\bin\\\\x64\\\\Debug\\\\$(package.platformtoolset)\\\\ltcg\\\\$(package.target).lib\" target=\"build\\\\native\\\\bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-sgd-$(package.pathversion).ltcg.lib\" />\n    </files>\n<!--\n#################################################################\n#   GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY    #\n#################################################################\n-->\n</package>\n.echo \"Generating package.targets from template.\"\n.output \"package.targets\"\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n#################################################################\n#   GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY    #\n#################################################################\n-->\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <!-- user interface -->\n  <ItemGroup>\n    <PropertyPageSchema Include=\"$\\(MSBuildThisFileDirectory)package.xml\" />\n  </ItemGroup>\n\n  <!-- general -->\n  <ItemDefinitionGroup>\n    <ClCompile>\n      <AdditionalIncludeDirectories>$\\(MSBuildThisFileDirectory)include\\\\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\n    </ClCompile>\n    <Link>\n      <AdditionalDependencies>advapi32.lib;crypt32.lib;%(AdditionalDependencies)</AdditionalDependencies>\n      <AdditionalLibraryDirectories>$\\(MSBuildThisFileDirectory)bin\\\\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Linkage-$(package.target))' == 'static' Or '$\\(Linkage-$(package.target))' == 'ltcg'\">\n    <ClCompile>\n      <PreprocessorDefinitions>SODIUM_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>\n    </ClCompile>\n  </ItemDefinitionGroup>\n\n  <!-- static libraries -->\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'static' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-s-$(package.pathversion).lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'static' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-sgd-$(package.pathversion).lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'static' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-s-$(package.pathversion).lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'static' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-sgd-$(package.pathversion).lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n\n  <!-- static ltcg libraries -->\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'ltcg' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-s-$(package.pathversion).ltcg.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'ltcg' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-sgd-$(package.pathversion).ltcg.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'ltcg' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-s-$(package.pathversion).ltcg.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'ltcg' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-sgd-$(package.pathversion).ltcg.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  \n  <!-- dynamic import libraries -->\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).imp.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).imp.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Release')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).imp.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n  <ItemDefinitionGroup Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Debug')) != -1\">\n    <Link>\n      <AdditionalDependencies>$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).imp.lib;%(AdditionalDependencies)</AdditionalDependencies>\n    </Link>\n  </ItemDefinitionGroup>\n\n  <!-- dynamic libraries with debug symbols -->\n  <Target Name=\"$(package.target)_AfterBuild\" AfterTargets=\"AfterBuild\" />\n  <Target Name=\"$(package.target)_AfterBuild_Win32_$(package.platformtoolset)_Dynamic_Release\"\n          Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Release')) != -1\"\n          AfterTargets=\"$(package.target)_AfterBuild\">\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).dll\" DestinationFiles=\"$\\(TargetDir)$(package.target).dll\" SkipUnchangedFiles=\"true\" />\n    <!--<Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-$(package.pathversion).pdb\" DestinationFiles=\"$\\(TargetDir)$(package.target).pdb\" SkipUnchangedFiles=\"true\" />-->\n  </Target>\n  <Target Name=\"$(package.target)_AfterBuild_Win32_$(package.platformtoolset)_Dynamic_Debug\"\n          Condition=\"'$\\(Platform)' == 'Win32' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Debug')) != -1\"\n          AfterTargets=\"$(package.target)_AfterBuild\">\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).dll\" DestinationFiles=\"$\\(TargetDir)$(package.target).dll\" SkipUnchangedFiles=\"true\" />\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x86-$(package.platformtoolset)-mt-gd-$(package.pathversion).pdb\" DestinationFiles=\"$\\(TargetDir)$(package.target).pdb\" SkipUnchangedFiles=\"true\" />\n  </Target>\n  <Target Name=\"$(package.target)_AfterBuild_x64_$(package.platformtoolset)_Dynamic_Release\"\n          Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Release')) != -1\"\n          AfterTargets=\"$(package.target)_AfterBuild\">\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).dll\" DestinationFiles=\"$\\(TargetDir)$(package.target).dll\" SkipUnchangedFiles=\"true\" />\n    <!--<Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-$(package.pathversion).pdb\" DestinationFiles=\"$\\(TargetDir)$(package.target).pdb\" SkipUnchangedFiles=\"true\" />-->\n  </Target>\n  <Target Name=\"$(package.target)_AfterBuild_x64_$(package.platformtoolset)_Dynamic_Debug\"\n          Condition=\"'$\\(Platform)' == 'x64' And ('$\\(PlatformToolset)' == '$(package.platformtoolset)' Or '$\\(PlatformToolset)' == 'CTP_Nov2013') And '$\\(Linkage-$(package.target))' == 'dynamic' And $\\(Configuration.IndexOf('Debug')) != -1\"\n          AfterTargets=\"$(package.target)_AfterBuild\">\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).dll\" DestinationFiles=\"$\\(TargetDir)$(package.target).dll\" SkipUnchangedFiles=\"true\" />\n    <Copy SourceFiles=\"$\\(MSBuildThisFileDirectory)bin\\\\$(package.target)-x64-$(package.platformtoolset)-mt-gd-$(package.pathversion).pdb\" DestinationFiles=\"$\\(TargetDir)$(package.target).pdb\" SkipUnchangedFiles=\"true\" />\n  </Target>\n\n<!--\n#################################################################\n#   GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY    #\n#################################################################\n-->\n</Project>\n.echo \"Generating package.xml (ui extension) from template.\"\n.output \"package.xml\"\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n#################################################################\n#   GENERATED SOURCE CODE, DO NOT EDIT EXCEPT EXPERIMENTALLY    #\n#################################################################\n-->\n<ProjectSchemaDefinitions xmlns=\"clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework\">\n  <Rule Name=\"Linkage-$(package.target)-uiextension\" PageTemplate=\"tool\" DisplayName=\"NuGet Dependencies\" SwitchPrefix=\"/\" Order=\"1\">\n    <Rule.Categories>\n      <Category Name=\"$(package.target)\" DisplayName=\"$(package.target)\" />\n    </Rule.Categories>\n    <Rule.DataSource>\n      <DataSource Persistence=\"ProjectFile\" ItemType=\"\" />\n    </Rule.DataSource>\n    <EnumProperty Name=\"Linkage-$(package.target)\" DisplayName=\"Linkage\" Description=\"How NuGet $(package.target) will be linked into the output of this project\" Category=\"$(package.target)\">\n      <EnumValue Name=\"\" DisplayName=\"Not linked\" />\n      <EnumValue Name=\"dynamic\" DisplayName=\"Dynamic (DLL)\" />\n      <EnumValue Name=\"static\" DisplayName=\"Static (LIB)\" />\n      <EnumValue Name=\"ltcg\" DisplayName=\"Static using link time compile generation (LTCG)\" />\n    </EnumProperty>\n  </Rule>\n</ProjectSchemaDefinitions>"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/Makefile.am",
    "content": "\nSUBDIRS = \\\n\tlibsodium\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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@\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = src\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \\\n\t$(top_srcdir)/m4/ax_check_define.m4 \\\n\t$(top_srcdir)/m4/ax_check_link_flag.m4 \\\n\t$(top_srcdir)/m4/ld-output-def.m4 $(top_srcdir)/m4/libtool.m4 \\\n\t$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \\\n\t$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \\\n\t$(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nSOURCES =\nDIST_SOURCES =\nRECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \\\n\tctags-recursive dvi-recursive html-recursive info-recursive \\\n\tinstall-data-recursive install-dvi-recursive \\\n\tinstall-exec-recursive install-html-recursive \\\n\tinstall-info-recursive install-pdf-recursive \\\n\tinstall-ps-recursive install-recursive installcheck-recursive \\\n\tinstalldirs-recursive pdf-recursive ps-recursive \\\n\ttags-recursive uninstall-recursive\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nRECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive\t\\\n  distclean-recursive maintainer-clean-recursive\nam__recursive_targets = \\\n  $(RECURSIVE_TARGETS) \\\n  $(RECURSIVE_CLEAN_TARGETS) \\\n  $(am__extra_recursive_targets)\nAM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \\\n\tdistdir\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDIST_SUBDIRS = $(SUBDIRS)\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nam__relativize = \\\n  dir0=`pwd`; \\\n  sed_first='s,^\\([^/]*\\)/.*$$,\\1,'; \\\n  sed_rest='s,^[^/]*/*,,'; \\\n  sed_last='s,^.*/\\([^/]*\\)$$,\\1,'; \\\n  sed_butlast='s,/*[^/]*$$,,'; \\\n  while test -n \"$$dir1\"; do \\\n    first=`echo \"$$dir1\" | sed -e \"$$sed_first\"`; \\\n    if test \"$$first\" != \".\"; then \\\n      if test \"$$first\" = \"..\"; then \\\n        dir2=`echo \"$$dir0\" | sed -e \"$$sed_last\"`/\"$$dir2\"; \\\n        dir0=`echo \"$$dir0\" | sed -e \"$$sed_butlast\"`; \\\n      else \\\n        first2=`echo \"$$dir2\" | sed -e \"$$sed_first\"`; \\\n        if test \"$$first2\" = \"$$first\"; then \\\n          dir2=`echo \"$$dir2\" | sed -e \"$$sed_rest\"`; \\\n        else \\\n          dir2=\"../$$dir2\"; \\\n        fi; \\\n        dir0=\"$$dir0\"/\"$$first\"; \\\n      fi; \\\n    fi; \\\n    dir1=`echo \"$$dir1\" | sed -e \"$$sed_rest\"`; \\\n  done; \\\n  reldir=\"$$dir2\"\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nAS = @AS@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCAS = @CCAS@\nCCASDEPMODE = @CCASDEPMODE@\nCCASFLAGS = @CCASFLAGS@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCFLAGS_AESNI = @CFLAGS_AESNI@\nCFLAGS_MMX = @CFLAGS_MMX@\nCFLAGS_PCLMUL = @CFLAGS_PCLMUL@\nCFLAGS_SSE2 = @CFLAGS_SSE2@\nCFLAGS_SSE3 = @CFLAGS_SSE3@\nCFLAGS_SSE41 = @CFLAGS_SSE41@\nCFLAGS_SSSE3 = @CFLAGS_SSSE3@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCWFLAGS = @CWFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nDLLTOOL = @DLLTOOL@\nDLL_VERSION = @DLL_VERSION@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nHAVE_AMD64_ASM_V = @HAVE_AMD64_ASM_V@\nHAVE_AVX_ASM_V = @HAVE_AVX_ASM_V@\nHAVE_CPUID_V = @HAVE_CPUID_V@\nHAVE_TI_MODE_V = @HAVE_TI_MODE_V@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nISODATE = @ISODATE@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIBTOOL_DEPS = @LIBTOOL_DEPS@\nLIBTOOL_EXTRA_FLAGS = @LIBTOOL_EXTRA_FLAGS@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSAFECODE_HOME = @SAFECODE_HOME@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSODIUM_LIBRARY_VERSION = @SODIUM_LIBRARY_VERSION@\nSODIUM_LIBRARY_VERSION_MAJOR = @SODIUM_LIBRARY_VERSION_MAJOR@\nSODIUM_LIBRARY_VERSION_MINOR = @SODIUM_LIBRARY_VERSION_MINOR@\nSTRIP = @STRIP@\nTEST_LDFLAGS = @TEST_LDFLAGS@\nVERSION = @VERSION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nSUBDIRS = \\\n\tlibsodium\n\nall: all-recursive\n\n.SUFFIXES:\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign src/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\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$(am__recursive_targets):\n\t@fail=; \\\n\tif $(am__make_keepgoing); then \\\n\t  failcom='fail=yes'; \\\n\telse \\\n\t  failcom='exit 1'; \\\n\tfi; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tcase \"$@\" in \\\n\t  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \\\n\t  *) list='$(SUBDIRS)' ;; \\\n\tesac; \\\n\tfor 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  ($(am__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\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-recursive\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\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      set \"$$@\" \"$$include_option=$$here/$$subdir/TAGS\"; \\\n\t  fi; \\\n\tdone; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-recursive\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-recursive\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    $(am__make_dryrun) \\\n\t      || test -d \"$(distdir)/$$subdir\" \\\n\t      || $(MKDIR_P) \"$(distdir)/$$subdir\" \\\n\t      || exit 1; \\\n\t    dir1=$$subdir; dir2=\"$(distdir)/$$subdir\"; \\\n\t    $(am__relativize); \\\n\t    new_distdir=$$reldir; \\\n\t    dir1=$$subdir; dir2=\"$(top_distdir)\"; \\\n\t    $(am__relativize); \\\n\t    new_top_distdir=$$reldir; \\\n\t    echo \" (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=\"$$new_top_distdir\" distdir=\"$$new_distdir\" \\\\\"; \\\n\t    echo \"     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)\"; \\\n\t    ($(am__cd) $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$new_top_distdir\" \\\n\t        distdir=\"$$new_distdir\" \\\n\t\tam__remove_distdir=: \\\n\t\tam__skip_length_check=: \\\n\t\tam__skip_mode_fix=: \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-recursive\nall-am: Makefile\ninstalldirs: installdirs-recursive\ninstalldirs-am:\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-recursive\n\nclean-am: clean-generic clean-libtool mostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\nhtml: html-recursive\n\nhtml-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-recursive\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-recursive\n\ninstall-html-am:\n\ninstall-info: install-info-recursive\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-recursive\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-recursive\n\ninstall-ps-am:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-recursive\n\t-rm -f Makefile\nmaintainer-clean-am: distclean-am maintainer-clean-generic\n\nmostlyclean: mostlyclean-recursive\n\nmostlyclean-am: mostlyclean-generic mostlyclean-libtool\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am:\n\n.MAKE: $(am__recursive_targets) install-am install-strip\n\n.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \\\n\tcheck-am clean clean-generic clean-libtool cscopelist-am ctags \\\n\tctags-am distclean distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-dvi \\\n\tinstall-dvi-am install-exec install-exec-am install-html \\\n\tinstall-html-am install-info install-info-am install-man \\\n\tinstall-pdf install-pdf-am install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tinstalldirs-am maintainer-clean maintainer-clean-generic \\\n\tmostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \\\n\tps ps-am tags tags-am uninstall uninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/Makefile.am",
    "content": "libsodium_la_SOURCES = \\\n\tcrypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c \\\n\tcrypto_auth/crypto_auth.c \\\n\tcrypto_auth/hmacsha256/auth_hmacsha256_api.c \\\n\tcrypto_auth/hmacsha256/cp/hmac_hmacsha256.c \\\n\tcrypto_auth/hmacsha256/cp/verify_hmacsha256.c \\\n\tcrypto_auth/hmacsha512/auth_hmacsha512_api.c \\\n\tcrypto_auth/hmacsha512/cp/hmac_hmacsha512.c \\\n\tcrypto_auth/hmacsha512/cp/verify_hmacsha512.c \\\n\tcrypto_auth/hmacsha512256/auth_hmacsha512256_api.c \\\n\tcrypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c \\\n\tcrypto_auth/hmacsha512256/cp/verify_hmacsha512256.c \\\n\tcrypto_box/crypto_box.c \\\n\tcrypto_box/crypto_box_easy.c \\\n\tcrypto_box/crypto_box_seal.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c \\\n\tcrypto_core/hsalsa20/ref2/core_hsalsa20.c \\\n\tcrypto_core/hsalsa20/core_hsalsa20_api.c \\\n\tcrypto_core/salsa20/ref/core_salsa20.c \\\n\tcrypto_core/salsa20/core_salsa20_api.c \\\n\tcrypto_generichash/crypto_generichash.c \\\n\tcrypto_generichash/blake2/generichash_blake2_api.c \\\n\tcrypto_generichash/blake2/ref/blake2-impl.h \\\n\tcrypto_generichash/blake2/ref/blake2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse41.h \\\n\tcrypto_generichash/blake2/ref/blake2b-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-round.h \\\n\tcrypto_generichash/blake2/ref/generichash_blake2b.c \\\n\tcrypto_hash/crypto_hash.c \\\n\tcrypto_hash/sha256/hash_sha256_api.c \\\n\tcrypto_hash/sha256/cp/hash_sha256.c \\\n\tcrypto_hash/sha512/hash_sha512_api.c \\\n\tcrypto_hash/sha512/cp/hash_sha512.c \\\n\tcrypto_onetimeauth/crypto_onetimeauth.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna32.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna64.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/sysendian.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c \\\n\tcrypto_scalarmult/crypto_scalarmult.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.h \\\n\tcrypto_secretbox/crypto_secretbox.c \\\n\tcrypto_secretbox/crypto_secretbox_easy.c \\\n\tcrypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c \\\n\tcrypto_shorthash/crypto_shorthash.c \\\n\tcrypto_shorthash/siphash24/shorthash_siphash24_api.c \\\n\tcrypto_shorthash/siphash24/ref/shorthash_siphash24.c \\\n\tcrypto_sign/crypto_sign.c \\\n\tcrypto_sign/ed25519/ref10/base.h \\\n\tcrypto_sign/ed25519/ref10/base2.h \\\n\tcrypto_sign/ed25519/sign_ed25519_api.c \\\n\tcrypto_sign/ed25519/ref10/d.h \\\n\tcrypto_sign/ed25519/ref10/d2.h \\\n\tcrypto_sign/ed25519/ref10/fe.h \\\n\tcrypto_sign/ed25519/ref10/fe_0.c \\\n\tcrypto_sign/ed25519/ref10/fe_1.c \\\n\tcrypto_sign/ed25519/ref10/fe_add.c \\\n\tcrypto_sign/ed25519/ref10/fe_cmov.c \\\n\tcrypto_sign/ed25519/ref10/fe_copy.c \\\n\tcrypto_sign/ed25519/ref10/fe_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/fe_invert.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnegative.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnonzero.c \\\n\tcrypto_sign/ed25519/ref10/fe_mul.c \\\n\tcrypto_sign/ed25519/ref10/fe_neg.c \\\n\tcrypto_sign/ed25519/ref10/fe_pow22523.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq2.c \\\n\tcrypto_sign/ed25519/ref10/fe_sub.c \\\n\tcrypto_sign/ed25519/ref10/fe_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge.h \\\n\tcrypto_sign/ed25519/ref10/ge_add.c \\\n\tcrypto_sign/ed25519/ref10/ge_add.h \\\n\tcrypto_sign/ed25519/ref10/ge_double_scalarmult.c \\\n\tcrypto_sign/ed25519/ref10/ge_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.h \\\n\tcrypto_sign/ed25519/ref10/ge_msub.c \\\n\tcrypto_sign/ed25519/ref10/ge_msub.h \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p3.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.h \\\n\tcrypto_sign/ed25519/ref10/ge_p3_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_cached.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_precomp_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_scalarmult_base.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.h \\\n\tcrypto_sign/ed25519/ref10/ge_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/keypair.c \\\n\tcrypto_sign/ed25519/ref10/open.c \\\n\tcrypto_sign/ed25519/ref10/pow22523.h \\\n\tcrypto_sign/ed25519/ref10/pow225521.h \\\n\tcrypto_sign/ed25519/ref10/sc.h \\\n\tcrypto_sign/ed25519/ref10/sc_muladd.c \\\n\tcrypto_sign/ed25519/ref10/sc_reduce.c \\\n\tcrypto_sign/ed25519/ref10/sign.c \\\n\tcrypto_sign/ed25519/ref10/sqrtm1.h \\\n\tcrypto_stream/crypto_stream.c \\\n\tcrypto_stream/chacha20/stream_chacha20.c \\\n\tcrypto_stream/chacha20/stream_chacha20.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.c \\\n\tcrypto_stream/salsa20/stream_salsa20_api.c \\\n\tcrypto_stream/xsalsa20/stream_xsalsa20_api.c \\\n\tcrypto_stream/xsalsa20/ref/stream_xsalsa20.c \\\n\tcrypto_stream/xsalsa20/ref/xor_xsalsa20.c \\\n\tcrypto_verify/16/verify_16_api.c \\\n\tcrypto_verify/16/ref/verify_16.c \\\n\tcrypto_verify/32/verify_32_api.c \\\n\tcrypto_verify/32/ref/verify_32.c \\\n\tcrypto_verify/64/verify_64_api.c \\\n\tcrypto_verify/64/ref/verify_64.c \\\n\trandombytes/randombytes.c \\\n\tsodium/core.c \\\n\tsodium/runtime.c \\\n\tsodium/utils.c \\\n\tsodium/version.c\n\nif !EMSCRIPTEN\nlibsodium_la_SOURCES += \\\n\trandombytes/salsa20/randombytes_salsa20_random.c\n\nif NATIVECLIENT\nlibsodium_la_SOURCES += \\\n\trandombytes/nativeclient/randombytes_nativeclient.c\nelse\nlibsodium_la_SOURCES += \\\n    randombytes/sysrandom/randombytes_sysrandom.c\nendif\n\nendif\n\nif HAVE_TI_MODE\nlibsodium_la_SOURCES += \\\n\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c \\\n\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.h\nelse\nlibsodium_la_SOURCES += \\\n\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.h \\\n\tcrypto_scalarmult/curve25519/ref10/fe.h \\\n\tcrypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/montgomery.h \\\n\tcrypto_scalarmult/curve25519/ref10/pow225521.h\nendif\n\nnoinst_HEADERS = \\\n\tcrypto_scalarmult/curve25519/sandy2x/consts.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_mul.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_pack.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base.S\n\nif HAVE_AVX_ASM\nlibsodium_la_SOURCES += \\\n\tcrypto_scalarmult/curve25519/sandy2x/consts_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_invert.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/sandy2x.S\nendif\n\nif HAVE_AMD64_ASM\nlibsodium_la_SOURCES += \\\n\tcrypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S\nelse\nlibsodium_la_SOURCES += \\\n\tcrypto_stream/salsa20/ref/stream_salsa20_ref.c \\\n\tcrypto_stream/salsa20/ref/xor_salsa20_ref.c\nendif\n\nif !MINIMAL\nlibsodium_la_SOURCES += \\\n\tcrypto_core/salsa2012/ref/core_salsa2012.c \\\n\tcrypto_core/salsa2012/core_salsa2012_api.c \\\n\tcrypto_core/salsa208/ref/core_salsa208.c \\\n\tcrypto_core/salsa208/core_salsa208_api.c \\\n\tcrypto_sign/ed25519/ref10/obsolete.c \\\n\tcrypto_stream/aes128ctr/portable/afternm_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/stream_aes128ctr_api.c \\\n\tcrypto_stream/aes128ctr/portable/beforenm_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/common.h \\\n\tcrypto_stream/aes128ctr/portable/common_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/consts.h \\\n\tcrypto_stream/aes128ctr/portable/consts_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/int128.h \\\n\tcrypto_stream/aes128ctr/portable/int128_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/stream_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/types.h \\\n\tcrypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c \\\n\tcrypto_stream/salsa2012/stream_salsa2012_api.c \\\n\tcrypto_stream/salsa2012/ref/stream_salsa2012.c \\\n\tcrypto_stream/salsa2012/ref/xor_salsa2012.c \\\n\tcrypto_stream/salsa208/stream_salsa208_api.c \\\n\tcrypto_stream/salsa208/ref/stream_salsa208.c \\\n\tcrypto_stream/salsa208/ref/xor_salsa208.c\nendif\n\nlibsodium_la_LDFLAGS = \\\n\t$(AM_LDFLAGS) \\\n\t-export-dynamic \\\n\t-no-undefined \\\n\t$(LIBTOOL_EXTRA_FLAGS)\n\nlibsodium_la_CPPFLAGS = \\\n\t$(LTDLINCL) \\\n\t-I$(srcdir)/include/sodium \\\n\t-I$(builddir)/include/sodium\n\nSUBDIRS = \\\n\tinclude\n\nlibsodium_la_LIBADD = libaesni.la libsse2.la libssse3.la libsse41.la\nnoinst_LTLIBRARIES =  libsodium.la libaesni.la libsse2.la libssse3.la libsse41.la\n\nlibaesni_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibaesni_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSSE3@ @CFLAGS_AESNI@ @CFLAGS_PCLMUL@\nlibaesni_la_SOURCES = \\\n\tcrypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c\n\nlibsse2_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibsse2_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@\nlibsse2_la_SOURCES = \\\n\tcrypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c \\\n\tcrypto_onetimeauth/poly1305/sse2/poly1305_sse2.c \\\n\tcrypto_onetimeauth/poly1305/sse2/poly1305_sse2.h\n\nlibssse3_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibssse3_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@ @CFLAGS_SSSE3@\nlibssse3_la_SOURCES = \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-ssse3.c \\\n\tcrypto_stream/chacha20/vec/stream_chacha20_vec.h \\\n\tcrypto_stream/chacha20/vec/stream_chacha20_vec.c\n\nlibsse41_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibsse41_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@ @CFLAGS_SSSE3@ @CFLAGS_SSE41@\nlibsse41_la_SOURCES = \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-sse41.c\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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@\n@EMSCRIPTEN_FALSE@am__append_1 = \\\n@EMSCRIPTEN_FALSE@\trandombytes/salsa20/randombytes_salsa20_random.c\n\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_TRUE@am__append_2 = \\\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_TRUE@\trandombytes/nativeclient/randombytes_nativeclient.c\n\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_FALSE@am__append_3 = \\\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_FALSE@    randombytes/sysrandom/randombytes_sysrandom.c\n\n@HAVE_TI_MODE_TRUE@am__append_4 = \\\n@HAVE_TI_MODE_TRUE@\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c \\\n@HAVE_TI_MODE_TRUE@\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.h\n\n@HAVE_TI_MODE_FALSE@am__append_5 = \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.h \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe.h \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/montgomery.h \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/pow225521.h\n\n@HAVE_AVX_ASM_TRUE@am__append_6 = \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/consts_namespace.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/fe.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/fe51.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/fe51_invert.c \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/fe51_namespace.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/ladder.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/ladder_base.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/ladder_namespace.h \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/sandy2x.S\n\n@HAVE_AMD64_ASM_TRUE@am__append_7 = \\\n@HAVE_AMD64_ASM_TRUE@\tcrypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S\n\n@HAVE_AMD64_ASM_FALSE@am__append_8 = \\\n@HAVE_AMD64_ASM_FALSE@\tcrypto_stream/salsa20/ref/stream_salsa20_ref.c \\\n@HAVE_AMD64_ASM_FALSE@\tcrypto_stream/salsa20/ref/xor_salsa20_ref.c\n\n@MINIMAL_FALSE@am__append_9 = \\\n@MINIMAL_FALSE@\tcrypto_core/salsa2012/ref/core_salsa2012.c \\\n@MINIMAL_FALSE@\tcrypto_core/salsa2012/core_salsa2012_api.c \\\n@MINIMAL_FALSE@\tcrypto_core/salsa208/ref/core_salsa208.c \\\n@MINIMAL_FALSE@\tcrypto_core/salsa208/core_salsa208_api.c \\\n@MINIMAL_FALSE@\tcrypto_sign/ed25519/ref10/obsolete.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/afternm_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/stream_aes128ctr_api.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/beforenm_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/common.h \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/common_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/consts.h \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/consts_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/int128.h \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/int128_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/stream_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/types.h \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/stream_salsa2012_api.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/ref/stream_salsa2012.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/ref/xor_salsa2012.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/stream_salsa208_api.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/ref/stream_salsa208.c \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/ref/xor_salsa208.c\n\nsubdir = src/libsodium\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/build-aux/depcomp $(noinst_HEADERS)\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \\\n\t$(top_srcdir)/m4/ax_check_define.m4 \\\n\t$(top_srcdir)/m4/ax_check_link_flag.m4 \\\n\t$(top_srcdir)/m4/ld-output-def.m4 $(top_srcdir)/m4/libtool.m4 \\\n\t$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \\\n\t$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \\\n\t$(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibaesni_la_LIBADD =\nam__dirstamp = $(am__leading_dot)dirstamp\nam_libaesni_la_OBJECTS = crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo\nlibaesni_la_OBJECTS = $(am_libaesni_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibaesni_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libaesni_la_LDFLAGS) $(LDFLAGS) -o $@\nlibsodium_la_DEPENDENCIES = libaesni.la libsse2.la libssse3.la \\\n\tlibsse41.la\nam__libsodium_la_SOURCES_DIST =  \\\n\tcrypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c \\\n\tcrypto_auth/crypto_auth.c \\\n\tcrypto_auth/hmacsha256/auth_hmacsha256_api.c \\\n\tcrypto_auth/hmacsha256/cp/hmac_hmacsha256.c \\\n\tcrypto_auth/hmacsha256/cp/verify_hmacsha256.c \\\n\tcrypto_auth/hmacsha512/auth_hmacsha512_api.c \\\n\tcrypto_auth/hmacsha512/cp/hmac_hmacsha512.c \\\n\tcrypto_auth/hmacsha512/cp/verify_hmacsha512.c \\\n\tcrypto_auth/hmacsha512256/auth_hmacsha512256_api.c \\\n\tcrypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c \\\n\tcrypto_auth/hmacsha512256/cp/verify_hmacsha512256.c \\\n\tcrypto_box/crypto_box.c crypto_box/crypto_box_easy.c \\\n\tcrypto_box/crypto_box_seal.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c \\\n\tcrypto_core/hsalsa20/ref2/core_hsalsa20.c \\\n\tcrypto_core/hsalsa20/core_hsalsa20_api.c \\\n\tcrypto_core/salsa20/ref/core_salsa20.c \\\n\tcrypto_core/salsa20/core_salsa20_api.c \\\n\tcrypto_generichash/crypto_generichash.c \\\n\tcrypto_generichash/blake2/generichash_blake2_api.c \\\n\tcrypto_generichash/blake2/ref/blake2-impl.h \\\n\tcrypto_generichash/blake2/ref/blake2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse41.h \\\n\tcrypto_generichash/blake2/ref/blake2b-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-round.h \\\n\tcrypto_generichash/blake2/ref/generichash_blake2b.c \\\n\tcrypto_hash/crypto_hash.c crypto_hash/sha256/hash_sha256_api.c \\\n\tcrypto_hash/sha256/cp/hash_sha256.c \\\n\tcrypto_hash/sha512/hash_sha512_api.c \\\n\tcrypto_hash/sha512/cp/hash_sha512.c \\\n\tcrypto_onetimeauth/crypto_onetimeauth.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna32.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna64.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/sysendian.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c \\\n\tcrypto_scalarmult/crypto_scalarmult.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.h \\\n\tcrypto_secretbox/crypto_secretbox.c \\\n\tcrypto_secretbox/crypto_secretbox_easy.c \\\n\tcrypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c \\\n\tcrypto_shorthash/crypto_shorthash.c \\\n\tcrypto_shorthash/siphash24/shorthash_siphash24_api.c \\\n\tcrypto_shorthash/siphash24/ref/shorthash_siphash24.c \\\n\tcrypto_sign/crypto_sign.c crypto_sign/ed25519/ref10/base.h \\\n\tcrypto_sign/ed25519/ref10/base2.h \\\n\tcrypto_sign/ed25519/sign_ed25519_api.c \\\n\tcrypto_sign/ed25519/ref10/d.h crypto_sign/ed25519/ref10/d2.h \\\n\tcrypto_sign/ed25519/ref10/fe.h \\\n\tcrypto_sign/ed25519/ref10/fe_0.c \\\n\tcrypto_sign/ed25519/ref10/fe_1.c \\\n\tcrypto_sign/ed25519/ref10/fe_add.c \\\n\tcrypto_sign/ed25519/ref10/fe_cmov.c \\\n\tcrypto_sign/ed25519/ref10/fe_copy.c \\\n\tcrypto_sign/ed25519/ref10/fe_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/fe_invert.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnegative.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnonzero.c \\\n\tcrypto_sign/ed25519/ref10/fe_mul.c \\\n\tcrypto_sign/ed25519/ref10/fe_neg.c \\\n\tcrypto_sign/ed25519/ref10/fe_pow22523.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq2.c \\\n\tcrypto_sign/ed25519/ref10/fe_sub.c \\\n\tcrypto_sign/ed25519/ref10/fe_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge.h \\\n\tcrypto_sign/ed25519/ref10/ge_add.c \\\n\tcrypto_sign/ed25519/ref10/ge_add.h \\\n\tcrypto_sign/ed25519/ref10/ge_double_scalarmult.c \\\n\tcrypto_sign/ed25519/ref10/ge_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.h \\\n\tcrypto_sign/ed25519/ref10/ge_msub.c \\\n\tcrypto_sign/ed25519/ref10/ge_msub.h \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p3.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.h \\\n\tcrypto_sign/ed25519/ref10/ge_p3_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_cached.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_precomp_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_scalarmult_base.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.h \\\n\tcrypto_sign/ed25519/ref10/ge_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/keypair.c \\\n\tcrypto_sign/ed25519/ref10/open.c \\\n\tcrypto_sign/ed25519/ref10/pow22523.h \\\n\tcrypto_sign/ed25519/ref10/pow225521.h \\\n\tcrypto_sign/ed25519/ref10/sc.h \\\n\tcrypto_sign/ed25519/ref10/sc_muladd.c \\\n\tcrypto_sign/ed25519/ref10/sc_reduce.c \\\n\tcrypto_sign/ed25519/ref10/sign.c \\\n\tcrypto_sign/ed25519/ref10/sqrtm1.h \\\n\tcrypto_stream/crypto_stream.c \\\n\tcrypto_stream/chacha20/stream_chacha20.c \\\n\tcrypto_stream/chacha20/stream_chacha20.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.c \\\n\tcrypto_stream/salsa20/stream_salsa20_api.c \\\n\tcrypto_stream/xsalsa20/stream_xsalsa20_api.c \\\n\tcrypto_stream/xsalsa20/ref/stream_xsalsa20.c \\\n\tcrypto_stream/xsalsa20/ref/xor_xsalsa20.c \\\n\tcrypto_verify/16/verify_16_api.c \\\n\tcrypto_verify/16/ref/verify_16.c \\\n\tcrypto_verify/32/verify_32_api.c \\\n\tcrypto_verify/32/ref/verify_32.c \\\n\tcrypto_verify/64/verify_64_api.c \\\n\tcrypto_verify/64/ref/verify_64.c randombytes/randombytes.c \\\n\tsodium/core.c sodium/runtime.c sodium/utils.c sodium/version.c \\\n\trandombytes/salsa20/randombytes_salsa20_random.c \\\n\trandombytes/nativeclient/randombytes_nativeclient.c \\\n\trandombytes/sysrandom/randombytes_sysrandom.c \\\n\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c \\\n\tcrypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.h \\\n\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/curve25519_ref10.h \\\n\tcrypto_scalarmult/curve25519/ref10/fe.h \\\n\tcrypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c \\\n\tcrypto_scalarmult/curve25519/ref10/montgomery.h \\\n\tcrypto_scalarmult/curve25519/ref10/pow225521.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/consts_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_invert.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_namespace.h \\\n\tcrypto_scalarmult/curve25519/sandy2x/sandy2x.S \\\n\tcrypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S \\\n\tcrypto_stream/salsa20/ref/stream_salsa20_ref.c \\\n\tcrypto_stream/salsa20/ref/xor_salsa20_ref.c \\\n\tcrypto_core/salsa2012/ref/core_salsa2012.c \\\n\tcrypto_core/salsa2012/core_salsa2012_api.c \\\n\tcrypto_core/salsa208/ref/core_salsa208.c \\\n\tcrypto_core/salsa208/core_salsa208_api.c \\\n\tcrypto_sign/ed25519/ref10/obsolete.c \\\n\tcrypto_stream/aes128ctr/portable/afternm_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/stream_aes128ctr_api.c \\\n\tcrypto_stream/aes128ctr/portable/beforenm_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/common.h \\\n\tcrypto_stream/aes128ctr/portable/common_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/consts.h \\\n\tcrypto_stream/aes128ctr/portable/consts_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/int128.h \\\n\tcrypto_stream/aes128ctr/portable/int128_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/stream_aes128ctr.c \\\n\tcrypto_stream/aes128ctr/portable/types.h \\\n\tcrypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c \\\n\tcrypto_stream/salsa2012/stream_salsa2012_api.c \\\n\tcrypto_stream/salsa2012/ref/stream_salsa2012.c \\\n\tcrypto_stream/salsa2012/ref/xor_salsa2012.c \\\n\tcrypto_stream/salsa208/stream_salsa208_api.c \\\n\tcrypto_stream/salsa208/ref/stream_salsa208.c \\\n\tcrypto_stream/salsa208/ref/xor_salsa208.c\n@EMSCRIPTEN_FALSE@am__objects_1 = randombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_TRUE@am__objects_2 = randombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo\n@EMSCRIPTEN_FALSE@@NATIVECLIENT_FALSE@am__objects_3 = randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo\n@HAVE_TI_MODE_TRUE@am__objects_4 = crypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo\n@HAVE_TI_MODE_FALSE@am__objects_5 = crypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo \\\n@HAVE_TI_MODE_FALSE@\tcrypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo\n@HAVE_AVX_ASM_TRUE@am__objects_6 = crypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo \\\n@HAVE_AVX_ASM_TRUE@\tcrypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo\n@HAVE_AMD64_ASM_TRUE@am__objects_7 = crypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo\n@HAVE_AMD64_ASM_FALSE@am__objects_8 = crypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo \\\n@HAVE_AMD64_ASM_FALSE@\tcrypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo\n@MINIMAL_FALSE@am__objects_9 = crypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo \\\n@MINIMAL_FALSE@\tcrypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo \\\n@MINIMAL_FALSE@\tcrypto_core/salsa208/ref/libsodium_la-core_salsa208.lo \\\n@MINIMAL_FALSE@\tcrypto_core/salsa208/libsodium_la-core_salsa208_api.lo \\\n@MINIMAL_FALSE@\tcrypto_sign/ed25519/ref10/libsodium_la-obsolete.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo \\\n@MINIMAL_FALSE@\tcrypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo\nam_libsodium_la_OBJECTS = crypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo \\\n\tcrypto_auth/libsodium_la-crypto_auth.lo \\\n\tcrypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo \\\n\tcrypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo \\\n\tcrypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo \\\n\tcrypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo \\\n\tcrypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo \\\n\tcrypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo \\\n\tcrypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo \\\n\tcrypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo \\\n\tcrypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo \\\n\tcrypto_box/libsodium_la-crypto_box.lo \\\n\tcrypto_box/libsodium_la-crypto_box_easy.lo \\\n\tcrypto_box/libsodium_la-crypto_box_seal.lo \\\n\tcrypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo \\\n\tcrypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo \\\n\tcrypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo \\\n\tcrypto_core/salsa20/ref/libsodium_la-core_salsa20.lo \\\n\tcrypto_core/salsa20/libsodium_la-core_salsa20_api.lo \\\n\tcrypto_generichash/libsodium_la-crypto_generichash.lo \\\n\tcrypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo \\\n\tcrypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo \\\n\tcrypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo \\\n\tcrypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo \\\n\tcrypto_hash/libsodium_la-crypto_hash.lo \\\n\tcrypto_hash/sha256/libsodium_la-hash_sha256_api.lo \\\n\tcrypto_hash/sha256/cp/libsodium_la-hash_sha256.lo \\\n\tcrypto_hash/sha512/libsodium_la-hash_sha512_api.lo \\\n\tcrypto_hash/sha512/cp/libsodium_la-hash_sha512.lo \\\n\tcrypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo \\\n\tcrypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo \\\n\tcrypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo \\\n\tcrypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo \\\n\tcrypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo \\\n\tcrypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo \\\n\tcrypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo \\\n\tcrypto_scalarmult/libsodium_la-crypto_scalarmult.lo \\\n\tcrypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo \\\n\tcrypto_secretbox/libsodium_la-crypto_secretbox.lo \\\n\tcrypto_secretbox/libsodium_la-crypto_secretbox_easy.lo \\\n\tcrypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo \\\n\tcrypto_shorthash/libsodium_la-crypto_shorthash.lo \\\n\tcrypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo \\\n\tcrypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo \\\n\tcrypto_sign/libsodium_la-crypto_sign.lo \\\n\tcrypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_0.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_1.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_add.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_add.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-keypair.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-open.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo \\\n\tcrypto_sign/ed25519/ref10/libsodium_la-sign.lo \\\n\tcrypto_stream/libsodium_la-crypto_stream.lo \\\n\tcrypto_stream/chacha20/libsodium_la-stream_chacha20.lo \\\n\tcrypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo \\\n\tcrypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo \\\n\tcrypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo \\\n\tcrypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo \\\n\tcrypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo \\\n\tcrypto_verify/16/libsodium_la-verify_16_api.lo \\\n\tcrypto_verify/16/ref/libsodium_la-verify_16.lo \\\n\tcrypto_verify/32/libsodium_la-verify_32_api.lo \\\n\tcrypto_verify/32/ref/libsodium_la-verify_32.lo \\\n\tcrypto_verify/64/libsodium_la-verify_64_api.lo \\\n\tcrypto_verify/64/ref/libsodium_la-verify_64.lo \\\n\trandombytes/libsodium_la-randombytes.lo \\\n\tsodium/libsodium_la-core.lo sodium/libsodium_la-runtime.lo \\\n\tsodium/libsodium_la-utils.lo sodium/libsodium_la-version.lo \\\n\t$(am__objects_1) $(am__objects_2) $(am__objects_3) \\\n\t$(am__objects_4) $(am__objects_5) $(am__objects_6) \\\n\t$(am__objects_7) $(am__objects_8) $(am__objects_9)\nlibsodium_la_OBJECTS = $(am_libsodium_la_OBJECTS)\nlibsodium_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libsodium_la_LDFLAGS) $(LDFLAGS) -o $@\nlibsse2_la_LIBADD =\nam_libsse2_la_OBJECTS = crypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo \\\n\tcrypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo\nlibsse2_la_OBJECTS = $(am_libsse2_la_OBJECTS)\nlibsse2_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libsse2_la_LDFLAGS) $(LDFLAGS) -o $@\nlibsse41_la_LIBADD =\nam_libsse41_la_OBJECTS = crypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo\nlibsse41_la_OBJECTS = $(am_libsse41_la_OBJECTS)\nlibsse41_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libsse41_la_LDFLAGS) $(LDFLAGS) -o $@\nlibssse3_la_LIBADD =\nam_libssse3_la_OBJECTS = crypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo \\\n\tcrypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo\nlibssse3_la_OBJECTS = $(am_libssse3_la_OBJECTS)\nlibssse3_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libssse3_la_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@\ndepcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \\\n\t$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)\nLTCPPASCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CCASFLAGS) $(CCASFLAGS)\nAM_V_CPPAS = $(am__v_CPPAS_@AM_V@)\nam__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@)\nam__v_CPPAS_0 = @echo \"  CPPAS   \" $@;\nam__v_CPPAS_1 = \nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libaesni_la_SOURCES) $(libsodium_la_SOURCES) \\\n\t$(libsse2_la_SOURCES) $(libsse41_la_SOURCES) \\\n\t$(libssse3_la_SOURCES)\nDIST_SOURCES = $(libaesni_la_SOURCES) $(am__libsodium_la_SOURCES_DIST) \\\n\t$(libsse2_la_SOURCES) $(libsse41_la_SOURCES) \\\n\t$(libssse3_la_SOURCES)\nRECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \\\n\tctags-recursive dvi-recursive html-recursive info-recursive \\\n\tinstall-data-recursive install-dvi-recursive \\\n\tinstall-exec-recursive install-html-recursive \\\n\tinstall-info-recursive install-pdf-recursive \\\n\tinstall-ps-recursive install-recursive installcheck-recursive \\\n\tinstalldirs-recursive pdf-recursive ps-recursive \\\n\ttags-recursive uninstall-recursive\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nHEADERS = $(noinst_HEADERS)\nRECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive\t\\\n  distclean-recursive maintainer-clean-recursive\nam__recursive_targets = \\\n  $(RECURSIVE_TARGETS) \\\n  $(RECURSIVE_CLEAN_TARGETS) \\\n  $(am__extra_recursive_targets)\nAM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \\\n\tdistdir\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDIST_SUBDIRS = $(SUBDIRS)\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nam__relativize = \\\n  dir0=`pwd`; \\\n  sed_first='s,^\\([^/]*\\)/.*$$,\\1,'; \\\n  sed_rest='s,^[^/]*/*,,'; \\\n  sed_last='s,^.*/\\([^/]*\\)$$,\\1,'; \\\n  sed_butlast='s,/*[^/]*$$,,'; \\\n  while test -n \"$$dir1\"; do \\\n    first=`echo \"$$dir1\" | sed -e \"$$sed_first\"`; \\\n    if test \"$$first\" != \".\"; then \\\n      if test \"$$first\" = \"..\"; then \\\n        dir2=`echo \"$$dir0\" | sed -e \"$$sed_last\"`/\"$$dir2\"; \\\n        dir0=`echo \"$$dir0\" | sed -e \"$$sed_butlast\"`; \\\n      else \\\n        first2=`echo \"$$dir2\" | sed -e \"$$sed_first\"`; \\\n        if test \"$$first2\" = \"$$first\"; then \\\n          dir2=`echo \"$$dir2\" | sed -e \"$$sed_rest\"`; \\\n        else \\\n          dir2=\"../$$dir2\"; \\\n        fi; \\\n        dir0=\"$$dir0\"/\"$$first\"; \\\n      fi; \\\n    fi; \\\n    dir1=`echo \"$$dir1\" | sed -e \"$$sed_rest\"`; \\\n  done; \\\n  reldir=\"$$dir2\"\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nAS = @AS@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCAS = @CCAS@\nCCASDEPMODE = @CCASDEPMODE@\nCCASFLAGS = @CCASFLAGS@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCFLAGS_AESNI = @CFLAGS_AESNI@\nCFLAGS_MMX = @CFLAGS_MMX@\nCFLAGS_PCLMUL = @CFLAGS_PCLMUL@\nCFLAGS_SSE2 = @CFLAGS_SSE2@\nCFLAGS_SSE3 = @CFLAGS_SSE3@\nCFLAGS_SSE41 = @CFLAGS_SSE41@\nCFLAGS_SSSE3 = @CFLAGS_SSSE3@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCWFLAGS = @CWFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nDLLTOOL = @DLLTOOL@\nDLL_VERSION = @DLL_VERSION@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nHAVE_AMD64_ASM_V = @HAVE_AMD64_ASM_V@\nHAVE_AVX_ASM_V = @HAVE_AVX_ASM_V@\nHAVE_CPUID_V = @HAVE_CPUID_V@\nHAVE_TI_MODE_V = @HAVE_TI_MODE_V@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nISODATE = @ISODATE@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIBTOOL_DEPS = @LIBTOOL_DEPS@\nLIBTOOL_EXTRA_FLAGS = @LIBTOOL_EXTRA_FLAGS@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSAFECODE_HOME = @SAFECODE_HOME@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSODIUM_LIBRARY_VERSION = @SODIUM_LIBRARY_VERSION@\nSODIUM_LIBRARY_VERSION_MAJOR = @SODIUM_LIBRARY_VERSION_MAJOR@\nSODIUM_LIBRARY_VERSION_MINOR = @SODIUM_LIBRARY_VERSION_MINOR@\nSTRIP = @STRIP@\nTEST_LDFLAGS = @TEST_LDFLAGS@\nVERSION = @VERSION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nlibsodium_la_SOURCES =  \\\n\tcrypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c \\\n\tcrypto_auth/crypto_auth.c \\\n\tcrypto_auth/hmacsha256/auth_hmacsha256_api.c \\\n\tcrypto_auth/hmacsha256/cp/hmac_hmacsha256.c \\\n\tcrypto_auth/hmacsha256/cp/verify_hmacsha256.c \\\n\tcrypto_auth/hmacsha512/auth_hmacsha512_api.c \\\n\tcrypto_auth/hmacsha512/cp/hmac_hmacsha512.c \\\n\tcrypto_auth/hmacsha512/cp/verify_hmacsha512.c \\\n\tcrypto_auth/hmacsha512256/auth_hmacsha512256_api.c \\\n\tcrypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c \\\n\tcrypto_auth/hmacsha512256/cp/verify_hmacsha512256.c \\\n\tcrypto_box/crypto_box.c crypto_box/crypto_box_easy.c \\\n\tcrypto_box/crypto_box_seal.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c \\\n\tcrypto_core/hsalsa20/ref2/core_hsalsa20.c \\\n\tcrypto_core/hsalsa20/core_hsalsa20_api.c \\\n\tcrypto_core/salsa20/ref/core_salsa20.c \\\n\tcrypto_core/salsa20/core_salsa20_api.c \\\n\tcrypto_generichash/crypto_generichash.c \\\n\tcrypto_generichash/blake2/generichash_blake2_api.c \\\n\tcrypto_generichash/blake2/ref/blake2-impl.h \\\n\tcrypto_generichash/blake2/ref/blake2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse2.h \\\n\tcrypto_generichash/blake2/ref/blake2b-load-sse41.h \\\n\tcrypto_generichash/blake2/ref/blake2b-ref.c \\\n\tcrypto_generichash/blake2/ref/blake2b-round.h \\\n\tcrypto_generichash/blake2/ref/generichash_blake2b.c \\\n\tcrypto_hash/crypto_hash.c crypto_hash/sha256/hash_sha256_api.c \\\n\tcrypto_hash/sha256/cp/hash_sha256.c \\\n\tcrypto_hash/sha512/hash_sha512_api.c \\\n\tcrypto_hash/sha512/cp/hash_sha512.c \\\n\tcrypto_onetimeauth/crypto_onetimeauth.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.c \\\n\tcrypto_onetimeauth/poly1305/onetimeauth_poly1305.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna32.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna64.h \\\n\tcrypto_onetimeauth/poly1305/donna/poly1305_donna.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/scrypt_platform.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c \\\n\tcrypto_pwhash/scryptsalsa208sha256/sysendian.h \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c \\\n\tcrypto_scalarmult/crypto_scalarmult.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.c \\\n\tcrypto_scalarmult/curve25519/scalarmult_curve25519.h \\\n\tcrypto_secretbox/crypto_secretbox.c \\\n\tcrypto_secretbox/crypto_secretbox_easy.c \\\n\tcrypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c \\\n\tcrypto_shorthash/crypto_shorthash.c \\\n\tcrypto_shorthash/siphash24/shorthash_siphash24_api.c \\\n\tcrypto_shorthash/siphash24/ref/shorthash_siphash24.c \\\n\tcrypto_sign/crypto_sign.c crypto_sign/ed25519/ref10/base.h \\\n\tcrypto_sign/ed25519/ref10/base2.h \\\n\tcrypto_sign/ed25519/sign_ed25519_api.c \\\n\tcrypto_sign/ed25519/ref10/d.h crypto_sign/ed25519/ref10/d2.h \\\n\tcrypto_sign/ed25519/ref10/fe.h \\\n\tcrypto_sign/ed25519/ref10/fe_0.c \\\n\tcrypto_sign/ed25519/ref10/fe_1.c \\\n\tcrypto_sign/ed25519/ref10/fe_add.c \\\n\tcrypto_sign/ed25519/ref10/fe_cmov.c \\\n\tcrypto_sign/ed25519/ref10/fe_copy.c \\\n\tcrypto_sign/ed25519/ref10/fe_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/fe_invert.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnegative.c \\\n\tcrypto_sign/ed25519/ref10/fe_isnonzero.c \\\n\tcrypto_sign/ed25519/ref10/fe_mul.c \\\n\tcrypto_sign/ed25519/ref10/fe_neg.c \\\n\tcrypto_sign/ed25519/ref10/fe_pow22523.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq.c \\\n\tcrypto_sign/ed25519/ref10/fe_sq2.c \\\n\tcrypto_sign/ed25519/ref10/fe_sub.c \\\n\tcrypto_sign/ed25519/ref10/fe_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge.h \\\n\tcrypto_sign/ed25519/ref10/ge_add.c \\\n\tcrypto_sign/ed25519/ref10/ge_add.h \\\n\tcrypto_sign/ed25519/ref10/ge_double_scalarmult.c \\\n\tcrypto_sign/ed25519/ref10/ge_frombytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.c \\\n\tcrypto_sign/ed25519/ref10/ge_madd.h \\\n\tcrypto_sign/ed25519/ref10/ge_msub.c \\\n\tcrypto_sign/ed25519/ref10/ge_msub.h \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p1p1_to_p3.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p2_dbl.h \\\n\tcrypto_sign/ed25519/ref10/ge_p3_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_dbl.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_cached.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_to_p2.c \\\n\tcrypto_sign/ed25519/ref10/ge_p3_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/ge_precomp_0.c \\\n\tcrypto_sign/ed25519/ref10/ge_scalarmult_base.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.c \\\n\tcrypto_sign/ed25519/ref10/ge_sub.h \\\n\tcrypto_sign/ed25519/ref10/ge_tobytes.c \\\n\tcrypto_sign/ed25519/ref10/keypair.c \\\n\tcrypto_sign/ed25519/ref10/open.c \\\n\tcrypto_sign/ed25519/ref10/pow22523.h \\\n\tcrypto_sign/ed25519/ref10/pow225521.h \\\n\tcrypto_sign/ed25519/ref10/sc.h \\\n\tcrypto_sign/ed25519/ref10/sc_muladd.c \\\n\tcrypto_sign/ed25519/ref10/sc_reduce.c \\\n\tcrypto_sign/ed25519/ref10/sign.c \\\n\tcrypto_sign/ed25519/ref10/sqrtm1.h \\\n\tcrypto_stream/crypto_stream.c \\\n\tcrypto_stream/chacha20/stream_chacha20.c \\\n\tcrypto_stream/chacha20/stream_chacha20.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.h \\\n\tcrypto_stream/chacha20/ref/stream_chacha20_ref.c \\\n\tcrypto_stream/salsa20/stream_salsa20_api.c \\\n\tcrypto_stream/xsalsa20/stream_xsalsa20_api.c \\\n\tcrypto_stream/xsalsa20/ref/stream_xsalsa20.c \\\n\tcrypto_stream/xsalsa20/ref/xor_xsalsa20.c \\\n\tcrypto_verify/16/verify_16_api.c \\\n\tcrypto_verify/16/ref/verify_16.c \\\n\tcrypto_verify/32/verify_32_api.c \\\n\tcrypto_verify/32/ref/verify_32.c \\\n\tcrypto_verify/64/verify_64_api.c \\\n\tcrypto_verify/64/ref/verify_64.c randombytes/randombytes.c \\\n\tsodium/core.c sodium/runtime.c sodium/utils.c sodium/version.c \\\n\t$(am__append_1) $(am__append_2) $(am__append_3) \\\n\t$(am__append_4) $(am__append_5) $(am__append_6) \\\n\t$(am__append_7) $(am__append_8) $(am__append_9)\nnoinst_HEADERS = \\\n\tcrypto_scalarmult/curve25519/sandy2x/consts.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_mul.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/fe51_pack.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder.S \\\n\tcrypto_scalarmult/curve25519/sandy2x/ladder_base.S\n\nlibsodium_la_LDFLAGS = \\\n\t$(AM_LDFLAGS) \\\n\t-export-dynamic \\\n\t-no-undefined \\\n\t$(LIBTOOL_EXTRA_FLAGS)\n\nlibsodium_la_CPPFLAGS = \\\n\t$(LTDLINCL) \\\n\t-I$(srcdir)/include/sodium \\\n\t-I$(builddir)/include/sodium\n\nSUBDIRS = \\\n\tinclude\n\nlibsodium_la_LIBADD = libaesni.la libsse2.la libssse3.la libsse41.la\nnoinst_LTLIBRARIES = libsodium.la libaesni.la libsse2.la libssse3.la libsse41.la\nlibaesni_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibaesni_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSSE3@ @CFLAGS_AESNI@ @CFLAGS_PCLMUL@\n\nlibaesni_la_SOURCES = \\\n\tcrypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c\n\nlibsse2_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibsse2_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@\n\nlibsse2_la_SOURCES = \\\n\tcrypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c \\\n\tcrypto_onetimeauth/poly1305/sse2/poly1305_sse2.c \\\n\tcrypto_onetimeauth/poly1305/sse2/poly1305_sse2.h\n\nlibssse3_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibssse3_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@ @CFLAGS_SSSE3@\n\nlibssse3_la_SOURCES = \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-ssse3.c \\\n\tcrypto_stream/chacha20/vec/stream_chacha20_vec.h \\\n\tcrypto_stream/chacha20/vec/stream_chacha20_vec.c\n\nlibsse41_la_LDFLAGS = $(libsodium_la_LDFLAGS)\nlibsse41_la_CPPFLAGS = $(libsodium_la_CPPFLAGS) \\\n\t@CFLAGS_SSE2@ @CFLAGS_SSSE3@ @CFLAGS_SSE41@\n\nlibsse41_la_SOURCES = \\\n\tcrypto_generichash/blake2/ref/blake2b-compress-sse41.c\n\nall: all-recursive\n\n.SUFFIXES:\n.SUFFIXES: .S .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libsodium/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign src/libsodium/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\ncrypto_aead/aes256gcm/aesni/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_aead/aes256gcm/aesni\n\t@: > crypto_aead/aes256gcm/aesni/$(am__dirstamp)\ncrypto_aead/aes256gcm/aesni/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_aead/aes256gcm/aesni/$(DEPDIR)\n\t@: > crypto_aead/aes256gcm/aesni/$(DEPDIR)/$(am__dirstamp)\ncrypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo:  \\\n\tcrypto_aead/aes256gcm/aesni/$(am__dirstamp) \\\n\tcrypto_aead/aes256gcm/aesni/$(DEPDIR)/$(am__dirstamp)\n\nlibaesni.la: $(libaesni_la_OBJECTS) $(libaesni_la_DEPENDENCIES) $(EXTRA_libaesni_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libaesni_la_LINK)  $(libaesni_la_OBJECTS) $(libaesni_la_LIBADD) $(LIBS)\ncrypto_aead/chacha20poly1305/sodium/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_aead/chacha20poly1305/sodium\n\t@: > crypto_aead/chacha20poly1305/sodium/$(am__dirstamp)\ncrypto_aead/chacha20poly1305/sodium/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_aead/chacha20poly1305/sodium/$(DEPDIR)\n\t@: > crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/$(am__dirstamp)\ncrypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo:  \\\n\tcrypto_aead/chacha20poly1305/sodium/$(am__dirstamp) \\\n\tcrypto_aead/chacha20poly1305/sodium/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth\n\t@: > crypto_auth/$(am__dirstamp)\ncrypto_auth/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/$(DEPDIR)\n\t@: > crypto_auth/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/libsodium_la-crypto_auth.lo: crypto_auth/$(am__dirstamp) \\\n\tcrypto_auth/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha256/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha256\n\t@: > crypto_auth/hmacsha256/$(am__dirstamp)\ncrypto_auth/hmacsha256/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha256/$(DEPDIR)\n\t@: > crypto_auth/hmacsha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo:  \\\n\tcrypto_auth/hmacsha256/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha256/cp/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha256/cp\n\t@: > crypto_auth/hmacsha256/cp/$(am__dirstamp)\ncrypto_auth/hmacsha256/cp/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha256/cp/$(DEPDIR)\n\t@: > crypto_auth/hmacsha256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo:  \\\n\tcrypto_auth/hmacsha256/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo:  \\\n\tcrypto_auth/hmacsha256/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512\n\t@: > crypto_auth/hmacsha512/$(am__dirstamp)\ncrypto_auth/hmacsha512/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512/$(DEPDIR)\n\t@: > crypto_auth/hmacsha512/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo:  \\\n\tcrypto_auth/hmacsha512/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512/cp/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512/cp\n\t@: > crypto_auth/hmacsha512/cp/$(am__dirstamp)\ncrypto_auth/hmacsha512/cp/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512/cp/$(DEPDIR)\n\t@: > crypto_auth/hmacsha512/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo:  \\\n\tcrypto_auth/hmacsha512/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo:  \\\n\tcrypto_auth/hmacsha512/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512256/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512256\n\t@: > crypto_auth/hmacsha512256/$(am__dirstamp)\ncrypto_auth/hmacsha512256/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512256/$(DEPDIR)\n\t@: > crypto_auth/hmacsha512256/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo:  \\\n\tcrypto_auth/hmacsha512256/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512256/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512256/cp/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512256/cp\n\t@: > crypto_auth/hmacsha512256/cp/$(am__dirstamp)\ncrypto_auth/hmacsha512256/cp/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_auth/hmacsha512256/cp/$(DEPDIR)\n\t@: > crypto_auth/hmacsha512256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo:  \\\n\tcrypto_auth/hmacsha512256/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo:  \\\n\tcrypto_auth/hmacsha512256/cp/$(am__dirstamp) \\\n\tcrypto_auth/hmacsha512256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box\n\t@: > crypto_box/$(am__dirstamp)\ncrypto_box/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box/$(DEPDIR)\n\t@: > crypto_box/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/libsodium_la-crypto_box.lo: crypto_box/$(am__dirstamp) \\\n\tcrypto_box/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/libsodium_la-crypto_box_easy.lo:  \\\n\tcrypto_box/$(am__dirstamp) \\\n\tcrypto_box/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/libsodium_la-crypto_box_seal.lo:  \\\n\tcrypto_box/$(am__dirstamp) \\\n\tcrypto_box/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box/curve25519xsalsa20poly1305\n\t@: > crypto_box/curve25519xsalsa20poly1305/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)\n\t@: > crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo:  \\\n\tcrypto_box/curve25519xsalsa20poly1305/$(am__dirstamp) \\\n\tcrypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box/curve25519xsalsa20poly1305/ref\n\t@: > crypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)\n\t@: > crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo:  \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp) \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo:  \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp) \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo:  \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp) \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo:  \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp) \\\n\tcrypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/hsalsa20/ref2/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/hsalsa20/ref2\n\t@: > crypto_core/hsalsa20/ref2/$(am__dirstamp)\ncrypto_core/hsalsa20/ref2/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/hsalsa20/ref2/$(DEPDIR)\n\t@: > crypto_core/hsalsa20/ref2/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo:  \\\n\tcrypto_core/hsalsa20/ref2/$(am__dirstamp) \\\n\tcrypto_core/hsalsa20/ref2/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/hsalsa20/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/hsalsa20\n\t@: > crypto_core/hsalsa20/$(am__dirstamp)\ncrypto_core/hsalsa20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/hsalsa20/$(DEPDIR)\n\t@: > crypto_core/hsalsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo:  \\\n\tcrypto_core/hsalsa20/$(am__dirstamp) \\\n\tcrypto_core/hsalsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa20/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa20/ref\n\t@: > crypto_core/salsa20/ref/$(am__dirstamp)\ncrypto_core/salsa20/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa20/ref/$(DEPDIR)\n\t@: > crypto_core/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa20/ref/libsodium_la-core_salsa20.lo:  \\\n\tcrypto_core/salsa20/ref/$(am__dirstamp) \\\n\tcrypto_core/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa20/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa20\n\t@: > crypto_core/salsa20/$(am__dirstamp)\ncrypto_core/salsa20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa20/$(DEPDIR)\n\t@: > crypto_core/salsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa20/libsodium_la-core_salsa20_api.lo:  \\\n\tcrypto_core/salsa20/$(am__dirstamp) \\\n\tcrypto_core/salsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash\n\t@: > crypto_generichash/$(am__dirstamp)\ncrypto_generichash/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash/$(DEPDIR)\n\t@: > crypto_generichash/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/libsodium_la-crypto_generichash.lo:  \\\n\tcrypto_generichash/$(am__dirstamp) \\\n\tcrypto_generichash/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash/blake2\n\t@: > crypto_generichash/blake2/$(am__dirstamp)\ncrypto_generichash/blake2/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash/blake2/$(DEPDIR)\n\t@: > crypto_generichash/blake2/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo:  \\\n\tcrypto_generichash/blake2/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash/blake2/ref\n\t@: > crypto_generichash/blake2/ref/$(am__dirstamp)\ncrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_generichash/blake2/ref/$(DEPDIR)\n\t@: > crypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo:  \\\n\tcrypto_generichash/blake2/ref/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo:  \\\n\tcrypto_generichash/blake2/ref/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo:  \\\n\tcrypto_generichash/blake2/ref/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash\n\t@: > crypto_hash/$(am__dirstamp)\ncrypto_hash/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/$(DEPDIR)\n\t@: > crypto_hash/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/libsodium_la-crypto_hash.lo: crypto_hash/$(am__dirstamp) \\\n\tcrypto_hash/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha256/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha256\n\t@: > crypto_hash/sha256/$(am__dirstamp)\ncrypto_hash/sha256/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha256/$(DEPDIR)\n\t@: > crypto_hash/sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha256/libsodium_la-hash_sha256_api.lo:  \\\n\tcrypto_hash/sha256/$(am__dirstamp) \\\n\tcrypto_hash/sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha256/cp/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha256/cp\n\t@: > crypto_hash/sha256/cp/$(am__dirstamp)\ncrypto_hash/sha256/cp/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha256/cp/$(DEPDIR)\n\t@: > crypto_hash/sha256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha256/cp/libsodium_la-hash_sha256.lo:  \\\n\tcrypto_hash/sha256/cp/$(am__dirstamp) \\\n\tcrypto_hash/sha256/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha512/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha512\n\t@: > crypto_hash/sha512/$(am__dirstamp)\ncrypto_hash/sha512/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha512/$(DEPDIR)\n\t@: > crypto_hash/sha512/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha512/libsodium_la-hash_sha512_api.lo:  \\\n\tcrypto_hash/sha512/$(am__dirstamp) \\\n\tcrypto_hash/sha512/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha512/cp/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha512/cp\n\t@: > crypto_hash/sha512/cp/$(am__dirstamp)\ncrypto_hash/sha512/cp/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_hash/sha512/cp/$(DEPDIR)\n\t@: > crypto_hash/sha512/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_hash/sha512/cp/libsodium_la-hash_sha512.lo:  \\\n\tcrypto_hash/sha512/cp/$(am__dirstamp) \\\n\tcrypto_hash/sha512/cp/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth\n\t@: > crypto_onetimeauth/$(am__dirstamp)\ncrypto_onetimeauth/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/$(DEPDIR)\n\t@: > crypto_onetimeauth/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo:  \\\n\tcrypto_onetimeauth/$(am__dirstamp) \\\n\tcrypto_onetimeauth/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305\n\t@: > crypto_onetimeauth/poly1305/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305/$(DEPDIR)\n\t@: > crypto_onetimeauth/poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo:  \\\n\tcrypto_onetimeauth/poly1305/$(am__dirstamp) \\\n\tcrypto_onetimeauth/poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/donna/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305/donna\n\t@: > crypto_onetimeauth/poly1305/donna/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/donna/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305/donna/$(DEPDIR)\n\t@: > crypto_onetimeauth/poly1305/donna/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo:  \\\n\tcrypto_onetimeauth/poly1305/donna/$(am__dirstamp) \\\n\tcrypto_onetimeauth/poly1305/donna/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256\n\t@: > crypto_pwhash/scryptsalsa208sha256/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)\n\t@: > crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/nosse/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256/nosse\n\t@: > crypto_pwhash/scryptsalsa208sha256/nosse/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)\n\t@: > crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult\n\t@: > crypto_scalarmult/$(am__dirstamp)\ncrypto_scalarmult/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/$(DEPDIR)\n\t@: > crypto_scalarmult/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/libsodium_la-crypto_scalarmult.lo:  \\\n\tcrypto_scalarmult/$(am__dirstamp) \\\n\tcrypto_scalarmult/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519\n\t@: > crypto_scalarmult/curve25519/$(am__dirstamp)\ncrypto_scalarmult/curve25519/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/$(DEPDIR)\n\t@: > crypto_scalarmult/curve25519/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo:  \\\n\tcrypto_scalarmult/curve25519/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox\n\t@: > crypto_secretbox/$(am__dirstamp)\ncrypto_secretbox/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox/$(DEPDIR)\n\t@: > crypto_secretbox/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/libsodium_la-crypto_secretbox.lo:  \\\n\tcrypto_secretbox/$(am__dirstamp) \\\n\tcrypto_secretbox/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/libsodium_la-crypto_secretbox_easy.lo:  \\\n\tcrypto_secretbox/$(am__dirstamp) \\\n\tcrypto_secretbox/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox/xsalsa20poly1305\n\t@: > crypto_secretbox/xsalsa20poly1305/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox/xsalsa20poly1305/$(DEPDIR)\n\t@: > crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo:  \\\n\tcrypto_secretbox/xsalsa20poly1305/$(am__dirstamp) \\\n\tcrypto_secretbox/xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox/xsalsa20poly1305/ref\n\t@: > crypto_secretbox/xsalsa20poly1305/ref/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)\n\t@: > crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo:  \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/$(am__dirstamp) \\\n\tcrypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash\n\t@: > crypto_shorthash/$(am__dirstamp)\ncrypto_shorthash/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash/$(DEPDIR)\n\t@: > crypto_shorthash/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/libsodium_la-crypto_shorthash.lo:  \\\n\tcrypto_shorthash/$(am__dirstamp) \\\n\tcrypto_shorthash/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/siphash24/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash/siphash24\n\t@: > crypto_shorthash/siphash24/$(am__dirstamp)\ncrypto_shorthash/siphash24/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash/siphash24/$(DEPDIR)\n\t@: > crypto_shorthash/siphash24/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo:  \\\n\tcrypto_shorthash/siphash24/$(am__dirstamp) \\\n\tcrypto_shorthash/siphash24/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/siphash24/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash/siphash24/ref\n\t@: > crypto_shorthash/siphash24/ref/$(am__dirstamp)\ncrypto_shorthash/siphash24/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_shorthash/siphash24/ref/$(DEPDIR)\n\t@: > crypto_shorthash/siphash24/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo:  \\\n\tcrypto_shorthash/siphash24/ref/$(am__dirstamp) \\\n\tcrypto_shorthash/siphash24/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign\n\t@: > crypto_sign/$(am__dirstamp)\ncrypto_sign/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign/$(DEPDIR)\n\t@: > crypto_sign/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/libsodium_la-crypto_sign.lo: crypto_sign/$(am__dirstamp) \\\n\tcrypto_sign/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign/ed25519\n\t@: > crypto_sign/ed25519/$(am__dirstamp)\ncrypto_sign/ed25519/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign/ed25519/$(DEPDIR)\n\t@: > crypto_sign/ed25519/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo:  \\\n\tcrypto_sign/ed25519/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign/ed25519/ref10\n\t@: > crypto_sign/ed25519/ref10/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_sign/ed25519/ref10/$(DEPDIR)\n\t@: > crypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_0.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_1.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_add.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_add.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-keypair.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-open.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-sign.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream\n\t@: > crypto_stream/$(am__dirstamp)\ncrypto_stream/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/$(DEPDIR)\n\t@: > crypto_stream/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/libsodium_la-crypto_stream.lo:  \\\n\tcrypto_stream/$(am__dirstamp) \\\n\tcrypto_stream/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20\n\t@: > crypto_stream/chacha20/$(am__dirstamp)\ncrypto_stream/chacha20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20/$(DEPDIR)\n\t@: > crypto_stream/chacha20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/libsodium_la-stream_chacha20.lo:  \\\n\tcrypto_stream/chacha20/$(am__dirstamp) \\\n\tcrypto_stream/chacha20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20/ref\n\t@: > crypto_stream/chacha20/ref/$(am__dirstamp)\ncrypto_stream/chacha20/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20/ref/$(DEPDIR)\n\t@: > crypto_stream/chacha20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo:  \\\n\tcrypto_stream/chacha20/ref/$(am__dirstamp) \\\n\tcrypto_stream/chacha20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20\n\t@: > crypto_stream/salsa20/$(am__dirstamp)\ncrypto_stream/salsa20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20/$(DEPDIR)\n\t@: > crypto_stream/salsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo:  \\\n\tcrypto_stream/salsa20/$(am__dirstamp) \\\n\tcrypto_stream/salsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/xsalsa20/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/xsalsa20\n\t@: > crypto_stream/xsalsa20/$(am__dirstamp)\ncrypto_stream/xsalsa20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/xsalsa20/$(DEPDIR)\n\t@: > crypto_stream/xsalsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo:  \\\n\tcrypto_stream/xsalsa20/$(am__dirstamp) \\\n\tcrypto_stream/xsalsa20/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/xsalsa20/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/xsalsa20/ref\n\t@: > crypto_stream/xsalsa20/ref/$(am__dirstamp)\ncrypto_stream/xsalsa20/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/xsalsa20/ref/$(DEPDIR)\n\t@: > crypto_stream/xsalsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo:  \\\n\tcrypto_stream/xsalsa20/ref/$(am__dirstamp) \\\n\tcrypto_stream/xsalsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo:  \\\n\tcrypto_stream/xsalsa20/ref/$(am__dirstamp) \\\n\tcrypto_stream/xsalsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/16/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/16\n\t@: > crypto_verify/16/$(am__dirstamp)\ncrypto_verify/16/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/16/$(DEPDIR)\n\t@: > crypto_verify/16/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/16/libsodium_la-verify_16_api.lo:  \\\n\tcrypto_verify/16/$(am__dirstamp) \\\n\tcrypto_verify/16/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/16/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/16/ref\n\t@: > crypto_verify/16/ref/$(am__dirstamp)\ncrypto_verify/16/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/16/ref/$(DEPDIR)\n\t@: > crypto_verify/16/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/16/ref/libsodium_la-verify_16.lo:  \\\n\tcrypto_verify/16/ref/$(am__dirstamp) \\\n\tcrypto_verify/16/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/32/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/32\n\t@: > crypto_verify/32/$(am__dirstamp)\ncrypto_verify/32/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/32/$(DEPDIR)\n\t@: > crypto_verify/32/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/32/libsodium_la-verify_32_api.lo:  \\\n\tcrypto_verify/32/$(am__dirstamp) \\\n\tcrypto_verify/32/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/32/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/32/ref\n\t@: > crypto_verify/32/ref/$(am__dirstamp)\ncrypto_verify/32/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/32/ref/$(DEPDIR)\n\t@: > crypto_verify/32/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/32/ref/libsodium_la-verify_32.lo:  \\\n\tcrypto_verify/32/ref/$(am__dirstamp) \\\n\tcrypto_verify/32/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/64/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/64\n\t@: > crypto_verify/64/$(am__dirstamp)\ncrypto_verify/64/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/64/$(DEPDIR)\n\t@: > crypto_verify/64/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/64/libsodium_la-verify_64_api.lo:  \\\n\tcrypto_verify/64/$(am__dirstamp) \\\n\tcrypto_verify/64/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/64/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/64/ref\n\t@: > crypto_verify/64/ref/$(am__dirstamp)\ncrypto_verify/64/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_verify/64/ref/$(DEPDIR)\n\t@: > crypto_verify/64/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_verify/64/ref/libsodium_la-verify_64.lo:  \\\n\tcrypto_verify/64/ref/$(am__dirstamp) \\\n\tcrypto_verify/64/ref/$(DEPDIR)/$(am__dirstamp)\nrandombytes/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes\n\t@: > randombytes/$(am__dirstamp)\nrandombytes/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/$(DEPDIR)\n\t@: > randombytes/$(DEPDIR)/$(am__dirstamp)\nrandombytes/libsodium_la-randombytes.lo: randombytes/$(am__dirstamp) \\\n\trandombytes/$(DEPDIR)/$(am__dirstamp)\nsodium/$(am__dirstamp):\n\t@$(MKDIR_P) sodium\n\t@: > sodium/$(am__dirstamp)\nsodium/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) sodium/$(DEPDIR)\n\t@: > sodium/$(DEPDIR)/$(am__dirstamp)\nsodium/libsodium_la-core.lo: sodium/$(am__dirstamp) \\\n\tsodium/$(DEPDIR)/$(am__dirstamp)\nsodium/libsodium_la-runtime.lo: sodium/$(am__dirstamp) \\\n\tsodium/$(DEPDIR)/$(am__dirstamp)\nsodium/libsodium_la-utils.lo: sodium/$(am__dirstamp) \\\n\tsodium/$(DEPDIR)/$(am__dirstamp)\nsodium/libsodium_la-version.lo: sodium/$(am__dirstamp) \\\n\tsodium/$(DEPDIR)/$(am__dirstamp)\nrandombytes/salsa20/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/salsa20\n\t@: > randombytes/salsa20/$(am__dirstamp)\nrandombytes/salsa20/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/salsa20/$(DEPDIR)\n\t@: > randombytes/salsa20/$(DEPDIR)/$(am__dirstamp)\nrandombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo:  \\\n\trandombytes/salsa20/$(am__dirstamp) \\\n\trandombytes/salsa20/$(DEPDIR)/$(am__dirstamp)\nrandombytes/nativeclient/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/nativeclient\n\t@: > randombytes/nativeclient/$(am__dirstamp)\nrandombytes/nativeclient/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/nativeclient/$(DEPDIR)\n\t@: > randombytes/nativeclient/$(DEPDIR)/$(am__dirstamp)\nrandombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo:  \\\n\trandombytes/nativeclient/$(am__dirstamp) \\\n\trandombytes/nativeclient/$(DEPDIR)/$(am__dirstamp)\nrandombytes/sysrandom/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/sysrandom\n\t@: > randombytes/sysrandom/$(am__dirstamp)\nrandombytes/sysrandom/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) randombytes/sysrandom/$(DEPDIR)\n\t@: > randombytes/sysrandom/$(DEPDIR)/$(am__dirstamp)\nrandombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo:  \\\n\trandombytes/sysrandom/$(am__dirstamp) \\\n\trandombytes/sysrandom/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/donna_c64/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/donna_c64\n\t@: > crypto_scalarmult/curve25519/donna_c64/$(am__dirstamp)\ncrypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)\n\t@: > crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo:  \\\n\tcrypto_scalarmult/curve25519/donna_c64/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/ref10\n\t@: > crypto_scalarmult/curve25519/ref10/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/ref10/$(DEPDIR)\n\t@: > crypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo:  \\\n\tcrypto_scalarmult/curve25519/ref10/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/sandy2x\n\t@: > crypto_scalarmult/curve25519/sandy2x/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)\n\t@: > crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo:  \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo:  \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo:  \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo:  \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(am__dirstamp) \\\n\tcrypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/amd64_xmm6/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20/amd64_xmm6\n\t@: > crypto_stream/salsa20/amd64_xmm6/$(am__dirstamp)\ncrypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)\n\t@: > crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo:  \\\n\tcrypto_stream/salsa20/amd64_xmm6/$(am__dirstamp) \\\n\tcrypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20/ref\n\t@: > crypto_stream/salsa20/ref/$(am__dirstamp)\ncrypto_stream/salsa20/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa20/ref/$(DEPDIR)\n\t@: > crypto_stream/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo:  \\\n\tcrypto_stream/salsa20/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo:  \\\n\tcrypto_stream/salsa20/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa2012/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa2012/ref\n\t@: > crypto_core/salsa2012/ref/$(am__dirstamp)\ncrypto_core/salsa2012/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa2012/ref/$(DEPDIR)\n\t@: > crypto_core/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo:  \\\n\tcrypto_core/salsa2012/ref/$(am__dirstamp) \\\n\tcrypto_core/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa2012/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa2012\n\t@: > crypto_core/salsa2012/$(am__dirstamp)\ncrypto_core/salsa2012/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa2012/$(DEPDIR)\n\t@: > crypto_core/salsa2012/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo:  \\\n\tcrypto_core/salsa2012/$(am__dirstamp) \\\n\tcrypto_core/salsa2012/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa208/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa208/ref\n\t@: > crypto_core/salsa208/ref/$(am__dirstamp)\ncrypto_core/salsa208/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa208/ref/$(DEPDIR)\n\t@: > crypto_core/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa208/ref/libsodium_la-core_salsa208.lo:  \\\n\tcrypto_core/salsa208/ref/$(am__dirstamp) \\\n\tcrypto_core/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa208/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa208\n\t@: > crypto_core/salsa208/$(am__dirstamp)\ncrypto_core/salsa208/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_core/salsa208/$(DEPDIR)\n\t@: > crypto_core/salsa208/$(DEPDIR)/$(am__dirstamp)\ncrypto_core/salsa208/libsodium_la-core_salsa208_api.lo:  \\\n\tcrypto_core/salsa208/$(am__dirstamp) \\\n\tcrypto_core/salsa208/$(DEPDIR)/$(am__dirstamp)\ncrypto_sign/ed25519/ref10/libsodium_la-obsolete.lo:  \\\n\tcrypto_sign/ed25519/ref10/$(am__dirstamp) \\\n\tcrypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/aes128ctr/portable\n\t@: > crypto_stream/aes128ctr/portable/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/aes128ctr/portable/$(DEPDIR)\n\t@: > crypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/aes128ctr\n\t@: > crypto_stream/aes128ctr/$(am__dirstamp)\ncrypto_stream/aes128ctr/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/aes128ctr/$(DEPDIR)\n\t@: > crypto_stream/aes128ctr/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo:  \\\n\tcrypto_stream/aes128ctr/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo:  \\\n\tcrypto_stream/aes128ctr/portable/$(am__dirstamp) \\\n\tcrypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa2012/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa2012\n\t@: > crypto_stream/salsa2012/$(am__dirstamp)\ncrypto_stream/salsa2012/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa2012/$(DEPDIR)\n\t@: > crypto_stream/salsa2012/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo:  \\\n\tcrypto_stream/salsa2012/$(am__dirstamp) \\\n\tcrypto_stream/salsa2012/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa2012/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa2012/ref\n\t@: > crypto_stream/salsa2012/ref/$(am__dirstamp)\ncrypto_stream/salsa2012/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa2012/ref/$(DEPDIR)\n\t@: > crypto_stream/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo:  \\\n\tcrypto_stream/salsa2012/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo:  \\\n\tcrypto_stream/salsa2012/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa208/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa208\n\t@: > crypto_stream/salsa208/$(am__dirstamp)\ncrypto_stream/salsa208/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa208/$(DEPDIR)\n\t@: > crypto_stream/salsa208/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo:  \\\n\tcrypto_stream/salsa208/$(am__dirstamp) \\\n\tcrypto_stream/salsa208/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa208/ref/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa208/ref\n\t@: > crypto_stream/salsa208/ref/$(am__dirstamp)\ncrypto_stream/salsa208/ref/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/salsa208/ref/$(DEPDIR)\n\t@: > crypto_stream/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo:  \\\n\tcrypto_stream/salsa208/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo:  \\\n\tcrypto_stream/salsa208/ref/$(am__dirstamp) \\\n\tcrypto_stream/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\n\nlibsodium.la: $(libsodium_la_OBJECTS) $(libsodium_la_DEPENDENCIES) $(EXTRA_libsodium_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libsodium_la_LINK)  $(libsodium_la_OBJECTS) $(libsodium_la_LIBADD) $(LIBS)\ncrypto_pwhash/scryptsalsa208sha256/sse/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256/sse\n\t@: > crypto_pwhash/scryptsalsa208sha256/sse/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)\n\t@: > crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/$(am__dirstamp)\ncrypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo:  \\\n\tcrypto_pwhash/scryptsalsa208sha256/sse/$(am__dirstamp) \\\n\tcrypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/sse2/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305/sse2\n\t@: > crypto_onetimeauth/poly1305/sse2/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/sse2/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_onetimeauth/poly1305/sse2/$(DEPDIR)\n\t@: > crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/$(am__dirstamp)\ncrypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo:  \\\n\tcrypto_onetimeauth/poly1305/sse2/$(am__dirstamp) \\\n\tcrypto_onetimeauth/poly1305/sse2/$(DEPDIR)/$(am__dirstamp)\n\nlibsse2.la: $(libsse2_la_OBJECTS) $(libsse2_la_DEPENDENCIES) $(EXTRA_libsse2_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libsse2_la_LINK)  $(libsse2_la_OBJECTS) $(libsse2_la_LIBADD) $(LIBS)\ncrypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo:  \\\n\tcrypto_generichash/blake2/ref/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\n\nlibsse41.la: $(libsse41_la_OBJECTS) $(libsse41_la_DEPENDENCIES) $(EXTRA_libsse41_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libsse41_la_LINK)  $(libsse41_la_OBJECTS) $(libsse41_la_LIBADD) $(LIBS)\ncrypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo:  \\\n\tcrypto_generichash/blake2/ref/$(am__dirstamp) \\\n\tcrypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/vec/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20/vec\n\t@: > crypto_stream/chacha20/vec/$(am__dirstamp)\ncrypto_stream/chacha20/vec/$(DEPDIR)/$(am__dirstamp):\n\t@$(MKDIR_P) crypto_stream/chacha20/vec/$(DEPDIR)\n\t@: > crypto_stream/chacha20/vec/$(DEPDIR)/$(am__dirstamp)\ncrypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo:  \\\n\tcrypto_stream/chacha20/vec/$(am__dirstamp) \\\n\tcrypto_stream/chacha20/vec/$(DEPDIR)/$(am__dirstamp)\n\nlibssse3.la: $(libssse3_la_OBJECTS) $(libssse3_la_DEPENDENCIES) $(EXTRA_libssse3_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libssse3_la_LINK)  $(libssse3_la_OBJECTS) $(libssse3_la_LIBADD) $(LIBS)\n\nmostlyclean-compile:\n\t-rm -f *.$(OBJEXT)\n\t-rm -f crypto_aead/aes256gcm/aesni/*.$(OBJEXT)\n\t-rm -f crypto_aead/aes256gcm/aesni/*.lo\n\t-rm -f crypto_aead/chacha20poly1305/sodium/*.$(OBJEXT)\n\t-rm -f crypto_aead/chacha20poly1305/sodium/*.lo\n\t-rm -f crypto_auth/*.$(OBJEXT)\n\t-rm -f crypto_auth/*.lo\n\t-rm -f crypto_auth/hmacsha256/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha256/*.lo\n\t-rm -f crypto_auth/hmacsha256/cp/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha256/cp/*.lo\n\t-rm -f crypto_auth/hmacsha512/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha512/*.lo\n\t-rm -f crypto_auth/hmacsha512/cp/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha512/cp/*.lo\n\t-rm -f crypto_auth/hmacsha512256/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha512256/*.lo\n\t-rm -f crypto_auth/hmacsha512256/cp/*.$(OBJEXT)\n\t-rm -f crypto_auth/hmacsha512256/cp/*.lo\n\t-rm -f crypto_box/*.$(OBJEXT)\n\t-rm -f crypto_box/*.lo\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/*.$(OBJEXT)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/*.lo\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/ref/*.$(OBJEXT)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/ref/*.lo\n\t-rm -f crypto_core/hsalsa20/*.$(OBJEXT)\n\t-rm -f crypto_core/hsalsa20/*.lo\n\t-rm -f crypto_core/hsalsa20/ref2/*.$(OBJEXT)\n\t-rm -f crypto_core/hsalsa20/ref2/*.lo\n\t-rm -f crypto_core/salsa20/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa20/*.lo\n\t-rm -f crypto_core/salsa20/ref/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa20/ref/*.lo\n\t-rm -f crypto_core/salsa2012/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa2012/*.lo\n\t-rm -f crypto_core/salsa2012/ref/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa2012/ref/*.lo\n\t-rm -f crypto_core/salsa208/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa208/*.lo\n\t-rm -f crypto_core/salsa208/ref/*.$(OBJEXT)\n\t-rm -f crypto_core/salsa208/ref/*.lo\n\t-rm -f crypto_generichash/*.$(OBJEXT)\n\t-rm -f crypto_generichash/*.lo\n\t-rm -f crypto_generichash/blake2/*.$(OBJEXT)\n\t-rm -f crypto_generichash/blake2/*.lo\n\t-rm -f crypto_generichash/blake2/ref/*.$(OBJEXT)\n\t-rm -f crypto_generichash/blake2/ref/*.lo\n\t-rm -f crypto_hash/*.$(OBJEXT)\n\t-rm -f crypto_hash/*.lo\n\t-rm -f crypto_hash/sha256/*.$(OBJEXT)\n\t-rm -f crypto_hash/sha256/*.lo\n\t-rm -f crypto_hash/sha256/cp/*.$(OBJEXT)\n\t-rm -f crypto_hash/sha256/cp/*.lo\n\t-rm -f crypto_hash/sha512/*.$(OBJEXT)\n\t-rm -f crypto_hash/sha512/*.lo\n\t-rm -f crypto_hash/sha512/cp/*.$(OBJEXT)\n\t-rm -f crypto_hash/sha512/cp/*.lo\n\t-rm -f crypto_onetimeauth/*.$(OBJEXT)\n\t-rm -f crypto_onetimeauth/*.lo\n\t-rm -f crypto_onetimeauth/poly1305/*.$(OBJEXT)\n\t-rm -f crypto_onetimeauth/poly1305/*.lo\n\t-rm -f crypto_onetimeauth/poly1305/donna/*.$(OBJEXT)\n\t-rm -f crypto_onetimeauth/poly1305/donna/*.lo\n\t-rm -f crypto_onetimeauth/poly1305/sse2/*.$(OBJEXT)\n\t-rm -f crypto_onetimeauth/poly1305/sse2/*.lo\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/*.$(OBJEXT)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/*.lo\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/nosse/*.$(OBJEXT)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/nosse/*.lo\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/sse/*.$(OBJEXT)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/sse/*.lo\n\t-rm -f crypto_scalarmult/*.$(OBJEXT)\n\t-rm -f crypto_scalarmult/*.lo\n\t-rm -f crypto_scalarmult/curve25519/*.$(OBJEXT)\n\t-rm -f crypto_scalarmult/curve25519/*.lo\n\t-rm -f crypto_scalarmult/curve25519/donna_c64/*.$(OBJEXT)\n\t-rm -f crypto_scalarmult/curve25519/donna_c64/*.lo\n\t-rm -f crypto_scalarmult/curve25519/ref10/*.$(OBJEXT)\n\t-rm -f crypto_scalarmult/curve25519/ref10/*.lo\n\t-rm -f crypto_scalarmult/curve25519/sandy2x/*.$(OBJEXT)\n\t-rm -f crypto_scalarmult/curve25519/sandy2x/*.lo\n\t-rm -f crypto_secretbox/*.$(OBJEXT)\n\t-rm -f crypto_secretbox/*.lo\n\t-rm -f crypto_secretbox/xsalsa20poly1305/*.$(OBJEXT)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/*.lo\n\t-rm -f crypto_secretbox/xsalsa20poly1305/ref/*.$(OBJEXT)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/ref/*.lo\n\t-rm -f crypto_shorthash/*.$(OBJEXT)\n\t-rm -f crypto_shorthash/*.lo\n\t-rm -f crypto_shorthash/siphash24/*.$(OBJEXT)\n\t-rm -f crypto_shorthash/siphash24/*.lo\n\t-rm -f crypto_shorthash/siphash24/ref/*.$(OBJEXT)\n\t-rm -f crypto_shorthash/siphash24/ref/*.lo\n\t-rm -f crypto_sign/*.$(OBJEXT)\n\t-rm -f crypto_sign/*.lo\n\t-rm -f crypto_sign/ed25519/*.$(OBJEXT)\n\t-rm -f crypto_sign/ed25519/*.lo\n\t-rm -f crypto_sign/ed25519/ref10/*.$(OBJEXT)\n\t-rm -f crypto_sign/ed25519/ref10/*.lo\n\t-rm -f crypto_stream/*.$(OBJEXT)\n\t-rm -f crypto_stream/*.lo\n\t-rm -f crypto_stream/aes128ctr/*.$(OBJEXT)\n\t-rm -f crypto_stream/aes128ctr/*.lo\n\t-rm -f crypto_stream/aes128ctr/portable/*.$(OBJEXT)\n\t-rm -f crypto_stream/aes128ctr/portable/*.lo\n\t-rm -f crypto_stream/chacha20/*.$(OBJEXT)\n\t-rm -f crypto_stream/chacha20/*.lo\n\t-rm -f crypto_stream/chacha20/ref/*.$(OBJEXT)\n\t-rm -f crypto_stream/chacha20/ref/*.lo\n\t-rm -f crypto_stream/chacha20/vec/*.$(OBJEXT)\n\t-rm -f crypto_stream/chacha20/vec/*.lo\n\t-rm -f crypto_stream/salsa20/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa20/*.lo\n\t-rm -f crypto_stream/salsa20/amd64_xmm6/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa20/amd64_xmm6/*.lo\n\t-rm -f crypto_stream/salsa20/ref/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa20/ref/*.lo\n\t-rm -f crypto_stream/salsa2012/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa2012/*.lo\n\t-rm -f crypto_stream/salsa2012/ref/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa2012/ref/*.lo\n\t-rm -f crypto_stream/salsa208/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa208/*.lo\n\t-rm -f crypto_stream/salsa208/ref/*.$(OBJEXT)\n\t-rm -f crypto_stream/salsa208/ref/*.lo\n\t-rm -f crypto_stream/xsalsa20/*.$(OBJEXT)\n\t-rm -f crypto_stream/xsalsa20/*.lo\n\t-rm -f crypto_stream/xsalsa20/ref/*.$(OBJEXT)\n\t-rm -f crypto_stream/xsalsa20/ref/*.lo\n\t-rm -f crypto_verify/16/*.$(OBJEXT)\n\t-rm -f crypto_verify/16/*.lo\n\t-rm -f crypto_verify/16/ref/*.$(OBJEXT)\n\t-rm -f crypto_verify/16/ref/*.lo\n\t-rm -f crypto_verify/32/*.$(OBJEXT)\n\t-rm -f crypto_verify/32/*.lo\n\t-rm -f crypto_verify/32/ref/*.$(OBJEXT)\n\t-rm -f crypto_verify/32/ref/*.lo\n\t-rm -f crypto_verify/64/*.$(OBJEXT)\n\t-rm -f crypto_verify/64/*.lo\n\t-rm -f crypto_verify/64/ref/*.$(OBJEXT)\n\t-rm -f crypto_verify/64/ref/*.lo\n\t-rm -f randombytes/*.$(OBJEXT)\n\t-rm -f randombytes/*.lo\n\t-rm -f randombytes/nativeclient/*.$(OBJEXT)\n\t-rm -f randombytes/nativeclient/*.lo\n\t-rm -f randombytes/salsa20/*.$(OBJEXT)\n\t-rm -f randombytes/salsa20/*.lo\n\t-rm -f randombytes/sysrandom/*.$(OBJEXT)\n\t-rm -f randombytes/sysrandom/*.lo\n\t-rm -f sodium/*.$(OBJEXT)\n\t-rm -f sodium/*.lo\n\ndistclean-compile:\n\t-rm -f *.tab.c\n\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/$(DEPDIR)/libsodium_la-crypto_auth.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha256/$(DEPDIR)/libsodium_la-auth_hmacsha256_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512/$(DEPDIR)/libsodium_la-auth_hmacsha512_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512256/$(DEPDIR)/libsodium_la-auth_hmacsha512256_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/$(DEPDIR)/libsodium_la-crypto_box.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/$(DEPDIR)/libsodium_la-crypto_box_easy.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/$(DEPDIR)/libsodium_la-crypto_box_seal.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-after_curve25519xsalsa20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-before_curve25519xsalsa20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-keypair_curve25519xsalsa20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa20/$(DEPDIR)/libsodium_la-core_salsa20_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa20/ref/$(DEPDIR)/libsodium_la-core_salsa20.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa2012/$(DEPDIR)/libsodium_la-core_salsa2012_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa2012/ref/$(DEPDIR)/libsodium_la-core_salsa2012.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa208/$(DEPDIR)/libsodium_la-core_salsa208_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_core/salsa208/ref/$(DEPDIR)/libsodium_la-core_salsa208.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/$(DEPDIR)/libsodium_la-generichash_blake2_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-compress-ref.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-ref.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-generichash_blake2b.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/ref/$(DEPDIR)/libsse41_la-blake2b-compress-sse41.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_generichash/blake2/ref/$(DEPDIR)/libssse3_la-blake2b-compress-ssse3.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/$(DEPDIR)/libsodium_la-crypto_hash.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/sha256/$(DEPDIR)/libsodium_la-hash_sha256_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/sha256/cp/$(DEPDIR)/libsodium_la-hash_sha256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/sha512/$(DEPDIR)/libsodium_la-hash_sha512_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/poly1305/donna/$(DEPDIR)/libsodium_la-poly1305_donna.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/libsse2_la-poly1305_sse2.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pbkdf2-sha256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-scrypt_platform.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256_nosse.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/libsse2_la-pwhash_scryptsalsa208sha256_sse.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/$(DEPDIR)/libsodium_la-crypto_scalarmult.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/$(DEPDIR)/libsodium_la-scalarmult_curve25519.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/libsodium_la-curve25519_donna_c64.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_0_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_1_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_add_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_copy_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_cswap_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_invert_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul121666_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sq_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sub_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes_curve25519_ref10.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-curve25519_sandy2x.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe51_invert.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe_frombytes_sandy2x.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-sandy2x.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox_easy.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/libsodium_la-secretbox_xsalsa20poly1305_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_xsalsa20poly1305.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_shorthash/$(DEPDIR)/libsodium_la-crypto_shorthash.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_shorthash/siphash24/$(DEPDIR)/libsodium_la-shorthash_siphash24_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_shorthash/siphash24/ref/$(DEPDIR)/libsodium_la-shorthash_siphash24.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/$(DEPDIR)/libsodium_la-crypto_sign.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/$(DEPDIR)/libsodium_la-sign_ed25519_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_0.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_1.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_add.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_cmov.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_copy.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_invert.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnegative.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnonzero.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_mul.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_neg.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_pow22523.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq2.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sub.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_add.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_double_scalarmult.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_frombytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_madd.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_msub.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p2.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p3.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_0.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_dbl.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_0.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_dbl.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_cached.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_p2.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_tobytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_precomp_0.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_scalarmult_base.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_sub.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_tobytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-keypair.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-obsolete.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-open.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_muladd.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_reduce.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sign.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/$(DEPDIR)/libsodium_la-crypto_stream.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/$(DEPDIR)/libsodium_la-stream_aes128ctr_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-afternm_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-beforenm_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-common_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-consts_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-int128_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-stream_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-xor_afternm_aes128ctr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/chacha20/$(DEPDIR)/libsodium_la-stream_chacha20.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/chacha20/ref/$(DEPDIR)/libsodium_la-stream_chacha20_ref.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/chacha20/vec/$(DEPDIR)/libssse3_la-stream_chacha20_vec.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa20/$(DEPDIR)/libsodium_la-stream_salsa20_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/libsodium_la-stream_salsa20_amd64_xmm6.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-stream_salsa20_ref.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-xor_salsa20_ref.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa2012/$(DEPDIR)/libsodium_la-stream_salsa2012_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-stream_salsa2012.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-xor_salsa2012.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa208/$(DEPDIR)/libsodium_la-stream_salsa208_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-stream_salsa208.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-xor_salsa208.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/xsalsa20/$(DEPDIR)/libsodium_la-stream_xsalsa20_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-stream_xsalsa20.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-xor_xsalsa20.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/16/$(DEPDIR)/libsodium_la-verify_16_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/16/ref/$(DEPDIR)/libsodium_la-verify_16.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/32/$(DEPDIR)/libsodium_la-verify_32_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/32/ref/$(DEPDIR)/libsodium_la-verify_32.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/64/$(DEPDIR)/libsodium_la-verify_64_api.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@crypto_verify/64/ref/$(DEPDIR)/libsodium_la-verify_64.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@randombytes/$(DEPDIR)/libsodium_la-randombytes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@randombytes/nativeclient/$(DEPDIR)/libsodium_la-randombytes_nativeclient.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@randombytes/salsa20/$(DEPDIR)/libsodium_la-randombytes_salsa20_random.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@randombytes/sysrandom/$(DEPDIR)/libsodium_la-randombytes_sysrandom.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@sodium/$(DEPDIR)/libsodium_la-core.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@sodium/$(DEPDIR)/libsodium_la-runtime.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@sodium/$(DEPDIR)/libsodium_la-utils.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@sodium/$(DEPDIR)/libsodium_la-version.Plo@am__quote@\n\n.S.o:\n@am__fastdepCCAS_TRUE@\t$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCCAS_TRUE@\t$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCCAS_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\tDEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ $<\n\n.S.obj:\n@am__fastdepCCAS_TRUE@\t$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCCAS_TRUE@\t$(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCCAS_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\tDEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.S.lo:\n@am__fastdepCCAS_TRUE@\t$(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCCAS_TRUE@\t$(LTCPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCCAS_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\tDEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS@am__nodep@)$(LTCPPASCOMPILE) -c -o $@ $<\n\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo: crypto_scalarmult/curve25519/sandy2x/sandy2x.S\n@am__fastdepCCAS_TRUE@\t$(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT crypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo -MD -MP -MF crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-sandy2x.Tpo -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/sandy2x.S' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/sandy2x.S\n@am__fastdepCCAS_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-sandy2x.Tpo crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-sandy2x.Plo\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS)source='crypto_scalarmult/curve25519/sandy2x/sandy2x.S' object='crypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\tDEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/sandy2x.S' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/sandy2x.S\n\ncrypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo: crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S\n@am__fastdepCCAS_TRUE@\t$(AM_V_CPPAS)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT crypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo -MD -MP -MF crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/libsodium_la-stream_salsa20_amd64_xmm6.Tpo -c -o crypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo `test -f 'crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S' || echo '$(srcdir)/'`crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S\n@am__fastdepCCAS_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/libsodium_la-stream_salsa20_amd64_xmm6.Tpo crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/libsodium_la-stream_salsa20_amd64_xmm6.Plo\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS)source='crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S' object='crypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCCAS_FALSE@\tDEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCCAS_FALSE@\t$(AM_V_CPPAS@am__nodep@)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o crypto_stream/salsa20/amd64_xmm6/libsodium_la-stream_salsa20_amd64_xmm6.lo `test -f 'crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S' || echo '$(srcdir)/'`crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\ncrypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo: crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo -MD -MP -MF crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Tpo -c -o crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo `test -f 'crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Tpo crypto_aead/aes256gcm/aesni/$(DEPDIR)/libaesni_la-aead_aes256gcm_aesni.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c' object='crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libaesni_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/aes256gcm/aesni/libaesni_la-aead_aes256gcm_aesni.lo `test -f 'crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c' || echo '$(srcdir)/'`crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c\n\ncrypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo: crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo -MD -MP -MF crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Tpo -c -o crypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo `test -f 'crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c' || echo '$(srcdir)/'`crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Tpo crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/libsodium_la-aead_chacha20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c' object='crypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_aead/chacha20poly1305/sodium/libsodium_la-aead_chacha20poly1305.lo `test -f 'crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c' || echo '$(srcdir)/'`crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c\n\ncrypto_auth/libsodium_la-crypto_auth.lo: crypto_auth/crypto_auth.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/libsodium_la-crypto_auth.lo -MD -MP -MF crypto_auth/$(DEPDIR)/libsodium_la-crypto_auth.Tpo -c -o crypto_auth/libsodium_la-crypto_auth.lo `test -f 'crypto_auth/crypto_auth.c' || echo '$(srcdir)/'`crypto_auth/crypto_auth.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/$(DEPDIR)/libsodium_la-crypto_auth.Tpo crypto_auth/$(DEPDIR)/libsodium_la-crypto_auth.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/crypto_auth.c' object='crypto_auth/libsodium_la-crypto_auth.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/libsodium_la-crypto_auth.lo `test -f 'crypto_auth/crypto_auth.c' || echo '$(srcdir)/'`crypto_auth/crypto_auth.c\n\ncrypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo: crypto_auth/hmacsha256/auth_hmacsha256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo -MD -MP -MF crypto_auth/hmacsha256/$(DEPDIR)/libsodium_la-auth_hmacsha256_api.Tpo -c -o crypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo `test -f 'crypto_auth/hmacsha256/auth_hmacsha256_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/auth_hmacsha256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha256/$(DEPDIR)/libsodium_la-auth_hmacsha256_api.Tpo crypto_auth/hmacsha256/$(DEPDIR)/libsodium_la-auth_hmacsha256_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha256/auth_hmacsha256_api.c' object='crypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha256/libsodium_la-auth_hmacsha256_api.lo `test -f 'crypto_auth/hmacsha256/auth_hmacsha256_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/auth_hmacsha256_api.c\n\ncrypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo: crypto_auth/hmacsha256/cp/hmac_hmacsha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo -MD -MP -MF crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha256.Tpo -c -o crypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo `test -f 'crypto_auth/hmacsha256/cp/hmac_hmacsha256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/cp/hmac_hmacsha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha256.Tpo crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha256/cp/hmac_hmacsha256.c' object='crypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha256/cp/libsodium_la-hmac_hmacsha256.lo `test -f 'crypto_auth/hmacsha256/cp/hmac_hmacsha256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/cp/hmac_hmacsha256.c\n\ncrypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo: crypto_auth/hmacsha256/cp/verify_hmacsha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo -MD -MP -MF crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha256.Tpo -c -o crypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo `test -f 'crypto_auth/hmacsha256/cp/verify_hmacsha256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/cp/verify_hmacsha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha256.Tpo crypto_auth/hmacsha256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha256/cp/verify_hmacsha256.c' object='crypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha256/cp/libsodium_la-verify_hmacsha256.lo `test -f 'crypto_auth/hmacsha256/cp/verify_hmacsha256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha256/cp/verify_hmacsha256.c\n\ncrypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo: crypto_auth/hmacsha512/auth_hmacsha512_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo -MD -MP -MF crypto_auth/hmacsha512/$(DEPDIR)/libsodium_la-auth_hmacsha512_api.Tpo -c -o crypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo `test -f 'crypto_auth/hmacsha512/auth_hmacsha512_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/auth_hmacsha512_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512/$(DEPDIR)/libsodium_la-auth_hmacsha512_api.Tpo crypto_auth/hmacsha512/$(DEPDIR)/libsodium_la-auth_hmacsha512_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512/auth_hmacsha512_api.c' object='crypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512/libsodium_la-auth_hmacsha512_api.lo `test -f 'crypto_auth/hmacsha512/auth_hmacsha512_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/auth_hmacsha512_api.c\n\ncrypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo: crypto_auth/hmacsha512/cp/hmac_hmacsha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo -MD -MP -MF crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512.Tpo -c -o crypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo `test -f 'crypto_auth/hmacsha512/cp/hmac_hmacsha512.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/cp/hmac_hmacsha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512.Tpo crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512/cp/hmac_hmacsha512.c' object='crypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512/cp/libsodium_la-hmac_hmacsha512.lo `test -f 'crypto_auth/hmacsha512/cp/hmac_hmacsha512.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/cp/hmac_hmacsha512.c\n\ncrypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo: crypto_auth/hmacsha512/cp/verify_hmacsha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo -MD -MP -MF crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512.Tpo -c -o crypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo `test -f 'crypto_auth/hmacsha512/cp/verify_hmacsha512.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/cp/verify_hmacsha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512.Tpo crypto_auth/hmacsha512/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512/cp/verify_hmacsha512.c' object='crypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512/cp/libsodium_la-verify_hmacsha512.lo `test -f 'crypto_auth/hmacsha512/cp/verify_hmacsha512.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512/cp/verify_hmacsha512.c\n\ncrypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo: crypto_auth/hmacsha512256/auth_hmacsha512256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo -MD -MP -MF crypto_auth/hmacsha512256/$(DEPDIR)/libsodium_la-auth_hmacsha512256_api.Tpo -c -o crypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo `test -f 'crypto_auth/hmacsha512256/auth_hmacsha512256_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/auth_hmacsha512256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512256/$(DEPDIR)/libsodium_la-auth_hmacsha512256_api.Tpo crypto_auth/hmacsha512256/$(DEPDIR)/libsodium_la-auth_hmacsha512256_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512256/auth_hmacsha512256_api.c' object='crypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512256/libsodium_la-auth_hmacsha512256_api.lo `test -f 'crypto_auth/hmacsha512256/auth_hmacsha512256_api.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/auth_hmacsha512256_api.c\n\ncrypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo: crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo -MD -MP -MF crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512256.Tpo -c -o crypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo `test -f 'crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512256.Tpo crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-hmac_hmacsha512256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c' object='crypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512256/cp/libsodium_la-hmac_hmacsha512256.lo `test -f 'crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c\n\ncrypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo: crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo -MD -MP -MF crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512256.Tpo -c -o crypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo `test -f 'crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512256.Tpo crypto_auth/hmacsha512256/cp/$(DEPDIR)/libsodium_la-verify_hmacsha512256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c' object='crypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_auth/hmacsha512256/cp/libsodium_la-verify_hmacsha512256.lo `test -f 'crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c' || echo '$(srcdir)/'`crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c\n\ncrypto_box/libsodium_la-crypto_box.lo: crypto_box/crypto_box.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/libsodium_la-crypto_box.lo -MD -MP -MF crypto_box/$(DEPDIR)/libsodium_la-crypto_box.Tpo -c -o crypto_box/libsodium_la-crypto_box.lo `test -f 'crypto_box/crypto_box.c' || echo '$(srcdir)/'`crypto_box/crypto_box.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/$(DEPDIR)/libsodium_la-crypto_box.Tpo crypto_box/$(DEPDIR)/libsodium_la-crypto_box.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/crypto_box.c' object='crypto_box/libsodium_la-crypto_box.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/libsodium_la-crypto_box.lo `test -f 'crypto_box/crypto_box.c' || echo '$(srcdir)/'`crypto_box/crypto_box.c\n\ncrypto_box/libsodium_la-crypto_box_easy.lo: crypto_box/crypto_box_easy.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/libsodium_la-crypto_box_easy.lo -MD -MP -MF crypto_box/$(DEPDIR)/libsodium_la-crypto_box_easy.Tpo -c -o crypto_box/libsodium_la-crypto_box_easy.lo `test -f 'crypto_box/crypto_box_easy.c' || echo '$(srcdir)/'`crypto_box/crypto_box_easy.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/$(DEPDIR)/libsodium_la-crypto_box_easy.Tpo crypto_box/$(DEPDIR)/libsodium_la-crypto_box_easy.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/crypto_box_easy.c' object='crypto_box/libsodium_la-crypto_box_easy.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/libsodium_la-crypto_box_easy.lo `test -f 'crypto_box/crypto_box_easy.c' || echo '$(srcdir)/'`crypto_box/crypto_box_easy.c\n\ncrypto_box/libsodium_la-crypto_box_seal.lo: crypto_box/crypto_box_seal.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/libsodium_la-crypto_box_seal.lo -MD -MP -MF crypto_box/$(DEPDIR)/libsodium_la-crypto_box_seal.Tpo -c -o crypto_box/libsodium_la-crypto_box_seal.lo `test -f 'crypto_box/crypto_box_seal.c' || echo '$(srcdir)/'`crypto_box/crypto_box_seal.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/$(DEPDIR)/libsodium_la-crypto_box_seal.Tpo crypto_box/$(DEPDIR)/libsodium_la-crypto_box_seal.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/crypto_box_seal.c' object='crypto_box/libsodium_la-crypto_box_seal.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/libsodium_la-crypto_box_seal.lo `test -f 'crypto_box/crypto_box_seal.c' || echo '$(srcdir)/'`crypto_box/crypto_box_seal.c\n\ncrypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo: crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo -MD -MP -MF crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305_api.Tpo -c -o crypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305_api.Tpo crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c' object='crypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/curve25519xsalsa20poly1305/libsodium_la-box_curve25519xsalsa20poly1305_api.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c\n\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo: crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo -MD -MP -MF crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-after_curve25519xsalsa20poly1305.Tpo -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-after_curve25519xsalsa20poly1305.Tpo crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-after_curve25519xsalsa20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c' object='crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-after_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c\n\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo: crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo -MD -MP -MF crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-before_curve25519xsalsa20poly1305.Tpo -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-before_curve25519xsalsa20poly1305.Tpo crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-before_curve25519xsalsa20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c' object='crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-before_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c\n\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo: crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo -MD -MP -MF crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305.Tpo -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305.Tpo crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_curve25519xsalsa20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c' object='crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-box_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c\n\ncrypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo: crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo -MD -MP -MF crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-keypair_curve25519xsalsa20poly1305.Tpo -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-keypair_curve25519xsalsa20poly1305.Tpo crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-keypair_curve25519xsalsa20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c' object='crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_box/curve25519xsalsa20poly1305/ref/libsodium_la-keypair_curve25519xsalsa20poly1305.lo `test -f 'crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c\n\ncrypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo: crypto_core/hsalsa20/ref2/core_hsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo -MD -MP -MF crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20.Tpo -c -o crypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo `test -f 'crypto_core/hsalsa20/ref2/core_hsalsa20.c' || echo '$(srcdir)/'`crypto_core/hsalsa20/ref2/core_hsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20.Tpo crypto_core/hsalsa20/ref2/$(DEPDIR)/libsodium_la-core_hsalsa20.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/hsalsa20/ref2/core_hsalsa20.c' object='crypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/hsalsa20/ref2/libsodium_la-core_hsalsa20.lo `test -f 'crypto_core/hsalsa20/ref2/core_hsalsa20.c' || echo '$(srcdir)/'`crypto_core/hsalsa20/ref2/core_hsalsa20.c\n\ncrypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo: crypto_core/hsalsa20/core_hsalsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo -MD -MP -MF crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20_api.Tpo -c -o crypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo `test -f 'crypto_core/hsalsa20/core_hsalsa20_api.c' || echo '$(srcdir)/'`crypto_core/hsalsa20/core_hsalsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20_api.Tpo crypto_core/hsalsa20/$(DEPDIR)/libsodium_la-core_hsalsa20_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/hsalsa20/core_hsalsa20_api.c' object='crypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/hsalsa20/libsodium_la-core_hsalsa20_api.lo `test -f 'crypto_core/hsalsa20/core_hsalsa20_api.c' || echo '$(srcdir)/'`crypto_core/hsalsa20/core_hsalsa20_api.c\n\ncrypto_core/salsa20/ref/libsodium_la-core_salsa20.lo: crypto_core/salsa20/ref/core_salsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa20/ref/libsodium_la-core_salsa20.lo -MD -MP -MF crypto_core/salsa20/ref/$(DEPDIR)/libsodium_la-core_salsa20.Tpo -c -o crypto_core/salsa20/ref/libsodium_la-core_salsa20.lo `test -f 'crypto_core/salsa20/ref/core_salsa20.c' || echo '$(srcdir)/'`crypto_core/salsa20/ref/core_salsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa20/ref/$(DEPDIR)/libsodium_la-core_salsa20.Tpo crypto_core/salsa20/ref/$(DEPDIR)/libsodium_la-core_salsa20.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa20/ref/core_salsa20.c' object='crypto_core/salsa20/ref/libsodium_la-core_salsa20.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa20/ref/libsodium_la-core_salsa20.lo `test -f 'crypto_core/salsa20/ref/core_salsa20.c' || echo '$(srcdir)/'`crypto_core/salsa20/ref/core_salsa20.c\n\ncrypto_core/salsa20/libsodium_la-core_salsa20_api.lo: crypto_core/salsa20/core_salsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa20/libsodium_la-core_salsa20_api.lo -MD -MP -MF crypto_core/salsa20/$(DEPDIR)/libsodium_la-core_salsa20_api.Tpo -c -o crypto_core/salsa20/libsodium_la-core_salsa20_api.lo `test -f 'crypto_core/salsa20/core_salsa20_api.c' || echo '$(srcdir)/'`crypto_core/salsa20/core_salsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa20/$(DEPDIR)/libsodium_la-core_salsa20_api.Tpo crypto_core/salsa20/$(DEPDIR)/libsodium_la-core_salsa20_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa20/core_salsa20_api.c' object='crypto_core/salsa20/libsodium_la-core_salsa20_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa20/libsodium_la-core_salsa20_api.lo `test -f 'crypto_core/salsa20/core_salsa20_api.c' || echo '$(srcdir)/'`crypto_core/salsa20/core_salsa20_api.c\n\ncrypto_generichash/libsodium_la-crypto_generichash.lo: crypto_generichash/crypto_generichash.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/libsodium_la-crypto_generichash.lo -MD -MP -MF crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Tpo -c -o crypto_generichash/libsodium_la-crypto_generichash.lo `test -f 'crypto_generichash/crypto_generichash.c' || echo '$(srcdir)/'`crypto_generichash/crypto_generichash.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Tpo crypto_generichash/$(DEPDIR)/libsodium_la-crypto_generichash.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/crypto_generichash.c' object='crypto_generichash/libsodium_la-crypto_generichash.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/libsodium_la-crypto_generichash.lo `test -f 'crypto_generichash/crypto_generichash.c' || echo '$(srcdir)/'`crypto_generichash/crypto_generichash.c\n\ncrypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo: crypto_generichash/blake2/generichash_blake2_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo -MD -MP -MF crypto_generichash/blake2/$(DEPDIR)/libsodium_la-generichash_blake2_api.Tpo -c -o crypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo `test -f 'crypto_generichash/blake2/generichash_blake2_api.c' || echo '$(srcdir)/'`crypto_generichash/blake2/generichash_blake2_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/$(DEPDIR)/libsodium_la-generichash_blake2_api.Tpo crypto_generichash/blake2/$(DEPDIR)/libsodium_la-generichash_blake2_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/generichash_blake2_api.c' object='crypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/libsodium_la-generichash_blake2_api.lo `test -f 'crypto_generichash/blake2/generichash_blake2_api.c' || echo '$(srcdir)/'`crypto_generichash/blake2/generichash_blake2_api.c\n\ncrypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo: crypto_generichash/blake2/ref/blake2b-compress-ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo -MD -MP -MF crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-compress-ref.Tpo -c -o crypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-ref.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-compress-ref.Tpo crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-compress-ref.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/ref/blake2b-compress-ref.c' object='crypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/ref/libsodium_la-blake2b-compress-ref.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-ref.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-ref.c\n\ncrypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo: crypto_generichash/blake2/ref/blake2b-ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo -MD -MP -MF crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-ref.Tpo -c -o crypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo `test -f 'crypto_generichash/blake2/ref/blake2b-ref.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-ref.Tpo crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-blake2b-ref.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/ref/blake2b-ref.c' object='crypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/ref/libsodium_la-blake2b-ref.lo `test -f 'crypto_generichash/blake2/ref/blake2b-ref.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-ref.c\n\ncrypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo: crypto_generichash/blake2/ref/generichash_blake2b.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo -MD -MP -MF crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-generichash_blake2b.Tpo -c -o crypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo `test -f 'crypto_generichash/blake2/ref/generichash_blake2b.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/generichash_blake2b.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-generichash_blake2b.Tpo crypto_generichash/blake2/ref/$(DEPDIR)/libsodium_la-generichash_blake2b.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/ref/generichash_blake2b.c' object='crypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/ref/libsodium_la-generichash_blake2b.lo `test -f 'crypto_generichash/blake2/ref/generichash_blake2b.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/generichash_blake2b.c\n\ncrypto_hash/libsodium_la-crypto_hash.lo: crypto_hash/crypto_hash.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_hash/libsodium_la-crypto_hash.lo -MD -MP -MF crypto_hash/$(DEPDIR)/libsodium_la-crypto_hash.Tpo -c -o crypto_hash/libsodium_la-crypto_hash.lo `test -f 'crypto_hash/crypto_hash.c' || echo '$(srcdir)/'`crypto_hash/crypto_hash.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_hash/$(DEPDIR)/libsodium_la-crypto_hash.Tpo crypto_hash/$(DEPDIR)/libsodium_la-crypto_hash.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_hash/crypto_hash.c' object='crypto_hash/libsodium_la-crypto_hash.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_hash/libsodium_la-crypto_hash.lo `test -f 'crypto_hash/crypto_hash.c' || echo '$(srcdir)/'`crypto_hash/crypto_hash.c\n\ncrypto_hash/sha256/libsodium_la-hash_sha256_api.lo: crypto_hash/sha256/hash_sha256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_hash/sha256/libsodium_la-hash_sha256_api.lo -MD -MP -MF crypto_hash/sha256/$(DEPDIR)/libsodium_la-hash_sha256_api.Tpo -c -o crypto_hash/sha256/libsodium_la-hash_sha256_api.lo `test -f 'crypto_hash/sha256/hash_sha256_api.c' || echo '$(srcdir)/'`crypto_hash/sha256/hash_sha256_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_hash/sha256/$(DEPDIR)/libsodium_la-hash_sha256_api.Tpo crypto_hash/sha256/$(DEPDIR)/libsodium_la-hash_sha256_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_hash/sha256/hash_sha256_api.c' object='crypto_hash/sha256/libsodium_la-hash_sha256_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_hash/sha256/libsodium_la-hash_sha256_api.lo `test -f 'crypto_hash/sha256/hash_sha256_api.c' || echo '$(srcdir)/'`crypto_hash/sha256/hash_sha256_api.c\n\ncrypto_hash/sha256/cp/libsodium_la-hash_sha256.lo: crypto_hash/sha256/cp/hash_sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_hash/sha256/cp/libsodium_la-hash_sha256.lo -MD -MP -MF crypto_hash/sha256/cp/$(DEPDIR)/libsodium_la-hash_sha256.Tpo -c -o crypto_hash/sha256/cp/libsodium_la-hash_sha256.lo `test -f 'crypto_hash/sha256/cp/hash_sha256.c' || echo '$(srcdir)/'`crypto_hash/sha256/cp/hash_sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_hash/sha256/cp/$(DEPDIR)/libsodium_la-hash_sha256.Tpo crypto_hash/sha256/cp/$(DEPDIR)/libsodium_la-hash_sha256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_hash/sha256/cp/hash_sha256.c' object='crypto_hash/sha256/cp/libsodium_la-hash_sha256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_hash/sha256/cp/libsodium_la-hash_sha256.lo `test -f 'crypto_hash/sha256/cp/hash_sha256.c' || echo '$(srcdir)/'`crypto_hash/sha256/cp/hash_sha256.c\n\ncrypto_hash/sha512/libsodium_la-hash_sha512_api.lo: crypto_hash/sha512/hash_sha512_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_hash/sha512/libsodium_la-hash_sha512_api.lo -MD -MP -MF crypto_hash/sha512/$(DEPDIR)/libsodium_la-hash_sha512_api.Tpo -c -o crypto_hash/sha512/libsodium_la-hash_sha512_api.lo `test -f 'crypto_hash/sha512/hash_sha512_api.c' || echo '$(srcdir)/'`crypto_hash/sha512/hash_sha512_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_hash/sha512/$(DEPDIR)/libsodium_la-hash_sha512_api.Tpo crypto_hash/sha512/$(DEPDIR)/libsodium_la-hash_sha512_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_hash/sha512/hash_sha512_api.c' object='crypto_hash/sha512/libsodium_la-hash_sha512_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_hash/sha512/libsodium_la-hash_sha512_api.lo `test -f 'crypto_hash/sha512/hash_sha512_api.c' || echo '$(srcdir)/'`crypto_hash/sha512/hash_sha512_api.c\n\ncrypto_hash/sha512/cp/libsodium_la-hash_sha512.lo: crypto_hash/sha512/cp/hash_sha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_hash/sha512/cp/libsodium_la-hash_sha512.lo -MD -MP -MF crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512.Tpo -c -o crypto_hash/sha512/cp/libsodium_la-hash_sha512.lo `test -f 'crypto_hash/sha512/cp/hash_sha512.c' || echo '$(srcdir)/'`crypto_hash/sha512/cp/hash_sha512.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512.Tpo crypto_hash/sha512/cp/$(DEPDIR)/libsodium_la-hash_sha512.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_hash/sha512/cp/hash_sha512.c' object='crypto_hash/sha512/cp/libsodium_la-hash_sha512.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_hash/sha512/cp/libsodium_la-hash_sha512.lo `test -f 'crypto_hash/sha512/cp/hash_sha512.c' || echo '$(srcdir)/'`crypto_hash/sha512/cp/hash_sha512.c\n\ncrypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo: crypto_onetimeauth/crypto_onetimeauth.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo -MD -MP -MF crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Tpo -c -o crypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo `test -f 'crypto_onetimeauth/crypto_onetimeauth.c' || echo '$(srcdir)/'`crypto_onetimeauth/crypto_onetimeauth.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Tpo crypto_onetimeauth/$(DEPDIR)/libsodium_la-crypto_onetimeauth.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_onetimeauth/crypto_onetimeauth.c' object='crypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_onetimeauth/libsodium_la-crypto_onetimeauth.lo `test -f 'crypto_onetimeauth/crypto_onetimeauth.c' || echo '$(srcdir)/'`crypto_onetimeauth/crypto_onetimeauth.c\n\ncrypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo: crypto_onetimeauth/poly1305/onetimeauth_poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo -MD -MP -MF crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Tpo -c -o crypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo `test -f 'crypto_onetimeauth/poly1305/onetimeauth_poly1305.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/onetimeauth_poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Tpo crypto_onetimeauth/poly1305/$(DEPDIR)/libsodium_la-onetimeauth_poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_onetimeauth/poly1305/onetimeauth_poly1305.c' object='crypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_onetimeauth/poly1305/libsodium_la-onetimeauth_poly1305.lo `test -f 'crypto_onetimeauth/poly1305/onetimeauth_poly1305.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/onetimeauth_poly1305.c\n\ncrypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo: crypto_onetimeauth/poly1305/donna/poly1305_donna.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo -MD -MP -MF crypto_onetimeauth/poly1305/donna/$(DEPDIR)/libsodium_la-poly1305_donna.Tpo -c -o crypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo `test -f 'crypto_onetimeauth/poly1305/donna/poly1305_donna.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/donna/poly1305_donna.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_onetimeauth/poly1305/donna/$(DEPDIR)/libsodium_la-poly1305_donna.Tpo crypto_onetimeauth/poly1305/donna/$(DEPDIR)/libsodium_la-poly1305_donna.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_onetimeauth/poly1305/donna/poly1305_donna.c' object='crypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_onetimeauth/poly1305/donna/libsodium_la-poly1305_donna.lo `test -f 'crypto_onetimeauth/poly1305/donna/poly1305_donna.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/donna/poly1305_donna.c\n\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo: crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Tpo crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-crypto_scrypt-common.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c' object='crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-crypto_scrypt-common.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c\n\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo: crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-scrypt_platform.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-scrypt_platform.Tpo crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-scrypt_platform.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c' object='crypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-scrypt_platform.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c\n\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo: crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pbkdf2-sha256.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pbkdf2-sha256.Tpo crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pbkdf2-sha256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c' object='crypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-pbkdf2-sha256.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c\n\ncrypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo: crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256.Tpo crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c' object='crypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/libsodium_la-pwhash_scryptsalsa208sha256.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c\n\ncrypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo: crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256_nosse.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256_nosse.Tpo crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/libsodium_la-pwhash_scryptsalsa208sha256_nosse.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c' object='crypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/nosse/libsodium_la-pwhash_scryptsalsa208sha256_nosse.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c\n\ncrypto_scalarmult/libsodium_la-crypto_scalarmult.lo: crypto_scalarmult/crypto_scalarmult.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/libsodium_la-crypto_scalarmult.lo -MD -MP -MF crypto_scalarmult/$(DEPDIR)/libsodium_la-crypto_scalarmult.Tpo -c -o crypto_scalarmult/libsodium_la-crypto_scalarmult.lo `test -f 'crypto_scalarmult/crypto_scalarmult.c' || echo '$(srcdir)/'`crypto_scalarmult/crypto_scalarmult.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/$(DEPDIR)/libsodium_la-crypto_scalarmult.Tpo crypto_scalarmult/$(DEPDIR)/libsodium_la-crypto_scalarmult.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/crypto_scalarmult.c' object='crypto_scalarmult/libsodium_la-crypto_scalarmult.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/libsodium_la-crypto_scalarmult.lo `test -f 'crypto_scalarmult/crypto_scalarmult.c' || echo '$(srcdir)/'`crypto_scalarmult/crypto_scalarmult.c\n\ncrypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo: crypto_scalarmult/curve25519/scalarmult_curve25519.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo -MD -MP -MF crypto_scalarmult/curve25519/$(DEPDIR)/libsodium_la-scalarmult_curve25519.Tpo -c -o crypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo `test -f 'crypto_scalarmult/curve25519/scalarmult_curve25519.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/scalarmult_curve25519.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/$(DEPDIR)/libsodium_la-scalarmult_curve25519.Tpo crypto_scalarmult/curve25519/$(DEPDIR)/libsodium_la-scalarmult_curve25519.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/scalarmult_curve25519.c' object='crypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/libsodium_la-scalarmult_curve25519.lo `test -f 'crypto_scalarmult/curve25519/scalarmult_curve25519.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/scalarmult_curve25519.c\n\ncrypto_secretbox/libsodium_la-crypto_secretbox.lo: crypto_secretbox/crypto_secretbox.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_secretbox/libsodium_la-crypto_secretbox.lo -MD -MP -MF crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox.Tpo -c -o crypto_secretbox/libsodium_la-crypto_secretbox.lo `test -f 'crypto_secretbox/crypto_secretbox.c' || echo '$(srcdir)/'`crypto_secretbox/crypto_secretbox.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox.Tpo crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_secretbox/crypto_secretbox.c' object='crypto_secretbox/libsodium_la-crypto_secretbox.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_secretbox/libsodium_la-crypto_secretbox.lo `test -f 'crypto_secretbox/crypto_secretbox.c' || echo '$(srcdir)/'`crypto_secretbox/crypto_secretbox.c\n\ncrypto_secretbox/libsodium_la-crypto_secretbox_easy.lo: crypto_secretbox/crypto_secretbox_easy.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_secretbox/libsodium_la-crypto_secretbox_easy.lo -MD -MP -MF crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox_easy.Tpo -c -o crypto_secretbox/libsodium_la-crypto_secretbox_easy.lo `test -f 'crypto_secretbox/crypto_secretbox_easy.c' || echo '$(srcdir)/'`crypto_secretbox/crypto_secretbox_easy.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox_easy.Tpo crypto_secretbox/$(DEPDIR)/libsodium_la-crypto_secretbox_easy.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_secretbox/crypto_secretbox_easy.c' object='crypto_secretbox/libsodium_la-crypto_secretbox_easy.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_secretbox/libsodium_la-crypto_secretbox_easy.lo `test -f 'crypto_secretbox/crypto_secretbox_easy.c' || echo '$(srcdir)/'`crypto_secretbox/crypto_secretbox_easy.c\n\ncrypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo: crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo -MD -MP -MF crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/libsodium_la-secretbox_xsalsa20poly1305_api.Tpo -c -o crypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo `test -f 'crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c' || echo '$(srcdir)/'`crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/libsodium_la-secretbox_xsalsa20poly1305_api.Tpo crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/libsodium_la-secretbox_xsalsa20poly1305_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c' object='crypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_secretbox/xsalsa20poly1305/libsodium_la-secretbox_xsalsa20poly1305_api.lo `test -f 'crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c' || echo '$(srcdir)/'`crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c\n\ncrypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo: crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo -MD -MP -MF crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_xsalsa20poly1305.Tpo -c -o crypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo `test -f 'crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_xsalsa20poly1305.Tpo crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/libsodium_la-box_xsalsa20poly1305.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c' object='crypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_secretbox/xsalsa20poly1305/ref/libsodium_la-box_xsalsa20poly1305.lo `test -f 'crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c' || echo '$(srcdir)/'`crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c\n\ncrypto_shorthash/libsodium_la-crypto_shorthash.lo: crypto_shorthash/crypto_shorthash.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_shorthash/libsodium_la-crypto_shorthash.lo -MD -MP -MF crypto_shorthash/$(DEPDIR)/libsodium_la-crypto_shorthash.Tpo -c -o crypto_shorthash/libsodium_la-crypto_shorthash.lo `test -f 'crypto_shorthash/crypto_shorthash.c' || echo '$(srcdir)/'`crypto_shorthash/crypto_shorthash.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_shorthash/$(DEPDIR)/libsodium_la-crypto_shorthash.Tpo crypto_shorthash/$(DEPDIR)/libsodium_la-crypto_shorthash.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_shorthash/crypto_shorthash.c' object='crypto_shorthash/libsodium_la-crypto_shorthash.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_shorthash/libsodium_la-crypto_shorthash.lo `test -f 'crypto_shorthash/crypto_shorthash.c' || echo '$(srcdir)/'`crypto_shorthash/crypto_shorthash.c\n\ncrypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo: crypto_shorthash/siphash24/shorthash_siphash24_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo -MD -MP -MF crypto_shorthash/siphash24/$(DEPDIR)/libsodium_la-shorthash_siphash24_api.Tpo -c -o crypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo `test -f 'crypto_shorthash/siphash24/shorthash_siphash24_api.c' || echo '$(srcdir)/'`crypto_shorthash/siphash24/shorthash_siphash24_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_shorthash/siphash24/$(DEPDIR)/libsodium_la-shorthash_siphash24_api.Tpo crypto_shorthash/siphash24/$(DEPDIR)/libsodium_la-shorthash_siphash24_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_shorthash/siphash24/shorthash_siphash24_api.c' object='crypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_shorthash/siphash24/libsodium_la-shorthash_siphash24_api.lo `test -f 'crypto_shorthash/siphash24/shorthash_siphash24_api.c' || echo '$(srcdir)/'`crypto_shorthash/siphash24/shorthash_siphash24_api.c\n\ncrypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo: crypto_shorthash/siphash24/ref/shorthash_siphash24.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo -MD -MP -MF crypto_shorthash/siphash24/ref/$(DEPDIR)/libsodium_la-shorthash_siphash24.Tpo -c -o crypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo `test -f 'crypto_shorthash/siphash24/ref/shorthash_siphash24.c' || echo '$(srcdir)/'`crypto_shorthash/siphash24/ref/shorthash_siphash24.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_shorthash/siphash24/ref/$(DEPDIR)/libsodium_la-shorthash_siphash24.Tpo crypto_shorthash/siphash24/ref/$(DEPDIR)/libsodium_la-shorthash_siphash24.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_shorthash/siphash24/ref/shorthash_siphash24.c' object='crypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_shorthash/siphash24/ref/libsodium_la-shorthash_siphash24.lo `test -f 'crypto_shorthash/siphash24/ref/shorthash_siphash24.c' || echo '$(srcdir)/'`crypto_shorthash/siphash24/ref/shorthash_siphash24.c\n\ncrypto_sign/libsodium_la-crypto_sign.lo: crypto_sign/crypto_sign.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/libsodium_la-crypto_sign.lo -MD -MP -MF crypto_sign/$(DEPDIR)/libsodium_la-crypto_sign.Tpo -c -o crypto_sign/libsodium_la-crypto_sign.lo `test -f 'crypto_sign/crypto_sign.c' || echo '$(srcdir)/'`crypto_sign/crypto_sign.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/$(DEPDIR)/libsodium_la-crypto_sign.Tpo crypto_sign/$(DEPDIR)/libsodium_la-crypto_sign.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/crypto_sign.c' object='crypto_sign/libsodium_la-crypto_sign.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/libsodium_la-crypto_sign.lo `test -f 'crypto_sign/crypto_sign.c' || echo '$(srcdir)/'`crypto_sign/crypto_sign.c\n\ncrypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo: crypto_sign/ed25519/sign_ed25519_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo -MD -MP -MF crypto_sign/ed25519/$(DEPDIR)/libsodium_la-sign_ed25519_api.Tpo -c -o crypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo `test -f 'crypto_sign/ed25519/sign_ed25519_api.c' || echo '$(srcdir)/'`crypto_sign/ed25519/sign_ed25519_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/$(DEPDIR)/libsodium_la-sign_ed25519_api.Tpo crypto_sign/ed25519/$(DEPDIR)/libsodium_la-sign_ed25519_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/sign_ed25519_api.c' object='crypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/libsodium_la-sign_ed25519_api.lo `test -f 'crypto_sign/ed25519/sign_ed25519_api.c' || echo '$(srcdir)/'`crypto_sign/ed25519/sign_ed25519_api.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_0.lo: crypto_sign/ed25519/ref10/fe_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_0.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_0.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_0.lo `test -f 'crypto_sign/ed25519/ref10/fe_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_0.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_0.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_0.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_0.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_0.lo `test -f 'crypto_sign/ed25519/ref10/fe_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_0.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_1.lo: crypto_sign/ed25519/ref10/fe_1.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_1.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_1.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_1.lo `test -f 'crypto_sign/ed25519/ref10/fe_1.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_1.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_1.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_1.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_1.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_1.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_1.lo `test -f 'crypto_sign/ed25519/ref10/fe_1.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_1.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_add.lo: crypto_sign/ed25519/ref10/fe_add.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_add.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_add.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_add.lo `test -f 'crypto_sign/ed25519/ref10/fe_add.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_add.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_add.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_add.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_add.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_add.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_add.lo `test -f 'crypto_sign/ed25519/ref10/fe_add.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_add.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo: crypto_sign/ed25519/ref10/fe_cmov.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_cmov.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo `test -f 'crypto_sign/ed25519/ref10/fe_cmov.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_cmov.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_cmov.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_cmov.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_cmov.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_cmov.lo `test -f 'crypto_sign/ed25519/ref10/fe_cmov.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_cmov.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo: crypto_sign/ed25519/ref10/fe_copy.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_copy.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo `test -f 'crypto_sign/ed25519/ref10/fe_copy.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_copy.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_copy.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_copy.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_copy.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_copy.lo `test -f 'crypto_sign/ed25519/ref10/fe_copy.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_copy.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo: crypto_sign/ed25519/ref10/fe_frombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo `test -f 'crypto_sign/ed25519/ref10/fe_frombytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_frombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_frombytes.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_frombytes.lo `test -f 'crypto_sign/ed25519/ref10/fe_frombytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_frombytes.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo: crypto_sign/ed25519/ref10/fe_invert.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_invert.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo `test -f 'crypto_sign/ed25519/ref10/fe_invert.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_invert.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_invert.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_invert.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_invert.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_invert.lo `test -f 'crypto_sign/ed25519/ref10/fe_invert.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_invert.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo: crypto_sign/ed25519/ref10/fe_isnegative.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnegative.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo `test -f 'crypto_sign/ed25519/ref10/fe_isnegative.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_isnegative.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnegative.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnegative.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_isnegative.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_isnegative.lo `test -f 'crypto_sign/ed25519/ref10/fe_isnegative.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_isnegative.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo: crypto_sign/ed25519/ref10/fe_isnonzero.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnonzero.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo `test -f 'crypto_sign/ed25519/ref10/fe_isnonzero.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_isnonzero.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnonzero.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_isnonzero.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_isnonzero.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_isnonzero.lo `test -f 'crypto_sign/ed25519/ref10/fe_isnonzero.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_isnonzero.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo: crypto_sign/ed25519/ref10/fe_mul.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_mul.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo `test -f 'crypto_sign/ed25519/ref10/fe_mul.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_mul.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_mul.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_mul.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_mul.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_mul.lo `test -f 'crypto_sign/ed25519/ref10/fe_mul.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_mul.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo: crypto_sign/ed25519/ref10/fe_neg.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_neg.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo `test -f 'crypto_sign/ed25519/ref10/fe_neg.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_neg.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_neg.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_neg.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_neg.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_neg.lo `test -f 'crypto_sign/ed25519/ref10/fe_neg.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_neg.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo: crypto_sign/ed25519/ref10/fe_pow22523.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_pow22523.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo `test -f 'crypto_sign/ed25519/ref10/fe_pow22523.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_pow22523.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_pow22523.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_pow22523.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_pow22523.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_pow22523.lo `test -f 'crypto_sign/ed25519/ref10/fe_pow22523.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_pow22523.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo: crypto_sign/ed25519/ref10/fe_sq.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo `test -f 'crypto_sign/ed25519/ref10/fe_sq.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sq.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_sq.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sq.lo `test -f 'crypto_sign/ed25519/ref10/fe_sq.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sq.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo: crypto_sign/ed25519/ref10/fe_sq2.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq2.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo `test -f 'crypto_sign/ed25519/ref10/fe_sq2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sq2.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq2.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sq2.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_sq2.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sq2.lo `test -f 'crypto_sign/ed25519/ref10/fe_sq2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sq2.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo: crypto_sign/ed25519/ref10/fe_sub.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sub.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo `test -f 'crypto_sign/ed25519/ref10/fe_sub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sub.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sub.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_sub.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_sub.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_sub.lo `test -f 'crypto_sign/ed25519/ref10/fe_sub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_sub.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo: crypto_sign/ed25519/ref10/fe_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/fe_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/fe_tobytes.c' object='crypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-fe_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/fe_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/fe_tobytes.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_add.lo: crypto_sign/ed25519/ref10/ge_add.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_add.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_add.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_add.lo `test -f 'crypto_sign/ed25519/ref10/ge_add.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_add.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_add.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_add.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_add.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_add.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_add.lo `test -f 'crypto_sign/ed25519/ref10/ge_add.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_add.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo: crypto_sign/ed25519/ref10/ge_double_scalarmult.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_double_scalarmult.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo `test -f 'crypto_sign/ed25519/ref10/ge_double_scalarmult.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_double_scalarmult.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_double_scalarmult.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_double_scalarmult.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_double_scalarmult.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_double_scalarmult.lo `test -f 'crypto_sign/ed25519/ref10/ge_double_scalarmult.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_double_scalarmult.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo: crypto_sign/ed25519/ref10/ge_frombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_frombytes.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_frombytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_frombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_frombytes.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_frombytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_frombytes.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_frombytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_frombytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_frombytes.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo: crypto_sign/ed25519/ref10/ge_madd.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_madd.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo `test -f 'crypto_sign/ed25519/ref10/ge_madd.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_madd.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_madd.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_madd.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_madd.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_madd.lo `test -f 'crypto_sign/ed25519/ref10/ge_madd.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_madd.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo: crypto_sign/ed25519/ref10/ge_msub.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_msub.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo `test -f 'crypto_sign/ed25519/ref10/ge_msub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_msub.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_msub.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_msub.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_msub.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_msub.lo `test -f 'crypto_sign/ed25519/ref10/ge_msub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_msub.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo: crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p2.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo `test -f 'crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p2.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p2.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p2.lo `test -f 'crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo: crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p3.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo `test -f 'crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p3.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p1p1_to_p3.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p1p1_to_p3.lo `test -f 'crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo: crypto_sign/ed25519/ref10/ge_p2_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_0.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_p2_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p2_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_0.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_0.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p2_0.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p2_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_p2_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p2_0.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo: crypto_sign/ed25519/ref10/ge_p2_dbl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_dbl.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo `test -f 'crypto_sign/ed25519/ref10/ge_p2_dbl.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p2_dbl.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_dbl.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p2_dbl.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p2_dbl.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p2_dbl.lo `test -f 'crypto_sign/ed25519/ref10/ge_p2_dbl.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p2_dbl.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo: crypto_sign/ed25519/ref10/ge_p3_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_0.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_0.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_0.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p3_0.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_0.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo: crypto_sign/ed25519/ref10/ge_p3_dbl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_dbl.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_dbl.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_dbl.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_dbl.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_dbl.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p3_dbl.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_dbl.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_dbl.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_dbl.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo: crypto_sign/ed25519/ref10/ge_p3_to_cached.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_cached.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_to_cached.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_to_cached.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_cached.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_cached.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p3_to_cached.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_cached.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_to_cached.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_to_cached.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo: crypto_sign/ed25519/ref10/ge_p3_to_p2.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_p2.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_to_p2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_to_p2.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_p2.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_to_p2.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p3_to_p2.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_to_p2.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_to_p2.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_to_p2.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo: crypto_sign/ed25519/ref10/ge_p3_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_tobytes.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_tobytes.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_p3_tobytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_p3_tobytes.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_p3_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_p3_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_p3_tobytes.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo: crypto_sign/ed25519/ref10/ge_precomp_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_precomp_0.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_precomp_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_precomp_0.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_precomp_0.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_precomp_0.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_precomp_0.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_precomp_0.lo `test -f 'crypto_sign/ed25519/ref10/ge_precomp_0.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_precomp_0.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo: crypto_sign/ed25519/ref10/ge_scalarmult_base.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_scalarmult_base.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo `test -f 'crypto_sign/ed25519/ref10/ge_scalarmult_base.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_scalarmult_base.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_scalarmult_base.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_scalarmult_base.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_scalarmult_base.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_scalarmult_base.lo `test -f 'crypto_sign/ed25519/ref10/ge_scalarmult_base.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_scalarmult_base.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo: crypto_sign/ed25519/ref10/ge_sub.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_sub.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo `test -f 'crypto_sign/ed25519/ref10/ge_sub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_sub.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_sub.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_sub.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_sub.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_sub.lo `test -f 'crypto_sign/ed25519/ref10/ge_sub.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_sub.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo: crypto_sign/ed25519/ref10/ge_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_tobytes.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_tobytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_tobytes.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-ge_tobytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/ge_tobytes.c' object='crypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-ge_tobytes.lo `test -f 'crypto_sign/ed25519/ref10/ge_tobytes.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/ge_tobytes.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-keypair.lo: crypto_sign/ed25519/ref10/keypair.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-keypair.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-keypair.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-keypair.lo `test -f 'crypto_sign/ed25519/ref10/keypair.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/keypair.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-keypair.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-keypair.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/keypair.c' object='crypto_sign/ed25519/ref10/libsodium_la-keypair.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-keypair.lo `test -f 'crypto_sign/ed25519/ref10/keypair.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/keypair.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-open.lo: crypto_sign/ed25519/ref10/open.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-open.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-open.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-open.lo `test -f 'crypto_sign/ed25519/ref10/open.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/open.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-open.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-open.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/open.c' object='crypto_sign/ed25519/ref10/libsodium_la-open.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-open.lo `test -f 'crypto_sign/ed25519/ref10/open.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/open.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo: crypto_sign/ed25519/ref10/sc_muladd.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_muladd.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo `test -f 'crypto_sign/ed25519/ref10/sc_muladd.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sc_muladd.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_muladd.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_muladd.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/sc_muladd.c' object='crypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-sc_muladd.lo `test -f 'crypto_sign/ed25519/ref10/sc_muladd.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sc_muladd.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo: crypto_sign/ed25519/ref10/sc_reduce.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_reduce.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo `test -f 'crypto_sign/ed25519/ref10/sc_reduce.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sc_reduce.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_reduce.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sc_reduce.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/sc_reduce.c' object='crypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-sc_reduce.lo `test -f 'crypto_sign/ed25519/ref10/sc_reduce.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sc_reduce.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-sign.lo: crypto_sign/ed25519/ref10/sign.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-sign.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sign.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-sign.lo `test -f 'crypto_sign/ed25519/ref10/sign.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sign.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sign.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-sign.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/sign.c' object='crypto_sign/ed25519/ref10/libsodium_la-sign.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-sign.lo `test -f 'crypto_sign/ed25519/ref10/sign.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/sign.c\n\ncrypto_stream/libsodium_la-crypto_stream.lo: crypto_stream/crypto_stream.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/libsodium_la-crypto_stream.lo -MD -MP -MF crypto_stream/$(DEPDIR)/libsodium_la-crypto_stream.Tpo -c -o crypto_stream/libsodium_la-crypto_stream.lo `test -f 'crypto_stream/crypto_stream.c' || echo '$(srcdir)/'`crypto_stream/crypto_stream.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/$(DEPDIR)/libsodium_la-crypto_stream.Tpo crypto_stream/$(DEPDIR)/libsodium_la-crypto_stream.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/crypto_stream.c' object='crypto_stream/libsodium_la-crypto_stream.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/libsodium_la-crypto_stream.lo `test -f 'crypto_stream/crypto_stream.c' || echo '$(srcdir)/'`crypto_stream/crypto_stream.c\n\ncrypto_stream/chacha20/libsodium_la-stream_chacha20.lo: crypto_stream/chacha20/stream_chacha20.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/chacha20/libsodium_la-stream_chacha20.lo -MD -MP -MF crypto_stream/chacha20/$(DEPDIR)/libsodium_la-stream_chacha20.Tpo -c -o crypto_stream/chacha20/libsodium_la-stream_chacha20.lo `test -f 'crypto_stream/chacha20/stream_chacha20.c' || echo '$(srcdir)/'`crypto_stream/chacha20/stream_chacha20.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/chacha20/$(DEPDIR)/libsodium_la-stream_chacha20.Tpo crypto_stream/chacha20/$(DEPDIR)/libsodium_la-stream_chacha20.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/chacha20/stream_chacha20.c' object='crypto_stream/chacha20/libsodium_la-stream_chacha20.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/chacha20/libsodium_la-stream_chacha20.lo `test -f 'crypto_stream/chacha20/stream_chacha20.c' || echo '$(srcdir)/'`crypto_stream/chacha20/stream_chacha20.c\n\ncrypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo: crypto_stream/chacha20/ref/stream_chacha20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo -MD -MP -MF crypto_stream/chacha20/ref/$(DEPDIR)/libsodium_la-stream_chacha20_ref.Tpo -c -o crypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo `test -f 'crypto_stream/chacha20/ref/stream_chacha20_ref.c' || echo '$(srcdir)/'`crypto_stream/chacha20/ref/stream_chacha20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/chacha20/ref/$(DEPDIR)/libsodium_la-stream_chacha20_ref.Tpo crypto_stream/chacha20/ref/$(DEPDIR)/libsodium_la-stream_chacha20_ref.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/chacha20/ref/stream_chacha20_ref.c' object='crypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/chacha20/ref/libsodium_la-stream_chacha20_ref.lo `test -f 'crypto_stream/chacha20/ref/stream_chacha20_ref.c' || echo '$(srcdir)/'`crypto_stream/chacha20/ref/stream_chacha20_ref.c\n\ncrypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo: crypto_stream/salsa20/stream_salsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo -MD -MP -MF crypto_stream/salsa20/$(DEPDIR)/libsodium_la-stream_salsa20_api.Tpo -c -o crypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo `test -f 'crypto_stream/salsa20/stream_salsa20_api.c' || echo '$(srcdir)/'`crypto_stream/salsa20/stream_salsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa20/$(DEPDIR)/libsodium_la-stream_salsa20_api.Tpo crypto_stream/salsa20/$(DEPDIR)/libsodium_la-stream_salsa20_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa20/stream_salsa20_api.c' object='crypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa20/libsodium_la-stream_salsa20_api.lo `test -f 'crypto_stream/salsa20/stream_salsa20_api.c' || echo '$(srcdir)/'`crypto_stream/salsa20/stream_salsa20_api.c\n\ncrypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo: crypto_stream/xsalsa20/stream_xsalsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo -MD -MP -MF crypto_stream/xsalsa20/$(DEPDIR)/libsodium_la-stream_xsalsa20_api.Tpo -c -o crypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo `test -f 'crypto_stream/xsalsa20/stream_xsalsa20_api.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/stream_xsalsa20_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/xsalsa20/$(DEPDIR)/libsodium_la-stream_xsalsa20_api.Tpo crypto_stream/xsalsa20/$(DEPDIR)/libsodium_la-stream_xsalsa20_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/xsalsa20/stream_xsalsa20_api.c' object='crypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/xsalsa20/libsodium_la-stream_xsalsa20_api.lo `test -f 'crypto_stream/xsalsa20/stream_xsalsa20_api.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/stream_xsalsa20_api.c\n\ncrypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo: crypto_stream/xsalsa20/ref/stream_xsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo -MD -MP -MF crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-stream_xsalsa20.Tpo -c -o crypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo `test -f 'crypto_stream/xsalsa20/ref/stream_xsalsa20.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/ref/stream_xsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-stream_xsalsa20.Tpo crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-stream_xsalsa20.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/xsalsa20/ref/stream_xsalsa20.c' object='crypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/xsalsa20/ref/libsodium_la-stream_xsalsa20.lo `test -f 'crypto_stream/xsalsa20/ref/stream_xsalsa20.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/ref/stream_xsalsa20.c\n\ncrypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo: crypto_stream/xsalsa20/ref/xor_xsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo -MD -MP -MF crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-xor_xsalsa20.Tpo -c -o crypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo `test -f 'crypto_stream/xsalsa20/ref/xor_xsalsa20.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/ref/xor_xsalsa20.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-xor_xsalsa20.Tpo crypto_stream/xsalsa20/ref/$(DEPDIR)/libsodium_la-xor_xsalsa20.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/xsalsa20/ref/xor_xsalsa20.c' object='crypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/xsalsa20/ref/libsodium_la-xor_xsalsa20.lo `test -f 'crypto_stream/xsalsa20/ref/xor_xsalsa20.c' || echo '$(srcdir)/'`crypto_stream/xsalsa20/ref/xor_xsalsa20.c\n\ncrypto_verify/16/libsodium_la-verify_16_api.lo: crypto_verify/16/verify_16_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/16/libsodium_la-verify_16_api.lo -MD -MP -MF crypto_verify/16/$(DEPDIR)/libsodium_la-verify_16_api.Tpo -c -o crypto_verify/16/libsodium_la-verify_16_api.lo `test -f 'crypto_verify/16/verify_16_api.c' || echo '$(srcdir)/'`crypto_verify/16/verify_16_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/16/$(DEPDIR)/libsodium_la-verify_16_api.Tpo crypto_verify/16/$(DEPDIR)/libsodium_la-verify_16_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/16/verify_16_api.c' object='crypto_verify/16/libsodium_la-verify_16_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/16/libsodium_la-verify_16_api.lo `test -f 'crypto_verify/16/verify_16_api.c' || echo '$(srcdir)/'`crypto_verify/16/verify_16_api.c\n\ncrypto_verify/16/ref/libsodium_la-verify_16.lo: crypto_verify/16/ref/verify_16.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/16/ref/libsodium_la-verify_16.lo -MD -MP -MF crypto_verify/16/ref/$(DEPDIR)/libsodium_la-verify_16.Tpo -c -o crypto_verify/16/ref/libsodium_la-verify_16.lo `test -f 'crypto_verify/16/ref/verify_16.c' || echo '$(srcdir)/'`crypto_verify/16/ref/verify_16.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/16/ref/$(DEPDIR)/libsodium_la-verify_16.Tpo crypto_verify/16/ref/$(DEPDIR)/libsodium_la-verify_16.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/16/ref/verify_16.c' object='crypto_verify/16/ref/libsodium_la-verify_16.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/16/ref/libsodium_la-verify_16.lo `test -f 'crypto_verify/16/ref/verify_16.c' || echo '$(srcdir)/'`crypto_verify/16/ref/verify_16.c\n\ncrypto_verify/32/libsodium_la-verify_32_api.lo: crypto_verify/32/verify_32_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/32/libsodium_la-verify_32_api.lo -MD -MP -MF crypto_verify/32/$(DEPDIR)/libsodium_la-verify_32_api.Tpo -c -o crypto_verify/32/libsodium_la-verify_32_api.lo `test -f 'crypto_verify/32/verify_32_api.c' || echo '$(srcdir)/'`crypto_verify/32/verify_32_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/32/$(DEPDIR)/libsodium_la-verify_32_api.Tpo crypto_verify/32/$(DEPDIR)/libsodium_la-verify_32_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/32/verify_32_api.c' object='crypto_verify/32/libsodium_la-verify_32_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/32/libsodium_la-verify_32_api.lo `test -f 'crypto_verify/32/verify_32_api.c' || echo '$(srcdir)/'`crypto_verify/32/verify_32_api.c\n\ncrypto_verify/32/ref/libsodium_la-verify_32.lo: crypto_verify/32/ref/verify_32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/32/ref/libsodium_la-verify_32.lo -MD -MP -MF crypto_verify/32/ref/$(DEPDIR)/libsodium_la-verify_32.Tpo -c -o crypto_verify/32/ref/libsodium_la-verify_32.lo `test -f 'crypto_verify/32/ref/verify_32.c' || echo '$(srcdir)/'`crypto_verify/32/ref/verify_32.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/32/ref/$(DEPDIR)/libsodium_la-verify_32.Tpo crypto_verify/32/ref/$(DEPDIR)/libsodium_la-verify_32.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/32/ref/verify_32.c' object='crypto_verify/32/ref/libsodium_la-verify_32.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/32/ref/libsodium_la-verify_32.lo `test -f 'crypto_verify/32/ref/verify_32.c' || echo '$(srcdir)/'`crypto_verify/32/ref/verify_32.c\n\ncrypto_verify/64/libsodium_la-verify_64_api.lo: crypto_verify/64/verify_64_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/64/libsodium_la-verify_64_api.lo -MD -MP -MF crypto_verify/64/$(DEPDIR)/libsodium_la-verify_64_api.Tpo -c -o crypto_verify/64/libsodium_la-verify_64_api.lo `test -f 'crypto_verify/64/verify_64_api.c' || echo '$(srcdir)/'`crypto_verify/64/verify_64_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/64/$(DEPDIR)/libsodium_la-verify_64_api.Tpo crypto_verify/64/$(DEPDIR)/libsodium_la-verify_64_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/64/verify_64_api.c' object='crypto_verify/64/libsodium_la-verify_64_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/64/libsodium_la-verify_64_api.lo `test -f 'crypto_verify/64/verify_64_api.c' || echo '$(srcdir)/'`crypto_verify/64/verify_64_api.c\n\ncrypto_verify/64/ref/libsodium_la-verify_64.lo: crypto_verify/64/ref/verify_64.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_verify/64/ref/libsodium_la-verify_64.lo -MD -MP -MF crypto_verify/64/ref/$(DEPDIR)/libsodium_la-verify_64.Tpo -c -o crypto_verify/64/ref/libsodium_la-verify_64.lo `test -f 'crypto_verify/64/ref/verify_64.c' || echo '$(srcdir)/'`crypto_verify/64/ref/verify_64.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_verify/64/ref/$(DEPDIR)/libsodium_la-verify_64.Tpo crypto_verify/64/ref/$(DEPDIR)/libsodium_la-verify_64.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_verify/64/ref/verify_64.c' object='crypto_verify/64/ref/libsodium_la-verify_64.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_verify/64/ref/libsodium_la-verify_64.lo `test -f 'crypto_verify/64/ref/verify_64.c' || echo '$(srcdir)/'`crypto_verify/64/ref/verify_64.c\n\nrandombytes/libsodium_la-randombytes.lo: randombytes/randombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT randombytes/libsodium_la-randombytes.lo -MD -MP -MF randombytes/$(DEPDIR)/libsodium_la-randombytes.Tpo -c -o randombytes/libsodium_la-randombytes.lo `test -f 'randombytes/randombytes.c' || echo '$(srcdir)/'`randombytes/randombytes.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) randombytes/$(DEPDIR)/libsodium_la-randombytes.Tpo randombytes/$(DEPDIR)/libsodium_la-randombytes.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='randombytes/randombytes.c' object='randombytes/libsodium_la-randombytes.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o randombytes/libsodium_la-randombytes.lo `test -f 'randombytes/randombytes.c' || echo '$(srcdir)/'`randombytes/randombytes.c\n\nsodium/libsodium_la-core.lo: sodium/core.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sodium/libsodium_la-core.lo -MD -MP -MF sodium/$(DEPDIR)/libsodium_la-core.Tpo -c -o sodium/libsodium_la-core.lo `test -f 'sodium/core.c' || echo '$(srcdir)/'`sodium/core.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) sodium/$(DEPDIR)/libsodium_la-core.Tpo sodium/$(DEPDIR)/libsodium_la-core.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='sodium/core.c' object='sodium/libsodium_la-core.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sodium/libsodium_la-core.lo `test -f 'sodium/core.c' || echo '$(srcdir)/'`sodium/core.c\n\nsodium/libsodium_la-runtime.lo: sodium/runtime.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sodium/libsodium_la-runtime.lo -MD -MP -MF sodium/$(DEPDIR)/libsodium_la-runtime.Tpo -c -o sodium/libsodium_la-runtime.lo `test -f 'sodium/runtime.c' || echo '$(srcdir)/'`sodium/runtime.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) sodium/$(DEPDIR)/libsodium_la-runtime.Tpo sodium/$(DEPDIR)/libsodium_la-runtime.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='sodium/runtime.c' object='sodium/libsodium_la-runtime.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sodium/libsodium_la-runtime.lo `test -f 'sodium/runtime.c' || echo '$(srcdir)/'`sodium/runtime.c\n\nsodium/libsodium_la-utils.lo: sodium/utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sodium/libsodium_la-utils.lo -MD -MP -MF sodium/$(DEPDIR)/libsodium_la-utils.Tpo -c -o sodium/libsodium_la-utils.lo `test -f 'sodium/utils.c' || echo '$(srcdir)/'`sodium/utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) sodium/$(DEPDIR)/libsodium_la-utils.Tpo sodium/$(DEPDIR)/libsodium_la-utils.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='sodium/utils.c' object='sodium/libsodium_la-utils.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sodium/libsodium_la-utils.lo `test -f 'sodium/utils.c' || echo '$(srcdir)/'`sodium/utils.c\n\nsodium/libsodium_la-version.lo: sodium/version.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sodium/libsodium_la-version.lo -MD -MP -MF sodium/$(DEPDIR)/libsodium_la-version.Tpo -c -o sodium/libsodium_la-version.lo `test -f 'sodium/version.c' || echo '$(srcdir)/'`sodium/version.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) sodium/$(DEPDIR)/libsodium_la-version.Tpo sodium/$(DEPDIR)/libsodium_la-version.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='sodium/version.c' object='sodium/libsodium_la-version.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sodium/libsodium_la-version.lo `test -f 'sodium/version.c' || echo '$(srcdir)/'`sodium/version.c\n\nrandombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo: randombytes/salsa20/randombytes_salsa20_random.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT randombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo -MD -MP -MF randombytes/salsa20/$(DEPDIR)/libsodium_la-randombytes_salsa20_random.Tpo -c -o randombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo `test -f 'randombytes/salsa20/randombytes_salsa20_random.c' || echo '$(srcdir)/'`randombytes/salsa20/randombytes_salsa20_random.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) randombytes/salsa20/$(DEPDIR)/libsodium_la-randombytes_salsa20_random.Tpo randombytes/salsa20/$(DEPDIR)/libsodium_la-randombytes_salsa20_random.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='randombytes/salsa20/randombytes_salsa20_random.c' object='randombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o randombytes/salsa20/libsodium_la-randombytes_salsa20_random.lo `test -f 'randombytes/salsa20/randombytes_salsa20_random.c' || echo '$(srcdir)/'`randombytes/salsa20/randombytes_salsa20_random.c\n\nrandombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo: randombytes/nativeclient/randombytes_nativeclient.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT randombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo -MD -MP -MF randombytes/nativeclient/$(DEPDIR)/libsodium_la-randombytes_nativeclient.Tpo -c -o randombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo `test -f 'randombytes/nativeclient/randombytes_nativeclient.c' || echo '$(srcdir)/'`randombytes/nativeclient/randombytes_nativeclient.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) randombytes/nativeclient/$(DEPDIR)/libsodium_la-randombytes_nativeclient.Tpo randombytes/nativeclient/$(DEPDIR)/libsodium_la-randombytes_nativeclient.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='randombytes/nativeclient/randombytes_nativeclient.c' object='randombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o randombytes/nativeclient/libsodium_la-randombytes_nativeclient.lo `test -f 'randombytes/nativeclient/randombytes_nativeclient.c' || echo '$(srcdir)/'`randombytes/nativeclient/randombytes_nativeclient.c\n\nrandombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo: randombytes/sysrandom/randombytes_sysrandom.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo -MD -MP -MF randombytes/sysrandom/$(DEPDIR)/libsodium_la-randombytes_sysrandom.Tpo -c -o randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo `test -f 'randombytes/sysrandom/randombytes_sysrandom.c' || echo '$(srcdir)/'`randombytes/sysrandom/randombytes_sysrandom.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) randombytes/sysrandom/$(DEPDIR)/libsodium_la-randombytes_sysrandom.Tpo randombytes/sysrandom/$(DEPDIR)/libsodium_la-randombytes_sysrandom.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='randombytes/sysrandom/randombytes_sysrandom.c' object='randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o randombytes/sysrandom/libsodium_la-randombytes_sysrandom.lo `test -f 'randombytes/sysrandom/randombytes_sysrandom.c' || echo '$(srcdir)/'`randombytes/sysrandom/randombytes_sysrandom.c\n\ncrypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo: crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo -MD -MP -MF crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/libsodium_la-curve25519_donna_c64.Tpo -c -o crypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo `test -f 'crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/libsodium_la-curve25519_donna_c64.Tpo crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/libsodium_la-curve25519_donna_c64.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c' object='crypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/donna_c64/libsodium_la-curve25519_donna_c64.lo `test -f 'crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_0_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_0_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_0_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_0_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_1_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_1_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_1_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_1_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_add_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_add_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_add_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_add_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_copy_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_copy_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_copy_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_copy_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_cswap_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_cswap_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_cswap_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_cswap_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_frombytes_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_frombytes_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_invert_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_invert_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_invert_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_invert_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul121666_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul121666_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_mul121666_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_mul121666_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sq_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sq_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sq_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sq_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sub_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sub_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_sub_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_sub_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo: crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo -MD -MP -MF crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes_curve25519_ref10.Tpo -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes_curve25519_ref10.Tpo crypto_scalarmult/curve25519/ref10/$(DEPDIR)/libsodium_la-fe_tobytes_curve25519_ref10.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c' object='crypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/ref10/libsodium_la-fe_tobytes_curve25519_ref10.lo `test -f 'crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c\n\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo: crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo -MD -MP -MF crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-curve25519_sandy2x.Tpo -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-curve25519_sandy2x.Tpo crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-curve25519_sandy2x.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c' object='crypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-curve25519_sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c\n\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo: crypto_scalarmult/curve25519/sandy2x/fe51_invert.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo -MD -MP -MF crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe51_invert.Tpo -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/fe51_invert.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/fe51_invert.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe51_invert.Tpo crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe51_invert.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/sandy2x/fe51_invert.c' object='crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe51_invert.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/fe51_invert.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/fe51_invert.c\n\ncrypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo: crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo -MD -MP -MF crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe_frombytes_sandy2x.Tpo -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe_frombytes_sandy2x.Tpo crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/libsodium_la-fe_frombytes_sandy2x.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c' object='crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_scalarmult/curve25519/sandy2x/libsodium_la-fe_frombytes_sandy2x.lo `test -f 'crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c' || echo '$(srcdir)/'`crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c\n\ncrypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo: crypto_stream/salsa20/ref/stream_salsa20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo -MD -MP -MF crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-stream_salsa20_ref.Tpo -c -o crypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo `test -f 'crypto_stream/salsa20/ref/stream_salsa20_ref.c' || echo '$(srcdir)/'`crypto_stream/salsa20/ref/stream_salsa20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-stream_salsa20_ref.Tpo crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-stream_salsa20_ref.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa20/ref/stream_salsa20_ref.c' object='crypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa20/ref/libsodium_la-stream_salsa20_ref.lo `test -f 'crypto_stream/salsa20/ref/stream_salsa20_ref.c' || echo '$(srcdir)/'`crypto_stream/salsa20/ref/stream_salsa20_ref.c\n\ncrypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo: crypto_stream/salsa20/ref/xor_salsa20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo -MD -MP -MF crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-xor_salsa20_ref.Tpo -c -o crypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo `test -f 'crypto_stream/salsa20/ref/xor_salsa20_ref.c' || echo '$(srcdir)/'`crypto_stream/salsa20/ref/xor_salsa20_ref.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-xor_salsa20_ref.Tpo crypto_stream/salsa20/ref/$(DEPDIR)/libsodium_la-xor_salsa20_ref.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa20/ref/xor_salsa20_ref.c' object='crypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa20/ref/libsodium_la-xor_salsa20_ref.lo `test -f 'crypto_stream/salsa20/ref/xor_salsa20_ref.c' || echo '$(srcdir)/'`crypto_stream/salsa20/ref/xor_salsa20_ref.c\n\ncrypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo: crypto_core/salsa2012/ref/core_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo -MD -MP -MF crypto_core/salsa2012/ref/$(DEPDIR)/libsodium_la-core_salsa2012.Tpo -c -o crypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo `test -f 'crypto_core/salsa2012/ref/core_salsa2012.c' || echo '$(srcdir)/'`crypto_core/salsa2012/ref/core_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa2012/ref/$(DEPDIR)/libsodium_la-core_salsa2012.Tpo crypto_core/salsa2012/ref/$(DEPDIR)/libsodium_la-core_salsa2012.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa2012/ref/core_salsa2012.c' object='crypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa2012/ref/libsodium_la-core_salsa2012.lo `test -f 'crypto_core/salsa2012/ref/core_salsa2012.c' || echo '$(srcdir)/'`crypto_core/salsa2012/ref/core_salsa2012.c\n\ncrypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo: crypto_core/salsa2012/core_salsa2012_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo -MD -MP -MF crypto_core/salsa2012/$(DEPDIR)/libsodium_la-core_salsa2012_api.Tpo -c -o crypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo `test -f 'crypto_core/salsa2012/core_salsa2012_api.c' || echo '$(srcdir)/'`crypto_core/salsa2012/core_salsa2012_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa2012/$(DEPDIR)/libsodium_la-core_salsa2012_api.Tpo crypto_core/salsa2012/$(DEPDIR)/libsodium_la-core_salsa2012_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa2012/core_salsa2012_api.c' object='crypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa2012/libsodium_la-core_salsa2012_api.lo `test -f 'crypto_core/salsa2012/core_salsa2012_api.c' || echo '$(srcdir)/'`crypto_core/salsa2012/core_salsa2012_api.c\n\ncrypto_core/salsa208/ref/libsodium_la-core_salsa208.lo: crypto_core/salsa208/ref/core_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa208/ref/libsodium_la-core_salsa208.lo -MD -MP -MF crypto_core/salsa208/ref/$(DEPDIR)/libsodium_la-core_salsa208.Tpo -c -o crypto_core/salsa208/ref/libsodium_la-core_salsa208.lo `test -f 'crypto_core/salsa208/ref/core_salsa208.c' || echo '$(srcdir)/'`crypto_core/salsa208/ref/core_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa208/ref/$(DEPDIR)/libsodium_la-core_salsa208.Tpo crypto_core/salsa208/ref/$(DEPDIR)/libsodium_la-core_salsa208.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa208/ref/core_salsa208.c' object='crypto_core/salsa208/ref/libsodium_la-core_salsa208.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa208/ref/libsodium_la-core_salsa208.lo `test -f 'crypto_core/salsa208/ref/core_salsa208.c' || echo '$(srcdir)/'`crypto_core/salsa208/ref/core_salsa208.c\n\ncrypto_core/salsa208/libsodium_la-core_salsa208_api.lo: crypto_core/salsa208/core_salsa208_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_core/salsa208/libsodium_la-core_salsa208_api.lo -MD -MP -MF crypto_core/salsa208/$(DEPDIR)/libsodium_la-core_salsa208_api.Tpo -c -o crypto_core/salsa208/libsodium_la-core_salsa208_api.lo `test -f 'crypto_core/salsa208/core_salsa208_api.c' || echo '$(srcdir)/'`crypto_core/salsa208/core_salsa208_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_core/salsa208/$(DEPDIR)/libsodium_la-core_salsa208_api.Tpo crypto_core/salsa208/$(DEPDIR)/libsodium_la-core_salsa208_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_core/salsa208/core_salsa208_api.c' object='crypto_core/salsa208/libsodium_la-core_salsa208_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_core/salsa208/libsodium_la-core_salsa208_api.lo `test -f 'crypto_core/salsa208/core_salsa208_api.c' || echo '$(srcdir)/'`crypto_core/salsa208/core_salsa208_api.c\n\ncrypto_sign/ed25519/ref10/libsodium_la-obsolete.lo: crypto_sign/ed25519/ref10/obsolete.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_sign/ed25519/ref10/libsodium_la-obsolete.lo -MD -MP -MF crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-obsolete.Tpo -c -o crypto_sign/ed25519/ref10/libsodium_la-obsolete.lo `test -f 'crypto_sign/ed25519/ref10/obsolete.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/obsolete.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-obsolete.Tpo crypto_sign/ed25519/ref10/$(DEPDIR)/libsodium_la-obsolete.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_sign/ed25519/ref10/obsolete.c' object='crypto_sign/ed25519/ref10/libsodium_la-obsolete.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_sign/ed25519/ref10/libsodium_la-obsolete.lo `test -f 'crypto_sign/ed25519/ref10/obsolete.c' || echo '$(srcdir)/'`crypto_sign/ed25519/ref10/obsolete.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo: crypto_stream/aes128ctr/portable/afternm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-afternm_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/afternm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/afternm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-afternm_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-afternm_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/afternm_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-afternm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/afternm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/afternm_aes128ctr.c\n\ncrypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo: crypto_stream/aes128ctr/stream_aes128ctr_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo -MD -MP -MF crypto_stream/aes128ctr/$(DEPDIR)/libsodium_la-stream_aes128ctr_api.Tpo -c -o crypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo `test -f 'crypto_stream/aes128ctr/stream_aes128ctr_api.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/stream_aes128ctr_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/$(DEPDIR)/libsodium_la-stream_aes128ctr_api.Tpo crypto_stream/aes128ctr/$(DEPDIR)/libsodium_la-stream_aes128ctr_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/stream_aes128ctr_api.c' object='crypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/libsodium_la-stream_aes128ctr_api.lo `test -f 'crypto_stream/aes128ctr/stream_aes128ctr_api.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/stream_aes128ctr_api.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo: crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-beforenm_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-beforenm_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-beforenm_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-beforenm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo: crypto_stream/aes128ctr/portable/common_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-common_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/common_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/common_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-common_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-common_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/common_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-common_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/common_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/common_aes128ctr.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo: crypto_stream/aes128ctr/portable/consts_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-consts_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/consts_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/consts_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-consts_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-consts_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/consts_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-consts_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/consts_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/consts_aes128ctr.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo: crypto_stream/aes128ctr/portable/int128_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-int128_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/int128_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/int128_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-int128_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-int128_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/int128_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-int128_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/int128_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/int128_aes128ctr.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo: crypto_stream/aes128ctr/portable/stream_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-stream_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/stream_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/stream_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-stream_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-stream_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/stream_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-stream_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/stream_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/stream_aes128ctr.c\n\ncrypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo: crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo -MD -MP -MF crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-xor_afternm_aes128ctr.Tpo -c -o crypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-xor_afternm_aes128ctr.Tpo crypto_stream/aes128ctr/portable/$(DEPDIR)/libsodium_la-xor_afternm_aes128ctr.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c' object='crypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/aes128ctr/portable/libsodium_la-xor_afternm_aes128ctr.lo `test -f 'crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c' || echo '$(srcdir)/'`crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c\n\ncrypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo: crypto_stream/salsa2012/stream_salsa2012_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo -MD -MP -MF crypto_stream/salsa2012/$(DEPDIR)/libsodium_la-stream_salsa2012_api.Tpo -c -o crypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo `test -f 'crypto_stream/salsa2012/stream_salsa2012_api.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/stream_salsa2012_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa2012/$(DEPDIR)/libsodium_la-stream_salsa2012_api.Tpo crypto_stream/salsa2012/$(DEPDIR)/libsodium_la-stream_salsa2012_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa2012/stream_salsa2012_api.c' object='crypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa2012/libsodium_la-stream_salsa2012_api.lo `test -f 'crypto_stream/salsa2012/stream_salsa2012_api.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/stream_salsa2012_api.c\n\ncrypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo: crypto_stream/salsa2012/ref/stream_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo -MD -MP -MF crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-stream_salsa2012.Tpo -c -o crypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo `test -f 'crypto_stream/salsa2012/ref/stream_salsa2012.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/ref/stream_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-stream_salsa2012.Tpo crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-stream_salsa2012.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa2012/ref/stream_salsa2012.c' object='crypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa2012/ref/libsodium_la-stream_salsa2012.lo `test -f 'crypto_stream/salsa2012/ref/stream_salsa2012.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/ref/stream_salsa2012.c\n\ncrypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo: crypto_stream/salsa2012/ref/xor_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo -MD -MP -MF crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-xor_salsa2012.Tpo -c -o crypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo `test -f 'crypto_stream/salsa2012/ref/xor_salsa2012.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/ref/xor_salsa2012.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-xor_salsa2012.Tpo crypto_stream/salsa2012/ref/$(DEPDIR)/libsodium_la-xor_salsa2012.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa2012/ref/xor_salsa2012.c' object='crypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa2012/ref/libsodium_la-xor_salsa2012.lo `test -f 'crypto_stream/salsa2012/ref/xor_salsa2012.c' || echo '$(srcdir)/'`crypto_stream/salsa2012/ref/xor_salsa2012.c\n\ncrypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo: crypto_stream/salsa208/stream_salsa208_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo -MD -MP -MF crypto_stream/salsa208/$(DEPDIR)/libsodium_la-stream_salsa208_api.Tpo -c -o crypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo `test -f 'crypto_stream/salsa208/stream_salsa208_api.c' || echo '$(srcdir)/'`crypto_stream/salsa208/stream_salsa208_api.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa208/$(DEPDIR)/libsodium_la-stream_salsa208_api.Tpo crypto_stream/salsa208/$(DEPDIR)/libsodium_la-stream_salsa208_api.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa208/stream_salsa208_api.c' object='crypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa208/libsodium_la-stream_salsa208_api.lo `test -f 'crypto_stream/salsa208/stream_salsa208_api.c' || echo '$(srcdir)/'`crypto_stream/salsa208/stream_salsa208_api.c\n\ncrypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo: crypto_stream/salsa208/ref/stream_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo -MD -MP -MF crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-stream_salsa208.Tpo -c -o crypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo `test -f 'crypto_stream/salsa208/ref/stream_salsa208.c' || echo '$(srcdir)/'`crypto_stream/salsa208/ref/stream_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-stream_salsa208.Tpo crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-stream_salsa208.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa208/ref/stream_salsa208.c' object='crypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa208/ref/libsodium_la-stream_salsa208.lo `test -f 'crypto_stream/salsa208/ref/stream_salsa208.c' || echo '$(srcdir)/'`crypto_stream/salsa208/ref/stream_salsa208.c\n\ncrypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo: crypto_stream/salsa208/ref/xor_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo -MD -MP -MF crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-xor_salsa208.Tpo -c -o crypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo `test -f 'crypto_stream/salsa208/ref/xor_salsa208.c' || echo '$(srcdir)/'`crypto_stream/salsa208/ref/xor_salsa208.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-xor_salsa208.Tpo crypto_stream/salsa208/ref/$(DEPDIR)/libsodium_la-xor_salsa208.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/salsa208/ref/xor_salsa208.c' object='crypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsodium_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/salsa208/ref/libsodium_la-xor_salsa208.lo `test -f 'crypto_stream/salsa208/ref/xor_salsa208.c' || echo '$(srcdir)/'`crypto_stream/salsa208/ref/xor_salsa208.c\n\ncrypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo: crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo -MD -MP -MF crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/libsse2_la-pwhash_scryptsalsa208sha256_sse.Tpo -c -o crypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/libsse2_la-pwhash_scryptsalsa208sha256_sse.Tpo crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/libsse2_la-pwhash_scryptsalsa208sha256_sse.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c' object='crypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_pwhash/scryptsalsa208sha256/sse/libsse2_la-pwhash_scryptsalsa208sha256_sse.lo `test -f 'crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c' || echo '$(srcdir)/'`crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c\n\ncrypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo: crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo -MD -MP -MF crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/libsse2_la-poly1305_sse2.Tpo -c -o crypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo `test -f 'crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/libsse2_la-poly1305_sse2.Tpo crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/libsse2_la-poly1305_sse2.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c' object='crypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_onetimeauth/poly1305/sse2/libsse2_la-poly1305_sse2.lo `test -f 'crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c' || echo '$(srcdir)/'`crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c\n\ncrypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo: crypto_generichash/blake2/ref/blake2b-compress-sse41.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse41_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo -MD -MP -MF crypto_generichash/blake2/ref/$(DEPDIR)/libsse41_la-blake2b-compress-sse41.Tpo -c -o crypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-sse41.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-sse41.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/ref/$(DEPDIR)/libsse41_la-blake2b-compress-sse41.Tpo crypto_generichash/blake2/ref/$(DEPDIR)/libsse41_la-blake2b-compress-sse41.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/ref/blake2b-compress-sse41.c' object='crypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsse41_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/ref/libsse41_la-blake2b-compress-sse41.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-sse41.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-sse41.c\n\ncrypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo: crypto_generichash/blake2/ref/blake2b-compress-ssse3.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libssse3_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo -MD -MP -MF crypto_generichash/blake2/ref/$(DEPDIR)/libssse3_la-blake2b-compress-ssse3.Tpo -c -o crypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-ssse3.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-ssse3.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_generichash/blake2/ref/$(DEPDIR)/libssse3_la-blake2b-compress-ssse3.Tpo crypto_generichash/blake2/ref/$(DEPDIR)/libssse3_la-blake2b-compress-ssse3.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_generichash/blake2/ref/blake2b-compress-ssse3.c' object='crypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libssse3_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_generichash/blake2/ref/libssse3_la-blake2b-compress-ssse3.lo `test -f 'crypto_generichash/blake2/ref/blake2b-compress-ssse3.c' || echo '$(srcdir)/'`crypto_generichash/blake2/ref/blake2b-compress-ssse3.c\n\ncrypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo: crypto_stream/chacha20/vec/stream_chacha20_vec.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libssse3_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo -MD -MP -MF crypto_stream/chacha20/vec/$(DEPDIR)/libssse3_la-stream_chacha20_vec.Tpo -c -o crypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo `test -f 'crypto_stream/chacha20/vec/stream_chacha20_vec.c' || echo '$(srcdir)/'`crypto_stream/chacha20/vec/stream_chacha20_vec.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) crypto_stream/chacha20/vec/$(DEPDIR)/libssse3_la-stream_chacha20_vec.Tpo crypto_stream/chacha20/vec/$(DEPDIR)/libssse3_la-stream_chacha20_vec.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='crypto_stream/chacha20/vec/stream_chacha20_vec.c' object='crypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libssse3_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crypto_stream/chacha20/vec/libssse3_la-stream_chacha20_vec.lo `test -f 'crypto_stream/chacha20/vec/stream_chacha20_vec.c' || echo '$(srcdir)/'`crypto_stream/chacha20/vec/stream_chacha20_vec.c\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\t-rm -rf crypto_aead/aes256gcm/aesni/.libs crypto_aead/aes256gcm/aesni/_libs\n\t-rm -rf crypto_aead/chacha20poly1305/sodium/.libs crypto_aead/chacha20poly1305/sodium/_libs\n\t-rm -rf crypto_auth/.libs crypto_auth/_libs\n\t-rm -rf crypto_auth/hmacsha256/.libs crypto_auth/hmacsha256/_libs\n\t-rm -rf crypto_auth/hmacsha256/cp/.libs crypto_auth/hmacsha256/cp/_libs\n\t-rm -rf crypto_auth/hmacsha512/.libs crypto_auth/hmacsha512/_libs\n\t-rm -rf crypto_auth/hmacsha512/cp/.libs crypto_auth/hmacsha512/cp/_libs\n\t-rm -rf crypto_auth/hmacsha512256/.libs crypto_auth/hmacsha512256/_libs\n\t-rm -rf crypto_auth/hmacsha512256/cp/.libs crypto_auth/hmacsha512256/cp/_libs\n\t-rm -rf crypto_box/.libs crypto_box/_libs\n\t-rm -rf crypto_box/curve25519xsalsa20poly1305/.libs crypto_box/curve25519xsalsa20poly1305/_libs\n\t-rm -rf crypto_box/curve25519xsalsa20poly1305/ref/.libs crypto_box/curve25519xsalsa20poly1305/ref/_libs\n\t-rm -rf crypto_core/hsalsa20/.libs crypto_core/hsalsa20/_libs\n\t-rm -rf crypto_core/hsalsa20/ref2/.libs crypto_core/hsalsa20/ref2/_libs\n\t-rm -rf crypto_core/salsa20/.libs crypto_core/salsa20/_libs\n\t-rm -rf crypto_core/salsa20/ref/.libs crypto_core/salsa20/ref/_libs\n\t-rm -rf crypto_core/salsa2012/.libs crypto_core/salsa2012/_libs\n\t-rm -rf crypto_core/salsa2012/ref/.libs crypto_core/salsa2012/ref/_libs\n\t-rm -rf crypto_core/salsa208/.libs crypto_core/salsa208/_libs\n\t-rm -rf crypto_core/salsa208/ref/.libs crypto_core/salsa208/ref/_libs\n\t-rm -rf crypto_generichash/.libs crypto_generichash/_libs\n\t-rm -rf crypto_generichash/blake2/.libs crypto_generichash/blake2/_libs\n\t-rm -rf crypto_generichash/blake2/ref/.libs crypto_generichash/blake2/ref/_libs\n\t-rm -rf crypto_hash/.libs crypto_hash/_libs\n\t-rm -rf crypto_hash/sha256/.libs crypto_hash/sha256/_libs\n\t-rm -rf crypto_hash/sha256/cp/.libs crypto_hash/sha256/cp/_libs\n\t-rm -rf crypto_hash/sha512/.libs crypto_hash/sha512/_libs\n\t-rm -rf crypto_hash/sha512/cp/.libs crypto_hash/sha512/cp/_libs\n\t-rm -rf crypto_onetimeauth/.libs crypto_onetimeauth/_libs\n\t-rm -rf crypto_onetimeauth/poly1305/.libs crypto_onetimeauth/poly1305/_libs\n\t-rm -rf crypto_onetimeauth/poly1305/donna/.libs crypto_onetimeauth/poly1305/donna/_libs\n\t-rm -rf crypto_onetimeauth/poly1305/sse2/.libs crypto_onetimeauth/poly1305/sse2/_libs\n\t-rm -rf crypto_pwhash/scryptsalsa208sha256/.libs crypto_pwhash/scryptsalsa208sha256/_libs\n\t-rm -rf crypto_pwhash/scryptsalsa208sha256/nosse/.libs crypto_pwhash/scryptsalsa208sha256/nosse/_libs\n\t-rm -rf crypto_pwhash/scryptsalsa208sha256/sse/.libs crypto_pwhash/scryptsalsa208sha256/sse/_libs\n\t-rm -rf crypto_scalarmult/.libs crypto_scalarmult/_libs\n\t-rm -rf crypto_scalarmult/curve25519/.libs crypto_scalarmult/curve25519/_libs\n\t-rm -rf crypto_scalarmult/curve25519/donna_c64/.libs crypto_scalarmult/curve25519/donna_c64/_libs\n\t-rm -rf crypto_scalarmult/curve25519/ref10/.libs crypto_scalarmult/curve25519/ref10/_libs\n\t-rm -rf crypto_scalarmult/curve25519/sandy2x/.libs crypto_scalarmult/curve25519/sandy2x/_libs\n\t-rm -rf crypto_secretbox/.libs crypto_secretbox/_libs\n\t-rm -rf crypto_secretbox/xsalsa20poly1305/.libs crypto_secretbox/xsalsa20poly1305/_libs\n\t-rm -rf crypto_secretbox/xsalsa20poly1305/ref/.libs crypto_secretbox/xsalsa20poly1305/ref/_libs\n\t-rm -rf crypto_shorthash/.libs crypto_shorthash/_libs\n\t-rm -rf crypto_shorthash/siphash24/.libs crypto_shorthash/siphash24/_libs\n\t-rm -rf crypto_shorthash/siphash24/ref/.libs crypto_shorthash/siphash24/ref/_libs\n\t-rm -rf crypto_sign/.libs crypto_sign/_libs\n\t-rm -rf crypto_sign/ed25519/.libs crypto_sign/ed25519/_libs\n\t-rm -rf crypto_sign/ed25519/ref10/.libs crypto_sign/ed25519/ref10/_libs\n\t-rm -rf crypto_stream/.libs crypto_stream/_libs\n\t-rm -rf crypto_stream/aes128ctr/.libs crypto_stream/aes128ctr/_libs\n\t-rm -rf crypto_stream/aes128ctr/portable/.libs crypto_stream/aes128ctr/portable/_libs\n\t-rm -rf crypto_stream/chacha20/.libs crypto_stream/chacha20/_libs\n\t-rm -rf crypto_stream/chacha20/ref/.libs crypto_stream/chacha20/ref/_libs\n\t-rm -rf crypto_stream/chacha20/vec/.libs crypto_stream/chacha20/vec/_libs\n\t-rm -rf crypto_stream/salsa20/.libs crypto_stream/salsa20/_libs\n\t-rm -rf crypto_stream/salsa20/amd64_xmm6/.libs crypto_stream/salsa20/amd64_xmm6/_libs\n\t-rm -rf crypto_stream/salsa20/ref/.libs crypto_stream/salsa20/ref/_libs\n\t-rm -rf crypto_stream/salsa2012/.libs crypto_stream/salsa2012/_libs\n\t-rm -rf crypto_stream/salsa2012/ref/.libs crypto_stream/salsa2012/ref/_libs\n\t-rm -rf crypto_stream/salsa208/.libs crypto_stream/salsa208/_libs\n\t-rm -rf crypto_stream/salsa208/ref/.libs crypto_stream/salsa208/ref/_libs\n\t-rm -rf crypto_stream/xsalsa20/.libs crypto_stream/xsalsa20/_libs\n\t-rm -rf crypto_stream/xsalsa20/ref/.libs crypto_stream/xsalsa20/ref/_libs\n\t-rm -rf crypto_verify/16/.libs crypto_verify/16/_libs\n\t-rm -rf crypto_verify/16/ref/.libs crypto_verify/16/ref/_libs\n\t-rm -rf crypto_verify/32/.libs crypto_verify/32/_libs\n\t-rm -rf crypto_verify/32/ref/.libs crypto_verify/32/ref/_libs\n\t-rm -rf crypto_verify/64/.libs crypto_verify/64/_libs\n\t-rm -rf crypto_verify/64/ref/.libs crypto_verify/64/ref/_libs\n\t-rm -rf randombytes/.libs randombytes/_libs\n\t-rm -rf randombytes/nativeclient/.libs randombytes/nativeclient/_libs\n\t-rm -rf randombytes/salsa20/.libs randombytes/salsa20/_libs\n\t-rm -rf randombytes/sysrandom/.libs randombytes/sysrandom/_libs\n\t-rm -rf sodium/.libs sodium/_libs\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$(am__recursive_targets):\n\t@fail=; \\\n\tif $(am__make_keepgoing); then \\\n\t  failcom='fail=yes'; \\\n\telse \\\n\t  failcom='exit 1'; \\\n\tfi; \\\n\tdot_seen=no; \\\n\ttarget=`echo $@ | sed s/-recursive//`; \\\n\tcase \"$@\" in \\\n\t  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \\\n\t  *) list='$(SUBDIRS)' ;; \\\n\tesac; \\\n\tfor 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  ($(am__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\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-recursive\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\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      set \"$$@\" \"$$include_option=$$here/$$subdir/TAGS\"; \\\n\t  fi; \\\n\tdone; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-recursive\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-recursive\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \\\n\t  if test \"$$subdir\" = .; then :; else \\\n\t    $(am__make_dryrun) \\\n\t      || test -d \"$(distdir)/$$subdir\" \\\n\t      || $(MKDIR_P) \"$(distdir)/$$subdir\" \\\n\t      || exit 1; \\\n\t    dir1=$$subdir; dir2=\"$(distdir)/$$subdir\"; \\\n\t    $(am__relativize); \\\n\t    new_distdir=$$reldir; \\\n\t    dir1=$$subdir; dir2=\"$(top_distdir)\"; \\\n\t    $(am__relativize); \\\n\t    new_top_distdir=$$reldir; \\\n\t    echo \" (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=\"$$new_top_distdir\" distdir=\"$$new_distdir\" \\\\\"; \\\n\t    echo \"     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)\"; \\\n\t    ($(am__cd) $$subdir && \\\n\t      $(MAKE) $(AM_MAKEFLAGS) \\\n\t        top_distdir=\"$$new_top_distdir\" \\\n\t        distdir=\"$$new_distdir\" \\\n\t\tam__remove_distdir=: \\\n\t\tam__skip_length_check=: \\\n\t\tam__skip_mode_fix=: \\\n\t        distdir) \\\n\t      || exit 1; \\\n\t  fi; \\\n\tdone\ncheck-am: all-am\ncheck: check-recursive\nall-am: Makefile $(LTLIBRARIES) $(HEADERS)\ninstalldirs: installdirs-recursive\ninstalldirs-am:\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_FILES)\n\t-rm -f crypto_aead/aes256gcm/aesni/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_aead/aes256gcm/aesni/$(am__dirstamp)\n\t-rm -f crypto_aead/chacha20poly1305/sodium/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_aead/chacha20poly1305/sodium/$(am__dirstamp)\n\t-rm -f crypto_auth/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha256/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha256/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha256/cp/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha256/cp/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512/cp/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512/cp/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512256/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512256/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512256/cp/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_auth/hmacsha512256/cp/$(am__dirstamp)\n\t-rm -f crypto_box/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_box/$(am__dirstamp)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/$(am__dirstamp)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_box/curve25519xsalsa20poly1305/ref/$(am__dirstamp)\n\t-rm -f crypto_core/hsalsa20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/hsalsa20/$(am__dirstamp)\n\t-rm -f crypto_core/hsalsa20/ref2/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/hsalsa20/ref2/$(am__dirstamp)\n\t-rm -f crypto_core/salsa20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa20/$(am__dirstamp)\n\t-rm -f crypto_core/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa20/ref/$(am__dirstamp)\n\t-rm -f crypto_core/salsa2012/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa2012/$(am__dirstamp)\n\t-rm -f crypto_core/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa2012/ref/$(am__dirstamp)\n\t-rm -f crypto_core/salsa208/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa208/$(am__dirstamp)\n\t-rm -f crypto_core/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_core/salsa208/ref/$(am__dirstamp)\n\t-rm -f crypto_generichash/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_generichash/$(am__dirstamp)\n\t-rm -f crypto_generichash/blake2/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_generichash/blake2/$(am__dirstamp)\n\t-rm -f crypto_generichash/blake2/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_generichash/blake2/ref/$(am__dirstamp)\n\t-rm -f crypto_hash/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_hash/$(am__dirstamp)\n\t-rm -f crypto_hash/sha256/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_hash/sha256/$(am__dirstamp)\n\t-rm -f crypto_hash/sha256/cp/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_hash/sha256/cp/$(am__dirstamp)\n\t-rm -f crypto_hash/sha512/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_hash/sha512/$(am__dirstamp)\n\t-rm -f crypto_hash/sha512/cp/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_hash/sha512/cp/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/donna/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/donna/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/sse2/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_onetimeauth/poly1305/sse2/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/nosse/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_pwhash/scryptsalsa208sha256/sse/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/donna_c64/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/donna_c64/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/ref10/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/ref10/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/sandy2x/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_scalarmult/curve25519/sandy2x/$(am__dirstamp)\n\t-rm -f crypto_secretbox/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_secretbox/$(am__dirstamp)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/$(am__dirstamp)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_secretbox/xsalsa20poly1305/ref/$(am__dirstamp)\n\t-rm -f crypto_shorthash/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_shorthash/$(am__dirstamp)\n\t-rm -f crypto_shorthash/siphash24/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_shorthash/siphash24/$(am__dirstamp)\n\t-rm -f crypto_shorthash/siphash24/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_shorthash/siphash24/ref/$(am__dirstamp)\n\t-rm -f crypto_sign/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_sign/$(am__dirstamp)\n\t-rm -f crypto_sign/ed25519/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_sign/ed25519/$(am__dirstamp)\n\t-rm -f crypto_sign/ed25519/ref10/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_sign/ed25519/ref10/$(am__dirstamp)\n\t-rm -f crypto_stream/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/$(am__dirstamp)\n\t-rm -f crypto_stream/aes128ctr/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/aes128ctr/$(am__dirstamp)\n\t-rm -f crypto_stream/aes128ctr/portable/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/aes128ctr/portable/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/ref/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/vec/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/chacha20/vec/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/amd64_xmm6/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/amd64_xmm6/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa20/ref/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa2012/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa2012/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa2012/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa2012/ref/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa208/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa208/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa208/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/salsa208/ref/$(am__dirstamp)\n\t-rm -f crypto_stream/xsalsa20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/xsalsa20/$(am__dirstamp)\n\t-rm -f crypto_stream/xsalsa20/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_stream/xsalsa20/ref/$(am__dirstamp)\n\t-rm -f crypto_verify/16/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/16/$(am__dirstamp)\n\t-rm -f crypto_verify/16/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/16/ref/$(am__dirstamp)\n\t-rm -f crypto_verify/32/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/32/$(am__dirstamp)\n\t-rm -f crypto_verify/32/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/32/ref/$(am__dirstamp)\n\t-rm -f crypto_verify/64/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/64/$(am__dirstamp)\n\t-rm -f crypto_verify/64/ref/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f crypto_verify/64/ref/$(am__dirstamp)\n\t-rm -f randombytes/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f randombytes/$(am__dirstamp)\n\t-rm -f randombytes/nativeclient/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f randombytes/nativeclient/$(am__dirstamp)\n\t-rm -f randombytes/salsa20/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f randombytes/salsa20/$(am__dirstamp)\n\t-rm -f randombytes/sysrandom/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f randombytes/sysrandom/$(am__dirstamp)\n\t-rm -f sodium/$(DEPDIR)/$(am__dirstamp)\n\t-rm -f sodium/$(am__dirstamp)\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-generic clean-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-am\n\ndistclean: distclean-recursive\n\t-rm -rf crypto_aead/aes256gcm/aesni/$(DEPDIR) crypto_aead/chacha20poly1305/sodium/$(DEPDIR) crypto_auth/$(DEPDIR) crypto_auth/hmacsha256/$(DEPDIR) crypto_auth/hmacsha256/cp/$(DEPDIR) crypto_auth/hmacsha512/$(DEPDIR) crypto_auth/hmacsha512/cp/$(DEPDIR) crypto_auth/hmacsha512256/$(DEPDIR) crypto_auth/hmacsha512256/cp/$(DEPDIR) crypto_box/$(DEPDIR) crypto_box/curve25519xsalsa20poly1305/$(DEPDIR) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR) crypto_core/hsalsa20/$(DEPDIR) crypto_core/hsalsa20/ref2/$(DEPDIR) crypto_core/salsa20/$(DEPDIR) crypto_core/salsa20/ref/$(DEPDIR) crypto_core/salsa2012/$(DEPDIR) crypto_core/salsa2012/ref/$(DEPDIR) crypto_core/salsa208/$(DEPDIR) crypto_core/salsa208/ref/$(DEPDIR) crypto_generichash/$(DEPDIR) crypto_generichash/blake2/$(DEPDIR) crypto_generichash/blake2/ref/$(DEPDIR) crypto_hash/$(DEPDIR) crypto_hash/sha256/$(DEPDIR) crypto_hash/sha256/cp/$(DEPDIR) crypto_hash/sha512/$(DEPDIR) crypto_hash/sha512/cp/$(DEPDIR) crypto_onetimeauth/$(DEPDIR) crypto_onetimeauth/poly1305/$(DEPDIR) crypto_onetimeauth/poly1305/donna/$(DEPDIR) crypto_onetimeauth/poly1305/sse2/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR) crypto_scalarmult/$(DEPDIR) crypto_scalarmult/curve25519/$(DEPDIR) crypto_scalarmult/curve25519/donna_c64/$(DEPDIR) crypto_scalarmult/curve25519/ref10/$(DEPDIR) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR) crypto_secretbox/$(DEPDIR) crypto_secretbox/xsalsa20poly1305/$(DEPDIR) crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR) crypto_shorthash/$(DEPDIR) crypto_shorthash/siphash24/$(DEPDIR) crypto_shorthash/siphash24/ref/$(DEPDIR) crypto_sign/$(DEPDIR) crypto_sign/ed25519/$(DEPDIR) crypto_sign/ed25519/ref10/$(DEPDIR) crypto_stream/$(DEPDIR) crypto_stream/aes128ctr/$(DEPDIR) crypto_stream/aes128ctr/portable/$(DEPDIR) crypto_stream/chacha20/$(DEPDIR) crypto_stream/chacha20/ref/$(DEPDIR) crypto_stream/chacha20/vec/$(DEPDIR) crypto_stream/salsa20/$(DEPDIR) crypto_stream/salsa20/amd64_xmm6/$(DEPDIR) crypto_stream/salsa20/ref/$(DEPDIR) crypto_stream/salsa2012/$(DEPDIR) crypto_stream/salsa2012/ref/$(DEPDIR) crypto_stream/salsa208/$(DEPDIR) crypto_stream/salsa208/ref/$(DEPDIR) crypto_stream/xsalsa20/$(DEPDIR) crypto_stream/xsalsa20/ref/$(DEPDIR) crypto_verify/16/$(DEPDIR) crypto_verify/16/ref/$(DEPDIR) crypto_verify/32/$(DEPDIR) crypto_verify/32/ref/$(DEPDIR) crypto_verify/64/$(DEPDIR) crypto_verify/64/ref/$(DEPDIR) randombytes/$(DEPDIR) randombytes/nativeclient/$(DEPDIR) randombytes/salsa20/$(DEPDIR) randombytes/sysrandom/$(DEPDIR) sodium/$(DEPDIR)\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-compile distclean-generic \\\n\tdistclean-tags\n\ndvi: dvi-recursive\n\ndvi-am:\n\nhtml: html-recursive\n\nhtml-am:\n\ninfo: info-recursive\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-recursive\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-recursive\n\ninstall-html-am:\n\ninstall-info: install-info-recursive\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-recursive\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-recursive\n\ninstall-ps-am:\n\ninstallcheck-am:\n\nmaintainer-clean: maintainer-clean-recursive\n\t-rm -rf crypto_aead/aes256gcm/aesni/$(DEPDIR) crypto_aead/chacha20poly1305/sodium/$(DEPDIR) crypto_auth/$(DEPDIR) crypto_auth/hmacsha256/$(DEPDIR) crypto_auth/hmacsha256/cp/$(DEPDIR) crypto_auth/hmacsha512/$(DEPDIR) crypto_auth/hmacsha512/cp/$(DEPDIR) crypto_auth/hmacsha512256/$(DEPDIR) crypto_auth/hmacsha512256/cp/$(DEPDIR) crypto_box/$(DEPDIR) crypto_box/curve25519xsalsa20poly1305/$(DEPDIR) crypto_box/curve25519xsalsa20poly1305/ref/$(DEPDIR) crypto_core/hsalsa20/$(DEPDIR) crypto_core/hsalsa20/ref2/$(DEPDIR) crypto_core/salsa20/$(DEPDIR) crypto_core/salsa20/ref/$(DEPDIR) crypto_core/salsa2012/$(DEPDIR) crypto_core/salsa2012/ref/$(DEPDIR) crypto_core/salsa208/$(DEPDIR) crypto_core/salsa208/ref/$(DEPDIR) crypto_generichash/$(DEPDIR) crypto_generichash/blake2/$(DEPDIR) crypto_generichash/blake2/ref/$(DEPDIR) crypto_hash/$(DEPDIR) crypto_hash/sha256/$(DEPDIR) crypto_hash/sha256/cp/$(DEPDIR) crypto_hash/sha512/$(DEPDIR) crypto_hash/sha512/cp/$(DEPDIR) crypto_onetimeauth/$(DEPDIR) crypto_onetimeauth/poly1305/$(DEPDIR) crypto_onetimeauth/poly1305/donna/$(DEPDIR) crypto_onetimeauth/poly1305/sse2/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/nosse/$(DEPDIR) crypto_pwhash/scryptsalsa208sha256/sse/$(DEPDIR) crypto_scalarmult/$(DEPDIR) crypto_scalarmult/curve25519/$(DEPDIR) crypto_scalarmult/curve25519/donna_c64/$(DEPDIR) crypto_scalarmult/curve25519/ref10/$(DEPDIR) crypto_scalarmult/curve25519/sandy2x/$(DEPDIR) crypto_secretbox/$(DEPDIR) crypto_secretbox/xsalsa20poly1305/$(DEPDIR) crypto_secretbox/xsalsa20poly1305/ref/$(DEPDIR) crypto_shorthash/$(DEPDIR) crypto_shorthash/siphash24/$(DEPDIR) crypto_shorthash/siphash24/ref/$(DEPDIR) crypto_sign/$(DEPDIR) crypto_sign/ed25519/$(DEPDIR) crypto_sign/ed25519/ref10/$(DEPDIR) crypto_stream/$(DEPDIR) crypto_stream/aes128ctr/$(DEPDIR) crypto_stream/aes128ctr/portable/$(DEPDIR) crypto_stream/chacha20/$(DEPDIR) crypto_stream/chacha20/ref/$(DEPDIR) crypto_stream/chacha20/vec/$(DEPDIR) crypto_stream/salsa20/$(DEPDIR) crypto_stream/salsa20/amd64_xmm6/$(DEPDIR) crypto_stream/salsa20/ref/$(DEPDIR) crypto_stream/salsa2012/$(DEPDIR) crypto_stream/salsa2012/ref/$(DEPDIR) crypto_stream/salsa208/$(DEPDIR) crypto_stream/salsa208/ref/$(DEPDIR) crypto_stream/xsalsa20/$(DEPDIR) crypto_stream/xsalsa20/ref/$(DEPDIR) crypto_verify/16/$(DEPDIR) crypto_verify/16/ref/$(DEPDIR) crypto_verify/32/$(DEPDIR) crypto_verify/32/ref/$(DEPDIR) crypto_verify/64/$(DEPDIR) crypto_verify/64/ref/$(DEPDIR) randombytes/$(DEPDIR) randombytes/nativeclient/$(DEPDIR) randombytes/salsa20/$(DEPDIR) randombytes/sysrandom/$(DEPDIR) sodium/$(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 \\\n\tmostlyclean-libtool\n\npdf: pdf-recursive\n\npdf-am:\n\nps: ps-recursive\n\nps-am:\n\nuninstall-am:\n\n.MAKE: $(am__recursive_targets) install-am install-strip\n\n.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \\\n\tcheck-am clean clean-generic clean-libtool \\\n\tclean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \\\n\tdistclean-compile distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-data install-data-am install-dvi \\\n\tinstall-dvi-am install-exec install-exec-am install-html \\\n\tinstall-html-am install-info install-info-am install-man \\\n\tinstall-pdf install-pdf-am install-ps install-ps-am \\\n\tinstall-strip installcheck installcheck-am installdirs \\\n\tinstalldirs-am maintainer-clean maintainer-clean-generic \\\n\tmostlyclean mostlyclean-compile mostlyclean-generic \\\n\tmostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \\\n\tuninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_aead/aes256gcm/aesni/aead_aes256gcm_aesni.c",
    "content": "\n/*\n * AES256-GCM, based on original code by Romain Dolbeau\n */\n\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"crypto_aead_aes256gcm.h\"\n#include \"export.h\"\n#include \"runtime.h\"\n#include \"utils.h\"\n\n#if defined(HAVE_WMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n\n#pragma GCC target(\"ssse3\")\n#pragma GCC target(\"aes\")\n#pragma GCC target(\"pclmul\")\n\n#include <immintrin.h>\n\n#if defined(__INTEL_COMPILER) || defined(_bswap64)\n#elif defined(_MSC_VER)\n# define _bswap64(a) _byteswap_uint64(a)\n#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))\n# define _bswap64(a) __builtin_bswap64(a)\n#else\nstatic inline uint64_t\n_bswap64(const uint64_t x)\n{\n    return\n        ((x << 56) & 0xFF00000000000000UL) | ((x << 40) & 0x00FF000000000000UL) |\n        ((x << 24) & 0x0000FF0000000000UL) | ((x <<  8) & 0x000000FF00000000UL) |\n        ((x >>  8) & 0x00000000FF000000UL) | ((x >> 24) & 0x0000000000FF0000UL) |\n        ((x >> 40) & 0x000000000000FF00UL) | ((x >> 56) & 0x00000000000000FFUL);\n}\n#endif\n\ntypedef struct context {\n    CRYPTO_ALIGN(16) unsigned char H[16];\n    __m128i          rkeys[16];\n} context;\n\nstatic inline void\naesni_key256_expand(const unsigned char *key, __m128 *rkeys)\n{\n    __m128 key0 = _mm_loadu_ps((const float *) (key + 0));\n    __m128 key1 = _mm_loadu_ps((const float *) (key + 16));\n    __m128 temp0, temp1, temp2, temp4;\n    int    idx = 0;\n\n    rkeys[idx++] = key0;\n    temp0 = key0;\n    temp2 = key1;\n    temp4 = _mm_setzero_ps();\n\n/* why single precision floating-point rather than integer instructions ?\n     because _mm_shuffle_ps takes two inputs, while _mm_shuffle_epi32 only\n     takes one - it doesn't perform the same computation...\n     _mm_shuffle_ps takes the lower 64 bits of the result from the first\n     operand, and the higher 64 bits of the result from the second operand\n     (in both cases, all four input floats are accessible).\n     I don't like the non-orthogonal naming scheme :-(\n\n     This is all strongly inspired by the openssl assembly code.\n  */\n#define BLOCK1(IMM)                                                 \\\n    temp1 = _mm_castsi128_ps(_mm_aeskeygenassist_si128(_mm_castps_si128(temp2), IMM));\\\n    rkeys[idx++] = temp2;                                           \\\n    temp4 = _mm_shuffle_ps(temp4, temp0, 0x10);                     \\\n    temp0 = _mm_xor_ps(temp0, temp4);                               \\\n    temp4 = _mm_shuffle_ps(temp4, temp0, 0x8c);                     \\\n    temp0 = _mm_xor_ps(temp0, temp4);                               \\\n    temp1 = _mm_shuffle_ps(temp1, temp1, 0xff);                     \\\n    temp0 = _mm_xor_ps(temp0, temp1)\n\n#define BLOCK2(IMM)                                                 \\\n    temp1 = _mm_castsi128_ps(_mm_aeskeygenassist_si128(_mm_castps_si128(temp0), IMM));\\\n    rkeys[idx++] = temp0;                                           \\\n    temp4 = _mm_shuffle_ps(temp4, temp2, 0x10);                     \\\n    temp2 = _mm_xor_ps(temp2, temp4);                               \\\n    temp4 = _mm_shuffle_ps(temp4, temp2, 0x8c);                     \\\n    temp2 = _mm_xor_ps(temp2, temp4);                               \\\n    temp1 = _mm_shuffle_ps(temp1, temp1, 0xaa);                     \\\n    temp2 = _mm_xor_ps(temp2, temp1)\n\n    BLOCK1(0x01);\n    BLOCK2(0x01);\n\n    BLOCK1(0x02);\n    BLOCK2(0x02);\n\n    BLOCK1(0x04);\n    BLOCK2(0x04);\n\n    BLOCK1(0x08);\n    BLOCK2(0x08);\n\n    BLOCK1(0x10);\n    BLOCK2(0x10);\n\n    BLOCK1(0x20);\n    BLOCK2(0x20);\n\n    BLOCK1(0x40);\n    rkeys[idx++] = temp0;\n}\n\n/** single, by-the-book AES encryption with AES-NI */\nstatic inline void\naesni_encrypt1(unsigned char *out, __m128i nv, const __m128i *rkeys)\n{\n    __m128i temp = _mm_xor_si128(nv, rkeys[0]);\n    int     roundctr;\n\n#pragma unroll(13)\n    for (roundctr = 1; roundctr < 14; roundctr++) {\n        temp = _mm_aesenc_si128(temp, rkeys[roundctr]);\n    }\n    temp = _mm_aesenclast_si128(temp, rkeys[14]);\n    _mm_storeu_si128((__m128i *) out, temp);\n}\n\n/** multiple-blocks-at-once AES encryption with AES-NI ;\n    on Haswell, aesenc as a latency of 7 and a througput of 1\n    so the sequence of aesenc should be bubble-free, if you\n    have at least 8 blocks. Let's build an arbitratry-sized\n    function */\n/* Step 1 : loading the nonce */\n/* load & increment the n vector (non-vectorized, unused for now) */\n#define NVDECLx(a)                                                             \\\n    __m128i nv##a\n\n#define NVx(a)                                                                 \\\n    nv##a = _mm_shuffle_epi8(_mm_load_si128((const __m128i *) n), pt);         \\\n    n[3]++\n\n/* Step 2 : define value in round one (xor with subkey #0, aka key) */\n#define TEMPDECLx(a) \\\n    __m128i temp##a\n\n#define TEMPx(a) \\\n    temp##a = _mm_xor_si128(nv##a, rkeys[0])\n\n/* Step 3: one round of AES */\n#define AESENCx(a) \\\n    temp##a = _mm_aesenc_si128(temp##a, rkeys[roundctr])\n\n/* Step 4: last round of AES */\n#define AESENCLASTx(a) \\\n    temp##a = _mm_aesenclast_si128(temp##a, rkeys[14])\n\n/* Step 5: store result */\n#define STOREx(a) \\\n    _mm_storeu_si128((__m128i *) (out + (a * 16)), temp##a)\n\n/* all the MAKE* macros are for automatic explicit unrolling */\n#define MAKE4(X) \\\n    X(0);        \\\n    X(1);        \\\n    X(2);        \\\n    X(3)\n\n#define MAKE8(X) \\\n    X(0);        \\\n    X(1);        \\\n    X(2);        \\\n    X(3);        \\\n    X(4);        \\\n    X(5);        \\\n    X(6);        \\\n    X(7)\n\n#define COUNTER_INC2(N) (N)[3] += 2\n\n/* create a function of unrolling N ; the MAKEN is the unrolling\n   macro, defined above. The N in MAKEN must match N, obviously. */\n#define FUNC(N, MAKEN)                                                                                \\\n    static inline void aesni_encrypt##N(unsigned char *out, uint32_t *n, const __m128i *rkeys)        \\\n    {                                                                                                 \\\n        const __m128i pt = _mm_set_epi8(12, 13, 14, 15, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0);        \\\n        int           roundctr;                                                                       \\\n        MAKEN(NVDECLx);                                                                               \\\n        MAKEN(TEMPDECLx);                                                                             \\\n                                                                                                      \\\n        MAKEN(NVx);                                                                                   \\\n        MAKEN(TEMPx);                                                                                 \\\n        for (roundctr = 1; roundctr < 14; roundctr++) {                                               \\\n            MAKEN(AESENCx);                                                                           \\\n        }                                                                                             \\\n        MAKEN(AESENCLASTx);                                                                           \\\n        MAKEN(STOREx);                                                                                \\\n    }\n\nFUNC(8, MAKE8)\n\n/* all GF(2^128) fnctions are by the book, meaning this one:\n   <https://software.intel.com/sites/default/files/managed/72/cc/clmul-wp-rev-2.02-2014-04-20.pdf>\n*/\n\nstatic inline void\naddmul(unsigned char *c, const unsigned char *a, unsigned int xlen, const unsigned char *b)\n{\n    const __m128i rev = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n    __m128i       A, B, C;\n    __m128i       tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9;\n    __m128i       tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17, tmp18;\n    __m128i       tmp19, tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;\n    __m128i       tmp28, tmp29, tmp30, tmp31, tmp32, tmp33, tmp34, tmp35, tmp36;\n\n    if (xlen >= 16) {\n        A = _mm_loadu_si128((const __m128i *) a);\n    } else {\n        CRYPTO_ALIGN(16) unsigned char padded[16];\n        unsigned int i;\n\n        memset(padded, 0, 16);\n        for (i = 0; i < xlen; i++) {\n            padded[i] = a[i];\n        }\n        A = _mm_load_si128((const __m128i *) padded);\n    }\n    A = _mm_shuffle_epi8(A, rev);\n    B = _mm_loadu_si128((const __m128i *) b);\n    C = _mm_loadu_si128((const __m128i *) c);\n    A = _mm_xor_si128(A, C);\n    tmp3 = _mm_clmulepi64_si128(A, B, 0x00);\n    tmp4 = _mm_clmulepi64_si128(A, B, 0x10);\n    tmp5 = _mm_clmulepi64_si128(A, B, 0x01);\n    tmp6 = _mm_clmulepi64_si128(A, B, 0x11);\n    tmp10 = _mm_xor_si128(tmp4, tmp5);\n    tmp13 = _mm_slli_si128(tmp10, 8);\n    tmp11 = _mm_srli_si128(tmp10, 8);\n    tmp15 = _mm_xor_si128(tmp3, tmp13);\n    tmp17 = _mm_xor_si128(tmp6, tmp11);\n    tmp7 = _mm_srli_epi32(tmp15, 31);\n    tmp8 = _mm_srli_epi32(tmp17, 31);\n    tmp16 = _mm_slli_epi32(tmp15, 1);\n    tmp18 = _mm_slli_epi32(tmp17, 1);\n    tmp9 = _mm_srli_si128(tmp7, 12);\n    tmp22 = _mm_slli_si128(tmp8, 4);\n    tmp25 = _mm_slli_si128(tmp7, 4);\n    tmp29 = _mm_or_si128(tmp16, tmp25);\n    tmp19 = _mm_or_si128(tmp18, tmp22);\n    tmp20 = _mm_or_si128(tmp19, tmp9);\n    tmp26 = _mm_slli_epi32(tmp29, 31);\n    tmp23 = _mm_slli_epi32(tmp29, 30);\n    tmp32 = _mm_slli_epi32(tmp29, 25);\n    tmp27 = _mm_xor_si128(tmp26, tmp23);\n    tmp28 = _mm_xor_si128(tmp27, tmp32);\n    tmp24 = _mm_srli_si128(tmp28, 4);\n    tmp33 = _mm_slli_si128(tmp28, 12);\n    tmp30 = _mm_xor_si128(tmp29, tmp33);\n    tmp2 = _mm_srli_epi32(tmp30, 1);\n    tmp12 = _mm_srli_epi32(tmp30, 2);\n    tmp14 = _mm_srli_epi32(tmp30, 7);\n    tmp34 = _mm_xor_si128(tmp2, tmp12);\n    tmp35 = _mm_xor_si128(tmp34, tmp14);\n    tmp36 = _mm_xor_si128(tmp35, tmp24);\n    tmp31 = _mm_xor_si128(tmp30, tmp36);\n    tmp21 = _mm_xor_si128(tmp20, tmp31);\n    _mm_storeu_si128((__m128i *) c, tmp21);\n}\n\n/* pure multiplication, for pre-computing  powers of H */\nstatic inline __m128i\nmulv(__m128i A, __m128i B)\n{\n    __m128i tmp3 = _mm_clmulepi64_si128(A, B, 0x00);\n    __m128i tmp4 = _mm_clmulepi64_si128(A, B, 0x10);\n    __m128i tmp5 = _mm_clmulepi64_si128(A, B, 0x01);\n    __m128i tmp6 = _mm_clmulepi64_si128(A, B, 0x11);\n    __m128i tmp10 = _mm_xor_si128(tmp4, tmp5);\n    __m128i tmp13 = _mm_slli_si128(tmp10, 8);\n    __m128i tmp11 = _mm_srli_si128(tmp10, 8);\n    __m128i tmp15 = _mm_xor_si128(tmp3, tmp13);\n    __m128i tmp17 = _mm_xor_si128(tmp6, tmp11);\n    __m128i tmp7 = _mm_srli_epi32(tmp15, 31);\n    __m128i tmp8 = _mm_srli_epi32(tmp17, 31);\n    __m128i tmp16 = _mm_slli_epi32(tmp15, 1);\n    __m128i tmp18 = _mm_slli_epi32(tmp17, 1);\n    __m128i tmp9 = _mm_srli_si128(tmp7, 12);\n    __m128i tmp22 = _mm_slli_si128(tmp8, 4);\n    __m128i tmp25 = _mm_slli_si128(tmp7, 4);\n    __m128i tmp29 = _mm_or_si128(tmp16, tmp25);\n    __m128i tmp19 = _mm_or_si128(tmp18, tmp22);\n    __m128i tmp20 = _mm_or_si128(tmp19, tmp9);\n    __m128i tmp26 = _mm_slli_epi32(tmp29, 31);\n    __m128i tmp23 = _mm_slli_epi32(tmp29, 30);\n    __m128i tmp32 = _mm_slli_epi32(tmp29, 25);\n    __m128i tmp27 = _mm_xor_si128(tmp26, tmp23);\n    __m128i tmp28 = _mm_xor_si128(tmp27, tmp32);\n    __m128i tmp24 = _mm_srli_si128(tmp28, 4);\n    __m128i tmp33 = _mm_slli_si128(tmp28, 12);\n    __m128i tmp30 = _mm_xor_si128(tmp29, tmp33);\n    __m128i tmp2 = _mm_srli_epi32(tmp30, 1);\n    __m128i tmp12 = _mm_srli_epi32(tmp30, 2);\n    __m128i tmp14 = _mm_srli_epi32(tmp30, 7);\n    __m128i tmp34 = _mm_xor_si128(tmp2, tmp12);\n    __m128i tmp35 = _mm_xor_si128(tmp34, tmp14);\n    __m128i tmp36 = _mm_xor_si128(tmp35, tmp24);\n    __m128i tmp31 = _mm_xor_si128(tmp30, tmp36);\n    __m128i C = _mm_xor_si128(tmp20, tmp31);\n\n    return C;\n}\n\n/* 4 multiply-accumulate at once; again\n   <https://software.intel.com/sites/default/files/managed/72/cc/clmul-wp-rev-2.02-2014-04-20.pdf>\n   for the Aggregated Reduction Method & sample code.\n   Algorithm by Krzysztof Jankowski, Pierre Laurent - Intel */\n\n#define RED_DECL(a) __m128i H##a##_X##a##_lo, H##a##_X##a##_hi, tmp##a, tmp##a##B\n#define RED_SHUFFLE(a) X##a = _mm_shuffle_epi8(X##a, rev)\n#define RED_MUL_LOW(a) H##a##_X##a##_lo = _mm_clmulepi64_si128(H##a, X##a, 0x00)\n#define RED_MUL_HIGH(a) H##a##_X##a##_hi = _mm_clmulepi64_si128(H##a, X##a, 0x11)\n#define RED_MUL_MID(a)                          \\\n    tmp##a = _mm_shuffle_epi32(H##a, 0x4e);     \\\n    tmp##a##B = _mm_shuffle_epi32(X##a, 0x4e);  \\\n    tmp##a = _mm_xor_si128(tmp##a, H##a);       \\\n    tmp##a##B = _mm_xor_si128(tmp##a##B, X##a); \\\n    tmp##a = _mm_clmulepi64_si128(tmp##a, tmp##a##B, 0x00)\n\n#define REDUCE4(rev, H0_, H1_, H2_, H3_, X0_, X1_, X2_, X3_, accv) \\\ndo { \\\n    MAKE4(RED_DECL); \\\n    __m128i       lo, hi; \\\n    __m128i       tmp8, tmp9; \\\n    __m128i       H0 = H0_; \\\n    __m128i       H1 = H1_; \\\n    __m128i       H2 = H2_; \\\n    __m128i       H3 = H3_; \\\n    __m128i       X0 = X0_; \\\n    __m128i       X1 = X1_; \\\n    __m128i       X2 = X2_; \\\n    __m128i       X3 = X3_; \\\n\\\n/* byte-revert the inputs & xor the first one into the accumulator */ \\\n\\\n    MAKE4(RED_SHUFFLE); \\\n    X3 = _mm_xor_si128(X3, accv); \\\n\\\n/* 4 low H*X (x0*h0) */ \\\n\\\n    MAKE4(RED_MUL_LOW); \\\n    lo = _mm_xor_si128(H0_X0_lo, H1_X1_lo); \\\n    lo = _mm_xor_si128(lo, H2_X2_lo); \\\n    lo = _mm_xor_si128(lo, H3_X3_lo); \\\n\\\n/* 4 high H*X (x1*h1) */ \\\n\\\n    MAKE4(RED_MUL_HIGH); \\\n    hi = _mm_xor_si128(H0_X0_hi, H1_X1_hi); \\\n    hi = _mm_xor_si128(hi, H2_X2_hi); \\\n    hi = _mm_xor_si128(hi, H3_X3_hi); \\\n\\\n/* 4 middle H*X, using Karatsuba, i.e. \\\n     x1*h0+x0*h1 =(x1+x0)*(h1+h0)-x1*h1-x0*h0 \\\n     we already have all x1y1 & x0y0 (accumulated in hi & lo) \\\n     (0 is low half and 1 is high half) \\\n  */ \\\n/* permute the high and low 64 bits in H1 & X1, \\\n     so create (h0,h1) from (h1,h0) and (x0,x1) from (x1,x0), \\\n     then compute (h0+h1,h1+h0) and (x0+x1,x1+x0), \\\n     and finally multiply \\\n  */ \\\n    MAKE4(RED_MUL_MID); \\\n\\\n/* substracts x1*h1 and x0*h0 */ \\\n    tmp0 = _mm_xor_si128(tmp0, lo); \\\n    tmp0 = _mm_xor_si128(tmp0, hi); \\\n    tmp0 = _mm_xor_si128(tmp1, tmp0); \\\n    tmp0 = _mm_xor_si128(tmp2, tmp0); \\\n    tmp0 = _mm_xor_si128(tmp3, tmp0);\\\n\\\n    /* reduction */ \\\n    tmp0B = _mm_slli_si128(tmp0, 8); \\\n    tmp0 = _mm_srli_si128(tmp0, 8); \\\n    lo = _mm_xor_si128(tmp0B, lo); \\\n    hi = _mm_xor_si128(tmp0, hi); \\\n    tmp3 = lo; \\\n    tmp2B = hi; \\\n    tmp3B = _mm_srli_epi32(tmp3, 31); \\\n    tmp8 = _mm_srli_epi32(tmp2B, 31); \\\n    tmp3 = _mm_slli_epi32(tmp3, 1); \\\n    tmp2B = _mm_slli_epi32(tmp2B, 1); \\\n    tmp9 = _mm_srli_si128(tmp3B, 12); \\\n    tmp8 = _mm_slli_si128(tmp8, 4); \\\n    tmp3B = _mm_slli_si128(tmp3B, 4); \\\n    tmp3 = _mm_or_si128(tmp3, tmp3B); \\\n    tmp2B = _mm_or_si128(tmp2B, tmp8); \\\n    tmp2B = _mm_or_si128(tmp2B, tmp9); \\\n    tmp3B = _mm_slli_epi32(tmp3, 31); \\\n    tmp8 = _mm_slli_epi32(tmp3, 30); \\\n    tmp9 = _mm_slli_epi32(tmp3, 25); \\\n    tmp3B = _mm_xor_si128(tmp3B, tmp8); \\\n    tmp3B = _mm_xor_si128(tmp3B, tmp9); \\\n    tmp8 = _mm_srli_si128(tmp3B, 4); \\\n    tmp3B = _mm_slli_si128(tmp3B, 12); \\\n    tmp3 = _mm_xor_si128(tmp3, tmp3B); \\\n    tmp2 = _mm_srli_epi32(tmp3, 1); \\\n    tmp0B = _mm_srli_epi32(tmp3, 2); \\\n    tmp1B = _mm_srli_epi32(tmp3, 7); \\\n    tmp2 = _mm_xor_si128(tmp2, tmp0B); \\\n    tmp2 = _mm_xor_si128(tmp2, tmp1B); \\\n    tmp2 = _mm_xor_si128(tmp2, tmp8); \\\n    tmp3 = _mm_xor_si128(tmp3, tmp2); \\\n    tmp2B = _mm_xor_si128(tmp2B, tmp3); \\\n\\\n    accv = tmp2B; \\\n} while(0)\n\n#define XORx(a)                                                       \\\n        temp##a = _mm_xor_si128(temp##a,                              \\\n                                _mm_loadu_si128((const __m128i *) (in + a * 16)))\n\n#define LOADx(a)                                                      \\\n    __m128i in##a = _mm_loadu_si128((const __m128i *) (in + a * 16))\n\n/* full encrypt & checksum 8 blocks at once */\n#define aesni_encrypt8full(out_, n_, rkeys, in_, accum, hv_, h2v_, h3v_, h4v_, rev) \\\ndo { \\\n    unsigned char *out = out_; \\\n    uint32_t *n = n_; \\\n    const unsigned char *in = in_; \\\n    const __m128i hv = hv_; \\\n    const __m128i h2v = h2v_; \\\n    const __m128i h3v = h3v_; \\\n    const __m128i h4v = h4v_; \\\n    const __m128i pt = _mm_set_epi8(12, 13, 14, 15, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \\\n    __m128i       accv_; \\\n    int           roundctr; \\\n    \\\n    MAKE8(NVDECLx); \\\n    MAKE8(TEMPDECLx); \\\n    MAKE8(NVx); \\\n    MAKE8(TEMPx); \\\n    for (roundctr = 1; roundctr < 14; roundctr++) { \\\n        MAKE8(AESENCx); \\\n    } \\\n    MAKE8(AESENCLASTx); \\\n    MAKE8(XORx); \\\n    MAKE8(STOREx); \\\n    accv_ = _mm_load_si128((const __m128i *) accum); \\\n    REDUCE4(rev, hv, h2v, h3v, h4v, temp3, temp2, temp1, temp0, accv_); \\\n    REDUCE4(rev, hv, h2v, h3v, h4v, temp7, temp6, temp5, temp4, accv_); \\\n    _mm_store_si128((__m128i *) accum, accv_); \\\n} while(0)\n\n/* checksum 8 blocks at once */\n#define aesni_addmul8full(in_, accum, hv_, h2v_, h3v_, h4v_, rev) \\\ndo { \\\n    const unsigned char *in = in_; \\\n    const __m128i hv = hv_; \\\n    const __m128i h2v = h2v_; \\\n    const __m128i h3v = h3v_; \\\n    const __m128i h4v = h4v_; \\\n    __m128i accv_; \\\n    \\\n    MAKE8(LOADx); \\\n    accv_ = _mm_load_si128((const __m128i *) accum); \\\n    REDUCE4(rev, hv, h2v, h3v, h4v, in3, in2, in1, in0, accv_); \\\n    REDUCE4(rev, hv, h2v, h3v, h4v, in7, in6, in5, in4, accv_); \\\n    _mm_store_si128((__m128i *) accum, accv_); \\\n} while(0)\n\n/* decrypt 8 blocks at once */\n#define aesni_decrypt8full(out_, n_, rkeys, in_) \\\ndo { \\\n    unsigned char       *out = out_; \\\n    uint32_t            *n = n_; \\\n    const unsigned char *in = in_; \\\n    const __m128i        pt = _mm_set_epi8(12, 13, 14, 15, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); \\\n    int                  roundctr; \\\n\\\n    MAKE8(NVDECLx); \\\n    MAKE8(TEMPDECLx); \\\n    MAKE8(NVx); \\\n    MAKE8(TEMPx); \\\n    for (roundctr = 1; roundctr < 14; roundctr++) { \\\n        MAKE8(AESENCx); \\\n    } \\\n    MAKE8(AESENCLASTx); \\\n    MAKE8(XORx); \\\n    MAKE8(STOREx); \\\n} while(0)\n\nint\ncrypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_,\n                               const unsigned char *k)\n{\n    context       *ctx = (context *) ctx_;\n    __m128i       *rkeys = ctx->rkeys;\n    __m128i        zero = _mm_setzero_si128();\n    unsigned char *H = ctx->H;\n\n    (void) sizeof(int[(sizeof *ctx_) >= (sizeof *ctx) ? 1 : -1]);\n    aesni_key256_expand(k, (__m128 *) rkeys);\n    aesni_encrypt1(H, zero, rkeys);\n\n    return 0;\n}\n\nint\ncrypto_aead_aes256gcm_encrypt_afternm(unsigned char *c, unsigned long long *clen,\n                                      const unsigned char *m, unsigned long long mlen,\n                                      const unsigned char *ad, unsigned long long adlen,\n                                      const unsigned char *nsec,\n                                      const unsigned char *npub,\n                                      const crypto_aead_aes256gcm_state *ctx_)\n{\n    const __m128i       rev = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n    const context      *ctx = (const context *) ctx_;\n    const __m128i      *rkeys = ctx->rkeys;\n    __m128i             Hv, H2v, H3v, H4v, accv;\n    unsigned long long  i, j;\n    unsigned long long  adlen_rnd64 = adlen & ~63ULL;\n    unsigned long long  mlen_rnd128 = mlen & ~127ULL;\n    CRYPTO_ALIGN(16) uint32_t      n2[4];\n    CRYPTO_ALIGN(16) unsigned char H[16];\n    CRYPTO_ALIGN(16) unsigned char T[16];\n    CRYPTO_ALIGN(16) unsigned char accum[16];\n    CRYPTO_ALIGN(16) unsigned char fb[16];\n\n    (void) nsec;\n    memcpy(H, ctx->H, sizeof H);\n    if (mlen > 16ULL * (1ULL << 32)) {\n        abort();\n    }\n    memcpy(&n2[0], npub, 3 * 4);\n    n2[3] = 0x01000000;\n    aesni_encrypt1(T, _mm_load_si128((const __m128i *) n2), rkeys);\n    {\n        uint64_t x;\n        x = _bswap64((uint64_t) (8 * adlen));\n        memcpy(&fb[0], &x, sizeof x);\n        x = _bswap64((uint64_t) (8 * mlen));\n        memcpy(&fb[8], &x, sizeof x);\n    }\n    /* we store H (and it's power) byte-reverted once and for all */\n    Hv = _mm_shuffle_epi8(_mm_load_si128((const __m128i *) H), rev);\n    _mm_store_si128((__m128i *) H, Hv);\n    H2v = mulv(Hv, Hv);\n    H3v = mulv(H2v, Hv);\n    H4v = mulv(H3v, Hv);\n\n    accv = _mm_setzero_si128();\n    /* unrolled by 4 GCM (by 8 doesn't improve using REDUCE4) */\n    for (i = 0; i < adlen_rnd64; i += 64) {\n        __m128i X4_ = _mm_loadu_si128((const __m128i *) (ad + i + 0));\n        __m128i X3_ = _mm_loadu_si128((const __m128i *) (ad + i + 16));\n        __m128i X2_ = _mm_loadu_si128((const __m128i *) (ad + i + 32));\n        __m128i X1_ = _mm_loadu_si128((const __m128i *) (ad + i + 48));\n        REDUCE4(rev, Hv, H2v, H3v, H4v, X1_, X2_, X3_, X4_, accv);\n    }\n    _mm_store_si128((__m128i *) accum, accv);\n\n    /* GCM remainder loop */\n    for (i = adlen_rnd64; i < adlen; i += 16) {\n        unsigned int blocklen = 16;\n\n        if (i + (unsigned long long) blocklen > adlen) {\n            blocklen = (unsigned int) (adlen - i);\n        }\n        addmul(accum, ad + i, blocklen, H);\n    }\n\n/* this only does 8 full blocks, so no fancy bounds checking is necessary*/\n#define LOOPRND128                                                                                   \\\n    do {                                                                                             \\\n        const int iter = 8;                                                                          \\\n        const int lb = iter * 16;                                                                    \\\n                                                                                                     \\\n        for (i = 0; i < mlen_rnd128; i += lb) {                                                      \\\n            aesni_encrypt8full(c + i, n2, rkeys, m + i, accum, Hv, H2v, H3v, H4v, rev);              \\\n        }                                                                                            \\\n    } while(0)\n\n/* remainder loop, with the slower GCM update to accomodate partial blocks */\n#define LOOPRMD128                                           \\\n    do {                                                     \\\n        const int iter = 8;                                  \\\n        const int lb = iter * 16;                            \\\n                                                             \\\n        for (i = mlen_rnd128; i < mlen; i += lb) {           \\\n            CRYPTO_ALIGN(16) unsigned char outni[8 * 16];    \\\n            unsigned long long mj = lb;                      \\\n                                                             \\\n            aesni_encrypt8(outni, n2, rkeys);                \\\n            if ((i + mj) >= mlen) {                          \\\n                mj = mlen - i;                               \\\n            }                                                \\\n            for (j = 0; j < mj; j++) {                       \\\n                c[i + j] = m[i + j] ^ outni[j];              \\\n            }                                                \\\n            for (j = 0; j < mj; j += 16) {                   \\\n                unsigned int bl = 16;                        \\\n                                                             \\\n                if (j + (unsigned long long) bl >= mj) {     \\\n                    bl = (unsigned int) (mj - j);            \\\n                }                                            \\\n                addmul(accum, c + i + j, bl, H);             \\\n            }                                                \\\n        }                                                    \\\n    } while(0)\n\n    n2[3] &= 0x00ffffff;\n    COUNTER_INC2(n2);\n    LOOPRND128;\n    LOOPRMD128;\n\n    addmul(accum, fb, 16, H);\n\n    for (i = 0; i < 16; ++i) {\n        c[i + mlen] = T[i] ^ accum[15 - i];\n    }\n    if (clen != NULL) {\n        *clen = mlen + 16;\n    }\n    return 0;\n}\n\nint\ncrypto_aead_aes256gcm_decrypt_afternm(unsigned char *m, unsigned long long *mlen_p,\n                                      unsigned char *nsec,\n                                      const unsigned char *c, unsigned long long clen,\n                                      const unsigned char *ad, unsigned long long adlen,\n                                      const unsigned char *npub,\n                                      const crypto_aead_aes256gcm_state *ctx_)\n{\n    const __m128i       rev = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n    const context      *ctx = (const context *) ctx_;\n    const __m128i      *rkeys = ctx->rkeys;\n    __m128i             Hv, H2v, H3v, H4v, accv;\n    unsigned long long  i, j;\n    unsigned long long  adlen_rnd64 = adlen & ~63ULL;\n    unsigned long long  mlen;\n    unsigned long long  mlen_rnd128;\n    CRYPTO_ALIGN(16) uint32_t      n2[4];\n    CRYPTO_ALIGN(16) unsigned char H[16];\n    CRYPTO_ALIGN(16) unsigned char T[16];\n    CRYPTO_ALIGN(16) unsigned char accum[16];\n    CRYPTO_ALIGN(16) unsigned char fb[16];\n\n    (void) nsec;\n    if (clen > 16ULL * (1ULL << 32) - 16ULL) {\n        abort();\n    }\n    if (mlen_p != NULL) {\n        *mlen_p = 0U;\n    }\n    if (clen < 16) {\n        return -1;\n    }\n    mlen = clen - 16;\n\n    memcpy(&n2[0], npub, 3 * 4);\n    n2[3] = 0x01000000;\n    aesni_encrypt1(T, _mm_load_si128((const __m128i *) n2), rkeys);\n    {\n        uint64_t x;\n        x = _bswap64((uint64_t)(8 * adlen));\n        memcpy(&fb[0], &x, sizeof x);\n        x = _bswap64((uint64_t)(8 * mlen));\n        memcpy(&fb[8], &x, sizeof x);\n    }\n    memcpy(H, ctx->H, sizeof H);\n    Hv = _mm_shuffle_epi8(_mm_load_si128((const __m128i *) H), rev);\n    _mm_store_si128((__m128i *) H, Hv);\n    H2v = mulv(Hv, Hv);\n    H3v = mulv(H2v, Hv);\n    H4v = mulv(H3v, Hv);\n\n    accv = _mm_setzero_si128();\n    for (i = 0; i < adlen_rnd64; i += 64) {\n        __m128i X4_ = _mm_loadu_si128((const __m128i *) (ad + i + 0));\n        __m128i X3_ = _mm_loadu_si128((const __m128i *) (ad + i + 16));\n        __m128i X2_ = _mm_loadu_si128((const __m128i *) (ad + i + 32));\n        __m128i X1_ = _mm_loadu_si128((const __m128i *) (ad + i + 48));\n        REDUCE4(rev, Hv, H2v, H3v, H4v, X1_, X2_, X3_, X4_, accv);\n    }\n    _mm_store_si128((__m128i *) accum, accv);\n\n    for (i = adlen_rnd64; i < adlen; i += 16) {\n        unsigned int blocklen = 16;\n        if (i + (unsigned long long) blocklen > adlen) {\n            blocklen = (unsigned int) (adlen - i);\n        }\n        addmul(accum, ad + i, blocklen, H);\n    }\n\n    mlen_rnd128 = mlen & ~127ULL;\n\n#define LOOPACCUMDRND128                                                                          \\\n    do {                                                                                          \\\n        const int iter = 8;                                                                       \\\n        const int lb = iter * 16;                                                                 \\\n        for (i = 0; i < mlen_rnd128; i += lb) {                                                   \\\n            aesni_addmul8full(c + i, accum, Hv, H2v, H3v, H4v, rev);                              \\\n        }                                                                                         \\\n    } while(0)\n\n#define LOOPDRND128                                                                               \\\n    do {                                                                                          \\\n        const int iter = 8;                                                                       \\\n        const int lb = iter * 16;                                                                 \\\n                                                                                                  \\\n        for (i = 0; i < mlen_rnd128; i += lb) {                                                   \\\n            aesni_decrypt8full(m + i, n2, rkeys, c + i);                                          \\\n        }                                                                                         \\\n    } while(0)\n\n#define LOOPACCUMDRMD128                                     \\\n    do {                                                     \\\n        const int iter = 8;                                  \\\n        const int lb = iter * 16;                            \\\n                                                             \\\n        for (i = mlen_rnd128; i < mlen; i += lb) {           \\\n            unsigned long long mj = lb;                      \\\n                                                             \\\n            if ((i + mj) >= mlen) {                          \\\n                mj = mlen - i;                               \\\n            }                                                \\\n            for (j = 0; j < mj; j += 16) {                   \\\n                unsigned int bl = 16;                        \\\n                                                             \\\n                if (j + (unsigned long long) bl >= mj) {     \\\n                    bl = (unsigned int) (mj - j);            \\\n                }                                            \\\n                addmul(accum, c + i + j, bl, H);             \\\n            }                                                \\\n        }                                                    \\\n    } while(0)\n\n#define LOOPDRMD128                                          \\\n    do {                                                     \\\n        const int iter = 8;                                  \\\n        const int lb = iter * 16;                            \\\n                                                             \\\n        for (i = mlen_rnd128; i < mlen; i += lb) {           \\\n            CRYPTO_ALIGN(16) unsigned char outni[8 * 16];    \\\n            unsigned long long mj = lb;                      \\\n                                                             \\\n            if ((i + mj) >= mlen) {                          \\\n                mj = mlen - i;                               \\\n            }                                                \\\n            aesni_encrypt8(outni, n2, rkeys);                \\\n            for (j = 0; j < mj; j++) {                       \\\n                m[i + j] = c[i + j] ^ outni[j];              \\\n            }                                                \\\n        }                                                    \\\n    } while(0)\n    n2[3] &= 0x00ffffff;\n\n    COUNTER_INC2(n2);\n    LOOPACCUMDRND128;\n    LOOPACCUMDRMD128;\n    addmul(accum, fb, 16, H);\n    {\n        unsigned char d = 0;\n\n        for (i = 0; i < 16; i++) {\n            d |= (c[i + mlen] ^ (T[i] ^ accum[15 - i]));\n        }\n        if (d != 0) {\n            return -1;\n        }\n    }\n    n2[3] = 0U;\n    COUNTER_INC2(n2);\n    LOOPDRND128;\n    LOOPDRMD128;\n\n    if (mlen_p != NULL) {\n        *mlen_p = mlen;\n    }\n    return 0;\n}\n\nint\ncrypto_aead_aes256gcm_encrypt(unsigned char *c,\n                              unsigned long long *clen_p,\n                              const unsigned char *m,\n                              unsigned long long mlen,\n                              const unsigned char *ad,\n                              unsigned long long adlen,\n                              const unsigned char *nsec,\n                              const unsigned char *npub,\n                              const unsigned char *k)\n{\n    crypto_aead_aes256gcm_state ctx;\n\n    crypto_aead_aes256gcm_beforenm(&ctx, k);\n\n    return crypto_aead_aes256gcm_encrypt_afternm\n        (c, clen_p, m, mlen, ad, adlen, nsec, npub,\n            (const crypto_aead_aes256gcm_state *) &ctx);\n}\n\nint\ncrypto_aead_aes256gcm_decrypt(unsigned char *m,\n                              unsigned long long *mlen_p,\n                              unsigned char *nsec,\n                              const unsigned char *c,\n                              unsigned long long clen,\n                              const unsigned char *ad,\n                              unsigned long long adlen,\n                              const unsigned char *npub,\n                              const unsigned char *k)\n{\n    crypto_aead_aes256gcm_state ctx;\n\n    crypto_aead_aes256gcm_beforenm(&ctx, k);\n\n    return crypto_aead_aes256gcm_decrypt_afternm\n        (m, mlen_p, nsec, c, clen, ad, adlen, npub,\n            (const crypto_aead_aes256gcm_state *) &ctx);\n}\n\nint\ncrypto_aead_aes256gcm_is_available(void)\n{\n    return sodium_runtime_has_pclmul() & sodium_runtime_has_aesni();\n}\n\nsize_t\ncrypto_aead_aes256gcm_keybytes(void)\n{\n    return crypto_aead_aes256gcm_KEYBYTES;\n}\n\nsize_t\ncrypto_aead_aes256gcm_nsecbytes(void)\n{\n    return crypto_aead_aes256gcm_NSECBYTES;\n}\n\nsize_t\ncrypto_aead_aes256gcm_npubbytes(void)\n{\n    return crypto_aead_aes256gcm_NPUBBYTES;\n}\n\nsize_t\ncrypto_aead_aes256gcm_abytes(void)\n{\n    return crypto_aead_aes256gcm_ABYTES;\n}\n\nsize_t\ncrypto_aead_aes256gcm_statebytes(void)\n{\n    return (sizeof(crypto_aead_aes256gcm_state) + (size_t) 15U) & ~(size_t) 15U;\n}\n\n#else\n\nint\ncrypto_aead_aes256gcm_is_available(void)\n{\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c",
    "content": "\n#include <stdlib.h>\n#include <limits.h>\n#include <string.h>\n\n#include \"crypto_aead_chacha20poly1305.h\"\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"crypto_stream_chacha20.h\"\n#include \"crypto_verify_16.h\"\n#include \"utils.h\"\n\nstatic unsigned char _pad0[16];\n\nstatic inline void\n_u64_le_from_ull(unsigned char out[8U], unsigned long long x)\n{\n    out[0] = (unsigned char) (x & 0xff); x >>= 8;\n    out[1] = (unsigned char) (x & 0xff); x >>= 8;\n    out[2] = (unsigned char) (x & 0xff); x >>= 8;\n    out[3] = (unsigned char) (x & 0xff); x >>= 8;\n    out[4] = (unsigned char) (x & 0xff); x >>= 8;\n    out[5] = (unsigned char) (x & 0xff); x >>= 8;\n    out[6] = (unsigned char) (x & 0xff); x >>= 8;\n    out[7] = (unsigned char) (x & 0xff);\n}\n\nint\ncrypto_aead_chacha20poly1305_encrypt(unsigned char *c,\n                                     unsigned long long *clen_p,\n                                     const unsigned char *m,\n                                     unsigned long long mlen,\n                                     const unsigned char *ad,\n                                     unsigned long long adlen,\n                                     const unsigned char *nsec,\n                                     const unsigned char *npub,\n                                     const unsigned char *k)\n{\n    crypto_onetimeauth_poly1305_state state;\n    unsigned char                     block0[64U];\n    unsigned char                     slen[8U];\n\n    (void) nsec;\n/* LCOV_EXCL_START */\n#ifdef ULONG_LONG_MAX\n    if (mlen > ULONG_LONG_MAX - crypto_aead_chacha20poly1305_ABYTES) {\n        if (clen_p != NULL) {\n            *clen_p = 0ULL;\n        }\n        return -1;\n    }\n#endif\n/* LCOV_EXCL_STOP */\n\n    crypto_stream_chacha20(block0, sizeof block0, npub, k);\n    crypto_onetimeauth_poly1305_init(&state, block0);\n    sodium_memzero(block0, sizeof block0);\n\n    crypto_onetimeauth_poly1305_update(&state, ad, adlen);\n    _u64_le_from_ull(slen, adlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    crypto_stream_chacha20_xor_ic(c, m, mlen, npub, 1U, k);\n\n    crypto_onetimeauth_poly1305_update(&state, c, mlen);\n    _u64_le_from_ull(slen, mlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    crypto_onetimeauth_poly1305_final(&state, c + mlen);\n    sodium_memzero(&state, sizeof state);\n\n    if (clen_p != NULL) {\n        *clen_p = mlen + crypto_aead_chacha20poly1305_ABYTES;\n    }\n    return 0;\n}\n\nint\ncrypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,\n                                          unsigned long long *clen_p,\n                                          const unsigned char *m,\n                                          unsigned long long mlen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *nsec,\n                                          const unsigned char *npub,\n                                          const unsigned char *k)\n{\n    crypto_onetimeauth_poly1305_state state;\n    unsigned char                     block0[64U];\n    unsigned char                     slen[8U];\n\n    (void) nsec;\n/* LCOV_EXCL_START */\n#ifdef ULONG_LONG_MAX\n    if (mlen > ULONG_LONG_MAX - crypto_aead_chacha20poly1305_ABYTES) {\n        if (clen_p != NULL) {\n            *clen_p = 0ULL;\n        }\n        return -1;\n    }\n#endif\n/* LCOV_EXCL_STOP */\n\n    crypto_stream_chacha20_ietf(block0, sizeof block0, npub, k);\n    crypto_onetimeauth_poly1305_init(&state, block0);\n    sodium_memzero(block0, sizeof block0);\n\n    crypto_onetimeauth_poly1305_update(&state, ad, adlen);\n    crypto_onetimeauth_poly1305_update(&state, _pad0, (0x10 - adlen) & 0xf);\n\n    crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, npub, 1U, k);\n\n    crypto_onetimeauth_poly1305_update(&state, c, mlen);\n    crypto_onetimeauth_poly1305_update(&state, _pad0, (0x10 - mlen) & 0xf);\n\n    _u64_le_from_ull(slen, adlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    _u64_le_from_ull(slen, mlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    crypto_onetimeauth_poly1305_final(&state, c + mlen);\n    sodium_memzero(&state, sizeof state);\n\n    if (clen_p != NULL) {\n        *clen_p = mlen + crypto_aead_chacha20poly1305_ABYTES;\n    }\n    return 0;\n}\n\nint\ncrypto_aead_chacha20poly1305_decrypt(unsigned char *m,\n                                     unsigned long long *mlen_p,\n                                     unsigned char *nsec,\n                                     const unsigned char *c,\n                                     unsigned long long clen,\n                                     const unsigned char *ad,\n                                     unsigned long long adlen,\n                                     const unsigned char *npub,\n                                     const unsigned char *k)\n{\n    crypto_onetimeauth_poly1305_state state;\n    unsigned char                     block0[64U];\n    unsigned char                     slen[8U];\n    unsigned char                     mac[crypto_aead_chacha20poly1305_ABYTES];\n    unsigned long long                mlen;\n    int                               ret;\n\n    (void) nsec;\n    if (mlen_p != NULL) {\n        *mlen_p = 0ULL;\n    }\n    if (clen < crypto_aead_chacha20poly1305_ABYTES) {\n        return -1;\n    }\n    crypto_stream_chacha20(block0, sizeof block0, npub, k);\n    crypto_onetimeauth_poly1305_init(&state, block0);\n    sodium_memzero(block0, sizeof block0);\n\n    crypto_onetimeauth_poly1305_update(&state, ad, adlen);\n    _u64_le_from_ull(slen, adlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    mlen = clen - crypto_aead_chacha20poly1305_ABYTES;\n    crypto_onetimeauth_poly1305_update(&state, c, mlen);\n    _u64_le_from_ull(slen, mlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    crypto_onetimeauth_poly1305_final(&state, mac);\n    sodium_memzero(&state, sizeof state);\n\n    (void) sizeof(int[sizeof mac == 16U ? 1 : -1]);\n    ret = crypto_verify_16(mac, c + mlen);\n    sodium_memzero(mac, sizeof mac);\n    if (ret != 0) {\n        memset(m, 0, mlen);\n        return -1;\n    }\n    crypto_stream_chacha20_xor_ic\n        (m, c, mlen, npub, 1U, k);\n    if (mlen_p != NULL) {\n        *mlen_p = mlen;\n    }\n    return 0;\n}\n\nint\ncrypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,\n                                          unsigned long long *mlen_p,\n                                          unsigned char *nsec,\n                                          const unsigned char *c,\n                                          unsigned long long clen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *npub,\n                                          const unsigned char *k)\n{\n    crypto_onetimeauth_poly1305_state state;\n    unsigned char                     block0[64U];\n    unsigned char                     slen[8U];\n    unsigned char                     mac[crypto_aead_chacha20poly1305_ABYTES];\n    unsigned long long                mlen;\n    int                               ret;\n\n    (void) nsec;\n    if (mlen_p != NULL) {\n        *mlen_p = 0ULL;\n    }\n    if (clen < crypto_aead_chacha20poly1305_ABYTES) {\n        return -1;\n    }\n    crypto_stream_chacha20_ietf(block0, sizeof block0, npub, k);\n    crypto_onetimeauth_poly1305_init(&state, block0);\n    sodium_memzero(block0, sizeof block0);\n\n    crypto_onetimeauth_poly1305_update(&state, ad, adlen);\n    crypto_onetimeauth_poly1305_update(&state, _pad0, (0x10 - adlen) & 0xf);\n\n    mlen = clen - crypto_aead_chacha20poly1305_ABYTES;\n    crypto_onetimeauth_poly1305_update(&state, c, mlen);\n    crypto_onetimeauth_poly1305_update(&state, _pad0, (0x10 - mlen) & 0xf);\n\n    _u64_le_from_ull(slen, adlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    _u64_le_from_ull(slen, mlen);\n    crypto_onetimeauth_poly1305_update(&state, slen, sizeof slen);\n\n    crypto_onetimeauth_poly1305_final(&state, mac);\n    sodium_memzero(&state, sizeof state);\n\n    (void) sizeof(int[sizeof mac == 16U ? 1 : -1]);\n    ret = crypto_verify_16(mac, c + mlen);\n    sodium_memzero(mac, sizeof mac);\n    if (ret != 0) {\n        memset(m, 0, mlen);\n        return -1;\n    }\n    crypto_stream_chacha20_ietf_xor_ic(m, c, mlen, npub, 1U, k);\n    if (mlen_p != NULL) {\n        *mlen_p = mlen;\n    }\n    return 0;\n}\n\nsize_t\ncrypto_aead_chacha20poly1305_keybytes(void) {\n    return crypto_aead_chacha20poly1305_KEYBYTES;\n}\n\nsize_t\ncrypto_aead_chacha20poly1305_npubbytes(void) {\n    return crypto_aead_chacha20poly1305_NPUBBYTES;\n}\n\nsize_t\ncrypto_aead_chacha20poly1305_ietf_npubbytes(void) {\n    return crypto_aead_chacha20poly1305_IETF_NPUBBYTES;\n}\n\nsize_t\ncrypto_aead_chacha20poly1305_nsecbytes(void) {\n    return crypto_aead_chacha20poly1305_NSECBYTES;\n}\n\nsize_t\ncrypto_aead_chacha20poly1305_abytes(void) {\n    return crypto_aead_chacha20poly1305_ABYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/crypto_auth.c",
    "content": "\n#include \"crypto_auth.h\"\n\nsize_t\ncrypto_auth_bytes(void)\n{\n    return crypto_auth_BYTES;\n}\n\nsize_t\ncrypto_auth_keybytes(void)\n{\n    return crypto_auth_KEYBYTES;\n}\n\nconst char *\ncrypto_auth_primitive(void)\n{\n    return crypto_auth_PRIMITIVE;\n}\n\nint\ncrypto_auth(unsigned char *out, const unsigned char *in,\n            unsigned long long inlen, const unsigned char *k)\n{\n    return crypto_auth_hmacsha512256(out, in, inlen, k);\n}\n\nint\ncrypto_auth_verify(const unsigned char *h, const unsigned char *in,\n                   unsigned long long inlen,const unsigned char *k)\n{\n    return crypto_auth_hmacsha512256_verify(h, in, inlen, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256_api.c",
    "content": "#include \"crypto_auth_hmacsha256.h\"\n\nsize_t\ncrypto_auth_hmacsha256_bytes(void) {\n    return crypto_auth_hmacsha256_BYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha256_keybytes(void) {\n    return crypto_auth_hmacsha256_KEYBYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha256_statebytes(void) {\n    return sizeof(crypto_auth_hmacsha256_state);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha256/cp/hmac_hmacsha256.c",
    "content": "\n/*-\n * Copyright 2005,2007,2009 Colin Percival\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#include \"crypto_auth_hmacsha256.h\"\n#include \"crypto_hash_sha256.h\"\n#include \"utils.h\"\n\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <string.h>\n\nint\ncrypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state,\n                            const unsigned char *key,\n                            size_t keylen)\n{\n    unsigned char pad[64];\n    unsigned char khash[32];\n    size_t        i;\n\n    if (keylen > 64) {\n        crypto_hash_sha256_init(&state->ictx);\n        crypto_hash_sha256_update(&state->ictx, key, keylen);\n        crypto_hash_sha256_final(&state->ictx, khash);\n        key = khash;\n        keylen = 32;\n    }\n    crypto_hash_sha256_init(&state->ictx);\n    memset(pad, 0x36, 64);\n    for (i = 0; i < keylen; i++) {\n        pad[i] ^= key[i];\n    }\n    crypto_hash_sha256_update(&state->ictx, pad, 64);\n\n    crypto_hash_sha256_init(&state->octx);\n    memset(pad, 0x5c, 64);\n    for (i = 0; i < keylen; i++) {\n        pad[i] ^= key[i];\n    }\n    crypto_hash_sha256_update(&state->octx, pad, 64);\n\n    sodium_memzero((void *) pad, sizeof pad);\n    sodium_memzero((void *) khash, sizeof khash);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen)\n{\n    crypto_hash_sha256_update(&state->ictx, in, inlen);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state,\n                             unsigned char *out)\n{\n    unsigned char ihash[32];\n\n    crypto_hash_sha256_final(&state->ictx, ihash);\n    crypto_hash_sha256_update(&state->octx, ihash, 32);\n    crypto_hash_sha256_final(&state->octx, out);\n\n    sodium_memzero((void *) ihash, sizeof ihash);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha256(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k)\n{\n    crypto_auth_hmacsha256_state state;\n\n    crypto_auth_hmacsha256_init(&state, k, crypto_auth_hmacsha256_KEYBYTES);\n    crypto_auth_hmacsha256_update(&state, in, inlen);\n    crypto_auth_hmacsha256_final(&state, out);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha256/cp/verify_hmacsha256.c",
    "content": "#include \"crypto_auth_hmacsha256.h\"\n#include \"crypto_verify_32.h\"\n#include \"utils.h\"\n\nint crypto_auth_hmacsha256_verify(const unsigned char *h,const unsigned char *in,unsigned long long inlen,const unsigned char *k)\n{\n  unsigned char correct[32];\n  crypto_auth_hmacsha256(correct,in,inlen,k);\n  return crypto_verify_32(h,correct) | (-(h == correct)) |\n         sodium_memcmp(correct,h,32);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512_api.c",
    "content": "#include \"crypto_auth_hmacsha512.h\"\n\nsize_t\ncrypto_auth_hmacsha512_bytes(void) {\n    return crypto_auth_hmacsha512_BYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha512_keybytes(void) {\n    return crypto_auth_hmacsha512_KEYBYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha512_statebytes(void) {\n    return sizeof(crypto_auth_hmacsha512_state);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512/cp/hmac_hmacsha512.c",
    "content": "\n/*-\n * Copyright 2005,2007,2009 Colin Percival\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#include \"crypto_auth_hmacsha512.h\"\n#include \"crypto_hash_sha512.h\"\n#include \"utils.h\"\n\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <string.h>\n\nint\ncrypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state,\n                            const unsigned char *key,\n                            size_t keylen)\n{\n    unsigned char pad[128];\n    unsigned char khash[64];\n    size_t        i;\n\n    if (keylen > 128) {\n        crypto_hash_sha512_init(&state->ictx);\n        crypto_hash_sha512_update(&state->ictx, key, keylen);\n        crypto_hash_sha512_final(&state->ictx, khash);\n        key = khash;\n        keylen = 64;\n    }\n    crypto_hash_sha512_init(&state->ictx);\n    memset(pad, 0x36, 128);\n    for (i = 0; i < keylen; i++) {\n        pad[i] ^= key[i];\n    }\n    crypto_hash_sha512_update(&state->ictx, pad, 128);\n\n    crypto_hash_sha512_init(&state->octx);\n    memset(pad, 0x5c, 128);\n    for (i = 0; i < keylen; i++) {\n        pad[i] ^= key[i];\n    }\n    crypto_hash_sha512_update(&state->octx, pad, 128);\n\n    sodium_memzero((void *) pad, sizeof pad);\n    sodium_memzero((void *) khash, sizeof khash);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen)\n{\n    crypto_hash_sha512_update(&state->ictx, in, inlen);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state,\n                             unsigned char *out)\n{\n    unsigned char ihash[64];\n\n    crypto_hash_sha512_final(&state->ictx, ihash);\n    crypto_hash_sha512_update(&state->octx, ihash, 64);\n    crypto_hash_sha512_final(&state->octx, out);\n\n    sodium_memzero((void *) ihash, sizeof ihash);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha512(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k)\n{\n    crypto_auth_hmacsha512_state state;\n\n    crypto_auth_hmacsha512_init(&state, k, crypto_auth_hmacsha512_KEYBYTES);\n    crypto_auth_hmacsha512_update(&state, in, inlen);\n    crypto_auth_hmacsha512_final(&state, out);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512/cp/verify_hmacsha512.c",
    "content": "#include \"crypto_auth_hmacsha512.h\"\n#include \"crypto_verify_64.h\"\n#include \"utils.h\"\n\nint crypto_auth_hmacsha512_verify(const unsigned char *h, const unsigned char *in,\n                                  unsigned long long inlen, const unsigned char *k)\n{\n  unsigned char correct[64];\n  crypto_auth_hmacsha512(correct,in,inlen,k);\n  return crypto_verify_64(h,correct) | (-(h == correct)) |\n         sodium_memcmp(correct,h,64);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256_api.c",
    "content": "#include \"crypto_auth_hmacsha512256.h\"\n\nsize_t\ncrypto_auth_hmacsha512256_bytes(void) {\n    return crypto_auth_hmacsha512256_BYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha512256_keybytes(void) {\n    return crypto_auth_hmacsha512256_KEYBYTES;\n}\n\nsize_t\ncrypto_auth_hmacsha512256_statebytes(void) {\n    return sizeof(crypto_auth_hmacsha512256_state);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512256/cp/hmac_hmacsha512256.c",
    "content": "\n#include \"crypto_auth_hmacsha512256.h\"\n#include \"crypto_auth_hmacsha512.h\"\n#include \"crypto_hash_sha512.h\"\n#include \"utils.h\"\n\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <string.h>\n\nint\ncrypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state,\n                               const unsigned char *key,\n                               size_t keylen)\n{\n    return crypto_auth_hmacsha512_init((crypto_auth_hmacsha512_state *) state,\n                                       key, keylen);\n}\n\nint\ncrypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state,\n                                 const unsigned char *in,\n                                 unsigned long long inlen)\n{\n    return crypto_auth_hmacsha512_update((crypto_auth_hmacsha512_state *) state,\n                                         in, inlen);\n}\n\nint\ncrypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state,\n                                unsigned char *out)\n{\n    unsigned char out0[64];\n\n    crypto_auth_hmacsha512_final((crypto_auth_hmacsha512_state *) state, out0);\n    memcpy(out, out0, 32);\n\n    return 0;\n}\n\nint\ncrypto_auth_hmacsha512256(unsigned char *out, const unsigned char *in,\n                          unsigned long long inlen, const unsigned char *k)\n{\n    crypto_auth_hmacsha512256_state state;\n\n    crypto_auth_hmacsha512256_init(&state, k,\n                                   crypto_auth_hmacsha512256_KEYBYTES);\n    crypto_auth_hmacsha512256_update(&state, in, inlen);\n    crypto_auth_hmacsha512256_final(&state, out);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_auth/hmacsha512256/cp/verify_hmacsha512256.c",
    "content": "#include \"crypto_auth_hmacsha512256.h\"\n#include \"crypto_verify_32.h\"\n#include \"utils.h\"\n\nint crypto_auth_hmacsha512256_verify(const unsigned char *h,\n                                     const unsigned char *in,\n                                     unsigned long long inlen,\n                                     const unsigned char *k)\n{\n  unsigned char correct[32];\n  crypto_auth_hmacsha512256(correct,in,inlen,k);\n  return crypto_verify_32(h,correct) | (-(h == correct)) |\n         sodium_memcmp(correct,h,32);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/crypto_box.c",
    "content": "\n#include \"crypto_box.h\"\n\nsize_t\ncrypto_box_seedbytes(void)\n{\n    return crypto_box_SEEDBYTES;\n}\n\nsize_t\ncrypto_box_publickeybytes(void)\n{\n    return crypto_box_PUBLICKEYBYTES;\n}\n\nsize_t\ncrypto_box_secretkeybytes(void)\n{\n    return crypto_box_SECRETKEYBYTES;\n}\n\nsize_t\ncrypto_box_beforenmbytes(void)\n{\n    return crypto_box_BEFORENMBYTES;\n}\n\nsize_t\ncrypto_box_noncebytes(void)\n{\n    return crypto_box_NONCEBYTES;\n}\n\nsize_t\ncrypto_box_zerobytes(void)\n{\n    return crypto_box_ZEROBYTES;\n}\n\nsize_t\ncrypto_box_boxzerobytes(void)\n{\n    return crypto_box_BOXZEROBYTES;\n}\n\nsize_t\ncrypto_box_macbytes(void)\n{\n    return crypto_box_MACBYTES;\n}\n\nconst char *\ncrypto_box_primitive(void)\n{\n    return crypto_box_PRIMITIVE;\n}\n\nint\ncrypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,\n                        const unsigned char *seed)\n{\n    return crypto_box_curve25519xsalsa20poly1305_seed_keypair(pk, sk, seed);\n}\n\nint\ncrypto_box_keypair(unsigned char *pk, unsigned char *sk)\n{\n    return crypto_box_curve25519xsalsa20poly1305_keypair(pk, sk);\n}\n\nint\ncrypto_box_beforenm(unsigned char *k, const unsigned char *pk,\n                    const unsigned char *sk)\n{\n    return crypto_box_curve25519xsalsa20poly1305_beforenm(k, pk, sk);\n}\n\nint\ncrypto_box_afternm(unsigned char *c, const unsigned char *m,\n                   unsigned long long mlen, const unsigned char *n,\n                   const unsigned char *k)\n{\n    return crypto_box_curve25519xsalsa20poly1305_afternm(c, m, mlen, n, k);\n}\n\nint\ncrypto_box_open_afternm(unsigned char *m, const unsigned char *c,\n                        unsigned long long clen, const unsigned char *n,\n                        const unsigned char *k)\n{\n    return crypto_box_curve25519xsalsa20poly1305_open_afternm(m, c, clen, n, k);\n}\n\nint\ncrypto_box(unsigned char *c, const unsigned char *m,\n           unsigned long long mlen, const unsigned char *n,\n           const unsigned char *pk, const unsigned char *sk)\n{\n    return crypto_box_curve25519xsalsa20poly1305(c, m, mlen, n, pk, sk);\n}\n\nint\ncrypto_box_open(unsigned char *m, const unsigned char *c,\n                unsigned long long clen, const unsigned char *n,\n                const unsigned char *pk, const unsigned char *sk)\n{\n    return crypto_box_curve25519xsalsa20poly1305_open(m, c, clen, n, pk, sk);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/crypto_box_easy.c",
    "content": "\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"crypto_box.h\"\n#include \"crypto_secretbox.h\"\n#include \"utils.h\"\n\nint\ncrypto_box_detached_afternm(unsigned char *c, unsigned char *mac,\n                            const unsigned char *m, unsigned long long mlen,\n                            const unsigned char *n, const unsigned char *k)\n{\n    return crypto_secretbox_detached(c, mac, m, mlen, n, k);\n}\n\nint\ncrypto_box_detached(unsigned char *c, unsigned char *mac,\n                    const unsigned char *m, unsigned long long mlen,\n                    const unsigned char *n, const unsigned char *pk,\n                    const unsigned char *sk)\n{\n    unsigned char k[crypto_box_BEFORENMBYTES];\n    int           ret;\n\n    (void) sizeof(int[crypto_box_BEFORENMBYTES >=\n                      crypto_secretbox_KEYBYTES ? 1 : -1]);\n    if (crypto_box_beforenm(k, pk, sk) != 0) {\n        return -1;\n    }\n    ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k);\n    sodium_memzero(k, sizeof k);\n\n    return ret;\n}\n\nint\ncrypto_box_easy_afternm(unsigned char *c, const unsigned char *m,\n                        unsigned long long mlen, const unsigned char *n,\n                        const unsigned char *k)\n{\n    if (mlen > SIZE_MAX - crypto_box_MACBYTES) {\n        return -1;\n    }\n    return crypto_box_detached_afternm(c + crypto_box_MACBYTES, c, m, mlen, n,\n                                       k);\n}\n\nint\ncrypto_box_easy(unsigned char *c, const unsigned char *m,\n                unsigned long long mlen, const unsigned char *n,\n                const unsigned char *pk, const unsigned char *sk)\n{\n    if (mlen > SIZE_MAX - crypto_box_MACBYTES) {\n        return -1;\n    }\n    return crypto_box_detached(c + crypto_box_MACBYTES, c, m, mlen, n,\n                               pk, sk);\n}\n\nint\ncrypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,\n                                 const unsigned char *mac,\n                                 unsigned long long clen, const unsigned char *n,\n                                 const unsigned char *k)\n{\n    return crypto_secretbox_open_detached(m, c, mac, clen, n, k);\n}\n\nint\ncrypto_box_open_detached(unsigned char *m, const unsigned char *c,\n                         const unsigned char *mac,\n                         unsigned long long clen, const unsigned char *n,\n                         const unsigned char *pk, const unsigned char *sk)\n{\n    unsigned char k[crypto_box_BEFORENMBYTES];\n    int           ret;\n\n    if (crypto_box_beforenm(k, pk, sk) != 0) {\n        return -1;\n    }\n    ret = crypto_box_open_detached_afternm(m, c, mac, clen, n, k);\n    sodium_memzero(k, sizeof k);\n\n    return ret;\n}\n\nint\ncrypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,\n                             unsigned long long clen, const unsigned char *n,\n                             const unsigned char *k)\n{\n    if (clen < crypto_box_MACBYTES) {\n        return -1;\n    }\n    return crypto_box_open_detached_afternm(m, c + crypto_box_MACBYTES, c,\n                                            clen - crypto_box_MACBYTES,\n                                            n, k);\n}\n\nint\ncrypto_box_open_easy(unsigned char *m, const unsigned char *c,\n                     unsigned long long clen, const unsigned char *n,\n                     const unsigned char *pk, const unsigned char *sk)\n{\n    if (clen < crypto_box_MACBYTES) {\n        return -1;\n    }\n    return crypto_box_open_detached(m, c + crypto_box_MACBYTES, c,\n                                    clen - crypto_box_MACBYTES,\n                                    n, pk, sk);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/crypto_box_seal.c",
    "content": "\n#include <string.h>\n\n#include \"crypto_box.h\"\n#include \"crypto_generichash.h\"\n#include \"utils.h\"\n\nstatic int\n_crypto_box_seal_nonce(unsigned char *nonce,\n                       const unsigned char *pk1, const unsigned char *pk2)\n{\n    crypto_generichash_state st;\n\n    crypto_generichash_init(&st, NULL, 0U, crypto_box_NONCEBYTES);\n    crypto_generichash_update(&st, pk1, crypto_box_PUBLICKEYBYTES);\n    crypto_generichash_update(&st, pk2, crypto_box_PUBLICKEYBYTES);\n    crypto_generichash_final(&st, nonce, crypto_box_NONCEBYTES);\n\n    return 0;\n}\n\nint\ncrypto_box_seal(unsigned char *c, const unsigned char *m,\n                unsigned long long mlen, const unsigned char *pk)\n{\n    unsigned char nonce[crypto_box_NONCEBYTES];\n    unsigned char epk[crypto_box_PUBLICKEYBYTES];\n    unsigned char esk[crypto_box_SECRETKEYBYTES];\n    int           ret;\n\n    if (crypto_box_keypair(epk, esk) != 0) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    memcpy(c, epk, crypto_box_PUBLICKEYBYTES);\n    _crypto_box_seal_nonce(nonce, epk, pk);\n    ret = crypto_box_easy(c + crypto_box_PUBLICKEYBYTES, m, mlen,\n                          nonce, pk, esk);\n    sodium_memzero(nonce, sizeof nonce);\n    sodium_memzero(epk, sizeof epk);\n    sodium_memzero(esk, sizeof esk);\n\n    return ret;\n}\n\nint\ncrypto_box_seal_open(unsigned char *m, const unsigned char *c,\n                     unsigned long long clen,\n                     const unsigned char *pk, const unsigned char *sk)\n{\n    unsigned char nonce[crypto_box_NONCEBYTES];\n\n    if (clen < crypto_box_SEALBYTES) {\n        return -1;\n    }\n    _crypto_box_seal_nonce(nonce, c, pk);\n\n    (void) sizeof(int[crypto_box_PUBLICKEYBYTES < crypto_box_SEALBYTES ? 1 : -1]);\n    return crypto_box_open_easy(m, c + crypto_box_PUBLICKEYBYTES,\n                                clen - crypto_box_PUBLICKEYBYTES,\n                                nonce, c, sk);\n}\n\nsize_t\ncrypto_box_sealbytes(void)\n{\n    return crypto_box_SEALBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305_api.c",
    "content": "#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_seedbytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_SEEDBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_publickeybytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_secretkeybytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_beforenmbytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_noncebytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_NONCEBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_zerobytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_ZEROBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_boxzerobytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES;\n}\n\nsize_t\ncrypto_box_curve25519xsalsa20poly1305_macbytes(void) {\n    return crypto_box_curve25519xsalsa20poly1305_MACBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/after_curve25519xsalsa20poly1305.c",
    "content": "#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"crypto_secretbox_xsalsa20poly1305.h\"\n\nint crypto_box_curve25519xsalsa20poly1305_afternm(\n  unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  return crypto_secretbox_xsalsa20poly1305(c,m,mlen,n,k);\n}\n\nint crypto_box_curve25519xsalsa20poly1305_open_afternm(\n  unsigned char *m,\n  const unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  return crypto_secretbox_xsalsa20poly1305_open(m,c,clen,n,k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/before_curve25519xsalsa20poly1305.c",
    "content": "#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"crypto_core_hsalsa20.h\"\n#include \"crypto_scalarmult_curve25519.h\"\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\nstatic const unsigned char n[16] = {0};\n\nint crypto_box_curve25519xsalsa20poly1305_beforenm(\n  unsigned char *k,\n  const unsigned char *pk,\n  const unsigned char *sk\n)\n{\n  unsigned char s[32];\n  if (crypto_scalarmult_curve25519(s,sk,pk) != 0) {\n      return -1;\n  }\n  return crypto_core_hsalsa20(k,n,s,sigma);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/box_curve25519xsalsa20poly1305.c",
    "content": "#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"utils.h\"\n\nint crypto_box_curve25519xsalsa20poly1305(\n  unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *pk,\n  const unsigned char *sk\n)\n{\n  unsigned char k[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES];\n  int           ret;\n\n  if (crypto_box_curve25519xsalsa20poly1305_beforenm(k,pk,sk) != 0) {\n      return -1;\n  }\n  ret = crypto_box_curve25519xsalsa20poly1305_afternm(c,m,mlen,n,k);\n  sodium_memzero(k, sizeof k);\n\n  return ret;\n}\n\nint crypto_box_curve25519xsalsa20poly1305_open(\n  unsigned char *m,\n  const unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *pk,\n  const unsigned char *sk\n)\n{\n  unsigned char k[crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES];\n  int           ret;\n\n  if (crypto_box_curve25519xsalsa20poly1305_beforenm(k,pk,sk) != 0) {\n      return -1;\n  }\n  ret = crypto_box_curve25519xsalsa20poly1305_open_afternm(m,c,clen,n,k);\n  sodium_memzero(k, sizeof k);\n\n  return ret;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/ref/keypair_curve25519xsalsa20poly1305.c",
    "content": "#include <string.h>\n\n#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"randombytes.h\"\n#include \"utils.h\"\n\nint crypto_box_curve25519xsalsa20poly1305_seed_keypair(\n  unsigned char *pk,\n  unsigned char *sk,\n  const unsigned char *seed\n)\n{\n  unsigned char hash[64];\n  crypto_hash_sha512(hash,seed,32);\n  memmove(sk,hash,32);\n  sodium_memzero(hash, sizeof hash);\n  return crypto_scalarmult_curve25519_base(pk,sk);\n}\n\nint crypto_box_curve25519xsalsa20poly1305_keypair(\n  unsigned char *pk,\n  unsigned char *sk\n)\n{\n  randombytes_buf(sk,32);\n  return crypto_scalarmult_curve25519_base(pk,sk);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20_api.c",
    "content": "#include \"crypto_core_hsalsa20.h\"\n\nsize_t\ncrypto_core_hsalsa20_outputbytes(void) {\n    return crypto_core_hsalsa20_OUTPUTBYTES;\n}\n\nsize_t\ncrypto_core_hsalsa20_inputbytes(void) {\n    return crypto_core_hsalsa20_INPUTBYTES;\n}\n\nsize_t\ncrypto_core_hsalsa20_keybytes(void) {\n    return crypto_core_hsalsa20_KEYBYTES;\n}\n\nsize_t\ncrypto_core_hsalsa20_constbytes(void) {\n    return crypto_core_hsalsa20_CONSTBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20.c",
    "content": "/*\nversion 20080912\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_hsalsa20.h\"\n\n#define ROUNDS 20\n\ntypedef unsigned int uint32;\n\nstatic uint32 rotate(uint32 u,int c)\n{\n  return (u << c) | (u >> (32 - c));\n}\n\nstatic uint32 load_littleendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[0]) \\\n  | (((uint32) (x[1])) << 8) \\\n  | (((uint32) (x[2])) << 16) \\\n  | (((uint32) (x[3])) << 24)\n  ;\n}\n\nstatic void store_littleendian(unsigned char *x,uint32 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u;\n}\n\nint crypto_core_hsalsa20(\n        unsigned char *out,\n  const unsigned char *in,\n  const unsigned char *k,\n  const unsigned char *c\n)\n{\n  uint32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;\n  int i;\n\n  x0 = load_littleendian(c + 0);\n  x1 = load_littleendian(k + 0);\n  x2 = load_littleendian(k + 4);\n  x3 = load_littleendian(k + 8);\n  x4 = load_littleendian(k + 12);\n  x5 = load_littleendian(c + 4);\n  x6 = load_littleendian(in + 0);\n  x7 = load_littleendian(in + 4);\n  x8 = load_littleendian(in + 8);\n  x9 = load_littleendian(in + 12);\n  x10 = load_littleendian(c + 8);\n  x11 = load_littleendian(k + 16);\n  x12 = load_littleendian(k + 20);\n  x13 = load_littleendian(k + 24);\n  x14 = load_littleendian(k + 28);\n  x15 = load_littleendian(c + 12);\n\n  for (i = ROUNDS;i > 0;i -= 2) {\n     x4 ^= rotate( x0+x12, 7);\n     x8 ^= rotate( x4+ x0, 9);\n    x12 ^= rotate( x8+ x4,13);\n     x0 ^= rotate(x12+ x8,18);\n     x9 ^= rotate( x5+ x1, 7);\n    x13 ^= rotate( x9+ x5, 9);\n     x1 ^= rotate(x13+ x9,13);\n     x5 ^= rotate( x1+x13,18);\n    x14 ^= rotate(x10+ x6, 7);\n     x2 ^= rotate(x14+x10, 9);\n     x6 ^= rotate( x2+x14,13);\n    x10 ^= rotate( x6+ x2,18);\n     x3 ^= rotate(x15+x11, 7);\n     x7 ^= rotate( x3+x15, 9);\n    x11 ^= rotate( x7+ x3,13);\n    x15 ^= rotate(x11+ x7,18);\n     x1 ^= rotate( x0+ x3, 7);\n     x2 ^= rotate( x1+ x0, 9);\n     x3 ^= rotate( x2+ x1,13);\n     x0 ^= rotate( x3+ x2,18);\n     x6 ^= rotate( x5+ x4, 7);\n     x7 ^= rotate( x6+ x5, 9);\n     x4 ^= rotate( x7+ x6,13);\n     x5 ^= rotate( x4+ x7,18);\n    x11 ^= rotate(x10+ x9, 7);\n     x8 ^= rotate(x11+x10, 9);\n     x9 ^= rotate( x8+x11,13);\n    x10 ^= rotate( x9+ x8,18);\n    x12 ^= rotate(x15+x14, 7);\n    x13 ^= rotate(x12+x15, 9);\n    x14 ^= rotate(x13+x12,13);\n    x15 ^= rotate(x14+x13,18);\n  }\n\n  store_littleendian(out + 0,x0);\n  store_littleendian(out + 4,x5);\n  store_littleendian(out + 8,x10);\n  store_littleendian(out + 12,x15);\n  store_littleendian(out + 16,x6);\n  store_littleendian(out + 20,x7);\n  store_littleendian(out + 24,x8);\n  store_littleendian(out + 28,x9);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa20/core_salsa20_api.c",
    "content": "#include \"crypto_core_salsa20.h\"\n\nsize_t\ncrypto_core_salsa20_outputbytes(void) {\n    return crypto_core_salsa20_OUTPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa20_inputbytes(void) {\n    return crypto_core_salsa20_INPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa20_keybytes(void) {\n    return crypto_core_salsa20_KEYBYTES;\n}\n\nsize_t\ncrypto_core_salsa20_constbytes(void) {\n    return crypto_core_salsa20_CONSTBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa20/ref/core_salsa20.c",
    "content": "/*\nversion 20080912\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa20.h\"\n\n#define ROUNDS 20\n\ntypedef unsigned int uint32;\n\nstatic uint32 rotate(uint32 u,int c)\n{\n  return (u << c) | (u >> (32 - c));\n}\n\nstatic uint32 load_littleendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[0]) \\\n  | (((uint32) (x[1])) << 8) \\\n  | (((uint32) (x[2])) << 16) \\\n  | (((uint32) (x[3])) << 24)\n  ;\n}\n\nstatic void store_littleendian(unsigned char *x,uint32 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u;\n}\n\nint crypto_core_salsa20(\n        unsigned char *out,\n  const unsigned char *in,\n  const unsigned char *k,\n  const unsigned char *c\n)\n{\n  uint32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;\n  uint32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;\n  int i;\n\n  j0 = x0 = load_littleendian(c + 0);\n  j1 = x1 = load_littleendian(k + 0);\n  j2 = x2 = load_littleendian(k + 4);\n  j3 = x3 = load_littleendian(k + 8);\n  j4 = x4 = load_littleendian(k + 12);\n  j5 = x5 = load_littleendian(c + 4);\n  j6 = x6 = load_littleendian(in + 0);\n  j7 = x7 = load_littleendian(in + 4);\n  j8 = x8 = load_littleendian(in + 8);\n  j9 = x9 = load_littleendian(in + 12);\n  j10 = x10 = load_littleendian(c + 8);\n  j11 = x11 = load_littleendian(k + 16);\n  j12 = x12 = load_littleendian(k + 20);\n  j13 = x13 = load_littleendian(k + 24);\n  j14 = x14 = load_littleendian(k + 28);\n  j15 = x15 = load_littleendian(c + 12);\n\n  for (i = ROUNDS;i > 0;i -= 2) {\n     x4 ^= rotate( x0+x12, 7);\n     x8 ^= rotate( x4+ x0, 9);\n    x12 ^= rotate( x8+ x4,13);\n     x0 ^= rotate(x12+ x8,18);\n     x9 ^= rotate( x5+ x1, 7);\n    x13 ^= rotate( x9+ x5, 9);\n     x1 ^= rotate(x13+ x9,13);\n     x5 ^= rotate( x1+x13,18);\n    x14 ^= rotate(x10+ x6, 7);\n     x2 ^= rotate(x14+x10, 9);\n     x6 ^= rotate( x2+x14,13);\n    x10 ^= rotate( x6+ x2,18);\n     x3 ^= rotate(x15+x11, 7);\n     x7 ^= rotate( x3+x15, 9);\n    x11 ^= rotate( x7+ x3,13);\n    x15 ^= rotate(x11+ x7,18);\n     x1 ^= rotate( x0+ x3, 7);\n     x2 ^= rotate( x1+ x0, 9);\n     x3 ^= rotate( x2+ x1,13);\n     x0 ^= rotate( x3+ x2,18);\n     x6 ^= rotate( x5+ x4, 7);\n     x7 ^= rotate( x6+ x5, 9);\n     x4 ^= rotate( x7+ x6,13);\n     x5 ^= rotate( x4+ x7,18);\n    x11 ^= rotate(x10+ x9, 7);\n     x8 ^= rotate(x11+x10, 9);\n     x9 ^= rotate( x8+x11,13);\n    x10 ^= rotate( x9+ x8,18);\n    x12 ^= rotate(x15+x14, 7);\n    x13 ^= rotate(x12+x15, 9);\n    x14 ^= rotate(x13+x12,13);\n    x15 ^= rotate(x14+x13,18);\n  }\n\n  x0 += j0;\n  x1 += j1;\n  x2 += j2;\n  x3 += j3;\n  x4 += j4;\n  x5 += j5;\n  x6 += j6;\n  x7 += j7;\n  x8 += j8;\n  x9 += j9;\n  x10 += j10;\n  x11 += j11;\n  x12 += j12;\n  x13 += j13;\n  x14 += j14;\n  x15 += j15;\n\n  store_littleendian(out + 0,x0);\n  store_littleendian(out + 4,x1);\n  store_littleendian(out + 8,x2);\n  store_littleendian(out + 12,x3);\n  store_littleendian(out + 16,x4);\n  store_littleendian(out + 20,x5);\n  store_littleendian(out + 24,x6);\n  store_littleendian(out + 28,x7);\n  store_littleendian(out + 32,x8);\n  store_littleendian(out + 36,x9);\n  store_littleendian(out + 40,x10);\n  store_littleendian(out + 44,x11);\n  store_littleendian(out + 48,x12);\n  store_littleendian(out + 52,x13);\n  store_littleendian(out + 56,x14);\n  store_littleendian(out + 60,x15);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa2012/core_salsa2012_api.c",
    "content": "#include \"crypto_core_salsa2012.h\"\n\nsize_t\ncrypto_core_salsa2012_outputbytes(void) {\n    return crypto_core_salsa2012_OUTPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa2012_inputbytes(void) {\n    return crypto_core_salsa2012_INPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa2012_keybytes(void) {\n    return crypto_core_salsa2012_KEYBYTES;\n}\n\nsize_t\ncrypto_core_salsa2012_constbytes(void) {\n    return crypto_core_salsa2012_CONSTBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa2012/ref/core_salsa2012.c",
    "content": "/*\nversion 20080913\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa2012.h\"\n\n#define ROUNDS 12\n\ntypedef unsigned int uint32;\n\nstatic uint32 rotate(uint32 u,int c)\n{\n  return (u << c) | (u >> (32 - c));\n}\n\nstatic uint32 load_littleendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[0]) \\\n  | (((uint32) (x[1])) << 8) \\\n  | (((uint32) (x[2])) << 16) \\\n  | (((uint32) (x[3])) << 24)\n  ;\n}\n\nstatic void store_littleendian(unsigned char *x,uint32 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u;\n}\n\nint crypto_core_salsa2012(\n        unsigned char *out,\n  const unsigned char *in,\n  const unsigned char *k,\n  const unsigned char *c\n)\n{\n  uint32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;\n  uint32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;\n  int i;\n\n  j0 = x0 = load_littleendian(c + 0);\n  j1 = x1 = load_littleendian(k + 0);\n  j2 = x2 = load_littleendian(k + 4);\n  j3 = x3 = load_littleendian(k + 8);\n  j4 = x4 = load_littleendian(k + 12);\n  j5 = x5 = load_littleendian(c + 4);\n  j6 = x6 = load_littleendian(in + 0);\n  j7 = x7 = load_littleendian(in + 4);\n  j8 = x8 = load_littleendian(in + 8);\n  j9 = x9 = load_littleendian(in + 12);\n  j10 = x10 = load_littleendian(c + 8);\n  j11 = x11 = load_littleendian(k + 16);\n  j12 = x12 = load_littleendian(k + 20);\n  j13 = x13 = load_littleendian(k + 24);\n  j14 = x14 = load_littleendian(k + 28);\n  j15 = x15 = load_littleendian(c + 12);\n\n  for (i = ROUNDS;i > 0;i -= 2) {\n     x4 ^= rotate( x0+x12, 7);\n     x8 ^= rotate( x4+ x0, 9);\n    x12 ^= rotate( x8+ x4,13);\n     x0 ^= rotate(x12+ x8,18);\n     x9 ^= rotate( x5+ x1, 7);\n    x13 ^= rotate( x9+ x5, 9);\n     x1 ^= rotate(x13+ x9,13);\n     x5 ^= rotate( x1+x13,18);\n    x14 ^= rotate(x10+ x6, 7);\n     x2 ^= rotate(x14+x10, 9);\n     x6 ^= rotate( x2+x14,13);\n    x10 ^= rotate( x6+ x2,18);\n     x3 ^= rotate(x15+x11, 7);\n     x7 ^= rotate( x3+x15, 9);\n    x11 ^= rotate( x7+ x3,13);\n    x15 ^= rotate(x11+ x7,18);\n     x1 ^= rotate( x0+ x3, 7);\n     x2 ^= rotate( x1+ x0, 9);\n     x3 ^= rotate( x2+ x1,13);\n     x0 ^= rotate( x3+ x2,18);\n     x6 ^= rotate( x5+ x4, 7);\n     x7 ^= rotate( x6+ x5, 9);\n     x4 ^= rotate( x7+ x6,13);\n     x5 ^= rotate( x4+ x7,18);\n    x11 ^= rotate(x10+ x9, 7);\n     x8 ^= rotate(x11+x10, 9);\n     x9 ^= rotate( x8+x11,13);\n    x10 ^= rotate( x9+ x8,18);\n    x12 ^= rotate(x15+x14, 7);\n    x13 ^= rotate(x12+x15, 9);\n    x14 ^= rotate(x13+x12,13);\n    x15 ^= rotate(x14+x13,18);\n  }\n\n  x0 += j0;\n  x1 += j1;\n  x2 += j2;\n  x3 += j3;\n  x4 += j4;\n  x5 += j5;\n  x6 += j6;\n  x7 += j7;\n  x8 += j8;\n  x9 += j9;\n  x10 += j10;\n  x11 += j11;\n  x12 += j12;\n  x13 += j13;\n  x14 += j14;\n  x15 += j15;\n\n  store_littleendian(out + 0,x0);\n  store_littleendian(out + 4,x1);\n  store_littleendian(out + 8,x2);\n  store_littleendian(out + 12,x3);\n  store_littleendian(out + 16,x4);\n  store_littleendian(out + 20,x5);\n  store_littleendian(out + 24,x6);\n  store_littleendian(out + 28,x7);\n  store_littleendian(out + 32,x8);\n  store_littleendian(out + 36,x9);\n  store_littleendian(out + 40,x10);\n  store_littleendian(out + 44,x11);\n  store_littleendian(out + 48,x12);\n  store_littleendian(out + 52,x13);\n  store_littleendian(out + 56,x14);\n  store_littleendian(out + 60,x15);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa208/core_salsa208_api.c",
    "content": "#include \"crypto_core_salsa208.h\"\n\nsize_t\ncrypto_core_salsa208_outputbytes(void) {\n    return crypto_core_salsa208_OUTPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa208_inputbytes(void) {\n    return crypto_core_salsa208_INPUTBYTES;\n}\n\nsize_t\ncrypto_core_salsa208_keybytes(void) {\n    return crypto_core_salsa208_KEYBYTES;\n}\n\nsize_t\ncrypto_core_salsa208_constbytes(void) {\n    return crypto_core_salsa208_CONSTBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_core/salsa208/ref/core_salsa208.c",
    "content": "/*\nversion 20080913\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa208.h\"\n\n#define ROUNDS 8\n\ntypedef unsigned int uint32;\n\nstatic uint32 rotate(uint32 u,int c)\n{\n  return (u << c) | (u >> (32 - c));\n}\n\nstatic uint32 load_littleendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[0]) \\\n  | (((uint32) (x[1])) << 8) \\\n  | (((uint32) (x[2])) << 16) \\\n  | (((uint32) (x[3])) << 24)\n  ;\n}\n\nstatic void store_littleendian(unsigned char *x,uint32 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u;\n}\n\nint crypto_core_salsa208(\n        unsigned char *out,\n  const unsigned char *in,\n  const unsigned char *k,\n  const unsigned char *c\n)\n{\n  uint32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;\n  uint32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;\n  int i;\n\n  j0 = x0 = load_littleendian(c + 0);\n  j1 = x1 = load_littleendian(k + 0);\n  j2 = x2 = load_littleendian(k + 4);\n  j3 = x3 = load_littleendian(k + 8);\n  j4 = x4 = load_littleendian(k + 12);\n  j5 = x5 = load_littleendian(c + 4);\n  j6 = x6 = load_littleendian(in + 0);\n  j7 = x7 = load_littleendian(in + 4);\n  j8 = x8 = load_littleendian(in + 8);\n  j9 = x9 = load_littleendian(in + 12);\n  j10 = x10 = load_littleendian(c + 8);\n  j11 = x11 = load_littleendian(k + 16);\n  j12 = x12 = load_littleendian(k + 20);\n  j13 = x13 = load_littleendian(k + 24);\n  j14 = x14 = load_littleendian(k + 28);\n  j15 = x15 = load_littleendian(c + 12);\n\n  for (i = ROUNDS;i > 0;i -= 2) {\n     x4 ^= rotate( x0+x12, 7);\n     x8 ^= rotate( x4+ x0, 9);\n    x12 ^= rotate( x8+ x4,13);\n     x0 ^= rotate(x12+ x8,18);\n     x9 ^= rotate( x5+ x1, 7);\n    x13 ^= rotate( x9+ x5, 9);\n     x1 ^= rotate(x13+ x9,13);\n     x5 ^= rotate( x1+x13,18);\n    x14 ^= rotate(x10+ x6, 7);\n     x2 ^= rotate(x14+x10, 9);\n     x6 ^= rotate( x2+x14,13);\n    x10 ^= rotate( x6+ x2,18);\n     x3 ^= rotate(x15+x11, 7);\n     x7 ^= rotate( x3+x15, 9);\n    x11 ^= rotate( x7+ x3,13);\n    x15 ^= rotate(x11+ x7,18);\n     x1 ^= rotate( x0+ x3, 7);\n     x2 ^= rotate( x1+ x0, 9);\n     x3 ^= rotate( x2+ x1,13);\n     x0 ^= rotate( x3+ x2,18);\n     x6 ^= rotate( x5+ x4, 7);\n     x7 ^= rotate( x6+ x5, 9);\n     x4 ^= rotate( x7+ x6,13);\n     x5 ^= rotate( x4+ x7,18);\n    x11 ^= rotate(x10+ x9, 7);\n     x8 ^= rotate(x11+x10, 9);\n     x9 ^= rotate( x8+x11,13);\n    x10 ^= rotate( x9+ x8,18);\n    x12 ^= rotate(x15+x14, 7);\n    x13 ^= rotate(x12+x15, 9);\n    x14 ^= rotate(x13+x12,13);\n    x15 ^= rotate(x14+x13,18);\n  }\n\n  x0 += j0;\n  x1 += j1;\n  x2 += j2;\n  x3 += j3;\n  x4 += j4;\n  x5 += j5;\n  x6 += j6;\n  x7 += j7;\n  x8 += j8;\n  x9 += j9;\n  x10 += j10;\n  x11 += j11;\n  x12 += j12;\n  x13 += j13;\n  x14 += j14;\n  x15 += j15;\n\n  store_littleendian(out + 0,x0);\n  store_littleendian(out + 4,x1);\n  store_littleendian(out + 8,x2);\n  store_littleendian(out + 12,x3);\n  store_littleendian(out + 16,x4);\n  store_littleendian(out + 20,x5);\n  store_littleendian(out + 24,x6);\n  store_littleendian(out + 28,x7);\n  store_littleendian(out + 32,x8);\n  store_littleendian(out + 36,x9);\n  store_littleendian(out + 40,x10);\n  store_littleendian(out + 44,x11);\n  store_littleendian(out + 48,x12);\n  store_littleendian(out + 52,x13);\n  store_littleendian(out + 56,x14);\n  store_littleendian(out + 60,x15);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/generichash_blake2_api.c",
    "content": "#include \"crypto_generichash_blake2b.h\"\n\nsize_t\ncrypto_generichash_blake2b_bytes_min(void) {\n    return crypto_generichash_blake2b_BYTES_MIN;\n}\n\nsize_t\ncrypto_generichash_blake2b_bytes_max(void) {\n    return crypto_generichash_blake2b_BYTES_MAX;\n}\n\nsize_t\ncrypto_generichash_blake2b_bytes(void) {\n    return crypto_generichash_blake2b_BYTES;\n}\n\nsize_t\ncrypto_generichash_blake2b_keybytes_min(void) {\n    return crypto_generichash_blake2b_KEYBYTES_MIN;\n}\n\nsize_t\ncrypto_generichash_blake2b_keybytes_max(void) {\n    return crypto_generichash_blake2b_KEYBYTES_MAX;\n}\n\nsize_t\ncrypto_generichash_blake2b_keybytes(void) {\n    return crypto_generichash_blake2b_KEYBYTES;\n}\n\nsize_t\ncrypto_generichash_blake2b_saltbytes(void) {\n    return crypto_generichash_blake2b_SALTBYTES;\n}\n\nsize_t\ncrypto_generichash_blake2b_personalbytes(void) {\n    return crypto_generichash_blake2b_PERSONALBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2-impl.h",
    "content": "/*\n   BLAKE2 reference source code package - reference C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#ifndef blake2_impl_H\n#define blake2_impl_H\n\n#include <stdint.h>\n#include <string.h>\n\n#include \"utils.h\"\n\nstatic inline uint32_t load32( const void *src )\n{\n#ifdef NATIVE_LITTLE_ENDIAN\n  uint32_t w;\n  memcpy(&w, src, sizeof w);\n  return w;\n#else\n  const uint8_t *p = ( const uint8_t * )src;\n  uint32_t w = *p++;\n  w |= ( uint32_t )( *p++ ) <<  8;\n  w |= ( uint32_t )( *p++ ) << 16;\n  w |= ( uint32_t )( *p++ ) << 24;\n  return w;\n#endif\n}\n\nstatic inline uint64_t load64( const void *src )\n{\n#ifdef NATIVE_LITTLE_ENDIAN\n  uint64_t w;\n  memcpy(&w, src, sizeof w);\n  return w;\n#else\n  const uint8_t *p = ( const uint8_t * )src;\n  uint64_t w = *p++;\n  w |= ( uint64_t )( *p++ ) <<  8;\n  w |= ( uint64_t )( *p++ ) << 16;\n  w |= ( uint64_t )( *p++ ) << 24;\n  w |= ( uint64_t )( *p++ ) << 32;\n  w |= ( uint64_t )( *p++ ) << 40;\n  w |= ( uint64_t )( *p++ ) << 48;\n  w |= ( uint64_t )( *p++ ) << 56;\n  return w;\n#endif\n}\n\nstatic inline void store32( void *dst, uint32_t w )\n{\n#ifdef NATIVE_LITTLE_ENDIAN\n  memcpy(dst, &w, sizeof w);\n#else\n  uint8_t *p = ( uint8_t * )dst;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w;\n#endif\n}\n\nstatic inline void store64( void *dst, uint64_t w )\n{\n#ifdef NATIVE_LITTLE_ENDIAN\n  memcpy(dst, &w, sizeof w);\n#else\n  uint8_t *p = ( uint8_t * )dst;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w;\n#endif\n}\n\nstatic inline uint64_t load48( const void *src )\n{\n  const uint8_t *p = ( const uint8_t * )src;\n  uint64_t w = *p++;\n  w |= ( uint64_t )( *p++ ) <<  8;\n  w |= ( uint64_t )( *p++ ) << 16;\n  w |= ( uint64_t )( *p++ ) << 24;\n  w |= ( uint64_t )( *p++ ) << 32;\n  w |= ( uint64_t )( *p++ ) << 40;\n  return w;\n}\n\nstatic inline void store48( void *dst, uint64_t w )\n{\n  uint8_t *p = ( uint8_t * )dst;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w; w >>= 8;\n  *p++ = ( uint8_t )w;\n}\n\nstatic inline uint32_t rotl32( const uint32_t w, const unsigned c )\n{\n  return ( w << c ) | ( w >> ( 32 - c ) );\n}\n\nstatic inline uint64_t rotl64( const uint64_t w, const unsigned c )\n{\n  return ( w << c ) | ( w >> ( 64 - c ) );\n}\n\nstatic inline uint32_t rotr32( const uint32_t w, const unsigned c )\n{\n  return ( w >> c ) | ( w << ( 32 - c ) );\n}\n\nstatic inline uint64_t rotr64( const uint64_t w, const unsigned c )\n{\n  return ( w >> c ) | ( w << ( 64 - c ) );\n}\n\n/* prevents compiler optimizing out memset() */\nstatic inline void secure_zero_memory( void *v, size_t n )\n{\n  sodium_memzero(v, n);\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2.h",
    "content": "/*\n   BLAKE2 reference source code package - reference C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#ifndef blake2_H\n#define blake2_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"crypto_generichash_blake2b.h\"\n#include \"export.h\"\n\n#define blake2b_init_param               crypto_generichash_blake2b__init_param\n#define blake2b_init                     crypto_generichash_blake2b__init\n#define blake2b_init_salt_personal       crypto_generichash_blake2b__init_salt_personal\n#define blake2b_init_key                 crypto_generichash_blake2b__init_key\n#define blake2b_init_key_salt_personal   crypto_generichash_blake2b__init_key_salt_personal\n#define blake2b_update                   crypto_generichash_blake2b__update\n#define blake2b_final                    crypto_generichash_blake2b__final\n#define blake2b                          crypto_generichash_blake2b__blake2b\n#define blake2b_salt_personal            crypto_generichash_blake2b__blake2b_salt_personal\n#define blake2b_pick_best_implementation crypto_generichash_blake2b__pick_best_implementation\n\n#if defined(__cplusplus)\nextern \"C\" {\n#endif\n\n  enum blake2s_constant\n  {\n    BLAKE2S_BLOCKBYTES = 64,\n    BLAKE2S_OUTBYTES   = 32,\n    BLAKE2S_KEYBYTES   = 32,\n    BLAKE2S_SALTBYTES  = 8,\n    BLAKE2S_PERSONALBYTES = 8\n  };\n\n  enum blake2b_constant\n  {\n    BLAKE2B_BLOCKBYTES = 128,\n    BLAKE2B_OUTBYTES   = 64,\n    BLAKE2B_KEYBYTES   = 64,\n    BLAKE2B_SALTBYTES  = 16,\n    BLAKE2B_PERSONALBYTES = 16\n  };\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack(1)\n#else\n# pragma pack(push, 1)\n#endif\n\n  typedef struct blake2s_param_\n  {\n    uint8_t  digest_length; // 1\n    uint8_t  key_length;    // 2\n    uint8_t  fanout;        // 3\n    uint8_t  depth;         // 4\n    uint32_t leaf_length;   // 8\n    uint8_t  node_offset[6];// 14\n    uint8_t  node_depth;    // 15\n    uint8_t  inner_length;  // 16\n    // uint8_t  reserved[0];\n    uint8_t  salt[BLAKE2S_SALTBYTES]; // 24\n    uint8_t  personal[BLAKE2S_PERSONALBYTES];  // 32\n  } blake2s_param;\n\nCRYPTO_ALIGN( 64 ) typedef struct blake2s_state_\n  {\n    uint32_t h[8];\n    uint32_t t[2];\n    uint32_t f[2];\n    uint8_t  buf[2 * BLAKE2S_BLOCKBYTES];\n    size_t   buflen;\n    uint8_t  last_node;\n  } blake2s_state ;\n\n  typedef struct blake2b_param_\n  {\n    uint8_t  digest_length; // 1\n    uint8_t  key_length;    // 2\n    uint8_t  fanout;        // 3\n    uint8_t  depth;         // 4\n    uint32_t leaf_length;   // 8\n    uint64_t node_offset;   // 16\n    uint8_t  node_depth;    // 17\n    uint8_t  inner_length;  // 18\n    uint8_t  reserved[14];  // 32\n    uint8_t  salt[BLAKE2B_SALTBYTES]; // 48\n    uint8_t  personal[BLAKE2B_PERSONALBYTES];  // 64\n  } blake2b_param;\n\n#ifndef DEFINE_BLAKE2B_STATE\ntypedef crypto_generichash_blake2b_state blake2b_state;\n#else\nCRYPTO_ALIGN( 64 ) typedef struct blake2b_state_\n  {\n    uint64_t h[8];\n    uint64_t t[2];\n    uint64_t f[2];\n    uint8_t  buf[2 * BLAKE2B_BLOCKBYTES];\n    size_t   buflen;\n    uint8_t  last_node;\n  } blake2b_state;\n#endif\n\n  typedef struct blake2sp_state_\n  {\n    blake2s_state S[8][1];\n    blake2s_state R[1];\n    uint8_t buf[8 * BLAKE2S_BLOCKBYTES];\n    size_t  buflen;\n  } blake2sp_state;\n\n  typedef struct blake2bp_state_\n  {\n    blake2b_state S[4][1];\n    blake2b_state R[1];\n    uint8_t buf[4 * BLAKE2B_BLOCKBYTES];\n    size_t  buflen;\n  } blake2bp_state;\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack()\n#else\n# pragma pack(pop)\n#endif\n\n  // Streaming API\n  int blake2s_init( blake2s_state *S, const uint8_t outlen );\n  int blake2s_init_key( blake2s_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );\n  int blake2s_init_param( blake2s_state *S, const blake2s_param *P );\n  int blake2s_update( blake2s_state *S, const uint8_t *in, uint64_t inlen );\n  int blake2s_final( blake2s_state *S, uint8_t *out, uint8_t outlen );\n\n  int blake2b_init( blake2b_state *S, const uint8_t outlen );\n  int blake2b_init_salt_personal( blake2b_state *S, const uint8_t outlen,\n                                  const void *personal, const void *salt );\n  int blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );\n  int blake2b_init_key_salt_personal( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen,\n                                      const void *salt, const void *personal );\n  int blake2b_init_param( blake2b_state *S, const blake2b_param *P );\n  int blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen );\n  int blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen );\n\n  int blake2sp_init( blake2sp_state *S, const uint8_t outlen );\n  int blake2sp_init_key( blake2sp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );\n  int blake2sp_update( blake2sp_state *S, const uint8_t *in, uint64_t inlen );\n  int blake2sp_final( blake2sp_state *S, uint8_t *out, uint8_t outlen );\n\n  int blake2bp_init( blake2bp_state *S, const uint8_t outlen );\n  int blake2bp_init_key( blake2bp_state *S, const uint8_t outlen, const void *key, const uint8_t keylen );\n  int blake2bp_update( blake2bp_state *S, const uint8_t *in, uint64_t inlen );\n  int blake2bp_final( blake2bp_state *S, uint8_t *out, uint8_t outlen );\n\n  // Simple API\n  int blake2s( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );\n  int blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );\n  int blake2b_salt_personal( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen, const void *salt, const void *personal );\n\n  int blake2sp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );\n  int blake2bp( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen );\n\n  static inline int blake2( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )\n  {\n    return blake2b( out, in, key, outlen, inlen, keylen );\n  }\n\n  typedef int ( *blake2b_compress_fn )( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] );\n  int blake2b_pick_best_implementation(void);\n  int blake2b_compress_ref( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] );\n  int blake2b_compress_ssse3( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] );\n  int blake2b_compress_sse41( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] );\n\n#if defined(__cplusplus)\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-ref.c",
    "content": "\n#include <stdint.h>\n#include <string.h>\n\n#include \"blake2.h\"\n#include \"blake2-impl.h\"\n\nstatic const uint64_t blake2b_IV[8] =\n{\n  0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n  0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n  0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n  0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n};\n\nstatic const uint8_t blake2b_sigma[12][16] =\n{\n  {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,\n  { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 } ,\n  { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 } ,\n  {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 } ,\n  {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 } ,\n  {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 } ,\n  { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 } ,\n  { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 } ,\n  {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 } ,\n  { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0 } ,\n  {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,\n  { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 }\n};\n\nint blake2b_compress_ref( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )\n{\n  uint64_t m[16];\n  uint64_t v[16];\n  int      i;\n\n  for( i = 0; i < 16; ++i )\n    m[i] = load64( block + i * sizeof( m[i] ) );\n\n  for( i = 0; i < 8; ++i )\n    v[i] = S->h[i];\n\n  v[ 8] = blake2b_IV[0];\n  v[ 9] = blake2b_IV[1];\n  v[10] = blake2b_IV[2];\n  v[11] = blake2b_IV[3];\n  v[12] = S->t[0] ^ blake2b_IV[4];\n  v[13] = S->t[1] ^ blake2b_IV[5];\n  v[14] = S->f[0] ^ blake2b_IV[6];\n  v[15] = S->f[1] ^ blake2b_IV[7];\n#define G(r,i,a,b,c,d) \\\n  do { \\\n    a = a + b + m[blake2b_sigma[r][2*i+0]]; \\\n    d = rotr64(d ^ a, 32); \\\n    c = c + d; \\\n    b = rotr64(b ^ c, 24); \\\n    a = a + b + m[blake2b_sigma[r][2*i+1]]; \\\n    d = rotr64(d ^ a, 16); \\\n    c = c + d; \\\n    b = rotr64(b ^ c, 63); \\\n  } while(0)\n#define ROUND(r)  \\\n  do { \\\n    G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \\\n    G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \\\n    G(r,2,v[ 2],v[ 6],v[10],v[14]); \\\n    G(r,3,v[ 3],v[ 7],v[11],v[15]); \\\n    G(r,4,v[ 0],v[ 5],v[10],v[15]); \\\n    G(r,5,v[ 1],v[ 6],v[11],v[12]); \\\n    G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \\\n    G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \\\n  } while(0)\n  ROUND( 0 );\n  ROUND( 1 );\n  ROUND( 2 );\n  ROUND( 3 );\n  ROUND( 4 );\n  ROUND( 5 );\n  ROUND( 6 );\n  ROUND( 7 );\n  ROUND( 8 );\n  ROUND( 9 );\n  ROUND( 10 );\n  ROUND( 11 );\n\n  for( i = 0; i < 8; ++i )\n    S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];\n\n#undef G\n#undef ROUND\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-sse41.c",
    "content": "\n#define BLAKE2_USE_SSSE3\n#define BLAKE2_USE_SSE41\n\n#include <stdint.h>\n#include <string.h>\n\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H) && defined(HAVE_SMMINTRIN_H)) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n\n#pragma GCC target(\"sse2\")\n#pragma GCC target(\"ssse3\")\n#pragma GCC target(\"sse4.1\")\n\n#include <emmintrin.h>\n#include <tmmintrin.h>\n#include <smmintrin.h>\n\n#include \"blake2.h\"\n#include \"blake2-impl.h\"\n#include \"blake2b-round.h\"\n\nstatic const uint64_t blake2b_IV[8] =\n{\n  0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n  0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n  0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n  0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n};\n\nint blake2b_compress_sse41( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )\n{\n  __m128i row1l, row1h;\n  __m128i row2l, row2h;\n  __m128i row3l, row3h;\n  __m128i row4l, row4h;\n  __m128i b0, b1;\n  __m128i t0, t1;\n  const __m128i r16 = _mm_setr_epi8( 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9 );\n  const __m128i r24 = _mm_setr_epi8( 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10 );\n  const __m128i m0 = LOADU( block + 00 );\n  const __m128i m1 = LOADU( block + 16 );\n  const __m128i m2 = LOADU( block + 32 );\n  const __m128i m3 = LOADU( block + 48 );\n  const __m128i m4 = LOADU( block + 64 );\n  const __m128i m5 = LOADU( block + 80 );\n  const __m128i m6 = LOADU( block + 96 );\n  const __m128i m7 = LOADU( block + 112 );\n  row1l = LOADU( &S->h[0] );\n  row1h = LOADU( &S->h[2] );\n  row2l = LOADU( &S->h[4] );\n  row2h = LOADU( &S->h[6] );\n  row3l = LOADU( &blake2b_IV[0] );\n  row3h = LOADU( &blake2b_IV[2] );\n  row4l = _mm_xor_si128( LOADU( &blake2b_IV[4] ), LOADU( &S->t[0] ) );\n  row4h = _mm_xor_si128( LOADU( &blake2b_IV[6] ), LOADU( &S->f[0] ) );\n  ROUND( 0 );\n  ROUND( 1 );\n  ROUND( 2 );\n  ROUND( 3 );\n  ROUND( 4 );\n  ROUND( 5 );\n  ROUND( 6 );\n  ROUND( 7 );\n  ROUND( 8 );\n  ROUND( 9 );\n  ROUND( 10 );\n  ROUND( 11 );\n  row1l = _mm_xor_si128( row3l, row1l );\n  row1h = _mm_xor_si128( row3h, row1h );\n  STOREU( &S->h[0], _mm_xor_si128( LOADU( &S->h[0] ), row1l ) );\n  STOREU( &S->h[2], _mm_xor_si128( LOADU( &S->h[2] ), row1h ) );\n  row2l = _mm_xor_si128( row4l, row2l );\n  row2h = _mm_xor_si128( row4h, row2h );\n  STOREU( &S->h[4], _mm_xor_si128( LOADU( &S->h[4] ), row2l ) );\n  STOREU( &S->h[6], _mm_xor_si128( LOADU( &S->h[6] ), row2h ) );\n  return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-compress-ssse3.c",
    "content": "\n#define BLAKE2_USE_SSSE3\n\n#include <stdint.h>\n#include <string.h>\n\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H)) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64)))\n\n#pragma GCC target(\"sse2\")\n#pragma GCC target(\"ssse3\")\n\n#ifdef _MSC_VER\n# include <intrin.h> /* for _mm_set_epi64x */\n#endif\n#include <emmintrin.h>\n#include <tmmintrin.h>\n\n#include \"blake2.h\"\n#include \"blake2-impl.h\"\n#include \"blake2b-round.h\"\n\nstatic const uint64_t blake2b_IV[8] =\n{\n  0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n  0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n  0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n  0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n};\n\nint blake2b_compress_ssse3( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] )\n{\n  __m128i row1l, row1h;\n  __m128i row2l, row2h;\n  __m128i row3l, row3h;\n  __m128i row4l, row4h;\n  __m128i b0, b1;\n  __m128i t0, t1;\n  const __m128i r16 = _mm_setr_epi8( 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9 );\n  const __m128i r24 = _mm_setr_epi8( 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10 );\n  const uint64_t  m0 = ( ( uint64_t * )block )[ 0];\n  const uint64_t  m1 = ( ( uint64_t * )block )[ 1];\n  const uint64_t  m2 = ( ( uint64_t * )block )[ 2];\n  const uint64_t  m3 = ( ( uint64_t * )block )[ 3];\n  const uint64_t  m4 = ( ( uint64_t * )block )[ 4];\n  const uint64_t  m5 = ( ( uint64_t * )block )[ 5];\n  const uint64_t  m6 = ( ( uint64_t * )block )[ 6];\n  const uint64_t  m7 = ( ( uint64_t * )block )[ 7];\n  const uint64_t  m8 = ( ( uint64_t * )block )[ 8];\n  const uint64_t  m9 = ( ( uint64_t * )block )[ 9];\n  const uint64_t m10 = ( ( uint64_t * )block )[10];\n  const uint64_t m11 = ( ( uint64_t * )block )[11];\n  const uint64_t m12 = ( ( uint64_t * )block )[12];\n  const uint64_t m13 = ( ( uint64_t * )block )[13];\n  const uint64_t m14 = ( ( uint64_t * )block )[14];\n  const uint64_t m15 = ( ( uint64_t * )block )[15];\n\n  row1l = LOADU( &S->h[0] );\n  row1h = LOADU( &S->h[2] );\n  row2l = LOADU( &S->h[4] );\n  row2h = LOADU( &S->h[6] );\n  row3l = LOADU( &blake2b_IV[0] );\n  row3h = LOADU( &blake2b_IV[2] );\n  row4l = _mm_xor_si128( LOADU( &blake2b_IV[4] ), LOADU( &S->t[0] ) );\n  row4h = _mm_xor_si128( LOADU( &blake2b_IV[6] ), LOADU( &S->f[0] ) );\n  ROUND( 0 );\n  ROUND( 1 );\n  ROUND( 2 );\n  ROUND( 3 );\n  ROUND( 4 );\n  ROUND( 5 );\n  ROUND( 6 );\n  ROUND( 7 );\n  ROUND( 8 );\n  ROUND( 9 );\n  ROUND( 10 );\n  ROUND( 11 );\n  row1l = _mm_xor_si128( row3l, row1l );\n  row1h = _mm_xor_si128( row3h, row1h );\n  STOREU( &S->h[0], _mm_xor_si128( LOADU( &S->h[0] ), row1l ) );\n  STOREU( &S->h[2], _mm_xor_si128( LOADU( &S->h[2] ), row1h ) );\n  row2l = _mm_xor_si128( row4l, row2l );\n  row2h = _mm_xor_si128( row4h, row2h );\n  STOREU( &S->h[4], _mm_xor_si128( LOADU( &S->h[4] ), row2l ) );\n  STOREU( &S->h[6], _mm_xor_si128( LOADU( &S->h[6] ), row2h ) );\n  return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-load-sse2.h",
    "content": "/*\n   BLAKE2 reference source code package - optimized C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#ifndef blake2b_load_sse2_H\n#define blake2b_load_sse2_H\n\n#define LOAD_MSG_0_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4)\n#define LOAD_MSG_0_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5)\n#define LOAD_MSG_0_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12)\n#define LOAD_MSG_0_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13)\n#define LOAD_MSG_1_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9)\n#define LOAD_MSG_1_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15)\n#define LOAD_MSG_1_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11)\n#define LOAD_MSG_1_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7)\n#define LOAD_MSG_2_1(b0, b1) b0 = _mm_set_epi64x(m12, m11); b1 = _mm_set_epi64x(m15, m5)\n#define LOAD_MSG_2_2(b0, b1) b0 = _mm_set_epi64x(m0, m8); b1 = _mm_set_epi64x(m13, m2)\n#define LOAD_MSG_2_3(b0, b1) b0 = _mm_set_epi64x(m3, m10); b1 = _mm_set_epi64x(m9, m7)\n#define LOAD_MSG_2_4(b0, b1) b0 = _mm_set_epi64x(m6, m14); b1 = _mm_set_epi64x(m4, m1)\n#define LOAD_MSG_3_1(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m13)\n#define LOAD_MSG_3_2(b0, b1) b0 = _mm_set_epi64x(m1, m9); b1 = _mm_set_epi64x(m14, m12)\n#define LOAD_MSG_3_3(b0, b1) b0 = _mm_set_epi64x(m5, m2); b1 = _mm_set_epi64x(m15, m4)\n#define LOAD_MSG_3_4(b0, b1) b0 = _mm_set_epi64x(m10, m6); b1 = _mm_set_epi64x(m8, m0)\n#define LOAD_MSG_4_1(b0, b1) b0 = _mm_set_epi64x(m5, m9); b1 = _mm_set_epi64x(m10, m2)\n#define LOAD_MSG_4_2(b0, b1) b0 = _mm_set_epi64x(m7, m0); b1 = _mm_set_epi64x(m15, m4)\n#define LOAD_MSG_4_3(b0, b1) b0 = _mm_set_epi64x(m11, m14); b1 = _mm_set_epi64x(m3, m6)\n#define LOAD_MSG_4_4(b0, b1) b0 = _mm_set_epi64x(m12, m1); b1 = _mm_set_epi64x(m13, m8)\n#define LOAD_MSG_5_1(b0, b1) b0 = _mm_set_epi64x(m6, m2); b1 = _mm_set_epi64x(m8, m0)\n#define LOAD_MSG_5_2(b0, b1) b0 = _mm_set_epi64x(m10, m12); b1 = _mm_set_epi64x(m3, m11)\n#define LOAD_MSG_5_3(b0, b1) b0 = _mm_set_epi64x(m7, m4); b1 = _mm_set_epi64x(m1, m15)\n#define LOAD_MSG_5_4(b0, b1) b0 = _mm_set_epi64x(m5, m13); b1 = _mm_set_epi64x(m9, m14)\n#define LOAD_MSG_6_1(b0, b1) b0 = _mm_set_epi64x(m1, m12); b1 = _mm_set_epi64x(m4, m14)\n#define LOAD_MSG_6_2(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m10, m13)\n#define LOAD_MSG_6_3(b0, b1) b0 = _mm_set_epi64x(m6, m0); b1 = _mm_set_epi64x(m8, m9)\n#define LOAD_MSG_6_4(b0, b1) b0 = _mm_set_epi64x(m3, m7); b1 = _mm_set_epi64x(m11, m2)\n#define LOAD_MSG_7_1(b0, b1) b0 = _mm_set_epi64x(m7, m13); b1 = _mm_set_epi64x(m3, m12)\n#define LOAD_MSG_7_2(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m9, m1)\n#define LOAD_MSG_7_3(b0, b1) b0 = _mm_set_epi64x(m15, m5); b1 = _mm_set_epi64x(m2, m8)\n#define LOAD_MSG_7_4(b0, b1) b0 = _mm_set_epi64x(m4, m0); b1 = _mm_set_epi64x(m10, m6)\n#define LOAD_MSG_8_1(b0, b1) b0 = _mm_set_epi64x(m14, m6); b1 = _mm_set_epi64x(m0, m11)\n#define LOAD_MSG_8_2(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m8, m3)\n#define LOAD_MSG_8_3(b0, b1) b0 = _mm_set_epi64x(m13, m12); b1 = _mm_set_epi64x(m10, m1)\n#define LOAD_MSG_8_4(b0, b1) b0 = _mm_set_epi64x(m7, m2); b1 = _mm_set_epi64x(m5, m4)\n#define LOAD_MSG_9_1(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m1, m7)\n#define LOAD_MSG_9_2(b0, b1) b0 = _mm_set_epi64x(m4, m2); b1 = _mm_set_epi64x(m5, m6)\n#define LOAD_MSG_9_3(b0, b1) b0 = _mm_set_epi64x(m9, m15); b1 = _mm_set_epi64x(m13, m3)\n#define LOAD_MSG_9_4(b0, b1) b0 = _mm_set_epi64x(m14, m11); b1 = _mm_set_epi64x(m0, m12)\n#define LOAD_MSG_10_1(b0, b1) b0 = _mm_set_epi64x(m2, m0); b1 = _mm_set_epi64x(m6, m4)\n#define LOAD_MSG_10_2(b0, b1) b0 = _mm_set_epi64x(m3, m1); b1 = _mm_set_epi64x(m7, m5)\n#define LOAD_MSG_10_3(b0, b1) b0 = _mm_set_epi64x(m10, m8); b1 = _mm_set_epi64x(m14, m12)\n#define LOAD_MSG_10_4(b0, b1) b0 = _mm_set_epi64x(m11, m9); b1 = _mm_set_epi64x(m15, m13)\n#define LOAD_MSG_11_1(b0, b1) b0 = _mm_set_epi64x(m4, m14); b1 = _mm_set_epi64x(m13, m9)\n#define LOAD_MSG_11_2(b0, b1) b0 = _mm_set_epi64x(m8, m10); b1 = _mm_set_epi64x(m6, m15)\n#define LOAD_MSG_11_3(b0, b1) b0 = _mm_set_epi64x(m0, m1); b1 = _mm_set_epi64x(m5, m11)\n#define LOAD_MSG_11_4(b0, b1) b0 = _mm_set_epi64x(m2, m12); b1 = _mm_set_epi64x(m3, m7)\n\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-load-sse41.h",
    "content": "/*\n   BLAKE2 reference source code package - optimized C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#ifndef blake2b_load_sse41_H\n#define blake2b_load_sse41_H\n\n#define LOAD_MSG_0_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m0, m1); \\\nb1 = _mm_unpacklo_epi64(m2, m3); \\\n} while(0)\n\n\n#define LOAD_MSG_0_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m0, m1); \\\nb1 = _mm_unpackhi_epi64(m2, m3); \\\n} while(0)\n\n\n#define LOAD_MSG_0_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m4, m5); \\\nb1 = _mm_unpacklo_epi64(m6, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_0_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m4, m5); \\\nb1 = _mm_unpackhi_epi64(m6, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_1_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m7, m2); \\\nb1 = _mm_unpackhi_epi64(m4, m6); \\\n} while(0)\n\n\n#define LOAD_MSG_1_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m5, m4); \\\nb1 = _mm_alignr_epi8(m3, m7, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_1_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \\\nb1 = _mm_unpackhi_epi64(m5, m2); \\\n} while(0)\n\n\n#define LOAD_MSG_1_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m6, m1); \\\nb1 = _mm_unpackhi_epi64(m3, m1); \\\n} while(0)\n\n\n#define LOAD_MSG_2_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_alignr_epi8(m6, m5, 8); \\\nb1 = _mm_unpackhi_epi64(m2, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_2_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m4, m0); \\\nb1 = _mm_blend_epi16(m1, m6, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_2_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m5, m1, 0xF0); \\\nb1 = _mm_unpackhi_epi64(m3, m4); \\\n} while(0)\n\n\n#define LOAD_MSG_2_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m7, m3); \\\nb1 = _mm_alignr_epi8(m2, m0, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_3_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m3, m1); \\\nb1 = _mm_unpackhi_epi64(m6, m5); \\\n} while(0)\n\n\n#define LOAD_MSG_3_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m4, m0); \\\nb1 = _mm_unpacklo_epi64(m6, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_3_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m1, m2, 0xF0); \\\nb1 = _mm_blend_epi16(m2, m7, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_3_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m3, m5); \\\nb1 = _mm_unpacklo_epi64(m0, m4); \\\n} while(0)\n\n\n#define LOAD_MSG_4_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m4, m2); \\\nb1 = _mm_unpacklo_epi64(m1, m5); \\\n} while(0)\n\n\n#define LOAD_MSG_4_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m0, m3, 0xF0); \\\nb1 = _mm_blend_epi16(m2, m7, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_4_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m7, m5, 0xF0); \\\nb1 = _mm_blend_epi16(m3, m1, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_4_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_alignr_epi8(m6, m0, 8); \\\nb1 = _mm_blend_epi16(m4, m6, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_5_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m1, m3); \\\nb1 = _mm_unpacklo_epi64(m0, m4); \\\n} while(0)\n\n\n#define LOAD_MSG_5_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m6, m5); \\\nb1 = _mm_unpackhi_epi64(m5, m1); \\\n} while(0)\n\n\n#define LOAD_MSG_5_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m2, m3, 0xF0); \\\nb1 = _mm_unpackhi_epi64(m7, m0); \\\n} while(0)\n\n\n#define LOAD_MSG_5_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m6, m2); \\\nb1 = _mm_blend_epi16(m7, m4, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_6_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m6, m0, 0xF0); \\\nb1 = _mm_unpacklo_epi64(m7, m2); \\\n} while(0)\n\n\n#define LOAD_MSG_6_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m2, m7); \\\nb1 = _mm_alignr_epi8(m5, m6, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_6_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m0, m3); \\\nb1 = _mm_shuffle_epi32(m4, _MM_SHUFFLE(1,0,3,2)); \\\n} while(0)\n\n\n#define LOAD_MSG_6_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m3, m1); \\\nb1 = _mm_blend_epi16(m1, m5, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_7_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m6, m3); \\\nb1 = _mm_blend_epi16(m6, m1, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_7_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_alignr_epi8(m7, m5, 8); \\\nb1 = _mm_unpackhi_epi64(m0, m4); \\\n} while(0)\n\n\n#define LOAD_MSG_7_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m2, m7); \\\nb1 = _mm_unpacklo_epi64(m4, m1); \\\n} while(0)\n\n\n#define LOAD_MSG_7_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m0, m2); \\\nb1 = _mm_unpacklo_epi64(m3, m5); \\\n} while(0)\n\n\n#define LOAD_MSG_8_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m3, m7); \\\nb1 = _mm_alignr_epi8(m0, m5, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_8_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m7, m4); \\\nb1 = _mm_alignr_epi8(m4, m1, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_8_3(b0, b1) \\\ndo \\\n{ \\\nb0 = m6; \\\nb1 = _mm_alignr_epi8(m5, m0, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_8_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_blend_epi16(m1, m3, 0xF0); \\\nb1 = m2; \\\n} while(0)\n\n\n#define LOAD_MSG_9_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m5, m4); \\\nb1 = _mm_unpackhi_epi64(m3, m0); \\\n} while(0)\n\n\n#define LOAD_MSG_9_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m1, m2); \\\nb1 = _mm_blend_epi16(m3, m2, 0xF0); \\\n} while(0)\n\n\n#define LOAD_MSG_9_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m7, m4); \\\nb1 = _mm_unpackhi_epi64(m1, m6); \\\n} while(0)\n\n\n#define LOAD_MSG_9_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_alignr_epi8(m7, m5, 8); \\\nb1 = _mm_unpacklo_epi64(m6, m0); \\\n} while(0)\n\n\n#define LOAD_MSG_10_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m0, m1); \\\nb1 = _mm_unpacklo_epi64(m2, m3); \\\n} while(0)\n\n\n#define LOAD_MSG_10_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m0, m1); \\\nb1 = _mm_unpackhi_epi64(m2, m3); \\\n} while(0)\n\n\n#define LOAD_MSG_10_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m4, m5); \\\nb1 = _mm_unpacklo_epi64(m6, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_10_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpackhi_epi64(m4, m5); \\\nb1 = _mm_unpackhi_epi64(m6, m7); \\\n} while(0)\n\n\n#define LOAD_MSG_11_1(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m7, m2); \\\nb1 = _mm_unpackhi_epi64(m4, m6); \\\n} while(0)\n\n\n#define LOAD_MSG_11_2(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m5, m4); \\\nb1 = _mm_alignr_epi8(m3, m7, 8); \\\n} while(0)\n\n\n#define LOAD_MSG_11_3(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_shuffle_epi32(m0, _MM_SHUFFLE(1,0,3,2)); \\\nb1 = _mm_unpackhi_epi64(m5, m2); \\\n} while(0)\n\n\n#define LOAD_MSG_11_4(b0, b1) \\\ndo \\\n{ \\\nb0 = _mm_unpacklo_epi64(m6, m1); \\\nb1 = _mm_unpackhi_epi64(m3, m1); \\\n} while(0)\n\n\n#endif\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-ref.c",
    "content": "/*\n   BLAKE2 reference source code package - C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#include <assert.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"blake2.h\"\n#include \"blake2-impl.h\"\n#include \"runtime.h\"\n\n#ifdef HAVE_TI_MODE\n# if defined(__SIZEOF_INT128__)\ntypedef unsigned __int128 uint128_t;\n# else\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n# endif\n#endif\n\nstatic blake2b_compress_fn blake2b_compress = blake2b_compress_ref;\n\nstatic const uint64_t blake2b_IV[8] =\n{\n  0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n  0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n  0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n  0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n};\n\n/* LCOV_EXCL_START */\nstatic inline int blake2b_set_lastnode( blake2b_state *S )\n{\n  S->f[1] = -1;\n  return 0;\n}\n/* LCOV_EXCL_STOP */\n#if 0\nstatic inline int blake2b_clear_lastnode( blake2b_state *S )\n{\n  S->f[1] = 0;\n  return 0;\n}\n#endif\n\nstatic inline int blake2b_set_lastblock( blake2b_state *S )\n{\n  if( S->last_node ) blake2b_set_lastnode( S );\n\n  S->f[0] = -1;\n  return 0;\n}\n#if 0\nstatic inline int blake2b_clear_lastblock( blake2b_state *S )\n{\n  if( S->last_node ) blake2b_clear_lastnode( S );\n\n  S->f[0] = 0;\n  return 0;\n}\n#endif\nstatic inline int blake2b_increment_counter( blake2b_state *S, const uint64_t inc )\n{\n#ifdef HAVE_TI_MODE\n  uint128_t t = ( ( uint128_t )S->t[1] << 64 ) | S->t[0];\n  t += inc;\n  S->t[0] = ( uint64_t )( t >>  0 );\n  S->t[1] = ( uint64_t )( t >> 64 );\n#else\n  S->t[0] += inc;\n  S->t[1] += ( S->t[0] < inc );\n#endif\n  return 0;\n}\n\n// Parameter-related functions\n#if 0\nstatic inline int blake2b_param_set_digest_length( blake2b_param *P, const uint8_t digest_length )\n{\n  P->digest_length = digest_length;\n  return 0;\n}\n\nstatic inline int blake2b_param_set_fanout( blake2b_param *P, const uint8_t fanout )\n{\n  P->fanout = fanout;\n  return 0;\n}\n\nstatic inline int blake2b_param_set_max_depth( blake2b_param *P, const uint8_t depth )\n{\n  P->depth = depth;\n  return 0;\n}\n\nstatic inline int blake2b_param_set_leaf_length( blake2b_param *P, const uint32_t leaf_length )\n{\n  store32( &P->leaf_length, leaf_length );\n  return 0;\n}\n\nstatic inline int blake2b_param_set_node_offset( blake2b_param *P, const uint64_t node_offset )\n{\n  store64( &P->node_offset, node_offset );\n  return 0;\n}\n\nstatic inline int blake2b_param_set_node_depth( blake2b_param *P, const uint8_t node_depth )\n{\n  P->node_depth = node_depth;\n  return 0;\n}\n\nstatic inline int blake2b_param_set_inner_length( blake2b_param *P, const uint8_t inner_length )\n{\n  P->inner_length = inner_length;\n  return 0;\n}\n#endif\nstatic inline int blake2b_param_set_salt( blake2b_param *P, const uint8_t salt[BLAKE2B_SALTBYTES] )\n{\n  memcpy( P->salt, salt, BLAKE2B_SALTBYTES );\n  return 0;\n}\n\nstatic inline int blake2b_param_set_personal( blake2b_param *P, const uint8_t personal[BLAKE2B_PERSONALBYTES] )\n{\n  memcpy( P->personal, personal, BLAKE2B_PERSONALBYTES );\n  return 0;\n}\n\nstatic inline int blake2b_init0( blake2b_state *S )\n{\n  int i;\n  memset( S, 0, sizeof( blake2b_state ) );\n\n  for( i = 0; i < 8; ++i ) S->h[i] = blake2b_IV[i];\n\n  return 0;\n}\n\n/* init xors IV with input parameter block */\nint blake2b_init_param( blake2b_state *S, const blake2b_param *P )\n{\n  size_t i;\n  const uint8_t *p;\n\n  blake2b_init0( S );\n  p = ( const uint8_t * )( P );\n\n  /* IV XOR ParamBlock */\n  for( i = 0; i < 8; ++i )\n    S->h[i] ^= load64( p + sizeof( S->h[i] ) * i );\n\n  return 0;\n}\n\nint blake2b_init( blake2b_state *S, const uint8_t outlen )\n{\n  blake2b_param P[1];\n\n  if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) abort();\n\n  P->digest_length = outlen;\n  P->key_length    = 0;\n  P->fanout        = 1;\n  P->depth         = 1;\n  store32( &P->leaf_length, 0 );\n  store64( &P->node_offset, 0 );\n  P->node_depth    = 0;\n  P->inner_length  = 0;\n  memset( P->reserved, 0, sizeof( P->reserved ) );\n  memset( P->salt,     0, sizeof( P->salt ) );\n  memset( P->personal, 0, sizeof( P->personal ) );\n  return blake2b_init_param( S, P );\n}\n\nint blake2b_init_salt_personal( blake2b_state *S, const uint8_t outlen,\n                                const void *salt, const void *personal )\n{\n  blake2b_param P[1];\n\n  if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) abort();\n\n  P->digest_length = outlen;\n  P->key_length    = 0;\n  P->fanout        = 1;\n  P->depth         = 1;\n  store32( &P->leaf_length, 0 );\n  store64( &P->node_offset, 0 );\n  P->node_depth    = 0;\n  P->inner_length  = 0;\n  memset( P->reserved, 0, sizeof( P->reserved ) );\n  if (salt != NULL) {\n    blake2b_param_set_salt( P, (const uint8_t *) salt );\n  } else {\n    memset( P->salt, 0, sizeof( P->salt ) );\n  }\n  if (personal != NULL) {\n    blake2b_param_set_personal( P, (const uint8_t *) personal );\n  } else {\n    memset( P->personal, 0, sizeof( P->personal ) );\n  }\n  return blake2b_init_param( S, P );\n}\n\nint blake2b_init_key( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen )\n{\n  blake2b_param P[1];\n\n  if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) abort();\n\n  if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) abort();\n\n  P->digest_length = outlen;\n  P->key_length    = keylen;\n  P->fanout        = 1;\n  P->depth         = 1;\n  store32( &P->leaf_length, 0 );\n  store64( &P->node_offset, 0 );\n  P->node_depth    = 0;\n  P->inner_length  = 0;\n  memset( P->reserved, 0, sizeof( P->reserved ) );\n  memset( P->salt,     0, sizeof( P->salt ) );\n  memset( P->personal, 0, sizeof( P->personal ) );\n\n  if( blake2b_init_param( S, P ) < 0 ) abort();\n\n  {\n    uint8_t block[BLAKE2B_BLOCKBYTES];\n    memset( block, 0, BLAKE2B_BLOCKBYTES );\n    memcpy( block, key, keylen );\n    blake2b_update( S, block, BLAKE2B_BLOCKBYTES );\n    secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */\n  }\n  return 0;\n}\n\nint blake2b_init_key_salt_personal( blake2b_state *S, const uint8_t outlen, const void *key, const uint8_t keylen,\n                                    const void *salt, const void *personal )\n{\n  blake2b_param P[1];\n\n  if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) abort();\n\n  if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) abort();\n\n  P->digest_length = outlen;\n  P->key_length    = keylen;\n  P->fanout        = 1;\n  P->depth         = 1;\n  store32( &P->leaf_length, 0 );\n  store64( &P->node_offset, 0 );\n  P->node_depth    = 0;\n  P->inner_length  = 0;\n  memset( P->reserved, 0, sizeof( P->reserved ) );\n  if (salt != NULL) {\n    blake2b_param_set_salt( P, (const uint8_t *) salt );\n  } else {\n    memset( P->salt, 0, sizeof( P->salt ) );\n  }\n  if (personal != NULL) {\n    blake2b_param_set_personal( P, (const uint8_t *) personal );\n  } else {\n    memset( P->personal, 0, sizeof( P->personal ) );\n  }\n\n  if( blake2b_init_param( S, P ) < 0 ) abort();\n\n  {\n    uint8_t block[BLAKE2B_BLOCKBYTES];\n    memset( block, 0, BLAKE2B_BLOCKBYTES );\n    memcpy( block, key, keylen );\n    blake2b_update( S, block, BLAKE2B_BLOCKBYTES );\n    secure_zero_memory( block, BLAKE2B_BLOCKBYTES ); /* Burn the key from stack */\n  }\n  return 0;\n}\n\n/* inlen now in bytes */\nint blake2b_update( blake2b_state *S, const uint8_t *in, uint64_t inlen )\n{\n  while( inlen > 0 )\n  {\n    size_t left = S->buflen;\n    size_t fill = 2 * BLAKE2B_BLOCKBYTES - left;\n\n    if( inlen > fill )\n    {\n      memcpy( S->buf + left, in, fill ); // Fill buffer\n      S->buflen += fill;\n      blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );\n      blake2b_compress( S, S->buf ); // Compress\n      memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); // Shift buffer left\n      S->buflen -= BLAKE2B_BLOCKBYTES;\n      in += fill;\n      inlen -= fill;\n    }\n    else // inlen <= fill\n    {\n      memcpy( S->buf + left, in, inlen );\n      S->buflen += inlen; // Be lazy, do not compress\n      in += inlen;\n      inlen -= inlen;\n    }\n  }\n\n  return 0;\n}\n\nint blake2b_final( blake2b_state *S, uint8_t *out, uint8_t outlen )\n{\n  if( !outlen || outlen > BLAKE2B_OUTBYTES ) {\n    abort();\n  }\n  if( S->buflen > BLAKE2B_BLOCKBYTES )\n  {\n    blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES );\n    blake2b_compress( S, S->buf );\n    S->buflen -= BLAKE2B_BLOCKBYTES;\n    assert( S->buflen <= BLAKE2B_BLOCKBYTES );\n    memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, S->buflen );\n  }\n\n  blake2b_increment_counter( S, S->buflen );\n  blake2b_set_lastblock( S );\n  memset( S->buf + S->buflen, 0, 2 * BLAKE2B_BLOCKBYTES - S->buflen ); /* Padding */\n  blake2b_compress( S, S->buf );\n\n#ifdef NATIVE_LITTLE_ENDIAN\n  memcpy( out, &S->h[0], outlen );\n#else\n  {\n    uint8_t buffer[BLAKE2B_OUTBYTES];\n    int     i;\n\n    for( i = 0; i < 8; ++i ) /* Output full hash to temp buffer */\n      store64( buffer + sizeof( S->h[i] ) * i, S->h[i] );\n    memcpy( out, buffer, outlen );\n  }\n#endif\n  return 0;\n}\n\n/* inlen, at least, should be uint64_t. Others can be size_t. */\nint blake2b( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen )\n{\n  blake2b_state S[1];\n\n  /* Verify parameters */\n  if( NULL == in && inlen > 0 ) abort();\n\n  if( NULL == out ) abort();\n\n  if( !outlen || outlen > BLAKE2B_OUTBYTES ) abort();\n\n  if( NULL == key && keylen > 0 ) abort();\n\n  if( keylen > BLAKE2B_KEYBYTES ) abort();\n\n  if( keylen > 0 )\n  {\n    if( blake2b_init_key( S, outlen, key, keylen ) < 0 ) abort();\n  }\n  else\n  {\n    if( blake2b_init( S, outlen ) < 0 ) abort();\n  }\n\n  blake2b_update( S, ( const uint8_t * )in, inlen );\n  blake2b_final( S, out, outlen );\n  return 0;\n}\n\nint blake2b_salt_personal( uint8_t *out, const void *in, const void *key, const uint8_t outlen, const uint64_t inlen, uint8_t keylen,\n                           const void *salt, const void *personal )\n{\n  blake2b_state S[1];\n\n  /* Verify parameters */\n  if( NULL == in && inlen > 0 ) abort();\n\n  if( NULL == out ) abort();\n\n  if( !outlen || outlen > BLAKE2B_OUTBYTES ) abort();\n\n  if( NULL == key && keylen > 0 ) abort();\n\n  if( keylen > BLAKE2B_KEYBYTES ) abort();\n\n  if( keylen > 0 )\n  {\n    if( blake2b_init_key_salt_personal( S, outlen, key, keylen, salt, personal ) < 0 ) abort();\n  }\n  else\n  {\n    if( blake2b_init_salt_personal( S, outlen, salt, personal ) < 0 ) abort();\n  }\n\n  blake2b_update( S, ( const uint8_t * )in, inlen );\n  blake2b_final( S, out, outlen );\n  return 0;\n}\n\nint\nblake2b_pick_best_implementation(void)\n{\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H) && defined(HAVE_SMMINTRIN_H)) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n  if (sodium_runtime_has_sse41()) {\n    blake2b_compress = blake2b_compress_sse41;\n    return 0;\n  }\n#endif\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H)) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64)))\n  if (sodium_runtime_has_ssse3()) {\n    blake2b_compress = blake2b_compress_ssse3;\n    return 0;\n  }\n#endif\n  blake2b_compress = blake2b_compress_ref;\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/blake2b-round.h",
    "content": "/*\n   BLAKE2 reference source code package - optimized C implementations\n\n   Written in 2012 by Samuel Neves <sneves@dei.uc.pt>\n\n   To the extent possible under law, the author(s) have dedicated all copyright\n   and related and neighboring rights to this software to the public domain\n   worldwide. This software is distributed without any warranty.\n\n   You should have received a copy of the CC0 Public Domain Dedication along with\n   this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n*/\n\n#ifndef blake2b_round_H\n#define blake2b_round_H\n\n#ifndef BLAKE2_USE_SSSE3\n# error BLAKE2_USE_SSSE3 must be defined in order to use this file\n#endif\n\n#define LOADU(p)  _mm_loadu_si128( (const __m128i *)(const void *)(p) )\n#define STOREU(p,r) _mm_storeu_si128((__m128i *)(void *)(p), r)\n\n#define TOF(reg) _mm_castsi128_ps((reg))\n#define TOI(reg) _mm_castps_si128((reg))\n\n\n/* Microarchitecture-specific macros */\n#define _mm_roti_epi64(x, c) \\\n    (-(c) == 32) ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2,3,0,1))  \\\n    : (-(c) == 24) ? _mm_shuffle_epi8((x), r24) \\\n    : (-(c) == 16) ? _mm_shuffle_epi8((x), r16) \\\n    : (-(c) == 63) ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_add_epi64((x), (x)))  \\\n    : _mm_xor_si128(_mm_srli_epi64((x), -(c)), _mm_slli_epi64((x), 64-(-(c))))\n\n\n#define G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \\\n  row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \\\n  row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \\\n  \\\n  row4l = _mm_xor_si128(row4l, row1l); \\\n  row4h = _mm_xor_si128(row4h, row1h); \\\n  \\\n  row4l = _mm_roti_epi64(row4l, -32); \\\n  row4h = _mm_roti_epi64(row4h, -32); \\\n  \\\n  row3l = _mm_add_epi64(row3l, row4l); \\\n  row3h = _mm_add_epi64(row3h, row4h); \\\n  \\\n  row2l = _mm_xor_si128(row2l, row3l); \\\n  row2h = _mm_xor_si128(row2h, row3h); \\\n  \\\n  row2l = _mm_roti_epi64(row2l, -24); \\\n  row2h = _mm_roti_epi64(row2h, -24); \\\n\n#define G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1) \\\n  row1l = _mm_add_epi64(_mm_add_epi64(row1l, b0), row2l); \\\n  row1h = _mm_add_epi64(_mm_add_epi64(row1h, b1), row2h); \\\n  \\\n  row4l = _mm_xor_si128(row4l, row1l); \\\n  row4h = _mm_xor_si128(row4h, row1h); \\\n  \\\n  row4l = _mm_roti_epi64(row4l, -16); \\\n  row4h = _mm_roti_epi64(row4h, -16); \\\n  \\\n  row3l = _mm_add_epi64(row3l, row4l); \\\n  row3h = _mm_add_epi64(row3h, row4h); \\\n  \\\n  row2l = _mm_xor_si128(row2l, row3l); \\\n  row2h = _mm_xor_si128(row2h, row3h); \\\n  \\\n  row2l = _mm_roti_epi64(row2l, -63); \\\n  row2h = _mm_roti_epi64(row2h, -63); \\\n\n#define DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \\\n  t0 = _mm_alignr_epi8(row2h, row2l, 8); \\\n  t1 = _mm_alignr_epi8(row2l, row2h, 8); \\\n  row2l = t0; \\\n  row2h = t1; \\\n  \\\n  t0 = row3l; \\\n  row3l = row3h; \\\n  row3h = t0;    \\\n  \\\n  t0 = _mm_alignr_epi8(row4h, row4l, 8); \\\n  t1 = _mm_alignr_epi8(row4l, row4h, 8); \\\n  row4l = t1; \\\n  row4h = t0;\n\n#define UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h) \\\n  t0 = _mm_alignr_epi8(row2l, row2h, 8); \\\n  t1 = _mm_alignr_epi8(row2h, row2l, 8); \\\n  row2l = t0; \\\n  row2h = t1; \\\n  \\\n  t0 = row3l; \\\n  row3l = row3h; \\\n  row3h = t0; \\\n  \\\n  t0 = _mm_alignr_epi8(row4l, row4h, 8); \\\n  t1 = _mm_alignr_epi8(row4h, row4l, 8); \\\n  row4l = t1; \\\n  row4h = t0;\n\n#if defined(BLAKE2_USE_SSE41)\n#include \"blake2b-load-sse41.h\"\n#else\n#include \"blake2b-load-sse2.h\"\n#endif\n\n#define ROUND(r) \\\n  LOAD_MSG_ ##r ##_1(b0, b1); \\\n  G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \\\n  LOAD_MSG_ ##r ##_2(b0, b1); \\\n  G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \\\n  DIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h); \\\n  LOAD_MSG_ ##r ##_3(b0, b1); \\\n  G1(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \\\n  LOAD_MSG_ ##r ##_4(b0, b1); \\\n  G2(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h,b0,b1); \\\n  UNDIAGONALIZE(row1l,row2l,row3l,row4l,row1h,row2h,row3h,row4h);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/blake2/ref/generichash_blake2b.c",
    "content": "\n#include <assert.h>\n#include <limits.h>\n#include <stdint.h>\n\n#include \"crypto_generichash_blake2b.h\"\n#include \"blake2.h\"\n\nint\ncrypto_generichash_blake2b(unsigned char *out, size_t outlen,\n                           const unsigned char *in, unsigned long long inlen,\n                           const unsigned char *key, size_t keylen)\n{\n    if (outlen <= 0U || outlen > BLAKE2B_OUTBYTES ||\n        keylen > BLAKE2B_KEYBYTES || inlen > UINT64_MAX) {\n        return -1;\n    }\n    assert(outlen <= UINT8_MAX);\n    assert(keylen <= UINT8_MAX);\n\n    return blake2b((uint8_t *) out, in, key,\n                   (uint8_t) outlen, (uint64_t) inlen, (uint8_t) keylen);\n}\n\nint\ncrypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen,\n                                         const unsigned char *in, unsigned long long inlen,\n                                         const unsigned char *key, size_t keylen,\n                                         const unsigned char *salt,\n                                         const unsigned char *personal)\n{\n    if (outlen <= 0U || outlen > BLAKE2B_OUTBYTES ||\n        keylen > BLAKE2B_KEYBYTES || inlen > UINT64_MAX) {\n        return -1;\n    }\n    assert(outlen <= UINT8_MAX);\n    assert(keylen <= UINT8_MAX);\n\n    return blake2b_salt_personal((uint8_t *) out, in, key,\n                                 (uint8_t) outlen, (uint64_t) inlen, (uint8_t) keylen,\n                                 salt, personal);\n}\n\nint\ncrypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state,\n                                const unsigned char *key,\n                                const size_t keylen, const size_t outlen)\n{\n    if (outlen <= 0U || outlen > BLAKE2B_OUTBYTES ||\n        keylen > BLAKE2B_KEYBYTES) {\n        return -1;\n    }\n    assert(outlen <= UINT8_MAX);\n    assert(keylen <= UINT8_MAX);\n    if (key == NULL || keylen <= 0U) {\n        if (blake2b_init(state, (uint8_t) outlen) != 0) {\n            return -1; /* LCOV_EXCL_LINE */\n        }\n    } else if (blake2b_init_key(state, (uint8_t) outlen, key,\n                                (uint8_t) keylen) != 0) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    return 0;\n}\n\nint\ncrypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state,\n                                              const unsigned char *key,\n                                              const size_t keylen, const size_t outlen,\n                                              const unsigned char *salt,\n                                              const unsigned char *personal)\n{\n    if (outlen <= 0U || outlen > BLAKE2B_OUTBYTES ||\n        keylen > BLAKE2B_KEYBYTES) {\n        return -1;\n    }\n    assert(outlen <= UINT8_MAX);\n    assert(keylen <= UINT8_MAX);\n    if (key == NULL || keylen <= 0U) {\n        if (blake2b_init_salt_personal(state, (uint8_t) outlen,\n                                       salt, personal) != 0) {\n            return -1; /* LCOV_EXCL_LINE */\n        }\n    } else if (blake2b_init_key_salt_personal(state,\n                                              (uint8_t) outlen, key,\n                                              (uint8_t) keylen,\n                                              salt, personal) != 0) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    return 0;\n}\n\nint\ncrypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state,\n                                  const unsigned char *in,\n                                  unsigned long long inlen)\n{\n    return blake2b_update(state, (const uint8_t *) in, (uint64_t) inlen);\n}\n\nint\ncrypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state,\n                                 unsigned char *out,\n                                 const size_t outlen)\n{\n    assert(outlen <= UINT8_MAX);\n    return blake2b_final(state, (uint8_t *) out, (uint8_t) outlen);\n}\n\nint\n_crypto_generichash_blake2b_pick_best_implementation(void)\n{\n    return blake2b_pick_best_implementation();\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c",
    "content": "\n#include \"crypto_generichash.h\"\n\nsize_t\ncrypto_generichash_bytes_min(void)\n{\n    return crypto_generichash_BYTES_MIN;\n}\n\nsize_t\ncrypto_generichash_bytes_max(void)\n{\n    return crypto_generichash_BYTES_MAX;\n}\n\nsize_t\ncrypto_generichash_bytes(void)\n{\n    return crypto_generichash_BYTES;\n}\n\nsize_t\ncrypto_generichash_keybytes_min(void)\n{\n    return crypto_generichash_KEYBYTES_MIN;\n}\n\nsize_t\ncrypto_generichash_keybytes_max(void)\n{\n    return crypto_generichash_KEYBYTES_MAX;\n}\n\nsize_t\ncrypto_generichash_keybytes(void)\n{\n    return crypto_generichash_KEYBYTES;\n}\n\nconst char *\ncrypto_generichash_primitive(void)\n{\n    return crypto_generichash_PRIMITIVE;\n}\n\nsize_t\ncrypto_generichash_statebytes(void)\n{\n    return (sizeof(crypto_generichash_state) + (size_t) 63U) & ~(size_t) 63U;\n}\n\nint\ncrypto_generichash(unsigned char *out, size_t outlen, const unsigned char *in,\n                   unsigned long long inlen, const unsigned char *key,\n                   size_t keylen)\n{\n    return crypto_generichash_blake2b(out, outlen, in, inlen, key, keylen);\n}\n\nint\ncrypto_generichash_init(crypto_generichash_state *state,\n                        const unsigned char *key,\n                        const size_t keylen, const size_t outlen)\n{\n    return crypto_generichash_blake2b_init\n        ((crypto_generichash_blake2b_state *) state, key, keylen, outlen);\n}\n\nint\ncrypto_generichash_update(crypto_generichash_state *state,\n                          const unsigned char *in,\n                          unsigned long long inlen)\n{\n    return crypto_generichash_blake2b_update\n        ((crypto_generichash_blake2b_state *) state, in, inlen);\n}\n\nint\ncrypto_generichash_final(crypto_generichash_state *state,\n                         unsigned char *out, const size_t outlen)\n{\n    return crypto_generichash_blake2b_final\n        ((crypto_generichash_blake2b_state *) state, out, outlen);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_hash/crypto_hash.c",
    "content": "\n#include \"crypto_hash.h\"\n\nsize_t\ncrypto_hash_bytes(void)\n{\n    return crypto_hash_BYTES;\n}\n\nint\ncrypto_hash(unsigned char *out, const unsigned char *in,\n            unsigned long long inlen)\n{\n    return crypto_hash_sha512(out, in, inlen);\n}\n\nconst char *\ncrypto_hash_primitive(void) {\n    return crypto_hash_PRIMITIVE;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256.c",
    "content": "\n/*-\n * Copyright 2005,2007,2009 Colin Percival\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#include \"crypto_hash_sha256.h\"\n#include \"utils.h\"\n\n#include <sys/types.h>\n\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n/* Avoid namespace collisions with BSD <sys/endian.h>. */\n#define be32dec _sha256_be32dec\n#define be32enc _sha256_be32enc\n#define be64enc _sha256_be64enc\n\nstatic inline uint32_t\nbe32dec(const void *pp)\n{\n    const uint8_t *p = (uint8_t const *)pp;\n\n    return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) +\n            ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24));\n}\n\nstatic inline void\nbe32enc(void *pp, uint32_t x)\n{\n    uint8_t *p = (uint8_t *)pp;\n\n    p[3] = x & 0xff;\n    p[2] = (x >> 8) & 0xff;\n    p[1] = (x >> 16) & 0xff;\n    p[0] = (x >> 24) & 0xff;\n}\n\nstatic inline void\nbe64enc(void * pp, uint64_t x)\n{\n    uint8_t * p = (uint8_t *)pp;\n\n    p[7] = x & 0xff;\n    p[6] = (x >> 8) & 0xff;\n    p[5] = (x >> 16) & 0xff;\n    p[4] = (x >> 24) & 0xff;\n    p[3] = (x >> 32) & 0xff;\n    p[2] = (x >> 40) & 0xff;\n    p[1] = (x >> 48) & 0xff;\n    p[0] = (x >> 56) & 0xff;\n}\n\nstatic void\nbe32enc_vect(unsigned char *dst, const uint32_t *src, size_t len)\n{\n    size_t i;\n\n    for (i = 0; i < len / 4; i++) {\n        be32enc(dst + i * 4, src[i]);\n    }\n}\n\nstatic void\nbe32dec_vect(uint32_t *dst, const unsigned char *src, size_t len)\n{\n    size_t i;\n\n    for (i = 0; i < len / 4; i++) {\n        dst[i] = be32dec(src + i * 4);\n    }\n}\n\n#define Ch(x, y, z)     ((x & (y ^ z)) ^ z)\n#define Maj(x, y, z)    ((x & (y | z)) | (y & z))\n#define SHR(x, n)       (x >> n)\n#define ROTR(x, n)      ((x >> n) | (x << (32 - n)))\n#define S0(x)           (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))\n#define S1(x)           (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))\n#define s0(x)           (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3))\n#define s1(x)           (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10))\n\n#define RND(a, b, c, d, e, f, g, h, k)              \\\n    t0 = h + S1(e) + Ch(e, f, g) + k;               \\\n    t1 = S0(a) + Maj(a, b, c);                      \\\n    d += t0;                                        \\\n    h  = t0 + t1;\n\n#define RNDr(S, W, i, k)                    \\\n    RND(S[(64 - i) % 8], S[(65 - i) % 8],   \\\n        S[(66 - i) % 8], S[(67 - i) % 8],   \\\n        S[(68 - i) % 8], S[(69 - i) % 8],   \\\n        S[(70 - i) % 8], S[(71 - i) % 8],   \\\n        W[i] + k)\n\nstatic void\nSHA256_Transform(uint32_t *state, const unsigned char block[64])\n{\n    uint32_t W[64];\n    uint32_t S[8];\n    uint32_t t0, t1;\n    int i;\n\n    be32dec_vect(W, block, 64);\n    for (i = 16; i < 64; i++) {\n        W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];\n    }\n\n    memcpy(S, state, 32);\n\n    RNDr(S, W, 0, 0x428a2f98);\n    RNDr(S, W, 1, 0x71374491);\n    RNDr(S, W, 2, 0xb5c0fbcf);\n    RNDr(S, W, 3, 0xe9b5dba5);\n    RNDr(S, W, 4, 0x3956c25b);\n    RNDr(S, W, 5, 0x59f111f1);\n    RNDr(S, W, 6, 0x923f82a4);\n    RNDr(S, W, 7, 0xab1c5ed5);\n    RNDr(S, W, 8, 0xd807aa98);\n    RNDr(S, W, 9, 0x12835b01);\n    RNDr(S, W, 10, 0x243185be);\n    RNDr(S, W, 11, 0x550c7dc3);\n    RNDr(S, W, 12, 0x72be5d74);\n    RNDr(S, W, 13, 0x80deb1fe);\n    RNDr(S, W, 14, 0x9bdc06a7);\n    RNDr(S, W, 15, 0xc19bf174);\n    RNDr(S, W, 16, 0xe49b69c1);\n    RNDr(S, W, 17, 0xefbe4786);\n    RNDr(S, W, 18, 0x0fc19dc6);\n    RNDr(S, W, 19, 0x240ca1cc);\n    RNDr(S, W, 20, 0x2de92c6f);\n    RNDr(S, W, 21, 0x4a7484aa);\n    RNDr(S, W, 22, 0x5cb0a9dc);\n    RNDr(S, W, 23, 0x76f988da);\n    RNDr(S, W, 24, 0x983e5152);\n    RNDr(S, W, 25, 0xa831c66d);\n    RNDr(S, W, 26, 0xb00327c8);\n    RNDr(S, W, 27, 0xbf597fc7);\n    RNDr(S, W, 28, 0xc6e00bf3);\n    RNDr(S, W, 29, 0xd5a79147);\n    RNDr(S, W, 30, 0x06ca6351);\n    RNDr(S, W, 31, 0x14292967);\n    RNDr(S, W, 32, 0x27b70a85);\n    RNDr(S, W, 33, 0x2e1b2138);\n    RNDr(S, W, 34, 0x4d2c6dfc);\n    RNDr(S, W, 35, 0x53380d13);\n    RNDr(S, W, 36, 0x650a7354);\n    RNDr(S, W, 37, 0x766a0abb);\n    RNDr(S, W, 38, 0x81c2c92e);\n    RNDr(S, W, 39, 0x92722c85);\n    RNDr(S, W, 40, 0xa2bfe8a1);\n    RNDr(S, W, 41, 0xa81a664b);\n    RNDr(S, W, 42, 0xc24b8b70);\n    RNDr(S, W, 43, 0xc76c51a3);\n    RNDr(S, W, 44, 0xd192e819);\n    RNDr(S, W, 45, 0xd6990624);\n    RNDr(S, W, 46, 0xf40e3585);\n    RNDr(S, W, 47, 0x106aa070);\n    RNDr(S, W, 48, 0x19a4c116);\n    RNDr(S, W, 49, 0x1e376c08);\n    RNDr(S, W, 50, 0x2748774c);\n    RNDr(S, W, 51, 0x34b0bcb5);\n    RNDr(S, W, 52, 0x391c0cb3);\n    RNDr(S, W, 53, 0x4ed8aa4a);\n    RNDr(S, W, 54, 0x5b9cca4f);\n    RNDr(S, W, 55, 0x682e6ff3);\n    RNDr(S, W, 56, 0x748f82ee);\n    RNDr(S, W, 57, 0x78a5636f);\n    RNDr(S, W, 58, 0x84c87814);\n    RNDr(S, W, 59, 0x8cc70208);\n    RNDr(S, W, 60, 0x90befffa);\n    RNDr(S, W, 61, 0xa4506ceb);\n    RNDr(S, W, 62, 0xbef9a3f7);\n    RNDr(S, W, 63, 0xc67178f2);\n\n    for (i = 0; i < 8; i++) {\n        state[i] += S[i];\n    }\n\n    sodium_memzero((void *) W, sizeof W);\n    sodium_memzero((void *) S, sizeof S);\n    sodium_memzero((void *) &t0, sizeof t0);\n    sodium_memzero((void *) &t1, sizeof t1);\n}\n\nstatic unsigned char PAD[64] = {\n    0x80, 0, 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, 0,\n    0, 0, 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, 0\n};\n\nstatic void\nSHA256_Pad(crypto_hash_sha256_state *state)\n{\n    unsigned char len[8];\n    uint32_t r, plen;\n\n    be64enc(len, state->count);\n\n    r = (state->count >> 3) & 0x3f;\n    plen = (r < 56) ? (56 - r) : (120 - r);\n    crypto_hash_sha256_update(state, PAD, (unsigned long long) plen);\n\n    crypto_hash_sha256_update(state, len, 8);\n}\n\nint\ncrypto_hash_sha256_init(crypto_hash_sha256_state *state)\n{\n    static const uint32_t sha256_initstate[8] = {\n        0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n        0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n    };\n\n    state->count = (uint64_t) 0U;\n    memcpy(state->state, sha256_initstate, sizeof sha256_initstate);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha256_update(crypto_hash_sha256_state *state,\n                          const unsigned char *in,\n                          unsigned long long inlen)\n{\n    uint32_t r;\n\n    if (inlen <= 0U) {\n        return 0;\n    }\n    r = (state->count >> 3) & 0x3f;\n    state->count += (uint64_t)(inlen) << 3;\n\n    if (inlen < 64 - r) {\n        memcpy(&state->buf[r], in, inlen);\n        return 0;\n    }\n    memcpy(&state->buf[r], in, 64 - r);\n    SHA256_Transform(state->state, state->buf);\n    in += 64 - r;\n    inlen -= 64 - r;\n\n    while (inlen >= 64) {\n        SHA256_Transform(state->state, in);\n        in += 64;\n        inlen -= 64;\n    }\n    memcpy(state->buf, in, inlen);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha256_final(crypto_hash_sha256_state *state,\n                         unsigned char *out)\n{\n    SHA256_Pad(state);\n    be32enc_vect(out, state->state, 32);\n    sodium_memzero((void *) state, sizeof *state);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha256(unsigned char *out, const unsigned char *in,\n                   unsigned long long inlen)\n{\n    crypto_hash_sha256_state state;\n\n    crypto_hash_sha256_init(&state);\n    crypto_hash_sha256_update(&state, in, inlen);\n    crypto_hash_sha256_final(&state, out);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_hash/sha256/hash_sha256_api.c",
    "content": "#include \"crypto_hash_sha256.h\"\n\nsize_t\ncrypto_hash_sha256_bytes(void) {\n    return crypto_hash_sha256_BYTES;\n}\n\nsize_t\ncrypto_hash_sha256_statebytes(void) {\n    return sizeof(crypto_hash_sha256_state);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512.c",
    "content": "\n/*-\n * Copyright 2005,2007,2009 Colin Percival\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#include \"crypto_hash_sha512.h\"\n#include \"utils.h\"\n\n#include <sys/types.h>\n\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n/* Avoid namespace collisions with BSD <sys/endian.h>. */\n#define be64dec _sha512_be64dec\n#define be64enc _sha512_be64enc\n\nstatic inline uint64_t\nbe64dec(const void *pp)\n{\n    const uint8_t *p = (uint8_t const *)pp;\n\n    return ((uint64_t)(p[7]) + ((uint64_t)(p[6]) << 8) +\n            ((uint64_t)(p[5]) << 16) + ((uint64_t)(p[4]) << 24) +\n            ((uint64_t)(p[3]) << 32) + ((uint64_t)(p[2]) << 40) +\n            ((uint64_t)(p[1]) << 48) + ((uint64_t)(p[0]) << 56));\n}\n\nstatic inline void\nbe64enc(void *pp, uint64_t x)\n{\n    uint8_t *p = (uint8_t *)pp;\n\n    p[7] = x & 0xff;\n    p[6] = (x >> 8) & 0xff;\n    p[5] = (x >> 16) & 0xff;\n    p[4] = (x >> 24) & 0xff;\n    p[3] = (x >> 32) & 0xff;\n    p[2] = (x >> 40) & 0xff;\n    p[1] = (x >> 48) & 0xff;\n    p[0] = (x >> 56) & 0xff;\n}\n\nstatic void\nbe64enc_vect(unsigned char *dst, const uint64_t *src, size_t len)\n{\n    size_t i;\n\n    for (i = 0; i < len / 8; i++) {\n        be64enc(dst + i * 8, src[i]);\n    }\n}\n\nstatic void\nbe64dec_vect(uint64_t *dst, const unsigned char *src, size_t len)\n{\n    size_t i;\n\n    for (i = 0; i < len / 8; i++) {\n        dst[i] = be64dec(src + i * 8);\n    }\n}\n\n#define Ch(x, y, z)     ((x & (y ^ z)) ^ z)\n#define Maj(x, y, z)    ((x & (y | z)) | (y & z))\n#define SHR(x, n)       (x >> n)\n#define ROTR(x, n)      ((x >> n) | (x << (64 - n)))\n#define S0(x)           (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39))\n#define S1(x)           (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41))\n#define s0(x)           (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7))\n#define s1(x)           (ROTR(x, 19) ^ ROTR(x, 61) ^ SHR(x, 6))\n\n#define RND(a, b, c, d, e, f, g, h, k)              \\\n    t0 = h + S1(e) + Ch(e, f, g) + k;               \\\n    t1 = S0(a) + Maj(a, b, c);                      \\\n    d += t0;                                        \\\n    h  = t0 + t1;\n\n#define RNDr(S, W, i, k)                    \\\n    RND(S[(80 - i) % 8], S[(81 - i) % 8],   \\\n        S[(82 - i) % 8], S[(83 - i) % 8],   \\\n        S[(84 - i) % 8], S[(85 - i) % 8],   \\\n        S[(86 - i) % 8], S[(87 - i) % 8],   \\\n        W[i] + k)\n\nstatic void\nSHA512_Transform(uint64_t *state, const unsigned char block[128])\n{\n    uint64_t W[80];\n    uint64_t S[8];\n    uint64_t t0, t1;\n    int i;\n\n    be64dec_vect(W, block, 128);\n    for (i = 16; i < 80; i++) {\n        W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];\n    }\n\n    memcpy(S, state, 64);\n\n    RNDr(S, W, 0, 0x428a2f98d728ae22ULL);\n    RNDr(S, W, 1, 0x7137449123ef65cdULL);\n    RNDr(S, W, 2, 0xb5c0fbcfec4d3b2fULL);\n    RNDr(S, W, 3, 0xe9b5dba58189dbbcULL);\n    RNDr(S, W, 4, 0x3956c25bf348b538ULL);\n    RNDr(S, W, 5, 0x59f111f1b605d019ULL);\n    RNDr(S, W, 6, 0x923f82a4af194f9bULL);\n    RNDr(S, W, 7, 0xab1c5ed5da6d8118ULL);\n    RNDr(S, W, 8, 0xd807aa98a3030242ULL);\n    RNDr(S, W, 9, 0x12835b0145706fbeULL);\n    RNDr(S, W, 10, 0x243185be4ee4b28cULL);\n    RNDr(S, W, 11, 0x550c7dc3d5ffb4e2ULL);\n    RNDr(S, W, 12, 0x72be5d74f27b896fULL);\n    RNDr(S, W, 13, 0x80deb1fe3b1696b1ULL);\n    RNDr(S, W, 14, 0x9bdc06a725c71235ULL);\n    RNDr(S, W, 15, 0xc19bf174cf692694ULL);\n    RNDr(S, W, 16, 0xe49b69c19ef14ad2ULL);\n    RNDr(S, W, 17, 0xefbe4786384f25e3ULL);\n    RNDr(S, W, 18, 0x0fc19dc68b8cd5b5ULL);\n    RNDr(S, W, 19, 0x240ca1cc77ac9c65ULL);\n    RNDr(S, W, 20, 0x2de92c6f592b0275ULL);\n    RNDr(S, W, 21, 0x4a7484aa6ea6e483ULL);\n    RNDr(S, W, 22, 0x5cb0a9dcbd41fbd4ULL);\n    RNDr(S, W, 23, 0x76f988da831153b5ULL);\n    RNDr(S, W, 24, 0x983e5152ee66dfabULL);\n    RNDr(S, W, 25, 0xa831c66d2db43210ULL);\n    RNDr(S, W, 26, 0xb00327c898fb213fULL);\n    RNDr(S, W, 27, 0xbf597fc7beef0ee4ULL);\n    RNDr(S, W, 28, 0xc6e00bf33da88fc2ULL);\n    RNDr(S, W, 29, 0xd5a79147930aa725ULL);\n    RNDr(S, W, 30, 0x06ca6351e003826fULL);\n    RNDr(S, W, 31, 0x142929670a0e6e70ULL);\n    RNDr(S, W, 32, 0x27b70a8546d22ffcULL);\n    RNDr(S, W, 33, 0x2e1b21385c26c926ULL);\n    RNDr(S, W, 34, 0x4d2c6dfc5ac42aedULL);\n    RNDr(S, W, 35, 0x53380d139d95b3dfULL);\n    RNDr(S, W, 36, 0x650a73548baf63deULL);\n    RNDr(S, W, 37, 0x766a0abb3c77b2a8ULL);\n    RNDr(S, W, 38, 0x81c2c92e47edaee6ULL);\n    RNDr(S, W, 39, 0x92722c851482353bULL);\n    RNDr(S, W, 40, 0xa2bfe8a14cf10364ULL);\n    RNDr(S, W, 41, 0xa81a664bbc423001ULL);\n    RNDr(S, W, 42, 0xc24b8b70d0f89791ULL);\n    RNDr(S, W, 43, 0xc76c51a30654be30ULL);\n    RNDr(S, W, 44, 0xd192e819d6ef5218ULL);\n    RNDr(S, W, 45, 0xd69906245565a910ULL);\n    RNDr(S, W, 46, 0xf40e35855771202aULL);\n    RNDr(S, W, 47, 0x106aa07032bbd1b8ULL);\n    RNDr(S, W, 48, 0x19a4c116b8d2d0c8ULL);\n    RNDr(S, W, 49, 0x1e376c085141ab53ULL);\n    RNDr(S, W, 50, 0x2748774cdf8eeb99ULL);\n    RNDr(S, W, 51, 0x34b0bcb5e19b48a8ULL);\n    RNDr(S, W, 52, 0x391c0cb3c5c95a63ULL);\n    RNDr(S, W, 53, 0x4ed8aa4ae3418acbULL);\n    RNDr(S, W, 54, 0x5b9cca4f7763e373ULL);\n    RNDr(S, W, 55, 0x682e6ff3d6b2b8a3ULL);\n    RNDr(S, W, 56, 0x748f82ee5defb2fcULL);\n    RNDr(S, W, 57, 0x78a5636f43172f60ULL);\n    RNDr(S, W, 58, 0x84c87814a1f0ab72ULL);\n    RNDr(S, W, 59, 0x8cc702081a6439ecULL);\n    RNDr(S, W, 60, 0x90befffa23631e28ULL);\n    RNDr(S, W, 61, 0xa4506cebde82bde9ULL);\n    RNDr(S, W, 62, 0xbef9a3f7b2c67915ULL);\n    RNDr(S, W, 63, 0xc67178f2e372532bULL);\n    RNDr(S, W, 64, 0xca273eceea26619cULL);\n    RNDr(S, W, 65, 0xd186b8c721c0c207ULL);\n    RNDr(S, W, 66, 0xeada7dd6cde0eb1eULL);\n    RNDr(S, W, 67, 0xf57d4f7fee6ed178ULL);\n    RNDr(S, W, 68, 0x06f067aa72176fbaULL);\n    RNDr(S, W, 69, 0x0a637dc5a2c898a6ULL);\n    RNDr(S, W, 70, 0x113f9804bef90daeULL);\n    RNDr(S, W, 71, 0x1b710b35131c471bULL);\n    RNDr(S, W, 72, 0x28db77f523047d84ULL);\n    RNDr(S, W, 73, 0x32caab7b40c72493ULL);\n    RNDr(S, W, 74, 0x3c9ebe0a15c9bebcULL);\n    RNDr(S, W, 75, 0x431d67c49c100d4cULL);\n    RNDr(S, W, 76, 0x4cc5d4becb3e42b6ULL);\n    RNDr(S, W, 77, 0x597f299cfc657e2aULL);\n    RNDr(S, W, 78, 0x5fcb6fab3ad6faecULL);\n    RNDr(S, W, 79, 0x6c44198c4a475817ULL);\n\n    for (i = 0; i < 8; i++) {\n        state[i] += S[i];\n    }\n\n    sodium_memzero((void *) W, sizeof W);\n    sodium_memzero((void *) S, sizeof S);\n    sodium_memzero((void *) &t0, sizeof t0);\n    sodium_memzero((void *) &t1, sizeof t1);\n}\n\nstatic unsigned char PAD[128] = {\n    0x80, 0, 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, 0,\n    0, 0, 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, 0,\n    0, 0, 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, 0,\n    0, 0, 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, 0\n};\n\nstatic void\nSHA512_Pad(crypto_hash_sha512_state *state)\n{\n    unsigned char len[16];\n    uint64_t r, plen;\n\n    be64enc_vect(len, state->count, 16);\n\n    r = (state->count[1] >> 3) & 0x7f;\n    plen = (r < 112) ? (112 - r) : (240 - r);\n    crypto_hash_sha512_update(state, PAD, (unsigned long long) plen);\n\n    crypto_hash_sha512_update(state, len, 16);\n}\n\nint\ncrypto_hash_sha512_init(crypto_hash_sha512_state *state)\n{\n    static const uint64_t sha512_initstate[8] = {\n        0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n        0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n        0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n        0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n    };\n\n    state->count[0] = state->count[1] = (uint64_t) 0U;\n    memcpy(state->state, sha512_initstate, sizeof sha512_initstate);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha512_update(crypto_hash_sha512_state *state,\n                          const unsigned char *in,\n                          unsigned long long inlen)\n{\n    uint64_t bitlen[2];\n    uint64_t r;\n    const unsigned char *src = in;\n\n    r = (state->count[1] >> 3) & 0x7f;\n\n    bitlen[1] = ((uint64_t)inlen) << 3;\n    bitlen[0] = ((uint64_t)inlen) >> 61;\n\n    /* LCOV_EXCL_START */\n    if ((state->count[1] += bitlen[1]) < bitlen[1]) {\n        state->count[0]++;\n    }\n    /* LCOV_EXCL_STOP */\n    state->count[0] += bitlen[0];\n\n    if (inlen < 128 - r) {\n        memcpy(&state->buf[r], src, inlen);\n        return 0;\n    }\n    memcpy(&state->buf[r], src, 128 - r);\n    SHA512_Transform(state->state, state->buf);\n    src += 128 - r;\n    inlen -= 128 - r;\n\n    while (inlen >= 128) {\n        SHA512_Transform(state->state, src);\n        src += 128;\n        inlen -= 128;\n    }\n    memcpy(state->buf, src, inlen);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha512_final(crypto_hash_sha512_state *state,\n                         unsigned char *out)\n{\n    SHA512_Pad(state);\n    be64enc_vect(out, state->state, 64);\n    sodium_memzero((void *) state, sizeof *state);\n\n    return 0;\n}\n\nint\ncrypto_hash_sha512(unsigned char *out, const unsigned char *in,\n                   unsigned long long inlen)\n{\n    crypto_hash_sha512_state state;\n\n    crypto_hash_sha512_init(&state);\n    crypto_hash_sha512_update(&state, in, inlen);\n    crypto_hash_sha512_final(&state, out);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_hash/sha512/hash_sha512_api.c",
    "content": "#include \"crypto_hash_sha512.h\"\n\nsize_t\ncrypto_hash_sha512_bytes(void) {\n    return crypto_hash_sha512_BYTES;\n}\n\nsize_t\ncrypto_hash_sha512_statebytes(void) {\n    return sizeof(crypto_hash_sha512_state);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c",
    "content": "\n#include \"crypto_onetimeauth.h\"\n\nsize_t\ncrypto_onetimeauth_statebytes(void)\n{\n    return sizeof(crypto_onetimeauth_state);\n}\n\nsize_t\ncrypto_onetimeauth_bytes(void)\n{\n    return crypto_onetimeauth_BYTES;\n}\n\nsize_t\ncrypto_onetimeauth_keybytes(void)\n{\n    return crypto_onetimeauth_KEYBYTES;\n}\n\nint\ncrypto_onetimeauth(unsigned char *out, const unsigned char *in,\n                   unsigned long long inlen, const unsigned char *k)\n{\n    return crypto_onetimeauth_poly1305(out, in, inlen, k);\n}\n\nint\ncrypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in,\n                          unsigned long long inlen, const unsigned char *k)\n{\n    return crypto_onetimeauth_poly1305_verify(h, in, inlen, k);\n}\n\nint\ncrypto_onetimeauth_init(crypto_onetimeauth_state *state,\n                        const unsigned char *key)\n{\n    return crypto_onetimeauth_poly1305_init\n        ((crypto_onetimeauth_poly1305_state *) state, key);\n}\n\nint\ncrypto_onetimeauth_update(crypto_onetimeauth_state *state,\n                          const unsigned char *in,\n                          unsigned long long inlen)\n{\n    return crypto_onetimeauth_poly1305_update\n        ((crypto_onetimeauth_poly1305_state *) state, in, inlen);\n}\n\nint\ncrypto_onetimeauth_final(crypto_onetimeauth_state *state,\n                         unsigned char *out)\n{\n    return crypto_onetimeauth_poly1305_final\n        ((crypto_onetimeauth_poly1305_state *) state, out);\n}\n\nconst char *\ncrypto_onetimeauth_primitive(void)\n{\n    return crypto_onetimeauth_PRIMITIVE;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c",
    "content": "\n#include \"crypto_verify_16.h\"\n#include \"utils.h\"\n#include \"poly1305_donna.h\"\n#ifdef HAVE_TI_MODE\n# include \"poly1305_donna64.h\"\n#else\n# include \"poly1305_donna32.h\"\n#endif\n#include \"../onetimeauth_poly1305.h\"\n\nstatic void\npoly1305_update(poly1305_state_internal_t *st, const unsigned char *m,\n                unsigned long long bytes)\n{\n    unsigned long long i;\n\n    /* handle leftover */\n    if (st->leftover) {\n        unsigned long long want = (poly1305_block_size - st->leftover);\n\n        if (want > bytes)\n            want = bytes;\n        for (i = 0; i < want; i++)\n            st->buffer[st->leftover + i] = m[i];\n        bytes -= want;\n        m += want;\n        st->leftover += want;\n        if (st->leftover < poly1305_block_size)\n            return;\n        poly1305_blocks(st, st->buffer, poly1305_block_size);\n        st->leftover = 0;\n    }\n\n    /* process full blocks */\n    if (bytes >= poly1305_block_size) {\n        unsigned long long want = (bytes & ~(poly1305_block_size - 1));\n\n        poly1305_blocks(st, m, want);\n        m += want;\n        bytes -= want;\n    }\n\n    /* store leftover */\n    if (bytes) {\n        for (i = 0; i < bytes; i++) {\n            st->buffer[st->leftover + i] = m[i];\n        }\n        st->leftover += bytes;\n    }\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_donna(unsigned char *out, const unsigned char *m,\n                                  unsigned long long inlen,\n                                  const unsigned char *key)\n{\n    CRYPTO_ALIGN(64) poly1305_state_internal_t state;\n\n    poly1305_init(&state, key);\n    poly1305_update(&state, m, inlen);\n    poly1305_finish(&state, out);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_donna_init(crypto_onetimeauth_poly1305_state *state,\n                                       const unsigned char *key)\n{\n    (void) sizeof(int[sizeof (crypto_onetimeauth_poly1305_state) >=\n                      sizeof (poly1305_state_internal_t) ? 1 : -1]);\n    poly1305_init((poly1305_state_internal_t *)(void *) state, key);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_donna_update(crypto_onetimeauth_poly1305_state *state,\n                                         const unsigned char *in,\n                                         unsigned long long inlen)\n{\n    poly1305_update((poly1305_state_internal_t *)(void *) state, in, inlen);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_donna_final(crypto_onetimeauth_poly1305_state *state,\n                                        unsigned char *out)\n{\n    poly1305_finish((poly1305_state_internal_t *)(void *) state, out);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_donna_verify(const unsigned char *h,\n                                         const unsigned char *in,\n                                         unsigned long long inlen,\n                                         const unsigned char *k)\n{\n    unsigned char correct[16];\n\n    crypto_onetimeauth_poly1305_donna(correct,in,inlen,k);\n\n    return crypto_verify_16(h,correct);\n}\n\nstruct crypto_onetimeauth_poly1305_implementation\ncrypto_onetimeauth_poly1305_donna_implementation = {\n    SODIUM_C99(.onetimeauth =) crypto_onetimeauth_poly1305_donna,\n    SODIUM_C99(.onetimeauth_verify =) crypto_onetimeauth_poly1305_donna_verify,\n    SODIUM_C99(.onetimeauth_init =) crypto_onetimeauth_poly1305_donna_init,\n    SODIUM_C99(.onetimeauth_update =) crypto_onetimeauth_poly1305_donna_update,\n    SODIUM_C99(.onetimeauth_final =) crypto_onetimeauth_poly1305_donna_final\n};\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.h",
    "content": "#ifndef poly1305_donna_H\n#define poly1305_donna_H\n\n#include <stddef.h>\n\n#include \"crypto_onetimeauth_poly1305.h\"\n\nextern struct crypto_onetimeauth_poly1305_implementation\n    crypto_onetimeauth_poly1305_donna_implementation;\n\nstatic int crypto_onetimeauth_poly1305_donna(unsigned char *out,\n                                             const unsigned char *in,\n                                             unsigned long long inlen,\n                                             const unsigned char *k);\n\nstatic int crypto_onetimeauth_poly1305_donna_verify(const unsigned char *h,\n                                                    const unsigned char *in,\n                                                    unsigned long long inlen,\n                                                    const unsigned char *k);\n\nstatic int crypto_onetimeauth_poly1305_donna_init(crypto_onetimeauth_poly1305_state *state,\n                                                  const unsigned char *key);\n\nstatic int crypto_onetimeauth_poly1305_donna_update(crypto_onetimeauth_poly1305_state *state,\n                                                    const unsigned char *in,\n                                                    unsigned long long inlen);\n\nstatic int crypto_onetimeauth_poly1305_donna_final(crypto_onetimeauth_poly1305_state *state,\n                                                   unsigned char *out);\n\n#endif /* poly1305_donna_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna32.h",
    "content": "/*\n        poly1305 implementation using 32 bit * 32 bit = 64 bit multiplication and 64 bit addition\n*/\n\n#if defined(_MSC_VER)\n# define POLY1305_NOINLINE __declspec(noinline)\n#elif defined(__GNUC__)\n# define POLY1305_NOINLINE __attribute__((noinline))\n#else\n# define POLY1305_NOINLINE\n#endif\n\n#define poly1305_block_size 16\n\n/* 17 + sizeof(unsigned long long) + 14*sizeof(unsigned long) */\ntypedef struct poly1305_state_internal_t {\n        unsigned long r[5];\n        unsigned long h[5];\n        unsigned long pad[4];\n        unsigned long long leftover;\n        unsigned char buffer[poly1305_block_size];\n        unsigned char final;\n} poly1305_state_internal_t;\n\n/* interpret four 8 bit unsigned integers as a 32 bit unsigned integer in little endian */\nstatic unsigned long\nU8TO32(const unsigned char *p)\n{\n        return\n        (((unsigned long)(p[0] & 0xff)      ) |\n         ((unsigned long)(p[1] & 0xff) <<  8) |\n         ((unsigned long)(p[2] & 0xff) << 16) |\n         ((unsigned long)(p[3] & 0xff) << 24));\n}\n\n/* store a 32 bit unsigned integer as four 8 bit unsigned integers in little endian */\nstatic void\nU32TO8(unsigned char *p, unsigned long v)\n{\n        p[0] = (v      ) & 0xff;\n        p[1] = (v >>  8) & 0xff;\n        p[2] = (v >> 16) & 0xff;\n        p[3] = (v >> 24) & 0xff;\n}\n\nstatic void\npoly1305_init(poly1305_state_internal_t *st, const unsigned char key[32])\n{\n        /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */\n        st->r[0] = (U8TO32(&key[ 0])     ) & 0x3ffffff;\n        st->r[1] = (U8TO32(&key[ 3]) >> 2) & 0x3ffff03;\n        st->r[2] = (U8TO32(&key[ 6]) >> 4) & 0x3ffc0ff;\n        st->r[3] = (U8TO32(&key[ 9]) >> 6) & 0x3f03fff;\n        st->r[4] = (U8TO32(&key[12]) >> 8) & 0x00fffff;\n\n        /* h = 0 */\n        st->h[0] = 0;\n        st->h[1] = 0;\n        st->h[2] = 0;\n        st->h[3] = 0;\n        st->h[4] = 0;\n\n        /* save pad for later */\n        st->pad[0] = U8TO32(&key[16]);\n        st->pad[1] = U8TO32(&key[20]);\n        st->pad[2] = U8TO32(&key[24]);\n        st->pad[3] = U8TO32(&key[28]);\n\n        st->leftover = 0;\n        st->final = 0;\n}\n\nstatic void\npoly1305_blocks(poly1305_state_internal_t *st, const unsigned char *m, unsigned long long bytes)\n{\n        const unsigned long hibit = (st->final) ? 0 : (1 << 24); /* 1 << 128 */\n        unsigned long r0,r1,r2,r3,r4;\n        unsigned long s1,s2,s3,s4;\n        unsigned long h0,h1,h2,h3,h4;\n        unsigned long long d0,d1,d2,d3,d4;\n        unsigned long c;\n\n        r0 = st->r[0];\n        r1 = st->r[1];\n        r2 = st->r[2];\n        r3 = st->r[3];\n        r4 = st->r[4];\n\n        s1 = r1 * 5;\n        s2 = r2 * 5;\n        s3 = r3 * 5;\n        s4 = r4 * 5;\n\n        h0 = st->h[0];\n        h1 = st->h[1];\n        h2 = st->h[2];\n        h3 = st->h[3];\n        h4 = st->h[4];\n\n        while (bytes >= poly1305_block_size) {\n                /* h += m[i] */\n                h0 += (U8TO32(m+ 0)     ) & 0x3ffffff;\n                h1 += (U8TO32(m+ 3) >> 2) & 0x3ffffff;\n                h2 += (U8TO32(m+ 6) >> 4) & 0x3ffffff;\n                h3 += (U8TO32(m+ 9) >> 6) & 0x3ffffff;\n                h4 += (U8TO32(m+12) >> 8) | hibit;\n\n                /* h *= r */\n                d0 = ((unsigned long long)h0 * r0) + ((unsigned long long)h1 * s4) + ((unsigned long long)h2 * s3) + ((unsigned long long)h3 * s2) + ((unsigned long long)h4 * s1);\n                d1 = ((unsigned long long)h0 * r1) + ((unsigned long long)h1 * r0) + ((unsigned long long)h2 * s4) + ((unsigned long long)h3 * s3) + ((unsigned long long)h4 * s2);\n                d2 = ((unsigned long long)h0 * r2) + ((unsigned long long)h1 * r1) + ((unsigned long long)h2 * r0) + ((unsigned long long)h3 * s4) + ((unsigned long long)h4 * s3);\n                d3 = ((unsigned long long)h0 * r3) + ((unsigned long long)h1 * r2) + ((unsigned long long)h2 * r1) + ((unsigned long long)h3 * r0) + ((unsigned long long)h4 * s4);\n                d4 = ((unsigned long long)h0 * r4) + ((unsigned long long)h1 * r3) + ((unsigned long long)h2 * r2) + ((unsigned long long)h3 * r1) + ((unsigned long long)h4 * r0);\n\n                /* (partial) h %= p */\n                              c = (unsigned long)(d0 >> 26); h0 = (unsigned long)d0 & 0x3ffffff;\n                d1 += c;      c = (unsigned long)(d1 >> 26); h1 = (unsigned long)d1 & 0x3ffffff;\n                d2 += c;      c = (unsigned long)(d2 >> 26); h2 = (unsigned long)d2 & 0x3ffffff;\n                d3 += c;      c = (unsigned long)(d3 >> 26); h3 = (unsigned long)d3 & 0x3ffffff;\n                d4 += c;      c = (unsigned long)(d4 >> 26); h4 = (unsigned long)d4 & 0x3ffffff;\n                h0 += c * 5;  c =                (h0 >> 26); h0 =                h0 & 0x3ffffff;\n                h1 += c;\n\n                m += poly1305_block_size;\n                bytes -= poly1305_block_size;\n        }\n\n        st->h[0] = h0;\n        st->h[1] = h1;\n        st->h[2] = h2;\n        st->h[3] = h3;\n        st->h[4] = h4;\n}\n\nstatic POLY1305_NOINLINE void\npoly1305_finish(poly1305_state_internal_t *st, unsigned char mac[16])\n{\n        unsigned long h0,h1,h2,h3,h4,c;\n        unsigned long g0,g1,g2,g3,g4;\n        unsigned long long f;\n        unsigned long mask;\n\n        /* process the remaining block */\n        if (st->leftover) {\n                unsigned long long i = st->leftover;\n                st->buffer[i++] = 1;\n                for (; i < poly1305_block_size; i++)\n                        st->buffer[i] = 0;\n                st->final = 1;\n                poly1305_blocks(st, st->buffer, poly1305_block_size);\n        }\n\n        /* fully carry h */\n        h0 = st->h[0];\n        h1 = st->h[1];\n        h2 = st->h[2];\n        h3 = st->h[3];\n        h4 = st->h[4];\n\n                     c = h1 >> 26; h1 = h1 & 0x3ffffff;\n        h2 +=     c; c = h2 >> 26; h2 = h2 & 0x3ffffff;\n        h3 +=     c; c = h3 >> 26; h3 = h3 & 0x3ffffff;\n        h4 +=     c; c = h4 >> 26; h4 = h4 & 0x3ffffff;\n        h0 += c * 5; c = h0 >> 26; h0 = h0 & 0x3ffffff;\n        h1 +=     c;\n\n        /* compute h + -p */\n        g0 = h0 + 5; c = g0 >> 26; g0 &= 0x3ffffff;\n        g1 = h1 + c; c = g1 >> 26; g1 &= 0x3ffffff;\n        g2 = h2 + c; c = g2 >> 26; g2 &= 0x3ffffff;\n        g3 = h3 + c; c = g3 >> 26; g3 &= 0x3ffffff;\n        g4 = h4 + c - (1 << 26);\n\n        /* select h if h < p, or h + -p if h >= p */\n        mask = (g4 >> ((sizeof(unsigned long) * 8) - 1)) - 1;\n        g0 &= mask;\n        g1 &= mask;\n        g2 &= mask;\n        g3 &= mask;\n        g4 &= mask;\n        mask = ~mask;\n        h0 = (h0 & mask) | g0;\n        h1 = (h1 & mask) | g1;\n        h2 = (h2 & mask) | g2;\n        h3 = (h3 & mask) | g3;\n        h4 = (h4 & mask) | g4;\n\n        /* h = h % (2^128) */\n        h0 = ((h0      ) | (h1 << 26)) & 0xffffffff;\n        h1 = ((h1 >>  6) | (h2 << 20)) & 0xffffffff;\n        h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff;\n        h3 = ((h3 >> 18) | (h4 <<  8)) & 0xffffffff;\n\n        /* mac = (h + pad) % (2^128) */\n        f = (unsigned long long)h0 + st->pad[0]            ; h0 = (unsigned long)f;\n        f = (unsigned long long)h1 + st->pad[1] + (f >> 32); h1 = (unsigned long)f;\n        f = (unsigned long long)h2 + st->pad[2] + (f >> 32); h2 = (unsigned long)f;\n        f = (unsigned long long)h3 + st->pad[3] + (f >> 32); h3 = (unsigned long)f;\n\n        U32TO8(mac +  0, h0);\n        U32TO8(mac +  4, h1);\n        U32TO8(mac +  8, h2);\n        U32TO8(mac + 12, h3);\n\n        /* zero out the state */\n        sodium_memzero((void *)st, sizeof *st);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna64.h",
    "content": "/*\n        poly1305 implementation using 64 bit * 64 bit = 128 bit multiplication and 128 bit addition\n*/\n\n#if defined(__SIZEOF_INT128__)\ntypedef unsigned __int128 uint128_t;\n#else\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n#endif\n\n#define MUL(out, x, y) out = ((uint128_t)x * y)\n#define ADD(out, in) out += in\n#define ADDLO(out, in) out += in\n#define SHR(in, shift) (unsigned long long)(in >> (shift))\n#define LO(in) (unsigned long long)(in)\n\n#if defined(_MSC_VER)\n# define POLY1305_NOINLINE __declspec(noinline)\n#elif defined(__GNUC__)\n# define POLY1305_NOINLINE __attribute__((noinline))\n#else\n# define POLY1305_NOINLINE\n#endif\n\n#define poly1305_block_size 16\n\n/* 17 + sizeof(unsigned long long) + 8*sizeof(unsigned long long) */\ntypedef struct poly1305_state_internal_t {\n        unsigned long long r[3];\n        unsigned long long h[3];\n        unsigned long long pad[2];\n        unsigned long long leftover;\n        unsigned char buffer[poly1305_block_size];\n        unsigned char final;\n} poly1305_state_internal_t;\n\n/* interpret eight 8 bit unsigned integers as a 64 bit unsigned integer in little endian */\nstatic unsigned long long\nU8TO64(const unsigned char *p)\n{\n        return\n           (((unsigned long long)(p[0] & 0xff)      ) |\n            ((unsigned long long)(p[1] & 0xff) <<  8) |\n            ((unsigned long long)(p[2] & 0xff) << 16) |\n            ((unsigned long long)(p[3] & 0xff) << 24) |\n            ((unsigned long long)(p[4] & 0xff) << 32) |\n            ((unsigned long long)(p[5] & 0xff) << 40) |\n            ((unsigned long long)(p[6] & 0xff) << 48) |\n            ((unsigned long long)(p[7] & 0xff) << 56));\n}\n\n/* store a 64 bit unsigned integer as eight 8 bit unsigned integers in little endian */\nstatic void\nU64TO8(unsigned char *p, unsigned long long v)\n{\n        p[0] = (v      ) & 0xff;\n        p[1] = (v >>  8) & 0xff;\n        p[2] = (v >> 16) & 0xff;\n        p[3] = (v >> 24) & 0xff;\n        p[4] = (v >> 32) & 0xff;\n        p[5] = (v >> 40) & 0xff;\n        p[6] = (v >> 48) & 0xff;\n        p[7] = (v >> 56) & 0xff;\n}\n\nstatic void\npoly1305_init(poly1305_state_internal_t *st, const unsigned char key[32])\n{\n        unsigned long long t0,t1;\n\n        /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */\n        t0 = U8TO64(&key[0]);\n        t1 = U8TO64(&key[8]);\n\n        st->r[0] = ( t0                    ) & 0xffc0fffffff;\n        st->r[1] = ((t0 >> 44) | (t1 << 20)) & 0xfffffc0ffff;\n        st->r[2] = ((t1 >> 24)             ) & 0x00ffffffc0f;\n\n        /* h = 0 */\n        st->h[0] = 0;\n        st->h[1] = 0;\n        st->h[2] = 0;\n\n        /* save pad for later */\n        st->pad[0] = U8TO64(&key[16]);\n        st->pad[1] = U8TO64(&key[24]);\n\n        st->leftover = 0;\n        st->final = 0;\n}\n\nstatic void\npoly1305_blocks(poly1305_state_internal_t *st, const unsigned char *m, unsigned long long bytes)\n{\n        const unsigned long long hibit = (st->final) ? 0 : ((unsigned long long)1 << 40); /* 1 << 128 */\n        unsigned long long r0,r1,r2;\n        unsigned long long s1,s2;\n        unsigned long long h0,h1,h2;\n        unsigned long long c;\n        uint128_t d0,d1,d2,d;\n\n        r0 = st->r[0];\n        r1 = st->r[1];\n        r2 = st->r[2];\n\n        h0 = st->h[0];\n        h1 = st->h[1];\n        h2 = st->h[2];\n\n        s1 = r1 * (5 << 2);\n        s2 = r2 * (5 << 2);\n\n        while (bytes >= poly1305_block_size) {\n                unsigned long long t0,t1;\n\n                /* h += m[i] */\n                t0 = U8TO64(&m[0]);\n                t1 = U8TO64(&m[8]);\n\n                h0 += (( t0                    ) & 0xfffffffffff);\n                h1 += (((t0 >> 44) | (t1 << 20)) & 0xfffffffffff);\n                h2 += (((t1 >> 24)             ) & 0x3ffffffffff) | hibit;\n\n                /* h *= r */\n                MUL(d0, h0, r0); MUL(d, h1, s2); ADD(d0, d); MUL(d, h2, s1); ADD(d0, d);\n                MUL(d1, h0, r1); MUL(d, h1, r0); ADD(d1, d); MUL(d, h2, s2); ADD(d1, d);\n                MUL(d2, h0, r2); MUL(d, h1, r1); ADD(d2, d); MUL(d, h2, r0); ADD(d2, d);\n\n                /* (partial) h %= p */\n                              c = SHR(d0, 44); h0 = LO(d0) & 0xfffffffffff;\n                ADDLO(d1, c); c = SHR(d1, 44); h1 = LO(d1) & 0xfffffffffff;\n                ADDLO(d2, c); c = SHR(d2, 42); h2 = LO(d2) & 0x3ffffffffff;\n                h0  += c * 5; c = (h0 >> 44);  h0 =    h0  & 0xfffffffffff;\n                h1  += c;\n\n                m += poly1305_block_size;\n                bytes -= poly1305_block_size;\n        }\n\n        st->h[0] = h0;\n        st->h[1] = h1;\n        st->h[2] = h2;\n}\n\n\nstatic POLY1305_NOINLINE void\npoly1305_finish(poly1305_state_internal_t *st, unsigned char mac[16])\n{\n        unsigned long long h0,h1,h2,c;\n        unsigned long long g0,g1,g2;\n        unsigned long long t0,t1;\n\n        /* process the remaining block */\n        if (st->leftover) {\n                unsigned long long i = st->leftover;\n                st->buffer[i] = 1;\n                for (i = i + 1; i < poly1305_block_size; i++)\n                        st->buffer[i] = 0;\n                st->final = 1;\n                poly1305_blocks(st, st->buffer, poly1305_block_size);\n        }\n\n        /* fully carry h */\n        h0 = st->h[0];\n        h1 = st->h[1];\n        h2 = st->h[2];\n\n                     c = (h1 >> 44); h1 &= 0xfffffffffff;\n        h2 += c;     c = (h2 >> 42); h2 &= 0x3ffffffffff;\n        h0 += c * 5; c = (h0 >> 44); h0 &= 0xfffffffffff;\n        h1 += c;         c = (h1 >> 44); h1 &= 0xfffffffffff;\n        h2 += c;     c = (h2 >> 42); h2 &= 0x3ffffffffff;\n        h0 += c * 5; c = (h0 >> 44); h0 &= 0xfffffffffff;\n        h1 += c;\n\n        /* compute h + -p */\n        g0 = h0 + 5; c = (g0 >> 44); g0 &= 0xfffffffffff;\n        g1 = h1 + c; c = (g1 >> 44); g1 &= 0xfffffffffff;\n        g2 = h2 + c - ((unsigned long long)1 << 42);\n\n        /* select h if h < p, or h + -p if h >= p */\n        c = (g2 >> ((sizeof(unsigned long long) * 8) - 1)) - 1;\n        g0 &= c;\n        g1 &= c;\n        g2 &= c;\n        c = ~c;\n        h0 = (h0 & c) | g0;\n        h1 = (h1 & c) | g1;\n        h2 = (h2 & c) | g2;\n\n        /* h = (h + pad) */\n        t0 = st->pad[0];\n        t1 = st->pad[1];\n\n        h0 += (( t0                    ) & 0xfffffffffff)    ; c = (h0 >> 44); h0 &= 0xfffffffffff;\n        h1 += (((t0 >> 44) | (t1 << 20)) & 0xfffffffffff) + c; c = (h1 >> 44); h1 &= 0xfffffffffff;\n        h2 += (((t1 >> 24)             ) & 0x3ffffffffff) + c;                 h2 &= 0x3ffffffffff;\n\n        /* mac = h % (2^128) */\n        h0 = ((h0      ) | (h1 << 44));\n        h1 = ((h1 >> 20) | (h2 << 24));\n\n        U64TO8(&mac[0], h0);\n        U64TO8(&mac[8], h1);\n\n        /* zero out the state */\n        sodium_memzero((void *)st, sizeof *st);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c",
    "content": "\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"onetimeauth_poly1305.h\"\n#include \"runtime.h\"\n#include \"donna/poly1305_donna.h\"\n#if defined(HAVE_TI_MODE) && defined(HAVE_EMMINTRIN_H)\n# include \"sse2/poly1305_sse2.h\"\n#endif\n\nstatic const crypto_onetimeauth_poly1305_implementation *implementation =\n    &crypto_onetimeauth_poly1305_donna_implementation;\n\nint\ncrypto_onetimeauth_poly1305(unsigned char *out, const unsigned char *in,\n                            unsigned long long inlen, const unsigned char *k)\n{\n    return implementation->onetimeauth(out, in, inlen, k);\n}\n\nint\ncrypto_onetimeauth_poly1305_verify(const unsigned char *h,\n                                   const unsigned char *in,\n                                   unsigned long long inlen,\n                                   const unsigned char *k)\n{\n    return implementation->onetimeauth_verify(h, in, inlen, k);\n}\n\nint\ncrypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state,\n                                 const unsigned char *key)\n{\n    return implementation->onetimeauth_init(state, key);\n}\n\nint\ncrypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state,\n                                   const unsigned char *in,\n                                   unsigned long long inlen)\n{\n    return implementation->onetimeauth_update(state, in, inlen);\n}\n\nint\ncrypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state,\n                                  unsigned char *out)\n{\n    return implementation->onetimeauth_final(state, out);\n}\n\nsize_t\ncrypto_onetimeauth_poly1305_bytes(void) {\n    return crypto_onetimeauth_poly1305_BYTES;\n}\n\nsize_t\ncrypto_onetimeauth_poly1305_keybytes(void) {\n    return crypto_onetimeauth_poly1305_KEYBYTES;\n}\n\nint\n_crypto_onetimeauth_poly1305_pick_best_implementation(void)\n{\n    implementation = &crypto_onetimeauth_poly1305_donna_implementation;\n#if defined(HAVE_TI_MODE) && defined(HAVE_EMMINTRIN_H)\n    if (sodium_runtime_has_sse2()) {\n        implementation = &crypto_onetimeauth_poly1305_sse2_implementation;\n    }\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.h",
    "content": "\n#ifndef onetimeauth_poly1305_H\n#define onetimeauth_poly1305_H\n\ntypedef struct crypto_onetimeauth_poly1305_implementation {\n    int (*onetimeauth)(unsigned char *out,\n                       const unsigned char *in,\n                       unsigned long long inlen,\n                       const unsigned char *k);\n    int (*onetimeauth_verify)(const unsigned char *h,\n                              const unsigned char *in,\n                              unsigned long long inlen,\n                              const unsigned char *k);\n    int (*onetimeauth_init)(crypto_onetimeauth_poly1305_state *state,\n                            const unsigned char *key);\n    int (*onetimeauth_update)(crypto_onetimeauth_poly1305_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n    int (*onetimeauth_final)(crypto_onetimeauth_poly1305_state *state,\n                             unsigned char *out);\n} crypto_onetimeauth_poly1305_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.c",
    "content": "\n#include <stdint.h>\n#include <string.h>\n\n#include \"crypto_verify_16.h\"\n#include \"utils.h\"\n#include \"poly1305_sse2.h\"\n#include \"../onetimeauth_poly1305.h\"\n\n#if defined(HAVE_TI_MODE) && defined(HAVE_EMMINTRIN_H)\n\n#pragma GCC target(\"sse2\")\n\n#include <emmintrin.h>\n\ntypedef __m128i xmmi;\n\n#if defined(__SIZEOF_INT128__)\ntypedef unsigned __int128 uint128_t;\n#else\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n#endif\n\n#if defined(_MSC_VER)\n# define POLY1305_NOINLINE __declspec(noinline)\n#elif defined(__GNUC__)\n# define POLY1305_NOINLINE __attribute__((noinline))\n#else\n# define POLY1305_NOINLINE\n#endif\n\n#define poly1305_block_size 32\n\nenum poly1305_state_flags_t {\n    poly1305_started = 1,\n    poly1305_final_shift8 = 4,\n    poly1305_final_shift16 = 8,\n    poly1305_final_r2_r = 16, /* use [r^2,r] for the final block */\n    poly1305_final_r_1 = 32, /* use [r,1] for the final block */\n};\n\ntypedef struct poly1305_state_internal_t {\n    union {\n        uint64_t h[3];\n        uint32_t hh[10];\n    };                       /*  40 bytes  */\n    uint32_t R[5];           /*  20 bytes  */\n    uint32_t R2[5];          /*  20 bytes  */\n    uint32_t R4[5];          /*  20 bytes  */\n    uint64_t pad[2];         /*  16 bytes  */\n    uint64_t flags;          /*   8 bytes  */\n    unsigned long long leftover; /* 8 bytes */\n    unsigned char buffer[poly1305_block_size]; /* 32 bytes */\n} poly1305_state_internal_t;   /* 164 bytes total */\n\n/*\n * _mm_loadl_epi64() is turned into a simple MOVQ. So, unaligned accesses are totally fine, even though this intrinsic requires a __m128i* input.\n * This confuses dynamic analysis, so force alignment, only in debug mode.\n */\n#ifdef DEBUG\nstatic xmmi\n_fakealign_mm_loadl_epi64(const void *m)\n{\n    xmmi tmp;\n    memcpy(&tmp, m, 8);\n    return _mm_loadl_epi64(&tmp);\n}\n# define _mm_loadl_epi64(X) _fakealign_mm_loadl_epi64(X)\n#endif\n\n/* copy 0-31 bytes */\nstatic inline void\npoly1305_block_copy31(unsigned char *dst, const unsigned char *src, unsigned long long bytes)\n{\n    if (bytes & 16) {\n        _mm_store_si128((xmmi *) (void *) dst,\n                        _mm_loadu_si128((const xmmi *) (const void *) src));\n        src += 16; dst += 16;\n    }\n    if (bytes &  8) { memcpy(dst, src, 8); src += 8; dst += 8; }\n    if (bytes &  4) { memcpy(dst, src, 4); src += 4; dst += 4; }\n    if (bytes &  2) { memcpy(dst, src, 2); src += 2; dst += 2; }\n    if (bytes &  1) { *dst = *src; }\n}\n\nstatic POLY1305_NOINLINE void\npoly1305_init_ext(poly1305_state_internal_t *st,\n                  const unsigned char key[32], unsigned long long bytes)\n{\n    uint32_t *R;\n    uint128_t d[3],m0;\n    uint64_t r0,r1,r2;\n    uint32_t rp0,rp1,rp2,rp3,rp4;\n    uint64_t rt0,rt1,rt2,st2,c;\n    uint64_t t0,t1;\n    unsigned long long i;\n\n    if (!bytes) bytes = ~(unsigned long long)0;\n\n    /* H = 0 */\n    _mm_storeu_si128((xmmi *)(void *)&st->hh[0], _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)&st->hh[4], _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)&st->hh[8], _mm_setzero_si128());\n\n    /* clamp key */\n    memcpy(&t0, key, 8);\n    memcpy(&t1, key + 8, 8);\n    r0 = t0 & 0xffc0fffffff; t0 >>= 44; t0 |= t1 << 20;\n    r1 = t0 & 0xfffffc0ffff; t1 >>= 24;\n    r2 = t1 & 0x00ffffffc0f;\n\n    /* r^1 */\n    R = st->R;\n    R[0] = (uint32_t)( r0                      ) & 0x3ffffff;\n    R[1] = (uint32_t)(( r0 >> 26) | ( r1 << 18)) & 0x3ffffff;\n    R[2] = (uint32_t)(( r1 >>  8)              ) & 0x3ffffff;\n    R[3] = (uint32_t)(( r1 >> 34) | ( r2 << 10)) & 0x3ffffff;\n    R[4] = (uint32_t)(( r2 >> 16)              );\n\n    /* save pad */\n    memcpy(&st->pad[0], key + 16, 8);\n    memcpy(&st->pad[1], key + 24, 8);\n\n    rt0 = r0;\n    rt1 = r1;\n    rt2 = r2;\n\n    /* r^2, r^4 */\n    for (i = 0; i < 2; i++) {\n        if (i == 0) {\n            R = st->R2;\n            if (bytes <= 16) {\n                break;\n            }\n        } else if (i == 1) {\n            R = st->R4;\n            if (bytes < 96) {\n                break;\n            }\n        }\n        st2 = rt2 * (5 << 2);\n        d[0] = ((uint128_t)rt0 * rt0) + ((uint128_t)(rt1 * 2) * st2);\n        d[1] = ((uint128_t)rt2 * st2) + ((uint128_t)(rt0 * 2) * rt1);\n        d[2] = ((uint128_t)rt1 * rt1) + ((uint128_t)(rt2 * 2) * rt0);\n        rt0 = (uint64_t)d[0] & 0xfffffffffff; c = (uint64_t)(d[0] >> 44);\n        d[1] += c   ; rt1 = (uint64_t)d[1] & 0xfffffffffff; c = (uint64_t)(d[1] >> 44);\n        d[2] += c   ; rt2 = (uint64_t)d[2] & 0x3ffffffffff; c = (uint64_t)(d[2] >> 42);\n        rt0 += c * 5; c = (rt0 >> 44); rt0 = rt0 & 0xfffffffffff;\n        rt1 += c    ; c = (rt1 >> 44); rt1 = rt1 & 0xfffffffffff;\n        rt2 += c    ; /* even if rt2 overflows, it will still fit in rp4 safely, and is safe to multiply with */\n\n        R[0] = (uint32_t)( rt0                     ) & 0x3ffffff;\n        R[1] = (uint32_t)((rt0 >> 26) | (rt1 << 18)) & 0x3ffffff;\n        R[2] = (uint32_t)((rt1 >> 8)               ) & 0x3ffffff;\n        R[3] = (uint32_t)((rt1 >> 34) | (rt2 << 10)) & 0x3ffffff;\n        R[4] = (uint32_t)((rt2 >> 16)              );\n    }\n\n    st->flags = 0;\n    st->leftover = 0U;\n}\n\nstatic POLY1305_NOINLINE void\npoly1305_blocks(poly1305_state_internal_t *st, const unsigned char *m,\n                unsigned long long bytes)\n{\n    CRYPTO_ALIGN(64) xmmi HIBIT = _mm_shuffle_epi32(_mm_cvtsi32_si128(1 << 24), _MM_SHUFFLE(1,0,1,0));\n    const xmmi MMASK = _mm_shuffle_epi32(_mm_cvtsi32_si128((1 << 26) - 1), _MM_SHUFFLE(1,0,1,0));\n    const xmmi FIVE = _mm_shuffle_epi32(_mm_cvtsi32_si128(5), _MM_SHUFFLE(1,0,1,0));\n    xmmi H0,H1,H2,H3,H4;\n    xmmi T0,T1,T2,T3,T4,T5,T6,T7,T8;\n    xmmi M0,M1,M2,M3,M4;\n    xmmi M5,M6,M7,M8,M9;\n    xmmi C1,C2;\n    xmmi R20,R21,R22,R23,R24,S21,S22,S23,S24;\n    xmmi R40,R41,R42,R43,R44,S41,S42,S43,S44;\n\n    if (st->flags & poly1305_final_shift8) HIBIT = _mm_srli_si128(HIBIT, 8);\n    if (st->flags & poly1305_final_shift16) HIBIT = _mm_setzero_si128();\n\n    if (!(st->flags & poly1305_started)) {\n        /* H = [Mx,My] */\n\n        T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(const void *)(m + 0)), _mm_loadl_epi64((const xmmi *)(const void *)(m + 16)));\n        T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(const void *)(m + 8)), _mm_loadl_epi64((const xmmi *)(const void *)(m + 24)));\n        H0 = _mm_and_si128(MMASK, T5);\n        H1 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26));\n        T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12));\n        H2 = _mm_and_si128(MMASK, T5);\n        H3 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26));\n        H4 = _mm_srli_epi64(T6, 40);\n        H4 = _mm_or_si128(H4, HIBIT);\n        m += 32;\n        bytes -= 32;\n        st->flags |= poly1305_started;\n    } else {\n        T0 = _mm_loadu_si128((const xmmi *)(const void *)&st->hh[0]);\n        T1 = _mm_loadu_si128((const xmmi *)(const void *)&st->hh[4]);\n        T2 = _mm_loadu_si128((const xmmi *)(const void *)&st->hh[8]);\n        H0 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(1,1,0,0));\n        H1 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(3,3,2,2));\n        H2 = _mm_shuffle_epi32(T1, _MM_SHUFFLE(1,1,0,0));\n        H3 = _mm_shuffle_epi32(T1, _MM_SHUFFLE(3,3,2,2));\n        H4 = _mm_shuffle_epi32(T2, _MM_SHUFFLE(1,1,0,0));\n    }\n\n    if (st->flags & (poly1305_final_r2_r|poly1305_final_r_1)) {\n        if (st->flags & poly1305_final_r2_r) {\n            /* use [r^2, r] */\n            T2 = _mm_loadu_si128((const xmmi *)(const void *)&st->R[0]);\n            T3 = _mm_cvtsi32_si128(st->R[4]);\n            T0 = _mm_loadu_si128((const xmmi *)(const void *)&st->R2[0]);\n            T1 = _mm_cvtsi32_si128(st->R2[4]);\n            T4 = _mm_unpacklo_epi32(T0, T2);\n            T5 = _mm_unpackhi_epi32(T0, T2);\n            R24 = _mm_unpacklo_epi64(T1, T3);\n        } else {\n            /* use [r^1, 1] */\n            T0 = _mm_loadu_si128((const xmmi *)(const void *)&st->R[0]);\n            T1 = _mm_cvtsi32_si128(st->R[4]);\n            T2 = _mm_cvtsi32_si128(1);\n            T4 = _mm_unpacklo_epi32(T0, T2);\n            T5 = _mm_unpackhi_epi32(T0, T2);\n            R24 = T1;\n        }\n\n        R20 = _mm_shuffle_epi32(T4, _MM_SHUFFLE(1,1,0,0));\n        R21 = _mm_shuffle_epi32(T4, _MM_SHUFFLE(3,3,2,2));\n        R22 = _mm_shuffle_epi32(T5, _MM_SHUFFLE(1,1,0,0));\n        R23 = _mm_shuffle_epi32(T5, _MM_SHUFFLE(3,3,2,2));\n    } else {\n        /* use [r^2, r^2] */\n        T0 = _mm_loadu_si128((const xmmi *)(const void *)&st->R2[0]);\n        T1 = _mm_cvtsi32_si128(st->R2[4]);\n        R20 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(0,0,0,0));\n        R21 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(1,1,1,1));\n        R22 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(2,2,2,2));\n        R23 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(3,3,3,3));\n        R24 = _mm_shuffle_epi32(T1, _MM_SHUFFLE(0,0,0,0));\n    }\n    S21 = _mm_mul_epu32(R21, FIVE);\n    S22 = _mm_mul_epu32(R22, FIVE);\n    S23 = _mm_mul_epu32(R23, FIVE);\n    S24 = _mm_mul_epu32(R24, FIVE);\n\n    if (bytes >= 64) {\n        T0 = _mm_loadu_si128((const xmmi *)(const void *)&st->R4[0]);\n        T1 = _mm_cvtsi32_si128(st->R4[4]);\n        R40 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(0,0,0,0));\n        R41 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(1,1,1,1));\n        R42 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(2,2,2,2));\n        R43 = _mm_shuffle_epi32(T0, _MM_SHUFFLE(3,3,3,3));\n        R44 = _mm_shuffle_epi32(T1, _MM_SHUFFLE(0,0,0,0));\n        S41 = _mm_mul_epu32(R41, FIVE);\n        S42 = _mm_mul_epu32(R42, FIVE);\n        S43 = _mm_mul_epu32(R43, FIVE);\n        S44 = _mm_mul_epu32(R44, FIVE);\n\n        while (bytes >= 64) {\n            xmmi v00,v01,v02,v03,v04;\n            xmmi v10,v11,v12,v13,v14;\n            xmmi v20,v21,v22,v23,v24;\n            xmmi v30,v31,v32,v33,v34;\n            xmmi v40,v41,v42,v43,v44;\n            xmmi T14,T15;\n\n            /* H *= [r^4,r^4], preload [Mx,My] */\n            T15 = S42;\n            T0  = H4; T0  = _mm_mul_epu32(T0, S41);\n            v01 = H3; v01 = _mm_mul_epu32(v01, T15);\n            T14 = S43;\n            T1  = H4; T1  = _mm_mul_epu32(T1 , T15);\n            v11 = H3; v11 = _mm_mul_epu32(v11, T14);\n            T2  = H4; T2  = _mm_mul_epu32(T2 , T14); T0 = _mm_add_epi64(T0, v01);\n            T15 = S44;\n            v02 = H2; v02 = _mm_mul_epu32(v02, T14);\n            T3  = H4; T3  = _mm_mul_epu32(T3 , T15); T1 = _mm_add_epi64(T1, v11);\n            v03 = H1; v03 = _mm_mul_epu32(v03, T15);\n            v12 = H2; v12 = _mm_mul_epu32(v12, T15); T0 = _mm_add_epi64(T0, v02);\n            T14 = R40;\n            v21 = H3; v21 = _mm_mul_epu32(v21, T15);\n            v31 = H3; v31 = _mm_mul_epu32(v31, T14); T0 = _mm_add_epi64(T0, v03);\n            T4  = H4; T4  = _mm_mul_epu32(T4 , T14); T1 = _mm_add_epi64(T1, v12);\n            v04 = H0; v04 = _mm_mul_epu32(v04, T14); T2 = _mm_add_epi64(T2, v21);\n            v13 = H1; v13 = _mm_mul_epu32(v13, T14); T3 = _mm_add_epi64(T3, v31);\n            T15 = R41;\n            v22 = H2; v22 = _mm_mul_epu32(v22, T14);\n            v32 = H2; v32 = _mm_mul_epu32(v32, T15); T0 = _mm_add_epi64(T0, v04);\n            v41 = H3; v41 = _mm_mul_epu32(v41, T15); T1 = _mm_add_epi64(T1, v13);\n            v14 = H0; v14 = _mm_mul_epu32(v14, T15); T2 = _mm_add_epi64(T2, v22);\n            T14 = R42;\n            T5 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(const void *)(m + 0)), _mm_loadl_epi64((const xmmi *)(const void *)(m + 16)));\n            v23 = H1; v23 = _mm_mul_epu32(v23, T15); T3 = _mm_add_epi64(T3, v32);\n            v33 = H1; v33 = _mm_mul_epu32(v33, T14); T4 = _mm_add_epi64(T4, v41);\n            v42 = H2; v42 = _mm_mul_epu32(v42, T14); T1 = _mm_add_epi64(T1, v14);\n            T15 = R43;\n            T6 = _mm_unpacklo_epi64(_mm_loadl_epi64((const xmmi *)(const void *)(m + 8)), _mm_loadl_epi64((const xmmi *)(const void *)(m + 24)));\n            v24 = H0; v24 = _mm_mul_epu32(v24, T14); T2 = _mm_add_epi64(T2, v23);\n            v34 = H0; v34 = _mm_mul_epu32(v34, T15); T3 = _mm_add_epi64(T3, v33);\n            M0 = _mm_and_si128(MMASK, T5);\n            v43 = H1; v43 = _mm_mul_epu32(v43, T15); T4 = _mm_add_epi64(T4, v42);\n            M1 = _mm_and_si128(MMASK, _mm_srli_epi64(T5, 26));\n            v44 = H0; v44 = _mm_mul_epu32(v44, R44); T2 = _mm_add_epi64(T2, v24);\n            T5 = _mm_or_si128(_mm_srli_epi64(T5, 52), _mm_slli_epi64(T6, 12));\n            T3 = _mm_add_epi64(T3, v34);\n            M3 = _mm_and_si128(MMASK, _mm_srli_epi64(T6, 14));\n            T4 = _mm_add_epi64(T4, v43);\n            M2 = _mm_and_si128(MMASK, T5);\n            T4 = _mm_add_epi64(T4, v44);\n            M4 = _mm_or_si128(_mm_srli_epi64(T6, 40), HIBIT);\n\n            /* H += [Mx',My'] */\n            T5 = _mm_loadu_si128((const xmmi *)(const void *)(m + 32));\n            T6 = _mm_loadu_si128((const xmmi *)(const void *)(m + 48));\n            T7 = _mm_unpacklo_epi32(T5, T6);\n            T8 = _mm_unpackhi_epi32(T5, T6);\n            M5 = _mm_unpacklo_epi32(T7, _mm_setzero_si128());\n            M6 = _mm_unpackhi_epi32(T7, _mm_setzero_si128());\n            M7 = _mm_unpacklo_epi32(T8, _mm_setzero_si128());\n            M8 = _mm_unpackhi_epi32(T8, _mm_setzero_si128());\n            M6 = _mm_slli_epi64(M6, 6);\n            M7 = _mm_slli_epi64(M7, 12);\n            M8 = _mm_slli_epi64(M8, 18);\n            T0 = _mm_add_epi64(T0, M5);\n            T1 = _mm_add_epi64(T1, M6);\n            T2 = _mm_add_epi64(T2, M7);\n            T3 = _mm_add_epi64(T3, M8);\n            T4 = _mm_add_epi64(T4, HIBIT);\n\n            /* H += [Mx,My]*[r^2,r^2] */\n            T15 = S22;\n            v00 = M4; v00 = _mm_mul_epu32(v00, S21);\n            v01 = M3; v01 = _mm_mul_epu32(v01, T15);\n            T14 = S23;\n            v10 = M4; v10 = _mm_mul_epu32(v10, T15);\n            v11 = M3; v11 = _mm_mul_epu32(v11, T14); T0 = _mm_add_epi64(T0, v00);\n            v20 = M4; v20 = _mm_mul_epu32(v20, T14); T0 = _mm_add_epi64(T0, v01);\n            T15 = S24;\n            v02 = M2; v02 = _mm_mul_epu32(v02, T14); T1 = _mm_add_epi64(T1, v10);\n            v30 = M4; v30 = _mm_mul_epu32(v30, T15); T1 = _mm_add_epi64(T1, v11);\n            v03 = M1; v03 = _mm_mul_epu32(v03, T15); T2 = _mm_add_epi64(T2, v20);\n            v12 = M2; v12 = _mm_mul_epu32(v12, T15); T0 = _mm_add_epi64(T0, v02);\n            T14 = R20;\n            v21 = M3; v21 = _mm_mul_epu32(v21, T15); T3 = _mm_add_epi64(T3, v30);\n            v31 = M3; v31 = _mm_mul_epu32(v31, T14); T0 = _mm_add_epi64(T0, v03);\n            v40 = M4; v40 = _mm_mul_epu32(v40, T14); T1 = _mm_add_epi64(T1, v12);\n            v04 = M0; v04 = _mm_mul_epu32(v04, T14); T2 = _mm_add_epi64(T2, v21);\n            v13 = M1; v13 = _mm_mul_epu32(v13, T14); T3 = _mm_add_epi64(T3, v31);\n            T15 = R21;\n            v22 = M2; v22 = _mm_mul_epu32(v22, T14); T4 = _mm_add_epi64(T4, v40);\n            v32 = M2; v32 = _mm_mul_epu32(v32, T15); T0 = _mm_add_epi64(T0, v04);\n            v41 = M3; v41 = _mm_mul_epu32(v41, T15); T1 = _mm_add_epi64(T1, v13);\n            v14 = M0; v14 = _mm_mul_epu32(v14, T15); T2 = _mm_add_epi64(T2, v22);\n            T14 = R22;\n            v23 = M1; v23 = _mm_mul_epu32(v23, T15); T3 = _mm_add_epi64(T3, v32);\n            v33 = M1; v33 = _mm_mul_epu32(v33, T14); T4 = _mm_add_epi64(T4, v41);\n            v42 = M2; v42 = _mm_mul_epu32(v42, T14); T1 = _mm_add_epi64(T1, v14);\n            T15 = R23;\n            v24 = M0; v24 = _mm_mul_epu32(v24, T14); T2 = _mm_add_epi64(T2, v23);\n            v34 = M0; v34 = _mm_mul_epu32(v34, T15); T3 = _mm_add_epi64(T3, v33);\n            v43 = M1; v43 = _mm_mul_epu32(v43, T15); T4 = _mm_add_epi64(T4, v42);\n            v44 = M0; v44 = _mm_mul_epu32(v44, R24); T2 = _mm_add_epi64(T2, v24);\n            T3 = _mm_add_epi64(T3, v34);\n            T4 = _mm_add_epi64(T4, v43);\n            T4 = _mm_add_epi64(T4, v44);\n\n            /* reduce */\n            C1 = _mm_srli_epi64(T0, 26); C2 = _mm_srli_epi64(T3, 26); T0 = _mm_and_si128(T0, MMASK); T3 = _mm_and_si128(T3, MMASK); T1 = _mm_add_epi64(T1, C1); T4 = _mm_add_epi64(T4, C2);\n            C1 = _mm_srli_epi64(T1, 26); C2 = _mm_srli_epi64(T4, 26); T1 = _mm_and_si128(T1, MMASK); T4 = _mm_and_si128(T4, MMASK); T2 = _mm_add_epi64(T2, C1); T0 = _mm_add_epi64(T0, _mm_mul_epu32(C2, FIVE));\n            C1 = _mm_srli_epi64(T2, 26); C2 = _mm_srli_epi64(T0, 26); T2 = _mm_and_si128(T2, MMASK); T0 = _mm_and_si128(T0, MMASK); T3 = _mm_add_epi64(T3, C1); T1 = _mm_add_epi64(T1, C2);\n            C1 = _mm_srli_epi64(T3, 26);                              T3 = _mm_and_si128(T3, MMASK);                                T4 = _mm_add_epi64(T4, C1);\n\n            /* Final: H = (H*[r^4,r^4] + [Mx,My]*[r^2,r^2] + [Mx',My']) */\n            H0 = T0;\n            H1 = T1;\n            H2 = T2;\n            H3 = T3;\n            H4 = T4;\n\n            m += 64;\n            bytes -= 64;\n        }\n    }\n\n    if (bytes >= 32) {\n        xmmi v01,v02,v03,v04;\n        xmmi v11,v12,v13,v14;\n        xmmi v21,v22,v23,v24;\n        xmmi v31,v32,v33,v34;\n        xmmi v41,v42,v43,v44;\n        xmmi T14,T15;\n\n        /* H *= [r^2,r^2] */\n        T15 = S22;\n        T0  = H4; T0  = _mm_mul_epu32(T0, S21);\n        v01 = H3; v01 = _mm_mul_epu32(v01, T15);\n        T14 = S23;\n        T1  = H4; T1  = _mm_mul_epu32(T1 , T15);\n        v11 = H3; v11 = _mm_mul_epu32(v11, T14);\n        T2  = H4; T2  = _mm_mul_epu32(T2 , T14); T0 = _mm_add_epi64(T0, v01);\n        T15 = S24;\n        v02 = H2; v02 = _mm_mul_epu32(v02, T14);\n        T3  = H4; T3  = _mm_mul_epu32(T3 , T15); T1 = _mm_add_epi64(T1, v11);\n        v03 = H1; v03 = _mm_mul_epu32(v03, T15);\n        v12 = H2; v12 = _mm_mul_epu32(v12, T15); T0 = _mm_add_epi64(T0, v02);\n        T14 = R20;\n        v21 = H3; v21 = _mm_mul_epu32(v21, T15);\n        v31 = H3; v31 = _mm_mul_epu32(v31, T14); T0 = _mm_add_epi64(T0, v03);\n        T4  = H4; T4  = _mm_mul_epu32(T4 , T14); T1 = _mm_add_epi64(T1, v12);\n        v04 = H0; v04 = _mm_mul_epu32(v04, T14); T2 = _mm_add_epi64(T2, v21);\n        v13 = H1; v13 = _mm_mul_epu32(v13, T14); T3 = _mm_add_epi64(T3, v31);\n        T15 = R21;\n        v22 = H2; v22 = _mm_mul_epu32(v22, T14);\n        v32 = H2; v32 = _mm_mul_epu32(v32, T15); T0 = _mm_add_epi64(T0, v04);\n        v41 = H3; v41 = _mm_mul_epu32(v41, T15); T1 = _mm_add_epi64(T1, v13);\n        v14 = H0; v14 = _mm_mul_epu32(v14, T15); T2 = _mm_add_epi64(T2, v22);\n        T14 = R22;\n        v23 = H1; v23 = _mm_mul_epu32(v23, T15); T3 = _mm_add_epi64(T3, v32);\n        v33 = H1; v33 = _mm_mul_epu32(v33, T14); T4 = _mm_add_epi64(T4, v41);\n        v42 = H2; v42 = _mm_mul_epu32(v42, T14); T1 = _mm_add_epi64(T1, v14);\n        T15 = R23;\n        v24 = H0; v24 = _mm_mul_epu32(v24, T14); T2 = _mm_add_epi64(T2, v23);\n        v34 = H0; v34 = _mm_mul_epu32(v34, T15); T3 = _mm_add_epi64(T3, v33);\n        v43 = H1; v43 = _mm_mul_epu32(v43, T15); T4 = _mm_add_epi64(T4, v42);\n        v44 = H0; v44 = _mm_mul_epu32(v44, R24); T2 = _mm_add_epi64(T2, v24);\n        T3 = _mm_add_epi64(T3, v34);\n        T4 = _mm_add_epi64(T4, v43);\n        T4 = _mm_add_epi64(T4, v44);\n\n        /* H += [Mx,My] */\n        if (m) {\n            T5 = _mm_loadu_si128((const xmmi *)(const void *)(m + 0));\n            T6 = _mm_loadu_si128((const xmmi *)(const void *)(m + 16));\n            T7 = _mm_unpacklo_epi32(T5, T6);\n            T8 = _mm_unpackhi_epi32(T5, T6);\n            M0 = _mm_unpacklo_epi32(T7, _mm_setzero_si128());\n            M1 = _mm_unpackhi_epi32(T7, _mm_setzero_si128());\n            M2 = _mm_unpacklo_epi32(T8, _mm_setzero_si128());\n            M3 = _mm_unpackhi_epi32(T8, _mm_setzero_si128());\n            M1 = _mm_slli_epi64(M1, 6);\n            M2 = _mm_slli_epi64(M2, 12);\n            M3 = _mm_slli_epi64(M3, 18);\n            T0 = _mm_add_epi64(T0, M0);\n            T1 = _mm_add_epi64(T1, M1);\n            T2 = _mm_add_epi64(T2, M2);\n            T3 = _mm_add_epi64(T3, M3);\n            T4 = _mm_add_epi64(T4, HIBIT);\n        }\n\n        /* reduce */\n        C1 = _mm_srli_epi64(T0, 26); C2 = _mm_srli_epi64(T3, 26); T0 = _mm_and_si128(T0, MMASK); T3 = _mm_and_si128(T3, MMASK); T1 = _mm_add_epi64(T1, C1); T4 = _mm_add_epi64(T4, C2);\n        C1 = _mm_srli_epi64(T1, 26); C2 = _mm_srli_epi64(T4, 26); T1 = _mm_and_si128(T1, MMASK); T4 = _mm_and_si128(T4, MMASK); T2 = _mm_add_epi64(T2, C1); T0 = _mm_add_epi64(T0, _mm_mul_epu32(C2, FIVE));\n        C1 = _mm_srli_epi64(T2, 26); C2 = _mm_srli_epi64(T0, 26); T2 = _mm_and_si128(T2, MMASK); T0 = _mm_and_si128(T0, MMASK); T3 = _mm_add_epi64(T3, C1); T1 = _mm_add_epi64(T1, C2);\n        C1 = _mm_srli_epi64(T3, 26);                              T3 = _mm_and_si128(T3, MMASK);                                T4 = _mm_add_epi64(T4, C1);\n\n        /* H = (H*[r^2,r^2] + [Mx,My]) */\n        H0 = T0;\n        H1 = T1;\n        H2 = T2;\n        H3 = T3;\n        H4 = T4;\n    }\n\n    if (m) {\n        T0 = _mm_shuffle_epi32(H0, _MM_SHUFFLE(0,0,2,0));\n        T1 = _mm_shuffle_epi32(H1, _MM_SHUFFLE(0,0,2,0));\n        T2 = _mm_shuffle_epi32(H2, _MM_SHUFFLE(0,0,2,0));\n        T3 = _mm_shuffle_epi32(H3, _MM_SHUFFLE(0,0,2,0));\n        T4 = _mm_shuffle_epi32(H4, _MM_SHUFFLE(0,0,2,0));\n        T0 = _mm_unpacklo_epi64(T0, T1);\n        T1 = _mm_unpacklo_epi64(T2, T3);\n        _mm_storeu_si128((xmmi *)(void *)&st->hh[0], T0);\n        _mm_storeu_si128((xmmi *)(void *)&st->hh[4], T1);\n        _mm_storel_epi64((xmmi *)(void *)&st->hh[8], T4);\n    } else {\n        uint32_t t0,t1,t2,t3,t4,b;\n        uint64_t h0,h1,h2,g0,g1,g2,c,nc;\n\n        /* H = H[0]+H[1] */\n        T0 = H0;\n        T1 = H1;\n        T2 = H2;\n        T3 = H3;\n        T4 = H4;\n\n        T0 = _mm_add_epi64(T0, _mm_srli_si128(T0, 8));\n        T1 = _mm_add_epi64(T1, _mm_srli_si128(T1, 8));\n        T2 = _mm_add_epi64(T2, _mm_srli_si128(T2, 8));\n        T3 = _mm_add_epi64(T3, _mm_srli_si128(T3, 8));\n        T4 = _mm_add_epi64(T4, _mm_srli_si128(T4, 8));\n\n        t0 = _mm_cvtsi128_si32(T0)    ; b = (t0 >> 26); t0 &= 0x3ffffff;\n        t1 = _mm_cvtsi128_si32(T1) + b; b = (t1 >> 26); t1 &= 0x3ffffff;\n        t2 = _mm_cvtsi128_si32(T2) + b; b = (t2 >> 26); t2 &= 0x3ffffff;\n        t3 = _mm_cvtsi128_si32(T3) + b; b = (t3 >> 26); t3 &= 0x3ffffff;\n        t4 = _mm_cvtsi128_si32(T4) + b;\n\n        /* everything except t4 is in range, so this is all safe */\n        h0 =  (((uint64_t)t0      ) | ((uint64_t)t1 << 26)                       ) & 0xfffffffffffull;\n        h1 =  (((uint64_t)t1 >> 18) | ((uint64_t)t2 <<  8) | ((uint64_t)t3 << 34)) & 0xfffffffffffull;\n        h2 =  (((uint64_t)t3 >> 10) | ((uint64_t)t4 << 16)                       );\n\n        c = (h2 >> 42); h2 &= 0x3ffffffffff;\n        h0 += c * 5; c = (h0 >> 44); h0 &= 0xfffffffffff;\n        h1 += c;     c = (h1 >> 44); h1 &= 0xfffffffffff;\n        h2 += c;     c = (h2 >> 42); h2 &= 0x3ffffffffff;\n        h0 += c * 5; c = (h0 >> 44); h0 &= 0xfffffffffff;\n        h1 += c;\n\n        g0 = h0 + 5; c = (g0 >> 44); g0 &= 0xfffffffffff;\n        g1 = h1 + c; c = (g1 >> 44); g1 &= 0xfffffffffff;\n        g2 = h2 + c - ((uint64_t)1 << 42);\n\n        c = (g2 >> 63) - 1;\n        nc = ~c;\n        h0 = (h0 & nc) | (g0 & c);\n        h1 = (h1 & nc) | (g1 & c);\n        h2 = (h2 & nc) | (g2 & c);\n\n        st->h[0] = h0;\n        st->h[1] = h1;\n        st->h[2] = h2;\n    }\n}\n\nstatic void\npoly1305_update(poly1305_state_internal_t *st, const unsigned char *m,\n                unsigned long long bytes)\n{\n    unsigned long long i;\n\n    /* handle leftover */\n    if (st->leftover) {\n        unsigned long long want = (poly1305_block_size - st->leftover);\n\n        if (want > bytes)\n            want = bytes;\n        for (i = 0; i < want; i++)\n            st->buffer[st->leftover + i] = m[i];\n        bytes -= want;\n        m += want;\n        st->leftover += want;\n        if (st->leftover < poly1305_block_size)\n            return;\n        poly1305_blocks(st, st->buffer, poly1305_block_size);\n        st->leftover = 0;\n    }\n\n    /* process full blocks */\n    if (bytes >= poly1305_block_size) {\n        unsigned long long want = (bytes & ~(poly1305_block_size - 1));\n\n        poly1305_blocks(st, m, want);\n        m += want;\n        bytes -= want;\n    }\n\n    /* store leftover */\n    if (bytes) {\n        for (i = 0; i < bytes; i++) {\n            st->buffer[st->leftover + i] = m[i];\n        }\n        st->leftover += bytes;\n    }\n}\n\nstatic POLY1305_NOINLINE void\npoly1305_finish_ext(poly1305_state_internal_t *st, const unsigned char *m,\n                    unsigned long long leftover, unsigned char mac[16])\n{\n    uint64_t h0,h1,h2;\n    uint64_t t0,t1,c;\n\n    if (leftover) {\n        CRYPTO_ALIGN(16) unsigned char final[32] = {0};\n        poly1305_block_copy31(final, m, leftover);\n        if (leftover != 16) final[leftover] = 1;\n        st->flags |= (leftover >= 16) ? poly1305_final_shift8 : poly1305_final_shift16;\n        poly1305_blocks(st, final, 32);\n    }\n\n    if (st->flags & poly1305_started) {\n        /* finalize, H *= [r^2,r], or H *= [r,1] */\n        if (!leftover || (leftover > 16)) {\n            st->flags |= poly1305_final_r2_r;\n        } else {\n            st->flags |= poly1305_final_r_1;\n        }\n        poly1305_blocks(st, NULL, 32);\n    }\n\n    h0 = st->h[0];\n    h1 = st->h[1];\n    h2 = st->h[2];\n\n    /* pad */\n    h0 = ((h0      ) | (h1 << 44));\n    h1 = ((h1 >> 20) | (h2 << 24));\n#ifdef HAVE_AMD64_ASM\n    __asm__ __volatile__(\"addq %2, %0 ;\\n\"\n                         \"adcq %3, %1 ;\\n\"\n                         : \"+r\"(h0), \"+r\"(h1)\n                         : \"r\"(st->pad[0]), \"r\"(st->pad[1])\n                         : \"flags\", \"cc\");\n#else\n    {\n        uint128_t h;\n\n        memcpy(&h, &st->pad[0], 16);\n        h += ((uint128_t) h1 << 64) | h0;\n        h0 = (uint64_t) h;\n        h1 = (uint64_t) (h >> 64);\n    }\n#endif\n    _mm_storeu_si128((xmmi *)(void *)st + 0, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 1, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 2, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 3, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 4, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 5, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 6, _mm_setzero_si128());\n    _mm_storeu_si128((xmmi *)(void *)st + 7, _mm_setzero_si128());\n\n    memcpy(&mac[0], &h0, 8);\n    memcpy(&mac[8], &h1, 8);\n\n    sodium_memzero((void *)st, sizeof *st);\n}\n\nstatic void\npoly1305_finish(poly1305_state_internal_t *st, unsigned char mac[16])\n{\n    poly1305_finish_ext(st, st->buffer, st->leftover, mac);\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_sse2_init(crypto_onetimeauth_poly1305_state *state,\n                                      const unsigned char *key)\n{\n    (void) sizeof(int[sizeof (crypto_onetimeauth_poly1305_state) >=\n                      sizeof (poly1305_state_internal_t) ? 1 : -1]);\n    poly1305_init_ext((poly1305_state_internal_t *)(void *) state, key, 0U);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_sse2_update(crypto_onetimeauth_poly1305_state *state,\n                                        const unsigned char *in,\n                                        unsigned long long inlen)\n{\n    poly1305_update((poly1305_state_internal_t *)(void *) state, in, inlen);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_sse2_final(crypto_onetimeauth_poly1305_state *state,\n                                       unsigned char *out)\n{\n    poly1305_finish((poly1305_state_internal_t *)(void *) state, out);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_sse2(unsigned char *out, const unsigned char *m,\n                                 unsigned long long inlen,\n                                 const unsigned char *key)\n{\n    CRYPTO_ALIGN(64) poly1305_state_internal_t st;\n    unsigned long long blocks;\n\n    poly1305_init_ext(&st, key, inlen);\n    blocks = inlen & ~31;\n    if (blocks > 0) {\n        poly1305_blocks(&st, m, blocks);\n        m += blocks;\n        inlen -= blocks;\n    }\n    poly1305_finish_ext(&st, m, inlen, out);\n\n    return 0;\n}\n\nstatic int\ncrypto_onetimeauth_poly1305_sse2_verify(const unsigned char *h,\n                                        const unsigned char *in,\n                                        unsigned long long inlen,\n                                        const unsigned char *k)\n{\n    unsigned char correct[16];\n\n    crypto_onetimeauth_poly1305_sse2(correct,in,inlen,k);\n\n    return crypto_verify_16(h,correct);\n}\n\nstruct crypto_onetimeauth_poly1305_implementation\ncrypto_onetimeauth_poly1305_sse2_implementation = {\n    SODIUM_C99(.onetimeauth =) crypto_onetimeauth_poly1305_sse2,\n    SODIUM_C99(.onetimeauth_verify =) crypto_onetimeauth_poly1305_sse2_verify,\n    SODIUM_C99(.onetimeauth_init =) crypto_onetimeauth_poly1305_sse2_init,\n    SODIUM_C99(.onetimeauth_update =) crypto_onetimeauth_poly1305_sse2_update,\n    SODIUM_C99(.onetimeauth_final =) crypto_onetimeauth_poly1305_sse2_final\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_onetimeauth/poly1305/sse2/poly1305_sse2.h",
    "content": "#ifndef poly1305_sse2_H\n#define poly1305_sse2_H\n\n#include <stddef.h>\n\n#include \"crypto_onetimeauth_poly1305.h\"\n\nextern struct crypto_onetimeauth_poly1305_implementation\n    crypto_onetimeauth_poly1305_sse2_implementation;\n\nstatic int crypto_onetimeauth_poly1305_sse2(unsigned char *out,\n                                            const unsigned char *in,\n                                            unsigned long long inlen,\n                                            const unsigned char *k);\n\nstatic int crypto_onetimeauth_poly1305_sse2_verify(const unsigned char *h,\n                                                   const unsigned char *in,\n                                                   unsigned long long inlen,\n                                                   const unsigned char *k);\n\nstatic int crypto_onetimeauth_poly1305_sse2_init(crypto_onetimeauth_poly1305_state *state,\n                                                 const unsigned char *key);\n\nstatic int crypto_onetimeauth_poly1305_sse2_update(crypto_onetimeauth_poly1305_state *state,\n                                                   const unsigned char *in,\n                                                   unsigned long long inlen);\n\nstatic int crypto_onetimeauth_poly1305_sse2_final(crypto_onetimeauth_poly1305_state *state,\n                                                  unsigned char *out);\n\n#endif /* poly1305_sse2_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c",
    "content": "/*-\n * Copyright 2013 Alexander Peslyak\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted.\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 <stdint.h>\n#include <string.h>\n\n#include \"crypto_pwhash_scryptsalsa208sha256.h\"\n#include \"crypto_scrypt.h\"\n#include \"runtime.h\"\n#include \"utils.h\"\n\nstatic const char * const itoa64 =\n    \"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\nstatic uint8_t *\nencode64_uint32(uint8_t * dst, size_t dstlen, uint32_t src, uint32_t srcbits)\n{\n    uint32_t bit;\n\n    for (bit = 0; bit < srcbits; bit += 6) {\n        if (dstlen < 1) {\n            return NULL; /* LCOV_EXCL_LINE */\n        }\n        *dst++ = itoa64[src & 0x3f];\n        dstlen--;\n        src >>= 6;\n    }\n\n    return dst;\n}\n\nstatic uint8_t *\nencode64(uint8_t * dst, size_t dstlen, const uint8_t * src, size_t srclen)\n{\n    size_t i;\n\n    for (i = 0; i < srclen; ) {\n        uint8_t * dnext;\n        uint32_t value = 0, bits = 0;\n        do {\n            value |= (uint32_t)src[i++] << bits;\n            bits += 8;\n        } while (bits < 24 && i < srclen);\n        dnext = encode64_uint32(dst, dstlen, value, bits);\n        if (!dnext) {\n            return NULL; /* LCOV_EXCL_LINE */\n        }\n        dstlen -= dnext - dst;\n        dst = dnext;\n    }\n\n    return dst;\n}\n\nstatic int\ndecode64_one(uint32_t * dst, uint8_t src)\n{\n    const char *ptr = strchr(itoa64, src);\n\n    if (ptr) {\n        *dst = (uint32_t) (ptr - itoa64);\n        return 0;\n    }\n    *dst = 0;\n    return -1;\n}\n\nstatic const uint8_t *\ndecode64_uint32(uint32_t * dst, uint32_t dstbits, const uint8_t * src)\n{\n    uint32_t bit;\n    uint32_t value;\n\n    value = 0;\n    for (bit = 0; bit < dstbits; bit += 6) {\n        uint32_t one;\n        if (decode64_one(&one, *src)) {\n            *dst = 0;\n            return NULL;\n        }\n        src++;\n        value |= one << bit;\n    }\n\n    *dst = value;\n    return src;\n}\n\nuint8_t *\nescrypt_r(escrypt_local_t * local, const uint8_t * passwd, size_t passwdlen,\n          const uint8_t * setting, uint8_t * buf, size_t buflen)\n{\n    uint8_t        hash[crypto_pwhash_scryptsalsa208sha256_STRHASHBYTES];\n    escrypt_kdf_t  escrypt_kdf;\n    const uint8_t *src;\n    const uint8_t *salt;\n    uint8_t       *dst;\n    size_t         prefixlen;\n    size_t         saltlen;\n    size_t         need;\n    uint64_t       N;\n    uint32_t       N_log2;\n    uint32_t       r;\n    uint32_t       p;\n\n    if (setting[0] != '$' || setting[1] != '7' || setting[2] != '$') {\n        return NULL;\n    }\n    src = setting + 3;\n\n    if (decode64_one(&N_log2, *src)) {\n        return NULL;\n    }\n    src++;\n    N = (uint64_t)1 << N_log2;\n\n    src = decode64_uint32(&r, 30, src);\n    if (!src) {\n        return NULL;\n    }\n    src = decode64_uint32(&p, 30, src);\n    if (!src) {\n        return NULL;\n    }\n    prefixlen = src - setting;\n\n    salt = src;\n    src = (uint8_t *) strrchr((char *)salt, '$');\n    if (src) {\n        saltlen = src - salt;\n    } else {\n        saltlen = strlen((char *)salt);\n    }\n    need = prefixlen + saltlen + 1 +\n        crypto_pwhash_scryptsalsa208sha256_STRHASHBYTES_ENCODED + 1;\n    if (need > buflen || need < saltlen) {\n        return NULL;\n    }\n#if defined(HAVE_EMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    escrypt_kdf =\n        sodium_runtime_has_sse2() ? escrypt_kdf_sse : escrypt_kdf_nosse;\n#else\n    escrypt_kdf = escrypt_kdf_nosse;\n#endif\n    if (escrypt_kdf(local, passwd, passwdlen, salt, saltlen,\n                    N, r, p, hash, sizeof(hash))) {\n        return NULL;\n    }\n\n    dst = buf;\n    memcpy(dst, setting, prefixlen + saltlen);\n    dst += prefixlen + saltlen;\n    *dst++ = '$';\n\n    dst = encode64(dst, buflen - (dst - buf), hash, sizeof(hash));\n    sodium_memzero(hash, sizeof hash);\n    if (!dst || dst >= buf + buflen) {\n        return NULL; /* Can't happen LCOV_EXCL_LINE */\n    }\n    *dst = 0; /* NUL termination */\n\n    return buf;\n}\n\nuint8_t *\nescrypt_gensalt_r(uint32_t N_log2, uint32_t r, uint32_t p,\n                  const uint8_t * src, size_t srclen,\n                  uint8_t * buf, size_t buflen)\n{\n    uint8_t *dst;\n    size_t   prefixlen =\n        (sizeof \"$7$\" - 1U) + (1U /* N_log2 */) + (5U /* r */) + (5U /* p */);\n    size_t   saltlen = BYTES2CHARS(srclen);\n    size_t   need;\n\n    need = prefixlen + saltlen + 1;\n    if (need > buflen || need < saltlen || saltlen < srclen) {\n        return NULL; /* LCOV_EXCL_LINE */\n    }\n    if (N_log2 > 63 || ((uint64_t)r * (uint64_t)p >= (1U << 30))) {\n        return NULL;\n    }\n    dst = buf;\n    *dst++ = '$';\n    *dst++ = '7';\n    *dst++ = '$';\n\n    *dst++ = itoa64[N_log2];\n\n    dst = encode64_uint32(dst, buflen - (dst - buf), r, 30);\n    if (!dst) {\n        return NULL; /* Can't happen LCOV_EXCL_LINE */\n    }\n    dst = encode64_uint32(dst, buflen - (dst - buf), p, 30);\n    if (!dst) {\n        return NULL; /* Can't happen LCOV_EXCL_LINE */\n    }\n    dst = encode64(dst, buflen - (dst - buf), src, srclen);\n    if (!dst || dst >= buf + buflen) {\n        return NULL; /* Can't happen LCOV_EXCL_LINE */\n    }\n    *dst = 0; /* NUL termination */\n\n    return buf;\n}\n\nint\ncrypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen,\n                                      const uint8_t * salt, size_t saltlen,\n                                      uint64_t N, uint32_t r, uint32_t p,\n                                      uint8_t * buf, size_t buflen)\n{\n    escrypt_kdf_t   escrypt_kdf;\n    escrypt_local_t local;\n    int             retval;\n\n    if (escrypt_init_local(&local)) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n#if defined(HAVE_EMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    escrypt_kdf =\n        sodium_runtime_has_sse2() ? escrypt_kdf_sse : escrypt_kdf_nosse;\n#else\n    escrypt_kdf = escrypt_kdf_nosse;\n#endif\n    retval = escrypt_kdf(&local,\n                         passwd, passwdlen, salt, saltlen,\n                         N, r, p, buf, buflen);\n    if (escrypt_free_local(&local)) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    return retval;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt.h",
    "content": "/*-\n * Copyright 2009 Colin Percival\n * Copyright 2013 Alexander Peslyak\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 * This file was originally written by Colin Percival as part of the Tarsnap\n * online backup system.\n */\n#ifndef crypto_scrypt_H\n#define crypto_scrypt_H\n\n#include <limits.h>\n#include <stdint.h>\n#include <stddef.h>\n\n#if SIZE_MAX > 0xffffffffULL\n# define ARCH_BITS 64\n#else\n# define ARCH_BITS 32\n#endif\n\n#define crypto_pwhash_scryptsalsa208sha256_STRPREFIXBYTES 14\n#define crypto_pwhash_scryptsalsa208sha256_STRSETTINGBYTES 57\n#define crypto_pwhash_scryptsalsa208sha256_STRSALTBYTES 32\n#define crypto_pwhash_scryptsalsa208sha256_STRSALTBYTES_ENCODED 43\n#define crypto_pwhash_scryptsalsa208sha256_STRHASHBYTES 32\n#define crypto_pwhash_scryptsalsa208sha256_STRHASHBYTES_ENCODED 43\n\n#define BYTES2CHARS(bytes) ((((bytes) * 8) + 5) / 6)\n\ntypedef struct {\n\tvoid * base, * aligned;\n\tsize_t size;\n} escrypt_region_t;\n\ntypedef union {\n\tuint64_t d[8];\n\tuint32_t w[16];\n} escrypt_block_t;\n\ntypedef escrypt_region_t escrypt_local_t;\n\nextern int escrypt_init_local(escrypt_local_t * __local);\n\nextern int escrypt_free_local(escrypt_local_t * __local);\n\nextern void *alloc_region(escrypt_region_t * region, size_t size);\nextern int free_region(escrypt_region_t * region);\n\ntypedef int (*escrypt_kdf_t)(escrypt_local_t * __local,\n                             const uint8_t * __passwd, size_t __passwdlen,\n                             const uint8_t * __salt, size_t __saltlen,\n                             uint64_t __N, uint32_t __r, uint32_t __p,\n                             uint8_t * __buf, size_t __buflen);\n\nextern int escrypt_kdf_nosse(escrypt_local_t * __local,\n    const uint8_t * __passwd, size_t __passwdlen,\n    const uint8_t * __salt, size_t __saltlen,\n    uint64_t __N, uint32_t __r, uint32_t __p,\n    uint8_t * __buf, size_t __buflen);\n\nextern int escrypt_kdf_sse(escrypt_local_t * __local,\n    const uint8_t * __passwd, size_t __passwdlen,\n    const uint8_t * __salt, size_t __saltlen,\n    uint64_t __N, uint32_t __r, uint32_t __p,\n    uint8_t * __buf, size_t __buflen);\n\nextern uint8_t * escrypt_r(escrypt_local_t * __local,\n    const uint8_t * __passwd, size_t __passwdlen,\n    const uint8_t * __setting,\n    uint8_t * __buf, size_t __buflen);\n\nextern uint8_t * escrypt_gensalt_r(\n    uint32_t __N_log2, uint32_t __r, uint32_t __p,\n    const uint8_t * __src, size_t __srclen,\n    uint8_t * __buf, size_t __buflen);\n\n#endif /* !_CRYPTO_SCRYPT_H_ */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c",
    "content": "/*-\n * Copyright 2009 Colin Percival\n * Copyright 2013 Alexander Peslyak\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 * This file was originally written by Colin Percival as part of the Tarsnap\n * online backup system.\n */\n\n#include <errno.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"../pbkdf2-sha256.h\"\n#include \"../sysendian.h\"\n#include \"../crypto_scrypt.h\"\n\nstatic inline void\nblkcpy_64(escrypt_block_t *dest, const escrypt_block_t *src)\n{\n\tint i;\n\n#if (ARCH_BITS==32)\n\tfor (i = 0; i < 16; ++i)\n\t\tdest->w[i] = src->w[i];\n#else\n\tfor (i = 0; i < 8; ++i)\n\t\tdest->d[i] = src->d[i];\n#endif\n}\n\nstatic inline void\nblkxor_64(escrypt_block_t *dest, const escrypt_block_t *src)\n{\n\tint i;\n\n#if (ARCH_BITS==32)\n\tfor (i = 0; i < 16; ++i)\n\t\tdest->w[i] ^= src->w[i];\n#else\n\tfor (i = 0; i < 8; ++i)\n\t\tdest->d[i] ^= src->d[i];\n#endif\n}\n\nstatic inline void\nblkcpy(escrypt_block_t *dest, const escrypt_block_t *src, size_t len)\n{\n\tsize_t i, L;\n#if (ARCH_BITS==32)\n\tL = (len>>2);\n\tfor (i = 0; i < L; ++i)\n\t\tdest->w[i] = src->w[i];\n#else\n\tL = (len>>3);\n\tfor (i = 0; i < L; ++i)\n\t\tdest->d[i] = src->d[i];\n#endif\n}\n\nstatic inline void\nblkxor(escrypt_block_t *dest, const escrypt_block_t *src, size_t len)\n{\n\tsize_t i, L;\n#if (ARCH_BITS==32)\n\tL = (len>>2);\n\tfor (i = 0; i < L; ++i)\n\t\tdest->w[i] ^= src->w[i];\n#else\n\tL = (len>>3);\n\tfor (i = 0; i < L; ++i)\n\t\tdest->d[i] ^= src->d[i];\n#endif\n}\n\n/**\n * salsa20_8(B):\n * Apply the salsa20/8 core to the provided block.\n */\nstatic void\nsalsa20_8(uint32_t B[16])\n{\n\tescrypt_block_t X;\n\tuint32_t *x = X.w;\n\tsize_t i;\n\n\tblkcpy_64(&X, (escrypt_block_t*)B);\n\tfor (i = 0; i < 8; i += 2) {\n#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b))))\n\t\t/* Operate on columns. */\n\t\tx[ 4] ^= R(x[ 0]+x[12], 7);  x[ 8] ^= R(x[ 4]+x[ 0], 9);\n\t\tx[12] ^= R(x[ 8]+x[ 4],13);  x[ 0] ^= R(x[12]+x[ 8],18);\n\n\t\tx[ 9] ^= R(x[ 5]+x[ 1], 7);  x[13] ^= R(x[ 9]+x[ 5], 9);\n\t\tx[ 1] ^= R(x[13]+x[ 9],13);  x[ 5] ^= R(x[ 1]+x[13],18);\n\n\t\tx[14] ^= R(x[10]+x[ 6], 7);  x[ 2] ^= R(x[14]+x[10], 9);\n\t\tx[ 6] ^= R(x[ 2]+x[14],13);  x[10] ^= R(x[ 6]+x[ 2],18);\n\n\t\tx[ 3] ^= R(x[15]+x[11], 7);  x[ 7] ^= R(x[ 3]+x[15], 9);\n\t\tx[11] ^= R(x[ 7]+x[ 3],13);  x[15] ^= R(x[11]+x[ 7],18);\n\n\t\t/* Operate on rows. */\n\t\tx[ 1] ^= R(x[ 0]+x[ 3], 7);  x[ 2] ^= R(x[ 1]+x[ 0], 9);\n\t\tx[ 3] ^= R(x[ 2]+x[ 1],13);  x[ 0] ^= R(x[ 3]+x[ 2],18);\n\n\t\tx[ 6] ^= R(x[ 5]+x[ 4], 7);  x[ 7] ^= R(x[ 6]+x[ 5], 9);\n\t\tx[ 4] ^= R(x[ 7]+x[ 6],13);  x[ 5] ^= R(x[ 4]+x[ 7],18);\n\n\t\tx[11] ^= R(x[10]+x[ 9], 7);  x[ 8] ^= R(x[11]+x[10], 9);\n\t\tx[ 9] ^= R(x[ 8]+x[11],13);  x[10] ^= R(x[ 9]+x[ 8],18);\n\n\t\tx[12] ^= R(x[15]+x[14], 7);  x[13] ^= R(x[12]+x[15], 9);\n\t\tx[14] ^= R(x[13]+x[12],13);  x[15] ^= R(x[14]+x[13],18);\n#undef R\n\t}\n\tfor (i = 0; i < 16; i++)\n\t\tB[i] += x[i];\n}\n\n/**\n * blockmix_salsa8(Bin, Bout, X, r):\n * Compute Bout = BlockMix_{salsa20/8, r}(Bin).  The input Bin must be 128r\n * bytes in length; the output Bout must also be the same size.  The\n * temporary space X must be 64 bytes.\n */\nstatic void\nblockmix_salsa8(const uint32_t * Bin, uint32_t * Bout, uint32_t * X, size_t r)\n{\n\tsize_t i;\n\n\t/* 1: X <-- B_{2r - 1} */\n\tblkcpy_64((escrypt_block_t*)X, (escrypt_block_t*)&Bin[(2 * r - 1) * 16]);\n\n\t/* 2: for i = 0 to 2r - 1 do */\n\tfor (i = 0; i < 2 * r; i += 2) {\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\tblkxor_64((escrypt_block_t*)X, (escrypt_block_t*)&Bin[i * 16]);\n\t\tsalsa20_8(X);\n\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tblkcpy_64((escrypt_block_t*)&Bout[i * 8], (escrypt_block_t*)X);\n\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\tblkxor_64((escrypt_block_t*)X, (escrypt_block_t*)&Bin[i * 16 + 16]);\n\t\tsalsa20_8(X);\n\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tblkcpy_64((escrypt_block_t*)&Bout[i * 8 + r * 16], (escrypt_block_t*)X);\n\t}\n}\n\n/**\n * integerify(B, r):\n * Return the result of parsing B_{2r-1} as a little-endian integer.\n */\nstatic inline uint64_t\nintegerify(const void * B, size_t r)\n{\n\tconst uint32_t * X = (const uint32_t *)((uintptr_t)(B) + (2 * r - 1) * 64);\n\n\treturn (((uint64_t)(X[1]) << 32) + X[0]);\n}\n\n/**\n * smix(B, r, N, V, XY):\n * Compute B = SMix_r(B, N).  The input B must be 128r bytes in length;\n * the temporary storage V must be 128rN bytes in length; the temporary\n * storage XY must be 256r + 64 bytes in length.  The value N must be a\n * power of 2 greater than 1.  The arrays B, V, and XY must be aligned to a\n * multiple of 64 bytes.\n */\nstatic void\nsmix(uint8_t * B, size_t r, uint64_t N, uint32_t * V, uint32_t * XY)\n{\n\tuint32_t * X = XY;\n\tuint32_t * Y = &XY[32 * r];\n\tuint32_t * Z = &XY[64 * r];\n\tuint64_t i;\n\tuint64_t j;\n\tsize_t k;\n\n\t/* 1: X <-- B */\n\tfor (k = 0; k < 32 * r; k++)\n\t\tX[k] = le32dec(&B[4 * k]);\n\n\t/* 2: for i = 0 to N - 1 do */\n\tfor (i = 0; i < N; i += 2) {\n\t\t/* 3: V_i <-- X */\n\t\tblkcpy((escrypt_block_t*)&V[i * (32 * r)], (escrypt_block_t*)X, 128 * r);\n\n\t\t/* 4: X <-- H(X) */\n\t\tblockmix_salsa8(X, Y, Z, r);\n\n\t\t/* 3: V_i <-- X */\n\t\tblkcpy((escrypt_block_t*)&V[(i + 1) * (32 * r)], (escrypt_block_t*)Y, 128 * r);\n\n\t\t/* 4: X <-- H(X) */\n\t\tblockmix_salsa8(Y, X, Z, r);\n\t}\n\n\t/* 6: for i = 0 to N - 1 do */\n\tfor (i = 0; i < N; i += 2) {\n\t\t/* 7: j <-- Integerify(X) mod N */\n\t\tj = integerify(X, r) & (N - 1);\n\n\t\t/* 8: X <-- H(X \\xor V_j) */\n\t\tblkxor((escrypt_block_t*)X, (escrypt_block_t*)&V[j * (32 * r)], 128 * r);\n\t\tblockmix_salsa8(X, Y, Z, r);\n\n\t\t/* 7: j <-- Integerify(X) mod N */\n\t\tj = integerify(Y, r) & (N - 1);\n\n\t\t/* 8: X <-- H(X \\xor V_j) */\n\t\tblkxor((escrypt_block_t*)Y, (escrypt_block_t*)&V[j * (32 * r)], 128 * r);\n\t\tblockmix_salsa8(Y, X, Z, r);\n\t}\n\t/* 10: B' <-- X */\n\tfor (k = 0; k < 32 * r; k++)\n\t\tle32enc(&B[4 * k], X[k]);\n}\n\n/**\n * escrypt_kdf(local, passwd, passwdlen, salt, saltlen,\n *     N, r, p, buf, buflen):\n * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r,\n * p, buflen) and write the result into buf.  The parameters r, p, and buflen\n * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32.  The parameter N\n * must be a power of 2 greater than 1.\n *\n * Return 0 on success; or -1 on error.\n */\nint\nescrypt_kdf_nosse(escrypt_local_t * local,\n    const uint8_t * passwd, size_t passwdlen,\n    const uint8_t * salt, size_t saltlen,\n    uint64_t N, uint32_t _r, uint32_t _p,\n    uint8_t * buf, size_t buflen)\n{\n\tsize_t B_size, V_size, XY_size, need;\n\tuint8_t * B;\n\tuint32_t * V, * XY;\n    size_t r = _r, p = _p;\n\tuint32_t i;\n\n\t/* Sanity-check parameters. */\n#if SIZE_MAX > UINT32_MAX\n\tif (buflen > (((uint64_t)(1) << 32) - 1) * 32) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n#endif\n\tif ((uint64_t)(r) * (uint64_t)(p) >= (1 << 30)) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n\tif (N > UINT32_MAX) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n\tif (((N & (N - 1)) != 0) || (N < 2)) {\n\t\terrno = EINVAL;\n\t\treturn -1;\n\t}\n\tif (r == 0 || p == 0) {\n\t\terrno = EINVAL;\n\t\treturn -1;\n\t}\n\tif ((r > SIZE_MAX / 128 / p) ||\n#if SIZE_MAX / 256 <= UINT32_MAX\n\t    (r > SIZE_MAX / 256) ||\n#endif\n\t    (N > SIZE_MAX / 128 / r)) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\n\t/* Allocate memory. */\n\tB_size = (size_t)128 * r * p;\n\tV_size = (size_t)128 * r * N;\n\tneed = B_size + V_size;\n\tif (need < V_size) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\tXY_size = (size_t)256 * r + 64;\n\tneed += XY_size;\n\tif (need < XY_size) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\tif (local->size < need) {\n\t\tif (free_region(local))\n\t\t\treturn -1;\n\t\tif (!alloc_region(local, need))\n\t\t\treturn -1;\n\t}\n\tB = (uint8_t *)local->aligned;\n\tV = (uint32_t *)((uint8_t *)B + B_size);\n\tXY = (uint32_t *)((uint8_t *)V + V_size);\n\n\t/* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */\n\tPBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, B_size);\n\n\t/* 2: for i = 0 to p - 1 do */\n\tfor (i = 0; i < p; i++) {\n\t\t/* 3: B_i <-- MF(B_i, N) */\n\t\tsmix(&B[(size_t)128 * i * r], r, N, V, XY);\n\t}\n\n\t/* 5: DK <-- PBKDF2(P, B, 1, dkLen) */\n\tPBKDF2_SHA256(passwd, passwdlen, B, B_size, 1, buf, buflen);\n\n\t/* Success! */\n\treturn 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c",
    "content": "/*-\n * Copyright 2005,2007,2009 Colin Percival\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 <stdlib.h>\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <string.h>\n\n#include \"crypto_auth_hmacsha256.h\"\n#include \"pbkdf2-sha256.h\"\n#include \"sysendian.h\"\n#include \"utils.h\"\n\n/**\n * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen):\n * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and\n * write the output to buf.  The value dkLen must be at most 32 * (2^32 - 1).\n */\nvoid\nPBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt,\n              size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen)\n{\n    crypto_auth_hmacsha256_state PShctx, hctx;\n    size_t          i;\n    uint8_t         ivec[4];\n    uint8_t         U[32];\n    uint8_t         T[32];\n    uint64_t        j;\n    int             k;\n    size_t          clen;\n\n    if (dkLen > 0x1fffffffe0ULL) {\n        abort();\n    }\n    crypto_auth_hmacsha256_init(&PShctx, passwd, passwdlen);\n    crypto_auth_hmacsha256_update(&PShctx, salt, saltlen);\n\n    for (i = 0; i * 32 < dkLen; i++) {\n        be32enc(ivec, (uint32_t)(i + 1));\n        memcpy(&hctx, &PShctx, sizeof(crypto_auth_hmacsha256_state));\n        crypto_auth_hmacsha256_update(&hctx, ivec, 4);\n        crypto_auth_hmacsha256_final(&hctx, U);\n\n        memcpy(T, U, 32);\n        /* LCOV_EXCL_START */\n        for (j = 2; j <= c; j++) {\n            crypto_auth_hmacsha256_init(&hctx, passwd, passwdlen);\n            crypto_auth_hmacsha256_update(&hctx, U, 32);\n            crypto_auth_hmacsha256_final(&hctx, U);\n\n            for (k = 0; k < 32; k++) {\n                T[k] ^= U[k];\n            }\n        }\n        /* LCOV_EXCL_STOP */\n\n        clen = dkLen - i * 32;\n        if (clen > 32) {\n            clen = 32;\n        }\n        memcpy(&buf[i * 32], T, clen);\n    }\n    sodium_memzero((void *) &PShctx, sizeof PShctx);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.h",
    "content": "/*-\n * Copyright 2005,2007,2009 Colin Percival\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#ifndef pbkdf2_sha256_H\n#define pbkdf2_sha256_H\n\n#include <sys/types.h>\n\n#include <stdint.h>\n\n#include \"crypto_auth_hmacsha256.h\"\n\n/**\n * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen):\n * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and\n * write the output to buf.  The value dkLen must be at most 32 * (2^32 - 1).\n */\nvoid PBKDF2_SHA256(const uint8_t *, size_t, const uint8_t *, size_t,\n                   uint64_t, uint8_t *, size_t);\n\n#endif /* !_SHA256_H_ */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c",
    "content": "\n#include <errno.h>\n#include <limits.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <string.h>\n\n#include \"crypto_pwhash_scryptsalsa208sha256.h\"\n#include \"crypto_scrypt.h\"\n#include \"randombytes.h\"\n#include \"utils.h\"\n\n#define SETTING_SIZE(saltbytes) \\\n    (sizeof \"$7$\" - 1U) + \\\n    (1U /* N_log2 */) + (5U /* r */) + (5U /* p */) + BYTES2CHARS(saltbytes)\n\nstatic int\npickparams(unsigned long long opslimit, const size_t memlimit,\n           uint32_t * const N_log2, uint32_t * const p, uint32_t * const r)\n{\n    unsigned long long maxN;\n    unsigned long long maxrp;\n\n    if (opslimit < 32768) {\n        opslimit = 32768;\n    }\n    *r = 8;\n    if (opslimit < memlimit / 32) {\n        *p = 1;\n        maxN = opslimit / (*r * 4);\n        for (*N_log2 = 1; *N_log2 < 63; *N_log2 += 1) {\n            if ((uint64_t)(1) << *N_log2 > maxN / 2) {\n                break;\n            }\n        }\n    } else {\n        maxN = memlimit / ((size_t) *r * 128);\n        for (*N_log2 = 1; *N_log2 < 63; *N_log2 += 1) {\n            if ((uint64_t) (1) << *N_log2 > maxN / 2) {\n                break;\n            }\n        }\n        maxrp = (opslimit / 4) / ((uint64_t) (1) << *N_log2);\n        /* LCOV_EXCL_START */\n        if (maxrp > 0x3fffffff) {\n            maxrp = 0x3fffffff;\n        }\n        /* LCOV_EXCL_STOP */\n        *p = (uint32_t) (maxrp) / *r;\n    }\n    return 0;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_saltbytes(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_SALTBYTES;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_strbytes(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_STRBYTES;\n}\n\nconst char *\ncrypto_pwhash_scryptsalsa208sha256_strprefix(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_STRPREFIX;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE;\n}\n\nsize_t\ncrypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void)\n{\n    return crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE;\n}\n\nint\ncrypto_pwhash_scryptsalsa208sha256(unsigned char * const out,\n                                   unsigned long long outlen,\n                                   const char * const passwd,\n                                   unsigned long long passwdlen,\n                                   const unsigned char * const salt,\n                                   unsigned long long opslimit,\n                                   size_t memlimit)\n{\n    uint32_t N_log2;\n    uint32_t p;\n    uint32_t r;\n\n    memset(out, 0, outlen);\n    if (passwdlen > SIZE_MAX || outlen > SIZE_MAX) {\n        errno = EFBIG; /* LCOV_EXCL_LINE */\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    if (pickparams(opslimit, memlimit, &N_log2, &p, &r) != 0) {\n        errno = EINVAL; /* LCOV_EXCL_LINE */\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    return crypto_pwhash_scryptsalsa208sha256_ll((const uint8_t *) passwd,\n                                                 (size_t) passwdlen,\n                                                 (const uint8_t *) salt,\n                                                 crypto_pwhash_scryptsalsa208sha256_SALTBYTES,\n                                                 (uint64_t) (1) << N_log2, r, p,\n                                                 out, (size_t) outlen);\n}\n\nint\ncrypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                       const char * const passwd,\n                                       unsigned long long passwdlen,\n                                       unsigned long long opslimit,\n                                       size_t memlimit)\n{\n    uint8_t         salt[crypto_pwhash_scryptsalsa208sha256_STRSALTBYTES];\n    char            setting[crypto_pwhash_scryptsalsa208sha256_STRSETTINGBYTES + 1U];\n    escrypt_local_t escrypt_local;\n    uint32_t        N_log2;\n    uint32_t        p;\n    uint32_t        r;\n\n    memset(out, 0, crypto_pwhash_scryptsalsa208sha256_STRBYTES);\n    if (passwdlen > SIZE_MAX) {\n        errno = EFBIG; /* LCOV_EXCL_LINE */\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    if (pickparams(opslimit, memlimit, &N_log2, &p, &r) != 0) {\n        errno = EINVAL; /* LCOV_EXCL_LINE */\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    randombytes_buf(salt, sizeof salt);\n    if (escrypt_gensalt_r(N_log2, r, p, salt, sizeof salt,\n                          (uint8_t *) setting, sizeof setting) == NULL) {\n        errno = EINVAL; /* LCOV_EXCL_LINE */\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    if (escrypt_init_local(&escrypt_local) != 0) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    if (escrypt_r(&escrypt_local, (const uint8_t *) passwd, (size_t) passwdlen,\n                  (const uint8_t *) setting, (uint8_t *) out,\n                  crypto_pwhash_scryptsalsa208sha256_STRBYTES) == NULL) {\n        /* LCOV_EXCL_START */\n        escrypt_free_local(&escrypt_local);\n        errno = EINVAL;\n        return -1;\n        /* LCOV_EXCL_STOP */\n    }\n    escrypt_free_local(&escrypt_local);\n\n    (void) sizeof\n        (int[SETTING_SIZE(crypto_pwhash_scryptsalsa208sha256_STRSALTBYTES)\n            == crypto_pwhash_scryptsalsa208sha256_STRSETTINGBYTES ? 1 : -1]);\n    (void) sizeof\n        (int[crypto_pwhash_scryptsalsa208sha256_STRSETTINGBYTES + 1U +\n             crypto_pwhash_scryptsalsa208sha256_STRHASHBYTES_ENCODED + 1U\n             == crypto_pwhash_scryptsalsa208sha256_STRBYTES ? 1 : -1]);\n\n    return 0;\n}\n\nint\ncrypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                              const char * const passwd,\n                                              unsigned long long passwdlen)\n{\n    char            wanted[crypto_pwhash_scryptsalsa208sha256_STRBYTES];\n    escrypt_local_t escrypt_local;\n    int             ret = -1;\n\n    if (memchr(str, 0, crypto_pwhash_scryptsalsa208sha256_STRBYTES) !=\n        &str[crypto_pwhash_scryptsalsa208sha256_STRBYTES - 1U]) {\n        return -1;\n    }\n    if (escrypt_init_local(&escrypt_local) != 0) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    if (escrypt_r(&escrypt_local, (const uint8_t *) passwd, (size_t) passwdlen,\n                  (const uint8_t *) str, (uint8_t *) wanted,\n                  sizeof wanted) == NULL) {\n        escrypt_free_local(&escrypt_local);\n        return -1;\n    }\n    escrypt_free_local(&escrypt_local);\n    ret = sodium_memcmp(wanted, str, sizeof wanted);\n    sodium_memzero(wanted, sizeof wanted);\n\n    return ret;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c",
    "content": "/*-\n * Copyright 2013 Alexander Peslyak\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted.\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#ifdef HAVE_SYS_MMAN_H\n# include <sys/mman.h>\n#endif\n#include <errno.h>\n#include <stdlib.h>\n\n#include \"crypto_scrypt.h\"\n#include \"runtime.h\"\n\n#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)\n# define MAP_ANON MAP_ANONYMOUS\n#endif\n\nvoid *\nalloc_region(escrypt_region_t * region, size_t size)\n{\n\tuint8_t * base, * aligned;\n#if defined(MAP_ANON) && defined(HAVE_MMAP)\n\tif ((base = (uint8_t *) mmap(NULL, size, PROT_READ | PROT_WRITE,\n#ifdef MAP_NOCORE\n\t    MAP_ANON | MAP_PRIVATE | MAP_NOCORE,\n#else\n\t    MAP_ANON | MAP_PRIVATE,\n#endif\n\t    -1, 0)) == MAP_FAILED)\n\t\tbase = NULL; /* LCOV_EXCL_LINE */\n\taligned = base;\n#elif defined(HAVE_POSIX_MEMALIGN)\n\tif ((errno = posix_memalign((void **) &base, 64, size)) != 0)\n\t\tbase = NULL;\n\taligned = base;\n#else\n\tbase = aligned = NULL;\n\tif (size + 63 < size)\n\t\terrno = ENOMEM;\n\telse if ((base = (uint8_t *) malloc(size + 63)) != NULL) {\n\t\taligned = base + 63;\n\t\taligned -= (uintptr_t)aligned & 63;\n\t}\n#endif\n\tregion->base = base;\n\tregion->aligned = aligned;\n\tregion->size = base ? size : 0;\n\treturn aligned;\n}\n\nstatic inline void\ninit_region(escrypt_region_t * region)\n{\n\tregion->base = region->aligned = NULL;\n\tregion->size = 0;\n}\n\nint\nfree_region(escrypt_region_t * region)\n{\n\tif (region->base) {\n#if defined(MAP_ANON) && defined(HAVE_MMAP)\n\t\tif (munmap(region->base, region->size))\n\t\t\treturn -1; /* LCOV_EXCL_LINE */\n#else\n\t\tfree(region->base);\n#endif\n\t}\n\tinit_region(region);\n\treturn 0;\n}\n\nint\nescrypt_init_local(escrypt_local_t * local)\n{\n\tinit_region(local);\n\treturn 0;\n}\n\nint\nescrypt_free_local(escrypt_local_t * local)\n{\n\treturn free_region(local);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sse/pwhash_scryptsalsa208sha256_sse.c",
    "content": "/*-\n * Copyright 2009 Colin Percival\n * Copyright 2012,2013 Alexander Peslyak\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 * This file was originally written by Colin Percival as part of the Tarsnap\n * online backup system.\n */\n\n#if defined(HAVE_EMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n#if __GNUC__\n# pragma GCC target(\"sse2\")\n#endif\n#include <emmintrin.h>\n#if defined(__XOP__) && defined(DISABLED)\n# include <x86intrin.h>\n#endif\n\n#include <errno.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"../pbkdf2-sha256.h\"\n#include \"../sysendian.h\"\n#include \"../crypto_scrypt.h\"\n\n#if defined(__XOP__) && defined(DISABLED)\n#define ARX(out, in1, in2, s) \\\n\tout = _mm_xor_si128(out, _mm_roti_epi32(_mm_add_epi32(in1, in2), s));\n#else\n#define ARX(out, in1, in2, s) \\\n\t{ \\\n\t\t__m128i T = _mm_add_epi32(in1, in2); \\\n\t\tout = _mm_xor_si128(out, _mm_slli_epi32(T, s)); \\\n\t\tout = _mm_xor_si128(out, _mm_srli_epi32(T, 32-s)); \\\n\t}\n#endif\n\n#define SALSA20_2ROUNDS \\\n\t/* Operate on \"columns\". */ \\\n\tARX(X1, X0, X3, 7) \\\n\tARX(X2, X1, X0, 9) \\\n\tARX(X3, X2, X1, 13) \\\n\tARX(X0, X3, X2, 18) \\\n\\\n\t/* Rearrange data. */ \\\n\tX1 = _mm_shuffle_epi32(X1, 0x93); \\\n\tX2 = _mm_shuffle_epi32(X2, 0x4E); \\\n\tX3 = _mm_shuffle_epi32(X3, 0x39); \\\n\\\n\t/* Operate on \"rows\". */ \\\n\tARX(X3, X0, X1, 7) \\\n\tARX(X2, X3, X0, 9) \\\n\tARX(X1, X2, X3, 13) \\\n\tARX(X0, X1, X2, 18) \\\n\\\n\t/* Rearrange data. */ \\\n\tX1 = _mm_shuffle_epi32(X1, 0x39); \\\n\tX2 = _mm_shuffle_epi32(X2, 0x4E); \\\n\tX3 = _mm_shuffle_epi32(X3, 0x93);\n\n/**\n * Apply the salsa20/8 core to the block provided in (X0 ... X3) ^ (Z0 ... Z3).\n */\n#define SALSA20_8_XOR(in, out) \\\n\t{ \\\n\t\t__m128i Y0 = X0 = _mm_xor_si128(X0, (in)[0]); \\\n\t\t__m128i Y1 = X1 = _mm_xor_si128(X1, (in)[1]); \\\n\t\t__m128i Y2 = X2 = _mm_xor_si128(X2, (in)[2]); \\\n\t\t__m128i Y3 = X3 = _mm_xor_si128(X3, (in)[3]); \\\n\t\tSALSA20_2ROUNDS \\\n\t\tSALSA20_2ROUNDS \\\n\t\tSALSA20_2ROUNDS \\\n\t\tSALSA20_2ROUNDS \\\n\t\t(out)[0] = X0 = _mm_add_epi32(X0, Y0); \\\n\t\t(out)[1] = X1 = _mm_add_epi32(X1, Y1); \\\n\t\t(out)[2] = X2 = _mm_add_epi32(X2, Y2); \\\n\t\t(out)[3] = X3 = _mm_add_epi32(X3, Y3); \\\n\t}\n\n/**\n * blockmix_salsa8(Bin, Bout, r):\n * Compute Bout = BlockMix_{salsa20/8, r}(Bin).  The input Bin must be 128r\n * bytes in length; the output Bout must also be the same size.\n */\nstatic inline void\nblockmix_salsa8(const __m128i * Bin, __m128i * Bout, size_t r)\n{\n\t__m128i X0, X1, X2, X3;\n\tsize_t i;\n\n\t/* 1: X <-- B_{2r - 1} */\n\tX0 = Bin[8 * r - 4];\n\tX1 = Bin[8 * r - 3];\n\tX2 = Bin[8 * r - 2];\n\tX3 = Bin[8 * r - 1];\n\n\t/* 3: X <-- H(X \\xor B_i) */\n\t/* 4: Y_i <-- X */\n\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\tSALSA20_8_XOR(Bin, Bout)\n\n\t/* 2: for i = 0 to 2r - 1 do */\n\tr--;\n\tfor (i = 0; i < r;) {\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tSALSA20_8_XOR(&Bin[i * 8 + 4], &Bout[(r + i) * 4 + 4])\n\n\t\ti++;\n\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tSALSA20_8_XOR(&Bin[i * 8], &Bout[i * 4])\n\t}\n\n\t/* 3: X <-- H(X \\xor B_i) */\n\t/* 4: Y_i <-- X */\n\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\tSALSA20_8_XOR(&Bin[i * 8 + 4], &Bout[(r + i) * 4 + 4])\n}\n\n#define XOR4(in) \\\n\tX0 = _mm_xor_si128(X0, (in)[0]); \\\n\tX1 = _mm_xor_si128(X1, (in)[1]); \\\n\tX2 = _mm_xor_si128(X2, (in)[2]); \\\n\tX3 = _mm_xor_si128(X3, (in)[3]);\n\n#define XOR4_2(in1, in2) \\\n\tX0 = _mm_xor_si128((in1)[0], (in2)[0]); \\\n\tX1 = _mm_xor_si128((in1)[1], (in2)[1]); \\\n\tX2 = _mm_xor_si128((in1)[2], (in2)[2]); \\\n\tX3 = _mm_xor_si128((in1)[3], (in2)[3]);\n\nstatic inline uint32_t\nblockmix_salsa8_xor(const __m128i * Bin1, const __m128i * Bin2, __m128i * Bout,\n    size_t r)\n{\n\t__m128i X0, X1, X2, X3;\n\tsize_t i;\n\n\t/* 1: X <-- B_{2r - 1} */\n\tXOR4_2(&Bin1[8 * r - 4], &Bin2[8 * r - 4])\n\n\t/* 3: X <-- H(X \\xor B_i) */\n\t/* 4: Y_i <-- X */\n\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\tXOR4(Bin1)\n\tSALSA20_8_XOR(Bin2, Bout)\n\n\t/* 2: for i = 0 to 2r - 1 do */\n\tr--;\n\tfor (i = 0; i < r;) {\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tXOR4(&Bin1[i * 8 + 4])\n\t\tSALSA20_8_XOR(&Bin2[i * 8 + 4], &Bout[(r + i) * 4 + 4])\n\n\t\ti++;\n\n\t\t/* 3: X <-- H(X \\xor B_i) */\n\t\t/* 4: Y_i <-- X */\n\t\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\t\tXOR4(&Bin1[i * 8])\n\t\tSALSA20_8_XOR(&Bin2[i * 8], &Bout[i * 4])\n\t}\n\n\t/* 3: X <-- H(X \\xor B_i) */\n\t/* 4: Y_i <-- X */\n\t/* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */\n\tXOR4(&Bin1[i * 8 + 4])\n\tSALSA20_8_XOR(&Bin2[i * 8 + 4], &Bout[(r + i) * 4 + 4])\n\n\treturn _mm_cvtsi128_si32(X0);\n}\n\n#undef ARX\n#undef SALSA20_2ROUNDS\n#undef SALSA20_8_XOR\n#undef XOR4\n#undef XOR4_2\n\n/**\n * integerify(B, r):\n * Return the result of parsing B_{2r-1} as a little-endian integer.\n */\nstatic inline uint32_t\nintegerify(const void * B, size_t r)\n{\n\treturn *(const uint32_t *)((uintptr_t)(B) + (2 * r - 1) * 64);\n}\n\n/**\n * smix(B, r, N, V, XY):\n * Compute B = SMix_r(B, N).  The input B must be 128r bytes in length;\n * the temporary storage V must be 128rN bytes in length; the temporary\n * storage XY must be 256r + 64 bytes in length.  The value N must be a\n * power of 2 greater than 1.  The arrays B, V, and XY must be aligned to a\n * multiple of 64 bytes.\n */\nstatic void\nsmix(uint8_t * B, size_t r, uint32_t N, void * V, void * XY)\n{\n\tsize_t s = 128 * r;\n\t__m128i * X = (__m128i *) V, * Y;\n\tuint32_t * X32 = (uint32_t *) V;\n\tuint32_t i, j;\n\tsize_t k;\n\n\t/* 1: X <-- B */\n\t/* 3: V_i <-- X */\n\tfor (k = 0; k < 2 * r; k++) {\n\t\tfor (i = 0; i < 16; i++) {\n\t\t\tX32[k * 16 + i] =\n\t\t\t    le32dec(&B[(k * 16 + (i * 5 % 16)) * 4]);\n\t\t}\n\t}\n\n\t/* 2: for i = 0 to N - 1 do */\n\tfor (i = 1; i < N - 1; i += 2) {\n\t\t/* 4: X <-- H(X) */\n\t\t/* 3: V_i <-- X */\n\t\tY = (__m128i *)((uintptr_t)(V) + i * s);\n\t\tblockmix_salsa8(X, Y, r);\n\n\t\t/* 4: X <-- H(X) */\n\t\t/* 3: V_i <-- X */\n\t\tX = (__m128i *)((uintptr_t)(V) + (i + 1) * s);\n\t\tblockmix_salsa8(Y, X, r);\n\t}\n\n\t/* 4: X <-- H(X) */\n\t/* 3: V_i <-- X */\n\tY = (__m128i *)((uintptr_t)(V) + i * s);\n\tblockmix_salsa8(X, Y, r);\n\n\t/* 4: X <-- H(X) */\n\t/* 3: V_i <-- X */\n\tX = (__m128i *) XY;\n\tblockmix_salsa8(Y, X, r);\n\n\tX32 = (uint32_t *) XY;\n\tY = (__m128i *)((uintptr_t)(XY) + s);\n\n\t/* 7: j <-- Integerify(X) mod N */\n\tj = integerify(X, r) & (N - 1);\n\n\t/* 6: for i = 0 to N - 1 do */\n\tfor (i = 0; i < N; i += 2) {\n\t\t__m128i * V_j = (__m128i *)((uintptr_t)(V) + j * s);\n\n\t\t/* 8: X <-- H(X \\xor V_j) */\n\t\t/* 7: j <-- Integerify(X) mod N */\n\t\tj = blockmix_salsa8_xor(X, V_j, Y, r) & (N - 1);\n\t\tV_j = (__m128i *)((uintptr_t)(V) + j * s);\n\n\t\t/* 8: X <-- H(X \\xor V_j) */\n\t\t/* 7: j <-- Integerify(X) mod N */\n\t\tj = blockmix_salsa8_xor(Y, V_j, X, r) & (N - 1);\n\t}\n\n\t/* 10: B' <-- X */\n\tfor (k = 0; k < 2 * r; k++) {\n\t\tfor (i = 0; i < 16; i++) {\n\t\t\tle32enc(&B[(k * 16 + (i * 5 % 16)) * 4],\n\t\t\t    X32[k * 16 + i]);\n\t\t}\n\t}\n}\n\n/**\n * escrypt_kdf(local, passwd, passwdlen, salt, saltlen,\n *     N, r, p, buf, buflen):\n * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r,\n * p, buflen) and write the result into buf.  The parameters r, p, and buflen\n * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32.  The parameter N\n * must be a power of 2 greater than 1.\n *\n * Return 0 on success; or -1 on error.\n */\nint\nescrypt_kdf_sse(escrypt_local_t * local,\n    const uint8_t * passwd, size_t passwdlen,\n    const uint8_t * salt, size_t saltlen,\n    uint64_t N, uint32_t _r, uint32_t _p,\n    uint8_t * buf, size_t buflen)\n{\n\tsize_t B_size, V_size, XY_size, need;\n\tuint8_t * B;\n\tuint32_t * V, * XY;\n    size_t r = _r, p = _p;\n\tuint32_t i;\n\n\t/* Sanity-check parameters. */\n#if SIZE_MAX > UINT32_MAX\n\tif (buflen > (((uint64_t)(1) << 32) - 1) * 32) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n#endif\n\tif ((uint64_t)(r) * (uint64_t)(p) >= (1 << 30)) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n\tif (N > UINT32_MAX) {\n\t\terrno = EFBIG;\n\t\treturn -1;\n\t}\n\tif (((N & (N - 1)) != 0) || (N < 2)) {\n\t\terrno = EINVAL;\n\t\treturn -1;\n\t}\n\tif (r == 0 || p == 0) {\n\t\terrno = EINVAL;\n\t\treturn -1;\n\t}\n\tif ((r > SIZE_MAX / 128 / p) ||\n#if SIZE_MAX / 256 <= UINT32_MAX\n\t    (r > SIZE_MAX / 256) ||\n#endif\n\t    (N > SIZE_MAX / 128 / r)) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\n\t/* Allocate memory. */\n\tB_size = (size_t)128 * r * p;\n\tV_size = (size_t)128 * r * N;\n\tneed = B_size + V_size;\n\tif (need < V_size) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\tXY_size = (size_t)256 * r + 64;\n\tneed += XY_size;\n\tif (need < XY_size) {\n\t\terrno = ENOMEM;\n\t\treturn -1;\n\t}\n\tif (local->size < need) {\n\t\tif (free_region(local))\n\t\t\treturn -1; /* LCOV_EXCL_LINE */\n\t\tif (!alloc_region(local, need))\n\t\t\treturn -1; /* LCOV_EXCL_LINE */\n\t}\n\tB = (uint8_t *)local->aligned;\n\tV = (uint32_t *)((uint8_t *)B + B_size);\n\tXY = (uint32_t *)((uint8_t *)V + V_size);\n\n\t/* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */\n\tPBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, B_size);\n\n\t/* 2: for i = 0 to p - 1 do */\n\tfor (i = 0; i < p; i++) {\n\t\t/* 3: B_i <-- MF(B_i, N) */\n\t\tsmix(&B[(size_t)128 * i * r], r, (uint32_t) N, V, XY);\n\t}\n\n\t/* 5: DK <-- PBKDF2(P, B, 1, dkLen) */\n\tPBKDF2_SHA256(passwd, passwdlen, B, B_size, 1, buf, buflen);\n\n\t/* Success! */\n\treturn 0;\n}\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/sysendian.h",
    "content": "#ifndef sysendian_H\n#define sysendian_H\n\n#include <stdint.h>\n\n/* Avoid namespace collisions with BSD <sys/endian.h>. */\n#define be16dec scrypt_be16dec\n#define be16enc scrypt_be16enc\n#define be32dec scrypt_be32dec\n#define be32enc scrypt_be32enc\n#define be64dec scrypt_be64dec\n#define be64enc scrypt_be64enc\n#define le16dec scrypt_le16dec\n#define le16enc scrypt_le16enc\n#define le32dec scrypt_le32dec\n#define le32enc scrypt_le32enc\n#define le64dec scrypt_le64dec\n#define le64enc scrypt_le64enc\n\nstatic inline uint16_t\nbe16dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint16_t)(p[1]) + ((uint16_t)(p[0]) << 8));\n}\n\nstatic inline void\nbe16enc(void *pp, uint16_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[1] = x & 0xff;\n\tp[0] = (x >> 8) & 0xff;\n}\n\nstatic inline uint32_t\nbe32dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) +\n\t    ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24));\n}\n\nstatic inline void\nbe32enc(void *pp, uint32_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[3] = x & 0xff;\n\tp[2] = (x >> 8) & 0xff;\n\tp[1] = (x >> 16) & 0xff;\n\tp[0] = (x >> 24) & 0xff;\n}\n\nstatic inline uint64_t\nbe64dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint64_t)(p[7]) + ((uint64_t)(p[6]) << 8) +\n\t    ((uint64_t)(p[5]) << 16) + ((uint64_t)(p[4]) << 24) +\n\t    ((uint64_t)(p[3]) << 32) + ((uint64_t)(p[2]) << 40) +\n\t    ((uint64_t)(p[1]) << 48) + ((uint64_t)(p[0]) << 56));\n}\n\nstatic inline void\nbe64enc(void *pp, uint64_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[7] = x & 0xff;\n\tp[6] = (x >> 8) & 0xff;\n\tp[5] = (x >> 16) & 0xff;\n\tp[4] = (x >> 24) & 0xff;\n\tp[3] = (x >> 32) & 0xff;\n\tp[2] = (x >> 40) & 0xff;\n\tp[1] = (x >> 48) & 0xff;\n\tp[0] = (x >> 56) & 0xff;\n}\n\nstatic inline uint16_t\nle16dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint16_t)(p[0]) + ((uint16_t)(p[1]) << 8));\n}\n\nstatic inline void\nle16enc(void *pp, uint16_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[0] = x & 0xff;\n\tp[1] = (x >> 8) & 0xff;\n}\n\nstatic inline uint32_t\nle32dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) +\n\t    ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24));\n}\n\nstatic inline void\nle32enc(void *pp, uint32_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[0] = x & 0xff;\n\tp[1] = (x >> 8) & 0xff;\n\tp[2] = (x >> 16) & 0xff;\n\tp[3] = (x >> 24) & 0xff;\n}\n\nstatic inline uint64_t\nle64dec(const void *pp)\n{\n\tconst uint8_t *p = (uint8_t const *)pp;\n\n\treturn ((uint64_t)(p[0]) + ((uint64_t)(p[1]) << 8) +\n\t    ((uint64_t)(p[2]) << 16) + ((uint64_t)(p[3]) << 24) +\n\t    ((uint64_t)(p[4]) << 32) + ((uint64_t)(p[5]) << 40) +\n\t    ((uint64_t)(p[6]) << 48) + ((uint64_t)(p[7]) << 56));\n}\n\nstatic inline void\nle64enc(void *pp, uint64_t x)\n{\n\tuint8_t * p = (uint8_t *)pp;\n\n\tp[0] = x & 0xff;\n\tp[1] = (x >> 8) & 0xff;\n\tp[2] = (x >> 16) & 0xff;\n\tp[3] = (x >> 24) & 0xff;\n\tp[4] = (x >> 32) & 0xff;\n\tp[5] = (x >> 40) & 0xff;\n\tp[6] = (x >> 48) & 0xff;\n\tp[7] = (x >> 56) & 0xff;\n}\n\n#endif /* !_SYSENDIAN_H_ */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.c",
    "content": "\n#include \"crypto_scalarmult.h\"\n\nconst char *\ncrypto_scalarmult_primitive(void)\n{\n    return crypto_scalarmult_PRIMITIVE;\n}\n\nint\ncrypto_scalarmult_base(unsigned char *q, const unsigned char *n)\n{\n    return crypto_scalarmult_curve25519_base(q, n);\n}\n\nint\ncrypto_scalarmult(unsigned char *q, const unsigned char *n,\n                  const unsigned char *p)\n{\n    return crypto_scalarmult_curve25519(q, n, p);\n}\n\nsize_t\ncrypto_scalarmult_bytes(void)\n{\n    return crypto_scalarmult_BYTES;\n}\n\nsize_t\ncrypto_scalarmult_scalarbytes(void)\n{\n    return crypto_scalarmult_SCALARBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.c",
    "content": "/* Copyright 2008, Google Inc.\n * All rights reserved.\n *\n * Code released into the public domain.\n *\n * curve25519-donna: Curve25519 elliptic curve, public key function\n *\n * http://code.google.com/p/curve25519-donna/\n *\n * Adam Langley <agl@imperialviolet.org>\n * Parts optimised by floodyberry\n * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>\n *\n * More information about curve25519 can be found here\n *   http://cr.yp.to/ecdh.html\n *\n * djb's sample implementation of curve25519 is written in a special assembly\n * language called qhasm and uses the floating point registers.\n *\n * This is, almost, a clean room reimplementation from the curve25519 paper. It\n * uses many of the tricks described therein. Only the crecip function is taken\n * from the sample implementation.\n */\n\n#include <string.h>\n#include <stdint.h>\n\n#ifdef HAVE_TI_MODE\n\n#include \"utils.h\"\n#include \"curve25519_donna_c64.h\"\n#include \"../scalarmult_curve25519.h\"\n\ntypedef uint8_t u8;\ntypedef uint64_t limb;\ntypedef limb felem[5];\n// This is a special gcc mode for 128-bit integers. It's implemented on 64-bit\n// platforms only as far as I know.\ntypedef unsigned uint128_t __attribute__((mode(TI)));\n\n/* Sum two numbers: output += in */\nstatic inline void\nfsum(limb *output, const limb *in) {\n  output[0] += in[0];\n  output[1] += in[1];\n  output[2] += in[2];\n  output[3] += in[3];\n  output[4] += in[4];\n}\n\n/* Find the difference of two numbers: output = in - output\n * (note the order of the arguments!)\n *\n * Assumes that out[i] < 2**52\n * On return, out[i] < 2**55\n */\nstatic inline void\nfdifference_backwards(felem out, const felem in) {\n  /* 152 is 19 << 3 */\n  static const limb two54m152 = (((limb)1) << 54) - 152;\n  static const limb two54m8 = (((limb)1) << 54) - 8;\n\n  out[0] = in[0] + two54m152 - out[0];\n  out[1] = in[1] + two54m8 - out[1];\n  out[2] = in[2] + two54m8 - out[2];\n  out[3] = in[3] + two54m8 - out[3];\n  out[4] = in[4] + two54m8 - out[4];\n}\n\n/* Multiply a number by a scalar: output = in * scalar */\nstatic inline void\nfscalar_product(felem output, const felem in, const limb scalar) {\n  uint128_t a;\n\n  a = ((uint128_t) in[0]) * scalar;\n  output[0] = ((limb)a) & 0x7ffffffffffff;\n\n  a = ((uint128_t) in[1]) * scalar + ((limb) (a >> 51));\n  output[1] = ((limb)a) & 0x7ffffffffffff;\n\n  a = ((uint128_t) in[2]) * scalar + ((limb) (a >> 51));\n  output[2] = ((limb)a) & 0x7ffffffffffff;\n\n  a = ((uint128_t) in[3]) * scalar + ((limb) (a >> 51));\n  output[3] = ((limb)a) & 0x7ffffffffffff;\n\n  a = ((uint128_t) in[4]) * scalar + ((limb) (a >> 51));\n  output[4] = ((limb)a) & 0x7ffffffffffff;\n\n  output[0] += (a >> 51) * 19;\n}\n\n/* Multiply two numbers: output = in2 * in\n *\n * output must be distinct to both inputs. The inputs are reduced coefficient\n * form, the output is not.\n *\n * Assumes that in[i] < 2**55 and likewise for in2.\n * On return, output[i] < 2**52\n */\nstatic inline void\nfmul(felem output, const felem in2, const felem in) {\n  uint128_t t[5];\n  limb r0,r1,r2,r3,r4,s0,s1,s2,s3,s4,c;\n\n  r0 = in[0];\n  r1 = in[1];\n  r2 = in[2];\n  r3 = in[3];\n  r4 = in[4];\n\n  s0 = in2[0];\n  s1 = in2[1];\n  s2 = in2[2];\n  s3 = in2[3];\n  s4 = in2[4];\n\n  t[0]  =  ((uint128_t) r0) * s0;\n  t[1]  =  ((uint128_t) r0) * s1 + ((uint128_t) r1) * s0;\n  t[2]  =  ((uint128_t) r0) * s2 + ((uint128_t) r2) * s0 + ((uint128_t) r1) * s1;\n  t[3]  =  ((uint128_t) r0) * s3 + ((uint128_t) r3) * s0 + ((uint128_t) r1) * s2 + ((uint128_t) r2) * s1;\n  t[4]  =  ((uint128_t) r0) * s4 + ((uint128_t) r4) * s0 + ((uint128_t) r3) * s1 + ((uint128_t) r1) * s3 + ((uint128_t) r2) * s2;\n\n  r4 *= 19;\n  r1 *= 19;\n  r2 *= 19;\n  r3 *= 19;\n\n  t[0] += ((uint128_t) r4) * s1 + ((uint128_t) r1) * s4 + ((uint128_t) r2) * s3 + ((uint128_t) r3) * s2;\n  t[1] += ((uint128_t) r4) * s2 + ((uint128_t) r2) * s4 + ((uint128_t) r3) * s3;\n  t[2] += ((uint128_t) r4) * s3 + ((uint128_t) r3) * s4;\n  t[3] += ((uint128_t) r4) * s4;\n\n                  r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);\n  t[1] += c;      r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);\n  t[2] += c;      r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);\n  t[3] += c;      r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);\n  t[4] += c;      r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);\n  r0 +=   c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;\n  r1 +=   c;      c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;\n  r2 +=   c;\n\n  output[0] = r0;\n  output[1] = r1;\n  output[2] = r2;\n  output[3] = r3;\n  output[4] = r4;\n}\n\nstatic inline void\nfsquare_times(felem output, const felem in, limb count) {\n  uint128_t t[5];\n  limb r0,r1,r2,r3,r4,c;\n  limb d0,d1,d2,d4,d419;\n\n  r0 = in[0];\n  r1 = in[1];\n  r2 = in[2];\n  r3 = in[3];\n  r4 = in[4];\n\n  do {\n    d0 = r0 * 2;\n    d1 = r1 * 2;\n    d2 = r2 * 2 * 19;\n    d419 = r4 * 19;\n    d4 = d419 * 2;\n\n    t[0] = ((uint128_t) r0) * r0 + ((uint128_t) d4) * r1 + (((uint128_t) d2) * (r3     ));\n    t[1] = ((uint128_t) d0) * r1 + ((uint128_t) d4) * r2 + (((uint128_t) r3) * (r3 * 19));\n    t[2] = ((uint128_t) d0) * r2 + ((uint128_t) r1) * r1 + (((uint128_t) d4) * (r3     ));\n    t[3] = ((uint128_t) d0) * r3 + ((uint128_t) d1) * r2 + (((uint128_t) r4) * (d419   ));\n    t[4] = ((uint128_t) d0) * r4 + ((uint128_t) d1) * r3 + (((uint128_t) r2) * (r2     ));\n\n                    r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);\n    t[1] += c;      r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);\n    t[2] += c;      r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);\n    t[3] += c;      r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);\n    t[4] += c;      r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);\n    r0 +=   c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;\n    r1 +=   c;      c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;\n    r2 +=   c;\n  } while(--count);\n\n  output[0] = r0;\n  output[1] = r1;\n  output[2] = r2;\n  output[3] = r3;\n  output[4] = r4;\n}\n\n#ifdef NATIVE_LITTLE_ENDIAN\nstatic inline limb\nload_limb(const u8 *in) {\n    limb out;\n    memcpy(&out, in, sizeof (limb));\n    return out;\n}\nstatic inline void\nstore_limb(u8 *out, limb in) {\n    memcpy(out, &in, sizeof (limb));\n}\n#else\nstatic inline limb\nload_limb(const u8 *in) {\n  return\n    ((limb)in[0]) |\n    (((limb)in[1]) << 8) |\n    (((limb)in[2]) << 16) |\n    (((limb)in[3]) << 24) |\n    (((limb)in[4]) << 32) |\n    (((limb)in[5]) << 40) |\n    (((limb)in[6]) << 48) |\n    (((limb)in[7]) << 56);\n}\n\nstatic inline void\nstore_limb(u8 *out, limb in) {\n  out[0] = in & 0xff;\n  out[1] = (in >> 8) & 0xff;\n  out[2] = (in >> 16) & 0xff;\n  out[3] = (in >> 24) & 0xff;\n  out[4] = (in >> 32) & 0xff;\n  out[5] = (in >> 40) & 0xff;\n  out[6] = (in >> 48) & 0xff;\n  out[7] = (in >> 56) & 0xff;\n}\n#endif\n\n/* Take a little-endian, 32-byte number and expand it into polynomial form */\nstatic void\nfexpand(limb *output, const u8 *in) {\n  output[0] = load_limb(in) & 0x7ffffffffffff;\n  output[1] = (load_limb(in+6) >> 3) & 0x7ffffffffffff;\n  output[2] = (load_limb(in+12) >> 6) & 0x7ffffffffffff;\n  output[3] = (load_limb(in+19) >> 1) & 0x7ffffffffffff;\n  output[4] = (load_limb(in+24) >> 12) & 0x7ffffffffffff;\n}\n\n/* Take a fully reduced polynomial form number and contract it into a\n * little-endian, 32-byte array\n */\nstatic void\nfcontract(u8 *output, const felem input) {\n  uint128_t t[5];\n\n  t[0] = input[0];\n  t[1] = input[1];\n  t[2] = input[2];\n  t[3] = input[3];\n  t[4] = input[4];\n\n  t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;\n  t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;\n  t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;\n  t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;\n  t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;\n\n  t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;\n  t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;\n  t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;\n  t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;\n  t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;\n\n  /* now t is between 0 and 2^255-1, properly carried. */\n  /* case 1: between 0 and 2^255-20. case 2: between 2^255-19 and 2^255-1. */\n\n  t[0] += 19;\n\n  t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;\n  t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;\n  t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;\n  t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;\n  t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;\n\n  /* now between 19 and 2^255-1 in both cases, and offset by 19. */\n\n  t[0] += 0x8000000000000 - 19;\n  t[1] += 0x8000000000000 - 1;\n  t[2] += 0x8000000000000 - 1;\n  t[3] += 0x8000000000000 - 1;\n  t[4] += 0x8000000000000 - 1;\n\n  /* now between 2^255 and 2^256-20, and offset by 2^255. */\n\n  t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;\n  t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;\n  t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;\n  t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;\n  t[4] &= 0x7ffffffffffff;\n\n  store_limb(output, t[0] | (t[1] << 51));\n  store_limb(output + 8, (t[1] >> 13) | (t[2] << 38));\n  store_limb(output + 16, (t[2] >> 26) | (t[3] << 25));\n  store_limb(output + 24, (t[3] >> 39) | (t[4] << 12));\n}\n\n/* Input: Q, Q', Q-Q'\n * Output: 2Q, Q+Q'\n *\n *   x2 z3: long form\n *   x3 z3: long form\n *   x z: short form, destroyed\n *   xprime zprime: short form, destroyed\n *   qmqp: short form, preserved\n */\nstatic void\nfmonty(limb *x2, limb *z2, /* output 2Q */\n       limb *x3, limb *z3, /* output Q + Q' */\n       limb *x, limb *z,   /* input Q */\n       limb *xprime, limb *zprime, /* input Q' */\n       const limb *qmqp /* input Q - Q' */) {\n  limb origx[5], origxprime[5], zzz[5], xx[5], zz[5], xxprime[5],\n        zzprime[5], zzzprime[5];\n\n  memcpy(origx, x, 5 * sizeof(limb));\n  fsum(x, z);\n  fdifference_backwards(z, origx);  // does x - z\n\n  memcpy(origxprime, xprime, sizeof(limb) * 5);\n  fsum(xprime, zprime);\n  fdifference_backwards(zprime, origxprime);\n  fmul(xxprime, xprime, z);\n  fmul(zzprime, x, zprime);\n  memcpy(origxprime, xxprime, sizeof(limb) * 5);\n  fsum(xxprime, zzprime);\n  fdifference_backwards(zzprime, origxprime);\n  fsquare_times(x3, xxprime, 1);\n  fsquare_times(zzzprime, zzprime, 1);\n  fmul(z3, zzzprime, qmqp);\n\n  fsquare_times(xx, x, 1);\n  fsquare_times(zz, z, 1);\n  fmul(x2, xx, zz);\n  fdifference_backwards(zz, xx);  // does zz = xx - zz\n  fscalar_product(zzz, zz, 121665);\n  fsum(zzz, xx);\n  fmul(z2, zz, zzz);\n}\n\n// -----------------------------------------------------------------------------\n// Maybe swap the contents of two limb arrays (@a and @b), each @len elements\n// long. Perform the swap iff @swap is non-zero.\n//\n// This function performs the swap without leaking any side-channel\n// information.\n// -----------------------------------------------------------------------------\nstatic void\nswap_conditional(limb a[5], limb b[5], limb iswap) {\n  unsigned i;\n  const limb swap = -iswap;\n\n  for (i = 0; i < 5; ++i) {\n    const limb x = swap & (a[i] ^ b[i]);\n    a[i] ^= x;\n    b[i] ^= x;\n  }\n}\n\n/* Calculates nQ where Q is the x-coordinate of a point on the curve\n *\n *   resultx/resultz: the x coordinate of the resulting curve point (short form)\n *   n: a little endian, 32-byte number\n *   q: a point of the curve (short form)\n */\nstatic void\ncmult(limb *resultx, limb *resultz, const u8 *n, const limb *q) {\n  limb a[5] = {0}, b[5] = {1}, c[5] = {1}, d[5] = {0};\n  limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;\n  limb e[5] = {0}, f[5] = {1}, g[5] = {0}, h[5] = {1};\n  limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;\n\n  unsigned i, j;\n\n  memcpy(nqpqx, q, sizeof(limb) * 5);\n\n  for (i = 0; i < 32; ++i) {\n    u8 byte = n[31 - i];\n    for (j = 0; j < 8; ++j) {\n      const limb bit = byte >> 7;\n\n      swap_conditional(nqx, nqpqx, bit);\n      swap_conditional(nqz, nqpqz, bit);\n      fmonty(nqx2, nqz2,\n             nqpqx2, nqpqz2,\n             nqx, nqz,\n             nqpqx, nqpqz,\n             q);\n      swap_conditional(nqx2, nqpqx2, bit);\n      swap_conditional(nqz2, nqpqz2, bit);\n\n      t = nqx;\n      nqx = nqx2;\n      nqx2 = t;\n      t = nqz;\n      nqz = nqz2;\n      nqz2 = t;\n      t = nqpqx;\n      nqpqx = nqpqx2;\n      nqpqx2 = t;\n      t = nqpqz;\n      nqpqz = nqpqz2;\n      nqpqz2 = t;\n\n      byte <<= 1;\n    }\n  }\n\n  memcpy(resultx, nqx, sizeof(limb) * 5);\n  memcpy(resultz, nqz, sizeof(limb) * 5);\n}\n\n\n// -----------------------------------------------------------------------------\n// Shamelessly copied from djb's code, tightened a little\n// -----------------------------------------------------------------------------\nstatic void\ncrecip(felem out, const felem z) {\n  felem a,t0,b,c;\n\n  /* 2 */ fsquare_times(a, z, 1); // a = 2\n  /* 8 */ fsquare_times(t0, a, 2);\n  /* 9 */ fmul(b, t0, z); // b = 9\n  /* 11 */ fmul(a, b, a); // a = 11\n  /* 22 */ fsquare_times(t0, a, 1);\n  /* 2^5 - 2^0 = 31 */ fmul(b, t0, b);\n  /* 2^10 - 2^5 */ fsquare_times(t0, b, 5);\n  /* 2^10 - 2^0 */ fmul(b, t0, b);\n  /* 2^20 - 2^10 */ fsquare_times(t0, b, 10);\n  /* 2^20 - 2^0 */ fmul(c, t0, b);\n  /* 2^40 - 2^20 */ fsquare_times(t0, c, 20);\n  /* 2^40 - 2^0 */ fmul(t0, t0, c);\n  /* 2^50 - 2^10 */ fsquare_times(t0, t0, 10);\n  /* 2^50 - 2^0 */ fmul(b, t0, b);\n  /* 2^100 - 2^50 */ fsquare_times(t0, b, 50);\n  /* 2^100 - 2^0 */ fmul(c, t0, b);\n  /* 2^200 - 2^100 */ fsquare_times(t0, c, 100);\n  /* 2^200 - 2^0 */ fmul(t0, t0, c);\n  /* 2^250 - 2^50 */ fsquare_times(t0, t0, 50);\n  /* 2^250 - 2^0 */ fmul(t0, t0, b);\n  /* 2^255 - 2^5 */ fsquare_times(t0, t0, 5);\n  /* 2^255 - 21 */ fmul(out, t0, a);\n}\n\nstatic const unsigned char basepoint[32] = {9};\n\nstatic int\ncrypto_scalarmult_curve25519_donna_c64(unsigned char *mypublic,\n                                       const unsigned char *secret,\n                                       const unsigned char *basepoint) {\n  limb bp[5], x[5], z[5], zmone[5];\n  uint8_t e[32];\n  int i;\n\n  for (i = 0;i < 32;++i) e[i] = secret[i];\n  e[0] &= 248;\n  e[31] &= 127;\n  e[31] |= 64;\n\n  fexpand(bp, basepoint);\n  cmult(x, z, e, bp);\n  crecip(zmone, z);\n  fmul(z, x, zmone);\n  fcontract(mypublic, z);\n  return 0;\n}\n\nstatic int\ncrypto_scalarmult_curve25519_donna_c64_base(unsigned char *q,\n                                            const unsigned char *n)\n{\n  return crypto_scalarmult_curve25519_donna_c64(q, n, basepoint);\n}\n\nstruct crypto_scalarmult_curve25519_implementation\ncrypto_scalarmult_curve25519_donna_c64_implementation = {\n    SODIUM_C99(.mult = ) crypto_scalarmult_curve25519_donna_c64,\n    SODIUM_C99(.mult_base = ) crypto_scalarmult_curve25519_donna_c64_base\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/donna_c64/curve25519_donna_c64.h",
    "content": "#ifndef curve25519_donna_c64_H\n#define curve25519_donna_c64_H\n\n#include \"crypto_scalarmult_curve25519.h\"\n\nextern struct crypto_scalarmult_curve25519_implementation\n    crypto_scalarmult_curve25519_donna_c64_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.c",
    "content": "\n#include <stddef.h>\n\n#ifndef HAVE_TI_MODE\n\n#include \"utils.h\"\n#include \"curve25519_ref10.h\"\n#include \"../scalarmult_curve25519.h\"\n#include \"fe.h\"\n\nstatic const unsigned char basepoint[32] = {9};\n\nstatic int\ncrypto_scalarmult_curve25519_ref10(unsigned char *q,\n                                   const unsigned char *n,\n                                   const unsigned char *p)\n{\n  unsigned char e[32];\n  unsigned int i;\n  fe x1;\n  fe x2;\n  fe z2;\n  fe x3;\n  fe z3;\n  fe tmp0;\n  fe tmp1;\n  int pos;\n  unsigned int swap;\n  unsigned int b;\n\n  for (i = 0;i < 32;++i) e[i] = n[i];\n  e[0] &= 248;\n  e[31] &= 127;\n  e[31] |= 64;\n  fe_frombytes(x1,p);\n  fe_1(x2);\n  fe_0(z2);\n  fe_copy(x3,x1);\n  fe_1(z3);\n\n  swap = 0;\n  for (pos = 254;pos >= 0;--pos) {\n    b = e[pos / 8] >> (pos & 7);\n    b &= 1;\n    swap ^= b;\n    fe_cswap(x2,x3,swap);\n    fe_cswap(z2,z3,swap);\n    swap = b;\n#include \"montgomery.h\"\n  }\n  fe_cswap(x2,x3,swap);\n  fe_cswap(z2,z3,swap);\n\n  fe_invert(z2,z2);\n  fe_mul(x2,x2,z2);\n  fe_tobytes(q,x2);\n  return 0;\n}\n\nstatic int\ncrypto_scalarmult_curve25519_ref10_base(unsigned char *q,\n                                        const unsigned char *n)\n{\n  return crypto_scalarmult_curve25519_ref10(q,n,basepoint);\n}\n\nstruct crypto_scalarmult_curve25519_implementation\ncrypto_scalarmult_curve25519_ref10_implementation = {\n        SODIUM_C99(.mult = ) crypto_scalarmult_curve25519_ref10,\n        SODIUM_C99(.mult_base = ) crypto_scalarmult_curve25519_ref10_base\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/curve25519_ref10.h",
    "content": "#ifndef curve25519_ref10_H\n#define curve25519_ref10_H\n\n#include \"crypto_scalarmult_curve25519.h\"\n\nextern struct crypto_scalarmult_curve25519_implementation\n        crypto_scalarmult_curve25519_ref10_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe.h",
    "content": "#ifndef FE_H\n#define FE_H\n\n#include \"crypto_int32.h\"\n\ntypedef crypto_int32 fe[10];\n\n/*\nfe means field element.\nHere the field is \\Z/(2^255-19).\nAn element t, entries t[0]...t[9], represents the integer\nt[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9].\nBounds on each t[i] vary depending on context.\n*/\n\n#define fe_frombytes crypto_scalarmult_curve25519_ref10_fe_frombytes\n#define fe_tobytes crypto_scalarmult_curve25519_ref10_fe_tobytes\n#define fe_copy crypto_scalarmult_curve25519_ref10_fe_copy\n#define fe_0 crypto_scalarmult_curve25519_ref10_fe_0\n#define fe_1 crypto_scalarmult_curve25519_ref10_fe_1\n#define fe_cswap crypto_scalarmult_curve25519_ref10_fe_cswap\n#define fe_add crypto_scalarmult_curve25519_ref10_fe_add\n#define fe_sub crypto_scalarmult_curve25519_ref10_fe_sub\n#define fe_mul crypto_scalarmult_curve25519_ref10_fe_mul\n#define fe_sq crypto_scalarmult_curve25519_ref10_fe_sq\n#define fe_mul121666 crypto_scalarmult_curve25519_ref10_fe_mul121666\n#define fe_invert crypto_scalarmult_curve25519_ref10_fe_invert\n\nextern void fe_frombytes(fe,const unsigned char *);\nextern void fe_tobytes(unsigned char *,fe);\n\nextern void fe_copy(fe,fe);\nextern void fe_0(fe);\nextern void fe_1(fe);\nextern void fe_cswap(fe,fe,unsigned int);\n\nextern void fe_add(fe,fe,fe);\nextern void fe_sub(fe,fe,fe);\nextern void fe_mul(fe,fe,fe);\nextern void fe_sq(fe,fe);\nextern void fe_mul121666(fe,fe);\nextern void fe_invert(fe,fe);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_0_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = 0\n*/\n\nvoid fe_0(fe h)\n{\n  h[0] = 0;\n  h[1] = 0;\n  h[2] = 0;\n  h[3] = 0;\n  h[4] = 0;\n  h[5] = 0;\n  h[6] = 0;\n  h[7] = 0;\n  h[8] = 0;\n  h[9] = 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_1_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = 1\n*/\n\nvoid fe_1(fe h)\n{\n  h[0] = 1;\n  h[1] = 0;\n  h[2] = 0;\n  h[3] = 0;\n  h[4] = 0;\n  h[5] = 0;\n  h[6] = 0;\n  h[7] = 0;\n  h[8] = 0;\n  h[9] = 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_add_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f + g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nvoid fe_add(fe h,fe f,fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 h0 = f0 + g0;\n  crypto_int32 h1 = f1 + g1;\n  crypto_int32 h2 = f2 + g2;\n  crypto_int32 h3 = f3 + g3;\n  crypto_int32 h4 = f4 + g4;\n  crypto_int32 h5 = f5 + g5;\n  crypto_int32 h6 = f6 + g6;\n  crypto_int32 h7 = f7 + g7;\n  crypto_int32 h8 = f8 + g8;\n  crypto_int32 h9 = f9 + g9;\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_copy_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f\n*/\n\nvoid fe_copy(fe h,fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  h[0] = f0;\n  h[1] = f1;\n  h[2] = f2;\n  h[3] = f3;\n  h[4] = f4;\n  h[5] = f5;\n  h[6] = f6;\n  h[7] = f7;\n  h[8] = f8;\n  h[9] = f9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_cswap_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nReplace (f,g) with (g,f) if b == 1;\nreplace (f,g) with (f,g) if b == 0.\n\nPreconditions: b in {0,1}.\n*/\n\nvoid fe_cswap(fe f,fe g,unsigned int b)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 x0 = f0 ^ g0;\n  crypto_int32 x1 = f1 ^ g1;\n  crypto_int32 x2 = f2 ^ g2;\n  crypto_int32 x3 = f3 ^ g3;\n  crypto_int32 x4 = f4 ^ g4;\n  crypto_int32 x5 = f5 ^ g5;\n  crypto_int32 x6 = f6 ^ g6;\n  crypto_int32 x7 = f7 ^ g7;\n  crypto_int32 x8 = f8 ^ g8;\n  crypto_int32 x9 = f9 ^ g9;\n  b = (unsigned int) (- (int) b);\n  x0 &= b;\n  x1 &= b;\n  x2 &= b;\n  x3 &= b;\n  x4 &= b;\n  x5 &= b;\n  x6 &= b;\n  x7 &= b;\n  x8 &= b;\n  x9 &= b;\n  f[0] = f0 ^ x0;\n  f[1] = f1 ^ x1;\n  f[2] = f2 ^ x2;\n  f[3] = f3 ^ x3;\n  f[4] = f4 ^ x4;\n  f[5] = f5 ^ x5;\n  f[6] = f6 ^ x6;\n  f[7] = f7 ^ x7;\n  f[8] = f8 ^ x8;\n  f[9] = f9 ^ x9;\n  g[0] = g0 ^ x0;\n  g[1] = g1 ^ x1;\n  g[2] = g2 ^ x2;\n  g[3] = g3 ^ x3;\n  g[4] = g4 ^ x4;\n  g[5] = g5 ^ x5;\n  g[6] = g6 ^ x6;\n  g[7] = g7 ^ x7;\n  g[8] = g8 ^ x8;\n  g[9] = g9 ^ x9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_frombytes_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int32.h\"\n#include \"crypto_int64.h\"\n#include \"crypto_uint64.h\"\n\n#ifndef HAVE_TI_MODE\n\nstatic crypto_uint64 load_3(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  return result;\n}\n\nstatic crypto_uint64 load_4(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  result |= ((crypto_uint64) in[3]) << 24;\n  return result;\n}\n\nvoid fe_frombytes(fe h,const unsigned char *s)\n{\n  crypto_int64 h0 = load_4(s);\n  crypto_int64 h1 = load_3(s + 4) << 6;\n  crypto_int64 h2 = load_3(s + 7) << 5;\n  crypto_int64 h3 = load_3(s + 10) << 3;\n  crypto_int64 h4 = load_3(s + 13) << 2;\n  crypto_int64 h5 = load_4(s + 16);\n  crypto_int64 h6 = load_3(s + 20) << 7;\n  crypto_int64 h7 = load_3(s + 23) << 5;\n  crypto_int64 h8 = load_3(s + 26) << 4;\n  crypto_int64 h9 = (load_3(s + 29) & 8388607) << 2;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n  carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n  carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n  carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  h[0] = (crypto_int32) h0;\n  h[1] = (crypto_int32) h1;\n  h[2] = (crypto_int32) h2;\n  h[3] = (crypto_int32) h3;\n  h[4] = (crypto_int32) h4;\n  h[5] = (crypto_int32) h5;\n  h[6] = (crypto_int32) h6;\n  h[7] = (crypto_int32) h7;\n  h[8] = (crypto_int32) h8;\n  h[9] = (crypto_int32) h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_invert_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\nvoid fe_invert(fe out,fe z)\n{\n  fe t0;\n  fe t1;\n  fe t2;\n  fe t3;\n  int i;\n\n#include \"pow225521.h\"\n\n  return;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul121666_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f * 121666\nCan overlap h with f.\n\nPreconditions:\n   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n*/\n\nvoid fe_mul121666(fe h,fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int64 h0 = f0 * (crypto_int64) 121666;\n  crypto_int64 h1 = f1 * (crypto_int64) 121666;\n  crypto_int64 h2 = f2 * (crypto_int64) 121666;\n  crypto_int64 h3 = f3 * (crypto_int64) 121666;\n  crypto_int64 h4 = f4 * (crypto_int64) 121666;\n  crypto_int64 h5 = f5 * (crypto_int64) 121666;\n  crypto_int64 h6 = f6 * (crypto_int64) 121666;\n  crypto_int64 h7 = f7 * (crypto_int64) 121666;\n  crypto_int64 h8 = f8 * (crypto_int64) 121666;\n  crypto_int64 h9 = f9 * (crypto_int64) 121666;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n  carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n  carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n  carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_mul_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f * g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n   |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n*/\n\n/*\nNotes on implementation strategy:\n\nUsing schoolbook multiplication.\nKaratsuba would save a little in some cost models.\n\nMost multiplications by 2 and 19 are 32-bit precomputations;\ncheaper than 64-bit postcomputations.\n\nThere is one remaining multiplication by 19 in the carry chain;\none *19 precomputation can be merged into this,\nbut the resulting data flow is considerably less clean.\n\nThere are 12 carries below.\n10 of them are 2-way parallelizable and vectorizable.\nCan get away with 11 carries, but then data flow is much deeper.\n\nWith tighter constraints on inputs can squeeze carries into int32.\n*/\n\nvoid fe_mul(fe h,fe f,fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 g1_19 = 19 * g1; /* 1.4*2^29 */\n  crypto_int32 g2_19 = 19 * g2; /* 1.4*2^30; still ok */\n  crypto_int32 g3_19 = 19 * g3;\n  crypto_int32 g4_19 = 19 * g4;\n  crypto_int32 g5_19 = 19 * g5;\n  crypto_int32 g6_19 = 19 * g6;\n  crypto_int32 g7_19 = 19 * g7;\n  crypto_int32 g8_19 = 19 * g8;\n  crypto_int32 g9_19 = 19 * g9;\n  crypto_int32 f1_2 = 2 * f1;\n  crypto_int32 f3_2 = 2 * f3;\n  crypto_int32 f5_2 = 2 * f5;\n  crypto_int32 f7_2 = 2 * f7;\n  crypto_int32 f9_2 = 2 * f9;\n  crypto_int64 f0g0    = f0   * (crypto_int64) g0;\n  crypto_int64 f0g1    = f0   * (crypto_int64) g1;\n  crypto_int64 f0g2    = f0   * (crypto_int64) g2;\n  crypto_int64 f0g3    = f0   * (crypto_int64) g3;\n  crypto_int64 f0g4    = f0   * (crypto_int64) g4;\n  crypto_int64 f0g5    = f0   * (crypto_int64) g5;\n  crypto_int64 f0g6    = f0   * (crypto_int64) g6;\n  crypto_int64 f0g7    = f0   * (crypto_int64) g7;\n  crypto_int64 f0g8    = f0   * (crypto_int64) g8;\n  crypto_int64 f0g9    = f0   * (crypto_int64) g9;\n  crypto_int64 f1g0    = f1   * (crypto_int64) g0;\n  crypto_int64 f1g1_2  = f1_2 * (crypto_int64) g1;\n  crypto_int64 f1g2    = f1   * (crypto_int64) g2;\n  crypto_int64 f1g3_2  = f1_2 * (crypto_int64) g3;\n  crypto_int64 f1g4    = f1   * (crypto_int64) g4;\n  crypto_int64 f1g5_2  = f1_2 * (crypto_int64) g5;\n  crypto_int64 f1g6    = f1   * (crypto_int64) g6;\n  crypto_int64 f1g7_2  = f1_2 * (crypto_int64) g7;\n  crypto_int64 f1g8    = f1   * (crypto_int64) g8;\n  crypto_int64 f1g9_38 = f1_2 * (crypto_int64) g9_19;\n  crypto_int64 f2g0    = f2   * (crypto_int64) g0;\n  crypto_int64 f2g1    = f2   * (crypto_int64) g1;\n  crypto_int64 f2g2    = f2   * (crypto_int64) g2;\n  crypto_int64 f2g3    = f2   * (crypto_int64) g3;\n  crypto_int64 f2g4    = f2   * (crypto_int64) g4;\n  crypto_int64 f2g5    = f2   * (crypto_int64) g5;\n  crypto_int64 f2g6    = f2   * (crypto_int64) g6;\n  crypto_int64 f2g7    = f2   * (crypto_int64) g7;\n  crypto_int64 f2g8_19 = f2   * (crypto_int64) g8_19;\n  crypto_int64 f2g9_19 = f2   * (crypto_int64) g9_19;\n  crypto_int64 f3g0    = f3   * (crypto_int64) g0;\n  crypto_int64 f3g1_2  = f3_2 * (crypto_int64) g1;\n  crypto_int64 f3g2    = f3   * (crypto_int64) g2;\n  crypto_int64 f3g3_2  = f3_2 * (crypto_int64) g3;\n  crypto_int64 f3g4    = f3   * (crypto_int64) g4;\n  crypto_int64 f3g5_2  = f3_2 * (crypto_int64) g5;\n  crypto_int64 f3g6    = f3   * (crypto_int64) g6;\n  crypto_int64 f3g7_38 = f3_2 * (crypto_int64) g7_19;\n  crypto_int64 f3g8_19 = f3   * (crypto_int64) g8_19;\n  crypto_int64 f3g9_38 = f3_2 * (crypto_int64) g9_19;\n  crypto_int64 f4g0    = f4   * (crypto_int64) g0;\n  crypto_int64 f4g1    = f4   * (crypto_int64) g1;\n  crypto_int64 f4g2    = f4   * (crypto_int64) g2;\n  crypto_int64 f4g3    = f4   * (crypto_int64) g3;\n  crypto_int64 f4g4    = f4   * (crypto_int64) g4;\n  crypto_int64 f4g5    = f4   * (crypto_int64) g5;\n  crypto_int64 f4g6_19 = f4   * (crypto_int64) g6_19;\n  crypto_int64 f4g7_19 = f4   * (crypto_int64) g7_19;\n  crypto_int64 f4g8_19 = f4   * (crypto_int64) g8_19;\n  crypto_int64 f4g9_19 = f4   * (crypto_int64) g9_19;\n  crypto_int64 f5g0    = f5   * (crypto_int64) g0;\n  crypto_int64 f5g1_2  = f5_2 * (crypto_int64) g1;\n  crypto_int64 f5g2    = f5   * (crypto_int64) g2;\n  crypto_int64 f5g3_2  = f5_2 * (crypto_int64) g3;\n  crypto_int64 f5g4    = f5   * (crypto_int64) g4;\n  crypto_int64 f5g5_38 = f5_2 * (crypto_int64) g5_19;\n  crypto_int64 f5g6_19 = f5   * (crypto_int64) g6_19;\n  crypto_int64 f5g7_38 = f5_2 * (crypto_int64) g7_19;\n  crypto_int64 f5g8_19 = f5   * (crypto_int64) g8_19;\n  crypto_int64 f5g9_38 = f5_2 * (crypto_int64) g9_19;\n  crypto_int64 f6g0    = f6   * (crypto_int64) g0;\n  crypto_int64 f6g1    = f6   * (crypto_int64) g1;\n  crypto_int64 f6g2    = f6   * (crypto_int64) g2;\n  crypto_int64 f6g3    = f6   * (crypto_int64) g3;\n  crypto_int64 f6g4_19 = f6   * (crypto_int64) g4_19;\n  crypto_int64 f6g5_19 = f6   * (crypto_int64) g5_19;\n  crypto_int64 f6g6_19 = f6   * (crypto_int64) g6_19;\n  crypto_int64 f6g7_19 = f6   * (crypto_int64) g7_19;\n  crypto_int64 f6g8_19 = f6   * (crypto_int64) g8_19;\n  crypto_int64 f6g9_19 = f6   * (crypto_int64) g9_19;\n  crypto_int64 f7g0    = f7   * (crypto_int64) g0;\n  crypto_int64 f7g1_2  = f7_2 * (crypto_int64) g1;\n  crypto_int64 f7g2    = f7   * (crypto_int64) g2;\n  crypto_int64 f7g3_38 = f7_2 * (crypto_int64) g3_19;\n  crypto_int64 f7g4_19 = f7   * (crypto_int64) g4_19;\n  crypto_int64 f7g5_38 = f7_2 * (crypto_int64) g5_19;\n  crypto_int64 f7g6_19 = f7   * (crypto_int64) g6_19;\n  crypto_int64 f7g7_38 = f7_2 * (crypto_int64) g7_19;\n  crypto_int64 f7g8_19 = f7   * (crypto_int64) g8_19;\n  crypto_int64 f7g9_38 = f7_2 * (crypto_int64) g9_19;\n  crypto_int64 f8g0    = f8   * (crypto_int64) g0;\n  crypto_int64 f8g1    = f8   * (crypto_int64) g1;\n  crypto_int64 f8g2_19 = f8   * (crypto_int64) g2_19;\n  crypto_int64 f8g3_19 = f8   * (crypto_int64) g3_19;\n  crypto_int64 f8g4_19 = f8   * (crypto_int64) g4_19;\n  crypto_int64 f8g5_19 = f8   * (crypto_int64) g5_19;\n  crypto_int64 f8g6_19 = f8   * (crypto_int64) g6_19;\n  crypto_int64 f8g7_19 = f8   * (crypto_int64) g7_19;\n  crypto_int64 f8g8_19 = f8   * (crypto_int64) g8_19;\n  crypto_int64 f8g9_19 = f8   * (crypto_int64) g9_19;\n  crypto_int64 f9g0    = f9   * (crypto_int64) g0;\n  crypto_int64 f9g1_38 = f9_2 * (crypto_int64) g1_19;\n  crypto_int64 f9g2_19 = f9   * (crypto_int64) g2_19;\n  crypto_int64 f9g3_38 = f9_2 * (crypto_int64) g3_19;\n  crypto_int64 f9g4_19 = f9   * (crypto_int64) g4_19;\n  crypto_int64 f9g5_38 = f9_2 * (crypto_int64) g5_19;\n  crypto_int64 f9g6_19 = f9   * (crypto_int64) g6_19;\n  crypto_int64 f9g7_38 = f9_2 * (crypto_int64) g7_19;\n  crypto_int64 f9g8_19 = f9   * (crypto_int64) g8_19;\n  crypto_int64 f9g9_38 = f9_2 * (crypto_int64) g9_19;\n  crypto_int64 h0 = f0g0+f1g9_38+f2g8_19+f3g7_38+f4g6_19+f5g5_38+f6g4_19+f7g3_38+f8g2_19+f9g1_38;\n  crypto_int64 h1 = f0g1+f1g0   +f2g9_19+f3g8_19+f4g7_19+f5g6_19+f6g5_19+f7g4_19+f8g3_19+f9g2_19;\n  crypto_int64 h2 = f0g2+f1g1_2 +f2g0   +f3g9_38+f4g8_19+f5g7_38+f6g6_19+f7g5_38+f8g4_19+f9g3_38;\n  crypto_int64 h3 = f0g3+f1g2   +f2g1   +f3g0   +f4g9_19+f5g8_19+f6g7_19+f7g6_19+f8g5_19+f9g4_19;\n  crypto_int64 h4 = f0g4+f1g3_2 +f2g2   +f3g1_2 +f4g0   +f5g9_38+f6g8_19+f7g7_38+f8g6_19+f9g5_38;\n  crypto_int64 h5 = f0g5+f1g4   +f2g3   +f3g2   +f4g1   +f5g0   +f6g9_19+f7g8_19+f8g7_19+f9g6_19;\n  crypto_int64 h6 = f0g6+f1g5_2 +f2g4   +f3g3_2 +f4g2   +f5g1_2 +f6g0   +f7g9_38+f8g8_19+f9g7_38;\n  crypto_int64 h7 = f0g7+f1g6   +f2g5   +f3g4   +f4g3   +f5g2   +f6g1   +f7g0   +f8g9_19+f9g8_19;\n  crypto_int64 h8 = f0g8+f1g7_2 +f2g6   +f3g5_2 +f4g4   +f5g3_2 +f6g2   +f7g1_2 +f8g0   +f9g9_38;\n  crypto_int64 h9 = f0g9+f1g8   +f2g7   +f3g6   +f4g5   +f5g4   +f6g3   +f7g2   +f8g1   +f9g0   ;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  /*\n  |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38))\n    i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8\n  |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19))\n    i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9\n  */\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  /* |h0| <= 2^25 */\n  /* |h4| <= 2^25 */\n  /* |h1| <= 1.51*2^58 */\n  /* |h5| <= 1.51*2^58 */\n\n  carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n  /* |h1| <= 2^24; from now on fits into int32 */\n  /* |h5| <= 2^24; from now on fits into int32 */\n  /* |h2| <= 1.21*2^59 */\n  /* |h6| <= 1.21*2^59 */\n\n  carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n  /* |h2| <= 2^25; from now on fits into int32 unchanged */\n  /* |h6| <= 2^25; from now on fits into int32 unchanged */\n  /* |h3| <= 1.51*2^58 */\n  /* |h7| <= 1.51*2^58 */\n\n  carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n  /* |h3| <= 2^24; from now on fits into int32 unchanged */\n  /* |h7| <= 2^24; from now on fits into int32 unchanged */\n  /* |h4| <= 1.52*2^33 */\n  /* |h8| <= 1.52*2^33 */\n\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n  /* |h4| <= 2^25; from now on fits into int32 unchanged */\n  /* |h8| <= 2^25; from now on fits into int32 unchanged */\n  /* |h5| <= 1.01*2^24 */\n  /* |h9| <= 1.51*2^58 */\n\n  carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n  /* |h9| <= 2^24; from now on fits into int32 unchanged */\n  /* |h0| <= 1.8*2^37 */\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  /* |h0| <= 2^25; from now on fits into int32 unchanged */\n  /* |h1| <= 1.01*2^24 */\n\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sq_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f * f\nCan overlap h with f.\n\nPreconditions:\n   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n*/\n\n/*\nSee fe_mul.c for discussion of implementation strategy.\n*/\n\nvoid fe_sq(fe h,fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 f0_2 = 2 * f0;\n  crypto_int32 f1_2 = 2 * f1;\n  crypto_int32 f2_2 = 2 * f2;\n  crypto_int32 f3_2 = 2 * f3;\n  crypto_int32 f4_2 = 2 * f4;\n  crypto_int32 f5_2 = 2 * f5;\n  crypto_int32 f6_2 = 2 * f6;\n  crypto_int32 f7_2 = 2 * f7;\n  crypto_int32 f5_38 = 38 * f5; /* 1.31*2^30 */\n  crypto_int32 f6_19 = 19 * f6; /* 1.31*2^30 */\n  crypto_int32 f7_38 = 38 * f7; /* 1.31*2^30 */\n  crypto_int32 f8_19 = 19 * f8; /* 1.31*2^30 */\n  crypto_int32 f9_38 = 38 * f9; /* 1.31*2^30 */\n  crypto_int64 f0f0    = f0   * (crypto_int64) f0;\n  crypto_int64 f0f1_2  = f0_2 * (crypto_int64) f1;\n  crypto_int64 f0f2_2  = f0_2 * (crypto_int64) f2;\n  crypto_int64 f0f3_2  = f0_2 * (crypto_int64) f3;\n  crypto_int64 f0f4_2  = f0_2 * (crypto_int64) f4;\n  crypto_int64 f0f5_2  = f0_2 * (crypto_int64) f5;\n  crypto_int64 f0f6_2  = f0_2 * (crypto_int64) f6;\n  crypto_int64 f0f7_2  = f0_2 * (crypto_int64) f7;\n  crypto_int64 f0f8_2  = f0_2 * (crypto_int64) f8;\n  crypto_int64 f0f9_2  = f0_2 * (crypto_int64) f9;\n  crypto_int64 f1f1_2  = f1_2 * (crypto_int64) f1;\n  crypto_int64 f1f2_2  = f1_2 * (crypto_int64) f2;\n  crypto_int64 f1f3_4  = f1_2 * (crypto_int64) f3_2;\n  crypto_int64 f1f4_2  = f1_2 * (crypto_int64) f4;\n  crypto_int64 f1f5_4  = f1_2 * (crypto_int64) f5_2;\n  crypto_int64 f1f6_2  = f1_2 * (crypto_int64) f6;\n  crypto_int64 f1f7_4  = f1_2 * (crypto_int64) f7_2;\n  crypto_int64 f1f8_2  = f1_2 * (crypto_int64) f8;\n  crypto_int64 f1f9_76 = f1_2 * (crypto_int64) f9_38;\n  crypto_int64 f2f2    = f2   * (crypto_int64) f2;\n  crypto_int64 f2f3_2  = f2_2 * (crypto_int64) f3;\n  crypto_int64 f2f4_2  = f2_2 * (crypto_int64) f4;\n  crypto_int64 f2f5_2  = f2_2 * (crypto_int64) f5;\n  crypto_int64 f2f6_2  = f2_2 * (crypto_int64) f6;\n  crypto_int64 f2f7_2  = f2_2 * (crypto_int64) f7;\n  crypto_int64 f2f8_38 = f2_2 * (crypto_int64) f8_19;\n  crypto_int64 f2f9_38 = f2   * (crypto_int64) f9_38;\n  crypto_int64 f3f3_2  = f3_2 * (crypto_int64) f3;\n  crypto_int64 f3f4_2  = f3_2 * (crypto_int64) f4;\n  crypto_int64 f3f5_4  = f3_2 * (crypto_int64) f5_2;\n  crypto_int64 f3f6_2  = f3_2 * (crypto_int64) f6;\n  crypto_int64 f3f7_76 = f3_2 * (crypto_int64) f7_38;\n  crypto_int64 f3f8_38 = f3_2 * (crypto_int64) f8_19;\n  crypto_int64 f3f9_76 = f3_2 * (crypto_int64) f9_38;\n  crypto_int64 f4f4    = f4   * (crypto_int64) f4;\n  crypto_int64 f4f5_2  = f4_2 * (crypto_int64) f5;\n  crypto_int64 f4f6_38 = f4_2 * (crypto_int64) f6_19;\n  crypto_int64 f4f7_38 = f4   * (crypto_int64) f7_38;\n  crypto_int64 f4f8_38 = f4_2 * (crypto_int64) f8_19;\n  crypto_int64 f4f9_38 = f4   * (crypto_int64) f9_38;\n  crypto_int64 f5f5_38 = f5   * (crypto_int64) f5_38;\n  crypto_int64 f5f6_38 = f5_2 * (crypto_int64) f6_19;\n  crypto_int64 f5f7_76 = f5_2 * (crypto_int64) f7_38;\n  crypto_int64 f5f8_38 = f5_2 * (crypto_int64) f8_19;\n  crypto_int64 f5f9_76 = f5_2 * (crypto_int64) f9_38;\n  crypto_int64 f6f6_19 = f6   * (crypto_int64) f6_19;\n  crypto_int64 f6f7_38 = f6   * (crypto_int64) f7_38;\n  crypto_int64 f6f8_38 = f6_2 * (crypto_int64) f8_19;\n  crypto_int64 f6f9_38 = f6   * (crypto_int64) f9_38;\n  crypto_int64 f7f7_38 = f7   * (crypto_int64) f7_38;\n  crypto_int64 f7f8_38 = f7_2 * (crypto_int64) f8_19;\n  crypto_int64 f7f9_76 = f7_2 * (crypto_int64) f9_38;\n  crypto_int64 f8f8_19 = f8   * (crypto_int64) f8_19;\n  crypto_int64 f8f9_38 = f8   * (crypto_int64) f9_38;\n  crypto_int64 f9f9_38 = f9   * (crypto_int64) f9_38;\n  crypto_int64 h0 = f0f0  +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;\n  crypto_int64 h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;\n  crypto_int64 h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;\n  crypto_int64 h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;\n  crypto_int64 h4 = f0f4_2+f1f3_4 +f2f2   +f5f9_76+f6f8_38+f7f7_38;\n  crypto_int64 h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;\n  crypto_int64 h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;\n  crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;\n  crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4   +f9f9_38;\n  crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n\n  carry1 = (h1 + (crypto_int64) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry5 = (h5 + (crypto_int64) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n\n  carry2 = (h2 + (crypto_int64) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry6 = (h6 + (crypto_int64) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n\n  carry3 = (h3 + (crypto_int64) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry7 = (h7 + (crypto_int64) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry4 = (h4 + (crypto_int64) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry8 = (h8 + (crypto_int64) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  carry9 = (h9 + (crypto_int64) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_sub_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nh = f - g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nvoid fe_sub(fe h,fe f,fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 h0 = f0 - g0;\n  crypto_int32 h1 = f1 - g1;\n  crypto_int32 h2 = f2 - g2;\n  crypto_int32 h3 = f3 - g3;\n  crypto_int32 h4 = f4 - g4;\n  crypto_int32 h5 = f5 - g5;\n  crypto_int32 h6 = f6 - g6;\n  crypto_int32 h7 = f7 - g7;\n  crypto_int32 h8 = f8 - g8;\n  crypto_int32 h9 = f9 - g9;\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/fe_tobytes_curve25519_ref10.c",
    "content": "#include \"fe.h\"\n\n#ifndef HAVE_TI_MODE\n\n/*\nPreconditions:\n  |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nWrite p=2^255-19; q=floor(h/p).\nBasic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).\n\nProof:\n  Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.\n  Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4.\n\n  Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).\n  Then 0<y<1.\n\n  Write r=h-pq.\n  Have 0<=r<=p-1=2^255-20.\n  Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.\n\n  Write x=r+19(2^-255)r+y.\n  Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.\n\n  Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))\n  so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.\n*/\n\nvoid fe_tobytes(unsigned char *s,fe h)\n{\n  crypto_int32 h0 = h[0];\n  crypto_int32 h1 = h[1];\n  crypto_int32 h2 = h[2];\n  crypto_int32 h3 = h[3];\n  crypto_int32 h4 = h[4];\n  crypto_int32 h5 = h[5];\n  crypto_int32 h6 = h[6];\n  crypto_int32 h7 = h[7];\n  crypto_int32 h8 = h[8];\n  crypto_int32 h9 = h[9];\n  crypto_int32 q;\n  crypto_int32 carry0;\n  crypto_int32 carry1;\n  crypto_int32 carry2;\n  crypto_int32 carry3;\n  crypto_int32 carry4;\n  crypto_int32 carry5;\n  crypto_int32 carry6;\n  crypto_int32 carry7;\n  crypto_int32 carry8;\n  crypto_int32 carry9;\n\n  q = (19 * h9 + (((crypto_int32) 1) << 24)) >> 25;\n  q = (h0 + q) >> 26;\n  q = (h1 + q) >> 25;\n  q = (h2 + q) >> 26;\n  q = (h3 + q) >> 25;\n  q = (h4 + q) >> 26;\n  q = (h5 + q) >> 25;\n  q = (h6 + q) >> 26;\n  q = (h7 + q) >> 25;\n  q = (h8 + q) >> 26;\n  q = (h9 + q) >> 25;\n\n  /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */\n  h0 += 19 * q;\n  /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */\n\n  carry0 = h0 >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry1 = h1 >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry2 = h2 >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry3 = h3 >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry4 = h4 >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry5 = h5 >> 25; h6 += carry5; h5 -= carry5 << 25;\n  carry6 = h6 >> 26; h7 += carry6; h6 -= carry6 << 26;\n  carry7 = h7 >> 25; h8 += carry7; h7 -= carry7 << 25;\n  carry8 = h8 >> 26; h9 += carry8; h8 -= carry8 << 26;\n  carry9 = h9 >> 25;               h9 -= carry9 << 25;\n                  /* h10 = carry9 */\n\n  /*\n  Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.\n  Have h0+...+2^230 h9 between 0 and 2^255-1;\n  evidently 2^255 h10-2^255 q = 0.\n  Goal: Output h0+...+2^230 h9.\n  */\n\n  s[0] = h0 >> 0;\n  s[1] = h0 >> 8;\n  s[2] = h0 >> 16;\n  s[3] = (h0 >> 24) | (h1 << 2);\n  s[4] = h1 >> 6;\n  s[5] = h1 >> 14;\n  s[6] = (h1 >> 22) | (h2 << 3);\n  s[7] = h2 >> 5;\n  s[8] = h2 >> 13;\n  s[9] = (h2 >> 21) | (h3 << 5);\n  s[10] = h3 >> 3;\n  s[11] = h3 >> 11;\n  s[12] = (h3 >> 19) | (h4 << 6);\n  s[13] = h4 >> 2;\n  s[14] = h4 >> 10;\n  s[15] = h4 >> 18;\n  s[16] = h5 >> 0;\n  s[17] = h5 >> 8;\n  s[18] = h5 >> 16;\n  s[19] = (h5 >> 24) | (h6 << 1);\n  s[20] = h6 >> 7;\n  s[21] = h6 >> 15;\n  s[22] = (h6 >> 23) | (h7 << 3);\n  s[23] = h7 >> 5;\n  s[24] = h7 >> 13;\n  s[25] = (h7 >> 21) | (h8 << 4);\n  s[26] = h8 >> 4;\n  s[27] = h8 >> 12;\n  s[28] = (h8 >> 20) | (h9 << 6);\n  s[29] = h9 >> 2;\n  s[30] = h9 >> 10;\n  s[31] = h9 >> 18;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/montgomery.h",
    "content": "\n/* qhasm: fe X2 */\n\n/* qhasm: fe Z2 */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe X4 */\n\n/* qhasm: fe Z4 */\n\n/* qhasm: fe X5 */\n\n/* qhasm: fe Z5 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe B */\n\n/* qhasm: fe C */\n\n/* qhasm: fe D */\n\n/* qhasm: fe E */\n\n/* qhasm: fe AA */\n\n/* qhasm: fe BB */\n\n/* qhasm: fe DA */\n\n/* qhasm: fe CB */\n\n/* qhasm: fe t0 */\n\n/* qhasm: fe t1 */\n\n/* qhasm: fe t2 */\n\n/* qhasm: fe t3 */\n\n/* qhasm: fe t4 */\n\n/* qhasm: enter ladder */\n\n/* qhasm: D = X3-Z3 */\n/* asm 1: fe_sub(>D=fe#5,<X3=fe#3,<Z3=fe#4); */\n/* asm 2: fe_sub(>D=tmp0,<X3=x3,<Z3=z3); */\nfe_sub(tmp0,x3,z3);\n\n/* qhasm: B = X2-Z2 */\n/* asm 1: fe_sub(>B=fe#6,<X2=fe#1,<Z2=fe#2); */\n/* asm 2: fe_sub(>B=tmp1,<X2=x2,<Z2=z2); */\nfe_sub(tmp1,x2,z2);\n\n/* qhasm: A = X2+Z2 */\n/* asm 1: fe_add(>A=fe#1,<X2=fe#1,<Z2=fe#2); */\n/* asm 2: fe_add(>A=x2,<X2=x2,<Z2=z2); */\nfe_add(x2,x2,z2);\n\n/* qhasm: C = X3+Z3 */\n/* asm 1: fe_add(>C=fe#2,<X3=fe#3,<Z3=fe#4); */\n/* asm 2: fe_add(>C=z2,<X3=x3,<Z3=z3); */\nfe_add(z2,x3,z3);\n\n/* qhasm: DA = D*A */\n/* asm 1: fe_mul(>DA=fe#4,<D=fe#5,<A=fe#1); */\n/* asm 2: fe_mul(>DA=z3,<D=tmp0,<A=x2); */\nfe_mul(z3,tmp0,x2);\n\n/* qhasm: CB = C*B */\n/* asm 1: fe_mul(>CB=fe#2,<C=fe#2,<B=fe#6); */\n/* asm 2: fe_mul(>CB=z2,<C=z2,<B=tmp1); */\nfe_mul(z2,z2,tmp1);\n\n/* qhasm: BB = B^2 */\n/* asm 1: fe_sq(>BB=fe#5,<B=fe#6); */\n/* asm 2: fe_sq(>BB=tmp0,<B=tmp1); */\nfe_sq(tmp0,tmp1);\n\n/* qhasm: AA = A^2 */\n/* asm 1: fe_sq(>AA=fe#6,<A=fe#1); */\n/* asm 2: fe_sq(>AA=tmp1,<A=x2); */\nfe_sq(tmp1,x2);\n\n/* qhasm: t0 = DA+CB */\n/* asm 1: fe_add(>t0=fe#3,<DA=fe#4,<CB=fe#2); */\n/* asm 2: fe_add(>t0=x3,<DA=z3,<CB=z2); */\nfe_add(x3,z3,z2);\n\n/* qhasm: assign x3 to t0 */\n\n/* qhasm: t1 = DA-CB */\n/* asm 1: fe_sub(>t1=fe#2,<DA=fe#4,<CB=fe#2); */\n/* asm 2: fe_sub(>t1=z2,<DA=z3,<CB=z2); */\nfe_sub(z2,z3,z2);\n\n/* qhasm: X4 = AA*BB */\n/* asm 1: fe_mul(>X4=fe#1,<AA=fe#6,<BB=fe#5); */\n/* asm 2: fe_mul(>X4=x2,<AA=tmp1,<BB=tmp0); */\nfe_mul(x2,tmp1,tmp0);\n\n/* qhasm: E = AA-BB */\n/* asm 1: fe_sub(>E=fe#6,<AA=fe#6,<BB=fe#5); */\n/* asm 2: fe_sub(>E=tmp1,<AA=tmp1,<BB=tmp0); */\nfe_sub(tmp1,tmp1,tmp0);\n\n/* qhasm: t2 = t1^2 */\n/* asm 1: fe_sq(>t2=fe#2,<t1=fe#2); */\n/* asm 2: fe_sq(>t2=z2,<t1=z2); */\nfe_sq(z2,z2);\n\n/* qhasm: t3 = a24*E */\n/* asm 1: fe_mul121666(>t3=fe#4,<E=fe#6); */\n/* asm 2: fe_mul121666(>t3=z3,<E=tmp1); */\nfe_mul121666(z3,tmp1);\n\n/* qhasm: X5 = t0^2 */\n/* asm 1: fe_sq(>X5=fe#3,<t0=fe#3); */\n/* asm 2: fe_sq(>X5=x3,<t0=x3); */\nfe_sq(x3,x3);\n\n/* qhasm: t4 = BB+t3 */\n/* asm 1: fe_add(>t4=fe#5,<BB=fe#5,<t3=fe#4); */\n/* asm 2: fe_add(>t4=tmp0,<BB=tmp0,<t3=z3); */\nfe_add(tmp0,tmp0,z3);\n\n/* qhasm: Z5 = X1*t2 */\n/* asm 1: fe_mul(>Z5=fe#4,x1,<t2=fe#2); */\n/* asm 2: fe_mul(>Z5=z3,x1,<t2=z2); */\nfe_mul(z3,x1,z2);\n\n/* qhasm: Z4 = E*t4 */\n/* asm 1: fe_mul(>Z4=fe#2,<E=fe#6,<t4=fe#5); */\n/* asm 2: fe_mul(>Z4=z2,<E=tmp1,<t4=tmp0); */\nfe_mul(z2,tmp1,tmp0);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/pow225521.h",
    "content": "\n/* qhasm: fe z1 */\n\n/* qhasm: fe z2 */\n\n/* qhasm: fe z8 */\n\n/* qhasm: fe z9 */\n\n/* qhasm: fe z11 */\n\n/* qhasm: fe z22 */\n\n/* qhasm: fe z_5_0 */\n\n/* qhasm: fe z_10_5 */\n\n/* qhasm: fe z_10_0 */\n\n/* qhasm: fe z_20_10 */\n\n/* qhasm: fe z_20_0 */\n\n/* qhasm: fe z_40_20 */\n\n/* qhasm: fe z_40_0 */\n\n/* qhasm: fe z_50_10 */\n\n/* qhasm: fe z_50_0 */\n\n/* qhasm: fe z_100_50 */\n\n/* qhasm: fe z_100_0 */\n\n/* qhasm: fe z_200_100 */\n\n/* qhasm: fe z_200_0 */\n\n/* qhasm: fe z_250_50 */\n\n/* qhasm: fe z_250_0 */\n\n/* qhasm: fe z_255_5 */\n\n/* qhasm: fe z_255_21 */\n\n/* qhasm: enter pow225521 */\n\n/* qhasm: z2 = z1^2^1 */\n/* asm 1: fe_sq(>z2=fe#1,<z1=fe#11); for (i = 1;i < 1;++i) fe_sq(>z2=fe#1,>z2=fe#1); */\n/* asm 2: fe_sq(>z2=t0,<z1=z); for (i = 1;i < 1;++i) fe_sq(>z2=t0,>z2=t0); */\nfe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */\n\n/* qhasm: z8 = z2^2^2 */\n/* asm 1: fe_sq(>z8=fe#2,<z2=fe#1); for (i = 1;i < 2;++i) fe_sq(>z8=fe#2,>z8=fe#2); */\n/* asm 2: fe_sq(>z8=t1,<z2=t0); for (i = 1;i < 2;++i) fe_sq(>z8=t1,>z8=t1); */\nfe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1);\n\n/* qhasm: z9 = z1*z8 */\n/* asm 1: fe_mul(>z9=fe#2,<z1=fe#11,<z8=fe#2); */\n/* asm 2: fe_mul(>z9=t1,<z1=z,<z8=t1); */\nfe_mul(t1,z,t1);\n\n/* qhasm: z11 = z2*z9 */\n/* asm 1: fe_mul(>z11=fe#1,<z2=fe#1,<z9=fe#2); */\n/* asm 2: fe_mul(>z11=t0,<z2=t0,<z9=t1); */\nfe_mul(t0,t0,t1);\n\n/* qhasm: z22 = z11^2^1 */\n/* asm 1: fe_sq(>z22=fe#3,<z11=fe#1); for (i = 1;i < 1;++i) fe_sq(>z22=fe#3,>z22=fe#3); */\n/* asm 2: fe_sq(>z22=t2,<z11=t0); for (i = 1;i < 1;++i) fe_sq(>z22=t2,>z22=t2); */\nfe_sq(t2,t0); /* for (i = 1;i < 1;++i) fe_sq(t2,t2); */\n\n/* qhasm: z_5_0 = z9*z22 */\n/* asm 1: fe_mul(>z_5_0=fe#2,<z9=fe#2,<z22=fe#3); */\n/* asm 2: fe_mul(>z_5_0=t1,<z9=t1,<z22=t2); */\nfe_mul(t1,t1,t2);\n\n/* qhasm: z_10_5 = z_5_0^2^5 */\n/* asm 1: fe_sq(>z_10_5=fe#3,<z_5_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_10_5=fe#3,>z_10_5=fe#3); */\n/* asm 2: fe_sq(>z_10_5=t2,<z_5_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_10_5=t2,>z_10_5=t2); */\nfe_sq(t2,t1); for (i = 1;i < 5;++i) fe_sq(t2,t2);\n\n/* qhasm: z_10_0 = z_10_5*z_5_0 */\n/* asm 1: fe_mul(>z_10_0=fe#2,<z_10_5=fe#3,<z_5_0=fe#2); */\n/* asm 2: fe_mul(>z_10_0=t1,<z_10_5=t2,<z_5_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_20_10 = z_10_0^2^10 */\n/* asm 1: fe_sq(>z_20_10=fe#3,<z_10_0=fe#2); for (i = 1;i < 10;++i) fe_sq(>z_20_10=fe#3,>z_20_10=fe#3); */\n/* asm 2: fe_sq(>z_20_10=t2,<z_10_0=t1); for (i = 1;i < 10;++i) fe_sq(>z_20_10=t2,>z_20_10=t2); */\nfe_sq(t2,t1); for (i = 1;i < 10;++i) fe_sq(t2,t2);\n\n/* qhasm: z_20_0 = z_20_10*z_10_0 */\n/* asm 1: fe_mul(>z_20_0=fe#3,<z_20_10=fe#3,<z_10_0=fe#2); */\n/* asm 2: fe_mul(>z_20_0=t2,<z_20_10=t2,<z_10_0=t1); */\nfe_mul(t2,t2,t1);\n\n/* qhasm: z_40_20 = z_20_0^2^20 */\n/* asm 1: fe_sq(>z_40_20=fe#4,<z_20_0=fe#3); for (i = 1;i < 20;++i) fe_sq(>z_40_20=fe#4,>z_40_20=fe#4); */\n/* asm 2: fe_sq(>z_40_20=t3,<z_20_0=t2); for (i = 1;i < 20;++i) fe_sq(>z_40_20=t3,>z_40_20=t3); */\nfe_sq(t3,t2); for (i = 1;i < 20;++i) fe_sq(t3,t3);\n\n/* qhasm: z_40_0 = z_40_20*z_20_0 */\n/* asm 1: fe_mul(>z_40_0=fe#3,<z_40_20=fe#4,<z_20_0=fe#3); */\n/* asm 2: fe_mul(>z_40_0=t2,<z_40_20=t3,<z_20_0=t2); */\nfe_mul(t2,t3,t2);\n\n/* qhasm: z_50_10 = z_40_0^2^10 */\n/* asm 1: fe_sq(>z_50_10=fe#3,<z_40_0=fe#3); for (i = 1;i < 10;++i) fe_sq(>z_50_10=fe#3,>z_50_10=fe#3); */\n/* asm 2: fe_sq(>z_50_10=t2,<z_40_0=t2); for (i = 1;i < 10;++i) fe_sq(>z_50_10=t2,>z_50_10=t2); */\nfe_sq(t2,t2); for (i = 1;i < 10;++i) fe_sq(t2,t2);\n\n/* qhasm: z_50_0 = z_50_10*z_10_0 */\n/* asm 1: fe_mul(>z_50_0=fe#2,<z_50_10=fe#3,<z_10_0=fe#2); */\n/* asm 2: fe_mul(>z_50_0=t1,<z_50_10=t2,<z_10_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_100_50 = z_50_0^2^50 */\n/* asm 1: fe_sq(>z_100_50=fe#3,<z_50_0=fe#2); for (i = 1;i < 50;++i) fe_sq(>z_100_50=fe#3,>z_100_50=fe#3); */\n/* asm 2: fe_sq(>z_100_50=t2,<z_50_0=t1); for (i = 1;i < 50;++i) fe_sq(>z_100_50=t2,>z_100_50=t2); */\nfe_sq(t2,t1); for (i = 1;i < 50;++i) fe_sq(t2,t2);\n\n/* qhasm: z_100_0 = z_100_50*z_50_0 */\n/* asm 1: fe_mul(>z_100_0=fe#3,<z_100_50=fe#3,<z_50_0=fe#2); */\n/* asm 2: fe_mul(>z_100_0=t2,<z_100_50=t2,<z_50_0=t1); */\nfe_mul(t2,t2,t1);\n\n/* qhasm: z_200_100 = z_100_0^2^100 */\n/* asm 1: fe_sq(>z_200_100=fe#4,<z_100_0=fe#3); for (i = 1;i < 100;++i) fe_sq(>z_200_100=fe#4,>z_200_100=fe#4); */\n/* asm 2: fe_sq(>z_200_100=t3,<z_100_0=t2); for (i = 1;i < 100;++i) fe_sq(>z_200_100=t3,>z_200_100=t3); */\nfe_sq(t3,t2); for (i = 1;i < 100;++i) fe_sq(t3,t3);\n\n/* qhasm: z_200_0 = z_200_100*z_100_0 */\n/* asm 1: fe_mul(>z_200_0=fe#3,<z_200_100=fe#4,<z_100_0=fe#3); */\n/* asm 2: fe_mul(>z_200_0=t2,<z_200_100=t3,<z_100_0=t2); */\nfe_mul(t2,t3,t2);\n\n/* qhasm: z_250_50 = z_200_0^2^50 */\n/* asm 1: fe_sq(>z_250_50=fe#3,<z_200_0=fe#3); for (i = 1;i < 50;++i) fe_sq(>z_250_50=fe#3,>z_250_50=fe#3); */\n/* asm 2: fe_sq(>z_250_50=t2,<z_200_0=t2); for (i = 1;i < 50;++i) fe_sq(>z_250_50=t2,>z_250_50=t2); */\nfe_sq(t2,t2); for (i = 1;i < 50;++i) fe_sq(t2,t2);\n\n/* qhasm: z_250_0 = z_250_50*z_50_0 */\n/* asm 1: fe_mul(>z_250_0=fe#2,<z_250_50=fe#3,<z_50_0=fe#2); */\n/* asm 2: fe_mul(>z_250_0=t1,<z_250_50=t2,<z_50_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_255_5 = z_250_0^2^5 */\n/* asm 1: fe_sq(>z_255_5=fe#2,<z_250_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_255_5=fe#2,>z_255_5=fe#2); */\n/* asm 2: fe_sq(>z_255_5=t1,<z_250_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_255_5=t1,>z_255_5=t1); */\nfe_sq(t1,t1); for (i = 1;i < 5;++i) fe_sq(t1,t1);\n\n/* qhasm: z_255_21 = z_255_5*z11 */\n/* asm 1: fe_mul(>z_255_21=fe#12,<z_255_5=fe#2,<z11=fe#1); */\n/* asm 2: fe_mul(>z_255_21=out,<z_255_5=t1,<z11=t0); */\nfe_mul(out,t1,t0);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S",
    "content": "#ifdef IN_SANDY2X\n\n/*\n   REDMASK51 is from amd64-51/consts.s.\n*/\n\n#include \"consts_namespace.h\"\n.data\n.p2align 4\nv0_0: .quad 0, 0\nv1_0: .quad 1, 0\nv2_1: .quad 2, 1\nv9_0: .quad 9, 0\nv9_9: .quad 9, 9\nv19_19: .quad 19, 19\nv38_1: .quad 38, 1\nv38_38: .quad 38, 38\nv121666_121666: .quad 121666, 121666\nm25: .quad 33554431, 33554431\nm26: .quad 67108863, 67108863\nsubc0: .quad 0x07FFFFDA, 0x03FFFFFE\nsubc2: .quad 0x07FFFFFE, 0x03FFFFFE\nREDMASK51:   .quad 0x0007FFFFFFFFFFFF\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts_namespace.h",
    "content": "#ifndef consts_namespace_H\n#define consts_namespace_H\n\n#define v0_0 crypto_scalarmult_curve25519_sandy2x_v0_0\n#define v1_0 crypto_scalarmult_curve25519_sandy2x_v1_0\n#define v2_1 crypto_scalarmult_curve25519_sandy2x_v2_1\n#define v9_0 crypto_scalarmult_curve25519_sandy2x_v9_0\n#define v9_9 crypto_scalarmult_curve25519_sandy2x_v9_9\n#define v19_19 crypto_scalarmult_curve25519_sandy2x_v19_19\n#define v38_1 crypto_scalarmult_curve25519_sandy2x_v38_1\n#define v38_38 crypto_scalarmult_curve25519_sandy2x_v38_38\n#define v121666_121666 crypto_scalarmult_curve25519_sandy2x_v121666_121666\n#define m25 crypto_scalarmult_curve25519_sandy2x_m25\n#define m26 crypto_scalarmult_curve25519_sandy2x_m26\n#define subc0 crypto_scalarmult_curve25519_sandy2x_subc0\n#define subc2 crypto_scalarmult_curve25519_sandy2x_subc2\n#define REDMASK51 crypto_scalarmult_curve25519_sandy2x_REDMASK51\n\n#endif //ifndef consts_namespace_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c",
    "content": "/*\n   This file is adapted from ref10/scalarmult.c:\n   The code for Mongomery ladder is replace by the ladder assembly function;\n   Inversion is done in the same way as amd64-51/.\n   (fe is first converted into fe51 after Mongomery ladder)\n*/\n\n#include <stddef.h>\n\n#ifdef HAVE_AVX_ASM\n\n#include \"utils.h\"\n#include \"curve25519_sandy2x.h\"\n#include \"../scalarmult_curve25519.h\"\n#include \"fe.h\"\n#include \"fe51.h\"\n#include \"ladder.h\"\n#include \"ladder_base.h\"\n\n#define x1 var[0]\n#define x2 var[1]\n#define z2 var[2]\n\nstatic int\ncrypto_scalarmult_curve25519_sandy2x(unsigned char *q, const unsigned char *n,\n                                     const unsigned char *p)\n{\n  unsigned char e[32];\n  unsigned int i;\n\n  fe var[3];\n\n  fe51 x_51;\n  fe51 z_51;\n\n  for (i = 0;i < 32;++i) e[i] = n[i];\n  e[0] &= 248;\n  e[31] &= 127;\n  e[31] |= 64;\n\n  fe_frombytes(x1, p);\n\n  ladder(var, e);\n\n  z_51.v[0] = (z2[1] << 26) + z2[0];\n  z_51.v[1] = (z2[3] << 26) + z2[2];\n  z_51.v[2] = (z2[5] << 26) + z2[4];\n  z_51.v[3] = (z2[7] << 26) + z2[6];\n  z_51.v[4] = (z2[9] << 26) + z2[8];\n\n  x_51.v[0] = (x2[1] << 26) + x2[0];\n  x_51.v[1] = (x2[3] << 26) + x2[2];\n  x_51.v[2] = (x2[5] << 26) + x2[4];\n  x_51.v[3] = (x2[7] << 26) + x2[6];\n  x_51.v[4] = (x2[9] << 26) + x2[8];\n\n  fe51_invert(&z_51, &z_51);\n  fe51_mul(&x_51, &x_51, &z_51);\n  fe51_pack(q, &x_51);\n\n  return 0;\n}\n\n#undef x2\n#undef z2\n\n#define x2 var[0]\n#define z2 var[1]\n\nstatic int\ncrypto_scalarmult_curve25519_sandy2x_base(unsigned char *q,\n                                          const unsigned char *n)\n{\n  unsigned char e[32];\n  unsigned int i;\n\n  fe var[3];\n\n  fe51 x_51;\n  fe51 z_51;\n\n  for (i = 0;i < 32;++i) e[i] = n[i];\n  e[0] &= 248;\n  e[31] &= 127;\n  e[31] |= 64;\n\n  ladder_base(var, e);\n\n  z_51.v[0] = (z2[1] << 26) + z2[0];\n  z_51.v[1] = (z2[3] << 26) + z2[2];\n  z_51.v[2] = (z2[5] << 26) + z2[4];\n  z_51.v[3] = (z2[7] << 26) + z2[6];\n  z_51.v[4] = (z2[9] << 26) + z2[8];\n\n  x_51.v[0] = (x2[1] << 26) + x2[0];\n  x_51.v[1] = (x2[3] << 26) + x2[2];\n  x_51.v[2] = (x2[5] << 26) + x2[4];\n  x_51.v[3] = (x2[7] << 26) + x2[6];\n  x_51.v[4] = (x2[9] << 26) + x2[8];\n\n  fe51_invert(&z_51, &z_51);\n  fe51_mul(&x_51, &x_51, &z_51);\n  fe51_pack(q, &x_51);\n\n  return 0;\n}\n\nstruct crypto_scalarmult_curve25519_implementation\ncrypto_scalarmult_curve25519_sandy2x_implementation = {\n    SODIUM_C99(.mult = ) crypto_scalarmult_curve25519_sandy2x,\n    SODIUM_C99(.mult_base = ) crypto_scalarmult_curve25519_sandy2x_base\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.h",
    "content": "#ifndef curve25519_sandy2x_H\n#define curve25519_sandy2x_H\n\n#include \"crypto_scalarmult_curve25519.h\"\n\nextern struct crypto_scalarmult_curve25519_implementation\n    crypto_scalarmult_curve25519_sandy2x_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe.h",
    "content": "/*\n   This file is adapted from ref10/fe.h:\n   All the redundant functions are removed.\n*/\n\n#ifndef fe_H\n#define fe_H\n\n#include \"crypto_uint64.h\"\n\ntypedef crypto_uint64 fe[10];\n\n/*\nfe means field element.\nHere the field is \\Z/(2^255-19).\nAn element t, entries t[0]...t[9], represents the integer\nt[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9].\nBounds on each t[i] vary depending on context.\n*/\n\n#define fe_frombytes crypto_scalarmult_curve25519_sandy2x_fe_frombytes\n\nextern void fe_frombytes(fe, const unsigned char *);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51.h",
    "content": "/*\n   This file is adapted from amd64-51/fe25519.h:\n   'fe25519' is renamed as 'fe51';\n   All the redundant functions are removed;\n   New function fe51_nsquare is introduced.\n*/\n\n#ifndef fe51_H\n#define fe51_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"crypto_uint64.h\"\n#include \"fe51_namespace.h\"\n\ntypedef struct \n{\n  crypto_uint64 v[5]; \n}\nfe51;\n\nextern void fe51_pack(unsigned char *, const fe51 *);\nextern void fe51_mul(fe51 *, const fe51 *, const fe51 *);\nextern void fe51_nsquare(fe51 *, const fe51 *, int);\nextern void fe51_invert(fe51 *, const fe51 *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c",
    "content": "/*\n   This file is adapted from amd64-51/fe25519_invert.c:\n   Loops of squares are replaced by nsquares for better performance.\n*/\n\n#include \"fe51.h\"\n\n#ifdef HAVE_AVX_ASM\n\n#define fe51_square(x, y) fe51_nsquare(x, y, 1)\n\nvoid fe51_invert(fe51 *r, const fe51 *x)\n{\n\tfe51 z2;\n\tfe51 z9;\n\tfe51 z11;\n\tfe51 z2_5_0;\n\tfe51 z2_10_0;\n\tfe51 z2_20_0;\n\tfe51 z2_50_0;\n\tfe51 z2_100_0;\n\tfe51 t;\n\t\n\t/* 2 */ fe51_square(&z2,x);\n\t/* 4 */ fe51_square(&t,&z2);\n\t/* 8 */ fe51_square(&t,&t);\n\t/* 9 */ fe51_mul(&z9,&t,x);\n\t/* 11 */ fe51_mul(&z11,&z9,&z2);\n\t/* 22 */ fe51_square(&t,&z11);\n\t/* 2^5 - 2^0 = 31 */ fe51_mul(&z2_5_0,&t,&z9);\n\n\t/* 2^10 - 2^5 */ fe51_nsquare(&t,&z2_5_0, 5); \n\t/* 2^10 - 2^0 */ fe51_mul(&z2_10_0,&t,&z2_5_0);\n\n\t/* 2^20 - 2^10 */ fe51_nsquare(&t,&z2_10_0, 10); \n\t/* 2^20 - 2^0 */ fe51_mul(&z2_20_0,&t,&z2_10_0);\n\n\t/* 2^40 - 2^20 */ fe51_nsquare(&t,&z2_20_0, 20); \n\t/* 2^40 - 2^0 */ fe51_mul(&t,&t,&z2_20_0);\n\n\t/* 2^50 - 2^10 */ fe51_nsquare(&t,&t,10);\n\t/* 2^50 - 2^0 */ fe51_mul(&z2_50_0,&t,&z2_10_0);\n\n\t/* 2^100 - 2^50 */ fe51_nsquare(&t,&z2_50_0, 50); \n\t/* 2^100 - 2^0 */ fe51_mul(&z2_100_0,&t,&z2_50_0);\n\n\t/* 2^200 - 2^100 */ fe51_nsquare(&t,&z2_100_0, 100); \n\t/* 2^200 - 2^0 */ fe51_mul(&t,&t,&z2_100_0);\n\n\t/* 2^250 - 2^50 */ fe51_nsquare(&t,&t, 50);\n\t/* 2^250 - 2^0 */ fe51_mul(&t,&t,&z2_50_0);\n\n\t/* 2^255 - 2^5 */ fe51_nsquare(&t,&t,5);\n\t/* 2^255 - 21 */ fe51_mul(r,&t,&z11);\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S",
    "content": "#ifdef IN_SANDY2X\n\n/*\n   This file is basically amd64-51/fe25519_mul.s.\n*/\n#include \"fe51_namespace.h\"\n#include \"consts_namespace.h\"\n.text\n.p2align 5\n.globl _fe51_mul\n.globl fe51_mul\n_fe51_mul:\nfe51_mul:\nmov %rsp,%r11\nand $31,%r11\nadd $96,%r11\nsub %r11,%rsp\nmovq %r11,0(%rsp)\nmovq %r12,8(%rsp)\nmovq %r13,16(%rsp)\nmovq %r14,24(%rsp)\nmovq %r15,32(%rsp)\nmovq %rbx,40(%rsp)\nmovq %rbp,48(%rsp)\nmovq %rdi,56(%rsp)\nmov  %rdx,%rcx\nmovq   24(%rsi),%rdx\nimulq  $19,%rdx,%rax\nmovq %rax,64(%rsp)\nmulq  16(%rcx)\nmov  %rax,%r8\nmov  %rdx,%r9\nmovq   32(%rsi),%rdx\nimulq  $19,%rdx,%rax\nmovq %rax,72(%rsp)\nmulq  8(%rcx)\nadd  %rax,%r8\nadc %rdx,%r9\nmovq   0(%rsi),%rax\nmulq  0(%rcx)\nadd  %rax,%r8\nadc %rdx,%r9\nmovq   0(%rsi),%rax\nmulq  8(%rcx)\nmov  %rax,%r10\nmov  %rdx,%r11\nmovq   0(%rsi),%rax\nmulq  16(%rcx)\nmov  %rax,%r12\nmov  %rdx,%r13\nmovq   0(%rsi),%rax\nmulq  24(%rcx)\nmov  %rax,%r14\nmov  %rdx,%r15\nmovq   0(%rsi),%rax\nmulq  32(%rcx)\nmov  %rax,%rbx\nmov  %rdx,%rbp\nmovq   8(%rsi),%rax\nmulq  0(%rcx)\nadd  %rax,%r10\nadc %rdx,%r11\nmovq   8(%rsi),%rax\nmulq  8(%rcx)\nadd  %rax,%r12\nadc %rdx,%r13\nmovq   8(%rsi),%rax\nmulq  16(%rcx)\nadd  %rax,%r14\nadc %rdx,%r15\nmovq   8(%rsi),%rax\nmulq  24(%rcx)\nadd  %rax,%rbx\nadc %rdx,%rbp\nmovq   8(%rsi),%rdx\nimulq  $19,%rdx,%rax\nmulq  32(%rcx)\nadd  %rax,%r8\nadc %rdx,%r9\nmovq   16(%rsi),%rax\nmulq  0(%rcx)\nadd  %rax,%r12\nadc %rdx,%r13\nmovq   16(%rsi),%rax\nmulq  8(%rcx)\nadd  %rax,%r14\nadc %rdx,%r15\nmovq   16(%rsi),%rax\nmulq  16(%rcx)\nadd  %rax,%rbx\nadc %rdx,%rbp\nmovq   16(%rsi),%rdx\nimulq  $19,%rdx,%rax\nmulq  24(%rcx)\nadd  %rax,%r8\nadc %rdx,%r9\nmovq   16(%rsi),%rdx\nimulq  $19,%rdx,%rax\nmulq  32(%rcx)\nadd  %rax,%r10\nadc %rdx,%r11\nmovq   24(%rsi),%rax\nmulq  0(%rcx)\nadd  %rax,%r14\nadc %rdx,%r15\nmovq   24(%rsi),%rax\nmulq  8(%rcx)\nadd  %rax,%rbx\nadc %rdx,%rbp\nmovq 64(%rsp),%rax\nmulq  24(%rcx)\nadd  %rax,%r10\nadc %rdx,%r11\nmovq 64(%rsp),%rax\nmulq  32(%rcx)\nadd  %rax,%r12\nadc %rdx,%r13\nmovq   32(%rsi),%rax\nmulq  0(%rcx)\nadd  %rax,%rbx\nadc %rdx,%rbp\nmovq 72(%rsp),%rax\nmulq  16(%rcx)\nadd  %rax,%r10\nadc %rdx,%r11\nmovq 72(%rsp),%rax\nmulq  24(%rcx)\nadd  %rax,%r12\nadc %rdx,%r13\nmovq 72(%rsp),%rax\nmulq  32(%rcx)\nadd  %rax,%r14\nadc %rdx,%r15\nmovq REDMASK51(%rip),%rsi\nshld $13,%r8,%r9\nand  %rsi,%r8\nshld $13,%r10,%r11\nand  %rsi,%r10\nadd  %r9,%r10\nshld $13,%r12,%r13\nand  %rsi,%r12\nadd  %r11,%r12\nshld $13,%r14,%r15\nand  %rsi,%r14\nadd  %r13,%r14\nshld $13,%rbx,%rbp\nand  %rsi,%rbx\nadd  %r15,%rbx\nimulq  $19,%rbp,%rdx\nadd  %rdx,%r8\nmov  %r8,%rdx\nshr  $51,%rdx\nadd  %r10,%rdx\nmov  %rdx,%rcx\nshr  $51,%rdx\nand  %rsi,%r8\nadd  %r12,%rdx\nmov  %rdx,%r9\nshr  $51,%rdx\nand  %rsi,%rcx\nadd  %r14,%rdx\nmov  %rdx,%rax\nshr  $51,%rdx\nand  %rsi,%r9\nadd  %rbx,%rdx\nmov  %rdx,%r10\nshr  $51,%rdx\nand  %rsi,%rax\nimulq  $19,%rdx,%rdx\nadd  %rdx,%r8\nand  %rsi,%r10\nmovq   %r8,0(%rdi)\nmovq   %rcx,8(%rdi)\nmovq   %r9,16(%rdi)\nmovq   %rax,24(%rdi)\nmovq   %r10,32(%rdi)\nmovq 0(%rsp),%r11\nmovq 8(%rsp),%r12\nmovq 16(%rsp),%r13\nmovq 24(%rsp),%r14\nmovq 32(%rsp),%r15\nmovq 40(%rsp),%rbx\nmovq 48(%rsp),%rbp\nadd %r11,%rsp\nmov %rdi,%rax\nmov %rsi,%rdx\nret\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_namespace.h",
    "content": "#ifndef fe51_namespace_H\n#define fe51_namespace_H\n\n#define  fe51              crypto_scalarmult_curve25519_sandy2x_fe51\n#define _fe51             _crypto_scalarmult_curve25519_sandy2x_fe51\n#define  fe51_pack         crypto_scalarmult_curve25519_sandy2x_fe51_pack\n#define _fe51_pack        _crypto_scalarmult_curve25519_sandy2x_fe51_pack\n#define  fe51_mul          crypto_scalarmult_curve25519_sandy2x_fe51_mul\n#define _fe51_mul         _crypto_scalarmult_curve25519_sandy2x_fe51_mul\n#define  fe51_nsquare      crypto_scalarmult_curve25519_sandy2x_fe51_nsquare\n#define _fe51_nsquare     _crypto_scalarmult_curve25519_sandy2x_fe51_nsquare\n\n#define  fe51_invert       crypto_scalarmult_curve25519_sandy2x_fe51_invert\n\n#endif //ifndef fe51_namespace_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S",
    "content": "#ifdef IN_SANDY2X\n\n/*\n   This file is adapted from amd64-51/fe25519_square.s:\n   Adding loop to perform n squares.\n*/\n#include \"fe51_namespace.h\"\n#include \"consts_namespace.h\"\n.p2align 5\n\n.globl fe51_nsquare\n.globl _fe51_nsquare\n#ifdef __ELF__\n.type  fe51_nsquare, @function\n.type _fe51_nsquare, @function\n#endif\nfe51_nsquare:\n_fe51_nsquare:\n\nmov %rsp,%r11\nand $31,%r11\nadd $64,%r11\nsub %r11,%rsp\nmovq %r11,0(%rsp)\nmovq %r12,8(%rsp)\nmovq %r13,16(%rsp)\nmovq %r14,24(%rsp)\nmovq %r15,32(%rsp)\nmovq %rbx,40(%rsp)\nmovq %rbp,48(%rsp)\nmovq   0(%rsi),%rcx\nmovq   8(%rsi),%r8\nmovq   16(%rsi),%r9\nmovq   24(%rsi),%rax\nmovq   32(%rsi),%rsi\nmovq   %r9,16(%rdi)\nmovq   %rax,24(%rdi)\nmovq   %rsi,32(%rdi)\nmov  %rdx,%rsi\n._loop:\nsub  $1,%rsi\nmov  %rcx,%rax\nmul  %rcx\nadd  %rcx,%rcx\nmov  %rax,%r9\nmov  %rdx,%r10\nmov  %rcx,%rax\nmul  %r8\nmov  %rax,%r11\nmov  %rdx,%r12\nmov  %rcx,%rax\nmulq  16(%rdi)\nmov  %rax,%r13\nmov  %rdx,%r14\nmov  %rcx,%rax\nmulq  24(%rdi)\nmov  %rax,%r15\nmov  %rdx,%rbx\nmov  %rcx,%rax\nmulq  32(%rdi)\nmov  %rax,%rcx\nmov  %rdx,%rbp\nmov  %r8,%rax\nmul  %r8\nadd  %r8,%r8\nadd  %rax,%r13\nadc %rdx,%r14\nmov  %r8,%rax\nmulq  16(%rdi)\nadd  %rax,%r15\nadc %rdx,%rbx\nmov  %r8,%rax\nimulq  $19, %r8,%r8\nmulq  24(%rdi)\nadd  %rax,%rcx\nadc %rdx,%rbp\nmov  %r8,%rax\nmulq  32(%rdi)\nadd  %rax,%r9\nadc %rdx,%r10\nmovq   16(%rdi),%rax\nmulq  16(%rdi)\nadd  %rax,%rcx\nadc %rdx,%rbp\nshld $13,%rcx,%rbp\nmovq   16(%rdi),%rax\nimulq  $38, %rax,%rax\nmulq  24(%rdi)\nadd  %rax,%r9\nadc %rdx,%r10\nshld $13,%r9,%r10\nmovq   16(%rdi),%rax\nimulq  $38, %rax,%rax\nmulq  32(%rdi)\nadd  %rax,%r11\nadc %rdx,%r12\nmovq   24(%rdi),%rax\nimulq  $19, %rax,%rax\nmulq  24(%rdi)\nadd  %rax,%r11\nadc %rdx,%r12\nshld $13,%r11,%r12\nmovq   24(%rdi),%rax\nimulq  $38, %rax,%rax\nmulq  32(%rdi)\nadd  %rax,%r13\nadc %rdx,%r14\nshld $13,%r13,%r14\nmovq   32(%rdi),%rax\nimulq  $19, %rax,%rax\nmulq  32(%rdi)\nadd  %rax,%r15\nadc %rdx,%rbx\nshld $13,%r15,%rbx\nmovq REDMASK51(%rip),%rdx\nand  %rdx,%rcx\nadd  %rbx,%rcx\nand  %rdx,%r9\nand  %rdx,%r11\nadd  %r10,%r11\nand  %rdx,%r13\nadd  %r12,%r13\nand  %rdx,%r15\nadd  %r14,%r15\nimulq  $19, %rbp,%rbp\nlea  (%r9,%rbp),%r9\nmov  %r9,%rax\nshr  $51,%r9\nadd  %r11,%r9\nand  %rdx,%rax\nmov  %r9,%r8\nshr  $51,%r9\nadd  %r13,%r9\nand  %rdx,%r8\nmov  %r9,%r10\nshr  $51,%r9\nadd  %r15,%r9\nand  %rdx,%r10\nmovq   %r10,16(%rdi)\nmov  %r9,%r10\nshr  $51,%r9\nadd  %rcx,%r9\nand  %rdx,%r10\nmovq   %r10,24(%rdi)\nmov  %r9,%r10\nshr  $51,%r9\nimulq  $19, %r9,%r9\nlea  (%rax,%r9),%rcx\nand  %rdx,%r10\nmovq   %r10,32(%rdi)\ncmp  $0,%rsi\njne ._loop\nmovq   %rcx,0(%rdi)\nmovq   %r8,8(%rdi)\nmovq 0(%rsp),%r11\nmovq 8(%rsp),%r12\nmovq 16(%rsp),%r13\nmovq 24(%rsp),%r14\nmovq 32(%rsp),%r15\nmovq 40(%rsp),%rbx\nmovq 48(%rsp),%rbp\nadd %r11,%rsp\nret\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S",
    "content": "#ifdef IN_SANDY2X\n\n/*\n   This file is the result of merging \n   amd64-51/fe25519_pack.c and amd64-51/fe25519_freeze.s.\n*/\n#include \"fe51_namespace.h\"\n#include \"consts_namespace.h\"\n.p2align 5\n\n.globl fe51_pack\n.globl _fe51_pack\n#ifdef __ELF__\n.type  fe51_pack, @function\n.type _fe51_pack, @function\n#endif\nfe51_pack:\n_fe51_pack:\n\nmov %rsp,%r11\nand $31,%r11\nadd $32,%r11\nsub %r11,%rsp\nmovq %r11,0(%rsp)\nmovq %r12,8(%rsp)\nmovq   0(%rsi),%rdx\nmovq   8(%rsi),%rcx\nmovq   16(%rsi),%r8\nmovq   24(%rsi),%r9\nmovq   32(%rsi),%rsi\nmovq REDMASK51(%rip),%rax\nlea  -18(%rax),%r10\nmov  $3,%r11\n._reduceloop:\nmov  %rdx,%r12\nshr  $51,%r12\nand  %rax,%rdx\nadd  %r12,%rcx\nmov  %rcx,%r12\nshr  $51,%r12\nand  %rax,%rcx\nadd  %r12,%r8\nmov  %r8,%r12\nshr  $51,%r12\nand  %rax,%r8\nadd  %r12,%r9\nmov  %r9,%r12\nshr  $51,%r12\nand  %rax,%r9\nadd  %r12,%rsi\nmov  %rsi,%r12\nshr  $51,%r12\nand  %rax,%rsi\nimulq  $19, %r12,%r12\nadd  %r12,%rdx\nsub  $1,%r11\nja ._reduceloop\nmov  $1,%r12\ncmp  %r10,%rdx\ncmovl %r11,%r12\ncmp  %rax,%rcx\ncmovne %r11,%r12\ncmp  %rax,%r8\ncmovne %r11,%r12\ncmp  %rax,%r9\ncmovne %r11,%r12\ncmp  %rax,%rsi\ncmovne %r11,%r12\nneg  %r12\nand  %r12,%rax\nand  %r12,%r10\nsub  %r10,%rdx\nsub  %rax,%rcx\nsub  %rax,%r8\nsub  %rax,%r9\nsub  %rax,%rsi\nmov  %rdx,%rax\nand  $0xFF,%eax\nmovb   %al,0(%rdi)\nmov  %rdx,%rax\nshr  $8,%rax\nand  $0xFF,%eax\nmovb   %al,1(%rdi)\nmov  %rdx,%rax\nshr  $16,%rax\nand  $0xFF,%eax\nmovb   %al,2(%rdi)\nmov  %rdx,%rax\nshr  $24,%rax\nand  $0xFF,%eax\nmovb   %al,3(%rdi)\nmov  %rdx,%rax\nshr  $32,%rax\nand  $0xFF,%eax\nmovb   %al,4(%rdi)\nmov  %rdx,%rax\nshr  $40,%rax\nand  $0xFF,%eax\nmovb   %al,5(%rdi)\nmov  %rdx,%rdx\nshr  $48,%rdx\nmov  %rcx,%rax\nshl  $3,%rax\nand  $0xF8,%eax\nxor  %rdx,%rax\nmovb   %al,6(%rdi)\nmov  %rcx,%rdx\nshr  $5,%rdx\nand  $0xFF,%edx\nmovb   %dl,7(%rdi)\nmov  %rcx,%rdx\nshr  $13,%rdx\nand  $0xFF,%edx\nmovb   %dl,8(%rdi)\nmov  %rcx,%rdx\nshr  $21,%rdx\nand  $0xFF,%edx\nmovb   %dl,9(%rdi)\nmov  %rcx,%rdx\nshr  $29,%rdx\nand  $0xFF,%edx\nmovb   %dl,10(%rdi)\nmov  %rcx,%rdx\nshr  $37,%rdx\nand  $0xFF,%edx\nmovb   %dl,11(%rdi)\nmov  %rcx,%rdx\nshr  $45,%rdx\nmov  %r8,%rcx\nshl  $6,%rcx\nand  $0xC0,%ecx\nxor  %rdx,%rcx\nmovb   %cl,12(%rdi)\nmov  %r8,%rdx\nshr  $2,%rdx\nand  $0xFF,%edx\nmovb   %dl,13(%rdi)\nmov  %r8,%rdx\nshr  $10,%rdx\nand  $0xFF,%edx\nmovb   %dl,14(%rdi)\nmov  %r8,%rdx\nshr  $18,%rdx\nand  $0xFF,%edx\nmovb   %dl,15(%rdi)\nmov  %r8,%rdx\nshr  $26,%rdx\nand  $0xFF,%edx\nmovb   %dl,16(%rdi)\nmov  %r8,%rdx\nshr  $34,%rdx\nand  $0xFF,%edx\nmovb   %dl,17(%rdi)\nmov  %r8,%rdx\nshr  $42,%rdx\nmovb   %dl,18(%rdi)\nmov  %r8,%rdx\nshr  $50,%rdx\nmov  %r9,%rcx\nshl  $1,%rcx\nand  $0xFE,%ecx\nxor  %rdx,%rcx\nmovb   %cl,19(%rdi)\nmov  %r9,%rdx\nshr  $7,%rdx\nand  $0xFF,%edx\nmovb   %dl,20(%rdi)\nmov  %r9,%rdx\nshr  $15,%rdx\nand  $0xFF,%edx\nmovb   %dl,21(%rdi)\nmov  %r9,%rdx\nshr  $23,%rdx\nand  $0xFF,%edx\nmovb   %dl,22(%rdi)\nmov  %r9,%rdx\nshr  $31,%rdx\nand  $0xFF,%edx\nmovb   %dl,23(%rdi)\nmov  %r9,%rdx\nshr  $39,%rdx\nand  $0xFF,%edx\nmovb   %dl,24(%rdi)\nmov  %r9,%rdx\nshr  $47,%rdx\nmov  %rsi,%rcx\nshl  $4,%rcx\nand  $0xF0,%ecx\nxor  %rdx,%rcx\nmovb   %cl,25(%rdi)\nmov  %rsi,%rdx\nshr  $4,%rdx\nand  $0xFF,%edx\nmovb   %dl,26(%rdi)\nmov  %rsi,%rdx\nshr  $12,%rdx\nand  $0xFF,%edx\nmovb   %dl,27(%rdi)\nmov  %rsi,%rdx\nshr  $20,%rdx\nand  $0xFF,%edx\nmovb   %dl,28(%rdi)\nmov  %rsi,%rdx\nshr  $28,%rdx\nand  $0xFF,%edx\nmovb   %dl,29(%rdi)\nmov  %rsi,%rdx\nshr  $36,%rdx\nand  $0xFF,%edx\nmovb   %dl,30(%rdi)\nmov  %rsi,%rsi\nshr  $44,%rsi\nmovb   %sil,31(%rdi)\nmovq 0(%rsp),%r11\nmovq 8(%rsp),%r12\nadd %r11,%rsp\nret\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c",
    "content": "/*\n   This file is basically ref10/fe_frombytes.h.\n*/\n\n#include \"fe.h\"\n#include \"crypto_uint64.h\"\n\n#ifdef HAVE_AVX_ASM\n\nstatic crypto_uint64 load_3(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  return result;\n}\n\nstatic crypto_uint64 load_4(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  result |= ((crypto_uint64) in[3]) << 24;\n  return result;\n}\n\nvoid fe_frombytes(fe h,const unsigned char *s)\n{\n  crypto_uint64 h0 = load_4(s);\n  crypto_uint64 h1 = load_3(s + 4) << 6;\n  crypto_uint64 h2 = load_3(s + 7) << 5;\n  crypto_uint64 h3 = load_3(s + 10) << 3;\n  crypto_uint64 h4 = load_3(s + 13) << 2;\n  crypto_uint64 h5 = load_4(s + 16);\n  crypto_uint64 h6 = load_3(s + 20) << 7;\n  crypto_uint64 h7 = load_3(s + 23) << 5;\n  crypto_uint64 h8 = load_3(s + 26) << 4;\n  crypto_uint64 h9 = (load_3(s + 29) & 8388607) << 2;\n  crypto_uint64 carry0;\n  crypto_uint64 carry1;\n  crypto_uint64 carry2;\n  crypto_uint64 carry3;\n  crypto_uint64 carry4;\n  crypto_uint64 carry5;\n  crypto_uint64 carry6;\n  crypto_uint64 carry7;\n  crypto_uint64 carry8;\n  crypto_uint64 carry9;\n\n  carry9 = h9 >> 25; h0 += carry9 * 19; h9 &= 0x1FFFFFF;\n  carry1 = h1 >> 25; h2 += carry1; h1 &= 0x1FFFFFF;\n  carry3 = h3 >> 25; h4 += carry3; h3 &= 0x1FFFFFF;\n  carry5 = h5 >> 25; h6 += carry5; h5 &= 0x1FFFFFF;\n  carry7 = h7 >> 25; h8 += carry7; h7 &= 0x1FFFFFF;\n\n  carry0 = h0 >> 26; h1 += carry0; h0 &= 0x3FFFFFF;\n  carry2 = h2 >> 26; h3 += carry2; h2 &= 0x3FFFFFF;\n  carry4 = h4 >> 26; h5 += carry4; h4 &= 0x3FFFFFF;\n  carry6 = h6 >> 26; h7 += carry6; h6 &= 0x3FFFFFF;\n  carry8 = h8 >> 26; h9 += carry8; h8 &= 0x3FFFFFF;\n\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S",
    "content": "#ifdef IN_SANDY2X\n\n#include \"ladder_namespace.h\"\n#include \"consts_namespace.h\"\n.p2align 5\n\n.globl ladder\n.globl _ladder\n#ifdef __ELF__\n.type  ladder, @function\n.type _ladder, @function\n#endif\nladder:\n_ladder:\n\nmov %rsp,%r11\nand $31,%r11\nadd $1856,%r11\nsub %r11,%rsp\nmovq %r11,1824(%rsp)\nmovq %r12,1832(%rsp)\nmovq %r13,1840(%rsp)\nmovq %r14,1848(%rsp)\nmovdqa v0_0(%rip),%xmm0\nmovdqa v1_0(%rip),%xmm1\nmovdqu   0(%rdi),%xmm2\nmovdqa %xmm2,0(%rsp)\nmovdqu   16(%rdi),%xmm2\nmovdqa %xmm2,16(%rsp)\nmovdqu   32(%rdi),%xmm2\nmovdqa %xmm2,32(%rsp)\nmovdqu   48(%rdi),%xmm2\nmovdqa %xmm2,48(%rsp)\nmovdqu   64(%rdi),%xmm2\nmovdqa %xmm2,64(%rsp)\nmovdqa %xmm1,80(%rsp)\nmovdqa %xmm0,96(%rsp)\nmovdqa %xmm0,112(%rsp)\nmovdqa %xmm0,128(%rsp)\nmovdqa %xmm0,144(%rsp)\nmovdqa %xmm1,%xmm0\npxor %xmm1,%xmm1\npxor %xmm2,%xmm2\npxor %xmm3,%xmm3\npxor %xmm4,%xmm4\npxor %xmm5,%xmm5\npxor %xmm6,%xmm6\npxor %xmm7,%xmm7\npxor %xmm8,%xmm8\npxor %xmm9,%xmm9\nmovdqu   0(%rdi),%xmm10\nmovdqa %xmm10,160(%rsp)\nmovdqu   16(%rdi),%xmm10\nmovdqa %xmm10,176(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,192(%rsp)\nmovdqu   32(%rdi),%xmm10\nmovdqa %xmm10,208(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,224(%rsp)\nmovdqu   48(%rdi),%xmm10\nmovdqa %xmm10,240(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,256(%rsp)\nmovdqu   64(%rdi),%xmm10\nmovdqa %xmm10,272(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,288(%rsp)\nmovdqu   8(%rdi),%xmm10\npmuludq v2_1(%rip),%xmm10\nmovdqa %xmm10,304(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,320(%rsp)\nmovdqu   24(%rdi),%xmm10\npmuludq v2_1(%rip),%xmm10\nmovdqa %xmm10,336(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,352(%rsp)\nmovdqu   40(%rdi),%xmm10\npmuludq v2_1(%rip),%xmm10\nmovdqa %xmm10,368(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,384(%rsp)\nmovdqu   56(%rdi),%xmm10\npmuludq v2_1(%rip),%xmm10\nmovdqa %xmm10,400(%rsp)\npmuludq v19_19(%rip),%xmm10\nmovdqa %xmm10,416(%rsp)\nmovdqu   0(%rdi),%xmm10\nmovdqu   64(%rdi),%xmm11\nblendps $12, %xmm11, %xmm10\npshufd $2,%xmm10,%xmm10\npmuludq v38_1(%rip),%xmm10\nmovdqa %xmm10,432(%rsp)\nmovq   0(%rsi),%rdx\nmovq   8(%rsi),%rcx\nmovq   16(%rsi),%r8\nmovq   24(%rsi),%r9\nshrd $1,%rcx,%rdx\nshrd $1,%r8,%rcx\nshrd $1,%r9,%r8\nshr  $1,%r9\nxorq 0(%rsi),%rdx\nxorq 8(%rsi),%rcx\nxorq 16(%rsi),%r8\nxorq 24(%rsi),%r9\nleaq 800(%rsp),%rsi\nmov  $64,%rax\n._ladder_small_loop:\nmov  %rdx,%r10\nmov  %rcx,%r11\nmov  %r8,%r12\nmov  %r9,%r13\nshr  $1,%rdx\nshr  $1,%rcx\nshr  $1,%r8\nshr  $1,%r9\nand  $1,%r10d\nand  $1,%r11d\nand  $1,%r12d\nand  $1,%r13d\nneg  %r10\nneg  %r11\nneg  %r12\nneg  %r13\nmovl   %r10d,0(%rsi)\nmovl   %r11d,256(%rsi)\nmovl   %r12d,512(%rsi)\nmovl   %r13d,768(%rsi)\nadd  $4,%rsi\nsub  $1,%rax\njne ._ladder_small_loop\nmov  $255,%rdx\nadd  $760,%rsi\n._ladder_loop:\nsub  $1,%rdx\nvbroadcastss 0(%rsi),%xmm10\nsub  $4,%rsi\nmovdqa 0(%rsp),%xmm11\nmovdqa 80(%rsp),%xmm12\nvpxor %xmm11,%xmm0,%xmm13\npand %xmm10,%xmm13\npxor %xmm13,%xmm0\npxor %xmm13,%xmm11\nvpxor %xmm12,%xmm1,%xmm13\npand %xmm10,%xmm13\npxor %xmm13,%xmm1\npxor %xmm13,%xmm12\nmovdqa 16(%rsp),%xmm13\nmovdqa 96(%rsp),%xmm14\nvpxor %xmm13,%xmm2,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm2\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm3,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm3\npxor %xmm15,%xmm14\nmovdqa %xmm13,0(%rsp)\nmovdqa %xmm14,16(%rsp)\nmovdqa 32(%rsp),%xmm13\nmovdqa 112(%rsp),%xmm14\nvpxor %xmm13,%xmm4,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm4\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm5,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm5\npxor %xmm15,%xmm14\nmovdqa %xmm13,32(%rsp)\nmovdqa %xmm14,80(%rsp)\nmovdqa 48(%rsp),%xmm13\nmovdqa 128(%rsp),%xmm14\nvpxor %xmm13,%xmm6,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm6\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm7,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm7\npxor %xmm15,%xmm14\nmovdqa %xmm13,48(%rsp)\nmovdqa %xmm14,96(%rsp)\nmovdqa 64(%rsp),%xmm13\nmovdqa 144(%rsp),%xmm14\nvpxor %xmm13,%xmm8,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm8\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm9,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm9\npxor %xmm15,%xmm14\nmovdqa %xmm13,64(%rsp)\nmovdqa %xmm14,112(%rsp)\nvpaddq subc0(%rip),%xmm11,%xmm10\npsubq %xmm12,%xmm10\npaddq %xmm12,%xmm11\nvpunpckhqdq %xmm10,%xmm11,%xmm12\nvpunpcklqdq %xmm10,%xmm11,%xmm10\nvpaddq %xmm1,%xmm0,%xmm11\npaddq subc0(%rip),%xmm0\npsubq %xmm1,%xmm0\nvpunpckhqdq %xmm11,%xmm0,%xmm1\nvpunpcklqdq %xmm11,%xmm0,%xmm0\nvpmuludq %xmm0,%xmm10,%xmm11\nvpmuludq %xmm1,%xmm10,%xmm13\nmovdqa %xmm1,128(%rsp)\npaddq %xmm1,%xmm1\nvpmuludq %xmm0,%xmm12,%xmm14\nmovdqa %xmm0,144(%rsp)\npaddq %xmm14,%xmm13\nvpmuludq %xmm1,%xmm12,%xmm0\nmovdqa %xmm1,448(%rsp)\nvpaddq %xmm3,%xmm2,%xmm1\npaddq subc2(%rip),%xmm2\npsubq %xmm3,%xmm2\nvpunpckhqdq %xmm1,%xmm2,%xmm3\nvpunpcklqdq %xmm1,%xmm2,%xmm1\nvpmuludq %xmm1,%xmm10,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq %xmm3,%xmm10,%xmm2\nmovdqa %xmm3,464(%rsp)\npaddq %xmm3,%xmm3\nvpmuludq %xmm1,%xmm12,%xmm14\nmovdqa %xmm1,480(%rsp)\npaddq %xmm14,%xmm2\nvpmuludq %xmm3,%xmm12,%xmm1\nmovdqa %xmm3,496(%rsp)\nvpaddq %xmm5,%xmm4,%xmm3\npaddq subc2(%rip),%xmm4\npsubq %xmm5,%xmm4\nvpunpckhqdq %xmm3,%xmm4,%xmm5\nvpunpcklqdq %xmm3,%xmm4,%xmm3\nvpmuludq %xmm3,%xmm10,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq %xmm5,%xmm10,%xmm4\nmovdqa %xmm5,512(%rsp)\npaddq %xmm5,%xmm5\nvpmuludq %xmm3,%xmm12,%xmm14\nmovdqa %xmm3,528(%rsp)\npaddq %xmm14,%xmm4\nvpaddq %xmm7,%xmm6,%xmm3\npaddq subc2(%rip),%xmm6\npsubq %xmm7,%xmm6\nvpunpckhqdq %xmm3,%xmm6,%xmm7\nvpunpcklqdq %xmm3,%xmm6,%xmm3\nvpmuludq %xmm3,%xmm10,%xmm6\nvpmuludq %xmm5,%xmm12,%xmm14\nmovdqa %xmm5,544(%rsp)\npmuludq v19_19(%rip),%xmm5\nmovdqa %xmm5,560(%rsp)\npaddq %xmm14,%xmm6\nvpmuludq %xmm7,%xmm10,%xmm5\nmovdqa %xmm7,576(%rsp)\npaddq %xmm7,%xmm7\nvpmuludq %xmm3,%xmm12,%xmm14\nmovdqa %xmm3,592(%rsp)\npaddq %xmm14,%xmm5\npmuludq v19_19(%rip),%xmm3\nmovdqa %xmm3,608(%rsp)\nvpaddq %xmm9,%xmm8,%xmm3\npaddq subc2(%rip),%xmm8\npsubq %xmm9,%xmm8\nvpunpckhqdq %xmm3,%xmm8,%xmm9\nvpunpcklqdq %xmm3,%xmm8,%xmm3\nmovdqa %xmm3,624(%rsp)\nvpmuludq %xmm7,%xmm12,%xmm8\nmovdqa %xmm7,640(%rsp)\npmuludq v19_19(%rip),%xmm7\nmovdqa %xmm7,656(%rsp)\nvpmuludq %xmm3,%xmm10,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq %xmm9,%xmm10,%xmm7\nmovdqa %xmm9,672(%rsp)\npaddq %xmm9,%xmm9\nvpmuludq %xmm3,%xmm12,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nmovdqa %xmm3,688(%rsp)\npmuludq v19_19(%rip),%xmm12\nvpmuludq %xmm9,%xmm12,%xmm3\nmovdqa %xmm9,704(%rsp)\npaddq %xmm3,%xmm11\nmovdqa 0(%rsp),%xmm3\nmovdqa 16(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 480(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 464(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 528(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 512(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 592(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 576(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 624(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\npmuludq 672(%rsp),%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 448(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 480(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 496(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 528(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 544(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 592(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 640(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 624(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\npmuludq 704(%rsp),%xmm9\npaddq %xmm9,%xmm0\nmovdqa 32(%rsp),%xmm3\nmovdqa 80(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 480(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 464(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 528(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 512(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 592(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 576(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 624(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\npmuludq 672(%rsp),%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 448(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 480(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 496(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 528(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 544(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 592(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 640(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 624(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\npmuludq 704(%rsp),%xmm9\npaddq %xmm9,%xmm1\nmovdqa 48(%rsp),%xmm3\nmovdqa 96(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 480(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 464(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 528(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 512(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 592(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 576(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 624(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\npmuludq 672(%rsp),%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 448(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 480(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 496(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 528(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 544(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 592(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 640(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 624(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\npmuludq 704(%rsp),%xmm9\npaddq %xmm9,%xmm6\nmovdqa 64(%rsp),%xmm3\nmovdqa 112(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 480(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 464(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 528(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 512(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 592(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 576(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 624(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\npmuludq 672(%rsp),%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 448(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 480(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 496(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 528(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 544(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 592(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 640(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 624(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\npmuludq 704(%rsp),%xmm9\npaddq %xmm9,%xmm8\nvpsrlq $25,%xmm4,%xmm3\npaddq %xmm3,%xmm6\npand m25(%rip),%xmm4\nvpsrlq $26,%xmm11,%xmm3\npaddq %xmm3,%xmm13\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm6,%xmm3\npaddq %xmm3,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm13,%xmm3\npaddq %xmm3,%xmm0\npand m25(%rip),%xmm13\nvpsrlq $25,%xmm5,%xmm3\npaddq %xmm3,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm0,%xmm3\npaddq %xmm3,%xmm2\npand m26(%rip),%xmm0\nvpsrlq $26,%xmm8,%xmm3\npaddq %xmm3,%xmm7\npand m26(%rip),%xmm8\nvpsrlq $25,%xmm2,%xmm3\npaddq %xmm3,%xmm1\npand m25(%rip),%xmm2\nvpsrlq $25,%xmm7,%xmm3\nvpsllq $4,%xmm3,%xmm9\npaddq %xmm3,%xmm11\npsllq $1,%xmm3\npaddq %xmm3,%xmm9\npaddq %xmm9,%xmm11\npand m25(%rip),%xmm7\nvpsrlq $26,%xmm1,%xmm3\npaddq %xmm3,%xmm4\npand m26(%rip),%xmm1\nvpsrlq $26,%xmm11,%xmm3\npaddq %xmm3,%xmm13\npand m26(%rip),%xmm11\nvpsrlq $25,%xmm4,%xmm3\npaddq %xmm3,%xmm6\npand m25(%rip),%xmm4\nvpunpcklqdq %xmm13,%xmm11,%xmm3\nvpunpckhqdq %xmm13,%xmm11,%xmm9\nvpaddq subc0(%rip),%xmm9,%xmm10\npsubq %xmm3,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm3,%xmm10,%xmm9\npunpcklqdq %xmm3,%xmm10\nvpmuludq %xmm10,%xmm10,%xmm3\npaddq %xmm10,%xmm10\nvpmuludq %xmm9,%xmm10,%xmm11\nvpunpcklqdq %xmm2,%xmm0,%xmm12\nvpunpckhqdq %xmm2,%xmm0,%xmm0\nvpaddq subc2(%rip),%xmm0,%xmm2\npsubq %xmm12,%xmm2\npaddq %xmm0,%xmm12\nvpunpckhqdq %xmm12,%xmm2,%xmm0\npunpcklqdq %xmm12,%xmm2\nvpmuludq %xmm2,%xmm10,%xmm12\nvpaddq %xmm9,%xmm9,%xmm13\nvpmuludq %xmm13,%xmm9,%xmm9\npaddq %xmm9,%xmm12\nvpmuludq %xmm0,%xmm10,%xmm9\nvpmuludq %xmm2,%xmm13,%xmm14\npaddq %xmm14,%xmm9\nvpunpcklqdq %xmm4,%xmm1,%xmm14\nvpunpckhqdq %xmm4,%xmm1,%xmm1\nvpaddq subc2(%rip),%xmm1,%xmm4\npsubq %xmm14,%xmm4\npaddq %xmm1,%xmm14\nvpunpckhqdq %xmm14,%xmm4,%xmm1\npunpcklqdq %xmm14,%xmm4\nmovdqa %xmm1,0(%rsp)\npaddq %xmm1,%xmm1\nmovdqa %xmm1,16(%rsp)\npmuludq v19_19(%rip),%xmm1\nmovdqa %xmm1,32(%rsp)\nvpmuludq %xmm4,%xmm10,%xmm1\nvpmuludq %xmm2,%xmm2,%xmm14\npaddq %xmm14,%xmm1\nvpmuludq 0(%rsp),%xmm10,%xmm14\nvpmuludq %xmm4,%xmm13,%xmm15\npaddq %xmm15,%xmm14\nvpunpcklqdq %xmm5,%xmm6,%xmm15\nvpunpckhqdq %xmm5,%xmm6,%xmm5\nvpaddq subc2(%rip),%xmm5,%xmm6\npsubq %xmm15,%xmm6\npaddq %xmm5,%xmm15\nvpunpckhqdq %xmm15,%xmm6,%xmm5\npunpcklqdq %xmm15,%xmm6\nmovdqa %xmm6,48(%rsp)\npmuludq v19_19(%rip),%xmm6\nmovdqa %xmm6,64(%rsp)\nmovdqa %xmm5,80(%rsp)\npmuludq v38_38(%rip),%xmm5\nmovdqa %xmm5,96(%rsp)\nvpmuludq 48(%rsp),%xmm10,%xmm5\nvpaddq %xmm0,%xmm0,%xmm6\nvpmuludq %xmm6,%xmm0,%xmm0\npaddq %xmm0,%xmm5\nvpmuludq 80(%rsp),%xmm10,%xmm0\nvpmuludq %xmm4,%xmm6,%xmm15\npaddq %xmm15,%xmm0\nvpmuludq %xmm6,%xmm13,%xmm15\npaddq %xmm15,%xmm1\nvpmuludq %xmm6,%xmm2,%xmm15\npaddq %xmm15,%xmm14\nvpunpcklqdq %xmm7,%xmm8,%xmm15\nvpunpckhqdq %xmm7,%xmm8,%xmm7\nvpaddq subc2(%rip),%xmm7,%xmm8\npsubq %xmm15,%xmm8\npaddq %xmm7,%xmm15\nvpunpckhqdq %xmm15,%xmm8,%xmm7\npunpcklqdq %xmm15,%xmm8\nmovdqa %xmm8,112(%rsp)\npmuludq v19_19(%rip),%xmm8\nmovdqa %xmm8,448(%rsp)\nvpmuludq 112(%rsp),%xmm10,%xmm8\nvpmuludq %xmm7,%xmm10,%xmm10\nvpmuludq v38_38(%rip),%xmm7,%xmm15\nvpmuludq %xmm15,%xmm7,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq %xmm15,%xmm13,%xmm7\npaddq %xmm7,%xmm3\nvpmuludq %xmm15,%xmm2,%xmm7\npaddq %xmm7,%xmm11\nvpmuludq 80(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq 16(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 48(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm0\nvpmuludq 112(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm10\nvpmuludq %xmm15,%xmm6,%xmm7\npaddq %xmm7,%xmm12\nvpmuludq %xmm15,%xmm4,%xmm7\npaddq %xmm7,%xmm9\nvpaddq %xmm2,%xmm2,%xmm2\nvpmuludq %xmm4,%xmm2,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 448(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm3\nvpmuludq 448(%rsp),%xmm6,%xmm7\npaddq %xmm7,%xmm11\nvpmuludq 0(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm0\nvpmuludq 48(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq 80(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 96(%rsp),%xmm4,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq %xmm4,%xmm4,%xmm2\npaddq %xmm2,%xmm8\nvpaddq %xmm4,%xmm4,%xmm2\nvpmuludq 448(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm12\nvpmuludq 16(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq 48(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm14\nvpmuludq 96(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm3\nmovdqa 16(%rsp),%xmm4\npmuludq 448(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 16(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm8\nvpmuludq 48(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 80(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm4\npaddq %xmm4,%xmm5\nvpmuludq 112(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm0\nmovdqa 48(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 448(%rsp),%xmm4\npaddq %xmm4,%xmm1\nmovdqa 80(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 448(%rsp),%xmm4\npaddq %xmm4,%xmm14\nvpmuludq 64(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm3\nmovdqa 16(%rsp),%xmm4\npmuludq 64(%rsp),%xmm4\npaddq %xmm4,%xmm11\nmovdqa 16(%rsp),%xmm4\npmuludq 96(%rsp),%xmm4\npaddq %xmm4,%xmm12\nmovdqa 48(%rsp),%xmm4\npmuludq 96(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 0(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm10\nmovdqa 32(%rsp),%xmm2\npmuludq 0(%rsp),%xmm2\npaddq %xmm2,%xmm3\nmovdqa 64(%rsp),%xmm2\npmuludq 48(%rsp),%xmm2\npaddq %xmm2,%xmm12\nmovdqa 96(%rsp),%xmm2\npmuludq 80(%rsp),%xmm2\npaddq %xmm2,%xmm1\nmovdqa 448(%rsp),%xmm2\npmuludq 112(%rsp),%xmm2\npaddq %xmm2,%xmm5\nvpsrlq $26,%xmm3,%xmm2\npaddq %xmm2,%xmm11\npand m26(%rip),%xmm3\nvpsrlq $25,%xmm14,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm14\nvpsrlq $25,%xmm11,%xmm2\npaddq %xmm2,%xmm12\npand m25(%rip),%xmm11\nvpsrlq $26,%xmm5,%xmm2\npaddq %xmm2,%xmm0\npand m26(%rip),%xmm5\nvpsrlq $26,%xmm12,%xmm2\npaddq %xmm2,%xmm9\npand m26(%rip),%xmm12\nvpsrlq $25,%xmm0,%xmm2\npaddq %xmm2,%xmm8\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm9,%xmm2\npaddq %xmm2,%xmm1\npand m25(%rip),%xmm9\nvpsrlq $26,%xmm8,%xmm2\npaddq %xmm2,%xmm10\npand m26(%rip),%xmm8\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm14\npand m26(%rip),%xmm1\nvpsrlq $25,%xmm10,%xmm2\nvpsllq $4,%xmm2,%xmm4\npaddq %xmm2,%xmm3\npsllq $1,%xmm2\npaddq %xmm2,%xmm4\npaddq %xmm4,%xmm3\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm14,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm14\nvpsrlq $26,%xmm3,%xmm2\npaddq %xmm2,%xmm11\npand m26(%rip),%xmm3\nvpunpckhqdq %xmm11,%xmm3,%xmm2\nmovdqa %xmm2,0(%rsp)\npshufd $0,%xmm3,%xmm2\npshufd $0,%xmm11,%xmm3\nvpmuludq 160(%rsp),%xmm2,%xmm4\nvpmuludq 432(%rsp),%xmm3,%xmm6\npaddq %xmm6,%xmm4\nvpmuludq 176(%rsp),%xmm2,%xmm6\nvpmuludq 304(%rsp),%xmm3,%xmm7\npaddq %xmm7,%xmm6\nvpmuludq 208(%rsp),%xmm2,%xmm7\nvpmuludq 336(%rsp),%xmm3,%xmm11\npaddq %xmm11,%xmm7\nvpmuludq 240(%rsp),%xmm2,%xmm11\nvpmuludq 368(%rsp),%xmm3,%xmm13\npaddq %xmm13,%xmm11\nvpmuludq 272(%rsp),%xmm2,%xmm2\nvpmuludq 400(%rsp),%xmm3,%xmm3\npaddq %xmm3,%xmm2\nvpunpckhqdq %xmm9,%xmm12,%xmm3\nmovdqa %xmm3,16(%rsp)\npshufd $0,%xmm12,%xmm3\npshufd $0,%xmm9,%xmm9\nvpmuludq 288(%rsp),%xmm3,%xmm12\npaddq %xmm12,%xmm4\nvpmuludq 416(%rsp),%xmm9,%xmm12\npaddq %xmm12,%xmm4\nvpmuludq 160(%rsp),%xmm3,%xmm12\npaddq %xmm12,%xmm6\nvpmuludq 432(%rsp),%xmm9,%xmm12\npaddq %xmm12,%xmm6\nvpmuludq 176(%rsp),%xmm3,%xmm12\npaddq %xmm12,%xmm7\nvpmuludq 304(%rsp),%xmm9,%xmm12\npaddq %xmm12,%xmm7\nvpmuludq 208(%rsp),%xmm3,%xmm12\npaddq %xmm12,%xmm11\nvpmuludq 336(%rsp),%xmm9,%xmm12\npaddq %xmm12,%xmm11\nvpmuludq 240(%rsp),%xmm3,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 368(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpunpckhqdq %xmm14,%xmm1,%xmm3\nmovdqa %xmm3,32(%rsp)\npshufd $0,%xmm1,%xmm1\npshufd $0,%xmm14,%xmm3\nvpmuludq 256(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm4\nvpmuludq 384(%rsp),%xmm3,%xmm9\npaddq %xmm9,%xmm4\nvpmuludq 288(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm6\nvpmuludq 416(%rsp),%xmm3,%xmm9\npaddq %xmm9,%xmm6\nvpmuludq 160(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm7\nvpmuludq 432(%rsp),%xmm3,%xmm9\npaddq %xmm9,%xmm7\nvpmuludq 176(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm11\nvpmuludq 304(%rsp),%xmm3,%xmm9\npaddq %xmm9,%xmm11\nvpmuludq 208(%rsp),%xmm1,%xmm1\npaddq %xmm1,%xmm2\nvpmuludq 336(%rsp),%xmm3,%xmm1\npaddq %xmm1,%xmm2\nvpunpckhqdq %xmm0,%xmm5,%xmm1\nmovdqa %xmm1,48(%rsp)\npshufd $0,%xmm5,%xmm1\npshufd $0,%xmm0,%xmm0\nvpmuludq 224(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 352(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 256(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 384(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 288(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 416(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 160(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 432(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 176(%rsp),%xmm1,%xmm1\npaddq %xmm1,%xmm2\nvpmuludq 304(%rsp),%xmm0,%xmm0\npaddq %xmm0,%xmm2\nvpunpckhqdq %xmm10,%xmm8,%xmm0\nmovdqa %xmm0,64(%rsp)\npshufd $0,%xmm8,%xmm0\npshufd $0,%xmm10,%xmm1\nvpmuludq 192(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 320(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 224(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 352(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 256(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 384(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 288(%rsp),%xmm0,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 416(%rsp),%xmm1,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 160(%rsp),%xmm0,%xmm0\npaddq %xmm0,%xmm2\nvpmuludq 432(%rsp),%xmm1,%xmm0\npaddq %xmm0,%xmm2\nmovdqa %xmm4,80(%rsp)\nmovdqa %xmm6,96(%rsp)\nmovdqa %xmm7,112(%rsp)\nmovdqa %xmm11,448(%rsp)\nmovdqa %xmm2,496(%rsp)\nmovdqa 144(%rsp),%xmm0\nvpmuludq %xmm0,%xmm0,%xmm1\npaddq %xmm0,%xmm0\nmovdqa 128(%rsp),%xmm2\nvpmuludq %xmm2,%xmm0,%xmm3\nmovdqa 480(%rsp),%xmm4\nvpmuludq %xmm4,%xmm0,%xmm5\nmovdqa 464(%rsp),%xmm6\nvpmuludq %xmm6,%xmm0,%xmm7\nmovdqa 528(%rsp),%xmm8\nvpmuludq %xmm8,%xmm0,%xmm9\nvpmuludq 512(%rsp),%xmm0,%xmm10\nvpmuludq 592(%rsp),%xmm0,%xmm11\nvpmuludq 576(%rsp),%xmm0,%xmm12\nvpmuludq 624(%rsp),%xmm0,%xmm13\nmovdqa 672(%rsp),%xmm14\nvpmuludq %xmm14,%xmm0,%xmm0\nvpmuludq v38_38(%rip),%xmm14,%xmm15\nvpmuludq %xmm15,%xmm14,%xmm14\npaddq %xmm14,%xmm13\nvpaddq %xmm6,%xmm6,%xmm14\nvpmuludq %xmm14,%xmm6,%xmm6\npaddq %xmm6,%xmm11\nvpaddq %xmm2,%xmm2,%xmm6\nvpmuludq %xmm6,%xmm2,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq %xmm15,%xmm6,%xmm2\npaddq %xmm2,%xmm1\nvpmuludq %xmm15,%xmm4,%xmm2\npaddq %xmm2,%xmm3\nvpmuludq 544(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 592(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 640(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 624(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq %xmm4,%xmm6,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq %xmm14,%xmm6,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq %xmm8,%xmm6,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq %xmm15,%xmm14,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq %xmm15,%xmm8,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq %xmm4,%xmm4,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq %xmm14,%xmm4,%xmm2\npaddq %xmm2,%xmm10\nvpaddq %xmm4,%xmm4,%xmm2\nvpmuludq %xmm8,%xmm2,%xmm4\npaddq %xmm4,%xmm11\nvpmuludq 688(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq 688(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm3\nvpmuludq 512(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm12\nvpmuludq 592(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm13\nvpmuludq 576(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq 656(%rsp),%xmm8,%xmm2\npaddq %xmm2,%xmm3\nvpmuludq %xmm8,%xmm14,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq %xmm8,%xmm8,%xmm2\npaddq %xmm2,%xmm13\nvpaddq %xmm8,%xmm8,%xmm2\nvpmuludq 688(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm5\nvpmuludq 544(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 592(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 656(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm1\nmovdqa 544(%rsp),%xmm4\npmuludq 688(%rsp),%xmm4\npaddq %xmm4,%xmm7\nvpmuludq 544(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm13\nvpmuludq 592(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm0\nvpmuludq 640(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm11\nvpmuludq 624(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm12\nmovdqa 592(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 688(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 608(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm1\nmovdqa 544(%rsp),%xmm4\npmuludq 608(%rsp),%xmm4\npaddq %xmm4,%xmm3\nmovdqa 544(%rsp),%xmm4\npmuludq 656(%rsp),%xmm4\npaddq %xmm4,%xmm5\nmovdqa 592(%rsp),%xmm4\npmuludq 656(%rsp),%xmm4\npaddq %xmm4,%xmm7\nmovdqa 640(%rsp),%xmm4\npmuludq 688(%rsp),%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 512(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm0\nmovdqa 560(%rsp),%xmm2\npmuludq 512(%rsp),%xmm2\npaddq %xmm2,%xmm1\nmovdqa 608(%rsp),%xmm2\npmuludq 592(%rsp),%xmm2\npaddq %xmm2,%xmm5\nmovdqa 656(%rsp),%xmm2\npmuludq 576(%rsp),%xmm2\npaddq %xmm2,%xmm9\nmovdqa 688(%rsp),%xmm2\npmuludq 624(%rsp),%xmm2\npaddq %xmm2,%xmm11\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm3\npand m26(%rip),%xmm1\nvpsrlq $25,%xmm10,%xmm2\npaddq %xmm2,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm3,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm3\nvpsrlq $26,%xmm11,%xmm2\npaddq %xmm2,%xmm12\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm5,%xmm2\npaddq %xmm2,%xmm7\npand m26(%rip),%xmm5\nvpsrlq $25,%xmm12,%xmm2\npaddq %xmm2,%xmm13\npand m25(%rip),%xmm12\nvpsrlq $25,%xmm7,%xmm2\npaddq %xmm2,%xmm9\npand m25(%rip),%xmm7\nvpsrlq $26,%xmm13,%xmm2\npaddq %xmm2,%xmm0\npand m26(%rip),%xmm13\nvpsrlq $26,%xmm9,%xmm2\npaddq %xmm2,%xmm10\npand m26(%rip),%xmm9\nvpsrlq $25,%xmm0,%xmm2\nvpsllq $4,%xmm2,%xmm4\npaddq %xmm2,%xmm1\npsllq $1,%xmm2\npaddq %xmm2,%xmm4\npaddq %xmm4,%xmm1\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm10,%xmm2\npaddq %xmm2,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm3\npand m26(%rip),%xmm1\nvpunpckhqdq %xmm3,%xmm1,%xmm2\nvpunpcklqdq %xmm3,%xmm1,%xmm1\nmovdqa %xmm1,464(%rsp)\nvpaddq subc0(%rip),%xmm2,%xmm3\npsubq %xmm1,%xmm3\nvpunpckhqdq %xmm3,%xmm2,%xmm1\nvpunpcklqdq %xmm3,%xmm2,%xmm2\nmovdqa %xmm2,480(%rsp)\nmovdqa %xmm1,512(%rsp)\npsllq $1,%xmm1\nmovdqa %xmm1,528(%rsp)\npmuludq v121666_121666(%rip),%xmm3\nmovdqa 80(%rsp),%xmm1\nvpunpcklqdq %xmm1,%xmm3,%xmm2\nvpunpckhqdq %xmm1,%xmm3,%xmm1\nvpunpckhqdq %xmm7,%xmm5,%xmm3\nvpunpcklqdq %xmm7,%xmm5,%xmm4\nmovdqa %xmm4,544(%rsp)\nvpaddq subc2(%rip),%xmm3,%xmm5\npsubq %xmm4,%xmm5\nvpunpckhqdq %xmm5,%xmm3,%xmm4\nvpunpcklqdq %xmm5,%xmm3,%xmm3\nmovdqa %xmm3,560(%rsp)\nmovdqa %xmm4,576(%rsp)\npsllq $1,%xmm4\nmovdqa %xmm4,592(%rsp)\npmuludq v121666_121666(%rip),%xmm5\nmovdqa 96(%rsp),%xmm3\nvpunpcklqdq %xmm3,%xmm5,%xmm4\nvpunpckhqdq %xmm3,%xmm5,%xmm3\nvpunpckhqdq %xmm10,%xmm9,%xmm5\nvpunpcklqdq %xmm10,%xmm9,%xmm6\nmovdqa %xmm6,608(%rsp)\nvpaddq subc2(%rip),%xmm5,%xmm7\npsubq %xmm6,%xmm7\nvpunpckhqdq %xmm7,%xmm5,%xmm6\nvpunpcklqdq %xmm7,%xmm5,%xmm5\nmovdqa %xmm5,624(%rsp)\nmovdqa %xmm6,640(%rsp)\npsllq $1,%xmm6\nmovdqa %xmm6,656(%rsp)\npmuludq v121666_121666(%rip),%xmm7\nmovdqa 112(%rsp),%xmm5\nvpunpcklqdq %xmm5,%xmm7,%xmm6\nvpunpckhqdq %xmm5,%xmm7,%xmm5\nvpunpckhqdq %xmm12,%xmm11,%xmm7\nvpunpcklqdq %xmm12,%xmm11,%xmm8\nmovdqa %xmm8,672(%rsp)\nvpaddq subc2(%rip),%xmm7,%xmm9\npsubq %xmm8,%xmm9\nvpunpckhqdq %xmm9,%xmm7,%xmm8\nvpunpcklqdq %xmm9,%xmm7,%xmm7\nmovdqa %xmm7,688(%rsp)\nmovdqa %xmm8,704(%rsp)\npsllq $1,%xmm8\nmovdqa %xmm8,720(%rsp)\npmuludq v121666_121666(%rip),%xmm9\nmovdqa 448(%rsp),%xmm7\nvpunpcklqdq %xmm7,%xmm9,%xmm8\nvpunpckhqdq %xmm7,%xmm9,%xmm7\nvpunpckhqdq %xmm0,%xmm13,%xmm9\nvpunpcklqdq %xmm0,%xmm13,%xmm0\nmovdqa %xmm0,448(%rsp)\nvpaddq subc2(%rip),%xmm9,%xmm10\npsubq %xmm0,%xmm10\nvpunpckhqdq %xmm10,%xmm9,%xmm0\nvpunpcklqdq %xmm10,%xmm9,%xmm9\nmovdqa %xmm9,736(%rsp)\nmovdqa %xmm0,752(%rsp)\npsllq $1,%xmm0\nmovdqa %xmm0,768(%rsp)\npmuludq v121666_121666(%rip),%xmm10\nmovdqa 496(%rsp),%xmm0\nvpunpcklqdq %xmm0,%xmm10,%xmm9\nvpunpckhqdq %xmm0,%xmm10,%xmm0\nvpsrlq $26,%xmm2,%xmm10\npaddq %xmm10,%xmm1\npand m26(%rip),%xmm2\nvpsrlq $25,%xmm5,%xmm10\npaddq %xmm10,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $25,%xmm1,%xmm10\npaddq %xmm10,%xmm4\npand m25(%rip),%xmm1\nvpsrlq $26,%xmm8,%xmm10\npaddq %xmm10,%xmm7\npand m26(%rip),%xmm8\nvpsrlq $26,%xmm4,%xmm10\npaddq %xmm10,%xmm3\npand m26(%rip),%xmm4\nvpsrlq $25,%xmm7,%xmm10\npaddq %xmm10,%xmm9\npand m25(%rip),%xmm7\nvpsrlq $25,%xmm3,%xmm10\npaddq %xmm10,%xmm6\npand m25(%rip),%xmm3\nvpsrlq $26,%xmm9,%xmm10\npaddq %xmm10,%xmm0\npand m26(%rip),%xmm9\nvpsrlq $26,%xmm6,%xmm10\npaddq %xmm10,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm0,%xmm10\nvpsllq $4,%xmm10,%xmm11\npaddq %xmm10,%xmm2\npsllq $1,%xmm10\npaddq %xmm10,%xmm11\npaddq %xmm11,%xmm2\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm5,%xmm10\npaddq %xmm10,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm2,%xmm10\npaddq %xmm10,%xmm1\npand m26(%rip),%xmm2\nvpunpckhqdq %xmm1,%xmm2,%xmm10\nmovdqa %xmm10,80(%rsp)\nvpunpcklqdq %xmm1,%xmm2,%xmm1\nvpunpckhqdq %xmm3,%xmm4,%xmm2\nmovdqa %xmm2,96(%rsp)\nvpunpcklqdq %xmm3,%xmm4,%xmm2\nvpunpckhqdq %xmm5,%xmm6,%xmm3\nmovdqa %xmm3,112(%rsp)\nvpunpcklqdq %xmm5,%xmm6,%xmm3\nvpunpckhqdq %xmm7,%xmm8,%xmm4\nmovdqa %xmm4,128(%rsp)\nvpunpcklqdq %xmm7,%xmm8,%xmm4\nvpunpckhqdq %xmm0,%xmm9,%xmm5\nmovdqa %xmm5,144(%rsp)\nvpunpcklqdq %xmm0,%xmm9,%xmm0\nmovdqa 464(%rsp),%xmm5\npaddq %xmm5,%xmm1\nvpunpcklqdq %xmm1,%xmm5,%xmm6\nvpunpckhqdq %xmm1,%xmm5,%xmm1\nvpmuludq 512(%rsp),%xmm6,%xmm5\nvpmuludq 480(%rsp),%xmm1,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 560(%rsp),%xmm6,%xmm7\nvpmuludq 528(%rsp),%xmm1,%xmm8\npaddq %xmm8,%xmm7\nvpmuludq 576(%rsp),%xmm6,%xmm8\nvpmuludq 560(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm8\nvpmuludq 624(%rsp),%xmm6,%xmm9\nvpmuludq 592(%rsp),%xmm1,%xmm10\npaddq %xmm10,%xmm9\nvpmuludq 640(%rsp),%xmm6,%xmm10\nvpmuludq 624(%rsp),%xmm1,%xmm11\npaddq %xmm11,%xmm10\nvpmuludq 688(%rsp),%xmm6,%xmm11\nvpmuludq 656(%rsp),%xmm1,%xmm12\npaddq %xmm12,%xmm11\nvpmuludq 704(%rsp),%xmm6,%xmm12\nvpmuludq 688(%rsp),%xmm1,%xmm13\npaddq %xmm13,%xmm12\nvpmuludq 736(%rsp),%xmm6,%xmm13\nvpmuludq 720(%rsp),%xmm1,%xmm14\npaddq %xmm14,%xmm13\nvpmuludq 752(%rsp),%xmm6,%xmm14\nvpmuludq 736(%rsp),%xmm1,%xmm15\npaddq %xmm15,%xmm14\nvpmuludq 480(%rsp),%xmm6,%xmm6\npmuludq v19_19(%rip),%xmm1\nvpmuludq 768(%rsp),%xmm1,%xmm1\npaddq %xmm1,%xmm6\nmovdqa 544(%rsp),%xmm1\npaddq %xmm1,%xmm2\nvpunpcklqdq %xmm2,%xmm1,%xmm15\nvpunpckhqdq %xmm2,%xmm1,%xmm1\nvpmuludq 480(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 512(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 560(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 576(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 624(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 640(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 688(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 704(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm15\nvpmuludq 736(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm6\npmuludq 752(%rsp),%xmm15\npaddq %xmm15,%xmm5\nvpmuludq 480(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 528(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 560(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 592(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 624(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 656(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 688(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 720(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 736(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\npmuludq 768(%rsp),%xmm1\npaddq %xmm1,%xmm7\nmovdqa 608(%rsp),%xmm1\npaddq %xmm1,%xmm3\nvpunpcklqdq %xmm3,%xmm1,%xmm2\nvpunpckhqdq %xmm3,%xmm1,%xmm1\nvpmuludq 480(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm9\nvpmuludq 512(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm10\nvpmuludq 560(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 576(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm12\nvpmuludq 624(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 640(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 688(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 704(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 736(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm7\npmuludq 752(%rsp),%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 480(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 528(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 560(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 592(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 624(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 656(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 688(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq 720(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 736(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\npmuludq 768(%rsp),%xmm1\npaddq %xmm1,%xmm9\nmovdqa 672(%rsp),%xmm1\npaddq %xmm1,%xmm4\nvpunpcklqdq %xmm4,%xmm1,%xmm2\nvpunpckhqdq %xmm4,%xmm1,%xmm1\nvpmuludq 480(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 512(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm12\nvpmuludq 560(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 576(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 624(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 640(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 688(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 704(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 736(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm9\npmuludq 752(%rsp),%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 480(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 528(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 560(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 592(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 624(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq 656(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 688(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 720(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 736(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\npmuludq 768(%rsp),%xmm1\npaddq %xmm1,%xmm11\nmovdqa 448(%rsp),%xmm1\npaddq %xmm1,%xmm0\nvpunpcklqdq %xmm0,%xmm1,%xmm2\nvpunpckhqdq %xmm0,%xmm1,%xmm0\nvpmuludq 480(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm13\nvpmuludq 512(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 560(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm6\nvpmuludq 576(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm5\nvpmuludq 624(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm7\nvpmuludq 640(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm8\nvpmuludq 688(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm9\nvpmuludq 704(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm10\nvpmuludq 736(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm11\npmuludq 752(%rsp),%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 480(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm14\npmuludq v19_19(%rip),%xmm0\nvpmuludq 528(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm6\nvpmuludq 560(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm5\nvpmuludq 592(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm7\nvpmuludq 624(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm8\nvpmuludq 656(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm9\nvpmuludq 688(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm10\nvpmuludq 720(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm11\nvpmuludq 736(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm12\npmuludq 768(%rsp),%xmm0\npaddq %xmm0,%xmm13\nvpsrlq $26,%xmm6,%xmm0\npaddq %xmm0,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm10,%xmm0\npaddq %xmm0,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm5,%xmm0\npaddq %xmm0,%xmm7\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm11,%xmm0\npaddq %xmm0,%xmm12\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm7,%xmm0\npaddq %xmm0,%xmm8\npand m26(%rip),%xmm7\nvpsrlq $25,%xmm12,%xmm0\npaddq %xmm0,%xmm13\npand m25(%rip),%xmm12\nvpsrlq $25,%xmm8,%xmm0\npaddq %xmm0,%xmm9\npand m25(%rip),%xmm8\nvpsrlq $26,%xmm13,%xmm0\npaddq %xmm0,%xmm14\npand m26(%rip),%xmm13\nvpsrlq $26,%xmm9,%xmm0\npaddq %xmm0,%xmm10\npand m26(%rip),%xmm9\nvpsrlq $25,%xmm14,%xmm0\nvpsllq $4,%xmm0,%xmm1\npaddq %xmm0,%xmm6\npsllq $1,%xmm0\npaddq %xmm0,%xmm1\npaddq %xmm1,%xmm6\npand m25(%rip),%xmm14\nvpsrlq $25,%xmm10,%xmm0\npaddq %xmm0,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $26,%xmm6,%xmm0\npaddq %xmm0,%xmm5\npand m26(%rip),%xmm6\nvpunpckhqdq %xmm5,%xmm6,%xmm1\nvpunpcklqdq %xmm5,%xmm6,%xmm0\nvpunpckhqdq %xmm8,%xmm7,%xmm3\nvpunpcklqdq %xmm8,%xmm7,%xmm2\nvpunpckhqdq %xmm10,%xmm9,%xmm5\nvpunpcklqdq %xmm10,%xmm9,%xmm4\nvpunpckhqdq %xmm12,%xmm11,%xmm7\nvpunpcklqdq %xmm12,%xmm11,%xmm6\nvpunpckhqdq %xmm14,%xmm13,%xmm9\nvpunpcklqdq %xmm14,%xmm13,%xmm8\ncmp  $0,%rdx\njne ._ladder_loop\nmovdqu   %xmm1,160(%rdi)\nmovdqu   %xmm0,80(%rdi)\nmovdqu   %xmm3,176(%rdi)\nmovdqu   %xmm2,96(%rdi)\nmovdqu   %xmm5,192(%rdi)\nmovdqu   %xmm4,112(%rdi)\nmovdqu   %xmm7,208(%rdi)\nmovdqu   %xmm6,128(%rdi)\nmovdqu   %xmm9,224(%rdi)\nmovdqu   %xmm8,144(%rdi)\nmovq 1824(%rsp),%r11\nmovq 1832(%rsp),%r12\nmovq 1840(%rsp),%r13\nmovq 1848(%rsp),%r14\nadd %r11,%rsp\nret\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.h",
    "content": "#ifndef ladder_H\n#define ladder_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"fe.h\"\n#include \"ladder_namespace.h\"\n\nextern void ladder(fe *, const unsigned char *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif //ifndef ladder_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base.S",
    "content": "#ifdef IN_SANDY2X\n\n#include \"ladder_base_namespace.h\"\n#include \"consts_namespace.h\"\n.p2align 5\n\n.globl ladder_base\n.globl _ladder_base\n#ifdef __ELF__\n.type  ladder_base, @function\n.type _ladder_base, @function\n#endif\nladder_base:\n_ladder_base:\n\nmov %rsp,%r11\nand $31,%r11\nadd $1568,%r11\nsub %r11,%rsp\nmovq %r11,1536(%rsp)\nmovq %r12,1544(%rsp)\nmovq %r13,1552(%rsp)\nmovdqa v0_0(%rip),%xmm0\nmovdqa v1_0(%rip),%xmm1\nmovdqa v9_0(%rip),%xmm2\nmovdqa %xmm2,0(%rsp)\nmovdqa %xmm0,16(%rsp)\nmovdqa %xmm0,32(%rsp)\nmovdqa %xmm0,48(%rsp)\nmovdqa %xmm0,64(%rsp)\nmovdqa %xmm1,80(%rsp)\nmovdqa %xmm0,96(%rsp)\nmovdqa %xmm0,112(%rsp)\nmovdqa %xmm0,128(%rsp)\nmovdqa %xmm0,144(%rsp)\nmovdqa %xmm1,%xmm0\npxor %xmm1,%xmm1\npxor %xmm2,%xmm2\npxor %xmm3,%xmm3\npxor %xmm4,%xmm4\npxor %xmm5,%xmm5\npxor %xmm6,%xmm6\npxor %xmm7,%xmm7\npxor %xmm8,%xmm8\npxor %xmm9,%xmm9\nmovq   0(%rsi),%rdx\nmovq   8(%rsi),%rcx\nmovq   16(%rsi),%r8\nmovq   24(%rsi),%r9\nshrd $1,%rcx,%rdx\nshrd $1,%r8,%rcx\nshrd $1,%r9,%r8\nshr  $1,%r9\nxorq 0(%rsi),%rdx\nxorq 8(%rsi),%rcx\nxorq 16(%rsi),%r8\nxorq 24(%rsi),%r9\nleaq 512(%rsp),%rsi\nmov  $64,%rax\n._ladder_base_small_loop:\nmov  %rdx,%r10\nmov  %rcx,%r11\nmov  %r8,%r12\nmov  %r9,%r13\nshr  $1,%rdx\nshr  $1,%rcx\nshr  $1,%r8\nshr  $1,%r9\nand  $1,%r10d\nand  $1,%r11d\nand  $1,%r12d\nand  $1,%r13d\nneg  %r10\nneg  %r11\nneg  %r12\nneg  %r13\nmovl   %r10d,0(%rsi)\nmovl   %r11d,256(%rsi)\nmovl   %r12d,512(%rsi)\nmovl   %r13d,768(%rsi)\nadd  $4,%rsi\nsub  $1,%rax\njne ._ladder_base_small_loop\nmov  $255,%rdx\nadd  $760,%rsi\n._ladder_base_loop:\nsub  $1,%rdx\nvbroadcastss 0(%rsi),%xmm10\nsub  $4,%rsi\nmovdqa 0(%rsp),%xmm11\nmovdqa 80(%rsp),%xmm12\nvpxor %xmm11,%xmm0,%xmm13\npand %xmm10,%xmm13\npxor %xmm13,%xmm0\npxor %xmm13,%xmm11\nvpxor %xmm12,%xmm1,%xmm13\npand %xmm10,%xmm13\npxor %xmm13,%xmm1\npxor %xmm13,%xmm12\nmovdqa 16(%rsp),%xmm13\nmovdqa 96(%rsp),%xmm14\nvpxor %xmm13,%xmm2,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm2\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm3,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm3\npxor %xmm15,%xmm14\nmovdqa %xmm13,0(%rsp)\nmovdqa %xmm14,16(%rsp)\nmovdqa 32(%rsp),%xmm13\nmovdqa 112(%rsp),%xmm14\nvpxor %xmm13,%xmm4,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm4\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm5,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm5\npxor %xmm15,%xmm14\nmovdqa %xmm13,32(%rsp)\nmovdqa %xmm14,80(%rsp)\nmovdqa 48(%rsp),%xmm13\nmovdqa 128(%rsp),%xmm14\nvpxor %xmm13,%xmm6,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm6\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm7,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm7\npxor %xmm15,%xmm14\nmovdqa %xmm13,48(%rsp)\nmovdqa %xmm14,96(%rsp)\nmovdqa 64(%rsp),%xmm13\nmovdqa 144(%rsp),%xmm14\nvpxor %xmm13,%xmm8,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm8\npxor %xmm15,%xmm13\nvpxor %xmm14,%xmm9,%xmm15\npand %xmm10,%xmm15\npxor %xmm15,%xmm9\npxor %xmm15,%xmm14\nmovdqa %xmm13,64(%rsp)\nmovdqa %xmm14,112(%rsp)\nvpaddq subc0(%rip),%xmm11,%xmm10\npsubq %xmm12,%xmm10\npaddq %xmm12,%xmm11\nvpunpckhqdq %xmm10,%xmm11,%xmm12\nvpunpcklqdq %xmm10,%xmm11,%xmm10\nvpaddq %xmm1,%xmm0,%xmm11\npaddq subc0(%rip),%xmm0\npsubq %xmm1,%xmm0\nvpunpckhqdq %xmm11,%xmm0,%xmm1\nvpunpcklqdq %xmm11,%xmm0,%xmm0\nvpmuludq %xmm0,%xmm10,%xmm11\nvpmuludq %xmm1,%xmm10,%xmm13\nmovdqa %xmm1,128(%rsp)\npaddq %xmm1,%xmm1\nvpmuludq %xmm0,%xmm12,%xmm14\nmovdqa %xmm0,144(%rsp)\npaddq %xmm14,%xmm13\nvpmuludq %xmm1,%xmm12,%xmm0\nmovdqa %xmm1,160(%rsp)\nvpaddq %xmm3,%xmm2,%xmm1\npaddq subc2(%rip),%xmm2\npsubq %xmm3,%xmm2\nvpunpckhqdq %xmm1,%xmm2,%xmm3\nvpunpcklqdq %xmm1,%xmm2,%xmm1\nvpmuludq %xmm1,%xmm10,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq %xmm3,%xmm10,%xmm2\nmovdqa %xmm3,176(%rsp)\npaddq %xmm3,%xmm3\nvpmuludq %xmm1,%xmm12,%xmm14\nmovdqa %xmm1,192(%rsp)\npaddq %xmm14,%xmm2\nvpmuludq %xmm3,%xmm12,%xmm1\nmovdqa %xmm3,208(%rsp)\nvpaddq %xmm5,%xmm4,%xmm3\npaddq subc2(%rip),%xmm4\npsubq %xmm5,%xmm4\nvpunpckhqdq %xmm3,%xmm4,%xmm5\nvpunpcklqdq %xmm3,%xmm4,%xmm3\nvpmuludq %xmm3,%xmm10,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq %xmm5,%xmm10,%xmm4\nmovdqa %xmm5,224(%rsp)\npaddq %xmm5,%xmm5\nvpmuludq %xmm3,%xmm12,%xmm14\nmovdqa %xmm3,240(%rsp)\npaddq %xmm14,%xmm4\nvpaddq %xmm7,%xmm6,%xmm3\npaddq subc2(%rip),%xmm6\npsubq %xmm7,%xmm6\nvpunpckhqdq %xmm3,%xmm6,%xmm7\nvpunpcklqdq %xmm3,%xmm6,%xmm3\nvpmuludq %xmm3,%xmm10,%xmm6\nvpmuludq %xmm5,%xmm12,%xmm14\nmovdqa %xmm5,256(%rsp)\npmuludq v19_19(%rip),%xmm5\nmovdqa %xmm5,272(%rsp)\npaddq %xmm14,%xmm6\nvpmuludq %xmm7,%xmm10,%xmm5\nmovdqa %xmm7,288(%rsp)\npaddq %xmm7,%xmm7\nvpmuludq %xmm3,%xmm12,%xmm14\nmovdqa %xmm3,304(%rsp)\npaddq %xmm14,%xmm5\npmuludq v19_19(%rip),%xmm3\nmovdqa %xmm3,320(%rsp)\nvpaddq %xmm9,%xmm8,%xmm3\npaddq subc2(%rip),%xmm8\npsubq %xmm9,%xmm8\nvpunpckhqdq %xmm3,%xmm8,%xmm9\nvpunpcklqdq %xmm3,%xmm8,%xmm3\nmovdqa %xmm3,336(%rsp)\nvpmuludq %xmm7,%xmm12,%xmm8\nmovdqa %xmm7,352(%rsp)\npmuludq v19_19(%rip),%xmm7\nmovdqa %xmm7,368(%rsp)\nvpmuludq %xmm3,%xmm10,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq %xmm9,%xmm10,%xmm7\nmovdqa %xmm9,384(%rsp)\npaddq %xmm9,%xmm9\nvpmuludq %xmm3,%xmm12,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nmovdqa %xmm3,400(%rsp)\npmuludq v19_19(%rip),%xmm12\nvpmuludq %xmm9,%xmm12,%xmm3\nmovdqa %xmm9,416(%rsp)\npaddq %xmm3,%xmm11\nmovdqa 0(%rsp),%xmm3\nmovdqa 16(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 192(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 176(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 240(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 224(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 304(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 288(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 336(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\npmuludq 384(%rsp),%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 160(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 192(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 208(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 240(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 256(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 304(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 352(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 336(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\npmuludq 416(%rsp),%xmm9\npaddq %xmm9,%xmm0\nmovdqa 32(%rsp),%xmm3\nmovdqa 80(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 192(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 176(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 240(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 224(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 304(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 288(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 336(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\npmuludq 384(%rsp),%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 160(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 192(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 208(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 240(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 256(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 304(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 352(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 336(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\npmuludq 416(%rsp),%xmm9\npaddq %xmm9,%xmm1\nmovdqa 48(%rsp),%xmm3\nmovdqa 96(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm5\nvpmuludq 192(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 176(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 240(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 224(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 304(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 288(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 336(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\npmuludq 384(%rsp),%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 160(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 192(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 208(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 240(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 256(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 304(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 352(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 336(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\npmuludq 416(%rsp),%xmm9\npaddq %xmm9,%xmm6\nmovdqa 64(%rsp),%xmm3\nmovdqa 112(%rsp),%xmm9\nvpaddq subc2(%rip),%xmm3,%xmm10\npsubq %xmm9,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm10,%xmm3,%xmm9\nvpunpcklqdq %xmm10,%xmm3,%xmm3\nvpmuludq 144(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm8\nvpmuludq 128(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm7\npmuludq v19_19(%rip),%xmm3\nvpmuludq 192(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm11\nvpmuludq 176(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm13\nvpmuludq 240(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm0\nvpmuludq 224(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm2\nvpmuludq 304(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm1\nvpmuludq 288(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm4\nvpmuludq 336(%rsp),%xmm3,%xmm10\npaddq %xmm10,%xmm6\npmuludq 384(%rsp),%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 144(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm7\npmuludq v19_19(%rip),%xmm9\nvpmuludq 160(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 192(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 208(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm0\nvpmuludq 240(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm2\nvpmuludq 256(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm1\nvpmuludq 304(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm4\nvpmuludq 352(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 336(%rsp),%xmm9,%xmm3\npaddq %xmm3,%xmm5\npmuludq 416(%rsp),%xmm9\npaddq %xmm9,%xmm8\nvpsrlq $25,%xmm4,%xmm3\npaddq %xmm3,%xmm6\npand m25(%rip),%xmm4\nvpsrlq $26,%xmm11,%xmm3\npaddq %xmm3,%xmm13\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm6,%xmm3\npaddq %xmm3,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm13,%xmm3\npaddq %xmm3,%xmm0\npand m25(%rip),%xmm13\nvpsrlq $25,%xmm5,%xmm3\npaddq %xmm3,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm0,%xmm3\npaddq %xmm3,%xmm2\npand m26(%rip),%xmm0\nvpsrlq $26,%xmm8,%xmm3\npaddq %xmm3,%xmm7\npand m26(%rip),%xmm8\nvpsrlq $25,%xmm2,%xmm3\npaddq %xmm3,%xmm1\npand m25(%rip),%xmm2\nvpsrlq $25,%xmm7,%xmm3\nvpsllq $4,%xmm3,%xmm9\npaddq %xmm3,%xmm11\npsllq $1,%xmm3\npaddq %xmm3,%xmm9\npaddq %xmm9,%xmm11\npand m25(%rip),%xmm7\nvpsrlq $26,%xmm1,%xmm3\npaddq %xmm3,%xmm4\npand m26(%rip),%xmm1\nvpsrlq $26,%xmm11,%xmm3\npaddq %xmm3,%xmm13\npand m26(%rip),%xmm11\nvpsrlq $25,%xmm4,%xmm3\npaddq %xmm3,%xmm6\npand m25(%rip),%xmm4\nvpunpcklqdq %xmm13,%xmm11,%xmm3\nvpunpckhqdq %xmm13,%xmm11,%xmm9\nvpaddq subc0(%rip),%xmm9,%xmm10\npsubq %xmm3,%xmm10\npaddq %xmm9,%xmm3\nvpunpckhqdq %xmm3,%xmm10,%xmm9\npunpcklqdq %xmm3,%xmm10\nvpmuludq %xmm10,%xmm10,%xmm3\npaddq %xmm10,%xmm10\nvpmuludq %xmm9,%xmm10,%xmm11\nvpunpcklqdq %xmm2,%xmm0,%xmm12\nvpunpckhqdq %xmm2,%xmm0,%xmm0\nvpaddq subc2(%rip),%xmm0,%xmm2\npsubq %xmm12,%xmm2\npaddq %xmm0,%xmm12\nvpunpckhqdq %xmm12,%xmm2,%xmm0\npunpcklqdq %xmm12,%xmm2\nvpmuludq %xmm2,%xmm10,%xmm12\nvpaddq %xmm9,%xmm9,%xmm13\nvpmuludq %xmm13,%xmm9,%xmm9\npaddq %xmm9,%xmm12\nvpmuludq %xmm0,%xmm10,%xmm9\nvpmuludq %xmm2,%xmm13,%xmm14\npaddq %xmm14,%xmm9\nvpunpcklqdq %xmm4,%xmm1,%xmm14\nvpunpckhqdq %xmm4,%xmm1,%xmm1\nvpaddq subc2(%rip),%xmm1,%xmm4\npsubq %xmm14,%xmm4\npaddq %xmm1,%xmm14\nvpunpckhqdq %xmm14,%xmm4,%xmm1\npunpcklqdq %xmm14,%xmm4\nmovdqa %xmm1,0(%rsp)\npaddq %xmm1,%xmm1\nmovdqa %xmm1,16(%rsp)\npmuludq v19_19(%rip),%xmm1\nmovdqa %xmm1,32(%rsp)\nvpmuludq %xmm4,%xmm10,%xmm1\nvpmuludq %xmm2,%xmm2,%xmm14\npaddq %xmm14,%xmm1\nvpmuludq 0(%rsp),%xmm10,%xmm14\nvpmuludq %xmm4,%xmm13,%xmm15\npaddq %xmm15,%xmm14\nvpunpcklqdq %xmm5,%xmm6,%xmm15\nvpunpckhqdq %xmm5,%xmm6,%xmm5\nvpaddq subc2(%rip),%xmm5,%xmm6\npsubq %xmm15,%xmm6\npaddq %xmm5,%xmm15\nvpunpckhqdq %xmm15,%xmm6,%xmm5\npunpcklqdq %xmm15,%xmm6\nmovdqa %xmm6,48(%rsp)\npmuludq v19_19(%rip),%xmm6\nmovdqa %xmm6,64(%rsp)\nmovdqa %xmm5,80(%rsp)\npmuludq v38_38(%rip),%xmm5\nmovdqa %xmm5,96(%rsp)\nvpmuludq 48(%rsp),%xmm10,%xmm5\nvpaddq %xmm0,%xmm0,%xmm6\nvpmuludq %xmm6,%xmm0,%xmm0\npaddq %xmm0,%xmm5\nvpmuludq 80(%rsp),%xmm10,%xmm0\nvpmuludq %xmm4,%xmm6,%xmm15\npaddq %xmm15,%xmm0\nvpmuludq %xmm6,%xmm13,%xmm15\npaddq %xmm15,%xmm1\nvpmuludq %xmm6,%xmm2,%xmm15\npaddq %xmm15,%xmm14\nvpunpcklqdq %xmm7,%xmm8,%xmm15\nvpunpckhqdq %xmm7,%xmm8,%xmm7\nvpaddq subc2(%rip),%xmm7,%xmm8\npsubq %xmm15,%xmm8\npaddq %xmm7,%xmm15\nvpunpckhqdq %xmm15,%xmm8,%xmm7\npunpcklqdq %xmm15,%xmm8\nmovdqa %xmm8,112(%rsp)\npmuludq v19_19(%rip),%xmm8\nmovdqa %xmm8,160(%rsp)\nvpmuludq 112(%rsp),%xmm10,%xmm8\nvpmuludq %xmm7,%xmm10,%xmm10\nvpmuludq v38_38(%rip),%xmm7,%xmm15\nvpmuludq %xmm15,%xmm7,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq %xmm15,%xmm13,%xmm7\npaddq %xmm7,%xmm3\nvpmuludq %xmm15,%xmm2,%xmm7\npaddq %xmm7,%xmm11\nvpmuludq 80(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq 16(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 48(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm0\nvpmuludq 112(%rsp),%xmm13,%xmm7\npaddq %xmm7,%xmm10\nvpmuludq %xmm15,%xmm6,%xmm7\npaddq %xmm7,%xmm12\nvpmuludq %xmm15,%xmm4,%xmm7\npaddq %xmm7,%xmm9\nvpaddq %xmm2,%xmm2,%xmm2\nvpmuludq %xmm4,%xmm2,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 160(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm3\nvpmuludq 160(%rsp),%xmm6,%xmm7\npaddq %xmm7,%xmm11\nvpmuludq 0(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm0\nvpmuludq 48(%rsp),%xmm2,%xmm7\npaddq %xmm7,%xmm8\nvpmuludq 80(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 96(%rsp),%xmm4,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq %xmm4,%xmm4,%xmm2\npaddq %xmm2,%xmm8\nvpaddq %xmm4,%xmm4,%xmm2\nvpmuludq 160(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm12\nvpmuludq 16(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq 48(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm14\nvpmuludq 96(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm3\nmovdqa 16(%rsp),%xmm4\npmuludq 160(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 16(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm8\nvpmuludq 48(%rsp),%xmm6,%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 80(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm4\npaddq %xmm4,%xmm5\nvpmuludq 112(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm0\nmovdqa 48(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 160(%rsp),%xmm4\npaddq %xmm4,%xmm1\nmovdqa 80(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 160(%rsp),%xmm4\npaddq %xmm4,%xmm14\nvpmuludq 64(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm3\nmovdqa 16(%rsp),%xmm4\npmuludq 64(%rsp),%xmm4\npaddq %xmm4,%xmm11\nmovdqa 16(%rsp),%xmm4\npmuludq 96(%rsp),%xmm4\npaddq %xmm4,%xmm12\nmovdqa 48(%rsp),%xmm4\npmuludq 96(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 0(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm10\nmovdqa 32(%rsp),%xmm2\npmuludq 0(%rsp),%xmm2\npaddq %xmm2,%xmm3\nmovdqa 64(%rsp),%xmm2\npmuludq 48(%rsp),%xmm2\npaddq %xmm2,%xmm12\nmovdqa 96(%rsp),%xmm2\npmuludq 80(%rsp),%xmm2\npaddq %xmm2,%xmm1\nmovdqa 160(%rsp),%xmm2\npmuludq 112(%rsp),%xmm2\npaddq %xmm2,%xmm5\nvpsrlq $26,%xmm3,%xmm2\npaddq %xmm2,%xmm11\npand m26(%rip),%xmm3\nvpsrlq $25,%xmm14,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm14\nvpsrlq $25,%xmm11,%xmm2\npaddq %xmm2,%xmm12\npand m25(%rip),%xmm11\nvpsrlq $26,%xmm5,%xmm2\npaddq %xmm2,%xmm0\npand m26(%rip),%xmm5\nvpsrlq $26,%xmm12,%xmm2\npaddq %xmm2,%xmm9\npand m26(%rip),%xmm12\nvpsrlq $25,%xmm0,%xmm2\npaddq %xmm2,%xmm8\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm9,%xmm2\npaddq %xmm2,%xmm1\npand m25(%rip),%xmm9\nvpsrlq $26,%xmm8,%xmm2\npaddq %xmm2,%xmm10\npand m26(%rip),%xmm8\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm14\npand m26(%rip),%xmm1\nvpsrlq $25,%xmm10,%xmm2\nvpsllq $4,%xmm2,%xmm4\npaddq %xmm2,%xmm3\npsllq $1,%xmm2\npaddq %xmm2,%xmm4\npaddq %xmm4,%xmm3\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm14,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm14\nvpsrlq $26,%xmm3,%xmm2\npaddq %xmm2,%xmm11\npand m26(%rip),%xmm3\nvpunpckhqdq %xmm11,%xmm3,%xmm2\nmovdqa %xmm2,0(%rsp)\nvpunpcklqdq %xmm11,%xmm3,%xmm2\npmuludq v9_9(%rip),%xmm2\nmovdqa %xmm2,80(%rsp)\nvpunpckhqdq %xmm9,%xmm12,%xmm2\nmovdqa %xmm2,16(%rsp)\nvpunpcklqdq %xmm9,%xmm12,%xmm2\npmuludq v9_9(%rip),%xmm2\nmovdqa %xmm2,96(%rsp)\nvpunpckhqdq %xmm14,%xmm1,%xmm2\nmovdqa %xmm2,32(%rsp)\nvpunpcklqdq %xmm14,%xmm1,%xmm1\npmuludq v9_9(%rip),%xmm1\nmovdqa %xmm1,112(%rsp)\nvpunpckhqdq %xmm0,%xmm5,%xmm1\nmovdqa %xmm1,48(%rsp)\nvpunpcklqdq %xmm0,%xmm5,%xmm0\npmuludq v9_9(%rip),%xmm0\nmovdqa %xmm0,160(%rsp)\nvpunpckhqdq %xmm10,%xmm8,%xmm0\nmovdqa %xmm0,64(%rsp)\nvpunpcklqdq %xmm10,%xmm8,%xmm0\npmuludq v9_9(%rip),%xmm0\nmovdqa %xmm0,208(%rsp)\nmovdqa 144(%rsp),%xmm0\nvpmuludq %xmm0,%xmm0,%xmm1\npaddq %xmm0,%xmm0\nmovdqa 128(%rsp),%xmm2\nvpmuludq %xmm2,%xmm0,%xmm3\nmovdqa 192(%rsp),%xmm4\nvpmuludq %xmm4,%xmm0,%xmm5\nmovdqa 176(%rsp),%xmm6\nvpmuludq %xmm6,%xmm0,%xmm7\nmovdqa 240(%rsp),%xmm8\nvpmuludq %xmm8,%xmm0,%xmm9\nvpmuludq 224(%rsp),%xmm0,%xmm10\nvpmuludq 304(%rsp),%xmm0,%xmm11\nvpmuludq 288(%rsp),%xmm0,%xmm12\nvpmuludq 336(%rsp),%xmm0,%xmm13\nmovdqa 384(%rsp),%xmm14\nvpmuludq %xmm14,%xmm0,%xmm0\nvpmuludq v38_38(%rip),%xmm14,%xmm15\nvpmuludq %xmm15,%xmm14,%xmm14\npaddq %xmm14,%xmm13\nvpaddq %xmm6,%xmm6,%xmm14\nvpmuludq %xmm14,%xmm6,%xmm6\npaddq %xmm6,%xmm11\nvpaddq %xmm2,%xmm2,%xmm6\nvpmuludq %xmm6,%xmm2,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq %xmm15,%xmm6,%xmm2\npaddq %xmm2,%xmm1\nvpmuludq %xmm15,%xmm4,%xmm2\npaddq %xmm2,%xmm3\nvpmuludq 256(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 304(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 352(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 336(%rsp),%xmm6,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq %xmm4,%xmm6,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq %xmm14,%xmm6,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq %xmm8,%xmm6,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq %xmm15,%xmm14,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq %xmm15,%xmm8,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq %xmm4,%xmm4,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq %xmm14,%xmm4,%xmm2\npaddq %xmm2,%xmm10\nvpaddq %xmm4,%xmm4,%xmm2\nvpmuludq %xmm8,%xmm2,%xmm4\npaddq %xmm4,%xmm11\nvpmuludq 400(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm1\nvpmuludq 400(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm3\nvpmuludq 224(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm12\nvpmuludq 304(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm13\nvpmuludq 288(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm0\nvpmuludq 368(%rsp),%xmm8,%xmm2\npaddq %xmm2,%xmm3\nvpmuludq %xmm8,%xmm14,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq %xmm8,%xmm8,%xmm2\npaddq %xmm2,%xmm13\nvpaddq %xmm8,%xmm8,%xmm2\nvpmuludq 400(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm5\nvpmuludq 256(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 304(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 368(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm1\nmovdqa 256(%rsp),%xmm4\npmuludq 400(%rsp),%xmm4\npaddq %xmm4,%xmm7\nvpmuludq 256(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm13\nvpmuludq 304(%rsp),%xmm14,%xmm4\npaddq %xmm4,%xmm0\nvpmuludq 352(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm11\nvpmuludq 336(%rsp),%xmm15,%xmm4\npaddq %xmm4,%xmm12\nmovdqa 304(%rsp),%xmm4\npaddq %xmm4,%xmm4\npmuludq 400(%rsp),%xmm4\npaddq %xmm4,%xmm9\nvpmuludq 320(%rsp),%xmm2,%xmm4\npaddq %xmm4,%xmm1\nmovdqa 256(%rsp),%xmm4\npmuludq 320(%rsp),%xmm4\npaddq %xmm4,%xmm3\nmovdqa 256(%rsp),%xmm4\npmuludq 368(%rsp),%xmm4\npaddq %xmm4,%xmm5\nmovdqa 304(%rsp),%xmm4\npmuludq 368(%rsp),%xmm4\npaddq %xmm4,%xmm7\nmovdqa 352(%rsp),%xmm4\npmuludq 400(%rsp),%xmm4\npaddq %xmm4,%xmm10\nvpmuludq 224(%rsp),%xmm2,%xmm2\npaddq %xmm2,%xmm0\nmovdqa 272(%rsp),%xmm2\npmuludq 224(%rsp),%xmm2\npaddq %xmm2,%xmm1\nmovdqa 320(%rsp),%xmm2\npmuludq 304(%rsp),%xmm2\npaddq %xmm2,%xmm5\nmovdqa 368(%rsp),%xmm2\npmuludq 288(%rsp),%xmm2\npaddq %xmm2,%xmm9\nmovdqa 400(%rsp),%xmm2\npmuludq 336(%rsp),%xmm2\npaddq %xmm2,%xmm11\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm3\npand m26(%rip),%xmm1\nvpsrlq $25,%xmm10,%xmm2\npaddq %xmm2,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm3,%xmm2\npaddq %xmm2,%xmm5\npand m25(%rip),%xmm3\nvpsrlq $26,%xmm11,%xmm2\npaddq %xmm2,%xmm12\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm5,%xmm2\npaddq %xmm2,%xmm7\npand m26(%rip),%xmm5\nvpsrlq $25,%xmm12,%xmm2\npaddq %xmm2,%xmm13\npand m25(%rip),%xmm12\nvpsrlq $25,%xmm7,%xmm2\npaddq %xmm2,%xmm9\npand m25(%rip),%xmm7\nvpsrlq $26,%xmm13,%xmm2\npaddq %xmm2,%xmm0\npand m26(%rip),%xmm13\nvpsrlq $26,%xmm9,%xmm2\npaddq %xmm2,%xmm10\npand m26(%rip),%xmm9\nvpsrlq $25,%xmm0,%xmm2\nvpsllq $4,%xmm2,%xmm4\npaddq %xmm2,%xmm1\npsllq $1,%xmm2\npaddq %xmm2,%xmm4\npaddq %xmm4,%xmm1\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm10,%xmm2\npaddq %xmm2,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $26,%xmm1,%xmm2\npaddq %xmm2,%xmm3\npand m26(%rip),%xmm1\nvpunpckhqdq %xmm3,%xmm1,%xmm2\nvpunpcklqdq %xmm3,%xmm1,%xmm1\nmovdqa %xmm1,176(%rsp)\nvpaddq subc0(%rip),%xmm2,%xmm3\npsubq %xmm1,%xmm3\nvpunpckhqdq %xmm3,%xmm2,%xmm1\nvpunpcklqdq %xmm3,%xmm2,%xmm2\nmovdqa %xmm2,192(%rsp)\nmovdqa %xmm1,224(%rsp)\npsllq $1,%xmm1\nmovdqa %xmm1,240(%rsp)\npmuludq v121666_121666(%rip),%xmm3\nmovdqa 80(%rsp),%xmm1\nvpunpcklqdq %xmm1,%xmm3,%xmm2\nvpunpckhqdq %xmm1,%xmm3,%xmm1\nvpunpckhqdq %xmm7,%xmm5,%xmm3\nvpunpcklqdq %xmm7,%xmm5,%xmm4\nmovdqa %xmm4,256(%rsp)\nvpaddq subc2(%rip),%xmm3,%xmm5\npsubq %xmm4,%xmm5\nvpunpckhqdq %xmm5,%xmm3,%xmm4\nvpunpcklqdq %xmm5,%xmm3,%xmm3\nmovdqa %xmm3,272(%rsp)\nmovdqa %xmm4,288(%rsp)\npsllq $1,%xmm4\nmovdqa %xmm4,304(%rsp)\npmuludq v121666_121666(%rip),%xmm5\nmovdqa 96(%rsp),%xmm3\nvpunpcklqdq %xmm3,%xmm5,%xmm4\nvpunpckhqdq %xmm3,%xmm5,%xmm3\nvpunpckhqdq %xmm10,%xmm9,%xmm5\nvpunpcklqdq %xmm10,%xmm9,%xmm6\nmovdqa %xmm6,320(%rsp)\nvpaddq subc2(%rip),%xmm5,%xmm7\npsubq %xmm6,%xmm7\nvpunpckhqdq %xmm7,%xmm5,%xmm6\nvpunpcklqdq %xmm7,%xmm5,%xmm5\nmovdqa %xmm5,336(%rsp)\nmovdqa %xmm6,352(%rsp)\npsllq $1,%xmm6\nmovdqa %xmm6,368(%rsp)\npmuludq v121666_121666(%rip),%xmm7\nmovdqa 112(%rsp),%xmm5\nvpunpcklqdq %xmm5,%xmm7,%xmm6\nvpunpckhqdq %xmm5,%xmm7,%xmm5\nvpunpckhqdq %xmm12,%xmm11,%xmm7\nvpunpcklqdq %xmm12,%xmm11,%xmm8\nmovdqa %xmm8,384(%rsp)\nvpaddq subc2(%rip),%xmm7,%xmm9\npsubq %xmm8,%xmm9\nvpunpckhqdq %xmm9,%xmm7,%xmm8\nvpunpcklqdq %xmm9,%xmm7,%xmm7\nmovdqa %xmm7,400(%rsp)\nmovdqa %xmm8,416(%rsp)\npsllq $1,%xmm8\nmovdqa %xmm8,432(%rsp)\npmuludq v121666_121666(%rip),%xmm9\nmovdqa 160(%rsp),%xmm7\nvpunpcklqdq %xmm7,%xmm9,%xmm8\nvpunpckhqdq %xmm7,%xmm9,%xmm7\nvpunpckhqdq %xmm0,%xmm13,%xmm9\nvpunpcklqdq %xmm0,%xmm13,%xmm0\nmovdqa %xmm0,160(%rsp)\nvpaddq subc2(%rip),%xmm9,%xmm10\npsubq %xmm0,%xmm10\nvpunpckhqdq %xmm10,%xmm9,%xmm0\nvpunpcklqdq %xmm10,%xmm9,%xmm9\nmovdqa %xmm9,448(%rsp)\nmovdqa %xmm0,464(%rsp)\npsllq $1,%xmm0\nmovdqa %xmm0,480(%rsp)\npmuludq v121666_121666(%rip),%xmm10\nmovdqa 208(%rsp),%xmm0\nvpunpcklqdq %xmm0,%xmm10,%xmm9\nvpunpckhqdq %xmm0,%xmm10,%xmm0\nvpsrlq $26,%xmm2,%xmm10\npaddq %xmm10,%xmm1\npand m26(%rip),%xmm2\nvpsrlq $25,%xmm5,%xmm10\npaddq %xmm10,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $25,%xmm1,%xmm10\npaddq %xmm10,%xmm4\npand m25(%rip),%xmm1\nvpsrlq $26,%xmm8,%xmm10\npaddq %xmm10,%xmm7\npand m26(%rip),%xmm8\nvpsrlq $26,%xmm4,%xmm10\npaddq %xmm10,%xmm3\npand m26(%rip),%xmm4\nvpsrlq $25,%xmm7,%xmm10\npaddq %xmm10,%xmm9\npand m25(%rip),%xmm7\nvpsrlq $25,%xmm3,%xmm10\npaddq %xmm10,%xmm6\npand m25(%rip),%xmm3\nvpsrlq $26,%xmm9,%xmm10\npaddq %xmm10,%xmm0\npand m26(%rip),%xmm9\nvpsrlq $26,%xmm6,%xmm10\npaddq %xmm10,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm0,%xmm10\nvpsllq $4,%xmm10,%xmm11\npaddq %xmm10,%xmm2\npsllq $1,%xmm10\npaddq %xmm10,%xmm11\npaddq %xmm11,%xmm2\npand m25(%rip),%xmm0\nvpsrlq $25,%xmm5,%xmm10\npaddq %xmm10,%xmm8\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm2,%xmm10\npaddq %xmm10,%xmm1\npand m26(%rip),%xmm2\nvpunpckhqdq %xmm1,%xmm2,%xmm10\nmovdqa %xmm10,80(%rsp)\nvpunpcklqdq %xmm1,%xmm2,%xmm1\nvpunpckhqdq %xmm3,%xmm4,%xmm2\nmovdqa %xmm2,96(%rsp)\nvpunpcklqdq %xmm3,%xmm4,%xmm2\nvpunpckhqdq %xmm5,%xmm6,%xmm3\nmovdqa %xmm3,112(%rsp)\nvpunpcklqdq %xmm5,%xmm6,%xmm3\nvpunpckhqdq %xmm7,%xmm8,%xmm4\nmovdqa %xmm4,128(%rsp)\nvpunpcklqdq %xmm7,%xmm8,%xmm4\nvpunpckhqdq %xmm0,%xmm9,%xmm5\nmovdqa %xmm5,144(%rsp)\nvpunpcklqdq %xmm0,%xmm9,%xmm0\nmovdqa 176(%rsp),%xmm5\npaddq %xmm5,%xmm1\nvpunpcklqdq %xmm1,%xmm5,%xmm6\nvpunpckhqdq %xmm1,%xmm5,%xmm1\nvpmuludq 224(%rsp),%xmm6,%xmm5\nvpmuludq 192(%rsp),%xmm1,%xmm7\npaddq %xmm7,%xmm5\nvpmuludq 272(%rsp),%xmm6,%xmm7\nvpmuludq 240(%rsp),%xmm1,%xmm8\npaddq %xmm8,%xmm7\nvpmuludq 288(%rsp),%xmm6,%xmm8\nvpmuludq 272(%rsp),%xmm1,%xmm9\npaddq %xmm9,%xmm8\nvpmuludq 336(%rsp),%xmm6,%xmm9\nvpmuludq 304(%rsp),%xmm1,%xmm10\npaddq %xmm10,%xmm9\nvpmuludq 352(%rsp),%xmm6,%xmm10\nvpmuludq 336(%rsp),%xmm1,%xmm11\npaddq %xmm11,%xmm10\nvpmuludq 400(%rsp),%xmm6,%xmm11\nvpmuludq 368(%rsp),%xmm1,%xmm12\npaddq %xmm12,%xmm11\nvpmuludq 416(%rsp),%xmm6,%xmm12\nvpmuludq 400(%rsp),%xmm1,%xmm13\npaddq %xmm13,%xmm12\nvpmuludq 448(%rsp),%xmm6,%xmm13\nvpmuludq 432(%rsp),%xmm1,%xmm14\npaddq %xmm14,%xmm13\nvpmuludq 464(%rsp),%xmm6,%xmm14\nvpmuludq 448(%rsp),%xmm1,%xmm15\npaddq %xmm15,%xmm14\nvpmuludq 192(%rsp),%xmm6,%xmm6\npmuludq v19_19(%rip),%xmm1\nvpmuludq 480(%rsp),%xmm1,%xmm1\npaddq %xmm1,%xmm6\nmovdqa 256(%rsp),%xmm1\npaddq %xmm1,%xmm2\nvpunpcklqdq %xmm2,%xmm1,%xmm15\nvpunpckhqdq %xmm2,%xmm1,%xmm1\nvpmuludq 192(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 224(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 272(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 288(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 336(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 352(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 400(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 416(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm15\nvpmuludq 448(%rsp),%xmm15,%xmm2\npaddq %xmm2,%xmm6\npmuludq 464(%rsp),%xmm15\npaddq %xmm15,%xmm5\nvpmuludq 192(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 240(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 272(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 304(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 336(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 368(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 400(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 432(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 448(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\npmuludq 480(%rsp),%xmm1\npaddq %xmm1,%xmm7\nmovdqa 320(%rsp),%xmm1\npaddq %xmm1,%xmm3\nvpunpcklqdq %xmm3,%xmm1,%xmm2\nvpunpckhqdq %xmm3,%xmm1,%xmm1\nvpmuludq 192(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm9\nvpmuludq 224(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm10\nvpmuludq 272(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 288(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm12\nvpmuludq 336(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 352(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 400(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 416(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 448(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm7\npmuludq 464(%rsp),%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 192(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 240(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm11\nvpmuludq 272(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 304(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 336(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 368(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 400(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq 432(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 448(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\npmuludq 480(%rsp),%xmm1\npaddq %xmm1,%xmm9\nmovdqa 384(%rsp),%xmm1\npaddq %xmm1,%xmm4\nvpunpcklqdq %xmm4,%xmm1,%xmm2\nvpunpckhqdq %xmm4,%xmm1,%xmm1\nvpmuludq 192(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm11\nvpmuludq 224(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm12\nvpmuludq 272(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm13\nvpmuludq 288(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 336(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm6\nvpmuludq 352(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm5\nvpmuludq 400(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm7\nvpmuludq 416(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm8\nvpmuludq 448(%rsp),%xmm2,%xmm3\npaddq %xmm3,%xmm9\npmuludq 464(%rsp),%xmm2\npaddq %xmm2,%xmm10\nvpmuludq 192(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 240(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm13\nvpmuludq 272(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm14\npmuludq v19_19(%rip),%xmm1\nvpmuludq 304(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm6\nvpmuludq 336(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm5\nvpmuludq 368(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm7\nvpmuludq 400(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm8\nvpmuludq 432(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm9\nvpmuludq 448(%rsp),%xmm1,%xmm2\npaddq %xmm2,%xmm10\npmuludq 480(%rsp),%xmm1\npaddq %xmm1,%xmm11\nmovdqa 160(%rsp),%xmm1\npaddq %xmm1,%xmm0\nvpunpcklqdq %xmm0,%xmm1,%xmm2\nvpunpckhqdq %xmm0,%xmm1,%xmm0\nvpmuludq 192(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm13\nvpmuludq 224(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm14\npmuludq v19_19(%rip),%xmm2\nvpmuludq 272(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm6\nvpmuludq 288(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm5\nvpmuludq 336(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm7\nvpmuludq 352(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm8\nvpmuludq 400(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm9\nvpmuludq 416(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm10\nvpmuludq 448(%rsp),%xmm2,%xmm1\npaddq %xmm1,%xmm11\npmuludq 464(%rsp),%xmm2\npaddq %xmm2,%xmm12\nvpmuludq 192(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm14\npmuludq v19_19(%rip),%xmm0\nvpmuludq 240(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm6\nvpmuludq 272(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm5\nvpmuludq 304(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm7\nvpmuludq 336(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm8\nvpmuludq 368(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm9\nvpmuludq 400(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm10\nvpmuludq 432(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm11\nvpmuludq 448(%rsp),%xmm0,%xmm1\npaddq %xmm1,%xmm12\npmuludq 480(%rsp),%xmm0\npaddq %xmm0,%xmm13\nvpsrlq $26,%xmm6,%xmm0\npaddq %xmm0,%xmm5\npand m26(%rip),%xmm6\nvpsrlq $25,%xmm10,%xmm0\npaddq %xmm0,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $25,%xmm5,%xmm0\npaddq %xmm0,%xmm7\npand m25(%rip),%xmm5\nvpsrlq $26,%xmm11,%xmm0\npaddq %xmm0,%xmm12\npand m26(%rip),%xmm11\nvpsrlq $26,%xmm7,%xmm0\npaddq %xmm0,%xmm8\npand m26(%rip),%xmm7\nvpsrlq $25,%xmm12,%xmm0\npaddq %xmm0,%xmm13\npand m25(%rip),%xmm12\nvpsrlq $25,%xmm8,%xmm0\npaddq %xmm0,%xmm9\npand m25(%rip),%xmm8\nvpsrlq $26,%xmm13,%xmm0\npaddq %xmm0,%xmm14\npand m26(%rip),%xmm13\nvpsrlq $26,%xmm9,%xmm0\npaddq %xmm0,%xmm10\npand m26(%rip),%xmm9\nvpsrlq $25,%xmm14,%xmm0\nvpsllq $4,%xmm0,%xmm1\npaddq %xmm0,%xmm6\npsllq $1,%xmm0\npaddq %xmm0,%xmm1\npaddq %xmm1,%xmm6\npand m25(%rip),%xmm14\nvpsrlq $25,%xmm10,%xmm0\npaddq %xmm0,%xmm11\npand m25(%rip),%xmm10\nvpsrlq $26,%xmm6,%xmm0\npaddq %xmm0,%xmm5\npand m26(%rip),%xmm6\nvpunpckhqdq %xmm5,%xmm6,%xmm1\nvpunpcklqdq %xmm5,%xmm6,%xmm0\nvpunpckhqdq %xmm8,%xmm7,%xmm3\nvpunpcklqdq %xmm8,%xmm7,%xmm2\nvpunpckhqdq %xmm10,%xmm9,%xmm5\nvpunpcklqdq %xmm10,%xmm9,%xmm4\nvpunpckhqdq %xmm12,%xmm11,%xmm7\nvpunpcklqdq %xmm12,%xmm11,%xmm6\nvpunpckhqdq %xmm14,%xmm13,%xmm9\nvpunpcklqdq %xmm14,%xmm13,%xmm8\ncmp  $0,%rdx\njne ._ladder_base_loop\nmovdqu   %xmm1,80(%rdi)\nmovdqu   %xmm0,0(%rdi)\nmovdqu   %xmm3,96(%rdi)\nmovdqu   %xmm2,16(%rdi)\nmovdqu   %xmm5,112(%rdi)\nmovdqu   %xmm4,32(%rdi)\nmovdqu   %xmm7,128(%rdi)\nmovdqu   %xmm6,48(%rdi)\nmovdqu   %xmm9,144(%rdi)\nmovdqu   %xmm8,64(%rdi)\nmovq 1536(%rsp),%r11\nmovq 1544(%rsp),%r12\nmovq 1552(%rsp),%r13\nadd %r11,%rsp\nret\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base.h",
    "content": "#ifndef ladder_base_H\n#define ladder_base_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"fe.h\"\n#include \"ladder_base_namespace.h\"\n\nextern void ladder_base(fe *, const unsigned char *);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif //ifndef ladder_base_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_base_namespace.h",
    "content": "#ifndef ladder_base_namespace_H\n#define ladder_base_namespace_H\n\n#define  ladder_base  crypto_scalarmult_curve25519_sandy2x_ladder_base\n#define _ladder_base _crypto_scalarmult_curve25519_sandy2x_ladder_base\n\n#endif //ifndef ladder_base_namespace_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder_namespace.h",
    "content": "#ifndef ladder_namespace_H\n#define ladder_namespace_H\n\n#define  ladder  crypto_scalarmult_curve25519_sandy2x_ladder\n#define _ladder _crypto_scalarmult_curve25519_sandy2x_ladder\n\n#endif //ifndef ladder_namespace_H\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S",
    "content": "\n#ifdef HAVE_AVX_ASM\n\n#define IN_SANDY2X\n\n#include \"consts.S\"\n#include \"fe51_mul.S\"\n#include \"fe51_nsquare.S\"\n#include \"fe51_pack.S\"\n#include \"ladder.S\"\n#include \"ladder_base.S\"\n\n#if defined(__linux__) && defined(__ELF__)\n.section .note.GNU-stack,\"\",%progbits\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c",
    "content": "\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"scalarmult_curve25519.h\"\n#include \"runtime.h\"\n\n#ifdef HAVE_AVX_ASM\n# include \"sandy2x/curve25519_sandy2x.h\"\n#endif\n#ifdef HAVE_TI_MODE\n# include \"donna_c64/curve25519_donna_c64.h\"\nstatic const crypto_scalarmult_curve25519_implementation *implementation =\n    &crypto_scalarmult_curve25519_donna_c64_implementation;\n#else\n# include \"ref10/curve25519_ref10.h\"\nstatic const crypto_scalarmult_curve25519_implementation *implementation =\n    &crypto_scalarmult_curve25519_ref10_implementation;\n#endif\n\nint\ncrypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n,\n                             const unsigned char *p)\n{\n    size_t        i;\n    unsigned char d = 0;\n\n    if (implementation->mult(q, n, p) != 0) {\n        return -1;\n    }\n    for (i = 0; i < crypto_scalarmult_curve25519_BYTES; i++) {\n        d |= q[i];\n    }\n    return -(1 & ((d - 1) >> 8));\n}\n\nint\ncrypto_scalarmult_curve25519_base(unsigned char *q, const unsigned char *n)\n{\n    return implementation->mult_base(q, n);\n}\n\nsize_t\ncrypto_scalarmult_curve25519_bytes(void)\n{\n    return crypto_scalarmult_curve25519_BYTES;\n}\n\nsize_t\ncrypto_scalarmult_curve25519_scalarbytes(void)\n{\n    return crypto_scalarmult_curve25519_SCALARBYTES;\n}\n\nint\n_crypto_scalarmult_curve25519_pick_best_implementation(void)\n{\n#ifdef HAVE_TI_MODE\n    implementation = &crypto_scalarmult_curve25519_donna_c64_implementation;\n#else\n    implementation = &crypto_scalarmult_curve25519_ref10_implementation;\n#endif\n#ifdef HAVE_AVX_ASM\n    if (sodium_runtime_has_avx()) {\n        implementation = &crypto_scalarmult_curve25519_sandy2x_implementation;\n    }\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.h",
    "content": "\n#ifndef scalarmult_poly1305_H\n#define scalarmult_poly1305_H\n\ntypedef struct crypto_scalarmult_curve25519_implementation {\n    int (*mult)(unsigned char *q, const unsigned char *n,\n                const unsigned char *p);\n    int (*mult_base)(unsigned char *q, const unsigned char *n);\n} crypto_scalarmult_curve25519_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c",
    "content": "\n#include \"crypto_secretbox.h\"\n\nsize_t\ncrypto_secretbox_keybytes(void)\n{\n    return crypto_secretbox_KEYBYTES;\n}\n\nsize_t\ncrypto_secretbox_noncebytes(void)\n{\n    return crypto_secretbox_NONCEBYTES;\n}\n\nsize_t\ncrypto_secretbox_zerobytes(void)\n{\n    return crypto_secretbox_ZEROBYTES;\n}\n\nsize_t\ncrypto_secretbox_boxzerobytes(void)\n{\n    return crypto_secretbox_BOXZEROBYTES;\n}\n\nsize_t\ncrypto_secretbox_macbytes(void)\n{\n    return crypto_secretbox_MACBYTES;\n}\n\nconst char *\ncrypto_secretbox_primitive(void)\n{\n    return crypto_secretbox_PRIMITIVE;\n}\n\nint\ncrypto_secretbox(unsigned char *c, const unsigned char *m,\n                 unsigned long long mlen, const unsigned char *n,\n                 const unsigned char *k)\n{\n    return crypto_secretbox_xsalsa20poly1305(c, m, mlen, n, k);\n}\n\nint\ncrypto_secretbox_open(unsigned char *m, const unsigned char *c,\n                      unsigned long long clen, const unsigned char *n,\n                      const unsigned char *k)\n{\n    return crypto_secretbox_xsalsa20poly1305_open(m, c, clen, n, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c",
    "content": "\n#include <assert.h>\n#include <limits.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"crypto_core_hsalsa20.h\"\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"crypto_secretbox.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"utils.h\"\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint\ncrypto_secretbox_detached(unsigned char *c, unsigned char *mac,\n                          const unsigned char *m,\n                          unsigned long long mlen, const unsigned char *n,\n                          const unsigned char *k)\n{\n    crypto_onetimeauth_poly1305_state state;\n    unsigned char                     block0[64U];\n    unsigned char                     subkey[crypto_stream_salsa20_KEYBYTES];\n    unsigned long long                i;\n    unsigned long long                mlen0;\n\n    crypto_core_hsalsa20(subkey, n, k, sigma);\n\n    if (((uintptr_t) c >= (uintptr_t) m &&\n         (uintptr_t) c - (uintptr_t) m < mlen) ||\n        ((uintptr_t) m >= (uintptr_t) c &&\n         (uintptr_t) m - (uintptr_t) c < mlen)) {\n        memmove(c, m, mlen);\n        m = c;\n    }\n    memset(block0, 0U, crypto_secretbox_ZEROBYTES);\n    (void) sizeof(int[64U >= crypto_secretbox_ZEROBYTES ? 1 : -1]);\n    mlen0 = mlen;\n    if (mlen0 > 64U - crypto_secretbox_ZEROBYTES) {\n        mlen0 = 64U - crypto_secretbox_ZEROBYTES;\n    }\n    for (i = 0U; i < mlen0; i++) {\n        block0[i + crypto_secretbox_ZEROBYTES] = m[i];\n    }\n    crypto_stream_salsa20_xor(block0, block0,\n                              mlen0 + crypto_secretbox_ZEROBYTES,\n                              n + 16, subkey);\n    (void) sizeof(int[crypto_secretbox_ZEROBYTES >=\n                      crypto_onetimeauth_poly1305_KEYBYTES ? 1 : -1]);\n    crypto_onetimeauth_poly1305_init(&state, block0);\n\n    for (i = 0U; i < mlen0; i++) {\n        c[i] = block0[crypto_secretbox_ZEROBYTES + i];\n    }\n    sodium_memzero(block0, sizeof block0);\n    if (mlen > mlen0) {\n        crypto_stream_salsa20_xor_ic(c + mlen0, m + mlen0, mlen - mlen0,\n                                     n + 16, 1U, subkey);\n    }\n    sodium_memzero(subkey, sizeof subkey);\n\n    crypto_onetimeauth_poly1305_update(&state, c, mlen);\n    crypto_onetimeauth_poly1305_final(&state, mac);\n    sodium_memzero(&state, sizeof state);\n\n    return 0;\n}\n\nint\ncrypto_secretbox_easy(unsigned char *c, const unsigned char *m,\n                      unsigned long long mlen, const unsigned char *n,\n                      const unsigned char *k)\n{\n    if (mlen > SIZE_MAX - crypto_secretbox_MACBYTES) {\n        return -1;\n    }\n    return crypto_secretbox_detached(c + crypto_secretbox_MACBYTES,\n                                     c, m, mlen, n, k);\n}\n\nint\ncrypto_secretbox_open_detached(unsigned char *m, const unsigned char *c,\n                               const unsigned char *mac,\n                               unsigned long long clen,\n                               const unsigned char *n,\n                               const unsigned char *k)\n{\n    unsigned char      block0[64U];\n    unsigned char      subkey[crypto_stream_salsa20_KEYBYTES];\n    unsigned long long i;\n    unsigned long long mlen0;\n\n    crypto_core_hsalsa20(subkey, n, k, sigma);\n    crypto_stream_salsa20(block0, crypto_stream_salsa20_KEYBYTES,\n                          n + 16, subkey);\n    if (crypto_onetimeauth_poly1305_verify(mac, c, clen, block0) != 0) {\n        sodium_memzero(subkey, sizeof subkey);\n        return -1;\n    }\n    if (((uintptr_t) c >= (uintptr_t) m &&\n         (uintptr_t) c - (uintptr_t) m < clen) ||\n        ((uintptr_t) m >= (uintptr_t) c &&\n         (uintptr_t) m - (uintptr_t) c < clen)) {\n        memmove(m, c, clen);\n        c = m;\n    }\n    mlen0 = clen;\n    if (mlen0 > 64U - crypto_secretbox_ZEROBYTES) {\n        mlen0 = 64U - crypto_secretbox_ZEROBYTES;\n    }\n    for (i = 0U; i < mlen0; i++) {\n        block0[crypto_secretbox_ZEROBYTES + i] = c[i];\n    }\n    crypto_stream_salsa20_xor(block0, block0,\n                              crypto_secretbox_ZEROBYTES + mlen0,\n                              n + 16, subkey);\n    for (i = 0U; i < mlen0; i++) {\n        m[i] = block0[i + crypto_secretbox_ZEROBYTES];\n    }\n    if (clen > mlen0) {\n        crypto_stream_salsa20_xor_ic(m + mlen0, c + mlen0, clen - mlen0,\n                                     n + 16, 1U, subkey);\n    }\n    sodium_memzero(subkey, sizeof subkey);\n\n    return 0;\n}\n\nint\ncrypto_secretbox_open_easy(unsigned char *m, const unsigned char *c,\n                           unsigned long long clen, const unsigned char *n,\n                           const unsigned char *k)\n{\n    if (clen < crypto_secretbox_MACBYTES) {\n        return -1;\n    }\n    return crypto_secretbox_open_detached(m, c + crypto_secretbox_MACBYTES, c,\n                                          clen - crypto_secretbox_MACBYTES,\n                                          n, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/ref/box_xsalsa20poly1305.c",
    "content": "#include \"crypto_onetimeauth_poly1305.h\"\n#include \"crypto_secretbox_xsalsa20poly1305.h\"\n#include \"crypto_stream_xsalsa20.h\"\n\nint crypto_secretbox_xsalsa20poly1305(\n  unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  int i;\n  if (mlen < 32) return -1;\n  crypto_stream_xsalsa20_xor(c,m,mlen,n,k);\n  crypto_onetimeauth_poly1305(c + 16,c + 32,mlen - 32,c);\n  for (i = 0;i < 16;++i) c[i] = 0;\n  return 0;\n}\n\nint crypto_secretbox_xsalsa20poly1305_open(\n  unsigned char *m,\n  const unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  int i;\n  unsigned char subkey[32];\n  if (clen < 32) return -1;\n  crypto_stream_xsalsa20(subkey,32,n,k);\n  if (crypto_onetimeauth_poly1305_verify(c + 16,c + 32,clen - 32,subkey) != 0) return -1;\n  crypto_stream_xsalsa20_xor(m,c,clen,n,k);\n  for (i = 0;i < 32;++i) m[i] = 0;\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305_api.c",
    "content": "#include \"crypto_secretbox_xsalsa20poly1305.h\"\n\nsize_t\ncrypto_secretbox_xsalsa20poly1305_keybytes(void) {\n    return crypto_secretbox_xsalsa20poly1305_KEYBYTES;\n}\n\nsize_t\ncrypto_secretbox_xsalsa20poly1305_noncebytes(void) {\n    return crypto_secretbox_xsalsa20poly1305_NONCEBYTES;\n}\n\nsize_t\ncrypto_secretbox_xsalsa20poly1305_zerobytes(void) {\n    return crypto_secretbox_xsalsa20poly1305_ZEROBYTES;\n}\n\nsize_t\ncrypto_secretbox_xsalsa20poly1305_boxzerobytes(void) {\n    return crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES;\n}\n\nsize_t\ncrypto_secretbox_xsalsa20poly1305_macbytes(void) {\n    return crypto_secretbox_xsalsa20poly1305_MACBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c",
    "content": "\n#include \"crypto_shorthash.h\"\n\nsize_t\ncrypto_shorthash_bytes(void)\n{\n    return crypto_shorthash_BYTES;\n}\n\nsize_t\ncrypto_shorthash_keybytes(void)\n{\n    return crypto_shorthash_KEYBYTES;\n}\n\nconst char *\ncrypto_shorthash_primitive(void)\n{\n    return crypto_shorthash_PRIMITIVE;\n}\n\nint\ncrypto_shorthash(unsigned char *out, const unsigned char *in,\n                 unsigned long long inlen, const unsigned char *k)\n{\n    return crypto_shorthash_siphash24(out, in, inlen, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24.c",
    "content": "#include \"crypto_shorthash_siphash24.h\"\n#include \"crypto_uint64.h\"\n#include \"crypto_uint32.h\"\n#include \"crypto_uint8.h\"\n\ntypedef crypto_uint64 u64;\ntypedef crypto_uint32 u32;\ntypedef crypto_uint8   u8;\n\n#define ROTL(x,b) (u64)( ((x) << (b)) | ( (x) >> (64 - (b))) )\n\n#define U32TO8_LE(p, v)         \\\n    (p)[0] = (u8)((v)      ); (p)[1] = (u8)((v) >>  8); \\\n    (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);\n\n#define U64TO8_LE(p, v)         \\\n  U32TO8_LE((p),     (u32)((v)      ));   \\\n  U32TO8_LE((p) + 4, (u32)((v) >> 32));\n\n#define U8TO64_LE(p) \\\n  (((u64)((p)[0])      ) | \\\n   ((u64)((p)[1]) <<  8) | \\\n   ((u64)((p)[2]) << 16) | \\\n   ((u64)((p)[3]) << 24) | \\\n   ((u64)((p)[4]) << 32) | \\\n   ((u64)((p)[5]) << 40) | \\\n   ((u64)((p)[6]) << 48) | \\\n   ((u64)((p)[7]) << 56))\n\n#define SIPROUND            \\\n  do {              \\\n    v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \\\n    v2 += v3; v3=ROTL(v3,16); v3 ^= v2;     \\\n    v0 += v3; v3=ROTL(v3,21); v3 ^= v0;     \\\n    v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \\\n  } while(0)\n\nint crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in,\n                               unsigned long long inlen, const unsigned char *k)\n{\n  /* \"somepseudorandomlygeneratedbytes\" */\n  u64 v0 = 0x736f6d6570736575ULL;\n  u64 v1 = 0x646f72616e646f6dULL;\n  u64 v2 = 0x6c7967656e657261ULL;\n  u64 v3 = 0x7465646279746573ULL;\n  u64 b;\n  u64 k0 = U8TO64_LE( k );\n  u64 k1 = U8TO64_LE( k + 8 );\n  u64 m;\n  const u8 *end = in + inlen - ( inlen % sizeof( u64 ) );\n  const int left = inlen & 7;\n  b = ( ( u64 )inlen ) << 56;\n  v3 ^= k1;\n  v2 ^= k0;\n  v1 ^= k1;\n  v0 ^= k0;\n\n  for ( ; in != end; in += 8 )\n  {\n    m = U8TO64_LE( in );\n    v3 ^= m;\n    SIPROUND;\n    SIPROUND;\n    v0 ^= m;\n  }\n\n  switch( left )\n  {\n  case 7: b |= ( ( u64 )in[ 6] )  << 48;\n  case 6: b |= ( ( u64 )in[ 5] )  << 40;\n  case 5: b |= ( ( u64 )in[ 4] )  << 32;\n  case 4: b |= ( ( u64 )in[ 3] )  << 24;\n  case 3: b |= ( ( u64 )in[ 2] )  << 16;\n  case 2: b |= ( ( u64 )in[ 1] )  <<  8;\n  case 1: b |= ( ( u64 )in[ 0] ); break;\n  case 0: break;\n  }\n\n  v3 ^= b;\n  SIPROUND;\n  SIPROUND;\n  v0 ^= b;\n  v2 ^= 0xff;\n  SIPROUND;\n  SIPROUND;\n  SIPROUND;\n  SIPROUND;\n  b = v0 ^ v1 ^ v2  ^ v3;\n  U64TO8_LE( out, b );\n  return 0;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24_api.c",
    "content": "#include \"crypto_shorthash_siphash24.h\"\n\nsize_t\ncrypto_shorthash_siphash24_bytes(void) {\n    return crypto_shorthash_siphash24_BYTES;\n}\n\nsize_t\ncrypto_shorthash_siphash24_keybytes(void) {\n    return crypto_shorthash_siphash24_KEYBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/crypto_sign.c",
    "content": "\n#include \"crypto_sign.h\"\n\nsize_t\ncrypto_sign_bytes(void)\n{\n    return crypto_sign_BYTES;\n}\n\nsize_t\ncrypto_sign_seedbytes(void)\n{\n    return crypto_sign_SEEDBYTES;\n}\n\nsize_t\ncrypto_sign_publickeybytes(void)\n{\n    return crypto_sign_PUBLICKEYBYTES;\n}\n\nsize_t\ncrypto_sign_secretkeybytes(void)\n{\n    return crypto_sign_SECRETKEYBYTES;\n}\n\nconst char *\ncrypto_sign_primitive(void)\n{\n    return crypto_sign_PRIMITIVE;\n}\n\nint\ncrypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk,\n                         const unsigned char *seed)\n{\n    return crypto_sign_ed25519_seed_keypair(pk, sk, seed);\n}\n\nint\ncrypto_sign_keypair(unsigned char *pk, unsigned char *sk)\n{\n    return crypto_sign_ed25519_keypair(pk, sk);\n}\n\nint\ncrypto_sign(unsigned char *sm, unsigned long long *smlen_p,\n            const unsigned char *m, unsigned long long mlen,\n            const unsigned char *sk)\n{\n    return crypto_sign_ed25519(sm, smlen_p, m, mlen, sk);\n}\n\nint\ncrypto_sign_open(unsigned char *m, unsigned long long *mlen_p,\n                 const unsigned char *sm, unsigned long long smlen,\n                 const unsigned char *pk)\n{\n    return crypto_sign_ed25519_open(m, mlen_p, sm, smlen, pk);\n}\n\nint\ncrypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,\n                     const unsigned char *m, unsigned long long mlen,\n                     const unsigned char *sk)\n{\n    return crypto_sign_ed25519_detached(sig, siglen_p, m, mlen, sk);\n}\n\nint\ncrypto_sign_verify_detached(const unsigned char *sig, const unsigned char *m,\n                            unsigned long long mlen, const unsigned char *pk)\n{\n    return crypto_sign_ed25519_verify_detached(sig, m, mlen, pk);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/description",
    "content": "EdDSA signatures using Curve25519\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/base.h",
    "content": "{\n {\n  { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 },\n  { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 },\n  { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 },\n },\n {\n  { -12815894,-12976347,-21581243,11784320,-25355658,-2750717,-11717903,-3814571,-358445,-10211303 },\n  { -21703237,6903825,27185491,6451973,-29577724,-9554005,-15616551,11189268,-26829678,-5319081 },\n  { 26966642,11152617,32442495,15396054,14353839,-12752335,-3128826,-9541118,-15472047,-4166697 },\n },\n {\n  { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 },\n  { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 },\n  { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 },\n },\n {\n  { -17036878,13921892,10945806,-6033431,27105052,-16084379,-28926210,15006023,3284568,-6276540 },\n  { 23599295,-8306047,-11193664,-7687416,13236774,10506355,7464579,9656445,13059162,10374397 },\n  { 7798556,16710257,3033922,2874086,28997861,2835604,32406664,-3839045,-641708,-101325 },\n },\n {\n  { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 },\n  { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 },\n  { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 },\n },\n {\n  { -15371964,-12862754,32573250,4720197,-26436522,5875511,-19188627,-15224819,-9818940,-12085777 },\n  { -8549212,109983,15149363,2178705,22900618,4543417,3044240,-15689887,1762328,14866737 },\n  { -18199695,-15951423,-10473290,1707278,-17185920,3916101,-28236412,3959421,27914454,4383652 },\n },\n {\n  { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 },\n  { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 },\n  { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 },\n },\n {\n  { 14499471,-2729599,-33191113,-4254652,28494862,14271267,30290735,10876454,-33154098,2381726 },\n  { -7195431,-2655363,-14730155,462251,-27724326,3941372,-6236617,3696005,-32300832,15351955 },\n  { 27431194,8222322,16448760,-3907995,-18707002,11938355,-32961401,-2970515,29551813,10109425 },\n },\n},\n{\n {\n  { -13657040,-13155431,-31283750,11777098,21447386,6519384,-2378284,-1627556,10092783,-4764171 },\n  { 27939166,14210322,4677035,16277044,-22964462,-12398139,-32508754,12005538,-17810127,12803510 },\n  { 17228999,-15661624,-1233527,300140,-1224870,-11714777,30364213,-9038194,18016357,4397660 },\n },\n {\n  { -10958843,-7690207,4776341,-14954238,27850028,-15602212,-26619106,14544525,-17477504,982639 },\n  { 29253598,15796703,-2863982,-9908884,10057023,3163536,7332899,-4120128,-21047696,9934963 },\n  { 5793303,16271923,-24131614,-10116404,29188560,1206517,-14747930,4559895,-30123922,-10897950 },\n },\n {\n  { -27643952,-11493006,16282657,-11036493,28414021,-15012264,24191034,4541697,-13338309,5500568 },\n  { 12650548,-1497113,9052871,11355358,-17680037,-8400164,-17430592,12264343,10874051,13524335 },\n  { 25556948,-3045990,714651,2510400,23394682,-10415330,33119038,5080568,-22528059,5376628 },\n },\n {\n  { -26088264,-4011052,-17013699,-3537628,-6726793,1920897,-22321305,-9447443,4535768,1569007 },\n  { -2255422,14606630,-21692440,-8039818,28430649,8775819,-30494562,3044290,31848280,12543772 },\n  { -22028579,2943893,-31857513,6777306,13784462,-4292203,-27377195,-2062731,7718482,14474653 },\n },\n {\n  { 2385315,2454213,-22631320,46603,-4437935,-15680415,656965,-7236665,24316168,-5253567 },\n  { 13741529,10911568,-33233417,-8603737,-20177830,-1033297,33040651,-13424532,-20729456,8321686 },\n  { 21060490,-2212744,15712757,-4336099,1639040,10656336,23845965,-11874838,-9984458,608372 },\n },\n {\n  { -13672732,-15087586,-10889693,-7557059,-6036909,11305547,1123968,-6780577,27229399,23887 },\n  { -23244140,-294205,-11744728,14712571,-29465699,-2029617,12797024,-6440308,-1633405,16678954 },\n  { -29500620,4770662,-16054387,14001338,7830047,9564805,-1508144,-4795045,-17169265,4904953 },\n },\n {\n  { 24059557,14617003,19037157,-15039908,19766093,-14906429,5169211,16191880,2128236,-4326833 },\n  { -16981152,4124966,-8540610,-10653797,30336522,-14105247,-29806336,916033,-6882542,-2986532 },\n  { -22630907,12419372,-7134229,-7473371,-16478904,16739175,285431,2763829,15736322,4143876 },\n },\n {\n  { 2379352,11839345,-4110402,-5988665,11274298,794957,212801,-14594663,23527084,-16458268 },\n  { 33431127,-11130478,-17838966,-15626900,8909499,8376530,-32625340,4087881,-15188911,-14416214 },\n  { 1767683,7197987,-13205226,-2022635,-13091350,448826,5799055,4357868,-4774191,-16323038 },\n },\n},\n{\n {\n  { 6721966,13833823,-23523388,-1551314,26354293,-11863321,23365147,-3949732,7390890,2759800 },\n  { 4409041,2052381,23373853,10530217,7676779,-12885954,21302353,-4264057,1244380,-12919645 },\n  { -4421239,7169619,4982368,-2957590,30256825,-2777540,14086413,9208236,15886429,16489664 },\n },\n {\n  { 1996075,10375649,14346367,13311202,-6874135,-16438411,-13693198,398369,-30606455,-712933 },\n  { -25307465,9795880,-2777414,14878809,-33531835,14780363,13348553,12076947,-30836462,5113182 },\n  { -17770784,11797796,31950843,13929123,-25888302,12288344,-30341101,-7336386,13847711,5387222 },\n },\n {\n  { -18582163,-3416217,17824843,-2340966,22744343,-10442611,8763061,3617786,-19600662,10370991 },\n  { 20246567,-14369378,22358229,-543712,18507283,-10413996,14554437,-8746092,32232924,16763880 },\n  { 9648505,10094563,26416693,14745928,-30374318,-6472621,11094161,15689506,3140038,-16510092 },\n },\n {\n  { -16160072,5472695,31895588,4744994,8823515,10365685,-27224800,9448613,-28774454,366295 },\n  { 19153450,11523972,-11096490,-6503142,-24647631,5420647,28344573,8041113,719605,11671788 },\n  { 8678025,2694440,-6808014,2517372,4964326,11152271,-15432916,-15266516,27000813,-10195553 },\n },\n {\n  { -15157904,7134312,8639287,-2814877,-7235688,10421742,564065,5336097,6750977,-14521026 },\n  { 11836410,-3979488,26297894,16080799,23455045,15735944,1695823,-8819122,8169720,16220347 },\n  { -18115838,8653647,17578566,-6092619,-8025777,-16012763,-11144307,-2627664,-5990708,-14166033 },\n },\n {\n  { -23308498,-10968312,15213228,-10081214,-30853605,-11050004,27884329,2847284,2655861,1738395 },\n  { -27537433,-14253021,-25336301,-8002780,-9370762,8129821,21651608,-3239336,-19087449,-11005278 },\n  { 1533110,3437855,23735889,459276,29970501,11335377,26030092,5821408,10478196,8544890 },\n },\n {\n  { 32173121,-16129311,24896207,3921497,22579056,-3410854,19270449,12217473,17789017,-3395995 },\n  { -30552961,-2228401,-15578829,-10147201,13243889,517024,15479401,-3853233,30460520,1052596 },\n  { -11614875,13323618,32618793,8175907,-15230173,12596687,27491595,-4612359,3179268,-9478891 },\n },\n {\n  { 31947069,-14366651,-4640583,-15339921,-15125977,-6039709,-14756777,-16411740,19072640,-9511060 },\n  { 11685058,11822410,3158003,-13952594,33402194,-4165066,5977896,-5215017,473099,5040608 },\n  { -20290863,8198642,-27410132,11602123,1290375,-2799760,28326862,1721092,-19558642,-3131606 },\n },\n},\n{\n {\n  { 7881532,10687937,7578723,7738378,-18951012,-2553952,21820786,8076149,-27868496,11538389 },\n  { -19935666,3899861,18283497,-6801568,-15728660,-11249211,8754525,7446702,-5676054,5797016 },\n  { -11295600,-3793569,-15782110,-7964573,12708869,-8456199,2014099,-9050574,-2369172,-5877341 },\n },\n {\n  { -22472376,-11568741,-27682020,1146375,18956691,16640559,1192730,-3714199,15123619,10811505 },\n  { 14352098,-3419715,-18942044,10822655,32750596,4699007,-70363,15776356,-28886779,-11974553 },\n  { -28241164,-8072475,-4978962,-5315317,29416931,1847569,-20654173,-16484855,4714547,-9600655 },\n },\n {\n  { 15200332,8368572,19679101,15970074,-31872674,1959451,24611599,-4543832,-11745876,12340220 },\n  { 12876937,-10480056,33134381,6590940,-6307776,14872440,9613953,8241152,15370987,9608631 },\n  { -4143277,-12014408,8446281,-391603,4407738,13629032,-7724868,15866074,-28210621,-8814099 },\n },\n {\n  { 26660628,-15677655,8393734,358047,-7401291,992988,-23904233,858697,20571223,8420556 },\n  { 14620715,13067227,-15447274,8264467,14106269,15080814,33531827,12516406,-21574435,-12476749 },\n  { 236881,10476226,57258,-14677024,6472998,2466984,17258519,7256740,8791136,15069930 },\n },\n {\n  { 1276410,-9371918,22949635,-16322807,-23493039,-5702186,14711875,4874229,-30663140,-2331391 },\n  { 5855666,4990204,-13711848,7294284,-7804282,1924647,-1423175,-7912378,-33069337,9234253 },\n  { 20590503,-9018988,31529744,-7352666,-2706834,10650548,31559055,-11609587,18979186,13396066 },\n },\n {\n  { 24474287,4968103,22267082,4407354,24063882,-8325180,-18816887,13594782,33514650,7021958 },\n  { -11566906,-6565505,-21365085,15928892,-26158305,4315421,-25948728,-3916677,-21480480,12868082 },\n  { -28635013,13504661,19988037,-2132761,21078225,6443208,-21446107,2244500,-12455797,-8089383 },\n },\n {\n  { -30595528,13793479,-5852820,319136,-25723172,-6263899,33086546,8957937,-15233648,5540521 },\n  { -11630176,-11503902,-8119500,-7643073,2620056,1022908,-23710744,-1568984,-16128528,-14962807 },\n  { 23152971,775386,27395463,14006635,-9701118,4649512,1689819,892185,-11513277,-15205948 },\n },\n {\n  { 9770129,9586738,26496094,4324120,1556511,-3550024,27453819,4763127,-19179614,5867134 },\n  { -32765025,1927590,31726409,-4753295,23962434,-16019500,27846559,5931263,-29749703,-16108455 },\n  { 27461885,-2977536,22380810,1815854,-23033753,-3031938,7283490,-15148073,-19526700,7734629 },\n },\n},\n{\n {\n  { -8010264,-9590817,-11120403,6196038,29344158,-13430885,7585295,-3176626,18549497,15302069 },\n  { -32658337,-6171222,-7672793,-11051681,6258878,13504381,10458790,-6418461,-8872242,8424746 },\n  { 24687205,8613276,-30667046,-3233545,1863892,-1830544,19206234,7134917,-11284482,-828919 },\n },\n {\n  { 11334899,-9218022,8025293,12707519,17523892,-10476071,10243738,-14685461,-5066034,16498837 },\n  { 8911542,6887158,-9584260,-6958590,11145641,-9543680,17303925,-14124238,6536641,10543906 },\n  { -28946384,15479763,-17466835,568876,-1497683,11223454,-2669190,-16625574,-27235709,8876771 },\n },\n {\n  { -25742899,-12566864,-15649966,-846607,-33026686,-796288,-33481822,15824474,-604426,-9039817 },\n  { 10330056,70051,7957388,-9002667,9764902,15609756,27698697,-4890037,1657394,3084098 },\n  { 10477963,-7470260,12119566,-13250805,29016247,-5365589,31280319,14396151,-30233575,15272409 },\n },\n {\n  { -12288309,3169463,28813183,16658753,25116432,-5630466,-25173957,-12636138,-25014757,1950504 },\n  { -26180358,9489187,11053416,-14746161,-31053720,5825630,-8384306,-8767532,15341279,8373727 },\n  { 28685821,7759505,-14378516,-12002860,-31971820,4079242,298136,-10232602,-2878207,15190420 },\n },\n {\n  { -32932876,13806336,-14337485,-15794431,-24004620,10940928,8669718,2742393,-26033313,-6875003 },\n  { -1580388,-11729417,-25979658,-11445023,-17411874,-10912854,9291594,-16247779,-12154742,6048605 },\n  { -30305315,14843444,1539301,11864366,20201677,1900163,13934231,5128323,11213262,9168384 },\n },\n {\n  { -26280513,11007847,19408960,-940758,-18592965,-4328580,-5088060,-11105150,20470157,-16398701 },\n  { -23136053,9282192,14855179,-15390078,-7362815,-14408560,-22783952,14461608,14042978,5230683 },\n  { 29969567,-2741594,-16711867,-8552442,9175486,-2468974,21556951,3506042,-5933891,-12449708 },\n },\n {\n  { -3144746,8744661,19704003,4581278,-20430686,6830683,-21284170,8971513,-28539189,15326563 },\n  { -19464629,10110288,-17262528,-3503892,-23500387,1355669,-15523050,15300988,-20514118,9168260 },\n  { -5353335,4488613,-23803248,16314347,7780487,-15638939,-28948358,9601605,33087103,-9011387 },\n },\n {\n  { -19443170,-15512900,-20797467,-12445323,-29824447,10229461,-27444329,-15000531,-5996870,15664672 },\n  { 23294591,-16632613,-22650781,-8470978,27844204,11461195,13099750,-2460356,18151676,13417686 },\n  { -24722913,-4176517,-31150679,5988919,-26858785,6685065,1661597,-12551441,15271676,-15452665 },\n },\n},\n{\n {\n  { 11433042,-13228665,8239631,-5279517,-1985436,-725718,-18698764,2167544,-6921301,-13440182 },\n  { -31436171,15575146,30436815,12192228,-22463353,9395379,-9917708,-8638997,12215110,12028277 },\n  { 14098400,6555944,23007258,5757252,-15427832,-12950502,30123440,4617780,-16900089,-655628 },\n },\n {\n  { -4026201,-15240835,11893168,13718664,-14809462,1847385,-15819999,10154009,23973261,-12684474 },\n  { -26531820,-3695990,-1908898,2534301,-31870557,-16550355,18341390,-11419951,32013174,-10103539 },\n  { -25479301,10876443,-11771086,-14625140,-12369567,1838104,21911214,6354752,4425632,-837822 },\n },\n {\n  { -10433389,-14612966,22229858,-3091047,-13191166,776729,-17415375,-12020462,4725005,14044970 },\n  { 19268650,-7304421,1555349,8692754,-21474059,-9910664,6347390,-1411784,-19522291,-16109756 },\n  { -24864089,12986008,-10898878,-5558584,-11312371,-148526,19541418,8180106,9282262,10282508 },\n },\n {\n  { -26205082,4428547,-8661196,-13194263,4098402,-14165257,15522535,8372215,5542595,-10702683 },\n  { -10562541,14895633,26814552,-16673850,-17480754,-2489360,-2781891,6993761,-18093885,10114655 },\n  { -20107055,-929418,31422704,10427861,-7110749,6150669,-29091755,-11529146,25953725,-106158 },\n },\n {\n  { -4234397,-8039292,-9119125,3046000,2101609,-12607294,19390020,6094296,-3315279,12831125 },\n  { -15998678,7578152,5310217,14408357,-33548620,-224739,31575954,6326196,7381791,-2421839 },\n  { -20902779,3296811,24736065,-16328389,18374254,7318640,6295303,8082724,-15362489,12339664 },\n },\n {\n  { 27724736,2291157,6088201,-14184798,1792727,5857634,13848414,15768922,25091167,14856294 },\n  { -18866652,8331043,24373479,8541013,-701998,-9269457,12927300,-12695493,-22182473,-9012899 },\n  { -11423429,-5421590,11632845,3405020,30536730,-11674039,-27260765,13866390,30146206,9142070 },\n },\n {\n  { 3924129,-15307516,-13817122,-10054960,12291820,-668366,-27702774,9326384,-8237858,4171294 },\n  { -15921940,16037937,6713787,16606682,-21612135,2790944,26396185,3731949,345228,-5462949 },\n  { -21327538,13448259,25284571,1143661,20614966,-8849387,2031539,-12391231,-16253183,-13582083 },\n },\n {\n  { 31016211,-16722429,26371392,-14451233,-5027349,14854137,17477601,3842657,28012650,-16405420 },\n  { -5075835,9368966,-8562079,-4600902,-15249953,6970560,-9189873,16292057,-8867157,3507940 },\n  { 29439664,3537914,23333589,6997794,-17555561,-11018068,-15209202,-15051267,-9164929,6580396 },\n },\n},\n{\n {\n  { -12185861,-7679788,16438269,10826160,-8696817,-6235611,17860444,-9273846,-2095802,9304567 },\n  { 20714564,-4336911,29088195,7406487,11426967,-5095705,14792667,-14608617,5289421,-477127 },\n  { -16665533,-10650790,-6160345,-13305760,9192020,-1802462,17271490,12349094,26939669,-3752294 },\n },\n {\n  { -12889898,9373458,31595848,16374215,21471720,13221525,-27283495,-12348559,-3698806,117887 },\n  { 22263325,-6560050,3984570,-11174646,-15114008,-566785,28311253,5358056,-23319780,541964 },\n  { 16259219,3261970,2309254,-15534474,-16885711,-4581916,24134070,-16705829,-13337066,-13552195 },\n },\n {\n  { 9378160,-13140186,-22845982,-12745264,28198281,-7244098,-2399684,-717351,690426,14876244 },\n  { 24977353,-314384,-8223969,-13465086,28432343,-1176353,-13068804,-12297348,-22380984,6618999 },\n  { -1538174,11685646,12944378,13682314,-24389511,-14413193,8044829,-13817328,32239829,-5652762 },\n },\n {\n  { -18603066,4762990,-926250,8885304,-28412480,-3187315,9781647,-10350059,32779359,5095274 },\n  { -33008130,-5214506,-32264887,-3685216,9460461,-9327423,-24601656,14506724,21639561,-2630236 },\n  { -16400943,-13112215,25239338,15531969,3987758,-4499318,-1289502,-6863535,17874574,558605 },\n },\n {\n  { -13600129,10240081,9171883,16131053,-20869254,9599700,33499487,5080151,2085892,5119761 },\n  { -22205145,-2519528,-16381601,414691,-25019550,2170430,30634760,-8363614,-31999993,-5759884 },\n  { -6845704,15791202,8550074,-1312654,29928809,-12092256,27534430,-7192145,-22351378,12961482 },\n },\n {\n  { -24492060,-9570771,10368194,11582341,-23397293,-2245287,16533930,8206996,-30194652,-5159638 },\n  { -11121496,-3382234,2307366,6362031,-135455,8868177,-16835630,7031275,7589640,8945490 },\n  { -32152748,8917967,6661220,-11677616,-1192060,-15793393,7251489,-11182180,24099109,-14456170 },\n },\n {\n  { 5019558,-7907470,4244127,-14714356,-26933272,6453165,-19118182,-13289025,-6231896,-10280736 },\n  { 10853594,10721687,26480089,5861829,-22995819,1972175,-1866647,-10557898,-3363451,-6441124 },\n  { -17002408,5906790,221599,-6563147,7828208,-13248918,24362661,-2008168,-13866408,7421392 },\n },\n {\n  { 8139927,-6546497,32257646,-5890546,30375719,1886181,-21175108,15441252,28826358,-4123029 },\n  { 6267086,9695052,7709135,-16603597,-32869068,-1886135,14795160,-7840124,13746021,-1742048 },\n  { 28584902,7787108,-6732942,-15050729,22846041,-7571236,-3181936,-363524,4771362,-8419958 },\n },\n},\n{\n {\n  { 24949256,6376279,-27466481,-8174608,-18646154,-9930606,33543569,-12141695,3569627,11342593 },\n  { 26514989,4740088,27912651,3697550,19331575,-11472339,6809886,4608608,7325975,-14801071 },\n  { -11618399,-14554430,-24321212,7655128,-1369274,5214312,-27400540,10258390,-17646694,-8186692 },\n },\n {\n  { 11431204,15823007,26570245,14329124,18029990,4796082,-31446179,15580664,9280358,-3973687 },\n  { -160783,-10326257,-22855316,-4304997,-20861367,-13621002,-32810901,-11181622,-15545091,4387441 },\n  { -20799378,12194512,3937617,-5805892,-27154820,9340370,-24513992,8548137,20617071,-7482001 },\n },\n {\n  { -938825,-3930586,-8714311,16124718,24603125,-6225393,-13775352,-11875822,24345683,10325460 },\n  { -19855277,-1568885,-22202708,8714034,14007766,6928528,16318175,-1010689,4766743,3552007 },\n  { -21751364,-16730916,1351763,-803421,-4009670,3950935,3217514,14481909,10988822,-3994762 },\n },\n {\n  { 15564307,-14311570,3101243,5684148,30446780,-8051356,12677127,-6505343,-8295852,13296005 },\n  { -9442290,6624296,-30298964,-11913677,-4670981,-2057379,31521204,9614054,-30000824,12074674 },\n  { 4771191,-135239,14290749,-13089852,27992298,14998318,-1413936,-1556716,29832613,-16391035 },\n },\n {\n  { 7064884,-7541174,-19161962,-5067537,-18891269,-2912736,25825242,5293297,-27122660,13101590 },\n  { -2298563,2439670,-7466610,1719965,-27267541,-16328445,32512469,-5317593,-30356070,-4190957 },\n  { -30006540,10162316,-33180176,3981723,-16482138,-13070044,14413974,9515896,19568978,9628812 },\n },\n {\n  { 33053803,199357,15894591,1583059,27380243,-4580435,-17838894,-6106839,-6291786,3437740 },\n  { -18978877,3884493,19469877,12726490,15913552,13614290,-22961733,70104,7463304,4176122 },\n  { -27124001,10659917,11482427,-16070381,12771467,-6635117,-32719404,-5322751,24216882,5944158 },\n },\n {\n  { 8894125,7450974,-2664149,-9765752,-28080517,-12389115,19345746,14680796,11632993,5847885 },\n  { 26942781,-2315317,9129564,-4906607,26024105,11769399,-11518837,6367194,-9727230,4782140 },\n  { 19916461,-4828410,-22910704,-11414391,25606324,-5972441,33253853,8220911,6358847,-1873857 },\n },\n {\n  { 801428,-2081702,16569428,11065167,29875704,96627,7908388,-4480480,-13538503,1387155 },\n  { 19646058,5720633,-11416706,12814209,11607948,12749789,14147075,15156355,-21866831,11835260 },\n  { 19299512,1155910,28703737,14890794,2925026,7269399,26121523,15467869,-26560550,5052483 },\n },\n},\n{\n {\n  { -3017432,10058206,1980837,3964243,22160966,12322533,-6431123,-12618185,12228557,-7003677 },\n  { 32944382,14922211,-22844894,5188528,21913450,-8719943,4001465,13238564,-6114803,8653815 },\n  { 22865569,-4652735,27603668,-12545395,14348958,8234005,24808405,5719875,28483275,2841751 },\n },\n {\n  { -16420968,-1113305,-327719,-12107856,21886282,-15552774,-1887966,-315658,19932058,-12739203 },\n  { -11656086,10087521,-8864888,-5536143,-19278573,-3055912,3999228,13239134,-4777469,-13910208 },\n  { 1382174,-11694719,17266790,9194690,-13324356,9720081,20403944,11284705,-14013818,3093230 },\n },\n {\n  { 16650921,-11037932,-1064178,1570629,-8329746,7352753,-302424,16271225,-24049421,-6691850 },\n  { -21911077,-5927941,-4611316,-5560156,-31744103,-10785293,24123614,15193618,-21652117,-16739389 },\n  { -9935934,-4289447,-25279823,4372842,2087473,10399484,31870908,14690798,17361620,11864968 },\n },\n {\n  { -11307610,6210372,13206574,5806320,-29017692,-13967200,-12331205,-7486601,-25578460,-16240689 },\n  { 14668462,-12270235,26039039,15305210,25515617,4542480,10453892,6577524,9145645,-6443880 },\n  { 5974874,3053895,-9433049,-10385191,-31865124,3225009,-7972642,3936128,-5652273,-3050304 },\n },\n {\n  { 30625386,-4729400,-25555961,-12792866,-20484575,7695099,17097188,-16303496,-27999779,1803632 },\n  { -3553091,9865099,-5228566,4272701,-5673832,-16689700,14911344,12196514,-21405489,7047412 },\n  { 20093277,9920966,-11138194,-5343857,13161587,12044805,-32856851,4124601,-32343828,-10257566 },\n },\n {\n  { -20788824,14084654,-13531713,7842147,19119038,-13822605,4752377,-8714640,-21679658,2288038 },\n  { -26819236,-3283715,29965059,3039786,-14473765,2540457,29457502,14625692,-24819617,12570232 },\n  { -1063558,-11551823,16920318,12494842,1278292,-5869109,-21159943,-3498680,-11974704,4724943 },\n },\n {\n  { 17960970,-11775534,-4140968,-9702530,-8876562,-1410617,-12907383,-8659932,-29576300,1903856 },\n  { 23134274,-14279132,-10681997,-1611936,20684485,15770816,-12989750,3190296,26955097,14109738 },\n  { 15308788,5320727,-30113809,-14318877,22902008,7767164,29425325,-11277562,31960942,11934971 },\n },\n {\n  { -27395711,8435796,4109644,12222639,-24627868,14818669,20638173,4875028,10491392,1379718 },\n  { -13159415,9197841,3875503,-8936108,-1383712,-5879801,33518459,16176658,21432314,12180697 },\n  { -11787308,11500838,13787581,-13832590,-22430679,10140205,1465425,12689540,-10301319,-13872883 },\n },\n},\n{\n {\n  { 5414091,-15386041,-21007664,9643570,12834970,1186149,-2622916,-1342231,26128231,6032912 },\n  { -26337395,-13766162,32496025,-13653919,17847801,-12669156,3604025,8316894,-25875034,-10437358 },\n  { 3296484,6223048,24680646,-12246460,-23052020,5903205,-8862297,-4639164,12376617,3188849 },\n },\n {\n  { 29190488,-14659046,27549113,-1183516,3520066,-10697301,32049515,-7309113,-16109234,-9852307 },\n  { -14744486,-9309156,735818,-598978,-20407687,-5057904,25246078,-15795669,18640741,-960977 },\n  { -6928835,-16430795,10361374,5642961,4910474,12345252,-31638386,-494430,10530747,1053335 },\n },\n {\n  { -29265967,-14186805,-13538216,-12117373,-19457059,-10655384,-31462369,-2948985,24018831,15026644 },\n  { -22592535,-3145277,-2289276,5953843,-13440189,9425631,25310643,13003497,-2314791,-15145616 },\n  { -27419985,-603321,-8043984,-1669117,-26092265,13987819,-27297622,187899,-23166419,-2531735 },\n },\n {\n  { -21744398,-13810475,1844840,5021428,-10434399,-15911473,9716667,16266922,-5070217,726099 },\n  { 29370922,-6053998,7334071,-15342259,9385287,2247707,-13661962,-4839461,30007388,-15823341 },\n  { -936379,16086691,23751945,-543318,-1167538,-5189036,9137109,730663,9835848,4555336 },\n },\n {\n  { -23376435,1410446,-22253753,-12899614,30867635,15826977,17693930,544696,-11985298,12422646 },\n  { 31117226,-12215734,-13502838,6561947,-9876867,-12757670,-5118685,-4096706,29120153,13924425 },\n  { -17400879,-14233209,19675799,-2734756,-11006962,-5858820,-9383939,-11317700,7240931,-237388 },\n },\n {\n  { -31361739,-11346780,-15007447,-5856218,-22453340,-12152771,1222336,4389483,3293637,-15551743 },\n  { -16684801,-14444245,11038544,11054958,-13801175,-3338533,-24319580,7733547,12796905,-6335822 },\n  { -8759414,-10817836,-25418864,10783769,-30615557,-9746811,-28253339,3647836,3222231,-11160462 },\n },\n {\n  { 18606113,1693100,-25448386,-15170272,4112353,10045021,23603893,-2048234,-7550776,2484985 },\n  { 9255317,-3131197,-12156162,-1004256,13098013,-9214866,16377220,-2102812,-19802075,-3034702 },\n  { -22729289,7496160,-5742199,11329249,19991973,-3347502,-31718148,9936966,-30097688,-10618797 },\n },\n {\n  { 21878590,-5001297,4338336,13643897,-3036865,13160960,19708896,5415497,-7360503,-4109293 },\n  { 27736861,10103576,12500508,8502413,-3413016,-9633558,10436918,-1550276,-23659143,-8132100 },\n  { 19492550,-12104365,-29681976,-852630,-3208171,12403437,30066266,8367329,13243957,8709688 },\n },\n},\n{\n {\n  { 12015105,2801261,28198131,10151021,24818120,-4743133,-11194191,-5645734,5150968,7274186 },\n  { 2831366,-12492146,1478975,6122054,23825128,-12733586,31097299,6083058,31021603,-9793610 },\n  { -2529932,-2229646,445613,10720828,-13849527,-11505937,-23507731,16354465,15067285,-14147707 },\n },\n {\n  { 7840942,14037873,-33364863,15934016,-728213,-3642706,21403988,1057586,-19379462,-12403220 },\n  { 915865,-16469274,15608285,-8789130,-24357026,6060030,-17371319,8410997,-7220461,16527025 },\n  { 32922597,-556987,20336074,-16184568,10903705,-5384487,16957574,52992,23834301,6588044 },\n },\n {\n  { 32752030,11232950,3381995,-8714866,22652988,-10744103,17159699,16689107,-20314580,-1305992 },\n  { -4689649,9166776,-25710296,-10847306,11576752,12733943,7924251,-2752281,1976123,-7249027 },\n  { 21251222,16309901,-2983015,-6783122,30810597,12967303,156041,-3371252,12331345,-8237197 },\n },\n {\n  { 8651614,-4477032,-16085636,-4996994,13002507,2950805,29054427,-5106970,10008136,-4667901 },\n  { 31486080,15114593,-14261250,12951354,14369431,-7387845,16347321,-13662089,8684155,-10532952 },\n  { 19443825,11385320,24468943,-9659068,-23919258,2187569,-26263207,-6086921,31316348,14219878 },\n },\n {\n  { -28594490,1193785,32245219,11392485,31092169,15722801,27146014,6992409,29126555,9207390 },\n  { 32382935,1110093,18477781,11028262,-27411763,-7548111,-4980517,10843782,-7957600,-14435730 },\n  { 2814918,7836403,27519878,-7868156,-20894015,-11553689,-21494559,8550130,28346258,1994730 },\n },\n {\n  { -19578299,8085545,-14000519,-3948622,2785838,-16231307,-19516951,7174894,22628102,8115180 },\n  { -30405132,955511,-11133838,-15078069,-32447087,-13278079,-25651578,3317160,-9943017,930272 },\n  { -15303681,-6833769,28856490,1357446,23421993,1057177,24091212,-1388970,-22765376,-10650715 },\n },\n {\n  { -22751231,-5303997,-12907607,-12768866,-15811511,-7797053,-14839018,-16554220,-1867018,8398970 },\n  { -31969310,2106403,-4736360,1362501,12813763,16200670,22981545,-6291273,18009408,-15772772 },\n  { -17220923,-9545221,-27784654,14166835,29815394,7444469,29551787,-3727419,19288549,1325865 },\n },\n {\n  { 15100157,-15835752,-23923978,-1005098,-26450192,15509408,12376730,-3479146,33166107,-8042750 },\n  { 20909231,13023121,-9209752,16251778,-5778415,-8094914,12412151,10018715,2213263,-13878373 },\n  { 32529814,-11074689,30361439,-16689753,-9135940,1513226,22922121,6382134,-5766928,8371348 },\n },\n},\n{\n {\n  { 9923462,11271500,12616794,3544722,-29998368,-1721626,12891687,-8193132,-26442943,10486144 },\n  { -22597207,-7012665,8587003,-8257861,4084309,-12970062,361726,2610596,-23921530,-11455195 },\n  { 5408411,-1136691,-4969122,10561668,24145918,14240566,31319731,-4235541,19985175,-3436086 },\n },\n {\n  { -13994457,16616821,14549246,3341099,32155958,13648976,-17577068,8849297,65030,8370684 },\n  { -8320926,-12049626,31204563,5839400,-20627288,-1057277,-19442942,6922164,12743482,-9800518 },\n  { -2361371,12678785,28815050,4759974,-23893047,4884717,23783145,11038569,18800704,255233 },\n },\n {\n  { -5269658,-1773886,13957886,7990715,23132995,728773,13393847,9066957,19258688,-14753793 },\n  { -2936654,-10827535,-10432089,14516793,-3640786,4372541,-31934921,2209390,-1524053,2055794 },\n  { 580882,16705327,5468415,-2683018,-30926419,-14696000,-7203346,-8994389,-30021019,7394435 },\n },\n {\n  { 23838809,1822728,-15738443,15242727,8318092,-3733104,-21672180,-3492205,-4821741,14799921 },\n  { 13345610,9759151,3371034,-16137791,16353039,8577942,31129804,13496856,-9056018,7402518 },\n  { 2286874,-4435931,-20042458,-2008336,-13696227,5038122,11006906,-15760352,8205061,1607563 },\n },\n {\n  { 14414086,-8002132,3331830,-3208217,22249151,-5594188,18364661,-2906958,30019587,-9029278 },\n  { -27688051,1585953,-10775053,931069,-29120221,-11002319,-14410829,12029093,9944378,8024 },\n  { 4368715,-3709630,29874200,-15022983,-20230386,-11410704,-16114594,-999085,-8142388,5640030 },\n },\n {\n  { 10299610,13746483,11661824,16234854,7630238,5998374,9809887,-16694564,15219798,-14327783 },\n  { 27425505,-5719081,3055006,10660664,23458024,595578,-15398605,-1173195,-18342183,9742717 },\n  { 6744077,2427284,26042789,2720740,-847906,1118974,32324614,7406442,12420155,1994844 },\n },\n {\n  { 14012521,-5024720,-18384453,-9578469,-26485342,-3936439,-13033478,-10909803,24319929,-6446333 },\n  { 16412690,-4507367,10772641,15929391,-17068788,-4658621,10555945,-10484049,-30102368,-4739048 },\n  { 22397382,-7767684,-9293161,-12792868,17166287,-9755136,-27333065,6199366,21880021,-12250760 },\n },\n {\n  { -4283307,5368523,-31117018,8163389,-30323063,3209128,16557151,8890729,8840445,4957760 },\n  { -15447727,709327,-6919446,-10870178,-29777922,6522332,-21720181,12130072,-14796503,5005757 },\n  { -2114751,-14308128,23019042,15765735,-25269683,6002752,10183197,-13239326,-16395286,-2176112 },\n },\n},\n{\n {\n  { -19025756,1632005,13466291,-7995100,-23640451,16573537,-32013908,-3057104,22208662,2000468 },\n  { 3065073,-1412761,-25598674,-361432,-17683065,-5703415,-8164212,11248527,-3691214,-7414184 },\n  { 10379208,-6045554,8877319,1473647,-29291284,-12507580,16690915,2553332,-3132688,16400289 },\n },\n {\n  { 15716668,1254266,-18472690,7446274,-8448918,6344164,-22097271,-7285580,26894937,9132066 },\n  { 24158887,12938817,11085297,-8177598,-28063478,-4457083,-30576463,64452,-6817084,-2692882 },\n  { 13488534,7794716,22236231,5989356,25426474,-12578208,2350710,-3418511,-4688006,2364226 },\n },\n {\n  { 16335052,9132434,25640582,6678888,1725628,8517937,-11807024,-11697457,15445875,-7798101 },\n  { 29004207,-7867081,28661402,-640412,-12794003,-7943086,31863255,-4135540,-278050,-15759279 },\n  { -6122061,-14866665,-28614905,14569919,-10857999,-3591829,10343412,-6976290,-29828287,-10815811 },\n },\n {\n  { 27081650,3463984,14099042,-4517604,1616303,-6205604,29542636,15372179,17293797,960709 },\n  { 20263915,11434237,-5765435,11236810,13505955,-10857102,-16111345,6493122,-19384511,7639714 },\n  { -2830798,-14839232,25403038,-8215196,-8317012,-16173699,18006287,-16043750,29994677,-15808121 },\n },\n {\n  { 9769828,5202651,-24157398,-13631392,-28051003,-11561624,-24613141,-13860782,-31184575,709464 },\n  { 12286395,13076066,-21775189,-1176622,-25003198,4057652,-32018128,-8890874,16102007,13205847 },\n  { 13733362,5599946,10557076,3195751,-5557991,8536970,-25540170,8525972,10151379,10394400 },\n },\n {\n  { 4024660,-16137551,22436262,12276534,-9099015,-2686099,19698229,11743039,-33302334,8934414 },\n  { -15879800,-4525240,-8580747,-2934061,14634845,-698278,-9449077,3137094,-11536886,11721158 },\n  { 17555939,-5013938,8268606,2331751,-22738815,9761013,9319229,8835153,-9205489,-1280045 },\n },\n {\n  { -461409,-7830014,20614118,16688288,-7514766,-4807119,22300304,505429,6108462,-6183415 },\n  { -5070281,12367917,-30663534,3234473,32617080,-8422642,29880583,-13483331,-26898490,-7867459 },\n  { -31975283,5726539,26934134,10237677,-3173717,-605053,24199304,3795095,7592688,-14992079 },\n },\n {\n  { 21594432,-14964228,17466408,-4077222,32537084,2739898,6407723,12018833,-28256052,4298412 },\n  { -20650503,-11961496,-27236275,570498,3767144,-1717540,13891942,-1569194,13717174,10805743 },\n  { -14676630,-15644296,15287174,11927123,24177847,-8175568,-796431,14860609,-26938930,-5863836 },\n },\n},\n{\n {\n  { 12962541,5311799,-10060768,11658280,18855286,-7954201,13286263,-12808704,-4381056,9882022 },\n  { 18512079,11319350,-20123124,15090309,18818594,5271736,-22727904,3666879,-23967430,-3299429 },\n  { -6789020,-3146043,16192429,13241070,15898607,-14206114,-10084880,-6661110,-2403099,5276065 },\n },\n {\n  { 30169808,-5317648,26306206,-11750859,27814964,7069267,7152851,3684982,1449224,13082861 },\n  { 10342826,3098505,2119311,193222,25702612,12233820,23697382,15056736,-21016438,-8202000 },\n  { -33150110,3261608,22745853,7948688,19370557,-15177665,-26171976,6482814,-10300080,-11060101 },\n },\n {\n  { 32869458,-5408545,25609743,15678670,-10687769,-15471071,26112421,2521008,-22664288,6904815 },\n  { 29506923,4457497,3377935,-9796444,-30510046,12935080,1561737,3841096,-29003639,-6657642 },\n  { 10340844,-6630377,-18656632,-2278430,12621151,-13339055,30878497,-11824370,-25584551,5181966 },\n },\n {\n  { 25940115,-12658025,17324188,-10307374,-8671468,15029094,24396252,-16450922,-2322852,-12388574 },\n  { -21765684,9916823,-1300409,4079498,-1028346,11909559,1782390,12641087,20603771,-6561742 },\n  { -18882287,-11673380,24849422,11501709,13161720,-4768874,1925523,11914390,4662781,7820689 },\n },\n {\n  { 12241050,-425982,8132691,9393934,32846760,-1599620,29749456,12172924,16136752,15264020 },\n  { -10349955,-14680563,-8211979,2330220,-17662549,-14545780,10658213,6671822,19012087,3772772 },\n  { 3753511,-3421066,10617074,2028709,14841030,-6721664,28718732,-15762884,20527771,12988982 },\n },\n {\n  { -14822485,-5797269,-3707987,12689773,-898983,-10914866,-24183046,-10564943,3299665,-12424953 },\n  { -16777703,-15253301,-9642417,4978983,3308785,8755439,6943197,6461331,-25583147,8991218 },\n  { -17226263,1816362,-1673288,-6086439,31783888,-8175991,-32948145,7417950,-30242287,1507265 },\n },\n {\n  { 29692663,6829891,-10498800,4334896,20945975,-11906496,-28887608,8209391,14606362,-10647073 },\n  { -3481570,8707081,32188102,5672294,22096700,1711240,-33020695,9761487,4170404,-2085325 },\n  { -11587470,14855945,-4127778,-1531857,-26649089,15084046,22186522,16002000,-14276837,-8400798 },\n },\n {\n  { -4811456,13761029,-31703877,-2483919,-3312471,7869047,-7113572,-9620092,13240845,10965870 },\n  { -7742563,-8256762,-14768334,-13656260,-23232383,12387166,4498947,14147411,29514390,4302863 },\n  { -13413405,-12407859,20757302,-13801832,14785143,8976368,-5061276,-2144373,17846988,-13971927 },\n },\n},\n{\n {\n  { -2244452,-754728,-4597030,-1066309,-6247172,1455299,-21647728,-9214789,-5222701,12650267 },\n  { -9906797,-16070310,21134160,12198166,-27064575,708126,387813,13770293,-19134326,10958663 },\n  { 22470984,12369526,23446014,-5441109,-21520802,-9698723,-11772496,-11574455,-25083830,4271862 },\n },\n {\n  { -25169565,-10053642,-19909332,15361595,-5984358,2159192,75375,-4278529,-32526221,8469673 },\n  { 15854970,4148314,-8893890,7259002,11666551,13824734,-30531198,2697372,24154791,-9460943 },\n  { 15446137,-15806644,29759747,14019369,30811221,-9610191,-31582008,12840104,24913809,9815020 },\n },\n {\n  { -4709286,-5614269,-31841498,-12288893,-14443537,10799414,-9103676,13438769,18735128,9466238 },\n  { 11933045,9281483,5081055,-5183824,-2628162,-4905629,-7727821,-10896103,-22728655,16199064 },\n  { 14576810,379472,-26786533,-8317236,-29426508,-10812974,-102766,1876699,30801119,2164795 },\n },\n {\n  { 15995086,3199873,13672555,13712240,-19378835,-4647646,-13081610,-15496269,-13492807,1268052 },\n  { -10290614,-3659039,-3286592,10948818,23037027,3794475,-3470338,-12600221,-17055369,3565904 },\n  { 29210088,-9419337,-5919792,-4952785,10834811,-13327726,-16512102,-10820713,-27162222,-14030531 },\n },\n {\n  { -13161890,15508588,16663704,-8156150,-28349942,9019123,-29183421,-3769423,2244111,-14001979 },\n  { -5152875,-3800936,-9306475,-6071583,16243069,14684434,-25673088,-16180800,13491506,4641841 },\n  { 10813417,643330,-19188515,-728916,30292062,-16600078,27548447,-7721242,14476989,-12767431 },\n },\n {\n  { 10292079,9984945,6481436,8279905,-7251514,7032743,27282937,-1644259,-27912810,12651324 },\n  { -31185513,-813383,22271204,11835308,10201545,15351028,17099662,3988035,21721536,-3148940 },\n  { 10202177,-6545839,-31373232,-9574638,-32150642,-8119683,-12906320,3852694,13216206,14842320 },\n },\n {\n  { -15815640,-10601066,-6538952,-7258995,-6984659,-6581778,-31500847,13765824,-27434397,9900184 },\n  { 14465505,-13833331,-32133984,-14738873,-27443187,12990492,33046193,15796406,-7051866,-8040114 },\n  { 30924417,-8279620,6359016,-12816335,16508377,9071735,-25488601,15413635,9524356,-7018878 },\n },\n {\n  { 12274201,-13175547,32627641,-1785326,6736625,13267305,5237659,-5109483,15663516,4035784 },\n  { -2951309,8903985,17349946,601635,-16432815,-4612556,-13732739,-15889334,-22258478,4659091 },\n  { -16916263,-4952973,-30393711,-15158821,20774812,15897498,5736189,15026997,-2178256,-13455585 },\n },\n},\n{\n {\n  { -8858980,-2219056,28571666,-10155518,-474467,-10105698,-3801496,278095,23440562,-290208 },\n  { 10226241,-5928702,15139956,120818,-14867693,5218603,32937275,11551483,-16571960,-7442864 },\n  { 17932739,-12437276,-24039557,10749060,11316803,7535897,22503767,5561594,-3646624,3898661 },\n },\n {\n  { 7749907,-969567,-16339731,-16464,-25018111,15122143,-1573531,7152530,21831162,1245233 },\n  { 26958459,-14658026,4314586,8346991,-5677764,11960072,-32589295,-620035,-30402091,-16716212 },\n  { -12165896,9166947,33491384,13673479,29787085,13096535,6280834,14587357,-22338025,13987525 },\n },\n {\n  { -24349909,7778775,21116000,15572597,-4833266,-5357778,-4300898,-5124639,-7469781,-2858068 },\n  { 9681908,-6737123,-31951644,13591838,-6883821,386950,31622781,6439245,-14581012,4091397 },\n  { -8426427,1470727,-28109679,-1596990,3978627,-5123623,-19622683,12092163,29077877,-14741988 },\n },\n {\n  { 5269168,-6859726,-13230211,-8020715,25932563,1763552,-5606110,-5505881,-20017847,2357889 },\n  { 32264008,-15407652,-5387735,-1160093,-2091322,-3946900,23104804,-12869908,5727338,189038 },\n  { 14609123,-8954470,-6000566,-16622781,-14577387,-7743898,-26745169,10942115,-25888931,-14884697 },\n },\n {\n  { 20513500,5557931,-15604613,7829531,26413943,-2019404,-21378968,7471781,13913677,-5137875 },\n  { -25574376,11967826,29233242,12948236,-6754465,4713227,-8940970,14059180,12878652,8511905 },\n  { -25656801,3393631,-2955415,-7075526,-2250709,9366908,-30223418,6812974,5568676,-3127656 },\n },\n {\n  { 11630004,12144454,2116339,13606037,27378885,15676917,-17408753,-13504373,-14395196,8070818 },\n  { 27117696,-10007378,-31282771,-5570088,1127282,12772488,-29845906,10483306,-11552749,-1028714 },\n  { 10637467,-5688064,5674781,1072708,-26343588,-6982302,-1683975,9177853,-27493162,15431203 },\n },\n {\n  { 20525145,10892566,-12742472,12779443,-29493034,16150075,-28240519,14943142,-15056790,-7935931 },\n  { -30024462,5626926,-551567,-9981087,753598,11981191,25244767,-3239766,-3356550,9594024 },\n  { -23752644,2636870,-5163910,-10103818,585134,7877383,11345683,-6492290,13352335,-10977084 },\n },\n {\n  { -1931799,-5407458,3304649,-12884869,17015806,-4877091,-29783850,-7752482,-13215537,-319204 },\n  { 20239939,6607058,6203985,3483793,-18386976,-779229,-20723742,15077870,-22750759,14523817 },\n  { 27406042,-6041657,27423596,-4497394,4996214,10002360,-28842031,-4545494,-30172742,-4805667 },\n },\n},\n{\n {\n  { 11374242,12660715,17861383,-12540833,10935568,1099227,-13886076,-9091740,-27727044,11358504 },\n  { -12730809,10311867,1510375,10778093,-2119455,-9145702,32676003,11149336,-26123651,4985768 },\n  { -19096303,341147,-6197485,-239033,15756973,-8796662,-983043,13794114,-19414307,-15621255 },\n },\n {\n  { 6490081,11940286,25495923,-7726360,8668373,-8751316,3367603,6970005,-1691065,-9004790 },\n  { 1656497,13457317,15370807,6364910,13605745,8362338,-19174622,-5475723,-16796596,-5031438 },\n  { -22273315,-13524424,-64685,-4334223,-18605636,-10921968,-20571065,-7007978,-99853,-10237333 },\n },\n {\n  { 17747465,10039260,19368299,-4050591,-20630635,-16041286,31992683,-15857976,-29260363,-5511971 },\n  { 31932027,-4986141,-19612382,16366580,22023614,88450,11371999,-3744247,4882242,-10626905 },\n  { 29796507,37186,19818052,10115756,-11829032,3352736,18551198,3272828,-5190932,-4162409 },\n },\n {\n  { 12501286,4044383,-8612957,-13392385,-32430052,5136599,-19230378,-3529697,330070,-3659409 },\n  { 6384877,2899513,17807477,7663917,-2358888,12363165,25366522,-8573892,-271295,12071499 },\n  { -8365515,-4042521,25133448,-4517355,-6211027,2265927,-32769618,1936675,-5159697,3829363 },\n },\n {\n  { 28425966,-5835433,-577090,-4697198,-14217555,6870930,7921550,-6567787,26333140,14267664 },\n  { -11067219,11871231,27385719,-10559544,-4585914,-11189312,10004786,-8709488,-21761224,8930324 },\n  { -21197785,-16396035,25654216,-1725397,12282012,11008919,1541940,4757911,-26491501,-16408940 },\n },\n {\n  { 13537262,-7759490,-20604840,10961927,-5922820,-13218065,-13156584,6217254,-15943699,13814990 },\n  { -17422573,15157790,18705543,29619,24409717,-260476,27361681,9257833,-1956526,-1776914 },\n  { -25045300,-10191966,15366585,15166509,-13105086,8423556,-29171540,12361135,-18685978,4578290 },\n },\n {\n  { 24579768,3711570,1342322,-11180126,-27005135,14124956,-22544529,14074919,21964432,8235257 },\n  { -6528613,-2411497,9442966,-5925588,12025640,-1487420,-2981514,-1669206,13006806,2355433 },\n  { -16304899,-13605259,-6632427,-5142349,16974359,-10911083,27202044,1719366,1141648,-12796236 },\n },\n {\n  { -12863944,-13219986,-8318266,-11018091,-6810145,-4843894,13475066,-3133972,32674895,13715045 },\n  { 11423335,-5468059,32344216,8962751,24989809,9241752,-13265253,16086212,-28740881,-15642093 },\n  { -1409668,12530728,-6368726,10847387,19531186,-14132160,-11709148,7791794,-27245943,4383347 },\n },\n},\n{\n {\n  { -28970898,5271447,-1266009,-9736989,-12455236,16732599,-4862407,-4906449,27193557,6245191 },\n  { -15193956,5362278,-1783893,2695834,4960227,12840725,23061898,3260492,22510453,8577507 },\n  { -12632451,11257346,-32692994,13548177,-721004,10879011,31168030,13952092,-29571492,-3635906 },\n },\n {\n  { 3877321,-9572739,32416692,5405324,-11004407,-13656635,3759769,11935320,5611860,8164018 },\n  { -16275802,14667797,15906460,12155291,-22111149,-9039718,32003002,-8832289,5773085,-8422109 },\n  { -23788118,-8254300,1950875,8937633,18686727,16459170,-905725,12376320,31632953,190926 },\n },\n {\n  { -24593607,-16138885,-8423991,13378746,14162407,6901328,-8288749,4508564,-25341555,-3627528 },\n  { 8884438,-5884009,6023974,10104341,-6881569,-4941533,18722941,-14786005,-1672488,827625 },\n  { -32720583,-16289296,-32503547,7101210,13354605,2659080,-1800575,-14108036,-24878478,1541286 },\n },\n {\n  { 2901347,-1117687,3880376,-10059388,-17620940,-3612781,-21802117,-3567481,20456845,-1885033 },\n  { 27019610,12299467,-13658288,-1603234,-12861660,-4861471,-19540150,-5016058,29439641,15138866 },\n  { 21536104,-6626420,-32447818,-10690208,-22408077,5175814,-5420040,-16361163,7779328,109896 },\n },\n {\n  { 30279744,14648750,-8044871,6425558,13639621,-743509,28698390,12180118,23177719,-554075 },\n  { 26572847,3405927,-31701700,12890905,-19265668,5335866,-6493768,2378492,4439158,-13279347 },\n  { -22716706,3489070,-9225266,-332753,18875722,-1140095,14819434,-12731527,-17717757,-5461437 },\n },\n {\n  { -5056483,16566551,15953661,3767752,-10436499,15627060,-820954,2177225,8550082,-15114165 },\n  { -18473302,16596775,-381660,15663611,22860960,15585581,-27844109,-3582739,-23260460,-8428588 },\n  { -32480551,15707275,-8205912,-5652081,29464558,2713815,-22725137,15860482,-21902570,1494193 },\n },\n {\n  { -19562091,-14087393,-25583872,-9299552,13127842,759709,21923482,16529112,8742704,12967017 },\n  { -28464899,1553205,32536856,-10473729,-24691605,-406174,-8914625,-2933896,-29903758,15553883 },\n  { 21877909,3230008,9881174,10539357,-4797115,2841332,11543572,14513274,19375923,-12647961 },\n },\n {\n  { 8832269,-14495485,13253511,5137575,5037871,4078777,24880818,-6222716,2862653,9455043 },\n  { 29306751,5123106,20245049,-14149889,9592566,8447059,-2077124,-2990080,15511449,4789663 },\n  { -20679756,7004547,8824831,-9434977,-4045704,-3750736,-5754762,108893,23513200,16652362 },\n },\n},\n{\n {\n  { -33256173,4144782,-4476029,-6579123,10770039,-7155542,-6650416,-12936300,-18319198,10212860 },\n  { 2756081,8598110,7383731,-6859892,22312759,-1105012,21179801,2600940,-9988298,-12506466 },\n  { -24645692,13317462,-30449259,-15653928,21365574,-10869657,11344424,864440,-2499677,-16710063 },\n },\n {\n  { -26432803,6148329,-17184412,-14474154,18782929,-275997,-22561534,211300,2719757,4940997 },\n  { -1323882,3911313,-6948744,14759765,-30027150,7851207,21690126,8518463,26699843,5276295 },\n  { -13149873,-6429067,9396249,365013,24703301,-10488939,1321586,149635,-15452774,7159369 },\n },\n {\n  { 9987780,-3404759,17507962,9505530,9731535,-2165514,22356009,8312176,22477218,-8403385 },\n  { 18155857,-16504990,19744716,9006923,15154154,-10538976,24256460,-4864995,-22548173,9334109 },\n  { 2986088,-4911893,10776628,-3473844,10620590,-7083203,-21413845,14253545,-22587149,536906 },\n },\n {\n  { 4377756,8115836,24567078,15495314,11625074,13064599,7390551,10589625,10838060,-15420424 },\n  { -19342404,867880,9277171,-3218459,-14431572,-1986443,19295826,-15796950,6378260,699185 },\n  { 7895026,4057113,-7081772,-13077756,-17886831,-323126,-716039,15693155,-5045064,-13373962 },\n },\n {\n  { -7737563,-5869402,-14566319,-7406919,11385654,13201616,31730678,-10962840,-3918636,-9669325 },\n  { 10188286,-15770834,-7336361,13427543,22223443,14896287,30743455,7116568,-21786507,5427593 },\n  { 696102,13206899,27047647,-10632082,15285305,-9853179,10798490,-4578720,19236243,12477404 },\n },\n {\n  { -11229439,11243796,-17054270,-8040865,-788228,-8167967,-3897669,11180504,-23169516,7733644 },\n  { 17800790,-14036179,-27000429,-11766671,23887827,3149671,23466177,-10538171,10322027,15313801 },\n  { 26246234,11968874,32263343,-5468728,6830755,-13323031,-15794704,-101982,-24449242,10890804 },\n },\n {\n  { -31365647,10271363,-12660625,-6267268,16690207,-13062544,-14982212,16484931,25180797,-5334884 },\n  { -586574,10376444,-32586414,-11286356,19801893,10997610,2276632,9482883,316878,13820577 },\n  { -9882808,-4510367,-2115506,16457136,-11100081,11674996,30756178,-7515054,30696930,-3712849 },\n },\n {\n  { 32988917,-9603412,12499366,7910787,-10617257,-11931514,-7342816,-9985397,-32349517,7392473 },\n  { -8855661,15927861,9866406,-3649411,-2396914,-16655781,-30409476,-9134995,25112947,-2926644 },\n  { -2504044,-436966,25621774,-5678772,15085042,-5479877,-24884878,-13526194,5537438,-13914319 },\n },\n},\n{\n {\n  { -11225584,2320285,-9584280,10149187,-33444663,5808648,-14876251,-1729667,31234590,6090599 },\n  { -9633316,116426,26083934,2897444,-6364437,-2688086,609721,15878753,-6970405,-9034768 },\n  { -27757857,247744,-15194774,-9002551,23288161,-10011936,-23869595,6503646,20650474,1804084 },\n },\n {\n  { -27589786,15456424,8972517,8469608,15640622,4439847,3121995,-10329713,27842616,-202328 },\n  { -15306973,2839644,22530074,10026331,4602058,5048462,28248656,5031932,-11375082,12714369 },\n  { 20807691,-7270825,29286141,11421711,-27876523,-13868230,-21227475,1035546,-19733229,12796920 },\n },\n {\n  { 12076899,-14301286,-8785001,-11848922,-25012791,16400684,-17591495,-12899438,3480665,-15182815 },\n  { -32361549,5457597,28548107,7833186,7303070,-11953545,-24363064,-15921875,-33374054,2771025 },\n  { -21389266,421932,26597266,6860826,22486084,-6737172,-17137485,-4210226,-24552282,15673397 },\n },\n {\n  { -20184622,2338216,19788685,-9620956,-4001265,-8740893,-20271184,4733254,3727144,-12934448 },\n  { 6120119,814863,-11794402,-622716,6812205,-15747771,2019594,7975683,31123697,-10958981 },\n  { 30069250,-11435332,30434654,2958439,18399564,-976289,12296869,9204260,-16432438,9648165 },\n },\n {\n  { 32705432,-1550977,30705658,7451065,-11805606,9631813,3305266,5248604,-26008332,-11377501 },\n  { 17219865,2375039,-31570947,-5575615,-19459679,9219903,294711,15298639,2662509,-16297073 },\n  { -1172927,-7558695,-4366770,-4287744,-21346413,-8434326,32087529,-1222777,32247248,-14389861 },\n },\n {\n  { 14312628,1221556,17395390,-8700143,-4945741,-8684635,-28197744,-9637817,-16027623,-13378845 },\n  { -1428825,-9678990,-9235681,6549687,-7383069,-468664,23046502,9803137,17597934,2346211 },\n  { 18510800,15337574,26171504,981392,-22241552,7827556,-23491134,-11323352,3059833,-11782870 },\n },\n {\n  { 10141598,6082907,17829293,-1947643,9830092,13613136,-25556636,-5544586,-33502212,3592096 },\n  { 33114168,-15889352,-26525686,-13343397,33076705,8716171,1151462,1521897,-982665,-6837803 },\n  { -32939165,-4255815,23947181,-324178,-33072974,-12305637,-16637686,3891704,26353178,693168 },\n },\n {\n  { 30374239,1595580,-16884039,13186931,4600344,406904,9585294,-400668,31375464,14369965 },\n  { -14370654,-7772529,1510301,6434173,-18784789,-6262728,32732230,-13108839,17901441,16011505 },\n  { 18171223,-11934626,-12500402,15197122,-11038147,-15230035,-19172240,-16046376,8764035,12309598 },\n },\n},\n{\n {\n  { 5975908,-5243188,-19459362,-9681747,-11541277,14015782,-23665757,1228319,17544096,-10593782 },\n  { 5811932,-1715293,3442887,-2269310,-18367348,-8359541,-18044043,-15410127,-5565381,12348900 },\n  { -31399660,11407555,25755363,6891399,-3256938,14872274,-24849353,8141295,-10632534,-585479 },\n },\n {\n  { -12675304,694026,-5076145,13300344,14015258,-14451394,-9698672,-11329050,30944593,1130208 },\n  { 8247766,-6710942,-26562381,-7709309,-14401939,-14648910,4652152,2488540,23550156,-271232 },\n  { 17294316,-3788438,7026748,15626851,22990044,113481,2267737,-5908146,-408818,-137719 },\n },\n {\n  { 16091085,-16253926,18599252,7340678,2137637,-1221657,-3364161,14550936,3260525,-7166271 },\n  { -4910104,-13332887,18550887,10864893,-16459325,-7291596,-23028869,-13204905,-12748722,2701326 },\n  { -8574695,16099415,4629974,-16340524,-20786213,-6005432,-10018363,9276971,11329923,1862132 },\n },\n {\n  { 14763076,-15903608,-30918270,3689867,3511892,10313526,-21951088,12219231,-9037963,-940300 },\n  { 8894987,-3446094,6150753,3013931,301220,15693451,-31981216,-2909717,-15438168,11595570 },\n  { 15214962,3537601,-26238722,-14058872,4418657,-15230761,13947276,10730794,-13489462,-4363670 },\n },\n {\n  { -2538306,7682793,32759013,263109,-29984731,-7955452,-22332124,-10188635,977108,699994 },\n  { -12466472,4195084,-9211532,550904,-15565337,12917920,19118110,-439841,-30534533,-14337913 },\n  { 31788461,-14507657,4799989,7372237,8808585,-14747943,9408237,-10051775,12493932,-5409317 },\n },\n {\n  { -25680606,5260744,-19235809,-6284470,-3695942,16566087,27218280,2607121,29375955,6024730 },\n  { 842132,-2794693,-4763381,-8722815,26332018,-12405641,11831880,6985184,-9940361,2854096 },\n  { -4847262,-7969331,2516242,-5847713,9695691,-7221186,16512645,960770,12121869,16648078 },\n },\n {\n  { -15218652,14667096,-13336229,2013717,30598287,-464137,-31504922,-7882064,20237806,2838411 },\n  { -19288047,4453152,15298546,-16178388,22115043,-15972604,12544294,-13470457,1068881,-12499905 },\n  { -9558883,-16518835,33238498,13506958,30505848,-1114596,-8486907,-2630053,12521378,4845654 },\n },\n {\n  { -28198521,10744108,-2958380,10199664,7759311,-13088600,3409348,-873400,-6482306,-12885870 },\n  { -23561822,6230156,-20382013,10655314,-24040585,-11621172,10477734,-1240216,-3113227,13974498 },\n  { 12966261,15550616,-32038948,-1615346,21025980,-629444,5642325,7188737,18895762,12629579 },\n },\n},\n{\n {\n  { 14741879,-14946887,22177208,-11721237,1279741,8058600,11758140,789443,32195181,3895677 },\n  { 10758205,15755439,-4509950,9243698,-4879422,6879879,-2204575,-3566119,-8982069,4429647 },\n  { -2453894,15725973,-20436342,-10410672,-5803908,-11040220,-7135870,-11642895,18047436,-15281743 },\n },\n {\n  { -25173001,-11307165,29759956,11776784,-22262383,-15820455,10993114,-12850837,-17620701,-9408468 },\n  { 21987233,700364,-24505048,14972008,-7774265,-5718395,32155026,2581431,-29958985,8773375 },\n  { -25568350,454463,-13211935,16126715,25240068,8594567,20656846,12017935,-7874389,-13920155 },\n },\n {\n  { 6028182,6263078,-31011806,-11301710,-818919,2461772,-31841174,-5468042,-1721788,-2776725 },\n  { -12278994,16624277,987579,-5922598,32908203,1248608,7719845,-4166698,28408820,6816612 },\n  { -10358094,-8237829,19549651,-12169222,22082623,16147817,20613181,13982702,-10339570,5067943 },\n },\n {\n  { -30505967,-3821767,12074681,13582412,-19877972,2443951,-19719286,12746132,5331210,-10105944 },\n  { 30528811,3601899,-1957090,4619785,-27361822,-15436388,24180793,-12570394,27679908,-1648928 },\n  { 9402404,-13957065,32834043,10838634,-26580150,-13237195,26653274,-8685565,22611444,-12715406 },\n },\n {\n  { 22190590,1118029,22736441,15130463,-30460692,-5991321,19189625,-4648942,4854859,6622139 },\n  { -8310738,-2953450,-8262579,-3388049,-10401731,-271929,13424426,-3567227,26404409,13001963 },\n  { -31241838,-15415700,-2994250,8939346,11562230,-12840670,-26064365,-11621720,-15405155,11020693 },\n },\n {\n  { 1866042,-7949489,-7898649,-10301010,12483315,13477547,3175636,-12424163,28761762,1406734 },\n  { -448555,-1777666,13018551,3194501,-9580420,-11161737,24760585,-4347088,25577411,-13378680 },\n  { -24290378,4759345,-690653,-1852816,2066747,10693769,-29595790,9884936,-9368926,4745410 },\n },\n {\n  { -9141284,6049714,-19531061,-4341411,-31260798,9944276,-15462008,-11311852,10931924,-11931931 },\n  { -16561513,14112680,-8012645,4817318,-8040464,-11414606,-22853429,10856641,-20470770,13434654 },\n  { 22759489,-10073434,-16766264,-1871422,13637442,-10168091,1765144,-12654326,28445307,-5364710 },\n },\n {\n  { 29875063,12493613,2795536,-3786330,1710620,15181182,-10195717,-8788675,9074234,1167180 },\n  { -26205683,11014233,-9842651,-2635485,-26908120,7532294,-18716888,-9535498,3843903,9367684 },\n  { -10969595,-6403711,9591134,9582310,11349256,108879,16235123,8601684,-139197,4242895 },\n },\n},\n{\n {\n  { 22092954,-13191123,-2042793,-11968512,32186753,-11517388,-6574341,2470660,-27417366,16625501 },\n  { -11057722,3042016,13770083,-9257922,584236,-544855,-7770857,2602725,-27351616,14247413 },\n  { 6314175,-10264892,-32772502,15957557,-10157730,168750,-8618807,14290061,27108877,-1180880 },\n },\n {\n  { -8586597,-7170966,13241782,10960156,-32991015,-13794596,33547976,-11058889,-27148451,981874 },\n  { 22833440,9293594,-32649448,-13618667,-9136966,14756819,-22928859,-13970780,-10479804,-16197962 },\n  { -7768587,3326786,-28111797,10783824,19178761,14905060,22680049,13906969,-15933690,3797899 },\n },\n {\n  { 21721356,-4212746,-12206123,9310182,-3882239,-13653110,23740224,-2709232,20491983,-8042152 },\n  { 9209270,-15135055,-13256557,-6167798,-731016,15289673,25947805,15286587,30997318,-6703063 },\n  { 7392032,16618386,23946583,-8039892,-13265164,-1533858,-14197445,-2321576,17649998,-250080 },\n },\n {\n  { -9301088,-14193827,30609526,-3049543,-25175069,-1283752,-15241566,-9525724,-2233253,7662146 },\n  { -17558673,1763594,-33114336,15908610,-30040870,-12174295,7335080,-8472199,-3174674,3440183 },\n  { -19889700,-5977008,-24111293,-9688870,10799743,-16571957,40450,-4431835,4862400,1133 },\n },\n {\n  { -32856209,-7873957,-5422389,14860950,-16319031,7956142,7258061,311861,-30594991,-7379421 },\n  { -3773428,-1565936,28985340,7499440,24445838,9325937,29727763,16527196,18278453,15405622 },\n  { -4381906,8508652,-19898366,-3674424,-5984453,15149970,-13313598,843523,-21875062,13626197 },\n },\n {\n  { 2281448,-13487055,-10915418,-2609910,1879358,16164207,-10783882,3953792,13340839,15928663 },\n  { 31727126,-7179855,-18437503,-8283652,2875793,-16390330,-25269894,-7014826,-23452306,5964753 },\n  { 4100420,-5959452,-17179337,6017714,-18705837,12227141,-26684835,11344144,2538215,-7570755 },\n },\n {\n  { -9433605,6123113,11159803,-2156608,30016280,14966241,-20474983,1485421,-629256,-15958862 },\n  { -26804558,4260919,11851389,9658551,-32017107,16367492,-20205425,-13191288,11659922,-11115118 },\n  { 26180396,10015009,-30844224,-8581293,5418197,9480663,2231568,-10170080,33100372,-1306171 },\n },\n {\n  { 15121113,-5201871,-10389905,15427821,-27509937,-15992507,21670947,4486675,-5931810,-14466380 },\n  { 16166486,-9483733,-11104130,6023908,-31926798,-1364923,2340060,-16254968,-10735770,-10039824 },\n  { 28042865,-3557089,-12126526,12259706,-3717498,-6945899,6766453,-8689599,18036436,5803270 },\n },\n},\n{\n {\n  { -817581,6763912,11803561,1585585,10958447,-2671165,23855391,4598332,-6159431,-14117438 },\n  { -31031306,-14256194,17332029,-2383520,31312682,-5967183,696309,50292,-20095739,11763584 },\n  { -594563,-2514283,-32234153,12643980,12650761,14811489,665117,-12613632,-19773211,-10713562 },\n },\n {\n  { 30464590,-11262872,-4127476,-12734478,19835327,-7105613,-24396175,2075773,-17020157,992471 },\n  { 18357185,-6994433,7766382,16342475,-29324918,411174,14578841,8080033,-11574335,-10601610 },\n  { 19598397,10334610,12555054,2555664,18821899,-10339780,21873263,16014234,26224780,16452269 },\n },\n {\n  { -30223925,5145196,5944548,16385966,3976735,2009897,-11377804,-7618186,-20533829,3698650 },\n  { 14187449,3448569,-10636236,-10810935,-22663880,-3433596,7268410,-10890444,27394301,12015369 },\n  { 19695761,16087646,28032085,12999827,6817792,11427614,20244189,-1312777,-13259127,-3402461 },\n },\n {\n  { 30860103,12735208,-1888245,-4699734,-16974906,2256940,-8166013,12298312,-8550524,-10393462 },\n  { -5719826,-11245325,-1910649,15569035,26642876,-7587760,-5789354,-15118654,-4976164,12651793 },\n  { -2848395,9953421,11531313,-5282879,26895123,-12697089,-13118820,-16517902,9768698,-2533218 },\n },\n {\n  { -24719459,1894651,-287698,-4704085,15348719,-8156530,32767513,12765450,4940095,10678226 },\n  { 18860224,15980149,-18987240,-1562570,-26233012,-11071856,-7843882,13944024,-24372348,16582019 },\n  { -15504260,4970268,-29893044,4175593,-20993212,-2199756,-11704054,15444560,-11003761,7989037 },\n },\n {\n  { 31490452,5568061,-2412803,2182383,-32336847,4531686,-32078269,6200206,-19686113,-14800171 },\n  { -17308668,-15879940,-31522777,-2831,-32887382,16375549,8680158,-16371713,28550068,-6857132 },\n  { -28126887,-5688091,16837845,-1820458,-6850681,12700016,-30039981,4364038,1155602,5988841 },\n },\n {\n  { 21890435,-13272907,-12624011,12154349,-7831873,15300496,23148983,-4470481,24618407,8283181 },\n  { -33136107,-10512751,9975416,6841041,-31559793,16356536,3070187,-7025928,1466169,10740210 },\n  { -1509399,-15488185,-13503385,-10655916,32799044,909394,-13938903,-5779719,-32164649,-15327040 },\n },\n {\n  { 3960823,-14267803,-28026090,-15918051,-19404858,13146868,15567327,951507,-3260321,-573935 },\n  { 24740841,5052253,-30094131,8961361,25877428,6165135,-24368180,14397372,-7380369,-6144105 },\n  { -28888365,3510803,-28103278,-1158478,-11238128,-10631454,-15441463,-14453128,-1625486,-6494814 },\n },\n},\n{\n {\n  { 793299,-9230478,8836302,-6235707,-27360908,-2369593,33152843,-4885251,-9906200,-621852 },\n  { 5666233,525582,20782575,-8038419,-24538499,14657740,16099374,1468826,-6171428,-15186581 },\n  { -4859255,-3779343,-2917758,-6748019,7778750,11688288,-30404353,-9871238,-1558923,-9863646 },\n },\n {\n  { 10896332,-7719704,824275,472601,-19460308,3009587,25248958,14783338,-30581476,-15757844 },\n  { 10566929,12612572,-31944212,11118703,-12633376,12362879,21752402,8822496,24003793,14264025 },\n  { 27713862,-7355973,-11008240,9227530,27050101,2504721,23886875,-13117525,13958495,-5732453 },\n },\n {\n  { -23481610,4867226,-27247128,3900521,29838369,-8212291,-31889399,-10041781,7340521,-15410068 },\n  { 4646514,-8011124,-22766023,-11532654,23184553,8566613,31366726,-1381061,-15066784,-10375192 },\n  { -17270517,12723032,-16993061,14878794,21619651,-6197576,27584817,3093888,-8843694,3849921 },\n },\n {\n  { -9064912,2103172,25561640,-15125738,-5239824,9582958,32477045,-9017955,5002294,-15550259 },\n  { -12057553,-11177906,21115585,-13365155,8808712,-12030708,16489530,13378448,-25845716,12741426 },\n  { -5946367,10645103,-30911586,15390284,-3286982,-7118677,24306472,15852464,28834118,-7646072 },\n },\n {\n  { -17335748,-9107057,-24531279,9434953,-8472084,-583362,-13090771,455841,20461858,5491305 },\n  { 13669248,-16095482,-12481974,-10203039,-14569770,-11893198,-24995986,11293807,-28588204,-9421832 },\n  { 28497928,6272777,-33022994,14470570,8906179,-1225630,18504674,-14165166,29867745,-8795943 },\n },\n {\n  { -16207023,13517196,-27799630,-13697798,24009064,-6373891,-6367600,-13175392,22853429,-4012011 },\n  { 24191378,16712145,-13931797,15217831,14542237,1646131,18603514,-11037887,12876623,-2112447 },\n  { 17902668,4518229,-411702,-2829247,26878217,5258055,-12860753,608397,16031844,3723494 },\n },\n {\n  { -28632773,12763728,-20446446,7577504,33001348,-13017745,17558842,-7872890,23896954,-4314245 },\n  { -20005381,-12011952,31520464,605201,2543521,5991821,-2945064,7229064,-9919646,-8826859 },\n  { 28816045,298879,-28165016,-15920938,19000928,-1665890,-12680833,-2949325,-18051778,-2082915 },\n },\n {\n  { 16000882,-344896,3493092,-11447198,-29504595,-13159789,12577740,16041268,-19715240,7847707 },\n  { 10151868,10572098,27312476,7922682,14825339,4723128,-32855931,-6519018,-10020567,3852848 },\n  { -11430470,15697596,-21121557,-4420647,5386314,15063598,16514493,-15932110,29330899,-15076224 },\n },\n},\n{\n {\n  { -25499735,-4378794,-15222908,-6901211,16615731,2051784,3303702,15490,-27548796,12314391 },\n  { 15683520,-6003043,18109120,-9980648,15337968,-5997823,-16717435,15921866,16103996,-3731215 },\n  { -23169824,-10781249,13588192,-1628807,-3798557,-1074929,-19273607,5402699,-29815713,-9841101 },\n },\n {\n  { 23190676,2384583,-32714340,3462154,-29903655,-1529132,-11266856,8911517,-25205859,2739713 },\n  { 21374101,-3554250,-33524649,9874411,15377179,11831242,-33529904,6134907,4931255,11987849 },\n  { -7732,-2978858,-16223486,7277597,105524,-322051,-31480539,13861388,-30076310,10117930 },\n },\n {\n  { -29501170,-10744872,-26163768,13051539,-25625564,5089643,-6325503,6704079,12890019,15728940 },\n  { -21972360,-11771379,-951059,-4418840,14704840,2695116,903376,-10428139,12885167,8311031 },\n  { -17516482,5352194,10384213,-13811658,7506451,13453191,26423267,4384730,1888765,-5435404 },\n },\n {\n  { -25817338,-3107312,-13494599,-3182506,30896459,-13921729,-32251644,-12707869,-19464434,-3340243 },\n  { -23607977,-2665774,-526091,4651136,5765089,4618330,6092245,14845197,17151279,-9854116 },\n  { -24830458,-12733720,-15165978,10367250,-29530908,-265356,22825805,-7087279,-16866484,16176525 },\n },\n {\n  { -23583256,6564961,20063689,3798228,-4740178,7359225,2006182,-10363426,-28746253,-10197509 },\n  { -10626600,-4486402,-13320562,-5125317,3432136,-6393229,23632037,-1940610,32808310,1099883 },\n  { 15030977,5768825,-27451236,-2887299,-6427378,-15361371,-15277896,-6809350,2051441,-15225865 },\n },\n {\n  { -3362323,-7239372,7517890,9824992,23555850,295369,5148398,-14154188,-22686354,16633660 },\n  { 4577086,-16752288,13249841,-15304328,19958763,-14537274,18559670,-10759549,8402478,-9864273 },\n  { -28406330,-1051581,-26790155,-907698,-17212414,-11030789,9453451,-14980072,17983010,9967138 },\n },\n {\n  { -25762494,6524722,26585488,9969270,24709298,1220360,-1677990,7806337,17507396,3651560 },\n  { -10420457,-4118111,14584639,15971087,-15768321,8861010,26556809,-5574557,-18553322,-11357135 },\n  { 2839101,14284142,4029895,3472686,14402957,12689363,-26642121,8459447,-5605463,-7621941 },\n },\n {\n  { -4839289,-3535444,9744961,2871048,25113978,3187018,-25110813,-849066,17258084,-7977739 },\n  { 18164541,-10595176,-17154882,-1542417,19237078,-9745295,23357533,-15217008,26908270,12150756 },\n  { -30264870,-7647865,5112249,-7036672,-1499807,-6974257,43168,-5537701,-32302074,16215819 },\n },\n},\n{\n {\n  { -6898905,9824394,-12304779,-4401089,-31397141,-6276835,32574489,12532905,-7503072,-8675347 },\n  { -27343522,-16515468,-27151524,-10722951,946346,16291093,254968,7168080,21676107,-1943028 },\n  { 21260961,-8424752,-16831886,-11920822,-23677961,3968121,-3651949,-6215466,-3556191,-7913075 },\n },\n {\n  { 16544754,13250366,-16804428,15546242,-4583003,12757258,-2462308,-8680336,-18907032,-9662799 },\n  { -2415239,-15577728,18312303,4964443,-15272530,-12653564,26820651,16690659,25459437,-4564609 },\n  { -25144690,11425020,28423002,-11020557,-6144921,-15826224,9142795,-2391602,-6432418,-1644817 },\n },\n {\n  { -23104652,6253476,16964147,-3768872,-25113972,-12296437,-27457225,-16344658,6335692,7249989 },\n  { -30333227,13979675,7503222,-12368314,-11956721,-4621693,-30272269,2682242,25993170,-12478523 },\n  { 4364628,5930691,32304656,-10044554,-8054781,15091131,22857016,-10598955,31820368,15075278 },\n },\n {\n  { 31879134,-8918693,17258761,90626,-8041836,-4917709,24162788,-9650886,-17970238,12833045 },\n  { 19073683,14851414,-24403169,-11860168,7625278,11091125,-19619190,2074449,-9413939,14905377 },\n  { 24483667,-11935567,-2518866,-11547418,-1553130,15355506,-25282080,9253129,27628530,-7555480 },\n },\n {\n  { 17597607,8340603,19355617,552187,26198470,-3176583,4593324,-9157582,-14110875,15297016 },\n  { 510886,14337390,-31785257,16638632,6328095,2713355,-20217417,-11864220,8683221,2921426 },\n  { 18606791,11874196,27155355,-5281482,-24031742,6265446,-25178240,-1278924,4674690,13890525 },\n },\n {\n  { 13609624,13069022,-27372361,-13055908,24360586,9592974,14977157,9835105,4389687,288396 },\n  { 9922506,-519394,13613107,5883594,-18758345,-434263,-12304062,8317628,23388070,16052080 },\n  { 12720016,11937594,-31970060,-5028689,26900120,8561328,-20155687,-11632979,-14754271,-10812892 },\n },\n {\n  { 15961858,14150409,26716931,-665832,-22794328,13603569,11829573,7467844,-28822128,929275 },\n  { 11038231,-11582396,-27310482,-7316562,-10498527,-16307831,-23479533,-9371869,-21393143,2465074 },\n  { 20017163,-4323226,27915242,1529148,12396362,15675764,13817261,-9658066,2463391,-4622140 },\n },\n {\n  { -16358878,-12663911,-12065183,4996454,-1256422,1073572,9583558,12851107,4003896,12673717 },\n  { -1731589,-15155870,-3262930,16143082,19294135,13385325,14741514,-9103726,7903886,2348101 },\n  { 24536016,-16515207,12715592,-3862155,1511293,10047386,-3842346,-7129159,-28377538,10048127 },\n },\n},\n{\n {\n  { -12622226,-6204820,30718825,2591312,-10617028,12192840,18873298,-7297090,-32297756,15221632 },\n  { -26478122,-11103864,11546244,-1852483,9180880,7656409,-21343950,2095755,29769758,6593415 },\n  { -31994208,-2907461,4176912,3264766,12538965,-868111,26312345,-6118678,30958054,8292160 },\n },\n {\n  { 31429822,-13959116,29173532,15632448,12174511,-2760094,32808831,3977186,26143136,-3148876 },\n  { 22648901,1402143,-22799984,13746059,7936347,365344,-8668633,-1674433,-3758243,-2304625 },\n  { -15491917,8012313,-2514730,-12702462,-23965846,-10254029,-1612713,-1535569,-16664475,8194478 },\n },\n {\n  { 27338066,-7507420,-7414224,10140405,-19026427,-6589889,27277191,8855376,28572286,3005164 },\n  { 26287124,4821776,25476601,-4145903,-3764513,-15788984,-18008582,1182479,-26094821,-13079595 },\n  { -7171154,3178080,23970071,6201893,-17195577,-4489192,-21876275,-13982627,32208683,-1198248 },\n },\n {\n  { -16657702,2817643,-10286362,14811298,6024667,13349505,-27315504,-10497842,-27672585,-11539858 },\n  { 15941029,-9405932,-21367050,8062055,31876073,-238629,-15278393,-1444429,15397331,-4130193 },\n  { 8934485,-13485467,-23286397,-13423241,-32446090,14047986,31170398,-1441021,-27505566,15087184 },\n },\n {\n  { -18357243,-2156491,24524913,-16677868,15520427,-6360776,-15502406,11461896,16788528,-5868942 },\n  { -1947386,16013773,21750665,3714552,-17401782,-16055433,-3770287,-10323320,31322514,-11615635 },\n  { 21426655,-5650218,-13648287,-5347537,-28812189,-4920970,-18275391,-14621414,13040862,-12112948 },\n },\n {\n  { 11293895,12478086,-27136401,15083750,-29307421,14748872,14555558,-13417103,1613711,4896935 },\n  { -25894883,15323294,-8489791,-8057900,25967126,-13425460,2825960,-4897045,-23971776,-11267415 },\n  { -15924766,-5229880,-17443532,6410664,3622847,10243618,20615400,12405433,-23753030,-8436416 },\n },\n {\n  { -7091295,12556208,-20191352,9025187,-17072479,4333801,4378436,2432030,23097949,-566018 },\n  { 4565804,-16025654,20084412,-7842817,1724999,189254,24767264,10103221,-18512313,2424778 },\n  { 366633,-11976806,8173090,-6890119,30788634,5745705,-7168678,1344109,-3642553,12412659 },\n },\n {\n  { -24001791,7690286,14929416,-168257,-32210835,-13412986,24162697,-15326504,-3141501,11179385 },\n  { 18289522,-14724954,8056945,16430056,-21729724,7842514,-6001441,-1486897,-18684645,-11443503 },\n  { 476239,6601091,-6152790,-9723375,17503545,-4863900,27672959,13403813,11052904,5219329 },\n },\n},\n{\n {\n  { 20678546,-8375738,-32671898,8849123,-5009758,14574752,31186971,-3973730,9014762,-8579056 },\n  { -13644050,-10350239,-15962508,5075808,-1514661,-11534600,-33102500,9160280,8473550,-3256838 },\n  { 24900749,14435722,17209120,-15292541,-22592275,9878983,-7689309,-16335821,-24568481,11788948 },\n },\n {\n  { -3118155,-11395194,-13802089,14797441,9652448,-6845904,-20037437,10410733,-24568470,-1458691 },\n  { -15659161,16736706,-22467150,10215878,-9097177,7563911,11871841,-12505194,-18513325,8464118 },\n  { -23400612,8348507,-14585951,-861714,-3950205,-6373419,14325289,8628612,33313881,-8370517 },\n },\n {\n  { -20186973,-4967935,22367356,5271547,-1097117,-4788838,-24805667,-10236854,-8940735,-5818269 },\n  { -6948785,-1795212,-32625683,-16021179,32635414,-7374245,15989197,-12838188,28358192,-4253904 },\n  { -23561781,-2799059,-32351682,-1661963,-9147719,10429267,-16637684,4072016,-5351664,5596589 },\n },\n {\n  { -28236598,-3390048,12312896,6213178,3117142,16078565,29266239,2557221,1768301,15373193 },\n  { -7243358,-3246960,-4593467,-7553353,-127927,-912245,-1090902,-4504991,-24660491,3442910 },\n  { -30210571,5124043,14181784,8197961,18964734,-11939093,22597931,7176455,-18585478,13365930 },\n },\n {\n  { -7877390,-1499958,8324673,4690079,6261860,890446,24538107,-8570186,-9689599,-3031667 },\n  { 25008904,-10771599,-4305031,-9638010,16265036,15721635,683793,-11823784,15723479,-15163481 },\n  { -9660625,12374379,-27006999,-7026148,-7724114,-12314514,11879682,5400171,519526,-1235876 },\n },\n {\n  { 22258397,-16332233,-7869817,14613016,-22520255,-2950923,-20353881,7315967,16648397,7605640 },\n  { -8081308,-8464597,-8223311,9719710,19259459,-15348212,23994942,-5281555,-9468848,4763278 },\n  { -21699244,9220969,-15730624,1084137,-25476107,-2852390,31088447,-7764523,-11356529,728112 },\n },\n {\n  { 26047220,-11751471,-6900323,-16521798,24092068,9158119,-4273545,-12555558,-29365436,-5498272 },\n  { 17510331,-322857,5854289,8403524,17133918,-3112612,-28111007,12327945,10750447,10014012 },\n  { -10312768,3936952,9156313,-8897683,16498692,-994647,-27481051,-666732,3424691,7540221 },\n },\n {\n  { 30322361,-6964110,11361005,-4143317,7433304,4989748,-7071422,-16317219,-9244265,15258046 },\n  { 13054562,-2779497,19155474,469045,-12482797,4566042,5631406,2711395,1062915,-5136345 },\n  { -19240248,-11254599,-29509029,-7499965,-5835763,13005411,-6066489,12194497,32960380,1459310 },\n },\n},\n{\n {\n  { 19852034,7027924,23669353,10020366,8586503,-6657907,394197,-6101885,18638003,-11174937 },\n  { 31395534,15098109,26581030,8030562,-16527914,-5007134,9012486,-7584354,-6643087,-5442636 },\n  { -9192165,-2347377,-1997099,4529534,25766844,607986,-13222,9677543,-32294889,-6456008 },\n },\n {\n  { -2444496,-149937,29348902,8186665,1873760,12489863,-30934579,-7839692,-7852844,-8138429 },\n  { -15236356,-15433509,7766470,746860,26346930,-10221762,-27333451,10754588,-9431476,5203576 },\n  { 31834314,14135496,-770007,5159118,20917671,-16768096,-7467973,-7337524,31809243,7347066 },\n },\n {\n  { -9606723,-11874240,20414459,13033986,13716524,-11691881,19797970,-12211255,15192876,-2087490 },\n  { -12663563,-2181719,1168162,-3804809,26747877,-14138091,10609330,12694420,33473243,-13382104 },\n  { 33184999,11180355,15832085,-11385430,-1633671,225884,15089336,-11023903,-6135662,14480053 },\n },\n {\n  { 31308717,-5619998,31030840,-1897099,15674547,-6582883,5496208,13685227,27595050,8737275 },\n  { -20318852,-15150239,10933843,-16178022,8335352,-7546022,-31008351,-12610604,26498114,66511 },\n  { 22644454,-8761729,-16671776,4884562,-3105614,-13559366,30540766,-4286747,-13327787,-7515095 },\n },\n {\n  { -28017847,9834845,18617207,-2681312,-3401956,-13307506,8205540,13585437,-17127465,15115439 },\n  { 23711543,-672915,31206561,-8362711,6164647,-9709987,-33535882,-1426096,8236921,16492939 },\n  { -23910559,-13515526,-26299483,-4503841,25005590,-7687270,19574902,10071562,6708380,-6222424 },\n },\n {\n  { 2101391,-4930054,19702731,2367575,-15427167,1047675,5301017,9328700,29955601,-11678310 },\n  { 3096359,9271816,-21620864,-15521844,-14847996,-7592937,-25892142,-12635595,-9917575,6216608 },\n  { -32615849,338663,-25195611,2510422,-29213566,-13820213,24822830,-6146567,-26767480,7525079 },\n },\n {\n  { -23066649,-13985623,16133487,-7896178,-3389565,778788,-910336,-2782495,-19386633,11994101 },\n  { 21691500,-13624626,-641331,-14367021,3285881,-3483596,-25064666,9718258,-7477437,13381418 },\n  { 18445390,-4202236,14979846,11622458,-1727110,-3582980,23111648,-6375247,28535282,15779576 },\n },\n {\n  { 30098053,3089662,-9234387,16662135,-21306940,11308411,-14068454,12021730,9955285,-16303356 },\n  { 9734894,-14576830,-7473633,-9138735,2060392,11313496,-18426029,9924399,20194861,13380996 },\n  { -26378102,-7965207,-22167821,15789297,-18055342,-6168792,-1984914,15707771,26342023,10146099 },\n },\n},\n{\n {\n  { -26016874,-219943,21339191,-41388,19745256,-2878700,-29637280,2227040,21612326,-545728 },\n  { -13077387,1184228,23562814,-5970442,-20351244,-6348714,25764461,12243797,-20856566,11649658 },\n  { -10031494,11262626,27384172,2271902,26947504,-15997771,39944,6114064,33514190,2333242 },\n },\n {\n  { -21433588,-12421821,8119782,7219913,-21830522,-9016134,-6679750,-12670638,24350578,-13450001 },\n  { -4116307,-11271533,-23886186,4843615,-30088339,690623,-31536088,-10406836,8317860,12352766 },\n  { 18200138,-14475911,-33087759,-2696619,-23702521,-9102511,-23552096,-2287550,20712163,6719373 },\n },\n {\n  { 26656208,6075253,-7858556,1886072,-28344043,4262326,11117530,-3763210,26224235,-3297458 },\n  { -17168938,-14854097,-3395676,-16369877,-19954045,14050420,21728352,9493610,18620611,-16428628 },\n  { -13323321,13325349,11432106,5964811,18609221,6062965,-5269471,-9725556,-30701573,-16479657 },\n },\n {\n  { -23860538,-11233159,26961357,1640861,-32413112,-16737940,12248509,-5240639,13735342,1934062 },\n  { 25089769,6742589,17081145,-13406266,21909293,-16067981,-15136294,-3765346,-21277997,5473616 },\n  { 31883677,-7961101,1083432,-11572403,22828471,13290673,-7125085,12469656,29111212,-5451014 },\n },\n {\n  { 24244947,-15050407,-26262976,2791540,-14997599,16666678,24367466,6388839,-10295587,452383 },\n  { -25640782,-3417841,5217916,16224624,19987036,-4082269,-24236251,-5915248,15766062,8407814 },\n  { -20406999,13990231,15495425,16395525,5377168,15166495,-8917023,-4388953,-8067909,2276718 },\n },\n {\n  { 30157918,12924066,-17712050,9245753,19895028,3368142,-23827587,5096219,22740376,-7303417 },\n  { 2041139,-14256350,7783687,13876377,-25946985,-13352459,24051124,13742383,-15637599,13295222 },\n  { 33338237,-8505733,12532113,7977527,9106186,-1715251,-17720195,-4612972,-4451357,-14669444 },\n },\n {\n  { -20045281,5454097,-14346548,6447146,28862071,1883651,-2469266,-4141880,7770569,9620597 },\n  { 23208068,7979712,33071466,8149229,1758231,-10834995,30945528,-1694323,-33502340,-14767970 },\n  { 1439958,-16270480,-1079989,-793782,4625402,10647766,-5043801,1220118,30494170,-11440799 },\n },\n {\n  { -5037580,-13028295,-2970559,-3061767,15640974,-6701666,-26739026,926050,-1684339,-13333647 },\n  { 13908495,-3549272,30919928,-6273825,-21521863,7989039,9021034,9078865,3353509,4033511 },\n  { -29663431,-15113610,32259991,-344482,24295849,-12912123,23161163,8839127,27485041,7356032 },\n },\n},\n{\n {\n  { 9661027,705443,11980065,-5370154,-1628543,14661173,-6346142,2625015,28431036,-16771834 },\n  { -23839233,-8311415,-25945511,7480958,-17681669,-8354183,-22545972,14150565,15970762,4099461 },\n  { 29262576,16756590,26350592,-8793563,8529671,-11208050,13617293,-9937143,11465739,8317062 },\n },\n {\n  { -25493081,-6962928,32500200,-9419051,-23038724,-2302222,14898637,3848455,20969334,-5157516 },\n  { -20384450,-14347713,-18336405,13884722,-33039454,2842114,-21610826,-3649888,11177095,14989547 },\n  { -24496721,-11716016,16959896,2278463,12066309,10137771,13515641,2581286,-28487508,9930240 },\n },\n {\n  { -17751622,-2097826,16544300,-13009300,-15914807,-14949081,18345767,-13403753,16291481,-5314038 },\n  { -33229194,2553288,32678213,9875984,8534129,6889387,-9676774,6957617,4368891,9788741 },\n  { 16660756,7281060,-10830758,12911820,20108584,-8101676,-21722536,-8613148,16250552,-11111103 },\n },\n {\n  { -19765507,2390526,-16551031,14161980,1905286,6414907,4689584,10604807,-30190403,4782747 },\n  { -1354539,14736941,-7367442,-13292886,7710542,-14155590,-9981571,4383045,22546403,437323 },\n  { 31665577,-12180464,-16186830,1491339,-18368625,3294682,27343084,2786261,-30633590,-14097016 },\n },\n {\n  { -14467279,-683715,-33374107,7448552,19294360,14334329,-19690631,2355319,-19284671,-6114373 },\n  { 15121312,-15796162,6377020,-6031361,-10798111,-12957845,18952177,15496498,-29380133,11754228 },\n  { -2637277,-13483075,8488727,-14303896,12728761,-1622493,7141596,11724556,22761615,-10134141 },\n },\n {\n  { 16918416,11729663,-18083579,3022987,-31015732,-13339659,-28741185,-12227393,32851222,11717399 },\n  { 11166634,7338049,-6722523,4531520,-29468672,-7302055,31474879,3483633,-1193175,-4030831 },\n  { -185635,9921305,31456609,-13536438,-12013818,13348923,33142652,6546660,-19985279,-3948376 },\n },\n {\n  { -32460596,11266712,-11197107,-7899103,31703694,3855903,-8537131,-12833048,-30772034,-15486313 },\n  { -18006477,12709068,3991746,-6479188,-21491523,-10550425,-31135347,-16049879,10928917,3011958 },\n  { -6957757,-15594337,31696059,334240,29576716,14796075,-30831056,-12805180,18008031,10258577 },\n },\n {\n  { -22448644,15655569,7018479,-4410003,-30314266,-1201591,-1853465,1367120,25127874,6671743 },\n  { 29701166,-14373934,-10878120,9279288,-17568,13127210,21382910,11042292,25838796,4642684 },\n  { -20430234,14955537,-24126347,8124619,-5369288,-5990470,30468147,-13900640,18423289,4177476 },\n },\n},\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/base2.h",
    "content": " {\n  { 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 },\n  { -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 },\n  { -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 },\n },\n {\n  { 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 },\n  { 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 },\n  { 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 },\n },\n {\n  { 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 },\n  { 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 },\n  { 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 },\n },\n {\n  { 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 },\n  { -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 },\n  { 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 },\n },\n {\n  { -22518993,-6692182,14201702,-8745502,-23510406,8844726,18474211,-1361450,-13062696,13821877 },\n  { -6455177,-7839871,3374702,-4740862,-27098617,-10571707,31655028,-7212327,18853322,-14220951 },\n  { 4566830,-12963868,-28974889,-12240689,-7602672,-2830569,-8514358,-10431137,2207753,-3209784 },\n },\n {\n  { -25154831,-4185821,29681144,7868801,-6854661,-9423865,-12437364,-663000,-31111463,-16132436 },\n  { 25576264,-2703214,7349804,-11814844,16472782,9300885,3844789,15725684,171356,6466918 },\n  { 23103977,13316479,9739013,-16149481,817875,-15038942,8965339,-14088058,-30714912,16193877 },\n },\n {\n  { -33521811,3180713,-2394130,14003687,-16903474,-16270840,17238398,4729455,-18074513,9256800 },\n  { -25182317,-4174131,32336398,5036987,-21236817,11360617,22616405,9761698,-19827198,630305 },\n  { -13720693,2639453,-24237460,-7406481,9494427,-5774029,-6554551,-15960994,-2449256,-14291300 },\n },\n {\n  { -3151181,-5046075,9282714,6866145,-31907062,-863023,-18940575,15033784,25105118,-7894876 },\n  { -24326370,15950226,-31801215,-14592823,-11662737,-5090925,1573892,-2625887,2198790,-15804619 },\n  { -3099351,10324967,-2241613,7453183,-5446979,-2735503,-13812022,-16236442,-32461234,-12290683 },\n },\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/d.h",
    "content": "-10913610,13857413,-15372611,6949391,114729,-8787816,-6275908,-3247719,-18696448,-12055116\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/d2.h",
    "content": "-21827239,-5839606,-30745221,13898782,229458,15978800,-12551817,-6495438,29715968,9444199\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe.h",
    "content": "#ifndef FE_H\n#define FE_H\n\n#include \"crypto_int32.h\"\n\ntypedef crypto_int32 fe[10];\n\n/*\nfe means field element.\nHere the field is \\Z/(2^255-19).\nAn element t, entries t[0]...t[9], represents the integer\nt[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9].\nBounds on each t[i] vary depending on context.\n*/\n\n#define fe_frombytes crypto_sign_ed25519_ref10_fe_frombytes\n#define fe_tobytes crypto_sign_ed25519_ref10_fe_tobytes\n#define fe_copy crypto_sign_ed25519_ref10_fe_copy\n#define fe_isnonzero crypto_sign_ed25519_ref10_fe_isnonzero\n#define fe_isnegative crypto_sign_ed25519_ref10_fe_isnegative\n#define fe_0 crypto_sign_ed25519_ref10_fe_0\n#define fe_1 crypto_sign_ed25519_ref10_fe_1\n#define fe_cswap crypto_sign_ed25519_ref10_fe_cswap\n#define fe_cmov crypto_sign_ed25519_ref10_fe_cmov\n#define fe_add crypto_sign_ed25519_ref10_fe_add\n#define fe_sub crypto_sign_ed25519_ref10_fe_sub\n#define fe_neg crypto_sign_ed25519_ref10_fe_neg\n#define fe_mul crypto_sign_ed25519_ref10_fe_mul\n#define fe_sq crypto_sign_ed25519_ref10_fe_sq\n#define fe_sq2 crypto_sign_ed25519_ref10_fe_sq2\n#define fe_mul121666 crypto_sign_ed25519_ref10_fe_mul121666\n#define fe_invert crypto_sign_ed25519_ref10_fe_invert\n#define fe_pow22523 crypto_sign_ed25519_ref10_fe_pow22523\n\nextern void fe_frombytes(fe,const unsigned char *);\nextern void fe_tobytes(unsigned char *,const fe);\n\nextern void fe_copy(fe,const fe);\nextern int fe_isnonzero(const fe);\nextern int fe_isnegative(const fe);\nextern void fe_0(fe);\nextern void fe_1(fe);\nextern void fe_cswap(fe,fe,unsigned int);\nextern void fe_cmov(fe,const fe,unsigned int);\n\nextern void fe_add(fe,const fe,const fe);\nextern void fe_sub(fe,const fe,const fe);\nextern void fe_neg(fe,const fe);\nextern void fe_mul(fe,const fe,const fe);\nextern void fe_sq(fe,const fe);\nextern void fe_sq2(fe,const fe);\nextern void fe_mul121666(fe,const fe);\nextern void fe_invert(fe,const fe);\nextern void fe_pow22523(fe,const fe);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_0.c",
    "content": "#include \"fe.h\"\n\n/*\nh = 0\n*/\n\nvoid fe_0(fe h)\n{\n  h[0] = 0;\n  h[1] = 0;\n  h[2] = 0;\n  h[3] = 0;\n  h[4] = 0;\n  h[5] = 0;\n  h[6] = 0;\n  h[7] = 0;\n  h[8] = 0;\n  h[9] = 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_1.c",
    "content": "#include \"fe.h\"\n\n/*\nh = 1\n*/\n\nvoid fe_1(fe h)\n{\n  h[0] = 1;\n  h[1] = 0;\n  h[2] = 0;\n  h[3] = 0;\n  h[4] = 0;\n  h[5] = 0;\n  h[6] = 0;\n  h[7] = 0;\n  h[8] = 0;\n  h[9] = 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_add.c",
    "content": "#include \"fe.h\"\n\n/*\nh = f + g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nvoid fe_add(fe h,const fe f,const fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 h0 = f0 + g0;\n  crypto_int32 h1 = f1 + g1;\n  crypto_int32 h2 = f2 + g2;\n  crypto_int32 h3 = f3 + g3;\n  crypto_int32 h4 = f4 + g4;\n  crypto_int32 h5 = f5 + g5;\n  crypto_int32 h6 = f6 + g6;\n  crypto_int32 h7 = f7 + g7;\n  crypto_int32 h8 = f8 + g8;\n  crypto_int32 h9 = f9 + g9;\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_cmov.c",
    "content": "#include \"fe.h\"\n\n/*\nReplace (f,g) with (g,g) if b == 1;\nreplace (f,g) with (f,g) if b == 0.\n\nPreconditions: b in {0,1}.\n*/\n\nvoid fe_cmov(fe f,const fe g,unsigned int b)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 x0 = f0 ^ g0;\n  crypto_int32 x1 = f1 ^ g1;\n  crypto_int32 x2 = f2 ^ g2;\n  crypto_int32 x3 = f3 ^ g3;\n  crypto_int32 x4 = f4 ^ g4;\n  crypto_int32 x5 = f5 ^ g5;\n  crypto_int32 x6 = f6 ^ g6;\n  crypto_int32 x7 = f7 ^ g7;\n  crypto_int32 x8 = f8 ^ g8;\n  crypto_int32 x9 = f9 ^ g9;\n  b = (unsigned int) (- (int) b);\n  x0 &= b;\n  x1 &= b;\n  x2 &= b;\n  x3 &= b;\n  x4 &= b;\n  x5 &= b;\n  x6 &= b;\n  x7 &= b;\n  x8 &= b;\n  x9 &= b;\n  f[0] = f0 ^ x0;\n  f[1] = f1 ^ x1;\n  f[2] = f2 ^ x2;\n  f[3] = f3 ^ x3;\n  f[4] = f4 ^ x4;\n  f[5] = f5 ^ x5;\n  f[6] = f6 ^ x6;\n  f[7] = f7 ^ x7;\n  f[8] = f8 ^ x8;\n  f[9] = f9 ^ x9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_copy.c",
    "content": "#include \"fe.h\"\n\n/*\nh = f\n*/\n\nvoid fe_copy(fe h,const fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  h[0] = f0;\n  h[1] = f1;\n  h[2] = f2;\n  h[3] = f3;\n  h[4] = f4;\n  h[5] = f5;\n  h[6] = f6;\n  h[7] = f7;\n  h[8] = f8;\n  h[9] = f9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_frombytes.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n#include \"crypto_uint64.h\"\n\nstatic crypto_uint64 load_3(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  return result;\n}\n\nstatic crypto_uint64 load_4(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  result |= ((crypto_uint64) in[3]) << 24;\n  return result;\n}\n\n/*\nIgnores top bit of h.\n*/\n\nvoid fe_frombytes(fe h,const unsigned char *s)\n{\n  crypto_int64 h0 = load_4(s);\n  crypto_int64 h1 = load_3(s + 4) << 6;\n  crypto_int64 h2 = load_3(s + 7) << 5;\n  crypto_int64 h3 = load_3(s + 10) << 3;\n  crypto_int64 h4 = load_3(s + 13) << 2;\n  crypto_int64 h5 = load_4(s + 16);\n  crypto_int64 h6 = load_3(s + 20) << 7;\n  crypto_int64 h7 = load_3(s + 23) << 5;\n  crypto_int64 h8 = load_3(s + 26) << 4;\n  crypto_int64 h9 = (load_3(s + 29) & 8388607) << 2;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  carry9 = (h9 + (crypto_int64) (1L << 24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n  carry1 = (h1 + (crypto_int64) (1L << 24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry3 = (h3 + (crypto_int64) (1L << 24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry5 = (h5 + (crypto_int64) (1L << 24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n  carry7 = (h7 + (crypto_int64) (1L << 24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry2 = (h2 + (crypto_int64) (1L << 25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry6 = (h6 + (crypto_int64) (1L << 25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n  carry8 = (h8 + (crypto_int64) (1L << 25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  h[0] = (crypto_int32) h0;\n  h[1] = (crypto_int32) h1;\n  h[2] = (crypto_int32) h2;\n  h[3] = (crypto_int32) h3;\n  h[4] = (crypto_int32) h4;\n  h[5] = (crypto_int32) h5;\n  h[6] = (crypto_int32) h6;\n  h[7] = (crypto_int32) h7;\n  h[8] = (crypto_int32) h8;\n  h[9] = (crypto_int32) h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_invert.c",
    "content": "#include \"fe.h\"\n\nvoid fe_invert(fe out,const fe z)\n{\n  fe t0;\n  fe t1;\n  fe t2;\n  fe t3;\n  int i;\n\n#include \"pow225521.h\"\n\n  return;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_isnegative.c",
    "content": "#include \"fe.h\"\n\n/*\nreturn 1 if f is in {1,3,5,...,q-2}\nreturn 0 if f is in {0,2,4,...,q-1}\n\nPreconditions:\n   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nint fe_isnegative(const fe f)\n{\n  unsigned char s[32];\n  fe_tobytes(s,f);\n  return s[0] & 1;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_isnonzero.c",
    "content": "#include \"fe.h\"\n#include \"crypto_verify_32.h\"\n\n/*\nreturn 1 if f == 0\nreturn 0 if f != 0\n\nPreconditions:\n   |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nstatic unsigned char zero[32];\n\nint fe_isnonzero(const fe f)\n{\n  unsigned char s[32];\n  fe_tobytes(s,f);\n  return crypto_verify_32(s,zero);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_mul.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n/*\nh = f * g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.\n   |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.\n*/\n\n/*\nNotes on implementation strategy:\n\nUsing schoolbook multiplication.\nKaratsuba would save a little in some cost models.\n\nMost multiplications by 2 and 19 are 32-bit precomputations;\ncheaper than 64-bit postcomputations.\n\nThere is one remaining multiplication by 19 in the carry chain;\none *19 precomputation can be merged into this,\nbut the resulting data flow is considerably less clean.\n\nThere are 12 carries below.\n10 of them are 2-way parallelizable and vectorizable.\nCan get away with 11 carries, but then data flow is much deeper.\n\nWith tighter constraints on inputs can squeeze carries into int32.\n*/\n\nvoid fe_mul(fe h,const fe f,const fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 g1_19 = 19 * g1; /* 1.959375*2^29 */\n  crypto_int32 g2_19 = 19 * g2; /* 1.959375*2^30; still ok */\n  crypto_int32 g3_19 = 19 * g3;\n  crypto_int32 g4_19 = 19 * g4;\n  crypto_int32 g5_19 = 19 * g5;\n  crypto_int32 g6_19 = 19 * g6;\n  crypto_int32 g7_19 = 19 * g7;\n  crypto_int32 g8_19 = 19 * g8;\n  crypto_int32 g9_19 = 19 * g9;\n  crypto_int32 f1_2 = 2 * f1;\n  crypto_int32 f3_2 = 2 * f3;\n  crypto_int32 f5_2 = 2 * f5;\n  crypto_int32 f7_2 = 2 * f7;\n  crypto_int32 f9_2 = 2 * f9;\n  crypto_int64 f0g0    = f0   * (crypto_int64) g0;\n  crypto_int64 f0g1    = f0   * (crypto_int64) g1;\n  crypto_int64 f0g2    = f0   * (crypto_int64) g2;\n  crypto_int64 f0g3    = f0   * (crypto_int64) g3;\n  crypto_int64 f0g4    = f0   * (crypto_int64) g4;\n  crypto_int64 f0g5    = f0   * (crypto_int64) g5;\n  crypto_int64 f0g6    = f0   * (crypto_int64) g6;\n  crypto_int64 f0g7    = f0   * (crypto_int64) g7;\n  crypto_int64 f0g8    = f0   * (crypto_int64) g8;\n  crypto_int64 f0g9    = f0   * (crypto_int64) g9;\n  crypto_int64 f1g0    = f1   * (crypto_int64) g0;\n  crypto_int64 f1g1_2  = f1_2 * (crypto_int64) g1;\n  crypto_int64 f1g2    = f1   * (crypto_int64) g2;\n  crypto_int64 f1g3_2  = f1_2 * (crypto_int64) g3;\n  crypto_int64 f1g4    = f1   * (crypto_int64) g4;\n  crypto_int64 f1g5_2  = f1_2 * (crypto_int64) g5;\n  crypto_int64 f1g6    = f1   * (crypto_int64) g6;\n  crypto_int64 f1g7_2  = f1_2 * (crypto_int64) g7;\n  crypto_int64 f1g8    = f1   * (crypto_int64) g8;\n  crypto_int64 f1g9_38 = f1_2 * (crypto_int64) g9_19;\n  crypto_int64 f2g0    = f2   * (crypto_int64) g0;\n  crypto_int64 f2g1    = f2   * (crypto_int64) g1;\n  crypto_int64 f2g2    = f2   * (crypto_int64) g2;\n  crypto_int64 f2g3    = f2   * (crypto_int64) g3;\n  crypto_int64 f2g4    = f2   * (crypto_int64) g4;\n  crypto_int64 f2g5    = f2   * (crypto_int64) g5;\n  crypto_int64 f2g6    = f2   * (crypto_int64) g6;\n  crypto_int64 f2g7    = f2   * (crypto_int64) g7;\n  crypto_int64 f2g8_19 = f2   * (crypto_int64) g8_19;\n  crypto_int64 f2g9_19 = f2   * (crypto_int64) g9_19;\n  crypto_int64 f3g0    = f3   * (crypto_int64) g0;\n  crypto_int64 f3g1_2  = f3_2 * (crypto_int64) g1;\n  crypto_int64 f3g2    = f3   * (crypto_int64) g2;\n  crypto_int64 f3g3_2  = f3_2 * (crypto_int64) g3;\n  crypto_int64 f3g4    = f3   * (crypto_int64) g4;\n  crypto_int64 f3g5_2  = f3_2 * (crypto_int64) g5;\n  crypto_int64 f3g6    = f3   * (crypto_int64) g6;\n  crypto_int64 f3g7_38 = f3_2 * (crypto_int64) g7_19;\n  crypto_int64 f3g8_19 = f3   * (crypto_int64) g8_19;\n  crypto_int64 f3g9_38 = f3_2 * (crypto_int64) g9_19;\n  crypto_int64 f4g0    = f4   * (crypto_int64) g0;\n  crypto_int64 f4g1    = f4   * (crypto_int64) g1;\n  crypto_int64 f4g2    = f4   * (crypto_int64) g2;\n  crypto_int64 f4g3    = f4   * (crypto_int64) g3;\n  crypto_int64 f4g4    = f4   * (crypto_int64) g4;\n  crypto_int64 f4g5    = f4   * (crypto_int64) g5;\n  crypto_int64 f4g6_19 = f4   * (crypto_int64) g6_19;\n  crypto_int64 f4g7_19 = f4   * (crypto_int64) g7_19;\n  crypto_int64 f4g8_19 = f4   * (crypto_int64) g8_19;\n  crypto_int64 f4g9_19 = f4   * (crypto_int64) g9_19;\n  crypto_int64 f5g0    = f5   * (crypto_int64) g0;\n  crypto_int64 f5g1_2  = f5_2 * (crypto_int64) g1;\n  crypto_int64 f5g2    = f5   * (crypto_int64) g2;\n  crypto_int64 f5g3_2  = f5_2 * (crypto_int64) g3;\n  crypto_int64 f5g4    = f5   * (crypto_int64) g4;\n  crypto_int64 f5g5_38 = f5_2 * (crypto_int64) g5_19;\n  crypto_int64 f5g6_19 = f5   * (crypto_int64) g6_19;\n  crypto_int64 f5g7_38 = f5_2 * (crypto_int64) g7_19;\n  crypto_int64 f5g8_19 = f5   * (crypto_int64) g8_19;\n  crypto_int64 f5g9_38 = f5_2 * (crypto_int64) g9_19;\n  crypto_int64 f6g0    = f6   * (crypto_int64) g0;\n  crypto_int64 f6g1    = f6   * (crypto_int64) g1;\n  crypto_int64 f6g2    = f6   * (crypto_int64) g2;\n  crypto_int64 f6g3    = f6   * (crypto_int64) g3;\n  crypto_int64 f6g4_19 = f6   * (crypto_int64) g4_19;\n  crypto_int64 f6g5_19 = f6   * (crypto_int64) g5_19;\n  crypto_int64 f6g6_19 = f6   * (crypto_int64) g6_19;\n  crypto_int64 f6g7_19 = f6   * (crypto_int64) g7_19;\n  crypto_int64 f6g8_19 = f6   * (crypto_int64) g8_19;\n  crypto_int64 f6g9_19 = f6   * (crypto_int64) g9_19;\n  crypto_int64 f7g0    = f7   * (crypto_int64) g0;\n  crypto_int64 f7g1_2  = f7_2 * (crypto_int64) g1;\n  crypto_int64 f7g2    = f7   * (crypto_int64) g2;\n  crypto_int64 f7g3_38 = f7_2 * (crypto_int64) g3_19;\n  crypto_int64 f7g4_19 = f7   * (crypto_int64) g4_19;\n  crypto_int64 f7g5_38 = f7_2 * (crypto_int64) g5_19;\n  crypto_int64 f7g6_19 = f7   * (crypto_int64) g6_19;\n  crypto_int64 f7g7_38 = f7_2 * (crypto_int64) g7_19;\n  crypto_int64 f7g8_19 = f7   * (crypto_int64) g8_19;\n  crypto_int64 f7g9_38 = f7_2 * (crypto_int64) g9_19;\n  crypto_int64 f8g0    = f8   * (crypto_int64) g0;\n  crypto_int64 f8g1    = f8   * (crypto_int64) g1;\n  crypto_int64 f8g2_19 = f8   * (crypto_int64) g2_19;\n  crypto_int64 f8g3_19 = f8   * (crypto_int64) g3_19;\n  crypto_int64 f8g4_19 = f8   * (crypto_int64) g4_19;\n  crypto_int64 f8g5_19 = f8   * (crypto_int64) g5_19;\n  crypto_int64 f8g6_19 = f8   * (crypto_int64) g6_19;\n  crypto_int64 f8g7_19 = f8   * (crypto_int64) g7_19;\n  crypto_int64 f8g8_19 = f8   * (crypto_int64) g8_19;\n  crypto_int64 f8g9_19 = f8   * (crypto_int64) g9_19;\n  crypto_int64 f9g0    = f9   * (crypto_int64) g0;\n  crypto_int64 f9g1_38 = f9_2 * (crypto_int64) g1_19;\n  crypto_int64 f9g2_19 = f9   * (crypto_int64) g2_19;\n  crypto_int64 f9g3_38 = f9_2 * (crypto_int64) g3_19;\n  crypto_int64 f9g4_19 = f9   * (crypto_int64) g4_19;\n  crypto_int64 f9g5_38 = f9_2 * (crypto_int64) g5_19;\n  crypto_int64 f9g6_19 = f9   * (crypto_int64) g6_19;\n  crypto_int64 f9g7_38 = f9_2 * (crypto_int64) g7_19;\n  crypto_int64 f9g8_19 = f9   * (crypto_int64) g8_19;\n  crypto_int64 f9g9_38 = f9_2 * (crypto_int64) g9_19;\n  crypto_int64 h0 = f0g0+f1g9_38+f2g8_19+f3g7_38+f4g6_19+f5g5_38+f6g4_19+f7g3_38+f8g2_19+f9g1_38;\n  crypto_int64 h1 = f0g1+f1g0   +f2g9_19+f3g8_19+f4g7_19+f5g6_19+f6g5_19+f7g4_19+f8g3_19+f9g2_19;\n  crypto_int64 h2 = f0g2+f1g1_2 +f2g0   +f3g9_38+f4g8_19+f5g7_38+f6g6_19+f7g5_38+f8g4_19+f9g3_38;\n  crypto_int64 h3 = f0g3+f1g2   +f2g1   +f3g0   +f4g9_19+f5g8_19+f6g7_19+f7g6_19+f8g5_19+f9g4_19;\n  crypto_int64 h4 = f0g4+f1g3_2 +f2g2   +f3g1_2 +f4g0   +f5g9_38+f6g8_19+f7g7_38+f8g6_19+f9g5_38;\n  crypto_int64 h5 = f0g5+f1g4   +f2g3   +f3g2   +f4g1   +f5g0   +f6g9_19+f7g8_19+f8g7_19+f9g6_19;\n  crypto_int64 h6 = f0g6+f1g5_2 +f2g4   +f3g3_2 +f4g2   +f5g1_2 +f6g0   +f7g9_38+f8g8_19+f9g7_38;\n  crypto_int64 h7 = f0g7+f1g6   +f2g5   +f3g4   +f4g3   +f5g2   +f6g1   +f7g0   +f8g9_19+f9g8_19;\n  crypto_int64 h8 = f0g8+f1g7_2 +f2g6   +f3g5_2 +f4g4   +f5g3_2 +f6g2   +f7g1_2 +f8g0   +f9g9_38;\n  crypto_int64 h9 = f0g9+f1g8   +f2g7   +f3g6   +f4g5   +f5g4   +f6g3   +f7g2   +f8g1   +f9g0   ;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  /*\n  |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))\n    i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8\n  |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))\n    i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9\n  */\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  /* |h0| <= 2^25 */\n  /* |h4| <= 2^25 */\n  /* |h1| <= 1.71*2^59 */\n  /* |h5| <= 1.71*2^59 */\n\n  carry1 = (h1 + (crypto_int64) (1L << 24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry5 = (h5 + (crypto_int64) (1L << 24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n  /* |h1| <= 2^24; from now on fits into int32 */\n  /* |h5| <= 2^24; from now on fits into int32 */\n  /* |h2| <= 1.41*2^60 */\n  /* |h6| <= 1.41*2^60 */\n\n  carry2 = (h2 + (crypto_int64) (1L << 25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry6 = (h6 + (crypto_int64) (1L << 25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n  /* |h2| <= 2^25; from now on fits into int32 unchanged */\n  /* |h6| <= 2^25; from now on fits into int32 unchanged */\n  /* |h3| <= 1.71*2^59 */\n  /* |h7| <= 1.71*2^59 */\n\n  carry3 = (h3 + (crypto_int64) (1L << 24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry7 = (h7 + (crypto_int64) (1L << 24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n  /* |h3| <= 2^24; from now on fits into int32 unchanged */\n  /* |h7| <= 2^24; from now on fits into int32 unchanged */\n  /* |h4| <= 1.72*2^34 */\n  /* |h8| <= 1.41*2^60 */\n\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry8 = (h8 + (crypto_int64) (1L << 25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n  /* |h4| <= 2^25; from now on fits into int32 unchanged */\n  /* |h8| <= 2^25; from now on fits into int32 unchanged */\n  /* |h5| <= 1.01*2^24 */\n  /* |h9| <= 1.71*2^59 */\n\n  carry9 = (h9 + (crypto_int64) (1L << 24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n  /* |h9| <= 2^24; from now on fits into int32 unchanged */\n  /* |h0| <= 1.1*2^39 */\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  /* |h0| <= 2^25; from now on fits into int32 unchanged */\n  /* |h1| <= 1.01*2^24 */\n\n  h[0] = (crypto_int32) h0;\n  h[1] = (crypto_int32) h1;\n  h[2] = (crypto_int32) h2;\n  h[3] = (crypto_int32) h3;\n  h[4] = (crypto_int32) h4;\n  h[5] = (crypto_int32) h5;\n  h[6] = (crypto_int32) h6;\n  h[7] = (crypto_int32) h7;\n  h[8] = (crypto_int32) h8;\n  h[9] = (crypto_int32) h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_neg.c",
    "content": "#include \"fe.h\"\n\n/*\nh = -f\n\nPreconditions:\n   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n*/\n\nvoid fe_neg(fe h,const fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 h0 = -f0;\n  crypto_int32 h1 = -f1;\n  crypto_int32 h2 = -f2;\n  crypto_int32 h3 = -f3;\n  crypto_int32 h4 = -f4;\n  crypto_int32 h5 = -f5;\n  crypto_int32 h6 = -f6;\n  crypto_int32 h7 = -f7;\n  crypto_int32 h8 = -f8;\n  crypto_int32 h9 = -f9;\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_pow22523.c",
    "content": "#include \"fe.h\"\n\nvoid fe_pow22523(fe out,const fe z)\n{\n  fe t0;\n  fe t1;\n  fe t2;\n  int i;\n\n#include \"pow22523.h\"\n\n  return;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sq.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n/*\nh = f * f\nCan overlap h with f.\n\nPreconditions:\n   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.\n*/\n\n/*\nSee fe_mul.c for discussion of implementation strategy.\n*/\n\nvoid fe_sq(fe h,const fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 f0_2 = 2 * f0;\n  crypto_int32 f1_2 = 2 * f1;\n  crypto_int32 f2_2 = 2 * f2;\n  crypto_int32 f3_2 = 2 * f3;\n  crypto_int32 f4_2 = 2 * f4;\n  crypto_int32 f5_2 = 2 * f5;\n  crypto_int32 f6_2 = 2 * f6;\n  crypto_int32 f7_2 = 2 * f7;\n  crypto_int32 f5_38 = 38 * f5; /* 1.959375*2^30 */\n  crypto_int32 f6_19 = 19 * f6; /* 1.959375*2^30 */\n  crypto_int32 f7_38 = 38 * f7; /* 1.959375*2^30 */\n  crypto_int32 f8_19 = 19 * f8; /* 1.959375*2^30 */\n  crypto_int32 f9_38 = 38 * f9; /* 1.959375*2^30 */\n  crypto_int64 f0f0    = f0   * (crypto_int64) f0;\n  crypto_int64 f0f1_2  = f0_2 * (crypto_int64) f1;\n  crypto_int64 f0f2_2  = f0_2 * (crypto_int64) f2;\n  crypto_int64 f0f3_2  = f0_2 * (crypto_int64) f3;\n  crypto_int64 f0f4_2  = f0_2 * (crypto_int64) f4;\n  crypto_int64 f0f5_2  = f0_2 * (crypto_int64) f5;\n  crypto_int64 f0f6_2  = f0_2 * (crypto_int64) f6;\n  crypto_int64 f0f7_2  = f0_2 * (crypto_int64) f7;\n  crypto_int64 f0f8_2  = f0_2 * (crypto_int64) f8;\n  crypto_int64 f0f9_2  = f0_2 * (crypto_int64) f9;\n  crypto_int64 f1f1_2  = f1_2 * (crypto_int64) f1;\n  crypto_int64 f1f2_2  = f1_2 * (crypto_int64) f2;\n  crypto_int64 f1f3_4  = f1_2 * (crypto_int64) f3_2;\n  crypto_int64 f1f4_2  = f1_2 * (crypto_int64) f4;\n  crypto_int64 f1f5_4  = f1_2 * (crypto_int64) f5_2;\n  crypto_int64 f1f6_2  = f1_2 * (crypto_int64) f6;\n  crypto_int64 f1f7_4  = f1_2 * (crypto_int64) f7_2;\n  crypto_int64 f1f8_2  = f1_2 * (crypto_int64) f8;\n  crypto_int64 f1f9_76 = f1_2 * (crypto_int64) f9_38;\n  crypto_int64 f2f2    = f2   * (crypto_int64) f2;\n  crypto_int64 f2f3_2  = f2_2 * (crypto_int64) f3;\n  crypto_int64 f2f4_2  = f2_2 * (crypto_int64) f4;\n  crypto_int64 f2f5_2  = f2_2 * (crypto_int64) f5;\n  crypto_int64 f2f6_2  = f2_2 * (crypto_int64) f6;\n  crypto_int64 f2f7_2  = f2_2 * (crypto_int64) f7;\n  crypto_int64 f2f8_38 = f2_2 * (crypto_int64) f8_19;\n  crypto_int64 f2f9_38 = f2   * (crypto_int64) f9_38;\n  crypto_int64 f3f3_2  = f3_2 * (crypto_int64) f3;\n  crypto_int64 f3f4_2  = f3_2 * (crypto_int64) f4;\n  crypto_int64 f3f5_4  = f3_2 * (crypto_int64) f5_2;\n  crypto_int64 f3f6_2  = f3_2 * (crypto_int64) f6;\n  crypto_int64 f3f7_76 = f3_2 * (crypto_int64) f7_38;\n  crypto_int64 f3f8_38 = f3_2 * (crypto_int64) f8_19;\n  crypto_int64 f3f9_76 = f3_2 * (crypto_int64) f9_38;\n  crypto_int64 f4f4    = f4   * (crypto_int64) f4;\n  crypto_int64 f4f5_2  = f4_2 * (crypto_int64) f5;\n  crypto_int64 f4f6_38 = f4_2 * (crypto_int64) f6_19;\n  crypto_int64 f4f7_38 = f4   * (crypto_int64) f7_38;\n  crypto_int64 f4f8_38 = f4_2 * (crypto_int64) f8_19;\n  crypto_int64 f4f9_38 = f4   * (crypto_int64) f9_38;\n  crypto_int64 f5f5_38 = f5   * (crypto_int64) f5_38;\n  crypto_int64 f5f6_38 = f5_2 * (crypto_int64) f6_19;\n  crypto_int64 f5f7_76 = f5_2 * (crypto_int64) f7_38;\n  crypto_int64 f5f8_38 = f5_2 * (crypto_int64) f8_19;\n  crypto_int64 f5f9_76 = f5_2 * (crypto_int64) f9_38;\n  crypto_int64 f6f6_19 = f6   * (crypto_int64) f6_19;\n  crypto_int64 f6f7_38 = f6   * (crypto_int64) f7_38;\n  crypto_int64 f6f8_38 = f6_2 * (crypto_int64) f8_19;\n  crypto_int64 f6f9_38 = f6   * (crypto_int64) f9_38;\n  crypto_int64 f7f7_38 = f7   * (crypto_int64) f7_38;\n  crypto_int64 f7f8_38 = f7_2 * (crypto_int64) f8_19;\n  crypto_int64 f7f9_76 = f7_2 * (crypto_int64) f9_38;\n  crypto_int64 f8f8_19 = f8   * (crypto_int64) f8_19;\n  crypto_int64 f8f9_38 = f8   * (crypto_int64) f9_38;\n  crypto_int64 f9f9_38 = f9   * (crypto_int64) f9_38;\n  crypto_int64 h0 = f0f0  +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;\n  crypto_int64 h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;\n  crypto_int64 h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;\n  crypto_int64 h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;\n  crypto_int64 h4 = f0f4_2+f1f3_4 +f2f2   +f5f9_76+f6f8_38+f7f7_38;\n  crypto_int64 h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;\n  crypto_int64 h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;\n  crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;\n  crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4   +f9f9_38;\n  crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n\n  carry1 = (h1 + (crypto_int64) (1L << 24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry5 = (h5 + (crypto_int64) (1L << 24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n\n  carry2 = (h2 + (crypto_int64) (1L << 25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry6 = (h6 + (crypto_int64) (1L << 25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n\n  carry3 = (h3 + (crypto_int64) (1L << 24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry7 = (h7 + (crypto_int64) (1L << 24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry8 = (h8 + (crypto_int64) (1L << 25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  carry9 = (h9 + (crypto_int64) (1L << 24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n\n  h[0] = (crypto_int32) h0;\n  h[1] = (crypto_int32) h1;\n  h[2] = (crypto_int32) h2;\n  h[3] = (crypto_int32) h3;\n  h[4] = (crypto_int32) h4;\n  h[5] = (crypto_int32) h5;\n  h[6] = (crypto_int32) h6;\n  h[7] = (crypto_int32) h7;\n  h[8] = (crypto_int32) h8;\n  h[9] = (crypto_int32) h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sq2.c",
    "content": "#include \"fe.h\"\n#include \"crypto_int64.h\"\n\n/*\nh = 2 * f * f\nCan overlap h with f.\n\nPreconditions:\n   |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.\n\nPostconditions:\n   |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.\n*/\n\n/*\nSee fe_mul.c for discussion of implementation strategy.\n*/\n\nvoid fe_sq2(fe h,const fe f)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 f0_2 = 2 * f0;\n  crypto_int32 f1_2 = 2 * f1;\n  crypto_int32 f2_2 = 2 * f2;\n  crypto_int32 f3_2 = 2 * f3;\n  crypto_int32 f4_2 = 2 * f4;\n  crypto_int32 f5_2 = 2 * f5;\n  crypto_int32 f6_2 = 2 * f6;\n  crypto_int32 f7_2 = 2 * f7;\n  crypto_int32 f5_38 = 38 * f5; /* 1.959375*2^30 */\n  crypto_int32 f6_19 = 19 * f6; /* 1.959375*2^30 */\n  crypto_int32 f7_38 = 38 * f7; /* 1.959375*2^30 */\n  crypto_int32 f8_19 = 19 * f8; /* 1.959375*2^30 */\n  crypto_int32 f9_38 = 38 * f9; /* 1.959375*2^30 */\n  crypto_int64 f0f0    = f0   * (crypto_int64) f0;\n  crypto_int64 f0f1_2  = f0_2 * (crypto_int64) f1;\n  crypto_int64 f0f2_2  = f0_2 * (crypto_int64) f2;\n  crypto_int64 f0f3_2  = f0_2 * (crypto_int64) f3;\n  crypto_int64 f0f4_2  = f0_2 * (crypto_int64) f4;\n  crypto_int64 f0f5_2  = f0_2 * (crypto_int64) f5;\n  crypto_int64 f0f6_2  = f0_2 * (crypto_int64) f6;\n  crypto_int64 f0f7_2  = f0_2 * (crypto_int64) f7;\n  crypto_int64 f0f8_2  = f0_2 * (crypto_int64) f8;\n  crypto_int64 f0f9_2  = f0_2 * (crypto_int64) f9;\n  crypto_int64 f1f1_2  = f1_2 * (crypto_int64) f1;\n  crypto_int64 f1f2_2  = f1_2 * (crypto_int64) f2;\n  crypto_int64 f1f3_4  = f1_2 * (crypto_int64) f3_2;\n  crypto_int64 f1f4_2  = f1_2 * (crypto_int64) f4;\n  crypto_int64 f1f5_4  = f1_2 * (crypto_int64) f5_2;\n  crypto_int64 f1f6_2  = f1_2 * (crypto_int64) f6;\n  crypto_int64 f1f7_4  = f1_2 * (crypto_int64) f7_2;\n  crypto_int64 f1f8_2  = f1_2 * (crypto_int64) f8;\n  crypto_int64 f1f9_76 = f1_2 * (crypto_int64) f9_38;\n  crypto_int64 f2f2    = f2   * (crypto_int64) f2;\n  crypto_int64 f2f3_2  = f2_2 * (crypto_int64) f3;\n  crypto_int64 f2f4_2  = f2_2 * (crypto_int64) f4;\n  crypto_int64 f2f5_2  = f2_2 * (crypto_int64) f5;\n  crypto_int64 f2f6_2  = f2_2 * (crypto_int64) f6;\n  crypto_int64 f2f7_2  = f2_2 * (crypto_int64) f7;\n  crypto_int64 f2f8_38 = f2_2 * (crypto_int64) f8_19;\n  crypto_int64 f2f9_38 = f2   * (crypto_int64) f9_38;\n  crypto_int64 f3f3_2  = f3_2 * (crypto_int64) f3;\n  crypto_int64 f3f4_2  = f3_2 * (crypto_int64) f4;\n  crypto_int64 f3f5_4  = f3_2 * (crypto_int64) f5_2;\n  crypto_int64 f3f6_2  = f3_2 * (crypto_int64) f6;\n  crypto_int64 f3f7_76 = f3_2 * (crypto_int64) f7_38;\n  crypto_int64 f3f8_38 = f3_2 * (crypto_int64) f8_19;\n  crypto_int64 f3f9_76 = f3_2 * (crypto_int64) f9_38;\n  crypto_int64 f4f4    = f4   * (crypto_int64) f4;\n  crypto_int64 f4f5_2  = f4_2 * (crypto_int64) f5;\n  crypto_int64 f4f6_38 = f4_2 * (crypto_int64) f6_19;\n  crypto_int64 f4f7_38 = f4   * (crypto_int64) f7_38;\n  crypto_int64 f4f8_38 = f4_2 * (crypto_int64) f8_19;\n  crypto_int64 f4f9_38 = f4   * (crypto_int64) f9_38;\n  crypto_int64 f5f5_38 = f5   * (crypto_int64) f5_38;\n  crypto_int64 f5f6_38 = f5_2 * (crypto_int64) f6_19;\n  crypto_int64 f5f7_76 = f5_2 * (crypto_int64) f7_38;\n  crypto_int64 f5f8_38 = f5_2 * (crypto_int64) f8_19;\n  crypto_int64 f5f9_76 = f5_2 * (crypto_int64) f9_38;\n  crypto_int64 f6f6_19 = f6   * (crypto_int64) f6_19;\n  crypto_int64 f6f7_38 = f6   * (crypto_int64) f7_38;\n  crypto_int64 f6f8_38 = f6_2 * (crypto_int64) f8_19;\n  crypto_int64 f6f9_38 = f6   * (crypto_int64) f9_38;\n  crypto_int64 f7f7_38 = f7   * (crypto_int64) f7_38;\n  crypto_int64 f7f8_38 = f7_2 * (crypto_int64) f8_19;\n  crypto_int64 f7f9_76 = f7_2 * (crypto_int64) f9_38;\n  crypto_int64 f8f8_19 = f8   * (crypto_int64) f8_19;\n  crypto_int64 f8f9_38 = f8   * (crypto_int64) f9_38;\n  crypto_int64 f9f9_38 = f9   * (crypto_int64) f9_38;\n  crypto_int64 h0 = f0f0  +f1f9_76+f2f8_38+f3f7_76+f4f6_38+f5f5_38;\n  crypto_int64 h1 = f0f1_2+f2f9_38+f3f8_38+f4f7_38+f5f6_38;\n  crypto_int64 h2 = f0f2_2+f1f1_2 +f3f9_76+f4f8_38+f5f7_76+f6f6_19;\n  crypto_int64 h3 = f0f3_2+f1f2_2 +f4f9_38+f5f8_38+f6f7_38;\n  crypto_int64 h4 = f0f4_2+f1f3_4 +f2f2   +f5f9_76+f6f8_38+f7f7_38;\n  crypto_int64 h5 = f0f5_2+f1f4_2 +f2f3_2 +f6f9_38+f7f8_38;\n  crypto_int64 h6 = f0f6_2+f1f5_4 +f2f4_2 +f3f3_2 +f7f9_76+f8f8_19;\n  crypto_int64 h7 = f0f7_2+f1f6_2 +f2f5_2 +f3f4_2 +f8f9_38;\n  crypto_int64 h8 = f0f8_2+f1f7_4 +f2f6_2 +f3f5_4 +f4f4   +f9f9_38;\n  crypto_int64 h9 = f0f9_2+f1f8_2 +f2f7_2 +f3f6_2 +f4f5_2;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n\n  h0 += h0;\n  h1 += h1;\n  h2 += h2;\n  h3 += h3;\n  h4 += h4;\n  h5 += h5;\n  h6 += h6;\n  h7 += h7;\n  h8 += h8;\n  h9 += h9;\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n\n  carry1 = (h1 + (crypto_int64) (1L << 24)) >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry5 = (h5 + (crypto_int64) (1L << 24)) >> 25; h6 += carry5; h5 -= carry5 << 25;\n\n  carry2 = (h2 + (crypto_int64) (1L << 25)) >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry6 = (h6 + (crypto_int64) (1L << 25)) >> 26; h7 += carry6; h6 -= carry6 << 26;\n\n  carry3 = (h3 + (crypto_int64) (1L << 24)) >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry7 = (h7 + (crypto_int64) (1L << 24)) >> 25; h8 += carry7; h7 -= carry7 << 25;\n\n  carry4 = (h4 + (crypto_int64) (1L << 25)) >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry8 = (h8 + (crypto_int64) (1L << 25)) >> 26; h9 += carry8; h8 -= carry8 << 26;\n\n  carry9 = (h9 + (crypto_int64) (1L << 24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;\n\n  carry0 = (h0 + (crypto_int64) (1L << 25)) >> 26; h1 += carry0; h0 -= carry0 << 26;\n\n  h[0] = (crypto_int32) h0;\n  h[1] = (crypto_int32) h1;\n  h[2] = (crypto_int32) h2;\n  h[3] = (crypto_int32) h3;\n  h[4] = (crypto_int32) h4;\n  h[5] = (crypto_int32) h5;\n  h[6] = (crypto_int32) h6;\n  h[7] = (crypto_int32) h7;\n  h[8] = (crypto_int32) h8;\n  h[9] = (crypto_int32) h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_sub.c",
    "content": "#include \"fe.h\"\n\n/*\nh = f - g\nCan overlap h with f or g.\n\nPreconditions:\n   |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n   |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.\n\nPostconditions:\n   |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n*/\n\nvoid fe_sub(fe h,const fe f,const fe g)\n{\n  crypto_int32 f0 = f[0];\n  crypto_int32 f1 = f[1];\n  crypto_int32 f2 = f[2];\n  crypto_int32 f3 = f[3];\n  crypto_int32 f4 = f[4];\n  crypto_int32 f5 = f[5];\n  crypto_int32 f6 = f[6];\n  crypto_int32 f7 = f[7];\n  crypto_int32 f8 = f[8];\n  crypto_int32 f9 = f[9];\n  crypto_int32 g0 = g[0];\n  crypto_int32 g1 = g[1];\n  crypto_int32 g2 = g[2];\n  crypto_int32 g3 = g[3];\n  crypto_int32 g4 = g[4];\n  crypto_int32 g5 = g[5];\n  crypto_int32 g6 = g[6];\n  crypto_int32 g7 = g[7];\n  crypto_int32 g8 = g[8];\n  crypto_int32 g9 = g[9];\n  crypto_int32 h0 = f0 - g0;\n  crypto_int32 h1 = f1 - g1;\n  crypto_int32 h2 = f2 - g2;\n  crypto_int32 h3 = f3 - g3;\n  crypto_int32 h4 = f4 - g4;\n  crypto_int32 h5 = f5 - g5;\n  crypto_int32 h6 = f6 - g6;\n  crypto_int32 h7 = f7 - g7;\n  crypto_int32 h8 = f8 - g8;\n  crypto_int32 h9 = f9 - g9;\n  h[0] = h0;\n  h[1] = h1;\n  h[2] = h2;\n  h[3] = h3;\n  h[4] = h4;\n  h[5] = h5;\n  h[6] = h6;\n  h[7] = h7;\n  h[8] = h8;\n  h[9] = h9;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/fe_tobytes.c",
    "content": "#include \"fe.h\"\n\n/*\nPreconditions:\n  |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.\n\nWrite p=2^255-19; q=floor(h/p).\nBasic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).\n\nProof:\n  Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.\n  Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4.\n\n  Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).\n  Then 0<y<1.\n\n  Write r=h-pq.\n  Have 0<=r<=p-1=2^255-20.\n  Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.\n\n  Write x=r+19(2^-255)r+y.\n  Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.\n\n  Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))\n  so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.\n*/\n\nvoid fe_tobytes(unsigned char *s,const fe h)\n{\n  crypto_int32 h0 = h[0];\n  crypto_int32 h1 = h[1];\n  crypto_int32 h2 = h[2];\n  crypto_int32 h3 = h[3];\n  crypto_int32 h4 = h[4];\n  crypto_int32 h5 = h[5];\n  crypto_int32 h6 = h[6];\n  crypto_int32 h7 = h[7];\n  crypto_int32 h8 = h[8];\n  crypto_int32 h9 = h[9];\n  crypto_int32 q;\n  crypto_int32 carry0;\n  crypto_int32 carry1;\n  crypto_int32 carry2;\n  crypto_int32 carry3;\n  crypto_int32 carry4;\n  crypto_int32 carry5;\n  crypto_int32 carry6;\n  crypto_int32 carry7;\n  crypto_int32 carry8;\n  crypto_int32 carry9;\n\n  q = (19 * h9 + (((crypto_int32) 1) << 24)) >> 25;\n  q = (h0 + q) >> 26;\n  q = (h1 + q) >> 25;\n  q = (h2 + q) >> 26;\n  q = (h3 + q) >> 25;\n  q = (h4 + q) >> 26;\n  q = (h5 + q) >> 25;\n  q = (h6 + q) >> 26;\n  q = (h7 + q) >> 25;\n  q = (h8 + q) >> 26;\n  q = (h9 + q) >> 25;\n\n  /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */\n  h0 += 19 * q;\n  /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */\n\n  carry0 = h0 >> 26; h1 += carry0; h0 -= carry0 << 26;\n  carry1 = h1 >> 25; h2 += carry1; h1 -= carry1 << 25;\n  carry2 = h2 >> 26; h3 += carry2; h2 -= carry2 << 26;\n  carry3 = h3 >> 25; h4 += carry3; h3 -= carry3 << 25;\n  carry4 = h4 >> 26; h5 += carry4; h4 -= carry4 << 26;\n  carry5 = h5 >> 25; h6 += carry5; h5 -= carry5 << 25;\n  carry6 = h6 >> 26; h7 += carry6; h6 -= carry6 << 26;\n  carry7 = h7 >> 25; h8 += carry7; h7 -= carry7 << 25;\n  carry8 = h8 >> 26; h9 += carry8; h8 -= carry8 << 26;\n  carry9 = h9 >> 25;               h9 -= carry9 << 25;\n                  /* h10 = carry9 */\n\n  /*\n  Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.\n  Have h0+...+2^230 h9 between 0 and 2^255-1;\n  evidently 2^255 h10-2^255 q = 0.\n  Goal: Output h0+...+2^230 h9.\n  */\n\n  s[0] = h0 >> 0;\n  s[1] = h0 >> 8;\n  s[2] = h0 >> 16;\n  s[3] = (h0 >> 24) | (h1 << 2);\n  s[4] = h1 >> 6;\n  s[5] = h1 >> 14;\n  s[6] = (h1 >> 22) | (h2 << 3);\n  s[7] = h2 >> 5;\n  s[8] = h2 >> 13;\n  s[9] = (h2 >> 21) | (h3 << 5);\n  s[10] = h3 >> 3;\n  s[11] = h3 >> 11;\n  s[12] = (h3 >> 19) | (h4 << 6);\n  s[13] = h4 >> 2;\n  s[14] = h4 >> 10;\n  s[15] = h4 >> 18;\n  s[16] = h5 >> 0;\n  s[17] = h5 >> 8;\n  s[18] = h5 >> 16;\n  s[19] = (h5 >> 24) | (h6 << 1);\n  s[20] = h6 >> 7;\n  s[21] = h6 >> 15;\n  s[22] = (h6 >> 23) | (h7 << 3);\n  s[23] = h7 >> 5;\n  s[24] = h7 >> 13;\n  s[25] = (h7 >> 21) | (h8 << 4);\n  s[26] = h8 >> 4;\n  s[27] = h8 >> 12;\n  s[28] = (h8 >> 20) | (h9 << 6);\n  s[29] = h9 >> 2;\n  s[30] = h9 >> 10;\n  s[31] = h9 >> 18;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge.h",
    "content": "#ifndef GE_H\n#define GE_H\n\n/*\nge means group element.\n\nHere the group is the set of pairs (x,y) of field elements (see fe.h)\nsatisfying -x^2 + y^2 = 1 + d x^2y^2\nwhere d = -121665/121666.\n\nRepresentations:\n  ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z\n  ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT\n  ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T\n  ge_precomp (Duif): (y+x,y-x,2dxy)\n*/\n\n#include \"fe.h\"\n\ntypedef struct {\n  fe X;\n  fe Y;\n  fe Z;\n} ge_p2;\n\ntypedef struct {\n  fe X;\n  fe Y;\n  fe Z;\n  fe T;\n} ge_p3;\n\ntypedef struct {\n  fe X;\n  fe Y;\n  fe Z;\n  fe T;\n} ge_p1p1;\n\ntypedef struct {\n  fe yplusx;\n  fe yminusx;\n  fe xy2d;\n} ge_precomp;\n\ntypedef struct {\n  fe YplusX;\n  fe YminusX;\n  fe Z;\n  fe T2d;\n} ge_cached;\n\n#define ge_frombytes_negate_vartime crypto_sign_ed25519_ref10_ge_frombytes_negate_vartime\n#define ge_tobytes crypto_sign_ed25519_ref10_ge_tobytes\n#define ge_p3_tobytes crypto_sign_ed25519_ref10_ge_p3_tobytes\n\n#define ge_p2_0 crypto_sign_ed25519_ref10_ge_p2_0\n#define ge_p3_0 crypto_sign_ed25519_ref10_ge_p3_0\n#define ge_precomp_0 crypto_sign_ed25519_ref10_ge_precomp_0\n#define ge_p3_to_p2 crypto_sign_ed25519_ref10_ge_p3_to_p2\n#define ge_p3_to_cached crypto_sign_ed25519_ref10_ge_p3_to_cached\n#define ge_p1p1_to_p2 crypto_sign_ed25519_ref10_ge_p1p1_to_p2\n#define ge_p1p1_to_p3 crypto_sign_ed25519_ref10_ge_p1p1_to_p3\n#define ge_p2_dbl crypto_sign_ed25519_ref10_ge_p2_dbl\n#define ge_p3_dbl crypto_sign_ed25519_ref10_ge_p3_dbl\n\n#define ge_madd crypto_sign_ed25519_ref10_ge_madd\n#define ge_msub crypto_sign_ed25519_ref10_ge_msub\n#define ge_add crypto_sign_ed25519_ref10_ge_add\n#define ge_sub crypto_sign_ed25519_ref10_ge_sub\n#define ge_scalarmult_base crypto_sign_ed25519_ref10_ge_scalarmult_base\n#define ge_double_scalarmult_vartime crypto_sign_ed25519_ref10_ge_double_scalarmult_vartime\n#define ge_scalarmult_vartime crypto_sign_ed25519_ref10_ge_scalarmult_vartime\n\nextern void ge_tobytes(unsigned char *,const ge_p2 *);\nextern void ge_p3_tobytes(unsigned char *,const ge_p3 *);\nextern int ge_frombytes_negate_vartime(ge_p3 *,const unsigned char *);\n\nextern void ge_p2_0(ge_p2 *);\nextern void ge_p3_0(ge_p3 *);\nextern void ge_precomp_0(ge_precomp *);\nextern void ge_p3_to_p2(ge_p2 *,const ge_p3 *);\nextern void ge_p3_to_cached(ge_cached *,const ge_p3 *);\nextern void ge_p1p1_to_p2(ge_p2 *,const ge_p1p1 *);\nextern void ge_p1p1_to_p3(ge_p3 *,const ge_p1p1 *);\nextern void ge_p2_dbl(ge_p1p1 *,const ge_p2 *);\nextern void ge_p3_dbl(ge_p1p1 *,const ge_p3 *);\n\nextern void ge_madd(ge_p1p1 *,const ge_p3 *,const ge_precomp *);\nextern void ge_msub(ge_p1p1 *,const ge_p3 *,const ge_precomp *);\nextern void ge_add(ge_p1p1 *,const ge_p3 *,const ge_cached *);\nextern void ge_sub(ge_p1p1 *,const ge_p3 *,const ge_cached *);\nextern void ge_scalarmult_base(ge_p3 *,const unsigned char *);\nextern void ge_double_scalarmult_vartime(ge_p2 *,const unsigned char *,const ge_p3 *,const unsigned char *);\nextern void ge_scalarmult_vartime(ge_p3 *,const unsigned char *,const ge_p3 *);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_add.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p + q\n*/\n\nvoid ge_add(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)\n{\n  fe t0;\n#include \"ge_add.h\"\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_add.h",
    "content": "\n/* qhasm: enter ge_add */\n\n/* qhasm: fe X1 */\n\n/* qhasm: fe Y1 */\n\n/* qhasm: fe Z1 */\n\n/* qhasm: fe Z2 */\n\n/* qhasm: fe T1 */\n\n/* qhasm: fe ZZ */\n\n/* qhasm: fe YpX2 */\n\n/* qhasm: fe YmX2 */\n\n/* qhasm: fe T2d2 */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Y3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe T3 */\n\n/* qhasm: fe YpX1 */\n\n/* qhasm: fe YmX1 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe B */\n\n/* qhasm: fe C */\n\n/* qhasm: fe D */\n\n/* qhasm: YpX1 = Y1+X1 */\n/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */\nfe_add(r->X,p->Y,p->X);\n\n/* qhasm: YmX1 = Y1-X1 */\n/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */\nfe_sub(r->Y,p->Y,p->X);\n\n/* qhasm: A = YpX1*YpX2 */\n/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YpX2=fe#15); */\n/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YpX2=q->YplusX); */\nfe_mul(r->Z,r->X,q->YplusX);\n\n/* qhasm: B = YmX1*YmX2 */\n/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YmX2=fe#16); */\n/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YmX2=q->YminusX); */\nfe_mul(r->Y,r->Y,q->YminusX);\n\n/* qhasm: C = T2d2*T1 */\n/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */\n/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */\nfe_mul(r->T,q->T2d,p->T);\n\n/* qhasm: ZZ = Z1*Z2 */\n/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */\n/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */\nfe_mul(r->X,p->Z,q->Z);\n\n/* qhasm: D = 2*ZZ */\n/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */\n/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */\nfe_add(t0,r->X,r->X);\n\n/* qhasm: X3 = A-B */\n/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */\nfe_sub(r->X,r->Z,r->Y);\n\n/* qhasm: Y3 = A+B */\n/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */\nfe_add(r->Y,r->Z,r->Y);\n\n/* qhasm: Z3 = D+C */\n/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */\nfe_add(r->Z,t0,r->T);\n\n/* qhasm: T3 = D-C */\n/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */\nfe_sub(r->T,t0,r->T);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_double_scalarmult.c",
    "content": "#include \"ge.h\"\n\nstatic void slide(signed char *r,const unsigned char *a)\n{\n  int i;\n  int b;\n  int k;\n\n  for (i = 0;i < 256;++i)\n    r[i] = 1 & (a[i >> 3] >> (i & 7));\n\n  for (i = 0;i < 256;++i)\n    if (r[i]) {\n      for (b = 1;b <= 6 && i + b < 256;++b) {\n        if (r[i + b]) {\n          if (r[i] + (r[i + b] << b) <= 15) {\n            r[i] += r[i + b] << b; r[i + b] = 0;\n          } else if (r[i] - (r[i + b] << b) >= -15) {\n            r[i] -= r[i + b] << b;\n            for (k = i + b;k < 256;++k) {\n              if (!r[k]) {\n                r[k] = 1;\n                break;\n              }\n              r[k] = 0;\n            }\n          } else\n            break;\n        }\n      }\n    }\n\n}\n\nstatic ge_precomp Bi[8] = {\n#include \"base2.h\"\n} ;\n\n/*\nr = a * A + b * B\nwhere a = a[0]+256*a[1]+...+256^31 a[31].\nand b = b[0]+256*b[1]+...+256^31 b[31].\nB is the Ed25519 base point (x,4/5) with x positive.\n*/\n\nvoid ge_double_scalarmult_vartime(ge_p2 *r,const unsigned char *a,const ge_p3 *A,const unsigned char *b)\n{\n  signed char aslide[256];\n  signed char bslide[256];\n  ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */\n  ge_p1p1 t;\n  ge_p3 u;\n  ge_p3 A2;\n  int i;\n\n  slide(aslide,a);\n  slide(bslide,b);\n\n  ge_p3_to_cached(&Ai[0],A);\n  ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);\n  ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);\n  ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);\n  ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);\n  ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);\n  ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);\n  ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);\n  ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);\n\n  ge_p2_0(r);\n\n  for (i = 255;i >= 0;--i) {\n    if (aslide[i] || bslide[i]) break;\n  }\n\n  for (;i >= 0;--i) {\n    ge_p2_dbl(&t,r);\n\n    if (aslide[i] > 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_add(&t,&u,&Ai[aslide[i]/2]);\n    } else if (aslide[i] < 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_sub(&t,&u,&Ai[(-aslide[i])/2]);\n    }\n\n    if (bslide[i] > 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_madd(&t,&u,&Bi[bslide[i]/2]);\n    } else if (bslide[i] < 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_msub(&t,&u,&Bi[(-bslide[i])/2]);\n    }\n\n    ge_p1p1_to_p2(r,&t);\n  }\n}\n\nvoid ge_scalarmult_vartime(ge_p3 *r,const unsigned char *a,const ge_p3 *A)\n{\n  signed char aslide[256];\n  ge_cached Ai[8];\n  ge_p1p1 t;\n  ge_p3 u;\n  ge_p3 A2;\n  int i;\n\n  slide(aslide,a);\n\n  ge_p3_to_cached(&Ai[0],A);\n  ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t);\n  ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u);\n  ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u);\n  ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u);\n  ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u);\n  ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u);\n  ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u);\n  ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u);\n\n  ge_p3_0(r);\n\n  for (i = 255;i >= 0;--i) {\n    if (aslide[i]) break;\n  }\n\n  for (;i >= 0;--i) {\n    ge_p3_dbl(&t,r);\n\n    if (aslide[i] > 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_add(&t,&u,&Ai[aslide[i]/2]);\n    } else if (aslide[i] < 0) {\n      ge_p1p1_to_p3(&u,&t);\n      ge_sub(&t,&u,&Ai[(-aslide[i])/2]);\n    }\n\n   ge_p1p1_to_p3(r,&t);\n  }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_frombytes.c",
    "content": "#include \"ge.h\"\n\nstatic const fe d = {\n#include \"d.h\"\n} ;\n\nstatic const fe sqrtm1 = {\n#include \"sqrtm1.h\"\n} ;\n\nint ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)\n{\n  fe u;\n  fe v;\n  fe v3;\n  fe vxx;\n  fe check;\n\n  fe_frombytes(h->Y,s);\n  fe_1(h->Z);\n  fe_sq(u,h->Y);\n  fe_mul(v,u,d);\n  fe_sub(u,u,h->Z);       /* u = y^2-1 */\n  fe_add(v,v,h->Z);       /* v = dy^2+1 */\n\n  fe_sq(v3,v);\n  fe_mul(v3,v3,v);        /* v3 = v^3 */\n  fe_sq(h->X,v3);\n  fe_mul(h->X,h->X,v);\n  fe_mul(h->X,h->X,u);    /* x = uv^7 */\n\n  fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */\n  fe_mul(h->X,h->X,v3);\n  fe_mul(h->X,h->X,u);    /* x = uv^3(uv^7)^((q-5)/8) */\n\n  fe_sq(vxx,h->X);\n  fe_mul(vxx,vxx,v);\n  fe_sub(check,vxx,u);    /* vx^2-u */\n  if (fe_isnonzero(check)) {\n    fe_add(check,vxx,u);  /* vx^2+u */\n    if (fe_isnonzero(check)) return -1;\n    fe_mul(h->X,h->X,sqrtm1);\n  }\n\n  if (fe_isnegative(h->X) == (s[31] >> 7))\n    fe_neg(h->X,h->X);\n\n  fe_mul(h->T,h->X,h->Y);\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p + q\n*/\n\nvoid ge_madd(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)\n{\n  fe t0;\n#include \"ge_madd.h\"\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_madd.h",
    "content": "\n/* qhasm: enter ge_madd */\n\n/* qhasm: fe X1 */\n\n/* qhasm: fe Y1 */\n\n/* qhasm: fe Z1 */\n\n/* qhasm: fe T1 */\n\n/* qhasm: fe ypx2 */\n\n/* qhasm: fe ymx2 */\n\n/* qhasm: fe xy2d2 */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Y3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe T3 */\n\n/* qhasm: fe YpX1 */\n\n/* qhasm: fe YmX1 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe B */\n\n/* qhasm: fe C */\n\n/* qhasm: fe D */\n\n/* qhasm: YpX1 = Y1+X1 */\n/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */\nfe_add(r->X,p->Y,p->X);\n\n/* qhasm: YmX1 = Y1-X1 */\n/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */\nfe_sub(r->Y,p->Y,p->X);\n\n/* qhasm: A = YpX1*ypx2 */\n/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ypx2=fe#15); */\n/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ypx2=q->yplusx); */\nfe_mul(r->Z,r->X,q->yplusx);\n\n/* qhasm: B = YmX1*ymx2 */\n/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ymx2=fe#16); */\n/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ymx2=q->yminusx); */\nfe_mul(r->Y,r->Y,q->yminusx);\n\n/* qhasm: C = xy2d2*T1 */\n/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */\n/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */\nfe_mul(r->T,q->xy2d,p->T);\n\n/* qhasm: D = 2*Z1 */\n/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */\n/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */\nfe_add(t0,p->Z,p->Z);\n\n/* qhasm: X3 = A-B */\n/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */\nfe_sub(r->X,r->Z,r->Y);\n\n/* qhasm: Y3 = A+B */\n/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */\nfe_add(r->Y,r->Z,r->Y);\n\n/* qhasm: Z3 = D+C */\n/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */\nfe_add(r->Z,t0,r->T);\n\n/* qhasm: T3 = D-C */\n/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */\nfe_sub(r->T,t0,r->T);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p - q\n*/\n\nvoid ge_msub(ge_p1p1 *r,const ge_p3 *p,const ge_precomp *q)\n{\n  fe t0;\n#include \"ge_msub.h\"\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_msub.h",
    "content": "\n/* qhasm: enter ge_msub */\n\n/* qhasm: fe X1 */\n\n/* qhasm: fe Y1 */\n\n/* qhasm: fe Z1 */\n\n/* qhasm: fe T1 */\n\n/* qhasm: fe ypx2 */\n\n/* qhasm: fe ymx2 */\n\n/* qhasm: fe xy2d2 */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Y3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe T3 */\n\n/* qhasm: fe YpX1 */\n\n/* qhasm: fe YmX1 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe B */\n\n/* qhasm: fe C */\n\n/* qhasm: fe D */\n\n/* qhasm: YpX1 = Y1+X1 */\n/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */\nfe_add(r->X,p->Y,p->X);\n\n/* qhasm: YmX1 = Y1-X1 */\n/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */\nfe_sub(r->Y,p->Y,p->X);\n\n/* qhasm: A = YpX1*ymx2 */\n/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ymx2=fe#16); */\n/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ymx2=q->yminusx); */\nfe_mul(r->Z,r->X,q->yminusx);\n\n/* qhasm: B = YmX1*ypx2 */\n/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ypx2=fe#15); */\n/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ypx2=q->yplusx); */\nfe_mul(r->Y,r->Y,q->yplusx);\n\n/* qhasm: C = xy2d2*T1 */\n/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */\n/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */\nfe_mul(r->T,q->xy2d,p->T);\n\n/* qhasm: D = 2*Z1 */\n/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */\n/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */\nfe_add(t0,p->Z,p->Z);\n\n/* qhasm: X3 = A-B */\n/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */\nfe_sub(r->X,r->Z,r->Y);\n\n/* qhasm: Y3 = A+B */\n/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */\nfe_add(r->Y,r->Z,r->Y);\n\n/* qhasm: Z3 = D-C */\n/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */\nfe_sub(r->Z,t0,r->T);\n\n/* qhasm: T3 = D+C */\n/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */\nfe_add(r->T,t0,r->T);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p1p1_to_p2.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p\n*/\n\nextern void ge_p1p1_to_p2(ge_p2 *r,const ge_p1p1 *p)\n{\n  fe_mul(r->X,p->X,p->T);\n  fe_mul(r->Y,p->Y,p->Z);\n  fe_mul(r->Z,p->Z,p->T);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p1p1_to_p3.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p\n*/\n\nextern void ge_p1p1_to_p3(ge_p3 *r,const ge_p1p1 *p)\n{\n  fe_mul(r->X,p->X,p->T);\n  fe_mul(r->Y,p->Y,p->Z);\n  fe_mul(r->Z,p->Z,p->T);\n  fe_mul(r->T,p->X,p->Y);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_0.c",
    "content": "#include \"ge.h\"\n\nvoid ge_p2_0(ge_p2 *h)\n{\n  fe_0(h->X);\n  fe_1(h->Y);\n  fe_1(h->Z);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.c",
    "content": "#include \"ge.h\"\n\n/*\nr = 2 * p\n*/\n\nvoid ge_p2_dbl(ge_p1p1 *r,const ge_p2 *p)\n{\n  fe t0;\n#include \"ge_p2_dbl.h\"\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p2_dbl.h",
    "content": "\n/* qhasm: enter ge_p2_dbl */\n\n/* qhasm: fe X1 */\n\n/* qhasm: fe Y1 */\n\n/* qhasm: fe Z1 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe AA */\n\n/* qhasm: fe XX */\n\n/* qhasm: fe YY */\n\n/* qhasm: fe B */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Y3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe T3 */\n\n/* qhasm: XX=X1^2 */\n/* asm 1: fe_sq(>XX=fe#1,<X1=fe#11); */\n/* asm 2: fe_sq(>XX=r->X,<X1=p->X); */\nfe_sq(r->X,p->X);\n\n/* qhasm: YY=Y1^2 */\n/* asm 1: fe_sq(>YY=fe#3,<Y1=fe#12); */\n/* asm 2: fe_sq(>YY=r->Z,<Y1=p->Y); */\nfe_sq(r->Z,p->Y);\n\n/* qhasm: B=2*Z1^2 */\n/* asm 1: fe_sq2(>B=fe#4,<Z1=fe#13); */\n/* asm 2: fe_sq2(>B=r->T,<Z1=p->Z); */\nfe_sq2(r->T,p->Z);\n\n/* qhasm: A=X1+Y1 */\n/* asm 1: fe_add(>A=fe#2,<X1=fe#11,<Y1=fe#12); */\n/* asm 2: fe_add(>A=r->Y,<X1=p->X,<Y1=p->Y); */\nfe_add(r->Y,p->X,p->Y);\n\n/* qhasm: AA=A^2 */\n/* asm 1: fe_sq(>AA=fe#5,<A=fe#2); */\n/* asm 2: fe_sq(>AA=t0,<A=r->Y); */\nfe_sq(t0,r->Y);\n\n/* qhasm: Y3=YY+XX */\n/* asm 1: fe_add(>Y3=fe#2,<YY=fe#3,<XX=fe#1); */\n/* asm 2: fe_add(>Y3=r->Y,<YY=r->Z,<XX=r->X); */\nfe_add(r->Y,r->Z,r->X);\n\n/* qhasm: Z3=YY-XX */\n/* asm 1: fe_sub(>Z3=fe#3,<YY=fe#3,<XX=fe#1); */\n/* asm 2: fe_sub(>Z3=r->Z,<YY=r->Z,<XX=r->X); */\nfe_sub(r->Z,r->Z,r->X);\n\n/* qhasm: X3=AA-Y3 */\n/* asm 1: fe_sub(>X3=fe#1,<AA=fe#5,<Y3=fe#2); */\n/* asm 2: fe_sub(>X3=r->X,<AA=t0,<Y3=r->Y); */\nfe_sub(r->X,t0,r->Y);\n\n/* qhasm: T3=B-Z3 */\n/* asm 1: fe_sub(>T3=fe#4,<B=fe#4,<Z3=fe#3); */\n/* asm 2: fe_sub(>T3=r->T,<B=r->T,<Z3=r->Z); */\nfe_sub(r->T,r->T,r->Z);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_0.c",
    "content": "#include \"ge.h\"\n\nvoid ge_p3_0(ge_p3 *h)\n{\n  fe_0(h->X);\n  fe_1(h->Y);\n  fe_1(h->Z);\n  fe_0(h->T);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_dbl.c",
    "content": "#include \"ge.h\"\n\n/*\nr = 2 * p\n*/\n\nvoid ge_p3_dbl(ge_p1p1 *r,const ge_p3 *p)\n{\n  ge_p2 q;\n  ge_p3_to_p2(&q,p);\n  ge_p2_dbl(r,&q);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_cached.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p\n*/\n\nstatic const fe d2 = {\n#include \"d2.h\"\n} ;\n\nextern void ge_p3_to_cached(ge_cached *r,const ge_p3 *p)\n{\n  fe_add(r->YplusX,p->Y,p->X);\n  fe_sub(r->YminusX,p->Y,p->X);\n  fe_copy(r->Z,p->Z);\n  fe_mul(r->T2d,p->T,d2);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_to_p2.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p\n*/\n\nextern void ge_p3_to_p2(ge_p2 *r,const ge_p3 *p)\n{\n  fe_copy(r->X,p->X);\n  fe_copy(r->Y,p->Y);\n  fe_copy(r->Z,p->Z);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_p3_tobytes.c",
    "content": "#include \"ge.h\"\n\nvoid ge_p3_tobytes(unsigned char *s,const ge_p3 *h)\n{\n  fe recip;\n  fe x;\n  fe y;\n\n  fe_invert(recip,h->Z);\n  fe_mul(x,h->X,recip);\n  fe_mul(y,h->Y,recip);\n  fe_tobytes(s,y);\n  s[31] ^= fe_isnegative(x) << 7;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_precomp_0.c",
    "content": "#include \"ge.h\"\n\nvoid ge_precomp_0(ge_precomp *h)\n{\n  fe_1(h->yplusx);\n  fe_1(h->yminusx);\n  fe_0(h->xy2d);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_scalarmult_base.c",
    "content": "#include \"ge.h\"\n#include \"crypto_uint32.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\n#endif\n\nstatic unsigned char equal(signed char b,signed char c)\n{\n  unsigned char ub = b;\n  unsigned char uc = c;\n  unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */\n  crypto_uint32 y = x; /* 0: yes; 1..255: no */\n  y -= 1; /* 4294967295: yes; 0..254: no */\n  y >>= 31; /* 1: yes; 0: no */\n  return y;\n}\n\nstatic unsigned char negative(signed char b)\n{\n  unsigned long long x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */\n  x >>= 63; /* 1: yes; 0: no */\n  return x;\n}\n\nstatic void cmov(ge_precomp *t,ge_precomp *u,unsigned char b)\n{\n  fe_cmov(t->yplusx,u->yplusx,b);\n  fe_cmov(t->yminusx,u->yminusx,b);\n  fe_cmov(t->xy2d,u->xy2d,b);\n}\n\n/* base[i][j] = (j+1)*256^i*B */\nstatic ge_precomp base[32][8] = {\n#include \"base.h\"\n} ;\n\nstatic void ge_select(ge_precomp *t,int pos,signed char b)\n{\n  ge_precomp minust;\n  unsigned char bnegative = negative(b);\n  unsigned char babs = b - (((-bnegative) & b) << 1);\n\n  ge_precomp_0(t);\n  cmov(t,&base[pos][0],equal(babs,1));\n  cmov(t,&base[pos][1],equal(babs,2));\n  cmov(t,&base[pos][2],equal(babs,3));\n  cmov(t,&base[pos][3],equal(babs,4));\n  cmov(t,&base[pos][4],equal(babs,5));\n  cmov(t,&base[pos][5],equal(babs,6));\n  cmov(t,&base[pos][6],equal(babs,7));\n  cmov(t,&base[pos][7],equal(babs,8));\n  fe_copy(minust.yplusx,t->yminusx);\n  fe_copy(minust.yminusx,t->yplusx);\n  fe_neg(minust.xy2d,t->xy2d);\n  cmov(t,&minust,bnegative);\n}\n\n/*\nh = a * B\nwhere a = a[0]+256*a[1]+...+256^31 a[31]\nB is the Ed25519 base point (x,4/5) with x positive.\n\nPreconditions:\n  a[31] <= 127\n*/\n\nvoid ge_scalarmult_base(ge_p3 *h,const unsigned char *a)\n{\n  signed char e[64];\n  signed char carry;\n  ge_p1p1 r;\n  ge_p2 s;\n  ge_precomp t;\n  int i;\n\n  for (i = 0;i < 32;++i) {\n    e[2 * i + 0] = (a[i] >> 0) & 15;\n    e[2 * i + 1] = (a[i] >> 4) & 15;\n  }\n  /* each e[i] is between 0 and 15 */\n  /* e[63] is between 0 and 7 */\n\n  carry = 0;\n  for (i = 0;i < 63;++i) {\n    e[i] += carry;\n    carry = e[i] + 8;\n    carry >>= 4;\n    e[i] -= carry << 4;\n  }\n  e[63] += carry;\n  /* each e[i] is between -8 and 8 */\n\n  ge_p3_0(h);\n  for (i = 1;i < 64;i += 2) {\n    ge_select(&t,i / 2,e[i]);\n    ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);\n  }\n\n  ge_p3_dbl(&r,h);  ge_p1p1_to_p2(&s,&r);\n  ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);\n  ge_p2_dbl(&r,&s); ge_p1p1_to_p2(&s,&r);\n  ge_p2_dbl(&r,&s); ge_p1p1_to_p3(h,&r);\n\n  for (i = 0;i < 64;i += 2) {\n    ge_select(&t,i / 2,e[i]);\n    ge_madd(&r,h,&t); ge_p1p1_to_p3(h,&r);\n  }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.c",
    "content": "#include \"ge.h\"\n\n/*\nr = p - q\n*/\n\nvoid ge_sub(ge_p1p1 *r,const ge_p3 *p,const ge_cached *q)\n{\n  fe t0;\n#include \"ge_sub.h\"\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_sub.h",
    "content": "\n/* qhasm: enter ge_sub */\n\n/* qhasm: fe X1 */\n\n/* qhasm: fe Y1 */\n\n/* qhasm: fe Z1 */\n\n/* qhasm: fe Z2 */\n\n/* qhasm: fe T1 */\n\n/* qhasm: fe ZZ */\n\n/* qhasm: fe YpX2 */\n\n/* qhasm: fe YmX2 */\n\n/* qhasm: fe T2d2 */\n\n/* qhasm: fe X3 */\n\n/* qhasm: fe Y3 */\n\n/* qhasm: fe Z3 */\n\n/* qhasm: fe T3 */\n\n/* qhasm: fe YpX1 */\n\n/* qhasm: fe YmX1 */\n\n/* qhasm: fe A */\n\n/* qhasm: fe B */\n\n/* qhasm: fe C */\n\n/* qhasm: fe D */\n\n/* qhasm: YpX1 = Y1+X1 */\n/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */\nfe_add(r->X,p->Y,p->X);\n\n/* qhasm: YmX1 = Y1-X1 */\n/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */\n/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */\nfe_sub(r->Y,p->Y,p->X);\n\n/* qhasm: A = YpX1*YmX2 */\n/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YmX2=fe#16); */\n/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YmX2=q->YminusX); */\nfe_mul(r->Z,r->X,q->YminusX);\n\n/* qhasm: B = YmX1*YpX2 */\n/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YpX2=fe#15); */\n/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YpX2=q->YplusX); */\nfe_mul(r->Y,r->Y,q->YplusX);\n\n/* qhasm: C = T2d2*T1 */\n/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */\n/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */\nfe_mul(r->T,q->T2d,p->T);\n\n/* qhasm: ZZ = Z1*Z2 */\n/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */\n/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */\nfe_mul(r->X,p->Z,q->Z);\n\n/* qhasm: D = 2*ZZ */\n/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */\n/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */\nfe_add(t0,r->X,r->X);\n\n/* qhasm: X3 = A-B */\n/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */\nfe_sub(r->X,r->Z,r->Y);\n\n/* qhasm: Y3 = A+B */\n/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */\n/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */\nfe_add(r->Y,r->Z,r->Y);\n\n/* qhasm: Z3 = D-C */\n/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */\nfe_sub(r->Z,t0,r->T);\n\n/* qhasm: T3 = D+C */\n/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */\n/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */\nfe_add(r->T,t0,r->T);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/ge_tobytes.c",
    "content": "#include \"ge.h\"\n\nvoid ge_tobytes(unsigned char *s,const ge_p2 *h)\n{\n  fe recip;\n  fe x;\n  fe y;\n\n  fe_invert(recip,h->Z);\n  fe_mul(x,h->X,recip);\n  fe_mul(y,h->Y,recip);\n  fe_tobytes(s,y);\n  s[31] ^= fe_isnegative(x) << 7;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c",
    "content": "\n#include <string.h>\n\n#include \"crypto_sign_ed25519.h\"\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"fe.h\"\n#include \"ge.h\"\n#include \"randombytes.h\"\n#include \"utils.h\"\n\nint crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,\n                                     const unsigned char *seed)\n{\n    ge_p3 A;\n\n    crypto_hash_sha512(sk,seed,32);\n    sk[0] &= 248;\n    sk[31] &= 63;\n    sk[31] |= 64;\n\n    ge_scalarmult_base(&A,sk);\n    ge_p3_tobytes(pk,&A);\n\n    memmove(sk, seed, 32);\n    memmove(sk + 32, pk, 32);\n    return 0;\n}\n\nint crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk)\n{\n    unsigned char seed[32];\n    int           ret;\n\n    randombytes_buf(seed, sizeof seed);\n    ret = crypto_sign_ed25519_seed_keypair(pk, sk, seed);\n    sodium_memzero(seed, sizeof seed);\n\n    return ret;\n}\n\nint crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,\n                                         const unsigned char *ed25519_pk)\n{\n    ge_p3 A;\n    fe    x;\n    fe    one_minus_y;\n\n    if (ge_frombytes_negate_vartime(&A, ed25519_pk) != 0) {\n        return -1;\n    }\n    fe_1(one_minus_y);\n    fe_sub(one_minus_y, one_minus_y, A.Y);\n    fe_invert(one_minus_y, one_minus_y);\n    fe_1(x);\n    fe_add(x, x, A.Y);\n    fe_mul(x, x, one_minus_y);\n    fe_tobytes(curve25519_pk, x);\n\n    return 0;\n}\n\nint crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,\n                                         const unsigned char *ed25519_sk)\n{\n    unsigned char h[crypto_hash_sha512_BYTES];\n\n    crypto_hash_sha512(h, ed25519_sk,\n                       crypto_sign_ed25519_SECRETKEYBYTES -\n                       crypto_sign_ed25519_PUBLICKEYBYTES);\n    h[0] &= 248;\n    h[31] &= 127;\n    h[31] |= 64;\n    memcpy(curve25519_sk, h, crypto_scalarmult_curve25519_BYTES);\n    sodium_memzero(h, sizeof h);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c",
    "content": "\n#include <limits.h>\n#include <stdint.h>\n#include <string.h>\n\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_sign_edwards25519sha512batch.h\"\n#include \"crypto_verify_32.h\"\n#include \"fe.h\"\n#include \"ge.h\"\n#include \"randombytes.h\"\n#include \"sc.h\"\n#include \"utils.h\"\n\nint crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk,\n                                                unsigned char *sk)\n{\n    ge_p3 A;\n\n    randombytes_buf(sk, 32);\n    crypto_hash_sha512(sk, sk, 32);\n    sk[0] &= 248;\n    sk[31] &= 63;\n    sk[31] |= 64;\n    ge_scalarmult_base(&A, sk);\n    ge_p3_tobytes(pk, &A);\n\n    return 0;\n}\n\nint crypto_sign_edwards25519sha512batch(unsigned char *sm,\n                                        unsigned long long *smlen_p,\n                                        const unsigned char *m,\n                                        unsigned long long mlen,\n                                        const unsigned char *sk)\n{\n    crypto_hash_sha512_state hs;\n    unsigned char nonce[64];\n    unsigned char hram[64];\n    unsigned char sig[64];\n    ge_p3 A;\n    ge_p3 R;\n\n    crypto_hash_sha512_init(&hs);\n    crypto_hash_sha512_update(&hs, sk + 32, 32);\n    crypto_hash_sha512_update(&hs, m, mlen);\n    crypto_hash_sha512_final(&hs, nonce);\n    ge_scalarmult_base(&A, sk);\n    ge_p3_tobytes(sig + 32, &A);\n    sc_reduce(nonce);\n    ge_scalarmult_base(&R, nonce);\n    ge_p3_tobytes(sig, &R);\n    crypto_hash_sha512_init(&hs);\n    crypto_hash_sha512_update(&hs, sig, 32);\n    crypto_hash_sha512_update(&hs, m, mlen);\n    crypto_hash_sha512_final(&hs, hram);\n    sc_reduce(hram);\n    sc_muladd(sig + 32, hram, nonce, sk);\n    sodium_memzero(hram, sizeof hram);\n    memmove(sm + 32, m, (size_t) mlen);\n    memcpy(sm, sig, 32);\n    memcpy(sm + 32 + mlen, sig + 32, 32);\n    *smlen_p = mlen + 64U;\n\n    return 0;\n}\n\nint crypto_sign_edwards25519sha512batch_open(unsigned char *m,\n                                             unsigned long long *mlen_p,\n                                             const unsigned char *sm,\n                                             unsigned long long smlen,\n                                             const unsigned char *pk)\n{\n    unsigned char h[64];\n    unsigned char t1[32], t2[32];\n    unsigned long long mlen;\n    ge_cached Ai;\n    ge_p1p1 csa;\n    ge_p2 cs;\n    ge_p3 A;\n    ge_p3 R;\n    ge_p3 cs3;\n\n    *mlen_p = 0;\n    if (smlen < 64 || smlen > SIZE_MAX) {\n        return -1;\n    }\n    mlen = smlen - 64;\n    if (sm[smlen - 1] & 224) {\n        return -1;\n    }\n    if (ge_frombytes_negate_vartime(&A, pk) != 0 ||\n        ge_frombytes_negate_vartime(&R, sm) != 0) {\n        return -1;\n    }\n    ge_p3_to_cached(&Ai, &A);\n    crypto_hash_sha512(h, sm, mlen + 32);\n    sc_reduce(h);\n    ge_scalarmult_vartime(&cs3, h, &R);\n    ge_add(&csa, &cs3, &Ai);\n    ge_p1p1_to_p2(&cs, &csa);\n    ge_tobytes(t1, &cs);\n    t1[31] ^= 1 << 7;\n    ge_scalarmult_base(&R, sm + 32 + mlen);\n    ge_p3_tobytes(t2, &R);\n    if (crypto_verify_32(t1, t2) != 0) {\n        return -1;\n    }\n    *mlen_p = mlen;\n    memmove(m, sm + 64, mlen);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c",
    "content": "\n#include <limits.h>\n#include <stdint.h>\n#include <string.h>\n\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_sign_ed25519.h\"\n#include \"crypto_verify_32.h\"\n#include \"ge.h\"\n#include \"sc.h\"\n#include \"utils.h\"\n\nint\ncrypto_sign_ed25519_verify_detached(const unsigned char *sig,\n                                    const unsigned char *m,\n                                    unsigned long long mlen,\n                                    const unsigned char *pk)\n{\n    crypto_hash_sha512_state hs;\n    unsigned char h[64];\n    unsigned char rcheck[32];\n    unsigned int  i;\n    unsigned char d = 0;\n    ge_p3 A;\n    ge_p2 R;\n\n    if (sig[63] & 224) {\n        return -1;\n    }\n    if (ge_frombytes_negate_vartime(&A, pk) != 0) {\n        return -1;\n    }\n    for (i = 0; i < 32; ++i) {\n        d |= pk[i];\n    }\n    if (d == 0) {\n        return -1;\n    }\n    crypto_hash_sha512_init(&hs);\n    crypto_hash_sha512_update(&hs, sig, 32);\n    crypto_hash_sha512_update(&hs, pk, 32);\n    crypto_hash_sha512_update(&hs, m, mlen);\n    crypto_hash_sha512_final(&hs, h);\n    sc_reduce(h);\n\n    ge_double_scalarmult_vartime(&R, h, &A, sig + 32);\n    ge_tobytes(rcheck, &R);\n\n    return crypto_verify_32(rcheck, sig) | (-(rcheck == sig)) |\n           sodium_memcmp(sig, rcheck, 32);\n}\n\nint\ncrypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,\n                         const unsigned char *sm, unsigned long long smlen,\n                         const unsigned char *pk)\n{\n    unsigned long long mlen;\n\n    if (smlen < 64 || smlen > SIZE_MAX) {\n        goto badsig;\n    }\n    mlen = smlen - 64;\n    if (crypto_sign_ed25519_verify_detached(sm, sm + 64, mlen, pk) != 0) {\n        memset(m, 0, mlen);\n        goto badsig;\n    }\n    if (mlen_p != NULL) {\n        *mlen_p = mlen;\n    }\n    memmove(m, sm + 64, mlen);\n\n    return 0;\n\nbadsig:\n    if (mlen_p != NULL) {\n        *mlen_p = 0;\n    }\n    return -1;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow22523.h",
    "content": "\n/* qhasm: fe z1 */\n\n/* qhasm: fe z2 */\n\n/* qhasm: fe z8 */\n\n/* qhasm: fe z9 */\n\n/* qhasm: fe z11 */\n\n/* qhasm: fe z22 */\n\n/* qhasm: fe z_5_0 */\n\n/* qhasm: fe z_10_5 */\n\n/* qhasm: fe z_10_0 */\n\n/* qhasm: fe z_20_10 */\n\n/* qhasm: fe z_20_0 */\n\n/* qhasm: fe z_40_20 */\n\n/* qhasm: fe z_40_0 */\n\n/* qhasm: fe z_50_10 */\n\n/* qhasm: fe z_50_0 */\n\n/* qhasm: fe z_100_50 */\n\n/* qhasm: fe z_100_0 */\n\n/* qhasm: fe z_200_100 */\n\n/* qhasm: fe z_200_0 */\n\n/* qhasm: fe z_250_50 */\n\n/* qhasm: fe z_250_0 */\n\n/* qhasm: fe z_252_2 */\n\n/* qhasm: fe z_252_3 */\n\n/* qhasm: enter pow22523 */\n\n/* qhasm: z2 = z1^2^1 */\n/* asm 1: fe_sq(>z2=fe#1,<z1=fe#11); for (i = 1;i < 1;++i) fe_sq(>z2=fe#1,>z2=fe#1); */\n/* asm 2: fe_sq(>z2=t0,<z1=z); for (i = 1;i < 1;++i) fe_sq(>z2=t0,>z2=t0); */\nfe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */\n\n/* qhasm: z8 = z2^2^2 */\n/* asm 1: fe_sq(>z8=fe#2,<z2=fe#1); for (i = 1;i < 2;++i) fe_sq(>z8=fe#2,>z8=fe#2); */\n/* asm 2: fe_sq(>z8=t1,<z2=t0); for (i = 1;i < 2;++i) fe_sq(>z8=t1,>z8=t1); */\nfe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1);\n\n/* qhasm: z9 = z1*z8 */\n/* asm 1: fe_mul(>z9=fe#2,<z1=fe#11,<z8=fe#2); */\n/* asm 2: fe_mul(>z9=t1,<z1=z,<z8=t1); */\nfe_mul(t1,z,t1);\n\n/* qhasm: z11 = z2*z9 */\n/* asm 1: fe_mul(>z11=fe#1,<z2=fe#1,<z9=fe#2); */\n/* asm 2: fe_mul(>z11=t0,<z2=t0,<z9=t1); */\nfe_mul(t0,t0,t1);\n\n/* qhasm: z22 = z11^2^1 */\n/* asm 1: fe_sq(>z22=fe#1,<z11=fe#1); for (i = 1;i < 1;++i) fe_sq(>z22=fe#1,>z22=fe#1); */\n/* asm 2: fe_sq(>z22=t0,<z11=t0); for (i = 1;i < 1;++i) fe_sq(>z22=t0,>z22=t0); */\nfe_sq(t0,t0); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */\n\n/* qhasm: z_5_0 = z9*z22 */\n/* asm 1: fe_mul(>z_5_0=fe#1,<z9=fe#2,<z22=fe#1); */\n/* asm 2: fe_mul(>z_5_0=t0,<z9=t1,<z22=t0); */\nfe_mul(t0,t1,t0);\n\n/* qhasm: z_10_5 = z_5_0^2^5 */\n/* asm 1: fe_sq(>z_10_5=fe#2,<z_5_0=fe#1); for (i = 1;i < 5;++i) fe_sq(>z_10_5=fe#2,>z_10_5=fe#2); */\n/* asm 2: fe_sq(>z_10_5=t1,<z_5_0=t0); for (i = 1;i < 5;++i) fe_sq(>z_10_5=t1,>z_10_5=t1); */\nfe_sq(t1,t0); for (i = 1;i < 5;++i) fe_sq(t1,t1);\n\n/* qhasm: z_10_0 = z_10_5*z_5_0 */\n/* asm 1: fe_mul(>z_10_0=fe#1,<z_10_5=fe#2,<z_5_0=fe#1); */\n/* asm 2: fe_mul(>z_10_0=t0,<z_10_5=t1,<z_5_0=t0); */\nfe_mul(t0,t1,t0);\n\n/* qhasm: z_20_10 = z_10_0^2^10 */\n/* asm 1: fe_sq(>z_20_10=fe#2,<z_10_0=fe#1); for (i = 1;i < 10;++i) fe_sq(>z_20_10=fe#2,>z_20_10=fe#2); */\n/* asm 2: fe_sq(>z_20_10=t1,<z_10_0=t0); for (i = 1;i < 10;++i) fe_sq(>z_20_10=t1,>z_20_10=t1); */\nfe_sq(t1,t0); for (i = 1;i < 10;++i) fe_sq(t1,t1);\n\n/* qhasm: z_20_0 = z_20_10*z_10_0 */\n/* asm 1: fe_mul(>z_20_0=fe#2,<z_20_10=fe#2,<z_10_0=fe#1); */\n/* asm 2: fe_mul(>z_20_0=t1,<z_20_10=t1,<z_10_0=t0); */\nfe_mul(t1,t1,t0);\n\n/* qhasm: z_40_20 = z_20_0^2^20 */\n/* asm 1: fe_sq(>z_40_20=fe#3,<z_20_0=fe#2); for (i = 1;i < 20;++i) fe_sq(>z_40_20=fe#3,>z_40_20=fe#3); */\n/* asm 2: fe_sq(>z_40_20=t2,<z_20_0=t1); for (i = 1;i < 20;++i) fe_sq(>z_40_20=t2,>z_40_20=t2); */\nfe_sq(t2,t1); for (i = 1;i < 20;++i) fe_sq(t2,t2);\n\n/* qhasm: z_40_0 = z_40_20*z_20_0 */\n/* asm 1: fe_mul(>z_40_0=fe#2,<z_40_20=fe#3,<z_20_0=fe#2); */\n/* asm 2: fe_mul(>z_40_0=t1,<z_40_20=t2,<z_20_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_50_10 = z_40_0^2^10 */\n/* asm 1: fe_sq(>z_50_10=fe#2,<z_40_0=fe#2); for (i = 1;i < 10;++i) fe_sq(>z_50_10=fe#2,>z_50_10=fe#2); */\n/* asm 2: fe_sq(>z_50_10=t1,<z_40_0=t1); for (i = 1;i < 10;++i) fe_sq(>z_50_10=t1,>z_50_10=t1); */\nfe_sq(t1,t1); for (i = 1;i < 10;++i) fe_sq(t1,t1);\n\n/* qhasm: z_50_0 = z_50_10*z_10_0 */\n/* asm 1: fe_mul(>z_50_0=fe#1,<z_50_10=fe#2,<z_10_0=fe#1); */\n/* asm 2: fe_mul(>z_50_0=t0,<z_50_10=t1,<z_10_0=t0); */\nfe_mul(t0,t1,t0);\n\n/* qhasm: z_100_50 = z_50_0^2^50 */\n/* asm 1: fe_sq(>z_100_50=fe#2,<z_50_0=fe#1); for (i = 1;i < 50;++i) fe_sq(>z_100_50=fe#2,>z_100_50=fe#2); */\n/* asm 2: fe_sq(>z_100_50=t1,<z_50_0=t0); for (i = 1;i < 50;++i) fe_sq(>z_100_50=t1,>z_100_50=t1); */\nfe_sq(t1,t0); for (i = 1;i < 50;++i) fe_sq(t1,t1);\n\n/* qhasm: z_100_0 = z_100_50*z_50_0 */\n/* asm 1: fe_mul(>z_100_0=fe#2,<z_100_50=fe#2,<z_50_0=fe#1); */\n/* asm 2: fe_mul(>z_100_0=t1,<z_100_50=t1,<z_50_0=t0); */\nfe_mul(t1,t1,t0);\n\n/* qhasm: z_200_100 = z_100_0^2^100 */\n/* asm 1: fe_sq(>z_200_100=fe#3,<z_100_0=fe#2); for (i = 1;i < 100;++i) fe_sq(>z_200_100=fe#3,>z_200_100=fe#3); */\n/* asm 2: fe_sq(>z_200_100=t2,<z_100_0=t1); for (i = 1;i < 100;++i) fe_sq(>z_200_100=t2,>z_200_100=t2); */\nfe_sq(t2,t1); for (i = 1;i < 100;++i) fe_sq(t2,t2);\n\n/* qhasm: z_200_0 = z_200_100*z_100_0 */\n/* asm 1: fe_mul(>z_200_0=fe#2,<z_200_100=fe#3,<z_100_0=fe#2); */\n/* asm 2: fe_mul(>z_200_0=t1,<z_200_100=t2,<z_100_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_250_50 = z_200_0^2^50 */\n/* asm 1: fe_sq(>z_250_50=fe#2,<z_200_0=fe#2); for (i = 1;i < 50;++i) fe_sq(>z_250_50=fe#2,>z_250_50=fe#2); */\n/* asm 2: fe_sq(>z_250_50=t1,<z_200_0=t1); for (i = 1;i < 50;++i) fe_sq(>z_250_50=t1,>z_250_50=t1); */\nfe_sq(t1,t1); for (i = 1;i < 50;++i) fe_sq(t1,t1);\n\n/* qhasm: z_250_0 = z_250_50*z_50_0 */\n/* asm 1: fe_mul(>z_250_0=fe#1,<z_250_50=fe#2,<z_50_0=fe#1); */\n/* asm 2: fe_mul(>z_250_0=t0,<z_250_50=t1,<z_50_0=t0); */\nfe_mul(t0,t1,t0);\n\n/* qhasm: z_252_2 = z_250_0^2^2 */\n/* asm 1: fe_sq(>z_252_2=fe#1,<z_250_0=fe#1); for (i = 1;i < 2;++i) fe_sq(>z_252_2=fe#1,>z_252_2=fe#1); */\n/* asm 2: fe_sq(>z_252_2=t0,<z_250_0=t0); for (i = 1;i < 2;++i) fe_sq(>z_252_2=t0,>z_252_2=t0); */\nfe_sq(t0,t0); for (i = 1;i < 2;++i) fe_sq(t0,t0);\n\n/* qhasm: z_252_3 = z_252_2*z1 */\n/* asm 1: fe_mul(>z_252_3=fe#12,<z_252_2=fe#1,<z1=fe#11); */\n/* asm 2: fe_mul(>z_252_3=out,<z_252_2=t0,<z1=z); */\nfe_mul(out,t0,z);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/pow225521.h",
    "content": "\n/* qhasm: fe z1 */\n\n/* qhasm: fe z2 */\n\n/* qhasm: fe z8 */\n\n/* qhasm: fe z9 */\n\n/* qhasm: fe z11 */\n\n/* qhasm: fe z22 */\n\n/* qhasm: fe z_5_0 */\n\n/* qhasm: fe z_10_5 */\n\n/* qhasm: fe z_10_0 */\n\n/* qhasm: fe z_20_10 */\n\n/* qhasm: fe z_20_0 */\n\n/* qhasm: fe z_40_20 */\n\n/* qhasm: fe z_40_0 */\n\n/* qhasm: fe z_50_10 */\n\n/* qhasm: fe z_50_0 */\n\n/* qhasm: fe z_100_50 */\n\n/* qhasm: fe z_100_0 */\n\n/* qhasm: fe z_200_100 */\n\n/* qhasm: fe z_200_0 */\n\n/* qhasm: fe z_250_50 */\n\n/* qhasm: fe z_250_0 */\n\n/* qhasm: fe z_255_5 */\n\n/* qhasm: fe z_255_21 */\n\n/* qhasm: enter pow225521 */\n\n/* qhasm: z2 = z1^2^1 */\n/* asm 1: fe_sq(>z2=fe#1,<z1=fe#11); for (i = 1;i < 1;++i) fe_sq(>z2=fe#1,>z2=fe#1); */\n/* asm 2: fe_sq(>z2=t0,<z1=z); for (i = 1;i < 1;++i) fe_sq(>z2=t0,>z2=t0); */\nfe_sq(t0,z); /* for (i = 1;i < 1;++i) fe_sq(t0,t0); */\n\n/* qhasm: z8 = z2^2^2 */\n/* asm 1: fe_sq(>z8=fe#2,<z2=fe#1); for (i = 1;i < 2;++i) fe_sq(>z8=fe#2,>z8=fe#2); */\n/* asm 2: fe_sq(>z8=t1,<z2=t0); for (i = 1;i < 2;++i) fe_sq(>z8=t1,>z8=t1); */\nfe_sq(t1,t0); for (i = 1;i < 2;++i) fe_sq(t1,t1);\n\n/* qhasm: z9 = z1*z8 */\n/* asm 1: fe_mul(>z9=fe#2,<z1=fe#11,<z8=fe#2); */\n/* asm 2: fe_mul(>z9=t1,<z1=z,<z8=t1); */\nfe_mul(t1,z,t1);\n\n/* qhasm: z11 = z2*z9 */\n/* asm 1: fe_mul(>z11=fe#1,<z2=fe#1,<z9=fe#2); */\n/* asm 2: fe_mul(>z11=t0,<z2=t0,<z9=t1); */\nfe_mul(t0,t0,t1);\n\n/* qhasm: z22 = z11^2^1 */\n/* asm 1: fe_sq(>z22=fe#3,<z11=fe#1); for (i = 1;i < 1;++i) fe_sq(>z22=fe#3,>z22=fe#3); */\n/* asm 2: fe_sq(>z22=t2,<z11=t0); for (i = 1;i < 1;++i) fe_sq(>z22=t2,>z22=t2); */\nfe_sq(t2,t0); /* for (i = 1;i < 1;++i) fe_sq(t2,t2); */\n\n/* qhasm: z_5_0 = z9*z22 */\n/* asm 1: fe_mul(>z_5_0=fe#2,<z9=fe#2,<z22=fe#3); */\n/* asm 2: fe_mul(>z_5_0=t1,<z9=t1,<z22=t2); */\nfe_mul(t1,t1,t2);\n\n/* qhasm: z_10_5 = z_5_0^2^5 */\n/* asm 1: fe_sq(>z_10_5=fe#3,<z_5_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_10_5=fe#3,>z_10_5=fe#3); */\n/* asm 2: fe_sq(>z_10_5=t2,<z_5_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_10_5=t2,>z_10_5=t2); */\nfe_sq(t2,t1); for (i = 1;i < 5;++i) fe_sq(t2,t2);\n\n/* qhasm: z_10_0 = z_10_5*z_5_0 */\n/* asm 1: fe_mul(>z_10_0=fe#2,<z_10_5=fe#3,<z_5_0=fe#2); */\n/* asm 2: fe_mul(>z_10_0=t1,<z_10_5=t2,<z_5_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_20_10 = z_10_0^2^10 */\n/* asm 1: fe_sq(>z_20_10=fe#3,<z_10_0=fe#2); for (i = 1;i < 10;++i) fe_sq(>z_20_10=fe#3,>z_20_10=fe#3); */\n/* asm 2: fe_sq(>z_20_10=t2,<z_10_0=t1); for (i = 1;i < 10;++i) fe_sq(>z_20_10=t2,>z_20_10=t2); */\nfe_sq(t2,t1); for (i = 1;i < 10;++i) fe_sq(t2,t2);\n\n/* qhasm: z_20_0 = z_20_10*z_10_0 */\n/* asm 1: fe_mul(>z_20_0=fe#3,<z_20_10=fe#3,<z_10_0=fe#2); */\n/* asm 2: fe_mul(>z_20_0=t2,<z_20_10=t2,<z_10_0=t1); */\nfe_mul(t2,t2,t1);\n\n/* qhasm: z_40_20 = z_20_0^2^20 */\n/* asm 1: fe_sq(>z_40_20=fe#4,<z_20_0=fe#3); for (i = 1;i < 20;++i) fe_sq(>z_40_20=fe#4,>z_40_20=fe#4); */\n/* asm 2: fe_sq(>z_40_20=t3,<z_20_0=t2); for (i = 1;i < 20;++i) fe_sq(>z_40_20=t3,>z_40_20=t3); */\nfe_sq(t3,t2); for (i = 1;i < 20;++i) fe_sq(t3,t3);\n\n/* qhasm: z_40_0 = z_40_20*z_20_0 */\n/* asm 1: fe_mul(>z_40_0=fe#3,<z_40_20=fe#4,<z_20_0=fe#3); */\n/* asm 2: fe_mul(>z_40_0=t2,<z_40_20=t3,<z_20_0=t2); */\nfe_mul(t2,t3,t2);\n\n/* qhasm: z_50_10 = z_40_0^2^10 */\n/* asm 1: fe_sq(>z_50_10=fe#3,<z_40_0=fe#3); for (i = 1;i < 10;++i) fe_sq(>z_50_10=fe#3,>z_50_10=fe#3); */\n/* asm 2: fe_sq(>z_50_10=t2,<z_40_0=t2); for (i = 1;i < 10;++i) fe_sq(>z_50_10=t2,>z_50_10=t2); */\nfe_sq(t2,t2); for (i = 1;i < 10;++i) fe_sq(t2,t2);\n\n/* qhasm: z_50_0 = z_50_10*z_10_0 */\n/* asm 1: fe_mul(>z_50_0=fe#2,<z_50_10=fe#3,<z_10_0=fe#2); */\n/* asm 2: fe_mul(>z_50_0=t1,<z_50_10=t2,<z_10_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_100_50 = z_50_0^2^50 */\n/* asm 1: fe_sq(>z_100_50=fe#3,<z_50_0=fe#2); for (i = 1;i < 50;++i) fe_sq(>z_100_50=fe#3,>z_100_50=fe#3); */\n/* asm 2: fe_sq(>z_100_50=t2,<z_50_0=t1); for (i = 1;i < 50;++i) fe_sq(>z_100_50=t2,>z_100_50=t2); */\nfe_sq(t2,t1); for (i = 1;i < 50;++i) fe_sq(t2,t2);\n\n/* qhasm: z_100_0 = z_100_50*z_50_0 */\n/* asm 1: fe_mul(>z_100_0=fe#3,<z_100_50=fe#3,<z_50_0=fe#2); */\n/* asm 2: fe_mul(>z_100_0=t2,<z_100_50=t2,<z_50_0=t1); */\nfe_mul(t2,t2,t1);\n\n/* qhasm: z_200_100 = z_100_0^2^100 */\n/* asm 1: fe_sq(>z_200_100=fe#4,<z_100_0=fe#3); for (i = 1;i < 100;++i) fe_sq(>z_200_100=fe#4,>z_200_100=fe#4); */\n/* asm 2: fe_sq(>z_200_100=t3,<z_100_0=t2); for (i = 1;i < 100;++i) fe_sq(>z_200_100=t3,>z_200_100=t3); */\nfe_sq(t3,t2); for (i = 1;i < 100;++i) fe_sq(t3,t3);\n\n/* qhasm: z_200_0 = z_200_100*z_100_0 */\n/* asm 1: fe_mul(>z_200_0=fe#3,<z_200_100=fe#4,<z_100_0=fe#3); */\n/* asm 2: fe_mul(>z_200_0=t2,<z_200_100=t3,<z_100_0=t2); */\nfe_mul(t2,t3,t2);\n\n/* qhasm: z_250_50 = z_200_0^2^50 */\n/* asm 1: fe_sq(>z_250_50=fe#3,<z_200_0=fe#3); for (i = 1;i < 50;++i) fe_sq(>z_250_50=fe#3,>z_250_50=fe#3); */\n/* asm 2: fe_sq(>z_250_50=t2,<z_200_0=t2); for (i = 1;i < 50;++i) fe_sq(>z_250_50=t2,>z_250_50=t2); */\nfe_sq(t2,t2); for (i = 1;i < 50;++i) fe_sq(t2,t2);\n\n/* qhasm: z_250_0 = z_250_50*z_50_0 */\n/* asm 1: fe_mul(>z_250_0=fe#2,<z_250_50=fe#3,<z_50_0=fe#2); */\n/* asm 2: fe_mul(>z_250_0=t1,<z_250_50=t2,<z_50_0=t1); */\nfe_mul(t1,t2,t1);\n\n/* qhasm: z_255_5 = z_250_0^2^5 */\n/* asm 1: fe_sq(>z_255_5=fe#2,<z_250_0=fe#2); for (i = 1;i < 5;++i) fe_sq(>z_255_5=fe#2,>z_255_5=fe#2); */\n/* asm 2: fe_sq(>z_255_5=t1,<z_250_0=t1); for (i = 1;i < 5;++i) fe_sq(>z_255_5=t1,>z_255_5=t1); */\nfe_sq(t1,t1); for (i = 1;i < 5;++i) fe_sq(t1,t1);\n\n/* qhasm: z_255_21 = z_255_5*z11 */\n/* asm 1: fe_mul(>z_255_21=fe#12,<z_255_5=fe#2,<z11=fe#1); */\n/* asm 2: fe_mul(>z_255_21=out,<z_255_5=t1,<z11=t0); */\nfe_mul(out,t1,t0);\n\n/* qhasm: return */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sc.h",
    "content": "#ifndef SC_H\n#define SC_H\n\n/*\nThe set of scalars is \\Z/l\nwhere l = 2^252 + 27742317777372353535851937790883648493.\n*/\n\n#define sc_reduce crypto_sign_ed25519_ref10_sc_reduce\n#define sc_muladd crypto_sign_ed25519_ref10_sc_muladd\n\nextern void sc_reduce(unsigned char *);\nextern void sc_muladd(unsigned char *,const unsigned char *,const unsigned char *,const unsigned char *);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sc_muladd.c",
    "content": "#include \"sc.h\"\n#include \"crypto_int64.h\"\n#include \"crypto_uint32.h\"\n#include \"crypto_uint64.h\"\n\nstatic crypto_uint64 load_3(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  return result;\n}\n\nstatic crypto_uint64 load_4(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  result |= ((crypto_uint64) in[3]) << 24;\n  return result;\n}\n\n/*\nInput:\n  a[0]+256*a[1]+...+256^31*a[31] = a\n  b[0]+256*b[1]+...+256^31*b[31] = b\n  c[0]+256*c[1]+...+256^31*c[31] = c\n\nOutput:\n  s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l\n  where l = 2^252 + 27742317777372353535851937790883648493.\n*/\n\nvoid sc_muladd(unsigned char *s,const unsigned char *a,const unsigned char *b,const unsigned char *c)\n{\n  crypto_int64 a0 = 2097151 & load_3(a);\n  crypto_int64 a1 = 2097151 & (load_4(a + 2) >> 5);\n  crypto_int64 a2 = 2097151 & (load_3(a + 5) >> 2);\n  crypto_int64 a3 = 2097151 & (load_4(a + 7) >> 7);\n  crypto_int64 a4 = 2097151 & (load_4(a + 10) >> 4);\n  crypto_int64 a5 = 2097151 & (load_3(a + 13) >> 1);\n  crypto_int64 a6 = 2097151 & (load_4(a + 15) >> 6);\n  crypto_int64 a7 = 2097151 & (load_3(a + 18) >> 3);\n  crypto_int64 a8 = 2097151 & load_3(a + 21);\n  crypto_int64 a9 = 2097151 & (load_4(a + 23) >> 5);\n  crypto_int64 a10 = 2097151 & (load_3(a + 26) >> 2);\n  crypto_int64 a11 = (load_4(a + 28) >> 7);\n  crypto_int64 b0 = 2097151 & load_3(b);\n  crypto_int64 b1 = 2097151 & (load_4(b + 2) >> 5);\n  crypto_int64 b2 = 2097151 & (load_3(b + 5) >> 2);\n  crypto_int64 b3 = 2097151 & (load_4(b + 7) >> 7);\n  crypto_int64 b4 = 2097151 & (load_4(b + 10) >> 4);\n  crypto_int64 b5 = 2097151 & (load_3(b + 13) >> 1);\n  crypto_int64 b6 = 2097151 & (load_4(b + 15) >> 6);\n  crypto_int64 b7 = 2097151 & (load_3(b + 18) >> 3);\n  crypto_int64 b8 = 2097151 & load_3(b + 21);\n  crypto_int64 b9 = 2097151 & (load_4(b + 23) >> 5);\n  crypto_int64 b10 = 2097151 & (load_3(b + 26) >> 2);\n  crypto_int64 b11 = (load_4(b + 28) >> 7);\n  crypto_int64 c0 = 2097151 & load_3(c);\n  crypto_int64 c1 = 2097151 & (load_4(c + 2) >> 5);\n  crypto_int64 c2 = 2097151 & (load_3(c + 5) >> 2);\n  crypto_int64 c3 = 2097151 & (load_4(c + 7) >> 7);\n  crypto_int64 c4 = 2097151 & (load_4(c + 10) >> 4);\n  crypto_int64 c5 = 2097151 & (load_3(c + 13) >> 1);\n  crypto_int64 c6 = 2097151 & (load_4(c + 15) >> 6);\n  crypto_int64 c7 = 2097151 & (load_3(c + 18) >> 3);\n  crypto_int64 c8 = 2097151 & load_3(c + 21);\n  crypto_int64 c9 = 2097151 & (load_4(c + 23) >> 5);\n  crypto_int64 c10 = 2097151 & (load_3(c + 26) >> 2);\n  crypto_int64 c11 = (load_4(c + 28) >> 7);\n  crypto_int64 s0;\n  crypto_int64 s1;\n  crypto_int64 s2;\n  crypto_int64 s3;\n  crypto_int64 s4;\n  crypto_int64 s5;\n  crypto_int64 s6;\n  crypto_int64 s7;\n  crypto_int64 s8;\n  crypto_int64 s9;\n  crypto_int64 s10;\n  crypto_int64 s11;\n  crypto_int64 s12;\n  crypto_int64 s13;\n  crypto_int64 s14;\n  crypto_int64 s15;\n  crypto_int64 s16;\n  crypto_int64 s17;\n  crypto_int64 s18;\n  crypto_int64 s19;\n  crypto_int64 s20;\n  crypto_int64 s21;\n  crypto_int64 s22;\n  crypto_int64 s23;\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n  crypto_int64 carry10;\n  crypto_int64 carry11;\n  crypto_int64 carry12;\n  crypto_int64 carry13;\n  crypto_int64 carry14;\n  crypto_int64 carry15;\n  crypto_int64 carry16;\n  crypto_int64 carry17;\n  crypto_int64 carry18;\n  crypto_int64 carry19;\n  crypto_int64 carry20;\n  crypto_int64 carry21;\n  crypto_int64 carry22;\n\n  s0 = c0 + a0*b0;\n  s1 = c1 + a0*b1 + a1*b0;\n  s2 = c2 + a0*b2 + a1*b1 + a2*b0;\n  s3 = c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0;\n  s4 = c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0;\n  s5 = c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0;\n  s6 = c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0;\n  s7 = c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0;\n  s8 = c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0;\n  s9 = c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0;\n  s10 = c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0;\n  s11 = c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0;\n  s12 = a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1;\n  s13 = a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2;\n  s14 = a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3;\n  s15 = a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4;\n  s16 = a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5;\n  s17 = a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6;\n  s18 = a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7;\n  s19 = a8*b11 + a9*b10 + a10*b9 + a11*b8;\n  s20 = a9*b11 + a10*b10 + a11*b9;\n  s21 = a10*b11 + a11*b10;\n  s22 = a11*b11;\n  s23 = 0;\n\n  carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n  carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= carry12 * (1L << 21);\n  carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= carry14 * (1L << 21);\n  carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= carry16 * (1L << 21);\n  carry18 = (s18 + (1L << 20)) >> 21; s19 += carry18; s18 -= carry18 * (1L << 21);\n  carry20 = (s20 + (1L << 20)) >> 21; s21 += carry20; s20 -= carry20 * (1L << 21);\n  carry22 = (s22 + (1L << 20)) >> 21; s23 += carry22; s22 -= carry22 * (1L << 21);\n\n  carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n  carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= carry13 * (1L << 21);\n  carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= carry15 * (1L << 21);\n  carry17 = (s17 + (1L << 20)) >> 21; s18 += carry17; s17 -= carry17 * (1L << 21);\n  carry19 = (s19 + (1L << 20)) >> 21; s20 += carry19; s19 -= carry19 * (1L << 21);\n  carry21 = (s21 + (1L << 20)) >> 21; s22 += carry21; s21 -= carry21 * (1L << 21);\n\n  s11 += s23 * 666643;\n  s12 += s23 * 470296;\n  s13 += s23 * 654183;\n  s14 -= s23 * 997805;\n  s15 += s23 * 136657;\n  s16 -= s23 * 683901;\n\n\n  s10 += s22 * 666643;\n  s11 += s22 * 470296;\n  s12 += s22 * 654183;\n  s13 -= s22 * 997805;\n  s14 += s22 * 136657;\n  s15 -= s22 * 683901;\n\n\n  s9 += s21 * 666643;\n  s10 += s21 * 470296;\n  s11 += s21 * 654183;\n  s12 -= s21 * 997805;\n  s13 += s21 * 136657;\n  s14 -= s21 * 683901;\n\n\n  s8 += s20 * 666643;\n  s9 += s20 * 470296;\n  s10 += s20 * 654183;\n  s11 -= s20 * 997805;\n  s12 += s20 * 136657;\n  s13 -= s20 * 683901;\n\n\n  s7 += s19 * 666643;\n  s8 += s19 * 470296;\n  s9 += s19 * 654183;\n  s10 -= s19 * 997805;\n  s11 += s19 * 136657;\n  s12 -= s19 * 683901;\n\n\n  s6 += s18 * 666643;\n  s7 += s18 * 470296;\n  s8 += s18 * 654183;\n  s9 -= s18 * 997805;\n  s10 += s18 * 136657;\n  s11 -= s18 * 683901;\n\n\n  carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n  carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= carry12 * (1L << 21);\n  carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= carry14 * (1L << 21);\n  carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= carry16 * (1L << 21);\n\n  carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n  carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= carry13 * (1L << 21);\n  carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= carry15 * (1L << 21);\n\n  s5 += s17 * 666643;\n  s6 += s17 * 470296;\n  s7 += s17 * 654183;\n  s8 -= s17 * 997805;\n  s9 += s17 * 136657;\n  s10 -= s17 * 683901;\n\n\n  s4 += s16 * 666643;\n  s5 += s16 * 470296;\n  s6 += s16 * 654183;\n  s7 -= s16 * 997805;\n  s8 += s16 * 136657;\n  s9 -= s16 * 683901;\n\n\n  s3 += s15 * 666643;\n  s4 += s15 * 470296;\n  s5 += s15 * 654183;\n  s6 -= s15 * 997805;\n  s7 += s15 * 136657;\n  s8 -= s15 * 683901;\n\n\n  s2 += s14 * 666643;\n  s3 += s14 * 470296;\n  s4 += s14 * 654183;\n  s5 -= s14 * 997805;\n  s6 += s14 * 136657;\n  s7 -= s14 * 683901;\n\n\n  s1 += s13 * 666643;\n  s2 += s13 * 470296;\n  s3 += s13 * 654183;\n  s4 -= s13 * 997805;\n  s5 += s13 * 136657;\n  s6 -= s13 * 683901;\n\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n  s12 = 0;\n\n  carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n\n  carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n  s12 = 0;\n\n  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n\n\n  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n\n  s[0] = s0 >> 0;\n  s[1] = s0 >> 8;\n  s[2] = (s0 >> 16) | (s1 << 5);\n  s[3] = s1 >> 3;\n  s[4] = s1 >> 11;\n  s[5] = (s1 >> 19) | (s2 << 2);\n  s[6] = s2 >> 6;\n  s[7] = (s2 >> 14) | (s3 << 7);\n  s[8] = s3 >> 1;\n  s[9] = s3 >> 9;\n  s[10] = (s3 >> 17) | (s4 << 4);\n  s[11] = s4 >> 4;\n  s[12] = s4 >> 12;\n  s[13] = (s4 >> 20) | (s5 << 1);\n  s[14] = s5 >> 7;\n  s[15] = (s5 >> 15) | (s6 << 6);\n  s[16] = s6 >> 2;\n  s[17] = s6 >> 10;\n  s[18] = (s6 >> 18) | (s7 << 3);\n  s[19] = s7 >> 5;\n  s[20] = s7 >> 13;\n  s[21] = s8 >> 0;\n  s[22] = s8 >> 8;\n  s[23] = (s8 >> 16) | (s9 << 5);\n  s[24] = s9 >> 3;\n  s[25] = s9 >> 11;\n  s[26] = (s9 >> 19) | (s10 << 2);\n  s[27] = s10 >> 6;\n  s[28] = (s10 >> 14) | (s11 << 7);\n  s[29] = s11 >> 1;\n  s[30] = s11 >> 9;\n  s[31] = s11 >> 17;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sc_reduce.c",
    "content": "#include \"sc.h\"\n#include \"crypto_int64.h\"\n#include \"crypto_uint32.h\"\n#include \"crypto_uint64.h\"\n\nstatic crypto_uint64 load_3(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  return result;\n}\n\nstatic crypto_uint64 load_4(const unsigned char *in)\n{\n  crypto_uint64 result;\n  result = (crypto_uint64) in[0];\n  result |= ((crypto_uint64) in[1]) << 8;\n  result |= ((crypto_uint64) in[2]) << 16;\n  result |= ((crypto_uint64) in[3]) << 24;\n  return result;\n}\n\n/*\nInput:\n  s[0]+256*s[1]+...+256^63*s[63] = s\n\nOutput:\n  s[0]+256*s[1]+...+256^31*s[31] = s mod l\n  where l = 2^252 + 27742317777372353535851937790883648493.\n  Overwrites s in place.\n*/\n\nvoid sc_reduce(unsigned char *s)\n{\n  crypto_int64 s0 = 2097151 & load_3(s);\n  crypto_int64 s1 = 2097151 & (load_4(s + 2) >> 5);\n  crypto_int64 s2 = 2097151 & (load_3(s + 5) >> 2);\n  crypto_int64 s3 = 2097151 & (load_4(s + 7) >> 7);\n  crypto_int64 s4 = 2097151 & (load_4(s + 10) >> 4);\n  crypto_int64 s5 = 2097151 & (load_3(s + 13) >> 1);\n  crypto_int64 s6 = 2097151 & (load_4(s + 15) >> 6);\n  crypto_int64 s7 = 2097151 & (load_3(s + 18) >> 3);\n  crypto_int64 s8 = 2097151 & load_3(s + 21);\n  crypto_int64 s9 = 2097151 & (load_4(s + 23) >> 5);\n  crypto_int64 s10 = 2097151 & (load_3(s + 26) >> 2);\n  crypto_int64 s11 = 2097151 & (load_4(s + 28) >> 7);\n  crypto_int64 s12 = 2097151 & (load_4(s + 31) >> 4);\n  crypto_int64 s13 = 2097151 & (load_3(s + 34) >> 1);\n  crypto_int64 s14 = 2097151 & (load_4(s + 36) >> 6);\n  crypto_int64 s15 = 2097151 & (load_3(s + 39) >> 3);\n  crypto_int64 s16 = 2097151 & load_3(s + 42);\n  crypto_int64 s17 = 2097151 & (load_4(s + 44) >> 5);\n  crypto_int64 s18 = 2097151 & (load_3(s + 47) >> 2);\n  crypto_int64 s19 = 2097151 & (load_4(s + 49) >> 7);\n  crypto_int64 s20 = 2097151 & (load_4(s + 52) >> 4);\n  crypto_int64 s21 = 2097151 & (load_3(s + 55) >> 1);\n  crypto_int64 s22 = 2097151 & (load_4(s + 57) >> 6);\n  crypto_int64 s23 = (load_4(s + 60) >> 3);\n  crypto_int64 carry0;\n  crypto_int64 carry1;\n  crypto_int64 carry2;\n  crypto_int64 carry3;\n  crypto_int64 carry4;\n  crypto_int64 carry5;\n  crypto_int64 carry6;\n  crypto_int64 carry7;\n  crypto_int64 carry8;\n  crypto_int64 carry9;\n  crypto_int64 carry10;\n  crypto_int64 carry11;\n  crypto_int64 carry12;\n  crypto_int64 carry13;\n  crypto_int64 carry14;\n  crypto_int64 carry15;\n  crypto_int64 carry16;\n\n  s11 += s23 * 666643;\n  s12 += s23 * 470296;\n  s13 += s23 * 654183;\n  s14 -= s23 * 997805;\n  s15 += s23 * 136657;\n  s16 -= s23 * 683901;\n\n\n  s10 += s22 * 666643;\n  s11 += s22 * 470296;\n  s12 += s22 * 654183;\n  s13 -= s22 * 997805;\n  s14 += s22 * 136657;\n  s15 -= s22 * 683901;\n\n\n  s9 += s21 * 666643;\n  s10 += s21 * 470296;\n  s11 += s21 * 654183;\n  s12 -= s21 * 997805;\n  s13 += s21 * 136657;\n  s14 -= s21 * 683901;\n\n\n  s8 += s20 * 666643;\n  s9 += s20 * 470296;\n  s10 += s20 * 654183;\n  s11 -= s20 * 997805;\n  s12 += s20 * 136657;\n  s13 -= s20 * 683901;\n\n\n  s7 += s19 * 666643;\n  s8 += s19 * 470296;\n  s9 += s19 * 654183;\n  s10 -= s19 * 997805;\n  s11 += s19 * 136657;\n  s12 -= s19 * 683901;\n\n\n  s6 += s18 * 666643;\n  s7 += s18 * 470296;\n  s8 += s18 * 654183;\n  s9 -= s18 * 997805;\n  s10 += s18 * 136657;\n  s11 -= s18 * 683901;\n\n\n  carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n  carry12 = (s12 + (1L << 20)) >> 21; s13 += carry12; s12 -= carry12 * (1L << 21);\n  carry14 = (s14 + (1L << 20)) >> 21; s15 += carry14; s14 -= carry14 * (1L << 21);\n  carry16 = (s16 + (1L << 20)) >> 21; s17 += carry16; s16 -= carry16 * (1L << 21);\n\n  carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n  carry13 = (s13 + (1L << 20)) >> 21; s14 += carry13; s13 -= carry13 * (1L << 21);\n  carry15 = (s15 + (1L << 20)) >> 21; s16 += carry15; s15 -= carry15 * (1L << 21);\n\n  s5 += s17 * 666643;\n  s6 += s17 * 470296;\n  s7 += s17 * 654183;\n  s8 -= s17 * 997805;\n  s9 += s17 * 136657;\n  s10 -= s17 * 683901;\n\n\n  s4 += s16 * 666643;\n  s5 += s16 * 470296;\n  s6 += s16 * 654183;\n  s7 -= s16 * 997805;\n  s8 += s16 * 136657;\n  s9 -= s16 * 683901;\n\n\n  s3 += s15 * 666643;\n  s4 += s15 * 470296;\n  s5 += s15 * 654183;\n  s6 -= s15 * 997805;\n  s7 += s15 * 136657;\n  s8 -= s15 * 683901;\n\n\n  s2 += s14 * 666643;\n  s3 += s14 * 470296;\n  s4 += s14 * 654183;\n  s5 -= s14 * 997805;\n  s6 += s14 * 136657;\n  s7 -= s14 * 683901;\n\n\n  s1 += s13 * 666643;\n  s2 += s13 * 470296;\n  s3 += s13 * 654183;\n  s4 -= s13 * 997805;\n  s5 += s13 * 136657;\n  s6 -= s13 * 683901;\n\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n  s12 = 0;\n\n  carry0 = (s0 + (1L << 20)) >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry2 = (s2 + (1L << 20)) >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry4 = (s4 + (1L << 20)) >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry6 = (s6 + (1L << 20)) >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry8 = (s8 + (1L << 20)) >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry10 = (s10 + (1L << 20)) >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n\n  carry1 = (s1 + (1L << 20)) >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry3 = (s3 + (1L << 20)) >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry5 = (s5 + (1L << 20)) >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry7 = (s7 + (1L << 20)) >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry9 = (s9 + (1L << 20)) >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry11 = (s11 + (1L << 20)) >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n  s12 = 0;\n\n  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n  carry11 = s11 >> 21; s12 += carry11; s11 -= carry11 * (1L << 21);\n\n  s0 += s12 * 666643;\n  s1 += s12 * 470296;\n  s2 += s12 * 654183;\n  s3 -= s12 * 997805;\n  s4 += s12 * 136657;\n  s5 -= s12 * 683901;\n\n\n  carry0 = s0 >> 21; s1 += carry0; s0 -= carry0 * (1L << 21);\n  carry1 = s1 >> 21; s2 += carry1; s1 -= carry1 * (1L << 21);\n  carry2 = s2 >> 21; s3 += carry2; s2 -= carry2 * (1L << 21);\n  carry3 = s3 >> 21; s4 += carry3; s3 -= carry3 * (1L << 21);\n  carry4 = s4 >> 21; s5 += carry4; s4 -= carry4 * (1L << 21);\n  carry5 = s5 >> 21; s6 += carry5; s5 -= carry5 * (1L << 21);\n  carry6 = s6 >> 21; s7 += carry6; s6 -= carry6 * (1L << 21);\n  carry7 = s7 >> 21; s8 += carry7; s7 -= carry7 * (1L << 21);\n  carry8 = s8 >> 21; s9 += carry8; s8 -= carry8 * (1L << 21);\n  carry9 = s9 >> 21; s10 += carry9; s9 -= carry9 * (1L << 21);\n  carry10 = s10 >> 21; s11 += carry10; s10 -= carry10 * (1L << 21);\n\n  s[0] = s0 >> 0;\n  s[1] = s0 >> 8;\n  s[2] = (s0 >> 16) | (s1 << 5);\n  s[3] = s1 >> 3;\n  s[4] = s1 >> 11;\n  s[5] = (s1 >> 19) | (s2 << 2);\n  s[6] = s2 >> 6;\n  s[7] = (s2 >> 14) | (s3 << 7);\n  s[8] = s3 >> 1;\n  s[9] = s3 >> 9;\n  s[10] = (s3 >> 17) | (s4 << 4);\n  s[11] = s4 >> 4;\n  s[12] = s4 >> 12;\n  s[13] = (s4 >> 20) | (s5 << 1);\n  s[14] = s5 >> 7;\n  s[15] = (s5 >> 15) | (s6 << 6);\n  s[16] = s6 >> 2;\n  s[17] = s6 >> 10;\n  s[18] = (s6 >> 18) | (s7 << 3);\n  s[19] = s7 >> 5;\n  s[20] = s7 >> 13;\n  s[21] = s8 >> 0;\n  s[22] = s8 >> 8;\n  s[23] = (s8 >> 16) | (s9 << 5);\n  s[24] = s9 >> 3;\n  s[25] = s9 >> 11;\n  s[26] = (s9 >> 19) | (s10 << 2);\n  s[27] = s10 >> 6;\n  s[28] = (s10 >> 14) | (s11 << 7);\n  s[29] = s11 >> 1;\n  s[30] = s11 >> 9;\n  s[31] = s11 >> 17;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c",
    "content": "\n#include <string.h>\n\n#include \"crypto_hash_sha512.h\"\n#include \"crypto_sign_ed25519.h\"\n#include \"ge.h\"\n#include \"sc.h\"\n#include \"utils.h\"\n\nint\ncrypto_sign_ed25519_detached(unsigned char *sig, unsigned long long *siglen_p,\n                             const unsigned char *m, unsigned long long mlen,\n                             const unsigned char *sk)\n{\n    crypto_hash_sha512_state hs;\n    unsigned char az[64];\n    unsigned char nonce[64];\n    unsigned char hram[64];\n    ge_p3 R;\n\n    crypto_hash_sha512(az, sk, 32);\n    az[0] &= 248;\n    az[31] &= 63;\n    az[31] |= 64;\n\n    crypto_hash_sha512_init(&hs);\n    crypto_hash_sha512_update(&hs, az + 32, 32);\n    crypto_hash_sha512_update(&hs, m, mlen);\n    crypto_hash_sha512_final(&hs, nonce);\n\n    memmove(sig + 32, sk + 32, 32);\n\n    sc_reduce(nonce);\n    ge_scalarmult_base(&R, nonce);\n    ge_p3_tobytes(sig, &R);\n\n    crypto_hash_sha512_init(&hs);\n    crypto_hash_sha512_update(&hs, sig, 64);\n    crypto_hash_sha512_update(&hs, m, mlen);\n    crypto_hash_sha512_final(&hs, hram);\n\n    sc_reduce(hram);\n    sc_muladd(sig + 32, hram, az, nonce);\n\n    sodium_memzero(az, sizeof az);\n\n    if (siglen_p != NULL) {\n        *siglen_p = 64U;\n    }\n    return 0;\n}\n\nint\ncrypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p,\n                    const unsigned char *m, unsigned long long mlen,\n                    const unsigned char *sk)\n{\n    unsigned long long siglen;\n\n    memmove(sm + crypto_sign_ed25519_BYTES, m, mlen);\n/* LCOV_EXCL_START */\n    if (crypto_sign_ed25519_detached(sm, &siglen,\n                                     sm + crypto_sign_ed25519_BYTES,\n                                     mlen, sk) != 0 ||\n        siglen != crypto_sign_ed25519_BYTES) {\n        if (smlen_p != NULL) {\n            *smlen_p = 0;\n        }\n        memset(sm, 0, mlen + crypto_sign_ed25519_BYTES);\n        return -1;\n    }\n/* LCOV_EXCL_STOP */\n\n    if (smlen_p != NULL) {\n        *smlen_p = mlen + siglen;\n    }\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sqrtm1.h",
    "content": "-32595792,-7943725,9377950,3500415,12389472,-272473,-25146209,-2005654,326686,11406482\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519_api.c",
    "content": "\n#include <string.h>\n\n#include \"crypto_sign_ed25519.h\"\n\nsize_t\ncrypto_sign_ed25519_bytes(void) {\n    return crypto_sign_ed25519_BYTES;\n}\n\nsize_t\ncrypto_sign_ed25519_seedbytes(void) {\n    return crypto_sign_ed25519_SEEDBYTES;\n}\n\nsize_t\ncrypto_sign_ed25519_publickeybytes(void) {\n    return crypto_sign_ed25519_PUBLICKEYBYTES;\n}\n\nsize_t\ncrypto_sign_ed25519_secretkeybytes(void) {\n    return crypto_sign_ed25519_SECRETKEYBYTES;\n}\n\nint\ncrypto_sign_ed25519_sk_to_seed(unsigned char *seed, const unsigned char *sk)\n{\n    memmove(seed, sk, crypto_sign_ed25519_SEEDBYTES);\n    return 0;\n}\n\nint\ncrypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk)\n{\n    memmove(pk, sk + crypto_sign_ed25519_SEEDBYTES,\n            crypto_sign_ed25519_PUBLICKEYBYTES);\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/afternm_aes128ctr.c",
    "content": "/* Author: Peter Schwabe, ported from an assembly implementation by Emilia Käsper\n * Date: 2009-03-19\n * Public domain */\n\n#include \"crypto_stream_aes128ctr.h\"\n#include \"int128.h\"\n#include \"common.h\"\n#include \"consts.h\"\n\nint crypto_stream_aes128ctr_afternm(unsigned char *out, unsigned long long len, const unsigned char *nonce, const unsigned char *c)\n{\n\n  int128 xmm0;\n  int128 xmm1;\n  int128 xmm2;\n  int128 xmm3;\n  int128 xmm4;\n  int128 xmm5;\n  int128 xmm6;\n  int128 xmm7;\n\n  int128 xmm8;\n  int128 xmm9;\n  int128 xmm10;\n  int128 xmm11;\n  int128 xmm12;\n  int128 xmm13;\n  int128 xmm14;\n  int128 xmm15;\n\n  int128 nonce_stack;\n  unsigned long long lensav;\n  unsigned char bl[128];\n  unsigned char *blp;\n  unsigned char *np;\n  unsigned char b;\n\n  uint32 tmp;\n\n  /* Copy nonce on the stack */\n  copy2(&nonce_stack, (const int128 *) (nonce + 0));\n  np = (unsigned char *)&nonce_stack;\n\n    enc_block:\n\n    xmm0 = *(int128 *) (np + 0);\n    copy2(&xmm1, &xmm0);\n    shufb(&xmm1, SWAP32);\n    copy2(&xmm2, &xmm1);\n    copy2(&xmm3, &xmm1);\n    copy2(&xmm4, &xmm1);\n    copy2(&xmm5, &xmm1);\n    copy2(&xmm6, &xmm1);\n    copy2(&xmm7, &xmm1);\n\n    add_uint32_big(&xmm1, 1);\n    add_uint32_big(&xmm2, 2);\n    add_uint32_big(&xmm3, 3);\n    add_uint32_big(&xmm4, 4);\n    add_uint32_big(&xmm5, 5);\n    add_uint32_big(&xmm6, 6);\n    add_uint32_big(&xmm7, 7);\n\n    shufb(&xmm0, M0);\n    shufb(&xmm1, M0SWAP);\n    shufb(&xmm2, M0SWAP);\n    shufb(&xmm3, M0SWAP);\n    shufb(&xmm4, M0SWAP);\n    shufb(&xmm5, M0SWAP);\n    shufb(&xmm6, M0SWAP);\n    shufb(&xmm7, M0SWAP);\n\n    bitslice(xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1, xmm0, xmm8)\n\n    aesround( 1, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 2, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 3, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 4, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 5, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 6, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 7, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 8, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 9, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    lastround(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n\n    bitslice(xmm13, xmm10, xmm15, xmm11, xmm14, xmm12, xmm9, xmm8, xmm0)\n\n    if(len < 128) goto partial;\n    if(len == 128) goto full;\n\n    tmp = load32_bigendian(np + 12);\n    tmp += 8;\n    store32_bigendian(np + 12, tmp);\n\n    *(int128 *) (out + 0) = xmm8;\n    *(int128 *) (out + 16) = xmm9;\n    *(int128 *) (out + 32) = xmm12;\n    *(int128 *) (out + 48) = xmm14;\n    *(int128 *) (out + 64) = xmm11;\n    *(int128 *) (out + 80) = xmm15;\n    *(int128 *) (out + 96) = xmm10;\n    *(int128 *) (out + 112) = xmm13;\n\n    len -= 128;\n    out += 128;\n\n    goto enc_block;\n\n    partial:\n\n    lensav = len;\n    len >>= 4;\n\n    tmp = load32_bigendian(np + 12);\n    tmp += len;\n    store32_bigendian(np + 12, tmp);\n\n    blp = bl;\n    *(int128 *)(blp + 0) = xmm8;\n    *(int128 *)(blp + 16) = xmm9;\n    *(int128 *)(blp + 32) = xmm12;\n    *(int128 *)(blp + 48) = xmm14;\n    *(int128 *)(blp + 64) = xmm11;\n    *(int128 *)(blp + 80) = xmm15;\n    *(int128 *)(blp + 96) = xmm10;\n    *(int128 *)(blp + 112) = xmm13;\n\n    bytes:\n\n    if(lensav == 0) goto end;\n\n    b = blp[0]; /* clang false positive */\n    *(unsigned char *)(out + 0) = b;\n\n    blp += 1;\n    out +=1;\n    lensav -= 1;\n\n    goto bytes;\n\n    full:\n\n    tmp = load32_bigendian(np + 12);\n    tmp += 8;\n    store32_bigendian(np + 12, tmp);\n\n    *(int128 *) (out + 0) = xmm8;\n    *(int128 *) (out + 16) = xmm9;\n    *(int128 *) (out + 32) = xmm12;\n    *(int128 *) (out + 48) = xmm14;\n    *(int128 *) (out + 64) = xmm11;\n    *(int128 *) (out + 80) = xmm15;\n    *(int128 *) (out + 96) = xmm10;\n    *(int128 *) (out + 112) = xmm13;\n\n    end:\n    return 0;\n\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/beforenm_aes128ctr.c",
    "content": "/* Author: Peter Schwabe, ported from an assembly implementation by Emilia Käsper\n * Date: 2009-03-19\n * Public domain */\n\n#include \"crypto_stream_aes128ctr.h\"\n#include \"consts.h\"\n#include \"int128.h\"\n#include \"common.h\"\n\nint crypto_stream_aes128ctr_beforenm(unsigned char *c, const unsigned char *k)\n{\n\n  /*\n     int64 x0;\n     int64 x1;\n     int64 x2;\n     int64 x3;\n     int64 e;\n     int64 q0;\n     int64 q1;\n     int64 q2;\n     int64 q3;\n     */\n\n  int128 xmm0;\n  int128 xmm1;\n  int128 xmm2;\n  int128 xmm3;\n  int128 xmm4;\n  int128 xmm5;\n  int128 xmm6;\n  int128 xmm7;\n  int128 xmm8;\n  int128 xmm9;\n  int128 xmm10;\n  int128 xmm11;\n  int128 xmm12;\n  int128 xmm13;\n  int128 xmm14;\n  int128 xmm15;\n  int128 t;\n\n  bitslicekey0(k, c)\n\n    keyexpbs1(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    keyexpbs(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm1);, 2,c)\n    keyexpbs(xmm0, xmm1, xmm3, xmm2, xmm6, xmm5, xmm4, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm6);, 3,c)\n    keyexpbs(xmm0, xmm1, xmm6, xmm4, xmm2, xmm7, xmm3, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 4,c)\n\n    keyexpbs(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 5,c)\n    keyexpbs(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm5);, 6,c)\n    keyexpbs(xmm0, xmm1, xmm3, xmm2, xmm6, xmm5, xmm4, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm3);, 7,c)\n    keyexpbs(xmm0, xmm1, xmm6, xmm4, xmm2, xmm7, xmm3, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm7);, 8,c)\n\n    keyexpbs(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xor_rcon(&xmm0); xor_rcon(&xmm1); xor_rcon(&xmm6); xor_rcon(&xmm3);, 9,c)\n    keyexpbs10(xmm0, xmm1, xmm4, xmm6, xmm3, xmm7, xmm2, xmm5, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/common.h",
    "content": "/* Author: Peter Schwabe, ported from an assembly implementation by Emilia Käsper\n Date: 2009-03-19\n Public domain */\n#ifndef COMMON_H\n#define COMMON_H\n\n#include \"types.h\"\n\n#define load32_bigendian crypto_stream_aes128ctr_portable_load32_bigendian\nuint32 load32_bigendian(const unsigned char *x);\n\n#define store32_bigendian crypto_stream_aes128ctr_portable_store32_bigendian\nvoid store32_bigendian(unsigned char *x,uint32 u);\n\n#define load32_littleendian crypto_stream_aes128ctr_portable_load32_littleendian\nuint32 load32_littleendian(const unsigned char *x);\n\n#define store32_littleendian crypto_stream_aes128ctr_portable_store32_littleendian\nvoid store32_littleendian(unsigned char *x,uint32 u);\n\n#define load64_littleendian crypto_stream_aes128ctr_portable_load64_littleendian\nuint64 load64_littleendian(const unsigned char *x);\n\n#define store64_littleendian crypto_stream_aes128ctr_portable_store64_littleendian\nvoid store64_littleendian(unsigned char *x,uint64 u);\n\n/* Macros required only for key expansion */\n\n#define keyexpbs1(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7, bskey) \\\n  rotbyte(&b0);\\\n  rotbyte(&b1);\\\n  rotbyte(&b2);\\\n  rotbyte(&b3);\\\n  rotbyte(&b4);\\\n  rotbyte(&b5);\\\n  rotbyte(&b6);\\\n  rotbyte(&b7);\\\n  ;\\\n  sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7);\\\n  ;\\\n  xor_rcon(&b0);\\\n  shufb(&b0, EXPB0);\\\n  shufb(&b1, EXPB0);\\\n  shufb(&b4, EXPB0);\\\n  shufb(&b6, EXPB0);\\\n  shufb(&b3, EXPB0);\\\n  shufb(&b7, EXPB0);\\\n  shufb(&b2, EXPB0);\\\n  shufb(&b5, EXPB0);\\\n  shufb(&b0, EXPB0);\\\n  ;\\\n  t0 = *(int128 *)(bskey + 0);\\\n  t1 = *(int128 *)(bskey + 16);\\\n  t2 = *(int128 *)(bskey + 32);\\\n  t3 = *(int128 *)(bskey + 48);\\\n  t4 = *(int128 *)(bskey + 64);\\\n  t5 = *(int128 *)(bskey + 80);\\\n  t6 = *(int128 *)(bskey + 96);\\\n  t7 = *(int128 *)(bskey + 112);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  *(int128 *)(bskey + 128) = b0;\\\n  *(int128 *)(bskey + 144) = b1;\\\n  *(int128 *)(bskey + 160) = b4;\\\n  *(int128 *)(bskey + 176) = b6;\\\n  *(int128 *)(bskey + 192) = b3;\\\n  *(int128 *)(bskey + 208) = b7;\\\n  *(int128 *)(bskey + 224) = b2;\\\n  *(int128 *)(bskey + 240) = b5;\\\n\n#define keyexpbs10(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7, bskey) ;\\\n  toggle(&b0);\\\n  toggle(&b1);\\\n  toggle(&b5);\\\n  toggle(&b6);\\\n  rotbyte(&b0);\\\n  rotbyte(&b1);\\\n  rotbyte(&b2);\\\n  rotbyte(&b3);\\\n  rotbyte(&b4);\\\n  rotbyte(&b5);\\\n  rotbyte(&b6);\\\n  rotbyte(&b7);\\\n  ;\\\n  sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7);\\\n  ;\\\n  xor_rcon(&b1);\\\n  xor_rcon(&b4);\\\n  xor_rcon(&b3);\\\n  xor_rcon(&b7);\\\n  shufb(&b0, EXPB0);\\\n  shufb(&b1, EXPB0);\\\n  shufb(&b4, EXPB0);\\\n  shufb(&b6, EXPB0);\\\n  shufb(&b3, EXPB0);\\\n  shufb(&b7, EXPB0);\\\n  shufb(&b2, EXPB0);\\\n  shufb(&b5, EXPB0);\\\n  ;\\\n  t0 = *(int128 *)(bskey + 9 * 128 +   0);\\\n  t1 = *(int128 *)(bskey + 9 * 128 +  16);\\\n  t2 = *(int128 *)(bskey + 9 * 128 +  32);\\\n  t3 = *(int128 *)(bskey + 9 * 128 +  48);\\\n  t4 = *(int128 *)(bskey + 9 * 128 +  64);\\\n  t5 = *(int128 *)(bskey + 9 * 128 +  80);\\\n  t6 = *(int128 *)(bskey + 9 * 128 +  96);\\\n  t7 = *(int128 *)(bskey + 9 * 128 + 112);\\\n  ;\\\n  toggle(&t0);\\\n  toggle(&t1);\\\n  toggle(&t5);\\\n  toggle(&t6);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  shufb(&b0, M0);\\\n  shufb(&b1, M0);\\\n  shufb(&b2, M0);\\\n  shufb(&b3, M0);\\\n  shufb(&b4, M0);\\\n  shufb(&b5, M0);\\\n  shufb(&b6, M0);\\\n  shufb(&b7, M0);\\\n  ;\\\n  *(int128 *)(bskey + 1280) = b0;\\\n  *(int128 *)(bskey + 1296) = b1;\\\n  *(int128 *)(bskey + 1312) = b4;\\\n  *(int128 *)(bskey + 1328) = b6;\\\n  *(int128 *)(bskey + 1344) = b3;\\\n  *(int128 *)(bskey + 1360) = b7;\\\n  *(int128 *)(bskey + 1376) = b2;\\\n  *(int128 *)(bskey + 1392) = b5;\\\n\n\n#define keyexpbs(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7, rcon, i, bskey) \\\n  toggle(&b0);\\\n  toggle(&b1);\\\n  toggle(&b5);\\\n  toggle(&b6);\\\n  rotbyte(&b0);\\\n  rotbyte(&b1);\\\n  rotbyte(&b2);\\\n  rotbyte(&b3);\\\n  rotbyte(&b4);\\\n  rotbyte(&b5);\\\n  rotbyte(&b6);\\\n  rotbyte(&b7);\\\n  ;\\\n  sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7);\\\n  ;\\\n  rcon;\\\n  shufb(&b0, EXPB0);\\\n  shufb(&b1, EXPB0);\\\n  shufb(&b4, EXPB0);\\\n  shufb(&b6, EXPB0);\\\n  shufb(&b3, EXPB0);\\\n  shufb(&b7, EXPB0);\\\n  shufb(&b2, EXPB0);\\\n  shufb(&b5, EXPB0);\\\n  ;\\\n  t0 = *(int128 *)(bskey + (i-1) * 128 +   0);\\\n  t1 = *(int128 *)(bskey + (i-1) * 128 +  16);\\\n  t2 = *(int128 *)(bskey + (i-1) * 128 +  32);\\\n  t3 = *(int128 *)(bskey + (i-1) * 128 +  48);\\\n  t4 = *(int128 *)(bskey + (i-1) * 128 +  64);\\\n  t5 = *(int128 *)(bskey + (i-1) * 128 +  80);\\\n  t6 = *(int128 *)(bskey + (i-1) * 128 +  96);\\\n  t7 = *(int128 *)(bskey + (i-1) * 128 + 112);\\\n  ;\\\n  toggle(&t0);\\\n  toggle(&t1);\\\n  toggle(&t5);\\\n  toggle(&t6);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  rshift32_littleendian(&t0, 8);\\\n  rshift32_littleendian(&t1, 8);\\\n  rshift32_littleendian(&t2, 8);\\\n  rshift32_littleendian(&t3, 8);\\\n  rshift32_littleendian(&t4, 8);\\\n  rshift32_littleendian(&t5, 8);\\\n  rshift32_littleendian(&t6, 8);\\\n  rshift32_littleendian(&t7, 8);\\\n  ;\\\n  xor2(&b0, &t0);\\\n  xor2(&b1, &t1);\\\n  xor2(&b4, &t2);\\\n  xor2(&b6, &t3);\\\n  xor2(&b3, &t4);\\\n  xor2(&b7, &t5);\\\n  xor2(&b2, &t6);\\\n  xor2(&b5, &t7);\\\n  ;\\\n  *(int128 *)(bskey + i*128 +   0) = b0;\\\n  *(int128 *)(bskey + i*128 +  16) = b1;\\\n  *(int128 *)(bskey + i*128 +  32) = b4;\\\n  *(int128 *)(bskey + i*128 +  48) = b6;\\\n  *(int128 *)(bskey + i*128 +  64) = b3;\\\n  *(int128 *)(bskey + i*128 +  80) = b7;\\\n  *(int128 *)(bskey + i*128 +  96) = b2;\\\n  *(int128 *)(bskey + i*128 + 112) = b5;\\\n\n/* Macros used in multiple contexts */\n\n#define bitslicekey0(key, bskey) \\\n  xmm0 = *(const int128 *) (key + 0);\\\n  shufb(&xmm0, M0);\\\n  copy2(&xmm1, &xmm0);\\\n  copy2(&xmm2, &xmm0);\\\n  copy2(&xmm3, &xmm0);\\\n  copy2(&xmm4, &xmm0);\\\n  copy2(&xmm5, &xmm0);\\\n  copy2(&xmm6, &xmm0);\\\n  copy2(&xmm7, &xmm0);\\\n  ;\\\n  bitslice(xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1, xmm0, t);\\\n  ;\\\n  *(int128 *) (bskey + 0) = xmm0;\\\n  *(int128 *) (bskey + 16) = xmm1;\\\n  *(int128 *) (bskey + 32) = xmm2;\\\n  *(int128 *) (bskey + 48) = xmm3;\\\n  *(int128 *) (bskey + 64) = xmm4;\\\n  *(int128 *) (bskey + 80) = xmm5;\\\n  *(int128 *) (bskey + 96) = xmm6;\\\n  *(int128 *) (bskey + 112) = xmm7;\\\n\n\n#define bitslicekey10(key, bskey) \\\n  xmm0 = *(int128 *) (key + 0);\\\n  copy2(xmm1, xmm0);\\\n  copy2(xmm2, xmm0);\\\n  copy2(xmm3, xmm0);\\\n  copy2(xmm4, xmm0);\\\n  copy2(xmm5, xmm0);\\\n  copy2(xmm6, xmm0);\\\n  copy2(xmm7, xmm0);\\\n  ;\\\n  bitslice(xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1, xmm0, t);\\\n  ;\\\n  toggle(&xmm6);\\\n  toggle(&xmm5);\\\n  toggle(&xmm1);\\\n  toggle(&xmm0);\\\n  ;\\\n  *(int128 *) (bskey +   0 + 1280) = xmm0;\\\n  *(int128 *) (bskey +  16 + 1280) = xmm1;\\\n  *(int128 *) (bskey +  32 + 1280) = xmm2;\\\n  *(int128 *) (bskey +  48 + 1280) = xmm3;\\\n  *(int128 *) (bskey +  64 + 1280) = xmm4;\\\n  *(int128 *) (bskey +  80 + 1280) = xmm5;\\\n  *(int128 *) (bskey +  96 + 1280) = xmm6;\\\n  *(int128 *) (bskey + 112 + 1280) = xmm7;\\\n\n\n#define bitslicekey(i,key,bskey) \\\n  xmm0 = *(int128 *) (key + 0);\\\n  shufb(&xmm0, M0);\\\n  copy2(&xmm1, &xmm0);\\\n  copy2(&xmm2, &xmm0);\\\n  copy2(&xmm3, &xmm0);\\\n  copy2(&xmm4, &xmm0);\\\n  copy2(&xmm5, &xmm0);\\\n  copy2(&xmm6, &xmm0);\\\n  copy2(&xmm7, &xmm0);\\\n  ;\\\n  bitslice(xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1, xmm0, t);\\\n  ;\\\n  toggle(&xmm6);\\\n  toggle(&xmm5);\\\n  toggle(&xmm1);\\\n  toggle(&xmm0);\\\n  ;\\\n  *(int128 *) (bskey +   0 + 128*i) = xmm0;\\\n  *(int128 *) (bskey +  16 + 128*i) = xmm1;\\\n  *(int128 *) (bskey +  32 + 128*i) = xmm2;\\\n  *(int128 *) (bskey +  48 + 128*i) = xmm3;\\\n  *(int128 *) (bskey +  64 + 128*i) = xmm4;\\\n  *(int128 *) (bskey +  80 + 128*i) = xmm5;\\\n  *(int128 *) (bskey +  96 + 128*i) = xmm6;\\\n  *(int128 *) (bskey + 112 + 128*i) = xmm7;\\\n\n\n#define bitslice(x0, x1, x2, x3, x4, x5, x6, x7, t) \\\n        swapmove(x0, x1, 1, BS0, t);\\\n        swapmove(x2, x3, 1, BS0, t);\\\n        swapmove(x4, x5, 1, BS0, t);\\\n        swapmove(x6, x7, 1, BS0, t);\\\n        ;\\\n        swapmove(x0, x2, 2, BS1, t);\\\n        swapmove(x1, x3, 2, BS1, t);\\\n        swapmove(x4, x6, 2, BS1, t);\\\n        swapmove(x5, x7, 2, BS1, t);\\\n        ;\\\n        swapmove(x0, x4, 4, BS2, t);\\\n        swapmove(x1, x5, 4, BS2, t);\\\n        swapmove(x2, x6, 4, BS2, t);\\\n        swapmove(x3, x7, 4, BS2, t);\\\n\n\n#define swapmove(a, b, n, m, t) \\\n        copy2(&t, &b);\\\n  rshift64_littleendian(&t, n);\\\n        xor2(&t, &a);\\\n  and2(&t, &m);\\\n  xor2(&a, &t);\\\n  lshift64_littleendian(&t, n);\\\n  xor2(&b, &t);\n\n#define rotbyte(x) \\\n  shufb(x, ROTB) /* TODO: Make faster */\n\n\n/* Macros used for encryption (and decryption) */\n\n#define shiftrows(x0, x1, x2, x3, x4, x5, x6, x7, i, M, bskey) \\\n        xor2(&x0, (const int128 *)(bskey + 128*(i-1) + 0));\\\n  shufb(&x0, M);\\\n        xor2(&x1, (const int128 *)(bskey + 128*(i-1) + 16));\\\n  shufb(&x1, M);\\\n        xor2(&x2, (const int128 *)(bskey + 128*(i-1) + 32));\\\n  shufb(&x2, M);\\\n        xor2(&x3, (const int128 *)(bskey + 128*(i-1) + 48));\\\n  shufb(&x3, M);\\\n        xor2(&x4, (const int128 *)(bskey + 128*(i-1) + 64));\\\n  shufb(&x4, M);\\\n        xor2(&x5, (const int128 *)(bskey + 128*(i-1) + 80));\\\n  shufb(&x5, M);\\\n        xor2(&x6, (const int128 *)(bskey + 128*(i-1) + 96));\\\n  shufb(&x6, M);\\\n        xor2(&x7, (const int128 *)(bskey + 128*(i-1) + 112));\\\n  shufb(&x7, M);\\\n\n\n#define mixcolumns(x0, x1, x2, x3, x4, x5, x6, x7, t0, t1, t2, t3, t4, t5, t6, t7) \\\n  shufd(&t0, &x0, 0x93);\\\n  shufd(&t1, &x1, 0x93);\\\n  shufd(&t2, &x2, 0x93);\\\n  shufd(&t3, &x3, 0x93);\\\n  shufd(&t4, &x4, 0x93);\\\n  shufd(&t5, &x5, 0x93);\\\n  shufd(&t6, &x6, 0x93);\\\n  shufd(&t7, &x7, 0x93);\\\n        ;\\\n        xor2(&x0, &t0);\\\n        xor2(&x1, &t1);\\\n        xor2(&x2, &t2);\\\n        xor2(&x3, &t3);\\\n        xor2(&x4, &t4);\\\n        xor2(&x5, &t5);\\\n        xor2(&x6, &t6);\\\n        xor2(&x7, &t7);\\\n        ;\\\n        xor2(&t0, &x7);\\\n        xor2(&t1, &x0);\\\n        xor2(&t2, &x1);\\\n        xor2(&t1, &x7);\\\n        xor2(&t3, &x2);\\\n        xor2(&t4, &x3);\\\n        xor2(&t5, &x4);\\\n        xor2(&t3, &x7);\\\n        xor2(&t6, &x5);\\\n        xor2(&t7, &x6);\\\n        xor2(&t4, &x7);\\\n        ;\\\n  shufd(&x0, &x0, 0x4e);\\\n  shufd(&x1, &x1, 0x4e);\\\n  shufd(&x2, &x2, 0x4e);\\\n  shufd(&x3, &x3, 0x4e);\\\n  shufd(&x4, &x4, 0x4e);\\\n  shufd(&x5, &x5, 0x4e);\\\n  shufd(&x6, &x6, 0x4e);\\\n  shufd(&x7, &x7, 0x4e);\\\n        ;\\\n        xor2(&t0, &x0);\\\n        xor2(&t1, &x1);\\\n        xor2(&t2, &x2);\\\n        xor2(&t3, &x3);\\\n        xor2(&t4, &x4);\\\n        xor2(&t5, &x5);\\\n        xor2(&t6, &x6);\\\n        xor2(&t7, &x7);\\\n\n\n#define aesround(i, b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7, bskey) \\\n        shiftrows(b0, b1, b2, b3, b4, b5, b6, b7, i, SR, bskey);\\\n        sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7);\\\n        mixcolumns(b0, b1, b4, b6, b3, b7, b2, b5, t0, t1, t2, t3, t4, t5, t6, t7);\\\n\n\n#define lastround(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7, bskey) \\\n        shiftrows(b0, b1, b2, b3, b4, b5, b6, b7, 10, SRM0, bskey);\\\n        sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, t4, t5, t6, t7);\\\n        xor2(&b0,(const int128 *)(bskey + 128*10));\\\n        xor2(&b1,(const int128 *)(bskey + 128*10+16));\\\n        xor2(&b4,(const int128 *)(bskey + 128*10+32));\\\n        xor2(&b6,(const int128 *)(bskey + 128*10+48));\\\n        xor2(&b3,(const int128 *)(bskey + 128*10+64));\\\n        xor2(&b7,(const int128 *)(bskey + 128*10+80));\\\n        xor2(&b2,(const int128 *)(bskey + 128*10+96));\\\n        xor2(&b5,(const int128 *)(bskey + 128*10+112));\\\n\n\n#define sbox(b0, b1, b2, b3, b4, b5, b6, b7, t0, t1, t2, t3, s0, s1, s2, s3) \\\n        InBasisChange(b0, b1, b2, b3, b4, b5, b6, b7); \\\n        Inv_GF256(b6, b5, b0, b3, b7, b1, b4, b2, t0, t1, t2, t3, s0, s1, s2, s3); \\\n        OutBasisChange(b7, b1, b4, b2, b6, b5, b0, b3); \\\n\n\n#define InBasisChange(b0, b1, b2, b3, b4, b5, b6, b7) \\\n        xor2(&b5, &b6);\\\n        xor2(&b2, &b1);\\\n        xor2(&b5, &b0);\\\n        xor2(&b6, &b2);\\\n        xor2(&b3, &b0);\\\n        ;\\\n        xor2(&b6, &b3);\\\n        xor2(&b3, &b7);\\\n        xor2(&b3, &b4);\\\n        xor2(&b7, &b5);\\\n        xor2(&b3, &b1);\\\n        ;\\\n        xor2(&b4, &b5);\\\n        xor2(&b2, &b7);\\\n        xor2(&b1, &b5);\\\n\n#define OutBasisChange(b0, b1, b2, b3, b4, b5, b6, b7) \\\n        xor2(&b0, &b6);\\\n        xor2(&b1, &b4);\\\n        xor2(&b2, &b0);\\\n        xor2(&b4, &b6);\\\n        xor2(&b6, &b1);\\\n        ;\\\n        xor2(&b1, &b5);\\\n        xor2(&b5, &b3);\\\n        xor2(&b2, &b5);\\\n        xor2(&b3, &b7);\\\n        xor2(&b7, &b5);\\\n        ;\\\n        xor2(&b4, &b7);\\\n\n#define Mul_GF4(x0, x1, y0, y1, t0) \\\n        copy2(&t0, &y0);\\\n        xor2(&t0, &y1);\\\n        and2(&t0, &x0);\\\n        xor2(&x0, &x1);\\\n        and2(&x0, &y1);\\\n        and2(&x1, &y0);\\\n        xor2(&x0, &x1);\\\n        xor2(&x1, &t0);\\\n\n#define Mul_GF4_N(x0, x1, y0, y1, t0) \\\n        copy2(&t0, &y0);\\\n        xor2(&t0, &y1);\\\n        and2(&t0, &x0);\\\n        xor2(&x0, &x1);\\\n        and2(&x0, &y1);\\\n        and2(&x1, &y0);\\\n        xor2(&x1, &x0);\\\n        xor2(&x0, &t0);\\\n\n#define Mul_GF4_2(x0, x1, x2, x3, y0, y1, t0, t1) \\\n        copy2(&t0, = y0);\\\n        xor2(&t0, &y1);\\\n        copy2(&t1, &t0);\\\n        and2(&t0, &x0);\\\n        and2(&t1, &x2);\\\n        xor2(&x0, &x1);\\\n        xor2(&x2, &x3);\\\n        and2(&x0, &y1);\\\n        and2(&x2, &y1);\\\n        and2(&x1, &y0);\\\n        and2(&x3, &y0);\\\n        xor2(&x0, &x1);\\\n        xor2(&x2, &x3);\\\n        xor2(&x1, &t0);\\\n        xor2(&x3, &t1);\\\n\n#define Mul_GF16(x0, x1, x2, x3, y0, y1, y2, y3, t0, t1, t2, t3) \\\n        copy2(&t0, &x0);\\\n        copy2(&t1, &x1);\\\n        Mul_GF4(x0, x1, y0, y1, t2);\\\n        xor2(&t0, &x2);\\\n        xor2(&t1, &x3);\\\n        xor2(&y0, &y2);\\\n        xor2(&y1, &y3);\\\n        Mul_GF4_N(t0, t1, y0, y1, t2);\\\n        Mul_GF4(x2, x3, y2, y3, t3);\\\n        ;\\\n        xor2(&x0, &t0);\\\n        xor2(&x2, &t0);\\\n        xor2(&x1, &t1);\\\n        xor2(&x3, &t1);\\\n\n#define Mul_GF16_2(x0, x1, x2, x3, x4, x5, x6, x7, y0, y1, y2, y3, t0, t1, t2, t3) \\\n        copy2(&t0, &x0);\\\n        copy2(&t1, &x1);\\\n        Mul_GF4(x0, x1, y0, y1, t2);\\\n        xor2(&t0, &x2);\\\n        xor2(&t1, &x3);\\\n        xor2(&y0, &y2);\\\n        xor2(&y1, &y3);\\\n        Mul_GF4_N(t0, t1, y0, y1, t3);\\\n        Mul_GF4(x2, x3, y2, y3, t2);\\\n        ;\\\n        xor2(&x0, &t0);\\\n        xor2(&x2, &t0);\\\n        xor2(&x1, &t1);\\\n        xor2(&x3, &t1);\\\n        ;\\\n        copy2(&t0, &x4);\\\n        copy2(&t1, &x5);\\\n        xor2(&t0, &x6);\\\n        xor2(&t1, &x7);\\\n        Mul_GF4_N(t0, t1, y0, y1, t3);\\\n        Mul_GF4(x6, x7, y2, y3, t2);\\\n        xor2(&y0, &y2);\\\n        xor2(&y1, &y3);\\\n        Mul_GF4(x4, x5, y0, y1, t3);\\\n        ;\\\n        xor2(&x4, &t0);\\\n        xor2(&x6, &t0);\\\n        xor2(&x5, &t1);\\\n        xor2(&x7, &t1);\\\n\n#define Inv_GF16(x0, x1, x2, x3, t0, t1, t2, t3) \\\n        copy2(&t0, &x1);\\\n        copy2(&t1, &x0);\\\n        and2(&t0, &x3);\\\n        or2(&t1, &x2);\\\n        copy2(&t2, &x1);\\\n        copy2(&t3, &x0);\\\n        or2(&t2, &x2);\\\n        or2(&t3, &x3);\\\n        xor2(&t2, &t3);\\\n        ;\\\n        xor2(&t0, &t2);\\\n        xor2(&t1, &t2);\\\n        ;\\\n        Mul_GF4_2(x0, x1, x2, x3, t1, t0, t2, t3);\\\n\n\n#define Inv_GF256(x0,  x1, x2, x3, x4, x5, x6, x7, t0, t1, t2, t3, s0, s1, s2, s3) \\\n        copy2(&t3, &x4);\\\n        copy2(&t2, &x5);\\\n        copy2(&t1, &x1);\\\n        copy2(&s1, &x7);\\\n        copy2(&s0, &x0);\\\n        ;\\\n        xor2(&t3, &x6);\\\n        xor2(&t2, &x7);\\\n        xor2(&t1, &x3);\\\n        xor2(&s1, &x6);\\\n        xor2(&s0, &x2);\\\n        ;\\\n        copy2(&s2, &t3);\\\n        copy2(&t0, &t2);\\\n        copy2(&s3, &t3);\\\n        ;\\\n        or2(&t2, &t1);\\\n        or2(&t3, &s0);\\\n        xor2(&s3, &t0);\\\n        and2(&s2, &s0);\\\n        and2(&t0, &t1);\\\n        xor2(&s0, &t1);\\\n        and2(&s3, &s0);\\\n        copy2(&s0, &x3);\\\n        xor2(&s0, &x2);\\\n        and2(&s1, &s0);\\\n        xor2(&t3, &s1);\\\n        xor2(&t2, &s1);\\\n        copy2(&s1, &x4);\\\n        xor2(&s1, &x5);\\\n        copy2(&s0, &x1);\\\n        copy2(&t1, &s1);\\\n        xor2(&s0, &x0);\\\n        or2(&t1, &s0);\\\n        and2(&s1, &s0);\\\n        xor2(&t0, &s1);\\\n        xor2(&t3, &s3);\\\n        xor2(&t2, &s2);\\\n        xor2(&t1, &s3);\\\n        xor2(&t0, &s2);\\\n        xor2(&t1, &s2);\\\n        copy2(&s0, &x7);\\\n        copy2(&s1, &x6);\\\n        copy2(&s2, &x5);\\\n        copy2(&s3, &x4);\\\n        and2(&s0, &x3);\\\n        and2(&s1, &x2);\\\n        and2(&s2, &x1);\\\n        or2(&s3, &x0);\\\n        xor2(&t3, &s0);\\\n        xor2(&t2, &s1);\\\n        xor2(&t1, &s2);\\\n        xor2(&t0, &s3);\\\n  ;\\\n  copy2(&s0, &t3);\\\n  xor2(&s0, &t2);\\\n  and2(&t3, &t1);\\\n  copy2(&s2, &t0);\\\n  xor2(&s2, &t3);\\\n  copy2(&s3, &s0);\\\n  and2(&s3, &s2);\\\n  xor2(&s3, &t2);\\\n  copy2(&s1, &t1);\\\n  xor2(&s1, &t0);\\\n  xor2(&t3, &t2);\\\n  and2(&s1, &t3);\\\n  xor2(&s1, &t0);\\\n  xor2(&t1, &s1);\\\n  copy2(&t2, &s2);\\\n  xor2(&t2, &s1);\\\n  and2(&t2, &t0);\\\n  xor2(&t1, &t2);\\\n  xor2(&s2, &t2);\\\n  and2(&s2, &s3);\\\n  xor2(&s2, &s0);\\\n  ;\\\n  Mul_GF16_2(x0, x1, x2, x3, x4, x5, x6, x7, s3, s2, s1, t1, s0, t0, t2, t3);\\\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/common_aes128ctr.c",
    "content": "#include \"common.h\"\n\nuint32 load32_bigendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[3]) \\\n  | (((uint32) (x[2])) << 8) \\\n  | (((uint32) (x[1])) << 16) \\\n  | (((uint32) (x[0])) << 24)\n  ;\n}\n\nvoid store32_bigendian(unsigned char *x,uint32 u)\n{\n  x[3] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[0] = u;\n}\n\nuint32 load32_littleendian(const unsigned char *x)\n{\n  return\n      (uint32) (x[0]) \\\n  | (((uint32) (x[1])) << 8) \\\n  | (((uint32) (x[2])) << 16) \\\n  | (((uint32) (x[3])) << 24)\n  ;\n}\n\nvoid store32_littleendian(unsigned char *x,uint32 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u;\n}\n\n\nuint64 load64_littleendian(const unsigned char *x)\n{\n  return\n      (uint64) (x[0]) \\\n  | (((uint64) (x[1])) << 8) \\\n  | (((uint64) (x[2])) << 16) \\\n  | (((uint64) (x[3])) << 24)\n  | (((uint64) (x[4])) << 32)\n  | (((uint64) (x[5])) << 40)\n  | (((uint64) (x[6])) << 48)\n  | (((uint64) (x[7])) << 56)\n  ;\n}\n\nvoid store64_littleendian(unsigned char *x,uint64 u)\n{\n  x[0] = u; u >>= 8;\n  x[1] = u; u >>= 8;\n  x[2] = u; u >>= 8;\n  x[3] = u; u >>= 8;\n  x[4] = u; u >>= 8;\n  x[5] = u; u >>= 8;\n  x[6] = u; u >>= 8;\n  x[7] = u;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts.h",
    "content": "#ifndef CONSTS_H\n#define CONSTS_H\n\n#include \"int128.h\"\n\n#define ROTB crypto_stream_aes128ctr_portable_ROTB\n#define M0 crypto_stream_aes128ctr_portable_M0\n#define EXPB0 crypto_stream_aes128ctr_portable_EXPB0\n#define SWAP32 crypto_stream_aes128ctr_portable_SWAP32\n#define M0SWAP crypto_stream_aes128ctr_portable_M0SWAP\n#define SR crypto_stream_aes128ctr_portable_SR\n#define SRM0 crypto_stream_aes128ctr_portable_SRM0\n#define BS0 crypto_stream_aes128ctr_portable_BS0\n#define BS1 crypto_stream_aes128ctr_portable_BS1\n#define BS2 crypto_stream_aes128ctr_portable_BS2\n\nextern const unsigned char ROTB[16];\nextern const unsigned char M0[16];\nextern const unsigned char EXPB0[16];\nextern const unsigned char SWAP32[16];\nextern const unsigned char M0SWAP[16];\nextern const unsigned char SR[16];\nextern const unsigned char SRM0[16];\nextern const int128 BS0;\nextern const int128 BS1;\nextern const int128 BS2;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/consts_aes128ctr.c",
    "content": "#include \"consts.h\"\n\nconst unsigned char ROTB[16] = {0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08};\nconst unsigned char M0[16]   = {0x0f, 0x0b, 0x07, 0x03, 0x0e, 0x0a, 0x06, 0x02, 0x0d, 0x09, 0x05, 0x01, 0x0c, 0x08, 0x04, 0x00};\nconst unsigned char EXPB0[16] = {0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0b, 0x0b, 0x0b, 0x0b, 0x0f, 0x0f, 0x0f, 0x0f};\n\nconst unsigned char SWAP32[16] = {0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c};\nconst unsigned char M0SWAP[16] = {0x0c, 0x08, 0x04, 0x00, 0x0d, 0x09, 0x05, 0x01, 0x0e, 0x0a, 0x06, 0x02, 0x0f, 0x0b, 0x07, 0x03};\nconst unsigned char SR[16] = {0x01, 0x02, 0x03, 0x00, 0x06, 0x07, 0x04, 0x05, 0x0b, 0x08, 0x09, 0x0a, 0x0c, 0x0d, 0x0e, 0x0f};\nconst unsigned char SRM0[16] = {0x0f, 0x0a, 0x05, 0x00, 0x0e, 0x09, 0x04, 0x03, 0x0d, 0x08, 0x07, 0x02, 0x0c, 0x0b, 0x06, 0x01};\n\nconst int128 BS0 = {{0x5555555555555555ULL, 0x5555555555555555ULL}};\nconst int128 BS1 = {{0x3333333333333333ULL, 0x3333333333333333ULL}};\nconst int128 BS2 = {{0x0f0f0f0f0f0f0f0fULL, 0x0f0f0f0f0f0f0f0fULL}};\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128.h",
    "content": "#ifndef INT128_H\n#define INT128_H\n\n#include <stdint.h>\n\n#include \"common.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\n#endif\n\ntypedef union {\n  uint64_t u64[2];\n  uint32_t u32[4];\n  uint8_t  u8[16];\n} int128;\n\n#define xor2 crypto_stream_aes128ctr_portable_xor2\nvoid xor2(int128 *r, const int128 *x);\n\n#define and2 crypto_stream_aes128ctr_portable_and2\nvoid and2(int128 *r, const int128 *x);\n\n#define or2 crypto_stream_aes128ctr_portable_or2\nvoid or2(int128 *r, const int128 *x);\n\n#define copy2 crypto_stream_aes128ctr_portable_copy2\nvoid copy2(int128 *r, const int128 *x);\n\n#define shufb crypto_stream_aes128ctr_portable_shufb\nvoid shufb(int128 *r, const unsigned char *l);\n\n#define shufd crypto_stream_aes128ctr_portable_shufd\nvoid shufd(int128 *r, const int128 *x, const unsigned int c);\n\n#define rshift32_littleendian crypto_stream_aes128ctr_portable_rshift32_littleendian\nvoid rshift32_littleendian(int128 *r, const unsigned int n);\n\n#define rshift64_littleendian crypto_stream_aes128ctr_portable_rshift64_littleendian\nvoid rshift64_littleendian(int128 *r, const unsigned int n);\n\n#define lshift64_littleendian crypto_stream_aes128ctr_portable_lshift64_littleendian\nvoid lshift64_littleendian(int128 *r, const unsigned int n);\n\n#define toggle crypto_stream_aes128ctr_portable_toggle\nvoid toggle(int128 *r);\n\n#define xor_rcon crypto_stream_aes128ctr_portable_xor_rcon\nvoid xor_rcon(int128 *r);\n\n#define add_uint32_big crypto_stream_aes128ctr_portable_add_uint32_big\nvoid add_uint32_big(int128 *r, uint32 x);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/int128_aes128ctr.c",
    "content": "\n#include \"int128.h\"\n#include \"common.h\"\n\nvoid xor2(int128 *r, const int128 *x)\n{\n  r->u64[0] ^= x->u64[0];\n  r->u64[1] ^= x->u64[1];\n}\n\nvoid and2(int128 *r, const int128 *x)\n{\n  r->u64[0] &= x->u64[0];\n  r->u64[1] &= x->u64[1];\n}\n\nvoid or2(int128 *r, const int128 *x)\n{\n  r->u64[0] |= x->u64[0];\n  r->u64[1] |= x->u64[1];\n}\n\nvoid copy2(int128 *r, const int128 *x)\n{\n  r->u64[0] = x->u64[0];\n  r->u64[1] = x->u64[1];\n}\n\nvoid shufb(int128 *r, const unsigned char *l)\n{\n  int128   t;\n  uint8_t *ct;\n  uint8_t *cr;\n\n  copy2(&t, r);\n  cr = r->u8;\n  ct = t.u8;\n  cr[0] = ct[l[0]];\n  cr[1] = ct[l[1]];\n  cr[2] = ct[l[2]];\n  cr[3] = ct[l[3]];\n  cr[4] = ct[l[4]];\n  cr[5] = ct[l[5]];\n  cr[6] = ct[l[6]];\n  cr[7] = ct[l[7]];\n  cr[8] = ct[l[8]];\n  cr[9] = ct[l[9]];\n  cr[10] = ct[l[10]];\n  cr[11] = ct[l[11]];\n  cr[12] = ct[l[12]];\n  cr[13] = ct[l[13]];\n  cr[14] = ct[l[14]];\n  cr[15] = ct[l[15]];\n}\n\nvoid shufd(int128 *r, const int128 *x, const unsigned int c)\n{\n  int128 t;\n\n  t.u32[0] = x->u32[c >> 0 & 3];\n  t.u32[1] = x->u32[c >> 2 & 3];\n  t.u32[2] = x->u32[c >> 4 & 3];\n  t.u32[3] = x->u32[c >> 6 & 3];\n  copy2(r, &t);\n}\n\nvoid rshift32_littleendian(int128 *r, const unsigned int n)\n{\n  unsigned char *rp = (unsigned char *)r;\n  uint32 t;\n  t = load32_littleendian(rp);\n  t >>= n;\n  store32_littleendian(rp, t);\n  t = load32_littleendian(rp+4);\n  t >>= n;\n  store32_littleendian(rp+4, t);\n  t = load32_littleendian(rp+8);\n  t >>= n;\n  store32_littleendian(rp+8, t);\n  t = load32_littleendian(rp+12);\n  t >>= n;\n  store32_littleendian(rp+12, t);\n}\n\nvoid rshift64_littleendian(int128 *r, const unsigned int n)\n{\n  unsigned char *rp = (unsigned char *)r;\n  uint64 t;\n  t = load64_littleendian(rp);\n  t >>= n;\n  store64_littleendian(rp, t);\n  t = load64_littleendian(rp+8);\n  t >>= n;\n  store64_littleendian(rp+8, t);\n}\n\nvoid lshift64_littleendian(int128 *r, const unsigned int n)\n{\n  unsigned char *rp = (unsigned char *)r;\n  uint64 t;\n  t = load64_littleendian(rp);\n  t <<= n;\n  store64_littleendian(rp, t);\n  t = load64_littleendian(rp+8);\n  t <<= n;\n  store64_littleendian(rp+8, t);\n}\n\nvoid toggle(int128 *r)\n{\n  r->u64[0] ^= 0xffffffffffffffffULL;\n  r->u64[1] ^= 0xffffffffffffffffULL;\n}\n\nvoid xor_rcon(int128 *r)\n{\n  unsigned char *rp = (unsigned char *)r;\n  uint32 t;\n  t = load32_littleendian(rp+12);\n  t ^= 0xffffffff;\n  store32_littleendian(rp+12, t);\n}\n\nvoid add_uint32_big(int128 *r, uint32 x)\n{\n  unsigned char *rp = (unsigned char *)r;\n  uint32 t;\n  t = load32_littleendian(rp+12);\n  t += x;\n  store32_littleendian(rp+12, t);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/stream_aes128ctr.c",
    "content": "\n#include \"crypto_stream_aes128ctr.h\"\n\nint crypto_stream_aes128ctr(\n        unsigned char *out,\n        unsigned long long outlen,\n        const unsigned char *n,\n        const unsigned char *k\n        )\n{\n    unsigned char d[crypto_stream_aes128ctr_BEFORENMBYTES];\n    crypto_stream_aes128ctr_beforenm(d, k);\n    crypto_stream_aes128ctr_afternm(out, outlen, n, d);\n    return 0;\n}\n\nint crypto_stream_aes128ctr_xor(\n        unsigned char *out,\n        const unsigned char *in,\n        unsigned long long inlen,\n        const unsigned char *n,\n        const unsigned char *k\n        )\n{\n    unsigned char d[crypto_stream_aes128ctr_BEFORENMBYTES];\n    crypto_stream_aes128ctr_beforenm(d, k);\n    crypto_stream_aes128ctr_xor_afternm(out, in, inlen, n, d);\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/types.h",
    "content": "#ifndef TYPES_H\n#define TYPES_H\n\n#include \"crypto_uint32.h\"\ntypedef crypto_uint32 uint32;\n\n#include \"crypto_uint64.h\"\ntypedef crypto_uint64 uint64;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/portable/xor_afternm_aes128ctr.c",
    "content": "/* Author: Peter Schwabe, ported from an assembly implementation by Emilia Käsper\n * Date: 2009-03-19\n * Public domain */\n\n#include \"crypto_stream_aes128ctr.h\"\n#include \"int128.h\"\n#include \"common.h\"\n#include \"consts.h\"\n\nint crypto_stream_aes128ctr_xor_afternm(unsigned char *out, const unsigned char *in, unsigned long long len, const unsigned char *nonce, const unsigned char *c)\n{\n\n  int128 xmm0;\n  int128 xmm1;\n  int128 xmm2;\n  int128 xmm3;\n  int128 xmm4;\n  int128 xmm5;\n  int128 xmm6;\n  int128 xmm7;\n\n  int128 xmm8;\n  int128 xmm9;\n  int128 xmm10;\n  int128 xmm11;\n  int128 xmm12;\n  int128 xmm13;\n  int128 xmm14;\n  int128 xmm15;\n\n  int128 nonce_stack;\n  unsigned long long lensav;\n  unsigned char bl[128];\n  unsigned char *blp;\n  unsigned char *np;\n  unsigned char b;\n\n  uint32 tmp;\n\n  /* Copy nonce on the stack */\n  copy2(&nonce_stack, (const int128 *) (nonce + 0));\n  np = (unsigned char *)&nonce_stack;\n\n    enc_block:\n\n    xmm0 = *(int128 *) (np + 0);\n    copy2(&xmm1, &xmm0);\n    shufb(&xmm1, SWAP32);\n    copy2(&xmm2, &xmm1);\n    copy2(&xmm3, &xmm1);\n    copy2(&xmm4, &xmm1);\n    copy2(&xmm5, &xmm1);\n    copy2(&xmm6, &xmm1);\n    copy2(&xmm7, &xmm1);\n\n    add_uint32_big(&xmm1, 1);\n    add_uint32_big(&xmm2, 2);\n    add_uint32_big(&xmm3, 3);\n    add_uint32_big(&xmm4, 4);\n    add_uint32_big(&xmm5, 5);\n    add_uint32_big(&xmm6, 6);\n    add_uint32_big(&xmm7, 7);\n\n    shufb(&xmm0, M0);\n    shufb(&xmm1, M0SWAP);\n    shufb(&xmm2, M0SWAP);\n    shufb(&xmm3, M0SWAP);\n    shufb(&xmm4, M0SWAP);\n    shufb(&xmm5, M0SWAP);\n    shufb(&xmm6, M0SWAP);\n    shufb(&xmm7, M0SWAP);\n\n    bitslice(xmm7, xmm6, xmm5, xmm4, xmm3, xmm2, xmm1, xmm0, xmm8)\n\n    aesround( 1, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 2, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 3, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 4, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 5, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 6, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 7, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    aesround( 8, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n    aesround( 9, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,c)\n    lastround(xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,c)\n\n    bitslice(xmm13, xmm10, xmm15, xmm11, xmm14, xmm12, xmm9, xmm8, xmm0)\n\n    if(len < 128) goto partial;\n    if(len == 128) goto full;\n\n    tmp = load32_bigendian(np + 12);\n    tmp += 8;\n    store32_bigendian(np + 12, tmp);\n\n    xor2(&xmm8, (const int128 *)(in + 0));\n    xor2(&xmm9, (const int128 *)(in + 16));\n    xor2(&xmm12, (const int128 *)(in + 32));\n    xor2(&xmm14, (const int128 *)(in + 48));\n    xor2(&xmm11, (const int128 *)(in + 64));\n    xor2(&xmm15, (const int128 *)(in + 80));\n    xor2(&xmm10, (const int128 *)(in + 96));\n    xor2(&xmm13, (const int128 *)(in + 112));\n\n    *(int128 *) (out + 0) = xmm8;\n    *(int128 *) (out + 16) = xmm9;\n    *(int128 *) (out + 32) = xmm12;\n    *(int128 *) (out + 48) = xmm14;\n    *(int128 *) (out + 64) = xmm11;\n    *(int128 *) (out + 80) = xmm15;\n    *(int128 *) (out + 96) = xmm10;\n    *(int128 *) (out + 112) = xmm13;\n\n    len -= 128;\n    in += 128;\n    out += 128;\n\n    goto enc_block;\n\n    partial:\n\n    lensav = len;\n    len >>= 4;\n\n    tmp = load32_bigendian(np + 12);\n    tmp += len;\n    store32_bigendian(np + 12, tmp);\n\n    blp = bl;\n    *(int128 *)(blp + 0) = xmm8;\n    *(int128 *)(blp + 16) = xmm9;\n    *(int128 *)(blp + 32) = xmm12;\n    *(int128 *)(blp + 48) = xmm14;\n    *(int128 *)(blp + 64) = xmm11;\n    *(int128 *)(blp + 80) = xmm15;\n    *(int128 *)(blp + 96) = xmm10;\n    *(int128 *)(blp + 112) = xmm13;\n\n    bytes:\n\n    if(lensav == 0) goto end;\n\n    b = blp[0]; /* clang false positive */\n    b ^= *(const unsigned char *)(in + 0);\n    *(unsigned char *)(out + 0) = b;\n\n    blp += 1;\n    in +=1;\n    out +=1;\n    lensav -= 1;\n\n    goto bytes;\n\n    full:\n\n    tmp = load32_bigendian(np + 12);\n    tmp += 8;\n    store32_bigendian(np + 12, tmp);\n\n    xor2(&xmm8, (const int128 *)(in + 0));\n    xor2(&xmm9, (const int128 *)(in + 16));\n    xor2(&xmm12, (const int128 *)(in + 32));\n    xor2(&xmm14, (const int128 *)(in + 48));\n    xor2(&xmm11, (const int128 *)(in + 64));\n    xor2(&xmm15, (const int128 *)(in + 80));\n    xor2(&xmm10, (const int128 *)(in + 96));\n    xor2(&xmm13, (const int128 *)(in + 112));\n\n    *(int128 *) (out + 0) = xmm8;\n    *(int128 *) (out + 16) = xmm9;\n    *(int128 *) (out + 32) = xmm12;\n    *(int128 *) (out + 48) = xmm14;\n    *(int128 *) (out + 64) = xmm11;\n    *(int128 *) (out + 80) = xmm15;\n    *(int128 *) (out + 96) = xmm10;\n    *(int128 *) (out + 112) = xmm13;\n\n    end:\n    return 0;\n\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/aes128ctr/stream_aes128ctr_api.c",
    "content": "#include \"crypto_stream_aes128ctr.h\"\n\nsize_t\ncrypto_stream_aes128ctr_keybytes(void) {\n    return crypto_stream_aes128ctr_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_aes128ctr_noncebytes(void) {\n    return crypto_stream_aes128ctr_NONCEBYTES;\n}\n\nsize_t\ncrypto_stream_aes128ctr_beforenmbytes(void) {\n    return crypto_stream_aes128ctr_BEFORENMBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.c",
    "content": "\n/*\n chacha-merged.c version 20080118\n D. J. Bernstein\n Public domain.\n */\n\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"utils.h\"\n#include \"crypto_stream_chacha20.h\"\n#include \"stream_chacha20_ref.h\"\n#include \"../stream_chacha20.h\"\n\nstruct chacha_ctx {\n    uint32_t input[16];\n};\n\ntypedef uint8_t  u8;\ntypedef uint32_t u32;\n\ntypedef struct chacha_ctx chacha_ctx;\n\n#define U8C(v) (v##U)\n#define U32C(v) (v##U)\n\n#define U8V(v) ((u8)(v) & U8C(0xFF))\n#define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF))\n\n#define ROTL32(v, n) \\\n  (U32V((v) << (n)) | ((v) >> (32 - (n))))\n\n#define U8TO32_LITTLE(p) \\\n  (((u32)((p)[0])      ) | \\\n   ((u32)((p)[1]) <<  8) | \\\n   ((u32)((p)[2]) << 16) | \\\n   ((u32)((p)[3]) << 24))\n\n#define U32TO8_LITTLE(p, v) \\\n  do { \\\n    (p)[0] = U8V((v)      ); \\\n    (p)[1] = U8V((v) >>  8); \\\n    (p)[2] = U8V((v) >> 16); \\\n    (p)[3] = U8V((v) >> 24); \\\n  } while (0)\n\n#define ROTATE(v,c) (ROTL32(v,c))\n#define XOR(v,w) ((v) ^ (w))\n#define PLUS(v,w) (U32V((v) + (w)))\n#define PLUSONE(v) (PLUS((v),1))\n\n#define QUARTERROUND(a,b,c,d) \\\n  a = PLUS(a,b); d = ROTATE(XOR(d,a),16); \\\n  c = PLUS(c,d); b = ROTATE(XOR(b,c),12); \\\n  a = PLUS(a,b); d = ROTATE(XOR(d,a), 8); \\\n  c = PLUS(c,d); b = ROTATE(XOR(b,c), 7);\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nstatic void\nchacha_keysetup(chacha_ctx *ctx, const u8 *k)\n{\n    const unsigned char *constants;\n\n    ctx->input[4] = U8TO32_LITTLE(k + 0);\n    ctx->input[5] = U8TO32_LITTLE(k + 4);\n    ctx->input[6] = U8TO32_LITTLE(k + 8);\n    ctx->input[7] = U8TO32_LITTLE(k + 12);\n    k += 16;\n    constants = sigma;\n    ctx->input[8] = U8TO32_LITTLE(k + 0);\n    ctx->input[9] = U8TO32_LITTLE(k + 4);\n    ctx->input[10] = U8TO32_LITTLE(k + 8);\n    ctx->input[11] = U8TO32_LITTLE(k + 12);\n    ctx->input[0] = U8TO32_LITTLE(constants + 0);\n    ctx->input[1] = U8TO32_LITTLE(constants + 4);\n    ctx->input[2] = U8TO32_LITTLE(constants + 8);\n    ctx->input[3] = U8TO32_LITTLE(constants + 12);\n}\n\nstatic void\nchacha_ivsetup(chacha_ctx *ctx, const u8 *iv, const u8 *counter)\n{\n    ctx->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 0);\n    ctx->input[13] = counter == NULL ? 0 : U8TO32_LITTLE(counter + 4);\n    ctx->input[14] = U8TO32_LITTLE(iv + 0);\n    ctx->input[15] = U8TO32_LITTLE(iv + 4);\n}\n\nstatic void\nchacha_ietf_ivsetup(chacha_ctx *ctx, const u8 *iv, const u8 *counter)\n{\n    ctx->input[12] = counter == NULL ? 0 : U8TO32_LITTLE(counter);\n    ctx->input[13] = U8TO32_LITTLE(iv + 0);\n    ctx->input[14] = U8TO32_LITTLE(iv + 4);\n    ctx->input[15] = U8TO32_LITTLE(iv + 8);\n}\n\nstatic void\nchacha_encrypt_bytes(chacha_ctx *ctx, const u8 *m, u8 *c, unsigned long long bytes)\n{\n    u32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;\n    u32 j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15;\n    u8 *ctarget = NULL;\n    u8 tmp[64];\n    unsigned int i;\n\n    if (!bytes) {\n        return; /* LCOV_EXCL_LINE */\n    }\n    if (bytes > 64ULL * (1ULL << 32) - 64ULL) {\n        abort();\n    }\n    j0 = ctx->input[0];\n    j1 = ctx->input[1];\n    j2 = ctx->input[2];\n    j3 = ctx->input[3];\n    j4 = ctx->input[4];\n    j5 = ctx->input[5];\n    j6 = ctx->input[6];\n    j7 = ctx->input[7];\n    j8 = ctx->input[8];\n    j9 = ctx->input[9];\n    j10 = ctx->input[10];\n    j11 = ctx->input[11];\n    j12 = ctx->input[12];\n    j13 = ctx->input[13];\n    j14 = ctx->input[14];\n    j15 = ctx->input[15];\n\n    for (;;) {\n        if (bytes < 64) {\n            memset(tmp, 0, 64);\n            for (i = 0; i < bytes; ++i) {\n                tmp[i] = m[i];\n            }\n            m = tmp;\n            ctarget = c;\n            c = tmp;\n        }\n        x0 = j0;\n        x1 = j1;\n        x2 = j2;\n        x3 = j3;\n        x4 = j4;\n        x5 = j5;\n        x6 = j6;\n        x7 = j7;\n        x8 = j8;\n        x9 = j9;\n        x10 = j10;\n        x11 = j11;\n        x12 = j12;\n        x13 = j13;\n        x14 = j14;\n        x15 = j15;\n        for (i = 20; i > 0; i -= 2) {\n            QUARTERROUND(x0, x4, x8, x12)\n            QUARTERROUND(x1, x5, x9, x13)\n            QUARTERROUND(x2, x6, x10, x14)\n            QUARTERROUND(x3, x7, x11, x15)\n            QUARTERROUND(x0, x5, x10, x15)\n            QUARTERROUND(x1, x6, x11, x12)\n            QUARTERROUND(x2, x7, x8, x13)\n            QUARTERROUND(x3, x4, x9, x14)\n        }\n        x0 = PLUS(x0, j0);\n        x1 = PLUS(x1, j1);\n        x2 = PLUS(x2, j2);\n        x3 = PLUS(x3, j3);\n        x4 = PLUS(x4, j4);\n        x5 = PLUS(x5, j5);\n        x6 = PLUS(x6, j6);\n        x7 = PLUS(x7, j7);\n        x8 = PLUS(x8, j8);\n        x9 = PLUS(x9, j9);\n        x10 = PLUS(x10, j10);\n        x11 = PLUS(x11, j11);\n        x12 = PLUS(x12, j12);\n        x13 = PLUS(x13, j13);\n        x14 = PLUS(x14, j14);\n        x15 = PLUS(x15, j15);\n\n        x0 = XOR(x0, U8TO32_LITTLE(m + 0));\n        x1 = XOR(x1, U8TO32_LITTLE(m + 4));\n        x2 = XOR(x2, U8TO32_LITTLE(m + 8));\n        x3 = XOR(x3, U8TO32_LITTLE(m + 12));\n        x4 = XOR(x4, U8TO32_LITTLE(m + 16));\n        x5 = XOR(x5, U8TO32_LITTLE(m + 20));\n        x6 = XOR(x6, U8TO32_LITTLE(m + 24));\n        x7 = XOR(x7, U8TO32_LITTLE(m + 28));\n        x8 = XOR(x8, U8TO32_LITTLE(m + 32));\n        x9 = XOR(x9, U8TO32_LITTLE(m + 36));\n        x10 = XOR(x10, U8TO32_LITTLE(m + 40));\n        x11 = XOR(x11, U8TO32_LITTLE(m + 44));\n        x12 = XOR(x12, U8TO32_LITTLE(m + 48));\n        x13 = XOR(x13, U8TO32_LITTLE(m + 52));\n        x14 = XOR(x14, U8TO32_LITTLE(m + 56));\n        x15 = XOR(x15, U8TO32_LITTLE(m + 60));\n\n        j12 = PLUSONE(j12);\n        /* LCOV_EXCL_START */\n        if (!j12) {\n            j13 = PLUSONE(j13);\n        }\n        /* LCOV_EXCL_STOP */\n\n        U32TO8_LITTLE(c + 0, x0);\n        U32TO8_LITTLE(c + 4, x1);\n        U32TO8_LITTLE(c + 8, x2);\n        U32TO8_LITTLE(c + 12, x3);\n        U32TO8_LITTLE(c + 16, x4);\n        U32TO8_LITTLE(c + 20, x5);\n        U32TO8_LITTLE(c + 24, x6);\n        U32TO8_LITTLE(c + 28, x7);\n        U32TO8_LITTLE(c + 32, x8);\n        U32TO8_LITTLE(c + 36, x9);\n        U32TO8_LITTLE(c + 40, x10);\n        U32TO8_LITTLE(c + 44, x11);\n        U32TO8_LITTLE(c + 48, x12);\n        U32TO8_LITTLE(c + 52, x13);\n        U32TO8_LITTLE(c + 56, x14);\n        U32TO8_LITTLE(c + 60, x15);\n\n        if (bytes <= 64) {\n            if (bytes < 64) {\n                for (i = 0; i < (unsigned int) bytes; ++i) {\n                    ctarget[i] = c[i];\n                }\n            }\n            ctx->input[12] = j12;\n            ctx->input[13] = j13;\n            return;\n        }\n        bytes -= 64;\n        c += 64;\n        m += 64;\n    }\n}\n\nstatic int\nstream_ref(unsigned char *c, unsigned long long clen,\n           const unsigned char *n, const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!clen) {\n        return 0;\n    }\n    (void) sizeof(int[crypto_stream_chacha20_KEYBYTES == 256 / 8 ? 1 : -1]);\n    chacha_keysetup(&ctx, k);\n    chacha_ivsetup(&ctx, n, NULL);\n    memset(c, 0, clen);\n    chacha_encrypt_bytes(&ctx, c, c, clen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_ietf_ref(unsigned char *c, unsigned long long clen,\n                const unsigned char *n, const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!clen) {\n        return 0;\n    }\n    (void) sizeof(int[crypto_stream_chacha20_KEYBYTES == 256 / 8 ? 1 : -1]);\n    chacha_keysetup(&ctx, k);\n    chacha_ietf_ivsetup(&ctx, n, NULL);\n    memset(c, 0, clen);\n    chacha_encrypt_bytes(&ctx, c, c, clen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_ref_xor_ic(unsigned char *c, const unsigned char *m,\n                  unsigned long long mlen,\n                  const unsigned char *n, uint64_t ic,\n                  const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n    uint8_t           ic_bytes[8];\n    uint32_t          ic_high;\n    uint32_t          ic_low;\n\n    if (!mlen) {\n        return 0;\n    }\n    ic_high = U32V(ic >> 32);\n    ic_low = U32V(ic);\n    U32TO8_LITTLE(&ic_bytes[0], ic_low);\n    U32TO8_LITTLE(&ic_bytes[4], ic_high);\n    chacha_keysetup(&ctx, k);\n    chacha_ivsetup(&ctx, n, ic_bytes);\n    chacha_encrypt_bytes(&ctx, m, c, mlen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_ietf_ref_xor_ic(unsigned char *c, const unsigned char *m,\n                       unsigned long long mlen,\n                       const unsigned char *n, uint32_t ic,\n                       const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n    uint8_t           ic_bytes[4];\n\n    if (!mlen) {\n        return 0;\n    }\n    U32TO8_LITTLE(ic_bytes, ic);\n    chacha_keysetup(&ctx, k);\n    chacha_ietf_ivsetup(&ctx, n, ic_bytes);\n    chacha_encrypt_bytes(&ctx, m, c, mlen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstruct crypto_stream_chacha20_implementation\ncrypto_stream_chacha20_ref_implementation = {\n    SODIUM_C99(.stream =) stream_ref,\n    SODIUM_C99(.stream_ietf =) stream_ietf_ref,\n    SODIUM_C99(.stream_xor_ic =) stream_ref_xor_ic,\n    SODIUM_C99(.stream_ietf_xor_ic =) stream_ietf_ref_xor_ic\n};\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/ref/stream_chacha20_ref.h",
    "content": "\n#include <stdint.h>\n\n#include \"crypto_stream_chacha20.h\"\n\nextern struct crypto_stream_chacha20_implementation\n    crypto_stream_chacha20_ref_implementation;\n\nint\ncrypto_stream_chacha20_ref(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nint\ncrypto_stream_chacha20_ref_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n\nint\ncrypto_stream_chacha20_ietf_ref(unsigned char *c, unsigned long long clen,\n                                const unsigned char *n, const unsigned char *k);\n\nint\ncrypto_stream_chacha20_ietf_ref_xor_ic(unsigned char *c, const unsigned char *m,\n                                       unsigned long long mlen,\n                                       const unsigned char *n, uint32_t ic,\n                                       const unsigned char *k);\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c",
    "content": "#include \"crypto_stream_chacha20.h\"\n#include \"stream_chacha20.h\"\n#include \"runtime.h\"\n#include \"ref/stream_chacha20_ref.h\"\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H) && defined(__GNUC__))\n# include \"vec/stream_chacha20_vec.h\"\n#endif\n\nstatic const crypto_stream_chacha20_implementation *implementation =\n    &crypto_stream_chacha20_ref_implementation;\n\nsize_t\ncrypto_stream_chacha20_keybytes(void) {\n    return crypto_stream_chacha20_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_chacha20_noncebytes(void) {\n    return crypto_stream_chacha20_NONCEBYTES;\n}\n\nsize_t\ncrypto_stream_chacha20_ietf_noncebytes(void) {\n    return crypto_stream_chacha20_IETF_NONCEBYTES;\n}\n\nint\ncrypto_stream_chacha20(unsigned char *c, unsigned long long clen,\n                       const unsigned char *n, const unsigned char *k)\n{\n    return implementation->stream(c, clen, n, k);\n}\n\nint\ncrypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen,\n                            const unsigned char *n, const unsigned char *k)\n{\n    return implementation->stream_ietf(c, clen, n, k);\n}\n\nint\ncrypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,\n                              unsigned long long mlen,\n                              const unsigned char *n, uint64_t ic,\n                              const unsigned char *k)\n{\n    return implementation->stream_xor_ic(c, m, mlen, n, ic, k);\n}\n\nint\ncrypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m,\n                                   unsigned long long mlen,\n                                   const unsigned char *n, uint32_t ic,\n                                   const unsigned char *k)\n{\n    return implementation->stream_ietf_xor_ic(c, m, mlen, n, ic, k);\n}\n\nint\ncrypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,\n                           unsigned long long mlen, const unsigned char *n,\n                           const unsigned char *k)\n{\n    return implementation->stream_xor_ic(c, m, mlen, n, 0U, k);\n}\n\nint\ncrypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m,\n                                unsigned long long mlen, const unsigned char *n,\n                                const unsigned char *k)\n{\n    return implementation->stream_ietf_xor_ic(c, m, mlen, n, 0U, k);\n}\n\nint\n_crypto_stream_chacha20_pick_best_implementation(void)\n{\n    implementation = &crypto_stream_chacha20_ref_implementation;\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H) && defined(__GNUC__))\n    if (sodium_runtime_has_ssse3()) {\n        implementation = &crypto_stream_chacha20_vec_implementation;\n    }\n#endif\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.h",
    "content": "\n#ifndef stream_chacha20_H\n#define stream_chacha20_H\n\n#include <stdint.h>\n\ntypedef struct crypto_stream_chacha20_implementation {\n    int (*stream)(unsigned char *c, unsigned long long clen,\n                  const unsigned char *n, const unsigned char *k);\n    int (*stream_ietf)(unsigned char *c, unsigned long long clen,\n                      const unsigned char *n, const unsigned char *k);\n    int (*stream_xor_ic)(unsigned char *c, const unsigned char *m,\n                         unsigned long long mlen,\n                         const unsigned char *n, uint64_t ic,\n                         const unsigned char *k);\n    int (*stream_ietf_xor_ic)(unsigned char *c, const unsigned char *m,\n                              unsigned long long mlen,\n                              const unsigned char *n, uint32_t ic,\n                              const unsigned char *k);\n} crypto_stream_chacha20_implementation;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/vec/stream_chacha20_vec.c",
    "content": "\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#include \"export.h\"\n#include \"utils.h\"\n#include \"crypto_stream_chacha20.h\"\n#include \"stream_chacha20_vec.h\"\n#include \"../stream_chacha20.h\"\n\n#if (defined(HAVE_EMMINTRIN_H) && defined(HAVE_TMMINTRIN_H) && defined(__GNUC__))\n\n#pragma GCC target(\"sse2\")\n#pragma GCC target(\"ssse3\")\n\n#define CHACHA_RNDS 20\n\ntypedef unsigned int vec __attribute__((vector_size(16)));\n\n#include <emmintrin.h>\n#include <tmmintrin.h>\n\n# if __clang__\n#  define VBPI 4\n# else\n#  define VBPI 3\n# endif\n# define ONE (vec) _mm_set_epi32(0, 0, 0, 1)\n# define LOAD(m) (vec) _mm_loadu_si128((const __m128i *) (const void *) (m))\n# define LOAD_ALIGNED(m) (vec) _mm_load_si128((const __m128i *) (const void *) (m))\n# define STORE(m, r) _mm_storeu_si128((__m128i *) (void *) (m), (__m128i) (r))\n# define ROTV1(x) (vec) _mm_shuffle_epi32((__m128i)x, _MM_SHUFFLE(0, 3, 2, 1))\n# define ROTV2(x) (vec) _mm_shuffle_epi32((__m128i)x, _MM_SHUFFLE(1, 0, 3, 2))\n# define ROTV3(x) (vec) _mm_shuffle_epi32((__m128i)x, _MM_SHUFFLE(2, 1, 0, 3))\n# define ROTW7(x) \\\n    (vec)(_mm_slli_epi32((__m128i)x, 7) ^ _mm_srli_epi32((__m128i)x, 25))\n# define ROTW12(x) \\\n    (vec)(_mm_slli_epi32((__m128i)x, 12) ^ _mm_srli_epi32((__m128i)x, 20))\n# define ROTW8(x) \\\n    (vec)(_mm_slli_epi32((__m128i)x, 8) ^ _mm_srli_epi32((__m128i)x, 24))\n#define ROTW16(x) \\\n    (vec)(_mm_slli_epi32((__m128i)x, 16) ^ _mm_srli_epi32((__m128i)x, 16))\n\n#ifndef REVV_BE\n# define REVV_BE(x) (x)\n#endif\n\n#define BPI (VBPI + 0) /* Blocks computed per loop iteration   */\n\n#define DQROUND_VECTORS(a, b, c, d) \\\n    a += b;                         \\\n    d ^= a;                         \\\n    d = ROTW16(d);                  \\\n    c += d;                         \\\n    b ^= c;                         \\\n    b = ROTW12(b);                  \\\n    a += b;                         \\\n    d ^= a;                         \\\n    d = ROTW8(d);                   \\\n    c += d;                         \\\n    b ^= c;                         \\\n    b = ROTW7(b);                   \\\n    b = ROTV1(b);                   \\\n    c = ROTV2(c);                   \\\n    d = ROTV3(d);                   \\\n    a += b;                         \\\n    d ^= a;                         \\\n    d = ROTW16(d);                  \\\n    c += d;                         \\\n    b ^= c;                         \\\n    b = ROTW12(b);                  \\\n    a += b;                         \\\n    d ^= a;                         \\\n    d = ROTW8(d);                   \\\n    c += d;                         \\\n    b ^= c;                         \\\n    b = ROTW7(b);                   \\\n    b = ROTV3(b);                   \\\n    c = ROTV2(c);                   \\\n    d = ROTV1(d);\n\n#define WRITE_XOR(in, op, d, v0, v1, v2, v3)           \\\n    STORE(op + d + 0, LOAD(in + d + 0) ^ REVV_BE(v0)); \\\n    STORE(op + d + 4, LOAD(in + d + 4) ^ REVV_BE(v1)); \\\n    STORE(op + d + 8, LOAD(in + d + 8) ^ REVV_BE(v2)); \\\n    STORE(op + d + 12, LOAD(in + d + 12) ^ REVV_BE(v3));\n\nstruct chacha_ctx {\n    vec s1;\n    vec s2;\n    vec s3;\n};\n\ntypedef struct chacha_ctx chacha_ctx;\n\nstatic void\nchacha_ivsetup(chacha_ctx *ctx, const uint8_t *iv, uint64_t ic)\n{\n    const vec s3 = {\n        (uint32_t) ic,\n        (uint32_t) (ic >> 32),\n        ((const uint32_t *) (const void *) iv)[0],\n        ((const uint32_t *) (const void *) iv)[1]\n    };\n    ctx->s3 = s3;\n}\n\nstatic void\nchacha_ietf_ivsetup(chacha_ctx *ctx, const uint8_t *iv, uint32_t ic)\n{\n    const vec s3 = {\n        ic,\n        ((const uint32_t *) (const void *) iv)[0],\n        ((const uint32_t *) (const void *) iv)[1],\n        ((const uint32_t *) (const void *) iv)[2]\n    };\n    ctx->s3 = s3;\n}\n\nstatic void\nchacha_keysetup(chacha_ctx *ctx, const uint8_t *k)\n{\n    ctx->s1 = LOAD(k);\n    ctx->s2 = LOAD(k + 16);\n}\n\nstatic void\nchacha_encrypt_bytes(chacha_ctx *ctx, const uint8_t *in, uint8_t *out,\n                     unsigned long long inlen)\n{\n    CRYPTO_ALIGN(16) unsigned chacha_const[]\n        = { 0x61707865, 0x3320646E, 0x79622D32, 0x6B206574 };\n    uint32_t           *op = (uint32_t *) (void *) out;\n    const uint32_t     *ip = (const uint32_t *) (const void *) in;\n    vec                 s0, s1, s2, s3;\n    unsigned long long  iters;\n    unsigned long long  i;\n\n    if (inlen > 64ULL * (1ULL << 32) - 64ULL) {\n        abort();\n    }\n    s0 = LOAD_ALIGNED(chacha_const);\n    s1 = ctx->s1;\n    s2 = ctx->s2;\n    s3 = ctx->s3;\n\n    for (iters = 0; iters < inlen / (BPI * 64); iters++) {\n#if VBPI > 2\n        vec v8, v9, v10, v11;\n#endif\n#if VBPI > 3\n        vec v12, v13, v14, v15;\n#endif\n        vec v0, v1, v2, v3, v4, v5, v6, v7;\n        v4 = v0 = s0;\n        v5 = v1 = s1;\n        v6 = v2 = s2;\n        v3 = s3;\n        v7 = v3 + ONE;\n#if VBPI > 2\n        v8 = v4;\n        v9 = v5;\n        v10 = v6;\n        v11 = v7 + ONE;\n#endif\n#if VBPI > 3\n        v12 = v8;\n        v13 = v9;\n        v14 = v10;\n        v15 = v11 + ONE;\n#endif\n        for (i = CHACHA_RNDS / 2; i; i--) {\n            DQROUND_VECTORS(v0, v1, v2, v3)\n            DQROUND_VECTORS(v4, v5, v6, v7)\n#if VBPI > 2\n            DQROUND_VECTORS(v8, v9, v10, v11)\n#endif\n#if VBPI > 3\n            DQROUND_VECTORS(v12, v13, v14, v15)\n#endif\n        }\n\n        WRITE_XOR(ip, op, 0, v0 + s0, v1 + s1, v2 + s2, v3 + s3)\n        s3 += ONE;\n        WRITE_XOR(ip, op, 16, v4 + s0, v5 + s1, v6 + s2, v7 + s3)\n        s3 += ONE;\n#if VBPI > 2\n        WRITE_XOR(ip, op, 32, v8 + s0, v9 + s1, v10 + s2, v11 + s3)\n        s3 += ONE;\n#endif\n#if VBPI > 3\n        WRITE_XOR(ip, op, 48, v12 + s0, v13 + s1, v14 + s2, v15 + s3)\n        s3 += ONE;\n#endif\n        ip += VBPI * 16;\n        op += VBPI * 16;\n    }\n\n    for (iters = inlen % (BPI * 64) / 64; iters != 0; iters--) {\n        vec v0 = s0, v1 = s1, v2 = s2, v3 = s3;\n        for (i = CHACHA_RNDS / 2; i; i--) {\n            DQROUND_VECTORS(v0, v1, v2, v3);\n        }\n        WRITE_XOR(ip, op, 0, v0 + s0, v1 + s1, v2 + s2, v3 + s3)\n        s3 += ONE;\n        ip += 16;\n        op += 16;\n    }\n\n    inlen = inlen % 64;\n    if (inlen) {\n        CRYPTO_ALIGN(16) vec buf[4];\n        vec v0, v1, v2, v3;\n        v0 = s0;\n        v1 = s1;\n        v2 = s2;\n        v3 = s3;\n        for (i = CHACHA_RNDS / 2; i; i--) {\n            DQROUND_VECTORS(v0, v1, v2, v3);\n        }\n\n        if (inlen >= 16) {\n            STORE(op + 0, LOAD(ip + 0) ^ REVV_BE(v0 + s0));\n            if (inlen >= 32) {\n                STORE(op + 4, LOAD(ip + 4) ^ REVV_BE(v1 + s1));\n                if (inlen >= 48) {\n                    STORE(op + 8, LOAD(ip + 8) ^ REVV_BE(v2 + s2));\n                    buf[3] = REVV_BE(v3 + s3);\n                } else {\n                    buf[2] = REVV_BE(v2 + s2);\n                }\n            } else {\n                buf[1] = REVV_BE(v1 + s1);\n            }\n        } else {\n            buf[0] = REVV_BE(v0 + s0);\n        }\n        for (i = inlen & ~15ULL; i < inlen; i++) {\n            ((char *) op)[i] = ((const char *) ip)[i] ^ ((char *) buf)[i];\n        }\n    }\n}\n\nstatic int\nstream_vec(unsigned char *c, unsigned long long clen,\n           const unsigned char *n, const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!clen) {\n        return 0;\n    }\n    (void) sizeof(int[crypto_stream_chacha20_KEYBYTES == 256 / 8 ? 1 : -1]);\n    chacha_keysetup(&ctx, k);\n    chacha_ivsetup(&ctx, n, 0ULL);\n    memset(c, 0, clen);\n    chacha_encrypt_bytes(&ctx, c, c, clen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_ietf_vec(unsigned char *c, unsigned long long clen,\n                const unsigned char *n, const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!clen) {\n        return 0;\n    }\n    (void) sizeof(int[crypto_stream_chacha20_KEYBYTES == 256 / 8 ? 1 : -1]);\n    chacha_keysetup(&ctx, k);\n    chacha_ietf_ivsetup(&ctx, n, 0ULL);\n    memset(c, 0, clen);\n    chacha_encrypt_bytes(&ctx, c, c, clen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_vec_xor_ic(unsigned char *c, const unsigned char *m,\n                  unsigned long long mlen,\n                  const unsigned char *n, uint64_t ic,\n                  const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!mlen) {\n        return 0;\n    }\n    chacha_keysetup(&ctx, k);\n    chacha_ivsetup(&ctx, n, ic);\n    chacha_encrypt_bytes(&ctx, m, c, mlen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstatic int\nstream_ietf_vec_xor_ic(unsigned char *c, const unsigned char *m,\n                       unsigned long long mlen,\n                       const unsigned char *n, uint32_t ic,\n                       const unsigned char *k)\n{\n    struct chacha_ctx ctx;\n\n    if (!mlen) {\n        return 0;\n    }\n    chacha_keysetup(&ctx, k);\n    chacha_ietf_ivsetup(&ctx, n, ic);\n    chacha_encrypt_bytes(&ctx, m, c, mlen);\n    sodium_memzero(&ctx, sizeof ctx);\n\n    return 0;\n}\n\nstruct crypto_stream_chacha20_implementation\ncrypto_stream_chacha20_vec_implementation = {\n    SODIUM_C99(.stream =) stream_vec,\n    SODIUM_C99(.stream_ietf =) stream_ietf_vec,\n    SODIUM_C99(.stream_xor_ic =) stream_vec_xor_ic,\n    SODIUM_C99(.stream_ietf_xor_ic =) stream_ietf_vec_xor_ic\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/chacha20/vec/stream_chacha20_vec.h",
    "content": "\n#include <stdint.h>\n\n#include \"crypto_stream_chacha20.h\"\n\nextern struct crypto_stream_chacha20_implementation\n    crypto_stream_chacha20_vec_implementation;\n\nint\ncrypto_stream_chacha20_vec(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nint\ncrypto_stream_chacha20_vec_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n\nint\ncrypto_stream_chacha20_ietf_vec(unsigned char *c, unsigned long long clen,\n                                const unsigned char *n, const unsigned char *k);\n\nint\ncrypto_stream_chacha20_ietf_vec_xor_ic(unsigned char *c, const unsigned char *m,\n                                       unsigned long long mlen,\n                                       const unsigned char *n, uint32_t ic,\n                                       const unsigned char *k);\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/crypto_stream.c",
    "content": "\n#include \"crypto_stream.h\"\n\nsize_t\ncrypto_stream_keybytes(void)\n{\n    return crypto_stream_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_noncebytes(void)\n{\n    return crypto_stream_NONCEBYTES;\n}\n\nconst char *\ncrypto_stream_primitive(void)\n{\n    return crypto_stream_PRIMITIVE;\n}\n\nint\ncrypto_stream(unsigned char *c, unsigned long long clen,\n              const unsigned char *n, const unsigned char *k)\n{\n    return crypto_stream_xsalsa20(c, clen, n, k);\n}\n\n\nint\ncrypto_stream_xor(unsigned char *c, const unsigned char *m,\n                  unsigned long long mlen, const unsigned char *n,\n                  const unsigned char *k)\n{\n    return crypto_stream_xsalsa20_xor(c, m, mlen, n, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa20/amd64_xmm6/stream_salsa20_amd64_xmm6.S",
    "content": "#ifdef HAVE_AMD64_ASM\n\n.text\n.p2align 5\n\n.globl  crypto_stream_salsa20\n.globl _crypto_stream_salsa20\n#ifdef __ELF__\n.type  crypto_stream_salsa20, @function\n.type _crypto_stream_salsa20, @function\n#endif\ncrypto_stream_salsa20:\n_crypto_stream_salsa20:\nmov %rsp,%r11\nand $31,%r11\nadd $512,%r11\nsub %r11,%rsp\nmovq %r11,416(%rsp)\nmovq %r12,424(%rsp)\nmovq %r13,432(%rsp)\nmovq %r14,440(%rsp)\nmovq %r15,448(%rsp)\nmovq %rbx,456(%rsp)\nmovq %rbp,464(%rsp)\nmov  %rsi,%r9\nmov  %rdi,%rdi\nmov  %rdi,%rsi\nmov  %rdx,%rdx\nmov  %rcx,%r10\ncmp  $0,%r9\njbe ._done\nmov  $0,%rax\nmov  %r9,%rcx\nrep stosb\nsub  %r9,%rdi\nmovq $0,472(%rsp)\njmp ._start\n\n.text\n.p2align 5\n\n.globl  crypto_stream_salsa20_xor_ic\n.globl _crypto_stream_salsa20_xor_ic\n#ifdef __ELF__\n.type  crypto_stream_salsa20_xor_ic, @function\n.type _crypto_stream_salsa20_xor_ic, @function\n#endif\ncrypto_stream_salsa20_xor_ic:\n_crypto_stream_salsa20_xor_ic:\n\nmov %rsp,%r11\nand $31,%r11\nadd $512,%r11\nsub %r11,%rsp\nmovq %r11,416(%rsp)\nmovq %r12,424(%rsp)\nmovq %r13,432(%rsp)\nmovq %r14,440(%rsp)\nmovq %r15,448(%rsp)\nmovq %rbx,456(%rsp)\nmovq %rbp,464(%rsp)\nmov  %rdi,%rdi\nmov  %rsi,%rsi\nmov  %r9,%r10\nmovq %r8,472(%rsp)\nmov  %rdx,%r9\nmov  %rcx,%rdx\ncmp  $0,%r9\njbe ._done\n\n._start:\nmovl   20(%r10),%ecx\nmovl   0(%r10),%r8d\nmovl   0(%rdx),%eax\nmovl   16(%r10),%r11d\nmovl %ecx,64(%rsp)\nmovl %r8d,4+64(%rsp)\nmovl %eax,8+64(%rsp)\nmovl %r11d,12+64(%rsp)\nmovl   24(%r10),%r8d\nmovl   4(%r10),%eax\nmovl   4(%rdx),%edx\nmovq 472(%rsp),%rcx\nmovl %ecx,80(%rsp)\nmovl %r8d,4+80(%rsp)\nmovl %eax,8+80(%rsp)\nmovl %edx,12+80(%rsp)\nmovl   12(%r10),%edx\nshr  $32,%rcx\nmovl   28(%r10),%r8d\nmovl   8(%r10),%eax\nmovl %edx,96(%rsp)\nmovl %ecx,4+96(%rsp)\nmovl %r8d,8+96(%rsp)\nmovl %eax,12+96(%rsp)\nmov  $1634760805,%rdx\nmov  $857760878,%rcx\nmov  $2036477234,%r8\nmov  $1797285236,%rax\nmovl %edx,112(%rsp)\nmovl %ecx,4+112(%rsp)\nmovl %r8d,8+112(%rsp)\nmovl %eax,12+112(%rsp)\ncmp  $256,%r9\njb ._bytesbetween1and255\nmovdqa 112(%rsp),%xmm0\npshufd $0x55,%xmm0,%xmm1\npshufd $0xaa,%xmm0,%xmm2\npshufd $0xff,%xmm0,%xmm3\npshufd $0x00,%xmm0,%xmm0\nmovdqa %xmm1,128(%rsp)\nmovdqa %xmm2,144(%rsp)\nmovdqa %xmm3,160(%rsp)\nmovdqa %xmm0,176(%rsp)\nmovdqa 64(%rsp),%xmm0\npshufd $0xaa,%xmm0,%xmm1\npshufd $0xff,%xmm0,%xmm2\npshufd $0x00,%xmm0,%xmm3\npshufd $0x55,%xmm0,%xmm0\nmovdqa %xmm1,192(%rsp)\nmovdqa %xmm2,208(%rsp)\nmovdqa %xmm3,224(%rsp)\nmovdqa %xmm0,240(%rsp)\nmovdqa 80(%rsp),%xmm0\npshufd $0xff,%xmm0,%xmm1\npshufd $0x55,%xmm0,%xmm2\npshufd $0xaa,%xmm0,%xmm0\nmovdqa %xmm1,256(%rsp)\nmovdqa %xmm2,272(%rsp)\nmovdqa %xmm0,288(%rsp)\nmovdqa 96(%rsp),%xmm0\npshufd $0x00,%xmm0,%xmm1\npshufd $0xaa,%xmm0,%xmm2\npshufd $0xff,%xmm0,%xmm0\nmovdqa %xmm1,304(%rsp)\nmovdqa %xmm2,320(%rsp)\nmovdqa %xmm0,336(%rsp)\n\n._bytesatleast256:\nmovq 472(%rsp),%rdx\nmov  %rdx,%rcx\nshr  $32,%rcx\nmovl %edx,352(%rsp)\nmovl %ecx,368(%rsp)\nadd  $1,%rdx\nmov  %rdx,%rcx\nshr  $32,%rcx\nmovl %edx,4+352(%rsp)\nmovl %ecx,4+368(%rsp)\nadd  $1,%rdx\nmov  %rdx,%rcx\nshr  $32,%rcx\nmovl %edx,8+352(%rsp)\nmovl %ecx,8+368(%rsp)\nadd  $1,%rdx\nmov  %rdx,%rcx\nshr  $32,%rcx\nmovl %edx,12+352(%rsp)\nmovl %ecx,12+368(%rsp)\nadd  $1,%rdx\nmov  %rdx,%rcx\nshr  $32,%rcx\nmovl %edx,80(%rsp)\nmovl %ecx,4+96(%rsp)\nmovq %rdx,472(%rsp)\nmovq %r9,480(%rsp)\nmov  $20,%rdx\nmovdqa 128(%rsp),%xmm0\nmovdqa 144(%rsp),%xmm1\nmovdqa 160(%rsp),%xmm2\nmovdqa 320(%rsp),%xmm3\nmovdqa 336(%rsp),%xmm4\nmovdqa 192(%rsp),%xmm5\nmovdqa 208(%rsp),%xmm6\nmovdqa 240(%rsp),%xmm7\nmovdqa 256(%rsp),%xmm8\nmovdqa 272(%rsp),%xmm9\nmovdqa 288(%rsp),%xmm10\nmovdqa 368(%rsp),%xmm11\nmovdqa 176(%rsp),%xmm12\nmovdqa 224(%rsp),%xmm13\nmovdqa 304(%rsp),%xmm14\nmovdqa 352(%rsp),%xmm15\n\n._mainloop1:\nmovdqa %xmm1,384(%rsp)\nmovdqa %xmm2,400(%rsp)\nmovdqa %xmm13,%xmm1\npaddd %xmm12,%xmm1\nmovdqa %xmm1,%xmm2\npslld $7,%xmm1\npxor  %xmm1,%xmm14\npsrld $25,%xmm2\npxor  %xmm2,%xmm14\nmovdqa %xmm7,%xmm1\npaddd %xmm0,%xmm1\nmovdqa %xmm1,%xmm2\npslld $7,%xmm1\npxor  %xmm1,%xmm11\npsrld $25,%xmm2\npxor  %xmm2,%xmm11\nmovdqa %xmm12,%xmm1\npaddd %xmm14,%xmm1\nmovdqa %xmm1,%xmm2\npslld $9,%xmm1\npxor  %xmm1,%xmm15\npsrld $23,%xmm2\npxor  %xmm2,%xmm15\nmovdqa %xmm0,%xmm1\npaddd %xmm11,%xmm1\nmovdqa %xmm1,%xmm2\npslld $9,%xmm1\npxor  %xmm1,%xmm9\npsrld $23,%xmm2\npxor  %xmm2,%xmm9\nmovdqa %xmm14,%xmm1\npaddd %xmm15,%xmm1\nmovdqa %xmm1,%xmm2\npslld $13,%xmm1\npxor  %xmm1,%xmm13\npsrld $19,%xmm2\npxor  %xmm2,%xmm13\nmovdqa %xmm11,%xmm1\npaddd %xmm9,%xmm1\nmovdqa %xmm1,%xmm2\npslld $13,%xmm1\npxor  %xmm1,%xmm7\npsrld $19,%xmm2\npxor  %xmm2,%xmm7\nmovdqa %xmm15,%xmm1\npaddd %xmm13,%xmm1\nmovdqa %xmm1,%xmm2\npslld $18,%xmm1\npxor  %xmm1,%xmm12\npsrld $14,%xmm2\npxor  %xmm2,%xmm12\nmovdqa 384(%rsp),%xmm1\nmovdqa %xmm12,384(%rsp)\nmovdqa %xmm9,%xmm2\npaddd %xmm7,%xmm2\nmovdqa %xmm2,%xmm12\npslld $18,%xmm2\npxor  %xmm2,%xmm0\npsrld $14,%xmm12\npxor  %xmm12,%xmm0\nmovdqa %xmm5,%xmm2\npaddd %xmm1,%xmm2\nmovdqa %xmm2,%xmm12\npslld $7,%xmm2\npxor  %xmm2,%xmm3\npsrld $25,%xmm12\npxor  %xmm12,%xmm3\nmovdqa 400(%rsp),%xmm2\nmovdqa %xmm0,400(%rsp)\nmovdqa %xmm6,%xmm0\npaddd %xmm2,%xmm0\nmovdqa %xmm0,%xmm12\npslld $7,%xmm0\npxor  %xmm0,%xmm4\npsrld $25,%xmm12\npxor  %xmm12,%xmm4\nmovdqa %xmm1,%xmm0\npaddd %xmm3,%xmm0\nmovdqa %xmm0,%xmm12\npslld $9,%xmm0\npxor  %xmm0,%xmm10\npsrld $23,%xmm12\npxor  %xmm12,%xmm10\nmovdqa %xmm2,%xmm0\npaddd %xmm4,%xmm0\nmovdqa %xmm0,%xmm12\npslld $9,%xmm0\npxor  %xmm0,%xmm8\npsrld $23,%xmm12\npxor  %xmm12,%xmm8\nmovdqa %xmm3,%xmm0\npaddd %xmm10,%xmm0\nmovdqa %xmm0,%xmm12\npslld $13,%xmm0\npxor  %xmm0,%xmm5\npsrld $19,%xmm12\npxor  %xmm12,%xmm5\nmovdqa %xmm4,%xmm0\npaddd %xmm8,%xmm0\nmovdqa %xmm0,%xmm12\npslld $13,%xmm0\npxor  %xmm0,%xmm6\npsrld $19,%xmm12\npxor  %xmm12,%xmm6\nmovdqa %xmm10,%xmm0\npaddd %xmm5,%xmm0\nmovdqa %xmm0,%xmm12\npslld $18,%xmm0\npxor  %xmm0,%xmm1\npsrld $14,%xmm12\npxor  %xmm12,%xmm1\nmovdqa 384(%rsp),%xmm0\nmovdqa %xmm1,384(%rsp)\nmovdqa %xmm4,%xmm1\npaddd %xmm0,%xmm1\nmovdqa %xmm1,%xmm12\npslld $7,%xmm1\npxor  %xmm1,%xmm7\npsrld $25,%xmm12\npxor  %xmm12,%xmm7\nmovdqa %xmm8,%xmm1\npaddd %xmm6,%xmm1\nmovdqa %xmm1,%xmm12\npslld $18,%xmm1\npxor  %xmm1,%xmm2\npsrld $14,%xmm12\npxor  %xmm12,%xmm2\nmovdqa 400(%rsp),%xmm12\nmovdqa %xmm2,400(%rsp)\nmovdqa %xmm14,%xmm1\npaddd %xmm12,%xmm1\nmovdqa %xmm1,%xmm2\npslld $7,%xmm1\npxor  %xmm1,%xmm5\npsrld $25,%xmm2\npxor  %xmm2,%xmm5\nmovdqa %xmm0,%xmm1\npaddd %xmm7,%xmm1\nmovdqa %xmm1,%xmm2\npslld $9,%xmm1\npxor  %xmm1,%xmm10\npsrld $23,%xmm2\npxor  %xmm2,%xmm10\nmovdqa %xmm12,%xmm1\npaddd %xmm5,%xmm1\nmovdqa %xmm1,%xmm2\npslld $9,%xmm1\npxor  %xmm1,%xmm8\npsrld $23,%xmm2\npxor  %xmm2,%xmm8\nmovdqa %xmm7,%xmm1\npaddd %xmm10,%xmm1\nmovdqa %xmm1,%xmm2\npslld $13,%xmm1\npxor  %xmm1,%xmm4\npsrld $19,%xmm2\npxor  %xmm2,%xmm4\nmovdqa %xmm5,%xmm1\npaddd %xmm8,%xmm1\nmovdqa %xmm1,%xmm2\npslld $13,%xmm1\npxor  %xmm1,%xmm14\npsrld $19,%xmm2\npxor  %xmm2,%xmm14\nmovdqa %xmm10,%xmm1\npaddd %xmm4,%xmm1\nmovdqa %xmm1,%xmm2\npslld $18,%xmm1\npxor  %xmm1,%xmm0\npsrld $14,%xmm2\npxor  %xmm2,%xmm0\nmovdqa 384(%rsp),%xmm1\nmovdqa %xmm0,384(%rsp)\nmovdqa %xmm8,%xmm0\npaddd %xmm14,%xmm0\nmovdqa %xmm0,%xmm2\npslld $18,%xmm0\npxor  %xmm0,%xmm12\npsrld $14,%xmm2\npxor  %xmm2,%xmm12\nmovdqa %xmm11,%xmm0\npaddd %xmm1,%xmm0\nmovdqa %xmm0,%xmm2\npslld $7,%xmm0\npxor  %xmm0,%xmm6\npsrld $25,%xmm2\npxor  %xmm2,%xmm6\nmovdqa 400(%rsp),%xmm2\nmovdqa %xmm12,400(%rsp)\nmovdqa %xmm3,%xmm0\npaddd %xmm2,%xmm0\nmovdqa %xmm0,%xmm12\npslld $7,%xmm0\npxor  %xmm0,%xmm13\npsrld $25,%xmm12\npxor  %xmm12,%xmm13\nmovdqa %xmm1,%xmm0\npaddd %xmm6,%xmm0\nmovdqa %xmm0,%xmm12\npslld $9,%xmm0\npxor  %xmm0,%xmm15\npsrld $23,%xmm12\npxor  %xmm12,%xmm15\nmovdqa %xmm2,%xmm0\npaddd %xmm13,%xmm0\nmovdqa %xmm0,%xmm12\npslld $9,%xmm0\npxor  %xmm0,%xmm9\npsrld $23,%xmm12\npxor  %xmm12,%xmm9\nmovdqa %xmm6,%xmm0\npaddd %xmm15,%xmm0\nmovdqa %xmm0,%xmm12\npslld $13,%xmm0\npxor  %xmm0,%xmm11\npsrld $19,%xmm12\npxor  %xmm12,%xmm11\nmovdqa %xmm13,%xmm0\npaddd %xmm9,%xmm0\nmovdqa %xmm0,%xmm12\npslld $13,%xmm0\npxor  %xmm0,%xmm3\npsrld $19,%xmm12\npxor  %xmm12,%xmm3\nmovdqa %xmm15,%xmm0\npaddd %xmm11,%xmm0\nmovdqa %xmm0,%xmm12\npslld $18,%xmm0\npxor  %xmm0,%xmm1\npsrld $14,%xmm12\npxor  %xmm12,%xmm1\nmovdqa %xmm9,%xmm0\npaddd %xmm3,%xmm0\nmovdqa %xmm0,%xmm12\npslld $18,%xmm0\npxor  %xmm0,%xmm2\npsrld $14,%xmm12\npxor  %xmm12,%xmm2\nmovdqa 384(%rsp),%xmm12\nmovdqa 400(%rsp),%xmm0\nsub  $2,%rdx\nja ._mainloop1\npaddd 176(%rsp),%xmm12\npaddd 240(%rsp),%xmm7\npaddd 288(%rsp),%xmm10\npaddd 336(%rsp),%xmm4\nmovd   %xmm12,%rdx\nmovd   %xmm7,%rcx\nmovd   %xmm10,%r8\nmovd   %xmm4,%r9\npshufd $0x39,%xmm12,%xmm12\npshufd $0x39,%xmm7,%xmm7\npshufd $0x39,%xmm10,%xmm10\npshufd $0x39,%xmm4,%xmm4\nxorl 0(%rsi),%edx\nxorl 4(%rsi),%ecx\nxorl 8(%rsi),%r8d\nxorl 12(%rsi),%r9d\nmovl   %edx,0(%rdi)\nmovl   %ecx,4(%rdi)\nmovl   %r8d,8(%rdi)\nmovl   %r9d,12(%rdi)\nmovd   %xmm12,%rdx\nmovd   %xmm7,%rcx\nmovd   %xmm10,%r8\nmovd   %xmm4,%r9\npshufd $0x39,%xmm12,%xmm12\npshufd $0x39,%xmm7,%xmm7\npshufd $0x39,%xmm10,%xmm10\npshufd $0x39,%xmm4,%xmm4\nxorl 64(%rsi),%edx\nxorl 68(%rsi),%ecx\nxorl 72(%rsi),%r8d\nxorl 76(%rsi),%r9d\nmovl   %edx,64(%rdi)\nmovl   %ecx,68(%rdi)\nmovl   %r8d,72(%rdi)\nmovl   %r9d,76(%rdi)\nmovd   %xmm12,%rdx\nmovd   %xmm7,%rcx\nmovd   %xmm10,%r8\nmovd   %xmm4,%r9\npshufd $0x39,%xmm12,%xmm12\npshufd $0x39,%xmm7,%xmm7\npshufd $0x39,%xmm10,%xmm10\npshufd $0x39,%xmm4,%xmm4\nxorl 128(%rsi),%edx\nxorl 132(%rsi),%ecx\nxorl 136(%rsi),%r8d\nxorl 140(%rsi),%r9d\nmovl   %edx,128(%rdi)\nmovl   %ecx,132(%rdi)\nmovl   %r8d,136(%rdi)\nmovl   %r9d,140(%rdi)\nmovd   %xmm12,%rdx\nmovd   %xmm7,%rcx\nmovd   %xmm10,%r8\nmovd   %xmm4,%r9\nxorl 192(%rsi),%edx\nxorl 196(%rsi),%ecx\nxorl 200(%rsi),%r8d\nxorl 204(%rsi),%r9d\nmovl   %edx,192(%rdi)\nmovl   %ecx,196(%rdi)\nmovl   %r8d,200(%rdi)\nmovl   %r9d,204(%rdi)\npaddd 304(%rsp),%xmm14\npaddd 128(%rsp),%xmm0\npaddd 192(%rsp),%xmm5\npaddd 256(%rsp),%xmm8\nmovd   %xmm14,%rdx\nmovd   %xmm0,%rcx\nmovd   %xmm5,%r8\nmovd   %xmm8,%r9\npshufd $0x39,%xmm14,%xmm14\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm5,%xmm5\npshufd $0x39,%xmm8,%xmm8\nxorl 16(%rsi),%edx\nxorl 20(%rsi),%ecx\nxorl 24(%rsi),%r8d\nxorl 28(%rsi),%r9d\nmovl   %edx,16(%rdi)\nmovl   %ecx,20(%rdi)\nmovl   %r8d,24(%rdi)\nmovl   %r9d,28(%rdi)\nmovd   %xmm14,%rdx\nmovd   %xmm0,%rcx\nmovd   %xmm5,%r8\nmovd   %xmm8,%r9\npshufd $0x39,%xmm14,%xmm14\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm5,%xmm5\npshufd $0x39,%xmm8,%xmm8\nxorl 80(%rsi),%edx\nxorl 84(%rsi),%ecx\nxorl 88(%rsi),%r8d\nxorl 92(%rsi),%r9d\nmovl   %edx,80(%rdi)\nmovl   %ecx,84(%rdi)\nmovl   %r8d,88(%rdi)\nmovl   %r9d,92(%rdi)\nmovd   %xmm14,%rdx\nmovd   %xmm0,%rcx\nmovd   %xmm5,%r8\nmovd   %xmm8,%r9\npshufd $0x39,%xmm14,%xmm14\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm5,%xmm5\npshufd $0x39,%xmm8,%xmm8\nxorl 144(%rsi),%edx\nxorl 148(%rsi),%ecx\nxorl 152(%rsi),%r8d\nxorl 156(%rsi),%r9d\nmovl   %edx,144(%rdi)\nmovl   %ecx,148(%rdi)\nmovl   %r8d,152(%rdi)\nmovl   %r9d,156(%rdi)\nmovd   %xmm14,%rdx\nmovd   %xmm0,%rcx\nmovd   %xmm5,%r8\nmovd   %xmm8,%r9\nxorl 208(%rsi),%edx\nxorl 212(%rsi),%ecx\nxorl 216(%rsi),%r8d\nxorl 220(%rsi),%r9d\nmovl   %edx,208(%rdi)\nmovl   %ecx,212(%rdi)\nmovl   %r8d,216(%rdi)\nmovl   %r9d,220(%rdi)\npaddd 352(%rsp),%xmm15\npaddd 368(%rsp),%xmm11\npaddd 144(%rsp),%xmm1\npaddd 208(%rsp),%xmm6\nmovd   %xmm15,%rdx\nmovd   %xmm11,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm6,%r9\npshufd $0x39,%xmm15,%xmm15\npshufd $0x39,%xmm11,%xmm11\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm6,%xmm6\nxorl 32(%rsi),%edx\nxorl 36(%rsi),%ecx\nxorl 40(%rsi),%r8d\nxorl 44(%rsi),%r9d\nmovl   %edx,32(%rdi)\nmovl   %ecx,36(%rdi)\nmovl   %r8d,40(%rdi)\nmovl   %r9d,44(%rdi)\nmovd   %xmm15,%rdx\nmovd   %xmm11,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm6,%r9\npshufd $0x39,%xmm15,%xmm15\npshufd $0x39,%xmm11,%xmm11\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm6,%xmm6\nxorl 96(%rsi),%edx\nxorl 100(%rsi),%ecx\nxorl 104(%rsi),%r8d\nxorl 108(%rsi),%r9d\nmovl   %edx,96(%rdi)\nmovl   %ecx,100(%rdi)\nmovl   %r8d,104(%rdi)\nmovl   %r9d,108(%rdi)\nmovd   %xmm15,%rdx\nmovd   %xmm11,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm6,%r9\npshufd $0x39,%xmm15,%xmm15\npshufd $0x39,%xmm11,%xmm11\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm6,%xmm6\nxorl 160(%rsi),%edx\nxorl 164(%rsi),%ecx\nxorl 168(%rsi),%r8d\nxorl 172(%rsi),%r9d\nmovl   %edx,160(%rdi)\nmovl   %ecx,164(%rdi)\nmovl   %r8d,168(%rdi)\nmovl   %r9d,172(%rdi)\nmovd   %xmm15,%rdx\nmovd   %xmm11,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm6,%r9\nxorl 224(%rsi),%edx\nxorl 228(%rsi),%ecx\nxorl 232(%rsi),%r8d\nxorl 236(%rsi),%r9d\nmovl   %edx,224(%rdi)\nmovl   %ecx,228(%rdi)\nmovl   %r8d,232(%rdi)\nmovl   %r9d,236(%rdi)\npaddd 224(%rsp),%xmm13\npaddd 272(%rsp),%xmm9\npaddd 320(%rsp),%xmm3\npaddd 160(%rsp),%xmm2\nmovd   %xmm13,%rdx\nmovd   %xmm9,%rcx\nmovd   %xmm3,%r8\nmovd   %xmm2,%r9\npshufd $0x39,%xmm13,%xmm13\npshufd $0x39,%xmm9,%xmm9\npshufd $0x39,%xmm3,%xmm3\npshufd $0x39,%xmm2,%xmm2\nxorl 48(%rsi),%edx\nxorl 52(%rsi),%ecx\nxorl 56(%rsi),%r8d\nxorl 60(%rsi),%r9d\nmovl   %edx,48(%rdi)\nmovl   %ecx,52(%rdi)\nmovl   %r8d,56(%rdi)\nmovl   %r9d,60(%rdi)\nmovd   %xmm13,%rdx\nmovd   %xmm9,%rcx\nmovd   %xmm3,%r8\nmovd   %xmm2,%r9\npshufd $0x39,%xmm13,%xmm13\npshufd $0x39,%xmm9,%xmm9\npshufd $0x39,%xmm3,%xmm3\npshufd $0x39,%xmm2,%xmm2\nxorl 112(%rsi),%edx\nxorl 116(%rsi),%ecx\nxorl 120(%rsi),%r8d\nxorl 124(%rsi),%r9d\nmovl   %edx,112(%rdi)\nmovl   %ecx,116(%rdi)\nmovl   %r8d,120(%rdi)\nmovl   %r9d,124(%rdi)\nmovd   %xmm13,%rdx\nmovd   %xmm9,%rcx\nmovd   %xmm3,%r8\nmovd   %xmm2,%r9\npshufd $0x39,%xmm13,%xmm13\npshufd $0x39,%xmm9,%xmm9\npshufd $0x39,%xmm3,%xmm3\npshufd $0x39,%xmm2,%xmm2\nxorl 176(%rsi),%edx\nxorl 180(%rsi),%ecx\nxorl 184(%rsi),%r8d\nxorl 188(%rsi),%r9d\nmovl   %edx,176(%rdi)\nmovl   %ecx,180(%rdi)\nmovl   %r8d,184(%rdi)\nmovl   %r9d,188(%rdi)\nmovd   %xmm13,%rdx\nmovd   %xmm9,%rcx\nmovd   %xmm3,%r8\nmovd   %xmm2,%r9\nxorl 240(%rsi),%edx\nxorl 244(%rsi),%ecx\nxorl 248(%rsi),%r8d\nxorl 252(%rsi),%r9d\nmovl   %edx,240(%rdi)\nmovl   %ecx,244(%rdi)\nmovl   %r8d,248(%rdi)\nmovl   %r9d,252(%rdi)\nmovq 480(%rsp),%r9\nsub  $256,%r9\nadd  $256,%rsi\nadd  $256,%rdi\ncmp  $256,%r9\njae ._bytesatleast256\ncmp  $0,%r9\njbe ._done\n\n._bytesbetween1and255:\ncmp  $64,%r9\njae ._nocopy\nmov  %rdi,%rdx\nleaq 0(%rsp),%rdi\nmov  %r9,%rcx\nrep movsb\nleaq 0(%rsp),%rdi\nleaq 0(%rsp),%rsi\n\n._nocopy:\nmovq %r9,480(%rsp)\nmovdqa 112(%rsp),%xmm0\nmovdqa 64(%rsp),%xmm1\nmovdqa 80(%rsp),%xmm2\nmovdqa 96(%rsp),%xmm3\nmovdqa %xmm1,%xmm4\nmov  $20,%rcx\n\n._mainloop2:\npaddd %xmm0,%xmm4\nmovdqa %xmm0,%xmm5\nmovdqa %xmm4,%xmm6\npslld $7,%xmm4\npsrld $25,%xmm6\npxor  %xmm4,%xmm3\npxor  %xmm6,%xmm3\npaddd %xmm3,%xmm5\nmovdqa %xmm3,%xmm4\nmovdqa %xmm5,%xmm6\npslld $9,%xmm5\npsrld $23,%xmm6\npxor  %xmm5,%xmm2\npshufd $0x93,%xmm3,%xmm3\npxor  %xmm6,%xmm2\npaddd %xmm2,%xmm4\nmovdqa %xmm2,%xmm5\nmovdqa %xmm4,%xmm6\npslld $13,%xmm4\npsrld $19,%xmm6\npxor  %xmm4,%xmm1\npshufd $0x4e,%xmm2,%xmm2\npxor  %xmm6,%xmm1\npaddd %xmm1,%xmm5\nmovdqa %xmm3,%xmm4\nmovdqa %xmm5,%xmm6\npslld $18,%xmm5\npsrld $14,%xmm6\npxor  %xmm5,%xmm0\npshufd $0x39,%xmm1,%xmm1\npxor  %xmm6,%xmm0\npaddd %xmm0,%xmm4\nmovdqa %xmm0,%xmm5\nmovdqa %xmm4,%xmm6\npslld $7,%xmm4\npsrld $25,%xmm6\npxor  %xmm4,%xmm1\npxor  %xmm6,%xmm1\npaddd %xmm1,%xmm5\nmovdqa %xmm1,%xmm4\nmovdqa %xmm5,%xmm6\npslld $9,%xmm5\npsrld $23,%xmm6\npxor  %xmm5,%xmm2\npshufd $0x93,%xmm1,%xmm1\npxor  %xmm6,%xmm2\npaddd %xmm2,%xmm4\nmovdqa %xmm2,%xmm5\nmovdqa %xmm4,%xmm6\npslld $13,%xmm4\npsrld $19,%xmm6\npxor  %xmm4,%xmm3\npshufd $0x4e,%xmm2,%xmm2\npxor  %xmm6,%xmm3\npaddd %xmm3,%xmm5\nmovdqa %xmm1,%xmm4\nmovdqa %xmm5,%xmm6\npslld $18,%xmm5\npsrld $14,%xmm6\npxor  %xmm5,%xmm0\npshufd $0x39,%xmm3,%xmm3\npxor  %xmm6,%xmm0\npaddd %xmm0,%xmm4\nmovdqa %xmm0,%xmm5\nmovdqa %xmm4,%xmm6\npslld $7,%xmm4\npsrld $25,%xmm6\npxor  %xmm4,%xmm3\npxor  %xmm6,%xmm3\npaddd %xmm3,%xmm5\nmovdqa %xmm3,%xmm4\nmovdqa %xmm5,%xmm6\npslld $9,%xmm5\npsrld $23,%xmm6\npxor  %xmm5,%xmm2\npshufd $0x93,%xmm3,%xmm3\npxor  %xmm6,%xmm2\npaddd %xmm2,%xmm4\nmovdqa %xmm2,%xmm5\nmovdqa %xmm4,%xmm6\npslld $13,%xmm4\npsrld $19,%xmm6\npxor  %xmm4,%xmm1\npshufd $0x4e,%xmm2,%xmm2\npxor  %xmm6,%xmm1\npaddd %xmm1,%xmm5\nmovdqa %xmm3,%xmm4\nmovdqa %xmm5,%xmm6\npslld $18,%xmm5\npsrld $14,%xmm6\npxor  %xmm5,%xmm0\npshufd $0x39,%xmm1,%xmm1\npxor  %xmm6,%xmm0\npaddd %xmm0,%xmm4\nmovdqa %xmm0,%xmm5\nmovdqa %xmm4,%xmm6\npslld $7,%xmm4\npsrld $25,%xmm6\npxor  %xmm4,%xmm1\npxor  %xmm6,%xmm1\npaddd %xmm1,%xmm5\nmovdqa %xmm1,%xmm4\nmovdqa %xmm5,%xmm6\npslld $9,%xmm5\npsrld $23,%xmm6\npxor  %xmm5,%xmm2\npshufd $0x93,%xmm1,%xmm1\npxor  %xmm6,%xmm2\npaddd %xmm2,%xmm4\nmovdqa %xmm2,%xmm5\nmovdqa %xmm4,%xmm6\npslld $13,%xmm4\npsrld $19,%xmm6\npxor  %xmm4,%xmm3\npshufd $0x4e,%xmm2,%xmm2\npxor  %xmm6,%xmm3\nsub  $4,%rcx\npaddd %xmm3,%xmm5\nmovdqa %xmm1,%xmm4\nmovdqa %xmm5,%xmm6\npslld $18,%xmm5\npxor   %xmm7,%xmm7\npsrld $14,%xmm6\npxor  %xmm5,%xmm0\npshufd $0x39,%xmm3,%xmm3\npxor  %xmm6,%xmm0\nja ._mainloop2\npaddd 112(%rsp),%xmm0\npaddd 64(%rsp),%xmm1\npaddd 80(%rsp),%xmm2\npaddd 96(%rsp),%xmm3\nmovd   %xmm0,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm2,%r9\nmovd   %xmm3,%rax\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm2,%xmm2\npshufd $0x39,%xmm3,%xmm3\nxorl 0(%rsi),%ecx\nxorl 48(%rsi),%r8d\nxorl 32(%rsi),%r9d\nxorl 16(%rsi),%eax\nmovl   %ecx,0(%rdi)\nmovl   %r8d,48(%rdi)\nmovl   %r9d,32(%rdi)\nmovl   %eax,16(%rdi)\nmovd   %xmm0,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm2,%r9\nmovd   %xmm3,%rax\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm2,%xmm2\npshufd $0x39,%xmm3,%xmm3\nxorl 20(%rsi),%ecx\nxorl 4(%rsi),%r8d\nxorl 52(%rsi),%r9d\nxorl 36(%rsi),%eax\nmovl   %ecx,20(%rdi)\nmovl   %r8d,4(%rdi)\nmovl   %r9d,52(%rdi)\nmovl   %eax,36(%rdi)\nmovd   %xmm0,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm2,%r9\nmovd   %xmm3,%rax\npshufd $0x39,%xmm0,%xmm0\npshufd $0x39,%xmm1,%xmm1\npshufd $0x39,%xmm2,%xmm2\npshufd $0x39,%xmm3,%xmm3\nxorl 40(%rsi),%ecx\nxorl 24(%rsi),%r8d\nxorl 8(%rsi),%r9d\nxorl 56(%rsi),%eax\nmovl   %ecx,40(%rdi)\nmovl   %r8d,24(%rdi)\nmovl   %r9d,8(%rdi)\nmovl   %eax,56(%rdi)\nmovd   %xmm0,%rcx\nmovd   %xmm1,%r8\nmovd   %xmm2,%r9\nmovd   %xmm3,%rax\nxorl 60(%rsi),%ecx\nxorl 44(%rsi),%r8d\nxorl 28(%rsi),%r9d\nxorl 12(%rsi),%eax\nmovl   %ecx,60(%rdi)\nmovl   %r8d,44(%rdi)\nmovl   %r9d,28(%rdi)\nmovl   %eax,12(%rdi)\nmovq 480(%rsp),%r9\nmovq 472(%rsp),%rcx\nadd  $1,%rcx\nmov  %rcx,%r8\nshr  $32,%r8\nmovl %ecx,80(%rsp)\nmovl %r8d,4+96(%rsp)\nmovq %rcx,472(%rsp)\ncmp  $64,%r9\nja ._bytesatleast65\njae ._bytesatleast64\nmov  %rdi,%rsi\nmov  %rdx,%rdi\nmov  %r9,%rcx\nrep movsb\n\n._bytesatleast64:\n._done:\nmovq 416(%rsp),%r11\nmovq 424(%rsp),%r12\nmovq 432(%rsp),%r13\nmovq 440(%rsp),%r14\nmovq 448(%rsp),%r15\nmovq 456(%rsp),%rbx\nmovq 464(%rsp),%rbp\nadd %r11,%rsp\nxor %rax,%rax\nmov %rsi,%rdx\nret\n\n._bytesatleast65:\nsub  $64,%r9\nadd  $64,%rdi\nadd  $64,%rsi\njmp ._bytesbetween1and255\n\n#endif\n\n#if defined(__linux__) && defined(__ELF__)\n.section .note.GNU-stack,\"\",%progbits\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa20/ref/stream_salsa20_ref.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa20.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"utils.h\"\n\n#ifndef HAVE_AMD64_ASM\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa20(\n        unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!clen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) in[i] = 0;\n\n  while (clen >= 64) {\n    crypto_core_salsa20(c,in,kcopy,sigma);\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    clen -= 64;\n    c += 64;\n  }\n\n  if (clen) {\n    crypto_core_salsa20(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) clen;++i) c[i] = block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa20/ref/xor_salsa20_ref.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include <stdint.h>\n\n#include \"crypto_core_salsa20.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"utils.h\"\n\n#ifndef HAVE_AMD64_ASM\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa20_xor_ic(\n        unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n, uint64_t ic,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!mlen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) {\n      in[i] = (unsigned char) (ic & 0xff);\n      ic >>= 8;\n  }\n\n  while (mlen >= 64) {\n    crypto_core_salsa20(block,in,kcopy,sigma);\n    for (i = 0;i < 64;++i) c[i] = m[i] ^ block[i];\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    mlen -= 64;\n    c += 64;\n    m += 64;\n  }\n\n  if (mlen) {\n    crypto_core_salsa20(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) mlen;++i) c[i] = m[i] ^ block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20_api.c",
    "content": "#include \"crypto_stream_salsa20.h\"\n\nsize_t\ncrypto_stream_salsa20_keybytes(void) {\n    return crypto_stream_salsa20_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_salsa20_noncebytes(void) {\n    return crypto_stream_salsa20_NONCEBYTES;\n}\n\nint\ncrypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m,\n                          unsigned long long mlen, const unsigned char *n,\n                          const unsigned char *k)\n{\n    return crypto_stream_salsa20_xor_ic(c, m, mlen, n, 0U, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa2012.h\"\n#include \"crypto_stream_salsa2012.h\"\n#include \"utils.h\"\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa2012(\n        unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!clen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) in[i] = 0;\n\n  while (clen >= 64) {\n    crypto_core_salsa2012(c,in,kcopy,sigma);\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    clen -= 64;\n    c += 64;\n  }\n\n  if (clen) {\n    crypto_core_salsa2012(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) clen;++i) c[i] = block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa2012/ref/xor_salsa2012.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa2012.h\"\n#include \"crypto_stream_salsa2012.h\"\n#include \"utils.h\"\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa2012_xor(\n        unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!mlen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) in[i] = 0;\n\n  while (mlen >= 64) {\n    crypto_core_salsa2012(block,in,kcopy,sigma);\n    for (i = 0;i < 64;++i) c[i] = m[i] ^ block[i];\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    mlen -= 64;\n    c += 64;\n    m += 64;\n  }\n\n  if (mlen) {\n    crypto_core_salsa2012(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) mlen;++i) c[i] = m[i] ^ block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012_api.c",
    "content": "#include \"crypto_stream_salsa2012.h\"\n\nsize_t\ncrypto_stream_salsa2012_keybytes(void) {\n    return crypto_stream_salsa2012_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_salsa2012_noncebytes(void) {\n    return crypto_stream_salsa2012_NONCEBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa208.h\"\n#include \"crypto_stream_salsa208.h\"\n#include \"utils.h\"\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n        'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa208(\n        unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!clen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) in[i] = 0;\n\n  while (clen >= 64) {\n    crypto_core_salsa208(c,in,kcopy,sigma);\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    clen -= 64;\n    c += 64;\n  }\n\n  if (clen) {\n    crypto_core_salsa208(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) clen;++i) c[i] = block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa208/ref/xor_salsa208.c",
    "content": "/*\nversion 20140420\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_salsa208.h\"\n#include \"crypto_stream_salsa208.h\"\n#include \"utils.h\"\n\ntypedef unsigned int uint32;\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_salsa208_xor(\n        unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char in[16];\n  unsigned char block[64];\n  unsigned char kcopy[32];\n  unsigned int i;\n  unsigned int u;\n\n  if (!mlen) return 0;\n\n  for (i = 0;i < 32;++i) kcopy[i] = k[i];\n  for (i = 0;i < 8;++i) in[i] = n[i];\n  for (i = 8;i < 16;++i) in[i] = 0;\n\n  while (mlen >= 64) {\n    crypto_core_salsa208(block,in,kcopy,sigma);\n    for (i = 0;i < 64;++i) c[i] = m[i] ^ block[i];\n\n    u = 1;\n    for (i = 8;i < 16;++i) {\n      u += (unsigned int) in[i];\n      in[i] = u;\n      u >>= 8;\n    }\n\n    mlen -= 64;\n    c += 64;\n    m += 64;\n  }\n\n  if (mlen) {\n    crypto_core_salsa208(block,in,kcopy,sigma);\n    for (i = 0;i < (unsigned int) mlen;++i) c[i] = m[i] ^ block[i];\n  }\n  sodium_memzero(block, sizeof block);\n  sodium_memzero(kcopy, sizeof kcopy);\n\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208_api.c",
    "content": "#include \"crypto_stream_salsa208.h\"\n\nsize_t\ncrypto_stream_salsa208_keybytes(void) {\n    return crypto_stream_salsa208_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_salsa208_noncebytes(void) {\n    return crypto_stream_salsa208_NONCEBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/xsalsa20/ref/stream_xsalsa20.c",
    "content": "/*\nversion 20080914\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_hsalsa20.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"crypto_stream_xsalsa20.h\"\n#include \"utils.h\"\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_xsalsa20(\n        unsigned char *c,unsigned long long clen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  unsigned char subkey[32];\n  int ret;\n  crypto_core_hsalsa20(subkey,n,k,sigma);\n  ret = crypto_stream_salsa20(c,clen,n + 16,subkey);\n  sodium_memzero(subkey, sizeof subkey);\n  return ret;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/xsalsa20/ref/xor_xsalsa20.c",
    "content": "/*\nversion 20080913\nD. J. Bernstein\nPublic domain.\n*/\n\n#include \"crypto_core_hsalsa20.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"crypto_stream_xsalsa20.h\"\n#include \"utils.h\"\n\nstatic const unsigned char sigma[16] = {\n    'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'\n};\n\nint crypto_stream_xsalsa20_xor_ic(\n        unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,uint64_t ic,\n  const unsigned char *k\n)\n{\n  unsigned char subkey[32];\n  int ret;\n  crypto_core_hsalsa20(subkey,n,k,sigma);\n  ret = crypto_stream_salsa20_xor_ic(c,m,mlen,n + 16,ic,subkey);\n  sodium_memzero(subkey, sizeof subkey);\n  return ret;\n}\n\nint crypto_stream_xsalsa20_xor(\n        unsigned char *c,\n  const unsigned char *m,unsigned long long mlen,\n  const unsigned char *n,\n  const unsigned char *k\n)\n{\n  return crypto_stream_xsalsa20_xor_ic(c, m, mlen, n, 0ULL, k);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20_api.c",
    "content": "#include \"crypto_stream_xsalsa20.h\"\n\nsize_t\ncrypto_stream_xsalsa20_keybytes(void) {\n    return crypto_stream_xsalsa20_KEYBYTES;\n}\n\nsize_t\ncrypto_stream_xsalsa20_noncebytes(void) {\n    return crypto_stream_xsalsa20_NONCEBYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/16/ref/verify_16.c",
    "content": "\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"crypto_verify_16.h\"\n\nint\ncrypto_verify_16(const unsigned char *x, const unsigned char *y)\n{\n    uint_fast16_t d = 0U;\n    int           i;\n\n    for (i = 0; i < 16; i++) {\n        d |= x[i] ^ y[i];\n    }\n    return (1 & ((d - 1) >> 8)) - 1;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/16/verify_16_api.c",
    "content": "#include \"crypto_verify_16.h\"\n\nsize_t\ncrypto_verify_16_bytes(void) {\n    return crypto_verify_16_BYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/32/ref/verify_32.c",
    "content": "\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"crypto_verify_32.h\"\n\nint\ncrypto_verify_32(const unsigned char *x, const unsigned char *y)\n{\n    uint_fast16_t d = 0U;\n    int           i;\n\n    for (i = 0; i < 32; i++) {\n        d |= x[i] ^ y[i];\n    }\n    return (1 & ((d - 1) >> 8)) - 1;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/32/verify_32_api.c",
    "content": "#include \"crypto_verify_32.h\"\n\nsize_t\ncrypto_verify_32_bytes(void) {\n    return crypto_verify_32_BYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/64/ref/verify_64.c",
    "content": "\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"crypto_verify_64.h\"\n\nint\ncrypto_verify_64(const unsigned char *x, const unsigned char *y)\n{\n    uint_fast16_t d = 0U;\n    int           i;\n\n    for (i = 0; i < 64; i++) {\n        d |= x[i] ^ y[i];\n    }\n    return (1 & ((d - 1) >> 8)) - 1;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/crypto_verify/64/verify_64_api.c",
    "content": "#include \"crypto_verify_64.h\"\n\nsize_t\ncrypto_verify_64_bytes(void) {\n    return crypto_verify_64_BYTES;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/Makefile.am",
    "content": "\nSODIUM_EXPORT = \\\n\tsodium.h \\\n\tsodium/core.h \\\n\tsodium/crypto_aead_aes256gcm.h \\\n\tsodium/crypto_aead_chacha20poly1305.h \\\n\tsodium/crypto_auth.h \\\n\tsodium/crypto_auth_hmacsha256.h \\\n\tsodium/crypto_auth_hmacsha512.h \\\n\tsodium/crypto_auth_hmacsha512256.h \\\n\tsodium/crypto_box.h \\\n\tsodium/crypto_box_curve25519xsalsa20poly1305.h \\\n\tsodium/crypto_core_hsalsa20.h \\\n\tsodium/crypto_core_salsa20.h \\\n\tsodium/crypto_core_salsa2012.h \\\n\tsodium/crypto_core_salsa208.h \\\n\tsodium/crypto_generichash.h \\\n\tsodium/crypto_generichash_blake2b.h \\\n\tsodium/crypto_hash.h \\\n\tsodium/crypto_hash_sha256.h \\\n\tsodium/crypto_hash_sha512.h \\\n\tsodium/crypto_onetimeauth.h \\\n\tsodium/crypto_onetimeauth_poly1305.h \\\n\tsodium/crypto_pwhash_scryptsalsa208sha256.h \\\n\tsodium/crypto_scalarmult.h \\\n\tsodium/crypto_scalarmult_curve25519.h \\\n\tsodium/crypto_secretbox.h \\\n\tsodium/crypto_secretbox_xsalsa20poly1305.h \\\n\tsodium/crypto_shorthash.h \\\n\tsodium/crypto_shorthash_siphash24.h \\\n\tsodium/crypto_sign.h \\\n\tsodium/crypto_sign_ed25519.h \\\n\tsodium/crypto_sign_edwards25519sha512batch.h \\\n\tsodium/crypto_stream.h \\\n\tsodium/crypto_stream_aes128ctr.h \\\n\tsodium/crypto_stream_chacha20.h \\\n\tsodium/crypto_stream_salsa20.h \\\n\tsodium/crypto_stream_salsa2012.h \\\n\tsodium/crypto_stream_salsa208.h \\\n\tsodium/crypto_stream_xsalsa20.h \\\n\tsodium/crypto_int32.h \\\n\tsodium/crypto_int64.h \\\n\tsodium/crypto_uint16.h \\\n\tsodium/crypto_uint32.h \\\n\tsodium/crypto_uint64.h \\\n\tsodium/crypto_uint8.h \\\n\tsodium/crypto_verify_16.h \\\n\tsodium/crypto_verify_32.h \\\n\tsodium/crypto_verify_64.h \\\n\tsodium/export.h \\\n\tsodium/randombytes.h \\\n\tsodium/randombytes_salsa20_random.h \\\n\tsodium/randombytes_sysrandom.h \\\n\tsodium/runtime.h \\\n\tsodium/utils.h\n\nif NATIVECLIENT\nSODIUM_EXPORT += \\\n\tsodium/randombytes_nativeclient.h\nendif\n\nEXTRA_SRC = $(SODIUM_EXPORT) \\\n\tsodium/version.h.in\n\nnoinst_HEADERS = $(SODIUM_EXPORT) \\\n\tsodium/version.h\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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@\n@NATIVECLIENT_TRUE@am__append_1 = \\\n@NATIVECLIENT_TRUE@\tsodium/randombytes_nativeclient.h\n\nsubdir = src/libsodium/include\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(am__noinst_HEADERS_DIST)\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_compile_flag.m4 \\\n\t$(top_srcdir)/m4/ax_check_define.m4 \\\n\t$(top_srcdir)/m4/ax_check_link_flag.m4 \\\n\t$(top_srcdir)/m4/ld-output-def.m4 $(top_srcdir)/m4/libtool.m4 \\\n\t$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \\\n\t$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \\\n\t$(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nSOURCES =\nDIST_SOURCES =\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__noinst_HEADERS_DIST = sodium.h sodium/core.h \\\n\tsodium/crypto_aead_aes256gcm.h \\\n\tsodium/crypto_aead_chacha20poly1305.h sodium/crypto_auth.h \\\n\tsodium/crypto_auth_hmacsha256.h \\\n\tsodium/crypto_auth_hmacsha512.h \\\n\tsodium/crypto_auth_hmacsha512256.h sodium/crypto_box.h \\\n\tsodium/crypto_box_curve25519xsalsa20poly1305.h \\\n\tsodium/crypto_core_hsalsa20.h sodium/crypto_core_salsa20.h \\\n\tsodium/crypto_core_salsa2012.h sodium/crypto_core_salsa208.h \\\n\tsodium/crypto_generichash.h \\\n\tsodium/crypto_generichash_blake2b.h sodium/crypto_hash.h \\\n\tsodium/crypto_hash_sha256.h sodium/crypto_hash_sha512.h \\\n\tsodium/crypto_onetimeauth.h \\\n\tsodium/crypto_onetimeauth_poly1305.h \\\n\tsodium/crypto_pwhash_scryptsalsa208sha256.h \\\n\tsodium/crypto_scalarmult.h \\\n\tsodium/crypto_scalarmult_curve25519.h \\\n\tsodium/crypto_secretbox.h \\\n\tsodium/crypto_secretbox_xsalsa20poly1305.h \\\n\tsodium/crypto_shorthash.h sodium/crypto_shorthash_siphash24.h \\\n\tsodium/crypto_sign.h sodium/crypto_sign_ed25519.h \\\n\tsodium/crypto_sign_edwards25519sha512batch.h \\\n\tsodium/crypto_stream.h sodium/crypto_stream_aes128ctr.h \\\n\tsodium/crypto_stream_chacha20.h sodium/crypto_stream_salsa20.h \\\n\tsodium/crypto_stream_salsa2012.h \\\n\tsodium/crypto_stream_salsa208.h \\\n\tsodium/crypto_stream_xsalsa20.h sodium/crypto_int32.h \\\n\tsodium/crypto_int64.h sodium/crypto_uint16.h \\\n\tsodium/crypto_uint32.h sodium/crypto_uint64.h \\\n\tsodium/crypto_uint8.h sodium/crypto_verify_16.h \\\n\tsodium/crypto_verify_32.h sodium/crypto_verify_64.h \\\n\tsodium/export.h sodium/randombytes.h \\\n\tsodium/randombytes_salsa20_random.h \\\n\tsodium/randombytes_sysrandom.h sodium/runtime.h sodium/utils.h \\\n\tsodium/randombytes_nativeclient.h sodium/version.h\nHEADERS = $(noinst_HEADERS)\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nAS = @AS@\nAUTOCONF = @AUTOCONF@\nAUTOHEADER = @AUTOHEADER@\nAUTOMAKE = @AUTOMAKE@\nAWK = @AWK@\nCC = @CC@\nCCAS = @CCAS@\nCCASDEPMODE = @CCASDEPMODE@\nCCASFLAGS = @CCASFLAGS@\nCCDEPMODE = @CCDEPMODE@\nCFLAGS = @CFLAGS@\nCFLAGS_AESNI = @CFLAGS_AESNI@\nCFLAGS_MMX = @CFLAGS_MMX@\nCFLAGS_PCLMUL = @CFLAGS_PCLMUL@\nCFLAGS_SSE2 = @CFLAGS_SSE2@\nCFLAGS_SSE3 = @CFLAGS_SSE3@\nCFLAGS_SSE41 = @CFLAGS_SSE41@\nCFLAGS_SSSE3 = @CFLAGS_SSSE3@\nCPP = @CPP@\nCPPFLAGS = @CPPFLAGS@\nCWFLAGS = @CWFLAGS@\nCYGPATH_W = @CYGPATH_W@\nDEFS = @DEFS@\nDEPDIR = @DEPDIR@\nDLLTOOL = @DLLTOOL@\nDLL_VERSION = @DLL_VERSION@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nHAVE_AMD64_ASM_V = @HAVE_AMD64_ASM_V@\nHAVE_AVX_ASM_V = @HAVE_AVX_ASM_V@\nHAVE_CPUID_V = @HAVE_CPUID_V@\nHAVE_TI_MODE_V = @HAVE_TI_MODE_V@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nISODATE = @ISODATE@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIBTOOL_DEPS = @LIBTOOL_DEPS@\nLIBTOOL_EXTRA_FLAGS = @LIBTOOL_EXTRA_FLAGS@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nRANLIB = @RANLIB@\nSAFECODE_HOME = @SAFECODE_HOME@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSODIUM_LIBRARY_VERSION = @SODIUM_LIBRARY_VERSION@\nSODIUM_LIBRARY_VERSION_MAJOR = @SODIUM_LIBRARY_VERSION_MAJOR@\nSODIUM_LIBRARY_VERSION_MINOR = @SODIUM_LIBRARY_VERSION_MINOR@\nSTRIP = @STRIP@\nTEST_LDFLAGS = @TEST_LDFLAGS@\nVERSION = @VERSION@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\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@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nSODIUM_EXPORT = sodium.h sodium/core.h sodium/crypto_aead_aes256gcm.h \\\n\tsodium/crypto_aead_chacha20poly1305.h sodium/crypto_auth.h \\\n\tsodium/crypto_auth_hmacsha256.h \\\n\tsodium/crypto_auth_hmacsha512.h \\\n\tsodium/crypto_auth_hmacsha512256.h sodium/crypto_box.h \\\n\tsodium/crypto_box_curve25519xsalsa20poly1305.h \\\n\tsodium/crypto_core_hsalsa20.h sodium/crypto_core_salsa20.h \\\n\tsodium/crypto_core_salsa2012.h sodium/crypto_core_salsa208.h \\\n\tsodium/crypto_generichash.h \\\n\tsodium/crypto_generichash_blake2b.h sodium/crypto_hash.h \\\n\tsodium/crypto_hash_sha256.h sodium/crypto_hash_sha512.h \\\n\tsodium/crypto_onetimeauth.h \\\n\tsodium/crypto_onetimeauth_poly1305.h \\\n\tsodium/crypto_pwhash_scryptsalsa208sha256.h \\\n\tsodium/crypto_scalarmult.h \\\n\tsodium/crypto_scalarmult_curve25519.h \\\n\tsodium/crypto_secretbox.h \\\n\tsodium/crypto_secretbox_xsalsa20poly1305.h \\\n\tsodium/crypto_shorthash.h sodium/crypto_shorthash_siphash24.h \\\n\tsodium/crypto_sign.h sodium/crypto_sign_ed25519.h \\\n\tsodium/crypto_sign_edwards25519sha512batch.h \\\n\tsodium/crypto_stream.h sodium/crypto_stream_aes128ctr.h \\\n\tsodium/crypto_stream_chacha20.h sodium/crypto_stream_salsa20.h \\\n\tsodium/crypto_stream_salsa2012.h \\\n\tsodium/crypto_stream_salsa208.h \\\n\tsodium/crypto_stream_xsalsa20.h sodium/crypto_int32.h \\\n\tsodium/crypto_int64.h sodium/crypto_uint16.h \\\n\tsodium/crypto_uint32.h sodium/crypto_uint64.h \\\n\tsodium/crypto_uint8.h sodium/crypto_verify_16.h \\\n\tsodium/crypto_verify_32.h sodium/crypto_verify_64.h \\\n\tsodium/export.h sodium/randombytes.h \\\n\tsodium/randombytes_salsa20_random.h \\\n\tsodium/randombytes_sysrandom.h sodium/runtime.h sodium/utils.h \\\n\t$(am__append_1)\nEXTRA_SRC = $(SODIUM_EXPORT) \\\n\tsodium/version.h.in\n\nnoinst_HEADERS = $(SODIUM_EXPORT) \\\n\tsodium/version.h\n\nall: all-am\n\n.SUFFIXES:\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libsodium/include/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign src/libsodium/include/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(HEADERS)\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool mostlyclean-am\n\ndistclean: distclean-am\n\t-rm -f Makefile\ndistclean-am: clean-am distclean-generic distclean-tags\n\ndvi: dvi-am\n\ndvi-am:\n\nhtml: html-am\n\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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 mostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool cscopelist-am ctags ctags-am distclean \\\n\tdistclean-generic distclean-libtool distclean-tags distdir dvi \\\n\tdvi-am html html-am info info-am install install-am \\\n\tinstall-data install-data-am install-dvi install-dvi-am \\\n\tinstall-exec install-exec-am install-html install-html-am \\\n\tinstall-info install-info-am install-man install-pdf \\\n\tinstall-pdf-am install-ps install-ps-am install-strip \\\n\tinstallcheck installcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-generic \\\n\tmostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \\\n\tuninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/core.h",
    "content": "\n#ifndef sodium_core_H\n#define sodium_core_H\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint sodium_init(void)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_aead_aes256gcm.h",
    "content": "#ifndef crypto_aead_aes256gcm_H\n#define crypto_aead_aes256gcm_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_is_available(void);\n\n#define crypto_aead_aes256gcm_KEYBYTES  32U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_keybytes(void);\n\n#define crypto_aead_aes256gcm_NSECBYTES 0U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_nsecbytes(void);\n\n#define crypto_aead_aes256gcm_NPUBBYTES 12U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_npubbytes(void);\n\n#define crypto_aead_aes256gcm_ABYTES    16U\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_abytes(void);\n\ntypedef CRYPTO_ALIGN(16) unsigned char crypto_aead_aes256gcm_state[512];\nSODIUM_EXPORT\nsize_t crypto_aead_aes256gcm_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_encrypt(unsigned char *c,\n                                  unsigned long long *clen_p,\n                                  const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *ad,\n                                  unsigned long long adlen,\n                                  const unsigned char *nsec,\n                                  const unsigned char *npub,\n                                  const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_decrypt(unsigned char *m,\n                                  unsigned long long *mlen_p,\n                                  unsigned char *nsec,\n                                  const unsigned char *c,\n                                  unsigned long long clen,\n                                  const unsigned char *ad,\n                                  unsigned long long adlen,\n                                  const unsigned char *npub,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_beforenm(crypto_aead_aes256gcm_state *ctx_,\n                                   const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_encrypt_afternm(unsigned char *c,\n                                          unsigned long long *clen_p,\n                                          const unsigned char *m,\n                                          unsigned long long mlen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *nsec,\n                                          const unsigned char *npub,\n                                          const crypto_aead_aes256gcm_state *ctx_);\n\nSODIUM_EXPORT\nint crypto_aead_aes256gcm_decrypt_afternm(unsigned char *m,\n                                          unsigned long long *mlen_p,\n                                          unsigned char *nsec,\n                                          const unsigned char *c,\n                                          unsigned long long clen,\n                                          const unsigned char *ad,\n                                          unsigned long long adlen,\n                                          const unsigned char *npub,\n                                          const crypto_aead_aes256gcm_state *ctx_)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_aead_chacha20poly1305.h",
    "content": "#ifndef crypto_aead_chacha20poly1305_H\n#define crypto_aead_chacha20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_aead_chacha20poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_keybytes(void);\n\n#define crypto_aead_chacha20poly1305_NSECBYTES 0U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_nsecbytes(void);\n\n#define crypto_aead_chacha20poly1305_NPUBBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_npubbytes(void);\n\n#define crypto_aead_chacha20poly1305_ABYTES 16U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_abytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_encrypt(unsigned char *c,\n                                         unsigned long long *clen_p,\n                                         const unsigned char *m,\n                                         unsigned long long mlen,\n                                         const unsigned char *ad,\n                                         unsigned long long adlen,\n                                         const unsigned char *nsec,\n                                         const unsigned char *npub,\n                                         const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_decrypt(unsigned char *m,\n                                         unsigned long long *mlen_p,\n                                         unsigned char *nsec,\n                                         const unsigned char *c,\n                                         unsigned long long clen,\n                                         const unsigned char *ad,\n                                         unsigned long long adlen,\n                                         const unsigned char *npub,\n                                         const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#define crypto_aead_chacha20poly1305_IETF_NPUBBYTES 12U\nSODIUM_EXPORT\nsize_t crypto_aead_chacha20poly1305_ietf_npubbytes(void);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_ietf_encrypt(unsigned char *c,\n                                              unsigned long long *clen_p,\n                                              const unsigned char *m,\n                                              unsigned long long mlen,\n                                              const unsigned char *ad,\n                                              unsigned long long adlen,\n                                              const unsigned char *nsec,\n                                              const unsigned char *npub,\n                                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_aead_chacha20poly1305_ietf_decrypt(unsigned char *m,\n                                              unsigned long long *mlen_p,\n                                              unsigned char *nsec,\n                                              const unsigned char *c,\n                                              unsigned long long clen,\n                                              const unsigned char *ad,\n                                              unsigned long long adlen,\n                                              const unsigned char *npub,\n                                              const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_auth.h",
    "content": "#ifndef crypto_auth_H\n#define crypto_auth_H\n\n#include <stddef.h>\n\n#include \"crypto_auth_hmacsha512256.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_BYTES crypto_auth_hmacsha512256_BYTES\nSODIUM_EXPORT\nsize_t  crypto_auth_bytes(void);\n\n#define crypto_auth_KEYBYTES crypto_auth_hmacsha512256_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_auth_keybytes(void);\n\n#define crypto_auth_PRIMITIVE \"hmacsha512256\"\nSODIUM_EXPORT\nconst char *crypto_auth_primitive(void);\n\nSODIUM_EXPORT\nint crypto_auth(unsigned char *out, const unsigned char *in,\n                unsigned long long inlen, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_verify(const unsigned char *h, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha256.h",
    "content": "#ifndef crypto_auth_hmacsha256_H\n#define crypto_auth_hmacsha256_H\n\n#include <stddef.h>\n#include \"crypto_hash_sha256.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_bytes(void);\n\n#define crypto_auth_hmacsha256_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256(unsigned char *out,\n                           const unsigned char *in,\n                           unsigned long long inlen,\n                           const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_verify(const unsigned char *h,\n                                  const unsigned char *in,\n                                  unsigned long long inlen,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef struct crypto_auth_hmacsha256_state {\n    crypto_hash_sha256_state ictx;\n    crypto_hash_sha256_state octx;\n} crypto_auth_hmacsha256_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha256_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_init(crypto_auth_hmacsha256_state *state,\n                                const unsigned char *key,\n                                size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_update(crypto_auth_hmacsha256_state *state,\n                                  const unsigned char *in,\n                                  unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha256_final(crypto_auth_hmacsha256_state *state,\n                                 unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512.h",
    "content": "#ifndef crypto_auth_hmacsha512_H\n#define crypto_auth_hmacsha512_H\n\n#include <stddef.h>\n#include \"crypto_hash_sha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha512_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_bytes(void);\n\n#define crypto_auth_hmacsha512_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512(unsigned char *out,\n                           const unsigned char *in,\n                           unsigned long long inlen,\n                           const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_verify(const unsigned char *h,\n                                  const unsigned char *in,\n                                  unsigned long long inlen,\n                                  const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef struct crypto_auth_hmacsha512_state {\n    crypto_hash_sha512_state ictx;\n    crypto_hash_sha512_state octx;\n} crypto_auth_hmacsha512_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_init(crypto_auth_hmacsha512_state *state,\n                                const unsigned char *key,\n                                size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_update(crypto_auth_hmacsha512_state *state,\n                                  const unsigned char *in,\n                                  unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512_final(crypto_auth_hmacsha512_state *state,\n                                 unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_auth_hmacsha512256.h",
    "content": "#ifndef crypto_auth_hmacsha512256_H\n#define crypto_auth_hmacsha512256_H\n\n#include <stddef.h>\n#include \"crypto_auth_hmacsha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_auth_hmacsha512256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_bytes(void);\n\n#define crypto_auth_hmacsha512256_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256(unsigned char *out, const unsigned char *in,\n                              unsigned long long inlen,const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_verify(const unsigned char *h,\n                                     const unsigned char *in,\n                                     unsigned long long inlen,\n                                     const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* ------------------------------------------------------------------------- */\n\ntypedef crypto_auth_hmacsha512_state crypto_auth_hmacsha512256_state;\nSODIUM_EXPORT\nsize_t crypto_auth_hmacsha512256_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_init(crypto_auth_hmacsha512256_state *state,\n                                   const unsigned char *key,\n                                   size_t keylen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_update(crypto_auth_hmacsha512256_state *state,\n                                     const unsigned char *in,\n                                     unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_auth_hmacsha512256_final(crypto_auth_hmacsha512256_state *state,\n                                    unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_box.h",
    "content": "#ifndef crypto_box_H\n#define crypto_box_H\n\n/*\n * THREAD SAFETY: crypto_box_keypair() is thread-safe,\n * provided that you called sodium_init() once before using any\n * other libsodium function.\n * Other functions are always thread-safe.\n */\n\n#include <stddef.h>\n\n#include \"crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_box_SEEDBYTES crypto_box_curve25519xsalsa20poly1305_SEEDBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_seedbytes(void);\n\n#define crypto_box_PUBLICKEYBYTES crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_publickeybytes(void);\n\n#define crypto_box_SECRETKEYBYTES crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_secretkeybytes(void);\n\n#define crypto_box_NONCEBYTES crypto_box_curve25519xsalsa20poly1305_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_noncebytes(void);\n\n#define crypto_box_MACBYTES crypto_box_curve25519xsalsa20poly1305_MACBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_macbytes(void);\n\n#define crypto_box_PRIMITIVE \"curve25519xsalsa20poly1305\"\nSODIUM_EXPORT\nconst char *crypto_box_primitive(void);\n\nSODIUM_EXPORT\nint crypto_box_seed_keypair(unsigned char *pk, unsigned char *sk,\n                            const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_box_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_box_easy(unsigned char *c, const unsigned char *m,\n                    unsigned long long mlen, const unsigned char *n,\n                    const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open_easy(unsigned char *m, const unsigned char *c,\n                         unsigned long long clen, const unsigned char *n,\n                         const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_detached(unsigned char *c, unsigned char *mac,\n                        const unsigned char *m, unsigned long long mlen,\n                        const unsigned char *n, const unsigned char *pk,\n                        const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open_detached(unsigned char *m, const unsigned char *c,\n                             const unsigned char *mac,\n                             unsigned long long clen,\n                             const unsigned char *n,\n                             const unsigned char *pk,\n                             const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\n/* -- Precomputation interface -- */\n\n#define crypto_box_BEFORENMBYTES crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_beforenmbytes(void);\n\nSODIUM_EXPORT\nint crypto_box_beforenm(unsigned char *k, const unsigned char *pk,\n                        const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_easy_afternm(unsigned char *c, const unsigned char *m,\n                            unsigned long long mlen, const unsigned char *n,\n                            const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_easy_afternm(unsigned char *m, const unsigned char *c,\n                                 unsigned long long clen, const unsigned char *n,\n                                 const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_detached_afternm(unsigned char *c, unsigned char *mac,\n                                const unsigned char *m, unsigned long long mlen,\n                                const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_detached_afternm(unsigned char *m, const unsigned char *c,\n                                     const unsigned char *mac,\n                                     unsigned long long clen, const unsigned char *n,\n                                     const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* -- Ephemeral SK interface -- */\n\n#define crypto_box_SEALBYTES (crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES)\nSODIUM_EXPORT\nsize_t crypto_box_sealbytes(void);\n\nSODIUM_EXPORT\nint crypto_box_seal(unsigned char *c, const unsigned char *m,\n                    unsigned long long mlen, const unsigned char *pk);\n\nSODIUM_EXPORT\nint crypto_box_seal_open(unsigned char *m, const unsigned char *c,\n                         unsigned long long clen,\n                         const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\n/* -- NaCl compatibility interface ; Requires padding -- */\n\n#define crypto_box_ZEROBYTES crypto_box_curve25519xsalsa20poly1305_ZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_zerobytes(void);\n\n#define crypto_box_BOXZEROBYTES crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_box_boxzerobytes(void);\n\nSODIUM_EXPORT\nint crypto_box(unsigned char *c, const unsigned char *m,\n               unsigned long long mlen, const unsigned char *n,\n               const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_open(unsigned char *m, const unsigned char *c,\n                    unsigned long long clen, const unsigned char *n,\n                    const unsigned char *pk, const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_afternm(unsigned char *c, const unsigned char *m,\n                       unsigned long long mlen, const unsigned char *n,\n                       const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_open_afternm(unsigned char *m, const unsigned char *c,\n                            unsigned long long clen, const unsigned char *n,\n                            const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_box_curve25519xsalsa20poly1305.h",
    "content": "#ifndef crypto_box_curve25519xsalsa20poly1305_H\n#define crypto_box_curve25519xsalsa20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_box_curve25519xsalsa20poly1305_SEEDBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_seedbytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_publickeybytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_secretkeybytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_beforenmbytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_noncebytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_ZEROBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_zerobytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_boxzerobytes(void);\n\n#define crypto_box_curve25519xsalsa20poly1305_MACBYTES \\\n    (crypto_box_curve25519xsalsa20poly1305_ZEROBYTES - \\\n     crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES)\nSODIUM_EXPORT\nsize_t crypto_box_curve25519xsalsa20poly1305_macbytes(void);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305(unsigned char *c,\n                                          const unsigned char *m,\n                                          unsigned long long mlen,\n                                          const unsigned char *n,\n                                          const unsigned char *pk,\n                                          const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_open(unsigned char *m,\n                                               const unsigned char *c,\n                                               unsigned long long clen,\n                                               const unsigned char *n,\n                                               const unsigned char *pk,\n                                               const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_seed_keypair(unsigned char *pk,\n                                                       unsigned char *sk,\n                                                       const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_keypair(unsigned char *pk,\n                                                  unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_beforenm(unsigned char *k,\n                                                   const unsigned char *pk,\n                                                   const unsigned char *sk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_afternm(unsigned char *c,\n                                                  const unsigned char *m,\n                                                  unsigned long long mlen,\n                                                  const unsigned char *n,\n                                                  const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_box_curve25519xsalsa20poly1305_open_afternm(unsigned char *m,\n                                                       const unsigned char *c,\n                                                       unsigned long long clen,\n                                                       const unsigned char *n,\n                                                       const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_core_hsalsa20.h",
    "content": "#ifndef crypto_core_hsalsa20_H\n#define crypto_core_hsalsa20_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_hsalsa20_OUTPUTBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_outputbytes(void);\n\n#define crypto_core_hsalsa20_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_inputbytes(void);\n\n#define crypto_core_hsalsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_keybytes(void);\n\n#define crypto_core_hsalsa20_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_hsalsa20_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_hsalsa20(unsigned char *out, const unsigned char *in,\n                         const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_core_salsa20.h",
    "content": "#ifndef crypto_core_salsa20_H\n#define crypto_core_salsa20_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa20_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_outputbytes(void);\n\n#define crypto_core_salsa20_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_inputbytes(void);\n\n#define crypto_core_salsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_keybytes(void);\n\n#define crypto_core_salsa20_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa20_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa20(unsigned char *out, const unsigned char *in,\n                        const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_core_salsa2012.h",
    "content": "#ifndef crypto_core_salsa2012_H\n#define crypto_core_salsa2012_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa2012_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_outputbytes(void);\n\n#define crypto_core_salsa2012_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_inputbytes(void);\n\n#define crypto_core_salsa2012_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_keybytes(void);\n\n#define crypto_core_salsa2012_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa2012_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa2012(unsigned char *out, const unsigned char *in,\n                          const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_core_salsa208.h",
    "content": "#ifndef crypto_core_salsa208_H\n#define crypto_core_salsa208_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_core_salsa208_OUTPUTBYTES 64U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_outputbytes(void);\n\n#define crypto_core_salsa208_INPUTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_inputbytes(void);\n\n#define crypto_core_salsa208_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_keybytes(void);\n\n#define crypto_core_salsa208_CONSTBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_core_salsa208_constbytes(void);\n\nSODIUM_EXPORT\nint crypto_core_salsa208(unsigned char *out, const unsigned char *in,\n                         const unsigned char *k, const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_generichash.h",
    "content": "#ifndef crypto_generichash_H\n#define crypto_generichash_H\n\n#include <stddef.h>\n\n#include \"crypto_generichash_blake2b.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_generichash_BYTES_MIN crypto_generichash_blake2b_BYTES_MIN\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes_min(void);\n\n#define crypto_generichash_BYTES_MAX crypto_generichash_blake2b_BYTES_MAX\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes_max(void);\n\n#define crypto_generichash_BYTES crypto_generichash_blake2b_BYTES\nSODIUM_EXPORT\nsize_t  crypto_generichash_bytes(void);\n\n#define crypto_generichash_KEYBYTES_MIN crypto_generichash_blake2b_KEYBYTES_MIN\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes_min(void);\n\n#define crypto_generichash_KEYBYTES_MAX crypto_generichash_blake2b_KEYBYTES_MAX\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes_max(void);\n\n#define crypto_generichash_KEYBYTES crypto_generichash_blake2b_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_generichash_keybytes(void);\n\n#define crypto_generichash_PRIMITIVE \"blake2b\"\nSODIUM_EXPORT\nconst char *crypto_generichash_primitive(void);\n\ntypedef crypto_generichash_blake2b_state crypto_generichash_state;\nSODIUM_EXPORT\nsize_t  crypto_generichash_statebytes(void);\n\nSODIUM_EXPORT\nint crypto_generichash(unsigned char *out, size_t outlen,\n                       const unsigned char *in, unsigned long long inlen,\n                       const unsigned char *key, size_t keylen);\n\nSODIUM_EXPORT\nint crypto_generichash_init(crypto_generichash_state *state,\n                            const unsigned char *key,\n                            const size_t keylen, const size_t outlen);\n\nSODIUM_EXPORT\nint crypto_generichash_update(crypto_generichash_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_generichash_final(crypto_generichash_state *state,\n                             unsigned char *out, const size_t outlen);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_generichash_blake2b.h",
    "content": "#ifndef crypto_generichash_blake2b_H\n#define crypto_generichash_blake2b_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack(1)\n#else\n# pragma pack(push, 1)\n#endif\n\ntypedef CRYPTO_ALIGN(64) struct crypto_generichash_blake2b_state {\n    uint64_t h[8];\n    uint64_t t[2];\n    uint64_t f[2];\n    uint8_t  buf[2 * 128];\n    size_t   buflen;\n    uint8_t  last_node;\n} crypto_generichash_blake2b_state;\n\n#if defined(__IBMC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)\n# pragma pack()\n#else\n# pragma pack(pop)\n#endif\n\n#define crypto_generichash_blake2b_BYTES_MIN     16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes_min(void);\n\n#define crypto_generichash_blake2b_BYTES_MAX     64U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes_max(void);\n\n#define crypto_generichash_blake2b_BYTES         32U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_bytes(void);\n\n#define crypto_generichash_blake2b_KEYBYTES_MIN  16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes_min(void);\n\n#define crypto_generichash_blake2b_KEYBYTES_MAX  64U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes_max(void);\n\n#define crypto_generichash_blake2b_KEYBYTES      32U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_keybytes(void);\n\n#define crypto_generichash_blake2b_SALTBYTES     16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_saltbytes(void);\n\n#define crypto_generichash_blake2b_PERSONALBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_generichash_blake2b_personalbytes(void);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b(unsigned char *out, size_t outlen,\n                               const unsigned char *in,\n                               unsigned long long inlen,\n                               const unsigned char *key, size_t keylen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_salt_personal(unsigned char *out, size_t outlen,\n                                             const unsigned char *in,\n                                             unsigned long long inlen,\n                                             const unsigned char *key,\n                                             size_t keylen,\n                                             const unsigned char *salt,\n                                             const unsigned char *personal);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_init(crypto_generichash_blake2b_state *state,\n                                    const unsigned char *key,\n                                    const size_t keylen, const size_t outlen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_init_salt_personal(crypto_generichash_blake2b_state *state,\n                                                  const unsigned char *key,\n                                                  const size_t keylen, const size_t outlen,\n                                                  const unsigned char *salt,\n                                                  const unsigned char *personal);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_update(crypto_generichash_blake2b_state *state,\n                                      const unsigned char *in,\n                                      unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_generichash_blake2b_final(crypto_generichash_blake2b_state *state,\n                                     unsigned char *out,\n                                     const size_t outlen);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_generichash_blake2b_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_hash.h",
    "content": "#ifndef crypto_hash_H\n#define crypto_hash_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA512 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA512, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n\n#include \"crypto_hash_sha512.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_hash_BYTES crypto_hash_sha512_BYTES\nSODIUM_EXPORT\nsize_t crypto_hash_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash(unsigned char *out, const unsigned char *in,\n                unsigned long long inlen);\n\n#define crypto_hash_PRIMITIVE \"sha512\"\nSODIUM_EXPORT\nconst char *crypto_hash_primitive(void)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_hash_sha256.h",
    "content": "#ifndef crypto_hash_sha256_H\n#define crypto_hash_sha256_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA256 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA256, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct crypto_hash_sha256_state {\n    uint32_t      state[8];\n    uint64_t      count;\n    unsigned char buf[64];\n} crypto_hash_sha256_state;\nSODIUM_EXPORT\nsize_t crypto_hash_sha256_statebytes(void);\n\n#define crypto_hash_sha256_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_hash_sha256_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash_sha256(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_init(crypto_hash_sha256_state *state);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_update(crypto_hash_sha256_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha256_final(crypto_hash_sha256_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_hash_sha512.h",
    "content": "#ifndef crypto_hash_sha512_H\n#define crypto_hash_sha512_H\n\n/*\n * WARNING: Unless you absolutely need to use SHA512 for interoperatibility,\n * purposes, you might want to consider crypto_generichash() instead.\n * Unlike SHA512, crypto_generichash() is not vulnerable to length\n * extension attacks.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct crypto_hash_sha512_state {\n    uint64_t      state[8];\n    uint64_t      count[2];\n    unsigned char buf[128];\n} crypto_hash_sha512_state;\nSODIUM_EXPORT\nsize_t crypto_hash_sha512_statebytes(void);\n\n#define crypto_hash_sha512_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_hash_sha512_bytes(void);\n\nSODIUM_EXPORT\nint crypto_hash_sha512(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_init(crypto_hash_sha512_state *state);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_update(crypto_hash_sha512_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_hash_sha512_final(crypto_hash_sha512_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_int32.h",
    "content": "#ifndef crypto_int32_H\n#define crypto_int32_H\n\n#include <stdint.h>\n\ntypedef int32_t crypto_int32;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_int64.h",
    "content": "#ifndef crypto_int64_H\n#define crypto_int64_H\n\n#include <stdint.h>\n\ntypedef int64_t crypto_int64;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_onetimeauth.h",
    "content": "#ifndef crypto_onetimeauth_H\n#define crypto_onetimeauth_H\n\n#include <stddef.h>\n\n#include \"crypto_onetimeauth_poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef crypto_onetimeauth_poly1305_state crypto_onetimeauth_state;\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_statebytes(void);\n\n#define crypto_onetimeauth_BYTES crypto_onetimeauth_poly1305_BYTES\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_bytes(void);\n\n#define crypto_onetimeauth_KEYBYTES crypto_onetimeauth_poly1305_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_onetimeauth_keybytes(void);\n\n#define crypto_onetimeauth_PRIMITIVE \"poly1305\"\nSODIUM_EXPORT\nconst char *crypto_onetimeauth_primitive(void);\n\nSODIUM_EXPORT\nint crypto_onetimeauth(unsigned char *out, const unsigned char *in,\n                       unsigned long long inlen, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_verify(const unsigned char *h, const unsigned char *in,\n                              unsigned long long inlen, const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_onetimeauth_init(crypto_onetimeauth_state *state,\n                            const unsigned char *key);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_update(crypto_onetimeauth_state *state,\n                              const unsigned char *in,\n                              unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_final(crypto_onetimeauth_state *state,\n                             unsigned char *out);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_onetimeauth_poly1305.h",
    "content": "#ifndef crypto_onetimeauth_poly1305_H\n#define crypto_onetimeauth_poly1305_H\n\n#include <stdlib.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#include <sys/types.h>\n\n#include <stdint.h>\n#include <stdio.h>\n\ntypedef CRYPTO_ALIGN(16) struct crypto_onetimeauth_poly1305_state {\n    unsigned char opaque[256];\n} crypto_onetimeauth_poly1305_state;\n\n#define crypto_onetimeauth_poly1305_BYTES 16U\nSODIUM_EXPORT\nsize_t crypto_onetimeauth_poly1305_bytes(void);\n\n#define crypto_onetimeauth_poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_onetimeauth_poly1305_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305(unsigned char *out,\n                                const unsigned char *in,\n                                unsigned long long inlen,\n                                const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_verify(const unsigned char *h,\n                                       const unsigned char *in,\n                                       unsigned long long inlen,\n                                       const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_init(crypto_onetimeauth_poly1305_state *state,\n                                     const unsigned char *key);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_update(crypto_onetimeauth_poly1305_state *state,\n                                       const unsigned char *in,\n                                       unsigned long long inlen);\n\nSODIUM_EXPORT\nint crypto_onetimeauth_poly1305_final(crypto_onetimeauth_poly1305_state *state,\n                                      unsigned char *out);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_onetimeauth_poly1305_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_pwhash_scryptsalsa208sha256.h",
    "content": "#ifndef crypto_pwhash_scryptsalsa208sha256_H\n#define crypto_pwhash_scryptsalsa208sha256_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_pwhash_scryptsalsa208sha256_SALTBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_saltbytes(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_STRBYTES 102U\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_strbytes(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_STRPREFIX \"$7$\"\nSODIUM_EXPORT\nconst char *crypto_pwhash_scryptsalsa208sha256_strprefix(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_INTERACTIVE 524288ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_opslimit_interactive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_INTERACTIVE 16777216ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_memlimit_interactive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE 33554432ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive(void);\n\n#define crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE 1073741824ULL\nSODIUM_EXPORT\nsize_t crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive(void);\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256(unsigned char * const out,\n                                       unsigned long long outlen,\n                                       const char * const passwd,\n                                       unsigned long long passwdlen,\n                                       const unsigned char * const salt,\n                                       unsigned long long opslimit,\n                                       size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_str(char out[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                           const char * const passwd,\n                                           unsigned long long passwdlen,\n                                           unsigned long long opslimit,\n                                           size_t memlimit)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_str_verify(const char str[crypto_pwhash_scryptsalsa208sha256_STRBYTES],\n                                                  const char * const passwd,\n                                                  unsigned long long passwdlen)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_pwhash_scryptsalsa208sha256_ll(const uint8_t * passwd, size_t passwdlen,\n                                          const uint8_t * salt, size_t saltlen,\n                                          uint64_t N, uint32_t r, uint32_t p,\n                                          uint8_t * buf, size_t buflen)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_scalarmult.h",
    "content": "#ifndef crypto_scalarmult_H\n#define crypto_scalarmult_H\n\n#include <stddef.h>\n\n#include \"crypto_scalarmult_curve25519.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_scalarmult_BYTES crypto_scalarmult_curve25519_BYTES\nSODIUM_EXPORT\nsize_t  crypto_scalarmult_bytes(void);\n\n#define crypto_scalarmult_SCALARBYTES crypto_scalarmult_curve25519_SCALARBYTES\nSODIUM_EXPORT\nsize_t  crypto_scalarmult_scalarbytes(void);\n\n#define crypto_scalarmult_PRIMITIVE \"curve25519\"\nSODIUM_EXPORT\nconst char *crypto_scalarmult_primitive(void);\n\nSODIUM_EXPORT\nint crypto_scalarmult_base(unsigned char *q, const unsigned char *n);\n\nSODIUM_EXPORT\nint crypto_scalarmult(unsigned char *q, const unsigned char *n,\n                      const unsigned char *p)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_scalarmult_curve25519.h",
    "content": "#ifndef crypto_scalarmult_curve25519_H\n#define crypto_scalarmult_curve25519_H\n\n#include <stddef.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_scalarmult_curve25519_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_scalarmult_curve25519_bytes(void);\n\n#define crypto_scalarmult_curve25519_SCALARBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_scalarmult_curve25519_scalarbytes(void);\n\nSODIUM_EXPORT\nint crypto_scalarmult_curve25519(unsigned char *q, const unsigned char *n,\n                                 const unsigned char *p)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_scalarmult_curve25519_base(unsigned char *q, const unsigned char *n);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_scalarmult_curve25519_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_secretbox.h",
    "content": "#ifndef crypto_secretbox_H\n#define crypto_secretbox_H\n\n#include <stddef.h>\n\n#include \"crypto_secretbox_xsalsa20poly1305.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_secretbox_KEYBYTES crypto_secretbox_xsalsa20poly1305_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_keybytes(void);\n\n#define crypto_secretbox_NONCEBYTES crypto_secretbox_xsalsa20poly1305_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_noncebytes(void);\n\n#define crypto_secretbox_MACBYTES crypto_secretbox_xsalsa20poly1305_MACBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_macbytes(void);\n\n#define crypto_secretbox_PRIMITIVE \"xsalsa20poly1305\"\nSODIUM_EXPORT\nconst char *crypto_secretbox_primitive(void);\n\nSODIUM_EXPORT\nint crypto_secretbox_easy(unsigned char *c, const unsigned char *m,\n                          unsigned long long mlen, const unsigned char *n,\n                          const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open_easy(unsigned char *m, const unsigned char *c,\n                               unsigned long long clen, const unsigned char *n,\n                               const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_secretbox_detached(unsigned char *c, unsigned char *mac,\n                              const unsigned char *m,\n                              unsigned long long mlen,\n                              const unsigned char *n,\n                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open_detached(unsigned char *m,\n                                   const unsigned char *c,\n                                   const unsigned char *mac,\n                                   unsigned long long clen,\n                                   const unsigned char *n,\n                                   const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n/* -- NaCl compatibility interface ; Requires padding -- */\n\n#define crypto_secretbox_ZEROBYTES crypto_secretbox_xsalsa20poly1305_ZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_zerobytes(void);\n\n#define crypto_secretbox_BOXZEROBYTES crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES\nSODIUM_EXPORT\nsize_t  crypto_secretbox_boxzerobytes(void);\n\nSODIUM_EXPORT\nint crypto_secretbox(unsigned char *c, const unsigned char *m,\n                     unsigned long long mlen, const unsigned char *n,\n                     const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_open(unsigned char *m, const unsigned char *c,\n                          unsigned long long clen, const unsigned char *n,\n                          const unsigned char *k)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_secretbox_xsalsa20poly1305.h",
    "content": "#ifndef crypto_secretbox_xsalsa20poly1305_H\n#define crypto_secretbox_xsalsa20poly1305_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_secretbox_xsalsa20poly1305_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_keybytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_noncebytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_ZEROBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_zerobytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_boxzerobytes(void);\n\n#define crypto_secretbox_xsalsa20poly1305_MACBYTES \\\n    (crypto_secretbox_xsalsa20poly1305_ZEROBYTES - \\\n     crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES)\nSODIUM_EXPORT\nsize_t crypto_secretbox_xsalsa20poly1305_macbytes(void);\n\nSODIUM_EXPORT\nint crypto_secretbox_xsalsa20poly1305(unsigned char *c,\n                                      const unsigned char *m,\n                                      unsigned long long mlen,\n                                      const unsigned char *n,\n                                      const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_secretbox_xsalsa20poly1305_open(unsigned char *m,\n                                           const unsigned char *c,\n                                           unsigned long long clen,\n                                           const unsigned char *n,\n                                           const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_shorthash.h",
    "content": "#ifndef crypto_shorthash_H\n#define crypto_shorthash_H\n\n#include <stddef.h>\n\n#include \"crypto_shorthash_siphash24.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_shorthash_BYTES crypto_shorthash_siphash24_BYTES\nSODIUM_EXPORT\nsize_t  crypto_shorthash_bytes(void);\n\n#define crypto_shorthash_KEYBYTES crypto_shorthash_siphash24_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_shorthash_keybytes(void);\n\n#define crypto_shorthash_PRIMITIVE \"siphash24\"\nSODIUM_EXPORT\nconst char *crypto_shorthash_primitive(void);\n\nSODIUM_EXPORT\nint crypto_shorthash(unsigned char *out, const unsigned char *in,\n                     unsigned long long inlen, const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_shorthash_siphash24.h",
    "content": "#ifndef crypto_shorthash_siphash24_H\n#define crypto_shorthash_siphash24_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_shorthash_siphash24_BYTES 8U\nSODIUM_EXPORT\nsize_t crypto_shorthash_siphash24_bytes(void);\n\n#define crypto_shorthash_siphash24_KEYBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_shorthash_siphash24_keybytes(void);\n\nSODIUM_EXPORT\nint crypto_shorthash_siphash24(unsigned char *out, const unsigned char *in,\n                               unsigned long long inlen, const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_sign.h",
    "content": "#ifndef crypto_sign_H\n#define crypto_sign_H\n\n/*\n * THREAD SAFETY: crypto_sign_keypair() is thread-safe,\n * provided that you called sodium_init() once before using any\n * other libsodium function.\n * Other functions, including crypto_sign_seed_keypair() are always thread-safe.\n */\n\n#include <stddef.h>\n\n#include \"crypto_sign_ed25519.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_BYTES crypto_sign_ed25519_BYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_bytes(void);\n\n#define crypto_sign_SEEDBYTES crypto_sign_ed25519_SEEDBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_seedbytes(void);\n\n#define crypto_sign_PUBLICKEYBYTES crypto_sign_ed25519_PUBLICKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_publickeybytes(void);\n\n#define crypto_sign_SECRETKEYBYTES crypto_sign_ed25519_SECRETKEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_sign_secretkeybytes(void);\n\n#define crypto_sign_PRIMITIVE \"ed25519\"\nSODIUM_EXPORT\nconst char *crypto_sign_primitive(void);\n\nSODIUM_EXPORT\nint crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk,\n                             const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_sign_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign(unsigned char *sm, unsigned long long *smlen_p,\n                const unsigned char *m, unsigned long long mlen,\n                const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_open(unsigned char *m, unsigned long long *mlen_p,\n                     const unsigned char *sm, unsigned long long smlen,\n                     const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_detached(unsigned char *sig, unsigned long long *siglen_p,\n                         const unsigned char *m, unsigned long long mlen,\n                         const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_verify_detached(const unsigned char *sig,\n                                const unsigned char *m,\n                                unsigned long long mlen,\n                                const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_sign_ed25519.h",
    "content": "#ifndef crypto_sign_ed25519_H\n#define crypto_sign_ed25519_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_ed25519_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_bytes(void);\n\n#define crypto_sign_ed25519_SEEDBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_seedbytes(void);\n\n#define crypto_sign_ed25519_PUBLICKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_publickeybytes(void);\n\n#define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U)\nSODIUM_EXPORT\nsize_t crypto_sign_ed25519_secretkeybytes(void);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p,\n                        const unsigned char *m, unsigned long long mlen,\n                        const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,\n                             const unsigned char *sm, unsigned long long smlen,\n                             const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_detached(unsigned char *sig,\n                                 unsigned long long *siglen_p,\n                                 const unsigned char *m,\n                                 unsigned long long mlen,\n                                 const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_verify_detached(const unsigned char *sig,\n                                        const unsigned char *m,\n                                        unsigned long long mlen,\n                                        const unsigned char *pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,\n                                     const unsigned char *seed);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,\n                                         const unsigned char *ed25519_pk)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,\n                                         const unsigned char *ed25519_sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_seed(unsigned char *seed,\n                                   const unsigned char *sk);\n\nSODIUM_EXPORT\nint crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_sign_edwards25519sha512batch.h",
    "content": "#ifndef crypto_sign_edwards25519sha512batch_H\n#define crypto_sign_edwards25519sha512batch_H\n\n/*\n * WARNING: This construction was a prototype, which should not be used\n * any more in new projects.\n *\n * crypto_sign_edwards25519sha512batch is provided for applications\n * initially built with NaCl, but as recommended by the author of this\n * construction, new applications should use ed25519 instead.\n *\n * In Sodium, you should use the high-level crypto_sign_*() functions instead.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_sign_edwards25519sha512batch_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_sign_edwards25519sha512batch_bytes(void)\n       __attribute__ ((deprecated));\n\n#define crypto_sign_edwards25519sha512batch_PUBLICKEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_sign_edwards25519sha512batch_publickeybytes(void)\n       __attribute__ ((deprecated));\n\n#define crypto_sign_edwards25519sha512batch_SECRETKEYBYTES (32U + 32U)\nSODIUM_EXPORT\nsize_t crypto_sign_edwards25519sha512batch_secretkeybytes(void)\n       __attribute__ ((deprecated));\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch(unsigned char *sm,\n                                        unsigned long long *smlen_p,\n                                        const unsigned char *m,\n                                        unsigned long long mlen,\n                                        const unsigned char *sk)\n       __attribute__ ((deprecated));\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch_open(unsigned char *m,\n                                             unsigned long long *mlen_p,\n                                             const unsigned char *sm,\n                                             unsigned long long smlen,\n                                             const unsigned char *pk)\n       __attribute__ ((deprecated));\n\nSODIUM_EXPORT\nint crypto_sign_edwards25519sha512batch_keypair(unsigned char *pk,\n                                                unsigned char *sk)\n       __attribute__ ((deprecated));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream.h",
    "content": "#ifndef crypto_stream_H\n#define crypto_stream_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n\n#include \"crypto_stream_xsalsa20.h\"\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_KEYBYTES crypto_stream_xsalsa20_KEYBYTES\nSODIUM_EXPORT\nsize_t  crypto_stream_keybytes(void);\n\n#define crypto_stream_NONCEBYTES crypto_stream_xsalsa20_NONCEBYTES\nSODIUM_EXPORT\nsize_t  crypto_stream_noncebytes(void);\n\n#define crypto_stream_PRIMITIVE \"xsalsa20\"\nSODIUM_EXPORT\nconst char *crypto_stream_primitive(void);\n\nSODIUM_EXPORT\nint crypto_stream(unsigned char *c, unsigned long long clen,\n                  const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xor(unsigned char *c, const unsigned char *m,\n                      unsigned long long mlen, const unsigned char *n,\n                      const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_aes128ctr.h",
    "content": "#ifndef crypto_stream_aes128ctr_H\n#define crypto_stream_aes128ctr_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_aes128ctr_KEYBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_keybytes(void);\n\n#define crypto_stream_aes128ctr_NONCEBYTES 16U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_noncebytes(void);\n\n#define crypto_stream_aes128ctr_BEFORENMBYTES 1408U\nSODIUM_EXPORT\nsize_t crypto_stream_aes128ctr_beforenmbytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr(unsigned char *out, unsigned long long outlen,\n                            const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_xor(unsigned char *out, const unsigned char *in,\n                                unsigned long long inlen, const unsigned char *n,\n                                const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_beforenm(unsigned char *c, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_afternm(unsigned char *out, unsigned long long len,\n                                    const unsigned char *nonce, const unsigned char *c);\n\nSODIUM_EXPORT\nint crypto_stream_aes128ctr_xor_afternm(unsigned char *out, const unsigned char *in,\n                                        unsigned long long len,\n                                        const unsigned char *nonce,\n                                        const unsigned char *c);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_chacha20.h",
    "content": "#ifndef crypto_stream_chacha20_H\n#define crypto_stream_chacha20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_chacha20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_keybytes(void);\n\n#define crypto_stream_chacha20_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_noncebytes(void);\n\n/* ChaCha20 with a 64-bit nonce and a 64-bit counter, as originally designed */\n\nSODIUM_EXPORT\nint crypto_stream_chacha20(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n\n/* ChaCha20 with a 96-bit nonce and a 32-bit counter (IETF) */\n\n#define crypto_stream_chacha20_IETF_NONCEBYTES 12U\nSODIUM_EXPORT\nsize_t crypto_stream_chacha20_ietf_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf(unsigned char *c, unsigned long long clen,\n                                const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf_xor(unsigned char *c, const unsigned char *m,\n                                    unsigned long long mlen, const unsigned char *n,\n                                    const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_chacha20_ietf_xor_ic(unsigned char *c, const unsigned char *m,\n                                       unsigned long long mlen,\n                                       const unsigned char *n, uint32_t ic,\n                                       const unsigned char *k);\n\n/* ------------------------------------------------------------------------- */\n\nint _crypto_stream_chacha20_pick_best_implementation(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_salsa20.h",
    "content": "#ifndef crypto_stream_salsa20_H\n#define crypto_stream_salsa20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa20_keybytes(void);\n\n#define crypto_stream_salsa20_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa20_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20(unsigned char *c, unsigned long long clen,\n                          const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m,\n                              unsigned long long mlen, const unsigned char *n,\n                              const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa20_xor_ic(unsigned char *c, const unsigned char *m,\n                                 unsigned long long mlen,\n                                 const unsigned char *n, uint64_t ic,\n                                 const unsigned char *k);\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_salsa2012.h",
    "content": "#ifndef crypto_stream_salsa2012_H\n#define crypto_stream_salsa2012_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa2012_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa2012_keybytes(void);\n\n#define crypto_stream_salsa2012_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa2012_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa2012(unsigned char *c, unsigned long long clen,\n                            const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa2012_xor(unsigned char *c, const unsigned char *m,\n                                unsigned long long mlen, const unsigned char *n,\n                                const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_salsa208.h",
    "content": "#ifndef crypto_stream_salsa208_H\n#define crypto_stream_salsa208_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_salsa208_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa208_keybytes(void);\n\n#define crypto_stream_salsa208_NONCEBYTES 8U\nSODIUM_EXPORT\nsize_t crypto_stream_salsa208_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_salsa208(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_salsa208_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_stream_xsalsa20.h",
    "content": "#ifndef crypto_stream_xsalsa20_H\n#define crypto_stream_xsalsa20_H\n\n/*\n *  WARNING: This is just a stream cipher. It is NOT authenticated encryption.\n *  While it provides some protection against eavesdropping, it does NOT\n *  provide any security against active attacks.\n *  Unless you know what you're doing, what you are looking for is probably\n *  the crypto_box functions.\n */\n\n#include <stddef.h>\n#include <stdint.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\n#define crypto_stream_xsalsa20_KEYBYTES 32U\nSODIUM_EXPORT\nsize_t crypto_stream_xsalsa20_keybytes(void);\n\n#define crypto_stream_xsalsa20_NONCEBYTES 24U\nSODIUM_EXPORT\nsize_t crypto_stream_xsalsa20_noncebytes(void);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20(unsigned char *c, unsigned long long clen,\n                           const unsigned char *n, const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20_xor(unsigned char *c, const unsigned char *m,\n                               unsigned long long mlen, const unsigned char *n,\n                               const unsigned char *k);\n\nSODIUM_EXPORT\nint crypto_stream_xsalsa20_xor_ic(unsigned char *c, const unsigned char *m,\n                                  unsigned long long mlen,\n                                  const unsigned char *n, uint64_t ic,\n                                  const unsigned char *k);\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_uint16.h",
    "content": "#ifndef crypto_uint16_H\n#define crypto_uint16_H\n\n#include <stdint.h>\n\ntypedef uint16_t crypto_uint16;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_uint32.h",
    "content": "#ifndef crypto_uint32_H\n#define crypto_uint32_H\n\n#include <stdint.h>\n\ntypedef uint32_t crypto_uint32;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_uint64.h",
    "content": "#ifndef crypto_uint64_H\n#define crypto_uint64_H\n\n#include <stdint.h>\n\ntypedef uint64_t crypto_uint64;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_uint8.h",
    "content": "#ifndef crypto_uint8_H\n#define crypto_uint8_H\n\n#include <stdint.h>\n\ntypedef uint8_t crypto_uint8;\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_verify_16.h",
    "content": "#ifndef crypto_verify_16_H\n#define crypto_verify_16_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_16_BYTES 16U\nSODIUM_EXPORT\nsize_t crypto_verify_16_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_16(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_verify_32.h",
    "content": "#ifndef crypto_verify_32_H\n#define crypto_verify_32_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_32_BYTES 32U\nSODIUM_EXPORT\nsize_t crypto_verify_32_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_32(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/crypto_verify_64.h",
    "content": "#ifndef crypto_verify_64_H\n#define crypto_verify_64_H\n\n#include <stddef.h>\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define crypto_verify_64_BYTES 64U\nSODIUM_EXPORT\nsize_t crypto_verify_64_bytes(void);\n\nSODIUM_EXPORT\nint crypto_verify_64(const unsigned char *x, const unsigned char *y)\n            __attribute__ ((warn_unused_result));\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/export.h",
    "content": "\n#ifndef sodium_export_H\n#define sodium_export_H\n\n#ifndef __GNUC__\n# ifdef __attribute__\n#  undef __attribute__\n# endif\n# define __attribute__(a)\n#endif\n\n#ifdef SODIUM_STATIC\n# define SODIUM_EXPORT\n#else\n# if defined(_MSC_VER)\n#  ifdef SODIUM_DLL_EXPORT\n#   define SODIUM_EXPORT __declspec(dllexport)\n#  else\n#   define SODIUM_EXPORT __declspec(dllimport)\n#  endif\n# else\n#  if defined(__SUNPRO_C)\n#   ifndef __GNU_C__\n#    define SODIUM_EXPORT __attribute__(visibility(__global))\n#   else\n#    define SODIUM_EXPORT __attribute__ __global\n#   endif\n#  elif defined(_MSG_VER)\n#   define SODIUM_EXPORT extern __declspec(dllexport)\n#  else\n#   define SODIUM_EXPORT __attribute__ ((visibility (\"default\")))\n#  endif\n# endif\n#endif\n\n#ifndef CRYPTO_ALIGN\n# if defined(__INTEL_COMPILER) || defined(_MSC_VER)\n#  define CRYPTO_ALIGN(x) __declspec(align(x))\n# else\n#  define CRYPTO_ALIGN(x) __attribute__((aligned(x)))\n# endif\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/randombytes.h",
    "content": "\n#ifndef randombytes_H\n#define randombytes_H\n\n#include <sys/types.h>\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\n# if __GNUC__\n#  pragma GCC diagnostic ignored \"-Wlong-long\"\n# endif\nextern \"C\" {\n#endif\n\ntypedef struct randombytes_implementation {\n    const char *(*implementation_name)(void); /* required */\n    uint32_t    (*random)(void);              /* required */\n    void        (*stir)(void);                /* optional */\n    uint32_t    (*uniform)(const uint32_t upper_bound); /* optional, a default implementation will be used if NULL */\n    void        (*buf)(void * const buf, const size_t size); /* required */\n    int         (*close)(void);               /* optional */\n} randombytes_implementation;\n\nSODIUM_EXPORT\nvoid randombytes_buf(void * const buf, const size_t size);\n\nSODIUM_EXPORT\nuint32_t randombytes_random(void);\n\nSODIUM_EXPORT\nuint32_t randombytes_uniform(const uint32_t upper_bound);\n\nSODIUM_EXPORT\nvoid randombytes_stir(void);\n\nSODIUM_EXPORT\nint randombytes_close(void);\n\nSODIUM_EXPORT\nint randombytes_set_implementation(randombytes_implementation *impl);\n\nSODIUM_EXPORT\nconst char *randombytes_implementation_name(void);\n\n/* -- NaCl compatibility interface -- */\n\nSODIUM_EXPORT\nvoid randombytes(unsigned char * const buf, const unsigned long long buf_len);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/randombytes_nativeclient.h",
    "content": "\n#ifndef randombytes_nativeclient_H\n#define randombytes_nativeclient_H\n\n#ifdef __native_client__\n\n# include \"export.h\"\n# include \"randombytes.h\"\n\n# ifdef __cplusplus\nextern \"C\" {\n# endif\n\nSODIUM_EXPORT\nextern struct randombytes_implementation randombytes_nativeclient_implementation;\n\n# ifdef __cplusplus\n}\n# endif\n\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/randombytes_salsa20_random.h",
    "content": "\n#ifndef randombytes_salsa20_random_H\n#define randombytes_salsa20_random_H\n\n#include \"export.h\"\n#include \"randombytes.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nextern struct randombytes_implementation randombytes_salsa20_implementation;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/randombytes_sysrandom.h",
    "content": "\n#ifndef randombytes_sysrandom_H\n#define randombytes_sysrandom_H\n\n#include \"export.h\"\n#include \"randombytes.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nextern struct randombytes_implementation randombytes_sysrandom_implementation;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/runtime.h",
    "content": "\n#ifndef sodium_runtime_H\n#define sodium_runtime_H\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nint sodium_runtime_has_neon(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse2(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse3(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_ssse3(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_sse41(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_avx(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_pclmul(void);\n\nSODIUM_EXPORT\nint sodium_runtime_has_aesni(void);\n\n/* ------------------------------------------------------------------------- */\n\nint _sodium_runtime_get_cpu_features(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/utils.h",
    "content": "\n#ifndef sodium_utils_H\n#define sodium_utils_H\n\n#include <stddef.h>\n\n#include \"export.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(__cplusplus) || !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L\n# define SODIUM_C99(X)\n#else\n# define SODIUM_C99(X) X\n#endif\n\nSODIUM_EXPORT\nvoid sodium_memzero(void * const pnt, const size_t len);\n\n/*\n * WARNING: sodium_memcmp() must be used to verify if two secret keys\n * are equal, in constant time.\n * It returns 0 if the keys are equal, and -1 if they differ.\n * This function is not designed for lexicographical comparisons.\n */\nSODIUM_EXPORT\nint sodium_memcmp(const void * const b1_, const void * const b2_, size_t len)\n            __attribute__ ((warn_unused_result));\n\n/*\n * sodium_compare() returns -1 if b1_ < b2_, 1 if b1_ > b2_ and 0 if b1_ == b2_\n * It is suitable for lexicographical comparisons, or to compare nonces\n * and counters stored in little-endian format.\n * However, it is slower than sodium_memcmp().\n */\nSODIUM_EXPORT\nint sodium_compare(const unsigned char *b1_, const unsigned char *b2_,\n                   size_t len)\n            __attribute__ ((warn_unused_result));\n\nSODIUM_EXPORT\nint sodium_is_zero(const unsigned char *n, const size_t nlen);\n\nSODIUM_EXPORT\nvoid sodium_increment(unsigned char *n, const size_t nlen);\n\nSODIUM_EXPORT\nvoid sodium_add(unsigned char *a, const unsigned char *b, const size_t len);\n\nSODIUM_EXPORT\nchar *sodium_bin2hex(char * const hex, const size_t hex_maxlen,\n                     const unsigned char * const bin, const size_t bin_len);\n\nSODIUM_EXPORT\nint sodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen,\n                   const char * const hex, const size_t hex_len,\n                   const char * const ignore, size_t * const bin_len,\n                   const char ** const hex_end);\n\nSODIUM_EXPORT\nint sodium_mlock(void * const addr, const size_t len);\n\nSODIUM_EXPORT\nint sodium_munlock(void * const addr, const size_t len);\n\n/* WARNING: sodium_malloc() and sodium_allocarray() are not general-purpose\n * allocation functions.\n *\n * They return a pointer to a region filled with 0xd0 bytes, immediately\n * followed by a guard page.\n * As a result, accessing a single byte after the requested allocation size\n * will intentionally trigger a segmentation fault.\n *\n * A canary and an additional guard page placed before the beginning of the\n * region may also kill the process if a buffer underflow is detected.\n *\n * The memory layout is:\n * [unprotected region size (read only)][guard page (no access)][unprotected pages (read/write)][guard page (no access)]\n * With the layout of the unprotected pages being:\n * [optional padding][16-bytes canary][user region]\n *\n * However:\n * - These functions are significantly slower than standard functions\n * - Each allocation requires 3 or 4 additional pages\n * - The returned address will not be aligned if the allocation size is not\n *   a multiple of the required alignment. For this reason, these functions\n *   are designed to store data, such as secret keys and messages.\n *\n * sodium_malloc() can be used to allocate any libsodium data structure,\n * with the exception of crypto_generichash_state.\n *\n * The crypto_generichash_state structure is packed and its length is\n * either 357 or 361 bytes. For this reason, when using sodium_malloc() to\n * allocate a crypto_generichash_state structure, padding must be added in\n * order to ensure proper alignment:\n * state = sodium_malloc((crypto_generichash_statebytes() + (size_t) 63U)\n *                       & ~(size_t) 63U);\n */\n\nSODIUM_EXPORT\nvoid *sodium_malloc(const size_t size)\n            __attribute__ ((malloc));\n\nSODIUM_EXPORT\nvoid *sodium_allocarray(size_t count, size_t size)\n            __attribute__ ((malloc));\n\nSODIUM_EXPORT\nvoid sodium_free(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_noaccess(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_readonly(void *ptr);\n\nSODIUM_EXPORT\nint sodium_mprotect_readwrite(void *ptr);\n\n/* -------- */\n\nint _sodium_alloc_init(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium/version.h.in",
    "content": "\n#ifndef sodium_version_H\n#define sodium_version_H\n\n#include \"export.h\"\n\n#define SODIUM_VERSION_STRING \"@VERSION@\"\n\n#define SODIUM_LIBRARY_VERSION_MAJOR @SODIUM_LIBRARY_VERSION_MAJOR@\n#define SODIUM_LIBRARY_VERSION_MINOR @SODIUM_LIBRARY_VERSION_MINOR@\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nSODIUM_EXPORT\nconst char *sodium_version_string(void);\n\nSODIUM_EXPORT\nint         sodium_library_version_major(void);\n\nSODIUM_EXPORT\nint         sodium_library_version_minor(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/include/sodium.h",
    "content": "\n#ifndef sodium_H\n#define sodium_H\n\n#include \"sodium/core.h\"\n#include \"sodium/crypto_aead_aes256gcm.h\"\n#include \"sodium/crypto_aead_chacha20poly1305.h\"\n#include \"sodium/crypto_auth.h\"\n#include \"sodium/crypto_auth_hmacsha256.h\"\n#include \"sodium/crypto_auth_hmacsha512.h\"\n#include \"sodium/crypto_auth_hmacsha512256.h\"\n#include \"sodium/crypto_box.h\"\n#include \"sodium/crypto_box_curve25519xsalsa20poly1305.h\"\n#include \"sodium/crypto_core_hsalsa20.h\"\n#include \"sodium/crypto_core_salsa20.h\"\n#include \"sodium/crypto_core_salsa2012.h\"\n#include \"sodium/crypto_core_salsa208.h\"\n#include \"sodium/crypto_generichash.h\"\n#include \"sodium/crypto_generichash_blake2b.h\"\n#include \"sodium/crypto_hash.h\"\n#include \"sodium/crypto_hash_sha256.h\"\n#include \"sodium/crypto_hash_sha512.h\"\n#include \"sodium/crypto_onetimeauth.h\"\n#include \"sodium/crypto_onetimeauth_poly1305.h\"\n#include \"sodium/crypto_pwhash_scryptsalsa208sha256.h\"\n#include \"sodium/crypto_scalarmult.h\"\n#include \"sodium/crypto_scalarmult_curve25519.h\"\n#include \"sodium/crypto_secretbox.h\"\n#include \"sodium/crypto_secretbox_xsalsa20poly1305.h\"\n#include \"sodium/crypto_shorthash.h\"\n#include \"sodium/crypto_shorthash_siphash24.h\"\n#include \"sodium/crypto_sign.h\"\n#include \"sodium/crypto_sign_ed25519.h\"\n#include \"sodium/crypto_stream.h\"\n#include \"sodium/crypto_stream_aes128ctr.h\"\n#include \"sodium/crypto_stream_chacha20.h\"\n#include \"sodium/crypto_stream_salsa20.h\"\n#include \"sodium/crypto_stream_salsa2012.h\"\n#include \"sodium/crypto_stream_salsa208.h\"\n#include \"sodium/crypto_stream_xsalsa20.h\"\n#include \"sodium/crypto_verify_16.h\"\n#include \"sodium/crypto_verify_32.h\"\n#include \"sodium/crypto_verify_64.h\"\n#include \"sodium/randombytes.h\"\n#ifdef __native_client__\n# include \"sodium/randombytes_nativeclient.h\"\n#endif\n#include \"sodium/randombytes_salsa20_random.h\"\n#include \"sodium/randombytes_sysrandom.h\"\n#include \"sodium/runtime.h\"\n#include \"sodium/utils.h\"\n#include \"sodium/version.h\"\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/randombytes/nativeclient/randombytes_nativeclient.c",
    "content": "\n#include <assert.h>\n#include <stdint.h>\n#include <stdlib.h>\n\n#ifdef __native_client__\n# include <nacl/nacl_random.h>\n\n# include \"utils.h\"\n# include \"randombytes.h\"\n# include \"randombytes_nativeclient.h\"\n\nstatic void\nrandombytes_nativeclient_buf(void * const buf, const size_t size)\n{\n    size_t readnb;\n\n    if (nacl_secure_random(buf, size, &readnb) != 0) {\n        abort();\n    }\n    assert(readnb == size);\n}\n\nstatic uint32_t\nrandombytes_nativeclient_random(void)\n{\n    uint32_t r;\n\n    randombytes_nativeclient_buf(&r, sizeof r);\n\n    return r;\n}\n\nstatic const char *\nrandombytes_nativeclient_implementation_name(void)\n{\n    return \"nativeclient\";\n}\n\nstruct randombytes_implementation randombytes_nativeclient_implementation = {\n    SODIUM_C99(.implementation_name =) randombytes_nativeclient_implementation_name,\n    SODIUM_C99(.random =) randombytes_nativeclient_random,\n    SODIUM_C99(.stir =) NULL,\n    SODIUM_C99(.uniform =) NULL,\n    SODIUM_C99(.buf =) randombytes_nativeclient_buf,\n    SODIUM_C99(.close =) NULL\n};\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/randombytes/randombytes.c",
    "content": "\n#include <stdlib.h>\n#include <sys/types.h>\n\n#include <assert.h>\n#include <limits.h>\n#include <stdint.h>\n\n#ifdef __EMSCRIPTEN__\n# include <emscripten.h>\n#endif\n\n#include \"randombytes.h\"\n#include \"randombytes_sysrandom.h\"\n\n#ifdef __native_client__\n# include \"randombytes_nativeclient.h\"\n#endif\n\n#ifndef __EMSCRIPTEN__\n#ifdef __native_client__\nstatic const randombytes_implementation *implementation =\n    &randombytes_nativeclient_implementation;\n#else\nstatic const randombytes_implementation *implementation =\n    &randombytes_sysrandom_implementation;\n#endif\n#else\nstatic const randombytes_implementation *implementation = NULL;\n#endif\n\nint\nrandombytes_set_implementation(randombytes_implementation *impl)\n{\n    implementation = impl;\n\n    return 0;\n}\n\nconst char *\nrandombytes_implementation_name(void)\n{\n#ifndef __EMSCRIPTEN__\n    return implementation->implementation_name();\n#else\n    return \"js\";\n#endif\n}\n\nuint32_t\nrandombytes_random(void)\n{\n#ifndef __EMSCRIPTEN__\n    return implementation->random();\n#else\n    return EM_ASM_INT_V({\n        return Module.getRandomValue();\n    });\n#endif\n}\n\nvoid\nrandombytes_stir(void)\n{\n#ifndef __EMSCRIPTEN__\n    if (implementation != NULL && implementation->stir != NULL) {\n        implementation->stir();\n    }\n#else\n    EM_ASM({\n        if (Module.getRandomValue === undefined) {\n            try {\n                var window_ = \"object\" === typeof window ? window : self,\n                    crypto_ = typeof window_.crypto !== \"undefined\" ? window_.crypto : window_.msCrypto,\n                    randomValuesStandard = function() {\n                        var buf = new Uint32Array(1);\n                        crypto_.getRandomValues(buf);\n                        return buf[0] >>> 0;\n                    };\n                randomValuesStandard();\n                Module.getRandomValue = randomValuesStandard;\n            } catch (e) {\n                try {\n                    var crypto = require('crypto'),\n                        randomValueNodeJS = function() {\n                            var buf = crypto.randomBytes(4);\n                            return (buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3]) >>> 0;\n                        };\n                    randomValueNodeJS();\n                    Module.getRandomValue = randomValueNodeJS;\n                } catch (e) {\n                    throw 'No secure random number generator found';\n                }\n            }\n        }\n    });\n#endif\n}\n\n/*\n * randombytes_uniform() derives from OpenBSD's arc4random_uniform()\n * Copyright (c) 2008, Damien Miller <djm@openbsd.org>\n */\nuint32_t\nrandombytes_uniform(const uint32_t upper_bound)\n{\n    uint32_t min;\n    uint32_t r;\n\n#ifdef __EMSCRIPTEN__\n    if (implementation != NULL && implementation->uniform != NULL) {\n        return implementation->uniform(upper_bound);\n    }\n#else\n    if (implementation->uniform != NULL) {\n        return implementation->uniform(upper_bound);\n    }\n#endif\n    if (upper_bound < 2) {\n        return 0;\n    }\n    min = (uint32_t) (-upper_bound % upper_bound);\n    do {\n        r = randombytes_random();\n    } while (r < min);\n\n    return r % upper_bound;\n}\n\nvoid\nrandombytes_buf(void * const buf, const size_t size)\n{\n#ifndef __EMSCRIPTEN__\n    if (size > (size_t) 0U) {\n        implementation->buf(buf, size);\n    }\n#else\n    unsigned char *p = buf;\n    size_t         i;\n\n    for (i = (size_t) 0U; i < size; i++) {\n        p[i] = (unsigned char) randombytes_random();\n    }\n#endif\n}\n\nint\nrandombytes_close(void)\n{\n    if (implementation != NULL && implementation->close != NULL) {\n        return implementation->close();\n    }\n    return 0;\n}\n\nvoid\nrandombytes(unsigned char * const buf, const unsigned long long buf_len)\n{\n    assert(buf_len <= SIZE_MAX);\n    randombytes_buf(buf, (size_t) buf_len);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c",
    "content": "\n#include <stdlib.h>\n#include <sys/types.h>\n#ifndef _WIN32\n# include <sys/stat.h>\n# include <sys/time.h>\n#endif\n#ifdef __linux__\n# include <sys/syscall.h>\n#endif\n\n#include <assert.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <limits.h>\n#include <stdint.h>\n#include <string.h>\n#ifndef _MSC_VER\n# include <unistd.h>\n#endif\n\n#include \"crypto_core_salsa20.h\"\n#include \"crypto_generichash.h\"\n#include \"crypto_stream_salsa20.h\"\n#include \"randombytes.h\"\n#include \"randombytes_salsa20_random.h\"\n#include \"utils.h\"\n\n#ifdef _WIN32\n# include <windows.h>\n# include <sys/timeb.h>\n# define RtlGenRandom SystemFunction036\n# if defined(__cplusplus)\nextern \"C\"\n# endif\nBOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength);\n# pragma comment(lib, \"advapi32.lib\")\n#endif\n\n#define SALSA20_RANDOM_BLOCK_SIZE crypto_core_salsa20_OUTPUTBYTES\n#define HASH_BLOCK_SIZE 128U\n#define COMPILER_ASSERT(X) (void) sizeof(char[(X) ? 1 : -1])\n\n#if defined(__OpenBSD__) || defined(__CloudABI__)\n# define HAVE_SAFE_ARC4RANDOM 1\n#endif\n\n#ifndef SSIZE_MAX\n# define SSIZE_MAX (SIZE_MAX / 2 - 1)\n#endif\n\ntypedef struct Salsa20Random_ {\n    unsigned char key[crypto_stream_salsa20_KEYBYTES];\n    unsigned char rnd32[16U * SALSA20_RANDOM_BLOCK_SIZE];\n    uint64_t      nonce;\n    size_t        rnd32_outleft;\n#ifdef HAVE_GETPID\n    pid_t         pid;\n#endif\n    int           random_data_source_fd;\n    int           initialized;\n    int           getrandom_available;\n} Salsa20Random;\n\nstatic Salsa20Random stream = {\n    SODIUM_C99(.random_data_source_fd =) -1,\n    SODIUM_C99(.rnd32_outleft =) (size_t) 0U,\n    SODIUM_C99(.initialized =) 0,\n    SODIUM_C99(.getrandom_available =) 0\n};\n\nstatic uint64_t\nsodium_hrtime(void)\n{\n    uint64_t ts;\n\n#ifdef _WIN32\n    {\n        struct _timeb tb;\n# pragma warning(push)\n# pragma warning(disable: 4996)\n        _ftime(&tb);\n# pragma warning(pop)\n        ts = ((uint64_t) tb.time) * 1000000U + ((uint64_t) tb.millitm) * 1000U;\n    }\n#else\n    {\n        struct timeval tv;\n        assert(gettimeofday(&tv, NULL) == 0);\n        ts = ((uint64_t) tv.tv_sec) * 1000000U + (uint64_t) tv.tv_usec;\n    }\n#endif\n    return ts;\n}\n\n#ifndef _WIN32\nstatic ssize_t\nsafe_read(const int fd, void * const buf_, size_t size)\n{\n    unsigned char *buf = (unsigned char *) buf_;\n    ssize_t        readnb;\n\n    assert(size > (size_t) 0U);\n    assert(size <= SSIZE_MAX);\n    do {\n        while ((readnb = read(fd, buf, size)) < (ssize_t) 0 &&\n               (errno == EINTR || errno == EAGAIN));  /* LCOV_EXCL_LINE */\n        if (readnb < (ssize_t) 0) {\n            return readnb; /* LCOV_EXCL_LINE */\n        }\n        if (readnb == (ssize_t) 0) {\n            break; /* LCOV_EXCL_LINE */\n        }\n        size -= (size_t) readnb;\n        buf += readnb;\n    } while (size > (ssize_t) 0);\n\n    return (ssize_t) (buf - (unsigned char *) buf_);\n}\n#endif\n\n#ifndef _WIN32\n# ifndef HAVE_SAFE_ARC4RANDOM\nstatic int\nrandombytes_salsa20_random_random_dev_open(void)\n{\n/* LCOV_EXCL_START */\n    struct stat       st;\n    static const char *devices[] = {\n#  ifndef USE_BLOCKING_RANDOM\n        \"/dev/urandom\",\n#  endif\n        \"/dev/random\", NULL\n    };\n    const char **     device = devices;\n    int               fd;\n\n    do {\n        fd = open(*device, O_RDONLY);\n        if (fd != -1) {\n            if (fstat(fd, &st) == 0 &&\n# ifdef __COMPCERT__\n                1\n# elif defined(S_ISNAM)\n                (S_ISNAM(st.st_mode) || S_ISCHR(st.st_mode))\n# else\n                S_ISCHR(st.st_mode)\n# endif\n               ) {\n#  if defined(F_SETFD) && defined(FD_CLOEXEC)\n                (void) fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);\n#  endif\n                return fd;\n            }\n            (void) close(fd);\n        } else if (errno == EINTR) {\n            continue;\n        }\n        device++;\n    } while (*device != NULL);\n\n    errno = EIO;\n    return -1;\n/* LCOV_EXCL_STOP */\n}\n# endif\n\n# ifdef SYS_getrandom\nstatic int\n_randombytes_linux_getrandom(void * const buf, const size_t size)\n{\n    int readnb;\n\n    assert(size <= 256U);\n    do {\n        readnb = syscall(SYS_getrandom, buf, (int) size, 0);\n    } while (readnb < 0 && (errno == EINTR || errno == EAGAIN));\n\n    return (readnb == (int) size) - 1;\n}\n\nstatic int\nrandombytes_linux_getrandom(void * const buf_, size_t size)\n{\n    unsigned char *buf = (unsigned char *) buf_;\n    size_t         chunk_size = 256U;\n\n    do {\n        if (size < chunk_size) {\n            chunk_size = size;\n            assert(chunk_size > (size_t) 0U);\n        }\n        if (_randombytes_linux_getrandom(buf, chunk_size) != 0) {\n            return -1;\n        }\n        size -= chunk_size;\n        buf += chunk_size;\n    } while (size > (size_t) 0U);\n\n    return 0;\n}\n# endif\n\nstatic void\nrandombytes_salsa20_random_init(void)\n{\n    const int errno_save = errno;\n\n    stream.nonce = sodium_hrtime();\n    assert(stream.nonce != (uint64_t) 0U);\n\n# ifdef HAVE_SAFE_ARC4RANDOM\n    errno = errno_save;\n# else\n\n#  ifdef SYS_getrandom\n    {\n        unsigned char fodder[16];\n\n        if (randombytes_linux_getrandom(fodder, sizeof fodder) == 0) {\n            stream.getrandom_available = 1;\n            errno = errno_save;\n            return;\n        }\n        stream.getrandom_available = 0;\n    }\n#  endif /* SYS_getrandom */\n\n    if ((stream.random_data_source_fd =\n         randombytes_salsa20_random_random_dev_open()) == -1) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    errno = errno_save;\n# endif /* HAVE_SAFE_ARC4RANDOM */\n}\n\n#else /* _WIN32 */\n\nstatic void\nrandombytes_salsa20_random_init(void)\n{\n    stream.nonce = sodium_hrtime();\n    assert(stream.nonce != (uint64_t) 0U);\n}\n#endif\n\nstatic void\nrandombytes_salsa20_random_rekey(const unsigned char * const mix)\n{\n    unsigned char *key = stream.key;\n    size_t         i;\n\n    for (i = (size_t) 0U; i < sizeof stream.key; i++) {\n        key[i] ^= mix[i];\n    }\n}\n\nstatic void\nrandombytes_salsa20_random_stir(void)\n{\n    /* constant to personalize the hash function */\n    const unsigned char hsigma[crypto_generichash_KEYBYTES] = {\n        0x54, 0x68, 0x69, 0x73, 0x49, 0x73, 0x4a, 0x75,\n        0x73, 0x74, 0x41, 0x54, 0x68, 0x69, 0x72, 0x74,\n        0x79, 0x54, 0x77, 0x6f, 0x42, 0x79, 0x74, 0x65,\n        0x73, 0x53, 0x65, 0x65, 0x64, 0x2e, 0x2e, 0x2e\n    };\n    unsigned char  m0[crypto_stream_salsa20_KEYBYTES + HASH_BLOCK_SIZE];\n    unsigned char *k0 = m0 + crypto_stream_salsa20_KEYBYTES;\n    size_t         sizeof_k0 = sizeof m0 - crypto_stream_salsa20_KEYBYTES;\n\n    memset(stream.rnd32, 0, sizeof stream.rnd32);\n    stream.rnd32_outleft = (size_t) 0U;\n    if (stream.initialized == 0) {\n        randombytes_salsa20_random_init();\n        stream.initialized = 1;\n    }\n#ifndef _WIN32\n\n# ifdef HAVE_SAFE_ARC4RANDOM\n    arc4random_buf(m0, sizeof m0);\n# elif defined(SYS_getrandom)\n    if (stream.getrandom_available != 0) {\n        if (randombytes_linux_getrandom(m0, sizeof m0) != 0) {\n            abort(); /* LCOV_EXCL_LINE */\n        }\n    } else if (stream.random_data_source_fd == -1 ||\n               safe_read(stream.random_data_source_fd, m0,\n                         sizeof m0) != (ssize_t) sizeof m0) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n# else\n    if (stream.random_data_source_fd == -1 ||\n        safe_read(stream.random_data_source_fd, m0,\n                  sizeof m0) != (ssize_t) sizeof m0) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n# endif\n\n#else /* _WIN32 */\n    if (! RtlGenRandom((PVOID) m0, (ULONG) sizeof m0)) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n#endif\n    if (crypto_generichash(stream.key, sizeof stream.key, k0, sizeof_k0,\n                           hsigma, sizeof hsigma) != 0) {\n        abort();\n    }\n    COMPILER_ASSERT(sizeof stream.key <= sizeof m0);\n    randombytes_salsa20_random_rekey(m0);\n    sodium_memzero(m0, sizeof m0);\n#ifdef HAVE_GETPID\n    stream.pid = getpid();\n#endif\n}\n\nstatic void\nrandombytes_salsa20_random_stir_if_needed(void)\n{\n#ifdef HAVE_GETPID\n    if (stream.initialized == 0) {\n        randombytes_salsa20_random_stir();\n    } else if (stream.pid != getpid()) {\n        abort();\n    }\n#else\n    if (stream.initialized == 0) {\n        randombytes_salsa20_random_stir();\n    }\n#endif\n}\n\nstatic int\nrandombytes_salsa20_random_close(void)\n{\n    int ret = -1;\n\n#ifndef _WIN32\n    if (stream.random_data_source_fd != -1 &&\n        close(stream.random_data_source_fd) == 0) {\n        stream.random_data_source_fd = -1;\n        stream.initialized = 0;\n# ifdef HAVE_GETPID\n        stream.pid = (pid_t) 0;\n# endif\n        ret = 0;\n    }\n\n# ifdef HAVE_SAFE_ARC4RANDOM\n    ret = 0;\n# endif\n\n# ifdef SYS_getrandom\n    if (stream.getrandom_available != 0) {\n        ret = 0;\n    }\n# endif\n\n#else /* _WIN32 */\n    if (stream.initialized != 0) {\n        stream.initialized = 0;\n        ret = 0;\n    }\n#endif\n    return ret;\n}\n\nstatic void\nrandombytes_salsa20_random_buf(void * const buf, const size_t size)\n{\n    size_t i;\n    int    ret;\n\n    randombytes_salsa20_random_stir_if_needed();\n    COMPILER_ASSERT(sizeof stream.nonce == crypto_stream_salsa20_NONCEBYTES);\n#ifdef ULONG_LONG_MAX\n    /* coverity[result_independent_of_operands] */\n    assert(size <= ULONG_LONG_MAX);\n#endif\n    ret = crypto_stream_salsa20((unsigned char *) buf, (unsigned long long) size,\n                                (unsigned char *) &stream.nonce, stream.key);\n    assert(ret == 0);\n    for (i = 0U; i < sizeof size; i++) {\n        stream.key[i] ^= ((const unsigned char *) (const void *) &size)[i];\n    }\n    stream.nonce++;\n    crypto_stream_salsa20_xor(stream.key, stream.key, sizeof stream.key,\n                              (unsigned char *) &stream.nonce, stream.key);\n}\n\nstatic uint32_t\nrandombytes_salsa20_random_getword(void)\n{\n    uint32_t val;\n    int      ret;\n\n    COMPILER_ASSERT(sizeof stream.rnd32 >= (sizeof stream.key) + (sizeof val));\n    COMPILER_ASSERT(((sizeof stream.rnd32) - (sizeof stream.key))\n                    % sizeof val == (size_t) 0U);\n    if (stream.rnd32_outleft <= (size_t) 0U) {\n        randombytes_salsa20_random_stir_if_needed();\n        COMPILER_ASSERT(sizeof stream.nonce == crypto_stream_salsa20_NONCEBYTES);\n        ret = crypto_stream_salsa20((unsigned char *) stream.rnd32,\n                                    (unsigned long long) sizeof stream.rnd32,\n                                    (unsigned char *) &stream.nonce,\n                                    stream.key);\n        assert(ret == 0);\n        stream.rnd32_outleft = (sizeof stream.rnd32) - (sizeof stream.key);\n        randombytes_salsa20_random_rekey(&stream.rnd32[stream.rnd32_outleft]);\n        stream.nonce++;\n    }\n    stream.rnd32_outleft -= sizeof val;\n    memcpy(&val, &stream.rnd32[stream.rnd32_outleft], sizeof val);\n    memset(&stream.rnd32[stream.rnd32_outleft], 0, sizeof val);\n\n    return val;\n}\n\nstatic uint32_t\nrandombytes_salsa20_random(void)\n{\n    return randombytes_salsa20_random_getword();\n}\n\nstatic const char *\nrandombytes_salsa20_implementation_name(void)\n{\n    return \"salsa20\";\n}\n\nstruct randombytes_implementation randombytes_salsa20_implementation = {\n    SODIUM_C99(.implementation_name =) randombytes_salsa20_implementation_name,\n    SODIUM_C99(.random =) randombytes_salsa20_random,\n    SODIUM_C99(.stir =) randombytes_salsa20_random_stir,\n    SODIUM_C99(.uniform =) NULL,\n    SODIUM_C99(.buf =) randombytes_salsa20_random_buf,\n    SODIUM_C99(.close =) randombytes_salsa20_random_close\n};\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c",
    "content": "\n#include <stdlib.h>\n#include <sys/types.h>\n#ifndef _WIN32\n# include <sys/stat.h>\n# include <sys/time.h>\n#endif\n#ifdef __linux__\n# include <sys/syscall.h>\n#endif\n\n#include <assert.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <limits.h>\n#include <stdint.h>\n#include <string.h>\n#ifndef _WIN32\n# include <unistd.h>\n#endif\n\n#include \"randombytes.h\"\n#include \"randombytes_sysrandom.h\"\n#include \"utils.h\"\n\n#ifdef _WIN32\n# include <windows.h>\n# define RtlGenRandom SystemFunction036\n# if defined(__cplusplus)\nextern \"C\"\n# endif\nBOOLEAN NTAPI RtlGenRandom(PVOID RandomBuffer, ULONG RandomBufferLength);\n# pragma comment(lib, \"advapi32.lib\")\n#endif\n\n#if defined(__OpenBSD__) || defined(__CloudABI__)\n# define HAVE_SAFE_ARC4RANDOM 1\n#endif\n\n#ifndef SSIZE_MAX\n# define SSIZE_MAX (SIZE_MAX / 2 - 1)\n#endif\n\n#ifdef HAVE_SAFE_ARC4RANDOM\n\nstatic uint32_t\nrandombytes_sysrandom(void)\n{\n    return arc4random();\n}\n\nstatic void\nrandombytes_sysrandom_stir(void)\n{\n}\n\nstatic void\nrandombytes_sysrandom_buf(void * const buf, const size_t size)\n{\n    return arc4random_buf(buf, size);\n}\n\nstatic int\nrandombytes_sysrandom_close(void)\n{\n    return 0;\n}\n\n#else /* __OpenBSD__ */\n\ntypedef struct SysRandom_ {\n    int random_data_source_fd;\n    int initialized;\n    int getrandom_available;\n} SysRandom;\n\nstatic SysRandom stream = {\n    SODIUM_C99(.random_data_source_fd =) -1,\n    SODIUM_C99(.initialized =) 0,\n    SODIUM_C99(.getrandom_available =) 0\n};\n\n#ifndef _WIN32\nstatic ssize_t\nsafe_read(const int fd, void * const buf_, size_t size)\n{\n    unsigned char *buf = (unsigned char *) buf_;\n    ssize_t        readnb;\n\n    assert(size > (size_t) 0U);\n    assert(size <= SSIZE_MAX);\n    do {\n        while ((readnb = read(fd, buf, size)) < (ssize_t) 0 &&\n               (errno == EINTR || errno == EAGAIN)); /* LCOV_EXCL_LINE */\n        if (readnb < (ssize_t) 0) {\n            return readnb; /* LCOV_EXCL_LINE */\n        }\n        if (readnb == (ssize_t) 0) {\n            break; /* LCOV_EXCL_LINE */\n        }\n        size -= (size_t) readnb;\n        buf += readnb;\n    } while (size > (ssize_t) 0);\n\n    return (ssize_t) (buf - (unsigned char *) buf_);\n}\n#endif\n\n#ifndef _WIN32\nstatic int\nrandombytes_sysrandom_random_dev_open(void)\n{\n/* LCOV_EXCL_START */\n    struct stat        st;\n    static const char *devices[] = {\n# ifndef USE_BLOCKING_RANDOM\n        \"/dev/urandom\",\n# endif\n        \"/dev/random\", NULL\n    };\n    const char **      device = devices;\n    int                fd;\n\n    do {\n        fd = open(*device, O_RDONLY);\n        if (fd != -1) {\n            if (fstat(fd, &st) == 0 &&\n# ifdef __COMPCERT__\n                1\n# elif defined(S_ISNAM)\n                (S_ISNAM(st.st_mode) || S_ISCHR(st.st_mode))\n# else\n                S_ISCHR(st.st_mode)\n# endif\n               ) {\n# if defined(F_SETFD) && defined(FD_CLOEXEC)\n                (void) fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);\n# endif\n                return fd;\n            }\n            (void) close(fd);\n        } else if (errno == EINTR) {\n            continue;\n        }\n        device++;\n    } while (*device != NULL);\n\n    errno = EIO;\n    return -1;\n/* LCOV_EXCL_STOP */\n}\n\n# ifdef SYS_getrandom\nstatic int\n_randombytes_linux_getrandom(void * const buf, const size_t size)\n{\n    int readnb;\n\n    assert(size <= 256U);\n    do {\n        readnb = syscall(SYS_getrandom, buf, (int) size, 0);\n    } while (readnb < 0 && (errno == EINTR || errno == EAGAIN));\n\n    return (readnb == (int) size) - 1;\n}\n\nstatic int\nrandombytes_linux_getrandom(void * const buf_, size_t size)\n{\n    unsigned char *buf = (unsigned char *) buf_;\n    size_t         chunk_size = 256U;\n\n    do {\n        if (size < chunk_size) {\n            chunk_size = size;\n            assert(chunk_size > (size_t) 0U);\n        }\n        if (_randombytes_linux_getrandom(buf, chunk_size) != 0) {\n            return -1;\n        }\n        size -= chunk_size;\n        buf += chunk_size;\n    } while (size > (size_t) 0U);\n\n    return 0;\n}\n# endif\n\nstatic void\nrandombytes_sysrandom_init(void)\n{\n    const int     errno_save = errno;\n\n# ifdef SYS_getrandom\n    {\n        unsigned char fodder[16];\n\n        if (randombytes_linux_getrandom(fodder, sizeof fodder) == 0) {\n            stream.getrandom_available = 1;\n            errno = errno_save;\n            return;\n        }\n        stream.getrandom_available = 0;\n    }\n# endif\n\n    if ((stream.random_data_source_fd =\n         randombytes_sysrandom_random_dev_open()) == -1) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    errno = errno_save;\n}\n\n#else /* _WIN32 */\n\nstatic void\nrandombytes_sysrandom_init(void)\n{\n}\n#endif\n\nstatic void\nrandombytes_sysrandom_stir(void)\n{\n    if (stream.initialized == 0) {\n        randombytes_sysrandom_init();\n        stream.initialized = 1;\n    }\n}\n\nstatic void\nrandombytes_sysrandom_stir_if_needed(void)\n{\n    if (stream.initialized == 0) {\n        randombytes_sysrandom_stir();\n    }\n}\n\nstatic int\nrandombytes_sysrandom_close(void)\n{\n    int ret = -1;\n\n#ifndef _WIN32\n    if (stream.random_data_source_fd != -1 &&\n        close(stream.random_data_source_fd) == 0) {\n        stream.random_data_source_fd = -1;\n        stream.initialized = 0;\n        ret = 0;\n    }\n# ifdef SYS_getrandom\n    if (stream.getrandom_available != 0) {\n        ret = 0;\n    }\n# endif\n#else /* _WIN32 */\n    if (stream.initialized != 0) {\n        stream.initialized = 0;\n        ret = 0;\n    }\n#endif\n    return ret;\n}\n\nstatic void\nrandombytes_sysrandom_buf(void * const buf, const size_t size)\n{\n    randombytes_sysrandom_stir_if_needed();\n#ifdef ULONG_LONG_MAX\n    /* coverity[result_independent_of_operands] */\n    assert(size <= ULONG_LONG_MAX);\n#endif\n#ifndef _WIN32\n# ifdef SYS_getrandom\n    if (stream.getrandom_available != 0) {\n        if (randombytes_linux_getrandom(buf, size) != 0) {\n            abort();\n        }\n        return;\n    }\n# endif\n    if (stream.random_data_source_fd == -1 ||\n        safe_read(stream.random_data_source_fd, buf, size) != (ssize_t) size) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n#else\n    if (size > (size_t) 0xffffffff) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    if (! RtlGenRandom((PVOID) buf, (ULONG) size)) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n#endif\n}\n\nstatic uint32_t\nrandombytes_sysrandom(void)\n{\n    uint32_t r;\n\n    randombytes_sysrandom_buf(&r, sizeof r);\n\n    return r;\n}\n\n#endif /* __OpenBSD__ */\n\nstatic const char *\nrandombytes_sysrandom_implementation_name(void)\n{\n    return \"sysrandom\";\n}\n\nstruct randombytes_implementation randombytes_sysrandom_implementation = {\n    SODIUM_C99(.implementation_name =) randombytes_sysrandom_implementation_name,\n    SODIUM_C99(.random =) randombytes_sysrandom,\n    SODIUM_C99(.stir =) randombytes_sysrandom_stir,\n    SODIUM_C99(.uniform =) NULL,\n    SODIUM_C99(.buf =) randombytes_sysrandom_buf,\n    SODIUM_C99(.close =) randombytes_sysrandom_close\n};\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/sodium/core.c",
    "content": "\n#include \"core.h\"\n#include \"crypto_generichash.h\"\n#include \"crypto_onetimeauth.h\"\n#include \"crypto_scalarmult.h\"\n#include \"crypto_stream_chacha20.h\"\n#include \"randombytes.h\"\n#include \"runtime.h\"\n#include \"utils.h\"\n\nstatic int initialized;\n\nint\nsodium_init(void)\n{\n    if (initialized != 0) {\n        return 1;\n    }\n    _sodium_runtime_get_cpu_features();\n    randombytes_stir();\n    _sodium_alloc_init();\n    _crypto_generichash_blake2b_pick_best_implementation();\n    _crypto_onetimeauth_poly1305_pick_best_implementation();\n    _crypto_scalarmult_curve25519_pick_best_implementation();\n    _crypto_stream_chacha20_pick_best_implementation();\n    initialized = 1;\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/sodium/runtime.c",
    "content": "\n#ifdef HAVE_ANDROID_GETCPUFEATURES\n# include <cpu-features.h>\n#endif\n\n#include \"runtime.h\"\n\ntypedef struct CPUFeatures_ {\n    int initialized;\n    int has_neon;\n    int has_sse2;\n    int has_sse3;\n    int has_ssse3;\n    int has_sse41;\n    int has_avx;\n    int has_pclmul;\n    int has_aesni;\n} CPUFeatures;\n\nstatic CPUFeatures _cpu_features;\n\n#define CPUID_SSE2      0x04000000\n#define CPUIDECX_SSE3   0x00000001\n#define CPUIDECX_SSSE3  0x00000200\n#define CPUIDECX_SSE41  0x00080000\n#define CPUIDECX_AVX    0x10000000\n#define CPUIDECX_PCLMUL 0x00000002\n#define CPUIDECX_AESNI  0x02000000\n\nstatic int\n_sodium_runtime_arm_cpu_features(CPUFeatures * const cpu_features)\n{\n#ifndef __arm__\n    cpu_features->has_neon = 0;\n    return -1;\n#else\n# ifdef __APPLE__\n#  ifdef __ARM_NEON__\n    cpu_features->has_neon = 1;\n#  else\n    cpu_features->has_neon = 0;\n#  endif\n# elif defined(HAVE_ANDROID_GETCPUFEATURES) && defined(ANDROID_CPU_ARM_FEATURE_NEON)\n    cpu_features->has_neon =\n        (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0x0;\n# else\n    cpu_features->has_neon = 0;\n# endif\n    return 0;\n#endif\n}\n\nstatic void\n_cpuid(unsigned int cpu_info[4U], const unsigned int cpu_info_type)\n{\n#if defined(_MSC_VER) && \\\n    (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86))\n    __cpuid((int *) cpu_info, cpu_info_type);\n#elif defined(HAVE_CPUID)\n    cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0;\n# ifdef __i386__\n    __asm__ __volatile__ (\"pushfl; pushfl; \"\n                          \"popl %0; \"\n                          \"movl %0, %1; xorl %2, %0; \"\n                          \"pushl %0; \"\n                          \"popfl; pushfl; popl %0; popfl\" :\n                          \"=&r\" (cpu_info[0]), \"=&r\" (cpu_info[1]) :\n                          \"i\" (0x200000));\n    if (((cpu_info[0] ^ cpu_info[1]) & 0x200000) == 0x0) {\n        return; /* LCOV_EXCL_LINE */\n    }\n# endif\n# ifdef __i386__\n    __asm__ __volatile__ (\"xchgl %%ebx, %k1; cpuid; xchgl %%ebx, %k1\" :\n                          \"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]),\n                          \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :\n                          \"0\" (cpu_info_type), \"2\" (0U));\n# elif defined(__x86_64__)\n    __asm__ __volatile__ (\"xchgq %%rbx, %q1; cpuid; xchgq %%rbx, %q1\" :\n                          \"=a\" (cpu_info[0]), \"=&r\" (cpu_info[1]),\n                          \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :\n                          \"0\" (cpu_info_type), \"2\" (0U));\n# else\n    __asm__ __volatile__ (\"cpuid\" :\n                          \"=a\" (cpu_info[0]), \"=b\" (cpu_info[1]),\n                          \"=c\" (cpu_info[2]), \"=d\" (cpu_info[3]) :\n                          \"0\" (cpu_info_type), \"2\" (0U));\n# endif\n#else\n    cpu_info[0] = cpu_info[1] = cpu_info[2] = cpu_info[3] = 0;\n#endif\n}\n\nstatic int\n_sodium_runtime_intel_cpu_features(CPUFeatures * const cpu_features)\n{\n    unsigned int cpu_info[4];\n    unsigned int id;\n\n    _cpuid(cpu_info, 0x0);\n    if ((id = cpu_info[0]) == 0U) {\n        return -1; /* LCOV_EXCL_LINE */\n    }\n    _cpuid(cpu_info, 0x00000001);\n#if defined(HAVE_EMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_sse2 = ((cpu_info[3] & CPUID_SSE2) != 0x0);\n#else\n    cpu_features->has_sse2 = 0;\n#endif\n\n#if defined(HAVE_PMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_sse3 = ((cpu_info[2] & CPUIDECX_SSE3) != 0x0);\n#else\n    cpu_features->has_sse3 = 0;\n#endif\n\n#if defined(HAVE_TMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_ssse3 = ((cpu_info[2] & CPUIDECX_SSSE3) != 0x0);\n#else\n    cpu_features->has_ssse3 = 0;\n#endif\n\n#if defined(HAVE_SMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_sse41 = ((cpu_info[2] & CPUIDECX_SSE41) != 0x0);\n#else\n    cpu_features->has_sse41 = 0;\n#endif\n\n#if defined(HAVE_AVXINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_avx = ((cpu_info[2] & CPUIDECX_AVX) != 0x0);\n#else\n    cpu_features->has_avx = 0;\n#endif\n\n#if defined(HAVE_WMMINTRIN_H) || \\\n    (defined(_MSC_VER) && (defined(_M_X64) || defined(_M_AMD64) || defined(_M_IX86)))\n    cpu_features->has_pclmul = ((cpu_info[2] & CPUIDECX_PCLMUL) != 0x0);\n    cpu_features->has_aesni = ((cpu_info[2] & CPUIDECX_AESNI) != 0x0);\n#else\n    cpu_features->has_pclmul = 0;\n    cpu_features->has_aesni = 0;\n#endif\n\n    return 0;\n}\n\nint\n_sodium_runtime_get_cpu_features(void)\n{\n    int ret = -1;\n\n    ret &= _sodium_runtime_arm_cpu_features(&_cpu_features);\n    ret &= _sodium_runtime_intel_cpu_features(&_cpu_features);\n    _cpu_features.initialized = 1;\n\n    return ret;\n}\n\nint\nsodium_runtime_has_neon(void) {\n    return _cpu_features.has_neon;\n}\n\nint\nsodium_runtime_has_sse2(void) {\n    return _cpu_features.has_sse2;\n}\n\nint\nsodium_runtime_has_sse3(void) {\n    return _cpu_features.has_sse3;\n}\n\nint\nsodium_runtime_has_ssse3(void) {\n    return _cpu_features.has_ssse3;\n}\n\nint\nsodium_runtime_has_sse41(void) {\n    return _cpu_features.has_sse41;\n}\n\nint\nsodium_runtime_has_avx(void) {\n    return _cpu_features.has_avx;\n}\n\nint\nsodium_runtime_has_pclmul(void) {\n    return _cpu_features.has_pclmul;\n}\n\nint\nsodium_runtime_has_aesni(void) {\n    return _cpu_features.has_aesni;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/sodium/utils.c",
    "content": "#ifndef __STDC_WANT_LIB_EXT1__\n# define __STDC_WANT_LIB_EXT1__ 1\n#endif\n#include <assert.h>\n#include <errno.h>\n#include <limits.h>\n#include <signal.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <string.h>\n\n#ifdef HAVE_SYS_MMAN_H\n# include <sys/mman.h>\n#endif\n\n#include \"utils.h\"\n#include \"randombytes.h\"\n#ifdef _WIN32\n# include <windows.h>\n# include <wincrypt.h>\n#else\n# include <unistd.h>\n#endif\n\n#if defined(_WIN32) && (!defined(WINAPI_FAMILY) || WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)\n# define WINAPI_DESKTOP\n#endif\n\n#define CANARY_SIZE 16U\n#define GARBAGE_VALUE 0xd0\n\n#ifndef MAP_NOCORE\n# define MAP_NOCORE 0\n#endif\n#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS)\n# define MAP_ANON MAP_ANONYMOUS\n#endif\n#if defined(WINAPI_DESKTOP) || (defined(MAP_ANON) && defined(HAVE_MMAP)) || defined(HAVE_POSIX_MEMALIGN)\n# define HAVE_ALIGNED_MALLOC\n#endif\n#if defined(HAVE_MPROTECT) && !(defined(PROT_NONE) && defined(PROT_READ) && defined(PROT_WRITE))\n# undef HAVE_MPROTECT\n#endif\n#if defined(HAVE_ALIGNED_MALLOC) && (defined(WINAPI_DESKTOP) || defined(HAVE_MPROTECT))\n# define HAVE_PAGE_PROTECTION\n#endif\n\nstatic size_t page_size;\nstatic unsigned char canary[CANARY_SIZE];\n\n#ifdef HAVE_WEAK_SYMBOLS\n__attribute__((weak)) void\n_sodium_dummy_symbol_to_prevent_memzero_lto(void * const pnt, const size_t len)\n{\n    (void) pnt;\n    (void) len;\n}\n#endif\n\nvoid\nsodium_memzero(void * const pnt, const size_t len)\n{\n#ifdef _WIN32\n    SecureZeroMemory(pnt, len);\n#elif defined(HAVE_MEMSET_S)\n    if (memset_s(pnt, (rsize_t) len, 0, (rsize_t) len) != 0) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n#elif defined(HAVE_EXPLICIT_BZERO)\n    explicit_bzero(pnt, len);\n#elif HAVE_WEAK_SYMBOLS\n    memset(pnt, 0, len);\n    _sodium_dummy_symbol_to_prevent_memzero_lto(pnt, len);\n#else\n    volatile unsigned char *pnt_ = (volatile unsigned char *) pnt;\n    size_t                     i = (size_t) 0U;\n\n    while (i < len) {\n        pnt_[i++] = 0U;\n    }\n#endif\n}\n\n#ifdef HAVE_WEAK_SYMBOLS\n__attribute__((weak)) void\n_sodium_dummy_symbol_to_prevent_memcmp_lto(const unsigned char *b1,\n                                           const unsigned char *b2,\n                                           const size_t len)\n{\n    (void) b1;\n    (void) b2;\n    (void) len;\n}\n#endif\n\nint\nsodium_memcmp(const void * const b1_, const void * const b2_, size_t len)\n{\n#ifdef HAVE_WEAK_SYMBOLS\n    const unsigned char *b1 = (const unsigned char *) b1_;\n    const unsigned char *b2 = (const unsigned char *) b2_;\n#else\n    const volatile unsigned char *b1 = (const volatile unsigned char *) b1_;\n    const volatile unsigned char *b2 = (const volatile unsigned char *) b2_;\n#endif\n    size_t               i;\n    unsigned char        d = (unsigned char) 0U;\n\n#if HAVE_WEAK_SYMBOLS\n    _sodium_dummy_symbol_to_prevent_memcmp_lto(b1, b2, len);\n#endif\n    for (i = 0U; i < len; i++) {\n        d |= b1[i] ^ b2[i];\n    }\n    return (1 & ((d - 1) >> 8)) - 1;\n}\n\n#ifdef HAVE_WEAK_SYMBOLS\n__attribute__((weak)) void\n_sodium_dummy_symbol_to_prevent_compare_lto(const unsigned char *b1,\n                                            const unsigned char *b2,\n                                            const size_t len)\n{\n    (void) b1;\n    (void) b2;\n    (void) len;\n}\n#endif\n\nint\nsodium_compare(const unsigned char *b1_, const unsigned char *b2_, size_t len)\n{\n#ifdef HAVE_WEAK_SYMBOLS\n    const unsigned char *b1 = b1_;\n    const unsigned char *b2 = b2_;\n#else\n    const volatile unsigned char *b1 = (const volatile unsigned char *) b1_;\n    const volatile unsigned char *b2 = (const volatile unsigned char *) b2_;\n#endif\n    unsigned char gt = 0U;\n    unsigned char eq = 1U;\n    size_t        i;\n\n#if HAVE_WEAK_SYMBOLS\n    _sodium_dummy_symbol_to_prevent_compare_lto(b1, b2, len);\n#endif\n    i = len;\n    while (i != 0U) {\n        i--;\n        gt |= ((b2[i] - b1[i]) >> 8) & eq;\n        eq &= ((b2[i] ^ b1[i]) - 1) >> 8;\n    }\n    return (int) (gt + gt + eq) - 1;\n}\n\nint\nsodium_is_zero(const unsigned char *n, const size_t nlen)\n{\n    size_t        i;\n    unsigned char d = 0U;\n\n    for (i = 0U; i < nlen; i++) {\n        d |= n[i];\n    }\n    return 1 & ((d - 1) >> 8);\n}\n\nvoid\nsodium_increment(unsigned char *n, const size_t nlen)\n{\n    size_t        i = 0U;\n    uint_fast16_t c = 1U;\n\n#ifdef HAVE_AMD64_ASM\n    uint64_t      t64, t64_2;\n    uint32_t      t32;\n\n    if (nlen == 12U) {\n        __asm__ __volatile__(\"xorq %[t64], %[t64] \\n\"\n                             \"xorl %[t32], %[t32] \\n\"\n                             \"stc \\n\"\n                             \"adcq %[t64], (%[out]) \\n\"\n                             \"adcl %[t32], 8(%[out]) \\n\"\n                             : [t64] \"=&r\"(t64), [t32] \"=&r\" (t32)\n                             : [out] \"D\"(n)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    } else if (nlen == 24U) {\n        __asm__ __volatile__(\"movq $1, %[t64] \\n\"\n                             \"xorq %[t64_2], %[t64_2] \\n\"\n                             \"addq %[t64], (%[out]) \\n\"\n                             \"adcq %[t64_2], 8(%[out]) \\n\"\n                             \"adcq %[t64_2], 16(%[out]) \\n\"\n                             : [t64] \"=&r\"(t64), [t64_2] \"=&r\" (t64_2)\n                             : [out] \"D\"(n)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    } else if (nlen == 8U) {\n        __asm__ __volatile__(\"incq (%[out]) \\n\"\n                             :\n                             : [out] \"D\"(n)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    }\n#endif\n    for (; i < nlen; i++) {\n        c += (uint_fast16_t) n[i];\n        n[i] = (unsigned char) c;\n        c >>= 8;\n    }\n}\n\nvoid\nsodium_add(unsigned char *a, const unsigned char *b, const size_t len)\n{\n    size_t        i = 0U;\n    uint_fast16_t c = 0U;\n\n#ifdef HAVE_AMD64_ASM\n    uint64_t      t64, t64_2, t64_3;\n    uint32_t      t32;\n\n    if (len == 12U) {\n        __asm__ __volatile__(\"movq (%[in]), %[t64] \\n\"\n                             \"movl 8(%[in]), %[t32] \\n\"\n                             \"addq %[t64], (%[out]) \\n\"\n                             \"adcl %[t32], 8(%[out]) \\n\"\n                             : [t64] \"=&r\"(t64), [t32] \"=&r\" (t32)\n                             : [in] \"S\"(b), [out] \"D\"(a)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    } else if (len == 24U) {\n        __asm__ __volatile__(\"movq (%[in]), %[t64] \\n\"\n                             \"movq 8(%[in]), %[t64_2] \\n\"\n                             \"movq 16(%[in]), %[t64_3] \\n\"\n                             \"addq %[t64], (%[out]) \\n\"\n                             \"adcq %[t64_2], 8(%[out]) \\n\"\n                             \"adcq %[t64_3], 16(%[out]) \\n\"\n                             : [t64] \"=&r\"(t64), [t64_2] \"=&r\"(t64_2), [t64_3] \"=&r\"(t64_3)\n                             : [in] \"S\"(b), [out] \"D\"(a)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    } else if (len == 8U) {\n        __asm__ __volatile__(\"movq (%[in]), %[t64] \\n\"\n                             \"addq %[t64], (%[out]) \\n\"\n                             : [t64] \"=&r\"(t64)\n                             : [in] \"S\"(b), [out] \"D\"(a)\n                             : \"memory\", \"flags\", \"cc\");\n        return;\n    }\n#endif\n    for (; i < len; i++) {\n        c += (uint_fast16_t) a[i] + (uint_fast16_t) b[i];\n        a[i] = (unsigned char) c;\n        c >>= 8;\n    }\n}\n\n/* Derived from original code by CodesInChaos */\nchar *\nsodium_bin2hex(char * const hex, const size_t hex_maxlen,\n               const unsigned char * const bin, const size_t bin_len)\n{\n    size_t       i = (size_t) 0U;\n    unsigned int x;\n    int          b;\n    int          c;\n\n    if (bin_len >= SIZE_MAX / 2 || hex_maxlen <= bin_len * 2U) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    while (i < bin_len) {\n        c = bin[i] & 0xf;\n        b = bin[i] >> 4;\n        x = (unsigned char) (87U + c + (((c - 10U) >> 8) & ~38U)) << 8 |\n            (unsigned char) (87U + b + (((b - 10U) >> 8) & ~38U));\n        hex[i * 2U] = (char) x;\n        x >>= 8;\n        hex[i * 2U + 1U] = (char) x;\n        i++;\n    }\n    hex[i * 2U] = 0U;\n\n    return hex;\n}\n\nint\nsodium_hex2bin(unsigned char * const bin, const size_t bin_maxlen,\n               const char * const hex, const size_t hex_len,\n               const char * const ignore, size_t * const bin_len,\n               const char ** const hex_end)\n{\n    size_t        bin_pos = (size_t) 0U;\n    size_t        hex_pos = (size_t) 0U;\n    int           ret = 0;\n    unsigned char c;\n    unsigned char c_acc = 0U;\n    unsigned char c_alpha0, c_alpha;\n    unsigned char c_num0, c_num;\n    unsigned char c_val;\n    unsigned char state = 0U;\n\n    while (hex_pos < hex_len) {\n        c = (unsigned char) hex[hex_pos];\n        c_num = c ^ 48U;\n        c_num0 = (c_num - 10U) >> 8;\n        c_alpha = (c & ~32U) - 55U;\n        c_alpha0 = ((c_alpha - 10U) ^ (c_alpha - 16U)) >> 8;\n        if ((c_num0 | c_alpha0) == 0U) {\n            if (ignore != NULL && state == 0U && strchr(ignore, c) != NULL) {\n                hex_pos++;\n                continue;\n            }\n            break;\n        }\n        c_val = (c_num0 & c_num) | (c_alpha0 & c_alpha);\n        if (bin_pos >= bin_maxlen) {\n            ret = -1;\n            errno = ERANGE;\n            break;\n        }\n        if (state == 0U) {\n            c_acc = c_val * 16U;\n        } else {\n            bin[bin_pos++] = c_acc | c_val;\n        }\n        state = ~state;\n        hex_pos++;\n    }\n    if (state != 0U) {\n        hex_pos--;\n    }\n    if (hex_end != NULL) {\n        *hex_end = &hex[hex_pos];\n    }\n    if (bin_len != NULL) {\n        *bin_len = bin_pos;\n    }\n    return ret;\n}\n\nint\n_sodium_alloc_init(void)\n{\n#ifdef HAVE_ALIGNED_MALLOC\n# if defined(_SC_PAGESIZE)\n    long page_size_ = sysconf(_SC_PAGESIZE);\n    if (page_size_ > 0L) {\n        page_size = (size_t) page_size_;\n    }\n# elif defined(WINAPI_DESKTOP)\n    SYSTEM_INFO si;\n    GetSystemInfo(&si);\n    page_size = (size_t) si.dwPageSize;\n# endif\n    if (page_size < CANARY_SIZE || page_size < sizeof(size_t)) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n#endif\n    randombytes_buf(canary, sizeof canary);\n\n    return 0;\n}\n\nint\nsodium_mlock(void * const addr, const size_t len)\n{\n#if defined(MADV_DONTDUMP) && defined(HAVE_MADVISE)\n    (void) madvise(addr, len, MADV_DONTDUMP);\n#endif\n#ifdef HAVE_MLOCK\n    return mlock(addr, len);\n#elif defined(WINAPI_DESKTOP)\n    return -(VirtualLock(addr, len) == 0);\n#else\n    errno = ENOSYS;\n    return -1;\n#endif\n}\n\nint\nsodium_munlock(void * const addr, const size_t len)\n{\n    sodium_memzero(addr, len);\n#if defined(MADV_DODUMP) && defined(HAVE_MADVISE)\n    (void) madvise(addr, len, MADV_DODUMP);\n#endif\n#ifdef HAVE_MLOCK\n    return munlock(addr, len);\n#elif defined(WINAPI_DESKTOP)\n    return -(VirtualUnlock(addr, len) == 0);\n#else\n    errno = ENOSYS;\n    return -1;\n#endif\n}\n\nstatic int\n_mprotect_noaccess(void *ptr, size_t size)\n{\n#ifdef HAVE_MPROTECT\n    return mprotect(ptr, size, PROT_NONE);\n#elif defined(WINAPI_DESKTOP)\n    DWORD old;\n    return -(VirtualProtect(ptr, size, PAGE_NOACCESS, &old) == 0);\n#else\n    errno = ENOSYS;\n    return -1;\n#endif\n}\n\nstatic int\n_mprotect_readonly(void *ptr, size_t size)\n{\n#ifdef HAVE_MPROTECT\n    return mprotect(ptr, size, PROT_READ);\n#elif defined(WINAPI_DESKTOP)\n    DWORD old;\n    return -(VirtualProtect(ptr, size, PAGE_READONLY, &old) == 0);\n#else\n    errno = ENOSYS;\n    return -1;\n#endif\n}\n\nstatic int\n_mprotect_readwrite(void *ptr, size_t size)\n{\n#ifdef HAVE_MPROTECT\n    return mprotect(ptr, size, PROT_READ | PROT_WRITE);\n#elif defined(WINAPI_DESKTOP)\n    DWORD old;\n    return -(VirtualProtect(ptr, size, PAGE_READWRITE, &old) == 0);\n#else\n    errno = ENOSYS;\n    return -1;\n#endif\n}\n\n#ifdef HAVE_ALIGNED_MALLOC\n\nstatic void\n_out_of_bounds(void)\n{\n# ifdef SIGSEGV\n    raise(SIGSEGV);\n# elif defined(SIGKILL)\n    raise(SIGKILL);\n# endif\n    abort();\n} /* LCOV_EXCL_LINE */\n\nstatic inline size_t\n_page_round(const size_t size)\n{\n    const size_t page_mask = page_size - 1U;\n\n    return (size + page_mask) & ~page_mask;\n}\n\nstatic __attribute__((malloc)) unsigned char *\n_alloc_aligned(const size_t size)\n{\n    void *ptr;\n\n# if defined(MAP_ANON) && defined(HAVE_MMAP)\n    if ((ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,\n                    MAP_ANON | MAP_PRIVATE | MAP_NOCORE, -1, 0)) == MAP_FAILED) {\n        ptr = NULL; /* LCOV_EXCL_LINE */\n    } /* LCOV_EXCL_LINE */\n# elif defined(HAVE_POSIX_MEMALIGN)\n    if (posix_memalign(&ptr, page_size, size) != 0) {\n        ptr = NULL; /* LCOV_EXCL_LINE */\n    } /* LCOV_EXCL_LINE */\n# elif defined(WINAPI_DESKTOP)\n    ptr = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);\n# else\n#  error Bug\n# endif\n    return (unsigned char *) ptr;\n}\n\nstatic void\n_free_aligned(unsigned char * const ptr, const size_t size)\n{\n# if defined(MAP_ANON) && defined(HAVE_MMAP)\n    (void) munmap(ptr, size);\n# elif defined(HAVE_POSIX_MEMALIGN)\n    free(ptr);\n# elif defined(WINAPI_DESKTOP)\n    VirtualFree(ptr, 0U, MEM_RELEASE);\n# else\n#  error Bug\n# endif\n}\n\nstatic unsigned char *\n_unprotected_ptr_from_user_ptr(void * const ptr)\n{\n    uintptr_t      unprotected_ptr_u;\n    unsigned char *canary_ptr;\n    size_t         page_mask;\n\n    canary_ptr = ((unsigned char *) ptr) - sizeof canary;\n    page_mask = page_size - 1U;\n    unprotected_ptr_u = ((uintptr_t) canary_ptr & (uintptr_t) ~page_mask);\n    if (unprotected_ptr_u <= page_size * 2U) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    return (unsigned char *) unprotected_ptr_u;\n}\n\n#endif /* HAVE_ALIGNED_MALLOC */\n\n#ifndef HAVE_ALIGNED_MALLOC\nstatic __attribute__((malloc)) void *\n_sodium_malloc(const size_t size)\n{\n    return malloc(size);\n}\n#else\nstatic __attribute__((malloc)) void *\n_sodium_malloc(const size_t size)\n{\n    void          *user_ptr;\n    unsigned char *base_ptr;\n    unsigned char *canary_ptr;\n    unsigned char *unprotected_ptr;\n    size_t         size_with_canary;\n    size_t         total_size;\n    size_t         unprotected_size;\n\n    if (size >= (size_t) SIZE_MAX - page_size * 4U) {\n        errno = ENOMEM;\n        return NULL;\n    }\n    if (page_size <= sizeof canary || page_size < sizeof unprotected_size) {\n        abort(); /* LCOV_EXCL_LINE */\n    }\n    size_with_canary = (sizeof canary) + size;\n    unprotected_size = _page_round(size_with_canary);\n    total_size = page_size + page_size + unprotected_size + page_size;\n    if ((base_ptr = _alloc_aligned(total_size)) == NULL) {\n        return NULL; /* LCOV_EXCL_LINE */\n    }\n    unprotected_ptr = base_ptr + page_size * 2U;\n    _mprotect_noaccess(base_ptr + page_size, page_size);\n# ifndef HAVE_PAGE_PROTECTION\n    memcpy(unprotected_ptr + unprotected_size, canary, sizeof canary);\n# endif\n    _mprotect_noaccess(unprotected_ptr + unprotected_size, page_size);\n    sodium_mlock(unprotected_ptr, unprotected_size);\n    canary_ptr = unprotected_ptr + _page_round(size_with_canary) -\n        size_with_canary;\n    user_ptr = canary_ptr + sizeof canary;\n    memcpy(canary_ptr, canary, sizeof canary);\n    memcpy(base_ptr, &unprotected_size, sizeof unprotected_size);\n    _mprotect_readonly(base_ptr, page_size);\n    assert(_unprotected_ptr_from_user_ptr(user_ptr) == unprotected_ptr);\n\n    return user_ptr;\n}\n#endif /* !HAVE_ALIGNED_MALLOC */\n\n__attribute__((malloc)) void *\nsodium_malloc(const size_t size)\n{\n    void *ptr;\n\n    if ((ptr = _sodium_malloc(size)) == NULL) {\n        return NULL; /* LCOV_EXCL_LINE */\n    }\n    memset(ptr, (int) GARBAGE_VALUE, size);\n\n    return ptr;\n}\n\n__attribute__((malloc)) void *\nsodium_allocarray(size_t count, size_t size)\n{\n    size_t total_size;\n\n    if (count > (size_t) 0U && size >= (size_t) SIZE_MAX / count) {\n        errno = ENOMEM;\n        return NULL;\n    }\n    total_size = count * size;\n\n    return sodium_malloc(total_size);\n}\n\n#ifndef HAVE_ALIGNED_MALLOC\nvoid\nsodium_free(void *ptr)\n{\n    free(ptr);\n}\n#else\nvoid\nsodium_free(void *ptr)\n{\n    unsigned char *base_ptr;\n    unsigned char *canary_ptr;\n    unsigned char *unprotected_ptr;\n    size_t         total_size;\n    size_t         unprotected_size;\n\n    if (ptr == NULL) {\n        return;\n    }\n    canary_ptr = ((unsigned char *) ptr) - sizeof canary;\n    unprotected_ptr = _unprotected_ptr_from_user_ptr(ptr);\n    base_ptr = unprotected_ptr - page_size * 2U;\n    memcpy(&unprotected_size, base_ptr, sizeof unprotected_size);\n    total_size = page_size + page_size + unprotected_size + page_size;\n    _mprotect_readwrite(base_ptr, total_size);\n    if (sodium_memcmp(canary_ptr, canary, sizeof canary) != 0) {\n        _out_of_bounds();\n    }\n# ifndef HAVE_PAGE_PROTECTION\n    if (sodium_memcmp(unprotected_ptr + unprotected_size,\n                      canary, sizeof canary) != 0) {\n        _out_of_bounds();\n    }\n# endif\n    sodium_munlock(unprotected_ptr, unprotected_size);\n    _free_aligned(base_ptr, total_size);\n}\n#endif /* HAVE_ALIGNED_MALLOC */\n\n#ifndef HAVE_PAGE_PROTECTION\nstatic int\n_sodium_mprotect(void *ptr, int (*cb)(void *ptr, size_t size))\n{\n    (void) ptr;\n    (void) cb;\n    errno = ENOSYS;\n    return -1;\n}\n#else\nstatic int\n_sodium_mprotect(void *ptr, int (*cb)(void *ptr, size_t size))\n{\n    unsigned char *base_ptr;\n    unsigned char *unprotected_ptr;\n    size_t         unprotected_size;\n\n    unprotected_ptr = _unprotected_ptr_from_user_ptr(ptr);\n    base_ptr = unprotected_ptr - page_size * 2U;\n    memcpy(&unprotected_size, base_ptr, sizeof unprotected_size);\n\n    return cb(unprotected_ptr, unprotected_size);\n}\n#endif\n\nint\nsodium_mprotect_noaccess(void *ptr)\n{\n    return _sodium_mprotect(ptr, _mprotect_noaccess);\n}\n\nint\nsodium_mprotect_readonly(void *ptr)\n{\n    return _sodium_mprotect(ptr, _mprotect_readonly);\n}\n\nint\nsodium_mprotect_readwrite(void *ptr)\n{\n    return _sodium_mprotect(ptr, _mprotect_readwrite);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libsodium/src/libsodium/sodium/version.c",
    "content": "\n#include \"version.h\"\n\nconst char *\nsodium_version_string(void)\n{\n    return SODIUM_VERSION_STRING;\n}\n\nint\nsodium_library_version_major(void)\n{\n    return SODIUM_LIBRARY_VERSION_MAJOR;\n}\n\nint\nsodium_library_version_minor(void)\n{\n    return SODIUM_LIBRARY_VERSION_MINOR;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/COPYING.LGPL",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 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[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 below.\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 becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed 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 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 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\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    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 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 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 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 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 Street, 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 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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/Makefile.am",
    "content": "# This file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nSRCS   = udns_dn.c udns_dntosp.c udns_parse.c udns_resolver.c udns_init.c \\\n\tudns_misc.c udns_XtoX.c \\\n\tudns_rr_a.c udns_rr_ptr.c udns_rr_mx.c udns_rr_txt.c udns_bl.c \\\n\tudns_rr_srv.c udns_rr_naptr.c udns_codes.c udns_jran.c\nnoinst_LTLIBRARIES=libudns.la\nlibudns_la_SOURCES= ${SRCS}\nlibudns_la_LDFLAGS= -static\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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 file is part of libasyncns.\n#\n# Copyright 2005-2008 Lennart Poettering\n#\n# libasyncns is free software; you can redistribute it and/or modify\n# it under the terms of the GNU Lesser General Public License as\n# published by the Free Software Foundation, either version 2.1 of the\n# License, or (at your option) any later version.\n#\n# libasyncns 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# 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 libasyncns. If not, see\n# <http://www.gnu.org/licenses/>.\n\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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 = libudns\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/auto/depcomp NEWS TODO\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nLTLIBRARIES = $(noinst_LTLIBRARIES)\nlibudns_la_LIBADD =\nam__objects_1 = udns_dn.lo udns_dntosp.lo udns_parse.lo \\\n\tudns_resolver.lo udns_init.lo udns_misc.lo udns_XtoX.lo \\\n\tudns_rr_a.lo udns_rr_ptr.lo udns_rr_mx.lo udns_rr_txt.lo \\\n\tudns_bl.lo udns_rr_srv.lo udns_rr_naptr.lo udns_codes.lo \\\n\tudns_jran.lo\nam_libudns_la_OBJECTS = $(am__objects_1)\nlibudns_la_OBJECTS = $(am_libudns_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibudns_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(libudns_la_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/auto/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libudns_la_SOURCES)\nDIST_SOURCES = $(libudns_la_SOURCES)\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nSRCS = udns_dn.c udns_dntosp.c udns_parse.c udns_resolver.c udns_init.c \\\n\tudns_misc.c udns_XtoX.c \\\n\tudns_rr_a.c udns_rr_ptr.c udns_rr_mx.c udns_rr_txt.c udns_bl.c \\\n\tudns_rr_srv.c udns_rr_naptr.c udns_codes.c udns_jran.c\n\nnoinst_LTLIBRARIES = libudns.la\nlibudns_la_SOURCES = ${SRCS}\nlibudns_la_LDFLAGS = -static\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libudns/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign libudns/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\nclean-noinstLTLIBRARIES:\n\t-test -z \"$(noinst_LTLIBRARIES)\" || rm -f $(noinst_LTLIBRARIES)\n\t@list='$(noinst_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\n\nlibudns.la: $(libudns_la_OBJECTS) $(libudns_la_DEPENDENCIES) $(EXTRA_libudns_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libudns_la_LINK)  $(libudns_la_OBJECTS) $(libudns_la_LIBADD) $(LIBS)\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)/udns_XtoX.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_bl.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_codes.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_dn.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_dntosp.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_init.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_jran.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_misc.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_parse.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_resolver.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_a.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_mx.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_naptr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_ptr.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_srv.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udns_rr_txt.Plo@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES)\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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-libtool clean-noinstLTLIBRARIES \\\n\tmostlyclean-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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am:\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am:\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am:\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \\\n\tclean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \\\n\tctags-am distclean distclean-compile distclean-generic \\\n\tdistclean-libtool distclean-tags distdir dvi dvi-am html \\\n\thtml-am info info-am install install-am install-data \\\n\tinstall-data-am install-dvi install-dvi-am install-exec \\\n\tinstall-exec-am install-html install-html-am install-info \\\n\tinstall-info-am install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-am uninstall uninstall-am\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/NEWS",
    "content": "NEWS\nUser-visible changes in udns library.  Recent changes on top.\n\n0.4 (Jan 2014)\n\n - bugfix: fix a bug in new list code introduced in 0.3\n - portability: use $(LD)/$(LDFLAGS)/$(LIBS)\n\n0.3 (Jan 2014)\n\n - bugfix: refactor double-linked list implementation in udns_resolver.c\n   (internal to the library) to be more strict-aliasing-friendly, because\n   old code were miscompiled by gcc.\n\n - bugfix: forgotten strdup() in rblcheck\n\n0.2 (Dec 2011)\n\n - bugfix: SRV RR handling: fix domain name parsing and crash in case\n   if no port is specified on input for SRV record query\n\n - (trivial api) dns_set_opts() now returns number of unrecognized \n   options instead of always returning 0\n\n - dnsget: combine -f and -o options in dnsget (and stop documenting -f),\n   and report unknown/invalid -o options (and error out)\n\n - dnsget: pretty-print SSHFP RRs\n\n 0.1 (Dec 2010)\n\n - bugfix: udns_new(old) - when actually cloning another context -\n   makes the new context referencing memory from old, which leads\n   to crashes when old is modified later\n\n - use random queue IDs (the 16bit qID) in queries instead of sequentional\n   ones, based on simple pseudo-random RNG by Bob Jenkins (udns_jran.[ch]).\n   Some people believe that this improves security (CVE-2008-1447).  I'm\n   still not convinced (see comments in udns_resolver.c), but it isn't\n   difficult to add after all.\n\n - deprecate dns_random16() function which was declared in udns.h\n   (not anymore) but never documented.  In order to keep ABI compatible\n   it is still exported.\n\n - library has a way now to set query flags (DNS_SET_DO; DNS_SET_CD).\n\n - dnsget now prints non-printable chars in all strings in DNS RRs using\n   decimal escape sequences (\\%03u) instead of hexadecimal (\\%02x) when\n   before - other DNS software does it like this.\n\n - recognize a few more record types in dnsget, notable some DNSSEC RRs;\n   add -f option for dnsget to set query flags.\n\n - udns is not a Debian native package anymore (was a wrong idea)\n\n0.0.9 (16 Jan 2007)\n\n - incompat: minor API changes in dns_init() &friends.  dns_init()\n   now requires extra `struct dns_ctx *' argument.  Not bumped\n   soversion yet - I only expect one \"release\" with this change.\n\n - many small bugfixes, here and there\n\n - more robust FORMERR replies handling - not only such replies are now\n   recognized, but udns retries queries without EDNS0 extensions if tried\n   with, but server reported FORMERR\n\n - portability changes, udns now includes getopt() implementation fo\n   the systems lacking it (mostly windows), and dns_ntop()&dns_pton(),\n   which are either just wrappers for system functions or reimplementations.\n\n - build is now based on autoconf-like configuration\n\n - NAPTR (RFC3403) RR decoding support\n\n - new file NOTES which complements TODO somewhat, and includes some\n   important shortcomings\n\n - many internal cleanups, including some preparations for better error\n   recovery, security and robustness (and thus API changes)\n\n - removed some #defines which are now unused (like DNS_MAXSRCH)\n\n - changed WIN32 to WINDOWS everywhere in preprocessor tests,\n   to be able to build it on win64 as well\n\n0.0.8 (12 Sep 2005)\n\n - added SRV records (rfc2782) parsing,\n   thanks to Thadeu Lima de Souza Cascardo for implementation.\n\n - bugfixes:\n   o use uninitialized value when no reply, library died with assertion:\n     assert((status < 0 && result == 0) || (status >= 0 && result != 0)).\n   o on some OSes, struct sockaddr_in has additional fields, so\n     memcmp'ing two sockaddresses does not work.\n\n - rblcheck(.1)\n\n0.0.7 (20 Apr 2005)\n\n - dnsget.1 manpage and several enhancements to dnsget.\n\n - allow nameserver names for -n option of dnsget.\n\n - API change: all dns_submit*() routines now does not expect\n   last `now' argument, since requests aren't sent immediately\n   anymore.\n\n - API change: different application timer callback mechanism.\n   Udns now uses single per-context timer instead of per-query.\n\n - don't assume DNS replies only contain backward DN pointers,\n   allow forward pointers too.  Change parsing API.\n\n - debianize\n\n0.0.6 (08 Apr 2005)\n\n - use double sorted list for requests (sorted by deadline).\n   This should significantly speed up timeout processing for\n   large number of requests.\n\n - changed debugging interface, so it is finally useable\n   (still not documented).\n\n - dnsget routine is now Officially Useable, and sometimes\n   even more useable than `host' from BIND distribution\n   (and sometimes not - dnsget does not have -C option\n   and TCP mode)\n\n - Debian packaging in debian/ -- udns is now maintained as a\n   native Debian package.\n\n - alot (and I really mean alot) of code cleanups all over.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/NOTES",
    "content": "Assorted notes about udns (library).\n\nUDP-only mode\n~~~~~~~~~~~~~\n\nFirst of all, since udns is (currently) UDP-only, there are some\nshortcomings.\n\nIt assumes that a reply will fit into a UDP buffer.  With adoption of EDNS0,\nand general robustness of IP stacks, in most cases it's not an issue.  But\nin some cases there may be problems:\n\n - if an RRset is \"very large\" so it does not fit even in buffer of size\n   requested by the library (current default is 4096; some servers limits\n   it further), we will not see the reply, or will only see \"damaged\"\n   reply (depending on the server).\n\n - many DNS servers ignores EDNS0 option requests.  In this case, no matter\n   which buffer size udns library will request, such servers reply is limited\n   to 512 bytes (standard pre-EDNS0 DNS packet size).  (Udns falls back to\n   non-EDNO0 query if EDNS0-enabled one received FORMERR or NOTIMPL error).\n\nThe problem is that with this, udns currently will not consider replies with\nTC (truncation) bit set, and will treat such replies the same way as it\ntreats SERVFAIL replies, thus trying next server, or temp-failing the query\nif no more servers to try.  In other words, if the reply is really large, or\nif the servers you're using don't support EDNS0, your application will be\nunable to resolve a given name.\n\nYet it's not common situation - in practice, it's very rare.\n\nImplementing TCP mode isn't difficult, but it complicates API significantly.\nCurrently udns uses only single UDP socket (or - maybe in the future - two,\nsee below), but in case of TCP, it will need to open and close sockets for\nTCP connections left and right, and that have to be integrated into an\napplication's event loop in an easy and efficient way.  Plus all the\ntimeouts - different for connect(), write, and several stages of read.\n\nIPv6 vs IPv4 usage\n~~~~~~~~~~~~~~~~~~\n\nThis is only relevant for nameservers reachable over IPv6, NOT for IPv6\nqueries.  I.e., if you've IPv6 addresses in 'nameservers' line in your\n/etc/resolv.conf file.  Even more: if you have BOTH IPv6 AND IPv4 addresses\nthere.  Or pass them to udns initialization routines.\n\nSince udns uses a single UDP socket to communicate with all nameservers,\nit should support both v4 and v6 communications.  Most current platforms\nsupports this mode - using PF_INET6 socket and V4MAPPED addresses, i.e,\n\"tunnelling\" IPv4 inside IPv6.  But not all systems supports this.  And\nmore, it has been said that such mode is deprecated.\n\nSo, list only IPv4 or only IPv6 addresses, but don't mix them, in your\n/etc/resolv.conf.\n\nAn alternative is to use two sockets instead of 1 - one for IPv6 and one\nfor IPv4.  For now I'm not sure if it's worth the complexity - again, of\nthe API, not the library itself (but this will not simplify library either).\n\nSingle socket for all queries\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nUsing single UDP socket for sending queries to all nameservers has obvious\nadvantages.  First it's, again, trivial, simple to use API.  And simple\nlibrary too.  Also, after sending queries to all nameservers (in case first\ndidn't reply in time), we will be able to receive late reply from first\nnameserver and accept it.\n\nBut this mode has disadvantages too.  Most important is that it's much easier\nto send fake reply to us, as the UDP port where we expects the reply to come\nto is constant during the whole lifetime of an application.  More secure\nimplementations uses random port for every single query.  While port number\n(16 bits integer) can not hold much randomness, it's still of some help.\nOk, udns is a stub resolver, so it expects sorta friendly environment, but\non LAN it's usually much easier to fire an attack, due to the speed of local\nnetwork, where a bad guy can generate alot of packets in a short time.\n\nSpoofing of replies (Kaminsky attack, CVE-2008-1447)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nWhile udns uses random numbers for query IDs, it uses single UDP port for\nall queries (see previous item).  And even if it used random UDP port for\neach query, the attack described in CVE-2008-1447 is still quite trivial.\nThis is not specific to udns library unfortunately - it is inherent property\nof the protocol.  Udns is designed to work in a LAN, it needs full recursive\nresolver nearby, and modern LAN usually uses high-bandwidth equipment which\nmakes the Kaminsky attack trivial.  The problem is that even with qID (16\nbits) and random UDP port (about 20 bits available to a regular process)\ncombined still can not hold enough randomness, so on a fast network it is\nstill easy to flood the target with fake replies and hit the \"right\" reply\nbefore real reply comes.  So random qIDs don't add much protection anyway,\neven if this feature is implemented in udns, and using all available\ntechniques wont solve it either.\n\nSee also long comment in udns_resolver.c, udns_newid().\n\nAssumptions about RRs returned\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCurrently udns processes records in the reply it received sequentially.\nThis means that order of the records is significant.  For example, if\nwe asked for foo.bar A, but the server returned that foo.bar is a CNAME\n(alias) for bar.baz, and bar.baz, in turn, has address 1.2.3.4, when\nthe CNAME should come first in reply, followed by A.  While DNS specs\ndoes not say anything about order of records - it's an rrSET - unordered, -\nI think an implementation which returns the records in \"wrong\" order is\nsomewhat insane...\n\nCNAME recursion\n~~~~~~~~~~~~~~~\n\nAnother interesting point is the handling of CNAMEs returned as replies\nto non-CNAME queries.  If we asked for foo.bar A, but it's a CNAME, udns\nexpects BOTH the CNAME itself and the target DN to be present in the reply.\nIn other words, udns DOES NOT RECURSE CNAMES.  If we asked for foo.bar A,\nbut only record in reply was that foo.bar is a CNAME for bar.baz, udns will\nreturn no records to an application (NXDOMAIN).  Strictly speaking, udns\nshould repeat the query asking for bar.baz A, and recurse.  But since it's\nstub resolver, recursive resolver should recurse for us instead.\n\nIt's not very difficult to implement, however.  Probably with some (global?)\nflag to en/dis-able the feature.  Provided there's some demand for it.\n\nTo clarify: udns handles CNAME recursion in a single reply packet just fine.\n\nNote also that standard gethostbyname() routine does not recurse in this\nsituation, too.\n\nError reporting\n~~~~~~~~~~~~~~~\n\nToo many places in the code (various failure paths) sets generic \"TEMPFAIL\"\nerror condition.  For example, if no nameserver replied to our query, an\napplication will get generic TEMPFAIL, instead of something like TIMEDOUT.\nThis probably should be fixed, but most applications don't care about the\nexact reasons of failure - 4 common cases are already too much:\n  - query returned some valid data\n  - NXDOMAIN\n  - valid domain but no data of requested type - =NXDOMAIN in most cases\n  - temporary error - this one sometimes (incorrectly!) treated as NXDOMAIN\n    by (naive) applications.\nDNS isn't yes/no, it's at least 3 variants, temp err being the 3rd important\ncase!  And adding more variations for the temp error case is complicating things\neven more - again, from an application writer standpoint.  For diagnostics,\nsuch more specific error cases are of good help.\n\nPlanned API changes\n~~~~~~~~~~~~~~~~~~~\n\nAt least one thing I want to change for some future version is a way how\nqueries are submitted and how replies are handled.\n\nI want to made dns_query object to be owned by an application.  So that instead\nof udns library allocating it for the lifetime of query, it will be pre-\nallocated by an application.  This simplifies and enhances query submitting\ninterface, and complicates it a bit too, in simplest cases.\n\nCurrently, we have:\n\ndns_submit_dn(dn, cls, typ, flags, parse, cbck, data)\ndns_submit_p(name, cls, typ, flags, parse, cbck, data)\ndns_submit_a4(ctx, name, flags, cbck, data)\n\nand so on -- with many parameters missed for type-specific cases, but generic\ncases being too complex for most common usage.\n\nInstead, with dns_query being owned by an app, we will be able to separately\nset up various parts of the query - domain name (various forms), type&class,\nparser, flags, callback...  and even change them at runtime.  And we will also\nbe able to reuse query structures, instead of allocating/freeing them every\ntime.  So the whole thing will look something like:\n\n q = dns_alloc_query();\n dns_submit(dns_q_flags(dns_q_a4(q, name, cbck), DNS_F_NOSRCH), data);\n\nThe idea is to have a set of functions accepting struct dns_query* and\nreturning it (so the calls can be \"nested\" like the above), to set up\nrelevant parts of the query - specific type of callback, conversion from\n(type-specific) query parameters into a domain name (this is for type-\nspecific query initializers), and setting various flags and options and\ntype&class things.\n\nOne example where this is almost essential - if we want to support\nper-query set of nameservers (which isn't at all useless: imagine a\nhigh-volume mail server, were we want to direct DNSBL queries to a separate\nset of nameservers, and rDNS queries to their own set and so on).  Adding\nanother argument (set of nameservers to use) to EVERY query submitting\nroutine is.. insane.  Especially since in 99% cases it will be set to\ndefault NULL.  But with such \"nesting\" of query initializers, it becomes\ntrivial.\n\nThis change (the way how queries gets submitted) will NOT break API/ABI\ncompatibility with old versions, since the new submitting API works in\nparallel with current (and current will use the new one as building\nblocks, instead of doing all work at once).\n\nAnother way to do the same is to manipulate query object right after a\nquery has been submitted, but before any events processing (during this\ntime, query object is allocated and initialized, but no actual network\npackets were sent - it will happen on the next event processing).  But\nthis way it become impossible to perform syncronous resolver calls, since\nthose calls hide query objects they use internally.\n\nSpeaking of replies handling - the planned change is to stop using dynamic\nmemory (malloc) inside the library.  That is, instead of allocating a buffer\nfor a reply dynamically in a parsing routine (or memdup'ing the raw reply\npacket if no parsing routine is specified), I want udns to return the packet\nbuffer it uses internally, and change parsing routines to expect a buffer\nfor result.  When parsing, a routine will return true amount of memory it\nwill need to place the result, regardless of whenever it has enough room\nor not, so that an application can (re)allocate properly sized buffer and\ncall a parsing routine again.\n\nThis, in theory, also can be done without breaking current API/ABI, but in\nthat case we'll again need a parallel set of routines (parsing included),\nwhich makes the library more complicated with too many ways of doing the\nsame thing.  Still, code reuse is at good level.\n\nAnother modification I plan to include is to have an ability to work in\nterms of domain names (DNs) as used with on-wire DNS packets, not only\nwith asciiz representations of them.  For this to work, the above two\nchanges (query submission and result passing) have to be completed first\n(esp. the query submission part), so that it will be possible to specify\nsome additional query flags (for example) to request domain names instead\nof the text strings, and to allow easy query submissions with either DNs\nor text strings.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/TODO",
    "content": "TODO\n\nThe following is mostly an internal, not user-visible stuff.\n\n* rearrange an API to make dns_query object owned by application,\n  so that it'll look like this:\n   struct dns_query *q;\n   q = dns_query_alloc(ctx);\n   dns_query_set(q, options, domain_name, flags, ...);\n   dns_query_submit(ctx, q);\n  For more information see NOTES file, section \"Planned API changes\".\n\n* allow NULL callbacks?  Or provide separate resolver\n  context list of queries which are done but wich did not\n  have callback, and dns_pick() routine to retrieve results\n  from this query, i.e. allow non-callback usage?  The\n  non-callback usage may be handy sometimes (any *good*\n  example?), but it will be difficult to provide type-safe\n  non-callback interface due to various RR-specific types\n  in use.\n\n* DNS_OPT_FLAGS should be DNS_OPT_ADDFLAGS and DNS_OPT_SETFLAGS.\n  Currently one can't add a single flag bit but preserve\n  existing bits... at least not without retrieving all current\n  flags before, which isn't that bad anyway.\n\n* dns_set_opts() may process flags too (such as aaonly etc)\n\n* a way to disable $NSCACHEIP et al processing?\n  (with now separate dns_init() and dns_reset(), it has finer\n  control, but still no way to init from system files but ignore\n  environment variables and the like)\n\n* initialize/open the context automatically, and be more\n  liberal about initialization in general?\n\n* dns_init(ctx, do_open) - make the parameter opposite, aka\n  dns_init(ctx, skip_open) ?\n\n* allow TCP queue?\n\n* more accurate error reporting.  Currently, udns always returns TEMPFAIL,\n  but don't specify why it happened (ENOMEM, timeout, etc).\n\n* check the error value returned by recvfrom() and\n  sendto() and determine which errors to ignore.\n\n* maybe merge dns_timeouts() and dns_ioevent(), to have\n  only one entry point for everything?  For traditional\n  select-loop-based eventloop it may be easier, but for\n  callback-driven event loops the two should be separate.\n  Provide an option, or a single dns_events() entry point\n  for select-loop approach, or just call dns_ioevent()\n  from within dns_timeouts() (probably after renaming\n  it to be dns_events()) ?\n\n* implement /etc/hosts lookup too, ala [c-]ares??\n\n* sortlist support?\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/dnsget.1",
    "content": ".\\\" dnsget.1: dnsget manpage\n.\\\"\n.\\\" Copyright (C) 2005-2014  Michael Tokarev <mjt+udns@tls.msk.ru>\n.\\\" This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n.\\\" write to the Free Software Foundation, Inc., 59 Temple Place,\n.\\\" Suite 330, Boston, MA  02111-1307  USA\n\n.TH dnsget 1 \"Jan 2014\" \"User Utilities\"\n\n.SH NAME\ndnsget \\- DNS lookup utility\n\n.SH SYNOPSYS\n.B dnsget\n.RB [\\| \\-v \\||\\| \\-q \\|]\n.RB [\\| \\-c\n.IR class \\|]\n.RB [\\| \\-t\n.IR type \\|]\n.RB [\\| \\-o\n.IR opt , opt ,...]\n.IR name \\|.\\|.\\|.\n\n.SH DESCRIPTION\n.B dnsget\nis a simple command-line to perform DNS lookups, similar to\n.BR host (1)\nand\n.BR dig (1).\nIt is useable for both interactive/debugging scenarious and\nin scripts.\nThe program is implemented using\n.BR udns (3)\nlibrary.\n\n.PP\nBy default,\n.B dnsget\nproduces a human-readable output, similar to\n.RS\n.nf\nalias.example.com. CNAME www.example.com.\nwww.example.com. A 192.168.1.1\nwww.example.com. MX 10 mx.example.com.\n.fi\n.RE\nwhich is just sufficient to see how a given name resolves.\nOutput format is controllable with\n.B \\-v\nand\n.B \\-q\noptions -- the former increases verbosity level up to printing\nthe whole DNS contents of all packets sent and received, which\nis suitable for debugging DNS problems, while the latter reduces\nthe level, making output more quiet, up to bare result with no\nerror messages, which is good for scripts.\n\n.SH OPTIONS\n\nThe following options are recognized by\n.BR dnsget :\n\n.TP\n.B \\-v\nproduce more detailed output.  More\n.BR \\-v 's\nmeans more details will be produced.  With single\n.BR \\-v , dnsget\nwill print contents of all received DNS packets (in a readable format),\nwhile with\n.BR \\-vv ,\nit will output all outgoing DNS packets too.\n\n.TP\n.B \\-q\nthe opposite for \\fB\\-v\\fR -- produce less detailed output.\nWith single\n.BR \\-q , dnsget\nwill only show (decoded) data from final DNS resource records (RR),\nwhile\n.B \\-qq\nalso suppresses error messages.\n\n.TP\n\\fB\\-t \\fItype\\fR\nrequest record(s) of the given type \\fItype\\fR.  By default,\n.B dnsget\nwill ask for IPv4 address (A) record, or for PTR record if the\nargument in question is an IPv4 or IPv6 address.  Recognized\ntypes include A, AAAA, MX, TXT, CNAME, PTR, NS, SOA, ANY and\nothers.\n\n.TP\n\\fB\\-c \\fIclass\\fR\nrequest DNS record(s) of the given class \\fIclass\\fR.  By\ndefault\n.B dnsget\nuses IN class.  Valid classes include IN, CH, HS, ANY.\n\n.TP\n.B \\-a\n(compatibility option).  Equivalent to setting query type to\n.B ANY\nand increasing verbosity level\n.RB ( \\-v ).\n\n.TP\n.B \\-C\n(planned)\n\n.TP\n.B \\-x\n(planned)\n\n.TP\n\\fB\\-o \\fIopt\\fR,\\fIopt\\fR,...\n(may be specified several times).\nSet resolver options (in a form \\fIoption\\fR:\\fIvalue\\fR) as if they\nwere set in\n.RB $ RES_OPTIONS\nenvironment variable, or set query flags:\n.RS\n.TP\n\\fBtimeout\\fR:\\fIsec\\fR\nSet initial query timeout to \\fIsec\\fR.\n.TP\n\\fBattempts\\fR:\\fInum\\fR\n(re)try every query \\fInum\\fR times before failing.\n.TP\n\\fBudpbuf\\fR:\\fIbytes\\fR\nset DNS UDP buffer size to \\fIbytes\\fR bytes.  Valid values\nare from 512 to 65535.  If \\fIbytes\\fR is greather than 512,\nEDNS0 (RFC 2671) extensions will be used.\n.TP\n\\fBport\\fR:\\fInum\\fR\nUse given UDP port number \\fInum\\fR instead of the default port 53 (domain).\n.TP\n\\fBaa\\fR\nset AA (auth only) query bit.\n.TP\n\\fBnord\\fR\ndo not set RD (recursion desired) query bit (set by default).\n.TP\n\\fBdnssec\\fR or \\fBdo\\fR\nset DNSSEC OK (DO) query flag (\\fBdnsget\\fR does not verify DNSSEC signatures,\nonly displays them; this is set in EDNS RR).\n.TP\n\\fBcd\\fR\nset CD (checking disabled) query bit.\n.RE\n\n.TP\n\\fB\\-n \\fInameserver\\fR\nUse the given nameserver(s) (may be specified more than once)\ninstead of the default.  Using this option has the same same effect as \n.RB $ NSCACHEIP\nor\n.RB $ NAMESERVERS\nenvironment variables, with the only difference that only IPv4 addresses\nare recognized for now, and it is possible to specify names (which will\nbe resolved using default settings) instead of IP addresses.\n\n.TP\n.B \\-h\nprint short help and exit.\n\n.SH \"RETURN VALUE\"\nWhen all names where resovled successefully,\n.B dnsget\nexits with zero exit status.  If at least one name was not found,\n.B dnsget\nwill exit with return code 100.  If some other error occured during\nname resolution, it will exit with code 99.  In case of usage or\ninitialization error,\n.B dnsget\nwill return 1.\n\n.SH \"SEE ALSO\"\n.BR host (1)\n.BR dig (1)\n.BR resolv.conf (5)\n.BR udns (3).\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/dnsget.c",
    "content": "/* dnsget.c\n   simple host/dig-like application using UDNS library\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifdef HAVE_CONFIG_H\n# include \"config.h\"\n#endif\n#ifdef __MINGW32__\n#include <windows.h>\n#include <winsock2.h>\n#else\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <sys/time.h>\n#include <unistd.h>\n#endif\n#include <time.h>\n#include <stdarg.h>\n#include <errno.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"udns.h\"\n\n#ifndef HAVE_GETOPT\n# include \"getopt.c\"\n#endif\n\n#ifndef AF_INET6\n# define AF_INET6 10\n#endif\n\nstatic char *progname;\nstatic int verbose = 1;\nstatic int errors;\nstatic int notfound;\n\n/* verbosity level:\n * <0 - bare result\n *  0 - bare result and error messages\n *  1 - readable result\n *  2 - received packet contents and `trying ...' stuff\n *  3 - sent and received packet contents\n */\n\nstatic void die(int errnum, const char *fmt, ...) {\n  va_list ap;\n  fprintf(stderr, \"%s: \", progname);\n  va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap);\n  if (errnum) fprintf(stderr, \": %s\\n\", strerror(errnum));\n  else putc('\\n', stderr);\n  fflush(stderr);\n  exit(1);\n}\n\nstatic const char *dns_xntop(int af, const void *src) {\n  static char buf[6*5+4*4];\n  return dns_ntop(af, src, buf, sizeof(buf));\n}\n\nstruct query {\n  const char *name;\t\t/* original query string */\n  unsigned char *dn;\t\t/* the DN being looked up */\n  enum dns_type qtyp;\t\t/* type of the query */\n};\n\nstatic void query_free(struct query *q) {\n  free(q->dn);\n  free(q);\n}\n\nstatic struct query *\nquery_new(const char *name, const unsigned char *dn, enum dns_type qtyp) {\n  struct query *q = malloc(sizeof(*q));\n  unsigned l = dns_dnlen(dn);\n  unsigned char *cdn = malloc(l);\n  if (!q || !cdn) die(0, \"out of memory\");\n  memcpy(cdn, dn, l);\n  q->name = name;\n  q->dn = cdn;\n  q->qtyp = qtyp;\n  return q;\n}\n\nstatic enum dns_class qcls = DNS_C_IN;\n\nstatic void\ndnserror(struct query *q, int errnum) {\n  if (verbose >= 0)\n    fprintf(stderr, \"%s: unable to lookup %s record for %s: %s\\n\", progname,\n            dns_typename(q->qtyp), dns_dntosp(q->dn), dns_strerror(errnum));\n  if (errnum == DNS_E_NXDOMAIN || errnum == DNS_E_NODATA)\n    ++notfound;\n  else\n    ++errors;\n  query_free(q);\n}\n\nstatic const unsigned char *\nprinttxt(const unsigned char *c) {\n  unsigned n = *c++;\n  const unsigned char *e = c + n;\n  if (verbose > 0) while(c < e) {\n    if (*c < ' ' || *c >= 127) printf(\"\\\\%03u\", *c);\n    else if (*c == '\\\\' || *c == '\"') printf(\"\\\\%c\", *c);\n    else putchar(*c);\n    ++c;\n  }\n  else\n   fwrite(c, n, 1, stdout);\n  return e;\n}\n\nstatic void\nprinthex(const unsigned char *c, const unsigned char *e) {\n  while(c < e)\n    printf(\"%02x\", *c++);\n}\n\nstatic unsigned char to_b64[] =\n\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nstatic void\nprintb64(const unsigned char *c, const unsigned char *e) {\n  while(c < e) {\n    putchar(to_b64[c[0] >> 2]);\n    if (c+1 < e) {\n      putchar(to_b64[(c[0] & 0x3) << 4 | c[1] >> 4]);\n      if (c+2 < e) {\n        putchar(to_b64[(c[1] & 0xf) << 2 | c[2] >> 6]);\n        putchar(to_b64[c[2] & 0x3f]);\n      }\n      else {\n        putchar(to_b64[(c[1] & 0xf) << 2]);\n\tputchar('=');\n\tbreak;\n      }\n    }\n    else {\n      putchar(to_b64[(c[0] & 0x3) << 4]);\n      putchar('=');\n      putchar('=');\n      break;\n    }\n    c += 3;\n  }\n}\n\nstatic void\nprintdate(time_t time) {\n  struct tm *tm = gmtime(&time);\n  printf(\"%04d%02d%02d%02d%02d%02d\",\n    tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,\n    tm->tm_hour, tm->tm_min, tm->tm_sec);\n}\n\nstatic void\nprintrr(const struct dns_parse *p, struct dns_rr *rr) {\n  const unsigned char *pkt = p->dnsp_pkt;\n  const unsigned char *end = p->dnsp_end;\n  const unsigned char *dptr = rr->dnsrr_dptr;\n  const unsigned char *dend = rr->dnsrr_dend;\n  unsigned char *dn = rr->dnsrr_dn;\n  const unsigned char *c;\n  unsigned n;\n\n  if (verbose > 0) {\n    if (verbose > 1) {\n      if (!p->dnsp_rrl && !rr->dnsrr_dn[0] && rr->dnsrr_typ == DNS_T_OPT) {\n        printf(\";EDNS%d OPT record (UDPsize: %d, ERcode: %d, Flags: 0x%02x): %d bytes\\n\",\n               (rr->dnsrr_ttl>>16) & 0xff,\t/* version */\n               rr->dnsrr_cls,\t\t\t/* udp size */\n               (rr->dnsrr_ttl>>24) & 0xff,\t/* extended rcode */\n               rr->dnsrr_ttl & 0xffff,\t\t/* flags */\n               rr->dnsrr_dsz);\n        return;\n      }\n      n = printf(\"%s.\", dns_dntosp(rr->dnsrr_dn));\n      printf(\"%s%u\\t%s\\t%s\\t\",\n             n > 15 ? \"\\t\" : n > 7 ? \"\\t\\t\" : \"\\t\\t\\t\",\n             rr->dnsrr_ttl,\n             dns_classname(rr->dnsrr_cls),\n             dns_typename(rr->dnsrr_typ));\n    }\n    else\n      printf(\"%s. %s \", dns_dntosp(rr->dnsrr_dn), dns_typename(rr->dnsrr_typ));\n  }\n\n  switch(rr->dnsrr_typ) {\n\n  case DNS_T_CNAME:\n  case DNS_T_PTR:\n  case DNS_T_NS:\n  case DNS_T_MB:\n  case DNS_T_MD:\n  case DNS_T_MF:\n  case DNS_T_MG:\n  case DNS_T_MR:\n    if (dns_getdn(pkt, &dptr, end, dn, DNS_MAXDN) <= 0) goto xperr;\n    printf(\"%s.\", dns_dntosp(dn));\n    break;\n\n  case DNS_T_A:\n    if (rr->dnsrr_dsz != 4) goto xperr;\n    printf(\"%d.%d.%d.%d\", dptr[0], dptr[1], dptr[2], dptr[3]);\n    break;\n\n  case DNS_T_AAAA:\n    if (rr->dnsrr_dsz != 16) goto xperr;\n    printf(\"%s\", dns_xntop(AF_INET6, dptr));\n    break;\n\n  case DNS_T_MX:\n    c = dptr + 2;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 || c != dend) goto xperr;\n    printf(\"%d %s.\", dns_get16(dptr), dns_dntosp(dn));\n    break;\n\n  case DNS_T_TXT:\n    /* first verify it */\n    for(c = dptr; c < dend; c += n) {\n      n = *c++;\n      if (c + n > dend) goto xperr;\n    }\n    c = dptr; n = 0;\n    while (c < dend) {\n      if (verbose > 0) printf(n++ ? \"\\\" \\\"\":\"\\\"\");\n      c = printtxt(c);\n    }\n    if (verbose > 0) putchar('\"');\n    break;\n\n  case DNS_T_HINFO:\t/* CPU, OS */\n    c = dptr;\n    n = *c++; if ((c += n) >= dend) goto xperr;\n    n = *c++; if ((c += n) != dend) goto xperr;\n    c = dptr;\n    if (verbose > 0) putchar('\"');\n    c = printtxt(c);\n    if (verbose > 0) printf(\"\\\" \\\"\"); else putchar(' ');\n    printtxt(c);\n    if (verbose > 0) putchar('\"');\n    break;\n\n  case DNS_T_WKS:\n    c = dptr;\n    if (dptr + 4 + 2 >= end) goto xperr;\n    printf(\"%s %d\", dns_xntop(AF_INET, dptr), dptr[4]);\n    c = dptr + 5;\n    for (n = 0; c < dend; ++c, n += 8) {\n      if (*c) {\n        unsigned b;\n        for (b = 0; b < 8; ++b)\n          if (*c & (1 << (7-b))) printf(\" %d\", n + b);\n      }\n    }\n    break;\n\n  case DNS_T_SRV:\t/* prio weight port targetDN */\n    c = dptr;\n    c += 2 + 2 + 2;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 || c != dend) goto xperr;\n    c = dptr;\n    printf(\"%d %d %d %s.\",\n           dns_get16(c+0), dns_get16(c+2), dns_get16(c+4),\n           dns_dntosp(dn));\n    break;\n\n  case DNS_T_NAPTR:\t/* order pref flags serv regexp repl */\n    c = dptr;\n    c += 4;\t/* order, pref */\n    for (n = 0; n < 3; ++n)\n      if (c >= dend) goto xperr;\n      else c += *c + 1;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 || c != dend) goto xperr;\n    c = dptr;\n    printf(\"%u %u\", dns_get16(c+0), dns_get16(c+2));\n    c += 4;\n    for(n = 0; n < 3; ++n) {\n      putchar(' ');\n      if (verbose > 0) putchar('\"');\n      c = printtxt(c);\n      if (verbose > 0) putchar('\"');\n    }\n    printf(\" %s.\", dns_dntosp(dn));\n    break;\n\n  case DNS_T_KEY:\n  case DNS_T_DNSKEY:\n    /* flags(2) proto(1) algo(1) pubkey */\n  case DNS_T_DS:\n  case DNS_T_DLV:\n    /* ktag(2) proto(1) algo(1) pubkey */\n    c = dptr;\n    if (c + 2 + 1 + 1 > dend) goto xperr;\n    printf(\"%d %d %d\", dns_get16(c), c[2], c[3]);\n    c += 2 + 1 + 1;\n    if (c < dend) {\n      putchar(' ');\n      printb64(c, dend);\n    }\n    break;\n\n  case DNS_T_SIG:\n  case DNS_T_RRSIG:\n    /* type(2) algo(1) labels(1) ottl(4) sexp(4) sinc(4) tag(2) sdn sig */\n    c = dptr;\n    c += 2 + 1 + 1 + 4 + 4 + 4 + 2;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0) goto xperr;\n    printf(\"%s %u %u %u \",\n           dns_typename(dns_get16(dptr)), dptr[2], dptr[3], dns_get32(dptr+4));\n    printdate(dns_get32(dptr+8));\n    putchar(' ');\n    printdate(dns_get32(dptr+12));\n    printf(\" %d %s. \", dns_get16(dptr+10), dns_dntosp(dn));\n    printb64(c, dend);\n    break;\n\n  case DNS_T_SSHFP: /* algo(1), fp type(1), fp... */\n    if (dend < dptr + 3) goto xperr;\n    printf(\"%u %u \", dptr[0], dptr[1]); /* algo, fp type */\n    printhex(dptr + 2, dend);\n    break;\n\n#if 0\t/* unused RR types? */\n  case DNS_T_NSEC: /* nextDN bitmaps */\n    c = dptr;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0) goto xperr;\n    printf(\"%s.\", dns_dntosp(dn));\n    unfinished.\n    break;\n#endif\n\n\n  case DNS_T_SOA:\n    c = dptr;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 ||\n        dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 ||\n        c + 4*5 != dend)\n      goto xperr;\n    dns_getdn(pkt, &dptr, end, dn, DNS_MAXDN);\n    printf(\"%s. \", dns_dntosp(dn));\n    dns_getdn(pkt, &dptr, end, dn, DNS_MAXDN);\n    printf(\"%s. \", dns_dntosp(dn));\n    printf(\"%u %u %u %u %u\",\n           dns_get32(dptr), dns_get32(dptr+4), dns_get32(dptr+8),\n           dns_get32(dptr+12), dns_get32(dptr+16));\n    break;\n\n  case DNS_T_MINFO:\n    c = dptr;\n    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 ||\n        dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 ||\n\tc != dend)\n      goto xperr;\n    dns_getdn(pkt, &dptr, end, dn, DNS_MAXDN);\n    printf(\"%s. \", dns_dntosp(dn));\n    dns_getdn(pkt, &dptr, end, dn, DNS_MAXDN);\n    printf(\"%s.\", dns_dntosp(dn));\n    break;\n\n  case DNS_T_NULL:\n  default:\n    printhex(dptr, dend);\n    break;\n  }\n  putchar('\\n');\n  return;\n\nxperr:\n  printf(\"<parse error>\\n\");\n  ++errors;\n}\n\nstatic int\nprintsection(struct dns_parse *p, int nrr, const char *sname) {\n  struct dns_rr rr;\n  int r;\n  if (!nrr) return 0;\n  if (verbose > 1) printf(\"\\n;; %s section (%d):\\n\", sname, nrr);\n\n  p->dnsp_rrl = nrr;\n  while((r = dns_nextrr(p, &rr)) > 0)\n    printrr(p, &rr);\n  if (r < 0) printf(\"<<ERROR>>\\n\");\n  return r;\n}\n\n/* dbgcb will only be called if verbose > 1 */\nstatic void\ndbgcb(int code, const struct sockaddr *sa, unsigned slen,\n      const unsigned char *pkt, int r,\n      const struct dns_query *unused_q, void *unused_data) {\n  struct dns_parse p;\n  const unsigned char *cur, *end;\n  int numqd;\n\n  if (code > 0)\t{\n    printf(\";; trying %s.\\n\", dns_dntosp(dns_payload(pkt)));\n    printf(\";; sending %d bytes query to \", r);\n  }\n  else\n    printf(\";; received %d bytes response from \", r);\n  if (sa->sa_family == AF_INET && slen >= sizeof(struct sockaddr_in))\n    printf(\"%s port %d\\n\",\n           dns_xntop(AF_INET, &((struct sockaddr_in*)sa)->sin_addr),\n           htons(((struct sockaddr_in*)sa)->sin_port));\n#ifdef HAVE_IPv6\n  else if (sa->sa_family == AF_INET6 && slen >= sizeof(struct sockaddr_in6))\n    printf(\"%s port %d\\n\",\n           dns_xntop(AF_INET6, &((struct sockaddr_in6*)sa)->sin6_addr),\n           htons(((struct sockaddr_in6*)sa)->sin6_port));\n#endif\n  else\n    printf(\"<<unknown socket type %d>>\\n\", sa->sa_family);\n  if (code > 0 && verbose < 3) {\n    putchar('\\n');\n    return;\n  }\n\n  if (code == -2) printf(\";; reply from unexpected source\\n\");\n  if (code == -5) printf(\";; reply to a query we didn't sent (or old)\\n\");\n  if (r < DNS_HSIZE) {\n    printf(\";; short packet (%d bytes)\\n\", r);\n    return;\n  }\n  if (dns_opcode(pkt) != 0)\n    printf(\";; unexpected opcode %d\\n\", dns_opcode(pkt));\n  if (dns_tc(pkt) != 0)\n    printf(\";; warning: TC bit set, probably incomplete reply\\n\");\n\n  printf(\";; ->>HEADER<<- opcode: \");\n  switch(dns_opcode(pkt)) {\n  case 0: printf(\"QUERY\"); break;\n  case 1: printf(\"IQUERY\"); break;\n  case 2: printf(\"STATUS\"); break;\n  default: printf(\"UNKNOWN(%u)\", dns_opcode(pkt)); break;\n  }\n  printf(\", status: %s, id: %d, size: %d\\n;; flags:\",\n         dns_rcodename(dns_rcode(pkt)), dns_qid(pkt), r);\n  if (dns_qr(pkt)) printf(\" qr\");\n  if (dns_aa(pkt)) printf(\" aa\");\n  if (dns_tc(pkt)) printf(\" tc\");\n  if (dns_rd(pkt)) printf(\" rd\");\n  if (dns_ra(pkt)) printf(\" ra\");\n  /* if (dns_z(pkt))  printf(\" z\"); only one reserved bit left */\n  if (dns_ad(pkt)) printf(\" ad\");\n  if (dns_cd(pkt)) printf(\" cd\");\n  numqd = dns_numqd(pkt);\n  printf(\"; QUERY: %d, ANSWER: %d, AUTHORITY: %d, ADDITIONAL: %d\\n\",\n         numqd, dns_numan(pkt), dns_numns(pkt), dns_numar(pkt));\n  if (numqd != 1)\n    printf(\";; unexpected number of entries in QUERY section: %d\\n\",\n           numqd);\n  printf(\"\\n;; QUERY SECTION (%d):\\n\", numqd);\n  cur = dns_payload(pkt);\n  end = pkt + r;\n  while(numqd--) {\n    if (dns_getdn(pkt, &cur, end, p.dnsp_dnbuf, DNS_MAXDN) <= 0 ||\n        cur + 4 > end) {\n      printf(\"; invalid query section\\n\");\n      return;\n    }\n    r = printf(\";%s.\", dns_dntosp(p.dnsp_dnbuf));\n    printf(\"%s%s\\t%s\\n\",\n           r > 23 ? \"\\t\" : r > 15 ? \"\\t\\t\" : r > 7 ? \"\\t\\t\\t\" : \"\\t\\t\\t\\t\",\n           dns_classname(dns_get16(cur+2)), dns_typename(dns_get16(cur)));\n    cur += 4;\n  }\n\n  p.dnsp_pkt = pkt;\n  p.dnsp_cur = p.dnsp_ans = cur;\n  p.dnsp_end = end;\n  p.dnsp_qdn = NULL;\n  p.dnsp_qcls = p.dnsp_qtyp = 0;\n  p.dnsp_ttl = 0xffffffffu;\n  p.dnsp_nrr = 0;\n\n  r = printsection(&p, dns_numan(pkt), \"ANSWER\");\n  if (r == 0)\n    r = printsection(&p, dns_numns(pkt), \"AUTHORITY\");\n  if (r == 0)\n    r = printsection(&p, dns_numar(pkt), \"ADDITIONAL\");\n  putchar('\\n');\n}\n\nstatic void dnscb(struct dns_ctx *ctx, void *result, void *data) {\n  int r = dns_status(ctx);\n  struct query *q = data;\n  struct dns_parse p;\n  struct dns_rr rr;\n  unsigned nrr;\n  unsigned char dn[DNS_MAXDN];\n  const unsigned char *pkt, *cur, *end;\n  if (!result) {\n    dnserror(q, r);\n    return;\n  }\n  pkt = result; end = pkt + r; cur = dns_payload(pkt);\n  dns_getdn(pkt, &cur, end, dn, sizeof(dn));\n  dns_initparse(&p, NULL, pkt, cur, end);\n  p.dnsp_qcls = p.dnsp_qtyp = 0;\n  nrr = 0;\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    if (!dns_dnequal(dn, rr.dnsrr_dn)) continue;\n    if ((qcls == DNS_C_ANY || qcls == rr.dnsrr_cls) &&\n        (q->qtyp == DNS_T_ANY || q->qtyp == rr.dnsrr_typ))\n      ++nrr;\n    else if (rr.dnsrr_typ == DNS_T_CNAME && !nrr) {\n      if (dns_getdn(pkt, &rr.dnsrr_dptr, end,\n                    p.dnsp_dnbuf, sizeof(p.dnsp_dnbuf)) <= 0 ||\n          rr.dnsrr_dptr != rr.dnsrr_dend) {\n        r = DNS_E_PROTOCOL;\n        break;\n      }\n      else {\n        if (verbose == 1) {\n          printf(\"%s.\", dns_dntosp(dn));\n          printf(\" CNAME %s.\\n\", dns_dntosp(p.dnsp_dnbuf));\n        }\n        dns_dntodn(p.dnsp_dnbuf, dn, sizeof(dn));\n      }\n    }\n  }\n  if (!r && !nrr)\n    r = DNS_E_NODATA;\n  if (r < 0) {\n    dnserror(q, r);\n    free(result);\n    return;\n  }\n  if (verbose < 2) {\t/* else it is already printed by dbgfn */\n    dns_rewind(&p, NULL);\n    p.dnsp_qtyp = q->qtyp == DNS_T_ANY ? 0 : q->qtyp;\n    p.dnsp_qcls = qcls == DNS_C_ANY ? 0 : qcls;\n    while(dns_nextrr(&p, &rr))\n      printrr(&p, &rr);\n  }\n  free(result);\n  query_free(q);\n}\n\nint main(int argc, char **argv) {\n  int i;\n  int fd;\n  fd_set fds;\n  struct timeval tv;\n  time_t now;\n  char *ns[DNS_MAXSERV];\n  int nns = 0;\n  struct query *q;\n  enum dns_type qtyp = 0;\n  struct dns_ctx *nctx = NULL;\n  int flags = 0;\n\n  if (!(progname = strrchr(argv[0], '/'))) progname = argv[0];\n  else argv[0] = ++progname;\n\n  if (argc <= 1)\n    die(0, \"try `%s -h' for help\", progname);\n\n  if (dns_init(NULL, 0) < 0 || !(nctx = dns_new(NULL)))\n    die(errno, \"unable to initialize dns library\");\n  /* we keep two dns contexts: one may be needed to resolve\n   * nameservers if given as names, using default options.\n   */\n\n  while((i = getopt(argc, argv, \"vqt:c:an:o:f:h\")) != EOF) switch(i) {\n  case 'v': ++verbose; break;\n  case 'q': --verbose; break;\n  case 't':\n    if (optarg[0] == '*' && !optarg[1])\n      i = DNS_T_ANY;\n    else if ((i = dns_findtypename(optarg)) <= 0)\n      die(0, \"unrecognized query type `%s'\", optarg);\n    qtyp = i;\n    break;\n  case 'c':\n    if (optarg[0] == '*' && !optarg[1])\n      i = DNS_C_ANY;\n    else if ((i = dns_findclassname(optarg)) < 0)\n      die(0, \"unrecognized query class `%s'\", optarg);\n    qcls = i;\n    break;\n  case 'a':\n    qtyp = DNS_T_ANY;\n    ++verbose;\n    break;\n  case 'n':\n    if (nns >= DNS_MAXSERV)\n      die(0, \"too many nameservers, %d max\", DNS_MAXSERV);\n    ns[nns++] = optarg;\n    break;\n  case 'o':\n  case 'f': {\n    char *opt;\n    const char *const delim = \" \\t,;\";\n    for(opt = strtok(optarg, delim); opt != NULL; opt = strtok(NULL, delim)) {\n      if (dns_set_opts(NULL, optarg) == 0)\n        ;\n      else if (strcmp(opt, \"aa\") == 0) flags |= DNS_AAONLY;\n      else if (strcmp(optarg, \"nord\") == 0) flags |= DNS_NORD;\n      else if (strcmp(optarg, \"dnssec\") == 0) flags |= DNS_SET_DO;\n      else if (strcmp(optarg, \"do\")     == 0) flags |= DNS_SET_DO;\n      else if (strcmp(optarg, \"cd\") == 0) flags |= DNS_SET_CD;\n      else\n        die(0, \"invalid option: `%s'\", opt);\n    }\n    break;\n  }\n  case 'h':\n    printf(\n\"%s: simple DNS query tool (using udns version %s)\\n\"\n\"Usage: %s [options] domain-name...\\n\"\n\"where options are:\\n\"\n\" -h - print this help and exit\\n\"\n\" -v - be more verbose\\n\"\n\" -q - be less verbose\\n\"\n\" -t type - set query type (A, AAA, PTR etc)\\n\"\n\" -c class - set query class (IN (default), CH, HS, *)\\n\"\n\" -a - equivalent to -t ANY -v\\n\"\n\" -n ns - use given nameserver(s) instead of default\\n\"\n\"  (may be specified multiple times)\\n\"\n\" -o opt,opt,... (comma- or space-separated list,\\n\"\n\"                 may be specified more than once):\\n\"\n\"  set resovler options (the same as setting $RES_OPTIONS):\\n\"\n\"   timeout:sec  - initial query timeout\\n\"\n\"   attempts:num - number of attempt to resovle a query\\n\"\n\"   ndots:num    - if name has more than num dots, lookup it before search\\n\"\n\"   port:num     - port number for queries instead of default 53\\n\"\n\"   udpbuf:num   - size of UDP buffer (use EDNS0 if >512)\\n\"\n\"  or query flags:\\n\"\n\"   aa,nord,dnssec,do,cd - set query flag (auth-only, no recursion,\\n\"\n\"     enable DNSSEC (DNSSEC Ok), check disabled)\\n\"\n      , progname, dns_version(), progname);\n    return 0;\n  default:\n    die(0, \"try `%s -h' for help\", progname);\n  }\n\n  argc -= optind; argv += optind;\n  if (!argc)\n    die(0, \"no name(s) to query specified\");\n\n  if (nns) {\n    /* if nameservers given as names, resolve them.\n     * We only allow IPv4 nameservers as names for now.\n     * Ok, it is easy enouth to try both AAAA and A,\n     * but the question is what to do by default.\n     */\n    struct sockaddr_in sin;\n    int j, r = 0, opened = 0;\n    memset(&sin, 0, sizeof(sin));\n    sin.sin_family = AF_INET;\n    sin.sin_port = htons(dns_set_opt(NULL, DNS_OPT_PORT, -1));\n    dns_add_serv(NULL, NULL);\n    for(i = 0; i < nns; ++i) {\n      if (dns_pton(AF_INET, ns[i], &sin.sin_addr) <= 0) {\n        struct dns_rr_a4 *rr;\n        if (!opened) {\n          if (dns_open(nctx) < 0)\n            die(errno, \"unable to initialize dns context\");\n          opened = 1;\n        }\n        rr = dns_resolve_a4(nctx, ns[i], 0);\n        if (!rr)\n          die(0, \"unable to resolve nameserver %s: %s\",\n              ns[i], dns_strerror(dns_status(nctx)));\n        for(j = 0; j < rr->dnsa4_nrr; ++j) {\n          sin.sin_addr = rr->dnsa4_addr[j];\n          if ((r = dns_add_serv_s(NULL, (struct sockaddr *)&sin)) < 0)\n            break;\n        }\n        free(rr);\n      }\n      else\n        r = dns_add_serv_s(NULL, (struct sockaddr *)&sin);\n      if (r < 0)\n        die(errno, \"unable to add nameserver %s\",\n             dns_xntop(AF_INET, &sin.sin_addr));\n    }\n  }\n  dns_free(nctx);\n\n  fd = dns_open(NULL);\n  if (fd < 0)\n    die(errno, \"unable to initialize dns context\");\n\n  if (verbose > 1)\n    dns_set_dbgfn(NULL, dbgcb);\n\n  if (flags)\n    dns_set_opt(NULL, DNS_OPT_FLAGS, flags);\n\n  for (i = 0; i < argc; ++i) {\n    char *name = argv[i];\n    union {\n      struct in_addr addr;\n      struct in6_addr addr6;\n    } a;\n    unsigned char dn[DNS_MAXDN];\n    enum dns_type l_qtyp = 0;\n    int abs;\n    if (dns_pton(AF_INET, name, &a.addr) > 0) {\n      dns_a4todn(&a.addr, 0, dn, sizeof(dn));\n      l_qtyp = DNS_T_PTR;\n      abs = 1;\n    }\n#ifdef HAVE_IPv6\n    else if (dns_pton(AF_INET6, name, &a.addr6) > 0) {\n      dns_a6todn(&a.addr6, 0, dn, sizeof(dn));\n      l_qtyp = DNS_T_PTR;\n      abs = 1;\n    }\n#endif\n    else if (!dns_ptodn(name, strlen(name), dn, sizeof(dn), &abs))\n      die(0, \"invalid name `%s'\\n\", name);\n    else\n      l_qtyp = DNS_T_A;\n    if (qtyp) l_qtyp = qtyp;\n    q = query_new(name, dn, l_qtyp);\n    if (abs) abs = DNS_NOSRCH;\n    if (!dns_submit_dn(NULL, dn, qcls, l_qtyp, abs, 0, dnscb, q))\n      dnserror(q, dns_status(NULL));\n  }\n\n  FD_ZERO(&fds);\n  now = 0;\n  while((i = dns_timeouts(NULL, -1, now)) > 0) {\n    FD_SET(fd, &fds);\n    tv.tv_sec = i;\n    tv.tv_usec = 0;\n    i = select(fd+1, &fds, 0, 0, &tv);\n    now = time(NULL);\n    if (i > 0) dns_ioevent(NULL, now);\n  }\n\n  return errors ? 1 : notfound ? 100 : 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/ex-rdns.c",
    "content": "/* ex-rdns.c\n   parallel rDNS resolver example - read IP addresses from stdin,\n   write domain names to stdout\n \n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <sys/poll.h>\n#include <unistd.h>\n#include <stdio.h>\n#include <time.h>\n#include <stdlib.h>\n#include <string.h>\n#include \"udns.h\"\n\nstatic int curq;\n\nstatic const char *n2ip(const unsigned char *c) {\n  static char b[sizeof(\"255.255.255.255\")];\n  sprintf(b, \"%u.%u.%u.%u\", c[0], c[1], c[2], c[3]);\n  return b;\n}\nstatic void dnscb(struct dns_ctx *ctx, struct dns_rr_ptr *rr, void *data) {\n  const char *ip = n2ip((unsigned char *)&data);\n  int i;\n  --curq;\n  if (rr) {\n    printf(\"%s\", ip);\n    for(i = 0; i < rr->dnsptr_nrr; ++i)\n      printf(\" %s\", rr->dnsptr_ptr[i]);\n    putchar('\\n');\n    free(rr);\n  }\n  else\n    fprintf(stderr, \"%s: %s\\n\", ip, dns_strerror(dns_status(ctx)));\n}\n\nint main(int argc, char **argv) {\n  int c;\n  time_t now;\n  int maxq = 10;\n  struct pollfd pfd;\n  char linebuf[1024];\n  char *eol;\n  int eof;\n\n  if (dns_init(NULL, 1) < 0) {\n    fprintf(stderr, \"unable to initialize dns library\\n\");\n    return 1;\n  }\n  while((c = getopt(argc, argv, \"m:r\")) != EOF) switch(c) {\n  case 'm': maxq = atoi(optarg); break;\n  case 'r':\n     dns_set_opt(0, DNS_OPT_FLAGS,\n                 dns_set_opt(0, DNS_OPT_FLAGS, -1) | DNS_NORD);\n     break;\n  default: return 1;\n  }\n  if (argc != optind) return 1;\n\n  pfd.fd = dns_sock(0);\n  pfd.events = POLLIN;\n  now = time(NULL);\n  c = optind;\n  eof = 0;\n  while(curq || !eof) {\n    if (!eof && curq < maxq) {\n      union { struct in_addr a; void *p; } pa;\n      if (!fgets(linebuf, sizeof(linebuf), stdin)) {\n        eof = 1;\n        continue;\n      }\n      eol = strchr(linebuf, '\\n');\n      if (eol) *eol = '\\0';\n      if (!linebuf[0]) continue;\n      if (dns_pton(AF_INET, linebuf, &pa.a) <= 0)\n        fprintf(stderr, \"%s: invalid address\\n\", linebuf);\n      else if (dns_submit_a4ptr(0, &pa.a, dnscb, pa.p) == 0)\n        fprintf(stderr, \"%s: unable to submit query: %s\\n\",\n                linebuf, dns_strerror(dns_status(0)));\n      else\n        ++curq;\n      continue;\n    }\n    if (curq) {\n      c = dns_timeouts(0, -1, now);\n      c = poll(&pfd, 1, c < 0 ? -1 : c * 1000);\n      now = time(NULL);\n      if (c)\n        dns_ioevent(0, now);\n    }\n  }\n  return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/getopt.c",
    "content": "/* getopt.c\n * Simple getopt() implementation.\n *\n * Standard interface:\n *  extern int getopt(int argc, char *const *argv, const char *opts);\n *  extern int optind;    current index in argv[]\n *  extern char *optarg;  argument for the current option\n *  extern int optopt;    the current option\n *  extern int opterr;    to control error printing\n *\n * Some minor extensions:\n *  ignores leading `+' sign in opts[] (unemplemented GNU extension)\n *  handles optional arguments, in form \"x::\" in opts[]\n *  if opts[] starts with `:', will return `:' in case of missing required\n *    argument, instead of '?'.\n *\n * Compile with -DGETOPT_NO_OPTERR to never print errors internally.\n * Compile with -DGETOPT_NO_STDIO to use write() calls instead of fprintf() for\n *  error reporting (ignored with -DGETOPT_NO_OPTERR).\n * Compile with -DGETOPT_CLASS=static to get static linkage.\n * Compile with -DGETOPT_MY to redefine all visible symbols to be prefixed\n *  with \"my_\", like my_getopt instead of getopt.\n * Compile with -DTEST to get a test executable.\n *\n * Written by Michael Tokarev.  Public domain.\n */\n\n#include <string.h>\n\n#ifndef GETOPT_CLASS\n# define GETOPT_CLASS\n#endif\n#ifdef GETOPT_MY\n# define optarg my_optarg\n# define optind my_optind\n# define opterr my_opterr\n# define optopt my_optopt\n# define getopt my_getopt\n#endif\n\nGETOPT_CLASS char *optarg /* = NULL */;\nGETOPT_CLASS int optind = 1;\nGETOPT_CLASS int opterr = 1;\nGETOPT_CLASS int optopt;\n\nstatic char *nextc /* = NULL */;\n\n#if defined(GETOPT_NO_OPTERR)\n\n#define printerr(argv, msg)\n\n#elif defined(GETOPT_NO_STDIO)\n\nextern int write(int, void *, int);\n\nstatic void printerr(char *const *argv, const char *msg) {\n  if (opterr) {\n    char buf[64];\n    unsigned pl = strlen(argv[0]);\n    unsigned ml = strlen(msg);\n    char *p;\n    if (pl + /*\": \"*/2 + ml + /*\" -- c\\n\"*/6 > sizeof(buf)) {\n      write(2, argv[0], pl);\n      p = buf;\n    }\n    else {\n      memcpy(buf, argv[0], ml);\n      p = buf + pl;\n    }\n    *p++ = ':'; *p++ = ' ';\n    memcpy(p, msg, ml); p += ml;\n    *p++ = ' '; *p++ = '-'; *p++ = '-'; *p++ = ' ';\n    *p++ = optopt;\n    *p++ = '\\n';\n    write(2, buf, p - buf);\n  }\n}\n\n#else\n\n#include <stdio.h>\nstatic void printerr(char *const *argv, const char *msg) {\n  if (opterr)\n     fprintf(stderr, \"%s: %s -- %c\\n\", argv[0], msg, optopt);\n}\n\n#endif\n\nGETOPT_CLASS int getopt(int argc, char *const *argv, const char *opts) {\n  char *p;\n\n  optarg = 0;\n  if (*opts == '+') /* GNU extension (permutation) - isn't supported */\n    ++opts;\n\n  if (!optind) {  /* a way to reset things */\n    nextc = 0;\n    optind = 1;\n  }\n\n  if (!nextc || !*nextc) {   /* advance to the next argv element */\n    /* done scanning? */\n    if (optind >= argc)\n      return -1;\n    /* not an optional argument */\n    if (argv[optind][0] != '-')\n      return -1;\n    /* bare `-' */\n    if (argv[optind][1] == '\\0')\n      return -1;\n    /* special case `--' argument */\n    if (argv[optind][1] == '-' && argv[optind][2] == '\\0') {\n      ++optind;\n      return -1;\n    }\n    nextc = argv[optind] + 1;\n  }\n\n  optopt = *nextc++;\n  if (!*nextc)\n    ++optind;\n  p = strchr(opts, optopt);\n  if (!p || optopt == ':') {\n    printerr(argv, \"illegal option\");\n    return '?';\n  }\n  if (p[1] == ':') {\n    if (*nextc) {\n      optarg = nextc;\n      nextc = NULL;\n      ++optind;\n    }\n    else if (p[2] != ':') {\t/* required argument */\n      if (optind >= argc) {\n        printerr(argv, \"option requires an argument\");\n        return *opts == ':' ? ':' : '?';\n      }\n      else\n        optarg = argv[optind++];\n    }\n  }\n  return optopt;\n}\n\n#ifdef TEST\n\n#include <stdio.h>\n\nint main(int argc, char **argv) {\n  int c;\n  while((c = getopt(argc, argv, \"ab:c::\")) != -1) switch(c) {\n  case 'a':\n  case 'b':\n  case 'c':\n    printf(\"option %c %s\\n\", c, optarg ? optarg : \"(none)\");\n    break;\n  default:\n    return -1;\n  }\n  for(c = optind; c < argc; ++c)\n    printf(\"non-opt: %s\\n\", argv[c]);\n  return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/inet_XtoX.c",
    "content": "/* inet_XtoX.c\n * Simple implementation of the following functions:\n *  inet_ntop(), inet_ntoa(), inet_pton(), inet_aton().\n *\n * Differences from traditional implementaitons:\n *  o modifies destination buffers even on error return.\n *  o no fancy (hex, or 1.2) input support in inet_aton()\n *  o inet_aton() does not accept junk after an IP address.\n *  o inet_ntop(AF_INET) requires at least 16 bytes in dest,\n *    and inet_ntop(AF_INET6) at least 40 bytes\n *    (traditional inet_ntop() will try to fit anyway)\n *\n * Compile with -Dinet_XtoX_prefix=pfx_ to have pfx_*() instead of inet_*()\n * Compile with -Dinet_XtoX_no_ntop or -Dinet_XtoX_no_pton\n *  to disable net2str or str2net conversions.\n *\n * #define inet_XtoX_prototypes and #include \"this_file.c\"\n * to get function prototypes only (but not for inet_ntoa()).\n * #define inet_XtoX_decl to be `static' for static visibility,\n * or use __declspec(dllexport) or somesuch...\n *\n * Compile with -DTEST to test against stock implementation.\n *\n * Written by Michael Tokarev.  Public domain.\n */\n\n#ifdef inet_XtoX_prototypes\n\nstruct in_addr;\n\n#else\n\n#include <errno.h>\n\n#ifdef TEST\n\n# include <netinet/in.h>\n# include <sys/socket.h>\n# include <arpa/inet.h>\n# include <stdio.h>\n# include <stdlib.h>\n# include <unistd.h>\n# include <string.h>\n# undef inet_XtoX_prefix\n# define inet_XtoX_prefix mjt_inet_\n# undef inet_XtoX_no_ntop\n# undef inet_XtoX_no_pton\n\n#endif /* TEST */\n\n#endif /* inet_XtoX_prototypes */\n\n#ifndef inet_XtoX_prefix\n# define inet_XtoX_prefix inet_\n#endif\n#ifndef inet_XtoX_decl\n# define inet_XtoX_decl /* empty */\n#endif\n\n#define cc2_(x,y) cc2__(x,y)\n#define cc2__(x,y) x##y\n#define fn(x) cc2_(inet_XtoX_prefix,x)\n\n#ifndef inet_XtoX_no_ntop\n\ninet_XtoX_decl const char *\nfn(ntop)(int af, const void *src, char *dst, int size);\n\n#ifndef inet_XtoX_prototypes\n\nstatic int mjt_ntop4(const void *_src, char *dst, int size) {\n  unsigned i, x, r;\n  char *p;\n  const unsigned char *s = _src;\n  if (size < 4*4)\t/* for simplicity, disallow non-max-size buffer */\n    return 0;\n  for (i = 0, p = dst; i < 4; ++i) {\n    if (i) *p++ = '.';\n    x = r = s[i];\n    if (x > 99) { *p++ = (char)(r / 100 + '0'); r %= 100; }\n    if (x > 9) { *p++ = (char)(r / 10 + '0'); r %= 10; }\n    *p++ = (char)(r + '0');\n  }\n  *p = '\\0';\n  return 1;\n}\n\nstatic char *hexc(char *p, unsigned x) {\n  static char hex[16] = \"0123456789abcdef\";\n  if (x > 0x0fff) *p++ = hex[(x >>12) & 15];\n  if (x > 0x00ff) *p++ = hex[(x >> 8) & 15];\n  if (x > 0x000f) *p++ = hex[(x >> 4) & 15];\n  *p++ = hex[x & 15];\n  return p;\n}\n\nstatic int mjt_ntop6(const void *_src, char *dst, int size) {\n  unsigned i;\n  unsigned short w[8];\n  unsigned bs = 0, cs = 0;\n  unsigned bl = 0, cl = 0;\n  char *p;\n  const unsigned char *s = _src;\n\n  if (size < 40)\t/* for simplicity, disallow non-max-size buffer */\n    return 0;\n\n  for(i = 0; i < 8; ++i, s += 2) {\n    w[i] = (((unsigned short)(s[0])) << 8) | s[1];\n    if (!w[i]) {\n      if (!cl++) cs = i;\n    }\n    else {\n      if (cl > bl) bl = cl, bs = cs;\n    }\n  }\n  if (cl > bl) bl = cl, bs = cs;\n  p = dst;\n  if (bl == 1)\n    bl = 0;\n  if (bl) {\n    for(i = 0; i < bs; ++i) {\n      if (i) *p++ = ':';\n      p = hexc(p, w[i]);\n    }\n    *p++ = ':';\n    i += bl;\n    if (i == 8)\n      *p++ = ':';\n  }\n  else\n    i = 0;\n  for(; i < 8; ++i) {\n    if (i) *p++ = ':';\n    if (i == 6 && !bs && (bl == 6 || (bl == 5 && w[5] == 0xffff)))\n      return mjt_ntop4(s - 4, p, size - (p - dst));\n    p = hexc(p, w[i]);\n  }\n  *p = '\\0';\n  return 1;\n}\n\ninet_XtoX_decl const char *\nfn(ntop)(int af, const void *src, char *dst, int size) {\n  switch(af) {\n  /* don't use AF_*: don't mess with headers */\n  case 2:  /* AF_INET */  if (mjt_ntop4(src, dst, size)) return dst; break;\n  case 10: /* AF_INET6 */ if (mjt_ntop6(src, dst, size)) return dst; break;\n  default: errno = EAFNOSUPPORT; return (char*)0;\n  }\n  errno = ENOSPC;\n  return (char*)0;\n}\n\ninet_XtoX_decl const char *\nfn(ntoa)(struct in_addr addr) {\n  static char buf[4*4];\n  mjt_ntop4(&addr, buf, sizeof(buf));\n  return buf;\n}\n\n#endif /* inet_XtoX_prototypes */\n#endif /* inet_XtoX_no_ntop */\n\n#ifndef inet_XtoX_no_pton\n\ninet_XtoX_decl int fn(pton)(int af, const char *src, void *dst);\ninet_XtoX_decl int fn(aton)(const char *src, struct in_addr *addr);\n\n#ifndef inet_XtoX_prototypes\n\nstatic int mjt_pton4(const char *c, void *dst) {\n  unsigned char *a = dst;\n  unsigned n, o;\n  for (n = 0; n < 4; ++n) {\n    if (*c < '0' || *c > '9')\n      return 0;\n    o = *c++ - '0';\n    while(*c >= '0' && *c <= '9')\n      if ((o = o * 10 + (*c++ - '0')) > 255)\n        return 0;\n    if (*c++ != (n == 3 ? '\\0' : '.'))\n      return 0;\n    *a++ = (unsigned char)o;\n  }\n  return 1;\n}\n\nstatic int mjt_pton6(const char *c, void *dst) {\n  unsigned short w[8], *a = w, *z, *i;\n  unsigned v, o;\n  const char *sc;\n  unsigned char *d = dst;\n  if (*c != ':') z = (unsigned short*)0;\n  else if (*++c != ':') return 0;\n  else ++c, z = a;\n  i = 0;\n  for(;;) {\n    v = 0;\n    sc = c;\n    for(;;) {\n      if (*c >= '0' && *c <= '9') o = *c - '0';\n      else if (*c >= 'a' && *c <= 'f') o = *c - 'a' + 10;\n      else if (*c >= 'A' && *c <= 'F') o = *c - 'A' + 10;\n      else break;\n      v = (v << 4) | o;\n      if (v > 0xffff) return 0;\n      ++c;\n    }\n    if (sc == c) {\n      if (z == a && !*c)\n        break;\n      else\n        return 0;\n    }\n    if (*c == ':') {\n      if (a >= w + 8)\n        return 0;\n      *a++ = v;\n      if (*++c == ':') {\n        if (z)\n          return 0;\n        z = a;\n        if (!*++c)\n          break;\n      }\n    }\n    else if (!*c) {\n      if (a >= w + 8)\n        return 0;\n      *a++ = v;\n      break;\n    }\n    else if (*c == '.') {\n      if (a > w + 6)\n        return 0;\n      if (!mjt_pton4(sc, d))\n        return 0;\n      *a++ = ((unsigned)(d[0]) << 8) | d[1];\n      *a++ = ((unsigned)(d[2]) << 8) | d[3];\n      break;\n    }\n    else\n      return 0;\n  }\n  v = w + 8 - a;\n  if ((v && !z) || (!v && z))\n    return 0;\n  for(i = w; ; ++i) {\n    if (i == z)\n      while(v--) { *d++ = '\\0'; *d++ = '\\0'; }\n    if (i >= a)\n      break;\n    *d++ = (unsigned char)((*i >> 8) & 255);\n    *d++ = (unsigned char)(*i & 255);\n  }\n  return 1;\n}\n\ninet_XtoX_decl int fn(pton)(int af, const char *src, void *dst) {\n  switch(af) {\n  /* don't use AF_*: don't mess with headers */\n  case 2  /* AF_INET  */: return mjt_pton4(src, dst);\n  case 10 /* AF_INET6 */: return mjt_pton6(src, dst);\n  default: errno = EAFNOSUPPORT; return -1;\n  }\n}\n\ninet_XtoX_decl int fn(aton)(const char *src, struct in_addr *addr) {\n  return mjt_pton4(src, addr);\n}\n\n#endif /* inet_XtoX_prototypes */\n\n#endif /* inet_XtoX_no_pton */\n\n#ifdef TEST\n\nint main(int argc, char **argv) {\n  int i;\n  char n0[16], n1[16];\n  char p0[64], p1[64];\n  int af = AF_INET;\n  int pl = sizeof(p0);\n  int r0, r1;\n  const char *s0, *s1;\n\n  while((i = getopt(argc, argv, \"46a:p:\")) != EOF) switch(i) {\n  case '4': af = AF_INET;  break;\n  case '6': af = AF_INET6; break;\n  case 'a': case 'p': pl = atoi(optarg); break;\n  default: return 1;\n  }\n  for(i = optind; i < argc; ++i) {\n    char *a = argv[i];\n\n    printf(\"%s:\\n\", a);\n    r0 = inet_pton(af, a, n0);\n    printf(\" p2n stock: %s\\n\",\n     (r0 < 0 ? \"(notsupp)\" : !r0 ? \"(inval)\" : fn(ntop)(af,n0,p0,sizeof(p0))));\n    r1 = fn(pton)(af, a, n1);\n    printf(\" p2n this : %s\\n\",\n     (r1 < 0 ? \"(notsupp)\" : !r1 ? \"(inval)\" : fn(ntop)(af,n1,p1,sizeof(p1))));\n\n    if ((r0 > 0) != (r1 > 0) ||\n        (r0 > 0 && r1 > 0 && memcmp(n0, n1, af == AF_INET ? 4 : 16) != 0))\n      printf(\" DIFFER!\\n\");\n\n    s0 = inet_ntop(af, n1, p0, pl);\n    printf(\" n2p stock: %s\\n\", s0 ? s0 : \"(inval)\");\n    s1 = fn(ntop)(af, n1, p1, pl);\n    printf(\" n2p this : %s\\n\", s1 ? s1 : \"(inval)\");\n    if ((s0 != 0) != (s1 != 0) ||\n        (s0 && s1 && strcmp(s0, s1) != 0))\n      printf(\" DIFFER!\\n\");\n\n  }\n  return 0;\n}\n\n#endif /* TEST */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/rblcheck.1",
    "content": ".\\\" rblcheck.1\n.\\\" rblckeck manpage\n.\\\"\n.\\\" Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n.\\\" This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n.\\\" write to the Free Software Foundation, Inc., 59 Temple Place,\n.\\\" Suite 330, Boston, MA  02111-1307  USA\n\n.TH rblckeck 1 \"Apr 2005\" \"User Utilities\"\n\n.SH NAME\nrblckeck \\- DNSBL lookup utility\n\n.SH SYNOPSYS\n.B rblcheck\n.RB [\\| \\-s\n.IR zone \\|]\n.RB [\\| \\-S\n.IR zone\\-file \\|]\n.RB [\\| \\-c \\|]\n.RB [\\| \\-tmvq \\|]\n.RB [\\| \\-n\n.IR nsaddr \\|]\n.IR address \\|.\\|.\\|.\n\n.SH DESCRIPTION\n.B rblcheck\nis a simple command-line to perform DNSBL (DNS-based blocklists) lookups.\nFor every IP address (or a name, in which case it will be resolved to an\naddress first), the utility verifies whenever it is listed in a (list of)\nDNS blocklists specified with\n.B \\-s\nor\n.B \\-S\noptions, optionally obtains text assotiated with the listing (usually it\nis either some description about the reason of the listing or an URL\nreferring to such a description), and displays results on standard output.\n.PP\nThe program is implemented on top of\n.BR udns (3)\nlibrary.\n\n.SH OPTIONS\n\nThe following options are recognized by\n.BR rblcheck :\n\n.TP\n.B \\-s \\fIzone\\fR\nadd the given \\fIzone\\fR DNSBL name to the list of active zones.\n.TP\n.B \\-S \\fIzone-file\\fR\nadd list of zones from the named \\fIzone-file\\fR to the list of\nactive zones (the file specifies one zone as the first word on a\nline, empty lines and lines starting with `#' character are ignored).\n.TP\n.B \\-c\nreset active zone list.\n.TP\n.B \\-v\nbe more verbose, produce more detailed output.\n.TP\n.B \\-q\nthe opposite for \\fB\\-v\\fR -- produce less detailed output.\n.TP\n.B \\-t\nobtain text for listed addresses.\n.TP\n.B \\-n \\fInsaddr\\fR\nUse the given nameserver (given as IPv4 or IPv6 address) instead of the\ndefault.  The same effect may be achieved by setting $NSCACHEIP environment\nvariable.\n.TP\n.B \\-m\nstop after first hit, ie after the first address which is found to be\nlisted.\n\n.TP\n.B \\-h\nprint short help and exit.\n\n.PP\nIf no\n.BR \\-s ,\n.BR \\-S\nand\n.B \\-c\noptions are given,\n.B rblcheck\nwill try to obtain list of zones using $RBLCHECK_ZONES environment variable,\nor ~/.rblcheckrc, or /etc/rblckechrc files, in that order.  If no zones are\nfound, it will exit unsuccessefully.\n\n.SH \"RETURN VALUE\"\nWhen no addresses given are listed and no errors occured,\n.B rblcheck\nexits with code 0.  If at least one address is listed,\n.B rblcheck\nreturns 100.  In case of DNS errors,\n.B rblcheck\nreturns 2.\n\n.SH ENVIRONMENT\n\n.TP\n.B $RBLCHECK_ZONES\nif no\n.BR \\-s ,\n.B \\-S\nor\n.B \\-c\noption is given,\n.B rblcheck\ntries this variable to obtain list of DNSBL zones to check against.\n\n.SH FILES\n\n.TP\n$HOME/.rblcheckrc and /etc/rblcheckrc\nif no\n.BR \\-s ,\n.B \\-S\nor\n.B \\-c\noption is given, and no $RBLCHECK_ZONES environment variable is set,\n.B rblcheck\nwill try the two files (the first one that exists) to obtain list of\nDNSBL zones to check against.\nEach line specifies one zone (only first word in each line is used).\nEmpty lines and lines starting with `#' character are ignored.\n\n.SH \"SEE ALSO\"\n.BR dnsget (1)\n.BR resolv.conf (5)\n.BR udns (3).\n\n.SH AUTHOR\nThis program and manual pages are written by Michael Tokarev.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/rblcheck.c",
    "content": "/* rblcheck.c\n   dnsbl (rbl) checker application\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifdef HAVE_CONFIG_H\n# include \"config.h\"\n#endif\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#ifdef __MINGW32__\n# include <winsock2.h>\n#else\n# include <unistd.h>\n# include <sys/types.h>\n# include <sys/socket.h>\n# include <netinet/in.h>\n#endif\n#include <time.h>\n#include <errno.h>\n#include <stdarg.h>\n#include \"udns.h\"\n\n#ifndef HAVE_GETOPT\n# include \"getopt.c\"\n#endif\n\nstatic const char *version = \"udns-rblcheck 0.4\";\nstatic char *progname;\n\nstatic void error(int die, const char *fmt, ...) {\n  va_list ap;\n  fprintf(stderr, \"%s: \", progname);\n  va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap);\n  putc('\\n', stderr);\n  fflush(stderr);\n  if (die)\n    exit(1);\n}\n\nstruct rblookup {\n  struct ipcheck *parent;\n  struct in_addr key;\n  const char *zone;\n  struct dns_rr_a4  *addr;\n  struct dns_rr_txt *txt;\n};\n\nstruct ipcheck {\n  const char *name;\n  int naddr;\n  int listed;\n  struct rblookup *lookup;\n};\n\n#define notlisted ((void*)1)\n\nstatic int nzones, nzalloc;\nstatic const char **zones;\n\nstatic int do_txt;\nstatic int stopfirst;\nstatic int verbose = 1;\n/* verbosity level:\n * <0 - only bare As/TXTs\n * 0 - what RBL result\n * 1(default) - what is listed by RBL: result\n * 2          - what is[not ]listed by RBL: result, name lookups\n */\n\nstatic int listed;\nstatic int failures;\n\nstatic void *ecalloc(int size, int cnt) {\n  void *t = calloc(size, cnt);\n  if (!t)\n    error(1, \"out of memory\");\n  return t;\n}\n\nstatic void addzone(const char *zone) {\n  if (nzones >= nzalloc) {\n    const char **zs = (const char**)ecalloc(sizeof(char*), (nzalloc += 16));\n    if (zones) {\n      memcpy(zs, zones, nzones * sizeof(char*));\n      free(zones);\n    }\n    zones = zs;\n  }\n  zones[nzones++] = zone;\n}\n\nstatic int addzonefile(const char *fname) {\n  FILE *f = fopen(fname, \"r\");\n  char linebuf[2048];\n  if (!f)\n    return 0;\n  while(fgets(linebuf, sizeof(linebuf), f)) {\n    char *p = linebuf, *e;\n    while(*p == ' ' || *p == '\\t') ++p;\n    if (*p == '#' || *p == '\\n') continue;\n    e = p;\n    while(*e && *e != ' ' && *e != '\\t' && *e != '\\n')\n      ++e;\n    *e++ = '\\0';\n    p = memcpy(ecalloc(e - p, 1), p, e - p); // strdup\n    addzone(p);\n  }\n  fclose(f);\n  return 1;\n}\n\nstatic void dnserror(struct rblookup *ipl, const char *what) {\n  char buf[4*4];\n  error(0, \"unable to %s for %s (%s): %s\",\n          what, dns_ntop(AF_INET, &ipl->key, buf, sizeof(buf)),\n          ipl->zone, dns_strerror(dns_status(0)));\n  ++failures;\n}\n\nstatic void display_result(struct ipcheck *ipc) {\n  int j;\n  struct rblookup *l, *le;\n  char buf[4*4];\n  if (!ipc->naddr) return;\n  for (l = ipc->lookup, le = l + nzones * ipc->naddr; l < le; ++l) {\n    if (!l->addr) continue;\n    if (verbose < 2 && l->addr == notlisted) continue;\n    if (verbose >= 0) {\n      dns_ntop(AF_INET, &l->key, buf, sizeof(buf));\n      if (ipc->name) printf(\"%s[%s]\", ipc->name, buf);\n      else printf(\"%s\", buf);\n    }\n    if (l->addr == notlisted) {\n      printf(\" is NOT listed by %s\\n\", l->zone);\n      continue;\n    }\n    else if (verbose >= 1)\n      printf(\" is listed by %s: \", l->zone);\n    else if (verbose >= 0)\n      printf(\" %s \", l->zone);\n    if (verbose >= 1 || !do_txt)\n      for (j = 0; j < l->addr->dnsa4_nrr; ++j)\n        printf(\"%s%s\", j ? \" \" : \"\",\n               dns_ntop(AF_INET, &l->addr->dnsa4_addr[j], buf, sizeof(buf)));\n    if (!do_txt) ;\n    else if (l->txt) {\n      for(j = 0; j < l->txt->dnstxt_nrr; ++j) {\n        unsigned char *t = l->txt->dnstxt_txt[j].txt;\n        unsigned char *e = t + l->txt->dnstxt_txt[j].len;\n        printf(\"%s\\\"\", verbose > 0 ? \"\\n\\t\" : j ? \" \" : \"\");\n        while(t < e) {\n          if (*t < ' ' || *t >= 127) printf(\"\\\\x%02x\", *t);\n          else if (*t == '\\\\' || *t == '\"') printf(\"\\\\%c\", *t);\n          else putchar(*t);\n          ++t;\n        }\n        putchar('\"');\n      }\n      free(l->txt);\n    }\n    else\n      printf(\"%s<no text available>\", verbose > 0 ? \"\\n\\t\" : \"\");\n    free(l->addr);\n    putchar('\\n');\n  }\n  free(ipc->lookup);\n}\n\nstatic void txtcb(struct dns_ctx *ctx, struct dns_rr_txt *r, void *data) {\n  struct rblookup *ipl = data;\n  if (r) {\n    ipl->txt = r;\n    ++ipl->parent->listed;\n  }\n  else if (dns_status(ctx) != DNS_E_NXDOMAIN)\n    dnserror(ipl, \"lookup DNSBL TXT record\");\n}\n\nstatic void a4cb(struct dns_ctx *ctx, struct dns_rr_a4 *r, void *data) {\n  struct rblookup *ipl = data;\n  if (r) {\n    ipl->addr = r;\n    ++listed;\n    if (do_txt) {\n      if (dns_submit_a4dnsbl_txt(0, &ipl->key, ipl->zone, txtcb, ipl))\n        return;\n      dnserror(ipl, \"submit DNSBL TXT record\");\n    }\n    ++ipl->parent->listed;\n  }\n  else if (dns_status(ctx) != DNS_E_NXDOMAIN)\n    dnserror(ipl, \"lookup DNSBL A record\");\n  else\n    ipl->addr = notlisted;\n}\n\nstatic int\nsubmit_a_queries(struct ipcheck *ipc,\n                 int naddr, const struct in_addr *addr) {\n  int z, a;\n  struct rblookup *rl = ecalloc(sizeof(*rl), nzones * naddr);\n  ipc->lookup = rl;\n  ipc->naddr = naddr;\n  for(a = 0; a < naddr; ++a) {\n    for(z = 0; z < nzones; ++z) {\n      rl->key = addr[a];\n      rl->zone = zones[z];\n      rl->parent = ipc;\n      if (!dns_submit_a4dnsbl(0, &rl->key, rl->zone, a4cb, rl))\n        dnserror(rl, \"submit DNSBL A query\");\n      ++rl;\n    }\n  }\n  return 0;\n}\n\nstatic void namecb(struct dns_ctx *ctx, struct dns_rr_a4 *rr, void *data) {\n  struct ipcheck *ipc = data;\n  if (rr) {\n    submit_a_queries(ipc, rr->dnsa4_nrr, rr->dnsa4_addr);\n    free(rr);\n  }\n  else {\n    error(0, \"unable to lookup `%s': %s\",\n          ipc->name, dns_strerror(dns_status(ctx)));\n    ++failures;\n  }\n}\n\nstatic int submit(struct ipcheck *ipc) {\n  struct in_addr addr;\n  if (dns_pton(AF_INET, ipc->name, &addr) > 0) {\n    submit_a_queries(ipc, 1, &addr);\n    ipc->name = NULL;\n  }\n  else if (!dns_submit_a4(0, ipc->name, 0, namecb, ipc)) {\n    error(0, \"unable to submit name query for %s: %s\\n\",\n          ipc->name, dns_strerror(dns_status(0)));\n    ++failures;\n  }\n  return 0;\n}\n\nstatic void waitdns(struct ipcheck *ipc) {\n  struct timeval tv;\n  fd_set fds;\n  int c;\n  int fd = dns_sock(NULL);\n  time_t now = 0;\n  FD_ZERO(&fds);\n  while((c = dns_timeouts(NULL, -1, now)) > 0) {\n    FD_SET(fd, &fds);\n    tv.tv_sec = c;\n    tv.tv_usec = 0;\n    c = select(fd+1, &fds, NULL, NULL, &tv);\n    now = time(NULL);\n    if (c > 0)\n      dns_ioevent(NULL, now);\n    if (stopfirst && ipc->listed)\n      break;\n  }\n}\n\nint main(int argc, char **argv) {\n  int c;\n  struct ipcheck ipc;\n  char *nameserver = NULL;\n  int zgiven = 0;\n\n  if (!(progname = strrchr(argv[0], '/'))) progname = argv[0];\n  else argv[0] = ++progname;\n\n  while((c = getopt(argc, argv, \"hqtvms:S:cn:\")) != EOF) switch(c) {\n  case 's': ++zgiven; addzone(optarg); break;\n  case 'S':\n    ++zgiven;\n    if (addzonefile(optarg)) break;\n    error(1, \"unable to read zonefile `%s'\", optarg);\n  case 'c': ++zgiven; nzones = 0; break;\n  case 'q': --verbose; break;\n  case 'v': ++verbose; break;\n  case 't': do_txt = 1; break;\n  case 'n': nameserver = optarg; break;\n  case 'm': ++stopfirst; break;\n  case 'h':\n    printf(\"%s: %s (udns library version %s).\\n\",\n           progname, version, dns_version());\n    printf(\"Usage is: %s [options] address..\\n\", progname);\n    printf(\n\"Where options are:\\n\"\n\" -h - print this help and exit\\n\"\n\" -s service - add the service (DNSBL zone) to the serice list\\n\"\n\" -S service-file - add the DNSBL zone(s) read from the given file\\n\"\n\" -c - clear service list\\n\"\n\" -v - increase verbosity level (more -vs => more verbose)\\n\"\n\" -q - decrease verbosity level (opposite of -v)\\n\"\n\" -t - obtain and print TXT records if any\\n\"\n\" -m - stop checking after first address match in any list\\n\"\n\" -n ipaddr - use the given nameserver instead of the default\\n\"\n\"(if no -s or -S option is given, use $RBLCHECK_ZONES, ~/.rblcheckrc\\n\"\n\"or /etc/rblcheckrc in that order)\\n\"\n    );\n    return 0;\n  default:\n    error(1, \"use `%s -h' for help\", progname);\n  }\n\n  if (!zgiven) {\n    char *s = getenv(\"RBLCHECK_ZONES\");\n    if (s) {\n      char *k;\n      s = strdup(s);\n      for(k = strtok(s, \" \\t\"); k; k = strtok(NULL, \" \\t\"))\n        addzone(k);\n      free(s);\n    }\n    else {\t/* probably worthless on windows? */\n      char *path;\n      char *home = getenv(\"HOME\");\n      if (!home) home = \".\";\n      path = malloc(strlen(home) + 1 + sizeof(\".rblcheckrc\"));\n      sprintf(path, \"%s/.rblcheckrc\", home);\n      if (!addzonefile(path))\n        addzonefile(\"/etc/rblcheckrc\");\n      free(path);\n    }\n  }\n  if (!nzones)\n    error(1, \"no service (zone) list specified (-s or -S option)\");\n\n  argv += optind;\n  argc -= optind;\n\n  if (!argc)\n    return 0;\n\n  if (dns_init(NULL, 0) < 0)\n    error(1, \"unable to initialize DNS library: %s\", strerror(errno));\n  if (nameserver) {\n    dns_add_serv(NULL, NULL);\n    if (dns_add_serv(NULL, nameserver) < 0)\n      error(1, \"wrong IP address for a nameserver: `%s'\", nameserver);\n  }\n  if (dns_open(NULL) < 0)\n    error(1, \"unable to initialize DNS library: %s\", strerror(errno));\n\n  for (c = 0; c < argc; ++c) {\n    if (c && (verbose > 1 || (verbose == 1 && do_txt))) putchar('\\n');\n    memset(&ipc, 0, sizeof(ipc));\n    ipc.name = argv[c];\n    submit(&ipc);\n    waitdns(&ipc);\n    display_result(&ipc);\n    if (stopfirst > 1 && listed) break;\n  }\n\n  return listed ? 100 : failures ? 2 : 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns.3",
    "content": ".\\\" udns.3\n.\\\" udns library manpage\n.\\\"\n.\\\" Copyright (C) 2005-2014  Michael Tokarev <mjt+udns@tls.msk.ru>\n.\\\" This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n.\\\" write to the Free Software Foundation, Inc., 59 Temple Place,\n.\\\" Suite 330, Boston, MA  02111-1307  USA\n\n.TH udns 3 \"Jan 2014\" \"Library Functions\"\n\n.SH NAME\nudns \\- stub DNS resolver library\n\n.SH SYNOPSYS\n.nf\n#include <udns.h>\nstruct \\fBdns_ctx\\fR;\nstruct \\fBdns_query\\fR;\nextern struct dns_ctx \\fBdns_defctx\\fR;\nstruct dns_ctx *\\fIctx\\fR;\ntypedef void \\fBdns_query_fn\\fR(\\fIctx\\fR, void *\\fIresult\\fR, void *\\fIdata\\fR);\ntypedef int\n\\fBdns_parse_fn\\fR(const unsigned char *\\fIqnd\\fR,\n       const unsigned char *\\fIpkt\\fR,\n       const unsigned char *\\fIcur\\fR,\n       const unsigned char *\\fIend\\fR,\n       void **\\fIresultp\\fR);\n\n\\fBcc\\fR ... -l\\fBudns\\fR\n.fi\n\n.SH DESCRIPTION\n\n.PP\nThe DNS library, \\fBudns\\fR, implements thread-safe stub DNS resolver\nfunctionality, which may be used both traditional, syncronous way\nand asyncronously, with application-supplied event loop.\n\n.PP\nWhile DNS works with both TCP and UDP, performing UDP query first and\nif the result does not fit in UDP buffer (512 bytes max for original\nDNS protocol), retrying the query over TCP, the library uses UDP only,\nbut uses EDNS0 (RFC2671) extensions which allows larger UDP buffers.\n\n.PP\nThe library uses single UDP socket to perform all operations even when\nasking multiple nameservers.  This way, it is very simple to use the\nlibrary in asyncronous event-loop applications: an application should\nadd only single socket to the set of filedescriptors it monitors for I/O.\n\n.PP\nThe library uses two main objects, \\fIresolver context\\fR of type\n\\fBstruct\\ dns_ctx\\fR, and \\fIquery structure\\fR of type\n\\fBstruct\\ dns_query\\fR, both are opaque for an application.\nResolver context holds global information about the resolver,\nsuch as list of nameservers to use, list of active requests and the like.\nQuery objects holds information about a single DNS query in progress and\nare allocated/processed/freed by the library.   Pointer to query structure\nmay be treated as an identifier of an in-progress query and may be used\nto cancel the asyncronous query or to wait for it to complete.\n\n.PP\nAsyncronous interface works as follows.  An application initializes\nresolver context, submits any number of queries for it using one of\nsupplied \\fBdns_submit_\\fIXXX\\fR() routines (each return the query\nidentifier as pointer to query structure), waits for input on the\nUDP socket used by the library, and gives some control to the library\nby calling \\fBdns_ioevent\\fR() and \\fBdns_timeouts\\fR() routines when\nappropriate.  The library performs all necessary processing and executes\napplication supplied callback routine when a query completes (either\nsuccessefully or not), giving it the result if any, pointer to the\nresolver context (from which completion status may be obtained), and\nthe data pointer supplied by an application when the query has been\nsubmitted.  When submitting a query, an application requests how to\nhandle the reply -- to either return raw DNS reply packet for its\nown low-level processing, or it may provide an address of \\fIparsing\nroutine\\fR of type \\fBdns_parse_fn\\fR to perform conversion of on-wire\nformat into easy to use data structure (the library provides parsing\nroutines for several commonly used resource record types, as well as\ntype-safe higher-level inteface that requests parsing automatically).\nThe I/O monitoring and timeout handling may be either traditional\nselect() or poll() based, or any callback-driven technique may be\nused.\n\n.PP\nAdditionally, the library provides traditional syncronous interface,\nwhich may be intermixed with asyncronous calls (during syncronous\nquery processing, other asyncronous queries for the same resolver\ncontext continued to be processed as usual).  An application uses\none of numerous \\fBdns_resolve_\\fIXXX\\fR() routines provided by the\nlibrary to perform a query.  As with asyncronous interface, an\napplication may either request to return raw DNS packet or type-specific\ndata structure by providing the parsing routine to handle the reply.\nEvery routine from \\fBdns_resolve_\\fIXXX\\fR() series return pointer\nto result or NULL in case of any error.  Query completion status\n(or length of the raw DNS packet) is available from the resolver\ncontext using \\fBdns_status\\fR() routine, the same way as for the\nasyncronous interface.\n\n.PP\nInternally, library uses on-wire format of domain names, referred\nto as \\fIDN format\\fR in this manual page.  This is a series of domain\n\\fIlabels\\fR whith preceeding length byte, terminated by zero-length\nlabel wich is integral part of the DN format.  There are several routines\nprovided to convert from traditional asciiz string to DN and back.\nHigher-level type-specific query interface hides the DN format from\nan application.\n\n.SH \"COMMON DEFINITIONS\"\n\n.PP\nEvery DNS Resource Record (RR) has a \\fItype\\fR and a \\fIclass\\fR.\nThe library defines several integer constants, \\fBDNS_C_\\fIXXX\\fR and\n\\fBDNS_T_\\fIXXX\\fR, to use as symbolic names for RR classes and types,\nsuch as \\fBDNS_C_IN\\fR for Internet class, \\fBDNS_T_A\\fR for IPv4\naddress record type and so on.  See udns.h header file for complete list\nof all such constants.\n\n.PP\nThe following constants are defined in udns.h header file:\n.IP \"\\fBDNS_MAXDN\\fR (255 bytes)\"\nMaximum length of the domain name in internal (on-wire) DN format.\n.IP \"\\fBDNS_MAXLABEL\\fR (63 bytes)\"\nMaximum length of a single label in DN format.\n.IP \"\\fBDNS_MAXNAME\\fR (1024 bytes)\"\nMaximum length of asciiz format of a domain name.\n.IP \"\\fBDNS_HSIZE\\fR (12 bytes)\"\nSize of header in DNS packet.\n.IP \"\\fBDNS_PORT\\fR (53)\"\nDefault port to use when contacting a DNS server.\n.IP \"\\fBDNS_MAXSERV\\fR (6 servers)\"\nMaximum number of DNS servers to use.\n.IP \"\\fBDNS_MAXPACKET\\fR (512 bytes)\"\nMaximum length of DNS UDP packet as specified by original DNS protocol\n.IP \"\\fBDNS_EDNS0PACKET\\fR (4096 bytes)\"\nDefault length of DNS UDP packet (with EDNS0 extensions) the library uses.\nNote that recursive nameservers usually resides near the client asking them\nto resolve names, e.g. on the same LAN segment or even on the same host, so\nUDP packet fragmentation isn't a problem in most cases.  Note also that\nthe size of actual packets will be as many bytes as actual reply size requires,\nwhich is smaller than this value in almost all cases.\n\n.PP\nAdditionally, several constants are defined to simplify work with raw DNS\npackets, such as DNS response codes (\\fBDNS_R_\\fIXXX\\fR), DNS header layout\n(\\fBDNS_H_\\fIXXX\\fR) and others.  Again, see udns.h for complete list.\nLibrary error codes (\\fBDNS_E_\\fIXXX\\fR) are described later in this\nmanual page.\n\n.SH \"RESOLVER CONTEXT\"\n\n.PP\nResolver context, of type \\fBstruct\\ dns_ctx\\fR, is an object which is\nopaque to an application.  Several routines provided by the library\nto initialize, copy and free resolver contexts.  Most other high-level\nroutines in this library expects a pointer to resolver context, \\fIctx\\fR,\nas the first argument.  There is a default resolver context available,\nnamed \\fBdns_defctx\\fR.  When the context pointer \\fIctx\\fR passed to\na routine is NULL, \\fBdns_defctx\\fR is used.  Several resolver contexts\nmay be active at the same time, for example, when an application is\nmulti-threaded and each thread uses resolver.\n.PP\nIn order to use the library, an application should initialize and open\none or more resolver context objects.  These are two separate actions,\nperformed by \\fBdns_init\\fR() (or \\fBdns_reset\\fR()), and \\fBdns_open\\fR().\nBetween the two calls, an application is free to pefrorm additional\ninitialisation, such as setting custom nameservers, options or domain search\nlists.  Optionally, in case no additional custom initialisation is required,\n\\fBdns_init\\fR() may open the context if \\fIdo_open\\fR argument (see below)\nis non-zero.\n.PP\nWhen initializing resolver context, the library uses information from\nsystem file /etc/resolv.conf (see \\fBresolv.conf\\fR(5)), consults\nenvironment variables \\fB$LOCALDOMAIN\\fR, \\fB$NSCACHEIP\\fR,\n\\fB$NAMESERVERS\\fR and \\fB$RES_OPTIONS\\fR, and local host name to obtain\nlist of local nameservers, domain name search list and various resolver\noptions.\n.PP\nThe following routines to initialize resolver context are available:\n.PP\n.nf\nvoid \\fBdns_reset\\fR(\\fIctx\\fR)\nint \\fBdns_init\\fR(\\fIctx\\fR, int \\fIdo_open\\fR)\n.fi\n.RS\n\\fBdns_reset\\fR() resets a given resolver context to default values,\npreparing it to be opened by \\fBdns_open\\fR().\nIt is ok to call this routine against opened and active context - all active\nqueries will be dropped, sockets will be closed and so on.  This routine\ndoes not initialize any parameters from system configuration files, use\n\\fBdns_init\\fR() for this.  There's no error return - operation always\nsucceeds.  \\fBdns_init\\fR() does everything \\fBdns_reset\\fR() does,\nplus initializes various parameters of the context according to system\nconfiguration and process environment variables.  If \\fIdo_open\\fR is\nnon-zero, \\fBdns_init\\fR() calls \\fIdns_open\\fR(), so that the whole\nlibrary initialisation is performed in a single step.\n.RE\n.PP\n.nf\nstruct dns_ctx *\\fBdns_new\\fR(struct dns_ctx *\\fIcopy\\fR)\nvoid \\fBdns_free\\fR(\\fIctx\\fR)\n.fi\n.RS\n\\fBdns_new\\fR() allocates new resolver context and copies all parameters\nfor a given resolver context \\fIcopy\\fR, or default context if \\fIcopy\\fR\nis NULL, and returns pointer to the newly allocated context.  The context\nbeing copied should be initialized.\n\\fBdns_new\\fR() may fail if there's no memory available to make a copy\nof \\fIcopy\\fR, in which case the routine will return NULL pointer.\n\\fBdns_free\\fR() is used to close assotiated socket and free resolver\ncontext resources and cancelling (abandoming) all active queries\nassotiated with it.  It's an error to free \\fBdns_defctx\\fR, only\ndynamically allocated contexts returned by \\fBdns_new\\fR() are allowed\nto be freed by \\fBdns_free\\fR().\n.RE\n.PP\n.nf\nint \\fBdns_add_serv\\fR(\\fIctx\\fR, const char *\\fIservaddr\\fR)\nint \\fBdns_add_serv_s\\fR(\\fIctx\\fR, const struct sockaddr *\\fIsa\\fR)\nint \\fBdns_add_srch\\fR(\\fIctx\\fR, const char *\\fIsrch\\fR)\n.fi\n.RS\nAdd an element to list of nameservers (\\fBdns_add_serv\\fR(), as\nasciiz-string \\fIservaddr\\fR with an IP address of the nameserver,\nand \\fBdns_add_serv_s\\fR(), as initialized socket address \\fIsa\\fR),\nor search list (\\fBdns_add_srch\\fR(), as a pointer to domain name)\nfor the given context \\fIctx\\fR.  If the last argument is a NULL\npointer, the corresponding list (search or nameserver) is reset\ninstead.  Upon successeful completion, each routine returns new\nnumber of elements in the list in question.  On error, negative\nvalue is returned and global variable \\fBerrno\\fR is set appropriately.\nIt is an error to call any of this functions if the context is\nopened (after \\fBdns_open\\fR() or \\fBdns_init\\fR() with non-zero argument).\n.RE\n.PP\n.nf\nint \\fBdns_set_opts\\fR(\\fIctx\\fR, const char *\\fIopts\\fR)\n.fi\n.RS\nset resolver context options from \\fIopts\\fR string, in the same way as\nprocessing \\fBoptions\\fR statement in resolv.conf and \\fB$RES_OPTIONS\\fR\nenvironment variable.  Return number of unrecognized/invalid options\nfound (all recognized and valid options gets processed).\n.RE\n.PP\n.nf\nvoid \\fBdns_set_opt\\fR(\\fIctx\\fR, int \\fIopt\\fR, \\fIval\\fR)\n.fi\n.RS\n.B TODO\nThe \\fIflags\\fR argument is a bitmask with the following bits defined:\n.IP \\fBDNS_NOSRCH\\fR\ndo not perform domain name search in search list.\n.IP \\fBDNS_NORD\\fR\ndo not request recursion when performing queries\n(i.e. don't set RD flag in querues).\n.IP \\fBDNS_AAONLY\\fR\nrequest authoritative answers only (i.e. set AA\nflag in queries).\n.RE\n\n.PP\n.nf\nint \\fBdns_open\\fR(\\fIctx\\fR)\nint \\fBdns_sock\\fR(const \\fIctx\\fR)\nvoid \\fBdns_close\\fR(\\fIctx\\fR)\n.fi\n.RS\n\\fBdns_open\\fR() opens the UDP socket used for queries if not already\nopen, and return assotiated filedescriptor (or negative value in case\nof error).  Before any query can be submitted, the context should be\nopened using this routine.  And before opening, the context should be\ninitialized.\n\\fBdns_sock\\fR() return the UDP socket if open, or -1 if not.\n\\fBdns_close\\fR() closes the UDP socket if it was open, and drops all active\nqueries if any.\n.RE\n\n.PP\n.nf\nint \\fBdns_active\\fR(const \\fIctx\\fR)\n.fi\n.RS\nreturn number of active queries queued for the given context\n\\fIctx\\fR, or zero if none.\n.RE\n\n.PP\n.nf\nint \\fBdns_status\\fR(const \\fIctx\\fR)\n.fi\n.RS\nreturn status code from last operation.  When using syncronous\ninterface, this is the query completion status of the last query.\nWith asyncronous interface, from within the callback routine,\nthis is the query completion status of the query for which the\ncallback is being called.  When query submission fails, this\nis the error code indicating failure reason.  All error codes\nare negative and are represented by \\fBDNS_E_\\fIXXX\\fR constants\ndescribed below.\n.RE\n\n.PP\n.nf\nvoid \\fBdns_ioevent\\fR(\\fIctx\\fR, time_t \\fInow\\fR)\n.fi\n.RS\nthis routine may be called by an application to process I/O\nevents on the UDP socket used by the library, as returned\nby \\fBdns_sock\\fR().  The routine tries to receive incoming\nUDP datagram from the socket and process it.  The socket is\nset up to be non-blocking, so it is safe to call the routine\neven if there's no data to read.  The routine will process\nas many datagrams as are queued for the socket, so it is\nsafe to use it with either level-triggered or edge-triggered\nI/O monitoring model.  The \\fInow\\fR argument is either a\ncurrent time as returned by \\fBtime\\fR(), or 0, in which\ncase the routine will obtain current time by it's own.\n.RE\n\n.PP\n.nf\nint \\fBdns_timeouts\\fR(\\fIctx\\fR, int \\fImaxwait\\fR, time_t \\fInow\\fR)\n.fi\n.RS\nprocess any pending timeouts and return number of secounds\nfrom current time (\\fInow\\fR if it is not 0) to the time when\nthe library wants the application to pass it control to process\nmore queued requests.  In case when there are no requests pending,\nthis time is -1.  The routine will not request a time larger than\n\\fImaxwait\\fR secounds if it is greather or equal to zero.  If\n\\fInow\\fR is 0, the routine will obtain current time by it's own;\nwhen it is not 0, it should contain current time as returned by\n\\fBtime\\fR().\n.RE\n\n.PP\n.nf\ntypedef void \\fBdns_utm_fn\\fR(\\fIctx\\fR, int \\fItimeout\\fR, void *\\fIdata\\fR)\nvoid \\fBdns_set_tmcbck\\fR(\\fIctx\\fR, dns_utm_fn *\\fIutmfn\\fR, void *\\fIdata\\fR)\n.fi\n.RS\nAn application may use custom callback-based I/O multiplexing mechanism.\nUsually such a mechanism have concept of a \\fItimer\\fR, and an ability\nto register a timer event in a form of a callback routine which will\nbe executed after certain amount of time.  In order to use such an\nevent mechanism, udns provides an ability to register and de-register\ntimer events necessary for internal processing using whatever event\nmechanism an application uses.  For this to work, it is possible to\nassotiate a pointer to a routine that will perform necessary work for\n(de)registering timer events with a given resolver context, and\nudns will call that routine at appropriate times.  Prototype of\nsuch a routine is shown by \\fBdns_utm_fn\\fR typedef above.  Libudns\nassotiates single timer with resolver context.  User-supplied \\fIutmfn\\fR\nroutine will be called by the library with the following arguments:\n.IP \"\\fIctx\\fR == NULL\"\ndelete user timer, at context free time or when an application changes\nuser timer request routine using \\fBdns_set_tmcbck\\fR();\n.IP \"\\fIctx\\fR != NULL, \\fItimeout\\fR < 0\"\ndon't fire timer anymore, when there are no active requests;\n.IP \"\\fIctx\\fR != NULL, \\fItimeout\\fR == 0\"\nfire timer at the next possibility, but not immediately;\n.IP \"\\fIctx\\fR != NULL, \\fItimeout\\fR > 0\"\nfire timer after \\fItimeout\\fR seconds after now.\n.PP\nThe \\fIdata\\fR argument passed to the routine will be the same\nas passed to \\fBdns_set_tmcbck\\fR().\n.PP\nWhen a timer expires, an application should call \\fBdns_timeouts\\fR()\nroutine (see below).  Non-callback timer usage is provided too.\n.RE\n\n.PP\n.B XXXX TODO: some more resolver context routines, like dns_set_dbgfn() etc.\n\n.SH \"QUERY INTERFACE\"\n\n.PP\nThere are two ways to perform DNS queries: traditional syncronous\nway, when udns performs all the necessary processing and return\ncontrol to the application only when the query completes, and\nasyncronous way, when an application submits one or more queries\nto the library using given resolver context, and waits for completion\nby monitoring filedescriptor used by library and calling library\nroutines to process input on that filedescriptor.  Asyncronous mode\nworks with callback routines: an application supplies an address of\na routine to execute when the query completes, and a data pointer,\nwhich is passed to the callback routine.\n\n.PP\nQueries are submitted to the library in a form of \\fBstruct\\ dns_query\\fR.\nTo perform asyncronous query, an application calls one of the\n\\fBdns_submit_\\fIXXX\\fR() rounines, and provides necessary information\nfor a callback, together with all the query parameters.\nWhen the query completes, library will call application-supplied callback\nroutine, giving it the resolver context (wich holds query completion status),\ndynamically allocated result (which will be either raw DNS packet or, if\napplicatin requested parsing the result by specifying non-NULL parse routine,\nready-to-use type-specific structure), and a data pointer provided by an\napplication when it submitted the query.  It is the application who's\nresponsible for freeing the result memory.\n.PP\nGeneric query callback routine looks like this:\n.nf\ntypedef void\n\\fBdns_query_fn\\fR(\\fIctx\\fR, void *\\fIresult\\fR, void *\\fIdata\\fR)\n.fi\nType-specific query interface expects similar form of callback\nroutine with the only difference in type of \\fBresult\\fR argument,\nwhich will be pointer to specific data structure (decoded reply)\ninstead of this void pointer to raw DNS packet data.\n\n.PP\nResult parsing routine looks like this:\n.nf\ntypedef int\n\\fBdns_parse_fn\\fR(const unsigned char *\\fIqdn\\fR,\n      const unsigned char *\\fIpkt\\fR,\n      const unsigned char *\\fIcur\\fR,\n      const unsigned char *\\fIend\\fR,\n      void **\\fIresultp\\fR);\n.fi\nWhen called by the library, the arguments are as follows:\n\\fIpkt\\fR points to the start of the packet received;\n\\fIend\\fR points past the end of the packet received;\n\\fIcur\\fR points past the query DN in the query section of the\npacket;\n\\fIqdn\\fR points to the original query DN.\nThe routine should allocate a single buffer to hold the result,\nparse the reply filling in the buffer, and return the buffer\nusing \\fIresultp\\fR argument.  It returns 0 in case of error,\nor udns error code (\\fBDNS_E_\\fIXXX\\fR constants) in case of\nerror.\nNote that by the time when the parse routine is called by the\nlibrary, packet is already verified to be a reply to the\noriginal query, by matching query DN, query class and query type.\n\n.PP\nType-specific query inteface supplies necessary parsing routines\nautomatically.\n\n.PP\nIn case of error, query completion status as returned by\n\\fBdns_status\\fR(\\fIctx\\fR), will contain one of the following values:\n.IP \"positive value\"\nlength of raw DNS packet if parsing is not requested.\n.IP 0\nthe query was successeful and the \\fIreply\\fR points to type-specific\ndata structure.\n.IP \\fBDNS_E_TEMPFAIL\\fR\ntemporary error, the resolver nameserver was not able to\nprocess our query or timed out.\n.IP \\fBDNS_E_PROTOCOL\\fR\nprotocol error, a nameserver returned malformed reply.\n.IP \\fBDNS_E_NXDOMAIN\\fR\nthe domain name does not exist.\n.IP \\fBDNS_E_NODATA\\fR\nthere is no data of requested type found.\n.IP \\fBDNS_E_NOMEM\\fR\nout of memory while processing request.\n.IP \\fBDNS_E_BADQUERY\\fR\nsome aspect of the query (most common is the domain name in question)\nis invalid, and the library can't even start a query.\n\n.PP\nLibrary provides two series of routines which uses similar interface --\none for asyncronous queries and another for syncronous queries.  There\nare two general low-level routines in each series to submit (asyncronous\ninterface) and resolve (syncronous interface) queries, as well as several\ntype-specific routines with more easy-to-use interfaces.  To submit\nan asyncronous query, use one of \\fBdns_submit_\\fIXXX\\fR() routine, each\nof which accepts query parameters, pointers to callback routine and to\ncallback data, and optional current time hint.  Note type-specific\n\\fBdns_submit_\\fIXXX\\fR() routines expects specific type of the callback\nroutine as well, which accepts reply as a pointer to corresponding\nstructure, not a void pointer).  Every \\fBdns_submit_\\fIXXX\\fR() routine\nreturn pointer to internal query structure of type struct\\ dns_query,\nused as an identifier for the given query.\n\n.PP\nTo resolve a query syncronously, use one of \\fBdns_resolve_\\fIXXX\\fR()\nroutines, which accepts the same query parameters (but not the\ncallback pointers) as corresponding \\fBdns_submit_\\fIXXX\\fR(), and\nreturn the query result, which is the same as passed to the callback\nroutine in case of asyncronous interface.\n\n.PP\nIn either case, the result memory (if the query completed successefully)\nis dynamically allocated and should be freed by an application.  If\nthe query failed for any reason, the result will be NULL, and error\nstatus will be available from \\fBdns_status\\fR(\\fIctx\\fR) routine\nas shown above.\n\n.PP\n.nf\nstruct dns_query *\n\\fBdns_submit_dn\\fR(\\fIctx\\fR,\n     const unsigned char *\\fIdn\\fR, \\fIqcls\\fR, \\fIqtyp\\fR, \\fIflags\\fR,\n     \\fIparse\\fR, \\fIcbck\\fR, \\fIdata\\fR)\nstruct dns_query *\n\\fBdns_submit_p\\fR(\\fIctx\\fR,\n     const char *\\fIname\\fR, \\fIqcls\\fR, \\fIqtyp\\fR, \\fIflags\\fR,\n     \\fIparse\\fR, \\fIcbck\\fR, \\fIdata\\fR)\n   enum dns_class \\fIqcls\\fR;\n   enum dns_type \\fIqtyp\\fR;\n   int \\fIflags\\fR;\n   dns_parse_fn *\\fIparse\\fR;\n   dns_query_fn *\\fIcbck\\fR;\n   void *\\fIdata\\fR;\n.fi\n.RS\nsubmit a query for processing for the given resolver context \\fIctx\\fR.\nTwo routines differs only in 3rd argument, which is domain name in\nDN format (\\fIdn\\fR) or asciiz string (\\fIname\\fR).  The query will be\nperformed for the given domain name, with type \\fIqtyp\\fR in class \\fIqcls\\fR,\nusing option bits in \\fIflags\\fR, using RR parsing routine pointed by\n\\fIparse\\fR if not-NULL, and upon completion, \\fIcbck\\fR function will\nbe called with the \\fIdata\\fR argument.\nIn case of successeful query submission,\nthe routine return pointer to internal query structure which may be treated\nas an identifier of the query as used by the library, and may be used as an\nargument for \\fBdns_cancel\\fR() routine.  In case of error, NULL will be\nreturned, and context error status (available using \\fIdns_status\\fR() routine)\nwill be set to corresponding error code, which in this case may be\nDNS_E_BADQUERY if the \\fIname\\fR of \\fIdn\\fR is invalid, DNS_E_NOMEM if\nthere's no memory available to allocate query structure, or DNS_E_TEMPFAIL\nif an internal error occured.\n.RE\n\n.PP\n.nf\nvoid *\\fBdns_resolve_dn\\fR(\\fIctx\\fR,\n     const unsigned char *\\fIdn\\fR, \\fIqcls\\fR, \\fIqtyp\\fR, \\fIflags\\fR, \\fIparse\\fR);\nvoid *\\fBdns_resolve_p\\fR(\\fIctx\\fR,\n     const char *\\fIname\\fR, \\fIqcls\\fR, \\fIqtyp\\fR, \\fIflags\\fR, \\fIparse\\fR)\n   enum dns_class \\fIqcls\\fR;\n   enum dns_type \\fIqtyp\\fR;\n   int \\fIflags\\fR;\n   dns_parse_fn *\\fIparse\\fR;  \n.fi\n.RS\nsyncronous interface.  The routines perform all the steps necessary to resolve\nthe given query and return the result.  If there's no positive result for any\nreason, all the routines return NULL, and set context error status (available \nusing \\fBdns_status\\fR() routine) to indicate the error code.  If the query\nwas successeful, context status code will contain either the length of the\nraw DNS reply packet if \\fIparse\\fR argument was NULL (in which case the return\nvalue is pointer to the reply DNS packet), or 0 (in which case the return value\nis the result of \\fIparse\\fR routine).  If the query successeful (return value\nis not NULL), the memory returned was dynamically allocated by the library\nand should be free()d by application after use.\n.RE\n\n.PP\n.nf\nvoid *\\fBdns_resolve\\fR(\\fIctx\\fR, struct dns_query *\\fIq\\fR)\n.fi\n.RS\nwait for the given query \\fIq\\fR, as returned by one of\n\\fBdns_submit_\\fIXXX\\fR() routines, for completion, and\nreturn the result.  The callback routine will not be called\nfor this query.  After completion, the query identifier \\fIq\\fR\nis not valid. Both \\fBdns_resolve_dn\\fR() and \\fBdns_resolve_p\\fR()\nare just wrappers around corresponding submit routines and this\n\\fBdns_resolve\\fR() routine.\n.RE\n\n.PP\n.nf\nvoid \\fBdns_cancel\\fR(\\fIctx\\fR, struct dns_query *\\fIq\\fR)\n.fi\n.RS\ncancel an active query \\fIq\\fR, without calling a callback routine.\nAfter completion, the query identifier \\fIq\\fR is not valid.\n.RE\n\n.SH \"TYPE-SPECIFIC QUERIES\"\n\n.PP\nIn addition to the generic low-level query interface, the library provides\na set of routines to perform specific queries in a type-safe manner, as\nwell as parsers for several well-known resource record types.  The library\nimplements high-level interface for A, AAAA, PTR, MX and TXT records\nand DNSBL and RHSBL functionality.  These routines returns specific types\nas result of a query, instead of raw DNS packets.  The following types\nand routines are available.\n\n.PP\n.nf\nstruct \\fBdns_rr_null\\fR {\n  char *\\fBdnsn_qname\\fR;     /* original query name */\n  char *\\fBdnsn_cname\\fR;     /* canonical name */\n  unsigned \\fBdnsn_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnsn_nrr\\fR;         /* number of records in the set */\n};\n.fi\n.PP\nNULL RR set, used as a base for all other RR type structures.\nEvery RR structure as used by the library have four standard\nfields as in struct\\ \\fBdns_rr_null\\fR.\n\n.SS \"IN A Queries\"\n.PP\n.nf\nstruct \\fBdns_rr_a4\\fR {       /* IN A RRset */\n  char *\\fBdnsa4_qname\\fR;     /* original query name */\n  char *\\fBdnsa4_cname\\fR;     /* canonical name */\n  unsigned \\fBdnsa4_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnsa4_nrr\\fR;         /* number of addresses in the set */\n  struct in_addr \\fBdnsa4_addr\\fR[]; /* array of addresses */\n};\ntypedef void\n  \\fBdns_query_a4_fn\\fR(\\fIctx\\fR, struct dns_rr_a4 *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_a4\\fB;\nstruct dns_query *\n\\fBdns_submit_a4\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR,\n   dns_query_a4_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_a4 *\n\\fBdns_resolve_a4\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_a4\\fR structure holds a result of an \\fBIN A\\fR query,\nwhich is an array of IPv4 addresses.  Callback routine for IN A queries\nexpected to be of type \\fBdns_query_a4_fn\\fR, which expects pointer to\n\\fBdns_rr_a4\\fR structure as query result instead of raw DNS packet.\nThe \\fBdns_parse_a4\\fR() is used to convert raw DNS reply packet into\n\\fBdns_rr_a4\\fR structure (it is used internally and may be used directly too\nwith generic query interface).  Routines \\fBdns_submit_a4\\fR() and\n\\fBdns_resolve_a4\\fR() are used to perform A IN queries in a type-safe\nmanner.  The \\fIname\\fR parameter is the domain name in question, and\n\\fIflags\\fR is query flags bitmask, with one bit, DNS_NOSRCH, of practical\ninterest (if the \\fIname\\fR is absolute, that is, it ends up with a dot,\nDNS_NOSRCH flag will be set automatically).\n\n.SS \"IN AAAA Queries\"\n.PP\n.nf\nstruct \\fBdns_rr_a6\\fR {       /* IN AAAA RRset */\n  char *\\fBdnsa6_qname\\fR;     /* original query name */\n  char *\\fBdnsa6_cname\\fR;     /* canonical name */\n  unsigned \\fBdnsa6_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnsa6_nrr\\fR;         /* number of addresses in the set */\n  struct in6_addr \\fBdnsa6_addr\\fR[]; /* array of addresses */\n};\ntypedef void\n  \\fBdns_query_a6_fn\\fR(\\fIctx\\fR, struct dns_rr_a6 *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_a6\\fB;\nstruct dns_query *\n\\fBdns_submit_a6\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR,\n   dns_query_a6_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_a6 *\n\\fBdns_resolve_a6\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_a6\\fR structure holds a result of an \\fBIN AAAA\\fR query,\nwhich is an array of IPv6 addresses.  Callback routine for IN AAAA queries\nexpected to be of type \\fBdns_query_a6_fn\\fR, which expects pointer to\n\\fBdns_rr_a6\\fR structure as query result instead of raw DNS packet.\nThe \\fBdns_parse_a6\\fR() is used to convert raw DNS reply packet into\n\\fBdns_rr_a6\\fR structure (it is used internally and may be used directly too\nwith generic query interface).  Routines \\fBdns_submit_a6\\fR() and\n\\fBdns_resolve_a6\\fR() are used to perform AAAA IN queries in a type-safe\nmanner.  The \\fIname\\fR parameter is the domain name in question, and\n\\fIflags\\fR is query flags bitmask, with one bit, DNS_NOSRCH, of practical\ninterest (if the \\fIname\\fR is absolute, that is, it ends up with a dot,\nDNS_NOSRCH flag will be set automatically).\n\n.SS \"IN PTR Queries\"\n.PP\n.nf\nstruct \\fBdns_rr_ptr\\fR {       /* IN PTR RRset */\n  char *\\fBdnsptr_qname\\fR;     /* original query name */\n  char *\\fBdnsptr_cname\\fR;     /* canonical name */\n  unsigned \\fBdnsptr_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnsptr_nrr\\fR;         /* number of domain name pointers */\n  char *\\fBdnsptr_ptr\\fR[];     /* array of domain name pointers */\n};\ntypedef void\n  \\fBdns_query_ptr_fn\\fR(\\fIctx\\fR, struct dns_rr_ptr *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_ptr\\fB;\nstruct dns_query *\n\\fBdns_submit_a4ptr\\fB(\\fIctx\\fR, const struct in_addr *\\fBaddr\\fR,\n   dns_query_ptr_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_ptr *\n\\fBdns_resolve_a4ptr\\fB(\\fIctx\\fR, const struct in_addr *\\fBaddr\\fR);\nstruct dns_query *\n\\fBdns_submit_a6ptr\\fB(\\fIctx\\fR, const struct in6_addr *\\fBaddr\\fR,\n   dns_query_ptr_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_ptr *\n\\fBdns_resolve_a6ptr\\fB(\\fIctx\\fR, const struct in6_addr *\\fBaddr\\fR);\n.fi\n.PP\nThe \\fBdns_rr_ptr\\fR structure holds a result of an IN PTR query, which\nis an array of domain name pointers for a given IPv4 or IPv6 address.\nCallback routine for IN PTR queries expected to be of type\n\\fBdns_query_ptr_fn\\fR, which expects pointer to \\fBdns_rr_ptr\\fR\nstructure as query result instead of raw DNS packet.  The \\fBdns_parse_ptr\\fR()\nis used to convert raw DNS reply packet into \\fBdns_rr_ptr\\fR structure\n(it is used internally and may be used directly too with generic query\ninterface).  Routines \\fBdns_submit_a4ptr\\fR() and \\fBdns_resolve_a4ptr\\fR()\nare used to perform IN PTR queries for IPv4 addresses in a type-safe\nmanner. Routines \\fBdns_submit_a6ptr\\fR() and \\fBdns_resolve_a6ptr\\fR()\nare used to perform IN PTR queries for IPv6 addresses.\n\n.SS \"IN MX Queries\"\n.PP\n.nf\nstruct \\fBdns_mx\\fR {          /* single MX record */\n  int \\fBpriority\\fR;          /* priority value of this MX */\n  char *\\fBname\\fR;            /* domain name of this MX */\n};\nstruct \\fBdns_rr_mx\\fR {       /* IN MX RRset */\n  char *\\fBdnsmx_qname\\fR;     /* original query name */\n  char *\\fBdnsmx_cname\\fR;     /* canonical name */\n  unsigned \\fBdnsmx_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnsmx_nrr\\fR;         /* number of mail exchangers in the set */\n  struct dns_mx \\fBdnsmx_mx\\fR[]; /* array of mail exchangers */\n};\ntypedef void\n  \\fBdns_query_mx_fn\\fR(\\fIctx\\fR, struct dns_rr_mx *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_mx\\fB;\nstruct dns_query *\n\\fBdns_submit_mx\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR,\n   dns_query_mx_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_mx *\n\\fBdns_resolve_mx\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_mx\\fR structure holds a result of an IN MX query, which\nis an array of mail exchangers for a given domain.  Callback routine for IN MX\nqueries expected to be of type \\fBdns_query_mx_fn\\fR, which expects pointer to\n\\fBdns_rr_mx\\fR structure as query result instead of raw DNS packet.\nThe \\fBdns_parse_mx\\fR() is used to convert raw DNS reply packet into\n\\fBdns_rr_mx\\fR structure (it is used internally and may be used directly too\nwith generic query interface).  Routines \\fBdns_submit_mx\\fR() and\n\\fBdns_resolve_mx\\fR() are used to perform IN MX queries in a type-safe\nmanner.  The \\fIname\\fR parameter is the domain name in question, and\n\\fIflags\\fR is query flags bitmask, with one bit, DNS_NOSRCH, of practical\ninterest (if the \\fIname\\fR is absolute, that is, it ends up with a dot,\nDNS_NOSRCH flag will be set automatically).\n\n.SS \"TXT Queries\"\n.PP\n.nf\nstruct \\fBdns_txt\\fR {          /* single TXT record */\n  int \\fBlen\\fR;                /* length of the text */\n  unsigned char *\\fBtxt\\fR;     /* pointer to the text */\n};\nstruct \\fBdns_rr_txt\\fR {       /* TXT RRset */\n  char *\\fBdnstxt_qname\\fR;     /* original query name */\n  char *\\fBdnstxt_cname\\fR;     /* canonical name */\n  unsigned \\fBdnstxt_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnstxt_nrr\\fR;         /* number of text records in the set */\n  struct dns_txt \\fBdnstxt_txt\\fR[]; /* array of TXT records */\n};\ntypedef void\n  \\fBdns_query_txt_fn\\fR(\\fIctx\\fR, struct dns_rr_txt *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_txt\\fB;\nstruct dns_query *\n\\fBdns_submit_txt\\fB(\\fIctx\\fR, const char *\\fIname\\fR, enum dns_class \\fIqcls\\fR,\n   int \\fIflags\\fR, dns_query_txt_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_txt *\n\\fBdns_resolve_txt\\fB(\\fIctx\\fR, const char *\\fIname\\fR,\n             enum dns_class \\fIqcls\\fR, int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_txt\\fR structure holds a result of a TXT query, which is an\narray of text records for a given domain name.  Callback routine for TXT\nqueries expected to be of type \\fBdns_query_txt_fn\\fR, which expects pointer\nto \\fBdns_rr_txt\\fR structure as query result instead of raw DNS packet.\nThe \\fBdns_parse_txt\\fR() is used to convert raw DNS reply packet into\n\\fBdns_rr_txt\\fR structure (it is used internally and may be used directly too\nwith generic query interface).  Routines \\fBdns_submit_txt\\fR() and\n\\fBdns_resolve_txt\\fR() are used to perform IN MX queries in a type-safe\nmanner.  The \\fIname\\fR parameter is the domain name in question, and\n\\fIflags\\fR is query flags bitmask, with one bit, DNS_NOSRCH, of practical\ninterest (if the \\fIname\\fR is absolute, that is, it ends up with a dot,\nDNS_NOSRCH flag will be set automatically).  Note that each TXT string\nis represented by \\fBstruct\\ dns_txt\\fR, while zero-terminated (and the\nlen field of the structure does not include the terminator), may contain\nembedded null characters -- content of TXT records is not interpreted\nby the library in any way.\n\n.SS \"SRV Queries\"\n.PP\n.nf\nstruct \\fBdns_srv\\fR {          /* single SRV record */\n  int \\fBpriority\\fR;           /* priority of the record */\n  int \\fBweight\\fR;             /* weight of the record */\n  int \\fBport\\fR;               /* the port number to connect to */\n  char *\\fBname\\fR;             /* target host name */\n};\nstruct \\fBdns_rr_srv\\fR {       /* SRV RRset */\n  char *\\fBdnssrv_qname\\fR;     /* original query name */\n  char *\\fBdnssrv_cname\\fR;     /* canonical name */\n  unsigned \\fBdnssrv_ttl\\fR;    /* Time-To-Live (TTL) value */\n  int \\fBdnssrv_nrr\\fR;         /* number of text records in the set */\n  struct dns_srv \\fBdnssrv_srv\\fR[]; /* array of SRV records */\n};\ntypedef void\n  \\fBdns_query_srv_fn\\fR(\\fIctx\\fR, struct dns_rr_srv *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_srv\\fB;\nstruct dns_query *\n\\fBdns_submit_srv\\fB(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIservice\\fR, const char *\\fIprotocol\\fR,\n   int \\fIflags\\fR, dns_query_txt_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_srv *\n\\fBdns_resolve_srv\\fB(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIservice\\fR, const char *\\fIprotocol\\fR,\n             int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_srv\\fR structure holds a result of an IN SRV (rfc2782) query,\nwhich is an array of servers (together with port numbers) which are performing\noperations for a given \\fIservice\\fR using given \\fIprotocol\\fR on a target\ndomain \\fIname\\fR.  Callback routine for IN SRV queries expected to be of type\n\\fBdns_query_srv_fn\\fR, which expects pointer to \\fBdns_rr_srv\\fR structure as\nquery result instead of raw DNS packet.  The \\fBdns_parse_srv\\fR() is used to\nconvert raw DNS reply packet into \\fBdns_rr_srv\\fR structure (it is used\ninternally and may be used directly too with generic query interface).\nRoutines \\fBdns_submit_srv\\fR() and \\fBdns_resolve_srv\\fR() are used to\nperform IN SRV queries in a type-safe manner.  The \\fIname\\fR parameter\nis the domain name in question, \\fIservice\\fR and \\fRprotocl\\fR specifies the\nservice and the protocol in question (the library will construct query DN\naccording to rfc2782 rules) and may be NULL (in this case the library\nassumes \\fIname\\fR parameter holds the complete SRV query), and\n\\fIflags\\fR is query flags bitmask, with one bit, DNS_NOSRCH, of practical\ninterest (if the \\fIname\\fR is absolute, that is, it ends up with a dot,\nDNS_NOSRCH flag will be set automatically).\n\n.SS \"NAPTR Queries\"\n.PP\n.nf\nstruct \\fBdns_naptr\\fR {        /* single NAPTR record */\n  int \\fBorder\\fR;              /* record order */\n  int \\fBpreference\\fR;         /* preference of this record */\n  char *\\fBflags\\fR;            /* application-specific flags */\n  char *\\fBservice\\fR;          /* service parameter */\n  char *\\fBregexp\\fR;           /* substitutional regular expression */\n  char *\\fBreplacement\\fR;      /* replacement string */\n};\nstruct \\fBdns_rr_naptr\\fR {     /* NAPTR RRset */\n  char *\\fBdnsnaptr_qname\\fR;   /* original query name */\n  char *\\fBdnsnaptr_cname\\fR;   /* canonical name */\n  unsigned \\fBdnsnaptr_ttl\\fR;  /* Time-To-Live (TTL) value */\n  int \\fBdnsnaptr_nrr\\fR;       /* number of text records in the set */\n  struct dns_naptr \\fBdnsnaptr_naptr\\fR[]; /* array of NAPTR records */\n};\ntypedef void\n  \\fBdns_query_naptr_fn\\fR(\\fIctx\\fR, struct dns_rr_naptr *\\fIresult\\fR, \\fIdata\\fR)\ndns_parse_fn \\fBdns_parse_naptr\\fB;\nstruct dns_query *\n\\fBdns_submit_naptr\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR,\n   dns_query_txt_fn *\\fIcbck\\fR, \\fIdata\\fR);\nstruct dns_rr_naptr *\n\\fBdns_resolve_naptr\\fB(\\fIctx\\fR, const char *\\fIname\\fR, int \\fIflags\\fR);\n.fi\n.PP\nThe \\fBdns_rr_naptr\\fR structure holds a result of an IN NAPTR (rfc3403) query.\nCallback routine for IN NAPTR queries expected to be of type\n\\fBdns_query_naptr_fn\\fR, expects pointer to \\fBdns_rr_naptr\\fR\nstructure as query result instead of raw DNS packet.\nThe \\fBdns_parse_naptr\\fR() is used to convert raw DNS reply packet into\n\\fBdns_rr_naptr\\fR structure (it is used\ninternally and may be used directly too with generic query interface).\nRoutines \\fBdns_submit_naptr\\fR() and \\fBdns_resolve_naptr\\fR() are used to\nperform IN NAPTR queries in a type-safe manner.  The \\fIname\\fR parameter\nis the domain name in question, and \\fIflags\\fR is query flags bitmask,\nwith one bit, DNS_NOSRCH, of practical interest (if the \\fIname\\fR is\nabsolute, that is, it ends up with a dot, DNS_NOSRCH flag will be set\nautomatically).\n\n.SS \"DNSBL Interface\"\n.PP\nA DNS-based blocklists, or a DNSBLs, are in wide use nowadays, especially\nto protect mailservers from spammers.  The library provides DNSBL interface,\na set of routines to perform queries against DNSBLs.  Routines accepts an\nIP address (IPv4 and IPv6 are both supported) and a base DNSBL zone as\nquery parameters, and returns either \\fBdns_rr_a4\\fR or \\fBdns_rr_txt\\fR\nstructure.  Note that IPv6 interface return IPv4 RRset.\n.PP\n.nf\nstruct dns_query *\n\\fBdns_submit_a4dnsbl\\fR(\\fIctx\\fR,\n  const struct in_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR,\n  dns_query_a4_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_query *\n\\fBdns_submit_a4dnsbl_txt\\fR(\\fIctx\\fR,\n  const struct in_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR,\n  dns_query_txt_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_query *\n\\fBdns_submit_a6dnsbl\\fR(\\fIctx\\fR,\n  const struct in6_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR,\n  dns_query_a4_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_query *\n\\fBdns_submit_a6dnsbl_txt\\fR(\\fIctx\\fR,\n  const struct in6_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR,\n  dns_query_txt_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_rr_a4 *\\fBdns_resolve_a4dnsbl\\fR(\\fIctx\\fR,\n  const struct in_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR)\nstruct dns_rr_txt *\\fBdns_resolve_a4dnsbl_txt\\fR(\\fIctx\\fR,\n  const struct in_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR)\nstruct dns_rr_a4 *\\fBdns_resolve_a6dnsbl\\fR(\\fIctx\\fR,\n  const struct in6_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR)\nstruct dns_rr_txt *\\fBdns_resolve_a6dnsbl_txt\\fR(\\fIctx\\fR,\n  const struct in6_addr *\\fIaddr\\fR, const char *\\fIdnsbl\\fR)\n.fi\nPerform (submit or resolve) a DNSBL query for the given \\fIdnsbl\\fR\ndomain and an IP \\fIaddr\\fR in question, requesting either A or TXT\nrecords.\n\n.SS \"RHSBL Interface\"\n.PP\nRHSBL is similar to DNSBL, but instead of an IP address, the\nparameter is a domain name.\n.PP\n.nf\nstruct dns_query *\n\\fBdns_submit_rhsbl\\fR(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIrhsbl\\fR,\n  dns_query_a4_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_query *\n\\fBdns_submit_rhsbl_txt\\fR(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIrhsbl\\fR,\n  dns_query_txt_fn *\\fIcbck\\fR, void *\\fIdata\\fR);\nstruct dns_rr_a4 *\n\\fBdns_resolve_rhsbl\\fR(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIrhsbl\\fR);\nstruct dns_rr_txt *\n\\fBdns_resolve_rhsbl_txt\\fR(\\fIctx\\fR, const char *\\fIname\\fR, const char *\\fIrhsbl\\fR);\n.fi\nPerform (submit or resolve) a RHSBL query for the given \\fIrhsbl\\fR\ndomain and \\fIname\\fR in question, requesting either A or TXT records.\n\n\n.SH \"LOW-LEVEL INTERFACE\"\n\n.SS \"Domain Names (DNs)\"\n\n.PP\nA DN is a series of domain name labels each starts with length byte,\nfollowed by empty label (label with zero length).  The following\nroutines to work with DNs are provided.\n\n.PP\n.nf\nunsigned \\fBdns_dnlen\\fR(const unsigned char *\\fIdn\\fR)\n.fi\n.RS\nreturn length of the domain name \\fIdn\\fR, including the terminating label.\n.RE\n\n.PP\n.nf\nunsigned \\fBdns_dnlabels\\fR(const unsigned char *\\fIdn\\fR)\n.fi\n.RS\nreturn number of non-zero labels in domain name \\fIdn\\fR.\n.RE\n\n.PP\n.nf\nunsigned \\fBdns_dnequal\\fR(\\fIdn1\\fR, \\fIdn2\\fR)\n  const unsigned char *\\fIdn1\\fR, *\\fIdn2\\fR;\n.fi\n.RS\ntest whenever the two domain names, \\fIdn1\\fR and \\fIdn2\\fR, are\nequal (case-insensitive).  Return domain name length if equal\nor 0 if not.\n.RE\n\n.PP\n.nf\nunsigned \\fBdns_dntodn\\fR(\\fIsdn\\fR, \\fIddn\\fR, \\fIdnsiz\\fR)\n  const unsigned char *\\fIsdn\\fR;\n  unsigned char *\\fIddn\\fR;\n  unsigned \\fIdnsiz\\fR;\n.fi\n.RS\ncopies the source domain name \\fIsdn\\fR to destination buffer \\fIddn\\fR\nof size \\fIdnsiz\\fR.  Return domain name length or 0 if \\fIddn\\fR is\ntoo small.\n.RE\n\n.PP\n.nf\nint \\fBdns_ptodn\\fR(\\fIname\\fR, \\fInamelen\\fR, \\fIdn\\fR, \\fIdnsiz\\fR, \\fIisabs\\fR)\nint \\fBdns_sptodn\\fR(\\fIname\\fR, \\fIdn\\fR, \\fIdnsiz\\fR)\n  const char *\\fIname\\fR; unsigned \\fInamelen\\fR;\n  unsigned char *\\fIdn\\fR; unsigned \\fIdnsiz\\fR;\n  int *\\fIisabs\\fR;\n.fi\n.RS\nconvert asciiz name \\fIname\\fR of length \\fInamelen\\fR to DN format,\nplacing result into buffer \\fIdn\\fR of size \\fIdnsiz\\fR.  Return\nlength of the DN if successeful, 0 if the \\fIdn\\fR buffer supplied is\ntoo small, or negative value if \\fIname\\fR is invalid.  If \\fIisabs\\fR\nis non-NULL and conversion was successeful, *\\fIisabs\\fR will be set to\neither 1 or 0 depending whenever \\fIname\\fR was absolute (i.e. ending with\na dot) or not.  Name length, \\fInamelength\\fR, may be zero, in which case\nstrlen(\\fIname\\fR) will be used.  Second form, \\fBdns_sptodn\\fR(), is a\nsimplified form of \\fBdns_ptodn\\fR(), equivalent to\n.br\n.nf\n\\fBdns_ptodn\\fR(\\fIname\\fR, 0, \\fIdn\\fR, \\fIdnlen\\fR, 0).\n.fi\n.RE\n\n.PP\n.nf\nextern const unsigned char \\fBdns_inaddr_arpa_dn\\fR[]\nint \\fBdns_a4todn\\fR(const struct in_addr *\\fIaddr\\fR, const unsigned char *\\fItdn\\fR,\n      unsigned char *\\fIdn\\fR, unsigned \\fIdnsiz\\fR)\nint \\fBdns_a4ptodn\\fR(const struct in_addr *\\fIaddr\\fR, const char *\\fItname\\fR,\n      unsigned char *\\fIdn\\fR, unsigned \\fIdnsiz\\fR)\nextern const unsigned char \\fBdns_ip6_arpa_dn\\fR[]\nint \\fBdns_a6todn\\fR(const struct in6_addr *\\fIaddr\\fR, const unsigned char *\\fItdn\\fR,\n      unsigned char *\\fIdn\\fR, unsigned \\fIdnsiz\\fR)\nint \\fBdns_a6ptodn\\fR(const struct in6_addr *\\fIaddr\\fR, const char *\\fItname\\fR,\n      unsigned char *\\fIdn\\fR, unsigned \\fIdnsiz\\fR)\n.fi\n.RS\nseveral variants of routines to convert IPv4 and IPv6 address \\fIaddr\\fR\ninto reverseDNS-like domain name in DN format, storing result in \\fIdn\\fR\nof size \\fIdnsiz\\fR.  \\fItdn\\fR (or \\fItname\\fR) is the base zone name,\nlike in-addr.arpa for IPv4 or in6.arpa for IPv6.  If \\fItdn\\fR (or \\fItname\\fR)\nis NULL, \\fBdns_inaddr_arpa_dn\\fR (or \\fBdns_ip6_arpa_dn\\fR) will be used.\nThe routines may be used to construct a DN for a DNSBL lookup for example.\nAll routines return length of the resulting DN on success, -1 if resulting\nDN is invalid, or 0 if the \\fIdn\\fR buffer (\\fIdnsiz\\fR) is too small.\nTo hold standard rDNS DN, a buffer of size \\fBDNS_A4RSIZE\\fR (30 bytes) for\nIPv4 address, or \\fBDNS_A6RSIZE\\fR (74 bytes) for IPv6 address, is sufficient.\n.RE\n\n.PP\n.nf\nint \\fBdns_dntop\\fR(\\fIdn\\fR, \\fIname\\fR, \\fInamesiz\\fR)\n   const unsigned char *\\fIdn\\fR;\n   const char *\\fIname\\fR; unsigned \\fInamesiz\\fR;\n.fi\n.RS\nconvert domain name \\fIdn\\fR in DN format to asciiz string, placing result\ninto \\fIname\\fR buffer of size \\fInamesiz\\fR.  Maximum length of asciiz\nrepresentation of domain name is \\fBDNS_MAXNAME\\fR (1024) bytes.  Root\ndomain is represented as empty string.  Return length of the resulting name\n(including terminating character, i.e. strlen(name)+1) on success, 0 if the\n\\fIname\\fR buffer is too small, or negative value if \\fIdn\\fR is invalid\n(last case should never happen since all routines in this library which\nproduce domain names ensure the DNs generated are valid).\n.RE\n\n.PP\n.nf\nconst char *\\fBdns_dntosp\\fR(const unsigned char *\\fIdn\\fR)\n.fi\n.RS\nconvert domain name \\fIdn\\fR in DN format to asciiz string using static\nbuffer.  Return the resulting asciiz string on success or NULL on failure.\nNote since this routine uses static buffer, it is not thread-safe.\n.RE\n\n.PP\n.nf\nunsigned \\fBdns_dntop_size\\fR(const unsigned char *\\fIdn\\fR)\n.fi\n.RS\nreturn the buffer size needed to convert the \\fIdn\\fR domain name\nin DN format to asciiz string, for \\fBdns_dntop\\fR().  The routine\nreturn either the size of buffer required, including the trailing\nzero byte, or 0 if \\fIdn\\fR is invalid.\n.RE\n\n.SS \"Working with DNS Packets\"\n\n.PP\nThe following routines are provided to encode and decode DNS on-wire\npackets.  This is low-level interface.\n\n.PP\nDNS response codes (returned by \\fBdns_rcode\\fR() routine) are\ndefined as constants prefixed with \\fBDNS_R_\\fR.  See udns.h\nheader file for the complete list.  In particular, constants\n\\fBDNS_R_NOERROR\\fR (0), \\fBDNS_R_SERVFAIL\\fR, \\fBDNS_R_NXDOMAIN\\fR\nmay be of interest to an application.\n\n.PP\n.nf\nunsigned \\fBdns_get16\\fR(const unsigned char *\\fIp\\fR)\nunsigned \\fBdns_get32\\fR(const unsigned char *\\fIp\\fR)\n.fi\n.RS\nhelper routines, convert 16-bit or 32-bit integer in on-wire\nformat pointed to by \\fIp\\fR to unsigned.\n.RE\n\n.PP\n.nf\nunsigned char *\\fBdns_put16\\fR(unsigned char *\\fId\\fR, unsigned \\fIn\\fR)\nunsigned char *\\fBdns_put32\\fR(unsigned char *\\fId\\fR, unsigned \\fIn\\fR)\n.fi\n.RS\nhelper routine, convert unsigned 16-bit or 32-bit integer \\fIn\\fR to\non-wire format to buffer pointed to by \\fId\\fR, return \\fId\\fR+2 or\n\\fId\\fR+4.\n.RE\n\n.PP\n.nf\n\\fBDNS_HSIZE\\fR (12)\n.fi\n.RS\ndefines size of DNS header.  Data section\nin the DNS packet immediately follows the header.  In the header,\nthere are query identifier (id), various flags and codes,\nand number of resource records in various data sections.\nSee udns.h header file for complete list of DNS header definitions.\n.RE\n\n.PP\n.nf\nunsigned \\fBdns_qid\\fR(const unsigned char *\\fIpkt\\fR)\nint \\fBdns_rd\\fR(const unsigned char *\\fIpkt\\fR)\nint \\fBdns_tc\\fR(const unsigned char *\\fIpkt\\fR)\nint \\fBdns_aa\\fR(const unsigned char *\\fIpkt\\fR)\nint \\fBdns_qr\\fR(const unsigned char *\\fIpkt\\fR)\nint \\fBdns_ra\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_opcode\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_rcode\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_numqd\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_numan\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_numns\\fR(const unsigned char *\\fIpkt\\fR)\nunsigned \\fBdns_numar\\fR(const unsigned char *\\fIpkt\\fR)\nconst unsigned char *\\fBdns_payload\\fR(const unsigned char *\\fIpkt\\fR)\n.fi\n.RS\nreturn various parts from the DNS packet header \\fIpkt\\fR:\nquery identifier (qid),\nrecursion desired (rd) flag,\ntruncation occured (tc) flag,\nauthoritative answer (aa) flag,\nquery response (qr) flag,\nrecursion available (ra) flag,\noperation code (opcode),\nresult code (rcode),\nnumber of entries in question section (numqd),\nnumber of answers (numan),\nnumber of authority records (numns),\nnumber of additional records (numar),\nand the pointer to the packet data (payload).\n.RE\n\n.PP\n.nf\nint \\fBdns_getdn\\fR(\\fIpkt\\fR, \\fIcurp\\fR, \\fIpkte\\fR, \\fIdn\\fR, \\fIdnsiz\\fR)\nconst unsigned char *\\fBdns_skipdn\\fR(\\fIcur\\fR, \\fIpkte\\fR)\n   const unsigned char *\\fIpkt\\fR, *\\fIpkte\\fR, **\\fIcurp\\fR, *\\fIcur\\fR;\n   unsigned char *\\fIdn\\fR; unsigned \\fIdnsiz\\fR;\n.fi\n.RS\n\\fBdns_getdn\\fR() extract DN from DNS packet \\fIpkt\\fR which ends before\n\\fIpkte\\fR starting at position *\\fIcurp\\fR into buffer pointed to by\n\\fIdn\\fR of size \\fIdnsiz\\fR.  Upon successeful completion, *\\fIcurp\\fR\nwill point to the next byte in the packet after the extracted domain name.\nIt return positive number (length of the DN if \\fIdn\\fR) upon successeful\ncompletion, negative value on error (when the packet contains invalid data),\nor zero if the \\fIdnsiz\\fR is too small (maximum length of a domain name is\n\\fBDNS_MAXDN\\fR).  \\fBdns_skipdn\\fR() return pointer to the next byte in\nDNS packet which ends up before \\fIpkte\\fR after a domain name which starts\nat the \\fIcur\\fP byte, or NULL if the packet is invalid.  \\fBdns_skipdn\\fR()\nis more or less equivalent to what \\fBdns_getdn\\fR() does, except it does not\nactually extract the domain name in question, and uses simpler interface.\n.RE\n\n.PP\n.nf\nstruct \\fBdns_rr\\fR {\n  unsigned char \\fBdnsrr_dn\\fR[DNS_MAXDN]; /* the RR DN name */\n  enum dns_class \\fBdnsrr_cls\\fR;          /* class of the RR */\n  enum dns_type  \\fBdnsrr_typ\\fR;          /* type of the RR */\n  unsigned \\fBdnsrr_ttl\\fR;                /* TTL value */\n  unsigned \\fBdnsrr_dsz\\fR;                /* size of data in bytes */\n  const unsigned char *\\fBdnsrr_dptr\\fR;   /* pointer to the first data byte */\n  const unsigned char *\\fBdnsrr_dend\\fR;   /* next byte after RR */\n};\n.fi\n.RS\nThe \\fBdns_rr\\fR structure is used to hold information about\nsingle DNS Resource Record (RR) in an easy to use form.\n.RE\n\n.PP\n.nf\nstruct \\fBdns_parse\\fR {\n  const unsigned char *\\fBdnsp_pkt\\fR; /* pointer to the packet being parsed */\n  const unsigned char *\\fBdnsp_end\\fR; /* end of the packet pointer */\n  const unsigned char *\\fBdnsp_cur\\fR; /* current packet positionn */\n  const unsigned char *\\fBdnsp_ans\\fR; /* pointer to the answer section */\n  int \\fBdnsp_rrl\\fR;                  /* number of RRs left */\n  int \\fBdnsp_nrr\\fR;                  /* number of relevant RRs seen so far */\n  unsigned \\fBdnsp_ttl\\fR;             /* TTL value so far */\n  const unsigned char *\\fBdnsp_qdn\\fR; /* the domain of interest or NULL */\n  enum dns_class \\fBdnsp_qcls\\fR;      /* class of interest or 0 for any */\n  enum dns_type  \\fBdnsp_qtyp\\fR;      /* type of interest or 0 for any */\n  unsigned char \\fBdnsp_dnbuf\\fR[DNS_MAXDN]; /* domain name buffer */\n};\n.fi\n.RS\nThe \\fBdns_parse\\fR structure is used to parse DNS reply packet.\nIt holds information about the packet being parsed (dnsp_pkt, dnsp_end and\ndnsp_cur fields), number of RRs in the current section left to do, and\nthe information about specific RR which we're looking for (dnsp_qdn,\ndnsp_qcls and dnsp_qtyp fields).\n.RE\n\n.PP\n.nf\nint \\fBdns_initparse\\fR(struct dns_parse *\\fIp\\fR,\n  const unsigned char *\\fIqdn\\fR,\n  const unsigned char *\\fIpkt\\fR,\n  const unsigned char *\\fIcur\\fR,\n  const unsigned char *\\fIend\\fR)\n.fi\n.RS\ninitializes the RR parsing structure \\fIp\\fR.  Arguments \\fIpkt\\fR, \\fIcur\\fR\nand \\fIend\\fR should describe the received packet: \\fIpkt\\fR is the start of\nthe packet, \\fIend\\fR points to the next byte after the end of the packet,\nand \\fIcur\\fR points past the query DN in query section (to query class+type\ninformation).  And \\fIqdn\\fR points to the query DN.  This is the arguments\npassed to \\fBdns_parse_fn\\fR() routine. \\fBdns_initparse\\fR() initializes\n\\fBdnsp_pkt\\fR, \\fBdnsp_end\\fR and \\fBdnsp_qdn\\fR fields to the corresponding\narguments, extracts and initializes \\fBdnsp_qcls\\fR and \\fBdnsp_qtyp\\fR\nfields to the values found at \\fIcur\\fR pointer, initializes\n\\fBdnsp_cur\\fR and \\fBdnsp_ans\\fR fields to be \\fIcur\\fR+4 (to the start of\nanswer section), and initializes \\fBdnsp_rrl\\fR field to be number of entries\nin answer section. \\fBdnsp_ttl\\fR will be set to max TTL value, 0xffffffff,\nand \\fBdnsp_nrr\\fR to 0.\n.RE\n\n.PP\n.nf\nint \\fBdns_nextrr\\fR(struct dns_parse *\\fIp\\fR, struct dns_rr *\\fIrr\\fR);\n.fi\n.RS\nsearches for next RR in the packet based on the criteria provided in\nthe \\fIp\\fR structure, filling in the \\fIrr\\fR structure and\nadvancing \\fIp\\fR->\\fBdnsp_cur\\fR to the next RR in the packet.\nRR selection is based on dnsp_qdn, dnsp_qcls and dnsp_qtyp fields in\nthe dns_parse structure.  Any (or all) of the 3 fields may be 0,\nwhich means any actual value from the packet is acceptable.  In case\nthe field isn't 0 (or NULL for dnsp_qdn), only RRs with corresponding\ncharacteristics are acceptable.  Additionally, when dnsp_qdn is non-NULL,\n\\fBdns_nextrr\\fR() performs automatic CNAME expansion.\nRoutine will return positive value on success, 0 in case it reached the end\nof current section in the packet (\\fIp\\fR->\\fBdnsp_rrl\\fR is zero), or\nnegative value if next RR can not be decoded (packet format is invalid).\nThe routine updates \\fIp\\fR->\\fBdnsp_qdn\\fR automatically when this\nfield is non-NULL and it encounters appropriate CNAME RRs (saving CNAME\ntarget in \\fIp\\fR->\\fBdnsp_dnbuf\\fR), so after end of the process,\n\\fIp\\fR->\\fBdnsp_qdn\\fR will point to canonical name of the domain\nin question.  The routine updates \\fIp\\fR->\\fBdnsp_ttl\\fR value to\nbe the minimum TTL of all RRs found.\n.RE\n\n.PP\n.nf\nvoid \\fBdns_rewind\\fR(struct dns_parse *\\fIp\\fR, const unsigned char *\\fIqdn\\fR)\n.fi\n.RS\nthis routine \"rewinds\" the packet parse state structure to be at the\nsame state as after a call to \\fBdns_initparse\\fR(), i.e. reposition\nthe parse structure \\fIp\\fR to the start of answer section and\ninitialize \\fIp\\fR->\\fBdnsp_rrl\\fR to the number of entries in\nanswer section.\n.RE\n\n.PP\n.nf\nint \\fBdns_stdrr_size\\fR(const struct dns_parse *\\fIp\\fR);\n.fi\n.RS\nreturn size to hold standard RRset structure information, as shown\nin \\fBdns_rr_null\\fR structure (for the query and canonical\nnames).  Used to calculate amount of memory to allocate for common\npart of type-specific RR structures in parsing routines.\n.RE\n\n.PP\n.nf\nvoid *\\fBdns_stdrr_finish\\fR(struct dns_rr_null *\\fIret\\fR, char *\\fIcp\\fR,\n  const struct dns_parse *\\fIp\\fR);\n.fi\n.RS\ninitializes standard RRset fields in \\fIret\\fR structure using buffer\npointed to by \\fIcp\\fR, which should have at least as many bytes\nas \\fBdns_stdrr_size\\fR(\\fIp\\fR) returned.  Used to finalize common\npart of type-specific RR structures in parsing routines.\n.RE\n\n.PP\nSee library source for usage examples of all the above low-level routines,\nespecially source of the parsing routines.\n\n.SS \"Auxilary Routines\"\n\n.PP\n.nf\nint \\fBdns_pton\\fR(int \\fIaf\\fR, const char *\\fIsrc\\fR, void *\\fIdst\\fR);\n.fi\n.RS\nprivides functionality similar to standard \\fBinet_pton\\fR() routine,\nto convert printable representation of an IP address of family \\fIaf\\fR\n(either \\fBAF_INET\\fR or \\fBAF_INET6\\fR) pointed to by \\fIsrc\\fR into\nbinary form suitable for socket addresses and transmission over network,\nin buffer pointed to by \\fIdst\\fR.  The destination buffer should be\nof size 4 for \\fBAF_INET\\fR family or 16 for \\fBAF_INET6\\fR.\nThe return value is positive on success, 0 if \\fIsrc\\fR is not a valid text\nrepresentation of an address of family \\fIaf\\fR, or negative if the\ngiven address family is not supported.\n.RE\n\n.PP\n.nf\nconst char *\\fBdns_ntop\\fR(int \\fIaf\\fR, const void *\\fIsrc\\fR,\n    char *\\fIdst\\fR, int \\fIdstsize\\fR)\n.fi\n.RS\nprivides functionality similar to standard \\fBinet_ntop\\fR() routine,\nto convert binary representation of an IP address of family \\fIaf\\fR\n(either \\fBAF_INET\\fR or \\fBAF_INET6\\fR) pointed to by \\fIsrc\\fR\n(either 4 or 16 bytes) into printable form in buffer in buffer pointed\nto by \\fIdst\\fR of size \\fIdstsize\\fR.  The destination buffer should be\nat least of size 16 bytes for \\fBAF_INET\\fR family or 46 bytes for\n\\fBAF_INET6\\fR.  The return value is either \\fIdst\\fR, or NULL pointer\nif \\fIdstsize\\fR is too small to hold this address or if the given\naddress family is not supported.\n.RE\n\n.SH AUTHOR\n.PP\nThe \\fBudns\\fR library has been written by Michael Tokarev, mjt+udns@tls.msk.ru.\n\n.SH VERSION\n.PP\nThis manual page corresponds to udns version 0.4, released Jan-2014.\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns.h",
    "content": "/* udns.h\n   header file for the UDNS library.\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifndef UDNS_VERSION\t/* include guard */\n\n#define UDNS_VERSION \"0.4\"\n\n#ifdef __MINGW32__\n# ifdef UDNS_DYNAMIC_LIBRARY\n#  ifdef DNS_LIBRARY_BUILD\n#   define UDNS_API __declspec(dllexport)\n#   define UDNS_DATA_API __declspec(dllexport)\n#  else\n#   define UDNS_API __declspec(dllimport)\n#   define UDNS_DATA_API __declspec(dllimport)\n#  endif\n# endif\n#endif\n\n#ifndef UDNS_API\n# define UDNS_API\n#endif\n#ifndef UDNS_DATA_API\n# define UDNS_DATA_API\n#endif\n\n#include <sys/types.h>\t\t/* for time_t */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* forward declarations if sockets stuff isn't #include'd */\nstruct in_addr;\nstruct in6_addr;\nstruct sockaddr;\n\n/**************************************************************************/\n/**************** Common definitions **************************************/\n\nUDNS_API const char *\ndns_version(void);\n\nstruct dns_ctx;\nstruct dns_query;\n\n/* shorthand for [const] unsigned char */\ntypedef unsigned char dnsc_t;\ntypedef const unsigned char dnscc_t;\n\n#define DNS_MAXDN\t255\t/* max DN length */\n#define DNS_DNPAD\t1\t/* padding for DN buffers */\n#define DNS_MAXLABEL\t63\t/* max DN label length */\n#define DNS_MAXNAME\t1024\t/* max asciiz domain name length */\n#define DNS_HSIZE\t12\t/* DNS packet header size */\n#define DNS_PORT\t53\t/* default domain port */\n#define DNS_MAXSERV\t6\t/* max servers to consult */\n#define DNS_MAXPACKET\t512\t/* max traditional-DNS UDP packet size */\n#define DNS_EDNS0PACKET\t4096\t/* EDNS0 packet size to use */\n\nenum dns_class {\t/* DNS RR Classes */\n  DNS_C_INVALID\t= 0,\t/* invalid class */\n  DNS_C_IN\t= 1,\t/* Internet */\n  DNS_C_CH\t= 3,\t/* CHAOS */\n  DNS_C_HS\t= 4,\t/* HESIOD */\n  DNS_C_ANY\t= 255\t/* wildcard */\n};\n\nenum dns_type {\t\t/* DNS RR Types */\n  DNS_T_INVALID\t\t= 0,\t/* Cookie. */\n  DNS_T_A\t\t= 1,\t/* Host address. */\n  DNS_T_NS\t\t= 2,\t/* Authoritative server. */\n  DNS_T_MD\t\t= 3,\t/* Mail destination. */\n  DNS_T_MF\t\t= 4,\t/* Mail forwarder. */\n  DNS_T_CNAME\t\t= 5,\t/* Canonical name. */\n  DNS_T_SOA\t\t= 6,\t/* Start of authority zone. */\n  DNS_T_MB\t\t= 7,\t/* Mailbox domain name. */\n  DNS_T_MG\t\t= 8,\t/* Mail group member. */\n  DNS_T_MR\t\t= 9,\t/* Mail rename name. */\n  DNS_T_NULL\t\t= 10,\t/* Null resource record. */\n  DNS_T_WKS\t\t= 11,\t/* Well known service. */\n  DNS_T_PTR\t\t= 12,\t/* Domain name pointer. */\n  DNS_T_HINFO\t\t= 13,\t/* Host information. */\n  DNS_T_MINFO\t\t= 14,\t/* Mailbox information. */\n  DNS_T_MX\t\t= 15,\t/* Mail routing information. */\n  DNS_T_TXT\t\t= 16,\t/* Text strings. */\n  DNS_T_RP\t\t= 17,\t/* Responsible person. */\n  DNS_T_AFSDB\t\t= 18,\t/* AFS cell database. */\n  DNS_T_X25\t\t= 19,\t/* X_25 calling address. */\n  DNS_T_ISDN\t\t= 20,\t/* ISDN calling address. */\n  DNS_T_RT\t\t= 21,\t/* Router. */\n  DNS_T_NSAP\t\t= 22,\t/* NSAP address. */\n  DNS_T_NSAP_PTR\t= 23,\t/* Reverse NSAP lookup (deprecated). */\n  DNS_T_SIG\t\t= 24,\t/* Security signature. */\n  DNS_T_KEY\t\t= 25,\t/* Security key. */\n  DNS_T_PX\t\t= 26,\t/* X.400 mail mapping. */\n  DNS_T_GPOS\t\t= 27,\t/* Geographical position (withdrawn). */\n  DNS_T_AAAA\t\t= 28,\t/* Ip6 Address. */\n  DNS_T_LOC\t\t= 29,\t/* Location Information. */\n  DNS_T_NXT\t\t= 30,\t/* Next domain (security). */\n  DNS_T_EID\t\t= 31,\t/* Endpoint identifier. */\n  DNS_T_NIMLOC\t\t= 32,\t/* Nimrod Locator. */\n  DNS_T_SRV\t\t= 33,\t/* Server Selection. */\n  DNS_T_ATMA\t\t= 34,\t/* ATM Address */\n  DNS_T_NAPTR\t\t= 35,\t/* Naming Authority PoinTeR */\n  DNS_T_KX\t\t= 36,\t/* Key Exchange */\n  DNS_T_CERT\t\t= 37,\t/* Certification record */\n  DNS_T_A6\t\t= 38,\t/* IPv6 address (deprecates AAAA) */\n  DNS_T_DNAME\t\t= 39,\t/* Non-terminal DNAME (for IPv6) */\n  DNS_T_SINK\t\t= 40,\t/* Kitchen sink (experimentatl) */\n  DNS_T_OPT\t\t= 41,\t/* EDNS0 option (meta-RR) */\n  DNS_T_DS\t\t= 43,\t/* DNSSEC */\n  DNS_T_SSHFP\t\t= 44,\n  DNS_T_IPSECKEY\t= 45,\n  DNS_T_RRSIG\t\t= 46,\t/* DNSSEC */\n  DNS_T_NSEC\t\t= 47,\t/* DNSSEC */\n  DNS_T_DNSKEY\t\t= 48,\n  DNS_T_DHCID\t\t= 49,\n  DNS_T_NSEC3\t\t= 50,\n  DNS_T_NSEC3PARAMS\t= 51,\n  DNS_T_TALINK\t\t= 58, /* draft-ietf-dnsop-trust-history */\n  DNS_T_SPF\t\t= 99,\n  DNS_T_UINFO\t\t= 100,\n  DNS_T_UID\t\t= 101,\n  DNS_T_GID\t\t= 102,\n  DNS_T_UNSPEC\t\t= 103,\n  DNS_T_TSIG\t\t= 250,\t/* Transaction signature. */\n  DNS_T_IXFR\t\t= 251,\t/* Incremental zone transfer. */\n  DNS_T_AXFR\t\t= 252,\t/* Transfer zone of authority. */\n  DNS_T_MAILB\t\t= 253,\t/* Transfer mailbox records. */\n  DNS_T_MAILA\t\t= 254,\t/* Transfer mail agent records. */\n  DNS_T_ANY\t\t= 255,\t/* Wildcard match. */\n  DNS_T_ZXFR\t\t= 256,\t/* BIND-specific, nonstandard. */\n  DNS_T_DLV\t\t= 32769, /* RFC 4431, 5074, DNSSEC Lookaside Validation */\n  DNS_T_MAX\t\t= 65536\n};\n\n/**************************************************************************/\n/**************** Domain Names (DNs) **************************************/\n\n/* return length of the DN */\nUDNS_API unsigned\ndns_dnlen(dnscc_t *dn);\n\n/* return #of labels in a DN */\nUDNS_API unsigned\ndns_dnlabels(dnscc_t *dn);\n\n/* lower- and uppercase single DN char */\n#define DNS_DNLC(c) ((c) >= 'A' && (c) <= 'Z' ? (c) - 'A' + 'a' : (c))\n#define DNS_DNUC(c) ((c) >= 'a' && (c) <= 'z' ? (c) - 'a' + 'A' : (c))\n\n/* compare the DNs, return dnlen of equal or 0 if not */\nUDNS_API unsigned\ndns_dnequal(dnscc_t *dn1, dnscc_t *dn2);\n\n/* copy one DN to another, size checking */\nUDNS_API unsigned\ndns_dntodn(dnscc_t *sdn, dnsc_t *ddn, unsigned ddnsiz);\n\n/* convert asciiz string of length namelen (0 to use strlen) to DN */\nUDNS_API int\ndns_ptodn(const char *name, unsigned namelen,\n          dnsc_t *dn, unsigned dnsiz, int *isabs);\n\n/* simpler form of dns_ptodn() */\n#define dns_sptodn(name,dn,dnsiz) dns_ptodn((name),0,(dn),(dnsiz),0)\n\nUDNS_DATA_API extern dnscc_t dns_inaddr_arpa_dn[14];\n#define DNS_A4RSIZE\t30\nUDNS_API int\ndns_a4todn(const struct in_addr *addr, dnscc_t *tdn,\n           dnsc_t *dn, unsigned dnsiz);\nUDNS_API int\ndns_a4ptodn(const struct in_addr *addr, const char *tname,\n            dnsc_t *dn, unsigned dnsiz);\nUDNS_API dnsc_t *\ndns_a4todn_(const struct in_addr *addr, dnsc_t *dn, dnsc_t *dne);\n\nUDNS_DATA_API extern dnscc_t dns_ip6_arpa_dn[10];\n#define DNS_A6RSIZE\t74\nUDNS_API int\ndns_a6todn(const struct in6_addr *addr, dnscc_t *tdn,\n           dnsc_t *dn, unsigned dnsiz);\nUDNS_API int\ndns_a6ptodn(const struct in6_addr *addr, const char *tname,\n            dnsc_t *dn, unsigned dnsiz);\nUDNS_API dnsc_t *\ndns_a6todn_(const struct in6_addr *addr, dnsc_t *dn, dnsc_t *dne);\n\n/* convert DN into asciiz string */\nUDNS_API int\ndns_dntop(dnscc_t *dn, char *name, unsigned namesiz);\n\n/* convert DN into asciiz string, using static buffer (NOT thread-safe!) */\nUDNS_API const char *\ndns_dntosp(dnscc_t *dn);\n\n/* return buffer size (incl. null byte) required for asciiz form of a DN */\nUDNS_API unsigned\ndns_dntop_size(dnscc_t *dn);\n\n/* either wrappers or reimplementations for inet_ntop() and inet_pton() */\nUDNS_API const char *dns_ntop(int af, const void *src, char *dst, int size);\nUDNS_API int dns_pton(int af, const char *src, void *dst);\n\n/**************************************************************************/\n/**************** DNS raw packet layout ***********************************/\n\nenum dns_rcode {\t/* reply codes */\n  DNS_R_NOERROR\t\t= 0,\t/* ok, no error */\n  DNS_R_FORMERR\t\t= 1,\t/* format error */\n  DNS_R_SERVFAIL\t= 2,\t/* server failed */\n  DNS_R_NXDOMAIN\t= 3,\t/* domain does not exists */\n  DNS_R_NOTIMPL\t\t= 4,\t/* not implemented */\n  DNS_R_REFUSED\t\t= 5,\t/* query refused */\n  /* these are for BIND_UPDATE */\n  DNS_R_YXDOMAIN\t= 6,\t/* Name exists */\n  DNS_R_YXRRSET\t\t= 7,\t/* RRset exists */\n  DNS_R_NXRRSET\t\t= 8,\t/* RRset does not exist */\n  DNS_R_NOTAUTH\t\t= 9,\t/* Not authoritative for zone */\n  DNS_R_NOTZONE\t\t= 10,\t/* Zone of record different from zone section */\n  /*ns_r_max = 11,*/\n  /* The following are TSIG extended errors */\n  DNS_R_BADSIG\t\t= 16,\n  DNS_R_BADKEY\t\t= 17,\n  DNS_R_BADTIME\t\t= 18\n};\n\nstatic __inline unsigned dns_get16(dnscc_t *s) {\n  return ((unsigned)s[0]<<8) | s[1];\n}\nstatic __inline unsigned dns_get32(dnscc_t *s) {\n  return ((unsigned)s[0]<<24) | ((unsigned)s[1]<<16)\n        | ((unsigned)s[2]<<8) | s[3];\n}\nstatic __inline dnsc_t *dns_put16(dnsc_t *d, unsigned n) {\n  *d++ = (dnsc_t)((n >> 8) & 255); *d++ = (dnsc_t)(n & 255); return d;\n}\nstatic __inline dnsc_t *dns_put32(dnsc_t *d, unsigned n) {\n  *d++ = (dnsc_t)((n >> 24) & 255); *d++ = (dnsc_t)((n >> 16) & 255);\n  *d++ = (dnsc_t)((n >>  8) & 255); *d++ = (dnsc_t)(n & 255);\n  return d;\n}\n\n/* DNS Header layout */\nenum {\n /* bytes 0:1 - query ID */\n  DNS_H_QID1\t= 0,\n  DNS_H_QID2\t= 1,\n  DNS_H_QID\t= DNS_H_QID1,\n#define dns_qid(pkt)\tdns_get16((pkt)+DNS_H_QID)\n /* byte 2: flags1 */\n  DNS_H_F1\t= 2,\n  DNS_HF1_QR\t= 0x80,\t/* query response flag */\n#define dns_qr(pkt)\t((pkt)[DNS_H_F1]&DNS_HF1_QR)\n  DNS_HF1_OPCODE = 0x78, /* opcode, 0 = query */\n#define dns_opcode(pkt)\t(((pkt)[DNS_H_F1]&DNS_HF1_OPCODE)>>3)\n  DNS_HF1_AA\t= 0x04,\t/* auth answer */\n#define dns_aa(pkt)\t((pkt)[DNS_H_F1]&DNS_HF1_AA)\n  DNS_HF1_TC\t= 0x02,\t/* truncation flag */\n#define dns_tc(pkt)\t((pkt)[DNS_H_F1]&DNS_HF1_TC)\n  DNS_HF1_RD\t= 0x01,\t/* recursion desired (may be set in query) */\n#define dns_rd(pkt)\t((pkt)[DNS_H_F1]&DNS_HF1_RD)\n /* byte 3: flags2 */\n  DNS_H_F2\t= 3,\n  DNS_HF2_RA\t= 0x80,\t/* recursion available */\n#define dns_ra(pkt)\t((pkt)[DNS_H_F2]&DNS_HF2_RA)\n  DNS_HF2_Z\t= 0x40,\t/* reserved */\n  DNS_HF2_AD\t= 0x20, /* DNSSEC: authentic data */\n#define dns_ad(pkt)\t((pkt)[DNS_H_F2]&DNS_HF2_AD)\n  DNS_HF2_CD\t= 0x10, /* DNSSEC: checking disabled */\n#define dns_cd(pkt)\t((pkt)[DNS_H_F2]&DNS_HF2_CD)\n  DNS_HF2_RCODE\t= 0x0f,\t/* response code, DNS_R_XXX above */\n#define dns_rcode(pkt)\t((pkt)[DNS_H_F2]&DNS_HF2_RCODE)\n /* bytes 4:5: qdcount, numqueries */\n  DNS_H_QDCNT1\t= 4,\n  DNS_H_QDCNT2\t= 5,\n  DNS_H_QDCNT\t= DNS_H_QDCNT1,\n#define dns_numqd(pkt)\tdns_get16((pkt)+4)\n /* bytes 6:7: ancount, numanswers */\n  DNS_H_ANCNT1\t= 6,\n  DNS_H_ANCNT2\t= 7,\n  DNS_H_ANCNT\t= DNS_H_ANCNT1,\n#define dns_numan(pkt)\tdns_get16((pkt)+6)\n /* bytes 8:9: nscount, numauthority */\n  DNS_H_NSCNT1\t= 8,\n  DNS_H_NSCNT2\t= 9,\n  DNS_H_NSCNT\t= DNS_H_NSCNT1,\n#define dns_numns(pkt)\tdns_get16((pkt)+8)\n /* bytes 10:11: arcount, numadditional */\n  DNS_H_ARCNT1\t= 10,\n  DNS_H_ARCNT2\t= 11,\n  DNS_H_ARCNT\t= DNS_H_ARCNT1,\n#define dns_numar(pkt)\tdns_get16((pkt)+10)\n#define dns_payload(pkt) ((pkt)+DNS_HSIZE)\n  /* EDNS0 (OPT RR) flags (Ext. Flags) */\n  DNS_EF1_DO\t= 0x80, /* DNSSEC OK */\n};\n\n/* packet buffer: start at pkt, end before pkte, current pos *curp.\n * extract a DN and set *curp to the next byte after DN in packet.\n * return -1 on error, 0 if dnsiz is too small, or dnlen on ok.\n */\nUDNS_API int\ndns_getdn(dnscc_t *pkt, dnscc_t **curp, dnscc_t *end,\n          dnsc_t *dn, unsigned dnsiz);\n\n/* skip the DN at position cur in packet ending before pkte,\n * return pointer to the next byte after the DN or NULL on error */\nUDNS_API dnscc_t *\ndns_skipdn(dnscc_t *end, dnscc_t *cur);\n\nstruct dns_rr {\t\t/* DNS Resource Record */\n  dnsc_t dnsrr_dn[DNS_MAXDN];\t/* the DN of the RR */\n  enum dns_class dnsrr_cls;\t/* Class */\n  enum dns_type  dnsrr_typ;\t/* Type */\n  unsigned dnsrr_ttl;\t\t/* Time-To-Live (TTL) */\n  unsigned dnsrr_dsz;\t\t/* data size */\n  dnscc_t *dnsrr_dptr;\t\t/* pointer to start of data */\n  dnscc_t *dnsrr_dend;\t\t/* past end of data */\n};\n\nstruct dns_parse {\t/* RR/packet parsing state */\n  dnscc_t *dnsp_pkt;\t\t/* start of the packet */\n  dnscc_t *dnsp_end;\t\t/* end of the packet */\n  dnscc_t *dnsp_cur;\t\t/* current packet position */\n  dnscc_t *dnsp_ans;\t\t/* start of answer section */\n  int dnsp_rrl;\t\t\t/* number of RRs left to go */\n  int dnsp_nrr;\t\t\t/* RR count so far */\n  unsigned dnsp_ttl;\t\t/* TTL value so far */\n  dnscc_t *dnsp_qdn;\t\t/* the RR DN we're looking for */\n  enum dns_class dnsp_qcls;\t/* RR class we're looking for or 0 */\n  enum dns_type  dnsp_qtyp;\t/* RR type we're looking for or 0 */\n  dnsc_t dnsp_dnbuf[DNS_MAXDN];\t/* domain buffer */\n};\n\n/* initialize the parse structure */\nUDNS_API void\ndns_initparse(struct dns_parse *p, dnscc_t *qdn,\n              dnscc_t *pkt, dnscc_t *cur, dnscc_t *end);\n\n/* search next RR, <0=error, 0=no more RRs, >0 = found. */\nUDNS_API int\ndns_nextrr(struct dns_parse *p, struct dns_rr *rr);\n\nUDNS_API void\ndns_rewind(struct dns_parse *p, dnscc_t *qdn);\n\n\n/**************************************************************************/\n/**************** Resolver Context ****************************************/\n\n/* default resolver context */\nUDNS_DATA_API extern struct dns_ctx dns_defctx;\n\n/* reset resolver context to default state, close it if open, drop queries */\nUDNS_API void\ndns_reset(struct dns_ctx *ctx);\n\n/* reset resolver context and read in system configuration */\nUDNS_API int\ndns_init(struct dns_ctx *ctx, int do_open);\n\n/* return new resolver context with the same settings as copy */\nUDNS_API struct dns_ctx *\ndns_new(const struct dns_ctx *copy);\n\n/* free resolver context returned by dns_new(); all queries are dropped */\nUDNS_API void\ndns_free(struct dns_ctx *ctx);\n\n/* add nameserver for a resolver context (or reset nslist if serv==NULL) */\nUDNS_API int\ndns_add_serv(struct dns_ctx *ctx, const char *serv);\n\n/* add nameserver using struct sockaddr structure (with ports) */\nUDNS_API int\ndns_add_serv_s(struct dns_ctx *ctx, const struct sockaddr *sa);\n\n/* add search list element for a resolver context (or reset it if srch==NULL) */\nUDNS_API int\ndns_add_srch(struct dns_ctx *ctx, const char *srch);\n\n/* set options for a resolver context */\nUDNS_API int\ndns_set_opts(struct dns_ctx *ctx, const char *opts);\n\nenum dns_opt {\t\t/* options */\n  DNS_OPT_FLAGS,\t/* flags, DNS_F_XXX */\n  DNS_OPT_TIMEOUT,\t/* timeout in secounds */\n  DNS_OPT_NTRIES,\t/* number of retries */\n  DNS_OPT_NDOTS,\t/* ndots */\n  DNS_OPT_UDPSIZE,\t/* EDNS0 UDP size */\n  DNS_OPT_PORT,\t\t/* port to use */\n};\n\n/* set or get (if val<0) an option */\nUDNS_API int\ndns_set_opt(struct dns_ctx *ctx, enum dns_opt opt, int val);\n\nenum dns_flags {\n  DNS_NOSRCH\t= 0x00010000,\t/* do not perform search */\n  DNS_NORD\t= 0x00020000,\t/* request no recursion */\n  DNS_AAONLY\t= 0x00040000,\t/* set AA flag in queries */\n  DNS_SET_DO\t= 0x00080000,\t/* set EDNS0 \"DO\" bit (DNSSEC OK) */\n  DNS_SET_CD\t= 0x00100000,\t/* set CD bit (DNSSEC: checking disabled) */\n};\n\n/* set the debug function pointer */\ntypedef void\n(dns_dbgfn)(int code, const struct sockaddr *sa, unsigned salen,\n            dnscc_t *pkt, int plen,\n            const struct dns_query *q, void *data);\nUDNS_API void\ndns_set_dbgfn(struct dns_ctx *ctx, dns_dbgfn *dbgfn);\n\n/* open and return UDP socket */\nUDNS_API int\ndns_open(struct dns_ctx *ctx);\n\n/* return UDP socket or -1 if not open */\nUDNS_API int\ndns_sock(const struct dns_ctx *ctx);\n\n/* close the UDP socket */\nUDNS_API void\ndns_close(struct dns_ctx *ctx);\n\n/* return number of requests queued */\nUDNS_API int\ndns_active(const struct dns_ctx *ctx);\n\n/* return status of the last operation */\nUDNS_API int\ndns_status(const struct dns_ctx *ctx);\nUDNS_API void\ndns_setstatus(struct dns_ctx *ctx, int status);\n\n/* handle I/O event on UDP socket */\nUDNS_API void\ndns_ioevent(struct dns_ctx *ctx, time_t now);\n\n/* process any timeouts, return time in secounds to the\n * next timeout (or -1 if none) but not greather than maxwait */\nUDNS_API int\ndns_timeouts(struct dns_ctx *ctx, int maxwait, time_t now);\n\n/* define timer requesting routine to use */\ntypedef void dns_utm_fn(struct dns_ctx *ctx, int timeout, void *data);\nUDNS_API void\ndns_set_tmcbck(struct dns_ctx *ctx, dns_utm_fn *fn, void *data);\n\n/**************************************************************************/\n/**************** Making Queries ******************************************/\n\n/* query callback routine */\ntypedef void dns_query_fn(struct dns_ctx *ctx, void *result, void *data);\n\n/* query parse routine: raw DNS => application structure */\ntypedef int\ndns_parse_fn(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n             void **res);\n\nenum dns_status {\n  DNS_E_NOERROR\t\t= 0,\t/* ok, not an error */\n  DNS_E_TEMPFAIL\t= -1,\t/* timeout, SERVFAIL or similar */\n  DNS_E_PROTOCOL\t= -2,\t/* got garbled reply */\n  DNS_E_NXDOMAIN\t= -3,\t/* domain does not exists */\n  DNS_E_NODATA\t\t= -4,\t/* domain exists but no data of reqd type */\n  DNS_E_NOMEM\t\t= -5,\t/* out of memory while processing */\n  DNS_E_BADQUERY\t= -6\t/* the query is malformed */\n};\n\n/* submit generic DN query */\nUDNS_API struct dns_query *\ndns_submit_dn(struct dns_ctx *ctx,\n              dnscc_t *dn, int qcls, int qtyp, int flags,\n              dns_parse_fn *parse, dns_query_fn *cbck, void *data);\n/* submit generic name query */\nUDNS_API struct dns_query *\ndns_submit_p(struct dns_ctx *ctx,\n             const char *name, int qcls, int qtyp, int flags,\n             dns_parse_fn *parse, dns_query_fn *cbck, void *data);\n\n/* cancel the given async query in progress */\nUDNS_API int\ndns_cancel(struct dns_ctx *ctx, struct dns_query *q);\n\n/* resolve a generic query, return the answer */\nUDNS_API void *\ndns_resolve_dn(struct dns_ctx *ctx,\n               dnscc_t *qdn, int qcls, int qtyp, int flags,\n               dns_parse_fn *parse);\nUDNS_API void *\ndns_resolve_p(struct dns_ctx *ctx,\n              const char *qname, int qcls, int qtyp, int flags,\n              dns_parse_fn *parse);\nUDNS_API void *\ndns_resolve(struct dns_ctx *ctx, struct dns_query *q);\n\n\n/* Specific RR handlers */\n\n#define dns_rr_common(prefix)\t\t\t\t\t\t\\\n  char *prefix##_cname;\t\t/* canonical name */\t\t\t\\\n  char *prefix##_qname;\t\t/* original query name */\t\t\\\n  unsigned prefix##_ttl;\t/* TTL value */\t\t\t\t\\\n  int prefix##_nrr\t\t/* number of records */\n\nstruct dns_rr_null {\t\t/* NULL RRset, aka RRset template */\n  dns_rr_common(dnsn);\n};\n\nUDNS_API int\ndns_stdrr_size(const struct dns_parse *p);\nUDNS_API void *\ndns_stdrr_finish(struct dns_rr_null *ret, char *cp, const struct dns_parse *p);\n\nstruct dns_rr_a4 {\t\t/* the A RRset */\n  dns_rr_common(dnsa4);\n  struct in_addr *dnsa4_addr;\t/* array of addresses, naddr elements */\n};\n\nUDNS_API dns_parse_fn dns_parse_a4;\t/* A RR parsing routine */\ntypedef void\t\t\t\t/* A query callback routine */\ndns_query_a4_fn(struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data);\n\n/* submit A IN query */\nUDNS_API struct dns_query *\ndns_submit_a4(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_a4_fn *cbck, void *data);\n\n/* resolve A IN query */\nUDNS_API struct dns_rr_a4 *\ndns_resolve_a4(struct dns_ctx *ctx, const char *name, int flags);\n\n\nstruct dns_rr_a6 {\t\t/* the AAAA RRset */\n  dns_rr_common(dnsa6);\n  struct in6_addr *dnsa6_addr;\t/* array of addresses, naddr elements */\n};\n\nUDNS_API dns_parse_fn dns_parse_a6;\t/* A RR parsing routine */\ntypedef void\t\t\t\t/* A query callback routine */\ndns_query_a6_fn(struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data);\n\n/* submit AAAA IN query */\nUDNS_API struct dns_query *\ndns_submit_a6(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_a6_fn *cbck, void *data);\n\n/* resolve AAAA IN query */\nUDNS_API struct dns_rr_a6 *\ndns_resolve_a6(struct dns_ctx *ctx, const char *name, int flags);\n\n\nstruct dns_rr_ptr {\t\t/* the PTR RRset */\n  dns_rr_common(dnsptr);\n  char **dnsptr_ptr;\t\t/* array of PTRs */\n};\n\nUDNS_API dns_parse_fn dns_parse_ptr;\t/* PTR RR parsing routine */\ntypedef void\t\t\t\t/* PTR query callback */\ndns_query_ptr_fn(struct dns_ctx *ctx, struct dns_rr_ptr *result, void *data);\n/* submit PTR IN in-addr.arpa query */\nUDNS_API struct dns_query *\ndns_submit_a4ptr(struct dns_ctx *ctx, const struct in_addr *addr,\n                 dns_query_ptr_fn *cbck, void *data);\n/* resolve PTR IN in-addr.arpa query */\nUDNS_API struct dns_rr_ptr *\ndns_resolve_a4ptr(struct dns_ctx *ctx, const struct in_addr *addr);\n\n/* the same as above, but for ip6.arpa */\nUDNS_API struct dns_query *\ndns_submit_a6ptr(struct dns_ctx *ctx, const struct in6_addr *addr,\n                 dns_query_ptr_fn *cbck, void *data);\nUDNS_API struct dns_rr_ptr *\ndns_resolve_a6ptr(struct dns_ctx *ctx, const struct in6_addr *addr);\n\n\nstruct dns_mx {\t\t/* single MX RR */\n  int priority;\t\t/* MX priority */\n  char *name;\t\t/* MX name */\n};\nstruct dns_rr_mx {\t\t/* the MX RRset */\n  dns_rr_common(dnsmx);\n  struct dns_mx *dnsmx_mx;\t/* array of MXes */\n};\nUDNS_API dns_parse_fn dns_parse_mx;\t/* MX RR parsing routine */\ntypedef void\t\t\t\t/* MX RR callback */\ndns_query_mx_fn(struct dns_ctx *ctx, struct dns_rr_mx *result, void *data);\n/* submit MX IN query */\nUDNS_API struct dns_query *\ndns_submit_mx(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_mx_fn *cbck, void *data);\n/* resolve MX IN query */\nUDNS_API struct dns_rr_mx *\ndns_resolve_mx(struct dns_ctx *ctx, const char *name, int flags);\n\n\nstruct dns_txt {\t/* single TXT record */\n  int len;\t\t/* length of the text */\n  dnsc_t *txt;\t/* pointer to text buffer. May contain nulls. */\n};\nstruct dns_rr_txt {\t\t/* the TXT RRset */\n  dns_rr_common(dnstxt);\n  struct dns_txt *dnstxt_txt;\t/* array of TXT records */\n};\nUDNS_API dns_parse_fn dns_parse_txt;\t/* TXT RR parsing routine */\ntypedef void\t\t\t\t/* TXT RR callback */\ndns_query_txt_fn(struct dns_ctx *ctx, struct dns_rr_txt *result, void *data);\n/* submit TXT query */\nUDNS_API struct dns_query *\ndns_submit_txt(struct dns_ctx *ctx, const char *name, int qcls, int flags,\n               dns_query_txt_fn *cbck, void *data);\n/* resolve TXT query */\nUDNS_API struct dns_rr_txt *\ndns_resolve_txt(struct dns_ctx *ctx, const char *name, int qcls, int flags);\n\n\nstruct dns_srv {\t/* single SRV RR */\n  int priority;\t\t/* SRV priority */\n  int weight;\t\t/* SRV weight */\n  int port;\t\t/* SRV port */\n  char *name;\t\t/* SRV name */\n};\nstruct dns_rr_srv {\t\t/* the SRV RRset */\n  dns_rr_common(dnssrv);\n  struct dns_srv *dnssrv_srv;\t/* array of SRVes */\n};\nUDNS_API dns_parse_fn dns_parse_srv;\t/* SRV RR parsing routine */\ntypedef void\t\t\t\t/* SRV RR callback */\ndns_query_srv_fn(struct dns_ctx *ctx, struct dns_rr_srv *result, void *data);\n/* submit SRV IN query */\nUDNS_API struct dns_query *\ndns_submit_srv(struct dns_ctx *ctx,\n               const char *name, const char *srv, const char *proto,\n               int flags, dns_query_srv_fn *cbck, void *data);\n/* resolve SRV IN query */\nUDNS_API struct dns_rr_srv *\ndns_resolve_srv(struct dns_ctx *ctx,\n                const char *name, const char *srv, const char *proto,\n                int flags);\n\n/* NAPTR (RFC3403) RR type */\nstruct dns_naptr {\t/* single NAPTR RR */\n  int order;\t\t/* NAPTR order */\n  int preference;\t/* NAPTR preference */\n  char *flags;\t\t/* NAPTR flags */\n  char *service;\t/* NAPTR service */\n  char *regexp;\t\t/* NAPTR regexp */\n  char *replacement;\t/* NAPTR replacement */\n};\n\nstruct dns_rr_naptr {\t\t/* the NAPTR RRset */\n  dns_rr_common(dnsnaptr);\n  struct dns_naptr *dnsnaptr_naptr;\t/* array of NAPTRes */\n};\nUDNS_API dns_parse_fn dns_parse_naptr;\t/* NAPTR RR parsing routine */\ntypedef void\t\t\t\t/* NAPTR RR callback */\ndns_query_naptr_fn(struct dns_ctx *ctx,\n                   struct dns_rr_naptr *result, void *data);\n/* submit NAPTR IN query */\nUDNS_API struct dns_query *\ndns_submit_naptr(struct dns_ctx *ctx, const char *name, int flags,\n                 dns_query_naptr_fn *cbck, void *data);\n/* resolve NAPTR IN query */\nUDNS_API struct dns_rr_naptr *\ndns_resolve_naptr(struct dns_ctx *ctx, const char *name, int flags);\n\n\nUDNS_API struct dns_query *\ndns_submit_a4dnsbl(struct dns_ctx *ctx,\n                   const struct in_addr *addr, const char *dnsbl,\n                   dns_query_a4_fn *cbck, void *data);\nUDNS_API struct dns_query *\ndns_submit_a4dnsbl_txt(struct dns_ctx *ctx,\n                       const struct in_addr *addr, const char *dnsbl,\n                       dns_query_txt_fn *cbck, void *data);\nUDNS_API struct dns_rr_a4 *\ndns_resolve_a4dnsbl(struct dns_ctx *ctx,\n                    const struct in_addr *addr, const char *dnsbl);\nUDNS_API struct dns_rr_txt *\ndns_resolve_a4dnsbl_txt(struct dns_ctx *ctx,\n                        const struct in_addr *addr, const char *dnsbl);\n\nUDNS_API struct dns_query *\ndns_submit_a6dnsbl(struct dns_ctx *ctx,\n                   const struct in6_addr *addr, const char *dnsbl,\n                   dns_query_a4_fn *cbck, void *data);\nUDNS_API struct dns_query *\ndns_submit_a6dnsbl_txt(struct dns_ctx *ctx,\n                       const struct in6_addr *addr, const char *dnsbl,\n                       dns_query_txt_fn *cbck, void *data);\nUDNS_API struct dns_rr_a4 *\ndns_resolve_a6dnsbl(struct dns_ctx *ctx,\n                    const struct in6_addr *addr, const char *dnsbl);\nUDNS_API struct dns_rr_txt *\ndns_resolve_a6dnsbl_txt(struct dns_ctx *ctx,\n                        const struct in6_addr *addr, const char *dnsbl);\n\nUDNS_API struct dns_query *\ndns_submit_rhsbl(struct dns_ctx *ctx,\n                 const char *name, const char *rhsbl,\n                 dns_query_a4_fn *cbck, void *data);\nUDNS_API struct dns_query *\ndns_submit_rhsbl_txt(struct dns_ctx *ctx,\n                     const char *name, const char *rhsbl,\n                     dns_query_txt_fn *cbck, void *data);\nUDNS_API struct dns_rr_a4 *\ndns_resolve_rhsbl(struct dns_ctx *ctx, const char *name, const char *rhsbl);\nUDNS_API struct dns_rr_txt *\ndns_resolve_rhsbl_txt(struct dns_ctx *ctx, const char *name, const char *rhsbl);\n\n/**************************************************************************/\n/**************** Names, Names ********************************************/\n\nstruct dns_nameval {\n  int val;\n  const char *name;\n};\n\nUDNS_DATA_API extern const struct dns_nameval dns_classtab[];\nUDNS_DATA_API extern const struct dns_nameval dns_typetab[];\nUDNS_DATA_API extern const struct dns_nameval dns_rcodetab[];\nUDNS_API int\ndns_findname(const struct dns_nameval *nv, const char *name);\n#define dns_findclassname(cls) dns_findname(dns_classtab, (cls))\n#define dns_findtypename(type) dns_findname(dns_typetab, (type))\n#define dns_findrcodename(rcode) dns_findname(dns_rcodetab, (rcode))\n\nUDNS_API const char *dns_classname(enum dns_class cls);\nUDNS_API const char *dns_typename(enum dns_type type);\nUDNS_API const char *dns_rcodename(enum dns_rcode rcode);\nconst char *_dns_format_code(char *buf, const char *prefix, int code);\n\nUDNS_API const char *dns_strerror(int errnum);\n\n/* simple pseudo-random number generator, code by Bob Jenkins */\n\nstruct udns_jranctx {\t/* the context */\n  unsigned a, b, c, d;\n};\n\n/* initialize the RNG with a given seed */\nUDNS_API void\nudns_jraninit(struct udns_jranctx *x, unsigned seed);\n\n/* return next random number.  32bits on most platforms so far. */\nUDNS_API unsigned\nudns_jranval(struct udns_jranctx *x);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif\t/* include guard */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_XtoX.c",
    "content": "/* udns_XtoX.c\n   udns_ntop() and udns_pton() routines, which are either\n     - wrappers for inet_ntop() and inet_pton() or\n     - reimplementations of those routines.\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifdef HAVE_CONFIG_H\n# include \"config.h\"\n#endif\n#include \"udns.h\"\n\n#if HAVE_DECL_INET_NTOP == 1\n\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <arpa/inet.h>\n\nconst char *dns_ntop(int af, const void *src, char *dst, int size) {\n  return inet_ntop(af, src, dst, size);\n}\n\nint dns_pton(int af, const char *src, void *dst) {\n  return inet_pton(af, src, dst);\n}\n\n#else\n\n#include <winsock2.h>          /* includes <windows.h> */\n#include <ws2tcpip.h>          /* needed for struct in6_addr */\n\n#ifndef EAFNOSUPPORT\n#define EAFNOSUPPORT    WSAEAFNOSUPPORT\n#endif\n\n#define inet_XtoX_prefix dns_\n#include \"inet_XtoX.c\"\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_bl.c",
    "content": "/* udns_bl.c\n   DNSBL stuff\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include \"udns.h\"\n#ifndef NULL\n# define NULL 0\n#endif\n\nstruct dns_query *\ndns_submit_a4dnsbl(struct dns_ctx *ctx,\n                   const struct in_addr *addr, const char *dnsbl,\n                   dns_query_a4_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (dns_a4ptodn(addr, dnsbl, dn, sizeof(dn)) <= 0) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_A, DNS_NOSRCH,\n                  dns_parse_a4, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_query *\ndns_submit_a4dnsbl_txt(struct dns_ctx *ctx,\n                       const struct in_addr *addr, const char *dnsbl,\n                       dns_query_txt_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (dns_a4ptodn(addr, dnsbl, dn, sizeof(dn)) <= 0) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_TXT, DNS_NOSRCH,\n                  dns_parse_txt, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_rr_a4 *\ndns_resolve_a4dnsbl(struct dns_ctx *ctx,\n                    const struct in_addr *addr, const char *dnsbl) {\n  return (struct dns_rr_a4 *)\n    dns_resolve(ctx, dns_submit_a4dnsbl(ctx, addr, dnsbl, 0, 0));\n}\n\nstruct dns_rr_txt *\ndns_resolve_a4dnsbl_txt(struct dns_ctx *ctx,\n                        const struct in_addr *addr, const char *dnsbl) {\n  return (struct dns_rr_txt *)\n    dns_resolve(ctx, dns_submit_a4dnsbl_txt(ctx, addr, dnsbl, 0, 0));\n}\n\n\nstruct dns_query *\ndns_submit_a6dnsbl(struct dns_ctx *ctx,\n                   const struct in6_addr *addr, const char *dnsbl,\n                   dns_query_a4_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (dns_a6ptodn(addr, dnsbl, dn, sizeof(dn)) <= 0) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_A, DNS_NOSRCH,\n                  dns_parse_a4, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_query *\ndns_submit_a6dnsbl_txt(struct dns_ctx *ctx,\n                       const struct in6_addr *addr, const char *dnsbl,\n                       dns_query_txt_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (dns_a6ptodn(addr, dnsbl, dn, sizeof(dn)) <= 0) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_TXT, DNS_NOSRCH,\n                  dns_parse_txt, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_rr_a4 *\ndns_resolve_a6dnsbl(struct dns_ctx *ctx,\n                    const struct in6_addr *addr, const char *dnsbl) {\n  return (struct dns_rr_a4 *)\n    dns_resolve(ctx, dns_submit_a6dnsbl(ctx, addr, dnsbl, 0, 0));\n}\n\nstruct dns_rr_txt *\ndns_resolve_a6dnsbl_txt(struct dns_ctx *ctx,\n                        const struct in6_addr *addr, const char *dnsbl) {\n  return (struct dns_rr_txt *)\n    dns_resolve(ctx, dns_submit_a6dnsbl_txt(ctx, addr, dnsbl, 0, 0));\n}\n\nstatic int\ndns_rhsbltodn(const char *name, const char *rhsbl, dnsc_t dn[DNS_MAXDN])\n{\n  int l = dns_sptodn(name, dn, DNS_MAXDN);\n  if (l <= 0) return 0;\n  l = dns_sptodn(rhsbl, dn+l-1, DNS_MAXDN-l+1);\n  if (l <= 0) return 0;\n  return 1;\n}\n\nstruct dns_query *\ndns_submit_rhsbl(struct dns_ctx *ctx, const char *name, const char *rhsbl,\n                 dns_query_a4_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (!dns_rhsbltodn(name, rhsbl, dn)) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_A, DNS_NOSRCH,\n                  dns_parse_a4, (dns_query_fn*)cbck, data);\n}\nstruct dns_query *\ndns_submit_rhsbl_txt(struct dns_ctx *ctx, const char *name, const char *rhsbl,\n                     dns_query_txt_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  if (!dns_rhsbltodn(name, rhsbl, dn)) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_TXT, DNS_NOSRCH,\n                  dns_parse_txt, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_rr_a4 *\ndns_resolve_rhsbl(struct dns_ctx *ctx, const char *name, const char *rhsbl) {\n  return (struct dns_rr_a4*)\n    dns_resolve(ctx, dns_submit_rhsbl(ctx, name, rhsbl, 0, 0));\n}\n\nstruct dns_rr_txt *\ndns_resolve_rhsbl_txt(struct dns_ctx *ctx, const char *name, const char *rhsbl)\n{\n  return (struct dns_rr_txt*)\n    dns_resolve(ctx, dns_submit_rhsbl_txt(ctx, name, rhsbl, 0, 0));\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_codes.c",
    "content": "/* Automatically generated. */\n#include \"udns.h\"\n\nconst struct dns_nameval dns_typetab[] = {\n {DNS_T_INVALID,\"INVALID\"},\n {DNS_T_A,\"A\"},\n {DNS_T_NS,\"NS\"},\n {DNS_T_MD,\"MD\"},\n {DNS_T_MF,\"MF\"},\n {DNS_T_CNAME,\"CNAME\"},\n {DNS_T_SOA,\"SOA\"},\n {DNS_T_MB,\"MB\"},\n {DNS_T_MG,\"MG\"},\n {DNS_T_MR,\"MR\"},\n {DNS_T_NULL,\"NULL\"},\n {DNS_T_WKS,\"WKS\"},\n {DNS_T_PTR,\"PTR\"},\n {DNS_T_HINFO,\"HINFO\"},\n {DNS_T_MINFO,\"MINFO\"},\n {DNS_T_MX,\"MX\"},\n {DNS_T_TXT,\"TXT\"},\n {DNS_T_RP,\"RP\"},\n {DNS_T_AFSDB,\"AFSDB\"},\n {DNS_T_X25,\"X25\"},\n {DNS_T_ISDN,\"ISDN\"},\n {DNS_T_RT,\"RT\"},\n {DNS_T_NSAP,\"NSAP\"},\n {DNS_T_NSAP_PTR,\"NSAP_PTR\"},\n {DNS_T_SIG,\"SIG\"},\n {DNS_T_KEY,\"KEY\"},\n {DNS_T_PX,\"PX\"},\n {DNS_T_GPOS,\"GPOS\"},\n {DNS_T_AAAA,\"AAAA\"},\n {DNS_T_LOC,\"LOC\"},\n {DNS_T_NXT,\"NXT\"},\n {DNS_T_EID,\"EID\"},\n {DNS_T_NIMLOC,\"NIMLOC\"},\n {DNS_T_SRV,\"SRV\"},\n {DNS_T_ATMA,\"ATMA\"},\n {DNS_T_NAPTR,\"NAPTR\"},\n {DNS_T_KX,\"KX\"},\n {DNS_T_CERT,\"CERT\"},\n {DNS_T_A6,\"A6\"},\n {DNS_T_DNAME,\"DNAME\"},\n {DNS_T_SINK,\"SINK\"},\n {DNS_T_OPT,\"OPT\"},\n {DNS_T_DS,\"DS\"},\n {DNS_T_SSHFP,\"SSHFP\"},\n {DNS_T_IPSECKEY,\"IPSECKEY\"},\n {DNS_T_RRSIG,\"RRSIG\"},\n {DNS_T_NSEC,\"NSEC\"},\n {DNS_T_DNSKEY,\"DNSKEY\"},\n {DNS_T_DHCID,\"DHCID\"},\n {DNS_T_NSEC3,\"NSEC3\"},\n {DNS_T_NSEC3PARAMS,\"NSEC3PARAMS\"},\n {DNS_T_TALINK,\"TALINK\"},\n {DNS_T_SPF,\"SPF\"},\n {DNS_T_UINFO,\"UINFO\"},\n {DNS_T_UID,\"UID\"},\n {DNS_T_GID,\"GID\"},\n {DNS_T_UNSPEC,\"UNSPEC\"},\n {DNS_T_TSIG,\"TSIG\"},\n {DNS_T_IXFR,\"IXFR\"},\n {DNS_T_AXFR,\"AXFR\"},\n {DNS_T_MAILB,\"MAILB\"},\n {DNS_T_MAILA,\"MAILA\"},\n {DNS_T_ANY,\"ANY\"},\n {DNS_T_ZXFR,\"ZXFR\"},\n {DNS_T_DLV,\"DLV\"},\n {DNS_T_MAX,\"MAX\"},\n {0,0}};\nconst char *dns_typename(enum dns_type code) {\n static char nm[20];\n switch(code) {\n case DNS_T_INVALID: return dns_typetab[0].name;\n case DNS_T_A: return dns_typetab[1].name;\n case DNS_T_NS: return dns_typetab[2].name;\n case DNS_T_MD: return dns_typetab[3].name;\n case DNS_T_MF: return dns_typetab[4].name;\n case DNS_T_CNAME: return dns_typetab[5].name;\n case DNS_T_SOA: return dns_typetab[6].name;\n case DNS_T_MB: return dns_typetab[7].name;\n case DNS_T_MG: return dns_typetab[8].name;\n case DNS_T_MR: return dns_typetab[9].name;\n case DNS_T_NULL: return dns_typetab[10].name;\n case DNS_T_WKS: return dns_typetab[11].name;\n case DNS_T_PTR: return dns_typetab[12].name;\n case DNS_T_HINFO: return dns_typetab[13].name;\n case DNS_T_MINFO: return dns_typetab[14].name;\n case DNS_T_MX: return dns_typetab[15].name;\n case DNS_T_TXT: return dns_typetab[16].name;\n case DNS_T_RP: return dns_typetab[17].name;\n case DNS_T_AFSDB: return dns_typetab[18].name;\n case DNS_T_X25: return dns_typetab[19].name;\n case DNS_T_ISDN: return dns_typetab[20].name;\n case DNS_T_RT: return dns_typetab[21].name;\n case DNS_T_NSAP: return dns_typetab[22].name;\n case DNS_T_NSAP_PTR: return dns_typetab[23].name;\n case DNS_T_SIG: return dns_typetab[24].name;\n case DNS_T_KEY: return dns_typetab[25].name;\n case DNS_T_PX: return dns_typetab[26].name;\n case DNS_T_GPOS: return dns_typetab[27].name;\n case DNS_T_AAAA: return dns_typetab[28].name;\n case DNS_T_LOC: return dns_typetab[29].name;\n case DNS_T_NXT: return dns_typetab[30].name;\n case DNS_T_EID: return dns_typetab[31].name;\n case DNS_T_NIMLOC: return dns_typetab[32].name;\n case DNS_T_SRV: return dns_typetab[33].name;\n case DNS_T_ATMA: return dns_typetab[34].name;\n case DNS_T_NAPTR: return dns_typetab[35].name;\n case DNS_T_KX: return dns_typetab[36].name;\n case DNS_T_CERT: return dns_typetab[37].name;\n case DNS_T_A6: return dns_typetab[38].name;\n case DNS_T_DNAME: return dns_typetab[39].name;\n case DNS_T_SINK: return dns_typetab[40].name;\n case DNS_T_OPT: return dns_typetab[41].name;\n case DNS_T_DS: return dns_typetab[42].name;\n case DNS_T_SSHFP: return dns_typetab[43].name;\n case DNS_T_IPSECKEY: return dns_typetab[44].name;\n case DNS_T_RRSIG: return dns_typetab[45].name;\n case DNS_T_NSEC: return dns_typetab[46].name;\n case DNS_T_DNSKEY: return dns_typetab[47].name;\n case DNS_T_DHCID: return dns_typetab[48].name;\n case DNS_T_NSEC3: return dns_typetab[49].name;\n case DNS_T_NSEC3PARAMS: return dns_typetab[50].name;\n case DNS_T_TALINK: return dns_typetab[51].name;\n case DNS_T_SPF: return dns_typetab[52].name;\n case DNS_T_UINFO: return dns_typetab[53].name;\n case DNS_T_UID: return dns_typetab[54].name;\n case DNS_T_GID: return dns_typetab[55].name;\n case DNS_T_UNSPEC: return dns_typetab[56].name;\n case DNS_T_TSIG: return dns_typetab[57].name;\n case DNS_T_IXFR: return dns_typetab[58].name;\n case DNS_T_AXFR: return dns_typetab[59].name;\n case DNS_T_MAILB: return dns_typetab[60].name;\n case DNS_T_MAILA: return dns_typetab[61].name;\n case DNS_T_ANY: return dns_typetab[62].name;\n case DNS_T_ZXFR: return dns_typetab[63].name;\n case DNS_T_DLV: return dns_typetab[64].name;\n case DNS_T_MAX: return dns_typetab[65].name;\n }\n return _dns_format_code(nm,\"type\",code);\n}\n\nconst struct dns_nameval dns_classtab[] = {\n {DNS_C_INVALID,\"INVALID\"},\n {DNS_C_IN,\"IN\"},\n {DNS_C_CH,\"CH\"},\n {DNS_C_HS,\"HS\"},\n {DNS_C_ANY,\"ANY\"},\n {0,0}};\nconst char *dns_classname(enum dns_class code) {\n static char nm[20];\n switch(code) {\n case DNS_C_INVALID: return dns_classtab[0].name;\n case DNS_C_IN: return dns_classtab[1].name;\n case DNS_C_CH: return dns_classtab[2].name;\n case DNS_C_HS: return dns_classtab[3].name;\n case DNS_C_ANY: return dns_classtab[4].name;\n }\n return _dns_format_code(nm,\"class\",code);\n}\n\nconst struct dns_nameval dns_rcodetab[] = {\n {DNS_R_NOERROR,\"NOERROR\"},\n {DNS_R_FORMERR,\"FORMERR\"},\n {DNS_R_SERVFAIL,\"SERVFAIL\"},\n {DNS_R_NXDOMAIN,\"NXDOMAIN\"},\n {DNS_R_NOTIMPL,\"NOTIMPL\"},\n {DNS_R_REFUSED,\"REFUSED\"},\n {DNS_R_YXDOMAIN,\"YXDOMAIN\"},\n {DNS_R_YXRRSET,\"YXRRSET\"},\n {DNS_R_NXRRSET,\"NXRRSET\"},\n {DNS_R_NOTAUTH,\"NOTAUTH\"},\n {DNS_R_NOTZONE,\"NOTZONE\"},\n {DNS_R_BADSIG,\"BADSIG\"},\n {DNS_R_BADKEY,\"BADKEY\"},\n {DNS_R_BADTIME,\"BADTIME\"},\n {0,0}};\nconst char *dns_rcodename(enum dns_rcode code) {\n static char nm[20];\n switch(code) {\n case DNS_R_NOERROR: return dns_rcodetab[0].name;\n case DNS_R_FORMERR: return dns_rcodetab[1].name;\n case DNS_R_SERVFAIL: return dns_rcodetab[2].name;\n case DNS_R_NXDOMAIN: return dns_rcodetab[3].name;\n case DNS_R_NOTIMPL: return dns_rcodetab[4].name;\n case DNS_R_REFUSED: return dns_rcodetab[5].name;\n case DNS_R_YXDOMAIN: return dns_rcodetab[6].name;\n case DNS_R_YXRRSET: return dns_rcodetab[7].name;\n case DNS_R_NXRRSET: return dns_rcodetab[8].name;\n case DNS_R_NOTAUTH: return dns_rcodetab[9].name;\n case DNS_R_NOTZONE: return dns_rcodetab[10].name;\n case DNS_R_BADSIG: return dns_rcodetab[11].name;\n case DNS_R_BADKEY: return dns_rcodetab[12].name;\n case DNS_R_BADTIME: return dns_rcodetab[13].name;\n }\n return _dns_format_code(nm,\"rcode\",code);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_dn.c",
    "content": "/* udns_dn.c\n   domain names manipulation routines\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include \"udns.h\"\n\nunsigned dns_dnlen(dnscc_t *dn) {\n  register dnscc_t *d = dn;\n  while(*d)\n    d += 1 + *d;\n  return (unsigned)(d - dn) + 1;\n}\n\nunsigned dns_dnlabels(register dnscc_t *dn) {\n  register unsigned l = 0;\n  while(*dn)\n    ++l, dn += 1 + *dn;\n  return l;\n}\n\nunsigned dns_dnequal(register dnscc_t *dn1, register dnscc_t *dn2) {\n  register unsigned c;\n  dnscc_t *dn = dn1;\n  for(;;) {\n    if ((c = *dn1++) != *dn2++)\n      return 0;\n    if (!c)\n      return (unsigned)(dn1 - dn);\n    while(c--) {\n      if (DNS_DNLC(*dn1) != DNS_DNLC(*dn2))\n        return 0;\n      ++dn1; ++dn2;\n    }\n  }\n}\n\nunsigned\ndns_dntodn(dnscc_t *sdn, dnsc_t *ddn, unsigned ddnsiz) {\n  unsigned sdnlen = dns_dnlen(sdn);\n  if (ddnsiz < sdnlen)\n    return 0;\n  memcpy(ddn, sdn, sdnlen);\n  return sdnlen;\n}\n\nint\ndns_ptodn(const char *name, unsigned namelen,\n          dnsc_t *dn, unsigned dnsiz, int *isabs)\n{\n  dnsc_t *dp;\t\t/* current position in dn (len byte first) */\n  dnsc_t *const de\t/* end of dn: last byte that can be filled up */\n      = dn + (dnsiz >= DNS_MAXDN ? DNS_MAXDN : dnsiz) - 1;\n  dnscc_t *np = (dnscc_t *)name;\n  dnscc_t *ne = np + (namelen ? namelen : strlen((char*)np));\n  dnsc_t *llab;\t\t/* start of last label (llab[-1] will be length) */\n  unsigned c;\t\t/* next input character, or length of last label */\n\n  if (!dnsiz)\n    return 0;\n  dp = llab = dn + 1;\n\n  while(np < ne) {\n\n    if (*np == '.') {\t/* label delimiter */\n      c = dp - llab;\t\t/* length of the label */\n      if (!c) {\t\t\t/* empty label */\n        if (np == (dnscc_t *)name && np + 1 == ne) {\n          /* special case for root dn, aka `.' */\n          ++np;\n          break;\n        }\n        return -1;\t\t/* zero label */\n      }\n      if (c > DNS_MAXLABEL)\n        return -1;\t\t/* label too long */\n      llab[-1] = (dnsc_t)c;\t/* update len of last label */\n      llab = ++dp; /* start new label, llab[-1] will be len of it */\n      ++np;\n      continue;\n    }\n\n    /* check whenever we may put out one more byte */\n    if (dp >= de) /* too long? */\n      return dnsiz >= DNS_MAXDN ? -1 : 0;\n    if (*np != '\\\\') { /* non-escape, simple case */\n      *dp++ = *np++;\n      continue;\n    }\n    /* handle \\-style escape */\n    /* note that traditionally, domain names (gethostbyname etc)\n     * used decimal \\dd notation, not octal \\ooo (RFC1035), so\n     * we're following this tradition here.\n     */\n    if (++np == ne)\n      return -1;\t\t\t/* bad escape */\n    else if (*np >= '0' && *np <= '9') { /* decimal number */\n      /* we allow not only exactly 3 digits as per RFC1035,\n       * but also 2 or 1, for better usability. */\n      c = *np++ - '0';\n      if (np < ne && *np >= '0' && *np <= '9') { /* 2digits */\n        c = c * 10 + *np++ - '0';\n        if (np < ne && *np >= '0' && *np <= '9') {\n          c = c * 10 + *np++ - '0';\n          if (c > 255)\n            return -1;\t\t\t/* bad escape */\n        }\n      }\n    }\n    else\n      c = *np++;\n    *dp++ = (dnsc_t)c;\t/* place next out byte */\n  }\n\n  if ((c = dp - llab) > DNS_MAXLABEL)\n    return -1;\t\t\t\t/* label too long */\n  if ((llab[-1] = (dnsc_t)c) != 0) {\n    *dp++ = 0;\n    if (isabs)\n      *isabs = 0;\n  }\n  else if (isabs)\n    *isabs = 1;\n\n  return dp - dn;\n}\n\ndnscc_t dns_inaddr_arpa_dn[14] = \"\\07in-addr\\04arpa\";\n\ndnsc_t *\ndns_a4todn_(const struct in_addr *addr, dnsc_t *dn, dnsc_t *dne) {\n  const unsigned char *s = ((const unsigned char *)addr) + 4;\n  while(s > (const unsigned char *)addr) {\n    unsigned n = *--s;\n    dnsc_t *p = dn + 1;\n    if (n > 99) {\n      if (p + 2 > dne) return 0;\n      *p++ = n / 100 + '0';\n      *p++ = (n % 100 / 10) + '0';\n      *p = n % 10 + '0';\n    }\n    else if (n > 9) {\n      if (p + 1 > dne) return 0;\n      *p++ = n / 10 + '0';\n      *p = n % 10 + '0';\n    }\n    else {\n      if (p > dne) return 0;\n      *p = n + '0';\n    }\n    *dn = p - dn;\n    dn = p + 1;\n  }\n  return dn;\n}\n\nint dns_a4todn(const struct in_addr *addr, dnscc_t *tdn,\n               dnsc_t *dn, unsigned dnsiz) {\n  dnsc_t *dne = dn + (dnsiz > DNS_MAXDN ? DNS_MAXDN : dnsiz);\n  dnsc_t *p;\n  unsigned l;\n  p = dns_a4todn_(addr, dn, dne);\n  if (!p) return 0;\n  if (!tdn)\n    tdn = dns_inaddr_arpa_dn;\n  l = dns_dnlen(tdn);\n  if (p + l > dne) return dnsiz >= DNS_MAXDN ? -1 : 0;\n  memcpy(p, tdn, l);\n  return (p + l) - dn;\n}\n\nint dns_a4ptodn(const struct in_addr *addr, const char *tname,\n                dnsc_t *dn, unsigned dnsiz) {\n  dnsc_t *p;\n  int r;\n  if (!tname)\n    return dns_a4todn(addr, NULL, dn, dnsiz);\n  p = dns_a4todn_(addr, dn, dn + dnsiz);\n  if (!p) return 0;\n  r = dns_sptodn(tname, p, dnsiz - (p - dn));\n  return r != 0 ? r : dnsiz >= DNS_MAXDN ? -1 : 0;\n}\n\ndnscc_t dns_ip6_arpa_dn[10] = \"\\03ip6\\04arpa\";\n\ndnsc_t *\ndns_a6todn_(const struct in6_addr *addr, dnsc_t *dn, dnsc_t *dne) {\n  const unsigned char *s = ((const unsigned char *)addr) + 16;\n  if (dn + 64 > dne) return 0;\n  while(s > (const unsigned char *)addr) {\n    unsigned n = *--s & 0x0f;\n    *dn++ = 1;\n    *dn++ = n > 9 ? n + 'a' - 10 : n + '0';\n    *dn++ = 1;\n    n = *s >> 4;\n    *dn++ = n > 9 ? n + 'a' - 10 : n + '0';\n  }\n  return dn;\n}\n\nint dns_a6todn(const struct in6_addr *addr, dnscc_t *tdn,\n               dnsc_t *dn, unsigned dnsiz) {\n  dnsc_t *dne = dn + (dnsiz > DNS_MAXDN ? DNS_MAXDN : dnsiz);\n  dnsc_t *p;\n  unsigned l;\n  p = dns_a6todn_(addr, dn, dne);\n  if (!p) return 0;\n  if (!tdn)\n    tdn = dns_ip6_arpa_dn;\n  l = dns_dnlen(tdn);\n  if (p + l > dne) return dnsiz >= DNS_MAXDN ? -1 : 0;\n  memcpy(p, tdn, l);\n  return (p + l) - dn;\n}\n\nint dns_a6ptodn(const struct in6_addr *addr, const char *tname,\n                dnsc_t *dn, unsigned dnsiz) {\n  dnsc_t *p;\n  int r;\n  if (!tname)\n    return dns_a6todn(addr, NULL, dn, dnsiz);\n  p = dns_a6todn_(addr, dn, dn + dnsiz);\n  if (!p) return 0;\n  r = dns_sptodn(tname, p, dnsiz - (p - dn));\n  return r != 0 ? r : dnsiz >= DNS_MAXDN ? -1 : 0;\n}\n\n/* return size of buffer required to convert the dn into asciiz string.\n * Keep in sync with dns_dntop() below.\n */\nunsigned dns_dntop_size(dnscc_t *dn) {\n  unsigned size = 0;\t\t/* the size reqd */\n  dnscc_t *le;\t\t\t/* label end */\n\n  while(*dn) {\n    /* *dn is the length of the next label, non-zero */\n    if (size)\n      ++size;\t\t/* for the dot */\n    le = dn + *dn + 1;\n    ++dn;\n    do {\n      switch(*dn) {\n      case '.':\n      case '\\\\':\n      /* Special modifiers in zone files. */\n      case '\"':\n      case ';':\n      case '@':\n      case '$':\n        size += 2;\n        break;\n      default:\n        if (*dn <= 0x20 || *dn >= 0x7f)\n          /* \\ddd decimal notation */\n          size += 4;\n        else\n          size += 1;\n      }\n    } while(++dn < le);\n  }\n  size += 1;\t/* zero byte at the end - string terminator */\n  return size > DNS_MAXNAME ? 0 : size;\n}\n\n/* Convert the dn into asciiz string.\n * Keep in sync with dns_dntop_size() above.\n */\nint dns_dntop(dnscc_t *dn, char *name, unsigned namesiz) {\n  char *np = name;\t\t\t/* current name ptr */\n  char *const ne = name + namesiz;\t/* end of name */\n  dnscc_t *le;\t\t/* label end */\n\n  while(*dn) {\n    /* *dn is the length of the next label, non-zero */\n    if (np != name) {\n      if (np >= ne) goto toolong;\n      *np++ = '.';\n    }\n    le = dn + *dn + 1;\n    ++dn;\n    do {\n      switch(*dn) {\n      case '.':\n      case '\\\\':\n      /* Special modifiers in zone files. */\n      case '\"':\n      case ';':\n      case '@':\n      case '$':\n        if (np + 2 > ne) goto toolong;\n        *np++ = '\\\\';\n        *np++ = *dn;\n        break;\n      default:\n        if (*dn <= 0x20 || *dn >= 0x7f) {\n          /* \\ddd decimal notation */\n          if (np + 4 >= ne) goto toolong;\n          *np++ = '\\\\';\n          *np++ = '0' + (*dn / 100);\n          *np++ = '0' + ((*dn % 100) / 10);\n          *np++ = '0' + (*dn % 10);\n        }\n        else {\n          if (np >= ne) goto toolong;\n          *np++ = *dn;\n        }\n      }\n    } while(++dn < le);\n  }\n  if (np >= ne) goto toolong;\n  *np++ = '\\0';\n  return np - name;\ntoolong:\n  return namesiz >= DNS_MAXNAME ? -1 : 0;\n}\n\n#if 0\n#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, char **argv) {\n  int i;\n  int sz;\n  dnsc_t dn[DNS_MAXDN+10];\n  dnsc_t *dl, *dp;\n  int isabs;\n\n  sz = (argc > 1) ? atoi(argv[1]) : 0;\n\n  for(i = 2; i < argc; ++i) {\n    int r = dns_ptodn(argv[i], 0, dn, sz, &isabs);\n    printf(\"%s: \", argv[i]);\n    if (r < 0) printf(\"error\\n\");\n    else if (!r) printf(\"buffer too small\\n\");\n    else {\n      printf(\"len=%d dnlen=%d size=%d name:\",\n             r, dns_dnlen(dn), dns_dntop_size(dn));\n      dl = dn;\n      while(*dl) {\n        printf(\" %d=\", *dl);\n        dp = dl + 1;\n        dl = dp + *dl;\n        while(dp < dl) {\n          if (*dp <= ' ' || *dp >= 0x7f)\n            printf(\"\\\\%03d\", *dp);\n          else if (*dp == '.' || *dp == '\\\\')\n            printf(\"\\\\%c\", *dp);\n          else\n            putchar(*dp);\n          ++dp;\n        }\n      }\n      if (isabs) putchar('.');\n      putchar('\\n');\n    }\n  }\n  return 0;\n}\n\n#endif /* TEST */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_dntosp.c",
    "content": "/* udns_dntosp.c\n   dns_dntosp() = convert DN to asciiz string using static buffer\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include \"udns.h\"\n\nstatic char name[DNS_MAXNAME];\n\nconst char *dns_dntosp(dnscc_t *dn) {\n  return dns_dntop(dn, name, sizeof(name)) > 0 ? name : 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_init.c",
    "content": "/* udns_init.c\n   resolver initialisation stuff\n\n   Copyright (C) 2006  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifdef HAVE_CONFIG_H\n# include \"config.h\"\n#endif\n#ifdef __MINGW32__\n# include <winsock2.h>          /* includes <windows.h> */\n# include <iphlpapi.h>\t\t/* for dns server addresses etc */\n#else\n# include <sys/types.h>\n# include <unistd.h>\n# include <fcntl.h>\n#endif\t/* !__MINGW32__ */\n\n#include <stdlib.h>\n#include <string.h>\n#include \"udns.h\"\n\n#define ISSPACE(x) (x == ' ' || x == '\\t' || x == '\\r' || x == '\\n')\n\nstatic const char space[] = \" \\t\\r\\n\";\n\nstatic void dns_set_serv_internal(struct dns_ctx *ctx, char *serv) {\n  dns_add_serv(ctx, NULL);\n  for(serv = strtok(serv, space); serv; serv = strtok(NULL, space))\n    dns_add_serv(ctx, serv);\n}\n\nstatic void dns_set_srch_internal(struct dns_ctx *ctx, char *srch) {\n  dns_add_srch(ctx, NULL);\n  for(srch = strtok(srch, space); srch; srch = strtok(NULL, space))\n    dns_add_srch(ctx, srch);\n}\n\n#ifdef __MINGW32__\n\n#define NO_IPHLPAPI\n\n#ifndef NO_IPHLPAPI\n/* Apparently, some systems does not have proper headers for IPHLPAIP to work.\n * The best is to upgrade headers, but here's another, ugly workaround for\n * this: compile with -DNO_IPHLPAPI.\n */\n\ntypedef DWORD (WINAPI *GetAdaptersAddressesFunc)(\n  ULONG Family, DWORD Flags, PVOID Reserved,\n  PIP_ADAPTER_ADDRESSES pAdapterAddresses,\n  PULONG pOutBufLen);\n\nstatic int dns_initns_iphlpapi(struct dns_ctx *ctx) {\n  HANDLE h_iphlpapi;\n  GetAdaptersAddressesFunc pfnGetAdAddrs;\n  PIP_ADAPTER_ADDRESSES pAddr, pAddrBuf;\n  PIP_ADAPTER_DNS_SERVER_ADDRESS pDnsAddr;\n  ULONG ulOutBufLen;\n  DWORD dwRetVal;\n  int ret = -1;\n\n  h_iphlpapi = LoadLibrary(\"iphlpapi.dll\");\n  if (!h_iphlpapi)\n    return -1;\n  pfnGetAdAddrs = (GetAdaptersAddressesFunc)\n    GetProcAddress(h_iphlpapi, \"GetAdaptersAddresses\");\n  if (!pfnGetAdAddrs) goto freelib;\n  ulOutBufLen = 0;\n  dwRetVal = pfnGetAdAddrs(AF_UNSPEC, 0, NULL, NULL, &ulOutBufLen);\n  if (dwRetVal != ERROR_BUFFER_OVERFLOW) goto freelib;\n  pAddrBuf = malloc(ulOutBufLen);\n  if (!pAddrBuf) goto freelib;\n  dwRetVal = pfnGetAdAddrs(AF_UNSPEC, 0, NULL, pAddrBuf, &ulOutBufLen);\n  if (dwRetVal != ERROR_SUCCESS) goto freemem;\n  for (pAddr = pAddrBuf; pAddr; pAddr = pAddr->Next)\n    for (pDnsAddr = pAddr->FirstDnsServerAddress;\n\t pDnsAddr;\n\t pDnsAddr = pDnsAddr->Next)\n      dns_add_serv_s(ctx, pDnsAddr->Address.lpSockaddr);\n  ret = 0;\nfreemem:\n  free(pAddrBuf);\nfreelib:\n  FreeLibrary(h_iphlpapi);\n  return ret;\n}\n\n#else /* NO_IPHLPAPI */\n\n#define dns_initns_iphlpapi(ctx) (-1)\n\n#endif /* NO_IPHLPAPI */\n\nstatic int dns_initns_registry(struct dns_ctx *ctx) {\n  LONG res;\n  HKEY hk;\n  DWORD type = REG_EXPAND_SZ | REG_SZ;\n  DWORD len;\n  char valBuf[1024];\n\n#define REGKEY_WINNT \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\Tcpip\\\\Parameters\"\n#define REGKEY_WIN9x \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\VxD\\\\MSTCP\"\n  res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY_WINNT, 0, KEY_QUERY_VALUE, &hk);\n  if (res != ERROR_SUCCESS)\n    res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY_WIN9x,\n                       0, KEY_QUERY_VALUE, &hk);\n  if (res != ERROR_SUCCESS)\n    return -1;\n  len = sizeof(valBuf) - 1;\n  res = RegQueryValueEx(hk, \"NameServer\", NULL, &type, (BYTE*)valBuf, &len);\n  if (res != ERROR_SUCCESS || !len || !valBuf[0]) {\n    len = sizeof(valBuf) - 1;\n    res = RegQueryValueEx(hk, \"DhcpNameServer\", NULL, &type,\n                          (BYTE*)valBuf, &len);\n  }\n  RegCloseKey(hk);\n  if (res != ERROR_SUCCESS || !len || !valBuf[0])\n    return -1;\n  valBuf[len] = '\\0';\n  /* nameservers are stored as a whitespace-seperate list:\n   * \"192.168.1.1 123.21.32.12\" */\n  dns_set_serv_internal(ctx, valBuf);\n  return 0;\n}\n\n#else /* !__MINGW32__ */\n\nstatic int dns_init_resolvconf(struct dns_ctx *ctx) {\n  char *v;\n  char buf[2049];\t/* this buffer is used to hold /etc/resolv.conf */\n  int has_srch = 0;\n\n  /* read resolv.conf... */\n  { int fd = open(\"/etc/resolv.conf\", O_RDONLY);\n    if (fd >= 0) {\n      int l = read(fd, buf, sizeof(buf) - 1);\n      close(fd);\n      buf[l < 0 ? 0 : l] = '\\0';\n    }\n    else\n      buf[0] = '\\0';\n  }\n  if (buf[0]) {\t/* ...and parse it */\n    char *line, *nextline;\n    line = buf;\n    do {\n      nextline = strchr(line, '\\n');\n      if (nextline) *nextline++ = '\\0';\n      v = line;\n      while(*v && !ISSPACE(*v)) ++v;\n      if (!*v) continue;\n      *v++ = '\\0';\n      while(ISSPACE(*v)) ++v;\n      if (!*v) continue;\n      if (strcmp(line, \"domain\") == 0) {\n        dns_set_srch_internal(ctx, strtok(v, space));\n\thas_srch = 1;\n      }\n      else if (strcmp(line, \"search\") == 0) {\n        dns_set_srch_internal(ctx, v);\n\thas_srch = 1;\n      }\n      else if (strcmp(line, \"nameserver\") == 0)\n        dns_add_serv(ctx, strtok(v, space));\n      else if (strcmp(line, \"options\") == 0)\n        dns_set_opts(ctx, v);\n    } while((line = nextline) != NULL);\n  }\n\n  buf[sizeof(buf)-1] = '\\0';\n\n  /* get list of nameservers from env. vars. */\n  if ((v = getenv(\"NSCACHEIP\")) != NULL ||\n      (v = getenv(\"NAMESERVERS\")) != NULL) {\n    strncpy(buf, v, sizeof(buf) - 1);\n    dns_set_serv_internal(ctx, buf);\n  }\n  /* if $LOCALDOMAIN is set, use it for search list */\n  if ((v = getenv(\"LOCALDOMAIN\")) != NULL) {\n    strncpy(buf, v, sizeof(buf) - 1);\n    dns_set_srch_internal(ctx, buf);\n    has_srch = 1;\n  }\n  if ((v = getenv(\"RES_OPTIONS\")) != NULL)\n    dns_set_opts(ctx, v);\n\n  /* if still no search list, use local domain name */\n  if (has_srch &&\n      gethostname(buf, sizeof(buf) - 1) == 0 &&\n      (v = strchr(buf, '.')) != NULL &&\n      *++v != '\\0')\n    dns_add_srch(ctx, v);\n\n  return 0;\n}\n\n#endif /* !__MINGW32__ */\n\nint dns_init(struct dns_ctx *ctx, int do_open) {\n  if (!ctx)\n    ctx = &dns_defctx;\n  dns_reset(ctx);\n\n#ifdef __MINGW32__\n  if (dns_initns_iphlpapi(ctx) != 0)\n    dns_initns_registry(ctx);\n  /*XXX __MINGW32__: probably good to get default domain and search list too...\n   * And options.  Something is in registry. */\n  /*XXX __MINGW32__: maybe environment variables are also useful? */\n#else\n  dns_init_resolvconf(ctx);\n#endif\n\n  return do_open ? dns_open(ctx) : 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_jran.c",
    "content": "/* udns_jran.c: small non-cryptographic random number generator\n * taken from http://burtleburtle.net/bob/rand/smallprng.html\n * by Bob Jenkins, Public domain.\n */\n\n#include \"udns.h\"\n\n#define rot32(x,k) (((x) << (k)) | ((x) >> (32-(k))))\n#define rot64(x,k) (((x) << (k)) | ((x) >> (64-(k))))\n#define tr32(x) ((x)&0xffffffffu)\n\nunsigned udns_jranval(struct udns_jranctx *x) {\n  /* This routine can be made to work with either 32 or 64bit words -\n   * if JRAN_32_64 is defined when compiling the file.\n   * We use if() instead of #if since there's no good\n   * portable way to check sizeof() in preprocessor without\n   * introducing some ugly configure-time checks.\n   * Most compilers will optimize the wrong branches away anyway.\n   * By default it assumes 32bit integers\n   */\n#ifdef JRAN_32_64\n  if (sizeof(unsigned) == 4) {\n#endif\n    unsigned e = tr32(x->a - rot32(x->b, 27));\n    x->a = tr32(x->b ^ rot32(x->c, 17));\n    x->b = tr32(x->c + x->d);\n    x->c = tr32(x->d + e);\n    x->d = tr32(e + x->a);\n#ifdef JRAN_32_64\n  }\n  else if (sizeof(unsigned) == 8) { /* assuming it's 64bits */\n    unsigned e = x->a - rot64(x->b, 7);\n    x->a = x->b ^ rot64(x->c, 13);\n    x->b = x->c + rot64(x->d, 37);\n    x->c = x->d + e;\n    x->d = e + x->a;\n  }\n  else {\n    unsigned e = 0;\n    x->d = 1/e; /* bail */\n  }\n#endif\n  return x->d;\n}\n\nvoid udns_jraninit(struct udns_jranctx *x, unsigned seed) {\n  unsigned i;\n  x->a = 0xf1ea5eed;\n  x->b = x->c = x->d = seed;\n  for (i = 0; i < 20; ++i)\n     (void)udns_jranval(x);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_misc.c",
    "content": "/* udns_misc.c\n   miscellaneous routines\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include \"udns.h\"\n\nint dns_findname(const struct dns_nameval *nv, const char *name) {\n  register const char *a, *b;\n  for(; nv->name; ++nv)\n    for(a = name, b = nv->name; ; ++a, ++b)\n      if (DNS_DNUC(*a) != *b) break;\n      else if (!*a) return nv->val;\n  return -1;\n}\n\nconst char *_dns_format_code(char *buf, const char *prefix, int code) {\n  char *bp = buf;\n  unsigned c, n;\n  do *bp++ = DNS_DNUC(*prefix);\n  while(*++prefix);\n  *bp++ = '#';\n  if (code < 0) code = -code, *bp++ = '-';\n  n = 0; c = code;\n  do ++n;\n  while((c /= 10));\n  c = code;\n  bp[n--] = '\\0';\n  do bp[n--] = c % 10 + '0';\n  while((c /= 10));\n  return buf;\n}\n\nconst char *dns_strerror(int err) {\n  if (err >= 0) return \"successeful completion\";\n  switch(err) {\n  case DNS_E_TEMPFAIL:\treturn \"temporary failure in name resolution\";\n  case DNS_E_PROTOCOL:\treturn \"protocol error\";\n  case DNS_E_NXDOMAIN:\treturn \"domain name does not exist\";\n  case DNS_E_NODATA:\treturn \"valid domain but no data of requested type\";\n  case DNS_E_NOMEM:\treturn \"out of memory\";\n  case DNS_E_BADQUERY:\treturn \"malformed query\";\n  default:\t\treturn \"unknown error\";\n  }\n}\n\nconst char *dns_version(void) {\n  return UDNS_VERSION;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_parse.c",
    "content": "/* udns_parse.c\n   raw DNS packet parsing routines\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include <assert.h>\n#include \"udns.h\"\n\ndnscc_t *dns_skipdn(dnscc_t *cur, dnscc_t *end) {\n  unsigned c;\n  for(;;) {\n    if (cur >= end)\n      return NULL;\n    c = *cur++;\n    if (!c)\n      return cur;\n    if (c & 192)\t\t/* jump */\n      return cur + 1 >= end ? NULL : cur + 1;\n    cur += c;\n  }\n}\n\nint\ndns_getdn(dnscc_t *pkt, dnscc_t **cur, dnscc_t *end,\n          register dnsc_t *dn, unsigned dnsiz) {\n  unsigned c;\n  dnscc_t *pp = *cur;\t\t/* current packet pointer */\n  dnsc_t *dp = dn;\t\t/* current dn pointer */\n  dnsc_t *const de\t\t/* end of the DN dest */\n       = dn + (dnsiz < DNS_MAXDN ? dnsiz : DNS_MAXDN);\n  dnscc_t *jump = NULL;\t\t/* ptr after first jump if any */\n  unsigned loop = 100;\t\t/* jump loop counter */\n\n  for(;;) {\t\t/* loop by labels */\n    if (pp >= end)\t\t/* reached end of packet? */\n      return -1;\n    c = *pp++;\t\t\t/* length of the label */\n    if (!c) {\t\t\t/* empty label: terminate */\n      if (dn >= de)\t\t/* can't fit terminator */\n        goto noroom;\n      *dp++ = 0;\n      /* return next pos: either after the first jump or current */\n      *cur = jump ? jump : pp;\n      return dp - dn;\n    }\n    if (c & 192) {\t\t/* jump */\n      if (pp >= end)\t\t/* eop instead of jump pos */\n        return -1;\n      if (!jump) jump = pp + 1;\t/* remember first jump */\n      else if (!--loop) return -1; /* too many jumps */\n      c = ((c & ~192) << 8) | *pp; /* new pos */\n      if (c < DNS_HSIZE)\t/* don't allow jump into the header */\n        return -1;\n      pp = pkt + c;\n      continue;\n    }\n    if (c > DNS_MAXLABEL)\t/* too long label? */\n      return -1;\n    if (pp + c > end)\t\t/* label does not fit in packet? */\n      return -1;\n    if (dp + c + 1 > de)\t/* if enouth room for the label */\n      goto noroom;\n    *dp++ = c;\t\t\t/* label length */\n    memcpy(dp, pp, c);\t\t/* and the label itself */\n    dp += c;\n    pp += c;\t\t\t/* advance to the next label */\n  }\nnoroom:\n  return dnsiz < DNS_MAXDN ? 0 : -1;\n}\n\nvoid dns_rewind(struct dns_parse *p, dnscc_t *qdn) {\n  p->dnsp_qdn = qdn;\n  p->dnsp_cur = p->dnsp_ans;\n  p->dnsp_rrl = dns_numan(p->dnsp_pkt);\n  p->dnsp_ttl = 0xffffffffu;\n  p->dnsp_nrr = 0;\n}\n\nvoid\ndns_initparse(struct dns_parse *p, dnscc_t *qdn,\n              dnscc_t *pkt, dnscc_t *cur, dnscc_t *end) {\n  p->dnsp_pkt = pkt;\n  p->dnsp_end = end;\n  p->dnsp_rrl = dns_numan(pkt);\n  p->dnsp_qdn = qdn;\n  assert(cur + 4 <= end);\n  if ((p->dnsp_qtyp = dns_get16(cur+0)) == DNS_T_ANY) p->dnsp_qtyp = 0;\n  if ((p->dnsp_qcls = dns_get16(cur+2)) == DNS_C_ANY) p->dnsp_qcls = 0;\n  p->dnsp_cur = p->dnsp_ans = cur + 4;\n  p->dnsp_ttl = 0xffffffffu;\n  p->dnsp_nrr = 0;\n}\n\nint dns_nextrr(struct dns_parse *p, struct dns_rr *rr) {\n  dnscc_t *cur = p->dnsp_cur;\n  while(p->dnsp_rrl > 0) {\n    --p->dnsp_rrl;\n    if (dns_getdn(p->dnsp_pkt, &cur, p->dnsp_end,\n                  rr->dnsrr_dn, sizeof(rr->dnsrr_dn)) <= 0)\n      return -1;\n    if (cur + 10 > p->dnsp_end)\n      return -1;\n    rr->dnsrr_typ = dns_get16(cur);\n    rr->dnsrr_cls = dns_get16(cur+2);\n    rr->dnsrr_ttl = dns_get32(cur+4);\n    rr->dnsrr_dsz = dns_get16(cur+8);\n    rr->dnsrr_dptr = cur = cur + 10;\n    rr->dnsrr_dend = cur = cur + rr->dnsrr_dsz;\n    if (cur > p->dnsp_end)\n      return -1;\n    if (p->dnsp_qdn && !dns_dnequal(p->dnsp_qdn, rr->dnsrr_dn))\n      continue;\n    if ((!p->dnsp_qcls || p->dnsp_qcls == rr->dnsrr_cls) &&\n        (!p->dnsp_qtyp || p->dnsp_qtyp == rr->dnsrr_typ)) {\n      p->dnsp_cur = cur;\n      ++p->dnsp_nrr;\n      if (p->dnsp_ttl > rr->dnsrr_ttl) p->dnsp_ttl = rr->dnsrr_ttl;\n      return 1;\n    }\n    if (p->dnsp_qdn && rr->dnsrr_typ == DNS_T_CNAME && !p->dnsp_nrr) {\n      if (dns_getdn(p->dnsp_pkt, &rr->dnsrr_dptr, p->dnsp_end,\n                    p->dnsp_dnbuf, sizeof(p->dnsp_dnbuf)) <= 0 ||\n          rr->dnsrr_dptr != rr->dnsrr_dend)\n        return -1;\n      p->dnsp_qdn = p->dnsp_dnbuf;\n      if (p->dnsp_ttl > rr->dnsrr_ttl) p->dnsp_ttl = rr->dnsrr_ttl;\n    }\n  }\n  p->dnsp_cur = cur;\n  return 0;\n}\n\nint dns_stdrr_size(const struct dns_parse *p) {\n  return\n    dns_dntop_size(p->dnsp_qdn) +\n    (p->dnsp_qdn == dns_payload(p->dnsp_pkt) ? 0 :\n     dns_dntop_size(dns_payload(p->dnsp_pkt)));\n}\n\nvoid *dns_stdrr_finish(struct dns_rr_null *ret, char *cp,\n                       const struct dns_parse *p) {\n  cp += dns_dntop(p->dnsp_qdn, (ret->dnsn_cname = cp), DNS_MAXNAME);\n  if (p->dnsp_qdn == dns_payload(p->dnsp_pkt))\n    ret->dnsn_qname = ret->dnsn_cname;\n  else\n    dns_dntop(dns_payload(p->dnsp_pkt), (ret->dnsn_qname = cp), DNS_MAXNAME);\n  ret->dnsn_ttl = p->dnsp_ttl;\n  return ret;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_resolver.c",
    "content": "/* udns_resolver.c\n   resolver stuff (main module)\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#ifdef HAVE_CONFIG_H\n# include \"config.h\"\n#endif\n#ifdef __MINGW32__\n# include <winsock2.h>          /* includes <windows.h> */\n# include <ws2tcpip.h>          /* needed for struct in6_addr */\n#else\n# include <sys/types.h>\n# include <sys/socket.h>\n# include <netinet/in.h>\n# include <unistd.h>\n# include <fcntl.h>\n# include <sys/time.h>\n# ifdef HAVE_POLL\n#  include <sys/poll.h>\n# else\n#  ifdef HAVE_SYS_SELECT_H\n#   include <sys/select.h>\n#  endif\n# endif\n# ifdef HAVE_TIMES\n#  include <sys/times.h>\n# endif\n# define closesocket(sock) close(sock)\n#endif\t/* !__MINGW32__ */\n\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <errno.h>\n#include <assert.h>\n#include <stddef.h>\n#include \"udns.h\"\n\n#ifndef EAFNOSUPPORT\n# define EAFNOSUPPORT EINVAL\n#endif\n#ifndef MSG_DONTWAIT\n# define MSG_DONTWAIT 0\n#endif\n\nstruct dns_qlist {\n  struct dns_query *head, *tail;\n};\n\nstruct dns_query {\n  struct dns_query *dnsq_next;          /* double-linked list */\n  struct dns_query *dnsq_prev;\n  unsigned dnsq_origdnl0;\t\t/* original query DN len w/o last 0 */\n  unsigned dnsq_flags;\t\t\t/* control flags for this query */\n  unsigned dnsq_servi;\t\t\t/* index of next server to try */\n  unsigned dnsq_servwait;\t\t/* bitmask: servers left to wait */\n  unsigned dnsq_servskip;\t\t/* bitmask: servers to skip */\n  unsigned dnsq_servnEDNS0;\t\t/* bitmask: servers refusing EDNS0 */\n  unsigned dnsq_try;\t\t\t/* number of tries made so far */\n  dnscc_t *dnsq_nxtsrch;\t\t/* next search pointer @dnsc_srchbuf */\n  time_t dnsq_deadline;\t\t\t/* when current try will expire */\n  dns_parse_fn *dnsq_parse;\t\t/* parse: raw => application */\n  dns_query_fn *dnsq_cbck;\t\t/* the callback to call when done */\n  void *dnsq_cbdata;\t\t\t/* user data for the callback */\n#ifndef NDEBUG\n  struct dns_ctx *dnsq_ctx;\t\t/* the resolver context */\n#endif\n  /* char fields at the end to avoid padding */\n  dnsc_t dnsq_id[2];\t\t\t/* query ID */\n  dnsc_t dnsq_typcls[4];\t\t/* requested RR type+class */\n  dnsc_t dnsq_dn[DNS_MAXDN+DNS_DNPAD];\t/* the query DN +alignment */\n};\n\n/* working with dns_query lists */\n\nstatic __inline void qlist_init(struct dns_qlist *list) {\n  list->head = list->tail = NULL;\n}\n\nstatic __inline void qlist_remove(struct dns_qlist *list, struct dns_query *q) {\n   if (q->dnsq_prev) q->dnsq_prev->dnsq_next = q->dnsq_next;\n   else list->head = q->dnsq_next;\n   if (q->dnsq_next) q->dnsq_next->dnsq_prev = q->dnsq_prev;\n   else list->tail = q->dnsq_prev;\n}\n\nstatic __inline void\nqlist_add_head(struct dns_qlist *list, struct dns_query *q) {\n  q->dnsq_next = list->head;\n  if (list->head) list->head->dnsq_prev = q;\n  else list->tail = q;\n  list->head = q;\n  q->dnsq_prev = NULL;\n}\n\nstatic __inline void\nqlist_insert_after(struct dns_qlist *list,\n                   struct dns_query *q, struct dns_query *prev) {\n  if ((q->dnsq_prev = prev) != NULL) {\n    if ((q->dnsq_next = prev->dnsq_next) != NULL)\n      q->dnsq_next->dnsq_prev = q;\n    else\n      list->tail = q;\n    prev->dnsq_next = q;\n  }\n  else\n    qlist_add_head(list, q);\n}\n\nstruct sockaddr_ns {\n  union {\n    struct sockaddr sa;\n    struct sockaddr_in sin;\n#ifdef HAVE_IPv6\n    struct sockaddr_in6 sin6;\n#endif\n  };\n};\n\n#define sin_eq(a,b) \\\n\t((a).sin_port == (b).sin_port && \\\n\t (a).sin_addr.s_addr == (b).sin_addr.s_addr)\n#define sin6_eq(a,b) \\\n\t((a).sin6_port == (b).sin6_port && \\\n\t memcmp(&(a).sin6_addr, &(b).sin6_addr, sizeof(struct in6_addr)) == 0)\n\nstruct dns_ctx {\t\t/* resolver context */\n  /* settings */\n  unsigned dnsc_flags;\t\t\t/* various flags */\n  unsigned dnsc_timeout;\t\t/* timeout (base value) for queries */\n  unsigned dnsc_ntries;\t\t\t/* number of retries */\n  unsigned dnsc_ndots;\t\t\t/* ndots to assume absolute name */\n  unsigned dnsc_port;\t\t\t/* default port (DNS_PORT) */\n  unsigned dnsc_udpbuf;\t\t\t/* size of UDP buffer */\n  /* array of nameserver addresses */\n  struct sockaddr_ns dnsc_serv[DNS_MAXSERV];\n  unsigned dnsc_nserv;\t\t\t/* number of nameservers */\n  unsigned dnsc_salen;\t\t\t/* length of socket addresses */\n  dnsc_t dnsc_srchbuf[1024];\t\t/* buffer for searchlist */\n  dnsc_t *dnsc_srchend;\t\t\t/* current end of srchbuf */\n\n  dns_utm_fn *dnsc_utmfn;\t\t/* register/cancel timer events */\n  void *dnsc_utmctx;\t\t\t/* user timer context for utmfn() */\n  time_t dnsc_utmexp;\t\t\t/* when user timer expires */\n\n  dns_dbgfn *dnsc_udbgfn;\t\t/* debugging function */\n\n  /* dynamic data */\n  struct udns_jranctx dnsc_jran;\t/* random number generator state */\n  unsigned dnsc_nextid;\t\t\t/* next queue ID to use if !0 */\n  int dnsc_udpsock;\t\t\t/* UDP socket */\n  struct dns_qlist dnsc_qactive;\t/* active list sorted by deadline */\n  int dnsc_nactive;\t\t\t/* number entries in dnsc_qactive */\n  dnsc_t *dnsc_pbuf;\t\t\t/* packet buffer (udpbuf size) */\n  int dnsc_qstatus;\t\t\t/* last query status value */\n};\n\nstatic const struct {\n  const char *name;\n  enum dns_opt opt;\n  unsigned offset;\n  unsigned min, max;\n} dns_opts[] = {\n#define opt(name,opt,field,min,max) \\\n\t{name,opt,offsetof(struct dns_ctx,field),min,max}\n  opt(\"retrans\", DNS_OPT_TIMEOUT, dnsc_timeout, 1,300),\n  opt(\"timeout\", DNS_OPT_TIMEOUT, dnsc_timeout, 1,300),\n  opt(\"retry\",    DNS_OPT_NTRIES, dnsc_ntries, 1,50),\n  opt(\"attempts\", DNS_OPT_NTRIES, dnsc_ntries, 1,50),\n  opt(\"ndots\", DNS_OPT_NDOTS, dnsc_ndots, 0,1000),\n  opt(\"port\", DNS_OPT_PORT, dnsc_port, 1,0xffff),\n  opt(\"udpbuf\", DNS_OPT_UDPSIZE, dnsc_udpbuf, DNS_MAXPACKET,65536),\n#undef opt\n};\n#define dns_ctxopt(ctx,idx) (*((unsigned*)(((char*)ctx)+dns_opts[idx].offset)))\n\n#define ISSPACE(x) (x == ' ' || x == '\\t' || x == '\\r' || x == '\\n')\n\nstruct dns_ctx dns_defctx;\n\n#define SETCTX(ctx) if (!ctx) ctx = &dns_defctx\n#define SETCTXINITED(ctx) SETCTX(ctx); assert(CTXINITED(ctx))\n#define CTXINITED(ctx) (ctx->dnsc_flags & DNS_INITED)\n#define SETCTXFRESH(ctx) SETCTXINITED(ctx); assert(!CTXOPEN(ctx))\n#define SETCTXINACTIVE(ctx) \\\n\t\tSETCTXINITED(ctx); assert(!ctx->dnsc_nactive)\n#define SETCTXOPEN(ctx) SETCTXINITED(ctx); assert(CTXOPEN(ctx))\n#define CTXOPEN(ctx) (ctx->dnsc_udpsock >= 0)\n\n#if defined(NDEBUG) || !defined(DEBUG)\n#define dns_assert_ctx(ctx)\n#else\nstatic void dns_assert_ctx(const struct dns_ctx *ctx) {\n  int nactive = 0;\n  const struct dns_query *q;\n  for(q = ctx->dnsc_qactive.head; q; q = q->dnsq_next) {\n    assert(q->dnsq_ctx == ctx);\n    assert(q == (q->dnsq_next ?\n                 q->dnsq_next->dnsq_prev : ctx->dnsc_qactive.tail));\n    assert(q == (q->dnsq_prev ?\n                 q->dnsq_prev->dnsq_next : ctx->dnsc_qactive.head));\n    ++nactive;\n  }\n  assert(nactive == ctx->dnsc_nactive);\n}\n#endif\n\nenum {\n  DNS_INTERNAL\t\t= 0xffff, /* internal flags mask */\n  DNS_INITED\t\t= 0x0001, /* the context is initialized */\n  DNS_ASIS_DONE\t\t= 0x0002, /* search: skip the last as-is query */\n  DNS_SEEN_NODATA\t= 0x0004, /* search: NODATA has been received */\n};\n\nint dns_add_serv(struct dns_ctx *ctx, const char *serv) {\n  struct sockaddr_ns *sns;\n  SETCTXFRESH(ctx);\n  if (!serv)\n    return (ctx->dnsc_nserv = 0);\n  if (ctx->dnsc_nserv >= DNS_MAXSERV)\n    return errno = ENFILE, -1;\n  sns = &ctx->dnsc_serv[ctx->dnsc_nserv];\n  memset(sns, 0, sizeof(*sns));\n  if (dns_pton(AF_INET, serv, &sns->sin.sin_addr) > 0) {\n    sns->sin.sin_family = AF_INET;\n    return ++ctx->dnsc_nserv;\n  }\n#ifdef HAVE_IPv6\n  if (dns_pton(AF_INET6, serv, &sns->sin6.sin6_addr) > 0) {\n    sns->sin6.sin6_family = AF_INET6;\n    return ++ctx->dnsc_nserv;\n  }\n#endif\n  errno = EINVAL;\n  return -1;\n}\n\nint dns_add_serv_s(struct dns_ctx *ctx, const struct sockaddr *sa) {\n  SETCTXFRESH(ctx);\n  if (!sa)\n    return (ctx->dnsc_nserv = 0);\n  if (ctx->dnsc_nserv >= DNS_MAXSERV)\n    return errno = ENFILE, -1;\n#ifdef HAVE_IPv6\n  else if (sa->sa_family == AF_INET6)\n    ctx->dnsc_serv[ctx->dnsc_nserv].sin6 = *(struct sockaddr_in6*)sa;\n#endif\n  else if (sa->sa_family == AF_INET)\n    ctx->dnsc_serv[ctx->dnsc_nserv].sin = *(struct sockaddr_in*)sa;\n  else\n    return errno = EAFNOSUPPORT, -1;\n  return ++ctx->dnsc_nserv;\n}\n\nint dns_set_opts(struct dns_ctx *ctx, const char *opts) {\n  unsigned i, v;\n  int err = 0;\n  SETCTXINACTIVE(ctx);\n  for(;;) {\n    while(ISSPACE(*opts)) ++opts;\n    if (!*opts) break;\n    for(i = 0; ; ++i) {\n      if (i >= sizeof(dns_opts)/sizeof(dns_opts[0])) { ++err; break; }\n      v = strlen(dns_opts[i].name);\n      if (strncmp(dns_opts[i].name, opts, v) != 0 ||\n          (opts[v] != ':' && opts[v] != '='))\n        continue;\n      opts += v + 1;\n      v = 0;\n      if (*opts < '0' || *opts > '9') { ++err; break; }\n      do v = v * 10 + (*opts++ - '0');\n      while (*opts >= '0' && *opts <= '9');\n      if (v < dns_opts[i].min) v = dns_opts[i].min;\n      if (v > dns_opts[i].max) v = dns_opts[i].max;\n      dns_ctxopt(ctx, i) = v;\n      break;\n    }\n    while(*opts && !ISSPACE(*opts)) ++opts;\n  }\n  return err;\n}\n\nint dns_set_opt(struct dns_ctx *ctx, enum dns_opt opt, int val) {\n  int prev;\n  unsigned i;\n  SETCTXINACTIVE(ctx);\n  for(i = 0; i < sizeof(dns_opts)/sizeof(dns_opts[0]); ++i) {\n    if (dns_opts[i].opt != opt) continue;\n    prev = dns_ctxopt(ctx, i);\n    if (val >= 0) {\n      unsigned v = val;\n      if (v < dns_opts[i].min || v > dns_opts[i].max) {\n        errno = EINVAL;\n        return -1;\n      }\n      dns_ctxopt(ctx, i) = v;\n    }\n    return prev;\n  }\n  if (opt == DNS_OPT_FLAGS) {\n    prev = ctx->dnsc_flags & ~DNS_INTERNAL;\n    if (val >= 0)\n      ctx->dnsc_flags =\n        (ctx->dnsc_flags & DNS_INTERNAL) | (val & ~DNS_INTERNAL);\n    return prev;\n  }\n  errno = ENOSYS;\n  return -1;\n}\n\nint dns_add_srch(struct dns_ctx *ctx, const char *srch) {\n  int dnl;\n  SETCTXINACTIVE(ctx);\n  if (!srch) {\n    memset(ctx->dnsc_srchbuf, 0, sizeof(ctx->dnsc_srchbuf));\n    ctx->dnsc_srchend = ctx->dnsc_srchbuf;\n    return 0;\n  }\n  dnl =\n    sizeof(ctx->dnsc_srchbuf) - (ctx->dnsc_srchend - ctx->dnsc_srchbuf) - 1;\n  dnl = dns_sptodn(srch, ctx->dnsc_srchend, dnl);\n  if (dnl > 0)\n    ctx->dnsc_srchend += dnl;\n  ctx->dnsc_srchend[0] = '\\0';\t/* we ensure the list is always ends at . */\n  if (dnl > 0)\n    return 0;\n  errno = EINVAL;\n  return -1;\n}\n\nstatic void dns_drop_utm(struct dns_ctx *ctx) {\n  if (ctx->dnsc_utmfn)\n    ctx->dnsc_utmfn(NULL, -1, ctx->dnsc_utmctx);\n  ctx->dnsc_utmctx = NULL;\n  ctx->dnsc_utmexp = -1;\n}\n\nstatic void\n_dns_request_utm(struct dns_ctx *ctx, time_t now) {\n  struct dns_query *q;\n  time_t deadline;\n  int timeout;\n  q = ctx->dnsc_qactive.head;\n  if (!q)\n    deadline = -1, timeout = -1;\n  else if (!now || q->dnsq_deadline <= now)\n    deadline = 0, timeout = 0;\n  else\n    deadline = q->dnsq_deadline, timeout = (int)(deadline - now);\n  if (ctx->dnsc_utmexp == deadline)\n    return;\n  ctx->dnsc_utmfn(ctx, timeout, ctx->dnsc_utmctx);\n  ctx->dnsc_utmexp = deadline;\n}\n\nstatic __inline void\ndns_request_utm(struct dns_ctx *ctx, time_t now) {\n  if (ctx->dnsc_utmfn)\n    _dns_request_utm(ctx, now);\n}\n\nvoid dns_set_dbgfn(struct dns_ctx *ctx, dns_dbgfn *dbgfn) {\n  SETCTXINITED(ctx);\n  ctx->dnsc_udbgfn = dbgfn;\n}\n\nvoid\ndns_set_tmcbck(struct dns_ctx *ctx, dns_utm_fn *fn, void *data) {\n  SETCTXINITED(ctx);\n  dns_drop_utm(ctx);\n  ctx->dnsc_utmfn = fn;\n  ctx->dnsc_utmctx = data;\n  if (CTXOPEN(ctx))\n    dns_request_utm(ctx, 0);\n}\n\nstatic unsigned dns_nonrandom_32(void) {\n#ifdef __MINGW32__\n  FILETIME ft;\n  GetSystemTimeAsFileTime(&ft);\n  return ft.dwLowDateTime;\n#else\n  struct timeval tv;\n  gettimeofday(&tv, NULL);\n  return tv.tv_usec;\n#endif\n}\n\n/* This is historic deprecated API */\nUDNS_API unsigned dns_random16(void);\nunsigned dns_random16(void) {\n  unsigned x = dns_nonrandom_32();\n  return (x ^ (x >> 16)) & 0xffff;\n}\n\nstatic void dns_init_rng(struct dns_ctx *ctx) {\n  udns_jraninit(&ctx->dnsc_jran, dns_nonrandom_32());\n  ctx->dnsc_nextid = 0;\n}\n\nvoid dns_close(struct dns_ctx *ctx) {\n  struct dns_query *q, *p;\n  SETCTX(ctx);\n  if (CTXINITED(ctx)) {\n    if (ctx->dnsc_udpsock >= 0)\n      closesocket(ctx->dnsc_udpsock);\n    ctx->dnsc_udpsock = -1;\n    if (ctx->dnsc_pbuf)\n      free(ctx->dnsc_pbuf);\n    ctx->dnsc_pbuf = NULL;\n    q = ctx->dnsc_qactive.head;\n    while((p = q) != NULL) {\n      q = q->dnsq_next;\n      free(p);\n    }\n    qlist_init(&ctx->dnsc_qactive);\n    ctx->dnsc_nactive = 0;\n    dns_drop_utm(ctx);\n  }\n}\n\nvoid dns_reset(struct dns_ctx *ctx) {\n  SETCTX(ctx);\n  dns_close(ctx);\n  memset(ctx, 0, sizeof(*ctx));\n  ctx->dnsc_timeout = 4;\n  ctx->dnsc_ntries = 3;\n  ctx->dnsc_ndots = 1;\n  ctx->dnsc_udpbuf = DNS_EDNS0PACKET;\n  ctx->dnsc_port = DNS_PORT;\n  ctx->dnsc_udpsock = -1;\n  ctx->dnsc_srchend = ctx->dnsc_srchbuf;\n  qlist_init(&ctx->dnsc_qactive);\n  dns_init_rng(ctx);\n  ctx->dnsc_flags = DNS_INITED;\n}\n\nstruct dns_ctx *dns_new(const struct dns_ctx *copy) {\n  struct dns_ctx *ctx;\n  SETCTXINITED(copy);\n  dns_assert_ctx(copy);\n  ctx = malloc(sizeof(*ctx));\n  if (!ctx)\n    return NULL;\n  *ctx = *copy;\n  ctx->dnsc_udpsock = -1;\n  qlist_init(&ctx->dnsc_qactive);\n  ctx->dnsc_nactive = 0;\n  ctx->dnsc_pbuf = NULL;\n  ctx->dnsc_qstatus = 0;\n  ctx->dnsc_srchend = ctx->dnsc_srchbuf +\n    (copy->dnsc_srchend - copy->dnsc_srchbuf);\n  ctx->dnsc_utmfn = NULL;\n  ctx->dnsc_utmctx = NULL;\n  dns_init_rng(ctx);\n  return ctx;\n}\n\nvoid dns_free(struct dns_ctx *ctx) {\n  assert(ctx != NULL && ctx != &dns_defctx);\n  dns_reset(ctx);\n  free(ctx);\n}\n\nint dns_open(struct dns_ctx *ctx) {\n  int sock;\n  unsigned i;\n  int port;\n  struct sockaddr_ns *sns;\n#ifdef HAVE_IPv6\n  unsigned have_inet6 = 0;\n#endif\n\n  SETCTXINITED(ctx);\n  assert(!CTXOPEN(ctx));\n\n  port = htons((unsigned short)ctx->dnsc_port);\n  /* ensure we have at least one server */\n  if (!ctx->dnsc_nserv) {\n    sns = ctx->dnsc_serv;\n    sns->sin.sin_family = AF_INET;\n    sns->sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);\n    ctx->dnsc_nserv = 1;\n  }\n\n  for (i = 0; i < ctx->dnsc_nserv; ++i) {\n    sns = &ctx->dnsc_serv[i];\n    /* set port for each sockaddr */\n#ifdef HAVE_IPv6\n    if (sns->sa.sa_family == AF_INET6) {\n      if (!sns->sin6.sin6_port) sns->sin6.sin6_port = (unsigned short)port;\n      ++have_inet6;\n    }\n    else\n#endif\n    {\n      assert(sns->sa.sa_family == AF_INET);\n      if (!sns->sin.sin_port) sns->sin.sin_port = (unsigned short)port;\n    }\n  }\n\n#ifdef HAVE_IPv6\n  if (have_inet6 && have_inet6 < ctx->dnsc_nserv) {\n    /* convert all IPv4 addresses to IPv6 V4MAPPED */\n    struct sockaddr_in6 sin6;\n    memset(&sin6, 0, sizeof(sin6));\n    sin6.sin6_family = AF_INET6;\n    /* V4MAPPED: ::ffff:1.2.3.4 */\n    sin6.sin6_addr.s6_addr[10] = 0xff;\n    sin6.sin6_addr.s6_addr[11] = 0xff;\n    for(i = 0; i < ctx->dnsc_nserv; ++i) {\n      sns = &ctx->dnsc_serv[i];\n      if (sns->sa.sa_family == AF_INET) {\n        sin6.sin6_port = sns->sin.sin_port;\n        memcpy(sin6.sin6_addr.s6_addr + 4*3, &sns->sin.sin_addr, 4);\n        sns->sin6 = sin6;\n      }\n    }\n  }\n\n  ctx->dnsc_salen = have_inet6 ?\n    sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);\n\n  if (have_inet6)\n    sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP);\n  else\n    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);\n#else /* !HAVE_IPv6 */\n  sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);\n  ctx->dnsc_salen = sizeof(struct sockaddr_in);\n#endif /* HAVE_IPv6 */\n\n  if (sock < 0) {\n    ctx->dnsc_qstatus = DNS_E_TEMPFAIL;\n    return -1;\n  }\n#ifdef __MINGW32__\n  { unsigned long on = 1;\n    if (ioctlsocket(sock, FIONBIO, &on) == SOCKET_ERROR) {\n      closesocket(sock);\n      ctx->dnsc_qstatus = DNS_E_TEMPFAIL;\n      return -1;\n    }\n  }\n#else\t/* !__MINGW32__ */\n  if (fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) | O_NONBLOCK) < 0 ||\n      fcntl(sock, F_SETFD, FD_CLOEXEC) < 0) {\n    closesocket(sock);\n    ctx->dnsc_qstatus = DNS_E_TEMPFAIL;\n    return -1;\n  }\n#endif\t/* __MINGW32__ */\n  /* allocate the packet buffer */\n  if ((ctx->dnsc_pbuf = malloc(ctx->dnsc_udpbuf)) == NULL) {\n    closesocket(sock);\n    ctx->dnsc_qstatus = DNS_E_NOMEM;\n    errno = ENOMEM;\n    return -1;\n  }\n\n  ctx->dnsc_udpsock = sock;\n  dns_request_utm(ctx, 0);\n  return sock;\n}\n\nint dns_sock(const struct dns_ctx *ctx) {\n  SETCTXINITED(ctx);\n  return ctx->dnsc_udpsock;\n}\n\nint dns_active(const struct dns_ctx *ctx) {\n  SETCTXINITED(ctx);\n  dns_assert_ctx(ctx);\n  return ctx->dnsc_nactive;\n}\n\nint dns_status(const struct dns_ctx *ctx) {\n  SETCTX(ctx);\n  return ctx->dnsc_qstatus;\n}\nvoid dns_setstatus(struct dns_ctx *ctx, int status) {\n  SETCTX(ctx);\n  ctx->dnsc_qstatus = status;\n}\n\n/* End the query: disconnect it from the active list, free it,\n * and return the result to the caller.\n */\nstatic void\ndns_end_query(struct dns_ctx *ctx, struct dns_query *q,\n              int status, void *result) {\n  dns_query_fn *cbck = q->dnsq_cbck;\n  void *cbdata = q->dnsq_cbdata;\n  ctx->dnsc_qstatus = status;\n  assert((status < 0 && result == 0) || (status >= 0 && result != 0));\n  assert(cbck != 0);\t/*XXX callback may be NULL */\n  assert(ctx->dnsc_nactive > 0);\n  --ctx->dnsc_nactive;\n  qlist_remove(&ctx->dnsc_qactive, q);\n  /* force the query to be unconnected */\n  /*memset(q, 0, sizeof(*q));*/\n#ifndef NDEBUG\n  q->dnsq_ctx = NULL;\n#endif\n  free(q);\n  cbck(ctx, result, cbdata);\n}\n\n#define DNS_DBG(ctx, code, sa, slen, pkt, plen) \\\n  do { \\\n    if (ctx->dnsc_udbgfn) \\\n      ctx->dnsc_udbgfn(code, (sa), slen, pkt, plen, 0, 0); \\\n  } while(0)\n#define DNS_DBGQ(ctx, q, code, sa, slen, pkt, plen) \\\n  do { \\\n    if (ctx->dnsc_udbgfn) \\\n      ctx->dnsc_udbgfn(code, (sa), slen, pkt, plen, q, q->dnsq_cbdata); \\\n  } while(0)\n\nstatic void dns_newid(struct dns_ctx *ctx, struct dns_query *q) {\n  /* this is how we choose an identifier for a new query (qID).\n   * For now, it's just sequential number, incremented for every query, and\n   * thus obviously trivial to guess.\n   * There are two choices:\n   *  a) use sequential numbers.  It is plain insecure. In DNS, there are two\n   *   places where random numbers are (or can) be used to increase security:\n   *   random qID and random source port number.  Without this randomness\n   *   (udns uses fixed port for all queries), or when the randomness is weak,\n   *   it's trivial to spoof query replies.  With randomness however, it\n   *   becomes a bit more difficult task.  Too bad we only have 16 bits for\n   *   our security, as qID is only two bytes.  It isn't a security per se,\n   *   to rely on those 16 bits - an attacker can just flood us with fake\n   *   replies with all possible qIDs (only 65536 of them), and in this case,\n   *   even if we'll use true random qIDs, we'll be in trouble (not protected\n   *   against spoofing).  Yes, this is only possible on a high-speed network\n   *   (probably on the LAN only, since usually a border router for a LAN\n   *   protects internal machines from packets with spoofed local addresses\n   *   from outside, and usually a nameserver resides on LAN), but it's\n   *   still very well possible to send us fake replies.\n   *   In other words: there's nothing a DNS (stub) resolver can do against\n   *   spoofing attacks, unless DNSSEC is in use, which helps here alot.\n   *   Too bad that DNSSEC isn't widespread, so relying on it isn't an\n   *   option in almost all cases...\n   *  b) use random qID, based on some random-number generation mechanism.\n   *   This way, we increase our protection a bit (see above - it's very weak\n   *   still), but we also increase risk of qID reuse and matching late replies\n   *   that comes to queries we've sent before against new queries.  There are\n   *   some more corner cases around that, as well - for example, normally,\n   *   udns tries to find the query for a given reply by qID, *and* by\n   *   verifying that the query DN and other parameters are also the same\n   *   (so if the new query is against another domain name, old reply will\n   *   be ignored automatically).  But certain types of replies which we now\n   *   handle - for example, FORMERR reply from servers which refuses to\n   *   process EDNS0-enabled packets - comes without all the query parameters\n   *   but the qID - so we're forced to use qID only when determining which\n   *   query the given reply corresponds to.  This makes us even more\n   *   vulnerable to spoofing attacks, because an attacker don't even need to\n   *   know which queries we perform to spoof the replies - he only needs to\n   *   flood us with fake FORMERR \"replies\".\n   *\n   * That all to say: using sequential (or any other trivially guessable)\n   * numbers for qIDs is insecure, but the whole thing is inherently insecure\n   * as well, and this \"extra weakness\" that comes from weak qID choosing\n   * algorithm adds almost nothing to the underlying problem.\n   *\n   * It CAN NOT be made secure.  Period.  That's it.\n   * Unless we choose to implement DNSSEC, which is a whole different story.\n   * Forcing TCP mode makes it better, but who uses TCP for DNS anyway?\n   * (and it's hardly possible because of huge impact on the recursive\n   * nameservers).\n   *\n   * Note that ALL stub resolvers (again, unless they implement and enforce\n   * DNSSEC) suffers from this same problem.\n   *\n   * Here, I use a pseudo-random number generator for qIDs, instead of a\n   * simpler sequential IDs.  This is _not_ more secure than sequential\n   * ID, but some found random IDs more enjoyeable for some reason.  So\n   * here it goes.\n   */\n\n  /* Use random number and check if it's unique.\n   * If it's not, try again up to 5 times.\n   */\n  unsigned loop;\n  dnsc_t c0, c1;\n  for(loop = 0; loop < 5; ++loop) {\n    const struct dns_query *c;\n    if (!ctx->dnsc_nextid)\n      ctx->dnsc_nextid = udns_jranval(&ctx->dnsc_jran);\n    c0 = ctx->dnsc_nextid & 0xff;\n    c1 = (ctx->dnsc_nextid >> 8) & 0xff;\n    ctx->dnsc_nextid >>= 16;\n    for(c = ctx->dnsc_qactive.head; c; c = c->dnsq_next)\n      if (c->dnsq_id[0] == c0 && c->dnsq_id[1] == c1)\n        break; /* found such entry, try again */\n    if (!c)\n      break;\n  }\n  q->dnsq_id[0] = c0; q->dnsq_id[1] = c1;\n\n  /* reset all parameters relevant for previous query lifetime */\n  q->dnsq_try = 0;\n  q->dnsq_servi = 0;\n  /*XXX probably should keep dnsq_servnEDNS0 bits?\n   * See also comments in dns_ioevent() about FORMERR case */\n  q->dnsq_servwait = q->dnsq_servskip = q->dnsq_servnEDNS0 = 0;\n}\n\n/* Find next search suffix and fills in q->dnsq_dn.\n * Return 0 if no more to try. */\nstatic int dns_next_srch(struct dns_ctx *ctx, struct dns_query *q) {\n  unsigned dnl;\n\n  for(;;) {\n    if (q->dnsq_nxtsrch > ctx->dnsc_srchend)\n      return 0;\n    dnl = dns_dnlen(q->dnsq_nxtsrch);\n    if (dnl + q->dnsq_origdnl0 <= DNS_MAXDN &&\n        (*q->dnsq_nxtsrch || !(q->dnsq_flags & DNS_ASIS_DONE)))\n      break;\n    q->dnsq_nxtsrch += dnl;\n  }\n  memcpy(q->dnsq_dn + q->dnsq_origdnl0, q->dnsq_nxtsrch, dnl);\n  if (!*q->dnsq_nxtsrch)\n    q->dnsq_flags |= DNS_ASIS_DONE;\n  q->dnsq_nxtsrch += dnl;\n  dns_newid(ctx, q); /* new ID for new qDN */\n  return 1;\n}\n\n/* find the server to try for current iteration.\n * Note that current dnsq_servi may point to a server we should skip --\n * in that case advance to the next server.\n * Return true if found, false if all tried.\n */\nstatic int dns_find_serv(const struct dns_ctx *ctx, struct dns_query *q) {\n  while(q->dnsq_servi < ctx->dnsc_nserv) {\n    if (!(q->dnsq_servskip & (1 << q->dnsq_servi)))\n      return 1;\n    ++q->dnsq_servi;\n  }\n  return 0;\n}\n\n/* format and send the query to a given server.\n * In case of network problem (sendto() fails), return -1,\n * else return 0.\n */\nstatic int\ndns_send_this(struct dns_ctx *ctx, struct dns_query *q,\n              unsigned servi, time_t now) {\n  unsigned qlen;\n  unsigned tries;\n\n  { /* format the query buffer */\n    dnsc_t *p = ctx->dnsc_pbuf;\n    memset(p, 0, DNS_HSIZE);\n    if (!(q->dnsq_flags & DNS_NORD)) p[DNS_H_F1] |= DNS_HF1_RD;\n    if (q->dnsq_flags & DNS_AAONLY) p[DNS_H_F1] |= DNS_HF1_AA;\n    if (q->dnsq_flags & DNS_SET_CD) p[DNS_H_F2] |= DNS_HF2_CD;\n    p[DNS_H_QDCNT2] = 1;\n    memcpy(p + DNS_H_QID, q->dnsq_id, 2);\n    p = dns_payload(p);\n    /* copy query dn */\n    p += dns_dntodn(q->dnsq_dn, p, DNS_MAXDN);\n    /* query type and class */\n    memcpy(p, q->dnsq_typcls, 4); p += 4;\n    /* add EDNS0 record. DO flag requires it */\n    if (q->dnsq_flags & DNS_SET_DO ||\n        (ctx->dnsc_udpbuf > DNS_MAXPACKET &&\n         !(q->dnsq_servnEDNS0 & (1 << servi)))) {\n      *p++ = 0;\t\t\t/* empty (root) DN */\n      p = dns_put16(p, DNS_T_OPT);\n      p = dns_put16(p, ctx->dnsc_udpbuf);\n      /* EDNS0 RCODE & VERSION; rest of the TTL field; RDLEN */\n      memset(p, 0, 2+2+2);\n      if (q->dnsq_flags & DNS_SET_DO) p[2] |= DNS_EF1_DO;\n      p += 2+2+2;\n      ctx->dnsc_pbuf[DNS_H_ARCNT2] = 1;\n    }\n    qlen = p - ctx->dnsc_pbuf;\n    assert(qlen <= ctx->dnsc_udpbuf);\n  }\n\n  /* send the query */\n  tries = 10;\n  while (sendto(ctx->dnsc_udpsock, (void*)ctx->dnsc_pbuf, qlen, 0,\n                &ctx->dnsc_serv[servi].sa, ctx->dnsc_salen) < 0) {\n    /*XXX just ignore the sendto() error for now and try again.\n     * In the future, it may be possible to retrieve the error code\n     * and find which operation/query failed.\n     *XXX try the next server too? (if ENETUNREACH is returned immediately)\n     */\n    if (--tries) continue;\n    /* if we can't send the query, fail it. */\n    dns_end_query(ctx, q, DNS_E_TEMPFAIL, 0);\n    return -1;\n  }\n  DNS_DBGQ(ctx, q, 1,\n           &ctx->dnsc_serv[servi].sa, sizeof(struct sockaddr_ns),\n           ctx->dnsc_pbuf, qlen);\n  q->dnsq_servwait |= 1 << servi;\t/* expect reply from this ns */\n\n  q->dnsq_deadline = now +\n    (dns_find_serv(ctx, q) ? 1 : ctx->dnsc_timeout << q->dnsq_try);\n\n  /* move the query to the proper place, according to the new deadline */\n  qlist_remove(&ctx->dnsc_qactive, q);\n  { /* insert from the tail */\n    struct dns_query *p;\n    for(p = ctx->dnsc_qactive.tail; p; p = p->dnsq_prev)\n      if (p->dnsq_deadline <= q->dnsq_deadline)\n\tbreak;\n    qlist_insert_after(&ctx->dnsc_qactive, q, p);\n  }\n\n  return 0;\n}\n\n/* send the query out using next available server\n * and add it to the active list, or, if no servers available,\n * end it.\n */\nstatic void\ndns_send(struct dns_ctx *ctx, struct dns_query *q, time_t now) {\n\n  /* if we can't send the query, return TEMPFAIL even when searching:\n   * we can't be sure whenever the name we tried to search exists or not,\n   * so don't continue searching, or we may find the wrong name. */\n\n  if (!dns_find_serv(ctx, q)) {\n    /* no more servers in this iteration.  Try the next cycle */\n    q->dnsq_servi = 0;\t/* reset */\n    q->dnsq_try++;\t/* next try */\n    if (q->dnsq_try >= ctx->dnsc_ntries ||\n        !dns_find_serv(ctx, q)) {\n      /* no more servers and tries, fail the query */\n      /* return TEMPFAIL even when searching: no more tries for this\n       * searchlist, and no single definitive reply (handled in dns_ioevent()\n       * in NOERROR or NXDOMAIN cases) => all nameservers failed to process\n       * current search list element, so we don't know whenever the name exists.\n       */\n      dns_end_query(ctx, q, DNS_E_TEMPFAIL, 0);\n      return;\n    }\n  }\n\n  dns_send_this(ctx, q, q->dnsq_servi++, now);\n}\n\nstatic void dns_dummy_cb(struct dns_ctx *ctx, void *result, void *data) {\n  if (result) free(result);\n  data = ctx = 0;\t/* used */\n}\n\n/* The (only, main, real) query submission routine.\n * Allocate new query structure, initialize it, check validity of\n * parameters, and add it to the head of the active list, without\n * trying to send it (to be picked up on next event).\n * Error return (without calling the callback routine) -\n *  no memory or wrong parameters.\n *XXX The `no memory' case probably should go to the callback anyway...\n */\nstruct dns_query *\ndns_submit_dn(struct dns_ctx *ctx,\n              dnscc_t *dn, int qcls, int qtyp, int flags,\n              dns_parse_fn *parse, dns_query_fn *cbck, void *data) {\n  struct dns_query *q;\n  SETCTXOPEN(ctx);\n  dns_assert_ctx(ctx);\n\n  q = calloc(sizeof(*q), 1);\n  if (!q) {\n    ctx->dnsc_qstatus = DNS_E_NOMEM;\n    return NULL;\n  }\n\n#ifndef NDEBUG\n  q->dnsq_ctx = ctx;\n#endif\n  q->dnsq_parse = parse;\n  q->dnsq_cbck = cbck ? cbck : dns_dummy_cb;\n  q->dnsq_cbdata = data;\n\n  q->dnsq_origdnl0 = dns_dntodn(dn, q->dnsq_dn, sizeof(q->dnsq_dn));\n  assert(q->dnsq_origdnl0 > 0);\n  --q->dnsq_origdnl0;\t\t/* w/o the trailing 0 */\n  dns_put16(q->dnsq_typcls+0, qtyp);\n  dns_put16(q->dnsq_typcls+2, qcls);\n  q->dnsq_flags = (flags | ctx->dnsc_flags) & ~DNS_INTERNAL;\n\n  if (flags & DNS_NOSRCH ||\n      dns_dnlabels(q->dnsq_dn) > ctx->dnsc_ndots) {\n    q->dnsq_nxtsrch = flags & DNS_NOSRCH ?\n      ctx->dnsc_srchend /* end of the search list if no search requested */ :\n      ctx->dnsc_srchbuf /* beginning of the list, but try as-is first */;\n    q->dnsq_flags |= DNS_ASIS_DONE;\n    dns_newid(ctx, q);\n  }\n  else {\n    q->dnsq_nxtsrch = ctx->dnsc_srchbuf;\n    dns_next_srch(ctx, q);\n  }\n\n  /* q->dnsq_deadline is set to 0 (calloc above): the new query is\n   * \"already expired\" when first inserted into queue, so it's safe\n   * to insert it into the head of the list.  Next call to dns_timeouts()\n   * will actually send it.\n   */\n  qlist_add_head(&ctx->dnsc_qactive, q);\n  ++ctx->dnsc_nactive;\n  dns_request_utm(ctx, 0);\n\n  return q;\n}\n\nstruct dns_query *\ndns_submit_p(struct dns_ctx *ctx,\n             const char *name, int qcls, int qtyp, int flags,\n             dns_parse_fn *parse, dns_query_fn *cbck, void *data) {\n  int isabs;\n  SETCTXOPEN(ctx);\n  if (dns_ptodn(name, 0, ctx->dnsc_pbuf, DNS_MAXDN, &isabs) <= 0) {\n    ctx->dnsc_qstatus = DNS_E_BADQUERY;\n    return NULL;\n  }\n  if (isabs)\n    flags |= DNS_NOSRCH;\n  return\n    dns_submit_dn(ctx, ctx->dnsc_pbuf, qcls, qtyp, flags, parse, cbck, data);\n}\n\n/* process readable fd condition.\n * To be usable in edge-triggered environment, the routine\n * should consume all input so it should loop over.\n * Note it isn't really necessary to loop here, because\n * an application may perform the loop just fine by it's own,\n * but in this case we should return some sensitive result,\n * to indicate when to stop calling and error conditions.\n * Note also we may encounter all sorts of recvfrom()\n * errors which aren't fatal, and at the same time we may\n * loop forever if an error IS fatal.\n */\nvoid dns_ioevent(struct dns_ctx *ctx, time_t now) {\n  int r;\n  unsigned servi;\n  struct dns_query *q;\n  dnsc_t *pbuf;\n  dnscc_t *pend, *pcur;\n  void *result;\n  struct sockaddr_ns sns;\n  socklen_t slen;\n\n  SETCTX(ctx);\n  if (!CTXOPEN(ctx))\n    return;\n  dns_assert_ctx(ctx);\n  pbuf = ctx->dnsc_pbuf;\n\n  if (!now) now = time(NULL);\n\nagain: /* receive the reply */\n\n  slen = sizeof(sns);\n  r = recvfrom(ctx->dnsc_udpsock, (void*)pbuf, ctx->dnsc_udpbuf,\n               MSG_DONTWAIT, &sns.sa, &slen);\n  if (r < 0) {\n    /*XXX just ignore recvfrom() errors for now.\n     * in the future it may be possible to determine which\n     * query failed and requeue it.\n     * Note there may be various error conditions, triggered\n     * by both local problems and remote problems.  It isn't\n     * quite trivial to determine whenever an error is local\n     * or remote.  On local errors, we should stop, while\n     * remote errors should be ignored (for now anyway).\n     */\n#ifdef __MINGW32__\n    if (WSAGetLastError() == WSAEWOULDBLOCK)\n#else\n    if (errno == EAGAIN)\n#endif\n    {\n      dns_request_utm(ctx, now);\n      return;\n    }\n    goto again;\n  }\n\n  pend = pbuf + r;\n  pcur = dns_payload(pbuf);\n\n  /* check reply header */\n  if (pcur > pend || dns_numqd(pbuf) > 1 || dns_opcode(pbuf) != 0) {\n    DNS_DBG(ctx, -1/*bad reply*/, &sns.sa, slen, pbuf, r);\n    goto again;\n  }\n\n  /* find the matching query, by qID */\n  for (q = ctx->dnsc_qactive.head; ; q = q->dnsq_next) {\n    if (!q) {\n      /* no more requests: old reply? */\n      DNS_DBG(ctx, -5/*no matching query*/, &sns.sa, slen, pbuf, r);\n      goto again;\n    }\n    if (pbuf[DNS_H_QID1] == q->dnsq_id[0] &&\n        pbuf[DNS_H_QID2] == q->dnsq_id[1])\n      break;\n  }\n\n  /* if we have numqd, compare with our query qDN */\n  if (dns_numqd(pbuf)) {\n    /* decode the qDN */\n    dnsc_t dn[DNS_MAXDN];\n    if (dns_getdn(pbuf, &pcur, pend, dn, sizeof(dn)) < 0 ||\n        pcur + 4 > pend) {\n      DNS_DBG(ctx, -1/*bad reply*/, &sns.sa, slen, pbuf, r);\n      goto again;\n    }\n    if (!dns_dnequal(dn, q->dnsq_dn) ||\n        memcmp(pcur, q->dnsq_typcls, 4) != 0) {\n      /* not this query */\n      DNS_DBG(ctx, -5/*no matching query*/, &sns.sa, slen, pbuf, r);\n      goto again;\n    }\n    /* here, query match, and pcur points past qDN in query section in pbuf */\n  }\n  /* if no numqd, we only allow FORMERR rcode */\n  else if (dns_rcode(pbuf) != DNS_R_FORMERR) {\n    /* treat it as bad reply if !FORMERR */\n    DNS_DBG(ctx, -1/*bad reply*/, &sns.sa, slen, pbuf, r);\n    goto again;\n  }\n  else {\n    /* else it's FORMERR, handled below */\n  }\n\n  /* find server */\n#ifdef HAVE_IPv6\n  if (sns.sa.sa_family == AF_INET6 && slen >= sizeof(sns.sin6)) {\n    for(servi = 0; servi < ctx->dnsc_nserv; ++servi)\n      if (sin6_eq(ctx->dnsc_serv[servi].sin6, sns.sin6))\n        break;\n  }\n  else\n#endif\n  if (sns.sa.sa_family == AF_INET && slen >= sizeof(sns.sin)) {\n    for(servi = 0; servi < ctx->dnsc_nserv; ++servi)\n      if (sin_eq(ctx->dnsc_serv[servi].sin, sns.sin))\n        break;\n  }\n  else\n    servi = ctx->dnsc_nserv;\n\n  /* check if we expect reply from this server.\n   * Note we can receive reply from first try if we're already at next */\n  if (!(q->dnsq_servwait & (1 << servi))) { /* if ever asked this NS */\n    DNS_DBG(ctx, -2/*wrong server*/, &sns.sa, slen, pbuf, r);\n    goto again;\n  }\n\n  /* we got (some) reply for our query */\n\n  DNS_DBGQ(ctx, q, 0, &sns.sa, slen, pbuf, r);\n  q->dnsq_servwait &= ~(1 << servi);\t/* don't expect reply from this serv */\n\n  /* process the RCODE */\n  switch(dns_rcode(pbuf)) {\n\n  case DNS_R_NOERROR:\n    if (dns_tc(pbuf)) {\n      /* possible truncation.  We can't deal with it. */\n      /*XXX for now, treat TC bit the same as SERVFAIL.\n       * It is possible to:\n       *  a) try to decode the reply - may be ANSWER section is ok;\n       *  b) check if server understands EDNS0, and if it is, and\n       *   answer still don't fit, end query.\n       */\n      break;\n    }\n    if (!dns_numan(pbuf)) {\t/* no data of requested type */\n      if (dns_next_srch(ctx, q)) {\n        /* if we're searching, try next searchlist element,\n         * but remember NODATA reply. */\n        q->dnsq_flags |= DNS_SEEN_NODATA;\n        dns_send(ctx, q, now);\n      }\n      else\n        /* else - nothing to search any more - finish the query.\n         * It will be NODATA since we've seen a NODATA reply. */\n        dns_end_query(ctx, q, DNS_E_NODATA, 0);\n    }\n    /* we've got a positive reply here */\n    else if (q->dnsq_parse) {\n      /* if we have parsing routine, call it and return whatever it returned */\n      /* don't try to re-search if NODATA here.  For example,\n       * if we asked for A but only received CNAME.  Unless we'll\n       * someday do recursive queries.  And that's problematic too, since\n       * we may be dealing with specific AA-only nameservers for a given\n       * domain, but CNAME points elsewhere...\n       */\n      r = q->dnsq_parse(q->dnsq_dn, pbuf, pcur, pend, &result);\n      dns_end_query(ctx, q, r, r < 0 ? NULL : result);\n    }\n    /* else just malloc+copy the raw DNS reply */\n    else if ((result = malloc(r)) == NULL)\n      dns_end_query(ctx, q, DNS_E_NOMEM, NULL);\n    else {\n      memcpy(result, pbuf, r);\n      dns_end_query(ctx, q, r, result);\n    }\n    goto again;\n\n  case DNS_R_NXDOMAIN:\t/* Non-existing domain. */\n    if (dns_next_srch(ctx, q))\n      /* more search entries exists, try them. */\n      dns_send(ctx, q, now);\n    else\n      /* nothing to search anymore. End the query, returning either NODATA\n       * if we've seen it before, or NXDOMAIN if not. */\n      dns_end_query(ctx, q,\n           q->dnsq_flags & DNS_SEEN_NODATA ? DNS_E_NODATA : DNS_E_NXDOMAIN, 0);\n    goto again;\n\n  case DNS_R_FORMERR:\n  case DNS_R_NOTIMPL:\n    /* for FORMERR and NOTIMPL rcodes, if we tried EDNS0-enabled query,\n     * try w/o EDNS0. */\n    if (ctx->dnsc_udpbuf > DNS_MAXPACKET &&\n        !(q->dnsq_servnEDNS0 & (1 << servi))) {\n      /* we always trying EDNS0 first if enabled, and retry a given query\n       * if not available. Maybe it's better to remember inavailability of\n       * EDNS0 in ctx as a per-NS flag, and never try again for this NS.\n       * For long-running applications.. maybe they will change the nameserver\n       * while we're running? :)  Also, since FORMERR is the only rcode we\n       * allow to be header-only, and in this case the only check we do to\n       * find a query it belongs to is qID (not qDN+qCLS+qTYP), it's much\n       * easier to spoof and to force us to perform non-EDNS0 queries only...\n       */\n      q->dnsq_servnEDNS0 |= 1 << servi;\n      dns_send_this(ctx, q, servi, now);\n      goto again;\n    }\n    /* else we handle it the same as SERVFAIL etc */\n\n  case DNS_R_SERVFAIL:\n  case DNS_R_REFUSED:\n    /* for these rcodes, advance this request\n     * to the next server and reschedule */\n  default: /* unknown rcode? hmmm... */\n    break;\n  }\n\n  /* here, we received unexpected reply */\n  q->dnsq_servskip |= (1 << servi);\t/* don't retry this server */\n\n  /* we don't expect replies from this server anymore.\n   * But there may be other servers.  Some may be still processing our\n   * query, and some may be left to try.\n   * We just ignore this reply and wait a bit more if some NSes haven't\n   * replied yet (dnsq_servwait != 0), and let the situation to be handled\n   * on next event processing.  Timeout for this query is set correctly,\n   * if not taking into account the one-second difference - we can try\n   * next server in the same iteration sooner.\n   */\n\n  /* try next server */\n  if (!q->dnsq_servwait) {\n    /* next retry: maybe some other servers will reply next time.\n     * dns_send() will end the query for us if no more servers to try.\n     * Note we can't continue with the next searchlist element here:\n     * we don't know if the current qdn exists or not, there's no definitive\n     * answer yet (which is seen in cases above).\n     *XXX standard resolver also tries as-is query in case all nameservers\n     * failed to process our query and if not tried before.  We don't do it.\n     */\n    dns_send(ctx, q, now);\n  }\n  else {\n    /* else don't do anything - not all servers replied yet */\n  }\n  goto again;\n\n}\n\n/* handle all timeouts */\nint dns_timeouts(struct dns_ctx *ctx, int maxwait, time_t now) {\n  /* this is a hot routine */\n  struct dns_query *q;\n\n  SETCTX(ctx);\n  dns_assert_ctx(ctx);\n\n  /* Pick up first entry from query list.\n   * If its deadline has passed, (re)send it\n   * (dns_send() will move it next in the list).\n   * If not, this is the query which determines the closest deadline.\n   */\n\n  q = ctx->dnsc_qactive.head;\n  if (!q)\n    return maxwait;\n  if (!now)\n    now = time(NULL);\n  do {\n    if (q->dnsq_deadline > now) { /* first non-expired query */\n      int w = (int)(q->dnsq_deadline - now);\n      if (maxwait < 0 || maxwait > w)\n        maxwait = w;\n      break;\n    }\n    else {\n      /* process expired deadline */\n      dns_send(ctx, q, now);\n    }\n  } while((q = ctx->dnsc_qactive.head) != NULL);\n\n  dns_request_utm(ctx, now); /* update timer with new deadline */\n  return maxwait;\n}\n\nstruct dns_resolve_data {\n  int   dnsrd_done;\n  void *dnsrd_result;\n};\n\nstatic void dns_resolve_cb(struct dns_ctx *ctx, void *result, void *data) {\n  struct dns_resolve_data *d = data;\n  d->dnsrd_result = result;\n  d->dnsrd_done = 1;\n  ctx = ctx;\n}\n\nvoid *dns_resolve(struct dns_ctx *ctx, struct dns_query *q) {\n  time_t now;\n  struct dns_resolve_data d;\n  int n;\n  SETCTXOPEN(ctx);\n\n  if (!q)\n    return NULL;\n\n  assert(ctx == q->dnsq_ctx);\n  dns_assert_ctx(ctx);\n  /* do not allow re-resolving syncronous queries */\n  assert(q->dnsq_cbck != dns_resolve_cb && \"can't resolve syncronous query\");\n  if (q->dnsq_cbck == dns_resolve_cb) {\n    ctx->dnsc_qstatus = DNS_E_BADQUERY;\n    return NULL;\n  }\n  q->dnsq_cbck = dns_resolve_cb;\n  q->dnsq_cbdata = &d;\n  d.dnsrd_done = 0;\n\n  now = time(NULL);\n  while(!d.dnsrd_done && (n = dns_timeouts(ctx, -1, now)) >= 0) {\n#ifdef HAVE_POLL\n    struct pollfd pfd;\n    pfd.fd = ctx->dnsc_udpsock;\n    pfd.events = POLLIN;\n    n = poll(&pfd, 1, n * 1000);\n#else\n    fd_set rfd;\n    struct timeval tv;\n    FD_ZERO(&rfd);\n    FD_SET(ctx->dnsc_udpsock, &rfd);\n    tv.tv_sec = n; tv.tv_usec = 0;\n    n = select(ctx->dnsc_udpsock + 1, &rfd, NULL, NULL, &tv);\n#endif\n    now = time(NULL);\n    if (n > 0)\n      dns_ioevent(ctx, now);\n  }\n\n  return d.dnsrd_result;\n}\n\nvoid *dns_resolve_dn(struct dns_ctx *ctx,\n                     dnscc_t *dn, int qcls, int qtyp, int flags,\n                     dns_parse_fn *parse) {\n  return\n    dns_resolve(ctx,\n      dns_submit_dn(ctx, dn, qcls, qtyp, flags, parse, NULL, NULL));\n}\n\nvoid *dns_resolve_p(struct dns_ctx *ctx,\n                    const char *name, int qcls, int qtyp, int flags,\n                    dns_parse_fn *parse) {\n  return\n    dns_resolve(ctx,\n      dns_submit_p(ctx, name, qcls, qtyp, flags, parse, NULL, NULL));\n}\n\nint dns_cancel(struct dns_ctx *ctx, struct dns_query *q) {\n  SETCTX(ctx);\n  dns_assert_ctx(ctx);\n  assert(q->dnsq_ctx == ctx);\n  /* do not allow cancelling syncronous queries */\n  assert(q->dnsq_cbck != dns_resolve_cb && \"can't cancel syncronous query\");\n  if (q->dnsq_cbck == dns_resolve_cb)\n    return (ctx->dnsc_qstatus = DNS_E_BADQUERY);\n  qlist_remove(&ctx->dnsc_qactive, q);\n  --ctx->dnsc_nactive;\n  dns_request_utm(ctx, 0);\n  return 0;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_a.c",
    "content": "/* udns_rr_a.c\n   parse/query A/AAAA IN records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n#ifndef __MINGW32__\n# include <sys/types.h>\n# include <netinet/in.h>\n#endif\n#include \"udns.h\"\n\n/* here, we use common routine to parse both IPv4 and IPv6 addresses.\n */\n\n/* this structure should match dns_rr_a[46] */\nstruct dns_rr_a {\n  dns_rr_common(dnsa);\n  unsigned char *dnsa_addr;\n};\n\nstatic int\ndns_parse_a(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n            void **result, unsigned dsize) {\n  struct dns_rr_a *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r;\n\n  /* first, validate and count number of addresses */\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0)\n    if (rr.dnsrr_dsz != dsize)\n      return DNS_E_PROTOCOL;\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  else if (!p.dnsp_nrr)\n    return DNS_E_NODATA;\n\n  ret = malloc(sizeof(*ret) + dsize * p.dnsp_nrr + dns_stdrr_size(&p));\n  if (!ret)\n    return DNS_E_NOMEM;\n\n  ret->dnsa_nrr = p.dnsp_nrr;\n  ret->dnsa_addr = (unsigned char*)(ret+1);\n\n  /* copy the RRs */\n  for (dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr); ++r)\n    memcpy(ret->dnsa_addr + dsize * r, rr.dnsrr_dptr, dsize);\n\n  dns_stdrr_finish((struct dns_rr_null *)ret,\n                   (char *)(ret->dnsa_addr + dsize * p.dnsp_nrr), &p);\n  *result = ret;\n  return 0;\n}\n\nint\ndns_parse_a4(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n             void **result) {\n#ifdef AF_INET\n  assert(sizeof(struct in_addr) == 4);\n#endif\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_A);\n  return dns_parse_a(qdn, pkt, cur, end, result, 4);\n}\n\nstruct dns_query *\ndns_submit_a4(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_a4_fn *cbck, void *data) {\n  return\n    dns_submit_p(ctx, name, DNS_C_IN, DNS_T_A, flags,\n                 dns_parse_a4, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_rr_a4 *\ndns_resolve_a4(struct dns_ctx *ctx, const char *name, int flags) {\n  return (struct dns_rr_a4 *)\n    dns_resolve_p(ctx, name, DNS_C_IN, DNS_T_A, flags, dns_parse_a4);\n}\n\nint\ndns_parse_a6(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n             void **result) {\n#ifdef AF_INET6\n  assert(sizeof(struct in6_addr) == 16);\n#endif\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_AAAA);\n  return dns_parse_a(qdn, pkt, cur, end, result, 16);\n}\n\nstruct dns_query *\ndns_submit_a6(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_a6_fn *cbck, void *data) {\n  return\n    dns_submit_p(ctx, name, DNS_C_IN, DNS_T_AAAA, flags,\n                 dns_parse_a6, (dns_query_fn*)cbck, data);\n}\n\nstruct dns_rr_a6 *\ndns_resolve_a6(struct dns_ctx *ctx, const char *name, int flags) {\n  return (struct dns_rr_a6 *)\n    dns_resolve_p(ctx, name, DNS_C_IN, DNS_T_AAAA, flags, dns_parse_a6);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_mx.c",
    "content": "/* udns_rr_mx.c\n   parse/query MX IN records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n#include \"udns.h\"\n\nint\ndns_parse_mx(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n             void **result) {\n  struct dns_rr_mx *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r, l;\n  char *sp;\n  dnsc_t mx[DNS_MAXDN];\n\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_MX);\n\n  /* first, validate the answer and count size of the result */\n  l = 0;\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    cur = rr.dnsrr_dptr + 2;\n    r = dns_getdn(pkt, &cur, end, mx, sizeof(mx));\n    if (r <= 0 || cur != rr.dnsrr_dend)\n      return DNS_E_PROTOCOL;\n    l += dns_dntop_size(mx);\n  }\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  if (!p.dnsp_nrr)\n    return DNS_E_NODATA;\n\n  /* next, allocate and set up result */\n  l += dns_stdrr_size(&p);\n  ret = malloc(sizeof(*ret) + sizeof(struct dns_mx) * p.dnsp_nrr + l);\n  if (!ret)\n    return DNS_E_NOMEM;\n  ret->dnsmx_nrr = p.dnsp_nrr;\n  ret->dnsmx_mx = (struct dns_mx *)(ret+1);\n\n  /* and 3rd, fill in result, finally */\n  sp = (char*)(ret->dnsmx_mx + p.dnsp_nrr);\n  for (dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr); ++r) {\n    ret->dnsmx_mx[r].name = sp;\n    cur = rr.dnsrr_dptr;\n    ret->dnsmx_mx[r].priority = dns_get16(cur);\n    cur += 2;\n    dns_getdn(pkt, &cur, end, mx, sizeof(mx));\n    sp += dns_dntop(mx, sp, DNS_MAXNAME);\n  }\n  dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);\n  *result = ret;\n  return 0;\n}\n\nstruct dns_query *\ndns_submit_mx(struct dns_ctx *ctx, const char *name, int flags,\n              dns_query_mx_fn *cbck, void *data) {\n  return\n    dns_submit_p(ctx, name, DNS_C_IN, DNS_T_MX, flags,\n                 dns_parse_mx, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_mx *\ndns_resolve_mx(struct dns_ctx *ctx, const char *name, int flags) {\n  return (struct dns_rr_mx *)\n    dns_resolve_p(ctx, name, DNS_C_IN, DNS_T_MX, flags, dns_parse_mx);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_naptr.c",
    "content": "/* udns_rr_naptr.c\n   parse/query NAPTR IN records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   Copyright (C) 2006  Mikael Magnusson <mikma@users.sourceforge.net>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n#include \"udns.h\"\n\n/* Get a single string for NAPTR record, pretty much like a DN label.\n * String length is in first byte in *cur, so it can't be >255.\n */\nstatic int dns_getstr(dnscc_t **cur, dnscc_t *ep, char *buf)\n{\n  unsigned l;\n  dnscc_t *cp = *cur;\n\n  l = *cp++;\n  if (cp + l > ep)\n    return DNS_E_PROTOCOL;\n  if (buf) {\n    memcpy(buf, cp, l);\n    buf[l] = '\\0';\n  }\n  cp += l;\n\n  *cur = cp;\n  return l + 1;\n}\n\nint\ndns_parse_naptr(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n                void **result) {\n  struct dns_rr_naptr *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r, l;\n  char *sp;\n  dnsc_t dn[DNS_MAXDN];\n\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_NAPTR);\n\n  /* first, validate the answer and count size of the result */\n  l = 0;\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    int i;\n    dnscc_t *ep = rr.dnsrr_dend;\n\n    /* first 4 bytes: order & preference */\n    cur = rr.dnsrr_dptr + 4;\n\n    /* flags, services and regexp */\n    for (i = 0; i < 3; i++) {\n      r = dns_getstr(&cur, ep, NULL);\n      if (r < 0)\n        return r;\n      l += r;\n    }\n    /* replacement */\n    r = dns_getdn(pkt, &cur, end, dn, sizeof(dn));\n    if (r <= 0 || cur != rr.dnsrr_dend)\n      return DNS_E_PROTOCOL;\n    l += dns_dntop_size(dn);\n  }\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  if (!p.dnsp_nrr)\n    return DNS_E_NODATA;\n\n  /* next, allocate and set up result */\n  l += dns_stdrr_size(&p);\n  ret = malloc(sizeof(*ret) + sizeof(struct dns_naptr) * p.dnsp_nrr + l);\n  if (!ret)\n    return DNS_E_NOMEM;\n  ret->dnsnaptr_nrr = p.dnsp_nrr;\n  ret->dnsnaptr_naptr = (struct dns_naptr *)(ret+1);\n\n  /* and 3rd, fill in result, finally */\n  sp = (char*)(&ret->dnsnaptr_naptr[p.dnsp_nrr]);\n  for (dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr); ++r) {\n    cur = rr.dnsrr_dptr;\n    ret->dnsnaptr_naptr[r].order = dns_get16(cur); cur += 2;\n    ret->dnsnaptr_naptr[r].preference = dns_get16(cur); cur += 2;\n    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].flags = sp));\n    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].service = sp));\n    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].regexp = sp));\n    dns_getdn(pkt, &cur, end, dn, sizeof(dn));\n    sp += dns_dntop(dn, (ret->dnsnaptr_naptr[r].replacement = sp), DNS_MAXNAME);\n  }\n  dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);\n  *result = ret;\n  return 0;\n}\n\nstruct dns_query *\ndns_submit_naptr(struct dns_ctx *ctx, const char *name, int flags,\n                 dns_query_naptr_fn *cbck, void *data) {\n  return\n    dns_submit_p(ctx, name, DNS_C_IN, DNS_T_NAPTR, flags,\n                 dns_parse_naptr, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_naptr *\ndns_resolve_naptr(struct dns_ctx *ctx, const char *name, int flags) {\n  return (struct dns_rr_naptr *)\n    dns_resolve_p(ctx, name, DNS_C_IN, DNS_T_NAPTR, flags, dns_parse_naptr);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_ptr.c",
    "content": "/* udns_rr_ptr.c\n   parse/query PTR records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <stdlib.h>\n#include <assert.h>\n#include \"udns.h\"\n\nint\ndns_parse_ptr(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n              void **result) {\n  struct dns_rr_ptr *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r, l, c;\n  char *sp;\n  dnsc_t ptr[DNS_MAXDN];\n\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_PTR);\n\n  /* first, validate the answer and count size of the result */\n  l = c = 0;\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    cur = rr.dnsrr_dptr;\n    r = dns_getdn(pkt, &cur, end, ptr, sizeof(ptr));\n    if (r <= 0 || cur != rr.dnsrr_dend)\n      return DNS_E_PROTOCOL;\n    l += dns_dntop_size(ptr);\n    ++c;\n  }\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  if (!c)\n    return DNS_E_NODATA;\n\n  /* next, allocate and set up result */\n  ret = malloc(sizeof(*ret) + sizeof(char **) * c + l + dns_stdrr_size(&p));\n  if (!ret)\n    return DNS_E_NOMEM;\n  ret->dnsptr_nrr = c;\n  ret->dnsptr_ptr = (char **)(ret+1);\n\n  /* and 3rd, fill in result, finally */\n  sp = (char*)(ret->dnsptr_ptr + c);\n  c = 0;\n  dns_rewind(&p, qdn);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    ret->dnsptr_ptr[c] = sp;\n    cur = rr.dnsrr_dptr;\n    dns_getdn(pkt, &cur, end, ptr, sizeof(ptr));\n    sp += dns_dntop(ptr, sp, DNS_MAXNAME);\n    ++c;\n  }\n  dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);\n  *result = ret;\n  return 0;\n}\n\nstruct dns_query *\ndns_submit_a4ptr(struct dns_ctx *ctx, const struct in_addr *addr,\n                 dns_query_ptr_fn *cbck, void *data) {\n  dnsc_t dn[DNS_A4RSIZE];\n  dns_a4todn(addr, 0, dn, sizeof(dn));\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_PTR, DNS_NOSRCH,\n                  dns_parse_ptr, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_ptr *\ndns_resolve_a4ptr(struct dns_ctx *ctx, const struct in_addr *addr) {\n  return (struct dns_rr_ptr *)\n    dns_resolve(ctx, dns_submit_a4ptr(ctx, addr, NULL, NULL));\n}\n\nstruct dns_query *\ndns_submit_a6ptr(struct dns_ctx *ctx, const struct in6_addr *addr,\n                 dns_query_ptr_fn *cbck, void *data) {\n  dnsc_t dn[DNS_A6RSIZE];\n  dns_a6todn(addr, 0, dn, sizeof(dn));\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_PTR, DNS_NOSRCH,\n                  dns_parse_ptr, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_ptr *\ndns_resolve_a6ptr(struct dns_ctx *ctx, const struct in6_addr *addr) {\n  return (struct dns_rr_ptr *)\n    dns_resolve(ctx, dns_submit_a6ptr(ctx, addr, NULL, NULL));\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_srv.c",
    "content": "/* udns_rr_srv.c\n   parse/query SRV IN (rfc2782) records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n   Copyright 2005 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>\n\n   2005-09-11:\n   Changed MX parser file into a SRV parser file\n\n */\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n#include \"udns.h\"\n\nint\ndns_parse_srv(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n              void **result) {\n  struct dns_rr_srv *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r, l;\n  char *sp;\n  dnsc_t srv[DNS_MAXDN];\n\n  assert(dns_get16(cur+2) == DNS_C_IN && dns_get16(cur+0) == DNS_T_SRV);\n\n  /* first, validate the answer and count size of the result */\n  l = 0;\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    cur = rr.dnsrr_dptr + 6;\n    r = dns_getdn(pkt, &cur, end, srv, sizeof(srv));\n    if (r <= 0 || cur != rr.dnsrr_dend)\n      return DNS_E_PROTOCOL;\n    l += dns_dntop_size(srv);\n  }\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  if (!p.dnsp_nrr)\n    return DNS_E_NODATA;\n\n  /* next, allocate and set up result */\n  l += dns_stdrr_size(&p);\n  ret = malloc(sizeof(*ret) + sizeof(struct dns_srv) * p.dnsp_nrr + l);\n  if (!ret)\n    return DNS_E_NOMEM;\n  ret->dnssrv_nrr = p.dnsp_nrr;\n  ret->dnssrv_srv = (struct dns_srv *)(ret+1);\n\n  /* and 3rd, fill in result, finally */\n  sp = (char*)(ret->dnssrv_srv + p.dnsp_nrr);\n  for (dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr); ++r) {\n    ret->dnssrv_srv[r].name = sp;\n    cur = rr.dnsrr_dptr;\n    ret->dnssrv_srv[r].priority = dns_get16(cur);\n    ret->dnssrv_srv[r].weight = dns_get16(cur+2);\n    ret->dnssrv_srv[r].port = dns_get16(cur+4);\n    cur += 6;\n    dns_getdn(pkt, &cur, end, srv, sizeof(srv));\n    sp += dns_dntop(srv, sp, DNS_MAXNAME);\n  }\n  dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);\n  *result = ret;\n  return 0;\n}\n\n/* Add a single service or proto name prepending an undescore (_),\n * according to rfc2782 rules.\n * Return 0 or the label length.\n * Routing assumes dn holds enouth space for a single DN label. */\nstatic int add_sname(dnsc_t *dn, const char *sn) {\n  int l = dns_ptodn(sn, 0, dn + 1, DNS_MAXLABEL-1, NULL);\n  if (l <= 1 || l - 2 != dn[1])\n    /* Should we really check if sn is exactly one label?  Do we care? */\n    return 0;\n  dn[0] = l - 1;\n  dn[1] = '_';\n  return l;\n}\n\n/* Construct a domain name for SRV query from the given name, service and proto.\n * The code allows any combinations of srv and proto (both are non-NULL,\n * both NULL, or either one is non-NULL).  Whenever it makes any sense or not\n * is left as an exercise to programmer.\n * Return negative value on error (malformed query) or addition query flag(s).\n */\nstatic int\nbuild_srv_dn(dnsc_t *dn, const char *name, const char *srv, const char *proto)\n{\n  int p = 0, l, isabs;\n  if (srv) {\n    l = add_sname(dn + p, srv);\n    if (!l)\n      return -1;\n    p += l;\n  }\n  if (proto) {\n    l = add_sname(dn + p, proto);\n    if (!l)\n      return -1;\n    p += l;\n  }\n  l = dns_ptodn(name, 0, dn + p, DNS_MAXDN - p, &isabs);\n  if (l < 0)\n    return -1;\n  return isabs ? DNS_NOSRCH : 0;\n}\n\nstruct dns_query *\ndns_submit_srv(struct dns_ctx *ctx,\n               const char *name, const char *srv, const char *proto,\n               int flags, dns_query_srv_fn *cbck, void *data) {\n  dnsc_t dn[DNS_MAXDN];\n  int r = build_srv_dn(dn, name, srv, proto);\n  if (r < 0) {\n    dns_setstatus (ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return\n    dns_submit_dn(ctx, dn, DNS_C_IN, DNS_T_SRV, flags | r,\n                  dns_parse_srv, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_srv *\ndns_resolve_srv(struct dns_ctx *ctx,\n                const char *name, const char *srv, const char *proto, int flags)\n{\n  dnsc_t dn[DNS_MAXDN];\n  int r = build_srv_dn(dn, name, srv, proto);\n  if (r < 0) {\n    dns_setstatus(ctx, DNS_E_BADQUERY);\n    return NULL;\n  }\n  return (struct dns_rr_srv *)\n    dns_resolve_dn(ctx, dn, DNS_C_IN, DNS_T_SRV, flags | r, dns_parse_srv);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/libudns/udns_rr_txt.c",
    "content": "/* udns_rr_txt.c\n   parse/query TXT records\n\n   Copyright (C) 2005  Michael Tokarev <mjt@corpit.ru>\n   This file is part of UDNS library, an async DNS stub resolver.\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, in file named COPYING.LGPL; if not,\n   write to the Free Software Foundation, Inc., 59 Temple Place,\n   Suite 330, Boston, MA  02111-1307  USA\n\n */\n\n#include <string.h>\n#include <stdlib.h>\n#include <assert.h>\n#include \"udns.h\"\n\nint\ndns_parse_txt(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,\n              void **result) {\n  struct dns_rr_txt *ret;\n  struct dns_parse p;\n  struct dns_rr rr;\n  int r, l;\n  dnsc_t *sp;\n  dnscc_t *cp, *ep;\n\n  assert(dns_get16(cur+0) == DNS_T_TXT);\n\n  /* first, validate the answer and count size of the result */\n  l = 0;\n  dns_initparse(&p, qdn, pkt, cur, end);\n  while((r = dns_nextrr(&p, &rr)) > 0) {\n    cp = rr.dnsrr_dptr; ep = rr.dnsrr_dend;\n    while(cp < ep) {\n      r = *cp++;\n      if (cp + r > ep)\n        return DNS_E_PROTOCOL;\n      l += r;\n      cp += r;\n    }\n  }\n  if (r < 0)\n    return DNS_E_PROTOCOL;\n  if (!p.dnsp_nrr)\n    return DNS_E_NODATA;\n\n  /* next, allocate and set up result */\n  l +=  (sizeof(struct dns_txt) + 1) * p.dnsp_nrr + dns_stdrr_size(&p);\n  ret = malloc(sizeof(*ret) + l);\n  if (!ret)\n    return DNS_E_NOMEM;\n  ret->dnstxt_nrr = p.dnsp_nrr;\n  ret->dnstxt_txt = (struct dns_txt *)(ret+1);\n\n  /* and 3rd, fill in result, finally */\n  sp = (dnsc_t*)(ret->dnstxt_txt + p.dnsp_nrr);\n  for(dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr) > 0; ++r) {\n    ret->dnstxt_txt[r].txt = sp;\n    cp = rr.dnsrr_dptr; ep = rr.dnsrr_dend;\n    while(cp < ep) {\n      l = *cp++;\n      memcpy(sp, cp, l);\n      sp += l;\n      cp += l;\n    }\n    ret->dnstxt_txt[r].len = sp - ret->dnstxt_txt[r].txt;\n    *sp++ = '\\0';\n  }\n  dns_stdrr_finish((struct dns_rr_null *)ret, (char*)sp, &p);\n  *result = ret;\n  return 0;\n}\n\nstruct dns_query *\ndns_submit_txt(struct dns_ctx *ctx, const char *name, int qcls, int flags,\n               dns_query_txt_fn *cbck, void *data) {\n  return\n    dns_submit_p(ctx, name, qcls, DNS_T_TXT, flags,\n                 dns_parse_txt, (dns_query_fn *)cbck, data);\n}\n\nstruct dns_rr_txt *\ndns_resolve_txt(struct dns_ctx *ctx, const char *name, int qcls, int flags) {\n  return (struct dns_rr_txt *)\n    dns_resolve_p(ctx, name, qcls, DNS_T_TXT, flags, dns_parse_txt);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/ax_pthread.m4",
    "content": "# ===========================================================================\n#        http://www.gnu.org/software/autoconf-archive/ax_pthread.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])\n#\n# DESCRIPTION\n#\n#   This macro figures out how to build C programs using POSIX threads. It\n#   sets the PTHREAD_LIBS output variable to the threads library and linker\n#   flags, and the PTHREAD_CFLAGS output variable to any special C compiler\n#   flags that are needed. (The user can also force certain compiler\n#   flags/libs to be tested by setting these environment variables.)\n#\n#   Also sets PTHREAD_CC to any special C compiler that is needed for\n#   multi-threaded programs (defaults to the value of CC otherwise). (This\n#   is necessary on AIX to use the special cc_r compiler alias.)\n#\n#   NOTE: You are assumed to not only compile your program with these flags,\n#   but also link it with them as well. e.g. you should link with\n#   $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS\n#\n#   If you are only building threads programs, you may wish to use these\n#   variables in your default LIBS, CFLAGS, and CC:\n#\n#     LIBS=\"$PTHREAD_LIBS $LIBS\"\n#     CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n#     CC=\"$PTHREAD_CC\"\n#\n#   In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant\n#   has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name\n#   (e.g. PTHREAD_CREATE_UNDETACHED on AIX).\n#\n#   Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the\n#   PTHREAD_PRIO_INHERIT symbol is defined when compiling with\n#   PTHREAD_CFLAGS.\n#\n#   ACTION-IF-FOUND is a list of shell commands to run if a threads library\n#   is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it\n#   is not found. If ACTION-IF-FOUND is not specified, the default action\n#   will define HAVE_PTHREAD.\n#\n#   Please let the authors know if this macro fails on any platform, or if\n#   you have any other suggestions or comments. This macro was based on work\n#   by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help\n#   from M. Frigo), as well as ac_pthread and hb_pthread macros posted by\n#   Alejandro Forero Cuervo to the autoconf macro repository. We are also\n#   grateful for the helpful feedback of numerous users.\n#\n#   Updated for Autoconf 2.68 by Daniel Richard G.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>\n#   Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   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 General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 21\n\nAU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])\nAC_DEFUN([AX_PTHREAD], [\nAC_REQUIRE([AC_CANONICAL_HOST])\nAC_LANG_PUSH([C])\nax_pthread_ok=no\n\n# We used to check for pthread.h first, but this fails if pthread.h\n# requires special compiler flags (e.g. on True64 or Sequent).\n# It gets checked for in the link test anyway.\n\n# First of all, check if the user has set any of the PTHREAD_LIBS,\n# etcetera environment variables, and if threads linking works using\n# them:\nif test x\"$PTHREAD_LIBS$PTHREAD_CFLAGS\" != x; then\n        save_CFLAGS=\"$CFLAGS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n        save_LIBS=\"$LIBS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])\n        AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])\n        AC_MSG_RESULT([$ax_pthread_ok])\n        if test x\"$ax_pthread_ok\" = xno; then\n                PTHREAD_LIBS=\"\"\n                PTHREAD_CFLAGS=\"\"\n        fi\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\nfi\n\n# We must check for the threads library under a number of different\n# names; the ordering is very important because some systems\n# (e.g. DEC) have both -lpthread and -lpthreads, where one of the\n# libraries is broken (non-POSIX).\n\n# Create a list of thread flags to try.  Items starting with a \"-\" are\n# C compiler flags, and other items are library names, except for \"none\"\n# which indicates that we try without any flags at all, and \"pthread-config\"\n# which is a program returning the flags for the Pth emulation library.\n\nax_pthread_flags=\"pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config\"\n\n# The ordering *is* (sometimes) important.  Some notes on the\n# individual items follow:\n\n# pthreads: AIX (must check this before -lpthread)\n# none: in case threads are in libc; should be tried before -Kthread and\n#       other compiler flags to prevent continual compiler warnings\n# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)\n# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)\n# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)\n# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)\n# -pthreads: Solaris/gcc\n# -mthreads: Mingw32/gcc, Lynx/gcc\n# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it\n#      doesn't hurt to check since this sometimes defines pthreads too;\n#      also defines -D_REENTRANT)\n#      ... -mt is also the pthreads flag for HP/aCC\n# pthread: Linux, etcetera\n# --thread-safe: KAI C++\n# pthread-config: use pthread-config program (for GNU Pth library)\n\ncase ${host_os} in\n        solaris*)\n\n        # On Solaris (at least, for some versions), libc contains stubbed\n        # (non-functional) versions of the pthreads routines, so link-based\n        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/\n        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather\n        # a function called by this macro, so we could check for that, but\n        # who knows whether they'll stub that too in a future libc.)  So,\n        # we'll just look for -pthreads and -lpthread first:\n\n        ax_pthread_flags=\"-pthreads pthread -mt -pthread $ax_pthread_flags\"\n        ;;\nesac\n\n# Clang doesn't consider unrecognized options an error unless we specify\n# -Werror. We throw in some extra Clang-specific options to ensure that\n# this doesn't happen for GCC, which also accepts -Werror.\n\nAC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])\nsave_CFLAGS=\"$CFLAGS\"\nax_pthread_extra_flags=\"-Werror\"\nCFLAGS=\"$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument\"\nAC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],\n                  [AC_MSG_RESULT([yes])],\n                  [ax_pthread_extra_flags=\n                   AC_MSG_RESULT([no])])\nCFLAGS=\"$save_CFLAGS\"\n\nif test x\"$ax_pthread_ok\" = xno; then\nfor flag in $ax_pthread_flags; do\n\n        case $flag in\n                none)\n                AC_MSG_CHECKING([whether pthreads work without any flags])\n                ;;\n\n                -*)\n                AC_MSG_CHECKING([whether pthreads work with $flag])\n                PTHREAD_CFLAGS=\"$flag\"\n                ;;\n\n                pthread-config)\n                AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])\n                if test x\"$ax_pthread_config\" = xno; then continue; fi\n                PTHREAD_CFLAGS=\"`pthread-config --cflags`\"\n                PTHREAD_LIBS=\"`pthread-config --ldflags` `pthread-config --libs`\"\n                ;;\n\n                *)\n                AC_MSG_CHECKING([for the pthreads library -l$flag])\n                PTHREAD_LIBS=\"-l$flag\"\n                ;;\n        esac\n\n        save_LIBS=\"$LIBS\"\n        save_CFLAGS=\"$CFLAGS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags\"\n\n        # Check for various functions.  We must include pthread.h,\n        # since some functions may be macros.  (On the Sequent, we\n        # need a special flag -Kthread to make this header compile.)\n        # We check for pthread_join because it is in -lpthread on IRIX\n        # while pthread_create is in libc.  We check for pthread_attr_init\n        # due to DEC craziness with -lpthreads.  We check for\n        # pthread_cleanup_push because it is one of the few pthread\n        # functions on Solaris that doesn't have a non-functional libc stub.\n        # We try pthread_create on general principles.\n        AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>\n                        static void routine(void *a) { a = 0; }\n                        static void *start_routine(void *a) { return a; }],\n                       [pthread_t th; pthread_attr_t attr;\n                        pthread_create(&th, 0, start_routine, 0);\n                        pthread_join(th, 0);\n                        pthread_attr_init(&attr);\n                        pthread_cleanup_push(routine, 0);\n                        pthread_cleanup_pop(0) /* ; */])],\n                [ax_pthread_ok=yes],\n                [])\n\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\n\n        AC_MSG_RESULT([$ax_pthread_ok])\n        if test \"x$ax_pthread_ok\" = xyes; then\n                break;\n        fi\n\n        PTHREAD_LIBS=\"\"\n        PTHREAD_CFLAGS=\"\"\ndone\nfi\n\n# Various other checks:\nif test \"x$ax_pthread_ok\" = xyes; then\n        save_LIBS=\"$LIBS\"\n        LIBS=\"$PTHREAD_LIBS $LIBS\"\n        save_CFLAGS=\"$CFLAGS\"\n        CFLAGS=\"$CFLAGS $PTHREAD_CFLAGS\"\n\n        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.\n        AC_MSG_CHECKING([for joinable pthread attribute])\n        attr_name=unknown\n        for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do\n            AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],\n                           [int attr = $attr; return attr /* ; */])],\n                [attr_name=$attr; break],\n                [])\n        done\n        AC_MSG_RESULT([$attr_name])\n        if test \"$attr_name\" != PTHREAD_CREATE_JOINABLE; then\n            AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],\n                               [Define to necessary symbol if this constant\n                                uses a non-standard name on your system.])\n        fi\n\n        AC_MSG_CHECKING([if more special flags are required for pthreads])\n        flag=no\n        case ${host_os} in\n            aix* | freebsd* | darwin*) flag=\"-D_THREAD_SAFE\";;\n            osf* | hpux*) flag=\"-D_REENTRANT\";;\n            solaris*)\n            if test \"$GCC\" = \"yes\"; then\n                flag=\"-D_REENTRANT\"\n            else\n                # TODO: What about Clang on Solaris?\n                flag=\"-mt -D_REENTRANT\"\n            fi\n            ;;\n        esac\n        AC_MSG_RESULT([$flag])\n        if test \"x$flag\" != xno; then\n            PTHREAD_CFLAGS=\"$flag $PTHREAD_CFLAGS\"\n        fi\n\n        AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],\n            [ax_cv_PTHREAD_PRIO_INHERIT], [\n                AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],\n                                                [[int i = PTHREAD_PRIO_INHERIT;]])],\n                    [ax_cv_PTHREAD_PRIO_INHERIT=yes],\n                    [ax_cv_PTHREAD_PRIO_INHERIT=no])\n            ])\n        AS_IF([test \"x$ax_cv_PTHREAD_PRIO_INHERIT\" = \"xyes\"],\n            [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])\n\n        LIBS=\"$save_LIBS\"\n        CFLAGS=\"$save_CFLAGS\"\n\n        # More AIX lossage: compile with *_r variant\n        if test \"x$GCC\" != xyes; then\n            case $host_os in\n                aix*)\n                AS_CASE([\"x/$CC\"],\n                  [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],\n                  [#handle absolute path differently from PATH based program lookup\n                   AS_CASE([\"x$CC\"],\n                     [x/*],\n                     [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC=\"${CC}_r\"])],\n                     [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])\n                ;;\n            esac\n        fi\nfi\n\ntest -n \"$PTHREAD_CC\" || PTHREAD_CC=\"$CC\"\n\nAC_SUBST([PTHREAD_LIBS])\nAC_SUBST([PTHREAD_CFLAGS])\nAC_SUBST([PTHREAD_CC])\n\n# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:\nif test x\"$ax_pthread_ok\" = xyes; then\n        ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])\n        :\nelse\n        ax_pthread_ok=no\n        $2\nfi\nAC_LANG_POP\n])dnl AX_PTHREAD\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/ax_tls.m4",
    "content": "# ===========================================================================\n#          http://www.gnu.org/software/autoconf-archive/ax_tls.html\n# ===========================================================================\n#\n# SYNOPSIS\n#\n#   AX_TLS([action-if-found], [action-if-not-found])\n#\n# DESCRIPTION\n#\n#   Provides a test for the compiler support of thread local storage (TLS)\n#   extensions. Defines TLS if it is found. Currently knows about GCC/ICC\n#   and MSVC. I think SunPro uses the same as GCC, and Borland apparently\n#   supports either.\n#\n# LICENSE\n#\n#   Copyright (c) 2008 Alan Woodland <ajw05@aber.ac.uk>\n#   Copyright (c) 2010 Diego Elio Petteno` <flameeyes@gmail.com>\n#\n#   This program is free software: you can redistribute it and/or modify it\n#   under the terms of the GNU General Public License as published by the\n#   Free Software Foundation, either version 3 of the License, or (at your\n#   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 General\n#   Public License for more details.\n#\n#   You should have received a copy of the GNU General Public License along\n#   with this program. If not, see <http://www.gnu.org/licenses/>.\n#\n#   As a special exception, the respective Autoconf Macro's copyright owner\n#   gives unlimited permission to copy, distribute and modify the configure\n#   scripts that are the output of Autoconf when processing the Macro. You\n#   need not follow the terms of the GNU General Public License when using\n#   or distributing such scripts, even though portions of the text of the\n#   Macro appear in them. The GNU General Public License (GPL) does govern\n#   all other use of the material that constitutes the Autoconf Macro.\n#\n#   This special exception to the GPL applies to versions of the Autoconf\n#   Macro released by the Autoconf Archive. When you make and distribute a\n#   modified version of the Autoconf Macro, you may extend this special\n#   exception to the GPL to apply to your modified version as well.\n\n#serial 11\n\nAC_DEFUN([AX_TLS], [\n  AC_MSG_CHECKING([for thread local storage (TLS) class])\n  AC_CACHE_VAL([ac_cv_tls],\n   [for ax_tls_keyword in __thread '__declspec(thread)' none; do\n       AS_CASE([$ax_tls_keyword],\n          [none], [ac_cv_tls=none ; break],\n          [AC_TRY_COMPILE(\n              [#include <stdlib.h>\n               static void\n               foo(void) {\n               static ] $ax_tls_keyword [ int bar;\n               exit(1);\n               }],\n               [],\n               [ac_cv_tls=$ax_tls_keyword ; break],\n               ac_cv_tls=none\n           )])\n    done\n  ])\n  AC_MSG_RESULT([$ac_cv_tls])\n\n  AS_IF([test \"$ac_cv_tls\" != \"none\"],\n    [AC_DEFINE_UNQUOTED([TLS],[$ac_cv_tls],[If the compiler supports a TLS storage class define it to that here])\n     m4_ifnblank([$1],[$1])],\n    [m4_ifnblank([$2],[$2])])\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/inet_ntop.m4",
    "content": "# inet_ntop.m4 serial 19\ndnl Copyright (C) 2005-2006, 2008-2013 Free Software Foundation, Inc.\ndnl This file is free software; the Free Software Foundation\ndnl gives unlimited permission to copy and/or distribute it,\ndnl with or without modifications, as long as this notice is preserved.\n\nAC_DEFUN([ss_FUNC_INET_NTOP],\n[\n  AC_REQUIRE([AC_C_RESTRICT])\n\n  dnl Most platforms that provide inet_ntop define it in libc.\n  dnl Solaris 8..10 provide inet_ntop in libnsl instead.\n  dnl Solaris 2.6..7 provide inet_ntop in libresolv instead.\n  HAVE_INET_NTOP=1\n  INET_NTOP_LIB=\n  ss_save_LIBS=$LIBS\n  AC_SEARCH_LIBS([inet_ntop], [nsl resolv], [],\n    [AC_CHECK_FUNCS([inet_ntop])\n     if test $ac_cv_func_inet_ntop = no; then\n       HAVE_INET_NTOP=0\n     fi\n    ])\n  LIBS=$ss_save_LIBS\n\n  if test \"$ac_cv_search_inet_ntop\" != \"no\" \\\n     && test \"$ac_cv_search_inet_ntop\" != \"none required\"; then\n    INET_NTOP_LIB=\"$ac_cv_search_inet_ntop\"\n  fi\n\n  AC_CHECK_HEADERS_ONCE([netdb.h])\n  AC_CHECK_DECLS([inet_ntop],,,\n    [[#include <arpa/inet.h>\n      #if HAVE_NETDB_H\n      # include <netdb.h>\n      #endif\n    ]])\n  if test $ac_cv_have_decl_inet_ntop = no; then\n    HAVE_DECL_INET_NTOP=0\n  fi\n  AC_SUBST([INET_NTOP_LIB])\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/libtool.m4",
    "content": "# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-\n#\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\nm4_define([_LT_COPYING], [dnl\n#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,\n#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software\n#                 Foundation, Inc.\n#   Written by Gordon Matzigkeit, 1996\n#\n#   This file is part of GNU Libtool.\n#\n# GNU Libtool 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 of\n# the License, or (at your option) any later version.\n#\n# As a special exception to the GNU General Public License,\n# if you distribute this file as part of a program or library that\n# is built using GNU Libtool, you may include this file under the\n# same distribution terms that you use for the rest of that program.\n#\n# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy\n# can be downloaded from http://www.gnu.org/licenses/gpl.html, or\n# obtained by writing to the Free Software Foundation, Inc.,\n# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n])\n\n# serial 57 LT_INIT\n\n\n# LT_PREREQ(VERSION)\n# ------------------\n# Complain and exit if this libtool version is less that VERSION.\nm4_defun([LT_PREREQ],\n[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,\n       [m4_default([$3],\n\t\t   [m4_fatal([Libtool version $1 or higher is required],\n\t\t             63)])],\n       [$2])])\n\n\n# _LT_CHECK_BUILDDIR\n# ------------------\n# Complain if the absolute build directory name contains unusual characters\nm4_defun([_LT_CHECK_BUILDDIR],\n[case `pwd` in\n  *\\ * | *\\\t*)\n    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;\nesac\n])\n\n\n# LT_INIT([OPTIONS])\n# ------------------\nAC_DEFUN([LT_INIT],\n[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT\nAC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl\nAC_BEFORE([$0], [LT_LANG])dnl\nAC_BEFORE([$0], [LT_OUTPUT])dnl\nAC_BEFORE([$0], [LTDL_INIT])dnl\nm4_require([_LT_CHECK_BUILDDIR])dnl\n\ndnl Autoconf doesn't catch unexpanded LT_ macros by default:\nm4_pattern_forbid([^_?LT_[A-Z_]+$])dnl\nm4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl\ndnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4\ndnl unless we require an AC_DEFUNed macro:\nAC_REQUIRE([LTOPTIONS_VERSION])dnl\nAC_REQUIRE([LTSUGAR_VERSION])dnl\nAC_REQUIRE([LTVERSION_VERSION])dnl\nAC_REQUIRE([LTOBSOLETE_VERSION])dnl\nm4_require([_LT_PROG_LTMAIN])dnl\n\n_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])\n\ndnl Parse OPTIONS\n_LT_SET_OPTIONS([$0], [$1])\n\n# This can be used to rebuild libtool when needed\nLIBTOOL_DEPS=\"$ltmain\"\n\n# Always use our own libtool.\nLIBTOOL='$(SHELL) $(top_builddir)/libtool'\nAC_SUBST(LIBTOOL)dnl\n\n_LT_SETUP\n\n# Only expand once:\nm4_define([LT_INIT])\n])# LT_INIT\n\n# Old names:\nAU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])\nAU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PROG_LIBTOOL], [])\ndnl AC_DEFUN([AM_PROG_LIBTOOL], [])\n\n\n# _LT_CC_BASENAME(CC)\n# -------------------\n# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.\nm4_defun([_LT_CC_BASENAME],\n[for cc_temp in $1\"\"; do\n  case $cc_temp in\n    compile | *[[\\\\/]]compile | ccache | *[[\\\\/]]ccache ) ;;\n    distcc | *[[\\\\/]]distcc | purify | *[[\\\\/]]purify ) ;;\n    \\-*) ;;\n    *) break;;\n  esac\ndone\ncc_basename=`$ECHO \"$cc_temp\" | $SED \"s%.*/%%; s%^$host_alias-%%\"`\n])\n\n\n# _LT_FILEUTILS_DEFAULTS\n# ----------------------\n# It is okay to use these file commands and assume they have been set\n# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.\nm4_defun([_LT_FILEUTILS_DEFAULTS],\n[: ${CP=\"cp -f\"}\n: ${MV=\"mv -f\"}\n: ${RM=\"rm -f\"}\n])# _LT_FILEUTILS_DEFAULTS\n\n\n# _LT_SETUP\n# ---------\nm4_defun([_LT_SETUP],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nAC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl\nAC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl\n\n_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl\ndnl\n_LT_DECL([], [host_alias], [0], [The host system])dnl\n_LT_DECL([], [host], [0])dnl\n_LT_DECL([], [host_os], [0])dnl\ndnl\n_LT_DECL([], [build_alias], [0], [The build system])dnl\n_LT_DECL([], [build], [0])dnl\n_LT_DECL([], [build_os], [0])dnl\ndnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\ndnl\nAC_REQUIRE([AC_PROG_LN_S])dnl\ntest -z \"$LN_S\" && LN_S=\"ln -s\"\n_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl\ndnl\nAC_REQUIRE([LT_CMD_MAX_LEN])dnl\n_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally \"o\")])dnl\n_LT_DECL([], [exeext], [0], [Executable file suffix (normally \"\")])dnl\ndnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_CHECK_SHELL_FEATURES])dnl\nm4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl\nm4_require([_LT_CMD_RELOAD])dnl\nm4_require([_LT_CHECK_MAGIC_METHOD])dnl\nm4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl\nm4_require([_LT_CMD_OLD_ARCHIVE])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\nm4_require([_LT_WITH_SYSROOT])dnl\n\n_LT_CONFIG_LIBTOOL_INIT([\n# See if we are running on zsh, and set the options which allow our\n# commands through without removal of \\ escapes INIT.\nif test -n \"\\${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n])\nif test -n \"${ZSH_VERSION+set}\" ; then\n   setopt NO_GLOB_SUBST\nfi\n\n_LT_CHECK_OBJDIR\n\nm4_require([_LT_TAG_COMPILER])dnl\n\ncase $host_os in\naix3*)\n  # AIX sometimes has problems with the GCC collect2 program.  For some\n  # reason, if we set the COLLECT_NAMES environment variable, the problems\n  # vanish in a puff of smoke.\n  if test \"X${COLLECT_NAMES+set}\" != Xset; then\n    COLLECT_NAMES=\n    export COLLECT_NAMES\n  fi\n  ;;\nesac\n\n# Global variables:\nofile=libtool\ncan_build_shared=yes\n\n# All known linkers require a `.a' archive for static linking (except MSVC,\n# which needs '.lib').\nlibext=a\n\nwith_gnu_ld=\"$lt_cv_prog_gnu_ld\"\n\nold_CC=\"$CC\"\nold_CFLAGS=\"$CFLAGS\"\n\n# Set sane defaults for various variables\ntest -z \"$CC\" && CC=cc\ntest -z \"$LTCC\" && LTCC=$CC\ntest -z \"$LTCFLAGS\" && LTCFLAGS=$CFLAGS\ntest -z \"$LD\" && LD=ld\ntest -z \"$ac_objext\" && ac_objext=o\n\n_LT_CC_BASENAME([$compiler])\n\n# Only perform the check for file, if the check method requires it\ntest -z \"$MAGIC_CMD\" && MAGIC_CMD=file\ncase $deplibs_check_method in\nfile_magic*)\n  if test \"$file_magic_cmd\" = '$MAGIC_CMD'; then\n    _LT_PATH_MAGIC\n  fi\n  ;;\nesac\n\n# Use C for the default configuration in the libtool script\nLT_SUPPORTED_TAG([CC])\n_LT_LANG_C_CONFIG\n_LT_LANG_DEFAULT_CONFIG\n_LT_CONFIG_COMMANDS\n])# _LT_SETUP\n\n\n# _LT_PREPARE_SED_QUOTE_VARS\n# --------------------------\n# Define a few sed substitution that help us do robust quoting.\nm4_defun([_LT_PREPARE_SED_QUOTE_VARS],\n[# Backslashify metacharacters that are still active within\n# double-quoted strings.\nsed_quote_subst='s/\\([[\"`$\\\\]]\\)/\\\\\\1/g'\n\n# Same as above, but do not quote variable references.\ndouble_quote_subst='s/\\([[\"`\\\\]]\\)/\\\\\\1/g'\n\n# Sed substitution to delay expansion of an escaped shell variable in a\n# double_quote_subst'ed string.\ndelay_variable_subst='s/\\\\\\\\\\\\\\\\\\\\\\$/\\\\\\\\\\\\$/g'\n\n# Sed substitution to delay expansion of an escaped single quote.\ndelay_single_quote_subst='s/'\\''/'\\'\\\\\\\\\\\\\\'\\''/g'\n\n# Sed substitution to avoid accidental globbing in evaled expressions\nno_glob_subst='s/\\*/\\\\\\*/g'\n])\n\n# _LT_PROG_LTMAIN\n# ---------------\n# Note that this code is called both from `configure', and `config.status'\n# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,\n# `config.status' has no value for ac_aux_dir unless we are using Automake,\n# so we pass a copy along to make sure it has a sensible value anyway.\nm4_defun([_LT_PROG_LTMAIN],\n[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl\n_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])\nltmain=\"$ac_aux_dir/ltmain.sh\"\n])# _LT_PROG_LTMAIN\n\n\n## ------------------------------------- ##\n## Accumulate code for creating libtool. ##\n## ------------------------------------- ##\n\n# So that we can recreate a full libtool script including additional\n# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS\n# in macros and then make a single call at the end using the `libtool'\n# label.\n\n\n# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])\n# ----------------------------------------\n# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL_INIT],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_INIT])\n\n\n# _LT_CONFIG_LIBTOOL([COMMANDS])\n# ------------------------------\n# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.\nm4_define([_LT_CONFIG_LIBTOOL],\n[m4_ifval([$1],\n          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],\n                     [$1\n])])])\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])\n\n\n# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])\n# -----------------------------------------------------\nm4_defun([_LT_CONFIG_SAVE_COMMANDS],\n[_LT_CONFIG_LIBTOOL([$1])\n_LT_CONFIG_LIBTOOL_INIT([$2])\n])\n\n\n# _LT_FORMAT_COMMENT([COMMENT])\n# -----------------------------\n# Add leading comment marks to the start of each line, and a trailing\n# full-stop to the whole comment if one is not present already.\nm4_define([_LT_FORMAT_COMMENT],\n[m4_ifval([$1], [\nm4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],\n              [['`$\\]], [\\\\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])\n)])\n\n\n\n## ------------------------ ##\n## FIXME: Eliminate VARNAME ##\n## ------------------------ ##\n\n\n# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])\n# -------------------------------------------------------------------\n# CONFIGNAME is the name given to the value in the libtool script.\n# VARNAME is the (base) name used in the configure script.\n# VALUE may be 0, 1 or 2 for a computed quote escaped value based on\n# VARNAME.  Any other value will be used directly.\nm4_define([_LT_DECL],\n[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],\n    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],\n\t[m4_ifval([$1], [$1], [$2])])\n    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])\n    m4_ifval([$4],\n\t[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])\n    lt_dict_add_subkey([lt_decl_dict], [$2],\n\t[tagged?], [m4_ifval([$5], [yes], [no])])])\n])\n\n\n# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])\n# --------------------------------------------------------\nm4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])\n\n\n# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_tag_varnames],\n[_lt_decl_filter([tagged?], [yes], $@)])\n\n\n# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])\n# ---------------------------------------------------------\nm4_define([_lt_decl_filter],\n[m4_case([$#],\n  [0], [m4_fatal([$0: too few arguments: $#])],\n  [1], [m4_fatal([$0: too few arguments: $#: $1])],\n  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],\n  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],\n  [lt_dict_filter([lt_decl_dict], $@)])[]dnl\n])\n\n\n# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])\n# --------------------------------------------------\nm4_define([lt_decl_quote_varnames],\n[_lt_decl_filter([value], [1], $@)])\n\n\n# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_dquote_varnames],\n[_lt_decl_filter([value], [2], $@)])\n\n\n# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])\n# ---------------------------------------------------\nm4_define([lt_decl_varnames_tagged],\n[m4_assert([$# <= 2])dnl\n_$0(m4_quote(m4_default([$1], [[, ]])),\n    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),\n    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])\nm4_define([_lt_decl_varnames_tagged],\n[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])\n\n\n# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])\n# ------------------------------------------------\nm4_define([lt_decl_all_varnames],\n[_$0(m4_quote(m4_default([$1], [[, ]])),\n     m4_if([$2], [],\n\t   m4_quote(lt_decl_varnames),\n\tm4_quote(m4_shift($@))))[]dnl\n])\nm4_define([_lt_decl_all_varnames],\n[lt_join($@, lt_decl_varnames_tagged([$1],\n\t\t\tlt_decl_tag_varnames([[, ]], m4_shift($@))))dnl\n])\n\n\n# _LT_CONFIG_STATUS_DECLARE([VARNAME])\n# ------------------------------------\n# Quote a variable value, and forward it to `config.status' so that its\n# declaration there will have the same value as in `configure'.  VARNAME\n# must have a single quote delimited value for this to work.\nm4_define([_LT_CONFIG_STATUS_DECLARE],\n[$1='`$ECHO \"$][$1\" | $SED \"$delay_single_quote_subst\"`'])\n\n\n# _LT_CONFIG_STATUS_DECLARATIONS\n# ------------------------------\n# We delimit libtool config variables with single quotes, so when\n# we write them to config.status, we have to be sure to quote all\n# embedded single quotes properly.  In configure, this macro expands\n# each variable declared with _LT_DECL (and _LT_TAGDECL) into:\n#\n#    <var>='`$ECHO \"$<var>\" | $SED \"$delay_single_quote_subst\"`'\nm4_defun([_LT_CONFIG_STATUS_DECLARATIONS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),\n    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAGS\n# ----------------\n# Output comment and list of tags supported by the script\nm4_defun([_LT_LIBTOOL_TAGS],\n[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl\navailable_tags=\"_LT_TAGS\"dnl\n])\n\n\n# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])\n# -----------------------------------\n# Extract the dictionary values for VARNAME (optionally with TAG) and\n# expand to a commented shell variable setting:\n#\n#    # Some comment about what VAR is for.\n#    visible_name=$lt_internal_name\nm4_define([_LT_LIBTOOL_DECLARE],\n[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],\n\t\t\t\t\t   [description])))[]dnl\nm4_pushdef([_libtool_name],\n    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl\nm4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),\n    [0], [_libtool_name=[$]$1],\n    [1], [_libtool_name=$lt_[]$1],\n    [2], [_libtool_name=$lt_[]$1],\n    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl\nm4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl\n])\n\n\n# _LT_LIBTOOL_CONFIG_VARS\n# -----------------------\n# Produce commented declarations of non-tagged libtool config variables\n# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'\n# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG\n# section) are produced by _LT_LIBTOOL_TAG_VARS.\nm4_defun([_LT_LIBTOOL_CONFIG_VARS],\n[m4_foreach([_lt_var],\n    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])\n\n\n# _LT_LIBTOOL_TAG_VARS(TAG)\n# -------------------------\nm4_define([_LT_LIBTOOL_TAG_VARS],\n[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),\n    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])\n\n\n# _LT_TAGVAR(VARNAME, [TAGNAME])\n# ------------------------------\nm4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])\n\n\n# _LT_CONFIG_COMMANDS\n# -------------------\n# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of\n# variables for single and double quote escaping we saved from calls\n# to _LT_DECL, we can put quote escaped variables declarations\n# into `config.status', and then the shell code to quote escape them in\n# for loops in `config.status'.  Finally, any additional code accumulated\n# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.\nm4_defun([_LT_CONFIG_COMMANDS],\n[AC_PROVIDE_IFELSE([LT_OUTPUT],\n\tdnl If the libtool generation code has been placed in $CONFIG_LT,\n\tdnl instead of duplicating it all over again into config.status,\n\tdnl then we will have config.status run $CONFIG_LT later, so it\n\tdnl needs to know what name is stored there:\n        [AC_CONFIG_COMMANDS([libtool],\n            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],\n    dnl If the libtool generation code is destined for config.status,\n    dnl expand the accumulated commands and init code now:\n    [AC_CONFIG_COMMANDS([libtool],\n        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])\n])#_LT_CONFIG_COMMANDS\n\n\n# Initialize.\nm4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],\n[\n\n# The HP-UX ksh and POSIX shell print the target directory to stdout\n# if CDPATH is set.\n(unset CDPATH) >/dev/null 2>&1 && unset CDPATH\n\nsed_quote_subst='$sed_quote_subst'\ndouble_quote_subst='$double_quote_subst'\ndelay_variable_subst='$delay_variable_subst'\n_LT_CONFIG_STATUS_DECLARATIONS\nLTCC='$LTCC'\nLTCFLAGS='$LTCFLAGS'\ncompiler='$compiler_DEFAULT'\n\n# A function that is used when there is no print builtin or printf.\nfunc_fallback_echo ()\n{\n  eval 'cat <<_LTECHO_EOF\n\\$[]1\n_LTECHO_EOF'\n}\n\n# Quote evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_quote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED \\\\\"\\\\\\$sed_quote_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n# Double-quote double-evaled strings.\nfor var in lt_decl_all_varnames([[ \\\n]], lt_decl_dquote_varnames); do\n    case \\`eval \\\\\\\\\\$ECHO \\\\\\\\\"\"\\\\\\\\\\$\\$var\"\\\\\\\\\"\\` in\n    *[[\\\\\\\\\\\\\\`\\\\\"\\\\\\$]]*)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\`\\\\\\$ECHO \\\\\"\\\\\\$\\$var\\\\\" | \\\\\\$SED -e \\\\\"\\\\\\$double_quote_subst\\\\\" -e \\\\\"\\\\\\$sed_quote_subst\\\\\" -e \\\\\"\\\\\\$delay_variable_subst\\\\\"\\\\\\`\\\\\\\\\\\\\"\"\n      ;;\n    *)\n      eval \"lt_\\$var=\\\\\\\\\\\\\"\\\\\\$\\$var\\\\\\\\\\\\\"\"\n      ;;\n    esac\ndone\n\n_LT_OUTPUT_LIBTOOL_INIT\n])\n\n# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])\n# ------------------------------------\n# Generate a child script FILE with all initialization necessary to\n# reuse the environment learned by the parent script, and make the\n# file executable.  If COMMENT is supplied, it is inserted after the\n# `#!' sequence but before initialization text begins.  After this\n# macro, additional text can be appended to FILE to form the body of\n# the child script.  The macro ends with non-zero status if the\n# file could not be fully written (such as if the disk is full).\nm4_ifdef([AS_INIT_GENERATED],\n[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],\n[m4_defun([_LT_GENERATED_FILE_INIT],\n[m4_require([AS_PREPARE])]dnl\n[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl\n[lt_write_fail=0\ncat >$1 <<_ASEOF || lt_write_fail=1\n#! $SHELL\n# Generated by $as_me.\n$2\nSHELL=\\${CONFIG_SHELL-$SHELL}\nexport SHELL\n_ASEOF\ncat >>$1 <<\\_ASEOF || lt_write_fail=1\nAS_SHELL_SANITIZE\n_AS_PREPARE\nexec AS_MESSAGE_FD>&1\n_ASEOF\ntest $lt_write_fail = 0 && chmod +x $1[]dnl\nm4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT\n\n# LT_OUTPUT\n# ---------\n# This macro allows early generation of the libtool script (before\n# AC_OUTPUT is called), incase it is used in configure for compilation\n# tests.\nAC_DEFUN([LT_OUTPUT],\n[: ${CONFIG_LT=./config.lt}\nAC_MSG_NOTICE([creating $CONFIG_LT])\n_LT_GENERATED_FILE_INIT([\"$CONFIG_LT\"],\n[# Run this file to recreate a libtool stub with the current configuration.])\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nlt_cl_silent=false\nexec AS_MESSAGE_LOG_FD>>config.log\n{\n  echo\n  AS_BOX([Running $as_me.])\n} >&AS_MESSAGE_LOG_FD\n\nlt_cl_help=\"\\\n\\`$as_me' creates a local libtool stub from the current configuration,\nfor use in further configure time tests before the real libtool is\ngenerated.\n\nUsage: $[0] [[OPTIONS]]\n\n  -h, --help      print this help, then exit\n  -V, --version   print version number, then exit\n  -q, --quiet     do not print progress messages\n  -d, --debug     don't remove temporary files\n\nReport bugs to <bug-libtool@gnu.org>.\"\n\nlt_cl_version=\"\\\nm4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl\nm4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])\nconfigured by $[0], generated by m4_PACKAGE_STRING.\n\nCopyright (C) 2011 Free Software Foundation, Inc.\nThis config.lt script is free software; the Free Software Foundation\ngives unlimited permision to copy, distribute and modify it.\"\n\nwhile test $[#] != 0\ndo\n  case $[1] in\n    --version | --v* | -V )\n      echo \"$lt_cl_version\"; exit 0 ;;\n    --help | --h* | -h )\n      echo \"$lt_cl_help\"; exit 0 ;;\n    --debug | --d* | -d )\n      debug=: ;;\n    --quiet | --q* | --silent | --s* | -q )\n      lt_cl_silent=: ;;\n\n    -*) AC_MSG_ERROR([unrecognized option: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n\n    *) AC_MSG_ERROR([unrecognized argument: $[1]\nTry \\`$[0] --help' for more information.]) ;;\n  esac\n  shift\ndone\n\nif $lt_cl_silent; then\n  exec AS_MESSAGE_FD>/dev/null\nfi\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<_LTEOF\n_LT_OUTPUT_LIBTOOL_COMMANDS_INIT\n_LTEOF\n\ncat >>\"$CONFIG_LT\" <<\\_LTEOF\nAC_MSG_NOTICE([creating $ofile])\n_LT_OUTPUT_LIBTOOL_COMMANDS\nAS_EXIT(0)\n_LTEOF\nchmod +x \"$CONFIG_LT\"\n\n# configure is writing to config.log, but config.lt does its own redirection,\n# appending to config.log, which fails on DOS, as config.log is still kept\n# open by configure.  Here we exec the FD to /dev/null, effectively closing\n# config.log, so it can be properly (re)opened and appended to by config.lt.\nlt_cl_success=:\ntest \"$silent\" = yes &&\n  lt_config_lt_args=\"$lt_config_lt_args --quiet\"\nexec AS_MESSAGE_LOG_FD>/dev/null\n$SHELL \"$CONFIG_LT\" $lt_config_lt_args || lt_cl_success=false\nexec AS_MESSAGE_LOG_FD>>config.log\n$lt_cl_success || AS_EXIT(1)\n])# LT_OUTPUT\n\n\n# _LT_CONFIG(TAG)\n# ---------------\n# If TAG is the built-in tag, create an initial libtool script with a\n# default configuration from the untagged config vars.  Otherwise add code\n# to config.status for appending the configuration named by TAG from the\n# matching tagged config vars.\nm4_defun([_LT_CONFIG],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_CONFIG_SAVE_COMMANDS([\n  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl\n  m4_if(_LT_TAG, [C], [\n    # See if we are running on zsh, and set the options which allow our\n    # commands through without removal of \\ escapes.\n    if test -n \"${ZSH_VERSION+set}\" ; then\n      setopt NO_GLOB_SUBST\n    fi\n\n    cfgfile=\"${ofile}T\"\n    trap \"$RM \\\"$cfgfile\\\"; exit 1\" 1 2 15\n    $RM \"$cfgfile\"\n\n    cat <<_LT_EOF >> \"$cfgfile\"\n#! $SHELL\n\n# `$ECHO \"$ofile\" | sed 's%^.*/%%'` - Provide generalized library-building support services.\n# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION\n# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:\n# NOTE: Changes made to this file will be lost: look at ltmain.sh.\n#\n_LT_COPYING\n_LT_LIBTOOL_TAGS\n\n# ### BEGIN LIBTOOL CONFIG\n_LT_LIBTOOL_CONFIG_VARS\n_LT_LIBTOOL_TAG_VARS\n# ### END LIBTOOL CONFIG\n\n_LT_EOF\n\n  case $host_os in\n  aix3*)\n    cat <<\\_LT_EOF >> \"$cfgfile\"\n# AIX sometimes has problems with the GCC collect2 program.  For some\n# reason, if we set the COLLECT_NAMES environment variable, the problems\n# vanish in a puff of smoke.\nif test \"X${COLLECT_NAMES+set}\" != Xset; then\n  COLLECT_NAMES=\n  export COLLECT_NAMES\nfi\n_LT_EOF\n    ;;\n  esac\n\n  _LT_PROG_LTMAIN\n\n  # We use sed instead of cat because bash on DJGPP gets confused if\n  # if finds mixed CR/LF and LF-only lines.  Since sed operates in\n  # text mode, it properly converts lines to CR/LF.  This bash problem\n  # is reportedly fixed, but why not run on old versions too?\n  sed '$q' \"$ltmain\" >> \"$cfgfile\" \\\n     || (rm -f \"$cfgfile\"; exit 1)\n\n  _LT_PROG_REPLACE_SHELLFNS\n\n   mv -f \"$cfgfile\" \"$ofile\" ||\n    (rm -f \"$ofile\" && cp \"$cfgfile\" \"$ofile\" && rm -f \"$cfgfile\")\n  chmod +x \"$ofile\"\n],\n[cat <<_LT_EOF >> \"$ofile\"\n\ndnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded\ndnl in a comment (ie after a #).\n# ### BEGIN LIBTOOL TAG CONFIG: $1\n_LT_LIBTOOL_TAG_VARS(_LT_TAG)\n# ### END LIBTOOL TAG CONFIG: $1\n_LT_EOF\n])dnl /m4_if\n],\n[m4_if([$1], [], [\n    PACKAGE='$PACKAGE'\n    VERSION='$VERSION'\n    TIMESTAMP='$TIMESTAMP'\n    RM='$RM'\n    ofile='$ofile'], [])\n])dnl /_LT_CONFIG_SAVE_COMMANDS\n])# _LT_CONFIG\n\n\n# LT_SUPPORTED_TAG(TAG)\n# ---------------------\n# Trace this macro to discover what tags are supported by the libtool\n# --tag option, using:\n#    autoconf --trace 'LT_SUPPORTED_TAG:$1'\nAC_DEFUN([LT_SUPPORTED_TAG], [])\n\n\n# C support is built-in for now\nm4_define([_LT_LANG_C_enabled], [])\nm4_define([_LT_TAGS], [])\n\n\n# LT_LANG(LANG)\n# -------------\n# Enable libtool support for the given language if not already enabled.\nAC_DEFUN([LT_LANG],\n[AC_BEFORE([$0], [LT_OUTPUT])dnl\nm4_case([$1],\n  [C],\t\t\t[_LT_LANG(C)],\n  [C++],\t\t[_LT_LANG(CXX)],\n  [Go],\t\t\t[_LT_LANG(GO)],\n  [Java],\t\t[_LT_LANG(GCJ)],\n  [Fortran 77],\t\t[_LT_LANG(F77)],\n  [Fortran],\t\t[_LT_LANG(FC)],\n  [Windows Resource],\t[_LT_LANG(RC)],\n  [m4_ifdef([_LT_LANG_]$1[_CONFIG],\n    [_LT_LANG($1)],\n    [m4_fatal([$0: unsupported language: \"$1\"])])])dnl\n])# LT_LANG\n\n\n# _LT_LANG(LANGNAME)\n# ------------------\nm4_defun([_LT_LANG],\n[m4_ifdef([_LT_LANG_]$1[_enabled], [],\n  [LT_SUPPORTED_TAG([$1])dnl\n  m4_append([_LT_TAGS], [$1 ])dnl\n  m4_define([_LT_LANG_]$1[_enabled], [])dnl\n  _LT_LANG_$1_CONFIG($1)])dnl\n])# _LT_LANG\n\n\nm4_ifndef([AC_PROG_GO], [\n############################################################\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_GO.  When it is available in    #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\n############################################################\nm4_defun([AC_PROG_GO],\n[AC_LANG_PUSH(Go)dnl\nAC_ARG_VAR([GOC],     [Go compiler command])dnl\nAC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl\n_AC_ARG_VAR_LDFLAGS()dnl\nAC_CHECK_TOOL(GOC, gccgo)\nif test -z \"$GOC\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])\n  fi\nfi\nif test -z \"$GOC\"; then\n  AC_CHECK_PROG(GOC, gccgo, gccgo, false)\nfi\n])#m4_defun\n])#m4_ifndef\n\n\n# _LT_LANG_DEFAULT_CONFIG\n# -----------------------\nm4_defun([_LT_LANG_DEFAULT_CONFIG],\n[AC_PROVIDE_IFELSE([AC_PROG_CXX],\n  [LT_LANG(CXX)],\n  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_F77],\n  [LT_LANG(F77)],\n  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])\n\nAC_PROVIDE_IFELSE([AC_PROG_FC],\n  [LT_LANG(FC)],\n  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])\n\ndnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal\ndnl pulling things in needlessly.\nAC_PROVIDE_IFELSE([AC_PROG_GCJ],\n  [LT_LANG(GCJ)],\n  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],\n    [LT_LANG(GCJ)],\n    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],\n      [LT_LANG(GCJ)],\n      [m4_ifdef([AC_PROG_GCJ],\n\t[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([A][M_PROG_GCJ],\n\t[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])\n       m4_ifdef([LT_PROG_GCJ],\n\t[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])\n\nAC_PROVIDE_IFELSE([AC_PROG_GO],\n  [LT_LANG(GO)],\n  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])\n\nAC_PROVIDE_IFELSE([LT_PROG_RC],\n  [LT_LANG(RC)],\n  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])\n])# _LT_LANG_DEFAULT_CONFIG\n\n# Obsolete macros:\nAU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])\nAU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])\nAU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])\nAU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])\nAU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_CXX], [])\ndnl AC_DEFUN([AC_LIBTOOL_F77], [])\ndnl AC_DEFUN([AC_LIBTOOL_FC], [])\ndnl AC_DEFUN([AC_LIBTOOL_GCJ], [])\ndnl AC_DEFUN([AC_LIBTOOL_RC], [])\n\n\n# _LT_TAG_COMPILER\n# ----------------\nm4_defun([_LT_TAG_COMPILER],\n[AC_REQUIRE([AC_PROG_CC])dnl\n\n_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl\n_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl\n_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl\n_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl\n\n# If no C compiler was specified, use CC.\nLTCC=${LTCC-\"$CC\"}\n\n# If no C compiler flags were specified, use CFLAGS.\nLTCFLAGS=${LTCFLAGS-\"$CFLAGS\"}\n\n# Allow CC to be a program name with arguments.\ncompiler=$CC\n])# _LT_TAG_COMPILER\n\n\n# _LT_COMPILER_BOILERPLATE\n# ------------------------\n# Check for compiler boilerplate output or warnings with\n# the simple compiler test code.\nm4_defun([_LT_COMPILER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_compile_test_code\" >conftest.$ac_ext\neval \"$ac_compile\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_compiler_boilerplate=`cat conftest.err`\n$RM conftest*\n])# _LT_COMPILER_BOILERPLATE\n\n\n# _LT_LINKER_BOILERPLATE\n# ----------------------\n# Check for linker boilerplate output or warnings with\n# the simple link test code.\nm4_defun([_LT_LINKER_BOILERPLATE],\n[m4_require([_LT_DECL_SED])dnl\nac_outfile=conftest.$ac_objext\necho \"$lt_simple_link_test_code\" >conftest.$ac_ext\neval \"$ac_link\" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err\n_lt_linker_boilerplate=`cat conftest.err`\n$RM -r conftest*\n])# _LT_LINKER_BOILERPLATE\n\n# _LT_REQUIRED_DARWIN_CHECKS\n# -------------------------\nm4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[\n  case $host_os in\n    rhapsody* | darwin*)\n    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])\n    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])\n    AC_CHECK_TOOL([LIPO], [lipo], [:])\n    AC_CHECK_TOOL([OTOOL], [otool], [:])\n    AC_CHECK_TOOL([OTOOL64], [otool64], [:])\n    _LT_DECL([], [DSYMUTIL], [1],\n      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])\n    _LT_DECL([], [NMEDIT], [1],\n      [Tool to change global to local symbols on Mac OS X])\n    _LT_DECL([], [LIPO], [1],\n      [Tool to manipulate fat objects and archives on Mac OS X])\n    _LT_DECL([], [OTOOL], [1],\n      [ldd/readelf like tool for Mach-O binaries on Mac OS X])\n    _LT_DECL([], [OTOOL64], [1],\n      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])\n\n    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],\n      [lt_cv_apple_cc_single_mod=no\n      if test -z \"${LT_MULTI_MODULE}\"; then\n\t# By default we will add the -single_module flag. You can override\n\t# by either setting the environment variable LT_MULTI_MODULE\n\t# non-empty at configure time, or by adding -multi_module to the\n\t# link flags.\n\trm -rf libconftest.dylib*\n\techo \"int foo(void){return 1;}\" > conftest.c\n\techo \"$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n-dynamiclib -Wl,-single_module conftest.c\" >&AS_MESSAGE_LOG_FD\n\t$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \\\n\t  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err\n        _lt_result=$?\n\t# If there is a non-empty error log, and \"single_module\"\n\t# appears in it, assume the flag caused a linker warning\n        if test -s conftest.err && $GREP single_module conftest.err; then\n\t  cat conftest.err >&AS_MESSAGE_LOG_FD\n\t# Otherwise, if the output was created with a 0 exit code from\n\t# the compiler, it worked.\n\telif test -f libconftest.dylib && test $_lt_result -eq 0; then\n\t  lt_cv_apple_cc_single_mod=yes\n\telse\n\t  cat conftest.err >&AS_MESSAGE_LOG_FD\n\tfi\n\trm -rf libconftest.dylib*\n\trm -f conftest.*\n      fi])\n\n    AC_CACHE_CHECK([for -exported_symbols_list linker flag],\n      [lt_cv_ld_exported_symbols_list],\n      [lt_cv_ld_exported_symbols_list=no\n      save_LDFLAGS=$LDFLAGS\n      echo \"_main\" > conftest.sym\n      LDFLAGS=\"$LDFLAGS -Wl,-exported_symbols_list,conftest.sym\"\n      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n\t[lt_cv_ld_exported_symbols_list=yes],\n\t[lt_cv_ld_exported_symbols_list=no])\n\tLDFLAGS=\"$save_LDFLAGS\"\n    ])\n\n    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],\n      [lt_cv_ld_force_load=no\n      cat > conftest.c << _LT_EOF\nint forced_loaded() { return 2;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS -c -o conftest.o conftest.c\" >&AS_MESSAGE_LOG_FD\n      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD\n      echo \"$AR cru libconftest.a conftest.o\" >&AS_MESSAGE_LOG_FD\n      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD\n      echo \"$RANLIB libconftest.a\" >&AS_MESSAGE_LOG_FD\n      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD\n      cat > conftest.c << _LT_EOF\nint main() { return 0;}\n_LT_EOF\n      echo \"$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a\" >&AS_MESSAGE_LOG_FD\n      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err\n      _lt_result=$?\n      if test -s conftest.err && $GREP force_load conftest.err; then\n\tcat conftest.err >&AS_MESSAGE_LOG_FD\n      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then\n\tlt_cv_ld_force_load=yes\n      else\n\tcat conftest.err >&AS_MESSAGE_LOG_FD\n      fi\n        rm -f conftest.err libconftest.a conftest conftest.c\n        rm -rf conftest.dSYM\n    ])\n    case $host_os in\n    rhapsody* | darwin1.[[012]])\n      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;\n    darwin1.*)\n      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n    darwin*) # darwin 5.x on\n      # if running on 10.5 or later, the deployment target defaults\n      # to the OS version, if on x86, and 10.4, the deployment\n      # target defaults to 10.4. Don't you love it?\n      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in\n\t10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n\t10.[[012]]*)\n\t  _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;\n\t10.*)\n\t  _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;\n      esac\n    ;;\n  esac\n    if test \"$lt_cv_apple_cc_single_mod\" = \"yes\"; then\n      _lt_dar_single_mod='$single_module'\n    fi\n    if test \"$lt_cv_ld_exported_symbols_list\" = \"yes\"; then\n      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'\n    else\n      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'\n    fi\n    if test \"$DSYMUTIL\" != \":\" && test \"$lt_cv_ld_force_load\" = \"no\"; then\n      _lt_dsymutil='~$DSYMUTIL $lib || :'\n    else\n      _lt_dsymutil=\n    fi\n    ;;\n  esac\n])\n\n\n# _LT_DARWIN_LINKER_FEATURES([TAG])\n# ---------------------------------\n# Checks for linker and compiler features on darwin\nm4_defun([_LT_DARWIN_LINKER_FEATURES],\n[\n  m4_require([_LT_REQUIRED_DARWIN_CHECKS])\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_automatic, $1)=yes\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  if test \"$lt_cv_ld_force_load\" = \"yes\"; then\n    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience ${wl}-force_load,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"`'\n    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],\n                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])\n  else\n    _LT_TAGVAR(whole_archive_flag_spec, $1)=''\n  fi\n  _LT_TAGVAR(link_all_deplibs, $1)=yes\n  _LT_TAGVAR(allow_undefined_flag, $1)=\"$_lt_dar_allow_undefined\"\n  case $cc_basename in\n     ifort*) _lt_dar_can_shared=yes ;;\n     *) _lt_dar_can_shared=$GCC ;;\n  esac\n  if test \"$_lt_dar_can_shared\" = \"yes\"; then\n    output_verbose_link_cmd=func_echo_all\n    _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring $_lt_dar_single_mod${_lt_dsymutil}\"\n    _LT_TAGVAR(module_cmds, $1)=\"\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dsymutil}\"\n    _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\$libobjs \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}\"\n    _LT_TAGVAR(module_expsym_cmds, $1)=\"sed -e 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC \\$allow_undefined_flag -o \\$lib -bundle \\$libobjs \\$deplibs \\$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}\"\n    m4_if([$1], [CXX],\n[   if test \"$lt_cv_apple_cc_single_mod\" != \"yes\"; then\n      _LT_TAGVAR(archive_cmds, $1)=\"\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dsymutil}\"\n      _LT_TAGVAR(archive_expsym_cmds, $1)=\"sed 's,^,_,' < \\$export_symbols > \\$output_objdir/\\${libname}-symbols.expsym~\\$CC -r -keep_private_externs -nostdlib -o \\${lib}-master.o \\$libobjs~\\$CC -dynamiclib \\$allow_undefined_flag -o \\$lib \\${lib}-master.o \\$deplibs \\$compiler_flags -install_name \\$rpath/\\$soname \\$verstring${_lt_dar_export_syms}${_lt_dsymutil}\"\n    fi\n],[])\n  else\n  _LT_TAGVAR(ld_shlibs, $1)=no\n  fi\n])\n\n# _LT_SYS_MODULE_PATH_AIX([TAGNAME])\n# ----------------------------------\n# Links a minimal program and checks the executable\n# for the system default hardcoded library path. In most cases,\n# this is /usr/lib:/lib, but when the MPI compilers are used\n# the location of the communication and MPI libs are included too.\n# If we don't find anything, use the default library path according\n# to the aix ld manual.\n# Store the results from the different compilers for each TAGNAME.\n# Allow to override them for all tags through lt_cv_aix_libpath.\nm4_defun([_LT_SYS_MODULE_PATH_AIX],\n[m4_require([_LT_DECL_SED])dnl\nif test \"${lt_cv_aix_libpath+set}\" = set; then\n  aix_libpath=$lt_cv_aix_libpath\nelse\n  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],\n  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[\n  lt_aix_libpath_sed='[\n      /Import File Strings/,/^$/ {\n\t  /^0/ {\n\t      s/^0  *\\([^ ]*\\) *$/\\1/\n\t      p\n\t  }\n      }]'\n  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  # Check for a 64-bit object if we didn't find anything.\n  if test -z \"$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\"; then\n    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e \"$lt_aix_libpath_sed\"`\n  fi],[])\n  if test -z \"$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\"; then\n    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=\"/usr/lib:/lib\"\n  fi\n  ])\n  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])\nfi\n])# _LT_SYS_MODULE_PATH_AIX\n\n\n# _LT_SHELL_INIT(ARG)\n# -------------------\nm4_define([_LT_SHELL_INIT],\n[m4_divert_text([M4SH-INIT], [$1\n])])# _LT_SHELL_INIT\n\n\n\n# _LT_PROG_ECHO_BACKSLASH\n# -----------------------\n# Find how we can fake an echo command that does not interpret backslash.\n# In particular, with Autoconf 2.60 or later we add some code to the start\n# of the generated configure script which will find a shell with a builtin\n# printf (which we can use as an echo command).\nm4_defun([_LT_PROG_ECHO_BACKSLASH],\n[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\nECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n\nAC_MSG_CHECKING([how to print strings])\n# Test print first, because it will be a builtin if present.\nif test \"X`( print -r -- -n ) 2>/dev/null`\" = X-n && \\\n   test \"X`print -r -- $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='print -r --'\nelif test \"X`printf %s $ECHO 2>/dev/null`\" = \"X$ECHO\"; then\n  ECHO='printf %s\\n'\nelse\n  # Use this function as a fallback that always works.\n  func_fallback_echo ()\n  {\n    eval 'cat <<_LTECHO_EOF\n$[]1\n_LTECHO_EOF'\n  }\n  ECHO='func_fallback_echo'\nfi\n\n# func_echo_all arg...\n# Invoke $ECHO with all args, space-separated.\nfunc_echo_all ()\n{\n    $ECHO \"$*\" \n}\n\ncase \"$ECHO\" in\n  printf*) AC_MSG_RESULT([printf]) ;;\n  print*) AC_MSG_RESULT([print -r]) ;;\n  *) AC_MSG_RESULT([cat]) ;;\nesac\n\nm4_ifdef([_AS_DETECT_SUGGESTED],\n[_AS_DETECT_SUGGESTED([\n  test -n \"${ZSH_VERSION+set}${BASH_VERSION+set}\" || (\n    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\n    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO\n    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO\n    PATH=/empty FPATH=/empty; export PATH FPATH\n    test \"X`printf %s $ECHO`\" = \"X$ECHO\" \\\n      || test \"X`print -r -- $ECHO`\" = \"X$ECHO\" )])])\n\n_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])\n_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])\n])# _LT_PROG_ECHO_BACKSLASH\n\n\n# _LT_WITH_SYSROOT\n# ----------------\nAC_DEFUN([_LT_WITH_SYSROOT],\n[AC_MSG_CHECKING([for sysroot])\nAC_ARG_WITH([sysroot],\n[  --with-sysroot[=DIR] Search for dependent libraries within DIR\n                        (or the compiler's sysroot if not specified).],\n[], [with_sysroot=no])\n\ndnl lt_sysroot will always be passed unquoted.  We quote it here\ndnl in case the user passed a directory name.\nlt_sysroot=\ncase ${with_sysroot} in #(\n yes)\n   if test \"$GCC\" = yes; then\n     lt_sysroot=`$CC --print-sysroot 2>/dev/null`\n   fi\n   ;; #(\n /*)\n   lt_sysroot=`echo \"$with_sysroot\" | sed -e \"$sed_quote_subst\"`\n   ;; #(\n no|'')\n   ;; #(\n *)\n   AC_MSG_RESULT([${with_sysroot}])\n   AC_MSG_ERROR([The sysroot must be an absolute path.])\n   ;;\nesac\n\n AC_MSG_RESULT([${lt_sysroot:-no}])\n_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl\n[dependent libraries, and in which our libraries should be installed.])])\n\n# _LT_ENABLE_LOCK\n# ---------------\nm4_defun([_LT_ENABLE_LOCK],\n[AC_ARG_ENABLE([libtool-lock],\n  [AS_HELP_STRING([--disable-libtool-lock],\n    [avoid locking (might break parallel builds)])])\ntest \"x$enable_libtool_lock\" != xno && enable_libtool_lock=yes\n\n# Some flags need to be propagated to the compiler or linker for good\n# libtool support.\ncase $host in\nia64-*-hpux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.$ac_objext` in\n      *ELF-32*)\n\tHPUX_IA64_MODE=\"32\"\n\t;;\n      *ELF-64*)\n\tHPUX_IA64_MODE=\"64\"\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n*-*-irix6*)\n  # Find out which ABI we are using.\n  echo '[#]line '$LINENO' \"configure\"' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    if test \"$lt_cv_prog_gnu_ld\" = yes; then\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -melf32bsmip\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -melf32bmipn32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -melf64bmip\"\n\t;;\n      esac\n    else\n      case `/usr/bin/file conftest.$ac_objext` in\n\t*32-bit*)\n\t  LD=\"${LD-ld} -32\"\n\t  ;;\n\t*N32*)\n\t  LD=\"${LD-ld} -n32\"\n\t  ;;\n\t*64-bit*)\n\t  LD=\"${LD-ld} -64\"\n\t  ;;\n      esac\n    fi\n  fi\n  rm -rf conftest*\n  ;;\n\nx86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \\\ns390*-*linux*|s390*-*tpf*|sparc*-*linux*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n      *32-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_i386_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    case `/usr/bin/file conftest.o` in\n\t      *x86-64*)\n\t\tLD=\"${LD-ld} -m elf32_x86_64\"\n\t\t;;\n\t      *)\n\t\tLD=\"${LD-ld} -m elf_i386\"\n\t\t;;\n\t    esac\n\t    ;;\n\t  powerpc64le-*)\n\t    LD=\"${LD-ld} -m elf32lppclinux\"\n\t    ;;\n\t  powerpc64-*)\n\t    LD=\"${LD-ld} -m elf32ppclinux\"\n\t    ;;\n\t  s390x-*linux*)\n\t    LD=\"${LD-ld} -m elf_s390\"\n\t    ;;\n\t  sparc64-*linux*)\n\t    LD=\"${LD-ld} -m elf32_sparc\"\n\t    ;;\n\tesac\n\t;;\n      *64-bit*)\n\tcase $host in\n\t  x86_64-*kfreebsd*-gnu)\n\t    LD=\"${LD-ld} -m elf_x86_64_fbsd\"\n\t    ;;\n\t  x86_64-*linux*)\n\t    LD=\"${LD-ld} -m elf_x86_64\"\n\t    ;;\n\t  powerpcle-*)\n\t    LD=\"${LD-ld} -m elf64lppc\"\n\t    ;;\n\t  powerpc-*)\n\t    LD=\"${LD-ld} -m elf64ppc\"\n\t    ;;\n\t  s390*-*linux*|s390*-*tpf*)\n\t    LD=\"${LD-ld} -m elf64_s390\"\n\t    ;;\n\t  sparc*-*linux*)\n\t    LD=\"${LD-ld} -m elf64_sparc\"\n\t    ;;\n\tesac\n\t;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\n\n*-*-sco3.2v5*)\n  # On SCO OpenServer 5, we need -belf to get full-featured binaries.\n  SAVE_CFLAGS=\"$CFLAGS\"\n  CFLAGS=\"$CFLAGS -belf\"\n  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,\n    [AC_LANG_PUSH(C)\n     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])\n     AC_LANG_POP])\n  if test x\"$lt_cv_cc_needs_belf\" != x\"yes\"; then\n    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf\n    CFLAGS=\"$SAVE_CFLAGS\"\n  fi\n  ;;\n*-*solaris*)\n  # Find out which ABI we are using.\n  echo 'int i;' > conftest.$ac_ext\n  if AC_TRY_EVAL(ac_compile); then\n    case `/usr/bin/file conftest.o` in\n    *64-bit*)\n      case $lt_cv_prog_gnu_ld in\n      yes*)\n        case $host in\n        i?86-*-solaris*)\n          LD=\"${LD-ld} -m elf_x86_64\"\n          ;;\n        sparc*-*-solaris*)\n          LD=\"${LD-ld} -m elf64_sparc\"\n          ;;\n        esac\n        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.\n        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then\n          LD=\"${LD-ld}_sol2\"\n        fi\n        ;;\n      *)\n\tif ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then\n\t  LD=\"${LD-ld} -64\"\n\tfi\n\t;;\n      esac\n      ;;\n    esac\n  fi\n  rm -rf conftest*\n  ;;\nesac\n\nneed_locks=\"$enable_libtool_lock\"\n])# _LT_ENABLE_LOCK\n\n\n# _LT_PROG_AR\n# -----------\nm4_defun([_LT_PROG_AR],\n[AC_CHECK_TOOLS(AR, [ar], false)\n: ${AR=ar}\n: ${AR_FLAGS=cru}\n_LT_DECL([], [AR], [1], [The archiver])\n_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])\n\nAC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],\n  [lt_cv_ar_at_file=no\n   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],\n     [echo conftest.$ac_objext > conftest.lst\n      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'\n      AC_TRY_EVAL([lt_ar_try])\n      if test \"$ac_status\" -eq 0; then\n\t# Ensure the archiver fails upon bogus file names.\n\trm -f conftest.$ac_objext libconftest.a\n\tAC_TRY_EVAL([lt_ar_try])\n\tif test \"$ac_status\" -ne 0; then\n          lt_cv_ar_at_file=@\n        fi\n      fi\n      rm -f conftest.* libconftest.a\n     ])\n  ])\n\nif test \"x$lt_cv_ar_at_file\" = xno; then\n  archiver_list_spec=\nelse\n  archiver_list_spec=$lt_cv_ar_at_file\nfi\n_LT_DECL([], [archiver_list_spec], [1],\n  [How to feed a file listing to the archiver])\n])# _LT_PROG_AR\n\n\n# _LT_CMD_OLD_ARCHIVE\n# -------------------\nm4_defun([_LT_CMD_OLD_ARCHIVE],\n[_LT_PROG_AR\n\nAC_CHECK_TOOL(STRIP, strip, :)\ntest -z \"$STRIP\" && STRIP=:\n_LT_DECL([], [STRIP], [1], [A symbol stripping program])\n\nAC_CHECK_TOOL(RANLIB, ranlib, :)\ntest -z \"$RANLIB\" && RANLIB=:\n_LT_DECL([], [RANLIB], [1],\n    [Commands used to install an old-style archive])\n\n# Determine commands to create old-style static archives.\nold_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'\nold_postinstall_cmds='chmod 644 $oldlib'\nold_postuninstall_cmds=\n\nif test -n \"$RANLIB\"; then\n  case $host_os in\n  openbsd*)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB -t \\$tool_oldlib\"\n    ;;\n  *)\n    old_postinstall_cmds=\"$old_postinstall_cmds~\\$RANLIB \\$tool_oldlib\"\n    ;;\n  esac\n  old_archive_cmds=\"$old_archive_cmds~\\$RANLIB \\$tool_oldlib\"\nfi\n\ncase $host_os in\n  darwin*)\n    lock_old_archive_extraction=yes ;;\n  *)\n    lock_old_archive_extraction=no ;;\nesac\n_LT_DECL([], [old_postinstall_cmds], [2])\n_LT_DECL([], [old_postuninstall_cmds], [2])\n_LT_TAGDECL([], [old_archive_cmds], [2],\n    [Commands used to build an old-style archive])\n_LT_DECL([], [lock_old_archive_extraction], [0],\n    [Whether to use a lock for old archive extraction])\n])# _LT_CMD_OLD_ARCHIVE\n\n\n# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#\t\t[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------------------\n# Check whether the given compiler option works\nAC_DEFUN([_LT_COMPILER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n   lt_compiler_flag=\"$3\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   # The option is referenced via a variable to avoid confusing sed.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>conftest.err)\n   ac_status=$?\n   cat conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s \"$ac_outfile\"; then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings other than the usual output.\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' >conftest.exp\n     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then\n       $2=yes\n     fi\n   fi\n   $RM conftest*\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$5], , :, [$5])\nelse\n    m4_if([$6], , :, [$6])\nfi\n])# _LT_COMPILER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])\n\n\n# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,\n#                  [ACTION-SUCCESS], [ACTION-FAILURE])\n# ----------------------------------------------------\n# Check whether the given linker option works\nAC_DEFUN([_LT_LINKER_OPTION],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_SED])dnl\nAC_CACHE_CHECK([$1], [$2],\n  [$2=no\n   save_LDFLAGS=\"$LDFLAGS\"\n   LDFLAGS=\"$LDFLAGS $3\"\n   echo \"$lt_simple_link_test_code\" > conftest.$ac_ext\n   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then\n     # The linker can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     if test -s conftest.err; then\n       # Append any errors to the config.log.\n       cat conftest.err 1>&AS_MESSAGE_LOG_FD\n       $ECHO \"$_lt_linker_boilerplate\" | $SED '/^$/d' > conftest.exp\n       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2\n       if diff conftest.exp conftest.er2 >/dev/null; then\n         $2=yes\n       fi\n     else\n       $2=yes\n     fi\n   fi\n   $RM -r conftest*\n   LDFLAGS=\"$save_LDFLAGS\"\n])\n\nif test x\"[$]$2\" = xyes; then\n    m4_if([$4], , :, [$4])\nelse\n    m4_if([$5], , :, [$5])\nfi\n])# _LT_LINKER_OPTION\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])\n\n\n# LT_CMD_MAX_LEN\n#---------------\nAC_DEFUN([LT_CMD_MAX_LEN],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n# find the maximum length of command line arguments\nAC_MSG_CHECKING([the maximum length of command line arguments])\nAC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl\n  i=0\n  teststring=\"ABCD\"\n\n  case $build_os in\n  msdosdjgpp*)\n    # On DJGPP, this test can blow up pretty badly due to problems in libc\n    # (any single argument exceeding 2000 bytes causes a buffer overrun\n    # during glob expansion).  Even if it were fixed, the result of this\n    # check would be larger than it should be.\n    lt_cv_sys_max_cmd_len=12288;    # 12K is about right\n    ;;\n\n  gnu*)\n    # Under GNU Hurd, this test is not required because there is\n    # no limit to the length of command line arguments.\n    # Libtool will interpret -1 as no limit whatsoever\n    lt_cv_sys_max_cmd_len=-1;\n    ;;\n\n  cygwin* | mingw* | cegcc*)\n    # On Win9x/ME, this test blows up -- it succeeds, but takes\n    # about 5 minutes as the teststring grows exponentially.\n    # Worse, since 9x/ME are not pre-emptively multitasking,\n    # you end up with a \"frozen\" computer, even though with patience\n    # the test eventually succeeds (with a max line length of 256k).\n    # Instead, let's just punt: use the minimum linelength reported by\n    # all of the supported platforms: 8192 (on NT/2K/XP).\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  mint*)\n    # On MiNT this can take a long time and run out of memory.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  amigaos*)\n    # On AmigaOS with pdksh, this test takes hours, literally.\n    # So we just punt and use a minimum line length of 8192.\n    lt_cv_sys_max_cmd_len=8192;\n    ;;\n\n  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)\n    # This has been around since 386BSD, at least.  Likely further.\n    if test -x /sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`\n    elif test -x /usr/sbin/sysctl; then\n      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`\n    else\n      lt_cv_sys_max_cmd_len=65536\t# usable default for all BSDs\n    fi\n    # And add a safety zone\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    ;;\n\n  interix*)\n    # We know the value 262144 and hardcode it with a safety zone (like BSD)\n    lt_cv_sys_max_cmd_len=196608\n    ;;\n\n  os2*)\n    # The test takes a long time on OS/2.\n    lt_cv_sys_max_cmd_len=8192\n    ;;\n\n  osf*)\n    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure\n    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not\n    # nice to cause kernel panics so lets avoid the loop below.\n    # First set a reasonable default.\n    lt_cv_sys_max_cmd_len=16384\n    #\n    if test -x /sbin/sysconfig; then\n      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in\n        *1*) lt_cv_sys_max_cmd_len=-1 ;;\n      esac\n    fi\n    ;;\n  sco3.2v5*)\n    lt_cv_sys_max_cmd_len=102400\n    ;;\n  sysv5* | sco5v6* | sysv4.2uw2*)\n    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`\n    if test -n \"$kargmax\"; then\n      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[\t ]]//'`\n    else\n      lt_cv_sys_max_cmd_len=32768\n    fi\n    ;;\n  *)\n    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`\n    if test -n \"$lt_cv_sys_max_cmd_len\" && \\\n\ttest undefined != \"$lt_cv_sys_max_cmd_len\"; then\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 4`\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\* 3`\n    else\n      # Make teststring a little bigger before we do anything with it.\n      # a 1K string should be a reasonable start.\n      for i in 1 2 3 4 5 6 7 8 ; do\n        teststring=$teststring$teststring\n      done\n      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}\n      # If test is not a shell built-in, we'll probably end up computing a\n      # maximum length that is only half of the actual maximum length, but\n      # we can't tell.\n      while { test \"X\"`env echo \"$teststring$teststring\" 2>/dev/null` \\\n\t         = \"X$teststring$teststring\"; } >/dev/null 2>&1 &&\n\t      test $i != 17 # 1/2 MB should be enough\n      do\n        i=`expr $i + 1`\n        teststring=$teststring$teststring\n      done\n      # Only check the string length outside the loop.\n      lt_cv_sys_max_cmd_len=`expr \"X$teststring\" : \".*\" 2>&1`\n      teststring=\n      # Add a significant safety factor because C++ compilers can tack on\n      # massive amounts of additional arguments before passing them to the\n      # linker.  It appears as though 1/2 is a usable value.\n      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \\/ 2`\n    fi\n    ;;\n  esac\n])\nif test -n $lt_cv_sys_max_cmd_len ; then\n  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)\nelse\n  AC_MSG_RESULT(none)\nfi\nmax_cmd_len=$lt_cv_sys_max_cmd_len\n_LT_DECL([], [max_cmd_len], [0],\n    [What is the maximum length of a command?])\n])# LT_CMD_MAX_LEN\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])\n\n\n# _LT_HEADER_DLFCN\n# ----------------\nm4_defun([_LT_HEADER_DLFCN],\n[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl\n])# _LT_HEADER_DLFCN\n\n\n# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,\n#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)\n# ----------------------------------------------------------------\nm4_defun([_LT_TRY_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"$cross_compiling\" = yes; then :\n  [$4]\nelse\n  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2\n  lt_status=$lt_dlunknown\n  cat > conftest.$ac_ext <<_LT_EOF\n[#line $LINENO \"configure\"\n#include \"confdefs.h\"\n\n#if HAVE_DLFCN_H\n#include <dlfcn.h>\n#endif\n\n#include <stdio.h>\n\n#ifdef RTLD_GLOBAL\n#  define LT_DLGLOBAL\t\tRTLD_GLOBAL\n#else\n#  ifdef DL_GLOBAL\n#    define LT_DLGLOBAL\t\tDL_GLOBAL\n#  else\n#    define LT_DLGLOBAL\t\t0\n#  endif\n#endif\n\n/* We may have to define LT_DLLAZY_OR_NOW in the command line if we\n   find out it does not work in some platform. */\n#ifndef LT_DLLAZY_OR_NOW\n#  ifdef RTLD_LAZY\n#    define LT_DLLAZY_OR_NOW\t\tRTLD_LAZY\n#  else\n#    ifdef DL_LAZY\n#      define LT_DLLAZY_OR_NOW\t\tDL_LAZY\n#    else\n#      ifdef RTLD_NOW\n#        define LT_DLLAZY_OR_NOW\tRTLD_NOW\n#      else\n#        ifdef DL_NOW\n#          define LT_DLLAZY_OR_NOW\tDL_NOW\n#        else\n#          define LT_DLLAZY_OR_NOW\t0\n#        endif\n#      endif\n#    endif\n#  endif\n#endif\n\n/* When -fvisbility=hidden is used, assume the code has been annotated\n   correspondingly for the symbols needed.  */\n#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))\nint fnord () __attribute__((visibility(\"default\")));\n#endif\n\nint fnord () { return 42; }\nint main ()\n{\n  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);\n  int status = $lt_dlunknown;\n\n  if (self)\n    {\n      if (dlsym (self,\"fnord\"))       status = $lt_dlno_uscore;\n      else\n        {\n\t  if (dlsym( self,\"_fnord\"))  status = $lt_dlneed_uscore;\n          else puts (dlerror ());\n\t}\n      /* dlclose (self); */\n    }\n  else\n    puts (dlerror ());\n\n  return status;\n}]\n_LT_EOF\n  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then\n    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null\n    lt_status=$?\n    case x$lt_status in\n      x$lt_dlno_uscore) $1 ;;\n      x$lt_dlneed_uscore) $2 ;;\n      x$lt_dlunknown|x*) $3 ;;\n    esac\n  else :\n    # compilation failed\n    $3\n  fi\nfi\nrm -fr conftest*\n])# _LT_TRY_DLOPEN_SELF\n\n\n# LT_SYS_DLOPEN_SELF\n# ------------------\nAC_DEFUN([LT_SYS_DLOPEN_SELF],\n[m4_require([_LT_HEADER_DLFCN])dnl\nif test \"x$enable_dlopen\" != xyes; then\n  enable_dlopen=unknown\n  enable_dlopen_self=unknown\n  enable_dlopen_self_static=unknown\nelse\n  lt_cv_dlopen=no\n  lt_cv_dlopen_libs=\n\n  case $host_os in\n  beos*)\n    lt_cv_dlopen=\"load_add_on\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ;;\n\n  mingw* | pw32* | cegcc*)\n    lt_cv_dlopen=\"LoadLibrary\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  cygwin*)\n    lt_cv_dlopen=\"dlopen\"\n    lt_cv_dlopen_libs=\n    ;;\n\n  darwin*)\n  # if libdl is installed we need to link against it\n    AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],[\n    lt_cv_dlopen=\"dyld\"\n    lt_cv_dlopen_libs=\n    lt_cv_dlopen_self=yes\n    ])\n    ;;\n\n  *)\n    AC_CHECK_FUNC([shl_load],\n\t  [lt_cv_dlopen=\"shl_load\"],\n      [AC_CHECK_LIB([dld], [shl_load],\n\t    [lt_cv_dlopen=\"shl_load\" lt_cv_dlopen_libs=\"-ldld\"],\n\t[AC_CHECK_FUNC([dlopen],\n\t      [lt_cv_dlopen=\"dlopen\"],\n\t  [AC_CHECK_LIB([dl], [dlopen],\n\t\t[lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-ldl\"],\n\t    [AC_CHECK_LIB([svld], [dlopen],\n\t\t  [lt_cv_dlopen=\"dlopen\" lt_cv_dlopen_libs=\"-lsvld\"],\n\t      [AC_CHECK_LIB([dld], [dld_link],\n\t\t    [lt_cv_dlopen=\"dld_link\" lt_cv_dlopen_libs=\"-ldld\"])\n\t      ])\n\t    ])\n\t  ])\n\t])\n      ])\n    ;;\n  esac\n\n  if test \"x$lt_cv_dlopen\" != xno; then\n    enable_dlopen=yes\n  else\n    enable_dlopen=no\n  fi\n\n  case $lt_cv_dlopen in\n  dlopen)\n    save_CPPFLAGS=\"$CPPFLAGS\"\n    test \"x$ac_cv_header_dlfcn_h\" = xyes && CPPFLAGS=\"$CPPFLAGS -DHAVE_DLFCN_H\"\n\n    save_LDFLAGS=\"$LDFLAGS\"\n    wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $export_dynamic_flag_spec\\\"\n\n    save_LIBS=\"$LIBS\"\n    LIBS=\"$lt_cv_dlopen_libs $LIBS\"\n\n    AC_CACHE_CHECK([whether a program can dlopen itself],\n\t  lt_cv_dlopen_self, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,\n\t    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)\n    ])\n\n    if test \"x$lt_cv_dlopen_self\" = xyes; then\n      wl=$lt_prog_compiler_wl eval LDFLAGS=\\\"\\$LDFLAGS $lt_prog_compiler_static\\\"\n      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],\n\t  lt_cv_dlopen_self_static, [dnl\n\t  _LT_TRY_DLOPEN_SELF(\n\t    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,\n\t    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)\n      ])\n    fi\n\n    CPPFLAGS=\"$save_CPPFLAGS\"\n    LDFLAGS=\"$save_LDFLAGS\"\n    LIBS=\"$save_LIBS\"\n    ;;\n  esac\n\n  case $lt_cv_dlopen_self in\n  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;\n  *) enable_dlopen_self=unknown ;;\n  esac\n\n  case $lt_cv_dlopen_self_static in\n  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;\n  *) enable_dlopen_self_static=unknown ;;\n  esac\nfi\n_LT_DECL([dlopen_support], [enable_dlopen], [0],\n\t [Whether dlopen is supported])\n_LT_DECL([dlopen_self], [enable_dlopen_self], [0],\n\t [Whether dlopen of programs is supported])\n_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],\n\t [Whether dlopen of statically linked programs is supported])\n])# LT_SYS_DLOPEN_SELF\n\n# Old name:\nAU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])\n\n\n# _LT_COMPILER_C_O([TAGNAME])\n# ---------------------------\n# Check to see if options -c and -o are simultaneously supported by compiler.\n# This macro does not hard code the compiler like AC_PROG_CC_C_O.\nm4_defun([_LT_COMPILER_C_O],\n[m4_require([_LT_DECL_SED])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],\n  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no\n   $RM -r conftest 2>/dev/null\n   mkdir conftest\n   cd conftest\n   mkdir out\n   echo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n   lt_compiler_flag=\"-o out/conftest2.$ac_objext\"\n   # Insert the option either (1) after the last *FLAGS variable, or\n   # (2) before a word containing \"conftest.\", or (3) at the end.\n   # Note that $ac_compile itself does not contain backslashes and begins\n   # with a dollar sign (not a hyphen), so the echo should work correctly.\n   lt_compile=`echo \"$ac_compile\" | $SED \\\n   -e 's:.*FLAGS}\\{0,1\\} :&$lt_compiler_flag :; t' \\\n   -e 's: [[^ ]]*conftest\\.: $lt_compiler_flag&:; t' \\\n   -e 's:$: $lt_compiler_flag:'`\n   (eval echo \"\\\"\\$as_me:$LINENO: $lt_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n   (eval \"$lt_compile\" 2>out/conftest.err)\n   ac_status=$?\n   cat out/conftest.err >&AS_MESSAGE_LOG_FD\n   echo \"$as_me:$LINENO: \\$? = $ac_status\" >&AS_MESSAGE_LOG_FD\n   if (exit $ac_status) && test -s out/conftest2.$ac_objext\n   then\n     # The compiler can only warn and ignore the option if not recognized\n     # So say no if there are warnings\n     $ECHO \"$_lt_compiler_boilerplate\" | $SED '/^$/d' > out/conftest.exp\n     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2\n     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then\n       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n     fi\n   fi\n   chmod u+w . 2>&AS_MESSAGE_LOG_FD\n   $RM conftest*\n   # SGI C++ compiler will create directory out/ii_files/ for\n   # template instantiation\n   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files\n   $RM out/* && rmdir out\n   cd ..\n   $RM -r conftest\n   $RM conftest*\n])\n_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],\n\t[Does compiler simultaneously support -c and -o options?])\n])# _LT_COMPILER_C_O\n\n\n# _LT_COMPILER_FILE_LOCKS([TAGNAME])\n# ----------------------------------\n# Check to see if we can do hard links to lock some files if needed\nm4_defun([_LT_COMPILER_FILE_LOCKS],\n[m4_require([_LT_ENABLE_LOCK])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\n_LT_COMPILER_C_O([$1])\n\nhard_links=\"nottested\"\nif test \"$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)\" = no && test \"$need_locks\" != no; then\n  # do not overwrite the value of need_locks provided by the user\n  AC_MSG_CHECKING([if we can lock with hard links])\n  hard_links=yes\n  $RM conftest*\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  touch conftest.a\n  ln conftest.a conftest.b 2>&5 || hard_links=no\n  ln conftest.a conftest.b 2>/dev/null && hard_links=no\n  AC_MSG_RESULT([$hard_links])\n  if test \"$hard_links\" = no; then\n    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])\n    need_locks=warn\n  fi\nelse\n  need_locks=no\nfi\n_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])\n])# _LT_COMPILER_FILE_LOCKS\n\n\n# _LT_CHECK_OBJDIR\n# ----------------\nm4_defun([_LT_CHECK_OBJDIR],\n[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],\n[rm -f .libs 2>/dev/null\nmkdir .libs 2>/dev/null\nif test -d .libs; then\n  lt_cv_objdir=.libs\nelse\n  # MS-DOS does not allow filenames that begin with a dot.\n  lt_cv_objdir=_libs\nfi\nrmdir .libs 2>/dev/null])\nobjdir=$lt_cv_objdir\n_LT_DECL([], [objdir], [0],\n         [The name of the directory that contains temporary libtool files])dnl\nm4_pattern_allow([LT_OBJDIR])dnl\nAC_DEFINE_UNQUOTED(LT_OBJDIR, \"$lt_cv_objdir/\",\n  [Define to the sub-directory in which libtool stores uninstalled libraries.])\n])# _LT_CHECK_OBJDIR\n\n\n# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])\n# --------------------------------------\n# Check hardcoding attributes.\nm4_defun([_LT_LINKER_HARDCODE_LIBPATH],\n[AC_MSG_CHECKING([how to hardcode library paths into programs])\n_LT_TAGVAR(hardcode_action, $1)=\nif test -n \"$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\" ||\n   test -n \"$_LT_TAGVAR(runpath_var, $1)\" ||\n   test \"X$_LT_TAGVAR(hardcode_automatic, $1)\" = \"Xyes\" ; then\n\n  # We can hardcode non-existent directories.\n  if test \"$_LT_TAGVAR(hardcode_direct, $1)\" != no &&\n     # If the only mechanism to avoid hardcoding is shlibpath_var, we\n     # have to relink, otherwise we might link with an installed library\n     # when we should be linking with a yet-to-be-installed one\n     ## test \"$_LT_TAGVAR(hardcode_shlibpath_var, $1)\" != no &&\n     test \"$_LT_TAGVAR(hardcode_minus_L, $1)\" != no; then\n    # Linking always hardcodes the temporary library directory.\n    _LT_TAGVAR(hardcode_action, $1)=relink\n  else\n    # We can link without hardcoding, and we can hardcode nonexisting dirs.\n    _LT_TAGVAR(hardcode_action, $1)=immediate\n  fi\nelse\n  # We cannot hardcode anything, or else we can only hardcode existing\n  # directories.\n  _LT_TAGVAR(hardcode_action, $1)=unsupported\nfi\nAC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])\n\nif test \"$_LT_TAGVAR(hardcode_action, $1)\" = relink ||\n   test \"$_LT_TAGVAR(inherit_rpath, $1)\" = yes; then\n  # Fast installation is not supported\n  enable_fast_install=no\nelif test \"$shlibpath_overrides_runpath\" = yes ||\n     test \"$enable_shared\" = no; then\n  # Fast installation is not necessary\n  enable_fast_install=needless\nfi\n_LT_TAGDECL([], [hardcode_action], [0],\n    [How to hardcode a shared library path into an executable])\n])# _LT_LINKER_HARDCODE_LIBPATH\n\n\n# _LT_CMD_STRIPLIB\n# ----------------\nm4_defun([_LT_CMD_STRIPLIB],\n[m4_require([_LT_DECL_EGREP])\nstriplib=\nold_striplib=\nAC_MSG_CHECKING([whether stripping libraries is possible])\nif test -n \"$STRIP\" && $STRIP -V 2>&1 | $GREP \"GNU strip\" >/dev/null; then\n  test -z \"$old_striplib\" && old_striplib=\"$STRIP --strip-debug\"\n  test -z \"$striplib\" && striplib=\"$STRIP --strip-unneeded\"\n  AC_MSG_RESULT([yes])\nelse\n# FIXME - insert some real tests, host_os isn't really good enough\n  case $host_os in\n  darwin*)\n    if test -n \"$STRIP\" ; then\n      striplib=\"$STRIP -x\"\n      old_striplib=\"$STRIP -S\"\n      AC_MSG_RESULT([yes])\n    else\n      AC_MSG_RESULT([no])\n    fi\n    ;;\n  *)\n    AC_MSG_RESULT([no])\n    ;;\n  esac\nfi\n_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])\n_LT_DECL([], [striplib], [1])\n])# _LT_CMD_STRIPLIB\n\n\n# _LT_SYS_DYNAMIC_LINKER([TAG])\n# -----------------------------\n# PORTME Fill in your ld.so characteristics\nm4_defun([_LT_SYS_DYNAMIC_LINKER],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_OBJDUMP])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_CHECK_SHELL_FEATURES])dnl\nAC_MSG_CHECKING([dynamic linker characteristics])\nm4_if([$1],\n\t[], [\nif test \"$GCC\" = yes; then\n  case $host_os in\n    darwin*) lt_awk_arg=\"/^libraries:/,/LR/\" ;;\n    *) lt_awk_arg=\"/^libraries:/\" ;;\n  esac\n  case $host_os in\n    mingw* | cegcc*) lt_sed_strip_eq=\"s,=\\([[A-Za-z]]:\\),\\1,g\" ;;\n    *) lt_sed_strip_eq=\"s,=/,/,g\" ;;\n  esac\n  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e \"s/^libraries://\" -e $lt_sed_strip_eq`\n  case $lt_search_path_spec in\n  *\\;*)\n    # if the path contains \";\" then we assume it to be the separator\n    # otherwise default to the standard path separator (i.e. \":\") - it is\n    # assumed that no part of a normal pathname contains \";\" but that should\n    # okay in the real world where \";\" in dirpaths is itself problematic.\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED 's/;/ /g'`\n    ;;\n  *)\n    lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $SED \"s/$PATH_SEPARATOR/ /g\"`\n    ;;\n  esac\n  # Ok, now we have the path, separated by spaces, we can step through it\n  # and add multilib dir if necessary.\n  lt_tmp_lt_search_path_spec=\n  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`\n  for lt_sys_path in $lt_search_path_spec; do\n    if test -d \"$lt_sys_path/$lt_multi_os_dir\"; then\n      lt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir\"\n    else\n      test -d \"$lt_sys_path\" && \\\n\tlt_tmp_lt_search_path_spec=\"$lt_tmp_lt_search_path_spec $lt_sys_path\"\n    fi\n  done\n  lt_search_path_spec=`$ECHO \"$lt_tmp_lt_search_path_spec\" | awk '\nBEGIN {RS=\" \"; FS=\"/|\\n\";} {\n  lt_foo=\"\";\n  lt_count=0;\n  for (lt_i = NF; lt_i > 0; lt_i--) {\n    if ($lt_i != \"\" && $lt_i != \".\") {\n      if ($lt_i == \"..\") {\n        lt_count++;\n      } else {\n        if (lt_count == 0) {\n          lt_foo=\"/\" $lt_i lt_foo;\n        } else {\n          lt_count--;\n        }\n      }\n    }\n  }\n  if (lt_foo != \"\") { lt_freq[[lt_foo]]++; }\n  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }\n}'`\n  # AWK program above erroneously prepends '/' to C:/dos/paths\n  # for these hosts.\n  case $host_os in\n    mingw* | cegcc*) lt_search_path_spec=`$ECHO \"$lt_search_path_spec\" |\\\n      $SED 's,/\\([[A-Za-z]]:\\),\\1,g'` ;;\n  esac\n  sys_lib_search_path_spec=`$ECHO \"$lt_search_path_spec\" | $lt_NL2SP`\nelse\n  sys_lib_search_path_spec=\"/lib /usr/lib /usr/local/lib\"\nfi])\nlibrary_names_spec=\nlibname_spec='lib$name'\nsoname_spec=\nshrext_cmds=\".so\"\npostinstall_cmds=\npostuninstall_cmds=\nfinish_cmds=\nfinish_eval=\nshlibpath_var=\nshlibpath_overrides_runpath=unknown\nversion_type=none\ndynamic_linker=\"$host_os ld.so\"\nsys_lib_dlsearch_path_spec=\"/lib /usr/lib\"\nneed_lib_prefix=unknown\nhardcode_into_libs=no\n\n# when you set need_version to no, make sure it does not cause -set_version\n# flags to be left without arguments\nneed_version=unknown\n\ncase $host_os in\naix3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'\n  shlibpath_var=LIBPATH\n\n  # AIX 3 has no versioning support, so we append a major version to the name.\n  soname_spec='${libname}${release}${shared_ext}$major'\n  ;;\n\naix[[4-9]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  hardcode_into_libs=yes\n  if test \"$host_cpu\" = ia64; then\n    # AIX 5 supports IA64\n    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'\n    shlibpath_var=LD_LIBRARY_PATH\n  else\n    # With GCC up to 2.95.x, collect2 would create an import file\n    # for dependence libraries.  The import file would start with\n    # the line `#! .'.  This would cause the generated library to\n    # depend on `.', always an invalid library.  This was fixed in\n    # development snapshots of GCC prior to 3.0.\n    case $host_os in\n      aix4 | aix4.[[01]] | aix4.[[01]].*)\n      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'\n\t   echo ' yes '\n\t   echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then\n\t:\n      else\n\tcan_build_shared=no\n      fi\n      ;;\n    esac\n    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct\n    # soname into executable. Probably we can add versioning support to\n    # collect2, so additional links can be useful in future.\n    if test \"$aix_use_runtimelinking\" = yes; then\n      # If using run time linking (on AIX 4.2 or later) use lib<name>.so\n      # instead of lib<name>.a to let people know that these are not\n      # typical AIX shared libraries.\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    else\n      # We preserve .a as extension for shared libraries through AIX4.2\n      # and later when we are not doing run time linking.\n      library_names_spec='${libname}${release}.a $libname.a'\n      soname_spec='${libname}${release}${shared_ext}$major'\n    fi\n    shlibpath_var=LIBPATH\n  fi\n  ;;\n\namigaos*)\n  case $host_cpu in\n  powerpc)\n    # Since July 2007 AmigaOS4 officially supports .so libraries.\n    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    ;;\n  m68k)\n    library_names_spec='$libname.ixlibrary $libname.a'\n    # Create ${libname}_ixlibrary.a entries in /sys/libs.\n    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all \"$lib\" | $SED '\\''s%^.*/\\([[^/]]*\\)\\.ixlibrary$%\\1%'\\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show \"cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a\"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'\n    ;;\n  esac\n  ;;\n\nbeos*)\n  library_names_spec='${libname}${shared_ext}'\n  dynamic_linker=\"$host_os ld.so\"\n  shlibpath_var=LIBRARY_PATH\n  ;;\n\nbsdi[[45]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib\"\n  sys_lib_dlsearch_path_spec=\"/shlib /usr/lib /usr/local/lib\"\n  # the default ld.so.conf also contains /usr/contrib/lib and\n  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow\n  # libtool to hard-code these into programs\n  ;;\n\ncygwin* | mingw* | pw32* | cegcc*)\n  version_type=windows\n  shrext_cmds=\".dll\"\n  need_version=no\n  need_lib_prefix=no\n\n  case $GCC,$cc_basename in\n  yes,*)\n    # gcc\n    library_names_spec='$libname.dll.a'\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname~\n      chmod a+x \\$dldir/$dlname~\n      if test -n '\\''$stripme'\\'' && test -n '\\''$striplib'\\''; then\n        eval '\\''$striplib \\$dldir/$dlname'\\'' || exit \\$?;\n      fi'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n\n    case $host_os in\n    cygwin*)\n      # Cygwin DLLs use 'cyg' prefix rather than 'lib'\n      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\nm4_if([$1], [],[\n      sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/lib/w32api\"])\n      ;;\n    mingw* | cegcc*)\n      # MinGW DLLs use traditional 'lib' prefix\n      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    pw32*)\n      # pw32 DLLs use 'pw' prefix rather than 'lib'\n      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n      ;;\n    esac\n    dynamic_linker='Win32 ld.exe'\n    ;;\n\n  *,cl*)\n    # Native MSVC\n    libname_spec='$name'\n    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'\n    library_names_spec='${libname}.dll.lib'\n\n    case $build_os in\n    mingw*)\n      sys_lib_search_path_spec=\n      lt_save_ifs=$IFS\n      IFS=';'\n      for lt_path in $LIB\n      do\n        IFS=$lt_save_ifs\n        # Let DOS variable expansion print the short 8.3 style file name.\n        lt_path=`cd \"$lt_path\" 2>/dev/null && cmd //C \"for %i in (\".\") do @echo %~si\"`\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec $lt_path\"\n      done\n      IFS=$lt_save_ifs\n      # Convert to MSYS style.\n      sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | sed -e 's|\\\\\\\\|/|g' -e 's| \\\\([[a-zA-Z]]\\\\):| /\\\\1|g' -e 's|^ ||'`\n      ;;\n    cygwin*)\n      # Convert to unix form, then to dos form, then back to unix form\n      # but this time dos style (no spaces!) so that the unix form looks\n      # like /cygdrive/c/PROGRA~1:/cygdr...\n      sys_lib_search_path_spec=`cygpath --path --unix \"$LIB\"`\n      sys_lib_search_path_spec=`cygpath --path --dos \"$sys_lib_search_path_spec\" 2>/dev/null`\n      sys_lib_search_path_spec=`cygpath --path --unix \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      ;;\n    *)\n      sys_lib_search_path_spec=\"$LIB\"\n      if $ECHO \"$sys_lib_search_path_spec\" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then\n        # It is most probably a Windows format PATH.\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e 's/;/ /g'`\n      else\n        sys_lib_search_path_spec=`$ECHO \"$sys_lib_search_path_spec\" | $SED -e \"s/$PATH_SEPARATOR/ /g\"`\n      fi\n      # FIXME: find the short name or the path components, as spaces are\n      # common. (e.g. \"Program Files\" -> \"PROGRA~1\")\n      ;;\n    esac\n\n    # DLL is installed to $(libdir)/../bin by postinstall_cmds\n    postinstall_cmds='base_file=`basename \\${file}`~\n      dlpath=`$SHELL 2>&1 -c '\\''. $dir/'\\''\\${base_file}'\\''i; echo \\$dlname'\\''`~\n      dldir=$destdir/`dirname \\$dlpath`~\n      test -d \\$dldir || mkdir -p \\$dldir~\n      $install_prog $dir/$dlname \\$dldir/$dlname'\n    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\\''. $file; echo \\$dlname'\\''`~\n      dlpath=$dir/\\$dldll~\n       $RM \\$dlpath'\n    shlibpath_overrides_runpath=yes\n    dynamic_linker='Win32 link.exe'\n    ;;\n\n  *)\n    # Assume MSVC wrapper\n    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'\n    dynamic_linker='Win32 ld.exe'\n    ;;\n  esac\n  # FIXME: first we should search . and the directory the executable is in\n  shlibpath_var=PATH\n  ;;\n\ndarwin* | rhapsody*)\n  dynamic_linker=\"$host_os dyld\"\n  version_type=darwin\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'\n  soname_spec='${libname}${release}${major}$shared_ext'\n  shlibpath_overrides_runpath=yes\n  shlibpath_var=DYLD_LIBRARY_PATH\n  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'\nm4_if([$1], [],[\n  sys_lib_search_path_spec=\"$sys_lib_search_path_spec /usr/local/lib\"])\n  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'\n  ;;\n\ndgux*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\nfreebsd* | dragonfly*)\n  # DragonFly does not have aout.  When/if they implement a new\n  # versioning mechanism, adjust this.\n  if test -x /usr/bin/objformat; then\n    objformat=`/usr/bin/objformat`\n  else\n    case $host_os in\n    freebsd[[23]].*) objformat=aout ;;\n    *) objformat=elf ;;\n    esac\n  fi\n  version_type=freebsd-$objformat\n  case $version_type in\n    freebsd-elf*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n      need_version=no\n      need_lib_prefix=no\n      ;;\n    freebsd-*)\n      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'\n      need_version=yes\n      ;;\n  esac\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_os in\n  freebsd2.*)\n    shlibpath_overrides_runpath=yes\n    ;;\n  freebsd3.[[01]]* | freebsdelf3.[[01]]*)\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \\\n  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)\n    shlibpath_overrides_runpath=no\n    hardcode_into_libs=yes\n    ;;\n  *) # from 4.6 on, and DragonFly\n    shlibpath_overrides_runpath=yes\n    hardcode_into_libs=yes\n    ;;\n  esac\n  ;;\n\nhaiku*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  dynamic_linker=\"$host_os runtime_loader\"\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'\n  hardcode_into_libs=yes\n  ;;\n\nhpux9* | hpux10* | hpux11*)\n  # Give a soname corresponding to the major version so that dld.sl refuses to\n  # link against other versions.\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  case $host_cpu in\n  ia64*)\n    shrext_cmds='.so'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.so\"\n    shlibpath_var=LD_LIBRARY_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    if test \"X$HPUX_IA64_MODE\" = X32; then\n      sys_lib_search_path_spec=\"/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib\"\n    else\n      sys_lib_search_path_spec=\"/usr/lib/hpux64 /usr/local/lib/hpux64\"\n    fi\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  hppa*64*)\n    shrext_cmds='.sl'\n    hardcode_into_libs=yes\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH\n    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    sys_lib_search_path_spec=\"/usr/lib/pa20_64 /usr/ccs/lib/pa20_64\"\n    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec\n    ;;\n  *)\n    shrext_cmds='.sl'\n    dynamic_linker=\"$host_os dld.sl\"\n    shlibpath_var=SHLIB_PATH\n    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    ;;\n  esac\n  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...\n  postinstall_cmds='chmod 555 $lib'\n  # or fails outright, so override atomically:\n  install_override_mode=555\n  ;;\n\ninterix[[3-9]]*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $host_os in\n    nonstopux*) version_type=nonstopux ;;\n    *)\n\tif test \"$lt_cv_prog_gnu_ld\" = yes; then\n\t\tversion_type=linux # correct to gnu/linux during the next big refactor\n\telse\n\t\tversion_type=irix\n\tfi ;;\n  esac\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'\n  case $host_os in\n  irix5* | nonstopux*)\n    libsuff= shlibsuff=\n    ;;\n  *)\n    case $LD in # libtool.m4 will add one of these switches to LD\n    *-32|*\"-32 \"|*-melf32bsmip|*\"-melf32bsmip \")\n      libsuff= shlibsuff= libmagic=32-bit;;\n    *-n32|*\"-n32 \"|*-melf32bmipn32|*\"-melf32bmipn32 \")\n      libsuff=32 shlibsuff=N32 libmagic=N32;;\n    *-64|*\"-64 \"|*-melf64bmip|*\"-melf64bmip \")\n      libsuff=64 shlibsuff=64 libmagic=64-bit;;\n    *) libsuff= shlibsuff= libmagic=never-match;;\n    esac\n    ;;\n  esac\n  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH\n  shlibpath_overrides_runpath=no\n  sys_lib_search_path_spec=\"/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}\"\n  sys_lib_dlsearch_path_spec=\"/usr/lib${libsuff} /lib${libsuff}\"\n  hardcode_into_libs=yes\n  ;;\n\n# No shared lib support for Linux oldld, aout, or coff.\nlinux*oldld* | linux*aout* | linux*coff*)\n  dynamic_linker=no\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -n $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n\n  # Some binutils ld are patched to set DT_RUNPATH\n  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],\n    [lt_cv_shlibpath_overrides_runpath=no\n    save_LDFLAGS=$LDFLAGS\n    save_libdir=$libdir\n    eval \"libdir=/foo; wl=\\\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\\\"; \\\n\t LDFLAGS=\\\"\\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\\\"\"\n    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],\n      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep \"RUNPATH.*$libdir\" >/dev/null],\n\t [lt_cv_shlibpath_overrides_runpath=yes])])\n    LDFLAGS=$save_LDFLAGS\n    libdir=$save_libdir\n    ])\n  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath\n\n  # This implies no fast_install, which is unacceptable.\n  # Some rework will be needed to allow for fast_install\n  # before this can be enabled.\n  hardcode_into_libs=yes\n\n  # Append ld.so.conf contents to the search path\n  if test -f /etc/ld.so.conf; then\n    lt_ld_extra=`awk '/^include / { system(sprintf(\"cd /etc; cat %s 2>/dev/null\", \\[$]2)); skip = 1; } { if (!skip) print \\[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[\t ]*hwcap[\t ]/d;s/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/\"//g;/^$/d' | tr '\\n' ' '`\n    sys_lib_dlsearch_path_spec=\"/lib /usr/lib $lt_ld_extra\"\n  fi\n\n  # We used to test for /lib/ld.so.1 and disable shared libraries on\n  # powerpc, because MkLinux only supported shared libraries with the\n  # GNU dynamic linker.  Since this was broken with cross compilers,\n  # most powerpc-linux boxes support dynamic linking these days and\n  # people can always --disable-shared, the test was removed, and we\n  # assume the GNU/Linux dynamic linker is in use.\n  dynamic_linker='GNU/Linux ld.so'\n  ;;\n\nnetbsdelf*-gnu)\n  version_type=linux\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='NetBSD ld.elf_so'\n  ;;\n\nnetbsd*)\n  version_type=sunos\n  need_lib_prefix=no\n  need_version=no\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n    finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n    dynamic_linker='NetBSD (a.out) ld.so'\n  else\n    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'\n    soname_spec='${libname}${release}${shared_ext}$major'\n    dynamic_linker='NetBSD ld.elf_so'\n  fi\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  ;;\n\nnewsos6)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  ;;\n\n*nto* | *qnx*)\n  version_type=qnx\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  dynamic_linker='ldqnx.so'\n  ;;\n\nopenbsd*)\n  version_type=sunos\n  sys_lib_dlsearch_path_spec=\"/usr/lib\"\n  need_lib_prefix=no\n  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.\n  case $host_os in\n    openbsd3.3 | openbsd3.3.*)\tneed_version=yes ;;\n    *)\t\t\t\tneed_version=no  ;;\n  esac\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/sbin\" ldconfig -m $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    case $host_os in\n      openbsd2.[[89]] | openbsd2.[[89]].*)\n\tshlibpath_overrides_runpath=no\n\t;;\n      *)\n\tshlibpath_overrides_runpath=yes\n\t;;\n      esac\n  else\n    shlibpath_overrides_runpath=yes\n  fi\n  ;;\n\nos2*)\n  libname_spec='$name'\n  shrext_cmds=\".dll\"\n  need_lib_prefix=no\n  library_names_spec='$libname${shared_ext} $libname.a'\n  dynamic_linker='OS/2 ld.exe'\n  shlibpath_var=LIBPATH\n  ;;\n\nosf3* | osf4* | osf5*)\n  version_type=osf\n  need_lib_prefix=no\n  need_version=no\n  soname_spec='${libname}${release}${shared_ext}$major'\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  sys_lib_search_path_spec=\"/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib\"\n  sys_lib_dlsearch_path_spec=\"$sys_lib_search_path_spec\"\n  ;;\n\nrdos*)\n  dynamic_linker=no\n  ;;\n\nsolaris*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  # ldd complains unless libraries are executable\n  postinstall_cmds='chmod +x $lib'\n  ;;\n\nsunos4*)\n  version_type=sunos\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'\n  finish_cmds='PATH=\"\\$PATH:/usr/etc\" ldconfig $libdir'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  if test \"$with_gnu_ld\" = yes; then\n    need_lib_prefix=no\n  fi\n  need_version=yes\n  ;;\n\nsysv4 | sysv4.3*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  case $host_vendor in\n    sni)\n      shlibpath_overrides_runpath=no\n      need_lib_prefix=no\n      runpath_var=LD_RUN_PATH\n      ;;\n    siemens)\n      need_lib_prefix=no\n      ;;\n    motorola)\n      need_lib_prefix=no\n      need_version=no\n      shlibpath_overrides_runpath=no\n      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'\n      ;;\n  esac\n  ;;\n\nsysv4*MP*)\n  if test -d /usr/nec ;then\n    version_type=linux # correct to gnu/linux during the next big refactor\n    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'\n    soname_spec='$libname${shared_ext}.$major'\n    shlibpath_var=LD_LIBRARY_PATH\n  fi\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  version_type=freebsd-elf\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=yes\n  hardcode_into_libs=yes\n  if test \"$with_gnu_ld\" = yes; then\n    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'\n  else\n    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'\n    case $host_os in\n      sco3.2v5*)\n        sys_lib_search_path_spec=\"$sys_lib_search_path_spec /lib\"\n\t;;\n    esac\n  fi\n  sys_lib_dlsearch_path_spec='/usr/lib'\n  ;;\n\ntpf*)\n  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.\n  version_type=linux # correct to gnu/linux during the next big refactor\n  need_lib_prefix=no\n  need_version=no\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  shlibpath_var=LD_LIBRARY_PATH\n  shlibpath_overrides_runpath=no\n  hardcode_into_libs=yes\n  ;;\n\nuts4*)\n  version_type=linux # correct to gnu/linux during the next big refactor\n  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'\n  soname_spec='${libname}${release}${shared_ext}$major'\n  shlibpath_var=LD_LIBRARY_PATH\n  ;;\n\n*)\n  dynamic_linker=no\n  ;;\nesac\nAC_MSG_RESULT([$dynamic_linker])\ntest \"$dynamic_linker\" = no && can_build_shared=no\n\nvariables_saved_for_relink=\"PATH $shlibpath_var $runpath_var\"\nif test \"$GCC\" = yes; then\n  variables_saved_for_relink=\"$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH\"\nfi\n\nif test \"${lt_cv_sys_lib_search_path_spec+set}\" = set; then\n  sys_lib_search_path_spec=\"$lt_cv_sys_lib_search_path_spec\"\nfi\nif test \"${lt_cv_sys_lib_dlsearch_path_spec+set}\" = set; then\n  sys_lib_dlsearch_path_spec=\"$lt_cv_sys_lib_dlsearch_path_spec\"\nfi\n\n_LT_DECL([], [variables_saved_for_relink], [1],\n    [Variables whose values should be saved in libtool wrapper scripts and\n    restored at link time])\n_LT_DECL([], [need_lib_prefix], [0],\n    [Do we need the \"lib\" prefix for modules?])\n_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])\n_LT_DECL([], [version_type], [0], [Library versioning type])\n_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])\n_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])\n_LT_DECL([], [shlibpath_overrides_runpath], [0],\n    [Is shlibpath searched before the hard-coded library search path?])\n_LT_DECL([], [libname_spec], [1], [Format of library name prefix])\n_LT_DECL([], [library_names_spec], [1],\n    [[List of archive names.  First name is the real one, the rest are links.\n    The last name is the one that the linker finds with -lNAME]])\n_LT_DECL([], [soname_spec], [1],\n    [[The coded name of the library, if different from the real name]])\n_LT_DECL([], [install_override_mode], [1],\n    [Permission mode override for installation of shared libraries])\n_LT_DECL([], [postinstall_cmds], [2],\n    [Command to use after installation of a shared archive])\n_LT_DECL([], [postuninstall_cmds], [2],\n    [Command to use after uninstallation of a shared archive])\n_LT_DECL([], [finish_cmds], [2],\n    [Commands used to finish a libtool library installation in a directory])\n_LT_DECL([], [finish_eval], [1],\n    [[As \"finish_cmds\", except a single script fragment to be evaled but\n    not shown]])\n_LT_DECL([], [hardcode_into_libs], [0],\n    [Whether we should hardcode library paths into libraries])\n_LT_DECL([], [sys_lib_search_path_spec], [2],\n    [Compile-time system search path for libraries])\n_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],\n    [Run-time system search path for libraries])\n])# _LT_SYS_DYNAMIC_LINKER\n\n\n# _LT_PATH_TOOL_PREFIX(TOOL)\n# --------------------------\n# find a file program which can recognize shared library\nAC_DEFUN([_LT_PATH_TOOL_PREFIX],\n[m4_require([_LT_DECL_EGREP])dnl\nAC_MSG_CHECKING([for $1])\nAC_CACHE_VAL(lt_cv_path_MAGIC_CMD,\n[case $MAGIC_CMD in\n[[\\\\/*] |  ?:[\\\\/]*])\n  lt_cv_path_MAGIC_CMD=\"$MAGIC_CMD\" # Let the user override the test with a path.\n  ;;\n*)\n  lt_save_MAGIC_CMD=\"$MAGIC_CMD\"\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\ndnl $ac_dummy forces splitting on constant user-supplied paths.\ndnl POSIX.2 word splitting is done only on the output of word expansions,\ndnl not every word.  This closes a longstanding sh security hole.\n  ac_dummy=\"m4_if([$2], , $PATH, [$2])\"\n  for ac_dir in $ac_dummy; do\n    IFS=\"$lt_save_ifs\"\n    test -z \"$ac_dir\" && ac_dir=.\n    if test -f $ac_dir/$1; then\n      lt_cv_path_MAGIC_CMD=\"$ac_dir/$1\"\n      if test -n \"$file_magic_test_file\"; then\n\tcase $deplibs_check_method in\n\t\"file_magic \"*)\n\t  file_magic_regex=`expr \"$deplibs_check_method\" : \"file_magic \\(.*\\)\"`\n\t  MAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\n\t  if eval $file_magic_cmd \\$file_magic_test_file 2> /dev/null |\n\t    $EGREP \"$file_magic_regex\" > /dev/null; then\n\t    :\n\t  else\n\t    cat <<_LT_EOF 1>&2\n\n*** Warning: the command libtool uses to detect shared libraries,\n*** $file_magic_cmd, produces output that libtool cannot recognize.\n*** The result is that libtool may fail to recognize shared libraries\n*** as such.  This will affect the creation of libtool libraries that\n*** depend on shared libraries, but programs linked with such libtool\n*** libraries will work regardless of this problem.  Nevertheless, you\n*** may want to report the problem to your system manager and/or to\n*** bug-libtool@gnu.org\n\n_LT_EOF\n\t  fi ;;\n\tesac\n      fi\n      break\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\n  MAGIC_CMD=\"$lt_save_MAGIC_CMD\"\n  ;;\nesac])\nMAGIC_CMD=\"$lt_cv_path_MAGIC_CMD\"\nif test -n \"$MAGIC_CMD\"; then\n  AC_MSG_RESULT($MAGIC_CMD)\nelse\n  AC_MSG_RESULT(no)\nfi\n_LT_DECL([], [MAGIC_CMD], [0],\n\t [Used to examine libraries when file_magic_cmd begins with \"file\"])dnl\n])# _LT_PATH_TOOL_PREFIX\n\n# Old name:\nAU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])\n\n\n# _LT_PATH_MAGIC\n# --------------\n# find a file program which can recognize a shared library\nm4_defun([_LT_PATH_MAGIC],\n[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)\nif test -z \"$lt_cv_path_MAGIC_CMD\"; then\n  if test -n \"$ac_tool_prefix\"; then\n    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)\n  else\n    MAGIC_CMD=:\n  fi\nfi\n])# _LT_PATH_MAGIC\n\n\n# LT_PATH_LD\n# ----------\n# find the pathname to the GNU or non-GNU linker\nAC_DEFUN([LT_PATH_LD],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_PROG_ECHO_BACKSLASH])dnl\n\nAC_ARG_WITH([gnu-ld],\n    [AS_HELP_STRING([--with-gnu-ld],\n\t[assume the C compiler uses GNU ld @<:@default=no@:>@])],\n    [test \"$withval\" = no || with_gnu_ld=yes],\n    [with_gnu_ld=no])dnl\n\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 $CC])\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    [[\\\\/]]* | ?:[[\\\\/]]*)\n      re_direlt='/[[^/]][[^/]]*/\\.\\./'\n      # Canonicalize the pathname 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(lt_cv_path_LD,\n[if test -z \"$LD\"; then\n  lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n  for ac_dir in $PATH; do\n    IFS=\"$lt_save_ifs\"\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      lt_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 variants of GNU ld only accept -v.\n      # Break only if it was the GNU/non-GNU ld that we prefer.\n      case `\"$lt_cv_path_LD\" -v 2>&1 </dev/null` in\n      *GNU* | *'with BFD'*)\n\ttest \"$with_gnu_ld\" != no && break\n\t;;\n      *)\n\ttest \"$with_gnu_ld\" != yes && break\n\t;;\n      esac\n    fi\n  done\n  IFS=\"$lt_save_ifs\"\nelse\n  lt_cv_path_LD=\"$LD\" # Let the user override the test with a path.\nfi])\nLD=\"$lt_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])\n_LT_PATH_LD_GNU\nAC_SUBST([LD])\n\n_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])\n])# LT_PATH_LD\n\n# Old names:\nAU_ALIAS([AM_PROG_LD], [LT_PATH_LD])\nAU_ALIAS([AC_PROG_LD], [LT_PATH_LD])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_LD], [])\ndnl AC_DEFUN([AC_PROG_LD], [])\n\n\n# _LT_PATH_LD_GNU\n#- --------------\nm4_defun([_LT_PATH_LD_GNU],\n[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,\n[# I'd rather use --version here, but apparently some GNU lds only accept -v.\ncase `$LD -v 2>&1 </dev/null` in\n*GNU* | *'with BFD'*)\n  lt_cv_prog_gnu_ld=yes\n  ;;\n*)\n  lt_cv_prog_gnu_ld=no\n  ;;\nesac])\nwith_gnu_ld=$lt_cv_prog_gnu_ld\n])# _LT_PATH_LD_GNU\n\n\n# _LT_CMD_RELOAD\n# --------------\n# find reload flag for linker\n#   -- PORTME Some linkers may need a different reload flag.\nm4_defun([_LT_CMD_RELOAD],\n[AC_CACHE_CHECK([for $LD option to reload object files],\n  lt_cv_ld_reload_flag,\n  [lt_cv_ld_reload_flag='-r'])\nreload_flag=$lt_cv_ld_reload_flag\ncase $reload_flag in\n\"\" | \" \"*) ;;\n*) reload_flag=\" $reload_flag\" ;;\nesac\nreload_cmds='$LD$reload_flag -o $output$reload_objs'\ncase $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\n    if test \"$GCC\" != yes; then\n      reload_cmds=false\n    fi\n    ;;\n  darwin*)\n    if test \"$GCC\" = yes; then\n      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'\n    else\n      reload_cmds='$LD$reload_flag -o $output$reload_objs'\n    fi\n    ;;\nesac\n_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl\n_LT_TAGDECL([], [reload_cmds], [2])dnl\n])# _LT_CMD_RELOAD\n\n\n# _LT_CHECK_MAGIC_METHOD\n# ----------------------\n# how to check for library dependencies\n#  -- PORTME fill in with the dynamic library characteristics\nm4_defun([_LT_CHECK_MAGIC_METHOD],\n[m4_require([_LT_DECL_EGREP])\nm4_require([_LT_DECL_OBJDUMP])\nAC_CACHE_CHECK([how to recognize dependent libraries],\nlt_cv_deplibs_check_method,\n[lt_cv_file_magic_cmd='$MAGIC_CMD'\nlt_cv_file_magic_test_file=\nlt_cv_deplibs_check_method='unknown'\n# Need to set the preceding variable on all platforms that support\n# interlibrary dependencies.\n# 'none' -- dependencies not supported.\n# `unknown' -- same as none, but documents that we really don't know.\n# 'pass_all' -- all dependencies passed with no checks.\n# 'test_compile' -- check by making test program.\n# 'file_magic [[regex]]' -- check by looking for files in library path\n# which responds to the $file_magic_cmd with a given extended regex.\n# If you have `file' or equivalent on your system and you're not sure\n# whether `pass_all' will *always* work, you probably want this one.\n\ncase $host_os in\naix[[4-9]]*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbeos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nbsdi[[45]]*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'\n  lt_cv_file_magic_cmd='/usr/bin/file -L'\n  lt_cv_file_magic_test_file=/shlib/libc.so\n  ;;\n\ncygwin*)\n  # func_win32_libid is a shell function defined in ltmain.sh\n  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n  lt_cv_file_magic_cmd='func_win32_libid'\n  ;;\n\nmingw* | pw32*)\n  # Base MSYS/MinGW do not provide the 'file' command needed by\n  # func_win32_libid shell function, so use a weaker test based on 'objdump',\n  # unless we find 'file', for example because we are cross-compiling.\n  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.\n  if ( test \"$lt_cv_nm_interface\" = \"BSD nm\" && file / ) >/dev/null 2>&1; then\n    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'\n    lt_cv_file_magic_cmd='func_win32_libid'\n  else\n    # Keep this pattern in sync with the one in func_win32_libid.\n    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'\n    lt_cv_file_magic_cmd='$OBJDUMP -f'\n  fi\n  ;;\n\ncegcc*)\n  # use the weaker test based on 'objdump'. See mingw*.\n  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'\n  lt_cv_file_magic_cmd='$OBJDUMP -f'\n  ;;\n\ndarwin* | rhapsody*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nfreebsd* | dragonfly*)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    case $host_cpu in\n    i*86 )\n      # Not sure whether the presence of OpenBSD here was a mistake.\n      # Let's accept both of them until this is cleared up.\n      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'\n      lt_cv_file_magic_cmd=/usr/bin/file\n      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`\n      ;;\n    esac\n  else\n    lt_cv_deplibs_check_method=pass_all\n  fi\n  ;;\n\nhaiku*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nhpux10.20* | hpux11*)\n  lt_cv_file_magic_cmd=/usr/bin/file\n  case $host_cpu in\n  ia64*)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'\n    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so\n    ;;\n  hppa*64*)\n    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\\.[0-9]']\n    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl\n    ;;\n  *)\n    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\\.[[0-9]]) shared library'\n    lt_cv_file_magic_test_file=/usr/lib/libc.sl\n    ;;\n  esac\n  ;;\n\ninterix[[3-9]]*)\n  # PIC code is broken on Interix 3.x, that's why |\\.a not |_pic\\.a here\n  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|\\.a)$'\n  ;;\n\nirix5* | irix6* | nonstopux*)\n  case $LD in\n  *-32|*\"-32 \") libmagic=32-bit;;\n  *-n32|*\"-n32 \") libmagic=N32;;\n  *-64|*\"-64 \") libmagic=64-bit;;\n  *) libmagic=never-match;;\n  esac\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\n# This must be glibc/ELF.\nlinux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nnetbsd* | netbsdelf*-gnu)\n  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so|_pic\\.a)$'\n  fi\n  ;;\n\nnewos6*)\n  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'\n  lt_cv_file_magic_cmd=/usr/bin/file\n  lt_cv_file_magic_test_file=/usr/lib/libnls.so\n  ;;\n\n*nto* | *qnx*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nopenbsd*)\n  if test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|\\.so|_pic\\.a)$'\n  else\n    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\\.so\\.[[0-9]]+\\.[[0-9]]+|_pic\\.a)$'\n  fi\n  ;;\n\nosf3* | osf4* | osf5*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nrdos*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsolaris*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\n\nsysv4 | sysv4.3*)\n  case $host_vendor in\n  motorola)\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'\n    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`\n    ;;\n  ncr)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  sequent)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'\n    ;;\n  sni)\n    lt_cv_file_magic_cmd='/bin/file'\n    lt_cv_deplibs_check_method=\"file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib\"\n    lt_cv_file_magic_test_file=/lib/libc.so\n    ;;\n  siemens)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  pc)\n    lt_cv_deplibs_check_method=pass_all\n    ;;\n  esac\n  ;;\n\ntpf*)\n  lt_cv_deplibs_check_method=pass_all\n  ;;\nesac\n])\n\nfile_magic_glob=\nwant_nocaseglob=no\nif test \"$build\" = \"$host\"; then\n  case $host_os in\n  mingw* | pw32*)\n    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then\n      want_nocaseglob=yes\n    else\n      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e \"s/\\(..\\)/s\\/[[\\1]]\\/[[\\1]]\\/g;/g\"`\n    fi\n    ;;\n  esac\nfi\n\nfile_magic_cmd=$lt_cv_file_magic_cmd\ndeplibs_check_method=$lt_cv_deplibs_check_method\ntest -z \"$deplibs_check_method\" && deplibs_check_method=unknown\n\n_LT_DECL([], [deplibs_check_method], [1],\n    [Method to check whether dependent libraries are shared objects])\n_LT_DECL([], [file_magic_cmd], [1],\n    [Command to use when deplibs_check_method = \"file_magic\"])\n_LT_DECL([], [file_magic_glob], [1],\n    [How to find potential files when deplibs_check_method = \"file_magic\"])\n_LT_DECL([], [want_nocaseglob], [1],\n    [Find potential files using nocaseglob when deplibs_check_method = \"file_magic\"])\n])# _LT_CHECK_MAGIC_METHOD\n\n\n# LT_PATH_NM\n# ----------\n# find the pathname to a BSD- or MS-compatible name lister\nAC_DEFUN([LT_PATH_NM],\n[AC_REQUIRE([AC_PROG_CC])dnl\nAC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,\n[if test -n \"$NM\"; then\n  # Let the user override the test.\n  lt_cv_path_NM=\"$NM\"\nelse\n  lt_nm_to_check=\"${ac_tool_prefix}nm\"\n  if test -n \"$ac_tool_prefix\" && test \"$build\" = \"$host\"; then\n    lt_nm_to_check=\"$lt_nm_to_check nm\"\n  fi\n  for lt_tmp_nm in $lt_nm_to_check; do\n    lt_save_ifs=\"$IFS\"; IFS=$PATH_SEPARATOR\n    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do\n      IFS=\"$lt_save_ifs\"\n      test -z \"$ac_dir\" && ac_dir=.\n      tmp_nm=\"$ac_dir/$lt_tmp_nm\"\n      if test -f \"$tmp_nm\" || test -f \"$tmp_nm$ac_exeext\" ; then\n\t# Check to see if the nm accepts a BSD-compat flag.\n\t# Adding the `sed 1q' prevents false positives on HP-UX, which says:\n\t#   nm: unknown option \"B\" ignored\n\t# Tru64's nm complains that /dev/null is an invalid object file\n\tcase `\"$tmp_nm\" -B /dev/null 2>&1 | sed '1q'` in\n\t*/dev/null* | *'Invalid file or object type'*)\n\t  lt_cv_path_NM=\"$tmp_nm -B\"\n\t  break\n\t  ;;\n\t*)\n\t  case `\"$tmp_nm\" -p /dev/null 2>&1 | sed '1q'` in\n\t  */dev/null*)\n\t    lt_cv_path_NM=\"$tmp_nm -p\"\n\t    break\n\t    ;;\n\t  *)\n\t    lt_cv_path_NM=${lt_cv_path_NM=\"$tmp_nm\"} # keep the first match, but\n\t    continue # so that we can try to find one that supports BSD flags\n\t    ;;\n\t  esac\n\t  ;;\n\tesac\n      fi\n    done\n    IFS=\"$lt_save_ifs\"\n  done\n  : ${lt_cv_path_NM=no}\nfi])\nif test \"$lt_cv_path_NM\" != \"no\"; then\n  NM=\"$lt_cv_path_NM\"\nelse\n  # Didn't find any BSD compatible name lister, look for dumpbin.\n  if test -n \"$DUMPBIN\"; then :\n    # Let the user override the test.\n  else\n    AC_CHECK_TOOLS(DUMPBIN, [dumpbin \"link -dump\"], :)\n    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in\n    *COFF*)\n      DUMPBIN=\"$DUMPBIN -symbols\"\n      ;;\n    *)\n      DUMPBIN=:\n      ;;\n    esac\n  fi\n  AC_SUBST([DUMPBIN])\n  if test \"$DUMPBIN\" != \":\"; then\n    NM=\"$DUMPBIN\"\n  fi\nfi\ntest -z \"$NM\" && NM=nm\nAC_SUBST([NM])\n_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl\n\nAC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],\n  [lt_cv_nm_interface=\"BSD nm\"\n  echo \"int some_variable = 0;\" > conftest.$ac_ext\n  (eval echo \"\\\"\\$as_me:$LINENO: $ac_compile\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$ac_compile\" 2>conftest.err)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:$LINENO: $NM \\\\\\\"conftest.$ac_objext\\\\\\\"\\\"\" >&AS_MESSAGE_LOG_FD)\n  (eval \"$NM \\\"conftest.$ac_objext\\\"\" 2>conftest.err > conftest.out)\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  (eval echo \"\\\"\\$as_me:$LINENO: output\\\"\" >&AS_MESSAGE_LOG_FD)\n  cat conftest.out >&AS_MESSAGE_LOG_FD\n  if $GREP 'External.*some_variable' conftest.out > /dev/null; then\n    lt_cv_nm_interface=\"MS dumpbin\"\n  fi\n  rm -f conftest*])\n])# LT_PATH_NM\n\n# Old names:\nAU_ALIAS([AM_PROG_NM], [LT_PATH_NM])\nAU_ALIAS([AC_PROG_NM], [LT_PATH_NM])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_PROG_NM], [])\ndnl AC_DEFUN([AC_PROG_NM], [])\n\n# _LT_CHECK_SHAREDLIB_FROM_LINKLIB\n# --------------------------------\n# how to determine the name of the shared library\n# associated with a specific link library.\n#  -- PORTME fill in with the dynamic library characteristics\nm4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],\n[m4_require([_LT_DECL_EGREP])\nm4_require([_LT_DECL_OBJDUMP])\nm4_require([_LT_DECL_DLLTOOL])\nAC_CACHE_CHECK([how to associate runtime and link libraries],\nlt_cv_sharedlib_from_linklib_cmd,\n[lt_cv_sharedlib_from_linklib_cmd='unknown'\n\ncase $host_os in\ncygwin* | mingw* | pw32* | cegcc*)\n  # two different shell functions defined in ltmain.sh\n  # decide which to use based on capabilities of $DLLTOOL\n  case `$DLLTOOL --help 2>&1` in\n  *--identify-strict*)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib\n    ;;\n  *)\n    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback\n    ;;\n  esac\n  ;;\n*)\n  # fallback: assume linklib IS sharedlib\n  lt_cv_sharedlib_from_linklib_cmd=\"$ECHO\"\n  ;;\nesac\n])\nsharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd\ntest -z \"$sharedlib_from_linklib_cmd\" && sharedlib_from_linklib_cmd=$ECHO\n\n_LT_DECL([], [sharedlib_from_linklib_cmd], [1],\n    [Command to associate shared and link libraries])\n])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB\n\n\n# _LT_PATH_MANIFEST_TOOL\n# ----------------------\n# locate the manifest tool\nm4_defun([_LT_PATH_MANIFEST_TOOL],\n[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)\ntest -z \"$MANIFEST_TOOL\" && MANIFEST_TOOL=mt\nAC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],\n  [lt_cv_path_mainfest_tool=no\n  echo \"$as_me:$LINENO: $MANIFEST_TOOL '-?'\" >&AS_MESSAGE_LOG_FD\n  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out\n  cat conftest.err >&AS_MESSAGE_LOG_FD\n  if $GREP 'Manifest Tool' conftest.out > /dev/null; then\n    lt_cv_path_mainfest_tool=yes\n  fi\n  rm -f conftest*])\nif test \"x$lt_cv_path_mainfest_tool\" != xyes; then\n  MANIFEST_TOOL=:\nfi\n_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl\n])# _LT_PATH_MANIFEST_TOOL\n\n\n# LT_LIB_M\n# --------\n# check for math library\nAC_DEFUN([LT_LIB_M],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nLIBM=\ncase $host in\n*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)\n  # These system don't have libm, or don't need it\n  ;;\n*-ncr-sysv4.3*)\n  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=\"-lmw\")\n  AC_CHECK_LIB(m, cos, LIBM=\"$LIBM -lm\")\n  ;;\n*)\n  AC_CHECK_LIB(m, cos, LIBM=\"-lm\")\n  ;;\nesac\nAC_SUBST([LIBM])\n])# LT_LIB_M\n\n# Old name:\nAU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_CHECK_LIBM], [])\n\n\n# _LT_COMPILER_NO_RTTI([TAGNAME])\n# -------------------------------\nm4_defun([_LT_COMPILER_NO_RTTI],\n[m4_require([_LT_TAG_COMPILER])dnl\n\n_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n\nif test \"$GCC\" = yes; then\n  case $cc_basename in\n  nvcc*)\n    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;\n  *)\n    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;\n  esac\n\n  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],\n    lt_cv_prog_compiler_rtti_exceptions,\n    [-fno-rtti -fno-exceptions], [],\n    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\"$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions\"])\nfi\n_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],\n\t[Compiler flag to turn off builtin functions])\n])# _LT_COMPILER_NO_RTTI\n\n\n# _LT_CMD_GLOBAL_SYMBOLS\n# ----------------------\nm4_defun([_LT_CMD_GLOBAL_SYMBOLS],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_PROG_CC])dnl\nAC_REQUIRE([AC_PROG_AWK])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nAC_REQUIRE([LT_PATH_LD])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_TAG_COMPILER])dnl\n\n# Check for command to grab the raw symbol name followed by C symbol from nm.\nAC_MSG_CHECKING([command to parse $NM output from $compiler object])\nAC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],\n[\n# These are sane defaults that work on at least a few old systems.\n# [They come from Ultrix.  What could be older than Ultrix?!! ;)]\n\n# Character class describing NM global symbol codes.\nsymcode='[[BCDEGRST]]'\n\n# Regexp to match symbols that can be accessed directly from C.\nsympat='\\([[_A-Za-z]][[_A-Za-z0-9]]*\\)'\n\n# Define system-specific variables.\ncase $host_os in\naix*)\n  symcode='[[BCDT]]'\n  ;;\ncygwin* | mingw* | pw32* | cegcc*)\n  symcode='[[ABCDGISTW]]'\n  ;;\nhpux*)\n  if test \"$host_cpu\" = ia64; then\n    symcode='[[ABCDEGRST]]'\n  fi\n  ;;\nirix* | nonstopux*)\n  symcode='[[BCDEGRST]]'\n  ;;\nosf*)\n  symcode='[[BCDEGQRST]]'\n  ;;\nsolaris*)\n  symcode='[[BDRT]]'\n  ;;\nsco3.2v5*)\n  symcode='[[DT]]'\n  ;;\nsysv4.2uw2*)\n  symcode='[[DT]]'\n  ;;\nsysv5* | sco5v6* | unixware* | OpenUNIX*)\n  symcode='[[ABDT]]'\n  ;;\nsysv4)\n  symcode='[[DFNSTU]]'\n  ;;\nesac\n\n# If we're using GNU nm, then use its standard symbol codes.\ncase `$NM -V 2>&1` in\n*GNU* | *'with BFD'*)\n  symcode='[[ABCDGIRSTW]]' ;;\nesac\n\n# Transform an extracted symbol line into a proper C declaration.\n# Some systems (esp. on ia64) link data and code symbols differently,\n# so use this general approach.\nlt_cv_sys_global_symbol_to_cdecl=\"sed -n -e 's/^T .* \\(.*\\)$/extern int \\1();/p' -e 's/^$symcode* .* \\(.*\\)$/extern char \\1;/p'\"\n\n# Transform an extracted symbol line into symbol name and symbol address\nlt_cv_sys_global_symbol_to_c_name_address=\"sed -n -e 's/^: \\([[^ ]]*\\)[[ ]]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p'\"\nlt_cv_sys_global_symbol_to_c_name_address_lib_prefix=\"sed -n -e 's/^: \\([[^ ]]*\\)[[ ]]*$/  {\\\\\\\"\\1\\\\\\\", (void *) 0},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\(lib[[^ ]]*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/p' -e 's/^$symcode* \\([[^ ]]*\\) \\([[^ ]]*\\)$/  {\\\"lib\\2\\\", (void *) \\&\\2},/p'\"\n\n# Handle CRLF in mingw tool chain\nopt_cr=\ncase $build_os in\nmingw*)\n  opt_cr=`$ECHO 'x\\{0,1\\}' | tr x '\\015'` # option cr in regexp\n  ;;\nesac\n\n# Try without a prefix underscore, then with it.\nfor ac_symprfx in \"\" \"_\"; do\n\n  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.\n  symxfrm=\"\\\\1 $ac_symprfx\\\\2 \\\\2\"\n\n  # Write the raw and C identifiers.\n  if test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n    # Fake it for dumpbin and say T for any non-static function\n    # and D for any global variable.\n    # Also find C++ and __fastcall symbols from MSVC++,\n    # which start with @ or ?.\n    lt_cv_sys_global_symbol_pipe=\"$AWK ['\"\\\n\"     {last_section=section; section=\\$ 3};\"\\\n\"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};\"\\\n\"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};\"\\\n\"     \\$ 0!~/External *\\|/{next};\"\\\n\"     / 0+ UNDEF /{next}; / UNDEF \\([^|]\\)*()/{next};\"\\\n\"     {if(hide[section]) next};\"\\\n\"     {f=0}; \\$ 0~/\\(\\).*\\|/{f=1}; {printf f ? \\\"T \\\" : \\\"D \\\"};\"\\\n\"     {split(\\$ 0, a, /\\||\\r/); split(a[2], s)};\"\\\n\"     s[1]~/^[@?]/{print s[1], s[1]; next};\"\\\n\"     s[1]~prfx {split(s[1],t,\\\"@\\\"); print t[1], substr(t[1],length(prfx))}\"\\\n\"     ' prfx=^$ac_symprfx]\"\n  else\n    lt_cv_sys_global_symbol_pipe=\"sed -n -e 's/^.*[[\t ]]\\($symcode$symcode*\\)[[\t ]][[\t ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'\"\n  fi\n  lt_cv_sys_global_symbol_pipe=\"$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'\"\n\n  # Check to see that the pipe works correctly.\n  pipe_works=no\n\n  rm -f conftest*\n  cat > conftest.$ac_ext <<_LT_EOF\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nchar nm_test_var;\nvoid nm_test_func(void);\nvoid nm_test_func(void){}\n#ifdef __cplusplus\n}\n#endif\nint main(){nm_test_var='a';nm_test_func();return(0);}\n_LT_EOF\n\n  if AC_TRY_EVAL(ac_compile); then\n    # Now try to grab the symbols.\n    nlist=conftest.nm\n    if AC_TRY_EVAL(NM conftest.$ac_objext \\| \"$lt_cv_sys_global_symbol_pipe\" \\> $nlist) && test -s \"$nlist\"; then\n      # Try sorting and uniquifying the output.\n      if sort \"$nlist\" | uniq > \"$nlist\"T; then\n\tmv -f \"$nlist\"T \"$nlist\"\n      else\n\trm -f \"$nlist\"T\n      fi\n\n      # Make sure that we snagged all the symbols we need.\n      if $GREP ' nm_test_var$' \"$nlist\" >/dev/null; then\n\tif $GREP ' nm_test_func$' \"$nlist\" >/dev/null; then\n\t  cat <<_LT_EOF > conftest.$ac_ext\n/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */\n#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)\n/* DATA imports from DLLs on WIN32 con't be const, because runtime\n   relocations are performed -- see ld's documentation on pseudo-relocs.  */\n# define LT@&t@_DLSYM_CONST\n#elif defined(__osf__)\n/* This system does not cope well with relocations in const data.  */\n# define LT@&t@_DLSYM_CONST\n#else\n# define LT@&t@_DLSYM_CONST const\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n_LT_EOF\n\t  # Now generate the symbol file.\n\t  eval \"$lt_cv_sys_global_symbol_to_cdecl\"' < \"$nlist\" | $GREP -v main >> conftest.$ac_ext'\n\n\t  cat <<_LT_EOF >> conftest.$ac_ext\n\n/* The mapping between symbol names and symbols.  */\nLT@&t@_DLSYM_CONST struct {\n  const char *name;\n  void       *address;\n}\nlt__PROGRAM__LTX_preloaded_symbols[[]] =\n{\n  { \"@PROGRAM@\", (void *) 0 },\n_LT_EOF\n\t  $SED \"s/^$symcode$symcode* \\(.*\\) \\(.*\\)$/  {\\\"\\2\\\", (void *) \\&\\2},/\" < \"$nlist\" | $GREP -v main >> conftest.$ac_ext\n\t  cat <<\\_LT_EOF >> conftest.$ac_ext\n  {0, (void *) 0}\n};\n\n/* This works around a problem in FreeBSD linker */\n#ifdef FREEBSD_WORKAROUND\nstatic const void *lt_preloaded_setup() {\n  return lt__PROGRAM__LTX_preloaded_symbols;\n}\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n_LT_EOF\n\t  # Now try linking the two files.\n\t  mv conftest.$ac_objext conftstm.$ac_objext\n\t  lt_globsym_save_LIBS=$LIBS\n\t  lt_globsym_save_CFLAGS=$CFLAGS\n\t  LIBS=\"conftstm.$ac_objext\"\n\t  CFLAGS=\"$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)\"\n\t  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then\n\t    pipe_works=yes\n\t  fi\n\t  LIBS=$lt_globsym_save_LIBS\n\t  CFLAGS=$lt_globsym_save_CFLAGS\n\telse\n\t  echo \"cannot find nm_test_func in $nlist\" >&AS_MESSAGE_LOG_FD\n\tfi\n      else\n\techo \"cannot find nm_test_var in $nlist\" >&AS_MESSAGE_LOG_FD\n      fi\n    else\n      echo \"cannot run $lt_cv_sys_global_symbol_pipe\" >&AS_MESSAGE_LOG_FD\n    fi\n  else\n    echo \"$progname: failed program was:\" >&AS_MESSAGE_LOG_FD\n    cat conftest.$ac_ext >&5\n  fi\n  rm -rf conftest* conftst*\n\n  # Do not use the global_symbol_pipe unless it works.\n  if test \"$pipe_works\" = yes; then\n    break\n  else\n    lt_cv_sys_global_symbol_pipe=\n  fi\ndone\n])\nif test -z \"$lt_cv_sys_global_symbol_pipe\"; then\n  lt_cv_sys_global_symbol_to_cdecl=\nfi\nif test -z \"$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl\"; then\n  AC_MSG_RESULT(failed)\nelse\n  AC_MSG_RESULT(ok)\nfi\n\n# Response file support.\nif test \"$lt_cv_nm_interface\" = \"MS dumpbin\"; then\n  nm_file_list_spec='@'\nelif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then\n  nm_file_list_spec='@'\nfi\n\n_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],\n    [Take the output of nm and produce a listing of raw symbols and C names])\n_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],\n    [Transform the output of nm in a proper C declaration])\n_LT_DECL([global_symbol_to_c_name_address],\n    [lt_cv_sys_global_symbol_to_c_name_address], [1],\n    [Transform the output of nm in a C name address pair])\n_LT_DECL([global_symbol_to_c_name_address_lib_prefix],\n    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],\n    [Transform the output of nm in a C name address pair when lib prefix is needed])\n_LT_DECL([], [nm_file_list_spec], [1],\n    [Specify filename containing input files for $NM])\n]) # _LT_CMD_GLOBAL_SYMBOLS\n\n\n# _LT_COMPILER_PIC([TAGNAME])\n# ---------------------------\nm4_defun([_LT_COMPILER_PIC],\n[m4_require([_LT_TAG_COMPILER])dnl\n_LT_TAGVAR(lt_prog_compiler_wl, $1)=\n_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n_LT_TAGVAR(lt_prog_compiler_static, $1)=\n\nm4_if([$1], [CXX], [\n  # C++ specific cases for pic, static, wl, etc.\n  if test \"$GXX\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n    aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n    mingw* | cygwin* | os2* | pw32* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n    *djgpp*)\n      # DJGPP does not support shared libraries at all\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n      ;;\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)=\n      ;;\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n    *qnx* | *nto*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n  else\n    case $host_os in\n      aix[[4-9]]*)\n\t# All AIX code is PIC.\n\tif test \"$host_cpu\" = ia64; then\n\t  # AIX 5 now supports IA64 processor\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\telse\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n\tfi\n\t;;\n      chorus*)\n\tcase $cc_basename in\n\tcxch68*)\n\t  # Green Hills C++ Compiler\n\t  # _LT_TAGVAR(lt_prog_compiler_static, $1)=\"--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a\"\n\t  ;;\n\tesac\n\t;;\n      mingw* | cygwin* | os2* | pw32* | cegcc*)\n\t# This hack is so that the source file can tell whether it is being\n\t# built for inclusion in a dll (and should export symbols for example).\n\tm4_if([$1], [GCJ], [],\n\t  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n\t;;\n      dgux*)\n\tcase $cc_basename in\n\t  ec++*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  ghcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      freebsd* | dragonfly*)\n\t# FreeBSD uses GNU C++\n\t;;\n      hpux9* | hpux10* | hpux11*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    if test \"$host_cpu\" != ia64; then\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t    fi\n\t    ;;\n\t  aCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n\t    case $host_cpu in\n\t    hppa*64*|ia64*)\n\t      # +Z the default\n\t      ;;\n\t    *)\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t      ;;\n\t    esac\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      interix*)\n\t# This is c89, which is MS Visual C++ (no shared libs)\n\t# Anyone wants to do a port?\n\t;;\n      irix5* | irix6* | nonstopux*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    # CC pic flag -KPIC is the default.\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    # KAI C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    ;;\n\t  ecpc* )\n\t    # old Intel C++ for x86_64 which still supported -KPIC.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  icpc* )\n\t    # Intel C++, used to be incompatible with GCC.\n\t    # ICC 10 doesn't accept -KPIC any more.\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t    ;;\n\t  pgCC* | pgcpp*)\n\t    # Portland Group C++ compiler\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)\n\t    # IBM XL 8.0, 9.0 on PPC and BlueGene\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n      lynxos*)\n\t;;\n      m88k*)\n\t;;\n      mvs*)\n\tcase $cc_basename in\n\t  cxx*)\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      netbsd* | netbsdelf*-gnu)\n\t;;\n      *qnx* | *nto*)\n        # QNX uses GNU C++, but need to define -shared option too, otherwise\n        # it will coredump.\n        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n        ;;\n      osf3* | osf4* | osf5*)\n\tcase $cc_basename in\n\t  KCC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'\n\t    ;;\n\t  RCC*)\n\t    # Rational C++ 2.4.1\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  cxx*)\n\t    # Digital/Compaq C++\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    # Make sure the PIC flag is empty.  It appears that all Alpha\n\t    # Linux and Compaq Tru64 Unix objects are PIC.\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      psos*)\n\t;;\n      solaris*)\n\tcase $cc_basename in\n\t  CC* | sunCC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t    ;;\n\t  gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sunos4*)\n\tcase $cc_basename in\n\t  CC*)\n\t    # Sun C++ 4.x\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\t  lcc*)\n\t    # Lucid\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n\tcase $cc_basename in\n\t  CC*)\n\t    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t    ;;\n\tesac\n\t;;\n      tandem*)\n\tcase $cc_basename in\n\t  NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t    ;;\n\t  *)\n\t    ;;\n\tesac\n\t;;\n      vxworks*)\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n\t;;\n    esac\n  fi\n],\n[\n  if test \"$GCC\" = yes; then\n    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\n    case $host_os in\n      aix*)\n      # All AIX code is PIC.\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n        ;;\n      m68k)\n            # FIXME: we need at least 68020 code to build shared libraries, but\n            # adding the `-m68020' flag to GCC prevents building anything better,\n            # like `-m68040'.\n            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'\n        ;;\n      esac\n      ;;\n\n    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)\n      # PIC is the default for these OSes.\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      # Although the cygwin gcc ignores -fPIC, still need this for old-style\n      # (--disable-auto-import) libraries\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    darwin* | rhapsody*)\n      # PIC is the default on this platform\n      # Common symbols not allowed in MH_DYLIB files\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'\n      ;;\n\n    haiku*)\n      # PIC is the default for Haiku.\n      # The \"-static\" flag exists, but is broken.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)=\n      ;;\n\n    hpux*)\n      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit\n      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag\n      # sets the default TLS model and affects inlining.\n      case $host_cpu in\n      hppa*64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t;;\n      esac\n      ;;\n\n    interix[[3-9]]*)\n      # Interix 3.x gcc -fpic/-fPIC options generate broken code.\n      # Instead, we relocate shared libraries at runtime.\n      ;;\n\n    msdosdjgpp*)\n      # Just because we use GCC doesn't mean we suddenly get shared libraries\n      # on systems that don't support them.\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      enable_shared=no\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic\n      fi\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n      ;;\n    esac\n\n    case $cc_basename in\n    nvcc*) # Cuda Compiler Driver 2.2\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '\n      if test -n \"$_LT_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n        _LT_TAGVAR(lt_prog_compiler_pic, $1)=\"-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)\"\n      fi\n      ;;\n    esac\n  else\n    # PORTME Check for flag to pass linker flags through the system compiler.\n    case $host_os in\n    aix*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      if test \"$host_cpu\" = ia64; then\n\t# AIX 5 now supports IA64 processor\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      else\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'\n      fi\n      ;;\n\n    mingw* | cygwin* | pw32* | os2* | cegcc*)\n      # This hack is so that the source file can tell whether it is being\n      # built for inclusion in a dll (and should export symbols for example).\n      m4_if([$1], [GCJ], [],\n\t[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])\n      ;;\n\n    hpux9* | hpux10* | hpux11*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but\n      # not for PA HP-UX.\n      case $host_cpu in\n      hppa*64*|ia64*)\n\t# +Z the default\n\t;;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'\n\t;;\n      esac\n      # Is there a better lt_prog_compiler_static that works with the bundled CC?\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # PIC (with -KPIC) is the default.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n      case $cc_basename in\n      # old Intel for x86_64 which still supported -KPIC.\n      ecc*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # icc used to be incompatible with GCC.\n      # ICC 10 doesn't accept -KPIC any more.\n      icc* | ifort*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n        ;;\n      # Lahey Fortran 8.1.\n      lf95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'\n\t;;\n      nagfor*)\n\t# NAG Fortran compiler\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t;;\n      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)\n        # Portland Group compilers (*not* the Pentium gcc compiler,\n\t# which looks to be a dead project)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n        ;;\n      ccc*)\n        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n        # All Alpha code is PIC.\n        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n        ;;\n      xl* | bgxl* | bgf* | mpixl*)\n\t# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'\n\t;;\n      *)\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ Ceres\\ Fortran* | *Sun*Fortran*\\ [[1-7]].* | *Sun*Fortran*\\ 8.[[0-3]]*)\n\t  # Sun Fortran 8.3 passes all unrecognized flags to the linker\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''\n\t  ;;\n\t*Sun\\ F* | *Sun*Fortran*)\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n\t  ;;\n\t*Sun\\ C*)\n\t  # Sun C 5.9\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  ;;\n        *Intel*\\ [[CF]]*Compiler*)\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'\n\t  ;;\n\t*Portland\\ Group*)\n\t  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n\t  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'\n\t  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n\t  ;;\n\tesac\n\t;;\n      esac\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *nto* | *qnx*)\n      # QNX uses GNU C++, but need to define -shared option too, otherwise\n      # it will coredump.\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'\n      ;;\n\n    osf3* | osf4* | osf5*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      # All OSF/1 code is PIC.\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    rdos*)\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      case $cc_basename in\n      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;\n      *)\n\t_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4 | sysv4.2uw2* | sysv4.3*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec ;then\n\t_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'\n\t_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      fi\n      ;;\n\n    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    unicos*)\n      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'\n      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'\n      ;;\n\n    *)\n      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no\n      ;;\n    esac\n  fi\n])\ncase $host_os in\n  # For platforms which do not support PIC, -DPIC is meaningless:\n  *djgpp*)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\n    ;;\n  *)\n    _LT_TAGVAR(lt_prog_compiler_pic, $1)=\"$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])\"\n    ;;\nesac\n\nAC_CACHE_CHECK([for $compiler option to produce PIC],\n  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],\n  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])\n_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)\n\n#\n# Check to make sure the PIC flag actually works.\n#\nif test -n \"$_LT_TAGVAR(lt_prog_compiler_pic, $1)\"; then\n  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],\n    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],\n    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],\n    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in\n     \"\" | \" \"*) ;;\n     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=\" $_LT_TAGVAR(lt_prog_compiler_pic, $1)\" ;;\n     esac],\n    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=\n     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])\nfi\n_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],\n\t[Additional compiler flags for building library objects])\n\n_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],\n\t[How to pass a linker flag through the compiler])\n#\n# Check to make sure the static flag actually works.\n#\nwl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\\\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\\\"\n_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],\n  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),\n  $lt_tmp_static_flag,\n  [],\n  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])\n_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],\n\t[Compiler flag to prevent dynamic linking])\n])# _LT_COMPILER_PIC\n\n\n# _LT_LINKER_SHLIBS([TAGNAME])\n# ----------------------------\n# See if the linker supports building shared libraries.\nm4_defun([_LT_LINKER_SHLIBS],\n[AC_REQUIRE([LT_PATH_LD])dnl\nAC_REQUIRE([LT_PATH_NM])dnl\nm4_require([_LT_PATH_MANIFEST_TOOL])dnl\nm4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_DECL_SED])dnl\nm4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl\nm4_require([_LT_TAG_COMPILER])dnl\nAC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\nm4_if([$1], [CXX], [\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n  case $host_os in\n  aix[[4-9]]*)\n    # If we're using GNU nm, then we don't want the \"-C\" option.\n    # -C means demangle to AIX nm, but means don't demangle with GNU nm\n    # Also, AIX nm treats weak defined symbols like other global defined\n    # symbols, whereas GNU nm marks them as \"W\".\n    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    else\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n    fi\n    ;;\n  pw32*)\n    _LT_TAGVAR(export_symbols_cmds, $1)=\"$ltdll_cmds\"\n    ;;\n  cygwin* | mingw* | cegcc*)\n    case $cc_basename in\n    cl*)\n      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n      ;;\n    *)\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/;s/^.*[[ ]]__nm__\\([[^ ]]*\\)[[ ]][[^ ]]*/\\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']\n      ;;\n    esac\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n    ;;\n  *)\n    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n    ;;\n  esac\n], [\n  runpath_var=\n  _LT_TAGVAR(allow_undefined_flag, $1)=\n  _LT_TAGVAR(always_export_symbols, $1)=no\n  _LT_TAGVAR(archive_cmds, $1)=\n  _LT_TAGVAR(archive_expsym_cmds, $1)=\n  _LT_TAGVAR(compiler_needs_object, $1)=no\n  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n  _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\\''s/.* //'\\'' | sort | uniq > $export_symbols'\n  _LT_TAGVAR(hardcode_automatic, $1)=no\n  _LT_TAGVAR(hardcode_direct, $1)=no\n  _LT_TAGVAR(hardcode_direct_absolute, $1)=no\n  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n  _LT_TAGVAR(hardcode_minus_L, $1)=no\n  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n  _LT_TAGVAR(inherit_rpath, $1)=no\n  _LT_TAGVAR(link_all_deplibs, $1)=unknown\n  _LT_TAGVAR(module_cmds, $1)=\n  _LT_TAGVAR(module_expsym_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_new_cmds, $1)=\n  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=\n  _LT_TAGVAR(thread_safe_flag_spec, $1)=\n  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n  # include_expsyms should be a list of space-separated symbols to be *always*\n  # included in the symbol list\n  _LT_TAGVAR(include_expsyms, $1)=\n  # exclude_expsyms can be an extended regexp of symbols to exclude\n  # it will be wrapped by ` (' and `)$', so one must not match beginning or\n  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',\n  # as well as any symbol that contains `d'.\n  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']\n  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out\n  # platforms (ab)use it in PIC code, but their linkers get confused if\n  # the symbol is explicitly referenced.  Since portable code cannot\n  # rely on this symbol name, it's probably fine to never include it in\n  # preloaded symbol tables.\n  # Exclude shared library initialization/finalization symbols.\ndnl Note also adjust exclude_expsyms for C++ above.\n  extract_expsyms_cmds=\n\n  case $host_os in\n  cygwin* | mingw* | pw32* | cegcc*)\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  interix*)\n    # we just hope/assume this is gcc and not c89 (= MSVC++)\n    with_gnu_ld=yes\n    ;;\n  openbsd*)\n    with_gnu_ld=no\n    ;;\n  linux* | k*bsd*-gnu | gnu*)\n    _LT_TAGVAR(link_all_deplibs, $1)=no\n    ;;\n  esac\n\n  _LT_TAGVAR(ld_shlibs, $1)=yes\n\n  # On some targets, GNU ld is compatible enough with the native linker\n  # that we're better off using the native interface for both.\n  lt_use_gnu_ld_interface=no\n  if test \"$with_gnu_ld\" = yes; then\n    case $host_os in\n      aix*)\n\t# The AIX port of GNU ld has always aspired to compatibility\n\t# with the native linker.  However, as the warning in the GNU ld\n\t# block says, versions before 2.19.5* couldn't really create working\n\t# shared libraries, regardless of the interface used.\n\tcase `$LD -v 2>&1` in\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.19.5*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ 2.[[2-9]]*) ;;\n\t  *\\ \\(GNU\\ Binutils\\)\\ [[3-9]]*) ;;\n\t  *)\n\t    lt_use_gnu_ld_interface=yes\n\t    ;;\n\tesac\n\t;;\n      *)\n\tlt_use_gnu_ld_interface=yes\n\t;;\n    esac\n  fi\n\n  if test \"$lt_use_gnu_ld_interface\" = yes; then\n    # If archive_cmds runs LD, not CC, wlarc should be empty\n    wlarc='${wl}'\n\n    # Set some defaults for GNU ld with shared library support. These\n    # are reset later if shared libraries are not supported. Putting them\n    # here allows them to be overridden if necessary.\n    runpath_var=LD_RUN_PATH\n    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n    # ancient GNU ld didn't support --whole-archive et. al.\n    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n    else\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n    supports_anon_versioning=no\n    case `$LD -v 2>&1` in\n      *GNU\\ gold*) supports_anon_versioning=yes ;;\n      *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.10.*) ;; # catch versions < 2.11\n      *\\ 2.11.93.0.2\\ *) supports_anon_versioning=yes ;; # RH7.3 ...\n      *\\ 2.11.92.0.12\\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...\n      *\\ 2.11.*) ;; # other 2.11 versions\n      *) supports_anon_versioning=yes ;;\n    esac\n\n    # See if GNU ld supports shared libraries.\n    case $host_os in\n    aix[[3-9]]*)\n      # On AIX/PPC, the GNU linker is very broken\n      if test \"$host_cpu\" != ia64; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: the GNU linker, at least up to release 2.19, is reported\n*** to be unable to reliably create shared libraries on AIX.\n*** Therefore, libtool is disabling shared libraries support.  If you\n*** really care for shared libraries, you may want to install binutils\n*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.\n*** You will then need to restart the configuration process.\n\n_LT_EOF\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    beos*)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t# support --undefined.  This deserves some investigation.  FIXME\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\n      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n      # as there is no search path for DLLs.\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=no\n      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1 DATA/;s/^.*[[ ]]__nm__\\([[^ ]]*\\)[[ ]][[^ ]]*/\\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\\'' | sort | uniq > $export_symbols'\n      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']\n\n      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t# If the export-symbols file already is a .def file (1st line\n\t# is EXPORTS), use it as is; otherwise, prepend...\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t  cp $export_symbols $output_objdir/$soname.def;\n\telse\n\t  echo EXPORTS > $output_objdir/$soname.def;\n\t  cat $export_symbols >> $output_objdir/$soname.def;\n\tfi~\n\t$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    haiku*)\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    interix[[3-9]]*)\n      _LT_TAGVAR(hardcode_direct, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n      # Instead, shared libraries are loaded at an image base (0x10000000 by\n      # default) and relocated if they conflict, which is a slow very memory\n      # consuming and fragmenting process.  To avoid this, we pick a random,\n      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      _LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n      ;;\n\n    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)\n      tmp_diet=no\n      if test \"$host_os\" = linux-dietlibc; then\n\tcase $cc_basename in\n\t  diet\\ *) tmp_diet=yes;;\t# linux-dietlibc with static linking (!diet-dyn)\n\tesac\n      fi\n      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \\\n\t && test \"$tmp_diet\" = no\n      then\n\ttmp_addflag=' $pic_flag'\n\ttmp_sharedflag='-shared'\n\tcase $cc_basename,$host_cpu in\n        pgcc*)\t\t\t\t# Portland Group C compiler\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag'\n\t  ;;\n\tpgf77* | pgf90* | pgf95* | pgfortran*)\n\t\t\t\t\t# Portland Group f77 and f90 compilers\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  tmp_addflag=' $pic_flag -Mnomain' ;;\n\tecc*,ia64* | icc*,ia64*)\t# Intel C compiler on ia64\n\t  tmp_addflag=' -i_dynamic' ;;\n\tefc*,ia64* | ifort*,ia64*)\t# Intel Fortran compiler on ia64\n\t  tmp_addflag=' -i_dynamic -nofor_main' ;;\n\tifc* | ifort*)\t\t\t# Intel Fortran compiler\n\t  tmp_addflag=' -nofor_main' ;;\n\tlf95*)\t\t\t\t# Lahey Fortran 8.1\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)=\n\t  tmp_sharedflag='--shared' ;;\n\txl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)\n\t  tmp_sharedflag='-qmkshrobj'\n\t  tmp_addflag= ;;\n\tnvcc*)\t# Cuda Compiler Driver 2.2\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  _LT_TAGVAR(compiler_needs_object, $1)=yes\n\t  ;;\n\tesac\n\tcase `$CC -V 2>&1 | sed 5q` in\n\t*Sun\\ C*)\t\t\t# Sun C 5.9\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t  _LT_TAGVAR(compiler_needs_object, $1)=yes\n\t  tmp_sharedflag='-G' ;;\n\t*Sun\\ F*)\t\t\t# Sun Fortran 8.3\n\t  tmp_sharedflag='-G' ;;\n\tesac\n\t_LT_TAGVAR(archive_cmds, $1)='$CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\n        if test \"x$supports_anon_versioning\" = xyes; then\n          _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t    cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t    echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t    $CC '\"$tmp_sharedflag\"\"$tmp_addflag\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n        fi\n\n\tcase $cc_basename in\n\txlf* | bgf* | bgxlf* | mpixlf*)\n\t  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'\n\t  if test \"x$supports_anon_versioning\" = xyes; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t      cat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t      echo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t      $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'\n\t  fi\n\t  ;;\n\tesac\n      else\n        _LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'\n\twlarc=\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      fi\n      ;;\n\n    solaris*)\n      if $LD -v 2>&1 | $GREP 'BFD 2\\.8' > /dev/null; then\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: The releases 2.8.* of the GNU linker cannot reliably\n*** create shared libraries on Solaris systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.9.1 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)\n      case `$LD -v 2>&1` in\n        *\\ [[01]].* | *\\ 2.[[0-9]].* | *\\ 2.1[[0-5]].*)\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\tcat <<_LT_EOF 1>&2\n\n*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not\n*** reliably create shared libraries on SCO systems.  Therefore, libtool\n*** is disabling shared libraries support.  We urge you to upgrade GNU\n*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify\n*** your PATH or compiler configuration so that the native linker is\n*** used, and then restart.\n\n_LT_EOF\n\t;;\n\t*)\n\t  # For security reasons, it is highly recommended that you always\n\t  # use absolute paths for naming shared libraries, and exclude the\n\t  # DT_RUNPATH tag from executables and libraries.  But doing so\n\t  # requires that you compile everything twice, which is a pain.\n\t  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t  else\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t;;\n      esac\n      ;;\n\n    sunos4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      wlarc=\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n    esac\n\n    if test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no; then\n      runpath_var=\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=\n      _LT_TAGVAR(whole_archive_flag_spec, $1)=\n    fi\n  else\n    # PORTME fill in a description of your system's linker (not GNU ld)\n    case $host_os in\n    aix3*)\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'\n      # Note: this linker hardcodes the directories in LIBPATH if there\n      # are no directories specified by -L.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      if test \"$GCC\" = yes && test -z \"$lt_prog_compiler_static\"; then\n\t# Neither direct hardcoding nor static linking is supported with a\n\t# broken collect2.\n\t_LT_TAGVAR(hardcode_direct, $1)=unsupported\n      fi\n      ;;\n\n    aix[[4-9]]*)\n      if test \"$host_cpu\" = ia64; then\n\t# On IA64, the linker does run time linking by default, so we don't\n\t# have to do anything special.\n\taix_use_runtimelinking=no\n\texp_sym_flag='-Bexport'\n\tno_entry_flag=\"\"\n      else\n\t# If we're using GNU nm, then we don't want the \"-C\" option.\n\t# -C means demangle to AIX nm, but means don't demangle with GNU nm\n\t# Also, AIX nm treats weak defined symbols like other global\n\t# defined symbols, whereas GNU nm marks them as \"W\".\n\tif $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\") || (\\$ 2 == \"W\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\telse\n\t  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\\''{ if (((\\$ 2 == \"T\") || (\\$ 2 == \"D\") || (\\$ 2 == \"B\")) && ([substr](\\$ 3,1,1) != \".\")) { print \\$ 3 } }'\\'' | sort -u > $export_symbols'\n\tfi\n\taix_use_runtimelinking=no\n\n\t# Test if we are trying to use run time linking or normal\n\t# AIX style linking. If -brtl is somewhere in LDFLAGS, we\n\t# need to do runtime linking.\n\tcase $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)\n\t  for ld_flag in $LDFLAGS; do\n\t  if (test $ld_flag = \"-brtl\" || test $ld_flag = \"-Wl,-brtl\"); then\n\t    aix_use_runtimelinking=yes\n\t    break\n\t  fi\n\t  done\n\t  ;;\n\tesac\n\n\texp_sym_flag='-bexport'\n\tno_entry_flag='-bnoentry'\n      fi\n\n      # When large executables or shared objects are built, AIX ld can\n      # have problems creating the table of contents.  If linking a library\n      # or program results in \"error TOC overflow\" add -mminimal-toc to\n      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n      _LT_TAGVAR(archive_cmds, $1)=''\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n      if test \"$GCC\" = yes; then\n\tcase $host_os in aix4.[[012]]|aix4.[[012]].*)\n\t# We only want to do this on AIX 4.2 and lower, the check\n\t# below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t   strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t  # We have reworked collect2\n\t  :\n\t  else\n\t  # We have old collect2\n\t  _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t  # It fails to find uninstalled libraries when the uninstalled\n\t  # path is not listed in the libpath.  Setting hardcode_minus_L\n\t  # to unsupported forces relinking\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n\t  ;;\n\tesac\n\tshared_flag='-shared'\n\tif test \"$aix_use_runtimelinking\" = yes; then\n\t  shared_flag=\"$shared_flag \"'${wl}-G'\n\tfi\n\t_LT_TAGVAR(link_all_deplibs, $1)=no\n      else\n\t# not using gcc\n\tif test \"$host_cpu\" = ia64; then\n\t# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t# chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n\telse\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag='${wl}-G'\n\t  else\n\t    shared_flag='${wl}-bM:SRE'\n\t  fi\n\tfi\n      fi\n\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n      # It seems that -bexpall does not export symbols beginning with\n      # underscore (_), so it is better to generate a list of symbols to export.\n      _LT_TAGVAR(always_export_symbols, $1)=yes\n      if test \"$aix_use_runtimelinking\" = yes; then\n\t# Warning - without using the other runtime loading flags (-brtl),\n\t# -berok will link without error, but may produce a broken library.\n\t_LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n        # Determine the default libpath from the value encoded in an\n        # empty executable.\n        _LT_SYS_MODULE_PATH_AIX([$1])\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n      else\n\tif test \"$host_cpu\" = ia64; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n\telse\n\t # Determine the default libpath from the value encoded in an\n\t # empty executable.\n\t _LT_SYS_MODULE_PATH_AIX([$1])\n\t _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t  # Warning - without using the other run time loading flags,\n\t  # -berok will link without error, but may produce a broken library.\n\t  _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t  if test \"$with_gnu_ld\" = yes; then\n\t    # We only use this code for GNU lds that support --whole-archive.\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t  else\n\t    # Exported symbols can be pulled into shared objects from archives\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t  fi\n\t  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  # This is similar to how AIX traditionally builds its shared libraries.\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n\tfi\n      fi\n      ;;\n\n    amigaos*)\n      case $host_cpu in\n      powerpc)\n            # see comment about AmigaOS4 .so support\n            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n            _LT_TAGVAR(archive_expsym_cmds, $1)=''\n        ;;\n      m68k)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO \"#define NAME $libname\" > $output_objdir/a2ixlibrary.data~$ECHO \"#define LIBRARY_ID 1\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define VERSION $major\" >> $output_objdir/a2ixlibrary.data~$ECHO \"#define REVISION $revision\" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'\n            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes\n        ;;\n      esac\n      ;;\n\n    bsdi[[45]]*)\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic\n      ;;\n\n    cygwin* | mingw* | pw32* | cegcc*)\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      case $cc_basename in\n      cl*)\n\t# Native MSVC\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t_LT_TAGVAR(always_export_symbols, $1)=yes\n\t_LT_TAGVAR(file_list_spec, $1)='@'\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t    sed -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t  else\n\t    sed -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t  fi~\n\t  $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t  linknames='\n\t# The linker will not automatically build a static lib if we build a DLL.\n\t# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'\n\t_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\\([[^ ]]*\\)/\\1,DATA/'\\'' | $SED -e '\\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\\'' | sort | uniq > $export_symbols'\n\t# Don't use ranlib\n\t_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'\n\t_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile=\"@OUTPUT@\"~\n\t  lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t  case $lt_outputfile in\n\t    *.exe|*.EXE) ;;\n\t    *)\n\t      lt_outputfile=\"$lt_outputfile.exe\"\n\t      lt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t      ;;\n\t  esac~\n\t  if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t    $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t    $RM \"$lt_outputfile.manifest\";\n\t  fi'\n\t;;\n      *)\n\t# Assume MSVC wrapper\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t_LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t# Tell ltmain to make .lib files, not .a files.\n\tlibext=lib\n\t# Tell ltmain to make .dll files, not .so files.\n\tshrext_cmds=\".dll\"\n\t# FIXME: Setting linknames here is a bad hack.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all \"$deplibs\" | $SED '\\''s/ -lc$//'\\''` -link -dll~linknames='\n\t# The linker will automatically build a .lib file if we build a DLL.\n\t_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t# FIXME: Should let the user specify the lib program.\n\t_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'\n\t_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t;;\n      esac\n      ;;\n\n    darwin* | rhapsody*)\n      _LT_DARWIN_LINKER_FEATURES($1)\n      ;;\n\n    dgux*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor\n    # support.  Future versions do this automatically, but an explicit c++rt0.o\n    # does not break anything, and helps significantly (at the cost of a little\n    # extra space).\n    freebsd2.2*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # Unfortunately, older versions of FreeBSD 2 do not have this feature.\n    freebsd2.*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.\n    freebsd* | dragonfly*)\n      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    hpux9*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n\n      # hardcode_minus_L: Not really in the search PATH,\n      # but as the default location of the library.\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n      ;;\n\n    hpux10*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# hardcode_minus_L: Not really in the search PATH,\n\t# but as the default location of the library.\n\t_LT_TAGVAR(hardcode_minus_L, $1)=yes\n      fi\n      ;;\n\n    hpux11*)\n      if test \"$GCC\" = yes && test \"$with_gnu_ld\" = no; then\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tesac\n      else\n\tcase $host_cpu in\n\thppa*64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\tia64*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\tm4_if($1, [], [\n\t  # Older versions of the 11.00 compiler do not understand -b yet\n\t  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)\n\t  _LT_LINKER_OPTION([if $CC understands -b],\n\t    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],\n\t    [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],\n\t    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],\n\t  [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])\n\t  ;;\n\tesac\n      fi\n      if test \"$with_gnu_ld\" = no; then\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\tcase $host_cpu in\n\thppa*64*|ia64*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\n\t  # hardcode_minus_L: Not really in the search PATH,\n\t  # but as the default location of the library.\n\t  _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t  ;;\n\tesac\n      fi\n      ;;\n\n    irix5* | irix6* | nonstopux*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t# Try to use the -exported_symbol ld option, if it does not\n\t# work, assume that -exports_file does not work either and\n\t# implicitly export all symbols.\n\t# This should be the same for all languages, so no per-tag cache variable.\n\tAC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],\n\t  [lt_cv_irix_exported_symbol],\n\t  [save_LDFLAGS=\"$LDFLAGS\"\n\t   LDFLAGS=\"$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null\"\n\t   AC_LINK_IFELSE(\n\t     [AC_LANG_SOURCE(\n\t        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],\n\t\t\t      [C++], [[int foo (void) { return 0; }]],\n\t\t\t      [Fortran 77], [[\n      subroutine foo\n      end]],\n\t\t\t      [Fortran], [[\n      subroutine foo\n      end]])])],\n\t      [lt_cv_irix_exported_symbol=yes],\n\t      [lt_cv_irix_exported_symbol=no])\n           LDFLAGS=\"$save_LDFLAGS\"])\n\tif test \"$lt_cv_irix_exported_symbol\" = yes; then\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'\n\tfi\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(inherit_rpath, $1)=yes\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    netbsd* | netbsdelf*-gnu)\n      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    newsos6)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *nto* | *qnx*)\n      ;;\n\n    openbsd*)\n      if test -f /usr/libexec/ld.so; then\n\t_LT_TAGVAR(hardcode_direct, $1)=yes\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\tif test -z \"`echo __ELF__ | $CC -E - | $GREP __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\telse\n\t  case $host_os in\n\t   openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)\n\t     _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t     ;;\n\t   *)\n\t     _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'\n\t     _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t     ;;\n\t  esac\n\tfi\n      else\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n      fi\n      ;;\n\n    os2*)\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n      _LT_TAGVAR(archive_cmds, $1)='$ECHO \"LIBRARY $libname INITINSTANCE\" > $output_objdir/$libname.def~$ECHO \"DESCRIPTION \\\"$libname\\\"\" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo \" SINGLE NONSHARED\" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'\n      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'\n      ;;\n\n    osf3*)\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    osf4* | osf5*)\t# as osf3* with the addition of -msym flag\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n      else\n\t_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done; printf \"%s\\\\n\" \"-hidden\">> $lib.exp~\n\t$CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'\n\n\t# Both c and cxx compiler support -rpath directly\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n      fi\n      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n      ;;\n\n    solaris*)\n      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'\n      if test \"$GCC\" = yes; then\n\twlarc='${wl}'\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n      else\n\tcase `$CC -V 2>&1` in\n\t*\"Compilers 5.0\"*)\n\t  wlarc=''\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'\n\t  ;;\n\t*)\n\t  wlarc='${wl}'\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t  $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'\n\t  ;;\n\tesac\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      case $host_os in\n      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n      *)\n\t# The compiler driver will combine and reorder linker options,\n\t# but understands `-z linker_flag'.  GCC discards it without `$wl',\n\t# but is careful enough not to reorder.\n\t# Supported since Solaris 2.6 (maybe 2.5.1?)\n\tif test \"$GCC\" = yes; then\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\telse\n\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\tfi\n\t;;\n      esac\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      ;;\n\n    sunos4*)\n      if test \"x$host_vendor\" = xsequent; then\n\t# Use $CC to link under sequent, because it throws in some extra .o\n\t# files that make .init and .fini sections work.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'\n      fi\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_direct, $1)=yes\n      _LT_TAGVAR(hardcode_minus_L, $1)=yes\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4)\n      case $host_vendor in\n\tsni)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???\n\t;;\n\tsiemens)\n\t  ## LD is ld it makes a PLAMLIB\n\t  ## CC just makes a GrossModule.\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no\n        ;;\n\tmotorola)\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie\n\t;;\n      esac\n      runpath_var='LD_RUN_PATH'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    sysv4.3*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'\n      ;;\n\n    sysv4*MP*)\n      if test -d /usr/nec; then\n\t_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\trunpath_var=LD_RUN_PATH\n\thardcode_runpath_var=yes\n\t_LT_TAGVAR(ld_shlibs, $1)=yes\n      fi\n      ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    sysv5* | sco3.2v5* | sco5v6*)\n      # Note: We can NOT use -z defs as we might desire, because we do not\n      # link with -lc, and that would cause any symbols used from libc to\n      # always be unresolved, which means just about no library would\n      # ever link correctly.  If we're not using GNU ld we use -z text\n      # though, which does catch some bad symbols but isn't as heavy-handed\n      # as -z defs.\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n      _LT_TAGVAR(link_all_deplibs, $1)=yes\n      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n      runpath_var='LD_RUN_PATH'\n\n      if test \"$GCC\" = yes; then\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      else\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n      fi\n      ;;\n\n    uts4*)\n      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'\n      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      ;;\n\n    *)\n      _LT_TAGVAR(ld_shlibs, $1)=no\n      ;;\n    esac\n\n    if test x$host_vendor = xsni; then\n      case $host in\n      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'\n\t;;\n      esac\n    fi\n  fi\n])\nAC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\ntest \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld\n\n_LT_DECL([], [libext], [0], [Old archive suffix (normally \"a\")])dnl\n_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally \".so\")])dnl\n_LT_DECL([], [extract_expsyms_cmds], [2],\n    [The commands to extract the exported symbol list from a shared archive])\n\n#\n# Do we need to explicitly link libc?\n#\ncase \"x$_LT_TAGVAR(archive_cmds_need_lc, $1)\" in\nx|xyes)\n  # Assume -lc should be added\n  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\n  if test \"$enable_shared\" = yes && test \"$GCC\" = yes; then\n    case $_LT_TAGVAR(archive_cmds, $1) in\n    *'~'*)\n      # FIXME: we may have to deal with multi-command sequences.\n      ;;\n    '$CC '*)\n      # Test whether the compiler implicitly links with -lc since on some\n      # systems, -lgcc has to come before -lc. If gcc already passes -lc\n      # to ld, don't add -lc before -lgcc.\n      AC_CACHE_CHECK([whether -lc should be explicitly linked in],\n\t[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),\n\t[$RM conftest*\n\techo \"$lt_simple_compile_test_code\" > conftest.$ac_ext\n\n\tif AC_TRY_EVAL(ac_compile) 2>conftest.err; then\n\t  soname=conftest\n\t  lib=conftest\n\t  libobjs=conftest.$ac_objext\n\t  deplibs=\n\t  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)\n\t  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)\n\t  compiler_flags=-v\n\t  linker_flags=-v\n\t  verstring=\n\t  output_objdir=.\n\t  libname=conftest\n\t  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=\n\t  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\\>\\&1 \\| $GREP \\\" -lc \\\" \\>/dev/null 2\\>\\&1)\n\t  then\n\t    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t  else\n\t    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t  fi\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag\n\telse\n\t  cat conftest.err 1>&5\n\tfi\n\t$RM conftest*\n\t])\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)\n      ;;\n    esac\n  fi\n  ;;\nesac\n\n_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],\n    [Whether or not to add -lc for building shared libraries])\n_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],\n    [enable_shared_with_static_runtimes], [0],\n    [Whether or not to disallow shared libs when runtime libs are static])\n_LT_TAGDECL([], [export_dynamic_flag_spec], [1],\n    [Compiler flag to allow reflexive dlopens])\n_LT_TAGDECL([], [whole_archive_flag_spec], [1],\n    [Compiler flag to generate shared objects directly from archives])\n_LT_TAGDECL([], [compiler_needs_object], [1],\n    [Whether the compiler copes with passing no objects directly])\n_LT_TAGDECL([], [old_archive_from_new_cmds], [2],\n    [Create an old-style archive from a shared archive])\n_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],\n    [Create a temporary old-style archive to link instead of a shared archive])\n_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])\n_LT_TAGDECL([], [archive_expsym_cmds], [2])\n_LT_TAGDECL([], [module_cmds], [2],\n    [Commands used to build a loadable module if different from building\n    a shared archive.])\n_LT_TAGDECL([], [module_expsym_cmds], [2])\n_LT_TAGDECL([], [with_gnu_ld], [1],\n    [Whether we are building with GNU ld or not])\n_LT_TAGDECL([], [allow_undefined_flag], [1],\n    [Flag that allows shared libraries with undefined symbols to be built])\n_LT_TAGDECL([], [no_undefined_flag], [1],\n    [Flag that enforces no undefined symbols])\n_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],\n    [Flag to hardcode $libdir into a binary during linking.\n    This must work even if $libdir does not exist])\n_LT_TAGDECL([], [hardcode_libdir_separator], [1],\n    [Whether we need a single \"-rpath\" flag with a separated argument])\n_LT_TAGDECL([], [hardcode_direct], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary])\n_LT_TAGDECL([], [hardcode_direct_absolute], [0],\n    [Set to \"yes\" if using DIR/libNAME${shared_ext} during linking hardcodes\n    DIR into the resulting binary and the resulting library dependency is\n    \"absolute\", i.e impossible to change by setting ${shlibpath_var} if the\n    library is relocated])\n_LT_TAGDECL([], [hardcode_minus_L], [0],\n    [Set to \"yes\" if using the -LDIR flag during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_shlibpath_var], [0],\n    [Set to \"yes\" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR\n    into the resulting binary])\n_LT_TAGDECL([], [hardcode_automatic], [0],\n    [Set to \"yes\" if building a shared library automatically hardcodes DIR\n    into the library and all subsequent libraries and executables linked\n    against it])\n_LT_TAGDECL([], [inherit_rpath], [0],\n    [Set to yes if linker adds runtime paths of dependent libraries\n    to runtime path list])\n_LT_TAGDECL([], [link_all_deplibs], [0],\n    [Whether libtool must link a program against all its dependency libraries])\n_LT_TAGDECL([], [always_export_symbols], [0],\n    [Set to \"yes\" if exported symbols are required])\n_LT_TAGDECL([], [export_symbols_cmds], [2],\n    [The commands to list exported symbols])\n_LT_TAGDECL([], [exclude_expsyms], [1],\n    [Symbols that should not be listed in the preloaded symbols])\n_LT_TAGDECL([], [include_expsyms], [1],\n    [Symbols that must always be exported])\n_LT_TAGDECL([], [prelink_cmds], [2],\n    [Commands necessary for linking programs (against libraries) with templates])\n_LT_TAGDECL([], [postlink_cmds], [2],\n    [Commands necessary for finishing linking programs])\n_LT_TAGDECL([], [file_list_spec], [1],\n    [Specify filename containing input files])\ndnl FIXME: Not yet implemented\ndnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],\ndnl    [Compiler flag to generate thread safe objects])\n])# _LT_LINKER_SHLIBS\n\n\n# _LT_LANG_C_CONFIG([TAG])\n# ------------------------\n# Ensure that the configuration variables for a C compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_C_CONFIG],\n[m4_require([_LT_DECL_EGREP])dnl\nlt_save_CC=\"$CC\"\nAC_LANG_PUSH(C)\n\n# Source file extension for C test sources.\nac_ext=c\n\n# Object file extension for compiled C test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"int some_variable = 0;\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='int main(){return(0);}'\n\n_LT_TAG_COMPILER\n# Save the default compiler, since it gets overwritten when the other\n# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.\ncompiler_DEFAULT=$CC\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n## CAVEAT EMPTOR:\n## There is no encapsulation within the following macros, do not change\n## the running order or otherwise move them around unless you know exactly\n## what you are doing...\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_SYS_DYNAMIC_LINKER($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n  LT_SYS_DLOPEN_SELF\n  _LT_CMD_STRIPLIB\n\n  # Report which library types will actually be built\n  AC_MSG_CHECKING([if libtool supports shared libraries])\n  AC_MSG_RESULT([$can_build_shared])\n\n  AC_MSG_CHECKING([whether to build shared libraries])\n  test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n  # On AIX, shared libraries and static libraries use the same namespace, and\n  # are all built from PIC.\n  case $host_os in\n  aix3*)\n    test \"$enable_shared\" = yes && enable_static=no\n    if test -n \"$RANLIB\"; then\n      archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n      postinstall_cmds='$RANLIB $lib'\n    fi\n    ;;\n\n  aix[[4-9]]*)\n    if test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n      test \"$enable_shared\" = yes && enable_static=no\n    fi\n    ;;\n  esac\n  AC_MSG_RESULT([$enable_shared])\n\n  AC_MSG_CHECKING([whether to build static libraries])\n  # Make sure either enable_shared or enable_static is yes.\n  test \"$enable_shared\" = yes || enable_static=yes\n  AC_MSG_RESULT([$enable_static])\n\n  _LT_CONFIG($1)\nfi\nAC_LANG_POP\nCC=\"$lt_save_CC\"\n])# _LT_LANG_C_CONFIG\n\n\n# _LT_LANG_CXX_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a C++ compiler are suitably\n# defined.  These variables are subsequently used by _LT_CONFIG to write\n# the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_CXX_CONFIG],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nm4_require([_LT_DECL_EGREP])dnl\nm4_require([_LT_PATH_MANIFEST_TOOL])dnl\nif test -n \"$CXX\" && ( test \"X$CXX\" != \"Xno\" &&\n    ( (test \"X$CXX\" = \"Xg++\" && `g++ -v >/dev/null 2>&1` ) ||\n    (test \"X$CXX\" != \"Xg++\"))) ; then\n  AC_PROG_CXXCPP\nelse\n  _lt_caught_CXX_error=yes\nfi\n\nAC_LANG_PUSH(C++)\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(compiler_needs_object, $1)=no\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for C++ test sources.\nac_ext=cpp\n\n# Object file extension for compiled C++ test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the CXX compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_caught_CXX_error\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"int some_variable = 0;\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=$CC\n  lt_save_CFLAGS=$CFLAGS\n  lt_save_LD=$LD\n  lt_save_GCC=$GCC\n  GCC=$GXX\n  lt_save_with_gnu_ld=$with_gnu_ld\n  lt_save_path_LD=$lt_cv_path_LD\n  if test -n \"${lt_cv_prog_gnu_ldcxx+set}\"; then\n    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx\n  else\n    $as_unset lt_cv_prog_gnu_ld\n  fi\n  if test -n \"${lt_cv_path_LDCXX+set}\"; then\n    lt_cv_path_LD=$lt_cv_path_LDCXX\n  else\n    $as_unset lt_cv_path_LD\n  fi\n  test -z \"${LDCXX+set}\" || LD=$LDCXX\n  CC=${CXX-\"c++\"}\n  CFLAGS=$CXXFLAGS\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    # We don't want -fno-exception when compiling C++ code, so set the\n    # no_builtin_flag separately\n    if test \"$GXX\" = yes; then\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'\n    else\n      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=\n    fi\n\n    if test \"$GXX\" = yes; then\n      # Set up default GNU C++ configuration\n\n      LT_PATH_LD\n\n      # Check if GNU C++ uses GNU ld as the underlying linker, since the\n      # archiving commands below assume that GNU ld is being used.\n      if test \"$with_gnu_ld\" = yes; then\n        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n        # If archive_cmds runs LD, not CC, wlarc should be empty\n        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to\n        #     investigate it a little bit more. (MM)\n        wlarc='${wl}'\n\n        # ancient GNU ld didn't support --whole-archive et. al.\n        if eval \"`$CC -print-prog-name=ld` --help 2>&1\" |\n\t  $GREP 'no-whole-archive' > /dev/null; then\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n        else\n          _LT_TAGVAR(whole_archive_flag_spec, $1)=\n        fi\n      else\n        with_gnu_ld=no\n        wlarc=\n\n        # A generic and very simple default shared library creation\n        # command for GNU C++ for the case where it uses the native\n        # linker, instead of GNU ld.  If possible, this setting should\n        # overridden to take advantage of the native linker features on\n        # the platform it is being used on.\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n      fi\n\n      # Commands to make compiler produce verbose output that lists\n      # what \"hidden\" libraries, object files and flags are used when\n      # linking a shared library.\n      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\n    else\n      GXX=no\n      with_gnu_ld=no\n      wlarc=\n    fi\n\n    # PORTME: fill in a description of your system's C++ link characteristics\n    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])\n    _LT_TAGVAR(ld_shlibs, $1)=yes\n    case $host_os in\n      aix3*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n      aix[[4-9]]*)\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          exp_sym_flag='-Bexport'\n          no_entry_flag=\"\"\n        else\n          aix_use_runtimelinking=no\n\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]].*|aix[[5-9]]*)\n\t    for ld_flag in $LDFLAGS; do\n\t      case $ld_flag in\n\t      *-brtl*)\n\t        aix_use_runtimelinking=yes\n\t        break\n\t        ;;\n\t      esac\n\t    done\n\t    ;;\n          esac\n\n          exp_sym_flag='-bexport'\n          no_entry_flag='-bnoentry'\n        fi\n\n        # When large executables or shared objects are built, AIX ld can\n        # have problems creating the table of contents.  If linking a library\n        # or program results in \"error TOC overflow\" add -mminimal-toc to\n        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not\n        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.\n\n        _LT_TAGVAR(archive_cmds, $1)=''\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n        _LT_TAGVAR(link_all_deplibs, $1)=yes\n        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'\n\n        if test \"$GXX\" = yes; then\n          case $host_os in aix4.[[012]]|aix4.[[012]].*)\n          # We only want to do this on AIX 4.2 and lower, the check\n          # below for broken collect2 doesn't work under 4.3+\n\t  collect2name=`${CC} -print-prog-name=collect2`\n\t  if test -f \"$collect2name\" &&\n\t     strings \"$collect2name\" | $GREP resolve_lib_name >/dev/null\n\t  then\n\t    # We have reworked collect2\n\t    :\n\t  else\n\t    # We have old collect2\n\t    _LT_TAGVAR(hardcode_direct, $1)=unsupported\n\t    # It fails to find uninstalled libraries when the uninstalled\n\t    # path is not listed in the libpath.  Setting hardcode_minus_L\n\t    # to unsupported forces relinking\n\t    _LT_TAGVAR(hardcode_minus_L, $1)=yes\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=\n\t  fi\n          esac\n          shared_flag='-shared'\n\t  if test \"$aix_use_runtimelinking\" = yes; then\n\t    shared_flag=\"$shared_flag \"'${wl}-G'\n\t  fi\n        else\n          # not using gcc\n          if test \"$host_cpu\" = ia64; then\n\t  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release\n\t  # chokes on -Wl,-G. The following line is correct:\n\t  shared_flag='-G'\n          else\n\t    if test \"$aix_use_runtimelinking\" = yes; then\n\t      shared_flag='${wl}-G'\n\t    else\n\t      shared_flag='${wl}-bM:SRE'\n\t    fi\n          fi\n        fi\n\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'\n        # It seems that -bexpall does not export symbols beginning with\n        # underscore (_), so it is better to generate a list of symbols to\n\t# export.\n        _LT_TAGVAR(always_export_symbols, $1)=yes\n        if test \"$aix_use_runtimelinking\" = yes; then\n          # Warning - without using the other runtime loading flags (-brtl),\n          # -berok will link without error, but may produce a broken library.\n          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'\n          # Determine the default libpath from the value encoded in an empty\n          # executable.\n          _LT_SYS_MODULE_PATH_AIX([$1])\n          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\n          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags `if test \"x${allow_undefined_flag}\" != \"x\"; then func_echo_all \"${wl}${allow_undefined_flag}\"; else :; fi` '\"\\${wl}$exp_sym_flag:\\$export_symbols $shared_flag\"\n        else\n          if test \"$host_cpu\" = ia64; then\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=\"-z nodefs\"\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs '\"\\${wl}$no_entry_flag\"' $compiler_flags ${wl}${allow_undefined_flag} '\"\\${wl}$exp_sym_flag:\\$export_symbols\"\n          else\n\t    # Determine the default libpath from the value encoded in an\n\t    # empty executable.\n\t    _LT_SYS_MODULE_PATH_AIX([$1])\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'\"$aix_libpath\"\n\t    # Warning - without using the other run time loading flags,\n\t    # -berok will link without error, but may produce a broken library.\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'\n\t    _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'\n\t    if test \"$with_gnu_ld\" = yes; then\n\t      # We only use this code for GNU lds that support --whole-archive.\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t    else\n\t      # Exported symbols can be pulled into shared objects from archives\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'\n\t    fi\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes\n\t    # This is similar to how AIX traditionally builds its shared\n\t    # libraries.\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)=\"\\$CC $shared_flag\"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'\n          fi\n        fi\n        ;;\n\n      beos*)\n\tif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  # Joseph Beckenbach <jrb3@best.com> says some releases of gcc\n\t  # support --undefined.  This deserves some investigation.  FIXME\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      chorus*)\n        case $cc_basename in\n          *)\n\t  # FIXME: insert proper C++ library support\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\t  ;;\n        esac\n        ;;\n\n      cygwin* | mingw* | pw32* | cegcc*)\n\tcase $GXX,$cc_basename in\n\t,cl* | no,cl*)\n\t  # Native MSVC\n\t  # hardcode_libdir_flag_spec is actually meaningless, as there is\n\t  # no search path for DLLs.\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  _LT_TAGVAR(always_export_symbols, $1)=yes\n\t  _LT_TAGVAR(file_list_spec, $1)='@'\n\t  # Tell ltmain to make .lib files, not .a files.\n\t  libext=lib\n\t  # Tell ltmain to make .dll files, not .so files.\n\t  shrext_cmds=\".dll\"\n\t  # FIXME: Setting linknames here is a bad hack.\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t      $SED -n -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' -e '1\\\\\\!p' < $export_symbols > $output_objdir/$soname.exp;\n\t    else\n\t      $SED -e 's/\\\\\\\\\\\\\\(.*\\\\\\\\\\\\\\)/-link\\\\\\ -EXPORT:\\\\\\\\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;\n\t    fi~\n\t    $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs \"@$tool_output_objdir$soname.exp\" -Wl,-DLL,-IMPLIB:\"$tool_output_objdir$libname.dll.lib\"~\n\t    linknames='\n\t  # The linker will not automatically build a static lib if we build a DLL.\n\t  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'\n\t  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\t  # Don't use ranlib\n\t  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'\n\t  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile=\"@OUTPUT@\"~\n\t    lt_tool_outputfile=\"@TOOL_OUTPUT@\"~\n\t    case $lt_outputfile in\n\t      *.exe|*.EXE) ;;\n\t      *)\n\t\tlt_outputfile=\"$lt_outputfile.exe\"\n\t\tlt_tool_outputfile=\"$lt_tool_outputfile.exe\"\n\t\t;;\n\t    esac~\n\t    func_to_tool_file \"$lt_outputfile\"~\n\t    if test \"$MANIFEST_TOOL\" != \":\" && test -f \"$lt_outputfile.manifest\"; then\n\t      $MANIFEST_TOOL -manifest \"$lt_tool_outputfile.manifest\" -outputresource:\"$lt_tool_outputfile\" || exit 1;\n\t      $RM \"$lt_outputfile.manifest\";\n\t    fi'\n\t  ;;\n\t*)\n\t  # g++\n\t  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,\n\t  # as there is no search path for DLLs.\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'\n\t  _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'\n\t  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported\n\t  _LT_TAGVAR(always_export_symbols, $1)=no\n\t  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes\n\n\t  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t    # If the export-symbols file already is a .def file (1st line\n\t    # is EXPORTS), use it as is; otherwise, prepend...\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='if test \"x`$SED 1q $export_symbols`\" = xEXPORTS; then\n\t      cp $export_symbols $output_objdir/$soname.def;\n\t    else\n\t      echo EXPORTS > $output_objdir/$soname.def;\n\t      cat $export_symbols >> $output_objdir/$soname.def;\n\t    fi~\n\t    $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'\n\t  else\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t  fi\n\t  ;;\n\tesac\n\t;;\n      darwin* | rhapsody*)\n        _LT_DARWIN_LINKER_FEATURES($1)\n\t;;\n\n      dgux*)\n        case $cc_basename in\n          ec++*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          ghcx*)\n\t    # Green Hills C++ Compiler\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      freebsd2.*)\n        # C++ shared libraries reported to be fairly broken before\n\t# switch to ELF\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      freebsd-elf*)\n        _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n        ;;\n\n      freebsd* | dragonfly*)\n        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF\n        # conventions\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n        ;;\n\n      haiku*)\n        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n        _LT_TAGVAR(link_all_deplibs, $1)=yes\n        ;;\n\n      hpux9*)\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n        _LT_TAGVAR(hardcode_direct, $1)=yes\n        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t             # but as the default\n\t\t\t\t             # location of the library.\n\n        case $cc_basename in\n          CC*)\n            # FIXME: insert proper C++ library support\n            _LT_TAGVAR(ld_shlibs, $1)=no\n            ;;\n          aCC*)\n            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            # Commands to make compiler produce verbose output that lists\n            # what \"hidden\" libraries, object files and flags are used when\n            # linking a shared library.\n            #\n            # There doesn't appear to be a way to prevent this compiler from\n            # explicitly linking system object files so we need to strip them\n            # from the output so that they don't get included in the library\n            # dependencies.\n            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n            ;;\n          *)\n            if test \"$GXX\" = yes; then\n              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'\n            else\n              # FIXME: insert proper C++ library support\n              _LT_TAGVAR(ld_shlibs, $1)=no\n            fi\n            ;;\n        esac\n        ;;\n\n      hpux10*|hpux11*)\n        if test $with_gnu_ld = no; then\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'\n\t  _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n          case $host_cpu in\n            hppa*64*|ia64*)\n              ;;\n            *)\n\t      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n              ;;\n          esac\n        fi\n        case $host_cpu in\n          hppa*64*|ia64*)\n            _LT_TAGVAR(hardcode_direct, $1)=no\n            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n            ;;\n          *)\n            _LT_TAGVAR(hardcode_direct, $1)=yes\n            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,\n\t\t\t\t\t         # but as the default\n\t\t\t\t\t         # location of the library.\n            ;;\n        esac\n\n        case $cc_basename in\n          CC*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          aCC*)\n\t    case $host_cpu in\n\t      hppa*64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      ia64*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t      *)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t        ;;\n\t    esac\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP \"\\-L\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test $with_gnu_ld = no; then\n\t        case $host_cpu in\n\t          hppa*64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          ia64*)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t          *)\n\t            _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t            ;;\n\t        esac\n\t      fi\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      interix[[3-9]]*)\n\t_LT_TAGVAR(hardcode_direct, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.\n\t# Instead, shared libraries are loaded at an image base (0x10000000 by\n\t# default) and relocated if they conflict, which is a slow very memory\n\t# consuming and fragmenting process.  To avoid this, we pick a random,\n\t# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link\n\t# time.  Moving up from 0x10000000 also allows more sbrk(2) space.\n\t_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t_LT_TAGVAR(archive_expsym_cmds, $1)='sed \"s,^,_,\" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \\* 262144 + 1342177280` -o $lib'\n\t;;\n      irix5* | irix6*)\n        case $cc_basename in\n          CC*)\n\t    # SGI C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -ar\", where \"CC\" is the IRIX C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    if test \"$GXX\" = yes; then\n\t      if test \"$with_gnu_ld\" = no; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t      else\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` -o $lib'\n\t      fi\n\t    fi\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\t    ;;\n        esac\n        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n        _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n        _LT_TAGVAR(inherit_rpath, $1)=yes\n        ;;\n\n      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo $lib | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib ${wl}-retain-symbols-file,$export_symbols; mv \\$templib $lib'\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP \"ld\"`; rm -f libconftest$shared_ext; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -Bstatic\", where \"CC\" is the KAI C++ compiler.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'\n\t    ;;\n\t  icpc* | ecpc* )\n\t    # Intel C++\n\t    with_gnu_ld=yes\n\t    # version 8.0 and above of icpc choke on multiply defined symbols\n\t    # if we add $predep_objects and $postdep_objects, however 7.1 and\n\t    # earlier do not add the objects themselves.\n\t    case `$CC -V 2>&1` in\n\t      *\"Version 7.\"*)\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t      *)  # Version 8.0 or newer\n\t        tmp_idyn=\n\t        case $host_cpu in\n\t\t  ia64*) tmp_idyn=' -i_dynamic';;\n\t\tesac\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t\t_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'\"$tmp_idyn\"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'\n\t\t;;\n\t    esac\n\t    _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'\n\t    ;;\n          pgCC* | pgcpp*)\n            # Portland Group C++ compiler\n\t    case `$CC -V` in\n\t    *pgCC\\ [[1-5]].* | *pgcpp\\ [[1-5]].*)\n\t      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~\n\t\tcompile_command=\"$compile_command `find $tpldir -name \\*.o | sort | $NL2SP`\"'\n\t      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~\n\t\t$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \\*.o | sort | $NL2SP`~\n\t\t$RANLIB $oldlib'\n\t      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~\n\t\trm -rf $tpldir~\n\t\t$CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~\n\t\t$CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \\*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    *) # Version 6 and above use weak symbols\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'\n\t      ;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\\\"\\\"; do test  -n \\\"$conv\\\" && new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n            ;;\n\t  cxx*)\n\t    # Compaq C++\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'\n\n\t    runpath_var=LD_RUN_PATH\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\"`; templist=`func_echo_all \"$templist\" | $SED \"s/\\(^.*ld.*\\)\\( .*ld .*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"X$list\" | $Xsed'\n\t    ;;\n\t  xl* | mpixl* | bgxl*)\n\t    # IBM XL 8.0 on PPC, with GNU ld\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'\n\t    if test \"x$supports_anon_versioning\" = xyes; then\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $output_objdir/$libname.ver~\n\t\tcat $export_symbols | sed -e \"s/\\(.*\\)/\\1;/\" >> $output_objdir/$libname.ver~\n\t\techo \"local: *; };\" >> $output_objdir/$libname.ver~\n\t\t$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'\n\t    fi\n\t    ;;\n\t  *)\n\t    case `$CC -V 2>&1 | sed 5q` in\n\t    *Sun\\ C*)\n\t      # Sun C++ 5.9\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t      _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t      _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\\\"\\\"; do test -z \\\"$conv\\\" || new_convenience=\\\"$new_convenience,$conv\\\"; done; func_echo_all \\\"$new_convenience\\\"` ${wl}--no-whole-archive'\n\t      _LT_TAGVAR(compiler_needs_object, $1)=yes\n\n\t      # Not sure whether something based on\n\t      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1\n\t      # would be better.\n\t      output_verbose_link_cmd='func_echo_all'\n\n\t      # Archives containing C++ object files must be created using\n\t      # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t      # necessary to make sure instantiated templates are included\n\t      # in the archive.\n\t      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t      ;;\n\t    esac\n\t    ;;\n\tesac\n\t;;\n\n      lynxos*)\n        # FIXME: insert proper C++ library support\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      m88k*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      mvs*)\n        case $cc_basename in\n          cxx*)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\t  *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n\tesac\n\t;;\n\n      netbsd*)\n        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then\n\t  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'\n\t  wlarc=\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\tfi\n\t# Workaround some broken pre-1.5 toolchains\n\toutput_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e \"s:-lgcc -lc -lgcc::\"'\n\t;;\n\n      *nto* | *qnx*)\n        _LT_TAGVAR(ld_shlibs, $1)=yes\n\t;;\n\n      openbsd2*)\n        # C++ shared libraries are fairly broken\n\t_LT_TAGVAR(ld_shlibs, $1)=no\n\t;;\n\n      openbsd*)\n\tif test -f /usr/libexec/ld.so; then\n\t  _LT_TAGVAR(hardcode_direct, $1)=yes\n\t  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'\n\t  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t  if test -z \"`echo __ELF__ | $CC -E - | grep __ELF__`\" || test \"$host_os-$host_cpu\" = \"openbsd2.8-powerpc\"; then\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'\n\t    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'\n\t    _LT_TAGVAR(whole_archive_flag_spec, $1)=\"$wlarc\"'--whole-archive$convenience '\"$wlarc\"'--no-whole-archive'\n\t  fi\n\t  output_verbose_link_cmd=func_echo_all\n\telse\n\t  _LT_TAGVAR(ld_shlibs, $1)=no\n\tfi\n\t;;\n\n      osf3* | osf4* | osf5*)\n        case $cc_basename in\n          KCC*)\n\t    # Kuck and Associates, Inc. (KAI) C++ Compiler\n\n\t    # KCC will only create a shared library if the output file\n\t    # ends with \".so\" (or \".sl\" for HP-UX), so rename the library\n\t    # to its proper name (with version) after linking.\n\t    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\\''s/\\([[^()0-9A-Za-z{}]]\\)/\\\\\\\\\\1/g'\\''`; templib=`echo \"$lib\" | $SED -e \"s/\\${tempext}\\..*/.so/\"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \\$templib; mv \\$templib $lib'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Archives containing C++ object files must be created using\n\t    # the KAI C++ compiler.\n\t    case $host in\n\t      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;\n\t      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;\n\t    esac\n\t    ;;\n          RCC*)\n\t    # Rational C++ 2.4.1\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          cxx*)\n\t    case $host in\n\t      osf3*)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t\t;;\n\t      *)\n\t        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \\*'\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n \"$verstring\" && func_echo_all \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf \"%s %s\\\\n\" -exported_symbol \"\\$i\" >> $lib.exp; done~\n\t          echo \"-hidden\">> $lib.exp~\n\t          $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n \"$verstring\" && $ECHO \"-set_version $verstring\"` -update_registry ${output_objdir}/so_locations -o $lib~\n\t          $RM $lib.exp'\n\t        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'\n\t\t;;\n\t    esac\n\n\t    _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t    # Commands to make compiler produce verbose output that lists\n\t    # what \"hidden\" libraries, object files and flags are used when\n\t    # linking a shared library.\n\t    #\n\t    # There doesn't appear to be a way to prevent this compiler from\n\t    # explicitly linking system object files so we need to strip them\n\t    # from the output so that they don't get included in the library\n\t    # dependencies.\n\t    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP \"ld\" | $GREP -v \"ld:\"`; templist=`func_echo_all \"$templist\" | $SED \"s/\\(^.*ld.*\\)\\( .*ld.*$\\)/\\1/\"`; list=\"\"; for z in $templist; do case $z in conftest.$objext) list=\"$list $z\";; *.$objext);; *) list=\"$list $z\";;esac; done; func_echo_all \"$list\"'\n\t    ;;\n\t  *)\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\\*'\n\t      case $host in\n\t        osf3*)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t        *)\n\t          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n \"$verstring\" && func_echo_all \"${wl}-set_version ${wl}$verstring\"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'\n\t\t  ;;\n\t      esac\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'\n\t      _LT_TAGVAR(hardcode_libdir_separator, $1)=:\n\n\t      # Commands to make compiler produce verbose output that lists\n\t      # what \"hidden\" libraries, object files and flags are used when\n\t      # linking a shared library.\n\t      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\n\t    else\n\t      # FIXME: insert proper C++ library support\n\t      _LT_TAGVAR(ld_shlibs, $1)=no\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n      psos*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      sunos4*)\n        case $cc_basename in\n          CC*)\n\t    # Sun C++ 4.x\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          lcc*)\n\t    # Lucid\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      solaris*)\n        case $cc_basename in\n          CC* | sunCC*)\n\t    # Sun C++ 4.2, 5.x and Centerline C++\n            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes\n\t    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t      $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'\n\t    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t    case $host_os in\n\t      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t      *)\n\t\t# The compiler driver will combine and reorder linker options,\n\t\t# but understands `-z linker_flag'.\n\t        # Supported since Solaris 2.6 (maybe 2.5.1?)\n\t\t_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'\n\t        ;;\n\t    esac\n\t    _LT_TAGVAR(link_all_deplibs, $1)=yes\n\n\t    output_verbose_link_cmd='func_echo_all'\n\n\t    # Archives containing C++ object files must be created using\n\t    # \"CC -xar\", where \"CC\" is the Sun C++ compiler.  This is\n\t    # necessary to make sure instantiated templates are included\n\t    # in the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'\n\t    ;;\n          gcx*)\n\t    # Green Hills C++ Compiler\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\n\t    # The C++ compiler must be used to create the archive.\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'\n\t    ;;\n          *)\n\t    # GNU C++ compiler with Solaris linker\n\t    if test \"$GXX\" = yes && test \"$with_gnu_ld\" = no; then\n\t      _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'\n\t      if $CC --version | $GREP -v '^2\\.7' > /dev/null; then\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\t      else\n\t        # g++ 2.7 appears to require `-G' NOT `-shared' on this\n\t        # platform.\n\t        _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'\n\t        _LT_TAGVAR(archive_expsym_cmds, $1)='echo \"{ global:\" > $lib.exp~cat $export_symbols | $SED -e \"s/\\(.*\\)/\\1;/\" >> $lib.exp~echo \"local: *; };\" >> $lib.exp~\n\t\t  $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'\n\n\t        # Commands to make compiler produce verbose output that lists\n\t        # what \"hidden\" libraries, object files and flags are used when\n\t        # linking a shared library.\n\t        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v \"^Configured with:\" | $GREP \"\\-L\"'\n\t      fi\n\n\t      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'\n\t      case $host_os in\n\t\tsolaris2.[[0-5]] | solaris2.[[0-5]].*) ;;\n\t\t*)\n\t\t  _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'\n\t\t  ;;\n\t      esac\n\t    fi\n\t    ;;\n        esac\n        ;;\n\n    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)\n      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n      _LT_TAGVAR(archive_cmds_need_lc, $1)=no\n      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n      runpath_var='LD_RUN_PATH'\n\n      case $cc_basename in\n        CC*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n\t*)\n\t  _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t  ;;\n      esac\n      ;;\n\n      sysv5* | sco3.2v5* | sco5v6*)\n\t# Note: We can NOT use -z defs as we might desire, because we do not\n\t# link with -lc, and that would cause any symbols used from libc to\n\t# always be unresolved, which means just about no library would\n\t# ever link correctly.  If we're not using GNU ld we use -z text\n\t# though, which does catch some bad symbols but isn't as heavy-handed\n\t# as -z defs.\n\t_LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'\n\t_LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'\n\t_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\t_LT_TAGVAR(hardcode_shlibpath_var, $1)=no\n\t_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'\n\t_LT_TAGVAR(hardcode_libdir_separator, $1)=':'\n\t_LT_TAGVAR(link_all_deplibs, $1)=yes\n\t_LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'\n\trunpath_var='LD_RUN_PATH'\n\n\tcase $cc_basename in\n          CC*)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~\n\t      '\"$_LT_TAGVAR(old_archive_cmds, $1)\"\n\t    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~\n\t      '\"$_LT_TAGVAR(reload_cmds, $1)\"\n\t    ;;\n\t  *)\n\t    _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'\n\t    ;;\n\tesac\n      ;;\n\n      tandem*)\n        case $cc_basename in\n          NCC*)\n\t    # NonStop-UX NCC 3.20\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n          *)\n\t    # FIXME: insert proper C++ library support\n\t    _LT_TAGVAR(ld_shlibs, $1)=no\n\t    ;;\n        esac\n        ;;\n\n      vxworks*)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n\n      *)\n        # FIXME: insert proper C++ library support\n        _LT_TAGVAR(ld_shlibs, $1)=no\n        ;;\n    esac\n\n    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])\n    test \"$_LT_TAGVAR(ld_shlibs, $1)\" = no && can_build_shared=no\n\n    _LT_TAGVAR(GCC, $1)=\"$GXX\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  CC=$lt_save_CC\n  CFLAGS=$lt_save_CFLAGS\n  LDCXX=$LD\n  LD=$lt_save_LD\n  GCC=$lt_save_GCC\n  with_gnu_ld=$lt_save_with_gnu_ld\n  lt_cv_path_LDCXX=$lt_cv_path_LD\n  lt_cv_path_LD=$lt_save_path_LD\n  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld\n  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld\nfi # test \"$_lt_caught_CXX_error\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_CXX_CONFIG\n\n\n# _LT_FUNC_STRIPNAME_CNF\n# ----------------------\n# func_stripname_cnf prefix suffix name\n# strip PREFIX and SUFFIX off of NAME.\n# PREFIX and SUFFIX must not contain globbing or regex special\n# characters, hashes, percent signs, but SUFFIX may contain a leading\n# dot (in which case that matches only a dot).\n#\n# This function is identical to the (non-XSI) version of func_stripname,\n# except this one can be used by m4 code that may be executed by configure,\n# rather than the libtool script.\nm4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl\nAC_REQUIRE([_LT_DECL_SED])\nAC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])\nfunc_stripname_cnf ()\n{\n  case ${2} in\n  .*) func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%\\\\\\\\${2}\\$%%\"`;;\n  *)  func_stripname_result=`$ECHO \"${3}\" | $SED \"s%^${1}%%; s%${2}\\$%%\"`;;\n  esac\n} # func_stripname_cnf\n])# _LT_FUNC_STRIPNAME_CNF\n\n# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])\n# ---------------------------------\n# Figure out \"hidden\" library dependencies from verbose\n# compiler output when linking a shared library.\n# Parse the compiler output and extract the necessary\n# objects, libraries and library flags.\nm4_defun([_LT_SYS_HIDDEN_LIBDEPS],\n[m4_require([_LT_FILEUTILS_DEFAULTS])dnl\nAC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl\n# Dependencies to place before and after the object being linked:\n_LT_TAGVAR(predep_objects, $1)=\n_LT_TAGVAR(postdep_objects, $1)=\n_LT_TAGVAR(predeps, $1)=\n_LT_TAGVAR(postdeps, $1)=\n_LT_TAGVAR(compiler_lib_search_path, $1)=\n\ndnl we can't use the lt_simple_compile_test_code here,\ndnl because it contains code intended for an executable,\ndnl not a library.  It's possible we should let each\ndnl tag define a new lt_????_link_test_code variable,\ndnl but it's only used here...\nm4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF\nint a;\nvoid foo (void) { a = 0; }\n_LT_EOF\n], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF\nclass Foo\n{\npublic:\n  Foo (void) { a = 0; }\nprivate:\n  int a;\n};\n_LT_EOF\n], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer*4 a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF\n      subroutine foo\n      implicit none\n      integer a\n      a=0\n      return\n      end\n_LT_EOF\n], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF\npublic class foo {\n  private int a;\n  public void bar (void) {\n    a = 0;\n  }\n};\n_LT_EOF\n], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF\npackage foo\nfunc foo() {\n}\n_LT_EOF\n])\n\n_lt_libdeps_save_CFLAGS=$CFLAGS\ncase \"$CC $CFLAGS \" in #(\n*\\ -flto*\\ *) CFLAGS=\"$CFLAGS -fno-lto\" ;;\n*\\ -fwhopr*\\ *) CFLAGS=\"$CFLAGS -fno-whopr\" ;;\n*\\ -fuse-linker-plugin*\\ *) CFLAGS=\"$CFLAGS -fno-use-linker-plugin\" ;;\nesac\n\ndnl Parse the compiler output and extract the necessary\ndnl objects, libraries and library flags.\nif AC_TRY_EVAL(ac_compile); then\n  # Parse the compiler output and extract the necessary\n  # objects, libraries and library flags.\n\n  # Sentinel used to keep track of whether or not we are before\n  # the conftest object file.\n  pre_test_object_deps_done=no\n\n  for p in `eval \"$output_verbose_link_cmd\"`; do\n    case ${prev}${p} in\n\n    -L* | -R* | -l*)\n       # Some compilers place space between \"-{L,R}\" and the path.\n       # Remove the space.\n       if test $p = \"-L\" ||\n          test $p = \"-R\"; then\n\t prev=$p\n\t continue\n       fi\n\n       # Expand the sysroot to ease extracting the directories later.\n       if test -z \"$prev\"; then\n         case $p in\n         -L*) func_stripname_cnf '-L' '' \"$p\"; prev=-L; p=$func_stripname_result ;;\n         -R*) func_stripname_cnf '-R' '' \"$p\"; prev=-R; p=$func_stripname_result ;;\n         -l*) func_stripname_cnf '-l' '' \"$p\"; prev=-l; p=$func_stripname_result ;;\n         esac\n       fi\n       case $p in\n       =*) func_stripname_cnf '=' '' \"$p\"; p=$lt_sysroot$func_stripname_result ;;\n       esac\n       if test \"$pre_test_object_deps_done\" = no; then\n\t case ${prev} in\n\t -L | -R)\n\t   # Internal compiler library paths should come after those\n\t   # provided the user.  The postdeps already come after the\n\t   # user supplied libs so there is no need to process them.\n\t   if test -z \"$_LT_TAGVAR(compiler_lib_search_path, $1)\"; then\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${prev}${p}\"\n\t   else\n\t     _LT_TAGVAR(compiler_lib_search_path, $1)=\"${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}\"\n\t   fi\n\t   ;;\n\t # The \"-l\" case would never come before the object being\n\t # linked, so don't bother handling this case.\n\t esac\n       else\n\t if test -z \"$_LT_TAGVAR(postdeps, $1)\"; then\n\t   _LT_TAGVAR(postdeps, $1)=\"${prev}${p}\"\n\t else\n\t   _LT_TAGVAR(postdeps, $1)=\"${_LT_TAGVAR(postdeps, $1)} ${prev}${p}\"\n\t fi\n       fi\n       prev=\n       ;;\n\n    *.lto.$objext) ;; # Ignore GCC LTO objects\n    *.$objext)\n       # This assumes that the test object file only shows up\n       # once in the compiler output.\n       if test \"$p\" = \"conftest.$objext\"; then\n\t pre_test_object_deps_done=yes\n\t continue\n       fi\n\n       if test \"$pre_test_object_deps_done\" = no; then\n\t if test -z \"$_LT_TAGVAR(predep_objects, $1)\"; then\n\t   _LT_TAGVAR(predep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(predep_objects, $1)=\"$_LT_TAGVAR(predep_objects, $1) $p\"\n\t fi\n       else\n\t if test -z \"$_LT_TAGVAR(postdep_objects, $1)\"; then\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$p\"\n\t else\n\t   _LT_TAGVAR(postdep_objects, $1)=\"$_LT_TAGVAR(postdep_objects, $1) $p\"\n\t fi\n       fi\n       ;;\n\n    *) ;; # Ignore the rest.\n\n    esac\n  done\n\n  # Clean up.\n  rm -f a.out a.exe\nelse\n  echo \"libtool.m4: error: problem compiling $1 test program\"\nfi\n\n$RM -f confest.$objext\nCFLAGS=$_lt_libdeps_save_CFLAGS\n\n# PORTME: override above test on systems where it is broken\nm4_if([$1], [CXX],\n[case $host_os in\ninterix[[3-9]]*)\n  # Interix 3.5 installs completely hosed .la files for C++, so rather than\n  # hack all around it, let's just trust \"g++\" to DTRT.\n  _LT_TAGVAR(predep_objects,$1)=\n  _LT_TAGVAR(postdep_objects,$1)=\n  _LT_TAGVAR(postdeps,$1)=\n  ;;\n\nlinux*)\n  case `$CC -V 2>&1 | sed 5q` in\n  *Sun\\ C*)\n    # Sun C++ 5.9\n\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\n\nsolaris*)\n  case $cc_basename in\n  CC* | sunCC*)\n    # The more standards-conforming stlport4 library is\n    # incompatible with the Cstd library. Avoid specifying\n    # it if it's in CXXFLAGS. Ignore libCrun as\n    # -library=stlport4 depends on it.\n    case \" $CXX $CXXFLAGS \" in\n    *\" -library=stlport4 \"*)\n      solaris_use_stlport4=yes\n      ;;\n    esac\n\n    # Adding this requires a known-good setup of shared libraries for\n    # Sun compiler versions before 5.6, else PIC objects from an old\n    # archive will be linked into the output, leading to subtle bugs.\n    if test \"$solaris_use_stlport4\" != yes; then\n      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'\n    fi\n    ;;\n  esac\n  ;;\nesac\n])\n\ncase \" $_LT_TAGVAR(postdeps, $1) \" in\n*\" -lc \"*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;\nesac\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=\nif test -n \"${_LT_TAGVAR(compiler_lib_search_path, $1)}\"; then\n _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo \" ${_LT_TAGVAR(compiler_lib_search_path, $1)}\" | ${SED} -e 's! -L! !g' -e 's!^ !!'`\nfi\n_LT_TAGDECL([], [compiler_lib_search_dirs], [1],\n    [The directories searched by this compiler when creating a shared library])\n_LT_TAGDECL([], [predep_objects], [1],\n    [Dependencies to place before and after the objects being linked to\n    create a shared library])\n_LT_TAGDECL([], [postdep_objects], [1])\n_LT_TAGDECL([], [predeps], [1])\n_LT_TAGDECL([], [postdeps], [1])\n_LT_TAGDECL([], [compiler_lib_search_path], [1],\n    [The library search path used internally by the compiler when linking\n    a shared library])\n])# _LT_SYS_HIDDEN_LIBDEPS\n\n\n# _LT_LANG_F77_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for a Fortran 77 compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_F77_CONFIG],\n[AC_LANG_PUSH(Fortran 77)\nif test -z \"$F77\" || test \"X$F77\" = \"Xno\"; then\n  _lt_disable_F77=yes\nfi\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for f77 test sources.\nac_ext=f\n\n# Object file extension for compiled f77 test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the F77 compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_F77\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  lt_save_CFLAGS=$CFLAGS\n  CC=${F77-\"f77\"}\n  CFLAGS=$FFLAGS\n  compiler=$CC\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n  GCC=$G77\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$G77\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=\"$lt_save_CC\"\n  CFLAGS=\"$lt_save_CFLAGS\"\nfi # test \"$_lt_disable_F77\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_F77_CONFIG\n\n\n# _LT_LANG_FC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for a Fortran compiler are\n# suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_FC_CONFIG],\n[AC_LANG_PUSH(Fortran)\n\nif test -z \"$FC\" || test \"X$FC\" = \"Xno\"; then\n  _lt_disable_FC=yes\nfi\n\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n_LT_TAGVAR(allow_undefined_flag, $1)=\n_LT_TAGVAR(always_export_symbols, $1)=no\n_LT_TAGVAR(archive_expsym_cmds, $1)=\n_LT_TAGVAR(export_dynamic_flag_spec, $1)=\n_LT_TAGVAR(hardcode_direct, $1)=no\n_LT_TAGVAR(hardcode_direct_absolute, $1)=no\n_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=\n_LT_TAGVAR(hardcode_libdir_separator, $1)=\n_LT_TAGVAR(hardcode_minus_L, $1)=no\n_LT_TAGVAR(hardcode_automatic, $1)=no\n_LT_TAGVAR(inherit_rpath, $1)=no\n_LT_TAGVAR(module_cmds, $1)=\n_LT_TAGVAR(module_expsym_cmds, $1)=\n_LT_TAGVAR(link_all_deplibs, $1)=unknown\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n_LT_TAGVAR(no_undefined_flag, $1)=\n_LT_TAGVAR(whole_archive_flag_spec, $1)=\n_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no\n\n# Source file extension for fc test sources.\nac_ext=${ac_fc_srcext-f}\n\n# Object file extension for compiled fc test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# No sense in running all these tests if we already determined that\n# the FC compiler isn't working.  Some variables (like enable_shared)\n# are currently assumed to apply to all compilers on this platform,\n# and will be corrupted by setting them based on a non-working compiler.\nif test \"$_lt_disable_FC\" != yes; then\n  # Code to be used in simple compile tests\n  lt_simple_compile_test_code=\"\\\n      subroutine t\n      return\n      end\n\"\n\n  # Code to be used in simple link tests\n  lt_simple_link_test_code=\"\\\n      program t\n      end\n\"\n\n  # ltmain only uses $CC for tagged configurations so make sure $CC is set.\n  _LT_TAG_COMPILER\n\n  # save warnings/boilerplate of simple test code\n  _LT_COMPILER_BOILERPLATE\n  _LT_LINKER_BOILERPLATE\n\n  # Allow CC to be a program name with arguments.\n  lt_save_CC=\"$CC\"\n  lt_save_GCC=$GCC\n  lt_save_CFLAGS=$CFLAGS\n  CC=${FC-\"f95\"}\n  CFLAGS=$FCFLAGS\n  compiler=$CC\n  GCC=$ac_cv_fc_compiler_gnu\n\n  _LT_TAGVAR(compiler, $1)=$CC\n  _LT_CC_BASENAME([$compiler])\n\n  if test -n \"$compiler\"; then\n    AC_MSG_CHECKING([if libtool supports shared libraries])\n    AC_MSG_RESULT([$can_build_shared])\n\n    AC_MSG_CHECKING([whether to build shared libraries])\n    test \"$can_build_shared\" = \"no\" && enable_shared=no\n\n    # On AIX, shared libraries and static libraries use the same namespace, and\n    # are all built from PIC.\n    case $host_os in\n      aix3*)\n        test \"$enable_shared\" = yes && enable_static=no\n        if test -n \"$RANLIB\"; then\n          archive_cmds=\"$archive_cmds~\\$RANLIB \\$lib\"\n          postinstall_cmds='$RANLIB $lib'\n        fi\n        ;;\n      aix[[4-9]]*)\n\tif test \"$host_cpu\" != ia64 && test \"$aix_use_runtimelinking\" = no ; then\n\t  test \"$enable_shared\" = yes && enable_static=no\n\tfi\n        ;;\n    esac\n    AC_MSG_RESULT([$enable_shared])\n\n    AC_MSG_CHECKING([whether to build static libraries])\n    # Make sure either enable_shared or enable_static is yes.\n    test \"$enable_shared\" = yes || enable_static=yes\n    AC_MSG_RESULT([$enable_static])\n\n    _LT_TAGVAR(GCC, $1)=\"$ac_cv_fc_compiler_gnu\"\n    _LT_TAGVAR(LD, $1)=\"$LD\"\n\n    ## CAVEAT EMPTOR:\n    ## There is no encapsulation within the following macros, do not change\n    ## the running order or otherwise move them around unless you know exactly\n    ## what you are doing...\n    _LT_SYS_HIDDEN_LIBDEPS($1)\n    _LT_COMPILER_PIC($1)\n    _LT_COMPILER_C_O($1)\n    _LT_COMPILER_FILE_LOCKS($1)\n    _LT_LINKER_SHLIBS($1)\n    _LT_SYS_DYNAMIC_LINKER($1)\n    _LT_LINKER_HARDCODE_LIBPATH($1)\n\n    _LT_CONFIG($1)\n  fi # test -n \"$compiler\"\n\n  GCC=$lt_save_GCC\n  CC=$lt_save_CC\n  CFLAGS=$lt_save_CFLAGS\nfi # test \"$_lt_disable_FC\" != yes\n\nAC_LANG_POP\n])# _LT_LANG_FC_CONFIG\n\n\n# _LT_LANG_GCJ_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for the GNU Java Compiler compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_GCJ_CONFIG],\n[AC_REQUIRE([LT_PROG_GCJ])dnl\nAC_LANG_SAVE\n\n# Source file extension for Java test sources.\nac_ext=java\n\n# Object file extension for compiled Java test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"class foo {}\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=yes\nCC=${GCJ-\"gcj\"}\nCFLAGS=$GCJFLAGS\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_TAGVAR(LD, $1)=\"$LD\"\n_LT_CC_BASENAME([$compiler])\n\n# GCJ did not exist at the time GCC didn't implicitly link libc in.\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n\n## CAVEAT EMPTOR:\n## There is no encapsulation within the following macros, do not change\n## the running order or otherwise move them around unless you know exactly\n## what you are doing...\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n\n  _LT_CONFIG($1)\nfi\n\nAC_LANG_RESTORE\n\nGCC=$lt_save_GCC\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_GCJ_CONFIG\n\n\n# _LT_LANG_GO_CONFIG([TAG])\n# --------------------------\n# Ensure that the configuration variables for the GNU Go compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_GO_CONFIG],\n[AC_REQUIRE([LT_PROG_GO])dnl\nAC_LANG_SAVE\n\n# Source file extension for Go test sources.\nac_ext=go\n\n# Object file extension for compiled Go test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code=\"package main; func main() { }\"\n\n# Code to be used in simple link tests\nlt_simple_link_test_code='package main; func main() { }'\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=$CC\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=yes\nCC=${GOC-\"gccgo\"}\nCFLAGS=$GOFLAGS\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_TAGVAR(LD, $1)=\"$LD\"\n_LT_CC_BASENAME([$compiler])\n\n# Go did not exist at the time GCC didn't implicitly link libc in.\n_LT_TAGVAR(archive_cmds_need_lc, $1)=no\n\n_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds\n_LT_TAGVAR(reload_flag, $1)=$reload_flag\n_LT_TAGVAR(reload_cmds, $1)=$reload_cmds\n\n## CAVEAT EMPTOR:\n## There is no encapsulation within the following macros, do not change\n## the running order or otherwise move them around unless you know exactly\n## what you are doing...\nif test -n \"$compiler\"; then\n  _LT_COMPILER_NO_RTTI($1)\n  _LT_COMPILER_PIC($1)\n  _LT_COMPILER_C_O($1)\n  _LT_COMPILER_FILE_LOCKS($1)\n  _LT_LINKER_SHLIBS($1)\n  _LT_LINKER_HARDCODE_LIBPATH($1)\n\n  _LT_CONFIG($1)\nfi\n\nAC_LANG_RESTORE\n\nGCC=$lt_save_GCC\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_GO_CONFIG\n\n\n# _LT_LANG_RC_CONFIG([TAG])\n# -------------------------\n# Ensure that the configuration variables for the Windows resource compiler\n# are suitably defined.  These variables are subsequently used by _LT_CONFIG\n# to write the compiler configuration to `libtool'.\nm4_defun([_LT_LANG_RC_CONFIG],\n[AC_REQUIRE([LT_PROG_RC])dnl\nAC_LANG_SAVE\n\n# Source file extension for RC test sources.\nac_ext=rc\n\n# Object file extension for compiled RC test sources.\nobjext=o\n_LT_TAGVAR(objext, $1)=$objext\n\n# Code to be used in simple compile tests\nlt_simple_compile_test_code='sample MENU { MENUITEM \"&Soup\", 100, CHECKED }'\n\n# Code to be used in simple link tests\nlt_simple_link_test_code=\"$lt_simple_compile_test_code\"\n\n# ltmain only uses $CC for tagged configurations so make sure $CC is set.\n_LT_TAG_COMPILER\n\n# save warnings/boilerplate of simple test code\n_LT_COMPILER_BOILERPLATE\n_LT_LINKER_BOILERPLATE\n\n# Allow CC to be a program name with arguments.\nlt_save_CC=\"$CC\"\nlt_save_CFLAGS=$CFLAGS\nlt_save_GCC=$GCC\nGCC=\nCC=${RC-\"windres\"}\nCFLAGS=\ncompiler=$CC\n_LT_TAGVAR(compiler, $1)=$CC\n_LT_CC_BASENAME([$compiler])\n_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes\n\nif test -n \"$compiler\"; then\n  :\n  _LT_CONFIG($1)\nfi\n\nGCC=$lt_save_GCC\nAC_LANG_RESTORE\nCC=$lt_save_CC\nCFLAGS=$lt_save_CFLAGS\n])# _LT_LANG_RC_CONFIG\n\n\n# LT_PROG_GCJ\n# -----------\nAC_DEFUN([LT_PROG_GCJ],\n[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],\n  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],\n    [AC_CHECK_TOOL(GCJ, gcj,)\n      test \"x${GCJFLAGS+set}\" = xset || GCJFLAGS=\"-g -O2\"\n      AC_SUBST(GCJFLAGS)])])[]dnl\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_GCJ], [])\n\n\n# LT_PROG_GO\n# ----------\nAC_DEFUN([LT_PROG_GO],\n[AC_CHECK_TOOL(GOC, gccgo,)\n])\n\n\n# LT_PROG_RC\n# ----------\nAC_DEFUN([LT_PROG_RC],\n[AC_CHECK_TOOL(RC, windres,)\n])\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_RC], [])\n\n\n# _LT_DECL_EGREP\n# --------------\n# If we don't have a new enough Autoconf to choose the best grep\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_EGREP],\n[AC_REQUIRE([AC_PROG_EGREP])dnl\nAC_REQUIRE([AC_PROG_FGREP])dnl\ntest -z \"$GREP\" && GREP=grep\n_LT_DECL([], [GREP], [1], [A grep program that handles long lines])\n_LT_DECL([], [EGREP], [1], [An ERE matcher])\n_LT_DECL([], [FGREP], [1], [A literal string matcher])\ndnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too\nAC_SUBST([GREP])\n])\n\n\n# _LT_DECL_OBJDUMP\n# --------------\n# If we don't have a new enough Autoconf to choose the best objdump\n# available, choose the one first in the user's PATH.\nm4_defun([_LT_DECL_OBJDUMP],\n[AC_CHECK_TOOL(OBJDUMP, objdump, false)\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])\nAC_SUBST([OBJDUMP])\n])\n\n# _LT_DECL_DLLTOOL\n# ----------------\n# Ensure DLLTOOL variable is set.\nm4_defun([_LT_DECL_DLLTOOL],\n[AC_CHECK_TOOL(DLLTOOL, dlltool, false)\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n_LT_DECL([], [DLLTOOL], [1], [DLL creation program])\nAC_SUBST([DLLTOOL])\n])\n\n# _LT_DECL_SED\n# ------------\n# Check for a fully-functional sed program, that truncates\n# as few characters as possible.  Prefer GNU sed if found.\nm4_defun([_LT_DECL_SED],\n[AC_PROG_SED\ntest -z \"$SED\" && SED=sed\nXsed=\"$SED -e 1s/^X//\"\n_LT_DECL([], [SED], [1], [A sed program that does not truncate output])\n_LT_DECL([], [Xsed], [\"\\$SED -e 1s/^X//\"],\n    [Sed that helps us avoid accidentally triggering echo(1) options like -n])\n])# _LT_DECL_SED\n\nm4_ifndef([AC_PROG_SED], [\n############################################################\n# NOTE: This macro has been submitted for inclusion into   #\n#  GNU Autoconf as AC_PROG_SED.  When it is available in   #\n#  a released version of Autoconf we should remove this    #\n#  macro and use it instead.                               #\n############################################################\n\nm4_defun([AC_PROG_SED],\n[AC_MSG_CHECKING([for a sed that does not truncate output])\nAC_CACHE_VAL(lt_cv_path_SED,\n[# Loop through the user's path and test for sed and gsed.\n# Then use that list of sed's as ones to test for truncation.\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 lt_ac_prog in sed gsed; do\n    for ac_exec_ext in '' $ac_executable_extensions; do\n      if $as_executable_p \"$as_dir/$lt_ac_prog$ac_exec_ext\"; then\n        lt_ac_sed_list=\"$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext\"\n      fi\n    done\n  done\ndone\nIFS=$as_save_IFS\nlt_ac_max=0\nlt_ac_count=0\n# Add /usr/xpg4/bin/sed as it is typically found on Solaris\n# along with /bin/sed that truncates output.\nfor lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do\n  test ! -f $lt_ac_sed && continue\n  cat /dev/null > conftest.in\n  lt_ac_count=0\n  echo $ECHO_N \"0123456789$ECHO_C\" >conftest.in\n  # Check for GNU sed and select it if it is found.\n  if \"$lt_ac_sed\" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then\n    lt_cv_path_SED=$lt_ac_sed\n    break\n  fi\n  while true; do\n    cat conftest.in conftest.in >conftest.tmp\n    mv conftest.tmp conftest.in\n    cp conftest.in conftest.nl\n    echo >>conftest.nl\n    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break\n    cmp -s conftest.out conftest.nl || break\n    # 10000 chars as input seems more than enough\n    test $lt_ac_count -gt 10 && break\n    lt_ac_count=`expr $lt_ac_count + 1`\n    if test $lt_ac_count -gt $lt_ac_max; then\n      lt_ac_max=$lt_ac_count\n      lt_cv_path_SED=$lt_ac_sed\n    fi\n  done\ndone\n])\nSED=$lt_cv_path_SED\nAC_SUBST([SED])\nAC_MSG_RESULT([$SED])\n])#AC_PROG_SED\n])#m4_ifndef\n\n# Old name:\nAU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([LT_AC_PROG_SED], [])\n\n\n# _LT_CHECK_SHELL_FEATURES\n# ------------------------\n# Find out whether the shell is Bourne or XSI compatible,\n# or has some other useful features.\nm4_defun([_LT_CHECK_SHELL_FEATURES],\n[AC_MSG_CHECKING([whether the shell understands some XSI constructs])\n# Try some XSI features\nxsi_shell=no\n( _lt_dummy=\"a/b/c\"\n  test \"${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}\"${_lt_dummy%\"$_lt_dummy\"}, \\\n      = c,a/b,b/c, \\\n    && eval 'test $(( 1 + 1 )) -eq 2 \\\n    && test \"${#_lt_dummy}\" -eq 5' ) >/dev/null 2>&1 \\\n  && xsi_shell=yes\nAC_MSG_RESULT([$xsi_shell])\n_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])\n\nAC_MSG_CHECKING([whether the shell understands \"+=\"])\nlt_shell_append=no\n( foo=bar; set foo baz; eval \"$[1]+=\\$[2]\" && test \"$foo\" = barbaz ) \\\n    >/dev/null 2>&1 \\\n  && lt_shell_append=yes\nAC_MSG_RESULT([$lt_shell_append])\n_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])\n\nif ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then\n  lt_unset=unset\nelse\n  lt_unset=false\nfi\n_LT_DECL([], [lt_unset], [0], [whether the shell understands \"unset\"])dnl\n\n# test EBCDIC or ASCII\ncase `echo X|tr X '\\101'` in\n A) # ASCII based system\n    # \\n is not interpreted correctly by Solaris 8 /usr/ucb/tr\n  lt_SP2NL='tr \\040 \\012'\n  lt_NL2SP='tr \\015\\012 \\040\\040'\n  ;;\n *) # EBCDIC based system\n  lt_SP2NL='tr \\100 \\n'\n  lt_NL2SP='tr \\r\\n \\100\\100'\n  ;;\nesac\n_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl\n_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl\n])# _LT_CHECK_SHELL_FEATURES\n\n\n# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)\n# ------------------------------------------------------\n# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and\n# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.\nm4_defun([_LT_PROG_FUNCTION_REPLACE],\n[dnl {\nsed -e '/^$1 ()$/,/^} # $1 /c\\\n$1 ()\\\n{\\\nm4_bpatsubsts([$2], [$], [\\\\], [^\\([\t ]\\)], [\\\\\\1])\n} # Extended-shell $1 implementation' \"$cfgfile\" > $cfgfile.tmp \\\n  && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n    || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\ntest 0 -eq $? || _lt_function_replace_fail=:\n])\n\n\n# _LT_PROG_REPLACE_SHELLFNS\n# -------------------------\n# Replace existing portable implementations of several shell functions with\n# equivalent extended shell implementations where those features are available..\nm4_defun([_LT_PROG_REPLACE_SHELLFNS],\n[if test x\"$xsi_shell\" = xyes; then\n  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl\n    case ${1} in\n      */*) func_dirname_result=\"${1%/*}${2}\" ;;\n      *  ) func_dirname_result=\"${3}\" ;;\n    esac])\n\n  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl\n    func_basename_result=\"${1##*/}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl\n    case ${1} in\n      */*) func_dirname_result=\"${1%/*}${2}\" ;;\n      *  ) func_dirname_result=\"${3}\" ;;\n    esac\n    func_basename_result=\"${1##*/}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl\n    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\n    # positional parameters, so assign one to ordinary parameter first.\n    func_stripname_result=${3}\n    func_stripname_result=${func_stripname_result#\"${1}\"}\n    func_stripname_result=${func_stripname_result%\"${2}\"}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl\n    func_split_long_opt_name=${1%%=*}\n    func_split_long_opt_arg=${1#*=}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl\n    func_split_short_opt_arg=${1#??}\n    func_split_short_opt_name=${1%\"$func_split_short_opt_arg\"}])\n\n  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl\n    case ${1} in\n      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\n      *)    func_lo2o_result=${1} ;;\n    esac])\n\n  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])\n\n  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])\n\n  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])\nfi\n\nif test x\"$lt_shell_append\" = xyes; then\n  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval \"${1}+=\\\\${2}\"])\n\n  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl\n    func_quote_for_eval \"${2}\"\ndnl m4 expansion turns \\\\\\\\ into \\\\, and then the shell eval turns that into \\\n    eval \"${1}+=\\\\\\\\ \\\\$func_quote_for_eval_result\"])\n\n  # Save a `func_append' function call where possible by direct use of '+='\n  sed -e 's%func_append \\([[a-zA-Z_]]\\{1,\\}\\) \"%\\1+=\"%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nelse\n  # Save a `func_append' function call even when '+=' is not available\n  sed -e 's%func_append \\([[a-zA-Z_]]\\{1,\\}\\) \"%\\1=\"$\\1%g' $cfgfile > $cfgfile.tmp \\\n    && mv -f \"$cfgfile.tmp\" \"$cfgfile\" \\\n      || (rm -f \"$cfgfile\" && cp \"$cfgfile.tmp\" \"$cfgfile\" && rm -f \"$cfgfile.tmp\")\n  test 0 -eq $? || _lt_function_replace_fail=:\nfi\n\nif test x\"$_lt_function_replace_fail\" = x\":\"; then\n  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])\nfi\n])\n\n# _LT_PATH_CONVERSION_FUNCTIONS\n# -----------------------------\n# Determine which file name conversion functions should be used by\n# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed\n# for certain cross-compile configurations and native mingw.\nm4_defun([_LT_PATH_CONVERSION_FUNCTIONS],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\nAC_REQUIRE([AC_CANONICAL_BUILD])dnl\nAC_MSG_CHECKING([how to convert $build file names to $host format])\nAC_CACHE_VAL(lt_cv_to_host_file_cmd,\n[case $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32\n        ;;\n    esac\n    ;;\n  *-*-cygwin* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin\n        ;;\n      *-*-cygwin* )\n        lt_cv_to_host_file_cmd=func_convert_file_noop\n        ;;\n      * ) # otherwise, assume *nix\n        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin\n        ;;\n    esac\n    ;;\n  * ) # unhandled hosts (and \"normal\" native builds)\n    lt_cv_to_host_file_cmd=func_convert_file_noop\n    ;;\nesac\n])\nto_host_file_cmd=$lt_cv_to_host_file_cmd\nAC_MSG_RESULT([$lt_cv_to_host_file_cmd])\n_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],\n         [0], [convert $build file names to $host format])dnl\n\nAC_MSG_CHECKING([how to convert $build file names to toolchain format])\nAC_CACHE_VAL(lt_cv_to_tool_file_cmd,\n[#assume ordinary cross tools, or native build.\nlt_cv_to_tool_file_cmd=func_convert_file_noop\ncase $host in\n  *-*-mingw* )\n    case $build in\n      *-*-mingw* ) # actually msys\n        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32\n        ;;\n    esac\n    ;;\nesac\n])\nto_tool_file_cmd=$lt_cv_to_tool_file_cmd\nAC_MSG_RESULT([$lt_cv_to_tool_file_cmd])\n_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],\n         [0], [convert $build files to toolchain format])dnl\n])# _LT_PATH_CONVERSION_FUNCTIONS\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/ltoptions.m4",
    "content": "# Helper functions for option handling.                    -*- Autoconf -*-\n#\n#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,\n#   Inc.\n#   Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 7 ltoptions.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])\n\n\n# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)\n# ------------------------------------------\nm4_define([_LT_MANGLE_OPTION],\n[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])\n\n\n# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)\n# ---------------------------------------\n# Set option OPTION-NAME for macro MACRO-NAME, and if there is a\n# matching handler defined, dispatch to it.  Other OPTION-NAMEs are\n# saved as a flag.\nm4_define([_LT_SET_OPTION],\n[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl\nm4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),\n        _LT_MANGLE_DEFUN([$1], [$2]),\n    [m4_warning([Unknown $1 option `$2'])])[]dnl\n])\n\n\n# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])\n# ------------------------------------------------------------\n# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.\nm4_define([_LT_IF_OPTION],\n[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])\n\n\n# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)\n# -------------------------------------------------------\n# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME\n# are set.\nm4_define([_LT_UNLESS_OPTIONS],\n[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n\t    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),\n\t\t      [m4_define([$0_found])])])[]dnl\nm4_ifdef([$0_found], [m4_undefine([$0_found])], [$3\n])[]dnl\n])\n\n\n# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)\n# ----------------------------------------\n# OPTION-LIST is a space-separated list of Libtool options associated\n# with MACRO-NAME.  If any OPTION has a matching handler declared with\n# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about\n# the unknown option and exit.\nm4_defun([_LT_SET_OPTIONS],\n[# Set options\nm4_foreach([_LT_Option], m4_split(m4_normalize([$2])),\n    [_LT_SET_OPTION([$1], _LT_Option)])\n\nm4_if([$1],[LT_INIT],[\n  dnl\n  dnl Simply set some default values (i.e off) if boolean options were not\n  dnl specified:\n  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no\n  ])\n  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no\n  ])\n  dnl\n  dnl If no reference was made to various pairs of opposing options, then\n  dnl we run the default mode handler for the pair.  For example, if neither\n  dnl `shared' nor `disable-shared' was passed, we enable building of shared\n  dnl archives by default:\n  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])\n  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])\n  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],\n  \t\t   [_LT_ENABLE_FAST_INSTALL])\n  ])\n])# _LT_SET_OPTIONS\n\n\n## --------------------------------- ##\n## Macros to handle LT_INIT options. ##\n## --------------------------------- ##\n\n# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)\n# -----------------------------------------\nm4_define([_LT_MANGLE_DEFUN],\n[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])\n\n\n# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)\n# -----------------------------------------------\nm4_define([LT_OPTION_DEFINE],\n[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl\n])# LT_OPTION_DEFINE\n\n\n# dlopen\n# ------\nLT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes\n])\n\nAU_DEFUN([AC_LIBTOOL_DLOPEN],\n[_LT_SET_OPTION([LT_INIT], [dlopen])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `dlopen' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])\n\n\n# win32-dll\n# ---------\n# Declare package support for building win32 dll's.\nLT_OPTION_DEFINE([LT_INIT], [win32-dll],\n[enable_win32_dll=yes\n\ncase $host in\n*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)\n  AC_CHECK_TOOL(AS, as, false)\n  AC_CHECK_TOOL(DLLTOOL, dlltool, false)\n  AC_CHECK_TOOL(OBJDUMP, objdump, false)\n  ;;\nesac\n\ntest -z \"$AS\" && AS=as\n_LT_DECL([], [AS],      [1], [Assembler program])dnl\n\ntest -z \"$DLLTOOL\" && DLLTOOL=dlltool\n_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl\n\ntest -z \"$OBJDUMP\" && OBJDUMP=objdump\n_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl\n])# win32-dll\n\nAU_DEFUN([AC_LIBTOOL_WIN32_DLL],\n[AC_REQUIRE([AC_CANONICAL_HOST])dnl\n_LT_SET_OPTION([LT_INIT], [win32-dll])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `win32-dll' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])\n\n\n# _LT_ENABLE_SHARED([DEFAULT])\n# ----------------------------\n# implement the --enable-shared flag, and supports the `shared' and\n# `disable-shared' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_SHARED],\n[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([shared],\n    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],\n\t[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_shared=yes ;;\n    no) enable_shared=no ;;\n    *)\n      enable_shared=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_shared=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)\n\n    _LT_DECL([build_libtool_libs], [enable_shared], [0],\n\t[Whether or not to build shared libraries])\n])# _LT_ENABLE_SHARED\n\nLT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])\n])\n\nAC_DEFUN([AC_DISABLE_SHARED],\n[_LT_SET_OPTION([LT_INIT], [disable-shared])\n])\n\nAU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])\nAU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_SHARED], [])\ndnl AC_DEFUN([AM_DISABLE_SHARED], [])\n\n\n\n# _LT_ENABLE_STATIC([DEFAULT])\n# ----------------------------\n# implement the --enable-static flag, and support the `static' and\n# `disable-static' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_STATIC],\n[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([static],\n    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],\n\t[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_static=yes ;;\n    no) enable_static=no ;;\n    *)\n     enable_static=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_static=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)\n\n    _LT_DECL([build_old_libs], [enable_static], [0],\n\t[Whether or not to build static libraries])\n])# _LT_ENABLE_STATIC\n\nLT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])\n\n# Old names:\nAC_DEFUN([AC_ENABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])\n])\n\nAC_DEFUN([AC_DISABLE_STATIC],\n[_LT_SET_OPTION([LT_INIT], [disable-static])\n])\n\nAU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])\nAU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AM_ENABLE_STATIC], [])\ndnl AC_DEFUN([AM_DISABLE_STATIC], [])\n\n\n\n# _LT_ENABLE_FAST_INSTALL([DEFAULT])\n# ----------------------------------\n# implement the --enable-fast-install flag, and support the `fast-install'\n# and `disable-fast-install' LT_INIT options.\n# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.\nm4_define([_LT_ENABLE_FAST_INSTALL],\n[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl\nAC_ARG_ENABLE([fast-install],\n    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],\n    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],\n    [p=${PACKAGE-default}\n    case $enableval in\n    yes) enable_fast_install=yes ;;\n    no) enable_fast_install=no ;;\n    *)\n      enable_fast_install=no\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for pkg in $enableval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$pkg\" = \"X$p\"; then\n\t  enable_fast_install=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)\n\n_LT_DECL([fast_install], [enable_fast_install], [0],\n\t [Whether or not to optimize for fast installation])dnl\n])# _LT_ENABLE_FAST_INSTALL\n\nLT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])\nLT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])\n\n# Old names:\nAU_DEFUN([AC_ENABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `fast-install' option into LT_INIT's first parameter.])\n])\n\nAU_DEFUN([AC_DISABLE_FAST_INSTALL],\n[_LT_SET_OPTION([LT_INIT], [disable-fast-install])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you put\nthe `disable-fast-install' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])\ndnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])\n\n\n# _LT_WITH_PIC([MODE])\n# --------------------\n# implement the --with-pic flag, and support the `pic-only' and `no-pic'\n# LT_INIT options.\n# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.\nm4_define([_LT_WITH_PIC],\n[AC_ARG_WITH([pic],\n    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],\n\t[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],\n    [lt_p=${PACKAGE-default}\n    case $withval in\n    yes|no) pic_mode=$withval ;;\n    *)\n      pic_mode=default\n      # Look at the argument we got.  We use all the common list separators.\n      lt_save_ifs=\"$IFS\"; IFS=\"${IFS}$PATH_SEPARATOR,\"\n      for lt_pkg in $withval; do\n\tIFS=\"$lt_save_ifs\"\n\tif test \"X$lt_pkg\" = \"X$lt_p\"; then\n\t  pic_mode=yes\n\tfi\n      done\n      IFS=\"$lt_save_ifs\"\n      ;;\n    esac],\n    [pic_mode=default])\n\ntest -z \"$pic_mode\" && pic_mode=m4_default([$1], [default])\n\n_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl\n])# _LT_WITH_PIC\n\nLT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])\nLT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])\n\n# Old name:\nAU_DEFUN([AC_LIBTOOL_PICMODE],\n[_LT_SET_OPTION([LT_INIT], [pic-only])\nAC_DIAGNOSE([obsolete],\n[$0: Remove this warning and the call to _LT_SET_OPTION when you\nput the `pic-only' option into LT_INIT's first parameter.])\n])\n\ndnl aclocal-1.4 backwards compatibility:\ndnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])\n\n## ----------------- ##\n## LTDL_INIT Options ##\n## ----------------- ##\n\nm4_define([_LTDL_MODE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],\n\t\t [m4_define([_LTDL_MODE], [nonrecursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [recursive],\n\t\t [m4_define([_LTDL_MODE], [recursive])])\nLT_OPTION_DEFINE([LTDL_INIT], [subproject],\n\t\t [m4_define([_LTDL_MODE], [subproject])])\n\nm4_define([_LTDL_TYPE], [])\nLT_OPTION_DEFINE([LTDL_INIT], [installable],\n\t\t [m4_define([_LTDL_TYPE], [installable])])\nLT_OPTION_DEFINE([LTDL_INIT], [convenience],\n\t\t [m4_define([_LTDL_TYPE], [convenience])])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/ltsugar.m4",
    "content": "# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-\n#\n# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.\n# Written by Gary V. Vaughan, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 6 ltsugar.m4\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])\n\n\n# lt_join(SEP, ARG1, [ARG2...])\n# -----------------------------\n# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their\n# associated separator.\n# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier\n# versions in m4sugar had bugs.\nm4_define([lt_join],\n[m4_if([$#], [1], [],\n       [$#], [2], [[$2]],\n       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])\nm4_define([_lt_join],\n[m4_if([$#$2], [2], [],\n       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])\n\n\n# lt_car(LIST)\n# lt_cdr(LIST)\n# ------------\n# Manipulate m4 lists.\n# These macros are necessary as long as will still need to support\n# Autoconf-2.59 which quotes differently.\nm4_define([lt_car], [[$1]])\nm4_define([lt_cdr],\n[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],\n       [$#], 1, [],\n       [m4_dquote(m4_shift($@))])])\nm4_define([lt_unquote], $1)\n\n\n# lt_append(MACRO-NAME, STRING, [SEPARATOR])\n# ------------------------------------------\n# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.\n# Note that neither SEPARATOR nor STRING are expanded; they are appended\n# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).\n# No SEPARATOR is output if MACRO-NAME was previously undefined (different\n# than defined and empty).\n#\n# This macro is needed until we can rely on Autoconf 2.62, since earlier\n# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.\nm4_define([lt_append],\n[m4_define([$1],\n\t   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])\n\n\n\n# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])\n# ----------------------------------------------------------\n# Produce a SEP delimited list of all paired combinations of elements of\n# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list\n# has the form PREFIXmINFIXSUFFIXn.\n# Needed until we can rely on m4_combine added in Autoconf 2.62.\nm4_define([lt_combine],\n[m4_if(m4_eval([$# > 3]), [1],\n       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl\n[[m4_foreach([_Lt_prefix], [$2],\n\t     [m4_foreach([_Lt_suffix],\n\t\t]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,\n\t[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])\n\n\n# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])\n# -----------------------------------------------------------------------\n# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited\n# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.\nm4_define([lt_if_append_uniq],\n[m4_ifdef([$1],\n\t  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],\n\t\t [lt_append([$1], [$2], [$3])$4],\n\t\t [$5])],\n\t  [lt_append([$1], [$2], [$3])$4])])\n\n\n# lt_dict_add(DICT, KEY, VALUE)\n# -----------------------------\nm4_define([lt_dict_add],\n[m4_define([$1($2)], [$3])])\n\n\n# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)\n# --------------------------------------------\nm4_define([lt_dict_add_subkey],\n[m4_define([$1($2:$3)], [$4])])\n\n\n# lt_dict_fetch(DICT, KEY, [SUBKEY])\n# ----------------------------------\nm4_define([lt_dict_fetch],\n[m4_ifval([$3],\n\tm4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),\n    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])\n\n\n# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])\n# -----------------------------------------------------------------\nm4_define([lt_if_dict_fetch],\n[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],\n\t[$5],\n    [$6])])\n\n\n# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])\n# --------------------------------------------------------------\nm4_define([lt_dict_filter],\n[m4_if([$5], [], [],\n  [lt_join(m4_quote(m4_default([$4], [[, ]])),\n           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),\n\t\t      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/ltversion.m4",
    "content": "# ltversion.m4 -- version numbers\t\t\t-*- Autoconf -*-\n#\n#   Copyright (C) 2004 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# @configure_input@\n\n# serial 3337 ltversion.m4\n# This file is part of GNU Libtool\n\nm4_define([LT_PACKAGE_VERSION], [2.4.2])\nm4_define([LT_PACKAGE_REVISION], [1.3337])\n\nAC_DEFUN([LTVERSION_VERSION],\n[macro_version='2.4.2'\nmacro_revision='1.3337'\n_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])\n_LT_DECL(, macro_revision, 0)\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/lt~obsolete.m4",
    "content": "# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-\n#\n#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.\n#   Written by Scott James Remnant, 2004.\n#\n# This file is free software; the Free Software Foundation gives\n# unlimited permission to copy and/or distribute it, with or without\n# modifications, as long as this notice is preserved.\n\n# serial 5 lt~obsolete.m4\n\n# These exist entirely to fool aclocal when bootstrapping libtool.\n#\n# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)\n# which have later been changed to m4_define as they aren't part of the\n# exported API, or moved to Autoconf or Automake where they belong.\n#\n# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN\n# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us\n# using a macro with the same name in our local m4/libtool.m4 it'll\n# pull the old libtool.m4 in (it doesn't see our shiny new m4_define\n# and doesn't know about Autoconf macros at all.)\n#\n# So we provide this file, which has a silly filename so it's always\n# included after everything else.  This provides aclocal with the\n# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything\n# because those macros already exist, or will be overwritten later.\n# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. \n#\n# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.\n# Yes, that means every name once taken will need to remain here until\n# we give up compatibility with versions before 1.7, at which point\n# we need to keep only those names which we still refer to.\n\n# This is to help aclocal find these macros, as it can't see m4_define.\nAC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])\n\nm4_ifndef([AC_LIBTOOL_LINKER_OPTION],\t[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])\nm4_ifndef([AC_PROG_EGREP],\t\t[AC_DEFUN([AC_PROG_EGREP])])\nm4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],\t[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])\nm4_ifndef([_LT_AC_SHELL_INIT],\t\t[AC_DEFUN([_LT_AC_SHELL_INIT])])\nm4_ifndef([_LT_AC_SYS_LIBPATH_AIX],\t[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])\nm4_ifndef([_LT_PROG_LTMAIN],\t\t[AC_DEFUN([_LT_PROG_LTMAIN])])\nm4_ifndef([_LT_AC_TAGVAR],\t\t[AC_DEFUN([_LT_AC_TAGVAR])])\nm4_ifndef([AC_LTDL_ENABLE_INSTALL],\t[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])\nm4_ifndef([AC_LTDL_PREOPEN],\t\t[AC_DEFUN([AC_LTDL_PREOPEN])])\nm4_ifndef([_LT_AC_SYS_COMPILER],\t[AC_DEFUN([_LT_AC_SYS_COMPILER])])\nm4_ifndef([_LT_AC_LOCK],\t\t[AC_DEFUN([_LT_AC_LOCK])])\nm4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],\t[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])\nm4_ifndef([_LT_AC_TRY_DLOPEN_SELF],\t[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])\nm4_ifndef([AC_LIBTOOL_PROG_CC_C_O],\t[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])\nm4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])\nm4_ifndef([AC_LIBTOOL_OBJDIR],\t\t[AC_DEFUN([AC_LIBTOOL_OBJDIR])])\nm4_ifndef([AC_LTDL_OBJDIR],\t\t[AC_DEFUN([AC_LTDL_OBJDIR])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])\nm4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],\t[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])\nm4_ifndef([AC_PATH_MAGIC],\t\t[AC_DEFUN([AC_PATH_MAGIC])])\nm4_ifndef([AC_PROG_LD_GNU],\t\t[AC_DEFUN([AC_PROG_LD_GNU])])\nm4_ifndef([AC_PROG_LD_RELOAD_FLAG],\t[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])\nm4_ifndef([AC_DEPLIBS_CHECK_METHOD],\t[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])\nm4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])\nm4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])\nm4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],\t[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])\nm4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],\t[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])\nm4_ifndef([LT_AC_PROG_EGREP],\t\t[AC_DEFUN([LT_AC_PROG_EGREP])])\nm4_ifndef([LT_AC_PROG_SED],\t\t[AC_DEFUN([LT_AC_PROG_SED])])\nm4_ifndef([_LT_CC_BASENAME],\t\t[AC_DEFUN([_LT_CC_BASENAME])])\nm4_ifndef([_LT_COMPILER_BOILERPLATE],\t[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])\nm4_ifndef([_LT_LINKER_BOILERPLATE],\t[AC_DEFUN([_LT_LINKER_BOILERPLATE])])\nm4_ifndef([_AC_PROG_LIBTOOL],\t\t[AC_DEFUN([_AC_PROG_LIBTOOL])])\nm4_ifndef([AC_LIBTOOL_SETUP],\t\t[AC_DEFUN([AC_LIBTOOL_SETUP])])\nm4_ifndef([_LT_AC_CHECK_DLFCN],\t\t[AC_DEFUN([_LT_AC_CHECK_DLFCN])])\nm4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],\t[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])\nm4_ifndef([_LT_AC_TAGCONFIG],\t\t[AC_DEFUN([_LT_AC_TAGCONFIG])])\nm4_ifndef([AC_DISABLE_FAST_INSTALL],\t[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])\nm4_ifndef([_LT_AC_LANG_CXX],\t\t[AC_DEFUN([_LT_AC_LANG_CXX])])\nm4_ifndef([_LT_AC_LANG_F77],\t\t[AC_DEFUN([_LT_AC_LANG_F77])])\nm4_ifndef([_LT_AC_LANG_GCJ],\t\t[AC_DEFUN([_LT_AC_LANG_GCJ])])\nm4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])\nm4_ifndef([_LT_AC_LANG_C_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])\nm4_ifndef([_LT_AC_LANG_CXX_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])\nm4_ifndef([_LT_AC_LANG_F77_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])\nm4_ifndef([_LT_AC_LANG_GCJ_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])\nm4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],\t[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])\nm4_ifndef([_LT_AC_LANG_RC_CONFIG],\t[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])\nm4_ifndef([AC_LIBTOOL_CONFIG],\t\t[AC_DEFUN([AC_LIBTOOL_CONFIG])])\nm4_ifndef([_LT_AC_FILE_LTDLL_C],\t[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])\nm4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],\t[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])\nm4_ifndef([_LT_AC_PROG_CXXCPP],\t\t[AC_DEFUN([_LT_AC_PROG_CXXCPP])])\nm4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],\t[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])\nm4_ifndef([_LT_PROG_ECHO_BACKSLASH],\t[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])\nm4_ifndef([_LT_PROG_F77],\t\t[AC_DEFUN([_LT_PROG_F77])])\nm4_ifndef([_LT_PROG_FC],\t\t[AC_DEFUN([_LT_PROG_FC])])\nm4_ifndef([_LT_PROG_CXX],\t\t[AC_DEFUN([_LT_PROG_CXX])])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/mbedtls.m4",
    "content": "dnl Check to find the mbed TLS headers/libraries\n\nAC_DEFUN([ss_MBEDTLS],\n[\n\n  AC_ARG_WITH(mbedtls,\n    AS_HELP_STRING([--with-mbedtls=DIR], [mbed TLS base directory, or:]),\n    [mbedtls=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"]\n  )\n\n  AC_ARG_WITH(mbedtls-include,\n    AS_HELP_STRING([--with-mbedtls-include=DIR], [mbed TLS headers directory (without trailing /mbedtls)]),\n    [mbedtls_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"]\n  )\n\n  AC_ARG_WITH(mbedtls-lib,\n    AS_HELP_STRING([--with-mbedtls-lib=DIR], [mbed TLS library directory]),\n    [mbedtls_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"]\n  )\n\n  AC_CHECK_LIB(mbedcrypto, mbedtls_cipher_setup,\n    [LIBS=\"-lmbedcrypto $LIBS\"],\n    [AC_MSG_ERROR([mbed TLS libraries not found.])]\n  )\n\n  AC_MSG_CHECKING([whether mbedtls supports Cipher Feedback mode or not])\n  AC_COMPILE_IFELSE(\n    [AC_LANG_PROGRAM(\n      [[\n#include <mbedtls/config.h>\n      ]],\n      [[\n#ifndef MBEDTLS_CIPHER_MODE_CFB\n#error Cipher Feedback mode a.k.a CFB not supported by your mbed TLS.\n#endif\n      ]]\n    )],\n    [AC_MSG_RESULT([ok])],\n    [AC_MSG_ERROR([MBEDTLS_CIPHER_MODE_CFB required])]\n  )\n\n\n  AC_MSG_CHECKING([whether mbedtls supports the ARC4 stream cipher or not])\n  AC_COMPILE_IFELSE(\n    [AC_LANG_PROGRAM(\n      [[\n#include <mbedtls/config.h>\n      ]],\n      [[\n#ifndef MBEDTLS_ARC4_C\n#error the ARC4 stream cipher not supported by your mbed TLS.\n#endif\n      ]]\n    )],\n    [AC_MSG_RESULT([ok])],\n    [AC_MSG_ERROR([MBEDTLS_ARC4_C required])]\n  )\n\n  AC_MSG_CHECKING([whether mbedtls supports the Blowfish block cipher or not])\n  AC_COMPILE_IFELSE(\n    [AC_LANG_PROGRAM(\n      [[\n#include <mbedtls/config.h>\n      ]],\n      [[\n#ifndef MBEDTLS_BLOWFISH_C\n#error the Blowfish block cipher not supported by your mbed TLS.\n#endif\n      ]]\n    )],\n    [AC_MSG_RESULT([ok])],\n    [AC_MSG_ERROR([MBEDTLS_BLOWFISH_C required])]\n  )\n\n  AC_MSG_CHECKING([whether mbedtls supports the Camellia block cipher or not])\n  AC_COMPILE_IFELSE(\n    [AC_LANG_PROGRAM(\n      [[\n#include <mbedtls/config.h>\n      ]],\n      [[\n#ifndef MBEDTLS_CAMELLIA_C\n#error the Camellia block cipher not supported by your mbed TLS.\n#endif\n      ]]\n    )],\n    [AC_MSG_RESULT([ok])],\n    [AC_MSG_ERROR([MBEDTLS_CAMELLIA_C required])]\n  )\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/openssl.m4",
    "content": "dnl Check to find the OpenSSL headers/libraries\n\nAC_DEFUN([ss_OPENSSL],\n[\n  case $host_os in\n    *mingw*)\n    ;;\n    *)\n      AC_CHECK_FUNC(dlopen,\n        [],\n        [AC_CHECK_LIB(dl, dlopen,\n          [LIBS=\"$LIBS -ldl\"],\n          [AC_MSG_ERROR([OpenSSL depends on libdl.]); break]\n        )]\n      )\n    ;;\n  esac\n\n  AC_ARG_WITH(openssl,\n    AS_HELP_STRING([--with-openssl=DIR], [OpenSSL base directory, or:]),\n    [openssl=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"]\n  )\n\n  AC_ARG_WITH(openssl-include,\n    AS_HELP_STRING([--with-openssl-include=DIR], [OpenSSL headers directory (without trailing /openssl)]),\n    [openssl_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"]\n  )\n\n  AC_ARG_WITH(openssl-lib,\n    AS_HELP_STRING([--with-openssl-lib=DIR], [OpenSSL library directory]),\n    [openssl_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"]\n  )\n\n  AC_CHECK_HEADERS(openssl/evp.h openssl/rsa.h openssl/rand.h openssl/err.h openssl/sha.h openssl/pem.h openssl/engine.h,\n    [],\n    [AC_MSG_ERROR([OpenSSL header files not found.]); break]\n  )\n\n  AC_CHECK_LIB(crypto, EVP_EncryptInit_ex,\n    [LIBS=\"-lcrypto $LIBS\"],\n    [AC_MSG_ERROR([OpenSSL libraries not found.])]\n  )\n\n  AC_CHECK_FUNCS([RAND_pseudo_bytes EVP_EncryptInit_ex], ,\n    [AC_MSG_ERROR([Missing OpenSSL functionality, make sure you have installed the latest version.]); break],\n  )\n\n  AC_CHECK_DECL([OpenSSL_add_all_algorithms], ,\n    [AC_MSG_ERROR([Missing OpenSSL functionality, make sure you have installed the latest version.]); break],\n    [#include <openssl/evp.h>]\n  )\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/polarssl.m4",
    "content": "dnl Check to find the PolarSSL headers/libraries\n\nAC_DEFUN([ss_POLARSSL],\n[\n\n  AC_ARG_WITH(polarssl,\n    AS_HELP_STRING([--with-polarssl=DIR], [PolarSSL base directory, or:]),\n    [polarssl=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval/include\"\n     LDFLAGS=\"$LDFLAGS -L$withval/lib\"]\n  )\n\n  AC_ARG_WITH(polarssl-include,\n    AS_HELP_STRING([--with-polarssl-include=DIR], [PolarSSL headers directory (without trailing /polarssl)]),\n    [polarssl_include=\"$withval\"\n     CFLAGS=\"$CFLAGS -I$withval\"]\n  )\n\n  AC_ARG_WITH(polarssl-lib,\n    AS_HELP_STRING([--with-polarssl-lib=DIR], [PolarSSL library directory]),\n    [polarssl_lib=\"$withval\"\n     LDFLAGS=\"$LDFLAGS -L$withval\"]\n  )\n\n  AC_CHECK_LIB(polarssl, cipher_init_ctx,\n    [LIBS=\"-lpolarssl $LIBS\"],\n    [AC_MSG_ERROR([PolarSSL libraries not found.])]\n  )\n\n  AC_MSG_CHECKING([polarssl version])\n  AC_COMPILE_IFELSE(\n    [AC_LANG_PROGRAM(\n      [[\n#include <polarssl/version.h>\n      ]],\n      [[\n#if POLARSSL_VERSION_NUMBER < 0x01020500\n#error invalid version\n#endif\n      ]]\n    )],\n    [AC_MSG_RESULT([ok])],\n    [AC_MSG_ERROR([PolarSSL 1.2.5 or newer required])]\n  )\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/stack-protector.m4",
    "content": "#\n# Copyright 2007 Google Inc.\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# GGL_CHECK_STACK_PROTECTOR([ACTION-IF-OK], [ACTION-IF-NOT-OK])\n# Check if c compiler supports -fstack-protector and -fstack-protector-all\n# options.\n\nAC_DEFUN([GGL_CHECK_STACK_PROTECTOR], [\nggl_check_stack_protector_save_CXXFLAGS=\"$CXXFLAGS\"\nggl_check_stack_protector_save_CFLAGS=\"$CFLAGS\"\n\nAC_MSG_CHECKING([if -fstack-protector and -fstack-protector-all are supported.])\n\nCXXFLAGS=\"$CXXFLAGS -fstack-protector\"\nCFLAGS=\"$CFLAGS -fstack-protector\"\nAC_COMPILE_IFELSE([AC_LANG_SOURCE([\nint main() {\n  return 0;\n}\n])],\n[ggl_check_stack_protector_ok=yes],\n[ggl_check_stack_protector_ok=no])\n\nCXXFLAGS=\"$ggl_check_stack_protector_save_CXXFLAGS -fstack-protector-all\"\nCFLAGS=\"$ggl_check_stack_protector_save_CFLAGS -fstack-protector-all\"\nAC_COMPILE_IFELSE([AC_LANG_SOURCE([\nint main() {\n  return 0;\n}\n])],\n[ggl_check_stack_protector_all_ok=yes],\n[ggl_check_stack_protector_all_ok=no])\n\nif test \"x$ggl_check_stack_protector_ok\" = \"xyes\" -a \\\n        \"x$ggl_check_stack_protector_all_ok\" = \"xyes\"; then\n  AC_MSG_RESULT([yes])\n  ifelse([$1], , :, [$1])\nelse\n  AC_MSG_RESULT([no])\n  ifelse([$2], , :, [$2])\nfi\n\nCXXFLAGS=\"$ggl_check_stack_protector_save_CXXFLAGS\"\nCFLAGS=\"$ggl_check_stack_protector_save_CFLAGS\"\n\n]) # GGL_CHECK_STACK_PROTECTOR\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/m4/zlib.m4",
    "content": "dnl Check to find the zlib headers/libraries\n\nAC_DEFUN([ss_ZLIB],\n[\n  AC_ARG_ENABLE([zlib],\n    AS_HELP_STRING([--disable-zlib], [disable zlib compression support]))\n  AS_IF([test \"x$enable_zlib\" != \"xno\"], [\n  AC_DEFINE(HAVE_ZLIB, 1, [have zlib compression support])\n    AC_ARG_WITH(zlib,\n      AS_HELP_STRING([--with-zlib=DIR], [zlib base directory, or:]),\n      [zlib=\"$withval\"\n       CPPFLAGS=\"$CPPFLAGS -I$withval/include\"\n       LDFLAGS=\"$LDFLAGS -L$withval/lib\"]\n    )\n\n    AC_ARG_WITH(zlib-include,\n      AS_HELP_STRING([--with-zlib-include=DIR], [zlib headers directory]),\n      [zlib_include=\"$withval\"\n       CPPFLAGS=\"$CPPFLAGS -I$withval\"]\n    )\n\n    AC_ARG_WITH(zlib-lib,\n      AS_HELP_STRING([--with-zlib-lib=DIR], [zlib library directory]),\n      [zlib_lib=\"$withval\"\n       LDFLAGS=\"$LDFLAGS -L$withval\"]\n    )\n\n    AC_CHECK_HEADERS(zlib.h,\n      [],\n      [AC_MSG_ERROR(\"zlib header files not found.\"); break]\n    )\n\n    AC_CHECK_LIB(z, compress2,\n      [LIBS=\"$LIBS -lz\"],\n      [AC_MSG_ERROR(\"zlib libraries not found.\")]\n    )\n  ])\n])\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/openwrt/Makefile",
    "content": "include $(TOPDIR)/rules.mk\n\nPKG_NAME:=shadowsocks-libev\nPKG_VERSION:=2.4.8\nPKG_RELEASE=$(PKG_SOURCE_VERSION)\n\nPKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/archive\nPKG_SOURCE:=v$(PKG_VERSION).tar.gz\nPKG_MAINTAINER:=Max Lv <max.c.lv@gmail.com>\n\nPKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)\n\nPKG_INSTALL:=1\nPKG_FIXUP:=autoreconf\nPKG_USE_MIPS16:=0\nPKG_BUILD_PARALLEL:=1\n\ninclude $(INCLUDE_DIR)/package.mk\n\ndefine Package/shadowsocks-libev/Default\n  SECTION:=net\n  CATEGORY:=Network\n  TITLE:=Lightweight Secured Socks5 Proxy\n  URL:=https://github.com/madeye/shadowsocks-libev\nendef\n\ndefine Package/shadowsocks-libev\n  $(call Package/shadowsocks-libev/Default)\n  TITLE+= (OpenSSL)\n  VARIANT:=openssl\n  DEPENDS:=+libopenssl +libpthread\nendef\n\ndefine Package/shadowsocks-libev-polarssl\n  $(call Package/shadowsocks-libev/Default)\n  TITLE+= (PolarSSL)\n  VARIANT:=polarssl\n  DEPENDS:=+libpolarssl +libpthread\nendef\n\ndefine Package/shadowsocks-libev-mbedtls\n  $(call Package/shadowsocks-libev/Default)\n  TITLE+= (mbedTLS)\n  VARIANT:=mbedtls\n  DEPENDS:=+libmbedtls +libpthread\nendef\n\ndefine Package/shadowsocks-libev/description\nShadowsocks-libev is a lightweight secured socks5 proxy for embedded devices and low end boxes.\nendef\n\nPackage/shadowsocks-libev-polarssl/description=$(Package/shadowsocks-libev/description)\nPackage/shadowsocks-libev-mbedtls/description=$(Package/shadowsocks-libev/description)\n\ndefine Package/shadowsocks-libev/conffiles\n/etc/shadowsocks.json\nendef\n\nCONFIGURE_ARGS += --disable-documentation --disable-ssp\n\nifeq ($(BUILD_VARIANT),polarssl)\n\tCONFIGURE_ARGS += --with-crypto-library=polarssl\nendif\n\nifeq ($(BUILD_VARIANT),mbedtls)\n\tCONFIGURE_ARGS += --with-crypto-library=mbedtls\nendif\n\ndefine Package/shadowsocks-libev/install\n\t$(INSTALL_DIR) $(1)/etc/init.d\n\t$(INSTALL_CONF) ./files/shadowsocks.json $(1)/etc\n\t$(INSTALL_BIN) ./files/shadowsocks.init $(1)/etc/init.d/shadowsocks\n\t$(INSTALL_DIR) $(1)/usr/bin\n\t$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/ss-{local,redir,tunnel} $(1)/usr/bin\nendef\n\nPackage/shadowsocks-libev-polarssl/install=$(Package/shadowsocks-libev/install)\nPackage/shadowsocks-libev-mbedtls/install=$(Package/shadowsocks-libev/install)\n\n$(eval $(call BuildPackage,shadowsocks-libev))\n$(eval $(call BuildPackage,shadowsocks-libev-polarssl))\n$(eval $(call BuildPackage,shadowsocks-libev-mbedtls))\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/openwrt/files/shadowsocks.init",
    "content": "#!/bin/sh /etc/rc.common\n# Copyright (C) 2006-2011 OpenWrt.org\n\nSTART=95\n\nSERVICE_USE_PID=1\nSERVICE_WRITE_PID=1\nSERVICE_DAEMONIZE=1\n\nstart() {\n    service_start /usr/bin/ss-local -b 0.0.0.0 -c /etc/shadowsocks.json\n}\n\nstop() {\n    service_stop /usr/bin/ss-local\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/openwrt/files/shadowsocks.json",
    "content": "{\n    \"server\":\"127.0.0.1\",\n    \"server_port\":8388,\n    \"local_port\":1080,\n    \"password\":\"barfoo!\",\n    \"timeout\":60,\n    \"method\":null\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/rpm/SOURCES/etc/init.d/shadowsocks-libev",
    "content": "#!/bin/bash\n#\n# Script to run Shadowsocks in daemon mode at boot time.\n# ScriptAuthor: icyboy\n# Revision 1.0 - 14th Sep 2013\n#====================================================================\n# Run level information:\n# chkconfig: 2345 99 99\n# Description: lightweight secured socks5 proxy\n# processname: ss-server\n# Author: Max Lv <max.c.lv@gmail.com>;\n# Run \"/sbin/chkconfig --add shadowsocks\" to add the Run levels.\n#====================================================================\n\n#====================================================================\n# Paths and variables and system checks.\n\n# Source function library\n. /etc/rc.d/init.d/functions\n\n# Check that networking is up.\n#\n[ ${NETWORKING} =\"yes\" ] || exit 0\n\n# Daemon\nNAME=shadowsocks-server\nDAEMON=/usr/bin/ss-server\n\n# Path to the configuration file.\n#\nCONF=/etc/shadowsocks-libev/config.json\n\n#USER=\"nobody\"\n#GROUP=\"nobody\"\n\n# Take care of pidfile permissions\nmkdir /var/run/$NAME 2>/dev/null || true\n#chown \"$USER:$GROUP\" /var/run/$NAME\n\n# Check the configuration file exists.\n#\nif [ ! -f $CONF ] ; then\necho \"The configuration file cannot be found!\"\nexit 0\nfi\n\n# Path to the lock file.\n#\nLOCK_FILE=/var/lock/subsys/shadowsocks\n\n# Path to the pid file.\n#\nPID=/var/run/$NAME/pid\n\n\n#====================================================================\n\n#====================================================================\n# Run controls:\n\nRETVAL=0\n\n# Start shadowsocks as daemon.\n#\nstart() {\nif [ -f $LOCK_FILE ]; then\necho \"$NAME is already running!\"\nexit 0\nelse\necho -n $\"Starting ${NAME}: \"\n#daemon --check $DAEMON --user $USER \"$DAEMON -f $PID -c $CONF > /dev/null\"\ndaemon $DAEMON -u -c $CONF -f $PID\nfi\n\nRETVAL=$?\n[ $RETVAL -eq 0 ] && success\necho\n[ $RETVAL -eq 0 ] && touch $LOCK_FILE\nreturn $RETVAL\n}\n\n\n# Stop shadowsocks.\n#\nstop() {\necho -n $\"Shutting down ${NAME}: \"\nkillproc -p ${PID}\nRETVAL=$?\n[ $RETVAL -eq 0 ]\nrm -f $LOCK_FILE\nrm -f ${PID}\necho\nreturn $RETVAL\n}\n\n# See how we were called.\ncase \"$1\" in\nstart)\nstart\n;;\nstop)\nstop\n;;\nrestart)\nstop\nstart\n;;\ncondrestart)\nif [ -f $LOCK_FILE ]; then\nstop\nstart\nRETVAL=$?\nfi\n;;\nstatus)\nstatus $DAEMON\nRETVAL=$?\n;;\n*)\necho $\"Usage: $0 {start|stop|restart|condrestart|status}\"\nRETVAL=1\nesac\n\nexit $RETVAL\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/rpm/SPECS/shadowsocks-libev.spec",
    "content": "Name:\t\tshadowsocks-libev\nVersion:\t2.4.1\nRelease:\t1%{?dist}\nSummary:\tA lightweight and secure socks5 proxy\n\nGroup:\t\tApplications/Internet\nLicense:\tGPLv3+\nURL:\t\thttps://github.com/madeye/%{name}\nSource0:\t%{url}/archive/v%{version}.tar.gz\n\nBuildRequires:\topenssl-devel\nRequires:\topenssl\n\n%if 0%{?rhel} != 6\nRequires(post): systemd\nRequires(preun): systemd\nRequires(postun): systemd\nBuildRequires: systemd\n%endif\n\nConflicts:\tpython-shadowsocks python3-shadowsocks\n\nAutoReq:\tno\n\n%description\nshadowsocks-libev is a lightweight secured scoks5 proxy for embedded devices and low end boxes.\n\n\n%prep\n%setup -q\n\n\n%build\n%configure --enable-shared\nmake %{?_smp_mflags}\n\n\n%install\nmake install DESTDIR=%{buildroot}\nmkdir -p %{buildroot}/etc/shadowsocks-libev\n%if 0%{?rhel} == 6\nmkdir -p %{buildroot}%{_initddir}\ninstall -m 755 %{_builddir}/%{buildsubdir}/rpm/SOURCES/etc/init.d/shadowsocks-libev %{buildroot}%{_initddir}/shadowsocks-libev\n%else\nmkdir -p %{buildroot}%{_sysconfdir}/default\nmkdir -p %{buildroot}%{_unitdir}\ninstall -m 644 %{_builddir}/%{buildsubdir}/debian/shadowsocks-libev.default %{buildroot}%{_sysconfdir}/default/shadowsocks-libev\ninstall -m 644 %{_builddir}/%{buildsubdir}/debian/shadowsocks-libev.service %{buildroot}%{_unitdir}/shadowsocks-libev.service\n%endif\ninstall -m 644 %{_builddir}/%{buildsubdir}/debian/config.json %{buildroot}%{_sysconfdir}/shadowsocks-libev/config.json\n\n\n%post\n%if 0%{?rhel} == 6\n/sbin/chkconfig --add shadowsocks-libev\n%else\n%systemd_post shadowsocks-libev.service\n%endif\n\n%preun\n%if 0%{?rhel} == 6\nif [ $1 -eq 0 ]; then\n    /sbin/service shadowsocks-libev stop\n    /sbin/chkconfig --del shadowsocks-libev\nfi\n%else\n%systemd_preun shadowsocks-libev.service\n%endif\n\n%if 0%{?rhel} != 6\n%postun\n%systemd_postun_with_restart shadowsocks-libev.service\n%endif\n\n\n%files\n%{_bindir}/*\n%{_libdir}/*\n%config(noreplace) %{_sysconfdir}/shadowsocks-libev/config.json\n%doc %{_mandir}/*\n%if 0%{?rhel} == 6\n%{_initddir}/shadowsocks-libev\n%else\n%{_unitdir}/shadowsocks-libev.service\n%config(noreplace) %{_sysconfdir}/default/shadowsocks-libev\n%endif\n\n%package devel\nSummary:    Development files for shadowsocks-libev\nLicense:    GPLv3+\n\n%description devel\nDevelopment files for shadowsocks-libev\n\n%files devel\n%{_includedir}/*\n\n%changelog\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/rpm/genrpm.sh",
    "content": "#!/usr/bin/env bash\nset -e\n\nshow_help()\n{\n    echo -e \"`basename $0`  [option] [argument]\"\n    echo\n    echo -e \"Options:\"\n    echo -e \"  -h    show this help.\"\n    echo -e \"  -v    with argument version (2.4.1 by default).\"\n    echo -e \"  -f    with argument format (tar.xz by default) used by git archive.\"\n    echo\n    echo -e \"Examples:\"\n    echo -e \"  to build base on version \\`2.4.1' with format \\`tar.xz', run:\"\n    echo -e \"    `basename $0` -f tar.xz -v 2.4.1\"\n}\n\nwhile getopts \"hv:f:\" opt\ndo\n    case ${opt} in\n        h)\n            show_help\n            exit 0\n            ;;\n        v)\n            if [ \"${OPTARG}\" = v* ]; then\n                version=${OPTARG#\"v\"}\n            else\n                version=${OPTARG}\n            fi\n            ;;\n        f)\n            format=${OPTARG}\n            ;;\n        *)\n            exit 1\n            ;;\n    esac\ndone\n\nget_att_val()\n{\n    att=$1\n    val=$2\n\n    if [ -z $(eval echo \\$$att) ]; then\n        eval $att=$val\n    fi\n}\n\nget_att_val version \"2.4.5\"\nget_att_val format \"tar.gz\"\n\nname=\"shadowsocks-libev\"\nspec_name=\"shadowsocks-libev.spec\"\n\npushd `git rev-parse --show-toplevel`\ngit archive v${version} --format=${format} --prefix=${name}-${version}/ -o rpm/SOURCES/${name}-${version}.${format}\npushd rpm\n\nsed -i -e \"s/^\\(Version:\t\\).*$/\\1${version}/\" \\\n       -e \"s/^\\(Source0:\t\\).*$/\\1${name}-${version}.${format}/\" \\\n    SPECS/${spec_name}\n\nrpmbuild -bb SPECS/${spec_name} --define \"%_topdir `pwd`\"\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/shadowsocks-libev.pc.in",
    "content": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\n\nName: shadowsocks-libev\nDescription: a lightweight secured socks5 proxy\nURL: http://shadowsocks.org\nVersion: @VERSION@\nRequires:\nCflags: -I${includedir}\nLibs: -L${libdir} -lshadowsocks-libev -lcrypto\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/Makefile.am",
    "content": "VERSION_INFO = 1:0:0\n\nAM_CFLAGS = -g -O2 -Wall -Werror -Wno-deprecated-declarations -fno-strict-aliasing -std=gnu99 -D_GNU_SOURCE\nAM_CFLAGS += $(PTHREAD_CFLAGS)\nif !USE_SYSTEM_SHARED_LIB\nAM_CFLAGS += -I$(top_srcdir)/libev\nAM_CFLAGS += -I$(top_srcdir)/libudns\nAM_CFLAGS += -I$(top_srcdir)/libsodium/src/libsodium/include\nendif\nAM_CFLAGS += -I$(top_srcdir)/libipset/include\nAM_CFLAGS += -I$(top_srcdir)/libcork/include\n\nSS_COMMON_LIBS = $(top_builddir)/libipset/libipset.la \\\n                 $(top_builddir)/libcork/libcork.la \\\n                 $(INET_NTOP_LIB)\nif USE_SYSTEM_SHARED_LIB\nSS_COMMON_LIBS += -lev -lsodium -lm\nelse\nSS_COMMON_LIBS += $(top_builddir)/libev/libev.la \\\n                  $(top_builddir)/libsodium/src/libsodium/libsodium.la\nendif\n\nbin_PROGRAMS = ss-local ss-tunnel\nif !BUILD_WINCOMPAT\nbin_PROGRAMS += ss-server ss-manager\nendif\n\nss_local_SOURCES = utils.c \\\n                   jconf.c \\\n                   json.c \\\n                   encrypt.c \\\n                   udprelay.c \\\n                   cache.c \\\n                   acl.c \\\n                   netutils.c \\\n                   local.c\n\nss_tunnel_SOURCES = utils.c \\\n                    jconf.c \\\n                    json.c \\\n                    encrypt.c \\\n                    udprelay.c \\\n                    cache.c \\\n                    netutils.c \\\n                    tunnel.c\n\nss_server_SOURCES = utils.c \\\n                    netutils.c \\\n                    jconf.c \\\n                    json.c \\\n                    encrypt.c \\\n                    udprelay.c \\\n                    cache.c \\\n                    acl.c \\\n                    resolv.c \\\n                    server.c\n\nss_manager_SOURCES = utils.c \\\n                     jconf.c \\\n                     json.c \\\n                     manager.c\n\nss_local_LDADD = $(SS_COMMON_LIBS)\nss_tunnel_LDADD = $(SS_COMMON_LIBS)\nss_server_LDADD = $(SS_COMMON_LIBS)\nss_manager_LDADD = $(SS_COMMON_LIBS)\nif USE_SYSTEM_SHARED_LIB\nss_local_LDADD += -ludns\nss_tunnel_LDADD += -ludns\nss_server_LDADD += -ludns\nelse\nss_local_LDADD += $(top_builddir)/libudns/libudns.la\nss_tunnel_LDADD += $(top_builddir)/libudns/libudns.la\nss_server_LDADD += $(top_builddir)/libudns/libudns.la\nendif\n\nss_local_CFLAGS = $(AM_CFLAGS) -DMODULE_LOCAL\nss_tunnel_CFLAGS = $(AM_CFLAGS) -DMODULE_TUNNEL\nss_server_CFLAGS = $(AM_CFLAGS) -DMODULE_REMOTE\nss_manager_CFLAGS = $(AM_CFLAGS) -DMODULE_MANAGER\n\nif BUILD_WINCOMPAT\nss_local_SOURCES += win32.c\nss_tunnel_SOURCES += win32.c\nendif\n\nif BUILD_REDIRECTOR\nbin_SCRIPTS = ss-nat\nbin_PROGRAMS += ss-redir\nss_redir_SOURCES = utils.c \\\n                   jconf.c \\\n                   json.c \\\n                   encrypt.c \\\n                   netutils.c \\\n                   cache.c \\\n                   udprelay.c \\\n                   redir.c\nss_redir_CFLAGS = $(AM_CFLAGS) -DMODULE_REDIR\nss_redir_LDADD = $(SS_COMMON_LIBS)\nif USE_SYSTEM_SHARED_LIB\nss_redir_LDADD += -ludns\nelse\nss_redir_LDADD += $(top_builddir)/libudns/libudns.la\nendif\nendif\n\nlib_LTLIBRARIES = libshadowsocks-libev.la\nlibshadowsocks_libev_la_SOURCES = $(ss_local_SOURCES)\nlibshadowsocks_libev_la_CFLAGS = $(ss_local_CFLAGS) -DLIB_ONLY\nlibshadowsocks_libev_la_LDFLAGS = -version-info $(VERSION_INFO)\nlibshadowsocks_libev_la_LIBADD = $(ss_local_LDADD)\ninclude_HEADERS = shadowsocks.h\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/Makefile.in",
    "content": "# Makefile.in generated by automake 1.14.1 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2013 Free Software Foundation, Inc.\n\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\n\n\nVPATH = @srcdir@\nam__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'\nam__make_running_with_option = \\\n  case $${target_option-} in \\\n      ?) ;; \\\n      *) echo \"am__make_running_with_option: internal error: invalid\" \\\n              \"target option '$${target_option-}' specified\" >&2; \\\n         exit 1;; \\\n  esac; \\\n  has_opt=no; \\\n  sane_makeflags=$$MAKEFLAGS; \\\n  if $(am__is_gnu_make); then \\\n    sane_makeflags=$$MFLAGS; \\\n  else \\\n    case $$MAKEFLAGS in \\\n      *\\\\[\\ \\\t]*) \\\n        bs=\\\\; \\\n        sane_makeflags=`printf '%s\\n' \"$$MAKEFLAGS\" \\\n          | sed \"s/$$bs$$bs[$$bs $$bs\t]*//g\"`;; \\\n    esac; \\\n  fi; \\\n  skip_next=no; \\\n  strip_trailopt () \\\n  { \\\n    flg=`printf '%s\\n' \"$$flg\" | sed \"s/$$1.*$$//\"`; \\\n  }; \\\n  for flg in $$sane_makeflags; do \\\n    test $$skip_next = yes && { skip_next=no; continue; }; \\\n    case $$flg in \\\n      *=*|--*) continue;; \\\n        -*I) strip_trailopt 'I'; skip_next=yes;; \\\n      -*I?*) strip_trailopt 'I';; \\\n        -*O) strip_trailopt 'O'; skip_next=yes;; \\\n      -*O?*) strip_trailopt 'O';; \\\n        -*l) strip_trailopt 'l'; skip_next=yes;; \\\n      -*l?*) strip_trailopt 'l';; \\\n      -[dEDm]) skip_next=yes;; \\\n      -[JT]) skip_next=yes;; \\\n    esac; \\\n    case $$flg in \\\n      *$$target_option*) has_opt=yes; break;; \\\n    esac; \\\n  done; \\\n  test $$has_opt = yes\nam__make_dryrun = (target_option=n; $(am__make_running_with_option))\nam__make_keepgoing = (target_option=k; $(am__make_running_with_option))\npkgdatadir = $(datadir)/@PACKAGE@\npkgincludedir = $(includedir)/@PACKAGE@\npkglibdir = $(libdir)/@PACKAGE@\npkglibexecdir = $(libexecdir)/@PACKAGE@\nam__cd = CDPATH=\"$${ZSH_VERSION+.}$(PATH_SEPARATOR)\" && cd\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@\n@USE_SYSTEM_SHARED_LIB_FALSE@am__append_1 = -I$(top_srcdir)/libev \\\n@USE_SYSTEM_SHARED_LIB_FALSE@\t-I$(top_srcdir)/libudns \\\n@USE_SYSTEM_SHARED_LIB_FALSE@\t-I$(top_srcdir)/libsodium/src/libsodium/include\n@USE_SYSTEM_SHARED_LIB_TRUE@am__append_2 = -lev -lsodium -lm\n@USE_SYSTEM_SHARED_LIB_FALSE@am__append_3 = $(top_builddir)/libev/libev.la \\\n@USE_SYSTEM_SHARED_LIB_FALSE@                  $(top_builddir)/libsodium/src/libsodium/libsodium.la\n\nbin_PROGRAMS = ss-local$(EXEEXT) ss-tunnel$(EXEEXT) $(am__EXEEXT_1) \\\n\t$(am__EXEEXT_2)\n@BUILD_WINCOMPAT_FALSE@am__append_4 = ss-server ss-manager\n@USE_SYSTEM_SHARED_LIB_TRUE@am__append_5 = -ludns\n@USE_SYSTEM_SHARED_LIB_TRUE@am__append_6 = -ludns\n@USE_SYSTEM_SHARED_LIB_TRUE@am__append_7 = -ludns\n@USE_SYSTEM_SHARED_LIB_FALSE@am__append_8 = $(top_builddir)/libudns/libudns.la\n@USE_SYSTEM_SHARED_LIB_FALSE@am__append_9 = $(top_builddir)/libudns/libudns.la\n@USE_SYSTEM_SHARED_LIB_FALSE@am__append_10 = $(top_builddir)/libudns/libudns.la\n@BUILD_WINCOMPAT_TRUE@am__append_11 = win32.c\n@BUILD_WINCOMPAT_TRUE@am__append_12 = win32.c\n@BUILD_REDIRECTOR_TRUE@am__append_13 = ss-redir\n@BUILD_REDIRECTOR_TRUE@@USE_SYSTEM_SHARED_LIB_TRUE@am__append_14 = -ludns\n@BUILD_REDIRECTOR_TRUE@@USE_SYSTEM_SHARED_LIB_FALSE@am__append_15 = $(top_builddir)/libudns/libudns.la\nsubdir = src\nDIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \\\n\t$(top_srcdir)/auto/depcomp $(include_HEADERS)\nACLOCAL_M4 = $(top_srcdir)/aclocal.m4\nam__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \\\n\t$(top_srcdir)/m4/ax_tls.m4 $(top_srcdir)/m4/inet_ntop.m4 \\\n\t$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \\\n\t$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \\\n\t$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/mbedtls.m4 \\\n\t$(top_srcdir)/m4/openssl.m4 $(top_srcdir)/m4/polarssl.m4 \\\n\t$(top_srcdir)/m4/stack-protector.m4 $(top_srcdir)/m4/zlib.m4 \\\n\t$(top_srcdir)/libev/libev.m4 $(top_srcdir)/configure.ac\nam__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \\\n\t$(ACLOCAL_M4)\nmkinstalldirs = $(install_sh) -d\nCONFIG_HEADER = $(top_builddir)/config.h\nCONFIG_CLEAN_FILES =\nCONFIG_CLEAN_VPATH_FILES =\nam__vpath_adj_setup = srcdirstrip=`echo \"$(srcdir)\" | sed 's|.|.|g'`;\nam__vpath_adj = case $$p in \\\n    $(srcdir)/*) f=`echo \"$$p\" | sed \"s|^$$srcdirstrip/||\"`;; \\\n    *) f=$$p;; \\\n  esac;\nam__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;\nam__install_max = 40\nam__nobase_strip_setup = \\\n  srcdirstrip=`echo \"$(srcdir)\" | sed 's/[].[^$$\\\\*|]/\\\\\\\\&/g'`\nam__nobase_strip = \\\n  for p in $$list; do echo \"$$p\"; done | sed -e \"s|$$srcdirstrip/||\"\nam__nobase_list = $(am__nobase_strip_setup); \\\n  for p in $$list; do echo \"$$p $$p\"; done | \\\n  sed \"s| $$srcdirstrip/| |;\"' / .*\\//!s/ .*/ ./; s,\\( .*\\)/[^/]*$$,\\1,' | \\\n  $(AWK) 'BEGIN { files[\".\"] = \"\" } { files[$$2] = files[$$2] \" \" $$1; \\\n    if (++n[$$2] == $(am__install_max)) \\\n      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = \"\" } } \\\n    END { for (dir in files) print dir, files[dir] }'\nam__base_list = \\\n  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\\n/ /g' | \\\n  sed '$$!N;$$!N;$$!N;$$!N;s/\\n/ /g'\nam__uninstall_files_from_dir = { \\\n  test -z \"$$files\" \\\n    || { test ! -d \"$$dir\" && test ! -f \"$$dir\" && test ! -r \"$$dir\"; } \\\n    || { echo \" ( cd '$$dir' && rm -f\" $$files \")\"; \\\n         $(am__cd) \"$$dir\" && rm -f $$files; }; \\\n  }\nam__installdirs = \"$(DESTDIR)$(libdir)\" \"$(DESTDIR)$(bindir)\" \\\n\t\"$(DESTDIR)$(bindir)\" \"$(DESTDIR)$(includedir)\"\nLTLIBRARIES = $(lib_LTLIBRARIES)\nam__DEPENDENCIES_1 =\nam__DEPENDENCIES_2 = $(top_builddir)/libipset/libipset.la \\\n\t$(top_builddir)/libcork/libcork.la $(am__DEPENDENCIES_1) \\\n\t$(am__DEPENDENCIES_1) $(am__append_3)\nam__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \\\n\t$(am__append_8)\nlibshadowsocks_libev_la_DEPENDENCIES = $(am__DEPENDENCIES_3)\nam__libshadowsocks_libev_la_SOURCES_DIST = utils.c jconf.c json.c \\\n\tencrypt.c udprelay.c cache.c acl.c netutils.c local.c win32.c\n@BUILD_WINCOMPAT_TRUE@am__objects_1 =  \\\n@BUILD_WINCOMPAT_TRUE@\tlibshadowsocks_libev_la-win32.lo\nam__objects_2 = libshadowsocks_libev_la-utils.lo \\\n\tlibshadowsocks_libev_la-jconf.lo \\\n\tlibshadowsocks_libev_la-json.lo \\\n\tlibshadowsocks_libev_la-encrypt.lo \\\n\tlibshadowsocks_libev_la-udprelay.lo \\\n\tlibshadowsocks_libev_la-cache.lo \\\n\tlibshadowsocks_libev_la-acl.lo \\\n\tlibshadowsocks_libev_la-netutils.lo \\\n\tlibshadowsocks_libev_la-local.lo $(am__objects_1)\nam_libshadowsocks_libev_la_OBJECTS = $(am__objects_2)\nlibshadowsocks_libev_la_OBJECTS =  \\\n\t$(am_libshadowsocks_libev_la_OBJECTS)\nAM_V_lt = $(am__v_lt_@AM_V@)\nam__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)\nam__v_lt_0 = --silent\nam__v_lt_1 = \nlibshadowsocks_libev_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \\\n\t$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \\\n\t$(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) \\\n\t$(libshadowsocks_libev_la_LDFLAGS) $(LDFLAGS) -o $@\n@BUILD_WINCOMPAT_FALSE@am__EXEEXT_1 = ss-server$(EXEEXT) \\\n@BUILD_WINCOMPAT_FALSE@\tss-manager$(EXEEXT)\n@BUILD_REDIRECTOR_TRUE@am__EXEEXT_2 = ss-redir$(EXEEXT)\nPROGRAMS = $(bin_PROGRAMS)\nam__ss_local_SOURCES_DIST = utils.c jconf.c json.c encrypt.c \\\n\tudprelay.c cache.c acl.c netutils.c local.c win32.c\n@BUILD_WINCOMPAT_TRUE@am__objects_3 = ss_local-win32.$(OBJEXT)\nam_ss_local_OBJECTS = ss_local-utils.$(OBJEXT) \\\n\tss_local-jconf.$(OBJEXT) ss_local-json.$(OBJEXT) \\\n\tss_local-encrypt.$(OBJEXT) ss_local-udprelay.$(OBJEXT) \\\n\tss_local-cache.$(OBJEXT) ss_local-acl.$(OBJEXT) \\\n\tss_local-netutils.$(OBJEXT) ss_local-local.$(OBJEXT) \\\n\t$(am__objects_3)\nss_local_OBJECTS = $(am_ss_local_OBJECTS)\nss_local_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \\\n\t$(am__append_8)\nss_local_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_local_CFLAGS) \\\n\t$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nam_ss_manager_OBJECTS = ss_manager-utils.$(OBJEXT) \\\n\tss_manager-jconf.$(OBJEXT) ss_manager-json.$(OBJEXT) \\\n\tss_manager-manager.$(OBJEXT)\nss_manager_OBJECTS = $(am_ss_manager_OBJECTS)\nss_manager_DEPENDENCIES = $(am__DEPENDENCIES_2)\nss_manager_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_manager_CFLAGS) \\\n\t$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nam__ss_redir_SOURCES_DIST = utils.c jconf.c json.c encrypt.c \\\n\tnetutils.c cache.c udprelay.c redir.c\n@BUILD_REDIRECTOR_TRUE@am_ss_redir_OBJECTS = ss_redir-utils.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-jconf.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-json.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-encrypt.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-netutils.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-cache.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-udprelay.$(OBJEXT) \\\n@BUILD_REDIRECTOR_TRUE@\tss_redir-redir.$(OBJEXT)\nss_redir_OBJECTS = $(am_ss_redir_OBJECTS)\n@BUILD_REDIRECTOR_TRUE@ss_redir_DEPENDENCIES = $(am__DEPENDENCIES_2) \\\n@BUILD_REDIRECTOR_TRUE@\t$(am__DEPENDENCIES_1) $(am__append_15)\nss_redir_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_redir_CFLAGS) \\\n\t$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nam_ss_server_OBJECTS = ss_server-utils.$(OBJEXT) \\\n\tss_server-netutils.$(OBJEXT) ss_server-jconf.$(OBJEXT) \\\n\tss_server-json.$(OBJEXT) ss_server-encrypt.$(OBJEXT) \\\n\tss_server-udprelay.$(OBJEXT) ss_server-cache.$(OBJEXT) \\\n\tss_server-acl.$(OBJEXT) ss_server-resolv.$(OBJEXT) \\\n\tss_server-server.$(OBJEXT)\nss_server_OBJECTS = $(am_ss_server_OBJECTS)\nss_server_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \\\n\t$(am__append_10)\nss_server_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_server_CFLAGS) \\\n\t$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nam__ss_tunnel_SOURCES_DIST = utils.c jconf.c json.c encrypt.c \\\n\tudprelay.c cache.c netutils.c tunnel.c win32.c\n@BUILD_WINCOMPAT_TRUE@am__objects_4 = ss_tunnel-win32.$(OBJEXT)\nam_ss_tunnel_OBJECTS = ss_tunnel-utils.$(OBJEXT) \\\n\tss_tunnel-jconf.$(OBJEXT) ss_tunnel-json.$(OBJEXT) \\\n\tss_tunnel-encrypt.$(OBJEXT) ss_tunnel-udprelay.$(OBJEXT) \\\n\tss_tunnel-cache.$(OBJEXT) ss_tunnel-netutils.$(OBJEXT) \\\n\tss_tunnel-tunnel.$(OBJEXT) $(am__objects_4)\nss_tunnel_OBJECTS = $(am_ss_tunnel_OBJECTS)\nss_tunnel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \\\n\t$(am__append_9)\nss_tunnel_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ss_tunnel_CFLAGS) \\\n\t$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@\nSCRIPTS = $(bin_SCRIPTS)\nAM_V_P = $(am__v_P_@AM_V@)\nam__v_P_ = $(am__v_P_@AM_DEFAULT_V@)\nam__v_P_0 = false\nam__v_P_1 = :\nAM_V_GEN = $(am__v_GEN_@AM_V@)\nam__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)\nam__v_GEN_0 = @echo \"  GEN     \" $@;\nam__v_GEN_1 = \nAM_V_at = $(am__v_at_@AM_V@)\nam__v_at_ = $(am__v_at_@AM_DEFAULT_V@)\nam__v_at_0 = @\nam__v_at_1 = \nDEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)\ndepcomp = $(SHELL) $(top_srcdir)/auto/depcomp\nam__depfiles_maybe = depfiles\nam__mv = mv -f\nCOMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \\\n\t$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)\nLTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \\\n\t$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \\\n\t$(AM_CFLAGS) $(CFLAGS)\nAM_V_CC = $(am__v_CC_@AM_V@)\nam__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)\nam__v_CC_0 = @echo \"  CC      \" $@;\nam__v_CC_1 = \nCCLD = $(CC)\nLINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \\\n\t$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \\\n\t$(AM_LDFLAGS) $(LDFLAGS) -o $@\nAM_V_CCLD = $(am__v_CCLD_@AM_V@)\nam__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)\nam__v_CCLD_0 = @echo \"  CCLD    \" $@;\nam__v_CCLD_1 = \nSOURCES = $(libshadowsocks_libev_la_SOURCES) $(ss_local_SOURCES) \\\n\t$(ss_manager_SOURCES) $(ss_redir_SOURCES) $(ss_server_SOURCES) \\\n\t$(ss_tunnel_SOURCES)\nDIST_SOURCES = $(am__libshadowsocks_libev_la_SOURCES_DIST) \\\n\t$(am__ss_local_SOURCES_DIST) $(ss_manager_SOURCES) \\\n\t$(am__ss_redir_SOURCES_DIST) $(ss_server_SOURCES) \\\n\t$(am__ss_tunnel_SOURCES_DIST)\nam__can_run_installinfo = \\\n  case $$AM_UPDATE_INFO_DIR in \\\n    n|no|NO) false;; \\\n    *) (install-info --version) >/dev/null 2>&1;; \\\n  esac\nHEADERS = $(include_HEADERS)\nam__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)\n# Read a list of newline-separated strings from the standard input,\n# and print each of them once, without duplicates.  Input order is\n# *not* preserved.\nam__uniquify_input = $(AWK) '\\\n  BEGIN { nonempty = 0; } \\\n  { items[$$0] = 1; nonempty = 1; } \\\n  END { if (nonempty) { for (i in items) print i; }; } \\\n'\n# Make sure the list of sources is unique.  This is necessary because,\n# e.g., the same source file might be shared among _SOURCES variables\n# for different programs/libraries.\nam__define_uniq_tagged_files = \\\n  list='$(am__tagged_files)'; \\\n  unique=`for i in $$list; do \\\n    if test -f \"$$i\"; then echo $$i; else echo $(srcdir)/$$i; fi; \\\n  done | $(am__uniquify_input)`\nETAGS = etags\nCTAGS = ctags\nDISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)\nACLOCAL = @ACLOCAL@\nAMTAR = @AMTAR@\nAM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@\nAR = @AR@\nASCIIDOC = @ASCIIDOC@\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@\nDLLTOOL = @DLLTOOL@\nDSYMUTIL = @DSYMUTIL@\nDUMPBIN = @DUMPBIN@\nECHO_C = @ECHO_C@\nECHO_N = @ECHO_N@\nECHO_T = @ECHO_T@\nEGREP = @EGREP@\nEXEEXT = @EXEEXT@\nFGREP = @FGREP@\nGREP = @GREP@\nGZIP = @GZIP@\nINET_NTOP_LIB = @INET_NTOP_LIB@\nINSTALL = @INSTALL@\nINSTALL_DATA = @INSTALL_DATA@\nINSTALL_PROGRAM = @INSTALL_PROGRAM@\nINSTALL_SCRIPT = @INSTALL_SCRIPT@\nINSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@\nLD = @LD@\nLDFLAGS = @LDFLAGS@\nLIBOBJS = @LIBOBJS@\nLIBS = @LIBS@\nLIBTOOL = @LIBTOOL@\nLIPO = @LIPO@\nLN_S = @LN_S@\nLTLIBOBJS = @LTLIBOBJS@\nMAINT = @MAINT@\nMAKEINFO = @MAKEINFO@\nMANIFEST_TOOL = @MANIFEST_TOOL@\nMKDIR_P = @MKDIR_P@\nMV = @MV@\nNM = @NM@\nNMEDIT = @NMEDIT@\nOBJDUMP = @OBJDUMP@\nOBJEXT = @OBJEXT@\nOTOOL = @OTOOL@\nOTOOL64 = @OTOOL64@\nPACKAGE = @PACKAGE@\nPACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@\nPACKAGE_NAME = @PACKAGE_NAME@\nPACKAGE_STRING = @PACKAGE_STRING@\nPACKAGE_TARNAME = @PACKAGE_TARNAME@\nPACKAGE_URL = @PACKAGE_URL@\nPACKAGE_VERSION = @PACKAGE_VERSION@\nPATH_SEPARATOR = @PATH_SEPARATOR@\nPTHREAD_CC = @PTHREAD_CC@\nPTHREAD_CFLAGS = @PTHREAD_CFLAGS@\nPTHREAD_LIBS = @PTHREAD_LIBS@\nRANLIB = @RANLIB@\nRM = @RM@\nSED = @SED@\nSET_MAKE = @SET_MAKE@\nSHELL = @SHELL@\nSTRIP = @STRIP@\nVERSION = @VERSION@\nXMLTO = @XMLTO@\nabs_builddir = @abs_builddir@\nabs_srcdir = @abs_srcdir@\nabs_top_builddir = @abs_top_builddir@\nabs_top_srcdir = @abs_top_srcdir@\nac_ct_AR = @ac_ct_AR@\nac_ct_CC = @ac_ct_CC@\nac_ct_DUMPBIN = @ac_ct_DUMPBIN@\nam__include = @am__include@\nam__leading_dot = @am__leading_dot@\nam__quote = @am__quote@\nam__tar = @am__tar@\nam__untar = @am__untar@\nax_pthread_config = @ax_pthread_config@\nbindir = @bindir@\nbuild = @build@\nbuild_alias = @build_alias@\nbuild_cpu = @build_cpu@\nbuild_os = @build_os@\nbuild_vendor = @build_vendor@\nbuilddir = @builddir@\ndatadir = @datadir@\ndatarootdir = @datarootdir@\ndocdir = @docdir@\ndvidir = @dvidir@\nexec_prefix = @exec_prefix@\nhost = @host@\nhost_alias = @host_alias@\nhost_cpu = @host_cpu@\nhost_os = @host_os@\nhost_vendor = @host_vendor@\nhtmldir = @htmldir@\nincludedir = @includedir@\ninfodir = @infodir@\ninstall_sh = @install_sh@\nlibdir = @libdir@\nlibexecdir = @libexecdir@\nlocaledir = @localedir@\nlocalstatedir = @localstatedir@\nmandir = @mandir@\nmkdir_p = @mkdir_p@\noldincludedir = @oldincludedir@\npdfdir = @pdfdir@\nprefix = @prefix@\nprogram_transform_name = @program_transform_name@\npsdir = @psdir@\nsbindir = @sbindir@\nsharedstatedir = @sharedstatedir@\nsrcdir = @srcdir@\nsubdirs = @subdirs@\nsysconfdir = @sysconfdir@\ntarget_alias = @target_alias@\ntop_build_prefix = @top_build_prefix@\ntop_builddir = @top_builddir@\ntop_srcdir = @top_srcdir@\nVERSION_INFO = 1:0:0\nAM_CFLAGS = -g -O2 -Wall -Werror -Wno-deprecated-declarations \\\n\t-fno-strict-aliasing -std=gnu99 -D_GNU_SOURCE \\\n\t$(PTHREAD_CFLAGS) $(am__append_1) \\\n\t-I$(top_srcdir)/libipset/include \\\n\t-I$(top_srcdir)/libcork/include\nSS_COMMON_LIBS = $(top_builddir)/libipset/libipset.la \\\n\t$(top_builddir)/libcork/libcork.la $(INET_NTOP_LIB) \\\n\t$(am__append_2) $(am__append_3)\nss_local_SOURCES = utils.c jconf.c json.c encrypt.c udprelay.c cache.c \\\n\tacl.c netutils.c local.c $(am__append_11)\nss_tunnel_SOURCES = utils.c jconf.c json.c encrypt.c udprelay.c \\\n\tcache.c netutils.c tunnel.c $(am__append_12)\nss_server_SOURCES = utils.c \\\n                    netutils.c \\\n                    jconf.c \\\n                    json.c \\\n                    encrypt.c \\\n                    udprelay.c \\\n                    cache.c \\\n                    acl.c \\\n                    resolv.c \\\n                    server.c\n\nss_manager_SOURCES = utils.c \\\n                     jconf.c \\\n                     json.c \\\n                     manager.c\n\nss_local_LDADD = $(SS_COMMON_LIBS) $(am__append_5) $(am__append_8)\nss_tunnel_LDADD = $(SS_COMMON_LIBS) $(am__append_6) $(am__append_9)\nss_server_LDADD = $(SS_COMMON_LIBS) $(am__append_7) $(am__append_10)\nss_manager_LDADD = $(SS_COMMON_LIBS)\nss_local_CFLAGS = $(AM_CFLAGS) -DMODULE_LOCAL\nss_tunnel_CFLAGS = $(AM_CFLAGS) -DMODULE_TUNNEL\nss_server_CFLAGS = $(AM_CFLAGS) -DMODULE_REMOTE\nss_manager_CFLAGS = $(AM_CFLAGS) -DMODULE_MANAGER\n@BUILD_REDIRECTOR_TRUE@bin_SCRIPTS = ss-nat\n@BUILD_REDIRECTOR_TRUE@ss_redir_SOURCES = utils.c \\\n@BUILD_REDIRECTOR_TRUE@                   jconf.c \\\n@BUILD_REDIRECTOR_TRUE@                   json.c \\\n@BUILD_REDIRECTOR_TRUE@                   encrypt.c \\\n@BUILD_REDIRECTOR_TRUE@                   netutils.c \\\n@BUILD_REDIRECTOR_TRUE@                   cache.c \\\n@BUILD_REDIRECTOR_TRUE@                   udprelay.c \\\n@BUILD_REDIRECTOR_TRUE@                   redir.c\n\n@BUILD_REDIRECTOR_TRUE@ss_redir_CFLAGS = $(AM_CFLAGS) -DMODULE_REDIR\n@BUILD_REDIRECTOR_TRUE@ss_redir_LDADD = $(SS_COMMON_LIBS) \\\n@BUILD_REDIRECTOR_TRUE@\t$(am__append_14) $(am__append_15)\nlib_LTLIBRARIES = libshadowsocks-libev.la\nlibshadowsocks_libev_la_SOURCES = $(ss_local_SOURCES)\nlibshadowsocks_libev_la_CFLAGS = $(ss_local_CFLAGS) -DLIB_ONLY\nlibshadowsocks_libev_la_LDFLAGS = -version-info $(VERSION_INFO)\nlibshadowsocks_libev_la_LIBADD = $(ss_local_LDADD)\ninclude_HEADERS = shadowsocks.h\nall: all-am\n\n.SUFFIXES:\n.SUFFIXES: .c .lo .o .obj\n$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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        && { if test -f $@; then exit 0; else break; fi; }; \\\n\t      exit 1;; \\\n\t  esac; \\\n\tdone; \\\n\techo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \\\n\t$(am__cd) $(top_srcdir) && \\\n\t  $(AUTOMAKE) --foreign src/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)\n\tcd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh\n$(am__aclocal_m4_deps):\n\ninstall-libLTLIBRARIES: $(lib_LTLIBRARIES)\n\t@$(NORMAL_INSTALL)\n\t@list='$(lib_LTLIBRARIES)'; test -n \"$(libdir)\" || list=; \\\n\tlist2=; for p in $$list; do \\\n\t  if test -f $$p; then \\\n\t    list2=\"$$list2 $$p\"; \\\n\t  else :; fi; \\\n\tdone; \\\n\ttest -z \"$$list2\" || { \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(libdir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(libdir)\" || exit 1; \\\n\t  echo \" $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'\"; \\\n\t  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 \"$(DESTDIR)$(libdir)\"; \\\n\t}\n\nuninstall-libLTLIBRARIES:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(lib_LTLIBRARIES)'; test -n \"$(libdir)\" || list=; \\\n\tfor p in $$list; do \\\n\t  $(am__strip_dir) \\\n\t  echo \" $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'\"; \\\n\t  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f \"$(DESTDIR)$(libdir)/$$f\"; \\\n\tdone\n\nclean-libLTLIBRARIES:\n\t-test -z \"$(lib_LTLIBRARIES)\" || rm -f $(lib_LTLIBRARIES)\n\t@list='$(lib_LTLIBRARIES)'; \\\n\tlocs=`for p in $$list; do echo $$p; done | \\\n\t      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \\\n\t      sort -u`; \\\n\ttest -z \"$$locs\" || { \\\n\t  echo rm -f $${locs}; \\\n\t  rm -f $${locs}; \\\n\t}\n\nlibshadowsocks-libev.la: $(libshadowsocks_libev_la_OBJECTS) $(libshadowsocks_libev_la_DEPENDENCIES) $(EXTRA_libshadowsocks_libev_la_DEPENDENCIES) \n\t$(AM_V_CCLD)$(libshadowsocks_libev_la_LINK) -rpath $(libdir) $(libshadowsocks_libev_la_OBJECTS) $(libshadowsocks_libev_la_LIBADD) $(LIBS)\ninstall-binPROGRAMS: $(bin_PROGRAMS)\n\t@$(NORMAL_INSTALL)\n\t@list='$(bin_PROGRAMS)'; test -n \"$(bindir)\" || list=; \\\n\tif test -n \"$$list\"; then \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(bindir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(bindir)\" || exit 1; \\\n\tfi; \\\n\tfor p in $$list; do echo \"$$p $$p\"; done | \\\n\tsed 's/$(EXEEXT)$$//' | \\\n\twhile read p p1; do if test -f $$p \\\n\t || test -f $$p1 \\\n\t  ; then echo \"$$p\"; echo \"$$p\"; else :; fi; \\\n\tdone | \\\n\tsed -e 'p;s,.*/,,;n;h' \\\n\t    -e 's|.*|.|' \\\n\t    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \\\n\tsed 'N;N;N;s,\\n, ,g' | \\\n\t$(AWK) 'BEGIN { files[\".\"] = \"\"; dirs[\".\"] = 1 } \\\n\t  { d=$$3; if (dirs[d] != 1) { print \"d\", d; dirs[d] = 1 } \\\n\t    if ($$2 == $$4) files[d] = files[d] \" \" $$1; \\\n\t    else { print \"f\", $$3 \"/\" $$4, $$1; } } \\\n\t  END { for (d in files) print \"f\", d, files[d] }' | \\\n\twhile read type dir files; do \\\n\t    if test \"$$dir\" = .; then dir=; else dir=/$$dir; fi; \\\n\t    test -z \"$$files\" || { \\\n\t    echo \" $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'\"; \\\n\t    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files \"$(DESTDIR)$(bindir)$$dir\" || exit $$?; \\\n\t    } \\\n\t; done\n\nuninstall-binPROGRAMS:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(bin_PROGRAMS)'; test -n \"$(bindir)\" || list=; \\\n\tfiles=`for p in $$list; do echo \"$$p\"; done | \\\n\t  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \\\n\t      -e 's/$$/$(EXEEXT)/' \\\n\t`; \\\n\ttest -n \"$$list\" || exit 0; \\\n\techo \" ( cd '$(DESTDIR)$(bindir)' && rm -f\" $$files \")\"; \\\n\tcd \"$(DESTDIR)$(bindir)\" && rm -f $$files\n\nclean-binPROGRAMS:\n\t@list='$(bin_PROGRAMS)'; test -n \"$$list\" || exit 0; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list || exit $$?; \\\n\ttest -n \"$(EXEEXT)\" || exit 0; \\\n\tlist=`for p in $$list; do echo \"$$p\"; done | sed 's/$(EXEEXT)$$//'`; \\\n\techo \" rm -f\" $$list; \\\n\trm -f $$list\n\nss-local$(EXEEXT): $(ss_local_OBJECTS) $(ss_local_DEPENDENCIES) $(EXTRA_ss_local_DEPENDENCIES) \n\t@rm -f ss-local$(EXEEXT)\n\t$(AM_V_CCLD)$(ss_local_LINK) $(ss_local_OBJECTS) $(ss_local_LDADD) $(LIBS)\n\nss-manager$(EXEEXT): $(ss_manager_OBJECTS) $(ss_manager_DEPENDENCIES) $(EXTRA_ss_manager_DEPENDENCIES) \n\t@rm -f ss-manager$(EXEEXT)\n\t$(AM_V_CCLD)$(ss_manager_LINK) $(ss_manager_OBJECTS) $(ss_manager_LDADD) $(LIBS)\n\nss-redir$(EXEEXT): $(ss_redir_OBJECTS) $(ss_redir_DEPENDENCIES) $(EXTRA_ss_redir_DEPENDENCIES) \n\t@rm -f ss-redir$(EXEEXT)\n\t$(AM_V_CCLD)$(ss_redir_LINK) $(ss_redir_OBJECTS) $(ss_redir_LDADD) $(LIBS)\n\nss-server$(EXEEXT): $(ss_server_OBJECTS) $(ss_server_DEPENDENCIES) $(EXTRA_ss_server_DEPENDENCIES) \n\t@rm -f ss-server$(EXEEXT)\n\t$(AM_V_CCLD)$(ss_server_LINK) $(ss_server_OBJECTS) $(ss_server_LDADD) $(LIBS)\n\nss-tunnel$(EXEEXT): $(ss_tunnel_OBJECTS) $(ss_tunnel_DEPENDENCIES) $(EXTRA_ss_tunnel_DEPENDENCIES) \n\t@rm -f ss-tunnel$(EXEEXT)\n\t$(AM_V_CCLD)$(ss_tunnel_LINK) $(ss_tunnel_OBJECTS) $(ss_tunnel_LDADD) $(LIBS)\ninstall-binSCRIPTS: $(bin_SCRIPTS)\n\t@$(NORMAL_INSTALL)\n\t@list='$(bin_SCRIPTS)'; test -n \"$(bindir)\" || list=; \\\n\tif test -n \"$$list\"; then \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(bindir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(bindir)\" || exit 1; \\\n\tfi; \\\n\tfor p in $$list; do \\\n\t  if test -f \"$$p\"; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  if test -f \"$$d$$p\"; then echo \"$$d$$p\"; echo \"$$p\"; else :; fi; \\\n\tdone | \\\n\tsed -e 'p;s,.*/,,;n' \\\n\t    -e 'h;s|.*|.|' \\\n\t    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\\n, ,g' | \\\n\t$(AWK) 'BEGIN { files[\".\"] = \"\"; dirs[\".\"] = 1; } \\\n\t  { d=$$3; if (dirs[d] != 1) { print \"d\", d; dirs[d] = 1 } \\\n\t    if ($$2 == $$4) { files[d] = files[d] \" \" $$1; \\\n\t      if (++n[d] == $(am__install_max)) { \\\n\t\tprint \"f\", d, files[d]; n[d] = 0; files[d] = \"\" } } \\\n\t    else { print \"f\", d \"/\" $$4, $$1 } } \\\n\t  END { for (d in files) print \"f\", d, files[d] }' | \\\n\twhile read type dir files; do \\\n\t     if test \"$$dir\" = .; then dir=; else dir=/$$dir; fi; \\\n\t     test -z \"$$files\" || { \\\n\t       echo \" $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'\"; \\\n\t       $(INSTALL_SCRIPT) $$files \"$(DESTDIR)$(bindir)$$dir\" || exit $$?; \\\n\t     } \\\n\t; done\n\nuninstall-binSCRIPTS:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(bin_SCRIPTS)'; test -n \"$(bindir)\" || exit 0; \\\n\tfiles=`for p in $$list; do echo \"$$p\"; done | \\\n\t       sed -e 's,.*/,,;$(transform)'`; \\\n\tdir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)\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)/libshadowsocks_libev_la-acl.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-cache.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-encrypt.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-jconf.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-json.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-local.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-netutils.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-udprelay.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-utils.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libshadowsocks_libev_la-win32.Plo@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-acl.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-cache.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-encrypt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-jconf.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-json.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-local.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-netutils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-udprelay.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-utils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_local-win32.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_manager-jconf.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_manager-json.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_manager-manager.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_manager-utils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-cache.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-encrypt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-jconf.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-json.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-netutils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-redir.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-udprelay.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_redir-utils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-acl.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-cache.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-encrypt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-jconf.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-json.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-netutils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-resolv.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-server.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-udprelay.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_server-utils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-cache.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-encrypt.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-jconf.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-json.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-netutils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-tunnel.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-udprelay.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-utils.Po@am__quote@\n@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ss_tunnel-win32.Po@am__quote@\n\n.c.o:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.o$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<\n\n.c.obj:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.obj$$||'`;\\\n@am__fastdepCC_TRUE@\t$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`\n\n.c.lo:\n@am__fastdepCC_TRUE@\t$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\\.lo$$||'`;\\\n@am__fastdepCC_TRUE@\t$(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\\\n@am__fastdepCC_TRUE@\t$(am__mv) $$depbase.Tpo $$depbase.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<\n\nlibshadowsocks_libev_la-utils.lo: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-utils.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-utils.Tpo -c -o libshadowsocks_libev_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-utils.Tpo $(DEPDIR)/libshadowsocks_libev_la-utils.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='libshadowsocks_libev_la-utils.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-utils.lo `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nlibshadowsocks_libev_la-jconf.lo: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-jconf.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-jconf.Tpo -c -o libshadowsocks_libev_la-jconf.lo `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-jconf.Tpo $(DEPDIR)/libshadowsocks_libev_la-jconf.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='libshadowsocks_libev_la-jconf.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-jconf.lo `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nlibshadowsocks_libev_la-json.lo: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-json.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-json.Tpo -c -o libshadowsocks_libev_la-json.lo `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-json.Tpo $(DEPDIR)/libshadowsocks_libev_la-json.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='libshadowsocks_libev_la-json.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-json.lo `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nlibshadowsocks_libev_la-encrypt.lo: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-encrypt.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-encrypt.Tpo -c -o libshadowsocks_libev_la-encrypt.lo `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-encrypt.Tpo $(DEPDIR)/libshadowsocks_libev_la-encrypt.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='libshadowsocks_libev_la-encrypt.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-encrypt.lo `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n\nlibshadowsocks_libev_la-udprelay.lo: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-udprelay.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-udprelay.Tpo -c -o libshadowsocks_libev_la-udprelay.lo `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-udprelay.Tpo $(DEPDIR)/libshadowsocks_libev_la-udprelay.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='libshadowsocks_libev_la-udprelay.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-udprelay.lo `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n\nlibshadowsocks_libev_la-cache.lo: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-cache.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-cache.Tpo -c -o libshadowsocks_libev_la-cache.lo `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-cache.Tpo $(DEPDIR)/libshadowsocks_libev_la-cache.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='libshadowsocks_libev_la-cache.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-cache.lo `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n\nlibshadowsocks_libev_la-acl.lo: acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-acl.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-acl.Tpo -c -o libshadowsocks_libev_la-acl.lo `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-acl.Tpo $(DEPDIR)/libshadowsocks_libev_la-acl.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='acl.c' object='libshadowsocks_libev_la-acl.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-acl.lo `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n\nlibshadowsocks_libev_la-netutils.lo: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-netutils.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-netutils.Tpo -c -o libshadowsocks_libev_la-netutils.lo `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-netutils.Tpo $(DEPDIR)/libshadowsocks_libev_la-netutils.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='libshadowsocks_libev_la-netutils.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-netutils.lo `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n\nlibshadowsocks_libev_la-local.lo: local.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-local.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-local.Tpo -c -o libshadowsocks_libev_la-local.lo `test -f 'local.c' || echo '$(srcdir)/'`local.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-local.Tpo $(DEPDIR)/libshadowsocks_libev_la-local.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='local.c' object='libshadowsocks_libev_la-local.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-local.lo `test -f 'local.c' || echo '$(srcdir)/'`local.c\n\nlibshadowsocks_libev_la-win32.lo: win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -MT libshadowsocks_libev_la-win32.lo -MD -MP -MF $(DEPDIR)/libshadowsocks_libev_la-win32.Tpo -c -o libshadowsocks_libev_la-win32.lo `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/libshadowsocks_libev_la-win32.Tpo $(DEPDIR)/libshadowsocks_libev_la-win32.Plo\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='win32.c' object='libshadowsocks_libev_la-win32.lo' libtool=yes @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libshadowsocks_libev_la_CFLAGS) $(CFLAGS) -c -o libshadowsocks_libev_la-win32.lo `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n\nss_local-utils.o: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-utils.o -MD -MP -MF $(DEPDIR)/ss_local-utils.Tpo -c -o ss_local-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-utils.Tpo $(DEPDIR)/ss_local-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_local-utils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nss_local-utils.obj: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-utils.obj -MD -MP -MF $(DEPDIR)/ss_local-utils.Tpo -c -o ss_local-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-utils.Tpo $(DEPDIR)/ss_local-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_local-utils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n\nss_local-jconf.o: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-jconf.o -MD -MP -MF $(DEPDIR)/ss_local-jconf.Tpo -c -o ss_local-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-jconf.Tpo $(DEPDIR)/ss_local-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_local-jconf.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nss_local-jconf.obj: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-jconf.obj -MD -MP -MF $(DEPDIR)/ss_local-jconf.Tpo -c -o ss_local-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-jconf.Tpo $(DEPDIR)/ss_local-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_local-jconf.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n\nss_local-json.o: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-json.o -MD -MP -MF $(DEPDIR)/ss_local-json.Tpo -c -o ss_local-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-json.Tpo $(DEPDIR)/ss_local-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_local-json.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nss_local-json.obj: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-json.obj -MD -MP -MF $(DEPDIR)/ss_local-json.Tpo -c -o ss_local-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-json.Tpo $(DEPDIR)/ss_local-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_local-json.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n\nss_local-encrypt.o: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-encrypt.o -MD -MP -MF $(DEPDIR)/ss_local-encrypt.Tpo -c -o ss_local-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-encrypt.Tpo $(DEPDIR)/ss_local-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_local-encrypt.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n\nss_local-encrypt.obj: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-encrypt.obj -MD -MP -MF $(DEPDIR)/ss_local-encrypt.Tpo -c -o ss_local-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-encrypt.Tpo $(DEPDIR)/ss_local-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_local-encrypt.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n\nss_local-udprelay.o: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-udprelay.o -MD -MP -MF $(DEPDIR)/ss_local-udprelay.Tpo -c -o ss_local-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-udprelay.Tpo $(DEPDIR)/ss_local-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_local-udprelay.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n\nss_local-udprelay.obj: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-udprelay.obj -MD -MP -MF $(DEPDIR)/ss_local-udprelay.Tpo -c -o ss_local-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-udprelay.Tpo $(DEPDIR)/ss_local-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_local-udprelay.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n\nss_local-cache.o: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-cache.o -MD -MP -MF $(DEPDIR)/ss_local-cache.Tpo -c -o ss_local-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-cache.Tpo $(DEPDIR)/ss_local-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_local-cache.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n\nss_local-cache.obj: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-cache.obj -MD -MP -MF $(DEPDIR)/ss_local-cache.Tpo -c -o ss_local-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-cache.Tpo $(DEPDIR)/ss_local-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_local-cache.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n\nss_local-acl.o: acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-acl.o -MD -MP -MF $(DEPDIR)/ss_local-acl.Tpo -c -o ss_local-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-acl.Tpo $(DEPDIR)/ss_local-acl.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='acl.c' object='ss_local-acl.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n\nss_local-acl.obj: acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-acl.obj -MD -MP -MF $(DEPDIR)/ss_local-acl.Tpo -c -o ss_local-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-acl.Tpo $(DEPDIR)/ss_local-acl.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='acl.c' object='ss_local-acl.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi`\n\nss_local-netutils.o: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-netutils.o -MD -MP -MF $(DEPDIR)/ss_local-netutils.Tpo -c -o ss_local-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-netutils.Tpo $(DEPDIR)/ss_local-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_local-netutils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n\nss_local-netutils.obj: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-netutils.obj -MD -MP -MF $(DEPDIR)/ss_local-netutils.Tpo -c -o ss_local-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-netutils.Tpo $(DEPDIR)/ss_local-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_local-netutils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n\nss_local-local.o: local.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-local.o -MD -MP -MF $(DEPDIR)/ss_local-local.Tpo -c -o ss_local-local.o `test -f 'local.c' || echo '$(srcdir)/'`local.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-local.Tpo $(DEPDIR)/ss_local-local.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='local.c' object='ss_local-local.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-local.o `test -f 'local.c' || echo '$(srcdir)/'`local.c\n\nss_local-local.obj: local.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-local.obj -MD -MP -MF $(DEPDIR)/ss_local-local.Tpo -c -o ss_local-local.obj `if test -f 'local.c'; then $(CYGPATH_W) 'local.c'; else $(CYGPATH_W) '$(srcdir)/local.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-local.Tpo $(DEPDIR)/ss_local-local.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='local.c' object='ss_local-local.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-local.obj `if test -f 'local.c'; then $(CYGPATH_W) 'local.c'; else $(CYGPATH_W) '$(srcdir)/local.c'; fi`\n\nss_local-win32.o: win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-win32.o -MD -MP -MF $(DEPDIR)/ss_local-win32.Tpo -c -o ss_local-win32.o `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-win32.Tpo $(DEPDIR)/ss_local-win32.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='win32.c' object='ss_local-win32.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-win32.o `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n\nss_local-win32.obj: win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -MT ss_local-win32.obj -MD -MP -MF $(DEPDIR)/ss_local-win32.Tpo -c -o ss_local-win32.obj `if test -f 'win32.c'; then $(CYGPATH_W) 'win32.c'; else $(CYGPATH_W) '$(srcdir)/win32.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_local-win32.Tpo $(DEPDIR)/ss_local-win32.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='win32.c' object='ss_local-win32.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_local_CFLAGS) $(CFLAGS) -c -o ss_local-win32.obj `if test -f 'win32.c'; then $(CYGPATH_W) 'win32.c'; else $(CYGPATH_W) '$(srcdir)/win32.c'; fi`\n\nss_manager-utils.o: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-utils.o -MD -MP -MF $(DEPDIR)/ss_manager-utils.Tpo -c -o ss_manager-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-utils.Tpo $(DEPDIR)/ss_manager-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_manager-utils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nss_manager-utils.obj: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-utils.obj -MD -MP -MF $(DEPDIR)/ss_manager-utils.Tpo -c -o ss_manager-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-utils.Tpo $(DEPDIR)/ss_manager-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_manager-utils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n\nss_manager-jconf.o: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-jconf.o -MD -MP -MF $(DEPDIR)/ss_manager-jconf.Tpo -c -o ss_manager-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-jconf.Tpo $(DEPDIR)/ss_manager-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_manager-jconf.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nss_manager-jconf.obj: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-jconf.obj -MD -MP -MF $(DEPDIR)/ss_manager-jconf.Tpo -c -o ss_manager-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-jconf.Tpo $(DEPDIR)/ss_manager-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_manager-jconf.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n\nss_manager-json.o: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-json.o -MD -MP -MF $(DEPDIR)/ss_manager-json.Tpo -c -o ss_manager-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-json.Tpo $(DEPDIR)/ss_manager-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_manager-json.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nss_manager-json.obj: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-json.obj -MD -MP -MF $(DEPDIR)/ss_manager-json.Tpo -c -o ss_manager-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-json.Tpo $(DEPDIR)/ss_manager-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_manager-json.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n\nss_manager-manager.o: manager.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-manager.o -MD -MP -MF $(DEPDIR)/ss_manager-manager.Tpo -c -o ss_manager-manager.o `test -f 'manager.c' || echo '$(srcdir)/'`manager.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-manager.Tpo $(DEPDIR)/ss_manager-manager.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='manager.c' object='ss_manager-manager.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-manager.o `test -f 'manager.c' || echo '$(srcdir)/'`manager.c\n\nss_manager-manager.obj: manager.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -MT ss_manager-manager.obj -MD -MP -MF $(DEPDIR)/ss_manager-manager.Tpo -c -o ss_manager-manager.obj `if test -f 'manager.c'; then $(CYGPATH_W) 'manager.c'; else $(CYGPATH_W) '$(srcdir)/manager.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_manager-manager.Tpo $(DEPDIR)/ss_manager-manager.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='manager.c' object='ss_manager-manager.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_manager_CFLAGS) $(CFLAGS) -c -o ss_manager-manager.obj `if test -f 'manager.c'; then $(CYGPATH_W) 'manager.c'; else $(CYGPATH_W) '$(srcdir)/manager.c'; fi`\n\nss_redir-utils.o: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-utils.o -MD -MP -MF $(DEPDIR)/ss_redir-utils.Tpo -c -o ss_redir-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-utils.Tpo $(DEPDIR)/ss_redir-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_redir-utils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nss_redir-utils.obj: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-utils.obj -MD -MP -MF $(DEPDIR)/ss_redir-utils.Tpo -c -o ss_redir-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-utils.Tpo $(DEPDIR)/ss_redir-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_redir-utils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n\nss_redir-jconf.o: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-jconf.o -MD -MP -MF $(DEPDIR)/ss_redir-jconf.Tpo -c -o ss_redir-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-jconf.Tpo $(DEPDIR)/ss_redir-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_redir-jconf.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nss_redir-jconf.obj: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-jconf.obj -MD -MP -MF $(DEPDIR)/ss_redir-jconf.Tpo -c -o ss_redir-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-jconf.Tpo $(DEPDIR)/ss_redir-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_redir-jconf.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n\nss_redir-json.o: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-json.o -MD -MP -MF $(DEPDIR)/ss_redir-json.Tpo -c -o ss_redir-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-json.Tpo $(DEPDIR)/ss_redir-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_redir-json.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nss_redir-json.obj: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-json.obj -MD -MP -MF $(DEPDIR)/ss_redir-json.Tpo -c -o ss_redir-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-json.Tpo $(DEPDIR)/ss_redir-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_redir-json.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n\nss_redir-encrypt.o: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-encrypt.o -MD -MP -MF $(DEPDIR)/ss_redir-encrypt.Tpo -c -o ss_redir-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-encrypt.Tpo $(DEPDIR)/ss_redir-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_redir-encrypt.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n\nss_redir-encrypt.obj: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-encrypt.obj -MD -MP -MF $(DEPDIR)/ss_redir-encrypt.Tpo -c -o ss_redir-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-encrypt.Tpo $(DEPDIR)/ss_redir-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_redir-encrypt.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n\nss_redir-netutils.o: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-netutils.o -MD -MP -MF $(DEPDIR)/ss_redir-netutils.Tpo -c -o ss_redir-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-netutils.Tpo $(DEPDIR)/ss_redir-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_redir-netutils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n\nss_redir-netutils.obj: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-netutils.obj -MD -MP -MF $(DEPDIR)/ss_redir-netutils.Tpo -c -o ss_redir-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-netutils.Tpo $(DEPDIR)/ss_redir-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_redir-netutils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n\nss_redir-cache.o: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-cache.o -MD -MP -MF $(DEPDIR)/ss_redir-cache.Tpo -c -o ss_redir-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-cache.Tpo $(DEPDIR)/ss_redir-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_redir-cache.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n\nss_redir-cache.obj: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-cache.obj -MD -MP -MF $(DEPDIR)/ss_redir-cache.Tpo -c -o ss_redir-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-cache.Tpo $(DEPDIR)/ss_redir-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_redir-cache.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n\nss_redir-udprelay.o: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-udprelay.o -MD -MP -MF $(DEPDIR)/ss_redir-udprelay.Tpo -c -o ss_redir-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-udprelay.Tpo $(DEPDIR)/ss_redir-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_redir-udprelay.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n\nss_redir-udprelay.obj: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-udprelay.obj -MD -MP -MF $(DEPDIR)/ss_redir-udprelay.Tpo -c -o ss_redir-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-udprelay.Tpo $(DEPDIR)/ss_redir-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_redir-udprelay.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n\nss_redir-redir.o: redir.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-redir.o -MD -MP -MF $(DEPDIR)/ss_redir-redir.Tpo -c -o ss_redir-redir.o `test -f 'redir.c' || echo '$(srcdir)/'`redir.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-redir.Tpo $(DEPDIR)/ss_redir-redir.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='redir.c' object='ss_redir-redir.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-redir.o `test -f 'redir.c' || echo '$(srcdir)/'`redir.c\n\nss_redir-redir.obj: redir.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -MT ss_redir-redir.obj -MD -MP -MF $(DEPDIR)/ss_redir-redir.Tpo -c -o ss_redir-redir.obj `if test -f 'redir.c'; then $(CYGPATH_W) 'redir.c'; else $(CYGPATH_W) '$(srcdir)/redir.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_redir-redir.Tpo $(DEPDIR)/ss_redir-redir.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='redir.c' object='ss_redir-redir.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_redir_CFLAGS) $(CFLAGS) -c -o ss_redir-redir.obj `if test -f 'redir.c'; then $(CYGPATH_W) 'redir.c'; else $(CYGPATH_W) '$(srcdir)/redir.c'; fi`\n\nss_server-utils.o: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-utils.o -MD -MP -MF $(DEPDIR)/ss_server-utils.Tpo -c -o ss_server-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-utils.Tpo $(DEPDIR)/ss_server-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_server-utils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nss_server-utils.obj: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-utils.obj -MD -MP -MF $(DEPDIR)/ss_server-utils.Tpo -c -o ss_server-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-utils.Tpo $(DEPDIR)/ss_server-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_server-utils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n\nss_server-netutils.o: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-netutils.o -MD -MP -MF $(DEPDIR)/ss_server-netutils.Tpo -c -o ss_server-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-netutils.Tpo $(DEPDIR)/ss_server-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_server-netutils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n\nss_server-netutils.obj: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-netutils.obj -MD -MP -MF $(DEPDIR)/ss_server-netutils.Tpo -c -o ss_server-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-netutils.Tpo $(DEPDIR)/ss_server-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_server-netutils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n\nss_server-jconf.o: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-jconf.o -MD -MP -MF $(DEPDIR)/ss_server-jconf.Tpo -c -o ss_server-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-jconf.Tpo $(DEPDIR)/ss_server-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_server-jconf.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nss_server-jconf.obj: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-jconf.obj -MD -MP -MF $(DEPDIR)/ss_server-jconf.Tpo -c -o ss_server-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-jconf.Tpo $(DEPDIR)/ss_server-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_server-jconf.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n\nss_server-json.o: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-json.o -MD -MP -MF $(DEPDIR)/ss_server-json.Tpo -c -o ss_server-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-json.Tpo $(DEPDIR)/ss_server-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_server-json.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nss_server-json.obj: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-json.obj -MD -MP -MF $(DEPDIR)/ss_server-json.Tpo -c -o ss_server-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-json.Tpo $(DEPDIR)/ss_server-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_server-json.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n\nss_server-encrypt.o: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-encrypt.o -MD -MP -MF $(DEPDIR)/ss_server-encrypt.Tpo -c -o ss_server-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-encrypt.Tpo $(DEPDIR)/ss_server-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_server-encrypt.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n\nss_server-encrypt.obj: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-encrypt.obj -MD -MP -MF $(DEPDIR)/ss_server-encrypt.Tpo -c -o ss_server-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-encrypt.Tpo $(DEPDIR)/ss_server-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_server-encrypt.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n\nss_server-udprelay.o: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-udprelay.o -MD -MP -MF $(DEPDIR)/ss_server-udprelay.Tpo -c -o ss_server-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-udprelay.Tpo $(DEPDIR)/ss_server-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_server-udprelay.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n\nss_server-udprelay.obj: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-udprelay.obj -MD -MP -MF $(DEPDIR)/ss_server-udprelay.Tpo -c -o ss_server-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-udprelay.Tpo $(DEPDIR)/ss_server-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_server-udprelay.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n\nss_server-cache.o: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-cache.o -MD -MP -MF $(DEPDIR)/ss_server-cache.Tpo -c -o ss_server-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-cache.Tpo $(DEPDIR)/ss_server-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_server-cache.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n\nss_server-cache.obj: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-cache.obj -MD -MP -MF $(DEPDIR)/ss_server-cache.Tpo -c -o ss_server-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-cache.Tpo $(DEPDIR)/ss_server-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_server-cache.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n\nss_server-acl.o: acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-acl.o -MD -MP -MF $(DEPDIR)/ss_server-acl.Tpo -c -o ss_server-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-acl.Tpo $(DEPDIR)/ss_server-acl.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='acl.c' object='ss_server-acl.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-acl.o `test -f 'acl.c' || echo '$(srcdir)/'`acl.c\n\nss_server-acl.obj: acl.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-acl.obj -MD -MP -MF $(DEPDIR)/ss_server-acl.Tpo -c -o ss_server-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-acl.Tpo $(DEPDIR)/ss_server-acl.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='acl.c' object='ss_server-acl.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-acl.obj `if test -f 'acl.c'; then $(CYGPATH_W) 'acl.c'; else $(CYGPATH_W) '$(srcdir)/acl.c'; fi`\n\nss_server-resolv.o: resolv.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-resolv.o -MD -MP -MF $(DEPDIR)/ss_server-resolv.Tpo -c -o ss_server-resolv.o `test -f 'resolv.c' || echo '$(srcdir)/'`resolv.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-resolv.Tpo $(DEPDIR)/ss_server-resolv.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='resolv.c' object='ss_server-resolv.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-resolv.o `test -f 'resolv.c' || echo '$(srcdir)/'`resolv.c\n\nss_server-resolv.obj: resolv.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-resolv.obj -MD -MP -MF $(DEPDIR)/ss_server-resolv.Tpo -c -o ss_server-resolv.obj `if test -f 'resolv.c'; then $(CYGPATH_W) 'resolv.c'; else $(CYGPATH_W) '$(srcdir)/resolv.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-resolv.Tpo $(DEPDIR)/ss_server-resolv.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='resolv.c' object='ss_server-resolv.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-resolv.obj `if test -f 'resolv.c'; then $(CYGPATH_W) 'resolv.c'; else $(CYGPATH_W) '$(srcdir)/resolv.c'; fi`\n\nss_server-server.o: server.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-server.o -MD -MP -MF $(DEPDIR)/ss_server-server.Tpo -c -o ss_server-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-server.Tpo $(DEPDIR)/ss_server-server.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='server.c' object='ss_server-server.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-server.o `test -f 'server.c' || echo '$(srcdir)/'`server.c\n\nss_server-server.obj: server.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -MT ss_server-server.obj -MD -MP -MF $(DEPDIR)/ss_server-server.Tpo -c -o ss_server-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_server-server.Tpo $(DEPDIR)/ss_server-server.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='server.c' object='ss_server-server.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_server_CFLAGS) $(CFLAGS) -c -o ss_server-server.obj `if test -f 'server.c'; then $(CYGPATH_W) 'server.c'; else $(CYGPATH_W) '$(srcdir)/server.c'; fi`\n\nss_tunnel-utils.o: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-utils.o -MD -MP -MF $(DEPDIR)/ss_tunnel-utils.Tpo -c -o ss_tunnel-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-utils.Tpo $(DEPDIR)/ss_tunnel-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_tunnel-utils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-utils.o `test -f 'utils.c' || echo '$(srcdir)/'`utils.c\n\nss_tunnel-utils.obj: utils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-utils.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-utils.Tpo -c -o ss_tunnel-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-utils.Tpo $(DEPDIR)/ss_tunnel-utils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='utils.c' object='ss_tunnel-utils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-utils.obj `if test -f 'utils.c'; then $(CYGPATH_W) 'utils.c'; else $(CYGPATH_W) '$(srcdir)/utils.c'; fi`\n\nss_tunnel-jconf.o: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-jconf.o -MD -MP -MF $(DEPDIR)/ss_tunnel-jconf.Tpo -c -o ss_tunnel-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-jconf.Tpo $(DEPDIR)/ss_tunnel-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_tunnel-jconf.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-jconf.o `test -f 'jconf.c' || echo '$(srcdir)/'`jconf.c\n\nss_tunnel-jconf.obj: jconf.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-jconf.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-jconf.Tpo -c -o ss_tunnel-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-jconf.Tpo $(DEPDIR)/ss_tunnel-jconf.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='jconf.c' object='ss_tunnel-jconf.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-jconf.obj `if test -f 'jconf.c'; then $(CYGPATH_W) 'jconf.c'; else $(CYGPATH_W) '$(srcdir)/jconf.c'; fi`\n\nss_tunnel-json.o: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-json.o -MD -MP -MF $(DEPDIR)/ss_tunnel-json.Tpo -c -o ss_tunnel-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-json.Tpo $(DEPDIR)/ss_tunnel-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_tunnel-json.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-json.o `test -f 'json.c' || echo '$(srcdir)/'`json.c\n\nss_tunnel-json.obj: json.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-json.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-json.Tpo -c -o ss_tunnel-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-json.Tpo $(DEPDIR)/ss_tunnel-json.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='json.c' object='ss_tunnel-json.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-json.obj `if test -f 'json.c'; then $(CYGPATH_W) 'json.c'; else $(CYGPATH_W) '$(srcdir)/json.c'; fi`\n\nss_tunnel-encrypt.o: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-encrypt.o -MD -MP -MF $(DEPDIR)/ss_tunnel-encrypt.Tpo -c -o ss_tunnel-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-encrypt.Tpo $(DEPDIR)/ss_tunnel-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_tunnel-encrypt.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-encrypt.o `test -f 'encrypt.c' || echo '$(srcdir)/'`encrypt.c\n\nss_tunnel-encrypt.obj: encrypt.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-encrypt.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-encrypt.Tpo -c -o ss_tunnel-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-encrypt.Tpo $(DEPDIR)/ss_tunnel-encrypt.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='encrypt.c' object='ss_tunnel-encrypt.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-encrypt.obj `if test -f 'encrypt.c'; then $(CYGPATH_W) 'encrypt.c'; else $(CYGPATH_W) '$(srcdir)/encrypt.c'; fi`\n\nss_tunnel-udprelay.o: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-udprelay.o -MD -MP -MF $(DEPDIR)/ss_tunnel-udprelay.Tpo -c -o ss_tunnel-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-udprelay.Tpo $(DEPDIR)/ss_tunnel-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_tunnel-udprelay.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-udprelay.o `test -f 'udprelay.c' || echo '$(srcdir)/'`udprelay.c\n\nss_tunnel-udprelay.obj: udprelay.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-udprelay.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-udprelay.Tpo -c -o ss_tunnel-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-udprelay.Tpo $(DEPDIR)/ss_tunnel-udprelay.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='udprelay.c' object='ss_tunnel-udprelay.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-udprelay.obj `if test -f 'udprelay.c'; then $(CYGPATH_W) 'udprelay.c'; else $(CYGPATH_W) '$(srcdir)/udprelay.c'; fi`\n\nss_tunnel-cache.o: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-cache.o -MD -MP -MF $(DEPDIR)/ss_tunnel-cache.Tpo -c -o ss_tunnel-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-cache.Tpo $(DEPDIR)/ss_tunnel-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_tunnel-cache.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c\n\nss_tunnel-cache.obj: cache.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-cache.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-cache.Tpo -c -o ss_tunnel-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-cache.Tpo $(DEPDIR)/ss_tunnel-cache.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='cache.c' object='ss_tunnel-cache.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi`\n\nss_tunnel-netutils.o: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-netutils.o -MD -MP -MF $(DEPDIR)/ss_tunnel-netutils.Tpo -c -o ss_tunnel-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-netutils.Tpo $(DEPDIR)/ss_tunnel-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_tunnel-netutils.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-netutils.o `test -f 'netutils.c' || echo '$(srcdir)/'`netutils.c\n\nss_tunnel-netutils.obj: netutils.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-netutils.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-netutils.Tpo -c -o ss_tunnel-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-netutils.Tpo $(DEPDIR)/ss_tunnel-netutils.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='netutils.c' object='ss_tunnel-netutils.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-netutils.obj `if test -f 'netutils.c'; then $(CYGPATH_W) 'netutils.c'; else $(CYGPATH_W) '$(srcdir)/netutils.c'; fi`\n\nss_tunnel-tunnel.o: tunnel.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-tunnel.o -MD -MP -MF $(DEPDIR)/ss_tunnel-tunnel.Tpo -c -o ss_tunnel-tunnel.o `test -f 'tunnel.c' || echo '$(srcdir)/'`tunnel.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-tunnel.Tpo $(DEPDIR)/ss_tunnel-tunnel.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='tunnel.c' object='ss_tunnel-tunnel.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-tunnel.o `test -f 'tunnel.c' || echo '$(srcdir)/'`tunnel.c\n\nss_tunnel-tunnel.obj: tunnel.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-tunnel.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-tunnel.Tpo -c -o ss_tunnel-tunnel.obj `if test -f 'tunnel.c'; then $(CYGPATH_W) 'tunnel.c'; else $(CYGPATH_W) '$(srcdir)/tunnel.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-tunnel.Tpo $(DEPDIR)/ss_tunnel-tunnel.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='tunnel.c' object='ss_tunnel-tunnel.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-tunnel.obj `if test -f 'tunnel.c'; then $(CYGPATH_W) 'tunnel.c'; else $(CYGPATH_W) '$(srcdir)/tunnel.c'; fi`\n\nss_tunnel-win32.o: win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-win32.o -MD -MP -MF $(DEPDIR)/ss_tunnel-win32.Tpo -c -o ss_tunnel-win32.o `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-win32.Tpo $(DEPDIR)/ss_tunnel-win32.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='win32.c' object='ss_tunnel-win32.o' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-win32.o `test -f 'win32.c' || echo '$(srcdir)/'`win32.c\n\nss_tunnel-win32.obj: win32.c\n@am__fastdepCC_TRUE@\t$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -MT ss_tunnel-win32.obj -MD -MP -MF $(DEPDIR)/ss_tunnel-win32.Tpo -c -o ss_tunnel-win32.obj `if test -f 'win32.c'; then $(CYGPATH_W) 'win32.c'; else $(CYGPATH_W) '$(srcdir)/win32.c'; fi`\n@am__fastdepCC_TRUE@\t$(AM_V_at)$(am__mv) $(DEPDIR)/ss_tunnel-win32.Tpo $(DEPDIR)/ss_tunnel-win32.Po\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\t$(AM_V_CC)source='win32.c' object='ss_tunnel-win32.obj' libtool=no @AMDEPBACKSLASH@\n@AMDEP_TRUE@@am__fastdepCC_FALSE@\tDEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@\n@am__fastdepCC_FALSE@\t$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ss_tunnel_CFLAGS) $(CFLAGS) -c -o ss_tunnel-win32.obj `if test -f 'win32.c'; then $(CYGPATH_W) 'win32.c'; else $(CYGPATH_W) '$(srcdir)/win32.c'; fi`\n\nmostlyclean-libtool:\n\t-rm -f *.lo\n\nclean-libtool:\n\t-rm -rf .libs _libs\ninstall-includeHEADERS: $(include_HEADERS)\n\t@$(NORMAL_INSTALL)\n\t@list='$(include_HEADERS)'; test -n \"$(includedir)\" || list=; \\\n\tif test -n \"$$list\"; then \\\n\t  echo \" $(MKDIR_P) '$(DESTDIR)$(includedir)'\"; \\\n\t  $(MKDIR_P) \"$(DESTDIR)$(includedir)\" || exit 1; \\\n\tfi; \\\n\tfor p in $$list; do \\\n\t  if test -f \"$$p\"; then d=; else d=\"$(srcdir)/\"; fi; \\\n\t  echo \"$$d$$p\"; \\\n\tdone | $(am__base_list) | \\\n\twhile read files; do \\\n\t  echo \" $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'\"; \\\n\t  $(INSTALL_HEADER) $$files \"$(DESTDIR)$(includedir)\" || exit $$?; \\\n\tdone\n\nuninstall-includeHEADERS:\n\t@$(NORMAL_UNINSTALL)\n\t@list='$(include_HEADERS)'; test -n \"$(includedir)\" || list=; \\\n\tfiles=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \\\n\tdir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)\n\nID: $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); mkid -fID $$unique\ntags: tags-am\nTAGS: tags\n\ntags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\tset x; \\\n\there=`pwd`; \\\n\t$(am__define_uniq_tagged_files); \\\n\tshift; \\\n\tif test -z \"$(ETAGS_ARGS)$$*$$unique\"; then :; else \\\n\t  test -n \"$$unique\" || unique=$$empty_fix; \\\n\t  if test $$# -gt 0; then \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      \"$$@\" $$unique; \\\n\t  else \\\n\t    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \\\n\t      $$unique; \\\n\t  fi; \\\n\tfi\nctags: ctags-am\n\nCTAGS: ctags\nctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)\n\t$(am__define_uniq_tagged_files); \\\n\ttest -z \"$(CTAGS_ARGS)$$unique\" \\\n\t  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \\\n\t     $$unique\n\nGTAGS:\n\there=`$(am__cd) $(top_builddir) && pwd` \\\n\t  && $(am__cd) $(top_srcdir) \\\n\t  && gtags -i $(GTAGS_ARGS) \"$$here\"\ncscopelist: cscopelist-am\n\ncscopelist-am: $(am__tagged_files)\n\tlist='$(am__tagged_files)'; \\\n\tcase \"$(srcdir)\" in \\\n\t  [\\\\/]* | ?:[\\\\/]*) sdir=\"$(srcdir)\" ;; \\\n\t  *) sdir=$(subdir)/$(srcdir) ;; \\\n\tesac; \\\n\tfor i in $$list; do \\\n\t  if test -f \"$$i\"; then \\\n\t    echo \"$(subdir)/$$i\"; \\\n\t  else \\\n\t    echo \"$$sdir/$$i\"; \\\n\t  fi; \\\n\tdone >> $(top_builddir)/cscope.files\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)'; \\\n\t  dist_files=`for file in $$list; do echo $$file; done | \\\n\t  sed -e \"s|^$$srcdirstrip/||;t\" \\\n\t      -e \"s|^$$topsrcdirstrip/|$(top_builddir)/|;t\"`; \\\n\tcase $$dist_files in \\\n\t  */*) $(MKDIR_P) `echo \"$$dist_files\" | \\\n\t\t\t   sed '/\\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \\\n\t\t\t   sort -u` ;; \\\n\tesac; \\\n\tfor file in $$dist_files; do \\\n\t  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \\\n\t  if test -d $$d/$$file; then \\\n\t    dir=`echo \"/$$file\" | sed -e 's,/[^/]*$$,,'`; \\\n\t    if test -d \"$(distdir)/$$file\"; then \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \\\n\t      cp -fpR $(srcdir)/$$file \"$(distdir)$$dir\" || exit 1; \\\n\t      find \"$(distdir)/$$file\" -type d ! -perm -700 -exec chmod u+rwx {} \\;; \\\n\t    fi; \\\n\t    cp -fpR $$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 $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(HEADERS)\ninstall-binPROGRAMS: install-libLTLIBRARIES\n\ninstalldirs:\n\tfor dir in \"$(DESTDIR)$(libdir)\" \"$(DESTDIR)$(bindir)\" \"$(DESTDIR)$(bindir)\" \"$(DESTDIR)$(includedir)\"; 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\tif test -z '$(STRIP)'; then \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t      install; \\\n\telse \\\n\t  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" \\\n\t    install_sh_PROGRAM=\"$(INSTALL_STRIP_PROGRAM)\" INSTALL_STRIP_FLAG=-s \\\n\t    \"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'\" install; \\\n\tfi\nmostlyclean-generic:\n\nclean-generic:\n\ndistclean-generic:\n\t-test -z \"$(CONFIG_CLEAN_FILES)\" || rm -f $(CONFIG_CLEAN_FILES)\n\t-test . = \"$(srcdir)\" || test -z \"$(CONFIG_CLEAN_VPATH_FILES)\" || rm -f $(CONFIG_CLEAN_VPATH_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-binPROGRAMS clean-generic clean-libLTLIBRARIES \\\n\tclean-libtool 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\nhtml-am:\n\ninfo: info-am\n\ninfo-am:\n\ninstall-data-am: install-includeHEADERS\n\ninstall-dvi: install-dvi-am\n\ninstall-dvi-am:\n\ninstall-exec-am: install-binPROGRAMS install-binSCRIPTS \\\n\tinstall-libLTLIBRARIES\n\ninstall-html: install-html-am\n\ninstall-html-am:\n\ninstall-info: install-info-am\n\ninstall-info-am:\n\ninstall-man:\n\ninstall-pdf: install-pdf-am\n\ninstall-pdf-am:\n\ninstall-ps: install-ps-am\n\ninstall-ps-am:\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\tmostlyclean-libtool\n\npdf: pdf-am\n\npdf-am:\n\nps: ps-am\n\nps-am:\n\nuninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \\\n\tuninstall-includeHEADERS uninstall-libLTLIBRARIES\n\n.MAKE: install-am install-strip\n\n.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \\\n\tclean-binPROGRAMS clean-generic clean-libLTLIBRARIES \\\n\tclean-libtool cscopelist-am ctags ctags-am distclean \\\n\tdistclean-compile distclean-generic distclean-libtool \\\n\tdistclean-tags distdir dvi dvi-am html html-am info info-am \\\n\tinstall install-am install-binPROGRAMS install-binSCRIPTS \\\n\tinstall-data install-data-am install-dvi install-dvi-am \\\n\tinstall-exec install-exec-am install-html install-html-am \\\n\tinstall-includeHEADERS install-info install-info-am \\\n\tinstall-libLTLIBRARIES install-man install-pdf install-pdf-am \\\n\tinstall-ps install-ps-am install-strip installcheck \\\n\tinstallcheck-am installdirs maintainer-clean \\\n\tmaintainer-clean-generic mostlyclean mostlyclean-compile \\\n\tmostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \\\n\ttags tags-am uninstall uninstall-am uninstall-binPROGRAMS \\\n\tuninstall-binSCRIPTS uninstall-includeHEADERS \\\n\tuninstall-libLTLIBRARIES\n\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": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/acl.c",
    "content": "/*\n * acl.c - Manage the ACL (Access Control List)\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <ipset/ipset.h>\n\n#include \"utils.h\"\n#include \"acl.h\"\n\nstatic struct ip_set acl_ipv4_set;\nstatic struct ip_set acl_ipv6_set;\n\nstatic int acl_mode = BLACK_LIST;\n\nstatic void parse_addr_cidr(const char *str, char *host, int *cidr)\n{\n    int ret = -1, n = 0;\n    char *pch;\n\n    pch = strchr(str, '/');\n    while (pch != NULL) {\n        n++;\n        ret = pch - str;\n        pch = strchr(pch + 1, '/');\n    }\n    if (ret == -1) {\n        strcpy(host, str);\n        *cidr = -1;\n    } else {\n        memcpy(host, str, ret);\n        host[ret] = '\\0';\n        *cidr     = atoi(str + ret + 1);\n    }\n}\n\nint init_acl(const char *path, int mode)\n{\n    acl_mode = mode;\n\n    // initialize ipset\n    ipset_init_library();\n    ipset_init(&acl_ipv4_set);\n    ipset_init(&acl_ipv6_set);\n\n    FILE *f = fopen(path, \"r\");\n    if (f == NULL) {\n        LOGE(\"Invalid acl path.\");\n        return -1;\n    }\n\n    char line[257];\n    while (!feof(f))\n        if (fgets(line, 256, f)) {\n            // Trim the newline\n            int len = strlen(line);\n            if (len > 0 && line[len - 1] == '\\n') {\n                line[len - 1] = '\\0';\n            }\n\n            char host[257];\n            int cidr;\n            parse_addr_cidr(line, host, &cidr);\n\n            struct cork_ip addr;\n            int err = cork_ip_init(&addr, host);\n            if (!err) {\n                if (addr.version == 4) {\n                    if (cidr >= 0) {\n                        ipset_ipv4_add_network(&acl_ipv4_set, &(addr.ip.v4), cidr);\n                    } else {\n                        ipset_ipv4_add(&acl_ipv4_set, &(addr.ip.v4));\n                    }\n                } else if (addr.version == 6) {\n                    if (cidr >= 0) {\n                        ipset_ipv6_add_network(&acl_ipv6_set, &(addr.ip.v6), cidr);\n                    } else {\n                        ipset_ipv6_add(&acl_ipv6_set, &(addr.ip.v6));\n                    }\n                }\n            }\n        }\n\n    fclose(f);\n\n    return 0;\n}\n\nvoid free_acl(void)\n{\n    ipset_done(&acl_ipv4_set);\n    ipset_done(&acl_ipv6_set);\n}\n\nint acl_get_mode(void)\n{\n    return acl_mode;\n}\n\nint acl_match_ip(const char *ip)\n{\n    struct cork_ip addr;\n    int ret = cork_ip_init(&addr, ip);\n    if (ret) {\n        return 0;\n    }\n\n    if (addr.version == 4) {\n        ret = ipset_contains_ipv4(&acl_ipv4_set, &(addr.ip.v4));\n    } else if (addr.version == 6) {\n        ret = ipset_contains_ipv6(&acl_ipv6_set, &(addr.ip.v6));\n    }\n\n    if (acl_mode == WHITE_LIST) {\n        ret = !ret;\n    }\n\n    return ret;\n}\n\nint acl_add_ip(const char *ip)\n{\n    struct cork_ip addr;\n    int err = cork_ip_init(&addr, ip);\n    if (err) {\n        return -1;\n    }\n\n    if (addr.version == 4) {\n        ipset_ipv4_add(&acl_ipv4_set, &(addr.ip.v4));\n    } else if (addr.version == 6) {\n        ipset_ipv6_add(&acl_ipv6_set, &(addr.ip.v6));\n    }\n\n    return 0;\n}\n\nint acl_remove_ip(const char *ip)\n{\n    struct cork_ip addr;\n    int err = cork_ip_init(&addr, ip);\n    if (err) {\n        return -1;\n    }\n\n    if (addr.version == 4) {\n        ipset_ipv4_remove(&acl_ipv4_set, &(addr.ip.v4));\n    } else if (addr.version == 6) {\n        ipset_ipv6_remove(&acl_ipv6_set, &(addr.ip.v6));\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/acl.h",
    "content": "/*\n * acl.h - Define the ACL interface\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _ACL_H\n#define _ACL_H\n\n#define BLACK_LIST 0\n#define WHITE_LIST 1\n\nint init_acl(const char *path, int mode);\nvoid free_acl(void);\n\nint acl_get_mode(void);\nint acl_match_ip(const char *ip);\nint acl_add_ip(const char *ip);\nint acl_remove_ip(const char *ip);\n\n#endif // _ACL_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/android.c",
    "content": "/*\n * android.c - Setup IPC for shadowsocks-android\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <unistd.h>\n\n#include <errno.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <netinet/tcp.h>\n\n#include <sys/un.h>\n#include <ancillary.h>\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"netutils.h\"\n#include \"utils.h\"\n\nextern char *prefix;\n\nint protect_socket(int fd)\n{\n    int sock;\n    struct sockaddr_un addr;\n\n    if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {\n        LOGE(\"[android] socket() failed: %s (socket fd = %d)\\n\", strerror(errno), sock);\n        return -1;\n    }\n\n    // Set timeout to 1s\n    struct timeval tv;\n    tv.tv_sec  = 1;\n    tv.tv_usec = 0;\n    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));\n    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval));\n\n    char path[257];\n    sprintf(path, \"%s/protect_path\", prefix);\n\n    memset(&addr, 0, sizeof(addr));\n    addr.sun_family = AF_UNIX;\n    strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);\n\n    if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {\n        LOGE(\"[android] connect() failed: %s (socket fd = %d), path: %s\\n\",\n             strerror(errno), sock, path);\n        close(sock);\n        return -1;\n    }\n\n    if (ancil_send_fd(sock, fd)) {\n        ERROR(\"[android] ancil_send_fd\");\n        close(sock);\n        return -1;\n    }\n\n    char ret = 0;\n\n    if (recv(sock, &ret, 1, 0) == -1) {\n        ERROR(\"[android] recv\");\n        close(sock);\n        return -1;\n    }\n\n    close(sock);\n    return ret;\n}\n\nint send_traffic_stat(uint64_t tx, uint64_t rx)\n{\n    int sock;\n    struct sockaddr_un addr;\n\n    if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {\n        LOGE(\"[android] socket() failed: %s (socket fd = %d)\\n\", strerror(errno), sock);\n        return -1;\n    }\n\n    // Set timeout to 1s\n    struct timeval tv;\n    tv.tv_sec  = 1;\n    tv.tv_usec = 0;\n    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));\n    setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval));\n\n    char path[257];\n    sprintf(path, \"%s/stat_path\", prefix);\n\n    memset(&addr, 0, sizeof(addr));\n    addr.sun_family = AF_UNIX;\n    strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1);\n\n    if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == -1) {\n        LOGE(\"[android] connect() failed: %s (socket fd = %d), path: %s\\n\",\n             strerror(errno), sock, path);\n        close(sock);\n        return -1;\n    }\n\n    uint64_t stat[2] = { tx, rx };\n\n    if (send(sock, stat, sizeof(stat), 0) == -1) {\n        ERROR(\"[android] send\");\n        close(sock);\n        return -1;\n    }\n\n    char ret = 0;\n\n    if (recv(sock, &ret, 1, 0) == -1) {\n        ERROR(\"[android] recv\");\n        close(sock);\n        return -1;\n    }\n\n    close(sock);\n    return ret;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/auth.c",
    "content": "#include <stdlib.h>\n#include \"auth.h\"\n#include \"encrypt.h\"\n#include \"crc32.h\"\n\nstatic int auth_simple_pack_unit_size = 2000;\n\ntypedef struct auth_simple_global_data {\n    uint8_t local_client_id[8];\n    uint32_t connection_id;\n}auth_simple_global_data;\n\ntypedef struct auth_simple_local_data {\n    int has_sent_header;\n    char * recv_buffer;\n    int recv_buffer_size;\n}auth_simple_local_data;\n\nvoid auth_simple_local_data_init(auth_simple_local_data* local) {\n    local->has_sent_header = 0;\n    local->recv_buffer = (char*)malloc(16384);\n    local->recv_buffer_size = 0;\n}\n\nvoid * auth_simple_init_data() {\n    auth_simple_global_data *global = (auth_simple_global_data*)malloc(sizeof(auth_simple_global_data));\n    rand_bytes(global->local_client_id, 8);\n    rand_bytes((uint8_t*)&global->connection_id, 4);\n    global->connection_id &= 0xFFFFFF;\n    return global;\n}\n\nobfs * auth_simple_new_obfs() {\n    obfs * self = new_obfs();\n    self->l_data = malloc(sizeof(auth_simple_local_data));\n    auth_simple_local_data_init((auth_simple_local_data*)self->l_data);\n    return self;\n}\n\nvoid auth_simple_dispose(obfs *self) {\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    if (local->recv_buffer != NULL) {\n        free(local->recv_buffer);\n        local->recv_buffer = NULL;\n    }\n    free(local);\n    self->l_data = NULL;\n    dispose_obfs(self);\n}\n\nint auth_simple_pack_data(char *data, int datalength, char *outdata) {\n    unsigned char rand_len = (xorshift128plus() & 0xF) + 1;\n    int out_size = rand_len + datalength + 6;\n    outdata[0] = out_size >> 8;\n    outdata[1] = out_size;\n    outdata[2] = rand_len;\n    memmove(outdata + rand_len + 2, data, datalength);\n    fillcrc32((unsigned char *)outdata, out_size);\n    return out_size;\n}\n\nvoid memintcopy_lt(void *mem, uint32_t val) {\n    ((uint8_t *)mem)[0] = val;\n    ((uint8_t *)mem)[1] = val >> 8;\n    ((uint8_t *)mem)[2] = val >> 16;\n    ((uint8_t *)mem)[3] = val >> 24;\n}\n\nint auth_simple_pack_auth_data(auth_simple_global_data *global, char *data, int datalength, char *outdata) {\n    unsigned char rand_len = (xorshift128plus() & 0xF) + 1;\n    int out_size = rand_len + datalength + 6 + 12;\n    outdata[0] = out_size >> 8;\n    outdata[1] = out_size;\n    outdata[2] = rand_len;\n    ++global->connection_id;\n    if (global->connection_id > 0xFF000000) {\n        rand_bytes(global->local_client_id, 8);\n        rand_bytes((uint8_t*)&global->connection_id, 4);\n        global->connection_id &= 0xFFFFFF;\n    }\n    time_t t = time(NULL);\n    memintcopy_lt(outdata + rand_len + 2, t);\n    memmove(outdata + rand_len + 2 + 4, global->local_client_id, 4);\n    memintcopy_lt(outdata + rand_len + 2 + 8, global->connection_id);\n    memmove(outdata + rand_len + 2 + 12, data, datalength);\n    fillcrc32((unsigned char *)outdata, out_size);\n    return out_size;\n}\n\nint auth_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    char * out_buffer = (char*)malloc(datalength * 2 + 64);\n    char * buffer = out_buffer;\n    char * data = plaindata;\n    int len = datalength;\n    int pack_len;\n    if (len > 0 && local->has_sent_header == 0) {\n        int head_size = get_head_size(plaindata, datalength, 30);\n        if (head_size > datalength)\n            head_size = datalength;\n        pack_len = auth_simple_pack_auth_data((auth_simple_global_data *)self->server.g_data, data, head_size, buffer);\n        buffer += pack_len;\n        data += head_size;\n        len -= head_size;\n        local->has_sent_header = 1;\n    }\n    while ( len > auth_simple_pack_unit_size ) {\n        pack_len = auth_simple_pack_data(data, auth_simple_pack_unit_size, buffer);\n        buffer += pack_len;\n        data += auth_simple_pack_unit_size;\n        len -= auth_simple_pack_unit_size;\n    }\n    if (len > 0) {\n        pack_len = auth_simple_pack_data(data, len, buffer);\n        buffer += pack_len;\n    }\n    len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\nint auth_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;\n    if (local->recv_buffer_size + datalength > 16384)\n        return -1;\n    memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);\n    local->recv_buffer_size += datalength;\n\n    char * out_buffer = (char*)malloc(local->recv_buffer_size);\n    char * buffer = out_buffer;\n    while (local->recv_buffer_size > 2) {\n        int length = ((int)recv_buffer[0] << 8) | recv_buffer[1];\n        if (length >= 8192 || length < 7) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        if (length > local->recv_buffer_size)\n            break;\n\n        int crc = crc32((unsigned char*)recv_buffer, length);\n        if (crc != -1) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        int data_size = length - recv_buffer[2] - 6;\n        memmove(buffer, recv_buffer + 2 + recv_buffer[2], data_size);\n        buffer += data_size;\n        memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length);\n    }\n    int len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\n\nint auth_sha1_pack_data(char *data, int datalength, char *outdata) {\n    unsigned char rand_len = (xorshift128plus() & 0xF) + 1;\n    int out_size = rand_len + datalength + 6;\n    outdata[0] = out_size >> 8;\n    outdata[1] = out_size;\n    outdata[2] = rand_len;\n    memmove(outdata + rand_len + 2, data, datalength);\n    filladler32((unsigned char *)outdata, out_size);\n    return out_size;\n}\n\nint auth_sha1_pack_auth_data(auth_simple_global_data *global, server_info *server, char *data, int datalength, char *outdata) {\n    unsigned char rand_len = (xorshift128plus() & 0x7F) + 1;\n    int data_offset = rand_len + 4 + 2;\n    int out_size = data_offset + datalength + 12 + OBFS_HMAC_SHA1_LEN;\n    fillcrc32to((unsigned char *)server->key, server->key_len, (unsigned char *)outdata);\n    outdata[4] = out_size >> 8;\n    outdata[5] = out_size;\n    outdata[6] = rand_len;\n    ++global->connection_id;\n    if (global->connection_id > 0xFF000000) {\n        rand_bytes(global->local_client_id, 8);\n        rand_bytes((uint8_t*)&global->connection_id, 4);\n        global->connection_id &= 0xFFFFFF;\n    }\n    time_t t = time(NULL);\n    memintcopy_lt(outdata + data_offset, t);\n    memmove(outdata + data_offset + 4, global->local_client_id, 4);\n    memintcopy_lt(outdata + data_offset + 8, global->connection_id);\n    memmove(outdata + data_offset + 12, data, datalength);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    ss_sha1_hmac(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, server->iv);\n    memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN);\n    return out_size;\n}\n\nint auth_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    char * out_buffer = (char*)malloc(datalength * 2 + 256);\n    char * buffer = out_buffer;\n    char * data = plaindata;\n    int len = datalength;\n    int pack_len;\n    if (len > 0 && local->has_sent_header == 0) {\n        int head_size = get_head_size(plaindata, datalength, 30);\n        if (head_size > datalength)\n            head_size = datalength;\n        pack_len = auth_sha1_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, data, head_size, buffer);\n        buffer += pack_len;\n        data += head_size;\n        len -= head_size;\n        local->has_sent_header = 1;\n    }\n    while ( len > auth_simple_pack_unit_size ) {\n        pack_len = auth_sha1_pack_data(data, auth_simple_pack_unit_size, buffer);\n        buffer += pack_len;\n        data += auth_simple_pack_unit_size;\n        len -= auth_simple_pack_unit_size;\n    }\n    if (len > 0) {\n        pack_len = auth_sha1_pack_data(data, len, buffer);\n        buffer += pack_len;\n    }\n    len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\nint auth_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;\n    if (local->recv_buffer_size + datalength > 16384)\n        return -1;\n    memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);\n    local->recv_buffer_size += datalength;\n\n    char * out_buffer = (char*)malloc(local->recv_buffer_size);\n    char * buffer = out_buffer;\n    while (local->recv_buffer_size > 2) {\n        int length = ((int)recv_buffer[0] << 8) | recv_buffer[1];\n        if (length >= 8192 || length < 7) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        if (length > local->recv_buffer_size)\n            break;\n\n        if (checkadler32((unsigned char*)recv_buffer, length) == 0) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        int pos = recv_buffer[2] + 2;\n        int data_size = length - pos - 4;\n        memmove(buffer, recv_buffer + pos, data_size);\n        buffer += data_size;\n        memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length);\n    }\n    int len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\nint auth_sha1_v2_pack_data(char *data, int datalength, char *outdata) {\n    unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1;\n    int out_size = rand_len + datalength + 6;\n    outdata[0] = out_size >> 8;\n    outdata[1] = out_size;\n    if (rand_len < 128)\n    {\n        outdata[2] = rand_len;\n    }\n    else\n    {\n        outdata[2] = 0xFF;\n        outdata[3] = rand_len >> 8;\n        outdata[4] = rand_len;\n    }\n    memmove(outdata + rand_len + 2, data, datalength);\n    filladler32((unsigned char *)outdata, out_size);\n    return out_size;\n}\n\nint auth_sha1_v2_pack_auth_data(auth_simple_global_data *global, server_info *server, char *data, int datalength, char *outdata) {\n    unsigned int rand_len = (datalength > 1300 ? 0 : datalength > 400 ? (xorshift128plus() & 0x7F) : (xorshift128plus() & 0x3FF)) + 1;\n    int data_offset = rand_len + 4 + 2;\n    int out_size = data_offset + datalength + 12 + OBFS_HMAC_SHA1_LEN;\n    const char* salt = \"auth_sha1_v2\";\n    int salt_len = strlen(salt);\n    unsigned char *crc_salt = (unsigned char*)malloc(salt_len + server->key_len);\n    memcpy(crc_salt, salt, salt_len);\n    memcpy(crc_salt + salt_len, server->key, server->key_len);\n    fillcrc32to(crc_salt, salt_len + server->key_len, (unsigned char *)outdata);\n    free(crc_salt);\n    outdata[4] = out_size >> 8;\n    outdata[5] = out_size;\n    if (rand_len < 128)\n    {\n        outdata[6] = rand_len;\n    }\n    else\n    {\n        outdata[6] = 0xFF;\n        outdata[7] = rand_len >> 8;\n        outdata[8] = rand_len;\n    }\n    ++global->connection_id;\n    if (global->connection_id > 0xFF000000) {\n        rand_bytes(global->local_client_id, 8);\n        rand_bytes((uint8_t*)&global->connection_id, 4);\n        global->connection_id &= 0xFFFFFF;\n    }\n    memmove(outdata + data_offset, global->local_client_id, 8);\n    memintcopy_lt(outdata + data_offset + 8, global->connection_id);\n    memmove(outdata + data_offset + 12, data, datalength);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    ss_sha1_hmac(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, server->iv);\n    memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN);\n    return out_size;\n}\n\nint auth_sha1_v2_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    char * out_buffer = (char*)malloc(datalength * 2 + 4096);\n    char * buffer = out_buffer;\n    char * data = plaindata;\n    int len = datalength;\n    int pack_len;\n    if (len > 0 && local->has_sent_header == 0) {\n        int head_size = get_head_size(plaindata, datalength, 30);\n        if (head_size > datalength)\n            head_size = datalength;\n        pack_len = auth_sha1_v2_pack_auth_data((auth_simple_global_data *)self->server.g_data, &self->server, data, head_size, buffer);\n        buffer += pack_len;\n        data += head_size;\n        len -= head_size;\n        local->has_sent_header = 1;\n    }\n    while ( len > auth_simple_pack_unit_size ) {\n        pack_len = auth_sha1_v2_pack_data(data, auth_simple_pack_unit_size, buffer);\n        buffer += pack_len;\n        data += auth_simple_pack_unit_size;\n        len -= auth_simple_pack_unit_size;\n    }\n    if (len > 0) {\n        pack_len = auth_sha1_v2_pack_data(data, len, buffer);\n        buffer += pack_len;\n    }\n    len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\nint auth_sha1_v2_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity) {\n    char *plaindata = *pplaindata;\n    auth_simple_local_data *local = (auth_simple_local_data*)self->l_data;\n    uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;\n    if (local->recv_buffer_size + datalength > 16384)\n        return -1;\n    memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);\n    local->recv_buffer_size += datalength;\n\n    char * out_buffer = (char*)malloc(local->recv_buffer_size);\n    char * buffer = out_buffer;\n    while (local->recv_buffer_size > 2) {\n        int length = ((int)recv_buffer[0] << 8) | recv_buffer[1];\n        if (length >= 8192 || length < 7) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        if (length > local->recv_buffer_size)\n            break;\n\n        if (checkadler32((unsigned char*)recv_buffer, length) == 0) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        int pos = recv_buffer[2];\n        if (pos < 255)\n        {\n            pos += 2;\n        }\n        else\n        {\n            pos = ((recv_buffer[3] << 8) | recv_buffer[4]) + 2;\n        }\n        int data_size = length - pos - 4;\n        memmove(buffer, recv_buffer + pos, data_size);\n        buffer += data_size;\n        memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length);\n    }\n    int len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/auth.h",
    "content": "/*\n * auth.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _AUTH_H\n#define _AUTH_H\n\n#include <obfs.h>\n\nvoid * auth_simple_init_data();\nobfs * auth_simple_new_obfs();\nvoid auth_simple_dispose(obfs *self);\n\nint auth_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\nint auth_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\n\n\nint auth_sha1_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\nint auth_sha1_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\n\nint auth_sha1_v2_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\nint auth_sha1_v2_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\n\n#endif // _AUTH_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/cache.c",
    "content": "/*\n * cache.c - Manage the connection cache for UDPRELAY\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Original Author:  Oliver Lorenz (ol), olli@olorenz.org, https://olorenz.org\n * License:  This is licensed under the same terms as uthash itself\n */\n\n#include <errno.h>\n#include <stdlib.h>\n\n#include \"cache.h\"\n#include \"utils.h\"\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n/** Creates a new cache object\n *\n *  @param dst\n *  Where the newly allocated cache object will be stored in\n *\n *  @param capacity\n *  The maximum number of elements this cache object can hold\n *\n *  @return EINVAL if dst is NULL, ENOMEM if malloc fails, 0 otherwise\n */\nint cache_create(struct cache **dst, const size_t capacity,\n                 void (*free_cb)(void *element))\n{\n    struct cache *new = NULL;\n\n    if (!dst) {\n        return EINVAL;\n    }\n\n    if ((new = malloc(sizeof(*new))) == NULL) {\n        return ENOMEM;\n    }\n\n    new->max_entries = capacity;\n    new->entries     = NULL;\n    new->free_cb     = free_cb;\n    *dst             = new;\n    return 0;\n}\n\n/** Frees an allocated cache object\n *\n *  @param cache\n *  The cache object to free\n *\n *  @param keep_data\n *  Whether to free contained data or just delete references to it\n *\n *  @return EINVAL if cache is NULL, 0 otherwise\n */\nint cache_delete(struct cache *cache, int keep_data)\n{\n    struct cache_entry *entry, *tmp;\n\n    if (!cache) {\n        return EINVAL;\n    }\n\n    if (keep_data) {\n        HASH_CLEAR(hh, cache->entries);\n    } else {\n        HASH_ITER(hh, cache->entries, entry, tmp){\n            HASH_DEL(cache->entries, entry);\n            if (entry->data != NULL) {\n                if (cache->free_cb) {\n                    cache->free_cb(entry->data);\n                }\n            }\n            ss_free(entry->key);\n            ss_free(entry);\n        }\n    }\n\n    ss_free(cache);\n    return 0;\n}\n\n/** Removes a cache entry\n *\n *  @param cache\n *  The cache object\n *\n *  @param key\n *  The key of the entry to remove\n *\n *  @param key_len\n *  The length of key\n *\n *  @return EINVAL if cache is NULL, 0 otherwise\n */\nint cache_remove(struct cache *cache, char *key, size_t key_len)\n{\n    struct cache_entry *tmp;\n\n    if (!cache || !key) {\n        return EINVAL;\n    }\n\n    HASH_FIND(hh, cache->entries, key, key_len, tmp);\n\n    if (tmp) {\n        HASH_DEL(cache->entries, tmp);\n        if (tmp->data != NULL) {\n            if (cache->free_cb) {\n                cache->free_cb(tmp->data);\n            } else {\n                ss_free(tmp->data);\n            }\n        }\n        ss_free(tmp->key);\n        ss_free(tmp);\n    }\n\n    return 0;\n}\n\n/** Checks if a given key is in the cache\n *\n *  @param cache\n *  The cache object\n *\n *  @param key\n *  The key to look-up\n *\n *  @param key_len\n *  The length of key\n *\n *  @param result\n *  Where to store the result if key is found.\n *\n *  A warning: Even though result is just a pointer,\n *  you have to call this function with a **ptr,\n *  otherwise this will blow up in your face.\n *\n *  @return EINVAL if cache is NULL, 0 otherwise\n */\nint cache_lookup(struct cache *cache, char *key, size_t key_len, void *result)\n{\n    struct cache_entry *tmp = NULL;\n    char **dirty_hack       = result;\n\n    if (!cache || !key || !result) {\n        return EINVAL;\n    }\n\n    HASH_FIND(hh, cache->entries, key, key_len, tmp);\n    if (tmp) {\n        HASH_DELETE(hh, cache->entries, tmp);\n        HASH_ADD_KEYPTR(hh, cache->entries, tmp->key, key_len, tmp);\n        *dirty_hack = tmp->data;\n    } else {\n        *dirty_hack = result = NULL;\n    }\n\n    return 0;\n}\n\nint cache_key_exist(struct cache *cache, char *key, size_t key_len)\n{\n    struct cache_entry *tmp = NULL;\n\n    if (!cache || !key) {\n        return 0;\n    }\n\n    HASH_FIND(hh, cache->entries, key, key_len, tmp);\n    if (tmp) {\n        HASH_DELETE(hh, cache->entries, tmp);\n        HASH_ADD_KEYPTR(hh, cache->entries, tmp->key, key_len, tmp);\n        return 1;\n    } else {\n        return 0;\n    }\n\n    return 0;\n}\n\n/** Inserts a given <key, value> pair into the cache\n *\n *  @param cache\n *  The cache object\n *\n *  @param key\n *  The key that identifies <value>\n *\n *  @param key_len\n *  The length of key\n *\n *  @param data\n *  Data associated with <key>\n *\n *  @return EINVAL if cache is NULL, ENOMEM if malloc fails, 0 otherwise\n */\nint cache_insert(struct cache *cache, char *key, size_t key_len, void *data)\n{\n    struct cache_entry *entry     = NULL;\n    struct cache_entry *tmp_entry = NULL;\n\n    if (!cache) {\n        return EINVAL;\n    }\n\n    if ((entry = malloc(sizeof(*entry))) == NULL) {\n        return ENOMEM;\n    }\n\n    entry->key = ss_malloc(key_len);\n    memcpy(entry->key, key, key_len);\n    entry->data = data;\n    HASH_ADD_KEYPTR(hh, cache->entries, entry->key, key_len, entry);\n\n    if (HASH_COUNT(cache->entries) >= cache->max_entries) {\n        HASH_ITER(hh, cache->entries, entry, tmp_entry){\n            HASH_DELETE(hh, cache->entries, entry);\n            if (entry->data != NULL) {\n                if (cache->free_cb) {\n                    cache->free_cb(entry->data);\n                } else {\n                    ss_free(entry->data);\n                }\n            }\n            ss_free(entry->key);\n            ss_free(entry);\n            break;\n        }\n    }\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/cache.h",
    "content": "/*\n * cache.h - Define the cache manager interface\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n/*\n * Original Author:  Oliver Lorenz (ol), olli@olorenz.org, https://olorenz.org\n * License:  This is licensed under the same terms as uthash itself\n */\n\n#ifndef _CACHE_\n#define _CACHE_\n\n#include \"uthash.h\"\n\n/**\n * A cache entry\n */\nstruct cache_entry {\n    char *key;         /**<The key */\n    void *data;        /**<Payload */\n    UT_hash_handle hh; /**<Hash Handle for uthash */\n};\n\n/**\n * A cache object\n */\nstruct cache {\n    size_t max_entries;              /**<Amount of entries this cache object can hold */\n    struct cache_entry *entries;     /**<Head pointer for uthash */\n    void (*free_cb) (void *element); /**<Callback function to free cache entries */\n};\n\nextern int cache_create(struct cache **dst, const size_t capacity,\n                        void (*free_cb)(void *element));\nextern int cache_delete(struct cache *cache, int keep_data);\nextern int cache_lookup(struct cache *cache, char *key, size_t key_len, void *result);\nextern int cache_insert(struct cache *cache, char *key, size_t key_len, void *data);\nextern int cache_remove(struct cache *cache, char *key, size_t key_len);\nextern int cache_key_exist(struct cache *cache, char *key, size_t key_len);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/common.h",
    "content": "/*\n * common.h - Provide global definitions\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _COMMON_H\n#define _COMMON_H\n\n#define DEFAULT_CONF_PATH \"/etc/shadowsocks-libev/config.json\"\n\n#ifndef SOL_TCP\n#define SOL_TCP IPPROTO_TCP\n#endif\n\n#if defined(MODULE_TUNNEL) || defined(MODULE_REDIR)\n#define MODULE_LOCAL\n#endif\n\nint init_udprelay(const char *server_host, const char *server_port,\n#ifdef MODULE_LOCAL\n                  const struct sockaddr *remote_addr, const int remote_addr_len,\n#ifdef MODULE_TUNNEL\n                  const ss_addr_t tunnel_addr,\n#endif\n#endif\n                  int mtu, int method, int auth, int timeout, const char *iface);\n\nvoid free_udprelay(void);\n\n#ifdef ANDROID\nint protect_socket(int fd);\nint send_traffic_stat(uint64_t tx, uint64_t rx);\n#endif\n\n#endif // _COMMON_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/crc32.c",
    "content": "#include <stdlib.h>\n\nstatic uint32_t crc32_table[256] = {0};\n\nvoid init_crc32_table(void) {\n    uint32_t c, i, j;\n    if (crc32_table[0] == 0) {\n        for (i = 0; i < 256; i++) {\n            c = i;\n            for (j = 0; j < 8; j++) {\n                if (c & 1)\n                    c = 0xedb88320L ^ (c >> 1);\n                else\n                    c = c >> 1;\n            }\n            crc32_table[i] = c;\n        }\n    }\n}\n\nuint32_t crc32(unsigned char *buffer, unsigned int size) {\n    uint32_t crc = 0xFFFFFFFF;\n    unsigned int i;\n    for (i = 0; i < size; i++) {\n        crc = crc32_table[(crc ^ buffer[i]) & 0xFF] ^ (crc >> 8);\n    }\n    return crc ^ 0xFFFFFFFF;\n}\n\nvoid fillcrc32to(unsigned char *buffer, unsigned int size, unsigned char *outbuffer) {\n    uint32_t crc = 0xFFFFFFFF;\n    unsigned int i;\n    for (i = 0; i < size; i++) {\n        crc = crc32_table[(crc ^ buffer[i]) & 0xff] ^ (crc >> 8);\n    }\n    crc ^= 0xFFFFFFFF;\n    outbuffer[0] = crc;\n    outbuffer[1] = crc >> 8;\n    outbuffer[2] = crc >> 16;\n    outbuffer[3] = crc >> 24;\n}\n\nvoid fillcrc32(unsigned char *buffer, unsigned int size) {\n    uint32_t crc = 0xFFFFFFFF;\n    unsigned int i;\n    size -= 4;\n    for (i = 0; i < size; i++) {\n        crc = crc32_table[(crc ^ buffer[i]) & 0xff] ^ (crc >> 8);\n    }\n    buffer += size;\n    buffer[0] = crc;\n    buffer[1] = crc >> 8;\n    buffer[2] = crc >> 16;\n    buffer[3] = crc >> 24;\n}\n\nvoid adler32_short(unsigned char *buffer, unsigned int size, uint32_t *a, uint32_t *b) {\n    for (int i = 0; i < size; i++) {\n        *a += buffer[i];\n        *b += *a;\n    }\n    *a %= 65521;\n    *b %= 65521;\n}\n\n#define NMAX 5552\nuint32_t adler32(unsigned char *buffer, unsigned int size) {\n    uint32_t a = 1;\n    uint32_t b = 0;\n    while ( size >= NMAX ) {\n        adler32_short(buffer, NMAX, &a, &b);\n        buffer += NMAX;\n        size -= NMAX;\n    }\n    adler32_short(buffer, size, &a, &b);\n    return (b << 16) + a;\n}\n#undef NMAX\n\nvoid filladler32(unsigned char *buffer, unsigned int size) {\n    size -= 4;\n    uint32_t checksum = adler32(buffer, size);\n    buffer += size;\n    buffer[0] = checksum;\n    buffer[1] = checksum >> 8;\n    buffer[2] = checksum >> 16;\n    buffer[3] = checksum >> 24;\n}\n\nint checkadler32(unsigned char *buffer, unsigned int size) {\n    size -= 4;\n    uint32_t checksum = adler32(buffer, size);\n    buffer += size;\n    return checksum == (((uint32_t)buffer[3] << 24)\n            | ((uint32_t)buffer[2] << 16)\n            | ((uint32_t)buffer[1] << 8)\n            | (uint32_t)buffer[0]);\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/crc32.h",
    "content": "//\n//  crc32.h\n//  ShadowPath\n//\n//  Created by LEI on 7/7/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#ifndef crc32_h\n#define crc32_h\n\nvoid init_crc32_table(void);\n\nvoid fillcrc32to(unsigned char *buffer, unsigned int size, unsigned char *outbuffer);\n\nvoid fillcrc32(unsigned char *buffer, unsigned int size);\n\nuint32_t crc32(unsigned char *buffer, unsigned int size);\n\nvoid filladler32(unsigned char *buffer, unsigned int size);\n\nint checkadler32(unsigned char *buffer, unsigned int size);\n\n#endif /* crc32_h */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/encrypt.c",
    "content": "/*\n * encrypt.c - Manage the global encryptor\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <stdint.h>\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#if defined(USE_CRYPTO_OPENSSL)\n\n#include <openssl/md5.h>\n#include <openssl/rand.h>\n#include <openssl/hmac.h>\n\n#elif defined(USE_CRYPTO_POLARSSL)\n\n#include <polarssl/md5.h>\n#include <polarssl/sha1.h>\n#include <polarssl/entropy.h>\n#include <polarssl/ctr_drbg.h>\n#include <polarssl/version.h>\n#define CIPHER_UNSUPPORTED \"unsupported\"\n\n#include <time.h>\n#ifdef _WIN32\n#include <windows.h>\n#include <wincrypt.h>\n#else\n#include <stdio.h>\n#endif\n\n#elif defined(USE_CRYPTO_MBEDTLS)\n\n#include <mbedtls/md5.h>\n#include <mbedtls/entropy.h>\n#include <mbedtls/ctr_drbg.h>\n#include <mbedtls/version.h>\n#define CIPHER_UNSUPPORTED \"unsupported\"\n\n#include <time.h>\n#ifdef _WIN32\n#include <windows.h>\n#include <wincrypt.h>\n#else\n#include <stdio.h>\n#endif\n\n#endif\n\n#include <sodium.h>\n\n#ifndef __MINGW32__\n#include <arpa/inet.h>\n#endif\n\n#include \"cache.h\"\n#include \"encrypt.h\"\n#include \"utils.h\"\n\n#define OFFSET_ROL(p, o) ((uint64_t)(*(p + o)) << (8 * o))\n\nstatic uint8_t *enc_table;\nstatic uint8_t *dec_table;\nstatic uint8_t enc_key[MAX_KEY_LENGTH];\nstatic int enc_key_len;\nstatic int enc_iv_len;\nstatic int enc_method;\n\nstatic struct cache *iv_cache;\n\n#ifdef SS_DEBUG\nstatic void dump(char *tag, char *text, int len)\n{\n    int i;\n    printf(\"%s: \", tag);\n    for (i = 0; i < len; i++)\n        printf(\"0x%02x \", (uint8_t)text[i]);\n    printf(\"\\n\");\n}\n\n#endif\n\nstatic const char *supported_ciphers[CIPHER_NUM] = {\n    \"table\",\n    \"rc4\",\n    \"rc4-md5-6\",\n    \"rc4-md5\",\n    \"aes-128-cfb\",\n    \"aes-192-cfb\",\n    \"aes-256-cfb\",\n    \"aes-128-ctr\",\n    \"aes-192-ctr\",\n    \"aes-256-ctr\",\n    \"bf-cfb\",\n    \"camellia-128-cfb\",\n    \"camellia-192-cfb\",\n    \"camellia-256-cfb\",\n    \"cast5-cfb\",\n    \"des-cfb\",\n    \"idea-cfb\",\n    \"rc2-cfb\",\n    \"seed-cfb\",\n    \"salsa20\",\n    \"chacha20\",\n    \"chacha20-ietf\"\n};\n\n#ifdef USE_CRYPTO_POLARSSL\nstatic const char *supported_ciphers_polarssl[CIPHER_NUM] = {\n    \"table\",\n    \"ARC4-128\",\n    \"ARC4-128\",\n    \"ARC4-128\",\n    \"AES-128-CFB128\",\n    \"AES-192-CFB128\",\n    \"AES-256-CFB128\",\n    \"AES-128-CTR\",\n    \"AES-192-CTR\",\n    \"AES-256-CTR\",\n    \"BLOWFISH-CFB64\",\n    \"CAMELLIA-128-CFB128\",\n    \"CAMELLIA-192-CFB128\",\n    \"CAMELLIA-256-CFB128\",\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    \"salsa20\",\n    \"chacha20\",\n    \"chacha20-ietf\"\n};\n#endif\n\n#ifdef USE_CRYPTO_MBEDTLS\nstatic const char *supported_ciphers_mbedtls[CIPHER_NUM] = {\n    \"table\",\n    \"ARC4-128\",\n    \"ARC4-128\",\n    \"ARC4-128\",\n    \"AES-128-CFB128\",\n    \"AES-192-CFB128\",\n    \"AES-256-CFB128\",\n    \"AES-128-CTR\",\n    \"AES-192-CTR\",\n    \"AES-256-CTR\",\n    \"BLOWFISH-CFB64\",\n    \"CAMELLIA-128-CFB128\",\n    \"CAMELLIA-192-CFB128\",\n    \"CAMELLIA-256-CFB128\",\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    CIPHER_UNSUPPORTED,\n    \"salsa20\",\n    \"chacha20\",\n    \"chacha20-ietf\"\n};\n#endif\n\n#ifdef USE_CRYPTO_APPLECC\nstatic const CCAlgorithm supported_ciphers_applecc[CIPHER_NUM] = {\n    kCCAlgorithmInvalid,\n    kCCAlgorithmRC4,\n    kCCAlgorithmRC4,\n    kCCAlgorithmRC4,\n    kCCAlgorithmAES,\n    kCCAlgorithmAES,\n    kCCAlgorithmAES,\n    kCCAlgorithmAES,\n    kCCAlgorithmAES,\n    kCCAlgorithmAES,\n    kCCAlgorithmBlowfish,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmCAST,\n    kCCAlgorithmDES,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmRC2,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid\n};\n\nstatic const CCMode supported_modes_applecc[CIPHER_NUM] = {\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCModeRC4,\n    kCCModeRC4,\n    kCCModeCFB,\n    kCCModeCFB,\n    kCCModeCFB,\n    kCCModeCTR,\n    kCCModeCTR,\n    kCCModeCTR,\n    kCCModeCFB,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCModeCFB,\n    kCCModeCFB,\n    kCCModeCFB,\n    kCCModeCFB,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid,\n    kCCAlgorithmInvalid\n};\n#endif\n\nstatic const int supported_ciphers_iv_size[CIPHER_NUM] = {\n    0,  0,  6, 16, 16, 16, 16, 16, 16, 16,  8, 16, 16, 16,  8,  8,  8,  8, 16,  8,  8, 12\n};\n\nstatic const int supported_ciphers_key_size[CIPHER_NUM] = {\n    0, 16, 16, 16, 16, 24, 32, 16, 24, 32, 16, 16, 24, 32, 16,  8, 16, 16, 16, 32, 32, 32\n};\n\nstatic int safe_memcmp(const void *s1, const void *s2, size_t n)\n{\n    const unsigned char *_s1 = (const unsigned char *)s1;\n    const unsigned char *_s2 = (const unsigned char *)s2;\n    int ret                  = 0;\n    size_t i;\n    for (i = 0; i < n; i++)\n        ret |= _s1[i] ^ _s2[i];\n    return !!ret;\n}\n\nint balloc(buffer_t *ptr, size_t capacity)\n{\n    sodium_memzero(ptr, sizeof(buffer_t));\n    ptr->array    = ss_malloc(capacity);\n    ptr->capacity = capacity;\n    return capacity;\n}\n\nint brealloc(buffer_t *ptr, size_t len, size_t capacity)\n{\n    if (ptr == NULL)\n        return -1;\n    size_t real_capacity = max(len, capacity);\n    if (ptr->capacity < real_capacity) {\n        ptr->array    = ss_realloc(ptr->array, real_capacity);\n        ptr->capacity = real_capacity;\n    }\n    return real_capacity;\n}\n\nvoid bfree(buffer_t *ptr)\n{\n    if (ptr == NULL)\n        return;\n    ptr->idx      = 0;\n    ptr->len      = 0;\n    ptr->capacity = 0;\n    if (ptr->array != NULL) {\n        ss_free(ptr->array);\n    }\n}\n\nstatic int crypto_stream_xor_ic(uint8_t *c, const uint8_t *m, uint64_t mlen,\n                                const uint8_t *n, uint64_t ic, const uint8_t *k,\n                                int method)\n{\n    switch (method) {\n    case SALSA20:\n        return crypto_stream_salsa20_xor_ic(c, m, mlen, n, ic, k);\n    case CHACHA20:\n        return crypto_stream_chacha20_xor_ic(c, m, mlen, n, ic, k);\n    case CHACHA20IETF:\n        return crypto_stream_chacha20_ietf_xor_ic(c, m, mlen, n, (uint32_t)ic, k);\n    }\n    // always return 0\n    return 0;\n}\n\nstatic int random_compare(const void *_x, const void *_y, uint32_t i,\n                          uint64_t a)\n{\n    uint8_t x = *((uint8_t *)_x);\n    uint8_t y = *((uint8_t *)_y);\n    return a % (x + i) - a % (y + i);\n}\n\nstatic void merge(uint8_t *left, int llength, uint8_t *right,\n                  int rlength, uint32_t salt, uint64_t key)\n{\n    uint8_t *ltmp = (uint8_t *)malloc(llength * sizeof(uint8_t));\n    uint8_t *rtmp = (uint8_t *)malloc(rlength * sizeof(uint8_t));\n\n    uint8_t *ll = ltmp;\n    uint8_t *rr = rtmp;\n\n    uint8_t *result = left;\n\n    memcpy(ltmp, left, llength * sizeof(uint8_t));\n    memcpy(rtmp, right, rlength * sizeof(uint8_t));\n\n    while (llength > 0 && rlength > 0) {\n        if (random_compare(ll, rr, salt, key) <= 0) {\n            *result = *ll;\n            ++ll;\n            --llength;\n        } else {\n            *result = *rr;\n            ++rr;\n            --rlength;\n        }\n        ++result;\n    }\n\n    if (llength > 0) {\n        while (llength > 0) {\n            *result = *ll;\n            ++result;\n            ++ll;\n            --llength;\n        }\n    } else {\n        while (rlength > 0) {\n            *result = *rr;\n            ++result;\n            ++rr;\n            --rlength;\n        }\n    }\n\n    ss_free(ltmp);\n    ss_free(rtmp);\n}\n\nstatic void merge_sort(uint8_t array[], int length,\n                       uint32_t salt, uint64_t key)\n{\n    uint8_t middle;\n    uint8_t *left, *right;\n    int llength;\n\n    if (length <= 1) {\n        return;\n    }\n\n    middle = length / 2;\n\n    llength = length - middle;\n\n    left  = array;\n    right = array + llength;\n\n    merge_sort(left, llength, salt, key);\n    merge_sort(right, middle, salt, key);\n    merge(left, llength, right, middle, salt, key);\n}\n\nint enc_get_iv_len()\n{\n    return enc_iv_len;\n}\n\nuint8_t* enc_get_key()\n{\n    return enc_key;\n}\n\nint enc_get_key_len()\n{\n    return enc_key_len;\n}\n\nunsigned char *enc_md5(const unsigned char *d, size_t n, unsigned char *md)\n{\n#if defined(USE_CRYPTO_OPENSSL)\n    return MD5(d, n, md);\n#elif defined(USE_CRYPTO_POLARSSL)\n    static unsigned char m[16];\n    if (md == NULL) {\n        md = m;\n    }\n    md5(d, n, md);\n    return md;\n#elif defined(USE_CRYPTO_MBEDTLS)\n    static unsigned char m[16];\n    if (md == NULL) {\n        md = m;\n    }\n    mbedtls_md5(d, n, md);\n    return md;\n#endif\n}\n\nvoid enc_table_init(const char *pass)\n{\n    uint32_t i;\n    uint64_t key = 0;\n    uint8_t *digest;\n\n    enc_table = ss_malloc(256);\n    dec_table = ss_malloc(256);\n\n    digest = enc_md5((const uint8_t *)pass, strlen(pass), NULL);\n\n    for (i = 0; i < 8; i++)\n        key += OFFSET_ROL(digest, i);\n\n    for (i = 0; i < 256; ++i)\n        enc_table[i] = i;\n    for (i = 1; i < 1024; ++i)\n        merge_sort(enc_table, 256, i, key);\n    for (i = 0; i < 256; ++i)\n        // gen decrypt table from encrypt table\n        dec_table[enc_table[i]] = i;\n}\n\nint cipher_iv_size(const cipher_kt_t *cipher)\n{\n#if defined(USE_CRYPTO_OPENSSL)\n    return EVP_CIPHER_iv_length(cipher);\n#elif defined(USE_CRYPTO_POLARSSL) || defined(USE_CRYPTO_MBEDTLS)\n    if (cipher == NULL) {\n        return 0;\n    }\n    return cipher->iv_size;\n#endif\n}\n\nint cipher_key_size(const cipher_kt_t *cipher)\n{\n#if defined(USE_CRYPTO_OPENSSL)\n    return EVP_CIPHER_key_length(cipher);\n#elif defined(USE_CRYPTO_POLARSSL)\n    if (cipher == NULL) {\n        return 0;\n    }\n    /* Override PolarSSL 32 bit default key size with sane 128 bit default */\n    if (cipher->base != NULL && POLARSSL_CIPHER_ID_BLOWFISH ==\n        cipher->base->cipher) {\n        return 128 / 8;\n    }\n    return cipher->key_length / 8;\n#elif defined(USE_CRYPTO_MBEDTLS)\n    /*\n     * Semi-API changes (technically public, morally private)\n     * Renamed a few headers to include _internal in the name. Those headers are\n     * not supposed to be included by users.\n     * Changed md_info_t into an opaque structure (use md_get_xxx() accessors).\n     * Changed pk_info_t into an opaque structure.\n     * Changed cipher_base_t into an opaque structure.\n     */\n    if (cipher == NULL) {\n        return 0;\n    }\n    /* From Version 1.2.7 released 2013-04-13 Default Blowfish keysize is now 128-bits */\n    return cipher->key_bitlen / 8;\n#endif\n}\n\nint bytes_to_key(const cipher_kt_t *cipher, const digest_type_t *md,\n                 const uint8_t *pass, uint8_t *key, uint8_t *iv)\n{\n    size_t datal;\n    datal = strlen((const char *)pass);\n#if defined(USE_CRYPTO_OPENSSL)\n    return EVP_BytesToKey(cipher, md, NULL, pass, datal, 1, key, iv);\n#elif defined(USE_CRYPTO_POLARSSL)\n    md_context_t c;\n    unsigned char md_buf[MAX_MD_SIZE];\n    int niv;\n    int nkey;\n    int addmd;\n    unsigned int mds;\n    unsigned int i;\n    int rv;\n\n    nkey = cipher_key_size(cipher);\n    niv  = cipher_iv_size(cipher);\n    rv   = nkey;\n    if (pass == NULL) {\n        return nkey;\n    }\n\n    memset(&c, 0, sizeof(md_context_t));\n    if (md_init_ctx(&c, md)) {\n        return 0;\n    }\n    addmd = 0;\n    mds   = md_get_size(md);\n    for (;;) {\n        int error;\n        do {\n            error = 1;\n            if (md_starts(&c)) {\n                break;\n            }\n            if (addmd) {\n                if (md_update(&c, &(md_buf[0]), mds)) {\n                    break;\n                }\n            } else {\n                addmd = 1;\n            }\n            if (md_update(&c, pass, datal)) {\n                break;\n            }\n            if (md_finish(&c, &(md_buf[0]))) {\n                break;\n            }\n            error = 0;\n        } while (0);\n        if (error) {\n            md_free_ctx(&c);\n            memset(md_buf, 0, MAX_MD_SIZE);\n            return 0;\n        }\n\n        i = 0;\n        if (nkey) {\n            for (;;) {\n                if (nkey == 0) {\n                    break;\n                }\n                if (i == mds) {\n                    break;\n                }\n                if (key != NULL) {\n                    *(key++) = md_buf[i];\n                }\n                nkey--;\n                i++;\n            }\n        }\n        if (niv && (i != mds)) {\n            for (;;) {\n                if (niv == 0) {\n                    break;\n                }\n                if (i == mds) {\n                    break;\n                }\n                if (iv != NULL) {\n                    *(iv++) = md_buf[i];\n                }\n                niv--;\n                i++;\n            }\n        }\n        if ((nkey == 0) && (niv == 0)) {\n            break;\n        }\n    }\n    md_free_ctx(&c);\n    memset(md_buf, 0, MAX_MD_SIZE);\n    return rv;\n#elif defined(USE_CRYPTO_MBEDTLS)\n/*\n *\n * Generic message digest context.\n *\n * typedef struct {\n *  Information about the associated message digest\n *  const mbedtls_md_info_t *md_info;\n *\n *  Digest-specific context\n *  void *md_ctx;\n *\n *   HMAC part of the context\n *  void *hmac_ctx;\n * } mbedtls_md_context_t; // mbedtls 2.0.0\n *\n * typedef struct {\n *  Information about the associated message digest\n *  const md_info_t *md_info;\n *\n *  Digest-specific context\n *  void *md_ctx;\n * } md_context_t; //polarssl 1.3\n *\n */\n    // NOTE: different struct body, initialize new param hmac 0 to disable HMAC\n    mbedtls_md_context_t c;\n    unsigned char md_buf[MAX_MD_SIZE];\n    int niv;\n    int nkey;\n    int addmd;\n    unsigned int mds;\n    unsigned int i;\n    int rv;\n\n    nkey = cipher_key_size(cipher);\n    niv  = cipher_iv_size(cipher);\n    rv   = nkey;\n    if (pass == NULL) {\n        return nkey;\n    }\n\n    memset(&c, 0, sizeof(mbedtls_md_context_t));\n    // XXX: md_init_ctx superseded by mbedtls_md_setup() in 2.0.0\n    // new param hmac      0 to save some memory if HMAC will not be used,\n    //                     non-zero is HMAC is going to be used with this context.\n    if (mbedtls_md_setup(&c, md, 1)) {\n        return 0;\n    }\n    addmd = 0;\n    mds   = mbedtls_md_get_size(md);\n    for (;;) {\n        int error;\n        do {\n            error = 1;\n            if (mbedtls_md_starts(&c)) {\n                break;\n            }\n            if (addmd) {\n                if (mbedtls_md_update(&c, &(md_buf[0]), mds)) {\n                    break;\n                }\n            } else {\n                addmd = 1;\n            }\n            if (mbedtls_md_update(&c, pass, datal)) {\n                break;\n            }\n            if (mbedtls_md_finish(&c, &(md_buf[0]))) {\n                break;\n            }\n            error = 0;\n        } while (0);\n        if (error) {\n            mbedtls_md_free(&c); // md_free_ctx deprecated, Use mbedtls_md_free() instead\n            memset(md_buf, 0, MAX_MD_SIZE);\n            return 0;\n        }\n\n        i = 0;\n        if (nkey) {\n            for (;;) {\n                if (nkey == 0) {\n                    break;\n                }\n                if (i == mds) {\n                    break;\n                }\n                if (key != NULL) {\n                    *(key++) = md_buf[i];\n                }\n                nkey--;\n                i++;\n            }\n        }\n        if (niv && (i != mds)) {\n            for (;;) {\n                if (niv == 0) {\n                    break;\n                }\n                if (i == mds) {\n                    break;\n                }\n                if (iv != NULL) {\n                    *(iv++) = md_buf[i];\n                }\n                niv--;\n                i++;\n            }\n        }\n        if ((nkey == 0) && (niv == 0)) {\n            break;\n        }\n    }\n    mbedtls_md_free(&c); // NOTE: md_free_ctx deprecated, Use mbedtls_md_free() instead\n    memset(md_buf, 0, MAX_MD_SIZE);\n    return rv;\n#endif\n}\n\nint rand_bytes(uint8_t *output, int len)\n{\n#if defined(USE_CRYPTO_OPENSSL)\n    return RAND_bytes(output, len);\n#elif defined(USE_CRYPTO_POLARSSL)\n    static entropy_context ec = {};\n    static ctr_drbg_context cd_ctx = {};\n    static unsigned char rand_initialised = 0;\n    const size_t blen                     = min(len, CTR_DRBG_MAX_REQUEST);\n\n    if (!rand_initialised) {\n#ifdef _WIN32\n        HCRYPTPROV hProvider;\n        union {\n            unsigned __int64 seed;\n            BYTE buffer[8];\n        } rand_buffer;\n\n        hProvider = 0;\n        if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, \\\n                                CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {\n            CryptGenRandom(hProvider, 8, rand_buffer.buffer);\n            CryptReleaseContext(hProvider, 0);\n        } else {\n            rand_buffer.seed = (unsigned __int64)clock();\n        }\n#else\n        FILE *urand;\n        union {\n            uint64_t seed;\n            uint8_t buffer[8];\n        } rand_buffer;\n\n        urand = fopen(\"/dev/urandom\", \"r\");\n        if (urand) {\n            int read = fread(&rand_buffer.seed, sizeof(rand_buffer.seed), 1,\n                             urand);\n            fclose(urand);\n            if (read <= 0) {\n                rand_buffer.seed = (uint64_t)clock();\n            }\n        } else {\n            rand_buffer.seed = (uint64_t)clock();\n        }\n#endif\n        entropy_init(&ec);\n        if (ctr_drbg_init(&cd_ctx, entropy_func, &ec,\n                          (const unsigned char *)rand_buffer.buffer, 8) != 0) {\n#if POLARSSL_VERSION_NUMBER >= 0x01030000\n            entropy_free(&ec);\n#endif\n            FATAL(\"Failed to initialize random generator\");\n        }\n        rand_initialised = 1;\n    }\n    while (len > 0) {\n        if (ctr_drbg_random(&cd_ctx, output, blen) != 0) {\n            return 0;\n        }\n        output += blen;\n        len    -= blen;\n    }\n    return 1;\n#elif defined(USE_CRYPTO_MBEDTLS)\n    static mbedtls_entropy_context ec = {};\n    // XXX: ctr_drbg_context changed, [if defined(MBEDTLS_THREADING_C)    mbedtls_threading_mutex_t mutex;]\n    static mbedtls_ctr_drbg_context cd_ctx = {};\n    static unsigned char rand_initialised = 0;\n    const size_t blen                     = min(len, MBEDTLS_CTR_DRBG_MAX_REQUEST);\n\n    if (!rand_initialised) {\n#ifdef _WIN32\n        HCRYPTPROV hProvider;\n        union {\n            unsigned __int64 seed;\n            BYTE buffer[8];\n        } rand_buffer;\n\n        hProvider = 0;\n        if (CryptAcquireContext(&hProvider, 0, 0, PROV_RSA_FULL, \\\n                                CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) {\n            CryptGenRandom(hProvider, 8, rand_buffer.buffer);\n            CryptReleaseContext(hProvider, 0);\n        } else {\n            rand_buffer.seed = (unsigned __int64)clock();\n        }\n#else\n        FILE *urand;\n        union {\n            uint64_t seed;\n            uint8_t buffer[8];\n        } rand_buffer;\n\n        urand = fopen(\"/dev/urandom\", \"r\");\n        if (urand) {\n            int read = fread(&rand_buffer.seed, sizeof(rand_buffer.seed), 1,\n                             urand);\n            fclose(urand);\n            if (read <= 0) {\n                rand_buffer.seed = (uint64_t)clock();\n            }\n        } else {\n            rand_buffer.seed = (uint64_t)clock();\n        }\n#endif\n        mbedtls_entropy_init(&ec);\n        // XXX: ctr_drbg_init changed, seems we should initialize it before calling mbedtls_ctr_drbg_seed()\n        mbedtls_ctr_drbg_init(&cd_ctx);\n        if (mbedtls_ctr_drbg_seed(&cd_ctx, mbedtls_entropy_func, &ec,\n                                  (const unsigned char *)rand_buffer.buffer, 8) != 0) {\n            mbedtls_entropy_free(&ec);\n            FATAL(\"mbed TLS: Failed to initialize random generator\");\n        }\n        rand_initialised = 1;\n    }\n    while (len > 0) {\n        if (mbedtls_ctr_drbg_random(&cd_ctx, output, blen) != 0) {\n            return 0;\n        }\n        output += blen;\n        len    -= blen;\n    }\n    return 1;\n#endif\n}\n\nconst cipher_kt_t *get_cipher_type(int method)\n{\n    if (method <= TABLE || method >= CIPHER_NUM) {\n        LOGE(\"get_cipher_type(): Illegal method\");\n        return NULL;\n    }\n\n    if (method == RC4_MD5 || method == RC4_MD5_6) {\n        method = RC4;\n    }\n\n    if (method >= SALSA20) {\n        return NULL;\n    }\n\n    const char *ciphername = supported_ciphers[method];\n#if defined(USE_CRYPTO_OPENSSL)\n    return EVP_get_cipherbyname(ciphername);\n#elif defined(USE_CRYPTO_POLARSSL)\n    const char *polarname = supported_ciphers_polarssl[method];\n    if (strcmp(polarname, CIPHER_UNSUPPORTED) == 0) {\n        LOGE(\"Cipher %s currently is not supported by PolarSSL library\",\n             ciphername);\n        return NULL;\n    }\n    return cipher_info_from_string(polarname);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    const char *mbedtlsname = supported_ciphers_mbedtls[method];\n    if (strcmp(mbedtlsname, CIPHER_UNSUPPORTED) == 0) {\n        LOGE(\"Cipher %s currently is not supported by mbed TLS library\",\n             ciphername);\n        return NULL;\n    }\n    return mbedtls_cipher_info_from_string(mbedtlsname);\n#endif\n}\n\nconst digest_type_t *get_digest_type(const char *digest)\n{\n    if (digest == NULL) {\n        LOGE(\"get_digest_type(): Digest name is null\");\n        return NULL;\n    }\n\n#if defined(USE_CRYPTO_OPENSSL)\n    return EVP_get_digestbyname(digest);\n#elif defined(USE_CRYPTO_POLARSSL)\n    return md_info_from_string(digest);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    return mbedtls_md_info_from_string(digest);\n#endif\n}\n\nvoid cipher_context_init(cipher_ctx_t *ctx, int method, int enc)\n{\n    if (method <= TABLE || method >= CIPHER_NUM) {\n        LOGE(\"cipher_context_init(): Illegal method\");\n        return;\n    }\n\n    if (method >= SALSA20) {\n        enc_iv_len = supported_ciphers_iv_size[method];\n        return;\n    }\n\n    const char *ciphername = supported_ciphers[method];\n#if defined(USE_CRYPTO_APPLECC)\n    cipher_cc_t *cc = &ctx->cc;\n    cc->cryptor = NULL;\n    cc->cipher  = supported_ciphers_applecc[method];\n    if (cc->cipher == kCCAlgorithmInvalid) {\n        cc->valid = kCCContextInvalid;\n    } else {\n        cc->valid = kCCContextValid;\n        if (cc->cipher == kCCAlgorithmRC4) {\n            cc->mode    = supported_modes_applecc[method];\n            cc->padding = ccNoPadding;\n        } else {\n            cc->mode    = supported_modes_applecc[method];\n            if (cc->mode == kCCModeCTR) {\n                cc->padding = ccNoPadding;\n            } else {\n                cc->padding = ccPKCS7Padding;\n            }\n        }\n        return;\n    }\n#endif\n\n    cipher_evp_t *evp         = &ctx->evp;\n    const cipher_kt_t *cipher = get_cipher_type(method);\n#if defined(USE_CRYPTO_OPENSSL)\n    if (cipher == NULL) {\n        LOGE(\"Cipher %s not found in OpenSSL library\", ciphername);\n        FATAL(\"Cannot initialize cipher\");\n    }\n    EVP_CIPHER_CTX_init(evp);\n    if (!EVP_CipherInit_ex(evp, cipher, NULL, NULL, NULL, enc)) {\n        LOGE(\"Cannot initialize cipher %s\", ciphername);\n        exit(EXIT_FAILURE);\n    }\n    if (!EVP_CIPHER_CTX_set_key_length(evp, enc_key_len)) {\n        EVP_CIPHER_CTX_cleanup(evp);\n        LOGE(\"Invalid key length: %d\", enc_key_len);\n        exit(EXIT_FAILURE);\n    }\n    if (method > RC4_MD5) {\n        EVP_CIPHER_CTX_set_padding(evp, 1);\n    }\n#elif defined(USE_CRYPTO_POLARSSL)\n    if (cipher == NULL) {\n        LOGE(\"Cipher %s not found in PolarSSL library\", ciphername);\n        FATAL(\"Cannot initialize PolarSSL cipher\");\n    }\n    if (cipher_init_ctx(evp, cipher) != 0) {\n        FATAL(\"Cannot initialize PolarSSL cipher context\");\n    }\n#elif defined(USE_CRYPTO_MBEDTLS)\n    // XXX: mbedtls_cipher_setup future change\n    // NOTE:  Currently also clears structure. In future versions you will be required to call\n    //        mbedtls_cipher_init() on the structure first.\n    //        void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx );\n    if (cipher == NULL) {\n        LOGE(\"Cipher %s not found in mbed TLS library\", ciphername);\n        FATAL(\"Cannot initialize mbed TLS cipher\");\n    }\n    mbedtls_cipher_init(evp);\n    if (mbedtls_cipher_setup(evp, cipher) != 0) {\n        FATAL(\"Cannot initialize mbed TLS cipher context\");\n    }\n#endif\n}\n\nvoid cipher_context_set_iv(cipher_ctx_t *ctx, uint8_t *iv, size_t iv_len,\n                           int enc)\n{\n    const unsigned char *true_key;\n\n    if (iv == NULL) {\n        LOGE(\"cipher_context_set_iv(): IV is null\");\n        return;\n    }\n\n    if (!enc) {\n        memcpy(ctx->iv, iv, iv_len);\n    }\n\n    if (enc_method >= SALSA20) {\n        return;\n    }\n\n    if (enc_method == RC4_MD5 || enc_method == RC4_MD5_6) {\n        unsigned char key_iv[32];\n        memcpy(key_iv, enc_key, 16);\n        memcpy(key_iv + 16, iv, iv_len);\n        true_key = enc_md5(key_iv, 16 + iv_len, NULL);\n        iv_len   = 0;\n    } else {\n        true_key = enc_key;\n    }\n\n#ifdef USE_CRYPTO_APPLECC\n    cipher_cc_t *cc = &ctx->cc;\n    if (cc->valid == kCCContextValid) {\n        memcpy(cc->iv, iv, iv_len);\n        memcpy(cc->key, true_key, enc_key_len);\n        cc->iv_len  = iv_len;\n        cc->key_len = enc_key_len;\n        cc->encrypt = enc ? kCCEncrypt : kCCDecrypt;\n        if (cc->cryptor != NULL) {\n            CCCryptorRelease(cc->cryptor);\n            cc->cryptor = NULL;\n        }\n\n        CCCryptorStatus ret;\n        ret = CCCryptorCreateWithMode(\n            cc->encrypt,\n            cc->mode,\n            cc->cipher,\n            cc->padding,\n            cc->iv, cc->key, cc->key_len,\n            NULL, 0, 0, kCCModeOptionCTR_BE,\n            &cc->cryptor);\n        if (ret != kCCSuccess) {\n            if (cc->cryptor != NULL) {\n                CCCryptorRelease(cc->cryptor);\n                cc->cryptor = NULL;\n            }\n            FATAL(\"Cannot set CommonCrypto key and IV\");\n        }\n        return;\n    }\n#endif\n\n    cipher_evp_t *evp = &ctx->evp;\n    if (evp == NULL) {\n        LOGE(\"cipher_context_set_iv(): Cipher context is null\");\n        return;\n    }\n#if defined(USE_CRYPTO_OPENSSL)\n    if (!EVP_CipherInit_ex(evp, NULL, NULL, true_key, iv, enc)) {\n        EVP_CIPHER_CTX_cleanup(evp);\n        FATAL(\"Cannot set key and IV\");\n    }\n#elif defined(USE_CRYPTO_POLARSSL)\n    // XXX: PolarSSL 1.3.11: cipher_free_ctx deprecated, Use cipher_free() instead.\n    if (cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) {\n        cipher_free_ctx(evp);\n        FATAL(\"Cannot set PolarSSL cipher key\");\n    }\n#if POLARSSL_VERSION_NUMBER >= 0x01030000\n    if (cipher_set_iv(evp, iv, iv_len) != 0) {\n        cipher_free_ctx(evp);\n        FATAL(\"Cannot set PolarSSL cipher IV\");\n    }\n    if (cipher_reset(evp) != 0) {\n        cipher_free_ctx(evp);\n        FATAL(\"Cannot finalize PolarSSL cipher context\");\n    }\n#else\n    if (cipher_reset(evp, iv) != 0) {\n        cipher_free_ctx(evp);\n        FATAL(\"Cannot set PolarSSL cipher IV\");\n    }\n#endif\n#elif defined(USE_CRYPTO_MBEDTLS)\n    if (mbedtls_cipher_setkey(evp, true_key, enc_key_len * 8, enc) != 0) {\n        mbedtls_cipher_free(evp);\n        FATAL(\"Cannot set mbed TLS cipher key\");\n    }\n\n    if (mbedtls_cipher_set_iv(evp, iv, iv_len) != 0) {\n        mbedtls_cipher_free(evp);\n        FATAL(\"Cannot set mbed TLS cipher IV\");\n    }\n    if (mbedtls_cipher_reset(evp) != 0) {\n        mbedtls_cipher_free(evp);\n        FATAL(\"Cannot finalize mbed TLS cipher context\");\n    }\n#endif\n\n#ifdef SS_DEBUG\n    dump(\"IV\", (char *)iv, iv_len);\n#endif\n}\n\nvoid cipher_context_release(cipher_ctx_t *ctx)\n{\n    if (enc_method >= SALSA20) {\n        return;\n    }\n\n#ifdef USE_CRYPTO_APPLECC\n    cipher_cc_t *cc = &ctx->cc;\n    if (cc->cryptor != NULL) {\n        CCCryptorRelease(cc->cryptor);\n        cc->cryptor = NULL;\n    }\n    if (cc->valid == kCCContextValid) {\n        return;\n    }\n#endif\n\n    cipher_evp_t *evp = &ctx->evp;\n#if defined(USE_CRYPTO_OPENSSL)\n    EVP_CIPHER_CTX_cleanup(evp);\n#elif defined(USE_CRYPTO_POLARSSL)\n// NOTE: cipher_free_ctx deprecated in PolarSSL 1.3.11\n    cipher_free_ctx(evp);\n#elif defined(USE_CRYPTO_MBEDTLS)\n// NOTE: cipher_free_ctx deprecated\n    mbedtls_cipher_free(evp);\n#endif\n}\n\nstatic int cipher_context_update(cipher_ctx_t *ctx, uint8_t *output, size_t *olen,\n                                 const uint8_t *input, size_t ilen)\n{\n#ifdef USE_CRYPTO_APPLECC\n    cipher_cc_t *cc = &ctx->cc;\n    if (cc->valid == kCCContextValid) {\n        CCCryptorStatus ret;\n        ret = CCCryptorUpdate(cc->cryptor, input, ilen, output,\n                              ilen, olen);\n        return (ret == kCCSuccess) ? 1 : 0;\n    }\n#endif\n    cipher_evp_t *evp = &ctx->evp;\n#if defined(USE_CRYPTO_OPENSSL)\n    int err = 0, tlen = *olen;\n    err = EVP_CipherUpdate(evp, (uint8_t *)output, &tlen,\n                           (const uint8_t *)input, ilen);\n    *olen = tlen;\n    return err;\n#elif defined(USE_CRYPTO_POLARSSL)\n    return !cipher_update(evp, (const uint8_t *)input, ilen,\n                          (uint8_t *)output, olen);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    return !mbedtls_cipher_update(evp, (const uint8_t *)input, ilen,\n                                  (uint8_t *)output, olen);\n#endif\n}\n\nint ss_sha1_hmac(char *auth, char *msg, int msg_len, uint8_t *iv)\n{\n    uint8_t hash[ONETIMEAUTH_BYTES * 2];\n    uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH];\n    memcpy(auth_key, iv, enc_iv_len);\n    memcpy(auth_key + enc_iv_len, enc_key, enc_key_len);\n\n#if defined(USE_CRYPTO_OPENSSL)\n    HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash);\n#else\n    sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash);\n#endif\n\n    memcpy(auth, hash, ONETIMEAUTH_BYTES);\n\n    return 0;\n}\n\nint ss_sha1_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len)\n{\n    uint8_t hash[ONETIMEAUTH_BYTES * 2];\n\n#if defined(USE_CRYPTO_OPENSSL)\n    HMAC(EVP_sha1(), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash);\n#else\n    sha1_hmac(auth_key, key_len, (uint8_t *)msg, msg_len, (uint8_t *)hash);\n#endif\n\n    memcpy(auth, hash, ONETIMEAUTH_BYTES);\n\n    return 0;\n}\n\nint ss_onetimeauth(buffer_t *buf, uint8_t *iv, size_t capacity)\n{\n    uint8_t hash[ONETIMEAUTH_BYTES * 2];\n    uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH];\n    memcpy(auth_key, iv, enc_iv_len);\n    memcpy(auth_key + enc_iv_len, enc_key, enc_key_len);\n\n    brealloc(buf, ONETIMEAUTH_BYTES + buf->len, capacity);\n\n#if defined(USE_CRYPTO_OPENSSL)\n    HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len, (uint8_t *)hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    mbedtls_md_hmac(mbedtls_md_info_from_type(\n                        MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len,\n                    (uint8_t *)hash);\n#else\n    sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, buf->len, (uint8_t *)hash);\n#endif\n\n    memcpy(buf->array + buf->len, hash, ONETIMEAUTH_BYTES);\n    buf->len += ONETIMEAUTH_BYTES;\n\n    return 0;\n}\n\nint ss_onetimeauth_verify(buffer_t *buf, uint8_t *iv)\n{\n    uint8_t hash[ONETIMEAUTH_BYTES * 2];\n    uint8_t auth_key[MAX_IV_LENGTH + MAX_KEY_LENGTH];\n    memcpy(auth_key, iv, enc_iv_len);\n    memcpy(auth_key + enc_iv_len, enc_key, enc_key_len);\n    size_t len = buf->len - ONETIMEAUTH_BYTES;\n\n#if defined(USE_CRYPTO_OPENSSL)\n    HMAC(EVP_sha1(), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    mbedtls_md_hmac(mbedtls_md_info_from_type(\n                        MBEDTLS_MD_SHA1), auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash);\n#else\n    sha1_hmac(auth_key, enc_iv_len + enc_key_len, (uint8_t *)buf->array, len, hash);\n#endif\n\n    return safe_memcmp(buf->array + len, hash, ONETIMEAUTH_BYTES);\n}\n\nint ss_encrypt_all(buffer_t *plain, int method, int auth, size_t capacity)\n{\n    if (method > TABLE) {\n        cipher_ctx_t evp;\n        cipher_context_init(&evp, method, 1);\n\n        size_t iv_len = enc_iv_len;\n        int err       = 1;\n\n        static buffer_t tmp = { 0, 0, 0, NULL };\n        brealloc(&tmp, iv_len + plain->len, capacity);\n        buffer_t *cipher = &tmp;\n        cipher->len = plain->len;\n\n        uint8_t iv[MAX_IV_LENGTH];\n\n        rand_bytes(iv, iv_len);\n        cipher_context_set_iv(&evp, iv, iv_len, 1);\n        memcpy(cipher->array, iv, iv_len);\n\n        if (auth) {\n            ss_onetimeauth(plain, iv, capacity);\n            cipher->len = plain->len;\n        }\n\n        if (method >= SALSA20) {\n            crypto_stream_xor_ic((uint8_t *)(cipher->array + iv_len),\n                                 (const uint8_t *)plain->array, (uint64_t)(plain->len),\n                                 (const uint8_t *)iv,\n                                 0, enc_key, method);\n        } else {\n            err = cipher_context_update(&evp, (uint8_t *)(cipher->array + iv_len),\n                                        &cipher->len, (const uint8_t *)plain->array,\n                                        plain->len);\n        }\n\n        if (!err) {\n            bfree(plain);\n            cipher_context_release(&evp);\n            return -1;\n        }\n\n#ifdef SS_DEBUG\n        dump(\"PLAIN\", plain->array, plain->len);\n        dump(\"CIPHER\", cipher->array + iv_len, cipher->len);\n#endif\n\n        cipher_context_release(&evp);\n\n        brealloc(plain, iv_len + cipher->len, capacity);\n        memcpy(plain->array, cipher->array, iv_len + cipher->len);\n        plain->len = iv_len + cipher->len;\n\n        return 0;\n    } else {\n        char *begin = plain->array;\n        char *ptr   = plain->array;\n        while (ptr < begin + plain->len) {\n            *ptr = (char)enc_table[(uint8_t)*ptr];\n            ptr++;\n        }\n        return 0;\n    }\n}\n\nint ss_encrypt(buffer_t *plain, enc_ctx_t *ctx, size_t capacity)\n{\n    if (ctx != NULL) {\n        static buffer_t tmp = { 0, 0, 0, NULL };\n\n        int err       = 1;\n        size_t iv_len = 0;\n        if (!ctx->init) {\n            iv_len = enc_iv_len;\n        }\n\n        brealloc(&tmp, iv_len + plain->len, capacity);\n        buffer_t *cipher = &tmp;\n        cipher->len = plain->len;\n\n        if (!ctx->init) {\n            cipher_context_set_iv(&ctx->evp, ctx->evp.iv, iv_len, 1);\n            memcpy(cipher->array, ctx->evp.iv, iv_len);\n            ctx->counter = 0;\n            ctx->init    = 1;\n        }\n\n        if (enc_method >= SALSA20) {\n            int padding = ctx->counter % SODIUM_BLOCK_SIZE;\n            brealloc(cipher, iv_len + (padding + cipher->len) * 2, capacity);\n            if (padding) {\n                brealloc(plain, plain->len + padding, capacity);\n                memmove(plain->array + padding, plain->array, plain->len);\n                sodium_memzero(plain->array, padding);\n            }\n            crypto_stream_xor_ic((uint8_t *)(cipher->array + iv_len),\n                                 (const uint8_t *)plain->array,\n                                 (uint64_t)(plain->len + padding),\n                                 (const uint8_t *)ctx->evp.iv,\n                                 ctx->counter / SODIUM_BLOCK_SIZE, enc_key,\n                                 enc_method);\n            ctx->counter += plain->len;\n            if (padding) {\n                memmove(cipher->array + iv_len,\n                        cipher->array + iv_len + padding, cipher->len);\n            }\n        } else {\n            err =\n                cipher_context_update(&ctx->evp,\n                                      (uint8_t *)(cipher->array + iv_len),\n                                      &cipher->len, (const uint8_t *)plain->array,\n                                      plain->len);\n            if (!err) {\n                return -1;\n            }\n        }\n\n#ifdef SS_DEBUG\n        dump(\"PLAIN\", plain->array, plain->len);\n        dump(\"CIPHER\", cipher->array + iv_len, cipher->len);\n#endif\n\n        brealloc(plain, iv_len + cipher->len, capacity);\n        memcpy(plain->array, cipher->array, iv_len + cipher->len);\n        plain->len = iv_len + cipher->len;\n\n        return 0;\n    } else {\n        char *begin = plain->array;\n        char *ptr   = plain->array;\n        while (ptr < begin + plain->len) {\n            *ptr = (char)enc_table[(uint8_t)*ptr];\n            ptr++;\n        }\n        return 0;\n    }\n}\n\nint ss_decrypt_all(buffer_t *cipher, int method, int auth, size_t capacity)\n{\n    if (method > TABLE) {\n        size_t iv_len = enc_iv_len;\n        int ret       = 1;\n\n        if (cipher->len <= iv_len) {\n            return -1;\n        }\n\n        cipher_ctx_t evp;\n        cipher_context_init(&evp, method, 0);\n\n        static buffer_t tmp = { 0, 0, 0, NULL };\n        brealloc(&tmp, cipher->len, capacity);\n        buffer_t *plain = &tmp;\n        plain->len = cipher->len - iv_len;\n\n        uint8_t iv[MAX_IV_LENGTH];\n        memcpy(iv, cipher->array, iv_len);\n        cipher_context_set_iv(&evp, iv, iv_len, 0);\n\n        if (method >= SALSA20) {\n            crypto_stream_xor_ic((uint8_t *)plain->array,\n                                 (const uint8_t *)(cipher->array + iv_len),\n                                 (uint64_t)(cipher->len - iv_len),\n                                 (const uint8_t *)iv, 0, enc_key, method);\n        } else {\n            ret = cipher_context_update(&evp, (uint8_t *)plain->array, &plain->len,\n                                        (const uint8_t *)(cipher->array + iv_len),\n                                        cipher->len - iv_len);\n        }\n\n        if (auth || (plain->array[0] & ONETIMEAUTH_FLAG)) {\n            if (plain->len > ONETIMEAUTH_BYTES) {\n                ret = !ss_onetimeauth_verify(plain, iv);\n                if (ret) {\n                    plain->len -= ONETIMEAUTH_BYTES;\n                }\n            } else {\n                ret = 0;\n            }\n        }\n\n        if (!ret) {\n            bfree(cipher);\n            cipher_context_release(&evp);\n            return -1;\n        }\n\n#ifdef SS_DEBUG\n        dump(\"PLAIN\", plain->array, plain->len);\n        dump(\"CIPHER\", cipher->array + iv_len, cipher->len - iv_len);\n#endif\n\n        cipher_context_release(&evp);\n\n        brealloc(cipher, plain->len, capacity);\n        memcpy(cipher->array, plain->array, plain->len);\n        cipher->len = plain->len;\n\n        return 0;\n    } else {\n        char *begin = cipher->array;\n        char *ptr   = cipher->array;\n        while (ptr < begin + cipher->len) {\n            *ptr = (char)dec_table[(uint8_t)*ptr];\n            ptr++;\n        }\n        return 0;\n    }\n}\n\nint ss_decrypt(buffer_t *cipher, enc_ctx_t *ctx, size_t capacity)\n{\n    if (ctx != NULL) {\n        static buffer_t tmp = { 0, 0, 0, NULL };\n\n        size_t iv_len = 0;\n        int err       = 1;\n\n        brealloc(&tmp, cipher->len, capacity);\n        buffer_t *plain = &tmp;\n        plain->len = cipher->len;\n\n        if (!ctx->init) {\n            uint8_t iv[MAX_IV_LENGTH];\n            iv_len      = enc_iv_len;\n            plain->len -= iv_len;\n\n            memcpy(iv, cipher->array, iv_len);\n            cipher_context_set_iv(&ctx->evp, iv, iv_len, 0);\n            ctx->counter = 0;\n            ctx->init    = 1;\n\n            if (enc_method > RC4) {\n                if (cache_key_exist(iv_cache, (char *)iv, iv_len)) {\n                    bfree(cipher);\n                    return -1;\n                } else {\n                    cache_insert(iv_cache, (char *)iv, iv_len, NULL);\n                }\n            }\n        }\n\n        if (enc_method >= SALSA20) {\n            int padding = ctx->counter % SODIUM_BLOCK_SIZE;\n            brealloc(plain, (plain->len + padding) * 2, capacity);\n\n            if (padding) {\n                brealloc(cipher, cipher->len + padding, capacity);\n                memmove(cipher->array + iv_len + padding, cipher->array + iv_len,\n                        cipher->len - iv_len);\n                sodium_memzero(cipher->array + iv_len, padding);\n            }\n            crypto_stream_xor_ic((uint8_t *)plain->array,\n                                 (const uint8_t *)(cipher->array + iv_len),\n                                 (uint64_t)(cipher->len - iv_len + padding),\n                                 (const uint8_t *)ctx->evp.iv,\n                                 ctx->counter / SODIUM_BLOCK_SIZE, enc_key,\n                                 enc_method);\n            ctx->counter += cipher->len - iv_len;\n            if (padding) {\n                memmove(plain->array, plain->array + padding, plain->len);\n            }\n        } else {\n            err = cipher_context_update(&ctx->evp, (uint8_t *)plain->array, &plain->len,\n                                        (const uint8_t *)(cipher->array + iv_len),\n                                        cipher->len - iv_len);\n        }\n\n        if (!err) {\n            bfree(cipher);\n            return -1;\n        }\n\n#ifdef SS_DEBUG\n        dump(\"PLAIN\", plain->array, plain->len);\n        dump(\"CIPHER\", cipher->array + iv_len, cipher->len - iv_len);\n#endif\n\n        brealloc(cipher, plain->len, capacity);\n        memcpy(cipher->array, plain->array, plain->len);\n        cipher->len = plain->len;\n\n        return 0;\n    } else {\n        char *begin = cipher->array;\n        char *ptr   = cipher->array;\n        while (ptr < begin + cipher->len) {\n            *ptr = (char)dec_table[(uint8_t)*ptr];\n            ptr++;\n        }\n        return 0;\n    }\n}\n\nvoid enc_ctx_init(int method, enc_ctx_t *ctx, int enc)\n{\n    sodium_memzero(ctx, sizeof(enc_ctx_t));\n    cipher_context_init(&ctx->evp, method, enc);\n\n    if (enc) {\n        rand_bytes(ctx->evp.iv, enc_iv_len);\n    }\n}\n\nvoid enc_key_init(int method, const char *pass)\n{\n    if (method <= TABLE || method >= CIPHER_NUM) {\n        LOGE(\"enc_key_init(): Illegal method\");\n        return;\n    }\n\n    // Initialize cache\n    cache_create(&iv_cache, 256, NULL);\n\n#if defined(USE_CRYPTO_OPENSSL)\n    OpenSSL_add_all_algorithms();\n#endif\n\n    uint8_t iv[MAX_IV_LENGTH];\n\n    cipher_kt_t *cipher;\n    cipher_kt_t cipher_info;\n\n    if (method == SALSA20 || method == CHACHA20 || method == CHACHA20IETF) {\n        if (sodium_init() == -1) {\n            FATAL(\"Failed to initialize sodium\");\n        }\n        // Fake cipher\n        cipher = (cipher_kt_t *)&cipher_info;\n#if defined(USE_CRYPTO_OPENSSL)\n        cipher->key_len = supported_ciphers_key_size[method];\n        cipher->iv_len  = supported_ciphers_iv_size[method];\n#endif\n#if defined(USE_CRYPTO_POLARSSL)\n        cipher->base       = NULL;\n        cipher->key_length = supported_ciphers_key_size[method] * 8;\n        cipher->iv_size    = supported_ciphers_iv_size[method];\n#endif\n#if defined(USE_CRYPTO_MBEDTLS)\n        // XXX: key_length changed to key_bitlen in mbed TLS 2.0.0\n        cipher->base       = NULL;\n        cipher->key_bitlen = supported_ciphers_key_size[method] * 8;\n        cipher->iv_size    = supported_ciphers_iv_size[method];\n#endif\n    } else {\n        cipher = (cipher_kt_t *)get_cipher_type(method);\n    }\n\n    if (cipher == NULL) {\n        do {\n#if defined(USE_CRYPTO_POLARSSL) && defined(USE_CRYPTO_APPLECC)\n            if (supported_ciphers_applecc[method] != kCCAlgorithmInvalid) {\n                cipher_info.base       = NULL;\n                cipher_info.key_length = supported_ciphers_key_size[method] * 8;\n                cipher_info.iv_size    = supported_ciphers_iv_size[method];\n                cipher                 = (cipher_kt_t *)&cipher_info;\n                break;\n            }\n#endif\n#if defined(USE_CRYPTO_MBEDTLS) && defined(USE_CRYPTO_APPLECC)\n            // XXX: key_length changed to key_bitlen in mbed TLS 2.0.0\n            if (supported_ciphers_applecc[method] != kCCAlgorithmInvalid) {\n                cipher_info.base       = NULL;\n                cipher_info.key_bitlen = supported_ciphers_key_size[method] * 8;\n                cipher_info.iv_size    = supported_ciphers_iv_size[method];\n                cipher                 = (cipher_kt_t *)&cipher_info;\n                break;\n            }\n#endif\n            LOGE(\"Cipher %s not found in crypto library\",\n                 supported_ciphers[method]);\n            FATAL(\"Cannot initialize cipher\");\n        } while (0);\n    }\n\n    const digest_type_t *md = get_digest_type(\"MD5\");\n    if (md == NULL) {\n        FATAL(\"MD5 Digest not found in crypto library\");\n    }\n\n    enc_key_len = bytes_to_key(cipher, md, (const uint8_t *)pass, enc_key, iv);\n    if (enc_key_len == 0) {\n        FATAL(\"Cannot generate key and IV\");\n    }\n    if (method == RC4_MD5 || method == RC4_MD5_6) {\n        enc_iv_len = supported_ciphers_iv_size[method];\n    } else {\n        enc_iv_len = cipher_iv_size(cipher);\n    }\n    enc_method = method;\n}\n\nint enc_init(const char *pass, const char *method)\n{\n    int m = TABLE;\n    if (method != NULL) {\n        for (m = TABLE; m < CIPHER_NUM; m++)\n            if (strcmp(method, supported_ciphers[m]) == 0) {\n                break;\n            }\n        if (m >= CIPHER_NUM) {\n            LOGE(\"Invalid cipher name: %s, use table instead\", method);\n            m = TABLE;\n        }\n    }\n    if (m == TABLE) {\n        enc_table_init(pass);\n    } else {\n        enc_key_init(m, pass);\n    }\n    return m;\n}\n\nint ss_check_hash(buffer_t *buf, chunk_t *chunk, enc_ctx_t *ctx, size_t capacity)\n{\n    int i, j, k;\n    ssize_t blen  = buf->len;\n    uint32_t cidx = chunk->idx;\n\n    brealloc(chunk->buf, chunk->len + blen, capacity);\n    brealloc(buf, chunk->len + blen, capacity);\n\n    for (i = 0, j = 0, k = 0; i < blen; i++) {\n        chunk->buf->array[cidx++] = buf->array[k++];\n\n        if (cidx == CLEN_BYTES) {\n            uint16_t clen = ntohs(*((uint16_t *)chunk->buf->array));\n            brealloc(chunk->buf, clen + AUTH_BYTES, capacity);\n            chunk->len = clen;\n        }\n\n        if (cidx == chunk->len + AUTH_BYTES) {\n            // Compare hash\n            uint8_t hash[ONETIMEAUTH_BYTES * 2];\n            uint8_t key[MAX_IV_LENGTH + sizeof(uint32_t)];\n\n            uint32_t c = htonl(chunk->counter);\n            memcpy(key, ctx->evp.iv, enc_iv_len);\n            memcpy(key + enc_iv_len, &c, sizeof(uint32_t));\n#if defined(USE_CRYPTO_OPENSSL)\n            HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t),\n                 (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n            mbedtls_md_hmac(mbedtls_md_info_from_type(MBEDTLS_MD_SHA1), key, enc_iv_len + sizeof(uint32_t),\n                            (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash);\n#else\n            sha1_hmac(key, enc_iv_len + sizeof(uint32_t),\n                      (uint8_t *)chunk->buf->array + AUTH_BYTES, chunk->len, hash);\n#endif\n\n            if (safe_memcmp(hash, chunk->buf->array + CLEN_BYTES, ONETIMEAUTH_BYTES) != 0) {\n                return 0;\n            }\n\n            // Copy chunk back to buffer\n            memmove(buf->array + j + chunk->len, buf->array + k, blen - i - 1);\n            memcpy(buf->array + j, chunk->buf->array + AUTH_BYTES, chunk->len);\n\n            // Reset the base offset\n            j   += chunk->len;\n            k    = j;\n            cidx = 0;\n            chunk->counter++;\n        }\n    }\n\n    buf->len   = j;\n    chunk->idx = cidx;\n    return 1;\n}\n\nint ss_gen_hash(buffer_t *buf, uint32_t *counter, enc_ctx_t *ctx, size_t capacity)\n{\n    ssize_t blen       = buf->len;\n    uint16_t chunk_len = htons((uint16_t)blen);\n    uint8_t hash[ONETIMEAUTH_BYTES * 2];\n    uint8_t key[MAX_IV_LENGTH + sizeof(uint32_t)];\n    uint32_t c = htonl(*counter);\n\n    brealloc(buf, AUTH_BYTES + blen, capacity);\n    memcpy(key, ctx->evp.iv, enc_iv_len);\n    memcpy(key + enc_iv_len, &c, sizeof(uint32_t));\n#if defined(USE_CRYPTO_OPENSSL)\n    HMAC(EVP_sha1(), key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash, NULL);\n#elif defined(USE_CRYPTO_MBEDTLS)\n    mbedtls_md_hmac(mbedtls_md_info_from_type(\n                        MBEDTLS_MD_SHA1), key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash);\n#else\n    sha1_hmac(key, enc_iv_len + sizeof(uint32_t), (uint8_t *)buf->array, blen, hash);\n#endif\n\n    memmove(buf->array + AUTH_BYTES, buf->array, blen);\n    memcpy(buf->array + CLEN_BYTES, hash, ONETIMEAUTH_BYTES);\n    memcpy(buf->array, &chunk_len, CLEN_BYTES);\n\n    *counter = *counter + 1;\n    buf->len = blen + AUTH_BYTES;\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/encrypt.h",
    "content": "/*\n * encrypt.h - Define the enryptor's interface\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _ENCRYPT_H\n#define _ENCRYPT_H\n\n#ifndef __MINGW32__\n#include <sys/socket.h>\n#else\n\n#ifdef max\n#undef max\n#endif\n\n#ifdef min\n#undef min\n#endif\n\n#endif\n\n#include <string.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <stdint.h>\n\n#if defined(USE_CRYPTO_OPENSSL)\n\n#include <openssl/evp.h>\ntypedef EVP_CIPHER cipher_kt_t;\ntypedef EVP_CIPHER_CTX cipher_evp_t;\ntypedef EVP_MD digest_type_t;\n#define MAX_KEY_LENGTH EVP_MAX_KEY_LENGTH\n#define MAX_IV_LENGTH EVP_MAX_IV_LENGTH\n#define MAX_MD_SIZE EVP_MAX_MD_SIZE\n\n#elif defined(USE_CRYPTO_POLARSSL)\n\n#include <polarssl/cipher.h>\n#include <polarssl/md.h>\ntypedef cipher_info_t cipher_kt_t;\ntypedef cipher_context_t cipher_evp_t;\ntypedef md_info_t digest_type_t;\n#define MAX_KEY_LENGTH 64\n#define MAX_IV_LENGTH POLARSSL_MAX_IV_LENGTH\n#define MAX_MD_SIZE POLARSSL_MD_MAX_SIZE\n\n#elif defined(USE_CRYPTO_MBEDTLS)\n\n#include <mbedtls/cipher.h>\n#include <mbedtls/md.h>\ntypedef mbedtls_cipher_info_t cipher_kt_t;\ntypedef mbedtls_cipher_context_t cipher_evp_t;\ntypedef mbedtls_md_info_t digest_type_t;\n#define MAX_KEY_LENGTH 64\n#define MAX_IV_LENGTH MBEDTLS_MAX_IV_LENGTH\n#define MAX_MD_SIZE MBEDTLS_MD_MAX_SIZE\n\n/* we must have MBEDTLS_CIPHER_MODE_CFB defined */\n#if !defined(MBEDTLS_CIPHER_MODE_CFB)\n#error Cipher Feedback mode a.k.a CFB not supported by your mbed TLS.\n#endif\n\n#endif\n\n#ifdef USE_CRYPTO_APPLECC\n\n#include <CommonCrypto/CommonCrypto.h>\n\n#define kCCAlgorithmInvalid UINT32_MAX\n#define kCCContextValid 0\n#define kCCContextInvalid -1\n\ntypedef struct {\n    CCCryptorRef cryptor;\n    int valid;\n    CCOperation encrypt;\n    CCAlgorithm cipher;\n    CCMode mode;\n    CCPadding padding;\n    uint8_t iv[MAX_IV_LENGTH];\n    uint8_t key[MAX_KEY_LENGTH];\n    size_t iv_len;\n    size_t key_len;\n} cipher_cc_t;\n\n#endif\n\ntypedef struct {\n    cipher_evp_t evp;\n#ifdef USE_CRYPTO_APPLECC\n    cipher_cc_t cc;\n#endif\n    uint8_t iv[MAX_IV_LENGTH];\n} cipher_ctx_t;\n\n#ifdef HAVE_STDINT_H\n#include <stdint.h>\n#elif HAVE_INTTYPES_H\n#include <inttypes.h>\n#endif\n\n#define SODIUM_BLOCK_SIZE   64\n\nenum crpher_index {\n    NONE = -1,\n    TABLE = 0,\n    RC4,\n    RC4_MD5_6,\n    RC4_MD5,\n    AES_128_CFB,\n    AES_192_CFB,\n    AES_256_CFB,\n    AES_128_CTR,\n    AES_192_CTR,\n    AES_256_CTR,\n    BF_CFB,\n    CAMELLIA_128_CFB,\n    CAMELLIA_192_CFB,\n    CAMELLIA_256_CFB,\n    CAST5_CFB,\n    DES_CFB,\n    IDEA_CFB,\n    RC2_CFB,\n    SEED_CFB,\n    SALSA20,\n    CHACHA20,\n    CHACHA20IETF,\n    CIPHER_NUM,\n};\n\n#define ONETIMEAUTH_FLAG 0x10\n#define ADDRTYPE_MASK 0xF\n\n#define ONETIMEAUTH_BYTES 10U\n#define CLEN_BYTES 2U\n#define AUTH_BYTES (ONETIMEAUTH_BYTES + CLEN_BYTES)\n\n#define min(a, b) (((a) < (b)) ? (a) : (b))\n#define max(a, b) (((a) > (b)) ? (a) : (b))\n\ntypedef struct buffer {\n    size_t idx;\n    size_t len;\n    size_t capacity;\n    char   *array;\n} buffer_t;\n\ntypedef struct chunk {\n    uint32_t idx;\n    uint32_t len;\n    uint32_t counter;\n    buffer_t *buf;\n} chunk_t;\n\ntypedef struct enc_ctx {\n    uint8_t init;\n    uint64_t counter;\n    cipher_ctx_t evp;\n} enc_ctx_t;\n\nint ss_encrypt_all(buffer_t *plaintext, int method, int auth, size_t capacity);\nint ss_decrypt_all(buffer_t *ciphertext, int method, int auth, size_t capacity);\nint ss_encrypt(buffer_t *plaintext, enc_ctx_t *ctx, size_t capacity);\nint ss_decrypt(buffer_t *ciphertext, enc_ctx_t *ctx, size_t capacity);\n\nvoid enc_ctx_init(int method, enc_ctx_t *ctx, int enc);\nint enc_init(const char *pass, const char *method);\nint enc_get_iv_len(void);\nuint8_t* enc_get_key(void);\nint enc_get_key_len(void);\nvoid cipher_context_release(cipher_ctx_t *evp);\nunsigned char *enc_md5(const unsigned char *d, size_t n, unsigned char *md);\n\nint ss_sha1_hmac(char *auth, char *msg, int msg_len, uint8_t *iv);\nint ss_sha1_hmac_with_key(char *auth, char *msg, int msg_len, uint8_t *auth_key, int key_len);\nint ss_onetimeauth(buffer_t *buf, uint8_t *iv, size_t capacity);\nint ss_onetimeauth_verify(buffer_t *buf, uint8_t *iv);\n\nint ss_check_hash(buffer_t *buf, chunk_t *chunk, enc_ctx_t *ctx, size_t capacity);\nint ss_gen_hash(buffer_t *buf, uint32_t *counter, enc_ctx_t *ctx, size_t capacity);\n\nint balloc(buffer_t *ptr, size_t capacity);\nint brealloc(buffer_t *ptr, size_t len, size_t capacity);\nvoid bfree(buffer_t *ptr);\n\nint rand_bytes(uint8_t *output, int len);\n\n#endif // _ENCRYPT_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/http_simple.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n#include \"http_simple.h\"\n\nstatic char* g_useragent[] = {\n    \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0\",\n    \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/44.0\",\n    \"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\",\n    \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.10 Chromium/27.0.1453.93 Chrome/27.0.1453.93 Safari/537.36\",\n    \"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0\",\n    \"Mozilla/5.0 (compatible; WOW64; MSIE 10.0; Windows NT 6.2)\",\n    \"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27\",\n    \"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C)\",\n    \"Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko\",\n    \"Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/BuildID) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36\",\n    \"Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",\n    \"Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3\",\n};\n\nstatic int g_useragent_index = -1;\n\ntypedef struct http_simple_local_data {\n    int has_sent_header;\n    int has_recv_header;\n    char *encode_buffer;\n}http_simple_local_data;\n\nvoid http_simple_local_data_init(http_simple_local_data* local) {\n    local->has_sent_header = 0;\n    local->has_recv_header = 0;\n    local->encode_buffer = NULL;\n\n    if (g_useragent_index == -1) {\n        g_useragent_index = xorshift128plus() % (sizeof(g_useragent) / sizeof(*g_useragent));\n    }\n}\n\nobfs * http_simple_new_obfs() {\n    obfs * self = new_obfs();\n    self->l_data = malloc(sizeof(http_simple_local_data));\n    http_simple_local_data_init((http_simple_local_data*)self->l_data);\n    return self;\n}\n\nvoid http_simple_dispose(obfs *self) {\n    http_simple_local_data *local = (http_simple_local_data*)self->l_data;\n    if (local->encode_buffer != NULL) {\n        free(local->encode_buffer);\n        local->encode_buffer = NULL;\n    }\n    free(local);\n    dispose_obfs(self);\n}\n\nchar http_simple_hex(char c) {\n    if (c < 10) return c + '0';\n    return c - 10 + 'a';\n}\n\nvoid http_simple_encode_head(http_simple_local_data *local, char *data, int datalength) {\n    if (local->encode_buffer == NULL) {\n        local->encode_buffer = (char*)malloc(datalength * 3 + 1);\n    }\n    int pos = 0;\n    for (; pos < datalength; ++pos) {\n        local->encode_buffer[pos * 3] = '%';\n        local->encode_buffer[pos * 3 + 1] = http_simple_hex(((unsigned char)data[pos] >> 4));\n        local->encode_buffer[pos * 3 + 2] = http_simple_hex(data[pos] & 0xF);\n    }\n    local->encode_buffer[pos * 3] = 0;\n}\n\nint http_simple_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) {\n    char *encryptdata = *pencryptdata;\n    http_simple_local_data *local = (http_simple_local_data*)self->l_data;\n    if (local->has_sent_header) {\n        return datalength;\n    }\n    char hosts[1024];\n    char * phost[128];\n    int host_num = 0;\n    int pos;\n    char hostport[128];\n    int head_size = self->server.head_len + (xorshift128plus() & 0x3F);\n    int outlength;\n    char * out_buffer = (char*)malloc(datalength + 2048);\n    char * body_buffer = NULL;\n    if (head_size > datalength)\n        head_size = datalength;\n    http_simple_encode_head(local, encryptdata, head_size);\n    if (self->server.param && strlen(self->server.param) == 0)\n        self->server.param = NULL;\n    strncpy(hosts, self->server.param ? self->server.param : self->server.host, sizeof hosts);\n    phost[host_num++] = hosts;\n    for (pos = 0; hosts[pos]; ++pos) {\n        if (hosts[pos] == ',') {\n            phost[host_num++] = &hosts[pos + 1];\n            hosts[pos] = 0;\n        } else if (hosts[pos] == '#') {\n            char * body_pointer = &hosts[pos + 1];\n            char * p;\n            int trans_char = 0;\n            p = body_buffer = (char*)malloc(2048);\n            for ( ; *body_pointer; ++body_pointer) {\n                if (*body_pointer == '\\\\') {\n                    trans_char = 1;\n                    continue;\n                } else if (*body_pointer == '\\n') {\n                    *p = '\\r';\n                    *++p = '\\n';\n                    continue;\n                }\n                if (trans_char) {\n                    if (*body_pointer == '\\\\' ) {\n                        *p = '\\\\';\n                    } else if (*body_pointer == 'n' ) {\n                        *p = '\\r';\n                        *++p = '\\n';\n                    } else {\n                        *p = '\\\\';\n                        *p = *body_pointer;\n                    }\n                    trans_char = 0;\n                } else {\n                    *p = *body_pointer;\n                }\n                ++p;\n            }\n            *p = 0;\n            hosts[pos] = 0;\n            break;\n        }\n    }\n    host_num = xorshift128plus() % host_num;\n    if (self->server.port == 80)\n        sprintf(hostport, \"%s\", phost[host_num]);\n    else\n        sprintf(hostport, \"%s:%d\", phost[host_num], self->server.port);\n    if (body_buffer) {\n        sprintf(out_buffer,\n            \"GET /%s HTTP/1.1\\r\\n\"\n            \"Host: %s\\r\\n\"\n            \"%s\\r\\n\\r\\n\",\n            local->encode_buffer,\n            hostport,\n            body_buffer);\n    } else {\n        sprintf(out_buffer,\n            \"GET /%s HTTP/1.1\\r\\n\"\n            \"Host: %s\\r\\n\"\n            \"User-Agent: %s\\r\\n\"\n            \"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\\r\\n\"\n            \"Accept-Language: en-US,en;q=0.8\\r\\n\"\n            \"Accept-Encoding: gzip, deflate\\r\\n\"\n            \"DNT: 1\\r\\n\"\n            \"Connection: keep-alive\\r\\n\"\n            \"\\r\\n\",\n            local->encode_buffer,\n            hostport,\n            g_useragent[g_useragent_index]\n            );\n    }\n    //LOGI(\"http header: %s\", out_buffer);\n    outlength = strlen(out_buffer);\n    memmove(out_buffer + outlength, encryptdata + head_size, datalength - head_size);\n    outlength += datalength - head_size;\n    local->has_sent_header = 1;\n    if (*capacity < outlength) {\n        *pencryptdata = (char*)realloc(*pencryptdata, *capacity = outlength * 2);\n        encryptdata = *pencryptdata;\n    }\n    memmove(encryptdata, out_buffer, outlength);\n    free(out_buffer);\n    if (body_buffer != NULL)\n        free(body_buffer);\n    if (local->encode_buffer != NULL) {\n        free(local->encode_buffer);\n        local->encode_buffer = NULL;\n    }\n    return outlength;\n}\n\nint http_simple_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) {\n    char *encryptdata = *pencryptdata;\n    http_simple_local_data *local = (http_simple_local_data*)self->l_data;\n    *needsendback = 0;\n    if (local->has_recv_header) {\n        return datalength;\n    }\n    char* data_begin = strstr(encryptdata, \"\\r\\n\\r\\n\");\n    if (data_begin) {\n        int outlength;\n        data_begin += 4;\n        local->has_recv_header = 1;\n        outlength = datalength - (data_begin - encryptdata);\n        memmove(encryptdata, data_begin, outlength);\n        return outlength;\n    } else {\n        return 0;\n    }\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/http_simple.h",
    "content": "/*\n * http_simple.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _HTTP_SIMPLE_H\n#define _HTTP_SIMPLE_H\n\n#include \"obfs.h\"\n\nobfs * http_simple_new_obfs();\nvoid http_simple_dispose(obfs *self);\n\nint http_simple_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity);\nint http_simple_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback);\n\n#endif // _HTTP_SIMPLE_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/jconf.c",
    "content": "/*\n * jconf.c - Parse the JSON format config file\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <unistd.h>\n#include <string.h>\n#include <time.h>\n\n#include \"utils.h\"\n#include \"jconf.h\"\n#include \"json.h\"\n#include \"string.h\"\n\n#include <libcork/core.h>\n\nstatic char *to_string(const json_value *value)\n{\n    if (value->type == json_string) {\n        return ss_strndup(value->u.string.ptr, value->u.string.length);\n    } else if (value->type == json_integer) {\n        return strdup(ss_itoa(value->u.integer));\n    } else if (value->type == json_null) {\n        return \"null\";\n    } else {\n        LOGE(\"%d\", value->type);\n        FATAL(\"Invalid config format.\");\n    }\n    return 0;\n}\n\nvoid free_addr(ss_addr_t *addr)\n{\n    ss_free(addr->host);\n    ss_free(addr->port);\n}\n\nvoid parse_addr(const char *str, ss_addr_t *addr)\n{\n    int ipv6 = 0, ret = -1, n = 0;\n    char *pch;\n\n    struct cork_ip ip;\n    if (cork_ip_init(&ip, str) != -1) {\n        addr->host = strdup(str);\n        addr->port = NULL;\n        return;\n    }\n\n    pch = strchr(str, ':');\n    while (pch != NULL) {\n        n++;\n        ret = pch - str;\n        pch = strchr(pch + 1, ':');\n    }\n    if (n > 1) {\n        ipv6 = 1;\n        if (str[ret - 1] != ']') {\n            ret = -1;\n        }\n    }\n\n    if (ret == -1) {\n        if (ipv6) {\n            addr->host = ss_strndup(str + 1, strlen(str) - 2);\n        } else {\n            addr->host = strdup(str);\n        }\n        addr->port = NULL;\n    } else {\n        if (ipv6) {\n            addr->host = ss_strndup(str + 1, ret - 2);\n        } else {\n            addr->host = ss_strndup(str, ret);\n        }\n        addr->port = strdup(str + ret + 1);\n    }\n}\n\njconf_t *read_jconf(const char *file)\n{\n    static jconf_t conf;\n\n    memset(&conf, 0, sizeof(jconf_t));\n\n    char *buf;\n    json_value *obj;\n\n    FILE *f = fopen(file, \"rb\");\n    if (f == NULL) {\n        FATAL(\"Invalid config path.\");\n    }\n\n    fseek(f, 0, SEEK_END);\n    long pos = ftell(f);\n    fseek(f, 0, SEEK_SET);\n\n    if (pos >= MAX_CONF_SIZE) {\n        FATAL(\"Too large config file.\");\n    }\n\n    buf = ss_malloc(pos + 1);\n    if (buf == NULL) {\n        FATAL(\"No enough memory.\");\n    }\n\n    int nread = fread(buf, pos, 1, f);\n    if (!nread) {\n        FATAL(\"Failed to read the config file.\");\n    }\n    fclose(f);\n\n    buf[pos] = '\\0'; // end of string\n\n    json_settings settings = { 0UL, 0, NULL, NULL, NULL };\n    char error_buf[512];\n    obj = json_parse_ex(&settings, buf, pos, error_buf);\n\n    if (obj == NULL) {\n        FATAL(error_buf);\n    }\n\n    if (obj->type == json_object) {\n        unsigned int i, j;\n        for (i = 0; i < obj->u.object.length; i++) {\n            char *name        = obj->u.object.values[i].name;\n            json_value *value = obj->u.object.values[i].value;\n            if (strcmp(name, \"server\") == 0) {\n                if (value->type == json_array) {\n                    for (j = 0; j < value->u.array.length; j++) {\n                        if (j >= MAX_REMOTE_NUM) {\n                            break;\n                        }\n                        json_value *v = value->u.array.values[j];\n                        parse_addr(to_string(v), conf.remote_addr + j);\n                        conf.remote_num = j + 1;\n                    }\n                } else if (value->type == json_string) {\n                    conf.remote_addr[0].host = to_string(value);\n                    conf.remote_addr[0].port = NULL;\n                    conf.remote_num          = 1;\n                }\n            } else if (strcmp(name, \"port_password\") == 0) {\n                if (value->type == json_object) {\n                    for (j = 0; j < value->u.object.length; j++) {\n                        if (j >= MAX_PORT_NUM) {\n                            break;\n                        }\n                        json_value *v = value->u.object.values[j].value;\n                        if (v->type == json_string) {\n                            conf.port_password[j].port = ss_strndup(value->u.object.values[j].name,\n                                                                    value->u.object.values[j].name_length);\n                            conf.port_password[j].password = to_string(v);\n                            conf.port_password_num         = j + 1;\n                        }\n                    }\n                }\n            } else if (strcmp(name, \"server_port\") == 0) {\n                conf.remote_port = to_string(value);\n            } else if (strcmp(name, \"local_address\") == 0) {\n                conf.local_addr = to_string(value);\n            } else if (strcmp(name, \"local_port\") == 0) {\n                conf.local_port = to_string(value);\n            } else if (strcmp(name, \"password\") == 0) {\n                conf.password = to_string(value);\n            } else if (strcmp(name, \"protocol\") == 0) { // SSR\n                conf.protocol = to_string(value);\n            } else if (strcmp(name, \"method\") == 0) {\n                conf.method = to_string(value);\n            } else if (strcmp(name, \"obfs\") == 0) { // SSR\n                conf.obfs = to_string(value);\n            } else if (strcmp(name, \"obfs_param\") == 0) { // SSR\n                conf.obfs_param = to_string(value);\n            } else if (strcmp(name, \"timeout\") == 0) {\n                conf.timeout = to_string(value);\n            } else if (strcmp(name, \"fast_open\") == 0) {\n                conf.fast_open = value->u.boolean;\n            } else if (strcmp(name, \"auth\") == 0) {\n                conf.auth = value->u.boolean;\n            } else if (strcmp(name, \"nofile\") == 0) {\n                conf.nofile = value->u.integer;\n            } else if (strcmp(name, \"nameserver\") == 0) {\n                conf.nameserver = to_string(value);\n            } else if (strcmp(name, \"tunnel_address\") == 0) {\n                conf.tunnel_address = to_string(value);\n            } else if (strcmp(name, \"mode\") == 0) {\n                char *mode_str = to_string(value);\n\n                if (strcmp(mode_str, \"tcp_only\") == 0)\n                    conf.mode = TCP_ONLY;\n                else if (strcmp(mode_str, \"tcp_and_udp\") == 0)\n                    conf.mode = TCP_AND_UDP;\n                else if (strcmp(mode_str, \"udp_only\") == 0)\n                    conf.mode = UDP_ONLY;\n                else\n                    LOGI(\"ignore unknown mode: %s, use tcp_only as fallback\",\n                         mode_str);\n                free(mode_str);\n            } else if (strcmp(name, \"mtu\") == 0) {\n                conf.mtu = value->u.integer;\n            } else if (strcmp(name, \"mptcp\") == 0) {\n                conf.mptcp = value->u.boolean;\n            }\n        }\n    } else {\n        FATAL(\"Invalid config file\");\n    }\n\n    ss_free(buf);\n    json_value_free(obj);\n    return &conf;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/jconf.h",
    "content": "/*\n * jconf.h - Define the config data structure\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _JCONF_H\n#define _JCONF_H\n\n#define MAX_PORT_NUM 1024\n#define MAX_REMOTE_NUM 10\n#define MAX_CONF_SIZE 128 * 1024\n#define MAX_DNS_NUM 4\n#define MAX_CONNECT_TIMEOUT 10\n#define MIN_UDP_TIMEOUT 10\n\n#define TCP_ONLY     0\n#define TCP_AND_UDP  1\n#define UDP_ONLY     3\n\ntypedef struct {\n    char *host;\n    char *port;\n} ss_addr_t;\n\ntypedef struct {\n    char *port;\n    char *password;\n} ss_port_password_t;\n\ntypedef struct {\n    int remote_num;\n    ss_addr_t remote_addr[MAX_REMOTE_NUM];\n    int port_password_num;\n    ss_port_password_t port_password[MAX_PORT_NUM];\n    char *remote_port;\n    char *local_addr;\n    char *local_port;\n    char *password;\n    char *protocol; // SSR\n    char *method;\n    char *obfs; // SSR\n    char *obfs_param; // SSR\n    char *timeout;\n    int auth;\n    int fast_open;\n    int nofile;\n    char *nameserver;\n    char *tunnel_address;\n    int mode;\n    int mtu;\n    int mptcp;\n} jconf_t;\n\njconf_t *read_jconf(const char *file);\nvoid parse_addr(const char *str, ss_addr_t *addr);\nvoid free_addr(ss_addr_t *addr);\n\n#endif // _JCONF_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/json.c",
    "content": "/* vim: set et ts=3 sw=3 sts=3 ft=c:\n *\n * Copyright (C) 2012, 2013, 2014 James McLaughlin et al.  All rights reserved.\n * https://github.com/udp/json-parser\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 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 \"json.h\"\n#include \"utils.h\"\n\n#ifdef _MSC_VER\n#ifndef _CRT_SECURE_NO_WARNINGS\n#define _CRT_SECURE_NO_WARNINGS\n#endif\n#endif\n\n#ifdef __cplusplus\nconst struct _json_value json_value_none; /* zero-d by ctor */\n#else\nconst struct _json_value json_value_none = { NULL, 0, {0}, {NULL} };\n#endif\n\n#include <stdio.h>\n#include <string.h>\n#include <ctype.h>\n#include <math.h>\n\ntypedef unsigned short json_uchar;\n\nstatic unsigned char hex_value(json_char c)\n{\n    if (isdigit((uint8_t)c)) {\n        return c - '0';\n    }\n\n    switch (c) {\n    case 'a':\n    case 'A':\n        return 0x0A;\n    case 'b':\n    case 'B':\n        return 0x0B;\n    case 'c':\n    case 'C':\n        return 0x0C;\n    case 'd':\n    case 'D':\n        return 0x0D;\n    case 'e':\n    case 'E':\n        return 0x0E;\n    case 'f':\n    case 'F':\n        return 0x0F;\n    default:\n        return 0xFF;\n    }\n}\n\ntypedef struct {\n    unsigned long used_memory;\n\n    unsigned int uint_max;\n    unsigned long ulong_max;\n\n    json_settings settings;\n    int first_pass;\n} json_state;\n\nstatic void *default_alloc(size_t size, int zero, void *user_data)\n{\n    return zero ? calloc(1, size) : ss_malloc(size);\n}\n\nstatic void default_free(void *ptr, void *user_data)\n{\n    ss_free(ptr);\n}\n\nstatic void *json_alloc(json_state *state, unsigned long size, int zero)\n{\n    if ((state->ulong_max - state->used_memory) < size) {\n        return 0;\n    }\n\n    if (state->settings.max_memory\n        && (state->used_memory += size) > state->settings.max_memory) {\n        return 0;\n    }\n\n    return state->settings.mem_alloc(size, zero, state->settings.user_data);\n}\n\nstatic int new_value(json_state *state, json_value **top, json_value **root,\n                     json_value **alloc, json_type type)\n{\n    json_value *value;\n    int values_size;\n\n    if (!state->first_pass) {\n        value  = *top = *alloc;\n        *alloc = (*alloc)->_reserved.next_alloc;\n\n        if (!*root) {\n            *root = value;\n        }\n\n        switch (value->type) {\n        case json_array:\n\n            if (!(value->u.array.values = (json_value **)json_alloc\n                                              (state, value->u.array.length *\n                                              sizeof(json_value *), 0))) {\n                return 0;\n            }\n\n            value->u.array.length = 0;\n            break;\n\n        case json_object:\n\n            values_size = sizeof(*value->u.object.values) *\n                          value->u.object.length;\n\n            if (!((*(void **)&value->u.object.values) = json_alloc\n                                                            (state,\n                                                            values_size +\n                                                            ((size_t)value->u.\n                                                             object.values),\n                                                            0))) {\n                return 0;\n            }\n\n            value->_reserved.object_mem = (*(char **)&value->u.object.values) +\n                                          values_size;\n\n            value->u.object.length = 0;\n            break;\n\n        case json_string:\n\n            if (!(value->u.string.ptr = (json_char *)json_alloc\n                                            (state,\n                                            (value->u.string.length +\n                                             1) * sizeof(json_char), 0))) {\n                return 0;\n            }\n\n            value->u.string.length = 0;\n            break;\n\n        default:\n            break;\n        }\n\n        return 1;\n    }\n\n    value = (json_value *)json_alloc(state, sizeof(json_value), 1);\n\n    if (!value) {\n        return 0;\n    }\n\n    if (!*root) {\n        *root = value;\n    }\n\n    value->type   = type;\n    value->parent = *top;\n\n    if (*alloc) {\n        (*alloc)->_reserved.next_alloc = value;\n    }\n\n    *alloc = *top = value;\n\n    return 1;\n}\n\n#define e_off \\\n    ((int)(i - cur_line_begin))\n\n#define whitespace                          \\\ncase '\\n': \\\n    ++cur_line; cur_line_begin = i; \\\ncase ' ': \\\ncase '\\t': \\\ncase '\\r'\n\n#define string_add(b)                                         \\\n    do { if (!state.first_pass) { string[string_length] = b; \\\n         } ++string_length; } while (0)\n\nstatic const long\n    flag_next           = 1 << 0,\n    flag_reproc         = 1 << 1,\n    flag_need_comma     = 1 << 2,\n    flag_seek_value     = 1 << 3,\n    flag_escaped        = 1 << 4,\n    flag_string         = 1 << 5,\n    flag_need_colon     = 1 << 6,\n    flag_done           = 1 << 7,\n    flag_num_negative   = 1 << 8,\n    flag_num_zero       = 1 << 9,\n    flag_num_e          = 1 << 10,\n    flag_num_e_got_sign = 1 << 11,\n    flag_num_e_negative = 1 << 12,\n    flag_line_comment   = 1 << 13,\n    flag_block_comment  = 1 << 14;\n\njson_value *json_parse_ex(json_settings *settings,\n                          const json_char *json,\n                          size_t length,\n                          char *error_buf)\n{\n    json_char error[json_error_max];\n    unsigned int cur_line;\n    const json_char *cur_line_begin, *i, *end;\n    json_value *top, *root, *alloc = 0;\n    json_state state = { 0UL, 0U, 0UL, {0UL, 0, NULL, NULL, NULL}, 0 };\n    long flags;\n    long num_digits         = 0, num_e = 0;\n    json_int_t num_fraction = 0;\n\n    /* Skip UTF-8 BOM\n     */\n    if (length >= 3 && ((unsigned char)json[0]) == 0xEF\n        && ((unsigned char)json[1]) == 0xBB\n        && ((unsigned char)json[2]) == 0xBF) {\n        json   += 3;\n        length -= 3;\n    }\n\n    error[0] = '\\0';\n    end      = (json + length);\n\n    memcpy(&state.settings, settings, sizeof(json_settings));\n\n    if (!state.settings.mem_alloc) {\n        state.settings.mem_alloc = default_alloc;\n    }\n\n    if (!state.settings.mem_free) {\n        state.settings.mem_free = default_free;\n    }\n\n    memset(&state.uint_max, 0xFF, sizeof(state.uint_max));\n    memset(&state.ulong_max, 0xFF, sizeof(state.ulong_max));\n\n    state.uint_max  -= 8; /* limit of how much can be added before next check */\n    state.ulong_max -= 8;\n\n    for (state.first_pass = 1; state.first_pass >= 0; --state.first_pass) {\n        json_uchar uchar;\n        unsigned char uc_b1, uc_b2, uc_b3, uc_b4;\n        json_char *string          = 0;\n        unsigned int string_length = 0;\n\n        top   = root = 0;\n        flags = flag_seek_value;\n\n        cur_line       = 1;\n        cur_line_begin = json;\n\n        for (i = json;; ++i) {\n            json_char b = (i == end ? 0 : *i);\n\n            if (flags & flag_string) {\n                if (!b) {\n                    sprintf(error, \"Unexpected EOF in string (at %d:%d)\",\n                            cur_line, e_off);\n                    goto e_failed;\n                }\n\n                if (string_length > state.uint_max) {\n                    goto e_overflow;\n                }\n\n                if (flags & flag_escaped) {\n                    flags &= ~flag_escaped;\n\n                    switch (b) {\n                    case 'b':\n                        string_add('\\b');\n                        break;\n                    case 'f':\n                        string_add('\\f');\n                        break;\n                    case 'n':\n                        string_add('\\n');\n                        break;\n                    case 'r':\n                        string_add('\\r');\n                        break;\n                    case 't':\n                        string_add('\\t');\n                        break;\n                    case 'u':\n\n                        if (end - i < 4 ||\n                            (uc_b1 = hex_value(*++i)) == 0xFF ||\n                            (uc_b2 = hex_value(*++i)) == 0xFF\n                            || (uc_b3 = hex_value(*++i)) == 0xFF ||\n                            (uc_b4 = hex_value(*++i)) == 0xFF) {\n                            sprintf(error,\n                                    \"Invalid character value `%c` (at %d:%d)\",\n                                    b, cur_line, e_off);\n                            goto e_failed;\n                        }\n\n                        uc_b1 = uc_b1 * 16 + uc_b2;\n                        uc_b2 = uc_b3 * 16 + uc_b4;\n\n                        uchar = ((json_char)uc_b1) * 256 + uc_b2;\n\n                        if (sizeof(json_char) >= sizeof(json_uchar) ||\n                            (uc_b1 == 0 && uc_b2 <= 0x7F)) {\n                            string_add((json_char)uchar);\n                            break;\n                        }\n\n                        if (uchar <= 0x7FF) {\n                            if (state.first_pass) {\n                                string_length += 2;\n                            } else {\n                                string[string_length++] = 0xC0 |\n                                                          ((uc_b2 &\n                                                            0xC0) >>\n                                                           6) |\n                                                          ((uc_b1 & 0x7) << 2);\n                                string[string_length++] = 0x80 |\n                                                          (uc_b2 & 0x3F);\n                            }\n\n                            break;\n                        }\n\n                        if (state.first_pass) {\n                            string_length += 3;\n                        } else {\n                            string[string_length++] = 0xE0 |\n                                                      ((uc_b1 & 0xF0) >> 4);\n                            string[string_length++] = 0x80 |\n                                                      ((uc_b1 &\n                                                        0xF) <<\n                                                       2) |\n                                                      ((uc_b2 & 0xC0) >> 6);\n                            string[string_length++] = 0x80 | (uc_b2 & 0x3F);\n                        }\n\n                        break;\n\n                    default:\n                        string_add(b);\n                    }\n\n                    continue;\n                }\n\n                if (b == '\\\\') {\n                    flags |= flag_escaped;\n                    continue;\n                }\n\n                if (b == '\"') {\n                    if (!state.first_pass) {\n                        string[string_length] = 0;\n                    }\n\n                    flags &= ~flag_string;\n                    string = 0;\n\n                    switch (top->type) {\n                    case json_string:\n\n                        top->u.string.length = string_length;\n                        flags               |= flag_next;\n\n                        break;\n\n                    case json_object:\n\n                        if (state.first_pass) {\n                            (*(json_char **)&top->u.object.values) +=\n                                string_length + 1;\n                        } else {\n                            top->u.object.values[top->u.object.length].name\n                                = (json_char *)top->_reserved.object_mem;\n\n                            top->u.object.values[top->u.object.length].\n                            name_length\n                                = string_length;\n\n                            (*(json_char **)&top->_reserved.object_mem) +=\n                                string_length + 1;\n                        }\n\n                        flags |= flag_seek_value | flag_need_colon;\n                        continue;\n\n                    default:\n                        break;\n                    }\n                } else {\n                    string_add(b);\n                    continue;\n                }\n            }\n\n            if (state.settings.settings & json_enable_comments) {\n                if (flags & (flag_line_comment | flag_block_comment)) {\n                    if (flags & flag_line_comment) {\n                        if (b == '\\r' || b == '\\n' || !b) {\n                            flags &= ~flag_line_comment;\n                            --i;   /* so null can be reproc'd */\n                        }\n\n                        continue;\n                    }\n\n                    if (flags & flag_block_comment) {\n                        if (!b) {\n                            sprintf(error,\n                                    \"%d:%d: Unexpected EOF in block comment\",\n                                    cur_line, e_off);\n                            goto e_failed;\n                        }\n\n                        if (b == '*' && i < (end - 1) && i[1] == '/') {\n                            flags &= ~flag_block_comment;\n                            ++i;   /* skip closing sequence */\n                        }\n\n                        continue;\n                    }\n                } else if (b == '/') {\n                    if (!(flags & (flag_seek_value | flag_done)) && top->type !=\n                        json_object) {\n                        sprintf(error, \"%d:%d: Comment not allowed here\",\n                                cur_line, e_off);\n                        goto e_failed;\n                    }\n\n                    if (++i == end) {\n                        sprintf(error, \"%d:%d: EOF unexpected\", cur_line,\n                                e_off);\n                        goto e_failed;\n                    }\n\n                    switch (b = *i) {\n                    case '/':\n                        flags |= flag_line_comment;\n                        continue;\n\n                    case '*':\n                        flags |= flag_block_comment;\n                        continue;\n\n                    default:\n                        sprintf(error,\n                                \"%d:%d: Unexpected `%c` in comment opening sequence\", cur_line, e_off,\n                                b);\n                        goto e_failed;\n                    }\n                }\n            }\n\n            if (flags & flag_done) {\n                if (!b) {\n                    break;\n                }\n\n                switch (b) {\nwhitespace:\n                    continue;\n\n                default:\n                    sprintf(error, \"%d:%d: Trailing garbage: `%c`\", cur_line,\n                            e_off, b);\n                    goto e_failed;\n                }\n            }\n\n            if (flags & flag_seek_value) {\n                switch (b) {\nwhitespace:\n                    continue;\n\n                case ']':\n\n                    if (top->type == json_array) {\n                        flags =\n                            (flags &\n                             ~(flag_need_comma | flag_seek_value)) | flag_next;\n                    } else {\n                        sprintf(error, \"%d:%d: Unexpected ]\", cur_line, e_off);\n                        goto e_failed;\n                    }\n\n                    break;\n\n                default:\n\n                    if (flags & flag_need_comma) {\n                        if (b == ',') {\n                            flags &= ~flag_need_comma;\n                            continue;\n                        } else {\n                            sprintf(error, \"%d:%d: Expected , before %c\",\n                                    cur_line, e_off, b);\n                            goto e_failed;\n                        }\n                    }\n\n                    if (flags & flag_need_colon) {\n                        if (b == ':') {\n                            flags &= ~flag_need_colon;\n                            continue;\n                        } else {\n                            sprintf(error, \"%d:%d: Expected : before %c\",\n                                    cur_line, e_off, b);\n                            goto e_failed;\n                        }\n                    }\n\n                    flags &= ~flag_seek_value;\n\n                    switch (b) {\n                    case '{':\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_object)) {\n                            goto e_alloc_failure;\n                        }\n\n                        continue;\n\n                    case '[':\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_array)) {\n                            goto e_alloc_failure;\n                        }\n\n                        flags |= flag_seek_value;\n                        continue;\n\n                    case '\"':\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_string)) {\n                            goto e_alloc_failure;\n                        }\n\n                        flags |= flag_string;\n\n                        string        = top->u.string.ptr;\n                        string_length = 0;\n\n                        continue;\n\n                    case 't':\n\n                        if ((end - i) < 3 || *(++i) != 'r' || *(++i) != 'u' ||\n                            *(++i) != 'e') {\n                            goto e_unknown_value;\n                        }\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_boolean)) {\n                            goto e_alloc_failure;\n                        }\n\n                        top->u.boolean = 1;\n\n                        flags |= flag_next;\n                        break;\n\n                    case 'f':\n\n                        if ((end - i) < 4 || *(++i) != 'a' || *(++i) != 'l' ||\n                            *(++i) != 's' || *(++i) != 'e') {\n                            goto e_unknown_value;\n                        }\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_boolean)) {\n                            goto e_alloc_failure;\n                        }\n\n                        flags |= flag_next;\n                        break;\n\n                    case 'n':\n\n                        if ((end - i) < 3 || *(++i) != 'u' || *(++i) != 'l' ||\n                            *(++i) != 'l') {\n                            goto e_unknown_value;\n                        }\n\n                        if (!new_value(&state, &top, &root, &alloc,\n                                       json_null)) {\n                            goto e_alloc_failure;\n                        }\n\n                        flags |= flag_next;\n                        break;\n\n                    default:\n\n                        if (isdigit((uint8_t)b) || b == '-') {\n                            if (!new_value(&state, &top, &root, &alloc,\n                                           json_integer)) {\n                                goto e_alloc_failure;\n                            }\n\n                            if (!state.first_pass) {\n                                while (isdigit((uint8_t)b) || b == '+' || b ==\n                                       '-'\n                                       || b == 'e' || b == 'E' || b == '.') {\n                                    if ((++i) == end) {\n                                        b = 0;\n                                        break;\n                                    }\n\n                                    b = *i;\n                                }\n\n                                flags |= flag_next | flag_reproc;\n                                break;\n                            }\n\n                            flags &= ~(flag_num_negative | flag_num_e |\n                                       flag_num_e_got_sign |\n                                       flag_num_e_negative |\n                                       flag_num_zero);\n\n                            num_digits   = 0;\n                            num_fraction = 0;\n                            num_e        = 0;\n\n                            if (b != '-') {\n                                flags |= flag_reproc;\n                                break;\n                            }\n\n                            flags |= flag_num_negative;\n                            continue;\n                        } else {\n                            sprintf(error,\n                                    \"%d:%d: Unexpected %c when seeking value\",\n                                    cur_line, e_off, b);\n                            goto e_failed;\n                        }\n                    }\n                }\n            } else {\n                switch (top->type) {\n                case json_object:\n\n                    switch (b) {\nwhitespace:\n                        continue;\n\n                    case '\"':\n\n                        if (flags & flag_need_comma) {\n                            sprintf(error, \"%d:%d: Expected , before \\\"\",\n                                    cur_line, e_off);\n                            goto e_failed;\n                        }\n\n                        flags |= flag_string;\n\n                        string        = (json_char *)top->_reserved.object_mem;\n                        string_length = 0;\n\n                        break;\n\n                    case '}':\n\n                        flags = (flags & ~flag_need_comma) | flag_next;\n                        break;\n\n                    case ',':\n\n                        if (flags & flag_need_comma) {\n                            flags &= ~flag_need_comma;\n                            break;\n                        }\n\n                    default:\n\n                        sprintf(error, \"%d:%d: Unexpected `%c` in object\",\n                                cur_line, e_off, b);\n                        goto e_failed;\n                    }\n\n                    break;\n\n                case json_integer:\n                case json_double:\n\n                    if (isdigit((uint8_t)b)) {\n                        ++num_digits;\n\n                        if (top->type == json_integer || flags & flag_num_e) {\n                            if (!(flags & flag_num_e)) {\n                                if (flags & flag_num_zero) {\n                                    sprintf(error,\n                                            \"%d:%d: Unexpected `0` before `%c`\",\n                                            cur_line, e_off, b);\n                                    goto e_failed;\n                                }\n\n                                if (num_digits == 1 && b == '0') {\n                                    flags |= flag_num_zero;\n                                }\n                            } else {\n                                flags |= flag_num_e_got_sign;\n                                num_e  = (num_e * 10) + (b - '0');\n                                continue;\n                            }\n\n                            top->u.integer = (top->u.integer * 10) + (b - '0');\n                            continue;\n                        }\n\n                        num_fraction = (num_fraction * 10) + (b - '0');\n                        continue;\n                    }\n\n                    if (b == '+' || b == '-') {\n                        if ((flags & flag_num_e) &&\n                            !(flags & flag_num_e_got_sign)) {\n                            flags |= flag_num_e_got_sign;\n\n                            if (b == '-') {\n                                flags |= flag_num_e_negative;\n                            }\n\n                            continue;\n                        }\n                    } else if (b == '.' && top->type == json_integer) {\n                        if (!num_digits) {\n                            sprintf(error, \"%d:%d: Expected digit before `.`\",\n                                    cur_line, e_off);\n                            goto e_failed;\n                        }\n\n                        top->type  = json_double;\n                        top->u.dbl = (double)top->u.integer;\n\n                        num_digits = 0;\n                        continue;\n                    }\n\n                    if (!(flags & flag_num_e)) {\n                        if (top->type == json_double) {\n                            if (!num_digits) {\n                                sprintf(error,\n                                        \"%d:%d: Expected digit after `.`\",\n                                        cur_line, e_off);\n                                goto e_failed;\n                            }\n\n                            top->u.dbl += ((double)num_fraction) /\n                                          (pow(10, (double)num_digits));\n                        }\n\n                        if (b == 'e' || b == 'E') {\n                            flags |= flag_num_e;\n\n                            if (top->type == json_integer) {\n                                top->type  = json_double;\n                                top->u.dbl = (double)top->u.integer;\n                            }\n\n                            num_digits = 0;\n                            flags     &= ~flag_num_zero;\n\n                            continue;\n                        }\n                    } else {\n                        if (!num_digits) {\n                            sprintf(error, \"%d:%d: Expected digit after `e`\",\n                                    cur_line, e_off);\n                            goto e_failed;\n                        }\n\n                        top->u.dbl *=\n                            pow(10,\n                                (double)(flags &\n                                         flag_num_e_negative ? -num_e : num_e));\n                    }\n\n                    if (flags & flag_num_negative) {\n                        if (top->type == json_integer) {\n                            top->u.integer = -top->u.integer;\n                        } else {\n                            top->u.dbl = -top->u.dbl;\n                        }\n                    }\n\n                    flags |= flag_next | flag_reproc;\n                    break;\n\n                default:\n                    break;\n                }\n            }\n\n            if (flags & flag_reproc) {\n                flags &= ~flag_reproc;\n                --i;\n            }\n\n            if (flags & flag_next) {\n                flags = (flags & ~flag_next) | flag_need_comma;\n\n                if (!top->parent) {\n                    /* root value done */\n\n                    flags |= flag_done;\n                    continue;\n                }\n\n                if (top->parent->type == json_array) {\n                    flags |= flag_seek_value;\n                }\n\n                if (!state.first_pass) {\n                    json_value *parent = top->parent;\n\n                    switch (parent->type) {\n                    case json_object:\n\n                        parent->u.object.values\n                        [parent->u.object.length].value = top;\n\n                        break;\n\n                    case json_array:\n\n                        parent->u.array.values\n                        [parent->u.array.length] = top;\n\n                        break;\n\n                    default:\n                        break;\n                    }\n                }\n\n                if ((++top->parent->u.array.length) > state.uint_max) {\n                    goto e_overflow;\n                }\n\n                top = top->parent;\n\n                continue;\n            }\n        }\n\n        alloc = root;\n    }\n\n    return root;\n\ne_unknown_value:\n\n    sprintf(error, \"%d:%d: Unknown value\", cur_line, e_off);\n    goto e_failed;\n\ne_alloc_failure:\n\n    strcpy(error, \"Memory allocation failure\");\n    goto e_failed;\n\ne_overflow:\n\n    sprintf(error, \"%d:%d: Too long (caught overflow)\", cur_line, e_off);\n    goto e_failed;\n\ne_failed:\n\n    if (error_buf) {\n        if (*error) {\n            strcpy(error_buf, error);\n        } else {\n            strcpy(error_buf, \"Unknown error\");\n        }\n    }\n\n    if (state.first_pass) {\n        alloc = root;\n    }\n\n    while (alloc) {\n        top = alloc->_reserved.next_alloc;\n        state.settings.mem_free(alloc, state.settings.user_data);\n        alloc = top;\n    }\n\n    if (!state.first_pass) {\n        json_value_free_ex(&state.settings, root);\n    }\n\n    return 0;\n}\n\njson_value *json_parse(const json_char *json, size_t length)\n{\n    json_settings settings = { 0UL, 0, NULL, NULL, NULL };\n    return json_parse_ex(&settings, json, length, 0);\n}\n\nvoid json_value_free_ex(json_settings *settings, json_value *value)\n{\n    json_value *cur_value;\n\n    if (!value) {\n        return;\n    }\n\n    value->parent = 0;\n\n    while (value) {\n        switch (value->type) {\n        case json_array:\n\n            if (!value->u.array.length) {\n                settings->mem_free(value->u.array.values, settings->user_data);\n                break;\n            }\n\n            value = value->u.array.values[--value->u.array.length];\n            continue;\n\n        case json_object:\n\n            if (!value->u.object.length) {\n                settings->mem_free(value->u.object.values, settings->user_data);\n                break;\n            }\n\n            value = value->u.object.values[--value->u.object.length].value;\n            continue;\n\n        case json_string:\n\n            settings->mem_free(value->u.string.ptr, settings->user_data);\n            break;\n\n        default:\n            break;\n        }\n\n        cur_value = value;\n        value     = value->parent;\n        settings->mem_free(cur_value, settings->user_data);\n    }\n}\n\nvoid json_value_free(json_value *value)\n{\n    json_settings settings = { 0UL, 0, NULL, NULL, NULL };\n    settings.mem_free = default_free;\n    json_value_free_ex(&settings, value);\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/json.h",
    "content": "/* vim: set et ts=3 sw=3 sts=3 ft=c:\n *\n * Copyright (C) 2012, 2013, 2014 James McLaughlin et al.  All rights reserved.\n * https://github.com/udp/json-parser\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 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#ifndef _JSON_H\n#define _JSON_H\n\n#ifndef json_char\n#define json_char char\n#endif\n\n#ifndef json_int_t\n#ifndef _MSC_VER\n#include <inttypes.h>\n#define json_int_t int64_t\n#else\n#define json_int_t __int64\n#endif\n#endif\n\n#include <stdlib.h>\n\n#ifdef __cplusplus\n\n#include <string.h>\n\nextern \"C\"\n{\n#endif\n\ntypedef struct {\n    unsigned long max_memory;\n    int settings;\n\n    /* Custom allocator support (leave null to use malloc/free)\n     */\n\n    void * (*mem_alloc)(size_t, int zero, void *user_data);\n    void (*mem_free)(void *, void *user_data);\n\n    void *user_data;       /* will be passed to mem_alloc and mem_free */\n} json_settings;\n\n#define json_enable_comments  0x01\n\ntypedef enum {\n    json_none,\n    json_object,\n    json_array,\n    json_integer,\n    json_double,\n    json_string,\n    json_boolean,\n    json_null\n} json_type;\n\nextern const struct _json_value json_value_none;\n\ntypedef struct _json_value {\n    struct _json_value *parent;\n\n    json_type type;\n\n    union {\n        int boolean;\n        json_int_t integer;\n        double dbl;\n\n        struct {\n            unsigned int length;\n            json_char *ptr;      /* null terminated */\n        } string;\n\n        struct {\n            unsigned int length;\n\n            struct {\n                json_char *name;\n                unsigned int name_length;\n\n                struct _json_value *value;\n            } *values;\n\n#if defined(__cplusplus) && __cplusplus >= 201103L\n            decltype(values) begin() const\n            {\n                return values;\n            }\n            decltype(values) end() const\n            {\n                return values + length;\n            }\n#endif\n        } object;\n\n        struct {\n            unsigned int length;\n            struct _json_value **values;\n\n#if defined(__cplusplus) && __cplusplus >= 201103L\n            decltype(values) begin() const\n            {\n                return values;\n            }\n            decltype(values) end() const\n            {\n                return values + length;\n            }\n#endif\n        } array;\n    } u;\n\n    union {\n        struct _json_value *next_alloc;\n        void *object_mem;\n    } _reserved;\n\n    /* Some C++ operator sugar */\n\n#ifdef __cplusplus\n\npublic:\n\n    inline _json_value(){\n        memset(this, 0, sizeof(_json_value));\n    }\n\n    inline const struct _json_value &operator [] (int index) const {\n        if (type != json_array || index < 0\n            || ((unsigned int)index) >= u.array.length) {\n            return json_value_none;\n        }\n\n        return *u.array.values[index];\n    }\n\n    inline const struct _json_value &operator [] (const char *index) const {\n        if (type != json_object) {\n            return json_value_none;\n        }\n\n        for (unsigned int i = 0; i < u.object.length; ++i)\n            if (!strcmp(u.object.values[i].name, index)) {\n                return *u.object.values[i].value;\n            }\n\n        return json_value_none;\n    }\n\n    inline operator const char * () const\n    {\n        switch (type) {\n        case json_string:\n            return u.string.ptr;\n\n        default:\n            return \"\";\n        }\n    }\n\n    inline operator json_int_t() const\n    {\n        switch (type) {\n        case json_integer:\n            return u.integer;\n\n        case json_double:\n            return (json_int_t)u.dbl;\n\n        default:\n            return 0;\n        }\n    }\n\n    inline operator bool() const\n    {\n        if (type != json_boolean) {\n            return false;\n        }\n\n        return u.boolean != 0;\n    }\n\n    inline operator double () const\n    {\n        switch (type) {\n        case json_integer:\n            return (double)u.integer;\n\n        case json_double:\n            return u.dbl;\n\n        default:\n            return 0;\n        }\n    }\n\n#endif\n} json_value;\n\njson_value *json_parse(const json_char *json,\n                       size_t length);\n\n#define json_error_max 128\njson_value *json_parse_ex(json_settings *settings,\n                          const json_char *json,\n                          size_t length,\n                          char *error);\n\nvoid json_value_free(json_value *);\n\n/* Not usually necessary, unless you used a custom mem_alloc and now want to\n * use a custom mem_free.\n */\nvoid json_value_free_ex(json_settings *settings,\n                        json_value *);\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/local.c",
    "content": "/*\n * local.c - Setup a socks5 proxy through remote shadowsocks server\n *\n * Copyright (C) 2013 - 2015, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <unistd.h>\n#include <getopt.h>\n\n#ifndef __MINGW32__\n#include <errno.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#endif\n\n#ifdef LIB_ONLY\n#include <pthread.h>\n#include \"shadowsocks.h\"\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#include <libcork/core.h>\n#include <udns.h>\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n#include \"netutils.h\"\n#include \"utils.h\"\n#include \"socks5.h\"\n#include \"acl.h\"\n#include \"local.h\"\n\n#ifndef EAGAIN\n#define EAGAIN EWOULDBLOCK\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK EAGAIN\n#endif\n\n#ifndef BUF_SIZE\n#define BUF_SIZE 2048\n#endif\n\nint verbose = 1;\nint keep_resolving = 1;\n\n#ifdef ANDROID\nint vpn        = 0;\nuint64_t tx    = 0;\nuint64_t rx    = 0;\nev_tstamp last = 0;\nchar *prefix;\n#endif\n\nstatic int acl = 0;\nstatic int mode = TCP_AND_UDP;\n\nstatic int fast_open = 0;\n#ifdef HAVE_SETRLIMIT\n#ifndef LIB_ONLY\nstatic int nofile = 0;\n#endif\n#endif\n\nstatic int auth = 0;\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void server_send_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents);\nstatic void accept_cb(EV_P_ ev_io *w, int revents);\nstatic void signal_cb(EV_P_ ev_signal *w, int revents);\n\nstatic int create_and_bind(const char *addr, const char *port);\nstatic remote_t *create_remote(listen_ctx_t *listener, struct sockaddr *addr);\nstatic void free_remote(remote_t *remote);\nstatic void close_and_free_remote(EV_P_ remote_t *remote);\nstatic void free_server(server_t *server);\nstatic void close_and_free_server(EV_P_ server_t *server);\n\nstatic remote_t *new_remote(int fd, int timeout);\nstatic server_t *new_server(int fd, int method);\n\nstatic struct cork_dllist connections;\n\n#ifndef __MINGW32__\nint setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\n#endif\n\nint create_and_bind(const char *addr, const char *port)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp;\n    int s, listen_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;   /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */\n\n    s = getaddrinfo(addr, port, &hints, &result);\n    if (s != 0) {\n        LOGI(\"getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    for (rp = result; rp != NULL; rp = rp->ai_next) {\n        listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (listen_sock == -1) {\n            continue;\n        }\n\n        int opt = 1;\n        setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n        setsockopt(listen_sock, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n        int err = set_reuseport(listen_sock);\n        if (err == 0) {\n            LOGI(\"tcp port reuse enabled\");\n        }\n\n        s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"bind\");\n        }\n\n        close(listen_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"Could not bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return listen_sock;\n}\n\nstatic void free_connections(struct ev_loop *loop)\n{\n    struct cork_dllist_item *curr, *next;\n    cork_dllist_foreach_void(&connections, curr, next) {\n        server_t *server = cork_container_of(curr, server_t, entries);\n        remote_t *remote = server->remote;\n        close_and_free_server(loop, server);\n        close_and_free_remote(loop, remote);\n    }\n}\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_recv_ctx = (server_ctx_t *)w;\n    server_t *server              = server_recv_ctx->server;\n    remote_t *remote              = server->remote;\n    buffer_t *buf;\n    ssize_t r;\n\n    if (remote == NULL) {\n        buf = server->buf;\n    } else {\n        buf = remote->buf;\n    }\n\n    r = recv(server->fd, buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            if (verbose)\n                ERROR(\"server_recv_cb_recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    buf->len = r;\n\n    while (1) {\n        // local socks5 server\n        if (server->stage == 5) {\n            if (remote == NULL) {\n                LOGE(\"invalid remote\");\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            if (!remote->direct && remote->send_ctx->connected && auth) {\n                ss_gen_hash(remote->buf, &remote->counter, server->e_ctx, BUF_SIZE);\n            }\n\n            // insert shadowsocks header\n            if (!remote->direct) {\n                // SSR beg\n                if (server->protocol_plugin) {\n                    obfs_class *protocol_plugin = server->protocol_plugin;\n                    if (protocol_plugin->client_pre_encrypt) {\n                        remote->buf->len = protocol_plugin->client_pre_encrypt(server->protocol, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n                    }\n                }\n                int err = ss_encrypt(remote->buf, server->e_ctx, BUF_SIZE);\n\n                if (err) {\n                    LOGE(\"server invalid password or cipher\");\n                    close_and_free_remote(EV_A_ remote);\n                    close_and_free_server(EV_A_ server);\n                    return;\n                }\n\n                if (server->obfs_plugin) {\n                    obfs_class *obfs_plugin = server->obfs_plugin;\n                    if (obfs_plugin->client_encode) {\n                        remote->buf->len = obfs_plugin->client_encode(server->obfs, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n                    }\n                }\n                // SSR end\n#ifdef ANDROID\n                tx += r;\n#endif\n            }\n\n            if (!remote->send_ctx->connected) {\n#ifdef ANDROID\n                if (vpn) {\n                    int not_protect = 0;\n                    if (remote->addr.ss_family == AF_INET) {\n                        struct sockaddr_in *s = (struct sockaddr_in *)&remote->addr;\n                        if (s->sin_addr.s_addr == inet_addr(\"127.0.0.1\")) not_protect = 1;\n                    }\n                    if (!not_protect) {\n                        if (protect_socket(remote->fd) == -1) {\n                            ERROR(\"protect_socket\");\n                            close_and_free_remote(EV_A_ remote);\n                            close_and_free_server(EV_A_ server);\n                            return;\n                        }\n                    }\n                }\n#endif\n\n                remote->buf->idx = 0;\n\n                if (!fast_open || remote->direct) {\n                    // connecting, wait until connected\n                    int r = connect(remote->fd, (struct sockaddr *)&(remote->addr), remote->addr_len);\n\n                    if (r == -1 && errno != CONNECT_IN_PROGRESS) {\n                        ERROR(\"connect\");\n                        close_and_free_remote(EV_A_ remote);\n                        close_and_free_server(EV_A_ server);\n                        return;\n                    }\n\n                    if (r == 0) {\n                        if (verbose) LOGI(\"connected immediately\");\n                        remote_send_cb(EV_A_ & remote->send_ctx->io, 0);\n                    } else {\n                        // wait on remote connected event\n                        ev_io_stop(EV_A_ & server_recv_ctx->io);\n                        ev_io_start(EV_A_ & remote->send_ctx->io);\n                        ev_timer_start(EV_A_ & remote->send_ctx->watcher);\n                    }\n\n                } else {\n#ifdef TCP_FASTOPEN\n#ifdef __APPLE__\n                    ((struct sockaddr_in *)&(remote->addr))->sin_len = sizeof(struct sockaddr_in);\n                    sa_endpoints_t endpoints;\n                    bzero((char *)&endpoints, sizeof(endpoints));\n                    endpoints.sae_dstaddr    = (struct sockaddr *)&(remote->addr);\n                    endpoints.sae_dstaddrlen = remote->addr_len;\n\n                    int s = connectx(remote->fd, &endpoints, SAE_ASSOCID_ANY,\n                                     CONNECT_RESUME_ON_READ_WRITE | CONNECT_DATA_IDEMPOTENT,\n                                     NULL, 0, NULL, NULL);\n                    if (s == 0) {\n                        s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n                    }\n#else\n                    int s = sendto(remote->fd, remote->buf->array, remote->buf->len, MSG_FASTOPEN,\n                                   (struct sockaddr *)&(remote->addr), remote->addr_len);\n#endif\n                    if (s == -1) {\n                        if (errno == CONNECT_IN_PROGRESS) {\n                            // in progress, wait until connected\n                            remote->buf->idx = 0;\n                            ev_io_stop(EV_A_ & server_recv_ctx->io);\n                            ev_io_start(EV_A_ & remote->send_ctx->io);\n                            return;\n                        } else {\n                            ERROR(\"sendto\");\n                            if (errno == ENOTCONN) {\n                                LOGE(\"fast open is not supported on this platform\");\n                                // just turn it off\n                                fast_open = 0;\n                            }\n                            close_and_free_remote(EV_A_ remote);\n                            close_and_free_server(EV_A_ server);\n                            return;\n                        }\n                    } else if (s <= (int)(remote->buf->len)) {\n                        remote->buf->len -= s;\n                        remote->buf->idx  = s;\n                    }\n\n                    // Just connected\n                    remote->send_ctx->connected = 1;\n                    ev_timer_stop(EV_A_ & remote->send_ctx->watcher);\n                    ev_io_start(EV_A_ & remote->recv_ctx->io);\n#else\n                    // if TCP_FASTOPEN is not defined, fast_open will always be 0\n                    LOGE(\"can't come here\");\n                    exit(1);\n#endif\n                }\n            } else {\n                int s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n                if (s == -1) {\n                    if (errno == EAGAIN || errno == EWOULDBLOCK) {\n                        // no data, wait for send\n                        remote->buf->idx = 0;\n                        ev_io_stop(EV_A_ & server_recv_ctx->io);\n                        ev_io_start(EV_A_ & remote->send_ctx->io);\n                        return;\n                    } else {\n                        ERROR(\"server_recv_cb_send\");\n                        close_and_free_remote(EV_A_ remote);\n                        close_and_free_server(EV_A_ server);\n                        return;\n                    }\n                } else if (s < (int)(remote->buf->len)) {\n                    remote->buf->len -= s;\n                    remote->buf->idx  = s;\n                    ev_io_stop(EV_A_ & server_recv_ctx->io);\n                    ev_io_start(EV_A_ & remote->send_ctx->io);\n                    return;\n                }\n            }\n\n            // all processed\n            return;\n        } else if (server->stage == 0) {\n            struct method_select_response response;\n            response.ver    = SVERSION;\n            response.method = 0;\n            char *send_buf = (char *)&response;\n            send(server->fd, send_buf, sizeof(response), 0);\n            server->stage = 1;\n\n            int off = (buf->array[1] & 0xff) + 2;\n            if (buf->array[0] == 0x05 && off < (int)(buf->len)) {\n                memmove(buf->array, buf->array + off, buf->len - off);\n                buf->len -= off;\n                continue;\n            }\n\n            return;\n        } else if (server->stage == 1) {\n            struct socks5_request *request = (struct socks5_request *)buf->array;\n\n            struct sockaddr_in sock_addr;\n            memset(&sock_addr, 0, sizeof(sock_addr));\n\n            int udp_assc = 0;\n\n            if (mode != TCP_ONLY && request->cmd == 3) {\n                udp_assc = 1;\n                socklen_t addr_len = sizeof(sock_addr);\n                getsockname(server->fd, (struct sockaddr *)&sock_addr,\n                            &addr_len);\n                if (verbose) {\n                    LOGI(\"udp assc request accepted\");\n                }\n            } else if (request->cmd != 1) {\n                LOGE(\"unsupported cmd: %d\", request->cmd);\n                struct socks5_response response;\n                response.ver  = SVERSION;\n                response.rep  = CMD_NOT_SUPPORTED;\n                response.rsv  = 0;\n                response.atyp = 1;\n                char *send_buf = (char *)&response;\n                send(server->fd, send_buf, 4, 0);\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            } else {\n                char host[257], port[16];\n\n                buffer_t ss_addr_to_send;\n                buffer_t *abuf = &ss_addr_to_send;\n                balloc(abuf, BUF_SIZE);\n\n                abuf->array[abuf->len++] = request->atyp;\n\n                // get remote addr and port\n                if (request->atyp == 1) {\n                    // IP V4\n                    size_t in_addr_len = sizeof(struct in_addr);\n                    memcpy(abuf->array + abuf->len, buf->array + 4, in_addr_len + 2);\n                    abuf->len += in_addr_len + 2;\n\n                    if (acl || verbose) {\n                        uint16_t p = ntohs(*(uint16_t *)(buf->array + 4 + in_addr_len));\n                        dns_ntop(AF_INET, (const void *)(buf->array + 4),\n                                 host, INET_ADDRSTRLEN);\n                        sprintf(port, \"%d\", p);\n                    }\n                } else if (request->atyp == 3) {\n                    // Domain name\n                    uint8_t name_len = *(uint8_t *)(buf->array + 4);\n                    abuf->array[abuf->len++] = name_len;\n                    memcpy(abuf->array + abuf->len, buf->array + 4 + 1, name_len + 2);\n                    abuf->len += name_len + 2;\n\n                    if (acl || verbose) {\n                        uint16_t p =\n                            ntohs(*(uint16_t *)(buf->array + 4 + 1 + name_len));\n                        memcpy(host, buf->array + 4 + 1, name_len);\n                        host[name_len] = '\\0';\n                        sprintf(port, \"%d\", p);\n                    }\n                } else if (request->atyp == 4) {\n                    // IP V6\n                    size_t in6_addr_len = sizeof(struct in6_addr);\n                    memcpy(abuf->array + abuf->len, buf->array + 4, in6_addr_len + 2);\n                    abuf->len += in6_addr_len + 2;\n\n                    if (acl || verbose) {\n                        uint16_t p = ntohs(*(uint16_t *)(buf->array + 4 + in6_addr_len));\n                        dns_ntop(AF_INET6, (const void *)(buf->array + 4),\n                                 host, INET6_ADDRSTRLEN);\n                        sprintf(port, \"%d\", p);\n                    }\n                } else {\n                    bfree(abuf);\n                    LOGE(\"unsupported addrtype: %d\", request->atyp);\n                    close_and_free_remote(EV_A_ remote);\n                    close_and_free_server(EV_A_ server);\n                    return;\n                }\n\n                server->stage = 5;\n\n                buf->len -= (3 + abuf->len);\n                if (buf->len > 0) {\n                    memmove(buf->array, buf->array + 3 + abuf->len, buf->len);\n                }\n\n                if (verbose) {\n                    if (request->atyp == 4)\n                        LOGI(\"connect to [%s]:%s\", host, port);\n                    else\n                        LOGI(\"connect to %s:%s\", host, port);\n                }\n\n                if ((acl && (request->atyp == 1 || request->atyp == 4) && acl_match_ip(host))) {\n                    if (verbose) {\n                        LOGI(\"bypass %s:%s\", host, port);\n                    }\n                    struct sockaddr_storage storage;\n                    memset(&storage, 0, sizeof(struct sockaddr_storage));\n                    if (get_sockaddr(host, port, &storage, 0) != -1) {\n                        remote         = create_remote(server->listener, (struct sockaddr *)&storage);\n                        remote->direct = 1;\n                    }\n                } else {\n                    remote = create_remote(server->listener, NULL);\n                }\n\n                if (remote == NULL) {\n                    bfree(abuf);\n                    LOGE(\"invalid remote addr\");\n                    close_and_free_server(EV_A_ server);\n                    return;\n                }\n\n                // SSR beg\n                if (server->listener->list_obfs_global[remote->remote_index] == NULL && server->obfs_plugin) {\n                    server->listener->list_obfs_global[remote->remote_index] = server->obfs_plugin->init_data();\n                }\n                if (server->listener->list_protocol_global[remote->remote_index] == NULL && server->protocol_plugin) {\n                    server->listener->list_protocol_global[remote->remote_index] = server->protocol_plugin->init_data();\n                }\n\n                server_info _server_info;\n                memset(&_server_info, 0, sizeof(server_info));\n                strcpy(_server_info.host, inet_ntoa(((struct sockaddr_in*)&remote->addr)->sin_addr));\n                _server_info.port = ((struct sockaddr_in*)&remote->addr)->sin_port;\n                _server_info.port = _server_info.port >> 8 | _server_info.port << 8;\n                _server_info.param = server->listener->obfs_param;\n                _server_info.g_data = server->listener->list_obfs_global[remote->remote_index];\n                _server_info.head_len = get_head_size(ss_addr_to_send.array, 320, 30);\n                _server_info.iv = server->e_ctx->evp.iv;\n                _server_info.iv_len = enc_get_iv_len();\n                _server_info.key = enc_get_key();\n                _server_info.key_len = enc_get_key_len();\n                _server_info.tcp_mss = 1460;\n\n                if (server->obfs_plugin)\n                    server->obfs_plugin->set_server_info(server->obfs, &_server_info);\n\n                _server_info.param = NULL;\n                _server_info.g_data = server->listener->list_protocol_global[remote->remote_index];\n\n                if (server->protocol_plugin)\n                    server->protocol_plugin->set_server_info(server->protocol, &_server_info);\n                // SSR end\n\n                if (!remote->direct) {\n                    if (auth) {\n                        abuf->array[0] |= ONETIMEAUTH_FLAG;\n                        ss_onetimeauth(abuf, server->e_ctx->evp.iv, BUF_SIZE);\n                    }\n\n                    brealloc(remote->buf, buf->len + abuf->len, BUF_SIZE);\n                    memcpy(remote->buf->array, abuf->array, abuf->len);\n                    remote->buf->len = buf->len + abuf->len;\n\n                    if (buf->len > 0) {\n                        if (auth) {\n                            ss_gen_hash(buf, &remote->counter, server->e_ctx, BUF_SIZE);\n                        }\n                        memcpy(remote->buf->array + abuf->len, buf->array, buf->len);\n                    }\n                } else {\n                    if (buf->len > 0) {\n                        memcpy(remote->buf->array, buf->array, buf->len);\n                        remote->buf->len = buf->len;\n                    }\n                }\n\n                server->remote = remote;\n                remote->server = server;\n\n                bfree(abuf);\n            }\n\n            // Fake reply\n            struct socks5_response response;\n            response.ver  = SVERSION;\n            response.rep  = 0;\n            response.rsv  = 0;\n            response.atyp = 1;\n\n            memcpy(server->buf->array, &response, sizeof(struct socks5_response));\n            memcpy(server->buf->array + sizeof(struct socks5_response),\n                   &sock_addr.sin_addr, sizeof(sock_addr.sin_addr));\n            memcpy(server->buf->array + sizeof(struct socks5_response) +\n                   sizeof(sock_addr.sin_addr),\n                   &sock_addr.sin_port, sizeof(sock_addr.sin_port));\n\n            int reply_size = sizeof(struct socks5_response) +\n                             sizeof(sock_addr.sin_addr) +\n                             sizeof(sock_addr.sin_port);\n            int s = send(server->fd, server->buf->array, reply_size, 0);\n            if (s < reply_size) {\n                LOGE(\"failed to send fake reply\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            if (udp_assc) {\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n        }\n    }\n}\n\nstatic void server_send_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_send_ctx = (server_ctx_t *)w;\n    server_t *server              = server_send_ctx->server;\n    remote_t *remote              = server->remote;\n    if (server->buf->len == 0) {\n        // close and free\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(server->fd, server->buf->array + server->buf->idx,\n                         server->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"server_send_cb_send\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < (ssize_t)(server->buf->len)) {\n            // partly sent, move memory, wait for the next time to send\n            server->buf->len -= s;\n            server->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            server->buf->len = 0;\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_send_ctx->io);\n            ev_io_start(EV_A_ & remote->recv_ctx->io);\n            return;\n        }\n    }\n}\n\n#ifdef ANDROID\nstatic void stat_update_cb(struct ev_loop *loop)\n{\n    ev_tstamp now = ev_now(loop);\n    if (now - last > 1.0) {\n        send_traffic_stat(tx, rx);\n        last = now;\n    }\n}\n\n#endif\n\nstatic void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)(((void *)watcher)\n                                                - sizeof(ev_io));\n    remote_t *remote = remote_ctx->remote;\n    server_t *server = remote->server;\n\n    if (verbose) {\n        LOGI(\"TCP connection timeout\");\n    }\n\n    close_and_free_remote(EV_A_ remote);\n    close_and_free_server(EV_A_ server);\n}\n\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_recv_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_recv_ctx->remote;\n    server_t *server              = remote->server;\n\n    ev_timer_again(EV_A_ & remote->recv_ctx->watcher);\n\n#ifdef ANDROID\n    stat_update_cb(loop);\n#endif\n\n    ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"remote_recv_cb_recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    server->buf->len = r;\n\n    if (!remote->direct) {\n#ifdef ANDROID\n        rx += server->buf->len;\n#endif\n        if ( r == 0 )\n            return;\n        // SSR beg\n        if (server->obfs_plugin) {\n            obfs_class *obfs_plugin = server->obfs_plugin;\n            if (obfs_plugin->client_decode) {\n                int needsendback;\n                server->buf->len = obfs_plugin->client_decode(server->obfs, &server->buf->array, server->buf->len, &server->buf->capacity, &needsendback);\n                if ((int)server->buf->len < 0) {\n                    LOGE(\"client_decode\");\n                    close_and_free_remote(EV_A_ remote);\n                    close_and_free_server(EV_A_ server);\n                    return;\n                }\n                if (needsendback) {\n                    size_t capacity = BUF_SIZE;\n                    char *buf = (char*)malloc(capacity);\n                    obfs_class *obfs_plugin = server->obfs_plugin;\n                    if (obfs_plugin->client_encode) {\n                        int len = obfs_plugin->client_encode(server->obfs, &buf, 0, &capacity);\n                        send(remote->fd, buf, len, 0);\n                    }\n                    free(buf);\n                }\n            }\n        }\n        if (server->buf->len > 0) {\n        int err = ss_decrypt(server->buf, server->d_ctx, BUF_SIZE);\n            if (err) {\n                LOGE(\"remote invalid password or cipher\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n        }\n        if (server->protocol_plugin) {\n            obfs_class *protocol_plugin = server->protocol_plugin;\n            if (protocol_plugin->client_post_decrypt) {\n                server->buf->len = protocol_plugin->client_post_decrypt(server->protocol, &server->buf->array, server->buf->len, &server->buf->capacity);\n                if ((int)server->buf->len < 0) {\n                    LOGE(\"client_post_decrypt\");\n                    close_and_free_remote(EV_A_ remote);\n                    close_and_free_server(EV_A_ server);\n                    return;\n                }\n                if ( server->buf->len == 0 )\n                    return;\n            }\n        }\n        // SSR end\n    }\n\n    int s = send(server->fd, server->buf->array, server->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_recv_ctx->io);\n            ev_io_start(EV_A_ & server->send_ctx->io);\n        } else {\n            ERROR(\"remote_recv_cb_send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n        }\n    } else if (s < (int)(server->buf->len)) {\n        server->buf->len -= s;\n        server->buf->idx  = s;\n        ev_io_stop(EV_A_ & remote_recv_ctx->io);\n        ev_io_start(EV_A_ & server->send_ctx->io);\n    }\n\n    // Disable TCP_NODELAY after the first response are sent\n    int opt = 0;\n    setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n    setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n}\n\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_send_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_send_ctx->remote;\n    server_t *server              = remote->server;\n\n    if (!remote_send_ctx->connected) {\n        struct sockaddr_storage addr;\n        socklen_t len = sizeof addr;\n        int r         = getpeername(remote->fd, (struct sockaddr *)&addr, &len);\n        if (r == 0) {\n            remote_send_ctx->connected = 1;\n            ev_timer_stop(EV_A_ & remote_send_ctx->watcher);\n            ev_timer_start(EV_A_ & remote->recv_ctx->watcher);\n            ev_io_start(EV_A_ & remote->recv_ctx->io);\n\n            // no need to send any data\n            if (remote->buf->len == 0) {\n                ev_io_stop(EV_A_ & remote_send_ctx->io);\n                ev_io_start(EV_A_ & server->recv_ctx->io);\n                return;\n            }\n        } else {\n            // not connected\n            ERROR(\"getpeername\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    if (remote->buf->len == 0) {\n        // close and free\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(remote->fd, remote->buf->array + remote->buf->idx,\n                         remote->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"remote_send_cb_send\");\n                // close and free\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < (ssize_t)(remote->buf->len)) {\n            // partly sent, move memory, wait for the next time to send\n            remote->buf->len -= s;\n            remote->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            remote->buf->len = 0;\n            remote->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_send_ctx->io);\n            ev_io_start(EV_A_ & server->recv_ctx->io);\n        }\n    }\n}\n\nstatic remote_t *new_remote(int fd, int timeout)\n{\n    remote_t *remote;\n    remote = ss_malloc(sizeof(remote_t));\n\n    memset(remote, 0, sizeof(remote_t));\n\n    remote->buf                 = ss_malloc(sizeof(buffer_t));\n    remote->recv_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->send_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->recv_ctx->connected = 0;\n    remote->send_ctx->connected = 0;\n    remote->fd                  = fd;\n    remote->recv_ctx->remote    = remote;\n    remote->send_ctx->remote    = remote;\n\n    ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);\n    ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);\n    ev_timer_init(&remote->send_ctx->watcher, remote_timeout_cb,\n                  min(MAX_CONNECT_TIMEOUT, timeout), 0);\n    ev_timer_init(&remote->recv_ctx->watcher, remote_timeout_cb,\n                  min(MAX_CONNECT_TIMEOUT, timeout), timeout);\n\n    balloc(remote->buf, BUF_SIZE);\n\n    return remote;\n}\n\nstatic void free_remote(remote_t *remote)\n{\n    if (remote->server != NULL) {\n        remote->server->remote = NULL;\n    }\n    if (remote->buf != NULL) {\n        bfree(remote->buf);\n        ss_free(remote->buf);\n    }\n    ss_free(remote->recv_ctx);\n    ss_free(remote->send_ctx);\n    ss_free(remote);\n}\n\nstatic void close_and_free_remote(EV_P_ remote_t *remote)\n{\n    if (remote != NULL) {\n        ev_timer_stop(EV_A_ & remote->send_ctx->watcher);\n        ev_timer_stop(EV_A_ & remote->recv_ctx->watcher);\n        ev_io_stop(EV_A_ & remote->send_ctx->io);\n        ev_io_stop(EV_A_ & remote->recv_ctx->io);\n        close(remote->fd);\n        free_remote(remote);\n    }\n}\n\nstatic server_t *new_server(int fd, int method)\n{\n    server_t *server;\n    server = ss_malloc(sizeof(server_t));\n\n    memset(server, 0, sizeof(server_t));\n\n    server->recv_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->send_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->buf                 = ss_malloc(sizeof(buffer_t));\n    server->recv_ctx->connected = 0;\n    server->send_ctx->connected = 0;\n    server->fd                  = fd;\n    server->recv_ctx->server    = server;\n    server->send_ctx->server    = server;\n\n    if (method) {\n        server->e_ctx = ss_malloc(sizeof(struct enc_ctx));\n        server->d_ctx = ss_malloc(sizeof(struct enc_ctx));\n        enc_ctx_init(method, server->e_ctx, 1);\n        enc_ctx_init(method, server->d_ctx, 0);\n    } else {\n        server->e_ctx = NULL;\n        server->d_ctx = NULL;\n    }\n\n    ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);\n    ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);\n\n    balloc(server->buf, BUF_SIZE);\n\n    cork_dllist_add(&connections, &server->entries);\n\n    return server;\n}\n\nstatic void free_server(server_t *server)\n{\n    cork_dllist_remove(&server->entries);\n\n    if (server->remote != NULL) {\n        server->remote->server = NULL;\n    }\n    if (server->e_ctx != NULL) {\n        cipher_context_release(&server->e_ctx->evp);\n        ss_free(server->e_ctx);\n    }\n    if (server->d_ctx != NULL) {\n        cipher_context_release(&server->d_ctx->evp);\n        ss_free(server->d_ctx);\n    }\n    if (server->buf != NULL) {\n        bfree(server->buf);\n        ss_free(server->buf);\n    }\n    // SSR beg\n    if (server->obfs_plugin) {\n        server->obfs_plugin->dispose(server->obfs);\n        server->obfs = NULL;\n        free_obfs_class(server->obfs_plugin);\n        server->obfs_plugin = NULL;\n    }\n    if (server->protocol_plugin) {\n        server->protocol_plugin->dispose(server->protocol);\n        server->protocol = NULL;\n        free_obfs_class(server->protocol_plugin);\n        server->protocol_plugin = NULL;\n    }\n    // SSR end\n    ss_free(server->recv_ctx);\n    ss_free(server->send_ctx);\n    ss_free(server);\n}\n\nstatic void close_and_free_server(EV_P_ server_t *server)\n{\n    if (server != NULL) {\n        ev_io_stop(EV_A_ & server->send_ctx->io);\n        ev_io_stop(EV_A_ & server->recv_ctx->io);\n        close(server->fd);\n        free_server(server);\n    }\n}\n\nstatic remote_t *create_remote(listen_ctx_t *listener,\n                               struct sockaddr *addr)\n{\n    struct sockaddr *remote_addr;\n\n    int index = rand() % listener->remote_num;\n    if (addr == NULL) {\n        remote_addr = listener->remote_addr[index];\n    } else {\n        remote_addr = addr;\n    }\n\n    int remotefd = socket(remote_addr->sa_family, SOCK_STREAM, IPPROTO_TCP);\n\n    if (remotefd == -1) {\n        ERROR(\"socket\");\n        return NULL;\n    }\n\n    int opt = 1;\n    setsockopt(remotefd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(remotefd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    if (listener->mptcp == 1) {\n        int err = setsockopt(remotefd, SOL_TCP, MPTCP_ENABLED, &opt, sizeof(opt));\n        if (err == -1) {\n            ERROR(\"failed to enable multipath TCP\");\n        }\n    }\n\n    // Setup\n    setnonblocking(remotefd);\n#ifdef SET_INTERFACE\n    if (listener->iface) {\n        if (setinterface(remotefd, listener->iface) == -1)\n            ERROR(\"setinterface\");\n    }\n#endif\n\n    remote_t *remote = new_remote(remotefd, listener->timeout);\n    remote->addr_len = get_sockaddr_len(remote_addr);\n    memcpy(&(remote->addr), remote_addr, remote->addr_len);\n    remote->remote_index = index;\n\n    return remote;\n}\n\nstatic void signal_cb(EV_P_ ev_signal *w, int revents)\n{\n    if (revents & EV_SIGNAL) {\n        switch (w->signum) {\n        case SIGINT:\n        case SIGTERM:\n#ifndef __MINGW32__\n        case SIGUSR1:\n#endif\n            ev_unloop(EV_A_ EVUNLOOP_ALL);\n        }\n    }\n}\n\nvoid accept_cb(EV_P_ ev_io *w, int revents)\n{\n    listen_ctx_t *listener = (listen_ctx_t *)w;\n    int serverfd           = accept(listener->fd, NULL, NULL);\n    if (serverfd == -1) {\n        ERROR(\"accept\");\n        return;\n    }\n    setnonblocking(serverfd);\n    int opt = 1;\n    setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    server_t *server = new_server(serverfd, listener->method);\n    server->listener = listener;\n    // SSR beg\n    server->obfs_plugin = new_obfs_class(listener->obfs_name);\n    if (server->obfs_plugin) {\n        server->obfs = server->obfs_plugin->new_obfs();\n    }\n    server->protocol_plugin = new_obfs_class(listener->protocol_name);\n    if (server->protocol_plugin) {\n        server->protocol = server->protocol_plugin->new_obfs();\n    }\n    // SSR end\n\n    ev_io_start(EV_A_ & server->recv_ctx->io);\n}\n\nvoid resolve_int_cb(int dummy) {\n    keep_resolving = 0;\n}\n\n#ifndef LIB_ONLY\nint main(int argc, char **argv)\n{\n    int i, c;\n    int pid_flags    = 0;\n    int mtu          = 0;\n    int mptcp        = 0;\n    char *user       = NULL;\n    char *local_port = NULL;\n    char *local_addr = NULL;\n    char *password = NULL;\n    char *timeout = NULL;\n    char *protocol = NULL; // SSR\n    char *method = NULL;\n    char *obfs = NULL; // SSR\n    char *obfs_param = NULL; // SSR\n    char *pid_path = NULL;\n    char *conf_path = NULL;\n    char *iface = NULL;\n\n    srand(time(NULL));\n\n    int remote_num = 0;\n    ss_addr_t remote_addr[MAX_REMOTE_NUM];\n    char *remote_port = NULL;\n\n    int option_index                    = 0;\n    static struct option long_options[] = {\n        { \"fast-open\", no_argument      , 0, 0 },\n        { \"acl\"      , required_argument, 0, 0 },\n        { \"mtu\"      , required_argument, 0, 0 },\n        { \"mptcp\"    , no_argument      , 0, 0 },\n        { \"help\"     , no_argument      , 0, 0 },\n        {           0,                 0, 0, 0 }\n    };\n\n    opterr = 0;\n\n    USE_TTY();\n\n#ifdef ANDROID\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:i:c:b:a:n:P:O:o:G:g:huUvVA\", // SSR\n                            long_options, &option_index)) != -1) {\n#else\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:i:c:b:a:n:P:O:o:G:huUvA\", // SSR\n                            long_options, &option_index)) != -1) {\n#endif\n        switch (c) {\n        case 0:\n            if (option_index == 0) {\n                fast_open = 1;\n            } else if (option_index == 1) {\n                LOGI(\"initializing acl...\");\n                acl = !init_acl(optarg, BLACK_LIST);\n            } else if (option_index == 2) {\n                mtu = atoi(optarg);\n                LOGI(\"set MTU to %d\", mtu);\n            } else if (option_index == 3) {\n                mptcp = 1;\n                LOGI(\"enable multipath TCP\");\n            } else if (option_index == 4) {\n                usage();\n                exit(EXIT_SUCCESS);\n            }\n            break;\n        case 's':\n            if (remote_num < MAX_REMOTE_NUM) {\n                remote_addr[remote_num].host   = optarg;\n                remote_addr[remote_num++].port = NULL;\n            }\n            break;\n        case 'p':\n            remote_port = optarg;\n            break;\n        case 'l':\n            local_port = optarg;\n            break;\n        case 'k':\n            password = optarg;\n            break;\n        case 'f':\n            pid_flags = 1;\n            pid_path  = optarg;\n            break;\n        case 't':\n            timeout = optarg;\n            break;\n        // SSR beg\n        case 'O':\n            protocol = optarg;\n            break;\n        case 'm':\n            method = optarg;\n            break;\n        case 'o':\n            obfs = optarg;\n            break;\n        case 'G':\n            break;\n        case 'g':\n            obfs_param = optarg;\n            break;\n        // SSR end\n        case 'c':\n            conf_path = optarg;\n            break;\n        case 'i':\n            iface = optarg;\n            break;\n        case 'b':\n            local_addr = optarg;\n            break;\n        case 'a':\n            user = optarg;\n            break;\n#ifdef HAVE_SETRLIMIT\n        case 'n':\n            nofile = atoi(optarg);\n            break;\n#endif\n        case 'u':\n            mode = TCP_AND_UDP;\n            break;\n        case 'U':\n            mode = UDP_ONLY;\n            break;\n        case 'v':\n            verbose = 1;\n            break;\n        case 'h':\n            usage();\n            exit(EXIT_SUCCESS);\n        case 'A':\n            auth = 1;\n            break;\n#ifdef ANDROID\n        case 'V':\n            vpn = 1;\n            break;\n        case 'P':\n            prefix = optarg;\n            break;\n#endif\n        case '?':\n            // The option character is not recognized.\n            opterr = 1;\n            break;\n        }\n    }\n\n    if (opterr) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (argc == 1) {\n        if (conf_path == NULL) {\n            conf_path = DEFAULT_CONF_PATH;\n        }\n    }\n    if (conf_path != NULL) {\n        jconf_t *conf = read_jconf(conf_path);\n        if (remote_num == 0) {\n            remote_num = conf->remote_num;\n            for (i = 0; i < remote_num; i++)\n                remote_addr[i] = conf->remote_addr[i];\n        }\n        if (remote_port == NULL) {\n            remote_port = conf->remote_port;\n        }\n        if (local_addr == NULL) {\n            local_addr = conf->local_addr;\n        }\n        if (local_port == NULL) {\n            local_port = conf->local_port;\n        }\n        if (password == NULL) {\n            password = conf->password;\n        }\n        // SSR beg\n        if (protocol == NULL) {\n            protocol = conf->protocol;\n            LOGI(\"protocol %s\", protocol);\n            if (protocol != NULL && strcmp(protocol, \"verify_sha1\") == 0) {\n                auth = 1;\n            }\n        }\n        if (method == NULL) {\n            method = conf->method;\n            LOGI(\"method %s\", method);\n        }\n        if (obfs == NULL) {\n            obfs = conf->obfs;\n            LOGI(\"obfs %s\", obfs);\n        }\n        if (obfs_param == NULL) {\n            obfs_param = conf->obfs_param;\n            LOGI(\"obfs_param %s\", obfs_param);\n        }\n        // SSR end\n        if (timeout == NULL) {\n            timeout = conf->timeout;\n        }\n        if (auth == 0) {\n            auth = conf->auth;\n        }\n        if (fast_open == 0) {\n            fast_open = conf->fast_open;\n        }\n        if (mode == TCP_ONLY) {\n            mode = conf->mode;\n        }\n        if (mtu == 0) {\n            mtu = conf->mtu;\n        }\n        if (mptcp == 0) {\n            mptcp = conf->mptcp;\n        }\n#ifdef HAVE_SETRLIMIT\n        if (nofile == 0) {\n            nofile = conf->nofile;\n        }\n        /*\n         * no need to check the return value here since we will show\n         * the user an error message if setrlimit(2) fails\n         */\n        if (nofile > 1024) {\n            if (verbose) {\n                LOGI(\"setting NOFILE to %d\", nofile);\n            }\n            set_nofile(nofile);\n        }\n#endif\n    }\n    if (protocol && strcmp(protocol, \"verify_sha1\") == 0) {\n        auth = 1;\n        protocol = NULL;\n    }\n\n    if (remote_num == 0 || remote_port == NULL ||\n        local_port == NULL || password == NULL) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (timeout == NULL) {\n        timeout = \"60\";\n    }\n\n    if (local_addr == NULL) {\n        local_addr = \"127.0.0.1\";\n    }\n\n    if (pid_flags) {\n        USE_SYSLOG(argv[0]);\n        daemonize(pid_path);\n    }\n\n    if (fast_open == 1) {\n#ifdef TCP_FASTOPEN\n        LOGI(\"using tcp fast open\");\n#else\n        LOGE(\"tcp fast open is not supported by this environment\");\n#endif\n    }\n\n    if (auth) {\n        LOGI(\"onetime authentication enabled\");\n    }\n\n#ifdef __MINGW32__\n    winsock_init();\n#else\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n    signal(SIGINT,  resolve_int_cb);\n    signal(SIGTERM, resolve_int_cb);\n#endif\n\n    // Setup keys\n    LOGI(\"initializing ciphers... %s\", method);\n    int m = enc_init(password, method);\n\n    // Setup proxy context\n    listen_ctx_t listen_ctx;\n    listen_ctx.remote_num  = remote_num;\n    listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);\n    for (i = 0; i < remote_num; i++) {\n        char *host = remote_addr[i].host;\n        char *port = remote_addr[i].port == NULL ? remote_port :\n                     remote_addr[i].port;\n        struct sockaddr_storage *storage = ss_malloc(sizeof(struct sockaddr_storage));\n        memset(storage, 0, sizeof(struct sockaddr_storage));\n        if (get_sockaddr(host, port, storage, 1) == -1) {\n            FATAL(\"failed to resolve the provided hostname\");\n        }\n        listen_ctx.remote_addr[i] = (struct sockaddr *)storage;\n    }\n    listen_ctx.timeout = atoi(timeout);\n    listen_ctx.iface = iface;\n    // SSR beg\n    listen_ctx.protocol_name = protocol;\n    listen_ctx.method = m;\n    listen_ctx.obfs_name = obfs;\n    listen_ctx.obfs_param = obfs_param;\n    listen_ctx.list_protocol_global = malloc(sizeof(void *) * remote_num);\n    listen_ctx.list_obfs_global = malloc(sizeof(void *) * remote_num);\n    memset(listen_ctx.list_protocol_global, 0, sizeof(void *) * remote_num);\n    memset(listen_ctx.list_obfs_global, 0, sizeof(void *) * remote_num);\n    // SSR end\n    listen_ctx.mptcp   = mptcp;\n\n    // Setup signal handler\n    struct ev_signal sigint_watcher;\n    struct ev_signal sigterm_watcher;\n    ev_signal_init(&sigint_watcher, signal_cb, SIGINT);\n    ev_signal_init(&sigterm_watcher, signal_cb, SIGTERM);\n    ev_signal_start(EV_DEFAULT, &sigint_watcher);\n    ev_signal_start(EV_DEFAULT, &sigterm_watcher);\n\n    struct ev_loop *loop = EV_DEFAULT;\n\n    if (mode != UDP_ONLY) {\n        // Setup socket\n        int listenfd;\n        listenfd = create_and_bind(local_addr, local_port);\n        if (listenfd == -1) {\n            FATAL(\"bind() error\");\n        }\n        if (listen(listenfd, SOMAXCONN) == -1) {\n            FATAL(\"listen() error\");\n        }\n        setnonblocking(listenfd);\n\n        listen_ctx.fd = listenfd;\n\n        ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ);\n        ev_io_start(loop, &listen_ctx.io);\n    }\n\n    // Setup UDP\n    if (mode != TCP_ONLY) {\n        LOGI(\"udprelay enabled\");\n        init_udprelay(local_addr, local_port, listen_ctx.remote_addr[0],\n                      get_sockaddr_len(listen_ctx.remote_addr[0]), mtu, m, auth, listen_ctx.timeout, iface);\n    }\n\n    LOGI(\"listening at %s:%s\", local_addr, local_port);\n\n    // setuid\n    if (user != NULL) {\n        run_as(user);\n    }\n\n    // Init connections\n    cork_dllist_init(&connections);\n\n    // Enter the loop\n    ev_run(loop, 0);\n\n    if (verbose) {\n        LOGI(\"closed gracefully\");\n    }\n\n    // Clean up\n\n    if (mode != UDP_ONLY) {\n        ev_io_stop(loop, &listen_ctx.io);\n        free_connections(loop);\n\n        for (i = 0; i < remote_num; i++) {\n            ss_free(listen_ctx.remote_addr[i]);\n\n            if (listen_ctx.list_protocol_global[i]) { // SSR\n                free(listen_ctx.list_protocol_global[i]);\n                listen_ctx.list_protocol_global[i] = NULL;\n            }\n            if (listen_ctx.list_obfs_global[i]) { // SSR\n                free(listen_ctx.list_obfs_global[i]);\n                listen_ctx.list_obfs_global[i] = NULL;\n            }\n        }\n        ss_free(listen_ctx.remote_addr);\n        free(listen_ctx.list_protocol_global); // SSR\n        free(listen_ctx.list_obfs_global); // SSR\n    }\n\n\n    if (mode != TCP_ONLY) {\n        free_udprelay();\n    }\n\n#ifdef __MINGW32__\n    winsock_cleanup();\n#endif\n\n    ev_signal_stop(EV_DEFAULT, &sigint_watcher);\n    ev_signal_stop(EV_DEFAULT, &sigterm_watcher);\n\n    return 0;\n}\n\n#else\n\nint start_ss_local_server(profile_t profile, shadowsocks_cb cb, void *data)\n{\n    srand(time(NULL));\n\n    char *remote_host = profile.remote_host;\n    char *local_addr  = profile.local_addr;\n    char *method      = profile.method;\n    char *password    = profile.password;\n    char *log         = profile.log;\n    int remote_port   = profile.remote_port;\n    int local_port    = profile.local_port;\n    int timeout       = profile.timeout;\n    char *protocol    = profile.protocol; // SSR\n    char *obfs        = profile.obfs; // SSR\n    char *obfs_param  = profile.obfs_param; // SSR\n    int mtu           = 0;\n    int mptcp         = 0;\n\n    auth      = profile.auth;\n    if (protocol != NULL && strcmp(protocol, \"verify_sha1\") == 0) {\n        auth = 1;\n    }\n    mode      = profile.mode;\n    fast_open = profile.fast_open;\n    verbose   = profile.verbose;\n    mtu       = profile.mtu;\n    mptcp     = profile.mptcp;\n\n    char local_port_str[16];\n    char remote_port_str[16];\n    sprintf(local_port_str, \"%d\", local_port);\n    sprintf(remote_port_str, \"%d\", remote_port);\n\n    USE_LOGFILE(log);\n\n    if (profile.acl != NULL) {\n        acl = !init_acl(profile.acl, BLACK_LIST);\n    }\n\n    if (local_addr == NULL) {\n        local_addr = \"127.0.0.1\";\n    }\n\n#ifdef __MINGW32__\n    winsock_init();\n#else\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n#endif\n\n    struct ev_signal sigint_watcher;\n    struct ev_signal sigterm_watcher;\n    ev_signal_init(&sigint_watcher, signal_cb, SIGINT);\n    ev_signal_init(&sigterm_watcher, signal_cb, SIGTERM);\n    ev_signal_start(EV_DEFAULT, &sigint_watcher);\n    ev_signal_start(EV_DEFAULT, &sigterm_watcher);\n#ifndef __MINGW32__\n    struct ev_signal sigusr1_watcher;\n    ev_signal_init(&sigusr1_watcher, signal_cb, SIGUSR1);\n    ev_signal_start(EV_DEFAULT, &sigusr1_watcher);\n#endif\n\n    // Setup keys\n    LOGI(\"initializing ciphers... %s\", method);\n    int m = enc_init(password, method);\n\n    struct sockaddr_storage *storage = ss_malloc(sizeof(struct sockaddr_storage));\n    memset(storage, 0, sizeof(struct sockaddr_storage));\n    if (get_sockaddr(remote_host, remote_port_str, storage, 1) == -1) {\n        cb(0, data);\n        return -1;\n    }\n\n    // Setup proxy context\n    struct ev_loop *loop = EV_DEFAULT;\n    listen_ctx_t listen_ctx;\n    int remote_num = 1;\n\n    listen_ctx.remote_num     = 1;\n    listen_ctx.remote_addr    = ss_malloc(sizeof(struct sockaddr *));\n    listen_ctx.remote_addr[0] = (struct sockaddr *)storage;\n    listen_ctx.timeout        = timeout;\n    listen_ctx.method         = m;\n    listen_ctx.iface          = NULL;\n    listen_ctx.mptcp          = mptcp;\n\n    // SSR beg\n    listen_ctx.fd = 0;\n    listen_ctx.protocol_name = protocol;\n    listen_ctx.method = m;\n    listen_ctx.obfs_name = obfs;\n    listen_ctx.obfs_param = obfs_param;\n    listen_ctx.list_protocol_global = malloc(sizeof(void *) * remote_num);\n    listen_ctx.list_obfs_global = malloc(sizeof(void *) * remote_num);\n    memset(listen_ctx.list_protocol_global, 0, sizeof(void *) * remote_num);\n    memset(listen_ctx.list_obfs_global, 0, sizeof(void *) * remote_num);\n    // SSR end\n\n    if (mode != UDP_ONLY) {\n        // Setup socket\n        int listenfd;\n        listenfd = create_and_bind(local_addr, local_port_str);\n        if (listenfd == -1) {\n            ERROR(\"bind()\");\n            return -1;\n        }\n        if (listen(listenfd, SOMAXCONN) == -1) {\n            ERROR(\"listen()\");\n            return -1;\n        }\n        setnonblocking(listenfd);\n\n        listen_ctx.fd = listenfd;\n\n        ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ);\n        ev_io_start(loop, &listen_ctx.io);\n    }\n\n    // Setup UDP\n    if (mode != TCP_ONLY) {\n        LOGI(\"udprelay enabled\");\n        struct sockaddr *addr = (struct sockaddr *)storage;\n        init_udprelay(local_addr, local_port_str, addr,\n                      get_sockaddr_len(addr), mtu, m, auth, timeout, NULL);\n    }\n\n    LOGI(\"listening at %s:%s\", local_addr, local_port_str);\n\n    // Init connections\n    cork_dllist_init(&connections);\n\n    cb(listen_ctx.fd, data);\n\n    // Enter the loop\n    ev_run(loop, 0);\n\n    if (verbose) {\n        LOGI(\"closed gracefully\");\n    }\n\n    // Clean up\n    if (mode != TCP_ONLY) {\n        free_udprelay();\n    }\n\n    if (mode != UDP_ONLY) {\n        ev_io_stop(loop, &listen_ctx.io);\n        free_connections(loop);\n        close(listen_ctx.fd);\n    }\n\n    ss_free(listen_ctx.remote_addr);\n\n#ifdef __MINGW32__\n    winsock_cleanup();\n#endif\n\n    ev_signal_stop(EV_DEFAULT, &sigint_watcher);\n    ev_signal_stop(EV_DEFAULT, &sigterm_watcher);\n#ifndef __MINGW32__\n    ev_signal_stop(EV_DEFAULT, &sigusr1_watcher);\n#endif\n\n    // cannot reach here\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/local.h",
    "content": "/*\n * local.h - Define the client's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _LOCAL_H\n#define _LOCAL_H\n\n#include <ev.h>\n#include <libcork/ds.h>\n\n#include \"encrypt.h\"\n#include \"obfs.h\"\n#include \"jconf.h\"\n\n#include \"common.h\"\n\ntypedef struct listen_ctx {\n    ev_io io;\n    char *iface;\n    int remote_num;\n    int method;\n    int timeout;\n    int fd;\n    int mptcp;\n    struct sockaddr **remote_addr;\n\n    // SSR\n    char *protocol_name;\n    char *obfs_name;\n    char *obfs_param;\n    void **list_protocol_global;\n    void **list_obfs_global;\n} listen_ctx_t;\n\ntypedef struct server_ctx {\n    ev_io io;\n    int connected;\n    struct server *server;\n} server_ctx_t;\n\ntypedef struct server {\n    int fd;\n    buffer_t *buf;\n    char stage;\n    struct enc_ctx *e_ctx;\n    struct enc_ctx *d_ctx;\n    struct server_ctx *recv_ctx;\n    struct server_ctx *send_ctx;\n    struct listen_ctx *listener;\n    struct remote *remote;\n\n    struct cork_dllist_item entries;\n\n    // SSR\n    obfs *protocol;\n    obfs *obfs;\n    obfs_class *protocol_plugin;\n    obfs_class *obfs_plugin;\n} server_t;\n\ntypedef struct remote_ctx {\n    ev_io io;\n    ev_timer watcher;\n    int connected;\n    struct remote *remote;\n} remote_ctx_t;\n\ntypedef struct remote {\n    int fd;\n    buffer_t *buf;\n    int direct;\n    struct remote_ctx *recv_ctx;\n    struct remote_ctx *send_ctx;\n    struct server *server;\n    struct sockaddr_storage addr;\n    int addr_len;\n    uint32_t counter;\n\n    // SSR\n    int remote_index;\n} remote_t;\n\n#endif // _LOCAL_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/manager.c",
    "content": "/*\n * server.c - Provide shadowsocks service\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <time.h>\n#include <unistd.h>\n#include <getopt.h>\n#include <math.h>\n#include <ctype.h>\n#include <limits.h>\n#include <dirent.h>\n\n#ifndef __MINGW32__\n#include <netdb.h>\n#include <errno.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <netinet/tcp.h>\n#include <pthread.h>\n#include <sys/un.h>\n#include <sys/socket.h>\n#include <pwd.h>\n#endif\n\n#include <libcork/core.h>\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#include \"json.h\"\n#include \"utils.h\"\n#include \"manager.h\"\n\n#ifndef BUF_SIZE\n#define BUF_SIZE 65535\n#endif\n\nint verbose      = 0;\nchar *executable = \"ss-server\";\nchar *working_dir = NULL;\nint working_dir_size = 0;\n\nstatic struct cork_hash_table *server_table;\n\n#ifndef __MINGW32__\nstatic int setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\n#endif\n\nstatic void build_config(char *prefix, struct server *server)\n{\n    char *path = NULL;\n    int path_size = strlen(prefix) + strlen(server->port) + 20;\n\n    path = malloc(path_size);\n    snprintf(path, path_size, \"%s/.shadowsocks_%s.conf\", prefix, server->port);\n    FILE *f = fopen(path, \"w+\");\n    if (f == NULL) {\n        if (verbose) {\n            LOGE(\"unable to open config file\");\n        }\n        free(path);\n        return;\n    }\n    fprintf(f, \"{\\n\");\n    fprintf(f, \"\\\"server_port\\\":\\\"%s\\\",\\n\", server->port);\n    fprintf(f, \"\\\"password\\\":\\\"%s\\\",\\n\", server->password);\n    fprintf(f, \"}\\n\");\n    fclose(f);\n    free(path);\n}\n\nstatic char *construct_command_line(struct manager_ctx *manager, struct server *server)\n{\n    static char cmd[BUF_SIZE];\n    int i;\n\n    build_config(working_dir, server);\n\n    memset(cmd, 0, BUF_SIZE);\n    snprintf(cmd, BUF_SIZE,\n             \"%s -m %s --manager-address %s -f %s/.shadowsocks_%s.pid -c %s/.shadowsocks_%s.conf\",\n             executable, manager->method, manager->manager_address,\n             working_dir, server->port, working_dir, server->port);\n\n    if (manager->acl != NULL) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" --acl %s\", manager->acl);\n    }\n    if (manager->timeout != NULL) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -t %s\", manager->timeout);\n    }\n    if (manager->user != NULL) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -a %s\", manager->user);\n    }\n    if (manager->verbose) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -v\");\n    }\n    if (manager->mode == UDP_ONLY) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -U\");\n    }\n    if (manager->mode == TCP_AND_UDP) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -u\");\n    }\n    if (manager->auth) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -A\");\n    }\n    if (manager->fast_open) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" --fast-open\");\n    }\n    for (i = 0; i < manager->nameserver_num; i++) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -d %s\", manager->nameservers[i]);\n    }\n    for (i = 0; i < manager->host_num; i++) {\n        int len = strlen(cmd);\n        snprintf(cmd + len, BUF_SIZE - len, \" -s %s\", manager->hosts[i]);\n    }\n\n    if (verbose) {\n        LOGI(\"cmd: %s\", cmd);\n    }\n\n    return cmd;\n}\n\nstatic char *get_data(char *buf, int len)\n{\n    char *data;\n    int pos = 0;\n\n    while (buf[pos] != '{' && pos < len)\n        pos++;\n    if (pos == len) {\n        return NULL;\n    }\n    data = buf + pos - 1;\n\n    return data;\n}\n\nstatic char *get_action(char *buf, int len)\n{\n    char *action;\n    int pos = 0;\n\n    while (isspace((unsigned char)buf[pos]) && pos < len)\n        pos++;\n    if (pos == len) {\n        return NULL;\n    }\n    action = buf + pos;\n\n    while ((!isspace((unsigned char)buf[pos]) && buf[pos] != ':') && pos < len)\n        pos++;\n    buf[pos] = '\\0';\n\n    return action;\n}\n\nstatic struct server *get_server(char *buf, int len)\n{\n    char *data = get_data(buf, len);\n    char error_buf[512];\n\n    if (data == NULL) {\n        LOGE(\"No data found\");\n        return NULL;\n    }\n\n    json_settings settings = { 0 };\n    json_value *obj        = json_parse_ex(&settings, data, strlen(data), error_buf);\n\n    if (obj == NULL) {\n        LOGE(\"%s\", error_buf);\n        return NULL;\n    }\n\n    struct server *server = (struct server *)malloc(sizeof(struct server));\n    memset(server, 0, sizeof(struct server));\n    if (obj->type == json_object) {\n        int i = 0;\n        for (i = 0; i < obj->u.object.length; i++) {\n            char *name        = obj->u.object.values[i].name;\n            json_value *value = obj->u.object.values[i].value;\n            if (strcmp(name, \"server_port\") == 0) {\n                if (value->type == json_string) {\n                    strncpy(server->port, value->u.string.ptr, 8);\n                } else if (value->type == json_integer) {\n                    snprintf(server->port, 8, \"%\" PRIu64 \"\", value->u.integer);\n                }\n            } else if (strcmp(name, \"password\") == 0) {\n                if (value->type == json_string) {\n                    strncpy(server->password, value->u.string.ptr, 128);\n                }\n            } else {\n                LOGE(\"invalid data: %s\", data);\n                break;\n            }\n        }\n    }\n\n    json_value_free(obj);\n    return server;\n}\n\nstatic int parse_traffic(char *buf, int len, char *port, uint64_t *traffic)\n{\n    char *data = get_data(buf, len);\n    char error_buf[512];\n    json_settings settings = { 0 };\n\n    if (data == NULL) {\n        LOGE(\"No data found\");\n        return -1;\n    }\n\n    json_value *obj = json_parse_ex(&settings, data, strlen(data), error_buf);\n    if (obj == NULL) {\n        LOGE(\"%s\", error_buf);\n        return -1;\n    }\n\n    if (obj->type == json_object) {\n        int i = 0;\n        for (i = 0; i < obj->u.object.length; i++) {\n            char *name        = obj->u.object.values[i].name;\n            json_value *value = obj->u.object.values[i].value;\n            if (value->type == json_integer) {\n                strncpy(port, name, 8);\n                *traffic = value->u.integer;\n            }\n        }\n    }\n\n    json_value_free(obj);\n    return 0;\n}\n\nstatic void add_server(struct manager_ctx *manager, struct server *server)\n{\n    bool new = false;\n    cork_hash_table_put(server_table, (void *)server->port, (void *)server, &new, NULL, NULL);\n\n    char *cmd = construct_command_line(manager, server);\n    if (system(cmd) == -1) {\n        ERROR(\"add_server_system\");\n    }\n}\n\nstatic void kill_server(char *prefix, char *pid_file)\n{\n    char *path = NULL;\n    int pid, path_size = strlen(prefix) + strlen(pid_file) + 2;\n    path = malloc(path_size);\n    snprintf(path, path_size, \"%s/%s\", prefix, pid_file);\n    FILE *f = fopen(path, \"r\");\n    if (f == NULL) {\n        if (verbose) {\n            LOGE(\"unable to open pid file\");\n        }\n        free(path);\n        return;\n    }\n    if (fscanf(f, \"%d\", &pid) != EOF) {\n        kill(pid, SIGTERM);\n    }\n    fclose(f);\n    remove(path);\n    free(path);\n}\n\nstatic void stop_server(char *prefix, char *port)\n{\n    char *path = NULL;\n    int pid, path_size = strlen(prefix) + strlen(port) + 20;\n    path = malloc(path_size);\n    snprintf(path, path_size, \"%s/.shadowsocks_%s.pid\", prefix, port);\n    FILE *f = fopen(path, \"r\");\n    if (f == NULL) {\n        if (verbose) {\n            LOGE(\"unable to open pid file\");\n        }\n        free(path);\n        return;\n    }\n    if (fscanf(f, \"%d\", &pid) != EOF) {\n        kill(pid, SIGTERM);\n    }\n    fclose(f);\n    free(path);\n}\n\nstatic void remove_server(char *prefix, char *port)\n{\n    char *old_port            = NULL;\n    struct server *old_server = NULL;\n\n    cork_hash_table_delete(server_table, (void *)port, (void **)&old_port, (void **)&old_server);\n\n    if (old_server != NULL) {\n        ss_free(old_server);\n    }\n\n    stop_server(prefix, port);\n}\n\nstatic void update_stat(char *port, uint64_t traffic)\n{\n    void *ret = cork_hash_table_get(server_table, (void *)port);\n    if (ret != NULL) {\n        struct server *server = (struct server *)ret;\n        server->traffic = traffic;\n    }\n}\n\nstatic void manager_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    struct manager_ctx *manager = (struct manager_ctx *)w;\n    socklen_t len;\n    size_t r;\n    struct sockaddr_un claddr;\n    char buf[BUF_SIZE];\n\n    memset(buf, 0, BUF_SIZE);\n\n    len = sizeof(struct sockaddr_un);\n    r   = recvfrom(manager->fd, buf, BUF_SIZE, 0, (struct sockaddr *)&claddr, &len);\n    if (r == -1) {\n        ERROR(\"manager_recvfrom\");\n        return;\n    }\n\n    if (r > BUF_SIZE / 2) {\n        LOGE(\"too large request: %d\", (int)r);\n        return;\n    }\n\n    char *action = get_action(buf, r);\n    if (action == NULL) {\n        return;\n    }\n\n    if (strcmp(action, \"add\") == 0) {\n        struct server *server = get_server(buf, r);\n\n        if (server == NULL || server->port[0] == 0 || server->password[0] == 0) {\n            LOGE(\"invalid command: %s:%s\", buf, get_data(buf, r));\n            if (server != NULL) {\n                ss_free(server);\n            }\n            goto ERROR_MSG;\n        }\n\n        remove_server(working_dir, server->port);\n        add_server(manager, server);\n\n        char msg[3] = \"ok\";\n        if (sendto(manager->fd, msg, 2, 0, (struct sockaddr *)&claddr, len) != 2) {\n            ERROR(\"add_sendto\");\n        }\n    } else if (strcmp(action, \"remove\") == 0) {\n        struct server *server = get_server(buf, r);\n\n        if (server == NULL || server->port[0] == 0) {\n            LOGE(\"invalid command: %s:%s\", buf, get_data(buf, r));\n            if (server != NULL) {\n                ss_free(server);\n            }\n            goto ERROR_MSG;\n        }\n\n        remove_server(working_dir, server->port);\n        ss_free(server);\n\n        char msg[3] = \"ok\";\n        if (sendto(manager->fd, msg, 2, 0, (struct sockaddr *)&claddr, len) != 2) {\n            ERROR(\"remove_sendto\");\n        }\n    } else if (strcmp(action, \"stat\") == 0) {\n        char port[8];\n        uint64_t traffic = 0;\n\n        if (parse_traffic(buf, r, port, &traffic) == -1) {\n            LOGE(\"invalid command: %s:%s\", buf, get_data(buf, r));\n            return;\n        }\n\n        update_stat(port, traffic);\n    } else if (strcmp(action, \"ping\") == 0) {\n        struct cork_hash_table_entry *entry;\n        struct cork_hash_table_iterator server_iter;\n\n        char buf[BUF_SIZE];\n\n        memset(buf, 0, BUF_SIZE);\n        sprintf(buf, \"stat: {\");\n\n        cork_hash_table_iterator_init(server_table, &server_iter);\n\n        while ((entry = cork_hash_table_iterator_next(&server_iter)) != NULL) {\n            struct server *server = (struct server *)entry->value;\n            size_t pos            = strlen(buf);\n            if (pos > BUF_SIZE / 2) {\n                buf[pos - 1] = '}';\n                if (sendto(manager->fd, buf, pos, 0, (struct sockaddr *)&claddr, len)\n                    != pos) {\n                    ERROR(\"ping_sendto\");\n                }\n                memset(buf, 0, BUF_SIZE);\n            } else {\n                sprintf(buf + pos, \"\\\"%s\\\":%\" PRIu64 \",\", server->port, server->traffic);\n            }\n        }\n\n        size_t pos = strlen(buf);\n        if (pos > 7) {\n            buf[pos - 1] = '}';\n        } else {\n            buf[pos] = '}';\n            pos++;\n        }\n\n        if (sendto(manager->fd, buf, pos, 0, (struct sockaddr *)&claddr, len)\n            != pos) {\n            ERROR(\"ping_sendto\");\n        }\n    }\n\n    return;\n\nERROR_MSG:\n    strcpy(buf, \"err\");\n    if (sendto(manager->fd, buf, 3, 0, (struct sockaddr *)&claddr, len) != 3) {\n        ERROR(\"error_sendto\");\n    }\n}\n\nstatic void signal_cb(EV_P_ ev_signal *w, int revents)\n{\n    if (revents & EV_SIGNAL) {\n        switch (w->signum) {\n        case SIGINT:\n        case SIGTERM:\n            ev_unloop(EV_A_ EVUNLOOP_ALL);\n        }\n    }\n}\n\nint create_server_socket(const char *host, const char *port)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp, *ipv4v6bindall;\n    int s, server_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;               /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_DGRAM;              /* We want a UDP socket */\n    hints.ai_flags    = AI_PASSIVE | AI_ADDRCONFIG; /* For wildcard IP address */\n    hints.ai_protocol = IPPROTO_UDP;\n\n    s = getaddrinfo(host, port, &hints, &result);\n    if (s != 0) {\n        LOGE(\"getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    rp = result;\n\n    /*\n     * On Linux, with net.ipv6.bindv6only = 0 (the default), getaddrinfo(NULL) with\n     * AI_PASSIVE returns 0.0.0.0 and :: (in this order). AI_PASSIVE was meant to\n     * return a list of addresses to listen on, but it is impossible to listen on\n     * 0.0.0.0 and :: at the same time, if :: implies dualstack mode.\n     */\n    if (!host) {\n        ipv4v6bindall = result;\n\n        /* Loop over all address infos found until a IPV6 address is found. */\n        while (ipv4v6bindall) {\n            if (ipv4v6bindall->ai_family == AF_INET6) {\n                rp = ipv4v6bindall; /* Take first IPV6 address available */\n                break;\n            }\n            ipv4v6bindall = ipv4v6bindall->ai_next; /* Get next address info, if any */\n        }\n    }\n\n    for (/*rp = result*/; rp != NULL; rp = rp->ai_next) {\n        server_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (server_sock == -1) {\n            continue;\n        }\n\n        if (rp->ai_family == AF_INET6) {\n            int ipv6only = host ? 1 : 0;\n            setsockopt(server_sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6only, sizeof(ipv6only));\n        }\n\n        int opt = 1;\n        setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n\n        s = bind(server_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"bind\");\n        }\n\n        close(server_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"cannot bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return server_sock;\n}\n\nint main(int argc, char **argv)\n{\n    int i, c;\n    int pid_flags         = 0;\n    char *acl             = NULL;\n    char *user            = NULL;\n    char *password        = NULL;\n    char *timeout         = NULL;\n    char *method          = NULL;\n    char *pid_path        = NULL;\n    char *conf_path       = NULL;\n    char *iface           = NULL;\n    char *manager_address = NULL;\n\n    int auth      = 0;\n    int fast_open = 0;\n    int mode      = TCP_ONLY;\n\n    int server_num = 0;\n    char *server_host[MAX_REMOTE_NUM];\n\n    char *nameservers[MAX_DNS_NUM + 1];\n    int nameserver_num = 0;\n\n    jconf_t *conf = NULL;\n\n    int option_index                    = 0;\n    static struct option long_options[] = {\n        { \"fast-open\"      , no_argument      , 0, 0 },\n        { \"acl\"            , required_argument, 0, 0 },\n        { \"manager-address\", required_argument, 0, 0 },\n        { \"executable\"     , required_argument, 0, 0 },\n        { \"help\"           , no_argument      , 0, 0 },\n        {                 0,                 0, 0, 0 }\n    };\n\n    opterr = 0;\n\n    USE_TTY();\n\n    while ((c = getopt_long(argc, argv, \"f:s:l:k:t:m:c:i:d:a:huUvA\",\n                            long_options, &option_index)) != -1)\n        switch (c) {\n        case 0:\n            if (option_index == 0) {\n                fast_open = 1;\n            } else if (option_index == 1) {\n                acl = optarg;\n            } else if (option_index == 2) {\n                manager_address = optarg;\n            } else if (option_index == 3) {\n                executable = optarg;\n            } else if (option_index == 4) {\n                usage();\n                exit(EXIT_SUCCESS);\n            }\n            break;\n        case 's':\n            if (server_num < MAX_REMOTE_NUM) {\n                server_host[server_num++] = optarg;\n            }\n            break;\n        case 'k':\n            password = optarg;\n            break;\n        case 'f':\n            pid_flags = 1;\n            pid_path  = optarg;\n            break;\n        case 't':\n            timeout = optarg;\n            break;\n        case 'm':\n            method = optarg;\n            break;\n        case 'c':\n            conf_path = optarg;\n            break;\n        case 'i':\n            iface = optarg;\n            break;\n        case 'd':\n            if (nameserver_num < MAX_DNS_NUM) {\n                nameservers[nameserver_num++] = optarg;\n            }\n            break;\n        case 'a':\n            user = optarg;\n            break;\n        case 'u':\n            mode = TCP_AND_UDP;\n            break;\n        case 'U':\n            mode = UDP_ONLY;\n            break;\n        case 'v':\n            verbose = 1;\n            break;\n        case 'h':\n            usage();\n            exit(EXIT_SUCCESS);\n        case 'A':\n            auth = 1;\n            break;\n        case '?':\n            // The option character is not recognized.\n            opterr = 1;\n            break;\n        }\n\n    if (opterr) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (conf_path != NULL) {\n        conf = read_jconf(conf_path);\n        if (server_num == 0) {\n            server_num = conf->remote_num;\n            for (i = 0; i < server_num; i++)\n                server_host[i] = conf->remote_addr[i].host;\n        }\n        if (password == NULL) {\n            password = conf->password;\n        }\n        if (method == NULL) {\n            method = conf->method;\n        }\n        if (timeout == NULL) {\n            timeout = conf->timeout;\n        }\n#ifdef TCP_FASTOPEN\n        if (fast_open == 0) {\n            fast_open = conf->fast_open;\n        }\n#endif\n        if (conf->nameserver != NULL) {\n            nameservers[nameserver_num++] = conf->nameserver;\n        }\n        if (auth == 0) {\n            auth = conf->auth;\n        }\n        if (mode == TCP_ONLY) {\n            mode = conf->mode;\n        }\n    }\n\n    if (server_num == 0) {\n        server_host[server_num++] = \"0.0.0.0\";\n    }\n\n    if (method == NULL) {\n        method = \"table\";\n    }\n\n    if (timeout == NULL) {\n        timeout = \"60\";\n    }\n\n    if (pid_flags) {\n        USE_SYSLOG(argv[0]);\n        daemonize(pid_path);\n    }\n\n    if (server_num == 0 || manager_address == NULL) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (fast_open == 1) {\n#ifdef TCP_FASTOPEN\n        LOGI(\"using tcp fast open\");\n#else\n        LOGE(\"tcp fast open is not supported by this environment\");\n#endif\n    }\n\n    if (auth) {\n        LOGI(\"onetime authentication enabled\");\n    }\n\n#ifdef __MINGW32__\n    winsock_init();\n#else\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGCHLD, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n#endif\n\n    struct ev_signal sigint_watcher;\n    struct ev_signal sigterm_watcher;\n    ev_signal_init(&sigint_watcher, signal_cb, SIGINT);\n    ev_signal_init(&sigterm_watcher, signal_cb, SIGTERM);\n    ev_signal_start(EV_DEFAULT, &sigint_watcher);\n    ev_signal_start(EV_DEFAULT, &sigterm_watcher);\n\n    struct manager_ctx manager;\n    memset(&manager, 0, sizeof(struct manager_ctx));\n\n    manager.fast_open       = fast_open;\n    manager.verbose         = verbose;\n    manager.mode            = mode;\n    manager.auth            = auth;\n    manager.password        = password;\n    manager.timeout         = timeout;\n    manager.method          = method;\n    manager.iface           = iface;\n    manager.acl             = acl;\n    manager.user            = user;\n    manager.manager_address = manager_address;\n    manager.hosts           = server_host;\n    manager.host_num        = server_num;\n    manager.nameservers     = nameservers;\n    manager.nameserver_num  = nameserver_num;\n\n    // initialize ev loop\n    struct ev_loop *loop = EV_DEFAULT;\n\n    // setuid\n    if (user != NULL) {\n        run_as(user);\n    }\n\n    struct passwd *pw   = getpwuid(getuid());\n    const char *homedir = pw->pw_dir;\n    working_dir_size = strlen(homedir)+15;\n    working_dir = malloc(working_dir_size);\n    snprintf(working_dir, working_dir_size, \"%s/.shadowsocks\", homedir);\n\n    int err = mkdir(working_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);\n    if (err != 0 && errno != EEXIST) {\n        ERROR(\"mkdir\");\n        free(working_dir);\n        FATAL(\"unable to create working directory\");\n    }\n\n    // Clean up all existed processes\n    DIR *dp;\n    struct dirent *ep;\n    dp = opendir(working_dir);\n    if (dp != NULL) {\n        while ((ep = readdir(dp)) != NULL) {\n            size_t len = strlen(ep->d_name);\n            if (strcmp(ep->d_name + len - 3, \"pid\") == 0) {\n                kill_server(working_dir, ep->d_name);\n                if (verbose) LOGI(\"kill %s\", ep->d_name);\n            }\n        }\n        closedir (dp);\n    } else {\n        free(working_dir);\n        FATAL(\"Couldn't open the directory\");\n    }\n\n    server_table = cork_string_hash_table_new(MAX_PORT_NUM, 0);\n\n    if (conf != NULL) {\n        for (i = 0; i < conf->port_password_num; i++) {\n            struct server *server = (struct server *)malloc(sizeof(struct server));\n            strncpy(server->port, conf->port_password[i].port, 8);\n            strncpy(server->password, conf->port_password[i].password, 128);\n            add_server(&manager, server);\n        }\n    }\n\n    int sfd;\n    ss_addr_t ip_addr = { .host = NULL, .port = NULL };\n    parse_addr(manager_address, &ip_addr);\n\n    if (ip_addr.host == NULL || ip_addr.port == NULL) {\n        struct sockaddr_un svaddr;\n        sfd = socket(AF_UNIX, SOCK_DGRAM, 0);       /*  Create server socket */\n        if (sfd == -1) {\n            free(working_dir);\n            FATAL(\"socket\");\n        }\n\n        setnonblocking(sfd);\n\n        if (remove(manager_address) == -1 && errno != ENOENT) {\n            ERROR(\"bind\");\n            free(working_dir);\n            exit(EXIT_FAILURE);\n        }\n\n        memset(&svaddr, 0, sizeof(struct sockaddr_un));\n        svaddr.sun_family = AF_UNIX;\n        strncpy(svaddr.sun_path, manager_address, sizeof(svaddr.sun_path) - 1);\n\n        if (bind(sfd, (struct sockaddr *)&svaddr, sizeof(struct sockaddr_un)) == -1) {\n            ERROR(\"bind\");\n            free(working_dir);\n            exit(EXIT_FAILURE);\n        }\n    } else {\n        sfd = create_server_socket(ip_addr.host, ip_addr.port);\n        if (sfd == -1) {\n            free(working_dir);\n            FATAL(\"socket\");\n        }\n    }\n\n    manager.fd = sfd;\n    ev_io_init(&manager.io, manager_recv_cb, manager.fd, EV_READ);\n    ev_io_start(loop, &manager.io);\n\n    // start ev loop\n    ev_run(loop, 0);\n\n    if (verbose) {\n        LOGI(\"closed gracefully\");\n    }\n\n    // Clean up\n    struct cork_hash_table_entry *entry;\n    struct cork_hash_table_iterator server_iter;\n\n    cork_hash_table_iterator_init(server_table, &server_iter);\n\n    while ((entry = cork_hash_table_iterator_next(&server_iter)) != NULL) {\n        struct server *server = (struct server *)entry->value;\n        stop_server(working_dir, server->port);\n    }\n\n#ifdef __MINGW32__\n    winsock_cleanup();\n#endif\n\n    ev_signal_stop(EV_DEFAULT, &sigint_watcher);\n    ev_signal_stop(EV_DEFAULT, &sigterm_watcher);\n    free(working_dir);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/manager.h",
    "content": "/*\n * server.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _MANAGER_H\n#define _MANAGER_H\n\n#include <ev.h>\n#include <time.h>\n#include <libcork/ds.h>\n\n#include \"jconf.h\"\n\n#include \"common.h\"\n\nstruct manager_ctx {\n    ev_io io;\n    int fd;\n    int fast_open;\n    int verbose;\n    int mode;\n    int auth;\n    char *password;\n    char *timeout;\n    char *method;\n    char *iface;\n    char *acl;\n    char *user;\n    char *manager_address;\n    char **hosts;\n    int host_num;\n    char **nameservers;\n    int nameserver_num;\n};\n\nstruct server {\n    char port[8];\n    char password[128];\n    uint64_t traffic;\n};\n\n#endif // _MANAGER_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/netutils.c",
    "content": "/*\n * netutils.c - Network utilities\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <math.h>\n\n#include <libcork/core.h>\n#include <udns.h>\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#define sleep(n) Sleep(1000 * (n))\n#else\n#include <sys/socket.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <unistd.h>\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#include \"netutils.h\"\n#include \"utils.h\"\n\n#ifndef SO_REUSEPORT\n#define SO_REUSEPORT 15\n#endif\n\nextern int verbose;\n\n#if defined(MODULE_LOCAL)\nextern int keep_resolving;\n#endif\n\nint set_reuseport(int socket)\n{\n    int opt = 1;\n    return setsockopt(socket, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt));\n}\n\nsize_t get_sockaddr_len(struct sockaddr *addr)\n{\n    if (addr->sa_family == AF_INET) {\n        return sizeof(struct sockaddr_in);\n    } else if (addr->sa_family == AF_INET6) {\n        return sizeof(struct sockaddr_in6);\n    }\n    return 0;\n}\n\n#ifdef SET_INTERFACE\nint setinterface(int socket_fd, const char *interface_name)\n{\n    struct ifreq interface;\n    memset(&interface, 0, sizeof(interface));\n    strncpy(interface.ifr_name, interface_name, IFNAMSIZ);\n    int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &interface,\n                         sizeof(struct ifreq));\n    return res;\n}\n#endif\n\nint bind_to_address(int socket_fd, const char *host)\n{\n    if (host != NULL) {\n        struct cork_ip ip;\n        struct sockaddr_storage storage;\n        memset(&storage, 0, sizeof(storage));\n        if (cork_ip_init(&ip, host) != -1) {\n            if (ip.version == 4) {\n                struct sockaddr_in *addr = (struct sockaddr_in *)&storage;\n                dns_pton(AF_INET, host, &addr->sin_addr);\n                addr->sin_family = AF_INET;\n                return bind(socket_fd, (struct sockaddr *)addr, sizeof(struct sockaddr_in));\n            } else if (ip.version == 6) {\n                struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage;\n                dns_pton(AF_INET6, host, &addr->sin6_addr);\n                addr->sin6_family = AF_INET6;\n                return bind(socket_fd, (struct sockaddr *)addr, sizeof(struct sockaddr_in6));\n            }\n        }\n    }\n    return -1;\n}\n\nssize_t get_sockaddr(char *host, char *port, struct sockaddr_storage *storage, int block)\n{\n    struct cork_ip ip;\n    if (cork_ip_init(&ip, host) != -1) {\n        if (ip.version == 4) {\n            struct sockaddr_in *addr = (struct sockaddr_in *)storage;\n            addr->sin_family = AF_INET;\n            dns_pton(AF_INET, host, &(addr->sin_addr));\n            if (port != NULL) {\n                addr->sin_port = htons(atoi(port));\n            }\n        } else if (ip.version == 6) {\n            struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage;\n            addr->sin6_family = AF_INET6;\n            dns_pton(AF_INET6, host, &(addr->sin6_addr));\n            if (port != NULL) {\n                addr->sin6_port = htons(atoi(port));\n            }\n        }\n        return 0;\n    } else {\n        struct addrinfo hints;\n        struct addrinfo *result, *rp;\n\n        memset(&hints, 0, sizeof(struct addrinfo));\n        hints.ai_family   = AF_UNSPEC;   /* Return IPv4 and IPv6 choices */\n        hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */\n\n        int err, i;\n\n        for (i = 1; i < 8; i++) {\n            err = getaddrinfo(host, port, &hints, &result);\n#if defined(MODULE_LOCAL)\n            if (!keep_resolving)\n                break;\n#endif\n            if ((!block || !err)) {\n                break;\n            } else {\n                sleep(pow(2, i));\n                LOGE(\"failed to resolve server name, wait %.0f seconds\", pow(2, i));\n            }\n        }\n\n        if (err != 0) {\n            LOGE(\"getaddrinfo: %s\", gai_strerror(err));\n            return -1;\n        }\n\n        for (rp = result; rp != NULL; rp = rp->ai_next)\n            if (rp->ai_family == AF_INET) {\n                memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in));\n                break;\n            }\n\n        if (rp == NULL) {\n            for (rp = result; rp != NULL; rp = rp->ai_next)\n                if (rp->ai_family == AF_INET6) {\n                    memcpy(storage, rp->ai_addr, sizeof(struct sockaddr_in6));\n                    break;\n                }\n        }\n\n        if (rp == NULL) {\n            LOGE(\"failed to resolve remote addr\");\n            return -1;\n        }\n\n        freeaddrinfo(result);\n        return 0;\n    }\n\n    return -1;\n}\n\nint sockaddr_cmp(struct sockaddr_storage *addr1,\n                 struct sockaddr_storage *addr2, socklen_t len)\n{\n    struct sockaddr_in *p1_in   = (struct sockaddr_in *)addr1;\n    struct sockaddr_in *p2_in   = (struct sockaddr_in *)addr2;\n    struct sockaddr_in6 *p1_in6 = (struct sockaddr_in6 *)addr1;\n    struct sockaddr_in6 *p2_in6 = (struct sockaddr_in6 *)addr2;\n    if (p1_in->sin_family < p2_in->sin_family)\n        return -1;\n    if (p1_in->sin_family > p2_in->sin_family)\n        return 1;\n    /* compare ip4 */\n    if (p1_in->sin_family == AF_INET) {\n        /* just order it, ntohs not required */\n        if (p1_in->sin_port < p2_in->sin_port)\n            return -1;\n        if (p1_in->sin_port > p2_in->sin_port)\n            return 1;\n        return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE);\n    } else if (p1_in6->sin6_family == AF_INET6) {\n        /* just order it, ntohs not required */\n        if (p1_in6->sin6_port < p2_in6->sin6_port)\n            return -1;\n        if (p1_in6->sin6_port > p2_in6->sin6_port)\n            return 1;\n        return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr,\n                      INET6_SIZE);\n    } else {\n        /* eek unknown type, perform this comparison for sanity. */\n        return memcmp(addr1, addr2, len);\n    }\n}\n\nint sockaddr_cmp_addr(struct sockaddr_storage *addr1,\n                      struct sockaddr_storage *addr2, socklen_t len)\n{\n    struct sockaddr_in *p1_in   = (struct sockaddr_in *)addr1;\n    struct sockaddr_in *p2_in   = (struct sockaddr_in *)addr2;\n    struct sockaddr_in6 *p1_in6 = (struct sockaddr_in6 *)addr1;\n    struct sockaddr_in6 *p2_in6 = (struct sockaddr_in6 *)addr2;\n    if (p1_in->sin_family < p2_in->sin_family)\n        return -1;\n    if (p1_in->sin_family > p2_in->sin_family)\n        return 1;\n    /* compare ip4 */\n    if (p1_in->sin_family == AF_INET) {\n        return memcmp(&p1_in->sin_addr, &p2_in->sin_addr, INET_SIZE);\n    } else if (p1_in6->sin6_family == AF_INET6) {\n        return memcmp(&p1_in6->sin6_addr, &p2_in6->sin6_addr,\n                      INET6_SIZE);\n    } else {\n        /* eek unknown type, perform this comparison for sanity. */\n        return memcmp(addr1, addr2, len);\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/netutils.h",
    "content": "/*\n * netutils.h - Network utilities\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _NETUTILS_H\n#define _NETUTILS_H\n\n#if defined(__linux__)\n#include <linux/tcp.h>\n#elif !defined(__MINGW32__)\n#include <netinet/tcp.h>\n#endif\n\n// only enable TCP_FASTOPEN on linux\n#if defined(__linux__)\n\n#include <linux/tcp.h>\n\n/*  conditional define for TCP_FASTOPEN */\n#ifndef TCP_FASTOPEN\n#define TCP_FASTOPEN   23\n#endif\n\n/*  conditional define for MSG_FASTOPEN */\n#ifndef MSG_FASTOPEN\n#define MSG_FASTOPEN   0x20000000\n#endif\n\n#elif !defined(__APPLE__)\n\n#ifdef TCP_FASTOPEN\n#undef TCP_FASTOPEN\n#endif\n\n#endif\n\n/* Define the flag MPTCP_ENABLED if not defined*/\n#ifndef MPTCP_ENABLED\n#define MPTCP_ENABLED 42\n#endif\n\n/** byte size of ip4 address */\n#define INET_SIZE 4\n/** byte size of ip6 address */\n#define INET6_SIZE 16\n\nsize_t get_sockaddr_len(struct sockaddr *addr);\nssize_t get_sockaddr(char *host, char *port, struct sockaddr_storage *storage, int block);\nint set_reuseport(int socket);\n\n#ifdef SET_INTERFACE\nint setinterface(int socket_fd, const char *interface_name);\n#endif\n\nint bind_to_address(int socket_fd, const char *address);\n\n/**\n * Compare two sockaddrs. Imposes an ordering on the addresses.\n * Compares address and port.\n * @param addr1: address 1.\n * @param addr2: address 2.\n * @param len: lengths of addr.\n * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger.\n */\nint sockaddr_cmp(struct sockaddr_storage *addr1,\n                 struct sockaddr_storage *addr2, socklen_t len);\n\n/**\n * Compare two sockaddrs. Compares address, not the port.\n * @param addr1: address 1.\n * @param addr2: address 2.\n * @param len: lengths of addr.\n * @return: 0 if addr1 == addr2. -1 if addr1 is smaller, +1 if larger.\n */\nint sockaddr_cmp_addr(struct sockaddr_storage *addr1,\n                      struct sockaddr_storage *addr2, socklen_t len);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/obfs.c",
    "content": "#include <string.h>\n#include <stdlib.h>\n\n#include \"utils.h\"\n#include \"obfs.h\"\n//<<<<<<< HEAD\n#include \"crc32.h\"\n#include \"http_simple.h\"\n#include \"tls1.2_ticket.h\"\n#include \"tls1.0_session.h\"\n#include \"verify.h\"\n#include \"auth.h\"\n//#include \"crc32.c\"\n//#include \"http_simple.c\"\n//#include \"tls1.0_session.c\"\n//#include \"tls1.2_ticket.c\"\n//#include \"verify.c\"\n//#include \"auth.c\"\n//=======\n\nint rand_bytes(uint8_t *output, int len);\n#define OBFS_HMAC_SHA1_LEN 10\n\n//#include \"obfsutil.c\"\n//#include \"crc32.c\"\n//#include \"http_simple.c\"\n//#include \"tls1.2_ticket.c\"\n//#include \"verify.c\"\n//#include \"auth.c\"\n//>>>>>>> upstream/master\n\nvoid * init_data() {\n    return malloc(1);\n}\n\nobfs * new_obfs() {\n    obfs * self = (obfs*)malloc(sizeof(obfs));\n    self->l_data = NULL;\n    return self;\n}\n\nvoid set_server_info(obfs *self, server_info *server) {\n    memmove(&self->server, server, sizeof(server_info));\n}\n\nvoid get_server_info(obfs *self, server_info *server) {\n    memmove(server, &self->server, sizeof(server_info));\n}\n\nvoid dispose_obfs(obfs *self) {\n    free(self);\n}\n\nobfs_class * new_obfs_class(char *plugin_name)\n{\n    if (plugin_name == NULL)\n        return NULL;\n    if (strcmp(plugin_name, \"origin\") == 0)\n        return NULL;\n    if (strcmp(plugin_name, \"plain\") == 0)\n        return NULL;\n    init_crc32_table();\n    if (strcmp(plugin_name, \"http_simple\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = init_data;\n        plugin->new_obfs = http_simple_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = http_simple_dispose;\n\n        plugin->client_encode = http_simple_client_encode;\n        plugin->client_decode = http_simple_client_decode;\n\n        return plugin;\n    } else if (strcmp(plugin_name, \"tls1.2_ticket_auth\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = tls12_ticket_auth_init_data;\n        plugin->new_obfs = tls12_ticket_auth_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = tls12_ticket_auth_dispose;\n\n        plugin->client_encode = tls12_ticket_auth_client_encode;\n        plugin->client_decode = tls12_ticket_auth_client_decode;\n\n        return plugin;\n    } else if (strcmp(plugin_name, \"verify_simple\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = init_data;\n        plugin->new_obfs = verify_simple_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = verify_simple_dispose;\n\n        plugin->client_pre_encrypt = verify_simple_client_pre_encrypt;\n        plugin->client_post_decrypt = verify_simple_client_post_decrypt;\n\n        return plugin;\n    } else if (strcmp(plugin_name, \"auth_simple\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = auth_simple_init_data;\n        plugin->new_obfs = auth_simple_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = auth_simple_dispose;\n\n        plugin->client_pre_encrypt = auth_simple_client_pre_encrypt;\n        plugin->client_post_decrypt = auth_simple_client_post_decrypt;\n\n        return plugin;\n    } else if (strcmp(plugin_name, \"auth_sha1\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = auth_simple_init_data;\n        plugin->new_obfs = auth_simple_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = auth_simple_dispose;\n\n        plugin->client_pre_encrypt = auth_sha1_client_pre_encrypt;\n        plugin->client_post_decrypt = auth_sha1_client_post_decrypt;\n\n        return plugin;\n    } else if (strcmp(plugin_name, \"auth_sha1_v2\") == 0) {\n        obfs_class * plugin = (obfs_class*)malloc(sizeof(obfs));\n        plugin->init_data = auth_simple_init_data;\n        plugin->new_obfs = auth_simple_new_obfs;\n        plugin->get_server_info = get_server_info;\n        plugin->set_server_info = set_server_info;\n        plugin->dispose = auth_simple_dispose;\n\n        plugin->client_pre_encrypt = auth_sha1_v2_client_pre_encrypt;\n        plugin->client_post_decrypt = auth_sha1_v2_client_post_decrypt;\n\n        return plugin;\n    }\n    LOGE(\"Load obfs '%s' failed\", plugin_name);\n    return NULL;\n}\n\nvoid free_obfs_class(obfs_class *plugin) {\n    free(plugin);\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/obfs.h",
    "content": "/*\n * obfs.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _OBFS_H\n#define _OBFS_H\n\n#include <stdint.h>\n#include <unistd.h>\n\n#define OBFS_HMAC_SHA1_LEN 10\n\ntypedef struct server_info {\n    char host[64];\n    uint16_t port;\n    char *param;\n    void *g_data;\n    uint8_t *iv;\n    size_t iv_len;\n    uint8_t *recv_iv;\n    size_t recv_iv_len;\n    uint8_t *key;\n    size_t key_len;\n    int head_len;\n    size_t tcp_mss;\n}server_info;\n\ntypedef struct obfs {\n    server_info server;\n    void *l_data;\n}obfs;\n\ntypedef struct obfs_class {\n    void * (*init_data)();\n    obfs * (*new_obfs)();\n    void (*get_server_info)(obfs *self, server_info *server);\n    void (*set_server_info)(obfs *self, server_info *server);\n    void (*dispose)(obfs *self);\n\n    int (*client_pre_encrypt)(obfs *self,\n            char **pplaindata,\n            int datalength,\n            size_t* capacity);\n    int (*client_encode)(obfs *self,\n            char **pencryptdata,\n            int datalength,\n            size_t* capacity);\n    int (*client_decode)(obfs *self,\n            char **pencryptdata,\n            int datalength,\n            size_t* capacity,\n            int *needsendback);\n    int (*client_post_decrypt)(obfs *self,\n            char **pplaindata,\n            int datalength,\n            size_t* capacity);\n}obfs_class;\n\nobfs_class * new_obfs_class(char *plugin_name);\nvoid free_obfs_class(obfs_class *plugin);\n\nvoid set_server_info(obfs *self, server_info *server);\nvoid get_server_info(obfs *self, server_info *server);\nobfs * new_obfs();\nvoid dispose_obfs(obfs *self);\n\nint get_head_size(char *plaindata, int size, int def_size);\n\nstatic uint64_t shift128plus_s[2];\n\nuint64_t xorshift128plus(void);\n\n#endif // _OBFS_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/obfsutil.c",
    "content": "#include <stdlib.h>\n#include \"obfs.h\"\n\nint get_head_size(char *plaindata, int size, int def_size) {\n    if (plaindata == NULL || size < 2)\n        return def_size;\n    int head_type = plaindata[0] & 0x7;\n    if (head_type == 1)\n        return 7;\n    if (head_type == 4)\n        return 19;\n    if (head_type == 3)\n        return 4 + plaindata[1];\n    return def_size;\n}\n\nstatic uint64_t shift128plus_s[2] = {0x10000000, 0xFFFFFFFF};\n\nuint64_t xorshift128plus(void) {\n    uint64_t x = shift128plus_s[0];\n    uint64_t const y = shift128plus_s[1];\n    shift128plus_s[0] = y;\n    x ^= x << 23; // a\n    x ^= x >> 17; // b\n    x ^= y ^ (y >> 26); // c\n    shift128plus_s[1] = x;\n    return x + y;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/redir.c",
    "content": "/*\n * redir.c - Provide a transparent TCP proxy through remote shadowsocks\n *            server\n *\n * Copyright (C) 2013 - 2015, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <arpa/inet.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <time.h>\n#include <unistd.h>\n#include <getopt.h>\n#include <limits.h>\n#include <linux/if.h>\n#include <linux/netfilter_ipv4.h>\n#include <linux/netfilter_ipv6/ip6_tables.h>\n#include <udns.h>\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include \"netutils.h\"\n#include \"utils.h\"\n#include \"common.h\"\n#include \"redir.h\"\n\n#ifndef EAGAIN\n#define EAGAIN EWOULDBLOCK\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK EAGAIN\n#endif\n\n#ifndef BUF_SIZE\n#define BUF_SIZE 2048\n#endif\n\n#ifndef IP6T_SO_ORIGINAL_DST\n#define IP6T_SO_ORIGINAL_DST 80\n#endif\n\n#include \"obfs.c\" // I don't want to modify makefile\n\nstatic void accept_cb(EV_P_ ev_io *w, int revents);\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void server_send_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents);\n\nstatic remote_t *new_remote(int fd, int timeout);\nstatic server_t *new_server(int fd, int method);\n\nstatic void free_remote(remote_t *remote);\nstatic void close_and_free_remote(EV_P_ remote_t *remote);\nstatic void free_server(server_t *server);\nstatic void close_and_free_server(EV_P_ server_t *server);\n\nint verbose = 0;\nint keep_resolving = 1;\n\nstatic int mode = TCP_ONLY;\nstatic int auth = 0;\n#ifdef HAVE_SETRLIMIT\nstatic int nofile = 0;\n#endif\n\nint getdestaddr(int fd, struct sockaddr_storage *destaddr)\n{\n    socklen_t socklen = sizeof(*destaddr);\n    int error         = 0;\n\n    error = getsockopt(fd, SOL_IPV6, IP6T_SO_ORIGINAL_DST, destaddr, &socklen);\n    if (error) { // Didn't find a proper way to detect IP version.\n        error = getsockopt(fd, SOL_IP, SO_ORIGINAL_DST, destaddr, &socklen);\n        if (error) {\n            return -1;\n        }\n    }\n    return 0;\n}\n\nint setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\nint create_and_bind(const char *addr, const char *port)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp;\n    int s, listen_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;   /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */\n\n    s = getaddrinfo(addr, port, &hints, &result);\n    if (s != 0) {\n        LOGI(\"getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    for (rp = result; rp != NULL; rp = rp->ai_next) {\n        listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (listen_sock == -1) {\n            continue;\n        }\n\n        int opt = 1;\n        setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n        setsockopt(listen_sock, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n        int err = set_reuseport(listen_sock);\n        if (err == 0) {\n            LOGI(\"tcp port reuse enabled\");\n        }\n\n        s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"bind\");\n        }\n\n        close(listen_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"Could not bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return listen_sock;\n}\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_recv_ctx = (server_ctx_t *)w;\n    server_t *server              = server_recv_ctx->server;\n    remote_t *remote              = server->remote;\n\n    ssize_t r = recv(server->fd, remote->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"server recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    if (verbose) {\n        uint16_t port = 0;\n        char ipstr[INET6_ADDRSTRLEN];\n        memset(&ipstr, 0, INET6_ADDRSTRLEN);\n\n        if (AF_INET == server->destaddr.ss_family) {\n            struct sockaddr_in *sa = (struct sockaddr_in *)&(server->destaddr);\n            dns_ntop(AF_INET, &(sa->sin_addr), ipstr, INET_ADDRSTRLEN);\n            port = ntohs(sa->sin_port);\n        } else {\n            // TODO: The code below need to be test in IPv6 envirment, which I\n            //       don't have.\n            struct sockaddr_in6 *sa = (struct sockaddr_in6 *)&(server->destaddr);\n            dns_ntop(AF_INET6, &(sa->sin6_addr), ipstr, INET6_ADDRSTRLEN);\n            port = ntohs(sa->sin6_port);\n        }\n\n        LOGI(\"redir to %s:%d, len=%zd\", ipstr, port, r);\n    }\n\n    remote->buf->len = r;\n\n    if (auth) {\n        ss_gen_hash(remote->buf, &remote->counter, server->e_ctx, BUF_SIZE);\n    }\n\n    // SSR beg\n    if (server->protocol_plugin) {\n        obfs_class *protocol_plugin = server->protocol_plugin;\n        if (protocol_plugin->client_pre_encrypt) {\n            remote->buf->len = protocol_plugin->client_pre_encrypt(server->protocol, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n        }\n    }\n    int err = ss_encrypt(remote->buf, server->e_ctx, BUF_SIZE);\n\n    if (err) {\n        LOGE(\"invalid password or cipher\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    if (server->obfs_plugin) {\n        obfs_class *obfs_plugin = server->obfs_plugin;\n        if (obfs_plugin->client_encode) {\n            remote->buf->len = obfs_plugin->client_encode(server->obfs, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n        }\n    }\n    // SSR end\n\n    if (!remote->send_ctx->connected) {\n        ev_io_stop(EV_A_ & server_recv_ctx->io);\n        ev_io_start(EV_A_ & remote->send_ctx->io);\n        return;\n    }\n\n    int s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            remote->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_recv_ctx->io);\n            ev_io_start(EV_A_ & remote->send_ctx->io);\n            return;\n        } else {\n            ERROR(\"send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    } else if (s < remote->buf->len) {\n        remote->buf->len -= s;\n        remote->buf->idx  = s;\n        ev_io_stop(EV_A_ & server_recv_ctx->io);\n        ev_io_start(EV_A_ & remote->send_ctx->io);\n        return;\n    }\n}\n\nstatic void server_send_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_send_ctx = (server_ctx_t *)w;\n    server_t *server              = server_send_ctx->server;\n    remote_t *remote              = server->remote;\n    if (server->buf->len == 0) {\n        // close and free\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(server->fd, server->buf->array + server->buf->idx,\n                         server->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"send\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < server->buf->len) {\n            // partly sent, move memory, wait for the next time to send\n            server->buf->len -= s;\n            server->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            server->buf->len = 0;\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_send_ctx->io);\n            ev_io_start(EV_A_ & remote->recv_ctx->io);\n        }\n    }\n}\n\nstatic void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)(((void *)watcher)\n                                                - sizeof(ev_io));\n    remote_t *remote = remote_ctx->remote;\n    server_t *server = remote->server;\n\n    ev_timer_stop(EV_A_ watcher);\n\n    close_and_free_remote(EV_A_ remote);\n    close_and_free_server(EV_A_ server);\n}\n\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_recv_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_recv_ctx->remote;\n    server_t *server              = remote->server;\n\n    ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"remote recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    server->buf->len = r;\n\n    // SSR beg\n    if (server->obfs_plugin) {\n        obfs_class *obfs_plugin = server->obfs_plugin;\n        if (obfs_plugin->client_decode) {\n            int needsendback;\n            server->buf->len = obfs_plugin->client_decode(server->obfs, &server->buf->array, server->buf->len, &server->buf->capacity, &needsendback);\n            if ((int)server->buf->len < 0) {\n                LOGE(\"client_decode\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            if (needsendback) {\n                size_t capacity = BUF_SIZE;\n                char *buf = (char*)malloc(capacity);\n                obfs_class *obfs_plugin = server->obfs_plugin;\n                if (obfs_plugin->client_encode) {\n                    int len = obfs_plugin->client_encode(server->obfs, &buf, 0, &capacity);\n                    send(remote->fd, buf, len, 0);\n                }\n                free(buf);\n            }\n        }\n    }\n    if ( server->buf->len == 0 )\n        return;\n\n    int err = ss_decrypt(server->buf, server->d_ctx, BUF_SIZE);\n    if (err) {\n        LOGE(\"invalid password or cipher\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    if (server->protocol_plugin) {\n        obfs_class *protocol_plugin = server->protocol_plugin;\n        if (protocol_plugin->client_post_decrypt) {\n            server->buf->len = protocol_plugin->client_post_decrypt(server->protocol, &server->buf->array, server->buf->len, &server->buf->capacity);\n            if ((int)server->buf->len < 0) {\n                LOGE(\"client_post_decrypt\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            if ( server->buf->len == 0 )\n                return;\n        }\n    }\n    // SSR end\n\n    int s = send(server->fd, server->buf->array, server->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_recv_ctx->io);\n            ev_io_start(EV_A_ & server->send_ctx->io);\n        } else {\n            ERROR(\"send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n        }\n    } else if (s < server->buf->len) {\n        server->buf->len -= s;\n        server->buf->idx  = s;\n        ev_io_stop(EV_A_ & remote_recv_ctx->io);\n        ev_io_start(EV_A_ & server->send_ctx->io);\n    }\n\n    // Disable TCP_NODELAY after the first response are sent\n    int opt = 0;\n    setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n    setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n}\n\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_send_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_send_ctx->remote;\n    server_t *server              = remote->server;\n\n    if (!remote_send_ctx->connected) {\n        struct sockaddr_storage addr;\n        socklen_t len = sizeof addr;\n        int r         = getpeername(remote->fd, (struct sockaddr *)&addr, &len);\n        if (r == 0) {\n            remote_send_ctx->connected = 1;\n            ev_io_stop(EV_A_ & remote_send_ctx->io);\n            //ev_io_stop(EV_A_ & server->recv_ctx->io);\n            ev_timer_stop(EV_A_ & remote_send_ctx->watcher);\n\n            // send destaddr\n            buffer_t ss_addr_to_send;\n            buffer_t *abuf = &ss_addr_to_send;\n            balloc(abuf, BUF_SIZE);\n\n            if (AF_INET6 == server->destaddr.ss_family) { // IPv6\n                abuf->array[abuf->len++] = 4;          // Type 4 is IPv6 address\n\n                size_t in6_addr_len = sizeof(struct in6_addr);\n                memcpy(abuf->array + abuf->len,\n                       &(((struct sockaddr_in6 *)&(server->destaddr))->sin6_addr),\n                       in6_addr_len);\n                abuf->len += in6_addr_len;\n                memcpy(abuf->array + abuf->len,\n                       &(((struct sockaddr_in6 *)&(server->destaddr))->sin6_port),\n                       2);\n            } else {                             // IPv4\n                abuf->array[abuf->len++] = 1; // Type 1 is IPv4 address\n\n                size_t in_addr_len = sizeof(struct in_addr);\n                memcpy(abuf->array + abuf->len,\n                       &((struct sockaddr_in *)&(server->destaddr))->sin_addr, in_addr_len);\n                abuf->len += in_addr_len;\n                memcpy(abuf->array + abuf->len,\n                       &((struct sockaddr_in *)&(server->destaddr))->sin_port, 2);\n            }\n            abuf->len += 2;\n\n            if (auth) {\n                abuf->array[0] |= ONETIMEAUTH_FLAG;\n                ss_onetimeauth(abuf, server->e_ctx->evp.iv, BUF_SIZE);\n            }\n\n\n            // SSR beg\n            server_info _server_info;\n            if (server->obfs_plugin) {\n                server->obfs_plugin->get_server_info(server->obfs, &_server_info);\n                _server_info.head_len = get_head_size(abuf->array, abuf->len, 30);\n                server->obfs_plugin->set_server_info(server->obfs, &_server_info);\n            }\n            if (server->protocol_plugin) {\n                obfs_class *protocol_plugin = server->protocol_plugin;\n                if (protocol_plugin->client_pre_encrypt) {\n                    abuf->len = protocol_plugin->client_pre_encrypt(server->protocol, &abuf->array, abuf->len, &abuf->capacity);\n                }\n            }\n\n            if (remote->buf->len > 0) {\n                brealloc(remote->buf, remote->buf->len + abuf->len, BUF_SIZE);\n                memmove(remote->buf->array + abuf->len, remote->buf->array, remote->buf->len);\n                memcpy(remote->buf->array, abuf->array, abuf->len);\n                remote->buf->len += abuf->len;\n            } else {\n                brealloc(remote->buf, abuf->len, BUF_SIZE);\n                memcpy(remote->buf->array, abuf->array, abuf->len);\n                remote->buf->len = abuf->len;\n            }\n            bfree(abuf);\n\n            int err = ss_encrypt(remote->buf, server->e_ctx, BUF_SIZE);\n            if (err) {\n                LOGE(\"invalid password or cipher\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            if (server->obfs_plugin) {\n                obfs_class *obfs_plugin = server->obfs_plugin;\n                if (obfs_plugin->client_encode) {\n                    remote->buf->len = obfs_plugin->client_encode(server->obfs, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n                }\n            }\n            // SSR end\n\n            ev_io_start(EV_A_ & remote->recv_ctx->io);\n        } else {\n            ERROR(\"getpeername\");\n            // not connected\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    if (remote->buf->len == 0) {\n        // close and free\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(remote->fd, remote->buf->array + remote->buf->idx,\n                         remote->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"send\");\n                // close and free\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < remote->buf->len) {\n            // partly sent, move memory, wait for the next time to send\n            remote->buf->len -= s;\n            remote->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            remote->buf->len = 0;\n            remote->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_send_ctx->io);\n            ev_io_start(EV_A_ & server->recv_ctx->io);\n        }\n    }\n}\n\nstatic remote_t *new_remote(int fd, int timeout)\n{\n    remote_t *remote;\n    remote = ss_malloc(sizeof(remote_t));\n\n    memset(remote, 0, sizeof(remote_t));\n\n    remote->recv_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->send_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->buf                 = ss_malloc(sizeof(buffer_t));\n    remote->fd                  = fd;\n    remote->recv_ctx->remote    = remote;\n    remote->recv_ctx->connected = 0;\n    remote->send_ctx->remote    = remote;\n    remote->send_ctx->connected = 0;\n\n    ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);\n    ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);\n    ev_timer_init(&remote->send_ctx->watcher, remote_timeout_cb,\n                  min(MAX_CONNECT_TIMEOUT, timeout), 0);\n\n    balloc(remote->buf, BUF_SIZE);\n\n    return remote;\n}\n\nstatic void free_remote(remote_t *remote)\n{\n    if (remote != NULL) {\n        if (remote->server != NULL) {\n            remote->server->remote = NULL;\n        }\n        if (remote->buf != NULL) {\n            bfree(remote->buf);\n            ss_free(remote->buf);\n        }\n        ss_free(remote->recv_ctx);\n        ss_free(remote->send_ctx);\n        ss_free(remote);\n    }\n}\n\nstatic void close_and_free_remote(EV_P_ remote_t *remote)\n{\n    if (remote != NULL) {\n        ev_timer_stop(EV_A_ & remote->send_ctx->watcher);\n        ev_io_stop(EV_A_ & remote->send_ctx->io);\n        ev_io_stop(EV_A_ & remote->recv_ctx->io);\n        close(remote->fd);\n        free_remote(remote);\n    }\n}\n\nstatic server_t *new_server(int fd, int method)\n{\n    server_t *server;\n    server = ss_malloc(sizeof(server_t));\n\n    server->recv_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->send_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->buf                 = ss_malloc(sizeof(buffer_t));\n    server->fd                  = fd;\n    server->recv_ctx->server    = server;\n    server->recv_ctx->connected = 0;\n    server->send_ctx->server    = server;\n    server->send_ctx->connected = 0;\n\n    if (method) {\n        server->e_ctx = ss_malloc(sizeof(enc_ctx_t));\n        server->d_ctx = ss_malloc(sizeof(enc_ctx_t));\n        enc_ctx_init(method, server->e_ctx, 1);\n        enc_ctx_init(method, server->d_ctx, 0);\n    } else {\n        server->e_ctx = NULL;\n        server->d_ctx = NULL;\n    }\n\n    ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);\n    ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);\n\n    balloc(server->buf, BUF_SIZE);\n\n    return server;\n}\n\nstatic void free_server(server_t *server)\n{\n    if (server != NULL) {\n        if (server->remote != NULL) {\n            server->remote->server = NULL;\n        }\n        if (server->e_ctx != NULL) {\n            cipher_context_release(&server->e_ctx->evp);\n            ss_free(server->e_ctx);\n        }\n        if (server->d_ctx != NULL) {\n            cipher_context_release(&server->d_ctx->evp);\n            ss_free(server->d_ctx);\n        }\n        if (server->buf != NULL) {\n            bfree(server->buf);\n            ss_free(server->buf);\n        }\n        // SSR beg\n        if (server->obfs_plugin) {\n            server->obfs_plugin->dispose(server->obfs);\n            server->obfs = NULL;\n            free_obfs_class(server->obfs_plugin);\n            server->obfs_plugin = NULL;\n        }\n        if (server->protocol_plugin) {\n            server->protocol_plugin->dispose(server->protocol);\n            server->protocol = NULL;\n            free_obfs_class(server->protocol_plugin);\n            server->protocol_plugin = NULL;\n        }\n        // SSR end\n        ss_free(server->recv_ctx);\n        ss_free(server->send_ctx);\n        ss_free(server);\n    }\n}\n\nstatic void close_and_free_server(EV_P_ server_t *server)\n{\n    if (server != NULL) {\n        ev_io_stop(EV_A_ & server->send_ctx->io);\n        ev_io_stop(EV_A_ & server->recv_ctx->io);\n        close(server->fd);\n        free_server(server);\n    }\n}\n\nstatic void accept_cb(EV_P_ ev_io *w, int revents)\n{\n    listen_ctx_t *listener = (listen_ctx_t *)w;\n    struct sockaddr_storage destaddr;\n    int err;\n\n    int serverfd = accept(listener->fd, NULL, NULL);\n    if (serverfd == -1) {\n        ERROR(\"accept\");\n        return;\n    }\n\n    err = getdestaddr(serverfd, &destaddr);\n    if (err) {\n        ERROR(\"getdestaddr\");\n        return;\n    }\n\n    setnonblocking(serverfd);\n    int opt = 1;\n    setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    int index                    = rand() % listener->remote_num;\n    struct sockaddr *remote_addr = listener->remote_addr[index];\n\n    int remotefd = socket(remote_addr->sa_family, SOCK_STREAM, IPPROTO_TCP);\n    if (remotefd == -1) {\n        ERROR(\"socket\");\n        return;\n    }\n\n    // Set flags\n    setsockopt(remotefd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(remotefd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    // Setup\n    int keepAlive    = 1;\n    int keepIdle     = 40;\n    int keepInterval = 20;\n    int keepCount    = 5;\n    setsockopt(remotefd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));\n    setsockopt(remotefd, SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));\n    setsockopt(remotefd, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));\n    setsockopt(remotefd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));\n\n    // Setup\n    setnonblocking(remotefd);\n\n    // Enable MPTCP\n    if (listener->mptcp == 1) {\n        int err = setsockopt(remotefd, SOL_TCP, MPTCP_ENABLED, &opt, sizeof(opt));\n        if (err == -1) {\n            ERROR(\"failed to enable multipath TCP\");\n        }\n    }\n\n    server_t *server = new_server(serverfd, listener->method);\n    remote_t *remote = new_remote(remotefd, listener->timeout);\n    server->remote   = remote;\n    remote->server   = server;\n    server->destaddr = destaddr;\n\n    int r = connect(remotefd, remote_addr, get_sockaddr_len(remote_addr));\n\n    if (r == -1 && errno != CONNECT_IN_PROGRESS) {\n        ERROR(\"connect\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    // SSR beg\n    remote->remote_index = index;\n    server->obfs_plugin = new_obfs_class(listener->obfs_name);\n    if (server->obfs_plugin) {\n        server->obfs = server->obfs_plugin->new_obfs();\n    }\n    server->protocol_plugin = new_obfs_class(listener->protocol_name);\n    if (server->protocol_plugin) {\n        server->protocol = server->protocol_plugin->new_obfs();\n    }\n    if (listener->list_obfs_global[remote->remote_index] == NULL && server->obfs_plugin) {\n        listener->list_obfs_global[remote->remote_index] = server->obfs_plugin->init_data();\n    }\n    if (listener->list_protocol_global[remote->remote_index] == NULL && server->protocol_plugin) {\n        listener->list_protocol_global[remote->remote_index] = server->protocol_plugin->init_data();\n    }\n    server_info _server_info;\n    memset(&_server_info, 0, sizeof(server_info));\n    strcpy(_server_info.host, inet_ntoa(((struct sockaddr_in*)remote_addr)->sin_addr));\n    _server_info.port = ((struct sockaddr_in*)remote_addr)->sin_port;\n    _server_info.port = _server_info.port >> 8 | _server_info.port << 8;\n    _server_info.param = listener->obfs_param;\n    _server_info.g_data = listener->list_obfs_global[remote->remote_index];\n    _server_info.head_len = (AF_INET6 == server->destaddr.ss_family ? 19 : 7);\n    _server_info.iv = server->e_ctx->evp.iv;\n    _server_info.iv_len = enc_get_iv_len();\n    _server_info.key = enc_get_key();\n    _server_info.key_len = enc_get_key_len();\n    _server_info.tcp_mss = 1460;\n\n    if (server->obfs_plugin)\n        server->obfs_plugin->set_server_info(server->obfs, &_server_info);\n\n    _server_info.param = NULL;\n    _server_info.g_data = listener->list_protocol_global[remote->remote_index];\n\n    if (server->protocol_plugin)\n        server->protocol_plugin->set_server_info(server->protocol, &_server_info);\n    // SSR end\n\n    if (r == 0) {\n        if (verbose) LOGI(\"connected immediately\");\n        remote_send_cb(EV_A_ & remote->send_ctx->io, 0);\n    } else {\n        // listen to remote connected event\n        ev_io_start(EV_A_ & remote->send_ctx->io);\n        ev_timer_start(EV_A_ & remote->send_ctx->watcher);\n    }\n\n    if (verbose) {\n        int port = ((struct sockaddr_in*)&destaddr)->sin_port;\n        port = (uint16_t)(port >> 8 | port << 8);\n        LOGI(\"connect to %s:%d\", inet_ntoa(((struct sockaddr_in*)&destaddr)->sin_addr), port);\n    }\n\n    // listen to remote connected event\n    ev_io_start(EV_A_ & remote->send_ctx->io);\n}\n\nvoid signal_cb(int dummy) {\n    keep_resolving = 0;\n    exit(-1);\n}\n\nint main(int argc, char **argv)\n{\n    srand(time(NULL));\n\n    int i, c;\n    int pid_flags    = 0;\n    int mptcp        = 0;\n    int mtu          = 0;\n    char *user       = NULL;\n    char *local_port = NULL;\n    char *local_addr = NULL;\n    char *password = NULL;\n    char *timeout = NULL;\n    char *protocol = NULL; // SSR\n    char *method = NULL;\n    char *obfs = NULL; // SSR\n    char *obfs_param = NULL; // SSR\n    char *pid_path = NULL;\n    char *conf_path = NULL;\n\n    int remote_num = 0;\n    ss_addr_t remote_addr[MAX_REMOTE_NUM];\n    char *remote_port = NULL;\n\n    int option_index                    = 0;\n    static struct option long_options[] = {\n        { \"mtu\",  required_argument, 0, 0 },\n        { \"mptcp\", no_argument     , 0, 0 },\n        { \"help\",  no_argument     , 0, 0 },\n        {      0,            0     , 0, 0 }\n    };\n\n    opterr = 0;\n\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:c:b:a:n:O:o:G:g:huUvA\", // SSR\n                            long_options, &option_index)) != -1) {\n        switch (c) {\n        case 0:\n            if (option_index == 0) {\n                mtu = atoi(optarg);\n                LOGI(\"set MTU to %d\", mtu);\n            } else if (option_index == 1) {\n                mptcp = 1;\n                LOGI(\"enable multipath TCP\");\n            } else if (option_index == 2) {\n                usage();\n                exit(EXIT_SUCCESS);\n            }\n            break;\n        case 's':\n            if (remote_num < MAX_REMOTE_NUM) {\n                remote_addr[remote_num].host   = optarg;\n                remote_addr[remote_num++].port = NULL;\n            }\n            break;\n        case 'p':\n            remote_port = optarg;\n            break;\n        case 'l':\n            local_port = optarg;\n            break;\n        case 'k':\n            password = optarg;\n            break;\n        case 'f':\n            pid_flags = 1;\n            pid_path  = optarg;\n            break;\n        case 't':\n            timeout = optarg;\n            break;\n        // SSR beg\n        case 'O':\n            protocol = optarg;\n            break;\n        case 'm':\n            method = optarg;\n            break;\n        case 'o':\n            obfs = optarg;\n            break;\n        case 'G':\n            break;\n        case 'g':\n            obfs_param = optarg;\n            break;\n        // SSR end\n        case 'c':\n            conf_path = optarg;\n            break;\n        case 'b':\n            local_addr = optarg;\n            break;\n        case 'a':\n            user = optarg;\n            break;\n#ifdef HAVE_SETRLIMIT\n        case 'n':\n            nofile = atoi(optarg);\n            break;\n#endif\n        case 'u':\n            mode = TCP_AND_UDP;\n            break;\n        case 'U':\n            mode = UDP_ONLY;\n            break;\n        case 'v':\n            verbose = 1;\n            break;\n        case 'h':\n            usage();\n            exit(EXIT_SUCCESS);\n        case 'A':\n            auth = 1;\n            break;\n        case '?':\n            // The option character is not recognized.\n            opterr = 1;\n            break;\n        }\n    }\n\n    if (opterr) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (argc == 1) {\n        if (conf_path == NULL) {\n            conf_path = DEFAULT_CONF_PATH;\n        }\n    }\n\n    if (conf_path != NULL) {\n        jconf_t *conf = read_jconf(conf_path);\n        if (remote_num == 0) {\n            remote_num = conf->remote_num;\n            for (i = 0; i < remote_num; i++)\n                remote_addr[i] = conf->remote_addr[i];\n        }\n        if (remote_port == NULL) {\n            remote_port = conf->remote_port;\n        }\n        if (local_addr == NULL) {\n            local_addr = conf->local_addr;\n        }\n        if (local_port == NULL) {\n            local_port = conf->local_port;\n        }\n        if (password == NULL) {\n            password = conf->password;\n        }\n        // SSR beg\n        if (protocol == NULL) {\n            protocol = conf->protocol;\n            LOGI(\"protocol %s\", protocol);\n        }\n        if (method == NULL) {\n            method = conf->method;\n            LOGI(\"method %s\", method);\n        }\n        if (obfs == NULL) {\n            obfs = conf->obfs;\n            LOGI(\"obfs %s\", obfs);\n        }\n        if (obfs_param == NULL) {\n            obfs_param = conf->obfs_param;\n            LOGI(\"obfs_param %s\", obfs_param);\n        }\n        // SSR end\n        if (timeout == NULL) {\n            timeout = conf->timeout;\n        }\n        if (auth == 0) {\n            auth = conf->auth;\n        }\n        if (mtu == 0) {\n            mtu = conf->mtu;\n        }\n        if (mptcp == 0) {\n            mptcp = conf->mptcp;\n        }\n#ifdef HAVE_SETRLIMIT\n        if (nofile == 0) {\n            nofile = conf->nofile;\n    }\n        /*\n         * no need to check the return value here since we will show\n         * the user an error message if setrlimit(2) fails\n         */\n        if (nofile > 1024) {\n            if (verbose) {\n                LOGI(\"setting NOFILE to %d\", nofile);\n            }\n            set_nofile(nofile);\n        }\n#endif\n    }\n    if (protocol && strcmp(protocol, \"verify_sha1\") == 0) {\n        auth = 1;\n        protocol = NULL;\n    }\n\n    if (remote_num == 0 || remote_port == NULL ||\n        local_port == NULL || password == NULL) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (timeout == NULL) {\n        timeout = \"60\";\n    }\n\n    if (local_addr == NULL) {\n        local_addr = \"127.0.0.1\";\n    }\n\n    if (pid_flags) {\n        USE_SYSLOG(argv[0]);\n        daemonize(pid_path);\n    }\n\n    if (auth) {\n        LOGI(\"onetime authentication enabled\");\n    }\n\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n    signal(SIGINT,  signal_cb);\n    signal(SIGTERM, signal_cb);\n\n    // Setup keys\n    LOGI(\"initializing ciphers... %s\", method);\n    int m = enc_init(password, method);\n\n    // Setup proxy context\n    listen_ctx_t listen_ctx;\n    listen_ctx.remote_num  = remote_num;\n    listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);\n    for (int i = 0; i < remote_num; i++) {\n        char *host = remote_addr[i].host;\n        char *port = remote_addr[i].port == NULL ? remote_port :\n                     remote_addr[i].port;\n        struct sockaddr_storage *storage = ss_malloc(sizeof(struct sockaddr_storage));\n        memset(storage, 0, sizeof(struct sockaddr_storage));\n        if (get_sockaddr(host, port, storage, 1) == -1) {\n            FATAL(\"failed to resolve the provided hostname\");\n        }\n        listen_ctx.remote_addr[i] = (struct sockaddr *)storage;\n    }\n    listen_ctx.timeout = atoi(timeout);\n    // SSR beg\n    listen_ctx.protocol_name = protocol;\n    listen_ctx.method = m;\n    listen_ctx.obfs_name = obfs;\n    listen_ctx.obfs_param = obfs_param;\n    listen_ctx.list_protocol_global = malloc(sizeof(void *) * remote_num);\n    listen_ctx.list_obfs_global = malloc(sizeof(void *) * remote_num);\n    memset(listen_ctx.list_protocol_global, 0, sizeof(void *) * remote_num);\n    memset(listen_ctx.list_obfs_global, 0, sizeof(void *) * remote_num);\n    // SSR end\n    listen_ctx.mptcp   = mptcp;\n\n    struct ev_loop *loop = EV_DEFAULT;\n\n    if (mode != UDP_ONLY) {\n        // Setup socket\n        int listenfd;\n        listenfd = create_and_bind(local_addr, local_port);\n        if (listenfd == -1) {\n            FATAL(\"bind() error\");\n        }\n        if (listen(listenfd, SOMAXCONN) == -1) {\n            FATAL(\"listen() error\");\n        }\n        setnonblocking(listenfd);\n\n        listen_ctx.fd = listenfd;\n\n        ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ);\n        ev_io_start(loop, &listen_ctx.io);\n    }\n\n    // Setup UDP\n    if (mode != TCP_ONLY) {\n        LOGI(\"UDP relay enabled\");\n        init_udprelay(local_addr, local_port, listen_ctx.remote_addr[0],\n                      get_sockaddr_len(listen_ctx.remote_addr[0]), mtu, m, auth, listen_ctx.timeout, NULL);\n    }\n\n    if (mode == UDP_ONLY) {\n        LOGI(\"TCP relay disabled\");\n    }\n\n    LOGI(\"listening at %s:%s\", local_addr, local_port);\n\n    // setuid\n    if (user != NULL) {\n        run_as(user);\n    }\n\n    ev_run(loop, 0);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/redir.h",
    "content": "/*\n * redir.h - Define the redirector's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _LOCAL_H\n#define _LOCAL_H\n\n#include <ev.h>\n#include \"encrypt.h\"\n#include \"obfs.h\"\n#include \"jconf.h\"\n\ntypedef struct listen_ctx {\n    ev_io io;\n    int remote_num;\n    int timeout;\n    int fd;\n    int method;\n    int mptcp;\n    struct sockaddr **remote_addr;\n\n    // SSR\n    char *protocol_name;\n    char *obfs_name;\n    char *obfs_param;\n    void **list_protocol_global;\n    void **list_obfs_global;\n} listen_ctx_t;\n\ntypedef struct server_ctx {\n    ev_io io;\n    int connected;\n    struct server *server;\n} server_ctx_t;\n\ntypedef struct server {\n    int fd;\n    buffer_t *buf;\n    struct sockaddr_storage destaddr;\n    struct enc_ctx *e_ctx;\n    struct enc_ctx *d_ctx;\n    struct server_ctx *recv_ctx;\n    struct server_ctx *send_ctx;\n    struct remote *remote;\n\n    // SSR\n    obfs *protocol;\n    obfs *obfs;\n    obfs_class *protocol_plugin;\n    obfs_class *obfs_plugin;\n} server_t;\n\ntypedef struct remote_ctx {\n    ev_io io;\n    ev_timer watcher;\n    int connected;\n    struct remote *remote;\n} remote_ctx_t;\n\ntypedef struct remote {\n    int fd;\n    buffer_t *buf;\n    struct remote_ctx *recv_ctx;\n    struct remote_ctx *send_ctx;\n    struct server *server;\n    uint32_t counter;\n\n    // SSR\n    int remote_index;\n} remote_t;\n\n#endif // _LOCAL_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/resolv.c",
    "content": "/*\n * Copyright (c) 2014, Dustin Lundquist <dustin@null-ptr.net>\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 * 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 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#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <fcntl.h>\n#include <ev.h>\n#include <udns.h>\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#else\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <errno.h>\n#include <unistd.h>\n#endif\n\n#include \"resolv.h\"\n#include \"utils.h\"\n#include \"netutils.h\"\n\n/*\n * Implement DNS resolution interface using libudns\n */\n\nstruct ResolvQuery {\n    void (*client_cb)(struct sockaddr *, void *);\n    void (*client_free_cb)(void *);\n    void *client_cb_data;\n    struct dns_query *queries[2];\n    size_t response_count;\n    struct sockaddr **responses;\n    uint16_t port;\n};\n\nextern int verbose;\n\nstatic struct ev_io resolv_io_watcher;\nstatic struct ev_timer resolv_timeout_watcher;\nstatic const int MODE_IPV4_ONLY  = 0;\nstatic const int MODE_IPV6_ONLY  = 1;\nstatic const int MODE_IPV4_FIRST = 2;\nstatic const int MODE_IPV6_FIRST = 3;\nstatic int resolv_mode           = 0;\n\nstatic void resolv_sock_cb(struct ev_loop *, struct ev_io *, int);\nstatic void resolv_timeout_cb(struct ev_loop *, struct ev_timer *, int);\nstatic void dns_query_v4_cb(struct dns_ctx *, struct dns_rr_a4 *, void *);\nstatic void dns_query_v6_cb(struct dns_ctx *, struct dns_rr_a6 *, void *);\nstatic void dns_timer_setup_cb(struct dns_ctx *, int, void *);\nstatic void process_client_callback(struct ResolvQuery *);\nstatic inline int all_queries_are_null(struct ResolvQuery *);\nstatic struct sockaddr *choose_ipv4_first(struct ResolvQuery *);\nstatic struct sockaddr *choose_ipv6_first(struct ResolvQuery *);\nstatic struct sockaddr *choose_any(struct ResolvQuery *);\n\nint resolv_init(struct ev_loop *loop, char **nameservers, int nameserver_num, int ipv6first)\n{\n    if (ipv6first)\n        resolv_mode = MODE_IPV6_FIRST;\n    else\n        resolv_mode = MODE_IPV4_FIRST;\n\n    struct dns_ctx *ctx = &dns_defctx;\n    if (nameservers == NULL) {\n        /* Nameservers not specified, use system resolver config */\n        dns_init(ctx, 0);\n    } else {\n        dns_reset(ctx);\n\n        for (int i = 0; i < nameserver_num; i++) {\n            char *server = nameservers[i];\n            dns_add_serv(ctx, server);\n        }\n    }\n\n    int sockfd = dns_open(ctx);\n    if (sockfd < 0) {\n        FATAL(\"Failed to open DNS resolver socket\");\n    }\n\n    if (nameserver_num == 1 && nameservers != NULL) {\n        if (strncmp(\"127.0.0.1\", nameservers[0], 9) == 0\n                || strncmp(\"::1\",  nameservers[0], 3) == 0) {\n            if (verbose) {\n                LOGI(\"bind UDP resolver to %s\", nameservers[0]);\n            }\n            if (bind_to_address(sockfd, nameservers[0]) == -1)\n                ERROR(\"bind_to_address\");\n        }\n    }\n\n#ifdef __MINGW32__\n    setnonblocking(sockfd);\n#else\n    int flags = fcntl(sockfd, F_GETFL, 0);\n    fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);\n#endif\n\n    ev_io_init(&resolv_io_watcher, resolv_sock_cb, sockfd, EV_READ);\n    resolv_io_watcher.data = ctx;\n\n    ev_io_start(loop, &resolv_io_watcher);\n\n    ev_timer_init(&resolv_timeout_watcher, resolv_timeout_cb, 0.0, 0.0);\n    resolv_timeout_watcher.data = ctx;\n\n    dns_set_tmcbck(ctx, dns_timer_setup_cb, loop);\n\n    return sockfd;\n}\n\nvoid resolv_shutdown(struct ev_loop *loop)\n{\n    struct dns_ctx *ctx = (struct dns_ctx *)resolv_io_watcher.data;\n\n    ev_io_stop(loop, &resolv_io_watcher);\n\n    if (ev_is_active(&resolv_timeout_watcher)) {\n        ev_timer_stop(loop, &resolv_timeout_watcher);\n    }\n\n    dns_close(ctx);\n}\n\nstruct ResolvQuery *resolv_query(const char *hostname, void (*client_cb)(struct sockaddr *, void *),\n                                 void (*client_free_cb)(void *), void *client_cb_data,\n                                 uint16_t port)\n{\n    struct dns_ctx *ctx = (struct dns_ctx *)resolv_io_watcher.data;\n\n    /*\n     * Wrap udns's call back in our own\n     */\n    struct ResolvQuery *cb_data = ss_malloc(sizeof(struct ResolvQuery));\n    if (cb_data == NULL) {\n        LOGE(\"Failed to allocate memory for DNS query callback data.\");\n        return NULL;\n    }\n    cb_data->client_cb      = client_cb;\n    cb_data->client_free_cb = client_free_cb;\n    cb_data->client_cb_data = client_cb_data;\n    memset(cb_data->queries, 0, sizeof(cb_data->queries));\n    cb_data->response_count = 0;\n    cb_data->responses      = NULL;\n    cb_data->port           = port;\n\n    /* Submit A and AAAA queries */\n    if (resolv_mode != MODE_IPV6_ONLY) {\n        cb_data->queries[0] = dns_submit_a4(ctx,\n                                            hostname, 0,\n                                            dns_query_v4_cb, cb_data);\n        if (cb_data->queries[0] == NULL) {\n            LOGE(\"Failed to submit DNS query: %s\",\n                 dns_strerror(dns_status(ctx)));\n        }\n    }\n\n    if (resolv_mode != MODE_IPV4_ONLY) {\n        cb_data->queries[1] = dns_submit_a6(ctx,\n                                            hostname, 0,\n                                            dns_query_v6_cb, cb_data);\n        if (cb_data->queries[1] == NULL) {\n            LOGE(\"Failed to submit DNS query: %s\",\n                 dns_strerror(dns_status(ctx)));\n        }\n    }\n\n    if (all_queries_are_null(cb_data)) {\n        if (cb_data->client_free_cb != NULL) {\n            cb_data->client_free_cb(cb_data->client_cb_data);\n        }\n        ss_free(cb_data);\n    }\n\n    return cb_data;\n}\n\nvoid resolv_cancel(struct ResolvQuery *query_handle)\n{\n    struct ResolvQuery *cb_data = (struct ResolvQuery *)query_handle;\n    struct dns_ctx *ctx         = (struct dns_ctx *)resolv_io_watcher.data;\n\n    for (int i = 0; i < sizeof(cb_data->queries) / sizeof(cb_data->queries[0]);\n         i++)\n        if (cb_data->queries[i] != NULL) {\n            dns_cancel(ctx, cb_data->queries[i]);\n            ss_free(cb_data->queries[i]);\n        }\n\n    if (cb_data->client_free_cb != NULL) {\n        cb_data->client_free_cb(cb_data->client_cb_data);\n    }\n\n    ss_free(cb_data);\n}\n\n/*\n * DNS UDP socket activity callback\n */\nstatic void resolv_sock_cb(struct ev_loop *loop, struct ev_io *w, int revents)\n{\n    struct dns_ctx *ctx = (struct dns_ctx *)w->data;\n\n    if (revents & EV_READ) {\n        dns_ioevent(ctx, ev_now(loop));\n    }\n}\n\n/*\n * Wrapper for client callback we provide to udns\n */\nstatic void dns_query_v4_cb(struct dns_ctx *ctx, struct dns_rr_a4 *result, void *data)\n{\n    struct ResolvQuery *cb_data = (struct ResolvQuery *)data;\n\n    if (result == NULL) {\n        if (verbose) {\n            LOGI(\"IPv4 resolv: %s\", dns_strerror(dns_status(ctx)));\n        }\n    } else if (result->dnsa4_nrr > 0) {\n        struct sockaddr **new_responses = ss_realloc(cb_data->responses,\n                                                     (cb_data->response_count +\n                                                      result->dnsa4_nrr) *\n                                                     sizeof(struct sockaddr *));\n        if (new_responses == NULL) {\n            LOGE(\"Failed to allocate memory for additional DNS responses\");\n        } else {\n            cb_data->responses = new_responses;\n\n            for (int i = 0; i < result->dnsa4_nrr; i++) {\n                struct sockaddr_in *sa =\n                    (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));\n                sa->sin_family = AF_INET;\n                sa->sin_port   = cb_data->port;\n                sa->sin_addr   = result->dnsa4_addr[i];\n\n                cb_data->responses[cb_data->response_count] =\n                    (struct sockaddr *)sa;\n                if (cb_data->responses[cb_data->response_count] == NULL) {\n                    LOGE(\n                        \"Failed to allocate memory for DNS query result address\");\n                } else {\n                    cb_data->response_count++;\n                }\n            }\n        }\n    }\n\n    ss_free(result);\n    cb_data->queries[0] = NULL; /* mark A query as being completed */\n\n    /* Once all queries have completed, call client callback */\n    if (all_queries_are_null(cb_data)) {\n        return process_client_callback(cb_data);\n    }\n}\n\nstatic void dns_query_v6_cb(struct dns_ctx *ctx, struct dns_rr_a6 *result, void *data)\n{\n    struct ResolvQuery *cb_data = (struct ResolvQuery *)data;\n\n    if (result == NULL) {\n        if (verbose) {\n            LOGI(\"IPv6 resolv: %s\", dns_strerror(dns_status(ctx)));\n        }\n    } else if (result->dnsa6_nrr > 0) {\n        struct sockaddr **new_responses = ss_realloc(cb_data->responses,\n                                                     (cb_data->response_count +\n                                                      result->dnsa6_nrr) *\n                                                     sizeof(struct sockaddr *));\n        if (new_responses == NULL) {\n            LOGE(\"Failed to allocate memory for additional DNS responses\");\n        } else {\n            cb_data->responses = new_responses;\n\n            for (int i = 0; i < result->dnsa6_nrr; i++) {\n                struct sockaddr_in6 *sa =\n                    (struct sockaddr_in6 *)malloc(sizeof(struct sockaddr_in6));\n                sa->sin6_family = AF_INET6;\n                sa->sin6_port   = cb_data->port;\n                sa->sin6_addr   = result->dnsa6_addr[i];\n\n                cb_data->responses[cb_data->response_count] =\n                    (struct sockaddr *)sa;\n                if (cb_data->responses[cb_data->response_count] == NULL) {\n                    LOGE(\n                        \"Failed to allocate memory for DNS query result address\");\n                } else {\n                    cb_data->response_count++;\n                }\n            }\n        }\n    }\n\n    ss_free(result);\n    cb_data->queries[1] = NULL; /* mark AAAA query as being completed */\n\n    /* Once all queries have completed, call client callback */\n    if (all_queries_are_null(cb_data)) {\n        return process_client_callback(cb_data);\n    }\n}\n\n/*\n * Called once all queries have been completed\n */\nstatic void process_client_callback(struct ResolvQuery *cb_data)\n{\n    struct sockaddr *best_address = NULL;\n\n    if (resolv_mode == MODE_IPV4_FIRST) {\n        best_address = choose_ipv4_first(cb_data);\n    } else if (resolv_mode == MODE_IPV6_FIRST) {\n        best_address = choose_ipv6_first(cb_data);\n    } else {\n        best_address = choose_any(cb_data);\n    }\n\n    cb_data->client_cb(best_address, cb_data->client_cb_data);\n\n    for (int i = 0; i < cb_data->response_count; i++)\n        ss_free(cb_data->responses[i]);\n\n    ss_free(cb_data->responses);\n    if (cb_data->client_free_cb != NULL) {\n        cb_data->client_free_cb(cb_data->client_cb_data);\n    }\n    ss_free(cb_data);\n}\n\nstatic struct sockaddr *choose_ipv4_first(struct ResolvQuery *cb_data)\n{\n    for (int i = 0; i < cb_data->response_count; i++)\n        if (cb_data->responses[i]->sa_family == AF_INET) {\n            return cb_data->responses[i];\n        }\n\n    return choose_any(cb_data);\n}\n\nstatic struct sockaddr *choose_ipv6_first(struct ResolvQuery *cb_data)\n{\n    for (int i = 0; i < cb_data->response_count; i++)\n        if (cb_data->responses[i]->sa_family == AF_INET6) {\n            return cb_data->responses[i];\n        }\n\n    return choose_any(cb_data);\n}\n\nstatic struct sockaddr *choose_any(struct ResolvQuery *cb_data)\n{\n    if (cb_data->response_count >= 1) {\n        return cb_data->responses[0];\n    }\n\n    return NULL;\n}\n\n/*\n * DNS timeout callback\n */\nstatic void resolv_timeout_cb(struct ev_loop *loop, struct ev_timer *w, int revents)\n{\n    struct dns_ctx *ctx = (struct dns_ctx *)w->data;\n\n    if (revents & EV_TIMER) {\n        dns_timeouts(ctx, 30, ev_now(loop));\n    }\n}\n\n/*\n * Callback to setup DNS timeout callback\n */\nstatic void dns_timer_setup_cb(struct dns_ctx *ctx, int timeout, void *data)\n{\n    struct ev_loop *loop = (struct ev_loop *)data;\n\n    if (ev_is_active(&resolv_timeout_watcher)) {\n        ev_timer_stop(loop, &resolv_timeout_watcher);\n    }\n\n    if (ctx != NULL && timeout >= 0) {\n        ev_timer_set(&resolv_timeout_watcher, timeout, 0.0);\n        ev_timer_start(loop, &resolv_timeout_watcher);\n    }\n}\n\nstatic inline int all_queries_are_null(struct ResolvQuery *cb_data)\n{\n    int result = 1;\n\n    for (int i = 0; i < sizeof(cb_data->queries) / sizeof(cb_data->queries[0]);\n         i++)\n        result = result && cb_data->queries[i] == NULL;\n\n    return result;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/resolv.h",
    "content": "/*\n * Copyright (c) 2014, Dustin Lundquist <dustin@null-ptr.net>\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 * 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 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#ifndef RESOLV_H\n#define RESOLV_H\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <stdint.h>\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#else\n#include <sys/socket.h>\n#endif\n\nstruct ResolvQuery;\n\nint resolv_init(struct ev_loop *, char **, int, int);\nstruct ResolvQuery *resolv_query(const char *, void (*)(struct sockaddr *,\n                                                        void *), void (*)(\n                                     void *), void *, uint16_t);\nvoid resolv_cancel(struct ResolvQuery *);\nvoid resolv_shutdown(struct ev_loop *);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/server.c",
    "content": "/*\n * server.c - Provide shadowsocks service\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <time.h>\n#include <unistd.h>\n#include <getopt.h>\n#include <math.h>\n\n#ifndef __MINGW32__\n#include <netdb.h>\n#include <errno.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#include <sys/un.h>\n#endif\n\n#include <libcork/core.h>\n#include <udns.h>\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#include \"netutils.h\"\n#include \"utils.h\"\n#include \"acl.h\"\n#include \"server.h\"\n\n#ifndef EAGAIN\n#define EAGAIN EWOULDBLOCK\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK EAGAIN\n#endif\n\n#ifndef BUF_SIZE\n#define BUF_SIZE 2048\n#endif\n\n#ifndef SSMAXCONN\n#define SSMAXCONN 1024\n#endif\n\n#ifndef UPDATE_INTERVAL\n#define UPDATE_INTERVAL 30\n#endif\n\nstatic void signal_cb(EV_P_ ev_signal *w, int revents);\nstatic void accept_cb(EV_P_ ev_io *w, int revents);\nstatic void server_send_cb(EV_P_ ev_io *w, int revents);\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents);\nstatic void server_timeout_cb(EV_P_ ev_timer *watcher, int revents);\n\nstatic remote_t *new_remote(int fd);\nstatic server_t *new_server(int fd, listen_ctx_t *listener);\nstatic remote_t *connect_to_remote(struct addrinfo *res,\n                                   server_t *server,\n                                   int *connected);\n\nstatic void free_remote(remote_t *remote);\nstatic void close_and_free_remote(EV_P_ remote_t *remote);\nstatic void free_server(server_t *server);\nstatic void close_and_free_server(EV_P_ server_t *server);\nstatic void server_resolve_cb(struct sockaddr *addr, void *data);\nstatic void query_free_cb(void *data);\n\nstatic size_t parse_header_len(const char atyp, const char *data, size_t offset);\n\nint verbose = 0;\n\nstatic int white_list = 0;\nstatic int acl        = 0;\nstatic int mode       = TCP_ONLY;\nstatic int auth       = 0;\nstatic int ipv6first  = 0;\n\nstatic int fast_open = 0;\n#ifdef HAVE_SETRLIMIT\nstatic int nofile = 0;\n#endif\nstatic int remote_conn = 0;\nstatic int server_conn = 0;\n\nstatic char *bind_address    = NULL;\nstatic char *server_port     = NULL;\nstatic char *manager_address = NULL;\nuint64_t tx                  = 0;\nuint64_t rx                  = 0;\nev_timer stat_update_watcher;\n\nstatic struct cork_dllist connections;\n\nstatic void stat_update_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    struct sockaddr_un svaddr, claddr;\n    int sfd = -1;\n    size_t msgLen;\n    char resp[BUF_SIZE];\n\n    if (verbose) {\n        LOGI(\"update traffic stat: tx: %\" PRIu64 \" rx: %\" PRIu64 \"\", tx, rx);\n    }\n\n    snprintf(resp, BUF_SIZE, \"stat: {\\\"%s\\\":%\" PRIu64 \"}\", server_port, tx + rx);\n    msgLen = strlen(resp) + 1;\n\n    ss_addr_t ip_addr = { .host = NULL, .port = NULL };\n    parse_addr(manager_address, &ip_addr);\n\n    if (ip_addr.host == NULL || ip_addr.port == NULL) {\n        sfd = socket(AF_UNIX, SOCK_DGRAM, 0);\n        if (sfd == -1) {\n            ERROR(\"stat_socket\");\n            return;\n        }\n\n        memset(&claddr, 0, sizeof(struct sockaddr_un));\n        claddr.sun_family = AF_UNIX;\n        snprintf(claddr.sun_path, sizeof(claddr.sun_path), \"/tmp/shadowsocks.%s\", server_port);\n\n        unlink(claddr.sun_path);\n\n        if (bind(sfd, (struct sockaddr *)&claddr, sizeof(struct sockaddr_un)) == -1) {\n            ERROR(\"stat_bind\");\n            close(sfd);\n            return;\n        }\n\n        memset(&svaddr, 0, sizeof(struct sockaddr_un));\n        svaddr.sun_family = AF_UNIX;\n        strncpy(svaddr.sun_path, manager_address, sizeof(svaddr.sun_path) - 1);\n\n        if (sendto(sfd, resp, strlen(resp) + 1, 0, (struct sockaddr *)&svaddr,\n                   sizeof(struct sockaddr_un)) != msgLen) {\n            ERROR(\"stat_sendto\");\n            close(sfd);\n            return;\n        }\n\n        unlink(claddr.sun_path);\n    } else {\n        struct sockaddr_storage storage;\n        memset(&storage, 0, sizeof(struct sockaddr_storage));\n        if (get_sockaddr(ip_addr.host, ip_addr.port, &storage, 0) == -1) {\n            ERROR(\"failed to parse the manager addr\");\n            return;\n        }\n\n        sfd = socket(storage.ss_family, SOCK_DGRAM, 0);\n\n        if (sfd == -1) {\n            ERROR(\"stat_socket\");\n            return;\n        }\n\n        size_t addr_len = get_sockaddr_len((struct sockaddr *)&storage);\n        if (sendto(sfd, resp, strlen(resp) + 1, 0, (struct sockaddr *)&storage,\n                   addr_len) != msgLen) {\n            ERROR(\"stat_sendto\");\n            close(sfd);\n            return;\n        }\n    }\n\n    close(sfd);\n}\n\nstatic void free_connections(struct ev_loop *loop)\n{\n    struct cork_dllist_item *curr, *next;\n    cork_dllist_foreach_void(&connections, curr, next) {\n        server_t *server = cork_container_of(curr, server_t, entries);\n        remote_t *remote = server->remote;\n        close_and_free_server(loop, server);\n        close_and_free_remote(loop, remote);\n    }\n}\n\nstatic size_t parse_header_len(const char atyp, const char *data, size_t offset)\n{\n    size_t len = 0;\n    if ((atyp & ADDRTYPE_MASK) == 1) {\n        // IP V4\n        len += sizeof(struct in_addr);\n    } else if ((atyp & ADDRTYPE_MASK) == 3) {\n        // Domain name\n        uint8_t name_len = *(uint8_t *)(data + offset);\n        len += name_len + 1;\n    } else if ((atyp & ADDRTYPE_MASK) == 4) {\n        // IP V6\n        len += sizeof(struct in6_addr);\n    }\n    len += 2;\n    return len;\n}\n\nstatic char *get_peer_name(int fd)\n{\n    static char peer_name[INET6_ADDRSTRLEN] = { 0 };\n    struct sockaddr_storage addr;\n    socklen_t len = sizeof addr;\n    memset(&addr, 0, len);\n    memset(peer_name, 0, INET6_ADDRSTRLEN);\n    int err = getpeername(fd, (struct sockaddr *)&addr, &len);\n    if (err == 0) {\n        if (addr.ss_family == AF_INET) {\n            struct sockaddr_in *s = (struct sockaddr_in *)&addr;\n            dns_ntop(AF_INET, &s->sin_addr, peer_name, INET_ADDRSTRLEN);\n        } else if (addr.ss_family == AF_INET6) {\n            struct sockaddr_in6 *s = (struct sockaddr_in6 *)&addr;\n            dns_ntop(AF_INET6, &s->sin6_addr, peer_name, INET6_ADDRSTRLEN);\n        }\n    } else {\n        return NULL;\n    }\n    return peer_name;\n}\n\nstatic void report_addr(int fd)\n{\n    char *peer_name;\n    peer_name = get_peer_name(fd);\n    if (peer_name != NULL) {\n        LOGE(\"failed to handshake with %s\", peer_name);\n    }\n}\n\nint setfastopen(int fd)\n{\n    int s = 0;\n#ifdef TCP_FASTOPEN\n    if (fast_open) {\n#ifdef __APPLE__\n        int opt = 1;\n#else\n        int opt = 5;\n#endif\n        s = setsockopt(fd, IPPROTO_TCP, TCP_FASTOPEN, &opt, sizeof(opt));\n\n        if (s == -1) {\n            if (errno == EPROTONOSUPPORT || errno == ENOPROTOOPT) {\n                LOGE(\"fast open is not supported on this platform\");\n            } else {\n                ERROR(\"setsockopt\");\n            }\n        }\n    }\n#endif\n    return s;\n}\n\n#ifndef __MINGW32__\nint setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\n#endif\n\nint create_and_bind(const char *host, const char *port, int mptcp)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp, *ipv4v6bindall;\n    int s, listen_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;               /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_STREAM;             /* We want a TCP socket */\n    hints.ai_flags    = AI_PASSIVE | AI_ADDRCONFIG; /* For wildcard IP address */\n    hints.ai_protocol = IPPROTO_TCP;\n\n    for (int i = 1; i < 8; i++) {\n        s = getaddrinfo(host, port, &hints, &result);\n        if (s == 0) {\n            break;\n        } else {\n            sleep(pow(2, i));\n            LOGE(\"failed to resolve server name, wait %.0f seconds\", pow(2, i));\n        }\n    }\n\n    if (s != 0) {\n        LOGE(\"getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    rp = result;\n\n    /*\n     * On Linux, with net.ipv6.bindv6only = 0 (the default), getaddrinfo(NULL) with\n     * AI_PASSIVE returns 0.0.0.0 and :: (in this order). AI_PASSIVE was meant to\n     * return a list of addresses to listen on, but it is impossible to listen on\n     * 0.0.0.0 and :: at the same time, if :: implies dualstack mode.\n     */\n    if (!host) {\n        ipv4v6bindall = result;\n\n        /* Loop over all address infos found until a IPV6 address is found. */\n        while (ipv4v6bindall) {\n            if (ipv4v6bindall->ai_family == AF_INET6) {\n                rp = ipv4v6bindall; /* Take first IPV6 address available */\n                break;\n            }\n            ipv4v6bindall = ipv4v6bindall->ai_next; /* Get next address info, if any */\n        }\n    }\n\n    for (/*rp = result*/; rp != NULL; rp = rp->ai_next) {\n        listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (listen_sock == -1) {\n            continue;\n        }\n\n        if (rp->ai_family == AF_INET6) {\n            int ipv6only = host ? 1 : 0;\n            setsockopt(listen_sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6only, sizeof(ipv6only));\n        }\n\n        int opt = 1;\n        setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n        setsockopt(listen_sock, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n        int err = set_reuseport(listen_sock);\n        if (err == 0) {\n            LOGI(\"port reuse enabled\");\n        }\n\n        if (mptcp == 1) {\n            int err = setsockopt(listen_sock, SOL_TCP, MPTCP_ENABLED, &opt, sizeof(opt));\n            if (err == -1) {\n                ERROR(\"failed to enable multipath TCP\");\n            }\n        }\n\n        s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"bind\");\n        }\n\n        close(listen_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"Could not bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return listen_sock;\n}\n\nstatic remote_t *connect_to_remote(struct addrinfo *res,\n                                   server_t *server,\n                                   int *connected)\n{\n    int sockfd;\n#ifdef SET_INTERFACE\n    const char *iface = server->listen_ctx->iface;\n#endif\n\n    // initialize remote socks\n    sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);\n    if (sockfd == -1) {\n        ERROR(\"socket\");\n        close(sockfd);\n        return NULL;\n    }\n\n    int opt = 1;\n    setsockopt(sockfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n\n    remote_t *remote = new_remote(sockfd);\n\n    // setup remote socks\n\n    if (setnonblocking(sockfd) == -1)\n        ERROR(\"setnonblocking\");\n\n    if (bind_address != NULL)\n        if (bind_to_address(sockfd, bind_address) == -1)\n            ERROR(\"bind_to_address\");\n\n#ifdef SET_INTERFACE\n    if (iface) {\n        if (setinterface(sockfd, iface) == -1)\n            ERROR(\"setinterface\");\n    }\n#endif\n\n#ifdef TCP_FASTOPEN\n    if (fast_open) {\n#ifdef __APPLE__\n        ((struct sockaddr_in *)(res->ai_addr))->sin_len = sizeof(struct sockaddr_in);\n        sa_endpoints_t endpoints;\n        bzero((char *)&endpoints, sizeof(endpoints));\n        endpoints.sae_dstaddr    = res->ai_addr;\n        endpoints.sae_dstaddrlen = res->ai_addrlen;\n\n        struct iovec iov;\n        iov.iov_base = server->buf->array + server->buf->idx;\n        iov.iov_len  = server->buf->len;\n        size_t len;\n        int s = connectx(sockfd, &endpoints, SAE_ASSOCID_ANY, CONNECT_DATA_IDEMPOTENT,\n                         &iov, 1, &len, NULL);\n        if (s == 0) {\n            s = len;\n        }\n#else\n        ssize_t s = sendto(sockfd, server->buf->array + server->buf->idx,\n                           server->buf->len, MSG_FASTOPEN, res->ai_addr,\n                           res->ai_addrlen);\n#endif\n        if (s == -1) {\n            if (errno == CONNECT_IN_PROGRESS || errno == EAGAIN\n                || errno == EWOULDBLOCK) {\n                // The remote server doesn't support tfo or it's the first connection to the server.\n                // It will automatically fall back to conventional TCP.\n            } else if (errno == EOPNOTSUPP || errno == EPROTONOSUPPORT ||\n                       errno == ENOPROTOOPT) {\n                // Disable fast open as it's not supported\n                fast_open = 0;\n                LOGE(\"fast open is not supported on this platform\");\n            } else {\n                ERROR(\"sendto\");\n            }\n        } else if (s <= server->buf->len) {\n            server->buf->idx += s;\n            server->buf->len -= s;\n        } else {\n            server->buf->idx = 0;\n            server->buf->len = 0;\n        }\n    }\n#endif\n\n    if (!fast_open) {\n        int r = connect(sockfd, res->ai_addr, res->ai_addrlen);\n\n        if (r == -1 && errno != CONNECT_IN_PROGRESS) {\n            ERROR(\"connect\");\n            close(sockfd);\n            return NULL;\n        }\n\n        *connected = r == 0;\n    }\n\n    return remote;\n}\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_recv_ctx = (server_ctx_t *)w;\n    server_t *server              = server_recv_ctx->server;\n    remote_t *remote              = NULL;\n\n    int len       = server->buf->len;\n    buffer_t *buf = server->buf;\n\n    ev_timer_again(EV_A_ & server->recv_ctx->watcher);\n\n    if (server->stage != 0) {\n        remote = server->remote;\n        buf    = remote->buf;\n        len    = 0;\n    }\n\n    ssize_t r = recv(server->fd, buf->array + len, BUF_SIZE - len, 0);\n\n    if (r == 0) {\n        // connection closed\n        if (verbose) {\n            LOGI(\"server_recv close the connection\");\n        }\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"server recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    tx += r;\n\n    // handle incomplete header\n    if (server->stage == 0) {\n        buf->len += r;\n        if (buf->len <= enc_get_iv_len()) {\n            // wait for more\n            if (verbose) {\n#ifdef __MINGW32__\n                LOGI(\"incomplete header: %u\", r);\n#else\n                LOGI(\"incomplete header: %zu\", r);\n#endif\n            }\n            return;\n        }\n    } else {\n        buf->len = r;\n    }\n\n    int err = ss_decrypt(buf, server->d_ctx, BUF_SIZE);\n\n    if (err) {\n        LOGE(\"invalid password or cipher\");\n        report_addr(server->fd);\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    // handshake and transmit data\n    if (server->stage == 5) {\n        if (server->auth && !ss_check_hash(remote->buf, server->chunk, server->d_ctx, BUF_SIZE)) {\n            LOGE(\"hash error\");\n            report_addr(server->fd);\n            close_and_free_server(EV_A_ server);\n            close_and_free_remote(EV_A_ remote);\n            return;\n        }\n        int s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n        if (s == -1) {\n            if (errno == EAGAIN || errno == EWOULDBLOCK) {\n                // no data, wait for send\n                remote->buf->idx = 0;\n                ev_io_stop(EV_A_ & server_recv_ctx->io);\n                ev_io_start(EV_A_ & remote->send_ctx->io);\n            } else {\n                ERROR(\"server_recv_send\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n        } else if (s < remote->buf->len) {\n            remote->buf->len -= s;\n            remote->buf->idx  = s;\n            ev_io_stop(EV_A_ & server_recv_ctx->io);\n            ev_io_start(EV_A_ & remote->send_ctx->io);\n        }\n        return;\n    } else if (server->stage == 0) {\n        /*\n         * Shadowsocks TCP Relay Header:\n         *\n         *    +------+----------+----------+----------------+\n         *    | ATYP | DST.ADDR | DST.PORT |    HMAC-SHA1   |\n         *    +------+----------+----------+----------------+\n         *    |  1   | Variable |    2     |      10        |\n         *    +------+----------+----------+----------------+\n         *\n         *    If ATYP & ONETIMEAUTH_FLAG(0x10) != 0, Authentication (HMAC-SHA1) is enabled.\n         *\n         *    The key of HMAC-SHA1 is (IV + KEY) and the input is the whole header.\n         *    The output of HMAC-SHA is truncated to 10 bytes (leftmost bits).\n         */\n\n        /*\n         * Shadowsocks Request's Chunk Authentication for TCP Relay's payload\n         * (No chunk authentication for response's payload):\n         *\n         *    +------+-----------+-------------+------+\n         *    | LEN  | HMAC-SHA1 |    DATA     |      ...\n         *    +------+-----------+-------------+------+\n         *    |  2   |    10     |  Variable   |      ...\n         *    +------+-----------+-------------+------+\n         *\n         *    The key of HMAC-SHA1 is (IV + CHUNK ID)\n         *    The output of HMAC-SHA is truncated to 10 bytes (leftmost bits).\n         */\n\n        int offset     = 0;\n        int need_query = 0;\n        char atyp      = server->buf->array[offset++];\n        char host[257] = { 0 };\n        uint16_t port  = 0;\n        struct addrinfo info;\n        struct sockaddr_storage storage;\n        memset(&info, 0, sizeof(struct addrinfo));\n        memset(&storage, 0, sizeof(struct sockaddr_storage));\n\n        if (auth || (atyp & ONETIMEAUTH_FLAG)) {\n            size_t header_len = parse_header_len(atyp, server->buf->array, offset);\n            size_t len        = server->buf->len;\n\n            if (len < offset + header_len + ONETIMEAUTH_BYTES) {\n                report_addr(server->fd);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            server->buf->len = offset + header_len + ONETIMEAUTH_BYTES;\n            if (ss_onetimeauth_verify(server->buf, server->d_ctx->evp.iv)) {\n                char *peer_name = get_peer_name(server->fd);\n                if (peer_name) {\n                    LOGE(\"authentication error from %s\", peer_name);\n                    if (acl) {\n                        if (acl_get_mode() == BLACK_LIST) {\n                            // Auto ban enabled only in black list mode\n                            acl_add_ip(peer_name);\n                            LOGE(\"add %s to the black list\", peer_name);\n                        }\n                    }\n                }\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            server->buf->len = len;\n            server->auth     = 1;\n        }\n\n        // get remote addr and port\n        if ((atyp & ADDRTYPE_MASK) == 1) {\n            // IP V4\n            struct sockaddr_in *addr = (struct sockaddr_in *)&storage;\n            size_t in_addr_len       = sizeof(struct in_addr);\n            addr->sin_family = AF_INET;\n            if (server->buf->len >= in_addr_len + 3) {\n                addr->sin_addr = *(struct in_addr *)(server->buf->array + offset);\n                dns_ntop(AF_INET, (const void *)(server->buf->array + offset),\n                         host, INET_ADDRSTRLEN);\n                offset += in_addr_len;\n            } else {\n                LOGE(\"invalid header with addr type %d\", atyp);\n                report_addr(server->fd);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            addr->sin_port   = *(uint16_t *)(server->buf->array + offset);\n            info.ai_family   = AF_INET;\n            info.ai_socktype = SOCK_STREAM;\n            info.ai_protocol = IPPROTO_TCP;\n            info.ai_addrlen  = sizeof(struct sockaddr_in);\n            info.ai_addr     = (struct sockaddr *)addr;\n        } else if ((atyp & ADDRTYPE_MASK) == 3) {\n            // Domain name\n            uint8_t name_len = *(uint8_t *)(server->buf->array + offset);\n            if (name_len + 4 <= server->buf->len) {\n                memcpy(host, server->buf->array + offset + 1, name_len);\n                offset += name_len + 1;\n            } else {\n                LOGE(\"invalid name length: %d\", name_len);\n                report_addr(server->fd);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            struct cork_ip ip;\n            if (cork_ip_init(&ip, host) != -1) {\n                info.ai_socktype = SOCK_STREAM;\n                info.ai_protocol = IPPROTO_TCP;\n                if (ip.version == 4) {\n                    struct sockaddr_in *addr = (struct sockaddr_in *)&storage;\n                    dns_pton(AF_INET, host, &(addr->sin_addr));\n                    addr->sin_port   = *(uint16_t *)(server->buf->array + offset);\n                    addr->sin_family = AF_INET;\n                    info.ai_family   = AF_INET;\n                    info.ai_addrlen  = sizeof(struct sockaddr_in);\n                    info.ai_addr     = (struct sockaddr *)addr;\n                } else if (ip.version == 6) {\n                    struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage;\n                    dns_pton(AF_INET6, host, &(addr->sin6_addr));\n                    addr->sin6_port   = *(uint16_t *)(server->buf->array + offset);\n                    addr->sin6_family = AF_INET6;\n                    info.ai_family    = AF_INET6;\n                    info.ai_addrlen   = sizeof(struct sockaddr_in6);\n                    info.ai_addr      = (struct sockaddr *)addr;\n                }\n            } else {\n                need_query = 1;\n            }\n        } else if ((atyp & ADDRTYPE_MASK) == 4) {\n            // IP V6\n            struct sockaddr_in6 *addr = (struct sockaddr_in6 *)&storage;\n            size_t in6_addr_len       = sizeof(struct in6_addr);\n            addr->sin6_family = AF_INET6;\n            if (server->buf->len >= in6_addr_len + 3) {\n                addr->sin6_addr = *(struct in6_addr *)(server->buf->array + offset);\n                dns_ntop(AF_INET6, (const void *)(server->buf->array + offset),\n                         host, INET6_ADDRSTRLEN);\n                offset += in6_addr_len;\n            } else {\n                LOGE(\"invalid header with addr type %d\", atyp);\n                report_addr(server->fd);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            addr->sin6_port  = *(uint16_t *)(server->buf->array + offset);\n            info.ai_family   = AF_INET6;\n            info.ai_socktype = SOCK_STREAM;\n            info.ai_protocol = IPPROTO_TCP;\n            info.ai_addrlen  = sizeof(struct sockaddr_in6);\n            info.ai_addr     = (struct sockaddr *)addr;\n        }\n\n        if (offset == 1) {\n            LOGE(\"invalid header with addr type %d\", atyp);\n            report_addr(server->fd);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n\n        port = (*(uint16_t *)(server->buf->array + offset));\n\n        offset += 2;\n\n        if (server->auth) {\n            offset += ONETIMEAUTH_BYTES;\n        }\n\n        if (server->buf->len < offset) {\n            report_addr(server->fd);\n            close_and_free_server(EV_A_ server);\n            return;\n        } else {\n            server->buf->len -= offset;\n            memmove(server->buf->array, server->buf->array + offset, server->buf->len);\n        }\n\n        if (verbose) {\n            if ((atyp & ADDRTYPE_MASK) == 4)\n                LOGI(\"connect to [%s]:%d\", host, ntohs(port));\n            else\n                LOGI(\"connect to %s:%d\", host, ntohs(port));\n        }\n\n        if (server->auth && !ss_check_hash(server->buf, server->chunk, server->d_ctx, BUF_SIZE)) {\n            LOGE(\"hash error\");\n            report_addr(server->fd);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n\n        if (!need_query) {\n            int connected = 0;\n            remote_t *remote = connect_to_remote(&info, server, &connected);\n\n            if (remote == NULL) {\n                LOGE(\"connect error\");\n                close_and_free_server(EV_A_ server);\n                return;\n            } else {\n                server->remote = remote;\n                remote->server = server;\n\n                // XXX: should handle buffer carefully\n                if (server->buf->len > 0) {\n                    memcpy(remote->buf->array, server->buf->array, server->buf->len);\n                    remote->buf->len = server->buf->len;\n                    remote->buf->idx = 0;\n                    server->buf->len = 0;\n                    server->buf->idx = 0;\n                }\n\n                server->stage = 4;\n\n                if (connected) {\n                    remote_send_cb(EV_A_ & remote->send_ctx->io, 0);\n                } else {\n                    // waiting on remote connected event\n                    ev_io_stop(EV_A_ & server_recv_ctx->io);\n                    ev_io_start(EV_A_ & remote->send_ctx->io);\n                }\n            }\n        } else {\n            query_t *query = (query_t *)ss_malloc(sizeof(query_t));\n            query->server = server;\n            snprintf(query->hostname, 256, \"%s\", host);\n\n            server->stage = 4;\n            server->query = resolv_query(host, server_resolve_cb,\n                    query_free_cb, query, port);\n\n            ev_io_stop(EV_A_ & server_recv_ctx->io);\n        }\n\n        return;\n    }\n    // should not reach here\n    FATAL(\"server context error\");\n}\n\nstatic void server_send_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_send_ctx = (server_ctx_t *)w;\n    server_t *server              = server_send_ctx->server;\n    remote_t *remote              = server->remote;\n\n    if (remote == NULL) {\n        LOGE(\"invalid server\");\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    if (server->buf->len == 0) {\n        // close and free\n        if (verbose) {\n            LOGI(\"server_send close the connection\");\n        }\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(server->fd, server->buf->array + server->buf->idx,\n                         server->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"server_send_send\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < server->buf->len) {\n            // partly sent, move memory, wait for the next time to send\n            server->buf->len -= s;\n            server->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            server->buf->len = 0;\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_send_ctx->io);\n            if (remote != NULL) {\n                ev_io_start(EV_A_ & remote->recv_ctx->io);\n                return;\n            } else {\n                LOGE(\"invalid remote\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n        }\n    }\n}\n\nstatic void server_timeout_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    server_ctx_t *server_ctx = (server_ctx_t *)(((void *)watcher)\n                                                - sizeof(ev_io));\n    server_t *server = server_ctx->server;\n    remote_t *remote = server->remote;\n\n    if (verbose) {\n        LOGI(\"TCP connection timeout\");\n    }\n\n    close_and_free_remote(EV_A_ remote);\n    close_and_free_server(EV_A_ server);\n}\n\nstatic void query_free_cb(void *data)\n{\n    if (data != NULL) {\n        ss_free(data);\n    }\n}\n\nstatic void server_resolve_cb(struct sockaddr *addr, void *data)\n{\n    query_t *query       = (query_t *)data;\n    server_t *server     = query->server;\n    struct ev_loop *loop = server->listen_ctx->loop;\n\n    server->query = NULL;\n\n    if (addr == NULL) {\n        LOGE(\"unable to resolve %s\", query->hostname);\n        close_and_free_server(EV_A_ server);\n    } else {\n        if (verbose) {\n            LOGI(\"successfully resolved %s\", query->hostname);\n        }\n\n        struct addrinfo info;\n        memset(&info, 0, sizeof(struct addrinfo));\n        info.ai_socktype = SOCK_STREAM;\n        info.ai_protocol = IPPROTO_TCP;\n        info.ai_addr     = addr;\n\n        if (addr->sa_family == AF_INET) {\n            info.ai_family  = AF_INET;\n            info.ai_addrlen = sizeof(struct sockaddr_in);\n        } else if (addr->sa_family == AF_INET6) {\n            info.ai_family  = AF_INET6;\n            info.ai_addrlen = sizeof(struct sockaddr_in6);\n        }\n\n        int connected = 0;\n        remote_t *remote = connect_to_remote(&info, server, &connected);\n\n        if (remote == NULL) {\n            LOGE(\"connect error\");\n            close_and_free_server(EV_A_ server);\n        } else {\n            server->remote = remote;\n            remote->server = server;\n\n            // XXX: should handle buffer carefully\n            if (server->buf->len > 0) {\n                memcpy(remote->buf->array, server->buf->array + server->buf->idx,\n                       server->buf->len);\n                remote->buf->len = server->buf->len;\n                remote->buf->idx = 0;\n                server->buf->len = 0;\n                server->buf->idx = 0;\n            }\n\n            if (connected) {\n                remote_send_cb(EV_A_ & remote->send_ctx->io, 0);\n            } else {\n                // listen to remote connected event\n                ev_io_start(EV_A_ & remote->send_ctx->io);\n            }\n        }\n    }\n}\n\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_recv_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_recv_ctx->remote;\n    server_t *server              = remote->server;\n\n    if (server == NULL) {\n        LOGE(\"invalid server\");\n        close_and_free_remote(EV_A_ remote);\n        return;\n    }\n\n    ev_timer_again(EV_A_ & server->recv_ctx->watcher);\n\n    ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        if (verbose) {\n            LOGI(\"remote_recv close the connection\");\n        }\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"remote recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    rx += r;\n\n    server->buf->len = r;\n    int err = ss_encrypt(server->buf, server->e_ctx, BUF_SIZE);\n\n    if (err) {\n        LOGE(\"invalid password or cipher\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    int s = send(server->fd, server->buf->array, server->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_recv_ctx->io);\n            ev_io_start(EV_A_ & server->send_ctx->io);\n        } else {\n            ERROR(\"remote_recv_send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n        }\n    } else if (s < server->buf->len) {\n        server->buf->len -= s;\n        server->buf->idx  = s;\n        ev_io_stop(EV_A_ & remote_recv_ctx->io);\n        ev_io_start(EV_A_ & server->send_ctx->io);\n    }\n\n    // Disable TCP_NODELAY after the first response are sent\n    int opt = 0;\n    setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n    setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n}\n\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_send_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_send_ctx->remote;\n    server_t *server              = remote->server;\n\n    if (server == NULL) {\n        LOGE(\"invalid server\");\n        close_and_free_remote(EV_A_ remote);\n        return;\n    }\n\n    if (!remote_send_ctx->connected) {\n        struct sockaddr_storage addr;\n        socklen_t len = sizeof addr;\n        memset(&addr, 0, len);\n        int r = getpeername(remote->fd, (struct sockaddr *)&addr, &len);\n        if (r == 0) {\n            if (verbose) {\n                LOGI(\"remote connected\");\n            }\n            remote_send_ctx->connected = 1;\n\n            if (remote->buf->len == 0) {\n                server->stage = 5;\n                ev_io_stop(EV_A_ & remote_send_ctx->io);\n                ev_io_start(EV_A_ & server->recv_ctx->io);\n                ev_io_start(EV_A_ & remote->recv_ctx->io);\n                return;\n            }\n        } else {\n            ERROR(\"getpeername\");\n            // not connected\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    if (remote->buf->len == 0) {\n        // close and free\n        if (verbose) {\n            LOGI(\"remote_send close the connection\");\n        }\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(remote->fd, remote->buf->array + remote->buf->idx,\n                         remote->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"remote_send_send\");\n                // close and free\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < remote->buf->len) {\n            // partly sent, move memory, wait for the next time to send\n            remote->buf->len -= s;\n            remote->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            remote->buf->len = 0;\n            remote->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_send_ctx->io);\n            if (server != NULL) {\n                ev_io_start(EV_A_ & server->recv_ctx->io);\n                if (server->stage == 4) {\n                    server->stage = 5;\n                    ev_io_start(EV_A_ & remote->recv_ctx->io);\n                }\n            } else {\n                LOGE(\"invalid server\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        }\n    }\n}\n\nstatic remote_t *new_remote(int fd)\n{\n    if (verbose) {\n        remote_conn++;\n    }\n\n    remote_t *remote;\n\n    remote                      = ss_malloc(sizeof(remote_t));\n    remote->recv_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->send_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->buf                 = ss_malloc(sizeof(buffer_t));\n    remote->fd                  = fd;\n    remote->recv_ctx->remote    = remote;\n    remote->recv_ctx->connected = 0;\n    remote->send_ctx->remote    = remote;\n    remote->send_ctx->connected = 0;\n    remote->server              = NULL;\n\n    ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);\n    ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);\n\n    balloc(remote->buf, BUF_SIZE);\n\n    return remote;\n}\n\nstatic void free_remote(remote_t *remote)\n{\n    if (remote->server != NULL) {\n        remote->server->remote = NULL;\n    }\n    if (remote->buf != NULL) {\n        bfree(remote->buf);\n        ss_free(remote->buf);\n    }\n    ss_free(remote->recv_ctx);\n    ss_free(remote->send_ctx);\n    ss_free(remote);\n}\n\nstatic void close_and_free_remote(EV_P_ remote_t *remote)\n{\n    if (remote != NULL) {\n        ev_io_stop(EV_A_ & remote->send_ctx->io);\n        ev_io_stop(EV_A_ & remote->recv_ctx->io);\n        close(remote->fd);\n        free_remote(remote);\n        if (verbose) {\n            remote_conn--;\n            LOGI(\"current remote connection: %d\", remote_conn);\n        }\n    }\n}\n\nstatic server_t *new_server(int fd, listen_ctx_t *listener)\n{\n    if (verbose) {\n        server_conn++;\n    }\n\n    server_t *server;\n    server = ss_malloc(sizeof(server_t));\n\n    memset(server, 0, sizeof(server_t));\n\n    server->recv_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->send_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->buf                 = ss_malloc(sizeof(buffer_t));\n    server->fd                  = fd;\n    server->recv_ctx->server    = server;\n    server->recv_ctx->connected = 0;\n    server->send_ctx->server    = server;\n    server->send_ctx->connected = 0;\n    server->stage               = 0;\n    server->query               = NULL;\n    server->listen_ctx          = listener;\n    server->remote              = NULL;\n\n    if (listener->method) {\n        server->e_ctx = ss_malloc(sizeof(enc_ctx_t));\n        server->d_ctx = ss_malloc(sizeof(enc_ctx_t));\n        enc_ctx_init(listener->method, server->e_ctx, 1);\n        enc_ctx_init(listener->method, server->d_ctx, 0);\n    } else {\n        server->e_ctx = NULL;\n        server->d_ctx = NULL;\n    }\n\n    ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);\n    ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);\n    ev_timer_init(&server->recv_ctx->watcher, server_timeout_cb,\n                  min(MAX_CONNECT_TIMEOUT, listener->timeout), listener->timeout);\n\n    balloc(server->buf, BUF_SIZE);\n\n    server->chunk = (chunk_t *)malloc(sizeof(chunk_t));\n    memset(server->chunk, 0, sizeof(chunk_t));\n    server->chunk->buf = ss_malloc(sizeof(buffer_t));\n    memset(server->chunk->buf, 0, sizeof(buffer_t));\n\n    cork_dllist_add(&connections, &server->entries);\n\n    return server;\n}\n\nstatic void free_server(server_t *server)\n{\n    cork_dllist_remove(&server->entries);\n\n    if (server->chunk != NULL) {\n        if (server->chunk->buf != NULL) {\n            bfree(server->chunk->buf);\n            ss_free(server->chunk->buf);\n        }\n        ss_free(server->chunk);\n    }\n    if (server->remote != NULL) {\n        server->remote->server = NULL;\n    }\n    if (server->e_ctx != NULL) {\n        cipher_context_release(&server->e_ctx->evp);\n        ss_free(server->e_ctx);\n    }\n    if (server->d_ctx != NULL) {\n        cipher_context_release(&server->d_ctx->evp);\n        ss_free(server->d_ctx);\n    }\n    if (server->buf != NULL) {\n        bfree(server->buf);\n        ss_free(server->buf);\n    }\n\n    ss_free(server->recv_ctx);\n    ss_free(server->send_ctx);\n    ss_free(server);\n}\n\nstatic void close_and_free_server(EV_P_ server_t *server)\n{\n    if (server != NULL) {\n        if (server->query != NULL) {\n            resolv_cancel(server->query);\n            server->query = NULL;\n        }\n        ev_io_stop(EV_A_ & server->send_ctx->io);\n        ev_io_stop(EV_A_ & server->recv_ctx->io);\n        ev_timer_stop(EV_A_ & server->recv_ctx->watcher);\n        close(server->fd);\n        free_server(server);\n        if (verbose) {\n            server_conn--;\n            LOGI(\"current server connection: %d\", server_conn);\n        }\n    }\n}\n\nstatic void signal_cb(EV_P_ ev_signal *w, int revents)\n{\n    if (revents & EV_SIGNAL) {\n        switch (w->signum) {\n        case SIGINT:\n        case SIGTERM:\n            ev_unloop(EV_A_ EVUNLOOP_ALL);\n        }\n    }\n}\n\nstatic void accept_cb(EV_P_ ev_io *w, int revents)\n{\n    listen_ctx_t *listener = (listen_ctx_t *)w;\n    int serverfd           = accept(listener->fd, NULL, NULL);\n    if (serverfd == -1) {\n        ERROR(\"accept\");\n        return;\n    }\n\n    if (acl) {\n        char *peer_name = get_peer_name(serverfd);\n        if (peer_name != NULL && acl_match_ip(peer_name)) {\n            if (verbose)\n                LOGI(\"Access denied from %s\", peer_name);\n            close(serverfd);\n            return;\n        }\n    }\n\n    int opt = 1;\n    setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n    setnonblocking(serverfd);\n\n    if (verbose) {\n        LOGI(\"accept a connection\");\n    }\n\n    server_t *server = new_server(serverfd, listener);\n    ev_io_start(EV_A_ & server->recv_ctx->io);\n    ev_timer_start(EV_A_ & server->recv_ctx->watcher);\n}\n\nint main(int argc, char **argv)\n{\n    int i, c;\n    int pid_flags   = 0;\n    int mptcp       = 0;\n    int mtu         = 0;\n    char *user      = NULL;\n    char *password  = NULL;\n    char *timeout   = NULL;\n    char *method    = NULL;\n    char *pid_path  = NULL;\n    char *conf_path = NULL;\n    char *acl_path  = NULL;\n    char *iface     = NULL;\n\n    int server_num = 0;\n    const char *server_host[MAX_REMOTE_NUM];\n\n    char *nameservers[MAX_DNS_NUM + 1];\n    int nameserver_num = 0;\n\n    int option_index                    = 0;\n    static struct option long_options[] = {\n        { \"fast-open\"      , no_argument      , 0, 0 },\n        { \"acl\"            , required_argument, 0, 0 },\n        { \"manager-address\", required_argument, 0, 0 },\n        { \"mtu\"            , required_argument, 0, 0 },\n        { \"mptcp\"          , no_argument      , 0, 0 },\n        { \"help\"           , no_argument      , 0, 0 },\n        {                 0,                 0, 0, 0 }\n    };\n\n    opterr = 0;\n\n    USE_TTY();\n\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:b:c:i:d:a:n:huUvAw6\",\n                            long_options, &option_index)) != -1) {\n        switch (c) {\n        case 0:\n            if (option_index == 0) {\n                fast_open = 1;\n            } else if (option_index == 1) {\n                LOGI(\"initializing acl...\");\n                acl      = 1;\n                acl_path = optarg;\n            } else if (option_index == 2) {\n                manager_address = optarg;\n            } else if (option_index == 3) {\n                mtu = atoi(optarg);\n                LOGI(\"set MTU to %d\", mtu);\n            } else if (option_index == 4) {\n                mptcp = 1;\n                LOGI(\"enable multipath TCP\");\n            } else if (option_index == 5) {\n                usage();\n                exit(EXIT_SUCCESS);\n            }\n            break;\n        case 's':\n            if (server_num < MAX_REMOTE_NUM) {\n                server_host[server_num++] = optarg;\n            }\n            break;\n        case 'b':\n            bind_address = optarg;\n            break;\n        case 'p':\n            server_port = optarg;\n            break;\n        case 'k':\n            password = optarg;\n            break;\n        case 'f':\n            pid_flags = 1;\n            pid_path  = optarg;\n            break;\n        case 't':\n            timeout = optarg;\n            break;\n        case 'm':\n            method = optarg;\n            break;\n        case 'c':\n            conf_path = optarg;\n            break;\n        case 'i':\n            iface = optarg;\n            break;\n        case 'd':\n            if (nameserver_num < MAX_DNS_NUM) {\n                nameservers[nameserver_num++] = optarg;\n            }\n            break;\n        case 'a':\n            user = optarg;\n            break;\n#ifdef HAVE_SETRLIMIT\n        case 'n':\n            nofile = atoi(optarg);\n            break;\n#endif\n        case 'u':\n            mode = TCP_AND_UDP;\n            break;\n        case 'U':\n            mode = UDP_ONLY;\n            break;\n        case 'v':\n            verbose = 1;\n            break;\n        case 'h':\n            usage();\n            exit(EXIT_SUCCESS);\n        case 'A':\n            auth = 1;\n            break;\n        case 'w':\n            white_list = 1;\n            break;\n        case '6':\n            ipv6first = 1;\n            break;\n        case '?':\n            // The option character is not recognized.\n            opterr = 1;\n            break;\n        }\n    }\n\n    if (opterr) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    acl = acl ? !init_acl(acl_path, white_list) : 0;\n\n    if (argc == 1) {\n        if (conf_path == NULL) {\n            conf_path = DEFAULT_CONF_PATH;\n        }\n    }\n\n    if (conf_path != NULL) {\n        jconf_t *conf = read_jconf(conf_path);\n        if (server_num == 0) {\n            server_num = conf->remote_num;\n            for (i = 0; i < server_num; i++)\n                server_host[i] = conf->remote_addr[i].host;\n        }\n        if (server_port == NULL) {\n            server_port = conf->remote_port;\n        }\n        if (password == NULL) {\n            password = conf->password;\n        }\n        if (method == NULL) {\n            method = conf->method;\n        }\n        if (timeout == NULL) {\n            timeout = conf->timeout;\n        }\n        if (auth == 0) {\n            auth = conf->auth;\n        }\n        if (mode == TCP_ONLY) {\n            mode = conf->mode;\n        }\n        if (mtu == 0) {\n            mtu = conf->mtu;\n        }\n        if (mptcp == 0) {\n            mptcp = conf->mptcp;\n        }\n#ifdef TCP_FASTOPEN\n        if (fast_open == 0) {\n            fast_open = conf->fast_open;\n        }\n#endif\n#ifdef HAVE_SETRLIMIT\n        if (nofile == 0) {\n            nofile = conf->nofile;\n        }\n        /*\n         * no need to check the return value here since we will show\n         * the user an error message if setrlimit(2) fails\n         */\n        if (nofile > 1024) {\n            if (verbose) {\n                LOGI(\"setting NOFILE to %d\", nofile);\n            }\n            set_nofile(nofile);\n        }\n#endif\n        if (conf->nameserver != NULL) {\n            nameservers[nameserver_num++] = conf->nameserver;\n        }\n    }\n\n    if (server_num == 0) {\n        server_host[server_num++] = NULL;\n    }\n\n    if (server_num == 0 || server_port == NULL || password == NULL) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (method == NULL) {\n        method = \"table\";\n    }\n\n    if (timeout == NULL) {\n        timeout = \"60\";\n    }\n\n    if (pid_flags) {\n        USE_SYSLOG(argv[0]);\n        daemonize(pid_path);\n    }\n\n    if (ipv6first) {\n        LOGI(\"resolving hostname to IPv6 address first\");\n    }\n\n    if (fast_open == 1) {\n#ifdef TCP_FASTOPEN\n        LOGI(\"using tcp fast open\");\n#else\n        LOGE(\"tcp fast open is not supported by this environment\");\n#endif\n    }\n\n    if (auth) {\n        LOGI(\"onetime authentication enabled\");\n    }\n\n    if (mode != TCP_ONLY) {\n        LOGI(\"UDP relay enabled\");\n    }\n\n    if (mode == UDP_ONLY) {\n        LOGI(\"TCP relay disabled\");\n    }\n\n#ifdef __MINGW32__\n    winsock_init();\n#else\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGCHLD, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n#endif\n\n    struct ev_signal sigint_watcher;\n    struct ev_signal sigterm_watcher;\n    ev_signal_init(&sigint_watcher, signal_cb, SIGINT);\n    ev_signal_init(&sigterm_watcher, signal_cb, SIGTERM);\n    ev_signal_start(EV_DEFAULT, &sigint_watcher);\n    ev_signal_start(EV_DEFAULT, &sigterm_watcher);\n\n    // setup keys\n    LOGI(\"initializing ciphers... %s\", method);\n    int m = enc_init(password, method);\n\n    // initialize ev loop\n    struct ev_loop *loop = EV_DEFAULT;\n\n    // setup udns\n    if (nameserver_num == 0) {\n#ifdef __MINGW32__\n        nameservers[nameserver_num++] = \"8.8.8.8\";\n        resolv_init(loop, nameservers, nameserver_num, ipv6first);\n#else\n        resolv_init(loop, NULL, 0, ipv6first);\n#endif\n    } else {\n        resolv_init(loop, nameservers, nameserver_num, ipv6first);\n    }\n\n    for (int i = 0; i < nameserver_num; i++)\n        LOGI(\"using nameserver: %s\", nameservers[i]);\n\n    // initialize listen context\n    listen_ctx_t listen_ctx_list[server_num];\n\n    // bind to each interface\n    while (server_num > 0) {\n        int index        = --server_num;\n        const char *host = server_host[index];\n\n        if (mode != UDP_ONLY) {\n            // Bind to port\n            int listenfd;\n            listenfd = create_and_bind(host, server_port, mptcp);\n            if (listenfd == -1) {\n                FATAL(\"bind() error\");\n            }\n            if (listen(listenfd, SSMAXCONN) == -1) {\n                FATAL(\"listen() error\");\n            }\n            setfastopen(listenfd);\n            setnonblocking(listenfd);\n            listen_ctx_t *listen_ctx = &listen_ctx_list[index];\n\n            // Setup proxy context\n            listen_ctx->timeout = atoi(timeout);\n            listen_ctx->fd      = listenfd;\n            listen_ctx->method  = m;\n            listen_ctx->iface   = iface;\n            listen_ctx->loop    = loop;\n\n            ev_io_init(&listen_ctx->io, accept_cb, listenfd, EV_READ);\n            ev_io_start(loop, &listen_ctx->io);\n        }\n\n        // Setup UDP\n        if (mode != TCP_ONLY) {\n            init_udprelay(server_host[index], server_port, mtu, m,\n                    auth, atoi(timeout), iface);\n        }\n\n        LOGI(\"listening at %s:%s\", host ? host : \"*\", server_port);\n    }\n\n    if (manager_address != NULL) {\n        ev_timer_init(&stat_update_watcher, stat_update_cb, UPDATE_INTERVAL, UPDATE_INTERVAL);\n        ev_timer_start(EV_DEFAULT, &stat_update_watcher);\n    }\n\n    // setuid\n    if (user != NULL) {\n        run_as(user);\n    }\n\n    // Init connections\n    cork_dllist_init(&connections);\n\n    // start ev loop\n    ev_run(loop, 0);\n\n    if (verbose) {\n        LOGI(\"closed gracefully\");\n    }\n\n    if (manager_address != NULL) {\n        ev_timer_stop(EV_DEFAULT, &stat_update_watcher);\n    }\n\n    // Clean up\n    for (int i = 0; i <= server_num; i++) {\n        listen_ctx_t *listen_ctx = &listen_ctx_list[i];\n        if (mode != UDP_ONLY) {\n            ev_io_stop(loop, &listen_ctx->io);\n            close(listen_ctx->fd);\n        }\n    }\n\n    if (mode != UDP_ONLY) {\n        free_connections(loop);\n    }\n\n    if (mode != TCP_ONLY) {\n        free_udprelay();\n    }\n\n    resolv_shutdown(loop);\n\n#ifdef __MINGW32__\n    winsock_cleanup();\n#endif\n\n    ev_signal_stop(EV_DEFAULT, &sigint_watcher);\n    ev_signal_stop(EV_DEFAULT, &sigterm_watcher);\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/server.h",
    "content": "/*\n * server.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _SERVER_H\n#define _SERVER_H\n\n#include <ev.h>\n#include <time.h>\n#include <libcork/ds.h>\n\n#include \"encrypt.h\"\n#include \"jconf.h\"\n#include \"resolv.h\"\n\n#include \"common.h\"\n\ntypedef struct listen_ctx {\n    ev_io io;\n    int fd;\n    int timeout;\n    int method;\n    char *iface;\n    struct ev_loop *loop;\n} listen_ctx_t;\n\ntypedef struct server_ctx {\n    ev_io io;\n    ev_timer watcher;\n    int connected;\n    struct server *server;\n} server_ctx_t;\n\ntypedef struct server {\n    int fd;\n    int stage;\n    buffer_t *buf;\n    ssize_t buf_capacity;\n\n    int auth;\n    struct chunk *chunk;\n\n    struct enc_ctx *e_ctx;\n    struct enc_ctx *d_ctx;\n    struct server_ctx *recv_ctx;\n    struct server_ctx *send_ctx;\n    struct listen_ctx *listen_ctx;\n    struct remote *remote;\n\n    struct ResolvQuery *query;\n\n    struct cork_dllist_item entries;\n} server_t;\n\ntypedef struct query {\n    server_t *server;\n    char hostname[257];\n} query_t;\n\ntypedef struct remote_ctx {\n    ev_io io;\n    int connected;\n    struct remote *remote;\n} remote_ctx_t;\n\ntypedef struct remote {\n    int fd;\n    buffer_t *buf;\n    ssize_t buf_capacity;\n    struct remote_ctx *recv_ctx;\n    struct remote_ctx *send_ctx;\n    struct server *server;\n} remote_t;\n\n#endif // _SERVER_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/shadowsocks.h",
    "content": "/*\n * shadowsocks.h - Header files of library interfaces\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _SHADOWSOCKS_H\n#define _SHADOWSOCKS_H\n\ntypedef struct {\n    /*  Required  */\n    char *remote_host;    // hostname or ip of remote server\n    char *local_addr;     // local ip to bind\n    char *method;         // encryption method\n    char *password;       // password of remote server\n    int remote_port;      // port number of remote server\n    int local_port;       // port number of local server\n    int timeout;          // connection timeout\n\n    /* SSR */\n    char *protocol;\n    char *obfs;\n    char *obfs_param;\n\n    /*  Optional, set NULL if not valid   */\n    char *acl;            // file path to acl\n    char *log;            // file path to log\n    int use_sys_log;            // file path to log\n    int fast_open;        // enable tcp fast open\n    int mode;             // enable udp relay\n    int auth;             // enable one-time authentication\n    int mtu;              // MTU of interface\n    int mptcp;            // enable multipath TCP\n    int verbose;          // verbose mode\n} profile_t;\n\n/* An example profile\n *\n * const profile_t EXAMPLE_PROFILE = {\n *  .remote_host = \"example.com\",\n *  .local_addr = \"127.0.0.1\",\n *  .method = \"bf-cfb\",\n *  .password = \"barfoo!\",\n *  .remote_port = 8338,\n *  .local_port = 1080,\n *  .timeout = 600;\n *  .acl = NULL,\n *  .log = NULL,\n *  .fast_open = 0,\n *  .mode = 0,\n *  .auth = 0,\n *  .verbose = 0\n * };\n */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n    typedef void (*shadowsocks_cb) (int fd, void*);\n\n    /*\n     * Create and start a shadowsocks local server.\n     *\n     * Calling this function will block the current thread forever if the server\n     * starts successfully.\n     *\n     * Make sure start the server in a seperate process to avoid any potential\n     * memory and socket leak.\n     *\n     * If failed, -1 is returned. Errors will output to the log file.\n     */\n    int start_ss_local_server(profile_t profile, shadowsocks_cb cb, void *data);\n\n#ifdef __cplusplus\n}\n#endif\n\n// To stop the service on posix system, just kill the daemon process\n// kill(pid, SIGKILL);\n// Otherwise, If you start the service in a thread, you may need to send a signal SIGUSER1 to the thread.\n// pthread_kill(pthread_t, SIGUSR1);\n\n#endif // _SHADOWSOCKS_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/socks5.h",
    "content": "/*\n * socks5.h - Define SOCKS5's header\n *\n * Copyright (C) 2013, clowwindy <clowwindy42@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _SOCKS5_H\n#define _SOCKS5_H\n\n#define SVERSION 0x05\n#define CONNECT 0x01\n#define IPV4 0x01\n#define DOMAIN 0x03\n#define IPV6 0x04\n#define CMD_NOT_SUPPORTED 0x07\n\n#pragma pack(push)\n#pragma pack(1)\n\nstruct method_select_request {\n    char ver;\n    char nmethods;\n    char methods[255];\n};\n\nstruct method_select_response {\n    char ver;\n    char method;\n};\n\nstruct socks5_request {\n    char ver;\n    char cmd;\n    char rsv;\n    char atyp;\n};\n\nstruct socks5_response {\n    char ver;\n    char rep;\n    char rsv;\n    char atyp;\n};\n\n#pragma pack(pop)\n\n#endif // _SOCKS5_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/ss-nat",
    "content": "#!/bin/bash\n#\n# Copyright (C) 2015 OpenWrt-dist\n# Copyright (C) 2015 Jian Chang <aa65535@live.com>\n#\n# This is free software, licensed under the GNU General Public License v3.\n# See /LICENSE for more information.\n#\n\nTAG=\"SS_SPEC\"          # iptables tag\nIPT=\"iptables -t nat\"  # alias of iptables\nFWI=$(uci get firewall.shadowsocks.path 2>/dev/null)  # firewall include file\n\nusage() {\n\tcat <<-EOF\n\n    Copyright (C) 2015 OpenWrt-dist\n    Copyright (C) 2015 Jian Chang <aa65535@live.com>\n\n    Usage: ss-nat [options]\n\n    Valid options are:\n\n        -s <server_ip>          ip address of shadowsocks remote server\n        -l <local_port>         port number of shadowsocks local server\n        -S <server_ip>          ip address of shadowsocks remote UDP server\n        -L <local_port>         port number of shadowsocks local UDP server\n        -i <ip_list_file>       a file content is bypassed ip list\n        -a <lan_ips>            lan ip of access control, need a prefix to\n        define access control mode\n        -b <wan_ips>            wan ip of will be bypassed\n        -w <wan_ips>            wan ip of will be forwarded\n        -e <extra_options>      extra options for iptables\n        -o                      apply the rules to the OUTPUT chain\n        -u                      enable udprelay mode, TPROXY is required\n        -U                      enable udprelay mode, using different IP\n        and ports for TCP and UDP\n        -f                      flush the rules\n        -h                      show this help message and exit\n\n    This is free software, licensed under the GNU General Public License v3.\n    See /LICENSE for more information.\n\nEOF\n\texit $1\n}\n\nloger() {\n\t# 1.alert 2.crit 3.err 4.warn 5.notice 6.info 7.debug\n\tlogger -st ss-rules[$$] -p$1 $2\n}\n\nflush_r() {\n\tiptables-save -c | grep -v \"$TAG\" | iptables-restore -c\n\tip rule del fwmark 0x01/0x01 table 100 2>/dev/null\n\tip route del local 0.0.0.0/0 dev lo table 100 2>/dev/null\n\tipset -X ss_spec_lan_ac 2>/dev/null\n\tipset -X ss_spec_wan_ac 2>/dev/null\n\t[ -n \"$FWI\" ] && echo '#!/bin/sh' >$FWI\n\treturn 0\n}\n\nipset_r() {\n\tipset -! -R <<-EOF || return 1\n\t\tcreate ss_spec_wan_ac hash:net\n\t\t$(gen_iplist | sed \"/^\\s*$/d\" | sed -e \"s/^/add ss_spec_wan_ac /\")\n\t\t$(for ip in $WAN_FW_IP; do echo \"add ss_spec_wan_ac $ip nomatch\"; done)\nEOF\n\t$IPT -N SS_SPEC_WAN_AC && \\\n\t$IPT -A SS_SPEC_WAN_AC -m set --match-set ss_spec_wan_ac dst -j RETURN && \\\n\t$IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW\n\treturn $?\n}\n\nfw_rule() {\n\t$IPT -N SS_SPEC_WAN_FW && \\\n\t$IPT -A SS_SPEC_WAN_FW -p tcp \\\n\t\t-j REDIRECT --to-ports $local_port 2>/dev/null || {\n\t\tloger 3 \"Can't redirect, please check the iptables.\"\n\t\texit 1\n\t}\n\treturn $?\n}\n\nac_rule() {\n\tif [ -n \"$LAN_AC_IP\" ]; then\n\t\tcase \"${LAN_AC_IP:0:1}\" in\n\t\t\tw|W)\n\t\t\t\tMATCH_SET=\"-m set --match-set ss_spec_lan_ac src\"\n\t\t\t\t;;\n\t\t\tb|B)\n\t\t\t\tMATCH_SET=\"-m set ! --match-set ss_spec_lan_ac src\"\n\t\t\t\t;;\n\t\t\t*)\n\t\t\t\tloger 3 \"Illegal argument \\`-a $LAN_AC_IP\\`.\"\n\t\t\t\treturn 2\n\t\t\t\t;;\n\t\tesac\n\tfi\n\tIFNAME=eth0\n\tipset -! -R <<-EOF || return 1\n\t\tcreate ss_spec_lan_ac hash:net\n\t\t$(for ip in ${LAN_AC_IP:1}; do echo \"add ss_spec_lan_ac $ip\"; done)\nEOF\n\t$IPT -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p tcp $EXT_ARGS $MATCH_SET \\\n\t\t-j SS_SPEC_WAN_AC\n\tif [ \"$OUTPUT\" = 1 ]; then\n\t\t$IPT -I OUTPUT 1 -p tcp $EXT_ARGS -j SS_SPEC_WAN_AC\n\tfi\n\treturn $?\n}\n\ntp_rule() {\n\tlsmod | grep -q TPROXY || return 0\n\t[ -n \"$TPROXY\" ] || return 0\n\tip rule add fwmark 0x01/0x01 table 100\n\tip route add local 0.0.0.0/0 dev lo table 100\n\tlocal ipt=\"iptables -t mangle\"\n\t$ipt -N SS_SPEC_TPROXY\n\t$ipt -A SS_SPEC_TPROXY -p udp -m set ! --match-set ss_spec_wan_ac dst \\\n\t\t-j TPROXY --on-port \"$LOCAL_PORT\" --tproxy-mark 0x01/0x01\n\t$ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET \\\n\t\t-j SS_SPEC_TPROXY\n\treturn $?\n}\n\nget_wan_ip() {\n\tcat <<-EOF | grep -E \"^([0-9]{1,3}\\.){3}[0-9]{1,3}\"\n\t\t$server\n\t\t$SERVER\n\t\t$WAN_BP_IP\nEOF\n}\n\ngen_iplist() {\n\tcat <<-EOF\n\t\t0.0.0.0/8\n\t\t10.0.0.0/8\n\t\t100.64.0.0/10\n\t\t127.0.0.0/8\n\t\t169.254.0.0/16\n\t\t172.16.0.0/12\n\t\t192.0.0.0/24\n\t\t192.0.2.0/24\n\t\t192.88.99.0/24\n\t\t192.168.0.0/16\n\t\t198.18.0.0/15\n\t\t198.51.100.0/24\n\t\t203.0.113.0/24\n\t\t224.0.0.0/4\n\t\t240.0.0.0/4\n\t\t255.255.255.255\n\t\t$(get_wan_ip)\n\t\t$(cat ${IGNORE_LIST:=/dev/null} 2>/dev/null)\nEOF\n}\n\ngen_include() {\n\t[ -n \"$FWI\" ] || return 0\n\tcat <<-EOF >>$FWI\n\tiptables-restore -n <<-EOT\n\t$(iptables-save | grep -E \"$TAG|^\\*|^COMMIT\" |\\\n\t\t\tsed -e \"s/^-A \\(OUTPUT\\|PREROUTING\\)/-I \\1 1/\")\n\tEOT\nEOF\n\treturn $?\n}\n\nwhile getopts \":s:l:S:L:i:e:a:b:w:ouUfh\" arg; do\n\tcase \"$arg\" in\n\t\ts)\n\t\t\tserver=$OPTARG\n\t\t\t;;\n\t\tl)\n\t\t\tlocal_port=$OPTARG\n\t\t\t;;\n\t\tS)\n\t\t\tSERVER=$OPTARG\n\t\t\t;;\n\t\tL)\n\t\t\tLOCAL_PORT=$OPTARG\n\t\t\t;;\n\t\ti)\n\t\t\tIGNORE_LIST=$OPTARG\n\t\t\t;;\n\t\te)\n\t\t\tEXT_ARGS=$OPTARG\n\t\t\t;;\n\t\ta)\n\t\t\tLAN_AC_IP=$OPTARG\n\t\t\t;;\n\t\tb)\n\t\t\tWAN_BP_IP=$(for ip in $OPTARG; do echo $ip; done)\n\t\t\t;;\n\t\tw)\n\t\t\tWAN_FW_IP=$OPTARG\n\t\t\t;;\n\t\to)\n\t\t\tOUTPUT=1\n\t\t\t;;\n\t\tu)\n\t\t\tTPROXY=1\n\t\t\t;;\n\t\tU)\n\t\t\tTPROXY=2\n\t\t\t;;\n\t\tf)\n\t\t\tflush_r\n\t\t\texit 0\n\t\t\t;;\n\t\th)\n\t\t\tusage 0\n\t\t\t;;\n\tesac\ndone\n\nif [ -z \"$server\" -o -z \"$local_port\" ]; then\n\tusage 2\nfi\n\nif [ \"$TPROXY\" = 1 ]; then\n\tSERVER=$server\n\tLOCAL_PORT=$local_port\nelif [ \"$TPROXY\" = 2 ]; then\n\t: ${SERVER:?\"You must assign an ip for the udp relay server.\"}\n\t: ${LOCAL_PORT:?\"You must assign a port for the udp relay server.\"}\nfi\n\nflush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include\n[ \"$?\" = 0 ] || loger 3 \"Start failed!\"\nexit $?\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/ssrlink.py",
    "content": "#!/usr/bin/python\n# -*- coding: UTF-8 -*-\n\nimport traceback\nimport random\nimport getopt\nimport sys\nimport json\nimport base64\n\ndef to_bytes(s):\n\tif bytes != str:\n\t\tif type(s) == str:\n\t\t\treturn s.encode('utf-8')\n\treturn s\n\ndef to_str(s):\n\tif bytes != str:\n\t\tif type(s) == bytes:\n\t\t\treturn s.decode('utf-8')\n\treturn s\n\ndef b64decode(data):\n\tif b':' in data:\n\t\treturn data\n\tif len(data) % 4 == 2:\n\t\tdata += b'=='\n\telif len(data) % 4 == 3:\n\t\tdata += b'='\n\treturn base64.urlsafe_b64decode(data)\n\ndef fromlink(link):\n\tif link[:6] == 'ssr://':\n\t\tlink = to_bytes(link[6:])\n\t\tlink = to_str(b64decode(link))\n\t\tparams_dict = {}\n\t\tif '/' in link:\n\t\t\tdatas = link.split('/', 1)\n\t\t\tlink = datas[0]\n\t\t\tparam = datas[1]\n\t\t\tpos = param.find('?')\n\t\t\tif pos >= 0:\n\t\t\t\tparam = param[pos + 1:]\n\t\t\tparams = param.split('&')\n\t\t\tfor param in params:\n\t\t\t\tpart = param.split('=', 1)\n\t\t\t\tif len(part) == 2:\n\t\t\t\t\tif part[0] in ['obfsparam']:\n\t\t\t\t\t\tparams_dict[part[0]] = to_str(b64decode(to_bytes(part[1])))\n\t\t\t\t\telse:\n\t\t\t\t\t\tparams_dict[part[0]] = part[1]\n\n\t\tdatas = link.split(':')\n\t\tif len(datas) == 6:\n\t\t\thost = datas[0]\n\t\t\tport = int(datas[1])\n\t\t\tprotocol = datas[2]\n\t\t\tmethod = datas[3]\n\t\t\tobfs = datas[4]\n\t\t\tpasswd = to_str(b64decode(to_bytes(datas[5])))\n\n\t\t\tresult = {}\n\t\t\tresult['server'] = host\n\t\t\tresult['server_port'] = port\n\t\t\tresult['local_address'] = '0.0.0.0'\n\t\t\tresult['local_port'] = 1080\n\t\t\tresult['password'] = passwd\n\t\t\tresult['protocol'] = protocol\n\t\t\tresult['method'] = method\n\t\t\tresult['obfs'] = obfs\n\t\t\tresult['timeout'] = 300\n\t\t\tif 'obfsparam' in params_dict:\n\t\t\t\tresult['obfs_param'] = params_dict['obfsparam']\n\t\t\toutput = json.dumps(result, sort_keys=True, indent=4, separators=(',', ': '))\n\t\t\tprint(output)\n\ndef main():\n\tlink = sys.argv[1]\n\tfromlink(link)\n\nif __name__ == '__main__':\n\tmain()\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tls1.0_session.c",
    "content": "#include <stdlib.h>\n#include \"tls1.0_session.h\"\n#include \"encrypt.h\"\n\ntypedef struct tls10_session_auth_global_data {\n    uint8_t local_client_id[32];\n}tls10_session_auth_global_data;\n\ntypedef struct tls10_session_auth_local_data {\n    int has_sent_header;\n    int has_recv_header;\n    char *send_buffer;\n    int send_buffer_size;\n}tls10_session_auth_local_data;\n\nvoid tls10_session_auth_local_data_init(tls10_session_auth_local_data* local) {\n    local->has_sent_header = 0;\n    local->has_recv_header = 0;\n    local->send_buffer = malloc(0);\n    local->send_buffer_size = 0;\n}\n\nvoid * tls10_session_auth_init_data() {\n    tls10_session_auth_global_data *global = (tls10_session_auth_global_data*)malloc(sizeof(tls10_session_auth_global_data));\n    rand_bytes(global->local_client_id, 32);\n    return global;\n}\n\nobfs * tls10_session_auth_new_obfs() {\n    obfs * self = new_obfs();\n    self->l_data = malloc(sizeof(tls10_session_auth_local_data));\n    tls10_session_auth_local_data_init((tls10_session_auth_local_data*)self->l_data);\n    return self;\n}\n\nvoid tls10_session_auth_dispose(obfs *self) {\n    tls10_session_auth_local_data *local = (tls10_session_auth_local_data*)self->l_data;\n    if (local->send_buffer != NULL) {\n        free(local->send_buffer);\n        local->send_buffer = NULL;\n    }\n    free(local);\n    dispose_obfs(self);\n}\n\nint tls10_session_pack_auth_data(tls10_session_auth_global_data *global, server_info *server, char *outdata) {\n    int out_size = 32;\n    time_t t = time(NULL);\n    outdata[0] = t >> 24;\n    outdata[1] = t >> 16;\n    outdata[2] = t >> 8;\n    outdata[3] = t;\n    rand_bytes((uint8_t*)outdata + 4, 18);\n\n    uint8_t *key = (uint8_t*)malloc(server->key_len + 32);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    memcpy(key, server->key, server->key_len);\n    memcpy(key + server->key_len, global->local_client_id, 32);\n    ss_sha1_hmac_with_key(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, key, server->key_len + 32);\n    free(key);\n    memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN);\n    return out_size;\n}\n\nint tls10_session_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) {\n    char *encryptdata = *pencryptdata;\n    tls10_session_auth_local_data *local = (tls10_session_auth_local_data*)self->l_data;\n    tls10_session_auth_global_data *global = (tls10_session_auth_global_data*)self->server.g_data;\n    if (local->has_sent_header == 2) {\n        return datalength;\n    }\n    local->send_buffer = (char*)realloc(local->send_buffer, local->send_buffer_size + datalength);\n    memcpy(local->send_buffer + local->send_buffer_size, encryptdata, datalength);\n    local->send_buffer_size += datalength;\n    char * out_buffer = NULL;\n\n    if (local->has_sent_header == 0) {\n        const char * tls_data = \"\\x00\\x16\\xc0\\x2b\\xc0\\x2f\\xc0\\x0a\\xc0\\x09\\xc0\\x13\\xc0\\x14\\x00\\x33\\x00\\x39\\x00\\x2f\\x00\\x35\\x00\\x0a\\x01\\x00\\x00\\x6f\\xff\\x01\\x00\\x01\\x00\\x00\\x0a\\x00\\x08\\x00\\x06\\x00\\x17\\x00\\x18\\x00\\x19\\x00\\x0b\\x00\\x02\\x01\\x00\\x00\\x23\\x00\\x00\\x33\\x74\\x00\\x00\\x00\\x10\\x00\\x29\\x00\\x27\\x05\\x68\\x32\\x2d\\x31\\x36\\x05\\x68\\x32\\x2d\\x31\\x35\\x05\\x68\\x32\\x2d\\x31\\x34\\x02\\x68\\x32\\x08\\x73\\x70\\x64\\x79\\x2f\\x33\\x2e\\x31\\x08\\x68\\x74\\x74\\x70\\x2f\\x31\\x2e\\x31\\x00\\x05\\x00\\x05\\x01\\x00\\x00\\x00\\x00\\x00\\x0d\\x00\\x16\\x00\\x14\\x04\\x01\\x05\\x01\\x06\\x01\\x02\\x01\\x04\\x03\\x05\\x03\\x06\\x03\\x02\\x03\\x04\\x02\\x02\\x02\";\n        datalength = 11 + 32 + 1 + 32 + 139;\n        out_buffer = (char*)malloc(datalength);\n        char *pdata = out_buffer + datalength - 139;\n        int len = 139;\n        memcpy(pdata, tls_data, 139);\n        memcpy(pdata - 32, global->local_client_id, 32);\n        pdata -= 32; len += 32;\n        pdata[-1] = 0x20;\n        pdata -= 1; len += 1;\n        tls10_session_pack_auth_data(global, &self->server, pdata - 32);\n        pdata -= 32; len += 32;\n        pdata[-1] = 0x1;\n        pdata[-2] = 0x3; // tls version\n        pdata -= 2; len += 2;\n        pdata[-1] = len;\n        pdata[-2] = len >> 8;\n        pdata[-3] = 0;\n        pdata[-4] = 1;\n        pdata -= 4; len += 4;\n\n        pdata[-1] = len;\n        pdata[-2] = len >> 8;\n        pdata -= 2; len += 2;\n        pdata[-1] = 0x1;\n        pdata[-2] = 0x3; // tls version\n        pdata -= 2; len += 2;\n        pdata[-1] = 0x16; // tls handshake\n        pdata -= 1; len += 1;\n\n        local->has_sent_header = 1;\n    } else if (datalength == 0) {\n        datalength = local->send_buffer_size + 43;\n        out_buffer = (char*)malloc(datalength);\n        char *pdata = out_buffer;\n        memcpy(pdata, \"\\x14\\x03\\x01\\x00\\x01\\x01\", 6);\n        pdata += 6;\n        memcpy(pdata, \"\\x16\\x03\\x01\\x00\\x20\", 5);\n        pdata += 5;\n        rand_bytes((uint8_t*)pdata, 22);\n        pdata += 22;\n\n        uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32);\n        char hash[ONETIMEAUTH_BYTES * 2];\n        memcpy(key, self->server.key, self->server.key_len);\n        memcpy(key + self->server.key_len, global->local_client_id, 32);\n        ss_sha1_hmac_with_key(hash, out_buffer, pdata - out_buffer, key, self->server.key_len + 32);\n        free(key);\n        memcpy(pdata, hash, OBFS_HMAC_SHA1_LEN);\n\n        pdata += OBFS_HMAC_SHA1_LEN;\n        memcpy(pdata, local->send_buffer, local->send_buffer_size);\n        free(local->send_buffer);\n        local->send_buffer = NULL;\n\n        local->has_sent_header = 2;\n    } else {\n        return 0;\n    }\n    if (*capacity < datalength) {\n        *pencryptdata = (char*)realloc(*pencryptdata, *capacity = datalength * 2);\n        encryptdata = *pencryptdata;\n    }\n    memmove(encryptdata, out_buffer, datalength);\n    free(out_buffer);\n    return datalength;\n}\n\nint tls10_session_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) {\n    char *encryptdata = *pencryptdata;\n    tls10_session_auth_local_data *local = (tls10_session_auth_local_data*)self->l_data;\n    tls10_session_auth_global_data *global = (tls10_session_auth_global_data*)self->server.g_data;\n\n    *needsendback = 0;\n    if (local->has_recv_header) {\n        return datalength;\n    }\n    if (datalength < 11 + 32 + 1 + 32) {\n        return -1;\n    }\n\n    uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    memcpy(key, self->server.key, self->server.key_len);\n    memcpy(key + self->server.key_len, global->local_client_id, 32);\n    ss_sha1_hmac_with_key(hash, encryptdata + 11, 22, key, self->server.key_len + 32);\n    free(key);\n\n    if (memcmp(encryptdata + 33, hash, OBFS_HMAC_SHA1_LEN)) {\n        return -1;\n    }\n\n    local->has_recv_header = 1;\n    *needsendback = 1;\n    return 0;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tls1.0_session.h",
    "content": "/*\n * http_simple.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _TLS1_0_SESSION_H\n#define _TLS1_0_SESSION_H\n\n#include <obfs.h>\n\nvoid * tls10_session_auth_init_data();\nobfs * tls10_session_auth_new_obfs();\nvoid tls10_session_auth_dispose(obfs *self);\n\nint tls10_session_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity);\nint tls10_session_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback);\n\n#endif // _TLS1_0_SESSION_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tls1.2_ticket.c",
    "content": "#include <stdlib.h>\n#include \"tls1.2_ticket.h\"\n#include \"encrypt.h\"\n\ntypedef struct tls12_ticket_auth_global_data {\n    uint8_t local_client_id[32];\n}tls12_ticket_auth_global_data;\n\ntypedef struct tls12_ticket_auth_local_data {\n    int handshake_status;\n    char *send_buffer;\n    int send_buffer_size;\n    char *recv_buffer;\n    int recv_buffer_size;\n}tls12_ticket_auth_local_data;\n\nvoid tls12_ticket_auth_local_data_init(tls12_ticket_auth_local_data* local) {\n    local->handshake_status = 0;\n    local->send_buffer = malloc(0);\n    local->send_buffer_size = 0;\n    local->recv_buffer = malloc(0);\n    local->recv_buffer_size = 0;\n}\n\nvoid * tls12_ticket_auth_init_data() {\n    tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)malloc(sizeof(tls12_ticket_auth_global_data));\n    rand_bytes(global->local_client_id, 32);\n    return global;\n}\n\nobfs * tls12_ticket_auth_new_obfs() {\n    obfs * self = new_obfs();\n    self->l_data = malloc(sizeof(tls12_ticket_auth_local_data));\n    tls12_ticket_auth_local_data_init((tls12_ticket_auth_local_data*)self->l_data);\n    return self;\n}\n\nvoid tls12_ticket_auth_dispose(obfs *self) {\n    tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data;\n    if (local->send_buffer != NULL) {\n        free(local->send_buffer);\n        local->send_buffer = NULL;\n    }\n    if (local->recv_buffer != NULL) {\n        free(local->recv_buffer);\n        local->recv_buffer = NULL;\n    }\n    free(local);\n    dispose_obfs(self);\n}\n\nint tls12_ticket_pack_auth_data(tls12_ticket_auth_global_data *global, server_info *server, char *outdata) {\n    int out_size = 32;\n    time_t t = time(NULL);\n    outdata[0] = t >> 24;\n    outdata[1] = t >> 16;\n    outdata[2] = t >> 8;\n    outdata[3] = t;\n    rand_bytes((uint8_t*)outdata + 4, 18);\n\n    uint8_t *key = (uint8_t*)malloc(server->key_len + 32);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    memcpy(key, server->key, server->key_len);\n    memcpy(key + server->key_len, global->local_client_id, 32);\n    ss_sha1_hmac_with_key(hash, outdata, out_size - OBFS_HMAC_SHA1_LEN, key, server->key_len + 32);\n    free(key);\n    memcpy(outdata + out_size - OBFS_HMAC_SHA1_LEN, hash, OBFS_HMAC_SHA1_LEN);\n    return out_size;\n}\n\nint tls12_ticket_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity) {\n    char *encryptdata = *pencryptdata;\n    tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data;\n    tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data;\n    char * out_buffer = NULL;\n\n    if (local->handshake_status == 8) {\n        if (*capacity < datalength + 5) {\n            *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (datalength + 5) * 2);\n            encryptdata = *pencryptdata;\n        }\n        memmove(encryptdata + 5, encryptdata, datalength);\n        encryptdata[0] = 0x17;\n        encryptdata[1] = 0x3;\n        encryptdata[2] = 0x3;\n        encryptdata[3] = datalength >> 8;\n        encryptdata[4] = datalength;\n        return datalength + 5;\n    }\n    local->send_buffer = (char*)realloc(local->send_buffer, local->send_buffer_size + datalength + 5);\n    memcpy(local->send_buffer + local->send_buffer_size + 5, encryptdata, datalength);\n    local->send_buffer[local->send_buffer_size] = 0x17;\n    local->send_buffer[local->send_buffer_size + 1] = 0x3;\n    local->send_buffer[local->send_buffer_size + 2] = 0x3;\n    local->send_buffer[local->send_buffer_size + 3] = datalength >> 8;\n    local->send_buffer[local->send_buffer_size + 4] = datalength;\n    local->send_buffer_size += datalength + 5;\n\n    if (local->handshake_status == 0) {\n#define CSTR_DECL(name, len, str) const char* name = str; const int len = sizeof(str) - 1;\n        CSTR_DECL(tls_data0, tls_data0_len, \"\\x00\\x1c\\xc0\\x2b\\xc0\\x2f\\xcc\\xa9\\xcc\\xa8\\xcc\\x14\\xcc\\x13\\xc0\\x0a\\xc0\\x14\\xc0\\x09\\xc0\\x13\\x00\\x9c\\x00\\x35\\x00\\x2f\\x00\\x0a\\x01\\x00\"\n                );\n        CSTR_DECL(tls_data1, tls_data1_len, \"\\xff\\x01\\x00\\x01\\x00\"\n                );\n        CSTR_DECL(tls_data2, tls_data2_len, \"\\x00\\x17\\x00\\x00\\x00\\x23\\x00\\xd0\");\n        CSTR_DECL(tls_data3, tls_data3_len, \"\\x00\\x0d\\x00\\x16\\x00\\x14\\x06\\x01\\x06\\x03\\x05\\x01\\x05\\x03\\x04\\x01\\x04\\x03\\x03\\x01\\x03\\x03\\x02\\x01\\x02\\x03\\x00\\x05\\x00\\x05\\x01\\x00\\x00\\x00\\x00\\x00\\x12\\x00\\x00\\x75\\x50\\x00\\x00\\x00\\x0b\\x00\\x02\\x01\\x00\\x00\\x0a\\x00\\x06\\x00\\x04\\x00\\x17\\x00\\x18\"\n                //\"00150066000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" // padding\n                );\n        uint8_t tls_data[2048];\n        int tls_data_len = 0;\n        memcpy(tls_data, tls_data1, tls_data1_len);\n        tls_data_len += tls_data1_len;\n\n        char hosts[1024];\n        char * phost[128];\n        int host_num = 0;\n        int pos;\n\n        char sni[256] = {0};\n        if (self->server.param && strlen(self->server.param) == 0)\n            self->server.param = NULL;\n        strncpy(hosts, self->server.param ? self->server.param : self->server.host, sizeof hosts);\n        phost[host_num++] = hosts;\n        for (pos = 0; hosts[pos]; ++pos) {\n            if (hosts[pos] == ',') {\n                phost[host_num++] = &hosts[pos + 1];\n            }\n        }\n        host_num = xorshift128plus() % host_num;\n\n        sprintf(sni, \"%s\", phost[host_num]);\n        int sni_len = strlen(sni);\n        if (sni_len > 0 && sni[sni_len - 1] >= '0' && sni[sni_len - 1] <= '9')\n            sni_len = 0;\n        tls_data[tls_data_len] = '\\0';\n        tls_data[tls_data_len + 1] = '\\0';\n        tls_data[tls_data_len + 2] = (sni_len + 5) >> 8;\n        tls_data[tls_data_len + 3] = (sni_len + 5);\n        tls_data[tls_data_len + 4] = (sni_len + 3) >> 8;\n        tls_data[tls_data_len + 5] = (sni_len + 3);\n        tls_data[tls_data_len + 6] = '\\0';\n        tls_data[tls_data_len + 7] = sni_len >> 8;\n        tls_data[tls_data_len + 8] = sni_len;\n        memcpy(tls_data + tls_data_len + 9, sni, sni_len);\n        tls_data_len += 9 + sni_len;\n        memcpy(tls_data + tls_data_len, tls_data2, tls_data2_len);\n        tls_data_len += tls_data2_len;\n        rand_bytes(tls_data + tls_data_len, 208);\n        tls_data_len += 208;\n        memcpy(tls_data + tls_data_len, tls_data3, tls_data3_len);\n        tls_data_len += tls_data3_len;\n\n        datalength = 11 + 32 + 1 + 32 + tls_data0_len + 2 + tls_data_len;\n        out_buffer = (char*)malloc(datalength);\n        char *pdata = out_buffer + datalength - tls_data_len;\n        int len = tls_data_len;\n        memcpy(pdata, tls_data, tls_data_len);\n        pdata[-1] = tls_data_len;\n        pdata[-2] = tls_data_len >> 8;\n        pdata -= 2; len += 2;\n        memcpy(pdata - tls_data0_len, tls_data0, tls_data0_len);\n        pdata -= tls_data0_len; len += tls_data0_len;\n        memcpy(pdata - 32, global->local_client_id, 32);\n        pdata -= 32; len += 32;\n        pdata[-1] = 0x20;\n        pdata -= 1; len += 1;\n        tls12_ticket_pack_auth_data(global, &self->server, pdata - 32);\n        pdata -= 32; len += 32;\n        pdata[-1] = 0x3;\n        pdata[-2] = 0x3; // tls version\n        pdata -= 2; len += 2;\n        pdata[-1] = len;\n        pdata[-2] = len >> 8;\n        pdata[-3] = 0;\n        pdata[-4] = 1;\n        pdata -= 4; len += 4;\n\n        pdata[-1] = len;\n        pdata[-2] = len >> 8;\n        pdata -= 2; len += 2;\n        pdata[-1] = 0x1;\n        pdata[-2] = 0x3; // tls version\n        pdata -= 2; len += 2;\n        pdata[-1] = 0x16; // tls handshake\n        pdata -= 1; len += 1;\n\n        local->handshake_status = 1;\n    } else if (datalength == 0) {\n        datalength = local->send_buffer_size + 43;\n        out_buffer = (char*)malloc(datalength);\n        char *pdata = out_buffer;\n        memcpy(pdata, \"\\x14\\x03\\x03\\x00\\x01\\x01\", 6);\n        pdata += 6;\n        memcpy(pdata, \"\\x16\\x03\\x03\\x00\\x20\", 5);\n        pdata += 5;\n        rand_bytes((uint8_t*)pdata, 22);\n        pdata += 22;\n\n        uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32);\n        char hash[ONETIMEAUTH_BYTES * 2];\n        memcpy(key, self->server.key, self->server.key_len);\n        memcpy(key + self->server.key_len, global->local_client_id, 32);\n        ss_sha1_hmac_with_key(hash, out_buffer, pdata - out_buffer, key, self->server.key_len + 32);\n        free(key);\n        memcpy(pdata, hash, OBFS_HMAC_SHA1_LEN);\n\n        pdata += OBFS_HMAC_SHA1_LEN;\n        memcpy(pdata, local->send_buffer, local->send_buffer_size);\n        free(local->send_buffer);\n        local->send_buffer = NULL;\n\n        local->handshake_status = 8;\n    } else {\n        return 0;\n    }\n    if (*capacity < datalength) {\n        *pencryptdata = (char*)realloc(*pencryptdata, *capacity = datalength * 2);\n        encryptdata = *pencryptdata;\n    }\n    memmove(encryptdata, out_buffer, datalength);\n    free(out_buffer);\n    return datalength;\n}\n\nint tls12_ticket_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback) {\n    char *encryptdata = *pencryptdata;\n    tls12_ticket_auth_local_data *local = (tls12_ticket_auth_local_data*)self->l_data;\n    tls12_ticket_auth_global_data *global = (tls12_ticket_auth_global_data*)self->server.g_data;\n\n    *needsendback = 0;\n    if (local->handshake_status == 8) {\n        local->recv_buffer_size += datalength;\n        local->recv_buffer = (char*)realloc(local->recv_buffer, local->recv_buffer_size);\n        memcpy(local->recv_buffer + local->recv_buffer_size - datalength, encryptdata, datalength);\n        datalength = 0;\n        while (local->recv_buffer_size > 5) {\n            if (local->recv_buffer[0] != 0x17)\n                return -1;\n            int size = ((int)(unsigned char)local->recv_buffer[3] << 8) + (unsigned char)local->recv_buffer[4];\n            if (size + 5 > local->recv_buffer_size)\n                break;\n            if (*capacity < datalength + size) {\n                *pencryptdata = (char*)realloc(*pencryptdata, *capacity = (datalength + size) * 2);\n                encryptdata = *pencryptdata;\n            }\n            memcpy(encryptdata + datalength, local->recv_buffer + 5, size);\n            datalength += size;\n            local->recv_buffer_size -= 5 + size;\n            memmove(local->recv_buffer, local->recv_buffer + 5 + size, local->recv_buffer_size);\n        }\n        return datalength;\n    }\n    if (datalength < 11 + 32 + 1 + 32) {\n        return -1;\n    }\n\n    uint8_t *key = (uint8_t*)malloc(self->server.key_len + 32);\n    char hash[ONETIMEAUTH_BYTES * 2];\n    memcpy(key, self->server.key, self->server.key_len);\n    memcpy(key + self->server.key_len, global->local_client_id, 32);\n    ss_sha1_hmac_with_key(hash, encryptdata + 11, 22, key, self->server.key_len + 32);\n    free(key);\n\n    if (memcmp(encryptdata + 33, hash, OBFS_HMAC_SHA1_LEN)) {\n        return -1;\n    }\n\n    *needsendback = 1;\n    return 0;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tls1.2_ticket.h",
    "content": "/*\n * http_simple.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _TLS1_2_TICKET_H\n#define _TLS1_2_TICKET_H\n\n#include \"obfs.h\"\n\nvoid * tls12_ticket_auth_init_data();\nobfs * tls12_ticket_auth_new_obfs();\nvoid tls12_ticket_auth_dispose(obfs *self);\n\nint tls12_ticket_auth_client_encode(obfs *self, char **pencryptdata, int datalength, size_t* capacity);\nint tls12_ticket_auth_client_decode(obfs *self, char **pencryptdata, int datalength, size_t* capacity, int *needsendback);\n\n#endif // _TLS1_2_TICKET_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tunnel.c",
    "content": "/*\n * tunnel.c - Setup a local port forwarding through remote shadowsocks server\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <unistd.h>\n#include <getopt.h>\n\n#ifndef __MINGW32__\n#include <errno.h>\n#include <arpa/inet.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#endif\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n#include <libcork/core.h>\n#include <udns.h>\n\n#include \"netutils.h\"\n#include \"utils.h\"\n#include \"tunnel.h\"\n\n#ifndef EAGAIN\n#define EAGAIN EWOULDBLOCK\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK EAGAIN\n#endif\n\n#ifndef BUF_SIZE\n#define BUF_SIZE 2048\n#endif\n\n#include \"obfs.c\" // I don't want to modify makefile\n\nstatic void accept_cb(EV_P_ ev_io *w, int revents);\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void server_send_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents);\n\nstatic remote_t *new_remote(int fd, int timeout);\nstatic server_t *new_server(int fd, int method);\n\nstatic void free_remote(remote_t *remote);\nstatic void close_and_free_remote(EV_P_ remote_t *remote);\nstatic void free_server(server_t *server);\nstatic void close_and_free_server(EV_P_ server_t *server);\n\n#ifdef ANDROID\nint vpn = 0;\nchar *prefix;\n#endif\n\nint verbose = 0;\nint keep_resolving = 1;\n\nstatic int mode = TCP_ONLY;\nstatic int auth = 0;\n#ifdef HAVE_SETRLIMIT\nstatic int nofile = 0;\n#endif\n\n#ifndef __MINGW32__\nstatic int setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\n#endif\n\nint create_and_bind(const char *addr, const char *port)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp;\n    int s, listen_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;   /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */\n\n    s = getaddrinfo(addr, port, &hints, &result);\n    if (s != 0) {\n        LOGI(\"getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    for (rp = result; rp != NULL; rp = rp->ai_next) {\n        listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (listen_sock == -1) {\n            continue;\n        }\n\n        int opt = 1;\n        setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n        setsockopt(listen_sock, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n        int err = set_reuseport(listen_sock);\n        if (err == 0) {\n            LOGI(\"tcp port reuse enabled\");\n        }\n\n        s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"bind\");\n        }\n\n        close(listen_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"Could not bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return listen_sock;\n}\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_recv_ctx = (server_ctx_t *)w;\n    server_t *server              = server_recv_ctx->server;\n    remote_t *remote              = server->remote;\n\n    if (remote == NULL) {\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    ssize_t r = recv(server->fd, remote->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"server recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    remote->buf->len = r;\n\n    if (auth) {\n        ss_gen_hash(remote->buf, &remote->counter, server->e_ctx, BUF_SIZE);\n    }\n\n    // SSR beg\n    if (server->protocol_plugin) {\n        obfs_class *protocol_plugin = server->protocol_plugin;\n        if (protocol_plugin->client_pre_encrypt) {\n            remote->buf->len = protocol_plugin->client_pre_encrypt(server->protocol, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n        }\n    }\n    int err = ss_encrypt(remote->buf, server->e_ctx, BUF_SIZE);\n\n    if (err) {\n        LOGE(\"server invalid password or cipher\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    if (server->obfs_plugin) {\n        obfs_class *obfs_plugin = server->obfs_plugin;\n        if (obfs_plugin->client_encode) {\n            remote->buf->len = obfs_plugin->client_encode(server->obfs, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n        }\n    }\n    // SSR end\n\n    int s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            remote->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_recv_ctx->io);\n            ev_io_start(EV_A_ & remote->send_ctx->io);\n            return;\n        } else {\n            ERROR(\"send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    } else if (s < remote->buf->len) {\n        remote->buf->len -= s;\n        remote->buf->idx  = s;\n        ev_io_stop(EV_A_ & server_recv_ctx->io);\n        ev_io_start(EV_A_ & remote->send_ctx->io);\n        return;\n    }\n}\n\nstatic void server_send_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_send_ctx = (server_ctx_t *)w;\n    server_t *server              = server_send_ctx->server;\n    remote_t *remote              = server->remote;\n    if (server->buf->len == 0) {\n        // close and free\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else {\n        // has data to send\n        ssize_t s = send(server->fd, server->buf->array + server->buf->idx,\n                         server->buf->len, 0);\n        if (s == -1) {\n            if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                ERROR(\"send\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n            }\n            return;\n        } else if (s < server->buf->len) {\n            // partly sent, move memory, wait for the next time to send\n            server->buf->len -= s;\n            server->buf->idx += s;\n            return;\n        } else {\n            // all sent out, wait for reading\n            server->buf->len = 0;\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & server_send_ctx->io);\n            if (remote != NULL) {\n                ev_io_start(EV_A_ & remote->recv_ctx->io);\n            } else {\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n        }\n    }\n}\n\nstatic void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)(((void *)watcher)\n                                                - sizeof(ev_io));\n    remote_t *remote = remote_ctx->remote;\n    server_t *server = remote->server;\n\n    if (verbose) {\n        LOGI(\"TCP connection timeout\");\n    }\n\n    ev_timer_stop(EV_A_ watcher);\n\n    close_and_free_remote(EV_A_ remote);\n    close_and_free_server(EV_A_ server);\n}\n\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_recv_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_recv_ctx->remote;\n    server_t *server              = remote->server;\n\n    ssize_t r = recv(remote->fd, server->buf->array, BUF_SIZE, 0);\n\n    if (r == 0) {\n        // connection closed\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    } else if (r == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data\n            // continue to wait for recv\n            return;\n        } else {\n            ERROR(\"remote recv\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    }\n\n    server->buf->len = r;\n\n    // SSR beg\n    if (server->obfs_plugin) {\n        obfs_class *obfs_plugin = server->obfs_plugin;\n        if (obfs_plugin->client_decode) {\n            int needsendback;\n            server->buf->len = obfs_plugin->client_decode(server->obfs, &server->buf->array, server->buf->len, &server->buf->capacity, &needsendback);\n            if ((int)server->buf->len < 0) {\n                LOGE(\"client_decode\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            if (needsendback) {\n                size_t capacity = BUF_SIZE;\n                char *buf = (char*)malloc(capacity);\n                obfs_class *obfs_plugin = server->obfs_plugin;\n                if (obfs_plugin->client_encode) {\n                    int len = obfs_plugin->client_encode(server->obfs, &buf, 0, &capacity);\n                    send(remote->fd, buf, len, 0);\n                }\n                free(buf);\n            }\n        }\n    }\n    if ( server->buf->len == 0 )\n        return;\n\n    int err = ss_decrypt(server->buf, server->d_ctx, BUF_SIZE);\n\n    if (err) {\n        LOGE(\"invalid password or cipher\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    if (server->protocol_plugin) {\n        obfs_class *protocol_plugin = server->protocol_plugin;\n        if (protocol_plugin->client_post_decrypt) {\n            server->buf->len = protocol_plugin->client_post_decrypt(server->protocol, &server->buf->array, server->buf->len, &server->buf->capacity);\n            if ((int)server->buf->len < 0) {\n                LOGE(\"client_post_decrypt\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            if ( server->buf->len == 0 )\n                return;\n        }\n    }\n    // SSR end\n\n    int s = send(server->fd, server->buf->array, server->buf->len, 0);\n\n    if (s == -1) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // no data, wait for send\n            server->buf->idx = 0;\n            ev_io_stop(EV_A_ & remote_recv_ctx->io);\n            ev_io_start(EV_A_ & server->send_ctx->io);\n        } else {\n            ERROR(\"send\");\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n        }\n    } else if (s < server->buf->len) {\n        server->buf->len -= s;\n        server->buf->idx  = s;\n        ev_io_stop(EV_A_ & remote_recv_ctx->io);\n        ev_io_start(EV_A_ & server->send_ctx->io);\n    }\n\n    // Disable TCP_NODELAY after the first response are sent\n    int opt = 0;\n    setsockopt(server->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n    setsockopt(remote->fd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n}\n\nstatic void remote_send_cb(EV_P_ ev_io *w, int revents)\n{\n    remote_ctx_t *remote_send_ctx = (remote_ctx_t *)w;\n    remote_t *remote              = remote_send_ctx->remote;\n    server_t *server              = remote->server;\n\n    if (!remote_send_ctx->connected) {\n        struct sockaddr_storage addr;\n        socklen_t len = sizeof addr;\n\n        int r = getpeername(remote->fd, (struct sockaddr *)&addr, &len);\n        if (r == 0) {\n            remote_send_ctx->connected = 1;\n            ev_io_stop(EV_A_ & remote_send_ctx->io);\n            ev_timer_stop(EV_A_ & remote_send_ctx->watcher);\n\n            buffer_t ss_addr_to_send;\n            buffer_t *abuf = &ss_addr_to_send;\n            balloc(abuf, BUF_SIZE);\n\n            ss_addr_t *sa = &server->destaddr;\n            struct cork_ip ip;\n            if (cork_ip_init(&ip, sa->host) != -1) {\n                if (ip.version == 4) {\n                    // send as IPv4\n                    struct in_addr host;\n                    int host_len = sizeof(struct in_addr);\n\n                    if (dns_pton(AF_INET, sa->host, &host) == -1) {\n                        FATAL(\"IP parser error\");\n                    }\n                    abuf->array[abuf->len++] = 1;\n                    memcpy(abuf->array + abuf->len, &host, host_len);\n                    abuf->len += host_len;\n                } else if (ip.version == 6) {\n                    // send as IPv6\n                    struct in6_addr host;\n                    int host_len = sizeof(struct in6_addr);\n\n                    if (dns_pton(AF_INET6, sa->host, &host) == -1) {\n                        FATAL(\"IP parser error\");\n                    }\n                    abuf->array[abuf->len++] = 4;\n                    memcpy(abuf->array + abuf->len, &host, host_len);\n                    abuf->len += host_len;\n                } else {\n                    FATAL(\"IP parser error\");\n                }\n            } else {\n                // send as domain\n                int host_len = strlen(sa->host);\n\n                abuf->array[abuf->len++] = 3;\n                abuf->array[abuf->len++] = host_len;\n                memcpy(abuf->array + abuf->len, sa->host, host_len);\n                abuf->len += host_len;\n            }\n\n            uint16_t port = htons(atoi(sa->port));\n            memcpy(abuf->array + abuf->len, &port, 2);\n            abuf->len += 2;\n\n            if (auth) {\n                abuf->array[0] |= ONETIMEAUTH_FLAG;\n                ss_onetimeauth(abuf, server->e_ctx->evp.iv, BUF_SIZE);\n            }\n\n            // SSR beg\n            server_info _server_info;\n            if (server->obfs_plugin) {\n                server->obfs_plugin->get_server_info(server->obfs, &_server_info);\n                _server_info.head_len = get_head_size(abuf->array, abuf->len, 30);\n                server->obfs_plugin->set_server_info(server->obfs, &_server_info);\n            }\n            if (server->protocol_plugin) {\n                obfs_class *protocol_plugin = server->protocol_plugin;\n                if (protocol_plugin->client_pre_encrypt) {\n                    abuf->len = protocol_plugin->client_pre_encrypt(server->protocol, &abuf->array, abuf->len, &abuf->capacity);\n                }\n            }\n\n            if (remote->buf->len > 0) {\n                brealloc(remote->buf, remote->buf->len + abuf->len, BUF_SIZE);\n                memmove(remote->buf->array + abuf->len, remote->buf->array, remote->buf->len);\n                memcpy(remote->buf->array, abuf->array, abuf->len);\n                remote->buf->len += abuf->len;\n            } else {\n                brealloc(remote->buf, abuf->len, BUF_SIZE);\n                memcpy(remote->buf->array, abuf->array, abuf->len);\n                remote->buf->len = abuf->len;\n            }\n            bfree(abuf);\n\n            int err = ss_encrypt(remote->buf, server->e_ctx, BUF_SIZE);\n            if (err) {\n                LOGE(\"invalid password or cipher\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n\n            if (server->obfs_plugin) {\n                obfs_class *obfs_plugin = server->obfs_plugin;\n                if (obfs_plugin->client_encode) {\n                    remote->buf->len = obfs_plugin->client_encode(server->obfs, &remote->buf->array, remote->buf->len, &remote->buf->capacity);\n                }\n            }\n\n            int s = send(remote->fd, remote->buf->array, remote->buf->len, 0);\n\n            if (s < remote->buf->len) {\n                LOGE(\"failed to send addr\");\n                close_and_free_remote(EV_A_ remote);\n                close_and_free_server(EV_A_ server);\n                return;\n            }\n            remote->buf->len = 0;\n            remote->buf->idx = 0;\n            // SSR end\n\n            ev_io_start(EV_A_ & remote->recv_ctx->io);\n            ev_io_start(EV_A_ & server->recv_ctx->io);\n\n            return;\n        } else {\n            ERROR(\"getpeername\");\n            // not connected\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        }\n    } else {\n        if (remote->buf->len == 0) {\n            // close and free\n            close_and_free_remote(EV_A_ remote);\n            close_and_free_server(EV_A_ server);\n            return;\n        } else {\n            // has data to send\n            ssize_t s = send(remote->fd, remote->buf->array + remote->buf->idx,\n                             remote->buf->len, 0);\n            if (s == -1) {\n                if (errno != EAGAIN && errno != EWOULDBLOCK) {\n                    ERROR(\"send\");\n                    // close and free\n                    close_and_free_remote(EV_A_ remote);\n                    close_and_free_server(EV_A_ server);\n                }\n                return;\n            } else if (s < remote->buf->len) {\n                // partly sent, move memory, wait for the next time to send\n                remote->buf->len -= s;\n                remote->buf->idx += s;\n                return;\n            } else {\n                // all sent out, wait for reading\n                remote->buf->len = 0;\n                remote->buf->idx = 0;\n                ev_io_stop(EV_A_ & remote_send_ctx->io);\n                ev_io_start(EV_A_ & server->recv_ctx->io);\n            }\n        }\n    }\n}\n\nstatic remote_t *new_remote(int fd, int timeout)\n{\n    remote_t *remote;\n    remote = ss_malloc(sizeof(remote_t));\n\n    memset(remote, 0, sizeof(remote_t));\n\n    remote->buf                 = ss_malloc(sizeof(buffer_t));\n    remote->recv_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->send_ctx            = ss_malloc(sizeof(remote_ctx_t));\n    remote->fd                  = fd;\n    remote->recv_ctx->remote    = remote;\n    remote->recv_ctx->connected = 0;\n    remote->send_ctx->remote    = remote;\n    remote->send_ctx->connected = 0;\n\n    ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ);\n    ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE);\n    ev_timer_init(&remote->send_ctx->watcher, remote_timeout_cb,\n                  min(MAX_CONNECT_TIMEOUT, timeout), 0);\n\n    balloc(remote->buf, BUF_SIZE);\n\n    return remote;\n}\n\nstatic void free_remote(remote_t *remote)\n{\n    if (remote != NULL) {\n        if (remote->server != NULL) {\n            remote->server->remote = NULL;\n        }\n        if (remote->buf) {\n            bfree(remote->buf);\n            ss_free(remote->buf);\n        }\n        ss_free(remote->recv_ctx);\n        ss_free(remote->send_ctx);\n        ss_free(remote);\n    }\n}\n\nstatic void close_and_free_remote(EV_P_ remote_t *remote)\n{\n    if (remote != NULL) {\n        ev_timer_stop(EV_A_ & remote->send_ctx->watcher);\n        ev_io_stop(EV_A_ & remote->send_ctx->io);\n        ev_io_stop(EV_A_ & remote->recv_ctx->io);\n        close(remote->fd);\n        free_remote(remote);\n    }\n}\n\nstatic server_t *new_server(int fd, int method)\n{\n    server_t *server;\n\n    server                      = ss_malloc(sizeof(server_t));\n    server->buf                 = ss_malloc(sizeof(buffer_t));\n    server->recv_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->send_ctx            = ss_malloc(sizeof(server_ctx_t));\n    server->fd                  = fd;\n    server->recv_ctx->server    = server;\n    server->recv_ctx->connected = 0;\n    server->send_ctx->server    = server;\n    server->send_ctx->connected = 0;\n\n    if (method) {\n        server->e_ctx = ss_malloc(sizeof(struct enc_ctx));\n        server->d_ctx = ss_malloc(sizeof(struct enc_ctx));\n        enc_ctx_init(method, server->e_ctx, 1);\n        enc_ctx_init(method, server->d_ctx, 0);\n    } else {\n        server->e_ctx = NULL;\n        server->d_ctx = NULL;\n    }\n\n    balloc(server->buf, BUF_SIZE);\n\n    ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ);\n    ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE);\n\n    return server;\n}\n\nstatic void free_server(server_t *server)\n{\n    if (server != NULL) {\n        if (server->remote != NULL) {\n            server->remote->server = NULL;\n        }\n        if (server->e_ctx != NULL) {\n            cipher_context_release(&server->e_ctx->evp);\n            ss_free(server->e_ctx);\n        }\n        if (server->d_ctx != NULL) {\n            cipher_context_release(&server->d_ctx->evp);\n            ss_free(server->d_ctx);\n        }\n        if (server->buf) {\n            bfree(server->buf);\n            ss_free(server->buf);\n        }\n        // SSR beg\n        if (server->obfs_plugin) {\n            server->obfs_plugin->dispose(server->obfs);\n            server->obfs = NULL;\n            free_obfs_class(server->obfs_plugin);\n            server->obfs_plugin = NULL;\n        }\n        if (server->protocol_plugin) {\n            server->protocol_plugin->dispose(server->protocol);\n            server->protocol = NULL;\n            free_obfs_class(server->protocol_plugin);\n            server->protocol_plugin = NULL;\n        }\n        // SSR end\n        ss_free(server->recv_ctx);\n        ss_free(server->send_ctx);\n        ss_free(server);\n    }\n}\n\nstatic void close_and_free_server(EV_P_ server_t *server)\n{\n    if (server != NULL) {\n        ev_io_stop(EV_A_ & server->send_ctx->io);\n        ev_io_stop(EV_A_ & server->recv_ctx->io);\n        close(server->fd);\n        free_server(server);\n    }\n}\n\nstatic void accept_cb(EV_P_ ev_io *w, int revents)\n{\n    struct listen_ctx *listener = (struct listen_ctx *)w;\n    int serverfd                = accept(listener->fd, NULL, NULL);\n    if (serverfd == -1) {\n        ERROR(\"accept\");\n        return;\n    }\n    setnonblocking(serverfd);\n    int opt = 1;\n    setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(serverfd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    int index                    = rand() % listener->remote_num;\n    struct sockaddr *remote_addr = listener->remote_addr[index];\n\n    int remotefd = socket(remote_addr->sa_family, SOCK_STREAM, IPPROTO_TCP);\n    if (remotefd == -1) {\n        ERROR(\"socket\");\n        return;\n    }\n\n#ifdef ANDROID\n    if (vpn) {\n        int not_protect = 0;\n        if (remote_addr->sa_family == AF_INET) {\n            struct sockaddr_in *s = (struct sockaddr_in *)remote_addr;\n            if (s->sin_addr.s_addr == inet_addr(\"127.0.0.1\")) not_protect = 1;\n        }\n        if (!not_protect) {\n            if (protect_socket(remotefd) == -1) {\n                ERROR(\"protect_socket\");\n                close(remotefd);\n                return;\n            }\n        }\n    }\n#endif\n\n    setsockopt(remotefd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n    setsockopt(remotefd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n#endif\n\n    if (listener->mptcp == 1) {\n        int err = setsockopt(remotefd, SOL_TCP, MPTCP_ENABLED, &opt, sizeof(opt));\n        if (err == -1) {\n            ERROR(\"failed to enable multipath TCP\");\n        }\n    }\n\n    // Setup\n    setnonblocking(remotefd);\n#ifdef SET_INTERFACE\n    if (listener->iface) {\n        if (setinterface(remotefd, listener->iface) == -1)\n            ERROR(\"setinterface\");\n    }\n#endif\n\n    server_t *server = new_server(serverfd, listener->method);\n    remote_t *remote = new_remote(remotefd, listener->timeout);\n    server->destaddr = listener->tunnel_addr;\n    server->remote   = remote;\n    remote->server   = server;\n\n    int r = connect(remotefd, remote_addr, get_sockaddr_len(remote_addr));\n\n    if (r == -1 && errno != CONNECT_IN_PROGRESS) {\n        ERROR(\"connect\");\n        close_and_free_remote(EV_A_ remote);\n        close_and_free_server(EV_A_ server);\n        return;\n    }\n\n    // SSR beg\n    remote->remote_index = index;\n    server->obfs_plugin = new_obfs_class(listener->obfs_name);\n    if (server->obfs_plugin) {\n        server->obfs = server->obfs_plugin->new_obfs();\n    }\n    server->protocol_plugin = new_obfs_class(listener->protocol_name);\n    if (server->protocol_plugin) {\n        server->protocol = server->protocol_plugin->new_obfs();\n    }\n    if (listener->list_obfs_global[remote->remote_index] == NULL && server->obfs_plugin) {\n        listener->list_obfs_global[remote->remote_index] = server->obfs_plugin->init_data();\n    }\n    if (listener->list_protocol_global[remote->remote_index] == NULL && server->protocol_plugin) {\n        listener->list_protocol_global[remote->remote_index] = server->protocol_plugin->init_data();\n    }\n    ss_addr_t *sa = &server->destaddr;\n    server_info _server_info;\n    struct cork_ip ip;\n    cork_ip_init(&ip, sa->host);\n    memset(&_server_info, 0, sizeof(server_info));\n    strcpy(_server_info.host, inet_ntoa(((struct sockaddr_in*)remote_addr)->sin_addr));\n    _server_info.port = ((struct sockaddr_in*)remote_addr)->sin_port;\n    _server_info.port = _server_info.port >> 8 | _server_info.port << 8;\n    _server_info.param = listener->obfs_param;\n    _server_info.g_data = listener->list_obfs_global[remote->remote_index];\n    _server_info.head_len = (ip.version == 6 ? 19 : 7);\n    _server_info.iv = server->e_ctx->evp.iv;\n    _server_info.iv_len = enc_get_iv_len();\n    _server_info.key = enc_get_key();\n    _server_info.key_len = enc_get_key_len();\n    _server_info.tcp_mss = 1460;\n\n    if (server->obfs_plugin)\n        server->obfs_plugin->set_server_info(server->obfs, &_server_info);\n\n    _server_info.param = NULL;\n    _server_info.g_data = listener->list_protocol_global[remote->remote_index];\n\n    if (server->protocol_plugin)\n        server->protocol_plugin->set_server_info(server->protocol, &_server_info);\n    // SSR end\n\n    if (r == 0) {\n        if (verbose) LOGI(\"connected immediately\");\n        remote_send_cb(EV_A_ & remote->send_ctx->io, 0);\n    } else {\n        // listen to remote connected event\n        ev_io_start(EV_A_ & remote->send_ctx->io);\n        ev_timer_start(EV_A_ & remote->send_ctx->watcher);\n    }\n}\n\nvoid signal_cb(int dummy) {\n    keep_resolving = 0;\n    exit(-1);\n}\n\nint main(int argc, char **argv)\n{\n    srand(time(NULL));\n\n    int i, c;\n    int pid_flags    = 0;\n    int mptcp        = 0;\n    int mtu          = 0;\n    char *user       = NULL;\n    char *local_port = NULL;\n    char *local_addr = NULL;\n    char *password   = NULL;\n    char *timeout    = NULL;\n    char *protocol = NULL; // SSR\n    char *method = NULL;\n    char *obfs = NULL; // SSR\n    char *obfs_param = NULL; // SSR\n    char *pid_path   = NULL;\n    char *conf_path  = NULL;\n    char *iface      = NULL;\n\n    int remote_num = 0;\n    ss_addr_t remote_addr[MAX_REMOTE_NUM];\n    char *remote_port = NULL;\n\n    ss_addr_t tunnel_addr = { .host = NULL, .port = NULL };\n    char *tunnel_addr_str = NULL;\n\n    int option_index                    = 0;\n    static struct option long_options[] = {\n        { \"mtu\",  required_argument, 0, 0 },\n        { \"mptcp\",no_argument,       0, 0 },\n        { \"help\", no_argument,       0, 0 },\n        {      0,           0,       0, 0 }\n    };\n\n    opterr = 0;\n\n    USE_TTY();\n\n#ifdef ANDROID\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:i:c:b:L:a:n:P:O:o:G:g:huUvVA\", // SSR\n                            long_options, &option_index)) != -1) {\n#else\n    while ((c = getopt_long(argc, argv, \"f:s:p:l:k:t:m:i:c:b:L:a:n:O:o:G:g:huUvA\", // SSR\n                            long_options, &option_index)) != -1) {\n#endif\n        switch (c) {\n        case 0:\n            if (option_index == 0) {\n                mtu = atoi(optarg);\n                LOGI(\"set MTU to %d\", mtu);\n            } else if (option_index == 1) {\n                mptcp = 1;\n                LOGI(\"enable multipath TCP\");\n            } else if (option_index == 2) {\n                usage();\n                exit(EXIT_SUCCESS);\n            }\n            break;\n        case 's':\n            if (remote_num < MAX_REMOTE_NUM) {\n                remote_addr[remote_num].host   = optarg;\n                remote_addr[remote_num++].port = NULL;\n            }\n            break;\n        case 'p':\n            remote_port = optarg;\n            break;\n        case 'l':\n            local_port = optarg;\n            break;\n        case 'k':\n            password = optarg;\n            break;\n        case 'f':\n            pid_flags = 1;\n            pid_path  = optarg;\n            break;\n        case 't':\n            timeout = optarg;\n            break;\n        // SSR beg\n        case 'O':\n            protocol = optarg;\n            break;\n        case 'm':\n            method = optarg;\n            break;\n        case 'o':\n            obfs = optarg;\n            break;\n        case 'G':\n            break;\n        case 'g':\n            obfs_param = optarg;\n            break;\n        // SSR end\n        case 'c':\n            conf_path = optarg;\n            break;\n        case 'i':\n            iface = optarg;\n            break;\n        case 'b':\n            local_addr = optarg;\n            break;\n        case 'u':\n            mode = TCP_AND_UDP;\n            break;\n        case 'U':\n            mode = UDP_ONLY;\n            break;\n        case 'L':\n            tunnel_addr_str = optarg;\n            break;\n        case 'a':\n            user = optarg;\n            break;\n#ifdef HAVE_SETRLIMIT\n        case 'n':\n            nofile = atoi(optarg);\n            break;\n#endif\n        case 'v':\n            verbose = 1;\n            break;\n        case 'h':\n            usage();\n            exit(EXIT_SUCCESS);\n        case 'A':\n            auth = 1;\n            break;\n#ifdef ANDROID\n        case 'V':\n            vpn = 1;\n            break;\n        case 'P':\n            prefix = optarg;\n            break;\n#endif\n        case '?':\n            // The option character is not recognized.\n            opterr = 1;\n            break;\n        }\n    }\n\n    if (opterr) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (argc == 1) {\n        if (conf_path == NULL) {\n            conf_path = DEFAULT_CONF_PATH;\n        }\n    }\n\n    if (conf_path != NULL) {\n        jconf_t *conf = read_jconf(conf_path);\n        if (remote_num == 0) {\n            remote_num = conf->remote_num;\n            for (i = 0; i < remote_num; i++)\n                remote_addr[i] = conf->remote_addr[i];\n        }\n        if (remote_port == NULL) {\n            remote_port = conf->remote_port;\n        }\n        if (local_addr == NULL) {\n            local_addr = conf->local_addr;\n        }\n        if (local_port == NULL) {\n            local_port = conf->local_port;\n        }\n        if (password == NULL) {\n            password = conf->password;\n        }\n        // SSR beg\n        if (protocol == NULL) {\n            protocol = conf->protocol;\n            LOGI(\"protocol %s\", protocol);\n        }\n        if (method == NULL) {\n            method = conf->method;\n            LOGI(\"method %s\", method);\n        }\n        if (obfs == NULL) {\n            obfs = conf->obfs;\n            LOGI(\"obfs %s\", obfs);\n        }\n        if (obfs_param == NULL) {\n            obfs_param = conf->obfs_param;\n            LOGI(\"obfs_param %s\", obfs_param);\n        }\n        // SSR end\n        if (timeout == NULL) {\n            timeout = conf->timeout;\n        }\n        if (auth == 0) {\n            auth = conf->auth;\n        }\n        if (tunnel_addr_str == NULL) {\n            tunnel_addr_str = conf->tunnel_address;\n        }\n        if (mode == TCP_ONLY) {\n            mode = conf->mode;\n        }\n        if (mtu == 0) {\n            mtu = conf->mtu;\n        }\n        if (mptcp == 0) {\n            mptcp = conf->mptcp;\n        }\n#ifdef HAVE_SETRLIMIT\n        if (nofile == 0) {\n            nofile = conf->nofile;\n        }\n        /*\n         * no need to check the return value here since we will show\n         * the user an error message if setrlimit(2) fails\n         */\n        if (nofile > 1024) {\n            if (verbose) {\n                LOGI(\"setting NOFILE to %d\", nofile);\n            }\n            set_nofile(nofile);\n        }\n#endif\n    }\n    if (protocol && strcmp(protocol, \"verify_sha1\") == 0) {\n        auth = 1;\n        protocol = NULL;\n    }\n\n    if (remote_num == 0 || remote_port == NULL || tunnel_addr_str == NULL ||\n        local_port == NULL || password == NULL) {\n        usage();\n        exit(EXIT_FAILURE);\n    }\n\n    if (timeout == NULL) {\n        timeout = \"60\";\n    }\n\n    if (local_addr == NULL) {\n        local_addr = \"127.0.0.1\";\n    }\n\n    if (pid_flags) {\n        USE_SYSLOG(argv[0]);\n        daemonize(pid_path);\n    }\n\n    if (auth) {\n        LOGI(\"onetime authentication enabled\");\n    }\n\n    // parse tunnel addr\n    parse_addr(tunnel_addr_str, &tunnel_addr);\n\n    if (tunnel_addr.port == NULL) {\n        FATAL(\"tunnel port is not defined\");\n    }\n\n#ifdef __MINGW32__\n    winsock_init();\n#else\n    // ignore SIGPIPE\n    signal(SIGPIPE, SIG_IGN);\n    signal(SIGABRT, SIG_IGN);\n    signal(SIGINT,  signal_cb);\n    signal(SIGTERM, signal_cb);\n#endif\n\n    // Setup keys\n    LOGI(\"initializing ciphers... %s\", method);\n    int m = enc_init(password, method);\n\n    // Setup proxy context\n    struct listen_ctx listen_ctx;\n    listen_ctx.tunnel_addr = tunnel_addr;\n    listen_ctx.remote_num  = remote_num;\n    listen_ctx.remote_addr = ss_malloc(sizeof(struct sockaddr *) * remote_num);\n    for (i = 0; i < remote_num; i++) {\n        char *host = remote_addr[i].host;\n        char *port = remote_addr[i].port == NULL ? remote_port :\n                     remote_addr[i].port;\n        struct sockaddr_storage *storage = ss_malloc(sizeof(struct sockaddr_storage));\n        memset(storage, 0, sizeof(struct sockaddr_storage));\n        if (get_sockaddr(host, port, storage, 1) == -1) {\n            FATAL(\"failed to resolve the provided hostname\");\n        }\n        listen_ctx.remote_addr[i] = (struct sockaddr *)storage;\n    }\n    listen_ctx.timeout = atoi(timeout);\n    listen_ctx.iface   = iface;\n    // SSR beg\n    listen_ctx.protocol_name = protocol;\n    listen_ctx.method = m;\n    listen_ctx.obfs_name = obfs;\n    listen_ctx.obfs_param = obfs_param;\n    listen_ctx.list_protocol_global = malloc(sizeof(void *) * remote_num);\n    listen_ctx.list_obfs_global = malloc(sizeof(void *) * remote_num);\n    memset(listen_ctx.list_protocol_global, 0, sizeof(void *) * remote_num);\n    memset(listen_ctx.list_obfs_global, 0, sizeof(void *) * remote_num);\n    // SSR end\n    listen_ctx.mptcp   = mptcp;\n\n    struct ev_loop *loop = EV_DEFAULT;\n\n    if (mode != UDP_ONLY) {\n        // Setup socket\n        int listenfd;\n        listenfd = create_and_bind(local_addr, local_port);\n        if (listenfd == -1) {\n            FATAL(\"bind() error:\");\n        }\n        if (listen(listenfd, SOMAXCONN) == -1) {\n            FATAL(\"listen() error:\");\n        }\n        setnonblocking(listenfd);\n\n        listen_ctx.fd = listenfd;\n\n        ev_io_init(&listen_ctx.io, accept_cb, listenfd, EV_READ);\n        ev_io_start(loop, &listen_ctx.io);\n    }\n\n    // Setup UDP\n    if (mode != TCP_ONLY) {\n        LOGI(\"UDP relay enabled\");\n        init_udprelay(local_addr, local_port, listen_ctx.remote_addr[0],\n                      get_sockaddr_len(listen_ctx.remote_addr[0]),\n                      tunnel_addr, mtu, m, auth, listen_ctx.timeout, iface);\n    }\n\n    if (mode == UDP_ONLY) {\n        LOGI(\"TCP relay disabled\");\n    }\n\n    LOGI(\"listening at %s:%s\", local_addr, local_port);\n\n    // setuid\n    if (user != NULL) {\n        run_as(user);\n    }\n\n    ev_run(loop, 0);\n\n#ifdef __MINGW32__\n    winsock_cleanup();\n#endif\n\n    return 0;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/tunnel.h",
    "content": "/*\n * tunnel.h - Define tunnel's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _TUNNEL_H\n#define _TUNNEL_H\n\n#include <ev.h>\n#include \"encrypt.h\"\n#include \"obfs.h\"\n#include \"jconf.h\"\n\n#include \"common.h\"\n\ntypedef struct listen_ctx {\n    ev_io io;\n    ss_addr_t tunnel_addr;\n    char *iface;\n    int remote_num;\n    int method;\n    int timeout;\n    int fd;\n    int mptcp;\n    struct sockaddr **remote_addr;\n\n    // SSR\n    char *protocol_name;\n    char *obfs_name;\n    char *obfs_param;\n    void **list_protocol_global;\n    void **list_obfs_global;\n} listen_ctx_t;\n\ntypedef struct server_ctx {\n    ev_io io;\n    int connected;\n    struct server *server;\n} server_ctx_t;\n\ntypedef struct server {\n    int fd;\n    buffer_t *buf;\n    ssize_t buf_capacity;\n    struct enc_ctx *e_ctx;\n    struct enc_ctx *d_ctx;\n    struct server_ctx *recv_ctx;\n    struct server_ctx *send_ctx;\n    struct remote *remote;\n    ss_addr_t destaddr;\n\n    // SSR\n    obfs *protocol;\n    obfs *obfs;\n    obfs_class *protocol_plugin;\n    obfs_class *obfs_plugin;\n} server_t;\n\ntypedef struct remote_ctx {\n    ev_io io;\n    ev_timer watcher;\n    int connected;\n    struct remote *remote;\n} remote_ctx_t;\n\ntypedef struct remote {\n    int fd;\n    buffer_t *buf;\n    ssize_t buf_capacity;\n    struct remote_ctx *recv_ctx;\n    struct remote_ctx *send_ctx;\n    struct server *server;\n    uint32_t counter;\n\n    // SSR\n    int remote_index;\n} remote_t;\n\n#endif // _TUNNEL_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/udprelay.c",
    "content": "/*\n * udprelay.c - Setup UDP relay for both client and server\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <fcntl.h>\n#include <locale.h>\n#include <signal.h>\n#include <string.h>\n#include <strings.h>\n#include <time.h>\n#include <unistd.h>\n\n#ifndef __MINGW32__\n#include <arpa/inet.h>\n#include <errno.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <pthread.h>\n#endif\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_NET_IF_H) && defined(__linux__)\n#include <net/if.h>\n#include <sys/ioctl.h>\n#define SET_INTERFACE\n#endif\n\n#ifdef __MINGW32__\n#include \"win32.h\"\n#endif\n\n#include <libcork/core.h>\n#include <udns.h>\n\n#include \"utils.h\"\n#include \"netutils.h\"\n#include \"cache.h\"\n#include \"udprelay.h\"\n\n#ifdef MODULE_REMOTE\n#define MAX_UDP_CONN_NUM 512\n#else\n#define MAX_UDP_CONN_NUM 256\n#endif\n\n#ifdef MODULE_REMOTE\n#ifdef MODULE_\n#error \"MODULE_REMOTE and MODULE_LOCAL should not be both defined\"\n#endif\n#endif\n\n#ifndef EAGAIN\n#define EAGAIN EWOULDBLOCK\n#endif\n\n#ifndef EWOULDBLOCK\n#define EWOULDBLOCK EAGAIN\n#endif\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents);\nstatic void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents);\n\nstatic char *hash_key(const int af, const struct sockaddr_storage *addr);\n#ifdef MODULE_REMOTE\nstatic void query_resolve_cb(struct sockaddr *addr, void *data);\n#endif\nstatic void close_and_free_remote(EV_P_ remote_ctx_t *ctx);\nstatic remote_ctx_t *new_remote(int fd, server_ctx_t *server_ctx);\n\nextern int verbose;\nextern int vpn;\n#ifdef MODULE_REMOTE\nextern uint64_t tx;\nextern uint64_t rx;\n#endif\n\nstatic int packet_size                               = DEFAULT_PACKET_SIZE;\nstatic int BUF_SIZE                                  = DEFAULT_PACKET_SIZE * 2;\nstatic int server_num                                = 0;\nstatic server_ctx_t *server_ctx_list[MAX_REMOTE_NUM] = { NULL };\n\n#ifndef __MINGW32__\nstatic int setnonblocking(int fd)\n{\n    int flags;\n    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) {\n        flags = 0;\n    }\n    return fcntl(fd, F_SETFL, flags | O_NONBLOCK);\n}\n\n#endif\n\n#if defined(MODULE_REMOTE) && defined(SO_BROADCAST)\nstatic int set_broadcast(int socket_fd)\n{\n    int opt = 1;\n    return setsockopt(socket_fd, SOL_SOCKET, SO_BROADCAST, &opt, sizeof(opt));\n}\n\n#endif\n\n#ifdef SO_NOSIGPIPE\nstatic int set_nosigpipe(int socket_fd)\n{\n    int opt = 1;\n    return setsockopt(socket_fd, SOL_SOCKET, SO_NOSIGPIPE, &opt, sizeof(opt));\n}\n\n#endif\n\n#ifdef MODULE_REDIR\n\n#ifndef IP_TRANSPARENT\n#define IP_TRANSPARENT       19\n#endif\n\n#ifndef IP_RECVORIGDSTADDR\n#define IP_RECVORIGDSTADDR   20\n#endif\n\nstatic int get_dstaddr(struct msghdr *msg, struct sockaddr_storage *dstaddr)\n{\n    struct cmsghdr *cmsg;\n\n    for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) {\n        if (cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_RECVORIGDSTADDR) {\n            memcpy(dstaddr, CMSG_DATA(cmsg), sizeof(struct sockaddr_in));\n            dstaddr->ss_family = AF_INET;\n            return 0;\n        } else if (cmsg->cmsg_level == SOL_IPV6 && cmsg->cmsg_type == IP_RECVORIGDSTADDR) {\n            memcpy(dstaddr, CMSG_DATA(cmsg), sizeof(struct sockaddr_in6));\n            dstaddr->ss_family = AF_INET6;\n            return 0;\n        }\n    }\n\n    return 1;\n}\n\n#endif\n\n#define HASH_KEY_LEN sizeof(struct sockaddr_storage) + sizeof(int)\nstatic char *hash_key(const int af, const struct sockaddr_storage *addr)\n{\n    size_t addr_len = sizeof(struct sockaddr_storage);\n    static char key[HASH_KEY_LEN];\n\n    memset(key, 0, HASH_KEY_LEN);\n    memcpy(key, &af, sizeof(int));\n    memcpy(key + sizeof(int), (const uint8_t *)addr, addr_len);\n\n    return key;\n}\n\n#if defined(MODULE_REDIR) || defined(MODULE_REMOTE)\nstatic int construct_udprealy_header(const struct sockaddr_storage *in_addr,\n                                     char *addr_header)\n{\n    int addr_header_len = 0;\n    if (in_addr->ss_family == AF_INET) {\n        struct sockaddr_in *addr = (struct sockaddr_in *)in_addr;\n        size_t addr_len          = sizeof(struct in_addr);\n        addr_header[addr_header_len++] = 1;\n        memcpy(addr_header + addr_header_len, &addr->sin_addr, addr_len);\n        addr_header_len += addr_len;\n        memcpy(addr_header + addr_header_len, &addr->sin_port, 2);\n        addr_header_len += 2;\n    } else if (in_addr->ss_family == AF_INET6) {\n        struct sockaddr_in6 *addr = (struct sockaddr_in6 *)in_addr;\n        size_t addr_len           = sizeof(struct in6_addr);\n        addr_header[addr_header_len++] = 4;\n        memcpy(addr_header + addr_header_len, &addr->sin6_addr, addr_len);\n        addr_header_len += addr_len;\n        memcpy(addr_header + addr_header_len, &addr->sin6_port, 2);\n        addr_header_len += 2;\n    } else {\n        return 0;\n    }\n    return addr_header_len;\n}\n\n#endif\n\nstatic int parse_udprealy_header(const char *buf, const size_t buf_len,\n                                 int *auth, char *host, char *port,\n                                 struct sockaddr_storage *storage)\n{\n    const uint8_t atyp = *(uint8_t *)buf;\n    int offset         = 1;\n\n    if (auth != NULL) {\n        *auth |= (atyp & ONETIMEAUTH_FLAG);\n    }\n\n    // get remote addr and port\n    if ((atyp & ADDRTYPE_MASK) == 1) {\n        // IP V4\n        size_t in_addr_len = sizeof(struct in_addr);\n        if (buf_len >= in_addr_len + 3) {\n            if (storage != NULL) {\n                struct sockaddr_in *addr = (struct sockaddr_in *)storage;\n                addr->sin_family = AF_INET;\n                addr->sin_addr   = *(struct in_addr *)(buf + offset);\n                addr->sin_port   = *(uint16_t *)(buf + offset + in_addr_len);\n            }\n            if (host != NULL) {\n                dns_ntop(AF_INET, (const void *)(buf + offset),\n                         host, INET_ADDRSTRLEN);\n            }\n            offset += in_addr_len;\n        }\n    } else if ((atyp & ADDRTYPE_MASK) == 3) {\n        // Domain name\n        uint8_t name_len = *(uint8_t *)(buf + offset);\n        if (name_len + 4 <= buf_len) {\n            if (storage != NULL) {\n                char tmp[257] = { 0 };\n                struct cork_ip ip;\n                memcpy(tmp, buf + offset + 1, name_len);\n                if (cork_ip_init(&ip, tmp) != -1) {\n                    if (ip.version == 4) {\n                        struct sockaddr_in *addr = (struct sockaddr_in *)storage;\n                        dns_pton(AF_INET, tmp, &(addr->sin_addr));\n                        addr->sin_port   = *(uint16_t *)(buf + offset + 1 + name_len);\n                        addr->sin_family = AF_INET;\n                    } else if (ip.version == 6) {\n                        struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage;\n                        dns_pton(AF_INET, tmp, &(addr->sin6_addr));\n                        addr->sin6_port   = *(uint16_t *)(buf + offset + 1 + name_len);\n                        addr->sin6_family = AF_INET6;\n                    }\n                }\n            }\n            if (host != NULL) {\n                memcpy(host, buf + offset + 1, name_len);\n            }\n            offset += 1 + name_len;\n        }\n    } else if ((atyp & ADDRTYPE_MASK) == 4) {\n        // IP V6\n        size_t in6_addr_len = sizeof(struct in6_addr);\n        if (buf_len >= in6_addr_len + 3) {\n            if (storage != NULL) {\n                struct sockaddr_in6 *addr = (struct sockaddr_in6 *)storage;\n                addr->sin6_family = AF_INET6;\n                addr->sin6_addr   = *(struct in6_addr *)(buf + offset);\n                addr->sin6_port   = *(uint16_t *)(buf + offset + in6_addr_len);\n            }\n            if (host != NULL) {\n                dns_ntop(AF_INET6, (const void *)(buf + offset),\n                         host, INET6_ADDRSTRLEN);\n            }\n            offset += in6_addr_len;\n        }\n    }\n\n    if (offset == 1) {\n        LOGE(\"[udp] invalid header with addr type %d\", atyp);\n        return 0;\n    }\n\n    if (port != NULL) {\n        sprintf(port, \"%d\", ntohs(*(uint16_t *)(buf + offset)));\n    }\n    offset += 2;\n\n    return offset;\n}\n\nstatic char *get_addr_str(const struct sockaddr *sa)\n{\n    static char s[SS_ADDRSTRLEN];\n    memset(s, 0, SS_ADDRSTRLEN);\n    char addr[INET6_ADDRSTRLEN] = { 0 };\n    char port[PORTSTRLEN]       = { 0 };\n    uint16_t p;\n\n    switch (sa->sa_family) {\n    case AF_INET:\n        dns_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),\n                 addr, INET_ADDRSTRLEN);\n        p = ntohs(((struct sockaddr_in *)sa)->sin_port);\n        sprintf(port, \"%d\", p);\n        break;\n\n    case AF_INET6:\n        dns_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),\n                 addr, INET6_ADDRSTRLEN);\n        p = ntohs(((struct sockaddr_in *)sa)->sin_port);\n        sprintf(port, \"%d\", p);\n        break;\n\n    default:\n        strncpy(s, \"Unknown AF\", SS_ADDRSTRLEN);\n    }\n\n    int addr_len = strlen(addr);\n    int port_len = strlen(port);\n    memcpy(s, addr, addr_len);\n    memcpy(s + addr_len + 1, port, port_len);\n    s[addr_len] = ':';\n\n    return s;\n}\n\nint create_remote_socket(int ipv6)\n{\n    int remote_sock;\n\n    if (ipv6) {\n        // Try to bind IPv6 first\n        struct sockaddr_in6 addr;\n        memset(&addr, 0, sizeof(addr));\n        addr.sin6_family = AF_INET6;\n        addr.sin6_addr   = in6addr_any;\n        addr.sin6_port   = 0;\n        remote_sock      = socket(AF_INET6, SOCK_DGRAM, 0);\n        if (remote_sock == -1) {\n            ERROR(\"[udp] cannot create socket\");\n            return -1;\n        }\n        if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) {\n            FATAL(\"[udp] cannot bind remote\");\n            return -1;\n        }\n    } else {\n        // Or else bind to IPv4\n        struct sockaddr_in addr;\n        memset(&addr, 0, sizeof(addr));\n        addr.sin_family      = AF_INET;\n        addr.sin_addr.s_addr = INADDR_ANY;\n        addr.sin_port        = 0;\n        remote_sock          = socket(AF_INET, SOCK_DGRAM, 0);\n        if (remote_sock == -1) {\n            ERROR(\"[udp] cannot create socket\");\n            return -1;\n        }\n\n        if (bind(remote_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) {\n            FATAL(\"[udp] cannot bind remote\");\n            return -1;\n        }\n    }\n    return remote_sock;\n}\n\nint create_server_socket(const char *host, const char *port)\n{\n    struct addrinfo hints;\n    struct addrinfo *result, *rp, *ipv4v6bindall;\n    int s, server_sock;\n\n    memset(&hints, 0, sizeof(struct addrinfo));\n    hints.ai_family   = AF_UNSPEC;               /* Return IPv4 and IPv6 choices */\n    hints.ai_socktype = SOCK_DGRAM;              /* We want a UDP socket */\n    hints.ai_flags    = AI_PASSIVE | AI_ADDRCONFIG; /* For wildcard IP address */\n    hints.ai_protocol = IPPROTO_UDP;\n\n    s = getaddrinfo(host, port, &hints, &result);\n    if (s != 0) {\n        LOGE(\"[udp] getaddrinfo: %s\", gai_strerror(s));\n        return -1;\n    }\n\n    rp = result;\n\n    /*\n     * On Linux, with net.ipv6.bindv6only = 0 (the default), getaddrinfo(NULL) with\n     * AI_PASSIVE returns 0.0.0.0 and :: (in this order). AI_PASSIVE was meant to\n     * return a list of addresses to listen on, but it is impossible to listen on\n     * 0.0.0.0 and :: at the same time, if :: implies dualstack mode.\n     */\n    if (!host) {\n        ipv4v6bindall = result;\n\n        /* Loop over all address infos found until a IPV6 address is found. */\n        while (ipv4v6bindall) {\n            if (ipv4v6bindall->ai_family == AF_INET6) {\n                rp = ipv4v6bindall; /* Take first IPV6 address available */\n                break;\n            }\n            ipv4v6bindall = ipv4v6bindall->ai_next; /* Get next address info, if any */\n        }\n    }\n\n    for (/*rp = result*/; rp != NULL; rp = rp->ai_next) {\n        server_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);\n        if (server_sock == -1) {\n            continue;\n        }\n\n        if (rp->ai_family == AF_INET6) {\n            int ipv6only = host ? 1 : 0;\n            setsockopt(server_sock, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6only, sizeof(ipv6only));\n        }\n\n        int opt = 1;\n        setsockopt(server_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));\n#ifdef SO_NOSIGPIPE\n        set_nosigpipe(server_sock);\n#endif\n        int err = set_reuseport(server_sock);\n        if (err == 0) {\n            LOGI(\"udp port reuse enabled\");\n        }\n#ifdef IP_TOS\n        // Set QoS flag\n        int tos = 46;\n        setsockopt(server_sock, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));\n#endif\n\n#ifdef MODULE_REDIR\n        if (setsockopt(server_sock, SOL_IP, IP_TRANSPARENT, &opt, sizeof(opt))) {\n            ERROR(\"[udp] setsockopt IP_TRANSPARENT\");\n            exit(EXIT_FAILURE);\n        }\n        if (setsockopt(server_sock, IPPROTO_IP, IP_RECVORIGDSTADDR, &opt, sizeof(opt))) {\n            FATAL(\"[udp] setsockopt IP_RECVORIGDSTADDR\");\n        }\n#endif\n\n        s = bind(server_sock, rp->ai_addr, rp->ai_addrlen);\n        if (s == 0) {\n            /* We managed to bind successfully! */\n            break;\n        } else {\n            ERROR(\"[udp] bind\");\n        }\n\n        close(server_sock);\n    }\n\n    if (rp == NULL) {\n        LOGE(\"[udp] cannot bind\");\n        return -1;\n    }\n\n    freeaddrinfo(result);\n\n    return server_sock;\n}\n\nremote_ctx_t *new_remote(int fd, server_ctx_t *server_ctx)\n{\n    remote_ctx_t *ctx = ss_malloc(sizeof(remote_ctx_t));\n    memset(ctx, 0, sizeof(remote_ctx_t));\n\n    ctx->fd         = fd;\n    ctx->server_ctx = server_ctx;\n\n    ev_io_init(&ctx->io, remote_recv_cb, fd, EV_READ);\n    ev_timer_init(&ctx->watcher, remote_timeout_cb, server_ctx->timeout,\n                  server_ctx->timeout);\n\n    return ctx;\n}\n\nserver_ctx_t *new_server_ctx(int fd)\n{\n    server_ctx_t *ctx = ss_malloc(sizeof(server_ctx_t));\n    memset(ctx, 0, sizeof(server_ctx_t));\n\n    ctx->fd = fd;\n\n    ev_io_init(&ctx->io, server_recv_cb, fd, EV_READ);\n\n    return ctx;\n}\n\n#ifdef MODULE_REMOTE\nstruct query_ctx *new_query_ctx(char *buf, size_t len)\n{\n    struct query_ctx *ctx = ss_malloc(sizeof(struct query_ctx));\n    memset(ctx, 0, sizeof(struct query_ctx));\n    ctx->buf = ss_malloc(sizeof(buffer_t));\n    balloc(ctx->buf, len);\n    memcpy(ctx->buf->array, buf, len);\n    ctx->buf->len = len;\n    return ctx;\n}\n\nvoid close_and_free_query(EV_P_ struct query_ctx *ctx)\n{\n    if (ctx != NULL) {\n        if (ctx->query != NULL) {\n            resolv_cancel(ctx->query);\n            ctx->query = NULL;\n        }\n        if (ctx->buf != NULL) {\n            bfree(ctx->buf);\n            ss_free(ctx->buf);\n        }\n        ss_free(ctx);\n    }\n}\n\n#endif\n\nvoid close_and_free_remote(EV_P_ remote_ctx_t *ctx)\n{\n    if (ctx != NULL) {\n        ev_timer_stop(EV_A_ & ctx->watcher);\n        ev_io_stop(EV_A_ & ctx->io);\n        close(ctx->fd);\n        ss_free(ctx);\n    }\n}\n\nstatic void remote_timeout_cb(EV_P_ ev_timer *watcher, int revents)\n{\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)(((void *)watcher)\n                                                - sizeof(ev_io));\n\n    if (verbose) {\n        LOGI(\"[udp] connection timeout\");\n    }\n\n    char *key = hash_key(remote_ctx->af, &remote_ctx->src_addr);\n    cache_remove(remote_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN);\n}\n\n#ifdef MODULE_REMOTE\nstatic void query_resolve_cb(struct sockaddr *addr, void *data)\n{\n    struct query_ctx *query_ctx = (struct query_ctx *)data;\n    struct ev_loop *loop        = query_ctx->server_ctx->loop;\n\n    if (verbose) {\n        LOGI(\"[udp] udns resolved\");\n    }\n\n    query_ctx->query = NULL;\n\n    if (addr == NULL) {\n        LOGE(\"[udp] udns returned an error\");\n    } else {\n        remote_ctx_t *remote_ctx = query_ctx->remote_ctx;\n        int cache_hit            = 0;\n\n        // Lookup in the conn cache\n        if (remote_ctx == NULL) {\n            char *key = hash_key(AF_UNSPEC, &query_ctx->src_addr);\n            cache_lookup(query_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)&remote_ctx);\n        }\n\n        if (remote_ctx == NULL) {\n            int remotefd = create_remote_socket(addr->sa_family == AF_INET6);\n            if (remotefd != -1) {\n                setnonblocking(remotefd);\n#ifdef SO_BROADCAST\n                set_broadcast(remotefd);\n#endif\n#ifdef SO_NOSIGPIPE\n                set_nosigpipe(remotefd);\n#endif\n#ifdef IP_TOS\n                // Set QoS flag\n                int tos = 46;\n                setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));\n#endif\n#ifdef SET_INTERFACE\n                if (query_ctx->server_ctx->iface) {\n                    if (setinterface(remotefd, query_ctx->server_ctx->iface) == -1)\n                        ERROR(\"setinterface\");\n                }\n#endif\n                remote_ctx                  = new_remote(remotefd, query_ctx->server_ctx);\n                remote_ctx->src_addr        = query_ctx->src_addr;\n                remote_ctx->server_ctx      = query_ctx->server_ctx;\n                remote_ctx->addr_header_len = query_ctx->addr_header_len;\n                memcpy(remote_ctx->addr_header, query_ctx->addr_header,\n                       query_ctx->addr_header_len);\n            } else {\n                ERROR(\"[udp] bind() error\");\n            }\n        } else {\n            cache_hit = 1;\n        }\n\n        if (remote_ctx != NULL) {\n            memcpy(&remote_ctx->dst_addr, addr, sizeof(struct sockaddr_storage));\n\n            size_t addr_len = get_sockaddr_len(addr);\n            int s           = sendto(remote_ctx->fd, query_ctx->buf->array, query_ctx->buf->len,\n                                     0, addr, addr_len);\n\n            if (s == -1) {\n                ERROR(\"[udp] sendto_remote\");\n                if (!cache_hit) {\n                    close_and_free_remote(EV_A_ remote_ctx);\n                }\n            } else {\n                if (!cache_hit) {\n                    // Add to conn cache\n                    char *key = hash_key(AF_UNSPEC, &remote_ctx->src_addr);\n                    cache_insert(query_ctx->server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx);\n                    ev_io_start(EV_A_ & remote_ctx->io);\n                    ev_timer_start(EV_A_ & remote_ctx->watcher);\n                }\n            }\n        }\n    }\n\n    // clean up\n    close_and_free_query(EV_A_ query_ctx);\n}\n\n#endif\n\nstatic void remote_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    ssize_t r;\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)w;\n    server_ctx_t *server_ctx = remote_ctx->server_ctx;\n\n    // server has been closed\n    if (server_ctx == NULL) {\n        LOGE(\"[udp] invalid server\");\n        close_and_free_remote(EV_A_ remote_ctx);\n        return;\n    }\n\n    struct sockaddr_storage src_addr;\n    socklen_t src_addr_len = sizeof(src_addr);\n    memset(&src_addr, 0, src_addr_len);\n\n    buffer_t *buf = ss_malloc(sizeof(buffer_t));\n    balloc(buf, BUF_SIZE);\n\n    // recv\n    r = recvfrom(remote_ctx->fd, buf->array, BUF_SIZE, 0, (struct sockaddr *)&src_addr, &src_addr_len);\n\n    if (r == -1) {\n        // error on recv\n        // simply drop that packet\n        ERROR(\"[udp] remote_recv_recvfrom\");\n        goto CLEAN_UP;\n    } else if (r > packet_size) {\n        LOGE(\"[udp] remote_recv_recvfrom fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    buf->len = r;\n\n#ifdef MODULE_LOCAL\n    int err = ss_decrypt_all(buf, server_ctx->method, 0, BUF_SIZE);\n    if (err) {\n        // drop the packet silently\n        goto CLEAN_UP;\n    }\n\n#ifdef MODULE_REDIR\n    struct sockaddr_storage dst_addr;\n    memset(&dst_addr, 0, sizeof(struct sockaddr_storage));\n    int len = parse_udprealy_header(buf->array, buf->len, NULL, NULL, NULL, &dst_addr);\n\n    if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) {\n        LOGI(\"[udp] ss-redir does not support domain name\");\n        goto CLEAN_UP;\n    }\n\n    if (verbose) {\n        char src[SS_ADDRSTRLEN];\n        char dst[SS_ADDRSTRLEN];\n        strcpy(src, get_addr_str((struct sockaddr *)&src_addr));\n        strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr));\n        LOGI(\"[udp] recv %s via %s\", dst, src);\n    }\n#else\n    int len = parse_udprealy_header(buf->array, buf->len, NULL, NULL, NULL, NULL);\n#endif\n\n    if (len == 0) {\n        LOGI(\"[udp] error in parse header\");\n        // error in parse header\n        goto CLEAN_UP;\n    }\n\n    // server may return using a different address type other than the type we\n    // have used during sending\n\n#if defined(MODULE_TUNNEL) || defined(MODULE_REDIR)\n    // Construct packet\n    buf->len -= len;\n    memmove(buf->array, buf->array + len, buf->len);\n#else\n    // Construct packet\n    brealloc(buf, buf->len + 3, BUF_SIZE);\n    memmove(buf->array + 3, buf->array, buf->len);\n    memset(buf->array, 0, 3);\n    buf->len += 3;\n#endif\n#endif\n\n#ifdef MODULE_REMOTE\n\n    rx += buf->len;\n\n    char addr_header_buf[512];\n    char *addr_header   = remote_ctx->addr_header;\n    int addr_header_len = remote_ctx->addr_header_len;\n\n    if (remote_ctx->af == AF_INET || remote_ctx->af == AF_INET6) {\n        addr_header_len = construct_udprealy_header(&src_addr, addr_header_buf);\n        addr_header     = addr_header_buf;\n    }\n\n    // Construct packet\n    brealloc(buf, buf->len + addr_header_len, BUF_SIZE);\n    memmove(buf->array + addr_header_len, buf->array, buf->len);\n    memcpy(buf->array, addr_header, addr_header_len);\n    buf->len += addr_header_len;\n\n    int err = ss_encrypt_all(buf, server_ctx->method, 0, BUF_SIZE);\n    if (err) {\n        // drop the packet silently\n        goto CLEAN_UP;\n    }\n#endif\n\n    if (buf->len > packet_size) {\n        LOGE(\"[udp] remote_recv_sendto fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    size_t remote_src_addr_len = get_sockaddr_len((struct sockaddr *)&remote_ctx->src_addr);\n\n#ifdef MODULE_REDIR\n    size_t remote_dst_addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr);\n\n    int src_fd = socket(remote_ctx->src_addr.ss_family, SOCK_DGRAM, 0);\n    if (src_fd < 0) {\n        ERROR(\"[udp] remote_recv_socket\");\n        goto CLEAN_UP;\n    }\n    int opt = 1;\n    if (setsockopt(src_fd, SOL_IP, IP_TRANSPARENT, &opt, sizeof(opt))) {\n        ERROR(\"[udp] remote_recv_setsockopt\");\n        close(src_fd);\n        goto CLEAN_UP;\n    }\n    if (setsockopt(src_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {\n        ERROR(\"[udp] remote_recv_setsockopt\");\n        close(src_fd);\n        goto CLEAN_UP;\n    }\n#ifdef IP_TOS\n    // Set QoS flag\n    int tos = 46;\n    setsockopt(src_fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));\n#endif\n    if (bind(src_fd, (struct sockaddr *)&dst_addr, remote_dst_addr_len) != 0) {\n        ERROR(\"[udp] remote_recv_bind\");\n        close(src_fd);\n        goto CLEAN_UP;\n    }\n\n    int s = sendto(src_fd, buf->array, buf->len, 0,\n                   (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len);\n    if (s == -1) {\n        ERROR(\"[udp] remote_recv_sendto\");\n        close(src_fd);\n        goto CLEAN_UP;\n    }\n    close(src_fd);\n\n#else\n    int s = sendto(server_ctx->fd, buf->array, buf->len, 0,\n                   (struct sockaddr *)&remote_ctx->src_addr, remote_src_addr_len);\n    if (s == -1) {\n        ERROR(\"[udp] remote_recv_sendto\");\n        goto CLEAN_UP;\n    }\n#endif\n\n    // handle the UDP packet successfully,\n    // triger the timer\n    ev_timer_again(EV_A_ & remote_ctx->watcher);\n\nCLEAN_UP:\n\n    bfree(buf);\n    ss_free(buf);\n}\n\nstatic void server_recv_cb(EV_P_ ev_io *w, int revents)\n{\n    server_ctx_t *server_ctx = (server_ctx_t *)w;\n    struct sockaddr_storage src_addr;\n    memset(&src_addr, 0, sizeof(struct sockaddr_storage));\n\n    buffer_t *buf = ss_malloc(sizeof(buffer_t));\n    balloc(buf, BUF_SIZE);\n\n    socklen_t src_addr_len = sizeof(struct sockaddr_storage);\n    unsigned int offset    = 0;\n\n#ifdef MODULE_REDIR\n    char control_buffer[64] = { 0 };\n    struct msghdr msg;\n    struct iovec iov[1];\n    struct sockaddr_storage dst_addr;\n    memset(&dst_addr, 0, sizeof(struct sockaddr_storage));\n\n    msg.msg_name       = &src_addr;\n    msg.msg_namelen    = src_addr_len;\n    msg.msg_control    = control_buffer;\n    msg.msg_controllen = sizeof(control_buffer);\n\n    iov[0].iov_base = buf->array;\n    iov[0].iov_len  = BUF_SIZE;\n    msg.msg_iov     = iov;\n    msg.msg_iovlen  = 1;\n\n    buf->len = recvmsg(server_ctx->fd, &msg, 0);\n    if (buf->len == -1) {\n        ERROR(\"[udp] server_recvmsg\");\n        goto CLEAN_UP;\n    } else if (buf->len > packet_size) {\n        ERROR(\"[udp] UDP server_recv_recvmsg fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    if (get_dstaddr(&msg, &dst_addr)) {\n        LOGE(\"[udp] unable to get dest addr\");\n        goto CLEAN_UP;\n    }\n\n    src_addr_len = msg.msg_namelen;\n#else\n    ssize_t r;\n    r = recvfrom(server_ctx->fd, buf->array, BUF_SIZE,\n                 0, (struct sockaddr *)&src_addr, &src_addr_len);\n\n    if (r == -1) {\n        // error on recv\n        // simply drop that packet\n        ERROR(\"[udp] server_recv_recvfrom\");\n        goto CLEAN_UP;\n    } else if (r > packet_size) {\n        ERROR(\"[udp] server_recv_recvfrom fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    buf->len = r;\n#endif\n\n#ifdef MODULE_REMOTE\n\n    tx += buf->len;\n\n    int err = ss_decrypt_all(buf, server_ctx->method, server_ctx->auth, BUF_SIZE);\n    if (err) {\n        // drop the packet silently\n        goto CLEAN_UP;\n    }\n#endif\n\n#ifdef MODULE_LOCAL\n#if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR)\n    uint8_t frag = *(uint8_t *)(buf->array + 2);\n    offset += 3;\n#endif\n#endif\n\n    /*\n     *\n     * SOCKS5 UDP Request\n     * +----+------+------+----------+----------+----------+\n     * |RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |\n     * +----+------+------+----------+----------+----------+\n     * | 2  |  1   |  1   | Variable |    2     | Variable |\n     * +----+------+------+----------+----------+----------+\n     *\n     * SOCKS5 UDP Response\n     * +----+------+------+----------+----------+----------+\n     * |RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |\n     * +----+------+------+----------+----------+----------+\n     * | 2  |  1   |  1   | Variable |    2     | Variable |\n     * +----+------+------+----------+----------+----------+\n     *\n     * shadowsocks UDP Request (before encrypted)\n     * +------+----------+----------+----------+-------------+\n     * | ATYP | DST.ADDR | DST.PORT |   DATA   |  HMAC-SHA1  |\n     * +------+----------+----------+----------+-------------+\n     * |  1   | Variable |    2     | Variable |     10      |\n     * +------+----------+----------+----------+-------------+\n     *\n     * If ATYP & ONETIMEAUTH_FLAG(0x10) != 0, Authentication (HMAC-SHA1) is enabled.\n     *\n     * The key of HMAC-SHA1 is (IV + KEY) and the input is the whole packet.\n     * The output of HMAC-SHA is truncated to 10 bytes (leftmost bits).\n     *\n     * shadowsocks UDP Response (before encrypted)\n     * +------+----------+----------+----------+\n     * | ATYP | DST.ADDR | DST.PORT |   DATA   |\n     * +------+----------+----------+----------+\n     * |  1   | Variable |    2     | Variable |\n     * +------+----------+----------+----------+\n     *\n     * shadowsocks UDP Request and Response (after encrypted)\n     * +-------+--------------+\n     * |   IV  |    PAYLOAD   |\n     * +-------+--------------+\n     * | Fixed |   Variable   |\n     * +-------+--------------+\n     *\n     */\n\n#ifdef MODULE_REDIR\n    if (verbose) {\n        char src[SS_ADDRSTRLEN];\n        char dst[SS_ADDRSTRLEN];\n        strcpy(src, get_addr_str((struct sockaddr *)&src_addr));\n        strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr));\n        LOGI(\"[udp] redir to %s from %s\", dst, src);\n    }\n\n    char addr_header[512] = { 0 };\n    int addr_header_len   = construct_udprealy_header(&dst_addr, addr_header);\n\n    if (addr_header_len == 0) {\n        LOGE(\"[udp] failed to parse tproxy addr\");\n        goto CLEAN_UP;\n    }\n\n    // reconstruct the buffer\n    brealloc(buf, buf->len + addr_header_len, BUF_SIZE);\n    memmove(buf->array + addr_header_len, buf->array, buf->len);\n    memcpy(buf->array, addr_header, addr_header_len);\n    buf->len += addr_header_len;\n\n#elif MODULE_TUNNEL\n\n    char addr_header[512] = { 0 };\n    char *host            = server_ctx->tunnel_addr.host;\n    char *port            = server_ctx->tunnel_addr.port;\n    uint16_t port_num     = (uint16_t)atoi(port);\n    uint16_t port_net_num = htons(port_num);\n    int addr_header_len   = 0;\n\n    struct cork_ip ip;\n    if (cork_ip_init(&ip, host) != -1) {\n        if (ip.version == 4) {\n            // send as IPv4\n            struct in_addr host_addr;\n            int host_len = sizeof(struct in_addr);\n\n            if (dns_pton(AF_INET, host, &host_addr) == -1) {\n                FATAL(\"IP parser error\");\n            }\n            addr_header[addr_header_len++] = 1;\n            memcpy(addr_header + addr_header_len, &host_addr, host_len);\n            addr_header_len += host_len;\n        } else if (ip.version == 6) {\n            // send as IPv6\n            struct in6_addr host_addr;\n            int host_len = sizeof(struct in6_addr);\n\n            if (dns_pton(AF_INET6, host, &host_addr) == -1) {\n                FATAL(\"IP parser error\");\n            }\n            addr_header[addr_header_len++] = 4;\n            memcpy(addr_header + addr_header_len, &host_addr, host_len);\n            addr_header_len += host_len;\n        } else {\n            FATAL(\"IP parser error\");\n        }\n    } else {\n        // send as domain\n        int host_len = strlen(host);\n\n        addr_header[addr_header_len++] = 3;\n        addr_header[addr_header_len++] = host_len;\n        memcpy(addr_header + addr_header_len, host, host_len);\n        addr_header_len += host_len;\n    }\n    memcpy(addr_header + addr_header_len, &port_net_num, 2);\n    addr_header_len += 2;\n\n    // reconstruct the buffer\n    brealloc(buf, buf->len + addr_header_len, BUF_SIZE);\n    memmove(buf->array + addr_header_len, buf->array, buf->len);\n    memcpy(buf->array, addr_header, addr_header_len);\n    buf->len += addr_header_len;\n\n#else\n\n    char host[257] = { 0 };\n    char port[64]  = { 0 };\n    struct sockaddr_storage dst_addr;\n    memset(&dst_addr, 0, sizeof(struct sockaddr_storage));\n\n    int addr_header_len = parse_udprealy_header(buf->array + offset, buf->len - offset,\n                                                &server_ctx->auth, host, port,\n                                                &dst_addr);\n    if (addr_header_len == 0) {\n        // error in parse header\n        goto CLEAN_UP;\n    }\n\n    char *addr_header = buf->array + offset;\n#endif\n\n#ifdef MODULE_LOCAL\n    char *key = hash_key(server_ctx->remote_addr->sa_family, &src_addr);\n#else\n    char *key = hash_key(dst_addr.ss_family, &src_addr);\n#endif\n\n    struct cache *conn_cache = server_ctx->conn_cache;\n\n    remote_ctx_t *remote_ctx = NULL;\n    cache_lookup(conn_cache, key, HASH_KEY_LEN, (void *)&remote_ctx);\n\n    if (remote_ctx != NULL) {\n        if (sockaddr_cmp(&src_addr, &remote_ctx->src_addr, sizeof(src_addr))) {\n            remote_ctx = NULL;\n        }\n    }\n\n    // reset the timer\n    if (remote_ctx != NULL) {\n        ev_timer_again(EV_A_ & remote_ctx->watcher);\n    }\n\n    if (remote_ctx == NULL) {\n        if (verbose) {\n#ifdef MODULE_REDIR\n            char src[SS_ADDRSTRLEN];\n            char dst[SS_ADDRSTRLEN];\n            strcpy(src, get_addr_str((struct sockaddr *)&src_addr));\n            strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr));\n            LOGI(\"[udp] cache miss: %s <-> %s\", dst, src);\n#else\n            LOGI(\"[udp] cache miss: %s:%s <-> %s\", host, port,\n                 get_addr_str((struct sockaddr *)&src_addr));\n#endif\n        }\n    } else {\n        if (verbose) {\n#ifdef MODULE_REDIR\n            char src[SS_ADDRSTRLEN];\n            char dst[SS_ADDRSTRLEN];\n            strcpy(src, get_addr_str((struct sockaddr *)&src_addr));\n            strcpy(dst, get_addr_str((struct sockaddr *)&dst_addr));\n            LOGI(\"[udp] cache hit: %s <-> %s\", dst, src);\n#else\n            LOGI(\"[udp] cache hit: %s:%s <-> %s\", host, port,\n                 get_addr_str((struct sockaddr *)&src_addr));\n#endif\n        }\n    }\n\n#ifdef MODULE_LOCAL\n\n#if !defined(MODULE_TUNNEL) && !defined(MODULE_REDIR)\n    if (frag) {\n        LOGE(\"[udp] drop a message since frag is not 0, but %d\", frag);\n        goto CLEAN_UP;\n    }\n#endif\n\n    const struct sockaddr *remote_addr = server_ctx->remote_addr;\n    const int remote_addr_len          = server_ctx->remote_addr_len;\n\n    if (remote_ctx == NULL) {\n        // Bind to any port\n        int remotefd = create_remote_socket(remote_addr->sa_family == AF_INET6);\n        if (remotefd < 0) {\n            ERROR(\"[udp] udprelay bind() error\");\n            goto CLEAN_UP;\n        }\n        setnonblocking(remotefd);\n\n#ifdef SO_NOSIGPIPE\n        set_nosigpipe(remotefd);\n#endif\n#ifdef IP_TOS\n        // Set QoS flag\n        int tos = 46;\n        setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));\n#endif\n#ifdef SET_INTERFACE\n        if (server_ctx->iface) {\n            if (setinterface(remotefd, server_ctx->iface) == -1)\n                ERROR(\"setinterface\");\n        }\n#endif\n\n#ifdef ANDROID\n        if (vpn) {\n            if (protect_socket(remotefd) == -1) {\n                ERROR(\"protect_socket\");\n                close(remotefd);\n                goto CLEAN_UP;\n            }\n        }\n#endif\n\n        // Init remote_ctx\n        remote_ctx                  = new_remote(remotefd, server_ctx);\n        remote_ctx->src_addr        = src_addr;\n        remote_ctx->af              = remote_addr->sa_family;\n        remote_ctx->addr_header_len = addr_header_len;\n        memcpy(remote_ctx->addr_header, addr_header, addr_header_len);\n\n        // Add to conn cache\n        cache_insert(conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx);\n\n        // Start remote io\n        ev_io_start(EV_A_ & remote_ctx->io);\n        ev_timer_start(EV_A_ & remote_ctx->watcher);\n    }\n\n    if (offset > 0) {\n        buf->len -= offset;\n        memmove(buf->array, buf->array + offset, buf->len);\n    }\n\n    if (server_ctx->auth) {\n        buf->array[0] |= ONETIMEAUTH_FLAG;\n    }\n\n    int err = ss_encrypt_all(buf, server_ctx->method, server_ctx->auth, BUF_SIZE);\n\n    if (err) {\n        // drop the packet silently\n        goto CLEAN_UP;\n    }\n\n    if (buf->len > packet_size) {\n        LOGE(\"[udp] server_recv_sendto fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    int s = sendto(remote_ctx->fd, buf->array, buf->len, 0, remote_addr, remote_addr_len);\n\n    if (s == -1) {\n        ERROR(\"[udp] server_recv_sendto\");\n    }\n\n#else\n\n    int cache_hit  = 0;\n    int need_query = 0;\n\n    if (buf->len - addr_header_len > packet_size) {\n        LOGE(\"[udp] server_recv_sendto fragmentation\");\n        goto CLEAN_UP;\n    }\n\n    if (remote_ctx != NULL) {\n        cache_hit = 1;\n        // detect destination mismatch\n        if (remote_ctx->addr_header_len != addr_header_len\n            || memcmp(addr_header, remote_ctx->addr_header, addr_header_len) != 0) {\n            if (dst_addr.ss_family != AF_INET && dst_addr.ss_family != AF_INET6) {\n                need_query = 1;\n            }\n        } else {\n            memcpy(&dst_addr, &remote_ctx->dst_addr, sizeof(struct sockaddr_storage));\n        }\n    } else {\n        if (dst_addr.ss_family == AF_INET || dst_addr.ss_family == AF_INET6) {\n            int remotefd = create_remote_socket(dst_addr.ss_family == AF_INET6);\n            if (remotefd != -1) {\n                setnonblocking(remotefd);\n#ifdef SO_BROADCAST\n                set_broadcast(remotefd);\n#endif\n#ifdef SO_NOSIGPIPE\n                set_nosigpipe(remotefd);\n#endif\n#ifdef IP_TOS\n                // Set QoS flag\n                int tos = 46;\n                setsockopt(remotefd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));\n#endif\n#ifdef SET_INTERFACE\n                if (server_ctx->iface) {\n                    if (setinterface(remotefd, server_ctx->iface) == -1)\n                        ERROR(\"setinterface\");\n                }\n#endif\n                remote_ctx                  = new_remote(remotefd, server_ctx);\n                remote_ctx->src_addr        = src_addr;\n                remote_ctx->server_ctx      = server_ctx;\n                remote_ctx->addr_header_len = addr_header_len;\n                memcpy(remote_ctx->addr_header, addr_header, addr_header_len);\n                memcpy(&remote_ctx->dst_addr, &dst_addr, sizeof(struct sockaddr_storage));\n            } else {\n                ERROR(\"[udp] bind() error\");\n                goto CLEAN_UP;\n            }\n        }\n    }\n\n    if (remote_ctx != NULL && !need_query) {\n        size_t addr_len = get_sockaddr_len((struct sockaddr *)&dst_addr);\n        int s           = sendto(remote_ctx->fd, buf->array + addr_header_len,\n                                 buf->len - addr_header_len, 0,\n                                 (struct sockaddr *)&dst_addr, addr_len);\n\n        if (s == -1) {\n            ERROR(\"[udp] sendto_remote\");\n            if (!cache_hit) {\n                close_and_free_remote(EV_A_ remote_ctx);\n            }\n        } else {\n            if (!cache_hit) {\n                // Add to conn cache\n                remote_ctx->af = dst_addr.ss_family;\n                char *key = hash_key(remote_ctx->af, &remote_ctx->src_addr);\n                cache_insert(server_ctx->conn_cache, key, HASH_KEY_LEN, (void *)remote_ctx);\n\n                ev_io_start(EV_A_ & remote_ctx->io);\n                ev_timer_start(EV_A_ & remote_ctx->watcher);\n            }\n        }\n    } else {\n        struct addrinfo hints;\n        memset(&hints, 0, sizeof(hints));\n        hints.ai_family   = AF_UNSPEC;\n        hints.ai_socktype = SOCK_DGRAM;\n        hints.ai_protocol = IPPROTO_UDP;\n\n        struct query_ctx *query_ctx = new_query_ctx(buf->array + addr_header_len,\n                                                    buf->len - addr_header_len);\n        query_ctx->server_ctx      = server_ctx;\n        query_ctx->addr_header_len = addr_header_len;\n        query_ctx->src_addr        = src_addr;\n        memcpy(query_ctx->addr_header, addr_header, addr_header_len);\n\n        if (need_query) {\n            query_ctx->remote_ctx = remote_ctx;\n        }\n\n        struct ResolvQuery *query = resolv_query(host, query_resolve_cb,\n                                                 NULL, query_ctx, htons(atoi(port)));\n        if (query == NULL) {\n            ERROR(\"[udp] unable to create DNS query\");\n            close_and_free_query(EV_A_ query_ctx);\n            goto CLEAN_UP;\n        }\n        query_ctx->query = query;\n    }\n#endif\n\nCLEAN_UP:\n    bfree(buf);\n    ss_free(buf);\n}\n\nvoid free_cb(void *element)\n{\n    remote_ctx_t *remote_ctx = (remote_ctx_t *)element;\n\n    if (verbose) {\n        LOGI(\"[udp] one connection freed\");\n    }\n\n    close_and_free_remote(EV_DEFAULT, remote_ctx);\n}\n\nint init_udprelay(const char *server_host, const char *server_port,\n#ifdef MODULE_LOCAL\n                  const struct sockaddr *remote_addr, const int remote_addr_len,\n#ifdef MODULE_TUNNEL\n                  const ss_addr_t tunnel_addr,\n#endif\n#endif\n                  int mtu, int method, int auth, int timeout, const char *iface)\n{\n    // Initialize ev loop\n    struct ev_loop *loop = EV_DEFAULT;\n\n    // Initialize MTU\n    if (mtu > 0) {\n        packet_size = mtu - 1 - 28 - 2 - 64;\n        BUF_SIZE    = packet_size * 2;\n    }\n\n    // Initialize cache\n    struct cache *conn_cache;\n    cache_create(&conn_cache, MAX_UDP_CONN_NUM, free_cb);\n\n    // ////////////////////////////////////////////////\n    // Setup server context\n\n    // Bind to port\n    int serverfd = create_server_socket(server_host, server_port);\n    if (serverfd < 0) {\n        FATAL(\"[udp] bind() error\");\n    }\n    setnonblocking(serverfd);\n\n    server_ctx_t *server_ctx = new_server_ctx(serverfd);\n#ifdef MODULE_REMOTE\n    server_ctx->loop = loop;\n#endif\n    server_ctx->auth       = auth;\n    server_ctx->timeout    = max(timeout, MIN_UDP_TIMEOUT);\n    server_ctx->method     = method;\n    server_ctx->iface      = iface;\n    server_ctx->conn_cache = conn_cache;\n#ifdef MODULE_LOCAL\n    server_ctx->remote_addr     = remote_addr;\n    server_ctx->remote_addr_len = remote_addr_len;\n#ifdef MODULE_TUNNEL\n    server_ctx->tunnel_addr = tunnel_addr;\n#endif\n#endif\n\n    ev_io_start(loop, &server_ctx->io);\n\n    server_ctx_list[server_num++] = server_ctx;\n\n    return 0;\n}\n\nvoid free_udprelay()\n{\n    struct ev_loop *loop = EV_DEFAULT;\n    while (server_num-- > 0) {\n        server_ctx_t *server_ctx = server_ctx_list[server_num];\n        ev_io_stop(loop, &server_ctx->io);\n        close(server_ctx->fd);\n        cache_delete(server_ctx->conn_cache, 0);\n        ss_free(server_ctx);\n        server_ctx_list[server_num] = NULL;\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/udprelay.h",
    "content": "/*\n * udprelay.h - Define UDP relay's buffers and callbacks\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _UDPRELAY_H\n#define _UDPRELAY_H\n\n#include <ev.h>\n#include <time.h>\n\n#include \"encrypt.h\"\n#include \"jconf.h\"\n\n#ifdef MODULE_REMOTE\n#include \"resolv.h\"\n#endif\n\n#include \"cache.h\"\n\n#include \"common.h\"\n\n#define MAX_UDP_PACKET_SIZE (65507)\n\n#define DEFAULT_PACKET_SIZE 1397 // 1492 - 1 - 28 - 2 - 64 = 1397, the default MTU for UDP relay\n\ntypedef struct server_ctx {\n    ev_io io;\n    int fd;\n    int method;\n    int auth;\n    int timeout;\n    const char *iface;\n    struct cache *conn_cache;\n#ifdef MODULE_LOCAL\n    const struct sockaddr *remote_addr;\n    int remote_addr_len;\n#ifdef MODULE_TUNNEL\n    ss_addr_t tunnel_addr;\n#endif\n#endif\n#ifdef MODULE_REMOTE\n    struct ev_loop *loop;\n#endif\n} server_ctx_t;\n\n#ifdef MODULE_REMOTE\ntypedef struct query_ctx {\n    struct ResolvQuery *query;\n    struct sockaddr_storage src_addr;\n    buffer_t *buf;\n    int addr_header_len;\n    char addr_header[384];\n    struct server_ctx *server_ctx;\n    struct remote_ctx *remote_ctx;\n} query_ctx_t;\n#endif\n\ntypedef struct remote_ctx {\n    ev_io io;\n    ev_timer watcher;\n    int af;\n    int fd;\n    int addr_header_len;\n    char addr_header[384];\n    struct sockaddr_storage src_addr;\n#ifdef MODULE_REMOTE\n    struct sockaddr_storage dst_addr;\n#endif\n    struct server_ctx *server_ctx;\n} remote_ctx_t;\n\n#endif // _UDPRELAY_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/uthash.h",
    "content": "/*\n   Copyright (c) 2003-2013, Troy D. Hanson     http://troydhanson.github.com/uthash/\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 * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n   IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n   TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n   PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER\n   OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef UTHASH_H\n#define UTHASH_H\n\n#include <string.h>   /* memcmp,strlen */\n#include <stddef.h>   /* ptrdiff_t */\n#include <stdlib.h>   /* exit() */\n\n/* These macros use decltype or the earlier __typeof GNU extension.\n   As decltype is only available in newer compilers (VS2010 or gcc 4.3+\n   when compiling c++ source) this code uses whatever method is needed\n   or, for VS2008 where neither is available, uses casting workarounds. */\n#ifdef _MSC_VER                              /* MS compiler */\n#if _MSC_VER >= 1600 && defined(__cplusplus) /* VS2010 or newer in C++ mode */\n#define DECLTYPE(x) (decltype(x))\n#else                                        /* VS2008 or older (or VS2010 in C mode) */\n#define NO_DECLTYPE\n#define DECLTYPE(x)\n#endif\n#else                   /* GNU, Sun and other compilers */\n#define DECLTYPE(x) (__typeof(x))\n#endif\n\n#ifdef NO_DECLTYPE\n#define DECLTYPE_ASSIGN(dst, src)           \\\n    do {                                    \\\n        char **_da_dst = (char **)(&(dst)); \\\n        *_da_dst = (char *)(src);           \\\n    } while (0)\n#else\n#define DECLTYPE_ASSIGN(dst, src)    \\\n    do {                             \\\n        (dst) = DECLTYPE(dst) (src); \\\n    } while (0)\n#endif\n\n/* a number of the hash function use uint32_t which isn't defined on win32 */\n#ifdef _MSC_VER\ntypedef unsigned int uint32_t;\ntypedef unsigned char uint8_t;\n#else\n#include <inttypes.h>   /* uint32_t */\n#endif\n\n#define UTHASH_VERSION 1.9 .8\n\n#ifndef uthash_fatal\n#define uthash_fatal(msg) exit(-1)        /* fatal error (out of memory,etc) */\n#endif\n#ifndef uthash_malloc\n#define uthash_malloc(sz) malloc(sz)      /* malloc fcn                      */\n#endif\n#ifndef uthash_free\n#define uthash_free(ptr, sz) free(ptr)     /* free fcn                        */\n#endif\n\n#ifndef uthash_noexpand_fyi\n#define uthash_noexpand_fyi(tbl)          /* can be defined to log noexpand  */\n#endif\n#ifndef uthash_expand_fyi\n#define uthash_expand_fyi(tbl)            /* can be defined to log expands   */\n#endif\n\n/* initial number of buckets */\n#define HASH_INITIAL_NUM_BUCKETS 32      /* initial number of buckets        */\n#define HASH_INITIAL_NUM_BUCKETS_LOG2 5  /* lg2 of initial number of buckets */\n#define HASH_BKT_CAPACITY_THRESH 10      /* expand when bucket count reaches */\n\n/* calculate the element whose hash handle address is hhe */\n#define ELMT_FROM_HH(tbl, hhp) ((void *)(((char *)(hhp)) - ((tbl)->hho)))\n\n#define HASH_FIND(hh, head, keyptr, keylen, out)                             \\\n    do {                                                                     \\\n        unsigned _hf_bkt, _hf_hashv;                                         \\\n        out = NULL;                                                          \\\n        if (head) {                                                          \\\n            HASH_FCN(keyptr, keylen, (head)->hh.tbl->num_buckets, _hf_hashv, \\\n                     _hf_bkt);                                               \\\n            if (HASH_BLOOM_TEST((head)->hh.tbl, _hf_hashv)) {                \\\n                HASH_FIND_IN_BKT((head)->hh.tbl, hh,                         \\\n                                 (head)->hh.tbl->buckets[ _hf_bkt ],         \\\n                                 keyptr, keylen, out);                       \\\n            }                                                                \\\n        }                                                                    \\\n    } while (0)\n\n#ifdef HASH_BLOOM\n#define HASH_BLOOM_BITLEN (1ULL << HASH_BLOOM)\n#define HASH_BLOOM_BYTELEN \\\n    (HASH_BLOOM_BITLEN /   \\\n     8) + ((HASH_BLOOM_BITLEN % 8) ? 1 : 0)\n#define HASH_BLOOM_MAKE(tbl)                                            \\\n    do {                                                                \\\n        (tbl)->bloom_nbits = HASH_BLOOM;                                \\\n        (tbl)->bloom_bv = (uint8_t *)uthash_malloc(HASH_BLOOM_BYTELEN); \\\n        if (!((tbl)->bloom_bv)) { uthash_fatal( \"out of memory\"); }     \\\n        memset((tbl)->bloom_bv, 0, HASH_BLOOM_BYTELEN);                 \\\n        (tbl)->bloom_sig = HASH_BLOOM_SIGNATURE;                        \\\n    } while (0)\n\n#define HASH_BLOOM_FREE(tbl)                              \\\n    do {                                                  \\\n        uthash_free((tbl)->bloom_bv, HASH_BLOOM_BYTELEN); \\\n    } while (0)\n\n#define HASH_BLOOM_BITSET(bv, idx) (bv[(idx) / 8] |= (1U << ((idx) % 8)))\n#define HASH_BLOOM_BITTEST(bv, idx) (bv[(idx) / 8] & (1U << ((idx) % 8)))\n\n#define HASH_BLOOM_ADD(tbl, hashv)     \\\n    HASH_BLOOM_BITSET((tbl)->bloom_bv, \\\n                      (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))\n\n#define HASH_BLOOM_TEST(tbl, hashv)     \\\n    HASH_BLOOM_BITTEST((tbl)->bloom_bv, \\\n                       (hashv & (uint32_t)((1ULL << (tbl)->bloom_nbits) - 1)))\n\n#else\n#define HASH_BLOOM_MAKE(tbl)\n#define HASH_BLOOM_FREE(tbl)\n#define HASH_BLOOM_ADD(tbl, hashv)\n#define HASH_BLOOM_TEST(tbl, hashv) (1)\n#define HASH_BLOOM_BYTELEN 0\n#endif\n\n#define HASH_MAKE_TABLE(hh, head)                                         \\\n    do {                                                                  \\\n        (head)->hh.tbl = (UT_hash_table *)uthash_malloc(                  \\\n            sizeof(UT_hash_table));                                       \\\n        if (!((head)->hh.tbl)) { uthash_fatal( \"out of memory\"); }        \\\n        memset((head)->hh.tbl, 0, sizeof(UT_hash_table));                 \\\n        (head)->hh.tbl->tail = &((head)->hh);                             \\\n        (head)->hh.tbl->num_buckets = HASH_INITIAL_NUM_BUCKETS;           \\\n        (head)->hh.tbl->log2_num_buckets = HASH_INITIAL_NUM_BUCKETS_LOG2; \\\n        (head)->hh.tbl->hho = (char *)(&(head)->hh) - (char *)(head);     \\\n        (head)->hh.tbl->buckets = (UT_hash_bucket *)uthash_malloc(        \\\n            HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket));    \\\n        if (!(head)->hh.tbl->buckets) { uthash_fatal( \"out of memory\"); } \\\n        memset((head)->hh.tbl->buckets, 0,                                \\\n               HASH_INITIAL_NUM_BUCKETS * sizeof(struct UT_hash_bucket)); \\\n        HASH_BLOOM_MAKE((head)->hh.tbl);                                  \\\n        (head)->hh.tbl->signature = HASH_SIGNATURE;                       \\\n    } while (0)\n\n#define HASH_ADD(hh, head, fieldname, keylen_in, add) \\\n    HASH_ADD_KEYPTR(hh, head, &((add)->fieldname), keylen_in, add)\n\n#define HASH_REPLACE(hh, head, fieldname, keylen_in, add, replaced)    \\\n    do {                                                               \\\n        replaced = NULL;                                               \\\n        HASH_FIND(hh, head, &((add)->fieldname), keylen_in, replaced); \\\n        if (replaced != NULL) {                                        \\\n            HASH_DELETE(hh, head, replaced);                           \\\n        };                                                             \\\n        HASH_ADD(hh, head, fieldname, keylen_in, add);                 \\\n    } while (0)\n\n#define HASH_ADD_KEYPTR(hh, head, keyptr, keylen_in, add)                        \\\n    do {                                                                         \\\n        unsigned _ha_bkt;                                                        \\\n        (add)->hh.next = NULL;                                                   \\\n        (add)->hh.key = (char *)keyptr;                                          \\\n        (add)->hh.keylen = (unsigned)keylen_in;                                  \\\n        if (!(head)) {                                                           \\\n            head = (add);                                                        \\\n            (head)->hh.prev = NULL;                                              \\\n            HASH_MAKE_TABLE(hh, head);                                           \\\n        } else {                                                                 \\\n            (head)->hh.tbl->tail->next = (add);                                  \\\n            (add)->hh.prev = ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail); \\\n            (head)->hh.tbl->tail = &((add)->hh);                                 \\\n        }                                                                        \\\n        (head)->hh.tbl->num_items++;                                             \\\n        (add)->hh.tbl = (head)->hh.tbl;                                          \\\n        HASH_FCN(keyptr, keylen_in, (head)->hh.tbl->num_buckets,                 \\\n                 (add)->hh.hashv, _ha_bkt);                                      \\\n        HASH_ADD_TO_BKT((head)->hh.tbl->buckets[_ha_bkt], &(add)->hh);           \\\n        HASH_BLOOM_ADD((head)->hh.tbl, (add)->hh.hashv);                         \\\n        HASH_EMIT_KEY(hh, head, keyptr, keylen_in);                              \\\n        HASH_FSCK(hh, head);                                                     \\\n    } while (0)\n\n#define HASH_TO_BKT( hashv, num_bkts, bkt ) \\\n    do {                                    \\\n        bkt = ((hashv) & ((num_bkts) - 1)); \\\n    } while (0)\n\n/* delete \"delptr\" from the hash table.\n * \"the usual\" patch-up process for the app-order doubly-linked-list.\n * The use of _hd_hh_del below deserves special explanation.\n * These used to be expressed using (delptr) but that led to a bug\n * if someone used the same symbol for the head and deletee, like\n *  HASH_DELETE(hh,users,users);\n * We want that to work, but by changing the head (users) below\n * we were forfeiting our ability to further refer to the deletee (users)\n * in the patch-up process. Solution: use scratch space to\n * copy the deletee pointer, then the latter references are via that\n * scratch pointer rather than through the repointed (users) symbol.\n */\n#define HASH_DELETE(hh, head, delptr)                                          \\\n    do {                                                                       \\\n        unsigned _hd_bkt;                                                      \\\n        struct UT_hash_handle *_hd_hh_del;                                     \\\n        if ( ((delptr)->hh.prev == NULL) && ((delptr)->hh.next == NULL) ) {    \\\n            uthash_free((head)->hh.tbl->buckets,                               \\\n                        (head)->hh.tbl->num_buckets *                          \\\n                        sizeof(struct UT_hash_bucket) );                       \\\n            HASH_BLOOM_FREE((head)->hh.tbl);                                   \\\n            uthash_free((head)->hh.tbl, sizeof(UT_hash_table));                \\\n            head = NULL;                                                       \\\n        } else {                                                               \\\n            _hd_hh_del = &((delptr)->hh);                                      \\\n            if ((delptr) ==                                                    \\\n                ELMT_FROM_HH((head)->hh.tbl, (head)->hh.tbl->tail)) {          \\\n                (head)->hh.tbl->tail =                                         \\\n                    (UT_hash_handle *)((ptrdiff_t)((delptr)->hh.prev) +        \\\n                                       (head)->hh.tbl->hho);                   \\\n            }                                                                  \\\n            if ((delptr)->hh.prev) {                                           \\\n                ((UT_hash_handle *)((ptrdiff_t)((delptr)->hh.prev) +           \\\n                                    (head)->hh.tbl->hho))->next =              \\\n                    (delptr)->hh.next;                                         \\\n            } else {                                                           \\\n                DECLTYPE_ASSIGN(head, (delptr)->hh.next);                      \\\n            }                                                                  \\\n            if (_hd_hh_del->next) {                                            \\\n                ((UT_hash_handle *)((ptrdiff_t)_hd_hh_del->next +              \\\n                                    (head)->hh.tbl->hho))->prev =              \\\n                    _hd_hh_del->prev;                                          \\\n            }                                                                  \\\n            HASH_TO_BKT( _hd_hh_del->hashv, (head)->hh.tbl->num_buckets,       \\\n                         _hd_bkt);                                             \\\n            HASH_DEL_IN_BKT(hh, (head)->hh.tbl->buckets[_hd_bkt], _hd_hh_del); \\\n            (head)->hh.tbl->num_items--;                                       \\\n        }                                                                      \\\n        HASH_FSCK(hh, head);                                                   \\\n    } while (0)\n\n\n/* convenience forms of HASH_FIND/HASH_ADD/HASH_DEL */\n#define HASH_FIND_STR(head, findstr, out) \\\n    HASH_FIND(hh, head, findstr, strlen(findstr), out)\n#define HASH_ADD_STR(head, strfield, add) \\\n    HASH_ADD(hh, head, strfield, strlen(add->strfield), add)\n#define HASH_REPLACE_STR(head, strfield, add, replaced) \\\n    HASH_REPLACE(hh, head, strfield, strlen(add->strfield), add, replaced)\n#define HASH_FIND_INT(head, findint, out) \\\n    HASH_FIND(hh, head, findint, sizeof(int), out)\n#define HASH_ADD_INT(head, intfield, add) \\\n    HASH_ADD(hh, head, intfield, sizeof(int), add)\n#define HASH_REPLACE_INT(head, intfield, add, replaced) \\\n    HASH_REPLACE(hh, head, intfield, sizeof(int), add, replaced)\n#define HASH_FIND_PTR(head, findptr, out) \\\n    HASH_FIND(hh, head, findptr, sizeof(void *), out)\n#define HASH_ADD_PTR(head, ptrfield, add) \\\n    HASH_ADD(hh, head, ptrfield, sizeof(void *), add)\n#define HASH_REPLACE_PTR(head, ptrfield, add) \\\n    HASH_REPLACE(hh, head, ptrfield, sizeof(void *), add, replaced)\n#define HASH_DEL(head, delptr) \\\n    HASH_DELETE(hh, head, delptr)\n\n/* HASH_FSCK checks hash integrity on every add/delete when HASH_DEBUG is defined.\n * This is for uthash developer only; it compiles away if HASH_DEBUG isn't defined.\n */\n#ifdef HASH_DEBUG\n#define HASH_OOPS(...) do { fprintf(stderr, __VA_ARGS__); exit(-1); } while (0)\n#define HASH_FSCK(hh, head)                                                      \\\n    do {                                                                         \\\n        unsigned _bkt_i;                                                         \\\n        unsigned _count, _bkt_count;                                             \\\n        char *_prev;                                                             \\\n        struct UT_hash_handle *_thh;                                             \\\n        if (head) {                                                              \\\n            _count = 0;                                                          \\\n            for (_bkt_i = 0; _bkt_i < (head)->hh.tbl->num_buckets; _bkt_i++) {   \\\n                _bkt_count = 0;                                                  \\\n                _thh = (head)->hh.tbl->buckets[_bkt_i].hh_head;                  \\\n                _prev = NULL;                                                    \\\n                while (_thh) {                                                   \\\n                    if (_prev != (char *)(_thh->hh_prev)) {                      \\\n                        HASH_OOPS(\"invalid hh_prev %p, actual %p\\n\",             \\\n                                  _thh->hh_prev, _prev );                        \\\n                    }                                                            \\\n                    _bkt_count++;                                                \\\n                    _prev = (char *)(_thh);                                      \\\n                    _thh = _thh->hh_next;                                        \\\n                }                                                                \\\n                _count += _bkt_count;                                            \\\n                if ((head)->hh.tbl->buckets[_bkt_i].count != _bkt_count) {       \\\n                    HASH_OOPS(\"invalid bucket count %d, actual %d\\n\",            \\\n                              (head)->hh.tbl->buckets[_bkt_i].count,             \\\n                              _bkt_count);                                       \\\n                }                                                                \\\n            }                                                                    \\\n            if (_count != (head)->hh.tbl->num_items) {                           \\\n                HASH_OOPS(\"invalid hh item count %d, actual %d\\n\",               \\\n                          (head)->hh.tbl->num_items, _count );                   \\\n            }                                                                    \\\n            /* traverse hh in app order; check next/prev integrity, count */     \\\n            _count = 0;                                                          \\\n            _prev = NULL;                                                        \\\n            _thh = &(head)->hh;                                                  \\\n            while (_thh) {                                                       \\\n                _count++;                                                        \\\n                if (_prev != (char *)(_thh->prev)) {                             \\\n                    HASH_OOPS(\"invalid prev %p, actual %p\\n\",                    \\\n                              _thh->prev, _prev );                               \\\n                }                                                                \\\n                _prev = (char *)ELMT_FROM_HH((head)->hh.tbl, _thh);              \\\n                _thh = ( _thh->next ?  (UT_hash_handle *)((char *)(_thh->next) + \\\n                                                          (head)->hh.tbl->hho) : \\\n                         NULL );                                                 \\\n            }                                                                    \\\n            if (_count != (head)->hh.tbl->num_items) {                           \\\n                HASH_OOPS(\"invalid app item count %d, actual %d\\n\",              \\\n                          (head)->hh.tbl->num_items, _count );                   \\\n            }                                                                    \\\n        }                                                                        \\\n    } while (0)\n#else\n#define HASH_FSCK(hh, head)\n#endif\n\n/* When compiled with -DHASH_EMIT_KEYS, length-prefixed keys are emitted to\n * the descriptor to which this macro is defined for tuning the hash function.\n * The app can #include <unistd.h> to get the prototype for write(2). */\n#ifdef HASH_EMIT_KEYS\n#define HASH_EMIT_KEY(hh, head, keyptr, fieldlen)     \\\n    do {                                              \\\n        unsigned _klen = fieldlen;                    \\\n        write(HASH_EMIT_KEYS, &_klen, sizeof(_klen)); \\\n        write(HASH_EMIT_KEYS, keyptr, fieldlen);      \\\n    } while (0)\n#else\n#define HASH_EMIT_KEY(hh, head, keyptr, fieldlen)\n#endif\n\n/* default to Jenkin's hash unless overridden e.g. DHASH_FUNCTION=HASH_SAX */\n#ifdef HASH_FUNCTION\n#define HASH_FCN HASH_FUNCTION\n#else\n#define HASH_FCN HASH_JEN\n#endif\n\n/* The Bernstein hash function, used in Perl prior to v5.6 */\n#define HASH_BER(key, keylen, num_bkts, hashv, bkt)                     \\\n    do {                                                                \\\n        unsigned _hb_keylen = keylen;                                   \\\n        char *_hb_key = (char *)(key);                                  \\\n        (hashv) = 0;                                                    \\\n        while (_hb_keylen--) { (hashv) = ((hashv) * 33) + *_hb_key++; } \\\n        bkt = (hashv) & (num_bkts - 1);                                 \\\n    } while (0)\n\n\n/* SAX/FNV/OAT/JEN hash functions are macro variants of those listed at\n * http://eternallyconfuzzled.com/tuts/algorithms/jsw_tut_hashing.aspx */\n#define HASH_SAX(key, keylen, num_bkts, hashv, bkt)                  \\\n    do {                                                             \\\n        unsigned _sx_i;                                              \\\n        char *_hs_key = (char *)(key);                               \\\n        hashv = 0;                                                   \\\n        for (_sx_i = 0; _sx_i < keylen; _sx_i++) {                   \\\n            hashv ^= (hashv << 5) + (hashv >> 2) + _hs_key[_sx_i]; } \\\n        bkt = hashv & (num_bkts - 1);                                \\\n    } while (0)\n\n#define HASH_FNV(key, keylen, num_bkts, hashv, bkt)        \\\n    do {                                                   \\\n        unsigned _fn_i;                                    \\\n        char *_hf_key = (char *)(key);                     \\\n        hashv = 2166136261UL;                              \\\n        for (_fn_i = 0; _fn_i < keylen; _fn_i++) {         \\\n            hashv = (hashv * 16777619) ^ _hf_key[_fn_i]; } \\\n        bkt = hashv & (num_bkts - 1);                      \\\n    } while (0)\n\n#define HASH_OAT(key, keylen, num_bkts, hashv, bkt) \\\n    do {                                            \\\n        unsigned _ho_i;                             \\\n        char *_ho_key = (char *)(key);              \\\n        hashv = 0;                                  \\\n        for (_ho_i = 0; _ho_i < keylen; _ho_i++) {  \\\n            hashv += _ho_key[_ho_i];                \\\n            hashv += (hashv << 10);                 \\\n            hashv ^= (hashv >> 6);                  \\\n        }                                           \\\n        hashv += (hashv << 3);                      \\\n        hashv ^= (hashv >> 11);                     \\\n        hashv += (hashv << 15);                     \\\n        bkt = hashv & (num_bkts - 1);               \\\n    } while (0)\n\n#define HASH_JEN_MIX(a, b, c)             \\\n    do {                                  \\\n        a -= b; a -= c; a ^= ( c >> 13 ); \\\n        b -= c; b -= a; b ^= ( a << 8 );  \\\n        c -= a; c -= b; c ^= ( b >> 13 ); \\\n        a -= b; a -= c; a ^= ( c >> 12 ); \\\n        b -= c; b -= a; b ^= ( a << 16 ); \\\n        c -= a; c -= b; c ^= ( b >> 5 );  \\\n        a -= b; a -= c; a ^= ( c >> 3 );  \\\n        b -= c; b -= a; b ^= ( a << 10 ); \\\n        c -= a; c -= b; c ^= ( b >> 15 ); \\\n    } while (0)\n\n#define HASH_JEN(key, keylen, num_bkts, hashv, bkt)              \\\n    do {                                                         \\\n        unsigned _hj_i, _hj_j, _hj_k;                            \\\n        unsigned char *_hj_key = (unsigned char *)(key);         \\\n        hashv = 0xfeedbeef;                                      \\\n        _hj_i = _hj_j = 0x9e3779b9;                              \\\n        _hj_k = (unsigned)keylen;                                \\\n        while (_hj_k >= 12) {                                    \\\n            _hj_i += (_hj_key[0] + ( (unsigned)_hj_key[1] << 8 ) \\\n                      + ( (unsigned)_hj_key[2] << 16 )           \\\n                      + ( (unsigned)_hj_key[3] << 24 ) );        \\\n            _hj_j += (_hj_key[4] + ( (unsigned)_hj_key[5] << 8 ) \\\n                      + ( (unsigned)_hj_key[6] << 16 )           \\\n                      + ( (unsigned)_hj_key[7] << 24 ) );        \\\n            hashv += (_hj_key[8] + ( (unsigned)_hj_key[9] << 8 ) \\\n                      + ( (unsigned)_hj_key[10] << 16 )          \\\n                      + ( (unsigned)_hj_key[11] << 24 ) );       \\\n                                                                 \\\n            HASH_JEN_MIX(_hj_i, _hj_j, hashv);                   \\\n                                                                 \\\n            _hj_key += 12;                                       \\\n            _hj_k -= 12;                                         \\\n        }                                                        \\\n        hashv += keylen;                                         \\\n        switch (_hj_k) {                                         \\\n        case 11: hashv += ( (unsigned)_hj_key[10] << 24 );       \\\n        case 10: hashv += ( (unsigned)_hj_key[9] << 16 );        \\\n        case 9:  hashv += ( (unsigned)_hj_key[8] << 8 );         \\\n        case 8:  _hj_j += ( (unsigned)_hj_key[7] << 24 );        \\\n        case 7:  _hj_j += ( (unsigned)_hj_key[6] << 16 );        \\\n        case 6:  _hj_j += ( (unsigned)_hj_key[5] << 8 );         \\\n        case 5:  _hj_j += _hj_key[4];                            \\\n        case 4:  _hj_i += ( (unsigned)_hj_key[3] << 24 );        \\\n        case 3:  _hj_i += ( (unsigned)_hj_key[2] << 16 );        \\\n        case 2:  _hj_i += ( (unsigned)_hj_key[1] << 8 );         \\\n        case 1:  _hj_i += _hj_key[0];                            \\\n        }                                                        \\\n        HASH_JEN_MIX(_hj_i, _hj_j, hashv);                       \\\n        bkt = hashv & (num_bkts - 1);                            \\\n    } while (0)\n\n/* The Paul Hsieh hash function */\n#undef get16bits\n#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \\\n    || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)\n#define get16bits(d) (*((const uint16_t *)(d)))\n#endif\n\n#if !defined (get16bits)\n#define get16bits(d)                                \\\n    ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \\\n     + (uint32_t)(((const uint8_t *)(d))[0]) )\n#endif\n#define HASH_SFH(key, keylen, num_bkts, hashv, bkt)                       \\\n    do {                                                                  \\\n        unsigned char *_sfh_key = (unsigned char *)(key);                 \\\n        uint32_t _sfh_tmp, _sfh_len = keylen;                             \\\n                                                                          \\\n        int _sfh_rem = _sfh_len & 3;                                      \\\n        _sfh_len >>= 2;                                                   \\\n        hashv = 0xcafebabe;                                               \\\n                                                                          \\\n        /* Main loop */                                                   \\\n        for (; _sfh_len > 0; _sfh_len--) {                                \\\n            hashv += get16bits(_sfh_key);                                 \\\n            _sfh_tmp = (uint32_t)(get16bits(_sfh_key + 2)) << 11 ^ hashv; \\\n            hashv = (hashv << 16) ^ _sfh_tmp;                             \\\n            _sfh_key += 2 * sizeof(uint16_t);                             \\\n            hashv += hashv >> 11;                                         \\\n        }                                                                 \\\n                                                                          \\\n        /* Handle end cases */                                            \\\n        switch (_sfh_rem) {                                               \\\n        case 3: hashv += get16bits(_sfh_key);                             \\\n            hashv ^= hashv << 16;                                         \\\n            hashv ^= (uint32_t)(_sfh_key[sizeof(uint16_t)] << 18);        \\\n            hashv += hashv >> 11;                                         \\\n            break;                                                        \\\n        case 2: hashv += get16bits(_sfh_key);                             \\\n            hashv ^= hashv << 11;                                         \\\n            hashv += hashv >> 17;                                         \\\n            break;                                                        \\\n        case 1: hashv += *_sfh_key;                                       \\\n            hashv ^= hashv << 10;                                         \\\n            hashv += hashv >> 1;                                          \\\n        }                                                                 \\\n                                                                          \\\n        /* Force \"avalanching\" of final 127 bits */                       \\\n        hashv ^= hashv << 3;                                              \\\n        hashv += hashv >> 5;                                              \\\n        hashv ^= hashv << 4;                                              \\\n        hashv += hashv >> 17;                                             \\\n        hashv ^= hashv << 25;                                             \\\n        hashv += hashv >> 6;                                              \\\n        bkt = hashv & (num_bkts - 1);                                     \\\n    } while (0)\n\n#ifdef HASH_USING_NO_STRICT_ALIASING\n/* The MurmurHash exploits some CPU's (x86,x86_64) tolerance for unaligned reads.\n * For other types of CPU's (e.g. Sparc) an unaligned read causes a bus error.\n * MurmurHash uses the faster approach only on CPU's where we know it's safe.\n *\n * Note the preprocessor built-in defines can be emitted using:\n *\n *   gcc -m64 -dM -E - < /dev/null                  (on gcc)\n *   cc -## a.c (where a.c is a simple test file)   (Sun Studio)\n */\n#if (defined(__i386__) || defined(__x86_64__) || defined(_M_IX86))\n#define MUR_GETBLOCK(p, i) p[i]\n#else /* non intel */\n#define MUR_PLUS0_ALIGNED(p) (((unsigned long)p & 0x3) == 0)\n#define MUR_PLUS1_ALIGNED(p) (((unsigned long)p & 0x3) == 1)\n#define MUR_PLUS2_ALIGNED(p) (((unsigned long)p & 0x3) == 2)\n#define MUR_PLUS3_ALIGNED(p) (((unsigned long)p & 0x3) == 3)\n#define WP(p) ((uint32_t *)((unsigned long)(p) & ~3UL))\n#if (defined(__BIG_ENDIAN__) || defined(SPARC) || defined(__ppc__) || \\\n    defined(__ppc64__))\n#define MUR_THREE_ONE(p) \\\n    ((((*WP(p)) &        \\\n       0x00ffffff) << 8) | (((*(WP(p) + 1)) & 0xff000000) >> 24))\n#define MUR_TWO_TWO(p) \\\n    ((((*WP(p)) &      \\\n       0x0000ffff) << 16) | (((*(WP(p) + 1)) & 0xffff0000) >> 16))\n#define MUR_ONE_THREE(p) \\\n    ((((*WP(p)) &        \\\n       0x000000ff) << 24) | (((*(WP(p) + 1)) & 0xffffff00) >> 8))\n#else /* assume little endian non-intel */\n#define MUR_THREE_ONE(p) \\\n    ((((*WP(p)) &        \\\n       0xffffff00) >> 8) | (((*(WP(p) + 1)) & 0x000000ff) << 24))\n#define MUR_TWO_TWO(p) \\\n    ((((*WP(p)) &      \\\n       0xffff0000) >> 16) | (((*(WP(p) + 1)) & 0x0000ffff) << 16))\n#define MUR_ONE_THREE(p) \\\n    ((((*WP(p)) &        \\\n       0xff000000) >> 24) | (((*(WP(p) + 1)) & 0x00ffffff) << 8))\n#endif\n#define MUR_GETBLOCK(p, i)                      \\\n    (MUR_PLUS0_ALIGNED(p) ? ((p)[i]) :          \\\n     (MUR_PLUS1_ALIGNED(p) ? MUR_THREE_ONE(p) : \\\n      (MUR_PLUS2_ALIGNED(p) ? MUR_TWO_TWO(p) :  \\\n       MUR_ONE_THREE(p))))\n#endif\n#define MUR_ROTL32(x, r) (((x) << (r)) | ((x) >> (32 - (r))))\n#define MUR_FMIX(_h)       \\\n    do {                   \\\n        _h ^= _h >> 16;    \\\n        _h *= 0x85ebca6b;  \\\n        _h ^= _h >> 13;    \\\n        _h *= 0xc2b2ae35l; \\\n        _h ^= _h >> 16;    \\\n    } while (0)\n\n#define HASH_MUR(key, keylen, num_bkts, hashv, bkt)                  \\\n    do {                                                             \\\n        const uint8_t *_mur_data = (const uint8_t *)(key);           \\\n        const int _mur_nblocks = (keylen) / 4;                       \\\n        uint32_t _mur_h1 = 0xf88D5353;                               \\\n        uint32_t _mur_c1 = 0xcc9e2d51;                               \\\n        uint32_t _mur_c2 = 0x1b873593;                               \\\n        uint32_t _mur_k1 = 0;                                        \\\n        const uint8_t *_mur_tail;                                    \\\n        const uint32_t *_mur_blocks =                                \\\n            (const uint32_t *)(_mur_data + _mur_nblocks * 4);        \\\n        int _mur_i;                                                  \\\n        for (_mur_i = -_mur_nblocks; _mur_i; _mur_i++) {             \\\n            _mur_k1 = MUR_GETBLOCK(_mur_blocks, _mur_i);             \\\n            _mur_k1 *= _mur_c1;                                      \\\n            _mur_k1 = MUR_ROTL32(_mur_k1, 15);                       \\\n            _mur_k1 *= _mur_c2;                                      \\\n                                                                     \\\n            _mur_h1 ^= _mur_k1;                                      \\\n            _mur_h1 = MUR_ROTL32(_mur_h1, 13);                       \\\n            _mur_h1 = _mur_h1 * 5 + 0xe6546b64;                      \\\n        }                                                            \\\n        _mur_tail = (const uint8_t *)(_mur_data + _mur_nblocks * 4); \\\n        _mur_k1 = 0;                                                 \\\n        switch ((keylen) & 3) {                                      \\\n        case 3: _mur_k1 ^= _mur_tail[2] << 16;                       \\\n        case 2: _mur_k1 ^= _mur_tail[1] << 8;                        \\\n        case 1: _mur_k1 ^= _mur_tail[0];                             \\\n            _mur_k1 *= _mur_c1;                                      \\\n            _mur_k1 = MUR_ROTL32(_mur_k1, 15);                       \\\n            _mur_k1 *= _mur_c2;                                      \\\n            _mur_h1 ^= _mur_k1;                                      \\\n        }                                                            \\\n        _mur_h1 ^= (keylen);                                         \\\n        MUR_FMIX(_mur_h1);                                           \\\n        hashv = _mur_h1;                                             \\\n        bkt = hashv & (num_bkts - 1);                                \\\n    } while (0)\n#endif  /* HASH_USING_NO_STRICT_ALIASING */\n\n/* key comparison function; return 0 if keys equal */\n#define HASH_KEYCMP(a, b, len) memcmp(a, b, len)\n\n/* iterate over items in a known bucket to find desired item */\n#define HASH_FIND_IN_BKT(tbl, hh, head, keyptr, keylen_in, out)                 \\\n    do {                                                                        \\\n        if (head.hh_head) { DECLTYPE_ASSIGN(out,                                \\\n                                            ELMT_FROM_HH(tbl, head.hh_head)); } \\\n        else { out = NULL; }                                                    \\\n        while (out) {                                                           \\\n            if ((out)->hh.keylen == keylen_in) {                                \\\n                if ((HASH_KEYCMP((out)->hh.key, keyptr,                         \\\n                                 keylen_in)) == 0) { break; }                   \\\n            }                                                                   \\\n            if ((out)->hh.hh_next) { DECLTYPE_ASSIGN(out,                       \\\n                                                     ELMT_FROM_HH(tbl,          \\\n                                                                  (out)->hh.    \\\n                                                                  hh_next)); }  \\\n            else { out = NULL; }                                                \\\n        }                                                                       \\\n    } while (0)\n\n/* add an item to a bucket  */\n#define HASH_ADD_TO_BKT(head, addhh)                                          \\\n    do {                                                                      \\\n        head.count++;                                                         \\\n        (addhh)->hh_next = head.hh_head;                                      \\\n        (addhh)->hh_prev = NULL;                                              \\\n        if (head.hh_head) { (head).hh_head->hh_prev = (addhh); }              \\\n        (head).hh_head = addhh;                                               \\\n        if (head.count >= ((head.expand_mult + 1) * HASH_BKT_CAPACITY_THRESH) \\\n            && (addhh)->tbl->noexpand != 1) {                                 \\\n            HASH_EXPAND_BUCKETS((addhh)->tbl);                                \\\n        }                                                                     \\\n    } while (0)\n\n/* remove an item from a given bucket */\n#define HASH_DEL_IN_BKT(hh, head, hh_del)           \\\n    (head).count--;                                 \\\n    if ((head).hh_head == hh_del) {                 \\\n        (head).hh_head = hh_del->hh_next;           \\\n    }                                               \\\n    if (hh_del->hh_prev) {                          \\\n        hh_del->hh_prev->hh_next = hh_del->hh_next; \\\n    }                                               \\\n    if (hh_del->hh_next) {                          \\\n        hh_del->hh_next->hh_prev = hh_del->hh_prev; \\\n    }\n\n/* Bucket expansion has the effect of doubling the number of buckets\n * and redistributing the items into the new buckets. Ideally the\n * items will distribute more or less evenly into the new buckets\n * (the extent to which this is true is a measure of the quality of\n * the hash function as it applies to the key domain).\n *\n * With the items distributed into more buckets, the chain length\n * (item count) in each bucket is reduced. Thus by expanding buckets\n * the hash keeps a bound on the chain length. This bounded chain\n * length is the essence of how a hash provides constant time lookup.\n *\n * The calculation of tbl->ideal_chain_maxlen below deserves some\n * explanation. First, keep in mind that we're calculating the ideal\n * maximum chain length based on the *new* (doubled) bucket count.\n * In fractions this is just n/b (n=number of items,b=new num buckets).\n * Since the ideal chain length is an integer, we want to calculate\n * ceil(n/b). We don't depend on floating point arithmetic in this\n * hash, so to calculate ceil(n/b) with integers we could write\n *\n *      ceil(n/b) = (n/b) + ((n%b)?1:0)\n *\n * and in fact a previous version of this hash did just that.\n * But now we have improved things a bit by recognizing that b is\n * always a power of two. We keep its base 2 log handy (call it lb),\n * so now we can write this with a bit shift and logical AND:\n *\n *      ceil(n/b) = (n>>lb) + ( (n & (b-1)) ? 1:0)\n *\n */\n#define HASH_EXPAND_BUCKETS(tbl)                                             \\\n    do {                                                                     \\\n        unsigned _he_bkt;                                                    \\\n        unsigned _he_bkt_i;                                                  \\\n        struct UT_hash_handle *_he_thh, *_he_hh_nxt;                         \\\n        UT_hash_bucket *_he_new_buckets, *_he_newbkt;                        \\\n        _he_new_buckets = (UT_hash_bucket *)uthash_malloc(                   \\\n            2 * tbl->num_buckets * sizeof(struct UT_hash_bucket));           \\\n        if (!_he_new_buckets) { uthash_fatal( \"out of memory\"); }            \\\n        memset(_he_new_buckets, 0,                                           \\\n               2 * tbl->num_buckets * sizeof(struct UT_hash_bucket));        \\\n        tbl->ideal_chain_maxlen =                                            \\\n            (tbl->num_items >> (tbl->log2_num_buckets + 1)) +                \\\n            ((tbl->num_items & ((tbl->num_buckets * 2) - 1)) ? 1 : 0);       \\\n        tbl->nonideal_items = 0;                                             \\\n        for (_he_bkt_i = 0; _he_bkt_i < tbl->num_buckets; _he_bkt_i++)       \\\n        {                                                                    \\\n            _he_thh = tbl->buckets[ _he_bkt_i ].hh_head;                     \\\n            while (_he_thh) {                                                \\\n                _he_hh_nxt = _he_thh->hh_next;                               \\\n                HASH_TO_BKT( _he_thh->hashv, tbl->num_buckets * 2, _he_bkt); \\\n                _he_newbkt = &(_he_new_buckets[ _he_bkt ]);                  \\\n                if (++(_he_newbkt->count) > tbl->ideal_chain_maxlen) {       \\\n                    tbl->nonideal_items++;                                   \\\n                    _he_newbkt->expand_mult = _he_newbkt->count /            \\\n                                              tbl->ideal_chain_maxlen;       \\\n                }                                                            \\\n                _he_thh->hh_prev = NULL;                                     \\\n                _he_thh->hh_next = _he_newbkt->hh_head;                      \\\n                if (_he_newbkt->hh_head) { _he_newbkt->hh_head->hh_prev =    \\\n                                               _he_thh; }                    \\\n                _he_newbkt->hh_head = _he_thh;                               \\\n                _he_thh = _he_hh_nxt;                                        \\\n            }                                                                \\\n        }                                                                    \\\n        uthash_free( tbl->buckets, tbl->num_buckets *                        \\\n                     sizeof(struct UT_hash_bucket) );                        \\\n        tbl->num_buckets *= 2;                                               \\\n        tbl->log2_num_buckets++;                                             \\\n        tbl->buckets = _he_new_buckets;                                      \\\n        tbl->ineff_expands = (tbl->nonideal_items > (tbl->num_items >> 1)) ? \\\n                             (tbl->ineff_expands + 1) : 0;                   \\\n        if (tbl->ineff_expands > 1) {                                        \\\n            tbl->noexpand = 1;                                               \\\n            uthash_noexpand_fyi(tbl);                                        \\\n        }                                                                    \\\n        uthash_expand_fyi(tbl);                                              \\\n    } while (0)\n\n\n/* This is an adaptation of Simon Tatham's O(n log(n)) mergesort */\n/* Note that HASH_SORT assumes the hash handle name to be hh.\n * HASH_SRT was added to allow the hash handle name to be passed in. */\n#define HASH_SORT(head, cmpfcn) HASH_SRT(hh, head, cmpfcn)\n#define HASH_SRT(hh, head, cmpfcn)                                                  \\\n    do {                                                                            \\\n        unsigned _hs_i;                                                             \\\n        unsigned _hs_looping, _hs_nmerges, _hs_insize, _hs_psize, _hs_qsize;        \\\n        struct UT_hash_handle *_hs_p, *_hs_q, *_hs_e, *_hs_list, *_hs_tail;         \\\n        if (head) {                                                                 \\\n            _hs_insize = 1;                                                         \\\n            _hs_looping = 1;                                                        \\\n            _hs_list = &((head)->hh);                                               \\\n            while (_hs_looping) {                                                   \\\n                _hs_p = _hs_list;                                                   \\\n                _hs_list = NULL;                                                    \\\n                _hs_tail = NULL;                                                    \\\n                _hs_nmerges = 0;                                                    \\\n                while (_hs_p) {                                                     \\\n                    _hs_nmerges++;                                                  \\\n                    _hs_q = _hs_p;                                                  \\\n                    _hs_psize = 0;                                                  \\\n                    for (_hs_i = 0; _hs_i < _hs_insize; _hs_i++) {                  \\\n                        _hs_psize++;                                                \\\n                        _hs_q = (UT_hash_handle *)((_hs_q->next) ?                  \\\n                                                   ((void *)((char *)(_hs_q->       \\\n                                                                      next) +       \\\n                                                             (head)->hh.tbl->hho))  \\\n                                                   : NULL);                         \\\n                        if (!(_hs_q) ) { break; }                                   \\\n                    }                                                               \\\n                    _hs_qsize = _hs_insize;                                         \\\n                    while ((_hs_psize > 0) || ((_hs_qsize > 0) && _hs_q )) {        \\\n                        if (_hs_psize == 0) {                                       \\\n                            _hs_e = _hs_q;                                          \\\n                            _hs_q = (UT_hash_handle *)((_hs_q->next) ?              \\\n                                                       ((void *)((char *)(_hs_q     \\\n                                                                          ->next)   \\\n                                                                 +                  \\\n                                                                 (head)->hh.tbl     \\\n                                                                 ->hho)) : NULL);   \\\n                            _hs_qsize--;                                            \\\n                        } else if ( (_hs_qsize == 0) || !(_hs_q) ) {                \\\n                            _hs_e = _hs_p;                                          \\\n                            if (_hs_p) {                                            \\\n                                _hs_p = (UT_hash_handle *)((_hs_p->next) ?          \\\n                                                           ((void *)((char *)(      \\\n                                                                         _hs_p->    \\\n                                                                         next) +    \\\n                                                                     (head)->hh.    \\\n                                                                     tbl->hho))     \\\n                                                           : NULL);                 \\\n                            }                                                       \\\n                            _hs_psize--;                                            \\\n                        } else if ((                                                \\\n                                       cmpfcn(DECLTYPE(head) (ELMT_FROM_HH((head)   \\\n                                                                           ->hh.    \\\n                                                                           tbl,     \\\n                                                                           _hs_p)), \\\n                                              DECLTYPE(head) (ELMT_FROM_HH((head)   \\\n                                                                           ->hh.    \\\n                                                                           tbl,     \\\n                                                                           _hs_q))) \\\n                                       ) <= 0) {                                    \\\n                            _hs_e = _hs_p;                                          \\\n                            if (_hs_p) {                                            \\\n                                _hs_p = (UT_hash_handle *)((_hs_p->next) ?          \\\n                                                           ((void *)((char *)(      \\\n                                                                         _hs_p->    \\\n                                                                         next) +    \\\n                                                                     (head)->hh.    \\\n                                                                     tbl->hho))     \\\n                                                           : NULL);                 \\\n                            }                                                       \\\n                            _hs_psize--;                                            \\\n                        } else {                                                    \\\n                            _hs_e = _hs_q;                                          \\\n                            _hs_q = (UT_hash_handle *)((_hs_q->next) ?              \\\n                                                       ((void *)((char *)(_hs_q     \\\n                                                                          ->next)   \\\n                                                                 +                  \\\n                                                                 (head)->hh.tbl     \\\n                                                                 ->hho)) : NULL);   \\\n                            _hs_qsize--;                                            \\\n                        }                                                           \\\n                        if (_hs_tail) {                                             \\\n                            _hs_tail->next = ((_hs_e) ?                             \\\n                                              ELMT_FROM_HH((head)->hh.tbl,          \\\n                                                           _hs_e) : NULL);          \\\n                        } else {                                                    \\\n                            _hs_list = _hs_e;                                       \\\n                        }                                                           \\\n                        if (_hs_e) {                                                \\\n                            _hs_e->prev = ((_hs_tail) ?                             \\\n                                           ELMT_FROM_HH((head)->hh.tbl,             \\\n                                                        _hs_tail) : NULL);          \\\n                        }                                                           \\\n                        _hs_tail = _hs_e;                                           \\\n                    }                                                               \\\n                    _hs_p = _hs_q;                                                  \\\n                }                                                                   \\\n                if (_hs_tail) {                                                     \\\n                    _hs_tail->next = NULL;                                          \\\n                }                                                                   \\\n                if (_hs_nmerges <= 1) {                                             \\\n                    _hs_looping = 0;                                                \\\n                    (head)->hh.tbl->tail = _hs_tail;                                \\\n                    DECLTYPE_ASSIGN(head,                                           \\\n                                    ELMT_FROM_HH((head)->hh.tbl, _hs_list));        \\\n                }                                                                   \\\n                _hs_insize *= 2;                                                    \\\n            }                                                                       \\\n            HASH_FSCK(hh, head);                                                    \\\n        }                                                                           \\\n    } while (0)\n\n/* This function selects items from one hash into another hash.\n * The end result is that the selected items have dual presence\n * in both hashes. There is no copy of the items made; rather\n * they are added into the new hash through a secondary hash\n * hash handle that must be present in the structure. */\n#define HASH_SELECT(hh_dst, dst, hh_src, src, cond)                              \\\n    do {                                                                         \\\n        unsigned _src_bkt, _dst_bkt;                                             \\\n        void *_last_elt = NULL, *_elt;                                           \\\n        UT_hash_handle *_src_hh, *_dst_hh, *_last_elt_hh = NULL;                 \\\n        ptrdiff_t _dst_hho = ((char *)(&(dst)->hh_dst) - (char *)(dst));         \\\n        if (src) {                                                               \\\n            for (_src_bkt = 0; _src_bkt < (src)->hh_src.tbl->num_buckets;        \\\n                 _src_bkt++) {                                                   \\\n                for (_src_hh = (src)->hh_src.tbl->buckets[_src_bkt].hh_head;     \\\n                     _src_hh;                                                    \\\n                     _src_hh = _src_hh->hh_next) {                               \\\n                    _elt = ELMT_FROM_HH((src)->hh_src.tbl, _src_hh);             \\\n                    if (cond(_elt)) {                                            \\\n                        _dst_hh = (UT_hash_handle *)(((char *)_elt) + _dst_hho); \\\n                        _dst_hh->key = _src_hh->key;                             \\\n                        _dst_hh->keylen = _src_hh->keylen;                       \\\n                        _dst_hh->hashv = _src_hh->hashv;                         \\\n                        _dst_hh->prev = _last_elt;                               \\\n                        _dst_hh->next = NULL;                                    \\\n                        if (_last_elt_hh) { _last_elt_hh->next = _elt; }         \\\n                        if (!dst) {                                              \\\n                            DECLTYPE_ASSIGN(dst, _elt);                          \\\n                            HASH_MAKE_TABLE(hh_dst, dst);                        \\\n                        } else {                                                 \\\n                            _dst_hh->tbl = (dst)->hh_dst.tbl;                    \\\n                        }                                                        \\\n                        HASH_TO_BKT(_dst_hh->hashv, _dst_hh->tbl->num_buckets,   \\\n                                    _dst_bkt);                                   \\\n                        HASH_ADD_TO_BKT(_dst_hh->tbl->buckets[_dst_bkt],         \\\n                                        _dst_hh);                                \\\n                        (dst)->hh_dst.tbl->num_items++;                          \\\n                        _last_elt = _elt;                                        \\\n                        _last_elt_hh = _dst_hh;                                  \\\n                    }                                                            \\\n                }                                                                \\\n            }                                                                    \\\n        }                                                                        \\\n        HASH_FSCK(hh_dst, dst);                                                  \\\n    } while (0)\n\n#define HASH_CLEAR(hh, head)                                    \\\n    do {                                                        \\\n        if (head) {                                             \\\n            uthash_free((head)->hh.tbl->buckets,                \\\n                        (head)->hh.tbl->num_buckets *           \\\n                        sizeof(struct UT_hash_bucket));         \\\n            HASH_BLOOM_FREE((head)->hh.tbl);                    \\\n            uthash_free((head)->hh.tbl, sizeof(UT_hash_table)); \\\n            (head) = NULL;                                      \\\n        }                                                       \\\n    } while (0)\n\n#define HASH_OVERHEAD(hh, head)                                        \\\n    (size_t)((((head)->hh.tbl->num_items * sizeof(UT_hash_handle)) +   \\\n              ((head)->hh.tbl->num_buckets * sizeof(UT_hash_bucket)) + \\\n              (sizeof(UT_hash_table)) +                                \\\n              (HASH_BLOOM_BYTELEN)))\n\n#ifdef NO_DECLTYPE\n#define HASH_ITER(hh, head, el, tmp)                                       \\\n    for ((el) = (head),                                                    \\\n         (*(char **)(&(tmp))) = (char *)((head) ? (head)->hh.next : NULL); \\\n         el;                                                               \\\n         (el) = (tmp), (*(char **)(&(tmp))) =                              \\\n             (char *)((tmp) ? (tmp)->hh.next : NULL))\n#else\n#define HASH_ITER(hh, head, el, tmp)                                            \\\n    for ((el) = (head), (tmp) = DECLTYPE(el) ((head) ? (head)->hh.next : NULL); \\\n         el; (el) = (tmp), (tmp) = DECLTYPE(el) ((tmp) ? (tmp)->hh.next : NULL))\n#endif\n\n/* obtain a count of items in the hash */\n#define HASH_COUNT(head) HASH_CNT(hh, head)\n#define HASH_CNT(hh, head) ((head) ? ((head)->hh.tbl->num_items) : 0)\n\ntypedef struct UT_hash_bucket {\n    struct UT_hash_handle *hh_head;\n    unsigned count;\n\n    /* expand_mult is normally set to 0. In this situation, the max chain length\n     * threshold is enforced at its default value, HASH_BKT_CAPACITY_THRESH. (If\n     * the bucket's chain exceeds this length, bucket expansion is triggered).\n     * However, setting expand_mult to a non-zero value delays bucket expansion\n     * (that would be triggered by additions to this particular bucket)\n     * until its chain length reaches a *multiple* of HASH_BKT_CAPACITY_THRESH.\n     * (The multiplier is simply expand_mult+1). The whole idea of this\n     * multiplier is to reduce bucket expansions, since they are expensive, in\n     * situations where we know that a particular bucket tends to be overused.\n     * It is better to let its chain length grow to a longer yet-still-bounded\n     * value, than to do an O(n) bucket expansion too often.\n     */\n    unsigned expand_mult;\n\n} UT_hash_bucket;\n\n/* random signature used only to find hash tables in external analysis */\n#define HASH_SIGNATURE 0xa0111fe1\n#define HASH_BLOOM_SIGNATURE 0xb12220f2\n\ntypedef struct UT_hash_table {\n    UT_hash_bucket *buckets;\n    unsigned num_buckets, log2_num_buckets;\n    unsigned num_items;\n    struct UT_hash_handle *tail; /* tail hh in app order, for fast append    */\n    ptrdiff_t hho;               /* hash handle offset (byte pos of hash handle in element */\n\n    /* in an ideal situation (all buckets used equally), no bucket would have\n     * more than ceil(#items/#buckets) items. that's the ideal chain length. */\n    unsigned ideal_chain_maxlen;\n\n    /* nonideal_items is the number of items in the hash whose chain position\n     * exceeds the ideal chain maxlen. these items pay the penalty for an uneven\n     * hash distribution; reaching them in a chain traversal takes >ideal steps */\n    unsigned nonideal_items;\n\n    /* ineffective expands occur when a bucket doubling was performed, but\n     * afterward, more than half the items in the hash had nonideal chain\n     * positions. If this happens on two consecutive expansions we inhibit any\n     * further expansion, as it's not helping; this happens when the hash\n     * function isn't a good fit for the key domain. When expansion is inhibited\n     * the hash will still work, albeit no longer in constant time. */\n    unsigned ineff_expands, noexpand;\n\n    uint32_t signature; /* used only to find hash tables in external analysis */\n#ifdef HASH_BLOOM\n    uint32_t bloom_sig; /* used only to test bloom exists in external analysis */\n    uint8_t *bloom_bv;\n    char bloom_nbits;\n#endif\n\n} UT_hash_table;\n\ntypedef struct UT_hash_handle {\n    struct UT_hash_table *tbl;\n    void *prev;                       /* prev element in app order      */\n    void *next;                       /* next element in app order      */\n    struct UT_hash_handle *hh_prev;   /* previous hh in bucket order    */\n    struct UT_hash_handle *hh_next;   /* next hh in bucket order        */\n    void *key;                        /* ptr to enclosing struct's key  */\n    unsigned keylen;                  /* enclosing struct's key len     */\n    unsigned hashv;                   /* result of hash-fcn(key)        */\n} UT_hash_handle;\n\n#endif /* UTHASH_H */\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/utils.c",
    "content": "/*\n * utils.c - Misc utilities\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifdef HAVE_CONFIG_H\n#include \"config.h\"\n#endif\n\n#include <stdlib.h>\n#include <unistd.h>\n#include <string.h>\n#include <errno.h>\n#ifndef __MINGW32__\n#include <pwd.h>\n#endif\n\n#include <sys/types.h>\n#include <sys/stat.h>\n\n#include \"utils.h\"\n\n#ifdef HAVE_SETRLIMIT\n#include <sys/time.h>\n#include <sys/resource.h>\n#endif\n\n#define INT_DIGITS 19           /* enough for 64 bit integer */\n\n#ifdef LIB_ONLY\nFILE *logfile;\n#endif\n\n#ifdef HAS_SYSLOG\nint use_syslog = 0;\n#endif\n\n#ifndef __MINGW32__\nvoid ERROR(const char *s)\n{\n    char *msg = strerror(errno);\n    LOGE(\"%s: %s\", s, msg);\n}\n\n#endif\n\nint use_tty = 1;\n\nchar *ss_itoa(int i)\n{\n    /* Room for INT_DIGITS digits, - and '\\0' */\n    static char buf[INT_DIGITS + 2];\n    char *p = buf + INT_DIGITS + 1;     /* points to terminating '\\0' */\n    if (i >= 0) {\n        do {\n            *--p = '0' + (i % 10);\n            i   /= 10;\n        } while (i != 0);\n        return p;\n    } else {                     /* i < 0 */\n        do {\n            *--p = '0' - (i % 10);\n            i   /= 10;\n        } while (i != 0);\n        *--p = '-';\n    }\n    return p;\n}\n\n/*\n * setuid() and setgid() for a specified user.\n */\nint run_as(const char *user)\n{\n#ifndef __MINGW32__\n    if (user[0]) {\n#ifdef HAVE_GETPWNAM_R\n        struct passwd pwdbuf, *pwd;\n        size_t buflen;\n        int err;\n\n        for (buflen = 128;; buflen *= 2) {\n            char buf[buflen];  /* variable length array */\n\n            /* Note that we use getpwnam_r() instead of getpwnam(),\n             * which returns its result in a statically allocated buffer and\n             * cannot be considered thread safe. */\n            err = getpwnam_r(user, &pwdbuf, buf, buflen, &pwd);\n\n            if (err == 0 && pwd) {\n                /* setgid first, because we may not be allowed to do it anymore after setuid */\n                if (setgid(pwd->pw_gid) != 0) {\n                    LOGE(\n                        \"Could not change group id to that of run_as user '%s': %s\",\n                        user, strerror(errno));\n                    return 0;\n                }\n\n                if (setuid(pwd->pw_uid) != 0) {\n                    LOGE(\n                        \"Could not change user id to that of run_as user '%s': %s\",\n                        user, strerror(errno));\n                    return 0;\n                }\n                break;\n            } else if (err != ERANGE) {\n                if (err) {\n                    LOGE(\"run_as user '%s' could not be found: %s\", user, strerror(\n                             err));\n                } else {\n                    LOGE(\"run_as user '%s' could not be found.\", user);\n                }\n                return 0;\n            } else if (buflen >= 16 * 1024) {\n                /* If getpwnam_r() seems defective, call it quits rather than\n                 * keep on allocating ever larger buffers until we crash. */\n                LOGE(\n                    \"getpwnam_r() requires more than %u bytes of buffer space.\",\n                    (unsigned)buflen);\n                return 0;\n            }\n            /* Else try again with larger buffer. */\n        }\n#else\n        /* No getpwnam_r() :-(  We'll use getpwnam() and hope for the best. */\n        struct passwd *pwd;\n\n        if (!(pwd = getpwnam(user))) {\n            LOGE(\"run_as user %s could not be found.\", user);\n            return 0;\n        }\n        /* setgid first, because we may not allowed to do it anymore after setuid */\n        if (setgid(pwd->pw_gid) != 0) {\n            LOGE(\"Could not change group id to that of run_as user '%s': %s\",\n                 user, strerror(errno));\n            return 0;\n        }\n        if (setuid(pwd->pw_uid) != 0) {\n            LOGE(\"Could not change user id to that of run_as user '%s': %s\",\n                 user, strerror(errno));\n            return 0;\n        }\n#endif\n    }\n\n#endif // __MINGW32__\n    return 1;\n}\n\nchar *ss_strndup(const char *s, size_t n)\n{\n    size_t len = strlen(s);\n    char *ret;\n\n    if (len <= n) {\n        return strdup(s);\n    }\n\n    ret = malloc(n + 1);\n    strncpy(ret, s, n);\n    ret[n] = '\\0';\n    return ret;\n}\n\nvoid FATAL(const char *msg)\n{\n    LOGE(\"%s\", msg);\n    exit(-1);\n}\n\nvoid *ss_malloc(size_t size)\n{\n    void *tmp = malloc(size);\n    if (tmp == NULL)\n        exit(EXIT_FAILURE);\n    return tmp;\n}\n\nvoid *ss_realloc(void *ptr, size_t new_size)\n{\n    void *new = realloc(ptr, new_size);\n    if (new == NULL) {\n        free(ptr);\n        ptr = NULL;\n        exit(EXIT_FAILURE);\n    }\n    return new;\n}\n\n\nvoid usage()\n{\n    printf(\"\\n\");\n    printf(\"shadowsocks-libev %s\\n\\n\", VERSION);\n    printf(\n        \"  maintained by Max Lv <max.c.lv@gmail.com> and Linus Yang <laokongzi@gmail.com>\\n\\n\");\n    printf(\"  usage:\\n\\n\");\n#ifdef MODULE_LOCAL\n    printf(\"    ss-local\\n\");\n#elif MODULE_REMOTE\n    printf(\"    ss-server\\n\");\n#elif MODULE_TUNNEL\n    printf(\"    ss-tunnel\\n\");\n#elif MODULE_REDIR\n    printf(\"    ss-redir\\n\");\n#elif MODULE_MANAGER\n    printf(\"    ss-manager\\n\");\n#endif\n    printf(\"\\n\");\n    printf(\n        \"       -s <server_host>           Host name or IP address of your remote server.\\n\");\n    printf(\n        \"       -p <server_port>           Port number of your remote server.\\n\");\n    printf(\n        \"       -l <local_port>            Port number of your local server.\\n\");\n    printf(\n        \"       -k <password>              Password of your remote server.\\n\");\n    printf(\n        \"       -m <encrypt_method>        Encrypt method: table, rc4, rc4-md5,\\n\");\n    printf(\n        \"                                  aes-128-cfb, aes-192-cfb, aes-256-cfb,\\n\");\n    printf(\n        \"                                  bf-cfb, camellia-128-cfb, camellia-192-cfb,\\n\");\n    printf(\n        \"                                  camellia-256-cfb, cast5-cfb, des-cfb,\\n\");\n    printf(\n        \"                                  idea-cfb, rc2-cfb, seed-cfb, salsa20,\\n\");\n    printf(\n        \"                                  chacha20 and chacha20-ietf.\\n\");\n    printf(\n        \"                                  The default cipher is tables.\\n\");\n    printf(\"\\n\");\n    printf(\n        \"       [-a <user>]                Run as another user.\\n\");\n    printf(\n        \"       [-f <pid_file>]            The file path to store pid.\\n\");\n    printf(\n        \"       [-t <timeout>]             Socket timeout in seconds.\\n\");\n    printf(\n        \"       [-c <config_file>]         The path to config file.\\n\");\n#ifdef HAVE_SETRLIMIT\n    printf(\n        \"       [-n <number>]              Max number of open files.\\n\");\n#endif\n#ifndef MODULE_REDIR\n    printf(\n        \"       [-i <interface>]           Network interface to bind.\\n\");\n#endif\n    printf(\n        \"       [-b <local_address>]       Local address to bind.\\n\");\n    printf(\"\\n\");\n    printf(\n        \"       [-u]                       Enable UDP relay,\\n\");\n#ifdef MODULE_REDIR\n    printf(\n        \"                                  TPROXY is required in redir mode.\\n\");\n#endif\n    printf(\n        \"       [-U]                       Enable UDP relay and disable TCP relay.\\n\");\n    printf(\n        \"       [-A]                       Enable onetime authentication.\\n\");\n#ifdef MODULE_REMOTE\n    printf(\n        \"       [-6]                       Resovle hostname to IPv6 address first.\\n\");\n    printf(\n        \"       [-w]                       Enable white list mode (when ACL enabled).\\n\");\n#endif\n    printf(\"\\n\");\n#ifdef MODULE_TUNNEL\n    printf(\n        \"       [-L <addr>:<port>]         Destination server address and port\\n\");\n    printf(\n        \"                                  for local port forwarding.\\n\");\n#endif\n#ifdef MODULE_REMOTE\n    printf(\n        \"       [-d <addr>]                Name servers for internal DNS resolver.\\n\");\n#endif\n#if defined(MODULE_REMOTE) || defined(MODULE_LOCAL)\n    printf(\n        \"       [--fast-open]              Enable TCP fast open.\\n\");\n    printf(\n        \"                                  with Linux kernel > 3.7.0.\\n\");\n    printf(\n        \"       [--acl <acl_file>]         Path to ACL (Access Control List).\\n\");\n#endif\n#if defined(MODULE_REMOTE) || defined(MODULE_MANAGER)\n    printf(\n        \"       [--manager-address <addr>] UNIX domain socket address.\\n\");\n#endif\n#ifdef MODULE_MANAGER\n    printf(\n        \"       [--executable <path>]      Path to the executable of ss-server.\\n\");\n#endif\n    printf(\n        \"       [--mtu <MTU>]              MTU of your network interface.\\n\");\n    printf(\n        \"       [--mptcp]                  Enable Multipath TCP on MPTCP Kernel.\\n\");\n    printf(\"\\n\");\n    printf(\n        \"       [-v]                       Verbose mode.\\n\");\n    printf(\n        \"       [-h, --help]               Print this message.\\n\");\n    printf(\"\\n\");\n}\n\nvoid daemonize(const char *path)\n{\n#ifndef __MINGW32__\n    /* Our process ID and Session ID */\n    pid_t pid, sid;\n\n    /* Fork off the parent process */\n    pid = fork();\n    if (pid < 0) {\n        exit(EXIT_FAILURE);\n    }\n\n    /* If we got a good PID, then\n     * we can exit the parent process. */\n    if (pid > 0) {\n        FILE *file = fopen(path, \"w\");\n        if (file == NULL) {\n            FATAL(\"Invalid pid file\\n\");\n        }\n\n        fprintf(file, \"%d\", (int)pid);\n        fclose(file);\n        exit(EXIT_SUCCESS);\n    }\n\n    /* Change the file mode mask */\n    umask(0);\n\n    /* Open any logs here */\n\n    /* Create a new SID for the child process */\n    sid = setsid();\n    if (sid < 0) {\n        /* Log the failure */\n        exit(EXIT_FAILURE);\n    }\n\n    /* Change the current working directory */\n    if ((chdir(\"/\")) < 0) {\n        /* Log the failure */\n        exit(EXIT_FAILURE);\n    }\n\n    /* Close out the standard file descriptors */\n    close(STDIN_FILENO);\n    close(STDOUT_FILENO);\n    close(STDERR_FILENO);\n#endif\n}\n\n#ifdef HAVE_SETRLIMIT\nint set_nofile(int nofile)\n{\n    struct rlimit limit = { nofile, nofile }; /* set both soft and hard limit */\n\n    if (nofile <= 0) {\n        FATAL(\"nofile must be greater than 0\\n\");\n    }\n\n    if (setrlimit(RLIMIT_NOFILE, &limit) < 0) {\n        if (errno == EPERM) {\n            LOGE(\n                \"insufficient permission to change NOFILE, not starting as root?\");\n            return -1;\n        } else if (errno == EINVAL) {\n            LOGE(\"invalid nofile, decrease nofile and try again\");\n            return -1;\n        } else {\n            LOGE(\"setrlimit failed: %s\", strerror(errno));\n            return -1;\n        }\n    }\n\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/utils.h",
    "content": "/*\n * utils.h - Misc utilities\n *\n * Copyright (C) 2013 - 2016, Max Lv <max.c.lv@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _UTILS_H\n#define _UTILS_H\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <time.h>\n\n#define PORTSTRLEN 16\n#define SS_ADDRSTRLEN (INET6_ADDRSTRLEN + PORTSTRLEN + 1)\n\n#ifdef ANDROID\n\n#include <android/log.h>\n\n#define USE_TTY()\n#define USE_SYSLOG(ident)\n#define LOGI(...)                                                \\\n    ((void)__android_log_print(ANDROID_LOG_DEBUG, \"shadowsocks\", \\\n                               __VA_ARGS__))\n#define LOGE(...)                                                \\\n    ((void)__android_log_print(ANDROID_LOG_ERROR, \"shadowsocks\", \\\n                               __VA_ARGS__))\n\n#else\n\n#define STR(x) # x\n#define TOSTR(x) STR(x)\n\n#ifdef LIB_ONLY\n\nextern FILE *logfile;\n\n#define TIME_FORMAT \"%Y-%m-%d %H:%M:%S\"\n\n#define USE_TTY()\n\n#define USE_SYSLOG(ident)\n\n#define USE_LOGFILE(ident)                                     \\\n    do {                                                       \\\n        if (ident != NULL) { logfile = fopen(ident, \"w+\"); } } \\\n    while (0)\n\n#define CLOSE_LOGFILE                               \\\n    do {                                            \\\n        if (logfile != NULL) { fclose(logfile); } } \\\n    while (0)\n\n#define LOGI(format, ...)                                                        \\\n    do {                                                                         \\\n        if (logfile != NULL) {                                                   \\\n            time_t now = time(NULL);                                             \\\n            char timestr[20];                                                    \\\n            strftime(timestr, 20, TIME_FORMAT, localtime(&now));                 \\\n            fprintf(logfile, \" %s INFO: \" format \"\\n\", timestr, ## __VA_ARGS__); \\\n            fflush(logfile); }                                                   \\\n    }                                                                            \\\n    while (0)\n\n#define LOGE(format, ...)                                        \\\n    do {                                                         \\\n        if (logfile != NULL) {                                   \\\n            time_t now = time(NULL);                             \\\n            char timestr[20];                                    \\\n            strftime(timestr, 20, TIME_FORMAT, localtime(&now)); \\\n            fprintf(logfile, \" %s ERROR: \" format \"\\n\", timestr, \\\n                    ## __VA_ARGS__);                             \\\n            fflush(logfile); }                                   \\\n    }                                                            \\\n    while (0)\n\n#elif defined(_WIN32)\n\n#define TIME_FORMAT \"%Y-%m-%d %H:%M:%S\"\n\n#define USE_TTY()\n\n#define USE_SYSLOG(ident)\n\n#define LOGI(format, ...)                                                   \\\n    do {                                                                    \\\n        time_t now = time(NULL);                                            \\\n        char timestr[20];                                                   \\\n        strftime(timestr, 20, TIME_FORMAT, localtime(&now));                \\\n        fprintf(stderr, \" %s INFO: \" format \"\\n\", timestr, ## __VA_ARGS__); \\\n        fflush(stderr); }                                                   \\\n    while (0)\n\n#define LOGE(format, ...)                                                    \\\n    do {                                                                     \\\n        time_t now = time(NULL);                                             \\\n        char timestr[20];                                                    \\\n        strftime(timestr, 20, TIME_FORMAT, localtime(&now));                 \\\n        fprintf(stderr, \" %s ERROR: \" format \"\\n\", timestr, ## __VA_ARGS__); \\\n        fflush(stderr); }                                                    \\\n    while (0)\n\n#else\n\n#include <syslog.h>\n\nextern int use_tty;\n#define USE_TTY()                        \\\n    do {                                 \\\n        use_tty = isatty(STDERR_FILENO); \\\n    } while (0)                          \\\n\n#define HAS_SYSLOG\nextern int use_syslog;\n\n#define TIME_FORMAT \"%F %T\"\n\n#define USE_SYSLOG(ident)                          \\\n    do {                                           \\\n        use_syslog = 1;                            \\\n        openlog((ident), LOG_CONS | LOG_PID, 0); } \\\n    while (0)\n\n#define LOGI(format, ...)                                                        \\\n    do {                                                                         \\\n        if (use_syslog) {                                                        \\\n            syslog(LOG_INFO, format, ## __VA_ARGS__);                            \\\n        } else {                                                                 \\\n            time_t now = time(NULL);                                             \\\n            char timestr[20];                                                    \\\n            strftime(timestr, 20, TIME_FORMAT, localtime(&now));                 \\\n            if (use_tty) {                                                       \\\n                fprintf(stderr, \"\\e[01;32m %s INFO: \\e[0m\" format \"\\n\", timestr, \\\n                        ## __VA_ARGS__);                                         \\\n            } else {                                                             \\\n                fprintf(stderr, \" %s INFO: \" format \"\\n\", timestr,               \\\n                        ## __VA_ARGS__);                                         \\\n            }                                                                    \\\n        }                                                                        \\\n    }                                                                            \\\n    while (0)\n\n#define LOGE(format, ...)                                                         \\\n    do {                                                                          \\\n        if (use_syslog) {                                                         \\\n            syslog(LOG_ERR, format, ## __VA_ARGS__);                              \\\n        } else {                                                                  \\\n            time_t now = time(NULL);                                              \\\n            char timestr[20];                                                     \\\n            strftime(timestr, 20, TIME_FORMAT, localtime(&now));                  \\\n            if (use_tty) {                                                        \\\n                fprintf(stderr, \"\\e[01;35m %s ERROR: \\e[0m\" format \"\\n\", timestr, \\\n                        ## __VA_ARGS__);                                          \\\n            } else {                                                              \\\n                fprintf(stderr, \" %s ERROR: \" format \"\\n\", timestr,               \\\n                        ## __VA_ARGS__);                                          \\\n            }                                                                     \\\n        } }                                                                       \\\n    while (0)\n\n#endif\n/* _WIN32 */\n\n#endif\n\n#ifdef __MINGW32__\n\n#ifdef ERROR\n#undef ERROR\n#endif\n#define ERROR(s) ss_error(s)\n\n#else\n\nvoid ERROR(const char *s);\n\n#endif\n\nchar *ss_itoa(int i);\nint run_as(const char *user);\nvoid FATAL(const char *msg);\nvoid usage(void);\nvoid daemonize(const char *path);\nchar *ss_strndup(const char *s, size_t n);\n#ifdef HAVE_SETRLIMIT\nint set_nofile(int nofile);\n#endif\n\nvoid *ss_malloc(size_t size);\nvoid *ss_realloc(void *ptr, size_t new_size);\n\n#define ss_free(ptr)     \\\n    do {                 \\\n        free(ptr);       \\\n        ptr = NULL;      \\\n    } while(0)\n\n#endif // _UTILS_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/verify.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n#include \"verify.h\"\n#include \"crc32.h\"\n\nstatic int verify_simple_pack_unit_size = 2000;\n\ntypedef struct verify_simple_local_data {\n    char * recv_buffer;\n    int recv_buffer_size;\n}verify_simple_local_data;\n\nvoid verify_simple_local_data_init(verify_simple_local_data* local) {\n    local->recv_buffer = (char*)malloc(16384);\n    local->recv_buffer_size = 0;\n}\n\nobfs * verify_simple_new_obfs() {\n    obfs * self = new_obfs();\n    self->l_data = malloc(sizeof(verify_simple_local_data));\n    verify_simple_local_data_init((verify_simple_local_data*)self->l_data);\n    return self;\n}\n\nvoid verify_simple_dispose(obfs *self) {\n    verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;\n    if (local->recv_buffer != NULL) {\n        free(local->recv_buffer);\n        local->recv_buffer = NULL;\n    }\n    free(local);\n    self->l_data = NULL;\n    dispose_obfs(self);\n}\n\nint verify_simple_pack_data(char *data, int datalength, char *outdata) {\n    unsigned char rand_len = (xorshift128plus() & 0xF) + 1;\n    int out_size = rand_len + datalength + 6;\n    outdata[0] = out_size >> 8;\n    outdata[1] = out_size;\n    outdata[2] = rand_len;\n    memmove(outdata + rand_len + 2, data, datalength);\n    fillcrc32((unsigned char *)outdata, out_size);\n    return out_size;\n}\n\nint verify_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) {\n    char *plaindata = *pplaindata;\n    //verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;\n    char * out_buffer = (char*)malloc(datalength * 2 + 32);\n    char * buffer = out_buffer;\n    char * data = plaindata;\n    int len = datalength;\n    int pack_len;\n    while ( len > verify_simple_pack_unit_size ) {\n        pack_len = verify_simple_pack_data(data, verify_simple_pack_unit_size, buffer);\n        buffer += pack_len;\n        data += verify_simple_pack_unit_size;\n        len -= verify_simple_pack_unit_size;\n    }\n    if (len > 0) {\n        pack_len = verify_simple_pack_data(data, len, buffer);\n        buffer += pack_len;\n    }\n    len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\nint verify_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t *capacity) {\n    char *plaindata = *pplaindata;\n    verify_simple_local_data *local = (verify_simple_local_data*)self->l_data;\n    uint8_t * recv_buffer = (uint8_t *)local->recv_buffer;\n    if (local->recv_buffer_size + datalength > 16384)\n        return -1;\n    memmove(recv_buffer + local->recv_buffer_size, plaindata, datalength);\n    local->recv_buffer_size += datalength;\n\n    char * out_buffer = (char*)malloc(local->recv_buffer_size);\n    char * buffer = out_buffer;\n    while (local->recv_buffer_size > 2) {\n        int length = ((int)recv_buffer[0] << 8) | recv_buffer[1];\n        if (length >= 8192 || length < 7) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        if (length > local->recv_buffer_size)\n            break;\n\n        int crc = crc32((unsigned char*)recv_buffer, length);\n        if (crc != -1) {\n            free(out_buffer);\n            local->recv_buffer_size = 0;\n            return -1;\n        }\n        int data_size = length - recv_buffer[2] - 6;\n        memmove(buffer, recv_buffer + 2 + recv_buffer[2], data_size);\n        buffer += data_size;\n        memmove(recv_buffer, recv_buffer + length, local->recv_buffer_size -= length);\n    }\n    int len = buffer - out_buffer;\n    if (*capacity < len) {\n        *pplaindata = (char*)realloc(*pplaindata, *capacity = len * 2);\n        plaindata = *pplaindata;\n    }\n    memmove(plaindata, out_buffer, len);\n    free(out_buffer);\n    return len;\n}\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/verify.h",
    "content": "/*\n * verify.h - Define shadowsocks server's buffers and callbacks\n *\n * Copyright (C) 2015 - 2015, Break Wa11 <mmgac001@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _VERIFY_H\n#define _VERIFY_H\n\n#include \"obfs.h\"\n\nobfs * verify_simple_new_obfs();\nvoid verify_simple_dispose(obfs *self);\n\nint verify_simple_client_pre_encrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\nint verify_simple_client_post_decrypt(obfs *self, char **pplaindata, int datalength, size_t* capacity);\n\n#endif // _VERIFY_H\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/win32.c",
    "content": "/*\n * win32.c - Win32 port helpers\n *\n * Copyright (C) 2014, Linus Yang <linusyang@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#include \"win32.h\"\n#include \"utils.h\"\n\n#ifdef setsockopt\n#undef setsockopt\n#endif\n\nvoid winsock_init(void)\n{\n    WORD wVersionRequested;\n    WSADATA wsaData;\n    int ret;\n    wVersionRequested = MAKEWORD(1, 1);\n    ret               = WSAStartup(wVersionRequested, &wsaData);\n    if (ret != 0) {\n        FATAL(\"Could not initialize winsock\");\n    }\n    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) {\n        WSACleanup();\n        FATAL(\"Could not find a usable version of winsock\");\n    }\n}\n\nvoid winsock_cleanup(void)\n{\n    WSACleanup();\n}\n\nvoid ss_error(const char *s)\n{\n    LPVOID *msg = NULL;\n    FormatMessage(\n        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,\n        NULL, WSAGetLastError(),\n        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n        (LPTSTR)&msg, 0, NULL);\n    if (msg != NULL) {\n        LOGE(\"%s: %s\", s, (char *)msg);\n        LocalFree(msg);\n    }\n}\n\nint setnonblocking(int fd)\n{\n    u_long iMode = 1;\n    long int iResult;\n    iResult = ioctlsocket(fd, FIONBIO, &iMode);\n    if (iResult != NO_ERROR) {\n        LOGE(\"ioctlsocket failed with error: %ld\\n\", iResult);\n    }\n    return iResult;\n}\n\nsize_t strnlen(const char *s, size_t maxlen)\n{\n    const char *end = memchr(s, 0, maxlen);\n    return end ? (size_t)(end - s) : maxlen;\n}\n\nconst char *inet_ntop(int af, const void *src, char *dst, socklen_t size)\n{\n    struct sockaddr_storage ss;\n    unsigned long s = size;\n    ZeroMemory(&ss, sizeof(ss));\n    ss.ss_family = af;\n    switch (af) {\n    case AF_INET:\n        ((struct sockaddr_in *)&ss)->sin_addr = *(struct in_addr *)src;\n        break;\n    case AF_INET6:\n        ((struct sockaddr_in6 *)&ss)->sin6_addr = *(struct in6_addr *)src;\n        break;\n    default:\n        return NULL;\n    }\n    return (WSAAddressToString((struct sockaddr *)&ss, sizeof(ss), NULL, dst,\n                               &s) == 0) ? dst : NULL;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath/shadowsocks-libev/src/win32.h",
    "content": "/*\n * win32.h - Win32 port helpers\n *\n * Copyright (C) 2014, Linus Yang <linusyang@gmail.com>\n *\n * This file is part of the shadowsocks-libev.\n *\n * shadowsocks-libev 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 * shadowsocks-libev 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 shadowsocks-libev; see the file COPYING. If not, see\n * <http://www.gnu.org/licenses/>.\n */\n\n#ifndef _WIN32_H\n#define _WIN32_H\n\n#ifdef _WIN32_WINNT\n#undef _WIN32_WINNT\n#endif\n\n#define _WIN32_WINNT 0x0501\n\n#include <winsock2.h>\n#include <ws2tcpip.h>\n\n#ifdef EWOULDBLOCK\n#undef EWOULDBLOCK\n#endif\n\n#ifdef errno\n#undef errno\n#endif\n\n#ifdef ERROR\n#undef ERROR\n#endif\n\n#ifndef AI_ALL\n#define AI_ALL 0x00000100\n#endif\n\n#ifndef AI_ADDRCONFIG\n#define AI_ADDRCONFIG 0x00000400\n#endif\n\n#ifndef AI_V4MAPPED\n#define AI_V4MAPPED 0x00000800\n#endif\n\n#ifndef IPV6_V6ONLY\n#define IPV6_V6ONLY 27 // Treat wildcard bind as AF_INET6-only.\n#endif\n\n#define EWOULDBLOCK WSAEWOULDBLOCK\n#define errno WSAGetLastError()\n#define close(fd) closesocket(fd)\n#define ERROR(s) ss_error(s)\n#define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (char *)(d), e)\n\nvoid winsock_init(void);\nvoid winsock_cleanup(void);\nvoid ss_error(const char *s);\nsize_t strnlen(const char *s, size_t maxlen);\nint setnonblocking(int fd);\nconst char *inet_ntop(int af, const void *src, char *dst, socklen_t size);\n\n#endif\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name         = \"ShadowPath\"\n  s.version      = \"0.1.0\"\n  s.summary      = \"Http and Socks proxy based on Privoxy and Antinat\"\n  s.description  = <<-DESC\n                   Http and Socks proxy based on Privoxy and Antinat.\n                   DESC\n  s.homepage     = \"http://icodesign.me\"\n  s.license      = \"GPLv2\"\n  s.author        = { \"iCodesign\" => \"leimagnet@gmail.com\" }\n  s.ios.deployment_target = '7.0'\n  s.osx.deployment_target = '10.9'\n  s.source_files  = \"ShadowPath\", \"ShadowPath/**/*.{c,h,m,swift}\"\n  s.libraries = \"z\" \n  s.pod_target_xcconfig = { \n    'OTHER_CFLAGS' => '-DHAVE_CONFIG_H -DUSE_CRYPTO_OPENSSL -DLIB_ONLY -DUDPRELAY_LOCAL -DMODULE_LOCAL', \n    # 'HEADER_SEARCH_PATHS' => '',\n  }\n  s.vendored_libraries = 'ShadowPath/Antinat/expat-lib/lib/libexpat.a', 'ShadowPath/shadowsocks-libev/libopenssl/lib/libcrypto.a', 'ShadowPath/shadowsocks-libev/libopenssl/lib/libssl.a', 'ShadowPath/shadowsocks-libev/libsodium-ios/lib/libsodium.a'\nend"
  },
  {
    "path": "Library/ShadowPath/ShadowPath.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\tB81887591D2BFC1B00E41C89 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = B81887091D2BFC1B00E41C89 /* LICENSE */; };\n\t\tB818875A1D2BFC1B00E41C89 /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = B818870B1D2BFC1B00E41C89 /* aes.h */; };\n\t\tB818875B1D2BFC1B00E41C89 /* asn1.h in Headers */ = {isa = PBXBuildFile; fileRef = B818870C1D2BFC1B00E41C89 /* asn1.h */; };\n\t\tB818875C1D2BFC1B00E41C89 /* asn1_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = B818870D1D2BFC1B00E41C89 /* asn1_mac.h */; };\n\t\tB818875D1D2BFC1B00E41C89 /* asn1t.h in Headers */ = {isa = PBXBuildFile; fileRef = B818870E1D2BFC1B00E41C89 /* asn1t.h */; };\n\t\tB818875E1D2BFC1B00E41C89 /* bio.h in Headers */ = {isa = PBXBuildFile; fileRef = B818870F1D2BFC1B00E41C89 /* bio.h */; };\n\t\tB818875F1D2BFC1B00E41C89 /* blowfish.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887101D2BFC1B00E41C89 /* blowfish.h */; };\n\t\tB81887601D2BFC1B00E41C89 /* bn.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887111D2BFC1B00E41C89 /* bn.h */; };\n\t\tB81887611D2BFC1B00E41C89 /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887121D2BFC1B00E41C89 /* buffer.h */; };\n\t\tB81887621D2BFC1B00E41C89 /* camellia.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887131D2BFC1B00E41C89 /* camellia.h */; };\n\t\tB81887631D2BFC1B00E41C89 /* cast.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887141D2BFC1B00E41C89 /* cast.h */; };\n\t\tB81887641D2BFC1B00E41C89 /* cmac.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887151D2BFC1B00E41C89 /* cmac.h */; };\n\t\tB81887651D2BFC1B00E41C89 /* cms.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887161D2BFC1B00E41C89 /* cms.h */; };\n\t\tB81887661D2BFC1B00E41C89 /* comp.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887171D2BFC1B00E41C89 /* comp.h */; };\n\t\tB81887671D2BFC1B00E41C89 /* conf.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887181D2BFC1B00E41C89 /* conf.h */; };\n\t\tB81887681D2BFC1B00E41C89 /* conf_api.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887191D2BFC1B00E41C89 /* conf_api.h */; };\n\t\tB81887691D2BFC1B00E41C89 /* crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871A1D2BFC1B00E41C89 /* crypto.h */; };\n\t\tB818876A1D2BFC1B00E41C89 /* des.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871B1D2BFC1B00E41C89 /* des.h */; };\n\t\tB818876B1D2BFC1B00E41C89 /* des_old.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871C1D2BFC1B00E41C89 /* des_old.h */; };\n\t\tB818876C1D2BFC1B00E41C89 /* dh.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871D1D2BFC1B00E41C89 /* dh.h */; };\n\t\tB818876D1D2BFC1B00E41C89 /* dsa.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871E1D2BFC1B00E41C89 /* dsa.h */; };\n\t\tB818876E1D2BFC1B00E41C89 /* dso.h in Headers */ = {isa = PBXBuildFile; fileRef = B818871F1D2BFC1B00E41C89 /* dso.h */; };\n\t\tB818876F1D2BFC1B00E41C89 /* dtls1.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887201D2BFC1B00E41C89 /* dtls1.h */; };\n\t\tB81887701D2BFC1B00E41C89 /* e_os2.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887211D2BFC1B00E41C89 /* e_os2.h */; };\n\t\tB81887711D2BFC1B00E41C89 /* ebcdic.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887221D2BFC1B00E41C89 /* ebcdic.h */; };\n\t\tB81887721D2BFC1B00E41C89 /* ec.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887231D2BFC1B00E41C89 /* ec.h */; };\n\t\tB81887731D2BFC1B00E41C89 /* ecdh.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887241D2BFC1B00E41C89 /* ecdh.h */; };\n\t\tB81887741D2BFC1B00E41C89 /* ecdsa.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887251D2BFC1B00E41C89 /* ecdsa.h */; };\n\t\tB81887751D2BFC1B00E41C89 /* engine.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887261D2BFC1B00E41C89 /* engine.h */; };\n\t\tB81887761D2BFC1B00E41C89 /* err.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887271D2BFC1B00E41C89 /* err.h */; };\n\t\tB81887771D2BFC1B00E41C89 /* evp.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887281D2BFC1B00E41C89 /* evp.h */; };\n\t\tB81887781D2BFC1B00E41C89 /* hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887291D2BFC1B00E41C89 /* hmac.h */; };\n\t\tB81887791D2BFC1B00E41C89 /* idea.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872A1D2BFC1B00E41C89 /* idea.h */; };\n\t\tB818877A1D2BFC1B00E41C89 /* krb5_asn.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872B1D2BFC1B00E41C89 /* krb5_asn.h */; };\n\t\tB818877B1D2BFC1B00E41C89 /* kssl.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872C1D2BFC1B00E41C89 /* kssl.h */; };\n\t\tB818877C1D2BFC1B00E41C89 /* lhash.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872D1D2BFC1B00E41C89 /* lhash.h */; };\n\t\tB818877D1D2BFC1B00E41C89 /* md4.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872E1D2BFC1B00E41C89 /* md4.h */; };\n\t\tB818877E1D2BFC1B00E41C89 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = B818872F1D2BFC1B00E41C89 /* md5.h */; };\n\t\tB818877F1D2BFC1B00E41C89 /* mdc2.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887301D2BFC1B00E41C89 /* mdc2.h */; };\n\t\tB81887801D2BFC1B00E41C89 /* modes.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887311D2BFC1B00E41C89 /* modes.h */; };\n\t\tB81887811D2BFC1B00E41C89 /* obj_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887321D2BFC1B00E41C89 /* obj_mac.h */; };\n\t\tB81887821D2BFC1B00E41C89 /* objects.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887331D2BFC1B00E41C89 /* objects.h */; };\n\t\tB81887831D2BFC1B00E41C89 /* ocsp.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887341D2BFC1B00E41C89 /* ocsp.h */; };\n\t\tB81887841D2BFC1B00E41C89 /* opensslconf.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887351D2BFC1B00E41C89 /* opensslconf.h */; };\n\t\tB81887851D2BFC1B00E41C89 /* opensslv.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887361D2BFC1B00E41C89 /* opensslv.h */; };\n\t\tB81887861D2BFC1B00E41C89 /* ossl_typ.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887371D2BFC1B00E41C89 /* ossl_typ.h */; };\n\t\tB81887871D2BFC1B00E41C89 /* pem.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887381D2BFC1B00E41C89 /* pem.h */; };\n\t\tB81887881D2BFC1B00E41C89 /* pem2.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887391D2BFC1B00E41C89 /* pem2.h */; };\n\t\tB81887891D2BFC1B00E41C89 /* pkcs12.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873A1D2BFC1B00E41C89 /* pkcs12.h */; };\n\t\tB818878A1D2BFC1B00E41C89 /* pkcs7.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873B1D2BFC1B00E41C89 /* pkcs7.h */; };\n\t\tB818878B1D2BFC1B00E41C89 /* pqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873C1D2BFC1B00E41C89 /* pqueue.h */; };\n\t\tB818878C1D2BFC1B00E41C89 /* rand.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873D1D2BFC1B00E41C89 /* rand.h */; };\n\t\tB818878D1D2BFC1B00E41C89 /* rc2.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873E1D2BFC1B00E41C89 /* rc2.h */; };\n\t\tB818878E1D2BFC1B00E41C89 /* rc4.h in Headers */ = {isa = PBXBuildFile; fileRef = B818873F1D2BFC1B00E41C89 /* rc4.h */; };\n\t\tB818878F1D2BFC1B00E41C89 /* ripemd.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887401D2BFC1B00E41C89 /* ripemd.h */; };\n\t\tB81887901D2BFC1B00E41C89 /* rsa.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887411D2BFC1B00E41C89 /* rsa.h */; };\n\t\tB81887911D2BFC1B00E41C89 /* safestack.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887421D2BFC1B00E41C89 /* safestack.h */; };\n\t\tB81887921D2BFC1B00E41C89 /* seed.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887431D2BFC1B00E41C89 /* seed.h */; };\n\t\tB81887931D2BFC1B00E41C89 /* sha.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887441D2BFC1B00E41C89 /* sha.h */; };\n\t\tB81887941D2BFC1B00E41C89 /* srp.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887451D2BFC1B00E41C89 /* srp.h */; };\n\t\tB81887951D2BFC1B00E41C89 /* srtp.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887461D2BFC1B00E41C89 /* srtp.h */; };\n\t\tB81887961D2BFC1B00E41C89 /* ssl.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887471D2BFC1B00E41C89 /* ssl.h */; };\n\t\tB81887971D2BFC1B00E41C89 /* ssl2.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887481D2BFC1B00E41C89 /* ssl2.h */; };\n\t\tB81887981D2BFC1B00E41C89 /* ssl23.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887491D2BFC1B00E41C89 /* ssl23.h */; };\n\t\tB81887991D2BFC1B00E41C89 /* ssl3.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874A1D2BFC1B00E41C89 /* ssl3.h */; };\n\t\tB818879A1D2BFC1B00E41C89 /* stack.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874B1D2BFC1B00E41C89 /* stack.h */; };\n\t\tB818879B1D2BFC1B00E41C89 /* symhacks.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874C1D2BFC1B00E41C89 /* symhacks.h */; };\n\t\tB818879C1D2BFC1B00E41C89 /* tls1.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874D1D2BFC1B00E41C89 /* tls1.h */; };\n\t\tB818879D1D2BFC1B00E41C89 /* ts.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874E1D2BFC1B00E41C89 /* ts.h */; };\n\t\tB818879E1D2BFC1B00E41C89 /* txt_db.h in Headers */ = {isa = PBXBuildFile; fileRef = B818874F1D2BFC1B00E41C89 /* txt_db.h */; };\n\t\tB818879F1D2BFC1B00E41C89 /* ui.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887501D2BFC1B00E41C89 /* ui.h */; };\n\t\tB81887A01D2BFC1B00E41C89 /* ui_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887511D2BFC1B00E41C89 /* ui_compat.h */; };\n\t\tB81887A11D2BFC1B00E41C89 /* whrlpool.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887521D2BFC1B00E41C89 /* whrlpool.h */; };\n\t\tB81887A21D2BFC1B00E41C89 /* x509.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887531D2BFC1B00E41C89 /* x509.h */; };\n\t\tB81887A31D2BFC1B00E41C89 /* x509_vfy.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887541D2BFC1B00E41C89 /* x509_vfy.h */; };\n\t\tB81887A41D2BFC1B00E41C89 /* x509v3.h in Headers */ = {isa = PBXBuildFile; fileRef = B81887551D2BFC1B00E41C89 /* x509v3.h */; };\n\t\tB81887A51D2BFC1B00E41C89 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B81887571D2BFC1B00E41C89 /* libcrypto.a */; };\n\t\tB81887A61D2BFC1B00E41C89 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B81887581D2BFC1B00E41C89 /* libssl.a */; };\n\t\tB81888601D2C09DA00E41C89 /* core.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888251D2C09DA00E41C89 /* core.h */; };\n\t\tB81888611D2C09DA00E41C89 /* crypto_aead_aes256gcm.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888261D2C09DA00E41C89 /* crypto_aead_aes256gcm.h */; };\n\t\tB81888621D2C09DA00E41C89 /* crypto_aead_chacha20poly1305.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888271D2C09DA00E41C89 /* crypto_aead_chacha20poly1305.h */; };\n\t\tB81888631D2C09DA00E41C89 /* crypto_auth.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888281D2C09DA00E41C89 /* crypto_auth.h */; };\n\t\tB81888641D2C09DA00E41C89 /* crypto_auth_hmacsha256.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888291D2C09DA00E41C89 /* crypto_auth_hmacsha256.h */; };\n\t\tB81888651D2C09DA00E41C89 /* crypto_auth_hmacsha512.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882A1D2C09DA00E41C89 /* crypto_auth_hmacsha512.h */; };\n\t\tB81888661D2C09DA00E41C89 /* crypto_auth_hmacsha512256.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882B1D2C09DA00E41C89 /* crypto_auth_hmacsha512256.h */; };\n\t\tB81888671D2C09DA00E41C89 /* crypto_box.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882C1D2C09DA00E41C89 /* crypto_box.h */; };\n\t\tB81888681D2C09DA00E41C89 /* crypto_box_curve25519xsalsa20poly1305.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882D1D2C09DA00E41C89 /* crypto_box_curve25519xsalsa20poly1305.h */; };\n\t\tB81888691D2C09DA00E41C89 /* crypto_core_hchacha20.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882E1D2C09DA00E41C89 /* crypto_core_hchacha20.h */; };\n\t\tB818886A1D2C09DA00E41C89 /* crypto_core_hsalsa20.h in Headers */ = {isa = PBXBuildFile; fileRef = B818882F1D2C09DA00E41C89 /* crypto_core_hsalsa20.h */; };\n\t\tB818886B1D2C09DA00E41C89 /* crypto_core_salsa20.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888301D2C09DA00E41C89 /* crypto_core_salsa20.h */; };\n\t\tB818886C1D2C09DA00E41C89 /* crypto_core_salsa2012.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888311D2C09DA00E41C89 /* crypto_core_salsa2012.h */; };\n\t\tB818886D1D2C09DA00E41C89 /* crypto_core_salsa208.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888321D2C09DA00E41C89 /* crypto_core_salsa208.h */; };\n\t\tB818886E1D2C09DA00E41C89 /* crypto_generichash.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888331D2C09DA00E41C89 /* crypto_generichash.h */; };\n\t\tB818886F1D2C09DA00E41C89 /* crypto_generichash_blake2b.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888341D2C09DA00E41C89 /* crypto_generichash_blake2b.h */; };\n\t\tB81888701D2C09DA00E41C89 /* crypto_hash.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888351D2C09DA00E41C89 /* crypto_hash.h */; };\n\t\tB81888711D2C09DA00E41C89 /* crypto_hash_sha256.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888361D2C09DA00E41C89 /* crypto_hash_sha256.h */; };\n\t\tB81888721D2C09DA00E41C89 /* crypto_hash_sha512.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888371D2C09DA00E41C89 /* crypto_hash_sha512.h */; };\n\t\tB81888731D2C09DA00E41C89 /* crypto_int32.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888381D2C09DA00E41C89 /* crypto_int32.h */; };\n\t\tB81888741D2C09DA00E41C89 /* crypto_int64.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888391D2C09DA00E41C89 /* crypto_int64.h */; };\n\t\tB81888751D2C09DA00E41C89 /* crypto_onetimeauth.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883A1D2C09DA00E41C89 /* crypto_onetimeauth.h */; };\n\t\tB81888761D2C09DA00E41C89 /* crypto_onetimeauth_poly1305.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883B1D2C09DA00E41C89 /* crypto_onetimeauth_poly1305.h */; };\n\t\tB81888771D2C09DA00E41C89 /* crypto_pwhash.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883C1D2C09DA00E41C89 /* crypto_pwhash.h */; };\n\t\tB81888781D2C09DA00E41C89 /* crypto_pwhash_argon2i.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883D1D2C09DA00E41C89 /* crypto_pwhash_argon2i.h */; };\n\t\tB81888791D2C09DA00E41C89 /* crypto_pwhash_scryptsalsa208sha256.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883E1D2C09DA00E41C89 /* crypto_pwhash_scryptsalsa208sha256.h */; };\n\t\tB818887A1D2C09DA00E41C89 /* crypto_scalarmult.h in Headers */ = {isa = PBXBuildFile; fileRef = B818883F1D2C09DA00E41C89 /* crypto_scalarmult.h */; };\n\t\tB818887B1D2C09DA00E41C89 /* crypto_scalarmult_curve25519.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888401D2C09DA00E41C89 /* crypto_scalarmult_curve25519.h */; };\n\t\tB818887C1D2C09DA00E41C89 /* crypto_secretbox.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888411D2C09DA00E41C89 /* crypto_secretbox.h */; };\n\t\tB818887D1D2C09DA00E41C89 /* crypto_secretbox_xsalsa20poly1305.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888421D2C09DA00E41C89 /* crypto_secretbox_xsalsa20poly1305.h */; };\n\t\tB818887E1D2C09DA00E41C89 /* crypto_shorthash.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888431D2C09DA00E41C89 /* crypto_shorthash.h */; };\n\t\tB818887F1D2C09DA00E41C89 /* crypto_shorthash_siphash24.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888441D2C09DA00E41C89 /* crypto_shorthash_siphash24.h */; };\n\t\tB81888801D2C09DA00E41C89 /* crypto_sign.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888451D2C09DA00E41C89 /* crypto_sign.h */; };\n\t\tB81888811D2C09DA00E41C89 /* crypto_sign_ed25519.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888461D2C09DA00E41C89 /* crypto_sign_ed25519.h */; };\n\t\tB81888821D2C09DA00E41C89 /* crypto_sign_edwards25519sha512batch.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888471D2C09DA00E41C89 /* crypto_sign_edwards25519sha512batch.h */; };\n\t\tB81888831D2C09DA00E41C89 /* crypto_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888481D2C09DA00E41C89 /* crypto_stream.h */; };\n\t\tB81888841D2C09DA00E41C89 /* crypto_stream_aes128ctr.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888491D2C09DA00E41C89 /* crypto_stream_aes128ctr.h */; };\n\t\tB81888851D2C09DA00E41C89 /* crypto_stream_chacha20.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884A1D2C09DA00E41C89 /* crypto_stream_chacha20.h */; };\n\t\tB81888861D2C09DA00E41C89 /* crypto_stream_salsa20.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884B1D2C09DA00E41C89 /* crypto_stream_salsa20.h */; };\n\t\tB81888871D2C09DA00E41C89 /* crypto_stream_salsa2012.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884C1D2C09DA00E41C89 /* crypto_stream_salsa2012.h */; };\n\t\tB81888881D2C09DA00E41C89 /* crypto_stream_salsa208.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884D1D2C09DA00E41C89 /* crypto_stream_salsa208.h */; };\n\t\tB81888891D2C09DA00E41C89 /* crypto_stream_xsalsa20.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884E1D2C09DA00E41C89 /* crypto_stream_xsalsa20.h */; };\n\t\tB818888A1D2C09DA00E41C89 /* crypto_uint16.h in Headers */ = {isa = PBXBuildFile; fileRef = B818884F1D2C09DA00E41C89 /* crypto_uint16.h */; };\n\t\tB818888B1D2C09DA00E41C89 /* crypto_uint32.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888501D2C09DA00E41C89 /* crypto_uint32.h */; };\n\t\tB818888C1D2C09DA00E41C89 /* crypto_uint64.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888511D2C09DA00E41C89 /* crypto_uint64.h */; };\n\t\tB818888D1D2C09DA00E41C89 /* crypto_uint8.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888521D2C09DA00E41C89 /* crypto_uint8.h */; };\n\t\tB818888E1D2C09DA00E41C89 /* crypto_verify_16.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888531D2C09DA00E41C89 /* crypto_verify_16.h */; };\n\t\tB818888F1D2C09DA00E41C89 /* crypto_verify_32.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888541D2C09DA00E41C89 /* crypto_verify_32.h */; };\n\t\tB81888901D2C09DA00E41C89 /* crypto_verify_64.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888551D2C09DA00E41C89 /* crypto_verify_64.h */; };\n\t\tB81888911D2C09DA00E41C89 /* export.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888561D2C09DA00E41C89 /* export.h */; };\n\t\tB81888921D2C09DA00E41C89 /* randombytes.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888571D2C09DA00E41C89 /* randombytes.h */; };\n\t\tB81888931D2C09DA00E41C89 /* randombytes_salsa20_random.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888581D2C09DA00E41C89 /* randombytes_salsa20_random.h */; };\n\t\tB81888941D2C09DA00E41C89 /* randombytes_sysrandom.h in Headers */ = {isa = PBXBuildFile; fileRef = B81888591D2C09DA00E41C89 /* randombytes_sysrandom.h */; };\n\t\tB81888951D2C09DA00E41C89 /* runtime.h in Headers */ = {isa = PBXBuildFile; fileRef = B818885A1D2C09DA00E41C89 /* runtime.h */; };\n\t\tB81888961D2C09DA00E41C89 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = B818885B1D2C09DA00E41C89 /* utils.h */; };\n\t\tB81888971D2C09DA00E41C89 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = B818885C1D2C09DA00E41C89 /* version.h */; };\n\t\tB81888981D2C09DA00E41C89 /* sodium.h in Headers */ = {isa = PBXBuildFile; fileRef = B818885D1D2C09DA00E41C89 /* sodium.h */; };\n\t\tB81888991D2C09DA00E41C89 /* libsodium.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B818885F1D2C09DA00E41C89 /* libsodium.a */; };\n\t\tB82847481CEAE51B00820456 /* pcrs.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847461CEAE51B00820456 /* pcrs.c */; };\n\t\tB82847491CEAE51B00820456 /* pcrs.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847471CEAE51B00820456 /* pcrs.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847531CEB08CA00820456 /* miscutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847511CEB08CA00820456 /* miscutil.c */; };\n\t\tB82847541CEB08CA00820456 /* miscutil.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847521CEB08CA00820456 /* miscutil.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847571CEB08DD00820456 /* errlog.m in Sources */ = {isa = PBXBuildFile; fileRef = B82847551CEB08DD00820456 /* errlog.m */; };\n\t\tB82847581CEB08DD00820456 /* errlog.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847561CEB08DD00820456 /* errlog.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828475B1CEB0D5900820456 /* encode.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847591CEB0D5900820456 /* encode.c */; };\n\t\tB828475C1CEB0D5900820456 /* encode.h in Headers */ = {isa = PBXBuildFile; fileRef = B828475A1CEB0D5900820456 /* encode.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828475F1CEB0E3100820456 /* pcre.h in Headers */ = {isa = PBXBuildFile; fileRef = B828475E1CEB0E3100820456 /* pcre.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847621CEB0E4400820456 /* pcreposix.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847601CEB0E4400820456 /* pcreposix.c */; };\n\t\tB82847631CEB0E4400820456 /* pcreposix.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847611CEB0E4400820456 /* pcreposix.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847651CEB0E6400820456 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847641CEB0E6400820456 /* internal.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847681CEB103800820456 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847661CEB103800820456 /* list.c */; };\n\t\tB82847691CEB103800820456 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847671CEB103800820456 /* list.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828476C1CEB104E00820456 /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = B828476A1CEB104E00820456 /* filters.c */; };\n\t\tB828476D1CEB104E00820456 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = B828476B1CEB104E00820456 /* filters.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847701CEB105B00820456 /* parsers.c in Sources */ = {isa = PBXBuildFile; fileRef = B828476E1CEB105B00820456 /* parsers.c */; };\n\t\tB82847711CEB105B00820456 /* parsers.h in Headers */ = {isa = PBXBuildFile; fileRef = B828476F1CEB105B00820456 /* parsers.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847741CEB106200820456 /* loaders.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847721CEB106200820456 /* loaders.c */; };\n\t\tB82847751CEB106200820456 /* loaders.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847731CEB106200820456 /* loaders.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847781CEB109700820456 /* ssplit.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847761CEB109700820456 /* ssplit.c */; };\n\t\tB82847791CEB109700820456 /* ssplit.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847771CEB109700820456 /* ssplit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828477C1CEB10AA00820456 /* jbsockets.c in Sources */ = {isa = PBXBuildFile; fileRef = B828477A1CEB10AA00820456 /* jbsockets.c */; };\n\t\tB828477D1CEB10AA00820456 /* jbsockets.h in Headers */ = {isa = PBXBuildFile; fileRef = B828477B1CEB10AA00820456 /* jbsockets.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847801CEB10B800820456 /* actions.m in Sources */ = {isa = PBXBuildFile; fileRef = B828477E1CEB10B800820456 /* actions.m */; };\n\t\tB82847811CEB10B800820456 /* actions.h in Headers */ = {isa = PBXBuildFile; fileRef = B828477F1CEB10B800820456 /* actions.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847841CEB10BF00820456 /* cgi.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847821CEB10BF00820456 /* cgi.c */; };\n\t\tB82847851CEB10BF00820456 /* cgi.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847831CEB10BF00820456 /* cgi.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847881CEB10C900820456 /* deanimate.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847861CEB10C900820456 /* deanimate.c */; };\n\t\tB82847891CEB10C900820456 /* deanimate.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847871CEB10C900820456 /* deanimate.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828478C1CEB10D400820456 /* urlmatch.c in Sources */ = {isa = PBXBuildFile; fileRef = B828478A1CEB10D400820456 /* urlmatch.c */; };\n\t\tB828478D1CEB10D400820456 /* urlmatch.h in Headers */ = {isa = PBXBuildFile; fileRef = B828478B1CEB10D400820456 /* urlmatch.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828478F1CEB10E200820456 /* actionlist.h in Headers */ = {isa = PBXBuildFile; fileRef = B828478E1CEB10E200820456 /* actionlist.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847921CEB10EB00820456 /* cgisimple.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847901CEB10EB00820456 /* cgisimple.c */; };\n\t\tB82847931CEB10EB00820456 /* cgisimple.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847911CEB10EB00820456 /* cgisimple.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847961CEB10F500820456 /* cgiedit.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847941CEB10F500820456 /* cgiedit.c */; };\n\t\tB82847971CEB10F500820456 /* cgiedit.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847951CEB10F500820456 /* cgiedit.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828479A1CEB110400820456 /* loadcfg.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847981CEB110400820456 /* loadcfg.c */; };\n\t\tB828479B1CEB110400820456 /* loadcfg.h in Headers */ = {isa = PBXBuildFile; fileRef = B82847991CEB110400820456 /* loadcfg.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB828479E1CEB111000820456 /* gateway.c in Sources */ = {isa = PBXBuildFile; fileRef = B828479C1CEB111000820456 /* gateway.c */; };\n\t\tB828479F1CEB111000820456 /* gateway.h in Headers */ = {isa = PBXBuildFile; fileRef = B828479D1CEB111000820456 /* gateway.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB82847A11CEB11DA00820456 /* study.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847A01CEB11DA00820456 /* study.c */; };\n\t\tB82847A51CEB11EA00820456 /* chartables.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847A41CEB11EA00820456 /* chartables.c */; };\n\t\tB82847AB1CEB11F600820456 /* get.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847A71CEB11F600820456 /* get.c */; };\n\t\tB82847AD1CEB11F600820456 /* pcre.c in Sources */ = {isa = PBXBuildFile; fileRef = B82847A91CEB11F600820456 /* pcre.c */; };\n\t\tB82847AF1CEB125500820456 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B82847AE1CEB125500820456 /* libz.tbd */; };\n\t\tB82847B81CEB14B000820456 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B82847B71CEB14B000820456 /* main.m */; };\n\t\tB82847BB1CEB14B000820456 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B82847BA1CEB14B000820456 /* AppDelegate.m */; };\n\t\tB82847BE1CEB14B000820456 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B82847BD1CEB14B000820456 /* ViewController.m */; };\n\t\tB82847C11CEB14B000820456 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B82847BF1CEB14B000820456 /* Main.storyboard */; };\n\t\tB82847C31CEB14B000820456 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B82847C21CEB14B000820456 /* Assets.xcassets */; };\n\t\tB82847C61CEB14B000820456 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B82847C41CEB14B000820456 /* LaunchScreen.storyboard */; };\n\t\tB82847CB1CEB15D300820456 /* ShadowPath.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8DEFD7B1CE9C923003FC706 /* ShadowPath.framework */; };\n\t\tB82847CD1CEB168400820456 /* config in Resources */ = {isa = PBXBuildFile; fileRef = B82847CC1CEB168400820456 /* config */; };\n\t\tB82847CF1CEB177C00820456 /* ShadowPath.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B8DEFD7B1CE9C923003FC706 /* ShadowPath.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tB830CC681D2D69E300FA8E37 /* auth.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC661D2D69E300FA8E37 /* auth.c */; };\n\t\tB830CC691D2D69E300FA8E37 /* auth.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC671D2D69E300FA8E37 /* auth.h */; };\n\t\tB830CC6B1D2D69FA00FA8E37 /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC6A1D2D69FA00FA8E37 /* crc32.c */; };\n\t\tB830CC6E1D2D6A0000FA8E37 /* http_simple.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC6C1D2D6A0000FA8E37 /* http_simple.c */; };\n\t\tB830CC6F1D2D6A0000FA8E37 /* http_simple.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC6D1D2D6A0000FA8E37 /* http_simple.h */; };\n\t\tB830CC731D2D6A1700FA8E37 /* obfs.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC701D2D6A1700FA8E37 /* obfs.c */; };\n\t\tB830CC741D2D6A1700FA8E37 /* obfs.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC711D2D6A1700FA8E37 /* obfs.h */; };\n\t\tB830CC751D2D6A1700FA8E37 /* obfsutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC721D2D6A1700FA8E37 /* obfsutil.c */; };\n\t\tB830CC7A1D2D6A3400FA8E37 /* tls1.0_session.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC761D2D6A3400FA8E37 /* tls1.0_session.c */; };\n\t\tB830CC7B1D2D6A3400FA8E37 /* tls1.0_session.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC771D2D6A3400FA8E37 /* tls1.0_session.h */; };\n\t\tB830CC7C1D2D6A3400FA8E37 /* tls1.2_ticket.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC781D2D6A3400FA8E37 /* tls1.2_ticket.c */; };\n\t\tB830CC7D1D2D6A3400FA8E37 /* tls1.2_ticket.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC791D2D6A3400FA8E37 /* tls1.2_ticket.h */; };\n\t\tB830CC801D2D6A4000FA8E37 /* verify.c in Sources */ = {isa = PBXBuildFile; fileRef = B830CC7E1D2D6A4000FA8E37 /* verify.c */; };\n\t\tB830CC811D2D6A4000FA8E37 /* verify.h in Headers */ = {isa = PBXBuildFile; fileRef = B830CC7F1D2D6A4000FA8E37 /* verify.h */; };\n\t\tB86B04B11D17DABB00613014 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B000A1D17DABA00613014 /* config.h */; };\n\t\tB86B04D81D17DABB00613014 /* commands.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00391D17DABA00613014 /* commands.c */; };\n\t\tB86B04E21D17DABB00613014 /* allocator.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00451D17DABA00613014 /* allocator.c */; };\n\t\tB86B04E31D17DABB00613014 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00461D17DABA00613014 /* error.c */; };\n\t\tB86B04E41D17DABB00613014 /* gc.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00471D17DABA00613014 /* gc.c */; };\n\t\tB86B04E51D17DABB00613014 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00481D17DABA00613014 /* hash.c */; };\n\t\tB86B04E61D17DABB00613014 /* ip-address.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00491D17DABA00613014 /* ip-address.c */; };\n\t\tB86B04E71D17DABB00613014 /* mempool.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B004A1D17DABA00613014 /* mempool.c */; };\n\t\tB86B04E81D17DABB00613014 /* timestamp.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B004B1D17DABA00613014 /* timestamp.c */; };\n\t\tB86B04E91D17DABB00613014 /* u128.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B004C1D17DABA00613014 /* u128.c */; };\n\t\tB86B04F31D17DABB00613014 /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00581D17DABA00613014 /* array.c */; };\n\t\tB86B04F41D17DABB00613014 /* bitset.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00591D17DABA00613014 /* bitset.c */; };\n\t\tB86B04F51D17DABB00613014 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005A1D17DABA00613014 /* buffer.c */; };\n\t\tB86B04F61D17DABB00613014 /* dllist.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005B1D17DABA00613014 /* dllist.c */; };\n\t\tB86B04F71D17DABB00613014 /* file-stream.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005C1D17DABA00613014 /* file-stream.c */; };\n\t\tB86B04F81D17DABB00613014 /* hash-table.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005D1D17DABA00613014 /* hash-table.c */; };\n\t\tB86B04F91D17DABB00613014 /* managed-buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005E1D17DABA00613014 /* managed-buffer.c */; };\n\t\tB86B04FA1D17DABB00613014 /* ring-buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B005F1D17DABA00613014 /* ring-buffer.c */; };\n\t\tB86B04FB1D17DABB00613014 /* slice.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00601D17DABA00613014 /* slice.c */; };\n\t\tB86B05331D17DABB00613014 /* directory-walker.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A31D17DABA00613014 /* directory-walker.c */; };\n\t\tB86B05341D17DABB00613014 /* env.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A41D17DABA00613014 /* env.c */; };\n\t\tB86B05351D17DABB00613014 /* exec.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A51D17DABA00613014 /* exec.c */; };\n\t\tB86B05361D17DABB00613014 /* files.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A61D17DABA00613014 /* files.c */; };\n\t\tB86B05371D17DABB00613014 /* process.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A71D17DABA00613014 /* process.c */; };\n\t\tB86B05381D17DABB00613014 /* subprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00A81D17DABA00613014 /* subprocess.c */; };\n\t\tB86B053A1D17DABB00613014 /* thread.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00AC1D17DABA00613014 /* thread.c */; };\n\t\tB86B05441D17DABB00613014 /* ev.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00B81D17DABA00613014 /* ev.c */; };\n\t\tB86B05451D17DABB00613014 /* ev.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B00B91D17DABA00613014 /* ev.h */; };\n\t\tB86B054C1D17DABB00613014 /* ev_vars.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B00C01D17DABA00613014 /* ev_vars.h */; };\n\t\tB86B054E1D17DABB00613014 /* ev_wrap.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B00C21D17DABA00613014 /* ev_wrap.h */; };\n\t\tB86B054F1D17DABB00613014 /* event.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00C31D17DABA00613014 /* event.c */; };\n\t\tB86B05501D17DABB00613014 /* event.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B00C41D17DABA00613014 /* event.h */; };\n\t\tB86B05611D17DABB00613014 /* assignments.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00D91D17DABA00613014 /* assignments.c */; };\n\t\tB86B05621D17DABB00613014 /* basics.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00DA1D17DABA00613014 /* basics.c */; };\n\t\tB86B05631D17DABB00613014 /* bdd-iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00DB1D17DABA00613014 /* bdd-iterator.c */; };\n\t\tB86B05641D17DABB00613014 /* expanded.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00DC1D17DABA00613014 /* expanded.c */; };\n\t\tB86B05671D17DABB00613014 /* reachable.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00DF1D17DABA00613014 /* reachable.c */; };\n\t\tB86B05681D17DABB00613014 /* read.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00E01D17DABA00613014 /* read.c */; };\n\t\tB86B05691D17DABB00613014 /* write.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00E11D17DABA00613014 /* write.c */; };\n\t\tB86B056A1D17DABB00613014 /* general.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00E21D17DABA00613014 /* general.c */; };\n\t\tB86B05791D17DABB00613014 /* allocation.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00F61D17DABA00613014 /* allocation.c */; };\n\t\tB86B057B1D17DABB00613014 /* inspection.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00F81D17DABA00613014 /* inspection.c */; };\n\t\tB86B057C1D17DABB00613014 /* ipv4_map.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00F91D17DABA00613014 /* ipv4_map.c */; };\n\t\tB86B057D1D17DABB00613014 /* ipv6_map.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00FA1D17DABA00613014 /* ipv6_map.c */; };\n\t\tB86B05801D17DABB00613014 /* storage.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B00FD1D17DABA00613014 /* storage.c */; };\n\t\tB86B05881D17DABB00613014 /* allocation.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B01071D17DABA00613014 /* allocation.c */; };\n\t\tB86B058A1D17DABB00613014 /* inspection.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B01091D17DABA00613014 /* inspection.c */; };\n\t\tB86B058B1D17DABB00613014 /* ipv4_set.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B010A1D17DABA00613014 /* ipv4_set.c */; };\n\t\tB86B058C1D17DABB00613014 /* ipv6_set.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B010B1D17DABA00613014 /* ipv6_set.c */; };\n\t\tB86B058D1D17DABB00613014 /* iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B010C1D17DABA00613014 /* iterator.c */; };\n\t\tB86B05901D17DABB00613014 /* storage.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B010F1D17DABA00613014 /* storage.c */; };\n\t\tB86B07DE1D17DABB00613014 /* udns.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04081D17DABB00613014 /* udns.h */; };\n\t\tB86B07DF1D17DABB00613014 /* udns_bl.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04091D17DABB00613014 /* udns_bl.c */; };\n\t\tB86B07E01D17DABB00613014 /* udns_codes.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040A1D17DABB00613014 /* udns_codes.c */; };\n\t\tB86B07E11D17DABB00613014 /* udns_dn.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040B1D17DABB00613014 /* udns_dn.c */; };\n\t\tB86B07E21D17DABB00613014 /* udns_dntosp.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040C1D17DABB00613014 /* udns_dntosp.c */; };\n\t\tB86B07E31D17DABB00613014 /* udns_init.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040D1D17DABB00613014 /* udns_init.c */; };\n\t\tB86B07E41D17DABB00613014 /* udns_jran.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040E1D17DABB00613014 /* udns_jran.c */; };\n\t\tB86B07E51D17DABB00613014 /* udns_misc.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B040F1D17DABB00613014 /* udns_misc.c */; };\n\t\tB86B07E61D17DABB00613014 /* udns_parse.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04101D17DABB00613014 /* udns_parse.c */; };\n\t\tB86B07E71D17DABB00613014 /* udns_resolver.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04111D17DABB00613014 /* udns_resolver.c */; };\n\t\tB86B07E81D17DABB00613014 /* udns_rr_a.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04121D17DABB00613014 /* udns_rr_a.c */; };\n\t\tB86B07E91D17DABB00613014 /* udns_rr_mx.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04131D17DABB00613014 /* udns_rr_mx.c */; };\n\t\tB86B07EA1D17DABB00613014 /* udns_rr_naptr.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04141D17DABB00613014 /* udns_rr_naptr.c */; };\n\t\tB86B07EB1D17DABB00613014 /* udns_rr_ptr.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04151D17DABB00613014 /* udns_rr_ptr.c */; };\n\t\tB86B07EC1D17DABB00613014 /* udns_rr_srv.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04161D17DABB00613014 /* udns_rr_srv.c */; };\n\t\tB86B07ED1D17DABB00613014 /* udns_rr_txt.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04171D17DABB00613014 /* udns_rr_txt.c */; };\n\t\tB86B07EE1D17DABB00613014 /* udns_XtoX.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04181D17DABB00613014 /* udns_XtoX.c */; };\n\t\tB86B08431D17DABB00613014 /* acl.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04781D17DABB00613014 /* acl.c */; };\n\t\tB86B08441D17DABB00613014 /* acl.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04791D17DABB00613014 /* acl.h */; };\n\t\tB86B08461D17DABB00613014 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B047B1D17DABB00613014 /* cache.c */; };\n\t\tB86B08471D17DABB00613014 /* cache.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B047C1D17DABB00613014 /* cache.h */; };\n\t\tB86B08481D17DABB00613014 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B047D1D17DABB00613014 /* common.h */; };\n\t\tB86B08491D17DABB00613014 /* encrypt.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B047E1D17DABB00613014 /* encrypt.c */; };\n\t\tB86B084A1D17DABB00613014 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B047F1D17DABB00613014 /* encrypt.h */; };\n\t\tB86B084B1D17DABB00613014 /* jconf.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04801D17DABB00613014 /* jconf.c */; };\n\t\tB86B084C1D17DABB00613014 /* jconf.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04811D17DABB00613014 /* jconf.h */; };\n\t\tB86B084D1D17DABB00613014 /* json.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04821D17DABB00613014 /* json.c */; };\n\t\tB86B084E1D17DABB00613014 /* json.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04831D17DABB00613014 /* json.h */; };\n\t\tB86B084F1D17DABB00613014 /* local.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04841D17DABB00613014 /* local.c */; };\n\t\tB86B08501D17DABB00613014 /* local.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04851D17DABB00613014 /* local.h */; };\n\t\tB86B08561D17DABB00613014 /* netutils.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B048B1D17DABB00613014 /* netutils.c */; };\n\t\tB86B08571D17DABB00613014 /* netutils.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B048C1D17DABB00613014 /* netutils.h */; };\n\t\tB86B085A1D17DABB00613014 /* resolv.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B048F1D17DABB00613014 /* resolv.c */; };\n\t\tB86B085B1D17DABB00613014 /* resolv.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04901D17DABB00613014 /* resolv.h */; };\n\t\tB86B085E1D17DABB00613014 /* shadowsocks.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04931D17DABB00613014 /* shadowsocks.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB86B085F1D17DABB00613014 /* socks5.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04941D17DABB00613014 /* socks5.h */; };\n\t\tB86B08631D17DABB00613014 /* udprelay.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B04981D17DABB00613014 /* udprelay.c */; };\n\t\tB86B08641D17DABB00613014 /* udprelay.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B04991D17DABB00613014 /* udprelay.h */; };\n\t\tB86B08651D17DABB00613014 /* uthash.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B049A1D17DABB00613014 /* uthash.h */; };\n\t\tB86B08661D17DABB00613014 /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = B86B049B1D17DABB00613014 /* utils.c */; };\n\t\tB86B08671D17DABB00613014 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = B86B049C1D17DABB00613014 /* utils.h */; };\n\t\tB8D0CD691CF1AF60007282A7 /* radix.c in Sources */ = {isa = PBXBuildFile; fileRef = B8D0CD671CF1AF60007282A7 /* radix.c */; };\n\t\tB8D0CD6A1CF1AF60007282A7 /* radix.h in Headers */ = {isa = PBXBuildFile; fileRef = B8D0CD681CF1AF60007282A7 /* radix.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8DEFD7F1CE9C923003FC706 /* ShadowPath.h in Headers */ = {isa = PBXBuildFile; fileRef = B8DEFD7E1CE9C923003FC706 /* ShadowPath.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8DEFEF91CEA1D4C003FC706 /* jcc.m in Sources */ = {isa = PBXBuildFile; fileRef = B8DEFEF71CEA1D4C003FC706 /* jcc.m */; };\n\t\tB8DEFEFA1CEA1D4C003FC706 /* jcc.h in Headers */ = {isa = PBXBuildFile; fileRef = B8DEFEF81CEA1D4C003FC706 /* jcc.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8DEFEFC1CEA1DCE003FC706 /* sp_config.h in Headers */ = {isa = PBXBuildFile; fileRef = B8DEFEFB1CEA1DCE003FC706 /* sp_config.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8DEFEFE1CEA1EB7003FC706 /* project.h in Headers */ = {isa = PBXBuildFile; fileRef = B8DEFEFD1CEA1EB7003FC706 /* project.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8EAC6501D40D01C0046963C /* maxminddb.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EAC5C61D40D01C0046963C /* maxminddb.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8EAC6511D40D01C0046963C /* maxminddb_config.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EAC5C71D40D01C0046963C /* maxminddb_config.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8EAC67F1D40D01C0046963C /* maxminddb-compat-util.h in Headers */ = {isa = PBXBuildFile; fileRef = B8EAC5FA1D40D01C0046963C /* maxminddb-compat-util.h */; };\n\t\tB8EAC6801D40D01C0046963C /* maxminddb.c in Sources */ = {isa = PBXBuildFile; fileRef = B8EAC5FB1D40D01C0046963C /* maxminddb.c */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tB82847D01CEB177C00820456 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = B8DEFD721CE9C923003FC706 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B8DEFD7A1CE9C923003FC706;\n\t\t\tremoteInfo = ShadowPath;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\tB82847D21CEB177D00820456 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tB82847CF1CEB177C00820456 /* ShadowPath.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\tB81887091D2BFC1B00E41C89 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = \"<group>\"; };\n\t\tB818870B1D2BFC1B00E41C89 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = \"<group>\"; };\n\t\tB818870C1D2BFC1B00E41C89 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = \"<group>\"; };\n\t\tB818870D1D2BFC1B00E41C89 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = \"<group>\"; };\n\t\tB818870E1D2BFC1B00E41C89 /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = \"<group>\"; };\n\t\tB818870F1D2BFC1B00E41C89 /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = \"<group>\"; };\n\t\tB81887101D2BFC1B00E41C89 /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = \"<group>\"; };\n\t\tB81887111D2BFC1B00E41C89 /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = \"<group>\"; };\n\t\tB81887121D2BFC1B00E41C89 /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = \"<group>\"; };\n\t\tB81887131D2BFC1B00E41C89 /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = \"<group>\"; };\n\t\tB81887141D2BFC1B00E41C89 /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = \"<group>\"; };\n\t\tB81887151D2BFC1B00E41C89 /* cmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmac.h; sourceTree = \"<group>\"; };\n\t\tB81887161D2BFC1B00E41C89 /* cms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cms.h; sourceTree = \"<group>\"; };\n\t\tB81887171D2BFC1B00E41C89 /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = \"<group>\"; };\n\t\tB81887181D2BFC1B00E41C89 /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = \"<group>\"; };\n\t\tB81887191D2BFC1B00E41C89 /* conf_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf_api.h; sourceTree = \"<group>\"; };\n\t\tB818871A1D2BFC1B00E41C89 /* crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto.h; sourceTree = \"<group>\"; };\n\t\tB818871B1D2BFC1B00E41C89 /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = \"<group>\"; };\n\t\tB818871C1D2BFC1B00E41C89 /* des_old.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des_old.h; sourceTree = \"<group>\"; };\n\t\tB818871D1D2BFC1B00E41C89 /* dh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dh.h; sourceTree = \"<group>\"; };\n\t\tB818871E1D2BFC1B00E41C89 /* dsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = \"<group>\"; };\n\t\tB818871F1D2BFC1B00E41C89 /* dso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dso.h; sourceTree = \"<group>\"; };\n\t\tB81887201D2BFC1B00E41C89 /* dtls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtls1.h; sourceTree = \"<group>\"; };\n\t\tB81887211D2BFC1B00E41C89 /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = \"<group>\"; };\n\t\tB81887221D2BFC1B00E41C89 /* ebcdic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ebcdic.h; sourceTree = \"<group>\"; };\n\t\tB81887231D2BFC1B00E41C89 /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = \"<group>\"; };\n\t\tB81887241D2BFC1B00E41C89 /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = \"<group>\"; };\n\t\tB81887251D2BFC1B00E41C89 /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = \"<group>\"; };\n\t\tB81887261D2BFC1B00E41C89 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = \"<group>\"; };\n\t\tB81887271D2BFC1B00E41C89 /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = \"<group>\"; };\n\t\tB81887281D2BFC1B00E41C89 /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = \"<group>\"; };\n\t\tB81887291D2BFC1B00E41C89 /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = \"<group>\"; };\n\t\tB818872A1D2BFC1B00E41C89 /* idea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = idea.h; sourceTree = \"<group>\"; };\n\t\tB818872B1D2BFC1B00E41C89 /* krb5_asn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = krb5_asn.h; sourceTree = \"<group>\"; };\n\t\tB818872C1D2BFC1B00E41C89 /* kssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kssl.h; sourceTree = \"<group>\"; };\n\t\tB818872D1D2BFC1B00E41C89 /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = \"<group>\"; };\n\t\tB818872E1D2BFC1B00E41C89 /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = \"<group>\"; };\n\t\tB818872F1D2BFC1B00E41C89 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = \"<group>\"; };\n\t\tB81887301D2BFC1B00E41C89 /* mdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdc2.h; sourceTree = \"<group>\"; };\n\t\tB81887311D2BFC1B00E41C89 /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = \"<group>\"; };\n\t\tB81887321D2BFC1B00E41C89 /* obj_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obj_mac.h; sourceTree = \"<group>\"; };\n\t\tB81887331D2BFC1B00E41C89 /* objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = \"<group>\"; };\n\t\tB81887341D2BFC1B00E41C89 /* ocsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsp.h; sourceTree = \"<group>\"; };\n\t\tB81887351D2BFC1B00E41C89 /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = \"<group>\"; };\n\t\tB81887361D2BFC1B00E41C89 /* opensslv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslv.h; sourceTree = \"<group>\"; };\n\t\tB81887371D2BFC1B00E41C89 /* ossl_typ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ossl_typ.h; sourceTree = \"<group>\"; };\n\t\tB81887381D2BFC1B00E41C89 /* pem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem.h; sourceTree = \"<group>\"; };\n\t\tB81887391D2BFC1B00E41C89 /* pem2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem2.h; sourceTree = \"<group>\"; };\n\t\tB818873A1D2BFC1B00E41C89 /* pkcs12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12.h; sourceTree = \"<group>\"; };\n\t\tB818873B1D2BFC1B00E41C89 /* pkcs7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7.h; sourceTree = \"<group>\"; };\n\t\tB818873C1D2BFC1B00E41C89 /* pqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pqueue.h; sourceTree = \"<group>\"; };\n\t\tB818873D1D2BFC1B00E41C89 /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = \"<group>\"; };\n\t\tB818873E1D2BFC1B00E41C89 /* rc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc2.h; sourceTree = \"<group>\"; };\n\t\tB818873F1D2BFC1B00E41C89 /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = \"<group>\"; };\n\t\tB81887401D2BFC1B00E41C89 /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = \"<group>\"; };\n\t\tB81887411D2BFC1B00E41C89 /* rsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = \"<group>\"; };\n\t\tB81887421D2BFC1B00E41C89 /* safestack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safestack.h; sourceTree = \"<group>\"; };\n\t\tB81887431D2BFC1B00E41C89 /* seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seed.h; sourceTree = \"<group>\"; };\n\t\tB81887441D2BFC1B00E41C89 /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = \"<group>\"; };\n\t\tB81887451D2BFC1B00E41C89 /* srp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srp.h; sourceTree = \"<group>\"; };\n\t\tB81887461D2BFC1B00E41C89 /* srtp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = srtp.h; sourceTree = \"<group>\"; };\n\t\tB81887471D2BFC1B00E41C89 /* ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl.h; sourceTree = \"<group>\"; };\n\t\tB81887481D2BFC1B00E41C89 /* ssl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl2.h; sourceTree = \"<group>\"; };\n\t\tB81887491D2BFC1B00E41C89 /* ssl23.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl23.h; sourceTree = \"<group>\"; };\n\t\tB818874A1D2BFC1B00E41C89 /* ssl3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl3.h; sourceTree = \"<group>\"; };\n\t\tB818874B1D2BFC1B00E41C89 /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = \"<group>\"; };\n\t\tB818874C1D2BFC1B00E41C89 /* symhacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symhacks.h; sourceTree = \"<group>\"; };\n\t\tB818874D1D2BFC1B00E41C89 /* tls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.h; sourceTree = \"<group>\"; };\n\t\tB818874E1D2BFC1B00E41C89 /* ts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts.h; sourceTree = \"<group>\"; };\n\t\tB818874F1D2BFC1B00E41C89 /* txt_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = txt_db.h; sourceTree = \"<group>\"; };\n\t\tB81887501D2BFC1B00E41C89 /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = \"<group>\"; };\n\t\tB81887511D2BFC1B00E41C89 /* ui_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_compat.h; sourceTree = \"<group>\"; };\n\t\tB81887521D2BFC1B00E41C89 /* whrlpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = whrlpool.h; sourceTree = \"<group>\"; };\n\t\tB81887531D2BFC1B00E41C89 /* x509.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509.h; sourceTree = \"<group>\"; };\n\t\tB81887541D2BFC1B00E41C89 /* x509_vfy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509_vfy.h; sourceTree = \"<group>\"; };\n\t\tB81887551D2BFC1B00E41C89 /* x509v3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3.h; sourceTree = \"<group>\"; };\n\t\tB81887571D2BFC1B00E41C89 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = \"<group>\"; };\n\t\tB81887581D2BFC1B00E41C89 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = \"<group>\"; };\n\t\tB81888251D2C09DA00E41C89 /* core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = \"<group>\"; };\n\t\tB81888261D2C09DA00E41C89 /* crypto_aead_aes256gcm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_aead_aes256gcm.h; sourceTree = \"<group>\"; };\n\t\tB81888271D2C09DA00E41C89 /* crypto_aead_chacha20poly1305.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_aead_chacha20poly1305.h; sourceTree = \"<group>\"; };\n\t\tB81888281D2C09DA00E41C89 /* crypto_auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_auth.h; sourceTree = \"<group>\"; };\n\t\tB81888291D2C09DA00E41C89 /* crypto_auth_hmacsha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_auth_hmacsha256.h; sourceTree = \"<group>\"; };\n\t\tB818882A1D2C09DA00E41C89 /* crypto_auth_hmacsha512.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_auth_hmacsha512.h; sourceTree = \"<group>\"; };\n\t\tB818882B1D2C09DA00E41C89 /* crypto_auth_hmacsha512256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_auth_hmacsha512256.h; sourceTree = \"<group>\"; };\n\t\tB818882C1D2C09DA00E41C89 /* crypto_box.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_box.h; sourceTree = \"<group>\"; };\n\t\tB818882D1D2C09DA00E41C89 /* crypto_box_curve25519xsalsa20poly1305.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_box_curve25519xsalsa20poly1305.h; sourceTree = \"<group>\"; };\n\t\tB818882E1D2C09DA00E41C89 /* crypto_core_hchacha20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_core_hchacha20.h; sourceTree = \"<group>\"; };\n\t\tB818882F1D2C09DA00E41C89 /* crypto_core_hsalsa20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_core_hsalsa20.h; sourceTree = \"<group>\"; };\n\t\tB81888301D2C09DA00E41C89 /* crypto_core_salsa20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_core_salsa20.h; sourceTree = \"<group>\"; };\n\t\tB81888311D2C09DA00E41C89 /* crypto_core_salsa2012.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_core_salsa2012.h; sourceTree = \"<group>\"; };\n\t\tB81888321D2C09DA00E41C89 /* crypto_core_salsa208.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_core_salsa208.h; sourceTree = \"<group>\"; };\n\t\tB81888331D2C09DA00E41C89 /* crypto_generichash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_generichash.h; sourceTree = \"<group>\"; };\n\t\tB81888341D2C09DA00E41C89 /* crypto_generichash_blake2b.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_generichash_blake2b.h; sourceTree = \"<group>\"; };\n\t\tB81888351D2C09DA00E41C89 /* crypto_hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_hash.h; sourceTree = \"<group>\"; };\n\t\tB81888361D2C09DA00E41C89 /* crypto_hash_sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_hash_sha256.h; sourceTree = \"<group>\"; };\n\t\tB81888371D2C09DA00E41C89 /* crypto_hash_sha512.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_hash_sha512.h; sourceTree = \"<group>\"; };\n\t\tB81888381D2C09DA00E41C89 /* crypto_int32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_int32.h; sourceTree = \"<group>\"; };\n\t\tB81888391D2C09DA00E41C89 /* crypto_int64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_int64.h; sourceTree = \"<group>\"; };\n\t\tB818883A1D2C09DA00E41C89 /* crypto_onetimeauth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_onetimeauth.h; sourceTree = \"<group>\"; };\n\t\tB818883B1D2C09DA00E41C89 /* crypto_onetimeauth_poly1305.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_onetimeauth_poly1305.h; sourceTree = \"<group>\"; };\n\t\tB818883C1D2C09DA00E41C89 /* crypto_pwhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_pwhash.h; sourceTree = \"<group>\"; };\n\t\tB818883D1D2C09DA00E41C89 /* crypto_pwhash_argon2i.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_pwhash_argon2i.h; sourceTree = \"<group>\"; };\n\t\tB818883E1D2C09DA00E41C89 /* crypto_pwhash_scryptsalsa208sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_pwhash_scryptsalsa208sha256.h; sourceTree = \"<group>\"; };\n\t\tB818883F1D2C09DA00E41C89 /* crypto_scalarmult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_scalarmult.h; sourceTree = \"<group>\"; };\n\t\tB81888401D2C09DA00E41C89 /* crypto_scalarmult_curve25519.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_scalarmult_curve25519.h; sourceTree = \"<group>\"; };\n\t\tB81888411D2C09DA00E41C89 /* crypto_secretbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_secretbox.h; sourceTree = \"<group>\"; };\n\t\tB81888421D2C09DA00E41C89 /* crypto_secretbox_xsalsa20poly1305.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_secretbox_xsalsa20poly1305.h; sourceTree = \"<group>\"; };\n\t\tB81888431D2C09DA00E41C89 /* crypto_shorthash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_shorthash.h; sourceTree = \"<group>\"; };\n\t\tB81888441D2C09DA00E41C89 /* crypto_shorthash_siphash24.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_shorthash_siphash24.h; sourceTree = \"<group>\"; };\n\t\tB81888451D2C09DA00E41C89 /* crypto_sign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_sign.h; sourceTree = \"<group>\"; };\n\t\tB81888461D2C09DA00E41C89 /* crypto_sign_ed25519.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_sign_ed25519.h; sourceTree = \"<group>\"; };\n\t\tB81888471D2C09DA00E41C89 /* crypto_sign_edwards25519sha512batch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_sign_edwards25519sha512batch.h; sourceTree = \"<group>\"; };\n\t\tB81888481D2C09DA00E41C89 /* crypto_stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream.h; sourceTree = \"<group>\"; };\n\t\tB81888491D2C09DA00E41C89 /* crypto_stream_aes128ctr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_aes128ctr.h; sourceTree = \"<group>\"; };\n\t\tB818884A1D2C09DA00E41C89 /* crypto_stream_chacha20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_chacha20.h; sourceTree = \"<group>\"; };\n\t\tB818884B1D2C09DA00E41C89 /* crypto_stream_salsa20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_salsa20.h; sourceTree = \"<group>\"; };\n\t\tB818884C1D2C09DA00E41C89 /* crypto_stream_salsa2012.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_salsa2012.h; sourceTree = \"<group>\"; };\n\t\tB818884D1D2C09DA00E41C89 /* crypto_stream_salsa208.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_salsa208.h; sourceTree = \"<group>\"; };\n\t\tB818884E1D2C09DA00E41C89 /* crypto_stream_xsalsa20.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_stream_xsalsa20.h; sourceTree = \"<group>\"; };\n\t\tB818884F1D2C09DA00E41C89 /* crypto_uint16.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_uint16.h; sourceTree = \"<group>\"; };\n\t\tB81888501D2C09DA00E41C89 /* crypto_uint32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_uint32.h; sourceTree = \"<group>\"; };\n\t\tB81888511D2C09DA00E41C89 /* crypto_uint64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_uint64.h; sourceTree = \"<group>\"; };\n\t\tB81888521D2C09DA00E41C89 /* crypto_uint8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_uint8.h; sourceTree = \"<group>\"; };\n\t\tB81888531D2C09DA00E41C89 /* crypto_verify_16.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_verify_16.h; sourceTree = \"<group>\"; };\n\t\tB81888541D2C09DA00E41C89 /* crypto_verify_32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_verify_32.h; sourceTree = \"<group>\"; };\n\t\tB81888551D2C09DA00E41C89 /* crypto_verify_64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_verify_64.h; sourceTree = \"<group>\"; };\n\t\tB81888561D2C09DA00E41C89 /* export.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = export.h; sourceTree = \"<group>\"; };\n\t\tB81888571D2C09DA00E41C89 /* randombytes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = randombytes.h; sourceTree = \"<group>\"; };\n\t\tB81888581D2C09DA00E41C89 /* randombytes_salsa20_random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = randombytes_salsa20_random.h; sourceTree = \"<group>\"; };\n\t\tB81888591D2C09DA00E41C89 /* randombytes_sysrandom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = randombytes_sysrandom.h; sourceTree = \"<group>\"; };\n\t\tB818885A1D2C09DA00E41C89 /* runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = runtime.h; sourceTree = \"<group>\"; };\n\t\tB818885B1D2C09DA00E41C89 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = \"<group>\"; };\n\t\tB818885C1D2C09DA00E41C89 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = \"<group>\"; };\n\t\tB818885D1D2C09DA00E41C89 /* sodium.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sodium.h; sourceTree = \"<group>\"; };\n\t\tB818885F1D2C09DA00E41C89 /* libsodium.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsodium.a; sourceTree = \"<group>\"; };\n\t\tB82847461CEAE51B00820456 /* pcrs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pcrs.c; sourceTree = \"<group>\"; };\n\t\tB82847471CEAE51B00820456 /* pcrs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pcrs.h; sourceTree = \"<group>\"; };\n\t\tB82847511CEB08CA00820456 /* miscutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = miscutil.c; sourceTree = \"<group>\"; };\n\t\tB82847521CEB08CA00820456 /* miscutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = miscutil.h; sourceTree = \"<group>\"; };\n\t\tB82847551CEB08DD00820456 /* errlog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = errlog.m; sourceTree = \"<group>\"; };\n\t\tB82847561CEB08DD00820456 /* errlog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = errlog.h; sourceTree = \"<group>\"; };\n\t\tB82847591CEB0D5900820456 /* encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encode.c; sourceTree = \"<group>\"; };\n\t\tB828475A1CEB0D5900820456 /* encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encode.h; sourceTree = \"<group>\"; };\n\t\tB828475E1CEB0E3100820456 /* pcre.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pcre.h; sourceTree = \"<group>\"; };\n\t\tB82847601CEB0E4400820456 /* pcreposix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pcreposix.c; sourceTree = \"<group>\"; };\n\t\tB82847611CEB0E4400820456 /* pcreposix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pcreposix.h; sourceTree = \"<group>\"; };\n\t\tB82847641CEB0E6400820456 /* internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = \"<group>\"; };\n\t\tB82847661CEB103800820456 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = \"<group>\"; };\n\t\tB82847671CEB103800820456 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = \"<group>\"; };\n\t\tB828476A1CEB104E00820456 /* filters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters.c; sourceTree = \"<group>\"; };\n\t\tB828476B1CEB104E00820456 /* filters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = \"<group>\"; };\n\t\tB828476E1CEB105B00820456 /* parsers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parsers.c; sourceTree = \"<group>\"; };\n\t\tB828476F1CEB105B00820456 /* parsers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parsers.h; sourceTree = \"<group>\"; };\n\t\tB82847721CEB106200820456 /* loaders.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = loaders.c; sourceTree = \"<group>\"; };\n\t\tB82847731CEB106200820456 /* loaders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loaders.h; sourceTree = \"<group>\"; };\n\t\tB82847761CEB109700820456 /* ssplit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ssplit.c; sourceTree = \"<group>\"; };\n\t\tB82847771CEB109700820456 /* ssplit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssplit.h; sourceTree = \"<group>\"; };\n\t\tB828477A1CEB10AA00820456 /* jbsockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jbsockets.c; sourceTree = \"<group>\"; };\n\t\tB828477B1CEB10AA00820456 /* jbsockets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jbsockets.h; sourceTree = \"<group>\"; };\n\t\tB828477E1CEB10B800820456 /* actions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = actions.m; sourceTree = \"<group>\"; };\n\t\tB828477F1CEB10B800820456 /* actions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = actions.h; sourceTree = \"<group>\"; };\n\t\tB82847821CEB10BF00820456 /* cgi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cgi.c; sourceTree = \"<group>\"; };\n\t\tB82847831CEB10BF00820456 /* cgi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cgi.h; sourceTree = \"<group>\"; };\n\t\tB82847861CEB10C900820456 /* deanimate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = deanimate.c; sourceTree = \"<group>\"; };\n\t\tB82847871CEB10C900820456 /* deanimate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = deanimate.h; sourceTree = \"<group>\"; };\n\t\tB828478A1CEB10D400820456 /* urlmatch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = urlmatch.c; sourceTree = \"<group>\"; };\n\t\tB828478B1CEB10D400820456 /* urlmatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = urlmatch.h; sourceTree = \"<group>\"; };\n\t\tB828478E1CEB10E200820456 /* actionlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = actionlist.h; sourceTree = \"<group>\"; };\n\t\tB82847901CEB10EB00820456 /* cgisimple.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cgisimple.c; sourceTree = \"<group>\"; };\n\t\tB82847911CEB10EB00820456 /* cgisimple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cgisimple.h; sourceTree = \"<group>\"; };\n\t\tB82847941CEB10F500820456 /* cgiedit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cgiedit.c; sourceTree = \"<group>\"; };\n\t\tB82847951CEB10F500820456 /* cgiedit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cgiedit.h; sourceTree = \"<group>\"; };\n\t\tB82847981CEB110400820456 /* loadcfg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = loadcfg.c; sourceTree = \"<group>\"; };\n\t\tB82847991CEB110400820456 /* loadcfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loadcfg.h; sourceTree = \"<group>\"; };\n\t\tB828479C1CEB111000820456 /* gateway.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gateway.c; sourceTree = \"<group>\"; };\n\t\tB828479D1CEB111000820456 /* gateway.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gateway.h; sourceTree = \"<group>\"; };\n\t\tB82847A01CEB11DA00820456 /* study.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = study.c; sourceTree = \"<group>\"; };\n\t\tB82847A41CEB11EA00820456 /* chartables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = chartables.c; sourceTree = \"<group>\"; };\n\t\tB82847A71CEB11F600820456 /* get.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = get.c; sourceTree = \"<group>\"; };\n\t\tB82847A91CEB11F600820456 /* pcre.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pcre.c; sourceTree = \"<group>\"; };\n\t\tB82847AE1CEB125500820456 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };\n\t\tB82847B41CEB14B000820456 /* ShadowPathDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ShadowPathDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB82847B71CEB14B000820456 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\tB82847B91CEB14B000820456 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\tB82847BA1CEB14B000820456 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\tB82847BC1CEB14B000820456 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = \"<group>\"; };\n\t\tB82847BD1CEB14B000820456 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = \"<group>\"; };\n\t\tB82847C01CEB14B000820456 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tB82847C21CEB14B000820456 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tB82847C51CEB14B000820456 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tB82847C71CEB14B000820456 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tB82847CC1CEB168400820456 /* config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config; sourceTree = \"<group>\"; };\n\t\tB830CC661D2D69E300FA8E37 /* auth.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auth.c; sourceTree = \"<group>\"; };\n\t\tB830CC671D2D69E300FA8E37 /* auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auth.h; sourceTree = \"<group>\"; };\n\t\tB830CC6A1D2D69FA00FA8E37 /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crc32.c; sourceTree = \"<group>\"; };\n\t\tB830CC6C1D2D6A0000FA8E37 /* http_simple.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = http_simple.c; sourceTree = \"<group>\"; };\n\t\tB830CC6D1D2D6A0000FA8E37 /* http_simple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http_simple.h; sourceTree = \"<group>\"; };\n\t\tB830CC701D2D6A1700FA8E37 /* obfs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = obfs.c; sourceTree = \"<group>\"; };\n\t\tB830CC711D2D6A1700FA8E37 /* obfs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obfs.h; sourceTree = \"<group>\"; };\n\t\tB830CC721D2D6A1700FA8E37 /* obfsutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = obfsutil.c; sourceTree = \"<group>\"; };\n\t\tB830CC761D2D6A3400FA8E37 /* tls1.0_session.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tls1.0_session.c; sourceTree = \"<group>\"; };\n\t\tB830CC771D2D6A3400FA8E37 /* tls1.0_session.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.0_session.h; sourceTree = \"<group>\"; };\n\t\tB830CC781D2D6A3400FA8E37 /* tls1.2_ticket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tls1.2_ticket.c; sourceTree = \"<group>\"; };\n\t\tB830CC791D2D6A3400FA8E37 /* tls1.2_ticket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.2_ticket.h; sourceTree = \"<group>\"; };\n\t\tB830CC7E1D2D6A4000FA8E37 /* verify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = verify.c; sourceTree = \"<group>\"; };\n\t\tB830CC7F1D2D6A4000FA8E37 /* verify.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = verify.h; sourceTree = \"<group>\"; };\n\t\tB830CC821D2D6D1A00FA8E37 /* crc32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = crc32.h; sourceTree = \"<group>\"; };\n\t\tB86B000A1D17DABA00613014 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = \"<group>\"; };\n\t\tB86B00391D17DABA00613014 /* commands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = commands.c; sourceTree = \"<group>\"; };\n\t\tB86B00451D17DABA00613014 /* allocator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = allocator.c; sourceTree = \"<group>\"; };\n\t\tB86B00461D17DABA00613014 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = \"<group>\"; };\n\t\tB86B00471D17DABA00613014 /* gc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = gc.c; sourceTree = \"<group>\"; };\n\t\tB86B00481D17DABA00613014 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = \"<group>\"; };\n\t\tB86B00491D17DABA00613014 /* ip-address.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"ip-address.c\"; sourceTree = \"<group>\"; };\n\t\tB86B004A1D17DABA00613014 /* mempool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mempool.c; sourceTree = \"<group>\"; };\n\t\tB86B004B1D17DABA00613014 /* timestamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timestamp.c; sourceTree = \"<group>\"; };\n\t\tB86B004C1D17DABA00613014 /* u128.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = u128.c; sourceTree = \"<group>\"; };\n\t\tB86B00581D17DABA00613014 /* array.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = \"<group>\"; };\n\t\tB86B00591D17DABA00613014 /* bitset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bitset.c; sourceTree = \"<group>\"; };\n\t\tB86B005A1D17DABA00613014 /* buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer.c; sourceTree = \"<group>\"; };\n\t\tB86B005B1D17DABA00613014 /* dllist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dllist.c; sourceTree = \"<group>\"; };\n\t\tB86B005C1D17DABA00613014 /* file-stream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"file-stream.c\"; sourceTree = \"<group>\"; };\n\t\tB86B005D1D17DABA00613014 /* hash-table.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"hash-table.c\"; sourceTree = \"<group>\"; };\n\t\tB86B005E1D17DABA00613014 /* managed-buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"managed-buffer.c\"; sourceTree = \"<group>\"; };\n\t\tB86B005F1D17DABA00613014 /* ring-buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"ring-buffer.c\"; sourceTree = \"<group>\"; };\n\t\tB86B00601D17DABA00613014 /* slice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = slice.c; sourceTree = \"<group>\"; };\n\t\tB86B00A31D17DABA00613014 /* directory-walker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"directory-walker.c\"; sourceTree = \"<group>\"; };\n\t\tB86B00A41D17DABA00613014 /* env.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = env.c; sourceTree = \"<group>\"; };\n\t\tB86B00A51D17DABA00613014 /* exec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = exec.c; sourceTree = \"<group>\"; };\n\t\tB86B00A61D17DABA00613014 /* files.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = files.c; sourceTree = \"<group>\"; };\n\t\tB86B00A71D17DABA00613014 /* process.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = process.c; sourceTree = \"<group>\"; };\n\t\tB86B00A81D17DABA00613014 /* subprocess.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = subprocess.c; sourceTree = \"<group>\"; };\n\t\tB86B00AC1D17DABA00613014 /* thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = thread.c; sourceTree = \"<group>\"; };\n\t\tB86B00B81D17DABA00613014 /* ev.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ev.c; sourceTree = \"<group>\"; };\n\t\tB86B00B91D17DABA00613014 /* ev.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ev.h; sourceTree = \"<group>\"; };\n\t\tB86B00C01D17DABA00613014 /* ev_vars.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ev_vars.h; sourceTree = \"<group>\"; };\n\t\tB86B00C21D17DABA00613014 /* ev_wrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ev_wrap.h; sourceTree = \"<group>\"; };\n\t\tB86B00C31D17DABA00613014 /* event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = event.c; sourceTree = \"<group>\"; };\n\t\tB86B00C41D17DABA00613014 /* event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = event.h; sourceTree = \"<group>\"; };\n\t\tB86B00D91D17DABA00613014 /* assignments.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = assignments.c; sourceTree = \"<group>\"; };\n\t\tB86B00DA1D17DABA00613014 /* basics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = basics.c; sourceTree = \"<group>\"; };\n\t\tB86B00DB1D17DABA00613014 /* bdd-iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = \"bdd-iterator.c\"; sourceTree = \"<group>\"; };\n\t\tB86B00DC1D17DABA00613014 /* expanded.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = expanded.c; sourceTree = \"<group>\"; };\n\t\tB86B00DF1D17DABA00613014 /* reachable.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = reachable.c; sourceTree = \"<group>\"; };\n\t\tB86B00E01D17DABA00613014 /* read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = read.c; sourceTree = \"<group>\"; };\n\t\tB86B00E11D17DABA00613014 /* write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = write.c; sourceTree = \"<group>\"; };\n\t\tB86B00E21D17DABA00613014 /* general.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = general.c; sourceTree = \"<group>\"; };\n\t\tB86B00F61D17DABA00613014 /* allocation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = allocation.c; sourceTree = \"<group>\"; };\n\t\tB86B00F81D17DABA00613014 /* inspection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inspection.c; sourceTree = \"<group>\"; };\n\t\tB86B00F91D17DABA00613014 /* ipv4_map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ipv4_map.c; sourceTree = \"<group>\"; };\n\t\tB86B00FA1D17DABA00613014 /* ipv6_map.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ipv6_map.c; sourceTree = \"<group>\"; };\n\t\tB86B00FD1D17DABA00613014 /* storage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = storage.c; sourceTree = \"<group>\"; };\n\t\tB86B01071D17DABA00613014 /* allocation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = allocation.c; sourceTree = \"<group>\"; };\n\t\tB86B01091D17DABA00613014 /* inspection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inspection.c; sourceTree = \"<group>\"; };\n\t\tB86B010A1D17DABA00613014 /* ipv4_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ipv4_set.c; sourceTree = \"<group>\"; };\n\t\tB86B010B1D17DABA00613014 /* ipv6_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ipv6_set.c; sourceTree = \"<group>\"; };\n\t\tB86B010C1D17DABA00613014 /* iterator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iterator.c; sourceTree = \"<group>\"; };\n\t\tB86B010F1D17DABA00613014 /* storage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = storage.c; sourceTree = \"<group>\"; };\n\t\tB86B04081D17DABB00613014 /* udns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udns.h; sourceTree = \"<group>\"; };\n\t\tB86B04091D17DABB00613014 /* udns_bl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_bl.c; sourceTree = \"<group>\"; };\n\t\tB86B040A1D17DABB00613014 /* udns_codes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_codes.c; sourceTree = \"<group>\"; };\n\t\tB86B040B1D17DABB00613014 /* udns_dn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_dn.c; sourceTree = \"<group>\"; };\n\t\tB86B040C1D17DABB00613014 /* udns_dntosp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_dntosp.c; sourceTree = \"<group>\"; };\n\t\tB86B040D1D17DABB00613014 /* udns_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_init.c; sourceTree = \"<group>\"; };\n\t\tB86B040E1D17DABB00613014 /* udns_jran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_jran.c; sourceTree = \"<group>\"; };\n\t\tB86B040F1D17DABB00613014 /* udns_misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_misc.c; sourceTree = \"<group>\"; };\n\t\tB86B04101D17DABB00613014 /* udns_parse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_parse.c; sourceTree = \"<group>\"; };\n\t\tB86B04111D17DABB00613014 /* udns_resolver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_resolver.c; sourceTree = \"<group>\"; };\n\t\tB86B04121D17DABB00613014 /* udns_rr_a.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_a.c; sourceTree = \"<group>\"; };\n\t\tB86B04131D17DABB00613014 /* udns_rr_mx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_mx.c; sourceTree = \"<group>\"; };\n\t\tB86B04141D17DABB00613014 /* udns_rr_naptr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_naptr.c; sourceTree = \"<group>\"; };\n\t\tB86B04151D17DABB00613014 /* udns_rr_ptr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_ptr.c; sourceTree = \"<group>\"; };\n\t\tB86B04161D17DABB00613014 /* udns_rr_srv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_srv.c; sourceTree = \"<group>\"; };\n\t\tB86B04171D17DABB00613014 /* udns_rr_txt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_rr_txt.c; sourceTree = \"<group>\"; };\n\t\tB86B04181D17DABB00613014 /* udns_XtoX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udns_XtoX.c; sourceTree = \"<group>\"; };\n\t\tB86B04781D17DABB00613014 /* acl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = acl.c; sourceTree = \"<group>\"; };\n\t\tB86B04791D17DABB00613014 /* acl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = acl.h; sourceTree = \"<group>\"; };\n\t\tB86B047B1D17DABB00613014 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cache.c; sourceTree = \"<group>\"; };\n\t\tB86B047C1D17DABB00613014 /* cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cache.h; sourceTree = \"<group>\"; };\n\t\tB86B047D1D17DABB00613014 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = \"<group>\"; };\n\t\tB86B047E1D17DABB00613014 /* encrypt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = encrypt.c; sourceTree = \"<group>\"; };\n\t\tB86B047F1D17DABB00613014 /* encrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encrypt.h; sourceTree = \"<group>\"; };\n\t\tB86B04801D17DABB00613014 /* jconf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jconf.c; sourceTree = \"<group>\"; };\n\t\tB86B04811D17DABB00613014 /* jconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jconf.h; sourceTree = \"<group>\"; };\n\t\tB86B04821D17DABB00613014 /* json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = json.c; sourceTree = \"<group>\"; };\n\t\tB86B04831D17DABB00613014 /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = \"<group>\"; };\n\t\tB86B04841D17DABB00613014 /* local.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = local.c; sourceTree = \"<group>\"; };\n\t\tB86B04851D17DABB00613014 /* local.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = local.h; sourceTree = \"<group>\"; };\n\t\tB86B048B1D17DABB00613014 /* netutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netutils.c; sourceTree = \"<group>\"; };\n\t\tB86B048C1D17DABB00613014 /* netutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netutils.h; sourceTree = \"<group>\"; };\n\t\tB86B048F1D17DABB00613014 /* resolv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = resolv.c; sourceTree = \"<group>\"; };\n\t\tB86B04901D17DABB00613014 /* resolv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = resolv.h; sourceTree = \"<group>\"; };\n\t\tB86B04931D17DABB00613014 /* shadowsocks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shadowsocks.h; sourceTree = \"<group>\"; };\n\t\tB86B04941D17DABB00613014 /* socks5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socks5.h; sourceTree = \"<group>\"; };\n\t\tB86B04981D17DABB00613014 /* udprelay.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udprelay.c; sourceTree = \"<group>\"; };\n\t\tB86B04991D17DABB00613014 /* udprelay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udprelay.h; sourceTree = \"<group>\"; };\n\t\tB86B049A1D17DABB00613014 /* uthash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uthash.h; sourceTree = \"<group>\"; };\n\t\tB86B049B1D17DABB00613014 /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = \"<group>\"; };\n\t\tB86B049C1D17DABB00613014 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = \"<group>\"; };\n\t\tB8D0CD671CF1AF60007282A7 /* radix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = radix.c; sourceTree = \"<group>\"; };\n\t\tB8D0CD681CF1AF60007282A7 /* radix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = radix.h; sourceTree = \"<group>\"; };\n\t\tB8DEFD7B1CE9C923003FC706 /* ShadowPath.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ShadowPath.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB8DEFD7E1CE9C923003FC706 /* ShadowPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShadowPath.h; sourceTree = \"<group>\"; };\n\t\tB8DEFD801CE9C923003FC706 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tB8DEFEF71CEA1D4C003FC706 /* jcc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = jcc.m; sourceTree = \"<group>\"; };\n\t\tB8DEFEF81CEA1D4C003FC706 /* jcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jcc.h; sourceTree = \"<group>\"; };\n\t\tB8DEFEFB1CEA1DCE003FC706 /* sp_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sp_config.h; sourceTree = \"<group>\"; };\n\t\tB8DEFEFD1CEA1EB7003FC706 /* project.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = project.h; sourceTree = \"<group>\"; };\n\t\tB8EAC5C61D40D01C0046963C /* maxminddb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxminddb.h; sourceTree = \"<group>\"; };\n\t\tB8EAC5C71D40D01C0046963C /* maxminddb_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxminddb_config.h; sourceTree = \"<group>\"; };\n\t\tB8EAC5FA1D40D01C0046963C /* maxminddb-compat-util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"maxminddb-compat-util.h\"; sourceTree = \"<group>\"; };\n\t\tB8EAC5FB1D40D01C0046963C /* maxminddb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = maxminddb.c; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tB82847B11CEB14B000820456 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB82847CB1CEB15D300820456 /* ShadowPath.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB8DEFD771CE9C923003FC706 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB81888991D2C09DA00E41C89 /* libsodium.a in Frameworks */,\n\t\t\t\tB81887A61D2BFC1B00E41C89 /* libssl.a in Frameworks */,\n\t\t\t\tB81887A51D2BFC1B00E41C89 /* libcrypto.a in Frameworks */,\n\t\t\t\tB82847AF1CEB125500820456 /* libz.tbd in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\tB81887071D2BFC1B00E41C89 /* libopenssl */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81887081D2BFC1B00E41C89 /* include */,\n\t\t\t\tB81887561D2BFC1B00E41C89 /* lib */,\n\t\t\t);\n\t\t\tpath = libopenssl;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81887081D2BFC1B00E41C89 /* include */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81887091D2BFC1B00E41C89 /* LICENSE */,\n\t\t\t\tB818870A1D2BFC1B00E41C89 /* openssl */,\n\t\t\t);\n\t\t\tpath = include;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB818870A1D2BFC1B00E41C89 /* openssl */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB818870B1D2BFC1B00E41C89 /* aes.h */,\n\t\t\t\tB818870C1D2BFC1B00E41C89 /* asn1.h */,\n\t\t\t\tB818870D1D2BFC1B00E41C89 /* asn1_mac.h */,\n\t\t\t\tB818870E1D2BFC1B00E41C89 /* asn1t.h */,\n\t\t\t\tB818870F1D2BFC1B00E41C89 /* bio.h */,\n\t\t\t\tB81887101D2BFC1B00E41C89 /* blowfish.h */,\n\t\t\t\tB81887111D2BFC1B00E41C89 /* bn.h */,\n\t\t\t\tB81887121D2BFC1B00E41C89 /* buffer.h */,\n\t\t\t\tB81887131D2BFC1B00E41C89 /* camellia.h */,\n\t\t\t\tB81887141D2BFC1B00E41C89 /* cast.h */,\n\t\t\t\tB81887151D2BFC1B00E41C89 /* cmac.h */,\n\t\t\t\tB81887161D2BFC1B00E41C89 /* cms.h */,\n\t\t\t\tB81887171D2BFC1B00E41C89 /* comp.h */,\n\t\t\t\tB81887181D2BFC1B00E41C89 /* conf.h */,\n\t\t\t\tB81887191D2BFC1B00E41C89 /* conf_api.h */,\n\t\t\t\tB818871A1D2BFC1B00E41C89 /* crypto.h */,\n\t\t\t\tB818871B1D2BFC1B00E41C89 /* des.h */,\n\t\t\t\tB818871C1D2BFC1B00E41C89 /* des_old.h */,\n\t\t\t\tB818871D1D2BFC1B00E41C89 /* dh.h */,\n\t\t\t\tB818871E1D2BFC1B00E41C89 /* dsa.h */,\n\t\t\t\tB818871F1D2BFC1B00E41C89 /* dso.h */,\n\t\t\t\tB81887201D2BFC1B00E41C89 /* dtls1.h */,\n\t\t\t\tB81887211D2BFC1B00E41C89 /* e_os2.h */,\n\t\t\t\tB81887221D2BFC1B00E41C89 /* ebcdic.h */,\n\t\t\t\tB81887231D2BFC1B00E41C89 /* ec.h */,\n\t\t\t\tB81887241D2BFC1B00E41C89 /* ecdh.h */,\n\t\t\t\tB81887251D2BFC1B00E41C89 /* ecdsa.h */,\n\t\t\t\tB81887261D2BFC1B00E41C89 /* engine.h */,\n\t\t\t\tB81887271D2BFC1B00E41C89 /* err.h */,\n\t\t\t\tB81887281D2BFC1B00E41C89 /* evp.h */,\n\t\t\t\tB81887291D2BFC1B00E41C89 /* hmac.h */,\n\t\t\t\tB818872A1D2BFC1B00E41C89 /* idea.h */,\n\t\t\t\tB818872B1D2BFC1B00E41C89 /* krb5_asn.h */,\n\t\t\t\tB818872C1D2BFC1B00E41C89 /* kssl.h */,\n\t\t\t\tB818872D1D2BFC1B00E41C89 /* lhash.h */,\n\t\t\t\tB818872E1D2BFC1B00E41C89 /* md4.h */,\n\t\t\t\tB818872F1D2BFC1B00E41C89 /* md5.h */,\n\t\t\t\tB81887301D2BFC1B00E41C89 /* mdc2.h */,\n\t\t\t\tB81887311D2BFC1B00E41C89 /* modes.h */,\n\t\t\t\tB81887321D2BFC1B00E41C89 /* obj_mac.h */,\n\t\t\t\tB81887331D2BFC1B00E41C89 /* objects.h */,\n\t\t\t\tB81887341D2BFC1B00E41C89 /* ocsp.h */,\n\t\t\t\tB81887351D2BFC1B00E41C89 /* opensslconf.h */,\n\t\t\t\tB81887361D2BFC1B00E41C89 /* opensslv.h */,\n\t\t\t\tB81887371D2BFC1B00E41C89 /* ossl_typ.h */,\n\t\t\t\tB81887381D2BFC1B00E41C89 /* pem.h */,\n\t\t\t\tB81887391D2BFC1B00E41C89 /* pem2.h */,\n\t\t\t\tB818873A1D2BFC1B00E41C89 /* pkcs12.h */,\n\t\t\t\tB818873B1D2BFC1B00E41C89 /* pkcs7.h */,\n\t\t\t\tB818873C1D2BFC1B00E41C89 /* pqueue.h */,\n\t\t\t\tB818873D1D2BFC1B00E41C89 /* rand.h */,\n\t\t\t\tB818873E1D2BFC1B00E41C89 /* rc2.h */,\n\t\t\t\tB818873F1D2BFC1B00E41C89 /* rc4.h */,\n\t\t\t\tB81887401D2BFC1B00E41C89 /* ripemd.h */,\n\t\t\t\tB81887411D2BFC1B00E41C89 /* rsa.h */,\n\t\t\t\tB81887421D2BFC1B00E41C89 /* safestack.h */,\n\t\t\t\tB81887431D2BFC1B00E41C89 /* seed.h */,\n\t\t\t\tB81887441D2BFC1B00E41C89 /* sha.h */,\n\t\t\t\tB81887451D2BFC1B00E41C89 /* srp.h */,\n\t\t\t\tB81887461D2BFC1B00E41C89 /* srtp.h */,\n\t\t\t\tB81887471D2BFC1B00E41C89 /* ssl.h */,\n\t\t\t\tB81887481D2BFC1B00E41C89 /* ssl2.h */,\n\t\t\t\tB81887491D2BFC1B00E41C89 /* ssl23.h */,\n\t\t\t\tB818874A1D2BFC1B00E41C89 /* ssl3.h */,\n\t\t\t\tB818874B1D2BFC1B00E41C89 /* stack.h */,\n\t\t\t\tB818874C1D2BFC1B00E41C89 /* symhacks.h */,\n\t\t\t\tB818874D1D2BFC1B00E41C89 /* tls1.h */,\n\t\t\t\tB818874E1D2BFC1B00E41C89 /* ts.h */,\n\t\t\t\tB818874F1D2BFC1B00E41C89 /* txt_db.h */,\n\t\t\t\tB81887501D2BFC1B00E41C89 /* ui.h */,\n\t\t\t\tB81887511D2BFC1B00E41C89 /* ui_compat.h */,\n\t\t\t\tB81887521D2BFC1B00E41C89 /* whrlpool.h */,\n\t\t\t\tB81887531D2BFC1B00E41C89 /* x509.h */,\n\t\t\t\tB81887541D2BFC1B00E41C89 /* x509_vfy.h */,\n\t\t\t\tB81887551D2BFC1B00E41C89 /* x509v3.h */,\n\t\t\t);\n\t\t\tpath = openssl;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81887561D2BFC1B00E41C89 /* lib */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81887571D2BFC1B00E41C89 /* libcrypto.a */,\n\t\t\t\tB81887581D2BFC1B00E41C89 /* libssl.a */,\n\t\t\t);\n\t\t\tpath = lib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81888221D2C09DA00E41C89 /* libsodium-ios */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81888231D2C09DA00E41C89 /* include */,\n\t\t\t\tB818885E1D2C09DA00E41C89 /* lib */,\n\t\t\t);\n\t\t\tpath = \"libsodium-ios\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81888231D2C09DA00E41C89 /* include */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81888241D2C09DA00E41C89 /* sodium */,\n\t\t\t\tB818885D1D2C09DA00E41C89 /* sodium.h */,\n\t\t\t);\n\t\t\tpath = include;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB81888241D2C09DA00E41C89 /* sodium */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81888251D2C09DA00E41C89 /* core.h */,\n\t\t\t\tB81888261D2C09DA00E41C89 /* crypto_aead_aes256gcm.h */,\n\t\t\t\tB81888271D2C09DA00E41C89 /* crypto_aead_chacha20poly1305.h */,\n\t\t\t\tB81888281D2C09DA00E41C89 /* crypto_auth.h */,\n\t\t\t\tB81888291D2C09DA00E41C89 /* crypto_auth_hmacsha256.h */,\n\t\t\t\tB818882A1D2C09DA00E41C89 /* crypto_auth_hmacsha512.h */,\n\t\t\t\tB818882B1D2C09DA00E41C89 /* crypto_auth_hmacsha512256.h */,\n\t\t\t\tB818882C1D2C09DA00E41C89 /* crypto_box.h */,\n\t\t\t\tB818882D1D2C09DA00E41C89 /* crypto_box_curve25519xsalsa20poly1305.h */,\n\t\t\t\tB818882E1D2C09DA00E41C89 /* crypto_core_hchacha20.h */,\n\t\t\t\tB818882F1D2C09DA00E41C89 /* crypto_core_hsalsa20.h */,\n\t\t\t\tB81888301D2C09DA00E41C89 /* crypto_core_salsa20.h */,\n\t\t\t\tB81888311D2C09DA00E41C89 /* crypto_core_salsa2012.h */,\n\t\t\t\tB81888321D2C09DA00E41C89 /* crypto_core_salsa208.h */,\n\t\t\t\tB81888331D2C09DA00E41C89 /* crypto_generichash.h */,\n\t\t\t\tB81888341D2C09DA00E41C89 /* crypto_generichash_blake2b.h */,\n\t\t\t\tB81888351D2C09DA00E41C89 /* crypto_hash.h */,\n\t\t\t\tB81888361D2C09DA00E41C89 /* crypto_hash_sha256.h */,\n\t\t\t\tB81888371D2C09DA00E41C89 /* crypto_hash_sha512.h */,\n\t\t\t\tB81888381D2C09DA00E41C89 /* crypto_int32.h */,\n\t\t\t\tB81888391D2C09DA00E41C89 /* crypto_int64.h */,\n\t\t\t\tB818883A1D2C09DA00E41C89 /* crypto_onetimeauth.h */,\n\t\t\t\tB818883B1D2C09DA00E41C89 /* crypto_onetimeauth_poly1305.h */,\n\t\t\t\tB818883C1D2C09DA00E41C89 /* crypto_pwhash.h */,\n\t\t\t\tB818883D1D2C09DA00E41C89 /* crypto_pwhash_argon2i.h */,\n\t\t\t\tB818883E1D2C09DA00E41C89 /* crypto_pwhash_scryptsalsa208sha256.h */,\n\t\t\t\tB818883F1D2C09DA00E41C89 /* crypto_scalarmult.h */,\n\t\t\t\tB81888401D2C09DA00E41C89 /* crypto_scalarmult_curve25519.h */,\n\t\t\t\tB81888411D2C09DA00E41C89 /* crypto_secretbox.h */,\n\t\t\t\tB81888421D2C09DA00E41C89 /* crypto_secretbox_xsalsa20poly1305.h */,\n\t\t\t\tB81888431D2C09DA00E41C89 /* crypto_shorthash.h */,\n\t\t\t\tB81888441D2C09DA00E41C89 /* crypto_shorthash_siphash24.h */,\n\t\t\t\tB81888451D2C09DA00E41C89 /* crypto_sign.h */,\n\t\t\t\tB81888461D2C09DA00E41C89 /* crypto_sign_ed25519.h */,\n\t\t\t\tB81888471D2C09DA00E41C89 /* crypto_sign_edwards25519sha512batch.h */,\n\t\t\t\tB81888481D2C09DA00E41C89 /* crypto_stream.h */,\n\t\t\t\tB81888491D2C09DA00E41C89 /* crypto_stream_aes128ctr.h */,\n\t\t\t\tB818884A1D2C09DA00E41C89 /* crypto_stream_chacha20.h */,\n\t\t\t\tB818884B1D2C09DA00E41C89 /* crypto_stream_salsa20.h */,\n\t\t\t\tB818884C1D2C09DA00E41C89 /* crypto_stream_salsa2012.h */,\n\t\t\t\tB818884D1D2C09DA00E41C89 /* crypto_stream_salsa208.h */,\n\t\t\t\tB818884E1D2C09DA00E41C89 /* crypto_stream_xsalsa20.h */,\n\t\t\t\tB818884F1D2C09DA00E41C89 /* crypto_uint16.h */,\n\t\t\t\tB81888501D2C09DA00E41C89 /* crypto_uint32.h */,\n\t\t\t\tB81888511D2C09DA00E41C89 /* crypto_uint64.h */,\n\t\t\t\tB81888521D2C09DA00E41C89 /* crypto_uint8.h */,\n\t\t\t\tB81888531D2C09DA00E41C89 /* crypto_verify_16.h */,\n\t\t\t\tB81888541D2C09DA00E41C89 /* crypto_verify_32.h */,\n\t\t\t\tB81888551D2C09DA00E41C89 /* crypto_verify_64.h */,\n\t\t\t\tB81888561D2C09DA00E41C89 /* export.h */,\n\t\t\t\tB81888571D2C09DA00E41C89 /* randombytes.h */,\n\t\t\t\tB81888581D2C09DA00E41C89 /* randombytes_salsa20_random.h */,\n\t\t\t\tB81888591D2C09DA00E41C89 /* randombytes_sysrandom.h */,\n\t\t\t\tB818885A1D2C09DA00E41C89 /* runtime.h */,\n\t\t\t\tB818885B1D2C09DA00E41C89 /* utils.h */,\n\t\t\t\tB818885C1D2C09DA00E41C89 /* version.h */,\n\t\t\t);\n\t\t\tpath = sodium;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB818885E1D2C09DA00E41C89 /* lib */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB818885F1D2C09DA00E41C89 /* libsodium.a */,\n\t\t\t);\n\t\t\tpath = lib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB828475D1CEB0E1D00820456 /* pcre */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB82847A41CEB11EA00820456 /* chartables.c */,\n\t\t\t\tB82847A71CEB11F600820456 /* get.c */,\n\t\t\t\tB82847641CEB0E6400820456 /* internal.h */,\n\t\t\t\tB82847A91CEB11F600820456 /* pcre.c */,\n\t\t\t\tB828475E1CEB0E3100820456 /* pcre.h */,\n\t\t\t\tB82847601CEB0E4400820456 /* pcreposix.c */,\n\t\t\t\tB82847611CEB0E4400820456 /* pcreposix.h */,\n\t\t\t\tB82847A01CEB11DA00820456 /* study.c */,\n\t\t\t);\n\t\t\tpath = pcre;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB82847B51CEB14B000820456 /* ShadowPathDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB82847B61CEB14B000820456 /* Supporting Files */,\n\t\t\t\tB82847B91CEB14B000820456 /* AppDelegate.h */,\n\t\t\t\tB82847BA1CEB14B000820456 /* AppDelegate.m */,\n\t\t\t\tB82847C21CEB14B000820456 /* Assets.xcassets */,\n\t\t\t\tB82847C71CEB14B000820456 /* Info.plist */,\n\t\t\t\tB82847C41CEB14B000820456 /* LaunchScreen.storyboard */,\n\t\t\t\tB82847BF1CEB14B000820456 /* Main.storyboard */,\n\t\t\t\tB82847BC1CEB14B000820456 /* ViewController.h */,\n\t\t\t\tB82847BD1CEB14B000820456 /* ViewController.m */,\n\t\t\t\tB82847CC1CEB168400820456 /* config */,\n\t\t\t);\n\t\t\tpath = ShadowPathDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB82847B61CEB14B000820456 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB82847B71CEB14B000820456 /* main.m */,\n\t\t\t);\n\t\t\tpath = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB82D7D461CEC6B6300357F5F /* Privoxy */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB828475D1CEB0E1D00820456 /* pcre */,\n\t\t\t\tB828478E1CEB10E200820456 /* actionlist.h */,\n\t\t\t\tB828477E1CEB10B800820456 /* actions.m */,\n\t\t\t\tB828477F1CEB10B800820456 /* actions.h */,\n\t\t\t\tB82847821CEB10BF00820456 /* cgi.c */,\n\t\t\t\tB82847831CEB10BF00820456 /* cgi.h */,\n\t\t\t\tB82847941CEB10F500820456 /* cgiedit.c */,\n\t\t\t\tB82847951CEB10F500820456 /* cgiedit.h */,\n\t\t\t\tB82847901CEB10EB00820456 /* cgisimple.c */,\n\t\t\t\tB82847911CEB10EB00820456 /* cgisimple.h */,\n\t\t\t\tB82847861CEB10C900820456 /* deanimate.c */,\n\t\t\t\tB82847871CEB10C900820456 /* deanimate.h */,\n\t\t\t\tB82847591CEB0D5900820456 /* encode.c */,\n\t\t\t\tB828475A1CEB0D5900820456 /* encode.h */,\n\t\t\t\tB82847561CEB08DD00820456 /* errlog.h */,\n\t\t\t\tB82847551CEB08DD00820456 /* errlog.m */,\n\t\t\t\tB828476A1CEB104E00820456 /* filters.c */,\n\t\t\t\tB828476B1CEB104E00820456 /* filters.h */,\n\t\t\t\tB828479C1CEB111000820456 /* gateway.c */,\n\t\t\t\tB828479D1CEB111000820456 /* gateway.h */,\n\t\t\t\tB828477A1CEB10AA00820456 /* jbsockets.c */,\n\t\t\t\tB828477B1CEB10AA00820456 /* jbsockets.h */,\n\t\t\t\tB8DEFEF81CEA1D4C003FC706 /* jcc.h */,\n\t\t\t\tB8DEFEF71CEA1D4C003FC706 /* jcc.m */,\n\t\t\t\tB82847661CEB103800820456 /* list.c */,\n\t\t\t\tB82847671CEB103800820456 /* list.h */,\n\t\t\t\tB82847981CEB110400820456 /* loadcfg.c */,\n\t\t\t\tB82847991CEB110400820456 /* loadcfg.h */,\n\t\t\t\tB82847721CEB106200820456 /* loaders.c */,\n\t\t\t\tB82847731CEB106200820456 /* loaders.h */,\n\t\t\t\tB82847511CEB08CA00820456 /* miscutil.c */,\n\t\t\t\tB82847521CEB08CA00820456 /* miscutil.h */,\n\t\t\t\tB828476E1CEB105B00820456 /* parsers.c */,\n\t\t\t\tB828476F1CEB105B00820456 /* parsers.h */,\n\t\t\t\tB82847461CEAE51B00820456 /* pcrs.c */,\n\t\t\t\tB82847471CEAE51B00820456 /* pcrs.h */,\n\t\t\t\tB8DEFEFD1CEA1EB7003FC706 /* project.h */,\n\t\t\t\tB8DEFEFB1CEA1DCE003FC706 /* sp_config.h */,\n\t\t\t\tB82847761CEB109700820456 /* ssplit.c */,\n\t\t\t\tB82847771CEB109700820456 /* ssplit.h */,\n\t\t\t\tB828478A1CEB10D400820456 /* urlmatch.c */,\n\t\t\t\tB828478B1CEB10D400820456 /* urlmatch.h */,\n\t\t\t\tB8D0CD671CF1AF60007282A7 /* radix.c */,\n\t\t\t\tB8D0CD681CF1AF60007282A7 /* radix.h */,\n\t\t\t);\n\t\t\tpath = Privoxy;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00351D17DABA00613014 /* libcork */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00361D17DABA00613014 /* cli */,\n\t\t\t\tB86B003B1D17DABA00613014 /* core */,\n\t\t\t\tB86B004D1D17DABA00613014 /* ds */,\n\t\t\t\tB86B009B1D17DABA00613014 /* posix */,\n\t\t\t\tB86B00A91D17DABA00613014 /* pthreads */,\n\t\t\t);\n\t\t\tpath = libcork;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00361D17DABA00613014 /* cli */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00391D17DABA00613014 /* commands.c */,\n\t\t\t);\n\t\t\tpath = cli;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B003B1D17DABA00613014 /* core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00451D17DABA00613014 /* allocator.c */,\n\t\t\t\tB86B00461D17DABA00613014 /* error.c */,\n\t\t\t\tB86B00471D17DABA00613014 /* gc.c */,\n\t\t\t\tB86B00481D17DABA00613014 /* hash.c */,\n\t\t\t\tB86B00491D17DABA00613014 /* ip-address.c */,\n\t\t\t\tB86B004A1D17DABA00613014 /* mempool.c */,\n\t\t\t\tB86B004B1D17DABA00613014 /* timestamp.c */,\n\t\t\t\tB86B004C1D17DABA00613014 /* u128.c */,\n\t\t\t);\n\t\t\tpath = core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B004D1D17DABA00613014 /* ds */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00581D17DABA00613014 /* array.c */,\n\t\t\t\tB86B00591D17DABA00613014 /* bitset.c */,\n\t\t\t\tB86B005A1D17DABA00613014 /* buffer.c */,\n\t\t\t\tB86B005B1D17DABA00613014 /* dllist.c */,\n\t\t\t\tB86B005C1D17DABA00613014 /* file-stream.c */,\n\t\t\t\tB86B005D1D17DABA00613014 /* hash-table.c */,\n\t\t\t\tB86B005E1D17DABA00613014 /* managed-buffer.c */,\n\t\t\t\tB86B005F1D17DABA00613014 /* ring-buffer.c */,\n\t\t\t\tB86B00601D17DABA00613014 /* slice.c */,\n\t\t\t);\n\t\t\tpath = ds;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B009B1D17DABA00613014 /* posix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00A31D17DABA00613014 /* directory-walker.c */,\n\t\t\t\tB86B00A41D17DABA00613014 /* env.c */,\n\t\t\t\tB86B00A51D17DABA00613014 /* exec.c */,\n\t\t\t\tB86B00A61D17DABA00613014 /* files.c */,\n\t\t\t\tB86B00A71D17DABA00613014 /* process.c */,\n\t\t\t\tB86B00A81D17DABA00613014 /* subprocess.c */,\n\t\t\t);\n\t\t\tpath = posix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00A91D17DABA00613014 /* pthreads */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00AC1D17DABA00613014 /* thread.c */,\n\t\t\t);\n\t\t\tpath = pthreads;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00AE1D17DABA00613014 /* libev */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00B81D17DABA00613014 /* ev.c */,\n\t\t\t\tB86B00B91D17DABA00613014 /* ev.h */,\n\t\t\t\tB86B00C01D17DABA00613014 /* ev_vars.h */,\n\t\t\t\tB86B00C21D17DABA00613014 /* ev_wrap.h */,\n\t\t\t\tB86B00C31D17DABA00613014 /* event.c */,\n\t\t\t\tB86B00C41D17DABA00613014 /* event.h */,\n\t\t\t);\n\t\t\tpath = libev;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00CD1D17DABA00613014 /* libipset */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00D01D17DABA00613014 /* bdd */,\n\t\t\t\tB86B00E21D17DABA00613014 /* general.c */,\n\t\t\t\tB86B00EF1D17DABA00613014 /* map */,\n\t\t\t\tB86B00FF1D17DABA00613014 /* set */,\n\t\t\t);\n\t\t\tpath = libipset;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00D01D17DABA00613014 /* bdd */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00D91D17DABA00613014 /* assignments.c */,\n\t\t\t\tB86B00DA1D17DABA00613014 /* basics.c */,\n\t\t\t\tB86B00DB1D17DABA00613014 /* bdd-iterator.c */,\n\t\t\t\tB86B00DC1D17DABA00613014 /* expanded.c */,\n\t\t\t\tB86B00DF1D17DABA00613014 /* reachable.c */,\n\t\t\t\tB86B00E01D17DABA00613014 /* read.c */,\n\t\t\t\tB86B00E11D17DABA00613014 /* write.c */,\n\t\t\t);\n\t\t\tpath = bdd;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00EF1D17DABA00613014 /* map */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B00F61D17DABA00613014 /* allocation.c */,\n\t\t\t\tB86B00F81D17DABA00613014 /* inspection.c */,\n\t\t\t\tB86B00F91D17DABA00613014 /* ipv4_map.c */,\n\t\t\t\tB86B00FA1D17DABA00613014 /* ipv6_map.c */,\n\t\t\t\tB86B00FD1D17DABA00613014 /* storage.c */,\n\t\t\t);\n\t\t\tpath = map;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B00FF1D17DABA00613014 /* set */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B01071D17DABA00613014 /* allocation.c */,\n\t\t\t\tB86B01091D17DABA00613014 /* inspection.c */,\n\t\t\t\tB86B010A1D17DABA00613014 /* ipv4_set.c */,\n\t\t\t\tB86B010B1D17DABA00613014 /* ipv6_set.c */,\n\t\t\t\tB86B010C1D17DABA00613014 /* iterator.c */,\n\t\t\t\tB86B010F1D17DABA00613014 /* storage.c */,\n\t\t\t);\n\t\t\tpath = set;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B03E71D17DABA00613014 /* libudns */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B04081D17DABB00613014 /* udns.h */,\n\t\t\t\tB86B04091D17DABB00613014 /* udns_bl.c */,\n\t\t\t\tB86B040A1D17DABB00613014 /* udns_codes.c */,\n\t\t\t\tB86B040B1D17DABB00613014 /* udns_dn.c */,\n\t\t\t\tB86B040C1D17DABB00613014 /* udns_dntosp.c */,\n\t\t\t\tB86B040D1D17DABB00613014 /* udns_init.c */,\n\t\t\t\tB86B040E1D17DABB00613014 /* udns_jran.c */,\n\t\t\t\tB86B040F1D17DABB00613014 /* udns_misc.c */,\n\t\t\t\tB86B04101D17DABB00613014 /* udns_parse.c */,\n\t\t\t\tB86B04111D17DABB00613014 /* udns_resolver.c */,\n\t\t\t\tB86B04121D17DABB00613014 /* udns_rr_a.c */,\n\t\t\t\tB86B04131D17DABB00613014 /* udns_rr_mx.c */,\n\t\t\t\tB86B04141D17DABB00613014 /* udns_rr_naptr.c */,\n\t\t\t\tB86B04151D17DABB00613014 /* udns_rr_ptr.c */,\n\t\t\t\tB86B04161D17DABB00613014 /* udns_rr_srv.c */,\n\t\t\t\tB86B04171D17DABB00613014 /* udns_rr_txt.c */,\n\t\t\t\tB86B04181D17DABB00613014 /* udns_XtoX.c */,\n\t\t\t);\n\t\t\tpath = libudns;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B04431D17DABB00613014 /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B04781D17DABB00613014 /* acl.c */,\n\t\t\t\tB86B04791D17DABB00613014 /* acl.h */,\n\t\t\t\tB830CC661D2D69E300FA8E37 /* auth.c */,\n\t\t\t\tB830CC671D2D69E300FA8E37 /* auth.h */,\n\t\t\t\tB86B047B1D17DABB00613014 /* cache.c */,\n\t\t\t\tB86B047C1D17DABB00613014 /* cache.h */,\n\t\t\t\tB86B047D1D17DABB00613014 /* common.h */,\n\t\t\t\tB830CC6A1D2D69FA00FA8E37 /* crc32.c */,\n\t\t\t\tB830CC821D2D6D1A00FA8E37 /* crc32.h */,\n\t\t\t\tB86B047E1D17DABB00613014 /* encrypt.c */,\n\t\t\t\tB86B047F1D17DABB00613014 /* encrypt.h */,\n\t\t\t\tB830CC6C1D2D6A0000FA8E37 /* http_simple.c */,\n\t\t\t\tB830CC6D1D2D6A0000FA8E37 /* http_simple.h */,\n\t\t\t\tB86B04801D17DABB00613014 /* jconf.c */,\n\t\t\t\tB86B04811D17DABB00613014 /* jconf.h */,\n\t\t\t\tB86B04821D17DABB00613014 /* json.c */,\n\t\t\t\tB86B04831D17DABB00613014 /* json.h */,\n\t\t\t\tB86B04841D17DABB00613014 /* local.c */,\n\t\t\t\tB86B04851D17DABB00613014 /* local.h */,\n\t\t\t\tB86B048B1D17DABB00613014 /* netutils.c */,\n\t\t\t\tB86B048C1D17DABB00613014 /* netutils.h */,\n\t\t\t\tB830CC701D2D6A1700FA8E37 /* obfs.c */,\n\t\t\t\tB830CC711D2D6A1700FA8E37 /* obfs.h */,\n\t\t\t\tB830CC721D2D6A1700FA8E37 /* obfsutil.c */,\n\t\t\t\tB86B048F1D17DABB00613014 /* resolv.c */,\n\t\t\t\tB86B04901D17DABB00613014 /* resolv.h */,\n\t\t\t\tB86B04931D17DABB00613014 /* shadowsocks.h */,\n\t\t\t\tB86B04941D17DABB00613014 /* socks5.h */,\n\t\t\t\tB830CC761D2D6A3400FA8E37 /* tls1.0_session.c */,\n\t\t\t\tB830CC771D2D6A3400FA8E37 /* tls1.0_session.h */,\n\t\t\t\tB830CC781D2D6A3400FA8E37 /* tls1.2_ticket.c */,\n\t\t\t\tB830CC791D2D6A3400FA8E37 /* tls1.2_ticket.h */,\n\t\t\t\tB86B04981D17DABB00613014 /* udprelay.c */,\n\t\t\t\tB86B04991D17DABB00613014 /* udprelay.h */,\n\t\t\t\tB86B049A1D17DABB00613014 /* uthash.h */,\n\t\t\t\tB86B049B1D17DABB00613014 /* utils.c */,\n\t\t\t\tB86B049C1D17DABB00613014 /* utils.h */,\n\t\t\t\tB830CC7E1D2D6A4000FA8E37 /* verify.c */,\n\t\t\t\tB830CC7F1D2D6A4000FA8E37 /* verify.h */,\n\t\t\t);\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86BFFF61D17DABA00613014 /* shadowsocks-libev */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B000A1D17DABA00613014 /* config.h */,\n\t\t\t\tB86B00351D17DABA00613014 /* libcork */,\n\t\t\t\tB86B00AE1D17DABA00613014 /* libev */,\n\t\t\t\tB86B00CD1D17DABA00613014 /* libipset */,\n\t\t\t\tB86B03E71D17DABA00613014 /* libudns */,\n\t\t\t\tB86B04431D17DABB00613014 /* src */,\n\t\t\t);\n\t\t\tpath = \"shadowsocks-libev\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8DEFD711CE9C923003FC706 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8DEFD7D1CE9C923003FC706 /* ShadowPath */,\n\t\t\t\tB82847B51CEB14B000820456 /* ShadowPathDemo */,\n\t\t\t\tB8DEFD7C1CE9C923003FC706 /* Products */,\n\t\t\t\tB82847AE1CEB125500820456 /* libz.tbd */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8DEFD7C1CE9C923003FC706 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8DEFD7B1CE9C923003FC706 /* ShadowPath.framework */,\n\t\t\t\tB82847B41CEB14B000820456 /* ShadowPathDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8DEFD7D1CE9C923003FC706 /* ShadowPath */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB81888221D2C09DA00E41C89 /* libsodium-ios */,\n\t\t\t\tB81887071D2BFC1B00E41C89 /* libopenssl */,\n\t\t\t\tB8EAC5971D40D01C0046963C /* libmaxminddb */,\n\t\t\t\tB86BFFF61D17DABA00613014 /* shadowsocks-libev */,\n\t\t\t\tB82D7D461CEC6B6300357F5F /* Privoxy */,\n\t\t\t\tB8DEFD801CE9C923003FC706 /* Info.plist */,\n\t\t\t\tB8DEFD7E1CE9C923003FC706 /* ShadowPath.h */,\n\t\t\t);\n\t\t\tpath = ShadowPath;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8EAC5971D40D01C0046963C /* libmaxminddb */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8EAC5C51D40D01C0046963C /* include */,\n\t\t\t\tB8EAC5F21D40D01C0046963C /* src */,\n\t\t\t);\n\t\t\tpath = libmaxminddb;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8EAC5C51D40D01C0046963C /* include */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8EAC5C61D40D01C0046963C /* maxminddb.h */,\n\t\t\t\tB8EAC5C71D40D01C0046963C /* maxminddb_config.h */,\n\t\t\t);\n\t\t\tpath = include;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8EAC5F21D40D01C0046963C /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8EAC5FA1D40D01C0046963C /* maxminddb-compat-util.h */,\n\t\t\t\tB8EAC5FB1D40D01C0046963C /* maxminddb.c */,\n\t\t\t);\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\tB8DEFD781CE9C923003FC706 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB818879C1D2BFC1B00E41C89 /* tls1.h in Headers */,\n\t\t\t\tB81888711D2C09DA00E41C89 /* crypto_hash_sha256.h in Headers */,\n\t\t\t\tB81888601D2C09DA00E41C89 /* core.h in Headers */,\n\t\t\t\tB86B084C1D17DABB00613014 /* jconf.h in Headers */,\n\t\t\t\tB818879B1D2BFC1B00E41C89 /* symhacks.h in Headers */,\n\t\t\t\tB81888931D2C09DA00E41C89 /* randombytes_salsa20_random.h in Headers */,\n\t\t\t\tB81888841D2C09DA00E41C89 /* crypto_stream_aes128ctr.h in Headers */,\n\t\t\t\tB86B08651D17DABB00613014 /* uthash.h in Headers */,\n\t\t\t\tB818886B1D2C09DA00E41C89 /* crypto_core_salsa20.h in Headers */,\n\t\t\t\tB82847971CEB10F500820456 /* cgiedit.h in Headers */,\n\t\t\t\tB81888961D2C09DA00E41C89 /* utils.h in Headers */,\n\t\t\t\tB830CC741D2D6A1700FA8E37 /* obfs.h in Headers */,\n\t\t\t\tB81887731D2BFC1B00E41C89 /* ecdh.h in Headers */,\n\t\t\t\tB830CC691D2D69E300FA8E37 /* auth.h in Headers */,\n\t\t\t\tB81888861D2C09DA00E41C89 /* crypto_stream_salsa20.h in Headers */,\n\t\t\t\tB81888781D2C09DA00E41C89 /* crypto_pwhash_argon2i.h in Headers */,\n\t\t\t\tB828476D1CEB104E00820456 /* filters.h in Headers */,\n\t\t\t\tB830CC7B1D2D6A3400FA8E37 /* tls1.0_session.h in Headers */,\n\t\t\t\tB818887B1D2C09DA00E41C89 /* crypto_scalarmult_curve25519.h in Headers */,\n\t\t\t\tB82847751CEB106200820456 /* loaders.h in Headers */,\n\t\t\t\tB828478F1CEB10E200820456 /* actionlist.h in Headers */,\n\t\t\t\tB81887941D2BFC1B00E41C89 /* srp.h in Headers */,\n\t\t\t\tB81887661D2BFC1B00E41C89 /* comp.h in Headers */,\n\t\t\t\tB818876D1D2BFC1B00E41C89 /* dsa.h in Headers */,\n\t\t\t\tB818875D1D2BFC1B00E41C89 /* asn1t.h in Headers */,\n\t\t\t\tB82847811CEB10B800820456 /* actions.h in Headers */,\n\t\t\t\tB81888941D2C09DA00E41C89 /* randombytes_sysrandom.h in Headers */,\n\t\t\t\tB830CC811D2D6A4000FA8E37 /* verify.h in Headers */,\n\t\t\t\tB81888651D2C09DA00E41C89 /* crypto_auth_hmacsha512.h in Headers */,\n\t\t\t\tB828479F1CEB111000820456 /* gateway.h in Headers */,\n\t\t\t\tB81888611D2C09DA00E41C89 /* crypto_aead_aes256gcm.h in Headers */,\n\t\t\t\tB818886A1D2C09DA00E41C89 /* crypto_core_hsalsa20.h in Headers */,\n\t\t\t\tB81888731D2C09DA00E41C89 /* crypto_int32.h in Headers */,\n\t\t\t\tB818878C1D2BFC1B00E41C89 /* rand.h in Headers */,\n\t\t\t\tB81887A31D2BFC1B00E41C89 /* x509_vfy.h in Headers */,\n\t\t\t\tB818888A1D2C09DA00E41C89 /* crypto_uint16.h in Headers */,\n\t\t\t\tB81888661D2C09DA00E41C89 /* crypto_auth_hmacsha512256.h in Headers */,\n\t\t\t\tB81887771D2BFC1B00E41C89 /* evp.h in Headers */,\n\t\t\t\tB81887981D2BFC1B00E41C89 /* ssl23.h in Headers */,\n\t\t\t\tB86B08441D17DABB00613014 /* acl.h in Headers */,\n\t\t\t\tB818877A1D2BFC1B00E41C89 /* krb5_asn.h in Headers */,\n\t\t\t\tB818876F1D2BFC1B00E41C89 /* dtls1.h in Headers */,\n\t\t\t\tB8EAC6511D40D01C0046963C /* maxminddb_config.h in Headers */,\n\t\t\t\tB82847711CEB105B00820456 /* parsers.h in Headers */,\n\t\t\t\tB86B085F1D17DABB00613014 /* socks5.h in Headers */,\n\t\t\t\tB82847651CEB0E6400820456 /* internal.h in Headers */,\n\t\t\t\tB82847541CEB08CA00820456 /* miscutil.h in Headers */,\n\t\t\t\tB82847581CEB08DD00820456 /* errlog.h in Headers */,\n\t\t\t\tB86B085E1D17DABB00613014 /* shadowsocks.h in Headers */,\n\t\t\t\tB86B08641D17DABB00613014 /* udprelay.h in Headers */,\n\t\t\t\tB82847491CEAE51B00820456 /* pcrs.h in Headers */,\n\t\t\t\tB81887A01D2BFC1B00E41C89 /* ui_compat.h in Headers */,\n\t\t\t\tB81887761D2BFC1B00E41C89 /* err.h in Headers */,\n\t\t\t\tB828478D1CEB10D400820456 /* urlmatch.h in Headers */,\n\t\t\t\tB81887921D2BFC1B00E41C89 /* seed.h in Headers */,\n\t\t\t\tB82847691CEB103800820456 /* list.h in Headers */,\n\t\t\t\tB81887801D2BFC1B00E41C89 /* modes.h in Headers */,\n\t\t\t\tB82847931CEB10EB00820456 /* cgisimple.h in Headers */,\n\t\t\t\tB818878F1D2BFC1B00E41C89 /* ripemd.h in Headers */,\n\t\t\t\tB81887691D2BFC1B00E41C89 /* crypto.h in Headers */,\n\t\t\t\tB818875B1D2BFC1B00E41C89 /* asn1.h in Headers */,\n\t\t\t\tB81888761D2C09DA00E41C89 /* crypto_onetimeauth_poly1305.h in Headers */,\n\t\t\t\tB81887A11D2BFC1B00E41C89 /* whrlpool.h in Headers */,\n\t\t\t\tB818878D1D2BFC1B00E41C89 /* rc2.h in Headers */,\n\t\t\t\tB81887601D2BFC1B00E41C89 /* bn.h in Headers */,\n\t\t\t\tB81887721D2BFC1B00E41C89 /* ec.h in Headers */,\n\t\t\t\tB81888671D2C09DA00E41C89 /* crypto_box.h in Headers */,\n\t\t\t\tB81887991D2BFC1B00E41C89 /* ssl3.h in Headers */,\n\t\t\t\tB818888E1D2C09DA00E41C89 /* crypto_verify_16.h in Headers */,\n\t\t\t\tB818887D1D2C09DA00E41C89 /* crypto_secretbox_xsalsa20poly1305.h in Headers */,\n\t\t\t\tB81887841D2BFC1B00E41C89 /* opensslconf.h in Headers */,\n\t\t\t\tB818878E1D2BFC1B00E41C89 /* rc4.h in Headers */,\n\t\t\t\tB81888681D2C09DA00E41C89 /* crypto_box_curve25519xsalsa20poly1305.h in Headers */,\n\t\t\t\tB81887951D2BFC1B00E41C89 /* srtp.h in Headers */,\n\t\t\t\tB86B08501D17DABB00613014 /* local.h in Headers */,\n\t\t\t\tB81887741D2BFC1B00E41C89 /* ecdsa.h in Headers */,\n\t\t\t\tB81888791D2C09DA00E41C89 /* crypto_pwhash_scryptsalsa208sha256.h in Headers */,\n\t\t\t\tB828477D1CEB10AA00820456 /* jbsockets.h in Headers */,\n\t\t\t\tB818879D1D2BFC1B00E41C89 /* ts.h in Headers */,\n\t\t\t\tB818888C1D2C09DA00E41C89 /* crypto_uint64.h in Headers */,\n\t\t\t\tB81887781D2BFC1B00E41C89 /* hmac.h in Headers */,\n\t\t\t\tB81887711D2BFC1B00E41C89 /* ebcdic.h in Headers */,\n\t\t\t\tB81887881D2BFC1B00E41C89 /* pem2.h in Headers */,\n\t\t\t\tB81887611D2BFC1B00E41C89 /* buffer.h in Headers */,\n\t\t\t\tB81887961D2BFC1B00E41C89 /* ssl.h in Headers */,\n\t\t\t\tB818878B1D2BFC1B00E41C89 /* pqueue.h in Headers */,\n\t\t\t\tB818887E1D2C09DA00E41C89 /* crypto_shorthash.h in Headers */,\n\t\t\t\tB81887931D2BFC1B00E41C89 /* sha.h in Headers */,\n\t\t\t\tB81888891D2C09DA00E41C89 /* crypto_stream_xsalsa20.h in Headers */,\n\t\t\t\tB86B05501D17DABB00613014 /* event.h in Headers */,\n\t\t\t\tB8DEFD7F1CE9C923003FC706 /* ShadowPath.h in Headers */,\n\t\t\t\tB828475C1CEB0D5900820456 /* encode.h in Headers */,\n\t\t\t\tB81888951D2C09DA00E41C89 /* runtime.h in Headers */,\n\t\t\t\tB8D0CD6A1CF1AF60007282A7 /* radix.h in Headers */,\n\t\t\t\tB81888621D2C09DA00E41C89 /* crypto_aead_chacha20poly1305.h in Headers */,\n\t\t\t\tB818875F1D2BFC1B00E41C89 /* blowfish.h in Headers */,\n\t\t\t\tB81887621D2BFC1B00E41C89 /* camellia.h in Headers */,\n\t\t\t\tB8DEFEFA1CEA1D4C003FC706 /* jcc.h in Headers */,\n\t\t\t\tB818888F1D2C09DA00E41C89 /* crypto_verify_32.h in Headers */,\n\t\t\t\tB81887A21D2BFC1B00E41C89 /* x509.h in Headers */,\n\t\t\t\tB82847631CEB0E4400820456 /* pcreposix.h in Headers */,\n\t\t\t\tB828479B1CEB110400820456 /* loadcfg.h in Headers */,\n\t\t\t\tB818875C1D2BFC1B00E41C89 /* asn1_mac.h in Headers */,\n\t\t\t\tB818877C1D2BFC1B00E41C89 /* lhash.h in Headers */,\n\t\t\t\tB81888751D2C09DA00E41C89 /* crypto_onetimeauth.h in Headers */,\n\t\t\t\tB818876E1D2BFC1B00E41C89 /* dso.h in Headers */,\n\t\t\t\tB818877F1D2BFC1B00E41C89 /* mdc2.h in Headers */,\n\t\t\t\tB81887651D2BFC1B00E41C89 /* cms.h in Headers */,\n\t\t\t\tB81888721D2C09DA00E41C89 /* crypto_hash_sha512.h in Headers */,\n\t\t\t\tB818875A1D2BFC1B00E41C89 /* aes.h in Headers */,\n\t\t\t\tB8DEFEFE1CEA1EB7003FC706 /* project.h in Headers */,\n\t\t\t\tB81888921D2C09DA00E41C89 /* randombytes.h in Headers */,\n\t\t\t\tB818887A1D2C09DA00E41C89 /* crypto_scalarmult.h in Headers */,\n\t\t\t\tB818879E1D2BFC1B00E41C89 /* txt_db.h in Headers */,\n\t\t\t\tB818875E1D2BFC1B00E41C89 /* bio.h in Headers */,\n\t\t\t\tB818886F1D2C09DA00E41C89 /* crypto_generichash_blake2b.h in Headers */,\n\t\t\t\tB830CC7D1D2D6A3400FA8E37 /* tls1.2_ticket.h in Headers */,\n\t\t\t\tB818887F1D2C09DA00E41C89 /* crypto_shorthash_siphash24.h in Headers */,\n\t\t\t\tB82847791CEB109700820456 /* ssplit.h in Headers */,\n\t\t\t\tB86B08571D17DABB00613014 /* netutils.h in Headers */,\n\t\t\t\tB86B084A1D17DABB00613014 /* encrypt.h in Headers */,\n\t\t\t\tB81887901D2BFC1B00E41C89 /* rsa.h in Headers */,\n\t\t\t\tB818887C1D2C09DA00E41C89 /* crypto_secretbox.h in Headers */,\n\t\t\t\tB818888D1D2C09DA00E41C89 /* crypto_uint8.h in Headers */,\n\t\t\t\tB86B08471D17DABB00613014 /* cache.h in Headers */,\n\t\t\t\tB8EAC67F1D40D01C0046963C /* maxminddb-compat-util.h in Headers */,\n\t\t\t\tB81888701D2C09DA00E41C89 /* crypto_hash.h in Headers */,\n\t\t\t\tB81888871D2C09DA00E41C89 /* crypto_stream_salsa2012.h in Headers */,\n\t\t\t\tB81887641D2BFC1B00E41C89 /* cmac.h in Headers */,\n\t\t\t\tB81888771D2C09DA00E41C89 /* crypto_pwhash.h in Headers */,\n\t\t\t\tB818876C1D2BFC1B00E41C89 /* dh.h in Headers */,\n\t\t\t\tB82847851CEB10BF00820456 /* cgi.h in Headers */,\n\t\t\t\tB82847891CEB10C900820456 /* deanimate.h in Headers */,\n\t\t\t\tB86B08671D17DABB00613014 /* utils.h in Headers */,\n\t\t\t\tB86B08481D17DABB00613014 /* common.h in Headers */,\n\t\t\t\tB81888801D2C09DA00E41C89 /* crypto_sign.h in Headers */,\n\t\t\t\tB828475F1CEB0E3100820456 /* pcre.h in Headers */,\n\t\t\t\tB818877B1D2BFC1B00E41C89 /* kssl.h in Headers */,\n\t\t\t\tB81887831D2BFC1B00E41C89 /* ocsp.h in Headers */,\n\t\t\t\tB86B05451D17DABB00613014 /* ev.h in Headers */,\n\t\t\t\tB830CC6F1D2D6A0000FA8E37 /* http_simple.h in Headers */,\n\t\t\t\tB818886D1D2C09DA00E41C89 /* crypto_core_salsa208.h in Headers */,\n\t\t\t\tB818877E1D2BFC1B00E41C89 /* md5.h in Headers */,\n\t\t\t\tB818876A1D2BFC1B00E41C89 /* des.h in Headers */,\n\t\t\t\tB81887851D2BFC1B00E41C89 /* opensslv.h in Headers */,\n\t\t\t\tB81888821D2C09DA00E41C89 /* crypto_sign_edwards25519sha512batch.h in Headers */,\n\t\t\t\tB81888741D2C09DA00E41C89 /* crypto_int64.h in Headers */,\n\t\t\t\tB81887971D2BFC1B00E41C89 /* ssl2.h in Headers */,\n\t\t\t\tB818879A1D2BFC1B00E41C89 /* stack.h in Headers */,\n\t\t\t\tB81887701D2BFC1B00E41C89 /* e_os2.h in Headers */,\n\t\t\t\tB86B07DE1D17DABB00613014 /* udns.h in Headers */,\n\t\t\t\tB81888981D2C09DA00E41C89 /* sodium.h in Headers */,\n\t\t\t\tB81887821D2BFC1B00E41C89 /* objects.h in Headers */,\n\t\t\t\tB81888691D2C09DA00E41C89 /* crypto_core_hchacha20.h in Headers */,\n\t\t\t\tB81887861D2BFC1B00E41C89 /* ossl_typ.h in Headers */,\n\t\t\t\tB818886E1D2C09DA00E41C89 /* crypto_generichash.h in Headers */,\n\t\t\t\tB81888901D2C09DA00E41C89 /* crypto_verify_64.h in Headers */,\n\t\t\t\tB8DEFEFC1CEA1DCE003FC706 /* sp_config.h in Headers */,\n\t\t\t\tB81887631D2BFC1B00E41C89 /* cast.h in Headers */,\n\t\t\t\tB81888631D2C09DA00E41C89 /* crypto_auth.h in Headers */,\n\t\t\t\tB818886C1D2C09DA00E41C89 /* crypto_core_salsa2012.h in Headers */,\n\t\t\t\tB81888911D2C09DA00E41C89 /* export.h in Headers */,\n\t\t\t\tB86B054C1D17DABB00613014 /* ev_vars.h in Headers */,\n\t\t\t\tB81887681D2BFC1B00E41C89 /* conf_api.h in Headers */,\n\t\t\t\tB86B085B1D17DABB00613014 /* resolv.h in Headers */,\n\t\t\t\tB81887891D2BFC1B00E41C89 /* pkcs12.h in Headers */,\n\t\t\t\tB81888641D2C09DA00E41C89 /* crypto_auth_hmacsha256.h in Headers */,\n\t\t\t\tB86B04B11D17DABB00613014 /* config.h in Headers */,\n\t\t\t\tB81888831D2C09DA00E41C89 /* crypto_stream.h in Headers */,\n\t\t\t\tB81888851D2C09DA00E41C89 /* crypto_stream_chacha20.h in Headers */,\n\t\t\t\tB8EAC6501D40D01C0046963C /* maxminddb.h in Headers */,\n\t\t\t\tB818878A1D2BFC1B00E41C89 /* pkcs7.h in Headers */,\n\t\t\t\tB81887811D2BFC1B00E41C89 /* obj_mac.h in Headers */,\n\t\t\t\tB81887671D2BFC1B00E41C89 /* conf.h in Headers */,\n\t\t\t\tB818877D1D2BFC1B00E41C89 /* md4.h in Headers */,\n\t\t\t\tB81888811D2C09DA00E41C89 /* crypto_sign_ed25519.h in Headers */,\n\t\t\t\tB81888971D2C09DA00E41C89 /* version.h in Headers */,\n\t\t\t\tB81887751D2BFC1B00E41C89 /* engine.h in Headers */,\n\t\t\t\tB818876B1D2BFC1B00E41C89 /* des_old.h in Headers */,\n\t\t\t\tB81887A41D2BFC1B00E41C89 /* x509v3.h in Headers */,\n\t\t\t\tB81887871D2BFC1B00E41C89 /* pem.h in Headers */,\n\t\t\t\tB818888B1D2C09DA00E41C89 /* crypto_uint32.h in Headers */,\n\t\t\t\tB81888881D2C09DA00E41C89 /* crypto_stream_salsa208.h in Headers */,\n\t\t\t\tB81887911D2BFC1B00E41C89 /* safestack.h in Headers */,\n\t\t\t\tB86B054E1D17DABB00613014 /* ev_wrap.h in Headers */,\n\t\t\t\tB86B084E1D17DABB00613014 /* json.h in Headers */,\n\t\t\t\tB81887791D2BFC1B00E41C89 /* idea.h in Headers */,\n\t\t\t\tB818879F1D2BFC1B00E41C89 /* ui.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\tB82847B31CEB14B000820456 /* ShadowPathDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B82847C81CEB14B000820456 /* Build configuration list for PBXNativeTarget \"ShadowPathDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB82847B01CEB14B000820456 /* Sources */,\n\t\t\t\tB82847B11CEB14B000820456 /* Frameworks */,\n\t\t\t\tB82847B21CEB14B000820456 /* Resources */,\n\t\t\t\tB82847D21CEB177D00820456 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tB82847D11CEB177C00820456 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = ShadowPathDemo;\n\t\t\tproductName = ShadowPathDemo;\n\t\t\tproductReference = B82847B41CEB14B000820456 /* ShadowPathDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tB8DEFD7A1CE9C923003FC706 /* ShadowPath */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B8DEFD831CE9C923003FC706 /* Build configuration list for PBXNativeTarget \"ShadowPath\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB8DEFD761CE9C923003FC706 /* Sources */,\n\t\t\t\tB8DEFD771CE9C923003FC706 /* Frameworks */,\n\t\t\t\tB8DEFD781CE9C923003FC706 /* Headers */,\n\t\t\t\tB8DEFD791CE9C923003FC706 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = ShadowPath;\n\t\t\tproductName = ShadowPath;\n\t\t\tproductReference = B8DEFD7B1CE9C923003FC706 /* ShadowPath.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tB8DEFD721CE9C923003FC706 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0730;\n\t\t\t\tORGANIZATIONNAME = TouchingApp;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tB82847B31CEB14B000820456 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t};\n\t\t\t\t\tB8DEFD7A1CE9C923003FC706 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = B8DEFD751CE9C923003FC706 /* Build configuration list for PBXProject \"ShadowPath\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = B8DEFD711CE9C923003FC706;\n\t\t\tproductRefGroup = B8DEFD7C1CE9C923003FC706 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tB8DEFD7A1CE9C923003FC706 /* ShadowPath */,\n\t\t\t\tB82847B31CEB14B000820456 /* ShadowPathDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tB82847B21CEB14B000820456 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB82847CD1CEB168400820456 /* config in Resources */,\n\t\t\t\tB82847C61CEB14B000820456 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tB82847C31CEB14B000820456 /* Assets.xcassets in Resources */,\n\t\t\t\tB82847C11CEB14B000820456 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB8DEFD791CE9C923003FC706 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB81887591D2BFC1B00E41C89 /* LICENSE in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tB82847B01CEB14B000820456 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB82847BE1CEB14B000820456 /* ViewController.m in Sources */,\n\t\t\t\tB82847BB1CEB14B000820456 /* AppDelegate.m in Sources */,\n\t\t\t\tB82847B81CEB14B000820456 /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB8DEFD761CE9C923003FC706 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB86B058A1D17DABB00613014 /* inspection.c in Sources */,\n\t\t\t\tB86B04E81D17DABB00613014 /* timestamp.c in Sources */,\n\t\t\t\tB830CC7C1D2D6A3400FA8E37 /* tls1.2_ticket.c in Sources */,\n\t\t\t\tB86B05681D17DABB00613014 /* read.c in Sources */,\n\t\t\t\tB8D0CD691CF1AF60007282A7 /* radix.c in Sources */,\n\t\t\t\tB86B07E51D17DABB00613014 /* udns_misc.c in Sources */,\n\t\t\t\tB82847801CEB10B800820456 /* actions.m in Sources */,\n\t\t\t\tB82847841CEB10BF00820456 /* cgi.c in Sources */,\n\t\t\t\tB82847881CEB10C900820456 /* deanimate.c in Sources */,\n\t\t\t\tB86B056A1D17DABB00613014 /* general.c in Sources */,\n\t\t\t\tB86B04E61D17DABB00613014 /* ip-address.c in Sources */,\n\t\t\t\tB86B058D1D17DABB00613014 /* iterator.c in Sources */,\n\t\t\t\tB86B05621D17DABB00613014 /* basics.c in Sources */,\n\t\t\t\tB86B085A1D17DABB00613014 /* resolv.c in Sources */,\n\t\t\t\tB82847571CEB08DD00820456 /* errlog.m in Sources */,\n\t\t\t\tB86B04E41D17DABB00613014 /* gc.c in Sources */,\n\t\t\t\tB8DEFEF91CEA1D4C003FC706 /* jcc.m in Sources */,\n\t\t\t\tB86B08561D17DABB00613014 /* netutils.c in Sources */,\n\t\t\t\tB86B07E31D17DABB00613014 /* udns_init.c in Sources */,\n\t\t\t\tB86B04F41D17DABB00613014 /* bitset.c in Sources */,\n\t\t\t\tB86B05441D17DABB00613014 /* ev.c in Sources */,\n\t\t\t\tB86B05331D17DABB00613014 /* directory-walker.c in Sources */,\n\t\t\t\tB86B05901D17DABB00613014 /* storage.c in Sources */,\n\t\t\t\tB830CC731D2D6A1700FA8E37 /* obfs.c in Sources */,\n\t\t\t\tB86B04E71D17DABB00613014 /* mempool.c in Sources */,\n\t\t\t\tB86B04F61D17DABB00613014 /* dllist.c in Sources */,\n\t\t\t\tB82847481CEAE51B00820456 /* pcrs.c in Sources */,\n\t\t\t\tB86B07DF1D17DABB00613014 /* udns_bl.c in Sources */,\n\t\t\t\tB86B08631D17DABB00613014 /* udprelay.c in Sources */,\n\t\t\t\tB86B04F71D17DABB00613014 /* file-stream.c in Sources */,\n\t\t\t\tB86B07E61D17DABB00613014 /* udns_parse.c in Sources */,\n\t\t\t\tB86B04E21D17DABB00613014 /* allocator.c in Sources */,\n\t\t\t\tB86B057D1D17DABB00613014 /* ipv6_map.c in Sources */,\n\t\t\t\tB86B05631D17DABB00613014 /* bdd-iterator.c in Sources */,\n\t\t\t\tB828479A1CEB110400820456 /* loadcfg.c in Sources */,\n\t\t\t\tB86B084B1D17DABB00613014 /* jconf.c in Sources */,\n\t\t\t\tB86B04E31D17DABB00613014 /* error.c in Sources */,\n\t\t\t\tB828476C1CEB104E00820456 /* filters.c in Sources */,\n\t\t\t\tB86B04F81D17DABB00613014 /* hash-table.c in Sources */,\n\t\t\t\tB86B058B1D17DABB00613014 /* ipv4_set.c in Sources */,\n\t\t\t\tB86B07EB1D17DABB00613014 /* udns_rr_ptr.c in Sources */,\n\t\t\t\tB86B084D1D17DABB00613014 /* json.c in Sources */,\n\t\t\t\tB82847AB1CEB11F600820456 /* get.c in Sources */,\n\t\t\t\tB86B04FA1D17DABB00613014 /* ring-buffer.c in Sources */,\n\t\t\t\tB86B07EC1D17DABB00613014 /* udns_rr_srv.c in Sources */,\n\t\t\t\tB828475B1CEB0D5900820456 /* encode.c in Sources */,\n\t\t\t\tB86B05671D17DABB00613014 /* reachable.c in Sources */,\n\t\t\t\tB86B05381D17DABB00613014 /* subprocess.c in Sources */,\n\t\t\t\tB830CC6E1D2D6A0000FA8E37 /* http_simple.c in Sources */,\n\t\t\t\tB830CC7A1D2D6A3400FA8E37 /* tls1.0_session.c in Sources */,\n\t\t\t\tB86B07E01D17DABB00613014 /* udns_codes.c in Sources */,\n\t\t\t\tB86B05371D17DABB00613014 /* process.c in Sources */,\n\t\t\t\tB86B05881D17DABB00613014 /* allocation.c in Sources */,\n\t\t\t\tB82847A51CEB11EA00820456 /* chartables.c in Sources */,\n\t\t\t\tB82847A11CEB11DA00820456 /* study.c in Sources */,\n\t\t\t\tB86B07ED1D17DABB00613014 /* udns_rr_txt.c in Sources */,\n\t\t\t\tB86B08431D17DABB00613014 /* acl.c in Sources */,\n\t\t\t\tB82847701CEB105B00820456 /* parsers.c in Sources */,\n\t\t\t\tB86B07E11D17DABB00613014 /* udns_dn.c in Sources */,\n\t\t\t\tB86B05351D17DABB00613014 /* exec.c in Sources */,\n\t\t\t\tB86B07E91D17DABB00613014 /* udns_rr_mx.c in Sources */,\n\t\t\t\tB830CC751D2D6A1700FA8E37 /* obfsutil.c in Sources */,\n\t\t\t\tB830CC681D2D69E300FA8E37 /* auth.c in Sources */,\n\t\t\t\tB86B058C1D17DABB00613014 /* ipv6_set.c in Sources */,\n\t\t\t\tB86B05341D17DABB00613014 /* env.c in Sources */,\n\t\t\t\tB82847961CEB10F500820456 /* cgiedit.c in Sources */,\n\t\t\t\tB82847AD1CEB11F600820456 /* pcre.c in Sources */,\n\t\t\t\tB82847741CEB106200820456 /* loaders.c in Sources */,\n\t\t\t\tB86B04E51D17DABB00613014 /* hash.c in Sources */,\n\t\t\t\tB86B07E71D17DABB00613014 /* udns_resolver.c in Sources */,\n\t\t\t\tB86B057C1D17DABB00613014 /* ipv4_map.c in Sources */,\n\t\t\t\tB86B07E41D17DABB00613014 /* udns_jran.c in Sources */,\n\t\t\t\tB86B04FB1D17DABB00613014 /* slice.c in Sources */,\n\t\t\t\tB86B07EA1D17DABB00613014 /* udns_rr_naptr.c in Sources */,\n\t\t\t\tB86B05361D17DABB00613014 /* files.c in Sources */,\n\t\t\t\tB86B057B1D17DABB00613014 /* inspection.c in Sources */,\n\t\t\t\tB8EAC6801D40D01C0046963C /* maxminddb.c in Sources */,\n\t\t\t\tB82847681CEB103800820456 /* list.c in Sources */,\n\t\t\t\tB86B08461D17DABB00613014 /* cache.c in Sources */,\n\t\t\t\tB86B04F51D17DABB00613014 /* buffer.c in Sources */,\n\t\t\t\tB828478C1CEB10D400820456 /* urlmatch.c in Sources */,\n\t\t\t\tB828477C1CEB10AA00820456 /* jbsockets.c in Sources */,\n\t\t\t\tB86B054F1D17DABB00613014 /* event.c in Sources */,\n\t\t\t\tB86B05641D17DABB00613014 /* expanded.c in Sources */,\n\t\t\t\tB86B07EE1D17DABB00613014 /* udns_XtoX.c in Sources */,\n\t\t\t\tB86B04F91D17DABB00613014 /* managed-buffer.c in Sources */,\n\t\t\t\tB86B04E91D17DABB00613014 /* u128.c in Sources */,\n\t\t\t\tB86B05691D17DABB00613014 /* write.c in Sources */,\n\t\t\t\tB86B07E21D17DABB00613014 /* udns_dntosp.c in Sources */,\n\t\t\t\tB82847531CEB08CA00820456 /* miscutil.c in Sources */,\n\t\t\t\tB86B05801D17DABB00613014 /* storage.c in Sources */,\n\t\t\t\tB86B05611D17DABB00613014 /* assignments.c in Sources */,\n\t\t\t\tB830CC6B1D2D69FA00FA8E37 /* crc32.c in Sources */,\n\t\t\t\tB828479E1CEB111000820456 /* gateway.c in Sources */,\n\t\t\t\tB86B08491D17DABB00613014 /* encrypt.c in Sources */,\n\t\t\t\tB82847781CEB109700820456 /* ssplit.c in Sources */,\n\t\t\t\tB86B04D81D17DABB00613014 /* commands.c in Sources */,\n\t\t\t\tB830CC801D2D6A4000FA8E37 /* verify.c in Sources */,\n\t\t\t\tB86B04F31D17DABB00613014 /* array.c in Sources */,\n\t\t\t\tB86B08661D17DABB00613014 /* utils.c in Sources */,\n\t\t\t\tB86B05791D17DABB00613014 /* allocation.c in Sources */,\n\t\t\t\tB82847621CEB0E4400820456 /* pcreposix.c in Sources */,\n\t\t\t\tB86B053A1D17DABB00613014 /* thread.c in Sources */,\n\t\t\t\tB82847921CEB10EB00820456 /* cgisimple.c in Sources */,\n\t\t\t\tB86B084F1D17DABB00613014 /* local.c in Sources */,\n\t\t\t\tB86B07E81D17DABB00613014 /* udns_rr_a.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tB82847D11CEB177C00820456 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = B8DEFD7A1CE9C923003FC706 /* ShadowPath */;\n\t\t\ttargetProxy = B82847D01CEB177C00820456 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tB82847BF1CEB14B000820456 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB82847C01CEB14B000820456 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tpath = .;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB82847C41CEB14B000820456 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB82847C51CEB14B000820456 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tpath = .;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tB82847C91CEB14B000820456 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = ShadowPathDemo/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.ShadowPathDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB82847CA1CEB14B000820456 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = ShadowPathDemo/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.ShadowPathDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB8DEFD811CE9C923003FC706 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB8DEFD821CE9C923003FC706 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.3;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB8DEFD841CE9C923003FC706 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/Shadowsocks-libev/libcork/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/Shadowsocks-libev/libipset/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/libopenssl/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/libsodium-ios/include\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ShadowPath/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/Antinat/expat-lib/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/libopenssl/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/libsodium-ios/lib\",\n\t\t\t\t);\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DHAVE_CONFIG_H\",\n\t\t\t\t\t\"-DUSE_CRYPTO_OPENSSL\",\n\t\t\t\t\t\"-DLIB_ONLY\",\n\t\t\t\t\t\"-DUDPRELAY_LOCAL\",\n\t\t\t\t\t\"-DMODULE_LOCAL\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.ShadowPath;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB8DEFD851CE9C923003FC706 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 1;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/Shadowsocks-libev/libcork/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/Shadowsocks-libev/libipset/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/libopenssl/include\",\n\t\t\t\t\t\"${SRCROOT}/ShadowPath/libsodium-ios/include\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = ShadowPath/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/Antinat/expat-lib/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/libopenssl/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/ShadowPath/libsodium-ios/lib\",\n\t\t\t\t);\n\t\t\t\tOTHER_CFLAGS = (\n\t\t\t\t\t\"-DHAVE_CONFIG_H\",\n\t\t\t\t\t\"-DUSE_CRYPTO_OPENSSL\",\n\t\t\t\t\t\"-DLIB_ONLY\",\n\t\t\t\t\t\"-DUDPRELAY_LOCAL\",\n\t\t\t\t\t\"-DMODULE_LOCAL\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.touchingapp.ShadowPath;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tB82847C81CEB14B000820456 /* Build configuration list for PBXNativeTarget \"ShadowPathDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB82847C91CEB14B000820456 /* Debug */,\n\t\t\t\tB82847CA1CEB14B000820456 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB8DEFD751CE9C923003FC706 /* Build configuration list for PBXProject \"ShadowPath\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB8DEFD811CE9C923003FC706 /* Debug */,\n\t\t\t\tB8DEFD821CE9C923003FC706 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB8DEFD831CE9C923003FC706 /* Build configuration list for PBXNativeTarget \"ShadowPath\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB8DEFD841CE9C923003FC706 /* Debug */,\n\t\t\t\tB8DEFD851CE9C923003FC706 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = B8DEFD721CE9C923003FC706 /* Project object */;\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:ShadowPath.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPath.xcodeproj/project.xcworkspace/xcshareddata/ShadowPath.xcscmblueprint",
    "content": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"528A44C792D831E954301CCD04DB5EA3BB641A18\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey\" : {\n\n  },\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey\" : {\n    \"528A44C792D831E954301CCD04DB5EA3BB641A18\" : 0,\n    \"88EA2772244A30DC9C9F9C8CF4484193B457DACA\" : 0\n  },\n  \"DVTSourceControlWorkspaceBlueprintIdentifierKey\" : \"453CDC53-27A2-491C-8E8F-E7045069042B\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey\" : {\n    \"528A44C792D831E954301CCD04DB5EA3BB641A18\" : \"iOS\\/\",\n    \"88EA2772244A30DC9C9F9C8CF4484193B457DACA\" : \"iOS\\/Library\\/ShadowPath\\/ShadowPath\\/shadowsocks-libev\\/\"\n  },\n  \"DVTSourceControlWorkspaceBlueprintNameKey\" : \"ShadowPath\",\n  \"DVTSourceControlWorkspaceBlueprintVersion\" : 204,\n  \"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey\" : \"Library\\/ShadowPath\\/ShadowPath.xcodeproj\",\n  \"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey\" : [\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"github.com:iCodesign\\/Potatso.git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"528A44C792D831E954301CCD04DB5EA3BB641A18\"\n    },\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"github.com:shadowsocks\\/shadowsocks-libev.git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"88EA2772244A30DC9C9F9C8CF4484193B457DACA\"\n    }\n  ]\n}"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  ShadowPathDemo\n//\n//  Created by LEI on 5/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  ShadowPathDemo\n//\n//  Created by LEI on 5/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n\n@interface AppDelegate ()\n\n@end\n\n@implementation AppDelegate\n\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    // Override point for customization after application launch.\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"6211\" systemVersion=\"14A298i\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"6204\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"ViewController\" customModuleProvider=\"\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/Supporting Files/main.m",
    "content": "//\n//  main.m\n//  ShadowPathDemo\n//\n//  Created by LEI on 5/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/ViewController.h",
    "content": "//\n//  ViewController.h\n//  ShadowPathDemo\n//\n//  Created by LEI on 5/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ViewController : UIViewController\n\n\n@end\n\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/ViewController.m",
    "content": "//\n//  ViewController.m\n//  ShadowPathDemo\n//\n//  Created by LEI on 5/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"ViewController.h\"\n#import \"ShadowPath.h\"\n\n@interface ViewController ()\n\n@end\n\n@implementation ViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    // Do any additional setup after loading the view, typically from a nib.\n//    char *path = strdup([[[NSBundle mainBundle] pathForResource:@\"config\" ofType:@\"\"] UTF8String]);\n//    shadowpath_main(path);\n    profile_t t;\n    start_ss_local_server(t);\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n@end\n"
  },
  {
    "path": "Library/ShadowPath/ShadowPathDemo/config",
    "content": "#        Sample Configuration File for Privoxy 3.0.24\n#\n#  $Id: config,v 1.108 2016/01/17 14:33:03 fabiankeil Exp $\n#\n#  Copyright (C) 2001-2014 Privoxy Developers http://www.privoxy.org/\n#\n####################################################################\n#                                                                  #\n#                      Table of Contents                           #\n#                                                                  #\n#        I. INTRODUCTION                                           #\n#       II. FORMAT OF THE CONFIGURATION FILE                       #\n#                                                                  #\n#        1. LOCAL SET-UP DOCUMENTATION                             #\n#        2. CONFIGURATION AND LOG FILE LOCATIONS                   #\n#        3. DEBUGGING                                              #\n#        4. ACCESS CONTROL AND SECURITY                            #\n#        5. FORWARDING                                             #\n#        6. MISCELLANEOUS                                          #\n#        7. WINDOWS GUI OPTIONS                                    #\n#                                                                  #\n####################################################################\n#\n#\n#  I. INTRODUCTION\n#   ===============\n#\n#  This file holds Privoxy's main configuration. Privoxy detects\n#  configuration changes automatically, so you don't have to restart\n#  it unless you want to load a different configuration file.\n#\n#  The configuration will be reloaded with the first request after\n#  the change was done, this request itself will still use the old\n#  configuration, though. In other words: it takes two requests\n#  before you see the result of your changes. Requests that are\n#  dropped due to ACL don't trigger reloads.\n#\n#  When starting Privoxy on Unix systems, give the location of this\n#  file as last argument. On Windows systems, Privoxy will look for\n#  this file with the name 'config.txt' in the current working\n#  directory of the Privoxy process.\n#\n#\n#  II. FORMAT OF THE CONFIGURATION FILE\n#  ====================================\n#\n#  Configuration lines consist of an initial keyword followed by a\n#  list of values, all separated by whitespace (any number of spaces\n#  or tabs). For example,\n#\n#  actionsfile default.action\n#\n#  Indicates that the actionsfile is named 'default.action'.\n#\n#  The '#' indicates a comment. Any part of a line following a '#' is\n#  ignored, except if the '#' is preceded by a '\\'.\n#\n#  Thus, by placing a # at the start of an existing configuration\n#  line, you can make it a comment and it will be treated as if it\n#  weren't there. This is called \"commenting out\" an option and can\n#  be useful. Removing the # again is called \"uncommenting\".\n#\n#  Note that commenting out an option and leaving it at its default\n#  are two completely different things! Most options behave very\n#  differently when unset. See the \"Effect if unset\" explanation in\n#  each option's description for details.\n#\n#  Long lines can be continued on the next line by using a `\\' as the\n#  last character.\n#\n#\n#  1. LOCAL SET-UP DOCUMENTATION\n#  ==============================\n#\n#  If you intend to operate Privoxy for more users than just\n#  yourself, it might be a good idea to let them know how to reach\n#  you, what you block and why you do that, your policies, etc.\n#\n#\n#  1.1. user-manual\n#  =================\n#\n#  Specifies:\n#\n#      Location of the Privoxy User Manual.\n#\n#  Type of value:\n#\n#      A fully qualified URI\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      http://www.privoxy.org/version/user-manual/ will be used,\n#      where version is the Privoxy version.\n#\n#  Notes:\n#\n#      The User Manual URI is the single best source of information\n#      on Privoxy, and is used for help links from some of the\n#      internal CGI pages. The manual itself is normally packaged\n#      with the binary distributions, so you probably want to set\n#      this to a locally installed copy.\n#\n#      Examples:\n#\n#      The best all purpose solution is simply to put the full local\n#      PATH to where the User Manual is located:\n#\n#        user-manual  /usr/share/doc/privoxy/user-manual\n#\n#      The User Manual is then available to anyone with access to\n#      Privoxy, by following the built-in URL: http://\n#      config.privoxy.org/user-manual/ (or the shortcut: http://p.p/\n#      user-manual/).\n#\n#      If the documentation is not on the local system, it can be\n#      accessed from a remote server, as:\n#\n#        user-manual  http://example.com/privoxy/user-manual/\n#\n#      WARNING!!!\n#\n#          If set, this option should be the first option in the\n#          config file, because it is used while the config file is\n#          being read.\n#\n#user-manual http://www.privoxy.org/user-manual/\n#\n#  1.2. trust-info-url\n#  ====================\n#\n#  Specifies:\n#\n#      A URL to be displayed in the error page that users will see if\n#      access to an untrusted page is denied.\n#\n#  Type of value:\n#\n#      URL\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      No links are displayed on the \"untrusted\" error page.\n#\n#  Notes:\n#\n#      The value of this option only matters if the experimental\n#      trust mechanism has been activated. (See trustfile below.)\n#\n#      If you use the trust mechanism, it is a good idea to write up\n#      some on-line documentation about your trust policy and to\n#      specify the URL(s) here. Use multiple times for multiple URLs.\n#\n#      The URL(s) should be added to the trustfile as well, so users\n#      don't end up locked out from the information on why they were\n#      locked out in the first place!\n#\n#trust-info-url  http://www.example.com/why_we_block.html\n#trust-info-url  http://www.example.com/what_we_allow.html\n#\n#  1.3. admin-address\n#  ===================\n#\n#  Specifies:\n#\n#      An email address to reach the Privoxy administrator.\n#\n#  Type of value:\n#\n#      Email address\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      No email address is displayed on error pages and the CGI user\n#      interface.\n#\n#  Notes:\n#\n#      If both admin-address and proxy-info-url are unset, the whole\n#      \"Local Privoxy Support\" box on all generated pages will not be\n#      shown.\n#\n#admin-address privoxy-admin@example.com\n#\n#  1.4. proxy-info-url\n#  ====================\n#\n#  Specifies:\n#\n#      A URL to documentation about the local Privoxy setup,\n#      configuration or policies.\n#\n#  Type of value:\n#\n#      URL\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      No link to local documentation is displayed on error pages and\n#      the CGI user interface.\n#\n#  Notes:\n#\n#      If both admin-address and proxy-info-url are unset, the whole\n#      \"Local Privoxy Support\" box on all generated pages will not be\n#      shown.\n#\n#      This URL shouldn't be blocked ;-)\n#\n#proxy-info-url http://www.example.com/proxy-service.html\n#\n#  2. CONFIGURATION AND LOG FILE LOCATIONS\n#  ========================================\n#\n#  Privoxy can (and normally does) use a number of other files for\n#  additional configuration, help and logging. This section of the\n#  configuration file tells Privoxy where to find those other files.\n#\n#  The user running Privoxy, must have read permission for all\n#  configuration files, and write permission to any files that would\n#  be modified, such as log files and actions files.\n#\n#\n#  2.1. confdir\n#  =============\n#\n#  Specifies:\n#\n#      The directory where the other configuration files are located.\n#\n#  Type of value:\n#\n#      Path name\n#\n#  Default value:\n#\n#      /etc/privoxy (Unix) or Privoxy installation dir (Windows)\n#\n#  Effect if unset:\n#\n#      Mandatory\n#\n#  Notes:\n#\n#      No trailing \"/\", please.\n#\nconfdir .\n#\n#  2.2. templdir\n#  ==============\n#\n#  Specifies:\n#\n#      An alternative directory where the templates are loaded from.\n#\n#  Type of value:\n#\n#      Path name\n#\n#  Default value:\n#\n#      unset\n#\n#  Effect if unset:\n#\n#      The templates are assumed to be located in confdir/template.\n#\n#  Notes:\n#\n#      Privoxy's original templates are usually overwritten with each\n#      update. Use this option to relocate customized templates that\n#      should be kept. As template variables might change between\n#      updates, you shouldn't expect templates to work with Privoxy\n#      releases other than the one they were part of, though.\n#\n#templdir .\n#\n#  2.3. temporary-directory\n#  =========================\n#\n#  Specifies:\n#\n#      A directory where Privoxy can create temporary files.\n#\n#  Type of value:\n#\n#      Path name\n#\n#  Default value:\n#\n#      unset\n#\n#  Effect if unset:\n#\n#      No temporary files are created, external filters don't work.\n#\n#  Notes:\n#\n#      To execute external filters, Privoxy has to create temporary\n#      files. This directive specifies the directory the temporary\n#      files should be written to.\n#\n#      It should be a directory only Privoxy (and trusted users) can\n#      access.\n#\n#temporary-directory .\n#\n#  2.4. logdir\n#  ============\n#\n#  Specifies:\n#\n#      The directory where all logging takes place (i.e. where the\n#      logfile is located).\n#\n#  Type of value:\n#\n#      Path name\n#\n#  Default value:\n#\n#      /var/log/privoxy (Unix) or Privoxy installation dir (Windows)\n#\n#  Effect if unset:\n#\n#      Mandatory\n#\n#  Notes:\n#\n#      No trailing \"/\", please.\n#\nlogdir .\n#\n#  2.5. actionsfile\n#  =================\n#\n#  Specifies:\n#\n#      The actions file(s) to use\n#\n#  Type of value:\n#\n#      Complete file name, relative to confdir\n#\n#  Default values:\n#\n#        match-all.action # Actions that are applied to all sites and maybe overruled later on.\n#\n#        default.action   # Main actions file\n#\n#        user.action      # User customizations\n#\n#  Effect if unset:\n#\n#      No actions are taken at all. More or less neutral proxying.\n#\n#  Notes:\n#\n#      Multiple actionsfile lines are permitted, and are in fact\n#      recommended!\n#\n#      The default values are default.action, which is the \"main\"\n#      actions file maintained by the developers, and user.action,\n#      where you can make your personal additions.\n#\n#      Actions files contain all the per site and per URL\n#      configuration for ad blocking, cookie management, privacy\n#      considerations, etc.\n#\n#actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.\n#actionsfile default.action   # Main actions file\n#actionsfile user.action      # User customizations\n#\n#  2.6. filterfile\n#  ================\n#\n#  Specifies:\n#\n#      The filter file(s) to use\n#\n#  Type of value:\n#\n#      File name, relative to confdir\n#\n#  Default value:\n#\n#      default.filter (Unix) or default.filter.txt (Windows)\n#\n#  Effect if unset:\n#\n#      No textual content filtering takes place, i.e. all +filter{name}\n#      actions in the actions files are turned neutral.\n#\n#  Notes:\n#\n#      Multiple filterfile lines are permitted.\n#\n#      The filter files contain content modification rules that use\n#      regular expressions. These rules permit powerful changes on\n#      the content of Web pages, and optionally the headers as well,\n#      e.g., you could try to disable your favorite JavaScript\n#      annoyances, re-write the actual displayed text, or just have\n#      some fun playing buzzword bingo with web pages.\n#\n#      The +filter{name} actions rely on the relevant filter (name)\n#      to be defined in a filter file!\n#\n#      A pre-defined filter file called default.filter that contains\n#      a number of useful filters for common problems is included in\n#      the distribution. See the section on the filter action for a\n#      list.\n#\n#      It is recommended to place any locally adapted filters into a\n#      separate file, such as user.filter.\n#\n#filterfile default.filter\n#filterfile user.filter      # User customizations\n#\n#  2.7. logfile\n#  =============\n#\n#  Specifies:\n#\n#      The log file to use\n#\n#  Type of value:\n#\n#      File name, relative to logdir\n#\n#  Default value:\n#\n#      Unset (commented out). When activated: logfile (Unix) or\n#      privoxy.log (Windows).\n#\n#  Effect if unset:\n#\n#      No logfile is written.\n#\n#  Notes:\n#\n#      The logfile is where all logging and error messages are\n#      written. The level of detail and number of messages are set\n#      with the debug option (see below). The logfile can be useful\n#      for tracking down a problem with Privoxy (e.g., it's not\n#      blocking an ad you think it should block) and it can help you\n#      to monitor what your browser is doing.\n#\n#      Depending on the debug options below, the logfile may be a\n#      privacy risk if third parties can get access to it. As most\n#      users will never look at it, Privoxy only logs fatal errors by\n#      default.\n#\n#      For most troubleshooting purposes, you will have to change\n#      that, please refer to the debugging section for details.\n#\n#      Any log files must be writable by whatever user Privoxy is\n#      being run as (on Unix, default user id is \"privoxy\").\n#\n#      To prevent the logfile from growing indefinitely, it is\n#      recommended to periodically rotate or shorten it. Many\n#      operating systems support log rotation out of the box, some\n#      require additional software to do it. For details, please\n#      refer to the documentation for your operating system.\n#\n#logfile logfile\n#\n#  2.8. trustfile\n#  ===============\n#\n#  Specifies:\n#\n#      The name of the trust file to use\n#\n#  Type of value:\n#\n#      File name, relative to confdir\n#\n#  Default value:\n#\n#      Unset (commented out). When activated: trust (Unix) or\n#      trust.txt (Windows)\n#\n#  Effect if unset:\n#\n#      The entire trust mechanism is disabled.\n#\n#  Notes:\n#\n#      The trust mechanism is an experimental feature for building\n#      white-lists and should be used with care. It is NOT\n#      recommended for the casual user.\n#\n#      If you specify a trust file, Privoxy will only allow access to\n#      sites that are specified in the trustfile. Sites can be listed\n#      in one of two ways:\n#\n#      Prepending a ~ character limits access to this site only (and\n#      any sub-paths within this site), e.g. ~www.example.com allows\n#      access to ~www.example.com/features/news.html, etc.\n#\n#      Or, you can designate sites as trusted referrers, by\n#      prepending the name with a + character. The effect is that\n#      access to untrusted sites will be granted -- but only if a\n#      link from this trusted referrer was used to get there. The\n#      link target will then be added to the \"trustfile\" so that\n#      future, direct accesses will be granted. Sites added via this\n#      mechanism do not become trusted referrers themselves (i.e.\n#      they are added with a ~ designation). There is a limit of 512\n#      such entries, after which new entries will not be made.\n#\n#      If you use the + operator in the trust file, it may grow\n#      considerably over time.\n#\n#      It is recommended that Privoxy be compiled with the\n#      --disable-force, --disable-toggle and --disable-editor\n#      options, if this feature is to be used.\n#\n#      Possible applications include limiting Internet access for\n#      children.\n#\n#trustfile trust\n#\n#  3. DEBUGGING\n#  =============\n#\n#  These options are mainly useful when tracing a problem. Note that\n#  you might also want to invoke Privoxy with the --no-daemon command\n#  line option when debugging.\n#\n#\n#  3.1. debug\n#  ===========\n#\n#  Specifies:\n#\n#      Key values that determine what information gets logged.\n#\n#  Type of value:\n#\n#      Integer values\n#\n#  Default value:\n#\n#      0 (i.e.: only fatal errors (that cause Privoxy to exit) are\n#      logged)\n#\n#  Effect if unset:\n#\n#      Default value is used (see above).\n#\n#  Notes:\n#\n#      The available debug levels are:\n#\n#        debug     1 # Log the destination for each request Privoxy let through. See also debug 1024.\n#        debug     2 # show each connection status\n#        debug     4 # show I/O status\n#        debug     8 # show header parsing\n#        debug    16 # log all data written to the network\n#        debug    32 # debug force feature\n#        debug    64 # debug regular expression filters\n#        debug   128 # debug redirects\n#        debug   256 # debug GIF de-animation\n#        debug   512 # Common Log Format\n#        debug  1024 # Log the destination for requests Privoxy didn't let through, and the reason why.\n#        debug  2048 # CGI user interface\n#        debug  4096 # Startup banner and warnings.\n#        debug  8192 # Non-fatal errors\n#        debug 32768 # log all data read from the network\n#        debug 65536 # Log the applying actions\n#\n#      To select multiple debug levels, you can either add them or\n#      use multiple debug lines.\n#\n#      A debug level of 1 is informative because it will show you\n#      each request as it happens. 1, 1024, 4096 and 8192 are\n#      recommended so that you will notice when things go wrong. The\n#      other levels are probably only of interest if you are hunting\n#      down a specific problem. They can produce a hell of an output\n#      (especially 16).\n#\n#      If you are used to the more verbose settings, simply enable\n#      the debug lines below again.\n#\n#      If you want to use pure CLF (Common Log Format), you should\n#      set \"debug 512\" ONLY and not enable anything else.\n#\n#      Privoxy has a hard-coded limit for the length of log messages.\n#      If it's reached, messages are logged truncated and marked with\n#      \"... [too long, truncated]\".\n#\n#      Please don't file any support requests without trying to\n#      reproduce the problem with increased debug level first. Once\n#      you read the log messages, you may even be able to solve the\n#      problem on your own.\n#\n#debug     1 # Log the destination for each request Privoxy let through. See also debug 1024.\n#debug  1024 # Actions that are applied to all sites and maybe overruled later on.\n#debug  4096 # Startup banner and warnings\n#debug  8192 # Non-fatal errors\ndebug 131071\n#\n#  3.2. single-threaded\n#  =====================\n#\n#  Specifies:\n#\n#      Whether to run only one server thread.\n#\n#  Type of value:\n#\n#      1 or 0\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Multi-threaded (or, where unavailable: forked) operation, i.e.\n#      the ability to serve multiple requests simultaneously.\n#\n#  Notes:\n#\n#      This option is only there for debugging purposes. It will\n#      drastically reduce performance.\n#\n#single-threaded 1\n#\n#  3.3. hostname\n#  ==============\n#\n#  Specifies:\n#\n#      The hostname shown on the CGI pages.\n#\n#  Type of value:\n#\n#      Text\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      The hostname provided by the operating system is used.\n#\n#  Notes:\n#\n#      On some misconfigured systems resolving the hostname fails or\n#      takes too much time and slows Privoxy down. Setting a fixed\n#      hostname works around the problem.\n#\n#      In other circumstances it might be desirable to show a\n#      hostname other than the one returned by the operating system.\n#      For example if the system has several different hostnames and\n#      you don't want to use the first one.\n#\n#      Note that Privoxy does not validate the specified hostname\n#      value.\n#\n#hostname hostname.example.org\n#\n#  4. ACCESS CONTROL AND SECURITY\n#  ===============================\n#\n#  This section of the config file controls the security-relevant\n#  aspects of Privoxy's configuration.\n#\n#\n#  4.1. listen-address\n#  ====================\n#\n#  Specifies:\n#\n#      The address and TCP port on which Privoxy will listen for\n#      client requests.\n#\n#  Type of value:\n#\n#      [IP-Address]:Port\n#\n#      [Hostname]:Port\n#\n#  Default value:\n#\n#      127.0.0.1:8118\n#\n#  Effect if unset:\n#\n#      Bind to 127.0.0.1 (IPv4 localhost), port 8118. This is\n#      suitable and recommended for home users who run Privoxy on the\n#      same machine as their browser.\n#\n#  Notes:\n#\n#      You will need to configure your browser(s) to this proxy\n#      address and port.\n#\n#      If you already have another service running on port 8118, or\n#      if you want to serve requests from other machines (e.g. on\n#      your local network) as well, you will need to override the\n#      default.\n#\n#      You can use this statement multiple times to make Privoxy\n#      listen on more ports or more IP addresses. Suitable if your\n#      operating system does not support sharing IPv6 and IPv4\n#      protocols on the same socket.\n#\n#      If a hostname is used instead of an IP address, Privoxy will\n#      try to resolve it to an IP address and if there are multiple,\n#      use the first one returned.\n#\n#      If the address for the hostname isn't already known on the\n#      system (for example because it's in /etc/hostname), this may\n#      result in DNS traffic.\n#\n#      If the specified address isn't available on the system, or if\n#      the hostname can't be resolved, Privoxy will fail to start.\n#\n#      IPv6 addresses containing colons have to be quoted by\n#      brackets. They can only be used if Privoxy has been compiled\n#      with IPv6 support. If you aren't sure if your version supports\n#      it, have a look at http://config.privoxy.org/show-status.\n#\n#      Some operating systems will prefer IPv6 to IPv4 addresses even\n#      if the system has no IPv6 connectivity which is usually not\n#      expected by the user. Some even rely on DNS to resolve\n#      localhost which mean the \"localhost\" address used may not\n#      actually be local.\n#\n#      It is therefore recommended to explicitly configure the\n#      intended IP address instead of relying on the operating\n#      system, unless there's a strong reason not to.\n#\n#      If you leave out the address, Privoxy will bind to all IPv4\n#      interfaces (addresses) on your machine and may become\n#      reachable from the Internet and/or the local network. Be aware\n#      that some GNU/Linux distributions modify that behaviour\n#      without updating the documentation. Check for non-standard\n#      patches if your Privoxy version behaves differently.\n#\n#      If you configure Privoxy to be reachable from the network,\n#      consider using access control lists (ACL's, see below), and/or\n#      a firewall.\n#\n#      If you open Privoxy to untrusted users, you will also want to\n#      make sure that the following actions are disabled:\n#      enable-edit-actions and enable-remote-toggle\n#\n#  Example:\n#\n#      Suppose you are running Privoxy on a machine which has the\n#      address 192.168.0.1 on your local private network\n#      (192.168.0.0) and has another outside connection with a\n#      different address. You want it to serve requests from inside\n#      only:\n#\n#        listen-address  192.168.0.1:8118\n#\n#      Suppose you are running Privoxy on an IPv6-capable machine and\n#      you want it to listen on the IPv6 address of the loopback\n#      device:\n#\n#        listen-address [::1]:8118\n#\nlisten-address  0.0.0.0:8118\n#\n#  4.2. toggle\n#  ============\n#\n#  Specifies:\n#\n#      Initial state of \"toggle\" status\n#\n#  Type of value:\n#\n#      1 or 0\n#\n#  Default value:\n#\n#      1\n#\n#  Effect if unset:\n#\n#      Act as if toggled on\n#\n#  Notes:\n#\n#      If set to 0, Privoxy will start in \"toggled off\" mode, i.e.\n#      mostly behave like a normal, content-neutral proxy with both\n#      ad blocking and content filtering disabled. See\n#      enable-remote-toggle below.\n#\ntoggle  1\n#\n#  4.3. enable-remote-toggle\n#  ==========================\n#\n#  Specifies:\n#\n#      Whether or not the web-based toggle feature may be used\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      The web-based toggle feature is disabled.\n#\n#  Notes:\n#\n#      When toggled off, Privoxy mostly acts like a normal,\n#      content-neutral proxy, i.e. doesn't block ads or filter\n#      content.\n#\n#      Access to the toggle feature can not be controlled separately\n#      by \"ACLs\" or HTTP authentication, so that everybody who can\n#      access Privoxy (see \"ACLs\" and listen-address above) can\n#      toggle it for all users. So this option is not recommended for\n#      multi-user environments with untrusted users.\n#\n#      Note that malicious client side code (e.g Java) is also\n#      capable of using this option.\n#\n#      As a lot of Privoxy users don't read documentation, this\n#      feature is disabled by default.\n#\n#      Note that you must have compiled Privoxy with support for this\n#      feature, otherwise this option has no effect.\n#\nenable-remote-toggle  0\n#\n#  4.4. enable-remote-http-toggle\n#  ===============================\n#\n#  Specifies:\n#\n#      Whether or not Privoxy recognizes special HTTP headers to\n#      change its behaviour.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Privoxy ignores special HTTP headers.\n#\n#  Notes:\n#\n#      When toggled on, the client can change Privoxy's behaviour by\n#      setting special HTTP headers. Currently the only supported\n#      special header is \"X-Filter: No\", to disable filtering for the\n#      ongoing request, even if it is enabled in one of the action\n#      files.\n#\n#      This feature is disabled by default. If you are using Privoxy\n#      in a environment with trusted clients, you may enable this\n#      feature at your discretion. Note that malicious client side\n#      code (e.g Java) is also capable of using this feature.\n#\n#      This option will be removed in future releases as it has been\n#      obsoleted by the more general header taggers.\n#\nenable-remote-http-toggle  0\n#\n#  4.5. enable-edit-actions\n#  =========================\n#\n#  Specifies:\n#\n#      Whether or not the web-based actions file editor may be used\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      The web-based actions file editor is disabled.\n#\n#  Notes:\n#\n#      Access to the editor can not be controlled separately by\n#      \"ACLs\" or HTTP authentication, so that everybody who can\n#      access Privoxy (see \"ACLs\" and listen-address above) can\n#      modify its configuration for all users.\n#\n#      This option is not recommended for environments with untrusted\n#      users and as a lot of Privoxy users don't read documentation,\n#      this feature is disabled by default.\n#\n#      Note that malicious client side code (e.g Java) is also\n#      capable of using the actions editor and you shouldn't enable\n#      this options unless you understand the consequences and are\n#      sure your browser is configured correctly.\n#\n#      Note that you must have compiled Privoxy with support for this\n#      feature, otherwise this option has no effect.\n#\nenable-edit-actions 0\n#\n#  4.6. enforce-blocks\n#  ====================\n#\n#  Specifies:\n#\n#      Whether the user is allowed to ignore blocks and can \"go there\n#      anyway\".\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Blocks are not enforced.\n#\n#  Notes:\n#\n#      Privoxy is mainly used to block and filter requests as a\n#      service to the user, for example to block ads and other junk\n#      that clogs the pipes. Privoxy's configuration isn't perfect\n#      and sometimes innocent pages are blocked. In this situation it\n#      makes sense to allow the user to enforce the request and have\n#      Privoxy ignore the block.\n#\n#      In the default configuration Privoxy's \"Blocked\" page contains\n#      a \"go there anyway\" link to adds a special string (the force\n#      prefix) to the request URL. If that link is used, Privoxy will\n#      detect the force prefix, remove it again and let the request\n#      pass.\n#\n#      Of course Privoxy can also be used to enforce a network\n#      policy. In that case the user obviously should not be able to\n#      bypass any blocks, and that's what the \"enforce-blocks\" option\n#      is for. If it's enabled, Privoxy hides the \"go there anyway\"\n#      link. If the user adds the force prefix by hand, it will not\n#      be accepted and the circumvention attempt is logged.\n#\n#  Examples:\n#\n#      enforce-blocks 1\n#\nenforce-blocks 0\n#\n#  4.7. ACLs: permit-access and deny-access\n#  =========================================\n#\n#  Specifies:\n#\n#      Who can access what.\n#\n#  Type of value:\n#\n#      src_addr[:port][/src_masklen] [dst_addr[:port][/dst_masklen]]\n#\n#      Where src_addr and dst_addr are IPv4 addresses in dotted\n#      decimal notation or valid DNS names, port is a port number,\n#      and src_masklen and dst_masklen are subnet masks in CIDR\n#      notation, i.e. integer values from 2 to 30 representing the\n#      length (in bits) of the network address. The masks and the\n#      whole destination part are optional.\n#\n#      If your system implements RFC 3493, then src_addr and dst_addr\n#      can be IPv6 addresses delimeted by brackets, port can be a\n#      number or a service name, and src_masklen and dst_masklen can\n#      be a number from 0 to 128.\n#\n#  Default value:\n#\n#      Unset\n#\n#      If no port is specified, any port will match. If no\n#      src_masklen or src_masklen is given, the complete IP address\n#      has to match (i.e. 32 bits for IPv4 and 128 bits for IPv6).\n#\n#  Effect if unset:\n#\n#      Don't restrict access further than implied by listen-address\n#\n#  Notes:\n#\n#      Access controls are included at the request of ISPs and\n#      systems administrators, and are not usually needed by\n#      individual users. For a typical home user, it will normally\n#      suffice to ensure that Privoxy only listens on the localhost\n#      (127.0.0.1) or internal (home) network address by means of the\n#      listen-address option.\n#\n#      Please see the warnings in the FAQ that Privoxy is not\n#      intended to be a substitute for a firewall or to encourage\n#      anyone to defer addressing basic security weaknesses.\n#\n#      Multiple ACL lines are OK. If any ACLs are specified, Privoxy\n#      only talks to IP addresses that match at least one\n#      permit-access line and don't match any subsequent deny-access\n#      line. In other words, the last match wins, with the default\n#      being deny-access.\n#\n#      If Privoxy is using a forwarder (see forward below) for a\n#      particular destination URL, the dst_addr that is examined is\n#      the address of the forwarder and NOT the address of the\n#      ultimate target. This is necessary because it may be\n#      impossible for the local Privoxy to determine the IP address\n#      of the ultimate target (that's often what gateways are used\n#      for).\n#\n#      You should prefer using IP addresses over DNS names, because\n#      the address lookups take time. All DNS names must resolve! You\n#      can not use domain patterns like \"*.org\" or partial domain\n#      names. If a DNS name resolves to multiple IP addresses, only\n#      the first one is used.\n#\n#      Some systems allow IPv4 clients to connect to IPv6 server\n#      sockets. Then the client's IPv4 address will be translated by\n#      the system into IPv6 address space with special prefix\n#      ::ffff:0:0/96 (so called IPv4 mapped IPv6 address). Privoxy\n#      can handle it and maps such ACL addresses automatically.\n#\n#      Denying access to particular sites by ACL may have undesired\n#      side effects if the site in question is hosted on a machine\n#      which also hosts other sites (most sites are).\n#\n#  Examples:\n#\n#      Explicitly define the default behavior if no ACL and\n#      listen-address are set: \"localhost\" is OK. The absence of a\n#      dst_addr implies that all destination addresses are OK:\n#\n#        permit-access  localhost\n#\n#      Allow any host on the same class C subnet as www.privoxy.org\n#      access to nothing but www.example.com (or other domains hosted\n#      on the same system):\n#\n#        permit-access  www.privoxy.org/24 www.example.com/32\n#\n#      Allow access from any host on the 26-bit subnet 192.168.45.64\n#      to anywhere, with the exception that 192.168.45.73 may not\n#      access the IP address behind www.dirty-stuff.example.com:\n#\n#        permit-access  192.168.45.64/26\n#        deny-access    192.168.45.73    www.dirty-stuff.example.com\n#\n#      Allow access from the IPv4 network 192.0.2.0/24 even if\n#      listening on an IPv6 wild card address (not supported on all\n#      platforms):\n#\n#        permit-access  192.0.2.0/24\n#\n#      This is equivalent to the following line even if listening on\n#      an IPv4 address (not supported on all platforms):\n#\n#        permit-access  [::ffff:192.0.2.0]/120\n#\n#\n#  4.8. buffer-limit\n#  ==================\n#\n#  Specifies:\n#\n#      Maximum size of the buffer for content filtering.\n#\n#  Type of value:\n#\n#      Size in Kbytes\n#\n#  Default value:\n#\n#      4096\n#\n#  Effect if unset:\n#\n#      Use a 4MB (4096 KB) limit.\n#\n#  Notes:\n#\n#      For content filtering, i.e. the +filter and +deanimate-gif\n#      actions, it is necessary that Privoxy buffers the entire\n#      document body. This can be potentially dangerous, since a\n#      server could just keep sending data indefinitely and wait for\n#      your RAM to exhaust -- with nasty consequences. Hence this\n#      option.\n#\n#      When a document buffer size reaches the buffer-limit, it is\n#      flushed to the client unfiltered and no further attempt to\n#      filter the rest of the document is made. Remember that there\n#      may be multiple threads running, which might require up to\n#      buffer-limit Kbytes each, unless you have enabled\n#      \"single-threaded\" above.\n#\nbuffer-limit 4096\n#\n#  4.9. enable-proxy-authentication-forwarding\n#  ============================================\n#\n#  Specifies:\n#\n#      Whether or not proxy authentication through Privoxy should\n#      work.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Proxy authentication headers are removed.\n#\n#  Notes:\n#\n#      Privoxy itself does not support proxy authentication, but can\n#      allow clients to authenticate against Privoxy's parent proxy.\n#\n#      By default Privoxy (3.0.21 and later) don't do that and remove\n#      Proxy-Authorization headers in requests and Proxy-Authenticate\n#      headers in responses to make it harder for malicious sites to\n#      trick inexperienced users into providing login information.\n#\n#      If this option is enabled the headers are forwarded.\n#\n#      Enabling this option is not recommended if there is no parent\n#      proxy that requires authentication or if the local network\n#      between Privoxy and the parent proxy isn't trustworthy. If\n#      proxy authentication is only required for some requests, it is\n#      recommended to use a client header filter to remove the\n#      authentication headers for requests where they aren't needed.\n#\nenable-proxy-authentication-forwarding 0\n#\n#  5. FORWARDING\n#  ==============\n#\n#  This feature allows routing of HTTP requests through a chain of\n#  multiple proxies.\n#\n#  Forwarding can be used to chain Privoxy with a caching proxy to\n#  speed up browsing. Using a parent proxy may also be necessary if\n#  the machine that Privoxy runs on has no direct Internet access.\n#\n#  Note that parent proxies can severely decrease your privacy level.\n#  For example a parent proxy could add your IP address to the\n#  request headers and if it's a caching proxy it may add the \"Etag\"\n#  header to revalidation requests again, even though you configured\n#  Privoxy to remove it. It may also ignore Privoxy's header time\n#  randomization and use the original values which could be used by\n#  the server as cookie replacement to track your steps between\n#  visits.\n#\n#  Also specified here are SOCKS proxies. Privoxy supports the SOCKS\n#  4 and SOCKS 4A protocols.\n#\n#\n#  5.1. forward\n#  =============\n#\n#  Specifies:\n#\n#      To which parent HTTP proxy specific requests should be routed.\n#\n#  Type of value:\n#\n#      target_pattern http_parent[:port]\n#\n#      where target_pattern is a URL pattern that specifies to which\n#      requests (i.e. URLs) this forward rule shall apply. Use / to\n#      denote \"all URLs\". http_parent[:port] is the DNS name or IP\n#      address of the parent HTTP proxy through which the requests\n#      should be forwarded, optionally followed by its listening port\n#      (default: 8000). Use a single dot (.) to denote \"no\n#      forwarding\".\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      Don't use parent HTTP proxies.\n#\n#  Notes:\n#\n#      If http_parent is \".\", then requests are not forwarded to\n#      another HTTP proxy but are made directly to the web servers.\n#\n#      http_parent can be a numerical IPv6 address (if RFC 3493 is\n#      implemented). To prevent clashes with the port delimiter, the\n#      whole IP address has to be put into brackets. On the other\n#      hand a target_pattern containing an IPv6 address has to be put\n#      into angle brackets (normal brackets are reserved for regular\n#      expressions already).\n#\n#      Multiple lines are OK, they are checked in sequence, and the\n#      last match wins.\n#\n#  Examples:\n#\n#      Everything goes to an example parent proxy, except SSL on port\n#      443 (which it doesn't handle):\n#\n#        forward   /      parent-proxy.example.org:8080\n#        forward   :443   .\n#\n#      Everything goes to our example ISP's caching proxy, except for\n#      requests to that ISP's sites:\n#\n#        forward   /                  caching-proxy.isp.example.net:8000\n#        forward   .isp.example.net   .\n#\n#      Parent proxy specified by an IPv6 address:\n#\n#        forward   /                   [2001:DB8::1]:8000\n#\n#      Suppose your parent proxy doesn't support IPv6:\n#\n#        forward  /                        parent-proxy.example.org:8000\n#        forward  ipv6-server.example.org  .\n#        forward  <[2-3][0-9a-f][0-9a-f][0-9a-f]:*>   .\n#\n#\n#  5.2. forward-socks4, forward-socks4a, forward-socks5 and forward-socks5t\n#  =========================================================================\n#\n#  Specifies:\n#\n#      Through which SOCKS proxy (and optionally to which parent HTTP\n#      proxy) specific requests should be routed.\n#\n#  Type of value:\n#\n#      target_pattern socks_proxy[:port] http_parent[:port]\n#\n#      where target_pattern is a URL pattern that specifies to which\n#      requests (i.e. URLs) this forward rule shall apply. Use / to\n#      denote \"all URLs\". http_parent and socks_proxy are IP\n#      addresses in dotted decimal notation or valid DNS names (\n#      http_parent may be \".\" to denote \"no HTTP forwarding\"), and\n#      the optional port parameters are TCP ports, i.e. integer\n#      values from 1 to 65535\n#\n#  Default value:\n#\n#      Unset\n#\n#  Effect if unset:\n#\n#      Don't use SOCKS proxies.\n#\n#  Notes:\n#\n#      Multiple lines are OK, they are checked in sequence, and the\n#      last match wins.\n#\n#      The difference between forward-socks4 and forward-socks4a is\n#      that in the SOCKS 4A protocol, the DNS resolution of the\n#      target hostname happens on the SOCKS server, while in SOCKS 4\n#      it happens locally.\n#\n#      With forward-socks5 the DNS resolution will happen on the\n#      remote server as well.\n#\n#      forward-socks5t works like vanilla forward-socks5 but lets\n#      Privoxy additionally use Tor-specific SOCKS extensions.\n#      Currently the only supported SOCKS extension is optimistic\n#      data which can reduce the latency for the first request made\n#      on a newly created connection.\n#\n#      socks_proxy and http_parent can be a numerical IPv6 address\n#      (if RFC 3493 is implemented). To prevent clashes with the port\n#      delimiter, the whole IP address has to be put into brackets.\n#      On the other hand a target_pattern containing an IPv6 address\n#      has to be put into angle brackets (normal brackets are\n#      reserved for regular expressions already).\n#\n#      If http_parent is \".\", then requests are not forwarded to\n#      another HTTP proxy but are made (HTTP-wise) directly to the\n#      web servers, albeit through a SOCKS proxy.\n#\n#  Examples:\n#\n#      From the company example.com, direct connections are made to\n#      all \"internal\" domains, but everything outbound goes through\n#      their ISP's proxy by way of example.com's corporate SOCKS 4A\n#      gateway to the Internet.\n#\n#        forward-socks4a   /              socks-gw.example.com:1080  www-cache.isp.example.net:8080\n#        forward           .example.com   .\n#\n#      A rule that uses a SOCKS 4 gateway for all destinations but no\n#      HTTP parent looks like this:\n#\n#        forward-socks4   /               socks-gw.example.com:1080  .\n#\n#      To chain Privoxy and Tor, both running on the same system, you\n#      would use something like:\n#\n#        forward-socks5t   /               127.0.0.1:9050 .\n#\n#      Note that if you got Tor through one of the bundles, you may\n#      have to change the port from 9050 to 9150 (or even another\n#      one). For details, please check the documentation on the Tor\n#      website.\n#\n#      The public Tor network can't be used to reach your local\n#      network, if you need to access local servers you therefore\n#      might want to make some exceptions:\n#\n#        forward         192.168.*.*/     .\n#        forward            10.*.*.*/     .\n#        forward           127.*.*.*/     .\n#\n#      Unencrypted connections to systems in these address ranges\n#      will be as (un)secure as the local network is, but the\n#      alternative is that you can't reach the local network through\n#      Privoxy at all. Of course this may actually be desired and\n#      there is no reason to make these exceptions if you aren't sure\n#      you need them.\n#\n#      If you also want to be able to reach servers in your local\n#      network by using their names, you will need additional\n#      exceptions that look like this:\n#\n#       forward           localhost/     .\n#\n#\n#  5.3. forwarded-connect-retries\n#  ===============================\n#\n#  Specifies:\n#\n#      How often Privoxy retries if a forwarded connection request\n#      fails.\n#\n#  Type of value:\n#\n#      Number of retries.\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Connections forwarded through other proxies are treated like\n#      direct connections and no retry attempts are made.\n#\n#  Notes:\n#\n#      forwarded-connect-retries is mainly interesting for socks4a\n#      connections, where Privoxy can't detect why the connections\n#      failed. The connection might have failed because of a DNS\n#      timeout in which case a retry makes sense, but it might also\n#      have failed because the server doesn't exist or isn't\n#      reachable. In this case the retry will just delay the\n#      appearance of Privoxy's error message.\n#\n#      Note that in the context of this option, \"forwarded\n#      connections\" includes all connections that Privoxy forwards\n#      through other proxies. This option is not limited to the HTTP\n#      CONNECT method.\n#\n#      Only use this option, if you are getting lots of\n#      forwarding-related error messages that go away when you try\n#      again manually. Start with a small value and check Privoxy's\n#      logfile from time to time, to see how many retries are usually\n#      needed.\n#\n#  Examples:\n#\n#      forwarded-connect-retries 1\n#\nforwarded-connect-retries  0\n#\n#  6. MISCELLANEOUS\n#  =================\n#\n#  6.1. accept-intercepted-requests\n#  =================================\n#\n#  Specifies:\n#\n#      Whether intercepted requests should be treated as valid.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Only proxy requests are accepted, intercepted requests are\n#      treated as invalid.\n#\n#  Notes:\n#\n#      If you don't trust your clients and want to force them to use\n#      Privoxy, enable this option and configure your packet filter\n#      to redirect outgoing HTTP connections into Privoxy.\n#\n#      Note that intercepting encrypted connections (HTTPS) isn't\n#      supported.\n#\n#      Make sure that Privoxy's own requests aren't redirected as\n#      well. Additionally take care that Privoxy can't intentionally\n#      connect to itself, otherwise you could run into redirection\n#      loops if Privoxy's listening port is reachable by the outside\n#      or an attacker has access to the pages you visit.\n#\n#  Examples:\n#\n#      accept-intercepted-requests 1\n#\naccept-intercepted-requests 0\n#\n#  6.2. allow-cgi-request-crunching\n#  =================================\n#\n#  Specifies:\n#\n#      Whether requests to Privoxy's CGI pages can be blocked or\n#      redirected.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Privoxy ignores block and redirect actions for its CGI pages.\n#\n#  Notes:\n#\n#      By default Privoxy ignores block or redirect actions for its\n#      CGI pages. Intercepting these requests can be useful in\n#      multi-user setups to implement fine-grained access control,\n#      but it can also render the complete web interface useless and\n#      make debugging problems painful if done without care.\n#\n#      Don't enable this option unless you're sure that you really\n#      need it.\n#\n#  Examples:\n#\n#      allow-cgi-request-crunching 1\n#\nallow-cgi-request-crunching 0\n#\n#  6.3. split-large-forms\n#  =======================\n#\n#  Specifies:\n#\n#      Whether the CGI interface should stay compatible with broken\n#      HTTP clients.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      The CGI form generate long GET URLs.\n#\n#  Notes:\n#\n#      Privoxy's CGI forms can lead to rather long URLs. This isn't a\n#      problem as far as the HTTP standard is concerned, but it can\n#      confuse clients with arbitrary URL length limitations.\n#\n#      Enabling split-large-forms causes Privoxy to divide big forms\n#      into smaller ones to keep the URL length down. It makes\n#      editing a lot less convenient and you can no longer submit all\n#      changes at once, but at least it works around this browser\n#      bug.\n#\n#      If you don't notice any editing problems, there is no reason\n#      to enable this option, but if one of the submit buttons\n#      appears to be broken, you should give it a try.\n#\n#  Examples:\n#\n#      split-large-forms 1\n#\nsplit-large-forms 0\n#\n#  6.4. keep-alive-timeout\n#  ========================\n#\n#  Specifies:\n#\n#      Number of seconds after which an open connection will no\n#      longer be reused.\n#\n#  Type of value:\n#\n#      Time in seconds.\n#\n#  Default value:\n#\n#      None\n#\n#  Effect if unset:\n#\n#      Connections are not kept alive.\n#\n#  Notes:\n#\n#      This option allows clients to keep the connection to Privoxy\n#      alive. If the server supports it, Privoxy will keep the\n#      connection to the server alive as well. Under certain\n#      circumstances this may result in speed-ups.\n#\n#      By default, Privoxy will close the connection to the server if\n#      the client connection gets closed, or if the specified timeout\n#      has been reached without a new request coming in. This\n#      behaviour can be changed with the connection-sharing option.\n#\n#      This option has no effect if Privoxy has been compiled without\n#      keep-alive support.\n#\n#      Note that a timeout of five seconds as used in the default\n#      configuration file significantly decreases the number of\n#      connections that will be reused. The value is used because\n#      some browsers limit the number of connections they open to a\n#      single host and apply the same limit to proxies. This can\n#      result in a single website \"grabbing\" all the connections the\n#      browser allows, which means connections to other websites\n#      can't be opened until the connections currently in use time\n#      out.\n#\n#      Several users have reported this as a Privoxy bug, so the\n#      default value has been reduced. Consider increasing it to 300\n#      seconds or even more if you think your browser can handle it.\n#      If your browser appears to be hanging, it probably can't.\n#\n#  Examples:\n#\n#      keep-alive-timeout 300\n#\nkeep-alive-timeout 5\n#\n#  6.5. tolerate-pipelining\n#  =========================\n#\n#  Specifies:\n#\n#      Whether or not pipelined requests should be served.\n#\n#  Type of value:\n#\n#      0 or 1.\n#\n#  Default value:\n#\n#      None\n#\n#  Effect if unset:\n#\n#      If Privoxy receives more than one request at once, it\n#      terminates the client connection after serving the first one.\n#\n#  Notes:\n#\n#      Privoxy currently doesn't pipeline outgoing requests, thus\n#      allowing pipelining on the client connection is not guaranteed\n#      to improve the performance.\n#\n#      By default Privoxy tries to discourage clients from pipelining\n#      by discarding aggressively pipelined requests, which forces\n#      the client to resend them through a new connection.\n#\n#      This option lets Privoxy tolerate pipelining. Whether or not\n#      that improves performance mainly depends on the client\n#      configuration.\n#\n#      If you are seeing problems with pages not properly loading,\n#      disabling this option could work around the problem.\n#\n#  Examples:\n#\n#      tolerate-pipelining 1\n#\ntolerate-pipelining 1\n#\n#  6.6. default-server-timeout\n#  ============================\n#\n#  Specifies:\n#\n#      Assumed server-side keep-alive timeout if not specified by the\n#      server.\n#\n#  Type of value:\n#\n#      Time in seconds.\n#\n#  Default value:\n#\n#      None\n#\n#  Effect if unset:\n#\n#      Connections for which the server didn't specify the keep-alive\n#      timeout are not reused.\n#\n#  Notes:\n#\n#      Enabling this option significantly increases the number of\n#      connections that are reused, provided the keep-alive-timeout\n#      option is also enabled.\n#\n#      While it also increases the number of connections problems\n#      when Privoxy tries to reuse a connection that already has been\n#      closed on the server side, or is closed while Privoxy is\n#      trying to reuse it, this should only be a problem if it\n#      happens for the first request sent by the client. If it\n#      happens for requests on reused client connections, Privoxy\n#      will simply close the connection and the client is supposed to\n#      retry the request without bothering the user.\n#\n#      Enabling this option is therefore only recommended if the\n#      connection-sharing option is disabled.\n#\n#      It is an error to specify a value larger than the\n#      keep-alive-timeout value.\n#\n#      This option has no effect if Privoxy has been compiled without\n#      keep-alive support.\n#\n#  Examples:\n#\n#      default-server-timeout 60\n#\n#default-server-timeout 60\n#\n#  6.7. connection-sharing\n#  ========================\n#\n#  Specifies:\n#\n#      Whether or not outgoing connections that have been kept alive\n#      should be shared between different incoming connections.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      None\n#\n#  Effect if unset:\n#\n#      Connections are not shared.\n#\n#  Notes:\n#\n#      This option has no effect if Privoxy has been compiled without\n#      keep-alive support, or if it's disabled.\n#\n#  Notes:\n#\n#      Note that reusing connections doesn't necessary cause\n#      speedups. There are also a few privacy implications you should\n#      be aware of.\n#\n#      If this option is effective, outgoing connections are shared\n#      between clients (if there are more than one) and closing the\n#      browser that initiated the outgoing connection does no longer\n#      affect the connection between Privoxy and the server unless\n#      the client's request hasn't been completed yet.\n#\n#      If the outgoing connection is idle, it will not be closed\n#      until either Privoxy's or the server's timeout is reached.\n#      While it's open, the server knows that the system running\n#      Privoxy is still there.\n#\n#      If there are more than one client (maybe even belonging to\n#      multiple users), they will be able to reuse each others\n#      connections. This is potentially dangerous in case of\n#      authentication schemes like NTLM where only the connection is\n#      authenticated, instead of requiring authentication for each\n#      request.\n#\n#      If there is only a single client, and if said client can keep\n#      connections alive on its own, enabling this option has next to\n#      no effect. If the client doesn't support connection\n#      keep-alive, enabling this option may make sense as it allows\n#      Privoxy to keep outgoing connections alive even if the client\n#      itself doesn't support it.\n#\n#      You should also be aware that enabling this option increases\n#      the likelihood of getting the \"No server or forwarder data\"\n#      error message, especially if you are using a slow connection\n#      to the Internet.\n#\n#      This option should only be used by experienced users who\n#      understand the risks and can weight them against the benefits.\n#\n#  Examples:\n#\n#      connection-sharing 1\n#\n#connection-sharing 1\n#\n#  6.8. socket-timeout\n#  ====================\n#\n#  Specifies:\n#\n#      Number of seconds after which a socket times out if no data is\n#      received.\n#\n#  Type of value:\n#\n#      Time in seconds.\n#\n#  Default value:\n#\n#      None\n#\n#  Effect if unset:\n#\n#      A default value of 300 seconds is used.\n#\n#  Notes:\n#\n#      The default is quite high and you probably want to reduce it.\n#      If you aren't using an occasionally slow proxy like Tor,\n#      reducing it to a few seconds should be fine.\n#\n#  Examples:\n#\n#      socket-timeout 300\n#\nsocket-timeout 300\n#\n#  6.9. max-client-connections\n#  ============================\n#\n#  Specifies:\n#\n#      Maximum number of client connections that will be served.\n#\n#  Type of value:\n#\n#      Positive number.\n#\n#  Default value:\n#\n#      128\n#\n#  Effect if unset:\n#\n#      Connections are served until a resource limit is reached.\n#\n#  Notes:\n#\n#      Privoxy creates one thread (or process) for every incoming\n#      client connection that isn't rejected based on the access\n#      control settings.\n#\n#      If the system is powerful enough, Privoxy can theoretically\n#      deal with several hundred (or thousand) connections at the\n#      same time, but some operating systems enforce resource limits\n#      by shutting down offending processes and their default limits\n#      may be below the ones Privoxy would require under heavy load.\n#\n#      Configuring Privoxy to enforce a connection limit below the\n#      thread or process limit used by the operating system makes\n#      sure this doesn't happen. Simply increasing the operating\n#      system's limit would work too, but if Privoxy isn't the only\n#      application running on the system, you may actually want to\n#      limit the resources used by Privoxy.\n#\n#      If Privoxy is only used by a single trusted user, limiting the\n#      number of client connections is probably unnecessary. If there\n#      are multiple possibly untrusted users you probably still want\n#      to additionally use a packet filter to limit the maximal\n#      number of incoming connections per client. Otherwise a\n#      malicious user could intentionally create a high number of\n#      connections to prevent other users from using Privoxy.\n#\n#      Obviously using this option only makes sense if you choose a\n#      limit below the one enforced by the operating system.\n#\n#      One most POSIX-compliant systems Privoxy can't properly deal\n#      with more than FD_SETSIZE file descriptors at the same time\n#      and has to reject connections if the limit is reached. This\n#      will likely change in a future version, but currently this\n#      limit can't be increased without recompiling Privoxy with a\n#      different FD_SETSIZE limit.\n#\n#  Examples:\n#\n#      max-client-connections 256\n#\n#max-client-connections 256\n#\n#  6.10. handle-as-empty-doc-returns-ok\n#  =====================================\n#\n#  Specifies:\n#\n#      The status code Privoxy returns for pages blocked with\n#      +handle-as-empty-document.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Privoxy returns a status 403(forbidden) for all blocked pages.\n#\n#  Effect if set:\n#\n#      Privoxy returns a status 200(OK) for pages blocked with\n#      +handle-as-empty-document and a status 403(Forbidden) for all\n#      other blocked pages.\n#\n#  Notes:\n#\n#      This directive was added as a work-around for Firefox bug\n#      492459: \"Websites are no longer rendered if SSL requests for\n#      JavaScripts are blocked by a proxy.\"\n#      (https://bugzilla.mozilla.org/show_bug.cgi?id=492459), the bug\n#      has been fixed for quite some time, but this directive is also\n#      useful to make it harder for websites to detect whether or not\n#      resources are being blocked.\n#\n#handle-as-empty-doc-returns-ok 1\n#\n#  6.11. enable-compression\n#  =========================\n#\n#  Specifies:\n#\n#      Whether or not buffered content is compressed before delivery.\n#\n#  Type of value:\n#\n#      0 or 1\n#\n#  Default value:\n#\n#      0\n#\n#  Effect if unset:\n#\n#      Privoxy does not compress buffered content.\n#\n#  Effect if set:\n#\n#      Privoxy compresses buffered content before delivering it to\n#      the client, provided the client supports it.\n#\n#  Notes:\n#\n#      This directive is only supported if Privoxy has been compiled\n#      with FEATURE_COMPRESSION, which should not to be confused with\n#      FEATURE_ZLIB.\n#\n#      Compressing buffered content is mainly useful if Privoxy and\n#      the client are running on different systems. If they are\n#      running on the same system, enabling compression is likely to\n#      slow things down. If you didn't measure otherwise, you should\n#      assume that it does and keep this option disabled.\n#\n#      Privoxy will not compress buffered content below a certain\n#      length.\n#\n#enable-compression 1\n#\n#  6.12. compression-level\n#  ========================\n#\n#  Specifies:\n#\n#      The compression level that is passed to the zlib library when\n#      compressing buffered content.\n#\n#  Type of value:\n#\n#      Positive number ranging from 0 to 9.\n#\n#  Default value:\n#\n#      1\n#\n#  Notes:\n#\n#      Compressing the data more takes usually longer than\n#      compressing it less or not compressing it at all. Which level\n#      is best depends on the connection between Privoxy and the\n#      client. If you can't be bothered to benchmark it for yourself,\n#      you should stick with the default and keep compression\n#      disabled.\n#\n#      If compression is disabled, the compression level is\n#      irrelevant.\n#\n#  Examples:\n#\n#          # Best speed (compared to the other levels)\n#          compression-level 1\n#\n#          # Best compression\n#          compression-level 9\n#\n#          # No compression. Only useful for testing as the added header\n#          # slightly increases the amount of data that has to be sent.\n#          # If your benchmark shows that using this compression level\n#          # is superior to using no compression at all, the benchmark\n#          # is likely to be flawed.\n#          compression-level 0\n#\n#\n#compression-level 1\n#\n#  6.13. client-header-order\n#  ==========================\n#\n#  Specifies:\n#\n#      The order in which client headers are sorted before forwarding\n#      them.\n#\n#  Type of value:\n#\n#      Client header names delimited by spaces or tabs\n#\n#  Default value:\n#\n#      None\n#\n#  Notes:\n#\n#      By default Privoxy leaves the client headers in the order they\n#      were sent by the client. Headers are modified in-place, new\n#      headers are added at the end of the already existing headers.\n#\n#      The header order can be used to fingerprint client requests\n#      independently of other headers like the User-Agent.\n#\n#      This directive allows to sort the headers differently to\n#      better mimic a different User-Agent. Client headers will be\n#      emitted in the order given, headers whose name isn't\n#      explicitly specified are added at the end.\n#\n#      Note that sorting headers in an uncommon way will make\n#      fingerprinting actually easier. Encrypted headers are not\n#      affected by this directive.\n#\n#client-header-order Host \\\n#   Accept \\\n#   Accept-Language \\\n#   Accept-Encoding \\\n#   Proxy-Connection \\\n#   Referer \\\n#   Cookie \\\n#   DNT \\\n#   If-Modified-Since \\\n#   Cache-Control \\\n#   Content-Length \\\n#   Content-Type\n#\n#\n#  7. WINDOWS GUI OPTIONS\n#  =======================\n#\n#  Privoxy has a number of options specific to the Windows GUI\n#  interface:\n#\n#\n#\n#  If \"activity-animation\" is set to 1, the Privoxy icon will animate\n#  when \"Privoxy\" is active. To turn off, set to 0.\n#\n#activity-animation   1\n#\n#\n#\n#  If \"log-messages\" is set to 1, Privoxy copies log messages to the\n#  console window. The log detail depends on the debug directive.\n#\n#log-messages   1\n#\n#\n#\n#  If \"log-buffer-size\" is set to 1, the size of the log buffer, i.e.\n#  the amount of memory used for the log messages displayed in the\n#  console window, will be limited to \"log-max-lines\" (see below).\n#\n#  Warning: Setting this to 0 will result in the buffer to grow\n#  infinitely and eat up all your memory!\n#\n#log-buffer-size 1\n#\n#\n#\n#  log-max-lines is the maximum number of lines held in the log\n#  buffer. See above.\n#\n#log-max-lines 200\n#\n#\n#\n#  If \"log-highlight-messages\" is set to 1, Privoxy will highlight\n#  portions of the log messages with a bold-faced font:\n#\n#log-highlight-messages 1\n#\n#\n#\n#  The font used in the console window:\n#\n#log-font-name Comic Sans MS\n#\n#\n#\n#  Font size used in the console window:\n#\n#log-font-size 8\n#\n#\n#\n#  \"show-on-task-bar\" controls whether or not Privoxy will appear as\n#  a button on the Task bar when minimized:\n#\n#show-on-task-bar 0\n#\n#\n#\n#  If \"close-button-minimizes\" is set to 1, the Windows close button\n#  will minimize Privoxy instead of closing the program (close with\n#  the exit option on the File menu).\n#\n#close-button-minimizes 1\n#\n#\n#\n#  The \"hide-console\" option is specific to the MS-Win console\n#  version of Privoxy. If this option is used, Privoxy will\n#  disconnect from and hide the command console.\n#\n#hide-console\n#\n#\n#\n"
  },
  {
    "path": "PacketProcessor/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "PacketProcessor/PacketProcessor.h",
    "content": "//\n//  PacketProcessor.h\n//  PacketProcessor\n//\n//  Created by LEI on 4/1/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for PacketProcessor.\nFOUNDATION_EXPORT double PacketProcessorVersionNumber;\n\n//! Project version string for PacketProcessor.\nFOUNDATION_EXPORT const unsigned char PacketProcessorVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <PacketProcessor/PublicHeader.h>\n\n#import \"TunnelInterface.h\""
  },
  {
    "path": "PacketProcessor/TunnelInterface.h",
    "content": "//\n//  TunnelInterface.h\n//  Potatso\n//\n//  Created by LEI on 12/23/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@import NetworkExtension;\n\n#define TunnelMTU 1600\n#define kTun2SocksStoppedNotification @\"kTun2SocksStoppedNotification\"\n\n@interface TunnelInterface : NSObject\n+ (TunnelInterface *)sharedInterface;\n+ (NSError *)setupWithPacketTunnelFlow:(NEPacketTunnelFlow *)packetFlow;\n+ (void)processPackets;\n+ (void)writePacket: (NSData *)packet;\n+ (void)startTun2Socks: (NSString *)socksServer;\n+ (void)stop;\n@end\n"
  },
  {
    "path": "PacketProcessor/TunnelInterface.m",
    "content": "//\n//  TunnelInterface.m\n//  Potatso\n//\n//  Created by LEI on 12/23/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#import \"TunnelInterface.h\"\n#import <netinet/ip.h>\n#import \"ipv4/lwip/ip4.h\"\n#import \"lwip/udp.h\"\n#import \"lwip/ip.h\"\n#import <arpa/inet.h>\n#import \"inet_chksum.h\"\n#import \"tun2socks/tun2socks.h\"\n@import CocoaAsyncSocket;\n\n#define TCP_DATA_LOG_ENABLE DEBUG\n#define kTunnelInterfaceErrorDomain @\"info.liruqi.mume.TunnelInterface\"\n\n@interface TunnelInterface () <GCDAsyncUdpSocketDelegate>\n@property (nonatomic) NEPacketTunnelFlow *tunnelPacketFlow;\n@property (nonatomic) NSMutableDictionary *udpSession;\n@property (nonatomic) GCDAsyncUdpSocket *udpSocket;\n@property (nonatomic) int readFd;\n@property (nonatomic) int writeFd;\n@end\n\n@implementation TunnelInterface\n\n+ (TunnelInterface *)sharedInterface {\n    static dispatch_once_t onceToken;\n    static TunnelInterface *interface;\n    dispatch_once(&onceToken, ^{\n        interface = [TunnelInterface new];\n    });\n    return interface;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (self) {\n        _udpSession = [NSMutableDictionary dictionaryWithCapacity:5];\n        _udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_queue_create(\"udp\", NULL)];\n    }\n    return self;\n}\n\n+ (NSError *)setupWithPacketTunnelFlow:(NEPacketTunnelFlow *)packetFlow {\n    if (packetFlow == nil) {\n        return [NSError errorWithDomain:kTunnelInterfaceErrorDomain code:1 userInfo:@{NSLocalizedDescriptionKey: @\"PacketTunnelFlow can't be nil.\"}];\n    }\n    [TunnelInterface sharedInterface].tunnelPacketFlow = packetFlow;\n    \n    NSError *error;\n    GCDAsyncUdpSocket *udpSocket = [TunnelInterface sharedInterface].udpSocket;\n    [udpSocket bindToPort:0 error:&error];\n    if (error) {\n        return [NSError errorWithDomain:kTunnelInterfaceErrorDomain code:1 userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@\"UDP bind fail(%@).\", [error localizedDescription]]}];\n    }\n    [udpSocket beginReceiving:&error];\n    if (error) {\n        return [NSError errorWithDomain:kTunnelInterfaceErrorDomain code:1 userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@\"UDP bind fail(%@).\", [error localizedDescription]]}];\n    }\n    \n    int fds[2];\n    if (pipe(fds) < 0) {\n        return [NSError errorWithDomain:kTunnelInterfaceErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @\"Unable to pipe.\"}];\n    }\n    [TunnelInterface sharedInterface].readFd = fds[0];\n    [TunnelInterface sharedInterface].writeFd = fds[1];\n    return nil;\n}\n\n+ (void)startTun2Socks: (NSString *)socksServer {\n    [NSThread detachNewThreadSelector:@selector(_startTun2Socks:) toTarget:[TunnelInterface sharedInterface] withObject:socksServer];\n}\n\n+ (void)stop {\n    stop_tun2socks();\n}\n\n+ (void)writePacket:(NSData *)packet {\n    dispatch_async(dispatch_get_main_queue(), ^{\n        [[TunnelInterface sharedInterface].tunnelPacketFlow writePackets:@[packet] withProtocols:@[@(AF_INET)]];\n    });\n}\n\n+ (void)processPackets {\n    __weak typeof(self) weakSelf = self;\n    [[TunnelInterface sharedInterface].tunnelPacketFlow readPacketsWithCompletionHandler:^(NSArray<NSData *> * _Nonnull packets, NSArray<NSNumber *> * _Nonnull protocols) {\n        for (NSData *packet in packets) {\n            uint8_t *data = (uint8_t *)packet.bytes;\n            struct ip_hdr *iphdr = (struct ip_hdr *)data;\n            uint8_t proto = IPH_PROTO(iphdr);\n            if (proto == IP_PROTO_UDP) {\n                [[TunnelInterface sharedInterface] handleUDPPacket:packet];\n            }else if (proto == IP_PROTO_TCP) {\n                [[TunnelInterface sharedInterface] handleTCPPPacket:packet];\n            }\n        }\n        [weakSelf processPackets];\n    }];\n\n}\n\n- (void)_startTun2Socks: (NSString *)socksServer {\n    char socks_server[50];\n    BOOL ret = [socksServer getCString:socks_server maxLength:50 encoding:NSASCIIStringEncoding];\n    NSLog(@\"_startTun2Socks socks_server: %s %d\", socks_server, ret);\n#if TCP_DATA_LOG_ENABLE\n    char *log_lvel = \"debug\";\n#else\n    char *log_lvel = \"none\";\n#endif\n    char *argv[] = {\n        \"tun2socks\",\n        \"--netif-ipaddr\",\n        \"192.0.2.4\",\n        \"--netif-netmask\",\n        \"255.255.255.0\",\n        \"--loglevel\",\n        log_lvel,\n        \"--socks-server-addr\",\n        socks_server\n    };\n    tun2socks_main(sizeof(argv)/sizeof(argv[0]), argv, self.readFd, TunnelMTU);\n    close(self.readFd);\n    close(self.writeFd);\n    [[NSNotificationCenter defaultCenter] postNotificationName:kTun2SocksStoppedNotification object:nil];\n}\n\n- (void)handleTCPPPacket: (NSData *)packet {\n    uint8_t message[TunnelMTU+2];\n    memcpy(message + 2, packet.bytes, packet.length);\n    message[0] = packet.length / 256;\n    message[1] = packet.length % 256;\n    write(self.writeFd , message , packet.length + 2);\n}\n\n- (void)handleUDPPacket: (NSData *)packet {\n    uint8_t *data = (uint8_t *)packet.bytes;\n    int data_len = (int)packet.length;\n    struct ip_hdr *iphdr = (struct ip_hdr *)data;\n    uint8_t version = IPH_V(iphdr);\n\n    switch (version) {\n        case 4: {\n            uint16_t iphdr_hlen = IPH_HL(iphdr) * 4;\n            data = data + iphdr_hlen;\n            data_len -= iphdr_hlen;\n            struct udp_hdr *udphdr = (struct udp_hdr *)data;\n            \n            data = data + sizeof(struct udp_hdr *);\n            data_len -= sizeof(struct udp_hdr *);\n            \n            NSData *outData = [[NSData alloc] initWithBytes:data length:data_len];\n            struct in_addr dest = { iphdr->dest.addr };\n            NSString *destHost = [NSString stringWithUTF8String:inet_ntoa(dest)];\n            NSString *key = [self strForHost:iphdr->dest.addr port:udphdr->dest];\n            NSString *value = [self strForHost:iphdr->src.addr port:udphdr->src];;\n            self.udpSession[key] = value;\n            [self.udpSocket sendData:outData toHost:destHost port:ntohs(udphdr->dest) withTimeout:30 tag:0];\n        } break;\n        case 6: {\n            \n        } break;\n    }\n}\n\n- (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext {\n    const struct sockaddr_in *addr = (const struct sockaddr_in *)[address bytes];\n    ip_addr_p_t dest ={ addr->sin_addr.s_addr };\n    in_port_t dest_port = addr->sin_port;\n    NSString *strHostPort = self.udpSession[[self strForHost:dest.addr port:dest_port]];\n    NSArray *hostPortArray = [strHostPort componentsSeparatedByString:@\":\"];\n    int src_ip = [hostPortArray[0] intValue];\n    int src_port = [hostPortArray[1] intValue];\n    uint8_t *bytes = (uint8_t *)[data bytes];\n    int bytes_len = (int)data.length;\n    int udp_length = sizeof(struct udp_hdr) + bytes_len;\n    int total_len = IP_HLEN + udp_length;\n    \n    ip_addr_p_t src = {src_ip};\n    struct ip_hdr *iphdr = generateNewIPHeader(IP_PROTO_UDP, dest, src, total_len);\n    \n    struct udp_hdr udphdr;\n    udphdr.src = dest_port;\n    udphdr.dest = src_port;\n    udphdr.len = hton16(udp_length);\n    udphdr.chksum = hton16(0);\n    \n    uint8_t *udpdata = malloc(sizeof(uint8_t) * udp_length);\n    memcpy(udpdata, &udphdr, sizeof(struct udp_hdr));\n    memcpy(udpdata + sizeof(struct udp_hdr), bytes, bytes_len);\n    \n    ip_addr_t odest = { dest.addr };\n    ip_addr_t osrc = { src_ip };\n    \n    struct pbuf *p_udp = pbuf_alloc(PBUF_TRANSPORT, udp_length, PBUF_RAM);\n    pbuf_take(p_udp, udpdata, udp_length);\n    \n    struct udp_hdr *new_udphdr = (struct udp_hdr *) p_udp->payload;\n    new_udphdr->chksum = inet_chksum_pseudo(p_udp, IP_PROTO_UDP, p_udp->len, &odest, &osrc);\n    \n    uint8_t *ipdata = malloc(sizeof(uint8_t) * total_len);\n    memcpy(ipdata, iphdr, IP_HLEN);\n    memcpy(ipdata + sizeof(struct ip_hdr), p_udp->payload, udp_length);\n    \n    NSData *outData = [[NSData alloc] initWithBytes:ipdata length:total_len];\n    free(ipdata);\n    free(iphdr);\n    free(udpdata);\n    pbuf_free(p_udp);\n    [TunnelInterface writePacket:outData];\n}\n\nstruct ip_hdr *generateNewIPHeader(u8_t proto, ip_addr_p_t src, ip_addr_p_t dest, uint16_t total_len) {\n    struct ip_hdr *iphdr = malloc(sizeof(struct ip_hdr));\n    IPH_VHL_SET(iphdr, 4, IP_HLEN / 4);\n    IPH_TOS_SET(iphdr, 0);\n    IPH_LEN_SET(iphdr, htons(total_len));\n    IPH_ID_SET(iphdr, 0);\n    IPH_OFFSET_SET(iphdr, 0);\n    IPH_TTL_SET(iphdr, 64);\n    IPH_PROTO_SET(iphdr, IP_PROTO_UDP);\n    iphdr->src = src;\n    iphdr->dest = dest;\n    IPH_CHKSUM_SET(iphdr, 0);\n    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN));\n    return iphdr;\n}\n\n- (NSString *)strForHost: (int)host port: (int)port {\n    return [NSString stringWithFormat:@\"%d:%d\",host, port];\n}\n\n\n\n@end\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BLog.h",
    "content": "/**\n * @file BLog.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * A global object for logging.\n */\n\n#ifndef BADVPN_BLOG_H\n#define BADVPN_BLOG_H\n\n#include <stdarg.h>\n#include <string.h>\n\n#include \"misc/debug.h\"\n#include \"misc/memref.h\"\n#include \"base/BMutex.h\"\n\n// auto-generated channel numbers and number of channels\n#include \"generated/blog_channels_defines.h\"\n\n// keep in sync with level names in BLog.c!\n#define BLOG_ERROR 1\n#define BLOG_WARNING 2\n#define BLOG_NOTICE 3\n#define BLOG_INFO 4\n#define BLOG_DEBUG 5\n\n#define BLog(...) BLog_LogToChannel(BLOG_CURRENT_CHANNEL, __VA_ARGS__)\n#define BContextLog(context, ...) BLog_ContextLog((context), BLOG_CURRENT_CHANNEL, __VA_ARGS__)\n#define BLOG_CCCC(context) BLog_MakeChannelContext((context), BLOG_CURRENT_CHANNEL)\n\ntypedef void (*_BLog_log_func) (int channel, int level, const char *msg);\ntypedef void (*_BLog_free_func) (void);\n\nstruct _BLog_channel {\n    const char *name;\n    int loglevel;\n};\n\nstruct _BLog_global {\n    #ifndef NDEBUG\n    int initialized; // initialized statically\n    #endif\n    struct _BLog_channel channels[BLOG_NUM_CHANNELS];\n    _BLog_log_func log_func;\n    _BLog_free_func free_func;\n    BMutex mutex;\n#ifndef NDEBUG\n    int logging;\n#endif\n    char logbuf[2048];\n    int logbuf_pos;\n};\n\nextern struct _BLog_channel blog_channel_list[];\nextern struct _BLog_global blog_global;\n\ntypedef void (*BLog_logfunc) (void *);\n\ntypedef struct {\n    BLog_logfunc logfunc;\n    void *logfunc_user;\n} BLogContext;\n\ntypedef struct {\n    BLogContext context;\n    int channel;\n} BLogChannelContext;\n\nstatic int BLogGlobal_GetChannelByName (const char *channel_name);\n\nstatic void BLog_Init (_BLog_log_func log_func, _BLog_free_func free_func);\nstatic void BLog_Free (void);\nstatic void BLog_SetChannelLoglevel (int channel, int loglevel);\nstatic int BLog_WouldLog (int channel, int level);\nstatic void BLog_Begin (void);\nstatic void BLog_AppendVarArg (const char *fmt, va_list vl);\nstatic void BLog_Append (const char *fmt, ...);\nstatic void BLog_AppendBytes (MemRef data);\nstatic void BLog_Finish (int channel, int level);\nstatic void BLog_LogToChannelVarArg (int channel, int level, const char *fmt, va_list vl);\nstatic void BLog_LogToChannel (int channel, int level, const char *fmt, ...);\nstatic void BLog_LogViaFuncVarArg (BLog_logfunc func, void *arg, int channel, int level, const char *fmt, va_list vl);\nstatic void BLog_LogViaFunc (BLog_logfunc func, void *arg, int channel, int level, const char *fmt, ...);\nstatic BLogContext BLog_RootContext (void);\nstatic BLogContext BLog_MakeContext (BLog_logfunc logfunc, void *logfunc_user);\nstatic void BLog_ContextLogVarArg (BLogContext context, int channel, int level, const char *fmt, va_list vl);\nstatic void BLog_ContextLog (BLogContext context, int channel, int level, const char *fmt, ...);\nstatic BLogChannelContext BLog_MakeChannelContext (BLogContext context, int channel);\nstatic void BLog_ChannelContextLogVarArg (BLogChannelContext ccontext, int level, const char *fmt, va_list vl);\nstatic void BLog_ChannelContextLog (BLogChannelContext ccontext, int level, const char *fmt, ...);\n\nvoid BLog_InitStdout (void);\nvoid BLog_InitStderr (void);\n\nint BLogGlobal_GetChannelByName (const char *channel_name)\n{\n    int i;\n    for (i = 0; i < BLOG_NUM_CHANNELS; i++) {\n        if (!strcmp(blog_channel_list[i].name, channel_name)) {\n            return i;\n        }\n    }\n    \n    return -1;\n}\n\nvoid BLog_Init (_BLog_log_func log_func, _BLog_free_func free_func)\n{\n    ASSERT(!blog_global.initialized)\n    \n    #ifndef NDEBUG\n    blog_global.initialized = 1;\n    #endif\n    \n    // initialize channels\n    memcpy(blog_global.channels, blog_channel_list, BLOG_NUM_CHANNELS * sizeof(struct _BLog_channel));\n    \n    blog_global.log_func = log_func;\n    blog_global.free_func = free_func;\n#ifndef NDEBUG\n    blog_global.logging = 0;\n#endif\n    blog_global.logbuf_pos = 0;\n    blog_global.logbuf[0] = '\\0';\n    \n    ASSERT_FORCE(BMutex_Init(&blog_global.mutex))\n}\n\nvoid BLog_Free (void)\n{\n    ASSERT(blog_global.initialized)\n#ifndef NDEBUG\n    ASSERT(!blog_global.logging)\n#endif\n    \n    BMutex_Free(&blog_global.mutex);\n    \n    #ifndef NDEBUG\n    blog_global.initialized = 0;\n    #endif\n    \n    blog_global.free_func();\n}\n\nvoid BLog_SetChannelLoglevel (int channel, int loglevel)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(loglevel >= 0 && loglevel <= BLOG_DEBUG)\n    \n    blog_global.channels[channel].loglevel = loglevel;\n}\n\nint BLog_WouldLog (int channel, int level)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    return (level <= blog_global.channels[channel].loglevel);\n}\n\nvoid BLog_Begin (void)\n{\n    ASSERT(blog_global.initialized)\n    \n    BMutex_Lock(&blog_global.mutex);\n    \n#ifndef NDEBUG\n    ASSERT(!blog_global.logging)\n    blog_global.logging = 1;\n#endif\n}\n\nvoid BLog_AppendVarArg (const char *fmt, va_list vl)\n{\n    ASSERT(blog_global.initialized)\n#ifndef NDEBUG\n    ASSERT(blog_global.logging)\n#endif\n    ASSERT(blog_global.logbuf_pos >= 0)\n    ASSERT(blog_global.logbuf_pos < sizeof(blog_global.logbuf))\n    \n    int w = vsnprintf(blog_global.logbuf + blog_global.logbuf_pos, sizeof(blog_global.logbuf) - blog_global.logbuf_pos, fmt, vl);\n    \n    if (w >= sizeof(blog_global.logbuf) - blog_global.logbuf_pos) {\n        blog_global.logbuf_pos = sizeof(blog_global.logbuf) - 1;\n    } else {\n        blog_global.logbuf_pos += w;\n    }\n}\n\nvoid BLog_Append (const char *fmt, ...)\n{\n    ASSERT(blog_global.initialized)\n#ifndef NDEBUG\n    ASSERT(blog_global.logging)\n#endif\n    \n    va_list vl;\n    va_start(vl, fmt);\n    BLog_AppendVarArg(fmt, vl);\n    va_end(vl);\n}\n\nvoid BLog_AppendBytes (MemRef data)\n{\n    ASSERT(blog_global.initialized)\n#ifndef NDEBUG\n    ASSERT(blog_global.logging)\n#endif\n    ASSERT(blog_global.logbuf_pos >= 0)\n    ASSERT(blog_global.logbuf_pos < sizeof(blog_global.logbuf))\n    \n    size_t avail = (sizeof(blog_global.logbuf) - 1) - blog_global.logbuf_pos;\n    data.len = (data.len > avail ? avail : data.len);\n    \n    memcpy(blog_global.logbuf + blog_global.logbuf_pos, data.ptr, data.len);\n    blog_global.logbuf_pos += data.len;\n    blog_global.logbuf[blog_global.logbuf_pos] = '\\0';\n}\n\nvoid BLog_Finish (int channel, int level)\n{\n    ASSERT(blog_global.initialized)\n#ifndef NDEBUG\n    ASSERT(blog_global.logging)\n#endif\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    ASSERT(BLog_WouldLog(channel, level))\n    \n    ASSERT(blog_global.logbuf_pos >= 0)\n    ASSERT(blog_global.logbuf_pos < sizeof(blog_global.logbuf))\n    ASSERT(blog_global.logbuf[blog_global.logbuf_pos] == '\\0')\n    \n    blog_global.log_func(channel, level, blog_global.logbuf);\n    \n#ifndef NDEBUG\n    blog_global.logging = 0;\n#endif\n    blog_global.logbuf_pos = 0;\n    blog_global.logbuf[0] = '\\0';\n    \n    BMutex_Unlock(&blog_global.mutex);\n}\n\nvoid BLog_LogToChannelVarArg (int channel, int level, const char *fmt, va_list vl)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    if (!BLog_WouldLog(channel, level)) {\n        return;\n    }\n    \n    BLog_Begin();\n    BLog_AppendVarArg(fmt, vl);\n    BLog_Finish(channel, level);\n}\n\nvoid BLog_LogToChannel (int channel, int level, const char *fmt, ...)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    if (!BLog_WouldLog(channel, level)) {\n        return;\n    }\n    \n    va_list vl;\n    va_start(vl, fmt);\n    \n    BLog_Begin();\n    BLog_AppendVarArg(fmt, vl);\n    BLog_Finish(channel, level);\n    \n    va_end(vl);\n}\n\nvoid BLog_LogViaFuncVarArg (BLog_logfunc func, void *arg, int channel, int level, const char *fmt, va_list vl)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    if (!BLog_WouldLog(channel, level)) {\n        return;\n    }\n    \n    BLog_Begin();\n    func(arg);\n    BLog_AppendVarArg(fmt, vl);\n    BLog_Finish(channel, level);\n}\n\nvoid BLog_LogViaFunc (BLog_logfunc func, void *arg, int channel, int level, const char *fmt, ...)\n{\n    ASSERT(blog_global.initialized)\n    ASSERT(channel >= 0 && channel < BLOG_NUM_CHANNELS)\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    if (!BLog_WouldLog(channel, level)) {\n        return;\n    }\n    \n    va_list vl;\n    va_start(vl, fmt);\n    \n    BLog_Begin();\n    func(arg);\n    BLog_AppendVarArg(fmt, vl);\n    BLog_Finish(channel, level);\n    \n    va_end(vl);\n}\n\nstatic void BLog__root_logfunc (void *unused)\n{\n}\n\nstatic BLogContext BLog_RootContext (void)\n{\n    return BLog_MakeContext(BLog__root_logfunc, NULL);\n}\n\nstatic BLogContext BLog_MakeContext (BLog_logfunc logfunc, void *logfunc_user)\n{\n    ASSERT(logfunc)\n    \n    BLogContext context;\n    context.logfunc = logfunc;\n    context.logfunc_user = logfunc_user;\n    return context;\n}\n\nstatic void BLog_ContextLogVarArg (BLogContext context, int channel, int level, const char *fmt, va_list vl)\n{\n    BLog_LogViaFuncVarArg(context.logfunc, context.logfunc_user, channel, level, fmt, vl);\n}\n\nstatic void BLog_ContextLog (BLogContext context, int channel, int level, const char *fmt, ...)\n{\n    va_list vl;\n    va_start(vl, fmt);\n    BLog_ContextLogVarArg(context, channel, level, fmt, vl);\n    va_end(vl);\n}\n\nstatic BLogChannelContext BLog_MakeChannelContext (BLogContext context, int channel)\n{\n    BLogChannelContext ccontext;\n    ccontext.context = context;\n    ccontext.channel = channel;\n    return ccontext;\n}\n\nstatic void BLog_ChannelContextLogVarArg (BLogChannelContext ccontext, int level, const char *fmt, va_list vl)\n{\n    BLog_ContextLogVarArg(ccontext.context, ccontext.channel, level, fmt, vl);\n}\n\nstatic void BLog_ChannelContextLog (BLogChannelContext ccontext, int level, const char *fmt, ...)\n{\n    va_list vl;\n    va_start(vl, fmt);\n    BLog_ChannelContextLogVarArg(ccontext, level, fmt, vl);\n    va_end(vl);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BLog.m",
    "content": "/**\n * @file BLog.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdio.h>\n#include <stddef.h>\n#include <Foundation/Foundation.h>\n\n#include \"BLog.h\"\n\n#ifndef BADVPN_PLUGIN\n\nstruct _BLog_channel blog_channel_list[] = {\n#include \"generated/blog_channels_list.h\"\n};\n\nstruct _BLog_global blog_global = {\n    #ifndef NDEBUG\n    0\n    #endif\n};\n\n#endif\n\n// keep in sync with level numbers in BLog.h!\nstatic char *level_names[] = { NULL, \"ERROR\", \"WARNING\", \"NOTICE\", \"INFO\", \"DEBUG\" };\n\nstatic void stdout_log (int channel, int level, const char *msg)\n{\n    NSLog(@\"%s(%s): %s\\n\", level_names[level], blog_global.channels[channel].name, msg);\n}\n\nstatic void stderr_log (int channel, int level, const char *msg)\n{\n    NSLog(@\"%s(%s): %s\\n\", level_names[level], blog_global.channels[channel].name, msg);\n}\n\nstatic void stdout_stderr_free (void)\n{\n}\n\nvoid BLog_InitStdout (void)\n{\n    BLog_Init(stdout_log, stdout_stderr_free);\n}\n\nvoid BLog_InitStderr (void)\n{\n    BLog_Init(stderr_log, stdout_stderr_free);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BLog_syslog.c",
    "content": "/**\n * @file BLog_syslog.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <string.h>\n#include <stdio.h>\n#include <syslog.h>\n\n#include \"misc/debug.h\"\n\n#include \"BLog_syslog.h\"\n\nstatic int resolve_facility (char *str, int *out)\n{\n    if (!strcmp(str, \"authpriv\")) {\n        *out = LOG_AUTHPRIV;\n    }\n    else if (!strcmp(str, \"cron\")) {\n        *out = LOG_CRON;\n    }\n    else if (!strcmp(str, \"daemon\")) {\n        *out = LOG_DAEMON;\n    }\n    else if (!strcmp(str, \"ftp\")) {\n        *out = LOG_FTP;\n    }\n    else if (!strcmp(str, \"local0\")) {\n        *out = LOG_LOCAL0;\n    }\n    else if (!strcmp(str, \"local1\")) {\n        *out = LOG_LOCAL1;\n    }\n    else if (!strcmp(str, \"local2\")) {\n        *out = LOG_LOCAL2;\n    }\n    else if (!strcmp(str, \"local3\")) {\n        *out = LOG_LOCAL3;\n    }\n    else if (!strcmp(str, \"local4\")) {\n        *out = LOG_LOCAL4;\n    }\n    else if (!strcmp(str, \"local5\")) {\n        *out = LOG_LOCAL5;\n    }\n    else if (!strcmp(str, \"local6\")) {\n        *out = LOG_LOCAL6;\n    }\n    else if (!strcmp(str, \"local7\")) {\n        *out = LOG_LOCAL7;\n    }\n    else if (!strcmp(str, \"lpr\")) {\n        *out = LOG_LPR;\n    }\n    else if (!strcmp(str, \"mail\")) {\n        *out = LOG_MAIL;\n    }\n    else if (!strcmp(str, \"news\")) {\n        *out = LOG_NEWS;\n    }\n    else if (!strcmp(str, \"syslog\")) {\n        *out = LOG_SYSLOG;\n    }\n    else if (!strcmp(str, \"user\")) {\n        *out = LOG_USER;\n    }\n    else if (!strcmp(str, \"uucp\")) {\n        *out = LOG_UUCP;\n    }\n    else {\n        return 0;\n    }\n    \n    return 1;\n}\n\nstatic int convert_level (int level)\n{\n    ASSERT(level >= BLOG_ERROR && level <= BLOG_DEBUG)\n    \n    switch (level) {\n        case BLOG_ERROR:\n            return LOG_ERR;\n        case BLOG_WARNING:\n            return LOG_WARNING;\n        case BLOG_NOTICE:\n            return LOG_NOTICE;\n        case BLOG_INFO:\n            return LOG_INFO;\n        case BLOG_DEBUG:\n            return LOG_DEBUG;\n        default:\n            ASSERT(0)\n            return 0;\n    }\n}\n\nstatic struct {\n    char ident[200];\n} syslog_global;\n\nstatic void syslog_log (int channel, int level, const char *msg)\n{\n    syslog(convert_level(level), \"%s: %s\", blog_global.channels[channel].name, msg);\n}\n\nstatic void syslog_free (void)\n{\n    closelog();\n}\n\nint BLog_InitSyslog (char *ident, char *facility_str)\n{\n    int facility;\n    if (!resolve_facility(facility_str, &facility)) {\n        return 0;\n    }\n    \n    snprintf(syslog_global.ident, sizeof(syslog_global.ident), \"%s\", ident);\n    \n    openlog(syslog_global.ident, 0, facility);\n    \n    BLog_Init(syslog_log, syslog_free);\n    \n    return 1;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BLog_syslog.h",
    "content": "/**\n * @file BLog_syslog.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * BLog syslog backend.\n */\n\n#ifndef BADVPN_BLOG_SYSLOG_H\n#define BADVPN_BLOG_SYSLOG_H\n\n#include \"misc/debug.h\"\n#include \"base/BLog.h\"\n\nint BLog_InitSyslog (char *ident, char *facility) WARN_UNUSED;\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BMutex.h",
    "content": "/**\n * @file BMutex.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_BMUTEX_H\n#define BADVPN_BMUTEX_H\n\n#if !defined(BADVPN_THREAD_SAFE) || (BADVPN_THREAD_SAFE != 0 && BADVPN_THREAD_SAFE != 1)\n#error BADVPN_THREAD_SAFE is not defined or incorrect\n#endif\n\n#if BADVPN_THREAD_SAFE\n#include <pthread.h>\n#endif\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n\ntypedef struct {\n#if BADVPN_THREAD_SAFE\n    pthread_mutex_t pthread_mutex;\n#endif\n    DebugObject d_obj;\n} BMutex;\n\nstatic int BMutex_Init (BMutex *o) WARN_UNUSED;\nstatic void BMutex_Free (BMutex *o);\nstatic void BMutex_Lock (BMutex *o);\nstatic void BMutex_Unlock (BMutex *o);\n\nstatic int BMutex_Init (BMutex *o)\n{\n#if BADVPN_THREAD_SAFE\n    if (pthread_mutex_init(&o->pthread_mutex, NULL) != 0) {\n        return 0;\n    }\n#endif\n    \n    DebugObject_Init(&o->d_obj);\n    return 1;\n}\n\nstatic void BMutex_Free (BMutex *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n#if BADVPN_THREAD_SAFE\n    int res = pthread_mutex_destroy(&o->pthread_mutex);\n    B_USE(res)\n    ASSERT(res == 0)\n#endif\n}\n\nstatic void BMutex_Lock (BMutex *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n#if BADVPN_THREAD_SAFE\n    int res = pthread_mutex_lock(&o->pthread_mutex);\n    B_USE(res)\n    ASSERT(res == 0)\n#endif\n}\n\nstatic void BMutex_Unlock (BMutex *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n#if BADVPN_THREAD_SAFE\n    int res = pthread_mutex_unlock(&o->pthread_mutex);\n    B_USE(res)\n    ASSERT(res == 0)\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BPending.c",
    "content": "/**\n * @file BPending.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n#include \"misc/offset.h\"\n\n#include \"BPending.h\"\n\n#include \"BPending_list.h\"\n#include \"structure/SLinkedList_impl.h\"\n\nvoid BPendingGroup_Init (BPendingGroup *g)\n{\n    // init jobs list\n    BPending__List_Init(&g->jobs);\n    \n    // init pending counter\n    DebugCounter_Init(&g->pending_ctr);\n    \n    // init debug object\n    DebugObject_Init(&g->d_obj);\n}\n\nvoid BPendingGroup_Free (BPendingGroup *g)\n{\n    DebugCounter_Free(&g->pending_ctr);\n    ASSERT(BPending__List_IsEmpty(&g->jobs))\n    DebugObject_Free(&g->d_obj);\n}\n\nint BPendingGroup_HasJobs (BPendingGroup *g)\n{\n    DebugObject_Access(&g->d_obj);\n    \n    return !BPending__List_IsEmpty(&g->jobs);\n}\n\nvoid BPendingGroup_ExecuteJob (BPendingGroup *g)\n{\n    ASSERT(!BPending__List_IsEmpty(&g->jobs))\n    DebugObject_Access(&g->d_obj);\n    \n    // get a job\n    BSmallPending *p = BPending__List_First(&g->jobs);\n    ASSERT(!BPending__ListIsRemoved(p))\n    ASSERT(p->pending)\n    \n    // remove from jobs list\n    BPending__List_RemoveFirst(&g->jobs);\n    \n    // set not pending\n    BPending__ListMarkRemoved(p);\n#ifndef NDEBUG\n    p->pending = 0;\n#endif\n    \n    // execute job\n    p->handler(p->user);\n    return;\n}\n\nBSmallPending * BPendingGroup_PeekJob (BPendingGroup *g)\n{\n    DebugObject_Access(&g->d_obj);\n    \n    return BPending__List_First(&g->jobs);\n}\n\nvoid BSmallPending_Init (BSmallPending *o, BPendingGroup *g, BSmallPending_handler handler, void *user)\n{\n    // init arguments\n    o->handler = handler;\n    o->user = user;\n    \n    // set not pending\n    BPending__ListMarkRemoved(o);\n#ifndef NDEBUG\n    o->pending = 0;\n#endif\n    \n    // increment pending counter\n    DebugCounter_Increment(&g->pending_ctr);\n    \n    // init debug object\n    DebugObject_Init(&o->d_obj);\n}\n\nvoid BSmallPending_Free (BSmallPending *o, BPendingGroup *g)\n{\n    DebugCounter_Decrement(&g->pending_ctr);\n    DebugObject_Free(&o->d_obj);\n    ASSERT(o->pending == !BPending__ListIsRemoved(o))\n    \n    // remove from jobs list\n    if (!BPending__ListIsRemoved(o)) {\n        BPending__List_Remove(&g->jobs, o);\n    }\n}\n\nvoid BSmallPending_SetHandler (BSmallPending *o, BSmallPending_handler handler, void *user)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // set handler\n    o->handler = handler;\n    o->user = user;\n}\n\nvoid BSmallPending_Set (BSmallPending *o, BPendingGroup *g)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->pending == !BPending__ListIsRemoved(o))\n    \n    // remove from jobs list\n    if (!BPending__ListIsRemoved(o)) {\n        BPending__List_Remove(&g->jobs, o);\n    }\n    \n    // insert to jobs list\n    BPending__List_Prepend(&g->jobs, o);\n    \n    // set pending\n#ifndef NDEBUG\n    o->pending = 1;\n#endif\n}\n\nvoid BSmallPending_Unset (BSmallPending *o, BPendingGroup *g)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->pending == !BPending__ListIsRemoved(o))\n    \n    if (!BPending__ListIsRemoved(o)) {\n        // remove from jobs list\n        BPending__List_Remove(&g->jobs, o);\n        \n        // set not pending\n        BPending__ListMarkRemoved(o);\n#ifndef NDEBUG\n        o->pending = 0;\n#endif\n    }\n}\n\nint BSmallPending_IsSet (BSmallPending *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->pending == !BPending__ListIsRemoved(o))\n    \n    return !BPending__ListIsRemoved(o);\n}\n\nvoid BPending_Init (BPending *o, BPendingGroup *g, BPending_handler handler, void *user)\n{\n    BSmallPending_Init(&o->base, g, handler, user);\n    o->g = g;\n}\n\nvoid BPending_Free (BPending *o)\n{\n    BSmallPending_Free(&o->base, o->g);\n}\n\nvoid BPending_Set (BPending *o)\n{\n    BSmallPending_Set(&o->base, o->g);\n}\n\nvoid BPending_Unset (BPending *o)\n{\n    BSmallPending_Unset(&o->base, o->g);\n}\n\nint BPending_IsSet (BPending *o)\n{\n    return BSmallPending_IsSet(&o->base);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BPending.h",
    "content": "/**\n * @file BPending.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Module for managing a queue of jobs pending execution.\n */\n\n#ifndef BADVPN_BPENDING_H\n#define BADVPN_BPENDING_H\n\n#include <stdint.h>\n\n#include \"misc/debugcounter.h\"\n#include \"structure/SLinkedList.h\"\n#include \"base/DebugObject.h\"\n\nstruct BSmallPending_s;\n\n#include \"BPending_list.h\"\n#include \"structure/SLinkedList_decl.h\"\n\n/**\n * Job execution handler.\n * It is guaranteed that the associated {@link BSmallPending} object was\n * in set state.\n * The {@link BSmallPending} object enters not set state before the handler\n * is called.\n * \n * @param user as in {@link BSmallPending_Init}\n */\ntypedef void (*BSmallPending_handler) (void *user);\n\n/**\n * Job execution handler.\n * It is guaranteed that the associated {@link BPending} object was\n * in set state.\n * The {@link BPending} object enters not set state before the handler\n * is called.\n * \n * @param user as in {@link BPending_Init}\n */\ntypedef void (*BPending_handler) (void *user);\n\n/**\n * Object that contains a list of jobs pending execution.\n */\ntypedef struct {\n    BPending__List jobs;\n    DebugCounter pending_ctr;\n    DebugObject d_obj;\n} BPendingGroup;\n\n/**\n * Object for queuing a job for execution.\n */\ntypedef struct BSmallPending_s {\n    BPending_handler handler;\n    void *user;\n    BPending__ListNode pending_node; // optimization: if not pending, .next is this\n#ifndef NDEBUG\n    uint8_t pending;\n#endif\n    DebugObject d_obj;\n} BSmallPending;\n\n/**\n * Object for queuing a job for execution. This is a convenience wrapper\n * around {@link BSmallPending} with an extra field to remember the\n * {@link BPendingGroup} being used.\n */\ntypedef struct {\n    BSmallPending base;\n    BPendingGroup *g;\n} BPending;\n\n/**\n * Initializes the object.\n * \n * @param g the object\n */\nvoid BPendingGroup_Init (BPendingGroup *g);\n\n/**\n * Frees the object.\n * There must be no {@link BPending} or {@link BSmallPending} objects using\n * this group.\n * \n * @param g the object\n */\nvoid BPendingGroup_Free (BPendingGroup *g);\n\n/**\n * Checks if there is at least one job in the queue.\n * \n * @param g the object\n * @return 1 if there is at least one job, 0 if not\n */\nint BPendingGroup_HasJobs (BPendingGroup *g);\n\n/**\n * Executes the top job on the job list.\n * The job is removed from the list and enters\n * not set state before being executed.\n * There must be at least one job in job list.\n * \n * @param g the object\n */\nvoid BPendingGroup_ExecuteJob (BPendingGroup *g);\n\n/**\n * Returns the top job on the job list, or NULL if there are none.\n * \n * @param g the object\n * @return the top job if there is at least one job, NULL if not\n */\nBSmallPending * BPendingGroup_PeekJob (BPendingGroup *g);\n\n/**\n * Initializes the object.\n * The object is initialized in not set state.\n * \n * @param o the object\n * @param g pending group to use\n * @param handler job execution handler\n * @param user value to pass to handler\n */\nvoid BSmallPending_Init (BSmallPending *o, BPendingGroup *g, BSmallPending_handler handler, void *user);\n\n/**\n * Frees the object.\n * The execution handler will not be called after the object\n * is freed.\n * \n * @param o the object\n * @param g pending group. Must be the same as was used in {@link BSmallPending_Init}.\n */\nvoid BSmallPending_Free (BSmallPending *o, BPendingGroup *g);\n\n/**\n * Changes the job execution handler.\n * \n * @param o the object\n * @param handler job execution handler\n * @param user value to pass to handler\n */\nvoid BSmallPending_SetHandler (BSmallPending *o, BSmallPending_handler handler, void *user);\n\n/**\n * Enables the job, pushing it to the top of the job list.\n * If the object was already in set state, the job is removed from its\n * current position in the list before being pushed.\n * The object enters set state.\n * \n * @param o the object\n * @param g pending group. Must be the same as was used in {@link BSmallPending_Init}.\n */\nvoid BSmallPending_Set (BSmallPending *o, BPendingGroup *g);\n\n/**\n * Disables the job, removing it from the job list.\n * If the object was not in set state, nothing is done.\n * The object enters not set state.\n * \n * @param o the object\n * @param g pending group. Must be the same as was used in {@link BSmallPending_Init}.\n */\nvoid BSmallPending_Unset (BSmallPending *o, BPendingGroup *g);\n\n/**\n * Checks if the job is in set state.\n * \n * @param o the object\n * @return 1 if in set state, 0 if not\n */\nint BSmallPending_IsSet (BSmallPending *o);\n\n/**\n * Initializes the object.\n * The object is initialized in not set state.\n * \n * @param o the object\n * @param g pending group to use\n * @param handler job execution handler\n * @param user value to pass to handler\n */\nvoid BPending_Init (BPending *o, BPendingGroup *g, BPending_handler handler, void *user);\n\n/**\n * Frees the object.\n * The execution handler will not be called after the object\n * is freed.\n * \n * @param o the object\n */\nvoid BPending_Free (BPending *o);\n\n/**\n * Enables the job, pushing it to the top of the job list.\n * If the object was already in set state, the job is removed from its\n * current position in the list before being pushed.\n * The object enters set state.\n * \n * @param o the object\n */\nvoid BPending_Set (BPending *o);\n\n/**\n * Disables the job, removing it from the job list.\n * If the object was not in set state, nothing is done.\n * The object enters not set state.\n * \n * @param o the object\n */\nvoid BPending_Unset (BPending *o);\n\n/**\n * Checks if the job is in set state.\n * \n * @param o the object\n * @return 1 if in set state, 0 if not\n */\nint BPending_IsSet (BPending *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/BPending_list.h",
    "content": "#define SLINKEDLIST_PARAM_NAME BPending__List\n#define SLINKEDLIST_PARAM_FEATURE_LAST 0\n#define SLINKEDLIST_PARAM_TYPE_ENTRY struct BSmallPending_s\n#define SLINKEDLIST_PARAM_MEMBER_NODE pending_node\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/DebugObject.c",
    "content": "/**\n * @file DebugObject.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"DebugObject.h\"\n\n#ifndef BADVPN_PLUGIN\n#ifndef NDEBUG\nDebugCounter debugobject_counter = DEBUGCOUNTER_STATIC;\n#if BADVPN_THREAD_SAFE\npthread_mutex_t debugobject_mutex = PTHREAD_MUTEX_INITIALIZER;\n#endif\n#endif\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/base/DebugObject.h",
    "content": "/**\n * @file DebugObject.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object used for detecting leaks.\n */\n\n#ifndef BADVPN_DEBUGOBJECT_H\n#define BADVPN_DEBUGOBJECT_H\n\n#include <stdint.h>\n\n#if !defined(BADVPN_THREAD_SAFE) || (BADVPN_THREAD_SAFE != 0 && BADVPN_THREAD_SAFE != 1)\n#error BADVPN_THREAD_SAFE is not defined or incorrect\n#endif\n\n#if BADVPN_THREAD_SAFE\n#include <pthread.h>\n#endif\n\n#include \"misc/debug.h\"\n#include \"misc/debugcounter.h\"\n\n#define DEBUGOBJECT_VALID UINT32_C(0x31415926)\n\n/**\n * Object used for detecting leaks.\n */\ntypedef struct {\n    #ifndef NDEBUG\n    uint32_t c;\n    #endif\n} DebugObject;\n\n/**\n * Initializes the object.\n * \n * @param obj the object\n */\nstatic void DebugObject_Init (DebugObject *obj);\n\n/**\n * Frees the object.\n * \n * @param obj the object\n */\nstatic void DebugObject_Free (DebugObject *obj);\n\n/**\n * Does nothing.\n * \n * @param obj the object\n */\nstatic void DebugObject_Access (const DebugObject *obj);\n\n/**\n * Does nothing.\n * There must be no {@link DebugObject}'s initialized.\n */\nstatic void DebugObjectGlobal_Finish (void);\n\n#ifndef NDEBUG\nextern DebugCounter debugobject_counter;\n#if BADVPN_THREAD_SAFE\nextern pthread_mutex_t debugobject_mutex;\n#endif\n#endif\n\nvoid DebugObject_Init (DebugObject *obj)\n{\n    #ifndef NDEBUG\n    \n    obj->c = DEBUGOBJECT_VALID;\n    \n    #if BADVPN_THREAD_SAFE\n    ASSERT_FORCE(pthread_mutex_lock(&debugobject_mutex) == 0)\n    #endif\n    \n    DebugCounter_Increment(&debugobject_counter);\n    \n    #if BADVPN_THREAD_SAFE\n    ASSERT_FORCE(pthread_mutex_unlock(&debugobject_mutex) == 0)\n    #endif\n    \n    #endif\n}\n\nvoid DebugObject_Free (DebugObject *obj)\n{\n    ASSERT(obj->c == DEBUGOBJECT_VALID)\n    \n    #ifndef NDEBUG\n    \n    obj->c = 0;\n    \n    #if BADVPN_THREAD_SAFE\n    ASSERT_FORCE(pthread_mutex_lock(&debugobject_mutex) == 0)\n    #endif\n    \n    DebugCounter_Decrement(&debugobject_counter);\n    \n    #if BADVPN_THREAD_SAFE\n    ASSERT_FORCE(pthread_mutex_unlock(&debugobject_mutex) == 0)\n    #endif\n    \n    #endif\n}\n\nvoid DebugObject_Access (const DebugObject *obj)\n{\n    ASSERT(obj->c == DEBUGOBJECT_VALID)\n}\n\nvoid DebugObjectGlobal_Finish (void)\n{\n    #ifndef NDEBUG\n    DebugCounter_Free(&debugobject_counter);\n    #endif\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/BufferWriter.c",
    "content": "/**\n * @file BufferWriter.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"misc/debug.h\"\n\n#include \"flow/BufferWriter.h\"\n\nstatic void output_handler_recv (BufferWriter *o, uint8_t *data)\n{\n    ASSERT(!o->out_have)\n    \n    // set output packet\n    o->out_have = 1;\n    o->out = data;\n}\n\nvoid BufferWriter_Init (BufferWriter *o, int mtu, BPendingGroup *pg)\n{\n    ASSERT(mtu >= 0)\n    \n    // init output\n    PacketRecvInterface_Init(&o->recv_interface, mtu, (PacketRecvInterface_handler_recv)output_handler_recv, o, pg);\n    \n    // set no output packet\n    o->out_have = 0;\n    \n    DebugObject_Init(&o->d_obj);\n    #ifndef NDEBUG\n    o->d_mtu = mtu;\n    o->d_writing = 0;\n    #endif\n}\n\nvoid BufferWriter_Free (BufferWriter *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free output\n    PacketRecvInterface_Free(&o->recv_interface);\n}\n\nPacketRecvInterface * BufferWriter_GetOutput (BufferWriter *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return &o->recv_interface;\n}\n\nint BufferWriter_StartPacket (BufferWriter *o, uint8_t **buf)\n{\n    ASSERT(!o->d_writing)\n    DebugObject_Access(&o->d_obj);\n    \n    if (!o->out_have) {\n        return 0;\n    }\n    \n    if (buf) {\n        *buf = o->out;\n    }\n    \n    #ifndef NDEBUG\n    o->d_writing = 1;\n    #endif\n    \n    return 1;\n}\n\nvoid BufferWriter_EndPacket (BufferWriter *o, int len)\n{\n    ASSERT(len >= 0)\n    ASSERT(len <= o->d_mtu)\n    ASSERT(o->out_have)\n    ASSERT(o->d_writing)\n    DebugObject_Access(&o->d_obj);\n    \n    // set no output packet\n    o->out_have = 0;\n    \n    // finish packet\n    PacketRecvInterface_Done(&o->recv_interface, len);\n    \n    #ifndef NDEBUG\n    o->d_writing = 0;\n    #endif\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/BufferWriter.h",
    "content": "/**\n * @file BufferWriter.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object for writing packets to a {@link PacketRecvInterface} client\n * in a best-effort fashion.\n */\n\n#ifndef BADVPN_FLOW_BUFFERWRITER_H\n#define BADVPN_FLOW_BUFFERWRITER_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"flow/PacketRecvInterface.h\"\n\n/**\n * Object for writing packets to a {@link PacketRecvInterface} client\n * in a best-effort fashion.\n */\ntypedef struct {\n    PacketRecvInterface recv_interface;\n    int out_have;\n    uint8_t *out;\n    DebugObject d_obj;\n    #ifndef NDEBUG\n    int d_mtu;\n    int d_writing;\n    #endif\n} BufferWriter;\n\n/**\n * Initializes the object.\n * The object is initialized in not writing state.\n *\n * @param o the object\n * @param mtu maximum input packet length\n * @param pg pending group\n */\nvoid BufferWriter_Init (BufferWriter *o, int mtu, BPendingGroup *pg);\n\n/**\n * Frees the object.\n *\n * @param o the object\n */\nvoid BufferWriter_Free (BufferWriter *o);\n\n/**\n * Returns the output interface.\n *\n * @param o the object\n * @return output interface\n */\nPacketRecvInterface * BufferWriter_GetOutput (BufferWriter *o);\n\n/**\n * Attempts to provide a memory location for writing a packet.\n * The object must be in not writing state.\n * On success, the object enters writing state.\n * \n * @param o the object\n * @param buf if not NULL, on success, the memory location will be stored here.\n *            It will have space for MTU bytes.\n * @return 1 on success, 0 on failure\n */\nint BufferWriter_StartPacket (BufferWriter *o, uint8_t **buf) WARN_UNUSED;\n\n/**\n * Submits a packet written to the buffer.\n * The object must be in writing state.\n * Yhe object enters not writing state.\n * \n * @param o the object\n * @param len length of the packet that was written. Must be >=0 and\n *            <=MTU.\n */\nvoid BufferWriter_EndPacket (BufferWriter *o, int len);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketBuffer.c",
    "content": "/**\n * @file PacketBuffer.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n\n#include \"misc/debug.h\"\n#include \"misc/balloc.h\"\n\n#include \"flow/PacketBuffer.h\"\n\nstatic void input_handler_done (PacketBuffer *buf, int in_len);\nstatic void output_handler_done (PacketBuffer *buf);\n\nvoid input_handler_done (PacketBuffer *buf, int in_len)\n{\n    ASSERT(in_len >= 0)\n    ASSERT(in_len <= buf->input_mtu)\n    DebugObject_Access(&buf->d_obj);\n    \n    // remember if buffer is empty\n    int was_empty = (buf->buf.output_avail < 0);\n    \n    // submit packet to buffer\n    ChunkBuffer2_SubmitPacket(&buf->buf, in_len);\n    \n    // if there is space, schedule receive\n    if (buf->buf.input_avail >= buf->input_mtu) {\n        PacketRecvInterface_Receiver_Recv(buf->input, buf->buf.input_dest);\n    }\n    \n    // if buffer was empty, schedule send\n    if (was_empty) {\n        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);\n    }\n}\n\nvoid output_handler_done (PacketBuffer *buf)\n{\n    DebugObject_Access(&buf->d_obj);\n    \n    // remember if buffer is full\n    int was_full = (buf->buf.input_avail < buf->input_mtu);\n    \n    // remove packet from buffer\n    ChunkBuffer2_ConsumePacket(&buf->buf);\n    \n    // if buffer was full and there is space, schedule receive\n    if (was_full && buf->buf.input_avail >= buf->input_mtu) {\n        PacketRecvInterface_Receiver_Recv(buf->input, buf->buf.input_dest);\n    }\n    \n    // if there is more data, schedule send\n    if (buf->buf.output_avail >= 0) {\n        PacketPassInterface_Sender_Send(buf->output, buf->buf.output_dest, buf->buf.output_avail);\n    }\n}\n\nint PacketBuffer_Init (PacketBuffer *buf, PacketRecvInterface *input, PacketPassInterface *output, int num_packets, BPendingGroup *pg)\n{\n    ASSERT(PacketPassInterface_GetMTU(output) >= PacketRecvInterface_GetMTU(input))\n    ASSERT(num_packets > 0)\n    \n    // init arguments\n    buf->input = input;\n    buf->output = output;\n    \n    // init input\n    PacketRecvInterface_Receiver_Init(buf->input, (PacketRecvInterface_handler_done)input_handler_done, buf);\n    \n    // set input MTU\n    buf->input_mtu = PacketRecvInterface_GetMTU(buf->input);\n    \n    // init output\n    PacketPassInterface_Sender_Init(buf->output, (PacketPassInterface_handler_done)output_handler_done, buf);\n    \n    // allocate buffer\n    int num_blocks = ChunkBuffer2_calc_blocks(buf->input_mtu, num_packets);\n    if (num_blocks < 0) {\n        goto fail0;\n    }\n    if (!(buf->buf_data = (struct ChunkBuffer2_block *)BAllocArray(num_blocks, sizeof(buf->buf_data[0])))) {\n        goto fail0;\n    }\n    \n    // init buffer\n    ChunkBuffer2_Init(&buf->buf, buf->buf_data, num_blocks, buf->input_mtu);\n    \n    // schedule receive\n    PacketRecvInterface_Receiver_Recv(buf->input, buf->buf.input_dest);\n    \n    DebugObject_Init(&buf->d_obj);\n    \n    return 1;\n    \nfail0:\n    return 0;\n}\n\nvoid PacketBuffer_Free (PacketBuffer *buf)\n{\n    DebugObject_Free(&buf->d_obj);\n    \n    // free buffer\n    BFree(buf->buf_data);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketBuffer.h",
    "content": "/**\n * @file PacketBuffer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Packet buffer with {@link PacketRecvInterface} input and {@link PacketPassInterface} output.\n */\n\n#ifndef BADVPN_FLOW_PACKETBUFFER_H\n#define BADVPN_FLOW_PACKETBUFFER_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"structure/ChunkBuffer2.h\"\n#include \"flow/PacketRecvInterface.h\"\n#include \"flow/PacketPassInterface.h\"\n\n/**\n * Packet buffer with {@link PacketRecvInterface} input and {@link PacketPassInterface} output.\n */\ntypedef struct {\n    DebugObject d_obj;\n    PacketRecvInterface *input;\n    int input_mtu;\n    PacketPassInterface *output;\n    struct ChunkBuffer2_block *buf_data;\n    ChunkBuffer2 buf;\n} PacketBuffer;\n\n/**\n * Initializes the buffer.\n * Output MTU must be >= input MTU.\n *\n * @param buf the object\n * @param input input interface\n * @param output output interface\n * @param num_packets minimum number of packets the buffer must hold. Must be >0.\n * @param pg pending group\n * @return 1 on success, 0 on failure\n */\nint PacketBuffer_Init (PacketBuffer *buf, PacketRecvInterface *input, PacketPassInterface *output, int num_packets, BPendingGroup *pg) WARN_UNUSED;\n\n/**\n * Frees the buffer.\n *\n * @param buf the object\n */\nvoid PacketBuffer_Free (PacketBuffer *buf);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassConnector.c",
    "content": "/**\n * @file PacketPassConnector.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n\n#include \"flow/PacketPassConnector.h\"\n\nstatic void input_handler_send (PacketPassConnector *o, uint8_t *data, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->input_mtu)\n    ASSERT(o->in_len == -1)\n    DebugObject_Access(&o->d_obj);\n    \n    // remember input packet\n    o->in_len = data_len;\n    o->in = data;\n    \n    if (o->output) {\n        // schedule send\n        PacketPassInterface_Sender_Send(o->output, o->in, o->in_len);\n    }\n}\n\nstatic void output_handler_done (PacketPassConnector *o)\n{\n    ASSERT(o->in_len >= 0)\n    ASSERT(o->output)\n    DebugObject_Access(&o->d_obj);\n    \n    // have no input packet\n    o->in_len = -1;\n    \n    // allow input to send more packets\n    PacketPassInterface_Done(&o->input);\n}\n\nvoid PacketPassConnector_Init (PacketPassConnector *o, int mtu, BPendingGroup *pg)\n{\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    o->input_mtu = mtu;\n    \n    // init input\n    PacketPassInterface_Init(&o->input, o->input_mtu, (PacketPassInterface_handler_send)input_handler_send, o, pg);\n    \n    // have no input packet\n    o->in_len = -1;\n    \n    // have no output\n    o->output = NULL;\n    \n    DebugObject_Init(&o->d_obj);\n}\n\nvoid PacketPassConnector_Free (PacketPassConnector *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free input\n    PacketPassInterface_Free(&o->input);\n}\n\nPacketPassInterface * PacketPassConnector_GetInput (PacketPassConnector *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return &o->input;\n}\n\nvoid PacketPassConnector_ConnectOutput (PacketPassConnector *o, PacketPassInterface *output)\n{\n    ASSERT(!o->output)\n    ASSERT(PacketPassInterface_GetMTU(output) >= o->input_mtu)\n    DebugObject_Access(&o->d_obj);\n    \n    // set output\n    o->output = output;\n    \n    // init output\n    PacketPassInterface_Sender_Init(o->output, (PacketPassInterface_handler_done)output_handler_done, o);\n    \n    // if we have an input packet, schedule send\n    if (o->in_len >= 0) {\n        PacketPassInterface_Sender_Send(o->output, o->in, o->in_len);\n    }\n}\n\nvoid PacketPassConnector_DisconnectOutput (PacketPassConnector *o)\n{\n    ASSERT(o->output)\n    DebugObject_Access(&o->d_obj);\n    \n    // set no output\n    o->output = NULL;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassConnector.h",
    "content": "/**\n * @file PacketPassConnector.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * A {@link PacketPassInterface} layer which allows the output to be\n * connected and disconnected on the fly.\n */\n\n#ifndef BADVPN_FLOW_PACKETPASSCONNECTOR_H\n#define BADVPN_FLOW_PACKETPASSCONNECTOR_H\n\n#include <stdint.h>\n\n#include \"base/DebugObject.h\"\n#include \"flow/PacketPassInterface.h\"\n\n/**\n * A {@link PacketPassInterface} layer which allows the output to be\n * connected and disconnected on the fly.\n */\ntypedef struct {\n    PacketPassInterface input;\n    int input_mtu;\n    int in_len;\n    uint8_t *in;\n    PacketPassInterface *output;\n    DebugObject d_obj;\n} PacketPassConnector;\n\n/**\n * Initializes the object.\n * The object is initialized in not connected state.\n *\n * @param o the object\n * @param mtu maximum input packet size. Must be >=0.\n * @param pg pending group\n */\nvoid PacketPassConnector_Init (PacketPassConnector *o, int mtu, BPendingGroup *pg);\n\n/**\n * Frees the object.\n *\n * @param o the object\n */\nvoid PacketPassConnector_Free (PacketPassConnector *o);\n\n/**\n * Returns the input interface.\n * The MTU of the interface will be as in {@link PacketPassConnector_Init}.\n *\n * @param o the object\n * @return input interface\n */\nPacketPassInterface * PacketPassConnector_GetInput (PacketPassConnector *o);\n\n/**\n * Connects output.\n * The object must be in not connected state.\n * The object enters connected state.\n *\n * @param o the object\n * @param output output to connect. Its MTU must be >= MTU specified in\n *               {@link PacketPassConnector_Init}.\n */\nvoid PacketPassConnector_ConnectOutput (PacketPassConnector *o, PacketPassInterface *output);\n\n/**\n * Disconnects output.\n * The object must be in connected state.\n * The object enters not connected state.\n *\n * @param o the object\n */\nvoid PacketPassConnector_DisconnectOutput (PacketPassConnector *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassFairQueue.c",
    "content": "/**\n * @file PacketPassFairQueue.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n\n#include \"misc/debug.h\"\n#include \"misc/offset.h\"\n#include \"misc/minmax.h\"\n#include \"misc/compare.h\"\n\n#include \"flow/PacketPassFairQueue.h\"\n\nstatic int compare_flows (PacketPassFairQueueFlow *f1, PacketPassFairQueueFlow *f2)\n{\n    int cmp = B_COMPARE(f1->time, f2->time);\n    if (cmp) {\n        return cmp;\n    }\n    \n    return B_COMPARE((uintptr_t)f1, (uintptr_t)f2);\n}\n\n#include \"PacketPassFairQueue_tree.h\"\n#include \"structure/SAvl_impl.h\"\n\nstatic uint64_t get_current_time (PacketPassFairQueue *m)\n{\n    if (m->sending_flow) {\n        return m->sending_flow->time;\n    }\n    \n    uint64_t time = 0; // to remove warning\n    int have = 0;\n    \n    PacketPassFairQueueFlow *first_flow = PacketPassFairQueue__Tree_GetFirst(&m->queued_tree, 0);\n    if (first_flow) {\n        ASSERT(first_flow->is_queued)\n        \n        time = first_flow->time;\n        have = 1;\n    }\n    \n    if (m->previous_flow) {\n        if (!have || m->previous_flow->time < time) {\n            time = m->previous_flow->time;\n            have = 1;\n        }\n    }\n    \n    return (have ? time : 0);\n}\n\nstatic void increment_sent_flow (PacketPassFairQueueFlow *flow, uint64_t amount)\n{\n    PacketPassFairQueue *m = flow->m;\n    \n    ASSERT(amount <= FAIRQUEUE_MAX_TIME)\n    ASSERT(!flow->is_queued)\n    ASSERT(!m->sending_flow)\n    \n    // does time overflow?\n    if (amount > FAIRQUEUE_MAX_TIME - flow->time) {\n        // get time to subtract\n        uint64_t subtract;\n        PacketPassFairQueueFlow *first_flow = PacketPassFairQueue__Tree_GetFirst(&m->queued_tree, 0);\n        if (!first_flow) {\n            subtract = flow->time;\n        } else {\n            ASSERT(first_flow->is_queued)\n            subtract = first_flow->time;\n        }\n        \n        // subtract time from all flows\n        for (LinkedList1Node *list_node = LinkedList1_GetFirst(&m->flows_list); list_node; list_node = LinkedList1Node_Next(list_node)) {\n            PacketPassFairQueueFlow *someflow = UPPER_OBJECT(list_node, PacketPassFairQueueFlow, list_node);\n            \n            // don't subtract more time than there is, except for the just finished flow,\n            // where we allow time to underflow and then overflow to the correct value after adding to it\n            if (subtract > someflow->time && someflow != flow) {\n                ASSERT(!someflow->is_queued)\n                someflow->time = 0;\n            } else {\n                someflow->time -= subtract;\n            }\n        }\n    }\n    \n    // add time to flow\n    flow->time += amount;\n}\n\nstatic void schedule (PacketPassFairQueue *m)\n{\n    ASSERT(!m->sending_flow)\n    ASSERT(!m->previous_flow)\n    ASSERT(!m->freeing)\n    ASSERT(!PacketPassFairQueue__Tree_IsEmpty(&m->queued_tree))\n    \n    // get first queued flow\n    PacketPassFairQueueFlow *qflow = PacketPassFairQueue__Tree_GetFirst(&m->queued_tree, 0);\n    ASSERT(qflow->is_queued)\n    \n    // remove flow from queue\n    PacketPassFairQueue__Tree_Remove(&m->queued_tree, 0, qflow);\n    qflow->is_queued = 0;\n    \n    // schedule send\n    PacketPassInterface_Sender_Send(m->output, qflow->queued.data, qflow->queued.data_len);\n    m->sending_flow = qflow;\n    m->sending_len = qflow->queued.data_len;\n}\n\nstatic void schedule_job_handler (PacketPassFairQueue *m)\n{\n    ASSERT(!m->sending_flow)\n    ASSERT(!m->freeing)\n    DebugObject_Access(&m->d_obj);\n    \n    // remove previous flow\n    m->previous_flow = NULL;\n    \n    if (!PacketPassFairQueue__Tree_IsEmpty(&m->queued_tree)) {\n        schedule(m);\n    }\n}\n\nstatic void input_handler_send (PacketPassFairQueueFlow *flow, uint8_t *data, int data_len)\n{\n    PacketPassFairQueue *m = flow->m;\n    \n    ASSERT(flow != m->sending_flow)\n    ASSERT(!flow->is_queued)\n    ASSERT(!m->freeing)\n    DebugObject_Access(&flow->d_obj);\n    \n    if (flow == m->previous_flow) {\n        // remove from previous flow\n        m->previous_flow = NULL;\n    } else {\n        // raise time\n        flow->time = bmax_uint64(flow->time, get_current_time(m));\n    }\n    \n    // queue flow\n    flow->queued.data = data;\n    flow->queued.data_len = data_len;\n    int res = PacketPassFairQueue__Tree_Insert(&m->queued_tree, 0, flow, NULL);\n    ASSERT_EXECUTE(res)\n    flow->is_queued = 1;\n    \n    if (!m->sending_flow && !BPending_IsSet(&m->schedule_job)) {\n        schedule(m);\n    }\n}\n\nstatic void output_handler_done (PacketPassFairQueue *m)\n{\n    ASSERT(m->sending_flow)\n    ASSERT(!m->previous_flow)\n    ASSERT(!BPending_IsSet(&m->schedule_job))\n    ASSERT(!m->freeing)\n    ASSERT(!m->sending_flow->is_queued)\n    \n    PacketPassFairQueueFlow *flow = m->sending_flow;\n    \n    // sending finished\n    m->sending_flow = NULL;\n    \n    // remember this flow so the schedule job can remove its time if it didn's send\n    m->previous_flow = flow;\n    \n    // update flow time by packet size\n    increment_sent_flow(flow, (uint64_t)m->packet_weight + m->sending_len);\n    \n    // schedule schedule\n    BPending_Set(&m->schedule_job);\n    \n    // finish flow packet\n    PacketPassInterface_Done(&flow->input);\n    \n    // call busy handler if set\n    if (flow->handler_busy) {\n        // handler is one-shot, unset it before calling\n        PacketPassFairQueue_handler_busy handler = flow->handler_busy;\n        flow->handler_busy = NULL;\n        \n        // call handler\n        handler(flow->user);\n        return;\n    }\n}\n\nint PacketPassFairQueue_Init (PacketPassFairQueue *m, PacketPassInterface *output, BPendingGroup *pg, int use_cancel, int packet_weight)\n{\n    ASSERT(packet_weight > 0)\n    ASSERT(use_cancel == 0 || use_cancel == 1)\n    ASSERT(!use_cancel || PacketPassInterface_HasCancel(output))\n    \n    // init arguments\n    m->output = output;\n    m->pg = pg;\n    m->use_cancel = use_cancel;\n    m->packet_weight = packet_weight;\n    \n    // make sure that (output MTU + packet_weight <= FAIRQUEUE_MAX_TIME)\n    if (!(\n        (PacketPassInterface_GetMTU(output) <= FAIRQUEUE_MAX_TIME) &&\n        (packet_weight <= FAIRQUEUE_MAX_TIME - PacketPassInterface_GetMTU(output))\n    )) {\n        goto fail0;\n    }\n    \n    // init output\n    PacketPassInterface_Sender_Init(m->output, (PacketPassInterface_handler_done)output_handler_done, m);\n    \n    // not sending\n    m->sending_flow = NULL;\n    \n    // no previous flow\n    m->previous_flow = NULL;\n    \n    // init queued tree\n    PacketPassFairQueue__Tree_Init(&m->queued_tree);\n    \n    // init flows list\n    LinkedList1_Init(&m->flows_list);\n    \n    // not freeing\n    m->freeing = 0;\n    \n    // init schedule job\n    BPending_Init(&m->schedule_job, m->pg, (BPending_handler)schedule_job_handler, m);\n    \n    DebugObject_Init(&m->d_obj);\n    DebugCounter_Init(&m->d_ctr);\n    return 1;\n    \nfail0:\n    return 0;\n}\n\nvoid PacketPassFairQueue_Free (PacketPassFairQueue *m)\n{\n    ASSERT(LinkedList1_IsEmpty(&m->flows_list))\n    ASSERT(PacketPassFairQueue__Tree_IsEmpty(&m->queued_tree))\n    ASSERT(!m->previous_flow)\n    ASSERT(!m->sending_flow)\n    DebugCounter_Free(&m->d_ctr);\n    DebugObject_Free(&m->d_obj);\n    \n    // free schedule job\n    BPending_Free(&m->schedule_job);\n}\n\nvoid PacketPassFairQueue_PrepareFree (PacketPassFairQueue *m)\n{\n    DebugObject_Access(&m->d_obj);\n    \n    // set freeing\n    m->freeing = 1;\n}\n\nint PacketPassFairQueue_GetMTU (PacketPassFairQueue *m)\n{\n    DebugObject_Access(&m->d_obj);\n    \n    return PacketPassInterface_GetMTU(m->output);\n}\n\nvoid PacketPassFairQueueFlow_Init (PacketPassFairQueueFlow *flow, PacketPassFairQueue *m)\n{\n    ASSERT(!m->freeing)\n    DebugObject_Access(&m->d_obj);\n    \n    // init arguments\n    flow->m = m;\n    \n    // have no canfree handler\n    flow->handler_busy = NULL;\n    \n    // init input\n    PacketPassInterface_Init(&flow->input, PacketPassInterface_GetMTU(flow->m->output), (PacketPassInterface_handler_send)input_handler_send, flow, m->pg);\n    \n    // set time\n    flow->time = 0;\n    \n    // add to flows list\n    LinkedList1_Append(&m->flows_list, &flow->list_node);\n    \n    // is not queued\n    flow->is_queued = 0;\n    \n    DebugObject_Init(&flow->d_obj);\n    DebugCounter_Increment(&m->d_ctr);\n}\n\nvoid PacketPassFairQueueFlow_Free (PacketPassFairQueueFlow *flow)\n{\n    PacketPassFairQueue *m = flow->m;\n    \n    ASSERT(m->freeing || flow != m->sending_flow)\n    DebugCounter_Decrement(&m->d_ctr);\n    DebugObject_Free(&flow->d_obj);\n    \n    // remove from current flow\n    if (flow == m->sending_flow) {\n        m->sending_flow = NULL;\n    }\n    \n    // remove from previous flow\n    if (flow == m->previous_flow) {\n        m->previous_flow = NULL;\n    }\n    \n    // remove from queue\n    if (flow->is_queued) {\n        PacketPassFairQueue__Tree_Remove(&m->queued_tree, 0, flow);\n    }\n    \n    // remove from flows list\n    LinkedList1_Remove(&m->flows_list, &flow->list_node);\n    \n    // free input\n    PacketPassInterface_Free(&flow->input);\n}\n\nvoid PacketPassFairQueueFlow_AssertFree (PacketPassFairQueueFlow *flow)\n{\n    PacketPassFairQueue *m = flow->m;\n    B_USE(m)\n    \n    ASSERT(m->freeing || flow != m->sending_flow)\n    DebugObject_Access(&flow->d_obj);\n}\n\nint PacketPassFairQueueFlow_IsBusy (PacketPassFairQueueFlow *flow)\n{\n    PacketPassFairQueue *m = flow->m;\n    \n    ASSERT(!m->freeing)\n    DebugObject_Access(&flow->d_obj);\n    \n    return (flow == m->sending_flow);\n}\n\nvoid PacketPassFairQueueFlow_RequestCancel (PacketPassFairQueueFlow *flow)\n{\n    PacketPassFairQueue *m = flow->m;\n    \n    ASSERT(flow == m->sending_flow)\n    ASSERT(m->use_cancel)\n    ASSERT(!m->freeing)\n    ASSERT(!BPending_IsSet(&m->schedule_job))\n    DebugObject_Access(&flow->d_obj);\n    \n    // request cancel\n    PacketPassInterface_Sender_RequestCancel(m->output);\n}\n\nvoid PacketPassFairQueueFlow_SetBusyHandler (PacketPassFairQueueFlow *flow, PacketPassFairQueue_handler_busy handler, void *user)\n{\n    PacketPassFairQueue *m = flow->m;\n    B_USE(m)\n    \n    ASSERT(flow == m->sending_flow)\n    ASSERT(!m->freeing)\n    DebugObject_Access(&flow->d_obj);\n    \n    // set handler\n    flow->handler_busy = handler;\n    flow->user = user;\n}\n\nPacketPassInterface * PacketPassFairQueueFlow_GetInput (PacketPassFairQueueFlow *flow)\n{\n    DebugObject_Access(&flow->d_obj);\n    \n    return &flow->input;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassFairQueue.h",
    "content": "/**\n * @file PacketPassFairQueue.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Fair queue using {@link PacketPassInterface}.\n */\n\n#ifndef BADVPN_FLOW_PACKETPASSFAIRQUEUE_H\n#define BADVPN_FLOW_PACKETPASSFAIRQUEUE_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/debugcounter.h\"\n#include \"structure/SAvl.h\"\n#include \"structure/LinkedList1.h\"\n#include \"base/DebugObject.h\"\n#include \"base/BPending.h\"\n#include \"flow/PacketPassInterface.h\"\n\n// reduce this to test time overflow handling\n#define FAIRQUEUE_MAX_TIME UINT64_MAX\n\ntypedef void (*PacketPassFairQueue_handler_busy) (void *user);\n\nstruct PacketPassFairQueueFlow_s;\n\n#include \"PacketPassFairQueue_tree.h\"\n#include \"structure/SAvl_decl.h\"\n\ntypedef struct PacketPassFairQueueFlow_s {\n    struct PacketPassFairQueue_s *m;\n    PacketPassFairQueue_handler_busy handler_busy;\n    void *user;\n    PacketPassInterface input;\n    uint64_t time;\n    LinkedList1Node list_node;\n    int is_queued;\n    struct {\n        PacketPassFairQueue__TreeNode tree_node;\n        uint8_t *data;\n        int data_len;\n    } queued;\n    DebugObject d_obj;\n} PacketPassFairQueueFlow;\n\n/**\n * Fair queue using {@link PacketPassInterface}.\n */\ntypedef struct PacketPassFairQueue_s {\n    PacketPassInterface *output;\n    BPendingGroup *pg;\n    int use_cancel;\n    int packet_weight;\n    struct PacketPassFairQueueFlow_s *sending_flow;\n    int sending_len;\n    struct PacketPassFairQueueFlow_s *previous_flow;\n    PacketPassFairQueue__Tree queued_tree;\n    LinkedList1 flows_list;\n    int freeing;\n    BPending schedule_job;\n    DebugObject d_obj;\n    DebugCounter d_ctr;\n} PacketPassFairQueue;\n\n/**\n * Initializes the queue.\n *\n * @param m the object\n * @param output output interface\n * @param pg pending group\n * @param use_cancel whether cancel functionality is required. Must be 0 or 1.\n *                   If 1, output must support cancel functionality.\n * @param packet_weight additional weight a packet bears. Must be >0, to keep\n *                      the queue fair for zero size packets.\n * @return 1 on success, 0 on failure (because output MTU is too large)\n */\nint PacketPassFairQueue_Init (PacketPassFairQueue *m, PacketPassInterface *output, BPendingGroup *pg, int use_cancel, int packet_weight) WARN_UNUSED;\n\n/**\n * Frees the queue.\n * All flows must have been freed.\n *\n * @param m the object\n */\nvoid PacketPassFairQueue_Free (PacketPassFairQueue *m);\n\n/**\n * Prepares for freeing the entire queue. Must be called to allow freeing\n * the flows in the process of freeing the entire queue.\n * After this function is called, flows and the queue must be freed\n * before any further I/O.\n * May be called multiple times.\n * The queue enters freeing state.\n *\n * @param m the object\n */\nvoid PacketPassFairQueue_PrepareFree (PacketPassFairQueue *m);\n\n/**\n * Returns the MTU of the queue.\n *\n * @param m the object\n */\nint PacketPassFairQueue_GetMTU (PacketPassFairQueue *m);\n\n/**\n * Initializes a queue flow.\n * Queue must not be in freeing state.\n * Must not be called from queue calls to output.\n *\n * @param flow the object\n * @param m queue to attach to\n */\nvoid PacketPassFairQueueFlow_Init (PacketPassFairQueueFlow *flow, PacketPassFairQueue *m);\n\n/**\n * Frees a queue flow.\n * Unless the queue is in freeing state:\n * - The flow must not be busy as indicated by {@link PacketPassFairQueueFlow_IsBusy}.\n * - Must not be called from queue calls to output.\n *\n * @param flow the object\n */\nvoid PacketPassFairQueueFlow_Free (PacketPassFairQueueFlow *flow);\n\n/**\n * Does nothing.\n * It must be possible to free the flow (see {@link PacketPassFairQueueFlow_Free}).\n * \n * @param flow the object\n */\nvoid PacketPassFairQueueFlow_AssertFree (PacketPassFairQueueFlow *flow);\n\n/**\n * Determines if the flow is busy. If the flow is considered busy, it must not\n * be freed. At any given time, at most one flow will be indicated as busy.\n * Queue must not be in freeing state.\n * Must not be called from queue calls to output.\n *\n * @param flow the object\n * @return 0 if not busy, 1 is busy\n */\nint PacketPassFairQueueFlow_IsBusy (PacketPassFairQueueFlow *flow);\n\n/**\n * Requests the output to stop processing the current packet as soon as possible.\n * Cancel functionality must be enabled for the queue.\n * The flow must be busy as indicated by {@link PacketPassFairQueueFlow_IsBusy}.\n * Queue must not be in freeing state.\n * \n * @param flow the object\n */\nvoid PacketPassFairQueueFlow_RequestCancel (PacketPassFairQueueFlow *flow);\n\n/**\n * Sets up a callback to be called when the flow is no longer busy.\n * The handler will be called as soon as the flow is no longer busy, i.e. it is not\n * possible that this flow is no longer busy before the handler is called.\n * The flow must be busy as indicated by {@link PacketPassFairQueueFlow_IsBusy}.\n * Queue must not be in freeing state.\n * Must not be called from queue calls to output.\n *\n * @param flow the object\n * @param handler callback function. NULL to disable.\n * @param user value passed to callback function. Ignored if handler is NULL.\n */\nvoid PacketPassFairQueueFlow_SetBusyHandler (PacketPassFairQueueFlow *flow, PacketPassFairQueue_handler_busy handler, void *user);\n\n/**\n * Returns the input interface of the flow.\n *\n * @param flow the object\n * @return input interface\n */\nPacketPassInterface * PacketPassFairQueueFlow_GetInput (PacketPassFairQueueFlow *flow);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassFairQueue_tree.h",
    "content": "#define SAVL_PARAM_NAME PacketPassFairQueue__Tree\n#define SAVL_PARAM_FEATURE_COUNTS 0\n#define SAVL_PARAM_FEATURE_NOKEYS 1\n#define SAVL_PARAM_TYPE_ENTRY struct PacketPassFairQueueFlow_s\n#define SAVL_PARAM_TYPE_ARG int\n#define SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_flows((entry1), (entry2))\n#define SAVL_PARAM_MEMBER_NODE queued.tree_node\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassInterface.c",
    "content": "/**\n * @file PacketPassInterface.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"flow/PacketPassInterface.h\"\n\nvoid _PacketPassInterface_job_operation (PacketPassInterface *i)\n{\n    ASSERT(i->state == PPI_STATE_OPERATION_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = PPI_STATE_BUSY;\n    \n    // call handler\n    i->handler_operation(i->user_provider, i->job_operation_data, i->job_operation_len);\n    return;\n}\n\nvoid _PacketPassInterface_job_requestcancel (PacketPassInterface *i)\n{\n    ASSERT(i->state == PPI_STATE_BUSY)\n    ASSERT(i->cancel_requested)\n    ASSERT(i->handler_requestcancel)\n    DebugObject_Access(&i->d_obj);\n    \n    // call handler\n    i->handler_requestcancel(i->user_provider);\n    return;\n}\n\nvoid _PacketPassInterface_job_done (PacketPassInterface *i)\n{\n    ASSERT(i->state == PPI_STATE_DONE_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = PPI_STATE_NONE;\n    \n    // call handler\n    i->handler_done(i->user_user);\n    return;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketPassInterface.h",
    "content": "/**\n * @file PacketPassInterface.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Interface allowing a packet sender to pass data packets to a packet receiver.\n */\n\n#ifndef BADVPN_FLOW_PACKETPASSINTERFACE_H\n#define BADVPN_FLOW_PACKETPASSINTERFACE_H\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"base/BPending.h\"\n\n#define PPI_STATE_NONE 1\n#define PPI_STATE_OPERATION_PENDING 2\n#define PPI_STATE_BUSY 3\n#define PPI_STATE_DONE_PENDING 4\n\ntypedef void (*PacketPassInterface_handler_send) (void *user, uint8_t *data, int data_len);\n\ntypedef void (*PacketPassInterface_handler_requestcancel) (void *user);\n\ntypedef void (*PacketPassInterface_handler_done) (void *user);\n\ntypedef struct {\n    // provider data\n    int mtu;\n    PacketPassInterface_handler_send handler_operation;\n    PacketPassInterface_handler_requestcancel handler_requestcancel;\n    void *user_provider;\n    \n    // user data\n    PacketPassInterface_handler_done handler_done;\n    void *user_user;\n    \n    // operation job\n    BPending job_operation;\n    uint8_t *job_operation_data;\n    int job_operation_len;\n    \n    // requestcancel job\n    BPending job_requestcancel;\n    \n    // done job\n    BPending job_done;\n    \n    // state\n    int state;\n    int cancel_requested;\n    \n    DebugObject d_obj;\n} PacketPassInterface;\n\nstatic void PacketPassInterface_Init (PacketPassInterface *i, int mtu, PacketPassInterface_handler_send handler_operation, void *user, BPendingGroup *pg);\n\nstatic void PacketPassInterface_Free (PacketPassInterface *i);\n\nstatic void PacketPassInterface_EnableCancel (PacketPassInterface *i, PacketPassInterface_handler_requestcancel handler_requestcancel);\n\nstatic void PacketPassInterface_Done (PacketPassInterface *i);\n\nstatic int PacketPassInterface_GetMTU (PacketPassInterface *i);\n\nstatic void PacketPassInterface_Sender_Init (PacketPassInterface *i, PacketPassInterface_handler_done handler_done, void *user);\n\nstatic void PacketPassInterface_Sender_Send (PacketPassInterface *i, uint8_t *data, int data_len);\n\nstatic void PacketPassInterface_Sender_RequestCancel (PacketPassInterface *i);\n\nstatic int PacketPassInterface_HasCancel (PacketPassInterface *i);\n\nvoid _PacketPassInterface_job_operation (PacketPassInterface *i);\nvoid _PacketPassInterface_job_requestcancel (PacketPassInterface *i);\nvoid _PacketPassInterface_job_done (PacketPassInterface *i);\n\nvoid PacketPassInterface_Init (PacketPassInterface *i, int mtu, PacketPassInterface_handler_send handler_operation, void *user, BPendingGroup *pg)\n{\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    i->mtu = mtu;\n    i->handler_operation = handler_operation;\n    i->handler_requestcancel = NULL;\n    i->user_provider = user;\n    \n    // set no user\n    i->handler_done = NULL;\n    \n    // init jobs\n    BPending_Init(&i->job_operation, pg, (BPending_handler)_PacketPassInterface_job_operation, i);\n    BPending_Init(&i->job_requestcancel, pg, (BPending_handler)_PacketPassInterface_job_requestcancel, i);\n    BPending_Init(&i->job_done, pg, (BPending_handler)_PacketPassInterface_job_done, i);\n    \n    // set state\n    i->state = PPI_STATE_NONE;\n    \n    DebugObject_Init(&i->d_obj);\n}\n\nvoid PacketPassInterface_Free (PacketPassInterface *i)\n{\n    DebugObject_Free(&i->d_obj);\n    \n    // free jobs\n    BPending_Free(&i->job_done);\n    BPending_Free(&i->job_requestcancel);\n    BPending_Free(&i->job_operation);\n}\n\nvoid PacketPassInterface_EnableCancel (PacketPassInterface *i, PacketPassInterface_handler_requestcancel handler_requestcancel)\n{\n    ASSERT(!i->handler_requestcancel)\n    ASSERT(!i->handler_done)\n    ASSERT(handler_requestcancel)\n    \n    i->handler_requestcancel = handler_requestcancel;\n}\n\nvoid PacketPassInterface_Done (PacketPassInterface *i)\n{\n    ASSERT(i->state == PPI_STATE_BUSY)\n    DebugObject_Access(&i->d_obj);\n    \n    // unset requestcancel job\n    BPending_Unset(&i->job_requestcancel);\n    \n    // schedule done\n    BPending_Set(&i->job_done);\n    \n    // set state\n    i->state = PPI_STATE_DONE_PENDING;\n}\n\nint PacketPassInterface_GetMTU (PacketPassInterface *i)\n{\n    DebugObject_Access(&i->d_obj);\n    \n    return i->mtu;\n}\n\nvoid PacketPassInterface_Sender_Init (PacketPassInterface *i, PacketPassInterface_handler_done handler_done, void *user)\n{\n    ASSERT(handler_done)\n    ASSERT(!i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    i->handler_done = handler_done;\n    i->user_user = user;\n}\n\nvoid PacketPassInterface_Sender_Send (PacketPassInterface *i, uint8_t *data, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= i->mtu)\n    ASSERT(!(data_len > 0) || data)\n    ASSERT(i->state == PPI_STATE_NONE)\n    ASSERT(i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule operation\n    i->job_operation_data = data;\n    i->job_operation_len = data_len;\n    BPending_Set(&i->job_operation);\n    \n    // set state\n    i->state = PPI_STATE_OPERATION_PENDING;\n    i->cancel_requested = 0;\n}\n\nvoid PacketPassInterface_Sender_RequestCancel (PacketPassInterface *i)\n{\n    ASSERT(i->state == PPI_STATE_OPERATION_PENDING || i->state == PPI_STATE_BUSY || i->state == PPI_STATE_DONE_PENDING)\n    ASSERT(i->handler_requestcancel)\n    DebugObject_Access(&i->d_obj);\n    \n    // ignore multiple cancel requests\n    if (i->cancel_requested) {\n        return;\n    }\n    \n    // remember we requested cancel\n    i->cancel_requested = 1;\n    \n    if (i->state == PPI_STATE_OPERATION_PENDING) {\n        // unset operation job\n        BPending_Unset(&i->job_operation);\n        \n        // set done job\n        BPending_Set(&i->job_done);\n        \n        // set state\n        i->state = PPI_STATE_DONE_PENDING;\n    } else if (i->state == PPI_STATE_BUSY) {\n        // set requestcancel job\n        BPending_Set(&i->job_requestcancel);\n    }\n}\n\nint PacketPassInterface_HasCancel (PacketPassInterface *i)\n{\n    DebugObject_Access(&i->d_obj);\n    \n    return !!i->handler_requestcancel;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoDecoder.c",
    "content": "/**\n * @file PacketProtoDecoder.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n#include <string.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/minmax.h\"\n#include \"base/BLog.h\"\n\n#include \"flow/PacketProtoDecoder.h\"\n\n#include \"generated/blog_channel_PacketProtoDecoder.h\"\n\nstatic void process_data (PacketProtoDecoder *enc);\nstatic void input_handler_done (PacketProtoDecoder *enc, int data_len);\nstatic void output_handler_done (PacketProtoDecoder *enc);\n\nvoid process_data (PacketProtoDecoder *enc)\n{\n    int was_error = 0;\n    \n    do {\n        uint8_t *data = enc->buf + enc->buf_start;\n        int left = enc->buf_used;\n        \n        // check if header was received\n        if (left < sizeof(struct packetproto_header)) {\n            break;\n        }\n        struct packetproto_header header;\n        memcpy(&header, data, sizeof(header));\n        data += sizeof(struct packetproto_header);\n        left -= sizeof(struct packetproto_header);\n        int data_len = ltoh16(header.len);\n        \n        // check data length\n        if (data_len > enc->output_mtu) {\n            BLog(BLOG_NOTICE, \"error: packet too large\");\n            was_error = 1;\n            break;\n        }\n        \n        // check if whole packet was received\n        if (left < data_len) {\n            break;\n        }\n        \n        // update buffer\n        enc->buf_start += sizeof(struct packetproto_header) + data_len;\n        enc->buf_used -= sizeof(struct packetproto_header) + data_len;\n        \n        // submit packet\n        PacketPassInterface_Sender_Send(enc->output, data, data_len);\n        return;\n    } while (0);\n    \n    if (was_error) {\n        // reset buffer\n        enc->buf_start = 0;\n        enc->buf_used = 0;\n    } else {\n        // if we reached the end of the buffer, wrap around to allow more data to be received\n        if (enc->buf_start + enc->buf_used == enc->buf_size) {\n            memmove(enc->buf, enc->buf + enc->buf_start, enc->buf_used);\n            enc->buf_start = 0;\n        }\n    }\n    \n    // receive data\n    StreamRecvInterface_Receiver_Recv(enc->input, enc->buf + (enc->buf_start + enc->buf_used), enc->buf_size - (enc->buf_start + enc->buf_used));\n    \n    // if we had error, report it\n    if (was_error) {\n        enc->handler_error(enc->user);\n        return;\n    }\n}\n\nstatic void input_handler_done (PacketProtoDecoder *enc, int data_len)\n{\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= enc->buf_size - (enc->buf_start + enc->buf_used))\n    DebugObject_Access(&enc->d_obj);\n    \n    // update buffer\n    enc->buf_used += data_len;\n    \n    // process data\n    process_data(enc);\n    return;\n}\n\nvoid output_handler_done (PacketProtoDecoder *enc)\n{\n    DebugObject_Access(&enc->d_obj);\n    \n    // process data\n    process_data(enc);\n    return;\n}\n\nint PacketProtoDecoder_Init (PacketProtoDecoder *enc, StreamRecvInterface *input, PacketPassInterface *output, BPendingGroup *pg, void *user, PacketProtoDecoder_handler_error handler_error)\n{\n    // init arguments\n    enc->input = input;\n    enc->output = output;\n    enc->user = user;\n    enc->handler_error = handler_error;\n    \n    // init input\n    StreamRecvInterface_Receiver_Init(enc->input, (StreamRecvInterface_handler_done)input_handler_done, enc);\n    \n    // init output\n    PacketPassInterface_Sender_Init(enc->output, (PacketPassInterface_handler_done)output_handler_done, enc);\n    \n    // set output MTU, limit by maximum payload size\n    enc->output_mtu = bmin_int(PacketPassInterface_GetMTU(enc->output), PACKETPROTO_MAXPAYLOAD);\n    \n    // init buffer state\n    enc->buf_size = PACKETPROTO_ENCLEN(enc->output_mtu);\n    enc->buf_start = 0;\n    enc->buf_used = 0;\n    \n    // allocate buffer\n    if (!(enc->buf = (uint8_t *)malloc(enc->buf_size))) {\n        goto fail0;\n    }\n    \n    // start receiving\n    StreamRecvInterface_Receiver_Recv(enc->input, enc->buf, enc->buf_size);\n    \n    DebugObject_Init(&enc->d_obj);\n    \n    return 1;\n    \nfail0:\n    return 0;\n}\n\nvoid PacketProtoDecoder_Free (PacketProtoDecoder *enc)\n{\n    DebugObject_Free(&enc->d_obj);\n    \n    // free buffer\n    free(enc->buf);\n}\n\nvoid PacketProtoDecoder_Reset (PacketProtoDecoder *enc)\n{\n    DebugObject_Access(&enc->d_obj);\n    \n    enc->buf_start += enc->buf_used;\n    enc->buf_used = 0;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoDecoder.h",
    "content": "/**\n * @file PacketProtoDecoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object which decodes a stream according to PacketProto.\n */\n\n#ifndef BADVPN_FLOW_PACKETPROTODECODER_H\n#define BADVPN_FLOW_PACKETPROTODECODER_H\n\n#include <stdint.h>\n\n#include \"protocol/packetproto.h\"\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"flow/StreamRecvInterface.h\"\n#include \"flow/PacketPassInterface.h\"\n\n/**\n * Handler called when a protocol error occurs.\n * When an error occurs, the decoder is reset to the initial state.\n * \n * @param user as in {@link PacketProtoDecoder_Init}\n */\ntypedef void (*PacketProtoDecoder_handler_error) (void *user);\n\ntypedef struct {\n    StreamRecvInterface *input;\n    PacketPassInterface *output;\n    void *user;\n    PacketProtoDecoder_handler_error handler_error;\n    int output_mtu;\n    int buf_size;\n    int buf_start;\n    int buf_used;\n    uint8_t *buf;\n    DebugObject d_obj;\n} PacketProtoDecoder;\n\n/**\n * Initializes the object.\n *\n * @param enc the object\n * @param input input interface. The decoder will accept packets with payload size up to its MTU\n *              (but the payload can never be more than PACKETPROTO_MAXPAYLOAD).\n * @param output output interface\n * @param pg pending group\n * @param user argument to handlers\n * @param handler_error error handler\n * @return 1 on success, 0 on failure\n */\nint PacketProtoDecoder_Init (PacketProtoDecoder *enc, StreamRecvInterface *input, PacketPassInterface *output, BPendingGroup *pg, void *user, PacketProtoDecoder_handler_error handler_error) WARN_UNUSED;\n\n/**\n * Frees the object.\n *\n * @param enc the object\n */\nvoid PacketProtoDecoder_Free (PacketProtoDecoder *enc);\n\n/**\n * Clears the internal buffer.\n * The next data received from the input will be treated as a new\n * PacketProto stream.\n *\n * @param enc the object\n */\nvoid PacketProtoDecoder_Reset (PacketProtoDecoder *enc);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoEncoder.c",
    "content": "/**\n * @file PacketProtoEncoder.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stddef.h>\n#include <string.h>\n\n#include \"protocol/packetproto.h\"\n#include \"misc/balign.h\"\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n\n#include \"flow/PacketProtoEncoder.h\"\n\nstatic void output_handler_recv (PacketProtoEncoder *enc, uint8_t *data)\n{\n    ASSERT(!enc->output_packet)\n    ASSERT(data)\n    DebugObject_Access(&enc->d_obj);\n    \n    // schedule receive\n    enc->output_packet = data;\n    PacketRecvInterface_Receiver_Recv(enc->input, enc->output_packet + sizeof(struct packetproto_header));\n}\n\nstatic void input_handler_done (PacketProtoEncoder *enc, int in_len)\n{\n    ASSERT(enc->output_packet)\n    DebugObject_Access(&enc->d_obj);\n    \n    // write length\n    struct packetproto_header pp;\n    pp.len = htol16(in_len);\n    memcpy(enc->output_packet, &pp, sizeof(pp));\n    \n    // finish output packet\n    enc->output_packet = NULL;\n    PacketRecvInterface_Done(&enc->output, PACKETPROTO_ENCLEN(in_len));\n}\n\nvoid PacketProtoEncoder_Init (PacketProtoEncoder *enc, PacketRecvInterface *input, BPendingGroup *pg)\n{\n    ASSERT(PacketRecvInterface_GetMTU(input) <= PACKETPROTO_MAXPAYLOAD)\n    \n    // init arguments\n    enc->input = input;\n    \n    // init input\n    PacketRecvInterface_Receiver_Init(enc->input, (PacketRecvInterface_handler_done)input_handler_done, enc);\n    \n    // init output\n    PacketRecvInterface_Init(\n        &enc->output, PACKETPROTO_ENCLEN(PacketRecvInterface_GetMTU(enc->input)),\n        (PacketRecvInterface_handler_recv)output_handler_recv, enc, pg\n    );\n    \n    // set no output packet\n    enc->output_packet = NULL;\n    \n    DebugObject_Init(&enc->d_obj);\n}\n\nvoid PacketProtoEncoder_Free (PacketProtoEncoder *enc)\n{\n    DebugObject_Free(&enc->d_obj);\n\n    // free input\n    PacketRecvInterface_Free(&enc->output);\n}\n\nPacketRecvInterface * PacketProtoEncoder_GetOutput (PacketProtoEncoder *enc)\n{\n    DebugObject_Access(&enc->d_obj);\n    \n    return &enc->output;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoEncoder.h",
    "content": "/**\n * @file PacketProtoEncoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object which encodes packets according to PacketProto.\n */\n\n#ifndef BADVPN_FLOW_PACKETPROTOENCODER_H\n#define BADVPN_FLOW_PACKETPROTOENCODER_H\n\n#include <stdint.h>\n\n#include \"base/DebugObject.h\"\n#include \"flow/PacketRecvInterface.h\"\n\n/**\n * Object which encodes packets according to PacketProto.\n *\n * Input is with {@link PacketRecvInterface}.\n * Output is with {@link PacketRecvInterface}.\n */\ntypedef struct {\n    PacketRecvInterface *input;\n    PacketRecvInterface output;\n    uint8_t *output_packet;\n    DebugObject d_obj;\n} PacketProtoEncoder;\n\n/**\n * Initializes the object.\n *\n * @param enc the object\n * @param input input interface. Its MTU must be <=PACKETPROTO_MAXPAYLOAD.\n * @param pg pending group\n */\nvoid PacketProtoEncoder_Init (PacketProtoEncoder *enc, PacketRecvInterface *input, BPendingGroup *pg);\n\n/**\n * Frees the object.\n *\n * @param enc the object\n */\nvoid PacketProtoEncoder_Free (PacketProtoEncoder *enc);\n\n/**\n * Returns the output interface.\n * The MTU of the output interface is PACKETPROTO_ENCLEN(MTU of input interface).\n *\n * @param enc the object\n * @return output interface\n */\nPacketRecvInterface * PacketProtoEncoder_GetOutput (PacketProtoEncoder *enc);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoFlow.c",
    "content": "/**\n * @file PacketProtoFlow.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"protocol/packetproto.h\"\n#include \"misc/debug.h\"\n\n#include \"flow/PacketProtoFlow.h\"\n\nint PacketProtoFlow_Init (PacketProtoFlow *o, int input_mtu, int num_packets, PacketPassInterface *output, BPendingGroup *pg)\n{\n    ASSERT(input_mtu >= 0)\n    ASSERT(input_mtu <= PACKETPROTO_MAXPAYLOAD)\n    ASSERT(num_packets > 0)\n    ASSERT(PacketPassInterface_GetMTU(output) >= PACKETPROTO_ENCLEN(input_mtu))\n    \n    // init async input\n    BufferWriter_Init(&o->ainput, input_mtu, pg);\n    \n    // init encoder\n    PacketProtoEncoder_Init(&o->encoder, BufferWriter_GetOutput(&o->ainput), pg);\n    \n    // init buffer\n    if (!PacketBuffer_Init(&o->buffer, PacketProtoEncoder_GetOutput(&o->encoder), output, num_packets, pg)) {\n        goto fail0;\n    }\n    \n    DebugObject_Init(&o->d_obj);\n    \n    return 1;\n    \nfail0:\n    PacketProtoEncoder_Free(&o->encoder);\n    BufferWriter_Free(&o->ainput);\n    return 0;\n}\n\nvoid PacketProtoFlow_Free (PacketProtoFlow *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free buffer\n    PacketBuffer_Free(&o->buffer);\n    \n    // free encoder\n    PacketProtoEncoder_Free(&o->encoder);\n    \n    // free async input\n    BufferWriter_Free(&o->ainput);\n}\n\nBufferWriter * PacketProtoFlow_GetInput (PacketProtoFlow *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return &o->ainput;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketProtoFlow.h",
    "content": "/**\n * @file PacketProtoFlow.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Buffer which encodes packets with PacketProto, with {@link BufferWriter}\n * input and {@link PacketPassInterface} output.\n */\n\n#ifndef BADVPN_FLOW_PACKETPROTOFLOW_H\n#define BADVPN_FLOW_PACKETPROTOFLOW_H\n\n#include \"misc/debug.h\"\n\n#include \"base/DebugObject.h\"\n#include \"flow/BufferWriter.h\"\n#include \"flow/PacketProtoEncoder.h\"\n#include \"flow/PacketBuffer.h\"\n\n/**\n * Buffer which encodes packets with PacketProto, with {@link BufferWriter}\n * input and {@link PacketPassInterface} output.\n */\ntypedef struct {\n    BufferWriter ainput;\n    PacketProtoEncoder encoder;\n    PacketBuffer buffer;\n    DebugObject d_obj;\n} PacketProtoFlow;\n\n/**\n * Initializes the object.\n * \n * @param o the object\n * @param input_mtu maximum input packet size. Must be >=0 and <=PACKETPROTO_MAXPAYLOAD.\n * @param num_packets minimum number of packets the buffer should hold. Must be >0.\n * @param output output interface. Its MTU must be >=PACKETPROTO_ENCLEN(input_mtu).\n * @param pg pending group\n * @return 1 on success, 0 on failure\n */\nint PacketProtoFlow_Init (PacketProtoFlow *o, int input_mtu, int num_packets, PacketPassInterface *output, BPendingGroup *pg) WARN_UNUSED;\n\n/**\n * Frees the object.\n * \n * @param o the object\n */\nvoid PacketProtoFlow_Free (PacketProtoFlow *o);\n\n/**\n * Returns the input interface.\n * \n * @param o the object\n * @return input interface\n */\nBufferWriter * PacketProtoFlow_GetInput (PacketProtoFlow *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketRecvInterface.c",
    "content": "/**\n * @file PacketRecvInterface.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"flow/PacketRecvInterface.h\"\n\nvoid _PacketRecvInterface_job_operation (PacketRecvInterface *i)\n{\n    ASSERT(i->state == PRI_STATE_OPERATION_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = PRI_STATE_BUSY;\n    \n    // call handler\n    i->handler_operation(i->user_provider, i->job_operation_data);\n    return;\n}\n\nvoid _PacketRecvInterface_job_done (PacketRecvInterface *i)\n{\n    ASSERT(i->state == PRI_STATE_DONE_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = PRI_STATE_NONE;\n    \n    // call handler\n    i->handler_done(i->user_user, i->job_done_len);\n    return;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketRecvInterface.h",
    "content": "/**\n * @file PacketRecvInterface.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Interface allowing a packet receiver to receive data packets from a packet sender.\n */\n\n#ifndef BADVPN_FLOW_PACKETRECVINTERFACE_H\n#define BADVPN_FLOW_PACKETRECVINTERFACE_H\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"base/BPending.h\"\n\n#define PRI_STATE_NONE 1\n#define PRI_STATE_OPERATION_PENDING 2\n#define PRI_STATE_BUSY 3\n#define PRI_STATE_DONE_PENDING 4\n\ntypedef void (*PacketRecvInterface_handler_recv) (void *user, uint8_t *data);\n\ntypedef void (*PacketRecvInterface_handler_done) (void *user, int data_len);\n\ntypedef struct {\n    // provider data\n    int mtu;\n    PacketRecvInterface_handler_recv handler_operation;\n    void *user_provider;\n\n    // user data\n    PacketRecvInterface_handler_done handler_done;\n    void *user_user;\n    \n    // operation job\n    BPending job_operation;\n    uint8_t *job_operation_data;\n    \n    // done job\n    BPending job_done;\n    int job_done_len;\n    \n    // state\n    int state;\n    \n    DebugObject d_obj;\n} PacketRecvInterface;\n\nstatic void PacketRecvInterface_Init (PacketRecvInterface *i, int mtu, PacketRecvInterface_handler_recv handler_operation, void *user, BPendingGroup *pg);\n\nstatic void PacketRecvInterface_Free (PacketRecvInterface *i);\n\nstatic void PacketRecvInterface_Done (PacketRecvInterface *i, int data_len);\n\nstatic int PacketRecvInterface_GetMTU (PacketRecvInterface *i);\n\nstatic void PacketRecvInterface_Receiver_Init (PacketRecvInterface *i, PacketRecvInterface_handler_done handler_done, void *user);\n\nstatic void PacketRecvInterface_Receiver_Recv (PacketRecvInterface *i, uint8_t *data);\n\nvoid _PacketRecvInterface_job_operation (PacketRecvInterface *i);\nvoid _PacketRecvInterface_job_done (PacketRecvInterface *i);\n\nvoid PacketRecvInterface_Init (PacketRecvInterface *i, int mtu, PacketRecvInterface_handler_recv handler_operation, void *user, BPendingGroup *pg)\n{\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    i->mtu = mtu;\n    i->handler_operation = handler_operation;\n    i->user_provider = user;\n    \n    // set no user\n    i->handler_done = NULL;\n    \n    // init jobs\n    BPending_Init(&i->job_operation, pg, (BPending_handler)_PacketRecvInterface_job_operation, i);\n    BPending_Init(&i->job_done, pg, (BPending_handler)_PacketRecvInterface_job_done, i);\n    \n    // set state\n    i->state = PRI_STATE_NONE;\n    \n    DebugObject_Init(&i->d_obj);\n}\n\nvoid PacketRecvInterface_Free (PacketRecvInterface *i)\n{\n    DebugObject_Free(&i->d_obj);\n    \n    // free jobs\n    BPending_Free(&i->job_done);\n    BPending_Free(&i->job_operation);\n}\n\nvoid PacketRecvInterface_Done (PacketRecvInterface *i, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= i->mtu)\n    ASSERT(i->state == PRI_STATE_BUSY)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule done\n    i->job_done_len = data_len;\n    BPending_Set(&i->job_done);\n    \n    // set state\n    i->state = PRI_STATE_DONE_PENDING;\n}\n\nint PacketRecvInterface_GetMTU (PacketRecvInterface *i)\n{\n    DebugObject_Access(&i->d_obj);\n    \n    return i->mtu;\n}\n\nvoid PacketRecvInterface_Receiver_Init (PacketRecvInterface *i, PacketRecvInterface_handler_done handler_done, void *user)\n{\n    ASSERT(handler_done)\n    ASSERT(!i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    i->handler_done = handler_done;\n    i->user_user = user;\n}\n\nvoid PacketRecvInterface_Receiver_Recv (PacketRecvInterface *i, uint8_t *data)\n{\n    ASSERT(!(i->mtu > 0) || data)\n    ASSERT(i->state == PRI_STATE_NONE)\n    ASSERT(i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule operation\n    i->job_operation_data = data;\n    BPending_Set(&i->job_operation);\n    \n    // set state\n    i->state = PRI_STATE_OPERATION_PENDING;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketStreamSender.c",
    "content": "/**\n * @file PacketStreamSender.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n\n#include \"misc/debug.h\"\n\n#include \"flow/PacketStreamSender.h\"\n\nstatic void send_data (PacketStreamSender *s)\n{\n    ASSERT(s->in_len >= 0)\n    \n    if (s->in_used < s->in_len) {\n        // send more data\n        StreamPassInterface_Sender_Send(s->output, s->in + s->in_used, s->in_len - s->in_used);\n    } else {\n        // finish input packet\n        s->in_len = -1;\n        PacketPassInterface_Done(&s->input);\n    }\n}\n\nstatic void input_handler_send (PacketStreamSender *s, uint8_t *data, int data_len)\n{\n    ASSERT(s->in_len == -1)\n    ASSERT(data_len >= 0)\n    DebugObject_Access(&s->d_obj);\n    \n    // set input packet\n    s->in_len = data_len;\n    s->in = data;\n    s->in_used = 0;\n    \n    // send\n    send_data(s);\n}\n\nstatic void output_handler_done (PacketStreamSender *s, int data_len)\n{\n    ASSERT(s->in_len >= 0)\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= s->in_len - s->in_used)\n    DebugObject_Access(&s->d_obj);\n    \n    // update number of bytes sent\n    s->in_used += data_len;\n    \n    // send\n    send_data(s);\n}\n\nvoid PacketStreamSender_Init (PacketStreamSender *s, StreamPassInterface *output, int mtu, BPendingGroup *pg)\n{\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    s->output = output;\n    \n    // init input\n    PacketPassInterface_Init(&s->input, mtu, (PacketPassInterface_handler_send)input_handler_send, s, pg);\n    \n    // init output\n    StreamPassInterface_Sender_Init(s->output, (StreamPassInterface_handler_done)output_handler_done, s);\n    \n    // have no input packet\n    s->in_len = -1;\n    \n    DebugObject_Init(&s->d_obj);\n}\n\nvoid PacketStreamSender_Free (PacketStreamSender *s)\n{\n    DebugObject_Free(&s->d_obj);\n    \n    // free input\n    PacketPassInterface_Free(&s->input);\n}\n\nPacketPassInterface * PacketStreamSender_GetInput (PacketStreamSender *s)\n{\n    DebugObject_Access(&s->d_obj);\n    \n    return &s->input;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/PacketStreamSender.h",
    "content": "/**\n * @file PacketStreamSender.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object which forwards packets obtained with {@link PacketPassInterface}\n * as a stream with {@link StreamPassInterface} (i.e. it concatenates them).\n */\n\n#ifndef BADVPN_FLOW_PACKETSTREAMSENDER_H\n#define BADVPN_FLOW_PACKETSTREAMSENDER_H\n\n#include <stdint.h>\n\n#include \"base/DebugObject.h\"\n#include \"flow/PacketPassInterface.h\"\n#include \"flow/StreamPassInterface.h\"\n\n/**\n * Object which forwards packets obtained with {@link PacketPassInterface}\n * as a stream with {@link StreamPassInterface} (i.e. it concatenates them).\n */\ntypedef struct {\n    DebugObject d_obj;\n    PacketPassInterface input;\n    StreamPassInterface *output;\n    int in_len;\n    uint8_t *in;\n    int in_used;\n} PacketStreamSender;\n\n/**\n * Initializes the object.\n *\n * @param s the object\n * @param output output interface\n * @param mtu input MTU. Must be >=0.\n * @param pg pending group\n */\nvoid PacketStreamSender_Init (PacketStreamSender *s, StreamPassInterface *output, int mtu, BPendingGroup *pg);\n\n/**\n * Frees the object.\n *\n * @param s the object\n */\nvoid PacketStreamSender_Free (PacketStreamSender *s);\n\n/**\n * Returns the input interface.\n * Its MTU will be as in {@link PacketStreamSender_Init}.\n *\n * @param s the object\n * @return input interface\n */\nPacketPassInterface * PacketStreamSender_GetInput (PacketStreamSender *s);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/SinglePacketBuffer.c",
    "content": "/**\n * @file SinglePacketBuffer.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n\n#include \"misc/debug.h\"\n#include \"misc/balloc.h\"\n\n#include \"flow/SinglePacketBuffer.h\"\n\nstatic void input_handler_done (SinglePacketBuffer *o, int in_len)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    PacketPassInterface_Sender_Send(o->output, o->buf, in_len);\n}\n\nstatic void output_handler_done (SinglePacketBuffer *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    PacketRecvInterface_Receiver_Recv(o->input, o->buf);\n}\n\nint SinglePacketBuffer_Init (SinglePacketBuffer *o, PacketRecvInterface *input, PacketPassInterface *output, BPendingGroup *pg) \n{\n    ASSERT(PacketPassInterface_GetMTU(output) >= PacketRecvInterface_GetMTU(input))\n    \n    // init arguments\n    o->input = input;\n    o->output = output;\n    \n    // init input\n    PacketRecvInterface_Receiver_Init(o->input, (PacketRecvInterface_handler_done)input_handler_done, o);\n    \n    // init output\n    PacketPassInterface_Sender_Init(o->output, (PacketPassInterface_handler_done)output_handler_done, o);\n    \n    // init buffer\n    if (!(o->buf = (uint8_t *)BAlloc(PacketRecvInterface_GetMTU(o->input)))) {\n        goto fail1;\n    }\n    \n    // schedule receive\n    PacketRecvInterface_Receiver_Recv(o->input, o->buf);\n    \n    DebugObject_Init(&o->d_obj);\n    \n    return 1;\n    \nfail1:\n    return 0;\n}\n\nvoid SinglePacketBuffer_Free (SinglePacketBuffer *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free buffer\n    BFree(o->buf);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/SinglePacketBuffer.h",
    "content": "/**\n * @file SinglePacketBuffer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Packet buffer with {@link PacketRecvInterface} input and {@link PacketPassInterface} output\n * than can store only a single packet.\n */\n\n#ifndef BADVPN_FLOW_SINGLEPACKETBUFFER_H\n#define BADVPN_FLOW_SINGLEPACKETBUFFER_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"flow/PacketRecvInterface.h\"\n#include \"flow/PacketPassInterface.h\"\n\n/**\n * Packet buffer with {@link PacketRecvInterface} input and {@link PacketPassInterface} output\n * than can store only a single packet.\n */\ntypedef struct {\n    DebugObject d_obj;\n    PacketRecvInterface *input;\n    PacketPassInterface *output;\n    uint8_t *buf;\n} SinglePacketBuffer;\n\n/**\n * Initializes the object.\n * Output MTU must be >= input MTU.\n *\n * @param o the object\n * @param input input interface\n * @param output output interface\n * @param pg pending group\n * @return 1 on success, 0 on failure\n */\nint SinglePacketBuffer_Init (SinglePacketBuffer *o, PacketRecvInterface *input, PacketPassInterface *output, BPendingGroup *pg) WARN_UNUSED;\n\n/**\n * Frees the object\n *\n * @param o the object\n */\nvoid SinglePacketBuffer_Free (SinglePacketBuffer *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/StreamPassInterface.c",
    "content": "/**\n * @file StreamPassInterface.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"flow/StreamPassInterface.h\"\n\nvoid _StreamPassInterface_job_operation (StreamPassInterface *i)\n{\n    ASSERT(i->state == SPI_STATE_OPERATION_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = SPI_STATE_BUSY;\n    \n    // call handler\n    i->handler_operation(i->user_provider, i->job_operation_data, i->job_operation_len);\n    return;\n}\n\nvoid _StreamPassInterface_job_done (StreamPassInterface *i)\n{\n    ASSERT(i->state == SPI_STATE_DONE_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = SPI_STATE_NONE;\n    \n    // call handler\n    i->handler_done(i->user_user, i->job_done_len);\n    return;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/StreamPassInterface.h",
    "content": "/**\n * @file StreamPassInterface.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Interface allowing a stream sender to pass stream data to a stream receiver.\n * \n * Note that this interface behaves exactly the same and has the same code as\n * {@link StreamRecvInterface} if names and its external semantics are disregarded.\n * If you modify this file, you should probably modify {@link StreamRecvInterface}\n * too.\n */\n\n#ifndef BADVPN_FLOW_STREAMPASSINTERFACE_H\n#define BADVPN_FLOW_STREAMPASSINTERFACE_H\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"base/BPending.h\"\n\n#define SPI_STATE_NONE 1\n#define SPI_STATE_OPERATION_PENDING 2\n#define SPI_STATE_BUSY 3\n#define SPI_STATE_DONE_PENDING 4\n\ntypedef void (*StreamPassInterface_handler_send) (void *user, uint8_t *data, int data_len);\n\ntypedef void (*StreamPassInterface_handler_done) (void *user, int data_len);\n\ntypedef struct {\n    // provider data\n    StreamPassInterface_handler_send handler_operation;\n    void *user_provider;\n    \n    // user data\n    StreamPassInterface_handler_done handler_done;\n    void *user_user;\n    \n    // operation job\n    BPending job_operation;\n    uint8_t *job_operation_data;\n    int job_operation_len;\n    \n    // done job\n    BPending job_done;\n    int job_done_len;\n    \n    // state\n    int state;\n    \n    DebugObject d_obj;\n} StreamPassInterface;\n\nstatic void StreamPassInterface_Init (StreamPassInterface *i, StreamPassInterface_handler_send handler_operation, void *user, BPendingGroup *pg);\n\nstatic void StreamPassInterface_Free (StreamPassInterface *i);\n\nstatic void StreamPassInterface_Done (StreamPassInterface *i, int data_len);\n\nstatic void StreamPassInterface_Sender_Init (StreamPassInterface *i, StreamPassInterface_handler_done handler_done, void *user);\n\nstatic void StreamPassInterface_Sender_Send (StreamPassInterface *i, uint8_t *data, int data_len);\n\nvoid _StreamPassInterface_job_operation (StreamPassInterface *i);\nvoid _StreamPassInterface_job_done (StreamPassInterface *i);\n\nvoid StreamPassInterface_Init (StreamPassInterface *i, StreamPassInterface_handler_send handler_operation, void *user, BPendingGroup *pg)\n{\n    // init arguments\n    i->handler_operation = handler_operation;\n    i->user_provider = user;\n    \n    // set no user\n    i->handler_done = NULL;\n    \n    // init jobs\n    BPending_Init(&i->job_operation, pg, (BPending_handler)_StreamPassInterface_job_operation, i);\n    BPending_Init(&i->job_done, pg, (BPending_handler)_StreamPassInterface_job_done, i);\n    \n    // set state\n    i->state = SPI_STATE_NONE;\n    \n    DebugObject_Init(&i->d_obj);\n}\n\nvoid StreamPassInterface_Free (StreamPassInterface *i)\n{\n    DebugObject_Free(&i->d_obj);\n    \n    // free jobs\n    BPending_Free(&i->job_done);\n    BPending_Free(&i->job_operation);\n}\n\nvoid StreamPassInterface_Done (StreamPassInterface *i, int data_len)\n{\n    ASSERT(i->state == SPI_STATE_BUSY)\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= i->job_operation_len)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule done\n    i->job_done_len = data_len;\n    BPending_Set(&i->job_done);\n    \n    // set state\n    i->state = SPI_STATE_DONE_PENDING;\n}\n\nvoid StreamPassInterface_Sender_Init (StreamPassInterface *i, StreamPassInterface_handler_done handler_done, void *user)\n{\n    ASSERT(handler_done)\n    ASSERT(!i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    i->handler_done = handler_done;\n    i->user_user = user;\n}\n\nvoid StreamPassInterface_Sender_Send (StreamPassInterface *i, uint8_t *data, int data_len)\n{\n    ASSERT(data_len > 0)\n    ASSERT(data)\n    ASSERT(i->state == SPI_STATE_NONE)\n    ASSERT(i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule operation\n    i->job_operation_data = data;\n    i->job_operation_len = data_len;\n    BPending_Set(&i->job_operation);\n    \n    // set state\n    i->state = SPI_STATE_OPERATION_PENDING;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/StreamRecvInterface.c",
    "content": "/**\n * @file StreamRecvInterface.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"flow/StreamRecvInterface.h\"\n\nvoid _StreamRecvInterface_job_operation (StreamRecvInterface *i)\n{\n    ASSERT(i->state == SRI_STATE_OPERATION_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = SRI_STATE_BUSY;\n    \n    // call handler\n    i->handler_operation(i->user_provider, i->job_operation_data, i->job_operation_len);\n    return;\n}\n\nvoid _StreamRecvInterface_job_done (StreamRecvInterface *i)\n{\n    ASSERT(i->state == SRI_STATE_DONE_PENDING)\n    DebugObject_Access(&i->d_obj);\n    \n    // set state\n    i->state = SRI_STATE_NONE;\n    \n    // call handler\n    i->handler_done(i->user_user, i->job_done_len);\n    return;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flow/StreamRecvInterface.h",
    "content": "/**\n * @file StreamRecvInterface.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Interface allowing a stream receiver to receive stream data from a stream sender.\n * \n * Note that this interface behaves exactly the same and has the same code as\n * {@link StreamPassInterface} if names and its external semantics are disregarded.\n * If you modify this file, you should probably modify {@link StreamPassInterface}\n * too.\n */\n\n#ifndef BADVPN_FLOW_STREAMRECVINTERFACE_H\n#define BADVPN_FLOW_STREAMRECVINTERFACE_H\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"base/BPending.h\"\n\n#define SRI_STATE_NONE 1\n#define SRI_STATE_OPERATION_PENDING 2\n#define SRI_STATE_BUSY 3\n#define SRI_STATE_DONE_PENDING 4\n\ntypedef void (*StreamRecvInterface_handler_recv) (void *user, uint8_t *data, int data_len);\n\ntypedef void (*StreamRecvInterface_handler_done) (void *user, int data_len);\n\ntypedef struct {\n    // provider data\n    StreamRecvInterface_handler_recv handler_operation;\n    void *user_provider;\n    \n    // user data\n    StreamRecvInterface_handler_done handler_done;\n    void *user_user;\n    \n    // operation job\n    BPending job_operation;\n    uint8_t *job_operation_data;\n    int job_operation_len;\n    \n    // done job\n    BPending job_done;\n    int job_done_len;\n    \n    // state\n    int state;\n    \n    DebugObject d_obj;\n} StreamRecvInterface;\n\nstatic void StreamRecvInterface_Init (StreamRecvInterface *i, StreamRecvInterface_handler_recv handler_operation, void *user, BPendingGroup *pg);\n\nstatic void StreamRecvInterface_Free (StreamRecvInterface *i);\n\nstatic void StreamRecvInterface_Done (StreamRecvInterface *i, int data_len);\n\nstatic void StreamRecvInterface_Receiver_Init (StreamRecvInterface *i, StreamRecvInterface_handler_done handler_done, void *user);\n\nstatic void StreamRecvInterface_Receiver_Recv (StreamRecvInterface *i, uint8_t *data, int data_len);\n\nvoid _StreamRecvInterface_job_operation (StreamRecvInterface *i);\nvoid _StreamRecvInterface_job_done (StreamRecvInterface *i);\n\nvoid StreamRecvInterface_Init (StreamRecvInterface *i, StreamRecvInterface_handler_recv handler_operation, void *user, BPendingGroup *pg)\n{\n    // init arguments\n    i->handler_operation = handler_operation;\n    i->user_provider = user;\n    \n    // set no user\n    i->handler_done = NULL;\n    \n    // init jobs\n    BPending_Init(&i->job_operation, pg, (BPending_handler)_StreamRecvInterface_job_operation, i);\n    BPending_Init(&i->job_done, pg, (BPending_handler)_StreamRecvInterface_job_done, i);\n    \n    // set state\n    i->state = SRI_STATE_NONE;\n    \n    DebugObject_Init(&i->d_obj);\n}\n\nvoid StreamRecvInterface_Free (StreamRecvInterface *i)\n{\n    DebugObject_Free(&i->d_obj);\n    \n    // free jobs\n    BPending_Free(&i->job_done);\n    BPending_Free(&i->job_operation);\n}\n\nvoid StreamRecvInterface_Done (StreamRecvInterface *i, int data_len)\n{\n    ASSERT(i->state == SRI_STATE_BUSY)\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= i->job_operation_len)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule done\n    i->job_done_len = data_len;\n    BPending_Set(&i->job_done);\n    \n    // set state\n    i->state = SRI_STATE_DONE_PENDING;\n}\n\nvoid StreamRecvInterface_Receiver_Init (StreamRecvInterface *i, StreamRecvInterface_handler_done handler_done, void *user)\n{\n    ASSERT(handler_done)\n    ASSERT(!i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    i->handler_done = handler_done;\n    i->user_user = user;\n}\n\nvoid StreamRecvInterface_Receiver_Recv (StreamRecvInterface *i, uint8_t *data, int data_len)\n{\n    ASSERT(data_len > 0)\n    ASSERT(data)\n    ASSERT(i->state == SRI_STATE_NONE)\n    ASSERT(i->handler_done)\n    DebugObject_Access(&i->d_obj);\n    \n    // schedule operation\n    i->job_operation_data = data;\n    i->job_operation_len = data_len;\n    BPending_Set(&i->job_operation);\n    \n    // set state\n    i->state = SRI_STATE_OPERATION_PENDING;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flowextra/PacketPassInactivityMonitor.c",
    "content": "/**\n * @file PacketPassInactivityMonitor.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"PacketPassInactivityMonitor.h\"\n\nstatic void input_handler_send (PacketPassInactivityMonitor *o, uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // schedule send\n    PacketPassInterface_Sender_Send(o->output, data, data_len);\n    \n    // stop timer\n    BReactor_RemoveTimer(o->reactor, &o->timer);\n}\n\nstatic void input_handler_requestcancel (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // request cancel\n    PacketPassInterface_Sender_RequestCancel(o->output);\n}\n\nstatic void output_handler_done (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // output no longer busy, restart timer\n    BReactor_SetTimer(o->reactor, &o->timer);\n    \n    // call done\n    PacketPassInterface_Done(&o->input);\n}\n\nstatic void timer_handler (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // restart timer\n    BReactor_SetTimer(o->reactor, &o->timer);\n    \n    // call handler\n    if (o->handler) {\n        o->handler(o->user);\n        return;\n    }\n}\n\nvoid PacketPassInactivityMonitor_Init (PacketPassInactivityMonitor *o, PacketPassInterface *output, BReactor *reactor, btime_t interval, PacketPassInactivityMonitor_handler handler, void *user)\n{\n    // init arguments\n    o->output = output;\n    o->reactor = reactor;\n    o->handler = handler;\n    o->user = user;\n    \n    // init input\n    PacketPassInterface_Init(&o->input, PacketPassInterface_GetMTU(o->output), (PacketPassInterface_handler_send)input_handler_send, o, BReactor_PendingGroup(o->reactor));\n    if (PacketPassInterface_HasCancel(o->output)) {\n        PacketPassInterface_EnableCancel(&o->input, (PacketPassInterface_handler_requestcancel)input_handler_requestcancel);\n    }\n    \n    // init output\n    PacketPassInterface_Sender_Init(o->output, (PacketPassInterface_handler_done)output_handler_done, o);\n    \n    // init timer\n    BTimer_Init(&o->timer, interval, (BTimer_handler)timer_handler, o);\n    BReactor_SetTimer(o->reactor, &o->timer);\n    \n    DebugObject_Init(&o->d_obj);\n}\n\nvoid PacketPassInactivityMonitor_Free (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Free(&o->d_obj);\n\n    // free timer\n    BReactor_RemoveTimer(o->reactor, &o->timer);\n    \n    // free input\n    PacketPassInterface_Free(&o->input);\n}\n\nPacketPassInterface * PacketPassInactivityMonitor_GetInput (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return &o->input;\n}\n\nvoid PacketPassInactivityMonitor_SetHandler (PacketPassInactivityMonitor *o, PacketPassInactivityMonitor_handler handler, void *user)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    o->handler = handler;\n    o->user = user;\n}\n\nvoid PacketPassInactivityMonitor_Force (PacketPassInactivityMonitor *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    BReactor_SetTimerAfter(o->reactor, &o->timer, 0);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/flowextra/PacketPassInactivityMonitor.h",
    "content": "/**\n * @file PacketPassInactivityMonitor.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * A {@link PacketPassInterface} layer for detecting inactivity.\n */\n\n#ifndef BADVPN_PACKETPASSINACTIVITYMONITOR_H\n#define BADVPN_PACKETPASSINACTIVITYMONITOR_H\n\n#include \"base/DebugObject.h\"\n#include \"system/BReactor.h\"\n#include \"flow/PacketPassInterface.h\"\n\n/**\n * Handler function invoked when inactivity is detected.\n * It is guaranteed that the interfaces are in not sending state.\n *\n * @param user value given to {@link PacketPassInactivityMonitor_Init}\n */\ntypedef void (*PacketPassInactivityMonitor_handler) (void *user);\n\n/**\n * A {@link PacketPassInterface} layer for detecting inactivity.\n * It reports inactivity to a user provided handler function.\n *\n * The object behaves like that:\n * (\"timer set\" means started with the given timeout whether if was running or not,\n * \"timer unset\" means stopped if it was running)\n *     - There is a timer.\n *     - The timer is set when the object is initialized.\n *     - When the input calls Send, the call is passed on to the output.\n *       If the output accepted the packet, the timer is set. If the output\n *       blocked the packet, the timer is unset.\n *     - When the output calls Done, the timer is set, and the call is\n *       passed on to the input.\n *     - When the input calls Cancel, the timer is set, and the call is\n *       passed on to the output.\n *     - When the timer expires, the timer is set, ant the user's handler\n *       function is invoked.\n */\ntypedef struct {\n    DebugObject d_obj;\n    PacketPassInterface *output;\n    BReactor *reactor;\n    PacketPassInactivityMonitor_handler handler;\n    void *user;\n    PacketPassInterface input;\n    BTimer timer;\n} PacketPassInactivityMonitor;\n\n/**\n * Initializes the object.\n * See {@link PacketPassInactivityMonitor} for details.\n *\n * @param o the object\n * @param output output interface\n * @param reactor reactor we live in\n * @param interval timer value in milliseconds\n * @param handler handler function for reporting inactivity, or NULL to disable\n * @param user value passed to handler functions\n */\nvoid PacketPassInactivityMonitor_Init (PacketPassInactivityMonitor *o, PacketPassInterface *output, BReactor *reactor, btime_t interval, PacketPassInactivityMonitor_handler handler, void *user);\n\n/**\n * Frees the object.\n *\n * @param o the object\n */\nvoid PacketPassInactivityMonitor_Free (PacketPassInactivityMonitor *o);\n\n/**\n * Returns the input interface.\n * The MTU of the interface will be the same as of the output interface.\n * The interface supports cancel functionality if the output interface supports it.\n *\n * @param o the object\n * @return input interface\n */\nPacketPassInterface * PacketPassInactivityMonitor_GetInput (PacketPassInactivityMonitor *o);\n\n/**\n * Sets or removes the inactivity handler.\n *\n * @param o the object\n * @param handler handler function for reporting inactivity, or NULL to disable\n * @param user value passed to handler functions\n */\nvoid PacketPassInactivityMonitor_SetHandler (PacketPassInactivityMonitor *o, PacketPassInactivityMonitor_handler handler, void *user);\n\n/**\n * Sets the timer to expire immediately in order to force an inactivity report.\n * \n * @param o the object\n */\nvoid PacketPassInactivityMonitor_Force (PacketPassInactivityMonitor *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BArpProbe.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BArpProbe\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BConnection.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BConnection\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BDHCPClient.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDHCPClient\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BDHCPClientCore.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDHCPClientCore\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BDatagram.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BDatagram\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BEncryption.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BEncryption\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BInputProcess.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BInputProcess\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BLockReactor.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BLockReactor\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BNetwork.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BNetwork\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BPredicate.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BPredicate\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BProcess.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BProcess\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BReactor.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BReactor\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BSSLConnection.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSSLConnection\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BSignal.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSignal\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BSocksClient.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BSocksClient\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BTap.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BTap\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BThreadSignal.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BThreadSignal\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BThreadWork.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BThreadWork\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BTime.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BTime\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_BUnixSignal.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_BUnixSignal\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_DPReceive.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DPReceive\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_DPRelay.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DPRelay\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_DataProto.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DataProto\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_DatagramPeerIO.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_DatagramPeerIO\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_FragmentProtoAssembler.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_FragmentProtoAssembler\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_FrameDecider.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_FrameDecider\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_LineBuffer.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_LineBuffer\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_Listener.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_Listener\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDBuildProgram.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDBuildProgram\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDConfigParser.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDConfigParser\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDConfigTokenizer.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDConfigTokenizer\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDIfConfig.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDIfConfig\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDInterfaceMonitor.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDInterfaceMonitor\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDModuleIndex.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDModuleIndex\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDModuleProcess.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDModuleProcess\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDPlaceholderDb.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDPlaceholderDb\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDRequest.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRequest\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDRequestClient.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRequestClient\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDRfkillMonitor.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDRfkillMonitor\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDUdevCache.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevCache\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDUdevManager.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevManager\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDUdevMonitor.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevMonitor\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDUdevMonitorParser.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDUdevMonitorParser\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDVal.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDVal\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDValGenerator.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDValGenerator\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_NCDValParser.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_NCDValParser\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_PRStreamSink.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PRStreamSink\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_PRStreamSource.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PRStreamSource\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_PacketProtoDecoder.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PacketProtoDecoder\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_PasswordListener.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PasswordListener\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_PeerChat.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_PeerChat\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_SPProtoDecoder.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_SPProtoDecoder\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ServerConnection.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ServerConnection\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_SocksUdpGwClient.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_SocksUdpGwClient\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_StreamPeerIO.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_StreamPeerIO\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_UdpGwClient.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_UdpGwClient\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_addr.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_addr\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_client.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_client\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_dostest_attacker.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_dostest_attacker\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_dostest_server.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_dostest_server\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_flooder.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_flooder\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_lwip.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_lwip\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_alias.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_alias\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_arithmetic.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_arithmetic\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_assert.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_assert\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_backtrack.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_backtrack\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_basic_functions.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_basic_functions\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_blocker.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_blocker\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_buffer.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_buffer\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_call2.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_call2\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_choose.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_choose\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_concat.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_concat\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_daemon.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_daemon\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_depend.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_depend\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_depend_scope.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_depend_scope\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_dynamic_depend.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_dynamic_depend\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_exit.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_exit\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_explode.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_explode\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_file.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_file\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_file_open.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_file_open\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_foreach.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_foreach\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_from_string.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_from_string\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_getargs.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_getargs\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_getenv.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_getenv\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_if.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_if\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_imperative.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_imperative\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_implode.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_implode\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_index.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_index\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_list.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_list\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_load_module.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_load_module\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_log.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_log\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_log_msg.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_log_msg\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_logical.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_logical\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_multidepend.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_multidepend\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_backend_badvpn.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_badvpn\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_backend_rfkill.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_rfkill\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_backend_waitdevice.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_waitdevice\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_backend_waitlink.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_waitlink\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_backend_wpa_supplicant.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_backend_wpa_supplicant\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_dns.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_dns\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_iptables.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_iptables\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv4_addr.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_addr\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv4_addr_in_network.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_addr_in_network\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv4_arp_probe.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_arp_probe\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv4_dhcp.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_dhcp\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv4_route.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv4_route\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv6_addr.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_addr\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv6_addr_in_network.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_addr_in_network\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv6_route.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_route\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_ipv6_wait_dynamic_addr.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_ipv6_wait_dynamic_addr\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_up.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_up\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_net_watch_interfaces.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_net_watch_interfaces\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_netmask.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_netmask\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_objref.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_objref\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_ondemand.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_ondemand\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_parse.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_parse\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_print.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_print\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_process_manager.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_process_manager\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_reboot.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_reboot\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_ref.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_ref\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_regex_match.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_regex_match\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_request.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_request\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_run.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_run\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_runonce.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_runonce\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sleep.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sleep\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_socket.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_socket\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_spawn.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_spawn\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_strcmp.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_strcmp\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_substr.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_substr\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_evdev.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_evdev\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_request_client.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_request_client\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_request_server.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_request_server\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_start_process.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_start_process\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_watch_directory.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_directory\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_watch_input.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_input\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_sys_watch_usb.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_sys_watch_usb\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_timer.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_timer\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_to_string.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_to_string\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_try.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_try\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_value.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_value\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_valuemetic.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_valuemetic\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_ncd_var.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_ncd_var\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_nsskey.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_nsskey\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_server.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_server\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_tun2socks.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_tun2socks\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channel_udpgw.h",
    "content": "#ifdef BLOG_CURRENT_CHANNEL\n#undef BLOG_CURRENT_CHANNEL\n#endif\n#define BLOG_CURRENT_CHANNEL BLOG_CHANNEL_udpgw\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channels_defines.h",
    "content": "#define BLOG_CHANNEL_server 0\n#define BLOG_CHANNEL_client 1\n#define BLOG_CHANNEL_flooder 2\n#define BLOG_CHANNEL_tun2socks 3\n#define BLOG_CHANNEL_ncd 4\n#define BLOG_CHANNEL_ncd_var 5\n#define BLOG_CHANNEL_ncd_list 6\n#define BLOG_CHANNEL_ncd_depend 7\n#define BLOG_CHANNEL_ncd_multidepend 8\n#define BLOG_CHANNEL_ncd_dynamic_depend 9\n#define BLOG_CHANNEL_ncd_concat 10\n#define BLOG_CHANNEL_ncd_if 11\n#define BLOG_CHANNEL_ncd_strcmp 12\n#define BLOG_CHANNEL_ncd_regex_match 13\n#define BLOG_CHANNEL_ncd_logical 14\n#define BLOG_CHANNEL_ncd_sleep 15\n#define BLOG_CHANNEL_ncd_print 16\n#define BLOG_CHANNEL_ncd_blocker 17\n#define BLOG_CHANNEL_ncd_run 18\n#define BLOG_CHANNEL_ncd_runonce 19\n#define BLOG_CHANNEL_ncd_daemon 20\n#define BLOG_CHANNEL_ncd_spawn 21\n#define BLOG_CHANNEL_ncd_imperative 22\n#define BLOG_CHANNEL_ncd_ref 23\n#define BLOG_CHANNEL_ncd_index 24\n#define BLOG_CHANNEL_ncd_alias 25\n#define BLOG_CHANNEL_ncd_process_manager 26\n#define BLOG_CHANNEL_ncd_ondemand 27\n#define BLOG_CHANNEL_ncd_foreach 28\n#define BLOG_CHANNEL_ncd_choose 29\n#define BLOG_CHANNEL_ncd_net_backend_waitdevice 30\n#define BLOG_CHANNEL_ncd_net_backend_waitlink 31\n#define BLOG_CHANNEL_ncd_net_backend_badvpn 32\n#define BLOG_CHANNEL_ncd_net_backend_wpa_supplicant 33\n#define BLOG_CHANNEL_ncd_net_backend_rfkill 34\n#define BLOG_CHANNEL_ncd_net_up 35\n#define BLOG_CHANNEL_ncd_net_dns 36\n#define BLOG_CHANNEL_ncd_net_iptables 37\n#define BLOG_CHANNEL_ncd_net_ipv4_addr 38\n#define BLOG_CHANNEL_ncd_net_ipv4_route 39\n#define BLOG_CHANNEL_ncd_net_ipv4_dhcp 40\n#define BLOG_CHANNEL_ncd_net_ipv4_arp_probe 41\n#define BLOG_CHANNEL_ncd_net_watch_interfaces 42\n#define BLOG_CHANNEL_ncd_sys_watch_input 43\n#define BLOG_CHANNEL_ncd_sys_watch_usb 44\n#define BLOG_CHANNEL_ncd_sys_evdev 45\n#define BLOG_CHANNEL_ncd_sys_watch_directory 46\n#define BLOG_CHANNEL_StreamPeerIO 47\n#define BLOG_CHANNEL_DatagramPeerIO 48\n#define BLOG_CHANNEL_BReactor 49\n#define BLOG_CHANNEL_BSignal 50\n#define BLOG_CHANNEL_FragmentProtoAssembler 51\n#define BLOG_CHANNEL_BPredicate 52\n#define BLOG_CHANNEL_ServerConnection 53\n#define BLOG_CHANNEL_Listener 54\n#define BLOG_CHANNEL_DataProto 55\n#define BLOG_CHANNEL_FrameDecider 56\n#define BLOG_CHANNEL_BSocksClient 57\n#define BLOG_CHANNEL_BDHCPClientCore 58\n#define BLOG_CHANNEL_BDHCPClient 59\n#define BLOG_CHANNEL_NCDIfConfig 60\n#define BLOG_CHANNEL_BUnixSignal 61\n#define BLOG_CHANNEL_BProcess 62\n#define BLOG_CHANNEL_PRStreamSink 63\n#define BLOG_CHANNEL_PRStreamSource 64\n#define BLOG_CHANNEL_PacketProtoDecoder 65\n#define BLOG_CHANNEL_DPRelay 66\n#define BLOG_CHANNEL_BThreadWork 67\n#define BLOG_CHANNEL_DPReceive 68\n#define BLOG_CHANNEL_BInputProcess 69\n#define BLOG_CHANNEL_NCDUdevMonitorParser 70\n#define BLOG_CHANNEL_NCDUdevMonitor 71\n#define BLOG_CHANNEL_NCDUdevCache 72\n#define BLOG_CHANNEL_NCDUdevManager 73\n#define BLOG_CHANNEL_BTime 74\n#define BLOG_CHANNEL_BEncryption 75\n#define BLOG_CHANNEL_SPProtoDecoder 76\n#define BLOG_CHANNEL_LineBuffer 77\n#define BLOG_CHANNEL_BTap 78\n#define BLOG_CHANNEL_lwip 79\n#define BLOG_CHANNEL_NCDConfigTokenizer 80\n#define BLOG_CHANNEL_NCDConfigParser 81\n#define BLOG_CHANNEL_NCDValParser 82\n#define BLOG_CHANNEL_nsskey 83\n#define BLOG_CHANNEL_addr 84\n#define BLOG_CHANNEL_PasswordListener 85\n#define BLOG_CHANNEL_NCDInterfaceMonitor 86\n#define BLOG_CHANNEL_NCDRfkillMonitor 87\n#define BLOG_CHANNEL_udpgw 88\n#define BLOG_CHANNEL_UdpGwClient 89\n#define BLOG_CHANNEL_SocksUdpGwClient 90\n#define BLOG_CHANNEL_BNetwork 91\n#define BLOG_CHANNEL_BConnection 92\n#define BLOG_CHANNEL_BSSLConnection 93\n#define BLOG_CHANNEL_BDatagram 94\n#define BLOG_CHANNEL_PeerChat 95\n#define BLOG_CHANNEL_BArpProbe 96\n#define BLOG_CHANNEL_NCDModuleIndex 97\n#define BLOG_CHANNEL_NCDModuleProcess 98\n#define BLOG_CHANNEL_NCDValGenerator 99\n#define BLOG_CHANNEL_ncd_from_string 100\n#define BLOG_CHANNEL_ncd_to_string 101\n#define BLOG_CHANNEL_ncd_value 102\n#define BLOG_CHANNEL_ncd_try 103\n#define BLOG_CHANNEL_ncd_sys_request_server 104\n#define BLOG_CHANNEL_NCDRequest 105\n#define BLOG_CHANNEL_ncd_net_ipv6_wait_dynamic_addr 106\n#define BLOG_CHANNEL_NCDRequestClient 107\n#define BLOG_CHANNEL_ncd_request 108\n#define BLOG_CHANNEL_ncd_sys_request_client 109\n#define BLOG_CHANNEL_ncd_exit 110\n#define BLOG_CHANNEL_ncd_getargs 111\n#define BLOG_CHANNEL_ncd_arithmetic 112\n#define BLOG_CHANNEL_ncd_parse 113\n#define BLOG_CHANNEL_ncd_valuemetic 114\n#define BLOG_CHANNEL_ncd_file 115\n#define BLOG_CHANNEL_ncd_netmask 116\n#define BLOG_CHANNEL_ncd_implode 117\n#define BLOG_CHANNEL_ncd_call2 118\n#define BLOG_CHANNEL_ncd_assert 119\n#define BLOG_CHANNEL_ncd_reboot 120\n#define BLOG_CHANNEL_ncd_explode 121\n#define BLOG_CHANNEL_NCDPlaceholderDb 122\n#define BLOG_CHANNEL_NCDVal 123\n#define BLOG_CHANNEL_ncd_net_ipv6_addr 124\n#define BLOG_CHANNEL_ncd_net_ipv6_route 125\n#define BLOG_CHANNEL_ncd_net_ipv4_addr_in_network 126\n#define BLOG_CHANNEL_ncd_net_ipv6_addr_in_network 127\n#define BLOG_CHANNEL_dostest_server 128\n#define BLOG_CHANNEL_dostest_attacker 129\n#define BLOG_CHANNEL_ncd_timer 130\n#define BLOG_CHANNEL_ncd_file_open 131\n#define BLOG_CHANNEL_ncd_backtrack 132\n#define BLOG_CHANNEL_ncd_socket 133\n#define BLOG_CHANNEL_ncd_depend_scope 134\n#define BLOG_CHANNEL_ncd_substr 135\n#define BLOG_CHANNEL_ncd_sys_start_process 136\n#define BLOG_CHANNEL_NCDBuildProgram 137\n#define BLOG_CHANNEL_ncd_log 138\n#define BLOG_CHANNEL_ncd_log_msg 139\n#define BLOG_CHANNEL_ncd_buffer 140\n#define BLOG_CHANNEL_ncd_getenv 141\n#define BLOG_CHANNEL_BThreadSignal 142\n#define BLOG_CHANNEL_BLockReactor 143\n#define BLOG_CHANNEL_ncd_load_module 144\n#define BLOG_CHANNEL_ncd_basic_functions 145\n#define BLOG_CHANNEL_ncd_objref 146\n#define BLOG_NUM_CHANNELS 147\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/blog_channels_list.h",
    "content": "{\"server\", 4},\n{\"client\", 4},\n{\"flooder\", 4},\n{\"tun2socks\", 4},\n{\"ncd\", 4},\n{\"ncd_var\", 4},\n{\"ncd_list\", 4},\n{\"ncd_depend\", 4},\n{\"ncd_multidepend\", 4},\n{\"ncd_dynamic_depend\", 4},\n{\"ncd_concat\", 4},\n{\"ncd_if\", 4},\n{\"ncd_strcmp\", 4},\n{\"ncd_regex_match\", 4},\n{\"ncd_logical\", 4},\n{\"ncd_sleep\", 4},\n{\"ncd_print\", 4},\n{\"ncd_blocker\", 4},\n{\"ncd_run\", 4},\n{\"ncd_runonce\", 4},\n{\"ncd_daemon\", 4},\n{\"ncd_spawn\", 4},\n{\"ncd_imperative\", 4},\n{\"ncd_ref\", 4},\n{\"ncd_index\", 4},\n{\"ncd_alias\", 4},\n{\"ncd_process_manager\", 4},\n{\"ncd_ondemand\", 4},\n{\"ncd_foreach\", 4},\n{\"ncd_choose\", 4},\n{\"ncd_net_backend_waitdevice\", 4},\n{\"ncd_net_backend_waitlink\", 4},\n{\"ncd_net_backend_badvpn\", 4},\n{\"ncd_net_backend_wpa_supplicant\", 4},\n{\"ncd_net_backend_rfkill\", 4},\n{\"ncd_net_up\", 4},\n{\"ncd_net_dns\", 4},\n{\"ncd_net_iptables\", 4},\n{\"ncd_net_ipv4_addr\", 4},\n{\"ncd_net_ipv4_route\", 4},\n{\"ncd_net_ipv4_dhcp\", 4},\n{\"ncd_net_ipv4_arp_probe\", 4},\n{\"ncd_net_watch_interfaces\", 4},\n{\"ncd_sys_watch_input\", 4},\n{\"ncd_sys_watch_usb\", 4},\n{\"ncd_sys_evdev\", 4},\n{\"ncd_sys_watch_directory\", 4},\n{\"StreamPeerIO\", 4},\n{\"DatagramPeerIO\", 4},\n{\"BReactor\", 3},\n{\"BSignal\", 3},\n{\"FragmentProtoAssembler\", 4},\n{\"BPredicate\", 3},\n{\"ServerConnection\", 4},\n{\"Listener\", 4},\n{\"DataProto\", 4},\n{\"FrameDecider\", 4},\n{\"BSocksClient\", 4},\n{\"BDHCPClientCore\", 4},\n{\"BDHCPClient\", 4},\n{\"NCDIfConfig\", 4},\n{\"BUnixSignal\", 4},\n{\"BProcess\", 4},\n{\"PRStreamSink\", 4},\n{\"PRStreamSource\", 4},\n{\"PacketProtoDecoder\", 4},\n{\"DPRelay\", 4},\n{\"BThreadWork\", 4},\n{\"DPReceive\", 4},\n{\"BInputProcess\", 4},\n{\"NCDUdevMonitorParser\", 4},\n{\"NCDUdevMonitor\", 4},\n{\"NCDUdevCache\", 4},\n{\"NCDUdevManager\", 4},\n{\"BTime\", 4},\n{\"BEncryption\", 4},\n{\"SPProtoDecoder\", 4},\n{\"LineBuffer\", 4},\n{\"BTap\", 4},\n{\"lwip\", 4},\n{\"NCDConfigTokenizer\", 4},\n{\"NCDConfigParser\", 4},\n{\"NCDValParser\", 4},\n{\"nsskey\", 4},\n{\"addr\", 4},\n{\"PasswordListener\", 4},\n{\"NCDInterfaceMonitor\", 4},\n{\"NCDRfkillMonitor\", 4},\n{\"udpgw\", 4},\n{\"UdpGwClient\", 4},\n{\"SocksUdpGwClient\", 4},\n{\"BNetwork\", 4},\n{\"BConnection\", 4},\n{\"BSSLConnection\", 4},\n{\"BDatagram\", 4},\n{\"PeerChat\", 4},\n{\"BArpProbe\", 4},\n{\"NCDModuleIndex\", 4},\n{\"NCDModuleProcess\", 4},\n{\"NCDValGenerator\", 4},\n{\"ncd_from_string\", 4},\n{\"ncd_to_string\", 4},\n{\"ncd_value\", 4},\n{\"ncd_try\", 4},\n{\"ncd_sys_request_server\", 4},\n{\"NCDRequest\", 4},\n{\"ncd_net_ipv6_wait_dynamic_addr\", 4},\n{\"NCDRequestClient\", 4},\n{\"ncd_request\", 4},\n{\"ncd_sys_request_client\", 4},\n{\"ncd_exit\", 4},\n{\"ncd_getargs\", 4},\n{\"ncd_arithmetic\", 4},\n{\"ncd_parse\", 4},\n{\"ncd_valuemetic\", 4},\n{\"ncd_file\", 4},\n{\"ncd_netmask\", 4},\n{\"ncd_implode\", 4},\n{\"ncd_call2\", 4},\n{\"ncd_assert\", 4},\n{\"ncd_reboot\", 4},\n{\"ncd_explode\", 4},\n{\"NCDPlaceholderDb\", 4},\n{\"NCDVal\", 4},\n{\"ncd_net_ipv6_addr\", 4},\n{\"ncd_net_ipv6_route\", 4},\n{\"ncd_net_ipv4_addr_in_network\", 4},\n{\"ncd_net_ipv6_addr_in_network\", 4},\n{\"dostest_server\", 4},\n{\"dostest_attacker\", 4},\n{\"ncd_timer\", 4},\n{\"ncd_file_open\", 4},\n{\"ncd_backtrack\", 4},\n{\"ncd_socket\", 4},\n{\"ncd_depend_scope\", 4},\n{\"ncd_substr\", 4},\n{\"ncd_sys_start_process\", 4},\n{\"NCDBuildProgram\", 4},\n{\"ncd_log\", 4},\n{\"ncd_log_msg\", 4},\n{\"ncd_buffer\", 4},\n{\"ncd_getenv\", 4},\n{\"BThreadSignal\", 4},\n{\"BLockReactor\", 4},\n{\"ncd_load_module\", 4},\n{\"ncd_basic_functions\", 4},\n{\"ncd_objref\", 4},\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/bproto_addr.h",
    "content": "/*\n    DO NOT EDIT THIS FILE!\n    This file was automatically generated by the bproto generator.\n*/\n\n#include <stdint.h>\n#include <string.h>\n\n#include <misc/debug.h>\n#include <misc/byteorder.h>\n#include <bproto/BProto.h>\n\n\n#define addr_SIZEtype (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint8_s))\n#define addr_SIZEip_port (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (2))\n#define addr_SIZEipv4_addr (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (4))\n#define addr_SIZEipv6_addr (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (16))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int type_count;\n    int ip_port_count;\n    int ipv4_addr_count;\n    int ipv6_addr_count;\n} addrWriter;\n\nstatic void addrWriter_Init (addrWriter *o, uint8_t *out);\nstatic int addrWriter_Finish (addrWriter *o);\nstatic void addrWriter_Addtype (addrWriter *o, uint8_t v);\nstatic uint8_t * addrWriter_Addip_port (addrWriter *o);\nstatic uint8_t * addrWriter_Addipv4_addr (addrWriter *o);\nstatic uint8_t * addrWriter_Addipv6_addr (addrWriter *o);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int type_start;\n    int type_span;\n    int type_pos;\n    int ip_port_start;\n    int ip_port_span;\n    int ip_port_pos;\n    int ipv4_addr_start;\n    int ipv4_addr_span;\n    int ipv4_addr_pos;\n    int ipv6_addr_start;\n    int ipv6_addr_span;\n    int ipv6_addr_pos;\n} addrParser;\n\nstatic int addrParser_Init (addrParser *o, uint8_t *buf, int buf_len);\nstatic int addrParser_GotEverything (addrParser *o);\nstatic int addrParser_Gettype (addrParser *o, uint8_t *v);\nstatic void addrParser_Resettype (addrParser *o);\nstatic void addrParser_Forwardtype (addrParser *o);\nstatic int addrParser_Getip_port (addrParser *o, uint8_t **data);\nstatic void addrParser_Resetip_port (addrParser *o);\nstatic void addrParser_Forwardip_port (addrParser *o);\nstatic int addrParser_Getipv4_addr (addrParser *o, uint8_t **data);\nstatic void addrParser_Resetipv4_addr (addrParser *o);\nstatic void addrParser_Forwardipv4_addr (addrParser *o);\nstatic int addrParser_Getipv6_addr (addrParser *o, uint8_t **data);\nstatic void addrParser_Resetipv6_addr (addrParser *o);\nstatic void addrParser_Forwardipv6_addr (addrParser *o);\n\nvoid addrWriter_Init (addrWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->type_count = 0;\n    o->ip_port_count = 0;\n    o->ipv4_addr_count = 0;\n    o->ipv6_addr_count = 0;\n}\n\nint addrWriter_Finish (addrWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->type_count == 1)\n    ASSERT(o->ip_port_count >= 0 && o->ip_port_count <= 1)\n    ASSERT(o->ipv4_addr_count >= 0 && o->ipv4_addr_count <= 1)\n    ASSERT(o->ipv6_addr_count >= 0 && o->ipv6_addr_count <= 1)\n\n    return o->used;\n}\n\nvoid addrWriter_Addtype (addrWriter *o, uint8_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->type_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_UINT8);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint8_s data;\n    data.v = htol8(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint8_s);\n\n    o->type_count++;\n}\n\nuint8_t * addrWriter_Addip_port (addrWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->ip_port_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(2);\n    header.type = htol16(BPROTO_TYPE_CONSTDATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(2);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += (2);\n\n    o->ip_port_count++;\n\n    return dest;\n}\n\nuint8_t * addrWriter_Addipv4_addr (addrWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->ipv4_addr_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(3);\n    header.type = htol16(BPROTO_TYPE_CONSTDATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(4);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += (4);\n\n    o->ipv4_addr_count++;\n\n    return dest;\n}\n\nuint8_t * addrWriter_Addipv6_addr (addrWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->ipv6_addr_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(4);\n    header.type = htol16(BPROTO_TYPE_CONSTDATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(16);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += (16);\n\n    o->ipv6_addr_count++;\n\n    return dest;\n}\n\nint addrParser_Init (addrParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->type_start = o->buf_len;\n    o->type_span = 0;\n    o->type_pos = 0;\n    o->ip_port_start = o->buf_len;\n    o->ip_port_span = 0;\n    o->ip_port_pos = 0;\n    o->ipv4_addr_start = o->buf_len;\n    o->ipv4_addr_span = 0;\n    o->ipv4_addr_pos = 0;\n    o->ipv6_addr_start = o->buf_len;\n    o->ipv6_addr_span = 0;\n    o->ipv6_addr_pos = 0;\n\n    int type_count = 0;\n    int ip_port_count = 0;\n    int ipv4_addr_count = 0;\n    int ipv6_addr_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    case 1:\n                        if (o->type_start == o->buf_len) {\n                            o->type_start = entry_pos;\n                        }\n                        o->type_span = pos - o->type_start;\n                        type_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 2:\n                        if (!(type == BPROTO_TYPE_CONSTDATA)) {\n                            return 0;\n                        }\n                        if (!(payload_len == (2))) {\n                            return 0;\n                        }\n                        if (o->ip_port_start == o->buf_len) {\n                            o->ip_port_start = entry_pos;\n                        }\n                        o->ip_port_span = pos - o->ip_port_start;\n                        ip_port_count++;\n                        break;\n                    case 3:\n                        if (!(type == BPROTO_TYPE_CONSTDATA)) {\n                            return 0;\n                        }\n                        if (!(payload_len == (4))) {\n                            return 0;\n                        }\n                        if (o->ipv4_addr_start == o->buf_len) {\n                            o->ipv4_addr_start = entry_pos;\n                        }\n                        o->ipv4_addr_span = pos - o->ipv4_addr_start;\n                        ipv4_addr_count++;\n                        break;\n                    case 4:\n                        if (!(type == BPROTO_TYPE_CONSTDATA)) {\n                            return 0;\n                        }\n                        if (!(payload_len == (16))) {\n                            return 0;\n                        }\n                        if (o->ipv6_addr_start == o->buf_len) {\n                            o->ipv6_addr_start = entry_pos;\n                        }\n                        o->ipv6_addr_span = pos - o->ipv6_addr_start;\n                        ipv6_addr_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(type_count == 1)) {\n        return 0;\n    }\n    if (!(ip_port_count <= 1)) {\n        return 0;\n    }\n    if (!(ipv4_addr_count <= 1)) {\n        return 0;\n    }\n    if (!(ipv6_addr_count <= 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint addrParser_GotEverything (addrParser *o)\n{\n    return (\n        o->type_pos == o->type_span\n        &&\n        o->ip_port_pos == o->ip_port_span\n        &&\n        o->ipv4_addr_pos == o->ipv4_addr_span\n        &&\n        o->ipv6_addr_pos == o->ipv6_addr_span\n    );\n}\n\nint addrParser_Gettype (addrParser *o, uint8_t *v)\n{\n    ASSERT(o->type_pos >= 0)\n    ASSERT(o->type_pos <= o->type_span)\n\n    int left = o->type_span - o->type_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->type_start + o->type_pos, sizeof(header));\n        o->type_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                struct BProto_uint8_s val;\n                memcpy(&val, o->buf + o->type_start + o->type_pos, sizeof(val));\n                o->type_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                if (id == 1) {\n                    *v = ltoh8(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->type_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->type_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->type_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->type_start + o->type_pos, sizeof(val));\n                o->type_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->type_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid addrParser_Resettype (addrParser *o)\n{\n    o->type_pos = 0;\n}\n\nvoid addrParser_Forwardtype (addrParser *o)\n{\n    o->type_pos = o->type_span;\n}\n\nint addrParser_Getip_port (addrParser *o, uint8_t **data)\n{\n    ASSERT(o->ip_port_pos >= 0)\n    ASSERT(o->ip_port_pos <= o->ip_port_span)\n\n    int left = o->ip_port_span - o->ip_port_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->ip_port_start + o->ip_port_pos, sizeof(header));\n        o->ip_port_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->ip_port_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->ip_port_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->ip_port_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->ip_port_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->ip_port_start + o->ip_port_pos, sizeof(val));\n                o->ip_port_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->ip_port_start + o->ip_port_pos;\n                o->ip_port_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_CONSTDATA && id == 2) {\n                    *data = payload;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid addrParser_Resetip_port (addrParser *o)\n{\n    o->ip_port_pos = 0;\n}\n\nvoid addrParser_Forwardip_port (addrParser *o)\n{\n    o->ip_port_pos = o->ip_port_span;\n}\n\nint addrParser_Getipv4_addr (addrParser *o, uint8_t **data)\n{\n    ASSERT(o->ipv4_addr_pos >= 0)\n    ASSERT(o->ipv4_addr_pos <= o->ipv4_addr_span)\n\n    int left = o->ipv4_addr_span - o->ipv4_addr_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->ipv4_addr_start + o->ipv4_addr_pos, sizeof(header));\n        o->ipv4_addr_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->ipv4_addr_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->ipv4_addr_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->ipv4_addr_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->ipv4_addr_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->ipv4_addr_start + o->ipv4_addr_pos, sizeof(val));\n                o->ipv4_addr_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->ipv4_addr_start + o->ipv4_addr_pos;\n                o->ipv4_addr_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_CONSTDATA && id == 3) {\n                    *data = payload;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid addrParser_Resetipv4_addr (addrParser *o)\n{\n    o->ipv4_addr_pos = 0;\n}\n\nvoid addrParser_Forwardipv4_addr (addrParser *o)\n{\n    o->ipv4_addr_pos = o->ipv4_addr_span;\n}\n\nint addrParser_Getipv6_addr (addrParser *o, uint8_t **data)\n{\n    ASSERT(o->ipv6_addr_pos >= 0)\n    ASSERT(o->ipv6_addr_pos <= o->ipv6_addr_span)\n\n    int left = o->ipv6_addr_span - o->ipv6_addr_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->ipv6_addr_start + o->ipv6_addr_pos, sizeof(header));\n        o->ipv6_addr_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->ipv6_addr_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->ipv6_addr_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->ipv6_addr_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->ipv6_addr_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->ipv6_addr_start + o->ipv6_addr_pos, sizeof(val));\n                o->ipv6_addr_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->ipv6_addr_start + o->ipv6_addr_pos;\n                o->ipv6_addr_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_CONSTDATA && id == 4) {\n                    *data = payload;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid addrParser_Resetipv6_addr (addrParser *o)\n{\n    o->ipv6_addr_pos = 0;\n}\n\nvoid addrParser_Forwardipv6_addr (addrParser *o)\n{\n    o->ipv6_addr_pos = o->ipv6_addr_span;\n}\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/bproto_bproto_test.h",
    "content": "/*\n    DO NOT EDIT THIS FILE!\n    This file was automatically generated by the bproto generator.\n*/\n\n#include <stdint.h>\n#include <string.h>\n\n#include <misc/debug.h>\n#include <misc/byteorder.h>\n#include <bproto/BProto.h>\n\n\n#define msg1_SIZEa (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint16_s))\n#define msg1_SIZEb (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint32_s))\n#define msg1_SIZEc (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint64_s))\n#define msg1_SIZEd (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint16_s))\n#define msg1_SIZEe (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint8_s))\n#define msg1_SIZEf(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n#define msg1_SIZEg (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (4))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int a_count;\n    int b_count;\n    int c_count;\n    int d_count;\n    int e_count;\n    int f_count;\n    int g_count;\n} msg1Writer;\n\nstatic void msg1Writer_Init (msg1Writer *o, uint8_t *out);\nstatic int msg1Writer_Finish (msg1Writer *o);\nstatic void msg1Writer_Adda (msg1Writer *o, uint16_t v);\nstatic void msg1Writer_Addb (msg1Writer *o, uint32_t v);\nstatic void msg1Writer_Addc (msg1Writer *o, uint64_t v);\nstatic void msg1Writer_Addd (msg1Writer *o, uint16_t v);\nstatic void msg1Writer_Adde (msg1Writer *o, uint8_t v);\nstatic uint8_t * msg1Writer_Addf (msg1Writer *o, int len);\nstatic uint8_t * msg1Writer_Addg (msg1Writer *o);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int a_start;\n    int a_span;\n    int a_pos;\n    int b_start;\n    int b_span;\n    int b_pos;\n    int c_start;\n    int c_span;\n    int c_pos;\n    int d_start;\n    int d_span;\n    int d_pos;\n    int e_start;\n    int e_span;\n    int e_pos;\n    int f_start;\n    int f_span;\n    int f_pos;\n    int g_start;\n    int g_span;\n    int g_pos;\n} msg1Parser;\n\nstatic int msg1Parser_Init (msg1Parser *o, uint8_t *buf, int buf_len);\nstatic int msg1Parser_GotEverything (msg1Parser *o);\nstatic int msg1Parser_Geta (msg1Parser *o, uint16_t *v);\nstatic void msg1Parser_Reseta (msg1Parser *o);\nstatic void msg1Parser_Forwarda (msg1Parser *o);\nstatic int msg1Parser_Getb (msg1Parser *o, uint32_t *v);\nstatic void msg1Parser_Resetb (msg1Parser *o);\nstatic void msg1Parser_Forwardb (msg1Parser *o);\nstatic int msg1Parser_Getc (msg1Parser *o, uint64_t *v);\nstatic void msg1Parser_Resetc (msg1Parser *o);\nstatic void msg1Parser_Forwardc (msg1Parser *o);\nstatic int msg1Parser_Getd (msg1Parser *o, uint16_t *v);\nstatic void msg1Parser_Resetd (msg1Parser *o);\nstatic void msg1Parser_Forwardd (msg1Parser *o);\nstatic int msg1Parser_Gete (msg1Parser *o, uint8_t *v);\nstatic void msg1Parser_Resete (msg1Parser *o);\nstatic void msg1Parser_Forwarde (msg1Parser *o);\nstatic int msg1Parser_Getf (msg1Parser *o, uint8_t **data, int *data_len);\nstatic void msg1Parser_Resetf (msg1Parser *o);\nstatic void msg1Parser_Forwardf (msg1Parser *o);\nstatic int msg1Parser_Getg (msg1Parser *o, uint8_t **data);\nstatic void msg1Parser_Resetg (msg1Parser *o);\nstatic void msg1Parser_Forwardg (msg1Parser *o);\n\nvoid msg1Writer_Init (msg1Writer *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->a_count = 0;\n    o->b_count = 0;\n    o->c_count = 0;\n    o->d_count = 0;\n    o->e_count = 0;\n    o->f_count = 0;\n    o->g_count = 0;\n}\n\nint msg1Writer_Finish (msg1Writer *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->a_count == 1)\n    ASSERT(o->b_count >= 0 && o->b_count <= 1)\n    ASSERT(o->c_count >= 1)\n    ASSERT(o->d_count >= 0)\n    ASSERT(o->e_count == 1)\n    ASSERT(o->f_count == 1)\n    ASSERT(o->g_count == 1)\n\n    return o->used;\n}\n\nvoid msg1Writer_Adda (msg1Writer *o, uint16_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->a_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(5);\n    header.type = htol16(BPROTO_TYPE_UINT16);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint16_s data;\n    data.v = htol16(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint16_s);\n\n    o->a_count++;\n}\n\nvoid msg1Writer_Addb (msg1Writer *o, uint32_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->b_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(6);\n    header.type = htol16(BPROTO_TYPE_UINT32);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint32_s data;\n    data.v = htol32(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint32_s);\n\n    o->b_count++;\n}\n\nvoid msg1Writer_Addc (msg1Writer *o, uint64_t v)\n{\n    ASSERT(o->used >= 0)\n    \n    \n\n    struct BProto_header_s header;\n    header.id = htol16(7);\n    header.type = htol16(BPROTO_TYPE_UINT64);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint64_s data;\n    data.v = htol64(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint64_s);\n\n    o->c_count++;\n}\n\nvoid msg1Writer_Addd (msg1Writer *o, uint16_t v)\n{\n    ASSERT(o->used >= 0)\n    \n    \n\n    struct BProto_header_s header;\n    header.id = htol16(8);\n    header.type = htol16(BPROTO_TYPE_UINT16);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint16_s data;\n    data.v = htol16(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint16_s);\n\n    o->d_count++;\n}\n\nvoid msg1Writer_Adde (msg1Writer *o, uint8_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->e_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(9);\n    header.type = htol16(BPROTO_TYPE_UINT8);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint8_s data;\n    data.v = htol8(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint8_s);\n\n    o->e_count++;\n}\n\nuint8_t * msg1Writer_Addf (msg1Writer *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->f_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(10);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->f_count++;\n\n    return dest;\n}\n\nuint8_t * msg1Writer_Addg (msg1Writer *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->g_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(11);\n    header.type = htol16(BPROTO_TYPE_CONSTDATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(4);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += (4);\n\n    o->g_count++;\n\n    return dest;\n}\n\nint msg1Parser_Init (msg1Parser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->a_start = o->buf_len;\n    o->a_span = 0;\n    o->a_pos = 0;\n    o->b_start = o->buf_len;\n    o->b_span = 0;\n    o->b_pos = 0;\n    o->c_start = o->buf_len;\n    o->c_span = 0;\n    o->c_pos = 0;\n    o->d_start = o->buf_len;\n    o->d_span = 0;\n    o->d_pos = 0;\n    o->e_start = o->buf_len;\n    o->e_span = 0;\n    o->e_pos = 0;\n    o->f_start = o->buf_len;\n    o->f_span = 0;\n    o->f_pos = 0;\n    o->g_start = o->buf_len;\n    o->g_span = 0;\n    o->g_pos = 0;\n\n    int a_count = 0;\n    int b_count = 0;\n    int c_count = 0;\n    int d_count = 0;\n    int e_count = 0;\n    int f_count = 0;\n    int g_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    case 9:\n                        if (o->e_start == o->buf_len) {\n                            o->e_start = entry_pos;\n                        }\n                        o->e_span = pos - o->e_start;\n                        e_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    case 5:\n                        if (o->a_start == o->buf_len) {\n                            o->a_start = entry_pos;\n                        }\n                        o->a_span = pos - o->a_start;\n                        a_count++;\n                        break;\n                    case 8:\n                        if (o->d_start == o->buf_len) {\n                            o->d_start = entry_pos;\n                        }\n                        o->d_span = pos - o->d_start;\n                        d_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    case 6:\n                        if (o->b_start == o->buf_len) {\n                            o->b_start = entry_pos;\n                        }\n                        o->b_span = pos - o->b_start;\n                        b_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    case 7:\n                        if (o->c_start == o->buf_len) {\n                            o->c_start = entry_pos;\n                        }\n                        o->c_span = pos - o->c_start;\n                        c_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 10:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->f_start == o->buf_len) {\n                            o->f_start = entry_pos;\n                        }\n                        o->f_span = pos - o->f_start;\n                        f_count++;\n                        break;\n                    case 11:\n                        if (!(type == BPROTO_TYPE_CONSTDATA)) {\n                            return 0;\n                        }\n                        if (!(payload_len == (4))) {\n                            return 0;\n                        }\n                        if (o->g_start == o->buf_len) {\n                            o->g_start = entry_pos;\n                        }\n                        o->g_span = pos - o->g_start;\n                        g_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(a_count == 1)) {\n        return 0;\n    }\n    if (!(b_count <= 1)) {\n        return 0;\n    }\n    if (!(c_count >= 1)) {\n        return 0;\n    }\n    if (!(e_count == 1)) {\n        return 0;\n    }\n    if (!(f_count == 1)) {\n        return 0;\n    }\n    if (!(g_count == 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msg1Parser_GotEverything (msg1Parser *o)\n{\n    return (\n        o->a_pos == o->a_span\n        &&\n        o->b_pos == o->b_span\n        &&\n        o->c_pos == o->c_span\n        &&\n        o->d_pos == o->d_span\n        &&\n        o->e_pos == o->e_span\n        &&\n        o->f_pos == o->f_span\n        &&\n        o->g_pos == o->g_span\n    );\n}\n\nint msg1Parser_Geta (msg1Parser *o, uint16_t *v)\n{\n    ASSERT(o->a_pos >= 0)\n    ASSERT(o->a_pos <= o->a_span)\n\n    int left = o->a_span - o->a_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->a_start + o->a_pos, sizeof(header));\n        o->a_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->a_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                struct BProto_uint16_s val;\n                memcpy(&val, o->buf + o->a_start + o->a_pos, sizeof(val));\n                o->a_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                if (id == 5) {\n                    *v = ltoh16(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->a_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->a_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->a_start + o->a_pos, sizeof(val));\n                o->a_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->a_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Reseta (msg1Parser *o)\n{\n    o->a_pos = 0;\n}\n\nvoid msg1Parser_Forwarda (msg1Parser *o)\n{\n    o->a_pos = o->a_span;\n}\n\nint msg1Parser_Getb (msg1Parser *o, uint32_t *v)\n{\n    ASSERT(o->b_pos >= 0)\n    ASSERT(o->b_pos <= o->b_span)\n\n    int left = o->b_span - o->b_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->b_start + o->b_pos, sizeof(header));\n        o->b_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->b_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->b_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                struct BProto_uint32_s val;\n                memcpy(&val, o->buf + o->b_start + o->b_pos, sizeof(val));\n                o->b_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                if (id == 6) {\n                    *v = ltoh32(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->b_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->b_start + o->b_pos, sizeof(val));\n                o->b_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->b_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resetb (msg1Parser *o)\n{\n    o->b_pos = 0;\n}\n\nvoid msg1Parser_Forwardb (msg1Parser *o)\n{\n    o->b_pos = o->b_span;\n}\n\nint msg1Parser_Getc (msg1Parser *o, uint64_t *v)\n{\n    ASSERT(o->c_pos >= 0)\n    ASSERT(o->c_pos <= o->c_span)\n\n    int left = o->c_span - o->c_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->c_start + o->c_pos, sizeof(header));\n        o->c_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->c_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->c_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->c_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                struct BProto_uint64_s val;\n                memcpy(&val, o->buf + o->c_start + o->c_pos, sizeof(val));\n                o->c_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                if (id == 7) {\n                    *v = ltoh64(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->c_start + o->c_pos, sizeof(val));\n                o->c_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->c_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resetc (msg1Parser *o)\n{\n    o->c_pos = 0;\n}\n\nvoid msg1Parser_Forwardc (msg1Parser *o)\n{\n    o->c_pos = o->c_span;\n}\n\nint msg1Parser_Getd (msg1Parser *o, uint16_t *v)\n{\n    ASSERT(o->d_pos >= 0)\n    ASSERT(o->d_pos <= o->d_span)\n\n    int left = o->d_span - o->d_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->d_start + o->d_pos, sizeof(header));\n        o->d_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->d_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                struct BProto_uint16_s val;\n                memcpy(&val, o->buf + o->d_start + o->d_pos, sizeof(val));\n                o->d_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                if (id == 8) {\n                    *v = ltoh16(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->d_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->d_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->d_start + o->d_pos, sizeof(val));\n                o->d_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->d_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resetd (msg1Parser *o)\n{\n    o->d_pos = 0;\n}\n\nvoid msg1Parser_Forwardd (msg1Parser *o)\n{\n    o->d_pos = o->d_span;\n}\n\nint msg1Parser_Gete (msg1Parser *o, uint8_t *v)\n{\n    ASSERT(o->e_pos >= 0)\n    ASSERT(o->e_pos <= o->e_span)\n\n    int left = o->e_span - o->e_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->e_start + o->e_pos, sizeof(header));\n        o->e_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                struct BProto_uint8_s val;\n                memcpy(&val, o->buf + o->e_start + o->e_pos, sizeof(val));\n                o->e_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                if (id == 9) {\n                    *v = ltoh8(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->e_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->e_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->e_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->e_start + o->e_pos, sizeof(val));\n                o->e_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->e_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resete (msg1Parser *o)\n{\n    o->e_pos = 0;\n}\n\nvoid msg1Parser_Forwarde (msg1Parser *o)\n{\n    o->e_pos = o->e_span;\n}\n\nint msg1Parser_Getf (msg1Parser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->f_pos >= 0)\n    ASSERT(o->f_pos <= o->f_span)\n\n    int left = o->f_span - o->f_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->f_start + o->f_pos, sizeof(header));\n        o->f_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->f_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->f_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->f_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->f_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->f_start + o->f_pos, sizeof(val));\n                o->f_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->f_start + o->f_pos;\n                o->f_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 10) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resetf (msg1Parser *o)\n{\n    o->f_pos = 0;\n}\n\nvoid msg1Parser_Forwardf (msg1Parser *o)\n{\n    o->f_pos = o->f_span;\n}\n\nint msg1Parser_Getg (msg1Parser *o, uint8_t **data)\n{\n    ASSERT(o->g_pos >= 0)\n    ASSERT(o->g_pos <= o->g_span)\n\n    int left = o->g_span - o->g_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->g_start + o->g_pos, sizeof(header));\n        o->g_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->g_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->g_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->g_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->g_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->g_start + o->g_pos, sizeof(val));\n                o->g_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->g_start + o->g_pos;\n                o->g_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_CONSTDATA && id == 11) {\n                    *data = payload;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg1Parser_Resetg (msg1Parser *o)\n{\n    o->g_pos = 0;\n}\n\nvoid msg1Parser_Forwardg (msg1Parser *o)\n{\n    o->g_pos = o->g_span;\n}\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/generated/bproto_msgproto.h",
    "content": "/*\n    DO NOT EDIT THIS FILE!\n    This file was automatically generated by the bproto generator.\n*/\n\n#include <stdint.h>\n#include <string.h>\n\n#include <misc/debug.h>\n#include <misc/byteorder.h>\n#include <bproto/BProto.h>\n\n\n#define msg_SIZEtype (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint16_s))\n#define msg_SIZEpayload(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int type_count;\n    int payload_count;\n} msgWriter;\n\nstatic void msgWriter_Init (msgWriter *o, uint8_t *out);\nstatic int msgWriter_Finish (msgWriter *o);\nstatic void msgWriter_Addtype (msgWriter *o, uint16_t v);\nstatic uint8_t * msgWriter_Addpayload (msgWriter *o, int len);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int type_start;\n    int type_span;\n    int type_pos;\n    int payload_start;\n    int payload_span;\n    int payload_pos;\n} msgParser;\n\nstatic int msgParser_Init (msgParser *o, uint8_t *buf, int buf_len);\nstatic int msgParser_GotEverything (msgParser *o);\nstatic int msgParser_Gettype (msgParser *o, uint16_t *v);\nstatic void msgParser_Resettype (msgParser *o);\nstatic void msgParser_Forwardtype (msgParser *o);\nstatic int msgParser_Getpayload (msgParser *o, uint8_t **data, int *data_len);\nstatic void msgParser_Resetpayload (msgParser *o);\nstatic void msgParser_Forwardpayload (msgParser *o);\n\nvoid msgWriter_Init (msgWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->type_count = 0;\n    o->payload_count = 0;\n}\n\nint msgWriter_Finish (msgWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->type_count == 1)\n    ASSERT(o->payload_count == 1)\n\n    return o->used;\n}\n\nvoid msgWriter_Addtype (msgWriter *o, uint16_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->type_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_UINT16);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint16_s data;\n    data.v = htol16(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint16_s);\n\n    o->type_count++;\n}\n\nuint8_t * msgWriter_Addpayload (msgWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->payload_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(2);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->payload_count++;\n\n    return dest;\n}\n\nint msgParser_Init (msgParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->type_start = o->buf_len;\n    o->type_span = 0;\n    o->type_pos = 0;\n    o->payload_start = o->buf_len;\n    o->payload_span = 0;\n    o->payload_pos = 0;\n\n    int type_count = 0;\n    int payload_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    case 1:\n                        if (o->type_start == o->buf_len) {\n                            o->type_start = entry_pos;\n                        }\n                        o->type_span = pos - o->type_start;\n                        type_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 2:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->payload_start == o->buf_len) {\n                            o->payload_start = entry_pos;\n                        }\n                        o->payload_span = pos - o->payload_start;\n                        payload_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(type_count == 1)) {\n        return 0;\n    }\n    if (!(payload_count == 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msgParser_GotEverything (msgParser *o)\n{\n    return (\n        o->type_pos == o->type_span\n        &&\n        o->payload_pos == o->payload_span\n    );\n}\n\nint msgParser_Gettype (msgParser *o, uint16_t *v)\n{\n    ASSERT(o->type_pos >= 0)\n    ASSERT(o->type_pos <= o->type_span)\n\n    int left = o->type_span - o->type_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->type_start + o->type_pos, sizeof(header));\n        o->type_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->type_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                struct BProto_uint16_s val;\n                memcpy(&val, o->buf + o->type_start + o->type_pos, sizeof(val));\n                o->type_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                if (id == 1) {\n                    *v = ltoh16(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->type_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->type_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->type_start + o->type_pos, sizeof(val));\n                o->type_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->type_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msgParser_Resettype (msgParser *o)\n{\n    o->type_pos = 0;\n}\n\nvoid msgParser_Forwardtype (msgParser *o)\n{\n    o->type_pos = o->type_span;\n}\n\nint msgParser_Getpayload (msgParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->payload_pos >= 0)\n    ASSERT(o->payload_pos <= o->payload_span)\n\n    int left = o->payload_span - o->payload_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->payload_start + o->payload_pos, sizeof(header));\n        o->payload_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->payload_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->payload_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->payload_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->payload_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->payload_start + o->payload_pos, sizeof(val));\n                o->payload_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->payload_start + o->payload_pos;\n                o->payload_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 2) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msgParser_Resetpayload (msgParser *o)\n{\n    o->payload_pos = 0;\n}\n\nvoid msgParser_Forwardpayload (msgParser *o)\n{\n    o->payload_pos = o->payload_span;\n}\n\n#define msg_youconnect_SIZEaddr(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n#define msg_youconnect_SIZEkey(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n#define msg_youconnect_SIZEpassword (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint64_s))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int addr_count;\n    int key_count;\n    int password_count;\n} msg_youconnectWriter;\n\nstatic void msg_youconnectWriter_Init (msg_youconnectWriter *o, uint8_t *out);\nstatic int msg_youconnectWriter_Finish (msg_youconnectWriter *o);\nstatic uint8_t * msg_youconnectWriter_Addaddr (msg_youconnectWriter *o, int len);\nstatic uint8_t * msg_youconnectWriter_Addkey (msg_youconnectWriter *o, int len);\nstatic void msg_youconnectWriter_Addpassword (msg_youconnectWriter *o, uint64_t v);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int addr_start;\n    int addr_span;\n    int addr_pos;\n    int key_start;\n    int key_span;\n    int key_pos;\n    int password_start;\n    int password_span;\n    int password_pos;\n} msg_youconnectParser;\n\nstatic int msg_youconnectParser_Init (msg_youconnectParser *o, uint8_t *buf, int buf_len);\nstatic int msg_youconnectParser_GotEverything (msg_youconnectParser *o);\nstatic int msg_youconnectParser_Getaddr (msg_youconnectParser *o, uint8_t **data, int *data_len);\nstatic void msg_youconnectParser_Resetaddr (msg_youconnectParser *o);\nstatic void msg_youconnectParser_Forwardaddr (msg_youconnectParser *o);\nstatic int msg_youconnectParser_Getkey (msg_youconnectParser *o, uint8_t **data, int *data_len);\nstatic void msg_youconnectParser_Resetkey (msg_youconnectParser *o);\nstatic void msg_youconnectParser_Forwardkey (msg_youconnectParser *o);\nstatic int msg_youconnectParser_Getpassword (msg_youconnectParser *o, uint64_t *v);\nstatic void msg_youconnectParser_Resetpassword (msg_youconnectParser *o);\nstatic void msg_youconnectParser_Forwardpassword (msg_youconnectParser *o);\n\nvoid msg_youconnectWriter_Init (msg_youconnectWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->addr_count = 0;\n    o->key_count = 0;\n    o->password_count = 0;\n}\n\nint msg_youconnectWriter_Finish (msg_youconnectWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->addr_count >= 1)\n    ASSERT(o->key_count >= 0 && o->key_count <= 1)\n    ASSERT(o->password_count >= 0 && o->password_count <= 1)\n\n    return o->used;\n}\n\nuint8_t * msg_youconnectWriter_Addaddr (msg_youconnectWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    \n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->addr_count++;\n\n    return dest;\n}\n\nuint8_t * msg_youconnectWriter_Addkey (msg_youconnectWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->key_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(2);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->key_count++;\n\n    return dest;\n}\n\nvoid msg_youconnectWriter_Addpassword (msg_youconnectWriter *o, uint64_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->password_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(3);\n    header.type = htol16(BPROTO_TYPE_UINT64);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint64_s data;\n    data.v = htol64(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint64_s);\n\n    o->password_count++;\n}\n\nint msg_youconnectParser_Init (msg_youconnectParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->addr_start = o->buf_len;\n    o->addr_span = 0;\n    o->addr_pos = 0;\n    o->key_start = o->buf_len;\n    o->key_span = 0;\n    o->key_pos = 0;\n    o->password_start = o->buf_len;\n    o->password_span = 0;\n    o->password_pos = 0;\n\n    int addr_count = 0;\n    int key_count = 0;\n    int password_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    case 3:\n                        if (o->password_start == o->buf_len) {\n                            o->password_start = entry_pos;\n                        }\n                        o->password_span = pos - o->password_start;\n                        password_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 1:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->addr_start == o->buf_len) {\n                            o->addr_start = entry_pos;\n                        }\n                        o->addr_span = pos - o->addr_start;\n                        addr_count++;\n                        break;\n                    case 2:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->key_start == o->buf_len) {\n                            o->key_start = entry_pos;\n                        }\n                        o->key_span = pos - o->key_start;\n                        key_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(addr_count >= 1)) {\n        return 0;\n    }\n    if (!(key_count <= 1)) {\n        return 0;\n    }\n    if (!(password_count <= 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msg_youconnectParser_GotEverything (msg_youconnectParser *o)\n{\n    return (\n        o->addr_pos == o->addr_span\n        &&\n        o->key_pos == o->key_span\n        &&\n        o->password_pos == o->password_span\n    );\n}\n\nint msg_youconnectParser_Getaddr (msg_youconnectParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->addr_pos >= 0)\n    ASSERT(o->addr_pos <= o->addr_span)\n\n    int left = o->addr_span - o->addr_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->addr_start + o->addr_pos, sizeof(header));\n        o->addr_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->addr_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->addr_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->addr_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->addr_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->addr_start + o->addr_pos, sizeof(val));\n                o->addr_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->addr_start + o->addr_pos;\n                o->addr_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 1) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_youconnectParser_Resetaddr (msg_youconnectParser *o)\n{\n    o->addr_pos = 0;\n}\n\nvoid msg_youconnectParser_Forwardaddr (msg_youconnectParser *o)\n{\n    o->addr_pos = o->addr_span;\n}\n\nint msg_youconnectParser_Getkey (msg_youconnectParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->key_pos >= 0)\n    ASSERT(o->key_pos <= o->key_span)\n\n    int left = o->key_span - o->key_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->key_start + o->key_pos, sizeof(header));\n        o->key_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->key_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->key_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->key_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->key_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->key_start + o->key_pos, sizeof(val));\n                o->key_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->key_start + o->key_pos;\n                o->key_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 2) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_youconnectParser_Resetkey (msg_youconnectParser *o)\n{\n    o->key_pos = 0;\n}\n\nvoid msg_youconnectParser_Forwardkey (msg_youconnectParser *o)\n{\n    o->key_pos = o->key_span;\n}\n\nint msg_youconnectParser_Getpassword (msg_youconnectParser *o, uint64_t *v)\n{\n    ASSERT(o->password_pos >= 0)\n    ASSERT(o->password_pos <= o->password_span)\n\n    int left = o->password_span - o->password_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->password_start + o->password_pos, sizeof(header));\n        o->password_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->password_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->password_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->password_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                struct BProto_uint64_s val;\n                memcpy(&val, o->buf + o->password_start + o->password_pos, sizeof(val));\n                o->password_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                if (id == 3) {\n                    *v = ltoh64(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->password_start + o->password_pos, sizeof(val));\n                o->password_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->password_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_youconnectParser_Resetpassword (msg_youconnectParser *o)\n{\n    o->password_pos = 0;\n}\n\nvoid msg_youconnectParser_Forwardpassword (msg_youconnectParser *o)\n{\n    o->password_pos = o->password_span;\n}\n\n#define msg_youconnect_addr_SIZEname(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n#define msg_youconnect_addr_SIZEaddr(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int name_count;\n    int addr_count;\n} msg_youconnect_addrWriter;\n\nstatic void msg_youconnect_addrWriter_Init (msg_youconnect_addrWriter *o, uint8_t *out);\nstatic int msg_youconnect_addrWriter_Finish (msg_youconnect_addrWriter *o);\nstatic uint8_t * msg_youconnect_addrWriter_Addname (msg_youconnect_addrWriter *o, int len);\nstatic uint8_t * msg_youconnect_addrWriter_Addaddr (msg_youconnect_addrWriter *o, int len);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int name_start;\n    int name_span;\n    int name_pos;\n    int addr_start;\n    int addr_span;\n    int addr_pos;\n} msg_youconnect_addrParser;\n\nstatic int msg_youconnect_addrParser_Init (msg_youconnect_addrParser *o, uint8_t *buf, int buf_len);\nstatic int msg_youconnect_addrParser_GotEverything (msg_youconnect_addrParser *o);\nstatic int msg_youconnect_addrParser_Getname (msg_youconnect_addrParser *o, uint8_t **data, int *data_len);\nstatic void msg_youconnect_addrParser_Resetname (msg_youconnect_addrParser *o);\nstatic void msg_youconnect_addrParser_Forwardname (msg_youconnect_addrParser *o);\nstatic int msg_youconnect_addrParser_Getaddr (msg_youconnect_addrParser *o, uint8_t **data, int *data_len);\nstatic void msg_youconnect_addrParser_Resetaddr (msg_youconnect_addrParser *o);\nstatic void msg_youconnect_addrParser_Forwardaddr (msg_youconnect_addrParser *o);\n\nvoid msg_youconnect_addrWriter_Init (msg_youconnect_addrWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->name_count = 0;\n    o->addr_count = 0;\n}\n\nint msg_youconnect_addrWriter_Finish (msg_youconnect_addrWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->name_count == 1)\n    ASSERT(o->addr_count == 1)\n\n    return o->used;\n}\n\nuint8_t * msg_youconnect_addrWriter_Addname (msg_youconnect_addrWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->name_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->name_count++;\n\n    return dest;\n}\n\nuint8_t * msg_youconnect_addrWriter_Addaddr (msg_youconnect_addrWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->addr_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(2);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->addr_count++;\n\n    return dest;\n}\n\nint msg_youconnect_addrParser_Init (msg_youconnect_addrParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->name_start = o->buf_len;\n    o->name_span = 0;\n    o->name_pos = 0;\n    o->addr_start = o->buf_len;\n    o->addr_span = 0;\n    o->addr_pos = 0;\n\n    int name_count = 0;\n    int addr_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 1:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->name_start == o->buf_len) {\n                            o->name_start = entry_pos;\n                        }\n                        o->name_span = pos - o->name_start;\n                        name_count++;\n                        break;\n                    case 2:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->addr_start == o->buf_len) {\n                            o->addr_start = entry_pos;\n                        }\n                        o->addr_span = pos - o->addr_start;\n                        addr_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(name_count == 1)) {\n        return 0;\n    }\n    if (!(addr_count == 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msg_youconnect_addrParser_GotEverything (msg_youconnect_addrParser *o)\n{\n    return (\n        o->name_pos == o->name_span\n        &&\n        o->addr_pos == o->addr_span\n    );\n}\n\nint msg_youconnect_addrParser_Getname (msg_youconnect_addrParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->name_pos >= 0)\n    ASSERT(o->name_pos <= o->name_span)\n\n    int left = o->name_span - o->name_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->name_start + o->name_pos, sizeof(header));\n        o->name_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->name_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->name_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->name_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->name_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->name_start + o->name_pos, sizeof(val));\n                o->name_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->name_start + o->name_pos;\n                o->name_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 1) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_youconnect_addrParser_Resetname (msg_youconnect_addrParser *o)\n{\n    o->name_pos = 0;\n}\n\nvoid msg_youconnect_addrParser_Forwardname (msg_youconnect_addrParser *o)\n{\n    o->name_pos = o->name_span;\n}\n\nint msg_youconnect_addrParser_Getaddr (msg_youconnect_addrParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->addr_pos >= 0)\n    ASSERT(o->addr_pos <= o->addr_span)\n\n    int left = o->addr_span - o->addr_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->addr_start + o->addr_pos, sizeof(header));\n        o->addr_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->addr_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->addr_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->addr_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->addr_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->addr_start + o->addr_pos, sizeof(val));\n                o->addr_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->addr_start + o->addr_pos;\n                o->addr_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 2) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_youconnect_addrParser_Resetaddr (msg_youconnect_addrParser *o)\n{\n    o->addr_pos = 0;\n}\n\nvoid msg_youconnect_addrParser_Forwardaddr (msg_youconnect_addrParser *o)\n{\n    o->addr_pos = o->addr_span;\n}\n\n#define msg_seed_SIZEseed_id (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint16_s))\n#define msg_seed_SIZEkey(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n#define msg_seed_SIZEiv(_len) (sizeof(struct BProto_header_s) + sizeof(struct BProto_data_header_s) + (_len))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int seed_id_count;\n    int key_count;\n    int iv_count;\n} msg_seedWriter;\n\nstatic void msg_seedWriter_Init (msg_seedWriter *o, uint8_t *out);\nstatic int msg_seedWriter_Finish (msg_seedWriter *o);\nstatic void msg_seedWriter_Addseed_id (msg_seedWriter *o, uint16_t v);\nstatic uint8_t * msg_seedWriter_Addkey (msg_seedWriter *o, int len);\nstatic uint8_t * msg_seedWriter_Addiv (msg_seedWriter *o, int len);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int seed_id_start;\n    int seed_id_span;\n    int seed_id_pos;\n    int key_start;\n    int key_span;\n    int key_pos;\n    int iv_start;\n    int iv_span;\n    int iv_pos;\n} msg_seedParser;\n\nstatic int msg_seedParser_Init (msg_seedParser *o, uint8_t *buf, int buf_len);\nstatic int msg_seedParser_GotEverything (msg_seedParser *o);\nstatic int msg_seedParser_Getseed_id (msg_seedParser *o, uint16_t *v);\nstatic void msg_seedParser_Resetseed_id (msg_seedParser *o);\nstatic void msg_seedParser_Forwardseed_id (msg_seedParser *o);\nstatic int msg_seedParser_Getkey (msg_seedParser *o, uint8_t **data, int *data_len);\nstatic void msg_seedParser_Resetkey (msg_seedParser *o);\nstatic void msg_seedParser_Forwardkey (msg_seedParser *o);\nstatic int msg_seedParser_Getiv (msg_seedParser *o, uint8_t **data, int *data_len);\nstatic void msg_seedParser_Resetiv (msg_seedParser *o);\nstatic void msg_seedParser_Forwardiv (msg_seedParser *o);\n\nvoid msg_seedWriter_Init (msg_seedWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->seed_id_count = 0;\n    o->key_count = 0;\n    o->iv_count = 0;\n}\n\nint msg_seedWriter_Finish (msg_seedWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->seed_id_count == 1)\n    ASSERT(o->key_count == 1)\n    ASSERT(o->iv_count == 1)\n\n    return o->used;\n}\n\nvoid msg_seedWriter_Addseed_id (msg_seedWriter *o, uint16_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->seed_id_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_UINT16);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint16_s data;\n    data.v = htol16(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint16_s);\n\n    o->seed_id_count++;\n}\n\nuint8_t * msg_seedWriter_Addkey (msg_seedWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->key_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(2);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->key_count++;\n\n    return dest;\n}\n\nuint8_t * msg_seedWriter_Addiv (msg_seedWriter *o, int len)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->iv_count == 0)\n    ASSERT(len >= 0 && len <= UINT32_MAX)\n\n    struct BProto_header_s header;\n    header.id = htol16(3);\n    header.type = htol16(BPROTO_TYPE_DATA);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_data_header_s data;\n    data.len = htol32(len);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_data_header_s);\n\n    uint8_t *dest = (o->out + o->used);\n    o->used += len;\n\n    o->iv_count++;\n\n    return dest;\n}\n\nint msg_seedParser_Init (msg_seedParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->seed_id_start = o->buf_len;\n    o->seed_id_span = 0;\n    o->seed_id_pos = 0;\n    o->key_start = o->buf_len;\n    o->key_span = 0;\n    o->key_pos = 0;\n    o->iv_start = o->buf_len;\n    o->iv_span = 0;\n    o->iv_pos = 0;\n\n    int seed_id_count = 0;\n    int key_count = 0;\n    int iv_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    case 1:\n                        if (o->seed_id_start == o->buf_len) {\n                            o->seed_id_start = entry_pos;\n                        }\n                        o->seed_id_span = pos - o->seed_id_start;\n                        seed_id_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    case 2:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->key_start == o->buf_len) {\n                            o->key_start = entry_pos;\n                        }\n                        o->key_span = pos - o->key_start;\n                        key_count++;\n                        break;\n                    case 3:\n                        if (!(type == BPROTO_TYPE_DATA)) {\n                            return 0;\n                        }\n                        if (o->iv_start == o->buf_len) {\n                            o->iv_start = entry_pos;\n                        }\n                        o->iv_span = pos - o->iv_start;\n                        iv_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(seed_id_count == 1)) {\n        return 0;\n    }\n    if (!(key_count == 1)) {\n        return 0;\n    }\n    if (!(iv_count == 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msg_seedParser_GotEverything (msg_seedParser *o)\n{\n    return (\n        o->seed_id_pos == o->seed_id_span\n        &&\n        o->key_pos == o->key_span\n        &&\n        o->iv_pos == o->iv_span\n    );\n}\n\nint msg_seedParser_Getseed_id (msg_seedParser *o, uint16_t *v)\n{\n    ASSERT(o->seed_id_pos >= 0)\n    ASSERT(o->seed_id_pos <= o->seed_id_span)\n\n    int left = o->seed_id_span - o->seed_id_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(header));\n        o->seed_id_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->seed_id_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                struct BProto_uint16_s val;\n                memcpy(&val, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(val));\n                o->seed_id_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                if (id == 1) {\n                    *v = ltoh16(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->seed_id_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->seed_id_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(val));\n                o->seed_id_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->seed_id_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_seedParser_Resetseed_id (msg_seedParser *o)\n{\n    o->seed_id_pos = 0;\n}\n\nvoid msg_seedParser_Forwardseed_id (msg_seedParser *o)\n{\n    o->seed_id_pos = o->seed_id_span;\n}\n\nint msg_seedParser_Getkey (msg_seedParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->key_pos >= 0)\n    ASSERT(o->key_pos <= o->key_span)\n\n    int left = o->key_span - o->key_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->key_start + o->key_pos, sizeof(header));\n        o->key_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->key_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->key_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->key_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->key_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->key_start + o->key_pos, sizeof(val));\n                o->key_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->key_start + o->key_pos;\n                o->key_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 2) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_seedParser_Resetkey (msg_seedParser *o)\n{\n    o->key_pos = 0;\n}\n\nvoid msg_seedParser_Forwardkey (msg_seedParser *o)\n{\n    o->key_pos = o->key_span;\n}\n\nint msg_seedParser_Getiv (msg_seedParser *o, uint8_t **data, int *data_len)\n{\n    ASSERT(o->iv_pos >= 0)\n    ASSERT(o->iv_pos <= o->iv_span)\n\n    int left = o->iv_span - o->iv_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->iv_start + o->iv_pos, sizeof(header));\n        o->iv_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->iv_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                o->iv_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->iv_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->iv_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->iv_start + o->iv_pos, sizeof(val));\n                o->iv_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                uint8_t *payload = o->buf + o->iv_start + o->iv_pos;\n                o->iv_pos += payload_len;\n                left -= payload_len;\n\n                if (type == BPROTO_TYPE_DATA && id == 3) {\n                    *data = payload;\n                    *data_len = payload_len;\n                    return 1;\n                }\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_seedParser_Resetiv (msg_seedParser *o)\n{\n    o->iv_pos = 0;\n}\n\nvoid msg_seedParser_Forwardiv (msg_seedParser *o)\n{\n    o->iv_pos = o->iv_span;\n}\n\n#define msg_confirmseed_SIZEseed_id (sizeof(struct BProto_header_s) + sizeof(struct BProto_uint16_s))\n\ntypedef struct {\n    uint8_t *out;\n    int used;\n    int seed_id_count;\n} msg_confirmseedWriter;\n\nstatic void msg_confirmseedWriter_Init (msg_confirmseedWriter *o, uint8_t *out);\nstatic int msg_confirmseedWriter_Finish (msg_confirmseedWriter *o);\nstatic void msg_confirmseedWriter_Addseed_id (msg_confirmseedWriter *o, uint16_t v);\n\ntypedef struct {\n    uint8_t *buf;\n    int buf_len;\n    int seed_id_start;\n    int seed_id_span;\n    int seed_id_pos;\n} msg_confirmseedParser;\n\nstatic int msg_confirmseedParser_Init (msg_confirmseedParser *o, uint8_t *buf, int buf_len);\nstatic int msg_confirmseedParser_GotEverything (msg_confirmseedParser *o);\nstatic int msg_confirmseedParser_Getseed_id (msg_confirmseedParser *o, uint16_t *v);\nstatic void msg_confirmseedParser_Resetseed_id (msg_confirmseedParser *o);\nstatic void msg_confirmseedParser_Forwardseed_id (msg_confirmseedParser *o);\n\nvoid msg_confirmseedWriter_Init (msg_confirmseedWriter *o, uint8_t *out)\n{\n    o->out = out;\n    o->used = 0;\n    o->seed_id_count = 0;\n}\n\nint msg_confirmseedWriter_Finish (msg_confirmseedWriter *o)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->seed_id_count == 1)\n\n    return o->used;\n}\n\nvoid msg_confirmseedWriter_Addseed_id (msg_confirmseedWriter *o, uint16_t v)\n{\n    ASSERT(o->used >= 0)\n    ASSERT(o->seed_id_count == 0)\n    \n\n    struct BProto_header_s header;\n    header.id = htol16(1);\n    header.type = htol16(BPROTO_TYPE_UINT16);\n    memcpy(o->out + o->used, &header, sizeof(header));\n    o->used += sizeof(struct BProto_header_s);\n\n    struct BProto_uint16_s data;\n    data.v = htol16(v);\n    memcpy(o->out + o->used, &data, sizeof(data));\n    o->used += sizeof(struct BProto_uint16_s);\n\n    o->seed_id_count++;\n}\n\nint msg_confirmseedParser_Init (msg_confirmseedParser *o, uint8_t *buf, int buf_len)\n{\n    ASSERT(buf_len >= 0)\n\n    o->buf = buf;\n    o->buf_len = buf_len;\n    o->seed_id_start = o->buf_len;\n    o->seed_id_span = 0;\n    o->seed_id_pos = 0;\n\n    int seed_id_count = 0;\n\n    int pos = 0;\n    int left = o->buf_len;\n\n    while (left > 0) {\n        int entry_pos = pos;\n\n        if (!(left >= sizeof(struct BProto_header_s))) {\n            return 0;\n        }\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + pos, sizeof(header));\n        pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                if (!(left >= sizeof(struct BProto_uint8_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                if (!(left >= sizeof(struct BProto_uint16_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                switch (id) {\n                    case 1:\n                        if (o->seed_id_start == o->buf_len) {\n                            o->seed_id_start = entry_pos;\n                        }\n                        o->seed_id_span = pos - o->seed_id_start;\n                        seed_id_count++;\n                        break;\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                if (!(left >= sizeof(struct BProto_uint32_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                if (!(left >= sizeof(struct BProto_uint64_s))) {\n                    return 0;\n                }\n                pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                if (!(left >= sizeof(struct BProto_data_header_s))) {\n                    return 0;\n                }\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + pos, sizeof(val));\n                pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                if (!(left >= payload_len)) {\n                    return 0;\n                }\n                pos += payload_len;\n                left -= payload_len;\n\n                switch (id) {\n                    default:\n                        return 0;\n                }\n            } break;\n            default:\n                return 0;\n        }\n    }\n\n    if (!(seed_id_count == 1)) {\n        return 0;\n    }\n\n    return 1;\n}\n\nint msg_confirmseedParser_GotEverything (msg_confirmseedParser *o)\n{\n    return (\n        o->seed_id_pos == o->seed_id_span\n    );\n}\n\nint msg_confirmseedParser_Getseed_id (msg_confirmseedParser *o, uint16_t *v)\n{\n    ASSERT(o->seed_id_pos >= 0)\n    ASSERT(o->seed_id_pos <= o->seed_id_span)\n\n    int left = o->seed_id_span - o->seed_id_pos;\n\n    while (left > 0) {\n        ASSERT(left >= sizeof(struct BProto_header_s))\n        struct BProto_header_s header;\n        memcpy(&header, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(header));\n        o->seed_id_pos += sizeof(struct BProto_header_s);\n        left -= sizeof(struct BProto_header_s);\n        uint16_t type = ltoh16(header.type);\n        uint16_t id = ltoh16(header.id);\n\n        switch (type) {\n            case BPROTO_TYPE_UINT8: {\n                ASSERT(left >= sizeof(struct BProto_uint8_s))\n                o->seed_id_pos += sizeof(struct BProto_uint8_s);\n                left -= sizeof(struct BProto_uint8_s);\n            } break;\n            case BPROTO_TYPE_UINT16: {\n                ASSERT(left >= sizeof(struct BProto_uint16_s))\n                struct BProto_uint16_s val;\n                memcpy(&val, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(val));\n                o->seed_id_pos += sizeof(struct BProto_uint16_s);\n                left -= sizeof(struct BProto_uint16_s);\n\n                if (id == 1) {\n                    *v = ltoh16(val.v);\n                    return 1;\n                }\n            } break;\n            case BPROTO_TYPE_UINT32: {\n                ASSERT(left >= sizeof(struct BProto_uint32_s))\n                o->seed_id_pos += sizeof(struct BProto_uint32_s);\n                left -= sizeof(struct BProto_uint32_s);\n            } break;\n            case BPROTO_TYPE_UINT64: {\n                ASSERT(left >= sizeof(struct BProto_uint64_s))\n                o->seed_id_pos += sizeof(struct BProto_uint64_s);\n                left -= sizeof(struct BProto_uint64_s);\n            } break;\n            case BPROTO_TYPE_DATA:\n            case BPROTO_TYPE_CONSTDATA:\n            {\n                ASSERT(left >= sizeof(struct BProto_data_header_s))\n                struct BProto_data_header_s val;\n                memcpy(&val, o->buf + o->seed_id_start + o->seed_id_pos, sizeof(val));\n                o->seed_id_pos += sizeof(struct BProto_data_header_s);\n                left -= sizeof(struct BProto_data_header_s);\n\n                uint32_t payload_len = ltoh32(val.len);\n                ASSERT(left >= payload_len)\n                o->seed_id_pos += payload_len;\n                left -= payload_len;\n            } break;\n            default:\n                ASSERT(0);\n        }\n    }\n\n    return 0;\n}\n\nvoid msg_confirmseedParser_Resetseed_id (msg_confirmseedParser *o)\n{\n    o->seed_id_pos = 0;\n}\n\nvoid msg_confirmseedParser_Forwardseed_id (msg_confirmseedParser *o)\n{\n    o->seed_id_pos = o->seed_id_span;\n}\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/custom/arch/cc.h",
    "content": "/**\n * @file cc.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef LWIP_CUSTOM_CC_H\n#define LWIP_CUSTOM_CC_H\n\n#include <stdlib.h>\n#include <stdio.h>\n#include <errno.h>\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/packed.h\"\n#include \"misc/print_macros.h\"\n#include \"misc/byteorder.h\"\n#include \"base/BLog.h\"\n\n#define u8_t uint8_t\n#define s8_t int8_t\n#define u16_t uint16_t\n#define s16_t int16_t\n#define u32_t uint32_t\n#define s32_t int32_t\n#define mem_ptr_t uintptr_t\n\n#define PACK_STRUCT_BEGIN B_START_PACKED\n#define PACK_STRUCT_END B_END_PACKED\n#define PACK_STRUCT_STRUCT B_PACKED\n\n#define LWIP_PLATFORM_DIAG(x) { if (BLog_WouldLog(BLOG_CHANNEL_lwip, BLOG_INFO)) { BLog_Begin(); BLog_Append x; BLog_Finish(BLOG_CHANNEL_lwip, BLOG_INFO); } }\n#define LWIP_PLATFORM_ASSERT(x) { fprintf(stderr, \"%s: lwip assertion failure: %s\\n\", __FUNCTION__, (x)); abort(); }\n\n#define U16_F PRIu16\n#define S16_F PRId16\n#define X16_F PRIx16\n#define U32_F PRIu32\n#define S32_F PRId32\n#define X32_F PRIx32\n#define SZT_F \"zu\"\n\n#define LWIP_PLATFORM_BYTESWAP 1\n#define LWIP_PLATFORM_HTONS(x) hton16(x)\n#define LWIP_PLATFORM_HTONL(x) hton32(x)\n\n#define LWIP_RAND() ( \\\n    (((uint32_t)(rand() & 0xFF)) << 24) | \\\n    (((uint32_t)(rand() & 0xFF)) << 16) | \\\n    (((uint32_t)(rand() & 0xFF)) << 8) | \\\n    (((uint32_t)(rand() & 0xFF)) << 0) \\\n)\n\n// for BYTE_ORDER\n#if defined(BADVPN_FREEBSD)\n    #include <machine/endian.h>\n#else\n    #define LITTLE_ENDIAN 1234\n    #define BIG_ENDIAN 4321\n    #if defined(BADVPN_LITTLE_ENDIAN)\n        #define BYTE_ORDER LITTLE_ENDIAN\n    #else\n        #define BYTE_ORDER BIG_ENDIAN\n    #endif\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/custom/arch/perf.h",
    "content": "/**\n * @file perf.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef LWIP_CUSTOM_PERF_H\n#define LWIP_CUSTOM_PERF_H\n\n#define PERF_START\n#define PERF_STOP(x)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/custom/lwipopts.h",
    "content": "/**\n * @file lwipopts.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef LWIP_CUSTOM_LWIPOPTS_H\n#define LWIP_CUSTOM_LWIPOPTS_H\n\n#define NO_SYS 1\n#define MEM_ALIGNMENT 4\n\n#define LWIP_ARP 0\n#define ARP_QUEUEING 0\n#define IP_FORWARD 0\n#define LWIP_ICMP 1\n#define LWIP_RAW 0\n#define LWIP_DHCP 0\n#define LWIP_AUTOIP 0\n#define LWIP_SNMP 0\n#define LWIP_IGMP 0\n#define LWIP_DNS 0\n#define LWIP_UDP 1\n#define LWIP_UDPLITE 0\n#define LWIP_TCP 1\n#define LWIP_CALLBACK_API 1\n#define LWIP_NETIF_API 0\n#define LWIP_NETIF_LOOPBACK 0\n#define LWIP_HAVE_LOOPIF 0\n#define LWIP_HAVE_SLIPIF 0\n#define LWIP_NETCONN 0\n#define LWIP_SOCKET 0\n#define PPP_SUPPORT 0\n#define LWIP_IPV6 0\n#define LWIP_IPV6_MLD 0\n#define LWIP_IPV6_AUTOCONFIG 0\n\n#define LWIP_CHECKSUM_ON_COPY 1\n\n// MEM\n#define MEM_SIZE                        (1024 * 1024 * 2) /* 1MiB */\n#define MEMP_NUM_PBUF 256\n#define MEMP_NUM_TCP_PCB 256\n#define MEMP_NUM_TCP_PCB_LISTEN 256\n#define MEMP_NUM_TCP_SEG 256\n#define MEMP_NUM_REASSDATA 256\n#define MEMP_NUM_FRAG_PBUF 256\n#define PBUF_POOL_SIZE 256\n\n//#define MEMP_NUM_TCP_PCB_LISTEN 16\n//#define MEMP_NUM_TCP_PCB 1024\n//#define TCP_SND_BUF 32469\n//#define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF)/(TCP_MSS))\n\n#define MEM_LIBC_MALLOC 1\n#define MEMP_MEM_MALLOC 1\n\n//#define TCP_MSS 8117\n\n#define TCP_MSS                         2048\n#define TCP_WND                         (2*TCP_MSS)\n#define TCP_SND_BUF                     2 * TCP_WND\n#define TCP_OVERSIZE                    TCP_MSS\n#define TCP_SND_QUEUELEN                TCP_SNDQUEUELEN_OVERFLOW\n\n\n//#define LWIP_DEBUG\n#define TCP_DEBUG                LWIP_DBG_ON\n#define IP_DEBUG                LWIP_DBG_ON\n#define TCP_INPUT_DEBUG         LWIP_DBG_ON\n#define TCP_WND_DEBUG           LWIP_DBG_ON\n#define TCP_OUTPUT_DEBUG        LWIP_DBG_ON\n#define TCP_RST_DEBUG       LWIP_DBG_ON\n#define TCP_QLEN_DEBUG      LWIP_DBG_ON\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/custom/sys.c",
    "content": "/**\n * @file sys.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"system/BTime.h\"\n\n#include \"lwip/sys.h\"\n\nu32_t sys_now (void)\n{\n    return btime_gettime();\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/def.c",
    "content": "/**\n * @file\n * Common functions used throughout the stack.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Simon Goldschmidt\n *\n */\n\n#include \"lwip/opt.h\"\n#include \"lwip/def.h\"\n\n/**\n * These are reference implementations of the byte swapping functions.\n * Again with the aim of being simple, correct and fully portable.\n * Byte swapping is the second thing you would want to optimize. You will\n * need to port it to your architecture and in your cc.h:\n * \n * #define LWIP_PLATFORM_BYTESWAP 1\n * #define LWIP_PLATFORM_HTONS(x) <your_htons>\n * #define LWIP_PLATFORM_HTONL(x) <your_htonl>\n *\n * Note ntohs() and ntohl() are merely references to the htonx counterparts.\n */\n\n#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN)\n\n/**\n * Convert an u16_t from host- to network byte order.\n *\n * @param n u16_t in host byte order\n * @return n in network byte order\n */\nu16_t\nlwip_htons(u16_t n)\n{\n  return ((n & 0xff) << 8) | ((n & 0xff00) >> 8);\n}\n\n/**\n * Convert an u16_t from network- to host byte order.\n *\n * @param n u16_t in network byte order\n * @return n in host byte order\n */\nu16_t\nlwip_ntohs(u16_t n)\n{\n  return lwip_htons(n);\n}\n\n/**\n * Convert an u32_t from host- to network byte order.\n *\n * @param n u32_t in host byte order\n * @return n in network byte order\n */\nu32_t\nlwip_htonl(u32_t n)\n{\n  return ((n & 0xff) << 24) |\n    ((n & 0xff00) << 8) |\n    ((n & 0xff0000UL) >> 8) |\n    ((n & 0xff000000UL) >> 24);\n}\n\n/**\n * Convert an u32_t from network- to host byte order.\n *\n * @param n u32_t in network byte order\n * @return n in host byte order\n */\nu32_t\nlwip_ntohl(u32_t n)\n{\n  return lwip_htonl(n);\n}\n\n#endif /* (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/inet_chksum.c",
    "content": "/**\n * @file\n * Incluse internet checksum functions.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/def.h\"\n\n#include <stddef.h>\n#include <string.h>\n\n/* These are some reference implementations of the checksum algorithm, with the\n * aim of being simple, correct and fully portable. Checksumming is the\n * first thing you would want to optimize for your platform. If you create\n * your own version, link it in and in your cc.h put:\n * \n * #define LWIP_CHKSUM <your_checksum_routine> \n *\n * Or you can select from the implementations below by defining\n * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3.\n */\n\n#ifndef LWIP_CHKSUM\n# define LWIP_CHKSUM lwip_standard_chksum\n# ifndef LWIP_CHKSUM_ALGORITHM\n#  define LWIP_CHKSUM_ALGORITHM 2\n# endif\nu16_t lwip_standard_chksum(void *dataptr, int len);\n#endif\n/* If none set: */\n#ifndef LWIP_CHKSUM_ALGORITHM\n# define LWIP_CHKSUM_ALGORITHM 0\n#endif\n\n#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */\n/**\n * lwip checksum\n *\n * @param dataptr points to start of data to be summed at any boundary\n * @param len length of data to be summed\n * @return host order (!) lwip checksum (non-inverted Internet sum) \n *\n * @note accumulator size limits summable length to 64k\n * @note host endianess is irrelevant (p3 RFC1071)\n */\nu16_t\nlwip_standard_chksum(void *dataptr, u16_t len)\n{\n  u32_t acc;\n  u16_t src;\n  u8_t *octetptr;\n\n  acc = 0;\n  /* dataptr may be at odd or even addresses */\n  octetptr = (u8_t*)dataptr;\n  while (len > 1) {\n    /* declare first octet as most significant\n       thus assume network order, ignoring host order */\n    src = (*octetptr) << 8;\n    octetptr++;\n    /* declare second octet as least significant */\n    src |= (*octetptr);\n    octetptr++;\n    acc += src;\n    len -= 2;\n  }\n  if (len > 0) {\n    /* accumulate remaining octet */\n    src = (*octetptr) << 8;\n    acc += src;\n  }\n  /* add deferred carry bits */\n  acc = (acc >> 16) + (acc & 0x0000ffffUL);\n  if ((acc & 0xffff0000UL) != 0) {\n    acc = (acc >> 16) + (acc & 0x0000ffffUL);\n  }\n  /* This maybe a little confusing: reorder sum using htons()\n     instead of ntohs() since it has a little less call overhead.\n     The caller must invert bits for Internet sum ! */\n  return htons((u16_t)acc);\n}\n#endif\n\n#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */\n/*\n * Curt McDowell\n * Broadcom Corp.\n * csm@broadcom.com\n *\n * IP checksum two bytes at a time with support for\n * unaligned buffer.\n * Works for len up to and including 0x20000.\n * by Curt McDowell, Broadcom Corp. 12/08/2005\n *\n * @param dataptr points to start of data to be summed at any boundary\n * @param len length of data to be summed\n * @return host order (!) lwip checksum (non-inverted Internet sum) \n */\n\nu16_t\nlwip_standard_chksum(void *dataptr, int len)\n{\n  u8_t *pb = (u8_t *)dataptr;\n  u16_t *ps, t = 0;\n  u32_t sum = 0;\n  int odd = ((mem_ptr_t)pb & 1);\n\n  /* Get aligned to u16_t */\n  if (odd && len > 0) {\n    ((u8_t *)&t)[1] = *pb++;\n    len--;\n  }\n\n  /* Add the bulk of the data */\n  ps = (u16_t *)(void *)pb;\n  while (len > 1) {\n    sum += *ps++;\n    len -= 2;\n  }\n\n  /* Consume left-over byte, if any */\n  if (len > 0) {\n    ((u8_t *)&t)[0] = *(u8_t *)ps;\n  }\n\n  /* Add end bytes */\n  sum += t;\n\n  /* Fold 32-bit sum to 16 bits\n     calling this twice is propably faster than if statements... */\n  sum = FOLD_U32T(sum);\n  sum = FOLD_U32T(sum);\n\n  /* Swap if alignment was odd */\n  if (odd) {\n    sum = SWAP_BYTES_IN_WORD(sum);\n  }\n\n  return (u16_t)sum;\n}\n#endif\n\n#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */\n/**\n * An optimized checksum routine. Basically, it uses loop-unrolling on\n * the checksum loop, treating the head and tail bytes specially, whereas\n * the inner loop acts on 8 bytes at a time. \n *\n * @arg start of buffer to be checksummed. May be an odd byte address.\n * @len number of bytes in the buffer to be checksummed.\n * @return host order (!) lwip checksum (non-inverted Internet sum) \n * \n * by Curt McDowell, Broadcom Corp. December 8th, 2005\n */\n\nu16_t\nlwip_standard_chksum(void *dataptr, int len)\n{\n  u8_t *pb = (u8_t *)dataptr;\n  u16_t *ps, t = 0;\n  u32_t *pl;\n  u32_t sum = 0, tmp;\n  /* starts at odd byte address? */\n  int odd = ((mem_ptr_t)pb & 1);\n\n  if (odd && len > 0) {\n    ((u8_t *)&t)[1] = *pb++;\n    len--;\n  }\n\n  ps = (u16_t *)pb;\n\n  if (((mem_ptr_t)ps & 3) && len > 1) {\n    sum += *ps++;\n    len -= 2;\n  }\n\n  pl = (u32_t *)ps;\n\n  while (len > 7)  {\n    tmp = sum + *pl++;          /* ping */\n    if (tmp < sum) {\n      tmp++;                    /* add back carry */\n    }\n\n    sum = tmp + *pl++;          /* pong */\n    if (sum < tmp) {\n      sum++;                    /* add back carry */\n    }\n\n    len -= 8;\n  }\n\n  /* make room in upper bits */\n  sum = FOLD_U32T(sum);\n\n  ps = (u16_t *)pl;\n\n  /* 16-bit aligned word remaining? */\n  while (len > 1) {\n    sum += *ps++;\n    len -= 2;\n  }\n\n  /* dangling tail byte remaining? */\n  if (len > 0) {                /* include odd byte */\n    ((u8_t *)&t)[0] = *(u8_t *)ps;\n  }\n\n  sum += t;                     /* add end bytes */\n\n  /* Fold 32-bit sum to 16 bits\n     calling this twice is propably faster than if statements... */\n  sum = FOLD_U32T(sum);\n  sum = FOLD_U32T(sum);\n\n  if (odd) {\n    sum = SWAP_BYTES_IN_WORD(sum);\n  }\n\n  return (u16_t)sum;\n}\n#endif\n\n/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */\nstatic u16_t\ninet_cksum_pseudo_base(struct pbuf *p, u8_t proto, u16_t proto_len, u32_t acc)\n{\n  struct pbuf *q;\n  u8_t swapped = 0;\n\n  /* iterate through all pbuf in chain */\n  for(q = p; q != NULL; q = q->next) {\n    LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \\n\",\n      (void *)q, (void *)q->next));\n    acc += LWIP_CHKSUM(q->payload, q->len);\n    /*LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): unwrapped lwip_chksum()=%\"X32_F\" \\n\", acc));*/\n    /* just executing this next line is probably faster that the if statement needed\n       to check whether we really need to execute it, and does no harm */\n    acc = FOLD_U32T(acc);\n    if (q->len % 2 != 0) {\n      swapped = 1 - swapped;\n      acc = SWAP_BYTES_IN_WORD(acc);\n    }\n    /*LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): wrapped lwip_chksum()=%\"X32_F\" \\n\", acc));*/\n  }\n\n  if (swapped) {\n    acc = SWAP_BYTES_IN_WORD(acc);\n  }\n\n  acc += (u32_t)htons((u16_t)proto);\n  acc += (u32_t)htons(proto_len);\n\n  /* Fold 32-bit sum to 16 bits\n     calling this twice is propably faster than if statements... */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n  LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): pbuf chain lwip_chksum()=%\"X32_F\"\\n\", acc));\n  return (u16_t)~(acc & 0xffffUL);\n}\n\n/* inet_chksum_pseudo:\n *\n * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain.\n * IP addresses are expected to be in network byte order.\n *\n * @param p chain of pbufs over that a checksum should be calculated (ip data part)\n * @param src source ip address (used for checksum of pseudo header)\n * @param dst destination ip address (used for checksum of pseudo header)\n * @param proto ip protocol (used for checksum of pseudo header)\n * @param proto_len length of the ip data part (used for checksum of pseudo header)\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\nu16_t\ninet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,\n       ip_addr_t *src, ip_addr_t *dest)\n{\n  u32_t acc;\n  u32_t addr;\n\n  addr = ip4_addr_get_u32(src);\n  acc = (addr & 0xffffUL);\n  acc += ((addr >> 16) & 0xffffUL);\n  addr = ip4_addr_get_u32(dest);\n  acc += (addr & 0xffffUL);\n  acc += ((addr >> 16) & 0xffffUL);\n  /* fold down to 16 bits */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n\n  return inet_cksum_pseudo_base(p, proto, proto_len, acc);\n}\n#if LWIP_IPV6\n/**\n * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.\n * IPv6 addresses are expected to be in network byte order.\n *\n * @param p chain of pbufs over that a checksum should be calculated (ip data part)\n * @param src source ipv6 address (used for checksum of pseudo header)\n * @param dst destination ipv6 address (used for checksum of pseudo header)\n * @param proto ipv6 protocol/next header (used for checksum of pseudo header)\n * @param proto_len length of the ipv6 payload (used for checksum of pseudo header)\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\nu16_t\nip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,\n       ip6_addr_t *src, ip6_addr_t *dest)\n{\n  u32_t acc = 0;\n  u32_t addr;\n  u8_t addr_part;\n\n  for (addr_part = 0; addr_part < 4; addr_part++) {\n    addr = src->addr[addr_part];\n    acc += (addr & 0xffffUL);\n    acc += ((addr >> 16) & 0xffffUL);\n    addr = dest->addr[addr_part];\n    acc += (addr & 0xffffUL);\n    acc += ((addr >> 16) & 0xffffUL);\n  }\n  /* fold down to 16 bits */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n\n  return inet_cksum_pseudo_base(p, proto, proto_len, acc);\n}\n#endif /* LWIP_IPV6 */\n\n/** Parts of the pseudo checksum which are common to IPv4 and IPv6 */\nstatic u16_t\ninet_cksum_pseudo_partial_base(struct pbuf *p, u8_t proto, u16_t proto_len,\n       u16_t chksum_len, u32_t acc)\n{\n  struct pbuf *q;\n  u8_t swapped = 0;\n  u16_t chklen;\n\n  /* iterate through all pbuf in chain */\n  for(q = p; (q != NULL) && (chksum_len > 0); q = q->next) {\n    LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \\n\",\n      (void *)q, (void *)q->next));\n    chklen = q->len;\n    if (chklen > chksum_len) {\n      chklen = chksum_len;\n    }\n    acc += LWIP_CHKSUM(q->payload, chklen);\n    chksum_len -= chklen;\n    LWIP_ASSERT(\"delete me\", chksum_len < 0x7fff);\n    /*LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): unwrapped lwip_chksum()=%\"X32_F\" \\n\", acc));*/\n    /* fold the upper bit down */\n    acc = FOLD_U32T(acc);\n    if (q->len % 2 != 0) {\n      swapped = 1 - swapped;\n      acc = SWAP_BYTES_IN_WORD(acc);\n    }\n    /*LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): wrapped lwip_chksum()=%\"X32_F\" \\n\", acc));*/\n  }\n\n  if (swapped) {\n    acc = SWAP_BYTES_IN_WORD(acc);\n  }\n\n  acc += (u32_t)htons((u16_t)proto);\n  acc += (u32_t)htons(proto_len);\n\n  /* Fold 32-bit sum to 16 bits\n     calling this twice is propably faster than if statements... */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n  LWIP_DEBUGF(INET_DEBUG, (\"inet_chksum_pseudo(): pbuf chain lwip_chksum()=%\"X32_F\"\\n\", acc));\n  return (u16_t)~(acc & 0xffffUL);\n}\n\n/* inet_chksum_pseudo_partial:\n *\n * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain.\n * IP addresses are expected to be in network byte order.\n *\n * @param p chain of pbufs over that a checksum should be calculated (ip data part)\n * @param src source ip address (used for checksum of pseudo header)\n * @param dst destination ip address (used for checksum of pseudo header)\n * @param proto ip protocol (used for checksum of pseudo header)\n * @param proto_len length of the ip data part (used for checksum of pseudo header)\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\nu16_t\ninet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,\n       u16_t chksum_len, ip_addr_t *src, ip_addr_t *dest)\n{\n  u32_t acc;\n  u32_t addr;\n\n  addr = ip4_addr_get_u32(src);\n  acc = (addr & 0xffffUL);\n  acc += ((addr >> 16) & 0xffffUL);\n  addr = ip4_addr_get_u32(dest);\n  acc += (addr & 0xffffUL);\n  acc += ((addr >> 16) & 0xffffUL);\n  /* fold down to 16 bits */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n\n  return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc);\n}\n\n#if LWIP_IPV6\n/**\n * Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.\n * IPv6 addresses are expected to be in network byte order. Will only compute for a\n * portion of the payload.\n *\n * @param p chain of pbufs over that a checksum should be calculated (ip data part)\n * @param src source ipv6 address (used for checksum of pseudo header)\n * @param dst destination ipv6 address (used for checksum of pseudo header)\n * @param proto ipv6 protocol/next header (used for checksum of pseudo header)\n * @param proto_len length of the ipv6 payload (used for checksum of pseudo header)\n * @param chksum_len number of payload bytes used to compute chksum\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\nu16_t\nip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,\n       u16_t chksum_len, ip6_addr_t *src, ip6_addr_t *dest)\n{\n  u32_t acc = 0;\n  u32_t addr;\n  u8_t addr_part;\n\n  for (addr_part = 0; addr_part < 4; addr_part++) {\n    addr = src->addr[addr_part];\n    acc += (addr & 0xffffUL);\n    acc += ((addr >> 16) & 0xffffUL);\n    addr = dest->addr[addr_part];\n    acc += (addr & 0xffffUL);\n    acc += ((addr >> 16) & 0xffffUL);\n  }\n  /* fold down to 16 bits */\n  acc = FOLD_U32T(acc);\n  acc = FOLD_U32T(acc);\n\n  return inet_cksum_pseudo_partial_base(p, proto, proto_len, chksum_len, acc);\n}\n#endif /* LWIP_IPV6 */\n\n/* inet_chksum:\n *\n * Calculates the Internet checksum over a portion of memory. Used primarily for IP\n * and ICMP.\n *\n * @param dataptr start of the buffer to calculate the checksum (no alignment needed)\n * @param len length of the buffer to calculate the checksum\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\n\nu16_t\ninet_chksum(void *dataptr, u16_t len)\n{\n  return ~LWIP_CHKSUM(dataptr, len);\n}\n\n/**\n * Calculate a checksum over a chain of pbufs (without pseudo-header, much like\n * inet_chksum only pbufs are used).\n *\n * @param p pbuf chain over that the checksum should be calculated\n * @return checksum (as u16_t) to be saved directly in the protocol header\n */\nu16_t\ninet_chksum_pbuf(struct pbuf *p)\n{\n  u32_t acc;\n  struct pbuf *q;\n  u8_t swapped;\n\n  acc = 0;\n  swapped = 0;\n  for(q = p; q != NULL; q = q->next) {\n    acc += LWIP_CHKSUM(q->payload, q->len);\n    acc = FOLD_U32T(acc);\n    if (q->len % 2 != 0) {\n      swapped = 1 - swapped;\n      acc = SWAP_BYTES_IN_WORD(acc);\n    }\n  }\n\n  if (swapped) {\n    acc = SWAP_BYTES_IN_WORD(acc);\n  }\n  return (u16_t)~(acc & 0xffffUL);\n}\n\n/* These are some implementations for LWIP_CHKSUM_COPY, which copies data\n * like MEMCPY but generates a checksum at the same time. Since this is a\n * performance-sensitive function, you might want to create your own version\n * in assembly targeted at your hardware by defining it in lwipopts.h:\n *   #define LWIP_CHKSUM_COPY(dst, src, len) your_chksum_copy(dst, src, len)\n */\n\n#if (LWIP_CHKSUM_COPY_ALGORITHM == 1) /* Version #1 */\n/** Safe but slow: first call MEMCPY, then call LWIP_CHKSUM.\n * For architectures with big caches, data might still be in cache when\n * generating the checksum after copying.\n */\nu16_t\nlwip_chksum_copy(void *dst, const void *src, u16_t len)\n{\n  MEMCPY(dst, src, len);\n  return LWIP_CHKSUM(dst, len);\n}\n#endif /* (LWIP_CHKSUM_COPY_ALGORITHM == 1) */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/init.c",
    "content": "/**\n * @file\n * Modules initialization\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/init.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/sockets.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/raw.h\"\n#include \"lwip/udp.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/snmp_msg.h\"\n#include \"lwip/autoip.h\"\n#include \"lwip/igmp.h\"\n#include \"lwip/dns.h\"\n#include \"lwip/timers.h\"\n#include \"netif/etharp.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/nd6.h\"\n#include \"lwip/mld6.h\"\n#include \"lwip/api.h\"\n\n/* Compile-time sanity checks for configuration errors.\n * These can be done independently of LWIP_DEBUG, without penalty.\n */\n#ifndef BYTE_ORDER\n  #error \"BYTE_ORDER is not defined, you have to define it in your cc.h\"\n#endif\n#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV)\n  #error \"If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_UDPLITE)\n  #error \"If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_SNMP)\n  #error \"If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_DHCP)\n  #error \"If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_IGMP)\n  #error \"If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_SNMP)\n  #error \"If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_UDP && LWIP_DNS)\n  #error \"If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h\"\n#endif\n#if !MEMP_MEM_MALLOC /* MEMP_NUM_* checks are disabled when not using the pool allocator */\n#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0))\n  #error \"If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0))\n  #error \"If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0))\n  #error \"If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0))\n  #error \"If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1))\n  #error \"If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h\"\n#endif\n#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0))\n  #error \"If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h\"\n#endif\n/* There must be sufficient timeouts, taking into account requirements of the subsystems. */\n#if LWIP_TIMERS && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)))\n  #error \"MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts\"\n#endif\n#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS))\n  #error \"MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!\"\n#endif\n#endif /* !MEMP_MEM_MALLOC */\n#if (LWIP_TCP && (TCP_WND > 0xffff))\n  #error \"If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h\"\n#endif\n#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff))\n  #error \"If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h\"\n#endif\n#if (LWIP_TCP && (TCP_SND_QUEUELEN < 2))\n  #error \"TCP_SND_QUEUELEN must be at least 2 for no-copy TCP writes to work\"\n#endif\n#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12)))\n  #error \"If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h\"\n#endif\n#if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff))\n  #error \"If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t\"\n#endif\n#if (LWIP_NETIF_API && (NO_SYS==1))\n  #error \"If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h\"\n#endif\n#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1))\n  #error \"If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h\"\n#endif\n#if (!LWIP_NETCONN && LWIP_SOCKET)\n  #error \"If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h\"\n#endif\n#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP)\n  #error \"If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h\"\n#endif\n#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK)\n  #error \"If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h\"\n#endif\n#if (!LWIP_ARP && LWIP_AUTOIP)\n  #error \"If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h\"\n#endif\n#if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0))\n  #error \"If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0))\n  #error \"If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h\"\n#endif\n#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API)))\n  #error \"One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h\"\n#endif\n#if (MEM_LIBC_MALLOC && MEM_USE_POOLS)\n  #error \"MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h\"\n#endif\n#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS)\n  #error \"MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h\"\n#endif\n#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT)\n  #error \"PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf\"\n#endif\n#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT)))\n  #error \"you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST\"\n#endif\n#if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT\n  #error \"PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on\"\n#endif\n#if !LWIP_ETHERNET && (LWIP_ARP || PPPOE_SUPPORT)\n  #error \"LWIP_ETHERNET needs to be turned on for LWIP_ARP or PPPOE_SUPPORT\"\n#endif\n#if (LWIP_IGMP || LWIP_IPV6) && !defined(LWIP_RAND)\n  #error \"When using IGMP or IPv6, LWIP_RAND() needs to be defined to a random-function returning an u32_t random value\"\n#endif\n#if LWIP_TCPIP_CORE_LOCKING_INPUT && !LWIP_TCPIP_CORE_LOCKING\n  #error \"When using LWIP_TCPIP_CORE_LOCKING_INPUT, LWIP_TCPIP_CORE_LOCKING must be enabled, too\"\n#endif\n#if LWIP_TCP && LWIP_NETIF_TX_SINGLE_PBUF && !TCP_OVERSIZE\n  #error \"LWIP_NETIF_TX_SINGLE_PBUF needs TCP_OVERSIZE enabled to create single-pbuf TCP packets\"\n#endif\n#if IP_FRAG && IP_FRAG_USES_STATIC_BUF && LWIP_NETIF_TX_SINGLE_PBUF\n  #error \"LWIP_NETIF_TX_SINGLE_PBUF does not work with IP_FRAG_USES_STATIC_BUF==1 as that creates pbuf queues\"\n#endif\n#if LWIP_NETCONN && LWIP_TCP\n#if NETCONN_COPY != TCP_WRITE_FLAG_COPY\n  #error \"NETCONN_COPY != TCP_WRITE_FLAG_COPY\"\n#endif\n#if NETCONN_MORE != TCP_WRITE_FLAG_MORE\n  #error \"NETCONN_MORE != TCP_WRITE_FLAG_MORE\"\n#endif\n#endif /* LWIP_NETCONN && LWIP_TCP */ \n#if LWIP_SOCKET\n/* Check that the SO_* socket options and SOF_* lwIP-internal flags match */\n#if SO_ACCEPTCONN != SOF_ACCEPTCONN\n  #error \"SO_ACCEPTCONN != SOF_ACCEPTCONN\"\n#endif\n#if SO_REUSEADDR != SOF_REUSEADDR\n  #error \"WARNING: SO_REUSEADDR != SOF_REUSEADDR\"\n#endif\n#if SO_KEEPALIVE != SOF_KEEPALIVE\n  #error \"WARNING: SO_KEEPALIVE != SOF_KEEPALIVE\"\n#endif\n#if SO_BROADCAST != SOF_BROADCAST\n  #error \"WARNING: SO_BROADCAST != SOF_BROADCAST\"\n#endif\n#if SO_LINGER != SOF_LINGER\n  #error \"WARNING: SO_LINGER != SOF_LINGER\"\n#endif\n#endif /* LWIP_SOCKET */\n\n\n/* Compile-time checks for deprecated options.\n */\n#ifdef MEMP_NUM_TCPIP_MSG\n  #error \"MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n#ifdef MEMP_NUM_API_MSG\n  #error \"MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n#ifdef TCP_REXMIT_DEBUG\n  #error \"TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n#ifdef RAW_STATS\n  #error \"RAW_STATS option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n#ifdef ETHARP_QUEUE_FIRST\n  #error \"ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n#ifdef ETHARP_ALWAYS_INSERT\n  #error \"ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h.\"\n#endif\n\n#ifndef LWIP_DISABLE_TCP_SANITY_CHECKS\n#define LWIP_DISABLE_TCP_SANITY_CHECKS  0\n#endif\n#ifndef LWIP_DISABLE_MEMP_SANITY_CHECKS\n#define LWIP_DISABLE_MEMP_SANITY_CHECKS 0\n#endif\n\n/* MEMP sanity checks */\n#if !LWIP_DISABLE_MEMP_SANITY_CHECKS\n#if LWIP_NETCONN\n#if MEMP_MEM_MALLOC\n#if !MEMP_NUM_NETCONN && LWIP_SOCKET\n#error \"lwip_sanity_check: WARNING: MEMP_NUM_NETCONN cannot be 0 when using sockets!\"\n#endif\n#else /* MEMP_MEM_MALLOC */\n#if MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB)\n#error \"lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN. If you know what you are doing, define LWIP_DISABLE_MEMP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#endif /* MEMP_MEM_MALLOC */\n#endif /* LWIP_NETCONN */\n#endif /* !LWIP_DISABLE_MEMP_SANITY_CHECKS */\n\n/* TCP sanity checks */\n#if !LWIP_DISABLE_TCP_SANITY_CHECKS\n#if LWIP_TCP\n#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN)\n  #error \"lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if TCP_SND_BUF < (2 * TCP_MSS)\n  #error \"lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF / TCP_MSS))\n  #error \"lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if TCP_SNDLOWAT >= TCP_SND_BUF\n  #error \"lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than TCP_SND_BUF. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if TCP_SNDQUEUELOWAT >= TCP_SND_QUEUELEN\n  #error \"lwip_sanity_check: WARNING: TCP_SNDQUEUELOWAT must be less than TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if !MEMP_MEM_MALLOC && (PBUF_POOL_BUFSIZE <= (PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))\n  #error \"lwip_sanity_check: WARNING: PBUF_POOL_BUFSIZE does not provide enough space for protocol headers. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if !MEMP_MEM_MALLOC && (TCP_WND > (PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - (PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN))))\n  #error \"lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE * (PBUF_POOL_BUFSIZE - protocol headers). If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#if TCP_WND < TCP_MSS\n  #error \"lwip_sanity_check: WARNING: TCP_WND is smaller than MSS. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.\"\n#endif\n#endif /* LWIP_TCP */\n#endif /* !LWIP_DISABLE_TCP_SANITY_CHECKS */\n\n/**\n * Perform Sanity check of user-configurable values, and initialize all modules.\n */\nvoid\nlwip_init(void)\n{\n  /* Modules initialization */\n  stats_init();\n#if !NO_SYS\n  sys_init();\n#endif /* !NO_SYS */\n  mem_init();\n  memp_init();\n  pbuf_init();\n  netif_init();\n#if LWIP_SOCKET\n  lwip_socket_init();\n#endif /* LWIP_SOCKET */\n  ip_init();\n#if LWIP_ARP\n  etharp_init();\n#endif /* LWIP_ARP */\n#if LWIP_RAW\n  raw_init();\n#endif /* LWIP_RAW */\n#if LWIP_UDP\n  udp_init();\n#endif /* LWIP_UDP */\n#if LWIP_TCP\n  tcp_init();\n#endif /* LWIP_TCP */\n#if LWIP_SNMP\n  snmp_init();\n#endif /* LWIP_SNMP */\n#if LWIP_AUTOIP\n  autoip_init();\n#endif /* LWIP_AUTOIP */\n#if LWIP_IGMP\n  igmp_init();\n#endif /* LWIP_IGMP */\n#if LWIP_DNS\n  dns_init();\n#endif /* LWIP_DNS */\n#if LWIP_IPV6\n  ip6_init();\n  nd6_init();\n#if LWIP_IPV6_MLD\n  mld6_init();\n#endif /* LWIP_IPV6_MLD */\n#endif /* LWIP_IPV6 */\n\n#if LWIP_TIMERS\n  sys_timeouts_init();\n#endif /* LWIP_TIMERS */\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv4/icmp.c",
    "content": "/**\n * @file\n * ICMP - Internet Control Message Protocol\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n/* Some ICMP messages should be passed to the transport protocols. This\n   is not implemented. */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/icmp.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/def.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/snmp.h\"\n\n#include <string.h>\n\n/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be\n * used to modify and send a response packet (and to 1 if this is not the case,\n * e.g. when link header is stripped of when receiving) */\n#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN\n#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1\n#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */\n\n/* The amount of data from the original packet to return in a dest-unreachable */\n#define ICMP_DEST_UNREACH_DATASIZE 8\n\nstatic void icmp_send_response(struct pbuf *p, u8_t type, u8_t code);\n\n/**\n * Processes ICMP input packets, called from ip_input().\n *\n * Currently only processes icmp echo requests and sends\n * out the echo response.\n *\n * @param p the icmp echo request packet, p->payload pointing to the icmp header\n * @param inp the netif on which this packet was received\n */\nvoid\nicmp_input(struct pbuf *p, struct netif *inp)\n{\n  u8_t type;\n#ifdef LWIP_DEBUG\n  u8_t code;\n#endif /* LWIP_DEBUG */\n  struct icmp_echo_hdr *iecho;\n  struct ip_hdr *iphdr;\n  s16_t hlen;\n\n  ICMP_STATS_INC(icmp.recv);\n  snmp_inc_icmpinmsgs();\n\n  iphdr = (struct ip_hdr *)ip_current_header();\n  hlen = IPH_HL(iphdr) * 4;\n  if (p->len < sizeof(u16_t)*2) {\n    LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: short ICMP (%\"U16_F\" bytes) received\\n\", p->tot_len));\n    goto lenerr;\n  }\n\n  type = *((u8_t *)p->payload);\n#ifdef LWIP_DEBUG\n  code = *(((u8_t *)p->payload)+1);\n#endif /* LWIP_DEBUG */\n  switch (type) {\n  case ICMP_ER:\n    /* This is OK, echo reply might have been parsed by a raw PCB\n       (as obviously, an echo request has been sent, too). */\n    break; \n  case ICMP_ECHO:\n#if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING\n    {\n      int accepted = 1;\n#if !LWIP_MULTICAST_PING\n      /* multicast destination address? */\n      if (ip_addr_ismulticast(ip_current_dest_addr())) {\n        accepted = 0;\n      }\n#endif /* LWIP_MULTICAST_PING */\n#if !LWIP_BROADCAST_PING\n      /* broadcast destination address? */\n      if (ip_addr_isbroadcast(ip_current_dest_addr(), inp)) {\n        accepted = 0;\n      }\n#endif /* LWIP_BROADCAST_PING */\n      /* broadcast or multicast destination address not acceptd? */\n      if (!accepted) {\n        LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: Not echoing to multicast or broadcast pings\\n\"));\n        ICMP_STATS_INC(icmp.err);\n        pbuf_free(p);\n        return;\n      }\n    }\n#endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */\n    LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: ping\\n\"));\n    if (p->tot_len < sizeof(struct icmp_echo_hdr)) {\n      LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: bad ICMP echo received\\n\"));\n      goto lenerr;\n    }\n    if (inet_chksum_pbuf(p) != 0) {\n      LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: checksum failed for received ICMP echo\\n\"));\n      pbuf_free(p);\n      ICMP_STATS_INC(icmp.chkerr);\n      snmp_inc_icmpinerrors();\n      return;\n    }\n#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN\n    if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) {\n      /* p is not big enough to contain link headers\n       * allocate a new one and copy p into it\n       */\n      struct pbuf *r;\n      /* switch p->payload to ip header */\n      if (pbuf_header(p, hlen)) {\n        LWIP_ASSERT(\"icmp_input: moving p->payload to ip header failed\\n\", 0);\n        goto memerr;\n      }\n      /* allocate new packet buffer with space for link headers */\n      r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM);\n      if (r == NULL) {\n        LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: allocating new pbuf failed\\n\"));\n        goto memerr;\n      }\n      LWIP_ASSERT(\"check that first pbuf can hold struct the ICMP header\",\n                  (r->len >= hlen + sizeof(struct icmp_echo_hdr)));\n      /* copy the whole packet including ip header */\n      if (pbuf_copy(r, p) != ERR_OK) {\n        LWIP_ASSERT(\"icmp_input: copying to new pbuf failed\\n\", 0);\n        goto memerr;\n      }\n      iphdr = (struct ip_hdr *)r->payload;\n      /* switch r->payload back to icmp header */\n      if (pbuf_header(r, -hlen)) {\n        LWIP_ASSERT(\"icmp_input: restoring original p->payload failed\\n\", 0);\n        goto memerr;\n      }\n      /* free the original p */\n      pbuf_free(p);\n      /* we now have an identical copy of p that has room for link headers */\n      p = r;\n    } else {\n      /* restore p->payload to point to icmp header */\n      if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) {\n        LWIP_ASSERT(\"icmp_input: restoring original p->payload failed\\n\", 0);\n        goto memerr;\n      }\n    }\n#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */\n    /* At this point, all checks are OK. */\n    /* We generate an answer by switching the dest and src ip addresses,\n     * setting the icmp type to ECHO_RESPONSE and updating the checksum. */\n    iecho = (struct icmp_echo_hdr *)p->payload;\n    ip_addr_copy(iphdr->src, *ip_current_dest_addr());\n    ip_addr_copy(iphdr->dest, *ip_current_src_addr());\n    ICMPH_TYPE_SET(iecho, ICMP_ER);\n#if CHECKSUM_GEN_ICMP\n    /* adjust the checksum */\n    if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) {\n      iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1;\n    } else {\n      iecho->chksum += PP_HTONS(ICMP_ECHO << 8);\n    }\n#else /* CHECKSUM_GEN_ICMP */\n    iecho->chksum = 0;\n#endif /* CHECKSUM_GEN_ICMP */\n\n    /* Set the correct TTL and recalculate the header checksum. */\n    IPH_TTL_SET(iphdr, ICMP_TTL);\n    IPH_CHKSUM_SET(iphdr, 0);\n#if CHECKSUM_GEN_IP\n    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN));\n#endif /* CHECKSUM_GEN_IP */\n\n    ICMP_STATS_INC(icmp.xmit);\n    /* increase number of messages attempted to send */\n    snmp_inc_icmpoutmsgs();\n    /* increase number of echo replies attempted to send */\n    snmp_inc_icmpoutechoreps();\n\n    if(pbuf_header(p, hlen)) {\n      LWIP_ASSERT(\"Can't move over header in packet\", 0);\n    } else {\n      err_t ret;\n      /* send an ICMP packet, src addr is the dest addr of the curren packet */\n      ret = ip_output_if(p, ip_current_dest_addr(), IP_HDRINCL,\n                   ICMP_TTL, 0, IP_PROTO_ICMP, inp);\n      if (ret != ERR_OK) {\n        LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: ip_output_if returned an error: %c.\\n\", ret));\n      }\n    }\n    break;\n  default:\n    LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_input: ICMP type %\"S16_F\" code %\"S16_F\" not supported.\\n\", \n                (s16_t)type, (s16_t)code));\n    ICMP_STATS_INC(icmp.proterr);\n    ICMP_STATS_INC(icmp.drop);\n  }\n  pbuf_free(p);\n  return;\nlenerr:\n  pbuf_free(p);\n  ICMP_STATS_INC(icmp.lenerr);\n  snmp_inc_icmpinerrors();\n  return;\n#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN\nmemerr:\n  pbuf_free(p);\n  ICMP_STATS_INC(icmp.err);\n  snmp_inc_icmpinerrors();\n  return;\n#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */\n}\n\n/**\n * Send an icmp 'destination unreachable' packet, called from ip_input() if\n * the transport layer protocol is unknown and from udp_input() if the local\n * port is not bound.\n *\n * @param p the input packet for which the 'unreachable' should be sent,\n *          p->payload pointing to the IP header\n * @param t type of the 'unreachable' packet\n */\nvoid\nicmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t)\n{\n  icmp_send_response(p, ICMP_DUR, t);\n}\n\n#if IP_FORWARD || IP_REASSEMBLY\n/**\n * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0.\n *\n * @param p the input packet for which the 'time exceeded' should be sent,\n *          p->payload pointing to the IP header\n * @param t type of the 'time exceeded' packet\n */\nvoid\nicmp_time_exceeded(struct pbuf *p, enum icmp_te_type t)\n{\n  icmp_send_response(p, ICMP_TE, t);\n}\n\n#endif /* IP_FORWARD || IP_REASSEMBLY */\n\n/**\n * Send an icmp packet in response to an incoming packet.\n *\n * @param p the input packet for which the 'unreachable' should be sent,\n *          p->payload pointing to the IP header\n * @param type Type of the ICMP header\n * @param code Code of the ICMP header\n */\nstatic void\nicmp_send_response(struct pbuf *p, u8_t type, u8_t code)\n{\n  struct pbuf *q;\n  struct ip_hdr *iphdr;\n  /* we can use the echo header here */\n  struct icmp_echo_hdr *icmphdr;\n  ip_addr_t iphdr_src;\n\n  /* ICMP header + IP header + 8 bytes of data */\n  q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE,\n                 PBUF_RAM);\n  if (q == NULL) {\n    LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\\n\"));\n    return;\n  }\n  LWIP_ASSERT(\"check that first pbuf can hold icmp message\",\n             (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE)));\n\n  iphdr = (struct ip_hdr *)p->payload;\n  LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_time_exceeded from \"));\n  ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src));\n  LWIP_DEBUGF(ICMP_DEBUG, (\" to \"));\n  ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest));\n  LWIP_DEBUGF(ICMP_DEBUG, (\"\\n\"));\n\n  icmphdr = (struct icmp_echo_hdr *)q->payload;\n  icmphdr->type = type;\n  icmphdr->code = code;\n  icmphdr->id = 0;\n  icmphdr->seqno = 0;\n\n  /* copy fields from original packet */\n  SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload,\n          IP_HLEN + ICMP_DEST_UNREACH_DATASIZE);\n\n  /* calculate checksum */\n  icmphdr->chksum = 0;\n  icmphdr->chksum = inet_chksum(icmphdr, q->len);\n  ICMP_STATS_INC(icmp.xmit);\n  /* increase number of messages attempted to send */\n  snmp_inc_icmpoutmsgs();\n  /* increase number of destination unreachable messages attempted to send */\n  snmp_inc_icmpouttimeexcds();\n  ip_addr_copy(iphdr_src, iphdr->src);\n  ip_output(q, NULL, &iphdr_src, ICMP_TTL, 0, IP_PROTO_ICMP);\n  pbuf_free(q);\n}\n\n#endif /* LWIP_ICMP */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv4/ip4.c",
    "content": "/**\n * @file\n * This is the IPv4 layer implementation for incoming and outgoing IP traffic.\n * \n * @see ip_frag.c\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/ip_frag.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/icmp.h\"\n#include \"lwip/igmp.h\"\n#include \"lwip/raw.h\"\n#include \"lwip/udp.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/dhcp.h\"\n#include \"lwip/autoip.h\"\n#include \"lwip/stats.h\"\n#include \"arch/perf.h\"\n\n#include <string.h>\n\n/** Set this to 0 in the rare case of wanting to call an extra function to\n * generate the IP checksum (in contrast to calculating it on-the-fly). */\n#ifndef LWIP_INLINE_IP_CHKSUM\n#define LWIP_INLINE_IP_CHKSUM   1\n#endif\n#if LWIP_INLINE_IP_CHKSUM && CHECKSUM_GEN_IP\n#define CHECKSUM_GEN_IP_INLINE  1\n#else\n#define CHECKSUM_GEN_IP_INLINE  0\n#endif\n\n#if LWIP_DHCP || defined(LWIP_IP_ACCEPT_UDP_PORT)\n#define IP_ACCEPT_LINK_LAYER_ADDRESSING 1\n\n/** Some defines for DHCP to let link-layer-addressed packets through while the\n * netif is down.\n * To use this in your own application/protocol, define LWIP_IP_ACCEPT_UDP_PORT\n * to return 1 if the port is accepted and 0 if the port is not accepted.\n */\n#if LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT)\n/* accept DHCP client port and custom port */\n#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (((port) == PP_NTOHS(DHCP_CLIENT_PORT)) \\\n         || (LWIP_IP_ACCEPT_UDP_PORT(port)))\n#elif defined(LWIP_IP_ACCEPT_UDP_PORT) /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */\n/* accept custom port only */\n#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) (LWIP_IP_ACCEPT_UDP_PORT(port))\n#else /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */\n/* accept DHCP client port only */\n#define IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(port) ((port) == PP_NTOHS(DHCP_CLIENT_PORT))\n#endif /* LWIP_DHCP && defined(LWIP_IP_ACCEPT_UDP_PORT) */\n\n#else /* LWIP_DHCP */\n#define IP_ACCEPT_LINK_LAYER_ADDRESSING 0\n#endif /* LWIP_DHCP */\n\n/** Global data for both IPv4 and IPv6 */\nstruct ip_globals ip_data;\n\n/** The IP header ID of the next outgoing IP packet */\nstatic u16_t ip_id;\n\n/**\n * Finds the appropriate network interface for a given IP address. It\n * searches the list of network interfaces linearly. A match is found\n * if the masked IP address of the network interface equals the masked\n * IP address given to the function.\n *\n * @param dest the destination IP address for which to find the route\n * @return the netif on which to send to reach dest\n */\nstruct netif *\nip_route(ip_addr_t *dest)\n{\n  struct netif *netif;\n\n#ifdef LWIP_HOOK_IP4_ROUTE\n  netif = LWIP_HOOK_IP4_ROUTE(dest);\n  if (netif != NULL) {\n    return netif;\n  }\n#endif\n\n  /* iterate through netifs */\n  for (netif = netif_list; netif != NULL; netif = netif->next) {\n    /* network mask matches? */\n    if (netif_is_up(netif)) {\n      if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) {\n        /* return netif on which to forward IP packet */\n        return netif;\n      }\n    }\n  }\n  if ((netif_default == NULL) || (!netif_is_up(netif_default))) {\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip_route: No route to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n      ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));\n    IP_STATS_INC(ip.rterr);\n    snmp_inc_ipoutnoroutes();\n    return NULL;\n  }\n  /* no matching netif found, use default netif */\n  return netif_default;\n}\n\n#if IP_FORWARD\n/**\n * Determine whether an IP address is in a reserved set of addresses\n * that may not be forwarded, or whether datagrams to that destination\n * may be forwarded.\n * @param p the packet to forward\n * @param dest the destination IP address\n * @return 1: can forward 0: discard\n */\nstatic int\nip_canforward(struct pbuf *p)\n{\n  u32_t addr = htonl(ip4_addr_get_u32(ip_current_dest_addr()));\n\n  if (p->flags & PBUF_FLAG_LLBCAST) {\n    /* don't route link-layer broadcasts */\n    return 0;\n  }\n  if ((p->flags & PBUF_FLAG_LLMCAST) && !IP_MULTICAST(addr)) {\n    /* don't route link-layer multicasts unless the destination address is an IP\n       multicast address */\n    return 0;\n  }\n  if (IP_EXPERIMENTAL(addr)) {\n    return 0;\n  }\n  if (IP_CLASSA(addr)) {\n    u32_t net = addr & IP_CLASSA_NET;\n    if ((net == 0) || (net == ((u32_t)IP_LOOPBACKNET << IP_CLASSA_NSHIFT))) {\n      /* don't route loopback packets */\n      return 0;\n    }\n  }\n  return 1;\n}\n\n/**\n * Forwards an IP packet. It finds an appropriate route for the\n * packet, decrements the TTL value of the packet, adjusts the\n * checksum and outputs the packet on the appropriate interface.\n *\n * @param p the packet to forward (p->payload points to IP header)\n * @param iphdr the IP header of the input packet\n * @param inp the netif on which this packet was received\n */\nstatic void\nip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp)\n{\n  struct netif *netif;\n\n  PERF_START;\n\n  if (!ip_canforward(p)) {\n    goto return_noroute;\n  }\n\n  /* RFC3927 2.7: do not forward link-local addresses */\n  if (ip_addr_islinklocal(ip_current_dest_addr())) {\n    LWIP_DEBUGF(IP_DEBUG, (\"ip_forward: not forwarding LLA %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n      ip4_addr1_16(ip_current_dest_addr()), ip4_addr2_16(ip_current_dest_addr()),\n      ip4_addr3_16(ip_current_dest_addr()), ip4_addr4_16(ip_current_dest_addr())));\n    goto return_noroute;\n  }\n\n  /* Find network interface where to forward this IP packet to. */\n  netif = ip_route(ip_current_dest_addr());\n  if (netif == NULL) {\n    LWIP_DEBUGF(IP_DEBUG, (\"ip_forward: no forwarding route for %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\" found\\n\",\n      ip4_addr1_16(ip_current_dest_addr()), ip4_addr2_16(ip_current_dest_addr()),\n      ip4_addr3_16(ip_current_dest_addr()), ip4_addr4_16(ip_current_dest_addr())));\n    /* @todo: send ICMP_DUR_NET? */\n    goto return_noroute;\n  }\n#if !IP_FORWARD_ALLOW_TX_ON_RX_NETIF\n  /* Do not forward packets onto the same network interface on which\n   * they arrived. */\n  if (netif == inp) {\n    LWIP_DEBUGF(IP_DEBUG, (\"ip_forward: not bouncing packets back on incoming interface.\\n\"));\n    goto return_noroute;\n  }\n#endif /* IP_FORWARD_ALLOW_TX_ON_RX_NETIF */\n\n  /* decrement TTL */\n  IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1);\n  /* send ICMP if TTL == 0 */\n  if (IPH_TTL(iphdr) == 0) {\n    snmp_inc_ipinhdrerrors();\n#if LWIP_ICMP\n    /* Don't send ICMP messages in response to ICMP messages */\n    if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) {\n      icmp_time_exceeded(p, ICMP_TE_TTL);\n    }\n#endif /* LWIP_ICMP */\n    return;\n  }\n\n  /* Incrementally update the IP checksum. */\n  if (IPH_CHKSUM(iphdr) >= PP_HTONS(0xffffU - 0x100)) {\n    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + PP_HTONS(0x100) + 1);\n  } else {\n    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + PP_HTONS(0x100));\n  }\n\n  LWIP_DEBUGF(IP_DEBUG, (\"ip_forward: forwarding packet to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n    ip4_addr1_16(ip_current_dest_addr()), ip4_addr2_16(ip_current_dest_addr()),\n    ip4_addr3_16(ip_current_dest_addr()), ip4_addr4_16(ip_current_dest_addr())));\n\n  IP_STATS_INC(ip.fw);\n  IP_STATS_INC(ip.xmit);\n  snmp_inc_ipforwdatagrams();\n\n  PERF_STOP(\"ip_forward\");\n  /* don't fragment if interface has mtu set to 0 [loopif] */\n  if (netif->mtu && (p->tot_len > netif->mtu)) {\n    if ((IPH_OFFSET(iphdr) & PP_NTOHS(IP_DF)) == 0) {\n#if IP_FRAG\n      ip_frag(p, netif, ip_current_dest_addr());\n#else /* IP_FRAG */\n      /* @todo: send ICMP Destination Unreacheable code 13 \"Communication administratively prohibited\"? */\n#endif /* IP_FRAG */\n    } else {\n      /* send ICMP Destination Unreacheable code 4: \"Fragmentation Needed and DF Set\" */\n      icmp_dest_unreach(p, ICMP_DUR_FRAG);\n    }\n    return;\n  }\n  /* transmit pbuf on chosen interface */\n  netif->output(netif, p, ip_current_dest_addr());\n  return;\nreturn_noroute:\n  snmp_inc_ipoutnoroutes();\n}\n#endif /* IP_FORWARD */\n\n/**\n * This function is called by the network interface device driver when\n * an IP packet is received. The function does the basic checks of the\n * IP header such as packet size being at least larger than the header\n * size etc. If the packet was not destined for us, the packet is\n * forwarded (using ip_forward). The IP checksum is always checked.\n *\n * Finally, the packet is sent to the upper layer protocol input function.\n * \n * @param p the received IP packet (p->payload points to IP header)\n * @param inp the netif on which this packet was received\n * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't\n *         processed, but currently always returns ERR_OK)\n */\nerr_t\nip_input(struct pbuf *p, struct netif *inp)\n{\n  struct ip_hdr *iphdr;\n  struct netif *netif;\n  u16_t iphdr_hlen;\n  u16_t iphdr_len;\n#if IP_ACCEPT_LINK_LAYER_ADDRESSING\n  int check_ip_src=1;\n#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */\n\n  IP_STATS_INC(ip.recv);\n  snmp_inc_ipinreceives();\n\n  /* identify the IP header */\n  iphdr = (struct ip_hdr *)p->payload;\n  if (IPH_V(iphdr) != 4) {\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, (\"IP packet dropped due to bad version number %\"U16_F\"\\n\", IPH_V(iphdr)));\n    ip_debug_print(p);\n    pbuf_free(p);\n    IP_STATS_INC(ip.err);\n    IP_STATS_INC(ip.drop);\n    snmp_inc_ipinhdrerrors();\n    return ERR_OK;\n  }\n\n#ifdef LWIP_HOOK_IP4_INPUT\n  if (LWIP_HOOK_IP4_INPUT(p, inp)) {\n    /* the packet has been eaten */\n    return ERR_OK;\n  }\n#endif\n\n  /* obtain IP header length in number of 32-bit words */\n  iphdr_hlen = IPH_HL(iphdr);\n  /* calculate IP header length in bytes */\n  iphdr_hlen *= 4;\n  /* obtain ip length in bytes */\n  iphdr_len = ntohs(IPH_LEN(iphdr));\n\n  /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */\n  if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) {\n    if (iphdr_hlen > p->len) {\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n        (\"IP header (len %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IP packet dropped.\\n\",\n        iphdr_hlen, p->len));\n    }\n    if (iphdr_len > p->tot_len) {\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n        (\"IP (len %\"U16_F\") is longer than pbuf (len %\"U16_F\"), IP packet dropped.\\n\",\n        iphdr_len, p->tot_len));\n    }\n    /* free (drop) packet pbufs */\n    pbuf_free(p);\n    IP_STATS_INC(ip.lenerr);\n    IP_STATS_INC(ip.drop);\n    snmp_inc_ipindiscards();\n    return ERR_OK;\n  }\n\n  /* verify checksum */\n#if CHECKSUM_CHECK_IP\n  if (inet_chksum(iphdr, iphdr_hlen) != 0) {\n\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n      (\"Checksum (0x%\"X16_F\") failed, IP packet dropped.\\n\", inet_chksum(iphdr, iphdr_hlen)));\n    ip_debug_print(p);\n    pbuf_free(p);\n    IP_STATS_INC(ip.chkerr);\n    IP_STATS_INC(ip.drop);\n    snmp_inc_ipinhdrerrors();\n    return ERR_OK;\n  }\n#endif\n\n  /* Trim pbuf. This should have been done at the netif layer,\n   * but we'll do it anyway just to be sure that its done. */\n  pbuf_realloc(p, iphdr_len);\n\n  /* copy IP addresses to aligned ip_addr_t */\n  ip_addr_copy(*ipX_2_ip(&ip_data.current_iphdr_dest), iphdr->dest);\n  ip_addr_copy(*ipX_2_ip(&ip_data.current_iphdr_src), iphdr->src);\n\n  /* match packet against an interface, i.e. is this packet for us? */\n#if LWIP_IGMP\n  if (ip_addr_ismulticast(ip_current_dest_addr())) {\n    if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, ip_current_dest_addr()))) {\n      netif = inp;\n    } else {\n      netif = NULL;\n    }\n  } else\n#endif /* LWIP_IGMP */\n  {\n    /* start trying with inp. if that's not acceptable, start walking the\n       list of configured netifs.\n       'first' is used as a boolean to mark whether we started walking the list */\n    int first = 1;\n    netif = inp;\n    do {\n      LWIP_DEBUGF(IP_DEBUG, (\"ip_input: iphdr->dest 0x%\"X32_F\" netif->ip_addr 0x%\"X32_F\" (0x%\"X32_F\", 0x%\"X32_F\", 0x%\"X32_F\")\\n\",\n          ip4_addr_get_u32(&iphdr->dest), ip4_addr_get_u32(&netif->ip_addr),\n          ip4_addr_get_u32(&iphdr->dest) & ip4_addr_get_u32(&netif->netmask),\n          ip4_addr_get_u32(&netif->ip_addr) & ip4_addr_get_u32(&netif->netmask),\n          ip4_addr_get_u32(&iphdr->dest) & ~ip4_addr_get_u32(&netif->netmask)));\n\n      /* interface is up and configured? */\n      if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) {\n        /* unicast to this interface address? */\n        if (ip_addr_cmp(ip_current_dest_addr(), &(netif->ip_addr)) ||\n            /* or broadcast on this interface network address? */\n            ip_addr_isbroadcast(ip_current_dest_addr(), netif)) {\n          LWIP_DEBUGF(IP_DEBUG, (\"ip_input: packet accepted on interface %c%c\\n\",\n              netif->name[0], netif->name[1]));\n          /* break out of for loop */\n          break;\n        }\n#if LWIP_AUTOIP\n        /* connections to link-local addresses must persist after changing\n           the netif's address (RFC3927 ch. 1.9) */\n        if ((netif->autoip != NULL) &&\n            ip_addr_cmp(ip_current_dest_addr(), &(netif->autoip->llipaddr))) {\n          LWIP_DEBUGF(IP_DEBUG, (\"ip_input: LLA packet accepted on interface %c%c\\n\",\n              netif->name[0], netif->name[1]));\n          /* break out of for loop */\n          break;\n        }\n#endif /* LWIP_AUTOIP */\n      }\n      if (first) {\n        first = 0;\n        netif = netif_list;\n      } else {\n        netif = netif->next;\n      }\n      if (netif == inp) {\n        netif = netif->next;\n      }\n    } while(netif != NULL);\n  }\n\n#if IP_ACCEPT_LINK_LAYER_ADDRESSING\n  /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed\n   * using link layer addressing (such as Ethernet MAC) so we must not filter on IP.\n   * According to RFC 1542 section 3.1.1, referred by RFC 2131).\n   *\n   * If you want to accept private broadcast communication while a netif is down,\n   * define LWIP_IP_ACCEPT_UDP_PORT(dst_port), e.g.:\n   *\n   * #define LWIP_IP_ACCEPT_UDP_PORT(dst_port) ((dst_port) == PP_NTOHS(12345))\n   */\n  if (netif == NULL) {\n    /* remote port is DHCP server? */\n    if (IPH_PROTO(iphdr) == IP_PROTO_UDP) {\n      struct udp_hdr *udphdr = (struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen);\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, (\"ip_input: UDP packet to DHCP client port %\"U16_F\"\\n\",\n        ntohs(udphdr->dest)));\n      if (IP_ACCEPT_LINK_LAYER_ADDRESSED_PORT(udphdr->dest)) {\n        LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, (\"ip_input: DHCP packet accepted.\\n\"));\n        netif = inp;\n        check_ip_src = 0;\n      }\n    }\n  }\n#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */\n\n  /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */\n#if IP_ACCEPT_LINK_LAYER_ADDRESSING\n  /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */\n  if (check_ip_src && !ip_addr_isany(ip_current_src_addr()))\n#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */\n  {  if ((ip_addr_isbroadcast(ip_current_src_addr(), inp)) ||\n         (ip_addr_ismulticast(ip_current_src_addr()))) {\n      /* packet source is not valid */\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, (\"ip_input: packet source is not valid.\\n\"));\n      /* free (drop) packet pbufs */\n      pbuf_free(p);\n      IP_STATS_INC(ip.drop);\n      snmp_inc_ipinaddrerrors();\n      snmp_inc_ipindiscards();\n      return ERR_OK;\n    }\n  }\n\n  /* if we're pretending we are everyone for TCP, assume the packet is for source interface if it\n     isn't for a local address */\n  if (netif == NULL && (inp->flags & NETIF_FLAG_PRETEND_TCP) && IPH_PROTO(iphdr) == IP_PROTO_TCP) {\n      netif = inp;\n  }\n\n  /* packet not for us? */\n  if (netif == NULL) {\n    /* packet not for us, route or discard */\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, (\"ip_input: packet not for us.\\n\"));\n#if IP_FORWARD\n    /* non-broadcast packet? */\n    if (!ip_addr_isbroadcast(ip_current_dest_addr(), inp)) {\n      /* try to forward IP packet on (other) interfaces */\n      ip_forward(p, iphdr, inp);\n    } else\n#endif /* IP_FORWARD */\n    {\n      snmp_inc_ipinaddrerrors();\n      snmp_inc_ipindiscards();\n    }\n    pbuf_free(p);\n    return ERR_OK;\n  }\n  /* packet consists of multiple fragments? */\n  if ((IPH_OFFSET(iphdr) & PP_HTONS(IP_OFFMASK | IP_MF)) != 0) {\n#if IP_REASSEMBLY /* packet fragment reassembly code present? */\n    LWIP_DEBUGF(IP_DEBUG, (\"IP packet is a fragment (id=0x%04\"X16_F\" tot_len=%\"U16_F\" len=%\"U16_F\" MF=%\"U16_F\" offset=%\"U16_F\"), calling ip_reass()\\n\",\n      ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & PP_HTONS(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8));\n    /* reassemble the packet*/\n    p = ip_reass(p);\n    /* packet not fully reassembled yet? */\n    if (p == NULL) {\n      return ERR_OK;\n    }\n    iphdr = (struct ip_hdr *)p->payload;\n#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */\n    pbuf_free(p);\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"IP packet dropped since it was fragmented (0x%\"X16_F\") (while IP_REASSEMBLY == 0).\\n\",\n      ntohs(IPH_OFFSET(iphdr))));\n    IP_STATS_INC(ip.opterr);\n    IP_STATS_INC(ip.drop);\n    /* unsupported protocol feature */\n    snmp_inc_ipinunknownprotos();\n    return ERR_OK;\n#endif /* IP_REASSEMBLY */\n  }\n\n#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */\n\n#if LWIP_IGMP\n  /* there is an extra \"router alert\" option in IGMP messages which we allow for but do not police */\n  if((iphdr_hlen > IP_HLEN) &&  (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) {\n#else\n  if (iphdr_hlen > IP_HLEN) {\n#endif /* LWIP_IGMP */\n    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\\n\"));\n    pbuf_free(p);\n    IP_STATS_INC(ip.opterr);\n    IP_STATS_INC(ip.drop);\n    /* unsupported protocol feature */\n    snmp_inc_ipinunknownprotos();\n    return ERR_OK;\n  }\n#endif /* IP_OPTIONS_ALLOWED == 0 */\n\n  /* send to upper layers */\n  LWIP_DEBUGF(IP_DEBUG, (\"ip_input: \\n\"));\n  ip_debug_print(p);\n  LWIP_DEBUGF(IP_DEBUG, (\"ip_input: p->len %\"U16_F\" p->tot_len %\"U16_F\"\\n\", p->len, p->tot_len));\n\n  ip_data.current_netif = inp;\n  ip_data.current_ip4_header = iphdr;\n  ip_data.current_ip_header_tot_len = IPH_HL(iphdr) * 4;\n\n#if LWIP_RAW\n  /* raw input did not eat the packet? */\n  if (raw_input(p, inp) == 0)\n#endif /* LWIP_RAW */\n  {\n    pbuf_header(p, -iphdr_hlen); /* Move to payload, no check necessary. */\n\n    switch (IPH_PROTO(iphdr)) {\n#if LWIP_UDP\n    case IP_PROTO_UDP:\n#if LWIP_UDPLITE\n    case IP_PROTO_UDPLITE:\n#endif /* LWIP_UDPLITE */\n      snmp_inc_ipindelivers();\n      udp_input(p, inp);\n      break;\n#endif /* LWIP_UDP */\n#if LWIP_TCP\n    case IP_PROTO_TCP:\n      snmp_inc_ipindelivers();\n      tcp_input(p, inp);\n      break;\n#endif /* LWIP_TCP */\n#if LWIP_ICMP\n    case IP_PROTO_ICMP:\n      snmp_inc_ipindelivers();\n      icmp_input(p, inp);\n      break;\n#endif /* LWIP_ICMP */\n#if LWIP_IGMP\n    case IP_PROTO_IGMP:\n      igmp_input(p, inp, ip_current_dest_addr());\n      break;\n#endif /* LWIP_IGMP */\n    default:\n#if LWIP_ICMP\n      /* send ICMP destination protocol unreachable unless is was a broadcast */\n      if (!ip_addr_isbroadcast(ip_current_dest_addr(), inp) &&\n          !ip_addr_ismulticast(ip_current_dest_addr())) {\n        pbuf_header(p, iphdr_hlen); /* Move to ip header, no check necessary. */\n        p->payload = iphdr;\n        icmp_dest_unreach(p, ICMP_DUR_PROTO);\n      }\n#endif /* LWIP_ICMP */\n      pbuf_free(p);\n\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"Unsupported transport protocol %\"U16_F\"\\n\", IPH_PROTO(iphdr)));\n\n      IP_STATS_INC(ip.proterr);\n      IP_STATS_INC(ip.drop);\n      snmp_inc_ipinunknownprotos();\n    }\n  }\n\n  /* @todo: this is not really necessary... */\n  ip_data.current_netif = NULL;\n  ip_data.current_ip4_header = NULL;\n  ip_data.current_ip_header_tot_len = 0;\n  ip_addr_set_any(ip_current_src_addr());\n  ip_addr_set_any(ip_current_dest_addr());\n\n  return ERR_OK;\n}\n\n/**\n * Sends an IP packet on a network interface. This function constructs\n * the IP header and calculates the IP header checksum. If the source\n * IP address is NULL, the IP address of the outgoing network\n * interface is filled in as source address.\n * If the destination IP address is IP_HDRINCL, p is assumed to already\n * include an IP header and p->payload points to it instead of the data.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an IP\n            header and p->payload points to that IP header)\n * @param src the source IP address to send from (if src == IP_ADDR_ANY, the\n *         IP  address of the netif used to send is used as source address)\n * @param dest the destination IP address to send the packet to\n * @param ttl the TTL value to be set in the IP header\n * @param tos the TOS value to be set in the IP header\n * @param proto the PROTOCOL to be set in the IP header\n * @param netif the netif on which to send this packet\n * @return ERR_OK if the packet was sent OK\n *         ERR_BUF if p doesn't have enough space for IP/LINK headers\n *         returns errors returned by netif->output\n *\n * @note ip_id: RFC791 \"some host may be able to simply use\n *  unique identifiers independent of destination\"\n */\nerr_t\nip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n             u8_t ttl, u8_t tos,\n             u8_t proto, struct netif *netif)\n{\n#if IP_OPTIONS_SEND\n  return ip_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0);\n}\n\n/**\n * Same as ip_output_if() but with the possibility to include IP options:\n *\n * @ param ip_options pointer to the IP options, copied into the IP header\n * @ param optlen length of ip_options\n */\nerr_t ip_output_if_opt(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n       u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options,\n       u16_t optlen)\n{\n#endif /* IP_OPTIONS_SEND */\n  struct ip_hdr *iphdr;\n  ip_addr_t dest_addr;\n#if CHECKSUM_GEN_IP_INLINE\n  u32_t chk_sum = 0;\n#endif /* CHECKSUM_GEN_IP_INLINE */\n\n  /* pbufs passed to IP must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  snmp_inc_ipoutrequests();\n\n  /* Should the IP header be generated or is it already included in p? */\n  if (dest != IP_HDRINCL) {\n    u16_t ip_hlen = IP_HLEN;\n#if IP_OPTIONS_SEND\n    u16_t optlen_aligned = 0;\n    if (optlen != 0) {\n#if CHECKSUM_GEN_IP_INLINE\n      int i;\n#endif /* CHECKSUM_GEN_IP_INLINE */\n      /* round up to a multiple of 4 */\n      optlen_aligned = ((optlen + 3) & ~3);\n      ip_hlen += optlen_aligned;\n      /* First write in the IP options */\n      if (pbuf_header(p, optlen_aligned)) {\n        LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip_output_if_opt: not enough room for IP options in pbuf\\n\"));\n        IP_STATS_INC(ip.err);\n        snmp_inc_ipoutdiscards();\n        return ERR_BUF;\n      }\n      MEMCPY(p->payload, ip_options, optlen);\n      if (optlen < optlen_aligned) {\n        /* zero the remaining bytes */\n        memset(((char*)p->payload) + optlen, 0, optlen_aligned - optlen);\n      }\n#if CHECKSUM_GEN_IP_INLINE\n      for (i = 0; i < optlen_aligned/2; i++) {\n        chk_sum += ((u16_t*)p->payload)[i];\n      }\n#endif /* CHECKSUM_GEN_IP_INLINE */\n    }\n#endif /* IP_OPTIONS_SEND */\n    /* generate IP header */\n    if (pbuf_header(p, IP_HLEN)) {\n      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip_output: not enough room for IP header in pbuf\\n\"));\n\n      IP_STATS_INC(ip.err);\n      snmp_inc_ipoutdiscards();\n      return ERR_BUF;\n    }\n\n    iphdr = (struct ip_hdr *)p->payload;\n    LWIP_ASSERT(\"check that first pbuf can hold struct ip_hdr\",\n               (p->len >= sizeof(struct ip_hdr)));\n\n    IPH_TTL_SET(iphdr, ttl);\n    IPH_PROTO_SET(iphdr, proto);\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += LWIP_MAKE_U16(proto, ttl);\n#endif /* CHECKSUM_GEN_IP_INLINE */\n\n    /* dest cannot be NULL here */\n    ip_addr_copy(iphdr->dest, *dest);\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += ip4_addr_get_u32(&iphdr->dest) & 0xFFFF;\n    chk_sum += ip4_addr_get_u32(&iphdr->dest) >> 16;\n#endif /* CHECKSUM_GEN_IP_INLINE */\n\n    IPH_VHL_SET(iphdr, 4, ip_hlen / 4);\n    IPH_TOS_SET(iphdr, tos);\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += LWIP_MAKE_U16(tos, iphdr->_v_hl);\n#endif /* CHECKSUM_GEN_IP_INLINE */\n    IPH_LEN_SET(iphdr, htons(p->tot_len));\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += iphdr->_len;\n#endif /* CHECKSUM_GEN_IP_INLINE */\n    IPH_OFFSET_SET(iphdr, (u16_t)(0 | (IP_DF << 4)));\n    IPH_ID_SET(iphdr, htons(ip_id));\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += iphdr->_id;\n#endif /* CHECKSUM_GEN_IP_INLINE */\n    ++ip_id;\n\n    if (ip_addr_isany(src)) {\n      ip_addr_copy(iphdr->src, netif->ip_addr);\n    } else {\n      /* src cannot be NULL here */\n      ip_addr_copy(iphdr->src, *src);\n    }\n\n#if CHECKSUM_GEN_IP_INLINE\n    chk_sum += ip4_addr_get_u32(&iphdr->src) & 0xFFFF;\n    chk_sum += ip4_addr_get_u32(&iphdr->src) >> 16;\n    chk_sum = (chk_sum >> 16) + (chk_sum & 0xFFFF);\n    chk_sum = (chk_sum >> 16) + chk_sum;\n    chk_sum = ~chk_sum;\n    iphdr->_chksum = chk_sum; /* network order */\n#else /* CHECKSUM_GEN_IP_INLINE */\n    IPH_CHKSUM_SET(iphdr, 0);\n#if CHECKSUM_GEN_IP\n    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen));\n#endif\n#endif /* CHECKSUM_GEN_IP_INLINE */\n  } else {\n    /* IP header already included in p */\n    iphdr = (struct ip_hdr *)p->payload;\n    ip_addr_copy(dest_addr, iphdr->dest);\n    dest = &dest_addr;\n  }\n\n  IP_STATS_INC(ip.xmit);\n\n  LWIP_DEBUGF(IP_DEBUG, (\"ip_output_if: %c%c%\"U16_F\"\\n\", netif->name[0], netif->name[1], netif->num));\n  ip_debug_print(p);\n\n#if ENABLE_LOOPBACK\n  if (ip_addr_cmp(dest, &netif->ip_addr)) {\n    /* Packet to self, enqueue it for loopback */\n    LWIP_DEBUGF(IP_DEBUG, (\"netif_loop_output()\"));\n    return netif_loop_output(netif, p, dest);\n  }\n#if LWIP_IGMP\n  if ((p->flags & PBUF_FLAG_MCASTLOOP) != 0) {\n    netif_loop_output(netif, p, dest);\n  }\n#endif /* LWIP_IGMP */\n#endif /* ENABLE_LOOPBACK */\n#if IP_FRAG\n  /* don't fragment if interface has mtu set to 0 [loopif] */\n  if (netif->mtu && (p->tot_len > netif->mtu)) {\n    return ip_frag(p, netif, dest);\n  }\n#endif /* IP_FRAG */\n\n  LWIP_DEBUGF(IP_DEBUG, (\"netif->output()\"));\n  return netif->output(netif, p, dest);\n}\n\n/**\n * Simple interface to ip_output_if. It finds the outgoing network\n * interface and calls upon ip_output_if to do the actual work.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an IP\n            header and p->payload points to that IP header)\n * @param src the source IP address to send from (if src == IP_ADDR_ANY, the\n *         IP  address of the netif used to send is used as source address)\n * @param dest the destination IP address to send the packet to\n * @param ttl the TTL value to be set in the IP header\n * @param tos the TOS value to be set in the IP header\n * @param proto the PROTOCOL to be set in the IP header\n *\n * @return ERR_RTE if no route is found\n *         see ip_output_if() for more return values\n */\nerr_t\nip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n          u8_t ttl, u8_t tos, u8_t proto)\n{\n  struct netif *netif;\n\n  /* pbufs passed to IP must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  if ((netif = ip_route(dest)) == NULL) {\n    LWIP_DEBUGF(IP_DEBUG, (\"ip_output: No route to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n      ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));\n    IP_STATS_INC(ip.rterr);\n    return ERR_RTE;\n  }\n\n  return ip_output_if(p, src, dest, ttl, tos, proto, netif);\n}\n\n#if LWIP_NETIF_HWADDRHINT\n/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint\n *  before calling ip_output_if.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an IP\n            header and p->payload points to that IP header)\n * @param src the source IP address to send from (if src == IP_ADDR_ANY, the\n *         IP  address of the netif used to send is used as source address)\n * @param dest the destination IP address to send the packet to\n * @param ttl the TTL value to be set in the IP header\n * @param tos the TOS value to be set in the IP header\n * @param proto the PROTOCOL to be set in the IP header\n * @param addr_hint address hint pointer set to netif->addr_hint before\n *        calling ip_output_if()\n *\n * @return ERR_RTE if no route is found\n *         see ip_output_if() for more return values\n */\nerr_t\nip_output_hinted(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n          u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint)\n{\n  struct netif *netif;\n  err_t err;\n\n  /* pbufs passed to IP must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  if ((netif = ip_route(dest)) == NULL) {\n    LWIP_DEBUGF(IP_DEBUG, (\"ip_output: No route to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n      ip4_addr1_16(dest), ip4_addr2_16(dest), ip4_addr3_16(dest), ip4_addr4_16(dest)));\n    IP_STATS_INC(ip.rterr);\n    return ERR_RTE;\n  }\n\n  NETIF_SET_HWADDRHINT(netif, addr_hint);\n  err = ip_output_if(p, src, dest, ttl, tos, proto, netif);\n  NETIF_SET_HWADDRHINT(netif, NULL);\n\n  return err;\n}\n#endif /* LWIP_NETIF_HWADDRHINT*/\n\n#if IP_DEBUG\n/* Print an IP header by using LWIP_DEBUGF\n * @param p an IP packet, p->payload pointing to the IP header\n */\nvoid\nip_debug_print(struct pbuf *p)\n{\n  struct ip_hdr *iphdr = (struct ip_hdr *)p->payload;\n\n  LWIP_DEBUGF(IP_DEBUG, (\"IP header:\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"|%2\"S16_F\" |%2\"S16_F\" |  0x%02\"X16_F\" |     %5\"U16_F\"     | (v, hl, tos, len)\\n\",\n                    IPH_V(iphdr),\n                    IPH_HL(iphdr),\n                    IPH_TOS(iphdr),\n                    ntohs(IPH_LEN(iphdr))));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"|    %5\"U16_F\"      |%\"U16_F\"%\"U16_F\"%\"U16_F\"|    %4\"U16_F\"   | (id, flags, offset)\\n\",\n                    ntohs(IPH_ID(iphdr)),\n                    ntohs(IPH_OFFSET(iphdr)) >> 15 & 1,\n                    ntohs(IPH_OFFSET(iphdr)) >> 14 & 1,\n                    ntohs(IPH_OFFSET(iphdr)) >> 13 & 1,\n                    ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"|  %3\"U16_F\"  |  %3\"U16_F\"  |    0x%04\"X16_F\"     | (ttl, proto, chksum)\\n\",\n                    IPH_TTL(iphdr),\n                    IPH_PROTO(iphdr),\n                    ntohs(IPH_CHKSUM(iphdr))));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"|  %3\"U16_F\"  |  %3\"U16_F\"  |  %3\"U16_F\"  |  %3\"U16_F\"  | (src)\\n\",\n                    ip4_addr1_16(&iphdr->src),\n                    ip4_addr2_16(&iphdr->src),\n                    ip4_addr3_16(&iphdr->src),\n                    ip4_addr4_16(&iphdr->src)));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP_DEBUG, (\"|  %3\"U16_F\"  |  %3\"U16_F\"  |  %3\"U16_F\"  |  %3\"U16_F\"  | (dest)\\n\",\n                    ip4_addr1_16(&iphdr->dest),\n                    ip4_addr2_16(&iphdr->dest),\n                    ip4_addr3_16(&iphdr->dest),\n                    ip4_addr4_16(&iphdr->dest)));\n  LWIP_DEBUGF(IP_DEBUG, (\"+-------------------------------+\\n\"));\n}\n#endif /* IP_DEBUG */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv4/ip4_addr.c",
    "content": "/**\n * @file\n * This is the IPv4 address tools implementation.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n\n/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */\nconst ip_addr_t ip_addr_any = { IPADDR_ANY };\nconst ip_addr_t ip_addr_broadcast = { IPADDR_BROADCAST };\n\n/**\n * Determine if an address is a broadcast address on a network interface \n * \n * @param addr address to be checked\n * @param netif the network interface against which the address is checked\n * @return returns non-zero if the address is a broadcast address\n */\nu8_t\nip4_addr_isbroadcast(u32_t addr, const struct netif *netif)\n{\n  ip_addr_t ipaddr;\n  ip4_addr_set_u32(&ipaddr, addr);\n\n  /* all ones (broadcast) or all zeroes (old skool broadcast) */\n  if ((~addr == IPADDR_ANY) ||\n      (addr == IPADDR_ANY)) {\n    return 1;\n  /* no broadcast support on this network interface? */\n  } else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) {\n    /* the given address cannot be a broadcast address\n     * nor can we check against any broadcast addresses */\n    return 0;\n  /* address matches network interface address exactly? => no broadcast */\n  } else if (addr == ip4_addr_get_u32(&netif->ip_addr)) {\n    return 0;\n  /*  on the same (sub) network... */\n  } else if (ip_addr_netcmp(&ipaddr, &(netif->ip_addr), &(netif->netmask))\n         /* ...and host identifier bits are all ones? =>... */\n          && ((addr & ~ip4_addr_get_u32(&netif->netmask)) ==\n           (IPADDR_BROADCAST & ~ip4_addr_get_u32(&netif->netmask)))) {\n    /* => network broadcast address */\n    return 1;\n  } else {\n    return 0;\n  }\n}\n\n/** Checks if a netmask is valid (starting with ones, then only zeros)\n *\n * @param netmask the IPv4 netmask to check (in network byte order!)\n * @return 1 if the netmask is valid, 0 if it is not\n */\nu8_t\nip4_addr_netmask_valid(u32_t netmask)\n{\n  u32_t mask;\n  u32_t nm_hostorder = lwip_htonl(netmask);\n\n  /* first, check for the first zero */\n  for (mask = 1UL << 31 ; mask != 0; mask >>= 1) {\n    if ((nm_hostorder & mask) == 0) {\n      break;\n    }\n  }\n  /* then check that there is no one */\n  for (; mask != 0; mask >>= 1) {\n    if ((nm_hostorder & mask) != 0) {\n      /* there is a one after the first zero -> invalid */\n      return 0;\n    }\n  }\n  /* no one after the first zero -> valid */\n  return 1;\n}\n\n/* Here for now until needed in other places in lwIP */\n#ifndef isprint\n#define in_range(c, lo, up)  ((u8_t)c >= lo && (u8_t)c <= up)\n#define isprint(c)           in_range(c, 0x20, 0x7f)\n#define isdigit(c)           in_range(c, '0', '9')\n#define isxdigit(c)          (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F'))\n#define islower(c)           in_range(c, 'a', 'z')\n#define isspace(c)           (c == ' ' || c == '\\f' || c == '\\n' || c == '\\r' || c == '\\t' || c == '\\v')\n#endif\n\n/**\n * Ascii internet address interpretation routine.\n * The value returned is in network order.\n *\n * @param cp IP address in ascii represenation (e.g. \"127.0.0.1\")\n * @return ip address in network order\n */\nu32_t\nipaddr_addr(const char *cp)\n{\n  ip_addr_t val;\n\n  if (ipaddr_aton(cp, &val)) {\n    return ip4_addr_get_u32(&val);\n  }\n  return (IPADDR_NONE);\n}\n\n/**\n * Check whether \"cp\" is a valid ascii representation\n * of an Internet address and convert to a binary address.\n * Returns 1 if the address is valid, 0 if not.\n * This replaces inet_addr, the return value from which\n * cannot distinguish between failure and a local broadcast address.\n *\n * @param cp IP address in ascii represenation (e.g. \"127.0.0.1\")\n * @param addr pointer to which to save the ip address in network order\n * @return 1 if cp could be converted to addr, 0 on failure\n */\nint\nipaddr_aton(const char *cp, ip_addr_t *addr)\n{\n  u32_t val;\n  u8_t base;\n  char c;\n  u32_t parts[4];\n  u32_t *pp = parts;\n\n  c = *cp;\n  for (;;) {\n    /*\n     * Collect number up to ``.''.\n     * Values are specified as for C:\n     * 0x=hex, 0=octal, 1-9=decimal.\n     */\n    if (!isdigit(c))\n      return (0);\n    val = 0;\n    base = 10;\n    if (c == '0') {\n      c = *++cp;\n      if (c == 'x' || c == 'X') {\n        base = 16;\n        c = *++cp;\n      } else\n        base = 8;\n    }\n    for (;;) {\n      if (isdigit(c)) {\n        val = (val * base) + (int)(c - '0');\n        c = *++cp;\n      } else if (base == 16 && isxdigit(c)) {\n        val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A'));\n        c = *++cp;\n      } else\n        break;\n    }\n    if (c == '.') {\n      /*\n       * Internet format:\n       *  a.b.c.d\n       *  a.b.c   (with c treated as 16 bits)\n       *  a.b (with b treated as 24 bits)\n       */\n      if (pp >= parts + 3) {\n        return (0);\n      }\n      *pp++ = val;\n      c = *++cp;\n    } else\n      break;\n  }\n  /*\n   * Check for trailing characters.\n   */\n  if (c != '\\0' && !isspace(c)) {\n    return (0);\n  }\n  /*\n   * Concoct the address according to\n   * the number of parts specified.\n   */\n  switch (pp - parts + 1) {\n\n  case 0:\n    return (0);       /* initial nondigit */\n\n  case 1:             /* a -- 32 bits */\n    break;\n\n  case 2:             /* a.b -- 8.24 bits */\n    if (val > 0xffffffUL) {\n      return (0);\n    }\n    val |= parts[0] << 24;\n    break;\n\n  case 3:             /* a.b.c -- 8.8.16 bits */\n    if (val > 0xffff) {\n      return (0);\n    }\n    val |= (parts[0] << 24) | (parts[1] << 16);\n    break;\n\n  case 4:             /* a.b.c.d -- 8.8.8.8 bits */\n    if (val > 0xff) {\n      return (0);\n    }\n    val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);\n    break;\n  default:\n    LWIP_ASSERT(\"unhandled\", 0);\n    break;\n  }\n  if (addr) {\n    ip4_addr_set_u32(addr, htonl(val));\n  }\n  return (1);\n}\n\n/**\n * Convert numeric IP address into decimal dotted ASCII representation.\n * returns ptr to static buffer; not reentrant!\n *\n * @param addr ip address in network order to convert\n * @return pointer to a global static (!) buffer that holds the ASCII\n *         represenation of addr\n */\nchar *\nipaddr_ntoa(const ip_addr_t *addr)\n{\n  static char str[16];\n  return ipaddr_ntoa_r(addr, str, 16);\n}\n\n/**\n * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.\n *\n * @param addr ip address in network order to convert\n * @param buf target buffer where the string is stored\n * @param buflen length of buf\n * @return either pointer to buf which now holds the ASCII\n *         representation of addr or NULL if buf was too small\n */\nchar *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen)\n{\n  u32_t s_addr;\n  char inv[3];\n  char *rp;\n  u8_t *ap;\n  u8_t rem;\n  u8_t n;\n  u8_t i;\n  int len = 0;\n\n  s_addr = ip4_addr_get_u32(addr);\n\n  rp = buf;\n  ap = (u8_t *)&s_addr;\n  for(n = 0; n < 4; n++) {\n    i = 0;\n    do {\n      rem = *ap % (u8_t)10;\n      *ap /= (u8_t)10;\n      inv[i++] = '0' + rem;\n    } while(*ap);\n    while(i--) {\n      if (len++ >= buflen) {\n        return NULL;\n      }\n      *rp++ = inv[i];\n    }\n    if (len++ >= buflen) {\n      return NULL;\n    }\n    *rp++ = '.';\n    ap++;\n  }\n  *--rp = 0;\n  return buf;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv4/ip_frag.c",
    "content": "/**\n * @file\n * This is the IPv4 packet segmentation and reassembly implementation.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Jani Monoses <jani@iv.ro> \n *         Simon Goldschmidt\n * original reassembly code by Adam Dunkels <adam@sics.se>\n * \n */\n\n#include \"lwip/opt.h\"\n#include \"lwip/ip_frag.h\"\n#include \"lwip/def.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/icmp.h\"\n\n#include <string.h>\n\n#if IP_REASSEMBLY\n/**\n * The IP reassembly code currently has the following limitations:\n * - IP header options are not supported\n * - fragments must not overlap (e.g. due to different routes),\n *   currently, overlapping or duplicate fragments are thrown away\n *   if IP_REASS_CHECK_OVERLAP=1 (the default)!\n *\n * @todo: work with IP header options\n */\n\n/** Setting this to 0, you can turn off checking the fragments for overlapping\n * regions. The code gets a little smaller. Only use this if you know that\n * overlapping won't occur on your network! */\n#ifndef IP_REASS_CHECK_OVERLAP\n#define IP_REASS_CHECK_OVERLAP 1\n#endif /* IP_REASS_CHECK_OVERLAP */\n\n/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is\n * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller.\n * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA\n * is set to 1, so one datagram can be reassembled at a time, only. */\n#ifndef IP_REASS_FREE_OLDEST\n#define IP_REASS_FREE_OLDEST 1\n#endif /* IP_REASS_FREE_OLDEST */\n\n#define IP_REASS_FLAG_LASTFRAG 0x01\n\n/** This is a helper struct which holds the starting\n * offset and the ending offset of this fragment to\n * easily chain the fragments.\n * It has the same packing requirements as the IP header, since it replaces\n * the IP header in memory in incoming fragments (after copying it) to keep\n * track of the various fragments. (-> If the IP header doesn't need packing,\n * this struct doesn't need packing, too.)\n */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip_reass_helper {\n  PACK_STRUCT_FIELD(struct pbuf *next_pbuf);\n  PACK_STRUCT_FIELD(u16_t start);\n  PACK_STRUCT_FIELD(u16_t end);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB)  \\\n  (ip_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \\\n   ip_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \\\n   IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0\n\n/* global variables */\nstatic struct ip_reassdata *reassdatagrams;\nstatic u16_t ip_reass_pbufcount;\n\n/* function prototypes */\nstatic void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);\nstatic int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev);\n\n/**\n * Reassembly timer base function\n * for both NO_SYS == 0 and 1 (!).\n *\n * Should be called every 1000 msec (defined by IP_TMR_INTERVAL).\n */\nvoid\nip_reass_tmr(void)\n{\n  struct ip_reassdata *r, *prev = NULL;\n\n  r = reassdatagrams;\n  while (r != NULL) {\n    /* Decrement the timer. Once it reaches 0,\n     * clean up the incomplete fragment assembly */\n    if (r->timer > 0) {\n      r->timer--;\n      LWIP_DEBUGF(IP_REASS_DEBUG, (\"ip_reass_tmr: timer dec %\"U16_F\"\\n\",(u16_t)r->timer));\n      prev = r;\n      r = r->next;\n    } else {\n      /* reassembly timed out */\n      struct ip_reassdata *tmp;\n      LWIP_DEBUGF(IP_REASS_DEBUG, (\"ip_reass_tmr: timer timed out\\n\"));\n      tmp = r;\n      /* get the next pointer before freeing */\n      r = r->next;\n      /* free the helper struct and all enqueued pbufs */\n      ip_reass_free_complete_datagram(tmp, prev);\n     }\n   }\n}\n\n/**\n * Free a datagram (struct ip_reassdata) and all its pbufs.\n * Updates the total count of enqueued pbufs (ip_reass_pbufcount),\n * SNMP counters and sends an ICMP time exceeded packet.\n *\n * @param ipr datagram to free\n * @param prev the previous datagram in the linked list\n * @return the number of pbufs freed\n */\nstatic int\nip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev)\n{\n  u16_t pbufs_freed = 0;\n  u8_t clen;\n  struct pbuf *p;\n  struct ip_reass_helper *iprh;\n\n  LWIP_ASSERT(\"prev != ipr\", prev != ipr);\n  if (prev != NULL) {\n    LWIP_ASSERT(\"prev->next == ipr\", prev->next == ipr);\n  }\n\n  snmp_inc_ipreasmfails();\n#if LWIP_ICMP\n  iprh = (struct ip_reass_helper *)ipr->p->payload;\n  if (iprh->start == 0) {\n    /* The first fragment was received, send ICMP time exceeded. */\n    /* First, de-queue the first pbuf from r->p. */\n    p = ipr->p;\n    ipr->p = iprh->next_pbuf;\n    /* Then, copy the original header into it. */\n    SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN);\n    icmp_time_exceeded(p, ICMP_TE_FRAG);\n    clen = pbuf_clen(p);\n    LWIP_ASSERT(\"pbufs_freed + clen <= 0xffff\", pbufs_freed + clen <= 0xffff);\n    pbufs_freed += clen;\n    pbuf_free(p);\n  }\n#endif /* LWIP_ICMP */\n\n  /* First, free all received pbufs.  The individual pbufs need to be released \n     separately as they have not yet been chained */\n  p = ipr->p;\n  while (p != NULL) {\n    struct pbuf *pcur;\n    iprh = (struct ip_reass_helper *)p->payload;\n    pcur = p;\n    /* get the next pointer before freeing */\n    p = iprh->next_pbuf;\n    clen = pbuf_clen(pcur);\n    LWIP_ASSERT(\"pbufs_freed + clen <= 0xffff\", pbufs_freed + clen <= 0xffff);\n    pbufs_freed += clen;\n    pbuf_free(pcur);\n  }\n  /* Then, unchain the struct ip_reassdata from the list and free it. */\n  ip_reass_dequeue_datagram(ipr, prev);\n  LWIP_ASSERT(\"ip_reass_pbufcount >= clen\", ip_reass_pbufcount >= pbufs_freed);\n  ip_reass_pbufcount -= pbufs_freed;\n\n  return pbufs_freed;\n}\n\n#if IP_REASS_FREE_OLDEST\n/**\n * Free the oldest datagram to make room for enqueueing new fragments.\n * The datagram 'fraghdr' belongs to is not freed!\n *\n * @param fraghdr IP header of the current fragment\n * @param pbufs_needed number of pbufs needed to enqueue\n *        (used for freeing other datagrams if not enough space)\n * @return the number of pbufs freed\n */\nstatic int\nip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed)\n{\n  /* @todo Can't we simply remove the last datagram in the\n   *       linked list behind reassdatagrams?\n   */\n  struct ip_reassdata *r, *oldest, *prev;\n  int pbufs_freed = 0, pbufs_freed_current;\n  int other_datagrams;\n\n  /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs,\n   * but don't free the datagram that 'fraghdr' belongs to! */\n  do {\n    oldest = NULL;\n    prev = NULL;\n    other_datagrams = 0;\n    r = reassdatagrams;\n    while (r != NULL) {\n      if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) {\n        /* Not the same datagram as fraghdr */\n        other_datagrams++;\n        if (oldest == NULL) {\n          oldest = r;\n        } else if (r->timer <= oldest->timer) {\n          /* older than the previous oldest */\n          oldest = r;\n        }\n      }\n      if (r->next != NULL) {\n        prev = r;\n      }\n      r = r->next;\n    }\n    if (oldest != NULL) {\n      pbufs_freed_current = ip_reass_free_complete_datagram(oldest, prev);\n      pbufs_freed += pbufs_freed_current;\n    }\n  } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1));\n  return pbufs_freed;\n}\n#endif /* IP_REASS_FREE_OLDEST */\n\n/**\n * Enqueues a new fragment into the fragment queue\n * @param fraghdr points to the new fragments IP hdr\n * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space)\n * @return A pointer to the queue location into which the fragment was enqueued\n */\nstatic struct ip_reassdata*\nip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen)\n{\n  struct ip_reassdata* ipr;\n  /* No matching previous fragment found, allocate a new reassdata struct */\n  ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA);\n  if (ipr == NULL) {\n#if IP_REASS_FREE_OLDEST\n    if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) {\n      ipr = (struct ip_reassdata *)memp_malloc(MEMP_REASSDATA);\n    }\n    if (ipr == NULL)\n#endif /* IP_REASS_FREE_OLDEST */\n    {\n      IPFRAG_STATS_INC(ip_frag.memerr);\n      LWIP_DEBUGF(IP_REASS_DEBUG,(\"Failed to alloc reassdata struct\\n\"));\n      return NULL;\n    }\n  }\n  memset(ipr, 0, sizeof(struct ip_reassdata));\n  ipr->timer = IP_REASS_MAXAGE;\n\n  /* enqueue the new structure to the front of the list */\n  ipr->next = reassdatagrams;\n  reassdatagrams = ipr;\n  /* copy the ip header for later tests and input */\n  /* @todo: no ip options supported? */\n  SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN);\n  return ipr;\n}\n\n/**\n * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs.\n * @param ipr points to the queue entry to dequeue\n */\nstatic void\nip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev)\n{\n  \n  /* dequeue the reass struct  */\n  if (reassdatagrams == ipr) {\n    /* it was the first in the list */\n    reassdatagrams = ipr->next;\n  } else {\n    /* it wasn't the first, so it must have a valid 'prev' */\n    LWIP_ASSERT(\"sanity check linked list\", prev != NULL);\n    prev->next = ipr->next;\n  }\n\n  /* now we can free the ip_reass struct */\n  memp_free(MEMP_REASSDATA, ipr);\n}\n\n/**\n * Chain a new pbuf into the pbuf list that composes the datagram.  The pbuf list\n * will grow over time as  new pbufs are rx.\n * Also checks that the datagram passes basic continuity checks (if the last\n * fragment was received at least once).\n * @param root_p points to the 'root' pbuf for the current datagram being assembled.\n * @param new_p points to the pbuf for the current fragment\n * @return 0 if invalid, >0 otherwise\n */\nstatic int\nip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p)\n{\n  struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL;\n  struct pbuf *q;\n  u16_t offset,len;\n  struct ip_hdr *fraghdr;\n  int valid = 1;\n\n  /* Extract length and fragment offset from current fragment */\n  fraghdr = (struct ip_hdr*)new_p->payload; \n  len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4;\n  offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8;\n\n  /* overwrite the fragment's ip header from the pbuf with our helper struct,\n   * and setup the embedded helper structure. */\n  /* make sure the struct ip_reass_helper fits into the IP header */\n  LWIP_ASSERT(\"sizeof(struct ip_reass_helper) <= IP_HLEN\",\n              sizeof(struct ip_reass_helper) <= IP_HLEN);\n  iprh = (struct ip_reass_helper*)new_p->payload;\n  iprh->next_pbuf = NULL;\n  iprh->start = offset;\n  iprh->end = offset + len;\n\n  /* Iterate through until we either get to the end of the list (append),\n   * or we find on with a larger offset (insert). */\n  for (q = ipr->p; q != NULL;) {\n    iprh_tmp = (struct ip_reass_helper*)q->payload;\n    if (iprh->start < iprh_tmp->start) {\n      /* the new pbuf should be inserted before this */\n      iprh->next_pbuf = q;\n      if (iprh_prev != NULL) {\n        /* not the fragment with the lowest offset */\n#if IP_REASS_CHECK_OVERLAP\n        if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) {\n          /* fragment overlaps with previous or following, throw away */\n          goto freepbuf;\n        }\n#endif /* IP_REASS_CHECK_OVERLAP */\n        iprh_prev->next_pbuf = new_p;\n      } else {\n        /* fragment with the lowest offset */\n        ipr->p = new_p;\n      }\n      break;\n    } else if(iprh->start == iprh_tmp->start) {\n      /* received the same datagram twice: no need to keep the datagram */\n      goto freepbuf;\n#if IP_REASS_CHECK_OVERLAP\n    } else if(iprh->start < iprh_tmp->end) {\n      /* overlap: no need to keep the new datagram */\n      goto freepbuf;\n#endif /* IP_REASS_CHECK_OVERLAP */\n    } else {\n      /* Check if the fragments received so far have no wholes. */\n      if (iprh_prev != NULL) {\n        if (iprh_prev->end != iprh_tmp->start) {\n          /* There is a fragment missing between the current\n           * and the previous fragment */\n          valid = 0;\n        }\n      }\n    }\n    q = iprh_tmp->next_pbuf;\n    iprh_prev = iprh_tmp;\n  }\n\n  /* If q is NULL, then we made it to the end of the list. Determine what to do now */\n  if (q == NULL) {\n    if (iprh_prev != NULL) {\n      /* this is (for now), the fragment with the highest offset:\n       * chain it to the last fragment */\n#if IP_REASS_CHECK_OVERLAP\n      LWIP_ASSERT(\"check fragments don't overlap\", iprh_prev->end <= iprh->start);\n#endif /* IP_REASS_CHECK_OVERLAP */\n      iprh_prev->next_pbuf = new_p;\n      if (iprh_prev->end != iprh->start) {\n        valid = 0;\n      }\n    } else {\n#if IP_REASS_CHECK_OVERLAP\n      LWIP_ASSERT(\"no previous fragment, this must be the first fragment!\",\n        ipr->p == NULL);\n#endif /* IP_REASS_CHECK_OVERLAP */\n      /* this is the first fragment we ever received for this ip datagram */\n      ipr->p = new_p;\n    }\n  }\n\n  /* At this point, the validation part begins: */\n  /* If we already received the last fragment */\n  if ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0) {\n    /* and had no wholes so far */\n    if (valid) {\n      /* then check if the rest of the fragments is here */\n      /* Check if the queue starts with the first datagram */\n      if (((struct ip_reass_helper*)ipr->p->payload)->start != 0) {\n        valid = 0;\n      } else {\n        /* and check that there are no wholes after this datagram */\n        iprh_prev = iprh;\n        q = iprh->next_pbuf;\n        while (q != NULL) {\n          iprh = (struct ip_reass_helper*)q->payload;\n          if (iprh_prev->end != iprh->start) {\n            valid = 0;\n            break;\n          }\n          iprh_prev = iprh;\n          q = iprh->next_pbuf;\n        }\n        /* if still valid, all fragments are received\n         * (because to the MF==0 already arrived */\n        if (valid) {\n          LWIP_ASSERT(\"sanity check\", ipr->p != NULL);\n          LWIP_ASSERT(\"sanity check\",\n            ((struct ip_reass_helper*)ipr->p->payload) != iprh);\n          LWIP_ASSERT(\"validate_datagram:next_pbuf!=NULL\",\n            iprh->next_pbuf == NULL);\n          LWIP_ASSERT(\"validate_datagram:datagram end!=datagram len\",\n            iprh->end == ipr->datagram_len);\n        }\n      }\n    }\n    /* If valid is 0 here, there are some fragments missing in the middle\n     * (since MF == 0 has already arrived). Such datagrams simply time out if\n     * no more fragments are received... */\n    return valid;\n  }\n  /* If we come here, not all fragments were received, yet! */\n  return 0; /* not yet valid! */\n#if IP_REASS_CHECK_OVERLAP\nfreepbuf:\n  ip_reass_pbufcount -= pbuf_clen(new_p);\n  pbuf_free(new_p);\n  return 0;\n#endif /* IP_REASS_CHECK_OVERLAP */\n}\n\n/**\n * Reassembles incoming IP fragments into an IP datagram.\n *\n * @param p points to a pbuf chain of the fragment\n * @return NULL if reassembly is incomplete, ? otherwise\n */\nstruct pbuf *\nip_reass(struct pbuf *p)\n{\n  struct pbuf *r;\n  struct ip_hdr *fraghdr;\n  struct ip_reassdata *ipr;\n  struct ip_reass_helper *iprh;\n  u16_t offset, len;\n  u8_t clen;\n  struct ip_reassdata *ipr_prev = NULL;\n\n  IPFRAG_STATS_INC(ip_frag.recv);\n  snmp_inc_ipreasmreqds();\n\n  fraghdr = (struct ip_hdr*)p->payload;\n\n  if ((IPH_HL(fraghdr) * 4) != IP_HLEN) {\n    LWIP_DEBUGF(IP_REASS_DEBUG,(\"ip_reass: IP options currently not supported!\\n\"));\n    IPFRAG_STATS_INC(ip_frag.err);\n    goto nullreturn;\n  }\n\n  offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8;\n  len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4;\n\n  /* Check if we are allowed to enqueue more datagrams. */\n  clen = pbuf_clen(p);\n  if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) {\n#if IP_REASS_FREE_OLDEST\n    if (!ip_reass_remove_oldest_datagram(fraghdr, clen) ||\n        ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS))\n#endif /* IP_REASS_FREE_OLDEST */\n    {\n      /* No datagram could be freed and still too many pbufs enqueued */\n      LWIP_DEBUGF(IP_REASS_DEBUG,(\"ip_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\\n\",\n        ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS));\n      IPFRAG_STATS_INC(ip_frag.memerr);\n      /* @todo: send ICMP time exceeded here? */\n      /* drop this pbuf */\n      goto nullreturn;\n    }\n  }\n\n  /* Look for the datagram the fragment belongs to in the current datagram queue,\n   * remembering the previous in the queue for later dequeueing. */\n  for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) {\n    /* Check if the incoming fragment matches the one currently present\n       in the reassembly buffer. If so, we proceed with copying the\n       fragment into the buffer. */\n    if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) {\n      LWIP_DEBUGF(IP_REASS_DEBUG, (\"ip_reass: matching previous fragment ID=%\"X16_F\"\\n\",\n        ntohs(IPH_ID(fraghdr))));\n      IPFRAG_STATS_INC(ip_frag.cachehit);\n      break;\n    }\n    ipr_prev = ipr;\n  }\n\n  if (ipr == NULL) {\n  /* Enqueue a new datagram into the datagram queue */\n    ipr = ip_reass_enqueue_new_datagram(fraghdr, clen);\n    /* Bail if unable to enqueue */\n    if(ipr == NULL) {\n      goto nullreturn;\n    }\n  } else {\n    if (((ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) && \n      ((ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) {\n      /* ipr->iphdr is not the header from the first fragment, but fraghdr is\n       * -> copy fraghdr into ipr->iphdr since we want to have the header\n       * of the first fragment (for ICMP time exceeded and later, for copying\n       * all options, if supported)*/\n      SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN);\n    }\n  }\n  /* Track the current number of pbufs current 'in-flight', in order to limit \n  the number of fragments that may be enqueued at any one time */\n  ip_reass_pbufcount += clen;\n\n  /* At this point, we have either created a new entry or pointing \n   * to an existing one */\n\n  /* check for 'no more fragments', and update queue entry*/\n  if ((IPH_OFFSET(fraghdr) & PP_NTOHS(IP_MF)) == 0) {\n    ipr->flags |= IP_REASS_FLAG_LASTFRAG;\n    ipr->datagram_len = offset + len;\n    LWIP_DEBUGF(IP_REASS_DEBUG,\n     (\"ip_reass: last fragment seen, total len %\"S16_F\"\\n\",\n      ipr->datagram_len));\n  }\n  /* find the right place to insert this pbuf */\n  /* @todo: trim pbufs if fragments are overlapping */\n  if (ip_reass_chain_frag_into_datagram_and_validate(ipr, p)) {\n    /* the totally last fragment (flag more fragments = 0) was received at least\n     * once AND all fragments are received */\n    ipr->datagram_len += IP_HLEN;\n\n    /* save the second pbuf before copying the header over the pointer */\n    r = ((struct ip_reass_helper*)ipr->p->payload)->next_pbuf;\n\n    /* copy the original ip header back to the first pbuf */\n    fraghdr = (struct ip_hdr*)(ipr->p->payload);\n    SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN);\n    IPH_LEN_SET(fraghdr, htons(ipr->datagram_len));\n    IPH_OFFSET_SET(fraghdr, 0);\n    IPH_CHKSUM_SET(fraghdr, 0);\n    /* @todo: do we need to set calculate the correct checksum? */\n    IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN));\n\n    p = ipr->p;\n\n    /* chain together the pbufs contained within the reass_data list. */\n    while(r != NULL) {\n      iprh = (struct ip_reass_helper*)r->payload;\n\n      /* hide the ip header for every succeding fragment */\n      pbuf_header(r, -IP_HLEN);\n      pbuf_cat(p, r);\n      r = iprh->next_pbuf;\n    }\n    /* release the sources allocate for the fragment queue entry */\n    ip_reass_dequeue_datagram(ipr, ipr_prev);\n\n    /* and adjust the number of pbufs currently queued for reassembly. */\n    ip_reass_pbufcount -= pbuf_clen(p);\n\n    /* Return the pbuf chain */\n    return p;\n  }\n  /* the datagram is not (yet?) reassembled completely */\n  LWIP_DEBUGF(IP_REASS_DEBUG,(\"ip_reass_pbufcount: %d out\\n\", ip_reass_pbufcount));\n  return NULL;\n\nnullreturn:\n  LWIP_DEBUGF(IP_REASS_DEBUG,(\"ip_reass: nullreturn\\n\"));\n  IPFRAG_STATS_INC(ip_frag.drop);\n  pbuf_free(p);\n  return NULL;\n}\n#endif /* IP_REASSEMBLY */\n\n#if IP_FRAG\n#if IP_FRAG_USES_STATIC_BUF\nstatic u8_t buf[LWIP_MEM_ALIGN_SIZE(IP_FRAG_MAX_MTU + MEM_ALIGNMENT - 1)];\n#else /* IP_FRAG_USES_STATIC_BUF */\n\n#if !LWIP_NETIF_TX_SINGLE_PBUF\n/** Allocate a new struct pbuf_custom_ref */\nstatic struct pbuf_custom_ref*\nip_frag_alloc_pbuf_custom_ref(void)\n{\n  return (struct pbuf_custom_ref*)memp_malloc(MEMP_FRAG_PBUF);\n}\n\n/** Free a struct pbuf_custom_ref */\nstatic void\nip_frag_free_pbuf_custom_ref(struct pbuf_custom_ref* p)\n{\n  LWIP_ASSERT(\"p != NULL\", p != NULL);\n  memp_free(MEMP_FRAG_PBUF, p);\n}\n\n/** Free-callback function to free a 'struct pbuf_custom_ref', called by\n * pbuf_free. */\nstatic void\nipfrag_free_pbuf_custom(struct pbuf *p)\n{\n  struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref*)p;\n  LWIP_ASSERT(\"pcr != NULL\", pcr != NULL);\n  LWIP_ASSERT(\"pcr == p\", (void*)pcr == (void*)p);\n  if (pcr->original != NULL) {\n    pbuf_free(pcr->original);\n  }\n  ip_frag_free_pbuf_custom_ref(pcr);\n}\n#endif /* !LWIP_NETIF_TX_SINGLE_PBUF */\n#endif /* IP_FRAG_USES_STATIC_BUF */\n\n/**\n * Fragment an IP datagram if too large for the netif.\n *\n * Chop the datagram in MTU sized chunks and send them in order\n * by using a fixed size static memory buffer (PBUF_REF) or\n * point PBUF_REFs into p (depending on IP_FRAG_USES_STATIC_BUF).\n *\n * @param p ip packet to send\n * @param netif the netif on which to send\n * @param dest destination ip address to which to send\n *\n * @return ERR_OK if sent successfully, err_t otherwise\n */\nerr_t \nip_frag(struct pbuf *p, struct netif *netif, ip_addr_t *dest)\n{\n  struct pbuf *rambuf;\n#if IP_FRAG_USES_STATIC_BUF\n  struct pbuf *header;\n#else\n#if !LWIP_NETIF_TX_SINGLE_PBUF\n  struct pbuf *newpbuf;\n#endif\n  struct ip_hdr *original_iphdr;\n#endif\n  struct ip_hdr *iphdr;\n  u16_t nfb;\n  u16_t left, cop;\n  u16_t mtu = netif->mtu;\n  u16_t ofo, omf;\n  u16_t last;\n  u16_t poff = IP_HLEN;\n  u16_t tmp;\n#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF\n  u16_t newpbuflen = 0;\n  u16_t left_to_copy;\n#endif\n\n  /* Get a RAM based MTU sized pbuf */\n#if IP_FRAG_USES_STATIC_BUF\n  /* When using a static buffer, we use a PBUF_REF, which we will\n   * use to reference the packet (without link header).\n   * Layer and length is irrelevant.\n   */\n  rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF);\n  if (rambuf == NULL) {\n    LWIP_DEBUGF(IP_REASS_DEBUG, (\"ip_frag: pbuf_alloc(PBUF_LINK, 0, PBUF_REF) failed\\n\"));\n    return ERR_MEM;\n  }\n  rambuf->tot_len = rambuf->len = mtu;\n  rambuf->payload = LWIP_MEM_ALIGN((void *)buf);\n\n  /* Copy the IP header in it */\n  iphdr = (struct ip_hdr *)rambuf->payload;\n  SMEMCPY(iphdr, p->payload, IP_HLEN);\n#else /* IP_FRAG_USES_STATIC_BUF */\n  original_iphdr = (struct ip_hdr *)p->payload;\n  iphdr = original_iphdr;\n#endif /* IP_FRAG_USES_STATIC_BUF */\n\n  /* Save original offset */\n  tmp = ntohs(IPH_OFFSET(iphdr));\n  ofo = tmp & IP_OFFMASK;\n  omf = tmp & IP_MF;\n\n  left = p->tot_len - IP_HLEN;\n\n  nfb = (mtu - IP_HLEN) / 8;\n\n  while (left) {\n    last = (left <= mtu - IP_HLEN);\n\n    /* Set new offset and MF flag */\n    tmp = omf | (IP_OFFMASK & (ofo));\n    if (!last) {\n      tmp = tmp | IP_MF;\n    }\n\n    /* Fill this fragment */\n    cop = last ? left : nfb * 8;\n\n#if IP_FRAG_USES_STATIC_BUF\n    poff += pbuf_copy_partial(p, (u8_t*)iphdr + IP_HLEN, cop, poff);\n#else /* IP_FRAG_USES_STATIC_BUF */\n#if LWIP_NETIF_TX_SINGLE_PBUF\n    rambuf = pbuf_alloc(PBUF_IP, cop, PBUF_RAM);\n    if (rambuf == NULL) {\n      return ERR_MEM;\n    }\n    LWIP_ASSERT(\"this needs a pbuf in one piece!\",\n      (rambuf->len == rambuf->tot_len) && (rambuf->next == NULL));\n    poff += pbuf_copy_partial(p, rambuf->payload, cop, poff);\n    /* make room for the IP header */\n    if(pbuf_header(rambuf, IP_HLEN)) {\n      pbuf_free(rambuf);\n      return ERR_MEM;\n    }\n    /* fill in the IP header */\n    SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN);\n    iphdr = rambuf->payload;\n#else /* LWIP_NETIF_TX_SINGLE_PBUF */\n    /* When not using a static buffer, create a chain of pbufs.\n     * The first will be a PBUF_RAM holding the link and IP header.\n     * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged,\n     * but limited to the size of an mtu.\n     */\n    rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM);\n    if (rambuf == NULL) {\n      return ERR_MEM;\n    }\n    LWIP_ASSERT(\"this needs a pbuf in one piece!\",\n                (p->len >= (IP_HLEN)));\n    SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN);\n    iphdr = (struct ip_hdr *)rambuf->payload;\n\n    /* Can just adjust p directly for needed offset. */\n    p->payload = (u8_t *)p->payload + poff;\n    p->len -= poff;\n\n    left_to_copy = cop;\n    while (left_to_copy) {\n      struct pbuf_custom_ref *pcr;\n      newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len;\n      /* Is this pbuf already empty? */\n      if (!newpbuflen) {\n        p = p->next;\n        continue;\n      }\n      pcr = ip_frag_alloc_pbuf_custom_ref();\n      if (pcr == NULL) {\n        pbuf_free(rambuf);\n        return ERR_MEM;\n      }\n      /* Mirror this pbuf, although we might not need all of it. */\n      newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, p->payload, newpbuflen);\n      if (newpbuf == NULL) {\n        ip_frag_free_pbuf_custom_ref(pcr);\n        pbuf_free(rambuf);\n        return ERR_MEM;\n      }\n      pbuf_ref(p);\n      pcr->original = p;\n      pcr->pc.custom_free_function = ipfrag_free_pbuf_custom;\n\n      /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain\n       * so that it is removed when pbuf_dechain is later called on rambuf.\n       */\n      pbuf_cat(rambuf, newpbuf);\n      left_to_copy -= newpbuflen;\n      if (left_to_copy) {\n        p = p->next;\n      }\n    }\n    poff = newpbuflen;\n#endif /* LWIP_NETIF_TX_SINGLE_PBUF */\n#endif /* IP_FRAG_USES_STATIC_BUF */\n\n    /* Correct header */\n    IPH_OFFSET_SET(iphdr, htons(tmp));\n    IPH_LEN_SET(iphdr, htons(cop + IP_HLEN));\n    IPH_CHKSUM_SET(iphdr, 0);\n    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN));\n\n#if IP_FRAG_USES_STATIC_BUF\n    if (last) {\n      pbuf_realloc(rambuf, left + IP_HLEN);\n    }\n\n    /* This part is ugly: we alloc a RAM based pbuf for \n     * the link level header for each chunk and then \n     * free it.A PBUF_ROM style pbuf for which pbuf_header\n     * worked would make things simpler.\n     */\n    header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM);\n    if (header != NULL) {\n      pbuf_chain(header, rambuf);\n      netif->output(netif, header, dest);\n      IPFRAG_STATS_INC(ip_frag.xmit);\n      snmp_inc_ipfragcreates();\n      pbuf_free(header);\n    } else {\n      LWIP_DEBUGF(IP_REASS_DEBUG, (\"ip_frag: pbuf_alloc() for header failed\\n\"));\n      pbuf_free(rambuf);\n      return ERR_MEM;\n    }\n#else /* IP_FRAG_USES_STATIC_BUF */\n    /* No need for separate header pbuf - we allowed room for it in rambuf\n     * when allocated.\n     */\n    netif->output(netif, rambuf, dest);\n    IPFRAG_STATS_INC(ip_frag.xmit);\n\n    /* Unfortunately we can't reuse rambuf - the hardware may still be\n     * using the buffer. Instead we free it (and the ensuing chain) and\n     * recreate it next time round the loop. If we're lucky the hardware\n     * will have already sent the packet, the free will really free, and\n     * there will be zero memory penalty.\n     */\n    \n    pbuf_free(rambuf);\n#endif /* IP_FRAG_USES_STATIC_BUF */\n    left -= cop;\n    ofo += nfb;\n  }\n#if IP_FRAG_USES_STATIC_BUF\n  pbuf_free(rambuf);\n#endif /* IP_FRAG_USES_STATIC_BUF */\n  snmp_inc_ipfragoks();\n  return ERR_OK;\n}\n#endif /* IP_FRAG */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv6/icmp6.c",
    "content": "/**\n * @file\n *\n * IPv6 version of ICMP, as per RFC 4443.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_ICMP6 && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/icmp6.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/nd6.h\"\n#include \"lwip/mld6.h\"\n#include \"lwip/stats.h\"\n\n#include <string.h>\n\n#ifndef LWIP_ICMP6_DATASIZE\n#define LWIP_ICMP6_DATASIZE   8\n#endif\n#if LWIP_ICMP6_DATASIZE == 0\n#define LWIP_ICMP6_DATASIZE   8\n#endif\n\n/* Forward declarations */\nstatic void icmp6_send_response(struct pbuf *p, u8_t code, u32_t data, u8_t type);\n\n\n/**\n * Process an input ICMPv6 message. Called by ip6_input.\n *\n * Will generate a reply for echo requests. Other messages are forwarded\n * to nd6_input, or mld6_input.\n *\n * @param p the mld packet, p->payload pointing to the icmpv6 header\n * @param inp the netif on which this packet was received\n */\nvoid\nicmp6_input(struct pbuf *p, struct netif *inp)\n{\n  struct icmp6_hdr *icmp6hdr;\n  struct pbuf * r;\n  ip6_addr_t * reply_src;\n\n  ICMP6_STATS_INC(icmp6.recv);\n\n  /* Check that ICMPv6 header fits in payload */\n  if (p->len < sizeof(struct icmp6_hdr)) {\n    /* drop short packets */\n    pbuf_free(p);\n    ICMP6_STATS_INC(icmp6.lenerr);\n    ICMP6_STATS_INC(icmp6.drop);\n    return;\n  }\n\n  icmp6hdr = (struct icmp6_hdr *)p->payload;\n\n#if LWIP_ICMP6_CHECKSUM_CHECK\n  if (ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->tot_len, ip6_current_src_addr(),\n                        ip6_current_dest_addr()) != 0) {\n    /* Checksum failed */\n    pbuf_free(p);\n    ICMP6_STATS_INC(icmp6.chkerr);\n    ICMP6_STATS_INC(icmp6.drop);\n    return;\n  }\n#endif /* LWIP_ICMP6_CHECKSUM_CHECK */\n\n  switch (icmp6hdr->type) {\n  case ICMP6_TYPE_NA: /* Neighbor advertisement */\n  case ICMP6_TYPE_NS: /* Neighbor solicitation */\n  case ICMP6_TYPE_RA: /* Router advertisement */\n  case ICMP6_TYPE_RD: /* Redirect */\n  case ICMP6_TYPE_PTB: /* Packet too big */\n    nd6_input(p, inp);\n    return;\n    break;\n  case ICMP6_TYPE_RS:\n#if LWIP_IPV6_FORWARD\n    /* TODO implement router functionality */\n#endif\n    break;\n#if LWIP_IPV6_MLD\n  case ICMP6_TYPE_MLQ:\n  case ICMP6_TYPE_MLR:\n  case ICMP6_TYPE_MLD:\n    mld6_input(p, inp);\n    return;\n    break;\n#endif\n  case ICMP6_TYPE_EREQ:\n#if !LWIP_MULTICAST_PING\n    /* multicast destination address? */\n    if (ip6_addr_ismulticast(ip6_current_dest_addr())) {\n      /* drop */\n      pbuf_free(p);\n      ICMP6_STATS_INC(icmp6.drop);\n      return;\n    }\n#endif /* LWIP_MULTICAST_PING */\n\n    /* Allocate reply. */\n    r = pbuf_alloc(PBUF_IP, p->tot_len, PBUF_RAM);\n    if (r == NULL) {\n      /* drop */\n      pbuf_free(p);\n      ICMP6_STATS_INC(icmp6.memerr);\n      return;\n    }\n\n    /* Copy echo request. */\n    if (pbuf_copy(r, p) != ERR_OK) {\n      /* drop */\n      pbuf_free(p);\n      pbuf_free(r);\n      ICMP6_STATS_INC(icmp6.err);\n      return;\n    }\n\n    /* Determine reply source IPv6 address. */\n#if LWIP_MULTICAST_PING\n    if (ip6_addr_ismulticast(ip6_current_dest_addr())) {\n      reply_src = ip6_select_source_address(inp, ip6_current_src_addr());\n      if (reply_src == NULL) {\n        /* drop */\n        pbuf_free(p);\n        pbuf_free(r);\n        ICMP6_STATS_INC(icmp6.rterr);\n        return;\n      }\n    }\n    else\n#endif /* LWIP_MULTICAST_PING */\n    {\n      reply_src = ip6_current_dest_addr();\n    }\n\n    /* Set fields in reply. */\n    ((struct icmp6_echo_hdr *)(r->payload))->type = ICMP6_TYPE_EREP;\n    ((struct icmp6_echo_hdr *)(r->payload))->chksum = 0;\n    ((struct icmp6_echo_hdr *)(r->payload))->chksum = ip6_chksum_pseudo(r,\n        IP6_NEXTH_ICMP6, r->tot_len, reply_src, ip6_current_src_addr());\n\n    /* Send reply. */\n    ICMP6_STATS_INC(icmp6.xmit);\n    ip6_output_if(r, reply_src, ip6_current_src_addr(),\n        LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, inp);\n    pbuf_free(r);\n\n    break;\n  default:\n    ICMP6_STATS_INC(icmp6.proterr);\n    ICMP6_STATS_INC(icmp6.drop);\n    break;\n  }\n\n  pbuf_free(p);\n}\n\n\n/**\n * Send an icmpv6 'destination unreachable' packet.\n *\n * @param p the input packet for which the 'unreachable' should be sent,\n *          p->payload pointing to the IPv6 header\n * @param c ICMPv6 code for the unreachable type\n */\nvoid\nicmp6_dest_unreach(struct pbuf *p, enum icmp6_dur_code c)\n{\n  icmp6_send_response(p, c, 0, ICMP6_TYPE_DUR);\n}\n\n/**\n * Send an icmpv6 'packet too big' packet.\n *\n * @param p the input packet for which the 'packet too big' should be sent,\n *          p->payload pointing to the IPv6 header\n * @param mtu the maximum mtu that we can accept\n */\nvoid\nicmp6_packet_too_big(struct pbuf *p, u32_t mtu)\n{\n  icmp6_send_response(p, 0, mtu, ICMP6_TYPE_PTB);\n}\n\n/**\n * Send an icmpv6 'time exceeded' packet.\n *\n * @param p the input packet for which the 'unreachable' should be sent,\n *          p->payload pointing to the IPv6 header\n * @param c ICMPv6 code for the time exceeded type\n */\nvoid\nicmp6_time_exceeded(struct pbuf *p, enum icmp6_te_code c)\n{\n  icmp6_send_response(p, c, 0, ICMP6_TYPE_TE);\n}\n\n/**\n * Send an icmpv6 'parameter problem' packet.\n *\n * @param p the input packet for which the 'param problem' should be sent,\n *          p->payload pointing to the IP header\n * @param c ICMPv6 code for the param problem type\n * @param pointer the pointer to the byte where the parameter is found\n */\nvoid\nicmp6_param_problem(struct pbuf *p, enum icmp6_pp_code c, u32_t pointer)\n{\n  icmp6_send_response(p, c, pointer, ICMP6_TYPE_PP);\n}\n\n/**\n * Send an ICMPv6 packet in response to an incoming packet.\n *\n * @param p the input packet for which the response should be sent,\n *          p->payload pointing to the IPv6 header\n * @param code Code of the ICMPv6 header\n * @param data Additional 32-bit parameter in the ICMPv6 header\n * @param type Type of the ICMPv6 header\n */\nstatic void\nicmp6_send_response(struct pbuf *p, u8_t code, u32_t data, u8_t type)\n{\n  struct pbuf *q;\n  struct icmp6_hdr *icmp6hdr;\n  ip6_addr_t *reply_src, *reply_dest;\n  ip6_addr_t reply_src_local, reply_dest_local;\n  struct ip6_hdr *ip6hdr;\n  struct netif *netif;\n\n  /* ICMPv6 header + IPv6 header + data */\n  q = pbuf_alloc(PBUF_IP, sizeof(struct icmp6_hdr) + IP6_HLEN + LWIP_ICMP6_DATASIZE,\n                 PBUF_RAM);\n  if (q == NULL) {\n    LWIP_DEBUGF(ICMP_DEBUG, (\"icmp_time_exceeded: failed to allocate pbuf for ICMPv6 packet.\\n\"));\n    ICMP6_STATS_INC(icmp6.memerr);\n    return;\n  }\n  LWIP_ASSERT(\"check that first pbuf can hold icmp 6message\",\n             (q->len >= (sizeof(struct icmp6_hdr) + IP6_HLEN + LWIP_ICMP6_DATASIZE)));\n\n  icmp6hdr = (struct icmp6_hdr *)q->payload;\n  icmp6hdr->type = type;\n  icmp6hdr->code = code;\n  icmp6hdr->data = data;\n\n  /* copy fields from original packet */\n  SMEMCPY((u8_t *)q->payload + sizeof(struct icmp6_hdr), (u8_t *)p->payload,\n          IP6_HLEN + LWIP_ICMP6_DATASIZE);\n\n  /* Get the destination address and netif for this ICMP message. */\n  if ((ip_current_netif() == NULL) ||\n      ((code == ICMP6_TE_FRAG) && (type == ICMP6_TYPE_TE))) {\n    /* Special case, as ip6_current_xxx is either NULL, or points\n     * to a different packet than the one that expired.\n     * We must use the addresses that are stored in the expired packet. */\n    ip6hdr = (struct ip6_hdr *)p->payload;\n    /* copy from packed address to aligned address */\n    ip6_addr_copy(reply_dest_local, ip6hdr->src);\n    ip6_addr_copy(reply_src_local, ip6hdr->dest);\n    reply_dest = &reply_dest_local;\n    reply_src = &reply_src_local;\n    netif = ip6_route(reply_src, reply_dest);\n    if (netif == NULL) {\n      /* drop */\n      pbuf_free(q);\n      ICMP6_STATS_INC(icmp6.rterr);\n      return;\n    }\n  }\n  else {\n    netif = ip_current_netif();\n    reply_dest = ip6_current_src_addr();\n\n    /* Select an address to use as source. */\n    reply_src = ip6_select_source_address(netif, reply_dest);\n    if (reply_src == NULL) {\n      /* drop */\n      pbuf_free(q);\n      ICMP6_STATS_INC(icmp6.rterr);\n      return;\n    }\n  }\n\n  /* calculate checksum */\n  icmp6hdr->chksum = 0;\n  icmp6hdr->chksum = ip6_chksum_pseudo(q, IP6_NEXTH_ICMP6, q->tot_len,\n    reply_src, reply_dest);\n\n  ICMP6_STATS_INC(icmp6.xmit);\n  ip6_output_if(q, reply_src, reply_dest, LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, netif);\n  pbuf_free(q);\n}\n\n#endif /* LWIP_ICMP6 && LWIP_IPV6 */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv6/ip6.c",
    "content": "/**\n * @file\n *\n * IPv6 layer.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/ip6_frag.h\"\n#include \"lwip/icmp6.h\"\n#include \"lwip/raw.h\"\n#include \"lwip/udp.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/dhcp6.h\"\n#include \"lwip/nd6.h\"\n#include \"lwip/mld6.h\"\n#include \"lwip/debug.h\"\n#include \"lwip/stats.h\"\n\n\n/**\n * Finds the appropriate network interface for a given IPv6 address. It tries to select\n * a netif following a sequence of heuristics:\n * 1) if there is only 1 netif, return it\n * 2) if the destination is a link-local address, try to match the src address to a netif.\n *    this is a tricky case because with multiple netifs, link-local addresses only have\n *    meaning within a particular subnet/link.\n * 3) tries to match the destination subnet to a configured address\n * 4) tries to find a router\n * 5) tries to match the source address to the netif\n * 6) returns the default netif, if configured\n *\n * @param src the source IPv6 address, if known\n * @param dest the destination IPv6 address for which to find the route\n * @return the netif on which to send to reach dest\n */\nstruct netif *\nip6_route(struct ip6_addr *src, struct ip6_addr *dest)\n{\n  struct netif *netif;\n  s8_t i;\n\n  /* If single netif configuration, fast return. */\n  if ((netif_list != NULL) && (netif_list->next == NULL)) {\n    return netif_list;\n  }\n\n  /* Special processing for link-local addresses. */\n  if (ip6_addr_islinklocal(dest)) {\n    if (ip6_addr_isany(src)) {\n      /* Use default netif. */\n      return netif_default;\n    }\n\n    /* Try to find the netif for the source address. */\n    for(netif = netif_list; netif != NULL; netif = netif->next) {\n      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n        if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n            ip6_addr_cmp(src, netif_ip6_addr(netif, i))) {\n          return netif;\n        }\n      }\n    }\n\n    /* netif not found, use default netif */\n    return netif_default;\n  }\n\n  /* See if the destination subnet matches a configured address. */\n  for(netif = netif_list; netif != NULL; netif = netif->next) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n      if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n          ip6_addr_netcmp(dest, netif_ip6_addr(netif, i))) {\n        return netif;\n      }\n    }\n  }\n\n  /* Get the netif for a suitable router. */\n  i = nd6_select_router(dest, NULL);\n  if (i >= 0) {\n    if (default_router_list[i].neighbor_entry != NULL) {\n      if (default_router_list[i].neighbor_entry->netif != NULL) {\n        return default_router_list[i].neighbor_entry->netif;\n      }\n    }\n  }\n\n  /* try with the netif that matches the source address. */\n  if (!ip6_addr_isany(src)) {\n    for(netif = netif_list; netif != NULL; netif = netif->next) {\n      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n        if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n            ip6_addr_cmp(src, netif_ip6_addr(netif, i))) {\n          return netif;\n        }\n      }\n    }\n  }\n\n  /* no matching netif found, use default netif */\n  return netif_default;\n}\n\n/**\n * Select the best IPv6 source address for a given destination\n * IPv6 address. Loosely follows RFC 3484. \"Strong host\" behavior\n * is assumed.\n *\n * @param netif the netif on which to send a packet\n * @param dest the destination we are trying to reach\n * @return the most suitable source address to use, or NULL if no suitable\n *         source address is found\n */\nip6_addr_t *\nip6_select_source_address(struct netif *netif, ip6_addr_t * dest)\n{\n  ip6_addr_t * src = NULL;\n  u8_t i;\n\n  /* If dest is link-local, choose a link-local source. */\n  if (ip6_addr_islinklocal(dest) || ip6_addr_ismulticast_linklocal(dest) || ip6_addr_ismulticast_iflocal(dest)) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n      if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n          ip6_addr_islinklocal(netif_ip6_addr(netif, i))) {\n        return netif_ip6_addr(netif, i);\n      }\n    }\n  }\n\n  /* Choose a site-local with matching prefix. */\n  if (ip6_addr_issitelocal(dest) || ip6_addr_ismulticast_sitelocal(dest)) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n      if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n          ip6_addr_issitelocal(netif_ip6_addr(netif, i)) &&\n          ip6_addr_netcmp(dest, netif_ip6_addr(netif, i))) {\n        return netif_ip6_addr(netif, i);\n      }\n    }\n  }\n\n  /* Choose a unique-local with matching prefix. */\n  if (ip6_addr_isuniquelocal(dest) || ip6_addr_ismulticast_orglocal(dest)) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n      if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n          ip6_addr_isuniquelocal(netif_ip6_addr(netif, i)) &&\n          ip6_addr_netcmp(dest, netif_ip6_addr(netif, i))) {\n        return netif_ip6_addr(netif, i);\n      }\n    }\n  }\n\n  /* Choose a global with best matching prefix. */\n  if (ip6_addr_isglobal(dest) || ip6_addr_ismulticast_global(dest)) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n      if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n          ip6_addr_isglobal(netif_ip6_addr(netif, i))) {\n        if (src == NULL) {\n          src = netif_ip6_addr(netif, i);\n        }\n        else {\n          /* Replace src only if we find a prefix match. */\n          /* TODO find longest matching prefix. */\n          if ((!(ip6_addr_netcmp(src, dest))) &&\n              ip6_addr_netcmp(netif_ip6_addr(netif, i), dest)) {\n            src = netif_ip6_addr(netif, i);\n          }\n        }\n      }\n    }\n    if (src != NULL) {\n      return src;\n    }\n  }\n\n  /* Last resort: see if arbitrary prefix matches. */\n  for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n    if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n        ip6_addr_netcmp(dest, netif_ip6_addr(netif, i))) {\n      return netif_ip6_addr(netif, i);\n    }\n  }\n\n  return NULL;\n}\n\n#if LWIP_IPV6_FORWARD\n/**\n * Forwards an IPv6 packet. It finds an appropriate route for the\n * packet, decrements the HL value of the packet, and outputs\n * the packet on the appropriate interface.\n *\n * @param p the packet to forward (p->payload points to IP header)\n * @param iphdr the IPv6 header of the input packet\n * @param inp the netif on which this packet was received\n */\nstatic void\nip6_forward(struct pbuf *p, struct ip6_hdr *iphdr, struct netif *inp)\n{\n  struct netif *netif;\n\n  /* do not forward link-local addresses */\n  if (ip6_addr_islinklocal(ip6_current_dest_addr())) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_forward: not forwarding link-local address.\\n\"));\n    IP6_STATS_INC(ip6.rterr);\n    IP6_STATS_INC(ip6.drop);\n    return;\n  }\n\n  /* Find network interface where to forward this IP packet to. */\n  netif = ip6_route(IP6_ADDR_ANY, ip6_current_dest_addr());\n  if (netif == NULL) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_forward: no route for %\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\"\\n\",\n        IP6_ADDR_BLOCK1(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK2(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK3(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK4(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK5(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK6(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK7(ip6_current_dest_addr()),\n        IP6_ADDR_BLOCK8(ip6_current_dest_addr())));\n#if LWIP_ICMP6\n    /* Don't send ICMP messages in response to ICMP messages */\n    if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) {\n      icmp6_dest_unreach(p, ICMP6_DUR_NO_ROUTE);\n    }\n#endif /* LWIP_ICMP6 */\n    IP6_STATS_INC(ip6.rterr);\n    IP6_STATS_INC(ip6.drop);\n    return;\n  }\n  /* Do not forward packets onto the same network interface on which\n   * they arrived. */\n  if (netif == inp) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_forward: not bouncing packets back on incoming interface.\\n\"));\n    IP6_STATS_INC(ip6.rterr);\n    IP6_STATS_INC(ip6.drop);\n    return;\n  }\n\n  /* decrement HL */\n  IP6H_HOPLIM_SET(iphdr, IP6H_HOPLIM(iphdr) - 1);\n  /* send ICMP6 if HL == 0 */\n  if (IP6H_HOPLIM(iphdr) == 0) {\n#if LWIP_ICMP6\n    /* Don't send ICMP messages in response to ICMP messages */\n    if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) {\n      icmp6_time_exceeded(p, ICMP6_TE_HL);\n    }\n#endif /* LWIP_ICMP6 */\n    IP6_STATS_INC(ip6.drop);\n    return;\n  }\n\n  if (netif->mtu && (p->tot_len > netif->mtu)) {\n#if LWIP_ICMP6\n    /* Don't send ICMP messages in response to ICMP messages */\n    if (IP6H_NEXTH(iphdr) != IP6_NEXTH_ICMP6) {\n      icmp6_packet_too_big(p, netif->mtu);\n    }\n#endif /* LWIP_ICMP6 */\n    IP6_STATS_INC(ip6.drop);\n    return;\n  }\n\n  LWIP_DEBUGF(IP6_DEBUG, (\"ip6_forward: forwarding packet to %\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\"\\n\",\n      IP6_ADDR_BLOCK1(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK2(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK3(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK4(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK5(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK6(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK7(ip6_current_dest_addr()),\n      IP6_ADDR_BLOCK8(ip6_current_dest_addr())));\n\n  /* transmit pbuf on chosen interface */\n  netif->output_ip6(netif, p, ip6_current_dest_addr());\n  IP6_STATS_INC(ip6.fw);\n  IP6_STATS_INC(ip6.xmit);\n  return;\n}\n#endif /* LWIP_IPV6_FORWARD */\n\n\n/**\n * This function is called by the network interface device driver when\n * an IPv6 packet is received. The function does the basic checks of the\n * IP header such as packet size being at least larger than the header\n * size etc. If the packet was not destined for us, the packet is\n * forwarded (using ip6_forward).\n *\n * Finally, the packet is sent to the upper layer protocol input function.\n *\n * @param p the received IPv6 packet (p->payload points to IPv6 header)\n * @param inp the netif on which this packet was received\n * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't\n *         processed, but currently always returns ERR_OK)\n */\nerr_t\nip6_input(struct pbuf *p, struct netif *inp)\n{\n  struct ip6_hdr *ip6hdr;\n  struct netif *netif;\n  u8_t nexth;\n  u16_t hlen; /* the current header length */\n  u8_t i;\n#if 0 /*IP_ACCEPT_LINK_LAYER_ADDRESSING*/\n  @todo\n  int check_ip_src=1;\n#endif /* IP_ACCEPT_LINK_LAYER_ADDRESSING */\n\n  IP6_STATS_INC(ip6.recv);\n\n  /* identify the IP header */\n  ip6hdr = (struct ip6_hdr *)p->payload;\n  if (IP6H_V(ip6hdr) != 6) {\n    LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_WARNING, (\"IPv6 packet dropped due to bad version number %\"U32_F\"\\n\",\n        IP6H_V(ip6hdr)));\n    pbuf_free(p);\n    IP6_STATS_INC(ip6.err);\n    IP6_STATS_INC(ip6.drop);\n    return ERR_OK;\n  }\n\n  /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */\n  if ((IP6_HLEN > p->len) || ((IP6H_PLEN(ip6hdr) + IP6_HLEN) > p->tot_len)) {\n    if (IP6_HLEN > p->len) {\n      LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n        (\"IPv6 header (len %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IP packet dropped.\\n\",\n            IP6_HLEN, p->len));\n    }\n    if ((IP6H_PLEN(ip6hdr) + IP6_HLEN) > p->tot_len) {\n      LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n        (\"IPv6 (plen %\"U16_F\") is longer than pbuf (len %\"U16_F\"), IP packet dropped.\\n\",\n            IP6H_PLEN(ip6hdr) + IP6_HLEN, p->tot_len));\n    }\n    /* free (drop) packet pbufs */\n    pbuf_free(p);\n    IP6_STATS_INC(ip6.lenerr);\n    IP6_STATS_INC(ip6.drop);\n    return ERR_OK;\n  }\n\n  /* Trim pbuf. This should have been done at the netif layer,\n   * but we'll do it anyway just to be sure that its done. */\n  pbuf_realloc(p, IP6_HLEN + IP6H_PLEN(ip6hdr));\n\n  /* copy IP addresses to aligned ip6_addr_t */\n  ip6_addr_copy(ip_data.current_iphdr_dest.ip6, ip6hdr->dest);\n  ip6_addr_copy(ip_data.current_iphdr_src.ip6, ip6hdr->src);\n\n  /* current header pointer. */\n  ip_data.current_ip6_header = ip6hdr;\n\n  /* In netif, used in case we need to send ICMPv6 packets back. */\n  ip_data.current_netif = inp;\n\n  /* match packet against an interface, i.e. is this packet for us? */\n  if (ip6_addr_ismulticast(ip6_current_dest_addr())) {\n    /* Always joined to multicast if-local and link-local all-nodes group. */\n    if (ip6_addr_isallnodes_iflocal(ip6_current_dest_addr()) ||\n        ip6_addr_isallnodes_linklocal(ip6_current_dest_addr())) {\n      netif = inp;\n    }\n#if LWIP_IPV6_MLD\n    else if (mld6_lookfor_group(inp, ip6_current_dest_addr())) {\n      netif = inp;\n    }\n#else /* LWIP_IPV6_MLD */\n    else if (ip6_addr_issolicitednode(ip6_current_dest_addr())) {\n      /* Filter solicited node packets when MLD is not enabled\n       * (for Neighbor discovery). */\n      netif = NULL;\n      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n        if (ip6_addr_isvalid(netif_ip6_addr_state(inp, i)) &&\n            ip6_addr_cmp_solicitednode(ip6_current_dest_addr(), netif_ip6_addr(inp, i))) {\n          netif = inp;\n          LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: solicited node packet accepted on interface %c%c\\n\",\n              netif->name[0], netif->name[1]));\n          break;\n        }\n      }\n    }\n#endif /* LWIP_IPV6_MLD */\n    else {\n      netif = NULL;\n    }\n  }\n  else {\n    /* start trying with inp. if that's not acceptable, start walking the\n       list of configured netifs.\n       'first' is used as a boolean to mark whether we started walking the list */\n    int first = 1;\n    netif = inp;\n    do {\n      /* interface is up? */\n      if (netif_is_up(netif)) {\n        /* unicast to this interface address? address configured? */\n        for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n          if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n              ip6_addr_cmp(ip6_current_dest_addr(), netif_ip6_addr(netif, i))) {\n            /* exit outer loop */\n            goto netif_found;\n          }\n        }\n      }\n      if (ip6_addr_islinklocal(ip6_current_dest_addr())) {\n        /* Do not match link-local addresses to other netifs. */\n        netif = NULL;\n        break;\n      }\n      if (first) {\n        first = 0;\n        netif = netif_list;\n      } else {\n        netif = netif->next;\n      }\n      if (netif == inp) {\n        netif = netif->next;\n      }\n    } while(netif != NULL);\nnetif_found:\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet accepted on interface %c%c\\n\",\n        netif ? netif->name[0] : 'X', netif? netif->name[1] : 'X'));\n  }\n\n  /* \"::\" packet source address? (used in duplicate address detection) */\n  if (ip6_addr_isany(ip6_current_src_addr()) &&\n      (!ip6_addr_issolicitednode(ip6_current_dest_addr()))) {\n    /* packet source is not valid */\n    /* free (drop) packet pbufs */\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with src ANY_ADDRESS dropped\\n\"));\n    pbuf_free(p);\n    IP6_STATS_INC(ip6.drop);\n    goto ip6_input_cleanup;\n  }\n  \n  /* if we're pretending we are everyone for TCP, assume the packet is for source interface if it\n     isn't for a local address */\n  if (netif == NULL && (inp->flags & NETIF_FLAG_PRETEND_TCP) && IP6H_NEXTH(ip6hdr) == IP6_NEXTH_TCP) {\n      netif = inp;\n  }\n\n  /* packet not for us? */\n  if (netif == NULL) {\n    /* packet not for us, route or discard */\n    LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_TRACE, (\"ip6_input: packet not for us.\\n\"));\n#if LWIP_IPV6_FORWARD\n    /* non-multicast packet? */\n    if (!ip6_addr_ismulticast(ip6_current_dest_addr())) {\n      /* try to forward IP packet on (other) interfaces */\n      ip6_forward(p, ip6hdr, inp);\n    }\n#endif /* LWIP_IPV6_FORWARD */\n    pbuf_free(p);\n    goto ip6_input_cleanup;\n  }\n\n  /* current netif pointer. */\n  ip_data.current_netif = netif;\n\n  /* Save next header type. */\n  nexth = IP6H_NEXTH(ip6hdr);\n\n  /* Init header length. */\n  hlen = ip_data.current_ip_header_tot_len = IP6_HLEN;\n\n  /* Move to payload. */\n  pbuf_header(p, -IP6_HLEN);\n\n  /* Process known option extension headers, if present. */\n  while (nexth != IP6_NEXTH_NONE)\n  {\n    switch (nexth) {\n    case IP6_NEXTH_HOPBYHOP:\n      LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with Hop-by-Hop options header\\n\"));\n      /* Get next header type. */\n      nexth = *((u8_t *)p->payload);\n\n      /* Get the header length. */\n      hlen = 8 * (1 + *((u8_t *)p->payload + 1));\n      ip_data.current_ip_header_tot_len += hlen;\n\n      /* Skip over this header. */\n      if (hlen > p->len) {\n        LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n          (\"IPv6 options header (hlen %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IPv6 packet dropped.\\n\",\n              hlen, p->len));\n        /* free (drop) packet pbufs */\n        pbuf_free(p);\n        IP6_STATS_INC(ip6.lenerr);\n        IP6_STATS_INC(ip6.drop);\n        goto ip6_input_cleanup;\n      }\n\n      pbuf_header(p, -hlen);\n      break;\n    case IP6_NEXTH_DESTOPTS:\n      LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with Destination options header\\n\"));\n      /* Get next header type. */\n      nexth = *((u8_t *)p->payload);\n\n      /* Get the header length. */\n      hlen = 8 * (1 + *((u8_t *)p->payload + 1));\n      ip_data.current_ip_header_tot_len += hlen;\n\n      /* Skip over this header. */\n      if (hlen > p->len) {\n        LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n          (\"IPv6 options header (hlen %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IPv6 packet dropped.\\n\",\n              hlen, p->len));\n        /* free (drop) packet pbufs */\n        pbuf_free(p);\n        IP6_STATS_INC(ip6.lenerr);\n        IP6_STATS_INC(ip6.drop);\n        goto ip6_input_cleanup;\n      }\n\n      pbuf_header(p, -hlen);\n      break;\n    case IP6_NEXTH_ROUTING:\n      LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with Routing header\\n\"));\n      /* Get next header type. */\n      nexth = *((u8_t *)p->payload);\n\n      /* Get the header length. */\n      hlen = 8 * (1 + *((u8_t *)p->payload + 1));\n      ip_data.current_ip_header_tot_len += hlen;\n\n      /* Skip over this header. */\n      if (hlen > p->len) {\n        LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n          (\"IPv6 options header (hlen %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IPv6 packet dropped.\\n\",\n              hlen, p->len));\n        /* free (drop) packet pbufs */\n        pbuf_free(p);\n        IP6_STATS_INC(ip6.lenerr);\n        IP6_STATS_INC(ip6.drop);\n        goto ip6_input_cleanup;\n      }\n\n      pbuf_header(p, -hlen);\n      break;\n\n    case IP6_NEXTH_FRAGMENT:\n    {\n      struct ip6_frag_hdr * frag_hdr;\n      LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with Fragment header\\n\"));\n\n      frag_hdr = (struct ip6_frag_hdr *)p->payload;\n\n      /* Get next header type. */\n      nexth = frag_hdr->_nexth;\n\n      /* Fragment Header length. */\n      hlen = 8;\n      ip_data.current_ip_header_tot_len += hlen;\n\n      /* Make sure this header fits in current pbuf. */\n      if (hlen > p->len) {\n        LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n          (\"IPv6 options header (hlen %\"U16_F\") does not fit in first pbuf (len %\"U16_F\"), IPv6 packet dropped.\\n\",\n              hlen, p->len));\n        /* free (drop) packet pbufs */\n        pbuf_free(p);\n        IP6_FRAG_STATS_INC(ip6_frag.lenerr);\n        IP6_FRAG_STATS_INC(ip6_frag.drop);\n        goto ip6_input_cleanup;\n      }\n\n      /* Offset == 0 and more_fragments == 0? */\n      if (((frag_hdr->_fragment_offset & IP6_FRAG_OFFSET_MASK) == 0) &&\n          ((frag_hdr->_fragment_offset & IP6_FRAG_MORE_FLAG) == 0)) {\n\n        /* This is a 1-fragment packet, usually a packet that we have\n         * already reassembled. Skip this header anc continue. */\n        pbuf_header(p, -hlen);\n      }\n      else {\n#if LWIP_IPV6_REASS\n\n        /* reassemble the packet */\n        p = ip6_reass(p);\n        /* packet not fully reassembled yet? */\n        if (p == NULL) {\n          goto ip6_input_cleanup;\n        }\n\n        /* Returned p point to IPv6 header.\n         * Update all our variables and pointers and continue. */\n        ip6hdr = (struct ip6_hdr *)p->payload;\n        nexth = IP6H_NEXTH(ip6hdr);\n        hlen = ip_data.current_ip_header_tot_len = IP6_HLEN;\n        pbuf_header(p, -IP6_HLEN);\n\n#else /* LWIP_IPV6_REASS */\n        /* free (drop) packet pbufs */\n        LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: packet with Fragment header dropped (with LWIP_IPV6_REASS==0)\\n\"));\n        pbuf_free(p);\n        IP6_STATS_INC(ip6.opterr);\n        IP6_STATS_INC(ip6.drop);\n        goto ip6_input_cleanup;\n#endif /* LWIP_IPV6_REASS */\n      }\n      break;\n    }\n    default:\n      goto options_done;\n      break;\n    }\n  }\noptions_done:\n\n  /* p points to IPv6 header again. */\n  pbuf_header(p, ip_data.current_ip_header_tot_len);\n\n  /* send to upper layers */\n  LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: \\n\"));\n  ip6_debug_print(p);\n  LWIP_DEBUGF(IP6_DEBUG, (\"ip6_input: p->len %\"U16_F\" p->tot_len %\"U16_F\"\\n\", p->len, p->tot_len));\n\n#if LWIP_RAW\n  /* raw input did not eat the packet? */\n  if (raw_input(p, inp) == 0)\n#endif /* LWIP_RAW */\n  {\n    switch (nexth) {\n    case IP6_NEXTH_NONE:\n      pbuf_free(p);\n      break;\n#if LWIP_UDP\n    case IP6_NEXTH_UDP:\n#if LWIP_UDPLITE\n    case IP6_NEXTH_UDPLITE:\n#endif /* LWIP_UDPLITE */\n      /* Point to payload. */\n      pbuf_header(p, -ip_data.current_ip_header_tot_len);\n      udp_input(p, inp);\n      break;\n#endif /* LWIP_UDP */\n#if LWIP_TCP\n    case IP6_NEXTH_TCP:\n      /* Point to payload. */\n      pbuf_header(p, -ip_data.current_ip_header_tot_len);\n      tcp_input(p, inp);\n      break;\n#endif /* LWIP_TCP */\n#if LWIP_ICMP6\n    case IP6_NEXTH_ICMP6:\n      /* Point to payload. */\n      pbuf_header(p, -ip_data.current_ip_header_tot_len);\n      icmp6_input(p, inp);\n      break;\n#endif /* LWIP_ICMP */\n    default:\n#if LWIP_ICMP6\n      /* send ICMP parameter problem unless it was a multicast or ICMPv6 */\n      if ((!ip6_addr_ismulticast(ip6_current_dest_addr())) &&\n          (IP6H_NEXTH(ip6hdr) != IP6_NEXTH_ICMP6)) {\n        icmp6_param_problem(p, ICMP6_PP_HEADER, ip_data.current_ip_header_tot_len - hlen);\n      }\n#endif /* LWIP_ICMP */\n      LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip6_input: Unsupported transport protocol %\"U16_F\"\\n\", IP6H_NEXTH(ip6hdr)));\n      pbuf_free(p);\n      IP6_STATS_INC(ip6.proterr);\n      IP6_STATS_INC(ip6.drop);\n      break;\n    }\n  }\n\nip6_input_cleanup:\n  ip_data.current_netif = NULL;\n  ip_data.current_ip6_header = NULL;\n  ip_data.current_ip_header_tot_len = 0;\n  ip6_addr_set_any(&ip_data.current_iphdr_src.ip6);\n  ip6_addr_set_any(&ip_data.current_iphdr_dest.ip6);\n\n  return ERR_OK;\n}\n\n\n/**\n * Sends an IPv6 packet on a network interface. This function constructs\n * the IPv6 header. If the source IPv6 address is NULL, the IPv6 \"ANY\" address is\n * used as source (usually during network startup). If the source IPv6 address it\n * IP6_ADDR_ANY, the most appropriate IPv6 address of the outgoing network\n * interface is filled in as source address. If the destination IPv6 address is\n * IP_HDRINCL, p is assumed to already include an IPv6 header and p->payload points\n * to it instead of the data.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an\n            IPv6 header and p->payload points to that IPv6 header)\n * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an\n *         IP address of the netif is selected and used as source address.\n *         if src == NULL, IP6_ADDR_ANY is used as source)\n * @param dest the destination IPv6 address to send the packet to\n * @param hl the Hop Limit value to be set in the IPv6 header\n * @param tc the Traffic Class value to be set in the IPv6 header\n * @param nexth the Next Header to be set in the IPv6 header\n * @param netif the netif on which to send this packet\n * @return ERR_OK if the packet was sent OK\n *         ERR_BUF if p doesn't have enough space for IPv6/LINK headers\n *         returns errors returned by netif->output\n */\nerr_t\nip6_output_if(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,\n             u8_t hl, u8_t tc,\n             u8_t nexth, struct netif *netif)\n{\n  struct ip6_hdr *ip6hdr;\n  ip6_addr_t dest_addr;\n\n  /* pbufs passed to IP must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  /* Should the IPv6 header be generated or is it already included in p? */\n  if (dest != IP_HDRINCL) {\n    /* generate IPv6 header */\n    if (pbuf_header(p, IP6_HLEN)) {\n      LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip6_output: not enough room for IPv6 header in pbuf\\n\"));\n      IP6_STATS_INC(ip6.err);\n      return ERR_BUF;\n    }\n\n    ip6hdr = (struct ip6_hdr *)p->payload;\n    LWIP_ASSERT(\"check that first pbuf can hold struct ip6_hdr\",\n               (p->len >= sizeof(struct ip6_hdr)));\n\n    IP6H_HOPLIM_SET(ip6hdr, hl);\n    IP6H_NEXTH_SET(ip6hdr, nexth);\n\n    /* dest cannot be NULL here */\n    ip6_addr_copy(ip6hdr->dest, *dest);\n\n    IP6H_VTCFL_SET(ip6hdr, 6, tc, 0);\n    IP6H_PLEN_SET(ip6hdr, p->tot_len - IP6_HLEN);\n\n    if (src == NULL) {\n      src = IP6_ADDR_ANY;\n    }\n    else if (ip6_addr_isany(src)) {\n      src = ip6_select_source_address(netif, dest);\n      if ((src == NULL) || ip6_addr_isany(src)) {\n        /* No appropriate source address was found for this packet. */\n        LWIP_DEBUGF(IP6_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"ip6_output: No suitable source address for packet.\\n\"));\n        IP6_STATS_INC(ip6.rterr);\n        return ERR_RTE;\n      }\n    }\n    /* src cannot be NULL here */\n    ip6_addr_copy(ip6hdr->src, *src);\n\n  } else {\n    /* IP header already included in p */\n    ip6hdr = (struct ip6_hdr *)p->payload;\n    ip6_addr_copy(dest_addr, ip6hdr->dest);\n    dest = &dest_addr;\n  }\n\n  IP6_STATS_INC(ip6.xmit);\n\n  LWIP_DEBUGF(IP6_DEBUG, (\"ip6_output_if: %c%c%\"U16_F\"\\n\", netif->name[0], netif->name[1], netif->num));\n  ip6_debug_print(p);\n\n#if ENABLE_LOOPBACK\n  /* TODO implement loopback for v6\n  if (ip6_addr_cmp(dest, netif_ip6_addr(0))) {\n    return netif_loop_output(netif, p, dest);\n  }*/\n#endif /* ENABLE_LOOPBACK */\n#if LWIP_IPV6_FRAG\n  /* don't fragment if interface has mtu set to 0 [loopif] */\n  if (netif->mtu && (p->tot_len > nd6_get_destination_mtu(dest, netif))) {\n    return ip6_frag(p, netif, dest);\n  }\n#endif /* LWIP_IPV6_FRAG */\n\n  LWIP_DEBUGF(IP6_DEBUG, (\"netif->output_ip6()\"));\n  return netif->output_ip6(netif, p, dest);\n}\n\n/**\n * Simple interface to ip6_output_if. It finds the outgoing network\n * interface and calls upon ip6_output_if to do the actual work.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an\n            IPv6 header and p->payload points to that IPv6 header)\n * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an\n *         IP address of the netif is selected and used as source address.\n *         if src == NULL, IP6_ADDR_ANY is used as source)\n * @param dest the destination IPv6 address to send the packet to\n * @param hl the Hop Limit value to be set in the IPv6 header\n * @param tc the Traffic Class value to be set in the IPv6 header\n * @param nexth the Next Header to be set in the IPv6 header\n *\n * @return ERR_RTE if no route is found\n *         see ip_output_if() for more return values\n */\nerr_t\nip6_output(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,\n          u8_t hl, u8_t tc, u8_t nexth)\n{\n  struct netif *netif;\n  struct ip6_hdr *ip6hdr;\n  ip6_addr_t src_addr, dest_addr;\n\n  /* pbufs passed to IPv6 must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  if (dest != IP_HDRINCL) {\n    netif = ip6_route(src, dest);\n  } else {\n    /* IP header included in p, read addresses. */\n    ip6hdr = (struct ip6_hdr *)p->payload;\n    ip6_addr_copy(src_addr, ip6hdr->src);\n    ip6_addr_copy(dest_addr, ip6hdr->dest);\n    netif = ip6_route(&src_addr, &dest_addr);\n  }\n\n  if (netif == NULL) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_output: no route for %\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\"\\n\",\n        IP6_ADDR_BLOCK1(dest),\n        IP6_ADDR_BLOCK2(dest),\n        IP6_ADDR_BLOCK3(dest),\n        IP6_ADDR_BLOCK4(dest),\n        IP6_ADDR_BLOCK5(dest),\n        IP6_ADDR_BLOCK6(dest),\n        IP6_ADDR_BLOCK7(dest),\n        IP6_ADDR_BLOCK8(dest)));\n    IP6_STATS_INC(ip6.rterr);\n    return ERR_RTE;\n  }\n\n  return ip6_output_if(p, src, dest, hl, tc, nexth, netif);\n}\n\n\n#if LWIP_NETIF_HWADDRHINT\n/** Like ip6_output, but takes and addr_hint pointer that is passed on to netif->addr_hint\n *  before calling ip6_output_if.\n *\n * @param p the packet to send (p->payload points to the data, e.g. next\n            protocol header; if dest == IP_HDRINCL, p already includes an\n            IPv6 header and p->payload points to that IPv6 header)\n * @param src the source IPv6 address to send from (if src == IP6_ADDR_ANY, an\n *         IP address of the netif is selected and used as source address.\n *         if src == NULL, IP6_ADDR_ANY is used as source)\n * @param dest the destination IPv6 address to send the packet to\n * @param hl the Hop Limit value to be set in the IPv6 header\n * @param tc the Traffic Class value to be set in the IPv6 header\n * @param nexth the Next Header to be set in the IPv6 header\n * @param addr_hint address hint pointer set to netif->addr_hint before\n *        calling ip_output_if()\n *\n * @return ERR_RTE if no route is found\n *         see ip_output_if() for more return values\n */\nerr_t\nip6_output_hinted(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,\n          u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint)\n{\n  struct netif *netif;\n  struct ip6_hdr *ip6hdr;\n  ip6_addr_t src_addr, dest_addr;\n  err_t err;\n\n  /* pbufs passed to IP must have a ref-count of 1 as their payload pointer\n     gets altered as the packet is passed down the stack */\n  LWIP_ASSERT(\"p->ref == 1\", p->ref == 1);\n\n  if (dest != IP_HDRINCL) {\n    netif = ip6_route(src, dest);\n  } else {\n    /* IP header included in p, read addresses. */\n    ip6hdr = (struct ip6_hdr *)p->payload;\n    ip6_addr_copy(src_addr, ip6hdr->src);\n    ip6_addr_copy(dest_addr, ip6hdr->dest);\n    netif = ip6_route(&src_addr, &dest_addr);\n  }\n\n  if (netif == NULL) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_output: no route for %\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\"\\n\",\n        IP6_ADDR_BLOCK1(dest),\n        IP6_ADDR_BLOCK2(dest),\n        IP6_ADDR_BLOCK3(dest),\n        IP6_ADDR_BLOCK4(dest),\n        IP6_ADDR_BLOCK5(dest),\n        IP6_ADDR_BLOCK6(dest),\n        IP6_ADDR_BLOCK7(dest),\n        IP6_ADDR_BLOCK8(dest)));\n    IP6_STATS_INC(ip6.rterr);\n    return ERR_RTE;\n  }\n\n  NETIF_SET_HWADDRHINT(netif, addr_hint);\n  err = ip6_output_if(p, src, dest, hl, tc, nexth, netif);\n  NETIF_SET_HWADDRHINT(netif, NULL);\n\n  return err;\n}\n#endif /* LWIP_NETIF_HWADDRHINT*/\n\n#if LWIP_IPV6_MLD\n/**\n * Add a hop-by-hop options header with a router alert option and padding.\n *\n * Used by MLD when sending a Multicast listener report/done message.\n *\n * @param p the packet to which we will prepend the options header\n * @param nexth the next header protocol number (e.g. IP6_NEXTH_ICMP6)\n * @param value the value of the router alert option data (e.g. IP6_ROUTER_ALERT_VALUE_MLD)\n * @return ERR_OK if hop-by-hop header was added, ERR_* otherwise\n */\nerr_t\nip6_options_add_hbh_ra(struct pbuf * p, u8_t nexth, u8_t value)\n{\n  struct ip6_hbh_hdr * hbh_hdr;\n\n  /* Move pointer to make room for hop-by-hop options header. */\n  if (pbuf_header(p, sizeof(struct ip6_hbh_hdr))) {\n    LWIP_DEBUGF(IP6_DEBUG, (\"ip6_options: no space for options header\\n\"));\n    IP6_STATS_INC(ip6.err);\n    return ERR_BUF;\n  }\n\n  hbh_hdr = (struct ip6_hbh_hdr *)p->payload;\n\n  /* Set fields. */\n  hbh_hdr->_nexth = nexth;\n  hbh_hdr->_hlen = 0;\n  hbh_hdr->_ra_opt_type = IP6_ROUTER_ALERT_OPTION;\n  hbh_hdr->_ra_opt_dlen = 2;\n  hbh_hdr->_ra_opt_data = value;\n  hbh_hdr->_padn_opt_type = IP6_PADN_ALERT_OPTION;\n  hbh_hdr->_padn_opt_dlen = 0;\n\n  return ERR_OK;\n}\n#endif /* LWIP_IPV6_MLD */\n\n#if IP6_DEBUG\n/* Print an IPv6 header by using LWIP_DEBUGF\n * @param p an IPv6 packet, p->payload pointing to the IPv6 header\n */\nvoid\nip6_debug_print(struct pbuf *p)\n{\n  struct ip6_hdr *ip6hdr = (struct ip6_hdr *)p->payload;\n\n  LWIP_DEBUGF(IP6_DEBUG, (\"IPv6 header:\\n\"));\n  LWIP_DEBUGF(IP6_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP6_DEBUG, (\"| %2\"U16_F\" |  %3\"U16_F\"  |      %7\"U32_F\"     | (ver, class, flow)\\n\",\n                    IP6H_V(ip6hdr),\n                    IP6H_TC(ip6hdr),\n                    IP6H_FL(ip6hdr)));\n  LWIP_DEBUGF(IP6_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP6_DEBUG, (\"|     %5\"U16_F\"     |  %3\"U16_F\"  |  %3\"U16_F\"  | (plen, nexth, hopl)\\n\",\n                    IP6H_PLEN(ip6hdr),\n                    IP6H_NEXTH(ip6hdr),\n                    IP6H_HOPLIM(ip6hdr)));\n  LWIP_DEBUGF(IP6_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP6_DEBUG, (\"|  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" | (src)\\n\",\n                    IP6_ADDR_BLOCK1(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK2(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK3(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK4(&(ip6hdr->src))));\n  LWIP_DEBUGF(IP6_DEBUG, (\"|  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |\\n\",\n                    IP6_ADDR_BLOCK5(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK6(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK7(&(ip6hdr->src)),\n                    IP6_ADDR_BLOCK8(&(ip6hdr->src))));\n  LWIP_DEBUGF(IP6_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(IP6_DEBUG, (\"|  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" | (dest)\\n\",\n                    IP6_ADDR_BLOCK1(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK2(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK3(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK4(&(ip6hdr->dest))));\n  LWIP_DEBUGF(IP6_DEBUG, (\"|  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |  %4\"X32_F\" |\\n\",\n                    IP6_ADDR_BLOCK5(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK6(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK7(&(ip6hdr->dest)),\n                    IP6_ADDR_BLOCK8(&(ip6hdr->dest))));\n  LWIP_DEBUGF(IP6_DEBUG, (\"+-------------------------------+\\n\"));\n}\n#endif /* IP6_DEBUG */\n\n#endif /* LWIP_IPV6 */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv6/ip6_addr.c",
    "content": "/**\n * @file\n *\n * IPv6 addresses.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n * Functions for handling IPv6 addresses.\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/def.h\"\n\n/* used by IP6_ADDR_ANY in ip6_addr.h */\nconst ip6_addr_t ip6_addr_any = { { 0ul, 0ul, 0ul, 0ul } };\n\n#ifndef isprint\n#define in_range(c, lo, up)  ((u8_t)c >= lo && (u8_t)c <= up)\n#define isprint(c)           in_range(c, 0x20, 0x7f)\n#define isdigit(c)           in_range(c, '0', '9')\n#define isxdigit(c)          (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F'))\n#define islower(c)           in_range(c, 'a', 'z')\n#define isspace(c)           (c == ' ' || c == '\\f' || c == '\\n' || c == '\\r' || c == '\\t' || c == '\\v')\n#define xchar(i)             ((i) < 10 ? '0' + (i) : 'A' + (i) - 10)\n#endif\n\n/**\n * Check whether \"cp\" is a valid ascii representation\n * of an IPv6 address and convert to a binary address.\n * Returns 1 if the address is valid, 0 if not.\n *\n * @param cp IPv6 address in ascii represenation (e.g. \"FF01::1\")\n * @param addr pointer to which to save the ip address in network order\n * @return 1 if cp could be converted to addr, 0 on failure\n */\nint\nip6addr_aton(const char *cp, ip6_addr_t *addr)\n{\n  u32_t addr_index, zero_blocks, current_block_index, current_block_value;\n  const char * s;\n\n  /* Count the number of colons, to count the number of blocks in a \"::\" sequence\n     zero_blocks may be 1 even if there are no :: sequences */\n  zero_blocks = 8;\n  for (s = cp; *s != 0; s++) {\n    if (*s == ':')\n      zero_blocks--;\n    else if (!isxdigit(*s))\n      break;\n  }\n\n  /* parse each block */\n  addr_index = 0;\n  current_block_index = 0;\n  current_block_value = 0;\n  for (s = cp; *s != 0; s++) {\n    if (*s == ':') {\n      if (addr) {\n        if (current_block_index & 0x1) {\n          addr->addr[addr_index++] |= current_block_value;\n        }\n        else {\n          addr->addr[addr_index] = current_block_value << 16;\n        }\n      }\n      current_block_index++;\n      current_block_value = 0;\n      if (current_block_index > 7) {\n        /* address too long! */\n        return 0;\n      } if (s[1] == ':') {\n        s++;\n        /* \"::\" found, set zeros */\n        while (zero_blocks-- > 0) {\n          if (current_block_index & 0x1) {\n            addr_index++;\n          }\n          else {\n            if (addr) {\n              addr->addr[addr_index] = 0;\n            }\n          }\n          current_block_index++;\n        }\n      }\n    } else if (isxdigit(*s)) {\n      /* add current digit */\n      current_block_value = (current_block_value << 4) +\n          (isdigit(*s) ? *s - '0' :\n          10 + (islower(*s) ? *s - 'a' : *s - 'A'));\n    } else {\n      /* unexpected digit, space? CRLF? */\n      break;\n    }\n  }\n\n  if (addr) {\n    if (current_block_index & 0x1) {\n      addr->addr[addr_index++] |= current_block_value;\n    }\n    else {\n      addr->addr[addr_index] = current_block_value << 16;\n    }\n  }\n\n  /* convert to network byte order. */\n  if (addr) {\n    for (addr_index = 0; addr_index < 4; addr_index++) {\n      addr->addr[addr_index] = htonl(addr->addr[addr_index]);\n    }\n  }\n\n  if (current_block_index != 7) {\n    return 0;\n  }\n\n  return 1;\n}\n\n/**\n * Convert numeric IPv6 address into ASCII representation.\n * returns ptr to static buffer; not reentrant!\n *\n * @param addr ip6 address in network order to convert\n * @return pointer to a global static (!) buffer that holds the ASCII\n *         represenation of addr\n */\nchar *\nip6addr_ntoa(const ip6_addr_t *addr)\n{\n  static char str[40];\n  return ip6addr_ntoa_r(addr, str, 40);\n}\n\n/**\n * Same as ipaddr_ntoa, but reentrant since a user-supplied buffer is used.\n *\n * @param addr ip6 address in network order to convert\n * @param buf target buffer where the string is stored\n * @param buflen length of buf\n * @return either pointer to buf which now holds the ASCII\n *         representation of addr or NULL if buf was too small\n */\nchar *\nip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen)\n{\n  u32_t current_block_index, current_block_value;\n  s32_t zero_flag, i;\n\n  i = 0;\n  zero_flag = 0; /* used to indicate a zero chain for \"::' */\n\n  for (current_block_index = 0; current_block_index < 8; current_block_index++) {\n    /* get the current 16-bit block */\n    current_block_value = htonl(addr->addr[current_block_index >> 1]);\n    if ((current_block_index & 0x1) == 0) {\n      current_block_value = current_block_value >> 16;\n    }\n    current_block_value &= 0xffff;\n\n    if (current_block_value == 0) {\n      /* generate empty block \"::\" */\n      if (!zero_flag) {\n        if (current_block_index > 0) {\n          zero_flag = 1;\n          buf[i++] = ':';\n          if (i >= buflen) return NULL;\n        }\n      }\n    }\n    else {\n      if (current_block_index > 0) {\n        buf[i++] = ':';\n        if (i >= buflen) return NULL;\n      }\n\n      if ((current_block_value & 0xf000) == 0) {\n        zero_flag = 1;\n      }\n      else {\n        buf[i++] = xchar(((current_block_value & 0xf000) >> 12));\n        zero_flag = 0;\n        if (i >= buflen) return NULL;\n      }\n\n      if (((current_block_value & 0xf00) == 0) && (zero_flag)) {\n        /* do nothing */\n      }\n      else {\n        buf[i++] = xchar(((current_block_value & 0xf00) >> 8));\n        zero_flag = 0;\n        if (i >= buflen) return NULL;\n      }\n\n      if (((current_block_value & 0xf0) == 0) && (zero_flag)) {\n        /* do nothing */\n      }\n      else {\n        buf[i++] = xchar(((current_block_value & 0xf0) >> 4));\n        zero_flag = 0;\n        if (i >= buflen) return NULL;\n      }\n\n      buf[i++] = xchar((current_block_value & 0xf));\n      if (i >= buflen) return NULL;\n\n      zero_flag = 0;\n    }\n  }\n\n  buf[i] = 0;\n\n  return buf;\n}\n#endif /* LWIP_IPV6 */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv6/ip6_frag.c",
    "content": "/**\n * @file\n *\n * IPv6 fragmentation and reassembly.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#include \"lwip/opt.h\"\n#include \"lwip/ip6_frag.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/icmp6.h\"\n#include \"lwip/nd6.h\"\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/stats.h\"\n\n#include <string.h>\n\n#if LWIP_IPV6 && LWIP_IPV6_REASS  /* don't build if not configured for use in lwipopts.h */\n\n\n/** Setting this to 0, you can turn off checking the fragments for overlapping\n * regions. The code gets a little smaller. Only use this if you know that\n * overlapping won't occur on your network! */\n#ifndef IP_REASS_CHECK_OVERLAP\n#define IP_REASS_CHECK_OVERLAP 1\n#endif /* IP_REASS_CHECK_OVERLAP */\n\n/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is\n * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller.\n * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA\n * is set to 1, so one datagram can be reassembled at a time, only. */\n#ifndef IP_REASS_FREE_OLDEST\n#define IP_REASS_FREE_OLDEST 1\n#endif /* IP_REASS_FREE_OLDEST */\n\n#define IP_REASS_FLAG_LASTFRAG 0x01\n\n/** This is a helper struct which holds the starting\n * offset and the ending offset of this fragment to\n * easily chain the fragments.\n * It has the same packing requirements as the IPv6 header, since it replaces\n * the Fragment Header in memory in incoming fragments to keep\n * track of the various fragments.\n */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip6_reass_helper {\n  PACK_STRUCT_FIELD(struct pbuf *next_pbuf);\n  PACK_STRUCT_FIELD(u16_t start);\n  PACK_STRUCT_FIELD(u16_t end);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/* static variables */\nstatic struct ip6_reassdata *reassdatagrams;\nstatic u16_t ip6_reass_pbufcount;\n\n/* Forward declarations. */\nstatic void ip6_reass_free_complete_datagram(struct ip6_reassdata *ipr);\n#if IP_REASS_FREE_OLDEST\nstatic void ip6_reass_remove_oldest_datagram(struct ip6_reassdata *ipr, int pbufs_needed);\n#endif /* IP_REASS_FREE_OLDEST */\n\nvoid\nip6_reass_tmr(void)\n{\n  struct ip6_reassdata *r, *tmp;\n\n  r = reassdatagrams;\n  while (r != NULL) {\n    /* Decrement the timer. Once it reaches 0,\n     * clean up the incomplete fragment assembly */\n    if (r->timer > 0) {\n      r->timer--;\n      r = r->next;\n    } else {\n      /* reassembly timed out */\n      tmp = r;\n      /* get the next pointer before freeing */\n      r = r->next;\n      /* free the helper struct and all enqueued pbufs */\n      ip6_reass_free_complete_datagram(tmp);\n     }\n   }\n}\n\n/**\n * Free a datagram (struct ip6_reassdata) and all its pbufs.\n * Updates the total count of enqueued pbufs (ip6_reass_pbufcount),\n * sends an ICMP time exceeded packet.\n *\n * @param ipr datagram to free\n */\nstatic void\nip6_reass_free_complete_datagram(struct ip6_reassdata *ipr)\n{\n  struct ip6_reassdata *prev;\n  u16_t pbufs_freed = 0;\n  u8_t clen;\n  struct pbuf *p;\n  struct ip6_reass_helper *iprh;\n\n#if LWIP_ICMP6\n  iprh = (struct ip6_reass_helper *)ipr->p->payload;\n  if (iprh->start == 0) {\n    /* The first fragment was received, send ICMP time exceeded. */\n    /* First, de-queue the first pbuf from r->p. */\n    p = ipr->p;\n    ipr->p = iprh->next_pbuf;\n    /* Then, move back to the original header (we are now pointing to Fragment header). */\n    if (pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr)) {\n      LWIP_ASSERT(\"ip6_reass_free: moving p->payload to ip6 header failed\\n\", 0);\n    }\n    else {\n      icmp6_time_exceeded(p, ICMP6_TE_FRAG);\n    }\n    clen = pbuf_clen(p);\n    LWIP_ASSERT(\"pbufs_freed + clen <= 0xffff\", pbufs_freed + clen <= 0xffff);\n    pbufs_freed += clen;\n    pbuf_free(p);\n  }\n#endif /* LWIP_ICMP6 */\n\n  /* First, free all received pbufs.  The individual pbufs need to be released\n     separately as they have not yet been chained */\n  p = ipr->p;\n  while (p != NULL) {\n    struct pbuf *pcur;\n    iprh = (struct ip6_reass_helper *)p->payload;\n    pcur = p;\n    /* get the next pointer before freeing */\n    p = iprh->next_pbuf;\n    clen = pbuf_clen(pcur);\n    LWIP_ASSERT(\"pbufs_freed + clen <= 0xffff\", pbufs_freed + clen <= 0xffff);\n    pbufs_freed += clen;\n    pbuf_free(pcur);\n  }\n\n  /* Then, unchain the struct ip6_reassdata from the list and free it. */\n  if (ipr == reassdatagrams) {\n    reassdatagrams = ipr->next;\n  } else {\n    prev = reassdatagrams;\n    while (prev != NULL) {\n      if (prev->next == ipr) {\n        break;\n      }\n      prev = prev->next;\n    }\n    if (prev != NULL) {\n      prev->next = ipr->next;\n    }\n  }\n  memp_free(MEMP_IP6_REASSDATA, ipr);\n\n  /* Finally, update number of pbufs in reassembly queue */\n  LWIP_ASSERT(\"ip_reass_pbufcount >= clen\", ip6_reass_pbufcount >= pbufs_freed);\n  ip6_reass_pbufcount -= pbufs_freed;\n}\n\n#if IP_REASS_FREE_OLDEST\n/**\n * Free the oldest datagram to make room for enqueueing new fragments.\n * The datagram ipr is not freed!\n *\n * @param ipr ip6_reassdata for the current fragment\n * @param pbufs_needed number of pbufs needed to enqueue\n *        (used for freeing other datagrams if not enough space)\n */\nstatic void\nip6_reass_remove_oldest_datagram(struct ip6_reassdata *ipr, int pbufs_needed)\n{\n  struct ip6_reassdata *r, *oldest;\n\n  /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs,\n   * but don't free the current datagram! */\n  do {\n    r = oldest = reassdatagrams;\n    while (r != NULL) {\n      if (r != ipr) {\n        if (r->timer <= oldest->timer) {\n          /* older than the previous oldest */\n          oldest = r;\n        }\n      }\n      r = r->next;\n    }\n    if (oldest != NULL) {\n      ip6_reass_free_complete_datagram(oldest);\n    }\n  } while (((ip6_reass_pbufcount + pbufs_needed) > IP_REASS_MAX_PBUFS) && (reassdatagrams != NULL));\n}\n#endif /* IP_REASS_FREE_OLDEST */\n\n/**\n * Reassembles incoming IPv6 fragments into an IPv6 datagram.\n *\n * @param p points to the IPv6 Fragment Header\n * @param len the length of the payload (after Fragment Header)\n * @return NULL if reassembly is incomplete, pbuf pointing to\n *         IPv6 Header if reassembly is complete\n */\nstruct pbuf *\nip6_reass(struct pbuf *p)\n{\n  struct ip6_reassdata *ipr, *ipr_prev;\n  struct ip6_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL;\n  struct ip6_frag_hdr * frag_hdr;\n  u16_t offset, len;\n  u8_t clen, valid = 1;\n  struct pbuf *q;\n\n  IP6_FRAG_STATS_INC(ip6_frag.recv);\n\n  frag_hdr = (struct ip6_frag_hdr *) p->payload;\n\n  clen = pbuf_clen(p);\n\n  offset = ntohs(frag_hdr->_fragment_offset);\n\n  /* Calculate fragment length from IPv6 payload length.\n   * Adjust for headers before Fragment Header.\n   * And finally adjust by Fragment Header length. */\n  len = ntohs(ip6_current_header()->_plen);\n  len -= ((u8_t*)p->payload - (u8_t*)ip6_current_header()) - IP6_HLEN;\n  len -= IP6_FRAG_HLEN;\n\n  /* Look for the datagram the fragment belongs to in the current datagram queue,\n   * remembering the previous in the queue for later dequeueing. */\n  for (ipr = reassdatagrams, ipr_prev = NULL; ipr != NULL; ipr = ipr->next) {\n    /* Check if the incoming fragment matches the one currently present\n       in the reassembly buffer. If so, we proceed with copying the\n       fragment into the buffer. */\n    if ((frag_hdr->_identification == ipr->identification) &&\n        ip6_addr_cmp(ip6_current_src_addr(), &(ipr->iphdr->src)) &&\n        ip6_addr_cmp(ip6_current_dest_addr(), &(ipr->iphdr->dest))) {\n      IP6_FRAG_STATS_INC(ip6_frag.cachehit);\n      break;\n    }\n    ipr_prev = ipr;\n  }\n\n  if (ipr == NULL) {\n  /* Enqueue a new datagram into the datagram queue */\n    ipr = (struct ip6_reassdata *)memp_malloc(MEMP_IP6_REASSDATA);\n    if (ipr == NULL) {\n#if IP_REASS_FREE_OLDEST\n      /* Make room and try again. */\n      ip6_reass_remove_oldest_datagram(ipr, clen);\n      ipr = (struct ip6_reassdata *)memp_malloc(MEMP_IP6_REASSDATA);\n      if (ipr == NULL)\n#endif /* IP_REASS_FREE_OLDEST */\n      {\n        IP6_FRAG_STATS_INC(ip6_frag.memerr);\n        IP6_FRAG_STATS_INC(ip6_frag.drop);\n        goto nullreturn;\n      }\n    }\n\n    memset(ipr, 0, sizeof(struct ip6_reassdata));\n    ipr->timer = IP_REASS_MAXAGE;\n\n    /* enqueue the new structure to the front of the list */\n    ipr->next = reassdatagrams;\n    reassdatagrams = ipr;\n\n    /* Use the current IPv6 header for src/dest address reference.\n     * Eventually, we will replace it when we get the first fragment\n     * (it might be this one, in any case, it is done later). */\n    ipr->iphdr = (struct ip6_hdr *)ip6_current_header();\n\n    /* copy the fragmented packet id. */\n    ipr->identification = frag_hdr->_identification;\n\n    /* copy the nexth field */\n    ipr->nexth = frag_hdr->_nexth;\n  }\n\n  /* Check if we are allowed to enqueue more datagrams. */\n  if ((ip6_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) {\n#if IP_REASS_FREE_OLDEST\n    ip6_reass_remove_oldest_datagram(ipr, clen);\n    if ((ip6_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)\n#endif /* IP_REASS_FREE_OLDEST */\n    {\n      /* @todo: send ICMPv6 time exceeded here? */\n      /* drop this pbuf */\n      IP6_FRAG_STATS_INC(ip6_frag.memerr);\n      IP6_FRAG_STATS_INC(ip6_frag.drop);\n      goto nullreturn;\n    }\n  }\n\n  /* Overwrite Fragment Header with our own helper struct. */\n  iprh = (struct ip6_reass_helper *)p->payload;\n  iprh->next_pbuf = NULL;\n  iprh->start = (offset & IP6_FRAG_OFFSET_MASK);\n  iprh->end = (offset & IP6_FRAG_OFFSET_MASK) + len;\n\n  /* find the right place to insert this pbuf */\n  /* Iterate through until we either get to the end of the list (append),\n   * or we find on with a larger offset (insert). */\n  for (q = ipr->p; q != NULL;) {\n    iprh_tmp = (struct ip6_reass_helper*)q->payload;\n    if (iprh->start < iprh_tmp->start) {\n#if IP_REASS_CHECK_OVERLAP\n      if (iprh->end > iprh_tmp->start) {\n        /* fragment overlaps with following, throw away */\n        IP6_FRAG_STATS_INC(ip6_frag.proterr);\n        IP6_FRAG_STATS_INC(ip6_frag.drop);\n        goto nullreturn;\n      }\n      if (iprh_prev != NULL) {\n        if (iprh->start < iprh_prev->end) {\n          /* fragment overlaps with previous, throw away */\n          IP6_FRAG_STATS_INC(ip6_frag.proterr);\n          IP6_FRAG_STATS_INC(ip6_frag.drop);\n          goto nullreturn;\n        }\n      }\n#endif /* IP_REASS_CHECK_OVERLAP */\n      /* the new pbuf should be inserted before this */\n      iprh->next_pbuf = q;\n      if (iprh_prev != NULL) {\n        /* not the fragment with the lowest offset */\n        iprh_prev->next_pbuf = p;\n      } else {\n        /* fragment with the lowest offset */\n        ipr->p = p;\n      }\n      break;\n    } else if(iprh->start == iprh_tmp->start) {\n      /* received the same datagram twice: no need to keep the datagram */\n      IP6_FRAG_STATS_INC(ip6_frag.drop);\n      goto nullreturn;\n#if IP_REASS_CHECK_OVERLAP\n    } else if(iprh->start < iprh_tmp->end) {\n      /* overlap: no need to keep the new datagram */\n      IP6_FRAG_STATS_INC(ip6_frag.proterr);\n      IP6_FRAG_STATS_INC(ip6_frag.drop);\n      goto nullreturn;\n#endif /* IP_REASS_CHECK_OVERLAP */\n    } else {\n      /* Check if the fragments received so far have no gaps. */\n      if (iprh_prev != NULL) {\n        if (iprh_prev->end != iprh_tmp->start) {\n          /* There is a fragment missing between the current\n           * and the previous fragment */\n          valid = 0;\n        }\n      }\n    }\n    q = iprh_tmp->next_pbuf;\n    iprh_prev = iprh_tmp;\n  }\n\n  /* If q is NULL, then we made it to the end of the list. Determine what to do now */\n  if (q == NULL) {\n    if (iprh_prev != NULL) {\n      /* this is (for now), the fragment with the highest offset:\n       * chain it to the last fragment */\n#if IP_REASS_CHECK_OVERLAP\n      LWIP_ASSERT(\"check fragments don't overlap\", iprh_prev->end <= iprh->start);\n#endif /* IP_REASS_CHECK_OVERLAP */\n      iprh_prev->next_pbuf = p;\n      if (iprh_prev->end != iprh->start) {\n        valid = 0;\n      }\n    } else {\n#if IP_REASS_CHECK_OVERLAP\n      LWIP_ASSERT(\"no previous fragment, this must be the first fragment!\",\n        ipr->p == NULL);\n#endif /* IP_REASS_CHECK_OVERLAP */\n      /* this is the first fragment we ever received for this ip datagram */\n      ipr->p = p;\n    }\n  }\n\n  /* Track the current number of pbufs current 'in-flight', in order to limit\n  the number of fragments that may be enqueued at any one time */\n  ip6_reass_pbufcount += clen;\n\n  /* Remember IPv6 header if this is the first fragment. */\n  if (iprh->start == 0) {\n    ipr->iphdr = (struct ip6_hdr *)ip6_current_header();\n  }\n\n  /* If this is the last fragment, calculate total packet length. */\n  if ((offset & IP6_FRAG_MORE_FLAG) == 0) {\n    ipr->datagram_len = iprh->end;\n  }\n\n  /* Additional validity tests: we have received first and last fragment. */\n  iprh_tmp = (struct ip6_reass_helper*)ipr->p->payload;\n  if (iprh_tmp->start != 0) {\n    valid = 0;\n  }\n  if (ipr->datagram_len == 0) {\n    valid = 0;\n  }\n\n  /* Final validity test: no gaps between current and last fragment. */\n  iprh_prev = iprh;\n  q = iprh->next_pbuf;\n  while ((q != NULL) && valid) {\n    iprh = (struct ip6_reass_helper*)q->payload;\n    if (iprh_prev->end != iprh->start) {\n      valid = 0;\n      break;\n    }\n    iprh_prev = iprh;\n    q = iprh->next_pbuf;\n  }\n\n  if (valid) {\n    /* All fragments have been received */\n\n    /* chain together the pbufs contained within the ip6_reassdata list. */\n    iprh = (struct ip6_reass_helper*) ipr->p->payload;\n    while(iprh != NULL) {\n\n      if (iprh->next_pbuf != NULL) {\n        /* Save next helper struct (will be hidden in next step). */\n        iprh_tmp = (struct ip6_reass_helper*) iprh->next_pbuf->payload;\n\n        /* hide the fragment header for every succeding fragment */\n        pbuf_header(iprh->next_pbuf, -IP6_FRAG_HLEN);\n        pbuf_cat(ipr->p, iprh->next_pbuf);\n      }\n      else {\n        iprh_tmp = NULL;\n      }\n\n      iprh = iprh_tmp;\n    }\n\n    /* Adjust datagram length by adding header lengths. */\n    ipr->datagram_len += ((u8_t*)ipr->p->payload - (u8_t*)ipr->iphdr)\n                         + IP6_FRAG_HLEN\n                         - IP6_HLEN ;\n\n    /* Set payload length in ip header. */\n    ipr->iphdr->_plen = htons(ipr->datagram_len);\n\n    /* Get the furst pbuf. */\n    p = ipr->p;\n\n    /* Restore Fragment Header in first pbuf. Mark as \"single fragment\"\n     * packet. Restore nexth. */\n    frag_hdr = (struct ip6_frag_hdr *) p->payload;\n    frag_hdr->_nexth = ipr->nexth;\n    frag_hdr->reserved = 0;\n    frag_hdr->_fragment_offset = 0;\n    frag_hdr->_identification = 0;\n\n    /* release the sources allocate for the fragment queue entry */\n    if (reassdatagrams == ipr) {\n      /* it was the first in the list */\n      reassdatagrams = ipr->next;\n    } else {\n      /* it wasn't the first, so it must have a valid 'prev' */\n      LWIP_ASSERT(\"sanity check linked list\", ipr_prev != NULL);\n      ipr_prev->next = ipr->next;\n    }\n    memp_free(MEMP_IP6_REASSDATA, ipr);\n\n    /* adjust the number of pbufs currently queued for reassembly. */\n    ip6_reass_pbufcount -= pbuf_clen(p);\n\n    /* Move pbuf back to IPv6 header. */\n    if (pbuf_header(p, (u8_t*)p->payload - (u8_t*)ipr->iphdr)) {\n      LWIP_ASSERT(\"ip6_reass: moving p->payload to ip6 header failed\\n\", 0);\n      pbuf_free(p);\n      return NULL;\n    }\n\n    /* Return the pbuf chain */\n    return p;\n  }\n  /* the datagram is not (yet?) reassembled completely */\n  return NULL;\n\nnullreturn:\n  pbuf_free(p);\n  return NULL;\n}\n\n#endif /* LWIP_IPV6 ^^ LWIP_IPV6_REASS */\n\n#if LWIP_IPV6 && LWIP_IPV6_FRAG\n\n/** Allocate a new struct pbuf_custom_ref */\nstatic struct pbuf_custom_ref*\nip6_frag_alloc_pbuf_custom_ref(void)\n{\n  return (struct pbuf_custom_ref*)memp_malloc(MEMP_FRAG_PBUF);\n}\n\n/** Free a struct pbuf_custom_ref */\nstatic void\nip6_frag_free_pbuf_custom_ref(struct pbuf_custom_ref* p)\n{\n  LWIP_ASSERT(\"p != NULL\", p != NULL);\n  memp_free(MEMP_FRAG_PBUF, p);\n}\n\n/** Free-callback function to free a 'struct pbuf_custom_ref', called by\n * pbuf_free. */\nstatic void\nip6_frag_free_pbuf_custom(struct pbuf *p)\n{\n  struct pbuf_custom_ref *pcr = (struct pbuf_custom_ref*)p;\n  LWIP_ASSERT(\"pcr != NULL\", pcr != NULL);\n  LWIP_ASSERT(\"pcr == p\", (void*)pcr == (void*)p);\n  if (pcr->original != NULL) {\n    pbuf_free(pcr->original);\n  }\n  ip6_frag_free_pbuf_custom_ref(pcr);\n}\n\n/**\n * Fragment an IPv6 datagram if too large for the netif or path MTU.\n *\n * Chop the datagram in MTU sized chunks and send them in order\n * by pointing PBUF_REFs into p\n *\n * @param p ipv6 packet to send\n * @param netif the netif on which to send\n * @param dest destination ipv6 address to which to send\n *\n * @return ERR_OK if sent successfully, err_t otherwise\n */\nerr_t\nip6_frag(struct pbuf *p, struct netif *netif, ip6_addr_t *dest)\n{\n  struct ip6_hdr *original_ip6hdr;\n  struct ip6_hdr *ip6hdr;\n  struct ip6_frag_hdr * frag_hdr;\n  struct pbuf *rambuf;\n  struct pbuf *newpbuf;\n  static u32_t identification;\n  u16_t nfb;\n  u16_t left, cop;\n  u16_t mtu;\n  u16_t fragment_offset = 0;\n  u16_t last;\n  u16_t poff = IP6_HLEN;\n  u16_t newpbuflen = 0;\n  u16_t left_to_copy;\n\n  identification++;\n\n  original_ip6hdr = (struct ip6_hdr *)p->payload;\n\n  mtu = nd6_get_destination_mtu(dest, netif);\n\n  /* TODO we assume there are no options in the unfragmentable part (IPv6 header). */\n  left = p->tot_len - IP6_HLEN;\n\n  nfb = (mtu - (IP6_HLEN + IP6_FRAG_HLEN)) & IP6_FRAG_OFFSET_MASK;\n\n  while (left) {\n    last = (left <= nfb);\n\n    /* Fill this fragment */\n    cop = last ? left : nfb;\n\n    /* When not using a static buffer, create a chain of pbufs.\n     * The first will be a PBUF_RAM holding the link, IPv6, and Fragment header.\n     * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged,\n     * but limited to the size of an mtu.\n     */\n    rambuf = pbuf_alloc(PBUF_LINK, IP6_HLEN + IP6_FRAG_HLEN, PBUF_RAM);\n    if (rambuf == NULL) {\n      IP6_FRAG_STATS_INC(ip6_frag.memerr);\n      return ERR_MEM;\n    }\n    LWIP_ASSERT(\"this needs a pbuf in one piece!\",\n                (p->len >= (IP6_HLEN + IP6_FRAG_HLEN)));\n    SMEMCPY(rambuf->payload, original_ip6hdr, IP6_HLEN);\n    ip6hdr = (struct ip6_hdr *)rambuf->payload;\n    frag_hdr = (struct ip6_frag_hdr *)((u8_t*)rambuf->payload + IP6_HLEN);\n\n    /* Can just adjust p directly for needed offset. */\n    p->payload = (u8_t *)p->payload + poff;\n    p->len -= poff;\n    p->tot_len -= poff;\n\n    left_to_copy = cop;\n    while (left_to_copy) {\n      struct pbuf_custom_ref *pcr;\n      newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len;\n      /* Is this pbuf already empty? */\n      if (!newpbuflen) {\n        p = p->next;\n        continue;\n      }\n      pcr = ip6_frag_alloc_pbuf_custom_ref();\n      if (pcr == NULL) {\n        pbuf_free(rambuf);\n        IP6_FRAG_STATS_INC(ip6_frag.memerr);\n        return ERR_MEM;\n      }\n      /* Mirror this pbuf, although we might not need all of it. */\n      newpbuf = pbuf_alloced_custom(PBUF_RAW, newpbuflen, PBUF_REF, &pcr->pc, p->payload, newpbuflen);\n      if (newpbuf == NULL) {\n        ip6_frag_free_pbuf_custom_ref(pcr);\n        pbuf_free(rambuf);\n        IP6_FRAG_STATS_INC(ip6_frag.memerr);\n        return ERR_MEM;\n      }\n      pbuf_ref(p);\n      pcr->original = p;\n      pcr->pc.custom_free_function = ip6_frag_free_pbuf_custom;\n\n      /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain\n       * so that it is removed when pbuf_dechain is later called on rambuf.\n       */\n      pbuf_cat(rambuf, newpbuf);\n      left_to_copy -= newpbuflen;\n      if (left_to_copy) {\n        p = p->next;\n      }\n    }\n    poff = newpbuflen;\n\n    /* Set headers */\n    frag_hdr->_nexth = original_ip6hdr->_nexth;\n    frag_hdr->reserved = 0;\n    frag_hdr->_fragment_offset = htons((fragment_offset & IP6_FRAG_OFFSET_MASK) | (last ? 0 : IP6_FRAG_MORE_FLAG));\n    frag_hdr->_identification = htonl(identification);\n\n    IP6H_NEXTH_SET(ip6hdr, IP6_NEXTH_FRAGMENT);\n    IP6H_PLEN_SET(ip6hdr, cop + IP6_FRAG_HLEN);\n\n    /* No need for separate header pbuf - we allowed room for it in rambuf\n     * when allocated.\n     */\n    IP6_FRAG_STATS_INC(ip6_frag.xmit);\n    netif->output_ip6(netif, rambuf, dest);\n\n    /* Unfortunately we can't reuse rambuf - the hardware may still be\n     * using the buffer. Instead we free it (and the ensuing chain) and\n     * recreate it next time round the loop. If we're lucky the hardware\n     * will have already sent the packet, the free will really free, and\n     * there will be zero memory penalty.\n     */\n\n    pbuf_free(rambuf);\n    left -= cop;\n    fragment_offset += cop;\n  }\n  return ERR_OK;\n}\n\n#endif /* LWIP_IPV6 && LWIP_IPV6_FRAG */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/ipv6/nd6.c",
    "content": "/**\n * @file\n *\n * Neighbor discovery and stateless address autoconfiguration for IPv6.\n * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862\n * (Address autoconfiguration).\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/nd6.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/icmp6.h\"\n#include \"lwip/mld6.h\"\n#include \"lwip/stats.h\"\n\n#include <string.h>\n\n\n/* Router tables. */\nstruct nd6_neighbor_cache_entry neighbor_cache[LWIP_ND6_NUM_NEIGHBORS];\nstruct nd6_destination_cache_entry destination_cache[LWIP_ND6_NUM_DESTINATIONS];\nstruct nd6_prefix_list_entry prefix_list[LWIP_ND6_NUM_PREFIXES];\nstruct nd6_router_list_entry default_router_list[LWIP_ND6_NUM_ROUTERS];\n\n/* Default values, can be updated by a RA message. */\nu32_t reachable_time = LWIP_ND6_REACHABLE_TIME;\nu32_t retrans_timer = LWIP_ND6_RETRANS_TIMER; /* TODO implement this value in timer */\n\n/* Index for cache entries. */\nstatic u8_t nd6_cached_neighbor_index;\nstatic u8_t nd6_cached_destination_index;\n\n/* Multicast address holder. */\nstatic ip6_addr_t multicast_address;\n\n/* Static buffer to parse RA packet options (size of a prefix option, biggest option) */\nstatic u8_t nd6_ra_buffer[sizeof(struct prefix_option)];\n\n/* Forward declarations. */\nstatic s8_t nd6_find_neighbor_cache_entry(ip6_addr_t * ip6addr);\nstatic s8_t nd6_new_neighbor_cache_entry(void);\nstatic void nd6_free_neighbor_cache_entry(s8_t i);\nstatic s8_t nd6_find_destination_cache_entry(ip6_addr_t * ip6addr);\nstatic s8_t nd6_new_destination_cache_entry(void);\nstatic s8_t nd6_is_prefix_in_netif(ip6_addr_t * ip6addr, struct netif * netif);\nstatic s8_t nd6_get_router(ip6_addr_t * router_addr, struct netif * netif);\nstatic s8_t nd6_new_router(ip6_addr_t * router_addr, struct netif * netif);\nstatic s8_t nd6_get_onlink_prefix(ip6_addr_t * prefix, struct netif * netif);\nstatic s8_t nd6_new_onlink_prefix(ip6_addr_t * prefix, struct netif * netif);\n\n#define ND6_SEND_FLAG_MULTICAST_DEST 0x01\n#define ND6_SEND_FLAG_ALLNODES_DEST 0x02\nstatic void nd6_send_ns(struct netif * netif, ip6_addr_t * target_addr, u8_t flags);\nstatic void nd6_send_na(struct netif * netif, ip6_addr_t * target_addr, u8_t flags);\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\nstatic void nd6_send_rs(struct netif * netif);\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n\n#if LWIP_ND6_QUEUEING\nstatic void nd6_free_q(struct nd6_q_entry *q);\n#else /* LWIP_ND6_QUEUEING */\n#define nd6_free_q(q) pbuf_free(q)\n#endif /* LWIP_ND6_QUEUEING */\nstatic void nd6_send_q(s8_t i);\n\n\n/**\n * Process an incoming neighbor discovery message\n *\n * @param p the nd packet, p->payload pointing to the icmpv6 header\n * @param inp the netif on which this packet was received\n */\nvoid\nnd6_input(struct pbuf *p, struct netif *inp)\n{\n  u8_t msg_type;\n  s8_t i;\n\n  ND6_STATS_INC(nd6.recv);\n\n  msg_type = *((u8_t *)p->payload);\n  switch (msg_type) {\n  case ICMP6_TYPE_NA: /* Neighbor Advertisement. */\n  {\n    struct na_header * na_hdr;\n    struct lladdr_option * lladdr_opt;\n\n    /* Check that na header fits in packet. */\n    if (p->len < (sizeof(struct na_header))) {\n      /* TODO debug message */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.lenerr);\n      ND6_STATS_INC(nd6.drop);\n      return;\n    }\n\n    na_hdr = (struct na_header *)p->payload;\n\n    /* Unsolicited NA?*/\n    if (ip6_addr_ismulticast(ip6_current_dest_addr())) {\n      /* This is an unsolicited NA.\n       * link-layer changed?\n       * part of DAD mechanism? */\n\n      /* Check that link-layer address option also fits in packet. */\n      if (p->len < (sizeof(struct na_header) + sizeof(struct lladdr_option))) {\n        /* TODO debug message */\n        pbuf_free(p);\n        ND6_STATS_INC(nd6.lenerr);\n        ND6_STATS_INC(nd6.drop);\n        return;\n      }\n\n      lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header));\n\n      /* Override ip6_current_dest_addr() so that we have an aligned copy. */\n      ip6_addr_set(ip6_current_dest_addr(), &(na_hdr->target_address));\n\n#if LWIP_IPV6_DUP_DETECT_ATTEMPTS\n      /* If the target address matches this netif, it is a DAD response. */\n      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n        if (ip6_addr_cmp(ip6_current_dest_addr(), netif_ip6_addr(inp, i))) {\n          /* We are using a duplicate address. */\n          netif_ip6_addr_set_state(inp, i, IP6_ADDR_INVALID);\n\n#if LWIP_IPV6_MLD\n          /* Leave solicited node multicast group. */\n          ip6_addr_set_solicitednode(&multicast_address, netif_ip6_addr(inp, i)->addr[3]);\n          mld6_leavegroup(netif_ip6_addr(inp, i), &multicast_address);\n#endif /* LWIP_IPV6_MLD */\n\n\n\n\n#if LWIP_IPV6_AUTOCONFIG\n          /* Check to see if this address was autoconfigured. */\n          if (!ip6_addr_islinklocal(ip6_current_dest_addr())) {\n            i = nd6_get_onlink_prefix(ip6_current_dest_addr(), inp);\n            if (i >= 0) {\n              /* Mark this prefix as duplicate, so that we don't use it\n               * to generate this address again. */\n              prefix_list[i].flags |= ND6_PREFIX_AUTOCONFIG_ADDRESS_DUPLICATE;\n            }\n          }\n#endif /* LWIP_IPV6_AUTOCONFIG */\n\n          pbuf_free(p);\n          return;\n        }\n      }\n#endif /* LWIP_IPV6_DUP_DETECT_ATTEMPTS */\n\n      /* This is an unsolicited NA, most likely there was a LLADDR change. */\n      i = nd6_find_neighbor_cache_entry(ip6_current_dest_addr());\n      if (i >= 0) {\n        if (na_hdr->flags & ND6_FLAG_OVERRIDE) {\n          MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n        }\n      }\n    }\n    else {\n      /* This is a solicited NA.\n       * neighbor address resolution response?\n       * neighbor unreachability detection response? */\n\n      /* Override ip6_current_dest_addr() so that we have an aligned copy. */\n      ip6_addr_set(ip6_current_dest_addr(), &(na_hdr->target_address));\n\n      /* Find the cache entry corresponding to this na. */\n      i = nd6_find_neighbor_cache_entry(ip6_current_dest_addr());\n      if (i < 0) {\n        /* We no longer care about this target address. drop it. */\n        pbuf_free(p);\n        return;\n      }\n\n      /* Update cache entry. */\n      neighbor_cache[i].netif = inp;\n      neighbor_cache[i].counter.reachable_time = reachable_time;\n      if ((na_hdr->flags & ND6_FLAG_OVERRIDE) ||\n          (neighbor_cache[i].state == ND6_INCOMPLETE)) {\n        /* Check that link-layer address option also fits in packet. */\n        if (p->len < (sizeof(struct na_header) + sizeof(struct lladdr_option))) {\n          /* TODO debug message */\n          pbuf_free(p);\n          ND6_STATS_INC(nd6.lenerr);\n          ND6_STATS_INC(nd6.drop);\n          return;\n        }\n\n        lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header));\n\n        MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n      }\n      neighbor_cache[i].state = ND6_REACHABLE;\n\n      /* Send queued packets, if any. */\n      if (neighbor_cache[i].q != NULL) {\n        nd6_send_q(i);\n      }\n    }\n\n    break; /* ICMP6_TYPE_NA */\n  }\n  case ICMP6_TYPE_NS: /* Neighbor solicitation. */\n  {\n    struct ns_header * ns_hdr;\n    struct lladdr_option * lladdr_opt;\n    u8_t accepted;\n\n    /* Check that ns header fits in packet. */\n    if (p->len < sizeof(struct ns_header)) {\n      /* TODO debug message */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.lenerr);\n      ND6_STATS_INC(nd6.drop);\n      return;\n    }\n\n    ns_hdr = (struct ns_header *)p->payload;\n\n    /* Check if there is a link-layer address provided. Only point to it if in this buffer. */\n    lladdr_opt = NULL;\n    if (p->len >= (sizeof(struct ns_header) + sizeof(struct lladdr_option))) {\n      lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct ns_header));\n    }\n\n    /* Check if the target address is configured on the receiving netif. */\n    accepted = 0;\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) {\n      if ((ip6_addr_isvalid(netif_ip6_addr_state(inp, i)) ||\n           (ip6_addr_istentative(netif_ip6_addr_state(inp, i)) &&\n            ip6_addr_isany(ip6_current_src_addr()))) &&\n          ip6_addr_cmp(&(ns_hdr->target_address), netif_ip6_addr(inp, i))) {\n        accepted = 1;\n        break;\n      }\n    }\n\n    /* NS not for us? */\n    if (!accepted) {\n      pbuf_free(p);\n      return;\n    }\n\n    /* Check for ANY address in src (DAD algorithm). */\n    if (ip6_addr_isany(ip6_current_src_addr())) {\n      /* Sender is validating this address. */\n      for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) {\n        if (ip6_addr_cmp(&(ns_hdr->target_address), netif_ip6_addr(inp, i))) {\n          /* Send a NA back so that the sender does not use this address. */\n          nd6_send_na(inp, netif_ip6_addr(inp, i), ND6_FLAG_OVERRIDE | ND6_SEND_FLAG_ALLNODES_DEST);\n          if (ip6_addr_istentative(netif_ip6_addr_state(inp, i))) {\n            /* We shouldn't use this address either. */\n            netif_ip6_addr_set_state(inp, i, IP6_ADDR_INVALID);\n          }\n        }\n      }\n    }\n    else {\n      /* Sender is trying to resolve our address. */\n      /* Verify that they included their own link-layer address. */\n      if (lladdr_opt == NULL) {\n        /* Not a valid message. */\n        pbuf_free(p);\n        ND6_STATS_INC(nd6.proterr);\n        ND6_STATS_INC(nd6.drop);\n        return;\n      }\n\n      i = nd6_find_neighbor_cache_entry(ip6_current_src_addr());\n      if ( i>= 0) {\n        /* We already have a record for the solicitor. */\n        if (neighbor_cache[i].state == ND6_INCOMPLETE) {\n          neighbor_cache[i].netif = inp;\n          MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n\n          /* Delay probe in case we get confirmation of reachability from upper layer (TCP). */\n          neighbor_cache[i].state = ND6_DELAY;\n          neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME;\n        }\n      }\n      else\n      {\n        /* Add their IPv6 address and link-layer address to neighbor cache.\n         * We will need it at least to send a unicast NA message, but most\n         * likely we will also be communicating with this node soon. */\n        i = nd6_new_neighbor_cache_entry();\n        if (i < 0) {\n          /* We couldn't assign a cache entry for this neighbor.\n           * we won't be able to reply. drop it. */\n          pbuf_free(p);\n          ND6_STATS_INC(nd6.memerr);\n          return;\n        }\n        neighbor_cache[i].netif = inp;\n        MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n        ip6_addr_set(&(neighbor_cache[i].next_hop_address), ip6_current_src_addr());\n\n        /* Receiving a message does not prove reachability: only in one direction.\n         * Delay probe in case we get confirmation of reachability from upper layer (TCP). */\n        neighbor_cache[i].state = ND6_DELAY;\n        neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME;\n      }\n\n      /* Override ip6_current_dest_addr() so that we have an aligned copy. */\n      ip6_addr_set(ip6_current_dest_addr(), &(ns_hdr->target_address));\n\n      /* Send back a NA for us. Allocate the reply pbuf. */\n      nd6_send_na(inp, ip6_current_dest_addr(), ND6_FLAG_SOLICITED | ND6_FLAG_OVERRIDE);\n    }\n\n    break; /* ICMP6_TYPE_NS */\n  }\n  case ICMP6_TYPE_RA: /* Router Advertisement. */\n  {\n    struct ra_header * ra_hdr;\n    u8_t * buffer; /* Used to copy options. */\n    u16_t offset;\n\n    /* Check that RA header fits in packet. */\n    if (p->len < sizeof(struct ra_header)) {\n      /* TODO debug message */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.lenerr);\n      ND6_STATS_INC(nd6.drop);\n      return;\n    }\n\n    ra_hdr = (struct ra_header *)p->payload;\n\n    /* If we are sending RS messages, stop. */\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n    inp->rs_count = 0;\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n\n    /* Get the matching default router entry. */\n    i = nd6_get_router(ip6_current_src_addr(), inp);\n    if (i < 0) {\n      /* Create a new router entry. */\n      i = nd6_new_router(ip6_current_src_addr(), inp);\n    }\n\n    if (i < 0) {\n      /* Could not create a new router entry. */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.memerr);\n      return;\n    }\n\n    /* Re-set invalidation timer. */\n    default_router_list[i].invalidation_timer = ra_hdr->router_lifetime;\n\n    /* Re-set default timer values. */\n#if LWIP_ND6_ALLOW_RA_UPDATES\n    if (ra_hdr->retrans_timer > 0) {\n      retrans_timer = ra_hdr->retrans_timer;\n    }\n    if (ra_hdr->reachable_time > 0) {\n      reachable_time = ra_hdr->reachable_time;\n    }\n#endif /* LWIP_ND6_ALLOW_RA_UPDATES */\n\n    /* TODO set default hop limit... */\n    /* ra_hdr->current_hop_limit;*/\n\n    /* Update flags in local entry (incl. preference). */\n    default_router_list[i].flags = ra_hdr->flags;\n\n    /* Offset to options. */\n    offset = sizeof(struct ra_header);\n\n    /* Process each option. */\n    while ((p->tot_len - offset) > 0) {\n      if (p->len == p->tot_len) {\n        /* no need to copy from contiguous pbuf */\n        buffer = &((u8_t*)p->payload)[offset];\n      } else {\n        buffer = nd6_ra_buffer;\n        pbuf_copy_partial(p, buffer, sizeof(struct prefix_option), offset);\n      }\n      switch (buffer[0]) {\n      case ND6_OPTION_TYPE_SOURCE_LLADDR:\n      {\n        struct lladdr_option * lladdr_opt;\n        lladdr_opt = (struct lladdr_option *)buffer;\n        if ((default_router_list[i].neighbor_entry != NULL) &&\n            (default_router_list[i].neighbor_entry->state == ND6_INCOMPLETE)) {\n          SMEMCPY(default_router_list[i].neighbor_entry->lladdr, lladdr_opt->addr, inp->hwaddr_len);\n          default_router_list[i].neighbor_entry->state = ND6_REACHABLE;\n          default_router_list[i].neighbor_entry->counter.reachable_time = reachable_time;\n        }\n        break;\n      }\n      case ND6_OPTION_TYPE_MTU:\n      {\n        struct mtu_option * mtu_opt;\n        mtu_opt = (struct mtu_option *)buffer;\n        if (mtu_opt->mtu >= 1280) {\n#if LWIP_ND6_ALLOW_RA_UPDATES\n          inp->mtu = mtu_opt->mtu;\n#endif /* LWIP_ND6_ALLOW_RA_UPDATES */\n        }\n        break;\n      }\n      case ND6_OPTION_TYPE_PREFIX_INFO:\n      {\n        struct prefix_option * prefix_opt;\n        prefix_opt = (struct prefix_option *)buffer;\n\n        if (prefix_opt->flags & ND6_PREFIX_FLAG_ON_LINK) {\n          /* Add to on-link prefix list. */\n\n          /* Get a memory-aligned copy of the prefix. */\n          ip6_addr_set(ip6_current_dest_addr(), &(prefix_opt->prefix));\n\n          /* find cache entry for this prefix. */\n          i = nd6_get_onlink_prefix(ip6_current_dest_addr(), inp);\n          if (i < 0) {\n            /* Create a new cache entry. */\n            i = nd6_new_onlink_prefix(ip6_current_dest_addr(), inp);\n          }\n          if (i >= 0) {\n            prefix_list[i].invalidation_timer = prefix_opt->valid_lifetime;\n\n#if LWIP_IPV6_AUTOCONFIG\n            if (prefix_opt->flags & ND6_PREFIX_FLAG_AUTONOMOUS) {\n              /* Mark prefix as autonomous, so that address autoconfiguration can take place.\n               * Only OR flag, so that we don't over-write other flags (such as ADDRESS_DUPLICATE)*/\n              prefix_list[i].flags |= ND6_PREFIX_AUTOCONFIG_AUTONOMOUS;\n            }\n#endif /* LWIP_IPV6_AUTOCONFIG */\n          }\n        }\n\n        break;\n      }\n      case ND6_OPTION_TYPE_ROUTE_INFO:\n      {\n        /* TODO implement preferred routes.\n        struct route_option * route_opt;\n        route_opt = (struct route_option *)buffer;*/\n\n        break;\n      }\n      default:\n        /* Unrecognized option, abort. */\n        ND6_STATS_INC(nd6.proterr);\n        break;\n      }\n      offset += 8 * ((u16_t)buffer[1]);\n    }\n\n    break; /* ICMP6_TYPE_RA */\n  }\n  case ICMP6_TYPE_RD: /* Redirect */\n  {\n    struct redirect_header * redir_hdr;\n    struct lladdr_option * lladdr_opt;\n\n    /* Check that Redir header fits in packet. */\n    if (p->len < sizeof(struct redirect_header)) {\n      /* TODO debug message */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.lenerr);\n      ND6_STATS_INC(nd6.drop);\n      return;\n    }\n\n    redir_hdr = (struct redirect_header *)p->payload;\n\n    lladdr_opt = NULL;\n    if (p->len >= (sizeof(struct redirect_header) + sizeof(struct lladdr_option))) {\n      lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct redirect_header));\n    }\n\n    /* Copy original destination address to current source address, to have an aligned copy. */\n    ip6_addr_set(ip6_current_src_addr(), &(redir_hdr->destination_address));\n\n    /* Find dest address in cache */\n    i = nd6_find_destination_cache_entry(ip6_current_src_addr());\n    if (i < 0) {\n      /* Destination not in cache, drop packet. */\n      pbuf_free(p);\n      return;\n    }\n\n    /* Set the new target address. */\n    ip6_addr_set(&(destination_cache[i].next_hop_addr), &(redir_hdr->target_address));\n\n    /* If Link-layer address of other router is given, try to add to neighbor cache. */\n    if (lladdr_opt != NULL) {\n      if (lladdr_opt->type == ND6_OPTION_TYPE_TARGET_LLADDR) {\n        /* Copy target address to current source address, to have an aligned copy. */\n        ip6_addr_set(ip6_current_src_addr(), &(redir_hdr->target_address));\n\n        i = nd6_find_neighbor_cache_entry(ip6_current_src_addr());\n        if (i < 0) {\n          i = nd6_new_neighbor_cache_entry();\n          if (i >= 0) {\n            neighbor_cache[i].netif = inp;\n            MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n            ip6_addr_set(&(neighbor_cache[i].next_hop_address), ip6_current_src_addr());\n\n            /* Receiving a message does not prove reachability: only in one direction.\n             * Delay probe in case we get confirmation of reachability from upper layer (TCP). */\n            neighbor_cache[i].state = ND6_DELAY;\n            neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME;\n          }\n        }\n        if (i >= 0) {\n          if (neighbor_cache[i].state == ND6_INCOMPLETE) {\n            MEMCPY(neighbor_cache[i].lladdr, lladdr_opt->addr, inp->hwaddr_len);\n            /* Receiving a message does not prove reachability: only in one direction.\n             * Delay probe in case we get confirmation of reachability from upper layer (TCP). */\n            neighbor_cache[i].state = ND6_DELAY;\n            neighbor_cache[i].counter.delay_time = LWIP_ND6_DELAY_FIRST_PROBE_TIME;\n          }\n        }\n      }\n    }\n    break; /* ICMP6_TYPE_RD */\n  }\n  case ICMP6_TYPE_PTB: /* Packet too big */\n  {\n    struct icmp6_hdr *icmp6hdr; /* Packet too big message */\n    struct ip6_hdr * ip6hdr; /* IPv6 header of the packet which caused the error */\n\n    /* Check that ICMPv6 header + IPv6 header fit in payload */\n    if (p->len < (sizeof(struct icmp6_hdr) + IP6_HLEN)) {\n      /* drop short packets */\n      pbuf_free(p);\n      ND6_STATS_INC(nd6.lenerr);\n      ND6_STATS_INC(nd6.drop);\n      return;\n    }\n\n    icmp6hdr = (struct icmp6_hdr *)p->payload;\n    ip6hdr = (struct ip6_hdr *)((u8_t*)p->payload + sizeof(struct icmp6_hdr));\n\n    /* Copy original destination address to current source address, to have an aligned copy. */\n    ip6_addr_set(ip6_current_src_addr(), &(ip6hdr->dest));\n\n    /* Look for entry in destination cache. */\n    i = nd6_find_destination_cache_entry(ip6_current_src_addr());\n    if (i < 0) {\n      /* Destination not in cache, drop packet. */\n      pbuf_free(p);\n      return;\n    }\n\n    /* Change the Path MTU. */\n    destination_cache[i].pmtu = icmp6hdr->data;\n\n    break; /* ICMP6_TYPE_PTB */\n  }\n\n  default:\n    ND6_STATS_INC(nd6.proterr);\n    ND6_STATS_INC(nd6.drop);\n    break; /* default */\n  }\n\n  pbuf_free(p);\n}\n\n\n/**\n * Periodic timer for Neighbor discovery functions:\n *\n * - Update neighbor reachability states\n * - Update destination cache entries age\n * - Update invalidation timers of default routers and on-link prefixes\n * - Perform duplicate address detection (DAD) for our addresses\n * - Send router solicitations\n */\nvoid\nnd6_tmr(void)\n{\n  s8_t i;\n#if LWIP_IPV6_AUTOCONFIG\n  s8_t j;\n#endif\n  struct netif * netif;\n\n  /* Process neighbor entries. */\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    switch (neighbor_cache[i].state) {\n    case ND6_INCOMPLETE:\n      if (neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) {\n        /* Retries exceeded. */\n        nd6_free_neighbor_cache_entry(i);\n      }\n      else {\n        /* Send a NS for this entry. */\n        neighbor_cache[i].counter.probes_sent++;\n        nd6_send_ns(neighbor_cache[i].netif, &(neighbor_cache[i].next_hop_address), ND6_SEND_FLAG_MULTICAST_DEST);\n      }\n      break;\n    case ND6_REACHABLE:\n      /* Send queued packets, if any are left. Should have been sent already. */\n      if (neighbor_cache[i].q != NULL) {\n        nd6_send_q(i);\n      }\n      if (neighbor_cache[i].counter.reachable_time <= ND6_TMR_INTERVAL) {\n        /* Change to stale state. */\n        neighbor_cache[i].state = ND6_STALE;\n        neighbor_cache[i].counter.stale_time = 0;\n      }\n      else {\n        neighbor_cache[i].counter.reachable_time -= ND6_TMR_INTERVAL;\n      }\n      break;\n    case ND6_STALE:\n      neighbor_cache[i].counter.stale_time += ND6_TMR_INTERVAL;\n      break;\n    case ND6_DELAY:\n      if (neighbor_cache[i].counter.delay_time <= ND6_TMR_INTERVAL) {\n        /* Change to PROBE state. */\n        neighbor_cache[i].state = ND6_PROBE;\n        neighbor_cache[i].counter.probes_sent = 0;\n      }\n      else {\n        neighbor_cache[i].counter.delay_time -= ND6_TMR_INTERVAL;\n      }\n      break;\n    case ND6_PROBE:\n      if (neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) {\n        /* Retries exceeded. */\n        nd6_free_neighbor_cache_entry(i);\n      }\n      else {\n        /* Send a NS for this entry. */\n        neighbor_cache[i].counter.probes_sent++;\n        nd6_send_ns(neighbor_cache[i].netif, &(neighbor_cache[i].next_hop_address), 0);\n      }\n      break;\n    case ND6_NO_ENTRY:\n    default:\n      /* Do nothing. */\n      break;\n    }\n  }\n\n  /* Process destination entries. */\n  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {\n    destination_cache[i].age++;\n  }\n\n  /* Process router entries. */\n  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {\n    if (default_router_list[i].neighbor_entry != NULL) {\n      /* Active entry. */\n      if (default_router_list[i].invalidation_timer > 0) {\n        default_router_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000;\n      }\n      if (default_router_list[i].invalidation_timer < ND6_TMR_INTERVAL / 1000) {\n        /* Less than 1 second remainig. Clear this entry. */\n        default_router_list[i].neighbor_entry->isrouter = 0;\n        default_router_list[i].neighbor_entry = NULL;\n        default_router_list[i].invalidation_timer = 0;\n        default_router_list[i].flags = 0;\n      }\n    }\n  }\n\n  /* Process prefix entries. */\n  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) {\n    if (prefix_list[i].invalidation_timer < ND6_TMR_INTERVAL / 1000) {\n      prefix_list[i].invalidation_timer = 0;\n    }\n    if ((prefix_list[i].invalidation_timer > 0) &&\n        (prefix_list[i].netif != NULL)) {\n      prefix_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000;\n\n#if LWIP_IPV6_AUTOCONFIG\n      /* Initiate address autoconfiguration for this prefix, if conditions are met. */\n      if (prefix_list[i].netif->ip6_autoconfig_enabled &&\n          (prefix_list[i].flags & ND6_PREFIX_AUTOCONFIG_AUTONOMOUS) &&\n          !(prefix_list[i].flags & ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED)) {\n        /* Try to get an address on this netif that is invalid.\n         * Skip 0 index (link-local address) */\n        for (j = 1; j < LWIP_IPV6_NUM_ADDRESSES; j++) {\n          if (netif_ip6_addr_state(prefix_list[i].netif, j) == IP6_ADDRESS_STATE_INVALID) {\n            /* Generate an address using this prefix and interface ID from link-local address. */\n            prefix_list[i].netif->ip6_addr[j].addr[0] = prefix_list[i].prefix.addr[0];\n            prefix_list[i].netif->ip6_addr[j].addr[1] = prefix_list[i].prefix.addr[1];\n            prefix_list[i].netif->ip6_addr[j].addr[2] = prefix_list[i].netif->ip6_addr[0].addr[2];\n            prefix_list[i].netif->ip6_addr[j].addr[3] = prefix_list[i].netif->ip6_addr[0].addr[3];\n\n            /* Mark it as tentative (DAD will be performed if configured). */\n            netif_ip6_addr_set_state(prefix_list[i].netif, j, IP6_ADDR_TENTATIVE);\n\n            /* Mark this prefix with ADDRESS_GENERATED, so that we don't try again. */\n            prefix_list[i].flags |= ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED;\n\n            /* Exit loop. */\n            break;\n          }\n        }\n      }\n#endif /* LWIP_IPV6_AUTOCONFIG */\n    }\n  }\n\n\n  /* Process our own addresses, if DAD configured. */\n  for (netif = netif_list; netif != NULL; netif = netif->next) {\n    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) {\n      if (ip6_addr_istentative(netif->ip6_addr_state[i])) {\n        if ((netif->ip6_addr_state[i] & 0x07) >= LWIP_IPV6_DUP_DETECT_ATTEMPTS) {\n          /* No NA received in response. Mark address as valid. */\n          netif->ip6_addr_state[i] = IP6_ADDR_PREFERRED;\n          /* TODO implement preferred and valid lifetimes. */\n        }\n        else if (netif->flags & NETIF_FLAG_UP) {\n#if LWIP_IPV6_MLD\n          if ((netif->ip6_addr_state[i] & 0x07) == 0) {\n            /* Join solicited node multicast group. */\n            ip6_addr_set_solicitednode(&multicast_address, netif_ip6_addr(netif, i)->addr[3]);\n            mld6_joingroup(netif_ip6_addr(netif, i), &multicast_address);\n          }\n#endif /* LWIP_IPV6_MLD */\n          /* Send a NS for this address. */\n          nd6_send_ns(netif, netif_ip6_addr(netif, i), ND6_SEND_FLAG_MULTICAST_DEST);\n          (netif->ip6_addr_state[i])++;\n          /* TODO send max 1 NS per tmr call? enable return*/\n          /*return;*/\n        }\n      }\n    }\n  }\n\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n  /* Send router solicitation messages, if necessary. */\n  for (netif = netif_list; netif != NULL; netif = netif->next) {\n    if ((netif->rs_count > 0) && (netif->flags & NETIF_FLAG_UP)) {\n      nd6_send_rs(netif);\n      netif->rs_count--;\n    }\n  }\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n\n}\n\n/**\n * Send a neighbor solicitation message\n *\n * @param netif the netif on which to send the message\n * @param target_addr the IPv6 target address for the ND message\n * @param flags one of ND6_SEND_FLAG_*\n */\nstatic void\nnd6_send_ns(struct netif * netif, ip6_addr_t * target_addr, u8_t flags)\n{\n  struct ns_header * ns_hdr;\n  struct lladdr_option * lladdr_opt;\n  struct pbuf * p;\n  ip6_addr_t * src_addr;\n\n  if (ip6_addr_isvalid(netif_ip6_addr_state(netif,0))) {\n    /* Use link-local address as source address. */\n    src_addr = netif_ip6_addr(netif, 0);\n  } else {\n    src_addr = IP6_ADDR_ANY;\n  }\n\n  /* Allocate a packet. */\n  p = pbuf_alloc(PBUF_IP, sizeof(struct ns_header) + sizeof(struct lladdr_option), PBUF_RAM);\n  if ((p == NULL) || (p->len < (sizeof(struct ns_header) + sizeof(struct lladdr_option)))) {\n    /* We couldn't allocate a suitable pbuf for the ns. drop it. */\n    if (p != NULL) {\n      pbuf_free(p);\n    }\n    ND6_STATS_INC(nd6.memerr);\n    return;\n  }\n\n  /* Set fields. */\n  ns_hdr = (struct ns_header *)p->payload;\n  lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct ns_header));\n\n  ns_hdr->type = ICMP6_TYPE_NS;\n  ns_hdr->code = 0;\n  ns_hdr->chksum = 0;\n  ns_hdr->reserved = 0;\n  ip6_addr_set(&(ns_hdr->target_address), target_addr);\n\n  lladdr_opt->type = ND6_OPTION_TYPE_SOURCE_LLADDR;\n  lladdr_opt->length = ((netif->hwaddr_len + 2) >> 3) + (((netif->hwaddr_len + 2) & 0x07) ? 1 : 0);\n  SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len);\n\n  /* Generate the solicited node address for the target address. */\n  if (flags & ND6_SEND_FLAG_MULTICAST_DEST) {\n    ip6_addr_set_solicitednode(&multicast_address, target_addr->addr[3]);\n    target_addr = &multicast_address;\n  }\n\n  ns_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr,\n    target_addr);\n\n  /* Send the packet out. */\n  ND6_STATS_INC(nd6.xmit);\n  ip6_output_if(p, (src_addr == IP6_ADDR_ANY) ? NULL : src_addr, target_addr,\n      LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, netif);\n  pbuf_free(p);\n}\n\n/**\n * Send a neighbor advertisement message\n *\n * @param netif the netif on which to send the message\n * @param target_addr the IPv6 target address for the ND message\n * @param flags one of ND6_SEND_FLAG_*\n */\nstatic void\nnd6_send_na(struct netif * netif, ip6_addr_t * target_addr, u8_t flags)\n{\n  struct na_header * na_hdr;\n  struct lladdr_option * lladdr_opt;\n  struct pbuf * p;\n  ip6_addr_t * src_addr;\n  ip6_addr_t * dest_addr;\n\n  /* Use link-local address as source address. */\n  /* src_addr = &(netif->ip6_addr[0]); */\n  /* Use target address as source address. */\n  src_addr = target_addr;\n\n  /* Allocate a packet. */\n  p = pbuf_alloc(PBUF_IP, sizeof(struct na_header) + sizeof(struct lladdr_option), PBUF_RAM);\n  if ((p == NULL) || (p->len < (sizeof(struct na_header) + sizeof(struct lladdr_option)))) {\n    /* We couldn't allocate a suitable pbuf for the ns. drop it. */\n    if (p != NULL) {\n      pbuf_free(p);\n    }\n    ND6_STATS_INC(nd6.memerr);\n    return;\n  }\n\n  /* Set fields. */\n  na_hdr = (struct na_header *)p->payload;\n  lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct na_header));\n\n  na_hdr->type = ICMP6_TYPE_NA;\n  na_hdr->code = 0;\n  na_hdr->chksum = 0;\n  na_hdr->flags = flags & 0xf0;\n  na_hdr->reserved[0] = 0;\n  na_hdr->reserved[1] = 0;\n  na_hdr->reserved[2] = 0;\n  ip6_addr_set(&(na_hdr->target_address), target_addr);\n\n  lladdr_opt->type = ND6_OPTION_TYPE_TARGET_LLADDR;\n  lladdr_opt->length = ((netif->hwaddr_len + 2) >> 3) + (((netif->hwaddr_len + 2) & 0x07) ? 1 : 0);\n  SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len);\n\n  /* Generate the solicited node address for the target address. */\n  if (flags & ND6_SEND_FLAG_MULTICAST_DEST) {\n    ip6_addr_set_solicitednode(&multicast_address, target_addr->addr[3]);\n    dest_addr = &multicast_address;\n  }\n  else if (flags & ND6_SEND_FLAG_ALLNODES_DEST) {\n    ip6_addr_set_allnodes_linklocal(&multicast_address);\n    dest_addr = &multicast_address;\n  }\n  else {\n    dest_addr = ip6_current_src_addr();\n  }\n\n  na_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr,\n    dest_addr);\n\n  /* Send the packet out. */\n  ND6_STATS_INC(nd6.xmit);\n  ip6_output_if(p, src_addr, dest_addr,\n      LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, netif);\n  pbuf_free(p);\n}\n\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n/**\n * Send a router solicitation message\n *\n * @param netif the netif on which to send the message\n */\nstatic void\nnd6_send_rs(struct netif * netif)\n{\n  struct rs_header * rs_hdr;\n  struct lladdr_option * lladdr_opt;\n  struct pbuf * p;\n  ip6_addr_t * src_addr;\n  u16_t packet_len;\n\n  /* Link-local source address, or unspecified address? */\n  if (ip6_addr_isvalid(netif_ip6_addr_state(netif, 0))) {\n    src_addr = netif_ip6_addr(netif, 0);\n  }\n  else {\n    src_addr = IP6_ADDR_ANY;\n  }\n\n  /* Generate the all routers target address. */\n  ip6_addr_set_allrouters_linklocal(&multicast_address);\n\n  /* Allocate a packet. */\n  packet_len = sizeof(struct rs_header);\n  if (src_addr != IP6_ADDR_ANY) {\n    packet_len += sizeof(struct lladdr_option);\n  }\n  p = pbuf_alloc(PBUF_IP, packet_len, PBUF_RAM);\n  if ((p == NULL) || (p->len < packet_len)) {\n    /* We couldn't allocate a suitable pbuf for the ns. drop it. */\n    if (p != NULL) {\n      pbuf_free(p);\n    }\n    ND6_STATS_INC(nd6.memerr);\n    return;\n  }\n\n  /* Set fields. */\n  rs_hdr = (struct rs_header *)p->payload;\n\n  rs_hdr->type = ICMP6_TYPE_RS;\n  rs_hdr->code = 0;\n  rs_hdr->chksum = 0;\n  rs_hdr->reserved = 0;\n\n  if (src_addr != IP6_ADDR_ANY) {\n    /* Include our hw address. */\n    lladdr_opt = (struct lladdr_option *)((u8_t*)p->payload + sizeof(struct rs_header));\n    lladdr_opt->type = ND6_OPTION_TYPE_SOURCE_LLADDR;\n    lladdr_opt->length = ((netif->hwaddr_len + 2) >> 3) + (((netif->hwaddr_len + 2) & 0x07) ? 1 : 0);\n    SMEMCPY(lladdr_opt->addr, netif->hwaddr, netif->hwaddr_len);\n  }\n\n  rs_hdr->chksum = ip6_chksum_pseudo(p, IP6_NEXTH_ICMP6, p->len, src_addr,\n    &multicast_address);\n\n  /* Send the packet out. */\n  ND6_STATS_INC(nd6.xmit);\n  ip6_output_if(p, src_addr, &multicast_address,\n      LWIP_ICMP6_HL, 0, IP6_NEXTH_ICMP6, netif);\n  pbuf_free(p);\n}\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n\n/**\n * Search for a neighbor cache entry\n *\n * @param ip6addr the IPv6 address of the neighbor\n * @return The neighbor cache entry index that matched, -1 if no\n * entry is found\n */\nstatic s8_t\nnd6_find_neighbor_cache_entry(ip6_addr_t * ip6addr)\n{\n  s8_t i;\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if (ip6_addr_cmp(ip6addr, &(neighbor_cache[i].next_hop_address))) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Create a new neighbor cache entry.\n *\n * If no unused entry is found, will try to recycle an old entry\n * according to ad-hoc \"age\" heuristic.\n *\n * @return The neighbor cache entry index that was created, -1 if no\n * entry could be created\n */\nstatic s8_t\nnd6_new_neighbor_cache_entry(void)\n{\n  s8_t i;\n  s8_t j;\n  u32_t time;\n\n\n  /* First, try to find an empty entry. */\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if (neighbor_cache[i].state == ND6_NO_ENTRY) {\n      return i;\n    }\n  }\n\n  /* We need to recycle an entry. in general, do not recycle if it is a router. */\n\n  /* Next, try to find a Stale entry. */\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if ((neighbor_cache[i].state == ND6_STALE) &&\n        (!neighbor_cache[i].isrouter)) {\n      nd6_free_neighbor_cache_entry(i);\n      return i;\n    }\n  }\n\n  /* Next, try to find a Probe entry. */\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if ((neighbor_cache[i].state == ND6_PROBE) &&\n        (!neighbor_cache[i].isrouter)) {\n      nd6_free_neighbor_cache_entry(i);\n      return i;\n    }\n  }\n\n  /* Next, try to find a Delayed entry. */\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if ((neighbor_cache[i].state == ND6_DELAY) &&\n        (!neighbor_cache[i].isrouter)) {\n      nd6_free_neighbor_cache_entry(i);\n      return i;\n    }\n  }\n\n  /* Next, try to find the oldest reachable entry. */\n  time = 0xfffffffful;\n  j = -1;\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if ((neighbor_cache[i].state == ND6_REACHABLE) &&\n        (!neighbor_cache[i].isrouter)) {\n      if (neighbor_cache[i].counter.reachable_time < time) {\n        j = i;\n        time = neighbor_cache[i].counter.reachable_time;\n      }\n    }\n  }\n  if (j >= 0) {\n    nd6_free_neighbor_cache_entry(j);\n    return j;\n  }\n\n  /* Next, find oldest incomplete entry without queued packets. */\n  time = 0;\n  j = -1;\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if (\n        (neighbor_cache[i].q == NULL) &&\n        (neighbor_cache[i].state == ND6_INCOMPLETE) &&\n        (!neighbor_cache[i].isrouter)) {\n      if (neighbor_cache[i].counter.probes_sent >= time) {\n        j = i;\n        time = neighbor_cache[i].counter.probes_sent;\n      }\n    }\n  }\n  if (j >= 0) {\n    nd6_free_neighbor_cache_entry(j);\n    return j;\n  }\n\n  /* Next, find oldest incomplete entry with queued packets. */\n  time = 0;\n  j = -1;\n  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {\n    if ((neighbor_cache[i].state == ND6_INCOMPLETE) &&\n        (!neighbor_cache[i].isrouter)) {\n      if (neighbor_cache[i].counter.probes_sent >= time) {\n        j = i;\n        time = neighbor_cache[i].counter.probes_sent;\n      }\n    }\n  }\n  if (j >= 0) {\n    nd6_free_neighbor_cache_entry(j);\n    return j;\n  }\n\n  /* No more entries to try. */\n  return -1;\n}\n\n/**\n * Will free any resources associated with a neighbor cache\n * entry, and will mark it as unused.\n *\n * @param i the neighbor cache entry index to free\n */\nstatic void\nnd6_free_neighbor_cache_entry(s8_t i)\n{\n  if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) {\n    return;\n  }\n\n  /* Free any queued packets. */\n  if (neighbor_cache[i].q != NULL) {\n    nd6_free_q(neighbor_cache[i].q);\n    neighbor_cache[i].q = NULL;\n  }\n\n  neighbor_cache[i].state = ND6_NO_ENTRY;\n  neighbor_cache[i].isrouter = 0;\n  neighbor_cache[i].netif = NULL;\n  neighbor_cache[i].counter.reachable_time = 0;\n  ip6_addr_set_zero(&(neighbor_cache[i].next_hop_address));\n}\n\n/**\n * Search for a destination cache entry\n *\n * @param ip6addr the IPv6 address of the destination\n * @return The destination cache entry index that matched, -1 if no\n * entry is found\n */\nstatic s8_t\nnd6_find_destination_cache_entry(ip6_addr_t * ip6addr)\n{\n  s8_t i;\n  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {\n    if (ip6_addr_cmp(ip6addr, &(destination_cache[i].destination_addr))) {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Create a new destination cache entry. If no unused entry is found,\n * will recycle oldest entry.\n *\n * @return The destination cache entry index that was created, -1 if no\n * entry was created\n */\nstatic s8_t\nnd6_new_destination_cache_entry(void)\n{\n  s8_t i, j;\n  u32_t age;\n\n  /* Find an empty entry. */\n  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {\n    if (ip6_addr_isany(&(destination_cache[i].destination_addr))) {\n      return i;\n    }\n  }\n\n  /* Find oldest entry. */\n  age = 0;\n  j = LWIP_ND6_NUM_DESTINATIONS - 1;\n  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {\n    if (destination_cache[i].age > age) {\n      j = i;\n    }\n  }\n\n  return j;\n}\n\n/**\n * Determine whether an address matches an on-link prefix.\n *\n * @param ip6addr the IPv6 address to match\n * @return 1 if the address is on-link, 0 otherwise\n */\nstatic s8_t\nnd6_is_prefix_in_netif(ip6_addr_t * ip6addr, struct netif * netif)\n{\n  s8_t i;\n  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) {\n    if ((prefix_list[i].netif == netif) &&\n        (prefix_list[i].invalidation_timer > 0) &&\n        ip6_addr_netcmp(ip6addr, &(prefix_list[i].prefix))) {\n      return 1;\n    }\n  }\n  /* Check to see if address prefix matches a (manually?) configured address. */\n  for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n    if (ip6_addr_isvalid(netif_ip6_addr_state(netif, i)) &&\n        ip6_addr_netcmp(ip6addr, netif_ip6_addr(netif, i))) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\n/**\n * Select a default router for a destination.\n *\n * @param ip6addr the destination address\n * @param netif the netif for the outgoing packet, if known\n * @return the default router entry index, or -1 if no suitable\n *         router is found\n */\ns8_t\nnd6_select_router(ip6_addr_t * ip6addr, struct netif * netif)\n{\n  s8_t i;\n  /* last_router is used for round-robin router selection (as recommended\n   * in RFC). This is more robust in case one router is not reachable,\n   * we are not stuck trying to resolve it. */\n  static s8_t last_router;\n  (void)ip6addr; /* TODO match preferred routes!! (must implement ND6_OPTION_TYPE_ROUTE_INFO) */\n\n  /* TODO: implement default router preference */\n\n  /* Look for reachable routers. */\n  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {\n    if (++last_router >= LWIP_ND6_NUM_ROUTERS) {\n      last_router = 0;\n    }\n    if ((default_router_list[i].neighbor_entry != NULL) &&\n        (netif != NULL ? netif == default_router_list[i].neighbor_entry->netif : 1) &&\n        (default_router_list[i].invalidation_timer > 0) &&\n        (default_router_list[i].neighbor_entry->state == ND6_REACHABLE)) {\n      return i;\n    }\n  }\n\n  /* Look for router in other reachability states, but still valid according to timer. */\n  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {\n    if (++last_router >= LWIP_ND6_NUM_ROUTERS) {\n      last_router = 0;\n    }\n    if ((default_router_list[i].neighbor_entry != NULL) &&\n        (netif != NULL ? netif == default_router_list[i].neighbor_entry->netif : 1) &&\n        (default_router_list[i].invalidation_timer > 0)) {\n      return i;\n    }\n  }\n\n  /* Look for any router for which we have any information at all. */\n  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {\n    if (++last_router >= LWIP_ND6_NUM_ROUTERS) {\n      last_router = 0;\n    }\n    if (default_router_list[i].neighbor_entry != NULL &&\n        (netif != NULL ? netif == default_router_list[i].neighbor_entry->netif : 1)) {\n      return i;\n    }\n  }\n\n  /* no suitable router found. */\n  return -1;\n}\n\n/**\n * Find an entry for a default router.\n *\n * @param router_addr the IPv6 address of the router\n * @param netif the netif on which the router is found, if known\n * @return the index of the router entry, or -1 if not found\n */\nstatic s8_t\nnd6_get_router(ip6_addr_t * router_addr, struct netif * netif)\n{\n  s8_t i;\n\n  /* Look for router. */\n  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {\n    if ((default_router_list[i].neighbor_entry != NULL) &&\n        ((netif != NULL) ? netif == default_router_list[i].neighbor_entry->netif : 1) &&\n        ip6_addr_cmp(router_addr, &(default_router_list[i].neighbor_entry->next_hop_address))) {\n      return i;\n    }\n  }\n\n  /* router not found. */\n  return -1;\n}\n\n/**\n * Create a new entry for a default router.\n *\n * @param router_addr the IPv6 address of the router\n * @param netif the netif on which the router is connected, if known\n * @return the index on the router table, or -1 if could not be created\n */\nstatic s8_t\nnd6_new_router(ip6_addr_t * router_addr, struct netif * netif)\n{\n  s8_t router_index;\n  s8_t neighbor_index;\n\n  /* Do we have a neighbor entry for this router? */\n  neighbor_index = nd6_find_neighbor_cache_entry(router_addr);\n  if (neighbor_index < 0) {\n    /* Create a neighbor entry for this router. */\n    neighbor_index = nd6_new_neighbor_cache_entry();\n    if (neighbor_index < 0) {\n      /* Could not create neighbor entry for this router. */\n      return -1;\n    }\n    ip6_addr_set(&(neighbor_cache[neighbor_index].next_hop_address), router_addr);\n    neighbor_cache[neighbor_index].netif = netif;\n    neighbor_cache[neighbor_index].q = NULL;\n    neighbor_cache[neighbor_index].state = ND6_INCOMPLETE;\n    neighbor_cache[neighbor_index].counter.probes_sent = 0;\n  }\n\n  /* Mark neighbor as router. */\n  neighbor_cache[neighbor_index].isrouter = 1;\n\n  /* Look for empty entry. */\n  for (router_index = 0; router_index < LWIP_ND6_NUM_ROUTERS; router_index++) {\n    if (default_router_list[router_index].neighbor_entry == NULL) {\n      default_router_list[router_index].neighbor_entry = &(neighbor_cache[neighbor_index]);\n      return router_index;\n    }\n  }\n\n  /* Could not create a router entry. */\n\n  /* Mark neighbor entry as not-router. Entry might be useful as neighbor still. */\n  neighbor_cache[neighbor_index].isrouter = 0;\n\n  /* router not found. */\n  return -1;\n}\n\n/**\n * Find the cached entry for an on-link prefix.\n *\n * @param prefix the IPv6 prefix that is on-link\n * @param netif the netif on which the prefix is on-link\n * @return the index on the prefix table, or -1 if not found\n */\nstatic s8_t\nnd6_get_onlink_prefix(ip6_addr_t * prefix, struct netif * netif)\n{\n  s8_t i;\n\n  /* Look for prefix in list. */\n  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; ++i) {\n    if ((ip6_addr_netcmp(&(prefix_list[i].prefix), prefix)) &&\n        (prefix_list[i].netif == netif)) {\n      return i;\n    }\n  }\n\n  /* Entry not available. */\n  return -1;\n}\n\n/**\n * Creates a new entry for an on-link prefix.\n *\n * @param prefix the IPv6 prefix that is on-link\n * @param netif the netif on which the prefix is on-link\n * @return the index on the prefix table, or -1 if not created\n */\nstatic s8_t\nnd6_new_onlink_prefix(ip6_addr_t * prefix, struct netif * netif)\n{\n  s8_t i;\n\n  /* Create new entry. */\n  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; ++i) {\n    if ((prefix_list[i].netif == NULL) ||\n        (prefix_list[i].invalidation_timer == 0)) {\n      /* Found empty prefix entry. */\n      prefix_list[i].netif = netif;\n      ip6_addr_set(&(prefix_list[i].prefix), prefix);\n#if LWIP_IPV6_AUTOCONFIG\n      prefix_list[i].flags = 0;\n#endif\n      return i;\n    }\n  }\n\n  /* Entry not available. */\n  return -1;\n}\n\n/**\n * Determine the next hop for a destination. Will determine if the\n * destination is on-link, else a suitable on-link router is selected.\n *\n * The last entry index is cached for fast entry search.\n *\n * @param ip6addr the destination address\n * @param netif the netif on which the packet will be sent\n * @return the neighbor cache entry for the next hop, ERR_RTE if no\n *         suitable next hop was found, ERR_MEM if no cache entry\n *         could be created\n */\ns8_t\nnd6_get_next_hop_entry(ip6_addr_t * ip6addr, struct netif * netif)\n{\n  s8_t i;\n\n#if LWIP_NETIF_HWADDRHINT\n  if (netif->addr_hint != NULL) {\n    /* per-pcb cached entry was given */\n    u8_t addr_hint = *(netif->addr_hint);\n    if (addr_hint < LWIP_ND6_NUM_DESTINATIONS) {\n      nd6_cached_destination_index = addr_hint;\n    }\n  }\n#endif /* LWIP_NETIF_HWADDRHINT */\n\n  /* Look for ip6addr in destination cache. */\n  if (ip6_addr_cmp(ip6addr, &(destination_cache[nd6_cached_destination_index].destination_addr))) {\n    /* the cached entry index is the right one! */\n    /* do nothing. */\n    ND6_STATS_INC(nd6.cachehit);\n  } else {\n    /* Search destination cache. */\n    i = nd6_find_destination_cache_entry(ip6addr);\n    if (i >= 0) {\n      /* found destination entry. make it our new cached index. */\n      nd6_cached_destination_index = i;\n    }\n    else {\n      /* Not found. Create a new destination entry. */\n      i = nd6_new_destination_cache_entry();\n      if (i >= 0) {\n        /* got new destination entry. make it our new cached index. */\n        nd6_cached_destination_index = i;\n      } else {\n        /* Could not create a destination cache entry. */\n        return ERR_MEM;\n      }\n\n      /* Copy dest address to destination cache. */\n      ip6_addr_set(&(destination_cache[nd6_cached_destination_index].destination_addr), ip6addr);\n\n      /* Now find the next hop. is it a neighbor? */\n      if (ip6_addr_islinklocal(ip6addr) ||\n          nd6_is_prefix_in_netif(ip6addr, netif)) {\n        /* Destination in local link. */\n        destination_cache[nd6_cached_destination_index].pmtu = netif->mtu;\n        ip6_addr_copy(destination_cache[nd6_cached_destination_index].next_hop_addr, destination_cache[nd6_cached_destination_index].destination_addr);\n      }\n      else {\n        /* We need to select a router. */\n        i = nd6_select_router(ip6addr, netif);\n        if (i < 0) {\n          /* No router found. */\n          ip6_addr_set_any(&(destination_cache[nd6_cached_destination_index].destination_addr));\n          return ERR_RTE;\n        }\n        destination_cache[nd6_cached_destination_index].pmtu = netif->mtu; /* Start with netif mtu, correct through ICMPv6 if necessary */\n        ip6_addr_copy(destination_cache[nd6_cached_destination_index].next_hop_addr, default_router_list[i].neighbor_entry->next_hop_address);\n      }\n    }\n  }\n\n#if LWIP_NETIF_HWADDRHINT\n  if (netif->addr_hint != NULL) {\n    /* per-pcb cached entry was given */\n    *(netif->addr_hint) = nd6_cached_destination_index;\n  }\n#endif /* LWIP_NETIF_HWADDRHINT */\n\n  /* Look in neighbor cache for the next-hop address. */\n  if (ip6_addr_cmp(&(destination_cache[nd6_cached_destination_index].next_hop_addr),\n                   &(neighbor_cache[nd6_cached_neighbor_index].next_hop_address))) {\n    /* Cache hit. */\n    /* Do nothing. */\n    ND6_STATS_INC(nd6.cachehit);\n  } else {\n    i = nd6_find_neighbor_cache_entry(&(destination_cache[nd6_cached_destination_index].next_hop_addr));\n    if (i >= 0) {\n      /* Found a matching record, make it new cached entry. */\n      nd6_cached_neighbor_index = i;\n    }\n    else {\n      /* Neighbor not in cache. Make a new entry. */\n      i = nd6_new_neighbor_cache_entry();\n      if (i >= 0) {\n        /* got new neighbor entry. make it our new cached index. */\n        nd6_cached_neighbor_index = i;\n      } else {\n        /* Could not create a neighbor cache entry. */\n        return ERR_MEM;\n      }\n\n      /* Initialize fields. */\n      ip6_addr_copy(neighbor_cache[i].next_hop_address,\n                   destination_cache[nd6_cached_destination_index].next_hop_addr);\n      neighbor_cache[i].isrouter = 0;\n      neighbor_cache[i].netif = netif;\n      neighbor_cache[i].state = ND6_INCOMPLETE;\n      neighbor_cache[i].counter.probes_sent = 0;\n    }\n  }\n\n  /* Reset this destination's age. */\n  destination_cache[nd6_cached_destination_index].age = 0;\n\n  return nd6_cached_neighbor_index;\n}\n\n/**\n * Queue a packet for a neighbor.\n *\n * @param neighbor_index the index in the neighbor cache table\n * @param q packet to be queued\n * @return ERR_OK if succeeded, ERR_MEM if out of memory\n */\nerr_t\nnd6_queue_packet(s8_t neighbor_index, struct pbuf * q)\n{\n  err_t result = ERR_MEM;\n  struct pbuf *p;\n  int copy_needed = 0;\n#if LWIP_ND6_QUEUEING\n  struct nd6_q_entry *new_entry, *r;\n#endif /* LWIP_ND6_QUEUEING */\n\n  if ((neighbor_index < 0) || (neighbor_index >= LWIP_ND6_NUM_NEIGHBORS)) {\n    return ERR_ARG;\n  }\n\n  /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but\n   * to copy the whole queue into a new PBUF_RAM (see bug #11400)\n   * PBUF_ROMs can be left as they are, since ROM must not get changed. */\n  p = q;\n  while (p) {\n    if(p->type != PBUF_ROM) {\n      copy_needed = 1;\n      break;\n    }\n    p = p->next;\n  }\n  if(copy_needed) {\n    /* copy the whole packet into new pbufs */\n    p = pbuf_alloc(PBUF_LINK, q->tot_len, PBUF_RAM);\n    while ((p == NULL) && (neighbor_cache[neighbor_index].q != NULL)) {\n      /* Free oldest packet (as per RFC recommendation) */\n#if LWIP_ND6_QUEUEING\n      r = neighbor_cache[neighbor_index].q;\n      neighbor_cache[neighbor_index].q = r->next;\n      r->next = NULL;\n      nd6_free_q(r);\n#else /* LWIP_ND6_QUEUEING */\n      pbuf_free(neighbor_cache[neighbor_index].q);\n      neighbor_cache[neighbor_index].q = NULL;\n#endif /* LWIP_ND6_QUEUEING */\n      p = pbuf_alloc(PBUF_LINK, q->tot_len, PBUF_RAM);\n    }\n    if(p != NULL) {\n      if (pbuf_copy(p, q) != ERR_OK) {\n        pbuf_free(p);\n        p = NULL;\n      }\n    }\n  } else {\n    /* referencing the old pbuf is enough */\n    p = q;\n    pbuf_ref(p);\n  }\n  /* packet was copied/ref'd? */\n  if (p != NULL) {\n    /* queue packet ... */\n#if LWIP_ND6_QUEUEING\n    /* allocate a new nd6 queue entry */\n    new_entry = (struct nd6_q_entry *)memp_malloc(MEMP_ND6_QUEUE);\n    if ((new_entry == NULL) && (neighbor_cache[neighbor_index].q != NULL)) {\n      /* Free oldest packet (as per RFC recommendation) */\n      r = neighbor_cache[neighbor_index].q;\n      neighbor_cache[neighbor_index].q = r->next;\n      r->next = NULL;\n      nd6_free_q(r);\n      new_entry = (struct nd6_q_entry *)memp_malloc(MEMP_ND6_QUEUE);\n    }\n    if (new_entry != NULL) {\n      new_entry->next = NULL;\n      new_entry->p = p;\n      if(neighbor_cache[neighbor_index].q != NULL) {\n        /* queue was already existent, append the new entry to the end */\n        r = neighbor_cache[neighbor_index].q;\n        while (r->next != NULL) {\n          r = r->next;\n        }\n        r->next = new_entry;\n      } else {\n        /* queue did not exist, first item in queue */\n        neighbor_cache[neighbor_index].q = new_entry;\n      }\n      LWIP_DEBUGF(LWIP_DBG_TRACE, (\"ipv6: queued packet %p on neighbor entry %\"S16_F\"\\n\", (void *)p, (s16_t)neighbor_index));\n      result = ERR_OK;\n    } else {\n      /* the pool MEMP_ND6_QUEUE is empty */\n      pbuf_free(p);\n      LWIP_DEBUGF(LWIP_DBG_TRACE, (\"ipv6: could not queue a copy of packet %p (out of memory)\\n\", (void *)p));\n      /* { result == ERR_MEM } through initialization */\n    }\n#else /* LWIP_ND6_QUEUEING */\n    /* Queue a single packet. If an older packet is already queued, free it as per RFC. */\n    if (neighbor_cache[neighbor_index].q != NULL) {\n      pbuf_free(neighbor_cache[neighbor_index].q);\n    }\n    neighbor_cache[neighbor_index].q = p;\n    LWIP_DEBUGF(LWIP_DBG_TRACE, (\"ipv6: queued packet %p on neighbor entry %\"S16_F\"\\n\", (void *)p, (s16_t)neighbor_index));\n    result = ERR_OK;\n#endif /* LWIP_ND6_QUEUEING */\n  } else {\n    LWIP_DEBUGF(LWIP_DBG_TRACE, (\"ipv6: could not queue a copy of packet %p (out of memory)\\n\", (void *)q));\n    /* { result == ERR_MEM } through initialization */\n  }\n\n  return result;\n}\n\n#if LWIP_ND6_QUEUEING\n/**\n * Free a complete queue of nd6 q entries\n *\n * @param q a queue of nd6_q_entry to free\n */\nstatic void\nnd6_free_q(struct nd6_q_entry *q)\n{\n  struct nd6_q_entry *r;\n  LWIP_ASSERT(\"q != NULL\", q != NULL);\n  LWIP_ASSERT(\"q->p != NULL\", q->p != NULL);\n  while (q) {\n    r = q;\n    q = q->next;\n    LWIP_ASSERT(\"r->p != NULL\", (r->p != NULL));\n    pbuf_free(r->p);\n    memp_free(MEMP_ND6_QUEUE, r);\n  }\n}\n#endif /* LWIP_ND6_QUEUEING */\n\n/**\n * Send queued packets for a neighbor\n *\n * @param i the neighbor to send packets to\n */\nstatic void\nnd6_send_q(s8_t i)\n{\n  struct ip6_hdr *ip6hdr;\n#if LWIP_ND6_QUEUEING\n  struct nd6_q_entry *q;\n#endif /* LWIP_ND6_QUEUEING */\n\n  if ((i < 0) || (i >= LWIP_ND6_NUM_NEIGHBORS)) {\n    return;\n  }\n\n#if LWIP_ND6_QUEUEING\n  while (neighbor_cache[i].q != NULL) {\n    /* remember first in queue */\n    q = neighbor_cache[i].q;\n    /* pop first item off the queue */\n    neighbor_cache[i].q = q->next;\n    /* Get ipv6 header. */\n    ip6hdr = (struct ip6_hdr *)(q->p->payload);\n    /* Override ip6_current_dest_addr() so that we have an aligned copy. */\n    ip6_addr_set(ip6_current_dest_addr(), &(ip6hdr->dest));\n    /* send the queued IPv6 packet */\n    (neighbor_cache[i].netif)->output_ip6(neighbor_cache[i].netif, q->p, ip6_current_dest_addr());\n    /* free the queued IP packet */\n    pbuf_free(q->p);\n    /* now queue entry can be freed */\n    memp_free(MEMP_ND6_QUEUE, q);\n  }\n#else /* LWIP_ND6_QUEUEING */\n  if (neighbor_cache[i].q != NULL) {\n    /* Get ipv6 header. */\n    ip6hdr = (struct ip6_hdr *)(neighbor_cache[i].q->payload);\n    /* Override ip6_current_dest_addr() so that we have an aligned copy. */\n    ip6_addr_set(ip6_current_dest_addr(), &(ip6hdr->dest));\n    /* send the queued IPv6 packet */\n    (neighbor_cache[i].netif)->output_ip6(neighbor_cache[i].netif, neighbor_cache[i].q, ip6_current_dest_addr());\n    /* free the queued IP packet */\n    pbuf_free(neighbor_cache[i].q);\n    neighbor_cache[i].q = NULL;\n  }\n#endif /* LWIP_ND6_QUEUEING */\n}\n\n\n/**\n * Get the Path MTU for a destination.\n *\n * @param ip6addr the destination address\n * @param netif the netif on which the packet will be sent\n * @return the Path MTU, if known, or the netif default MTU\n */\nu16_t\nnd6_get_destination_mtu(ip6_addr_t * ip6addr, struct netif * netif)\n{\n  s8_t i;\n\n  i = nd6_find_destination_cache_entry(ip6addr);\n  if (i >= 0) {\n    if (destination_cache[i].pmtu > 0) {\n      return destination_cache[i].pmtu;\n    }\n  }\n\n  if (netif != NULL) {\n    return netif->mtu;\n  }\n\n  return 1280; /* Minimum MTU */\n}\n\n\n#if LWIP_ND6_TCP_REACHABILITY_HINTS\n/**\n * Provide the Neighbor discovery process with a hint that a\n * destination is reachable. Called by tcp_receive when ACKs are\n * received or sent (as per RFC). This is useful to avoid sending\n * NS messages every 30 seconds.\n *\n * @param ip6addr the destination address which is know to be reachable\n *                by an upper layer protocol (TCP)\n */\nvoid\nnd6_reachability_hint(ip6_addr_t * ip6addr)\n{\n  s8_t i;\n\n  /* Find destination in cache. */\n  if (ip6_addr_cmp(ip6addr, &(destination_cache[nd6_cached_destination_index].destination_addr))) {\n    i = nd6_cached_destination_index;\n    ND6_STATS_INC(nd6.cachehit);\n  }\n  else {\n    i = nd6_find_destination_cache_entry(ip6addr);\n  }\n  if (i < 0) {\n    return;\n  }\n\n  /* Find next hop neighbor in cache. */\n  if (ip6_addr_cmp(&(destination_cache[i].next_hop_addr), &(neighbor_cache[nd6_cached_neighbor_index].next_hop_address))) {\n    i = nd6_cached_neighbor_index;\n    ND6_STATS_INC(nd6.cachehit);\n  }\n  else {\n    i = nd6_find_neighbor_cache_entry(&(destination_cache[i].next_hop_addr));\n  }\n  if (i < 0) {\n    return;\n  }\n\n  /* Set reachability state. */\n  neighbor_cache[i].state = ND6_REACHABLE;\n  neighbor_cache[i].counter.reachable_time = reachable_time;\n}\n#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */\n\n#endif /* LWIP_IPV6 */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/mem.c",
    "content": "/**\n * @file\n * Dynamic memory manager\n *\n * This is a lightweight replacement for the standard C library malloc().\n *\n * If you want to use the standard C library malloc() instead, define\n * MEM_LIBC_MALLOC to 1 in your lwipopts.h\n *\n * To let mem_malloc() use pools (prevents fragmentation and is much faster than\n * a heap but might waste some memory), define MEM_USE_POOLS to 1, define\n * MEM_USE_CUSTOM_POOLS to 1 and create a file \"lwippools.h\" that includes a list\n * of pools like this (more pools can be added between _START and _END):\n *\n * Define three pools with sizes 256, 512, and 1512 bytes\n * LWIP_MALLOC_MEMPOOL_START\n * LWIP_MALLOC_MEMPOOL(20, 256)\n * LWIP_MALLOC_MEMPOOL(10, 512)\n * LWIP_MALLOC_MEMPOOL(5, 1512)\n * LWIP_MALLOC_MEMPOOL_END\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *         Simon Goldschmidt\n *\n */\n\n#include \"lwip/opt.h\"\n\n#if !MEM_LIBC_MALLOC /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/err.h\"\n\n#include <string.h>\n\n#if MEM_USE_POOLS\n/* lwIP head implemented with different sized pools */\n\n/**\n * Allocate memory: determine the smallest pool that is big enough\n * to contain an element of 'size' and get an element from that pool.\n *\n * @param size the size in bytes of the memory needed\n * @return a pointer to the allocated memory or NULL if the pool is empty\n */\nvoid *\nmem_malloc(mem_size_t size)\n{\n  void *ret;\n  struct memp_malloc_helper *element;\n  memp_t poolnr;\n  mem_size_t required_size = size + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper));\n\n  for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr = (memp_t)(poolnr + 1)) {\n#if MEM_USE_POOLS_TRY_BIGGER_POOL\nagain:\n#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */\n    /* is this pool big enough to hold an element of the required size\n       plus a struct memp_malloc_helper that saves the pool this element came from? */\n    if (required_size <= memp_sizes[poolnr]) {\n      break;\n    }\n  }\n  if (poolnr > MEMP_POOL_LAST) {\n    LWIP_ASSERT(\"mem_malloc(): no pool is that big!\", 0);\n    return NULL;\n  }\n  element = (struct memp_malloc_helper*)memp_malloc(poolnr);\n  if (element == NULL) {\n    /* No need to DEBUGF or ASSERT: This error is already\n       taken care of in memp.c */\n#if MEM_USE_POOLS_TRY_BIGGER_POOL\n    /** Try a bigger pool if this one is empty! */\n    if (poolnr < MEMP_POOL_LAST) {\n      poolnr++;\n      goto again;\n    }\n#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */\n    return NULL;\n  }\n\n  /* save the pool number this element came from */\n  element->poolnr = poolnr;\n  /* and return a pointer to the memory directly after the struct memp_malloc_helper */\n  ret = (u8_t*)element + LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper));\n\n  return ret;\n}\n\n/**\n * Free memory previously allocated by mem_malloc. Loads the pool number\n * and calls memp_free with that pool number to put the element back into\n * its pool\n *\n * @param rmem the memory element to free\n */\nvoid\nmem_free(void *rmem)\n{\n  struct memp_malloc_helper *hmem;\n\n  LWIP_ASSERT(\"rmem != NULL\", (rmem != NULL));\n  LWIP_ASSERT(\"rmem == MEM_ALIGN(rmem)\", (rmem == LWIP_MEM_ALIGN(rmem)));\n\n  /* get the original struct memp_malloc_helper */\n  hmem = (struct memp_malloc_helper*)(void*)((u8_t*)rmem - LWIP_MEM_ALIGN_SIZE(sizeof(struct memp_malloc_helper)));\n\n  LWIP_ASSERT(\"hmem != NULL\", (hmem != NULL));\n  LWIP_ASSERT(\"hmem == MEM_ALIGN(hmem)\", (hmem == LWIP_MEM_ALIGN(hmem)));\n  LWIP_ASSERT(\"hmem->poolnr < MEMP_MAX\", (hmem->poolnr < MEMP_MAX));\n\n  /* and put it in the pool we saved earlier */\n  memp_free(hmem->poolnr, hmem);\n}\n\n#else /* MEM_USE_POOLS */\n/* lwIP replacement for your libc malloc() */\n\n/**\n * The heap is made up as a list of structs of this type.\n * This does not have to be aligned since for getting its size,\n * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes.\n */\nstruct mem {\n  /** index (-> ram[next]) of the next struct */\n  mem_size_t next;\n  /** index (-> ram[prev]) of the previous struct */\n  mem_size_t prev;\n  /** 1: this area is used; 0: this area is unused */\n  u8_t used;\n};\n\n/** All allocated blocks will be MIN_SIZE bytes big, at least!\n * MIN_SIZE can be overridden to suit your needs. Smaller values save space,\n * larger values could prevent too small blocks to fragment the RAM too much. */\n#ifndef MIN_SIZE\n#define MIN_SIZE             12\n#endif /* MIN_SIZE */\n/* some alignment macros: we define them here for better source code layout */\n#define MIN_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MIN_SIZE)\n#define SIZEOF_STRUCT_MEM    LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))\n#define MEM_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MEM_SIZE)\n\n/** If you want to relocate the heap to external memory, simply define\n * LWIP_RAM_HEAP_POINTER as a void-pointer to that location.\n * If so, make sure the memory at that location is big enough (see below on\n * how that space is calculated). */\n#ifndef LWIP_RAM_HEAP_POINTER\n/** the heap. we need one struct mem at the end and some room for alignment */\nu8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT];\n#define LWIP_RAM_HEAP_POINTER ram_heap\n#endif /* LWIP_RAM_HEAP_POINTER */\n\n/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */\nstatic u8_t *ram;\n/** the last entry, always unused! */\nstatic struct mem *ram_end;\n/** pointer to the lowest free block, this is used for faster search */\nstatic struct mem *lfree;\n\n/** concurrent access protection */\n#if !NO_SYS\nstatic sys_mutex_t mem_mutex;\n#endif\n\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n\nstatic volatile u8_t mem_free_count;\n\n/* Allow mem_free from other (e.g. interrupt) context */\n#define LWIP_MEM_FREE_DECL_PROTECT()  SYS_ARCH_DECL_PROTECT(lev_free)\n#define LWIP_MEM_FREE_PROTECT()       SYS_ARCH_PROTECT(lev_free)\n#define LWIP_MEM_FREE_UNPROTECT()     SYS_ARCH_UNPROTECT(lev_free)\n#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc)\n#define LWIP_MEM_ALLOC_PROTECT()      SYS_ARCH_PROTECT(lev_alloc)\n#define LWIP_MEM_ALLOC_UNPROTECT()    SYS_ARCH_UNPROTECT(lev_alloc)\n\n#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n\n/* Protect the heap only by using a semaphore */\n#define LWIP_MEM_FREE_DECL_PROTECT()\n#define LWIP_MEM_FREE_PROTECT()    sys_mutex_lock(&mem_mutex)\n#define LWIP_MEM_FREE_UNPROTECT()  sys_mutex_unlock(&mem_mutex)\n/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */\n#define LWIP_MEM_ALLOC_DECL_PROTECT()\n#define LWIP_MEM_ALLOC_PROTECT()\n#define LWIP_MEM_ALLOC_UNPROTECT()\n\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n\n\n/**\n * \"Plug holes\" by combining adjacent empty struct mems.\n * After this function is through, there should not exist\n * one empty struct mem pointing to another empty struct mem.\n *\n * @param mem this points to a struct mem which just has been freed\n * @internal this function is only called by mem_free() and mem_trim()\n *\n * This assumes access to the heap is protected by the calling function\n * already.\n */\nstatic void\nplug_holes(struct mem *mem)\n{\n  struct mem *nmem;\n  struct mem *pmem;\n\n  LWIP_ASSERT(\"plug_holes: mem >= ram\", (u8_t *)mem >= ram);\n  LWIP_ASSERT(\"plug_holes: mem < ram_end\", (u8_t *)mem < (u8_t *)ram_end);\n  LWIP_ASSERT(\"plug_holes: mem->used == 0\", mem->used == 0);\n\n  /* plug hole forward */\n  LWIP_ASSERT(\"plug_holes: mem->next <= MEM_SIZE_ALIGNED\", mem->next <= MEM_SIZE_ALIGNED);\n\n  nmem = (struct mem *)(void *)&ram[mem->next];\n  if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) {\n    /* if mem->next is unused and not end of ram, combine mem and mem->next */\n    if (lfree == nmem) {\n      lfree = mem;\n    }\n    mem->next = nmem->next;\n    ((struct mem *)(void *)&ram[nmem->next])->prev = (mem_size_t)((u8_t *)mem - ram);\n  }\n\n  /* plug hole backward */\n  pmem = (struct mem *)(void *)&ram[mem->prev];\n  if (pmem != mem && pmem->used == 0) {\n    /* if mem->prev is unused, combine mem and mem->prev */\n    if (lfree == mem) {\n      lfree = pmem;\n    }\n    pmem->next = mem->next;\n    ((struct mem *)(void *)&ram[mem->next])->prev = (mem_size_t)((u8_t *)pmem - ram);\n  }\n}\n\n/**\n * Zero the heap and initialize start, end and lowest-free\n */\nvoid\nmem_init(void)\n{\n  struct mem *mem;\n\n  LWIP_ASSERT(\"Sanity check alignment\",\n    (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0);\n\n  /* align the heap */\n  ram = (u8_t *)LWIP_MEM_ALIGN(LWIP_RAM_HEAP_POINTER);\n  /* initialize the start of the heap */\n  mem = (struct mem *)(void *)ram;\n  mem->next = MEM_SIZE_ALIGNED;\n  mem->prev = 0;\n  mem->used = 0;\n  /* initialize the end of the heap */\n  ram_end = (struct mem *)(void *)&ram[MEM_SIZE_ALIGNED];\n  ram_end->used = 1;\n  ram_end->next = MEM_SIZE_ALIGNED;\n  ram_end->prev = MEM_SIZE_ALIGNED;\n\n  /* initialize the lowest-free pointer to the start of the heap */\n  lfree = (struct mem *)(void *)ram;\n\n  MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED);\n\n  if(sys_mutex_new(&mem_mutex) != ERR_OK) {\n    LWIP_ASSERT(\"failed to create mem_mutex\", 0);\n  }\n}\n\n/**\n * Put a struct mem back on the heap\n *\n * @param rmem is the data portion of a struct mem as returned by a previous\n *             call to mem_malloc()\n */\nvoid\nmem_free(void *rmem)\n{\n  struct mem *mem;\n  LWIP_MEM_FREE_DECL_PROTECT();\n\n  if (rmem == NULL) {\n    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, (\"mem_free(p == NULL) was called.\\n\"));\n    return;\n  }\n  LWIP_ASSERT(\"mem_free: sanity check alignment\", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0);\n\n  LWIP_ASSERT(\"mem_free: legal memory\", (u8_t *)rmem >= (u8_t *)ram &&\n    (u8_t *)rmem < (u8_t *)ram_end);\n\n  if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) {\n    SYS_ARCH_DECL_PROTECT(lev);\n    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, (\"mem_free: illegal memory\\n\"));\n    /* protect mem stats from concurrent access */\n    SYS_ARCH_PROTECT(lev);\n    MEM_STATS_INC(illegal);\n    SYS_ARCH_UNPROTECT(lev);\n    return;\n  }\n  /* protect the heap from concurrent access */\n  LWIP_MEM_FREE_PROTECT();\n  /* Get the corresponding struct mem ... */\n  mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);\n  /* ... which has to be in a used state ... */\n  LWIP_ASSERT(\"mem_free: mem->used\", mem->used);\n  /* ... and is now unused. */\n  mem->used = 0;\n\n  if (mem < lfree) {\n    /* the newly freed struct is now the lowest */\n    lfree = mem;\n  }\n\n  MEM_STATS_DEC_USED(used, mem->next - (mem_size_t)(((u8_t *)mem - ram)));\n\n  /* finally, see if prev or next are free also */\n  plug_holes(mem);\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n  mem_free_count = 1;\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n  LWIP_MEM_FREE_UNPROTECT();\n}\n\n/**\n * Shrink memory returned by mem_malloc().\n *\n * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked\n * @param newsize required size after shrinking (needs to be smaller than or\n *                equal to the previous size)\n * @return for compatibility reasons: is always == rmem, at the moment\n *         or NULL if newsize is > old size, in which case rmem is NOT touched\n *         or freed!\n */\nvoid *\nmem_trim(void *rmem, mem_size_t newsize)\n{\n  mem_size_t size;\n  mem_size_t ptr, ptr2;\n  struct mem *mem, *mem2;\n  /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */\n  LWIP_MEM_FREE_DECL_PROTECT();\n\n  /* Expand the size of the allocated memory region so that we can\n     adjust for alignment. */\n  newsize = LWIP_MEM_ALIGN_SIZE(newsize);\n\n  if(newsize < MIN_SIZE_ALIGNED) {\n    /* every data block must be at least MIN_SIZE_ALIGNED long */\n    newsize = MIN_SIZE_ALIGNED;\n  }\n\n  if (newsize > MEM_SIZE_ALIGNED) {\n    return NULL;\n  }\n\n  LWIP_ASSERT(\"mem_trim: legal memory\", (u8_t *)rmem >= (u8_t *)ram &&\n   (u8_t *)rmem < (u8_t *)ram_end);\n\n  if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) {\n    SYS_ARCH_DECL_PROTECT(lev);\n    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, (\"mem_trim: illegal memory\\n\"));\n    /* protect mem stats from concurrent access */\n    SYS_ARCH_PROTECT(lev);\n    MEM_STATS_INC(illegal);\n    SYS_ARCH_UNPROTECT(lev);\n    return rmem;\n  }\n  /* Get the corresponding struct mem ... */\n  mem = (struct mem *)(void *)((u8_t *)rmem - SIZEOF_STRUCT_MEM);\n  /* ... and its offset pointer */\n  ptr = (mem_size_t)((u8_t *)mem - ram);\n\n  size = mem->next - ptr - SIZEOF_STRUCT_MEM;\n  LWIP_ASSERT(\"mem_trim can only shrink memory\", newsize <= size);\n  if (newsize > size) {\n    /* not supported */\n    return NULL;\n  }\n  if (newsize == size) {\n    /* No change in size, simply return */\n    return rmem;\n  }\n\n  /* protect the heap from concurrent access */\n  LWIP_MEM_FREE_PROTECT();\n\n  mem2 = (struct mem *)(void *)&ram[mem->next];\n  if(mem2->used == 0) {\n    /* The next struct is unused, we can simply move it at little */\n    mem_size_t next;\n    /* remember the old next pointer */\n    next = mem2->next;\n    /* create new struct mem which is moved directly after the shrinked mem */\n    ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;\n    if (lfree == mem2) {\n      lfree = (struct mem *)(void *)&ram[ptr2];\n    }\n    mem2 = (struct mem *)(void *)&ram[ptr2];\n    mem2->used = 0;\n    /* restore the next pointer */\n    mem2->next = next;\n    /* link it back to mem */\n    mem2->prev = ptr;\n    /* link mem to it */\n    mem->next = ptr2;\n    /* last thing to restore linked list: as we have moved mem2,\n     * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not\n     * the end of the heap */\n    if (mem2->next != MEM_SIZE_ALIGNED) {\n      ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;\n    }\n    MEM_STATS_DEC_USED(used, (size - newsize));\n    /* no need to plug holes, we've already done that */\n  } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) {\n    /* Next struct is used but there's room for another struct mem with\n     * at least MIN_SIZE_ALIGNED of data.\n     * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem\n     * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED').\n     * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty\n     *       region that couldn't hold data, but when mem->next gets freed,\n     *       the 2 regions would be combined, resulting in more free memory */\n    ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize;\n    mem2 = (struct mem *)(void *)&ram[ptr2];\n    if (mem2 < lfree) {\n      lfree = mem2;\n    }\n    mem2->used = 0;\n    mem2->next = mem->next;\n    mem2->prev = ptr;\n    mem->next = ptr2;\n    if (mem2->next != MEM_SIZE_ALIGNED) {\n      ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;\n    }\n    MEM_STATS_DEC_USED(used, (size - newsize));\n    /* the original mem->next is used, so no need to plug holes! */\n  }\n  /* else {\n    next struct mem is used but size between mem and mem2 is not big enough\n    to create another struct mem\n    -> don't do anyhting. \n    -> the remaining space stays unused since it is too small\n  } */\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n  mem_free_count = 1;\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n  LWIP_MEM_FREE_UNPROTECT();\n  return rmem;\n}\n\n/**\n * Adam's mem_malloc() plus solution for bug #17922\n * Allocate a block of memory with a minimum of 'size' bytes.\n *\n * @param size is the minimum size of the requested block in bytes.\n * @return pointer to allocated memory or NULL if no free memory was found.\n *\n * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT).\n */\nvoid *\nmem_malloc(mem_size_t size)\n{\n  mem_size_t ptr, ptr2;\n  struct mem *mem, *mem2;\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n  u8_t local_mem_free_count = 0;\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n  LWIP_MEM_ALLOC_DECL_PROTECT();\n\n  if (size == 0) {\n    return NULL;\n  }\n\n  /* Expand the size of the allocated memory region so that we can\n     adjust for alignment. */\n  size = LWIP_MEM_ALIGN_SIZE(size);\n\n  if(size < MIN_SIZE_ALIGNED) {\n    /* every data block must be at least MIN_SIZE_ALIGNED long */\n    size = MIN_SIZE_ALIGNED;\n  }\n\n  if (size > MEM_SIZE_ALIGNED) {\n    return NULL;\n  }\n\n  /* protect the heap from concurrent access */\n  sys_mutex_lock(&mem_mutex);\n  LWIP_MEM_ALLOC_PROTECT();\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n  /* run as long as a mem_free disturbed mem_malloc or mem_trim */\n  do {\n    local_mem_free_count = 0;\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n\n    /* Scan through the heap searching for a free block that is big enough,\n     * beginning with the lowest free block.\n     */\n    for (ptr = (mem_size_t)((u8_t *)lfree - ram); ptr < MEM_SIZE_ALIGNED - size;\n         ptr = ((struct mem *)(void *)&ram[ptr])->next) {\n      mem = (struct mem *)(void *)&ram[ptr];\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n      mem_free_count = 0;\n      LWIP_MEM_ALLOC_UNPROTECT();\n      /* allow mem_free or mem_trim to run */\n      LWIP_MEM_ALLOC_PROTECT();\n      if (mem_free_count != 0) {\n        /* If mem_free or mem_trim have run, we have to restart since they\n           could have altered our current struct mem. */\n        local_mem_free_count = 1;\n        break;\n      }\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n\n      if ((!mem->used) &&\n          (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) {\n        /* mem is not used and at least perfect fit is possible:\n         * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */\n\n        if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) {\n          /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing\n           * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem')\n           * -> split large block, create empty remainder,\n           * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if\n           * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size,\n           * struct mem would fit in but no data between mem2 and mem2->next\n           * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty\n           *       region that couldn't hold data, but when mem->next gets freed,\n           *       the 2 regions would be combined, resulting in more free memory\n           */\n          ptr2 = ptr + SIZEOF_STRUCT_MEM + size;\n          /* create mem2 struct */\n          mem2 = (struct mem *)(void *)&ram[ptr2];\n          mem2->used = 0;\n          mem2->next = mem->next;\n          mem2->prev = ptr;\n          /* and insert it between mem and mem->next */\n          mem->next = ptr2;\n          mem->used = 1;\n\n          if (mem2->next != MEM_SIZE_ALIGNED) {\n            ((struct mem *)(void *)&ram[mem2->next])->prev = ptr2;\n          }\n          MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM));\n        } else {\n          /* (a mem2 struct does no fit into the user data space of mem and mem->next will always\n           * be used at this point: if not we have 2 unused structs in a row, plug_holes should have\n           * take care of this).\n           * -> near fit or excact fit: do not split, no mem2 creation\n           * also can't move mem->next directly behind mem, since mem->next\n           * will always be used at this point!\n           */\n          mem->used = 1;\n          MEM_STATS_INC_USED(used, mem->next - (mem_size_t)((u8_t *)mem - ram));\n        }\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\nmem_malloc_adjust_lfree:\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n        if (mem == lfree) {\n          struct mem *cur = lfree;\n          /* Find next free block after mem and update lowest free pointer */\n          while (cur->used && cur != ram_end) {\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n            mem_free_count = 0;\n            LWIP_MEM_ALLOC_UNPROTECT();\n            /* prevent high interrupt latency... */\n            LWIP_MEM_ALLOC_PROTECT();\n            if (mem_free_count != 0) {\n              /* If mem_free or mem_trim have run, we have to restart since they\n                 could have altered our current struct mem or lfree. */\n              goto mem_malloc_adjust_lfree;\n            }\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n            cur = (struct mem *)(void *)&ram[cur->next];\n          }\n          lfree = cur;\n          LWIP_ASSERT(\"mem_malloc: !lfree->used\", ((lfree == ram_end) || (!lfree->used)));\n        }\n        LWIP_MEM_ALLOC_UNPROTECT();\n        sys_mutex_unlock(&mem_mutex);\n        LWIP_ASSERT(\"mem_malloc: allocated memory not above ram_end.\",\n         (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end);\n        LWIP_ASSERT(\"mem_malloc: allocated memory properly aligned.\",\n         ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0);\n        LWIP_ASSERT(\"mem_malloc: sanity check alignment\",\n          (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0);\n\n        return (u8_t *)mem + SIZEOF_STRUCT_MEM;\n      }\n    }\n#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n    /* if we got interrupted by a mem_free, try again */\n  } while(local_mem_free_count != 0);\n#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */\n  LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"mem_malloc: could not allocate %\"S16_F\" bytes\\n\", (s16_t)size));\n  MEM_STATS_INC(err);\n  LWIP_MEM_ALLOC_UNPROTECT();\n  sys_mutex_unlock(&mem_mutex);\n  return NULL;\n}\n\n#endif /* MEM_USE_POOLS */\n/**\n * Contiguously allocates enough space for count objects that are size bytes\n * of memory each and returns a pointer to the allocated memory.\n *\n * The allocated memory is filled with bytes of value zero.\n *\n * @param count number of objects to allocate\n * @param size size of the objects to allocate\n * @return pointer to allocated memory / NULL pointer if there is an error\n */\nvoid *mem_calloc(mem_size_t count, mem_size_t size)\n{\n  void *p;\n\n  /* allocate 'count' objects of size 'size' */\n  p = mem_malloc(count * size);\n  if (p) {\n    /* zero the memory */\n    memset(p, 0, count * size);\n  }\n  return p;\n}\n\n#endif /* !MEM_LIBC_MALLOC */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/memp.c",
    "content": "/**\n * @file\n * Dynamic pool memory manager\n *\n * lwIP has dedicated pools for many structures (netconn, protocol control blocks,\n * packet buffers, ...). All these pools are managed here.\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/memp.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/udp.h\"\n#include \"lwip/raw.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/igmp.h\"\n#include \"lwip/api.h\"\n#include \"lwip/api_msg.h\"\n#include \"lwip/tcpip.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/timers.h\"\n#include \"lwip/stats.h\"\n#include \"netif/etharp.h\"\n#include \"lwip/ip_frag.h\"\n#include \"lwip/snmp_structs.h\"\n#include \"lwip/snmp_msg.h\"\n#include \"lwip/dns.h\"\n#include \"netif/ppp_oe.h\"\n#include \"lwip/nd6.h\"\n#include \"lwip/ip6_frag.h\"\n#include \"lwip/mld6.h\"\n\n#include <string.h>\n\n#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */\n\nstruct memp {\n  struct memp *next;\n#if MEMP_OVERFLOW_CHECK\n  const char *file;\n  int line;\n#endif /* MEMP_OVERFLOW_CHECK */\n};\n\n#if MEMP_OVERFLOW_CHECK\n/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning\n * and at the end of each element, initialize them as 0xcd and check\n * them later. */\n/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free,\n * every single element in each pool is checked!\n * This is VERY SLOW but also very helpful. */\n/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in\n * lwipopts.h to change the amount reserved for checking. */\n#ifndef MEMP_SANITY_REGION_BEFORE\n#define MEMP_SANITY_REGION_BEFORE  16\n#endif /* MEMP_SANITY_REGION_BEFORE*/\n#if MEMP_SANITY_REGION_BEFORE > 0\n#define MEMP_SANITY_REGION_BEFORE_ALIGNED    LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE)\n#else\n#define MEMP_SANITY_REGION_BEFORE_ALIGNED    0\n#endif /* MEMP_SANITY_REGION_BEFORE*/\n#ifndef MEMP_SANITY_REGION_AFTER\n#define MEMP_SANITY_REGION_AFTER   16\n#endif /* MEMP_SANITY_REGION_AFTER*/\n#if MEMP_SANITY_REGION_AFTER > 0\n#define MEMP_SANITY_REGION_AFTER_ALIGNED     LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER)\n#else\n#define MEMP_SANITY_REGION_AFTER_ALIGNED     0\n#endif /* MEMP_SANITY_REGION_AFTER*/\n\n/* MEMP_SIZE: save space for struct memp and for sanity check */\n#define MEMP_SIZE          (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED)\n#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED)\n\n#else /* MEMP_OVERFLOW_CHECK */\n\n/* No sanity checks\n * We don't need to preserve the struct memp while not allocated, so we\n * can save a little space and set MEMP_SIZE to 0.\n */\n#define MEMP_SIZE           0\n#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x))\n\n#endif /* MEMP_OVERFLOW_CHECK */\n\n/** This array holds the first free element of each pool.\n *  Elements form a linked list. */\nstatic struct memp *memp_tab[MEMP_MAX];\n\n#else /* MEMP_MEM_MALLOC */\n\n#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x))\n\n#endif /* MEMP_MEM_MALLOC */\n\n/** This array holds the element sizes of each pool. */\n#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC\nstatic\n#endif\nconst u16_t memp_sizes[MEMP_MAX] = {\n#define LWIP_MEMPOOL(name,num,size,desc)  LWIP_MEM_ALIGN_SIZE(size),\n#include \"lwip/memp_std.h\"\n};\n\n#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */\n\n/** This array holds the number of elements in each pool. */\nstatic const u16_t memp_num[MEMP_MAX] = {\n#define LWIP_MEMPOOL(name,num,size,desc)  (num),\n#include \"lwip/memp_std.h\"\n};\n\n/** This array holds a textual description of each pool. */\n#ifdef LWIP_DEBUG\nstatic const char *memp_desc[MEMP_MAX] = {\n#define LWIP_MEMPOOL(name,num,size,desc)  (desc),\n#include \"lwip/memp_std.h\"\n};\n#endif /* LWIP_DEBUG */\n\n#if MEMP_SEPARATE_POOLS\n\n/** This creates each memory pool. These are named memp_memory_XXX_base (where\n * XXX is the name of the pool defined in memp_std.h).\n * To relocate a pool, declare it as extern in cc.h. Example for GCC:\n *   extern u8_t __attribute__((section(\".onchip_mem\"))) memp_memory_UDP_PCB_base[];\n */\n#define LWIP_MEMPOOL(name,num,size,desc) u8_t memp_memory_ ## name ## _base \\\n  [((num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size)))];   \n#include \"lwip/memp_std.h\"\n\n/** This array holds the base of each memory pool. */\nstatic u8_t *const memp_bases[] = { \n#define LWIP_MEMPOOL(name,num,size,desc) memp_memory_ ## name ## _base,   \n#include \"lwip/memp_std.h\"\n};\n\n#else /* MEMP_SEPARATE_POOLS */\n\n/** This is the actual memory used by the pools (all pools in one big block). */\nstatic u8_t memp_memory[MEM_ALIGNMENT - 1 \n#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) )\n#include \"lwip/memp_std.h\"\n];\n\n#endif /* MEMP_SEPARATE_POOLS */\n\n#if MEMP_SANITY_CHECK\n/**\n * Check that memp-lists don't form a circle, using \"Floyd's cycle-finding algorithm\".\n */\nstatic int\nmemp_sanity(void)\n{\n  s16_t i;\n  struct memp *t, *h;\n\n  for (i = 0; i < MEMP_MAX; i++) {\n    t = memp_tab[i];\n    if(t != NULL) {\n      for (h = t->next; (t != NULL) && (h != NULL); t = t->next,\n        h = (((h->next != NULL) && (h->next->next != NULL)) ? h->next->next : NULL)) {\n        if (t == h) {\n          return 0;\n        }\n      }\n    }\n  }\n  return 1;\n}\n#endif /* MEMP_SANITY_CHECK*/\n#if MEMP_OVERFLOW_CHECK\n#if defined(LWIP_DEBUG) && MEMP_STATS\nstatic const char * memp_overflow_names[] = {\n#define LWIP_MEMPOOL(name,num,size,desc) \"/\"desc,\n#include \"lwip/memp_std.h\"\n  };\n#endif\n\n/**\n * Check if a memp element was victim of an overflow\n * (e.g. the restricted area after it has been altered)\n *\n * @param p the memp element to check\n * @param memp_type the pool p comes from\n */\nstatic void\nmemp_overflow_check_element_overflow(struct memp *p, u16_t memp_type)\n{\n  u16_t k;\n  u8_t *m;\n#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0\n  m = (u8_t*)p + MEMP_SIZE + memp_sizes[memp_type];\n  for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) {\n    if (m[k] != 0xcd) {\n      char errstr[128] = \"detected memp overflow in pool \";\n      char digit[] = \"0\";\n      if(memp_type >= 10) {\n        digit[0] = '0' + (memp_type/10);\n        strcat(errstr, digit);\n      }\n      digit[0] = '0' + (memp_type%10);\n      strcat(errstr, digit);\n#if defined(LWIP_DEBUG) && MEMP_STATS\n      strcat(errstr, memp_overflow_names[memp_type]);\n#endif\n      LWIP_ASSERT(errstr, 0);\n    }\n  }\n#endif\n}\n\n/**\n * Check if a memp element was victim of an underflow\n * (e.g. the restricted area before it has been altered)\n *\n * @param p the memp element to check\n * @param memp_type the pool p comes from\n */\nstatic void\nmemp_overflow_check_element_underflow(struct memp *p, u16_t memp_type)\n{\n  u16_t k;\n  u8_t *m;\n#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0\n  m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;\n  for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) {\n    if (m[k] != 0xcd) {\n      char errstr[128] = \"detected memp underflow in pool \";\n      char digit[] = \"0\";\n      if(memp_type >= 10) {\n        digit[0] = '0' + (memp_type/10);\n        strcat(errstr, digit);\n      }\n      digit[0] = '0' + (memp_type%10);\n      strcat(errstr, digit);\n#if defined(LWIP_DEBUG) && MEMP_STATS\n      strcat(errstr, memp_overflow_names[memp_type]);\n#endif\n      LWIP_ASSERT(errstr, 0);\n    }\n  }\n#endif\n}\n\n/**\n * Do an overflow check for all elements in every pool.\n *\n * @see memp_overflow_check_element for a description of the check\n */\nstatic void\nmemp_overflow_check_all(void)\n{\n  u16_t i, j;\n  struct memp *p;\n\n#if !MEMP_SEPARATE_POOLS\n  p = (struct memp *)LWIP_MEM_ALIGN(memp_memory);\n#endif /* !MEMP_SEPARATE_POOLS */\n  for (i = 0; i < MEMP_MAX; ++i) {\n#if MEMP_SEPARATE_POOLS\n    p = (struct memp *)(memp_bases[i]);\n#endif /* MEMP_SEPARATE_POOLS */\n    for (j = 0; j < memp_num[i]; ++j) {\n      memp_overflow_check_element_overflow(p, i);\n      p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);\n    }\n  }\n#if !MEMP_SEPARATE_POOLS\n  p = (struct memp *)LWIP_MEM_ALIGN(memp_memory);\n#endif /* !MEMP_SEPARATE_POOLS */\n  for (i = 0; i < MEMP_MAX; ++i) {\n#if MEMP_SEPARATE_POOLS\n    p = (struct memp *)(memp_bases[i]);\n#endif /* MEMP_SEPARATE_POOLS */\n    for (j = 0; j < memp_num[i]; ++j) {\n      memp_overflow_check_element_underflow(p, i);\n      p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);\n    }\n  }\n}\n\n/**\n * Initialize the restricted areas of all memp elements in every pool.\n */\nstatic void\nmemp_overflow_init(void)\n{\n  u16_t i, j;\n  struct memp *p;\n  u8_t *m;\n\n#if !MEMP_SEPARATE_POOLS\n  p = (struct memp *)LWIP_MEM_ALIGN(memp_memory);\n#endif /* !MEMP_SEPARATE_POOLS */\n  for (i = 0; i < MEMP_MAX; ++i) {\n#if MEMP_SEPARATE_POOLS\n    p = (struct memp *)(memp_bases[i]);\n#endif /* MEMP_SEPARATE_POOLS */\n    for (j = 0; j < memp_num[i]; ++j) {\n#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0\n      m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED;\n      memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED);\n#endif\n#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0\n      m = (u8_t*)p + MEMP_SIZE + memp_sizes[i];\n      memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED);\n#endif\n      p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED);\n    }\n  }\n}\n#endif /* MEMP_OVERFLOW_CHECK */\n\n/**\n * Initialize this module.\n * \n * Carves out memp_memory into linked lists for each pool-type.\n */\nvoid\nmemp_init(void)\n{\n  struct memp *memp;\n  u16_t i, j;\n\n  for (i = 0; i < MEMP_MAX; ++i) {\n    MEMP_STATS_AVAIL(used, i, 0);\n    MEMP_STATS_AVAIL(max, i, 0);\n    MEMP_STATS_AVAIL(err, i, 0);\n    MEMP_STATS_AVAIL(avail, i, memp_num[i]);\n  }\n\n#if !MEMP_SEPARATE_POOLS\n  memp = (struct memp *)LWIP_MEM_ALIGN(memp_memory);\n#endif /* !MEMP_SEPARATE_POOLS */\n  /* for every pool: */\n  for (i = 0; i < MEMP_MAX; ++i) {\n    memp_tab[i] = NULL;\n#if MEMP_SEPARATE_POOLS\n    memp = (struct memp*)memp_bases[i];\n#endif /* MEMP_SEPARATE_POOLS */\n    /* create a linked list of memp elements */\n    for (j = 0; j < memp_num[i]; ++j) {\n      memp->next = memp_tab[i];\n      memp_tab[i] = memp;\n      memp = (struct memp *)(void *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i]\n#if MEMP_OVERFLOW_CHECK\n        + MEMP_SANITY_REGION_AFTER_ALIGNED\n#endif\n      );\n    }\n  }\n#if MEMP_OVERFLOW_CHECK\n  memp_overflow_init();\n  /* check everything a first time to see if it worked */\n  memp_overflow_check_all();\n#endif /* MEMP_OVERFLOW_CHECK */\n}\n\n/**\n * Get an element from a specific pool.\n *\n * @param type the pool to get an element from\n *\n * the debug version has two more parameters:\n * @param file file name calling this function\n * @param line number of line where this function is called\n *\n * @return a pointer to the allocated memory or a NULL pointer on error\n */\nvoid *\n#if !MEMP_OVERFLOW_CHECK\nmemp_malloc(memp_t type)\n#else\nmemp_malloc_fn(memp_t type, const char* file, const int line)\n#endif\n{\n  struct memp *memp;\n  SYS_ARCH_DECL_PROTECT(old_level);\n \n  LWIP_ERROR(\"memp_malloc: type < MEMP_MAX\", (type < MEMP_MAX), return NULL;);\n\n  SYS_ARCH_PROTECT(old_level);\n#if MEMP_OVERFLOW_CHECK >= 2\n  memp_overflow_check_all();\n#endif /* MEMP_OVERFLOW_CHECK >= 2 */\n\n  memp = memp_tab[type];\n  \n  if (memp != NULL) {\n    memp_tab[type] = memp->next;\n#if MEMP_OVERFLOW_CHECK\n    memp->next = NULL;\n    memp->file = file;\n    memp->line = line;\n#endif /* MEMP_OVERFLOW_CHECK */\n    MEMP_STATS_INC_USED(used, type);\n    LWIP_ASSERT(\"memp_malloc: memp properly aligned\",\n                ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0);\n    memp = (struct memp*)(void *)((u8_t*)memp + MEMP_SIZE);\n  } else {\n    LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"memp_malloc: out of memory in pool %s\\n\", memp_desc[type]));\n    MEMP_STATS_INC(err, type);\n  }\n\n  SYS_ARCH_UNPROTECT(old_level);\n\n  return memp;\n}\n\n/**\n * Put an element back into its pool.\n *\n * @param type the pool where to put mem\n * @param mem the memp element to free\n */\nvoid\nmemp_free(memp_t type, void *mem)\n{\n  struct memp *memp;\n  SYS_ARCH_DECL_PROTECT(old_level);\n\n  if (mem == NULL) {\n    return;\n  }\n  LWIP_ASSERT(\"memp_free: mem properly aligned\",\n                ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0);\n\n  memp = (struct memp *)(void *)((u8_t*)mem - MEMP_SIZE);\n\n  SYS_ARCH_PROTECT(old_level);\n#if MEMP_OVERFLOW_CHECK\n#if MEMP_OVERFLOW_CHECK >= 2\n  memp_overflow_check_all();\n#else\n  memp_overflow_check_element_overflow(memp, type);\n  memp_overflow_check_element_underflow(memp, type);\n#endif /* MEMP_OVERFLOW_CHECK >= 2 */\n#endif /* MEMP_OVERFLOW_CHECK */\n\n  MEMP_STATS_DEC(used, type); \n  \n  memp->next = memp_tab[type]; \n  memp_tab[type] = memp;\n\n#if MEMP_SANITY_CHECK\n  LWIP_ASSERT(\"memp sanity\", memp_sanity());\n#endif /* MEMP_SANITY_CHECK */\n\n  SYS_ARCH_UNPROTECT(old_level);\n}\n\n#endif /* MEMP_MEM_MALLOC */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/netif.c",
    "content": "/**\n * @file\n * lwIP network interface abstraction\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/def.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/igmp.h\"\n#include \"netif/etharp.h\"\n#include \"lwip/stats.h\"\n#if ENABLE_LOOPBACK\n#include \"lwip/sys.h\"\n#if LWIP_NETIF_LOOPBACK_MULTITHREADING\n#include \"lwip/tcpip.h\"\n#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */\n#endif /* ENABLE_LOOPBACK */\n\n#if LWIP_AUTOIP\n#include \"lwip/autoip.h\"\n#endif /* LWIP_AUTOIP */\n#if LWIP_DHCP\n#include \"lwip/dhcp.h\"\n#endif /* LWIP_DHCP */\n#if LWIP_IPV6_DHCP6\n#include \"lwip/dhcp6.h\"\n#endif /* LWIP_IPV6_DHCP6 */\n#if LWIP_IPV6_MLD\n#include \"lwip/mld6.h\"\n#endif /* LWIP_IPV6_MLD */\n\n#if LWIP_NETIF_STATUS_CALLBACK\n#define NETIF_STATUS_CALLBACK(n) do{ if (n->status_callback) { (n->status_callback)(n); }}while(0)\n#else\n#define NETIF_STATUS_CALLBACK(n)\n#endif /* LWIP_NETIF_STATUS_CALLBACK */ \n\n#if LWIP_NETIF_LINK_CALLBACK\n#define NETIF_LINK_CALLBACK(n) do{ if (n->link_callback) { (n->link_callback)(n); }}while(0)\n#else\n#define NETIF_LINK_CALLBACK(n)\n#endif /* LWIP_NETIF_LINK_CALLBACK */ \n\nstruct netif *netif_list;\nstruct netif *netif_default;\n\nstatic u8_t netif_num;\n\n#if LWIP_IPV6\nstatic err_t netif_null_output_ip6(struct netif *netif, struct pbuf *p, ip6_addr_t *ipaddr);\n#endif /* LWIP_IPV6 */\n\n#if LWIP_HAVE_LOOPIF\nstatic struct netif loop_netif;\n\n/**\n * Initialize a lwip network interface structure for a loopback interface\n *\n * @param netif the lwip network interface structure for this loopif\n * @return ERR_OK if the loopif is initialized\n *         ERR_MEM if private data couldn't be allocated\n */\nstatic err_t\nnetif_loopif_init(struct netif *netif)\n{\n  /* initialize the snmp variables and counters inside the struct netif\n   * ifSpeed: no assumption can be made!\n   */\n  NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0);\n\n  netif->name[0] = 'l';\n  netif->name[1] = 'o';\n  netif->output = netif_loop_output;\n  return ERR_OK;\n}\n#endif /* LWIP_HAVE_LOOPIF */\n\nvoid\nnetif_init(void)\n{\n#if LWIP_HAVE_LOOPIF\n  ip_addr_t loop_ipaddr, loop_netmask, loop_gw;\n  IP4_ADDR(&loop_gw, 127,0,0,1);\n  IP4_ADDR(&loop_ipaddr, 127,0,0,1);\n  IP4_ADDR(&loop_netmask, 255,0,0,0);\n\n#if NO_SYS\n  netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, ip_input);\n#else  /* NO_SYS */\n  netif_add(&loop_netif, &loop_ipaddr, &loop_netmask, &loop_gw, NULL, netif_loopif_init, tcpip_input);\n#endif /* NO_SYS */\n  netif_set_up(&loop_netif);\n\n#endif /* LWIP_HAVE_LOOPIF */\n}\n\n/**\n * Add a network interface to the list of lwIP netifs.\n *\n * @param netif a pre-allocated netif structure\n * @param ipaddr IP address for the new netif\n * @param netmask network mask for the new netif\n * @param gw default gateway IP address for the new netif\n * @param state opaque data passed to the new netif\n * @param init callback function that initializes the interface\n * @param input callback function that is called to pass\n * ingress packets up in the protocol layer stack.\n *\n * @return netif, or NULL if failed.\n */\nstruct netif *\nnetif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,\n  ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)\n{\n#if LWIP_IPV6\n  u32_t i;\n#endif\n\n  LWIP_ASSERT(\"No init function given\", init != NULL);\n\n  /* reset new interface configuration state */\n  ip_addr_set_zero(&netif->ip_addr);\n  ip_addr_set_zero(&netif->netmask);\n  ip_addr_set_zero(&netif->gw);\n#if LWIP_IPV6\n  for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n    ip6_addr_set_zero(&netif->ip6_addr[i]);\n    netif_ip6_addr_set_state(netif, i, IP6_ADDR_INVALID);\n  }\n  netif->output_ip6 = netif_null_output_ip6;\n#endif /* LWIP_IPV6 */\n  netif->flags = 0;\n#if LWIP_DHCP\n  /* netif not under DHCP control by default */\n  netif->dhcp = NULL;\n#endif /* LWIP_DHCP */\n#if LWIP_AUTOIP\n  /* netif not under AutoIP control by default */\n  netif->autoip = NULL;\n#endif /* LWIP_AUTOIP */\n#if LWIP_IPV6_AUTOCONFIG\n  /* IPv6 address autoconfiguration not enabled by default */\n  netif->ip6_autoconfig_enabled = 0;\n#endif /* LWIP_IPV6_AUTOCONFIG */\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n  netif->rs_count = LWIP_ND6_MAX_MULTICAST_SOLICIT;\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n#if LWIP_IPV6_DHCP6\n  /* netif not under DHCPv6 control by default */\n  netif->dhcp6 = NULL;\n#endif /* LWIP_IPV6_DHCP6 */\n#if LWIP_NETIF_STATUS_CALLBACK\n  netif->status_callback = NULL;\n#endif /* LWIP_NETIF_STATUS_CALLBACK */\n#if LWIP_NETIF_LINK_CALLBACK\n  netif->link_callback = NULL;\n#endif /* LWIP_NETIF_LINK_CALLBACK */\n#if LWIP_IGMP\n  netif->igmp_mac_filter = NULL;\n#endif /* LWIP_IGMP */\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n  netif->mld_mac_filter = NULL;\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n#if ENABLE_LOOPBACK\n  netif->loop_first = NULL;\n  netif->loop_last = NULL;\n#endif /* ENABLE_LOOPBACK */\n\n  /* remember netif specific state information data */\n  netif->state = state;\n  netif->num = netif_num++;\n  netif->input = input;\n  NETIF_SET_HWADDRHINT(netif, NULL);\n#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS\n  netif->loop_cnt_current = 0;\n#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */\n\n  netif_set_addr(netif, ipaddr, netmask, gw);\n\n  /* call user specified initialization function for netif */\n  if (init(netif) != ERR_OK) {\n    return NULL;\n  }\n\n  /* add this netif to the list */\n  netif->next = netif_list;\n  netif_list = netif;\n  snmp_inc_iflist();\n\n#if LWIP_IGMP\n  /* start IGMP processing */\n  if (netif->flags & NETIF_FLAG_IGMP) {\n    igmp_start(netif);\n  }\n#endif /* LWIP_IGMP */\n\n  LWIP_DEBUGF(NETIF_DEBUG, (\"netif: added interface %c%c IP addr \",\n    netif->name[0], netif->name[1]));\n  ip_addr_debug_print(NETIF_DEBUG, ipaddr);\n  LWIP_DEBUGF(NETIF_DEBUG, (\" netmask \"));\n  ip_addr_debug_print(NETIF_DEBUG, netmask);\n  LWIP_DEBUGF(NETIF_DEBUG, (\" gw \"));\n  ip_addr_debug_print(NETIF_DEBUG, gw);\n  LWIP_DEBUGF(NETIF_DEBUG, (\"\\n\"));\n  return netif;\n}\n\n/**\n * Change IP address configuration for a network interface (including netmask\n * and default gateway).\n *\n * @param netif the network interface to change\n * @param ipaddr the new IP address\n * @param netmask the new netmask\n * @param gw the new default gateway\n */\nvoid\nnetif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,\n    ip_addr_t *gw)\n{\n  netif_set_ipaddr(netif, ipaddr);\n  netif_set_netmask(netif, netmask);\n  netif_set_gw(netif, gw);\n}\n\n/**\n * Remove a network interface from the list of lwIP netifs.\n *\n * @param netif the network interface to remove\n */\nvoid\nnetif_remove(struct netif *netif)\n{\n  if (netif == NULL) {\n    return;\n  }\n\n#if LWIP_IGMP\n  /* stop IGMP processing */\n  if (netif->flags & NETIF_FLAG_IGMP) {\n    igmp_stop(netif);\n  }\n#endif /* LWIP_IGMP */\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n  /* stop MLD processing */\n  mld6_stop(netif);\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n  if (netif_is_up(netif)) {\n    /* set netif down before removing (call callback function) */\n    netif_set_down(netif);\n  }\n\n  snmp_delete_ipaddridx_tree(netif);\n\n  /*  is it the first netif? */\n  if (netif_list == netif) {\n    netif_list = netif->next;\n  } else {\n    /*  look for netif further down the list */\n    struct netif * tmpNetif;\n    for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) {\n      if (tmpNetif->next == netif) {\n        tmpNetif->next = netif->next;\n        break;\n      }\n    }\n    if (tmpNetif == NULL)\n      return; /*  we didn't find any netif today */\n  }\n  snmp_dec_iflist();\n  /* this netif is default? */\n  if (netif_default == netif) {\n    /* reset default netif */\n    netif_set_default(NULL);\n  }\n#if LWIP_NETIF_REMOVE_CALLBACK\n  if (netif->remove_callback) {\n    netif->remove_callback(netif);\n  }\n#endif /* LWIP_NETIF_REMOVE_CALLBACK */\n  LWIP_DEBUGF( NETIF_DEBUG, (\"netif_remove: removed netif\\n\") );\n}\n\n/**\n * Find a network interface by searching for its name\n *\n * @param name the name of the netif (like netif->name) plus concatenated number\n * in ascii representation (e.g. 'en0')\n */\nstruct netif *\nnetif_find(char *name)\n{\n  struct netif *netif;\n  u8_t num;\n\n  if (name == NULL) {\n    return NULL;\n  }\n\n  num = name[2] - '0';\n\n  for(netif = netif_list; netif != NULL; netif = netif->next) {\n    if (num == netif->num &&\n       name[0] == netif->name[0] &&\n       name[1] == netif->name[1]) {\n      LWIP_DEBUGF(NETIF_DEBUG, (\"netif_find: found %c%c\\n\", name[0], name[1]));\n      return netif;\n    }\n  }\n  LWIP_DEBUGF(NETIF_DEBUG, (\"netif_find: didn't find %c%c\\n\", name[0], name[1]));\n  return NULL;\n}\n\nint netif_is_named (struct netif *netif, const char name[3])\n{\n    u8_t num = name[2] - '0';\n    \n    return (!memcmp(netif->name, name, 2) && netif->num == num);\n}\n\n/**\n * Change the IP address of a network interface\n *\n * @param netif the network interface to change\n * @param ipaddr the new IP address\n *\n * @note call netif_set_addr() if you also want to change netmask and\n * default gateway\n */\nvoid\nnetif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr)\n{\n  /* TODO: Handling of obsolete pcbs */\n  /* See:  http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */\n#if LWIP_TCP\n  struct tcp_pcb *pcb;\n  struct tcp_pcb_listen *lpcb;\n\n  /* address is actually being changed? */\n  if (ipaddr && (ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) {\n    /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */\n    LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, (\"netif_set_ipaddr: netif address being changed\\n\"));\n    pcb = tcp_active_pcbs;\n    while (pcb != NULL) {\n      /* PCB bound to current local interface address? */\n      if (ip_addr_cmp(ipX_2_ip(&pcb->local_ip), &(netif->ip_addr))\n#if LWIP_AUTOIP\n        /* connections to link-local addresses must persist (RFC3927 ch. 1.9) */\n        && !ip_addr_islinklocal(ipX_2_ip(&pcb->local_ip))\n#endif /* LWIP_AUTOIP */\n        ) {\n        /* this connection must be aborted */\n        struct tcp_pcb *next = pcb->next;\n        LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, (\"netif_set_ipaddr: aborting TCP pcb %p\\n\", (void *)pcb));\n        tcp_abort(pcb);\n        pcb = next;\n      } else {\n        pcb = pcb->next;\n      }\n    }\n    for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {\n      /* PCB bound to current local interface address? */\n      if ((!(ip_addr_isany(ipX_2_ip(&lpcb->local_ip)))) &&\n          (ip_addr_cmp(ipX_2_ip(&lpcb->local_ip), &(netif->ip_addr)))) {\n        /* The PCB is listening to the old ipaddr and\n         * is set to listen to the new one instead */\n        ip_addr_set(ipX_2_ip(&lpcb->local_ip), ipaddr);\n      }\n    }\n  }\n#endif\n  snmp_delete_ipaddridx_tree(netif);\n  snmp_delete_iprteidx_tree(0,netif);\n  /* set new IP address to netif */\n  ip_addr_set(&(netif->ip_addr), ipaddr);\n  snmp_insert_ipaddridx_tree(netif);\n  snmp_insert_iprteidx_tree(0,netif);\n\n  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\"netif: IP address of interface %c%c set to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n    netif->name[0], netif->name[1],\n    ip4_addr1_16(&netif->ip_addr),\n    ip4_addr2_16(&netif->ip_addr),\n    ip4_addr3_16(&netif->ip_addr),\n    ip4_addr4_16(&netif->ip_addr)));\n}\n\n/**\n * Change the default gateway for a network interface\n *\n * @param netif the network interface to change\n * @param gw the new default gateway\n *\n * @note call netif_set_addr() if you also want to change ip address and netmask\n */\nvoid\nnetif_set_gw(struct netif *netif, ip_addr_t *gw)\n{\n  ip_addr_set(&(netif->gw), gw);\n  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\"netif: GW address of interface %c%c set to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n    netif->name[0], netif->name[1],\n    ip4_addr1_16(&netif->gw),\n    ip4_addr2_16(&netif->gw),\n    ip4_addr3_16(&netif->gw),\n    ip4_addr4_16(&netif->gw)));\n}\n\nvoid netif_set_pretend_tcp (struct netif *netif, u8_t pretend)\n{\n    if (pretend) {\n        netif->flags |= NETIF_FLAG_PRETEND_TCP;\n    } else {\n        netif->flags &= ~NETIF_FLAG_PRETEND_TCP;\n    }\n}\n\n/**\n * Change the netmask of a network interface\n *\n * @param netif the network interface to change\n * @param netmask the new netmask\n *\n * @note call netif_set_addr() if you also want to change ip address and\n * default gateway\n */\nvoid\nnetif_set_netmask(struct netif *netif, ip_addr_t *netmask)\n{\n  snmp_delete_iprteidx_tree(0, netif);\n  /* set new netmask to netif */\n  ip_addr_set(&(netif->netmask), netmask);\n  snmp_insert_iprteidx_tree(0, netif);\n  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\"netif: netmask of interface %c%c set to %\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F\"\\n\",\n    netif->name[0], netif->name[1],\n    ip4_addr1_16(&netif->netmask),\n    ip4_addr2_16(&netif->netmask),\n    ip4_addr3_16(&netif->netmask),\n    ip4_addr4_16(&netif->netmask)));\n}\n\n/**\n * Set a network interface as the default network interface\n * (used to output all packets for which no specific route is found)\n *\n * @param netif the default network interface\n */\nvoid\nnetif_set_default(struct netif *netif)\n{\n  if (netif == NULL) {\n    /* remove default route */\n    snmp_delete_iprteidx_tree(1, netif);\n  } else {\n    /* install default route */\n    snmp_insert_iprteidx_tree(1, netif);\n  }\n  netif_default = netif;\n  LWIP_DEBUGF(NETIF_DEBUG, (\"netif: setting default interface %c%c\\n\",\n           netif ? netif->name[0] : '\\'', netif ? netif->name[1] : '\\''));\n}\n\n/**\n * Bring an interface up, available for processing\n * traffic.\n * \n * @note: Enabling DHCP on a down interface will make it come\n * up once configured.\n * \n * @see dhcp_start()\n */ \nvoid netif_set_up(struct netif *netif)\n{\n  if (!(netif->flags & NETIF_FLAG_UP)) {\n    netif->flags |= NETIF_FLAG_UP;\n    \n#if LWIP_SNMP\n    snmp_get_sysuptime(&netif->ts);\n#endif /* LWIP_SNMP */\n\n    NETIF_STATUS_CALLBACK(netif);\n\n    if (netif->flags & NETIF_FLAG_LINK_UP) {\n#if LWIP_ARP\n      /* For Ethernet network interfaces, we would like to send a \"gratuitous ARP\" */ \n      if (netif->flags & (NETIF_FLAG_ETHARP)) {\n        etharp_gratuitous(netif);\n      }\n#endif /* LWIP_ARP */\n\n#if LWIP_IGMP\n      /* resend IGMP memberships */\n      if (netif->flags & NETIF_FLAG_IGMP) {\n        igmp_report_groups( netif);\n      }\n#endif /* LWIP_IGMP */\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n      /* send mld memberships */\n      mld6_report_groups( netif);\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n      /* Send Router Solicitation messages. */\n      netif->rs_count = LWIP_ND6_MAX_MULTICAST_SOLICIT;\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n\n    }\n  }\n}\n\n/**\n * Bring an interface down, disabling any traffic processing.\n *\n * @note: Enabling DHCP on a down interface will make it come\n * up once configured.\n * \n * @see dhcp_start()\n */ \nvoid netif_set_down(struct netif *netif)\n{\n  if (netif->flags & NETIF_FLAG_UP) {\n    netif->flags &= ~NETIF_FLAG_UP;\n#if LWIP_SNMP\n    snmp_get_sysuptime(&netif->ts);\n#endif\n\n#if LWIP_ARP\n    if (netif->flags & NETIF_FLAG_ETHARP) {\n      etharp_cleanup_netif(netif);\n    }\n#endif /* LWIP_ARP */\n    NETIF_STATUS_CALLBACK(netif);\n  }\n}\n\n#if LWIP_NETIF_STATUS_CALLBACK\n/**\n * Set callback to be called when interface is brought up/down\n */\nvoid netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback)\n{\n  if (netif) {\n    netif->status_callback = status_callback;\n  }\n}\n#endif /* LWIP_NETIF_STATUS_CALLBACK */\n\n#if LWIP_NETIF_REMOVE_CALLBACK\n/**\n * Set callback to be called when the interface has been removed\n */\nvoid\nnetif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback)\n{\n  if (netif) {\n    netif->remove_callback = remove_callback;\n  }\n}\n#endif /* LWIP_NETIF_REMOVE_CALLBACK */\n\n/**\n * Called by a driver when its link goes up\n */\nvoid netif_set_link_up(struct netif *netif )\n{\n  if (!(netif->flags & NETIF_FLAG_LINK_UP)) {\n    netif->flags |= NETIF_FLAG_LINK_UP;\n\n#if LWIP_DHCP\n    if (netif->dhcp) {\n      dhcp_network_changed(netif);\n    }\n#endif /* LWIP_DHCP */\n\n#if LWIP_AUTOIP\n    if (netif->autoip) {\n      autoip_network_changed(netif);\n    }\n#endif /* LWIP_AUTOIP */\n\n    if (netif->flags & NETIF_FLAG_UP) {\n#if LWIP_ARP\n      /* For Ethernet network interfaces, we would like to send a \"gratuitous ARP\" */ \n      if (netif->flags & NETIF_FLAG_ETHARP) {\n        etharp_gratuitous(netif);\n      }\n#endif /* LWIP_ARP */\n\n#if LWIP_IGMP\n      /* resend IGMP memberships */\n      if (netif->flags & NETIF_FLAG_IGMP) {\n        igmp_report_groups( netif);\n      }\n#endif /* LWIP_IGMP */\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n      /* send mld memberships */\n      mld6_report_groups( netif);\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n    }\n    NETIF_LINK_CALLBACK(netif);\n  }\n}\n\n/**\n * Called by a driver when its link goes down\n */\nvoid netif_set_link_down(struct netif *netif )\n{\n  if (netif->flags & NETIF_FLAG_LINK_UP) {\n    netif->flags &= ~NETIF_FLAG_LINK_UP;\n    NETIF_LINK_CALLBACK(netif);\n  }\n}\n\n#if LWIP_NETIF_LINK_CALLBACK\n/**\n * Set callback to be called when link is brought up/down\n */\nvoid netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback)\n{\n  if (netif) {\n    netif->link_callback = link_callback;\n  }\n}\n#endif /* LWIP_NETIF_LINK_CALLBACK */\n\n#if ENABLE_LOOPBACK\n/**\n * Send an IP packet to be received on the same netif (loopif-like).\n * The pbuf is simply copied and handed back to netif->input.\n * In multithreaded mode, this is done directly since netif->input must put\n * the packet on a queue.\n * In callback mode, the packet is put on an internal queue and is fed to\n * netif->input by netif_poll().\n *\n * @param netif the lwip network interface structure\n * @param p the (IP) packet to 'send'\n * @param ipaddr the ip address to send the packet to (not used)\n * @return ERR_OK if the packet has been sent\n *         ERR_MEM if the pbuf used to copy the packet couldn't be allocated\n */\nerr_t\nnetif_loop_output(struct netif *netif, struct pbuf *p,\n       ip_addr_t *ipaddr)\n{\n  struct pbuf *r;\n  err_t err;\n  struct pbuf *last;\n#if LWIP_LOOPBACK_MAX_PBUFS\n  u8_t clen = 0;\n#endif /* LWIP_LOOPBACK_MAX_PBUFS */\n  /* If we have a loopif, SNMP counters are adjusted for it,\n   * if not they are adjusted for 'netif'. */\n#if LWIP_SNMP\n#if LWIP_HAVE_LOOPIF\n  struct netif *stats_if = &loop_netif;\n#else /* LWIP_HAVE_LOOPIF */\n  struct netif *stats_if = netif;\n#endif /* LWIP_HAVE_LOOPIF */\n#endif /* LWIP_SNMP */\n  SYS_ARCH_DECL_PROTECT(lev);\n  LWIP_UNUSED_ARG(ipaddr);\n\n  /* Allocate a new pbuf */\n  r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM);\n  if (r == NULL) {\n    LINK_STATS_INC(link.memerr);\n    LINK_STATS_INC(link.drop);\n    snmp_inc_ifoutdiscards(stats_if);\n    return ERR_MEM;\n  }\n#if LWIP_LOOPBACK_MAX_PBUFS\n  clen = pbuf_clen(r);\n  /* check for overflow or too many pbuf on queue */\n  if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) ||\n     ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) {\n    pbuf_free(r);\n    LINK_STATS_INC(link.memerr);\n    LINK_STATS_INC(link.drop);\n    snmp_inc_ifoutdiscards(stats_if);\n    return ERR_MEM;\n  }\n  netif->loop_cnt_current += clen;\n#endif /* LWIP_LOOPBACK_MAX_PBUFS */\n\n  /* Copy the whole pbuf queue p into the single pbuf r */\n  if ((err = pbuf_copy(r, p)) != ERR_OK) {\n    pbuf_free(r);\n    LINK_STATS_INC(link.memerr);\n    LINK_STATS_INC(link.drop);\n    snmp_inc_ifoutdiscards(stats_if);\n    return err;\n  }\n\n  /* Put the packet on a linked list which gets emptied through calling\n     netif_poll(). */\n\n  /* let last point to the last pbuf in chain r */\n  for (last = r; last->next != NULL; last = last->next);\n\n  SYS_ARCH_PROTECT(lev);\n  if(netif->loop_first != NULL) {\n    LWIP_ASSERT(\"if first != NULL, last must also be != NULL\", netif->loop_last != NULL);\n    netif->loop_last->next = r;\n    netif->loop_last = last;\n  } else {\n    netif->loop_first = r;\n    netif->loop_last = last;\n  }\n  SYS_ARCH_UNPROTECT(lev);\n\n  LINK_STATS_INC(link.xmit);\n  snmp_add_ifoutoctets(stats_if, p->tot_len);\n  snmp_inc_ifoutucastpkts(stats_if);\n\n#if LWIP_NETIF_LOOPBACK_MULTITHREADING\n  /* For multithreading environment, schedule a call to netif_poll */\n  tcpip_callback((tcpip_callback_fn)netif_poll, netif);\n#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */\n\n  return ERR_OK;\n}\n\n/**\n * Call netif_poll() in the main loop of your application. This is to prevent\n * reentering non-reentrant functions like tcp_input(). Packets passed to\n * netif_loop_output() are put on a list that is passed to netif->input() by\n * netif_poll().\n */\nvoid\nnetif_poll(struct netif *netif)\n{\n  struct pbuf *in;\n  /* If we have a loopif, SNMP counters are adjusted for it,\n   * if not they are adjusted for 'netif'. */\n#if LWIP_SNMP\n#if LWIP_HAVE_LOOPIF\n  struct netif *stats_if = &loop_netif;\n#else /* LWIP_HAVE_LOOPIF */\n  struct netif *stats_if = netif;\n#endif /* LWIP_HAVE_LOOPIF */\n#endif /* LWIP_SNMP */\n  SYS_ARCH_DECL_PROTECT(lev);\n\n  do {\n    /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */\n    SYS_ARCH_PROTECT(lev);\n    in = netif->loop_first;\n    if (in != NULL) {\n      struct pbuf *in_end = in;\n#if LWIP_LOOPBACK_MAX_PBUFS\n      u8_t clen = pbuf_clen(in);\n      /* adjust the number of pbufs on queue */\n      LWIP_ASSERT(\"netif->loop_cnt_current underflow\",\n        ((netif->loop_cnt_current - clen) < netif->loop_cnt_current));\n      netif->loop_cnt_current -= clen;\n#endif /* LWIP_LOOPBACK_MAX_PBUFS */\n      while (in_end->len != in_end->tot_len) {\n        LWIP_ASSERT(\"bogus pbuf: len != tot_len but next == NULL!\", in_end->next != NULL);\n        in_end = in_end->next;\n      }\n      /* 'in_end' now points to the last pbuf from 'in' */\n      if (in_end == netif->loop_last) {\n        /* this was the last pbuf in the list */\n        netif->loop_first = netif->loop_last = NULL;\n      } else {\n        /* pop the pbuf off the list */\n        netif->loop_first = in_end->next;\n        LWIP_ASSERT(\"should not be null since first != last!\", netif->loop_first != NULL);\n      }\n      /* De-queue the pbuf from its successors on the 'loop_' list. */\n      in_end->next = NULL;\n    }\n    SYS_ARCH_UNPROTECT(lev);\n\n    if (in != NULL) {\n      LINK_STATS_INC(link.recv);\n      snmp_add_ifinoctets(stats_if, in->tot_len);\n      snmp_inc_ifinucastpkts(stats_if);\n      /* loopback packets are always IP packets! */\n      if (ip_input(in, netif) != ERR_OK) {\n        pbuf_free(in);\n      }\n      /* Don't reference the packet any more! */\n      in = NULL;\n    }\n  /* go on while there is a packet on the list */\n  } while (netif->loop_first != NULL);\n}\n\n#if !LWIP_NETIF_LOOPBACK_MULTITHREADING\n/**\n * Calls netif_poll() for every netif on the netif_list.\n */\nvoid\nnetif_poll_all(void)\n{\n  struct netif *netif = netif_list;\n  /* loop through netifs */\n  while (netif != NULL) {\n    netif_poll(netif);\n    /* proceed to next network interface */\n    netif = netif->next;\n  }\n}\n#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */\n#endif /* ENABLE_LOOPBACK */\n\n#if LWIP_IPV6\ns8_t\nnetif_matches_ip6_addr(struct netif * netif, ip6_addr_t * ip6addr)\n{\n  s8_t i;\n  for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; i++) {\n    if (ip6_addr_cmp(netif_ip6_addr(netif, i), ip6addr)) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nvoid\nnetif_create_ip6_linklocal_address(struct netif * netif, u8_t from_mac_48bit)\n{\n  u8_t i, addr_index, min_len;\n\n  /* Link-local prefix. */\n  netif->ip6_addr[0].addr[0] = PP_HTONL(0xfe800000ul);\n  netif->ip6_addr[0].addr[1] = 0;\n\n  /* Generate interface ID. */\n  if (from_mac_48bit) {\n    /* Assume hwaddr is a 48-bit IEEE 802 MAC. Convert to EUI-64 address. Complement Group bit. */\n    netif->ip6_addr[0].addr[2] = htonl((((u32_t)(netif->hwaddr[0] ^ 0x02)) << 24) |\n        ((u32_t)(netif->hwaddr[1]) << 16) |\n        ((u32_t)(netif->hwaddr[2]) << 8) |\n        (0xff));\n    netif->ip6_addr[0].addr[3] = htonl((0xfeul << 24) |\n        ((u32_t)(netif->hwaddr[3]) << 16) |\n        ((u32_t)(netif->hwaddr[4]) << 8) |\n        (netif->hwaddr[5]));\n  }\n  else {\n    /* Use hwaddr directly as interface ID. */\n    netif->ip6_addr[0].addr[2] = 0;\n    netif->ip6_addr[0].addr[3] = 0;\n\n    min_len = netif->hwaddr_len < 8 ? netif->hwaddr_len : 8;\n    addr_index = 3;\n    for (i = 0; i < min_len; i++) {\n      if (i == 4) {\n        addr_index--;\n      }\n      netif->ip6_addr[0].addr[addr_index] |= ((u32_t)(netif->hwaddr[netif->hwaddr_len - i - 1])) << (8 * (i & 0x03));\n    }\n  }\n\n  /* Set address state. */\n#if LWIP_IPV6_DUP_DETECT_ATTEMPTS\n  /* Will perform duplicate address detection (DAD). */\n  netif->ip6_addr_state[0] = IP6_ADDR_TENTATIVE;\n#else\n  /* Consider address valid. */\n  netif->ip6_addr_state[0] = IP6_ADDR_PREFERRED;\n#endif /* LWIP_IPV6_AUTOCONFIG */\n}\n\nstatic err_t\nnetif_null_output_ip6(struct netif *netif, struct pbuf *p, ip6_addr_t *ipaddr)\n{\n    (void)netif;\n    (void)p;\n    (void)ipaddr;\n\n    return ERR_IF;\n}\n#endif /* LWIP_IPV6 */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/pbuf.c",
    "content": "/**\n * @file\n * Packet buffer management\n *\n * Packets are built from the pbuf data structure. It supports dynamic\n * memory allocation for packet contents or can reference externally\n * managed packet contents both in RAM and ROM. Quick allocation for\n * incoming packets is provided through pools with fixed sized pbufs.\n *\n * A packet may span over multiple pbufs, chained as a singly linked\n * list. This is called a \"pbuf chain\".\n *\n * Multiple packets may be queued, also using this singly linked list.\n * This is called a \"packet queue\".\n * \n * So, a packet queue consists of one or more pbuf chains, each of\n * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE\n * NOT SUPPORTED!!! Use helper structs to queue multiple packets.\n * \n * The differences between a pbuf chain and a packet queue are very\n * precise but subtle. \n *\n * The last pbuf of a packet has a ->tot_len field that equals the\n * ->len field. It can be found by traversing the list. If the last\n * pbuf of a packet has a ->next field other than NULL, more packets\n * are on the queue.\n *\n * Therefore, looping through a pbuf of a single packet, has an\n * loop end condition (tot_len == p->len), NOT (next == NULL).\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/stats.h\"\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/sys.h\"\n#include \"arch/perf.h\"\n#if LWIP_TCP && TCP_QUEUE_OOSEQ\n#include \"lwip/tcp_impl.h\"\n#endif\n#if LWIP_CHECKSUM_ON_COPY\n#include \"lwip/inet_chksum.h\"\n#endif\n\n#include <string.h>\n\n#define SIZEOF_STRUCT_PBUF        LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf))\n/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically\n   aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */\n#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE)\n\n#if !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ\n#define PBUF_POOL_IS_EMPTY()\n#else /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */\n\n#if !NO_SYS\n#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL\n#include \"lwip/tcpip.h\"\n#define PBUF_POOL_FREE_OOSEQ_QUEUE_CALL()  do { \\\n  if(tcpip_callback_with_block(pbuf_free_ooseq_callback, NULL, 0) != ERR_OK) { \\\n      SYS_ARCH_PROTECT(old_level); \\\n      pbuf_free_ooseq_pending = 0; \\\n      SYS_ARCH_UNPROTECT(old_level); \\\n  } } while(0)\n#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */\n#endif /* !NO_SYS */\n\nvolatile u8_t pbuf_free_ooseq_pending;\n#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty()\n\n/**\n * Attempt to reclaim some memory from queued out-of-sequence TCP segments\n * if we run out of pool pbufs. It's better to give priority to new packets\n * if we're running out.\n *\n * This must be done in the correct thread context therefore this function\n * can only be used with NO_SYS=0 and through tcpip_callback.\n */\n#if !NO_SYS\nstatic\n#endif /* !NO_SYS */\nvoid\npbuf_free_ooseq(void)\n{\n  struct tcp_pcb* pcb;\n  SYS_ARCH_DECL_PROTECT(old_level);\n\n  SYS_ARCH_PROTECT(old_level);\n  pbuf_free_ooseq_pending = 0;\n  SYS_ARCH_UNPROTECT(old_level);\n\n  for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) {\n    if (NULL != pcb->ooseq) {\n      /** Free the ooseq pbufs of one PCB only */\n      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_free_ooseq: freeing out-of-sequence pbufs\\n\"));\n      tcp_segs_free(pcb->ooseq);\n      pcb->ooseq = NULL;\n      return;\n    }\n  }\n}\n\n#if !NO_SYS\n/**\n * Just a callback function for tcpip_timeout() that calls pbuf_free_ooseq().\n */\nstatic void\npbuf_free_ooseq_callback(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  pbuf_free_ooseq();\n}\n#endif /* !NO_SYS */\n\n/** Queue a call to pbuf_free_ooseq if not already queued. */\nstatic void\npbuf_pool_is_empty(void)\n{\n#ifndef PBUF_POOL_FREE_OOSEQ_QUEUE_CALL\n  SYS_ARCH_DECL_PROTECT(old_level);\n  SYS_ARCH_PROTECT(old_level);\n  pbuf_free_ooseq_pending = 1;\n  SYS_ARCH_UNPROTECT(old_level);\n#else /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */\n  u8_t queued;\n  SYS_ARCH_DECL_PROTECT(old_level);\n  SYS_ARCH_PROTECT(old_level);\n  queued = pbuf_free_ooseq_pending;\n  pbuf_free_ooseq_pending = 1;\n  SYS_ARCH_UNPROTECT(old_level);\n\n  if(!queued) {\n    /* queue a call to pbuf_free_ooseq if not already queued */\n    PBUF_POOL_FREE_OOSEQ_QUEUE_CALL();\n  }\n#endif /* PBUF_POOL_FREE_OOSEQ_QUEUE_CALL */\n}\n#endif /* !LWIP_TCP || !TCP_QUEUE_OOSEQ || !PBUF_POOL_FREE_OOSEQ */\n\n/**\n * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type).\n *\n * The actual memory allocated for the pbuf is determined by the\n * layer at which the pbuf is allocated and the requested size\n * (from the size parameter).\n *\n * @param layer flag to define header size\n * @param length size of the pbuf's payload\n * @param type this parameter decides how and where the pbuf\n * should be allocated as follows:\n *\n * - PBUF_RAM: buffer memory for pbuf is allocated as one large\n *             chunk. This includes protocol headers as well.\n * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for\n *             protocol headers. Additional headers must be prepended\n *             by allocating another pbuf and chain in to the front of\n *             the ROM pbuf. It is assumed that the memory used is really\n *             similar to ROM in that it is immutable and will not be\n *             changed. Memory which is dynamic should generally not\n *             be attached to PBUF_ROM pbufs. Use PBUF_REF instead.\n * - PBUF_REF: no buffer memory is allocated for the pbuf, even for\n *             protocol headers. It is assumed that the pbuf is only\n *             being used in a single thread. If the pbuf gets queued,\n *             then pbuf_take should be called to copy the buffer.\n * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from\n *              the pbuf pool that is allocated during pbuf_init().\n *\n * @return the allocated pbuf. If multiple pbufs where allocated, this\n * is the first pbuf of a pbuf chain.\n */\nstruct pbuf *\npbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type)\n{\n  struct pbuf *p, *q, *r;\n  u16_t offset;\n  s32_t rem_len; /* remaining length */\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_alloc(length=%\"U16_F\")\\n\", length));\n\n  /* determine header offset */\n  switch (layer) {\n  case PBUF_TRANSPORT:\n    /* add room for transport (often TCP) layer header */\n    offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;\n    break;\n  case PBUF_IP:\n    /* add room for IP layer header */\n    offset = PBUF_LINK_HLEN + PBUF_IP_HLEN;\n    break;\n  case PBUF_LINK:\n    /* add room for link layer header */\n    offset = PBUF_LINK_HLEN;\n    break;\n  case PBUF_RAW:\n    offset = 0;\n    break;\n  default:\n    LWIP_ASSERT(\"pbuf_alloc: bad pbuf layer\", 0);\n    return NULL;\n  }\n\n  switch (type) {\n  case PBUF_POOL:\n    /* allocate head of pbuf chain into p */\n    p = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);\n    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_alloc: allocated pbuf %p\\n\", (void *)p));\n    if (p == NULL) {\n      PBUF_POOL_IS_EMPTY();\n      return NULL;\n    }\n    p->type = type;\n    p->next = NULL;\n\n    /* make the payload pointer point 'offset' bytes into pbuf data memory */\n    p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset)));\n    LWIP_ASSERT(\"pbuf_alloc: pbuf p->payload properly aligned\",\n            ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);\n    /* the total length of the pbuf chain is the requested size */\n    p->tot_len = length;\n    /* set the length of the first pbuf in the chain */\n    p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset));\n    LWIP_ASSERT(\"check p->payload + p->len does not overflow pbuf\",\n                ((u8_t*)p->payload + p->len <=\n                 (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));\n    LWIP_ASSERT(\"PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT\",\n      (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 );\n    /* set reference count (needed here in case we fail) */\n    p->ref = 1;\n\n    /* now allocate the tail of the pbuf chain */\n\n    /* remember first pbuf for linkage in next iteration */\n    r = p;\n    /* remaining length to be allocated */\n    rem_len = length - p->len;\n    /* any remaining pbufs to be allocated? */\n    while (rem_len > 0) {\n      q = (struct pbuf *)memp_malloc(MEMP_PBUF_POOL);\n      if (q == NULL) {\n        PBUF_POOL_IS_EMPTY();\n        /* free chain so far allocated */\n        pbuf_free(p);\n        /* bail out unsuccesfully */\n        return NULL;\n      }\n      q->type = type;\n      q->flags = 0;\n      q->next = NULL;\n      /* make previous pbuf point to this pbuf */\n      r->next = q;\n      /* set total length of this pbuf and next in chain */\n      LWIP_ASSERT(\"rem_len < max_u16_t\", rem_len < 0xffff);\n      q->tot_len = (u16_t)rem_len;\n      /* this pbuf length is pool size, unless smaller sized tail */\n      q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED);\n      q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF);\n      LWIP_ASSERT(\"pbuf_alloc: pbuf q->payload properly aligned\",\n              ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0);\n      LWIP_ASSERT(\"check p->payload + p->len does not overflow pbuf\",\n                  ((u8_t*)p->payload + p->len <=\n                   (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED));\n      q->ref = 1;\n      /* calculate remaining length to be allocated */\n      rem_len -= q->len;\n      /* remember this pbuf for linkage in next iteration */\n      r = q;\n    }\n    /* end of chain */\n    /*r->next = NULL;*/\n\n    break;\n  case PBUF_RAM:\n    /* If pbuf is to be allocated in RAM, allocate memory for it. */\n    p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length));\n    if (p == NULL) {\n      return NULL;\n    }\n    /* Set up internal structure of the pbuf. */\n    p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset));\n    p->len = p->tot_len = length;\n    p->next = NULL;\n    p->type = type;\n\n    LWIP_ASSERT(\"pbuf_alloc: pbuf->payload properly aligned\",\n           ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0);\n    break;\n  /* pbuf references existing (non-volatile static constant) ROM payload? */\n  case PBUF_ROM:\n  /* pbuf references existing (externally allocated) RAM payload? */\n  case PBUF_REF:\n    /* only allocate memory for the pbuf structure */\n    p = (struct pbuf *)memp_malloc(MEMP_PBUF);\n    if (p == NULL) {\n      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n                  (\"pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\\n\",\n                  (type == PBUF_ROM) ? \"ROM\" : \"REF\"));\n      return NULL;\n    }\n    /* caller must set this field properly, afterwards */\n    p->payload = NULL;\n    p->len = p->tot_len = length;\n    p->next = NULL;\n    p->type = type;\n    break;\n  default:\n    LWIP_ASSERT(\"pbuf_alloc: erroneous type\", 0);\n    return NULL;\n  }\n  /* set reference count */\n  p->ref = 1;\n  /* set flags */\n  p->flags = 0;\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_alloc(length=%\"U16_F\") == %p\\n\", length, (void *)p));\n  return p;\n}\n\n#if LWIP_SUPPORT_CUSTOM_PBUF\n/** Initialize a custom pbuf (already allocated).\n *\n * @param layer flag to define header size\n * @param length size of the pbuf's payload\n * @param type type of the pbuf (only used to treat the pbuf accordingly, as\n *        this function allocates no memory)\n * @param p pointer to the custom pbuf to initialize (already allocated)\n * @param payload_mem pointer to the buffer that is used for payload and headers,\n *        must be at least big enough to hold 'length' plus the header size,\n *        may be NULL if set later.\n *        ATTENTION: The caller is responsible for correct alignment of this buffer!!\n * @param payload_mem_len the size of the 'payload_mem' buffer, must be at least\n *        big enough to hold 'length' plus the header size\n */\nstruct pbuf*\npbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, struct pbuf_custom *p,\n                    void *payload_mem, u16_t payload_mem_len)\n{\n  u16_t offset;\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_alloced_custom(length=%\"U16_F\")\\n\", length));\n\n  /* determine header offset */\n  switch (l) {\n  case PBUF_TRANSPORT:\n    /* add room for transport (often TCP) layer header */\n    offset = PBUF_LINK_HLEN + PBUF_IP_HLEN + PBUF_TRANSPORT_HLEN;\n    break;\n  case PBUF_IP:\n    /* add room for IP layer header */\n    offset = PBUF_LINK_HLEN + PBUF_IP_HLEN;\n    break;\n  case PBUF_LINK:\n    /* add room for link layer header */\n    offset = PBUF_LINK_HLEN;\n    break;\n  case PBUF_RAW:\n    offset = 0;\n    break;\n  default:\n    LWIP_ASSERT(\"pbuf_alloced_custom: bad pbuf layer\", 0);\n    return NULL;\n  }\n\n  if (LWIP_MEM_ALIGN_SIZE(offset) + length > payload_mem_len) {\n    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_WARNING, (\"pbuf_alloced_custom(length=%\"U16_F\") buffer too short\\n\", length));\n    return NULL;\n  }\n\n  p->pbuf.next = NULL;\n  if (payload_mem != NULL) {\n    p->pbuf.payload = (u8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset);\n  } else {\n    p->pbuf.payload = NULL;\n  }\n  p->pbuf.flags = PBUF_FLAG_IS_CUSTOM;\n  p->pbuf.len = p->pbuf.tot_len = length;\n  p->pbuf.type = type;\n  p->pbuf.ref = 1;\n  return &p->pbuf;\n}\n#endif /* LWIP_SUPPORT_CUSTOM_PBUF */\n\n/**\n * Shrink a pbuf chain to a desired length.\n *\n * @param p pbuf to shrink.\n * @param new_len desired new length of pbuf chain\n *\n * Depending on the desired length, the first few pbufs in a chain might\n * be skipped and left unchanged. The new last pbuf in the chain will be\n * resized, and any remaining pbufs will be freed.\n *\n * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted.\n * @note May not be called on a packet queue.\n *\n * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain).\n */\nvoid\npbuf_realloc(struct pbuf *p, u16_t new_len)\n{\n  struct pbuf *q;\n  u16_t rem_len; /* remaining length */\n  s32_t grow;\n\n  LWIP_ASSERT(\"pbuf_realloc: p != NULL\", p != NULL);\n  LWIP_ASSERT(\"pbuf_realloc: sane p->type\", p->type == PBUF_POOL ||\n              p->type == PBUF_ROM ||\n              p->type == PBUF_RAM ||\n              p->type == PBUF_REF);\n\n  /* desired length larger than current length? */\n  if (new_len >= p->tot_len) {\n    /* enlarging not yet supported */\n    return;\n  }\n\n  /* the pbuf chain grows by (new_len - p->tot_len) bytes\n   * (which may be negative in case of shrinking) */\n  grow = new_len - p->tot_len;\n\n  /* first, step over any pbufs that should remain in the chain */\n  rem_len = new_len;\n  q = p;\n  /* should this pbuf be kept? */\n  while (rem_len > q->len) {\n    /* decrease remaining length by pbuf length */\n    rem_len -= q->len;\n    /* decrease total length indicator */\n    LWIP_ASSERT(\"grow < max_u16_t\", grow < 0xffff);\n    q->tot_len += (u16_t)grow;\n    /* proceed to next pbuf in chain */\n    q = q->next;\n    LWIP_ASSERT(\"pbuf_realloc: q != NULL\", q != NULL);\n  }\n  /* we have now reached the new last pbuf (in q) */\n  /* rem_len == desired length for pbuf q */\n\n  /* shrink allocated memory for PBUF_RAM */\n  /* (other types merely adjust their length fields */\n  if ((q->type == PBUF_RAM) && (rem_len != q->len)) {\n    /* reallocate and adjust the length of the pbuf that will be split */\n    q = (struct pbuf *)mem_trim(q, (u16_t)((u8_t *)q->payload - (u8_t *)q) + rem_len);\n    LWIP_ASSERT(\"mem_trim returned q == NULL\", q != NULL);\n  }\n  /* adjust length fields for new last pbuf */\n  q->len = rem_len;\n  q->tot_len = q->len;\n\n  /* any remaining pbufs in chain? */\n  if (q->next != NULL) {\n    /* free remaining pbufs in chain */\n    pbuf_free(q->next);\n  }\n  /* q is last packet in chain */\n  q->next = NULL;\n\n}\n\n/**\n * Adjusts the payload pointer to hide or reveal headers in the payload.\n *\n * Adjusts the ->payload pointer so that space for a header\n * (dis)appears in the pbuf payload.\n *\n * The ->payload, ->tot_len and ->len fields are adjusted.\n *\n * @param p pbuf to change the header size.\n * @param header_size_increment Number of bytes to increment header size which\n * increases the size of the pbuf. New space is on the front.\n * (Using a negative value decreases the header size.)\n * If hdr_size_inc is 0, this function does nothing and returns succesful.\n *\n * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so\n * the call will fail. A check is made that the increase in header size does\n * not move the payload pointer in front of the start of the buffer.\n * @return non-zero on failure, zero on success.\n *\n */\nu8_t\npbuf_header(struct pbuf *p, s16_t header_size_increment)\n{\n  u16_t type;\n  void *payload;\n  u16_t increment_magnitude;\n\n  LWIP_ASSERT(\"p != NULL\", p != NULL);\n  if ((header_size_increment == 0) || (p == NULL)) {\n    return 0;\n  }\n \n  if (header_size_increment < 0){\n    increment_magnitude = -header_size_increment;\n    /* Check that we aren't going to move off the end of the pbuf */\n    LWIP_ERROR(\"increment_magnitude <= p->len\", (increment_magnitude <= p->len), return 1;);\n  } else {\n    increment_magnitude = header_size_increment;\n#if 0\n    /* Can't assert these as some callers speculatively call\n         pbuf_header() to see if it's OK.  Will return 1 below instead. */\n    /* Check that we've got the correct type of pbuf to work with */\n    LWIP_ASSERT(\"p->type == PBUF_RAM || p->type == PBUF_POOL\", \n                p->type == PBUF_RAM || p->type == PBUF_POOL);\n    /* Check that we aren't going to move off the beginning of the pbuf */\n    LWIP_ASSERT(\"p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF\",\n                (u8_t *)p->payload - increment_magnitude >= (u8_t *)p + SIZEOF_STRUCT_PBUF);\n#endif\n  }\n\n  type = p->type;\n  /* remember current payload pointer */\n  payload = p->payload;\n\n  /* pbuf types containing payloads? */\n  if (type == PBUF_RAM || type == PBUF_POOL) {\n    /* set new payload pointer */\n    p->payload = (u8_t *)p->payload - header_size_increment;\n    /* boundary check fails? */\n    if ((u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) {\n      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n        (\"pbuf_header: failed as %p < %p (not enough space for new header size)\\n\",\n        (void *)p->payload, (void *)(p + 1)));\n      /* restore old payload pointer */\n      p->payload = payload;\n      /* bail out unsuccesfully */\n      return 1;\n    }\n  /* pbuf types refering to external payloads? */\n  } else if (type == PBUF_REF || type == PBUF_ROM) {\n    /* hide a header in the payload? */\n    if ((header_size_increment < 0) && (increment_magnitude <= p->len)) {\n      /* increase payload pointer */\n      p->payload = (u8_t *)p->payload - header_size_increment;\n    } else {\n      /* cannot expand payload to front (yet!)\n       * bail out unsuccesfully */\n      return 1;\n    }\n  } else {\n    /* Unknown type */\n    LWIP_ASSERT(\"bad pbuf type\", 0);\n    return 1;\n  }\n  /* modify pbuf length fields */\n  p->len += header_size_increment;\n  p->tot_len += header_size_increment;\n\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_header: old %p new %p (%\"S16_F\")\\n\",\n    (void *)payload, (void *)p->payload, header_size_increment));\n\n  return 0;\n}\n\n/**\n * Dereference a pbuf chain or queue and deallocate any no-longer-used\n * pbufs at the head of this chain or queue.\n *\n * Decrements the pbuf reference count. If it reaches zero, the pbuf is\n * deallocated.\n *\n * For a pbuf chain, this is repeated for each pbuf in the chain,\n * up to the first pbuf which has a non-zero reference count after\n * decrementing. So, when all reference counts are one, the whole\n * chain is free'd.\n *\n * @param p The pbuf (chain) to be dereferenced.\n *\n * @return the number of pbufs that were de-allocated\n * from the head of the chain.\n *\n * @note MUST NOT be called on a packet queue (Not verified to work yet).\n * @note the reference counter of a pbuf equals the number of pointers\n * that refer to the pbuf (or into the pbuf).\n *\n * @internal examples:\n *\n * Assuming existing chains a->b->c with the following reference\n * counts, calling pbuf_free(a) results in:\n * \n * 1->2->3 becomes ...1->3\n * 3->3->3 becomes 2->3->3\n * 1->1->2 becomes ......1\n * 2->1->1 becomes 1->1->1\n * 1->1->1 becomes .......\n *\n */\nu8_t\npbuf_free(struct pbuf *p)\n{\n  u16_t type;\n  struct pbuf *q;\n  u8_t count;\n\n  if (p == NULL) {\n    LWIP_ASSERT(\"p != NULL\", p != NULL);\n    /* if assertions are disabled, proceed with debug output */\n    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n      (\"pbuf_free(p == NULL) was called.\\n\"));\n    return 0;\n  }\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_free(%p)\\n\", (void *)p));\n\n  PERF_START;\n\n  LWIP_ASSERT(\"pbuf_free: sane type\",\n    p->type == PBUF_RAM || p->type == PBUF_ROM ||\n    p->type == PBUF_REF || p->type == PBUF_POOL);\n\n  count = 0;\n  /* de-allocate all consecutive pbufs from the head of the chain that\n   * obtain a zero reference count after decrementing*/\n  while (p != NULL) {\n    u16_t ref;\n    SYS_ARCH_DECL_PROTECT(old_level);\n    /* Since decrementing ref cannot be guaranteed to be a single machine operation\n     * we must protect it. We put the new ref into a local variable to prevent\n     * further protection. */\n    SYS_ARCH_PROTECT(old_level);\n    /* all pbufs in a chain are referenced at least once */\n    LWIP_ASSERT(\"pbuf_free: p->ref > 0\", p->ref > 0);\n    /* decrease reference count (number of pointers to pbuf) */\n    ref = --(p->ref);\n    SYS_ARCH_UNPROTECT(old_level);\n    /* this pbuf is no longer referenced to? */\n    if (ref == 0) {\n      /* remember next pbuf in chain for next iteration */\n      q = p->next;\n      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_free: deallocating %p\\n\", (void *)p));\n      type = p->type;\n#if LWIP_SUPPORT_CUSTOM_PBUF\n      /* is this a custom pbuf? */\n      if ((p->flags & PBUF_FLAG_IS_CUSTOM) != 0) {\n        struct pbuf_custom *pc = (struct pbuf_custom*)p;\n        LWIP_ASSERT(\"pc->custom_free_function != NULL\", pc->custom_free_function != NULL);\n        pc->custom_free_function(p);\n      } else\n#endif /* LWIP_SUPPORT_CUSTOM_PBUF */\n      {\n        /* is this a pbuf from the pool? */\n        if (type == PBUF_POOL) {\n          memp_free(MEMP_PBUF_POOL, p);\n        /* is this a ROM or RAM referencing pbuf? */\n        } else if (type == PBUF_ROM || type == PBUF_REF) {\n          memp_free(MEMP_PBUF, p);\n        /* type == PBUF_RAM */\n        } else {\n          mem_free(p);\n        }\n      }\n      count++;\n      /* proceed to next pbuf */\n      p = q;\n    /* p->ref > 0, this pbuf is still referenced to */\n    /* (and so the remaining pbufs in chain as well) */\n    } else {\n      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_free: %p has ref %\"U16_F\", ending here.\\n\", (void *)p, ref));\n      /* stop walking through the chain */\n      p = NULL;\n    }\n  }\n  PERF_STOP(\"pbuf_free\");\n  /* return number of de-allocated pbufs */\n  return count;\n}\n\n/**\n * Count number of pbufs in a chain\n *\n * @param p first pbuf of chain\n * @return the number of pbufs in a chain\n */\n\nu8_t\npbuf_clen(struct pbuf *p)\n{\n  u8_t len;\n\n  len = 0;\n  while (p != NULL) {\n    ++len;\n    p = p->next;\n  }\n  return len;\n}\n\n/**\n * Increment the reference count of the pbuf.\n *\n * @param p pbuf to increase reference counter of\n *\n */\nvoid\npbuf_ref(struct pbuf *p)\n{\n  SYS_ARCH_DECL_PROTECT(old_level);\n  /* pbuf given? */\n  if (p != NULL) {\n    SYS_ARCH_PROTECT(old_level);\n    ++(p->ref);\n    SYS_ARCH_UNPROTECT(old_level);\n  }\n}\n\n/**\n * Concatenate two pbufs (each may be a pbuf chain) and take over\n * the caller's reference of the tail pbuf.\n * \n * @note The caller MAY NOT reference the tail pbuf afterwards.\n * Use pbuf_chain() for that purpose.\n * \n * @see pbuf_chain()\n */\n\nvoid\npbuf_cat(struct pbuf *h, struct pbuf *t)\n{\n  struct pbuf *p;\n\n  LWIP_ERROR(\"(h != NULL) && (t != NULL) (programmer violates API)\",\n             ((h != NULL) && (t != NULL)), return;);\n\n  /* proceed to last pbuf of chain */\n  for (p = h; p->next != NULL; p = p->next) {\n    /* add total length of second chain to all totals of first chain */\n    p->tot_len += t->tot_len;\n  }\n  /* { p is last pbuf of first h chain, p->next == NULL } */\n  LWIP_ASSERT(\"p->tot_len == p->len (of last pbuf in chain)\", p->tot_len == p->len);\n  LWIP_ASSERT(\"p->next == NULL\", p->next == NULL);\n  /* add total length of second chain to last pbuf total of first chain */\n  p->tot_len += t->tot_len;\n  /* chain last pbuf of head (p) with first of tail (t) */\n  p->next = t;\n  /* p->next now references t, but the caller will drop its reference to t,\n   * so netto there is no change to the reference count of t.\n   */\n}\n\n/**\n * Chain two pbufs (or pbuf chains) together.\n * \n * The caller MUST call pbuf_free(t) once it has stopped\n * using it. Use pbuf_cat() instead if you no longer use t.\n * \n * @param h head pbuf (chain)\n * @param t tail pbuf (chain)\n * @note The pbufs MUST belong to the same packet.\n * @note MAY NOT be called on a packet queue.\n *\n * The ->tot_len fields of all pbufs of the head chain are adjusted.\n * The ->next field of the last pbuf of the head chain is adjusted.\n * The ->ref field of the first pbuf of the tail chain is adjusted.\n *\n */\nvoid\npbuf_chain(struct pbuf *h, struct pbuf *t)\n{\n  pbuf_cat(h, t);\n  /* t is now referenced by h */\n  pbuf_ref(t);\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_chain: %p references %p\\n\", (void *)h, (void *)t));\n}\n\n/**\n * Dechains the first pbuf from its succeeding pbufs in the chain.\n *\n * Makes p->tot_len field equal to p->len.\n * @param p pbuf to dechain\n * @return remainder of the pbuf chain, or NULL if it was de-allocated.\n * @note May not be called on a packet queue.\n */\nstruct pbuf *\npbuf_dechain(struct pbuf *p)\n{\n  struct pbuf *q;\n  u8_t tail_gone = 1;\n  /* tail */\n  q = p->next;\n  /* pbuf has successor in chain? */\n  if (q != NULL) {\n    /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */\n    LWIP_ASSERT(\"p->tot_len == p->len + q->tot_len\", q->tot_len == p->tot_len - p->len);\n    /* enforce invariant if assertion is disabled */\n    q->tot_len = p->tot_len - p->len;\n    /* decouple pbuf from remainder */\n    p->next = NULL;\n    /* total length of pbuf p is its own length only */\n    p->tot_len = p->len;\n    /* q is no longer referenced by p, free it */\n    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_dechain: unreferencing %p\\n\", (void *)q));\n    tail_gone = pbuf_free(q);\n    if (tail_gone > 0) {\n      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE,\n                  (\"pbuf_dechain: deallocated %p (as it is no longer referenced)\\n\", (void *)q));\n    }\n    /* return remaining tail or NULL if deallocated */\n  }\n  /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */\n  LWIP_ASSERT(\"p->tot_len == p->len\", p->tot_len == p->len);\n  return ((tail_gone > 0) ? NULL : q);\n}\n\n/**\n *\n * Create PBUF_RAM copies of pbufs.\n *\n * Used to queue packets on behalf of the lwIP stack, such as\n * ARP based queueing.\n *\n * @note You MUST explicitly use p = pbuf_take(p);\n *\n * @note Only one packet is copied, no packet queue!\n *\n * @param p_to pbuf destination of the copy\n * @param p_from pbuf source of the copy\n *\n * @return ERR_OK if pbuf was copied\n *         ERR_ARG if one of the pbufs is NULL or p_to is not big\n *                 enough to hold p_from\n */\nerr_t\npbuf_copy(struct pbuf *p_to, struct pbuf *p_from)\n{\n  u16_t offset_to=0, offset_from=0, len;\n\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_copy(%p, %p)\\n\",\n    (void*)p_to, (void*)p_from));\n\n  /* is the target big enough to hold the source? */\n  LWIP_ERROR(\"pbuf_copy: target not big enough to hold source\", ((p_to != NULL) &&\n             (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;);\n\n  /* iterate through pbuf chain */\n  do\n  {\n    /* copy one part of the original chain */\n    if ((p_to->len - offset_to) >= (p_from->len - offset_from)) {\n      /* complete current p_from fits into current p_to */\n      len = p_from->len - offset_from;\n    } else {\n      /* current p_from does not fit into current p_to */\n      len = p_to->len - offset_to;\n    }\n    MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len);\n    offset_to += len;\n    offset_from += len;\n    LWIP_ASSERT(\"offset_to <= p_to->len\", offset_to <= p_to->len);\n    LWIP_ASSERT(\"offset_from <= p_from->len\", offset_from <= p_from->len);\n    if (offset_from >= p_from->len) {\n      /* on to next p_from (if any) */\n      offset_from = 0;\n      p_from = p_from->next;\n    }\n    if (offset_to == p_to->len) {\n      /* on to next p_to (if any) */\n      offset_to = 0;\n      p_to = p_to->next;\n      LWIP_ERROR(\"p_to != NULL\", (p_to != NULL) || (p_from == NULL) , return ERR_ARG;);\n    }\n\n    if((p_from != NULL) && (p_from->len == p_from->tot_len)) {\n      /* don't copy more than one packet! */\n      LWIP_ERROR(\"pbuf_copy() does not allow packet queues!\\n\",\n                 (p_from->next == NULL), return ERR_VAL;);\n    }\n    if((p_to != NULL) && (p_to->len == p_to->tot_len)) {\n      /* don't copy more than one packet! */\n      LWIP_ERROR(\"pbuf_copy() does not allow packet queues!\\n\",\n                  (p_to->next == NULL), return ERR_VAL;);\n    }\n  } while (p_from);\n  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, (\"pbuf_copy: end of chain reached.\\n\"));\n  return ERR_OK;\n}\n\n/**\n * Copy (part of) the contents of a packet buffer\n * to an application supplied buffer.\n *\n * @param buf the pbuf from which to copy data\n * @param dataptr the application supplied buffer\n * @param len length of data to copy (dataptr must be big enough). No more \n * than buf->tot_len will be copied, irrespective of len\n * @param offset offset into the packet buffer from where to begin copying len bytes\n * @return the number of bytes copied, or 0 on failure\n */\nu16_t\npbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset)\n{\n  struct pbuf *p;\n  u16_t left;\n  u16_t buf_copy_len;\n  u16_t copied_total = 0;\n\n  LWIP_ERROR(\"pbuf_copy_partial: invalid buf\", (buf != NULL), return 0;);\n  LWIP_ERROR(\"pbuf_copy_partial: invalid dataptr\", (dataptr != NULL), return 0;);\n\n  left = 0;\n\n  if((buf == NULL) || (dataptr == NULL)) {\n    return 0;\n  }\n\n  /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */\n  for(p = buf; len != 0 && p != NULL; p = p->next) {\n    if ((offset != 0) && (offset >= p->len)) {\n      /* don't copy from this buffer -> on to the next */\n      offset -= p->len;\n    } else {\n      /* copy from this buffer. maybe only partially. */\n      buf_copy_len = p->len - offset;\n      if (buf_copy_len > len)\n          buf_copy_len = len;\n      /* copy the necessary parts of the buffer */\n      MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len);\n      copied_total += buf_copy_len;\n      left += buf_copy_len;\n      len -= buf_copy_len;\n      offset = 0;\n    }\n  }\n  return copied_total;\n}\n\n/**\n * Copy application supplied data into a pbuf.\n * This function can only be used to copy the equivalent of buf->tot_len data.\n *\n * @param buf pbuf to fill with data\n * @param dataptr application supplied data buffer\n * @param len length of the application supplied data buffer\n *\n * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough\n */\nerr_t\npbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)\n{\n  struct pbuf *p;\n  u16_t buf_copy_len;\n  u16_t total_copy_len = len;\n  u16_t copied_total = 0;\n\n  LWIP_ERROR(\"pbuf_take: invalid buf\", (buf != NULL), return 0;);\n  LWIP_ERROR(\"pbuf_take: invalid dataptr\", (dataptr != NULL), return 0;);\n\n  if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) {\n    return ERR_ARG;\n  }\n\n  /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */\n  for(p = buf; total_copy_len != 0; p = p->next) {\n    LWIP_ASSERT(\"pbuf_take: invalid pbuf\", p != NULL);\n    buf_copy_len = total_copy_len;\n    if (buf_copy_len > p->len) {\n      /* this pbuf cannot hold all remaining data */\n      buf_copy_len = p->len;\n    }\n    /* copy the necessary parts of the buffer */\n    MEMCPY(p->payload, &((char*)dataptr)[copied_total], buf_copy_len);\n    total_copy_len -= buf_copy_len;\n    copied_total += buf_copy_len;\n  }\n  LWIP_ASSERT(\"did not copy all data\", total_copy_len == 0 && copied_total == len);\n  return ERR_OK;\n}\n\n/**\n * Creates a single pbuf out of a queue of pbufs.\n *\n * @remark: Either the source pbuf 'p' is freed by this function or the original\n *          pbuf 'p' is returned, therefore the caller has to check the result!\n *\n * @param p the source pbuf\n * @param layer pbuf_layer of the new pbuf\n *\n * @return a new, single pbuf (p->next is NULL)\n *         or the old pbuf if allocation fails\n */\nstruct pbuf*\npbuf_coalesce(struct pbuf *p, pbuf_layer layer)\n{\n  struct pbuf *q;\n  err_t err;\n  if (p->next == NULL) {\n    return p;\n  }\n  q = pbuf_alloc(layer, p->tot_len, PBUF_RAM);\n  if (q == NULL) {\n    /* @todo: what do we do now? */\n    return p;\n  }\n  err = pbuf_copy(q, p);\n  LWIP_ASSERT(\"pbuf_copy failed\", err == ERR_OK);\n  pbuf_free(p);\n  return q;\n}\n\n#if LWIP_CHECKSUM_ON_COPY\n/**\n * Copies data into a single pbuf (*not* into a pbuf queue!) and updates\n * the checksum while copying\n *\n * @param p the pbuf to copy data into\n * @param start_offset offset of p->payload where to copy the data to\n * @param dataptr data to copy into the pbuf\n * @param len length of data to copy into the pbuf\n * @param chksum pointer to the checksum which is updated\n * @return ERR_OK if successful, another error if the data does not fit\n *         within the (first) pbuf (no pbuf queues!)\n */\nerr_t\npbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr,\n                 u16_t len, u16_t *chksum)\n{\n  u32_t acc;\n  u16_t copy_chksum;\n  char *dst_ptr;\n  LWIP_ASSERT(\"p != NULL\", p != NULL);\n  LWIP_ASSERT(\"dataptr != NULL\", dataptr != NULL);\n  LWIP_ASSERT(\"chksum != NULL\", chksum != NULL);\n  LWIP_ASSERT(\"len != 0\", len != 0);\n\n  if ((start_offset >= p->len) || (start_offset + len > p->len)) {\n    return ERR_ARG;\n  }\n\n  dst_ptr = ((char*)p->payload) + start_offset;\n  copy_chksum = LWIP_CHKSUM_COPY(dst_ptr, dataptr, len);\n  if ((start_offset & 1) != 0) {\n    copy_chksum = SWAP_BYTES_IN_WORD(copy_chksum);\n  }\n  acc = *chksum;\n  acc += copy_chksum;\n  *chksum = FOLD_U32T(acc);\n  return ERR_OK;\n}\n#endif /* LWIP_CHECKSUM_ON_COPY */\n\n /** Get one byte from the specified position in a pbuf\n * WARNING: returns zero for offset >= p->tot_len\n *\n * @param p pbuf to parse\n * @param offset offset into p of the byte to return\n * @return byte at an offset into p OR ZERO IF 'offset' >= p->tot_len\n */\nu8_t\npbuf_get_at(struct pbuf* p, u16_t offset)\n{\n  u16_t copy_from = offset;\n  struct pbuf* q = p;\n\n  /* get the correct pbuf */\n  while ((q != NULL) && (q->len <= copy_from)) {\n    copy_from -= q->len;\n    q = q->next;\n  }\n  /* return requested data if pbuf is OK */\n  if ((q != NULL) && (q->len > copy_from)) {\n    return ((u8_t*)q->payload)[copy_from];\n  }\n  return 0;\n}\n\n/** Compare pbuf contents at specified offset with memory s2, both of length n\n *\n * @param p pbuf to compare\n * @param offset offset into p at wich to start comparing\n * @param s2 buffer to compare\n * @param n length of buffer to compare\n * @return zero if equal, nonzero otherwise\n *         (0xffff if p is too short, diffoffset+1 otherwise)\n */\nu16_t\npbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n)\n{\n  u16_t start = offset;\n  struct pbuf* q = p;\n\n  /* get the correct pbuf */\n  while ((q != NULL) && (q->len <= start)) {\n    start -= q->len;\n    q = q->next;\n  }\n  /* return requested data if pbuf is OK */\n  if ((q != NULL) && (q->len > start)) {\n    u16_t i;\n    for(i = 0; i < n; i++) {\n      u8_t a = pbuf_get_at(q, start + i);\n      u8_t b = ((u8_t*)s2)[i];\n      if (a != b) {\n        return i+1;\n      }\n    }\n    return 0;\n  }\n  return 0xffff;\n}\n\n/** Find occurrence of mem (with length mem_len) in pbuf p, starting at offset\n * start_offset.\n *\n * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as\n *        return value 'not found'\n * @param mem search for the contents of this buffer\n * @param mem_len length of 'mem'\n * @param start_offset offset into p at which to start searching\n * @return 0xFFFF if substr was not found in p or the index where it was found\n */\nu16_t\npbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset)\n{\n  u16_t i;\n  u16_t max = p->tot_len - mem_len;\n  if (p->tot_len >= mem_len + start_offset) {\n    for(i = start_offset; i <= max; ) {\n      u16_t plus = pbuf_memcmp(p, i, mem, mem_len);\n      if (plus == 0) {\n        return i;\n      } else {\n        i += plus;\n      }\n    }\n  }\n  return 0xFFFF;\n}\n\n/** Find occurrence of substr with length substr_len in pbuf p, start at offset\n * start_offset\n * WARNING: in contrast to strstr(), this one does not stop at the first \\0 in\n * the pbuf/source string!\n *\n * @param p pbuf to search, maximum length is 0xFFFE since 0xFFFF is used as\n *        return value 'not found'\n * @param substr string to search for in p, maximum length is 0xFFFE\n * @return 0xFFFF if substr was not found in p or the index where it was found\n */\nu16_t\npbuf_strstr(struct pbuf* p, const char* substr)\n{\n  size_t substr_len;\n  if ((substr == NULL) || (substr[0] == 0) || (p->tot_len == 0xFFFF)) {\n    return 0xFFFF;\n  }\n  substr_len = strlen(substr);\n  if (substr_len >= 0xFFFF) {\n    return 0xFFFF;\n  }\n  return pbuf_memfind(p, substr, (u16_t)substr_len, 0);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/stats.c",
    "content": "/**\n * @file\n * Statistics module\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/def.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/mem.h\"\n\n#include <string.h>\n\nstruct stats_ lwip_stats;\n\nvoid stats_init(void)\n{\n#ifdef LWIP_DEBUG\n#if MEMP_STATS\n  const char * memp_names[] = {\n#define LWIP_MEMPOOL(name,num,size,desc) desc,\n#include \"lwip/memp_std.h\"\n  };\n  int i;\n  for (i = 0; i < MEMP_MAX; i++) {\n    lwip_stats.memp[i].name = memp_names[i];\n  }\n#endif /* MEMP_STATS */\n#if MEM_STATS\n  lwip_stats.mem.name = \"MEM\";\n#endif /* MEM_STATS */\n#endif /* LWIP_DEBUG */\n}\n\n#if LWIP_STATS_DISPLAY\nvoid\nstats_display_proto(struct stats_proto *proto, const char *name)\n{\n  LWIP_PLATFORM_DIAG((\"\\n%s\\n\\t\", name));\n  LWIP_PLATFORM_DIAG((\"xmit: %\"STAT_COUNTER_F\"\\n\\t\", proto->xmit)); \n  LWIP_PLATFORM_DIAG((\"recv: %\"STAT_COUNTER_F\"\\n\\t\", proto->recv)); \n  LWIP_PLATFORM_DIAG((\"fw: %\"STAT_COUNTER_F\"\\n\\t\", proto->fw)); \n  LWIP_PLATFORM_DIAG((\"drop: %\"STAT_COUNTER_F\"\\n\\t\", proto->drop)); \n  LWIP_PLATFORM_DIAG((\"chkerr: %\"STAT_COUNTER_F\"\\n\\t\", proto->chkerr)); \n  LWIP_PLATFORM_DIAG((\"lenerr: %\"STAT_COUNTER_F\"\\n\\t\", proto->lenerr)); \n  LWIP_PLATFORM_DIAG((\"memerr: %\"STAT_COUNTER_F\"\\n\\t\", proto->memerr)); \n  LWIP_PLATFORM_DIAG((\"rterr: %\"STAT_COUNTER_F\"\\n\\t\", proto->rterr)); \n  LWIP_PLATFORM_DIAG((\"proterr: %\"STAT_COUNTER_F\"\\n\\t\", proto->proterr)); \n  LWIP_PLATFORM_DIAG((\"opterr: %\"STAT_COUNTER_F\"\\n\\t\", proto->opterr)); \n  LWIP_PLATFORM_DIAG((\"err: %\"STAT_COUNTER_F\"\\n\\t\", proto->err)); \n  LWIP_PLATFORM_DIAG((\"cachehit: %\"STAT_COUNTER_F\"\\n\", proto->cachehit)); \n}\n\n#if IGMP_STATS\nvoid\nstats_display_igmp(struct stats_igmp *igmp, const char *name)\n{\n  LWIP_PLATFORM_DIAG((\"\\n%s\\n\\t\", name));\n  LWIP_PLATFORM_DIAG((\"xmit: %\"STAT_COUNTER_F\"\\n\\t\", igmp->xmit)); \n  LWIP_PLATFORM_DIAG((\"recv: %\"STAT_COUNTER_F\"\\n\\t\", igmp->recv)); \n  LWIP_PLATFORM_DIAG((\"drop: %\"STAT_COUNTER_F\"\\n\\t\", igmp->drop)); \n  LWIP_PLATFORM_DIAG((\"chkerr: %\"STAT_COUNTER_F\"\\n\\t\", igmp->chkerr)); \n  LWIP_PLATFORM_DIAG((\"lenerr: %\"STAT_COUNTER_F\"\\n\\t\", igmp->lenerr)); \n  LWIP_PLATFORM_DIAG((\"memerr: %\"STAT_COUNTER_F\"\\n\\t\", igmp->memerr)); \n  LWIP_PLATFORM_DIAG((\"proterr: %\"STAT_COUNTER_F\"\\n\\t\", igmp->proterr)); \n  LWIP_PLATFORM_DIAG((\"rx_v1: %\"STAT_COUNTER_F\"\\n\\t\", igmp->rx_v1)); \n  LWIP_PLATFORM_DIAG((\"rx_group: %\"STAT_COUNTER_F\"\\n\\t\", igmp->rx_group));\n  LWIP_PLATFORM_DIAG((\"rx_general: %\"STAT_COUNTER_F\"\\n\\t\", igmp->rx_general));\n  LWIP_PLATFORM_DIAG((\"rx_report: %\"STAT_COUNTER_F\"\\n\\t\", igmp->rx_report)); \n  LWIP_PLATFORM_DIAG((\"tx_join: %\"STAT_COUNTER_F\"\\n\\t\", igmp->tx_join)); \n  LWIP_PLATFORM_DIAG((\"tx_leave: %\"STAT_COUNTER_F\"\\n\\t\", igmp->tx_leave)); \n  LWIP_PLATFORM_DIAG((\"tx_report: %\"STAT_COUNTER_F\"\\n\\t\", igmp->tx_report)); \n}\n#endif /* IGMP_STATS */\n\n#if MEM_STATS || MEMP_STATS\nvoid\nstats_display_mem(struct stats_mem *mem, const char *name)\n{\n  LWIP_PLATFORM_DIAG((\"\\nMEM %s\\n\\t\", name));\n  LWIP_PLATFORM_DIAG((\"avail: %\"U32_F\"\\n\\t\", (u32_t)mem->avail)); \n  LWIP_PLATFORM_DIAG((\"used: %\"U32_F\"\\n\\t\", (u32_t)mem->used)); \n  LWIP_PLATFORM_DIAG((\"max: %\"U32_F\"\\n\\t\", (u32_t)mem->max)); \n  LWIP_PLATFORM_DIAG((\"err: %\"U32_F\"\\n\", (u32_t)mem->err));\n}\n\n#if MEMP_STATS\nvoid\nstats_display_memp(struct stats_mem *mem, int index)\n{\n  char * memp_names[] = {\n#define LWIP_MEMPOOL(name,num,size,desc) desc,\n#include \"lwip/memp_std.h\"\n  };\n  if(index < MEMP_MAX) {\n    stats_display_mem(mem, memp_names[index]);\n  }\n}\n#endif /* MEMP_STATS */\n#endif /* MEM_STATS || MEMP_STATS */\n\n#if SYS_STATS\nvoid\nstats_display_sys(struct stats_sys *sys)\n{\n  LWIP_PLATFORM_DIAG((\"\\nSYS\\n\\t\"));\n  LWIP_PLATFORM_DIAG((\"sem.used:  %\"U32_F\"\\n\\t\", (u32_t)sys->sem.used)); \n  LWIP_PLATFORM_DIAG((\"sem.max:   %\"U32_F\"\\n\\t\", (u32_t)sys->sem.max)); \n  LWIP_PLATFORM_DIAG((\"sem.err:   %\"U32_F\"\\n\\t\", (u32_t)sys->sem.err)); \n  LWIP_PLATFORM_DIAG((\"mutex.used: %\"U32_F\"\\n\\t\", (u32_t)sys->mutex.used)); \n  LWIP_PLATFORM_DIAG((\"mutex.max:  %\"U32_F\"\\n\\t\", (u32_t)sys->mutex.max)); \n  LWIP_PLATFORM_DIAG((\"mutex.err:  %\"U32_F\"\\n\\t\", (u32_t)sys->mutex.err)); \n  LWIP_PLATFORM_DIAG((\"mbox.used:  %\"U32_F\"\\n\\t\", (u32_t)sys->mbox.used)); \n  LWIP_PLATFORM_DIAG((\"mbox.max:   %\"U32_F\"\\n\\t\", (u32_t)sys->mbox.max)); \n  LWIP_PLATFORM_DIAG((\"mbox.err:   %\"U32_F\"\\n\\t\", (u32_t)sys->mbox.err)); \n}\n#endif /* SYS_STATS */\n\nvoid\nstats_display(void)\n{\n  s16_t i;\n\n  LINK_STATS_DISPLAY();\n  ETHARP_STATS_DISPLAY();\n  IPFRAG_STATS_DISPLAY();\n  IP6_FRAG_STATS_DISPLAY();\n  IP_STATS_DISPLAY();\n  ND6_STATS_DISPLAY();\n  IP6_STATS_DISPLAY();\n  IGMP_STATS_DISPLAY();\n  MLD6_STATS_DISPLAY();\n  ICMP_STATS_DISPLAY();\n  ICMP6_STATS_DISPLAY();\n  UDP_STATS_DISPLAY();\n  TCP_STATS_DISPLAY();\n  MEM_STATS_DISPLAY();\n  for (i = 0; i < MEMP_MAX; i++) {\n    MEMP_STATS_DISPLAY(i);\n  }\n  SYS_STATS_DISPLAY();\n}\n#endif /* LWIP_STATS_DISPLAY */\n\n#endif /* LWIP_STATS */\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/tcp.c",
    "content": "/**\n * @file\n * Transmission Control Protocol for IP\n *\n * This file contains common functions for the TCP implementation, such as functinos\n * for manipulating the data structures and the TCP timer functions. TCP functions\n * related to input and output is found in tcp_in.c and tcp_out.c respectively.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/tcp.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/debug.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/nd6.h\"\n\n#include <string.h>\n\n#ifndef TCP_LOCAL_PORT_RANGE_START\n/* From http://www.iana.org/assignments/port-numbers:\n   \"The Dynamic and/or Private Ports are those from 49152 through 65535\" */\n#define TCP_LOCAL_PORT_RANGE_START        0xc000\n#define TCP_LOCAL_PORT_RANGE_END          0xffff\n#define TCP_ENSURE_LOCAL_PORT_RANGE(port) (((port) & ~TCP_LOCAL_PORT_RANGE_START) + TCP_LOCAL_PORT_RANGE_START)\n#endif\n\n#if LWIP_TCP_KEEPALIVE\n#define TCP_KEEP_DUR(pcb)   ((pcb)->keep_cnt * (pcb)->keep_intvl)\n#define TCP_KEEP_INTVL(pcb) ((pcb)->keep_intvl)\n#else /* LWIP_TCP_KEEPALIVE */\n#define TCP_KEEP_DUR(pcb)   TCP_MAXIDLE\n#define TCP_KEEP_INTVL(pcb) TCP_KEEPINTVL_DEFAULT\n#endif /* LWIP_TCP_KEEPALIVE */\n\nconst char * const tcp_state_str[] = {\n  \"CLOSED\",      \n  \"LISTEN\",      \n  \"SYN_SENT\",    \n  \"SYN_RCVD\",    \n  \"ESTABLISHED\", \n  \"FIN_WAIT_1\",  \n  \"FIN_WAIT_2\",  \n  \"CLOSE_WAIT\",  \n  \"CLOSING\",     \n  \"LAST_ACK\",    \n  \"TIME_WAIT\"   \n};\n\n/* last local TCP port */\nstatic u16_t tcp_port = TCP_LOCAL_PORT_RANGE_START;\n\n/* Incremented every coarse grained timer shot (typically every 500 ms). */\nu32_t tcp_ticks;\nconst u8_t tcp_backoff[13] =\n    { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7};\n /* Times per slowtmr hits */\nconst u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 };\n\n/* The TCP PCB lists. */\n\n/** List of all TCP PCBs bound but not yet (connected || listening) */\nstruct tcp_pcb *tcp_bound_pcbs;\n/** List of all TCP PCBs in LISTEN state */\nunion tcp_listen_pcbs_t tcp_listen_pcbs;\n/** List of all TCP PCBs that are in a state in which\n * they accept or send data. */\nstruct tcp_pcb *tcp_active_pcbs;\n/** List of all TCP PCBs in TIME-WAIT state */\nstruct tcp_pcb *tcp_tw_pcbs;\n\n#define NUM_TCP_PCB_LISTS               4\n#define NUM_TCP_PCB_LISTS_NO_TIME_WAIT  3\n/** An array with all (non-temporary) PCB lists, mainly used for smaller code size */\nstruct tcp_pcb ** const tcp_pcb_lists[] = {&tcp_listen_pcbs.pcbs, &tcp_bound_pcbs,\n  &tcp_active_pcbs, &tcp_tw_pcbs};\n\n/** Only used for temporary storage. */\nstruct tcp_pcb *tcp_tmp_pcb;\n\nu8_t tcp_active_pcbs_changed;\n\n/** Timer counter to handle calling slow-timer from tcp_tmr() */ \nstatic u8_t tcp_timer;\nstatic u8_t tcp_timer_ctr;\nstatic u16_t tcp_new_port(void);\n\n/**\n * Initialize this module.\n */\nvoid\ntcp_init(void)\n{\n#if LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND)\n  tcp_port = TCP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND());\n#endif /* LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) */\n}\n\n/**\n * Called periodically to dispatch TCP timers.\n */\nvoid\ntcp_tmr(void)\n{\n  /* Call tcp_fasttmr() every 250 ms */\n  tcp_fasttmr();\n\n  if (++tcp_timer & 1) {\n    /* Call tcp_tmr() every 500 ms, i.e., every other timer\n       tcp_tmr() is called. */\n    tcp_slowtmr();\n  }\n}\n\n/**\n * Closes the TX side of a connection held by the PCB.\n * For tcp_close(), a RST is sent if the application didn't receive all data\n * (tcp_recved() not called for all data passed to recv callback).\n *\n * Listening pcbs are freed and may not be referenced any more.\n * Connection pcbs are freed if not yet connected and may not be referenced\n * any more. If a connection is established (at least SYN received or in\n * a closing state), the connection is closed, and put in a closing state.\n * The pcb is then automatically freed in tcp_slowtmr(). It is therefore\n * unsafe to reference it.\n *\n * @param pcb the tcp_pcb to close\n * @return ERR_OK if connection has been closed\n *         another err_t if closing failed and pcb is not freed\n */\nstatic err_t\ntcp_close_shutdown(struct tcp_pcb *pcb, u8_t rst_on_unacked_data)\n{\n  err_t err;\n\n  if (rst_on_unacked_data && ((pcb->state == ESTABLISHED) || (pcb->state == CLOSE_WAIT))) {\n    if ((pcb->refused_data != NULL) || (pcb->rcv_wnd != TCP_WND)) {\n      /* Not all data received by application, send RST to tell the remote\n         side about this. */\n      LWIP_ASSERT(\"pcb->flags & TF_RXCLOSED\", pcb->flags & TF_RXCLOSED);\n\n      /* don't call tcp_abort here: we must not deallocate the pcb since\n         that might not be expected when calling tcp_close */\n      tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,\n               pcb->local_port, pcb->remote_port, PCB_ISIPV6(pcb));\n\n      tcp_pcb_purge(pcb);\n      TCP_RMV_ACTIVE(pcb);\n      if (pcb->state == ESTABLISHED) {\n        /* move to TIME_WAIT since we close actively */\n        pcb->state = TIME_WAIT;\n        TCP_REG(&tcp_tw_pcbs, pcb);\n      } else {\n        /* CLOSE_WAIT: deallocate the pcb since we already sent a RST for it */\n        memp_free(MEMP_TCP_PCB, pcb);\n      }\n      return ERR_OK;\n    }\n  }\n\n  switch (pcb->state) {\n  case CLOSED:\n    /* Closing a pcb in the CLOSED state might seem erroneous,\n     * however, it is in this state once allocated and as yet unused\n     * and the user needs some way to free it should the need arise.\n     * Calling tcp_close() with a pcb that has already been closed, (i.e. twice)\n     * or for a pcb that has been used and then entered the CLOSED state \n     * is erroneous, but this should never happen as the pcb has in those cases\n     * been freed, and so any remaining handles are bogus. */\n    err = ERR_OK;\n    if (pcb->local_port != 0 || pcb->bound_to_netif) {\n      TCP_RMV(&tcp_bound_pcbs, pcb);\n    }\n    memp_free(MEMP_TCP_PCB, pcb);\n    pcb = NULL;\n    break;\n  case LISTEN:\n    err = ERR_OK;\n    tcp_pcb_remove(&tcp_listen_pcbs.pcbs, pcb);\n    memp_free(MEMP_TCP_PCB_LISTEN, pcb);\n    pcb = NULL;\n    break;\n  case SYN_SENT:\n    err = ERR_OK;\n    TCP_PCB_REMOVE_ACTIVE(pcb);\n    memp_free(MEMP_TCP_PCB, pcb);\n    pcb = NULL;\n    snmp_inc_tcpattemptfails();\n    break;\n  case SYN_RCVD:\n    err = tcp_send_fin(pcb);\n    if (err == ERR_OK) {\n      snmp_inc_tcpattemptfails();\n      pcb->state = FIN_WAIT_1;\n    }\n    break;\n  case ESTABLISHED:\n    err = tcp_send_fin(pcb);\n    if (err == ERR_OK) {\n      snmp_inc_tcpestabresets();\n      pcb->state = FIN_WAIT_1;\n    }\n    break;\n  case CLOSE_WAIT:\n    err = tcp_send_fin(pcb);\n    if (err == ERR_OK) {\n      snmp_inc_tcpestabresets();\n      pcb->state = LAST_ACK;\n    }\n    break;\n  default:\n    /* Has already been closed, do nothing. */\n    err = ERR_OK;\n    pcb = NULL;\n    break;\n  }\n\n  if (pcb != NULL && err == ERR_OK) {\n    /* To ensure all data has been sent when tcp_close returns, we have\n       to make sure tcp_output doesn't fail.\n       Since we don't really have to ensure all data has been sent when tcp_close\n       returns (unsent data is sent from tcp timer functions, also), we don't care\n       for the return value of tcp_output for now. */\n    /* @todo: When implementing SO_LINGER, this must be changed somehow:\n       If SOF_LINGER is set, the data should be sent and acked before close returns.\n       This can only be valid for sequential APIs, not for the raw API. */\n    tcp_output(pcb);\n  }\n  return err;\n}\n\n/**\n * Closes the connection held by the PCB.\n *\n * Listening pcbs are freed and may not be referenced any more.\n * Connection pcbs are freed if not yet connected and may not be referenced\n * any more. If a connection is established (at least SYN received or in\n * a closing state), the connection is closed, and put in a closing state.\n * The pcb is then automatically freed in tcp_slowtmr(). It is therefore\n * unsafe to reference it (unless an error is returned).\n *\n * @param pcb the tcp_pcb to close\n * @return ERR_OK if connection has been closed\n *         another err_t if closing failed and pcb is not freed\n */\nerr_t\ntcp_close(struct tcp_pcb *pcb)\n{\n#if TCP_DEBUG\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_close: closing in \"));\n  tcp_debug_print_state(pcb->state);\n#endif /* TCP_DEBUG */\n\n  if (pcb->state != LISTEN) {\n    /* Set a flag not to receive any more data... */\n    pcb->flags |= TF_RXCLOSED;\n  }\n  /* ... and close */\n  return tcp_close_shutdown(pcb, 1);\n}\n\n/**\n * Causes all or part of a full-duplex connection of this PCB to be shut down.\n * This doesn't deallocate the PCB unless shutting down both sides!\n * Shutting down both sides is the same as calling tcp_close, so if it succeds,\n * the PCB should not be referenced any more.\n *\n * @param pcb PCB to shutdown\n * @param shut_rx shut down receive side if this is != 0\n * @param shut_tx shut down send side if this is != 0\n * @return ERR_OK if shutdown succeeded (or the PCB has already been shut down)\n *         another err_t on error.\n */\nerr_t\ntcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx)\n{\n  if (pcb->state == LISTEN) {\n    return ERR_CONN;\n  }\n  if (shut_rx) {\n    /* shut down the receive side: set a flag not to receive any more data... */\n    pcb->flags |= TF_RXCLOSED;\n    if (shut_tx) {\n      /* shutting down the tx AND rx side is the same as closing for the raw API */\n      return tcp_close_shutdown(pcb, 1);\n    }\n    /* ... and free buffered data */\n    if (pcb->refused_data != NULL) {\n      pbuf_free(pcb->refused_data);\n      pcb->refused_data = NULL;\n    }\n  }\n  if (shut_tx) {\n    /* This can't happen twice since if it succeeds, the pcb's state is changed.\n       Only close in these states as the others directly deallocate the PCB */\n    switch (pcb->state) {\n    case SYN_RCVD:\n    case ESTABLISHED:\n    case CLOSE_WAIT:\n      return tcp_close_shutdown(pcb, shut_rx);\n    default:\n      /* Not (yet?) connected, cannot shutdown the TX side as that would bring us\n        into CLOSED state, where the PCB is deallocated. */\n      return ERR_CONN;\n    }\n  }\n  return ERR_OK;\n}\n\n/**\n * Abandons a connection and optionally sends a RST to the remote\n * host.  Deletes the local protocol control block. This is done when\n * a connection is killed because of shortage of memory.\n *\n * @param pcb the tcp_pcb to abort\n * @param reset boolean to indicate whether a reset should be sent\n */\nvoid\ntcp_abandon(struct tcp_pcb *pcb, int reset)\n{\n  u32_t seqno, ackno;\n#if LWIP_CALLBACK_API  \n  tcp_err_fn errf;\n#endif /* LWIP_CALLBACK_API */\n  void *errf_arg;\n\n  /* pcb->state LISTEN not allowed here */\n  LWIP_ASSERT(\"don't call tcp_abort/tcp_abandon for listen-pcbs\",\n    pcb->state != LISTEN);\n  /* Figure out on which TCP PCB list we are, and remove us. If we\n     are in an active state, call the receive function associated with\n     the PCB with a NULL argument, and send an RST to the remote end. */\n  if (pcb->state == TIME_WAIT) {\n    tcp_pcb_remove(&tcp_tw_pcbs, pcb);\n    memp_free(MEMP_TCP_PCB, pcb);\n  } else {\n    int send_rst = reset && (pcb->state != CLOSED);\n    seqno = pcb->snd_nxt;\n    ackno = pcb->rcv_nxt;\n#if LWIP_CALLBACK_API\n    errf = pcb->errf;\n#endif /* LWIP_CALLBACK_API */\n    errf_arg = pcb->callback_arg;\n    TCP_PCB_REMOVE_ACTIVE(pcb);\n    if (pcb->unacked != NULL) {\n      tcp_segs_free(pcb->unacked);\n    }\n    if (pcb->unsent != NULL) {\n      tcp_segs_free(pcb->unsent);\n    }\n#if TCP_QUEUE_OOSEQ    \n    if (pcb->ooseq != NULL) {\n      tcp_segs_free(pcb->ooseq);\n    }\n#endif /* TCP_QUEUE_OOSEQ */\n    if (send_rst) {\n      LWIP_DEBUGF(TCP_RST_DEBUG, (\"tcp_abandon: sending RST\\n\"));\n      tcp_rst(seqno, ackno, &pcb->local_ip, &pcb->remote_ip, pcb->local_port, pcb->remote_port, PCB_ISIPV6(pcb));\n    }\n    memp_free(MEMP_TCP_PCB, pcb);\n    TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT);\n  }\n}\n\n/**\n * Aborts the connection by sending a RST (reset) segment to the remote\n * host. The pcb is deallocated. This function never fails.\n *\n * ATTENTION: When calling this from one of the TCP callbacks, make\n * sure you always return ERR_ABRT (and never return ERR_ABRT otherwise\n * or you will risk accessing deallocated memory or memory leaks!\n *\n * @param pcb the tcp pcb to abort\n */\nvoid\ntcp_abort(struct tcp_pcb *pcb)\n{\n  tcp_abandon(pcb, 1);\n}\n\n/**\n * Binds the connection to a local portnumber and IP address. If the\n * IP address is not given (i.e., ipaddr == NULL), the IP address of\n * the outgoing network interface is used instead.\n *\n * @param pcb the tcp_pcb to bind (no check is done whether this pcb is\n *        already bound!)\n * @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind\n *        to any local address\n * @param port the local port to bind to\n * @return ERR_USE if the port is already in use\n *         ERR_VAL if bind failed because the PCB is not in a valid state\n *         ERR_OK if bound\n */\nerr_t\ntcp_bind(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)\n{\n  int i;\n  int max_pcb_list = NUM_TCP_PCB_LISTS;\n  struct tcp_pcb *cpcb;\n\n  LWIP_ERROR(\"tcp_bind: can only bind in state CLOSED\", pcb->state == CLOSED, return ERR_VAL);\n\n#if SO_REUSE\n  /* Unless the REUSEADDR flag is set,\n     we have to check the pcbs in TIME-WAIT state, also.\n     We do not dump TIME_WAIT pcb's; they can still be matched by incoming\n     packets using both local and remote IP addresses and ports to distinguish.\n   */\n  if (ip_get_option(pcb, SOF_REUSEADDR)) {\n    max_pcb_list = NUM_TCP_PCB_LISTS_NO_TIME_WAIT;\n  }\n#endif /* SO_REUSE */\n\n  if (port == 0) {\n    port = tcp_new_port();\n    if (port == 0) {\n      return ERR_BUF;\n    }\n  }\n\n  /* Check if the address already is in use (on all lists) */\n  for (i = 0; i < max_pcb_list; i++) {\n    for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {\n      if (cpcb->local_port == port) {\n#if SO_REUSE\n        /* Omit checking for the same port if both pcbs have REUSEADDR set.\n           For SO_REUSEADDR, the duplicate-check for a 5-tuple is done in\n           tcp_connect. */\n        if (!ip_get_option(pcb, SOF_REUSEADDR) ||\n            !ip_get_option(cpcb, SOF_REUSEADDR))\n#endif /* SO_REUSE */\n        {\n          /* @todo: check accept_any_ip_version */\n          if (IP_PCB_IPVER_EQ(pcb, cpcb) &&\n              (ipX_addr_isany(PCB_ISIPV6(pcb), &cpcb->local_ip) ||\n              ipX_addr_isany(PCB_ISIPV6(pcb), ip_2_ipX(ipaddr)) ||\n              ipX_addr_cmp(PCB_ISIPV6(pcb), &cpcb->local_ip, ip_2_ipX(ipaddr)))) {\n            return ERR_USE;\n          }\n        }\n      }\n    }\n  }\n\n  pcb->bound_to_netif = 0;\n  if (!ipX_addr_isany(PCB_ISIPV6(pcb), ip_2_ipX(ipaddr))) {\n    ipX_addr_set(PCB_ISIPV6(pcb), &pcb->local_ip, ip_2_ipX(ipaddr));\n  }\n  pcb->local_port = port;\n  TCP_REG(&tcp_bound_pcbs, pcb);\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_bind: bind to port %\"U16_F\"\\n\", port));\n  return ERR_OK;\n}\n\nerr_t\ntcp_bind_to_netif(struct tcp_pcb *pcb, const char ifname[3])\n{\n  LWIP_ERROR(\"tcp_bind_if: can only bind in state CLOSED\", pcb->state == CLOSED, return ERR_ISCONN);\n  \n  /* Check if the interface is already in use */\n  for (int i = 0; i < NUM_TCP_PCB_LISTS; i++) {\n    for(struct tcp_pcb *cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {\n      if (IP_PCB_IPVER_EQ(pcb, cpcb) &&\n          cpcb->bound_to_netif &&\n          !memcmp(cpcb->local_netif, ifname, sizeof(cpcb->local_netif))) {\n        return ERR_USE;\n      }\n    }\n  }\n\n  pcb->bound_to_netif = 1;\n  ipX_addr_set_any(PCB_ISIPV6(pcb), &pcb->local_ip);\n  pcb->local_port = 0;\n  memcpy(pcb->local_netif, ifname, sizeof(pcb->local_netif));\n  TCP_REG(&tcp_bound_pcbs, pcb);\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_bind_to_netif: bind to interface %c%c%c\\n\", ifname[0], ifname[1], ifname[2]));\n  return ERR_OK;\n}\n\n#if LWIP_CALLBACK_API\n/**\n * Default accept callback if no accept callback is specified by the user.\n */\nstatic err_t\ntcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_UNUSED_ARG(pcb);\n  LWIP_UNUSED_ARG(err);\n\n  return ERR_ABRT;\n}\n#endif /* LWIP_CALLBACK_API */\n\n/**\n * Set the state of the connection to be LISTEN, which means that it\n * is able to accept incoming connections. The protocol control block\n * is reallocated in order to consume less memory. Setting the\n * connection to LISTEN is an irreversible process.\n *\n * @param pcb the original tcp_pcb\n * @param backlog the incoming connections queue limit\n * @return tcp_pcb used for listening, consumes less memory.\n *\n * @note The original tcp_pcb is freed. This function therefore has to be\n *       called like this:\n *             tpcb = tcp_listen(tpcb);\n */\nstruct tcp_pcb *\ntcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)\n{\n  struct tcp_pcb_listen *lpcb;\n\n  LWIP_UNUSED_ARG(backlog);\n  LWIP_ERROR(\"tcp_listen: pcb already connected\", pcb->state == CLOSED, return NULL);\n\n  /* already listening? */\n  if (pcb->state == LISTEN) {\n    return pcb;\n  }\n#if SO_REUSE\n  if (ip_get_option(pcb, SOF_REUSEADDR) && !pcb->have_local_netif) {\n    /* Since SOF_REUSEADDR allows reusing a local address before the pcb's usage\n       is declared (listen-/connection-pcb), we have to make sure now that\n       this port is only used once for every local IP. */\n    for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {\n      if ((lpcb->local_port == pcb->local_port) &&\n          IP_PCB_IPVER_EQ(pcb, lpcb)) {\n        if (ipX_addr_cmp(PCB_ISIPV6(pcb), &lpcb->local_ip, &pcb->local_ip)) {\n          /* this address/port is already used */\n          return NULL;\n        }\n      }\n    }\n  }\n#endif /* SO_REUSE */\n  lpcb = (struct tcp_pcb_listen *)memp_malloc(MEMP_TCP_PCB_LISTEN);\n  if (lpcb == NULL) {\n    return NULL;\n  }\n  lpcb->callback_arg = pcb->callback_arg;\n  lpcb->bound_to_netif = pcb->bound_to_netif;\n  lpcb->local_port = pcb->local_port;\n  memcpy(lpcb->local_netif, pcb->local_netif, sizeof(pcb->local_netif));\n  lpcb->state = LISTEN;\n  lpcb->prio = pcb->prio;\n  lpcb->so_options = pcb->so_options;\n  ip_set_option(lpcb, SOF_ACCEPTCONN);\n  lpcb->ttl = pcb->ttl;\n  lpcb->tos = pcb->tos;\n#if LWIP_IPV6\n  PCB_ISIPV6(lpcb) = PCB_ISIPV6(pcb);\n  lpcb->accept_any_ip_version = 0;\n#endif /* LWIP_IPV6 */\n  ipX_addr_copy(PCB_ISIPV6(pcb), lpcb->local_ip, pcb->local_ip);\n  if (pcb->local_port != 0 || pcb->bound_to_netif) {\n    TCP_RMV(&tcp_bound_pcbs, pcb);\n  }\n  memp_free(MEMP_TCP_PCB, pcb);\n#if LWIP_CALLBACK_API\n  lpcb->accept = tcp_accept_null;\n#endif /* LWIP_CALLBACK_API */\n#if TCP_LISTEN_BACKLOG\n  lpcb->accepts_pending = 0;\n  lpcb->backlog = (backlog ? backlog : 1);\n#endif /* TCP_LISTEN_BACKLOG */\n  TCP_REG(&tcp_listen_pcbs.pcbs, (struct tcp_pcb *)lpcb);\n  return (struct tcp_pcb *)lpcb;\n}\n\n#if LWIP_IPV6\n/**\n * Same as tcp_listen_with_backlog, but allows to accept IPv4 and IPv6\n * connections, if the pcb's local address is set to ANY.\n */\nstruct tcp_pcb *\ntcp_listen_dual_with_backlog(struct tcp_pcb *pcb, u8_t backlog)\n{\n  struct tcp_pcb *lpcb;\n\n  lpcb = tcp_listen_with_backlog(pcb, backlog);\n  if ((lpcb != NULL) &&\n      ipX_addr_isany(PCB_ISIPV6(pcb), &pcb->local_ip)) {\n    /* The default behavior is to accept connections on either\n     * IPv4 or IPv6, if not bound. */\n    /* @see NETCONN_FLAG_IPV6_V6ONLY for changing this behavior */\n    ((struct tcp_pcb_listen*)lpcb)->accept_any_ip_version = 1;\n  }\n  return lpcb;\n}\n#endif /* LWIP_IPV6 */\n\n/**\n * Update the state that tracks the available window space to advertise.\n *\n * Returns how much extra window would be advertised if we sent an\n * update now.\n */\nu32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb)\n{\n  u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd;\n\n  if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) {\n    /* we can advertise more window */\n    pcb->rcv_ann_wnd = pcb->rcv_wnd;\n    return new_right_edge - pcb->rcv_ann_right_edge;\n  } else {\n    if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) {\n      /* Can happen due to other end sending out of advertised window,\n       * but within actual available (but not yet advertised) window */\n      pcb->rcv_ann_wnd = 0;\n    } else {\n      /* keep the right edge of window constant */\n      u32_t new_rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt;\n      LWIP_ASSERT(\"new_rcv_ann_wnd <= 0xffff\", new_rcv_ann_wnd <= 0xffff);\n      pcb->rcv_ann_wnd = (u16_t)new_rcv_ann_wnd;\n    }\n    return 0;\n  }\n}\n\n/**\n * This function should be called by the application when it has\n * processed the data. The purpose is to advertise a larger window\n * when the data has been processed.\n *\n * @param pcb the tcp_pcb for which data is read\n * @param len the amount of bytes that have been read by the application\n */\nvoid\ntcp_recved(struct tcp_pcb *pcb, u16_t len)\n{\n  int wnd_inflation;\n\n  /* pcb->state LISTEN not allowed here */\n  LWIP_ASSERT(\"don't call tcp_recved for listen-pcbs\",\n    pcb->state != LISTEN);\n  LWIP_ASSERT(\"tcp_recved: len would wrap rcv_wnd\\n\",\n              len <= 0xffff - pcb->rcv_wnd );\n\n  pcb->rcv_wnd += len;\n  if (pcb->rcv_wnd > TCP_WND) {\n    pcb->rcv_wnd = TCP_WND;\n  }\n\n  wnd_inflation = tcp_update_rcv_ann_wnd(pcb);\n\n  /* If the change in the right edge of window is significant (default\n   * watermark is TCP_WND/4), then send an explicit update now.\n   * Otherwise wait for a packet to be sent in the normal course of\n   * events (or more window to be available later) */\n  if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD) {\n    tcp_ack_now(pcb);\n    tcp_output(pcb);\n  }\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_recved: recveived %\"U16_F\" bytes, wnd %\"U16_F\" (%\"U16_F\").\\n\",\n         len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd));\n}\n\n/**\n * Allocate a new local TCP port.\n *\n * @return a new (free) local TCP port number\n */\nstatic u16_t\ntcp_new_port(void)\n{\n  u8_t i;\n  u16_t n = 0;\n  struct tcp_pcb *pcb;\n  \nagain:\n  if (tcp_port++ == TCP_LOCAL_PORT_RANGE_END) {\n    tcp_port = TCP_LOCAL_PORT_RANGE_START;\n  }\n  /* Check all PCB lists. */\n  for (i = 0; i < NUM_TCP_PCB_LISTS; i++) {\n    for(pcb = *tcp_pcb_lists[i]; pcb != NULL; pcb = pcb->next) {\n      if (pcb->local_port == tcp_port) {\n        if (++n > (TCP_LOCAL_PORT_RANGE_END - TCP_LOCAL_PORT_RANGE_START)) {\n          return 0;\n        }\n        goto again;\n      }\n    }\n  }\n  return tcp_port;\n}\n\n/**\n * Connects to another host. The function given as the \"connected\"\n * argument will be called when the connection has been established.\n *\n * @param pcb the tcp_pcb used to establish the connection\n * @param ipaddr the remote ip address to connect to\n * @param port the remote tcp port to connect to\n * @param connected callback function to call when connected (or on error)\n * @return ERR_VAL if invalid arguments are given\n *         ERR_OK if connect request has been sent\n *         other err_t values if connect request couldn't be sent\n */\nerr_t\ntcp_connect(struct tcp_pcb *pcb, ip_addr_t *ipaddr, u16_t port,\n      tcp_connected_fn connected)\n{\n  err_t ret;\n  u32_t iss;\n  u16_t old_local_port;\n\n  LWIP_ERROR(\"tcp_connect: can only connect from state CLOSED\", pcb->state == CLOSED, return ERR_ISCONN);\n  LWIP_ERROR(\"tcp_connect: cannot connect pcb bound to netif\", !pcb->bound_to_netif, return ERR_VAL);\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_connect to port %\"U16_F\"\\n\", port));\n  if (ipaddr != NULL) {\n    ipX_addr_set(PCB_ISIPV6(pcb), &pcb->remote_ip, ip_2_ipX(ipaddr));\n  } else {\n    return ERR_VAL;\n  }\n  pcb->remote_port = port;\n\n  /* check if we have a route to the remote host */\n  if (ipX_addr_isany(PCB_ISIPV6(pcb), &pcb->local_ip)) {\n    /* no local IP address set, yet. */\n    struct netif *netif;\n    ipX_addr_t *local_ip;\n    ipX_route_get_local_ipX(PCB_ISIPV6(pcb), &pcb->local_ip, &pcb->remote_ip, netif, local_ip);\n    if ((netif == NULL) || (local_ip == NULL)) {\n      /* Don't even try to send a SYN packet if we have no route\n         since that will fail. */\n      return ERR_RTE;\n    }\n    /* Use the address as local address of the pcb. */\n    ipX_addr_copy(PCB_ISIPV6(pcb), pcb->local_ip, *local_ip);\n  }\n\n  old_local_port = pcb->local_port;\n  if (pcb->local_port == 0) {\n    pcb->local_port = tcp_new_port();\n    if (pcb->local_port == 0) {\n      return ERR_BUF;\n    }\n  }\n#if SO_REUSE\n  if (ip_get_option(pcb, SOF_REUSEADDR)) {\n    /* Since SOF_REUSEADDR allows reusing a local address, we have to make sure\n       now that the 5-tuple is unique. */\n    struct tcp_pcb *cpcb;\n    int i;\n    /* Don't check listen- and bound-PCBs, check active- and TIME-WAIT PCBs. */\n    for (i = 2; i < NUM_TCP_PCB_LISTS; i++) {\n      for(cpcb = *tcp_pcb_lists[i]; cpcb != NULL; cpcb = cpcb->next) {\n        if ((cpcb->local_port == pcb->local_port) &&\n            (cpcb->remote_port == port) &&\n            IP_PCB_IPVER_EQ(cpcb, pcb) &&\n            ipX_addr_cmp(PCB_ISIPV6(pcb), &cpcb->local_ip, &pcb->local_ip) &&\n            ipX_addr_cmp(PCB_ISIPV6(pcb), &cpcb->remote_ip, ip_2_ipX(ipaddr))) {\n          /* linux returns EISCONN here, but ERR_USE should be OK for us */\n          return ERR_USE;\n        }\n      }\n    }\n  }\n#endif /* SO_REUSE */\n  iss = tcp_next_iss();\n  pcb->rcv_nxt = 0;\n  pcb->snd_nxt = iss;\n  pcb->lastack = iss - 1;\n  pcb->snd_lbb = iss - 1;\n  pcb->rcv_wnd = TCP_WND;\n  pcb->rcv_ann_wnd = TCP_WND;\n  pcb->rcv_ann_right_edge = pcb->rcv_nxt;\n  pcb->snd_wnd = TCP_WND;\n  /* As initial send MSS, we use TCP_MSS but limit it to 536.\n     The send MSS is updated when an MSS option is received. */\n  pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;\n#if TCP_CALCULATE_EFF_SEND_MSS\n  pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip, PCB_ISIPV6(pcb));\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n  pcb->cwnd = 1;\n  pcb->ssthresh = pcb->mss * 10;\n#if LWIP_CALLBACK_API\n  pcb->connected = connected;\n#else /* LWIP_CALLBACK_API */\n  LWIP_UNUSED_ARG(connected);\n#endif /* LWIP_CALLBACK_API */\n\n  /* Send a SYN together with the MSS option. */\n  ret = tcp_enqueue_flags(pcb, TCP_SYN);\n  if (ret == ERR_OK) {\n    /* SYN segment was enqueued, changed the pcbs state now */\n    pcb->state = SYN_SENT;\n    if (old_local_port != 0) {\n      TCP_RMV(&tcp_bound_pcbs, pcb);\n    }\n    TCP_REG_ACTIVE(pcb);\n    snmp_inc_tcpactiveopens();\n\n    tcp_output(pcb);\n  }\n  return ret;\n}\n\n/**\n * Called every 500 ms and implements the retransmission timer and the timer that\n * removes PCBs that have been in TIME-WAIT for enough time. It also increments\n * various timers such as the inactivity timer in each PCB.\n *\n * Automatically called from tcp_tmr().\n */\nvoid\ntcp_slowtmr(void)\n{\n  struct tcp_pcb *pcb, *prev;\n  u16_t eff_wnd;\n  u8_t pcb_remove;      /* flag if a PCB should be removed */\n  u8_t pcb_reset;       /* flag if a RST should be sent when removing */\n  err_t err;\n\n  err = ERR_OK;\n\n  ++tcp_ticks;\n  ++tcp_timer_ctr;\n\ntcp_slowtmr_start:\n  /* Steps through all of the active PCBs. */\n  prev = NULL;\n  pcb = tcp_active_pcbs;\n  if (pcb == NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: no active pcbs\\n\"));\n  }\n  while (pcb != NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: processing active pcb\\n\"));\n    LWIP_ASSERT(\"tcp_slowtmr: active pcb->state != CLOSED\\n\", pcb->state != CLOSED);\n    LWIP_ASSERT(\"tcp_slowtmr: active pcb->state != LISTEN\\n\", pcb->state != LISTEN);\n    LWIP_ASSERT(\"tcp_slowtmr: active pcb->state != TIME-WAIT\\n\", pcb->state != TIME_WAIT);\n    if (pcb->last_timer == tcp_timer_ctr) {\n      /* skip this pcb, we have already processed it */\n      pcb = pcb->next;\n      continue;\n    }\n    pcb->last_timer = tcp_timer_ctr;\n\n    pcb_remove = 0;\n    pcb_reset = 0;\n\n    if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) {\n      ++pcb_remove;\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: max SYN retries reached\\n\"));\n    }\n    else if (pcb->nrtx == TCP_MAXRTX) {\n      ++pcb_remove;\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: max DATA retries reached\\n\"));\n    } else {\n      if (pcb->persist_backoff > 0) {\n        /* If snd_wnd is zero, use persist timer to send 1 byte probes\n         * instead of using the standard retransmission mechanism. */\n        pcb->persist_cnt++;\n        if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) {\n          pcb->persist_cnt = 0;\n          if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) {\n            pcb->persist_backoff++;\n          }\n          tcp_zero_window_probe(pcb);\n        }\n      } else {\n        /* Increase the retransmission timer if it is running */\n        if(pcb->rtime >= 0) {\n          ++pcb->rtime;\n        }\n\n        if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) {\n          /* Time for a retransmission. */\n          LWIP_DEBUGF(TCP_RTO_DEBUG, (\"tcp_slowtmr: rtime %\"S16_F\n                                      \" pcb->rto %\"S16_F\"\\n\",\n                                      pcb->rtime, pcb->rto));\n\n          /* Double retransmission time-out unless we are trying to\n           * connect to somebody (i.e., we are in SYN_SENT). */\n          if (pcb->state != SYN_SENT) {\n            pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx];\n          }\n\n          /* Reset the retransmission timer. */\n          pcb->rtime = 0;\n\n          /* Reduce congestion window and ssthresh. */\n          eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd);\n          pcb->ssthresh = eff_wnd >> 1;\n          if (pcb->ssthresh < (pcb->mss << 1)) {\n            pcb->ssthresh = (pcb->mss << 1);\n          }\n          pcb->cwnd = pcb->mss;\n          LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_slowtmr: cwnd %\"U16_F\n                                       \" ssthresh %\"U16_F\"\\n\",\n                                       pcb->cwnd, pcb->ssthresh));\n \n          /* The following needs to be called AFTER cwnd is set to one\n             mss - STJ */\n          tcp_rexmit_rto(pcb);\n        }\n      }\n    }\n    /* Check if this PCB has stayed too long in FIN-WAIT-2 */\n    if (pcb->state == FIN_WAIT_2) {\n      /* If this PCB is in FIN_WAIT_2 because of SHUT_WR don't let it time out. */\n      if (pcb->flags & TF_RXCLOSED) {\n        /* PCB was fully closed (either through close() or SHUT_RDWR):\n           normal FIN-WAIT timeout handling. */\n        if ((u32_t)(tcp_ticks - pcb->tmr) >\n            TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) {\n          ++pcb_remove;\n          LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\\n\"));\n        }\n      }\n    }\n\n    /* Check if KEEPALIVE should be sent */\n    if(ip_get_option(pcb, SOF_KEEPALIVE) &&\n       ((pcb->state == ESTABLISHED) ||\n        (pcb->state == CLOSE_WAIT))) {\n      if((u32_t)(tcp_ticks - pcb->tmr) >\n         (pcb->keep_idle + TCP_KEEP_DUR(pcb)) / TCP_SLOW_INTERVAL)\n      {\n        LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: KEEPALIVE timeout. Aborting connection to \"));\n        ipX_addr_debug_print(PCB_ISIPV6(pcb), TCP_DEBUG, &pcb->remote_ip);\n        LWIP_DEBUGF(TCP_DEBUG, (\"\\n\"));\n        \n        ++pcb_remove;\n        ++pcb_reset;\n      }\n      else if((u32_t)(tcp_ticks - pcb->tmr) > \n              (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEP_INTVL(pcb))\n              / TCP_SLOW_INTERVAL)\n      {\n        tcp_keepalive(pcb);\n        pcb->keep_cnt_sent++;\n      }\n    }\n\n    /* If this PCB has queued out of sequence data, but has been\n       inactive for too long, will drop the data (it will eventually\n       be retransmitted). */\n#if TCP_QUEUE_OOSEQ\n    if (pcb->ooseq != NULL &&\n        (u32_t)tcp_ticks - pcb->tmr >= pcb->rto * TCP_OOSEQ_TIMEOUT) {\n      tcp_segs_free(pcb->ooseq);\n      pcb->ooseq = NULL;\n      LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_slowtmr: dropping OOSEQ queued data\\n\"));\n    }\n#endif /* TCP_QUEUE_OOSEQ */\n\n    /* Check if this PCB has stayed too long in SYN-RCVD */\n    if (pcb->state == SYN_RCVD) {\n      if ((u32_t)(tcp_ticks - pcb->tmr) >\n          TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) {\n        ++pcb_remove;\n        LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: removing pcb stuck in SYN-RCVD\\n\"));\n      }\n    }\n\n    /* Check if this PCB has stayed too long in LAST-ACK */\n    if (pcb->state == LAST_ACK) {\n      if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {\n        ++pcb_remove;\n        LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: removing pcb stuck in LAST-ACK\\n\"));\n      }\n    }\n\n    /* If the PCB should be removed, do it. */\n    if (pcb_remove) {\n      struct tcp_pcb *pcb2;\n      tcp_err_fn err_fn;\n      void *err_arg;\n      tcp_pcb_purge(pcb);\n      /* Remove PCB from tcp_active_pcbs list. */\n      if (prev != NULL) {\n        LWIP_ASSERT(\"tcp_slowtmr: middle tcp != tcp_active_pcbs\", pcb != tcp_active_pcbs);\n        prev->next = pcb->next;\n      } else {\n        /* This PCB was the first. */\n        LWIP_ASSERT(\"tcp_slowtmr: first pcb == tcp_active_pcbs\", tcp_active_pcbs == pcb);\n        tcp_active_pcbs = pcb->next;\n      }\n\n      if (pcb_reset) {\n        tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip,\n                 pcb->local_port, pcb->remote_port, PCB_ISIPV6(pcb));\n      }\n\n      err_fn = pcb->errf;\n      err_arg = pcb->callback_arg;\n      pcb2 = pcb;\n      pcb = pcb->next;\n      memp_free(MEMP_TCP_PCB, pcb2);\n\n      tcp_active_pcbs_changed = 0;\n      TCP_EVENT_ERR(err_fn, err_arg, ERR_ABRT);\n      if (tcp_active_pcbs_changed) {\n        goto tcp_slowtmr_start;\n      }\n    } else {\n      /* get the 'next' element now and work with 'prev' below (in case of abort) */\n      prev = pcb;\n      pcb = pcb->next;\n\n      /* We check if we should poll the connection. */\n      ++prev->polltmr;\n      if (prev->polltmr >= prev->pollinterval) {\n        prev->polltmr = 0;\n        LWIP_DEBUGF(TCP_DEBUG, (\"tcp_slowtmr: polling application\\n\"));\n        tcp_active_pcbs_changed = 0;\n        TCP_EVENT_POLL(prev, err);\n        if (tcp_active_pcbs_changed) {\n          goto tcp_slowtmr_start;\n        }\n        /* if err == ERR_ABRT, 'prev' is already deallocated */\n        if (err == ERR_OK) {\n          tcp_output(prev);\n        }\n      }\n    }\n  }\n\n  \n  /* Steps through all of the TIME-WAIT PCBs. */\n  prev = NULL;\n  pcb = tcp_tw_pcbs;\n  while (pcb != NULL) {\n    LWIP_ASSERT(\"tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT\", pcb->state == TIME_WAIT);\n    pcb_remove = 0;\n\n    /* Check if this PCB has stayed long enough in TIME-WAIT */\n    if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) {\n      ++pcb_remove;\n    }\n    \n\n\n    /* If the PCB should be removed, do it. */\n    if (pcb_remove) {\n      struct tcp_pcb *pcb2;\n      tcp_pcb_purge(pcb);\n      /* Remove PCB from tcp_tw_pcbs list. */\n      if (prev != NULL) {\n        LWIP_ASSERT(\"tcp_slowtmr: middle tcp != tcp_tw_pcbs\", pcb != tcp_tw_pcbs);\n        prev->next = pcb->next;\n      } else {\n        /* This PCB was the first. */\n        LWIP_ASSERT(\"tcp_slowtmr: first pcb == tcp_tw_pcbs\", tcp_tw_pcbs == pcb);\n        tcp_tw_pcbs = pcb->next;\n      }\n      pcb2 = pcb;\n      pcb = pcb->next;\n      memp_free(MEMP_TCP_PCB, pcb2);\n    } else {\n      prev = pcb;\n      pcb = pcb->next;\n    }\n  }\n}\n\n/**\n * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously\n * \"refused\" by upper layer (application) and sends delayed ACKs.\n *\n * Automatically called from tcp_tmr().\n */\nvoid\ntcp_fasttmr(void)\n{\n  struct tcp_pcb *pcb;\n\n  ++tcp_timer_ctr;\n\ntcp_fasttmr_start:\n  pcb = tcp_active_pcbs;\n\n  while(pcb != NULL) {\n    if (pcb->last_timer != tcp_timer_ctr) {\n      struct tcp_pcb *next;\n      pcb->last_timer = tcp_timer_ctr;\n      /* send delayed ACKs */\n      if (pcb->flags & TF_ACK_DELAY) {\n        LWIP_DEBUGF(TCP_DEBUG, (\"tcp_fasttmr: delayed ACK\\n\"));\n        tcp_ack_now(pcb);\n        tcp_output(pcb);\n        pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);\n      }\n\n      next = pcb->next;\n\n      /* If there is data which was previously \"refused\" by upper layer */\n      if (pcb->refused_data != NULL) {\n        tcp_active_pcbs_changed = 0;\n        tcp_process_refused_data(pcb);\n        if (tcp_active_pcbs_changed) {\n          /* application callback has changed the pcb list: restart the loop */\n          goto tcp_fasttmr_start;\n        }\n      }\n      pcb = next;\n    }\n  }\n}\n\n/** Pass pcb->refused_data to the recv callback */\nerr_t\ntcp_process_refused_data(struct tcp_pcb *pcb)\n{\n  err_t err;\n  u8_t refused_flags = pcb->refused_data->flags;\n  /* set pcb->refused_data to NULL in case the callback frees it and then\n     closes the pcb */\n  struct pbuf *refused_data = pcb->refused_data;\n  pcb->refused_data = NULL;\n  /* Notify again application with data previously received. */\n  LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: notify kept packet\\n\"));\n  TCP_EVENT_RECV(pcb, refused_data, ERR_OK, err);\n  if (err == ERR_OK) {\n    /* did refused_data include a FIN? */\n    if (refused_flags & PBUF_FLAG_TCP_FIN) {\n      /* correct rcv_wnd as the application won't call tcp_recved()\n         for the FIN's seqno */\n      if (pcb->rcv_wnd != TCP_WND) {\n        pcb->rcv_wnd++;\n      }\n      TCP_EVENT_CLOSED(pcb, err);\n      if (err == ERR_ABRT) {\n        return ERR_ABRT;\n      }\n    }\n  } else if (err == ERR_ABRT) {\n    /* if err == ERR_ABRT, 'pcb' is already deallocated */\n    /* Drop incoming packets because pcb is \"full\" (only if the incoming\n       segment contains data). */\n    LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: drop incoming packets, because pcb is \\\"full\\\"\\n\"));\n    return ERR_ABRT;\n  } else {\n    /* data is still refused, pbuf is still valid (go on for ACK-only packets) */\n    pcb->refused_data = refused_data;\n  }\n  return ERR_OK;\n}\n\n/**\n * Deallocates a list of TCP segments (tcp_seg structures).\n *\n * @param seg tcp_seg list of TCP segments to free\n */\nvoid\ntcp_segs_free(struct tcp_seg *seg)\n{\n  while (seg != NULL) {\n    struct tcp_seg *next = seg->next;\n    tcp_seg_free(seg);\n    seg = next;\n  }\n}\n\n/**\n * Frees a TCP segment (tcp_seg structure).\n *\n * @param seg single tcp_seg to free\n */\nvoid\ntcp_seg_free(struct tcp_seg *seg)\n{\n  if (seg != NULL) {\n    if (seg->p != NULL) {\n      pbuf_free(seg->p);\n#if TCP_DEBUG\n      seg->p = NULL;\n#endif /* TCP_DEBUG */\n    }\n    memp_free(MEMP_TCP_SEG, seg);\n  }\n}\n\n/**\n * Sets the priority of a connection.\n *\n * @param pcb the tcp_pcb to manipulate\n * @param prio new priority\n */\nvoid\ntcp_setprio(struct tcp_pcb *pcb, u8_t prio)\n{\n  pcb->prio = prio;\n}\n\n#if TCP_QUEUE_OOSEQ\n/**\n * Returns a copy of the given TCP segment.\n * The pbuf and data are not copied, only the pointers\n *\n * @param seg the old tcp_seg\n * @return a copy of seg\n */ \nstruct tcp_seg *\ntcp_seg_copy(struct tcp_seg *seg)\n{\n  struct tcp_seg *cseg;\n\n  cseg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG);\n  if (cseg == NULL) {\n    return NULL;\n  }\n  SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg)); \n  pbuf_ref(cseg->p);\n  return cseg;\n}\n#endif /* TCP_QUEUE_OOSEQ */\n\n#if LWIP_CALLBACK_API\n/**\n * Default receive callback that is called if the user didn't register\n * a recv callback for the pcb.\n */\nerr_t\ntcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)\n{\n  LWIP_UNUSED_ARG(arg);\n  if (p != NULL) {\n    tcp_recved(pcb, p->tot_len);\n    pbuf_free(p);\n  } else if (err == ERR_OK) {\n    return tcp_close(pcb);\n  }\n  return ERR_OK;\n}\n#endif /* LWIP_CALLBACK_API */\n\n/**\n * Kills the oldest active connection that has the same or lower priority than\n * 'prio'.\n *\n * @param prio minimum priority\n */\nstatic void\ntcp_kill_prio(u8_t prio)\n{\n  struct tcp_pcb *pcb, *inactive;\n  u32_t inactivity;\n  u8_t mprio;\n\n\n  mprio = TCP_PRIO_MAX;\n  \n  /* We kill the oldest active connection that has lower priority than prio. */\n  inactivity = 0;\n  inactive = NULL;\n  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {\n    if (pcb->prio <= prio &&\n       pcb->prio <= mprio &&\n       (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {\n      inactivity = tcp_ticks - pcb->tmr;\n      inactive = pcb;\n      mprio = pcb->prio;\n    }\n  }\n  if (inactive != NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_kill_prio: killing oldest PCB %p (%\"S32_F\")\\n\",\n           (void *)inactive, inactivity));\n    tcp_abort(inactive);\n  }\n}\n\n/**\n * Kills the oldest connection that is in TIME_WAIT state.\n * Called from tcp_alloc() if no more connections are available.\n */\nstatic void\ntcp_kill_timewait(void)\n{\n  struct tcp_pcb *pcb, *inactive;\n  u32_t inactivity;\n\n  inactivity = 0;\n  inactive = NULL;\n  /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */\n  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {\n    if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) {\n      inactivity = tcp_ticks - pcb->tmr;\n      inactive = pcb;\n    }\n  }\n  if (inactive != NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%\"S32_F\")\\n\",\n           (void *)inactive, inactivity));\n    tcp_abort(inactive);\n  }\n}\n\n/**\n * Allocate a new tcp_pcb structure.\n *\n * @param prio priority for the new pcb\n * @return a new tcp_pcb that initially is in state CLOSED\n */\nstruct tcp_pcb *\ntcp_alloc(u8_t prio)\n{\n  struct tcp_pcb *pcb;\n  u32_t iss;\n  \n  pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);\n  if (pcb == NULL) {\n    /* Try killing oldest connection in TIME-WAIT. */\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_alloc: killing off oldest TIME-WAIT connection\\n\"));\n    tcp_kill_timewait();\n    /* Try to allocate a tcp_pcb again. */\n    pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);\n    if (pcb == NULL) {\n      /* Try killing active connections with lower priority than the new one. */\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_alloc: killing connection with prio lower than %d\\n\", prio));\n      tcp_kill_prio(prio);\n      /* Try to allocate a tcp_pcb again. */\n      pcb = (struct tcp_pcb *)memp_malloc(MEMP_TCP_PCB);\n      if (pcb != NULL) {\n        /* adjust err stats: memp_malloc failed twice before */\n        MEMP_STATS_DEC(err, MEMP_TCP_PCB);\n      }\n    }\n    if (pcb != NULL) {\n      /* adjust err stats: timewait PCB was freed above */\n      MEMP_STATS_DEC(err, MEMP_TCP_PCB);\n    }\n  }\n  if (pcb != NULL) {\n    memset(pcb, 0, sizeof(struct tcp_pcb));\n    pcb->prio = prio;\n    pcb->snd_buf = TCP_SND_BUF;\n    pcb->snd_queuelen = 0;\n    pcb->rcv_wnd = TCP_WND;\n    pcb->rcv_ann_wnd = TCP_WND;\n    pcb->tos = 0;\n    pcb->ttl = TCP_TTL;\n    /* As initial send MSS, we use TCP_MSS but limit it to 536.\n       The send MSS is updated when an MSS option is received. */\n    pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS;\n    pcb->rto = 3000 / TCP_SLOW_INTERVAL;\n    pcb->sa = 0;\n    pcb->sv = 3000 / TCP_SLOW_INTERVAL;\n    pcb->rtime = -1;\n    pcb->cwnd = 1;\n    iss = tcp_next_iss();\n    pcb->snd_wl2 = iss;\n    pcb->snd_nxt = iss;\n    pcb->lastack = iss;\n    pcb->snd_lbb = iss;   \n    pcb->tmr = tcp_ticks;\n    pcb->last_timer = tcp_timer_ctr;\n\n    pcb->polltmr = 0;\n\n#if LWIP_CALLBACK_API\n    pcb->recv = tcp_recv_null;\n#endif /* LWIP_CALLBACK_API */  \n    \n    /* Init KEEPALIVE timer */\n    pcb->keep_idle  = TCP_KEEPIDLE_DEFAULT;\n    \n#if LWIP_TCP_KEEPALIVE\n    pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT;\n    pcb->keep_cnt   = TCP_KEEPCNT_DEFAULT;\n#endif /* LWIP_TCP_KEEPALIVE */\n\n    pcb->keep_cnt_sent = 0;\n  }\n  return pcb;\n}\n\n/**\n * Creates a new TCP protocol control block but doesn't place it on\n * any of the TCP PCB lists.\n * The pcb is not put on any list until binding using tcp_bind().\n *\n * @internal: Maybe there should be a idle TCP PCB list where these\n * PCBs are put on. Port reservation using tcp_bind() is implemented but\n * allocated pcbs that are not bound can't be killed automatically if wanting\n * to allocate a pcb with higher prio (@see tcp_kill_prio())\n *\n * @return a new tcp_pcb that initially is in state CLOSED\n */\nstruct tcp_pcb *\ntcp_new(void)\n{\n  return tcp_alloc(TCP_PRIO_NORMAL);\n}\n\n#if LWIP_IPV6\n/**\n * Creates a new TCP-over-IPv6 protocol control block but doesn't\n * place it on any of the TCP PCB lists.\n * The pcb is not put on any list until binding using tcp_bind().\n *\n * @return a new tcp_pcb that initially is in state CLOSED\n */\nstruct tcp_pcb *\ntcp_new_ip6(void)\n{\n  struct tcp_pcb * pcb;\n  pcb = tcp_alloc(TCP_PRIO_NORMAL);\n  ip_set_v6(pcb, 1);\n  return pcb;\n}\n#endif /* LWIP_IPV6 */\n\n/**\n * Used to specify the argument that should be passed callback\n * functions.\n *\n * @param pcb tcp_pcb to set the callback argument\n * @param arg void pointer argument to pass to callback functions\n */ \nvoid\ntcp_arg(struct tcp_pcb *pcb, void *arg)\n{\n  /* This function is allowed to be called for both listen pcbs and\n     connection pcbs. */\n  pcb->callback_arg = arg;\n}\n#if LWIP_CALLBACK_API\n\n/**\n * Used to specify the function that should be called when a TCP\n * connection receives data.\n *\n * @param pcb tcp_pcb to set the recv callback\n * @param recv callback function to call for this pcb when data is received\n */ \nvoid\ntcp_recv(struct tcp_pcb *pcb, tcp_recv_fn recv)\n{\n  LWIP_ASSERT(\"invalid socket state for recv callback\", pcb->state != LISTEN);\n  pcb->recv = recv;\n}\n\n/**\n * Used to specify the function that should be called when TCP data\n * has been successfully delivered to the remote host.\n *\n * @param pcb tcp_pcb to set the sent callback\n * @param sent callback function to call for this pcb when data is successfully sent\n */ \nvoid\ntcp_sent(struct tcp_pcb *pcb, tcp_sent_fn sent)\n{\n  LWIP_ASSERT(\"invalid socket state for sent callback\", pcb->state != LISTEN);\n  pcb->sent = sent;\n}\n\n/**\n * Used to specify the function that should be called when a fatal error\n * has occured on the connection.\n *\n * @param pcb tcp_pcb to set the err callback\n * @param err callback function to call for this pcb when a fatal error\n *        has occured on the connection\n */ \nvoid\ntcp_err(struct tcp_pcb *pcb, tcp_err_fn err)\n{\n  LWIP_ASSERT(\"invalid socket state for err callback\", pcb->state != LISTEN);\n  pcb->errf = err;\n}\n\n/**\n * Used for specifying the function that should be called when a\n * LISTENing connection has been connected to another host.\n *\n * @param pcb tcp_pcb to set the accept callback\n * @param accept callback function to call for this pcb when LISTENing\n *        connection has been connected to another host\n */ \nvoid\ntcp_accept(struct tcp_pcb *pcb, tcp_accept_fn accept)\n{\n  /* This function is allowed to be called for both listen pcbs and\n     connection pcbs. */\n  pcb->accept = accept;\n}\n#endif /* LWIP_CALLBACK_API */\n\n\n/**\n * Used to specify the function that should be called periodically\n * from TCP. The interval is specified in terms of the TCP coarse\n * timer interval, which is called twice a second.\n *\n */ \nvoid\ntcp_poll(struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval)\n{\n  LWIP_ASSERT(\"invalid socket state for poll\", pcb->state != LISTEN);\n#if LWIP_CALLBACK_API\n  pcb->poll = poll;\n#else /* LWIP_CALLBACK_API */  \n  LWIP_UNUSED_ARG(poll);\n#endif /* LWIP_CALLBACK_API */  \n  pcb->pollinterval = interval;\n}\n\n/**\n * Purges a TCP PCB. Removes any buffered data and frees the buffer memory\n * (pcb->ooseq, pcb->unsent and pcb->unacked are freed).\n *\n * @param pcb tcp_pcb to purge. The pcb itself is not deallocated!\n */\nvoid\ntcp_pcb_purge(struct tcp_pcb *pcb)\n{\n  if (pcb->state != CLOSED &&\n     pcb->state != TIME_WAIT &&\n     pcb->state != LISTEN) {\n\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_pcb_purge\\n\"));\n\n#if TCP_LISTEN_BACKLOG\n    if (pcb->state == SYN_RCVD) {\n      /* Need to find the corresponding listen_pcb and decrease its accepts_pending */\n      struct tcp_pcb_listen *lpcb;\n      LWIP_ASSERT(\"tcp_pcb_purge: pcb->state == SYN_RCVD but tcp_listen_pcbs is NULL\",\n        tcp_listen_pcbs.listen_pcbs != NULL);\n      for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {\n        if ((!lpcb->bound_to_netif && !pcb->bound_to_netif &&\n             (lpcb->local_port == pcb->local_port) &&\n             IP_PCB_IPVER_EQ(pcb, lpcb) &&\n             (ipX_addr_isany(PCB_ISIPV6(lpcb), &lpcb->local_ip) ||\n             ipX_addr_cmp(PCB_ISIPV6(lpcb), &pcb->local_ip, &lpcb->local_ip))) ||\n            (lpcb->bound_to_netif && pcb->bound_to_netif &&\n             !memcmp(lpcb->local_netif, pcb->local_netif, sizeof(pcb->local_netif)))) {\n            /* port and address of the listen pcb match the timed-out pcb */\n            LWIP_ASSERT(\"tcp_pcb_purge: listen pcb does not have accepts pending\",\n              lpcb->accepts_pending > 0);\n            lpcb->accepts_pending--;\n            break;\n        }\n      }\n    }\n#endif /* TCP_LISTEN_BACKLOG */\n\n\n    if (pcb->refused_data != NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_pcb_purge: data left on ->refused_data\\n\"));\n      pbuf_free(pcb->refused_data);\n      pcb->refused_data = NULL;\n    }\n    if (pcb->unsent != NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_pcb_purge: not all data sent\\n\"));\n    }\n    if (pcb->unacked != NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_pcb_purge: data left on ->unacked\\n\"));\n    }\n#if TCP_QUEUE_OOSEQ\n    if (pcb->ooseq != NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_pcb_purge: data left on ->ooseq\\n\"));\n    }\n    tcp_segs_free(pcb->ooseq);\n    pcb->ooseq = NULL;\n#endif /* TCP_QUEUE_OOSEQ */\n\n    /* Stop the retransmission timer as it will expect data on unacked\n       queue if it fires */\n    pcb->rtime = -1;\n\n    tcp_segs_free(pcb->unsent);\n    tcp_segs_free(pcb->unacked);\n    pcb->unacked = pcb->unsent = NULL;\n#if TCP_OVERSIZE\n    pcb->unsent_oversize = 0;\n#endif /* TCP_OVERSIZE */\n  }\n}\n\n/**\n * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first.\n *\n * @param pcblist PCB list to purge.\n * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated!\n */\nvoid\ntcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb)\n{\n  TCP_RMV(pcblist, pcb);\n\n  tcp_pcb_purge(pcb);\n  \n  /* if there is an outstanding delayed ACKs, send it */\n  if (pcb->state != TIME_WAIT &&\n     pcb->state != LISTEN &&\n     pcb->flags & TF_ACK_DELAY) {\n    pcb->flags |= TF_ACK_NOW;\n    tcp_output(pcb);\n  }\n\n  if (pcb->state != LISTEN) {\n    LWIP_ASSERT(\"unsent segments leaking\", pcb->unsent == NULL);\n    LWIP_ASSERT(\"unacked segments leaking\", pcb->unacked == NULL);\n#if TCP_QUEUE_OOSEQ\n    LWIP_ASSERT(\"ooseq segments leaking\", pcb->ooseq == NULL);\n#endif /* TCP_QUEUE_OOSEQ */\n  }\n\n  pcb->state = CLOSED;\n\n  LWIP_ASSERT(\"tcp_pcb_remove: tcp_pcbs_sane()\", tcp_pcbs_sane());\n}\n\n/**\n * Calculates a new initial sequence number for new connections.\n *\n * @return u32_t pseudo random sequence number\n */\nu32_t\ntcp_next_iss(void)\n{\n  static u32_t iss = 6510;\n  \n  iss += tcp_ticks;       /* XXX */\n  return iss;\n}\n\n#if TCP_CALCULATE_EFF_SEND_MSS\n/**\n * Calcluates the effective send mss that can be used for a specific IP address\n * by using ip_route to determin the netif used to send to the address and\n * calculating the minimum of TCP_MSS and that netif's mtu (if set).\n */\nu16_t\ntcp_eff_send_mss_impl(u16_t sendmss, ipX_addr_t *dest\n#if LWIP_IPV6\n                     , ipX_addr_t *src, u8_t isipv6\n#endif /* LWIP_IPV6 */\n                     )\n{\n  u16_t mss_s;\n  struct netif *outif;\n  s16_t mtu;\n\n  outif = ipX_route(isipv6, src, dest);\n#if LWIP_IPV6\n  if (isipv6) {\n    /* First look in destination cache, to see if there is a Path MTU. */\n    mtu = nd6_get_destination_mtu(ipX_2_ip6(dest), outif);\n  } else\n#endif /* LWIP_IPV6 */\n  {\n    if (outif == NULL) {\n      return sendmss;\n    }\n    mtu = outif->mtu;\n  }\n\n  if (mtu != 0) {\n    mss_s = mtu - IP_HLEN - TCP_HLEN;\n#if LWIP_IPV6\n    /* for IPv6, substract the difference in header size */\n    mss_s -= (IP6_HLEN - IP_HLEN);\n#endif /* LWIP_IPV6 */\n    /* RFC 1122, chap 4.2.2.6:\n     * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize\n     * We correct for TCP options in tcp_write(), and don't support IP options.\n     */\n    sendmss = LWIP_MIN(sendmss, mss_s);\n  }\n  return sendmss;\n}\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n\nconst char*\ntcp_debug_state_str(enum tcp_state s)\n{\n  return tcp_state_str[s];\n}\n\n#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG\n/**\n * Print a tcp header for debugging purposes.\n *\n * @param tcphdr pointer to a struct tcp_hdr\n */\nvoid\ntcp_debug_print(struct tcp_hdr *tcphdr)\n{\n  LWIP_DEBUGF(TCP_DEBUG, (\"TCP header:\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"|    %5\"U16_F\"      |    %5\"U16_F\"      | (src port, dest port)\\n\",\n         ntohs(tcphdr->src), ntohs(tcphdr->dest)));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"|           %010\"U32_F\"          | (seq no)\\n\",\n          ntohl(tcphdr->seqno)));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"|           %010\"U32_F\"          | (ack no)\\n\",\n         ntohl(tcphdr->ackno)));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"| %2\"U16_F\" |   |%\"U16_F\"%\"U16_F\"%\"U16_F\"%\"U16_F\"%\"U16_F\"%\"U16_F\"|     %5\"U16_F\"     | (hdrlen, flags (\",\n       TCPH_HDRLEN(tcphdr),\n         TCPH_FLAGS(tcphdr) >> 5 & 1,\n         TCPH_FLAGS(tcphdr) >> 4 & 1,\n         TCPH_FLAGS(tcphdr) >> 3 & 1,\n         TCPH_FLAGS(tcphdr) >> 2 & 1,\n         TCPH_FLAGS(tcphdr) >> 1 & 1,\n         TCPH_FLAGS(tcphdr) & 1,\n         ntohs(tcphdr->wnd)));\n  tcp_debug_print_flags(TCPH_FLAGS(tcphdr));\n  LWIP_DEBUGF(TCP_DEBUG, (\"), win)\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(TCP_DEBUG, (\"|    0x%04\"X16_F\"     |     %5\"U16_F\"     | (chksum, urgp)\\n\",\n         ntohs(tcphdr->chksum), ntohs(tcphdr->urgp)));\n  LWIP_DEBUGF(TCP_DEBUG, (\"+-------------------------------+\\n\"));\n}\n\n/**\n * Print a tcp state for debugging purposes.\n *\n * @param s enum tcp_state to print\n */\nvoid\ntcp_debug_print_state(enum tcp_state s)\n{\n  LWIP_DEBUGF(TCP_DEBUG, (\"State: %s\\n\", tcp_state_str[s]));\n}\n\n/**\n * Print tcp flags for debugging purposes.\n *\n * @param flags tcp flags, all active flags are printed\n */\nvoid\ntcp_debug_print_flags(u8_t flags)\n{\n  if (flags & TCP_FIN) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"FIN \"));\n  }\n  if (flags & TCP_SYN) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"SYN \"));\n  }\n  if (flags & TCP_RST) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"RST \"));\n  }\n  if (flags & TCP_PSH) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"PSH \"));\n  }\n  if (flags & TCP_ACK) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"ACK \"));\n  }\n  if (flags & TCP_URG) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"URG \"));\n  }\n  if (flags & TCP_ECE) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"ECE \"));\n  }\n  if (flags & TCP_CWR) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"CWR \"));\n  }\n  LWIP_DEBUGF(TCP_DEBUG, (\"\\n\"));\n}\n\n/**\n * Print all tcp_pcbs in every list for debugging purposes.\n */\nvoid\ntcp_debug_print_pcbs(void)\n{\n  struct tcp_pcb *pcb;\n  LWIP_DEBUGF(TCP_DEBUG, (\"Active PCB states:\\n\"));\n  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"Local port %\"U16_F\", foreign port %\"U16_F\" snd_nxt %\"U32_F\" rcv_nxt %\"U32_F\" \",\n                       pcb->local_port, pcb->remote_port,\n                       pcb->snd_nxt, pcb->rcv_nxt));\n    tcp_debug_print_state(pcb->state);\n  }    \n  LWIP_DEBUGF(TCP_DEBUG, (\"Listen PCB states:\\n\"));\n  for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"Local port %\"U16_F\", foreign port %\"U16_F\" snd_nxt %\"U32_F\" rcv_nxt %\"U32_F\" \",\n                       pcb->local_port, pcb->remote_port,\n                       pcb->snd_nxt, pcb->rcv_nxt));\n    tcp_debug_print_state(pcb->state);\n  }    \n  LWIP_DEBUGF(TCP_DEBUG, (\"TIME-WAIT PCB states:\\n\"));\n  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"Local port %\"U16_F\", foreign port %\"U16_F\" snd_nxt %\"U32_F\" rcv_nxt %\"U32_F\" \",\n                       pcb->local_port, pcb->remote_port,\n                       pcb->snd_nxt, pcb->rcv_nxt));\n    tcp_debug_print_state(pcb->state);\n  }    \n}\n\n/**\n * Check state consistency of the tcp_pcb lists.\n */\ns16_t\ntcp_pcbs_sane(void)\n{\n  struct tcp_pcb *pcb;\n  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_ASSERT(\"tcp_pcbs_sane: active pcb->state != CLOSED\", pcb->state != CLOSED);\n    LWIP_ASSERT(\"tcp_pcbs_sane: active pcb->state != LISTEN\", pcb->state != LISTEN);\n    LWIP_ASSERT(\"tcp_pcbs_sane: active pcb->state != TIME-WAIT\", pcb->state != TIME_WAIT);\n  }\n  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_ASSERT(\"tcp_pcbs_sane: tw pcb->state == TIME-WAIT\", pcb->state == TIME_WAIT);\n  }\n  return 1;\n}\n#endif /* TCP_DEBUG */\n\n#endif /* LWIP_TCP */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/tcp_in.c",
    "content": "/**\n * @file\n * Transmission Control Protocol, incoming traffic\n *\n * The input processing functions of the TCP layer.\n *\n * These functions are generally called in the order (ip_input() ->)\n * tcp_input() -> * tcp_process() -> tcp_receive() (-> application).\n * \n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/def.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/snmp.h\"\n#include \"arch/perf.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/inet_chksum.h\"\n#if LWIP_ND6_TCP_REACHABILITY_HINTS\n#include \"lwip/nd6.h\"\n#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */\n\n/* These variables are global to all functions involved in the input\n   processing of TCP segments. They are set by the tcp_input()\n   function. */\nstatic struct tcp_seg inseg;\nstatic struct tcp_hdr *tcphdr;\nstatic u32_t seqno, ackno;\nstatic u8_t flags;\nstatic u16_t tcplen;\n\nstatic u8_t recv_flags;\nstatic struct pbuf *recv_data;\n\nstruct tcp_pcb *tcp_input_pcb;\n\n/* Forward declarations. */\nstatic err_t tcp_process(struct tcp_pcb *pcb);\nstatic void tcp_receive(struct tcp_pcb *pcb);\nstatic void tcp_parseopt(struct tcp_pcb *pcb);\n\nstatic err_t tcp_listen_input(struct tcp_pcb_listen *pcb);\nstatic err_t tcp_timewait_input(struct tcp_pcb *pcb);\n\n/**\n * The initial input processing of TCP. It verifies the TCP header, demultiplexes\n * the segment between the PCBs and passes it on to tcp_process(), which implements\n * the TCP finite state machine. This function is called by the IP layer (in\n * ip_input()).\n *\n * @param p received TCP segment to process (p->payload pointing to the TCP header)\n * @param inp network interface on which this segment was received\n */\nvoid\ntcp_input(struct pbuf *p, struct netif *inp)\n{\n  struct tcp_pcb *pcb, *prev;\n  struct tcp_pcb_listen *lpcb;\n#if SO_REUSE\n  struct tcp_pcb *lpcb_prev = NULL;\n  struct tcp_pcb_listen *lpcb_any = NULL;\n#endif /* SO_REUSE */\n  u8_t hdrlen;\n  err_t err;\n#if CHECKSUM_CHECK_TCP\n  u16_t chksum;\n#endif /* CHECKSUM_CHECK_TCP */\n\n  PERF_START;\n\n  TCP_STATS_INC(tcp.recv);\n  snmp_inc_tcpinsegs();\n\n  tcphdr = (struct tcp_hdr *)p->payload;\n\n#if TCP_INPUT_DEBUG\n  tcp_debug_print(tcphdr);\n#endif\n\n  /* Check that TCP header fits in payload */\n  if (p->len < sizeof(struct tcp_hdr)) {\n    /* drop short packets */\n    LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: short packet (%\"U16_F\" bytes) discarded\\n\", p->tot_len));\n    TCP_STATS_INC(tcp.lenerr);\n    goto dropped;\n  }\n\n  /* Don't even process incoming broadcasts/multicasts. */\n  if ((!ip_current_is_v6() && ip_addr_isbroadcast(ip_current_dest_addr(), inp)) ||\n       ipX_addr_ismulticast(ip_current_is_v6(), ipX_current_dest_addr())) {\n    TCP_STATS_INC(tcp.proterr);\n    goto dropped;\n  }\n\n#if CHECKSUM_CHECK_TCP\n  /* Verify TCP checksum. */\n  chksum = ipX_chksum_pseudo(ip_current_is_v6(), p, IP_PROTO_TCP, p->tot_len,\n                             ipX_current_src_addr(), ipX_current_dest_addr());\n  if (chksum != 0) {\n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: packet discarded due to failing checksum 0x%04\"X16_F\"\\n\",\n        chksum));\n    tcp_debug_print(tcphdr);\n    TCP_STATS_INC(tcp.chkerr);\n    goto dropped;\n  }\n#endif /* CHECKSUM_CHECK_TCP */\n\n  /* Move the payload pointer in the pbuf so that it points to the\n     TCP data instead of the TCP header. */\n  hdrlen = TCPH_HDRLEN(tcphdr);\n  if(pbuf_header(p, -(hdrlen * 4))){\n    /* drop short packets */\n    LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: short packet\\n\"));\n    TCP_STATS_INC(tcp.lenerr);\n    goto dropped;\n  }\n\n  /* Convert fields in TCP header to host byte order. */\n  tcphdr->src = ntohs(tcphdr->src);\n  tcphdr->dest = ntohs(tcphdr->dest);\n  seqno = tcphdr->seqno = ntohl(tcphdr->seqno);\n  ackno = tcphdr->ackno = ntohl(tcphdr->ackno);\n  tcphdr->wnd = ntohs(tcphdr->wnd);\n\n  flags = TCPH_FLAGS(tcphdr);\n  tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0);\n\n  /* Demultiplex an incoming segment. First, we check if it is destined\n     for an active connection. */\n  prev = NULL;\n\n  \n  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {\n    LWIP_ASSERT(\"tcp_input: active pcb->state != CLOSED\", pcb->state != CLOSED);\n    LWIP_ASSERT(\"tcp_input: active pcb->state != TIME-WAIT\", pcb->state != TIME_WAIT);\n    LWIP_ASSERT(\"tcp_input: active pcb->state != LISTEN\", pcb->state != LISTEN);\n    if (pcb->remote_port == tcphdr->src &&\n        pcb->local_port == tcphdr->dest &&\n        IP_PCB_IPVER_INPUT_MATCH(pcb) &&\n        ipX_addr_cmp(ip_current_is_v6(), &pcb->remote_ip, ipX_current_src_addr()) &&\n        ipX_addr_cmp(ip_current_is_v6(),&pcb->local_ip, ipX_current_dest_addr())) {\n      /* Move this PCB to the front of the list so that subsequent\n         lookups will be faster (we exploit locality in TCP segment\n         arrivals). */\n      LWIP_ASSERT(\"tcp_input: pcb->next != pcb (before cache)\", pcb->next != pcb);\n      if (prev != NULL) {\n        prev->next = pcb->next;\n        pcb->next = tcp_active_pcbs;\n        tcp_active_pcbs = pcb;\n      }\n      LWIP_ASSERT(\"tcp_input: pcb->next != pcb (after cache)\", pcb->next != pcb);\n      break;\n    }\n    prev = pcb;\n  }\n\n  if (pcb == NULL) {\n    /* If it did not go to an active connection, we check the connections\n       in the TIME-WAIT state. */\n    for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {\n      LWIP_ASSERT(\"tcp_input: TIME-WAIT pcb->state == TIME-WAIT\", pcb->state == TIME_WAIT);\n      if (pcb->remote_port == tcphdr->src &&\n          pcb->local_port == tcphdr->dest &&\n          IP_PCB_IPVER_INPUT_MATCH(pcb) &&\n          ipX_addr_cmp(ip_current_is_v6(), &pcb->remote_ip, ipX_current_src_addr()) &&\n          ipX_addr_cmp(ip_current_is_v6(),&pcb->local_ip, ipX_current_dest_addr())) {\n        /* We don't really care enough to move this PCB to the front\n           of the list since we are not very likely to receive that\n           many segments for connections in TIME-WAIT. */\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: packed for TIME_WAITing connection.\\n\"));\n        tcp_timewait_input(pcb);\n        pbuf_free(p);\n        return;\n      }\n    }\n\n    /* Finally, if we still did not get a match, we check all PCBs that\n       are LISTENing for incoming connections. */\n    prev = NULL;\n    struct tcp_pcb_listen *netif_pcb = NULL;\n    struct tcp_pcb *netif_pcb_prev = NULL;\n    for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) {\n      if (lpcb->bound_to_netif) {\n        if (IP_PCB_IPVER_INPUT_MATCH(lpcb) && netif_is_named(inp, lpcb->local_netif)) {\n          netif_pcb = lpcb;\n          netif_pcb_prev = prev;\n        }\n      }\n      else if (lpcb->local_port == tcphdr->dest) {\n#if LWIP_IPV6\n        if (lpcb->accept_any_ip_version) {\n          /* found an ANY-match */\n#if SO_REUSE\n          lpcb_any = lpcb;\n          lpcb_prev = prev;\n#else /* SO_REUSE */\n          break;\n#endif /* SO_REUSE */\n        } else\n#endif /* LWIP_IPV6 */\n        if (IP_PCB_IPVER_INPUT_MATCH(lpcb)) {\n          if (ipX_addr_cmp(ip_current_is_v6(), &lpcb->local_ip, ipX_current_dest_addr())) {\n            /* found an exact match */\n            break;\n          } else if (ipX_addr_isany(ip_current_is_v6(), &lpcb->local_ip)) {\n            /* found an ANY-match */\n#if SO_REUSE\n            lpcb_any = lpcb;\n            lpcb_prev = prev;\n#else /* SO_REUSE */\n            break;\n #endif /* SO_REUSE */\n          }\n        }\n      }\n      prev = (struct tcp_pcb *)lpcb;\n    }\n#if SO_REUSE\n    /* first try specific local IP */\n    if (lpcb == NULL) {\n      /* only pass to ANY if no specific local IP has been found */\n      lpcb = lpcb_any;\n      prev = lpcb_prev;\n    }\n#endif /* SO_REUSE */\n    if (lpcb == NULL && netif_pcb) {\n        lpcb = netif_pcb;\n        prev = netif_pcb_prev;\n    }\n    if (lpcb != NULL) {\n      /* Move this PCB to the front of the list so that subsequent\n         lookups will be faster (we exploit locality in TCP segment\n         arrivals). */\n      if (prev != NULL) {\n        ((struct tcp_pcb_listen *)prev)->next = lpcb->next;\n              /* our successor is the remainder of the listening list */\n        lpcb->next = tcp_listen_pcbs.listen_pcbs;\n              /* put this listening pcb at the head of the listening list */\n        tcp_listen_pcbs.listen_pcbs = lpcb;\n      }\n    \n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: packed for LISTENing connection.\\n\"));\n      tcp_listen_input(lpcb);\n      pbuf_free(p);\n      return;\n    }\n  }\n\n#if TCP_INPUT_DEBUG\n  LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags \"));\n  tcp_debug_print_flags(TCPH_FLAGS(tcphdr));\n  LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"-+-+-+-+-+-+-+-+-+-+-+-+-+-+\\n\"));\n#endif /* TCP_INPUT_DEBUG */\n\n\n  if (pcb != NULL) {\n    /* The incoming segment belongs to a connection. */\n#if TCP_INPUT_DEBUG\n#if TCP_DEBUG\n    tcp_debug_print_state(pcb->state);\n#endif /* TCP_DEBUG */\n#endif /* TCP_INPUT_DEBUG */\n\n    /* Set up a tcp_seg structure. */\n    inseg.next = NULL;\n    inseg.len = p->tot_len;\n    inseg.p = p;\n    inseg.tcphdr = tcphdr;\n\n    recv_data = NULL;\n    recv_flags = 0;\n\n    if (flags & TCP_PSH) {\n      p->flags |= PBUF_FLAG_PUSH;\n    }\n\n    /* If there is data which was previously \"refused\" by upper layer */\n    if (pcb->refused_data != NULL) {\n      if ((tcp_process_refused_data(pcb) == ERR_ABRT) ||\n        ((pcb->refused_data != NULL) && (tcplen > 0))) {\n        /* pcb has been aborted or refused data is still refused and the new\n           segment contains data */\n        TCP_STATS_INC(tcp.drop);\n        snmp_inc_tcpinerrs();\n        goto aborted;\n      }\n    }\n    tcp_input_pcb = pcb;\n    err = tcp_process(pcb);\n    /* A return value of ERR_ABRT means that tcp_abort() was called\n       and that the pcb has been freed. If so, we don't do anything. */\n    if (err != ERR_ABRT) {\n      if (recv_flags & TF_RESET) {\n        /* TF_RESET means that the connection was reset by the other\n           end. We then call the error callback to inform the\n           application that the connection is dead before we\n           deallocate the PCB. */\n        TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST);\n        tcp_pcb_remove(&tcp_active_pcbs, pcb);\n        memp_free(MEMP_TCP_PCB, pcb);\n      } else if (recv_flags & TF_CLOSED) {\n        /* The connection has been closed and we will deallocate the\n           PCB. */\n        if (!(pcb->flags & TF_RXCLOSED)) {\n          /* Connection closed although the application has only shut down the\n             tx side: call the PCB's err callback and indicate the closure to\n             ensure the application doesn't continue using the PCB. */\n          TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_CLSD);\n        }\n        tcp_pcb_remove(&tcp_active_pcbs, pcb);\n        memp_free(MEMP_TCP_PCB, pcb);\n      } else {\n        err = ERR_OK;\n        /* If the application has registered a \"sent\" function to be\n           called when new send buffer space is available, we call it\n           now. */\n        if (pcb->acked > 0) {\n          TCP_EVENT_SENT(pcb, pcb->acked, err);\n          if (err == ERR_ABRT) {\n            goto aborted;\n          }\n        }\n\n        if (recv_data != NULL) {\n          LWIP_ASSERT(\"pcb->refused_data == NULL\", pcb->refused_data == NULL);\n          if (pcb->flags & TF_RXCLOSED) {\n            /* received data although already closed -> abort (send RST) to\n               notify the remote host that not all data has been processed */\n            pbuf_free(recv_data);\n            tcp_abort(pcb);\n            goto aborted;\n          }\n\n          /* Notify application that data has been received. */\n          TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err);\n          if (err == ERR_ABRT) {\n            goto aborted;\n          }\n\n          /* If the upper layer can't receive this data, store it */\n          if (err != ERR_OK) {\n            pcb->refused_data = recv_data;\n            LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_input: keep incoming packet, because pcb is \\\"full\\\"\\n\"));\n          }\n        }\n\n        /* If a FIN segment was received, we call the callback\n           function with a NULL buffer to indicate EOF. */\n        if (recv_flags & TF_GOT_FIN) {\n          if (pcb->refused_data != NULL) {\n            /* Delay this if we have refused data. */\n            pcb->refused_data->flags |= PBUF_FLAG_TCP_FIN;\n          } else {\n            /* correct rcv_wnd as the application won't call tcp_recved()\n               for the FIN's seqno */\n            if (pcb->rcv_wnd != TCP_WND) {\n              pcb->rcv_wnd++;\n            }\n            TCP_EVENT_CLOSED(pcb, err);\n            if (err == ERR_ABRT) {\n              goto aborted;\n            }\n          }\n        }\n\n        tcp_input_pcb = NULL;\n        /* Try to send something out. */\n        tcp_output(pcb);\n#if TCP_INPUT_DEBUG\n#if TCP_DEBUG\n        tcp_debug_print_state(pcb->state);\n#endif /* TCP_DEBUG */\n#endif /* TCP_INPUT_DEBUG */\n      }\n    }\n    /* Jump target if pcb has been aborted in a callback (by calling tcp_abort()).\n       Below this line, 'pcb' may not be dereferenced! */\naborted:\n    tcp_input_pcb = NULL;\n    recv_data = NULL;\n\n    /* give up our reference to inseg.p */\n    if (inseg.p != NULL)\n    {\n      pbuf_free(inseg.p);\n      inseg.p = NULL;\n    }\n  } else {\n\n    /* If no matching PCB was found, send a TCP RST (reset) to the\n       sender. */\n    LWIP_DEBUGF(TCP_RST_DEBUG, (\"tcp_input: no PCB match found, resetting.\\n\"));\n    if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) {\n      TCP_STATS_INC(tcp.proterr);\n      TCP_STATS_INC(tcp.drop);\n      tcp_rst(ackno, seqno + tcplen, ipX_current_dest_addr(),\n        ipX_current_src_addr(), tcphdr->dest, tcphdr->src, ip_current_is_v6());\n    }\n    pbuf_free(p);\n  }\n\n  LWIP_ASSERT(\"tcp_input: tcp_pcbs_sane()\", tcp_pcbs_sane());\n  PERF_STOP(\"tcp_input\");\n  return;\ndropped:\n  TCP_STATS_INC(tcp.drop);\n  snmp_inc_tcpinerrs();\n  pbuf_free(p);\n}\n\n/**\n * Called by tcp_input() when a segment arrives for a listening\n * connection (from tcp_input()).\n *\n * @param pcb the tcp_pcb_listen for which a segment arrived\n * @return ERR_OK if the segment was processed\n *         another err_t on error\n *\n * @note the return value is not (yet?) used in tcp_input()\n * @note the segment which arrived is saved in global variables, therefore only the pcb\n *       involved is passed as a parameter to this function\n */\nstatic err_t\ntcp_listen_input(struct tcp_pcb_listen *pcb)\n{\n  struct tcp_pcb *npcb;\n  err_t rc;\n\n  if (flags & TCP_RST) {\n    /* An incoming RST should be ignored. Return. */\n    return ERR_OK;\n  }\n\n  /* In the LISTEN state, we check for incoming SYN segments,\n     creates a new PCB, and responds with a SYN|ACK. */\n  if (flags & TCP_ACK) {\n    /* For incoming segments with the ACK flag set, respond with a\n       RST. */\n    LWIP_DEBUGF(TCP_RST_DEBUG, (\"tcp_listen_input: ACK in LISTEN, sending reset\\n\"));\n    tcp_rst(ackno, seqno + tcplen, ipX_current_dest_addr(),\n      ipX_current_src_addr(), tcphdr->dest, tcphdr->src, ip_current_is_v6());\n  } else if (flags & TCP_SYN) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"TCP connection request %\"U16_F\" -> %\"U16_F\".\\n\", tcphdr->src, tcphdr->dest));\n#if TCP_LISTEN_BACKLOG\n    if (pcb->accepts_pending >= pcb->backlog) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_listen_input: listen backlog exceeded for port %\"U16_F\"\\n\", tcphdr->dest));\n      return ERR_ABRT;\n    }\n#endif /* TCP_LISTEN_BACKLOG */\n    npcb = tcp_alloc(pcb->prio);\n    /* If a new PCB could not be created (probably due to lack of memory),\n       we don't do anything, but rely on the sender will retransmit the\n       SYN at a time when we have more memory available. */\n    if (npcb == NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_listen_input: could not allocate PCB\\n\"));\n      TCP_STATS_INC(tcp.memerr);\n      return ERR_MEM;\n    }\n#if TCP_LISTEN_BACKLOG\n    pcb->accepts_pending++;\n#endif /* TCP_LISTEN_BACKLOG */\n    /* Set up the new PCB. */\n#if LWIP_IPV6\n    PCB_ISIPV6(npcb) = ip_current_is_v6();\n#endif /* LWIP_IPV6 */\n    ipX_addr_copy(ip_current_is_v6(), npcb->local_ip, *ipX_current_dest_addr());\n    ipX_addr_copy(ip_current_is_v6(), npcb->remote_ip, *ipX_current_src_addr());\n    npcb->bound_to_netif = pcb->bound_to_netif;\n    npcb->local_port = tcphdr->dest;\n    memcpy(npcb->local_netif, pcb->local_netif, sizeof(pcb->local_netif));\n    npcb->remote_port = tcphdr->src;\n    npcb->state = SYN_RCVD;\n    npcb->rcv_nxt = seqno + 1;\n    npcb->rcv_ann_right_edge = npcb->rcv_nxt;\n    npcb->snd_wnd = tcphdr->wnd;\n    npcb->snd_wnd_max = tcphdr->wnd;\n    npcb->ssthresh = npcb->snd_wnd;\n    npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */\n    npcb->callback_arg = pcb->callback_arg;\n#if LWIP_CALLBACK_API\n    npcb->accept = pcb->accept;\n#endif /* LWIP_CALLBACK_API */\n    /* inherit socket options */\n    npcb->so_options = pcb->so_options & SOF_INHERITED;\n    /* Register the new PCB so that we can begin receiving segments\n       for it. */\n    TCP_REG_ACTIVE(npcb);\n\n    /* Parse any options in the SYN. */\n    tcp_parseopt(npcb);\n#if TCP_CALCULATE_EFF_SEND_MSS\n    npcb->mss = tcp_eff_send_mss(npcb->mss, &npcb->local_ip,\n      &npcb->remote_ip, PCB_ISIPV6(npcb));\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n\n    snmp_inc_tcppassiveopens();\n\n    /* Send a SYN|ACK together with the MSS option. */\n    rc = tcp_enqueue_flags(npcb, TCP_SYN | TCP_ACK);\n    if (rc != ERR_OK) {\n      tcp_abandon(npcb, 0);\n      return rc;\n    }\n    return tcp_output(npcb);\n  }\n  return ERR_OK;\n}\n\n/**\n * Called by tcp_input() when a segment arrives for a connection in\n * TIME_WAIT.\n *\n * @param pcb the tcp_pcb for which a segment arrived\n *\n * @note the segment which arrived is saved in global variables, therefore only the pcb\n *       involved is passed as a parameter to this function\n */\nstatic err_t\ntcp_timewait_input(struct tcp_pcb *pcb)\n{\n  /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */\n  /* RFC 793 3.9 Event Processing - Segment Arrives:\n   * - first check sequence number - we skip that one in TIME_WAIT (always\n   *   acceptable since we only send ACKs)\n   * - second check the RST bit (... return) */\n  if (flags & TCP_RST)  {\n    return ERR_OK;\n  }\n  /* - fourth, check the SYN bit, */\n  if (flags & TCP_SYN) {\n    /* If an incoming segment is not acceptable, an acknowledgment\n       should be sent in reply */\n    if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) {\n      /* If the SYN is in the window it is an error, send a reset */\n      tcp_rst(ackno, seqno + tcplen, ipX_current_dest_addr(),\n        ipX_current_src_addr(), tcphdr->dest, tcphdr->src, ip_current_is_v6());\n      return ERR_OK;\n    }\n  } else if (flags & TCP_FIN) {\n    /* - eighth, check the FIN bit: Remain in the TIME-WAIT state.\n         Restart the 2 MSL time-wait timeout.*/\n    pcb->tmr = tcp_ticks;\n  }\n\n  if ((tcplen > 0))  {\n    /* Acknowledge data, FIN or out-of-window SYN */\n    pcb->flags |= TF_ACK_NOW;\n    return tcp_output(pcb);\n  }\n  return ERR_OK;\n}\n\n/**\n * Implements the TCP state machine. Called by tcp_input. In some\n * states tcp_receive() is called to receive data. The tcp_seg\n * argument will be freed by the caller (tcp_input()) unless the\n * recv_data pointer in the pcb is set.\n *\n * @param pcb the tcp_pcb for which a segment arrived\n *\n * @note the segment which arrived is saved in global variables, therefore only the pcb\n *       involved is passed as a parameter to this function\n */\nstatic err_t\ntcp_process(struct tcp_pcb *pcb)\n{\n  struct tcp_seg *rseg;\n  u8_t acceptable = 0;\n  err_t err;\n\n  err = ERR_OK;\n\n  /* Process incoming RST segments. */\n  if (flags & TCP_RST) {\n    /* First, determine if the reset is acceptable. */\n    if (pcb->state == SYN_SENT) {\n      if (ackno == pcb->snd_nxt) {\n        acceptable = 1;\n      }\n    } else {\n      if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, \n                          pcb->rcv_nxt+pcb->rcv_wnd)) {\n        acceptable = 1;\n      }\n    }\n\n    if (acceptable) {\n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_process: Connection RESET\\n\"));\n      LWIP_ASSERT(\"tcp_input: pcb->state != CLOSED\", pcb->state != CLOSED);\n      recv_flags |= TF_RESET;\n      pcb->flags &= ~TF_ACK_DELAY;\n      return ERR_RST;\n    } else {\n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_process: unacceptable reset seqno %\"U32_F\" rcv_nxt %\"U32_F\"\\n\",\n       seqno, pcb->rcv_nxt));\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_process: unacceptable reset seqno %\"U32_F\" rcv_nxt %\"U32_F\"\\n\",\n       seqno, pcb->rcv_nxt));\n      return ERR_OK;\n    }\n  }\n\n  if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) { \n    /* Cope with new connection attempt after remote end crashed */\n    tcp_ack_now(pcb);\n    return ERR_OK;\n  }\n  \n  if ((pcb->flags & TF_RXCLOSED) == 0) {\n    /* Update the PCB (in)activity timer unless rx is closed (see tcp_shutdown) */\n    pcb->tmr = tcp_ticks;\n  }\n  pcb->keep_cnt_sent = 0;\n\n  tcp_parseopt(pcb);\n\n  /* Do different things depending on the TCP state. */\n  switch (pcb->state) {\n  case SYN_SENT:\n    LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"SYN-SENT: ackno %\"U32_F\" pcb->snd_nxt %\"U32_F\" unacked %\"U32_F\"\\n\", ackno,\n     pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno)));\n    /* received SYN ACK with expected sequence number? */\n    if ((flags & TCP_ACK) && (flags & TCP_SYN)\n        && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) {\n      pcb->snd_buf++;\n      pcb->rcv_nxt = seqno + 1;\n      pcb->rcv_ann_right_edge = pcb->rcv_nxt;\n      pcb->lastack = ackno;\n      pcb->snd_wnd = tcphdr->wnd;\n      pcb->snd_wnd_max = tcphdr->wnd;\n      pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */\n      pcb->state = ESTABLISHED;\n\n#if TCP_CALCULATE_EFF_SEND_MSS\n      pcb->mss = tcp_eff_send_mss(pcb->mss, &pcb->local_ip, &pcb->remote_ip,\n        PCB_ISIPV6(pcb));\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n\n      /* Set ssthresh again after changing pcb->mss (already set in tcp_connect\n       * but for the default value of pcb->mss) */\n      pcb->ssthresh = pcb->mss * 10;\n\n      pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss);\n      LWIP_ASSERT(\"pcb->snd_queuelen > 0\", (pcb->snd_queuelen > 0));\n      --pcb->snd_queuelen;\n      LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_process: SYN-SENT --queuelen %\"U16_F\"\\n\", (u16_t)pcb->snd_queuelen));\n      rseg = pcb->unacked;\n      pcb->unacked = rseg->next;\n      tcp_seg_free(rseg);\n\n      /* If there's nothing left to acknowledge, stop the retransmit\n         timer, otherwise reset it to start again */\n      if(pcb->unacked == NULL)\n        pcb->rtime = -1;\n      else {\n        pcb->rtime = 0;\n        pcb->nrtx = 0;\n      }\n\n      /* Call the user specified function to call when sucessfully\n       * connected. */\n      TCP_EVENT_CONNECTED(pcb, ERR_OK, err);\n      if (err == ERR_ABRT) {\n        return ERR_ABRT;\n      }\n      tcp_ack_now(pcb);\n    }\n    /* received ACK? possibly a half-open connection */\n    else if (flags & TCP_ACK) {\n      /* send a RST to bring the other side in a non-synchronized state. */\n      tcp_rst(ackno, seqno + tcplen, ipX_current_dest_addr(),\n        ipX_current_src_addr(), tcphdr->dest, tcphdr->src, ip_current_is_v6());\n    }\n    break;\n  case SYN_RCVD:\n    if (flags & TCP_ACK) {\n      /* expected ACK number? */\n      if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) {\n        u16_t old_cwnd;\n        pcb->state = ESTABLISHED;\n        LWIP_DEBUGF(TCP_DEBUG, (\"TCP connection established %\"U16_F\" -> %\"U16_F\".\\n\", inseg.tcphdr->src, inseg.tcphdr->dest));\n#if LWIP_CALLBACK_API\n        LWIP_ASSERT(\"pcb->accept != NULL\", pcb->accept != NULL);\n#endif\n        /* Call the accept function. */\n        TCP_EVENT_ACCEPT(pcb, ERR_OK, err);\n        if (err != ERR_OK) {\n          /* If the accept function returns with an error, we abort\n           * the connection. */\n          /* Already aborted? */\n          if (err != ERR_ABRT) {\n            tcp_abort(pcb);\n          }\n          return ERR_ABRT;\n        }\n        old_cwnd = pcb->cwnd;\n        /* If there was any data contained within this ACK,\n         * we'd better pass it on to the application as well. */\n        tcp_receive(pcb);\n\n        /* Prevent ACK for SYN to generate a sent event */\n        if (pcb->acked != 0) {\n          pcb->acked--;\n        }\n\n        pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss);\n\n        if (recv_flags & TF_GOT_FIN) {\n          tcp_ack_now(pcb);\n          pcb->state = CLOSE_WAIT;\n        }\n      } else {\n        /* incorrect ACK number, send RST */\n        tcp_rst(ackno, seqno + tcplen, ipX_current_dest_addr(),\n          ipX_current_src_addr(), tcphdr->dest, tcphdr->src, ip_current_is_v6());\n      }\n    } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) {\n      /* Looks like another copy of the SYN - retransmit our SYN-ACK */\n      tcp_rexmit(pcb);\n    }\n    break;\n  case CLOSE_WAIT:\n    /* FALLTHROUGH */\n  case ESTABLISHED:\n    tcp_receive(pcb);\n    if (recv_flags & TF_GOT_FIN) { /* passive close */\n      tcp_ack_now(pcb);\n      pcb->state = CLOSE_WAIT;\n    }\n    break;\n  case FIN_WAIT_1:\n    tcp_receive(pcb);\n    if (recv_flags & TF_GOT_FIN) {\n      if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {\n        LWIP_DEBUGF(TCP_DEBUG,\n          (\"TCP connection closed: FIN_WAIT_1 %\"U16_F\" -> %\"U16_F\".\\n\", inseg.tcphdr->src, inseg.tcphdr->dest));\n        tcp_ack_now(pcb);\n        tcp_pcb_purge(pcb);\n        TCP_RMV_ACTIVE(pcb);\n        pcb->state = TIME_WAIT;\n        TCP_REG(&tcp_tw_pcbs, pcb);\n      } else {\n        tcp_ack_now(pcb);\n        pcb->state = CLOSING;\n      }\n    } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) {\n      pcb->state = FIN_WAIT_2;\n    }\n    break;\n  case FIN_WAIT_2:\n    tcp_receive(pcb);\n    if (recv_flags & TF_GOT_FIN) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"TCP connection closed: FIN_WAIT_2 %\"U16_F\" -> %\"U16_F\".\\n\", inseg.tcphdr->src, inseg.tcphdr->dest));\n      tcp_ack_now(pcb);\n      tcp_pcb_purge(pcb);\n      TCP_RMV_ACTIVE(pcb);\n      pcb->state = TIME_WAIT;\n      TCP_REG(&tcp_tw_pcbs, pcb);\n    }\n    break;\n  case CLOSING:\n    tcp_receive(pcb);\n    if (flags & TCP_ACK && ackno == pcb->snd_nxt) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"TCP connection closed: CLOSING %\"U16_F\" -> %\"U16_F\".\\n\", inseg.tcphdr->src, inseg.tcphdr->dest));\n      tcp_pcb_purge(pcb);\n      TCP_RMV_ACTIVE(pcb);\n      pcb->state = TIME_WAIT;\n      TCP_REG(&tcp_tw_pcbs, pcb);\n    }\n    break;\n  case LAST_ACK:\n    tcp_receive(pcb);\n    if (flags & TCP_ACK && ackno == pcb->snd_nxt) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"TCP connection closed: LAST_ACK %\"U16_F\" -> %\"U16_F\".\\n\", inseg.tcphdr->src, inseg.tcphdr->dest));\n      /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */\n      recv_flags |= TF_CLOSED;\n    }\n    break;\n  default:\n    break;\n  }\n  return ERR_OK;\n}\n\n#if TCP_QUEUE_OOSEQ\n/**\n * Insert segment into the list (segments covered with new one will be deleted)\n *\n * Called from tcp_receive()\n */\nstatic void\ntcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next)\n{\n  struct tcp_seg *old_seg;\n\n  if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) {\n    /* received segment overlaps all following segments */\n    tcp_segs_free(next);\n    next = NULL;\n  }\n  else {\n    /* delete some following segments\n       oos queue may have segments with FIN flag */\n    while (next &&\n           TCP_SEQ_GEQ((seqno + cseg->len),\n                      (next->tcphdr->seqno + next->len))) {\n      /* cseg with FIN already processed */\n      if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) {\n        TCPH_SET_FLAG(cseg->tcphdr, TCP_FIN);\n      }\n      old_seg = next;\n      next = next->next;\n      tcp_seg_free(old_seg);\n    }\n    if (next &&\n        TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) {\n      /* We need to trim the incoming segment. */\n      cseg->len = (u16_t)(next->tcphdr->seqno - seqno);\n      pbuf_realloc(cseg->p, cseg->len);\n    }\n  }\n  cseg->next = next;\n}\n#endif /* TCP_QUEUE_OOSEQ */\n\n/**\n * Called by tcp_process. Checks if the given segment is an ACK for outstanding\n * data, and if so frees the memory of the buffered data. Next, is places the\n * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment\n * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until\n * it has been removed from the buffer.\n *\n * If the incoming segment constitutes an ACK for a segment that was used for RTT\n * estimation, the RTT is estimated here as well.\n *\n * Called from tcp_process().\n */\nstatic void\ntcp_receive(struct tcp_pcb *pcb)\n{\n  struct tcp_seg *next;\n#if TCP_QUEUE_OOSEQ\n  struct tcp_seg *prev, *cseg;\n#endif /* TCP_QUEUE_OOSEQ */\n  struct pbuf *p;\n  s32_t off;\n  s16_t m;\n  u32_t right_wnd_edge;\n  u16_t new_tot_len;\n  int found_dupack = 0;\n#if TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS\n  u32_t ooseq_blen;\n  u16_t ooseq_qlen;\n#endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */\n\n  LWIP_ASSERT(\"tcp_receive: wrong state\", pcb->state >= ESTABLISHED);\n\n  if (flags & TCP_ACK) {\n    right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2;\n\n    /* Update window. */\n    if (TCP_SEQ_LT(pcb->snd_wl1, seqno) ||\n       (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) ||\n       (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) {\n      pcb->snd_wnd = tcphdr->wnd;\n      /* keep track of the biggest window announced by the remote host to calculate\n         the maximum segment size */\n      if (pcb->snd_wnd_max < tcphdr->wnd) {\n        pcb->snd_wnd_max = tcphdr->wnd;\n      }\n      pcb->snd_wl1 = seqno;\n      pcb->snd_wl2 = ackno;\n      if (pcb->snd_wnd == 0) {\n        if (pcb->persist_backoff == 0) {\n          /* start persist timer */\n          pcb->persist_cnt = 0;\n          pcb->persist_backoff = 1;\n        }\n      } else if (pcb->persist_backoff > 0) {\n        /* stop persist timer */\n          pcb->persist_backoff = 0;\n      }\n      LWIP_DEBUGF(TCP_WND_DEBUG, (\"tcp_receive: window update %\"U16_F\"\\n\", pcb->snd_wnd));\n#if TCP_WND_DEBUG\n    } else {\n      if (pcb->snd_wnd != tcphdr->wnd) {\n        LWIP_DEBUGF(TCP_WND_DEBUG, \n                    (\"tcp_receive: no window update lastack %\"U32_F\" ackno %\"\n                     U32_F\" wl1 %\"U32_F\" seqno %\"U32_F\" wl2 %\"U32_F\"\\n\",\n                     pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2));\n      }\n#endif /* TCP_WND_DEBUG */\n    }\n\n    /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a\n     * duplicate ack if:\n     * 1) It doesn't ACK new data \n     * 2) length of received packet is zero (i.e. no payload) \n     * 3) the advertised window hasn't changed \n     * 4) There is outstanding unacknowledged data (retransmission timer running)\n     * 5) The ACK is == biggest ACK sequence number so far seen (snd_una)\n     * \n     * If it passes all five, should process as a dupack: \n     * a) dupacks < 3: do nothing \n     * b) dupacks == 3: fast retransmit \n     * c) dupacks > 3: increase cwnd \n     * \n     * If it only passes 1-3, should reset dupack counter (and add to\n     * stats, which we don't do in lwIP)\n     *\n     * If it only passes 1, should reset dupack counter\n     *\n     */\n\n    /* Clause 1 */\n    if (TCP_SEQ_LEQ(ackno, pcb->lastack)) {\n      pcb->acked = 0;\n      /* Clause 2 */\n      if (tcplen == 0) {\n        /* Clause 3 */\n        if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){\n          /* Clause 4 */\n          if (pcb->rtime >= 0) {\n            /* Clause 5 */\n            if (pcb->lastack == ackno) {\n              found_dupack = 1;\n              if ((u8_t)(pcb->dupacks + 1) > pcb->dupacks) {\n                ++pcb->dupacks;\n              }\n              if (pcb->dupacks > 3) {\n                /* Inflate the congestion window, but not if it means that\n                   the value overflows. */\n                if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {\n                  pcb->cwnd += pcb->mss;\n                }\n              } else if (pcb->dupacks == 3) {\n                /* Do fast retransmit */\n                tcp_rexmit_fast(pcb);\n              }\n            }\n          }\n        }\n      }\n      /* If Clause (1) or more is true, but not a duplicate ack, reset\n       * count of consecutive duplicate acks */\n      if (!found_dupack) {\n        pcb->dupacks = 0;\n      }\n    } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){\n      /* We come here when the ACK acknowledges new data. */\n\n      /* Reset the \"IN Fast Retransmit\" flag, since we are no longer\n         in fast retransmit. Also reset the congestion window to the\n         slow start threshold. */\n      if (pcb->flags & TF_INFR) {\n        pcb->flags &= ~TF_INFR;\n        pcb->cwnd = pcb->ssthresh;\n      }\n\n      /* Reset the number of retransmissions. */\n      pcb->nrtx = 0;\n\n      /* Reset the retransmission time-out. */\n      pcb->rto = (pcb->sa >> 3) + pcb->sv;\n\n      /* Update the send buffer space. Diff between the two can never exceed 64K? */\n      pcb->acked = (u16_t)(ackno - pcb->lastack);\n\n      pcb->snd_buf += pcb->acked;\n\n      /* Reset the fast retransmit variables. */\n      pcb->dupacks = 0;\n      pcb->lastack = ackno;\n\n      /* Update the congestion control variables (cwnd and\n         ssthresh). */\n      if (pcb->state >= ESTABLISHED) {\n        if (pcb->cwnd < pcb->ssthresh) {\n          if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) {\n            pcb->cwnd += pcb->mss;\n          }\n          LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_receive: slow start cwnd %\"U16_F\"\\n\", pcb->cwnd));\n        } else {\n          u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd);\n          if (new_cwnd > pcb->cwnd) {\n            pcb->cwnd = new_cwnd;\n          }\n          LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_receive: congestion avoidance cwnd %\"U16_F\"\\n\", pcb->cwnd));\n        }\n      }\n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: ACK for %\"U32_F\", unacked->seqno %\"U32_F\":%\"U32_F\"\\n\",\n                                    ackno,\n                                    pcb->unacked != NULL?\n                                    ntohl(pcb->unacked->tcphdr->seqno): 0,\n                                    pcb->unacked != NULL?\n                                    ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0));\n\n      /* Remove segment from the unacknowledged list if the incoming\n         ACK acknowlegdes them. */\n      while (pcb->unacked != NULL &&\n             TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) +\n                         TCP_TCPLEN(pcb->unacked), ackno)) {\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: removing %\"U32_F\":%\"U32_F\" from pcb->unacked\\n\",\n                                      ntohl(pcb->unacked->tcphdr->seqno),\n                                      ntohl(pcb->unacked->tcphdr->seqno) +\n                                      TCP_TCPLEN(pcb->unacked)));\n\n        next = pcb->unacked;\n        pcb->unacked = pcb->unacked->next;\n\n        LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_receive: queuelen %\"U16_F\" ... \", (u16_t)pcb->snd_queuelen));\n        LWIP_ASSERT(\"pcb->snd_queuelen >= pbuf_clen(next->p)\", (pcb->snd_queuelen >= pbuf_clen(next->p)));\n        /* Prevent ACK for FIN to generate a sent event */\n        if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) {\n          pcb->acked--;\n        }\n\n        pcb->snd_queuelen -= pbuf_clen(next->p);\n        tcp_seg_free(next);\n\n        LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"%\"U16_F\" (after freeing unacked)\\n\", (u16_t)pcb->snd_queuelen));\n        if (pcb->snd_queuelen != 0) {\n          LWIP_ASSERT(\"tcp_receive: valid queue length\", pcb->unacked != NULL ||\n                      pcb->unsent != NULL);\n        }\n      }\n\n      /* If there's nothing left to acknowledge, stop the retransmit\n         timer, otherwise reset it to start again */\n      if(pcb->unacked == NULL)\n        pcb->rtime = -1;\n      else\n        pcb->rtime = 0;\n\n      pcb->polltmr = 0;\n\n#if LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS\n      if (PCB_ISIPV6(pcb)) {\n        /* Inform neighbor reachability of forward progress. */\n        nd6_reachability_hint(ip6_current_src_addr());\n      }\n#endif /* LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS*/\n    } else {\n      /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */\n      pcb->acked = 0;\n    }\n\n    /* We go through the ->unsent list to see if any of the segments\n       on the list are acknowledged by the ACK. This may seem\n       strange since an \"unsent\" segment shouldn't be acked. The\n       rationale is that lwIP puts all outstanding segments on the\n       ->unsent list after a retransmission, so these segments may\n       in fact have been sent once. */\n    while (pcb->unsent != NULL &&\n           TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) + \n                           TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) {\n      LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: removing %\"U32_F\":%\"U32_F\" from pcb->unsent\\n\",\n                                    ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) +\n                                    TCP_TCPLEN(pcb->unsent)));\n\n      next = pcb->unsent;\n      pcb->unsent = pcb->unsent->next;\n#if TCP_OVERSIZE\n      if (pcb->unsent == NULL) {\n        pcb->unsent_oversize = 0;\n      }\n#endif /* TCP_OVERSIZE */ \n      LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_receive: queuelen %\"U16_F\" ... \", (u16_t)pcb->snd_queuelen));\n      LWIP_ASSERT(\"pcb->snd_queuelen >= pbuf_clen(next->p)\", (pcb->snd_queuelen >= pbuf_clen(next->p)));\n      /* Prevent ACK for FIN to generate a sent event */\n      if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) {\n        pcb->acked--;\n      }\n      pcb->snd_queuelen -= pbuf_clen(next->p);\n      tcp_seg_free(next);\n      LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"%\"U16_F\" (after freeing unsent)\\n\", (u16_t)pcb->snd_queuelen));\n      if (pcb->snd_queuelen != 0) {\n        LWIP_ASSERT(\"tcp_receive: valid queue length\",\n          pcb->unacked != NULL || pcb->unsent != NULL);\n      }\n    }\n    /* End of ACK for new data processing. */\n\n    LWIP_DEBUGF(TCP_RTO_DEBUG, (\"tcp_receive: pcb->rttest %\"U32_F\" rtseq %\"U32_F\" ackno %\"U32_F\"\\n\",\n                                pcb->rttest, pcb->rtseq, ackno));\n\n    /* RTT estimation calculations. This is done by checking if the\n       incoming segment acknowledges the segment we use to take a\n       round-trip time measurement. */\n    if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) {\n      /* diff between this shouldn't exceed 32K since this are tcp timer ticks\n         and a round-trip shouldn't be that long... */\n      m = (s16_t)(tcp_ticks - pcb->rttest);\n\n      LWIP_DEBUGF(TCP_RTO_DEBUG, (\"tcp_receive: experienced rtt %\"U16_F\" ticks (%\"U16_F\" msec).\\n\",\n                                  m, m * TCP_SLOW_INTERVAL));\n\n      /* This is taken directly from VJs original code in his paper */\n      m = m - (pcb->sa >> 3);\n      pcb->sa += m;\n      if (m < 0) {\n        m = -m;\n      }\n      m = m - (pcb->sv >> 2);\n      pcb->sv += m;\n      pcb->rto = (pcb->sa >> 3) + pcb->sv;\n\n      LWIP_DEBUGF(TCP_RTO_DEBUG, (\"tcp_receive: RTO %\"U16_F\" (%\"U16_F\" milliseconds)\\n\",\n                                  pcb->rto, pcb->rto * TCP_SLOW_INTERVAL));\n\n      pcb->rttest = 0;\n    }\n  }\n\n  /* If the incoming segment contains data, we must process it\n     further unless the pcb already received a FIN.\n     (RFC 793, chapeter 3.9, \"SEGMENT ARRIVES\" in states CLOSE-WAIT, CLOSING,\n     LAST-ACK and TIME-WAIT: \"Ignore the segment text.\") */\n  if ((tcplen > 0) && (pcb->state < CLOSE_WAIT)) {\n    /* This code basically does three things:\n\n    +) If the incoming segment contains data that is the next\n    in-sequence data, this data is passed to the application. This\n    might involve trimming the first edge of the data. The rcv_nxt\n    variable and the advertised window are adjusted.\n\n    +) If the incoming segment has data that is above the next\n    sequence number expected (->rcv_nxt), the segment is placed on\n    the ->ooseq queue. This is done by finding the appropriate\n    place in the ->ooseq queue (which is ordered by sequence\n    number) and trim the segment in both ends if needed. An\n    immediate ACK is sent to indicate that we received an\n    out-of-sequence segment.\n\n    +) Finally, we check if the first segment on the ->ooseq queue\n    now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If\n    rcv_nxt > ooseq->seqno, we must trim the first edge of the\n    segment on ->ooseq before we adjust rcv_nxt. The data in the\n    segments that are now on sequence are chained onto the\n    incoming segment so that we only need to call the application\n    once.\n    */\n\n    /* First, we check if we must trim the first edge. We have to do\n       this if the sequence number of the incoming segment is less\n       than rcv_nxt, and the sequence number plus the length of the\n       segment is larger than rcv_nxt. */\n    /*    if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){\n          if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/\n    if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){\n      /* Trimming the first edge is done by pushing the payload\n         pointer in the pbuf downwards. This is somewhat tricky since\n         we do not want to discard the full contents of the pbuf up to\n         the new starting point of the data since we have to keep the\n         TCP header which is present in the first pbuf in the chain.\n\n         What is done is really quite a nasty hack: the first pbuf in\n         the pbuf chain is pointed to by inseg.p. Since we need to be\n         able to deallocate the whole pbuf, we cannot change this\n         inseg.p pointer to point to any of the later pbufs in the\n         chain. Instead, we point the ->payload pointer in the first\n         pbuf to data in one of the later pbufs. We also set the\n         inseg.data pointer to point to the right place. This way, the\n         ->p pointer will still point to the first pbuf, but the\n         ->p->payload pointer will point to data in another pbuf.\n\n         After we are done with adjusting the pbuf pointers we must\n         adjust the ->data pointer in the seg and the segment\n         length.*/\n\n      off = pcb->rcv_nxt - seqno;\n      p = inseg.p;\n      LWIP_ASSERT(\"inseg.p != NULL\", inseg.p);\n      LWIP_ASSERT(\"insane offset!\", (off < 0x7fff));\n      if (inseg.p->len < off) {\n        LWIP_ASSERT(\"pbuf too short!\", (((s32_t)inseg.p->tot_len) >= off));\n        new_tot_len = (u16_t)(inseg.p->tot_len - off);\n        while (p->len < off) {\n          off -= p->len;\n          /* KJM following line changed (with addition of new_tot_len var)\n             to fix bug #9076\n             inseg.p->tot_len -= p->len; */\n          p->tot_len = new_tot_len;\n          p->len = 0;\n          p = p->next;\n        }\n        if(pbuf_header(p, (s16_t)-off)) {\n          /* Do we need to cope with this failing?  Assert for now */\n          LWIP_ASSERT(\"pbuf_header failed\", 0);\n        }\n      } else {\n        if(pbuf_header(inseg.p, (s16_t)-off)) {\n          /* Do we need to cope with this failing?  Assert for now */\n          LWIP_ASSERT(\"pbuf_header failed\", 0);\n        }\n      }\n      inseg.len -= (u16_t)(pcb->rcv_nxt - seqno);\n      inseg.tcphdr->seqno = seqno = pcb->rcv_nxt;\n    }\n    else {\n      if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){\n        /* the whole segment is < rcv_nxt */\n        /* must be a duplicate of a packet that has already been correctly handled */\n\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: duplicate seqno %\"U32_F\"\\n\", seqno));\n        tcp_ack_now(pcb);\n      }\n    }\n\n    /* The sequence number must be within the window (above rcv_nxt\n       and below rcv_nxt + rcv_wnd) in order to be further\n       processed. */\n    if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, \n                        pcb->rcv_nxt + pcb->rcv_wnd - 1)){\n      if (pcb->rcv_nxt == seqno) {\n        /* The incoming segment is the next in sequence. We check if\n           we have to trim the end of the segment and update rcv_nxt\n           and pass the data to the application. */\n        tcplen = TCP_TCPLEN(&inseg);\n\n        if (tcplen > pcb->rcv_wnd) {\n          LWIP_DEBUGF(TCP_INPUT_DEBUG, \n                      (\"tcp_receive: other end overran receive window\"\n                       \"seqno %\"U32_F\" len %\"U16_F\" right edge %\"U32_F\"\\n\",\n                       seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd));\n          if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) {\n            /* Must remove the FIN from the header as we're trimming \n             * that byte of sequence-space from the packet */\n            TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN);\n          }\n          /* Adjust length of segment to fit in the window. */\n          inseg.len = pcb->rcv_wnd;\n          if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) {\n            inseg.len -= 1;\n          }\n          pbuf_realloc(inseg.p, inseg.len);\n          tcplen = TCP_TCPLEN(&inseg);\n          LWIP_ASSERT(\"tcp_receive: segment not trimmed correctly to rcv_wnd\\n\",\n                      (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd));\n        }\n#if TCP_QUEUE_OOSEQ\n        /* Received in-sequence data, adjust ooseq data if:\n           - FIN has been received or\n           - inseq overlaps with ooseq */\n        if (pcb->ooseq != NULL) {\n          if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) {\n            LWIP_DEBUGF(TCP_INPUT_DEBUG, \n                        (\"tcp_receive: received in-order FIN, binning ooseq queue\\n\"));\n            /* Received in-order FIN means anything that was received\n             * out of order must now have been received in-order, so\n             * bin the ooseq queue */\n            while (pcb->ooseq != NULL) {\n              struct tcp_seg *old_ooseq = pcb->ooseq;\n              pcb->ooseq = pcb->ooseq->next;\n              tcp_seg_free(old_ooseq);\n            }\n          } else {\n            next = pcb->ooseq;\n            /* Remove all segments on ooseq that are covered by inseg already.\n             * FIN is copied from ooseq to inseg if present. */\n            while (next &&\n                   TCP_SEQ_GEQ(seqno + tcplen,\n                               next->tcphdr->seqno + next->len)) {\n              /* inseg cannot have FIN here (already processed above) */\n              if (TCPH_FLAGS(next->tcphdr) & TCP_FIN &&\n                  (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) {\n                TCPH_SET_FLAG(inseg.tcphdr, TCP_FIN);\n                tcplen = TCP_TCPLEN(&inseg);\n              }\n              prev = next;\n              next = next->next;\n              tcp_seg_free(prev);\n            }\n            /* Now trim right side of inseg if it overlaps with the first\n             * segment on ooseq */\n            if (next &&\n                TCP_SEQ_GT(seqno + tcplen,\n                           next->tcphdr->seqno)) {\n              /* inseg cannot have FIN here (already processed above) */\n              inseg.len = (u16_t)(next->tcphdr->seqno - seqno);\n              if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) {\n                inseg.len -= 1;\n              }\n              pbuf_realloc(inseg.p, inseg.len);\n              tcplen = TCP_TCPLEN(&inseg);\n              LWIP_ASSERT(\"tcp_receive: segment not trimmed correctly to ooseq queue\\n\",\n                          (seqno + tcplen) == next->tcphdr->seqno);\n            }\n            pcb->ooseq = next;\n          }\n        }\n#endif /* TCP_QUEUE_OOSEQ */\n\n        pcb->rcv_nxt = seqno + tcplen;\n\n        /* Update the receiver's (our) window. */\n        LWIP_ASSERT(\"tcp_receive: tcplen > rcv_wnd\\n\", pcb->rcv_wnd >= tcplen);\n        pcb->rcv_wnd -= tcplen;\n\n        tcp_update_rcv_ann_wnd(pcb);\n\n        /* If there is data in the segment, we make preparations to\n           pass this up to the application. The ->recv_data variable\n           is used for holding the pbuf that goes to the\n           application. The code for reassembling out-of-sequence data\n           chains its data on this pbuf as well.\n\n           If the segment was a FIN, we set the TF_GOT_FIN flag that will\n           be used to indicate to the application that the remote side has\n           closed its end of the connection. */\n        if (inseg.p->tot_len > 0) {\n          recv_data = inseg.p;\n          /* Since this pbuf now is the responsibility of the\n             application, we delete our reference to it so that we won't\n             (mistakingly) deallocate it. */\n          inseg.p = NULL;\n        }\n        if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) {\n          LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: received FIN.\\n\"));\n          recv_flags |= TF_GOT_FIN;\n        }\n\n#if TCP_QUEUE_OOSEQ\n        /* We now check if we have segments on the ->ooseq queue that\n           are now in sequence. */\n        while (pcb->ooseq != NULL &&\n               pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) {\n\n          cseg = pcb->ooseq;\n          seqno = pcb->ooseq->tcphdr->seqno;\n\n          pcb->rcv_nxt += TCP_TCPLEN(cseg);\n          LWIP_ASSERT(\"tcp_receive: ooseq tcplen > rcv_wnd\\n\",\n                      pcb->rcv_wnd >= TCP_TCPLEN(cseg));\n          pcb->rcv_wnd -= TCP_TCPLEN(cseg);\n\n          tcp_update_rcv_ann_wnd(pcb);\n\n          if (cseg->p->tot_len > 0) {\n            /* Chain this pbuf onto the pbuf that we will pass to\n               the application. */\n            if (recv_data) {\n              pbuf_cat(recv_data, cseg->p);\n            } else {\n              recv_data = cseg->p;\n            }\n            cseg->p = NULL;\n          }\n          if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) {\n            LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_receive: dequeued FIN.\\n\"));\n            recv_flags |= TF_GOT_FIN;\n            if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */\n              pcb->state = CLOSE_WAIT;\n            } \n          }\n\n          pcb->ooseq = cseg->next;\n          tcp_seg_free(cseg);\n        }\n#endif /* TCP_QUEUE_OOSEQ */\n\n\n        /* Acknowledge the segment(s). */\n        tcp_ack(pcb);\n\n#if LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS\n        if (PCB_ISIPV6(pcb)) {\n          /* Inform neighbor reachability of forward progress. */\n          nd6_reachability_hint(ip6_current_src_addr());\n        }\n#endif /* LWIP_IPV6 && LWIP_ND6_TCP_REACHABILITY_HINTS*/\n\n      } else {\n        /* We get here if the incoming segment is out-of-sequence. */\n        tcp_send_empty_ack(pcb);\n#if TCP_QUEUE_OOSEQ\n        /* We queue the segment on the ->ooseq queue. */\n        if (pcb->ooseq == NULL) {\n          pcb->ooseq = tcp_seg_copy(&inseg);\n        } else {\n          /* If the queue is not empty, we walk through the queue and\n             try to find a place where the sequence number of the\n             incoming segment is between the sequence numbers of the\n             previous and the next segment on the ->ooseq queue. That is\n             the place where we put the incoming segment. If needed, we\n             trim the second edges of the previous and the incoming\n             segment so that it will fit into the sequence.\n\n             If the incoming segment has the same sequence number as a\n             segment on the ->ooseq queue, we discard the segment that\n             contains less data. */\n\n          prev = NULL;\n          for(next = pcb->ooseq; next != NULL; next = next->next) {\n            if (seqno == next->tcphdr->seqno) {\n              /* The sequence number of the incoming segment is the\n                 same as the sequence number of the segment on\n                 ->ooseq. We check the lengths to see which one to\n                 discard. */\n              if (inseg.len > next->len) {\n                /* The incoming segment is larger than the old\n                   segment. We replace some segments with the new\n                   one. */\n                cseg = tcp_seg_copy(&inseg);\n                if (cseg != NULL) {\n                  if (prev != NULL) {\n                    prev->next = cseg;\n                  } else {\n                    pcb->ooseq = cseg;\n                  }\n                  tcp_oos_insert_segment(cseg, next);\n                }\n                break;\n              } else {\n                /* Either the lenghts are the same or the incoming\n                   segment was smaller than the old one; in either\n                   case, we ditch the incoming segment. */\n                break;\n              }\n            } else {\n              if (prev == NULL) {\n                if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {\n                  /* The sequence number of the incoming segment is lower\n                     than the sequence number of the first segment on the\n                     queue. We put the incoming segment first on the\n                     queue. */\n                  cseg = tcp_seg_copy(&inseg);\n                  if (cseg != NULL) {\n                    pcb->ooseq = cseg;\n                    tcp_oos_insert_segment(cseg, next);\n                  }\n                  break;\n                }\n              } else {\n                /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) &&\n                  TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/\n                if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)) {\n                  /* The sequence number of the incoming segment is in\n                     between the sequence numbers of the previous and\n                     the next segment on ->ooseq. We trim trim the previous\n                     segment, delete next segments that included in received segment\n                     and trim received, if needed. */\n                  cseg = tcp_seg_copy(&inseg);\n                  if (cseg != NULL) {\n                    if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) {\n                      /* We need to trim the prev segment. */\n                      prev->len = (u16_t)(seqno - prev->tcphdr->seqno);\n                      pbuf_realloc(prev->p, prev->len);\n                    }\n                    prev->next = cseg;\n                    tcp_oos_insert_segment(cseg, next);\n                  }\n                  break;\n                }\n              }\n              /* If the \"next\" segment is the last segment on the\n                 ooseq queue, we add the incoming segment to the end\n                 of the list. */\n              if (next->next == NULL &&\n                  TCP_SEQ_GT(seqno, next->tcphdr->seqno)) {\n                if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) {\n                  /* segment \"next\" already contains all data */\n                  break;\n                }\n                next->next = tcp_seg_copy(&inseg);\n                if (next->next != NULL) {\n                  if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) {\n                    /* We need to trim the last segment. */\n                    next->len = (u16_t)(seqno - next->tcphdr->seqno);\n                    pbuf_realloc(next->p, next->len);\n                  }\n                  /* check if the remote side overruns our receive window */\n                  if ((u32_t)tcplen + seqno > pcb->rcv_nxt + (u32_t)pcb->rcv_wnd) {\n                    LWIP_DEBUGF(TCP_INPUT_DEBUG, \n                                (\"tcp_receive: other end overran receive window\"\n                                 \"seqno %\"U32_F\" len %\"U16_F\" right edge %\"U32_F\"\\n\",\n                                 seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd));\n                    if (TCPH_FLAGS(next->next->tcphdr) & TCP_FIN) {\n                      /* Must remove the FIN from the header as we're trimming \n                       * that byte of sequence-space from the packet */\n                      TCPH_FLAGS_SET(next->next->tcphdr, TCPH_FLAGS(next->next->tcphdr) &~ TCP_FIN);\n                    }\n                    /* Adjust length of segment to fit in the window. */\n                    next->next->len = pcb->rcv_nxt + pcb->rcv_wnd - seqno;\n                    pbuf_realloc(next->next->p, next->next->len);\n                    tcplen = TCP_TCPLEN(next->next);\n                    LWIP_ASSERT(\"tcp_receive: segment not trimmed correctly to rcv_wnd\\n\",\n                                (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd));\n                  }\n                }\n                break;\n              }\n            }\n            prev = next;\n          }\n        }\n#if TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS\n        /* Check that the data on ooseq doesn't exceed one of the limits\n           and throw away everything above that limit. */\n        ooseq_blen = 0;\n        ooseq_qlen = 0;\n        prev = NULL;\n        for(next = pcb->ooseq; next != NULL; prev = next, next = next->next) {\n          struct pbuf *p = next->p;\n          ooseq_blen += p->tot_len;\n          ooseq_qlen += pbuf_clen(p);\n          if ((ooseq_blen > TCP_OOSEQ_MAX_BYTES) ||\n              (ooseq_qlen > TCP_OOSEQ_MAX_PBUFS)) {\n             /* too much ooseq data, dump this and everything after it */\n             tcp_segs_free(next);\n             if (prev == NULL) {\n               /* first ooseq segment is too much, dump the whole queue */\n               pcb->ooseq = NULL;\n             } else {\n               /* just dump 'next' and everything after it */\n               prev->next = NULL;\n             }\n             break;\n          }\n        }\n#endif /* TCP_OOSEQ_MAX_BYTES || TCP_OOSEQ_MAX_PBUFS */\n#endif /* TCP_QUEUE_OOSEQ */\n      }\n    } else {\n      /* The incoming segment is not withing the window. */\n      tcp_send_empty_ack(pcb);\n    }\n  } else {\n    /* Segments with length 0 is taken care of here. Segments that\n       fall out of the window are ACKed. */\n    /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) ||\n      TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/\n    if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){\n      tcp_ack_now(pcb);\n    }\n  }\n}\n\n/**\n * Parses the options contained in the incoming segment. \n *\n * Called from tcp_listen_input() and tcp_process().\n * Currently, only the MSS option is supported!\n *\n * @param pcb the tcp_pcb for which a segment arrived\n */\nstatic void\ntcp_parseopt(struct tcp_pcb *pcb)\n{\n  u16_t c, max_c;\n  u16_t mss;\n  u8_t *opts, opt;\n#if LWIP_TCP_TIMESTAMPS\n  u32_t tsval;\n#endif\n\n  opts = (u8_t *)tcphdr + TCP_HLEN;\n\n  /* Parse the TCP MSS option, if present. */\n  if(TCPH_HDRLEN(tcphdr) > 0x5) {\n    max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2;\n    for (c = 0; c < max_c; ) {\n      opt = opts[c];\n      switch (opt) {\n      case 0x00:\n        /* End of options. */\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: EOL\\n\"));\n        return;\n      case 0x01:\n        /* NOP option. */\n        ++c;\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: NOP\\n\"));\n        break;\n      case 0x02:\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: MSS\\n\"));\n        if (opts[c + 1] != 0x04 || c + 0x04 > max_c) {\n          /* Bad length */\n          LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: bad length\\n\"));\n          return;\n        }\n        /* An MSS option with the right option length. */\n        mss = (opts[c + 2] << 8) | opts[c + 3];\n        /* Limit the mss to the configured TCP_MSS and prevent division by zero */\n        pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss;\n        /* Advance to next option */\n        c += 0x04;\n        break;\n#if LWIP_TCP_TIMESTAMPS\n      case 0x08:\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: TS\\n\"));\n        if (opts[c + 1] != 0x0A || c + 0x0A > max_c) {\n          /* Bad length */\n          LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: bad length\\n\"));\n          return;\n        }\n        /* TCP timestamp option with valid length */\n        tsval = (opts[c+2]) | (opts[c+3] << 8) | \n          (opts[c+4] << 16) | (opts[c+5] << 24);\n        if (flags & TCP_SYN) {\n          pcb->ts_recent = ntohl(tsval);\n          pcb->flags |= TF_TIMESTAMP;\n        } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno+tcplen)) {\n          pcb->ts_recent = ntohl(tsval);\n        }\n        /* Advance to next option */\n        c += 0x0A;\n        break;\n#endif\n      default:\n        LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: other\\n\"));\n        if (opts[c + 1] == 0) {\n          LWIP_DEBUGF(TCP_INPUT_DEBUG, (\"tcp_parseopt: bad length\\n\"));\n          /* If the length field is zero, the options are malformed\n             and we don't process them further. */\n          return;\n        }\n        /* All other options have a length field, so that we easily\n           can skip past them. */\n        c += opts[c + 1];\n      }\n    }\n  }\n}\n\n#endif /* LWIP_TCP */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/tcp_out.c",
    "content": "/**\n * @file\n * Transmission Control Protocol, outgoing traffic\n *\n * The output functions of TCP.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/def.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/inet_chksum.h\"\n#if LWIP_TCP_TIMESTAMPS\n#include \"lwip/sys.h\"\n#endif\n\n#include <string.h>\n\n/* Define some copy-macros for checksum-on-copy so that the code looks\n   nicer by preventing too many ifdef's. */\n#if TCP_CHECKSUM_ON_COPY\n#define TCP_DATA_COPY(dst, src, len, seg) do { \\\n  tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), \\\n                     len, &seg->chksum, &seg->chksum_swapped); \\\n  seg->flags |= TF_SEG_DATA_CHECKSUMMED; } while(0)\n#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped)  \\\n  tcp_seg_add_chksum(LWIP_CHKSUM_COPY(dst, src, len), len, chksum, chksum_swapped);\n#else /* TCP_CHECKSUM_ON_COPY*/\n#define TCP_DATA_COPY(dst, src, len, seg)                     MEMCPY(dst, src, len)\n#define TCP_DATA_COPY2(dst, src, len, chksum, chksum_swapped) MEMCPY(dst, src, len)\n#endif /* TCP_CHECKSUM_ON_COPY*/\n\n/** Define this to 1 for an extra check that the output checksum is valid\n * (usefule when the checksum is generated by the application, not the stack) */\n#ifndef TCP_CHECKSUM_ON_COPY_SANITY_CHECK\n#define TCP_CHECKSUM_ON_COPY_SANITY_CHECK   0\n#endif\n\n/* Forward declarations.*/\nstatic void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb);\n\n/** Allocate a pbuf and create a tcphdr at p->payload, used for output\n * functions other than the default tcp_output -> tcp_output_segment\n * (e.g. tcp_send_empty_ack, etc.)\n *\n * @param pcb tcp pcb for which to send a packet (used to initialize tcp_hdr)\n * @param optlen length of header-options\n * @param datalen length of tcp data to reserve in pbuf\n * @param seqno_be seqno in network byte order (big-endian)\n * @return pbuf with p->payload being the tcp_hdr\n */\nstatic struct pbuf *\ntcp_output_alloc_header(struct tcp_pcb *pcb, u16_t optlen, u16_t datalen,\n                      u32_t seqno_be /* already in network byte order */)\n{\n  struct tcp_hdr *tcphdr;\n  struct pbuf *p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen + datalen, PBUF_RAM);\n  if (p != NULL) {\n    LWIP_ASSERT(\"check that first pbuf can hold struct tcp_hdr\",\n                 (p->len >= TCP_HLEN + optlen));\n    tcphdr = (struct tcp_hdr *)p->payload;\n    tcphdr->src = htons(pcb->local_port);\n    tcphdr->dest = htons(pcb->remote_port);\n    tcphdr->seqno = seqno_be;\n    tcphdr->ackno = htonl(pcb->rcv_nxt);\n    TCPH_HDRLEN_FLAGS_SET(tcphdr, (5 + optlen / 4), TCP_ACK);\n    tcphdr->wnd = htons(pcb->rcv_ann_wnd);\n    tcphdr->chksum = 0;\n    tcphdr->urgp = 0;\n\n    /* If we're sending a packet, update the announced right window edge */\n    pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;\n  }\n  return p;\n}\n\n/**\n * Called by tcp_close() to send a segment including FIN flag but not data.\n *\n * @param pcb the tcp_pcb over which to send a segment\n * @return ERR_OK if sent, another err_t otherwise\n */\nerr_t\ntcp_send_fin(struct tcp_pcb *pcb)\n{\n  /* first, try to add the fin to the last unsent segment */\n  if (pcb->unsent != NULL) {\n    struct tcp_seg *last_unsent;\n    for (last_unsent = pcb->unsent; last_unsent->next != NULL;\n         last_unsent = last_unsent->next);\n\n    if ((TCPH_FLAGS(last_unsent->tcphdr) & (TCP_SYN | TCP_FIN | TCP_RST)) == 0) {\n      /* no SYN/FIN/RST flag in the header, we can add the FIN flag */\n      TCPH_SET_FLAG(last_unsent->tcphdr, TCP_FIN);\n      pcb->flags |= TF_FIN;\n      return ERR_OK;\n    }\n  }\n  /* no data, no length, flags, copy=1, no optdata */\n  return tcp_enqueue_flags(pcb, TCP_FIN);\n}\n\n/**\n * Create a TCP segment with prefilled header.\n *\n * Called by tcp_write and tcp_enqueue_flags.\n *\n * @param pcb Protocol control block for the TCP connection.\n * @param p pbuf that is used to hold the TCP header.\n * @param flags TCP flags for header.\n * @param seqno TCP sequence number of this packet\n * @param optflags options to include in TCP header\n * @return a new tcp_seg pointing to p, or NULL.\n * The TCP header is filled in except ackno and wnd.\n * p is freed on failure.\n */\nstatic struct tcp_seg *\ntcp_create_segment(struct tcp_pcb *pcb, struct pbuf *p, u8_t flags, u32_t seqno, u8_t optflags)\n{\n  struct tcp_seg *seg;\n  u8_t optlen = LWIP_TCP_OPT_LENGTH(optflags);\n\n  if ((seg = (struct tcp_seg *)memp_malloc(MEMP_TCP_SEG)) == NULL) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_create_segment: no memory.\\n\"));\n    pbuf_free(p);\n    return NULL;\n  }\n  seg->flags = optflags;\n  seg->next = NULL;\n  seg->p = p;\n  seg->len = p->tot_len - optlen;\n#if TCP_OVERSIZE_DBGCHECK\n  seg->oversize_left = 0;\n#endif /* TCP_OVERSIZE_DBGCHECK */\n#if TCP_CHECKSUM_ON_COPY\n  seg->chksum = 0;\n  seg->chksum_swapped = 0;\n  /* check optflags */\n  LWIP_ASSERT(\"invalid optflags passed: TF_SEG_DATA_CHECKSUMMED\",\n              (optflags & TF_SEG_DATA_CHECKSUMMED) == 0);\n#endif /* TCP_CHECKSUM_ON_COPY */\n\n  /* build TCP header */\n  if (pbuf_header(p, TCP_HLEN)) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_create_segment: no room for TCP header in pbuf.\\n\"));\n    TCP_STATS_INC(tcp.err);\n    tcp_seg_free(seg);\n    return NULL;\n  }\n  seg->tcphdr = (struct tcp_hdr *)seg->p->payload;\n  seg->tcphdr->src = htons(pcb->local_port);\n  seg->tcphdr->dest = htons(pcb->remote_port);\n  seg->tcphdr->seqno = htonl(seqno);\n  /* ackno is set in tcp_output */\n  TCPH_HDRLEN_FLAGS_SET(seg->tcphdr, (5 + optlen / 4), flags);\n  /* wnd and chksum are set in tcp_output */\n  seg->tcphdr->urgp = 0;\n  return seg;\n} \n\n/**\n * Allocate a PBUF_RAM pbuf, perhaps with extra space at the end.\n *\n * This function is like pbuf_alloc(layer, length, PBUF_RAM) except\n * there may be extra bytes available at the end.\n *\n * @param layer flag to define header size.\n * @param length size of the pbuf's payload.\n * @param max_length maximum usable size of payload+oversize.\n * @param oversize pointer to a u16_t that will receive the number of usable tail bytes.\n * @param pcb The TCP connection that willo enqueue the pbuf.\n * @param apiflags API flags given to tcp_write.\n * @param first_seg true when this pbuf will be used in the first enqueued segment.\n * @param \n */\n#if TCP_OVERSIZE\nstatic struct pbuf *\ntcp_pbuf_prealloc(pbuf_layer layer, u16_t length, u16_t max_length,\n                  u16_t *oversize, struct tcp_pcb *pcb, u8_t apiflags,\n                  u8_t first_seg)\n{\n  struct pbuf *p;\n  u16_t alloc = length;\n\n#if LWIP_NETIF_TX_SINGLE_PBUF\n  LWIP_UNUSED_ARG(max_length);\n  LWIP_UNUSED_ARG(pcb);\n  LWIP_UNUSED_ARG(apiflags);\n  LWIP_UNUSED_ARG(first_seg);\n  /* always create MSS-sized pbufs */\n  alloc = max_length;\n#else /* LWIP_NETIF_TX_SINGLE_PBUF */\n  if (length < max_length) {\n    /* Should we allocate an oversized pbuf, or just the minimum\n     * length required? If tcp_write is going to be called again\n     * before this segment is transmitted, we want the oversized\n     * buffer. If the segment will be transmitted immediately, we can\n     * save memory by allocating only length. We use a simple\n     * heuristic based on the following information:\n     *\n     * Did the user set TCP_WRITE_FLAG_MORE?\n     *\n     * Will the Nagle algorithm defer transmission of this segment?\n     */\n    if ((apiflags & TCP_WRITE_FLAG_MORE) ||\n        (!(pcb->flags & TF_NODELAY) &&\n         (!first_seg ||\n          pcb->unsent != NULL ||\n          pcb->unacked != NULL))) {\n      alloc = LWIP_MIN(max_length, LWIP_MEM_ALIGN_SIZE(length + TCP_OVERSIZE));\n    }\n  }\n#endif /* LWIP_NETIF_TX_SINGLE_PBUF */\n  p = pbuf_alloc(layer, alloc, PBUF_RAM);\n  if (p == NULL) {\n    return NULL;\n  }\n  LWIP_ASSERT(\"need unchained pbuf\", p->next == NULL);\n  *oversize = p->len - length;\n  /* trim p->len to the currently used size */\n  p->len = p->tot_len = length;\n  return p;\n}\n#else /* TCP_OVERSIZE */\n#define tcp_pbuf_prealloc(layer, length, mx, os, pcb, api, fst) pbuf_alloc((layer), (length), PBUF_RAM)\n#endif /* TCP_OVERSIZE */\n\n#if TCP_CHECKSUM_ON_COPY\n/** Add a checksum of newly added data to the segment */\nstatic void\ntcp_seg_add_chksum(u16_t chksum, u16_t len, u16_t *seg_chksum,\n                   u8_t *seg_chksum_swapped)\n{\n  u32_t helper;\n  /* add chksum to old chksum and fold to u16_t */\n  helper = chksum + *seg_chksum;\n  chksum = FOLD_U32T(helper);\n  if ((len & 1) != 0) {\n    *seg_chksum_swapped = 1 - *seg_chksum_swapped;\n    chksum = SWAP_BYTES_IN_WORD(chksum);\n  }\n  *seg_chksum = chksum;\n}\n#endif /* TCP_CHECKSUM_ON_COPY */\n\n/** Checks if tcp_write is allowed or not (checks state, snd_buf and snd_queuelen).\n *\n * @param pcb the tcp pcb to check for\n * @param len length of data to send (checked agains snd_buf)\n * @return ERR_OK if tcp_write is allowed to proceed, another err_t otherwise\n */\nstatic err_t\ntcp_write_checks(struct tcp_pcb *pcb, u16_t len)\n{\n  /* connection is in invalid state for data transmission? */\n  if ((pcb->state != ESTABLISHED) &&\n      (pcb->state != CLOSE_WAIT) &&\n      (pcb->state != SYN_SENT) &&\n      (pcb->state != SYN_RCVD)) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, (\"tcp_write() called in invalid state\\n\"));\n    return ERR_CONN;\n  } else if (len == 0) {\n    return ERR_OK;\n  }\n\n  /* fail on too much data */\n  if (len > pcb->snd_buf) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, (\"tcp_write: too much data (len=%\"U16_F\" > snd_buf=%\"U16_F\")\\n\",\n      len, pcb->snd_buf));\n    pcb->flags |= TF_NAGLEMEMERR;\n    return ERR_MEM;\n  }\n\n  LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_write: queuelen: %\"U16_F\"\\n\", (u16_t)pcb->snd_queuelen));\n\n  /* If total number of pbufs on the unsent/unacked queues exceeds the\n   * configured maximum, return an error */\n  /* check for configured max queuelen and possible overflow */\n  if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, (\"tcp_write: too long queue %\"U16_F\" (max %\"U16_F\")\\n\",\n      pcb->snd_queuelen, TCP_SND_QUEUELEN));\n    TCP_STATS_INC(tcp.memerr);\n    pcb->flags |= TF_NAGLEMEMERR;\n    return ERR_MEM;\n  }\n  if (pcb->snd_queuelen != 0) {\n    LWIP_ASSERT(\"tcp_write: pbufs on queue => at least one queue non-empty\",\n      pcb->unacked != NULL || pcb->unsent != NULL);\n  } else {\n    LWIP_ASSERT(\"tcp_write: no pbufs on queue => both queues empty\",\n      pcb->unacked == NULL && pcb->unsent == NULL);\n  }\n  return ERR_OK;\n}\n\n/**\n * Write data for sending (but does not send it immediately).\n *\n * It waits in the expectation of more data being sent soon (as\n * it can send them more efficiently by combining them together).\n * To prompt the system to send data now, call tcp_output() after\n * calling tcp_write().\n *\n * @param pcb Protocol control block for the TCP connection to enqueue data for.\n * @param arg Pointer to the data to be enqueued for sending.\n * @param len Data length in bytes\n * @param apiflags combination of following flags :\n * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack\n * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent,\n * @return ERR_OK if enqueued, another err_t on error\n */\nerr_t\ntcp_write(struct tcp_pcb *pcb, const void *arg, u16_t len, u8_t apiflags)\n{\n  struct pbuf *concat_p = NULL;\n  struct tcp_seg *last_unsent = NULL, *seg = NULL, *prev_seg = NULL, *queue = NULL;\n  u16_t pos = 0; /* position in 'arg' data */\n  u16_t queuelen;\n  u8_t optlen = 0;\n  u8_t optflags = 0;\n#if TCP_OVERSIZE\n  u16_t oversize = 0;\n  u16_t oversize_used = 0;\n#endif /* TCP_OVERSIZE */\n#if TCP_CHECKSUM_ON_COPY\n  u16_t concat_chksum = 0;\n  u8_t concat_chksum_swapped = 0;\n  u16_t concat_chksummed = 0;\n#endif /* TCP_CHECKSUM_ON_COPY */\n  err_t err;\n  /* don't allocate segments bigger than half the maximum window we ever received */\n  u16_t mss_local = LWIP_MIN(pcb->mss, pcb->snd_wnd_max/2);\n\n#if LWIP_NETIF_TX_SINGLE_PBUF\n  /* Always copy to try to create single pbufs for TX */\n  apiflags |= TCP_WRITE_FLAG_COPY;\n#endif /* LWIP_NETIF_TX_SINGLE_PBUF */\n\n  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, (\"tcp_write(pcb=%p, data=%p, len=%\"U16_F\", apiflags=%\"U16_F\")\\n\",\n    (void *)pcb, arg, len, (u16_t)apiflags));\n  LWIP_ERROR(\"tcp_write: arg == NULL (programmer violates API)\", \n             arg != NULL, return ERR_ARG;);\n\n  err = tcp_write_checks(pcb, len);\n  if (err != ERR_OK) {\n    return err;\n  }\n  queuelen = pcb->snd_queuelen;\n\n#if LWIP_TCP_TIMESTAMPS\n  if ((pcb->flags & TF_TIMESTAMP)) {\n    optflags = TF_SEG_OPTS_TS;\n    optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS);\n  }\n#endif /* LWIP_TCP_TIMESTAMPS */\n\n\n  /*\n   * TCP segmentation is done in three phases with increasing complexity:\n   *\n   * 1. Copy data directly into an oversized pbuf.\n   * 2. Chain a new pbuf to the end of pcb->unsent.\n   * 3. Create new segments.\n   *\n   * We may run out of memory at any point. In that case we must\n   * return ERR_MEM and not change anything in pcb. Therefore, all\n   * changes are recorded in local variables and committed at the end\n   * of the function. Some pcb fields are maintained in local copies:\n   *\n   * queuelen = pcb->snd_queuelen\n   * oversize = pcb->unsent_oversize\n   *\n   * These variables are set consistently by the phases:\n   *\n   * seg points to the last segment tampered with.\n   *\n   * pos records progress as data is segmented.\n   */\n\n  /* Find the tail of the unsent queue. */\n  if (pcb->unsent != NULL) {\n    u16_t space;\n    u16_t unsent_optlen;\n\n    /* @todo: this could be sped up by keeping last_unsent in the pcb */\n    for (last_unsent = pcb->unsent; last_unsent->next != NULL;\n         last_unsent = last_unsent->next);\n\n    /* Usable space at the end of the last unsent segment */\n    unsent_optlen = LWIP_TCP_OPT_LENGTH(last_unsent->flags);\n    space = mss_local - (last_unsent->len + unsent_optlen);\n\n    /*\n     * Phase 1: Copy data directly into an oversized pbuf.\n     *\n     * The number of bytes copied is recorded in the oversize_used\n     * variable. The actual copying is done at the bottom of the\n     * function.\n     */\n#if TCP_OVERSIZE\n#if TCP_OVERSIZE_DBGCHECK\n    /* check that pcb->unsent_oversize matches last_unsent->unsent_oversize */\n    LWIP_ASSERT(\"unsent_oversize mismatch (pcb vs. last_unsent)\",\n                pcb->unsent_oversize == last_unsent->oversize_left);\n#endif /* TCP_OVERSIZE_DBGCHECK */\n    oversize = pcb->unsent_oversize;\n    if (oversize > 0) {\n      LWIP_ASSERT(\"inconsistent oversize vs. space\", oversize_used <= space);\n      seg = last_unsent;\n      oversize_used = oversize < len ? oversize : len;\n      pos += oversize_used;\n      oversize -= oversize_used;\n      space -= oversize_used;\n    }\n    /* now we are either finished or oversize is zero */\n    LWIP_ASSERT(\"inconsistend oversize vs. len\", (oversize == 0) || (pos == len));\n#endif /* TCP_OVERSIZE */\n\n    /*\n     * Phase 2: Chain a new pbuf to the end of pcb->unsent.\n     *\n     * We don't extend segments containing SYN/FIN flags or options\n     * (len==0). The new pbuf is kept in concat_p and pbuf_cat'ed at\n     * the end.\n     */\n    if ((pos < len) && (space > 0) && (last_unsent->len > 0)) {\n      u16_t seglen = space < len - pos ? space : len - pos;\n      seg = last_unsent;\n\n      /* Create a pbuf with a copy or reference to seglen bytes. We\n       * can use PBUF_RAW here since the data appears in the middle of\n       * a segment. A header will never be prepended. */\n      if (apiflags & TCP_WRITE_FLAG_COPY) {\n        /* Data is copied */\n        if ((concat_p = tcp_pbuf_prealloc(PBUF_RAW, seglen, space, &oversize, pcb, apiflags, 1)) == NULL) {\n          LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2,\n                      (\"tcp_write : could not allocate memory for pbuf copy size %\"U16_F\"\\n\",\n                       seglen));\n          goto memerr;\n        }\n#if TCP_OVERSIZE_DBGCHECK\n        last_unsent->oversize_left += oversize;\n#endif /* TCP_OVERSIZE_DBGCHECK */\n        TCP_DATA_COPY2(concat_p->payload, (u8_t*)arg + pos, seglen, &concat_chksum, &concat_chksum_swapped);\n#if TCP_CHECKSUM_ON_COPY\n        concat_chksummed += seglen;\n#endif /* TCP_CHECKSUM_ON_COPY */\n      } else {\n        /* Data is not copied */\n        if ((concat_p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) {\n          LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2,\n                      (\"tcp_write: could not allocate memory for zero-copy pbuf\\n\"));\n          goto memerr;\n        }\n#if TCP_CHECKSUM_ON_COPY\n        /* calculate the checksum of nocopy-data */\n        tcp_seg_add_chksum(~inet_chksum((u8_t*)arg + pos, seglen), seglen,\n          &concat_chksum, &concat_chksum_swapped);\n        concat_chksummed += seglen;\n#endif /* TCP_CHECKSUM_ON_COPY */\n        /* reference the non-volatile payload data */\n        concat_p->payload = (u8_t*)arg + pos;\n      }\n\n      pos += seglen;\n      queuelen += pbuf_clen(concat_p);\n    }\n  } else {\n#if TCP_OVERSIZE\n    LWIP_ASSERT(\"unsent_oversize mismatch (pcb->unsent is NULL)\",\n                pcb->unsent_oversize == 0);\n#endif /* TCP_OVERSIZE */\n  }\n\n  /*\n   * Phase 3: Create new segments.\n   *\n   * The new segments are chained together in the local 'queue'\n   * variable, ready to be appended to pcb->unsent.\n   */\n  while (pos < len) {\n    struct pbuf *p;\n    u16_t left = len - pos;\n    u16_t max_len = mss_local - optlen;\n    u16_t seglen = left > max_len ? max_len : left;\n#if TCP_CHECKSUM_ON_COPY\n    u16_t chksum = 0;\n    u8_t chksum_swapped = 0;\n#endif /* TCP_CHECKSUM_ON_COPY */\n\n    if (apiflags & TCP_WRITE_FLAG_COPY) {\n      /* If copy is set, memory should be allocated and data copied\n       * into pbuf */\n      if ((p = tcp_pbuf_prealloc(PBUF_TRANSPORT, seglen + optlen, mss_local, &oversize, pcb, apiflags, queue == NULL)) == NULL) {\n        LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_write : could not allocate memory for pbuf copy size %\"U16_F\"\\n\", seglen));\n        goto memerr;\n      }\n      LWIP_ASSERT(\"tcp_write: check that first pbuf can hold the complete seglen\",\n                  (p->len >= seglen));\n      TCP_DATA_COPY2((char *)p->payload + optlen, (u8_t*)arg + pos, seglen, &chksum, &chksum_swapped);\n    } else {\n      /* Copy is not set: First allocate a pbuf for holding the data.\n       * Since the referenced data is available at least until it is\n       * sent out on the link (as it has to be ACKed by the remote\n       * party) we can safely use PBUF_ROM instead of PBUF_REF here.\n       */\n      struct pbuf *p2;\n#if TCP_OVERSIZE\n      LWIP_ASSERT(\"oversize == 0\", oversize == 0);\n#endif /* TCP_OVERSIZE */\n      if ((p2 = pbuf_alloc(PBUF_TRANSPORT, seglen, PBUF_ROM)) == NULL) {\n        LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_write: could not allocate memory for zero-copy pbuf\\n\"));\n        goto memerr;\n      }\n#if TCP_CHECKSUM_ON_COPY\n      /* calculate the checksum of nocopy-data */\n      chksum = ~inet_chksum((u8_t*)arg + pos, seglen);\n#endif /* TCP_CHECKSUM_ON_COPY */\n      /* reference the non-volatile payload data */\n      p2->payload = (u8_t*)arg + pos;\n\n      /* Second, allocate a pbuf for the headers. */\n      if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) {\n        /* If allocation fails, we have to deallocate the data pbuf as\n         * well. */\n        pbuf_free(p2);\n        LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_write: could not allocate memory for header pbuf\\n\"));\n        goto memerr;\n      }\n      /* Concatenate the headers and data pbufs together. */\n      pbuf_cat(p/*header*/, p2/*data*/);\n    }\n\n    queuelen += pbuf_clen(p);\n\n    /* Now that there are more segments queued, we check again if the\n     * length of the queue exceeds the configured maximum or\n     * overflows. */\n    if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {\n      LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 2, (\"tcp_write: queue too long %\"U16_F\" (%\"U16_F\")\\n\", queuelen, TCP_SND_QUEUELEN));\n      pbuf_free(p);\n      goto memerr;\n    }\n\n    if ((seg = tcp_create_segment(pcb, p, 0, pcb->snd_lbb + pos, optflags)) == NULL) {\n      goto memerr;\n    }\n#if TCP_OVERSIZE_DBGCHECK\n    seg->oversize_left = oversize;\n#endif /* TCP_OVERSIZE_DBGCHECK */\n#if TCP_CHECKSUM_ON_COPY\n    seg->chksum = chksum;\n    seg->chksum_swapped = chksum_swapped;\n    seg->flags |= TF_SEG_DATA_CHECKSUMMED;\n#endif /* TCP_CHECKSUM_ON_COPY */\n\n    /* first segment of to-be-queued data? */\n    if (queue == NULL) {\n      queue = seg;\n    } else {\n      /* Attach the segment to the end of the queued segments */\n      LWIP_ASSERT(\"prev_seg != NULL\", prev_seg != NULL);\n      prev_seg->next = seg;\n    }\n    /* remember last segment of to-be-queued data for next iteration */\n    prev_seg = seg;\n\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, (\"tcp_write: queueing %\"U32_F\":%\"U32_F\"\\n\",\n      ntohl(seg->tcphdr->seqno),\n      ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg)));\n\n    pos += seglen;\n  }\n\n  /*\n   * All three segmentation phases were successful. We can commit the\n   * transaction.\n   */\n\n  /*\n   * Phase 1: If data has been added to the preallocated tail of\n   * last_unsent, we update the length fields of the pbuf chain.\n   */\n#if TCP_OVERSIZE\n  if (oversize_used > 0) {\n    struct pbuf *p;\n    /* Bump tot_len of whole chain, len of tail */\n    for (p = last_unsent->p; p; p = p->next) {\n      p->tot_len += oversize_used;\n      if (p->next == NULL) {\n        TCP_DATA_COPY((char *)p->payload + p->len, arg, oversize_used, last_unsent);\n        p->len += oversize_used;\n      }\n    }\n    last_unsent->len += oversize_used;\n#if TCP_OVERSIZE_DBGCHECK\n    LWIP_ASSERT(\"last_unsent->oversize_left >= oversize_used\",\n                last_unsent->oversize_left >= oversize_used);\n    last_unsent->oversize_left -= oversize_used;\n#endif /* TCP_OVERSIZE_DBGCHECK */\n  }\n  pcb->unsent_oversize = oversize;\n#endif /* TCP_OVERSIZE */\n\n  /*\n   * Phase 2: concat_p can be concatenated onto last_unsent->p\n   */\n  if (concat_p != NULL) {\n    LWIP_ASSERT(\"tcp_write: cannot concatenate when pcb->unsent is empty\",\n      (last_unsent != NULL));\n    pbuf_cat(last_unsent->p, concat_p);\n    last_unsent->len += concat_p->tot_len;\n#if TCP_CHECKSUM_ON_COPY\n    if (concat_chksummed) {\n      tcp_seg_add_chksum(concat_chksum, concat_chksummed, &last_unsent->chksum,\n        &last_unsent->chksum_swapped);\n      last_unsent->flags |= TF_SEG_DATA_CHECKSUMMED;\n    }\n#endif /* TCP_CHECKSUM_ON_COPY */\n  }\n\n  /*\n   * Phase 3: Append queue to pcb->unsent. Queue may be NULL, but that\n   * is harmless\n   */\n  if (last_unsent == NULL) {\n    pcb->unsent = queue;\n  } else {\n    last_unsent->next = queue;\n  }\n\n  /*\n   * Finally update the pcb state.\n   */\n  pcb->snd_lbb += len;\n  pcb->snd_buf -= len;\n  pcb->snd_queuelen = queuelen;\n\n  LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_write: %\"S16_F\" (after enqueued)\\n\",\n    pcb->snd_queuelen));\n  if (pcb->snd_queuelen != 0) {\n    LWIP_ASSERT(\"tcp_write: valid queue length\",\n                pcb->unacked != NULL || pcb->unsent != NULL);\n  }\n\n  /* Set the PSH flag in the last segment that we enqueued. */\n  if (seg != NULL && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) {\n    TCPH_SET_FLAG(seg->tcphdr, TCP_PSH);\n  }\n\n  return ERR_OK;\nmemerr:\n  pcb->flags |= TF_NAGLEMEMERR;\n  TCP_STATS_INC(tcp.memerr);\n\n  if (concat_p != NULL) {\n    pbuf_free(concat_p);\n  }\n  if (queue != NULL) {\n    tcp_segs_free(queue);\n  }\n  if (pcb->snd_queuelen != 0) {\n    LWIP_ASSERT(\"tcp_write: valid queue length\", pcb->unacked != NULL ||\n      pcb->unsent != NULL);\n  }\n  LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, (\"tcp_write: %\"S16_F\" (with mem err)\\n\", pcb->snd_queuelen));\n  return ERR_MEM;\n}\n\n/**\n * Enqueue TCP options for transmission.\n *\n * Called by tcp_connect(), tcp_listen_input(), and tcp_send_ctrl().\n *\n * @param pcb Protocol control block for the TCP connection.\n * @param flags TCP header flags to set in the outgoing segment.\n * @param optdata pointer to TCP options, or NULL.\n * @param optlen length of TCP options in bytes.\n */\nerr_t\ntcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags)\n{\n  struct pbuf *p;\n  struct tcp_seg *seg;\n  u8_t optflags = 0;\n  u8_t optlen = 0;\n\n  LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_enqueue_flags: queuelen: %\"U16_F\"\\n\", (u16_t)pcb->snd_queuelen));\n\n  LWIP_ASSERT(\"tcp_enqueue_flags: need either TCP_SYN or TCP_FIN in flags (programmer violates API)\",\n              (flags & (TCP_SYN | TCP_FIN)) != 0);\n\n  /* check for configured max queuelen and possible overflow */\n  if ((pcb->snd_queuelen >= TCP_SND_QUEUELEN) || (pcb->snd_queuelen > TCP_SNDQUEUELEN_OVERFLOW)) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, (\"tcp_enqueue_flags: too long queue %\"U16_F\" (max %\"U16_F\")\\n\",\n                                       pcb->snd_queuelen, TCP_SND_QUEUELEN));\n    TCP_STATS_INC(tcp.memerr);\n    pcb->flags |= TF_NAGLEMEMERR;\n    return ERR_MEM;\n  }\n\n  if (flags & TCP_SYN) {\n    optflags = TF_SEG_OPTS_MSS;\n  }\n#if LWIP_TCP_TIMESTAMPS\n  if ((pcb->flags & TF_TIMESTAMP)) {\n    optflags |= TF_SEG_OPTS_TS;\n  }\n#endif /* LWIP_TCP_TIMESTAMPS */\n  optlen = LWIP_TCP_OPT_LENGTH(optflags);\n\n  /* tcp_enqueue_flags is always called with either SYN or FIN in flags.\n   * We need one available snd_buf byte to do that.\n   * This means we can't send FIN while snd_buf==0. A better fix would be to\n   * not include SYN and FIN sequence numbers in the snd_buf count. */\n  if (pcb->snd_buf == 0) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | 3, (\"tcp_enqueue_flags: no send buffer available\\n\"));\n    TCP_STATS_INC(tcp.memerr);\n    return ERR_MEM;\n  }\n\n  /* Allocate pbuf with room for TCP header + options */\n  if ((p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) {\n    pcb->flags |= TF_NAGLEMEMERR;\n    TCP_STATS_INC(tcp.memerr);\n    return ERR_MEM;\n  }\n  LWIP_ASSERT(\"tcp_enqueue_flags: check that first pbuf can hold optlen\",\n              (p->len >= optlen));\n\n  /* Allocate memory for tcp_seg, and fill in fields. */\n  if ((seg = tcp_create_segment(pcb, p, flags, pcb->snd_lbb, optflags)) == NULL) {\n    pcb->flags |= TF_NAGLEMEMERR;\n    TCP_STATS_INC(tcp.memerr);\n    return ERR_MEM;\n  }\n  LWIP_ASSERT(\"seg->tcphdr not aligned\", ((mem_ptr_t)seg->tcphdr % MEM_ALIGNMENT) == 0);\n  LWIP_ASSERT(\"tcp_enqueue_flags: invalid segment length\", seg->len == 0);\n\n  LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE,\n              (\"tcp_enqueue_flags: queueing %\"U32_F\":%\"U32_F\" (0x%\"X16_F\")\\n\",\n               ntohl(seg->tcphdr->seqno),\n               ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg),\n               (u16_t)flags));\n\n  /* Now append seg to pcb->unsent queue */\n  if (pcb->unsent == NULL) {\n    pcb->unsent = seg;\n  } else {\n    struct tcp_seg *useg;\n    for (useg = pcb->unsent; useg->next != NULL; useg = useg->next);\n    useg->next = seg;\n  }\n#if TCP_OVERSIZE\n  /* The new unsent tail has no space */\n  pcb->unsent_oversize = 0;\n#endif /* TCP_OVERSIZE */\n\n  /* SYN and FIN bump the sequence number */\n  if ((flags & TCP_SYN) || (flags & TCP_FIN)) {\n    pcb->snd_lbb++;\n    /* optlen does not influence snd_buf */\n    pcb->snd_buf--;\n  }\n  if (flags & TCP_FIN) {\n    pcb->flags |= TF_FIN;\n  }\n\n  /* update number of segments on the queues */\n  pcb->snd_queuelen += pbuf_clen(seg->p);\n  LWIP_DEBUGF(TCP_QLEN_DEBUG, (\"tcp_enqueue_flags: %\"S16_F\" (after enqueued)\\n\", pcb->snd_queuelen));\n  if (pcb->snd_queuelen != 0) {\n    LWIP_ASSERT(\"tcp_enqueue_flags: invalid queue length\",\n      pcb->unacked != NULL || pcb->unsent != NULL);\n  }\n\n  return ERR_OK;\n}\n\n#if LWIP_TCP_TIMESTAMPS\n/* Build a timestamp option (12 bytes long) at the specified options pointer)\n *\n * @param pcb tcp_pcb\n * @param opts option pointer where to store the timestamp option\n */\nstatic void\ntcp_build_timestamp_option(struct tcp_pcb *pcb, u32_t *opts)\n{\n  /* Pad with two NOP options to make everything nicely aligned */\n  opts[0] = PP_HTONL(0x0101080A);\n  opts[1] = htonl(sys_now());\n  opts[2] = htonl(pcb->ts_recent);\n}\n#endif\n\n/** Send an ACK without data.\n *\n * @param pcb Protocol control block for the TCP connection to send the ACK\n */\nerr_t\ntcp_send_empty_ack(struct tcp_pcb *pcb)\n{\n  struct pbuf *p;\n  u8_t optlen = 0;\n#if LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP\n  struct tcp_hdr *tcphdr;\n#endif /* LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP */\n\n#if LWIP_TCP_TIMESTAMPS\n  if (pcb->flags & TF_TIMESTAMP) {\n    optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS);\n  }\n#endif\n\n  p = tcp_output_alloc_header(pcb, optlen, 0, htonl(pcb->snd_nxt));\n  if (p == NULL) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, (\"tcp_output: (ACK) could not allocate pbuf\\n\"));\n    return ERR_BUF;\n  }\n#if LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP\n  tcphdr = (struct tcp_hdr *)p->payload;\n#endif /* LWIP_TCP_TIMESTAMPS || CHECKSUM_GEN_TCP */\n  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, \n              (\"tcp_output: sending ACK for %\"U32_F\"\\n\", pcb->rcv_nxt));\n  /* remove ACK flags from the PCB, as we send an empty ACK now */\n  pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);\n\n  /* NB. MSS option is only sent on SYNs, so ignore it here */\n#if LWIP_TCP_TIMESTAMPS\n  pcb->ts_lastacksent = pcb->rcv_nxt;\n\n  if (pcb->flags & TF_TIMESTAMP) {\n    tcp_build_timestamp_option(pcb, (u32_t *)(tcphdr + 1));\n  }\n#endif \n\n#if CHECKSUM_GEN_TCP\n  tcphdr->chksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), p, IP_PROTO_TCP, p->tot_len,\n    &pcb->local_ip, &pcb->remote_ip);\n#endif\n#if LWIP_NETIF_HWADDRHINT\n  ipX_output_hinted(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, pcb->tos,\n      IP_PROTO_TCP, &pcb->addr_hint);\n#else /* LWIP_NETIF_HWADDRHINT*/\n  ipX_output(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, pcb->tos,\n      IP_PROTO_TCP);\n#endif /* LWIP_NETIF_HWADDRHINT*/\n  pbuf_free(p);\n\n  return ERR_OK;\n}\n\n/**\n * Find out what we can send and send it\n *\n * @param pcb Protocol control block for the TCP connection to send data\n * @return ERR_OK if data has been sent or nothing to send\n *         another err_t on error\n */\nerr_t\ntcp_output(struct tcp_pcb *pcb)\n{\n  struct tcp_seg *seg, *useg;\n  u32_t wnd, snd_nxt;\n#if TCP_CWND_DEBUG\n  s16_t i = 0;\n#endif /* TCP_CWND_DEBUG */\n\n  /* pcb->state LISTEN not allowed here */\n  LWIP_ASSERT(\"don't call tcp_output for listen-pcbs\",\n    pcb->state != LISTEN);\n\n  /* First, check if we are invoked by the TCP input processing\n     code. If so, we do not output anything. Instead, we rely on the\n     input processing code to call us when input processing is done\n     with. */\n  if (tcp_input_pcb == pcb) {\n    return ERR_OK;\n  }\n\n  wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd);\n\n  seg = pcb->unsent;\n\n  /* If the TF_ACK_NOW flag is set and no data will be sent (either\n   * because the ->unsent queue is empty or because the window does\n   * not allow it), construct an empty ACK segment and send it.\n   *\n   * If data is to be sent, we will just piggyback the ACK (see below).\n   */\n  if (pcb->flags & TF_ACK_NOW &&\n     (seg == NULL ||\n      ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) {\n     return tcp_send_empty_ack(pcb);\n  }\n\n  /* useg should point to last segment on unacked queue */\n  useg = pcb->unacked;\n  if (useg != NULL) {\n    for (; useg->next != NULL; useg = useg->next);\n  }\n\n#if TCP_OUTPUT_DEBUG\n  if (seg == NULL) {\n    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, (\"tcp_output: nothing to send (%p)\\n\",\n                                   (void*)pcb->unsent));\n  }\n#endif /* TCP_OUTPUT_DEBUG */\n#if TCP_CWND_DEBUG\n  if (seg == NULL) {\n    LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_output: snd_wnd %\"U16_F\n                                 \", cwnd %\"U16_F\", wnd %\"U32_F\n                                 \", seg == NULL, ack %\"U32_F\"\\n\",\n                                 pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack));\n  } else {\n    LWIP_DEBUGF(TCP_CWND_DEBUG, \n                (\"tcp_output: snd_wnd %\"U16_F\", cwnd %\"U16_F\", wnd %\"U32_F\n                 \", effwnd %\"U32_F\", seq %\"U32_F\", ack %\"U32_F\"\\n\",\n                 pcb->snd_wnd, pcb->cwnd, wnd,\n                 ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len,\n                 ntohl(seg->tcphdr->seqno), pcb->lastack));\n  }\n#endif /* TCP_CWND_DEBUG */\n  /* data available and window allows it to be sent? */\n  while (seg != NULL &&\n         ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) {\n    LWIP_ASSERT(\"RST not expected here!\", \n                (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0);\n    /* Stop sending if the nagle algorithm would prevent it\n     * Don't stop:\n     * - if tcp_write had a memory error before (prevent delayed ACK timeout) or\n     * - if FIN was already enqueued for this PCB (SYN is always alone in a segment -\n     *   either seg->next != NULL or pcb->unacked == NULL;\n     *   RST is no sent using tcp_write/tcp_output.\n     */\n    if((tcp_do_output_nagle(pcb) == 0) &&\n      ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)){\n      break;\n    }\n#if TCP_CWND_DEBUG\n    LWIP_DEBUGF(TCP_CWND_DEBUG, (\"tcp_output: snd_wnd %\"U16_F\", cwnd %\"U16_F\", wnd %\"U32_F\", effwnd %\"U32_F\", seq %\"U32_F\", ack %\"U32_F\", i %\"S16_F\"\\n\",\n                            pcb->snd_wnd, pcb->cwnd, wnd,\n                            ntohl(seg->tcphdr->seqno) + seg->len -\n                            pcb->lastack,\n                            ntohl(seg->tcphdr->seqno), pcb->lastack, i));\n    ++i;\n#endif /* TCP_CWND_DEBUG */\n\n    pcb->unsent = seg->next;\n\n    if (pcb->state != SYN_SENT) {\n      TCPH_SET_FLAG(seg->tcphdr, TCP_ACK);\n      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW);\n    }\n\n#if TCP_OVERSIZE_DBGCHECK\n    seg->oversize_left = 0;\n#endif /* TCP_OVERSIZE_DBGCHECK */\n    tcp_output_segment(seg, pcb);\n    snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg);\n    if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) {\n      pcb->snd_nxt = snd_nxt;\n    }\n    /* put segment on unacknowledged list if length > 0 */\n    if (TCP_TCPLEN(seg) > 0) {\n      seg->next = NULL;\n      /* unacked list is empty? */\n      if (pcb->unacked == NULL) {\n        pcb->unacked = seg;\n        useg = seg;\n      /* unacked list is not empty? */\n      } else {\n        /* In the case of fast retransmit, the packet should not go to the tail\n         * of the unacked queue, but rather somewhere before it. We need to check for\n         * this case. -STJ Jul 27, 2004 */\n        if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))) {\n          /* add segment to before tail of unacked list, keeping the list sorted */\n          struct tcp_seg **cur_seg = &(pcb->unacked);\n          while (*cur_seg &&\n            TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {\n              cur_seg = &((*cur_seg)->next );\n          }\n          seg->next = (*cur_seg);\n          (*cur_seg) = seg;\n        } else {\n          /* add segment to tail of unacked list */\n          useg->next = seg;\n          useg = useg->next;\n        }\n      }\n    /* do not queue empty segments on the unacked list */\n    } else {\n      tcp_seg_free(seg);\n    }\n    seg = pcb->unsent;\n  }\n#if TCP_OVERSIZE\n  if (pcb->unsent == NULL) {\n    /* last unsent has been removed, reset unsent_oversize */\n    pcb->unsent_oversize = 0;\n  }\n#endif /* TCP_OVERSIZE */\n\n  pcb->flags &= ~TF_NAGLEMEMERR;\n  return ERR_OK;\n}\n\n/**\n * Called by tcp_output() to actually send a TCP segment over IP.\n *\n * @param seg the tcp_seg to send\n * @param pcb the tcp_pcb for the TCP connection used to send the segment\n */\nstatic void\ntcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb)\n{\n  u16_t len;\n  u32_t *opts;\n\n  /** @bug Exclude retransmitted segments from this count. */\n  snmp_inc_tcpoutsegs();\n\n  /* The TCP header has already been constructed, but the ackno and\n   wnd fields remain. */\n  seg->tcphdr->ackno = htonl(pcb->rcv_nxt);\n\n  /* advertise our receive window size in this TCP segment */\n  seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd);\n\n  pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd;\n\n  /* Add any requested options.  NB MSS option is only set on SYN\n     packets, so ignore it here */\n  opts = (u32_t *)(void *)(seg->tcphdr + 1);\n  if (seg->flags & TF_SEG_OPTS_MSS) {\n    u16_t mss;\n#if TCP_CALCULATE_EFF_SEND_MSS\n    mss = tcp_eff_send_mss(TCP_MSS, &pcb->local_ip, &pcb->remote_ip, PCB_ISIPV6(pcb));\n#else /* TCP_CALCULATE_EFF_SEND_MSS */\n    mss = TCP_MSS;\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n    *opts = TCP_BUILD_MSS_OPTION(mss);\n    opts += 1;\n  }\n#if LWIP_TCP_TIMESTAMPS\n  pcb->ts_lastacksent = pcb->rcv_nxt;\n\n  if (seg->flags & TF_SEG_OPTS_TS) {\n    tcp_build_timestamp_option(pcb, opts);\n    opts += 3;\n  }\n#endif\n\n  /* Set retransmission timer running if it is not currently enabled \n     This must be set before checking the route. */\n  if (pcb->rtime == -1) {\n    pcb->rtime = 0;\n  }\n\n  /* If we don't have a local IP address, we get one by\n     calling ip_route(). */\n  if (ipX_addr_isany(PCB_ISIPV6(pcb), &pcb->local_ip)) {\n    struct netif *netif;\n    ipX_addr_t *local_ip;\n    ipX_route_get_local_ipX(PCB_ISIPV6(pcb), &pcb->local_ip, &pcb->remote_ip, netif, local_ip);\n    if ((netif == NULL) || (local_ip == NULL)) {\n      return;\n    }\n    ipX_addr_copy(PCB_ISIPV6(pcb), pcb->local_ip, *local_ip);\n  }\n\n  if (pcb->rttest == 0) {\n    pcb->rttest = tcp_ticks;\n    pcb->rtseq = ntohl(seg->tcphdr->seqno);\n\n    LWIP_DEBUGF(TCP_RTO_DEBUG, (\"tcp_output_segment: rtseq %\"U32_F\"\\n\", pcb->rtseq));\n  }\n  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, (\"tcp_output_segment: %\"U32_F\":%\"U32_F\"\\n\",\n          htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) +\n          seg->len));\n\n  len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload);\n\n  seg->p->len -= len;\n  seg->p->tot_len -= len;\n\n  seg->p->payload = seg->tcphdr;\n\n  seg->tcphdr->chksum = 0;\n#if TCP_CHECKSUM_ON_COPY\n  {\n    u32_t acc;\n#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK\n    u16_t chksum_slow = ipX_chksum_pseudo(PCB_ISIPV6(pcb), seg->p, IP_PROTO_TCP,\n      seg->p->tot_len, &pcb->local_ip, &pcb->remote_ip);\n#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */\n    if ((seg->flags & TF_SEG_DATA_CHECKSUMMED) == 0) {\n      LWIP_ASSERT(\"data included but not checksummed\",\n        seg->p->tot_len == (TCPH_HDRLEN(seg->tcphdr) * 4));\n    }\n\n    /* rebuild TCP header checksum (TCP header changes for retransmissions!) */\n    acc = ipX_chksum_pseudo_partial(PCB_ISIPV6(pcb), seg->p, IP_PROTO_TCP,\n      seg->p->tot_len, TCPH_HDRLEN(seg->tcphdr) * 4, &pcb->local_ip, &pcb->remote_ip);\n    /* add payload checksum */\n    if (seg->chksum_swapped) {\n      seg->chksum = SWAP_BYTES_IN_WORD(seg->chksum);\n      seg->chksum_swapped = 0;\n    }\n    acc += (u16_t)~(seg->chksum);\n    seg->tcphdr->chksum = FOLD_U32T(acc);\n#if TCP_CHECKSUM_ON_COPY_SANITY_CHECK\n    if (chksum_slow != seg->tcphdr->chksum) {\n      LWIP_DEBUGF(TCP_DEBUG | LWIP_DBG_LEVEL_WARNING,\n                  (\"tcp_output_segment: calculated checksum is %\"X16_F\" instead of %\"X16_F\"\\n\",\n                  seg->tcphdr->chksum, chksum_slow));\n      seg->tcphdr->chksum = chksum_slow;\n    }\n#endif /* TCP_CHECKSUM_ON_COPY_SANITY_CHECK */\n  }\n#else /* TCP_CHECKSUM_ON_COPY */\n#if CHECKSUM_GEN_TCP\n  seg->tcphdr->chksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), seg->p, IP_PROTO_TCP,\n    seg->p->tot_len, &pcb->local_ip, &pcb->remote_ip);\n#endif /* CHECKSUM_GEN_TCP */\n#endif /* TCP_CHECKSUM_ON_COPY */\n  TCP_STATS_INC(tcp.xmit);\n\n#if LWIP_NETIF_HWADDRHINT\n  ipX_output_hinted(PCB_ISIPV6(pcb), seg->p, &pcb->local_ip, &pcb->remote_ip,\n    pcb->ttl, pcb->tos, IP_PROTO_TCP, &pcb->addr_hint);\n#else /* LWIP_NETIF_HWADDRHINT*/\n  ipX_output(PCB_ISIPV6(pcb), seg->p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl,\n    pcb->tos, IP_PROTO_TCP);\n#endif /* LWIP_NETIF_HWADDRHINT*/\n}\n\n/**\n * Send a TCP RESET packet (empty segment with RST flag set) either to\n * abort a connection or to show that there is no matching local connection\n * for a received segment.\n *\n * Called by tcp_abort() (to abort a local connection), tcp_input() (if no\n * matching local pcb was found), tcp_listen_input() (if incoming segment\n * has ACK flag set) and tcp_process() (received segment in the wrong state)\n *\n * Since a RST segment is in most cases not sent for an active connection,\n * tcp_rst() has a number of arguments that are taken from a tcp_pcb for\n * most other segment output functions.\n *\n * @param seqno the sequence number to use for the outgoing segment\n * @param ackno the acknowledge number to use for the outgoing segment\n * @param local_ip the local IP address to send the segment from\n * @param remote_ip the remote IP address to send the segment to\n * @param local_port the local TCP port to send the segment from\n * @param remote_port the remote TCP port to send the segment to\n */\nvoid\ntcp_rst_impl(u32_t seqno, u32_t ackno,\n  ipX_addr_t *local_ip, ipX_addr_t *remote_ip,\n  u16_t local_port, u16_t remote_port\n#if LWIP_IPV6\n  , u8_t isipv6\n#endif /* LWIP_IPV6 */\n  )\n{\n  struct pbuf *p;\n  struct tcp_hdr *tcphdr;\n  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM);\n  if (p == NULL) {\n      LWIP_DEBUGF(TCP_DEBUG, (\"tcp_rst: could not allocate memory for pbuf\\n\"));\n      return;\n  }\n  LWIP_ASSERT(\"check that first pbuf can hold struct tcp_hdr\",\n              (p->len >= sizeof(struct tcp_hdr)));\n\n  tcphdr = (struct tcp_hdr *)p->payload;\n  tcphdr->src = htons(local_port);\n  tcphdr->dest = htons(remote_port);\n  tcphdr->seqno = htonl(seqno);\n  tcphdr->ackno = htonl(ackno);\n  TCPH_HDRLEN_FLAGS_SET(tcphdr, TCP_HLEN/4, TCP_RST | TCP_ACK);\n  tcphdr->wnd = PP_HTONS(TCP_WND);\n  tcphdr->chksum = 0;\n  tcphdr->urgp = 0;\n\n  TCP_STATS_INC(tcp.xmit);\n  snmp_inc_tcpoutrsts();\n\n#if CHECKSUM_GEN_TCP\n  tcphdr->chksum = ipX_chksum_pseudo(isipv6, p, IP_PROTO_TCP, p->tot_len,\n                                     local_ip, remote_ip);\n#endif\n  /* Send output with hardcoded TTL/HL since we have no access to the pcb */\n  ipX_output(isipv6, p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP);\n  pbuf_free(p);\n  LWIP_DEBUGF(TCP_RST_DEBUG, (\"tcp_rst: seqno %\"U32_F\" ackno %\"U32_F\".\\n\", seqno, ackno));\n}\n\n/**\n * Requeue all unacked segments for retransmission\n *\n * Called by tcp_slowtmr() for slow retransmission.\n *\n * @param pcb the tcp_pcb for which to re-enqueue all unacked segments\n */\nvoid\ntcp_rexmit_rto(struct tcp_pcb *pcb)\n{\n  struct tcp_seg *seg;\n\n  if (pcb->unacked == NULL) {\n    return;\n  }\n\n  /* Move all unacked segments to the head of the unsent queue */\n  for (seg = pcb->unacked; seg->next != NULL; seg = seg->next);\n  /* concatenate unsent queue after unacked queue */\n  seg->next = pcb->unsent;\n  /* unsent queue is the concatenated queue (of unacked, unsent) */\n  pcb->unsent = pcb->unacked;\n  /* unacked queue is now empty */\n  pcb->unacked = NULL;\n  /* last unsent hasn't changed, no need to reset unsent_oversize */\n\n  /* increment number of retransmissions */\n  ++pcb->nrtx;\n\n  /* Don't take any RTT measurements after retransmitting. */\n  pcb->rttest = 0;\n\n  /* Do the actual retransmission */\n  tcp_output(pcb);\n}\n\n/**\n * Requeue the first unacked segment for retransmission\n *\n * Called by tcp_receive() for fast retramsmit.\n *\n * @param pcb the tcp_pcb for which to retransmit the first unacked segment\n */\nvoid\ntcp_rexmit(struct tcp_pcb *pcb)\n{\n  struct tcp_seg *seg;\n  struct tcp_seg **cur_seg;\n\n  if (pcb->unacked == NULL) {\n    return;\n  }\n\n  /* Move the first unacked segment to the unsent queue */\n  /* Keep the unsent queue sorted. */\n  seg = pcb->unacked;\n  pcb->unacked = seg->next;\n\n  cur_seg = &(pcb->unsent);\n  while (*cur_seg &&\n    TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) {\n      cur_seg = &((*cur_seg)->next );\n  }\n  seg->next = *cur_seg;\n  *cur_seg = seg;\n#if TCP_OVERSIZE\n  if (seg->next == NULL) {\n    /* the retransmitted segment is last in unsent, so reset unsent_oversize */\n    pcb->unsent_oversize = 0;\n  }\n#endif /* TCP_OVERSIZE */\n\n  ++pcb->nrtx;\n\n  /* Don't take any rtt measurements after retransmitting. */\n  pcb->rttest = 0;\n\n  /* Do the actual retransmission. */\n  snmp_inc_tcpretranssegs();\n  /* No need to call tcp_output: we are always called from tcp_input()\n     and thus tcp_output directly returns. */\n}\n\n\n/**\n * Handle retransmission after three dupacks received\n *\n * @param pcb the tcp_pcb for which to retransmit the first unacked segment\n */\nvoid \ntcp_rexmit_fast(struct tcp_pcb *pcb)\n{\n  if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) {\n    /* This is fast retransmit. Retransmit the first unacked segment. */\n    LWIP_DEBUGF(TCP_FR_DEBUG, \n                (\"tcp_receive: dupacks %\"U16_F\" (%\"U32_F\n                 \"), fast retransmit %\"U32_F\"\\n\",\n                 (u16_t)pcb->dupacks, pcb->lastack,\n                 ntohl(pcb->unacked->tcphdr->seqno)));\n    tcp_rexmit(pcb);\n\n    /* Set ssthresh to half of the minimum of the current\n     * cwnd and the advertised window */\n    if (pcb->cwnd > pcb->snd_wnd) {\n      pcb->ssthresh = pcb->snd_wnd / 2;\n    } else {\n      pcb->ssthresh = pcb->cwnd / 2;\n    }\n    \n    /* The minimum value for ssthresh should be 2 MSS */\n    if (pcb->ssthresh < 2*pcb->mss) {\n      LWIP_DEBUGF(TCP_FR_DEBUG, \n                  (\"tcp_receive: The minimum value for ssthresh %\"U16_F\n                   \" should be min 2 mss %\"U16_F\"...\\n\",\n                   pcb->ssthresh, 2*pcb->mss));\n      pcb->ssthresh = 2*pcb->mss;\n    }\n    \n    pcb->cwnd = pcb->ssthresh + 3 * pcb->mss;\n    pcb->flags |= TF_INFR;\n  } \n}\n\n\n/**\n * Send keepalive packets to keep a connection active although\n * no data is sent over it.\n *\n * Called by tcp_slowtmr()\n *\n * @param pcb the tcp_pcb for which to send a keepalive packet\n */\nvoid\ntcp_keepalive(struct tcp_pcb *pcb)\n{\n  struct pbuf *p;\n#if CHECKSUM_GEN_TCP\r\n  struct tcp_hdr *tcphdr;\n#endif /* CHECKSUM_GEN_TCP */\r\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_keepalive: sending KEEPALIVE probe to \"));\n  ipX_addr_debug_print(PCB_ISIPV6(pcb), TCP_DEBUG, &pcb->remote_ip);\n  LWIP_DEBUGF(TCP_DEBUG, (\"\\n\"));\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_keepalive: tcp_ticks %\"U32_F\"   pcb->tmr %\"U32_F\" pcb->keep_cnt_sent %\"U16_F\"\\n\", \n                          tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));\n   \n  p = tcp_output_alloc_header(pcb, 0, 0, htonl(pcb->snd_nxt - 1));\n  if(p == NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, \n                (\"tcp_keepalive: could not allocate memory for pbuf\\n\"));\n    return;\n  }\n#if CHECKSUM_GEN_TCP\r\n  tcphdr = (struct tcp_hdr *)p->payload;\n\n  tcphdr->chksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), p, IP_PROTO_TCP, p->tot_len,\n      &pcb->local_ip, &pcb->remote_ip);\n#endif /* CHECKSUM_GEN_TCP */\r\n  TCP_STATS_INC(tcp.xmit);\n\n  /* Send output to IP */\n#if LWIP_NETIF_HWADDRHINT\n  ipX_output_hinted(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip,\n    pcb->ttl, 0, IP_PROTO_TCP, &pcb->addr_hint);\n#else /* LWIP_NETIF_HWADDRHINT*/\n  ipX_output(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl,\n    0, IP_PROTO_TCP);\n#endif /* LWIP_NETIF_HWADDRHINT*/\n\n  pbuf_free(p);\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_keepalive: seqno %\"U32_F\" ackno %\"U32_F\".\\n\",\n                          pcb->snd_nxt - 1, pcb->rcv_nxt));\n}\n\n\n/**\n * Send persist timer zero-window probes to keep a connection active\n * when a window update is lost.\n *\n * Called by tcp_slowtmr()\n *\n * @param pcb the tcp_pcb for which to send a zero-window probe packet\n */\nvoid\ntcp_zero_window_probe(struct tcp_pcb *pcb)\n{\n  struct pbuf *p;\n  struct tcp_hdr *tcphdr;\n  struct tcp_seg *seg;\n  u16_t len;\n  u8_t is_fin;\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_zero_window_probe: sending ZERO WINDOW probe to \"));\n  ipX_addr_debug_print(PCB_ISIPV6(pcb), TCP_DEBUG, &pcb->remote_ip);\n  LWIP_DEBUGF(TCP_DEBUG, (\"\\n\"));\n\n  LWIP_DEBUGF(TCP_DEBUG, \n              (\"tcp_zero_window_probe: tcp_ticks %\"U32_F\n               \"   pcb->tmr %\"U32_F\" pcb->keep_cnt_sent %\"U16_F\"\\n\", \n               tcp_ticks, pcb->tmr, pcb->keep_cnt_sent));\n\n  seg = pcb->unacked;\n\n  if(seg == NULL) {\n    seg = pcb->unsent;\n  }\n  if(seg == NULL) {\n    return;\n  }\n\n  is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0);\n  /* we want to send one seqno: either FIN or data (no options) */\n  len = is_fin ? 0 : 1;\n\n  p = tcp_output_alloc_header(pcb, 0, len, seg->tcphdr->seqno);\n  if(p == NULL) {\n    LWIP_DEBUGF(TCP_DEBUG, (\"tcp_zero_window_probe: no memory for pbuf\\n\"));\n    return;\n  }\n  tcphdr = (struct tcp_hdr *)p->payload;\n\n  if (is_fin) {\n    /* FIN segment, no data */\n    TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN);\n  } else {\n    /* Data segment, copy in one byte from the head of the unacked queue */\n    char *d = ((char *)p->payload + TCP_HLEN);\n    /* Depending on whether the segment has already been sent (unacked) or not\n       (unsent), seg->p->payload points to the IP header or TCP header.\n       Ensure we copy the first TCP data byte: */\n    pbuf_copy_partial(seg->p, d, 1, seg->p->tot_len - seg->len);\n  }\n\n#if CHECKSUM_GEN_TCP\n  tcphdr->chksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), p, IP_PROTO_TCP, p->tot_len,\n      &pcb->local_ip, &pcb->remote_ip);\n#endif\n  TCP_STATS_INC(tcp.xmit);\n\n  /* Send output to IP */\n#if LWIP_NETIF_HWADDRHINT\n  ipX_output_hinted(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl,\n    0, IP_PROTO_TCP, &pcb->addr_hint);\n#else /* LWIP_NETIF_HWADDRHINT*/\n  ipX_output(PCB_ISIPV6(pcb), p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP);\n#endif /* LWIP_NETIF_HWADDRHINT*/\n\n  pbuf_free(p);\n\n  LWIP_DEBUGF(TCP_DEBUG, (\"tcp_zero_window_probe: seqno %\"U32_F\n                          \" ackno %\"U32_F\".\\n\",\n                          pcb->snd_nxt - 1, pcb->rcv_nxt));\n}\n#endif /* LWIP_TCP */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/timers.c",
    "content": "/**\n * @file\n * Stack-internal timers implementation.\n * This file includes timer callbacks for stack-internal timers as well as\n * functions to set up or stop timers and check for expired timers.\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *         Simon Goldschmidt\n *\n */\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/timers.h\"\n#include \"lwip/tcp_impl.h\"\n\n#if LWIP_TIMERS\n\n#include \"lwip/def.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/tcpip.h\"\n\n#include \"lwip/ip_frag.h\"\n#include \"netif/etharp.h\"\n#include \"lwip/dhcp.h\"\n#include \"lwip/autoip.h\"\n#include \"lwip/igmp.h\"\n#include \"lwip/dns.h\"\n#include \"lwip/nd6.h\"\n#include \"lwip/ip6_frag.h\"\n#include \"lwip/mld6.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/pbuf.h\"\n\n/** The one and only timeout list */\nstatic struct sys_timeo *next_timeout;\n#if NO_SYS\nstatic u32_t timeouts_last_time;\n#endif /* NO_SYS */\n\n#if LWIP_TCP\n/** global variable that shows if the tcp timer is currently scheduled or not */\nstatic int tcpip_tcp_timer_active;\n\n/**\n * Timer callback function that calls tcp_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\ntcpip_tcp_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n\n  /* call TCP timer handler */\n  tcp_tmr();\n  /* timer still needed? */\n  if (tcp_active_pcbs || tcp_tw_pcbs) {\n    /* restart timer */\n    sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);\n  } else {\n    /* disable timer */\n    tcpip_tcp_timer_active = 0;\n  }\n}\n\n/**\n * Called from TCP_REG when registering a new PCB:\n * the reason is to have the TCP timer only running when\n * there are active (or time-wait) PCBs.\n */\nvoid\ntcp_timer_needed(void)\n{\n  /* timer is off but needed again? */\n  if (!tcpip_tcp_timer_active && (tcp_active_pcbs || tcp_tw_pcbs)) {\n    /* enable and start timer */\n    tcpip_tcp_timer_active = 1;\n    sys_timeout(TCP_TMR_INTERVAL, tcpip_tcp_timer, NULL);\n  }\n}\n#endif /* LWIP_TCP */\n\n#if IP_REASSEMBLY\n/**\n * Timer callback function that calls ip_reass_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nip_reass_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: ip_reass_tmr()\\n\"));\n  ip_reass_tmr();\n  sys_timeout(IP_TMR_INTERVAL, ip_reass_timer, NULL);\n}\n#endif /* IP_REASSEMBLY */\n\n#if LWIP_ARP\n/**\n * Timer callback function that calls etharp_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\narp_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: etharp_tmr()\\n\"));\n  etharp_tmr();\n  sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);\n}\n#endif /* LWIP_ARP */\n\n#if LWIP_DHCP\n/**\n * Timer callback function that calls dhcp_coarse_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\ndhcp_timer_coarse(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: dhcp_coarse_tmr()\\n\"));\n  dhcp_coarse_tmr();\n  sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);\n}\n\n/**\n * Timer callback function that calls dhcp_fine_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\ndhcp_timer_fine(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: dhcp_fine_tmr()\\n\"));\n  dhcp_fine_tmr();\n  sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);\n}\n#endif /* LWIP_DHCP */\n\n#if LWIP_AUTOIP\n/**\n * Timer callback function that calls autoip_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nautoip_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: autoip_tmr()\\n\"));\n  autoip_tmr();\n  sys_timeout(AUTOIP_TMR_INTERVAL, autoip_timer, NULL);\n}\n#endif /* LWIP_AUTOIP */\n\n#if LWIP_IGMP\n/**\n * Timer callback function that calls igmp_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nigmp_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: igmp_tmr()\\n\"));\n  igmp_tmr();\n  sys_timeout(IGMP_TMR_INTERVAL, igmp_timer, NULL);\n}\n#endif /* LWIP_IGMP */\n\n#if LWIP_DNS\n/**\n * Timer callback function that calls dns_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\ndns_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: dns_tmr()\\n\"));\n  dns_tmr();\n  sys_timeout(DNS_TMR_INTERVAL, dns_timer, NULL);\n}\n#endif /* LWIP_DNS */\n\n#if LWIP_IPV6\n/**\n * Timer callback function that calls nd6_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nnd6_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: nd6_tmr()\\n\"));\n  nd6_tmr();\n  sys_timeout(ND6_TMR_INTERVAL, nd6_timer, NULL);\n}\n\n#if LWIP_IPV6_REASS\n/**\n * Timer callback function that calls ip6_reass_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nip6_reass_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: ip6_reass_tmr()\\n\"));\n  ip6_reass_tmr();\n  sys_timeout(IP6_REASS_TMR_INTERVAL, ip6_reass_timer, NULL);\n}\n#endif /* LWIP_IPV6_REASS */\n\n#if LWIP_IPV6_MLD\n/**\n * Timer callback function that calls mld6_tmr() and reschedules itself.\n *\n * @param arg unused argument\n */\nstatic void\nmld6_timer(void *arg)\n{\n  LWIP_UNUSED_ARG(arg);\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"tcpip: mld6_tmr()\\n\"));\n  mld6_tmr();\n  sys_timeout(MLD6_TMR_INTERVAL, mld6_timer, NULL);\n}\n#endif /* LWIP_IPV6_MLD */\n#endif /* LWIP_IPV6 */\n\n/** Initialize this module */\nvoid sys_timeouts_init(void)\n{\n#if IP_REASSEMBLY\n  sys_timeout(IP_TMR_INTERVAL, ip_reass_timer, NULL);\n#endif /* IP_REASSEMBLY */\n#if LWIP_ARP\n  sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);\n#endif /* LWIP_ARP */\n#if LWIP_DHCP\n  sys_timeout(DHCP_COARSE_TIMER_MSECS, dhcp_timer_coarse, NULL);\n  sys_timeout(DHCP_FINE_TIMER_MSECS, dhcp_timer_fine, NULL);\n#endif /* LWIP_DHCP */\n#if LWIP_AUTOIP\n  sys_timeout(AUTOIP_TMR_INTERVAL, autoip_timer, NULL);\n#endif /* LWIP_AUTOIP */\n#if LWIP_IGMP\n  sys_timeout(IGMP_TMR_INTERVAL, igmp_timer, NULL);\n#endif /* LWIP_IGMP */\n#if LWIP_DNS\n  sys_timeout(DNS_TMR_INTERVAL, dns_timer, NULL);\n#endif /* LWIP_DNS */\n#if LWIP_IPV6\n  sys_timeout(ND6_TMR_INTERVAL, nd6_timer, NULL);\n#if LWIP_IPV6_REASS\n  sys_timeout(IP6_REASS_TMR_INTERVAL, ip6_reass_timer, NULL);\n#endif /* LWIP_IPV6_REASS */\n#if LWIP_IPV6_MLD\n  sys_timeout(MLD6_TMR_INTERVAL, mld6_timer, NULL);\n#endif /* LWIP_IPV6_MLD */\n#endif /* LWIP_IPV6 */\n\n#if NO_SYS\n  /* Initialise timestamp for sys_check_timeouts */\n  timeouts_last_time = sys_now();\n#endif\n}\n\n/**\n * Create a one-shot timer (aka timeout). Timeouts are processed in the\n * following cases:\n * - while waiting for a message using sys_timeouts_mbox_fetch()\n * - by calling sys_check_timeouts() (NO_SYS==1 only)\n *\n * @param msecs time in milliseconds after that the timer should expire\n * @param handler callback function to call when msecs have elapsed\n * @param arg argument to pass to the callback function\n */\n#if LWIP_DEBUG_TIMERNAMES\nvoid\nsys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name)\n#else /* LWIP_DEBUG_TIMERNAMES */\nvoid\nsys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)\n#endif /* LWIP_DEBUG_TIMERNAMES */\n{\n  struct sys_timeo *timeout, *t;\n  timeout = (struct sys_timeo *)memp_malloc(MEMP_SYS_TIMEOUT);\n  if (timeout == NULL) {\n    LWIP_ASSERT(\"sys_timeout: timeout != NULL, pool MEMP_SYS_TIMEOUT is empty\", timeout != NULL);\n    return;\n  }\n  timeout->next = NULL;\n  timeout->h = handler;\n  timeout->arg = arg;\n  timeout->time = msecs;\n#if LWIP_DEBUG_TIMERNAMES\n  timeout->handler_name = handler_name;\n  LWIP_DEBUGF(TIMERS_DEBUG, (\"sys_timeout: %p msecs=%\"U32_F\" handler=%s arg=%p\\n\",\n    (void *)timeout, msecs, handler_name, (void *)arg));\n#endif /* LWIP_DEBUG_TIMERNAMES */\n\n  if (next_timeout == NULL) {\n    next_timeout = timeout;\n    return;\n  }\n\n  if (next_timeout->time > msecs) {\n    next_timeout->time -= msecs;\n    timeout->next = next_timeout;\n    next_timeout = timeout;\n  } else {\n    for(t = next_timeout; t != NULL; t = t->next) {\n      timeout->time -= t->time;\n      if (t->next == NULL || t->next->time > timeout->time) {\n        if (t->next != NULL) {\n          t->next->time -= timeout->time;\n        }\n        timeout->next = t->next;\n        t->next = timeout;\n        break;\n      }\n    }\n  }\n}\n\n/**\n * Go through timeout list (for this task only) and remove the first matching\n * entry, even though the timeout has not triggered yet.\n *\n * @note This function only works as expected if there is only one timeout\n * calling 'handler' in the list of timeouts.\n *\n * @param handler callback function that would be called by the timeout\n * @param arg callback argument that would be passed to handler\n*/\nvoid\nsys_untimeout(sys_timeout_handler handler, void *arg)\n{\n  struct sys_timeo *prev_t, *t;\n\n  if (next_timeout == NULL) {\n    return;\n  }\n\n  for (t = next_timeout, prev_t = NULL; t != NULL; prev_t = t, t = t->next) {\n    if ((t->h == handler) && (t->arg == arg)) {\n      /* We have a match */\n      /* Unlink from previous in list */\n      if (prev_t == NULL) {\n        next_timeout = t->next;\n      } else {\n        prev_t->next = t->next;\n      }\n      /* If not the last one, add time of this one back to next */\n      if (t->next != NULL) {\n        t->next->time += t->time;\n      }\n      memp_free(MEMP_SYS_TIMEOUT, t);\n      return;\n    }\n  }\n  return;\n}\n\n#if NO_SYS\n\n/** Handle timeouts for NO_SYS==1 (i.e. without using\n * tcpip_thread/sys_timeouts_mbox_fetch(). Uses sys_now() to call timeout\n * handler functions when timeouts expire.\n *\n * Must be called periodically from your main loop.\n */\nvoid\nsys_check_timeouts(void)\n{\n  if (next_timeout) {\n    struct sys_timeo *tmptimeout;\n    u32_t diff;\n    sys_timeout_handler handler;\n    void *arg;\n    u8_t had_one;\n    u32_t now;\n\n    now = sys_now();\n    /* this cares for wraparounds */\n    diff = now - timeouts_last_time;\n    do\n    {\n#if PBUF_POOL_FREE_OOSEQ\n      PBUF_CHECK_FREE_OOSEQ();\n#endif /* PBUF_POOL_FREE_OOSEQ */\n      had_one = 0;\n      tmptimeout = next_timeout;\n      if (tmptimeout && (tmptimeout->time <= diff)) {\n        /* timeout has expired */\n        had_one = 1;\n        timeouts_last_time = now;\n        diff -= tmptimeout->time;\n        next_timeout = tmptimeout->next;\n        handler = tmptimeout->h;\n        arg = tmptimeout->arg;\n#if LWIP_DEBUG_TIMERNAMES\n        if (handler != NULL) {\n          LWIP_DEBUGF(TIMERS_DEBUG, (\"sct calling h=%s arg=%p\\n\",\n            tmptimeout->handler_name, arg));\n        }\n#endif /* LWIP_DEBUG_TIMERNAMES */\n        memp_free(MEMP_SYS_TIMEOUT, tmptimeout);\n        if (handler != NULL) {\n          handler(arg);\n        }\n      }\n    /* repeat until all expired timers have been called */\n    }while(had_one);\n  }\n}\n\n/** Set back the timestamp of the last call to sys_check_timeouts()\n * This is necessary if sys_check_timeouts() hasn't been called for a long\n * time (e.g. while saving energy) to prevent all timer functions of that\n * period being called.\n */\nvoid\nsys_restart_timeouts(void)\n{\n  timeouts_last_time = sys_now();\n}\n\n#else /* NO_SYS */\n\n/**\n * Wait (forever) for a message to arrive in an mbox.\n * While waiting, timeouts are processed.\n *\n * @param mbox the mbox to fetch the message from\n * @param msg the place to store the message\n */\nvoid\nsys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg)\n{\n  u32_t time_needed;\n  struct sys_timeo *tmptimeout;\n  sys_timeout_handler handler;\n  void *arg;\n\n again:\n  if (!next_timeout) {\n    time_needed = sys_arch_mbox_fetch(mbox, msg, 0);\n  } else {\n    if (next_timeout->time > 0) {\n      time_needed = sys_arch_mbox_fetch(mbox, msg, next_timeout->time);\n    } else {\n      time_needed = SYS_ARCH_TIMEOUT;\n    }\n\n    if (time_needed == SYS_ARCH_TIMEOUT) {\n      /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message\n         could be fetched. We should now call the timeout handler and\n         deallocate the memory allocated for the timeout. */\n      tmptimeout = next_timeout;\n      next_timeout = tmptimeout->next;\n      handler = tmptimeout->h;\n      arg = tmptimeout->arg;\n#if LWIP_DEBUG_TIMERNAMES\n      if (handler != NULL) {\n        LWIP_DEBUGF(TIMERS_DEBUG, (\"stmf calling h=%s arg=%p\\n\",\n          tmptimeout->handler_name, arg));\n      }\n#endif /* LWIP_DEBUG_TIMERNAMES */\n      memp_free(MEMP_SYS_TIMEOUT, tmptimeout);\n      if (handler != NULL) {\n        /* For LWIP_TCPIP_CORE_LOCKING, lock the core before calling the\n           timeout handler function. */\n        LOCK_TCPIP_CORE();\n        handler(arg);\n        UNLOCK_TCPIP_CORE();\n      }\n      LWIP_TCPIP_THREAD_ALIVE();\n\n      /* We try again to fetch a message from the mbox. */\n      goto again;\n    } else {\n      /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout\n         occured. The time variable is set to the number of\n         milliseconds we waited for the message. */\n      if (time_needed < next_timeout->time) {\n        next_timeout->time -= time_needed;\n      } else {\n        next_timeout->time = 0;\n      }\n    }\n  }\n}\n\n#endif /* NO_SYS */\n\n#else /* LWIP_TIMERS */\n/* Satisfy the TCP code which calls this function */\nvoid\ntcp_timer_needed(void)\n{\n}\n#endif /* LWIP_TIMERS */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/core/udp.c",
    "content": "/**\n * @file\n * User Datagram Protocol module\n *\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n\n/* udp.c\n *\n * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828).\n *\n */\n\n/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'!\n */\n\n#include \"lwip/opt.h\"\n\n#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/udp.h\"\n#include \"lwip/def.h\"\n#include \"lwip/memp.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/inet_chksum.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/icmp.h\"\n#include \"lwip/icmp6.h\"\n#include \"lwip/stats.h\"\n#include \"lwip/snmp.h\"\n#include \"arch/perf.h\"\n#include \"lwip/dhcp.h\"\n\n#include <string.h>\n\n#ifndef UDP_LOCAL_PORT_RANGE_START\n/* From http://www.iana.org/assignments/port-numbers:\n   \"The Dynamic and/or Private Ports are those from 49152 through 65535\" */\n#define UDP_LOCAL_PORT_RANGE_START  0xc000\n#define UDP_LOCAL_PORT_RANGE_END    0xffff\n#define UDP_ENSURE_LOCAL_PORT_RANGE(port) (((port) & ~UDP_LOCAL_PORT_RANGE_START) + UDP_LOCAL_PORT_RANGE_START)\n#endif\n\n/* last local UDP port */\nstatic u16_t udp_port = UDP_LOCAL_PORT_RANGE_START;\n\n/* The list of UDP PCBs */\n/* exported in udp.h (was static) */\nstruct udp_pcb *udp_pcbs;\n\n/**\n * Initialize this module.\n */\nvoid\nudp_init(void)\n{\n#if LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND)\n  udp_port = UDP_ENSURE_LOCAL_PORT_RANGE(LWIP_RAND());\n#endif /* LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS && defined(LWIP_RAND) */\n}\n\n/**\n * Allocate a new local UDP port.\n *\n * @return a new (free) local UDP port number\n */\nstatic u16_t\nudp_new_port(void)\n{\n  u16_t n = 0;\n  struct udp_pcb *pcb;\n  \nagain:\n  if (udp_port++ == UDP_LOCAL_PORT_RANGE_END) {\n    udp_port = UDP_LOCAL_PORT_RANGE_START;\n  }\n  /* Check all PCBs. */\n  for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {\n    if (pcb->local_port == udp_port) {\n      if (++n > (UDP_LOCAL_PORT_RANGE_END - UDP_LOCAL_PORT_RANGE_START)) {\n        return 0;\n      }\n      goto again;\n    }\n  }\n  return udp_port;\n#if 0\n  struct udp_pcb *ipcb = udp_pcbs;\n  while ((ipcb != NULL) && (udp_port != UDP_LOCAL_PORT_RANGE_END)) {\n    if (ipcb->local_port == udp_port) {\n      /* port is already used by another udp_pcb */\n      udp_port++;\n      /* restart scanning all udp pcbs */\n      ipcb = udp_pcbs;\n    } else {\n      /* go on with next udp pcb */\n      ipcb = ipcb->next;\n    }\n  }\n  if (ipcb != NULL) {\n    return 0;\n  }\n  return udp_port;\n#endif\n}\n\n/**\n * Process an incoming UDP datagram.\n *\n * Given an incoming UDP datagram (as a chain of pbufs) this function\n * finds a corresponding UDP PCB and hands over the pbuf to the pcbs\n * recv function. If no pcb is found or the datagram is incorrect, the\n * pbuf is freed.\n *\n * @param p pbuf to be demultiplexed to a UDP PCB (p->payload pointing to the UDP header)\n * @param inp network interface on which the datagram was received.\n *\n */\nvoid\nudp_input(struct pbuf *p, struct netif *inp)\n{\n  struct udp_hdr *udphdr;\n  struct udp_pcb *pcb, *prev;\n  struct udp_pcb *uncon_pcb;\n  u16_t src, dest;\n  u8_t local_match;\n  u8_t broadcast;\n  u8_t for_us;\n\n  PERF_START;\n\n  UDP_STATS_INC(udp.recv);\n\n  /* Check minimum length (UDP header) */\n  if (p->len < UDP_HLEN) {\n    /* drop short packets */\n    LWIP_DEBUGF(UDP_DEBUG,\n                (\"udp_input: short UDP datagram (%\"U16_F\" bytes) discarded\\n\", p->tot_len));\n    UDP_STATS_INC(udp.lenerr);\n    UDP_STATS_INC(udp.drop);\n    snmp_inc_udpinerrors();\n    pbuf_free(p);\n    goto end;\n  }\n\n  udphdr = (struct udp_hdr *)p->payload;\n\n  /* is broadcast packet ? */\n#if LWIP_IPV6\n  broadcast = !ip_current_is_v6() && ip_addr_isbroadcast(ip_current_dest_addr(), inp);\n#else /* LWIP_IPV6 */\n  broadcast = ip_addr_isbroadcast(ip_current_dest_addr(), inp);\n#endif /* LWIP_IPV6 */\n\n  LWIP_DEBUGF(UDP_DEBUG, (\"udp_input: received datagram of length %\"U16_F\"\\n\", p->tot_len));\n\n  /* convert src and dest ports to host byte order */\n  src = ntohs(udphdr->src);\n  dest = ntohs(udphdr->dest);\n\n  udp_debug_print(udphdr);\n\n  /* print the UDP source and destination */\n  LWIP_DEBUGF(UDP_DEBUG, (\"udp (\"));\n  ipX_addr_debug_print(ip_current_is_v6(), UDP_DEBUG, ipX_current_dest_addr());\n  LWIP_DEBUGF(UDP_DEBUG, (\", %\"U16_F\") <-- (\", ntohs(udphdr->dest)));\n  ipX_addr_debug_print(ip_current_is_v6(), UDP_DEBUG, ipX_current_src_addr());\n  LWIP_DEBUGF(UDP_DEBUG, (\", %\"U16_F\")\\n\", ntohs(udphdr->src)));\n\n#if LWIP_DHCP\n  pcb = NULL;\n  /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by\n     the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */\n  if (dest == DHCP_CLIENT_PORT) {\n    /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */\n    if (src == DHCP_SERVER_PORT) {\n      if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) {\n        /* accept the packe if \n           (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY!\n           - inp->dhcp->pcb->remote == ANY or iphdr->src\n           (no need to check for IPv6 since the dhcp struct always uses IPv4) */\n        if (ipX_addr_isany(0, &inp->dhcp->pcb->remote_ip) ||\n            ip_addr_cmp(ipX_2_ip(&(inp->dhcp->pcb->remote_ip)), ip_current_src_addr())) {\n          pcb = inp->dhcp->pcb;\n        }\n      }\n    }\n  } else\n#endif /* LWIP_DHCP */\n  {\n    prev = NULL;\n    local_match = 0;\n    uncon_pcb = NULL;\n    /* Iterate through the UDP pcb list for a matching pcb.\n     * 'Perfect match' pcbs (connected to the remote port & ip address) are\n     * preferred. If no perfect match is found, the first unconnected pcb that\n     * matches the local port and ip address gets the datagram. */\n    for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {\n      local_match = 0;\n      /* print the PCB local and remote address */\n      LWIP_DEBUGF(UDP_DEBUG, (\"pcb (\"));\n      ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG, &pcb->local_ip);\n      LWIP_DEBUGF(UDP_DEBUG, (\", %\"U16_F\") <-- (\", pcb->local_port));\n      ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG, &pcb->remote_ip);\n      LWIP_DEBUGF(UDP_DEBUG, (\", %\"U16_F\")\\n\", pcb->remote_port));\n\n      /* compare PCB local addr+port to UDP destination addr+port */\n      if (pcb->local_port == dest) {\n        if (\n#if LWIP_IPV6\n          ((PCB_ISIPV6(pcb) && (ip_current_is_v6()) &&\n            (ip6_addr_isany(ipX_2_ip6(&pcb->local_ip)) ||\n#if LWIP_IPV6_MLD\n            ip6_addr_ismulticast(ip6_current_dest_addr()) ||\n#endif /* LWIP_IPV6_MLD */\n            ip6_addr_cmp(ipX_2_ip6(&pcb->local_ip), ip6_current_dest_addr()))) ||\n           (!PCB_ISIPV6(pcb) &&\n            (ip_current_header() != NULL) &&\n#else /* LWIP_IPV6 */\n           ((\n#endif /* LWIP_IPV6 */\n            ((!broadcast && ipX_addr_isany(0, &pcb->local_ip)) ||\n            ip_addr_cmp(ipX_2_ip(&pcb->local_ip), ip_current_dest_addr()) ||\n#if LWIP_IGMP\n            ip_addr_ismulticast(ip_current_dest_addr()) ||\n#endif /* LWIP_IGMP */\n#if IP_SOF_BROADCAST_RECV\n            (broadcast && ip_get_option(pcb, SOF_BROADCAST) &&\n             (ipX_addr_isany(0, &pcb->local_ip) ||\n              ip_addr_netcmp(ipX_2_ip(&pcb->local_ip), ip_current_dest_addr(), &inp->netmask))))))) {\n#else /* IP_SOF_BROADCAST_RECV */\n            (broadcast &&\n             (ipX_addr_isany(0, &pcb->local_ip) ||\n              ip_addr_netcmp(ipX_2_ip(&pcb->local_ip), ip_current_dest_addr(), &inp->netmask))))))) {\n#endif /* IP_SOF_BROADCAST_RECV */ \n          local_match = 1;\n          if ((uncon_pcb == NULL) && \n              ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) {\n            /* the first unconnected matching PCB */\n            uncon_pcb = pcb;\n          }\n        }\n      }\n      /* compare PCB remote addr+port to UDP source addr+port */\n      if ((local_match != 0) &&\n          (pcb->remote_port == src) && IP_PCB_IPVER_INPUT_MATCH(pcb) &&\n            (ipX_addr_isany(PCB_ISIPV6(pcb), &pcb->remote_ip) ||\n              ipX_addr_cmp(PCB_ISIPV6(pcb), &pcb->remote_ip, ipX_current_src_addr()))) {\n        /* the first fully matching PCB */\n        if (prev != NULL) {\n          /* move the pcb to the front of udp_pcbs so that is\n             found faster next time */\n          prev->next = pcb->next;\n          pcb->next = udp_pcbs;\n          udp_pcbs = pcb;\n        } else {\n          UDP_STATS_INC(udp.cachehit);\n        }\n        break;\n      }\n      prev = pcb;\n    }\n    /* no fully matching pcb found? then look for an unconnected pcb */\n    if (pcb == NULL) {\n      pcb = uncon_pcb;\n    }\n  }\n\n  /* Check checksum if this is a match or if it was directed at us. */\n  if (pcb != NULL) {\n    for_us = 1;\n  } else {\n#if LWIP_IPV6\n    if (ip_current_is_v6()) {\n      for_us = netif_matches_ip6_addr(inp, ip6_current_dest_addr());\n    } else\n#endif /* LWIP_IPV6 */\n    {\n      for_us = ip_addr_cmp(&inp->ip_addr, ip_current_dest_addr());\n    }\n  }\n  if (for_us) {\n    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\"udp_input: calculating checksum\\n\"));\n#if CHECKSUM_CHECK_UDP\n#if LWIP_UDPLITE\n    if (ip_current_header_proto() == IP_PROTO_UDPLITE) {\n      /* Do the UDP Lite checksum */\n      u16_t chklen = ntohs(udphdr->len);\n      if (chklen < sizeof(struct udp_hdr)) {\n        if (chklen == 0) {\n          /* For UDP-Lite, checksum length of 0 means checksum\n             over the complete packet (See RFC 3828 chap. 3.1) */\n          chklen = p->tot_len;\n        } else {\n          /* At least the UDP-Lite header must be covered by the\n             checksum! (Again, see RFC 3828 chap. 3.1) */\n          goto chkerr;\n        }\n      }\n      if (ipX_chksum_pseudo_partial(ip_current_is_v6(), p, IP_PROTO_UDPLITE,\n                   p->tot_len, chklen,\n                   ipX_current_src_addr(), ipX_current_dest_addr()) != 0) {\n        goto chkerr;\n      }\n    } else\n#endif /* LWIP_UDPLITE */\n    {\n      if (udphdr->chksum != 0) {\n        if (ipX_chksum_pseudo(ip_current_is_v6(), p, IP_PROTO_UDP, p->tot_len,\n                              ipX_current_src_addr(),\n                              ipX_current_dest_addr()) != 0) {\n          goto chkerr;\n        }\n      }\n    }\n#endif /* CHECKSUM_CHECK_UDP */\n    if(pbuf_header(p, -UDP_HLEN)) {\n      /* Can we cope with this failing? Just assert for now */\n      LWIP_ASSERT(\"pbuf_header failed\\n\", 0);\n      UDP_STATS_INC(udp.drop);\n      snmp_inc_udpinerrors();\n      pbuf_free(p);\n      goto end;\n    }\n    if (pcb != NULL) {\n      snmp_inc_udpindatagrams();\n#if SO_REUSE && SO_REUSE_RXTOALL\n      if ((broadcast ||\n#if LWIP_IPV6\n          ip6_addr_ismulticast(ip6_current_dest_addr()) ||\n#endif /* LWIP_IPV6 */\n           ip_addr_ismulticast(ip_current_dest_addr())) &&\n          ip_get_option(pcb, SOF_REUSEADDR)) {\n        /* pass broadcast- or multicast packets to all multicast pcbs\n           if SOF_REUSEADDR is set on the first match */\n        struct udp_pcb *mpcb;\n        u8_t p_header_changed = 0;\n        s16_t hdrs_len = (s16_t)(ip_current_header_tot_len() + UDP_HLEN);\n        for (mpcb = udp_pcbs; mpcb != NULL; mpcb = mpcb->next) {\n          if (mpcb != pcb) {\n            /* compare PCB local addr+port to UDP destination addr+port */\n            if ((mpcb->local_port == dest) &&\n#if LWIP_IPV6\n                ((PCB_ISIPV6(mpcb) &&\n                  (ip6_addr_ismulticast(ip6_current_dest_addr()) ||\n                   ip6_addr_cmp(ipX_2_ip6(&mpcb->local_ip), ip6_current_dest_addr()))) ||\n                 (!PCB_ISIPV6(mpcb) &&\n#else /* LWIP_IPV6 */\n                ((\n#endif /* LWIP_IPV6 */\n                  ((!broadcast && ipX_addr_isany(0, &mpcb->local_ip)) ||\n                   ip_addr_cmp(ipX_2_ip(&mpcb->local_ip), ip_current_dest_addr()) ||\n#if LWIP_IGMP\n                   ip_addr_ismulticast(ip_current_dest_addr()) ||\n#endif /* LWIP_IGMP */\n#if IP_SOF_BROADCAST_RECV\n                   (broadcast && ip_get_option(mpcb, SOF_BROADCAST)))))) {\n#else  /* IP_SOF_BROADCAST_RECV */\n                   (broadcast))))) {\n#endif /* IP_SOF_BROADCAST_RECV */\n              /* pass a copy of the packet to all local matches */\n              if (mpcb->recv.ip4 != NULL) {\n                struct pbuf *q;\n                /* for that, move payload to IP header again */\n                if (p_header_changed == 0) {\n                  pbuf_header(p, hdrs_len);\n                  p_header_changed = 1;\n                }\n                q = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);\n                if (q != NULL) {\n                  err_t err = pbuf_copy(q, p);\n                  if (err == ERR_OK) {\n                    /* move payload to UDP data */\n                    pbuf_header(q, -hdrs_len);\n#if LWIP_IPV6\n                    if (PCB_ISIPV6(mpcb)) {\n                      mpcb->recv.ip6(mpcb->recv_arg, mpcb, q, ip6_current_src_addr(), src);\n                    }\n                    else\n#endif /* LWIP_IPV6 */\n                    {\n                      mpcb->recv.ip4(mpcb->recv_arg, mpcb, q, ip_current_src_addr(), src);\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n        if (p_header_changed) {\n          /* and move payload to UDP data again */\n          pbuf_header(p, -hdrs_len);\n        }\n      }\n#endif /* SO_REUSE && SO_REUSE_RXTOALL */\n      /* callback */\n      if (pcb->recv.ip4 != NULL) {\n        /* now the recv function is responsible for freeing p */\n#if LWIP_IPV6\n        if (PCB_ISIPV6(pcb)) {\n          pcb->recv.ip6(pcb->recv_arg, pcb, p, ip6_current_src_addr(), src);\n        }\n        else\n#endif /* LWIP_IPV6 */\n        {\n          pcb->recv.ip4(pcb->recv_arg, pcb, p, ip_current_src_addr(), src);\n        }\n      } else {\n        /* no recv function registered? then we have to free the pbuf! */\n        pbuf_free(p);\n        goto end;\n      }\n    } else {\n      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\"udp_input: not for us.\\n\"));\n\n#if LWIP_ICMP || LWIP_ICMP6\n      /* No match was found, send ICMP destination port unreachable unless\n         destination address was broadcast/multicast. */\n      if (!broadcast &&\n#if LWIP_IPV6\n          !ip6_addr_ismulticast(ip6_current_dest_addr()) &&\n#endif /* LWIP_IPV6 */\n          !ip_addr_ismulticast(ip_current_dest_addr())) {\n        /* move payload pointer back to ip header */\n        pbuf_header(p, ip_current_header_tot_len() + UDP_HLEN);\n        icmp_port_unreach(ip_current_is_v6(), p);\n      }\n#endif /* LWIP_ICMP || LWIP_ICMP6 */\n      UDP_STATS_INC(udp.proterr);\n      UDP_STATS_INC(udp.drop);\n      snmp_inc_udpnoports();\n      pbuf_free(p);\n    }\n  } else {\n    pbuf_free(p);\n  }\nend:\n  PERF_STOP(\"udp_input\");\n  return;\n#if CHECKSUM_CHECK_UDP\nchkerr:\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n              (\"udp_input: UDP (or UDP Lite) datagram discarded due to failing checksum\\n\"));\n  UDP_STATS_INC(udp.chkerr);\n  UDP_STATS_INC(udp.drop);\n  snmp_inc_udpinerrors();\n  pbuf_free(p);\n  PERF_STOP(\"udp_input\");\n#endif /* CHECKSUM_CHECK_UDP */\n}\n\n/**\n * Send data using UDP.\n *\n * @param pcb UDP PCB used to send the data.\n * @param p chain of pbuf's to be sent.\n *\n * The datagram will be sent to the current remote_ip & remote_port\n * stored in pcb. If the pcb is not bound to a port, it will\n * automatically be bound to a random port.\n *\n * @return lwIP error code.\n * - ERR_OK. Successful. No error occured.\n * - ERR_MEM. Out of memory.\n * - ERR_RTE. Could not find route to destination address.\n * - More errors could be returned by lower protocol layers.\n *\n * @see udp_disconnect() udp_sendto()\n */\nerr_t\nudp_send(struct udp_pcb *pcb, struct pbuf *p)\n{\n  /* send to the packet using remote ip and port stored in the pcb */\n  return udp_sendto(pcb, p, ipX_2_ip(&pcb->remote_ip), pcb->remote_port);\n}\n\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\n/** Same as udp_send() but with checksum\n */\nerr_t\nudp_send_chksum(struct udp_pcb *pcb, struct pbuf *p,\n                u8_t have_chksum, u16_t chksum)\n{\n  /* send to the packet using remote ip and port stored in the pcb */\n  return udp_sendto_chksum(pcb, p, ipX_2_ip(&pcb->remote_ip), pcb->remote_port,\n    have_chksum, chksum);\n}\n#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n\n/**\n * Send data to a specified address using UDP.\n *\n * @param pcb UDP PCB used to send the data.\n * @param p chain of pbuf's to be sent.\n * @param dst_ip Destination IP address.\n * @param dst_port Destination UDP port.\n *\n * dst_ip & dst_port are expected to be in the same byte order as in the pcb.\n *\n * If the PCB already has a remote address association, it will\n * be restored after the data is sent.\n * \n * @return lwIP error code (@see udp_send for possible error codes)\n *\n * @see udp_disconnect() udp_send()\n */\nerr_t\nudp_sendto(struct udp_pcb *pcb, struct pbuf *p,\n  ip_addr_t *dst_ip, u16_t dst_port)\n{\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\n  return udp_sendto_chksum(pcb, p, dst_ip, dst_port, 0, 0);\n}\n\n/** Same as udp_sendto(), but with checksum */\nerr_t\nudp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *dst_ip,\n                  u16_t dst_port, u8_t have_chksum, u16_t chksum)\n{\n#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n  struct netif *netif;\n  ipX_addr_t *dst_ip_route = ip_2_ipX(dst_ip);\n\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\"udp_send\\n\"));\n\n#if LWIP_IPV6 || LWIP_IGMP\n  if (ipX_addr_ismulticast(PCB_ISIPV6(pcb), dst_ip_route)) {\n    /* For multicast, find a netif based on source address. */\n#if LWIP_IPV6\n    if (PCB_ISIPV6(pcb)) {\n      dst_ip_route = &pcb->local_ip;\n    } else\n#endif /* LWIP_IPV6 */\n    {\n#if LWIP_IGMP\n      dst_ip_route = ip_2_ipX(&pcb->multicast_ip);\n#endif /* LWIP_IGMP */\n    }\n  }\n#endif /* LWIP_IPV6 || LWIP_IGMP */\n\n  /* find the outgoing network interface for this packet */\n  netif = ipX_route(PCB_ISIPV6(pcb), &pcb->local_ip, dst_ip_route);\n\n  /* no outgoing network interface could be found? */\n  if (netif == NULL) {\n    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, (\"udp_send: No route to \"));\n    ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ip_2_ipX(dst_ip));\n    LWIP_DEBUGF(UDP_DEBUG, (\"\\n\"));\n    UDP_STATS_INC(udp.rterr);\n    return ERR_RTE;\n  }\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\n  return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, have_chksum, chksum);\n#else /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n  return udp_sendto_if(pcb, p, dst_ip, dst_port, netif);\n#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n}\n\n/**\n * Send data to a specified address using UDP.\n * The netif used for sending can be specified.\n *\n * This function exists mainly for DHCP, to be able to send UDP packets\n * on a netif that is still down.\n *\n * @param pcb UDP PCB used to send the data.\n * @param p chain of pbuf's to be sent.\n * @param dst_ip Destination IP address.\n * @param dst_port Destination UDP port.\n * @param netif the netif used for sending.\n *\n * dst_ip & dst_port are expected to be in the same byte order as in the pcb.\n *\n * @return lwIP error code (@see udp_send for possible error codes)\n *\n * @see udp_disconnect() udp_send()\n */\nerr_t\nudp_sendto_if(struct udp_pcb *pcb, struct pbuf *p,\n  ip_addr_t *dst_ip, u16_t dst_port, struct netif *netif)\n{\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\n  return udp_sendto_if_chksum(pcb, p, dst_ip, dst_port, netif, 0, 0);\n}\n\n/** Same as udp_sendto_if(), but with checksum */\nerr_t\nudp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *dst_ip,\n                     u16_t dst_port, struct netif *netif, u8_t have_chksum,\n                     u16_t chksum)\n{\n#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n  struct udp_hdr *udphdr;\n  ip_addr_t *src_ip;\n  err_t err;\n  struct pbuf *q; /* q will be sent down the stack */\n  u8_t ip_proto;\n\n#if IP_SOF_BROADCAST\n  /* broadcast filter? */\n  if (!ip_get_option(pcb, SOF_BROADCAST) &&\n#if LWIP_IPV6\n      !PCB_ISIPV6(pcb) &&\n#endif /* LWIP_IPV6 */\n      ip_addr_isbroadcast(dst_ip, netif) ) {\n    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS,\n      (\"udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\\n\", (void *)pcb));\n    return ERR_VAL;\n  }\n#endif /* IP_SOF_BROADCAST */\n\n  /* if the PCB is not yet bound to a port, bind it here */\n  if (pcb->local_port == 0) {\n    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\"udp_send: not yet bound to a port, binding now\\n\"));\n    err = udp_bind(pcb, ipX_2_ip(&pcb->local_ip), pcb->local_port);\n    if (err != ERR_OK) {\n      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, (\"udp_send: forced port bind failed\\n\"));\n      return err;\n    }\n  }\n\n  /* not enough space to add an UDP header to first pbuf in given p chain? */\n  if (pbuf_header(p, UDP_HLEN)) {\n    /* allocate header in a separate new pbuf */\n    q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM);\n    /* new header pbuf could not be allocated? */\n    if (q == NULL) {\n      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, (\"udp_send: could not allocate header\\n\"));\n      return ERR_MEM;\n    }\n    if (p->tot_len != 0) {\n      /* chain header q in front of given pbuf p (only if p contains data) */\n      pbuf_chain(q, p);\n    }\n    /* first pbuf q points to header pbuf */\n    LWIP_DEBUGF(UDP_DEBUG,\n                (\"udp_send: added header pbuf %p before given pbuf %p\\n\", (void *)q, (void *)p));\n  } else {\n    /* adding space for header within p succeeded */\n    /* first pbuf q equals given pbuf */\n    q = p;\n    LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: added header in given pbuf %p\\n\", (void *)p));\n  }\n  LWIP_ASSERT(\"check that first pbuf can hold struct udp_hdr\",\n              (q->len >= sizeof(struct udp_hdr)));\n  /* q now represents the packet to be sent */\n  udphdr = (struct udp_hdr *)q->payload;\n  udphdr->src = htons(pcb->local_port);\n  udphdr->dest = htons(dst_port);\n  /* in UDP, 0 checksum means 'no checksum' */\n  udphdr->chksum = 0x0000; \n\n  /* Multicast Loop? */\n#if LWIP_IGMP\n  if (((pcb->flags & UDP_FLAGS_MULTICAST_LOOP) != 0) &&\n#if LWIP_IPV6\n      (\n#if LWIP_IPV6_MLD\n       (PCB_ISIPV6(pcb) &&\n        ip6_addr_ismulticast(ip_2_ip6(dst_ip))) ||\n#endif /* LWIP_IPV6_MLD */\n       (!PCB_ISIPV6(pcb) &&\n#else /* LWIP_IPV6 */\n      ((\n#endif /* LWIP_IPV6 */\n        ip_addr_ismulticast(dst_ip)))) {\n    q->flags |= PBUF_FLAG_MCASTLOOP;\n  }\n#endif /* LWIP_IGMP */\n\n\n  /* PCB local address is IP_ANY_ADDR? */\n#if LWIP_IPV6\n  if (PCB_ISIPV6(pcb)) {\n    if (ip6_addr_isany(ipX_2_ip6(&pcb->local_ip))) {\n      src_ip = ip6_2_ip(ip6_select_source_address(netif, ip_2_ip6(dst_ip)));\n      if (src_ip == NULL) {\n        /* No suitable source address was found. */\n        if (q != p) {\n          /* free the header pbuf */\n          pbuf_free(q);\n          /* p is still referenced by the caller, and will live on */\n        }\n        return ERR_RTE;\n      }\n    } else {\n      /* use UDP PCB local IPv6 address as source address, if still valid. */\n      if (netif_matches_ip6_addr(netif, ipX_2_ip6(&pcb->local_ip)) < 0) {\n        /* Address isn't valid anymore. */\n        if (q != p) {\n          /* free the header pbuf */\n          pbuf_free(q);\n          /* p is still referenced by the caller, and will live on */\n        }\n        return ERR_RTE;\n      }\n      src_ip = ipX_2_ip(&pcb->local_ip);\n    }\n  }\n  else\n#endif /* LWIP_IPV6 */\n  if (ip_addr_isany(ipX_2_ip(&pcb->local_ip))) {\n    /* use outgoing network interface IP address as source address */\n    src_ip = &(netif->ip_addr);\n  } else {\n    /* check if UDP PCB local IP address is correct\n     * this could be an old address if netif->ip_addr has changed */\n    if (!ip_addr_cmp(ipX_2_ip(&(pcb->local_ip)), &(netif->ip_addr))) {\n      /* local_ip doesn't match, drop the packet */\n      if (q != p) {\n        /* free the header pbuf */\n        pbuf_free(q);\n        q = NULL;\n        /* p is still referenced by the caller, and will live on */\n      }\n      return ERR_VAL;\n    }\n    /* use UDP PCB local IP address as source address */\n    src_ip = ipX_2_ip(&(pcb->local_ip));\n  }\n\n  LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: sending datagram of length %\"U16_F\"\\n\", q->tot_len));\n\n#if LWIP_UDPLITE\n  /* UDP Lite protocol? */\n  if (pcb->flags & UDP_FLAGS_UDPLITE) {\n    u16_t chklen, chklen_hdr;\n    LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: UDP LITE packet length %\"U16_F\"\\n\", q->tot_len));\n    /* set UDP message length in UDP header */\n    chklen_hdr = chklen = pcb->chksum_len_tx;\n    if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) {\n      if (chklen != 0) {\n        LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: UDP LITE pcb->chksum_len is illegal: %\"U16_F\"\\n\", chklen));\n      }\n      /* For UDP-Lite, checksum length of 0 means checksum\n         over the complete packet. (See RFC 3828 chap. 3.1)\n         At least the UDP-Lite header must be covered by the\n         checksum, therefore, if chksum_len has an illegal\n         value, we generate the checksum over the complete\n         packet to be safe. */\n      chklen_hdr = 0;\n      chklen = q->tot_len;\n    }\n    udphdr->len = htons(chklen_hdr);\n    /* calculate checksum */\n#if CHECKSUM_GEN_UDP\n#if LWIP_CHECKSUM_ON_COPY\n    if (have_chksum) {\n      chklen = UDP_HLEN;\n    }\n#endif /* LWIP_CHECKSUM_ON_COPY */\n    udphdr->chksum = ipX_chksum_pseudo_partial(PCB_ISIPV6(pcb), q, IP_PROTO_UDPLITE,\n      q->tot_len, chklen, ip_2_ipX(src_ip), ip_2_ipX(dst_ip));\n#if LWIP_CHECKSUM_ON_COPY\n    if (have_chksum) {\n      u32_t acc;\n      acc = udphdr->chksum + (u16_t)~(chksum);\n      udphdr->chksum = FOLD_U32T(acc);\n    }\n#endif /* LWIP_CHECKSUM_ON_COPY */\n\n    /* chksum zero must become 0xffff, as zero means 'no checksum' */\n    if (udphdr->chksum == 0x0000) {\n      udphdr->chksum = 0xffff;\n    }\n#endif /* CHECKSUM_GEN_UDP */\n\n    ip_proto = IP_PROTO_UDPLITE;\n  } else\n#endif /* LWIP_UDPLITE */\n  {      /* UDP */\n    LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: UDP packet length %\"U16_F\"\\n\", q->tot_len));\n    udphdr->len = htons(q->tot_len);\n    /* calculate checksum */\n#if CHECKSUM_GEN_UDP\n    /* Checksum is mandatory over IPv6. */\n    if (PCB_ISIPV6(pcb) || (pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) {\n      u16_t udpchksum;\n#if LWIP_CHECKSUM_ON_COPY\n      if (have_chksum) {\n        u32_t acc;\n        udpchksum = ipX_chksum_pseudo_partial(PCB_ISIPV6(pcb), q, IP_PROTO_UDP,\n          q->tot_len, UDP_HLEN, ip_2_ipX(src_ip), ip_2_ipX(dst_ip));\n        acc = udpchksum + (u16_t)~(chksum);\n        udpchksum = FOLD_U32T(acc);\n      } else\n#endif /* LWIP_CHECKSUM_ON_COPY */\n      {\n        udpchksum = ipX_chksum_pseudo(PCB_ISIPV6(pcb), q, IP_PROTO_UDP, q->tot_len,\n          ip_2_ipX(src_ip), ip_2_ipX(dst_ip));\n      }\n\n      /* chksum zero must become 0xffff, as zero means 'no checksum' */\n      if (udpchksum == 0x0000) {\n        udpchksum = 0xffff;\n      }\n      udphdr->chksum = udpchksum;\n    }\n#endif /* CHECKSUM_GEN_UDP */\n    ip_proto = IP_PROTO_UDP;\n  }\n\n  LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: UDP checksum 0x%04\"X16_F\"\\n\", udphdr->chksum));\n  LWIP_DEBUGF(UDP_DEBUG, (\"udp_send: ip_output_if (,,,,0x%02\"X16_F\",)\\n\", (u16_t)ip_proto));\n  /* output to IP */\n  NETIF_SET_HWADDRHINT(netif, &(pcb->addr_hint));\n  err = ipX_output_if(PCB_ISIPV6(pcb), q, src_ip, dst_ip, pcb->ttl, pcb->tos, ip_proto, netif);\n  NETIF_SET_HWADDRHINT(netif, NULL);\n\n  /* TODO: must this be increased even if error occured? */\n  snmp_inc_udpoutdatagrams();\n\n  /* did we chain a separate header pbuf earlier? */\n  if (q != p) {\n    /* free the header pbuf */\n    pbuf_free(q);\n    q = NULL;\n    /* p is still referenced by the caller, and will live on */\n  }\n\n  UDP_STATS_INC(udp.xmit);\n  return err;\n}\n\n/**\n * Bind an UDP PCB.\n *\n * @param pcb UDP PCB to be bound with a local address ipaddr and port.\n * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to\n * bind to all local interfaces.\n * @param port local UDP port to bind with. Use 0 to automatically bind\n * to a random port between UDP_LOCAL_PORT_RANGE_START and\n * UDP_LOCAL_PORT_RANGE_END.\n *\n * ipaddr & port are expected to be in the same byte order as in the pcb.\n *\n * @return lwIP error code.\n * - ERR_OK. Successful. No error occured.\n * - ERR_USE. The specified ipaddr and port are already bound to by\n * another UDP PCB.\n *\n * @see udp_disconnect()\n */\nerr_t\nudp_bind(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)\n{\n  struct udp_pcb *ipcb;\n  u8_t rebind;\n\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\"udp_bind(ipaddr = \"));\n  ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG | LWIP_DBG_TRACE, ip_2_ipX(ipaddr));\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (\", port = %\"U16_F\")\\n\", port));\n\n  rebind = 0;\n  /* Check for double bind and rebind of the same pcb */\n  for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {\n    /* is this UDP PCB already on active list? */\n    if (pcb == ipcb) {\n      /* pcb may occur at most once in active list */\n      LWIP_ASSERT(\"rebind == 0\", rebind == 0);\n      /* pcb already in list, just rebind */\n      rebind = 1;\n    }\n\n    /* By default, we don't allow to bind to a port that any other udp\n       PCB is alread bound to, unless *all* PCBs with that port have tha\n       REUSEADDR flag set. */\n#if SO_REUSE\n    else if (!ip_get_option(pcb, SOF_REUSEADDR) &&\n             !ip_get_option(ipcb, SOF_REUSEADDR)) {\n#else /* SO_REUSE */\n    /* port matches that of PCB in list and REUSEADDR not set -> reject */\n    else {\n#endif /* SO_REUSE */\n      if ((ipcb->local_port == port) && IP_PCB_IPVER_EQ(pcb, ipcb) &&\n          /* IP address matches, or one is IP_ADDR_ANY? */\n            (ipX_addr_isany(PCB_ISIPV6(ipcb), &(ipcb->local_ip)) ||\n             ipX_addr_isany(PCB_ISIPV6(ipcb), ip_2_ipX(ipaddr)) ||\n             ipX_addr_cmp(PCB_ISIPV6(ipcb), &(ipcb->local_ip), ip_2_ipX(ipaddr)))) {\n        /* other PCB already binds to this local IP and port */\n        LWIP_DEBUGF(UDP_DEBUG,\n                    (\"udp_bind: local port %\"U16_F\" already bound by another pcb\\n\", port));\n        return ERR_USE;\n      }\n    }\n  }\n\n  ipX_addr_set_ipaddr(PCB_ISIPV6(pcb), &pcb->local_ip, ipaddr);\n\n  /* no port specified? */\n  if (port == 0) {\n    port = udp_new_port();\n    if (port == 0) {\n      /* no more ports available in local range */\n      LWIP_DEBUGF(UDP_DEBUG, (\"udp_bind: out of free UDP ports\\n\"));\n      return ERR_USE;\n    }\n  }\n  pcb->local_port = port;\n  snmp_insert_udpidx_tree(pcb);\n  /* pcb not active yet? */\n  if (rebind == 0) {\n    /* place the PCB on the active list if not already there */\n    pcb->next = udp_pcbs;\n    udp_pcbs = pcb;\n  }\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\"udp_bind: bound to \"));\n  ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, &pcb->local_ip);\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\", port %\"U16_F\")\\n\", pcb->local_port));\n  return ERR_OK;\n}\n\n/**\n * Connect an UDP PCB.\n *\n * This will associate the UDP PCB with the remote address.\n *\n * @param pcb UDP PCB to be connected with remote address ipaddr and port.\n * @param ipaddr remote IP address to connect with.\n * @param port remote UDP port to connect with.\n *\n * @return lwIP error code\n *\n * ipaddr & port are expected to be in the same byte order as in the pcb.\n *\n * The udp pcb is bound to a random local port if not already bound.\n *\n * @see udp_disconnect()\n */\nerr_t\nudp_connect(struct udp_pcb *pcb, ip_addr_t *ipaddr, u16_t port)\n{\n  struct udp_pcb *ipcb;\n\n  if (pcb->local_port == 0) {\n    err_t err = udp_bind(pcb, ipX_2_ip(&pcb->local_ip), pcb->local_port);\n    if (err != ERR_OK) {\n      return err;\n    }\n  }\n\n  ipX_addr_set_ipaddr(PCB_ISIPV6(pcb), &pcb->remote_ip, ipaddr);\n  pcb->remote_port = port;\n  pcb->flags |= UDP_FLAGS_CONNECTED;\n/** TODO: this functionality belongs in upper layers */\n#ifdef LWIP_UDP_TODO\n#if LWIP_IPV6\n  if (!PCB_ISIPV6(pcb))\n#endif /* LWIP_IPV6 */\n  {\n    /* Nail down local IP for netconn_addr()/getsockname() */\n    if (ip_addr_isany(ipX_2_ip(&pcb->local_ip)) && !ip_addr_isany(ipX_2_ip(&pcb->remote_ip))) {\n      struct netif *netif;\n\n      if ((netif = ip_route(ipX_2_ip(&pcb->remote_ip))) == NULL) {\n        LWIP_DEBUGF(UDP_DEBUG, (\"udp_connect: No route to 0x%lx\\n\",\n                    ip4_addr_get_u32(ipX_2_ip(&pcb->remote_ip))));\n        UDP_STATS_INC(udp.rterr);\n        return ERR_RTE;\n      }\n      /** TODO: this will bind the udp pcb locally, to the interface which\n          is used to route output packets to the remote address. However, we\n          might want to accept incoming packets on any interface! */\n      ipX_addr_copy(0, pcb->local_ip, netif->ip_addr);\n    } else if (ip_addr_isany(ipX_2_ip(&pcb->remote_ip))) {\n      ipX_addr_set_any(0, &pcb->local_ip);\n    }\n  }\n#endif\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\"udp_connect: connected to \"));\n  ipX_addr_debug_print(PCB_ISIPV6(pcb), UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE,\n                       &pcb->remote_ip);\n  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, (\", port %\"U16_F\")\\n\", pcb->remote_port));\n\n  /* Insert UDP PCB into the list of active UDP PCBs. */\n  for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) {\n    if (pcb == ipcb) {\n      /* already on the list, just return */\n      return ERR_OK;\n    }\n  }\n  /* PCB not yet on the list, add PCB now */\n  pcb->next = udp_pcbs;\n  udp_pcbs = pcb;\n  return ERR_OK;\n}\n\n/**\n * Disconnect a UDP PCB\n *\n * @param pcb the udp pcb to disconnect.\n */\nvoid\nudp_disconnect(struct udp_pcb *pcb)\n{\n  /* reset remote address association */\n  ipX_addr_set_any(PCB_ISIPV6(pcb), &pcb->remote_ip);\n  pcb->remote_port = 0;\n  /* mark PCB as unconnected */\n  pcb->flags &= ~UDP_FLAGS_CONNECTED;\n}\n\n/**\n * Set a receive callback for a UDP PCB\n *\n * This callback will be called when receiving a datagram for the pcb.\n *\n * @param pcb the pcb for wich to set the recv callback\n * @param recv function pointer of the callback function\n * @param recv_arg additional argument to pass to the callback function\n */\nvoid\nudp_recv(struct udp_pcb *pcb, udp_recv_fn recv, void *recv_arg)\n{\n  /* remember recv() callback and user data */\n  pcb->recv.ip4 = recv;\n  pcb->recv_arg = recv_arg;\n}\n\n/**\n * Remove an UDP PCB.\n *\n * @param pcb UDP PCB to be removed. The PCB is removed from the list of\n * UDP PCB's and the data structure is freed from memory.\n *\n * @see udp_new()\n */\nvoid\nudp_remove(struct udp_pcb *pcb)\n{\n  struct udp_pcb *pcb2;\n\n  snmp_delete_udpidx_tree(pcb);\n  /* pcb to be removed is first in list? */\n  if (udp_pcbs == pcb) {\n    /* make list start at 2nd pcb */\n    udp_pcbs = udp_pcbs->next;\n    /* pcb not 1st in list */\n  } else {\n    for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) {\n      /* find pcb in udp_pcbs list */\n      if (pcb2->next != NULL && pcb2->next == pcb) {\n        /* remove pcb from list */\n        pcb2->next = pcb->next;\n      }\n    }\n  }\n  memp_free(MEMP_UDP_PCB, pcb);\n}\n\n/**\n * Create a UDP PCB.\n *\n * @return The UDP PCB which was created. NULL if the PCB data structure\n * could not be allocated.\n *\n * @see udp_remove()\n */\nstruct udp_pcb *\nudp_new(void)\n{\n  struct udp_pcb *pcb;\n  pcb = (struct udp_pcb *)memp_malloc(MEMP_UDP_PCB);\n  /* could allocate UDP PCB? */\n  if (pcb != NULL) {\n    /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0\n     * which means checksum is generated over the whole datagram per default\n     * (recommended as default by RFC 3828). */\n    /* initialize PCB to all zeroes */\n    memset(pcb, 0, sizeof(struct udp_pcb));\n    pcb->ttl = UDP_TTL;\n  }\n  return pcb;\n}\n\n#if LWIP_IPV6\n/**\n * Create a UDP PCB for IPv6.\n *\n * @return The UDP PCB which was created. NULL if the PCB data structure\n * could not be allocated.\n *\n * @see udp_remove()\n */\nstruct udp_pcb *\nudp_new_ip6(void)\n{\n  struct udp_pcb *pcb;\n  pcb = udp_new();\n  ip_set_v6(pcb, 1);\n  return pcb;\n}\n#endif /* LWIP_IPV6 */\n\n#if UDP_DEBUG\n/**\n * Print UDP header information for debug purposes.\n *\n * @param udphdr pointer to the udp header in memory.\n */\nvoid\nudp_debug_print(struct udp_hdr *udphdr)\n{\n  LWIP_DEBUGF(UDP_DEBUG, (\"UDP header:\\n\"));\n  LWIP_DEBUGF(UDP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(UDP_DEBUG, (\"|     %5\"U16_F\"     |     %5\"U16_F\"     | (src port, dest port)\\n\",\n                          ntohs(udphdr->src), ntohs(udphdr->dest)));\n  LWIP_DEBUGF(UDP_DEBUG, (\"+-------------------------------+\\n\"));\n  LWIP_DEBUGF(UDP_DEBUG, (\"|     %5\"U16_F\"     |     0x%04\"X16_F\"    | (len, chksum)\\n\",\n                          ntohs(udphdr->len), ntohs(udphdr->chksum)));\n  LWIP_DEBUGF(UDP_DEBUG, (\"+-------------------------------+\\n\"));\n}\n#endif /* UDP_DEBUG */\n\n#endif /* LWIP_UDP */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/autoip.h",
    "content": "/**\n * @file\n *\n * AutoIP Automatic LinkLocal IP Configuration\n */\n\n/*\n *\n * Copyright (c) 2007 Dominik Spies <kontakt@dspies.de>\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * Author: Dominik Spies <kontakt@dspies.de>\n *\n * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform\n * with RFC 3927.\n *\n *\n * Please coordinate changes and requests with Dominik Spies\n * <kontakt@dspies.de>\n */\n \n#ifndef __LWIP_AUTOIP_H__\n#define __LWIP_AUTOIP_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/netif.h\"\n#include \"lwip/udp.h\"\n#include \"netif/etharp.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* AutoIP Timing */\n#define AUTOIP_TMR_INTERVAL      100\n#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL)\n\n/* RFC 3927 Constants */\n#define PROBE_WAIT               1   /* second   (initial random delay)                 */\n#define PROBE_MIN                1   /* second   (minimum delay till repeated probe)    */\n#define PROBE_MAX                2   /* seconds  (maximum delay till repeated probe)    */\n#define PROBE_NUM                3   /*          (number of probe packets)              */\n#define ANNOUNCE_NUM             2   /*          (number of announcement packets)       */\n#define ANNOUNCE_INTERVAL        2   /* seconds  (time between announcement packets)    */\n#define ANNOUNCE_WAIT            2   /* seconds  (delay before announcing)              */\n#define MAX_CONFLICTS            10  /*          (max conflicts before rate limiting)   */\n#define RATE_LIMIT_INTERVAL      60  /* seconds  (delay between successive attempts)    */\n#define DEFEND_INTERVAL          10  /* seconds  (min. wait between defensive ARPs)     */\n\n/* AutoIP client states */\n#define AUTOIP_STATE_OFF         0\n#define AUTOIP_STATE_PROBING     1\n#define AUTOIP_STATE_ANNOUNCING  2\n#define AUTOIP_STATE_BOUND       3\n\nstruct autoip\n{\n  ip_addr_t llipaddr;       /* the currently selected, probed, announced or used LL IP-Address */\n  u8_t state;               /* current AutoIP state machine state */\n  u8_t sent_num;            /* sent number of probes or announces, dependent on state */\n  u16_t ttw;                /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */\n  u8_t lastconflict;        /* ticks until a conflict can be solved by defending */\n  u8_t tried_llipaddr;      /* total number of probed/used Link Local IP-Addresses */\n};\n\n\n#define autoip_init() /* Compatibility define, no init needed. */\n\n/** Set a struct autoip allocated by the application to work with */\nvoid autoip_set_struct(struct netif *netif, struct autoip *autoip);\n\n/** Start AutoIP client */\nerr_t autoip_start(struct netif *netif);\n\n/** Stop AutoIP client */\nerr_t autoip_stop(struct netif *netif);\n\n/** Handles every incoming ARP Packet, called by etharp_arp_input */\nvoid autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr);\n\n/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */\nvoid autoip_tmr(void);\n\n/** Handle a possible change in the network configuration */\nvoid autoip_network_changed(struct netif *netif);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_AUTOIP */\n\n#endif /* __LWIP_AUTOIP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/icmp.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_ICMP_H__\n#define __LWIP_ICMP_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n\n#if LWIP_IPV6 && LWIP_ICMP6\n#include \"lwip/icmp6.h\"\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define ICMP_ER   0    /* echo reply */\n#define ICMP_DUR  3    /* destination unreachable */\n#define ICMP_SQ   4    /* source quench */\n#define ICMP_RD   5    /* redirect */\n#define ICMP_ECHO 8    /* echo */\n#define ICMP_TE  11    /* time exceeded */\n#define ICMP_PP  12    /* parameter problem */\n#define ICMP_TS  13    /* timestamp */\n#define ICMP_TSR 14    /* timestamp reply */\n#define ICMP_IRQ 15    /* information request */\n#define ICMP_IR  16    /* information reply */\n\nenum icmp_dur_type {\n  ICMP_DUR_NET   = 0,  /* net unreachable */\n  ICMP_DUR_HOST  = 1,  /* host unreachable */\n  ICMP_DUR_PROTO = 2,  /* protocol unreachable */\n  ICMP_DUR_PORT  = 3,  /* port unreachable */\n  ICMP_DUR_FRAG  = 4,  /* fragmentation needed and DF set */\n  ICMP_DUR_SR    = 5   /* source route failed */\n};\n\nenum icmp_te_type {\n  ICMP_TE_TTL  = 0,    /* time to live exceeded in transit */\n  ICMP_TE_FRAG = 1     /* fragment reassembly time exceeded */\n};\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\n/** This is the standard ICMP header only that the u32_t data\n *  is splitted to two u16_t like ICMP echo needs it.\n *  This header is also used for other ICMP types that do not\n *  use the data part.\n */\nPACK_STRUCT_BEGIN\nstruct icmp_echo_hdr {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u16_t id);\n  PACK_STRUCT_FIELD(u16_t seqno);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define ICMPH_TYPE(hdr) ((hdr)->type)\n#define ICMPH_CODE(hdr) ((hdr)->code)\n\n/** Combines type and code to an u16_t */\n#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t))\n#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c))\n\n\n#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */\n\nvoid icmp_input(struct pbuf *p, struct netif *inp);\nvoid icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t);\nvoid icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t);\n\n#endif /* LWIP_ICMP */\n\n#if (LWIP_IPV6 && LWIP_ICMP6)\n#define icmp_port_unreach(isipv6, pbuf) ((isipv6) ? \\\n                                         icmp6_dest_unreach(pbuf, ICMP6_DUR_PORT) : \\\n                                         icmp_dest_unreach(pbuf, ICMP_DUR_PORT))\n#elif LWIP_ICMP\n#define icmp_port_unreach(isipv6, pbuf) icmp_dest_unreach(pbuf, ICMP_DUR_PORT)\n#else /* (LWIP_IPV6 && LWIP_ICMP6) || LWIP_ICMP*/\n#define icmp_port_unreach(isipv6, pbuf)\n#endif /* (LWIP_IPV6 && LWIP_ICMP6) || LWIP_ICMP*/\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_ICMP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/igmp.h",
    "content": "/*\n * Copyright (c) 2002 CITEL Technologies Ltd.\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 * 3. Neither the name of CITEL Technologies Ltd 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 CITEL TECHNOLOGIES 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 CITEL TECHNOLOGIES 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 * This file is a contribution to the lwIP TCP/IP stack.\n * The Swedish Institute of Computer Science and Adam Dunkels\n * are specifically granted permission to redistribute this\n * source code.\n*/\n\n#ifndef __LWIP_IGMP_H__\n#define __LWIP_IGMP_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/pbuf.h\"\n\n#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* IGMP timer */\n#define IGMP_TMR_INTERVAL              100 /* Milliseconds */\n#define IGMP_V1_DELAYING_MEMBER_TMR   (1000/IGMP_TMR_INTERVAL)\n#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL)\n\n/* MAC Filter Actions, these are passed to a netif's\n * igmp_mac_filter callback function. */\n#define IGMP_DEL_MAC_FILTER            0\n#define IGMP_ADD_MAC_FILTER            1\n\n\n/**\n * igmp group structure - there is\n * a list of groups for each interface\n * these should really be linked from the interface, but\n * if we keep them separate we will not affect the lwip original code\n * too much\n * \n * There will be a group for the all systems group address but this \n * will not run the state machine as it is used to kick off reports\n * from all the other groups\n */\nstruct igmp_group {\n  /** next link */\n  struct igmp_group *next;\n  /** interface on which the group is active */\n  struct netif      *netif;\n  /** multicast address */\n  ip_addr_t          group_address;\n  /** signifies we were the last person to report */\n  u8_t               last_reporter_flag;\n  /** current state of the group */\n  u8_t               group_state;\n  /** timer for reporting, negative is OFF */\n  u16_t              timer;\n  /** counter of simultaneous uses */\n  u8_t               use;\n};\n\n/*  Prototypes */\nvoid   igmp_init(void);\nerr_t  igmp_start(struct netif *netif);\nerr_t  igmp_stop(struct netif *netif);\nvoid   igmp_report_groups(struct netif *netif);\nstruct igmp_group *igmp_lookfor_group(struct netif *ifp, ip_addr_t *addr);\nvoid   igmp_input(struct pbuf *p, struct netif *inp, ip_addr_t *dest);\nerr_t  igmp_joingroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr);\nerr_t  igmp_leavegroup(ip_addr_t *ifaddr, ip_addr_t *groupaddr);\nvoid   igmp_tmr(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IGMP */\n\n#endif /* __LWIP_IGMP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/inet.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_INET_H__\n#define __LWIP_INET_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/def.h\"\n#include \"lwip/ip_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** For compatibility with BSD code */\nstruct in_addr {\n  u32_t s_addr;\n};\n\n/** 255.255.255.255 */\n#define INADDR_NONE         IPADDR_NONE\n/** 127.0.0.1 */\n#define INADDR_LOOPBACK     IPADDR_LOOPBACK\n/** 0.0.0.0 */\n#define INADDR_ANY          IPADDR_ANY\n/** 255.255.255.255 */\n#define INADDR_BROADCAST    IPADDR_BROADCAST\n\n/* Definitions of the bits in an Internet address integer.\n\n   On subnets, host and network parts are found according to\n   the subnet mask, not these masks.  */\n#define IN_CLASSA(a)        IP_CLASSA(a)\n#define IN_CLASSA_NET       IP_CLASSA_NET\n#define IN_CLASSA_NSHIFT    IP_CLASSA_NSHIFT\n#define IN_CLASSA_HOST      IP_CLASSA_HOST\n#define IN_CLASSA_MAX       IP_CLASSA_MAX\n\n#define IN_CLASSB(b)        IP_CLASSB(b)\n#define IN_CLASSB_NET       IP_CLASSB_NET\n#define IN_CLASSB_NSHIFT    IP_CLASSB_NSHIFT\n#define IN_CLASSB_HOST      IP_CLASSB_HOST\n#define IN_CLASSB_MAX       IP_CLASSB_MAX\n\n#define IN_CLASSC(c)        IP_CLASSC(c)\n#define IN_CLASSC_NET       IP_CLASSC_NET\n#define IN_CLASSC_NSHIFT    IP_CLASSC_NSHIFT\n#define IN_CLASSC_HOST      IP_CLASSC_HOST\n#define IN_CLASSC_MAX       IP_CLASSC_MAX\n\n#define IN_CLASSD(d)        IP_CLASSD(d)\n#define IN_CLASSD_NET       IP_CLASSD_NET     /* These ones aren't really */\n#define IN_CLASSD_NSHIFT    IP_CLASSD_NSHIFT  /*   net and host fields, but */\n#define IN_CLASSD_HOST      IP_CLASSD_HOST    /*   routing needn't know. */\n#define IN_CLASSD_MAX       IP_CLASSD_MAX\n\n#define IN_MULTICAST(a)     IP_MULTICAST(a)\n\n#define IN_EXPERIMENTAL(a)  IP_EXPERIMENTAL(a)\n#define IN_BADCLASS(a)      IP_BADCLASS(a)\n\n#define IN_LOOPBACKNET      IP_LOOPBACKNET\n\n#define inet_addr_from_ipaddr(target_inaddr, source_ipaddr) ((target_inaddr)->s_addr = ip4_addr_get_u32(source_ipaddr))\n#define inet_addr_to_ipaddr(target_ipaddr, source_inaddr)   (ip4_addr_set_u32(target_ipaddr, (source_inaddr)->s_addr))\n/* ATTENTION: the next define only works because both s_addr and ip_addr_t are an u32_t effectively! */\n#define inet_addr_to_ipaddr_p(target_ipaddr_p, source_inaddr)   ((target_ipaddr_p) = (ip_addr_t*)&((source_inaddr)->s_addr))\n\n/* directly map this to the lwip internal functions */\n#define inet_addr(cp)         ipaddr_addr(cp)\n#define inet_aton(cp, addr)   ipaddr_aton(cp, (ip_addr_t*)addr)\n#define inet_ntoa(addr)       ipaddr_ntoa((ip_addr_t*)&(addr))\n#define inet_ntoa_r(addr, buf, buflen) ipaddr_ntoa_r((ip_addr_t*)&(addr), buf, buflen)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_INET_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/ip4.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_IP4_H__\n#define __LWIP_IP4_H__\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/def.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/err.h\"\n#include \"lwip/netif.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** Currently, the function ip_output_if_opt() is only used with IGMP */\n#define IP_OPTIONS_SEND   LWIP_IGMP\n\n#define IP_HLEN 20\n\n#define IP_PROTO_ICMP    1\n#define IP_PROTO_IGMP    2\n#define IP_PROTO_UDP     17\n#define IP_PROTO_UDPLITE 136\n#define IP_PROTO_TCP     6\n\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip_hdr {\n  /* version / header length */\n  PACK_STRUCT_FIELD(u8_t _v_hl);\n  /* type of service */\n  PACK_STRUCT_FIELD(u8_t _tos);\n  /* total length */\n  PACK_STRUCT_FIELD(u16_t _len);\n  /* identification */\n  PACK_STRUCT_FIELD(u16_t _id);\n  /* fragment offset field */\n  PACK_STRUCT_FIELD(u16_t _offset);\n#define IP_RF 0x8000U        /* reserved fragment flag */\n#define IP_DF 0x4000U        /* dont fragment flag */\n#define IP_MF 0x2000U        /* more fragments flag */\n#define IP_OFFMASK 0x1fffU   /* mask for fragmenting bits */\n  /* time to live */\n  PACK_STRUCT_FIELD(u8_t _ttl);\n  /* protocol*/\n  PACK_STRUCT_FIELD(u8_t _proto);\n  /* checksum */\n  PACK_STRUCT_FIELD(u16_t _chksum);\n  /* source and destination IP addresses */\n  PACK_STRUCT_FIELD(ip_addr_p_t src);\n  PACK_STRUCT_FIELD(ip_addr_p_t dest); \n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define IPH_V(hdr)  ((hdr)->_v_hl >> 4)\n#define IPH_HL(hdr) ((hdr)->_v_hl & 0x0f)\n#define IPH_TOS(hdr) ((hdr)->_tos)\n#define IPH_LEN(hdr) ((hdr)->_len)\n#define IPH_ID(hdr) ((hdr)->_id)\n#define IPH_OFFSET(hdr) ((hdr)->_offset)\n#define IPH_TTL(hdr) ((hdr)->_ttl)\n#define IPH_PROTO(hdr) ((hdr)->_proto)\n#define IPH_CHKSUM(hdr) ((hdr)->_chksum)\n\n#define IPH_VHL_SET(hdr, v, hl) (hdr)->_v_hl = (((v) << 4) | (hl))\n#define IPH_TOS_SET(hdr, tos) (hdr)->_tos = (tos)\n#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len)\n#define IPH_ID_SET(hdr, id) (hdr)->_id = (id)\n#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off)\n#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl = (u8_t)(ttl)\n#define IPH_PROTO_SET(hdr, proto) (hdr)->_proto = (u8_t)(proto)\n#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum)\n\n\n#define ip_init() /* Compatibility define, no init needed. */\nstruct netif *ip_route(ip_addr_t *dest);\nerr_t ip_input(struct pbuf *p, struct netif *inp);\nerr_t ip_output(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n       u8_t ttl, u8_t tos, u8_t proto);\nerr_t ip_output_if(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n       u8_t ttl, u8_t tos, u8_t proto,\n       struct netif *netif);\n#if LWIP_NETIF_HWADDRHINT\nerr_t ip_output_hinted(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n       u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint);\n#endif /* LWIP_NETIF_HWADDRHINT */\n#if IP_OPTIONS_SEND\nerr_t ip_output_if_opt(struct pbuf *p, ip_addr_t *src, ip_addr_t *dest,\n       u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options,\n       u16_t optlen);\n#endif /* IP_OPTIONS_SEND */\n\n#define ip_netif_get_local_ipX(netif) (((netif) != NULL) ? ip_2_ipX(&((netif)->ip_addr)) : NULL)\n\n#if IP_DEBUG\nvoid ip_debug_print(struct pbuf *p);\n#else\n#define ip_debug_print(p)\n#endif /* IP_DEBUG */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP_H__ */\n\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/ip4_addr.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_IP4_ADDR_H__\n#define __LWIP_IP4_ADDR_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/def.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* This is the aligned version of ip_addr_t,\n   used as local variable, on the stack, etc. */\nstruct ip_addr {\n  u32_t addr;\n};\n\n/* This is the packed version of ip_addr_t,\n   used in network headers that are itself packed */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip_addr_packed {\n  PACK_STRUCT_FIELD(u32_t addr);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** ip_addr_t uses a struct for convenience only, so that the same defines can\n * operate both on ip_addr_t as well as on ip_addr_p_t. */\ntypedef struct ip_addr ip_addr_t;\ntypedef struct ip_addr_packed ip_addr_p_t;\n\n/*\n * struct ipaddr2 is used in the definition of the ARP packet format in\n * order to support compilers that don't have structure packing.\n */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip_addr2 {\n  PACK_STRUCT_FIELD(u16_t addrw[2]);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/* Forward declaration to not include netif.h */\nstruct netif;\n\nextern const ip_addr_t ip_addr_any;\nextern const ip_addr_t ip_addr_broadcast;\n\n/** IP_ADDR_ can be used as a fixed IP address\n *  for the wildcard and the broadcast address\n */\n#define IP_ADDR_ANY         ((ip_addr_t *)&ip_addr_any)\n#define IP_ADDR_BROADCAST   ((ip_addr_t *)&ip_addr_broadcast)\n\n/** 255.255.255.255 */\n#define IPADDR_NONE         ((u32_t)0xffffffffUL)\n/** 127.0.0.1 */\n#define IPADDR_LOOPBACK     ((u32_t)0x7f000001UL)\n/** 0.0.0.0 */\n#define IPADDR_ANY          ((u32_t)0x00000000UL)\n/** 255.255.255.255 */\n#define IPADDR_BROADCAST    ((u32_t)0xffffffffUL)\n\n/* Definitions of the bits in an Internet address integer.\n\n   On subnets, host and network parts are found according to\n   the subnet mask, not these masks.  */\n#define IP_CLASSA(a)        ((((u32_t)(a)) & 0x80000000UL) == 0)\n#define IP_CLASSA_NET       0xff000000\n#define IP_CLASSA_NSHIFT    24\n#define IP_CLASSA_HOST      (0xffffffff & ~IP_CLASSA_NET)\n#define IP_CLASSA_MAX       128\n\n#define IP_CLASSB(a)        ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL)\n#define IP_CLASSB_NET       0xffff0000\n#define IP_CLASSB_NSHIFT    16\n#define IP_CLASSB_HOST      (0xffffffff & ~IP_CLASSB_NET)\n#define IP_CLASSB_MAX       65536\n\n#define IP_CLASSC(a)        ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL)\n#define IP_CLASSC_NET       0xffffff00\n#define IP_CLASSC_NSHIFT    8\n#define IP_CLASSC_HOST      (0xffffffff & ~IP_CLASSC_NET)\n\n#define IP_CLASSD(a)        (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL)\n#define IP_CLASSD_NET       0xf0000000          /* These ones aren't really */\n#define IP_CLASSD_NSHIFT    28                  /*   net and host fields, but */\n#define IP_CLASSD_HOST      0x0fffffff          /*   routing needn't know. */\n#define IP_MULTICAST(a)     IP_CLASSD(a)\n\n#define IP_EXPERIMENTAL(a)  (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)\n#define IP_BADCLASS(a)      (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL)\n\n#define IP_LOOPBACKNET      127                 /* official! */\n\n\n#if BYTE_ORDER == BIG_ENDIAN\n/** Set an IP address given by the four byte-parts */\n#define IP4_ADDR(ipaddr, a,b,c,d) \\\n        (ipaddr)->addr = ((u32_t)((a) & 0xff) << 24) | \\\n                         ((u32_t)((b) & 0xff) << 16) | \\\n                         ((u32_t)((c) & 0xff) << 8)  | \\\n                          (u32_t)((d) & 0xff)\n#else\n/** Set an IP address given by the four byte-parts.\n    Little-endian version that prevents the use of htonl. */\n#define IP4_ADDR(ipaddr, a,b,c,d) \\\n        (ipaddr)->addr = ((u32_t)((d) & 0xff) << 24) | \\\n                         ((u32_t)((c) & 0xff) << 16) | \\\n                         ((u32_t)((b) & 0xff) << 8)  | \\\n                          (u32_t)((a) & 0xff)\n#endif\n\n/** MEMCPY-like copying of IP addresses where addresses are known to be\n * 16-bit-aligned if the port is correctly configured (so a port could define\n * this to copying 2 u16_t's) - no NULL-pointer-checking needed. */\n#ifndef IPADDR2_COPY\n#define IPADDR2_COPY(dest, src) SMEMCPY(dest, src, sizeof(ip_addr_t))\n#endif\n\n/** Copy IP address - faster than ip_addr_set: no NULL check */\n#define ip_addr_copy(dest, src) ((dest).addr = (src).addr)\n/** Safely copy one IP address to another (src may be NULL) */\n#define ip_addr_set(dest, src) ((dest)->addr = \\\n                                    ((src) == NULL ? 0 : \\\n                                    (src)->addr))\n/** Set complete address to zero */\n#define ip_addr_set_zero(ipaddr)      ((ipaddr)->addr = 0)\n/** Set address to IPADDR_ANY (no need for htonl()) */\n#define ip_addr_set_any(ipaddr)       ((ipaddr)->addr = IPADDR_ANY)\n/** Set address to loopback address */\n#define ip_addr_set_loopback(ipaddr)  ((ipaddr)->addr = PP_HTONL(IPADDR_LOOPBACK))\n/** Safely copy one IP address to another and change byte order\n * from host- to network-order. */\n#define ip_addr_set_hton(dest, src) ((dest)->addr = \\\n                               ((src) == NULL ? 0:\\\n                               htonl((src)->addr)))\n/** IPv4 only: set the IP address given as an u32_t */\n#define ip4_addr_set_u32(dest_ipaddr, src_u32) ((dest_ipaddr)->addr = (src_u32))\n/** IPv4 only: get the IP address as an u32_t */\n#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr)\n\n/** Get the network address by combining host address with netmask */\n#define ip_addr_get_network(target, host, netmask) ((target)->addr = ((host)->addr) & ((netmask)->addr))\n\n/**\n * Determine if two address are on the same network.\n *\n * @arg addr1 IP address 1\n * @arg addr2 IP address 2\n * @arg mask network identifier mask\n * @return !0 if the network identifiers of both address match\n */\n#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \\\n                                              (mask)->addr) == \\\n                                             ((addr2)->addr & \\\n                                              (mask)->addr))\n#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr)\n\n#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == IPADDR_ANY)\n\n#define ip_addr_isbroadcast(ipaddr, netif) ip4_addr_isbroadcast((ipaddr)->addr, (netif))\nu8_t ip4_addr_isbroadcast(u32_t addr, const struct netif *netif);\n\n#define ip_addr_netmask_valid(netmask) ip4_addr_netmask_valid((netmask)->addr)\nu8_t ip4_addr_netmask_valid(u32_t netmask);\n\n#define ip_addr_ismulticast(addr1) (((addr1)->addr & PP_HTONL(0xf0000000UL)) == PP_HTONL(0xe0000000UL))\n\n#define ip_addr_islinklocal(addr1) (((addr1)->addr & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xa9fe0000UL))\n\n#define ip_addr_debug_print(debug, ipaddr) \\\n  LWIP_DEBUGF(debug, (\"%\"U16_F\".%\"U16_F\".%\"U16_F\".%\"U16_F,             \\\n                      ipaddr != NULL ? ip4_addr1_16(ipaddr) : 0,       \\\n                      ipaddr != NULL ? ip4_addr2_16(ipaddr) : 0,       \\\n                      ipaddr != NULL ? ip4_addr3_16(ipaddr) : 0,       \\\n                      ipaddr != NULL ? ip4_addr4_16(ipaddr) : 0))\n\n/* Get one byte from the 4-byte address */\n#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0])\n#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1])\n#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2])\n#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3])\n/* These are cast to u16_t, with the intent that they are often arguments\n * to printf using the U16_F format from cc.h. */\n#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))\n#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))\n#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))\n#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))\n\n/** For backwards compatibility */\n#define ip_ntoa(ipaddr)  ipaddr_ntoa(ipaddr)\n\nu32_t ipaddr_addr(const char *cp);\nint ipaddr_aton(const char *cp, ip_addr_t *addr);\n/** returns ptr to static buffer; not reentrant! */\nchar *ipaddr_ntoa(const ip_addr_t *addr);\nchar *ipaddr_ntoa_r(const ip_addr_t *addr, char *buf, int buflen);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP_ADDR_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv4/lwip/ip_frag.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Jani Monoses <jani@iv.ro>\n *\n */\n\n#ifndef __LWIP_IP_FRAG_H__\n#define __LWIP_IP_FRAG_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/err.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if IP_REASSEMBLY\n/* The IP reassembly timer interval in milliseconds. */\n#define IP_TMR_INTERVAL 1000\n\n/* IP reassembly helper struct.\n * This is exported because memp needs to know the size.\n */\nstruct ip_reassdata {\n  struct ip_reassdata *next;\n  struct pbuf *p;\n  struct ip_hdr iphdr;\n  u16_t datagram_len;\n  u8_t flags;\n  u8_t timer;\n};\n\nvoid ip_reass_init(void);\nvoid ip_reass_tmr(void);\nstruct pbuf * ip_reass(struct pbuf *p);\n#endif /* IP_REASSEMBLY */\n\n#if IP_FRAG\n#if !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF\n/** A custom pbuf that holds a reference to another pbuf, which is freed\n * when this custom pbuf is freed. This is used to create a custom PBUF_REF\n * that points into the original pbuf. */\n#ifndef __LWIP_PBUF_CUSTOM_REF__\n#define __LWIP_PBUF_CUSTOM_REF__\nstruct pbuf_custom_ref {\n  /** 'base class' */\n  struct pbuf_custom pc;\n  /** pointer to the original pbuf that is referenced */\n  struct pbuf *original;\n};\n#endif /* __LWIP_PBUF_CUSTOM_REF__ */\n#endif /* !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */\n\nerr_t ip_frag(struct pbuf *p, struct netif *netif, ip_addr_t *dest);\n#endif /* IP_FRAG */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP_FRAG_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/dhcp6.h",
    "content": "/**\n * @file\n *\n * IPv6 address autoconfiguration as per RFC 4862.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n * IPv6 address autoconfiguration as per RFC 4862.\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#ifndef __LWIP_IP6_DHCP6_H__\n#define __LWIP_IP6_DHCP6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6_DHCP6  /* don't build if not configured for use in lwipopts.h */\n\n\nstruct dhcp6\n{\n  /*TODO: implement DHCP6*/\n};\n\n#endif /* LWIP_IPV6_DHCP6 */\n\n#endif /* __LWIP_IP6_DHCP6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/ethip6.h",
    "content": "/**\n * @file\n *\n * Ethernet output for IPv6. Uses ND tables for link-layer addressing.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#ifndef __LWIP_ETHIP6_H__\n#define __LWIP_ETHIP6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6 && LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/netif.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\nerr_t ethip6_output(struct netif *netif, struct pbuf *q, ip6_addr_t *ip6addr);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6 && LWIP_ETHERNET */\n\n#endif /* __LWIP_ETHIP6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/icmp6.h",
    "content": "/**\n * @file\n *\n * IPv6 version of ICMP, as per RFC 4443.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n#ifndef __LWIP_ICMP6_H__\n#define __LWIP_ICMP6_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/netif.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nenum icmp6_type {\n  ICMP6_TYPE_DUR = 1,  /* Destination unreachable */\n  ICMP6_TYPE_PTB = 2,  /* Packet too big */\n  ICMP6_TYPE_TE = 3,   /* Time exceeded */\n  ICMP6_TYPE_PP = 4,   /* Parameter problem */\n  ICMP6_TYPE_PE1 = 100,  /* Private experimentation */\n  ICMP6_TYPE_PE2 = 101,  /* Private experimentation */\n  ICMP6_TYPE_RSV_ERR = 127,  /* Reserved for expansion of error messages */\n\n  ICMP6_TYPE_EREQ = 128,  /* Echo request */\n  ICMP6_TYPE_EREP = 129,  /* Echo reply */\n  ICMP6_TYPE_MLQ = 130,  /* Multicast listener query */\n  ICMP6_TYPE_MLR = 131,  /* Multicast listener report */\n  ICMP6_TYPE_MLD = 132,  /* Multicast listener done */\n  ICMP6_TYPE_RS = 133,  /* Router solicitation */\n  ICMP6_TYPE_RA = 134,  /* Router advertisement */\n  ICMP6_TYPE_NS = 135,  /* Neighbor solicitation */\n  ICMP6_TYPE_NA = 136,  /* Neighbor advertisement */\n  ICMP6_TYPE_RD = 137,  /* Redirect */\n  ICMP6_TYPE_MRA = 151,  /* Multicast router advertisement */\n  ICMP6_TYPE_MRS = 152,  /* Multicast router solicitation */\n  ICMP6_TYPE_MRT = 153,  /* Multicast router termination */\n  ICMP6_TYPE_PE3 = 200,  /* Private experimentation */\n  ICMP6_TYPE_PE4 = 201,  /* Private experimentation */\n  ICMP6_TYPE_RSV_INF = 255  /* Reserved for expansion of informational messages */\n};\n\nenum icmp6_dur_code {\n  ICMP6_DUR_NO_ROUTE = 0,     /* No route to destination */\n  ICMP6_DUR_PROHIBITED = 1,   /* Communication with destination administratively prohibited */\n  ICMP6_DUR_SCOPE = 2,        /* Beyond scope of source address */\n  ICMP6_DUR_ADDRESS = 3,      /* Address unreachable */\n  ICMP6_DUR_PORT = 4,         /* Port unreachable */\n  ICMP6_DUR_POLICY = 5,       /* Source address failed ingress/egress policy */\n  ICMP6_DUR_REJECT_ROUTE = 6  /* Reject route to destination */\n};\n\nenum icmp6_te_code {\n  ICMP6_TE_HL = 0,   /* Hop limit exceeded in transit */\n  ICMP6_TE_FRAG = 1  /* Fragment reassembly time exceeded */\n};\n\nenum icmp6_pp_code {\n  ICMP6_PP_FIELD = 0,   /* Erroneous header field encountered */\n  ICMP6_PP_HEADER = 1,  /* Unrecognized next header type encountered */\n  ICMP6_PP_OPTION = 2   /* Unrecognized IPv6 option encountered */\n};\n\n/** This is the standard ICMP6 header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct icmp6_hdr {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u32_t data);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** This is the ICMP6 header adapted for echo req/resp. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct icmp6_echo_hdr {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u16_t id);\n  PACK_STRUCT_FIELD(u16_t seqno);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n\n#if LWIP_ICMP6 && LWIP_IPV6 /* don't build if not configured for use in lwipopts.h */\n\nvoid icmp6_input(struct pbuf *p, struct netif *inp);\nvoid icmp6_dest_unreach(struct pbuf *p, enum icmp6_dur_code c);\nvoid icmp6_packet_too_big(struct pbuf *p, u32_t mtu);\nvoid icmp6_time_exceeded(struct pbuf *p, enum icmp6_te_code c);\nvoid icmp6_param_problem(struct pbuf *p, enum icmp6_pp_code c, u32_t pointer);\n\n#endif /* LWIP_ICMP6 && LWIP_IPV6 */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n\n#endif /* __LWIP_ICMP6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/inet6.h",
    "content": "/**\n * @file\n *\n * INET v6 addresses.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n#ifndef __LWIP_INET6_H__\n#define __LWIP_INET6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6 && LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/def.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** For compatibility with BSD code */\nstruct in6_addr {\n  union {\n    u8_t  u8_addr[16];\n    u32_t u32_addr[4];\n  } un;\n#define s6_addr  un.u32_addr\n};\n\n#define IN6ADDR_ANY_INIT {0,0,0,0}\n#define IN6ADDR_LOOPBACK_INIT {0,0,0,PP_HTONL(1)}\n\n\n#define inet6_addr_from_ip6addr(target_in6addr, source_ip6addr) {(target_in6addr)->un.u32_addr[0] = (source_ip6addr)->addr[0]; \\\n                                                                 (target_in6addr)->un.u32_addr[1] = (source_ip6addr)->addr[1]; \\\n                                                                 (target_in6addr)->un.u32_addr[2] = (source_ip6addr)->addr[2]; \\\n                                                                 (target_in6addr)->un.u32_addr[3] = (source_ip6addr)->addr[3];}\n#define inet6_addr_to_ip6addr(target_ip6addr, source_in6addr)   {(target_ip6addr)->addr[0] = (source_in6addr)->un.u32_addr[0]; \\\n                                                                 (target_ip6addr)->addr[1] = (source_in6addr)->un.u32_addr[1]; \\\n                                                                 (target_ip6addr)->addr[2] = (source_in6addr)->un.u32_addr[2]; \\\n                                                                 (target_ip6addr)->addr[3] = (source_in6addr)->un.u32_addr[3];}\n/* ATTENTION: the next define only works because both in6_addr and ip6_addr_t are an u32_t[4] effectively! */\n#define inet6_addr_to_ip6addr_p(target_ip6addr_p, source_in6addr)   ((target_ip6addr_p) = (ip6_addr_t*)(source_in6addr))\n\n/* directly map this to the lwip internal functions */\n#define inet6_aton(cp, addr)   ip6addr_aton(cp, (ip6_addr_t*)addr)\n#define inet6_ntoa(addr)       ip6addr_ntoa((ip6_addr_t*)&(addr))\n#define inet6_ntoa_r(addr, buf, buflen) ip6addr_ntoa_r((ip6_addr_t*)&(addr), buf, buflen)\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6 */\n\n#endif /* __LWIP_INET6_H__ */\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/ip6.h",
    "content": "/**\n * @file\n *\n * IPv6 layer.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n#ifndef __LWIP_IP6_H__\n#define __LWIP_IP6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/ip.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/def.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n\n#include \"lwip/err.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define IP6_HLEN 40\n\n#define IP6_NEXTH_HOPBYHOP  0\n#define IP6_NEXTH_TCP       6\n#define IP6_NEXTH_UDP       17\n#define IP6_NEXTH_ENCAPS    41\n#define IP6_NEXTH_ROUTING   43\n#define IP6_NEXTH_FRAGMENT  44\n#define IP6_NEXTH_ICMP6     58\n#define IP6_NEXTH_NONE      59\n#define IP6_NEXTH_DESTOPTS  60\n#define IP6_NEXTH_UDPLITE   136\n\n\n/* The IPv6 header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip6_hdr {\n  /* version / traffic class / flow label */\n  PACK_STRUCT_FIELD(u32_t _v_tc_fl);\n  /* payload length */\n  PACK_STRUCT_FIELD(u16_t _plen);\n  /* next header */\n  PACK_STRUCT_FIELD(u8_t _nexth);\n  /* hop limit */\n  PACK_STRUCT_FIELD(u8_t _hoplim);\n  /* source and destination IP addresses */\n  PACK_STRUCT_FIELD(ip6_addr_p_t src);\n  PACK_STRUCT_FIELD(ip6_addr_p_t dest);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/* Hop-by-hop router alert option. */\n#define IP6_HBH_HLEN    8\n#define IP6_PAD1_OPTION         0\n#define IP6_PADN_ALERT_OPTION   1\n#define IP6_ROUTER_ALERT_OPTION 5\n#define IP6_ROUTER_ALERT_VALUE_MLD 0\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip6_hbh_hdr {\n  /* next header */\n  PACK_STRUCT_FIELD(u8_t _nexth);\n  /* header length */\n  PACK_STRUCT_FIELD(u8_t _hlen);\n  /* router alert option type */\n  PACK_STRUCT_FIELD(u8_t _ra_opt_type);\n  /* router alert option data len */\n  PACK_STRUCT_FIELD(u8_t _ra_opt_dlen);\n  /* router alert option data */\n  PACK_STRUCT_FIELD(u16_t _ra_opt_data);\n  /* PadN option type */\n  PACK_STRUCT_FIELD(u8_t _padn_opt_type);\n  /* PadN option data len */\n  PACK_STRUCT_FIELD(u8_t _padn_opt_dlen);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/* Fragment header. */\n#define IP6_FRAG_HLEN    8\n#define IP6_FRAG_OFFSET_MASK    0xfff8\n#define IP6_FRAG_MORE_FLAG      0x0001\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip6_frag_hdr {\n  /* next header */\n  PACK_STRUCT_FIELD(u8_t _nexth);\n  /* reserved */\n  PACK_STRUCT_FIELD(u8_t reserved);\n  /* fragment offset */\n  PACK_STRUCT_FIELD(u16_t _fragment_offset);\n  /* fragmented packet identification */\n  PACK_STRUCT_FIELD(u32_t _identification);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define IP6H_V(hdr)  ((ntohl((hdr)->_v_tc_fl) >> 28) & 0x0f)\n#define IP6H_TC(hdr) ((ntohl((hdr)->_v_tc_fl) >> 20) & 0xff)\n#define IP6H_FL(hdr) (ntohl((hdr)->_v_tc_fl) & 0x000fffff)\n#define IP6H_PLEN(hdr) (ntohs((hdr)->_plen))\n#define IP6H_NEXTH(hdr) ((hdr)->_nexth)\n#define IP6H_NEXTH_P(hdr) ((u8_t *)(hdr) + 6)\n#define IP6H_HOPLIM(hdr) ((hdr)->_hoplim)\n\n#define IP6H_VTCFL_SET(hdr, v, tc, fl) (hdr)->_v_tc_fl = (htonl(((v) << 28) | ((tc) << 20) | (fl)))\n#define IP6H_PLEN_SET(hdr, plen) (hdr)->_plen = htons(plen)\n#define IP6H_NEXTH_SET(hdr, nexth) (hdr)->_nexth = (nexth)\n#define IP6H_HOPLIM_SET(hdr, hl) (hdr)->_hoplim = (u8_t)(hl)\n\n\n#define ip6_init() /* TODO should we init current addresses and header pointer? */\nstruct netif *ip6_route(struct ip6_addr *src, struct ip6_addr *dest);\nip6_addr_t   *ip6_select_source_address(struct netif *netif, ip6_addr_t * dest);\nerr_t         ip6_input(struct pbuf *p, struct netif *inp);\nerr_t         ip6_output(struct pbuf *p, struct ip6_addr *src, struct ip6_addr *dest,\n                         u8_t hl, u8_t tc, u8_t nexth);\nerr_t         ip6_output_if(struct pbuf *p, struct ip6_addr *src, struct ip6_addr *dest,\n                            u8_t hl, u8_t tc, u8_t nexth, struct netif *netif);\n#if LWIP_NETIF_HWADDRHINT\nerr_t         ip6_output_hinted(struct pbuf *p, ip6_addr_t *src, ip6_addr_t *dest,\n                                u8_t hl, u8_t tc, u8_t nexth, u8_t *addr_hint);\n#endif /* LWIP_NETIF_HWADDRHINT */\n#if LWIP_IPV6_MLD\nerr_t         ip6_options_add_hbh_ra(struct pbuf * p, u8_t nexth, u8_t value);\n#endif /* LWIP_IPV6_MLD */\n\n#define ip6_netif_get_local_ipX(netif, dest) (((netif) != NULL) ? \\\n  ip6_2_ipX(ip6_select_source_address(netif, dest)) : NULL)\n\n#if IP6_DEBUG\nvoid ip6_debug_print(struct pbuf *p);\n#else\n#define ip6_debug_print(p)\n#endif /* IP6_DEBUG */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6 */\n\n#endif /* __LWIP_IP6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/ip6_addr.h",
    "content": "/**\n * @file\n *\n * IPv6 addresses.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n * Structs and macros for handling IPv6 addresses.\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n#ifndef __LWIP_IP6_ADDR_H__\n#define __LWIP_IP6_ADDR_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* This is the aligned version of ip6_addr_t,\n   used as local variable, on the stack, etc. */\nstruct ip6_addr {\n  u32_t addr[4];\n};\n\n/* This is the packed version of ip6_addr_t,\n   used in network headers that are itself packed */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ip6_addr_packed {\n  PACK_STRUCT_FIELD(u32_t addr[4]);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** ip6_addr_t uses a struct for convenience only, so that the same defines can\n * operate both on ip6_addr_t as well as on ip6_addr_p_t. */\ntypedef struct ip6_addr ip6_addr_t;\ntypedef struct ip6_addr_packed ip6_addr_p_t;\n\n\n/** IP6_ADDR_ANY can be used as a fixed IPv6 address\n *  for the wildcard\n */\nextern const ip6_addr_t ip6_addr_any;\n#define IP6_ADDR_ANY         ((ip6_addr_t *)&ip6_addr_any)\n\n\n\n\n#if BYTE_ORDER == BIG_ENDIAN\n/** Set an IPv6 partial address given by byte-parts. */\n#define IP6_ADDR(ip6addr, index, a,b,c,d) \\\n  (ip6addr)->addr[index] = ((u32_t)((a) & 0xff) << 24) | \\\n                           ((u32_t)((b) & 0xff) << 16) | \\\n                           ((u32_t)((c) & 0xff) << 8)  | \\\n                            (u32_t)((d) & 0xff)\n#else\n/** Set an IPv6 partial address given by byte-parts.\nLittle-endian version, stored in network order (no htonl). */\n#define IP6_ADDR(ip6addr, index, a,b,c,d) \\\n  (ip6addr)->addr[index] = ((u32_t)((d) & 0xff) << 24) | \\\n                           ((u32_t)((c) & 0xff) << 16) | \\\n                           ((u32_t)((b) & 0xff) << 8)  | \\\n                            (u32_t)((a) & 0xff)\n#endif\n\n/** Access address in 16-bit block */\n#define IP6_ADDR_BLOCK1(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0]) >> 16) & 0xffff)\n#define IP6_ADDR_BLOCK2(ip6addr) ((u16_t)(htonl((ip6addr)->addr[0])) & 0xffff)\n#define IP6_ADDR_BLOCK3(ip6addr) ((u16_t)(htonl((ip6addr)->addr[1]) >> 16) & 0xffff)\n#define IP6_ADDR_BLOCK4(ip6addr) ((u16_t)(htonl((ip6addr)->addr[1])) & 0xffff)\n#define IP6_ADDR_BLOCK5(ip6addr) ((u16_t)(htonl((ip6addr)->addr[2]) >> 16) & 0xffff)\n#define IP6_ADDR_BLOCK6(ip6addr) ((u16_t)(htonl((ip6addr)->addr[2])) & 0xffff)\n#define IP6_ADDR_BLOCK7(ip6addr) ((u16_t)(htonl((ip6addr)->addr[3]) >> 16) & 0xffff)\n#define IP6_ADDR_BLOCK8(ip6addr) ((u16_t)(htonl((ip6addr)->addr[3])) & 0xffff)\n\n/** Copy IPv6 address - faster than ip6_addr_set: no NULL check */\n#define ip6_addr_copy(dest, src) do{(dest).addr[0] = (src).addr[0]; \\\n                                    (dest).addr[1] = (src).addr[1]; \\\n                                    (dest).addr[2] = (src).addr[2]; \\\n                                    (dest).addr[3] = (src).addr[3];}while(0)\n/** Safely copy one IPv6 address to another (src may be NULL) */\n#define ip6_addr_set(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : (src)->addr[0]; \\\n                                   (dest)->addr[1] = (src) == NULL ? 0 : (src)->addr[1]; \\\n                                   (dest)->addr[2] = (src) == NULL ? 0 : (src)->addr[2]; \\\n                                   (dest)->addr[3] = (src) == NULL ? 0 : (src)->addr[3];}while(0)\n\n/** Set complete address to zero */\n#define ip6_addr_set_zero(ip6addr)    do{(ip6addr)->addr[0] = 0; \\\n                                         (ip6addr)->addr[1] = 0; \\\n                                         (ip6addr)->addr[2] = 0; \\\n                                         (ip6addr)->addr[3] = 0;}while(0)\n\n/** Set address to ipv6 'any' (no need for htonl()) */\n#define ip6_addr_set_any(ip6addr)       ip6_addr_set_zero(ip6addr)\n/** Set address to ipv6 loopback address */\n#define ip6_addr_set_loopback(ip6addr) do{(ip6addr)->addr[0] = 0; \\\n                                          (ip6addr)->addr[1] = 0; \\\n                                          (ip6addr)->addr[2] = 0; \\\n                                          (ip6addr)->addr[3] = PP_HTONL(0x00000001UL);}while(0)\n/** Safely copy one IPv6 address to another and change byte order\n * from host- to network-order. */\n#define ip6_addr_set_hton(dest, src) do{(dest)->addr[0] = (src) == NULL ? 0 : htonl((src)->addr[0]); \\\n                                        (dest)->addr[1] = (src) == NULL ? 0 : htonl((src)->addr[1]); \\\n                                        (dest)->addr[2] = (src) == NULL ? 0 : htonl((src)->addr[2]); \\\n                                        (dest)->addr[3] = (src) == NULL ? 0 : htonl((src)->addr[3]);}while(0)\n\n\n\n/**\n * Determine if two IPv6 address are on the same network.\n *\n * @arg addr1 IPv6 address 1\n * @arg addr2 IPv6 address 2\n * @return !0 if the network identifiers of both address match\n */\n#define ip6_addr_netcmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \\\n                                       ((addr1)->addr[1] == (addr2)->addr[1]))\n\n#define ip6_addr_cmp(addr1, addr2) (((addr1)->addr[0] == (addr2)->addr[0]) && \\\n                                    ((addr1)->addr[1] == (addr2)->addr[1]) && \\\n                                    ((addr1)->addr[2] == (addr2)->addr[2]) && \\\n                                    ((addr1)->addr[3] == (addr2)->addr[3]))\n\n#define ip6_get_subnet_id(ip6addr)   (htonl((ip6addr)->addr[2]) & 0x0000ffffUL)\n\n#define ip6_addr_isany(ip6addr) (((ip6addr) == NULL) || \\\n                             (((ip6addr)->addr[0] == 0) && \\\n                             ((ip6addr)->addr[1] == 0) && \\\n                             ((ip6addr)->addr[2] == 0) && \\\n                             ((ip6addr)->addr[3] == 0)))\n\n\n#define ip6_addr_isglobal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xe0000000UL)) == PP_HTONL(0x20000000UL))\n\n#define ip6_addr_islinklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfe800000UL))\n\n#define ip6_addr_issitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffc00000UL)) == PP_HTONL(0xfec00000UL))\n\n#define ip6_addr_isuniquelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xfe000000UL)) == PP_HTONL(0xfc000000UL))\n\n#define ip6_addr_ismulticast(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL))\n#define ip6_addr_multicast_transient_flag(ip6addr)  ((ip6addr)->addr[0] & PP_HTONL(0x00100000UL))\n#define ip6_addr_multicast_prefix_flag(ip6addr)     ((ip6addr)->addr[0] & PP_HTONL(0x00200000UL))\n#define ip6_addr_multicast_rendezvous_flag(ip6addr) ((ip6addr)->addr[0] & PP_HTONL(0x00400000UL))\n#define ip6_addr_multicast_scope(ip6addr) ((htonl((ip6addr)->addr[0]) >> 16) & 0xf)\n#define IP6_MULTICAST_SCOPE_RESERVED            0x0\n#define IP6_MULTICAST_SCOPE_RESERVED0           0x0\n#define IP6_MULTICAST_SCOPE_INTERFACE_LOCAL     0x1\n#define IP6_MULTICAST_SCOPE_LINK_LOCAL          0x2\n#define IP6_MULTICAST_SCOPE_RESERVED3           0x3\n#define IP6_MULTICAST_SCOPE_ADMIN_LOCAL         0x4\n#define IP6_MULTICAST_SCOPE_SITE_LOCAL          0x5\n#define IP6_MULTICAST_SCOPE_ORGANIZATION_LOCAL  0x8\n#define IP6_MULTICAST_SCOPE_GLOBAL              0xe\n#define IP6_MULTICAST_SCOPE_RESERVEDF           0xf\n#define ip6_addr_ismulticast_iflocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff010000UL))\n#define ip6_addr_ismulticast_linklocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff020000UL))\n#define ip6_addr_ismulticast_adminlocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff040000UL))\n#define ip6_addr_ismulticast_sitelocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff050000UL))\n#define ip6_addr_ismulticast_orglocal(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff080000UL))\n#define ip6_addr_ismulticast_global(ip6addr) (((ip6addr)->addr[0] & PP_HTONL(0xffff0000UL)) == PP_HTONL(0xff0e0000UL))\n\n/* TODO define get/set for well-know multicast addresses, e.g. ff02::1 */\n#define ip6_addr_isallnodes_iflocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff010000UL)) && \\\n    ((ip6addr)->addr[1] == 0UL) && \\\n    ((ip6addr)->addr[2] == 0UL) && \\\n    ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL)))\n\n#define ip6_addr_isallnodes_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \\\n    ((ip6addr)->addr[1] == 0UL) && \\\n    ((ip6addr)->addr[2] == 0UL) && \\\n    ((ip6addr)->addr[3] == PP_HTONL(0x00000001UL)))\n#define ip6_addr_set_allnodes_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \\\n                (ip6addr)->addr[1] = 0; \\\n                (ip6addr)->addr[2] = 0; \\\n                (ip6addr)->addr[3] = PP_HTONL(0x00000001UL);}while(0)\n\n#define ip6_addr_isallrouters_linklocal(ip6addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \\\n    ((ip6addr)->addr[1] == 0UL) && \\\n    ((ip6addr)->addr[2] == 0UL) && \\\n    ((ip6addr)->addr[3] == PP_HTONL(0x00000002UL)))\n#define ip6_addr_set_allrouters_linklocal(ip6addr) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \\\n                (ip6addr)->addr[1] = 0; \\\n                (ip6addr)->addr[2] = 0; \\\n                (ip6addr)->addr[3] = PP_HTONL(0x00000002UL);}while(0)\n\n#define ip6_addr_issolicitednode(ip6addr) ( ((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \\\n        ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \\\n        (((ip6addr)->addr[3] & PP_HTONL(0xff000000UL)) == PP_HTONL(0xff000000UL)) )\n\n#define ip6_addr_set_solicitednode(ip6addr, if_id) do{(ip6addr)->addr[0] = PP_HTONL(0xff020000UL); \\\n                (ip6addr)->addr[1] = 0; \\\n                (ip6addr)->addr[2] = PP_HTONL(0x00000001UL); \\\n                (ip6addr)->addr[3] = htonl(0xff000000UL | (htonl(if_id) & 0x00ffffffUL));}while(0)\n\n#define ip6_addr_cmp_solicitednode(ip6addr, sn_addr) (((ip6addr)->addr[0] == PP_HTONL(0xff020000UL)) && \\\n                                    ((ip6addr)->addr[1] == 0) && \\\n                                    ((ip6addr)->addr[2] == PP_HTONL(0x00000001UL)) && \\\n                                    ((ip6addr)->addr[3] == htonl(0xff000000UL | (htonl((sn_addr)->addr[3]) & 0x00ffffffUL))))\n\n/* IPv6 address states. */\n#define IP6_ADDR_INVALID      0x00\n#define IP6_ADDR_TENTATIVE    0x08\n#define IP6_ADDR_TENTATIVE_1  0x09 /* 1 probe sent */\n#define IP6_ADDR_TENTATIVE_2  0x0a /* 2 probes sent */\n#define IP6_ADDR_TENTATIVE_3  0x0b /* 3 probes sent */\n#define IP6_ADDR_TENTATIVE_4  0x0c /* 4 probes sent */\n#define IP6_ADDR_TENTATIVE_5  0x0d /* 5 probes sent */\n#define IP6_ADDR_TENTATIVE_6  0x0e /* 6 probes sent */\n#define IP6_ADDR_TENTATIVE_7  0x0f /* 7 probes sent */\n#define IP6_ADDR_VALID        0x10\n#define IP6_ADDR_PREFERRED    0x30\n#define IP6_ADDR_DEPRECATED   0x50\n\n#define ip6_addr_isinvalid(addr_state) (addr_state == IP6_ADDR_INVALID)\n#define ip6_addr_istentative(addr_state) (addr_state & IP6_ADDR_TENTATIVE)\n#define ip6_addr_isvalid(addr_state) (addr_state & IP6_ADDR_VALID) /* Include valid, preferred, and deprecated. */\n#define ip6_addr_ispreferred(addr_state) (addr_state == IP6_ADDR_PREFERRED)\n#define ip6_addr_isdeprecated(addr_state) (addr_state == IP6_ADDR_DEPRECATED)\n\n#define ip6_addr_debug_print(debug, ipaddr) \\\n  LWIP_DEBUGF(debug, (\"%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F\":%\"X16_F, \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK1(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK2(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK3(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK4(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK5(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK6(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK7(ipaddr) : 0,    \\\n                      ipaddr != NULL ? IP6_ADDR_BLOCK8(ipaddr) : 0))\n\nint ip6addr_aton(const char *cp, ip6_addr_t *addr);\n/** returns ptr to static buffer; not reentrant! */\nchar *ip6addr_ntoa(const ip6_addr_t *addr);\nchar *ip6addr_ntoa_r(const ip6_addr_t *addr, char *buf, int buflen);\n\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6 */\n\n#endif /* __LWIP_IP6_ADDR_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/ip6_frag.h",
    "content": "/**\n * @file\n *\n * IPv6 fragmentation and reassembly.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n#ifndef __LWIP_IP6_FRAG_H__\n#define __LWIP_IP6_FRAG_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/netif.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n#if LWIP_IPV6 && LWIP_IPV6_REASS  /* don't build if not configured for use in lwipopts.h */\n\n/* The IPv6 reassembly timer interval in milliseconds. */\n#define IP6_REASS_TMR_INTERVAL 1000\n\n/* IPv6 reassembly helper struct.\n * This is exported because memp needs to know the size.\n */\nstruct ip6_reassdata {\n  struct ip6_reassdata *next;\n  struct pbuf *p;\n  struct ip6_hdr * iphdr;\n  u32_t identification;\n  u16_t datagram_len;\n  u8_t nexth;\n  u8_t timer;\n};\n\n#define ip6_reass_init() /* Compatibility define */\nvoid ip6_reass_tmr(void);\nstruct pbuf * ip6_reass(struct pbuf *p);\n\n#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */\n\n#if LWIP_IPV6 && LWIP_IPV6_FRAG  /* don't build if not configured for use in lwipopts.h */\n\n/** A custom pbuf that holds a reference to another pbuf, which is freed\n * when this custom pbuf is freed. This is used to create a custom PBUF_REF\n * that points into the original pbuf. */\n#ifndef __LWIP_PBUF_CUSTOM_REF__\n#define __LWIP_PBUF_CUSTOM_REF__\nstruct pbuf_custom_ref {\n  /** 'base class' */\n  struct pbuf_custom pc;\n  /** pointer to the original pbuf that is referenced */\n  struct pbuf *original;\n};\n#endif /* __LWIP_PBUF_CUSTOM_REF__ */\n\nerr_t ip6_frag(struct pbuf *p, struct netif *netif, ip6_addr_t *dest);\n\n#endif /* LWIP_IPV6 && LWIP_IPV6_FRAG */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP6_FRAG_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/mld6.h",
    "content": "/**\n * @file\n *\n * Multicast listener discovery for IPv6. Aims to be compliant with RFC 2710.\n * No support for MLDv2.\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#ifndef __LWIP_MLD6_H__\n#define __LWIP_MLD6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6_MLD && LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct mld_group {\n  /** next link */\n  struct mld_group *next;\n  /** interface on which the group is active */\n  struct netif      *netif;\n  /** multicast address */\n  ip6_addr_t         group_address;\n  /** signifies we were the last person to report */\n  u8_t               last_reporter_flag;\n  /** current state of the group */\n  u8_t               group_state;\n  /** timer for reporting */\n  u16_t              timer;\n  /** counter of simultaneous uses */\n  u8_t               use;\n};\n\n/** Multicast listener report/query/done message header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct mld_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u16_t max_resp_delay);\n  PACK_STRUCT_FIELD(u16_t reserved);\n  PACK_STRUCT_FIELD(ip6_addr_p_t multicast_address);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define MLD6_TMR_INTERVAL              100 /* Milliseconds */\n\n/* MAC Filter Actions, these are passed to a netif's\n * mld_mac_filter callback function. */\n#define MLD6_DEL_MAC_FILTER            0\n#define MLD6_ADD_MAC_FILTER            1\n\n\n#define mld6_init() /* TODO should we init tables? */\nerr_t  mld6_stop(struct netif *netif);\nvoid   mld6_report_groups(struct netif *netif);\nvoid   mld6_tmr(void);\nstruct mld_group *mld6_lookfor_group(struct netif *ifp, ip6_addr_t *addr);\nvoid   mld6_input(struct pbuf *p, struct netif *inp);\nerr_t  mld6_joingroup(ip6_addr_t *srcaddr, ip6_addr_t *groupaddr);\nerr_t  mld6_leavegroup(ip6_addr_t *srcaddr, ip6_addr_t *groupaddr);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6_MLD && LWIP_IPV6 */\n\n#endif /* __LWIP_MLD6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/ipv6/lwip/nd6.h",
    "content": "/**\n * @file\n *\n * Neighbor discovery and stateless address autoconfiguration for IPv6.\n * Aims to be compliant with RFC 4861 (Neighbor discovery) and RFC 4862\n * (Address autoconfiguration).\n */\n\n/*\n * Copyright (c) 2010 Inico Technologies Ltd.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Ivan Delamer <delamer@inicotech.com>\n *\n *\n * Please coordinate changes and requests with Ivan Delamer\n * <delamer@inicotech.com>\n */\n\n#ifndef __LWIP_ND6_H__\n#define __LWIP_ND6_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_IPV6  /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n#include \"lwip/netif.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Struct for tables. */\nstruct nd6_neighbor_cache_entry {\n  ip6_addr_t next_hop_address;\n  struct netif * netif;\n  u8_t lladdr[NETIF_MAX_HWADDR_LEN];\n  /*u32_t pmtu;*/\n#if LWIP_ND6_QUEUEING\n  /** Pointer to queue of pending outgoing packets on this entry. */\n  struct nd6_q_entry *q;\n#else /* LWIP_ND6_QUEUEING */\n  /** Pointer to a single pending outgoing packet on this entry. */\n  struct pbuf *q;\n#endif /* LWIP_ND6_QUEUEING */\n  u8_t state;\n  u8_t isrouter;\n  union {\n    u32_t reachable_time;\n    u32_t delay_time;\n    u32_t probes_sent;\n    u32_t stale_time;\n  } counter;\n};\n\nstruct nd6_destination_cache_entry {\n  ip6_addr_t destination_addr;\n  ip6_addr_t next_hop_addr;\n  u32_t pmtu;\n  u32_t age;\n};\n\nstruct nd6_prefix_list_entry {\n  ip6_addr_t prefix;\n  struct netif * netif;\n  u32_t invalidation_timer;\n#if LWIP_IPV6_AUTOCONFIG\n  u8_t flags;\n#define ND6_PREFIX_AUTOCONFIG_AUTONOMOUS 0x01\n#define ND6_PREFIX_AUTOCONFIG_ADDRESS_GENERATED 0x02\n#define ND6_PREFIX_AUTOCONFIG_ADDRESS_DUPLICATE 0x04\n#endif /* LWIP_IPV6_AUTOCONFIG */\n};\n\nstruct nd6_router_list_entry {\n  struct nd6_neighbor_cache_entry * neighbor_entry;\n  u32_t invalidation_timer;\n  u8_t flags;\n};\n\n\nenum nd6_neighbor_cache_entry_state {\n  ND6_NO_ENTRY = 0,\n  ND6_INCOMPLETE,\n  ND6_REACHABLE,\n  ND6_STALE,\n  ND6_DELAY,\n  ND6_PROBE\n};\n\n#if LWIP_ND6_QUEUEING\n/** struct for queueing outgoing packets for unknown address\n  * defined here to be accessed by memp.h\n  */\nstruct nd6_q_entry {\n  struct nd6_q_entry *next;\n  struct pbuf *p;\n};\n#endif /* LWIP_ND6_QUEUEING */\n\n/** Neighbor solicitation message header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ns_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u32_t reserved);\n  PACK_STRUCT_FIELD(ip6_addr_p_t target_address);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Neighbor advertisement message header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct na_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u8_t flags);\n  PACK_STRUCT_FIELD(u8_t reserved[3]);\n  PACK_STRUCT_FIELD(ip6_addr_p_t target_address);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n#define ND6_FLAG_ROUTER      (0x80)\n#define ND6_FLAG_SOLICITED   (0x40)\n#define ND6_FLAG_OVERRIDE    (0x20)\n\n/** Router solicitation message header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct rs_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u32_t reserved);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Router advertisement message header. */\n#define ND6_RA_FLAG_MANAGED_ADDR_CONFIG (0x80)\n#define ND6_RA_FLAG_OTHER_STATEFUL_CONFIG (0x40)\n#define ND6_RA_FLAG_HOME_AGENT (0x20)\n#define ND6_RA_PREFERENCE_MASK (0x18)\n#define ND6_RA_PREFERENCE_HIGH (0x08)\n#define ND6_RA_PREFERENCE_MEDIUM (0x00)\n#define ND6_RA_PREFERENCE_LOW (0x18)\n#define ND6_RA_PREFERENCE_DISABLED (0x10)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct ra_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u8_t current_hop_limit);\n  PACK_STRUCT_FIELD(u8_t flags);\n  PACK_STRUCT_FIELD(u16_t router_lifetime);\n  PACK_STRUCT_FIELD(u32_t reachable_time);\n  PACK_STRUCT_FIELD(u32_t retrans_timer);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Redirect message header. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct redirect_header {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u32_t reserved);\n  PACK_STRUCT_FIELD(ip6_addr_p_t target_address);\n  PACK_STRUCT_FIELD(ip6_addr_p_t destination_address);\n  /* Options follow. */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Link-layer address option. */\n#define ND6_OPTION_TYPE_SOURCE_LLADDR (0x01)\n#define ND6_OPTION_TYPE_TARGET_LLADDR (0x02)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct lladdr_option {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t length);\n  PACK_STRUCT_FIELD(u8_t addr[NETIF_MAX_HWADDR_LEN]);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Prefix information option. */\n#define ND6_OPTION_TYPE_PREFIX_INFO (0x03)\n#define ND6_PREFIX_FLAG_ON_LINK (0x80)\n#define ND6_PREFIX_FLAG_AUTONOMOUS (0x40)\n#define ND6_PREFIX_FLAG_ROUTER_ADDRESS (0x20)\n#define ND6_PREFIX_FLAG_SITE_PREFIX (0x10)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct prefix_option {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t length);\n  PACK_STRUCT_FIELD(u8_t prefix_length);\n  PACK_STRUCT_FIELD(u8_t flags);\n  PACK_STRUCT_FIELD(u32_t valid_lifetime);\n  PACK_STRUCT_FIELD(u32_t preferred_lifetime);\n  PACK_STRUCT_FIELD(u8_t reserved2[3]);\n  PACK_STRUCT_FIELD(u8_t site_prefix_length);\n  PACK_STRUCT_FIELD(ip6_addr_p_t prefix);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Redirected header option. */\n#define ND6_OPTION_TYPE_REDIR_HDR (0x04)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct redirected_header_option {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t length);\n  PACK_STRUCT_FIELD(u8_t reserved[6]);\n  /* Portion of redirected packet follows. */\n  /* PACK_STRUCT_FIELD(u8_t redirected[8]); */\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** MTU option. */\n#define ND6_OPTION_TYPE_MTU (0x05)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct mtu_option {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t length);\n  PACK_STRUCT_FIELD(u16_t reserved);\n  PACK_STRUCT_FIELD(u32_t mtu);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/** Route information option. */\n#define ND6_OPTION_TYPE_ROUTE_INFO (24)\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct route_option {\n  PACK_STRUCT_FIELD(u8_t type);\n  PACK_STRUCT_FIELD(u8_t length);\n  PACK_STRUCT_FIELD(u8_t prefix_length);\n  PACK_STRUCT_FIELD(u8_t preference);\n  PACK_STRUCT_FIELD(u32_t route_lifetime);\n  PACK_STRUCT_FIELD(ip6_addr_p_t prefix);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n/* the possible states of an IP address */\n#define IP6_ADDRESS_STATE_INVALID     (0)\n#define IP6_ADDRESS_STATE_VALID       (0x4)\n#define IP6_ADDRESS_STATE_PREFERRED   (0x5) /* includes valid */\n#define IP6_ADDRESS_STATE_DEPRECATED  (0x6) /* includes valid */\n#define IP6_ADDRESS_STATE_TENTATIV    (0x8)\n\n/** 1 second period */\n#define ND6_TMR_INTERVAL 1000\n\n/* Router tables. */\n/* TODO make these static? and entries accessible through API? */\nextern struct nd6_neighbor_cache_entry neighbor_cache[];\nextern struct nd6_destination_cache_entry destination_cache[];\nextern struct nd6_prefix_list_entry prefix_list[];\nextern struct nd6_router_list_entry default_router_list[];\n\n/* Default values, can be updated by a RA message. */\nextern u32_t reachable_time;\nextern u32_t retrans_timer;\n\n#define nd6_init() /* TODO should we init tables? */\nvoid nd6_tmr(void);\nvoid nd6_input(struct pbuf *p, struct netif *inp);\ns8_t nd6_get_next_hop_entry(ip6_addr_t * ip6addr, struct netif * netif);\ns8_t nd6_select_router(ip6_addr_t * ip6addr, struct netif * netif);\nu16_t nd6_get_destination_mtu(ip6_addr_t * ip6addr, struct netif * netif);\nerr_t nd6_queue_packet(s8_t neighbor_index, struct pbuf * p);\n#if LWIP_ND6_TCP_REACHABILITY_HINTS\nvoid nd6_reachability_hint(ip6_addr_t * ip6addr);\n#endif /* LWIP_ND6_TCP_REACHABILITY_HINTS */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_IPV6 */\n\n#endif /* __LWIP_ND6_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/api.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_API_H__\n#define __LWIP_API_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */\n\n#include <stddef.h> /* for size_t */\n\n#include \"lwip/netbuf.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/err.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Throughout this file, IP addresses and port numbers are expected to be in\n * the same byte order as in the corresponding pcb.\n */\n\n/* Flags for netconn_write (u8_t) */\n#define NETCONN_NOFLAG    0x00\n#define NETCONN_NOCOPY    0x00 /* Only for source code compatibility */\n#define NETCONN_COPY      0x01\n#define NETCONN_MORE      0x02\n#define NETCONN_DONTBLOCK 0x04\n\n/* Flags for struct netconn.flags (u8_t) */\n/** TCP: when data passed to netconn_write doesn't fit into the send buffer,\n    this temporarily stores whether to wake up the original application task\n    if data couldn't be sent in the first try. */\n#define NETCONN_FLAG_WRITE_DELAYED            0x01\n/** Should this netconn avoid blocking? */\n#define NETCONN_FLAG_NON_BLOCKING             0x02\n/** Was the last connect action a non-blocking one? */\n#define NETCONN_FLAG_IN_NONBLOCKING_CONNECT   0x04\n/** If this is set, a TCP netconn must call netconn_recved() to update\n    the TCP receive window (done automatically if not set). */\n#define NETCONN_FLAG_NO_AUTO_RECVED           0x08\n/** If a nonblocking write has been rejected before, poll_tcp needs to\n    check if the netconn is writable again */\n#define NETCONN_FLAG_CHECK_WRITESPACE         0x10\n#if LWIP_IPV6\n/** If this flag is set then only IPv6 communication is allowed on the\n    netconn. As per RFC#3493 this features defaults to OFF allowing\n    dual-stack usage by default. */\n#define NETCONN_FLAG_IPV6_V6ONLY              0x20\n#endif /* LWIP_IPV6 */\n\n\n/* Helpers to process several netconn_types by the same code */\n#define NETCONNTYPE_GROUP(t)         ((t)&0xF0)\n#define NETCONNTYPE_DATAGRAM(t)      ((t)&0xE0)\n#if LWIP_IPV6\n#define NETCONN_TYPE_IPV6            0x08\n#define NETCONNTYPE_ISIPV6(t)        ((t)&0x08)\n#define NETCONNTYPE_ISUDPLITE(t)     (((t)&0xF7) == NETCONN_UDPLITE)\n#define NETCONNTYPE_ISUDPNOCHKSUM(t) (((t)&0xF7) == NETCONN_UDPNOCHKSUM)\n#else /* LWIP_IPV6 */\n#define NETCONNTYPE_ISUDPLITE(t)     ((t) == NETCONN_UDPLITE)\n#define NETCONNTYPE_ISUDPNOCHKSUM(t) ((t) == NETCONN_UDPNOCHKSUM)\n#endif /* LWIP_IPV6 */\n\n/** Protocol family and type of the netconn */\nenum netconn_type {\n  NETCONN_INVALID     = 0,\n  /* NETCONN_TCP Group */\n  NETCONN_TCP         = 0x10,\n#if LWIP_IPV6\n  NETCONN_TCP_IPV6    = NETCONN_TCP | NETCONN_TYPE_IPV6 /* 0x18 */,\n#endif /* LWIP_IPV6 */\n  /* NETCONN_UDP Group */\n  NETCONN_UDP         = 0x20,\n  NETCONN_UDPLITE     = 0x21,\n  NETCONN_UDPNOCHKSUM = 0x22,\n#if LWIP_IPV6\n  NETCONN_UDP_IPV6         = NETCONN_UDP | NETCONN_TYPE_IPV6 /* 0x28 */,\n  NETCONN_UDPLITE_IPV6     = NETCONN_UDPLITE | NETCONN_TYPE_IPV6 /* 0x29 */,\n  NETCONN_UDPNOCHKSUM_IPV6 = NETCONN_UDPNOCHKSUM | NETCONN_TYPE_IPV6 /* 0x2a */,\n#endif /* LWIP_IPV6 */\n  /* NETCONN_RAW Group */\n  NETCONN_RAW         = 0x40\n#if LWIP_IPV6\n  ,\n  NETCONN_RAW_IPV6    = NETCONN_RAW | NETCONN_TYPE_IPV6 /* 0x48 */\n#endif /* LWIP_IPV6 */\n};\n\n/** Current state of the netconn. Non-TCP netconns are always\n * in state NETCONN_NONE! */\nenum netconn_state {\n  NETCONN_NONE,\n  NETCONN_WRITE,\n  NETCONN_LISTEN,\n  NETCONN_CONNECT,\n  NETCONN_CLOSE\n};\n\n/** Use to inform the callback function about changes */\nenum netconn_evt {\n  NETCONN_EVT_RCVPLUS,\n  NETCONN_EVT_RCVMINUS,\n  NETCONN_EVT_SENDPLUS,\n  NETCONN_EVT_SENDMINUS,\n  NETCONN_EVT_ERROR\n};\n\n#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)\n/** Used for netconn_join_leave_group() */\nenum netconn_igmp {\n  NETCONN_JOIN,\n  NETCONN_LEAVE\n};\n#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */\n\n/* forward-declare some structs to avoid to include their headers */\nstruct ip_pcb;\nstruct tcp_pcb;\nstruct udp_pcb;\nstruct raw_pcb;\nstruct netconn;\nstruct api_msg_msg;\n\n/** A callback prototype to inform about events for a netconn */\ntypedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len);\n\n/** A netconn descriptor */\nstruct netconn {\n  /** type of the netconn (TCP, UDP or RAW) */\n  enum netconn_type type;\n  /** current state of the netconn */\n  enum netconn_state state;\n  /** the lwIP internal protocol control block */\n  union {\n    struct ip_pcb  *ip;\n    struct tcp_pcb *tcp;\n    struct udp_pcb *udp;\n    struct raw_pcb *raw;\n  } pcb;\n  /** the last error this netconn had */\n  err_t last_err;\n  /** sem that is used to synchroneously execute functions in the core context */\n  sys_sem_t op_completed;\n  /** mbox where received packets are stored until they are fetched\n      by the netconn application thread (can grow quite big) */\n  sys_mbox_t recvmbox;\n#if LWIP_TCP\n  /** mbox where new connections are stored until processed\n      by the application thread */\n  sys_mbox_t acceptmbox;\n#endif /* LWIP_TCP */\n  /** only used for socket layer */\n#if LWIP_SOCKET\n  int socket;\n#endif /* LWIP_SOCKET */\n#if LWIP_SO_SNDTIMEO\n  /** timeout to wait for sending data (which means enqueueing data for sending\n      in internal buffers) */\n  s32_t send_timeout;\n#endif /* LWIP_SO_RCVTIMEO */\n#if LWIP_SO_RCVTIMEO\n  /** timeout to wait for new data to be received\n      (or connections to arrive for listening netconns) */\n  int recv_timeout;\n#endif /* LWIP_SO_RCVTIMEO */\n#if LWIP_SO_RCVBUF\n  /** maximum amount of bytes queued in recvmbox\n      not used for TCP: adjust TCP_WND instead! */\n  int recv_bufsize;\n  /** number of bytes currently in recvmbox to be received,\n      tested against recv_bufsize to limit bytes on recvmbox\n      for UDP and RAW, used for FIONREAD */\n  s16_t recv_avail;\n#endif /* LWIP_SO_RCVBUF */\n  /** flags holding more netconn-internal state, see NETCONN_FLAG_* defines */\n  u8_t flags;\n#if LWIP_TCP\n  /** TCP: when data passed to netconn_write doesn't fit into the send buffer,\n      this temporarily stores how much is already sent. */\n  size_t write_offset;\n  /** TCP: when data passed to netconn_write doesn't fit into the send buffer,\n      this temporarily stores the message.\n      Also used during connect and close. */\n  struct api_msg_msg *current_msg;\n#endif /* LWIP_TCP */\n  /** A callback function that is informed about events for this netconn */\n  netconn_callback callback;\n};\n\n/** Register an Network connection event */\n#define API_EVENT(c,e,l) if (c->callback) {         \\\n                           (*c->callback)(c, e, l); \\\n                         }\n\n/** Set conn->last_err to err but don't overwrite fatal errors */\n#define NETCONN_SET_SAFE_ERR(conn, err) do { \\\n  SYS_ARCH_DECL_PROTECT(lev); \\\n  SYS_ARCH_PROTECT(lev); \\\n  if (!ERR_IS_FATAL((conn)->last_err)) { \\\n    (conn)->last_err = err; \\\n  } \\\n  SYS_ARCH_UNPROTECT(lev); \\\n} while(0);\n\n/* Network connection functions: */\n#define netconn_new(t)                  netconn_new_with_proto_and_callback(t, 0, NULL)\n#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c)\nstruct\nnetconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto,\n                                             netconn_callback callback);\nerr_t   netconn_delete(struct netconn *conn);\n/** Get the type of a netconn (as enum netconn_type). */\n#define netconn_type(conn) (conn->type)\n\nerr_t   netconn_getaddr(struct netconn *conn, ip_addr_t *addr,\n                        u16_t *port, u8_t local);\n#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0)\n#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1)\n\nerr_t   netconn_bind(struct netconn *conn, ip_addr_t *addr, u16_t port);\nerr_t   netconn_connect(struct netconn *conn, ip_addr_t *addr, u16_t port);\nerr_t   netconn_disconnect (struct netconn *conn);\nerr_t   netconn_listen_with_backlog(struct netconn *conn, u8_t backlog);\n#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG)\nerr_t   netconn_accept(struct netconn *conn, struct netconn **new_conn);\nerr_t   netconn_recv(struct netconn *conn, struct netbuf **new_buf);\nerr_t   netconn_recv_tcp_pbuf(struct netconn *conn, struct pbuf **new_buf);\nvoid    netconn_recved(struct netconn *conn, u32_t length);\nerr_t   netconn_sendto(struct netconn *conn, struct netbuf *buf,\n                       ip_addr_t *addr, u16_t port);\nerr_t   netconn_send(struct netconn *conn, struct netbuf *buf);\nerr_t   netconn_write_partly(struct netconn *conn, const void *dataptr, size_t size,\n                             u8_t apiflags, size_t *bytes_written);\n#define netconn_write(conn, dataptr, size, apiflags) \\\n          netconn_write_partly(conn, dataptr, size, apiflags, NULL)\nerr_t   netconn_close(struct netconn *conn);\nerr_t   netconn_shutdown(struct netconn *conn, u8_t shut_rx, u8_t shut_tx);\n\n#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)\nerr_t   netconn_join_leave_group(struct netconn *conn, ip_addr_t *multiaddr,\n                                 ip_addr_t *netif_addr, enum netconn_igmp join_or_leave);\n#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */\n#if LWIP_DNS\nerr_t   netconn_gethostbyname(const char *name, ip_addr_t *addr);\n#endif /* LWIP_DNS */\n#if LWIP_IPV6\n\n#define netconn_bind_ip6(conn, ip6addr, port) (NETCONNTYPE_ISIPV6((conn)->type) ? \\\n        netconn_bind(conn, ip6_2_ip(ip6addr), port) : ERR_VAL)\n#define netconn_connect_ip6(conn, ip6addr, port) (NETCONNTYPE_ISIPV6((conn)->type) ? \\\n        netconn_connect(conn, ip6_2_ip(ip6addr), port) : ERR_VAL)\n#define netconn_sendto_ip6(conn, buf, ip6addr, port) (NETCONNTYPE_ISIPV6((conn)->type) ? \\\n        netconn_sendto(conn, buf, ip6_2_ip(ip6addr), port) : ERR_VAL)\n#if LWIP_IPV6_MLD\n#define netconn_join_leave_group_ip6(conn, multiaddr, srcaddr, join_or_leave) (NETCONNTYPE_ISIPV6((conn)->type) ? \\\n        netconn_join_leave_group(conn, ip6_2_ip(multiaddr), ip6_2_ip(srcaddr), join_or_leave) :\\\n        ERR_VAL)\n#endif /* LWIP_IPV6_MLD*/\n#endif /* LWIP_IPV6 */\n\n#define netconn_err(conn)               ((conn)->last_err)\n#define netconn_recv_bufsize(conn)      ((conn)->recv_bufsize)\n\n/** Set the blocking status of netconn calls (@todo: write/send is missing) */\n#define netconn_set_nonblocking(conn, val)  do { if(val) { \\\n  (conn)->flags |= NETCONN_FLAG_NON_BLOCKING; \\\n} else { \\\n  (conn)->flags &= ~ NETCONN_FLAG_NON_BLOCKING; }} while(0)\n/** Get the blocking status of netconn calls (@todo: write/send is missing) */\n#define netconn_is_nonblocking(conn)        (((conn)->flags & NETCONN_FLAG_NON_BLOCKING) != 0)\n\n/** TCP: Set the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */\n#define netconn_set_noautorecved(conn, val)  do { if(val) { \\\n  (conn)->flags |= NETCONN_FLAG_NO_AUTO_RECVED; \\\n} else { \\\n  (conn)->flags &= ~ NETCONN_FLAG_NO_AUTO_RECVED; }} while(0)\n/** TCP: Get the no-auto-recved status of netconn calls (see NETCONN_FLAG_NO_AUTO_RECVED) */\n#define netconn_get_noautorecved(conn)        (((conn)->flags & NETCONN_FLAG_NO_AUTO_RECVED) != 0)\n\n#if LWIP_SO_SNDTIMEO\n/** Set the send timeout in milliseconds */\n#define netconn_set_sendtimeout(conn, timeout)      ((conn)->send_timeout = (timeout))\n/** Get the send timeout in milliseconds */\n#define netconn_get_sendtimeout(conn)               ((conn)->send_timeout)\n#endif /* LWIP_SO_SNDTIMEO */\n#if LWIP_SO_RCVTIMEO\n/** Set the receive timeout in milliseconds */\n#define netconn_set_recvtimeout(conn, timeout)      ((conn)->recv_timeout = (timeout))\n/** Get the receive timeout in milliseconds */\n#define netconn_get_recvtimeout(conn)               ((conn)->recv_timeout)\n#endif /* LWIP_SO_RCVTIMEO */\n#if LWIP_SO_RCVBUF\n/** Set the receive buffer in bytes */\n#define netconn_set_recvbufsize(conn, recvbufsize)  ((conn)->recv_bufsize = (recvbufsize))\n/** Get the receive buffer in bytes */\n#define netconn_get_recvbufsize(conn)               ((conn)->recv_bufsize)\n#endif /* LWIP_SO_RCVBUF*/\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_NETCONN */\n\n#endif /* __LWIP_API_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/api_msg.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_API_MSG_H__\n#define __LWIP_API_MSG_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */\n\n#include <stddef.h> /* for size_t */\n\n#include \"lwip/ip_addr.h\"\n#include \"lwip/err.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/igmp.h\"\n#include \"lwip/api.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* For the netconn API, these values are use as a bitmask! */\n#define NETCONN_SHUT_RD   1\n#define NETCONN_SHUT_WR   2\n#define NETCONN_SHUT_RDWR (NETCONN_SHUT_RD | NETCONN_SHUT_WR)\n\n/* IP addresses and port numbers are expected to be in\n * the same byte order as in the corresponding pcb.\n */\n/** This struct includes everything that is necessary to execute a function\n    for a netconn in another thread context (mainly used to process netconns\n    in the tcpip_thread context to be thread safe). */\nstruct api_msg_msg {\n  /** The netconn which to process - always needed: it includes the semaphore\n      which is used to block the application thread until the function finished. */\n  struct netconn *conn;\n  /** The return value of the function executed in tcpip_thread. */\n  err_t err;\n  /** Depending on the executed function, one of these union members is used */\n  union {\n    /** used for lwip_netconn_do_send */\n    struct netbuf *b;\n    /** used for lwip_netconn_do_newconn */\n    struct {\n      u8_t proto;\n    } n;\n    /** used for lwip_netconn_do_bind and lwip_netconn_do_connect */\n    struct {\n      ip_addr_t *ipaddr;\n      u16_t port;\n    } bc;\n    /** used for lwip_netconn_do_getaddr */\n    struct {\n      ipX_addr_t *ipaddr;\n      u16_t *port;\n      u8_t local;\n    } ad;\n    /** used for lwip_netconn_do_write */\n    struct {\n      const void *dataptr;\n      size_t len;\n      u8_t apiflags;\n#if LWIP_SO_SNDTIMEO\n      u32_t time_started;\n#endif /* LWIP_SO_SNDTIMEO */\n    } w;\n    /** used for lwip_netconn_do_recv */\n    struct {\n      u32_t len;\n    } r;\n    /** used for lwip_netconn_do_close (/shutdown) */\n    struct {\n      u8_t shut;\n    } sd;\n#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)\n    /** used for lwip_netconn_do_join_leave_group */\n    struct {\n      ipX_addr_t *multiaddr;\n      ipX_addr_t *netif_addr;\n      enum netconn_igmp join_or_leave;\n    } jl;\n#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */\n#if TCP_LISTEN_BACKLOG\n    struct {\n      u8_t backlog;\n    } lb;\n#endif /* TCP_LISTEN_BACKLOG */\n  } msg;\n};\n\n/** This struct contains a function to execute in another thread context and\n    a struct api_msg_msg that serves as an argument for this function.\n    This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */\nstruct api_msg {\n  /** function to execute in tcpip_thread context */\n  void (* function)(struct api_msg_msg *msg);\n  /** arguments for this function */\n  struct api_msg_msg msg;\n};\n\n#if LWIP_DNS\n/** As lwip_netconn_do_gethostbyname requires more arguments but doesn't require a netconn,\n    it has its own struct (to avoid struct api_msg getting bigger than necessary).\n    lwip_netconn_do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg\n    (see netconn_gethostbyname). */\nstruct dns_api_msg {\n  /** Hostname to query or dotted IP address string */\n  const char *name;\n  /** Rhe resolved address is stored here */\n  ip_addr_t *addr;\n  /** This semaphore is posted when the name is resolved, the application thread\n      should wait on it. */\n  sys_sem_t *sem;\n  /** Errors are given back here */\n  err_t *err;\n};\n#endif /* LWIP_DNS */\n\nvoid lwip_netconn_do_newconn         ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_delconn         ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_bind            ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_connect         ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_disconnect      ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_listen          ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_send            ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_recv            ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_write           ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_getaddr         ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_close           ( struct api_msg_msg *msg);\nvoid lwip_netconn_do_shutdown        ( struct api_msg_msg *msg);\n#if LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD)\nvoid lwip_netconn_do_join_leave_group( struct api_msg_msg *msg);\n#endif /* LWIP_IGMP || (LWIP_IPV6 && LWIP_IPV6_MLD) */\n\n#if LWIP_DNS\nvoid lwip_netconn_do_gethostbyname(void *arg);\n#endif /* LWIP_DNS */\n\nstruct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback);\nvoid netconn_free(struct netconn *conn);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_NETCONN */\n\n#endif /* __LWIP_API_MSG_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/arch.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_ARCH_H__\n#define __LWIP_ARCH_H__\n\n#include \"arch/cc.h\"\n\n/** Temporary: define format string for size_t if not defined in cc.h */\n#ifndef SZT_F\n#define SZT_F U32_F\n#endif /* SZT_F */\n/** Temporary upgrade helper: define format string for u8_t as hex if not\n    defined in cc.h */\n#ifndef X8_F\n#define X8_F  \"02x\"\n#endif /* X8_F */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef PACK_STRUCT_BEGIN\n#define PACK_STRUCT_BEGIN\n#endif /* PACK_STRUCT_BEGIN */\n\n#ifndef PACK_STRUCT_END\n#define PACK_STRUCT_END\n#endif /* PACK_STRUCT_END */\n\n#ifndef PACK_STRUCT_FIELD\n#define PACK_STRUCT_FIELD(x) x\n#endif /* PACK_STRUCT_FIELD */\n\n\n#ifndef LWIP_UNUSED_ARG\n#define LWIP_UNUSED_ARG(x) (void)x\n#endif /* LWIP_UNUSED_ARG */ \n\n\n#ifdef LWIP_PROVIDE_ERRNO\n\n#define  EPERM         1  /* Operation not permitted */\n#define  ENOENT        2  /* No such file or directory */\n#define  ESRCH         3  /* No such process */\n#define  EINTR         4  /* Interrupted system call */\n#define  EIO           5  /* I/O error */\n#define  ENXIO         6  /* No such device or address */\n#define  E2BIG         7  /* Arg list too long */\n#define  ENOEXEC       8  /* Exec format error */\n#define  EBADF         9  /* Bad file number */\n#define  ECHILD       10  /* No child processes */\n#define  EAGAIN       11  /* Try again */\n#define  ENOMEM       12  /* Out of memory */\n#define  EACCES       13  /* Permission denied */\n#define  EFAULT       14  /* Bad address */\n#define  ENOTBLK      15  /* Block device required */\n#define  EBUSY        16  /* Device or resource busy */\n#define  EEXIST       17  /* File exists */\n#define  EXDEV        18  /* Cross-device link */\n#define  ENODEV       19  /* No such device */\n#define  ENOTDIR      20  /* Not a directory */\n#define  EISDIR       21  /* Is a directory */\n#define  EINVAL       22  /* Invalid argument */\n#define  ENFILE       23  /* File table overflow */\n#define  EMFILE       24  /* Too many open files */\n#define  ENOTTY       25  /* Not a typewriter */\n#define  ETXTBSY      26  /* Text file busy */\n#define  EFBIG        27  /* File too large */\n#define  ENOSPC       28  /* No space left on device */\n#define  ESPIPE       29  /* Illegal seek */\n#define  EROFS        30  /* Read-only file system */\n#define  EMLINK       31  /* Too many links */\n#define  EPIPE        32  /* Broken pipe */\n#define  EDOM         33  /* Math argument out of domain of func */\n#define  ERANGE       34  /* Math result not representable */\n#define  EDEADLK      35  /* Resource deadlock would occur */\n#define  ENAMETOOLONG 36  /* File name too long */\n#define  ENOLCK       37  /* No record locks available */\n#define  ENOSYS       38  /* Function not implemented */\n#define  ENOTEMPTY    39  /* Directory not empty */\n#define  ELOOP        40  /* Too many symbolic links encountered */\n#define  EWOULDBLOCK  EAGAIN  /* Operation would block */\n#define  ENOMSG       42  /* No message of desired type */\n#define  EIDRM        43  /* Identifier removed */\n#define  ECHRNG       44  /* Channel number out of range */\n#define  EL2NSYNC     45  /* Level 2 not synchronized */\n#define  EL3HLT       46  /* Level 3 halted */\n#define  EL3RST       47  /* Level 3 reset */\n#define  ELNRNG       48  /* Link number out of range */\n#define  EUNATCH      49  /* Protocol driver not attached */\n#define  ENOCSI       50  /* No CSI structure available */\n#define  EL2HLT       51  /* Level 2 halted */\n#define  EBADE        52  /* Invalid exchange */\n#define  EBADR        53  /* Invalid request descriptor */\n#define  EXFULL       54  /* Exchange full */\n#define  ENOANO       55  /* No anode */\n#define  EBADRQC      56  /* Invalid request code */\n#define  EBADSLT      57  /* Invalid slot */\n\n#define  EDEADLOCK    EDEADLK\n\n#define  EBFONT       59  /* Bad font file format */\n#define  ENOSTR       60  /* Device not a stream */\n#define  ENODATA      61  /* No data available */\n#define  ETIME        62  /* Timer expired */\n#define  ENOSR        63  /* Out of streams resources */\n#define  ENONET       64  /* Machine is not on the network */\n#define  ENOPKG       65  /* Package not installed */\n#define  EREMOTE      66  /* Object is remote */\n#define  ENOLINK      67  /* Link has been severed */\n#define  EADV         68  /* Advertise error */\n#define  ESRMNT       69  /* Srmount error */\n#define  ECOMM        70  /* Communication error on send */\n#define  EPROTO       71  /* Protocol error */\n#define  EMULTIHOP    72  /* Multihop attempted */\n#define  EDOTDOT      73  /* RFS specific error */\n#define  EBADMSG      74  /* Not a data message */\n#define  EOVERFLOW    75  /* Value too large for defined data type */\n#define  ENOTUNIQ     76  /* Name not unique on network */\n#define  EBADFD       77  /* File descriptor in bad state */\n#define  EREMCHG      78  /* Remote address changed */\n#define  ELIBACC      79  /* Can not access a needed shared library */\n#define  ELIBBAD      80  /* Accessing a corrupted shared library */\n#define  ELIBSCN      81  /* .lib section in a.out corrupted */\n#define  ELIBMAX      82  /* Attempting to link in too many shared libraries */\n#define  ELIBEXEC     83  /* Cannot exec a shared library directly */\n#define  EILSEQ       84  /* Illegal byte sequence */\n#define  ERESTART     85  /* Interrupted system call should be restarted */\n#define  ESTRPIPE     86  /* Streams pipe error */\n#define  EUSERS       87  /* Too many users */\n#define  ENOTSOCK     88  /* Socket operation on non-socket */\n#define  EDESTADDRREQ 89  /* Destination address required */\n#define  EMSGSIZE     90  /* Message too long */\n#define  EPROTOTYPE   91  /* Protocol wrong type for socket */\n#define  ENOPROTOOPT  92  /* Protocol not available */\n#define  EPROTONOSUPPORT 93  /* Protocol not supported */\n#define  ESOCKTNOSUPPORT 94  /* Socket type not supported */\n#define  EOPNOTSUPP      95  /* Operation not supported on transport endpoint */\n#define  EPFNOSUPPORT    96  /* Protocol family not supported */\n#define  EAFNOSUPPORT    97  /* Address family not supported by protocol */\n#define  EADDRINUSE      98  /* Address already in use */\n#define  EADDRNOTAVAIL   99  /* Cannot assign requested address */\n#define  ENETDOWN       100  /* Network is down */\n#define  ENETUNREACH    101  /* Network is unreachable */\n#define  ENETRESET      102  /* Network dropped connection because of reset */\n#define  ECONNABORTED   103  /* Software caused connection abort */\n#define  ECONNRESET     104  /* Connection reset by peer */\n#define  ENOBUFS        105  /* No buffer space available */\n#define  EISCONN        106  /* Transport endpoint is already connected */\n#define  ENOTCONN       107  /* Transport endpoint is not connected */\n#define  ESHUTDOWN      108  /* Cannot send after transport endpoint shutdown */\n#define  ETOOMANYREFS   109  /* Too many references: cannot splice */\n#define  ETIMEDOUT      110  /* Connection timed out */\n#define  ECONNREFUSED   111  /* Connection refused */\n#define  EHOSTDOWN      112  /* Host is down */\n#define  EHOSTUNREACH   113  /* No route to host */\n#define  EALREADY       114  /* Operation already in progress */\n#define  EINPROGRESS    115  /* Operation now in progress */\n#define  ESTALE         116  /* Stale NFS file handle */\n#define  EUCLEAN        117  /* Structure needs cleaning */\n#define  ENOTNAM        118  /* Not a XENIX named type file */\n#define  ENAVAIL        119  /* No XENIX semaphores available */\n#define  EISNAM         120  /* Is a named type file */\n#define  EREMOTEIO      121  /* Remote I/O error */\n#define  EDQUOT         122  /* Quota exceeded */\n\n#define  ENOMEDIUM      123  /* No medium found */\n#define  EMEDIUMTYPE    124  /* Wrong medium type */\n\n#ifndef errno\nextern int errno;\n#endif\n\n#endif /* LWIP_PROVIDE_ERRNO */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_ARCH_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/debug.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_DEBUG_H__\n#define __LWIP_DEBUG_H__\n\n#include \"lwip/arch.h\"\n#include \"lwip/opt.h\"\n\n/** lower two bits indicate debug level\n * - 0 all\n * - 1 warning\n * - 2 serious\n * - 3 severe\n */\n#define LWIP_DBG_LEVEL_ALL     0x00\n#define LWIP_DBG_LEVEL_OFF     LWIP_DBG_LEVEL_ALL /* compatibility define only */\n#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */\n#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */\n#define LWIP_DBG_LEVEL_SEVERE  0x03\n#define LWIP_DBG_MASK_LEVEL    0x03\n\n/** flag for LWIP_DEBUGF to enable that debug message */\n#define LWIP_DBG_ON            0x80U\n/** flag for LWIP_DEBUGF to disable that debug message */\n#define LWIP_DBG_OFF           0x00U\n\n/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */\n#define LWIP_DBG_TRACE         0x40U\n/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */\n#define LWIP_DBG_STATE         0x20U\n/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */\n#define LWIP_DBG_FRESH         0x10U\n/** flag for LWIP_DEBUGF to halt after printing this debug message */\n#define LWIP_DBG_HALT          0x08U\n\n#ifndef LWIP_NOASSERT\n#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \\\n  LWIP_PLATFORM_ASSERT(message); } while(0)\n#else  /* LWIP_NOASSERT */\n#define LWIP_ASSERT(message, assertion) \n#endif /* LWIP_NOASSERT */\n\n/** if \"expression\" isn't true, then print \"message\" and execute \"handler\" expression */\n#ifndef LWIP_ERROR\n#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \\\n  LWIP_PLATFORM_ASSERT(message); handler;}} while(0)\n#endif /* LWIP_ERROR */\n\n#ifdef LWIP_DEBUG\n/** print debug message only if debug message type is enabled...\n *  AND is of correct type AND is at least LWIP_DBG_LEVEL\n */\n#define LWIP_DEBUGF(debug, message) do { \\\n                               if ( \\\n                                   ((debug) & LWIP_DBG_ON) && \\\n                                   ((debug) & LWIP_DBG_TYPES_ON) && \\\n                                   ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \\\n                                 LWIP_PLATFORM_DIAG(message); \\\n                                 if ((debug) & LWIP_DBG_HALT) { \\\n                                   while(1); \\\n                                 } \\\n                               } \\\n                             } while(0)\n\n#else  /* LWIP_DEBUG */\n#define LWIP_DEBUGF(debug, message) \n#endif /* LWIP_DEBUG */\n\n#endif /* __LWIP_DEBUG_H__ */\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/def.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_DEF_H__\n#define __LWIP_DEF_H__\n\n/* arch.h might define NULL already */\n#include \"lwip/arch.h\"\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define LWIP_MAX(x , y)  (((x) > (y)) ? (x) : (y))\n#define LWIP_MIN(x , y)  (((x) < (y)) ? (x) : (y))\n\n#ifndef NULL\n#define NULL ((void *)0)\n#endif\n\n/* Endianess-optimized shifting of two u8_t to create one u16_t */\n#if BYTE_ORDER == LITTLE_ENDIAN\n#define LWIP_MAKE_U16(a, b) ((a << 8) | b)\n#else\n#define LWIP_MAKE_U16(a, b) ((b << 8) | a)\n#endif \n\n#ifndef LWIP_PLATFORM_BYTESWAP\n#define LWIP_PLATFORM_BYTESWAP 0\n#endif\n\n#ifndef LWIP_PREFIX_BYTEORDER_FUNCS\n/* workaround for naming collisions on some platforms */\n\n#ifdef htons\n#undef htons\n#endif /* htons */\n#ifdef htonl\n#undef htonl\n#endif /* htonl */\n#ifdef ntohs\n#undef ntohs\n#endif /* ntohs */\n#ifdef ntohl\n#undef ntohl\n#endif /* ntohl */\n\n#define htons(x) lwip_htons(x)\n#define ntohs(x) lwip_ntohs(x)\n#define htonl(x) lwip_htonl(x)\n#define ntohl(x) lwip_ntohl(x)\n#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */\n\n#if BYTE_ORDER == BIG_ENDIAN\n#define lwip_htons(x) (x)\n#define lwip_ntohs(x) (x)\n#define lwip_htonl(x) (x)\n#define lwip_ntohl(x) (x)\n#define PP_HTONS(x) (x)\n#define PP_NTOHS(x) (x)\n#define PP_HTONL(x) (x)\n#define PP_NTOHL(x) (x)\n#else /* BYTE_ORDER != BIG_ENDIAN */\n#if LWIP_PLATFORM_BYTESWAP\n#define lwip_htons(x) LWIP_PLATFORM_HTONS(x)\n#define lwip_ntohs(x) LWIP_PLATFORM_HTONS(x)\n#define lwip_htonl(x) LWIP_PLATFORM_HTONL(x)\n#define lwip_ntohl(x) LWIP_PLATFORM_HTONL(x)\n#else /* LWIP_PLATFORM_BYTESWAP */\nu16_t lwip_htons(u16_t x);\nu16_t lwip_ntohs(u16_t x);\nu32_t lwip_htonl(u32_t x);\nu32_t lwip_ntohl(u32_t x);\n#endif /* LWIP_PLATFORM_BYTESWAP */\n\n/* These macros should be calculated by the preprocessor and are used\n   with compile-time constants only (so that there is no little-endian\n   overhead at runtime). */\n#define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))\n#define PP_NTOHS(x) PP_HTONS(x)\n#define PP_HTONL(x) ((((x) & 0xff) << 24) | \\\n                     (((x) & 0xff00) << 8) | \\\n                     (((x) & 0xff0000UL) >> 8) | \\\n                     (((x) & 0xff000000UL) >> 24))\n#define PP_NTOHL(x) PP_HTONL(x)\n\n#endif /* BYTE_ORDER == BIG_ENDIAN */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_DEF_H__ */\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/dhcp.h",
    "content": "/** @file\n */\n\n#ifndef __LWIP_DHCP_H__\n#define __LWIP_DHCP_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/netif.h\"\n#include \"lwip/udp.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** period (in seconds) of the application calling dhcp_coarse_tmr() */\n#define DHCP_COARSE_TIMER_SECS 60 \n/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */\n#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL)\n/** period (in milliseconds) of the application calling dhcp_fine_tmr() */\n#define DHCP_FINE_TIMER_MSECS 500 \n\n#define DHCP_CHADDR_LEN 16U\n#define DHCP_SNAME_LEN  64U\n#define DHCP_FILE_LEN   128U\n\nstruct dhcp\n{\n  /** transaction identifier of last sent request */ \n  u32_t xid;\n  /** our connection to the DHCP server */ \n  struct udp_pcb *pcb;\n  /** incoming msg */\n  struct dhcp_msg *msg_in;\n  /** current DHCP state machine state */\n  u8_t state;\n  /** retries of current request */\n  u8_t tries;\n#if LWIP_DHCP_AUTOIP_COOP\n  u8_t autoip_coop_state;\n#endif\n  u8_t subnet_mask_given;\n\n  struct pbuf *p_out; /* pbuf of outcoming msg */\n  struct dhcp_msg *msg_out; /* outgoing msg */\n  u16_t options_out_len; /* outgoing msg options length */\n  u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */\n  u16_t t1_timeout;  /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */\n  u16_t t2_timeout;  /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */\n  ip_addr_t server_ip_addr; /* dhcp server address that offered this lease */\n  ip_addr_t offered_ip_addr;\n  ip_addr_t offered_sn_mask;\n  ip_addr_t offered_gw_addr;\n \n  u32_t offered_t0_lease; /* lease period (in seconds) */\n  u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */\n  u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period)  */\n  /* @todo: LWIP_DHCP_BOOTP_FILE configuration option?\n     integrate with possible TFTP-client for booting? */\n#if LWIP_DHCP_BOOTP_FILE\n  ip_addr_t offered_si_addr;\n  char boot_file_name[DHCP_FILE_LEN];\n#endif /* LWIP_DHCP_BOOTPFILE */\n};\n\n/* MUST be compiled with \"pack structs\" or equivalent! */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\n/** minimum set of fields of any DHCP message */\nstruct dhcp_msg\n{\n  PACK_STRUCT_FIELD(u8_t op);\n  PACK_STRUCT_FIELD(u8_t htype);\n  PACK_STRUCT_FIELD(u8_t hlen);\n  PACK_STRUCT_FIELD(u8_t hops);\n  PACK_STRUCT_FIELD(u32_t xid);\n  PACK_STRUCT_FIELD(u16_t secs);\n  PACK_STRUCT_FIELD(u16_t flags);\n  PACK_STRUCT_FIELD(ip_addr_p_t ciaddr);\n  PACK_STRUCT_FIELD(ip_addr_p_t yiaddr);\n  PACK_STRUCT_FIELD(ip_addr_p_t siaddr);\n  PACK_STRUCT_FIELD(ip_addr_p_t giaddr);\n  PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]);\n  PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]);\n  PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]);\n  PACK_STRUCT_FIELD(u32_t cookie);\n#define DHCP_MIN_OPTIONS_LEN 68U\n/** make sure user does not configure this too small */\n#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN))\n#  undef DHCP_OPTIONS_LEN\n#endif\n/** allow this to be configured in lwipopts.h, but not too small */\n#if (!defined(DHCP_OPTIONS_LEN))\n/** set this to be sufficient for your options in outgoing DHCP msgs */\n#  define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN\n#endif\n  PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\nvoid dhcp_set_struct(struct netif *netif, struct dhcp *dhcp);\n/** Remove a struct dhcp previously set to the netif using dhcp_set_struct() */\n#define dhcp_remove_struct(netif) do { (netif)->dhcp = NULL; } while(0)\nvoid dhcp_cleanup(struct netif *netif);\n/** start DHCP configuration */\nerr_t dhcp_start(struct netif *netif);\n/** enforce early lease renewal (not needed normally)*/\nerr_t dhcp_renew(struct netif *netif);\n/** release the DHCP lease, usually called before dhcp_stop()*/\nerr_t dhcp_release(struct netif *netif);\n/** stop DHCP configuration */\nvoid dhcp_stop(struct netif *netif);\n/** inform server of our manual IP address */\nvoid dhcp_inform(struct netif *netif);\n/** Handle a possible change in the network configuration */\nvoid dhcp_network_changed(struct netif *netif);\n\n/** if enabled, check whether the offered IP address is not in use, using ARP */\n#if DHCP_DOES_ARP_CHECK\nvoid dhcp_arp_reply(struct netif *netif, ip_addr_t *addr);\n#endif\n\n/** to be called every minute */\nvoid dhcp_coarse_tmr(void);\n/** to be called every half second */\nvoid dhcp_fine_tmr(void);\n \n/** DHCP message item offsets and length */\n#define DHCP_OP_OFS       0\n#define DHCP_HTYPE_OFS    1\n#define DHCP_HLEN_OFS     2\n#define DHCP_HOPS_OFS     3\n#define DHCP_XID_OFS      4\n#define DHCP_SECS_OFS     8\n#define DHCP_FLAGS_OFS    10\n#define DHCP_CIADDR_OFS   12\n#define DHCP_YIADDR_OFS   16\n#define DHCP_SIADDR_OFS   20\n#define DHCP_GIADDR_OFS   24\n#define DHCP_CHADDR_OFS   28\n#define DHCP_SNAME_OFS    44\n#define DHCP_FILE_OFS     108\n#define DHCP_MSG_LEN      236\n\n#define DHCP_COOKIE_OFS   DHCP_MSG_LEN\n#define DHCP_OPTIONS_OFS  (DHCP_MSG_LEN + 4)\n\n#define DHCP_CLIENT_PORT  68  \n#define DHCP_SERVER_PORT  67\n\n/** DHCP client states */\n#define DHCP_OFF          0\n#define DHCP_REQUESTING   1\n#define DHCP_INIT         2\n#define DHCP_REBOOTING    3\n#define DHCP_REBINDING    4\n#define DHCP_RENEWING     5\n#define DHCP_SELECTING    6\n#define DHCP_INFORMING    7\n#define DHCP_CHECKING     8\n#define DHCP_PERMANENT    9\n#define DHCP_BOUND        10\n/** not yet implemented #define DHCP_RELEASING 11 */\n#define DHCP_BACKING_OFF  12\n\n/** AUTOIP cooperatation flags */\n#define DHCP_AUTOIP_COOP_STATE_OFF  0\n#define DHCP_AUTOIP_COOP_STATE_ON   1\n \n#define DHCP_BOOTREQUEST  1\n#define DHCP_BOOTREPLY    2\n\n/** DHCP message types */\n#define DHCP_DISCOVER 1\n#define DHCP_OFFER    2\n#define DHCP_REQUEST  3\n#define DHCP_DECLINE  4\n#define DHCP_ACK      5\n#define DHCP_NAK      6\n#define DHCP_RELEASE  7\n#define DHCP_INFORM   8\n\n/** DHCP hardware type, currently only ethernet is supported */\n#define DHCP_HTYPE_ETH 1\n\n#define DHCP_MAGIC_COOKIE 0x63825363UL\n\n/* This is a list of options for BOOTP and DHCP, see RFC 2132 for descriptions */\n\n/** BootP options */\n#define DHCP_OPTION_PAD 0\n#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */\n#define DHCP_OPTION_ROUTER 3\n#define DHCP_OPTION_DNS_SERVER 6 \n#define DHCP_OPTION_HOSTNAME 12\n#define DHCP_OPTION_IP_TTL 23\n#define DHCP_OPTION_MTU 26\n#define DHCP_OPTION_BROADCAST 28\n#define DHCP_OPTION_TCP_TTL 37\n#define DHCP_OPTION_END 255\n\n/** DHCP options */\n#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */\n#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */\n#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */\n\n#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */\n#define DHCP_OPTION_MESSAGE_TYPE_LEN 1\n\n#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */\n#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */\n\n#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */\n#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2\n\n#define DHCP_OPTION_T1 58 /* T1 renewal time */\n#define DHCP_OPTION_T2 59 /* T2 rebinding time */\n#define DHCP_OPTION_US 60\n#define DHCP_OPTION_CLIENT_ID 61\n#define DHCP_OPTION_TFTP_SERVERNAME 66\n#define DHCP_OPTION_BOOTFILE 67\n\n/** possible combinations of overloading the file and sname fields with options */\n#define DHCP_OVERLOAD_NONE 0\n#define DHCP_OVERLOAD_FILE 1\n#define DHCP_OVERLOAD_SNAME  2\n#define DHCP_OVERLOAD_SNAME_FILE 3\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_DHCP */\n\n#endif /*__LWIP_DHCP_H__*/\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/dns.h",
    "content": "/**\n * lwip DNS resolver header file.\n\n * Author: Jim Pettinato \n *   April 2007\n\n * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels.\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. The name of the author may not be used to endorse or promote\n *    products derived from this software without specific prior\n *    written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS\n * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef __LWIP_DNS_H__\n#define __LWIP_DNS_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** DNS timer period */\n#define DNS_TMR_INTERVAL          1000\n\n/** DNS field TYPE used for \"Resource Records\" */\n#define DNS_RRTYPE_A              1     /* a host address */\n#define DNS_RRTYPE_NS             2     /* an authoritative name server */\n#define DNS_RRTYPE_MD             3     /* a mail destination (Obsolete - use MX) */\n#define DNS_RRTYPE_MF             4     /* a mail forwarder (Obsolete - use MX) */\n#define DNS_RRTYPE_CNAME          5     /* the canonical name for an alias */\n#define DNS_RRTYPE_SOA            6     /* marks the start of a zone of authority */\n#define DNS_RRTYPE_MB             7     /* a mailbox domain name (EXPERIMENTAL) */\n#define DNS_RRTYPE_MG             8     /* a mail group member (EXPERIMENTAL) */\n#define DNS_RRTYPE_MR             9     /* a mail rename domain name (EXPERIMENTAL) */\n#define DNS_RRTYPE_NULL           10    /* a null RR (EXPERIMENTAL) */\n#define DNS_RRTYPE_WKS            11    /* a well known service description */\n#define DNS_RRTYPE_PTR            12    /* a domain name pointer */\n#define DNS_RRTYPE_HINFO          13    /* host information */\n#define DNS_RRTYPE_MINFO          14    /* mailbox or mail list information */\n#define DNS_RRTYPE_MX             15    /* mail exchange */\n#define DNS_RRTYPE_TXT            16    /* text strings */\n\n/** DNS field CLASS used for \"Resource Records\" */\n#define DNS_RRCLASS_IN            1     /* the Internet */\n#define DNS_RRCLASS_CS            2     /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */\n#define DNS_RRCLASS_CH            3     /* the CHAOS class */\n#define DNS_RRCLASS_HS            4     /* Hesiod [Dyer 87] */\n#define DNS_RRCLASS_FLUSH         0x800 /* Flush bit */\n\n/* The size used for the next line is rather a hack, but it prevents including socket.h in all files\n   that include memp.h, and that would possibly break portability (since socket.h defines some types\n   and constants possibly already define by the OS).\n   Calculation rule:\n   sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */\n#define NETDB_ELEM_SIZE           (32 + 16 + DNS_MAX_NAME_LENGTH + 1)\n\n#if DNS_LOCAL_HOSTLIST\n/** struct used for local host-list */\nstruct local_hostlist_entry {\n  /** static hostname */\n  const char *name;\n  /** static host address in network byteorder */\n  ip_addr_t addr;\n  struct local_hostlist_entry *next;\n};\n#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC\n#ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN\n#define DNS_LOCAL_HOSTLIST_MAX_NAMELEN  DNS_MAX_NAME_LENGTH\n#endif\n#define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1))\n#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */\n#endif /* DNS_LOCAL_HOSTLIST */\n\n/** Callback which is invoked when a hostname is found.\n * A function of this type must be implemented by the application using the DNS resolver.\n * @param name pointer to the name that was looked up.\n * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname,\n *        or NULL if the name could not be found (or on any other error).\n * @param callback_arg a user-specified callback argument passed to dns_gethostbyname\n*/\ntypedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg);\n\nvoid           dns_init(void);\nvoid           dns_tmr(void);\nvoid           dns_setserver(u8_t numdns, ip_addr_t *dnsserver);\nip_addr_t      dns_getserver(u8_t numdns);\nerr_t          dns_gethostbyname(const char *hostname, ip_addr_t *addr,\n                                 dns_found_callback found, void *callback_arg);\n\n#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC\nint            dns_local_removehost(const char *hostname, const ip_addr_t *addr);\nerr_t          dns_local_addhost(const char *hostname, const ip_addr_t *addr);\n#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_DNS */\n\n#endif /* __LWIP_DNS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/err.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_ERR_H__\n#define __LWIP_ERR_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/arch.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** Define LWIP_ERR_T in cc.h if you want to use\n *  a different type for your platform (must be signed). */\n#ifdef LWIP_ERR_T\ntypedef LWIP_ERR_T err_t;\n#else /* LWIP_ERR_T */\ntypedef s8_t err_t;\n#endif /* LWIP_ERR_T*/\n\n/* Definitions for error constants. */\n\n#define ERR_OK          0    /* No error, everything OK. */\n#define ERR_MEM        -1    /* Out of memory error.     */\n#define ERR_BUF        -2    /* Buffer error.            */\n#define ERR_TIMEOUT    -3    /* Timeout.                 */\n#define ERR_RTE        -4    /* Routing problem.         */\n#define ERR_INPROGRESS -5    /* Operation in progress    */\n#define ERR_VAL        -6    /* Illegal value.           */\n#define ERR_WOULDBLOCK -7    /* Operation would block.   */\n#define ERR_USE        -8    /* Address in use.          */\n#define ERR_ISCONN     -9    /* Already connected.       */\n\n#define ERR_IS_FATAL(e) ((e) < ERR_ISCONN)\n\n#define ERR_ABRT       -10   /* Connection aborted.      */\n#define ERR_RST        -11   /* Connection reset.        */\n#define ERR_CLSD       -12   /* Connection closed.       */\n#define ERR_CONN       -13   /* Not connected.           */\n\n#define ERR_ARG        -14   /* Illegal argument.        */\n\n#define ERR_IF         -15   /* Low-level netif error    */\n\n\n#ifdef LWIP_DEBUG\nextern const char *lwip_strerr(err_t err);\n#else\n#define lwip_strerr(x) \"\"\n#endif /* LWIP_DEBUG */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_ERR_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/inet_chksum.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_INET_CHKSUM_H__\n#define __LWIP_INET_CHKSUM_H__\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n\n/** Swap the bytes in an u16_t: much like htons() for little-endian */\n#ifndef SWAP_BYTES_IN_WORD\n#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN)\n/* little endian and PLATFORM_BYTESWAP defined */\n#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w)\n#else /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) */\n/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */\n#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8)\n#endif /* LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN)*/\n#endif /* SWAP_BYTES_IN_WORD */\n\n/** Split an u32_t in two u16_ts and add them up */\n#ifndef FOLD_U32T\n#define FOLD_U32T(u)          (((u) >> 16) + ((u) & 0x0000ffffUL))\n#endif\n\n#if LWIP_CHECKSUM_ON_COPY\n/** Function-like macro: same as MEMCPY but returns the checksum of copied data\n    as u16_t */\n#ifndef LWIP_CHKSUM_COPY\n#define LWIP_CHKSUM_COPY(dst, src, len) lwip_chksum_copy(dst, src, len)\n#ifndef LWIP_CHKSUM_COPY_ALGORITHM\n#define LWIP_CHKSUM_COPY_ALGORITHM 1\n#endif /* LWIP_CHKSUM_COPY_ALGORITHM */\n#endif /* LWIP_CHKSUM_COPY */\n#else /* LWIP_CHECKSUM_ON_COPY */\n#define LWIP_CHKSUM_COPY_ALGORITHM 0\n#endif /* LWIP_CHECKSUM_ON_COPY */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nu16_t inet_chksum(void *dataptr, u16_t len);\nu16_t inet_chksum_pbuf(struct pbuf *p);\nu16_t inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,\n       ip_addr_t *src, ip_addr_t *dest);\nu16_t inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto,\n       u16_t proto_len, u16_t chksum_len, ip_addr_t *src, ip_addr_t *dest);\n#if LWIP_CHKSUM_COPY_ALGORITHM\nu16_t lwip_chksum_copy(void *dst, const void *src, u16_t len);\n#endif /* LWIP_CHKSUM_COPY_ALGORITHM */\n\n#if LWIP_IPV6\nu16_t ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len,\n       ip6_addr_t *src, ip6_addr_t *dest);\nu16_t ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len,\n       u16_t chksum_len, ip6_addr_t *src, ip6_addr_t *dest);\n\n#define ipX_chksum_pseudo(isipv6, p, proto, proto_len, src, dest) \\\n  ((isipv6) ? \\\n  ip6_chksum_pseudo(p, proto, proto_len, ipX_2_ip6(src), ipX_2_ip6(dest)) :\\\n  inet_chksum_pseudo(p, proto, proto_len, ipX_2_ip(src), ipX_2_ip(dest)))\n#define ipX_chksum_pseudo_partial(isipv6, p, proto, proto_len, chksum_len, src, dest) \\\n  ((isipv6) ? \\\n  ip6_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ipX_2_ip6(src), ipX_2_ip6(dest)) :\\\n  inet_chksum_pseudo_partial(p, proto, proto_len, chksum_len, ipX_2_ip(src), ipX_2_ip(dest)))\n\n#else /* LWIP_IPV6 */\n\n#define ipX_chksum_pseudo(isipv6, p, proto, proto_len, src, dest) \\\n  inet_chksum_pseudo(p, proto, proto_len, src, dest)\n#define ipX_chksum_pseudo_partial(isipv6, p, proto, proto_len, chksum_len, src, dest) \\\n  inet_chksum_pseudo_partial(p, proto, proto_len, chksum_len, src, dest)\n\n#endif /* LWIP_IPV6 */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_INET_H__ */\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/init.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_INIT_H__\n#define __LWIP_INIT_H__\n\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** X.x.x: Major version of the stack */\n#define LWIP_VERSION_MAJOR      1U\n/** x.X.x: Minor version of the stack */\n#define LWIP_VERSION_MINOR      4U\n/** x.x.X: Revision of the stack */\n#define LWIP_VERSION_REVISION   1U\n/** For release candidates, this is set to 1..254\n  * For official releases, this is set to 255 (LWIP_RC_RELEASE)\n  * For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */\n#define LWIP_VERSION_RC         0U\n\n/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */\n#define LWIP_RC_RELEASE         255U\n/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */\n#define LWIP_RC_DEVELOPMENT     0U\n\n#define LWIP_VERSION_IS_RELEASE     (LWIP_VERSION_RC == LWIP_RC_RELEASE)\n#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT)\n#define LWIP_VERSION_IS_RC          ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT))\n\n/** Provides the version of the stack */\n#define LWIP_VERSION   (LWIP_VERSION_MAJOR << 24   | LWIP_VERSION_MINOR << 16 | \\\n                        LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC)\n\n/* Modules initialization */\nvoid lwip_init(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_INIT_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/ip.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_IP_H__\n#define __LWIP_IP_H__\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/def.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/err.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/ip4.h\"\n#include \"lwip/ip6.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* This is passed as the destination address to ip_output_if (not\n   to ip_output), meaning that an IP header already is constructed\n   in the pbuf. This is used when TCP retransmits. */\n#ifdef IP_HDRINCL\n#undef IP_HDRINCL\n#endif /* IP_HDRINCL */\n#define IP_HDRINCL  NULL\n\n#if LWIP_NETIF_HWADDRHINT\n#define IP_PCB_ADDRHINT ;u8_t addr_hint\n#else\n#define IP_PCB_ADDRHINT\n#endif /* LWIP_NETIF_HWADDRHINT */\n\n#if LWIP_IPV6\n#define IP_PCB_ISIPV6_MEMBER  u8_t isipv6;\n#define IP_PCB_IPVER_EQ(pcb1, pcb2)   ((pcb1)->isipv6 == (pcb2)->isipv6)\n#define IP_PCB_IPVER_INPUT_MATCH(pcb) (ip_current_is_v6() ? \\\n                                       ((pcb)->isipv6 != 0) : \\\n                                       ((pcb)->isipv6 == 0))\n#define PCB_ISIPV6(pcb) ((pcb)->isipv6)\n#else\n#define IP_PCB_ISIPV6_MEMBER\n#define IP_PCB_IPVER_EQ(pcb1, pcb2)   1\n#define IP_PCB_IPVER_INPUT_MATCH(pcb) 1\n#define PCB_ISIPV6(pcb)            0\n#endif /* LWIP_IPV6 */\n\n/* This is the common part of all PCB types. It needs to be at the\n   beginning of a PCB type definition. It is located here so that\n   changes to this common part are made in one location instead of\n   having to change all PCB structs. */\n#define IP_PCB \\\n  IP_PCB_ISIPV6_MEMBER \\\n  /* ip addresses in network byte order */ \\\n  ipX_addr_t local_ip; \\\n  ipX_addr_t remote_ip; \\\n   /* Socket options */  \\\n  u8_t so_options;      \\\n   /* Type Of Service */ \\\n  u8_t tos;              \\\n  /* Time To Live */     \\\n  u8_t ttl               \\\n  /* link layer address resolution hint */ \\\n  IP_PCB_ADDRHINT\n\nstruct ip_pcb {\n/* Common members of all PCB types */\n  IP_PCB;\n};\n\n/*\n * Option flags per-socket. These are the same like SO_XXX.\n */\n/*#define SOF_DEBUG       0x01U     Unimplemented: turn on debugging info recording */\n#define SOF_ACCEPTCONN    0x02U  /* socket has had listen() */\n#define SOF_REUSEADDR     0x04U  /* allow local address reuse */\n#define SOF_KEEPALIVE     0x08U  /* keep connections alive */\n/*#define SOF_DONTROUTE   0x10U     Unimplemented: just use interface addresses */\n#define SOF_BROADCAST     0x20U  /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */\n/*#define SOF_USELOOPBACK 0x40U     Unimplemented: bypass hardware when possible */\n#define SOF_LINGER        0x80U  /* linger on close if data present */\n/*#define SOF_OOBINLINE   0x0100U     Unimplemented: leave received OOB data in line */\n/*#define SOF_REUSEPORT   0x0200U     Unimplemented: allow local address & port reuse */\n\n/* These flags are inherited (e.g. from a listen-pcb to a connection-pcb): */\n#define SOF_INHERITED   (SOF_REUSEADDR|SOF_KEEPALIVE|SOF_LINGER/*|SOF_DEBUG|SOF_DONTROUTE|SOF_OOBINLINE*/)\n\n/* Global variables of this module, kept in a struct for efficient access using base+index. */\nstruct ip_globals\n{\n  /** The interface that provided the packet for the current callback invocation. */\n  struct netif *current_netif;\n  /** Header of the input packet currently being processed. */\n  const struct ip_hdr *current_ip4_header;\n#if LWIP_IPV6\n  /** Header of the input IPv6 packet currently being processed. */\n  const struct ip6_hdr *current_ip6_header;\n#endif /* LWIP_IPV6 */\n  /** Total header length of current_ip4/6_header (i.e. after this, the UDP/TCP header starts) */\n  u16_t current_ip_header_tot_len;\n  /** Source IP address of current_header */\n  ipX_addr_t current_iphdr_src;\n  /** Destination IP address of current_header */\n  ipX_addr_t current_iphdr_dest;\n};\nextern struct ip_globals ip_data;\n\n\n/** Get the interface that received the current packet.\n * This function must only be called from a receive callback (udp_recv,\n * raw_recv, tcp_accept). It will return NULL otherwise. */\n#define ip_current_netif()      (ip_data.current_netif)\n/** Get the IP header of the current packet.\n * This function must only be called from a receive callback (udp_recv,\n * raw_recv, tcp_accept). It will return NULL otherwise. */\n#define ip_current_header()     (ip_data.current_ip4_header)\n/** Total header length of ip(6)_current_header() (i.e. after this, the UDP/TCP header starts) */\n#define ip_current_header_tot_len() (ip_data.current_ip_header_tot_len)\n/** Source IP address of current_header */\n#define ipX_current_src_addr()   (&ip_data.current_iphdr_src)\n/** Destination IP address of current_header */\n#define ipX_current_dest_addr()  (&ip_data.current_iphdr_dest)\n\n#if LWIP_IPV6\n/** Get the IPv6 header of the current packet.\n * This function must only be called from a receive callback (udp_recv,\n * raw_recv, tcp_accept). It will return NULL otherwise. */\n#define ip6_current_header()      (ip_data.current_ip6_header)\n/** Returns TRUE if the current IP input packet is IPv6, FALSE if it is IPv4 */\n#define ip_current_is_v6()        (ip6_current_header() != NULL)\n/** Source IPv6 address of current_header */\n#define ip6_current_src_addr()    (ipX_2_ip6(&ip_data.current_iphdr_src))\n/** Destination IPv6 address of current_header */\n#define ip6_current_dest_addr()   (ipX_2_ip6(&ip_data.current_iphdr_dest))\n/** Get the transport layer protocol */\n#define ip_current_header_proto() (ip_current_is_v6() ? \\\n                                   IP6H_NEXTH(ip6_current_header()) :\\\n                                   IPH_PROTO(ip_current_header()))\n/** Get the transport layer header */\n#define ipX_next_header_ptr()     ((void*)((ip_current_is_v6() ? \\\n  (u8_t*)ip6_current_header() : (u8_t*)ip_current_header())  + ip_current_header_tot_len()))\n\n/** Set an IP_PCB to IPv6 (IPv4 is the default) */\n#define ip_set_v6(pcb, val)       do{if(pcb != NULL) { pcb->isipv6 = val; }}while(0)\n\n/** Source IP4 address of current_header */\n#define ip_current_src_addr()     (ipX_2_ip(&ip_data.current_iphdr_src))\n/** Destination IP4 address of current_header */\n#define ip_current_dest_addr()    (ipX_2_ip(&ip_data.current_iphdr_dest))\n\n#else /* LWIP_IPV6 */\n\n/** Always returns FALSE when only supporting IPv4 */\n#define ip_current_is_v6()        0\n/** Get the transport layer protocol */\n#define ip_current_header_proto() IPH_PROTO(ip_current_header())\n/** Get the transport layer header */\n#define ipX_next_header_ptr()     ((void*)((u8_t*)ip_current_header() + ip_current_header_tot_len()))\n/** Source IP4 address of current_header */\n#define ip_current_src_addr()     (&ip_data.current_iphdr_src)\n/** Destination IP4 address of current_header */\n#define ip_current_dest_addr()    (&ip_data.current_iphdr_dest)\n\n#endif /* LWIP_IPV6 */\n\n/** Union source address of current_header */\n#define ipX_current_src_addr()    (&ip_data.current_iphdr_src)\n/** Union destination address of current_header */\n#define ipX_current_dest_addr()   (&ip_data.current_iphdr_dest)\n\n/** Gets an IP pcb option (SOF_* flags) */\n#define ip_get_option(pcb, opt)   ((pcb)->so_options & (opt))\n/** Sets an IP pcb option (SOF_* flags) */\n#define ip_set_option(pcb, opt)   ((pcb)->so_options |= (opt))\n/** Resets an IP pcb option (SOF_* flags) */\n#define ip_reset_option(pcb, opt) ((pcb)->so_options &= ~(opt))\n\n#if LWIP_IPV6\n#define ipX_output(isipv6, p, src, dest, ttl, tos, proto) \\\n        ((isipv6) ? \\\n        ip6_output(p, ipX_2_ip6(src), ipX_2_ip6(dest), ttl, tos, proto) : \\\n        ip_output(p, ipX_2_ip(src), ipX_2_ip(dest), ttl, tos, proto))\n#define ipX_output_if(isipv6, p, src, dest, ttl, tos, proto, netif) \\\n        ((isipv6) ? \\\n        ip6_output_if(p, ip_2_ip6(src), ip_2_ip6(dest), ttl, tos, proto, netif) : \\\n        ip_output_if(p, (src), (dest), ttl, tos, proto, netif))\n#define ipX_output_hinted(isipv6, p, src, dest, ttl, tos, proto, addr_hint) \\\n        ((isipv6) ? \\\n        ip6_output_hinted(p, ipX_2_ip6(src), ipX_2_ip6(dest), ttl, tos, proto, addr_hint) : \\\n        ip_output_hinted(p, ipX_2_ip(src), ipX_2_ip(dest), ttl, tos, proto, addr_hint))\n#define ipX_route(isipv6, src, dest) \\\n        ((isipv6) ? \\\n        ip6_route(ipX_2_ip6(src), ipX_2_ip6(dest)) : \\\n        ip_route(ipX_2_ip(dest)))\n#define ipX_netif_get_local_ipX(isipv6, netif, dest) \\\n        ((isipv6) ? \\\n        ip6_netif_get_local_ipX(netif, ipX_2_ip6(dest)) : \\\n        ip_netif_get_local_ipX(netif))\n#define ipX_debug_print(is_ipv6, p) ((is_ipv6) ? ip6_debug_print(p) : ip_debug_print(p))\n#else /* LWIP_IPV6 */\n#define ipX_output(isipv6, p, src, dest, ttl, tos, proto) \\\n        ip_output(p, src, dest, ttl, tos, proto)\n#define ipX_output_if(isipv6, p, src, dest, ttl, tos, proto, netif) \\\n        ip_output_if(p, src, dest, ttl, tos, proto, netif)\n#define ipX_output_hinted(isipv6, p, src, dest, ttl, tos, proto, addr_hint) \\\n        ip_output_hinted(p, src, dest, ttl, tos, proto, addr_hint)\n#define ipX_route(isipv6, src, dest) \\\n        ip_route(ipX_2_ip(dest))\n#define ipX_netif_get_local_ipX(isipv6, netif, dest) \\\n        ip_netif_get_local_ipX(netif)\n#define ipX_debug_print(is_ipv6, p) ip_debug_print(p)\n#endif /* LWIP_IPV6 */\n\n#define ipX_route_get_local_ipX(isipv6, src, dest, netif, ipXaddr) do { \\\n  (netif) = ipX_route(isipv6, src, dest); \\\n  (ipXaddr) = ipX_netif_get_local_ipX(isipv6, netif, dest); \\\n}while(0)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP_H__ */\n\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/ip_addr.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_IP_ADDR_H__\n#define __LWIP_IP_ADDR_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/def.h\"\n\n#include \"lwip/ip4_addr.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if LWIP_IPV6\n/* A union struct for both IP version's addresses. */\ntypedef union {\n  ip_addr_t ip4;\n  ip6_addr_t ip6;\n} ipX_addr_t;\n\n/** These functions only exist for type-safe conversion from ip_addr_t to\n    ip6_addr_t and back */\n#ifdef LWIP_ALLOW_STATIC_FN_IN_HEADER\nstatic ip6_addr_t* ip_2_ip6(ip_addr_t *ipaddr)\n{ return (ip6_addr_t*)ipaddr;}\nstatic ip_addr_t* ip6_2_ip(ip6_addr_t *ip6addr)\n{ return (ip_addr_t*)ip6addr; }\nstatic ipX_addr_t* ip_2_ipX(ip_addr_t *ipaddr)\n{ return (ipX_addr_t*)ipaddr; }\nstatic ipX_addr_t* ip6_2_ipX(ip6_addr_t *ip6addr)\n{ return (ipX_addr_t*)ip6addr; }\n#else /* LWIP_ALLOW_STATIC_FN_IN_HEADER */\n#define ip_2_ip6(ipaddr)   ((ip6_addr_t*)(ipaddr))\n#define ip6_2_ip(ip6addr)  ((ip_addr_t*)(ip6addr))\n#define ip_2_ipX(ipaddr)   ((ipX_addr_t*)ipaddr)\n#define ip6_2_ipX(ip6addr) ((ipX_addr_t*)ip6addr)\n#endif /* LWIP_ALLOW_STATIC_FN_IN_HEADER*/\n#define ipX_2_ip6(ip6addr) (&((ip6addr)->ip6))\n#define ipX_2_ip(ipaddr)   (&((ipaddr)->ip4))\n\n#define ipX_addr_copy(is_ipv6, dest, src)      do{if(is_ipv6){ \\\n  ip6_addr_copy((dest).ip6, (src).ip6); }else{ \\\n  ip_addr_copy((dest).ip4, (src).ip4); }}while(0)\n#define ipX_addr_set(is_ipv6, dest, src) do{if(is_ipv6){ \\\n  ip6_addr_set(ipX_2_ip6(dest), ipX_2_ip6(src)); }else{ \\\n  ip_addr_set(ipX_2_ip(dest), ipX_2_ip(src)); }}while(0)\n#define ipX_addr_set_ipaddr(is_ipv6, dest, src) do{if(is_ipv6){ \\\n  ip6_addr_set(ipX_2_ip6(dest), ip_2_ip6(src)); }else{ \\\n  ip_addr_set(ipX_2_ip(dest), src); }}while(0)\n#define ipX_addr_set_zero(is_ipv6, ipaddr)     do{if(is_ipv6){ \\\n  ip6_addr_set_zero(ipX_2_ip6(ipaddr)); }else{ \\\n  ip_addr_set_zero(ipX_2_ip(ipaddr)); }}while(0)\n#define ipX_addr_set_any(is_ipv6, ipaddr)      do{if(is_ipv6){ \\\n  ip6_addr_set_any(ipX_2_ip6(ipaddr)); }else{ \\\n  ip_addr_set_any(ipX_2_ip(ipaddr)); }}while(0)\n#define ipX_addr_set_loopback(is_ipv6, ipaddr) do{if(is_ipv6){ \\\n  ip6_addr_set_loopback(ipX_2_ip6(ipaddr)); }else{ \\\n  ip_addr_set_loopback(ipX_2_ip(ipaddr)); }}while(0)\n#define ipX_addr_set_hton(is_ipv6, dest, src)  do{if(is_ipv6){ \\\n  ip6_addr_set_hton(ipX_2_ip6(ipaddr), (src)) ;}else{ \\\n  ip_addr_set_hton(ipX_2_ip(ipaddr), (src));}}while(0)\n#define ipX_addr_cmp(is_ipv6, addr1, addr2)    ((is_ipv6) ? \\\n  ip6_addr_cmp(ipX_2_ip6(addr1), ipX_2_ip6(addr2)) : \\\n  ip_addr_cmp(ipX_2_ip(addr1), ipX_2_ip(addr2)))\n#define ipX_addr_isany(is_ipv6, ipaddr)        ((is_ipv6) ? \\\n  ip6_addr_isany(ipX_2_ip6(ipaddr)) : \\\n  ip_addr_isany(ipX_2_ip(ipaddr)))\n#define ipX_addr_ismulticast(is_ipv6, ipaddr)  ((is_ipv6) ? \\\n  ip6_addr_ismulticast(ipX_2_ip6(ipaddr)) : \\\n  ip_addr_ismulticast(ipX_2_ip(ipaddr)))\n#define ipX_addr_debug_print(is_ipv6, debug, ipaddr) do { if(is_ipv6) { \\\n  ip6_addr_debug_print(debug, ipX_2_ip6(ipaddr)); } else { \\\n  ip_addr_debug_print(debug, ipX_2_ip(ipaddr)); }}while(0)\n\n#else /* LWIP_IPV6 */\n\ntypedef ip_addr_t ipX_addr_t;\n#define ipX_2_ip(ipaddr) (ipaddr)\n#define ip_2_ipX(ipaddr) (ipaddr)\n\n#define ipX_addr_copy(is_ipv6, dest, src)       ip_addr_copy(dest, src)\n#define ipX_addr_set(is_ipv6, dest, src)        ip_addr_set(dest, src)\n#define ipX_addr_set_ipaddr(is_ipv6, dest, src) ip_addr_set(dest, src)\n#define ipX_addr_set_zero(is_ipv6, ipaddr)      ip_addr_set_zero(ipaddr)\n#define ipX_addr_set_any(is_ipv6, ipaddr)       ip_addr_set_any(ipaddr)\n#define ipX_addr_set_loopback(is_ipv6, ipaddr)  ip_addr_set_loopback(ipaddr)\n#define ipX_addr_set_hton(is_ipv6, dest, src)   ip_addr_set_hton(dest, src)\n#define ipX_addr_cmp(is_ipv6, addr1, addr2)     ip_addr_cmp(addr1, addr2)\n#define ipX_addr_isany(is_ipv6, ipaddr)         ip_addr_isany(ipaddr)\n#define ipX_addr_ismulticast(is_ipv6, ipaddr)   ip_addr_ismulticast(ipaddr)\n#define ipX_addr_debug_print(is_ipv6, debug, ipaddr) ip_addr_debug_print(debug, ipaddr)\n\n#endif /* LWIP_IPV6 */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_IP_ADDR_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/mem.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_MEM_H__\n#define __LWIP_MEM_H__\n\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if MEM_LIBC_MALLOC\n\n#include <stddef.h> /* for size_t */\n\ntypedef size_t mem_size_t;\n#define MEM_SIZE_F SZT_F\n\n/* aliases for C library malloc() */\n#define mem_init()\n/* in case C library malloc() needs extra protection,\n * allow these defines to be overridden.\n */\n#ifndef mem_free\n#define mem_free(mem) do {free(mem); (mem)=NULL;} while (0);\n#endif\n#ifndef mem_malloc\n#define mem_malloc malloc\n#endif\n#ifndef mem_calloc\n#define mem_calloc calloc\n#endif\n/* Since there is no C library allocation function to shrink memory without\n   moving it, define this to nothing. */\n#ifndef mem_trim\n#define mem_trim(mem, size) (mem)\n#endif\n#else /* MEM_LIBC_MALLOC */\n\n/* MEM_SIZE would have to be aligned, but using 64000 here instead of\n * 65535 leaves some room for alignment...\n */\n#if MEM_SIZE > 64000L\ntypedef u32_t mem_size_t;\n#define MEM_SIZE_F U32_F\n#else\ntypedef u16_t mem_size_t;\n#define MEM_SIZE_F U16_F\n#endif /* MEM_SIZE > 64000 */\n\n#if MEM_USE_POOLS\n/** mem_init is not used when using pools instead of a heap */\n#define mem_init()\n/** mem_trim is not used when using pools instead of a heap:\n    we can't free part of a pool element and don't want to copy the rest */\n#define mem_trim(mem, size) (mem)\n#else /* MEM_USE_POOLS */\n/* lwIP alternative malloc */\nvoid  mem_init(void);\nvoid *mem_trim(void *mem, mem_size_t size);\n#endif /* MEM_USE_POOLS */\nvoid *mem_malloc(mem_size_t size);\nvoid *mem_calloc(mem_size_t count, mem_size_t size);\nvoid  mem_free(void *mem);\n#endif /* MEM_LIBC_MALLOC */\n\n/** Calculate memory size for an aligned buffer - returns the next highest\n * multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and\n * LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4).\n */\n#ifndef LWIP_MEM_ALIGN_SIZE\n#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))\n#endif\n\n/** Calculate safe memory size for an aligned buffer when using an unaligned\n * type as storage. This includes a safety-margin on (MEM_ALIGNMENT - 1) at the\n * start (e.g. if buffer is u8_t[] and actual data will be u32_t*)\n */\n#ifndef LWIP_MEM_ALIGN_BUFFER\n#define LWIP_MEM_ALIGN_BUFFER(size) (((size) + MEM_ALIGNMENT - 1))\n#endif\n\n/** Align a memory pointer to the alignment defined by MEM_ALIGNMENT\n * so that ADDR % MEM_ALIGNMENT == 0\n */\n#ifndef LWIP_MEM_ALIGN\n#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1)))\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_MEM_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/memp.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#ifndef __LWIP_MEMP_H__\n#define __LWIP_MEMP_H__\n\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */\ntypedef enum {\n#define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name,\n#include \"lwip/memp_std.h\"\n  MEMP_MAX\n} memp_t;\n\n#if MEM_USE_POOLS\n/* Use a helper type to get the start and end of the user \"memory pools\" for mem_malloc */\ntypedef enum {\n    /* Get the first (via:\n       MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/\n    MEMP_POOL_HELPER_FIRST = ((u8_t)\n#define LWIP_MEMPOOL(name,num,size,desc)\n#define LWIP_MALLOC_MEMPOOL_START 1\n#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0\n#define LWIP_MALLOC_MEMPOOL_END\n#include \"lwip/memp_std.h\"\n    ) ,\n    /* Get the last (via:\n       MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */\n    MEMP_POOL_HELPER_LAST = ((u8_t)\n#define LWIP_MEMPOOL(name,num,size,desc)\n#define LWIP_MALLOC_MEMPOOL_START\n#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size *\n#define LWIP_MALLOC_MEMPOOL_END 1\n#include \"lwip/memp_std.h\"\n    )\n} memp_pool_helper_t;\n\n/* The actual start and stop values are here (cast them over)\n   We use this helper type and these defines so we can avoid using const memp_t values */\n#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST)\n#define MEMP_POOL_LAST   ((memp_t) MEMP_POOL_HELPER_LAST)\n#endif /* MEM_USE_POOLS */\n\n#if MEMP_MEM_MALLOC || MEM_USE_POOLS\nextern const u16_t memp_sizes[MEMP_MAX];\n#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */\n\n#if MEMP_MEM_MALLOC\n\n#include \"mem.h\"\n\n#define memp_init()\n#define memp_malloc(type)     mem_malloc(memp_sizes[type])\n#define memp_free(type, mem)  mem_free(mem)\n\n#else /* MEMP_MEM_MALLOC */\n\n#if MEM_USE_POOLS\n/** This structure is used to save the pool one element came from. */\nstruct memp_malloc_helper\n{\n   memp_t poolnr;\n};\n#endif /* MEM_USE_POOLS */\n\nvoid  memp_init(void);\n\n#if MEMP_OVERFLOW_CHECK\nvoid *memp_malloc_fn(memp_t type, const char* file, const int line);\n#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__)\n#else\nvoid *memp_malloc(memp_t type);\n#endif\nvoid  memp_free(memp_t type, void *mem);\n\n#endif /* MEMP_MEM_MALLOC */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_MEMP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/memp_std.h",
    "content": "/*\n * SETUP: Make sure we define everything we will need.\n *\n * We have create three types of pools:\n *   1) MEMPOOL - standard pools\n *   2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c\n *   3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct\n *\n * If the include'r doesn't require any special treatment of each of the types\n * above, then will declare #2 & #3 to be just standard mempools.\n */\n#ifndef LWIP_MALLOC_MEMPOOL\n/* This treats \"malloc pools\" just like any other pool.\n   The pools are a little bigger to provide 'size' as the amount of user data. */\n#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), \"MALLOC_\"#size)\n#define LWIP_MALLOC_MEMPOOL_START\n#define LWIP_MALLOC_MEMPOOL_END\n#endif /* LWIP_MALLOC_MEMPOOL */ \n\n#ifndef LWIP_PBUF_MEMPOOL\n/* This treats \"pbuf pools\" just like any other pool.\n * Allocates buffers for a pbuf struct AND a payload size */\n#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc)\n#endif /* LWIP_PBUF_MEMPOOL */\n\n\n/*\n * A list of internal pools used by LWIP.\n *\n * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description)\n *     creates a pool name MEMP_pool_name. description is used in stats.c\n */\n#if LWIP_RAW\nLWIP_MEMPOOL(RAW_PCB,        MEMP_NUM_RAW_PCB,         sizeof(struct raw_pcb),        \"RAW_PCB\")\n#endif /* LWIP_RAW */\n\n#if LWIP_UDP\nLWIP_MEMPOOL(UDP_PCB,        MEMP_NUM_UDP_PCB,         sizeof(struct udp_pcb),        \"UDP_PCB\")\n#endif /* LWIP_UDP */\n\n#if LWIP_TCP\nLWIP_MEMPOOL(TCP_PCB,        MEMP_NUM_TCP_PCB,         sizeof(struct tcp_pcb),        \"TCP_PCB\")\nLWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN,  sizeof(struct tcp_pcb_listen), \"TCP_PCB_LISTEN\")\nLWIP_MEMPOOL(TCP_SEG,        MEMP_NUM_TCP_SEG,         sizeof(struct tcp_seg),        \"TCP_SEG\")\n#endif /* LWIP_TCP */\n\n#if IP_REASSEMBLY\nLWIP_MEMPOOL(REASSDATA,      MEMP_NUM_REASSDATA,       sizeof(struct ip_reassdata),   \"REASSDATA\")\n#endif /* IP_REASSEMBLY */\n#if (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF) || LWIP_IPV6_FRAG\nLWIP_MEMPOOL(FRAG_PBUF,      MEMP_NUM_FRAG_PBUF,       sizeof(struct pbuf_custom_ref),\"FRAG_PBUF\")\n#endif /* IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF */\n\n#if LWIP_NETCONN\nLWIP_MEMPOOL(NETBUF,         MEMP_NUM_NETBUF,          sizeof(struct netbuf),         \"NETBUF\")\nLWIP_MEMPOOL(NETCONN,        MEMP_NUM_NETCONN,         sizeof(struct netconn),        \"NETCONN\")\n#endif /* LWIP_NETCONN */\n\n#if NO_SYS==0\nLWIP_MEMPOOL(TCPIP_MSG_API,  MEMP_NUM_TCPIP_MSG_API,   sizeof(struct tcpip_msg),      \"TCPIP_MSG_API\")\n#if !LWIP_TCPIP_CORE_LOCKING_INPUT\nLWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg),      \"TCPIP_MSG_INPKT\")\n#endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */\n#endif /* NO_SYS==0 */\n\n#if LWIP_ARP && ARP_QUEUEING\nLWIP_MEMPOOL(ARP_QUEUE,      MEMP_NUM_ARP_QUEUE,       sizeof(struct etharp_q_entry), \"ARP_QUEUE\")\n#endif /* LWIP_ARP && ARP_QUEUEING */\n\n#if LWIP_IGMP\nLWIP_MEMPOOL(IGMP_GROUP,     MEMP_NUM_IGMP_GROUP,      sizeof(struct igmp_group),     \"IGMP_GROUP\")\n#endif /* LWIP_IGMP */\n\n#if (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS)) /* LWIP_TIMERS */\nLWIP_MEMPOOL(SYS_TIMEOUT,    MEMP_NUM_SYS_TIMEOUT,     sizeof(struct sys_timeo),      \"SYS_TIMEOUT\")\n#endif /* LWIP_TIMERS */\n\n#if LWIP_SNMP\nLWIP_MEMPOOL(SNMP_ROOTNODE,  MEMP_NUM_SNMP_ROOTNODE,   sizeof(struct mib_list_rootnode), \"SNMP_ROOTNODE\")\nLWIP_MEMPOOL(SNMP_NODE,      MEMP_NUM_SNMP_NODE,       sizeof(struct mib_list_node),     \"SNMP_NODE\")\nLWIP_MEMPOOL(SNMP_VARBIND,   MEMP_NUM_SNMP_VARBIND,    sizeof(struct snmp_varbind),      \"SNMP_VARBIND\")\nLWIP_MEMPOOL(SNMP_VALUE,     MEMP_NUM_SNMP_VALUE,      SNMP_MAX_VALUE_SIZE,              \"SNMP_VALUE\")\n#endif /* LWIP_SNMP */\n#if LWIP_DNS && LWIP_SOCKET\nLWIP_MEMPOOL(NETDB,          MEMP_NUM_NETDB,           NETDB_ELEM_SIZE,               \"NETDB\")\n#endif /* LWIP_DNS && LWIP_SOCKET */\n#if LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC\nLWIP_MEMPOOL(LOCALHOSTLIST,  MEMP_NUM_LOCALHOSTLIST,   LOCALHOSTLIST_ELEM_SIZE,       \"LOCALHOSTLIST\")\n#endif /* LWIP_DNS && DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */\n#if PPP_SUPPORT && PPPOE_SUPPORT\nLWIP_MEMPOOL(PPPOE_IF,      MEMP_NUM_PPPOE_INTERFACES, sizeof(struct pppoe_softc),    \"PPPOE_IF\")\n#endif /* PPP_SUPPORT && PPPOE_SUPPORT */\n\n#if LWIP_IPV6 && LWIP_ND6_QUEUEING\nLWIP_MEMPOOL(ND6_QUEUE,      MEMP_NUM_ND6_QUEUE,       sizeof(struct nd6_q_entry), \"ND6_QUEUE\")\n#endif /* LWIP_IPV6 && LWIP_ND6_QUEUEING */\n\n#if LWIP_IPV6 && LWIP_IPV6_REASS\nLWIP_MEMPOOL(IP6_REASSDATA,      MEMP_NUM_REASSDATA,       sizeof(struct ip6_reassdata),   \"IP6_REASSDATA\")\n#endif /* LWIP_IPV6 && LWIP_IPV6_REASS */\n\n#if LWIP_IPV6 && LWIP_IPV6_MLD\nLWIP_MEMPOOL(MLD6_GROUP,     MEMP_NUM_MLD6_GROUP,      sizeof(struct mld_group),     \"MLD6_GROUP\")\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n\n\n/*\n * A list of pools of pbuf's used by LWIP.\n *\n * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description)\n *     creates a pool name MEMP_pool_name. description is used in stats.c\n *     This allocates enough space for the pbuf struct and a payload.\n *     (Example: pbuf_payload_size=0 allocates only size for the struct)\n */\nLWIP_PBUF_MEMPOOL(PBUF,      MEMP_NUM_PBUF,            0,                             \"PBUF_REF/ROM\")\nLWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE,           PBUF_POOL_BUFSIZE,             \"PBUF_POOL\")\n\n\n/*\n * Allow for user-defined pools; this must be explicitly set in lwipopts.h\n * since the default is to NOT look for lwippools.h\n */\n#if MEMP_USE_CUSTOM_POOLS\n#include \"lwippools.h\"\n#endif /* MEMP_USE_CUSTOM_POOLS */\n\n/*\n * REQUIRED CLEANUP: Clear up so we don't get \"multiply defined\" error later\n * (#undef is ignored for something that is not defined)\n */\n#undef LWIP_MEMPOOL\n#undef LWIP_MALLOC_MEMPOOL\n#undef LWIP_MALLOC_MEMPOOL_START\n#undef LWIP_MALLOC_MEMPOOL_END\n#undef LWIP_PBUF_MEMPOOL\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/netbuf.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_NETBUF_H__\n#define __LWIP_NETBUF_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** This netbuf has dest-addr/port set */\n#define NETBUF_FLAG_DESTADDR    0x01\n/** This netbuf includes a checksum */\n#define NETBUF_FLAG_CHKSUM      0x02\n\nstruct netbuf {\n  struct pbuf *p, *ptr;\n  ipX_addr_t addr;\n  u16_t port;\n#if LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY\n#if LWIP_CHECKSUM_ON_COPY\n  u8_t flags;\n#endif /* LWIP_CHECKSUM_ON_COPY */\n  u16_t toport_chksum;\n#if LWIP_NETBUF_RECVINFO\n  ipX_addr_t toaddr;\n#endif /* LWIP_NETBUF_RECVINFO */\n#endif /* LWIP_NETBUF_RECVINFO || LWIP_CHECKSUM_ON_COPY */\n};\n\n/* Network buffer functions: */\nstruct netbuf *   netbuf_new      (void);\nvoid              netbuf_delete   (struct netbuf *buf);\nvoid *            netbuf_alloc    (struct netbuf *buf, u16_t size);\nvoid              netbuf_free     (struct netbuf *buf);\nerr_t             netbuf_ref      (struct netbuf *buf,\n                                   const void *dataptr, u16_t size);\nvoid              netbuf_chain    (struct netbuf *head,\n           struct netbuf *tail);\n\nerr_t             netbuf_data     (struct netbuf *buf,\n                                   void **dataptr, u16_t *len);\ns8_t              netbuf_next     (struct netbuf *buf);\nvoid              netbuf_first    (struct netbuf *buf);\n\n\n#define netbuf_copy_partial(buf, dataptr, len, offset) \\\n  pbuf_copy_partial((buf)->p, (dataptr), (len), (offset))\n#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0)\n#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len)\n#define netbuf_len(buf)              ((buf)->p->tot_len)\n#define netbuf_fromaddr(buf)         (ipX_2_ip(&((buf)->addr)))\n#define netbuf_set_fromaddr(buf, fromaddr) ip_addr_set(ipX_2_ip(&((buf)->addr)), fromaddr)\n#define netbuf_fromport(buf)         ((buf)->port)\n#if LWIP_NETBUF_RECVINFO\n#define netbuf_destaddr(buf)         (ipX_2_ip(&((buf)->toaddr)))\n#define netbuf_set_destaddr(buf, destaddr) ip_addr_set(ipX_2_ip(&((buf)->toaddr)), destaddr)\n#define netbuf_destport(buf)         (((buf)->flags & NETBUF_FLAG_DESTADDR) ? (buf)->toport_chksum : 0)\n#endif /* LWIP_NETBUF_RECVINFO */\n#if LWIP_CHECKSUM_ON_COPY\n#define netbuf_set_chksum(buf, chksum) do { (buf)->flags = NETBUF_FLAG_CHKSUM; \\\n                                            (buf)->toport_chksum = chksum; } while(0)\n#endif /* LWIP_CHECKSUM_ON_COPY */\n\n#if LWIP_IPV6\n#define netbuf_fromaddr_ip6(buf)         (ipX_2_ip6(&((buf)->addr)))\n#define netbuf_set_fromaddr_ip6(buf, fromaddr) ip6_addr_set(ipX_2_ip6(&((buf)->addr)), fromaddr)\n#define netbuf_destaddr_ip6(buf)         (ipX_2_ip6(&((buf)->toaddr)))\n#define netbuf_set_destaddr_ip6(buf, destaddr) ip6_addr_set(ipX_2_ip6(&((buf)->toaddr)), destaddr)\n#endif /* LWIP_IPV6 */\n\n#define netbuf_fromaddr_ipX(buf)         (&((buf)->addr))\n#define netbuf_destaddr_ipX(buf)         (&((buf)->toaddr))\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_NETBUF_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/netdb.h",
    "content": "/*\n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Simon Goldschmidt\n *\n */\n#ifndef __LWIP_NETDB_H__\n#define __LWIP_NETDB_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_DNS && LWIP_SOCKET\n\n#include <stddef.h> /* for size_t */\n\n#include \"lwip/inet.h\"\n#include \"lwip/sockets.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* some rarely used options */\n#ifndef LWIP_DNS_API_DECLARE_H_ERRNO\n#define LWIP_DNS_API_DECLARE_H_ERRNO 1\n#endif\n\n#ifndef LWIP_DNS_API_DEFINE_ERRORS\n#define LWIP_DNS_API_DEFINE_ERRORS 1\n#endif\n\n#ifndef LWIP_DNS_API_DECLARE_STRUCTS\n#define LWIP_DNS_API_DECLARE_STRUCTS 1\n#endif\n\n#if LWIP_DNS_API_DEFINE_ERRORS\n/** Errors used by the DNS API functions, h_errno can be one of them */\n#define EAI_NONAME      200\n#define EAI_SERVICE     201\n#define EAI_FAIL        202\n#define EAI_MEMORY      203\n\n#define HOST_NOT_FOUND  210\n#define NO_DATA         211\n#define NO_RECOVERY     212\n#define TRY_AGAIN       213\n#endif /* LWIP_DNS_API_DEFINE_ERRORS */\n\n#if LWIP_DNS_API_DECLARE_STRUCTS\nstruct hostent {\n    char  *h_name;      /* Official name of the host. */\n    char **h_aliases;   /* A pointer to an array of pointers to alternative host names,\n                           terminated by a null pointer. */\n    int    h_addrtype;  /* Address type. */\n    int    h_length;    /* The length, in bytes, of the address. */\n    char **h_addr_list; /* A pointer to an array of pointers to network addresses (in\n                           network byte order) for the host, terminated by a null pointer. */\n#define h_addr h_addr_list[0] /* for backward compatibility */\n};\n\nstruct addrinfo {\n    int               ai_flags;      /* Input flags. */\n    int               ai_family;     /* Address family of socket. */\n    int               ai_socktype;   /* Socket type. */\n    int               ai_protocol;   /* Protocol of socket. */\n    socklen_t         ai_addrlen;    /* Length of socket address. */\n    struct sockaddr  *ai_addr;       /* Socket address of socket. */\n    char             *ai_canonname;  /* Canonical name of service location. */\n    struct addrinfo  *ai_next;       /* Pointer to next in list. */\n};\n#endif /* LWIP_DNS_API_DECLARE_STRUCTS */\n\n#if LWIP_DNS_API_DECLARE_H_ERRNO\n/* application accessable error code set by the DNS API functions */\nextern int h_errno;\n#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/\n\nstruct hostent *lwip_gethostbyname(const char *name);\nint lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf,\n                size_t buflen, struct hostent **result, int *h_errnop);\nvoid lwip_freeaddrinfo(struct addrinfo *ai);\nint lwip_getaddrinfo(const char *nodename,\n       const char *servname,\n       const struct addrinfo *hints,\n       struct addrinfo **res);\n\n#if LWIP_COMPAT_SOCKETS\n#define gethostbyname(name) lwip_gethostbyname(name)\n#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \\\n       lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop)\n#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo)\n#define getaddrinfo(nodname, servname, hints, res) \\\n       lwip_getaddrinfo(nodname, servname, hints, res)\n#endif /* LWIP_COMPAT_SOCKETS */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_DNS && LWIP_SOCKET */\n\n#endif /* __LWIP_NETDB_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/netif.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_NETIF_H__\n#define __LWIP_NETIF_H__\n\n#include \"lwip/opt.h\"\n\n#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF)\n\n#include \"lwip/err.h\"\n\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6_addr.h\"\n\n#include \"lwip/def.h\"\n#include \"lwip/pbuf.h\"\n#if LWIP_DHCP\nstruct dhcp;\n#endif\n#if LWIP_AUTOIP\nstruct autoip;\n#endif\n#if LWIP_IPV6_DHCP6\n#include \"lwip/dhcp6.h\"\n#endif /* LWIP_IPV6_DHCP6 */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Throughout this file, IP addresses are expected to be in\n * the same byte order as in IP_PCB. */\n\n/** must be the maximum of all used hardware address lengths\n    across all types of interfaces in use */\n#define NETIF_MAX_HWADDR_LEN 6U\n\n/** Whether the network interface is 'up'. This is\n * a software flag used to control whether this network\n * interface is enabled and processes traffic.\n * It is set by the startup code (for static IP configuration) or\n * by dhcp/autoip when an address has been assigned.\n */\n#define NETIF_FLAG_UP           0x01U\n/** If set, the netif has broadcast capability.\n * Set by the netif driver in its init function. */\n#define NETIF_FLAG_BROADCAST    0x02U\n/** If set, the netif is one end of a point-to-point connection.\n * Set by the netif driver in its init function. */\n#define NETIF_FLAG_POINTTOPOINT 0x04U\n/** If set, the interface is configured using DHCP.\n * Set by the DHCP code when starting or stopping DHCP. */\n#define NETIF_FLAG_DHCP         0x08U\n/** If set, the interface has an active link\n *  (set by the network interface driver).\n * Either set by the netif driver in its init function (if the link\n * is up at that time) or at a later point once the link comes up\n * (if link detection is supported by the hardware). */\n#define NETIF_FLAG_LINK_UP      0x10U\n/** If set, the netif is an ethernet device using ARP.\n * Set by the netif driver in its init function.\n * Used to check input packet types and use of DHCP. */\n#define NETIF_FLAG_ETHARP       0x20U\n/** If set, the netif is an ethernet device. It might not use\n * ARP or TCP/IP if it is used for PPPoE only.\n */\n#define NETIF_FLAG_ETHERNET     0x40U\n/** If set, the netif has IGMP capability.\n * Set by the netif driver in its init function. */\n#define NETIF_FLAG_IGMP         0x80U\n/** Whether to pretend that we are every host for TCP packets.\n * Set by netif_set_pretend_tcp. */\n#define NETIF_FLAG_PRETEND_TCP  0x100U\n\n/** Function prototype for netif init functions. Set up flags and output/linkoutput\n * callback functions in this function.\n *\n * @param netif The netif to initialize\n */\ntypedef err_t (*netif_init_fn)(struct netif *netif);\n/** Function prototype for netif->input functions. This function is saved as 'input'\n * callback function in the netif struct. Call it when a packet has been received.\n *\n * @param p The received packet, copied into a pbuf\n * @param inp The netif which received the packet\n */\ntypedef err_t (*netif_input_fn)(struct pbuf *p, struct netif *inp);\n/** Function prototype for netif->output functions. Called by lwIP when a packet\n * shall be sent. For ethernet netif, set this to 'etharp_output' and set\n * 'linkoutput'.\n *\n * @param netif The netif which shall send a packet\n * @param p The packet to send (p->payload points to IP header)\n * @param ipaddr The IP address to which the packet shall be sent\n */\ntypedef err_t (*netif_output_fn)(struct netif *netif, struct pbuf *p,\n       ip_addr_t *ipaddr);\n#if LWIP_IPV6\n/** Function prototype for netif->output_ip6 functions. Called by lwIP when a packet\n * shall be sent. For ethernet netif, set this to 'nd_output' and set\n * 'linkoutput'.\n *\n * @param netif The netif which shall send a packet\n * @param p The packet to send (p->payload points to IP header)\n * @param ipaddr The IPv6 address to which the packet shall be sent\n */\ntypedef err_t (*netif_output_ip6_fn)(struct netif *netif, struct pbuf *p,\n       ip6_addr_t *ipaddr);\n#endif /* LWIP_IPV6 */\n/** Function prototype for netif->linkoutput functions. Only used for ethernet\n * netifs. This function is called by ARP when a packet shall be sent.\n *\n * @param netif The netif which shall send a packet\n * @param p The packet to send (raw ethernet packet)\n */\ntypedef err_t (*netif_linkoutput_fn)(struct netif *netif, struct pbuf *p);\n/** Function prototype for netif status- or link-callback functions. */\ntypedef void (*netif_status_callback_fn)(struct netif *netif);\n/** Function prototype for netif igmp_mac_filter functions */\ntypedef err_t (*netif_igmp_mac_filter_fn)(struct netif *netif,\n       ip_addr_t *group, u8_t action);\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n/** Function prototype for netif mld_mac_filter functions */\ntypedef err_t (*netif_mld_mac_filter_fn)(struct netif *netif,\n       ip6_addr_t *group, u8_t action);\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n\n/** Generic data structure used for all lwIP network interfaces.\n *  The following fields should be filled in by the initialization\n *  function for the device driver: hwaddr_len, hwaddr[], mtu, flags */\nstruct netif {\n  /** pointer to next in linked list */\n  struct netif *next;\n\n  /** IP address configuration in network byte order */\n  ip_addr_t ip_addr;\n  ip_addr_t netmask;\n  ip_addr_t gw;\n\n#if LWIP_IPV6\n  /** Array of IPv6 addresses for this netif. */\n  ip6_addr_t ip6_addr[LWIP_IPV6_NUM_ADDRESSES];\n  /** The state of each IPv6 address (Tentative, Preferred, etc).\n   * @see ip6_addr.h */\n  u8_t ip6_addr_state[LWIP_IPV6_NUM_ADDRESSES];\n#endif /* LWIP_IPV6 */\n  /** This function is called by the network device driver\n   *  to pass a packet up the TCP/IP stack. */\n  netif_input_fn input;\n  /** This function is called by the IP module when it wants\n   *  to send a packet on the interface. This function typically\n   *  first resolves the hardware address, then sends the packet. */\n  netif_output_fn output;\n  /** This function is called by the ARP module when it wants\n   *  to send a packet on the interface. This function outputs\n   *  the pbuf as-is on the link medium. */\n  netif_linkoutput_fn linkoutput;\n#if LWIP_IPV6\n  /** This function is called by the IPv6 module when it wants\n   *  to send a packet on the interface. This function typically\n   *  first resolves the hardware address, then sends the packet. */\n  netif_output_ip6_fn output_ip6;\n#endif /* LWIP_IPV6 */\n#if LWIP_NETIF_STATUS_CALLBACK\n  /** This function is called when the netif state is set to up or down\n   */\n  netif_status_callback_fn status_callback;\n#endif /* LWIP_NETIF_STATUS_CALLBACK */\n#if LWIP_NETIF_LINK_CALLBACK\n  /** This function is called when the netif link is set to up or down\n   */\n  netif_status_callback_fn link_callback;\n#endif /* LWIP_NETIF_LINK_CALLBACK */\n#if LWIP_NETIF_REMOVE_CALLBACK\n  /** This function is called when the netif has been removed */\n  netif_status_callback_fn remove_callback;\n#endif /* LWIP_NETIF_REMOVE_CALLBACK */\n  /** This field can be set by the device driver and could point\n   *  to state information for the device. */\n  void *state;\n#if LWIP_DHCP\n  /** the DHCP client state information for this netif */\n  struct dhcp *dhcp;\n#endif /* LWIP_DHCP */\n#if LWIP_AUTOIP\n  /** the AutoIP client state information for this netif */\n  struct autoip *autoip;\n#endif\n#if LWIP_IPV6_AUTOCONFIG\n  /** is this netif enabled for IPv6 autoconfiguration */\n  u8_t ip6_autoconfig_enabled;\n#endif /* LWIP_IPV6_AUTOCONFIG */\n#if LWIP_IPV6_SEND_ROUTER_SOLICIT\n  /** Number of Router Solicitation messages that remain to be sent. */\n  u8_t rs_count;\n#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */\n#if LWIP_IPV6_DHCP6\n  /** the DHCPv6 client state information for this netif */\n  struct dhcp6 *dhcp6;\n#endif /* LWIP_IPV6_DHCP6 */\n#if LWIP_NETIF_HOSTNAME\n  /* the hostname for this netif, NULL is a valid value */\n  char*  hostname;\n#endif /* LWIP_NETIF_HOSTNAME */\n  /** maximum transfer unit (in bytes) */\n  u16_t mtu;\n  /** number of bytes used in hwaddr */\n  u8_t hwaddr_len;\n  /** link level hardware address of this interface */\n  u8_t hwaddr[NETIF_MAX_HWADDR_LEN];\n  /** flags (see NETIF_FLAG_ above) */\n  u16_t flags;\n  /** descriptive abbreviation */\n  char name[2];\n  /** number of this interface */\n  u8_t num;\n#if LWIP_SNMP\n  /** link type (from \"snmp_ifType\" enum from snmp.h) */\n  u8_t link_type;\n  /** (estimate) link speed */\n  u32_t link_speed;\n  /** timestamp at last change made (up/down) */\n  u32_t ts;\n  /** counters */\n  u32_t ifinoctets;\n  u32_t ifinucastpkts;\n  u32_t ifinnucastpkts;\n  u32_t ifindiscards;\n  u32_t ifoutoctets;\n  u32_t ifoutucastpkts;\n  u32_t ifoutnucastpkts;\n  u32_t ifoutdiscards;\n#endif /* LWIP_SNMP */\n#if LWIP_IGMP\n  /** This function could be called to add or delete an entry in the multicast\n      filter table of the ethernet MAC.*/\n  netif_igmp_mac_filter_fn igmp_mac_filter;\n#endif /* LWIP_IGMP */\n#if LWIP_IPV6 && LWIP_IPV6_MLD\n  /** This function could be called to add or delete an entry in the IPv6 multicast\n      filter table of the ethernet MAC. */\n  netif_mld_mac_filter_fn mld_mac_filter;\n#endif /* LWIP_IPV6 && LWIP_IPV6_MLD */\n#if LWIP_NETIF_HWADDRHINT\n  u8_t *addr_hint;\n#endif /* LWIP_NETIF_HWADDRHINT */\n#if ENABLE_LOOPBACK\n  /* List of packets to be queued for ourselves. */\n  struct pbuf *loop_first;\n  struct pbuf *loop_last;\n#if LWIP_LOOPBACK_MAX_PBUFS\n  u16_t loop_cnt_current;\n#endif /* LWIP_LOOPBACK_MAX_PBUFS */\n#endif /* ENABLE_LOOPBACK */\n};\n\n#if LWIP_SNMP\n#define NETIF_INIT_SNMP(netif, type, speed) \\\n  /* use \"snmp_ifType\" enum from snmp.h for \"type\", snmp_ifType_ethernet_csmacd by example */ \\\n  (netif)->link_type = (type);    \\\n  /* your link speed here (units: bits per second) */  \\\n  (netif)->link_speed = (speed);  \\\n  (netif)->ts = 0;              \\\n  (netif)->ifinoctets = 0;      \\\n  (netif)->ifinucastpkts = 0;   \\\n  (netif)->ifinnucastpkts = 0;  \\\n  (netif)->ifindiscards = 0;    \\\n  (netif)->ifoutoctets = 0;     \\\n  (netif)->ifoutucastpkts = 0;  \\\n  (netif)->ifoutnucastpkts = 0; \\\n  (netif)->ifoutdiscards = 0\n#else /* LWIP_SNMP */\n#define NETIF_INIT_SNMP(netif, type, speed)\n#endif /* LWIP_SNMP */\n\n\n/** The list of network interfaces. */\nextern struct netif *netif_list;\n/** The default network interface. */\nextern struct netif *netif_default;\n\nvoid netif_init(void);\n\nstruct netif *netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,\n      ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input);\n\nvoid\nnetif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask,\n      ip_addr_t *gw);\nvoid netif_remove(struct netif * netif);\n\n/* Returns a network interface given its name. The name is of the form\n   \"et0\", where the first two letters are the \"name\" field in the\n   netif structure, and the digit is in the num field in the same\n   structure. */\nstruct netif *netif_find(char *name);\n\nint netif_is_named (struct netif *netif, const char name[3]);\n\nvoid netif_set_default(struct netif *netif);\n\nvoid netif_set_ipaddr(struct netif *netif, ip_addr_t *ipaddr);\nvoid netif_set_netmask(struct netif *netif, ip_addr_t *netmask);\nvoid netif_set_gw(struct netif *netif, ip_addr_t *gw);\nvoid netif_set_pretend_tcp(struct netif *netif, u8_t pretend);\n\nvoid netif_set_up(struct netif *netif);\nvoid netif_set_down(struct netif *netif);\n/** Ask if an interface is up */\n#define netif_is_up(netif) (((netif)->flags & NETIF_FLAG_UP) ? (u8_t)1 : (u8_t)0)\n\n#if LWIP_NETIF_STATUS_CALLBACK\nvoid netif_set_status_callback(struct netif *netif, netif_status_callback_fn status_callback);\n#endif /* LWIP_NETIF_STATUS_CALLBACK */\n#if LWIP_NETIF_REMOVE_CALLBACK\nvoid netif_set_remove_callback(struct netif *netif, netif_status_callback_fn remove_callback);\n#endif /* LWIP_NETIF_REMOVE_CALLBACK */\n\nvoid netif_set_link_up(struct netif *netif);\nvoid netif_set_link_down(struct netif *netif);\n/** Ask if a link is up */ \n#define netif_is_link_up(netif) (((netif)->flags & NETIF_FLAG_LINK_UP) ? (u8_t)1 : (u8_t)0)\n\n#if LWIP_NETIF_LINK_CALLBACK\nvoid netif_set_link_callback(struct netif *netif, netif_status_callback_fn link_callback);\n#endif /* LWIP_NETIF_LINK_CALLBACK */\n\n#if LWIP_NETIF_HOSTNAME\n#define netif_set_hostname(netif, name) do { if((netif) != NULL) { (netif)->hostname = name; }}while(0)\n#define netif_get_hostname(netif) (((netif) != NULL) ? ((netif)->hostname) : NULL)\n#endif /* LWIP_NETIF_HOSTNAME */\n\n#if LWIP_IGMP\n#define netif_set_igmp_mac_filter(netif, function) do { if((netif) != NULL) { (netif)->igmp_mac_filter = function; }}while(0)\n#define netif_get_igmp_mac_filter(netif) (((netif) != NULL) ? ((netif)->igmp_mac_filter) : NULL)\n#endif /* LWIP_IGMP */\n\n#if ENABLE_LOOPBACK\nerr_t netif_loop_output(struct netif *netif, struct pbuf *p, ip_addr_t *dest_ip);\nvoid netif_poll(struct netif *netif);\n#if !LWIP_NETIF_LOOPBACK_MULTITHREADING\nvoid netif_poll_all(void);\n#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */\n#endif /* ENABLE_LOOPBACK */\n\n#if LWIP_IPV6\n#define netif_ip6_addr(netif, i)  (&((netif)->ip6_addr[(i)]))\n#define netif_ip6_addr_state(netif, i)  ((netif)->ip6_addr_state[(i)])\n#define netif_ip6_addr_set_state(netif, i, state)  ((netif)->ip6_addr_state[(i)] = (state))\ns8_t netif_matches_ip6_addr(struct netif * netif, ip6_addr_t * ip6addr);\nvoid netif_create_ip6_linklocal_address(struct netif * netif, u8_t from_mac_48bit);\n#endif /* LWIP_IPV6 */\n\n#if LWIP_NETIF_HWADDRHINT\n#define NETIF_SET_HWADDRHINT(netif, hint) ((netif)->addr_hint = (hint))\n#else /* LWIP_NETIF_HWADDRHINT */\n#define NETIF_SET_HWADDRHINT(netif, hint)\n#endif /* LWIP_NETIF_HWADDRHINT */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_NETIF_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/netifapi.h",
    "content": "/*\n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n */\n \n#ifndef __LWIP_NETIFAPI_H__\n#define __LWIP_NETIFAPI_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/sys.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/dhcp.h\"\n#include \"lwip/autoip.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef void (*netifapi_void_fn)(struct netif *netif);\ntypedef err_t (*netifapi_errt_fn)(struct netif *netif);\n\nstruct netifapi_msg_msg {\n#if !LWIP_TCPIP_CORE_LOCKING\n  sys_sem_t sem;\n#endif /* !LWIP_TCPIP_CORE_LOCKING */\n  err_t err;\n  struct netif *netif;\n  union {\n    struct {\n      ip_addr_t *ipaddr;\n      ip_addr_t *netmask;\n      ip_addr_t *gw;\n      void *state;\n      netif_init_fn init;\n      netif_input_fn input;\n    } add;\n    struct {\n      netifapi_void_fn voidfunc;\n      netifapi_errt_fn errtfunc;\n    } common;\n  } msg;\n};\n\nstruct netifapi_msg {\n  void (* function)(struct netifapi_msg_msg *msg);\n  struct netifapi_msg_msg msg;\n};\n\n\n/* API for application */\nerr_t netifapi_netif_add       ( struct netif *netif,\n                                 ip_addr_t *ipaddr,\n                                 ip_addr_t *netmask,\n                                 ip_addr_t *gw,\n                                 void *state,\n                                 netif_init_fn init,\n                                 netif_input_fn input);\n\nerr_t netifapi_netif_set_addr  ( struct netif *netif,\n                                 ip_addr_t *ipaddr,\n                                 ip_addr_t *netmask,\n                                 ip_addr_t *gw );\n\nerr_t netifapi_netif_common    ( struct netif *netif,\n                                 netifapi_void_fn voidfunc,\n                                 netifapi_errt_fn errtfunc);\n\n#define netifapi_netif_remove(n)      netifapi_netif_common(n, netif_remove, NULL)\n#define netifapi_netif_set_up(n)      netifapi_netif_common(n, netif_set_up, NULL)\n#define netifapi_netif_set_down(n)    netifapi_netif_common(n, netif_set_down, NULL)\n#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL)\n#define netifapi_dhcp_start(n)        netifapi_netif_common(n, NULL, dhcp_start)\n#define netifapi_dhcp_stop(n)         netifapi_netif_common(n, dhcp_stop, NULL)\n#define netifapi_autoip_start(n)      netifapi_netif_common(n, NULL, autoip_start)\n#define netifapi_autoip_stop(n)       netifapi_netif_common(n, NULL, autoip_stop)\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_NETIF_API */\n\n#endif /* __LWIP_NETIFAPI_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/opt.h",
    "content": "/**\n * @file\n *\n * lwIP Options Configuration\n */\n\n/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_OPT_H__\n#define __LWIP_OPT_H__\n\n/*\n * Include user defined options first. Anything not defined in these files\n * will be set to standard values. Override anything you dont like!\n */\n#include \"lwipopts.h\"\n#include \"lwip/debug.h\"\n\n/*\n   -----------------------------------------------\n   ---------- Platform specific locking ----------\n   -----------------------------------------------\n*/\n\n/**\n * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain\n * critical regions during buffer allocation, deallocation and memory\n * allocation and deallocation.\n */\n#ifndef SYS_LIGHTWEIGHT_PROT\n#define SYS_LIGHTWEIGHT_PROT            0\n#endif\n\n/** \n * NO_SYS==1: Provides VERY minimal functionality. Otherwise,\n * use lwIP facilities.\n */\n#ifndef NO_SYS\n#define NO_SYS                          0\n#endif\n\n/**\n * NO_SYS_NO_TIMERS==1: Drop support for sys_timeout when NO_SYS==1\n * Mainly for compatibility to old versions.\n */\n#ifndef NO_SYS_NO_TIMERS\n#define NO_SYS_NO_TIMERS                0\n#endif\n\n/**\n * MEMCPY: override this if you have a faster implementation at hand than the\n * one included in your C library\n */\n#ifndef MEMCPY\n#define MEMCPY(dst,src,len)             memcpy(dst,src,len)\n#endif\n\n/**\n * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a\n * call to memcpy() if the length is known at compile time and is small.\n */\n#ifndef SMEMCPY\n#define SMEMCPY(dst,src,len)            memcpy(dst,src,len)\n#endif\n\n/*\n   ------------------------------------\n   ---------- Memory options ----------\n   ------------------------------------\n*/\n/**\n * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library\n * instead of the lwip internal allocator. Can save code size if you\n * already use it.\n */\n#ifndef MEM_LIBC_MALLOC\n#define MEM_LIBC_MALLOC                 0\n#endif\n\n/**\n* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator.\n* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution\n* speed and usage from interrupts!\n*/\n#ifndef MEMP_MEM_MALLOC\n#define MEMP_MEM_MALLOC                 0\n#endif\n\n/**\n * MEM_ALIGNMENT: should be set to the alignment of the CPU\n *    4 byte alignment -> #define MEM_ALIGNMENT 4\n *    2 byte alignment -> #define MEM_ALIGNMENT 2\n */\n#ifndef MEM_ALIGNMENT\n#define MEM_ALIGNMENT                   1\n#endif\n\n/**\n * MEM_SIZE: the size of the heap memory. If the application will send\n * a lot of data that needs to be copied, this should be set high.\n */\n#ifndef MEM_SIZE\n#define MEM_SIZE                        1600\n#endif\n\n/**\n * MEMP_SEPARATE_POOLS: if defined to 1, each pool is placed in its own array.\n * This can be used to individually change the location of each pool.\n * Default is one big array for all pools\n */\n#ifndef MEMP_SEPARATE_POOLS\n#define MEMP_SEPARATE_POOLS             0\n#endif\n\n/**\n * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable\n * amount of bytes before and after each memp element in every pool and fills\n * it with a prominent default value.\n *    MEMP_OVERFLOW_CHECK == 0 no checking\n *    MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed\n *    MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time\n *      memp_malloc() or memp_free() is called (useful but slow!)\n */\n#ifndef MEMP_OVERFLOW_CHECK\n#define MEMP_OVERFLOW_CHECK             0\n#endif\n\n/**\n * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make\n * sure that there are no cycles in the linked lists.\n */\n#ifndef MEMP_SANITY_CHECK\n#define MEMP_SANITY_CHECK               0\n#endif\n\n/**\n * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set\n * of memory pools of various sizes. When mem_malloc is called, an element of\n * the smallest pool that can provide the length needed is returned.\n * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled.\n */\n#ifndef MEM_USE_POOLS\n#define MEM_USE_POOLS                   0\n#endif\n\n/**\n * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next\n * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more\n * reliable. */\n#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL\n#define MEM_USE_POOLS_TRY_BIGGER_POOL   0\n#endif\n\n/**\n * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h\n * that defines additional pools beyond the \"standard\" ones required\n * by lwIP. If you set this to 1, you must have lwippools.h in your \n * inlude path somewhere. \n */\n#ifndef MEMP_USE_CUSTOM_POOLS\n#define MEMP_USE_CUSTOM_POOLS           0\n#endif\n\n/**\n * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from\n * interrupt context (or another context that doesn't allow waiting for a\n * semaphore).\n * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT,\n * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs\n * with each loop so that mem_free can run.\n *\n * ATTENTION: As you can see from the above description, this leads to dis-/\n * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc\n * can need longer.\n *\n * If you don't want that, at least for NO_SYS=0, you can still use the following\n * functions to enqueue a deallocation call which then runs in the tcpip_thread\n * context:\n * - pbuf_free_callback(p);\n * - mem_free_callback(m);\n */\n#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT\n#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0\n#endif\n\n/*\n   ------------------------------------------------\n   ---------- Internal Memory Pool Sizes ----------\n   ------------------------------------------------\n*/\n/**\n * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF).\n * If the application sends a lot of data out of ROM (or other static memory),\n * this should be set high.\n */\n#ifndef MEMP_NUM_PBUF\n#define MEMP_NUM_PBUF                   16\n#endif\n\n/**\n * MEMP_NUM_RAW_PCB: Number of raw connection PCBs\n * (requires the LWIP_RAW option)\n */\n#ifndef MEMP_NUM_RAW_PCB\n#define MEMP_NUM_RAW_PCB                4\n#endif\n\n/**\n * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One\n * per active UDP \"connection\".\n * (requires the LWIP_UDP option)\n */\n#ifndef MEMP_NUM_UDP_PCB\n#define MEMP_NUM_UDP_PCB                4\n#endif\n\n/**\n * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections.\n * (requires the LWIP_TCP option)\n */\n#ifndef MEMP_NUM_TCP_PCB\n#define MEMP_NUM_TCP_PCB                5\n#endif\n\n/**\n * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.\n * (requires the LWIP_TCP option)\n */\n#ifndef MEMP_NUM_TCP_PCB_LISTEN\n#define MEMP_NUM_TCP_PCB_LISTEN         8\n#endif\n\n/**\n * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments.\n * (requires the LWIP_TCP option)\n */\n#ifndef MEMP_NUM_TCP_SEG\n#define MEMP_NUM_TCP_SEG                16\n#endif\n\n/**\n * MEMP_NUM_REASSDATA: the number of IP packets simultaneously queued for\n * reassembly (whole packets, not fragments!)\n */\n#ifndef MEMP_NUM_REASSDATA\n#define MEMP_NUM_REASSDATA              5\n#endif\n\n/**\n * MEMP_NUM_FRAG_PBUF: the number of IP fragments simultaneously sent\n * (fragments, not whole packets!).\n * This is only used with IP_FRAG_USES_STATIC_BUF==0 and\n * LWIP_NETIF_TX_SINGLE_PBUF==0 and only has to be > 1 with DMA-enabled MACs\n * where the packet is not yet sent when netif->output returns.\n */\n#ifndef MEMP_NUM_FRAG_PBUF\n#define MEMP_NUM_FRAG_PBUF              15\n#endif\n\n/**\n * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing\n * packets (pbufs) that are waiting for an ARP request (to resolve\n * their destination address) to finish.\n * (requires the ARP_QUEUEING option)\n */\n#ifndef MEMP_NUM_ARP_QUEUE\n#define MEMP_NUM_ARP_QUEUE              30\n#endif\n\n/**\n * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces\n * can be members et the same time (one per netif - allsystems group -, plus one\n * per netif membership).\n * (requires the LWIP_IGMP option)\n */\n#ifndef MEMP_NUM_IGMP_GROUP\n#define MEMP_NUM_IGMP_GROUP             8\n#endif\n\n/**\n * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts.\n * (requires NO_SYS==0)\n * The default number of timeouts is calculated here for all enabled modules.\n * The formula expects settings to be either '0' or '1'.\n */\n#ifndef MEMP_NUM_SYS_TIMEOUT\n#define MEMP_NUM_SYS_TIMEOUT            (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0))\n#endif\n\n/**\n * MEMP_NUM_NETBUF: the number of struct netbufs.\n * (only needed if you use the sequential API, like api_lib.c)\n */\n#ifndef MEMP_NUM_NETBUF\n#define MEMP_NUM_NETBUF                 2\n#endif\n\n/**\n * MEMP_NUM_NETCONN: the number of struct netconns.\n * (only needed if you use the sequential API, like api_lib.c)\n */\n#ifndef MEMP_NUM_NETCONN\n#define MEMP_NUM_NETCONN                4\n#endif\n\n/**\n * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used\n * for callback/timeout API communication. \n * (only needed if you use tcpip.c)\n */\n#ifndef MEMP_NUM_TCPIP_MSG_API\n#define MEMP_NUM_TCPIP_MSG_API          8\n#endif\n\n/**\n * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used\n * for incoming packets. \n * (only needed if you use tcpip.c)\n */\n#ifndef MEMP_NUM_TCPIP_MSG_INPKT\n#define MEMP_NUM_TCPIP_MSG_INPKT        8\n#endif\n\n/**\n * MEMP_NUM_SNMP_NODE: the number of leafs in the SNMP tree.\n */\n#ifndef MEMP_NUM_SNMP_NODE\n#define MEMP_NUM_SNMP_NODE              50\n#endif\n\n/**\n * MEMP_NUM_SNMP_ROOTNODE: the number of branches in the SNMP tree.\n * Every branch has one leaf (MEMP_NUM_SNMP_NODE) at least!\n */\n#ifndef MEMP_NUM_SNMP_ROOTNODE\n#define MEMP_NUM_SNMP_ROOTNODE          30\n#endif\n\n/**\n * MEMP_NUM_SNMP_VARBIND: the number of concurrent requests (does not have to\n * be changed normally) - 2 of these are used per request (1 for input,\n * 1 for output)\n */\n#ifndef MEMP_NUM_SNMP_VARBIND\n#define MEMP_NUM_SNMP_VARBIND           2\n#endif\n\n/**\n * MEMP_NUM_SNMP_VALUE: the number of OID or values concurrently used\n * (does not have to be changed normally) - 3 of these are used per request\n * (1 for the value read and 2 for OIDs - input and output)\n */\n#ifndef MEMP_NUM_SNMP_VALUE\n#define MEMP_NUM_SNMP_VALUE             3\n#endif\n\n/**\n * MEMP_NUM_NETDB: the number of concurrently running lwip_addrinfo() calls\n * (before freeing the corresponding memory using lwip_freeaddrinfo()).\n */\n#ifndef MEMP_NUM_NETDB\n#define MEMP_NUM_NETDB                  1\n#endif\n\n/**\n * MEMP_NUM_LOCALHOSTLIST: the number of host entries in the local host list\n * if DNS_LOCAL_HOSTLIST_IS_DYNAMIC==1.\n */\n#ifndef MEMP_NUM_LOCALHOSTLIST\n#define MEMP_NUM_LOCALHOSTLIST          1\n#endif\n\n/**\n * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE\n * interfaces (only used with PPPOE_SUPPORT==1)\n */\n#ifndef MEMP_NUM_PPPOE_INTERFACES\n#define MEMP_NUM_PPPOE_INTERFACES       1\n#endif\n\n/**\n * PBUF_POOL_SIZE: the number of buffers in the pbuf pool. \n */\n#ifndef PBUF_POOL_SIZE\n#define PBUF_POOL_SIZE                  16\n#endif\n\n/*\n   ---------------------------------\n   ---------- ARP options ----------\n   ---------------------------------\n*/\n/**\n * LWIP_ARP==1: Enable ARP functionality.\n */\n#ifndef LWIP_ARP\n#define LWIP_ARP                        1\n#endif\n\n/**\n * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached.\n */\n#ifndef ARP_TABLE_SIZE\n#define ARP_TABLE_SIZE                  10\n#endif\n\n/**\n * ARP_QUEUEING==1: Multiple outgoing packets are queued during hardware address\n * resolution. By default, only the most recent packet is queued per IP address.\n * This is sufficient for most protocols and mainly reduces TCP connection\n * startup time. Set this to 1 if you know your application sends more than one\n * packet in a row to an IP address that is not in the ARP cache.\n */\n#ifndef ARP_QUEUEING\n#define ARP_QUEUEING                    0\n#endif\n\n/**\n * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be\n * updated with the source MAC and IP addresses supplied in the packet.\n * You may want to disable this if you do not trust LAN peers to have the\n * correct addresses, or as a limited approach to attempt to handle\n * spoofing. If disabled, lwIP will need to make a new ARP request if\n * the peer is not already in the ARP table, adding a little latency.\n * The peer *is* in the ARP table if it requested our address before.\n * Also notice that this slows down input processing of every IP packet!\n */\n#ifndef ETHARP_TRUST_IP_MAC\n#define ETHARP_TRUST_IP_MAC             0\n#endif\n\n/**\n * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header.\n * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check.\n * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted.\n * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted.\n * Alternatively, define a function/define ETHARP_VLAN_CHECK_FN(eth_hdr, vlan)\n * that returns 1 to accept a packet or 0 to drop a packet.\n */\n#ifndef ETHARP_SUPPORT_VLAN\n#define ETHARP_SUPPORT_VLAN             0\n#endif\n\n/** LWIP_ETHERNET==1: enable ethernet support for PPPoE even though ARP\n * might be disabled\n */\n#ifndef LWIP_ETHERNET\n#define LWIP_ETHERNET                   (LWIP_ARP || PPPOE_SUPPORT)\n#endif\n\n/** ETH_PAD_SIZE: number of bytes added before the ethernet header to ensure\n * alignment of payload after that header. Since the header is 14 bytes long,\n * without this padding e.g. addresses in the IP header will not be aligned\n * on a 32-bit boundary, so setting this to 2 can speed up 32-bit-platforms.\n */\n#ifndef ETH_PAD_SIZE\n#define ETH_PAD_SIZE                    0\n#endif\n\n/** ETHARP_SUPPORT_STATIC_ENTRIES==1: enable code to support static ARP table\n * entries (using etharp_add_static_entry/etharp_remove_static_entry).\n */\n#ifndef ETHARP_SUPPORT_STATIC_ENTRIES\n#define ETHARP_SUPPORT_STATIC_ENTRIES   0\n#endif\n\n\n/*\n   --------------------------------\n   ---------- IP options ----------\n   --------------------------------\n*/\n/**\n * IP_FORWARD==1: Enables the ability to forward IP packets across network\n * interfaces. If you are going to run lwIP on a device with only one network\n * interface, define this to 0.\n */\n#ifndef IP_FORWARD\n#define IP_FORWARD                      0\n#endif\n\n/**\n * IP_OPTIONS_ALLOWED: Defines the behavior for IP options.\n *      IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped.\n *      IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed).\n */\n#ifndef IP_OPTIONS_ALLOWED\n#define IP_OPTIONS_ALLOWED              1\n#endif\n\n/**\n * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that\n * this option does not affect outgoing packet sizes, which can be controlled\n * via IP_FRAG.\n */\n#ifndef IP_REASSEMBLY\n#define IP_REASSEMBLY                   1\n#endif\n\n/**\n * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note\n * that this option does not affect incoming packet sizes, which can be\n * controlled via IP_REASSEMBLY.\n */\n#ifndef IP_FRAG\n#define IP_FRAG                         1\n#endif\n\n/**\n * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally)\n * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived\n * in this time, the whole packet is discarded.\n */\n#ifndef IP_REASS_MAXAGE\n#define IP_REASS_MAXAGE                 3\n#endif\n\n/**\n * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.\n * Since the received pbufs are enqueued, be sure to configure\n * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive\n * packets even if the maximum amount of fragments is enqueued for reassembly!\n */\n#ifndef IP_REASS_MAX_PBUFS\n#define IP_REASS_MAX_PBUFS              10\n#endif\n\n/**\n * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP\n * fragmentation. Otherwise pbufs are allocated and reference the original\n * packet data to be fragmented (or with LWIP_NETIF_TX_SINGLE_PBUF==1,\n * new PBUF_RAM pbufs are used for fragments).\n * ATTENTION: IP_FRAG_USES_STATIC_BUF==1 may not be used for DMA-enabled MACs!\n */\n#ifndef IP_FRAG_USES_STATIC_BUF\n#define IP_FRAG_USES_STATIC_BUF         0\n#endif\n\n/**\n * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer\n * (requires IP_FRAG_USES_STATIC_BUF==1)\n */\n#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU)\n#define IP_FRAG_MAX_MTU                 1500\n#endif\n\n/**\n * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers.\n */\n#ifndef IP_DEFAULT_TTL\n#define IP_DEFAULT_TTL                  255\n#endif\n\n/**\n * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast\n * filter per pcb on udp and raw send operations. To enable broadcast filter\n * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1.\n */\n#ifndef IP_SOF_BROADCAST\n#define IP_SOF_BROADCAST                0\n#endif\n\n/**\n * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast\n * filter on recv operations.\n */\n#ifndef IP_SOF_BROADCAST_RECV\n#define IP_SOF_BROADCAST_RECV           0\n#endif\n\n/**\n * IP_FORWARD_ALLOW_TX_ON_RX_NETIF==1: allow ip_forward() to send packets back\n * out on the netif where it was received. This should only be used for\n * wireless networks.\n * ATTENTION: When this is 1, make sure your netif driver correctly marks incoming\n * link-layer-broadcast/multicast packets as such using the corresponding pbuf flags!\n */\n#ifndef IP_FORWARD_ALLOW_TX_ON_RX_NETIF\n#define IP_FORWARD_ALLOW_TX_ON_RX_NETIF 0\n#endif\n\n/**\n * LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS==1: randomize the local port for the first\n * local TCP/UDP pcb (default==0). This can prevent creating predictable port\n * numbers after booting a device.\n */\n#ifndef LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS\n#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 0\n#endif\n\n/*\n   ----------------------------------\n   ---------- ICMP options ----------\n   ----------------------------------\n*/\n/**\n * LWIP_ICMP==1: Enable ICMP module inside the IP stack.\n * Be careful, disable that make your product non-compliant to RFC1122\n */\n#ifndef LWIP_ICMP\n#define LWIP_ICMP                       1\n#endif\n\n/**\n * ICMP_TTL: Default value for Time-To-Live used by ICMP packets.\n */\n#ifndef ICMP_TTL\n#define ICMP_TTL                       (IP_DEFAULT_TTL)\n#endif\n\n/**\n * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only)\n */\n#ifndef LWIP_BROADCAST_PING\n#define LWIP_BROADCAST_PING             0\n#endif\n\n/**\n * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only)\n */\n#ifndef LWIP_MULTICAST_PING\n#define LWIP_MULTICAST_PING             0\n#endif\n\n/*\n   ---------------------------------\n   ---------- RAW options ----------\n   ---------------------------------\n*/\n/**\n * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.\n */\n#ifndef LWIP_RAW\n#define LWIP_RAW                        1\n#endif\n\n/**\n * LWIP_RAW==1: Enable application layer to hook into the IP layer itself.\n */\n#ifndef RAW_TTL\n#define RAW_TTL                        (IP_DEFAULT_TTL)\n#endif\n\n/*\n   ----------------------------------\n   ---------- DHCP options ----------\n   ----------------------------------\n*/\n/**\n * LWIP_DHCP==1: Enable DHCP module.\n */\n#ifndef LWIP_DHCP\n#define LWIP_DHCP                       0\n#endif\n\n/**\n * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address.\n */\n#ifndef DHCP_DOES_ARP_CHECK\n#define DHCP_DOES_ARP_CHECK             ((LWIP_DHCP) && (LWIP_ARP))\n#endif\n\n/*\n   ------------------------------------\n   ---------- AUTOIP options ----------\n   ------------------------------------\n*/\n/**\n * LWIP_AUTOIP==1: Enable AUTOIP module.\n */\n#ifndef LWIP_AUTOIP\n#define LWIP_AUTOIP                     0\n#endif\n\n/**\n * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on\n * the same interface at the same time.\n */\n#ifndef LWIP_DHCP_AUTOIP_COOP\n#define LWIP_DHCP_AUTOIP_COOP           0\n#endif\n\n/**\n * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes\n * that should be sent before falling back on AUTOIP. This can be set\n * as low as 1 to get an AutoIP address very quickly, but you should\n * be prepared to handle a changing IP address when DHCP overrides\n * AutoIP.\n */\n#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES\n#define LWIP_DHCP_AUTOIP_COOP_TRIES     9\n#endif\n\n/*\n   ----------------------------------\n   ---------- SNMP options ----------\n   ----------------------------------\n*/\n/**\n * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP\n * transport.\n */\n#ifndef LWIP_SNMP\n#define LWIP_SNMP                       0\n#endif\n\n/**\n * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will\n * allow. At least one request buffer is required.\n * Does not have to be changed unless external MIBs answer request asynchronously\n */\n#ifndef SNMP_CONCURRENT_REQUESTS\n#define SNMP_CONCURRENT_REQUESTS        1\n#endif\n\n/**\n * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap\n * destination is required\n */\n#ifndef SNMP_TRAP_DESTINATIONS\n#define SNMP_TRAP_DESTINATIONS          1\n#endif\n\n/**\n * SNMP_PRIVATE_MIB: \n * When using a private MIB, you have to create a file 'private_mib.h' that contains\n * a 'struct mib_array_node mib_private' which contains your MIB.\n */\n#ifndef SNMP_PRIVATE_MIB\n#define SNMP_PRIVATE_MIB                0\n#endif\n\n/**\n * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not\n * a safe action and disabled when SNMP_SAFE_REQUESTS = 1).\n * Unsafe requests are disabled by default!\n */\n#ifndef SNMP_SAFE_REQUESTS\n#define SNMP_SAFE_REQUESTS              1\n#endif\n\n/**\n * The maximum length of strings used. This affects the size of\n * MEMP_SNMP_VALUE elements.\n */\n#ifndef SNMP_MAX_OCTET_STRING_LEN\n#define SNMP_MAX_OCTET_STRING_LEN       127\n#endif\n\n/**\n * The maximum depth of the SNMP tree.\n * With private MIBs enabled, this depends on your MIB!\n * This affects the size of MEMP_SNMP_VALUE elements.\n */\n#ifndef SNMP_MAX_TREE_DEPTH\n#define SNMP_MAX_TREE_DEPTH             15\n#endif\n\n/**\n * The size of the MEMP_SNMP_VALUE elements, normally calculated from\n * SNMP_MAX_OCTET_STRING_LEN and SNMP_MAX_TREE_DEPTH.\n */\n#ifndef SNMP_MAX_VALUE_SIZE\n#define SNMP_MAX_VALUE_SIZE             LWIP_MAX((SNMP_MAX_OCTET_STRING_LEN)+1, sizeof(s32_t)*(SNMP_MAX_TREE_DEPTH))\n#endif\n\n/*\n   ----------------------------------\n   ---------- IGMP options ----------\n   ----------------------------------\n*/\n/**\n * LWIP_IGMP==1: Turn on IGMP module. \n */\n#ifndef LWIP_IGMP\n#define LWIP_IGMP                       0\n#endif\n\n/*\n   ----------------------------------\n   ---------- DNS options -----------\n   ----------------------------------\n*/\n/**\n * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS\n * transport.\n */\n#ifndef LWIP_DNS\n#define LWIP_DNS                        0\n#endif\n\n/** DNS maximum number of entries to maintain locally. */\n#ifndef DNS_TABLE_SIZE\n#define DNS_TABLE_SIZE                  4\n#endif\n\n/** DNS maximum host name length supported in the name table. */\n#ifndef DNS_MAX_NAME_LENGTH\n#define DNS_MAX_NAME_LENGTH             256\n#endif\n\n/** The maximum of DNS servers */\n#ifndef DNS_MAX_SERVERS\n#define DNS_MAX_SERVERS                 2\n#endif\n\n/** DNS do a name checking between the query and the response. */\n#ifndef DNS_DOES_NAME_CHECK\n#define DNS_DOES_NAME_CHECK             1\n#endif\n\n/** DNS message max. size. Default value is RFC compliant. */\n#ifndef DNS_MSG_SIZE\n#define DNS_MSG_SIZE                    512\n#endif\n\n/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled,\n *  you have to define\n *    #define DNS_LOCAL_HOSTLIST_INIT {{\"host1\", 0x123}, {\"host2\", 0x234}}\n *  (an array of structs name/address, where address is an u32_t in network\n *  byte order).\n *\n *  Instead, you can also use an external function:\n *  #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name)\n *  that returns the IP address or INADDR_NONE if not found.\n */\n#ifndef DNS_LOCAL_HOSTLIST\n#define DNS_LOCAL_HOSTLIST              0\n#endif /* DNS_LOCAL_HOSTLIST */\n\n/** If this is turned on, the local host-list can be dynamically changed\n *  at runtime. */\n#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC\n#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC   0\n#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */\n\n/*\n   ---------------------------------\n   ---------- UDP options ----------\n   ---------------------------------\n*/\n/**\n * LWIP_UDP==1: Turn on UDP.\n */\n#ifndef LWIP_UDP\n#define LWIP_UDP                        1\n#endif\n\n/**\n * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP)\n */\n#ifndef LWIP_UDPLITE\n#define LWIP_UDPLITE                    0\n#endif\n\n/**\n * UDP_TTL: Default Time-To-Live value.\n */\n#ifndef UDP_TTL\n#define UDP_TTL                         (IP_DEFAULT_TTL)\n#endif\n\n/**\n * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf.\n */\n#ifndef LWIP_NETBUF_RECVINFO\n#define LWIP_NETBUF_RECVINFO            0\n#endif\n\n/*\n   ---------------------------------\n   ---------- TCP options ----------\n   ---------------------------------\n*/\n/**\n * LWIP_TCP==1: Turn on TCP.\n */\n#ifndef LWIP_TCP\n#define LWIP_TCP                        1\n#endif\n\n/**\n * TCP_TTL: Default Time-To-Live value.\n */\n#ifndef TCP_TTL\n#define TCP_TTL                         (IP_DEFAULT_TTL)\n#endif\n\n/**\n * TCP_WND: The size of a TCP window.  This must be at least \n * (2 * TCP_MSS) for things to work well\n */\n#ifndef TCP_WND\n#define TCP_WND                         (4 * TCP_MSS)\n#endif \n\n/**\n * TCP_MAXRTX: Maximum number of retransmissions of data segments.\n */\n#ifndef TCP_MAXRTX\n#define TCP_MAXRTX                      12\n#endif\n\n/**\n * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments.\n */\n#ifndef TCP_SYNMAXRTX\n#define TCP_SYNMAXRTX                   6\n#endif\n\n/**\n * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order.\n * Define to 0 if your device is low on memory.\n */\n#ifndef TCP_QUEUE_OOSEQ\n#define TCP_QUEUE_OOSEQ                 (LWIP_TCP)\n#endif\n\n/**\n * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default,\n * you might want to increase this.)\n * For the receive side, this MSS is advertised to the remote side\n * when opening a connection. For the transmit size, this MSS sets\n * an upper limit on the MSS advertised by the remote host.\n */\n#ifndef TCP_MSS\n#define TCP_MSS                         536\n#endif\n\n/**\n * TCP_CALCULATE_EFF_SEND_MSS: \"The maximum size of a segment that TCP really\n * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which\n * reflects the available reassembly buffer size at the remote host) and the\n * largest size permitted by the IP layer\" (RFC 1122)\n * Setting this to 1 enables code that checks TCP_MSS against the MTU of the\n * netif used for a connection and limits the MSS if it would be too big otherwise.\n */\n#ifndef TCP_CALCULATE_EFF_SEND_MSS\n#define TCP_CALCULATE_EFF_SEND_MSS      1\n#endif\n\n\n/**\n * TCP_SND_BUF: TCP sender buffer space (bytes).\n * To achieve good performance, this should be at least 2 * TCP_MSS.\n */\n#ifndef TCP_SND_BUF\n#define TCP_SND_BUF                     (2 * TCP_MSS)\n#endif\n\n/**\n * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least\n * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work.\n */\n#ifndef TCP_SND_QUEUELEN\n#define TCP_SND_QUEUELEN                ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS))\n#endif\n\n/**\n * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than\n * TCP_SND_BUF. It is the amount of space which must be available in the\n * TCP snd_buf for select to return writable (combined with TCP_SNDQUEUELOWAT).\n */\n#ifndef TCP_SNDLOWAT\n#define TCP_SNDLOWAT                    LWIP_MIN(LWIP_MAX(((TCP_SND_BUF)/2), (2 * TCP_MSS) + 1), (TCP_SND_BUF) - 1)\n#endif\n\n/**\n * TCP_SNDQUEUELOWAT: TCP writable bufs (pbuf count). This must be less\n * than TCP_SND_QUEUELEN. If the number of pbufs queued on a pcb drops below\n * this number, select returns writable (combined with TCP_SNDLOWAT).\n */\n#ifndef TCP_SNDQUEUELOWAT\n#define TCP_SNDQUEUELOWAT               LWIP_MAX(((TCP_SND_QUEUELEN)/2), 5)\n#endif\n\n/**\n * TCP_OOSEQ_MAX_BYTES: The maximum number of bytes queued on ooseq per pcb.\n * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0.\n */\n#ifndef TCP_OOSEQ_MAX_BYTES\n#define TCP_OOSEQ_MAX_BYTES             0\n#endif\n\n/**\n * TCP_OOSEQ_MAX_PBUFS: The maximum number of pbufs queued on ooseq per pcb.\n * Default is 0 (no limit). Only valid for TCP_QUEUE_OOSEQ==0.\n */\n#ifndef TCP_OOSEQ_MAX_PBUFS\n#define TCP_OOSEQ_MAX_PBUFS             0\n#endif\n\n/**\n * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb.\n */\n#ifndef TCP_LISTEN_BACKLOG\n#define TCP_LISTEN_BACKLOG              0\n#endif\n\n/**\n * The maximum allowed backlog for TCP listen netconns.\n * This backlog is used unless another is explicitly specified.\n * 0xff is the maximum (u8_t).\n */\n#ifndef TCP_DEFAULT_LISTEN_BACKLOG\n#define TCP_DEFAULT_LISTEN_BACKLOG      0xff\n#endif\n\n/**\n * TCP_OVERSIZE: The maximum number of bytes that tcp_write may\n * allocate ahead of time in an attempt to create shorter pbuf chains\n * for transmission. The meaningful range is 0 to TCP_MSS. Some\n * suggested values are:\n *\n * 0:         Disable oversized allocation. Each tcp_write() allocates a new\n              pbuf (old behaviour).\n * 1:         Allocate size-aligned pbufs with minimal excess. Use this if your\n *            scatter-gather DMA requires aligned fragments.\n * 128:       Limit the pbuf/memory overhead to 20%.\n * TCP_MSS:   Try to create unfragmented TCP packets.\n * TCP_MSS/4: Try to create 4 fragments or less per TCP packet.\n */\n#ifndef TCP_OVERSIZE\n#define TCP_OVERSIZE                    TCP_MSS\n#endif\n\n/**\n * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option.\n */\n#ifndef LWIP_TCP_TIMESTAMPS\n#define LWIP_TCP_TIMESTAMPS             0\n#endif\n\n/**\n * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an\n * explicit window update\n */\n#ifndef TCP_WND_UPDATE_THRESHOLD\n#define TCP_WND_UPDATE_THRESHOLD   (TCP_WND / 4)\n#endif\n\n/**\n * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1.\n *     LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all\n *         events (accept, sent, etc) that happen in the system.\n *     LWIP_CALLBACK_API==1: The PCB callback function is called directly\n *         for the event. This is the default.\n */\n#if !defined(LWIP_EVENT_API) && !defined(LWIP_CALLBACK_API)\n#define LWIP_EVENT_API                  0\n#define LWIP_CALLBACK_API               1\n#endif\n\n\n/*\n   ----------------------------------\n   ---------- Pbuf options ----------\n   ----------------------------------\n*/\n/**\n * PBUF_LINK_HLEN: the number of bytes that should be allocated for a\n * link level header. The default is 14, the standard value for\n * Ethernet.\n */\n#ifndef PBUF_LINK_HLEN\n#define PBUF_LINK_HLEN                  (14 + ETH_PAD_SIZE)\n#endif\n\n/**\n * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is\n * designed to accomodate single full size TCP frame in one pbuf, including\n * TCP_MSS, IP header, and link header.\n */\n#ifndef PBUF_POOL_BUFSIZE\n#define PBUF_POOL_BUFSIZE               LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN)\n#endif\n\n/*\n   ------------------------------------------------\n   ---------- Network Interfaces options ----------\n   ------------------------------------------------\n*/\n/**\n * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname\n * field.\n */\n#ifndef LWIP_NETIF_HOSTNAME\n#define LWIP_NETIF_HOSTNAME             0\n#endif\n\n/**\n * LWIP_NETIF_API==1: Support netif api (in netifapi.c)\n */\n#ifndef LWIP_NETIF_API\n#define LWIP_NETIF_API                  0\n#endif\n\n/**\n * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface\n * changes its up/down status (i.e., due to DHCP IP acquistion)\n */\n#ifndef LWIP_NETIF_STATUS_CALLBACK\n#define LWIP_NETIF_STATUS_CALLBACK      0\n#endif\n\n/**\n * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface\n * whenever the link changes (i.e., link down)\n */\n#ifndef LWIP_NETIF_LINK_CALLBACK\n#define LWIP_NETIF_LINK_CALLBACK        0\n#endif\n\n/**\n * LWIP_NETIF_REMOVE_CALLBACK==1: Support a callback function that is called\n * when a netif has been removed\n */\n#ifndef LWIP_NETIF_REMOVE_CALLBACK\n#define LWIP_NETIF_REMOVE_CALLBACK      0\n#endif\n\n/**\n * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table\n * indices) in struct netif. TCP and UDP can make use of this to prevent\n * scanning the ARP table for every sent packet. While this is faster for big\n * ARP tables or many concurrent connections, it might be counterproductive\n * if you have a tiny ARP table or if there never are concurrent connections.\n */\n#ifndef LWIP_NETIF_HWADDRHINT\n#define LWIP_NETIF_HWADDRHINT           0\n#endif\n\n/**\n * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP\n * address equal to the netif IP address, looping them back up the stack.\n */\n#ifndef LWIP_NETIF_LOOPBACK\n#define LWIP_NETIF_LOOPBACK             0\n#endif\n\n/**\n * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback\n * sending for each netif (0 = disabled)\n */\n#ifndef LWIP_LOOPBACK_MAX_PBUFS\n#define LWIP_LOOPBACK_MAX_PBUFS         0\n#endif\n\n/**\n * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in\n * the system, as netifs must change how they behave depending on this setting\n * for the LWIP_NETIF_LOOPBACK option to work.\n * Setting this is needed to avoid reentering non-reentrant functions like\n * tcp_input().\n *    LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a\n *       multithreaded environment like tcpip.c. In this case, netif->input()\n *       is called directly.\n *    LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup.\n *       The packets are put on a list and netif_poll() must be called in\n *       the main application loop.\n */\n#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING\n#define LWIP_NETIF_LOOPBACK_MULTITHREADING    (!NO_SYS)\n#endif\n\n/**\n * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data\n * to be sent into one single pbuf. This is for compatibility with DMA-enabled\n * MACs that do not support scatter-gather.\n * Beware that this might involve CPU-memcpy before transmitting that would not\n * be needed without this flag! Use this only if you need to!\n *\n * @todo: TCP and IP-frag do not work with this, yet:\n */\n#ifndef LWIP_NETIF_TX_SINGLE_PBUF\n#define LWIP_NETIF_TX_SINGLE_PBUF             0\n#endif /* LWIP_NETIF_TX_SINGLE_PBUF */\n\n/*\n   ------------------------------------\n   ---------- LOOPIF options ----------\n   ------------------------------------\n*/\n/**\n * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c\n */\n#ifndef LWIP_HAVE_LOOPIF\n#define LWIP_HAVE_LOOPIF                0\n#endif\n\n/*\n   ------------------------------------\n   ---------- SLIPIF options ----------\n   ------------------------------------\n*/\n/**\n * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c\n */\n#ifndef LWIP_HAVE_SLIPIF\n#define LWIP_HAVE_SLIPIF                0\n#endif\n\n/*\n   ------------------------------------\n   ---------- Thread options ----------\n   ------------------------------------\n*/\n/**\n * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.\n */\n#ifndef TCPIP_THREAD_NAME\n#define TCPIP_THREAD_NAME              \"tcpip_thread\"\n#endif\n\n/**\n * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread.\n * The stack size value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef TCPIP_THREAD_STACKSIZE\n#define TCPIP_THREAD_STACKSIZE          0\n#endif\n\n/**\n * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread.\n * The priority value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef TCPIP_THREAD_PRIO\n#define TCPIP_THREAD_PRIO               1\n#endif\n\n/**\n * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages\n * The queue size value itself is platform-dependent, but is passed to\n * sys_mbox_new() when tcpip_init is called.\n */\n#ifndef TCPIP_MBOX_SIZE\n#define TCPIP_MBOX_SIZE                 0\n#endif\n\n/**\n * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread.\n */\n#ifndef SLIPIF_THREAD_NAME\n#define SLIPIF_THREAD_NAME             \"slipif_loop\"\n#endif\n\n/**\n * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread.\n * The stack size value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef SLIPIF_THREAD_STACKSIZE\n#define SLIPIF_THREAD_STACKSIZE         0\n#endif\n\n/**\n * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread.\n * The priority value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef SLIPIF_THREAD_PRIO\n#define SLIPIF_THREAD_PRIO              1\n#endif\n\n/**\n * PPP_THREAD_NAME: The name assigned to the pppInputThread.\n */\n#ifndef PPP_THREAD_NAME\n#define PPP_THREAD_NAME                \"pppInputThread\"\n#endif\n\n/**\n * PPP_THREAD_STACKSIZE: The stack size used by the pppInputThread.\n * The stack size value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef PPP_THREAD_STACKSIZE\n#define PPP_THREAD_STACKSIZE            0\n#endif\n\n/**\n * PPP_THREAD_PRIO: The priority assigned to the pppInputThread.\n * The priority value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef PPP_THREAD_PRIO\n#define PPP_THREAD_PRIO                 1\n#endif\n\n/**\n * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread.\n */\n#ifndef DEFAULT_THREAD_NAME\n#define DEFAULT_THREAD_NAME            \"lwIP\"\n#endif\n\n/**\n * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread.\n * The stack size value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef DEFAULT_THREAD_STACKSIZE\n#define DEFAULT_THREAD_STACKSIZE        0\n#endif\n\n/**\n * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread.\n * The priority value itself is platform-dependent, but is passed to\n * sys_thread_new() when the thread is created.\n */\n#ifndef DEFAULT_THREAD_PRIO\n#define DEFAULT_THREAD_PRIO             1\n#endif\n\n/**\n * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a\n * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed\n * to sys_mbox_new() when the recvmbox is created.\n */\n#ifndef DEFAULT_RAW_RECVMBOX_SIZE\n#define DEFAULT_RAW_RECVMBOX_SIZE       0\n#endif\n\n/**\n * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a\n * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed\n * to sys_mbox_new() when the recvmbox is created.\n */\n#ifndef DEFAULT_UDP_RECVMBOX_SIZE\n#define DEFAULT_UDP_RECVMBOX_SIZE       0\n#endif\n\n/**\n * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a\n * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed\n * to sys_mbox_new() when the recvmbox is created.\n */\n#ifndef DEFAULT_TCP_RECVMBOX_SIZE\n#define DEFAULT_TCP_RECVMBOX_SIZE       0\n#endif\n\n/**\n * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections.\n * The queue size value itself is platform-dependent, but is passed to\n * sys_mbox_new() when the acceptmbox is created.\n */\n#ifndef DEFAULT_ACCEPTMBOX_SIZE\n#define DEFAULT_ACCEPTMBOX_SIZE         0\n#endif\n\n/*\n   ----------------------------------------------\n   ---------- Sequential layer options ----------\n   ----------------------------------------------\n*/\n/**\n * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!)\n * Don't use it if you're not an active lwIP project member\n */\n#ifndef LWIP_TCPIP_CORE_LOCKING\n#define LWIP_TCPIP_CORE_LOCKING         0\n#endif\n\n/**\n * LWIP_TCPIP_CORE_LOCKING_INPUT: (EXPERIMENTAL!)\n * Don't use it if you're not an active lwIP project member\n */\n#ifndef LWIP_TCPIP_CORE_LOCKING_INPUT\n#define LWIP_TCPIP_CORE_LOCKING_INPUT   0\n#endif\n\n/**\n * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)\n */\n#ifndef LWIP_NETCONN\n#define LWIP_NETCONN                    1\n#endif\n\n/** LWIP_TCPIP_TIMEOUT==1: Enable tcpip_timeout/tcpip_untimeout tod create\n * timers running in tcpip_thread from another thread.\n */\n#ifndef LWIP_TCPIP_TIMEOUT\n#define LWIP_TCPIP_TIMEOUT              1\n#endif\n\n/*\n   ------------------------------------\n   ---------- Socket options ----------\n   ------------------------------------\n*/\n/**\n * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)\n */\n#ifndef LWIP_SOCKET\n#define LWIP_SOCKET                     1\n#endif\n\n/**\n * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names.\n * (only used if you use sockets.c)\n */\n#ifndef LWIP_COMPAT_SOCKETS\n#define LWIP_COMPAT_SOCKETS             1\n#endif\n\n/**\n * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names.\n * Disable this option if you use a POSIX operating system that uses the same\n * names (read, write & close). (only used if you use sockets.c)\n */\n#ifndef LWIP_POSIX_SOCKETS_IO_NAMES\n#define LWIP_POSIX_SOCKETS_IO_NAMES     1\n#endif\n\n/**\n * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT\n * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set\n * in seconds. (does not require sockets.c, and will affect tcp.c)\n */\n#ifndef LWIP_TCP_KEEPALIVE\n#define LWIP_TCP_KEEPALIVE              0\n#endif\n\n/**\n * LWIP_SO_SNDTIMEO==1: Enable send timeout for sockets/netconns and\n * SO_SNDTIMEO processing.\n */\n#ifndef LWIP_SO_SNDTIMEO\n#define LWIP_SO_SNDTIMEO                0\n#endif\n\n/**\n * LWIP_SO_RCVTIMEO==1: Enable receive timeout for sockets/netconns and\n * SO_RCVTIMEO processing.\n */\n#ifndef LWIP_SO_RCVTIMEO\n#define LWIP_SO_RCVTIMEO                0\n#endif\n\n/**\n * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing.\n */\n#ifndef LWIP_SO_RCVBUF\n#define LWIP_SO_RCVBUF                  0\n#endif\n\n/**\n * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize.\n */\n#ifndef RECV_BUFSIZE_DEFAULT\n#define RECV_BUFSIZE_DEFAULT            INT_MAX\n#endif\n\n/**\n * SO_REUSE==1: Enable SO_REUSEADDR option.\n */\n#ifndef SO_REUSE\n#define SO_REUSE                        0\n#endif\n\n/**\n * SO_REUSE_RXTOALL==1: Pass a copy of incoming broadcast/multicast packets\n * to all local matches if SO_REUSEADDR is turned on.\n * WARNING: Adds a memcpy for every packet if passing to more than one pcb!\n */\n#ifndef SO_REUSE_RXTOALL\n#define SO_REUSE_RXTOALL                0\n#endif\n\n/**\n * LWIP_FIONREAD_LINUXMODE==0 (default): ioctl/FIONREAD returns the amount of\n * pending data in the network buffer. This is the way windows does it. It's\n * the default for lwIP since it is smaller.\n * LWIP_FIONREAD_LINUXMODE==1: ioctl/FIONREAD returns the size of the next\n * pending datagram in bytes. This is the way linux does it. This code is only\n * here for compatibility.\n */\n#ifndef LWIP_FIONREAD_LINUXMODE\n#define LWIP_FIONREAD_LINUXMODE         0\n#endif\n\n/*\n   ----------------------------------------\n   ---------- Statistics options ----------\n   ----------------------------------------\n*/\n/**\n * LWIP_STATS==1: Enable statistics collection in lwip_stats.\n */\n#ifndef LWIP_STATS\n#define LWIP_STATS                      1\n#endif\n\n#if LWIP_STATS\n\n/**\n * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions.\n */\n#ifndef LWIP_STATS_DISPLAY\n#define LWIP_STATS_DISPLAY              0\n#endif\n\n/**\n * LINK_STATS==1: Enable link stats.\n */\n#ifndef LINK_STATS\n#define LINK_STATS                      1\n#endif\n\n/**\n * ETHARP_STATS==1: Enable etharp stats.\n */\n#ifndef ETHARP_STATS\n#define ETHARP_STATS                    (LWIP_ARP)\n#endif\n\n/**\n * IP_STATS==1: Enable IP stats.\n */\n#ifndef IP_STATS\n#define IP_STATS                        1\n#endif\n\n/**\n * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is\n * on if using either frag or reass.\n */\n#ifndef IPFRAG_STATS\n#define IPFRAG_STATS                    (IP_REASSEMBLY || IP_FRAG)\n#endif\n\n/**\n * ICMP_STATS==1: Enable ICMP stats.\n */\n#ifndef ICMP_STATS\n#define ICMP_STATS                      1\n#endif\n\n/**\n * IGMP_STATS==1: Enable IGMP stats.\n */\n#ifndef IGMP_STATS\n#define IGMP_STATS                      (LWIP_IGMP)\n#endif\n\n/**\n * UDP_STATS==1: Enable UDP stats. Default is on if\n * UDP enabled, otherwise off.\n */\n#ifndef UDP_STATS\n#define UDP_STATS                       (LWIP_UDP)\n#endif\n\n/**\n * TCP_STATS==1: Enable TCP stats. Default is on if TCP\n * enabled, otherwise off.\n */\n#ifndef TCP_STATS\n#define TCP_STATS                       (LWIP_TCP)\n#endif\n\n/**\n * MEM_STATS==1: Enable mem.c stats.\n */\n#ifndef MEM_STATS\n#define MEM_STATS                       ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0))\n#endif\n\n/**\n * MEMP_STATS==1: Enable memp.c pool stats.\n */\n#ifndef MEMP_STATS\n#define MEMP_STATS                      (MEMP_MEM_MALLOC == 0)\n#endif\n\n/**\n * SYS_STATS==1: Enable system stats (sem and mbox counts, etc).\n */\n#ifndef SYS_STATS\n#define SYS_STATS                       (NO_SYS == 0)\n#endif\n\n/**\n * IP6_STATS==1: Enable IPv6 stats.\n */\n#ifndef IP6_STATS\n#define IP6_STATS                       (LWIP_IPV6)\n#endif\n\n/**\n * ICMP6_STATS==1: Enable ICMP for IPv6 stats.\n */\n#ifndef ICMP6_STATS\n#define ICMP6_STATS                     (LWIP_IPV6 && LWIP_ICMP6)\n#endif\n\n/**\n * IP6_FRAG_STATS==1: Enable IPv6 fragmentation stats.\n */\n#ifndef IP6_FRAG_STATS\n#define IP6_FRAG_STATS                  (LWIP_IPV6 && (LWIP_IPV6_FRAG || LWIP_IPV6_REASS))\n#endif\n\n/**\n * MLD6_STATS==1: Enable MLD for IPv6 stats.\n */\n#ifndef MLD6_STATS\n#define MLD6_STATS                      (LWIP_IPV6 && LWIP_IPV6_MLD)\n#endif\n\n/**\n * ND6_STATS==1: Enable Neighbor discovery for IPv6 stats.\n */\n#ifndef ND6_STATS\n#define ND6_STATS                       (LWIP_IPV6)\n#endif\n\n#else\n\n#define LINK_STATS                      0\n#define IP_STATS                        0\n#define IPFRAG_STATS                    0\n#define ICMP_STATS                      0\n#define IGMP_STATS                      0\n#define UDP_STATS                       0\n#define TCP_STATS                       0\n#define MEM_STATS                       0\n#define MEMP_STATS                      0\n#define SYS_STATS                       0\n#define LWIP_STATS_DISPLAY              0\n#define IP6_STATS                       0\n#define ICMP6_STATS                     0\n#define IP6_FRAG_STATS                  0\n#define MLD6_STATS                      0\n#define ND6_STATS                       0\n\n#endif /* LWIP_STATS */\n\n/*\n   ---------------------------------\n   ---------- PPP options ----------\n   ---------------------------------\n*/\n/**\n * PPP_SUPPORT==1: Enable PPP.\n */\n#ifndef PPP_SUPPORT\n#define PPP_SUPPORT                     0\n#endif\n\n/**\n * PPPOE_SUPPORT==1: Enable PPP Over Ethernet\n */\n#ifndef PPPOE_SUPPORT\n#define PPPOE_SUPPORT                   0\n#endif\n\n/**\n * PPPOS_SUPPORT==1: Enable PPP Over Serial\n */\n#ifndef PPPOS_SUPPORT\n#define PPPOS_SUPPORT                   PPP_SUPPORT\n#endif\n\n#if PPP_SUPPORT\n\n/**\n * NUM_PPP: Max PPP sessions.\n */\n#ifndef NUM_PPP\n#define NUM_PPP                         1\n#endif\n\n/**\n * PAP_SUPPORT==1: Support PAP.\n */\n#ifndef PAP_SUPPORT\n#define PAP_SUPPORT                     0\n#endif\n\n/**\n * CHAP_SUPPORT==1: Support CHAP.\n */\n#ifndef CHAP_SUPPORT\n#define CHAP_SUPPORT                    0\n#endif\n\n/**\n * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET!\n */\n#ifndef MSCHAP_SUPPORT\n#define MSCHAP_SUPPORT                  0\n#endif\n\n/**\n * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET!\n */\n#ifndef CBCP_SUPPORT\n#define CBCP_SUPPORT                    0\n#endif\n\n/**\n * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET!\n */\n#ifndef CCP_SUPPORT\n#define CCP_SUPPORT                     0\n#endif\n\n/**\n * VJ_SUPPORT==1: Support VJ header compression.\n */\n#ifndef VJ_SUPPORT\n#define VJ_SUPPORT                      0\n#endif\n\n/**\n * MD5_SUPPORT==1: Support MD5 (see also CHAP).\n */\n#ifndef MD5_SUPPORT\n#define MD5_SUPPORT                     0\n#endif\n\n/*\n * Timeouts\n */\n#ifndef FSM_DEFTIMEOUT\n#define FSM_DEFTIMEOUT                  6       /* Timeout time in seconds */\n#endif\n\n#ifndef FSM_DEFMAXTERMREQS\n#define FSM_DEFMAXTERMREQS              2       /* Maximum Terminate-Request transmissions */\n#endif\n\n#ifndef FSM_DEFMAXCONFREQS\n#define FSM_DEFMAXCONFREQS              10      /* Maximum Configure-Request transmissions */\n#endif\n\n#ifndef FSM_DEFMAXNAKLOOPS\n#define FSM_DEFMAXNAKLOOPS              5       /* Maximum number of nak loops */\n#endif\n\n#ifndef UPAP_DEFTIMEOUT\n#define UPAP_DEFTIMEOUT                 6       /* Timeout (seconds) for retransmitting req */\n#endif\n\n#ifndef UPAP_DEFREQTIME\n#define UPAP_DEFREQTIME                 30      /* Time to wait for auth-req from peer */\n#endif\n\n#ifndef CHAP_DEFTIMEOUT\n#define CHAP_DEFTIMEOUT                 6       /* Timeout time in seconds */\n#endif\n\n#ifndef CHAP_DEFTRANSMITS\n#define CHAP_DEFTRANSMITS               10      /* max # times to send challenge */\n#endif\n\n/* Interval in seconds between keepalive echo requests, 0 to disable. */\n#ifndef LCP_ECHOINTERVAL\n#define LCP_ECHOINTERVAL                0\n#endif\n\n/* Number of unanswered echo requests before failure. */\n#ifndef LCP_MAXECHOFAILS\n#define LCP_MAXECHOFAILS                3\n#endif\n\n/* Max Xmit idle time (in jiffies) before resend flag char. */\n#ifndef PPP_MAXIDLEFLAG\n#define PPP_MAXIDLEFLAG                 100\n#endif\n\n/*\n * Packet sizes\n *\n * Note - lcp shouldn't be allowed to negotiate stuff outside these\n *    limits.  See lcp.h in the pppd directory.\n * (XXX - these constants should simply be shared by lcp.c instead\n *    of living in lcp.h)\n */\n#define PPP_MTU                         1500     /* Default MTU (size of Info field) */\n#ifndef PPP_MAXMTU\n/* #define PPP_MAXMTU  65535 - (PPP_HDRLEN + PPP_FCSLEN) */\n#define PPP_MAXMTU                      1500 /* Largest MTU we allow */\n#endif\n#define PPP_MINMTU                      64\n#define PPP_MRU                         1500     /* default MRU = max length of info field */\n#define PPP_MAXMRU                      1500     /* Largest MRU we allow */\n#ifndef PPP_DEFMRU\n#define PPP_DEFMRU                      296             /* Try for this */\n#endif\n#define PPP_MINMRU                      128             /* No MRUs below this */\n\n#ifndef MAXNAMELEN\n#define MAXNAMELEN                      256     /* max length of hostname or name for auth */\n#endif\n#ifndef MAXSECRETLEN\n#define MAXSECRETLEN                    256     /* max length of password or secret */\n#endif\n\n#endif /* PPP_SUPPORT */\n\n/*\n   --------------------------------------\n   ---------- Checksum options ----------\n   --------------------------------------\n*/\n/**\n * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.\n */\n#ifndef CHECKSUM_GEN_IP\n#define CHECKSUM_GEN_IP                 1\n#endif\n \n/**\n * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.\n */\n#ifndef CHECKSUM_GEN_UDP\n#define CHECKSUM_GEN_UDP                1\n#endif\n \n/**\n * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.\n */\n#ifndef CHECKSUM_GEN_TCP\n#define CHECKSUM_GEN_TCP                1\n#endif\n\n/**\n * CHECKSUM_GEN_ICMP==1: Generate checksums in software for outgoing ICMP packets.\n */\n#ifndef CHECKSUM_GEN_ICMP\n#define CHECKSUM_GEN_ICMP               1\n#endif\n \n/**\n * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.\n */\n#ifndef CHECKSUM_CHECK_IP\n#define CHECKSUM_CHECK_IP               1\n#endif\n \n/**\n * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.\n */\n#ifndef CHECKSUM_CHECK_UDP\n#define CHECKSUM_CHECK_UDP              1\n#endif\n\n/**\n * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.\n */\n#ifndef CHECKSUM_CHECK_TCP\n#define CHECKSUM_CHECK_TCP              1\n#endif\n\n/**\n * LWIP_CHECKSUM_ON_COPY==1: Calculate checksum when copying data from\n * application buffers to pbufs.\n */\n#ifndef LWIP_CHECKSUM_ON_COPY\n#define LWIP_CHECKSUM_ON_COPY           0\n#endif\n\n/*\n   ---------------------------------------\n   ---------- IPv6 options ---------------\n   ---------------------------------------\n*/\n/**\n * LWIP_IPV6==1: Enable IPv6\n */\n#ifndef LWIP_IPV6\n#define LWIP_IPV6                       0\n#endif\n\n/**\n * LWIP_IPV6_NUM_ADDRESSES: Number of IPv6 addresses per netif.\n */\n#ifndef LWIP_IPV6_NUM_ADDRESSES\n#define LWIP_IPV6_NUM_ADDRESSES         3\n#endif\n\n/**\n * LWIP_IPV6_FORWARD==1: Forward IPv6 packets across netifs\n */\n#ifndef LWIP_IPV6_FORWARD\n#define LWIP_IPV6_FORWARD               0\n#endif\n\n/**\n * LWIP_ICMP6==1: Enable ICMPv6 (mandatory per RFC)\n */\n#ifndef LWIP_ICMP6\n#define LWIP_ICMP6                      (LWIP_IPV6)\n#endif\n\n/**\n * LWIP_ICMP6_DATASIZE: bytes from original packet to send back in\n * ICMPv6 error messages.\n */\n#ifndef LWIP_ICMP6_DATASIZE\n#define LWIP_ICMP6_DATASIZE             8\n#endif\n\n/**\n * LWIP_ICMP6_HL: default hop limit for ICMPv6 messages\n */\n#ifndef LWIP_ICMP6_HL\n#define LWIP_ICMP6_HL                   255\n#endif\n\n/**\n * LWIP_ICMP6_CHECKSUM_CHECK==1: verify checksum on ICMPv6 packets\n */\n#ifndef LWIP_ICMP6_CHECKSUM_CHECK\n#define LWIP_ICMP6_CHECKSUM_CHECK       1\n#endif\n\n/**\n * LWIP_IPV6_MLD==1: Enable multicast listener discovery protocol.\n */\n#ifndef LWIP_IPV6_MLD\n#define LWIP_IPV6_MLD                   (LWIP_IPV6)\n#endif\n\n/**\n * MEMP_NUM_MLD6_GROUP: Max number of IPv6 multicast that can be joined.\n */\n#ifndef MEMP_NUM_MLD6_GROUP\n#define MEMP_NUM_MLD6_GROUP             4\n#endif\n\n/**\n * LWIP_IPV6_FRAG==1: Fragment outgoing IPv6 packets that are too big.\n */\n#ifndef LWIP_IPV6_FRAG\n#define LWIP_IPV6_FRAG                  0\n#endif\n\n/**\n * LWIP_IPV6_REASS==1: reassemble incoming IPv6 packets that fragmented\n */\n#ifndef LWIP_IPV6_REASS\n#define LWIP_IPV6_REASS                 (LWIP_IPV6)\n#endif\n\n/**\n * LWIP_ND6_QUEUEING==1: queue outgoing IPv6 packets while MAC address\n * is being resolved.\n */\n#ifndef LWIP_ND6_QUEUEING\n#define LWIP_ND6_QUEUEING               (LWIP_IPV6)\n#endif\n\n/**\n * MEMP_NUM_ND6_QUEUE: Max number of IPv6 packets to queue during MAC resolution.\n */\n#ifndef MEMP_NUM_ND6_QUEUE\n#define MEMP_NUM_ND6_QUEUE              20\n#endif\n\n/**\n * LWIP_ND6_NUM_NEIGHBORS: Number of entries in IPv6 neighbor cache\n */\n#ifndef LWIP_ND6_NUM_NEIGHBORS\n#define LWIP_ND6_NUM_NEIGHBORS          10\n#endif\n\n/**\n * LWIP_ND6_NUM_DESTINATIONS: number of entries in IPv6 destination cache\n */\n#ifndef LWIP_ND6_NUM_DESTINATIONS\n#define LWIP_ND6_NUM_DESTINATIONS       10\n#endif\n\n/**\n * LWIP_ND6_NUM_PREFIXES: number of entries in IPv6 on-link prefixes cache\n */\n#ifndef LWIP_ND6_NUM_PREFIXES\n#define LWIP_ND6_NUM_PREFIXES           5\n#endif\n\n/**\n * LWIP_ND6_NUM_ROUTERS: number of entries in IPv6 default router cache\n */\n#ifndef LWIP_ND6_NUM_ROUTERS\n#define LWIP_ND6_NUM_ROUTERS            3\n#endif\n\n/**\n * LWIP_ND6_MAX_MULTICAST_SOLICIT: max number of multicast solicit messages to send\n * (neighbor solicit and router solicit)\n */\n#ifndef LWIP_ND6_MAX_MULTICAST_SOLICIT\n#define LWIP_ND6_MAX_MULTICAST_SOLICIT  3\n#endif\n\n/**\n * LWIP_ND6_MAX_UNICAST_SOLICIT: max number of unicast neighbor solicitation messages\n * to send during neighbor reachability detection.\n */\n#ifndef LWIP_ND6_MAX_UNICAST_SOLICIT\n#define LWIP_ND6_MAX_UNICAST_SOLICIT    3\n#endif\n\n/**\n * Unused: See ND RFC (time in milliseconds).\n */\n#ifndef LWIP_ND6_MAX_ANYCAST_DELAY_TIME\n#define LWIP_ND6_MAX_ANYCAST_DELAY_TIME 1000\n#endif\n\n/**\n * Unused: See ND RFC\n */\n#ifndef LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT\n#define LWIP_ND6_MAX_NEIGHBOR_ADVERTISEMENT  3\n#endif\n\n/**\n * LWIP_ND6_REACHABLE_TIME: default neighbor reachable time (in milliseconds).\n * May be updated by router advertisement messages.\n */\n#ifndef LWIP_ND6_REACHABLE_TIME\n#define LWIP_ND6_REACHABLE_TIME         30000\n#endif\n\n/**\n * LWIP_ND6_RETRANS_TIMER: default retransmission timer for solicitation messages\n */\n#ifndef LWIP_ND6_RETRANS_TIMER\n#define LWIP_ND6_RETRANS_TIMER          1000\n#endif\n\n/**\n * LWIP_ND6_DELAY_FIRST_PROBE_TIME: Delay before first unicast neighbor solicitation\n * message is sent, during neighbor reachability detection.\n */\n#ifndef LWIP_ND6_DELAY_FIRST_PROBE_TIME\n#define LWIP_ND6_DELAY_FIRST_PROBE_TIME 5000\n#endif\n\n/**\n * LWIP_ND6_ALLOW_RA_UPDATES==1: Allow Router Advertisement messages to update\n * Reachable time and retransmission timers, and netif MTU.\n */\n#ifndef LWIP_ND6_ALLOW_RA_UPDATES\n#define LWIP_ND6_ALLOW_RA_UPDATES       1\n#endif\n\n/**\n * LWIP_IPV6_SEND_ROUTER_SOLICIT==1: Send router solicitation messages during\n * network startup.\n */\n#ifndef LWIP_IPV6_SEND_ROUTER_SOLICIT\n#define LWIP_IPV6_SEND_ROUTER_SOLICIT   1\n#endif\n\n/**\n * LWIP_ND6_TCP_REACHABILITY_HINTS==1: Allow TCP to provide Neighbor Discovery\n * with reachability hints for connected destinations. This helps avoid sending\n * unicast neighbor solicitation messages.\n */\n#ifndef LWIP_ND6_TCP_REACHABILITY_HINTS\n#define LWIP_ND6_TCP_REACHABILITY_HINTS 1\n#endif\n\n/**\n * LWIP_IPV6_AUTOCONFIG==1: Enable stateless address autoconfiguration as per RFC 4862.\n */\n#ifndef LWIP_IPV6_AUTOCONFIG\n#define LWIP_IPV6_AUTOCONFIG            (LWIP_IPV6)\n#endif\n\n/**\n * LWIP_IPV6_DUP_DETECT_ATTEMPTS: Number of duplicate address detection attempts.\n */\n#ifndef LWIP_IPV6_DUP_DETECT_ATTEMPTS\n#define LWIP_IPV6_DUP_DETECT_ATTEMPTS   1\n#endif\n\n/**\n * LWIP_IPV6_DHCP6==1: enable DHCPv6 stateful address autoconfiguration.\n */\n#ifndef LWIP_IPV6_DHCP6\n#define LWIP_IPV6_DHCP6                 0\n#endif\n\n/*\n   ---------------------------------------\n   ---------- Hook options ---------------\n   ---------------------------------------\n*/\n\n/* Hooks are undefined by default, define them to a function if you need them. */\n\n/**\n * LWIP_HOOK_IP4_INPUT(pbuf, input_netif):\n * - called from ip_input() (IPv4)\n * - pbuf: received struct pbuf passed to ip_input()\n * - input_netif: struct netif on which the packet has been received\n * Return values:\n * - 0: Hook has not consumed the packet, packet is processed as normal\n * - != 0: Hook has consumed the packet.\n * If the hook consumed the packet, 'pbuf' is in the responsibility of the hook\n * (i.e. free it when done).\n */\n\n/**\n * LWIP_HOOK_IP4_ROUTE(dest):\n * - called from ip_route() (IPv4)\n * - dest: destination IPv4 address\n * Returns the destination netif or NULL if no destination netif is found. In\n * that case, ip_route() continues as normal.\n */\n\n/*\n   ---------------------------------------\n   ---------- Debugging options ----------\n   ---------------------------------------\n*/\n/**\n * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is\n * compared against this value. If it is smaller, then debugging\n * messages are written.\n */\n#ifndef LWIP_DBG_MIN_LEVEL\n#define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL\n#endif\n\n/**\n * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable\n * debug messages of certain types.\n */\n#ifndef LWIP_DBG_TYPES_ON\n#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON\n#endif\n\n/**\n * ETHARP_DEBUG: Enable debugging in etharp.c.\n */\n#ifndef ETHARP_DEBUG\n#define ETHARP_DEBUG                    LWIP_DBG_OFF\n#endif\n\n/**\n * NETIF_DEBUG: Enable debugging in netif.c.\n */\n#ifndef NETIF_DEBUG\n#define NETIF_DEBUG                     LWIP_DBG_OFF\n#endif\n\n/**\n * PBUF_DEBUG: Enable debugging in pbuf.c.\n */\n#ifndef PBUF_DEBUG\n#define PBUF_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * API_LIB_DEBUG: Enable debugging in api_lib.c.\n */\n#ifndef API_LIB_DEBUG\n#define API_LIB_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * API_MSG_DEBUG: Enable debugging in api_msg.c.\n */\n#ifndef API_MSG_DEBUG\n#define API_MSG_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * SOCKETS_DEBUG: Enable debugging in sockets.c.\n */\n#ifndef SOCKETS_DEBUG\n#define SOCKETS_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * ICMP_DEBUG: Enable debugging in icmp.c.\n */\n#ifndef ICMP_DEBUG\n#define ICMP_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * IGMP_DEBUG: Enable debugging in igmp.c.\n */\n#ifndef IGMP_DEBUG\n#define IGMP_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * INET_DEBUG: Enable debugging in inet.c.\n */\n#ifndef INET_DEBUG\n#define INET_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * IP_DEBUG: Enable debugging for IP.\n */\n#ifndef IP_DEBUG\n#define IP_DEBUG                        LWIP_DBG_OFF\n#endif\n\n/**\n * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass.\n */\n#ifndef IP_REASS_DEBUG\n#define IP_REASS_DEBUG                  LWIP_DBG_OFF\n#endif\n\n/**\n * RAW_DEBUG: Enable debugging in raw.c.\n */\n#ifndef RAW_DEBUG\n#define RAW_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * MEM_DEBUG: Enable debugging in mem.c.\n */\n#ifndef MEM_DEBUG\n#define MEM_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * MEMP_DEBUG: Enable debugging in memp.c.\n */\n#ifndef MEMP_DEBUG\n#define MEMP_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * SYS_DEBUG: Enable debugging in sys.c.\n */\n#ifndef SYS_DEBUG\n#define SYS_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * TIMERS_DEBUG: Enable debugging in timers.c.\n */\n#ifndef TIMERS_DEBUG\n#define TIMERS_DEBUG                    LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_DEBUG: Enable debugging for TCP.\n */\n#ifndef TCP_DEBUG\n#define TCP_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug.\n */\n#ifndef TCP_INPUT_DEBUG\n#define TCP_INPUT_DEBUG                 LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit.\n */\n#ifndef TCP_FR_DEBUG\n#define TCP_FR_DEBUG                    LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit\n * timeout.\n */\n#ifndef TCP_RTO_DEBUG\n#define TCP_RTO_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_CWND_DEBUG: Enable debugging for TCP congestion window.\n */\n#ifndef TCP_CWND_DEBUG\n#define TCP_CWND_DEBUG                  LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating.\n */\n#ifndef TCP_WND_DEBUG\n#define TCP_WND_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions.\n */\n#ifndef TCP_OUTPUT_DEBUG\n#define TCP_OUTPUT_DEBUG                LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_RST_DEBUG: Enable debugging for TCP with the RST message.\n */\n#ifndef TCP_RST_DEBUG\n#define TCP_RST_DEBUG                   LWIP_DBG_OFF\n#endif\n\n/**\n * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths.\n */\n#ifndef TCP_QLEN_DEBUG\n#define TCP_QLEN_DEBUG                  LWIP_DBG_OFF\n#endif\n\n/**\n * UDP_DEBUG: Enable debugging in UDP.\n */\n#ifndef UDP_DEBUG\n#define UDP_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * TCPIP_DEBUG: Enable debugging in tcpip.c.\n */\n#ifndef TCPIP_DEBUG\n#define TCPIP_DEBUG                     LWIP_DBG_OFF\n#endif\n\n/**\n * PPP_DEBUG: Enable debugging for PPP.\n */\n#ifndef PPP_DEBUG\n#define PPP_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * SLIP_DEBUG: Enable debugging in slipif.c.\n */\n#ifndef SLIP_DEBUG\n#define SLIP_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * DHCP_DEBUG: Enable debugging in dhcp.c.\n */\n#ifndef DHCP_DEBUG\n#define DHCP_DEBUG                      LWIP_DBG_OFF\n#endif\n\n/**\n * AUTOIP_DEBUG: Enable debugging in autoip.c.\n */\n#ifndef AUTOIP_DEBUG\n#define AUTOIP_DEBUG                    LWIP_DBG_OFF\n#endif\n\n/**\n * SNMP_MSG_DEBUG: Enable debugging for SNMP messages.\n */\n#ifndef SNMP_MSG_DEBUG\n#define SNMP_MSG_DEBUG                  LWIP_DBG_OFF\n#endif\n\n/**\n * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs.\n */\n#ifndef SNMP_MIB_DEBUG\n#define SNMP_MIB_DEBUG                  LWIP_DBG_OFF\n#endif\n\n/**\n * DNS_DEBUG: Enable debugging for DNS.\n */\n#ifndef DNS_DEBUG\n#define DNS_DEBUG                       LWIP_DBG_OFF\n#endif\n\n/**\n * IP6_DEBUG: Enable debugging for IPv6.\n */\n#ifndef IP6_DEBUG\n#define IP6_DEBUG                       LWIP_DBG_OFF\n#endif\n\n#endif /* __LWIP_OPT_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/pbuf.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#ifndef __LWIP_PBUF_H__\n#define __LWIP_PBUF_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/err.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** Currently, the pbuf_custom code is only needed for one specific configuration\n * of IP_FRAG */\n#define LWIP_SUPPORT_CUSTOM_PBUF (IP_FRAG && !IP_FRAG_USES_STATIC_BUF && !LWIP_NETIF_TX_SINGLE_PBUF)\n\n/* @todo: We need a mechanism to prevent wasting memory in every pbuf\n   (TCP vs. UDP, IPv4 vs. IPv6: UDP/IPv4 packets may waste up to 28 bytes) */\n\n#define PBUF_TRANSPORT_HLEN 20\n#if LWIP_IPV6\n#define PBUF_IP_HLEN        40\n#else\n#define PBUF_IP_HLEN        20\n#endif\n\ntypedef enum {\n  PBUF_TRANSPORT,\n  PBUF_IP,\n  PBUF_LINK,\n  PBUF_RAW\n} pbuf_layer;\n\ntypedef enum {\n  PBUF_RAM, /* pbuf data is stored in RAM */\n  PBUF_ROM, /* pbuf data is stored in ROM */\n  PBUF_REF, /* pbuf comes from the pbuf pool */\n  PBUF_POOL /* pbuf payload refers to RAM */\n} pbuf_type;\n\n\n/** indicates this packet's data should be immediately passed to the application */\n#define PBUF_FLAG_PUSH      0x01U\n/** indicates this is a custom pbuf: pbuf_free and pbuf_header handle such a\n    a pbuf differently */\n#define PBUF_FLAG_IS_CUSTOM 0x02U\n/** indicates this pbuf is UDP multicast to be looped back */\n#define PBUF_FLAG_MCASTLOOP 0x04U\n/** indicates this pbuf was received as link-level broadcast */\n#define PBUF_FLAG_LLBCAST   0x08U\n/** indicates this pbuf was received as link-level multicast */\n#define PBUF_FLAG_LLMCAST   0x10U\n/** indicates this pbuf includes a TCP FIN flag */\n#define PBUF_FLAG_TCP_FIN   0x20U\n\nstruct pbuf {\n  /** next pbuf in singly linked pbuf chain */\n  struct pbuf *next;\n\n  /** pointer to the actual data in the buffer */\n  void *payload;\n\n  /**\n   * total length of this buffer and all next buffers in chain\n   * belonging to the same packet.\n   *\n   * For non-queue packet chains this is the invariant:\n   * p->tot_len == p->len + (p->next? p->next->tot_len: 0)\n   */\n  u16_t tot_len;\n\n  /** length of this buffer */\n  u16_t len;\n\n  /** pbuf_type as u8_t instead of enum to save space */\n  u8_t /*pbuf_type*/ type;\n\n  /** misc flags */\n  u8_t flags;\n\n  /**\n   * the reference count always equals the number of pointers\n   * that refer to this pbuf. This can be pointers from an application,\n   * the stack itself, or pbuf->next pointers from a chain.\n   */\n  u16_t ref;\n};\n\n#if LWIP_SUPPORT_CUSTOM_PBUF\n/** Prototype for a function to free a custom pbuf */\ntypedef void (*pbuf_free_custom_fn)(struct pbuf *p);\n\n/** A custom pbuf: like a pbuf, but following a function pointer to free it. */\nstruct pbuf_custom {\n  /** The actual pbuf */\n  struct pbuf pbuf;\n  /** This function is called when pbuf_free deallocates this pbuf(_custom) */\n  pbuf_free_custom_fn custom_free_function;\n};\n#endif /* LWIP_SUPPORT_CUSTOM_PBUF */\n\n#if LWIP_TCP && TCP_QUEUE_OOSEQ\n/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */\n#ifndef PBUF_POOL_FREE_OOSEQ\n#define PBUF_POOL_FREE_OOSEQ 1\n#endif /* PBUF_POOL_FREE_OOSEQ */\n#if NO_SYS && PBUF_POOL_FREE_OOSEQ\nextern volatile u8_t pbuf_free_ooseq_pending;\nvoid pbuf_free_ooseq(void);\n/** When not using sys_check_timeouts(), call PBUF_CHECK_FREE_OOSEQ()\n    at regular intervals from main level to check if ooseq pbufs need to be\n    freed! */\n#define PBUF_CHECK_FREE_OOSEQ() do { if(pbuf_free_ooseq_pending) { \\\n  /* pbuf_alloc() reported PBUF_POOL to be empty -> try to free some \\\n     ooseq queued pbufs now */ \\\n  pbuf_free_ooseq(); }}while(0)\n#endif /* NO_SYS && PBUF_POOL_FREE_OOSEQ*/\n#endif /* LWIP_TCP && TCP_QUEUE_OOSEQ */\n\n/* Initializes the pbuf module. This call is empty for now, but may not be in future. */\n#define pbuf_init()\n\nstruct pbuf *pbuf_alloc(pbuf_layer l, u16_t length, pbuf_type type);\n#if LWIP_SUPPORT_CUSTOM_PBUF\nstruct pbuf *pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type,\n                                 struct pbuf_custom *p, void *payload_mem,\n                                 u16_t payload_mem_len);\n#endif /* LWIP_SUPPORT_CUSTOM_PBUF */\nvoid pbuf_realloc(struct pbuf *p, u16_t size); \nu8_t pbuf_header(struct pbuf *p, s16_t header_size);\nvoid pbuf_ref(struct pbuf *p);\nu8_t pbuf_free(struct pbuf *p);\nu8_t pbuf_clen(struct pbuf *p);  \nvoid pbuf_cat(struct pbuf *head, struct pbuf *tail);\nvoid pbuf_chain(struct pbuf *head, struct pbuf *tail);\nstruct pbuf *pbuf_dechain(struct pbuf *p);\nerr_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from);\nu16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset);\nerr_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len);\nstruct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer);\n#if LWIP_CHECKSUM_ON_COPY\nerr_t pbuf_fill_chksum(struct pbuf *p, u16_t start_offset, const void *dataptr,\n                       u16_t len, u16_t *chksum);\n#endif /* LWIP_CHECKSUM_ON_COPY */\n\nu8_t pbuf_get_at(struct pbuf* p, u16_t offset);\nu16_t pbuf_memcmp(struct pbuf* p, u16_t offset, const void* s2, u16_t n);\nu16_t pbuf_memfind(struct pbuf* p, const void* mem, u16_t mem_len, u16_t start_offset);\nu16_t pbuf_strstr(struct pbuf* p, const char* substr);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_PBUF_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/raw.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_RAW_H__\n#define __LWIP_RAW_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/def.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct raw_pcb;\n\n/** Function prototype for raw pcb receive callback functions.\n * @param arg user supplied argument (raw_pcb.recv_arg)\n * @param pcb the raw_pcb which received data\n * @param p the packet buffer that was received\n * @param addr the remote IP address from which the packet was received\n * @return 1 if the packet was 'eaten' (aka. deleted),\n *         0 if the packet lives on\n * If returning 1, the callback is responsible for freeing the pbuf\n * if it's not used any more.\n */\ntypedef u8_t (*raw_recv_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p,\n    ip_addr_t *addr);\n\n#if LWIP_IPV6\n/** Function prototype for raw pcb IPv6 receive callback functions.\n * @param arg user supplied argument (raw_pcb.recv_arg)\n * @param pcb the raw_pcb which received data\n * @param p the packet buffer that was received\n * @param addr the remote IPv6 address from which the packet was received\n * @return 1 if the packet was 'eaten' (aka. deleted),\n *         0 if the packet lives on\n * If returning 1, the callback is responsible for freeing the pbuf\n * if it's not used any more.\n */\ntypedef u8_t (*raw_recv_ip6_fn)(void *arg, struct raw_pcb *pcb, struct pbuf *p,\n    ip6_addr_t *addr);\n#endif /* LWIP_IPV6 */\n\n#if LWIP_IPV6\n#define RAW_PCB_RECV_IP6  raw_recv_ip6_fn ip6;\n#else\n#define RAW_PCB_RECV_IP6\n#endif /* LWIP_IPV6 */\n\nstruct raw_pcb {\n  /* Common members of all PCB types */\n  IP_PCB;\n\n  struct raw_pcb *next;\n\n  u8_t protocol;\n\n  /** receive callback function */\n  union {\n    raw_recv_fn ip4;\n    RAW_PCB_RECV_IP6\n  } recv;\n  /* user-supplied argument for the recv callback */\n  void *recv_arg;\n};\n\n/* The following functions is the application layer interface to the\n   RAW code. */\nstruct raw_pcb * raw_new        (u8_t proto);\nvoid             raw_remove     (struct raw_pcb *pcb);\nerr_t            raw_bind       (struct raw_pcb *pcb, ip_addr_t *ipaddr);\nerr_t            raw_connect    (struct raw_pcb *pcb, ip_addr_t *ipaddr);\n\nvoid             raw_recv       (struct raw_pcb *pcb, raw_recv_fn recv, void *recv_arg);\nerr_t            raw_sendto     (struct raw_pcb *pcb, struct pbuf *p, ip_addr_t *ipaddr);\nerr_t            raw_send       (struct raw_pcb *pcb, struct pbuf *p);\n\n#if LWIP_IPV6\nstruct raw_pcb * raw_new_ip6   (u8_t proto);\n#define          raw_bind_ip6(pcb, ip6addr) raw_bind(pcb, ip6_2_ip(ip6addr))\n#define          raw_connect_ip6(pcb, ip6addr) raw_connect(pcb, ip6_2_ip(ip6addr))\n#define          raw_recv_ip6(pcb, recv_ip6_fn, recv_arg) raw_recv(pcb, (raw_recv_fn)recv_ip6_fn, recv_arg)\n#define          raw_sendto_ip6(pcb, pbuf, ip6addr) raw_sendto(pcb, pbuf, ip6_2_ip(ip6addr))\n#endif /* LWIP_IPV6 */\n\n/* The following functions are the lower layer interface to RAW. */\nu8_t             raw_input      (struct pbuf *p, struct netif *inp);\n#define raw_init() /* Compatibility define, not init needed. */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_RAW */\n\n#endif /* __LWIP_RAW_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/sio.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n */\n\n/*\n * This is the interface to the platform specific serial IO module\n * It needs to be implemented by those platforms which need SLIP or PPP\n */\n\n#ifndef __SIO_H__\n#define __SIO_H__\n\n#include \"lwip/arch.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* If you want to define sio_fd_t elsewhere or differently,\n   define this in your cc.h file. */\n#ifndef __sio_fd_t_defined\ntypedef void * sio_fd_t;\n#endif\n\n/* The following functions can be defined to something else in your cc.h file\n   or be implemented in your custom sio.c file. */\n\n#ifndef sio_open\n/**\n * Opens a serial device for communication.\n * \n * @param devnum device number\n * @return handle to serial device if successful, NULL otherwise\n */\nsio_fd_t sio_open(u8_t devnum);\n#endif\n\n#ifndef sio_send\n/**\n * Sends a single character to the serial device.\n * \n * @param c character to send\n * @param fd serial device handle\n * \n * @note This function will block until the character can be sent.\n */\nvoid sio_send(u8_t c, sio_fd_t fd);\n#endif\n\n#ifndef sio_recv\n/**\n * Receives a single character from the serial device.\n * \n * @param fd serial device handle\n * \n * @note This function will block until a character is received.\n */\nu8_t sio_recv(sio_fd_t fd);\n#endif\n\n#ifndef sio_read\n/**\n * Reads from the serial device.\n * \n * @param fd serial device handle\n * @param data pointer to data buffer for receiving\n * @param len maximum length (in bytes) of data to receive\n * @return number of bytes actually received - may be 0 if aborted by sio_read_abort\n * \n * @note This function will block until data can be received. The blocking\n * can be cancelled by calling sio_read_abort().\n */\nu32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len);\n#endif\n\n#ifndef sio_tryread\n/**\n * Tries to read from the serial device. Same as sio_read but returns\n * immediately if no data is available and never blocks.\n * \n * @param fd serial device handle\n * @param data pointer to data buffer for receiving\n * @param len maximum length (in bytes) of data to receive\n * @return number of bytes actually received\n */\nu32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len);\n#endif\n\n#ifndef sio_write\n/**\n * Writes to the serial device.\n * \n * @param fd serial device handle\n * @param data pointer to data to send\n * @param len length (in bytes) of data to send\n * @return number of bytes actually sent\n * \n * @note This function will block until all data can be sent.\n */\nu32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len);\n#endif\n\n#ifndef sio_read_abort\n/**\n * Aborts a blocking sio_read() call.\n * \n * @param fd serial device handle\n */\nvoid sio_read_abort(sio_fd_t fd);\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SIO_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/snmp.h",
    "content": "/*\n * Copyright (c) 2001, 2002 Leon Woestenberg <leon.woestenberg@axon.tv>\n * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands.\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Leon Woestenberg <leon.woestenberg@axon.tv>\n *\n */\n#ifndef __LWIP_SNMP_H__\n#define __LWIP_SNMP_H__\n\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"lwip/ip_addr.h\"\n\nstruct udp_pcb;\nstruct netif;\n\n/**\n * @see RFC1213, \"MIB-II, 6. Definitions\"\n */\nenum snmp_ifType {\n  snmp_ifType_other=1,                /* none of the following */\n  snmp_ifType_regular1822,\n  snmp_ifType_hdh1822,\n  snmp_ifType_ddn_x25,\n  snmp_ifType_rfc877_x25,\n  snmp_ifType_ethernet_csmacd,\n  snmp_ifType_iso88023_csmacd,\n  snmp_ifType_iso88024_tokenBus,\n  snmp_ifType_iso88025_tokenRing,\n  snmp_ifType_iso88026_man,\n  snmp_ifType_starLan,\n  snmp_ifType_proteon_10Mbit,\n  snmp_ifType_proteon_80Mbit,\n  snmp_ifType_hyperchannel,\n  snmp_ifType_fddi,\n  snmp_ifType_lapb,\n  snmp_ifType_sdlc,\n  snmp_ifType_ds1,                    /* T-1 */\n  snmp_ifType_e1,                     /* european equiv. of T-1 */\n  snmp_ifType_basicISDN,\n  snmp_ifType_primaryISDN,            /* proprietary serial */\n  snmp_ifType_propPointToPointSerial,\n  snmp_ifType_ppp,\n  snmp_ifType_softwareLoopback,\n  snmp_ifType_eon,                    /* CLNP over IP [11] */\n  snmp_ifType_ethernet_3Mbit,\n  snmp_ifType_nsip,                   /* XNS over IP */\n  snmp_ifType_slip,                   /* generic SLIP */\n  snmp_ifType_ultra,                  /* ULTRA technologies */\n  snmp_ifType_ds3,                    /* T-3 */\n  snmp_ifType_sip,                    /* SMDS */\n  snmp_ifType_frame_relay\n};\n\n#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */\n\n/** SNMP \"sysuptime\" Interval */\n#define SNMP_SYSUPTIME_INTERVAL 10\n\n/** fixed maximum length for object identifier type */\n#define LWIP_SNMP_OBJ_ID_LEN 32\n\n/** internal object identifier representation */\nstruct snmp_obj_id\n{\n  u8_t len;\n  s32_t id[LWIP_SNMP_OBJ_ID_LEN];\n};\n\n/* system */\nvoid snmp_set_sysdesr(u8_t* str, u8_t* len);\nvoid snmp_set_sysobjid(struct snmp_obj_id *oid);\nvoid snmp_get_sysobjid_ptr(struct snmp_obj_id **oid);\nvoid snmp_inc_sysuptime(void);\nvoid snmp_add_sysuptime(u32_t value);\nvoid snmp_get_sysuptime(u32_t *value);\nvoid snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen);\nvoid snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen);\nvoid snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen);\n\n/* network interface */\nvoid snmp_add_ifinoctets(struct netif *ni, u32_t value); \nvoid snmp_inc_ifinucastpkts(struct netif *ni);\nvoid snmp_inc_ifinnucastpkts(struct netif *ni);\nvoid snmp_inc_ifindiscards(struct netif *ni);\nvoid snmp_add_ifoutoctets(struct netif *ni, u32_t value);\nvoid snmp_inc_ifoutucastpkts(struct netif *ni);\nvoid snmp_inc_ifoutnucastpkts(struct netif *ni);\nvoid snmp_inc_ifoutdiscards(struct netif *ni);\nvoid snmp_inc_iflist(void);\nvoid snmp_dec_iflist(void);\n\n/* ARP (for atTable and ipNetToMediaTable) */\nvoid snmp_insert_arpidx_tree(struct netif *ni, ip_addr_t *ip);\nvoid snmp_delete_arpidx_tree(struct netif *ni, ip_addr_t *ip);\n\n/* IP */\nvoid snmp_inc_ipinreceives(void);\nvoid snmp_inc_ipinhdrerrors(void);\nvoid snmp_inc_ipinaddrerrors(void);\nvoid snmp_inc_ipforwdatagrams(void);\nvoid snmp_inc_ipinunknownprotos(void);\nvoid snmp_inc_ipindiscards(void);\nvoid snmp_inc_ipindelivers(void);\nvoid snmp_inc_ipoutrequests(void);\nvoid snmp_inc_ipoutdiscards(void);\nvoid snmp_inc_ipoutnoroutes(void);\nvoid snmp_inc_ipreasmreqds(void);\nvoid snmp_inc_ipreasmoks(void);\nvoid snmp_inc_ipreasmfails(void);\nvoid snmp_inc_ipfragoks(void);\nvoid snmp_inc_ipfragfails(void);\nvoid snmp_inc_ipfragcreates(void);\nvoid snmp_inc_iproutingdiscards(void);\nvoid snmp_insert_ipaddridx_tree(struct netif *ni);\nvoid snmp_delete_ipaddridx_tree(struct netif *ni);\nvoid snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni);\nvoid snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni);\n\n/* ICMP */\nvoid snmp_inc_icmpinmsgs(void);\nvoid snmp_inc_icmpinerrors(void);\nvoid snmp_inc_icmpindestunreachs(void);\nvoid snmp_inc_icmpintimeexcds(void);\nvoid snmp_inc_icmpinparmprobs(void);\nvoid snmp_inc_icmpinsrcquenchs(void);\nvoid snmp_inc_icmpinredirects(void);\nvoid snmp_inc_icmpinechos(void);\nvoid snmp_inc_icmpinechoreps(void);\nvoid snmp_inc_icmpintimestamps(void);\nvoid snmp_inc_icmpintimestampreps(void);\nvoid snmp_inc_icmpinaddrmasks(void);\nvoid snmp_inc_icmpinaddrmaskreps(void);\nvoid snmp_inc_icmpoutmsgs(void);\nvoid snmp_inc_icmpouterrors(void);\nvoid snmp_inc_icmpoutdestunreachs(void);\nvoid snmp_inc_icmpouttimeexcds(void);\nvoid snmp_inc_icmpoutparmprobs(void);\nvoid snmp_inc_icmpoutsrcquenchs(void);\nvoid snmp_inc_icmpoutredirects(void); \nvoid snmp_inc_icmpoutechos(void);\nvoid snmp_inc_icmpoutechoreps(void);\nvoid snmp_inc_icmpouttimestamps(void);\nvoid snmp_inc_icmpouttimestampreps(void);\nvoid snmp_inc_icmpoutaddrmasks(void);\nvoid snmp_inc_icmpoutaddrmaskreps(void);\n\n/* TCP */\nvoid snmp_inc_tcpactiveopens(void);\nvoid snmp_inc_tcppassiveopens(void);\nvoid snmp_inc_tcpattemptfails(void);\nvoid snmp_inc_tcpestabresets(void);\nvoid snmp_inc_tcpinsegs(void);\nvoid snmp_inc_tcpoutsegs(void);\nvoid snmp_inc_tcpretranssegs(void);\nvoid snmp_inc_tcpinerrs(void);\nvoid snmp_inc_tcpoutrsts(void);\n\n/* UDP */\nvoid snmp_inc_udpindatagrams(void);\nvoid snmp_inc_udpnoports(void);\nvoid snmp_inc_udpinerrors(void);\nvoid snmp_inc_udpoutdatagrams(void);\nvoid snmp_insert_udpidx_tree(struct udp_pcb *pcb);\nvoid snmp_delete_udpidx_tree(struct udp_pcb *pcb);\n\n/* SNMP */\nvoid snmp_inc_snmpinpkts(void);\nvoid snmp_inc_snmpoutpkts(void);\nvoid snmp_inc_snmpinbadversions(void);\nvoid snmp_inc_snmpinbadcommunitynames(void);\nvoid snmp_inc_snmpinbadcommunityuses(void);\nvoid snmp_inc_snmpinasnparseerrs(void);\nvoid snmp_inc_snmpintoobigs(void);\nvoid snmp_inc_snmpinnosuchnames(void);\nvoid snmp_inc_snmpinbadvalues(void);\nvoid snmp_inc_snmpinreadonlys(void);\nvoid snmp_inc_snmpingenerrs(void);\nvoid snmp_add_snmpintotalreqvars(u8_t value);\nvoid snmp_add_snmpintotalsetvars(u8_t value);\nvoid snmp_inc_snmpingetrequests(void);\nvoid snmp_inc_snmpingetnexts(void);\nvoid snmp_inc_snmpinsetrequests(void);\nvoid snmp_inc_snmpingetresponses(void);\nvoid snmp_inc_snmpintraps(void);\nvoid snmp_inc_snmpouttoobigs(void);\nvoid snmp_inc_snmpoutnosuchnames(void);\nvoid snmp_inc_snmpoutbadvalues(void);\nvoid snmp_inc_snmpoutgenerrs(void);\nvoid snmp_inc_snmpoutgetrequests(void);\nvoid snmp_inc_snmpoutgetnexts(void);\nvoid snmp_inc_snmpoutsetrequests(void);\nvoid snmp_inc_snmpoutgetresponses(void);\nvoid snmp_inc_snmpouttraps(void);\nvoid snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid);\nvoid snmp_set_snmpenableauthentraps(u8_t *value);\nvoid snmp_get_snmpenableauthentraps(u8_t *value);\n\n/* LWIP_SNMP support not available */\n/* define everything to be empty */\n#else\n\n/* system */\n#define snmp_set_sysdesr(str, len)\n#define snmp_set_sysobjid(oid);\n#define snmp_get_sysobjid_ptr(oid)\n#define snmp_inc_sysuptime()\n#define snmp_add_sysuptime(value)\n#define snmp_get_sysuptime(value)\n#define snmp_set_syscontact(ocstr, ocstrlen);\n#define snmp_set_sysname(ocstr, ocstrlen);\n#define snmp_set_syslocation(ocstr, ocstrlen);\n\n/* network interface */\n#define snmp_add_ifinoctets(ni,value) \n#define snmp_inc_ifinucastpkts(ni)\n#define snmp_inc_ifinnucastpkts(ni)\n#define snmp_inc_ifindiscards(ni)\n#define snmp_add_ifoutoctets(ni,value)\n#define snmp_inc_ifoutucastpkts(ni)\n#define snmp_inc_ifoutnucastpkts(ni)\n#define snmp_inc_ifoutdiscards(ni)\n#define snmp_inc_iflist()\n#define snmp_dec_iflist()\n\n/* ARP */\n#define snmp_insert_arpidx_tree(ni,ip)\n#define snmp_delete_arpidx_tree(ni,ip)\n\n/* IP */\n#define snmp_inc_ipinreceives()\n#define snmp_inc_ipinhdrerrors()\n#define snmp_inc_ipinaddrerrors()\n#define snmp_inc_ipforwdatagrams()\n#define snmp_inc_ipinunknownprotos()\n#define snmp_inc_ipindiscards()\n#define snmp_inc_ipindelivers()\n#define snmp_inc_ipoutrequests()\n#define snmp_inc_ipoutdiscards()\n#define snmp_inc_ipoutnoroutes()\n#define snmp_inc_ipreasmreqds()\n#define snmp_inc_ipreasmoks()\n#define snmp_inc_ipreasmfails()\n#define snmp_inc_ipfragoks()\n#define snmp_inc_ipfragfails()\n#define snmp_inc_ipfragcreates()\n#define snmp_inc_iproutingdiscards()\n#define snmp_insert_ipaddridx_tree(ni)\n#define snmp_delete_ipaddridx_tree(ni)\n#define snmp_insert_iprteidx_tree(dflt, ni)\n#define snmp_delete_iprteidx_tree(dflt, ni)\n\n/* ICMP */\n#define snmp_inc_icmpinmsgs()\n#define snmp_inc_icmpinerrors() \n#define snmp_inc_icmpindestunreachs() \n#define snmp_inc_icmpintimeexcds()\n#define snmp_inc_icmpinparmprobs() \n#define snmp_inc_icmpinsrcquenchs() \n#define snmp_inc_icmpinredirects() \n#define snmp_inc_icmpinechos() \n#define snmp_inc_icmpinechoreps()\n#define snmp_inc_icmpintimestamps() \n#define snmp_inc_icmpintimestampreps()\n#define snmp_inc_icmpinaddrmasks()\n#define snmp_inc_icmpinaddrmaskreps()\n#define snmp_inc_icmpoutmsgs()\n#define snmp_inc_icmpouterrors()\n#define snmp_inc_icmpoutdestunreachs() \n#define snmp_inc_icmpouttimeexcds() \n#define snmp_inc_icmpoutparmprobs()\n#define snmp_inc_icmpoutsrcquenchs()\n#define snmp_inc_icmpoutredirects() \n#define snmp_inc_icmpoutechos() \n#define snmp_inc_icmpoutechoreps()\n#define snmp_inc_icmpouttimestamps()\n#define snmp_inc_icmpouttimestampreps()\n#define snmp_inc_icmpoutaddrmasks()\n#define snmp_inc_icmpoutaddrmaskreps()\n/* TCP */\n#define snmp_inc_tcpactiveopens()\n#define snmp_inc_tcppassiveopens()\n#define snmp_inc_tcpattemptfails()\n#define snmp_inc_tcpestabresets()\n#define snmp_inc_tcpinsegs()\n#define snmp_inc_tcpoutsegs()\n#define snmp_inc_tcpretranssegs()\n#define snmp_inc_tcpinerrs()\n#define snmp_inc_tcpoutrsts()\n\n/* UDP */\n#define snmp_inc_udpindatagrams()\n#define snmp_inc_udpnoports()\n#define snmp_inc_udpinerrors()\n#define snmp_inc_udpoutdatagrams()\n#define snmp_insert_udpidx_tree(pcb)\n#define snmp_delete_udpidx_tree(pcb)\n\n/* SNMP */\n#define snmp_inc_snmpinpkts()\n#define snmp_inc_snmpoutpkts()\n#define snmp_inc_snmpinbadversions()\n#define snmp_inc_snmpinbadcommunitynames()\n#define snmp_inc_snmpinbadcommunityuses()\n#define snmp_inc_snmpinasnparseerrs()\n#define snmp_inc_snmpintoobigs()\n#define snmp_inc_snmpinnosuchnames()\n#define snmp_inc_snmpinbadvalues()\n#define snmp_inc_snmpinreadonlys()\n#define snmp_inc_snmpingenerrs()\n#define snmp_add_snmpintotalreqvars(value)\n#define snmp_add_snmpintotalsetvars(value)\n#define snmp_inc_snmpingetrequests()\n#define snmp_inc_snmpingetnexts()\n#define snmp_inc_snmpinsetrequests()\n#define snmp_inc_snmpingetresponses()\n#define snmp_inc_snmpintraps()\n#define snmp_inc_snmpouttoobigs()\n#define snmp_inc_snmpoutnosuchnames()\n#define snmp_inc_snmpoutbadvalues()\n#define snmp_inc_snmpoutgenerrs()\n#define snmp_inc_snmpoutgetrequests()\n#define snmp_inc_snmpoutgetnexts()\n#define snmp_inc_snmpoutsetrequests()\n#define snmp_inc_snmpoutgetresponses()\n#define snmp_inc_snmpouttraps()\n#define snmp_get_snmpgrpid_ptr(oid)\n#define snmp_set_snmpenableauthentraps(value)\n#define snmp_get_snmpenableauthentraps(value)\n\n#endif /* LWIP_SNMP */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_SNMP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/snmp_asn1.h",
    "content": "/**\n * @file\n * Abstract Syntax Notation One (ISO 8824, 8825) codec.\n */\n \n/*\n * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * Author: Christiaan Simons <christiaan.simons@axon.tv>\n */\n\n#ifndef __LWIP_SNMP_ASN1_H__\n#define __LWIP_SNMP_ASN1_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/err.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/snmp.h\"\n\n#if LWIP_SNMP\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define SNMP_ASN1_UNIV   (0)    /* (!0x80 | !0x40) */\n#define SNMP_ASN1_APPLIC (0x40) /* (!0x80 |  0x40) */\n#define SNMP_ASN1_CONTXT (0x80) /* ( 0x80 | !0x40) */\n\n#define SNMP_ASN1_CONSTR (0x20) /* ( 0x20) */\n#define SNMP_ASN1_PRIMIT (0)    /* (!0x20) */\n\n/* universal tags */\n#define SNMP_ASN1_INTEG  2\n#define SNMP_ASN1_OC_STR 4\n#define SNMP_ASN1_NUL    5\n#define SNMP_ASN1_OBJ_ID 6\n#define SNMP_ASN1_SEQ    16\n\n/* application specific (SNMP) tags */\n#define SNMP_ASN1_IPADDR 0    /* octet string size(4) */\n#define SNMP_ASN1_COUNTER 1   /* u32_t */\n#define SNMP_ASN1_GAUGE 2     /* u32_t */\n#define SNMP_ASN1_TIMETICKS 3 /* u32_t */\n#define SNMP_ASN1_OPAQUE 4    /* octet string */\n\n/* context specific (SNMP) tags */\n#define SNMP_ASN1_PDU_GET_REQ 0\n#define SNMP_ASN1_PDU_GET_NEXT_REQ 1\n#define SNMP_ASN1_PDU_GET_RESP 2\n#define SNMP_ASN1_PDU_SET_REQ 3\n#define SNMP_ASN1_PDU_TRAP 4\n\nerr_t snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type);\nerr_t snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length);\nerr_t snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value);\nerr_t snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value);\nerr_t snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid);\nerr_t snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw);\n\nvoid snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed);\nvoid snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed);\nvoid snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed);\nvoid snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed);\nerr_t snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type);\nerr_t snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length);\nerr_t snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, u32_t value);\nerr_t snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u16_t octets_needed, s32_t value);\nerr_t snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident);\nerr_t snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u16_t raw_len, u8_t *raw);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_SNMP */\n\n#endif /* __LWIP_SNMP_ASN1_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/snmp_msg.h",
    "content": "/**\n * @file\n * SNMP Agent message handling structures.\n */\n\n/*\n * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * Author: Christiaan Simons <christiaan.simons@axon.tv>\n */\n\n#ifndef __LWIP_SNMP_MSG_H__\n#define __LWIP_SNMP_MSG_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/snmp.h\"\n#include \"lwip/snmp_structs.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/err.h\"\n\n#if LWIP_SNMP\n\n#if SNMP_PRIVATE_MIB\n/* When using a private MIB, you have to create a file 'private_mib.h' that contains\n * a 'struct mib_array_node mib_private' which contains your MIB. */\n#include \"private_mib.h\"\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The listen port of the SNMP agent. Clients have to make their requests to\n   this port. Most standard clients won't work if you change this! */\n#ifndef SNMP_IN_PORT\n#define SNMP_IN_PORT 161\n#endif\n/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't\n   work if you change this! */\n#ifndef SNMP_TRAP_PORT\n#define SNMP_TRAP_PORT 162\n#endif\n\n#define SNMP_ES_NOERROR 0\n#define SNMP_ES_TOOBIG 1\n#define SNMP_ES_NOSUCHNAME 2\n#define SNMP_ES_BADVALUE 3\n#define SNMP_ES_READONLY 4\n#define SNMP_ES_GENERROR 5\n\n#define SNMP_GENTRAP_COLDSTART 0\n#define SNMP_GENTRAP_WARMSTART 1\n#define SNMP_GENTRAP_AUTHFAIL 4\n#define SNMP_GENTRAP_ENTERPRISESPC 6\n\nstruct snmp_varbind\n{\n  /* next pointer, NULL for last in list */\n  struct snmp_varbind *next;\n  /* previous pointer, NULL for first in list */\n  struct snmp_varbind *prev;\n\n  /* object identifier length (in s32_t) */\n  u8_t ident_len;\n  /* object identifier array */\n  s32_t *ident;\n\n  /* object value ASN1 type */\n  u8_t value_type;\n  /* object value length (in u8_t) */\n  u8_t value_len;\n  /* object value */\n  void *value;\n\n  /* encoding varbind seq length length */\n  u8_t seqlenlen;\n  /* encoding object identifier length length */\n  u8_t olenlen;\n  /* encoding object value length length */\n  u8_t vlenlen;\n  /* encoding varbind seq length */\n  u16_t seqlen;\n  /* encoding object identifier length */\n  u16_t olen;\n  /* encoding object value length */\n  u16_t vlen;\n};\n\nstruct snmp_varbind_root\n{\n  struct snmp_varbind *head;\n  struct snmp_varbind *tail;\n  /* number of variable bindings in list */\n  u8_t count;\n  /* encoding varbind-list seq length length */\n  u8_t seqlenlen;\n  /* encoding varbind-list seq length */\n  u16_t seqlen;\n};\n\n/** output response message header length fields */\nstruct snmp_resp_header_lengths\n{\n  /* encoding error-index length length */\n  u8_t erridxlenlen;\n  /* encoding error-status length length */\n  u8_t errstatlenlen;\n  /* encoding request id length length */\n  u8_t ridlenlen;\n  /* encoding pdu length length */\n  u8_t pdulenlen;\n  /* encoding community length length */\n  u8_t comlenlen;\n  /* encoding version length length */\n  u8_t verlenlen;\n  /* encoding sequence length length */\n  u8_t seqlenlen;\n\n  /* encoding error-index length */\n  u16_t erridxlen;\n  /* encoding error-status length */\n  u16_t errstatlen;\n  /* encoding request id length */\n  u16_t ridlen;\n  /* encoding pdu length */\n  u16_t pdulen;\n  /* encoding community length */\n  u16_t comlen;\n  /* encoding version length */\n  u16_t verlen;\n  /* encoding sequence length */\n  u16_t seqlen;\n};\n\n/** output response message header length fields */\nstruct snmp_trap_header_lengths\n{\n  /* encoding timestamp length length */\n  u8_t tslenlen;\n  /* encoding specific-trap length length */\n  u8_t strplenlen;\n  /* encoding generic-trap length length */\n  u8_t gtrplenlen;\n  /* encoding agent-addr length length */\n  u8_t aaddrlenlen;\n  /* encoding enterprise-id length length */\n  u8_t eidlenlen;\n  /* encoding pdu length length */\n  u8_t pdulenlen;\n  /* encoding community length length */\n  u8_t comlenlen;\n  /* encoding version length length */\n  u8_t verlenlen;\n  /* encoding sequence length length */\n  u8_t seqlenlen;\n\n  /* encoding timestamp length */\n  u16_t tslen;\n  /* encoding specific-trap length */\n  u16_t strplen;\n  /* encoding generic-trap length */\n  u16_t gtrplen;\n  /* encoding agent-addr length */\n  u16_t aaddrlen;\n  /* encoding enterprise-id length */\n  u16_t eidlen;\n  /* encoding pdu length */\n  u16_t pdulen;\n  /* encoding community length */\n  u16_t comlen;\n  /* encoding version length */\n  u16_t verlen;\n  /* encoding sequence length */\n  u16_t seqlen;\n};\n\n/* Accepting new SNMP messages. */\n#define SNMP_MSG_EMPTY                 0\n/* Search for matching object for variable binding. */\n#define SNMP_MSG_SEARCH_OBJ            1\n/* Perform SNMP operation on in-memory object.\n   Pass-through states, for symmetry only. */\n#define SNMP_MSG_INTERNAL_GET_OBJDEF   2\n#define SNMP_MSG_INTERNAL_GET_VALUE    3\n#define SNMP_MSG_INTERNAL_SET_TEST     4\n#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5\n#define SNMP_MSG_INTERNAL_SET_VALUE    6\n/* Perform SNMP operation on object located externally.\n   In theory this could be used for building a proxy agent.\n   Practical use is for an enterprise spc. app. gateway. */\n#define SNMP_MSG_EXTERNAL_GET_OBJDEF   7\n#define SNMP_MSG_EXTERNAL_GET_VALUE    8\n#define SNMP_MSG_EXTERNAL_SET_TEST     9\n#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10\n#define SNMP_MSG_EXTERNAL_SET_VALUE    11\n\n#define SNMP_COMMUNITY_STR_LEN 64\nstruct snmp_msg_pstat\n{\n  /* lwIP local port (161) binding */\n  struct udp_pcb *pcb;\n  /* source IP address */\n  ip_addr_t sip;\n  /* source UDP port */\n  u16_t sp;\n  /* request type */\n  u8_t rt;\n  /* request ID */\n  s32_t rid;\n  /* error status */\n  s32_t error_status;\n  /* error index */\n  s32_t error_index;\n  /* community name (zero terminated) */\n  u8_t community[SNMP_COMMUNITY_STR_LEN + 1];\n  /* community string length (exclusive zero term) */\n  u8_t com_strlen;\n  /* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */\n  u8_t state;\n  /* saved arguments for MSG_EXTERNAL_x */\n  struct mib_external_node *ext_mib_node;\n  struct snmp_name_ptr ext_name_ptr;\n  struct obj_def ext_object_def;\n  struct snmp_obj_id ext_oid;\n  /* index into input variable binding list */\n  u8_t vb_idx;\n  /* ptr into input variable binding list */\n  struct snmp_varbind *vb_ptr;\n  /* list of variable bindings from input */\n  struct snmp_varbind_root invb;\n  /* list of variable bindings to output */\n  struct snmp_varbind_root outvb;\n  /* output response lengths used in ASN encoding */\n  struct snmp_resp_header_lengths rhl;\n};\n\nstruct snmp_msg_trap\n{\n  /* lwIP local port (161) binding */\n  struct udp_pcb *pcb;\n  /* destination IP address in network order */\n  ip_addr_t dip;\n\n  /* source enterprise ID (sysObjectID) */\n  struct snmp_obj_id *enterprise;\n  /* source IP address, raw network order format */\n  u8_t sip_raw[4];\n  /* generic trap code */\n  u32_t gen_trap;\n  /* specific trap code */\n  u32_t spc_trap;\n  /* timestamp */\n  u32_t ts;\n  /* list of variable bindings to output */\n  struct snmp_varbind_root outvb;\n  /* output trap lengths used in ASN encoding */\n  struct snmp_trap_header_lengths thl;\n};\n\n/** Agent Version constant, 0 = v1 oddity */\nextern const s32_t snmp_version;\n/** Agent default \"public\" community string */\nextern const char snmp_publiccommunity[7];\n\nextern struct snmp_msg_trap trap_msg;\n\n/** Agent setup, start listening to port 161. */\nvoid snmp_init(void);\nvoid snmp_trap_dst_enable(u8_t dst_idx, u8_t enable);\nvoid snmp_trap_dst_ip_set(u8_t dst_idx, ip_addr_t *dst);\n\n/** Varbind-list functions. */\nstruct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len);\nvoid snmp_varbind_free(struct snmp_varbind *vb);\nvoid snmp_varbind_list_free(struct snmp_varbind_root *root);\nvoid snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb);\nstruct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root);\n\n/** Handle an internal (recv) or external (private response) event. */\nvoid snmp_msg_event(u8_t request_id);\nerr_t snmp_send_response(struct snmp_msg_pstat *m_stat);\nerr_t snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap);\nvoid snmp_coldstart_trap(void);\nvoid snmp_authfail_trap(void);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_SNMP */\n\n#endif /* __LWIP_SNMP_MSG_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/snmp_structs.h",
    "content": "/**\n * @file\n * Generic MIB tree structures.\n *\n * @todo namespace prefixes\n */\n\n/*\n * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\n * OF 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) ARISING\n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY\n * OF SUCH DAMAGE.\n *\n * Author: Christiaan Simons <christiaan.simons@axon.tv>\n */\n\n#ifndef __LWIP_SNMP_STRUCTS_H__\n#define __LWIP_SNMP_STRUCTS_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/snmp.h\"\n\n#if SNMP_PRIVATE_MIB\n/* When using a private MIB, you have to create a file 'private_mib.h' that contains\n * a 'struct mib_array_node mib_private' which contains your MIB. */\n#include \"private_mib.h\"\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* MIB object instance */\n#define MIB_OBJECT_NONE 0 \n#define MIB_OBJECT_SCALAR 1\n#define MIB_OBJECT_TAB 2\n\n/* MIB access types */\n#define MIB_ACCESS_READ   1\n#define MIB_ACCESS_WRITE  2\n\n/* MIB object access */\n#define MIB_OBJECT_READ_ONLY      MIB_ACCESS_READ\n#define MIB_OBJECT_READ_WRITE     (MIB_ACCESS_READ | MIB_ACCESS_WRITE)\n#define MIB_OBJECT_WRITE_ONLY     MIB_ACCESS_WRITE\n#define MIB_OBJECT_NOT_ACCESSIBLE 0\n\n/** object definition returned by (get_object_def)() */\nstruct obj_def\n{\n  /* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */\n  u8_t instance;\n  /* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */\n  u8_t access;\n  /* ASN type for this object */\n  u8_t asn_type;\n  /* value length (host length) */\n  u16_t v_len;\n  /* length of instance part of supplied object identifier */\n  u8_t  id_inst_len;\n  /* instance part of supplied object identifier */\n  s32_t *id_inst_ptr;\n};\n\nstruct snmp_name_ptr\n{\n  u8_t ident_len;\n  s32_t *ident;\n};\n\n/** MIB const scalar (.0) node */\n#define MIB_NODE_SC 0x01\n/** MIB const array node */\n#define MIB_NODE_AR 0x02\n/** MIB array node (mem_malloced from RAM) */\n#define MIB_NODE_RA 0x03\n/** MIB list root node (mem_malloced from RAM) */\n#define MIB_NODE_LR 0x04\n/** MIB node for external objects */\n#define MIB_NODE_EX 0x05\n\n/** node \"base class\" layout, the mandatory fields for a node  */\nstruct mib_node\n{\n  /** returns struct obj_def for the given object identifier */\n  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od);\n  /** returns object value for the given object identifier,\n     @note the caller must allocate at least len bytes for the value */\n  void (*get_value)(struct obj_def *od, u16_t len, void *value);\n  /** tests length and/or range BEFORE setting */\n  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value);\n  /** sets object value, only to be called when set_test()  */\n  void (*set_value)(struct obj_def *od, u16_t len, void *value);  \n  /** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */\n  u8_t node_type;\n  /* array or max list length */\n  u16_t maxlength;\n};\n\n/** derived node for scalars .0 index */\ntypedef struct mib_node mib_scalar_node;\n\n/** derived node, points to a fixed size const array\n    of sub-identifiers plus a 'child' pointer */\nstruct mib_array_node\n{\n  /* inherited \"base class\" members */\n  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od);\n  void (*get_value)(struct obj_def *od, u16_t len, void *value);\n  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value);\n  void (*set_value)(struct obj_def *od, u16_t len, void *value);\n\n  u8_t node_type;\n  u16_t maxlength;\n\n  /* additional struct members */\n  const s32_t *objid;\n  struct mib_node* const *nptr;\n};\n\n/** derived node, points to a fixed size mem_malloced array\n    of sub-identifiers plus a 'child' pointer */\nstruct mib_ram_array_node\n{\n  /* inherited \"base class\" members */\n  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od);\n  void (*get_value)(struct obj_def *od, u16_t len, void *value);\n  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value);\n  void (*set_value)(struct obj_def *od, u16_t len, void *value);\n\n  u8_t node_type;\n  u16_t maxlength;\n\n  /* aditional struct members */\n  s32_t *objid;\n  struct mib_node **nptr;\n};\n\nstruct mib_list_node\n{\n  struct mib_list_node *prev;  \n  struct mib_list_node *next;\n  s32_t objid;\n  struct mib_node *nptr;\n};\n\n/** derived node, points to a doubly linked list\n    of sub-identifiers plus a 'child' pointer */\nstruct mib_list_rootnode\n{\n  /* inherited \"base class\" members */\n  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od);\n  void (*get_value)(struct obj_def *od, u16_t len, void *value);\n  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value);\n  void (*set_value)(struct obj_def *od, u16_t len, void *value);\n\n  u8_t node_type;\n  u16_t maxlength;\n\n  /* additional struct members */\n  struct mib_list_node *head;\n  struct mib_list_node *tail;\n  /* counts list nodes in list  */\n  u16_t count;\n};\n\n/** derived node, has access functions for mib object in external memory or device\n    using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */\nstruct mib_external_node\n{\n  /* inherited \"base class\" members */\n  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od);\n  void (*get_value)(struct obj_def *od, u16_t len, void *value);\n  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value);\n  void (*set_value)(struct obj_def *od, u16_t len, void *value);\n\n  u8_t node_type;\n  u16_t maxlength;\n\n  /* additional struct members */\n  /** points to an external (in memory) record of some sort of addressing\n      information, passed to and interpreted by the funtions below */\n  void* addr_inf;\n  /** tree levels under this node */\n  u8_t tree_levels;\n  /** number of objects at this level */\n  u16_t (*level_length)(void* addr_inf, u8_t level);\n  /** compares object sub identifier with external id\n      return zero when equal, nonzero when unequal */\n  s32_t (*ident_cmp)(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id);\n  void (*get_objid)(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id);\n\n  /** async Questions */\n  void (*get_object_def_q)(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident);\n  void (*get_value_q)(u8_t rid, struct obj_def *od);\n  void (*set_test_q)(u8_t rid, struct obj_def *od);\n  void (*set_value_q)(u8_t rid, struct obj_def *od, u16_t len, void *value);\n  /** async Answers */\n  void (*get_object_def_a)(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od);\n  void (*get_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value);\n  u8_t (*set_test_a)(u8_t rid, struct obj_def *od, u16_t len, void *value);\n  void (*set_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value);\n  /** async Panic Close (agent returns error reply, \n      e.g. used for external transaction cleanup) */\n  void (*get_object_def_pc)(u8_t rid, u8_t ident_len, s32_t *ident);\n  void (*get_value_pc)(u8_t rid, struct obj_def *od);\n  void (*set_test_pc)(u8_t rid, struct obj_def *od);\n  void (*set_value_pc)(u8_t rid, struct obj_def *od);\n};\n\n/** export MIB tree from mib2.c */\nextern const struct mib_array_node internet;\n\n/** dummy function pointers for non-leaf MIB nodes from mib2.c */\nvoid noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od);\nvoid noleafs_get_value(struct obj_def *od, u16_t len, void *value);\nu8_t noleafs_set_test(struct obj_def *od, u16_t len, void *value);\nvoid noleafs_set_value(struct obj_def *od, u16_t len, void *value);\n\nvoid snmp_oidtoip(s32_t *ident, ip_addr_t *ip);\nvoid snmp_iptooid(ip_addr_t *ip, s32_t *ident);\nvoid snmp_ifindextonetif(s32_t ifindex, struct netif **netif);\nvoid snmp_netiftoifindex(struct netif *netif, s32_t *ifidx);\n\nstruct mib_list_node* snmp_mib_ln_alloc(s32_t id);\nvoid snmp_mib_ln_free(struct mib_list_node *ln);\nstruct mib_list_rootnode* snmp_mib_lrn_alloc(void);\nvoid snmp_mib_lrn_free(struct mib_list_rootnode *lrn);\n\ns8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn);\ns8_t snmp_mib_node_find(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **fn);\nstruct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n);\n\nstruct mib_node* snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np);\nstruct mib_node* snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret);\nu8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident);\nu8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_SNMP */\n\n#endif /* __LWIP_SNMP_STRUCTS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/sockets.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n\n#ifndef __LWIP_SOCKETS_H__\n#define __LWIP_SOCKETS_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */\n\n#include <stddef.h> /* for size_t */\n\n#include \"lwip/ip_addr.h\"\n#include \"lwip/inet.h\"\n#include \"lwip/inet6.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* members are in network byte order */\nstruct sockaddr_in {\n  u8_t sin_len;\n  u8_t sin_family;\n  u16_t sin_port;\n  struct in_addr sin_addr;\n#define SIN_ZERO_LEN 8\n  char sin_zero[SIN_ZERO_LEN];\n};\n\n#if LWIP_IPV6\nstruct sockaddr_in6 {\n  u8_t sin6_len;             /* length of this structure */\n  u8_t sin6_family;          /* AF_INET6                 */\n  u16_t sin6_port;           /* Transport layer port #   */\n  u32_t sin6_flowinfo;       /* IPv6 flow information    */\n  struct in6_addr sin6_addr; /* IPv6 address             */\n};\n#endif /* LWIP_IPV6 */\n\nstruct sockaddr {\n  u8_t sa_len;\n  u8_t sa_family;\n#if LWIP_IPV6\n  u8_t sa_data[22];\n#else /* LWIP_IPV6 */\n  u8_t sa_data[14];\n#endif /* LWIP_IPV6 */\n};\n\n/* If your port already typedef's socklen_t, define SOCKLEN_T_DEFINED\n   to prevent this code from redefining it. */\n#if !defined(socklen_t) && !defined(SOCKLEN_T_DEFINED)\ntypedef u32_t socklen_t;\n#endif\n\n/* Socket protocol types (TCP/UDP/RAW) */\n#define SOCK_STREAM     1\n#define SOCK_DGRAM      2\n#define SOCK_RAW        3\n\n/*\n * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c)\n */\n#define  SO_DEBUG       0x0001 /* Unimplemented: turn on debugging info recording */\n#define  SO_ACCEPTCONN  0x0002 /* socket has had listen() */\n#define  SO_REUSEADDR   0x0004 /* Allow local address reuse */\n#define  SO_KEEPALIVE   0x0008 /* keep connections alive */\n#define  SO_DONTROUTE   0x0010 /* Unimplemented: just use interface addresses */\n#define  SO_BROADCAST   0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */\n#define  SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */\n#define  SO_LINGER      0x0080 /* linger on close if data present */\n#define  SO_OOBINLINE   0x0100 /* Unimplemented: leave received OOB data in line */\n#define  SO_REUSEPORT   0x0200 /* Unimplemented: allow local address & port reuse */\n\n#define SO_DONTLINGER   ((int)(~SO_LINGER))\n\n/*\n * Additional options, not kept in so_options.\n */\n#define SO_SNDBUF    0x1001    /* Unimplemented: send buffer size */\n#define SO_RCVBUF    0x1002    /* receive buffer size */\n#define SO_SNDLOWAT  0x1003    /* Unimplemented: send low-water mark */\n#define SO_RCVLOWAT  0x1004    /* Unimplemented: receive low-water mark */\n#define SO_SNDTIMEO  0x1005    /* Unimplemented: send timeout */\n#define SO_RCVTIMEO  0x1006    /* receive timeout */\n#define SO_ERROR     0x1007    /* get error status and clear */\n#define SO_TYPE      0x1008    /* get socket type */\n#define SO_CONTIMEO  0x1009    /* Unimplemented: connect timeout */\n#define SO_NO_CHECK  0x100a    /* don't create UDP checksum */\n\n\n/*\n * Structure used for manipulating linger option.\n */\nstruct linger {\n       int l_onoff;                /* option on/off */\n       int l_linger;               /* linger time */\n};\n\n/*\n * Level number for (get/set)sockopt() to apply to socket itself.\n */\n#define  SOL_SOCKET  0xfff    /* options for socket level */\n\n\n#define AF_UNSPEC       0\n#define AF_INET         2\n#if LWIP_IPV6\n#define AF_INET6        10\n#else /* LWIP_IPV6 */\n#define AF_INET6        AF_UNSPEC\n#endif /* LWIP_IPV6 */\n#define PF_INET         AF_INET\n#define PF_INET6        AF_INET6\n#define PF_UNSPEC       AF_UNSPEC\n\n#define IPPROTO_IP      0\n#define IPPROTO_TCP     6\n#define IPPROTO_UDP     17\n#if LWIP_IPV6\n#define IPPROTO_IPV6    41\n#endif /* LWIP_IPV6 */\n#define IPPROTO_UDPLITE 136\n\n/* Flags we can use with send and recv. */\n#define MSG_PEEK       0x01    /* Peeks at an incoming message */\n#define MSG_WAITALL    0x02    /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */\n#define MSG_OOB        0x04    /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */\n#define MSG_DONTWAIT   0x08    /* Nonblocking i/o for this operation only */\n#define MSG_MORE       0x10    /* Sender will send more */\n\n\n/*\n * Options for level IPPROTO_IP\n */\n#define IP_TOS             1\n#define IP_TTL             2\n\n#if LWIP_TCP\n/*\n * Options for level IPPROTO_TCP\n */\n#define TCP_NODELAY    0x01    /* don't delay send to coalesce packets */\n#define TCP_KEEPALIVE  0x02    /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */\n#define TCP_KEEPIDLE   0x03    /* set pcb->keep_idle  - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */\n#define TCP_KEEPINTVL  0x04    /* set pcb->keep_intvl - Use seconds for get/setsockopt */\n#define TCP_KEEPCNT    0x05    /* set pcb->keep_cnt   - Use number of probes sent for get/setsockopt */\n#endif /* LWIP_TCP */\n\n#if LWIP_IPV6\n/*\n * Options for level IPPROTO_IPV6\n */\n#define IPV6_V6ONLY 27 /* RFC3493: boolean control to restrict AF_INET6 sockets to IPv6 communications only. */\n#endif /* LWIP_IPV6 */\n\n#if LWIP_UDP && LWIP_UDPLITE\n/*\n * Options for level IPPROTO_UDPLITE\n */\n#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */\n#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */\n#endif /* LWIP_UDP && LWIP_UDPLITE*/\n\n\n#if LWIP_IGMP\n/*\n * Options and types for UDP multicast traffic handling\n */\n#define IP_ADD_MEMBERSHIP  3\n#define IP_DROP_MEMBERSHIP 4\n#define IP_MULTICAST_TTL   5\n#define IP_MULTICAST_IF    6\n#define IP_MULTICAST_LOOP  7\n\ntypedef struct ip_mreq {\n    struct in_addr imr_multiaddr; /* IP multicast address of group */\n    struct in_addr imr_interface; /* local IP address of interface */\n} ip_mreq;\n#endif /* LWIP_IGMP */\n\n/*\n * The Type of Service provides an indication of the abstract\n * parameters of the quality of service desired.  These parameters are\n * to be used to guide the selection of the actual service parameters\n * when transmitting a datagram through a particular network.  Several\n * networks offer service precedence, which somehow treats high\n * precedence traffic as more important than other traffic (generally\n * by accepting only traffic above a certain precedence at time of high\n * load).  The major choice is a three way tradeoff between low-delay,\n * high-reliability, and high-throughput.\n * The use of the Delay, Throughput, and Reliability indications may\n * increase the cost (in some sense) of the service.  In many networks\n * better performance for one of these parameters is coupled with worse\n * performance on another.  Except for very unusual cases at most two\n * of these three indications should be set.\n */\n#define IPTOS_TOS_MASK          0x1E\n#define IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)\n#define IPTOS_LOWDELAY          0x10\n#define IPTOS_THROUGHPUT        0x08\n#define IPTOS_RELIABILITY       0x04\n#define IPTOS_LOWCOST           0x02\n#define IPTOS_MINCOST           IPTOS_LOWCOST\n\n/*\n * The Network Control precedence designation is intended to be used\n * within a network only.  The actual use and control of that\n * designation is up to each network. The Internetwork Control\n * designation is intended for use by gateway control originators only.\n * If the actual use of these precedence designations is of concern to\n * a particular network, it is the responsibility of that network to\n * control the access to, and use of, those precedence designations.\n */\n#define IPTOS_PREC_MASK                 0xe0\n#define IPTOS_PREC(tos)                ((tos) & IPTOS_PREC_MASK)\n#define IPTOS_PREC_NETCONTROL           0xe0\n#define IPTOS_PREC_INTERNETCONTROL      0xc0\n#define IPTOS_PREC_CRITIC_ECP           0xa0\n#define IPTOS_PREC_FLASHOVERRIDE        0x80\n#define IPTOS_PREC_FLASH                0x60\n#define IPTOS_PREC_IMMEDIATE            0x40\n#define IPTOS_PREC_PRIORITY             0x20\n#define IPTOS_PREC_ROUTINE              0x00\n\n\n/*\n * Commands for ioctlsocket(),  taken from the BSD file fcntl.h.\n * lwip_ioctl only supports FIONREAD and FIONBIO, for now\n *\n * Ioctl's have the command encoded in the lower word,\n * and the size of any in or out parameters in the upper\n * word.  The high 2 bits of the upper word are used\n * to encode the in/out status of the parameter; for now\n * we restrict parameters to at most 128 bytes.\n */\n#if !defined(FIONREAD) || !defined(FIONBIO)\n#define IOCPARM_MASK    0x7fU           /* parameters must be < 128 bytes */\n#define IOC_VOID        0x20000000UL    /* no parameters */\n#define IOC_OUT         0x40000000UL    /* copy out parameters */\n#define IOC_IN          0x80000000UL    /* copy in parameters */\n#define IOC_INOUT       (IOC_IN|IOC_OUT)\n                                        /* 0x20000000 distinguishes new &\n                                           old ioctl's */\n#define _IO(x,y)        (IOC_VOID|((x)<<8)|(y))\n\n#define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))\n\n#define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))\n#endif /* !defined(FIONREAD) || !defined(FIONBIO) */\n\n#ifndef FIONREAD\n#define FIONREAD    _IOR('f', 127, unsigned long) /* get # bytes to read */\n#endif\n#ifndef FIONBIO\n#define FIONBIO     _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */\n#endif\n\n/* Socket I/O Controls: unimplemented */\n#ifndef SIOCSHIWAT\n#define SIOCSHIWAT  _IOW('s',  0, unsigned long)  /* set high watermark */\n#define SIOCGHIWAT  _IOR('s',  1, unsigned long)  /* get high watermark */\n#define SIOCSLOWAT  _IOW('s',  2, unsigned long)  /* set low watermark */\n#define SIOCGLOWAT  _IOR('s',  3, unsigned long)  /* get low watermark */\n#define SIOCATMARK  _IOR('s',  7, unsigned long)  /* at oob mark? */\n#endif\n\n/* commands for fnctl */\n#ifndef F_GETFL\n#define F_GETFL 3\n#endif\n#ifndef F_SETFL\n#define F_SETFL 4\n#endif\n\n/* File status flags and file access modes for fnctl,\n   these are bits in an int. */\n#ifndef O_NONBLOCK\n#define O_NONBLOCK  1 /* nonblocking I/O */\n#endif\n#ifndef O_NDELAY\n#define O_NDELAY    1 /* same as O_NONBLOCK, for compatibility */\n#endif\n\n#ifndef SHUT_RD\n  #define SHUT_RD   0\n  #define SHUT_WR   1\n  #define SHUT_RDWR 2\n#endif\n\n/* FD_SET used for lwip_select */\n#ifndef FD_SET\n  #undef  FD_SETSIZE\n  /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */\n  #define FD_SETSIZE    MEMP_NUM_NETCONN\n  #define FD_SET(n, p)  ((p)->fd_bits[(n)/8] |=  (1 << ((n) & 7)))\n  #define FD_CLR(n, p)  ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))\n  #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] &   (1 << ((n) & 7)))\n  #define FD_ZERO(p)    memset((void*)(p),0,sizeof(*(p)))\n\n  typedef struct fd_set {\n          unsigned char fd_bits [(FD_SETSIZE+7)/8];\n        } fd_set;\n\n#endif /* FD_SET */\n\n/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided\n * by your system, set this to 0 and include <sys/time.h> in cc.h */ \n#ifndef LWIP_TIMEVAL_PRIVATE\n#define LWIP_TIMEVAL_PRIVATE 1\n#endif\n\n#if LWIP_TIMEVAL_PRIVATE\nstruct timeval {\n  long    tv_sec;         /* seconds */\n  long    tv_usec;        /* and microseconds */\n};\n#endif /* LWIP_TIMEVAL_PRIVATE */\n\nvoid lwip_socket_init(void);\n\nint lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen);\nint lwip_bind(int s, const struct sockaddr *name, socklen_t namelen);\nint lwip_shutdown(int s, int how);\nint lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen);\nint lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen);\nint lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);\nint lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);\nint lwip_close(int s);\nint lwip_connect(int s, const struct sockaddr *name, socklen_t namelen);\nint lwip_listen(int s, int backlog);\nint lwip_recv(int s, void *mem, size_t len, int flags);\nint lwip_read(int s, void *mem, size_t len);\nint lwip_recvfrom(int s, void *mem, size_t len, int flags,\n      struct sockaddr *from, socklen_t *fromlen);\nint lwip_send(int s, const void *dataptr, size_t size, int flags);\nint lwip_sendto(int s, const void *dataptr, size_t size, int flags,\n    const struct sockaddr *to, socklen_t tolen);\nint lwip_socket(int domain, int type, int protocol);\nint lwip_write(int s, const void *dataptr, size_t size);\nint lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,\n                struct timeval *timeout);\nint lwip_ioctl(int s, long cmd, void *argp);\nint lwip_fcntl(int s, int cmd, int val);\n\n#if LWIP_COMPAT_SOCKETS\n#define accept(a,b,c)         lwip_accept(a,b,c)\n#define bind(a,b,c)           lwip_bind(a,b,c)\n#define shutdown(a,b)         lwip_shutdown(a,b)\n#define closesocket(s)        lwip_close(s)\n#define connect(a,b,c)        lwip_connect(a,b,c)\n#define getsockname(a,b,c)    lwip_getsockname(a,b,c)\n#define getpeername(a,b,c)    lwip_getpeername(a,b,c)\n#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e)\n#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e)\n#define listen(a,b)           lwip_listen(a,b)\n#define recv(a,b,c,d)         lwip_recv(a,b,c,d)\n#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f)\n#define send(a,b,c,d)         lwip_send(a,b,c,d)\n#define sendto(a,b,c,d,e,f)   lwip_sendto(a,b,c,d,e,f)\n#define socket(a,b,c)         lwip_socket(a,b,c)\n#define select(a,b,c,d,e)     lwip_select(a,b,c,d,e)\n#define ioctlsocket(a,b,c)    lwip_ioctl(a,b,c)\n\n#if LWIP_POSIX_SOCKETS_IO_NAMES\n#define read(a,b,c)           lwip_read(a,b,c)\n#define write(a,b,c)          lwip_write(a,b,c)\n#define close(s)              lwip_close(s)\n#define fcntl(a,b,c)          lwip_fcntl(a,b,c)\n#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */\n\n#endif /* LWIP_COMPAT_SOCKETS */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_SOCKET */\n\n#endif /* __LWIP_SOCKETS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/stats.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_STATS_H__\n#define __LWIP_STATS_H__\n\n#include \"lwip/opt.h\"\n\n#include \"lwip/mem.h\"\n#include \"lwip/memp.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if LWIP_STATS\n\n#ifndef LWIP_STATS_LARGE\n#define LWIP_STATS_LARGE 0\n#endif\n\n#if LWIP_STATS_LARGE\n#define STAT_COUNTER     u32_t\n#define STAT_COUNTER_F   U32_F\n#else\n#define STAT_COUNTER     u16_t\n#define STAT_COUNTER_F   U16_F\n#endif \n\nstruct stats_proto {\n  STAT_COUNTER xmit;             /* Transmitted packets. */\n  STAT_COUNTER recv;             /* Received packets. */\n  STAT_COUNTER fw;               /* Forwarded packets. */\n  STAT_COUNTER drop;             /* Dropped packets. */\n  STAT_COUNTER chkerr;           /* Checksum error. */\n  STAT_COUNTER lenerr;           /* Invalid length error. */\n  STAT_COUNTER memerr;           /* Out of memory error. */\n  STAT_COUNTER rterr;            /* Routing error. */\n  STAT_COUNTER proterr;          /* Protocol error. */\n  STAT_COUNTER opterr;           /* Error in options. */\n  STAT_COUNTER err;              /* Misc error. */\n  STAT_COUNTER cachehit;\n};\n\nstruct stats_igmp {\n  STAT_COUNTER xmit;             /* Transmitted packets. */\n  STAT_COUNTER recv;             /* Received packets. */\n  STAT_COUNTER drop;             /* Dropped packets. */\n  STAT_COUNTER chkerr;           /* Checksum error. */\n  STAT_COUNTER lenerr;           /* Invalid length error. */\n  STAT_COUNTER memerr;           /* Out of memory error. */\n  STAT_COUNTER proterr;          /* Protocol error. */\n  STAT_COUNTER rx_v1;            /* Received v1 frames. */\n  STAT_COUNTER rx_group;         /* Received group-specific queries. */\n  STAT_COUNTER rx_general;       /* Received general queries. */\n  STAT_COUNTER rx_report;        /* Received reports. */\n  STAT_COUNTER tx_join;          /* Sent joins. */\n  STAT_COUNTER tx_leave;         /* Sent leaves. */\n  STAT_COUNTER tx_report;        /* Sent reports. */\n};\n\nstruct stats_mem {\n#ifdef LWIP_DEBUG\n  const char *name;\n#endif /* LWIP_DEBUG */\n  mem_size_t avail;\n  mem_size_t used;\n  mem_size_t max;\n  STAT_COUNTER err;\n  STAT_COUNTER illegal;\n};\n\nstruct stats_syselem {\n  STAT_COUNTER used;\n  STAT_COUNTER max;\n  STAT_COUNTER err;\n};\n\nstruct stats_sys {\n  struct stats_syselem sem;\n  struct stats_syselem mutex;\n  struct stats_syselem mbox;\n};\n\nstruct stats_ {\n#if LINK_STATS\n  struct stats_proto link;\n#endif\n#if ETHARP_STATS\n  struct stats_proto etharp;\n#endif\n#if IPFRAG_STATS\n  struct stats_proto ip_frag;\n#endif\n#if IP_STATS\n  struct stats_proto ip;\n#endif\n#if ICMP_STATS\n  struct stats_proto icmp;\n#endif\n#if IGMP_STATS\n  struct stats_igmp igmp;\n#endif\n#if UDP_STATS\n  struct stats_proto udp;\n#endif\n#if TCP_STATS\n  struct stats_proto tcp;\n#endif\n#if MEM_STATS\n  struct stats_mem mem;\n#endif\n#if MEMP_STATS\n  struct stats_mem memp[MEMP_MAX];\n#endif\n#if SYS_STATS\n  struct stats_sys sys;\n#endif\n#if IP6_STATS\n  struct stats_proto ip6;\n#endif\n#if ICMP6_STATS\n  struct stats_proto icmp6;\n#endif\n#if IP6_FRAG_STATS\n  struct stats_proto ip6_frag;\n#endif\n#if MLD6_STATS\n  struct stats_igmp mld6;\n#endif\n#if ND6_STATS\n  struct stats_proto nd6;\n#endif\n};\n\nextern struct stats_ lwip_stats;\n\nvoid stats_init(void);\n\n#define STATS_INC(x) ++lwip_stats.x\n#define STATS_DEC(x) --lwip_stats.x\n#define STATS_INC_USED(x, y) do { lwip_stats.x.used += y; \\\n                                if (lwip_stats.x.max < lwip_stats.x.used) { \\\n                                    lwip_stats.x.max = lwip_stats.x.used; \\\n                                } \\\n                             } while(0)\n#else /* LWIP_STATS */\n#define stats_init()\n#define STATS_INC(x)\n#define STATS_DEC(x)\n#define STATS_INC_USED(x)\n#endif /* LWIP_STATS */\n\n#if TCP_STATS\n#define TCP_STATS_INC(x) STATS_INC(x)\n#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, \"TCP\")\n#else\n#define TCP_STATS_INC(x)\n#define TCP_STATS_DISPLAY()\n#endif\n\n#if UDP_STATS\n#define UDP_STATS_INC(x) STATS_INC(x)\n#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, \"UDP\")\n#else\n#define UDP_STATS_INC(x)\n#define UDP_STATS_DISPLAY()\n#endif\n\n#if ICMP_STATS\n#define ICMP_STATS_INC(x) STATS_INC(x)\n#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, \"ICMP\")\n#else\n#define ICMP_STATS_INC(x)\n#define ICMP_STATS_DISPLAY()\n#endif\n\n#if IGMP_STATS\n#define IGMP_STATS_INC(x) STATS_INC(x)\n#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp, \"IGMP\")\n#else\n#define IGMP_STATS_INC(x)\n#define IGMP_STATS_DISPLAY()\n#endif\n\n#if IP_STATS\n#define IP_STATS_INC(x) STATS_INC(x)\n#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, \"IP\")\n#else\n#define IP_STATS_INC(x)\n#define IP_STATS_DISPLAY()\n#endif\n\n#if IPFRAG_STATS\n#define IPFRAG_STATS_INC(x) STATS_INC(x)\n#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, \"IP_FRAG\")\n#else\n#define IPFRAG_STATS_INC(x)\n#define IPFRAG_STATS_DISPLAY()\n#endif\n\n#if ETHARP_STATS\n#define ETHARP_STATS_INC(x) STATS_INC(x)\n#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, \"ETHARP\")\n#else\n#define ETHARP_STATS_INC(x)\n#define ETHARP_STATS_DISPLAY()\n#endif\n\n#if LINK_STATS\n#define LINK_STATS_INC(x) STATS_INC(x)\n#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, \"LINK\")\n#else\n#define LINK_STATS_INC(x)\n#define LINK_STATS_DISPLAY()\n#endif\n\n#if MEM_STATS\n#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y\n#define MEM_STATS_INC(x) STATS_INC(mem.x)\n#define MEM_STATS_INC_USED(x, y) STATS_INC_USED(mem, y)\n#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y\n#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, \"HEAP\")\n#else\n#define MEM_STATS_AVAIL(x, y)\n#define MEM_STATS_INC(x)\n#define MEM_STATS_INC_USED(x, y)\n#define MEM_STATS_DEC_USED(x, y)\n#define MEM_STATS_DISPLAY()\n#endif\n\n#if MEMP_STATS\n#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y\n#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x)\n#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x)\n#define MEMP_STATS_INC_USED(x, i) STATS_INC_USED(memp[i], 1)\n#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i)\n#else\n#define MEMP_STATS_AVAIL(x, i, y)\n#define MEMP_STATS_INC(x, i)\n#define MEMP_STATS_DEC(x, i)\n#define MEMP_STATS_INC_USED(x, i)\n#define MEMP_STATS_DISPLAY(i)\n#endif\n\n#if SYS_STATS\n#define SYS_STATS_INC(x) STATS_INC(sys.x)\n#define SYS_STATS_DEC(x) STATS_DEC(sys.x)\n#define SYS_STATS_INC_USED(x) STATS_INC_USED(sys.x, 1)\n#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys)\n#else\n#define SYS_STATS_INC(x)\n#define SYS_STATS_DEC(x)\n#define SYS_STATS_INC_USED(x)\n#define SYS_STATS_DISPLAY()\n#endif\n\n#if IP6_STATS\n#define IP6_STATS_INC(x) STATS_INC(x)\n#define IP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6, \"IPv6\")\n#else\n#define IP6_STATS_INC(x)\n#define IP6_STATS_DISPLAY()\n#endif\n\n#if ICMP6_STATS\n#define ICMP6_STATS_INC(x) STATS_INC(x)\n#define ICMP6_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp6, \"ICMPv6\")\n#else\n#define ICMP6_STATS_INC(x)\n#define ICMP6_STATS_DISPLAY()\n#endif\n\n#if IP6_FRAG_STATS\n#define IP6_FRAG_STATS_INC(x) STATS_INC(x)\n#define IP6_FRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip6_frag, \"IPv6 FRAG\")\n#else\n#define IP6_FRAG_STATS_INC(x)\n#define IP6_FRAG_STATS_DISPLAY()\n#endif\n\n#if MLD6_STATS\n#define MLD6_STATS_INC(x) STATS_INC(x)\n#define MLD6_STATS_DISPLAY() stats_display_igmp(&lwip_stats.mld6, \"MLDv1\")\n#else\n#define MLD6_STATS_INC(x)\n#define MLD6_STATS_DISPLAY()\n#endif\n\n#if ND6_STATS\n#define ND6_STATS_INC(x) STATS_INC(x)\n#define ND6_STATS_DISPLAY() stats_display_proto(&lwip_stats.nd6, \"ND\")\n#else\n#define ND6_STATS_INC(x)\n#define ND6_STATS_DISPLAY()\n#endif\n\n/* Display of statistics */\n#if LWIP_STATS_DISPLAY\nvoid stats_display(void);\nvoid stats_display_proto(struct stats_proto *proto, const char *name);\nvoid stats_display_igmp(struct stats_igmp *igmp, const char *name);\nvoid stats_display_mem(struct stats_mem *mem, const char *name);\nvoid stats_display_memp(struct stats_mem *mem, int index);\nvoid stats_display_sys(struct stats_sys *sys);\n#else /* LWIP_STATS_DISPLAY */\n#define stats_display()\n#define stats_display_proto(proto, name)\n#define stats_display_igmp(igmp, name)\n#define stats_display_mem(mem, name)\n#define stats_display_memp(mem, index)\n#define stats_display_sys(sys)\n#endif /* LWIP_STATS_DISPLAY */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_STATS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/sys.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_SYS_H__\n#define __LWIP_SYS_H__\n\n#include \"lwip/opt.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if NO_SYS\n\n/* For a totally minimal and standalone system, we provide null\n   definitions of the sys_ functions. */\ntypedef u8_t sys_sem_t;\ntypedef u8_t sys_mutex_t;\ntypedef u8_t sys_mbox_t;\n\n#define sys_sem_new(s, c) ERR_OK\n#define sys_sem_signal(s)\n#define sys_sem_wait(s)\n#define sys_arch_sem_wait(s,t)\n#define sys_sem_free(s)\n#define sys_sem_valid(s) 0\n#define sys_sem_set_invalid(s)\n#define sys_mutex_new(mu) ERR_OK\n#define sys_mutex_lock(mu)\n#define sys_mutex_unlock(mu)\n#define sys_mutex_free(mu)\n#define sys_mutex_valid(mu) 0\n#define sys_mutex_set_invalid(mu)\n#define sys_mbox_new(m, s) ERR_OK\n#define sys_mbox_fetch(m,d)\n#define sys_mbox_tryfetch(m,d)\n#define sys_mbox_post(m,d)\n#define sys_mbox_trypost(m,d)\n#define sys_mbox_free(m)\n#define sys_mbox_valid(m)\n#define sys_mbox_set_invalid(m)\n\n#define sys_thread_new(n,t,a,s,p)\n\n#define sys_msleep(t)\n\n#else /* NO_SYS */\n\n/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */\n#define SYS_ARCH_TIMEOUT 0xffffffffUL\n\n/** sys_mbox_tryfetch() returns SYS_MBOX_EMPTY if appropriate.\n * For now we use the same magic value, but we allow this to change in future.\n */\n#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT \n\n#include \"lwip/err.h\"\n#include \"arch/sys_arch.h\"\n\n/** Function prototype for thread functions */\ntypedef void (*lwip_thread_fn)(void *arg);\n\n/* Function prototypes for functions to be implemented by platform ports\n   (in sys_arch.c) */\n\n/* Mutex functions: */\n\n/** Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores\n    should be used instead */\n#if LWIP_COMPAT_MUTEX\n/* for old ports that don't have mutexes: define them to binary semaphores */\n#define sys_mutex_t                   sys_sem_t\n#define sys_mutex_new(mutex)          sys_sem_new(mutex, 1)\n#define sys_mutex_lock(mutex)         sys_sem_wait(mutex)\n#define sys_mutex_unlock(mutex)       sys_sem_signal(mutex)\n#define sys_mutex_free(mutex)         sys_sem_free(mutex)\n#define sys_mutex_valid(mutex)        sys_sem_valid(mutex)\n#define sys_mutex_set_invalid(mutex)  sys_sem_set_invalid(mutex)\n\n#else /* LWIP_COMPAT_MUTEX */\n\n/** Create a new mutex\n * @param mutex pointer to the mutex to create\n * @return a new mutex */\nerr_t sys_mutex_new(sys_mutex_t *mutex);\n/** Lock a mutex\n * @param mutex the mutex to lock */\nvoid sys_mutex_lock(sys_mutex_t *mutex);\n/** Unlock a mutex\n * @param mutex the mutex to unlock */\nvoid sys_mutex_unlock(sys_mutex_t *mutex);\n/** Delete a semaphore\n * @param mutex the mutex to delete */\nvoid sys_mutex_free(sys_mutex_t *mutex); \n#ifndef sys_mutex_valid\n/** Check if a mutex is valid/allocated: return 1 for valid, 0 for invalid */\nint sys_mutex_valid(sys_mutex_t *mutex);\n#endif\n#ifndef sys_mutex_set_invalid\n/** Set a mutex invalid so that sys_mutex_valid returns 0 */\nvoid sys_mutex_set_invalid(sys_mutex_t *mutex);\n#endif\n#endif /* LWIP_COMPAT_MUTEX */\n\n/* Semaphore functions: */\n\n/** Create a new semaphore\n * @param sem pointer to the semaphore to create\n * @param count initial count of the semaphore\n * @return ERR_OK if successful, another err_t otherwise */\nerr_t sys_sem_new(sys_sem_t *sem, u8_t count);\n/** Signals a semaphore\n * @param sem the semaphore to signal */\nvoid sys_sem_signal(sys_sem_t *sem);\n/** Wait for a semaphore for the specified timeout\n * @param sem the semaphore to wait for\n * @param timeout timeout in milliseconds to wait (0 = wait forever)\n * @return time (in milliseconds) waited for the semaphore\n *         or SYS_ARCH_TIMEOUT on timeout */\nu32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout);\n/** Delete a semaphore\n * @param sem semaphore to delete */\nvoid sys_sem_free(sys_sem_t *sem);\n/** Wait for a semaphore - forever/no timeout */\n#define sys_sem_wait(sem)                  sys_arch_sem_wait(sem, 0)\n#ifndef sys_sem_valid\n/** Check if a sempahore is valid/allocated: return 1 for valid, 0 for invalid */\nint sys_sem_valid(sys_sem_t *sem);\n#endif\n#ifndef sys_sem_set_invalid\n/** Set a semaphore invalid so that sys_sem_valid returns 0 */\nvoid sys_sem_set_invalid(sys_sem_t *sem);\n#endif\n\n/* Time functions. */\n#ifndef sys_msleep\nvoid sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */\n#endif\n\n/* Mailbox functions. */\n\n/** Create a new mbox of specified size\n * @param mbox pointer to the mbox to create\n * @param size (miminum) number of messages in this mbox\n * @return ERR_OK if successful, another err_t otherwise */\nerr_t sys_mbox_new(sys_mbox_t *mbox, int size);\n/** Post a message to an mbox - may not fail\n * -> blocks if full, only used from tasks not from ISR\n * @param mbox mbox to posts the message\n * @param msg message to post (ATTENTION: can be NULL) */\nvoid sys_mbox_post(sys_mbox_t *mbox, void *msg);\n/** Try to post a message to an mbox - may fail if full or ISR\n * @param mbox mbox to posts the message\n * @param msg message to post (ATTENTION: can be NULL) */\nerr_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg);\n/** Wait for a new message to arrive in the mbox\n * @param mbox mbox to get a message from\n * @param msg pointer where the message is stored\n * @param timeout maximum time (in milliseconds) to wait for a message (0 = wait forever)\n * @return time (in milliseconds) waited for a message, may be 0 if not waited\n           or SYS_ARCH_TIMEOUT on timeout\n *         The returned time has to be accurate to prevent timer jitter! */\nu32_t sys_arch_mbox_fetch(sys_mbox_t *mbox, void **msg, u32_t timeout);\n/* Allow port to override with a macro, e.g. special timout for sys_arch_mbox_fetch() */\n#ifndef sys_arch_mbox_tryfetch\n/** Wait for a new message to arrive in the mbox\n * @param mbox mbox to get a message from\n * @param msg pointer where the message is stored\n * @return 0 (milliseconds) if a message has been received\n *         or SYS_MBOX_EMPTY if the mailbox is empty */\nu32_t sys_arch_mbox_tryfetch(sys_mbox_t *mbox, void **msg);\n#endif\n/** For now, we map straight to sys_arch implementation. */\n#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg)\n/** Delete an mbox\n * @param mbox mbox to delete */\nvoid sys_mbox_free(sys_mbox_t *mbox);\n#define sys_mbox_fetch(mbox, msg) sys_arch_mbox_fetch(mbox, msg, 0)\n#ifndef sys_mbox_valid\n/** Check if an mbox is valid/allocated: return 1 for valid, 0 for invalid */\nint sys_mbox_valid(sys_mbox_t *mbox);\n#endif\n#ifndef sys_mbox_set_invalid\n/** Set an mbox invalid so that sys_mbox_valid returns 0 */\nvoid sys_mbox_set_invalid(sys_mbox_t *mbox);\n#endif\n\n/** The only thread function:\n * Creates a new thread\n * @param name human-readable name for the thread (used for debugging purposes)\n * @param thread thread-function\n * @param arg parameter passed to 'thread'\n * @param stacksize stack size in bytes for the new thread (may be ignored by ports)\n * @param prio priority of the new thread (may be ignored by ports) */\nsys_thread_t sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize, int prio);\n\n#endif /* NO_SYS */\n\n/* sys_init() must be called before anthing else. */\nvoid sys_init(void);\n\n#ifndef sys_jiffies\n/** Ticks/jiffies since power up. */\nu32_t sys_jiffies(void);\n#endif\n\n/** Returns the current time in milliseconds,\n * may be the same as sys_jiffies or at least based on it. */\nu32_t sys_now(void);\n\n/* Critical Region Protection */\n/* These functions must be implemented in the sys_arch.c file.\n   In some implementations they can provide a more light-weight protection\n   mechanism than using semaphores. Otherwise semaphores can be used for\n   implementation */\n#ifndef SYS_ARCH_PROTECT\n/** SYS_LIGHTWEIGHT_PROT\n * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection\n * for certain critical regions during buffer allocation, deallocation and memory\n * allocation and deallocation.\n */\n#if SYS_LIGHTWEIGHT_PROT\n\n/** SYS_ARCH_DECL_PROTECT\n * declare a protection variable. This macro will default to defining a variable of\n * type sys_prot_t. If a particular port needs a different implementation, then\n * this macro may be defined in sys_arch.h.\n */\n#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev\n/** SYS_ARCH_PROTECT\n * Perform a \"fast\" protect. This could be implemented by\n * disabling interrupts for an embedded system or by using a semaphore or\n * mutex. The implementation should allow calling SYS_ARCH_PROTECT when\n * already protected. The old protection level is returned in the variable\n * \"lev\". This macro will default to calling the sys_arch_protect() function\n * which should be implemented in sys_arch.c. If a particular port needs a\n * different implementation, then this macro may be defined in sys_arch.h\n */\n#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect()\n/** SYS_ARCH_UNPROTECT\n * Perform a \"fast\" set of the protection level to \"lev\". This could be\n * implemented by setting the interrupt level to \"lev\" within the MACRO or by\n * using a semaphore or mutex.  This macro will default to calling the\n * sys_arch_unprotect() function which should be implemented in\n * sys_arch.c. If a particular port needs a different implementation, then\n * this macro may be defined in sys_arch.h\n */\n#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev)\nsys_prot_t sys_arch_protect(void);\nvoid sys_arch_unprotect(sys_prot_t pval);\n\n#else\n\n#define SYS_ARCH_DECL_PROTECT(lev)\n#define SYS_ARCH_PROTECT(lev)\n#define SYS_ARCH_UNPROTECT(lev)\n\n#endif /* SYS_LIGHTWEIGHT_PROT */\n\n#endif /* SYS_ARCH_PROTECT */\n\n/*\n * Macros to set/get and increase/decrease variables in a thread-safe way.\n * Use these for accessing variable that are used from more than one thread.\n */\n\n#ifndef SYS_ARCH_INC\n#define SYS_ARCH_INC(var, val) do { \\\n                                SYS_ARCH_DECL_PROTECT(old_level); \\\n                                SYS_ARCH_PROTECT(old_level); \\\n                                var += val; \\\n                                SYS_ARCH_UNPROTECT(old_level); \\\n                              } while(0)\n#endif /* SYS_ARCH_INC */\n\n#ifndef SYS_ARCH_DEC\n#define SYS_ARCH_DEC(var, val) do { \\\n                                SYS_ARCH_DECL_PROTECT(old_level); \\\n                                SYS_ARCH_PROTECT(old_level); \\\n                                var -= val; \\\n                                SYS_ARCH_UNPROTECT(old_level); \\\n                              } while(0)\n#endif /* SYS_ARCH_DEC */\n\n#ifndef SYS_ARCH_GET\n#define SYS_ARCH_GET(var, ret) do { \\\n                                SYS_ARCH_DECL_PROTECT(old_level); \\\n                                SYS_ARCH_PROTECT(old_level); \\\n                                ret = var; \\\n                                SYS_ARCH_UNPROTECT(old_level); \\\n                              } while(0)\n#endif /* SYS_ARCH_GET */\n\n#ifndef SYS_ARCH_SET\n#define SYS_ARCH_SET(var, val) do { \\\n                                SYS_ARCH_DECL_PROTECT(old_level); \\\n                                SYS_ARCH_PROTECT(old_level); \\\n                                var = val; \\\n                                SYS_ARCH_UNPROTECT(old_level); \\\n                              } while(0)\n#endif /* SYS_ARCH_SET */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __LWIP_SYS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/tcp.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_TCP_H__\n#define __LWIP_TCP_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/mem.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/icmp.h\"\n#include \"lwip/err.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct tcp_pcb;\n\n/** Function prototype for tcp accept callback functions. Called when a new\n * connection can be accepted on a listening pcb.\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param newpcb The new connection pcb\n * @param err An error code if there has been an error accepting.\n *            Only return ERR_ABRT if you have called tcp_abort from within the\n *            callback function!\n */\ntypedef err_t (*tcp_accept_fn)(void *arg, struct tcp_pcb *newpcb, err_t err);\n\n/** Function prototype for tcp receive callback functions. Called when data has\n * been received.\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param tpcb The connection pcb which received data\n * @param p The received data (or NULL when the connection has been closed!)\n * @param err An error code if there has been an error receiving\n *            Only return ERR_ABRT if you have called tcp_abort from within the\n *            callback function!\n */\ntypedef err_t (*tcp_recv_fn)(void *arg, struct tcp_pcb *tpcb,\n                             struct pbuf *p, err_t err);\n\n/** Function prototype for tcp sent callback functions. Called when sent data has\n * been acknowledged by the remote side. Use it to free corresponding resources.\n * This also means that the pcb has now space available to send new data.\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param tpcb The connection pcb for which data has been acknowledged\n * @param len The amount of bytes acknowledged\n * @return ERR_OK: try to send some data by calling tcp_output\n *            Only return ERR_ABRT if you have called tcp_abort from within the\n *            callback function!\n */\ntypedef err_t (*tcp_sent_fn)(void *arg, struct tcp_pcb *tpcb,\n                              u16_t len);\n\n/** Function prototype for tcp poll callback functions. Called periodically as\n * specified by @see tcp_poll.\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param tpcb tcp pcb\n * @return ERR_OK: try to send some data by calling tcp_output\n *            Only return ERR_ABRT if you have called tcp_abort from within the\n *            callback function!\n */\ntypedef err_t (*tcp_poll_fn)(void *arg, struct tcp_pcb *tpcb);\n\n/** Function prototype for tcp error callback functions. Called when the pcb\n * receives a RST or is unexpectedly closed for any other reason.\n *\n * @note The corresponding pcb is already freed when this callback is called!\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param err Error code to indicate why the pcb has been closed\n *            ERR_ABRT: aborted through tcp_abort or by a TCP timer\n *            ERR_RST: the connection was reset by the remote host\n */\ntypedef void  (*tcp_err_fn)(void *arg, err_t err);\n\n/** Function prototype for tcp connected callback functions. Called when a pcb\n * is connected to the remote side after initiating a connection attempt by\n * calling tcp_connect().\n *\n * @param arg Additional argument to pass to the callback function (@see tcp_arg())\n * @param tpcb The connection pcb which is connected\n * @param err An unused error code, always ERR_OK currently ;-) TODO!\n *            Only return ERR_ABRT if you have called tcp_abort from within the\n *            callback function!\n *\n * @note When a connection attempt fails, the error callback is currently called!\n */\ntypedef err_t (*tcp_connected_fn)(void *arg, struct tcp_pcb *tpcb, err_t err);\n\nenum tcp_state {\n  CLOSED      = 0,\n  LISTEN      = 1,\n  SYN_SENT    = 2,\n  SYN_RCVD    = 3,\n  ESTABLISHED = 4,\n  FIN_WAIT_1  = 5,\n  FIN_WAIT_2  = 6,\n  CLOSE_WAIT  = 7,\n  CLOSING     = 8,\n  LAST_ACK    = 9,\n  TIME_WAIT   = 10\n};\n\n#if LWIP_CALLBACK_API\n  /* Function to call when a listener has been connected.\n   * @param arg user-supplied argument (tcp_pcb.callback_arg)\n   * @param pcb a new tcp_pcb that now is connected\n   * @param err an error argument (TODO: that is current always ERR_OK?)\n   * @return ERR_OK: accept the new connection,\n   *                 any other err_t abortsthe new connection\n   */\n#define DEF_ACCEPT_CALLBACK  tcp_accept_fn accept;\n#else /* LWIP_CALLBACK_API */\n#define DEF_ACCEPT_CALLBACK\n#endif /* LWIP_CALLBACK_API */\n\n/**\n * members common to struct tcp_pcb and struct tcp_listen_pcb\n */\n#define TCP_PCB_COMMON(type) \\\n  type *next; /* for the linked list */ \\\n  void *callback_arg; \\\n  /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \\\n  DEF_ACCEPT_CALLBACK \\\n  enum tcp_state state; /* TCP state */ \\\n  u8_t prio; \\\n  /* ports are in host byte order */ \\\n  int bound_to_netif; \\\n  u16_t local_port; \\\n  char local_netif[3]\n\n\n/* the TCP protocol control block */\nstruct tcp_pcb {\n/** common PCB members */\n  IP_PCB;\n/** protocol specific PCB members */\n  TCP_PCB_COMMON(struct tcp_pcb);\n\n  /* ports are in host byte order */\n  u16_t remote_port;\n  \n  u8_t flags;\n#define TF_ACK_DELAY   ((u8_t)0x01U)   /* Delayed ACK. */\n#define TF_ACK_NOW     ((u8_t)0x02U)   /* Immediate ACK. */\n#define TF_INFR        ((u8_t)0x04U)   /* In fast recovery. */\n#define TF_TIMESTAMP   ((u8_t)0x08U)   /* Timestamp option enabled */\n#define TF_RXCLOSED    ((u8_t)0x10U)   /* rx closed by tcp_shutdown */\n#define TF_FIN         ((u8_t)0x20U)   /* Connection was closed locally (FIN segment enqueued). */\n#define TF_NODELAY     ((u8_t)0x40U)   /* Disable Nagle algorithm */\n#define TF_NAGLEMEMERR ((u8_t)0x80U)   /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */\n\n  /* the rest of the fields are in host byte order\n     as we have to do some math with them */\n\n  /* Timers */\n  u8_t polltmr, pollinterval;\n  u8_t last_timer;\n  u32_t tmr;\n\n  /* receiver variables */\n  u32_t rcv_nxt;   /* next seqno expected */\n  u16_t rcv_wnd;   /* receiver window available */\n  u16_t rcv_ann_wnd; /* receiver window to announce */\n  u32_t rcv_ann_right_edge; /* announced right edge of window */\n\n  /* Retransmission timer. */\n  s16_t rtime;\n\n  u16_t mss;   /* maximum segment size */\n\n  /* RTT (round trip time) estimation variables */\n  u32_t rttest; /* RTT estimate in 500ms ticks */\n  u32_t rtseq;  /* sequence number being timed */\n  s16_t sa, sv; /* @todo document this */\n\n  s16_t rto;    /* retransmission time-out */\n  u8_t nrtx;    /* number of retransmissions */\n\n  /* fast retransmit/recovery */\n  u8_t dupacks;\n  u32_t lastack; /* Highest acknowledged seqno. */\n\n  /* congestion avoidance/control variables */\n  u16_t cwnd;\n  u16_t ssthresh;\n\n  /* sender variables */\n  u32_t snd_nxt;   /* next new seqno to be sent */\n  u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last\n                             window update. */\n  u32_t snd_lbb;       /* Sequence number of next byte to be buffered. */\n  u16_t snd_wnd;   /* sender window */\n  u16_t snd_wnd_max; /* the maximum sender window announced by the remote host */\n\n  u16_t acked;\n\n  u16_t snd_buf;   /* Available buffer space for sending (in bytes). */\n#define TCP_SNDQUEUELEN_OVERFLOW (0xffffU-3)\n  u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */\n\n#if TCP_OVERSIZE\n  /* Extra bytes available at the end of the last pbuf in unsent. */\n  u16_t unsent_oversize;\n#endif /* TCP_OVERSIZE */ \n\n  /* These are ordered by sequence number: */\n  struct tcp_seg *unsent;   /* Unsent (queued) segments. */\n  struct tcp_seg *unacked;  /* Sent but unacknowledged segments. */\n#if TCP_QUEUE_OOSEQ  \n  struct tcp_seg *ooseq;    /* Received out of sequence segments. */\n#endif /* TCP_QUEUE_OOSEQ */\n\n  struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */\n\n#if LWIP_CALLBACK_API\n  /* Function to be called when more send buffer space is available. */\n  tcp_sent_fn sent;\n  /* Function to be called when (in-sequence) data has arrived. */\n  tcp_recv_fn recv;\n  /* Function to be called when a connection has been set up. */\n  tcp_connected_fn connected;\n  /* Function which is called periodically. */\n  tcp_poll_fn poll;\n  /* Function to be called whenever a fatal error occurs. */\n  tcp_err_fn errf;\n#endif /* LWIP_CALLBACK_API */\n\n#if LWIP_TCP_TIMESTAMPS\n  u32_t ts_lastacksent;\n  u32_t ts_recent;\n#endif /* LWIP_TCP_TIMESTAMPS */\n\n  /* idle time before KEEPALIVE is sent */\n  u32_t keep_idle;\n#if LWIP_TCP_KEEPALIVE\n  u32_t keep_intvl;\n  u32_t keep_cnt;\n#endif /* LWIP_TCP_KEEPALIVE */\n  \n  /* Persist timer counter */\n  u8_t persist_cnt;\n  /* Persist timer back-off */\n  u8_t persist_backoff;\n\n  /* KEEPALIVE counter */\n  u8_t keep_cnt_sent;\n};\n\nstruct tcp_pcb_listen {\n/* Common members of all PCB types */\n  IP_PCB;\n/* Protocol specific PCB members */\n  TCP_PCB_COMMON(struct tcp_pcb_listen);\n\n#if TCP_LISTEN_BACKLOG\n  u8_t backlog;\n  u8_t accepts_pending;\n#endif /* TCP_LISTEN_BACKLOG */\n#if LWIP_IPV6\n  u8_t accept_any_ip_version;\n#endif /* LWIP_IPV6 */\n};\n\n#if LWIP_EVENT_API\n\nenum lwip_event {\n  LWIP_EVENT_ACCEPT,\n  LWIP_EVENT_SENT,\n  LWIP_EVENT_RECV,\n  LWIP_EVENT_CONNECTED,\n  LWIP_EVENT_POLL,\n  LWIP_EVENT_ERR\n};\n\nerr_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb,\n         enum lwip_event,\n         struct pbuf *p,\n         u16_t size,\n         err_t err);\n\n#endif /* LWIP_EVENT_API */\n\n/* Application program's interface: */\nstruct tcp_pcb * tcp_new     (void);\n\nvoid             tcp_arg     (struct tcp_pcb *pcb, void *arg);\nvoid             tcp_accept  (struct tcp_pcb *pcb, tcp_accept_fn accept);\nvoid             tcp_recv    (struct tcp_pcb *pcb, tcp_recv_fn recv);\nvoid             tcp_sent    (struct tcp_pcb *pcb, tcp_sent_fn sent);\nvoid             tcp_poll    (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval);\nvoid             tcp_err     (struct tcp_pcb *pcb, tcp_err_fn err);\n\n#define          tcp_mss(pcb)             (((pcb)->flags & TF_TIMESTAMP) ? ((pcb)->mss - 12)  : (pcb)->mss)\n#define          tcp_sndbuf(pcb)          ((pcb)->snd_buf)\n#define          tcp_sndqueuelen(pcb)     ((pcb)->snd_queuelen)\n#define          tcp_nagle_disable(pcb)   ((pcb)->flags |= TF_NODELAY)\n#define          tcp_nagle_enable(pcb)    ((pcb)->flags &= ~TF_NODELAY)\n#define          tcp_nagle_disabled(pcb)  (((pcb)->flags & TF_NODELAY) != 0)\n\n#if TCP_LISTEN_BACKLOG\n#define          tcp_accepted(pcb) do { \\\n  LWIP_ASSERT(\"pcb->state == LISTEN (called for wrong pcb?)\", pcb->state == LISTEN); \\\n  (((struct tcp_pcb_listen *)(pcb))->accepts_pending--); } while(0)\n#else  /* TCP_LISTEN_BACKLOG */\n#define          tcp_accepted(pcb) LWIP_ASSERT(\"pcb->state == LISTEN (called for wrong pcb?)\", \\\n                                               (pcb)->state == LISTEN)\n#endif /* TCP_LISTEN_BACKLOG */\n\nvoid             tcp_recved  (struct tcp_pcb *pcb, u16_t len);\nerr_t            tcp_bind    (struct tcp_pcb *pcb, ip_addr_t *ipaddr,\n                              u16_t port);\nerr_t            tcp_bind_to_netif (struct tcp_pcb *pcb, const char ifname[3]);\nerr_t            tcp_connect (struct tcp_pcb *pcb, ip_addr_t *ipaddr,\n                              u16_t port, tcp_connected_fn connected);\n\nstruct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog);\n#define          tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG)\n\nvoid             tcp_abort (struct tcp_pcb *pcb);\nerr_t            tcp_close   (struct tcp_pcb *pcb);\nerr_t            tcp_shutdown(struct tcp_pcb *pcb, int shut_rx, int shut_tx);\n\n/* Flags for \"apiflags\" parameter in tcp_write */\n#define TCP_WRITE_FLAG_COPY 0x01\n#define TCP_WRITE_FLAG_MORE 0x02\n\nerr_t            tcp_write   (struct tcp_pcb *pcb, const void *dataptr, u16_t len,\n                              u8_t apiflags);\n\nvoid             tcp_setprio (struct tcp_pcb *pcb, u8_t prio);\n\n#define TCP_PRIO_MIN    1\n#define TCP_PRIO_NORMAL 64\n#define TCP_PRIO_MAX    127\n\nerr_t            tcp_output  (struct tcp_pcb *pcb);\n\n\nconst char* tcp_debug_state_str(enum tcp_state s);\n\n#if LWIP_IPV6\nstruct tcp_pcb * tcp_new_ip6 (void);\n#define          tcp_bind_ip6(pcb, ip6addr, port) \\\n                   tcp_bind(pcb, ip6_2_ip(ip6addr), port)\n#define          tcp_connect_ip6(pcb, ip6addr, port, connected) \\\n                   tcp_connect(pcb, ip6_2_ip(ip6addr), port, connected)\nstruct tcp_pcb * tcp_listen_dual_with_backlog(struct tcp_pcb *pcb, u8_t backlog);\n#define          tcp_listen_dual(pcb) tcp_listen_dual_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG)\n#else /* LWIP_IPV6 */\n#define          tcp_listen_dual_with_backlog(pcb, backlog) tcp_listen_with_backlog(pcb, backlog)\n#define          tcp_listen_dual(pcb) tcp_listen(pcb)\n#endif /* LWIP_IPV6 */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_TCP */\n\n#endif /* __LWIP_TCP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/tcp_impl.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_TCP_IMPL_H__\n#define __LWIP_TCP_IMPL_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/tcp.h\"\n#include \"lwip/mem.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/icmp.h\"\n#include \"lwip/err.h\"\n#include \"lwip/ip6.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Functions for interfacing with TCP: */\n\n/* Lower layer interface to TCP: */\nvoid             tcp_init    (void);  /* Initialize this module. */\nvoid             tcp_tmr     (void);  /* Must be called every\n                                         TCP_TMR_INTERVAL\n                                         ms. (Typically 250 ms). */\n/* It is also possible to call these two functions at the right\n   intervals (instead of calling tcp_tmr()). */\nvoid             tcp_slowtmr (void);\nvoid             tcp_fasttmr (void);\n\n\n/* Only used by IP to pass a TCP segment to TCP: */\nvoid             tcp_input   (struct pbuf *p, struct netif *inp);\n/* Used within the TCP code only: */\nstruct tcp_pcb * tcp_alloc   (u8_t prio);\nvoid             tcp_abandon (struct tcp_pcb *pcb, int reset);\nerr_t            tcp_send_empty_ack(struct tcp_pcb *pcb);\nvoid             tcp_rexmit  (struct tcp_pcb *pcb);\nvoid             tcp_rexmit_rto  (struct tcp_pcb *pcb);\nvoid             tcp_rexmit_fast (struct tcp_pcb *pcb);\nu32_t            tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb);\nerr_t            tcp_process_refused_data(struct tcp_pcb *pcb);\n\n/**\n * This is the Nagle algorithm: try to combine user data to send as few TCP\n * segments as possible. Only send if\n * - no previously transmitted data on the connection remains unacknowledged or\n * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or\n * - the only unsent segment is at least pcb->mss bytes long (or there is more\n *   than one unsent segment - with lwIP, this can happen although unsent->len < mss)\n * - or if we are in fast-retransmit (TF_INFR)\n */\n#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \\\n                            ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \\\n                            (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \\\n                              ((tpcb)->unsent->len >= (tpcb)->mss))) || \\\n                            ((tcp_sndbuf(tpcb) == 0) || (tcp_sndqueuelen(tpcb) >= TCP_SND_QUEUELEN)) \\\n                            ) ? 1 : 0)\n#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK)\n\n\n#define TCP_SEQ_LT(a,b)     ((s32_t)((u32_t)(a) - (u32_t)(b)) < 0)\n#define TCP_SEQ_LEQ(a,b)    ((s32_t)((u32_t)(a) - (u32_t)(b)) <= 0)\n#define TCP_SEQ_GT(a,b)     ((s32_t)((u32_t)(a) - (u32_t)(b)) > 0)\n#define TCP_SEQ_GEQ(a,b)    ((s32_t)((u32_t)(a) - (u32_t)(b)) >= 0)\n/* is b<=a<=c? */\n#if 0 /* see bug #10548 */\n#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b))\n#endif\n#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c))\n#define TCP_FIN 0x01U\n#define TCP_SYN 0x02U\n#define TCP_RST 0x04U\n#define TCP_PSH 0x08U\n#define TCP_ACK 0x10U\n#define TCP_URG 0x20U\n#define TCP_ECE 0x40U\n#define TCP_CWR 0x80U\n\n#define TCP_FLAGS 0x3fU\n\n/* Length of the TCP header, excluding options. */\n#define TCP_HLEN 20\n\n#ifndef TCP_TMR_INTERVAL\n#define TCP_TMR_INTERVAL       250  /* The TCP timer interval in milliseconds. */\n#endif /* TCP_TMR_INTERVAL */\n\n#ifndef TCP_FAST_INTERVAL\n#define TCP_FAST_INTERVAL      TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */\n#endif /* TCP_FAST_INTERVAL */\n\n#ifndef TCP_SLOW_INTERVAL\n#define TCP_SLOW_INTERVAL      (2*TCP_TMR_INTERVAL)  /* the coarse grained timeout in milliseconds */\n#endif /* TCP_SLOW_INTERVAL */\n\n#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */\n#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */\n\n#define TCP_OOSEQ_TIMEOUT        6U /* x RTO */\n\n#ifndef TCP_MSL\n#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */\n#endif\n\n/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */\n#ifndef  TCP_KEEPIDLE_DEFAULT\n#define  TCP_KEEPIDLE_DEFAULT     7200000UL /* Default KEEPALIVE timer in milliseconds */\n#endif\n\n#ifndef  TCP_KEEPINTVL_DEFAULT\n#define  TCP_KEEPINTVL_DEFAULT    75000UL   /* Default Time between KEEPALIVE probes in milliseconds */\n#endif\n\n#ifndef  TCP_KEEPCNT_DEFAULT\n#define  TCP_KEEPCNT_DEFAULT      9U        /* Default Counter for KEEPALIVE probes */\n#endif\n\n#define  TCP_MAXIDLE              TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT  /* Maximum KEEPALIVE probe time */\n\n/* Fields are (of course) in network byte order.\n * Some fields are converted to host byte order in tcp_input().\n */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct tcp_hdr {\n  PACK_STRUCT_FIELD(u16_t src);\n  PACK_STRUCT_FIELD(u16_t dest);\n  PACK_STRUCT_FIELD(u32_t seqno);\n  PACK_STRUCT_FIELD(u32_t ackno);\n  PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags);\n  PACK_STRUCT_FIELD(u16_t wnd);\n  PACK_STRUCT_FIELD(u16_t chksum);\n  PACK_STRUCT_FIELD(u16_t urgp);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12)\n#define TCPH_FLAGS(phdr)  (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS)\n\n#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr))\n#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & PP_HTONS((u16_t)(~(u16_t)(TCP_FLAGS)))) | htons(flags))\n#define TCPH_HDRLEN_FLAGS_SET(phdr, len, flags) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | (flags))\n\n#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags))\n#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) )\n\n#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0))\n\n/** Flags used on input processing, not on pcb->flags\n*/\n#define TF_RESET     (u8_t)0x08U   /* Connection was reset. */\n#define TF_CLOSED    (u8_t)0x10U   /* Connection was sucessfully closed. */\n#define TF_GOT_FIN   (u8_t)0x20U   /* Connection was closed by the remote end. */\n\n\n#if LWIP_EVENT_API\n\n#define TCP_EVENT_ACCEPT(pcb,err,ret)    ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                LWIP_EVENT_ACCEPT, NULL, 0, err)\n#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                   LWIP_EVENT_SENT, NULL, space, ERR_OK)\n#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                LWIP_EVENT_RECV, (p), 0, (err))\n#define TCP_EVENT_CLOSED(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                LWIP_EVENT_RECV, NULL, 0, ERR_OK)\n#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                LWIP_EVENT_CONNECTED, NULL, 0, (err))\n#define TCP_EVENT_POLL(pcb,ret)       ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\\\n                LWIP_EVENT_POLL, NULL, 0, ERR_OK)\n#define TCP_EVENT_ERR(errf,arg,err)  lwip_tcp_event((arg), NULL, \\\n                LWIP_EVENT_ERR, NULL, 0, (err))\n\n#else /* LWIP_EVENT_API */\n\n#define TCP_EVENT_ACCEPT(pcb,err,ret)                          \\\n  do {                                                         \\\n    if((pcb)->accept != NULL)                                  \\\n      (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err));  \\\n    else (ret) = ERR_ARG;                                      \\\n  } while (0)\n\n#define TCP_EVENT_SENT(pcb,space,ret)                          \\\n  do {                                                         \\\n    if((pcb)->sent != NULL)                                    \\\n      (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space));  \\\n    else (ret) = ERR_OK;                                       \\\n  } while (0)\n\n#define TCP_EVENT_RECV(pcb,p,err,ret)                          \\\n  do {                                                         \\\n    if((pcb)->recv != NULL) {                                  \\\n      (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err));\\\n    } else {                                                   \\\n      (ret) = tcp_recv_null(NULL, (pcb), (p), (err));          \\\n    }                                                          \\\n  } while (0)\n\n#define TCP_EVENT_CLOSED(pcb,ret)                                \\\n  do {                                                           \\\n    if(((pcb)->recv != NULL)) {                                  \\\n      (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),NULL,ERR_OK);\\\n    } else {                                                     \\\n      (ret) = ERR_OK;                                            \\\n    }                                                            \\\n  } while (0)\n\n#define TCP_EVENT_CONNECTED(pcb,err,ret)                         \\\n  do {                                                           \\\n    if((pcb)->connected != NULL)                                 \\\n      (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \\\n    else (ret) = ERR_OK;                                         \\\n  } while (0)\n\n#define TCP_EVENT_POLL(pcb,ret)                                \\\n  do {                                                         \\\n    if((pcb)->poll != NULL)                                    \\\n      (ret) = (pcb)->poll((pcb)->callback_arg,(pcb));          \\\n    else (ret) = ERR_OK;                                       \\\n  } while (0)\n\n#define TCP_EVENT_ERR(errf,arg,err)                            \\\n  do {                                                         \\\n    if((errf) != NULL)                                         \\\n      (errf)((arg),(err));                                     \\\n  } while (0)\n\n#endif /* LWIP_EVENT_API */\n\n/** Enabled extra-check for TCP_OVERSIZE if LWIP_DEBUG is enabled */\n#if TCP_OVERSIZE && defined(LWIP_DEBUG)\n#define TCP_OVERSIZE_DBGCHECK 1\n#else\n#define TCP_OVERSIZE_DBGCHECK 0\n#endif\n\n/** Don't generate checksum on copy if CHECKSUM_GEN_TCP is disabled */\n#define TCP_CHECKSUM_ON_COPY  (LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_TCP)\n\n/* This structure represents a TCP segment on the unsent, unacked and ooseq queues */\nstruct tcp_seg {\n  struct tcp_seg *next;    /* used when putting segements on a queue */\n  struct pbuf *p;          /* buffer containing data + TCP header */\n  u16_t len;               /* the TCP length of this segment */\n#if TCP_OVERSIZE_DBGCHECK\n  u16_t oversize_left;     /* Extra bytes available at the end of the last\n                              pbuf in unsent (used for asserting vs.\n                              tcp_pcb.unsent_oversized only) */\n#endif /* TCP_OVERSIZE_DBGCHECK */ \n#if TCP_CHECKSUM_ON_COPY\n  u16_t chksum;\n  u8_t  chksum_swapped;\n#endif /* TCP_CHECKSUM_ON_COPY */\n  u8_t  flags;\n#define TF_SEG_OPTS_MSS         (u8_t)0x01U /* Include MSS option. */\n#define TF_SEG_OPTS_TS          (u8_t)0x02U /* Include timestamp option. */\n#define TF_SEG_DATA_CHECKSUMMED (u8_t)0x04U /* ALL data (not the header) is\n                                               checksummed into 'chksum' */\n  struct tcp_hdr *tcphdr;  /* the TCP header */\n};\n\n#define LWIP_TCP_OPT_LENGTH(flags)              \\\n  (flags & TF_SEG_OPTS_MSS ? 4  : 0) +          \\\n  (flags & TF_SEG_OPTS_TS  ? 12 : 0)\n\n/** This returns a TCP header option for MSS in an u32_t */\n#define TCP_BUILD_MSS_OPTION(mss) htonl(0x02040000 | ((mss) & 0xFFFF))\n\n/* Global variables: */\nextern struct tcp_pcb *tcp_input_pcb;\nextern u32_t tcp_ticks;\nextern u8_t tcp_active_pcbs_changed;\n\n/* The TCP PCB lists. */\nunion tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */\n  struct tcp_pcb_listen *listen_pcbs; \n  struct tcp_pcb *pcbs;\n};\nextern struct tcp_pcb *tcp_bound_pcbs;\nextern union tcp_listen_pcbs_t tcp_listen_pcbs;\nextern struct tcp_pcb *tcp_active_pcbs;  /* List of all TCP PCBs that are in a\n              state in which they accept or send\n              data. */\nextern struct tcp_pcb *tcp_tw_pcbs;      /* List of all TCP PCBs in TIME-WAIT. */\n\nextern struct tcp_pcb *tcp_tmp_pcb;      /* Only used for temporary storage. */\n\n/* Axioms about the above lists:   \n   1) Every TCP PCB that is not CLOSED is in one of the lists.\n   2) A PCB is only in one of the lists.\n   3) All PCBs in the tcp_listen_pcbs list is in LISTEN state.\n   4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state.\n*/\n/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB\n   with a PCB list or removes a PCB from a list, respectively. */\n#ifndef TCP_DEBUG_PCB_LISTS\n#define TCP_DEBUG_PCB_LISTS 0\n#endif\n#if TCP_DEBUG_PCB_LISTS\n#define TCP_REG(pcbs, npcb) do {\\\n                            LWIP_DEBUGF(TCP_DEBUG, (\"TCP_REG %p local port %d\\n\", (npcb), (npcb)->local_port)); \\\n                            for(tcp_tmp_pcb = *(pcbs); \\\n          tcp_tmp_pcb != NULL; \\\n        tcp_tmp_pcb = tcp_tmp_pcb->next) { \\\n                                LWIP_ASSERT(\"TCP_REG: already registered\\n\", tcp_tmp_pcb != (npcb)); \\\n                            } \\\n                            LWIP_ASSERT(\"TCP_REG: pcb->state != CLOSED\", ((pcbs) == &tcp_bound_pcbs) || ((npcb)->state != CLOSED)); \\\n                            (npcb)->next = *(pcbs); \\\n                            LWIP_ASSERT(\"TCP_REG: npcb->next != npcb\", (npcb)->next != (npcb)); \\\n                            *(pcbs) = (npcb); \\\n                            LWIP_ASSERT(\"TCP_RMV: tcp_pcbs sane\", tcp_pcbs_sane()); \\\n              tcp_timer_needed(); \\\n                            } while(0)\n#define TCP_RMV(pcbs, npcb) do { \\\n                            LWIP_ASSERT(\"TCP_RMV: pcbs != NULL\", *(pcbs) != NULL); \\\n                            LWIP_DEBUGF(TCP_DEBUG, (\"TCP_RMV: removing %p from %p\\n\", (npcb), *(pcbs))); \\\n                            if(*(pcbs) == (npcb)) { \\\n                               *(pcbs) = (*pcbs)->next; \\\n                            } else for(tcp_tmp_pcb = *(pcbs); tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \\\n                               if(tcp_tmp_pcb->next == (npcb)) { \\\n                                  tcp_tmp_pcb->next = (npcb)->next; \\\n                                  break; \\\n                               } \\\n                            } \\\n                            (npcb)->next = NULL; \\\n                            LWIP_ASSERT(\"TCP_RMV: tcp_pcbs sane\", tcp_pcbs_sane()); \\\n                            LWIP_DEBUGF(TCP_DEBUG, (\"TCP_RMV: removed %p from %p\\n\", (npcb), *(pcbs))); \\\n                            } while(0)\n\n#else /* LWIP_DEBUG */\n\n#define TCP_REG(pcbs, npcb)                        \\\n  do {                                             \\\n    (npcb)->next = *pcbs;                          \\\n    *(pcbs) = (npcb);                              \\\n    tcp_timer_needed();                            \\\n  } while (0)\n\n#define TCP_RMV(pcbs, npcb)                        \\\n  do {                                             \\\n    if(*(pcbs) == (npcb)) {                        \\\n      (*(pcbs)) = (*pcbs)->next;                   \\\n    }                                              \\\n    else {                                         \\\n      for(tcp_tmp_pcb = *pcbs;                     \\\n          tcp_tmp_pcb != NULL;                     \\\n          tcp_tmp_pcb = tcp_tmp_pcb->next) {       \\\n        if(tcp_tmp_pcb->next == (npcb)) {          \\\n          tcp_tmp_pcb->next = (npcb)->next;        \\\n          break;                                   \\\n        }                                          \\\n      }                                            \\\n    }                                              \\\n    (npcb)->next = NULL;                           \\\n  } while(0)\n\n#endif /* LWIP_DEBUG */\n\n#define TCP_REG_ACTIVE(npcb)                       \\\n  do {                                             \\\n    TCP_REG(&tcp_active_pcbs, npcb);               \\\n    tcp_active_pcbs_changed = 1;                   \\\n  } while (0)\n\n#define TCP_RMV_ACTIVE(npcb)                       \\\n  do {                                             \\\n    TCP_RMV(&tcp_active_pcbs, npcb);               \\\n    tcp_active_pcbs_changed = 1;                   \\\n  } while (0)\n\n#define TCP_PCB_REMOVE_ACTIVE(pcb)                 \\\n  do {                                             \\\n    tcp_pcb_remove(&tcp_active_pcbs, pcb);         \\\n    tcp_active_pcbs_changed = 1;                   \\\n  } while (0)\n\n\n/* Internal functions: */\nstruct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb);\nvoid tcp_pcb_purge(struct tcp_pcb *pcb);\nvoid tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb);\n\nvoid tcp_segs_free(struct tcp_seg *seg);\nvoid tcp_seg_free(struct tcp_seg *seg);\nstruct tcp_seg *tcp_seg_copy(struct tcp_seg *seg);\n\n#define tcp_ack(pcb)                               \\\n  do {                                             \\\n    if((pcb)->flags & TF_ACK_DELAY) {              \\\n      (pcb)->flags &= ~TF_ACK_DELAY;               \\\n      (pcb)->flags |= TF_ACK_NOW;                  \\\n    }                                              \\\n    else {                                         \\\n      (pcb)->flags |= TF_ACK_DELAY;                \\\n    }                                              \\\n  } while (0)\n\n#define tcp_ack_now(pcb)                           \\\n  do {                                             \\\n    (pcb)->flags |= TF_ACK_NOW;                    \\\n  } while (0)\n\nerr_t tcp_send_fin(struct tcp_pcb *pcb);\nerr_t tcp_enqueue_flags(struct tcp_pcb *pcb, u8_t flags);\n\nvoid tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg);\n\nvoid tcp_rst_impl(u32_t seqno, u32_t ackno,\n       ipX_addr_t *local_ip, ipX_addr_t *remote_ip,\n       u16_t local_port, u16_t remote_port\n#if LWIP_IPV6\n       , u8_t isipv6\n#endif /* LWIP_IPV6 */\n       );\n#if LWIP_IPV6\n#define tcp_rst(seqno, ackno, local_ip, remote_ip, local_port, remote_port, isipv6) \\\n  tcp_rst_impl(seqno, ackno, local_ip, remote_ip, local_port, remote_port, isipv6)\n#else /* LWIP_IPV6 */\n#define tcp_rst(seqno, ackno, local_ip, remote_ip, local_port, remote_port, isipv6) \\\n  tcp_rst_impl(seqno, ackno, local_ip, remote_ip, local_port, remote_port)\n#endif /* LWIP_IPV6 */\n\nu32_t tcp_next_iss(void);\n\nvoid tcp_keepalive(struct tcp_pcb *pcb);\nvoid tcp_zero_window_probe(struct tcp_pcb *pcb);\n\n#if TCP_CALCULATE_EFF_SEND_MSS\nu16_t tcp_eff_send_mss_impl(u16_t sendmss, ipX_addr_t *dest\n#if LWIP_IPV6\n                           , ipX_addr_t *src, u8_t isipv6\n#endif /* LWIP_IPV6 */\n                           );\n#if LWIP_IPV6\n#define tcp_eff_send_mss(sendmss, src, dest, isipv6) tcp_eff_send_mss_impl(sendmss, dest, src, isipv6)\n#else /* LWIP_IPV6 */\n#define tcp_eff_send_mss(sendmss, src, dest, isipv6) tcp_eff_send_mss_impl(sendmss, dest)\n#endif /* LWIP_IPV6 */\n#endif /* TCP_CALCULATE_EFF_SEND_MSS */\n\n#if LWIP_CALLBACK_API\nerr_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err);\n#endif /* LWIP_CALLBACK_API */\n\n#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG\nvoid tcp_debug_print(struct tcp_hdr *tcphdr);\nvoid tcp_debug_print_flags(u8_t flags);\nvoid tcp_debug_print_state(enum tcp_state s);\nvoid tcp_debug_print_pcbs(void);\ns16_t tcp_pcbs_sane(void);\n#else\n#  define tcp_debug_print(tcphdr)\n#  define tcp_debug_print_flags(flags)\n#  define tcp_debug_print_state(s)\n#  define tcp_debug_print_pcbs()\n#  define tcp_pcbs_sane() 1\n#endif /* TCP_DEBUG */\n\n/** External function (implemented in timers.c), called when TCP detects\n * that a timer is needed (i.e. active- or time-wait-pcb found). */\nvoid tcp_timer_needed(void);\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_TCP */\n\n#endif /* __LWIP_TCP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/tcpip.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_TCPIP_H__\n#define __LWIP_TCPIP_H__\n\n#include \"lwip/opt.h\"\n\n#if !NO_SYS /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/api_msg.h\"\n#include \"lwip/netifapi.h\"\n#include \"lwip/pbuf.h\"\n#include \"lwip/api.h\"\n#include \"lwip/sys.h\"\n#include \"lwip/timers.h\"\n#include \"lwip/netif.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** Define this to something that triggers a watchdog. This is called from\n * tcpip_thread after processing a message. */\n#ifndef LWIP_TCPIP_THREAD_ALIVE\n#define LWIP_TCPIP_THREAD_ALIVE()\n#endif\n\n#if LWIP_TCPIP_CORE_LOCKING\n/** The global semaphore to lock the stack. */\nextern sys_mutex_t lock_tcpip_core;\n#define LOCK_TCPIP_CORE()     sys_mutex_lock(&lock_tcpip_core)\n#define UNLOCK_TCPIP_CORE()   sys_mutex_unlock(&lock_tcpip_core)\n#ifdef LWIP_DEBUG\n#define TCIP_APIMSG_SET_ERR(m, e) (m)->msg.err = e  /* catch functions that don't set err */\n#else\n#define TCIP_APIMSG_SET_ERR(m, e)\n#endif\n#define TCPIP_APIMSG_NOERR(m,f) do { \\\n  TCIP_APIMSG_SET_ERR(m, ERR_VAL); \\\n  LOCK_TCPIP_CORE(); \\\n  f(&((m)->msg)); \\\n  UNLOCK_TCPIP_CORE(); \\\n} while(0)\n#define TCPIP_APIMSG(m,f,e)   do { \\\n  TCPIP_APIMSG_NOERR(m,f); \\\n  (e) = (m)->msg.err; \\\n} while(0)\n#define TCPIP_APIMSG_ACK(m)\n#define TCPIP_NETIFAPI(m)     tcpip_netifapi_lock(m)\n#define TCPIP_NETIFAPI_ACK(m)\n#else /* LWIP_TCPIP_CORE_LOCKING */\n#define LOCK_TCPIP_CORE()\n#define UNLOCK_TCPIP_CORE()\n#define TCPIP_APIMSG_NOERR(m,f) do { (m)->function = f; tcpip_apimsg(m); } while(0)\n#define TCPIP_APIMSG(m,f,e)   do { (m)->function = f; (e) = tcpip_apimsg(m); } while(0)\n#define TCPIP_APIMSG_ACK(m)   sys_sem_signal(&m->conn->op_completed)\n#define TCPIP_NETIFAPI(m)     tcpip_netifapi(m)\n#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(&m->sem)\n#endif /* LWIP_TCPIP_CORE_LOCKING */\n\n/** Function prototype for the init_done function passed to tcpip_init */\ntypedef void (*tcpip_init_done_fn)(void *arg);\n/** Function prototype for functions passed to tcpip_callback() */\ntypedef void (*tcpip_callback_fn)(void *ctx);\n\n/* Forward declarations */\nstruct tcpip_callback_msg;\n\nvoid tcpip_init(tcpip_init_done_fn tcpip_init_done, void *arg);\n\n#if LWIP_NETCONN\nerr_t tcpip_apimsg(struct api_msg *apimsg);\n#endif /* LWIP_NETCONN */\n\nerr_t tcpip_input(struct pbuf *p, struct netif *inp);\n\n#if LWIP_NETIF_API\nerr_t tcpip_netifapi(struct netifapi_msg *netifapimsg);\n#if LWIP_TCPIP_CORE_LOCKING\nerr_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg);\n#endif /* LWIP_TCPIP_CORE_LOCKING */\n#endif /* LWIP_NETIF_API */\n\nerr_t tcpip_callback_with_block(tcpip_callback_fn function, void *ctx, u8_t block);\n#define tcpip_callback(f, ctx)              tcpip_callback_with_block(f, ctx, 1)\n\nstruct tcpip_callback_msg* tcpip_callbackmsg_new(tcpip_callback_fn function, void *ctx);\nvoid   tcpip_callbackmsg_delete(struct tcpip_callback_msg* msg);\nerr_t  tcpip_trycallback(struct tcpip_callback_msg* msg);\n\n/* free pbufs or heap memory from another context without blocking */\nerr_t pbuf_free_callback(struct pbuf *p);\nerr_t mem_free_callback(void *m);\n\n#if LWIP_TCPIP_TIMEOUT\nerr_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg);\nerr_t tcpip_untimeout(sys_timeout_handler h, void *arg);\n#endif /* LWIP_TCPIP_TIMEOUT */\n\nenum tcpip_msg_type {\n#if LWIP_NETCONN\n  TCPIP_MSG_API,\n#endif /* LWIP_NETCONN */\n  TCPIP_MSG_INPKT,\n#if LWIP_NETIF_API\n  TCPIP_MSG_NETIFAPI,\n#endif /* LWIP_NETIF_API */\n#if LWIP_TCPIP_TIMEOUT\n  TCPIP_MSG_TIMEOUT,\n  TCPIP_MSG_UNTIMEOUT,\n#endif /* LWIP_TCPIP_TIMEOUT */\n  TCPIP_MSG_CALLBACK,\n  TCPIP_MSG_CALLBACK_STATIC\n};\n\nstruct tcpip_msg {\n  enum tcpip_msg_type type;\n  sys_sem_t *sem;\n  union {\n#if LWIP_NETCONN\n    struct api_msg *apimsg;\n#endif /* LWIP_NETCONN */\n#if LWIP_NETIF_API\n    struct netifapi_msg *netifapimsg;\n#endif /* LWIP_NETIF_API */\n    struct {\n      struct pbuf *p;\n      struct netif *netif;\n    } inp;\n    struct {\n      tcpip_callback_fn function;\n      void *ctx;\n    } cb;\n#if LWIP_TCPIP_TIMEOUT\n    struct {\n      u32_t msecs;\n      sys_timeout_handler h;\n      void *arg;\n    } tmo;\n#endif /* LWIP_TCPIP_TIMEOUT */\n  } msg;\n};\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* !NO_SYS */\n\n#endif /* __LWIP_TCPIP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/timers.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *         Simon Goldschmidt\n *\n */\n#ifndef __LWIP_TIMERS_H__\n#define __LWIP_TIMERS_H__\n\n#include \"lwip/opt.h\"\n\n/* Timers are not supported when NO_SYS==1 and NO_SYS_NO_TIMERS==1 */\n#define LWIP_TIMERS (!NO_SYS || (NO_SYS && !NO_SYS_NO_TIMERS))\n\n#if LWIP_TIMERS\n\n#include \"lwip/err.h\"\n#if !NO_SYS\n#include \"lwip/sys.h\"\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef LWIP_DEBUG_TIMERNAMES\n#ifdef LWIP_DEBUG\n#define LWIP_DEBUG_TIMERNAMES SYS_DEBUG\n#else /* LWIP_DEBUG */\n#define LWIP_DEBUG_TIMERNAMES 0\n#endif /* LWIP_DEBUG*/\n#endif\n\n/** Function prototype for a timeout callback function. Register such a function\n * using sys_timeout().\n *\n * @param arg Additional argument to pass to the function - set up by sys_timeout()\n */\ntypedef void (* sys_timeout_handler)(void *arg);\n\nstruct sys_timeo {\n  struct sys_timeo *next;\n  u32_t time;\n  sys_timeout_handler h;\n  void *arg;\n#if LWIP_DEBUG_TIMERNAMES\n  const char* handler_name;\n#endif /* LWIP_DEBUG_TIMERNAMES */\n};\n\nvoid sys_timeouts_init(void);\n\n#if LWIP_DEBUG_TIMERNAMES\nvoid sys_timeout_debug(u32_t msecs, sys_timeout_handler handler, void *arg, const char* handler_name);\n#define sys_timeout(msecs, handler, arg) sys_timeout_debug(msecs, handler, arg, #handler)\n#else /* LWIP_DEBUG_TIMERNAMES */\nvoid sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg);\n#endif /* LWIP_DEBUG_TIMERNAMES */\n\nvoid sys_untimeout(sys_timeout_handler handler, void *arg);\n#if NO_SYS\nvoid sys_check_timeouts(void);\nvoid sys_restart_timeouts(void);\n#else /* NO_SYS */\nvoid sys_timeouts_mbox_fetch(sys_mbox_t *mbox, void **msg);\n#endif /* NO_SYS */\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_TIMERS */\n#endif /* __LWIP_TIMERS_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/lwip/udp.h",
    "content": "/*\n * Copyright (c) 2001-2004 Swedish Institute of Computer Science.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __LWIP_UDP_H__\n#define __LWIP_UDP_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/ip.h\"\n#include \"lwip/ip6_addr.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define UDP_HLEN 8\n\n/* Fields are (of course) in network byte order. */\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct udp_hdr {\n  PACK_STRUCT_FIELD(u16_t src);\n  PACK_STRUCT_FIELD(u16_t dest);  /* src/dest UDP ports */\n  PACK_STRUCT_FIELD(u16_t len);\n  PACK_STRUCT_FIELD(u16_t chksum);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define UDP_FLAGS_NOCHKSUM       0x01U\n#define UDP_FLAGS_UDPLITE        0x02U\n#define UDP_FLAGS_CONNECTED      0x04U\n#define UDP_FLAGS_MULTICAST_LOOP 0x08U\n\nstruct udp_pcb;\n\n/** Function prototype for udp pcb receive callback functions\n * addr and port are in same byte order as in the pcb\n * The callback is responsible for freeing the pbuf\n * if it's not used any more.\n *\n * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf\n *            makes 'addr' invalid, too.\n *\n * @param arg user supplied argument (udp_pcb.recv_arg)\n * @param pcb the udp_pcb which received data\n * @param p the packet buffer that was received\n * @param addr the remote IP address from which the packet was received\n * @param port the remote port from which the packet was received\n */\ntypedef void (*udp_recv_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p,\n    ip_addr_t *addr, u16_t port);\n\n#if LWIP_IPV6\n/** Function prototype for udp pcb IPv6 receive callback functions\n * The callback is responsible for freeing the pbuf\n * if it's not used any more.\n *\n * @param arg user supplied argument (udp_pcb.recv_arg)\n * @param pcb the udp_pcb which received data\n * @param p the packet buffer that was received\n * @param addr the remote IPv6 address from which the packet was received\n * @param port the remote port from which the packet was received\n */\ntypedef void (*udp_recv_ip6_fn)(void *arg, struct udp_pcb *pcb, struct pbuf *p,\n    ip6_addr_t *addr, u16_t port);\n#endif /* LWIP_IPV6 */\n\n#if LWIP_IPV6\n#define UDP_PCB_RECV_IP6  udp_recv_ip6_fn ip6;\n#else\n#define UDP_PCB_RECV_IP6\n#endif /* LWIP_IPV6 */\n\nstruct udp_pcb {\n/* Common members of all PCB types */\n  IP_PCB;\n\n/* Protocol specific PCB members */\n\n  struct udp_pcb *next;\n\n  u8_t flags;\n  /** ports are in host byte order */\n  u16_t local_port, remote_port;\n\n#if LWIP_IGMP\n  /** outgoing network interface for multicast packets */\n  ip_addr_t multicast_ip;\n#endif /* LWIP_IGMP */\n\n#if LWIP_UDPLITE\n  /** used for UDP_LITE only */\n  u16_t chksum_len_rx, chksum_len_tx;\n#endif /* LWIP_UDPLITE */\n\n  /** receive callback function */\n  union {\n    udp_recv_fn ip4;\n    UDP_PCB_RECV_IP6\n  }recv;\n  /** user-supplied argument for the recv callback */\n  void *recv_arg;  \n};\n/* udp_pcbs export for exernal reference (e.g. SNMP agent) */\nextern struct udp_pcb *udp_pcbs;\n\n/* The following functions is the application layer interface to the\n   UDP code. */\nstruct udp_pcb * udp_new        (void);\nvoid             udp_remove     (struct udp_pcb *pcb);\nerr_t            udp_bind       (struct udp_pcb *pcb, ip_addr_t *ipaddr,\n                                 u16_t port);\nerr_t            udp_connect    (struct udp_pcb *pcb, ip_addr_t *ipaddr,\n                                 u16_t port);\nvoid             udp_disconnect (struct udp_pcb *pcb);\nvoid             udp_recv       (struct udp_pcb *pcb, udp_recv_fn recv,\n                                 void *recv_arg);\nerr_t            udp_sendto_if  (struct udp_pcb *pcb, struct pbuf *p,\n                                 ip_addr_t *dst_ip, u16_t dst_port,\n                                 struct netif *netif);\nerr_t            udp_sendto     (struct udp_pcb *pcb, struct pbuf *p,\n                                 ip_addr_t *dst_ip, u16_t dst_port);\nerr_t            udp_send       (struct udp_pcb *pcb, struct pbuf *p);\n\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\nerr_t            udp_sendto_if_chksum(struct udp_pcb *pcb, struct pbuf *p,\n                                 ip_addr_t *dst_ip, u16_t dst_port,\n                                 struct netif *netif, u8_t have_chksum,\n                                 u16_t chksum);\nerr_t            udp_sendto_chksum(struct udp_pcb *pcb, struct pbuf *p,\n                                 ip_addr_t *dst_ip, u16_t dst_port,\n                                 u8_t have_chksum, u16_t chksum);\nerr_t            udp_send_chksum(struct udp_pcb *pcb, struct pbuf *p,\n                                 u8_t have_chksum, u16_t chksum);\n#endif /* LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n\n#define          udp_flags(pcb) ((pcb)->flags)\n#define          udp_setflags(pcb, f)  ((pcb)->flags = (f))\n\n/* The following functions are the lower layer interface to UDP. */\nvoid             udp_input      (struct pbuf *p, struct netif *inp);\n\nvoid             udp_init       (void);\n\n#if LWIP_IPV6\nstruct udp_pcb * udp_new_ip6(void);\n#define          udp_bind_ip6(pcb, ip6addr, port) \\\n                   udp_bind(pcb, ip6_2_ip(ip6addr), port)\n#define          udp_connect_ip6(pcb, ip6addr, port) \\\n                   udp_connect(pcb, ip6_2_ip(ip6addr), port)\n#define          udp_recv_ip6(pcb, recv_ip6_fn, recv_arg) \\\n                   udp_recv(pcb, (udp_recv_fn)recv_ip6_fn, recv_arg)\n#define          udp_sendto_ip6(pcb, pbuf, ip6addr, port) \\\n                   udp_sendto(pcb, pbuf, ip6_2_ip(ip6addr), port)\n#define          udp_sendto_if_ip6(pcb, pbuf, ip6addr, port, netif) \\\n                   udp_sendto_if(pcb, pbuf, ip6_2_ip(ip6addr), port, netif)\n#if LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP\n#define          udp_sendto_chksum_ip6(pcb, pbuf, ip6addr, port, have_chk, chksum) \\\n                   udp_sendto_chksum(pcb, pbuf, ip6_2_ip(ip6addr), port, have_chk, chksum)\n#define          udp_sendto_if_chksum_ip6(pcb, pbuf, ip6addr, port, netif, have_chk, chksum) \\\n                   udp_sendto_if_chksum(pcb, pbuf, ip6_2_ip(ip6addr), port, netif, have_chk, chksum)\n#endif /*LWIP_CHECKSUM_ON_COPY && CHECKSUM_GEN_UDP */\n#endif /* LWIP_IPV6 */\n\n#if UDP_DEBUG\nvoid udp_debug_print(struct udp_hdr *udphdr);\n#else\n#define udp_debug_print(udphdr)\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_UDP */\n\n#endif /* __LWIP_UDP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/netif/etharp.h",
    "content": "/*\n * Copyright (c) 2001-2003 Swedish Institute of Computer Science.\n * Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv>\n * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands.\n * All rights reserved. \n * \n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n\n#ifndef __NETIF_ETHARP_H__\n#define __NETIF_ETHARP_H__\n\n#include \"lwip/opt.h\"\n\n#if LWIP_ARP || LWIP_ETHERNET /* don't build if not configured for use in lwipopts.h */\n\n#include \"lwip/pbuf.h\"\n#include \"lwip/ip_addr.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/ip.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef ETHARP_HWADDR_LEN\n#define ETHARP_HWADDR_LEN     6\n#endif\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct eth_addr {\n  PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\n/** Ethernet header */\nstruct eth_hdr {\n#if ETH_PAD_SIZE\n  PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]);\n#endif\n  PACK_STRUCT_FIELD(struct eth_addr dest);\n  PACK_STRUCT_FIELD(struct eth_addr src);\n  PACK_STRUCT_FIELD(u16_t type);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE)\n\n#if ETHARP_SUPPORT_VLAN\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\n/** VLAN header inserted between ethernet header and payload\n * if 'type' in ethernet header is ETHTYPE_VLAN.\n * See IEEE802.Q */\nstruct eth_vlan_hdr {\n  PACK_STRUCT_FIELD(u16_t prio_vid);\n  PACK_STRUCT_FIELD(u16_t tpid);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define SIZEOF_VLAN_HDR 4\n#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF)\n\n#endif /* ETHARP_SUPPORT_VLAN */\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\n/** the ARP message, see RFC 826 (\"Packet format\") */\nstruct etharp_hdr {\n  PACK_STRUCT_FIELD(u16_t hwtype);\n  PACK_STRUCT_FIELD(u16_t proto);\n  PACK_STRUCT_FIELD(u8_t  hwlen);\n  PACK_STRUCT_FIELD(u8_t  protolen);\n  PACK_STRUCT_FIELD(u16_t opcode);\n  PACK_STRUCT_FIELD(struct eth_addr shwaddr);\n  PACK_STRUCT_FIELD(struct ip_addr2 sipaddr);\n  PACK_STRUCT_FIELD(struct eth_addr dhwaddr);\n  PACK_STRUCT_FIELD(struct ip_addr2 dipaddr);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#define SIZEOF_ETHARP_HDR 28\n#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR)\n\n/** 5 seconds period */\n#define ARP_TMR_INTERVAL 5000\n\n#define ETHTYPE_ARP       0x0806U\n#define ETHTYPE_IP        0x0800U\n#define ETHTYPE_VLAN      0x8100U\n#define ETHTYPE_IPV6      0x86DDU\n#define ETHTYPE_PPPOEDISC 0x8863U  /* PPP Over Ethernet Discovery Stage */\n#define ETHTYPE_PPPOE     0x8864U  /* PPP Over Ethernet Session Stage */\n\n/** MEMCPY-like macro to copy to/from struct eth_addr's that are local variables\n * or known to be 32-bit aligned within the protocol header. */\n#ifndef ETHADDR32_COPY\n#define ETHADDR32_COPY(src, dst)  SMEMCPY(src, dst, ETHARP_HWADDR_LEN)\n#endif\n\n/** MEMCPY-like macro to copy to/from struct eth_addr's that are no local\n * variables and known to be 16-bit aligned within the protocol header. */\n#ifndef ETHADDR16_COPY\n#define ETHADDR16_COPY(src, dst)  SMEMCPY(src, dst, ETHARP_HWADDR_LEN)\n#endif\n\n#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */\n\n/** ARP message types (opcodes) */\n#define ARP_REQUEST 1\n#define ARP_REPLY   2\n\n/** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type)\n * to a filter function that returns the correct netif when using multiple\n * netifs on one hardware interface where the netif's low-level receive\n * routine cannot decide for the correct netif (e.g. when mapping multiple\n * IP addresses to one hardware interface).\n */\n#ifndef LWIP_ARP_FILTER_NETIF\n#define LWIP_ARP_FILTER_NETIF 0\n#endif\n\n#if ARP_QUEUEING\n/** struct for queueing outgoing packets for unknown address\n  * defined here to be accessed by memp.h\n  */\nstruct etharp_q_entry {\n  struct etharp_q_entry *next;\n  struct pbuf *p;\n};\n#endif /* ARP_QUEUEING */\n\n#define etharp_init() /* Compatibility define, not init needed. */\nvoid etharp_tmr(void);\ns8_t etharp_find_addr(struct netif *netif, ip_addr_t *ipaddr,\n         struct eth_addr **eth_ret, ip_addr_t **ip_ret);\nerr_t etharp_output(struct netif *netif, struct pbuf *q, ip_addr_t *ipaddr);\nerr_t etharp_query(struct netif *netif, ip_addr_t *ipaddr, struct pbuf *q);\nerr_t etharp_request(struct netif *netif, ip_addr_t *ipaddr);\n/** For Ethernet network interfaces, we might want to send \"gratuitous ARP\";\n *  this is an ARP packet sent by a node in order to spontaneously cause other\n *  nodes to update an entry in their ARP cache.\n *  From RFC 3220 \"IP Mobility Support for IPv4\" section 4.6. */\n#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr)\nvoid etharp_cleanup_netif(struct netif *netif);\n\n#if ETHARP_SUPPORT_STATIC_ENTRIES\nerr_t etharp_add_static_entry(ip_addr_t *ipaddr, struct eth_addr *ethaddr);\nerr_t etharp_remove_static_entry(ip_addr_t *ipaddr);\n#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */\n\n#if LWIP_AUTOIP\nerr_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr,\n                 const struct eth_addr *ethdst_addr,\n                 const struct eth_addr *hwsrc_addr, const ip_addr_t *ipsrc_addr,\n                 const struct eth_addr *hwdst_addr, const ip_addr_t *ipdst_addr,\n                 const u16_t opcode);\n#endif /* LWIP_AUTOIP */\n\n#endif /* LWIP_ARP */\n\nerr_t ethernet_input(struct pbuf *p, struct netif *netif);\n\n#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0)\n\nextern const struct eth_addr ethbroadcast, ethzero;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* LWIP_ARP || LWIP_ETHERNET */\n\n#endif /* __NETIF_ARP_H__ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/netif/ppp_oe.h",
    "content": "/*****************************************************************************\n* ppp_oe.h - PPP Over Ethernet implementation for lwIP.\n*\n* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc.\n*\n* The authors hereby grant permission to use, copy, modify, distribute,\n* and license this software and its documentation for any purpose, provided\n* that existing copyright notices are retained in all copies and that this\n* notice and the following disclaimer are included verbatim in any \n* distributions. No written agreement, license, or royalty fee is required\n* for any of the authorized uses.\n*\n* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *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 CONTRIBUTORS 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* REVISION HISTORY\n*\n* 06-01-01 Marc Boucher <marc@mbsi.ca>\n*   Ported to lwIP.\n*****************************************************************************/\n\n\n\n/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */\n\n/*-\n * Copyright (c) 2002 The NetBSD Foundation, Inc.\n * All rights reserved.\n *\n * This code is derived from software contributed to The NetBSD Foundation\n * by Martin Husemann <martin@NetBSD.org>.\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. All advertising materials mentioning features or use of this software\n *    must display the following acknowledgement:\n *        This product includes software developed by the NetBSD\n *        Foundation, Inc. and its contributors.\n * 4. Neither the name of The NetBSD Foundation nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS\n * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS\n * BE 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#ifndef PPP_OE_H\n#define PPP_OE_H\n\n#include \"lwip/opt.h\"\n\n#if PPPOE_SUPPORT > 0\n\n#include \"netif/etharp.h\"\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct pppoehdr {\n  PACK_STRUCT_FIELD(u8_t vertype);\n  PACK_STRUCT_FIELD(u8_t code);\n  PACK_STRUCT_FIELD(u16_t session);\n  PACK_STRUCT_FIELD(u16_t plen);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/bpstruct.h\"\n#endif\nPACK_STRUCT_BEGIN\nstruct pppoetag {\n  PACK_STRUCT_FIELD(u16_t tag);\n  PACK_STRUCT_FIELD(u16_t len);\n} PACK_STRUCT_STRUCT;\nPACK_STRUCT_END\n#ifdef PACK_STRUCT_USE_INCLUDES\n#  include \"arch/epstruct.h\"\n#endif\n\n\n#define PPPOE_STATE_INITIAL   0\n#define PPPOE_STATE_PADI_SENT 1\n#define PPPOE_STATE_PADR_SENT 2\n#define PPPOE_STATE_SESSION   3\n#define PPPOE_STATE_CLOSING   4\n/* passive */\n#define PPPOE_STATE_PADO_SENT 1\n\n#define PPPOE_HEADERLEN       sizeof(struct pppoehdr)\n#define PPPOE_VERTYPE         0x11    /* VER=1, TYPE = 1 */\n\n#define PPPOE_TAG_EOL         0x0000  /* end of list */\n#define PPPOE_TAG_SNAME       0x0101  /* service name */\n#define PPPOE_TAG_ACNAME      0x0102  /* access concentrator name */\n#define PPPOE_TAG_HUNIQUE     0x0103  /* host unique */\n#define PPPOE_TAG_ACCOOKIE    0x0104  /* AC cookie */\n#define PPPOE_TAG_VENDOR      0x0105  /* vendor specific */\n#define PPPOE_TAG_RELAYSID    0x0110  /* relay session id */\n#define PPPOE_TAG_SNAME_ERR   0x0201  /* service name error */\n#define PPPOE_TAG_ACSYS_ERR   0x0202  /* AC system error */\n#define PPPOE_TAG_GENERIC_ERR 0x0203  /* gerneric error */\n\n#define PPPOE_CODE_PADI       0x09    /* Active Discovery Initiation */\n#define PPPOE_CODE_PADO       0x07    /* Active Discovery Offer */\n#define PPPOE_CODE_PADR       0x19    /* Active Discovery Request */\n#define PPPOE_CODE_PADS       0x65    /* Active Discovery Session confirmation */\n#define PPPOE_CODE_PADT       0xA7    /* Active Discovery Terminate */\n\n#ifndef ETHERMTU\n#define ETHERMTU 1500\n#endif\n\n/* two byte PPP protocol discriminator, then IP data */\n#define PPPOE_MAXMTU          (ETHERMTU-PPPOE_HEADERLEN-2)\n\n#ifndef PPPOE_MAX_AC_COOKIE_LEN\n#define PPPOE_MAX_AC_COOKIE_LEN   64\n#endif\n\nstruct pppoe_softc {\n  struct pppoe_softc *next;\n  struct netif *sc_ethif;      /* ethernet interface we are using */\n  int sc_pd;                   /* ppp unit number */\n  void (*sc_linkStatusCB)(int pd, int up);\n\n  int sc_state;                /* discovery phase or session connected */\n  struct eth_addr sc_dest;     /* hardware address of concentrator */\n  u16_t sc_session;            /* PPPoE session id */\n\n#ifdef PPPOE_TODO\n  char *sc_service_name;       /* if != NULL: requested name of service */\n  char *sc_concentrator_name;  /* if != NULL: requested concentrator id */\n#endif /* PPPOE_TODO */\n  u8_t sc_ac_cookie[PPPOE_MAX_AC_COOKIE_LEN]; /* content of AC cookie we must echo back */\n  size_t sc_ac_cookie_len;     /* length of cookie data */\n#ifdef PPPOE_SERVER\n  u8_t *sc_hunique;            /* content of host unique we must echo back */\n  size_t sc_hunique_len;       /* length of host unique */\n#endif\n  int sc_padi_retried;         /* number of PADI retries already done */\n  int sc_padr_retried;         /* number of PADR retries already done */\n};\n\n\n#define pppoe_init() /* compatibility define, no initialization needed */\n\nerr_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr);\nerr_t pppoe_destroy(struct netif *ifp);\n\nint pppoe_connect(struct pppoe_softc *sc);\nvoid pppoe_disconnect(struct pppoe_softc *sc);\n\nvoid pppoe_disc_input(struct netif *netif, struct pbuf *p);\nvoid pppoe_data_input(struct netif *netif, struct pbuf *p);\n\nerr_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb);\n\n/** used in ppp.c */\n#define PPPOE_HDRLEN (sizeof(struct eth_hdr) + PPPOE_HEADERLEN)\n\n#endif /* PPPOE_SUPPORT */\n\n#endif /* PPP_OE_H */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/netif/slipif.h",
    "content": "/*\n * Copyright (c) 2001, Swedish Institute of Computer Science.\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 * 3. Neither the name of the Institute 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 INSTITUTE 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 INSTITUTE 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 * This file is part of the lwIP TCP/IP stack.\n * \n * Author: Adam Dunkels <adam@sics.se>\n *\n */\n#ifndef __NETIF_SLIPIF_H__\n#define __NETIF_SLIPIF_H__\n\n#include \"lwip/opt.h\"\n#include \"lwip/netif.h\"\n\n/** Set this to 1 to start a thread that blocks reading on the serial line\n * (using sio_read()).\n */\n#ifndef SLIP_USE_RX_THREAD\n#define SLIP_USE_RX_THREAD !NO_SYS\n#endif\n\n/** Set this to 1 to enable functions to pass in RX bytes from ISR context.\n * If enabled, slipif_received_byte[s]() process incoming bytes and put assembled\n * packets on a queue, which is fed into lwIP from slipif_poll().\n * If disabled, slipif_poll() polls the serila line (using sio_tryread()).\n */\n#ifndef SLIP_RX_FROM_ISR\n#define SLIP_RX_FROM_ISR 0\n#endif\n\n/** Set this to 1 (default for SLIP_RX_FROM_ISR) to queue incoming packets\n * received by slipif_received_byte[s]() as long as PBUF_POOL pbufs are available.\n * If disabled, packets will be dropped if more than one packet is received.\n */\n#ifndef SLIP_RX_QUEUE\n#define SLIP_RX_QUEUE SLIP_RX_FROM_ISR\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nerr_t slipif_init(struct netif * netif);\nvoid slipif_poll(struct netif *netif);\n#if SLIP_RX_FROM_ISR\nvoid slipif_process_rxqueue(struct netif *netif);\nvoid slipif_received_byte(struct netif *netif, u8_t data);\nvoid slipif_received_bytes(struct netif *netif, u8_t *data, u8_t len);\n#endif /* SLIP_RX_FROM_ISR */\n\n#ifdef __cplusplus\n}\n#endif\n \n#endif \n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/posix/netdb.h",
    "content": "/**\n * @file\n * This file is a posix wrapper for lwip/netdb.h.\n */\n\n/*\n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n */\n\n#include \"lwip/netdb.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/lwip/src/include/posix/sys/socket.h",
    "content": "/**\n * @file\n * This file is a posix wrapper for lwip/sockets.h.\n */\n\n/*\n * Redistribution and use in source and binary forms, with or without modification, \n * 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 * 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 * 3. The name of the author may not be used to endorse or promote products\n *    derived from this software without specific prior written permission. \n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED \n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF \n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT \n * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, \n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT \n * OF 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) ARISING \n * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY \n * OF SUCH DAMAGE.\n *\n * This file is part of the lwIP TCP/IP stack.\n *\n */\n\n#include \"lwip/sockets.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/BRefTarget.h",
    "content": "/**\n * @file BRefTarget.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_B_REF_TARGET_H\n#define BADVPN_B_REF_TARGET_H\n\n#include <limits.h>\n\n#include <misc/debug.h>\n#include <base/DebugObject.h>\n\n/**\n * Represents a reference-counted object.\n */\ntypedef struct BRefTarget_s BRefTarget;\n\n/**\n * Callback function called after the reference count of a {@link BRefTarget}\n * reaches has reached zero. At this point the BRefTarget object has already\n * been invalidated, i.e. {@link BRefTarget_Ref} must not be called on this\n * object after this handler is called.\n */\ntypedef void (*BRefTarget_func_release) (BRefTarget *o);\n\nstruct BRefTarget_s {\n    BRefTarget_func_release func_release;\n    int refcnt;\n    DebugObject d_obj;\n};\n\n/**\n * Initializes a reference target object. The initial reference count of the object\n * is 1. The \\a func_release argument specifies the function to be called from\n * {@link BRefTarget_Deref} when the reference count reaches zero.\n */\nstatic void BRefTarget_Init (BRefTarget *o, BRefTarget_func_release func_release);\n\n/**\n * Decrements the reference count of a reference target object. If the reference\n * count has reached zero, the object's {@link BRefTarget_func_release} function\n * is called, and the object is considered destroyed.\n */\nstatic void BRefTarget_Deref (BRefTarget *o);\n\n/**\n * Increments the reference count of a reference target object.\n * Returns 1 on success and 0 on failure.\n */\nstatic int BRefTarget_Ref (BRefTarget *o) WARN_UNUSED;\n\nstatic void BRefTarget_Init (BRefTarget *o, BRefTarget_func_release func_release)\n{\n    ASSERT(func_release)\n    \n    o->func_release = func_release;\n    o->refcnt = 1;\n    \n    DebugObject_Init(&o->d_obj);\n}\n\nstatic void BRefTarget_Deref (BRefTarget *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->refcnt > 0)\n    \n    o->refcnt--;\n    \n    if (o->refcnt == 0) {\n        DebugObject_Free(&o->d_obj);\n        o->func_release(o);\n    }\n}\n\nstatic int BRefTarget_Ref (BRefTarget *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->refcnt > 0)\n    \n    if (o->refcnt == INT_MAX) {\n        return 0;\n    }\n    \n    o->refcnt++;\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/Utf16Decoder.h",
    "content": "/**\n * @file Utf16Decoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UTF16DECODER_H\n#define BADVPN_UTF16DECODER_H\n\n#include <stdint.h>\n\n#include <misc/debug.h>\n\n/**\n * Decodes UTF-16 data into Unicode characters.\n */\ntypedef struct {\n    int cont;\n    uint32_t ch;\n} Utf16Decoder;\n\n/**\n * Initializes the UTF-16 decoder.\n * \n * @param o the object\n */\nstatic void Utf16Decoder_Init (Utf16Decoder *o);\n\n/**\n * Inputs a 16-bit value to the decoder.\n * \n * @param o the object\n * @param b 16-bit value to input\n * @param out_ch will receive a Unicode character if this function returns 1.\n *               If written, the character will be in the range 0 - 0x10FFFF,\n *               excluding the surrogate range 0xD800 - 0xDFFF.\n * @return 1 if a Unicode character has been written to *out_ch, 0 if not\n */\nstatic int Utf16Decoder_Input (Utf16Decoder *o, uint16_t b, uint32_t *out_ch);\n\nvoid Utf16Decoder_Init (Utf16Decoder *o)\n{\n    o->cont = 0;\n}\n\nint Utf16Decoder_Input (Utf16Decoder *o, uint16_t b, uint32_t *out_ch)\n{\n    // high surrogate\n    if (b >= UINT16_C(0xD800) && b <= UINT16_C(0xDBFF)) {\n        // set continuation state\n        o->cont = 1;\n        \n        // add high bits\n        o->ch = (uint32_t)(b - UINT16_C(0xD800)) << 10;\n        \n        return 0;\n    }\n    \n    // low surrogate\n    if (b >= UINT16_C(0xDC00) && b <= UINT16_C(0xDFFF)) {\n        // check continuation\n        if (!o->cont) {\n            return 0;\n        }\n        \n        // add low bits\n        o->ch |= (b - UINT16_C(0xDC00));\n        \n        // reset state\n        o->cont = 0;\n        \n        // don't report surrogates\n        if (o->ch >= UINT32_C(0xD800) && o->ch <= UINT32_C(0xDFFF)) {\n            return 0;\n        }\n        \n        // return character\n        *out_ch = o->ch;\n        return 1;\n    }\n    \n    // reset state\n    o->cont = 0;\n    \n    // return character\n    *out_ch = b;\n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/Utf16Encoder.h",
    "content": "/**\n * @file Utf16Encoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UTF16ENCODER_H\n#define BADVPN_UTF16ENCODER_H\n\n#include <stdint.h>\n\n/**\n * Encodes a Unicode character into a sequence of 16-bit values according to UTF-16.\n * \n * @param ch Unicode character to encode\n * @param out will receive the encoded 16-bit values. Must have space for 2 values.\n * @return number of 16-bit values written, 0-2, with 0 meaning the character cannot\n *         be encoded\n */\nstatic int Utf16Encoder_EncodeCharacter (uint32_t ch, uint16_t *out);\n\nint Utf16Encoder_EncodeCharacter (uint32_t ch, uint16_t *out)\n{\n    if (ch <= UINT32_C(0xFFFF)) {\n        // surrogates\n        if (ch >= UINT32_C(0xD800) && ch <= UINT32_C(0xDFFF)) {\n            return 0;\n        }\n        \n        out[0] = ch;\n        return 1;\n    }\n    \n    if (ch <= UINT32_C(0x10FFFF)) {\n        uint32_t x = ch - UINT32_C(0x10000);\n        out[0] = UINT32_C(0xD800) + (x >> 10);\n        out[1] = UINT32_C(0xDC00) + (x & UINT32_C(0x3FF));\n        return 2;\n    }\n    \n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/Utf8Decoder.h",
    "content": "/**\n * @file Utf8Decoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UTF8DECODER_H\n#define BADVPN_UTF8DECODER_H\n\n#include <stdint.h>\n\n#include <misc/debug.h>\n\n/**\n * Decodes UTF-8 data into Unicode characters.\n */\ntypedef struct {\n    int bytes;\n    int pos;\n    uint32_t ch;\n} Utf8Decoder;\n\n/**\n * Initializes the UTF-8 decoder.\n * \n * @param o the object\n */\nstatic void Utf8Decoder_Init (Utf8Decoder *o);\n\n/**\n * Inputs a byte to the decoder.\n * \n * @param o the object\n * @param b byte to input\n * @param out_ch will receive a Unicode character if this function returns 1.\n *               If written, the character will be in the range 0 - 0x10FFFF,\n *               excluding the surrogate range 0xD800 - 0xDFFF.\n * @return 1 if a Unicode character has been written to *out_ch, 0 if not\n */\nstatic int Utf8Decoder_Input (Utf8Decoder *o, uint8_t b, uint32_t *out_ch);\n\nvoid Utf8Decoder_Init (Utf8Decoder *o)\n{\n    o->bytes = 0;\n}\n\nint Utf8Decoder_Input (Utf8Decoder *o, uint8_t b, uint32_t *out_ch)\n{\n    // one-byte character\n    if ((b & 128) == 0) {\n        o->bytes = 0;\n        *out_ch = b;\n        return 1;\n    }\n    \n    // start of two-byte character\n    if ((b & 224) == 192) {\n        o->bytes = 2;\n        o->pos = 1;\n        o->ch = (uint32_t)(b & 31) << 6;\n        return 0;\n    }\n    \n    // start of three-byte character\n    if ((b & 240) == 224) {\n        o->bytes = 3;\n        o->pos = 1;\n        o->ch = (uint32_t)(b & 15) << 12;\n        return 0;\n    }\n    \n    // start of four-byte character\n    if ((b & 248) == 240) {\n        o->bytes = 4;\n        o->pos = 1;\n        o->ch = (uint32_t)(b & 7) << 18;\n        return 0;\n    }\n    \n    // continuation of multi-byte character\n    if ((b & 192) == 128 && o->bytes > 0) {\n        ASSERT(o->bytes <= 4)\n        ASSERT(o->pos > 0)\n        ASSERT(o->pos < o->bytes)\n        \n        // add bits from this byte\n        o->ch |= (uint32_t)(b & 63) << (6 * (o->bytes - o->pos - 1));\n        \n        // end of multi-byte character?\n        if (o->pos == o->bytes - 1) {\n            // reset state\n            o->bytes = 0;\n            \n            // don't report out-of-range characters\n            if (o->ch > UINT32_C(0x10FFFF)) {\n                return 0;\n            }\n            \n            // don't report surrogates\n            if (o->ch >= UINT32_C(0xD800) && o->ch <= UINT32_C(0xDFFF)) {\n                return 0;\n            }\n            \n            *out_ch = o->ch;\n            return 1;\n        }\n        \n        // increment byte index\n        o->pos++;\n        \n        return 0;\n    }\n    \n    // error, reset state\n    o->bytes = 0;\n    \n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/Utf8Encoder.h",
    "content": "/**\n * @file Utf8Encoder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UTF8ENCODER_H\n#define BADVPN_UTF8ENCODER_H\n\n#include <stdint.h>\n\n/**\n * Encodes a Unicode character into a sequence of bytes according to UTF-8.\n * \n * @param ch Unicode character to encode\n * @param out will receive the encoded bytes. Must have space for 4 bytes.\n * @return number of bytes written, 0-4, with 0 meaning the character cannot\n *         be encoded\n */\nstatic int Utf8Encoder_EncodeCharacter (uint32_t ch, uint8_t *out);\n\nint Utf8Encoder_EncodeCharacter (uint32_t ch, uint8_t *out)\n{\n    if (ch <= UINT32_C(0x007F)) {\n        out[0] = ch;\n        return 1;\n    }\n    \n    if (ch <= UINT32_C(0x07FF)) {\n        out[0] = (0xC0 | (ch >> 6));\n        out[1] = (0x80 | ((ch >> 0) & 0x3F));\n        return 2;\n    }\n    \n    if (ch <= UINT32_C(0xFFFF)) {\n        // surrogates\n        if (ch >= UINT32_C(0xD800) && ch <= UINT32_C(0xDFFF)) {\n            return 0;\n        }\n        \n        out[0] = (0xE0 | (ch >> 12));\n        out[1] = (0x80 | ((ch >> 6) & 0x3F));\n        out[2] = (0x80 | ((ch >> 0) & 0x3F));\n        return 3;\n    }\n    \n    if (ch < UINT32_C(0x10FFFF)) {\n        out[0] = (0xF0 | (ch >> 18));\n        out[1] = (0x80 | ((ch >> 12) & 0x3F));\n        out[2] = (0x80 | ((ch >> 6) & 0x3F));\n        out[3] = (0x80 | ((ch >> 0) & 0x3F));\n        return 4;\n    }\n    \n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/arp_proto.h",
    "content": "/**\n * @file arp_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the ARP protocol.\n */\n\n#ifndef BADVPN_ARP_PROTO_H\n#define BADVPN_ARP_PROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define ARP_HARDWARE_TYPE_ETHERNET 1\n\n#define ARP_OPCODE_REQUEST 1\n#define ARP_OPCODE_REPLY 2\n\nB_START_PACKED\nstruct arp_packet {\n    uint16_t hardware_type;\n    uint16_t protocol_type;\n    uint8_t hardware_size;\n    uint8_t protocol_size;\n    uint16_t opcode;\n    uint8_t sender_mac[6];\n    uint32_t sender_ip;\n    uint8_t target_mac[6];\n    uint32_t target_ip;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/array_length.h",
    "content": "/**\n * @file array_length.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_ARRAY_LENGTH\n#define BADVPN_ARRAY_LENGTH\n\n#define B_ARRAY_LENGTH(arr) (sizeof((arr)) / sizeof((arr)[0]))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ascii_utils.h",
    "content": "/**\n * @file ascii_utils.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_ASCII_UTILS_H\n#define BADVPN_ASCII_UTILS_H\n\nstatic char b_ascii_tolower (char c)\n{\n    return (c >= 'A' && c <= 'Z') ? (c + 32) : c;\n}\n\nstatic char b_ascii_toupper (char c)\n{\n    return (c >= 'a' && c <= 'z') ? (c - 32) : c;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/balign.h",
    "content": "/**\n * @file balign.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Integer alignment macros.\n */\n\n#ifndef BADVPN_MISC_BALIGN_H\n#define BADVPN_MISC_BALIGN_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n/**\n * Checks if aligning x up to n would overflow.\n */\nstatic int balign_up_overflows (size_t x, size_t n)\n{\n    size_t r = x % n;\n    \n    return (r && x > SIZE_MAX - (n - r));\n}\n\n/**\n * Aligns x up to n.\n */\nstatic size_t balign_up (size_t x, size_t n)\n{\n    size_t r = x % n;\n    return (r ? x + (n - r) : x);\n}\n\n/**\n * Aligns x down to n.\n */\nstatic size_t balign_down (size_t x, size_t n)\n{\n    return (x - (x % n));\n}\n\n/**\n * Calculates the quotient of a and b, rounded up.\n */\nstatic size_t bdivide_up (size_t a, size_t b)\n{\n    size_t r = a % b;\n    return (r > 0 ? a / b + 1 : a / b);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/balloc.h",
    "content": "/**\n * @file balloc.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Memory allocation functions.\n */\n\n#ifndef BADVPN_MISC_BALLOC_H\n#define BADVPN_MISC_BALLOC_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include \"misc/debug.h\"\n#include \"misc/bsize.h\"\n#include \"misc/maxalign.h\"\n\n/**\n * Allocates memory.\n * \n * @param bytes number of bytes to allocate.\n * @return a non-NULL pointer to the memory, or NULL on failure.\n *         The memory allocated can be freed using {@link BFree}.\n */\nstatic void * BAlloc (size_t bytes);\n\n/**\n * Frees memory.\n * \n * @param m memory to free. Must have been obtained with {@link BAlloc},\n *          {@link BAllocArray}, or {@link BAllocArray2}. May be NULL;\n *          in this case, this function does nothing.\n */\nstatic void BFree (void *m);\n\n/**\n * Changes the size of a memory block. On success, the memory block\n * may be moved to a different address.\n * \n * @param m pointer to a memory block obtained from {@link BAlloc}\n *          or other functions in this group. If this is NULL, the\n *          call is equivalent to {@link BAlloc}(bytes).\n * @param bytes new size of the memory block\n * @return new pointer to the memory block, or NULL on failure\n */\nstatic void * BRealloc (void *m, size_t bytes);\n\n/**\n * Allocates memory, with size given as a {@link bsize_t}.\n * \n * @param bytes number of bytes to allocate. If the size is overflow,\n *              this function will return NULL.\n * @return a non-NULL pointer to the memory, or NULL on failure.\n *         The memory allocated can be freed using {@link BFree}.\n */\nstatic void * BAllocSize (bsize_t bytes);\n\n/**\n * Allocates memory for an array.\n * A check is first done to make sure the multiplication doesn't overflow;\n * otherwise, this is equivalent to {@link BAlloc}(count * bytes).\n * This may be slightly faster if 'bytes' is constant, because a division\n * with 'bytes' is performed.\n * \n * @param count number of elements.\n * @param bytes size of one array element.\n * @return a non-NULL pointer to the memory, or NULL on failure.\n *         The memory allocated can be freed using {@link BFree}.\n */\nstatic void * BAllocArray (size_t count, size_t bytes);\n\n/**\n * Reallocates memory that was allocated using one of the allocation\n * functions in this file. On success, the memory may be moved to a\n * different address, leaving the old address invalid.\n * \n * @param mem pointer to an existing memory block. May be NULL, in which\n *            case this is equivalent to {@link BAllocArray}.\n * @param count number of elements for reallocation\n * @param bytes size of one array element for reallocation\n * @return a non-NULL pointer to the address of the reallocated memory\n *         block, or NULL on failure. On failure, the original memory\n *         block is left intact.\n */\nstatic void * BReallocArray (void *mem, size_t count, size_t bytes);\n\n/**\n * Allocates memory for a two-dimensional array.\n * \n * Checks are first done to make sure the multiplications don't overflow;\n * otherwise, this is equivalent to {@link BAlloc}((count2 * (count1 * bytes)).\n * \n * @param count2 number of elements in one dimension.\n * @param count1 number of elements in the other dimension.\n * @param bytes size of one array element.\n * @return a non-NULL pointer to the memory, or NULL on failure.\n *         The memory allocated can be freed using {@link BFree}.\n */\nstatic void * BAllocArray2 (size_t count2, size_t count1, size_t bytes);\n\n/**\n * Adds to a size_t with overflow detection.\n * \n * @param s pointer to a size_t to add to\n * @param add number to add\n * @return 1 on success, 0 on failure\n */\nstatic int BSizeAdd (size_t *s, size_t add);\n\n/**\n * Aligns a size_t upwards with overflow detection.\n * \n * @param s pointer to a size_t to align\n * @param align alignment value. Must be >0.\n * @return 1 on success, 0 on failure\n */\nstatic int BSizeAlign (size_t *s, size_t align);\n\nvoid * BAlloc (size_t bytes)\n{\n    if (bytes == 0) {\n        return malloc(1);\n    }\n    \n    return malloc(bytes);\n}\n\nvoid BFree (void *m)\n{\n    free(m);\n}\n\nvoid * BRealloc (void *m, size_t bytes)\n{\n    if (bytes == 0) {\n        return realloc(m, 1);\n    }\n    \n    return realloc(m, bytes);\n}\n\nvoid * BAllocSize (bsize_t bytes)\n{\n    if (bytes.is_overflow) {\n        return NULL;\n    }\n    \n    return BAlloc(bytes.value);\n}\n\nvoid * BAllocArray (size_t count, size_t bytes)\n{\n    if (count == 0 || bytes == 0) {\n        return malloc(1);\n    }\n    \n    if (count > SIZE_MAX / bytes) {\n        return NULL;\n    }\n    \n    return BAlloc(count * bytes);\n}\n\nvoid * BReallocArray (void *mem, size_t count, size_t bytes)\n{\n    if (count == 0 || bytes == 0) {\n        return realloc(mem, 1);\n    }\n    \n    if (count > SIZE_MAX / bytes) {\n        return NULL;\n    }\n    \n    return realloc(mem, count * bytes);\n}\n\nvoid * BAllocArray2 (size_t count2, size_t count1, size_t bytes)\n{\n    if (count2 == 0 || count1 == 0 || bytes == 0) {\n        return malloc(1);\n    }\n    \n    if (count1 > SIZE_MAX / bytes) {\n        return NULL;\n    }\n    \n    if (count2 > SIZE_MAX / (count1 * bytes)) {\n        return NULL;\n    }\n    \n    return BAlloc(count2 * (count1 * bytes));\n}\n\nint BSizeAdd (size_t *s, size_t add)\n{\n    ASSERT(s)\n    \n    if (add > SIZE_MAX - *s) {\n        return 0;\n    }\n    *s += add;\n    return 1;\n}\n\nint BSizeAlign (size_t *s, size_t align)\n{\n    ASSERT(s)\n    ASSERT(align > 0)\n    \n    size_t mod = *s % align;\n    if (mod > 0) {\n        if (align - mod > SIZE_MAX - *s) {\n            return 0;\n        }\n        *s += align - mod;\n    }\n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/blimits.h",
    "content": "/**\n * @file blimits.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_BLIMITS_H\n#define BADVPN_BLIMITS_H\n\n#include <stdint.h>\n\n#define BTYPE_IS_SIGNED(type) ((type)-1 < 0)\n\n#define BSIGNED_TYPE_MIN(type) ( \\\n    sizeof(type) == 1 ? INT8_MIN : ( \\\n    sizeof(type) == 2 ? INT16_MIN : ( \\\n    sizeof(type) == 4 ? INT32_MIN : ( \\\n    sizeof(type) == 8 ? INT64_MIN : 0))))\n\n#define BSIGNED_TYPE_MAX(type) ( \\\n    sizeof(type) == 1 ? INT8_MAX : ( \\\n    sizeof(type) == 2 ? INT16_MAX : ( \\\n    sizeof(type) == 4 ? INT32_MAX : ( \\\n    sizeof(type) == 8 ? INT64_MAX : 0))))\n\n#define BUNSIGNED_TYPE_MIN(type) ((type)0)\n\n#define BUNSIGNED_TYPE_MAX(type) ( \\\n    sizeof(type) == 1 ? UINT8_MAX : ( \\\n    sizeof(type) == 2 ? UINT16_MAX : ( \\\n    sizeof(type) == 4 ? UINT32_MAX : ( \\\n    sizeof(type) == 8 ? UINT64_MAX : 0))))\n\n#define BTYPE_MIN(type) (BTYPE_IS_SIGNED(type) ? BSIGNED_TYPE_MIN(type) : BUNSIGNED_TYPE_MIN(type))\n#define BTYPE_MAX(type) (BTYPE_IS_SIGNED(type) ? BSIGNED_TYPE_MAX(type) : BUNSIGNED_TYPE_MAX(type))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/bsize.h",
    "content": "/**\n * @file bsize.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Arithmetic with overflow detection.\n */\n\n#ifndef BADVPN_MISC_BSIZE_H\n#define BADVPN_MISC_BSIZE_H\n\n#include <stddef.h>\n#include <limits.h>\n#include <stdint.h>\n\ntypedef struct {\n    int is_overflow;\n    size_t value;\n} bsize_t;\n\nstatic bsize_t bsize_fromsize (size_t v);\nstatic bsize_t bsize_fromint (int v);\nstatic bsize_t bsize_overflow (void);\nstatic int bsize_tosize (bsize_t s, size_t *out);\nstatic int bsize_toint (bsize_t s, int *out);\nstatic bsize_t bsize_add (bsize_t s1, bsize_t s2);\nstatic bsize_t bsize_max (bsize_t s1, bsize_t s2);\nstatic bsize_t bsize_mul (bsize_t s1, bsize_t s2);\n\nbsize_t bsize_fromsize (size_t v)\n{\n    bsize_t s = {0, v};\n    return s;\n}\n\nbsize_t bsize_fromint (int v)\n{\n    bsize_t s = {(v < 0 || v > SIZE_MAX), v};\n    return s;\n}\n\nstatic bsize_t bsize_overflow (void)\n{\n    bsize_t s = {1, 0};\n    return s;\n}\n\nint bsize_tosize (bsize_t s, size_t *out)\n{\n    if (s.is_overflow) {\n        return 0;\n    }\n    \n    if (out) {\n        *out = s.value;\n    }\n    \n    return 1;\n}\n\nint bsize_toint (bsize_t s, int *out)\n{\n    if (s.is_overflow || s.value > INT_MAX) {\n        return 0;\n    }\n    \n    if (out) {\n        *out = (int)s.value;\n    }\n    \n    return 1;\n}\n\nbsize_t bsize_add (bsize_t s1, bsize_t s2)\n{\n    bsize_t s = {(s1.is_overflow || s2.is_overflow || s2.value > SIZE_MAX - s1.value), (s1.value + s2.value)};\n    return s;\n}\n\nbsize_t bsize_max (bsize_t s1, bsize_t s2)\n{\n    bsize_t s = {(s1.is_overflow || s2.is_overflow), ((s1.value > s2.value) * s1.value + (s1.value <= s2.value) * s2.value)};\n    return s;\n}\n\nbsize_t bsize_mul (bsize_t s1, bsize_t s2)\n{\n    bsize_t s = {(s1.is_overflow || s2.is_overflow || (s1.value != 0 && s2.value > SIZE_MAX / s1.value)), (s1.value * s2.value)};\n    return s;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/bsort.h",
    "content": "/**\n * @file bsort.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Sorting functions.\n */\n\n#ifndef BADVPN_MISC_BSORT_H\n#define BADVPN_MISC_BSORT_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <string.h>\n\n#include <misc/debug.h>\n#include <misc/balloc.h>\n\ntypedef int (*BSort_comparator) (const void *e1, const void *e2);\n\nstatic void BInsertionSort (void *arr, size_t count, size_t esize, BSort_comparator compatator, void *temp);\n\nvoid BInsertionSort (void *arr, size_t count, size_t esize, BSort_comparator compatator, void *temp)\n{\n    ASSERT(esize > 0)\n    \n    for (size_t i = 0; i < count; i++) {\n        size_t j = i;\n        while (j > 0) {\n            uint8_t *x = (uint8_t *)arr + (j - 1) * esize;\n            uint8_t *y = (uint8_t *)arr + j * esize;\n            int c = compatator(x, y);\n            if (c <= 0) {\n                break;\n            }\n            memcpy(temp, x, esize);\n            memcpy(x, y, esize);\n            memcpy(y, temp, esize);\n            j--;\n        }\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/bstring.h",
    "content": "/**\n * @file bstring.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_BSTRING_H\n#define BADVPN_BSTRING_H\n\n#include <misc/debug.h>\n\n#include <stdlib.h>\n#include <string.h>\n\n#define BSTRING_TYPE_STATIC 5\n#define BSTRING_TYPE_DYNAMIC 7\n#define BSTRING_TYPE_EXTERNAL 11\n\n#define BSTRING_STATIC_SIZE 23\n#define BSTRING_STATIC_MAX (BSTRING_STATIC_SIZE - 1)\n\ntypedef struct {\n    union {\n        struct {\n            char type;\n            char static_string[BSTRING_STATIC_SIZE];\n        } us;\n        struct {\n            char type;\n            char *dynamic_string;\n        } ud;\n        struct {\n            char type;\n            const char *external_string;\n        } ue;\n    } u;\n} BString;\n\nstatic void BString__assert (BString *o)\n{\n    switch (o->u.us.type) {\n        case BSTRING_TYPE_STATIC:\n        case BSTRING_TYPE_DYNAMIC:\n        case BSTRING_TYPE_EXTERNAL:\n            return;\n    }\n    \n    ASSERT(0);\n}\n\nstatic int BString_Init (BString *o, const char *str)\n{\n    if (strlen(str) <= BSTRING_STATIC_MAX) {\n        strcpy(o->u.us.static_string, str);\n        o->u.us.type = BSTRING_TYPE_STATIC;\n    } else {\n        if (!(o->u.ud.dynamic_string = malloc(strlen(str) + 1))) {\n            return 0;\n        }\n        strcpy(o->u.ud.dynamic_string, str);\n        o->u.ud.type = BSTRING_TYPE_DYNAMIC;\n    }\n    \n    BString__assert(o);\n    return 1;\n}\n\nstatic void BString_InitStatic (BString *o, const char *str)\n{\n    ASSERT(strlen(str) <= BSTRING_STATIC_MAX)\n    \n    strcpy(o->u.us.static_string, str);\n    o->u.us.type = BSTRING_TYPE_STATIC;\n    \n    BString__assert(o);\n}\n\nstatic void BString_InitExternal (BString *o, const char *str)\n{\n    o->u.ue.external_string = str;\n    o->u.ue.type = BSTRING_TYPE_EXTERNAL;\n    \n    BString__assert(o);\n}\n\nstatic void BString_InitAllocated (BString *o, char *str)\n{\n    o->u.ud.dynamic_string = str;\n    o->u.ud.type = BSTRING_TYPE_DYNAMIC;\n    \n    BString__assert(o);\n}\n\nstatic void BString_Free (BString *o)\n{\n    BString__assert(o);\n    \n    if (o->u.ud.type == BSTRING_TYPE_DYNAMIC) {\n        free(o->u.ud.dynamic_string);\n    }\n}\n\nstatic const char * BString_Get (BString *o)\n{\n    BString__assert(o);\n    \n    switch (o->u.us.type) {\n        case BSTRING_TYPE_STATIC: return o->u.us.static_string;\n        case BSTRING_TYPE_DYNAMIC: return o->u.ud.dynamic_string;\n        case BSTRING_TYPE_EXTERNAL: return o->u.ue.external_string;\n    }\n    \n    ASSERT(0);\n    return NULL;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/byteorder.h",
    "content": "/**\n * @file byteorder.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Byte order conversion functions.\n * \n * hton* functions convert from host to big-endian (network) byte order.\n * htol* functions convert from host to little-endian byte order.\n * ntoh* functions convert from big-endian (network) to host byte order.\n * ltoh* functions convert from little-endian to host byte order.\n */\n\n#ifndef BADVPN_MISC_BYTEORDER_H\n#define BADVPN_MISC_BYTEORDER_H\n\n#if (defined(BADVPN_LITTLE_ENDIAN) + defined(BADVPN_BIG_ENDIAN)) != 1\n#error Unknown byte order or too many byte orders\n#endif\n\n#include <stdint.h>\n\nstatic uint16_t badvpn_reverse16 (uint16_t x)\n{\n    uint16_t y;\n    *((uint8_t *)&y+0) = *((uint8_t *)&x+1);\n    *((uint8_t *)&y+1) = *((uint8_t *)&x+0);\n    return y;\n}\n\nstatic uint32_t badvpn_reverse32 (uint32_t x)\n{\n    uint32_t y;\n    *((uint8_t *)&y+0) = *((uint8_t *)&x+3);\n    *((uint8_t *)&y+1) = *((uint8_t *)&x+2);\n    *((uint8_t *)&y+2) = *((uint8_t *)&x+1);\n    *((uint8_t *)&y+3) = *((uint8_t *)&x+0);\n    return y;\n}\n\nstatic uint64_t badvpn_reverse64 (uint64_t x)\n{\n    uint64_t y;\n    *((uint8_t *)&y+0) = *((uint8_t *)&x+7);\n    *((uint8_t *)&y+1) = *((uint8_t *)&x+6);\n    *((uint8_t *)&y+2) = *((uint8_t *)&x+5);\n    *((uint8_t *)&y+3) = *((uint8_t *)&x+4);\n    *((uint8_t *)&y+4) = *((uint8_t *)&x+3);\n    *((uint8_t *)&y+5) = *((uint8_t *)&x+2);\n    *((uint8_t *)&y+6) = *((uint8_t *)&x+1);\n    *((uint8_t *)&y+7) = *((uint8_t *)&x+0);\n    return y;\n}\n\nstatic uint8_t hton8 (uint8_t x)\n{\n    return x;\n}\n\nstatic uint8_t htol8 (uint8_t x)\n{\n    return x;\n}\n\n#if defined(BADVPN_LITTLE_ENDIAN)\n\nstatic uint16_t hton16 (uint16_t x)\n{\n    return badvpn_reverse16(x);\n}\n\nstatic uint32_t hton32 (uint32_t x)\n{\n    return badvpn_reverse32(x);\n}\n\nstatic uint64_t hton64 (uint64_t x)\n{\n    return badvpn_reverse64(x);\n}\n\nstatic uint16_t htol16 (uint16_t x)\n{\n    return x;\n}\n\nstatic uint32_t htol32 (uint32_t x)\n{\n    return x;\n}\n\nstatic uint64_t htol64 (uint64_t x)\n{\n    return x;\n}\n\n#elif defined(BADVPN_BIG_ENDIAN)\n\nstatic uint16_t hton16 (uint16_t x)\n{\n    return x;\n}\n\nstatic uint32_t hton32 (uint32_t x)\n{\n    return x;\n}\n\nstatic uint64_t hton64 (uint64_t x)\n{\n    return x;\n}\n\nstatic uint16_t htol16 (uint16_t x)\n{\n    return badvpn_reverse16(x);\n}\n\nstatic uint32_t htol32 (uint32_t x)\n{\n    return badvpn_reverse32(x);\n}\n\nstatic uint64_t htol64 (uint64_t x)\n{\n    return badvpn_reverse64(x);\n}\n\n#endif\n\nstatic uint8_t ntoh8 (uint8_t x)\n{\n    return hton8(x);\n}\n\nstatic uint16_t ntoh16 (uint16_t x)\n{\n    return hton16(x);\n}\n\nstatic uint32_t ntoh32 (uint32_t x)\n{\n    return hton32(x);\n}\n\nstatic uint64_t ntoh64 (uint64_t x)\n{\n    return hton64(x);\n}\n\nstatic uint8_t ltoh8 (uint8_t x)\n{\n    return htol8(x);\n}\n\nstatic uint16_t ltoh16 (uint16_t x)\n{\n    return htol16(x);\n}\n\nstatic uint32_t ltoh32 (uint32_t x)\n{\n    return htol32(x);\n}\n\nstatic uint64_t ltoh64 (uint64_t x)\n{\n    return htol64(x);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/cmdline.h",
    "content": "/**\n * @file cmdline.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Command line construction functions.\n */\n\n#ifndef BADVPN_MISC_CMDLINE_H\n#define BADVPN_MISC_CMDLINE_H\n\n#include <stddef.h>\n#include <stdarg.h>\n\n#include <misc/debug.h>\n#include <misc/exparray.h>\n#include <misc/strdup.h>\n#include <misc/memref.h>\n\ntypedef struct {\n    struct ExpArray arr;\n    size_t n;\n} CmdLine;\n\nstatic int CmdLine_Init (CmdLine *c);\nstatic void CmdLine_Free (CmdLine *c);\nstatic int CmdLine_Append (CmdLine *c, const char *str);\nstatic int CmdLine_AppendNoNull (CmdLine *c, const char *str, size_t str_len);\nstatic int CmdLine_AppendNoNullMr (CmdLine *c, MemRef mr);\nstatic int CmdLine_AppendMulti (CmdLine *c, int num, ...);\nstatic int CmdLine_Finish (CmdLine *c);\nstatic char ** CmdLine_Get (CmdLine *c);\n\nstatic int _CmdLine_finished (CmdLine *c)\n{\n    return (c->n > 0 && ((char **)c->arr.v)[c->n - 1] == NULL);\n}\n\nint CmdLine_Init (CmdLine *c)\n{\n    if (!ExpArray_init(&c->arr, sizeof(char *), 16)) {\n        return 0;\n    }\n    \n    c->n = 0;\n    \n    return 1;\n}\n\nvoid CmdLine_Free (CmdLine *c)\n{\n    for (size_t i = 0; i < c->n; i++) {\n        free(((char **)c->arr.v)[i]);\n    }\n    \n    free(c->arr.v);\n}\n\nint CmdLine_Append (CmdLine *c, const char *str)\n{\n    ASSERT(str)\n    ASSERT(!_CmdLine_finished(c))\n    \n    if (!ExpArray_resize(&c->arr, c->n + 1)) {\n        return 0;\n    }\n    \n    if (!(((char **)c->arr.v)[c->n] = strdup(str))) {\n        return 0;\n    }\n    \n    c->n++;\n    \n    return 1;\n}\n\nint CmdLine_AppendNoNull (CmdLine *c, const char *str, size_t str_len)\n{\n    ASSERT(str)\n    ASSERT(!memchr(str, '\\0', str_len))\n    ASSERT(!_CmdLine_finished(c))\n    \n    if (!ExpArray_resize(&c->arr, c->n + 1)) {\n        return 0;\n    }\n    \n    if (!(((char **)c->arr.v)[c->n] = b_strdup_bin(str, str_len))) {\n        return 0;\n    }\n    \n    c->n++;\n    \n    return 1;\n}\n\nint CmdLine_AppendNoNullMr (CmdLine *c, MemRef mr)\n{\n    return CmdLine_AppendNoNull(c, mr.ptr, mr.len);\n}\n\nint CmdLine_AppendMulti (CmdLine *c, int num, ...)\n{\n    int res = 1;\n    \n    va_list vl;\n    va_start(vl, num);\n    \n    for (int i = 0; i < num; i++) {\n        const char *str = va_arg(vl, const char *);\n        if (!CmdLine_Append(c, str)) {\n            res = 0;\n            break;\n        }\n    }\n    \n    va_end(vl);\n    \n    return res;\n}\n\nint CmdLine_Finish (CmdLine *c)\n{\n    ASSERT(!_CmdLine_finished(c))\n    \n    if (!ExpArray_resize(&c->arr, c->n + 1)) {\n        return 0;\n    }\n    \n    ((char **)c->arr.v)[c->n] = NULL;\n    \n    c->n++;\n    \n    return 1;\n}\n\nchar ** CmdLine_Get (CmdLine *c)\n{\n    ASSERT(_CmdLine_finished(c))\n    \n    return (char **)c->arr.v;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/compare.h",
    "content": "/**\n * @file compare.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_COMPARE_H\n#define BADVPN_COMPARE_H\n\n#define B_COMPARE(a, b) (((a) > (b)) - ((a) < (b)))\n#define B_COMPARE_COMBINE(cmp1, cmp2) ((cmp1) ? (cmp1) : (cmp2))\n#define B_COMPARE2(a, b, c, d) B_COMPARE_COMBINE(B_COMPARE((a), (b)), B_COMPARE((c), (d)))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/concat_strings.h",
    "content": "/**\n * @file concat_strings.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function for concatenating strings.\n */\n\n#ifndef BADVPN_MISC_CONCAT_STRINGS_H\n#define BADVPN_MISC_CONCAT_STRINGS_H\n\n#include <string.h>\n#include <stdlib.h>\n#include <stdarg.h>\n\n#include \"misc/debug.h\"\n\nstatic char * concat_strings (int num, ...)\n{\n    ASSERT(num >= 0)\n    \n    // calculate sum of lengths\n    size_t sum = 0;\n    va_list ap;\n    va_start(ap, num);\n    for (int i = 0; i < num; i++) {\n        const char *str = va_arg(ap, const char *);\n        size_t str_len = strlen(str);\n        if (str_len > SIZE_MAX - 1 - sum) {\n            va_end(ap);\n            return NULL;\n        }\n        sum += str_len;\n    }\n    va_end(ap);\n    \n    // allocate memory\n    char *res_str = (char *)malloc(sum + 1);\n    if (!res_str) {\n        return NULL;\n    }\n    \n    // copy strings\n    sum = 0;\n    va_start(ap, num);\n    for (int i = 0; i < num; i++) {\n        const char *str = va_arg(ap, const char *);\n        size_t str_len = strlen(str);\n        memcpy(res_str + sum, str, str_len);\n        sum += str_len;\n    }\n    va_end(ap);\n    \n    // terminate\n    res_str[sum] = '\\0';\n    \n    return res_str;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/dead.h",
    "content": "/**\n * @file dead.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Dead mechanism definitions.\n * \n * The dead mechanism is a way for a piece of code to detect whether some\n * specific event has occured during some operation (usually during calling\n * a user-provided handler function), without requiring access to memory\n * that might no longer be available because of the event.\n * \n * It works somehow like that:\n * \n * First a dead variable ({@link dead_t}) is allocated somewhere, and\n * initialized with {@link DEAD_INIT}, e.g.:\n *   DEAD_INIT(dead);\n * \n * When the event that needs to be caught occurs, {@link DEAD_KILL} is\n * called, e.g.:\n *   DEAD_KILL(dead);\n * The memory used by the dead variable is no longer needed after\n * that.\n * \n * If a piece of code needs to know whether the event occured during some\n * operation (but it must not have occured before!), it puts {@link DEAD_ENTER}}\n * in front of the operation, and does {@link DEAD_LEAVE} at the end. If\n * {@link DEAD_LEAVE} returned nonzero, the event occured, otherwise it did\n * not. Example:\n *   DEAD_ENTER(dead)\n *   HandlerFunction();\n *   if (DEAD_LEAVE(dead)) {\n *     (event occured)\n *   }\n * \n * If is is needed to check for the event more than once in a single block,\n * {@link DEAD_DECLARE} should be put somewhere before, and {@link DEAD_ENTER2}\n * should be used instead of {@link DEAD_ENTER}.\n * \n * If it is needed to check for multiple events (dead variables) at the same\n * time, DEAD_*_N macros should be used instead, specifying different\n * identiers as the first argument for different dead variables.\n */\n\n#ifndef BADVPN_MISC_DEAD_H\n#define BADVPN_MISC_DEAD_H\n\n#include <stdlib.h>\n\n/**\n * Dead variable.\n */\ntypedef int *dead_t;\n\n/**\n * Initializes a dead variable.\n */\n#define DEAD_INIT(ptr) { ptr = NULL; }\n\n/**\n * Kills the dead variable,\n */\n#define DEAD_KILL(ptr) { if (ptr) *(ptr) = 1; }\n\n/**\n * Kills the dead variable with the given value, or does nothing\n * if the value is 0. The value will seen by {@link DEAD_KILLED}.\n */\n#define DEAD_KILL_WITH(ptr, val) { if (ptr) *(ptr) = (val); }\n\n/**\n * Declares dead catching variables.\n */\n#define DEAD_DECLARE int badvpn__dead; dead_t badvpn__prev_ptr;\n\n/**\n * Enters a dead catching using already declared dead catching variables.\n * The dead variable must have been initialized with {@link DEAD_INIT},\n * and {@link DEAD_KILL} must not have been called yet.\n * {@link DEAD_LEAVE2} must be called before the current scope is left.\n */\n#define DEAD_ENTER2(ptr) { badvpn__dead = 0; badvpn__prev_ptr = ptr; ptr = &badvpn__dead; }\n\n/**\n * Declares dead catching variables and enters a dead catching.\n * The dead variable must have been initialized with {@link DEAD_INIT},\n * and {@link DEAD_KILL} must not have been called yet.\n * {@link DEAD_LEAVE2} must be called before the current scope is left.\n */\n#define DEAD_ENTER(ptr) DEAD_DECLARE DEAD_ENTER2(ptr)\n\n/**\n * Leaves a dead catching.\n */\n#define DEAD_LEAVE2(ptr) { if (!badvpn__dead) ptr = badvpn__prev_ptr; if (badvpn__prev_ptr) *badvpn__prev_ptr = badvpn__dead; }\n\n/**\n * Returns 1 if {@link DEAD_KILL} was called for the dead variable, 0 otherwise.\n * Must be called after entering a dead catching.\n */\n#define DEAD_KILLED (badvpn__dead)\n\n#define DEAD_DECLARE_N(n) int badvpn__dead##n; dead_t badvpn__prev_ptr##n;\n#define DEAD_ENTER2_N(n, ptr) { badvpn__dead##n = 0; badvpn__prev_ptr##n = ptr; ptr = &badvpn__dead##n;}\n#define DEAD_ENTER_N(n, ptr) DEAD_DECLARE_N(n) DEAD_ENTER2_N(n, ptr)\n#define DEAD_LEAVE2_N(n, ptr) { if (!badvpn__dead##n) ptr = badvpn__prev_ptr##n; if (badvpn__prev_ptr##n) *badvpn__prev_ptr##n = badvpn__dead##n; }\n#define DEAD_KILLED_N(n) (badvpn__dead##n)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/debug.h",
    "content": "/**\n * @file debug.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Debugging macros.\n */\n\n/**\n * @def DEBUG\n * \n * Macro for printing debugging text. Use the same way as printf,\n * but without a newline.\n * Prepends \"function_name: \" and appends a newline.\n */\n\n/**\n * @def ASSERT_FORCE\n * \n * Macro for forced assertions.\n * Evaluates the argument and terminates the program abnormally\n * if the result is false.\n */\n\n/**\n * @def ASSERT\n * \n * Macro for assertions.\n * The argument may or may not be evaluated.\n * If the argument is evaluated, it must not evaluate to false.\n */\n\n/**\n * @def ASSERT_EXECUTE\n * \n * Macro for always-evaluated assertions.\n * The argument is evaluated.\n * The argument must not evaluate to false.\n */\n\n/**\n * @def DEBUG_ZERO_MEMORY\n * \n * If debugging is enabled, zeroes the given memory region.\n * First argument is pointer to the memory region, second is\n * number of bytes.\n */\n\n/**\n * @def WARN_UNUSED\n * \n * Tells the compiler that the result of a function should not be unused.\n * Insert at the end of the declaration of a function before the semicolon.\n */\n\n/**\n * @def B_USE\n * \n * This can be used to suppress warnings about unused variables. It can\n * be applied to a variable or any expression. It does not evaluate the\n * expression.\n */\n\n#ifndef BADVPN_MISC_DEBUG_H\n#define BADVPN_MISC_DEBUG_H\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdint.h>\n#include <assert.h>\n\n#define DEBUG(...) \\\n    { \\\n        fprintf(stderr, \"%s: \", __FUNCTION__); \\\n        fprintf(stderr, __VA_ARGS__); \\\n        fprintf(stderr, \"\\n\"); \\\n    }\n\n#define ASSERT_FORCE(e) \\\n    { \\\n        if (!(e)) { \\\n            fprintf(stderr, \"%s:%d Assertion failed\\n\", __FILE__, __LINE__); \\\n        } \\\n    }\n\n#ifdef NDEBUG\n    #define DEBUG_ZERO_MEMORY(buf, len) {}\n    #define ASSERT(e) {}\n    #define ASSERT_EXECUTE(e) { (e); }\n#else\n    #define DEBUG_ZERO_MEMORY(buf, len) { memset((buf), 0, (len)); }\n    #ifdef BADVPN_USE_C_ASSERT\n        #define ASSERT(e) { assert(e); }\n        #define ASSERT_EXECUTE(e) \\\n            { \\\n                int _assert_res = !!(e); \\\n                assert(_assert_res); \\\n            }\n    #else\n        #define ASSERT(e) ASSERT_FORCE(e)\n        #define ASSERT_EXECUTE(e) ASSERT_FORCE(e)\n    #endif\n#endif\n\n#ifdef __GNUC__\n    #define WARN_UNUSED __attribute__((warn_unused_result))\n#else\n    #define WARN_UNUSED\n#endif\n\n#define B_USE(expr) (void)(sizeof((expr)));\n\n#define B_ASSERT_USE(expr) { ASSERT(expr) B_USE(expr) }\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/debugcounter.h",
    "content": "/**\n * @file debugcounter.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Counter for detecting leaks.\n */\n\n#ifndef BADVPN_MISC_DEBUGCOUNTER_H\n#define BADVPN_MISC_DEBUGCOUNTER_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n\n/**\n * Counter for detecting leaks.\n */\ntypedef struct {\n#ifndef NDEBUG\n    int32_t c;\n#endif\n} DebugCounter;\n\n#ifndef NDEBUG\n#define DEBUGCOUNTER_STATIC { 0 }\n#else\n#define DEBUGCOUNTER_STATIC {}\n#endif\n\n/**\n * Initializes the object.\n * The object is initialized with counter value zero.\n * \n * @param obj the object\n */\nstatic void DebugCounter_Init (DebugCounter *obj)\n{\n#ifndef NDEBUG\n    obj->c = 0;\n#endif\n}\n\n/**\n * Frees the object.\n * This does not have to be called when the counter is no longer needed.\n * The counter value must be zero.\n * \n * @param obj the object\n */\nstatic void DebugCounter_Free (DebugCounter *obj)\n{\n#ifndef NDEBUG\n    ASSERT(obj->c == 0 || obj->c == INT32_MAX)\n#endif\n}\n\n/**\n * Increments the counter.\n * Increments the counter value by one.\n * \n * @param obj the object\n */\nstatic void DebugCounter_Increment (DebugCounter *obj)\n{\n#ifndef NDEBUG\n    ASSERT(obj->c >= 0)\n    \n    if (obj->c != INT32_MAX) {\n        obj->c++;\n    }\n#endif\n}\n\n/**\n * Decrements the counter.\n * The counter value must be >0.\n * Decrements the counter value by one.\n * \n * @param obj the object\n */\nstatic void DebugCounter_Decrement (DebugCounter *obj)\n{\n#ifndef NDEBUG\n    ASSERT(obj->c > 0)\n    \n    if (obj->c != INT32_MAX) {\n        obj->c--;\n    }\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/debugerror.h",
    "content": "/**\n * @file debugerror.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Mechanism for ensuring an object is destroyed from inside an error handler\n * or its jobs.\n */\n\n#ifndef BADVPN_MISC_DEBUGERROR_H\n#define BADVPN_MISC_DEBUGERROR_H\n\n#include \"misc/debug.h\"\n#include \"base/BPending.h\"\n\n#ifndef NDEBUG\n    #define DEBUGERROR(de, call) \\\n        { \\\n            ASSERT(!BPending_IsSet(&(de)->job)) \\\n            BPending_Set(&(de)->job); \\\n            (call); \\\n        }\n#else\n    #define DEBUGERROR(de, call) { (call); }\n#endif\n\ntypedef struct {\n    #ifndef NDEBUG\n    BPending job;\n    #endif\n} DebugError;\n\nstatic void DebugError_Init (DebugError *o, BPendingGroup *pg);\nstatic void DebugError_Free (DebugError *o);\nstatic void DebugError_AssertNoError (DebugError *o);\n\n#ifndef NDEBUG\nstatic void _DebugError_job_handler (DebugError *o)\n{\n    ASSERT(0);\n}\n#endif\n\nvoid DebugError_Init (DebugError *o, BPendingGroup *pg)\n{\n    #ifndef NDEBUG\n    BPending_Init(&o->job, pg, (BPending_handler)_DebugError_job_handler, o);\n    #endif\n}\n\nvoid DebugError_Free (DebugError *o)\n{\n    #ifndef NDEBUG\n    BPending_Free(&o->job);\n    #endif\n}\n\nvoid DebugError_AssertNoError (DebugError *o)\n{\n    #ifndef NDEBUG\n    ASSERT(!BPending_IsSet(&o->job))\n    #endif\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/dhcp_proto.h",
    "content": "/**\n * @file dhcp_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the DHCP protocol.\n */\n\n#ifndef BADVPN_MISC_DHCP_PROTO_H\n#define BADVPN_MISC_DHCP_PROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define DHCP_OP_BOOTREQUEST 1\n#define DHCP_OP_BOOTREPLY 2\n\n#define DHCP_HARDWARE_ADDRESS_TYPE_ETHERNET 1\n\n#define DHCP_MAGIC 0x63825363\n\n#define DHCP_OPTION_PAD 0\n#define DHCP_OPTION_END 255\n\n#define DHCP_OPTION_SUBNET_MASK 1\n#define DHCP_OPTION_ROUTER 3\n#define DHCP_OPTION_DOMAIN_NAME_SERVER 6\n#define DHCP_OPTION_HOST_NAME 12\n#define DHCP_OPTION_REQUESTED_IP_ADDRESS 50\n#define DHCP_OPTION_IP_ADDRESS_LEASE_TIME 51\n#define DHCP_OPTION_DHCP_MESSAGE_TYPE 53\n#define DHCP_OPTION_DHCP_SERVER_IDENTIFIER 54\n#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55\n#define DHCP_OPTION_MAXIMUM_MESSAGE_SIZE 57\n#define DHCP_OPTION_RENEWAL_TIME_VALUE 58\n#define DHCP_OPTION_REBINDING_TIME_VALUE 59\n#define DHCP_OPTION_VENDOR_CLASS_IDENTIFIER 60\n#define DHCP_OPTION_CLIENT_IDENTIFIER 61\n\n#define DHCP_MESSAGE_TYPE_DISCOVER 1\n#define DHCP_MESSAGE_TYPE_OFFER 2\n#define DHCP_MESSAGE_TYPE_REQUEST 3\n#define DHCP_MESSAGE_TYPE_DECLINE 4\n#define DHCP_MESSAGE_TYPE_ACK 5\n#define DHCP_MESSAGE_TYPE_NAK 6\n#define DHCP_MESSAGE_TYPE_RELEASE 7\n\nB_START_PACKED\nstruct dhcp_header {\n    uint8_t op;\n    uint8_t htype;\n    uint8_t hlen;\n    uint8_t hops;\n    uint32_t xid;\n    uint16_t secs;\n    uint16_t flags;\n    uint32_t ciaddr;\n    uint32_t yiaddr;\n    uint32_t siaddr;\n    uint32_t giaddr;\n    uint8_t chaddr[16];\n    uint8_t sname[64];\n    uint8_t file[128];\n    uint32_t magic;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_header {\n    uint8_t type;\n    uint8_t len;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_dhcp_message_type {\n    uint8_t type;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_maximum_message_size {\n    uint16_t size;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_dhcp_server_identifier {\n    uint32_t id;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_time {\n    uint32_t time;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct dhcp_option_addr {\n    uint32_t addr;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ethernet_proto.h",
    "content": "/**\n * @file ethernet_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the Ethernet protocol.\n */\n\n#ifndef BADVPN_MISC_ETHERNET_PROTO_H\n#define BADVPN_MISC_ETHERNET_PROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define ETHERTYPE_IPV4 0x0800\n#define ETHERTYPE_ARP 0x0806\n\nB_START_PACKED\nstruct ethernet_header {\n    uint8_t dest[6];\n    uint8_t source[6];\n    uint16_t type;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/exparray.h",
    "content": "/**\n * @file exparray.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Dynamic array which grows exponentionally on demand.\n */\n\n#ifndef BADVPN_MISC_EXPARRAY_H\n#define BADVPN_MISC_EXPARRAY_H\n\n#include <stddef.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include <misc/debug.h>\n\nstruct ExpArray {\n    size_t esize;\n    size_t size;\n    void *v;\n};\n\nstatic int ExpArray_init (struct ExpArray *o, size_t esize, size_t size)\n{\n    ASSERT(esize > 0)\n    ASSERT(size > 0)\n    \n    o->esize = esize;\n    o->size = size;\n    \n    if (o->size > SIZE_MAX / o->esize) {\n        return 0;\n    }\n    \n    if (!(o->v = malloc(o->size * o->esize))) {\n        return 0;\n    }\n    \n    return 1;\n}\n\nstatic int ExpArray_resize (struct ExpArray *o, size_t size)\n{\n    ASSERT(size > 0)\n    \n    if (size <= o->size) {\n        return 1;\n    }\n    \n    size_t newsize = o->size;\n    \n    while (newsize < size) {\n        if (2 > SIZE_MAX / newsize) {\n            return 0;\n        }\n        \n        newsize = 2 * newsize;\n    }\n    \n    if (newsize > SIZE_MAX / o->esize) {\n        return 0;\n    }\n    \n    void *newarr = realloc(o->v, newsize * o->esize);\n    if (!newarr) {\n        return 0;\n    }\n    \n    o->size = newsize;\n    o->v = newarr;\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/expstring.h",
    "content": "/**\n * @file expstring.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_MISC_EXPSTRING_H\n#define BADVPN_MISC_EXPSTRING_H\n\n#include <stddef.h>\n\n#include <misc/debug.h>\n#include <misc/exparray.h>\n#include <misc/bsize.h>\n#include <misc/memref.h>\n\ntypedef struct {\n    struct ExpArray arr;\n    size_t n;\n} ExpString;\n\nstatic int ExpString_Init (ExpString *c);\nstatic void ExpString_Free (ExpString *c);\nstatic int ExpString_Append (ExpString *c, const char *str);\nstatic int ExpString_AppendChar (ExpString *c, char ch);\nstatic int ExpString_AppendByte (ExpString *c, uint8_t x);\nstatic int ExpString_AppendBinary (ExpString *c, const uint8_t *data, size_t len);\nstatic int ExpString_AppendBinaryMr (ExpString *c, MemRef data);\nstatic int ExpString_AppendZeros (ExpString *c, size_t len);\nstatic char * ExpString_Get (ExpString *c);\nstatic size_t ExpString_Length (ExpString *c);\nstatic MemRef ExpString_GetMr (ExpString *c);\n\nint ExpString_Init (ExpString *c)\n{\n    if (!ExpArray_init(&c->arr, 1, 16)) {\n        return 0;\n    }\n    \n    c->n = 0;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nvoid ExpString_Free (ExpString *c)\n{\n    free(c->arr.v);\n}\n\nint ExpString_Append (ExpString *c, const char *str)\n{\n    ASSERT(str)\n    \n    size_t l = strlen(str);\n    bsize_t newsize = bsize_add(bsize_fromsize(c->n), bsize_add(bsize_fromsize(l), bsize_fromint(1)));\n    \n    if (newsize.is_overflow || !ExpArray_resize(&c->arr, newsize.value)) {\n        return 0;\n    }\n    \n    memcpy((char *)c->arr.v + c->n, str, l);\n    c->n += l;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nint ExpString_AppendChar (ExpString *c, char ch)\n{\n    ASSERT(ch != '\\0')\n    \n    bsize_t newsize = bsize_add(bsize_fromsize(c->n), bsize_fromint(2));\n    \n    if (newsize.is_overflow || !ExpArray_resize(&c->arr, newsize.value)) {\n        return 0;\n    }\n    \n    ((char *)c->arr.v)[c->n] = ch;\n    c->n++;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nint ExpString_AppendByte (ExpString *c, uint8_t x)\n{\n    bsize_t newsize = bsize_add(bsize_fromsize(c->n), bsize_fromint(2));\n    \n    if (newsize.is_overflow || !ExpArray_resize(&c->arr, newsize.value)) {\n        return 0;\n    }\n    \n    ((uint8_t *)c->arr.v)[c->n] = x;\n    c->n++;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nint ExpString_AppendBinary (ExpString *c, const uint8_t *data, size_t len)\n{\n    bsize_t newsize = bsize_add(bsize_fromsize(c->n), bsize_add(bsize_fromsize(len), bsize_fromint(1)));\n    \n    if (newsize.is_overflow || !ExpArray_resize(&c->arr, newsize.value)) {\n        return 0;\n    }\n    \n    memcpy((char *)c->arr.v + c->n, data, len);\n    c->n += len;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nint ExpString_AppendBinaryMr (ExpString *c, MemRef data)\n{\n    return ExpString_AppendBinary(c, (uint8_t const *)data.ptr, data.len);\n}\n\nint ExpString_AppendZeros (ExpString *c, size_t len)\n{\n    bsize_t newsize = bsize_add(bsize_fromsize(c->n), bsize_add(bsize_fromsize(len), bsize_fromint(1)));\n    \n    if (newsize.is_overflow || !ExpArray_resize(&c->arr, newsize.value)) {\n        return 0;\n    }\n    \n    memset((char *)c->arr.v + c->n, 0, len);\n    c->n += len;\n    ((char *)c->arr.v)[c->n] = '\\0';\n    \n    return 1;\n}\n\nchar * ExpString_Get (ExpString *c)\n{\n    return (char *)c->arr.v;\n}\n\nsize_t ExpString_Length (ExpString *c)\n{\n    return c->n;\n}\n\nMemRef ExpString_GetMr (ExpString *c)\n{\n    return MemRef_Make((char const *)c->arr.v, c->n);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/find_char.h",
    "content": "/**\n * @file find_char.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_FIND_CHAR_H\n#define BADVPN_FIND_CHAR_H\n\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n\n/**\n * Finds the first character 'c' in the string represented by 'str' and 'len'.\n * If found, returns 1 and writes the position to *out_pos (if out_pos!=NULL).\n * If not found, returns 0 and does not modify *out_pos.\n */\nstatic int b_find_char_bin (const char *str, size_t len, char c, size_t *out_pos)\n{\n    ASSERT(str)\n    \n    for (size_t i = 0; i < len; i++) {\n        if (str[i] == c) {\n            if (out_pos) {\n                *out_pos = i;\n            }\n            return 1;\n        }\n    }\n    \n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/find_program.h",
    "content": "/**\n * @file find_program.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function that finds the absolute path of a program by checking a predefined\n * list of directories.\n */\n\n#ifndef BADVPN_FIND_PROGRAM_H\n#define BADVPN_FIND_PROGRAM_H\n\n#include <stdlib.h>\n#include <unistd.h>\n#include <string.h>\n\n#include <misc/concat_strings.h>\n#include <misc/debug.h>\n#include <misc/balloc.h>\n\nstatic char * badvpn_find_program (const char *name);\n\nstatic char * badvpn_find_program (const char *name)\n{\n    ASSERT(name)\n    \n    char *path = getenv(\"PATH\");\n    if (path) {\n        while (1) {\n            size_t i = 0;\n            while (path[i] != ':' && path[i] != '\\0') {\n                i++;\n            }\n            char const *src = path;\n            size_t src_len = i;\n            if (src_len == 0) {\n                src = \".\";\n                src_len = 1;\n            }\n            size_t name_len = strlen(name);\n            char *entry = BAllocSize(bsize_add(bsize_fromsize(src_len), bsize_add(bsize_fromsize(name_len), bsize_fromsize(2))));\n            if (!entry) {\n                goto fail;\n            }\n            memcpy(entry, src, src_len);\n            entry[src_len] = '/';\n            strcpy(entry + (src_len + 1), name);\n            if (access(entry, X_OK) == 0) {\n                return entry;\n            }\n            free(entry);\n            if (path[i] == '\\0') {\n                break;\n            }\n            path += i + 1;\n        }\n    }\n    \n    const char *dirs[] = {\"/usr/sbin\", \"/usr/bin\", \"/sbin\", \"/bin\", NULL};\n    \n    for (size_t i = 0; dirs[i]; i++) {\n        char *try_path = concat_strings(3, dirs[i], \"/\", name);\n        if (!try_path) {\n            goto fail;\n        }\n        \n        if (access(try_path, X_OK) == 0) {\n            return try_path;\n        }\n        \n        free(try_path);\n    }\n    \nfail:\n    return NULL;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/get_iface_info.h",
    "content": "/**\n * @file get_iface_info.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_GETIFACEINFO_H\n#define BADVPN_GETIFACEINFO_H\n\n#include <stdio.h>\n#include <string.h>\n#include <stdint.h>\n#include <unistd.h>\n#include <sys/socket.h>\n#include <net/if.h>\n#include <net/if_arp.h>\n#include <sys/ioctl.h>\n\n#include <misc/debug.h>\n\n/**\n * Returns information about a network interface with the given name.\n * \n * @param ifname name of interface to get information for\n * @param out_mac the MAC address will be returned here, unless NULL\n * @param out_mtu the MTU will be returned here, unless NULL\n * @param out_ifindex the interface index will be returned here, unless NULL\n * @return 1 on success, 0 on failure\n */\nstatic int badvpn_get_iface_info (const char *ifname, uint8_t *out_mac, int *out_mtu, int *out_ifindex) WARN_UNUSED;\n\n\nstatic int badvpn_get_iface_info (const char *ifname, uint8_t *out_mac, int *out_mtu, int *out_ifindex)\n{\n    ASSERT(ifname)\n    \n    struct ifreq ifr;\n    \n    int s = socket(AF_INET, SOCK_DGRAM, 0);\n    if (s < 0) {\n        goto fail0;\n    }\n    \n    // get MAC\n    if (out_mac) {\n        memset(&ifr, 0, sizeof(ifr));\n        snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), \"%s\", ifname);\n        if (ioctl(s, SIOCGIFHWADDR, &ifr)) {\n            goto fail1;\n        }\n        if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {\n            goto fail1;\n        }\n        memcpy(out_mac, ifr.ifr_hwaddr.sa_data, 6);\n    }\n    \n    // get MTU\n    if (out_mtu) {\n        memset(&ifr, 0, sizeof(ifr));\n        snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), \"%s\", ifname);\n        if (ioctl(s, SIOCGIFMTU, &ifr)) {\n            goto fail1;\n        }\n        *out_mtu = ifr.ifr_mtu;\n    }\n    \n    // get interface index\n    if (out_ifindex) {\n        memset(&ifr, 0, sizeof(ifr));\n        snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), \"%s\", ifname);\n        if (ioctl(s, SIOCGIFINDEX, &ifr)) {\n            goto fail1;\n        }\n        *out_ifindex = ifr.ifr_ifindex;\n    }\n    \n    close(s);\n    \n    return 1;\n    \nfail1:\n    close(s);\nfail0:\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/grow_array.h",
    "content": "/**\n * @file grow_array.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs:\n// GROWARRAY_NAME - prefix of of functions to define\n// GROWARRAY_OBJECT_TYPE - type of structure where array and capacity sizes are\n// GROWARRAY_ARRAY_MEMBER - array member\n// GROWARRAY_CAPACITY_MEMBER - capacity member\n// GROWARRAY_MAX_CAPACITY - max value of capacity member\n\n#include <limits.h>\n#include <string.h>\n#include <stddef.h>\n\n#include <misc/debug.h>\n#include <misc/balloc.h>\n#include <misc/merge.h>\n\n#define GrowArrayObject GROWARRAY_OBJECT_TYPE\n#define GrowArray_Init MERGE(GROWARRAY_NAME, _Init)\n#define GrowArray_InitEmpty MERGE(GROWARRAY_NAME, _InitEmpty)\n#define GrowArray_Free MERGE(GROWARRAY_NAME, _Free)\n#define GrowArray_DoubleUp MERGE(GROWARRAY_NAME, _DoubleUp)\n#define GrowArray_DoubleUpLimit MERGE(GROWARRAY_NAME, _DoubleUpLimit)\n\nstatic int GrowArray_Init (GrowArrayObject *o, size_t capacity) WARN_UNUSED;\nstatic void GrowArray_InitEmpty (GrowArrayObject *o);\nstatic void GrowArray_Free (GrowArrayObject *o);\nstatic int GrowArray_DoubleUp (GrowArrayObject *o) WARN_UNUSED;\nstatic int GrowArray_DoubleUpLimit (GrowArrayObject *o, size_t limit) WARN_UNUSED;\n\nstatic int GrowArray_Init (GrowArrayObject *o, size_t capacity)\n{\n    if (capacity > GROWARRAY_MAX_CAPACITY) {\n        return 0;\n    }\n    \n    if (capacity == 0) {\n        o->GROWARRAY_ARRAY_MEMBER = NULL;\n    } else {\n        if (!(o->GROWARRAY_ARRAY_MEMBER = BAllocArray(capacity, sizeof(o->GROWARRAY_ARRAY_MEMBER[0])))) {\n            return 0;\n        }\n    }\n    \n    o->GROWARRAY_CAPACITY_MEMBER = capacity;\n    \n    return 1;\n}\n\nstatic void GrowArray_InitEmpty (GrowArrayObject *o)\n{\n    o->GROWARRAY_ARRAY_MEMBER = NULL;\n    o->GROWARRAY_CAPACITY_MEMBER = 0;\n}\n\nstatic void GrowArray_Free (GrowArrayObject *o)\n{\n    if (o->GROWARRAY_ARRAY_MEMBER) {\n        BFree(o->GROWARRAY_ARRAY_MEMBER);\n    }\n}\n\nstatic int GrowArray_DoubleUp (GrowArrayObject *o)\n{\n    return GrowArray_DoubleUpLimit(o, SIZE_MAX);\n}\n\nstatic int GrowArray_DoubleUpLimit (GrowArrayObject *o, size_t limit)\n{\n    if (o->GROWARRAY_CAPACITY_MEMBER > SIZE_MAX / 2 || o->GROWARRAY_CAPACITY_MEMBER > GROWARRAY_MAX_CAPACITY / 2) {\n        return 0;\n    }\n    \n    size_t newcap = 2 * o->GROWARRAY_CAPACITY_MEMBER;\n    if (newcap == 0) {\n        newcap = 1;\n    }\n    \n    if (newcap > limit) {\n        newcap = limit;\n        if (newcap == o->GROWARRAY_CAPACITY_MEMBER) {\n            return 0;\n        }\n    }\n    \n    void *newarr = BAllocArray(newcap, sizeof(o->GROWARRAY_ARRAY_MEMBER[0]));\n    if (!newarr) {\n        return 0;\n    }\n    \n    memcpy(newarr, o->GROWARRAY_ARRAY_MEMBER, o->GROWARRAY_CAPACITY_MEMBER * sizeof(o->GROWARRAY_ARRAY_MEMBER[0]));\n    \n    BFree(o->GROWARRAY_ARRAY_MEMBER);\n    \n    o->GROWARRAY_ARRAY_MEMBER = newarr;\n    o->GROWARRAY_CAPACITY_MEMBER = newcap;\n    \n    return 1;\n}\n\n#undef GROWARRAY_NAME\n#undef GROWARRAY_OBJECT_TYPE\n#undef GROWARRAY_ARRAY_MEMBER\n#undef GROWARRAY_CAPACITY_MEMBER\n#undef GROWARRAY_MAX_CAPACITY\n\n#undef GrowArrayObject\n#undef GrowArray_Init\n#undef GrowArray_InitEmpty\n#undef GrowArray_Free\n#undef GrowArray_DoubleUp\n#undef GrowArray_DoubleUpLimit\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/hashfun.h",
    "content": "/**\n * @file hashfun.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_HASHFUN_H\n#define BADVPN_HASHFUN_H\n\n#include <stdint.h>\n#include <stddef.h>\n\nstatic size_t badvpn_djb2_hash (const uint8_t *str)\n{\n    size_t hash = 5381;\n    int c;\n    \n    while (c = *str++) {\n        hash = ((hash << 5) + hash) + c;\n    }\n    \n    return hash;\n}\n\nstatic size_t badvpn_djb2_hash_bin (const uint8_t *str, size_t str_len)\n{\n    size_t hash = 5381;\n    \n    while (str_len-- > 0) {\n        int c = *str++;\n        hash = ((hash << 5) + hash) + c;\n    }\n    \n    return hash;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/igmp_proto.h",
    "content": "/**\n * @file igmp_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the IGMP protocol.\n */\n\n#ifndef BADVPN_MISC_IGMP_PROTO_H\n#define BADVPN_MISC_IGMP_PROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define IGMP_TYPE_MEMBERSHIP_QUERY 0x11\n#define IGMP_TYPE_V1_MEMBERSHIP_REPORT 0x12\n#define IGMP_TYPE_V2_MEMBERSHIP_REPORT 0x16\n#define IGMP_TYPE_V3_MEMBERSHIP_REPORT 0x22\n#define IGMP_TYPE_V2_LEAVE_GROUP 0x17\n\n#define IGMP_RECORD_TYPE_MODE_IS_INCLUDE 1\n#define IGMP_RECORD_TYPE_MODE_IS_EXCLUDE 2\n#define IGMP_RECORD_TYPE_CHANGE_TO_INCLUDE_MODE 3\n#define IGMP_RECORD_TYPE_CHANGE_TO_EXCLUDE_MODE 4\n\nB_START_PACKED\nstruct igmp_source {\n    uint32_t addr;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct igmp_base {\n    uint8_t type;\n    uint8_t max_resp_code;\n    uint16_t checksum;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct igmp_v3_query_extra {\n    uint32_t group;\n    uint8_t reserved4_suppress1_qrv3;\n    uint8_t qqic;\n    uint16_t number_of_sources;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct igmp_v3_report_extra {\n    uint16_t reserved;\n    uint16_t number_of_group_records;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct igmp_v3_report_record {\n    uint8_t type;\n    uint8_t aux_data_len;\n    uint16_t number_of_sources;\n    uint32_t group;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct igmp_v2_extra {\n    uint32_t group;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ipaddr.h",
    "content": "/**\n * @file ipaddr.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * IP address parsing functions.\n */\n\n#ifndef BADVPN_MISC_IPADDR_H\n#define BADVPN_MISC_IPADDR_H\n\n#include <string.h>\n#include <stdlib.h>\n\n#include <misc/debug.h>\n#include <misc/byteorder.h>\n#include <misc/parse_number.h>\n#include <misc/find_char.h>\n#include <misc/print_macros.h>\n#include <misc/memref.h>\n\nstruct ipv4_ifaddr {\n    uint32_t addr;\n    int prefix;\n};\n\nstatic int ipaddr_parse_ipv4_addr (MemRef name, uint32_t *out_addr);\nstatic int ipaddr_parse_ipv4_prefix (MemRef str, int *num);\nstatic int ipaddr_parse_ipv4_ifaddr (MemRef str, struct ipv4_ifaddr *out);\nstatic int ipaddr_ipv4_ifaddr_from_addr_mask (uint32_t addr, uint32_t mask, struct ipv4_ifaddr *out);\nstatic uint32_t ipaddr_ipv4_mask_from_prefix (int prefix);\nstatic int ipaddr_ipv4_prefix_from_mask (uint32_t mask, int *out_prefix);\nstatic int ipaddr_ipv4_addrs_in_network (uint32_t addr1, uint32_t addr2, int netprefix);\n\n#define IPADDR_PRINT_MAX 19\n\nstatic void ipaddr_print_addr (uint32_t addr, char *out);\nstatic void ipaddr_print_ifaddr (struct ipv4_ifaddr ifaddr, char *out);\n\nint ipaddr_parse_ipv4_addr (MemRef name, uint32_t *out_addr)\n{\n    for (size_t i = 0; ; i++) {\n        size_t j;\n        for (j = 0; j < name.len && name.ptr[j] != '.'; j++);\n        \n        if ((j == name.len && i < 3) || (j < name.len && i == 3)) {\n            return 0;\n        }\n        \n        if (j < 1 || j > 3) {\n            return 0;\n        }\n        \n        uintmax_t d;\n        if (!parse_unsigned_integer(MemRef_SubTo(name, j), &d)) {\n            return 0;\n        }\n        \n        if (d > 255) {\n            return 0;\n        }\n        \n        ((uint8_t *)out_addr)[i] = d;\n        \n        if (i == 3) {\n            return 1;\n        }\n        \n        name.ptr += j + 1;\n        name.len -= j + 1;\n    }\n}\n\nint ipaddr_parse_ipv4_prefix (MemRef str, int *num)\n{\n    uintmax_t d;\n    if (!parse_unsigned_integer(str, &d)) {\n        return 0;\n    }\n    if (d > 32) {\n        return 0;\n    }\n    \n    *num = d;\n    return 1;\n}\n\nint ipaddr_parse_ipv4_ifaddr (MemRef str, struct ipv4_ifaddr *out)\n{\n    size_t slash_pos;\n    if (!MemRef_FindChar(str, '/', &slash_pos)) {\n        return 0;\n    }\n    \n    return (ipaddr_parse_ipv4_addr(MemRef_SubTo(str, slash_pos), &out->addr) &&\n            ipaddr_parse_ipv4_prefix(MemRef_SubFrom(str, slash_pos + 1), &out->prefix));\n}\n\nint ipaddr_ipv4_ifaddr_from_addr_mask (uint32_t addr, uint32_t mask, struct ipv4_ifaddr *out)\n{\n    int prefix;\n    if (!ipaddr_ipv4_prefix_from_mask(mask, &prefix)) {\n        return 0;\n    }\n    \n    out->addr = addr;\n    out->prefix = prefix;\n    return 1;\n}\n\nuint32_t ipaddr_ipv4_mask_from_prefix (int prefix)\n{\n    ASSERT(prefix >= 0)\n    ASSERT(prefix <= 32)\n    \n    uint32_t t = 0;\n    for (int i = 0; i < prefix; i++) {\n        t |= 1 << (32 - i - 1);\n    }\n    \n    return hton32(t);\n}\n\nint ipaddr_ipv4_prefix_from_mask (uint32_t mask, int *out_prefix)\n{\n    uint32_t t = 0;\n    int i;\n    for (i = 0; i <= 32; i++) {\n        if (ntoh32(mask) == t) {\n            break;\n        }\n        if (i < 32) {\n            t |= (1 << (32 - i - 1));\n        }\n    }\n    if (!(i <= 32)) {\n        return 0;\n    }\n    \n    *out_prefix = i;\n    return 1;\n}\n\nint ipaddr_ipv4_addrs_in_network (uint32_t addr1, uint32_t addr2, int netprefix)\n{\n    ASSERT(netprefix >= 0)\n    ASSERT(netprefix <= 32)\n    \n    uint32_t mask = ipaddr_ipv4_mask_from_prefix(netprefix);\n    \n    return !!((addr1 & mask) == (addr2 & mask));\n}\n\nvoid ipaddr_print_addr (uint32_t addr, char *out)\n{\n    ASSERT(out)\n    \n    uint8_t *b = (uint8_t *)&addr;\n    \n    sprintf(out, \"%\"PRIu8\".%\"PRIu8\".%\"PRIu8\".%\"PRIu8,\n            b[0], b[1], b[2], b[3]);\n}\n\nvoid ipaddr_print_ifaddr (struct ipv4_ifaddr ifaddr, char *out)\n{\n    ASSERT(ifaddr.prefix >= 0)\n    ASSERT(ifaddr.prefix <= 32)\n    ASSERT(out)\n    \n    uint8_t *b = (uint8_t *)&ifaddr.addr;\n    \n    sprintf(out, \"%\"PRIu8\".%\"PRIu8\".%\"PRIu8\".%\"PRIu8\"/%d\",\n            b[0], b[1], b[2], b[3], ifaddr.prefix);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ipaddr6.h",
    "content": "/**\n * @file ipaddr6.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * IPv6 address parsing functions.\n */\n\n#ifndef BADVPN_MISC_IPADDR6_H\n#define BADVPN_MISC_IPADDR6_H\n\n#include <stdio.h>\n#include <string.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/parse_number.h\"\n#include \"misc/find_char.h\"\n#include \"misc/print_macros.h\"\n#include \"misc/memref.h\"\n\nstruct ipv6_addr {\n    uint8_t bytes[16];\n};\n\nstruct ipv6_ifaddr {\n    struct ipv6_addr addr;\n    int prefix;\n};\n\nstatic int ipaddr6_parse_ipv6_addr (MemRef name, struct ipv6_addr *out_addr);\nstatic int ipaddr6_parse_ipv6_prefix (MemRef str, int *out_num);\nstatic int ipaddr6_parse_ipv6_ifaddr (MemRef str, struct ipv6_ifaddr *out);\nstatic int ipaddr6_ipv6_ifaddr_from_addr_mask (struct ipv6_addr addr, struct ipv6_addr mask, struct ipv6_ifaddr *out);\nstatic void ipaddr6_ipv6_mask_from_prefix (int prefix, struct ipv6_addr *out_mask);\nstatic int ipaddr6_ipv6_prefix_from_mask (struct ipv6_addr mask, int *out_prefix);\nstatic int ipaddr6_ipv6_addrs_in_network (struct ipv6_addr addr1, struct ipv6_addr addr2, int netprefix);\n\n#define IPADDR6_PRINT_MAX 44\n\nstatic void ipaddr6_print_addr (struct ipv6_addr addr, char *out_buf);\nstatic void ipaddr6_print_ifaddr (struct ipv6_ifaddr addr, char *out_buf);\n\nint ipaddr6_parse_ipv6_addr (MemRef name, struct ipv6_addr *out_addr)\n{\n    int num_blocks = 0;\n    int compress_pos = -1;\n    uint16_t block = 0;\n    int empty = 1;\n    \n    size_t i = 0;\n    \n    while (i < name.len) {\n        if (name.ptr[i] == '.') {\n            goto ipv4_ending;\n        } else if (name.ptr[i] == ':') {\n            int is_double = (i + 1 < name.len && name.ptr[i + 1] == ':');\n            \n            if (i > 0) {\n                if (empty || num_blocks == 7) {\n                    return 0;\n                }\n                out_addr->bytes[2 * num_blocks + 0] = block >> 8;\n                out_addr->bytes[2 * num_blocks + 1] = block & 0xFF;\n                num_blocks++;\n                block = 0;\n                empty = 1;\n            }\n            else if (!is_double) {\n                return 0;\n            }\n            \n            if (is_double) {\n                if (compress_pos != -1) {\n                    return 0;\n                }\n                compress_pos = num_blocks;\n            }\n            \n            i += 1 + is_double;\n        } else {\n            int digit = decode_hex_digit(name.ptr[i]);\n            if (digit < 0) {\n                return 0;\n            }\n            if (block > UINT16_MAX / 16) {\n                return 0;\n            }\n            block *= 16;\n            if (digit > UINT16_MAX - block) {\n                return 0;\n            }\n            block += digit;\n            empty = 0;\n            i += 1;\n        }\n    }\n    \n    if (!empty) {\n        out_addr->bytes[2 * num_blocks + 0] = block >> 8;\n        out_addr->bytes[2 * num_blocks + 1] = block & 0xFF;\n        num_blocks++;\n    }\n    else if (num_blocks != compress_pos) {\n        return 0;\n    }\n    \nipv4_done:\n    if (compress_pos == -1) {\n        if (num_blocks != 8) {\n            return 0;\n        }\n        compress_pos = 0;\n    }\n    \n    int num_rear = num_blocks - compress_pos;\n    memmove(out_addr->bytes + 2 * (8 - num_rear), out_addr->bytes + 2 * compress_pos, 2 * num_rear);\n    memset(out_addr->bytes + 2 * compress_pos, 0, 2 * (8 - num_rear - compress_pos));\n    \n    return 1;\n    \nipv4_ending:\n    if (empty || (num_blocks == 0 && compress_pos == -1)) {\n        return 0;\n    }\n    \n    while (name.ptr[i - 1] != ':') {\n        i--;\n    }\n    \n    uint8_t bytes[4];\n    int cur_byte = 0;\n    uint8_t byte = 0;\n    empty = 1;\n    \n    while (i < name.len) {\n        if (name.ptr[i] == '.') {\n            if (empty || cur_byte == 3) {\n                return 0;\n            }\n            bytes[cur_byte] = byte;\n            cur_byte++;\n            byte = 0;\n            empty = 1;\n        } else {\n            if (!empty && byte == 0) {\n                return 0;\n            }\n            int digit = decode_decimal_digit(name.ptr[i]);\n            if (digit < 0) {\n                return 0;\n            }\n            if (byte > UINT8_MAX / 10) {\n                return 0;\n            }\n            byte *= 10;\n            if (digit > UINT8_MAX - byte) {\n                return 0;\n            }\n            byte += digit;\n            empty = 0;\n        }\n        i++;\n    }\n    \n    if (cur_byte != 3 || empty) {\n        return 0;\n    }\n    bytes[cur_byte] = byte;\n    \n    if (8 - num_blocks < 2) {\n        return 0;\n    }\n    memcpy(out_addr->bytes + 2 * num_blocks, bytes, 4);\n    num_blocks += 2;\n    \n    goto ipv4_done;\n}\n\nint ipaddr6_parse_ipv6_prefix (MemRef str, int *out_num)\n{\n    uintmax_t d;\n    if (!parse_unsigned_integer(str, &d)) {\n        return 0;\n    }\n    if (d > 128) {\n        return 0;\n    }\n    \n    *out_num = d;\n    return 1;\n}\n\nint ipaddr6_parse_ipv6_ifaddr (MemRef str, struct ipv6_ifaddr *out)\n{\n    size_t slash_pos;\n    if (!MemRef_FindChar(str, '/', &slash_pos)) {\n        return 0;\n    }\n    \n    return (ipaddr6_parse_ipv6_addr(MemRef_SubTo(str, slash_pos), &out->addr) &&\n            ipaddr6_parse_ipv6_prefix(MemRef_SubFrom(str, slash_pos + 1), &out->prefix));\n}\n\nint ipaddr6_ipv6_ifaddr_from_addr_mask (struct ipv6_addr addr, struct ipv6_addr mask, struct ipv6_ifaddr *out)\n{\n    int prefix;\n    if (!ipaddr6_ipv6_prefix_from_mask(mask, &prefix)) {\n        return 0;\n    }\n    \n    out->addr = addr;\n    out->prefix = prefix;\n    return 1;\n}\n\nvoid ipaddr6_ipv6_mask_from_prefix (int prefix, struct ipv6_addr *out_mask)\n{\n    ASSERT(prefix >= 0)\n    ASSERT(prefix <= 128)\n    \n    int quot = prefix / 8;\n    int rem = prefix % 8;\n    \n    if (quot > 0) {\n        memset(out_mask->bytes, UINT8_MAX, quot);\n    }\n    if (16 - quot > 0) {\n        memset(out_mask->bytes + quot, 0, 16 - quot);\n    }\n    \n    for (int i = 0; i < rem; i++) {\n        out_mask->bytes[quot] |= (uint8_t)1 << (8 - i - 1);\n    }\n}\n\nint ipaddr6_ipv6_prefix_from_mask (struct ipv6_addr mask, int *out_prefix)\n{\n    int prefix = 0;\n    int i = 0;\n    \n    while (i < 16 && mask.bytes[i] == UINT8_MAX) {\n        prefix += 8;\n        i++;\n    }\n    \n    if (i < 16) {\n        uint8_t t = 0;\n        int j;\n        for (j = 0; j <= 8; j++) {\n            if (mask.bytes[i] == t) {\n                break;\n            }\n            if (j < 8) {\n                t |= ((uint8_t)1 << (8 - j - 1));\n            }\n        }\n        if (!(j <= 8)) {\n            return 0;\n        }\n        \n        prefix += j;\n        i++;\n        \n        while (i < 16) {\n            if (mask.bytes[i] != 0) {\n                return 0;\n            }\n            i++;\n        }\n    }\n    \n    *out_prefix = prefix;\n    return 1;\n}\n\nint ipaddr6_ipv6_addrs_in_network (struct ipv6_addr addr1, struct ipv6_addr addr2, int netprefix)\n{\n    ASSERT(netprefix >= 0)\n    ASSERT(netprefix <= 128)\n    \n    int quot = netprefix / 8;\n    int rem = netprefix % 8;\n    \n    if (memcmp(addr1.bytes, addr2.bytes, quot)) {\n        return 0;\n    }\n    \n    if (rem == 0) {\n        return 1;\n    }\n    \n    uint8_t t = 0;\n    for (int i = 0; i < rem; i++) {\n        t |= (uint8_t)1 << (8 - i - 1);\n    }\n    \n    return ((addr1.bytes[quot] & t) == (addr2.bytes[quot] & t));\n}\n\nvoid ipaddr6_print_addr (struct ipv6_addr addr, char *out_buf)\n{\n    int largest_start = 0;\n    int largest_len = 0;\n    int current_start = 0;\n    int current_len = 0;\n    \n    for (int i = 0; i < 8; i++) {\n        if (addr.bytes[2 * i] == 0 && addr.bytes[2 * i + 1] == 0) {\n            current_len++;\n            if (current_len > largest_len) {\n                largest_start = current_start;\n                largest_len = current_len;\n            }\n        } else {\n            current_start = i + 1;\n            current_len = 0;\n        }\n    }\n    \n    if (largest_len > 1) {\n        for (int i = 0; i < largest_start; i++) {\n            uint16_t block = ((uint16_t)addr.bytes[2 * i] << 8) | addr.bytes[2 * i + 1];\n            out_buf += sprintf(out_buf, \"%\"PRIx16\":\", block);\n        }\n        if (largest_start == 0) {\n            out_buf += sprintf(out_buf, \":\");\n        }\n        \n        for (int i = largest_start + largest_len; i < 8; i++) {\n            uint16_t block = ((uint16_t)addr.bytes[2 * i] << 8) | addr.bytes[2 * i + 1];\n            out_buf += sprintf(out_buf, \":%\"PRIx16, block);\n        }\n        if (largest_start + largest_len == 8) {\n            out_buf += sprintf(out_buf, \":\");\n        }\n    } else {\n        const char *prefix = \"\";\n        for (int i = 0; i < 8; i++) {\n            uint16_t block = ((uint16_t)addr.bytes[2 * i] << 8) | addr.bytes[2 * i + 1];\n            out_buf += sprintf(out_buf, \"%s%\"PRIx16, prefix, block);\n            prefix = \":\";\n        }\n    }\n}\n\nvoid ipaddr6_print_ifaddr (struct ipv6_ifaddr addr, char *out_buf)\n{\n    ASSERT(addr.prefix >= 0)\n    ASSERT(addr.prefix <= 128)\n    \n    ipaddr6_print_addr(addr.addr, out_buf);\n    sprintf(out_buf + strlen(out_buf), \"/%d\", addr.prefix);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ipv4_proto.h",
    "content": "/**\n * @file ipv4_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the IPv4 protocol.\n */\n\n#ifndef BADVPN_MISC_IPV4_PROTO_H\n#define BADVPN_MISC_IPV4_PROTO_H\n\n#include <stdint.h>\n#include <string.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/packed.h\"\n#include \"misc/read_write_int.h\"\n\n#define IPV4_PROTOCOL_IGMP 2\n#define IPV4_PROTOCOL_UDP 17\n\nB_START_PACKED\nstruct ipv4_header {\n    uint8_t version4_ihl4;\n    uint8_t ds;\n    uint16_t total_length;\n    //\n    uint16_t identification;\n    uint16_t flags3_fragmentoffset13;\n    //\n    uint8_t ttl;\n    uint8_t protocol;\n    uint16_t checksum;\n    //\n    uint32_t source_address;\n    //\n    uint32_t destination_address;\n} B_PACKED;\nB_END_PACKED\n\n#define IPV4_GET_VERSION(_header) (((_header).version4_ihl4&0xF0)>>4)\n#define IPV4_GET_IHL(_header) (((_header).version4_ihl4&0x0F)>>0)\n\n#define IPV4_MAKE_VERSION_IHL(size) (((size)/4) + (4 << 4))\n\nstatic uint16_t ipv4_checksum (const struct ipv4_header *header, const char *extra, uint16_t extra_len)\n{\n    ASSERT(extra_len % 2 == 0)\n    ASSERT(extra_len == 0 || extra)\n    \n    uint32_t t = 0;\n    \n    for (uint16_t i = 0; i < sizeof(*header) / 2; i++) {\n        t += badvpn_read_be16((const char *)header + 2 * i);\n    }\n    \n    for (uint16_t i = 0; i < extra_len / 2; i++) {\n        t += badvpn_read_be16((const char *)extra + 2 * i);\n    }\n    \n    while (t >> 16) {\n        t = (t & 0xFFFF) + (t >> 16);\n    }\n    \n    return hton16(~t);\n}\n\nstatic int ipv4_check (uint8_t *data, int data_len, struct ipv4_header *out_header, uint8_t **out_payload, int *out_payload_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(out_header)\n    ASSERT(out_payload)\n    ASSERT(out_payload_len)\n    \n    // check base header\n    if (data_len < sizeof(struct ipv4_header)) {\n        return 0;\n    }\n    memcpy(out_header, data, sizeof(*out_header));\n    \n    // check version\n    if (IPV4_GET_VERSION(*out_header) != 4) {\n        return 0;\n    }\n    \n    // check options\n    uint16_t header_len = IPV4_GET_IHL(*out_header) * 4;\n    if (header_len < sizeof(struct ipv4_header)) {\n        return 0;\n    }\n    if (header_len > data_len) {\n        return 0;\n    }\n    \n    // check total length\n    uint16_t total_length = ntoh16(out_header->total_length);\n    if (total_length < header_len) {\n        return 0;\n    }\n    if (total_length > data_len) {\n        return 0;\n    }\n    \n    // check checksum\n    uint16_t checksum_in_packet = out_header->checksum;\n    out_header->checksum = hton16(0);\n    uint16_t checksum_computed = ipv4_checksum(out_header, (char *)data + sizeof(*out_header), header_len - sizeof(*out_header));\n    out_header->checksum = checksum_in_packet;\n    if (checksum_in_packet != checksum_computed) {\n        return 0;\n    }\n    \n    *out_payload = data + header_len;\n    *out_payload_len = total_length - header_len;\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/ipv6_proto.h",
    "content": "/**\n * @file ipv6_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_IPV6_PROTO_H\n#define BADVPN_IPV6_PROTO_H\n\n#include <stdint.h>\n#include <string.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/packed.h\"\n\n#define IPV6_NEXT_IGMP 2\n#define IPV6_NEXT_UDP 17\n\nB_START_PACKED\nstruct ipv6_header {\n    uint8_t version4_tc4;\n    uint8_t tc4_fl4;\n    uint16_t fl;\n    uint16_t payload_length;\n    uint8_t next_header;\n    uint8_t hop_limit;\n    uint8_t source_address[16];\n    uint8_t destination_address[16];\n} B_PACKED;\nB_END_PACKED\n\nstatic int ipv6_check (uint8_t *data, int data_len, struct ipv6_header *out_header, uint8_t **out_payload, int *out_payload_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(out_header)\n    ASSERT(out_payload)\n    ASSERT(out_payload_len)\n    \n    // check base header\n    if (data_len < sizeof(struct ipv6_header)) {\n        return 0;\n    }\n    memcpy(out_header, data, sizeof(*out_header));\n    \n    // check version\n    if ((ntoh8(out_header->version4_tc4) >> 4) != 6) {\n        return 0;\n    }\n    \n    // check payload length\n    uint16_t payload_length = ntoh16(out_header->payload_length);\n    if (payload_length > data_len - sizeof(struct ipv6_header)) {\n        return 0;\n    }\n    \n    *out_payload = data + sizeof(struct ipv6_header);\n    *out_payload_len = payload_length;\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/loggers_string.h",
    "content": "/**\n * @file loggers_string.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * List of available loggers.\n */\n\n#ifndef BADVPN_MISC_LOGGERSSTRING_H\n#define BADVPN_MISC_LOGGERSSTRING_H\n\n#ifdef BADVPN_USE_WINAPI\n#define LOGGERS_STRING \"stdout\"\n#else\n#define LOGGERS_STRING \"stdout/syslog\"\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/loglevel.h",
    "content": "/**\n * @file loglevel.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Log level specification parsing function.\n */\n\n#ifndef BADVPN_MISC_LOGLEVEL_H\n#define BADVPN_MISC_LOGLEVEL_H\n\n#include <string.h>\n\n#include \"base/BLog.h\"\n\n/**\n * Parses the log level string.\n * \n * @param str log level string. Recognizes none, error, warning, notice,\n *            info, debug.\n * @return 0 for none, one of BLOG_* for some log level, -1 for unrecognized\n */\nstatic int parse_loglevel (char *str);\n\nint parse_loglevel (char *str)\n{\n    if (!strcmp(str, \"none\")) {\n        return 0;\n    }\n    if (!strcmp(str, \"error\")) {\n        return BLOG_ERROR;\n    }\n    if (!strcmp(str, \"warning\")) {\n        return BLOG_WARNING;\n    }\n    if (!strcmp(str, \"notice\")) {\n        return BLOG_NOTICE;\n    }\n    if (!strcmp(str, \"info\")) {\n        return BLOG_INFO;\n    }\n    if (!strcmp(str, \"debug\")) {\n        return BLOG_DEBUG;\n    }\n    \n    char *endptr;\n    long int res = strtol(str, &endptr, 10);\n    if (*str && !*endptr && res >= 0 && res <= BLOG_DEBUG) {\n        return res;\n    }\n    \n    return -1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/maxalign.h",
    "content": "/**\n * @file maxalign.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_MAXALIGN_H\n#define BADVPN_MAXALIGN_H\n\n#include <stddef.h>\n#include <stdint.h>\n\ntypedef union {\n    short a;\n    long b;\n    long long c;\n    double d;\n    long double e;\n    void *f;\n    uint8_t g;\n    uint16_t h;\n    uint32_t i;\n    uint64_t j;\n    size_t k;\n    void (*l) (void);\n} bmax_align_t;\n\n#define BMAX_ALIGN (__alignof(bmax_align_t))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/memref.h",
    "content": "/**\n * @file memref.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_MEMREF_H\n#define BADVPN_MEMREF_H\n\n#include <stddef.h>\n#include <string.h>\n#include <limits.h>\n\n#include \"misc/debug.h\"\n#include \"misc/balloc.h\"\n#include \"misc/strdup.h\"\n\ntypedef struct {\n    char const *ptr;\n    size_t len;\n} MemRef;\n\nstatic MemRef MemRef_Make (char const *ptr, size_t len);\nstatic MemRef MemRef_MakeCstr (char const *ptr);\nstatic char MemRef_At (MemRef o, size_t pos);\nstatic void MemRef_AssertRange (MemRef o, size_t offset, size_t length);\nstatic MemRef MemRef_SubFrom (MemRef o, size_t offset);\nstatic MemRef MemRef_SubTo (MemRef o, size_t length);\nstatic MemRef MemRef_Sub (MemRef o, size_t offset, size_t length);\nstatic char * MemRef_StrDup (MemRef o);\nstatic void MemRef_CopyOut (MemRef o, char *out);\nstatic int MemRef_Equal (MemRef o, MemRef other);\nstatic int MemRef_FindChar (MemRef o, char ch, size_t *out_index);\n\n#define MEMREF_LOOP_CHARS__BODY(char_rel_pos_var, char_var, body) \\\n{ \\\n    for (size_t char_rel_pos_var = 0; char_rel_pos_var < MemRef__Loop_length; char_rel_pos_var++) { \\\n        char char_var = MemRef__Loop_o.ptr[MemRef__Loop_offset + char_rel_pos_var]; \\\n        { body } \\\n    } \\\n}\n\n#define MEMREF_LOOP_CHARS_RANGE(o, offset, length, char_rel_pos_var, char_var, body) \\\n{ \\\n    MemRef MemRef__Loop_o = (o); \\\n    size_t MemRef__Loop_offset = (offset); \\\n    size_t MemRef__Loop_length = (length); \\\n    MEMREF_LOOP_CHARS__BODY(char_rel_pos_var, char_var, body) \\\n}\n\n#define MEMREF_LOOP_CHARS(o, char_rel_pos_var, char_var, body) \\\n{ \\\n    MemRef MemRef__Loop_o = (o); \\\n    size_t MemRef__Loop_offset = 0; \\\n    size_t MemRef__Loop_length = MemRef__Loop_o.len; \\\n    MEMREF_LOOP_CHARS__BODY(char_rel_pos_var, char_var, body) \\\n}\n\n//\n\nstatic MemRef MemRef_Make (char const *ptr, size_t len)\n{\n    MemRef res;\n    res.ptr = ptr;\n    res.len = len;\n    return res;\n}\n\nstatic MemRef MemRef_MakeCstr (char const *ptr)\n{\n    ASSERT(ptr)\n    \n    return MemRef_Make(ptr, strlen(ptr));\n}\n\nstatic char MemRef_At (MemRef o, size_t pos)\n{\n    ASSERT(o.ptr)\n    ASSERT(pos < o.len)\n    \n    return o.ptr[pos];\n}\n\nstatic void MemRef_AssertRange (MemRef o, size_t offset, size_t length)\n{\n    ASSERT(offset <= o.len)\n    ASSERT(length <= o.len - offset)\n}\n\nstatic MemRef MemRef_SubFrom (MemRef o, size_t offset)\n{\n    ASSERT(o.ptr)\n    ASSERT(offset <= o.len)\n    \n    return MemRef_Make(o.ptr + offset, o.len - offset);\n}\n\nstatic MemRef MemRef_SubTo (MemRef o, size_t length)\n{\n    ASSERT(o.ptr)\n    ASSERT(length <= o.len)\n    \n    return MemRef_Make(o.ptr, length);\n}\n\nstatic MemRef MemRef_Sub (MemRef o, size_t offset, size_t length)\n{\n    ASSERT(o.ptr)\n    MemRef_AssertRange(o, offset, length);\n    \n    return MemRef_Make(o.ptr + offset, length);\n}\n\nstatic char * MemRef_StrDup (MemRef o)\n{\n    ASSERT(o.ptr)\n    \n    return b_strdup_bin(o.ptr, o.len);\n}\n\nstatic void MemRef_CopyOut (MemRef o, char *out)\n{\n    ASSERT(o.ptr)\n    ASSERT(out)\n    \n    memcpy(out, o.ptr, o.len);\n}\n\nstatic int MemRef_Equal (MemRef o, MemRef other)\n{\n    ASSERT(o.ptr)\n    ASSERT(other.ptr)\n    \n    return (o.len == other.len) && !memcmp(o.ptr, other.ptr, o.len);\n}\n\nstatic int MemRef_FindChar (MemRef o, char ch, size_t *out_index)\n{\n    ASSERT(o.ptr)\n    \n    for (size_t i = 0; i < o.len; i++) {\n        if (o.ptr[i] == ch) {\n            if (out_index) {\n                *out_index = i;\n            }\n            return 1;\n        }\n    }\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/merge.h",
    "content": "/**\n * @file merge.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_MERGE_H\n#define BADVPN_MERGE_H\n\n#define MERGE_HELPER(x, y) x ## y\n#define MERGE(x, y) MERGE_HELPER(x, y)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/minmax.h",
    "content": "/**\n * @file minmax.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Minimum and maximum macros.\n */\n\n#ifndef BADVPN_MISC_MINMAX_H\n#define BADVPN_MISC_MINMAX_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#define DEFINE_BMINMAX(name, type) \\\nstatic type bmin ## name (type a, type b) { return (a < b ? a : b); } \\\nstatic type bmax ## name (type a, type b) { return (a > b ? a : b); }\n\nDEFINE_BMINMAX(_size, size_t)\nDEFINE_BMINMAX(_int, int)\nDEFINE_BMINMAX(_int8, int8_t)\nDEFINE_BMINMAX(_int16, int16_t)\nDEFINE_BMINMAX(_int32, int32_t)\nDEFINE_BMINMAX(_int64, int64_t)\nDEFINE_BMINMAX(_uint, unsigned int)\nDEFINE_BMINMAX(_uint8, uint8_t)\nDEFINE_BMINMAX(_uint16, uint16_t)\nDEFINE_BMINMAX(_uint32, uint32_t)\nDEFINE_BMINMAX(_uint64, uint64_t)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/modadd.h",
    "content": "/**\n * @file modadd.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Modular addition macro.\n * \n * Calculates (x + y) mod m, assuming\n * 0 <= x < m and 0 <= y < m.\n */\n\n#ifndef BADVPN_MISC_MODADD_H\n#define BADVPN_MISC_MODADD_H\n\n#include <misc/debug.h>\n\n#define DECLARE_BMODADD(type, name) \\\nstatic type bmodadd_##name (type x, type y, type m) \\\n{ \\\n    ASSERT(x >= 0) \\\n    ASSERT(x < m) \\\n    ASSERT(y >= 0) \\\n    ASSERT(y < m) \\\n     \\\n    if (y >= m - x) { \\\n        return (y - (m - x)); \\\n    } else { \\\n        return (x + y); \\\n    } \\\n} \\\n\nDECLARE_BMODADD(int, int)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/mswsock.h",
    "content": "/**\n * This file has no copyright assigned and is placed in the Public Domain.\n * This file is part of the w64 mingw-runtime package.\n * No warranty is given; refer to the file DISCLAIMER.PD within this package.\n */\n\n#include <winsock2.h>\n\n#ifndef _MSWSOCK_\n#define _MSWSOCK_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define SO_CONNDATA 0x7000\n#define SO_CONNOPT 0x7001\n#define SO_DISCDATA 0x7002\n#define SO_DISCOPT 0x7003\n#define SO_CONNDATALEN 0x7004\n#define SO_CONNOPTLEN 0x7005\n#define SO_DISCDATALEN 0x7006\n#define SO_DISCOPTLEN 0x7007\n\n#define SO_OPENTYPE 0x7008\n\n#define SO_SYNCHRONOUS_ALERT 0x10\n#define SO_SYNCHRONOUS_NONALERT 0x20\n\n#define SO_MAXDG 0x7009\n#define SO_MAXPATHDG 0x700A\n#define SO_UPDATE_ACCEPT_CONTEXT 0x700B\n#define SO_CONNECT_TIME 0x700C\n#define SO_UPDATE_CONNECT_CONTEXT 0x7010\n\n#define TCP_BSDURGENT 0x7000\n\n#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)\n#if (_WIN32_WINNT < 0x0600) && (_WIN32_WINNT >= 0x0501)\n#define SIO_SOCKET_CLOSE_NOTIFY _WSAIOW(IOC_VENDOR,13)\n#endif /* >= XP && < VISTA */\n#if (_WIN32_WINNT >= 0x0600)\n#define SIO_BSP_HANDLE _WSAIOR(IOC_WS2,27)\n#define SIO_BSP_HANDLE_SELECT _WSAIOR(IOC_WS2,28)\n#define SIO_BSP_HANDLE_POLL _WSAIOR(IOC_WS2,29)\n\n#define SIO_EXT_SELECT _WSAIORW(IOC_WS2,30)\n#define SIO_EXT_POLL _WSAIORW(IOC_WS2,31)\n#define SIO_EXT_SENDMSG _WSAIORW(IOC_WS2,32)\n\n#define SIO_BASE_HANDLE _WSAIOR(IOC_WS2,34)\n#endif /* _WIN32_WINNT >= 0x0600 */\n\n#ifndef __MSWSOCK_WS1_SHARED\n  int WINAPI WSARecvEx(SOCKET s,char *buf,int len,int *flags);\n#endif /* __MSWSOCK_WS1_SHARED */\n\n#define TF_DISCONNECT 0x01\n#define TF_REUSE_SOCKET 0x02\n#define TF_WRITE_BEHIND 0x04\n#define TF_USE_DEFAULT_WORKER 0x00\n#define TF_USE_SYSTEM_THREAD 0x10\n#define TF_USE_KERNEL_APC 0x20\n\n#include <psdk_inc/_xmitfile.h>\n#ifndef __MSWSOCK_WS1_SHARED\n  WINBOOL WINAPI TransmitFile(SOCKET hSocket,HANDLE hFile,DWORD nNumberOfBytesToWrite,DWORD nNumberOfBytesPerSend,LPOVERLAPPED lpOverlapped,LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,DWORD dwReserved);\n  WINBOOL WINAPI AcceptEx(SOCKET sListenSocket,SOCKET sAcceptSocket,PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,LPDWORD lpdwBytesReceived,LPOVERLAPPED lpOverlapped);\n  VOID WINAPI GetAcceptExSockaddrs(PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,struct sockaddr **LocalSockaddr,LPINT LocalSockaddrLength,struct sockaddr **RemoteSockaddr,LPINT RemoteSockaddrLength);\n#endif /* __MSWSOCK_WS1_SHARED */\n\n  typedef WINBOOL (WINAPI *LPFN_TRANSMITFILE)(SOCKET hSocket,HANDLE hFile,DWORD nNumberOfBytesToWrite,DWORD nNumberOfBytesPerSend,LPOVERLAPPED lpOverlapped,LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,DWORD dwReserved);\n\n#define WSAID_TRANSMITFILE {0xb5367df0,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n\n  typedef WINBOOL (WINAPI *LPFN_ACCEPTEX)(SOCKET sListenSocket,SOCKET sAcceptSocket,PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,LPDWORD lpdwBytesReceived,LPOVERLAPPED lpOverlapped);\n\n#define WSAID_ACCEPTEX {0xb5367df1,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n\n  typedef VOID (WINAPI *LPFN_GETACCEPTEXSOCKADDRS)(PVOID lpOutputBuffer,DWORD dwReceiveDataLength,DWORD dwLocalAddressLength,DWORD dwRemoteAddressLength,struct sockaddr **LocalSockaddr,LPINT LocalSockaddrLength,struct sockaddr **RemoteSockaddr,LPINT RemoteSockaddrLength);\n\n#define WSAID_GETACCEPTEXSOCKADDRS {0xb5367df2,0xcbac,0x11cf,{0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92}}\n\n  typedef struct _TRANSMIT_PACKETS_ELEMENT {\n    ULONG dwElFlags;\n#define TP_ELEMENT_MEMORY 1\n#define TP_ELEMENT_FILE 2\n#define TP_ELEMENT_EOP 4\n    ULONG cLength;\n    __MINGW_EXTENSION union {\n      __MINGW_EXTENSION struct {\n\tLARGE_INTEGER nFileOffset;\n\tHANDLE hFile;\n      };\n      PVOID pBuffer;\n    };\n  } TRANSMIT_PACKETS_ELEMENT,*PTRANSMIT_PACKETS_ELEMENT,*LPTRANSMIT_PACKETS_ELEMENT;\n\n#define TP_DISCONNECT TF_DISCONNECT\n#define TP_REUSE_SOCKET TF_REUSE_SOCKET\n#define TP_USE_DEFAULT_WORKER TF_USE_DEFAULT_WORKER\n#define TP_USE_SYSTEM_THREAD TF_USE_SYSTEM_THREAD\n#define TP_USE_KERNEL_APC TF_USE_KERNEL_APC\n\n  typedef WINBOOL (WINAPI *LPFN_TRANSMITPACKETS) (SOCKET hSocket,LPTRANSMIT_PACKETS_ELEMENT lpPacketArray,DWORD nElementCount,DWORD nSendSize,LPOVERLAPPED lpOverlapped,DWORD dwFlags);\n\n#define WSAID_TRANSMITPACKETS {0xd9689da0,0x1f90,0x11d3,{0x99,0x71,0x00,0xc0,0x4f,0x68,0xc8,0x76}}\n\n  typedef WINBOOL (WINAPI *LPFN_CONNECTEX)(SOCKET s,const struct sockaddr *name,int namelen,PVOID lpSendBuffer,DWORD dwSendDataLength,LPDWORD lpdwBytesSent,LPOVERLAPPED lpOverlapped);\n\n#define WSAID_CONNECTEX {0x25a207b9,0xddf3,0x4660,{0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e}}\n\n  typedef WINBOOL (WINAPI *LPFN_DISCONNECTEX)(SOCKET s,LPOVERLAPPED lpOverlapped,DWORD dwFlags,DWORD dwReserved);\n\n#define WSAID_DISCONNECTEX {0x7fda2e11,0x8630,0x436f,{0xa0,0x31,0xf5,0x36,0xa6,0xee,0xc1,0x57}}\n\n#define DE_REUSE_SOCKET TF_REUSE_SOCKET\n\n#define NLA_NAMESPACE_GUID {0x6642243a,0x3ba8,0x4aa6,{0xba,0xa5,0x2e,0xb,0xd7,0x1f,0xdd,0x83}}\n\n#define NLA_SERVICE_CLASS_GUID {0x37e515,0xb5c9,0x4a43,{0xba,0xda,0x8b,0x48,0xa8,0x7a,0xd2,0x39}}\n\n#define NLA_ALLUSERS_NETWORK 0x00000001\n#define NLA_FRIENDLY_NAME 0x00000002\n\n  typedef enum _NLA_BLOB_DATA_TYPE {\n    NLA_RAW_DATA = 0,NLA_INTERFACE = 1,NLA_802_1X_LOCATION = 2,NLA_CONNECTIVITY = 3,NLA_ICS = 4\n  } NLA_BLOB_DATA_TYPE,*PNLA_BLOB_DATA_TYPE;\n\n  typedef enum _NLA_CONNECTIVITY_TYPE {\n    NLA_NETWORK_AD_HOC = 0,NLA_NETWORK_MANAGED = 1,NLA_NETWORK_UNMANAGED = 2,NLA_NETWORK_UNKNOWN = 3\n  } NLA_CONNECTIVITY_TYPE,*PNLA_CONNECTIVITY_TYPE;\n\n  typedef enum _NLA_INTERNET {\n    NLA_INTERNET_UNKNOWN = 0,NLA_INTERNET_NO = 1,NLA_INTERNET_YES = 2\n  } NLA_INTERNET,*PNLA_INTERNET;\n\n  typedef struct _NLA_BLOB {\n    struct {\n      NLA_BLOB_DATA_TYPE type;\n      DWORD dwSize;\n      DWORD nextOffset;\n    } header;\n    union {\n      CHAR rawData[1];\n      struct {\n\tDWORD dwType;\n\tDWORD dwSpeed;\n\tCHAR adapterName[1];\n      } interfaceData;\n      struct {\n\tCHAR information[1];\n      } locationData;\n      struct {\n\tNLA_CONNECTIVITY_TYPE type;\n\tNLA_INTERNET internet;\n      } connectivity;\n      struct {\n\tstruct {\n\t  DWORD speed;\n\t  DWORD type;\n\t  DWORD state;\n\t  WCHAR machineName[256];\n\t  WCHAR sharedAdapterName[256];\n\t} remote;\n      } ICS;\n    } data;\n  } NLA_BLOB,*PNLA_BLOB,*LPNLA_BLOB;\n\n#ifdef BADVPN_SHIPPED_MSWSOCK_DECLARE_WSAMSG\n  typedef struct _WSAMSG {\n    LPSOCKADDR name;\n    INT namelen;\n    LPWSABUF lpBuffers;\n    DWORD dwBufferCount;\n    WSABUF Control;\n    DWORD dwFlags;\n  } WSAMSG,*PWSAMSG,*LPWSAMSG;\n#endif\n  \n  typedef struct _WSACMSGHDR {\n    SIZE_T cmsg_len;\n    INT cmsg_level;\n    INT cmsg_type;\n  } WSACMSGHDR,*PWSACMSGHDR,*LPWSACMSGHDR;\n\n#define WSA_CMSGHDR_ALIGN(length) (((length) + TYPE_ALIGNMENT(WSACMSGHDR)-1) & (~(TYPE_ALIGNMENT(WSACMSGHDR)-1)))\n#define WSA_CMSGDATA_ALIGN(length) (((length) + MAX_NATURAL_ALIGNMENT-1) & (~(MAX_NATURAL_ALIGNMENT-1)))\n#define WSA_CMSG_FIRSTHDR(msg) (((msg)->Control.len >= sizeof(WSACMSGHDR)) ? (LPWSACMSGHDR)(msg)->Control.buf : (LPWSACMSGHDR)NULL)\n#define WSA_CMSG_NXTHDR(msg,cmsg) ((!(cmsg)) ? WSA_CMSG_FIRSTHDR(msg) : ((((u_char *)(cmsg) + WSA_CMSGHDR_ALIGN((cmsg)->cmsg_len) + sizeof(WSACMSGHDR)) > (u_char *)((msg)->Control.buf) + (msg)->Control.len) ? (LPWSACMSGHDR)NULL : (LPWSACMSGHDR)((u_char *)(cmsg) + WSA_CMSGHDR_ALIGN((cmsg)->cmsg_len))))\n#define WSA_CMSG_DATA(cmsg) ((u_char *)(cmsg) + WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)))\n#define WSA_CMSG_SPACE(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR) + WSA_CMSGHDR_ALIGN(length)))\n#define WSA_CMSG_LEN(length) (WSA_CMSGDATA_ALIGN(sizeof(WSACMSGHDR)) + length)\n\n#define MSG_TRUNC 0x0100\n#define MSG_CTRUNC 0x0200\n#define MSG_BCAST 0x0400\n#define MSG_MCAST 0x0800\n\n  typedef INT (WINAPI *LPFN_WSARECVMSG)(SOCKET s, LPWSAMSG lpMsg,\n\t\t\t\t\tLPDWORD lpdwNumberOfBytesRecvd,\n\t\t\t\t\tLPWSAOVERLAPPED lpOverlapped,\n\t\t\t\t\tLPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);\n\n#define WSAID_WSARECVMSG {0xf689d7c8,0x6f1f,0x436b,{0x8a,0x53,0xe5,0x4f,0xe3,0x51,0xc3,0x22}}\n\n#if(_WIN32_WINNT >= 0x0600)\n  typedef struct {\n    LPWSAMSG lpMsg;\n    DWORD dwFlags;\n    LPDWORD lpNumberOfBytesSent;\n    LPWSAOVERLAPPED lpOverlapped;\n    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine;\n  } WSASENDMSG, *LPWSASENDMSG;\n\n  typedef INT (WSAAPI *LPFN_WSASENDMSG)(SOCKET s, LPWSAMSG lpMsg, DWORD dwFlags,\n\t\t\t\t\tLPDWORD lpNumberOfBytesSent,\n\t\t\t\t\tLPWSAOVERLAPPED lpOverlapped,\n\t\t\t\t\tLPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);\n\n#define WSAID_WSASENDMSG {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}}\n\n#endif /* (_WIN32_WINNT >= 0x0600) */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _MSWSOCK_ */\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/nonblocking.h",
    "content": "/**\n * @file nonblocking.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function for enabling non-blocking mode for a file descriptor.\n */\n\n#ifndef BADVPN_MISC_NONBLOCKING_H\n#define BADVPN_MISC_NONBLOCKING_H\n\n#include <unistd.h>\n#include <fcntl.h>\n\nstatic int badvpn_set_nonblocking (int fd);\n\nint badvpn_set_nonblocking (int fd)\n{\n    if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {\n        return 0;\n    }\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/nsskey.h",
    "content": "/**\n * @file nsskey.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function for opening a NSS certificate and its private key.\n */\n\n#ifndef BADVPN_MISC_NSSKEY_H\n#define BADVPN_MISC_NSSKEY_H\n\n#include <stdlib.h>\n\n#include <prerror.h>\n#include <cert.h>\n#include <keyhi.h>\n#include <pk11func.h>\n\n#include <base/BLog.h>\n\n#include <generated/blog_channel_nsskey.h>\n\n/**\n * Opens a NSS certificate and its private key.\n * \n * @param name name of the certificate\n * @param out_cert on success, the certificate will be returned here. Should be\n *                 released with CERT_DestroyCertificate.\n * @param out_key on success, the private key will be returned here. Should be\n *                released with SECKEY_DestroyPrivateKey.\n * @return 1 on success, 0 on failure\n */\nstatic int open_nss_cert_and_key (char *name, CERTCertificate **out_cert, SECKEYPrivateKey **out_key) WARN_UNUSED;\n\nstatic SECKEYPrivateKey * find_nss_private_key (char *name)\n{\n    SECKEYPrivateKey *key = NULL;\n\n    PK11SlotList *slot_list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, NULL);\n    if (!slot_list) {\n        return NULL;\n    }\n    \n    PK11SlotListElement *slot_entry;\n    for (slot_entry = slot_list->head; !key && slot_entry; slot_entry = slot_entry->next) {\n        SECKEYPrivateKeyList *key_list = PK11_ListPrivKeysInSlot(slot_entry->slot, name, NULL);\n        if (!key_list) {\n            BLog(BLOG_ERROR, \"PK11_ListPrivKeysInSlot failed\");\n            continue;\n        }\n        \n        SECKEYPrivateKeyListNode *key_node;\n        for (key_node = PRIVKEY_LIST_HEAD(key_list); !key && !PRIVKEY_LIST_END(key_node, key_list); key_node = PRIVKEY_LIST_NEXT(key_node)) {\n            char *key_name = PK11_GetPrivateKeyNickname(key_node->key);\n            if (!key_name || strcmp(key_name, name)) {\n                PORT_Free((void *)key_name);\n                continue;\n            }\n            PORT_Free((void *)key_name);\n            \n            key = SECKEY_CopyPrivateKey(key_node->key);\n        }\n        \n        SECKEY_DestroyPrivateKeyList(key_list);\n    }\n    \n    PK11_FreeSlotList(slot_list);\n    \n    return key;\n}\n\nint open_nss_cert_and_key (char *name, CERTCertificate **out_cert, SECKEYPrivateKey **out_key)\n{\n    CERTCertificate *cert;\n    cert = CERT_FindCertByNicknameOrEmailAddr(CERT_GetDefaultCertDB(), name);\n    if (!cert) {\n        BLog(BLOG_ERROR, \"CERT_FindCertByName failed (%d)\", (int)PR_GetError());\n        return 0;\n    }\n    \n    SECKEYPrivateKey *key = find_nss_private_key(name);\n    if (!key) {\n        BLog(BLOG_ERROR, \"Failed to find private key\");\n        CERT_DestroyCertificate(cert);\n        return 0;\n    }\n    \n    *out_cert = cert;\n    *out_key = key;\n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/offset.h",
    "content": "/**\n * @file offset.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Macros for determining offsets of members in structs.\n */\n\n#ifndef BADVPN_MISC_OFFSET_H\n#define BADVPN_MISC_OFFSET_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n/**\n * Returns a pointer to a struct, given a pointer to its member.\n */\n#define UPPER_OBJECT(_ptr, _object_type, _field_name) ((_object_type *)((char *)(_ptr) - offsetof(_object_type, _field_name)))\n\n/**\n * Returns the offset of one struct member from another.\n * Expands to an int.\n */\n#define OFFSET_DIFF(_object_type, _field1, _field2) ((int)offsetof(_object_type, _field1) - (int)offsetof(_object_type, _field2))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/open_standard_streams.h",
    "content": "/**\n * @file open_standard_streams.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_OPEN_STANDARD_STREAMS_H\n#define BADVPN_OPEN_STANDARD_STREAMS_H\n\n#ifndef BADVPN_USE_WINAPI\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <fcntl.h>\n#include <unistd.h>\n#endif\n\nstatic void open_standard_streams (void)\n{\n#ifndef BADVPN_USE_WINAPI\n    int fd;\n    \n    do {\n        fd = open(\"/dev/null\", O_RDWR);\n        if (fd > 2) {\n            close(fd);\n        }\n    } while (fd >= 0 && fd <= 2);\n#endif\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/overflow.h",
    "content": "/**\n * @file overflow.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Functions for checking for overflow of integer addition.\n */\n\n#ifndef BADVPN_MISC_OVERFLOW_H\n#define BADVPN_MISC_OVERFLOW_H\n\n#include <limits.h>\n#include <stdint.h>\n\n#define DEFINE_UNSIGNED_OVERFLOW(_name, _type, _max) \\\nstatic int add_ ## _name ## _overflows (_type a, _type b) \\\n{\\\n    return (b > _max - a); \\\n}\n\n#define DEFINE_SIGNED_OVERFLOW(_name, _type, _min, _max) \\\nstatic int add_ ## _name ## _overflows (_type a, _type b) \\\n{\\\n    if ((a < 0) ^ (b < 0)) return 0; \\\n    if (a < 0) return -(a < _min - b); \\\n    return (a > _max - b); \\\n}\n\nDEFINE_UNSIGNED_OVERFLOW(uint, unsigned int, UINT_MAX)\nDEFINE_UNSIGNED_OVERFLOW(uint8, uint8_t, UINT8_MAX)\nDEFINE_UNSIGNED_OVERFLOW(uint16, uint16_t, UINT16_MAX)\nDEFINE_UNSIGNED_OVERFLOW(uint32, uint32_t, UINT32_MAX)\nDEFINE_UNSIGNED_OVERFLOW(uint64, uint64_t, UINT64_MAX)\n\nDEFINE_SIGNED_OVERFLOW(int, int, INT_MIN, INT_MAX)\nDEFINE_SIGNED_OVERFLOW(int8, int8_t, INT8_MIN, INT8_MAX)\nDEFINE_SIGNED_OVERFLOW(int16, int16_t, INT16_MIN, INT16_MAX)\nDEFINE_SIGNED_OVERFLOW(int32, int32_t, INT32_MIN, INT32_MAX)\nDEFINE_SIGNED_OVERFLOW(int64, int64_t, INT64_MIN, INT64_MAX)\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/packed.h",
    "content": "/**\n * @file packed.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Structure packing macros.\n */\n\n#ifndef BADVPN_PACKED_H\n#define BADVPN_PACKED_H\n\n#ifdef _MSC_VER\n\n#define B_START_PACKED __pragma(pack(push, 1))\n#define B_END_PACKED __pragma(pack(pop))\n#define B_PACKED\n\n#else\n\n#define B_START_PACKED\n#define B_END_PACKED\n#define B_PACKED __attribute__((packed))\n\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/parse_number.h",
    "content": "/**\n * @file parse_number.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Numeric string parsing.\n */\n\n#ifndef BADVPN_MISC_PARSE_NUMBER_H\n#define BADVPN_MISC_PARSE_NUMBER_H\n\n#include <stdint.h>\n#include <string.h>\n#include <stddef.h>\n#include <limits.h>\n\n#include \"misc/memref.h\"\n#include \"misc/debug.h\"\n\n// public parsing functions\nstatic int decode_decimal_digit (char c);\nstatic int decode_hex_digit (char c);\nstatic int parse_unsigned_integer (MemRef str, uintmax_t *out) WARN_UNUSED;\nstatic int parse_unsigned_hex_integer (MemRef str, uintmax_t *out) WARN_UNUSED;\nstatic int parse_signmag_integer (MemRef str, int *out_sign, uintmax_t *out_mag) WARN_UNUSED;\n\n// public generation functions\nstatic int compute_decimal_repr_size (uintmax_t x);\nstatic void generate_decimal_repr (uintmax_t x, char *out, int repr_size);\nstatic int generate_decimal_repr_string (uintmax_t x, char *out);\n\n// implementation follows\n\n// decimal representation of UINTMAX_MAX\nstatic const char parse_number__uintmax_max_str[] = \"18446744073709551615\";\n\n// make sure UINTMAX_MAX is what we think it is\nstatic const char parse_number__uintmax_max_str_assert[(UINTMAX_MAX == UINTMAX_C(18446744073709551615)) ? 1 : -1];\n\nstatic int decode_decimal_digit (char c)\n{\n    switch (c) {\n        case '0': return 0;\n        case '1': return 1;\n        case '2': return 2;\n        case '3': return 3;\n        case '4': return 4;\n        case '5': return 5;\n        case '6': return 6;\n        case '7': return 7;\n        case '8': return 8;\n        case '9': return 9;\n    }\n    \n    return -1;\n}\n\nstatic int decode_hex_digit (char c)\n{\n    switch (c) {\n        case '0': return 0;\n        case '1': return 1;\n        case '2': return 2;\n        case '3': return 3;\n        case '4': return 4;\n        case '5': return 5;\n        case '6': return 6;\n        case '7': return 7;\n        case '8': return 8;\n        case '9': return 9;\n        case 'A': case 'a': return 10;\n        case 'B': case 'b': return 11;\n        case 'C': case 'c': return 12;\n        case 'D': case 'd': return 13;\n        case 'E': case 'e': return 14;\n        case 'F': case 'f': return 15;\n    }\n    \n    return -1;\n}\n\nstatic int parse__no_overflow (const char *str, size_t str_len, uintmax_t *out)\n{\n    uintmax_t n = 0;\n    \n    while (str_len > 0) {\n        if (*str < '0' || *str > '9') {\n            return 0;\n        }\n        \n        n = 10 * n + (*str - '0');\n        \n        str++;\n        str_len--;\n    }\n    \n    *out = n;\n    return 1;\n}\n\nint parse_unsigned_integer (MemRef str, uintmax_t *out)\n{\n    // we do not allow empty strings\n    if (str.len == 0) {\n        return 0;\n    }\n    \n    // remove leading zeros\n    while (str.len > 0 && *str.ptr == '0') {\n        str.ptr++;\n        str.len--;\n    }\n    \n    // detect overflow\n    if (str.len > sizeof(parse_number__uintmax_max_str) - 1 ||\n        (str.len == sizeof(parse_number__uintmax_max_str) - 1 && memcmp(str.ptr, parse_number__uintmax_max_str, sizeof(parse_number__uintmax_max_str) - 1) > 0)) {\n        return 0;\n    }\n    \n    // will not overflow (but can still have invalid characters)\n    return parse__no_overflow(str.ptr, str.len, out);\n}\n\nint parse_unsigned_hex_integer (MemRef str, uintmax_t *out)\n{\n    uintmax_t n = 0;\n    \n    if (str.len == 0) {\n        return 0;\n    }\n    \n    while (str.len > 0) {\n        int digit = decode_hex_digit(*str.ptr);\n        if (digit < 0) {\n            return 0;\n        }\n        \n        if (n > UINTMAX_MAX / 16) {\n            return 0;\n        }\n        n *= 16;\n        \n        if (digit > UINTMAX_MAX - n) {\n            return 0;\n        }\n        n += digit;\n        \n        str.ptr++;\n        str.len--;\n    }\n    \n    *out = n;\n    return 1;\n}\n\nint parse_signmag_integer (MemRef str, int *out_sign, uintmax_t *out_mag)\n{\n    int sign = 1;\n    if (str.len > 0 && (str.ptr[0] == '+' || str.ptr[0] == '-')) {\n        sign = 1 - 2 * (str.ptr[0] == '-');\n        str.ptr++;\n        str.len--;\n    }\n    \n    if (!parse_unsigned_integer(str, out_mag)) {\n        return 0;\n    }\n    \n    *out_sign = sign;\n    return 1;\n}\n\nint compute_decimal_repr_size (uintmax_t x)\n{\n    int size = 0;\n    \n    do {\n        size++;\n        x /= 10;\n    } while (x > 0);\n    \n    return size;\n}\n\nvoid generate_decimal_repr (uintmax_t x, char *out, int repr_size)\n{\n    ASSERT(out)\n    ASSERT(repr_size == compute_decimal_repr_size(x))\n    \n    out += repr_size;\n    \n    do {\n        *(--out) = '0' + (x % 10);\n        x /= 10;\n    } while (x > 0);\n}\n\nint generate_decimal_repr_string (uintmax_t x, char *out)\n{\n    ASSERT(out)\n    \n    int repr_size = compute_decimal_repr_size(x);\n    generate_decimal_repr(x, out, repr_size);\n    out[repr_size] = '\\0';\n    \n    return repr_size;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/print_macros.h",
    "content": "/**\n * @file print_macros.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Format macros for printf() for non-standard compilers.\n */\n\n#ifndef BADVPN_PRINT_MACROS\n#define BADVPN_PRINT_MACROS\n\n#ifdef _MSC_VER\n\n// size_t\n#define PRIsz \"Iu\"\n\n// signed exact width (intN_t)\n#define PRId8 \"d\"\n#define PRIi8 \"i\"\n#define PRId16 \"d\"\n#define PRIi16 \"i\"\n#define PRId32 \"I32d\"\n#define PRIi32 \"I32i\"\n#define PRId64 \"I64d\"\n#define PRIi64 \"I64i\"\n\n// unsigned exact width (uintN_t)\n#define PRIo8 \"o\"\n#define PRIu8 \"u\"\n#define PRIx8 \"x\"\n#define PRIX8 \"X\"\n#define PRIo16 \"o\"\n#define PRIu16 \"u\"\n#define PRIx16 \"x\"\n#define PRIX16 \"X\"\n#define PRIo32 \"I32o\"\n#define PRIu32 \"I32u\"\n#define PRIx32 \"I32x\"\n#define PRIX32 \"I32X\"\n#define PRIo64 \"I64o\"\n#define PRIu64 \"I64u\"\n#define PRIx64 \"I64x\"\n#define PRIX64 \"I64X\"\n\n// signed maximum width (intmax_t)\n#define PRIdMAX \"I64d\"\n#define PRIiMAX \"I64i\"\n\n// unsigned maximum width (uintmax_t)\n#define PRIoMAX \"I64o\"\n#define PRIuMAX \"I64u\"\n#define PRIxMAX \"I64x\"\n#define PRIXMAX \"I64X\"\n\n// signed pointer (intptr_t)\n#define PRIdPTR \"Id\"\n#define PRIiPTR \"Ii\"\n\n// unsigned pointer (uintptr_t)\n#define PRIoPTR \"Io\"\n#define PRIuPTR \"Iu\"\n#define PRIxPTR \"Ix\"\n#define PRIXPTR \"IX\"\n\n#else\n\n#include <inttypes.h>\n\n#define PRIsz \"zu\"\n\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/read_file.h",
    "content": "/**\n * @file read_file.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function for reading a file into memory using stdio.\n */\n\n#ifndef BADVPN_MISC_READ_FILE_H\n#define BADVPN_MISC_READ_FILE_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdlib.h>\n#include <stdio.h>\n\nstatic int read_file (const char *file, uint8_t **out_data, size_t *out_len)\n{\n    FILE *f = fopen(file, \"r\");\n    if (!f) {\n        goto fail0;\n    }\n    \n    size_t buf_len = 0;\n    size_t buf_size = 128;\n    \n    uint8_t *buf = (uint8_t *)malloc(buf_size);\n    if (!buf) {\n        goto fail1;\n    }\n    \n    while (1) {\n        if (buf_len == buf_size) {\n            if (2 > SIZE_MAX / buf_size) {\n                goto fail;\n            }\n            size_t newsize = 2 * buf_size;\n            \n            uint8_t *newbuf = (uint8_t *)realloc(buf, newsize);\n            if (!newbuf) {\n                goto fail;\n            }\n            \n            buf = newbuf;\n            buf_size = newsize;\n        }\n        \n        size_t bytes = fread(buf + buf_len, 1, buf_size - buf_len, f);\n        if (bytes == 0) {\n            if (feof(f)) {\n                break;\n            }\n            goto fail;\n        }\n        \n        buf_len += bytes;\n    }\n    \n    fclose(f);\n    \n    *out_data = buf;\n    *out_len = buf_len;\n    return 1;\n    \nfail:\n    free(buf);\nfail1:\n    fclose(f);\nfail0:\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/read_write_int.h",
    "content": "/**\n * @file read_write_int.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_READ_WRITE_INT_H\n#define BADVPN_READ_WRITE_INT_H\n\n#include <stdint.h>\n\nstatic uint8_t badvpn_read_le8 (const char *c_ptr);\nstatic uint16_t badvpn_read_le16 (const char *c_ptr);\nstatic uint32_t badvpn_read_le32 (const char *c_ptr);\nstatic uint64_t badvpn_read_le64 (const char *c_ptr);\n\nstatic uint8_t badvpn_read_be8 (const char *c_ptr);\nstatic uint16_t badvpn_read_be16 (const char *c_ptr);\nstatic uint32_t badvpn_read_be32 (const char *c_ptr);\nstatic uint64_t badvpn_read_be64 (const char *c_ptr);\n\nstatic void badvpn_write_le8 (uint8_t x, char *c_ptr);\nstatic void badvpn_write_le16 (uint16_t x, char *c_ptr);\nstatic void badvpn_write_le32 (uint32_t x, char *c_ptr);\nstatic void badvpn_write_le64 (uint64_t x, char *c_ptr);\n\nstatic void badvpn_write_be8 (uint8_t x, char *c_ptr);\nstatic void badvpn_write_be16 (uint16_t x, char *c_ptr);\nstatic void badvpn_write_be32 (uint32_t x, char *c_ptr);\nstatic void badvpn_write_be64 (uint64_t x, char *c_ptr);\n\nstatic uint8_t badvpn_read_le8 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint8_t)ptr[0] << 0);\n}\n\nstatic uint16_t badvpn_read_le16 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint16_t)ptr[1] << 8) | ((uint16_t)ptr[0] << 0);\n}\n\nstatic uint32_t badvpn_read_le32 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint32_t)ptr[3] << 24) | ((uint32_t)ptr[2] << 16) |\n           ((uint32_t)ptr[1] <<  8) | ((uint32_t)ptr[0] <<  0);\n}\n\nstatic uint64_t badvpn_read_le64 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint64_t)ptr[7] << 56) | ((uint64_t)ptr[6] << 48) |\n           ((uint64_t)ptr[5] << 40) | ((uint64_t)ptr[4] << 32) |\n           ((uint64_t)ptr[3] << 24) | ((uint64_t)ptr[2] << 16) |\n           ((uint64_t)ptr[1] <<  8) | ((uint64_t)ptr[0] <<  0);\n}\n\nstatic uint8_t badvpn_read_be8 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint8_t)ptr[0] << 0);\n}\n\nstatic uint16_t badvpn_read_be16 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint16_t)ptr[0] << 8) | ((uint16_t)ptr[1] << 0);\n}\n\nstatic uint32_t badvpn_read_be32 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint32_t)ptr[0] << 24) | ((uint32_t)ptr[1] << 16) |\n           ((uint32_t)ptr[2] <<  8) | ((uint32_t)ptr[3] <<  0);\n}\n\nstatic uint64_t badvpn_read_be64 (const char *c_ptr)\n{\n    const uint8_t *ptr = (const uint8_t *)c_ptr;\n    return ((uint64_t)ptr[0] << 56) | ((uint64_t)ptr[1] << 48) |\n           ((uint64_t)ptr[2] << 40) | ((uint64_t)ptr[3] << 32) |\n           ((uint64_t)ptr[4] << 24) | ((uint64_t)ptr[5] << 16) |\n           ((uint64_t)ptr[6] <<  8) | ((uint64_t)ptr[7] <<  0);\n}\n\nstatic void badvpn_write_le8 (uint8_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[0] = x >> 0;\n}\n\nstatic void badvpn_write_le16 (uint16_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[1] = x >> 8;\n    ptr[0] = x >> 0;\n}\n\nstatic void badvpn_write_le32 (uint32_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[3] = x >> 24;\n    ptr[2] = x >> 16;\n    ptr[1] = x >> 8;\n    ptr[0] = x >> 0;\n}\n\nstatic void badvpn_write_le64 (uint64_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[7] = x >> 56;\n    ptr[6] = x >> 48;\n    ptr[5] = x >> 40;\n    ptr[4] = x >> 32;\n    ptr[3] = x >> 24;\n    ptr[2] = x >> 16;\n    ptr[1] = x >> 8;\n    ptr[0] = x >> 0;\n}\n\nstatic void badvpn_write_be8 (uint8_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[0] = x >> 0;\n}\n\nstatic void badvpn_write_be16 (uint16_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[0] = x >> 8;\n    ptr[1] = x >> 0;\n}\n\nstatic void badvpn_write_be32 (uint32_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[0] = x >> 24;\n    ptr[1] = x >> 16;\n    ptr[2] = x >> 8;\n    ptr[3] = x >> 0;\n}\n\nstatic void badvpn_write_be64 (uint64_t x, char *c_ptr)\n{\n    uint8_t *ptr = (uint8_t *)c_ptr;\n    ptr[0] = x >> 56;\n    ptr[1] = x >> 48;\n    ptr[2] = x >> 40;\n    ptr[3] = x >> 32;\n    ptr[4] = x >> 24;\n    ptr[5] = x >> 16;\n    ptr[6] = x >> 8;\n    ptr[7] = x >> 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/socks_proto.h",
    "content": "/**\n * @file socks_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the SOCKS protocol.\n */\n\n#ifndef BADVPN_MISC_SOCKS_PROTO_H\n#define BADVPN_MISC_SOCKS_PROTO_H\n\n#include <stdint.h>\n\n#include \"misc/packed.h\"\n\n#define SOCKS_VERSION 0x05\n\n#define SOCKS_METHOD_NO_AUTHENTICATION_REQUIRED 0x00\n#define SOCKS_METHOD_GSSAPI 0x01\n#define SOCKS_METHOD_USERNAME_PASSWORD 0x02\n#define SOCKS_METHOD_NO_ACCEPTABLE_METHODS 0xFF\n\n#define SOCKS_CMD_CONNECT 0x01\n#define SOCKS_CMD_BIND 0x02\n#define SOCKS_CMD_UDP_ASSOCIATE 0x03\n\n#define SOCKS_ATYP_IPV4 0x01\n#define SOCKS_ATYP_DOMAINNAME 0x03\n#define SOCKS_ATYP_IPV6 0x04\n\n#define SOCKS_REP_SUCCEEDED 0x00\n#define SOCKS_REP_GENERAL_FAILURE 0x01\n#define SOCKS_REP_CONNECTION_NOT_ALLOWED 0x02\n#define SOCKS_REP_NETWORK_UNREACHABLE 0x03\n#define SOCKS_REP_HOST_UNREACHABLE 0x04\n#define SOCKS_REP_CONNECTION_REFUSED 0x05\n#define SOCKS_REP_TTL_EXPIRED 0x06\n#define SOCKS_REP_COMMAND_NOT_SUPPORTED 0x07\n#define SOCKS_REP_ADDRESS_TYPE_NOT_SUPPORTED 0x08\n\nB_START_PACKED\nstruct socks_client_hello_header {\n    uint8_t ver;\n    uint8_t nmethods;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_client_hello_method {\n    uint8_t method;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_server_hello {\n    uint8_t ver;\n    uint8_t method;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_request_header {\n    uint8_t ver;\n    uint8_t cmd;\n    uint8_t rsv;\n    uint8_t atyp;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_reply_header {\n    uint8_t ver;\n    uint8_t rep;\n    uint8_t rsv;\n    uint8_t atyp;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_addr_ipv4 {\n    uint32_t addr;\n    uint16_t port;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct socks_addr_ipv6 {\n    uint8_t addr[16];\n    uint16_t port;\n} B_PACKED;    \nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/sslsocket.h",
    "content": "/**\n * @file sslsocket.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Structure for moving around sockets, possibly together with SSL compoments.\n */\n\n#ifndef BADVPN_MISC_SSLSOCKET_H\n#define BADVPN_MISC_SSLSOCKET_H\n\n#include <prio.h>\n\n#include <system/BConnection.h>\n#include <nspr_support/BSSLConnection.h>\n\ntypedef struct {\n    BConnection con;\n    PRFileDesc bottom_prfd;\n    PRFileDesc *ssl_prfd;\n} sslsocket;\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/stdbuf_cmdline.h",
    "content": "/**\n * @file stdbuf_cmdline.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Builds command line for running a program via stdbuf.\n */\n\n#ifndef BADVPN_STDBUF_CMDLINE_H\n#define BADVPN_STDBUF_CMDLINE_H\n\n#include <string.h>\n\n#include <misc/debug.h>\n#include <misc/cmdline.h>\n#include <misc/balloc.h>\n\n/**\n * Builds the initial part of command line for calling a program via stdbuf\n * with standard output buffering set to line-buffered.\n * \n * @param out {@link CmdLine} to append the result to. Note than on failure, only\n *            some part of the cmdline may have been appended.\n * @param stdbuf_exec full path to stdbuf executable\n * @param exec path to the executable. Must not contain nulls. \n * @param exec_len number of characters in exec\n * @return 1 on success, 0 on failure\n */\nstatic int build_stdbuf_cmdline (CmdLine *out, const char *stdbuf_exec, const char *exec, size_t exec_len) WARN_UNUSED;\n\nint build_stdbuf_cmdline (CmdLine *out, const char *stdbuf_exec, const char *exec, size_t exec_len)\n{\n    ASSERT(!memchr(exec, '\\0', exec_len))\n    \n    if (!CmdLine_AppendMulti(out, 3, stdbuf_exec, \"-o\", \"L\")) {\n        goto fail1;\n    }\n    \n    if (exec[0] == '/') {\n        if (!CmdLine_AppendNoNull(out, exec, exec_len)) {\n            goto fail1;\n        }\n    } else {\n        bsize_t size = bsize_add(bsize_fromsize(exec_len), bsize_fromsize(3));\n        char *real_exec = BAllocSize(size);\n        if (!real_exec) {\n            goto fail1;\n        }\n        \n        memcpy(real_exec, \"./\", 2);\n        memcpy(real_exec + 2, exec, exec_len);\n        real_exec[2 + exec_len] = '\\0';\n        \n        int res = CmdLine_Append(out, real_exec);\n        free(real_exec);\n        if (!res) {\n            goto fail1;\n        }\n    }\n    \n    return 1;\n    \nfail1:\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/strdup.h",
    "content": "/**\n * @file strdup.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Allocate memory for a string and copy it there.\n */\n\n#ifndef BADVPN_STRDUP_H\n#define BADVPN_STRDUP_H\n\n#include <string.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include \"misc/debug.h\"\n\n/**\n * Allocate and copy a null-terminated string.\n */\nstatic char * b_strdup (const char *str)\n{\n    ASSERT(str)\n    \n    size_t len = strlen(str);\n    \n    char *s = (char *)malloc(len + 1);\n    if (!s) {\n        return NULL;\n    }\n    \n    memcpy(s, str, len + 1);\n    \n    return s;\n}\n\n/**\n * Allocate memory for a null-terminated string and use the\n * given data as its contents. A null terminator is appended\n * after the specified data.\n */\nstatic char * b_strdup_bin (const char *str, size_t len)\n{\n    ASSERT(str)\n    \n    if (len == SIZE_MAX) {\n        return NULL;\n    }\n    \n    char *s = (char *)malloc(len + 1);\n    if (!s) {\n        return NULL;\n    }\n    \n    memcpy(s, str, len);\n    s[len] = '\\0';\n    \n    return s;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/string_begins_with.h",
    "content": "/**\n * @file string_begins_with.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Function for checking if a string begins with a given string.\n */\n\n#ifndef BADVPN_MISC_STRING_BEGINS_WITH\n#define BADVPN_MISC_STRING_BEGINS_WITH\n\n#include <stddef.h>\n#include <string.h>\n\n#include <misc/debug.h>\n\nstatic size_t data_begins_with (const char *str, size_t str_len, const char *needle)\n{\n    ASSERT(strlen(needle) > 0)\n    \n    size_t len = 0;\n    \n    while (str_len > 0 && *needle) {\n        if (*str != *needle) {\n            return 0;\n        }\n        str++;\n        str_len--;\n        needle++;\n        len++;\n    }\n    \n    if (*needle) {\n        return 0;\n    }\n    \n    return len;\n}\n\nstatic size_t string_begins_with (const char *str, const char *needle)\n{\n    ASSERT(strlen(needle) > 0)\n    \n    return data_begins_with(str, strlen(str), needle);\n}\n\nstatic size_t data_begins_with_bin (const char *str, size_t str_len, const char *needle, size_t needle_len)\n{\n    ASSERT(needle_len > 0)\n    \n    size_t len = 0;\n    \n    while (str_len > 0 && needle_len > 0) {\n        if (*str != *needle) {\n            return 0;\n        }\n        str++;\n        str_len--;\n        needle++;\n        needle_len--;\n        len++;\n    }\n    \n    if (needle_len > 0) {\n        return 0;\n    }\n    \n    return len;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/substring.h",
    "content": "#include <stddef.h>\n\n#include <misc/debug.h>\n#include <misc/memref.h>\n\nstatic void build_substring_backtrack_table (MemRef str, size_t *out_table)\n{\n    ASSERT(str.len > 0)\n    \n    size_t x = 0;\n    \n    for (size_t i = 1; i < str.len; i++) {\n        out_table[i] = x;\n        while (x > 0 && str.ptr[i] != str.ptr[x]) {\n            x = out_table[x];\n        }\n        if (str.ptr[i] == str.ptr[x]) {\n            x++;\n        }\n    }\n}\n\nstatic int find_substring (MemRef text, MemRef word, const size_t *table, size_t *out_position)\n{\n    ASSERT(word.len > 0)\n    \n    size_t x = 0;\n    \n    for (size_t i = 0; i < text.len; i++) {\n        while (x > 0 && text.ptr[i] != word.ptr[x]) {\n            x = table[x];\n        }\n        if (text.ptr[i] == word.ptr[x]) {\n            if (x + 1 == word.len) {\n                *out_position = i - x;\n                return 1;\n            }\n            x++;\n        }\n    }\n    \n    return 0;\n}\n\nstatic void build_substring_backtrack_table_reverse (MemRef str, size_t *out_table)\n{\n    ASSERT(str.len > 0)\n    \n    size_t x = 0;\n    \n    for (size_t i = 1; i < str.len; i++) {\n        out_table[i] = x;\n        while (x > 0 && str.ptr[str.len - 1 - i] != str.ptr[str.len - 1 - x]) {\n            x = out_table[x];\n        }\n        if (str.ptr[str.len - 1 - i] == str.ptr[str.len - 1 - x]) {\n            x++;\n        }\n    }\n}\n\nstatic int find_substring_reverse (MemRef text, MemRef word, const size_t *table, size_t *out_position)\n{\n    ASSERT(word.len > 0)\n    \n    size_t x = 0;\n    \n    for (size_t i = 0; i < text.len; i++) {\n        while (x > 0 && text.ptr[text.len - 1 - i] != word.ptr[word.len - 1 - x]) {\n            x = table[x];\n        }\n        if (text.ptr[text.len - 1 - i] == word.ptr[word.len - 1 - x]) {\n            if (x + 1 == word.len) {\n                *out_position = (text.len - 1 - i);\n                return 1;\n            }\n            x++;\n        }\n    }\n    \n    return 0;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/udp_proto.h",
    "content": "/**\n * @file udp_proto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for the UDP protocol.\n */\n\n#ifndef BADVPN_MISC_UDP_PROTO_H\n#define BADVPN_MISC_UDP_PROTO_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/ipv4_proto.h\"\n#include \"misc/ipv6_proto.h\"\n#include \"misc/read_write_int.h\"\n\nB_START_PACKED\nstruct udp_header {\n    uint16_t source_port;\n    uint16_t dest_port;\n    uint16_t length;\n    uint16_t checksum;\n} B_PACKED;\nB_END_PACKED\n\nstatic uint32_t udp_checksum_summer (const char *data, uint16_t len)\n{\n    ASSERT(len % 2 == 0)\n    \n    uint32_t t = 0;\n    \n    for (uint16_t i = 0; i < len / 2; i++) {\n        t += badvpn_read_be16(data + 2 * i);\n    }\n    \n    return t;\n}\n\nstatic uint16_t udp_checksum (const struct udp_header *header, const uint8_t *payload, uint16_t payload_len, uint32_t source_addr, uint32_t dest_addr)\n{\n    uint32_t t = 0;\n    \n    t += udp_checksum_summer((char *)&source_addr, sizeof(source_addr));\n    t += udp_checksum_summer((char *)&dest_addr, sizeof(dest_addr));\n    \n    uint16_t x;\n    x = hton16(IPV4_PROTOCOL_UDP);\n    t += udp_checksum_summer((char *)&x, sizeof(x));\n    x = hton16(sizeof(*header) + payload_len);\n    t += udp_checksum_summer((char *)&x, sizeof(x));\n    \n    t += udp_checksum_summer((const char *)header, sizeof(*header));\n    \n    if (payload_len % 2 == 0) {\n        t += udp_checksum_summer((const char *)payload, payload_len);\n    } else {\n        t += udp_checksum_summer((const char *)payload, payload_len - 1);\n        \n        x = hton16(((uint16_t)payload[payload_len - 1]) << 8);\n        t += udp_checksum_summer((char *)&x, sizeof(x));\n    }\n    \n    while (t >> 16) {\n        t = (t & 0xFFFF) + (t >> 16);\n    }\n    \n    if (t == 0) {\n        t = UINT16_MAX;\n    }\n    \n    return hton16(~t);\n}\n\nstatic uint16_t udp_ip6_checksum (const struct udp_header *header, const uint8_t *payload, uint16_t payload_len, const uint8_t *source_addr, const uint8_t *dest_addr)\n{\n    uint32_t t = 0;\n    \n    t += udp_checksum_summer((const char *)source_addr, 16);\n    t += udp_checksum_summer((const char *)dest_addr, 16);\n    \n    uint32_t x;\n    x = hton32(sizeof(*header) + payload_len);\n    t += udp_checksum_summer((char *)&x, sizeof(x));\n    x = hton32(IPV6_NEXT_UDP);\n    t += udp_checksum_summer((char *)&x, sizeof(x));\n    \n    t += udp_checksum_summer((const char *)header, sizeof(*header));\n    \n    if (payload_len % 2 == 0) {\n        t += udp_checksum_summer((const char *)payload, payload_len);\n    } else {\n        t += udp_checksum_summer((const char *)payload, payload_len - 1);\n        \n        uint16_t y;\n        y = hton16(((uint16_t)payload[payload_len - 1]) << 8);\n        t += udp_checksum_summer((char *)&y, sizeof(y));\n    }\n    \n    while (t >> 16) {\n        t = (t & 0xFFFF) + (t >> 16);\n    }\n    \n    if (t == 0) {\n        t = UINT16_MAX;\n    }\n    \n    return hton16(~t);\n}\n\nstatic int udp_check (const uint8_t *data, int data_len, struct udp_header *out_header, uint8_t **out_payload, int *out_payload_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(out_header)\n    ASSERT(out_payload)\n    ASSERT(out_payload_len)\n    \n    // parse UDP header\n    if (data_len < sizeof(struct udp_header)) {\n        return 0;\n    }\n    memcpy(out_header, data, sizeof(*out_header));\n    data += sizeof(*out_header);\n    data_len -= sizeof(*out_header);\n    \n    // verify UDP payload\n    int udp_length = ntoh16(out_header->length);\n    if (udp_length < sizeof(*out_header)) {\n        return 0;\n    }\n    if (udp_length > sizeof(*out_header) + data_len) {\n        return 0;\n    }\n    \n    // ignore stray data\n    data_len = udp_length - sizeof(*out_header);\n    \n    *out_payload = (uint8_t *)data;\n    *out_payload_len = data_len;\n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/unicode_funcs.h",
    "content": "/**\n * @file unicode_funcs.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UNICODE_FUNCS_H\n#define BADVPN_UNICODE_FUNCS_H\n\n#include <misc/expstring.h>\n#include <misc/bsize.h>\n#include <misc/Utf8Encoder.h>\n#include <misc/Utf8Decoder.h>\n#include <misc/Utf16Encoder.h>\n#include <misc/Utf16Decoder.h>\n\n/**\n * Decodes UTF-16 data as bytes into an allocated null-terminated UTF-8 string.\n * \n * @param data UTF-16 data, in big endian\n * @param data_len size of data in bytes\n * @param out_is_error if not NULL and the function returns a string,\n *                     *out_is_error will be set to 0 or 1, indicating\n *                     whether there have been errors decoding the input.\n *                     A null decoded character is treated as an error.\n * @return An UTF-8 null-terminated string which can be freed with free(),\n *         or NULL if out of memory.\n */\nstatic char * unicode_decode_utf16_to_utf8 (const uint8_t *data, size_t data_len, int *out_is_error);\n\n/**\n * Decodes UTF-8 data into UTF-16 data as bytes.\n * \n * @param data UTF-8 data\n * @param data_len size of data in bytes\n * @param out output buffer\n * @param out_avail number of bytes available in output buffer\n * @param out_len if not NULL, *out_len will contain the number of bytes\n *                required to store the resulting data (or overflow)\n * @param out_is_error if not NULL, *out_is_error will contain 0 or 1,\n *                     indicating whether there have been errors decoding\n *                     the input\n */\nstatic void unicode_decode_utf8_to_utf16 (const uint8_t *data, size_t data_len, uint8_t *out, size_t out_avail, bsize_t *out_len, int *out_is_error);\n\nstatic char * unicode_decode_utf16_to_utf8 (const uint8_t *data, size_t data_len, int *out_is_error)\n{\n    // will build the resulting UTF-8 string by appending to ExpString\n    ExpString str;\n    if (!ExpString_Init(&str)) {\n        goto fail0;\n    }\n    \n    // init UTF-16 decoder\n    Utf16Decoder decoder;\n    Utf16Decoder_Init(&decoder);\n    \n    // set initial input and input matching positions\n    size_t i_in = 0;\n    size_t i_ch = 0;\n    \n    int error = 0;\n    \n    while (i_in < data_len) {\n        // read two input bytes from the input position\n        uint8_t x = data[i_in++];\n        if (i_in == data_len) {\n            break;\n        }\n        uint8_t y = data[i_in++];\n        \n        // combine them into a 16-bit value\n        uint16_t xy = (((uint16_t)x << 8) | (uint16_t)y);\n        \n        // give the 16-bit value to the UTF-16 decoder and maybe\n        // receive a Unicode character back\n        uint32_t ch;\n        if (!Utf16Decoder_Input(&decoder, xy, &ch)) {\n            continue;\n        }\n        \n        if (!error) {\n            // encode the Unicode character back into UTF-16\n            uint16_t chenc[2];\n            int chenc_n = Utf16Encoder_EncodeCharacter(ch, chenc);\n            ASSERT(chenc_n > 0)\n            \n            // match the result with input\n            for (int chenc_i = 0; chenc_i < chenc_n; chenc_i++) {\n                uint8_t cx = (chenc[chenc_i] >> 8);\n                uint8_t cy = (chenc[chenc_i] & 0xFF);\n                \n                if (i_ch >= data_len || data[i_ch] != cx) {\n                    error = 1;\n                    break;\n                }\n                i_ch++;\n                \n                if (i_ch >= data_len || data[i_ch] != cy) {\n                    error = 1;\n                    break;\n                }\n                i_ch++;\n            }\n        }\n        \n        // we don't like null Unicode characters because we're building a\n        // null-terminated UTF-8 string\n        if (ch == 0) {\n            error = 1;\n            continue;\n        }\n        \n        // encode the Unicode character into UTF-8\n        uint8_t enc[5];\n        int enc_n = Utf8Encoder_EncodeCharacter(ch, enc);\n        ASSERT(enc_n > 0)\n        \n        // append the resulting UTF-8 bytes to the result string\n        enc[enc_n] = 0;\n        if (!ExpString_Append(&str, enc)) {\n            goto fail1;\n        }\n    }\n    \n    // check if we matched the whole input string when encoding back\n    if (i_ch < data_len) {\n        error = 1;\n    }\n    \n    if (out_is_error) {\n        *out_is_error = error;\n    }\n    return ExpString_Get(&str);\n    \nfail1:\n    ExpString_Free(&str);\nfail0:\n    return NULL;\n}\n\nstatic void unicode_decode_utf8_to_utf16 (const uint8_t *data, size_t data_len, uint8_t *out, size_t out_avail, bsize_t *out_len, int *out_is_error)\n{\n    Utf8Decoder decoder;\n    Utf8Decoder_Init(&decoder);\n    \n    size_t i_in = 0;\n    size_t i_ch = 0;\n    \n    bsize_t len = bsize_fromsize(0);\n    \n    int error = 0;\n    \n    while (i_in < data_len) {\n        uint8_t x = data[i_in++];\n        \n        uint32_t ch;\n        if (!Utf8Decoder_Input(&decoder, x, &ch)) {\n            continue;\n        }\n        \n        if (!error) {\n            uint8_t chenc[4];\n            int chenc_n = Utf8Encoder_EncodeCharacter(ch, chenc);\n            ASSERT(chenc_n > 0)\n            \n            for (int chenc_i = 0; chenc_i < chenc_n; chenc_i++) {\n                if (i_ch >= data_len || data[i_ch] != chenc[chenc_i]) {\n                    error = 1;\n                    break;\n                }\n                i_ch++;\n            }\n        }\n        \n        uint16_t enc[2];\n        int enc_n = Utf16Encoder_EncodeCharacter(ch, enc);\n        ASSERT(enc_n > 0)\n        \n        len = bsize_add(len, bsize_fromsize(2 * enc_n));\n        \n        for (int enc_i = 0; enc_i < enc_n; enc_i++) {\n            if (out_avail == 0) {\n                break;\n            }\n            *(out++) = (enc[enc_i] >> 8);\n            out_avail--;\n            \n            if (out_avail == 0) {\n                break;\n            }\n            *(out++) = (enc[enc_i] & 0xFF);\n            out_avail--;\n        }\n    }\n    \n    if (i_ch < data_len) {\n        error = 1;\n    }\n    \n    if (out_len) {\n        *out_len = len;\n    }\n    if (out_is_error) {\n        *out_is_error = error;\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/version.h",
    "content": "/**\n * @file version.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Product information definitions.\n */\n\n#ifndef BADVPN_MISC_VERSION_H\n#define BADVPN_MISC_VERSION_H\n\n#define GLOBAL_PRODUCT_NAME \"BadVPN\"\n#define GLOBAL_VERSION \"1.999.130\"\n#define GLOBAL_COPYRIGHT_NOTICE \"Copyright (C) 2010 Ambroz Bizjak <ambrop7@gmail.com>\"\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/misc/write_file.h",
    "content": "/**\n * @file write_file.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_WRITE_FILE_H\n#define BADVPN_WRITE_FILE_H\n\n#include <stddef.h>\n#include <stdint.h>\n#include <stdio.h>\n\n#include <misc/debug.h>\n#include <misc/memref.h>\n\nstatic int write_file (const char *file, MemRef data)\n{\n    FILE *f = fopen(file, \"w\");\n    if (!f) {\n        goto fail0;\n    }\n    \n    while (data.len > 0) {\n        size_t res = fwrite(data.ptr, 1, data.len, f);\n        if (res == 0) {\n            goto fail1;\n        }\n        \n        ASSERT(res <= data.len)\n        \n        data = MemRef_SubFrom(data, res);\n    }\n    \n    if (fclose(f) != 0) {\n        return 0;\n    }\n    \n    return 1;\n    \nfail1:\n    fclose(f);\nfail0:\n    return 0;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/addr.bproto",
    "content": "// message for an AddrProto address\nmessage addr {\n    // address type. from addr.h\n    required uint8 type = 1;\n    // for IPv4 and IPv6 addresses, the port (network byte order)\n    optional data(\"2\") ip_port = 2;\n    // for IPv4 addresses, the IP address\n    optional data(\"4\") ipv4_addr = 3;\n    // for IPv6 addresses, the IP address\n    optional data(\"16\") ipv6_addr = 4;\n};\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/addr.h",
    "content": "/**\n * @file addr.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * AddrProto, a protocol for encoding network addresses.\n * \n * AddrProto is built with BProto, the protocol and code generator for building\n * custom message protocols. The BProto specification file is addr.bproto.\n */\n\n#ifndef BADVPN_PROTOCOL_ADDR_H\n#define BADVPN_PROTOCOL_ADDR_H\n\n#include <stdint.h>\n#include <string.h>\n\n#include <misc/debug.h>\n#include <system/BAddr.h>\n#include <base/BLog.h>\n\n#include <generated/bproto_addr.h>\n\n#include <generated/blog_channel_addr.h>\n\n#define ADDR_TYPE_IPV4 1\n#define ADDR_TYPE_IPV6 2\n\n#define ADDR_SIZE_IPV4 (addr_SIZEtype + addr_SIZEip_port + addr_SIZEipv4_addr)\n#define ADDR_SIZE_IPV6 (addr_SIZEtype + addr_SIZEip_port + addr_SIZEipv6_addr)\n\n/**\n * Determines if the given address is supported by AddrProto.\n * Depends only on the type of the address.\n *\n * @param addr address to check. Must be recognized according to {@link BAddr_IsRecognized}.\n * @return 1 if supported, 0 if not\n */\nstatic int addr_supported (BAddr addr);\n\n/**\n * Determines the size of the given address when encoded by AddrProto.\n * Depends only on the type of the address.\n *\n * @param addr address to check. Must be supported according to {@link addr_supported}.\n * @return encoded size\n */\nstatic int addr_size (BAddr addr);\n\n/**\n * Encodes an address according to AddrProto.\n *\n * @param out output buffer. Must have at least addr_size(addr) space.\n * @param addr address to encode. Must be supported according to {@link addr_supported}.\n */\nstatic void addr_write (uint8_t *out, BAddr addr);\n\n/**\n * Decodes an address according to AddrProto.\n *\n * @param data input buffer containing the address to decode\n * @param data_len size of input. Must be >=0.\n * @param out_addr the decoded address will be stored here on success\n * @return 1 on success, 0 on failure\n */\nstatic int addr_read (uint8_t *data, int data_len, BAddr *out_addr) WARN_UNUSED;\n\nint addr_supported (BAddr addr)\n{\n    BAddr_Assert(&addr);\n    \n    switch (addr.type) {\n        case BADDR_TYPE_IPV4:\n        case BADDR_TYPE_IPV6:\n            return 1;\n        default:\n            return 0;\n    }\n}\n\nint addr_size (BAddr addr)\n{\n    ASSERT(addr_supported(addr))\n    \n    switch (addr.type) {\n        case BADDR_TYPE_IPV4:\n            return ADDR_SIZE_IPV4;\n        case BADDR_TYPE_IPV6:\n            return ADDR_SIZE_IPV6;\n        default:\n            ASSERT(0)\n            return 0;\n    }\n}\n\nvoid addr_write (uint8_t *out, BAddr addr)\n{\n    ASSERT(addr_supported(addr))\n    \n    addrWriter writer;\n    addrWriter_Init(&writer, out);\n    \n    switch (addr.type) {\n        case BADDR_TYPE_IPV4: {\n            addrWriter_Addtype(&writer, ADDR_TYPE_IPV4);\n            uint8_t *out_port = addrWriter_Addip_port(&writer);\n            memcpy(out_port, &addr.ipv4.port, sizeof(addr.ipv4.port));\n            uint8_t *out_addr = addrWriter_Addipv4_addr(&writer);\n            memcpy(out_addr, &addr.ipv4.ip, sizeof(addr.ipv4.ip));\n        } break;\n        case BADDR_TYPE_IPV6: {\n            addrWriter_Addtype(&writer, ADDR_TYPE_IPV6);\n            uint8_t *out_port = addrWriter_Addip_port(&writer);\n            memcpy(out_port, &addr.ipv6.port, sizeof(addr.ipv6.port));\n            uint8_t *out_addr = addrWriter_Addipv6_addr(&writer);\n            memcpy(out_addr, addr.ipv6.ip, sizeof(addr.ipv6.ip));\n        } break;\n        default:\n            ASSERT(0);\n    }\n    \n    int len = addrWriter_Finish(&writer);\n    B_USE(len)\n    \n    ASSERT(len == addr_size(addr))\n}\n\nint addr_read (uint8_t *data, int data_len, BAddr *out_addr)\n{\n    ASSERT(data_len >= 0)\n    \n    addrParser parser;\n    if (!addrParser_Init(&parser, data, data_len)) {\n        BLog(BLOG_ERROR, \"failed to parse addr\");\n        return 0;\n    }\n    \n    uint8_t type = 0; // to remove warning\n    addrParser_Gettype(&parser, &type);\n    \n    switch (type) {\n        case ADDR_TYPE_IPV4: {\n            uint8_t *port_data;\n            if (!addrParser_Getip_port(&parser, &port_data)) {\n                BLog(BLOG_ERROR, \"port missing for IPv4 address\");\n                return 0;\n            }\n            uint8_t *addr_data;\n            if (!addrParser_Getipv4_addr(&parser, &addr_data)) {\n                BLog(BLOG_ERROR, \"address missing for IPv4 address\");\n                return 0;\n            }\n            uint16_t port;\n            uint32_t addr;\n            memcpy(&port, port_data, sizeof(port));\n            memcpy(&addr, addr_data, sizeof(addr));\n            BAddr_InitIPv4(out_addr, addr, port);\n        } break;\n        case ADDR_TYPE_IPV6: {\n            uint8_t *port_data;\n            if (!addrParser_Getip_port(&parser, &port_data)) {\n                BLog(BLOG_ERROR, \"port missing for IPv6 address\");\n                return 0;\n            }\n            uint8_t *addr_data;\n            if (!addrParser_Getipv6_addr(&parser, &addr_data)) {\n                BLog(BLOG_ERROR, \"address missing for IPv6 address\");\n                return 0;\n            }\n            uint16_t port;\n            memcpy(&port, port_data, sizeof(port));\n            BAddr_InitIPv6(out_addr, addr_data, port);\n        } break;\n        default:\n            BLog(BLOG_ERROR, \"unknown address type %d\", (int)type);\n            return 0;\n    }\n    \n    return 1;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/dataproto.h",
    "content": "/**\n * @file dataproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for DataProto, the protocol for data transport between VPN peers.\n * \n * All multi-byte integers in structs are little-endian, unless stated otherwise.\n * \n * A DataProto packet consists of:\n *   - the header (struct {@link dataproto_header})\n *   - between zero and DATAPROTO_MAX_PEER_IDS destination peer IDs (struct {@link dataproto_peer_id})\n *   - the payload, e.g. Ethernet frame\n */\n\n#ifndef BADVPN_PROTOCOL_DATAPROTO_H\n#define BADVPN_PROTOCOL_DATAPROTO_H\n\n#include <stdint.h>\n\n#include <protocol/scproto.h>\n#include <misc/packed.h>\n\n#define DATAPROTO_MAX_PEER_IDS 1\n\n#define DATAPROTO_FLAGS_RECEIVING_KEEPALIVES 1\n\n/**\n * DataProto header.\n */\nB_START_PACKED\nstruct dataproto_header {\n    /**\n     * Bitwise OR of flags. Possible flags:\n     *   - DATAPROTO_FLAGS_RECEIVING_KEEPALIVES\n     *     Indicates that when the peer sent this packet, it has received at least\n     *     one packet from the other peer in the last keep-alive tolerance time.\n     */\n    uint8_t flags;\n    \n    /**\n     * ID of the peer this frame originates from.\n     */\n    peerid_t from_id;\n    \n    /**\n     * Number of destination peer IDs that follow.\n     * Must be <=DATAPROTO_MAX_PEER_IDS.\n     */\n    peerid_t num_peer_ids;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * Structure for a destination peer ID in DataProto.\n * Wraps a single peerid_t in a packed struct for easy access.\n */\nB_START_PACKED\nstruct dataproto_peer_id {\n    peerid_t id;\n} B_PACKED;\nB_END_PACKED\n\n#define DATAPROTO_MAX_OVERHEAD (sizeof(struct dataproto_header) + DATAPROTO_MAX_PEER_IDS * sizeof(struct dataproto_peer_id))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/fragmentproto.h",
    "content": "/**\n * @file fragmentproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for FragmentProto, a protocol that allows sending of arbitrarily sized packets over\n * a link with a fixed MTU.\n * \n * All multi-byte integers in structs are little-endian, unless stated otherwise.\n * \n * A FragmentProto packet consists of a number of chunks.\n * Each chunk consists of:\n *   - the chunk header (struct {@link fragmentproto_chunk_header})\n *   - the chunk payload, i.e. part of the frame specified in the header\n */\n\n#ifndef BADVPN_PROTOCOL_FRAGMENTPROTO_H\n#define BADVPN_PROTOCOL_FRAGMENTPROTO_H\n\n#include <stdint.h>\n\n#include <misc/balign.h>\n#include <misc/packed.h>\n\ntypedef uint16_t fragmentproto_frameid;\n\n/**\n * FragmentProto chunk header.\n */\nB_START_PACKED\nstruct fragmentproto_chunk_header {\n    /**\n     * Identifier of the frame this chunk belongs to.\n     * Frames should be given ascending identifiers as they are encoded\n     * into chunks (except when the ID wraps to zero).\n     */\n    fragmentproto_frameid frame_id;\n    \n    /**\n     * Position in the frame where this chunk starts.\n     */\n    uint16_t chunk_start;\n    \n    /**\n     * Length of the chunk's payload.\n     */\n    uint16_t chunk_len;\n    \n    /**\n     * Whether this is the last chunk of the frame, i.e.\n     * the total length of the frame is chunk_start + chunk_len.\n     */\n    uint8_t is_last;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * Calculates how many chunks are needed at most for encoding one frame of the\n * given maximum size with FragmentProto onto a carrier with a given MTU.\n * This includes the case when the first chunk of a frame is not the first chunk\n * in a FragmentProto packet.\n * \n * @param carrier_mtu MTU of the carrier, i.e. maximum length of FragmentProto packets. Must be >sizeof(struct fragmentproto_chunk_header).\n * @param frame_mtu maximum frame size. Must be >=0.\n * @return maximum number of chunks needed. Will be >0.\n */\nstatic int fragmentproto_max_chunks_for_frame (int carrier_mtu, int frame_mtu)\n{\n    ASSERT(carrier_mtu > sizeof(struct fragmentproto_chunk_header))\n    ASSERT(frame_mtu >= 0)\n    \n    return (bdivide_up(frame_mtu, (carrier_mtu - sizeof(struct fragmentproto_chunk_header))) + 1);\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/msgproto.bproto",
    "content": "// message for all MsgProto messages\nmessage msg {\n    // message type, from msgproto.h\n    required uint16 type = 1;\n    // message payload. Is itself one of the messages below\n    // for \"youconnect\", \"seed\" and \"confirmseed\" messages,\n    // and empty for other messages\n    required data payload = 2;\n};\n\n// \"youconnect\" message payload\nmessage msg_youconnect {\n    // external addresses to try; one or more msg_youconnect_addr messages\n    required repeated data addr = 1;\n    // encryption key if using UDP and encryption is enabled\n    optional data key = 2;\n    // password if using TCP\n    optional uint64 password = 3;\n};\n\n// an external address\nmessage msg_youconnect_addr {\n    // scope name for this address\n    required data name = 1;\n    // address according to AddrProto\n    required data addr = 2;\n};\n\n// \"seed\" message payload\nmessage msg_seed {\n    // identifier for the seed being send\n    required uint16 seed_id = 1;\n    // seed encryption key\n    required data key = 2;\n    // seed IV\n    required data iv = 3;\n};\n\n// \"confirmseed\" message payload\nmessage msg_confirmseed {\n    // identifier for the seed being confirmed\n    required uint16 seed_id = 1;\n};\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/msgproto.h",
    "content": "/**\n * @file msgproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * MsgProto is used by each pair of VPN peers as messages through the server, in order to\n * establish a direct data connection. MsgProto operates on top of the SCProto message\n * service, optionally secured with SSL; see {@link scproto.h} for details.\n * \n * MsgProto is built with BProto, the protocol and code generator for building\n * custom message protocols. The BProto specification file is msgproto.bproto.\n * \n * It goes roughly like that:\n * \n * We name one peer the master and the other the slave. The master is the one with\n * greater ID.\n * When the peers get to know about each other, the master starts the binding procedure.\n * It binds/listens to an address, and sends the slave the \"youconnect\" message. It\n * contains a list of external addresses for that bind address and additional parameters.\n * Each external address includes a string called a scope name. The slave, which receives\n * the \"youconnect\" message, finds the first external address whose scope it recognizes,\n * and attempts to establish connection to that address. If it finds an address, buf fails\n * at connecting, it sends \"youretry\", which makes the master restart the binding procedure\n * after some time. If it however does not recognize any external address, it sends\n * \"cannotconnect\" back to the master.\n * When the master receives the \"cannotconnect\", it tries the next bind address, as described\n * above. When the master runs out of bind addresses, it sends \"cannotbind\" to the slave.\n * When the slave receives the \"cannotbind\", it starts its own binding procedure, similarly\n * to what is described above, with master and slave reversed. First difference is if the\n * master fails to connect to a recognized address, it doesn't send \"youretry\", but rather\n * simply restarts the whole procedure after some time. The other difference is when the\n * slave runs out of bind addresses, it not only sends \"cannotbind\" to the master, but\n * registers relaying to the master. And in this case, when the master receives the \"cannotbind\",\n * it doesn't start the binding procedure all all over, but registers relaying to the slave.\n */\n\n#ifndef BADVPN_PROTOCOL_MSGPROTO_H\n#define BADVPN_PROTOCOL_MSGPROTO_H\n\n#include <generated/bproto_msgproto.h>\n\n#define MSGID_YOUCONNECT 1\n#define MSGID_CANNOTCONNECT 2\n#define MSGID_CANNOTBIND 3\n#define MSGID_YOURETRY 5\n#define MSGID_SEED 6\n#define MSGID_CONFIRMSEED 7\n\n#define MSG_MAX_PAYLOAD (SC_MAX_MSGLEN - msg_SIZEtype - msg_SIZEpayload(0))\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/packetproto.h",
    "content": "/**\n * @file packetproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for PacketProto, a protocol that allows sending of packets\n * over a reliable stream connection.\n * \n * All multi-byte integers in structs are little-endian, unless stated otherwise.\n * \n * Packets are encoded into a stream by representing each packet with:\n *   - a 16-bit little-endian unsigned integer representing the length\n *     of the payload\n *   - that many bytes of payload\n */\n\n#ifndef BADVPN_PROTOCOL_PACKETPROTO_H\n#define BADVPN_PROTOCOL_PACKETPROTO_H\n\n#include <stdint.h>\n#include <limits.h>\n\n#include \"misc/packed.h\"\n\n/**\n * PacketProto packet header.\n * Wraps a single uint16_t in a packed struct for easy access.\n */\nB_START_PACKED\nstruct packetproto_header\n{\n    /**\n     * Length of the packet payload that follows.\n     */\n    uint16_t len;\n} B_PACKED;\nB_END_PACKED\n\n#define PACKETPROTO_ENCLEN(_len) (sizeof(struct packetproto_header) + (_len))\n\n#define PACKETPROTO_MAXPAYLOAD UINT16_MAX\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/requestproto.h",
    "content": "/**\n * @file requestproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_REQUESTPROTO_H\n#define BADVPN_REQUESTPROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define REQUESTPROTO_TYPE_CLIENT_REQUEST 1\n#define REQUESTPROTO_TYPE_CLIENT_ABORT 2\n#define REQUESTPROTO_TYPE_SERVER_REPLY 3\n#define REQUESTPROTO_TYPE_SERVER_FINISHED 4\n#define REQUESTPROTO_TYPE_SERVER_ERROR 5\n\nB_START_PACKED\nstruct requestproto_header {\n    uint32_t request_id;\n    uint32_t type;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/scproto.h",
    "content": "/**\n * @file scproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Definitions for SCProto, the protocol that the clients communicate in\n * with the server.\n * \n * All multi-byte integers in structs are little-endian, unless stated otherwise.\n * \n * A SCProto packet consists of:\n *   - a header (struct {@link sc_header}) which contains the type of the\n *     packet\n *   - the payload\n * \n * It goes roughly like that:\n * \n * When the client connects to the server, it sends a \"clienthello\" packet\n * to the server. The packet contains the protocol version the client is using.\n * When the server receives the \"clienthello\" packet, it checks the version.\n * If it doesn't match, it disconnects the client. Otherwise the server sends\n * the client a \"serverhello\" packet to the client. That packet contains\n * the ID of the client and possibly its IPv4 address as the server sees it\n * (zero if not applicable).\n * \n * The server than proceeds to synchronize the peers' knowledge of each other.\n * It does that by sending a \"newclient\" messages to a client to inform it of\n * another peer, and \"endclient\" messages to inform it that a peer is gone.\n * Each client, upon receiving a \"newclient\" message, MUST sent a corresponding\n * \"acceptpeer\" message, before sending any messages to the new peer.\n * The server forwards messages between synchronized peers to allow them to\n * communicate. A peer sends a message to another peer by sending the \"outmsg\"\n * packet to the server, and the server delivers a message to a peer by sending\n * it the \"inmsg\" packet.\n * \n * The message service is reliable; messages from one client to another are\n * expected to arrive unmodified and in the same order. There is, however,\n * no flow control. This means that messages can not be used for bulk transfers\n * between the clients (and they are not). If the server runs out of buffer for\n * messages from one client to another, it will stop forwarding messages, and\n * will reset knowledge of the two clients after some delay. Similarly, if one\n * of the clients runs out of buffer locally, it will send the \"resetpeer\"\n * packet to make the server reset knowledge.\n * \n * The messages transport either:\n * \n * - If the relevant \"newclient\" packets do not contain the\n *   SCID_NEWCLIENT_FLAG_SSL flag, then plaintext MsgProto messages.\n * \n * - If the relevant \"newclient\" packets do contain the SCID_NEWCLIENT_FLAG_SSL\n *   flag, then SSL, broken down into packets, PacketProto inside SSL, and finally\n *   MsgProto inside PacketProto. The master peer (one with higher ID) acts as an\n *   SSL server, and the other acts as an SSL client. The peers must identify with\n *   the same certificate they used when connecting to the server, and each peer\n *   must byte-compare the other's certificate agains the one provided to it by\n *   by the server in the relevent \"newclient\" message.\n */\n\n#ifndef BADVPN_PROTOCOL_SCPROTO_H\n#define BADVPN_PROTOCOL_SCPROTO_H\n\n#include <stdint.h>\n\n#include <misc/packed.h>\n\n#define SC_VERSION 29\n#define SC_OLDVERSION_NOSSL 27\n#define SC_OLDVERSION_BROKENCERT 26\n\n#define SC_KEEPALIVE_INTERVAL 10000\n\n/**\n * SCProto packet header.\n * Follows up to SC_MAX_PAYLOAD bytes of payload.\n */\nB_START_PACKED\nstruct sc_header {\n    /**\n     * Message type.\n     */\n    uint8_t type;\n} B_PACKED;\nB_END_PACKED\n\n#define SC_MAX_PAYLOAD 2000\n#define SC_MAX_ENC (sizeof(struct sc_header) + SC_MAX_PAYLOAD)\n\ntypedef uint16_t peerid_t;\n\n#define SCID_KEEPALIVE 0\n#define SCID_CLIENTHELLO 1\n#define SCID_SERVERHELLO 2\n#define SCID_NEWCLIENT 3\n#define SCID_ENDCLIENT 4\n#define SCID_OUTMSG 5\n#define SCID_INMSG 6\n#define SCID_RESETPEER 7\n#define SCID_ACCEPTPEER 8\n\n/**\n * \"clienthello\" client packet payload.\n * Packet type is SCID_CLIENTHELLO.\n */\nB_START_PACKED\nstruct sc_client_hello {\n    /**\n     * Protocol version the client is using.\n     */\n    uint16_t version;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * \"serverhello\" server packet payload.\n * Packet type is SCID_SERVERHELLO.\n */\nB_START_PACKED\nstruct sc_server_hello {\n    /**\n     * Flags. Not used yet.\n     */\n    uint16_t flags;\n    \n    /**\n     * Peer ID of the client.\n     */\n    peerid_t id;\n    \n    /**\n     * IPv4 address of the client as seen by the server\n     * (network byte order). Zero if not applicable.\n     */\n    uint32_t clientAddr;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * \"newclient\" server packet payload.\n * Packet type is SCID_NEWCLIENT.\n * If the server is using TLS, follows up to SCID_NEWCLIENT_MAX_CERT_LEN\n * bytes of the new client's certificate (encoded in DER).\n */\nB_START_PACKED\nstruct sc_server_newclient {\n    /**\n     * ID of the new peer.\n     */\n    peerid_t id;\n    \n    /**\n     * Flags. Possible flags:\n     *   - SCID_NEWCLIENT_FLAG_RELAY_SERVER\n     *     You can relay frames to other peers through this peer.\n     *   - SCID_NEWCLIENT_FLAG_RELAY_CLIENT\n     *     You must allow this peer to relay frames to other peers through you.\n     *   - SCID_NEWCLIENT_FLAG_SSL\n     *     SSL must be used to talk to this peer through messages.\n     */\n    uint16_t flags;\n} B_PACKED;\nB_END_PACKED\n\n#define SCID_NEWCLIENT_FLAG_RELAY_SERVER 1\n#define SCID_NEWCLIENT_FLAG_RELAY_CLIENT 2\n#define SCID_NEWCLIENT_FLAG_SSL 4\n\n#define SCID_NEWCLIENT_MAX_CERT_LEN (SC_MAX_PAYLOAD - sizeof(struct sc_server_newclient))\n\n/**\n * \"endclient\" server packet payload.\n * Packet type is SCID_ENDCLIENT.\n */\nB_START_PACKED\nstruct sc_server_endclient {\n    /**\n     * ID of the removed peer.\n     */\n    peerid_t id;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * \"outmsg\" client packet header.\n * Packet type is SCID_OUTMSG.\n * Follows up to SC_MAX_MSGLEN bytes of message payload.\n */\nB_START_PACKED\nstruct sc_client_outmsg {\n    /**\n     * ID of the destionation peer.\n     */\n    peerid_t clientid;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * \"inmsg\" server packet payload.\n * Packet type is SCID_INMSG.\n * Follows up to SC_MAX_MSGLEN bytes of message payload.\n */\nB_START_PACKED\nstruct sc_server_inmsg {\n    /**\n     * ID of the source peer.\n     */\n    peerid_t clientid;\n} B_PACKED;\nB_END_PACKED\n\n#define _SC_MAX_OUTMSGLEN (SC_MAX_PAYLOAD - sizeof(struct sc_client_outmsg))\n#define _SC_MAX_INMSGLEN (SC_MAX_PAYLOAD - sizeof(struct sc_server_inmsg))\n\n#define SC_MAX_MSGLEN (_SC_MAX_OUTMSGLEN < _SC_MAX_INMSGLEN ? _SC_MAX_OUTMSGLEN : _SC_MAX_INMSGLEN)\n\n/**\n * \"resetpeer\" client packet header.\n * Packet type is SCID_RESETPEER.\n */\nB_START_PACKED\nstruct sc_client_resetpeer {\n    /**\n     * ID of the peer to reset.\n     */\n    peerid_t clientid;\n} B_PACKED;\nB_END_PACKED\n\n/**\n * \"acceptpeer\" client packet payload.\n * Packet type is SCID_ACCEPTPEER.\n */\nB_START_PACKED\nstruct sc_client_acceptpeer {\n    /**\n     * ID of the peer to accept.\n     */\n    peerid_t clientid;\n} B_PACKED;\nB_END_PACKED\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/spproto.h",
    "content": "/**\n * @file spproto.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Protocol for securing datagram communication.\n * \n * Security features implemented:\n *   - Encryption. Encrypts packets with a block cipher.\n *     Protects against a third party from seeing the data\n *     being transmitted.\n *   - Hashes. Adds a hash of the packet into the packet.\n *     Combined with encryption, protects against tampering\n *     with packets and crafting new packets.\n *   - One-time passwords. Adds a password to each packet\n *     for the receiver to recognize. Protects agains replaying\n *     packets and crafting new packets.\n * \n * A SPProto plaintext packet contains the following, in order:\n *   - if OTPs are used, a struct {@link spproto_otpdata} which contains\n *     the seed ID and the OTP,\n *   - if hashes are used, the hash,\n *   - payload data.\n * \n * If encryption is used:\n *   - the plaintext is padded by appending a 0x01 byte and as many 0x00\n *     bytes as needed to align to block size,\n *   - the padded plaintext is encrypted, and\n *   - the initialization vector (IV) is prepended.\n */\n\n#ifndef BADVPN_PROTOCOL_SPPROTO_H\n#define BADVPN_PROTOCOL_SPPROTO_H\n\n#include <stdint.h>\n#include <limits.h>\n\n#include <misc/debug.h>\n#include <misc/balign.h>\n#include <misc/packed.h>\n#include <security/BHash.h>\n#include <security/BEncryption.h>\n#include <security/OTPCalculator.h>\n\n#define SPPROTO_HASH_MODE_NONE 0\n#define SPPROTO_ENCRYPTION_MODE_NONE 0\n#define SPPROTO_OTP_MODE_NONE 0\n\n/**\n * Stores security parameters for SPProto.\n */\nstruct spproto_security_params {\n    /**\n     * Hash mode.\n     * Either SPPROTO_HASH_MODE_NONE for no hashes, or a valid bhash\n     * hash mode.\n     */\n    int hash_mode;\n    \n    /**\n     * Encryption mode.\n     * Either SPPROTO_ENCRYPTION_MODE_NONE for no encryption, or a valid\n     * {@link BEncryption} cipher.\n     */\n    int encryption_mode;\n    \n    /**\n     * One-time password (OTP) mode.\n     * Either SPPROTO_OTP_MODE_NONE for no OTPs, or a valid\n     * {@link BEncryption} cipher.\n     */\n    int otp_mode;\n    \n    /**\n     * If OTPs are used (otp_mode != SPPROTO_OTP_MODE_NONE), number of\n     * OTPs generated from a single seed.\n     */\n    int otp_num;\n};\n\n#define SPPROTO_HAVE_HASH(_params) ((_params).hash_mode != SPPROTO_HASH_MODE_NONE)\n#define SPPROTO_HASH_SIZE(_params) ( \\\n    SPPROTO_HAVE_HASH(_params) ? \\\n    BHash_size((_params).hash_mode) : \\\n    0 \\\n)\n\n#define SPPROTO_HAVE_ENCRYPTION(_params) ((_params).encryption_mode != SPPROTO_ENCRYPTION_MODE_NONE)\n\n#define SPPROTO_HAVE_OTP(_params) ((_params).otp_mode != SPPROTO_OTP_MODE_NONE)\n\nB_START_PACKED\nstruct spproto_otpdata {\n    uint16_t seed_id;\n    otp_t otp;\n} B_PACKED;\nB_END_PACKED\n\n#define SPPROTO_HEADER_OTPDATA_OFF(_params) 0\n#define SPPROTO_HEADER_OTPDATA_LEN(_params) (SPPROTO_HAVE_OTP(_params) ? sizeof(struct spproto_otpdata) : 0)\n#define SPPROTO_HEADER_HASH_OFF(_params) (SPPROTO_HEADER_OTPDATA_OFF(_params) + SPPROTO_HEADER_OTPDATA_LEN(_params))\n#define SPPROTO_HEADER_HASH_LEN(_params) SPPROTO_HASH_SIZE(_params)\n#define SPPROTO_HEADER_LEN(_params) (SPPROTO_HEADER_HASH_OFF(_params) + SPPROTO_HEADER_HASH_LEN(_params))\n\n/**\n * Asserts that the given SPProto security parameters are valid.\n * \n * @param params security parameters\n */\nstatic void spproto_assert_security_params (struct spproto_security_params params)\n{\n    ASSERT(params.hash_mode == SPPROTO_HASH_MODE_NONE || BHash_type_valid(params.hash_mode))\n    ASSERT(params.encryption_mode == SPPROTO_ENCRYPTION_MODE_NONE || BEncryption_cipher_valid(params.encryption_mode))\n    ASSERT(params.otp_mode == SPPROTO_OTP_MODE_NONE || BEncryption_cipher_valid(params.otp_mode))\n    ASSERT(params.otp_mode == SPPROTO_OTP_MODE_NONE || params.otp_num > 0)\n}\n\n/**\n * Calculates the maximum payload size for SPProto given the\n * security parameters and the maximum encoded packet size.\n * \n * @param params security parameters\n * @param carrier_mtu maximum encoded packet size. Must be >=0.\n * @return maximum payload size. Negative means is is impossible\n *         to encode anything.\n */\nstatic int spproto_payload_mtu_for_carrier_mtu (struct spproto_security_params params, int carrier_mtu)\n{\n    spproto_assert_security_params(params);\n    ASSERT(carrier_mtu >= 0)\n    \n    if (params.encryption_mode == SPPROTO_ENCRYPTION_MODE_NONE) {\n        return (carrier_mtu - SPPROTO_HEADER_LEN(params));\n    } else {\n        int block_size = BEncryption_cipher_block_size(params.encryption_mode);\n        return (balign_down(carrier_mtu, block_size) - block_size - SPPROTO_HEADER_LEN(params) - 1);\n    }\n}\n\n/**\n * Calculates the maximum encoded packet size for SPProto given the\n * security parameters and the maximum payload size.\n * \n * @param params security parameters\n * @param payload_mtu maximum payload size. Must be >=0.\n * @return maximum encoded packet size, -1 if payload_mtu is too large\n */\nstatic int spproto_carrier_mtu_for_payload_mtu (struct spproto_security_params params, int payload_mtu)\n{\n    spproto_assert_security_params(params);\n    ASSERT(payload_mtu >= 0)\n    \n    if (params.encryption_mode == SPPROTO_ENCRYPTION_MODE_NONE) {\n        if (payload_mtu > INT_MAX - SPPROTO_HEADER_LEN(params)) {\n            return -1;\n        }\n        \n        return (SPPROTO_HEADER_LEN(params) + payload_mtu);\n    } else {\n        int block_size = BEncryption_cipher_block_size(params.encryption_mode);\n        \n        if (payload_mtu > INT_MAX - (block_size + SPPROTO_HEADER_LEN(params) + block_size)) {\n            return -1;\n        }\n        \n        return (block_size + balign_up((SPPROTO_HEADER_LEN(params) + payload_mtu + 1), block_size));\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/protocol/udpgw_proto.h",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_PROTOCOL_UDPGW_PROTO_H\n#define BADVPN_PROTOCOL_UDPGW_PROTO_H\n\n#include <stdint.h>\n\n#include \"misc/bsize.h\"\n#include \"misc/packed.h\"\n\n#define UDPGW_CLIENT_FLAG_KEEPALIVE (1 << 0)\n#define UDPGW_CLIENT_FLAG_REBIND (1 << 1)\n#define UDPGW_CLIENT_FLAG_DNS (1 << 2)\n#define UDPGW_CLIENT_FLAG_IPV6 (1 << 3)\n\n#ifdef BADVPN_SOCKS_UDP_RELAY\nB_START_PACKED\nstruct socks_udp_header {\n    uint16_t rsv;\n    uint8_t frag;\n    uint8_t atyp;\n} B_PACKED;\nB_END_PACKED\n#endif\n\nB_START_PACKED\nstruct udpgw_header {\n    uint8_t flags;\n    uint16_t conid;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct udpgw_addr_ipv4 {\n    uint32_t addr_ip;\n    uint16_t addr_port;\n} B_PACKED;\nB_END_PACKED\n\nB_START_PACKED\nstruct udpgw_addr_ipv6 {\n    uint8_t addr_ip[16];\n    uint16_t addr_port;\n} B_PACKED;\nB_END_PACKED\n\nstatic int udpgw_compute_mtu (int dgram_mtu)\n{\n    bsize_t bs = bsize_add(\n#ifdef BADVPN_SOCKS_UDP_RELAY\n        bsize_fromsize(sizeof(struct socks_udp_header)),\n#else\n        bsize_fromsize(sizeof(struct udpgw_header)),\n#endif\n        bsize_add(\n            bsize_max(\n                bsize_fromsize(sizeof(struct udpgw_addr_ipv4)),\n                bsize_fromsize(sizeof(struct udpgw_addr_ipv6))\n            ), \n            bsize_fromint(dgram_mtu)\n        )\n    );\n    \n    int s;\n    if (!bsize_toint(bs, &s)) {\n        return -1;\n    }\n    \n    return s;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/socksclient/BSocksClient.c",
    "content": "/**\n * @file BSocksClient.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <string.h>\n\n#include \"misc/byteorder.h\"\n#include \"misc/balloc.h\"\n#include \"base/BLog.h\"\n\n#include \"socksclient/BSocksClient.h\"\n\n#include \"generated/blog_channel_BSocksClient.h\"\n//#include <Foundation/Foundation.h>\n#include <arpa/inet.h>\n\n#define STATE_CONNECTING 1\n#define STATE_SENDING_HELLO 2\n#define STATE_SENT_HELLO 3\n#define STATE_SENDING_PASSWORD 10\n#define STATE_SENT_PASSWORD 11\n#define STATE_SENDING_REQUEST 4\n#define STATE_SENT_REQUEST 5\n#define STATE_RECEIVED_REPLY_HEADER 6\n#define STATE_UP 7\n\nstatic void report_error (BSocksClient *o, int error);\nstatic void init_control_io (BSocksClient *o);\nstatic void free_control_io (BSocksClient *o);\nstatic void init_up_io (BSocksClient *o);\nstatic void free_up_io (BSocksClient *o);\nstatic int reserve_buffer (BSocksClient *o, bsize_t size);\nstatic void start_receive (BSocksClient *o, uint8_t *dest, int total);\nstatic void do_receive (BSocksClient *o);\nstatic void connector_handler (BSocksClient* o, int is_error);\nstatic void connection_handler (BSocksClient* o, int event);\nstatic void recv_handler_done (BSocksClient *o, int data_len);\nstatic void send_handler_done (BSocksClient *o);\nstatic void auth_finished (BSocksClient *p);\n\nvoid report_error (BSocksClient *o, int error)\n{\n    DEBUGERROR(&o->d_err, o->handler(o->user, error))\n}\n\nvoid init_control_io (BSocksClient *o)\n{\n    // init receiving\n    BConnection_RecvAsync_Init(&o->con);\n    o->control.recv_if = BConnection_RecvAsync_GetIf(&o->con);\n    StreamRecvInterface_Receiver_Init(o->control.recv_if, (StreamRecvInterface_handler_done)recv_handler_done, o);\n    \n    // init sending\n    BConnection_SendAsync_Init(&o->con);\n    PacketStreamSender_Init(&o->control.send_sender, BConnection_SendAsync_GetIf(&o->con), INT_MAX, BReactor_PendingGroup(o->reactor));\n    o->control.send_if = PacketStreamSender_GetInput(&o->control.send_sender);\n    PacketPassInterface_Sender_Init(o->control.send_if, (PacketPassInterface_handler_done)send_handler_done, o);\n}\n\nvoid free_control_io (BSocksClient *o)\n{\n    // free sending\n    PacketStreamSender_Free(&o->control.send_sender);\n    BConnection_SendAsync_Free(&o->con);\n    \n    // free receiving\n    BConnection_RecvAsync_Free(&o->con);\n}\n\nvoid init_up_io (BSocksClient *o)\n{\n    // init receiving\n    BConnection_RecvAsync_Init(&o->con);\n    \n    // init sending\n    BConnection_SendAsync_Init(&o->con);\n}\n\nvoid free_up_io (BSocksClient *o)\n{\n    // free sending\n    BConnection_SendAsync_Free(&o->con);\n    \n    // free receiving\n    BConnection_RecvAsync_Free(&o->con);\n}\n\nint reserve_buffer (BSocksClient *o, bsize_t size)\n{\n    if (size.is_overflow) {\n        BLog(BLOG_ERROR, \"size overflow\");\n        return 0;\n    }\n    \n    char *buffer = (char *)BRealloc(o->buffer, size.value);\n    if (!buffer) {\n        BLog(BLOG_ERROR, \"BRealloc failed\");\n        return 0;\n    }\n    \n    o->buffer = buffer;\n    \n    return 1;\n}\n\nvoid start_receive (BSocksClient *o, uint8_t *dest, int total)\n{\n    ASSERT(total > 0)\n    \n    o->control.recv_dest = dest;\n    o->control.recv_len = 0;\n    o->control.recv_total = total;\n    \n    do_receive(o);\n}\n\nvoid do_receive (BSocksClient *o)\n{\n    ASSERT(o->control.recv_len < o->control.recv_total)\n    \n    StreamRecvInterface_Receiver_Recv(o->control.recv_if, o->control.recv_dest + o->control.recv_len, o->control.recv_total - o->control.recv_len);\n}\n\nvoid connector_handler (BSocksClient* o, int is_error)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->state == STATE_CONNECTING)\n    \n    // check connection result\n    if (is_error) {\n        BLog(BLOG_ERROR, \"connection failed\");\n        goto fail0;\n    }\n    \n    // init connection\n    if (!BConnection_Init(&o->con, BConnection_source_connector(&o->connector), o->reactor, o, (BConnection_handler)connection_handler)) {\n        BLog(BLOG_ERROR, \"BConnection_Init failed\");\n        goto fail0;\n    }\n    \n    BLog(BLOG_DEBUG, \"connected\");\n    \n    // init control I/O\n    init_control_io(o);\n    \n    // check number of methods\n    if (o->num_auth_info == 0 || o->num_auth_info > 255) {\n        BLog(BLOG_ERROR, \"invalid number of authentication methods\");\n        goto fail1;\n    }\n    \n    // allocate buffer for sending hello\n    bsize_t size = bsize_add(\n        bsize_fromsize(sizeof(struct socks_client_hello_header)), \n        bsize_mul(\n            bsize_fromsize(o->num_auth_info),\n            bsize_fromsize(sizeof(struct socks_client_hello_method))\n        )\n    );\n    if (!reserve_buffer(o, size)) {\n        goto fail1;\n    }\n    \n    // write hello header\n    struct socks_client_hello_header header;\n    header.ver = hton8(SOCKS_VERSION);\n    header.nmethods = hton8(o->num_auth_info);\n    memcpy(o->buffer, &header, sizeof(header));\n    \n    // write hello methods\n    for (size_t i = 0; i < o->num_auth_info; i++) {\n        struct socks_client_hello_method method;\n        method.method = hton8(o->auth_info[i].auth_type);\n        memcpy(o->buffer + sizeof(header) + i * sizeof(method), &method, sizeof(method));\n    }\n#if SOCKS_DATA_LOG_ENABLE\n    BLog(BLOG_DEBUG, \"tun2socks socks send hello data<len: %d>\", size.value);\n#endif\n    // send\n    PacketPassInterface_Sender_Send(o->control.send_if, (uint8_t *)o->buffer, size.value);\n    \n    // set state\n    o->state = STATE_SENDING_HELLO;\n    \n    return;\n    \nfail1:\n    free_control_io(o);\n    BConnection_Free(&o->con);\nfail0:\n    report_error(o, BSOCKSCLIENT_EVENT_ERROR);\n    return;\n}\n\nvoid connection_handler (BSocksClient* o, int event)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->state != STATE_CONNECTING)\n    \n    if (o->state == STATE_UP && event == BCONNECTION_EVENT_RECVCLOSED) {\n        report_error(o, BSOCKSCLIENT_EVENT_ERROR_CLOSED);\n        return;\n    }\n    \n    report_error(o, BSOCKSCLIENT_EVENT_ERROR);\n    return;\n}\n\nvoid recv_handler_done (BSocksClient *o, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->control.recv_total - o->control.recv_len)\n    \n    DebugObject_Access(&o->d_obj);\n    \n    o->control.recv_len += data_len;\n    \n    if (o->control.recv_len < o->control.recv_total) {\n        do_receive(o);\n        return;\n    }\n#if TCP_DATA_LOG_ENABLE\n    struct in_addr a = {o->dest_addr.ipv4.ip};\n    char *ip = inet_ntoa(a);\n    BLog(BLOG_INFO, \"socks client<%s:%d> recv_handler_done state: %d, data <len: %d>\", ip, o->dest_addr.ipv4.port, o->state, data_len);\n\n#endif\n    \n    switch (o->state) {\n        case STATE_SENT_HELLO: {\n            BLog(BLOG_DEBUG, \"received hello\");\n            \n            struct socks_server_hello imsg;\n            memcpy(&imsg, o->buffer, sizeof(imsg));\n            \n            if (ntoh8(imsg.ver) != SOCKS_VERSION) {\n                BLog(BLOG_NOTICE, \"wrong version\");\n                goto fail;\n            }\n            \n            size_t auth_index;\n            for (auth_index = 0; auth_index < o->num_auth_info; auth_index++) {\n                if (o->auth_info[auth_index].auth_type == ntoh8(imsg.method)) {\n                    break;\n                }\n            }\n            \n            if (auth_index == o->num_auth_info) {\n                BLog(BLOG_NOTICE, \"server didn't accept any authentication method\");\n                goto fail;\n            }\n            \n            const struct BSocksClient_auth_info *ai = &o->auth_info[auth_index];\n            \n            switch (ai->auth_type) {\n                case SOCKS_METHOD_NO_AUTHENTICATION_REQUIRED: {\n                    BLog(BLOG_DEBUG, \"no authentication\");\n                    \n                    auth_finished(o);\n                } break;\n                \n                case SOCKS_METHOD_USERNAME_PASSWORD: {\n                    BLog(BLOG_DEBUG, \"password authentication\");\n                    \n                    if (ai->password.username_len == 0 || ai->password.username_len > 255 ||\n                        ai->password.password_len == 0 || ai->password.password_len > 255\n                    ) {\n                        BLog(BLOG_NOTICE, \"invalid username/password length\");\n                        goto fail;\n                    }\n                    \n                    // allocate password packet\n                    bsize_t size = bsize_fromsize(1 + 1 + ai->password.username_len + 1 + ai->password.password_len);\n                    if (!reserve_buffer(o, size)) {\n                        goto fail;\n                    }\n                    \n                    // write password packet\n                    char *ptr = o->buffer;\n                    *ptr++ = 1;\n                    *ptr++ = ai->password.username_len;\n                    memcpy(ptr, ai->password.username, ai->password.username_len);\n                    ptr += ai->password.username_len;\n                    *ptr++ = ai->password.password_len;\n                    memcpy(ptr, ai->password.password, ai->password.password_len);\n                    ptr += ai->password.password_len;\n                    \n                    // start sending\n                    PacketPassInterface_Sender_Send(o->control.send_if, (uint8_t *)o->buffer, size.value);\n                    \n                    // set state\n                    o->state = STATE_SENDING_PASSWORD;\n                } break;\n                \n                default: ASSERT(0);\n            }\n        } break;\n        \n        case STATE_SENT_REQUEST: {\n            BLog(BLOG_DEBUG, \"received reply header\");\n            \n            struct socks_reply_header imsg;\n            memcpy(&imsg, o->buffer, sizeof(imsg));\n            \n            if (ntoh8(imsg.ver) != SOCKS_VERSION) {\n                BLog(BLOG_NOTICE, \"wrong version\");\n                goto fail;\n            }\n            \n            if (ntoh8(imsg.rep) != SOCKS_REP_SUCCEEDED) {\n                BLog(BLOG_NOTICE, \"reply not successful\");\n                goto fail;\n            }\n            \n            int addr_len;\n            switch (ntoh8(imsg.atyp)) {\n                case SOCKS_ATYP_IPV4:\n                    addr_len = sizeof(struct socks_addr_ipv4);\n                    break;\n                case SOCKS_ATYP_IPV6:\n                    addr_len = sizeof(struct socks_addr_ipv6);\n                    break;\n                default:\n                    BLog(BLOG_NOTICE, \"reply has unknown address type\");\n                    goto fail;\n            }\n            \n            // receive the rest of the reply\n            start_receive(o, (uint8_t *)o->buffer + sizeof(imsg), addr_len);\n            \n            // set state\n            o->state = STATE_RECEIVED_REPLY_HEADER;\n        } break;\n        \n        case STATE_SENT_PASSWORD: {\n            BLog(BLOG_DEBUG, \"received password reply\");\n            \n            if (o->buffer[0] != 1) {\n                BLog(BLOG_NOTICE, \"password reply has unknown version\");\n                goto fail;\n            }\n            \n            if (o->buffer[1] != 0) {\n                BLog(BLOG_NOTICE, \"password reply is negative\");\n                goto fail;\n            }\n            \n            auth_finished(o);\n        } break;\n        \n        case STATE_RECEIVED_REPLY_HEADER: {\n            BLog(BLOG_DEBUG, \"received reply rest\");\n            \n            // free buffer\n            BFree(o->buffer);\n            o->buffer = NULL;\n            \n            // free control I/O\n            free_control_io(o);\n            \n            // init up I/O\n            init_up_io(o);\n            \n            // set state\n            o->state = STATE_UP;\n            \n            // call handler\n            o->handler(o->user, BSOCKSCLIENT_EVENT_UP);\n            return;\n        } break;\n        \n        default:\n            ASSERT(0);\n    }\n    \n    return;\n    \nfail:\n    report_error(o, BSOCKSCLIENT_EVENT_ERROR);\n}\n\nvoid send_handler_done (BSocksClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->buffer)\n#if TCP_DATA_LOG_ENABLE\n    struct in_addr a = {o->dest_addr.ipv4.ip};\n    char *ip = inet_ntoa(a);\n    BLog(BLOG_DEBUG, \"socks client<%s:%d> send_handler_done state: %d\", ip, o->dest_addr.ipv4.port, o->state);\n#endif\n    \n    switch (o->state) {\n        case STATE_SENDING_HELLO: {\n            BLog(BLOG_DEBUG, \"sent hello\");\n            \n            // allocate buffer for receiving hello\n            bsize_t size = bsize_fromsize(sizeof(struct socks_server_hello));\n            if (!reserve_buffer(o, size)) {\n                goto fail;\n            }\n            \n            // receive hello\n            start_receive(o, (uint8_t *)o->buffer, size.value);\n            \n            // set state\n            o->state = STATE_SENT_HELLO;\n        } break;\n        \n        case STATE_SENDING_REQUEST: {\n            BLog(BLOG_DEBUG, \"sent request\");\n            \n            // allocate buffer for receiving reply\n            bsize_t size = bsize_add(\n                bsize_fromsize(sizeof(struct socks_reply_header)),\n                bsize_max(bsize_fromsize(sizeof(struct socks_addr_ipv4)), bsize_fromsize(sizeof(struct socks_addr_ipv6)))\n            );\n            if (!reserve_buffer(o, size)) {\n                goto fail;\n            }\n            \n            // receive reply header\n            start_receive(o, (uint8_t *)o->buffer, sizeof(struct socks_reply_header));\n            \n            // set state\n            o->state = STATE_SENT_REQUEST;\n        } break;\n        \n        case STATE_SENDING_PASSWORD: {\n            BLog(BLOG_DEBUG, \"send password\");\n            \n            // allocate buffer for receiving reply\n            bsize_t size = bsize_fromsize(2);\n            if (!reserve_buffer(o, size)) {\n                goto fail;\n            }\n            \n            // receive reply header\n            start_receive(o, (uint8_t *)o->buffer, size.value);\n            \n            // set state\n            o->state = STATE_SENT_PASSWORD;\n        } break;\n        \n        default:\n            ASSERT(0);\n    }\n    \n    return;\n    \nfail:\n    report_error(o, BSOCKSCLIENT_EVENT_ERROR);\n}\n\nvoid auth_finished (BSocksClient *o)\n{\n    // allocate request buffer\n    bsize_t size = bsize_fromsize(sizeof(struct socks_request_header));\n    switch (o->dest_addr.type) {\n        case BADDR_TYPE_IPV4: size = bsize_add(size, bsize_fromsize(sizeof(struct socks_addr_ipv4))); break;\n        case BADDR_TYPE_IPV6: size = bsize_add(size, bsize_fromsize(sizeof(struct socks_addr_ipv6))); break;\n    }\n    if (!reserve_buffer(o, size)) {\n        report_error(o, BSOCKSCLIENT_EVENT_ERROR);\n        return;\n    }\n    \n    // write request\n    struct socks_request_header header;\n    header.ver = hton8(SOCKS_VERSION);\n    header.cmd = hton8(SOCKS_CMD_CONNECT);\n    header.rsv = hton8(0);\n    switch (o->dest_addr.type) {\n        case BADDR_TYPE_IPV4: {\n            header.atyp = hton8(SOCKS_ATYP_IPV4);\n            struct socks_addr_ipv4 addr;\n            addr.addr = o->dest_addr.ipv4.ip;\n            addr.port = o->dest_addr.ipv4.port;\n            memcpy(o->buffer + sizeof(header), &addr, sizeof(addr));\n        } break;\n        case BADDR_TYPE_IPV6: {\n            header.atyp = hton8(SOCKS_ATYP_IPV6);\n            struct socks_addr_ipv6 addr;\n            memcpy(addr.addr, o->dest_addr.ipv6.ip, sizeof(o->dest_addr.ipv6.ip));\n            addr.port = o->dest_addr.ipv6.port;\n            memcpy(o->buffer + sizeof(header), &addr, sizeof(addr));\n        } break;\n        default:\n            ASSERT(0);\n    }\n    memcpy(o->buffer, &header, sizeof(header));\n#if SOCKS_DATA_LOG_ENABLE\n    BLog(BLOG_DEBUG, \"tun2socks socks send request data<len: %d>\", size.value);\n#endif\n    // send request\n    PacketPassInterface_Sender_Send(o->control.send_if, (uint8_t *)o->buffer, size.value);\n    \n    // set state\n    o->state = STATE_SENDING_REQUEST;\n}\n\nstruct BSocksClient_auth_info BSocksClient_auth_none (void)\n{\n    struct BSocksClient_auth_info info;\n    info.auth_type = SOCKS_METHOD_NO_AUTHENTICATION_REQUIRED;\n    return info;\n}\n\nstruct BSocksClient_auth_info BSocksClient_auth_password (const char *username, size_t username_len, const char *password, size_t password_len)\n{\n    struct BSocksClient_auth_info info;\n    info.auth_type = SOCKS_METHOD_USERNAME_PASSWORD;\n    info.password.username = username;\n    info.password.username_len = username_len;\n    info.password.password = password;\n    info.password.password_len = password_len;\n    return info;\n}\n\nint BSocksClient_Init (BSocksClient *o,\n                       BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info,\n                       BAddr dest_addr, BSocksClient_handler handler, void *user, BReactor *reactor)\n{\n    ASSERT(!BAddr_IsInvalid(&server_addr))\n    ASSERT(dest_addr.type == BADDR_TYPE_IPV4 || dest_addr.type == BADDR_TYPE_IPV6)\n#ifndef NDEBUG\n    for (size_t i = 0; i < num_auth_info; i++) {\n        ASSERT(auth_info[i].auth_type == SOCKS_METHOD_NO_AUTHENTICATION_REQUIRED ||\n               auth_info[i].auth_type == SOCKS_METHOD_USERNAME_PASSWORD)\n    }\n#endif\n    \n    // init arguments\n    o->auth_info = auth_info;\n    o->num_auth_info = num_auth_info;\n    o->dest_addr = dest_addr;\n    o->handler = handler;\n    o->user = user;\n    o->reactor = reactor;\n    \n    // set no buffer\n    o->buffer = NULL;\n    \n    // init connector\n    if (!BConnector_Init(&o->connector, server_addr, o->reactor, o, (BConnector_handler)connector_handler)) {\n        BLog(BLOG_ERROR, \"BConnector_Init failed\");\n        goto fail0;\n    }\n    \n    // set state\n    o->state = STATE_CONNECTING;\n    \n    DebugError_Init(&o->d_err, BReactor_PendingGroup(o->reactor));\n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail0:\n    return 0;\n}\n\nvoid BSocksClient_Free (BSocksClient *o)\n{\n    DebugObject_Free(&o->d_obj);\n    DebugError_Free(&o->d_err);\n    \n    if (o->state != STATE_CONNECTING) {\n        if (o->state == STATE_UP) {\n            // free up I/O\n            free_up_io(o);\n        } else {\n            // free control I/O\n            free_control_io(o);\n        }\n        \n        // free connection\n        BConnection_Free(&o->con);\n    }\n    \n    // free connector\n    BConnector_Free(&o->connector);\n    \n    // free buffer\n    if (o->buffer) {\n        BFree(o->buffer);\n    }\n}\n\nStreamPassInterface * BSocksClient_GetSendInterface (BSocksClient *o)\n{\n    ASSERT(o->state == STATE_UP)\n    DebugObject_Access(&o->d_obj);\n    \n    return BConnection_SendAsync_GetIf(&o->con);\n}\n\nStreamRecvInterface * BSocksClient_GetRecvInterface (BSocksClient *o)\n{\n    ASSERT(o->state == STATE_UP)\n    DebugObject_Access(&o->d_obj);\n    \n    return BConnection_RecvAsync_GetIf(&o->con);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/socksclient/BSocksClient.h",
    "content": "/**\n * @file BSocksClient.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * SOCKS5 client. TCP only, no authentication.\n */\n\n#ifndef BADVPN_SOCKS_BSOCKSCLIENT_H\n#define BADVPN_SOCKS_BSOCKSCLIENT_H\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/debugerror.h\"\n#include \"misc/socks_proto.h\"\n#include \"misc/packed.h\"\n#include \"base/DebugObject.h\"\n#include \"system/BConnection.h\"\n#include \"flow/PacketStreamSender.h\"\n\n#define BSOCKSCLIENT_EVENT_ERROR 1\n#define BSOCKSCLIENT_EVENT_UP 2\n#define BSOCKSCLIENT_EVENT_ERROR_CLOSED 3\n\n/**\n * Handler for events generated by the SOCKS client.\n * \n * @param user as in {@link BSocksClient_Init}\n * @param event event type. One of BSOCKSCLIENT_EVENT_ERROR, BSOCKSCLIENT_EVENT_UP\n *              and BSOCKSCLIENT_EVENT_ERROR_CLOSED.\n *              If event is BSOCKSCLIENT_EVENT_UP, the object was previously in down\n *              state and has transitioned to up state; I/O can be done from this point on.\n *              If event is BSOCKSCLIENT_EVENT_ERROR or BSOCKSCLIENT_EVENT_ERROR_CLOSED,\n *              the object must be freed from within the job closure of this handler,\n *              and no further I/O must be attempted.\n */\ntypedef void (*BSocksClient_handler) (void *user, int event);\n\nstruct BSocksClient_auth_info {\n    int auth_type;\n    union {\n        struct {\n            const char *username;\n            size_t username_len;\n            const char *password;\n            size_t password_len;\n        } password;\n    };\n};\n\ntypedef struct {\n    const struct BSocksClient_auth_info *auth_info;\n    size_t num_auth_info;\n    BAddr dest_addr;\n    BSocksClient_handler handler;\n    void *user;\n    BReactor *reactor;\n    int state;\n    char *buffer;\n    BConnector connector;\n    BConnection con;\n    union {\n        struct {\n            PacketPassInterface *send_if;\n            PacketStreamSender send_sender;\n            StreamRecvInterface *recv_if;\n            uint8_t *recv_dest;\n            int recv_len;\n            int recv_total;\n        } control;\n    };\n    DebugError d_err;\n    DebugObject d_obj;\n} BSocksClient;\n\nstruct BSocksClient_auth_info BSocksClient_auth_none (void);\nstruct BSocksClient_auth_info BSocksClient_auth_password (const char *username, size_t username_len, const char *password, size_t password_len);\n\n/**\n * Initializes the object.\n * The object is initialized in down state. The object must transition to up\n * state before the user may begin any I/O.\n * \n * @param o the object\n * @param server_addr SOCKS5 server address\n * @param dest_addr remote address\n * @param handler handler for up and error events\n * @param user value passed to handler\n * @param reactor reactor we live in\n * @return 1 on success, 0 on failure\n */\nint BSocksClient_Init (BSocksClient *o,\n                       BAddr server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info,\n                       BAddr dest_addr, BSocksClient_handler handler, void *user, BReactor *reactor) WARN_UNUSED;\n\n/**\n * Frees the object.\n * \n * @param o the object\n */\nvoid BSocksClient_Free (BSocksClient *o);\n\n/**\n * Returns the send interface.\n * The object must be in up state.\n * \n * @param o the object\n * @return send interface\n */\nStreamPassInterface * BSocksClient_GetSendInterface (BSocksClient *o);\n\n/**\n * Returns the receive interface.\n * The object must be in up state.\n * \n * @param o the object\n * @return receive interface\n */\nStreamRecvInterface * BSocksClient_GetRecvInterface (BSocksClient *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/BAVL.h",
    "content": "/**\n * @file BAVL.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * AVL tree.\n */\n\n#ifndef BADVPN_STRUCTURE_BAVL_H\n#define BADVPN_STRUCTURE_BAVL_H\n\n//#define BAVL_DEBUG\n\n#include <stdint.h>\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n\n/**\n * Handler function called by tree algorithms to compare two values.\n * For any two values, the comparator must always return the same result.\n * The <= relation defined by the comparator must be a total order.\n * Values are obtained like that:\n *   - The value of a node in the tree, or a node that is being inserted is:\n *     (uint8_t *)node + offset.\n *   - The value being looked up is the same as given to the lookup function.\n * \n * @param user as in {@link BAVL_Init}\n * @param val1 first value\n * @param val2 second value\n * @return -1 if val1 < val2, 0 if val1 = val2, 1 if val1 > val2\n */\ntypedef int (*BAVL_comparator) (void *user, void *val1, void *val2);\n\nstruct BAVLNode;\n\n/**\n * AVL tree.\n */\ntypedef struct {\n    int offset;\n    BAVL_comparator comparator;\n    void *user;\n    struct BAVLNode *root;\n} BAVL;\n\n/**\n * AVL tree node.\n */\ntypedef struct BAVLNode {\n    struct BAVLNode *parent;\n    struct BAVLNode *link[2];\n    int8_t balance;\n#ifdef BAVL_COUNT\n    uint64_t count;\n#endif\n} BAVLNode;\n\n/**\n * Initializes the tree.\n * \n * @param o tree to initialize\n * @param offset offset of a value from its node\n * @param comparator value comparator handler function\n * @param user value to pass to comparator\n */\nstatic void BAVL_Init (BAVL *o, int offset, BAVL_comparator comparator, void *user);\n\n/**\n * Inserts a node into the tree.\n * Must not be called from comparator.\n * \n * @param o the tree\n * @param node uninitialized node to insert. Must have a valid value (its value\n *             may be passed to the comparator during insertion).\n * @param ref if not NULL, will return (regardless if insertion succeeded):\n *              - the greatest node lesser than the inserted value, or (not in order)\n *              - the smallest node greater than the inserted value, or\n *              - NULL meaning there were no nodes in the tree.\n * @param 1 on success, 0 if an element with an equal value is already in the tree\n */\nstatic int BAVL_Insert (BAVL *o, BAVLNode *node, BAVLNode **ref);\n\n/**\n * Removes a node from the tree.\n * Must not be called from comparator.\n * \n * @param o the tree\n * @param node node to remove\n */\nstatic void BAVL_Remove (BAVL *o, BAVLNode *node);\n\n/**\n * Checks if the tree is empty.\n * Must not be called from comparator.\n * \n * @param o the tree\n * @return 1 if empty, 0 if not\n */\nstatic int BAVL_IsEmpty (const BAVL *o);\n\n/**\n * Looks for a value in the tree.\n * Must not be called from comparator.\n * \n * @param o the tree\n * @param val value to look for\n * @return If a node is in the thee with an equal value, that node.\n *         Else if the tree is not empty:\n *           - the greatest node lesser than the given value, or (not in order)\n *           - the smallest node greater than the given value.\n *         NULL if the tree is empty.\n */\nstatic BAVLNode * BAVL_Lookup (const BAVL *o, void *val);\n\n/**\n * Looks for a value in the tree.\n * Must not be called from comparator.\n * \n * @param o the tree\n * @param val value to look for\n * @return If a node is in the thee with an equal value, that node.\n *         Else NULL.\n */\nstatic BAVLNode * BAVL_LookupExact (const BAVL *o, void *val);\n\n/**\n * Returns the smallest node in the tree, or NULL if the tree is empty.\n * \n * @param o the tree\n * @return smallest node or NULL\n */\nstatic BAVLNode * BAVL_GetFirst (const BAVL *o);\n\n/**\n * Returns the greatest node in the tree, or NULL if the tree is empty.\n * \n * @param o the tree\n * @return greatest node or NULL\n */\nstatic BAVLNode * BAVL_GetLast (const BAVL *o);\n\n/**\n * Returns the node that follows the given node, or NULL if it's the\n * last node.\n * \n * @param o the tree\n * @param n node\n * @return next node, or NULL\n */\nstatic BAVLNode * BAVL_GetNext (const BAVL *o, BAVLNode *n);\n\n/**\n * Returns the node that precedes the given node, or NULL if it's the\n * first node.\n * \n * @param o the tree\n * @param n node\n * @return previous node, or NULL\n */\nstatic BAVLNode * BAVL_GetPrev (const BAVL *o, BAVLNode *n);\n\n#ifdef BAVL_COUNT\nstatic uint64_t BAVL_Count (const BAVL *o);\nstatic uint64_t BAVL_IndexOf (const BAVL *o, BAVLNode *n);\nstatic BAVLNode * BAVL_GetAt (const BAVL *o, uint64_t index);\n#endif\n\nstatic void BAVL_Verify (BAVL *o);\n\n#define BAVL_MAX(_a, _b) ((_a) > (_b) ? (_a) : (_b))\n#define BAVL_OPTNEG(_a, _neg) ((_neg) ? -(_a) : (_a))\n\nstatic void * _BAVL_node_value (const BAVL *o, BAVLNode *n)\n{\n    return ((uint8_t *)n + o->offset);\n}\n\nstatic int _BAVL_compare_values (const BAVL *o, void *v1, void *v2)\n{\n    int res = o->comparator(o->user, v1, v2);\n    \n    ASSERT(res == -1 || res == 0 || res == 1)\n    \n    return res;\n}\n\nstatic int _BAVL_compare_nodes (BAVL *o, BAVLNode *n1, BAVLNode *n2)\n{\n    return _BAVL_compare_values(o, _BAVL_node_value(o, n1), _BAVL_node_value(o, n2));\n}\n\n#ifdef BAVL_AUTO_VERIFY\n#define BAVL_ASSERT(_h) BAVL_Verify((_h));\n#else\n#define BAVL_ASSERT(_h)\n#endif\n\nstatic int _BAVL_assert_recurser (BAVL *o, BAVLNode *n)\n{\n    ASSERT_FORCE(n->balance >= -1)\n    ASSERT_FORCE(n->balance <= 1)\n    \n    int height_left = 0;\n    int height_right = 0;\n#ifdef BAVL_COUNT\n    uint64_t count_left = 0;\n    uint64_t count_right = 0;\n#endif\n    \n    // check left subtree\n    if (n->link[0]) {\n        // check parent link\n        ASSERT_FORCE(n->link[0]->parent == n)\n        // check binary search tree\n        ASSERT_FORCE(_BAVL_compare_nodes(o, n->link[0], n) == -1)\n        // recursively calculate height\n        height_left = _BAVL_assert_recurser(o, n->link[0]);\n#ifdef BAVL_COUNT\n        count_left = n->link[0]->count;\n#endif\n    }\n    \n    // check right subtree\n    if (n->link[1]) {\n        // check parent link\n        ASSERT_FORCE(n->link[1]->parent == n)\n        // check binary search tree\n        ASSERT_FORCE(_BAVL_compare_nodes(o, n->link[1], n) == 1)\n        // recursively calculate height\n        height_right = _BAVL_assert_recurser(o, n->link[1]);\n#ifdef BAVL_COUNT\n        count_right = n->link[1]->count;\n#endif\n    }\n    \n    // check balance factor\n    ASSERT_FORCE(n->balance == height_right - height_left)\n    \n#ifdef BAVL_COUNT\n    // check count\n    ASSERT_FORCE(n->count == 1 + count_left + count_right)\n#endif\n    \n    return (BAVL_MAX(height_left, height_right) + 1);\n}\n\n#ifdef BAVL_COUNT\nstatic void _BAVL_update_count_from_children (BAVLNode *n)\n{\n    n->count = 1 + (n->link[0] ? n->link[0]->count : 0) + (n->link[1] ? n->link[1]->count : 0);\n}\n#endif\n\nstatic void _BAVL_rotate (BAVL *tree, BAVLNode *r, uint8_t dir)\n{\n    BAVLNode *nr = r->link[!dir];\n    \n    r->link[!dir] = nr->link[dir];\n    if (r->link[!dir]) {\n        r->link[!dir]->parent = r;\n    }\n    nr->link[dir] = r;\n    nr->parent = r->parent;\n    if (nr->parent) {\n        nr->parent->link[r == r->parent->link[1]] = nr;\n    } else {\n        tree->root = nr;\n    }\n    r->parent = nr;\n    \n#ifdef BAVL_COUNT\n    // update counts\n    _BAVL_update_count_from_children(r); // first r!\n    _BAVL_update_count_from_children(nr);\n#endif\n}\n\nstatic BAVLNode * _BAVL_subtree_max (BAVLNode *n)\n{\n    ASSERT(n)\n    while (n->link[1]) {\n        n = n->link[1];\n    }\n    return n;\n}\n\nstatic void _BAVL_replace_subtree (BAVL *tree, BAVLNode *dest, BAVLNode *n)\n{\n    ASSERT(dest)\n    \n    if (dest->parent) {\n        dest->parent->link[dest == dest->parent->link[1]] = n;\n    } else {\n        tree->root = n;\n    }\n    if (n) {\n        n->parent = dest->parent;\n    }\n    \n#ifdef BAVL_COUNT\n    // update counts\n    for (BAVLNode *c = dest->parent; c; c = c->parent) {\n        ASSERT(c->count >= dest->count)\n        c->count -= dest->count;\n        if (n) {\n            ASSERT(n->count <= UINT64_MAX - c->count)\n            c->count += n->count;\n        }\n    }\n#endif\n}\n\nstatic void _BAVL_swap_nodes (BAVL *tree, BAVLNode *n1, BAVLNode *n2)\n{\n    if (n2->parent == n1 || n1->parent == n2) {\n        // when the nodes are directly connected we need special handling\n        // make sure n1 is above n2\n        if (n1->parent == n2) {\n            BAVLNode *t = n1;\n            n1 = n2;\n            n2 = t;\n        }\n        \n        uint8_t side = (n2 == n1->link[1]);\n        BAVLNode *c = n1->link[!side];\n        \n        if (n1->link[0] = n2->link[0]) {\n            n1->link[0]->parent = n1;\n        }\n        if (n1->link[1] = n2->link[1]) {\n            n1->link[1]->parent = n1;\n        }\n        \n        if (n2->parent = n1->parent) {\n            n2->parent->link[n1 == n1->parent->link[1]] = n2;\n        } else {\n            tree->root = n2;\n        }\n        \n        n2->link[side] = n1;\n        n1->parent = n2;\n        if (n2->link[!side] = c) {\n            c->parent = n2;\n        }\n    } else {\n        BAVLNode *temp;\n        \n        // swap parents\n        temp = n1->parent;\n        if (n1->parent = n2->parent) {\n            n1->parent->link[n2 == n2->parent->link[1]] = n1;\n        } else {\n            tree->root = n1;\n        }\n        if (n2->parent = temp) {\n            n2->parent->link[n1 == temp->link[1]] = n2;\n        } else {\n            tree->root = n2;\n        }\n        \n        // swap left children\n        temp = n1->link[0];\n        if (n1->link[0] = n2->link[0]) {\n            n1->link[0]->parent = n1;\n        }\n        if (n2->link[0] = temp) {\n            n2->link[0]->parent = n2;\n        }\n        \n        // swap right children\n        temp = n1->link[1];\n        if (n1->link[1] = n2->link[1]) {\n            n1->link[1]->parent = n1;\n        }\n        if (n2->link[1] = temp) {\n            n2->link[1]->parent = n2;\n        }\n    }\n    \n    // swap balance factors\n    int8_t b = n1->balance;\n    n1->balance = n2->balance;\n    n2->balance = b;\n    \n#ifdef BAVL_COUNT\n    // swap counts\n    uint64_t c = n1->count;\n    n1->count = n2->count;\n    n2->count = c;\n#endif\n}\n\nstatic void _BAVL_rebalance (BAVL *o, BAVLNode *node, uint8_t side, int8_t deltac)\n{\n    ASSERT(side == 0 || side == 1)\n    ASSERT(deltac >= -1 && deltac <= 1)\n    ASSERT(node->balance >= -1 && node->balance <= 1)\n    \n    // if no subtree changed its height, no more rebalancing is needed\n    if (deltac == 0) {\n        return;\n    }\n    \n    // calculate how much our height changed\n    int8_t delta = BAVL_MAX(deltac, BAVL_OPTNEG(node->balance, side)) - BAVL_MAX(0, BAVL_OPTNEG(node->balance, side));\n    ASSERT(delta >= -1 && delta <= 1)\n    \n    // update our balance factor\n    node->balance -= BAVL_OPTNEG(deltac, side);\n    \n    BAVLNode *child;\n    BAVLNode *gchild;\n    \n    // perform transformations if the balance factor is wrong\n    if (node->balance == 2 || node->balance == -2) {\n        uint8_t bside;\n        int8_t bsidef;\n        if (node->balance == 2) {\n            bside = 1;\n            bsidef = 1;\n        } else {\n            bside = 0;\n            bsidef = -1;\n        }\n        \n        ASSERT(node->link[bside])\n        child = node->link[bside];\n        switch (child->balance * bsidef) {\n            case 1:\n                _BAVL_rotate(o, node, !bside);\n                node->balance = 0;\n                child->balance = 0;\n                node = child;\n                delta -= 1;\n                break;\n            case 0:\n                _BAVL_rotate(o, node, !bside);\n                node->balance = 1 * bsidef;\n                child->balance = -1 * bsidef;\n                node = child;\n                break;\n            case -1:\n                ASSERT(child->link[!bside])\n                gchild = child->link[!bside];\n                _BAVL_rotate(o, child, bside);\n                _BAVL_rotate(o, node, !bside);\n                node->balance = -BAVL_MAX(0, gchild->balance * bsidef) * bsidef;\n                child->balance = BAVL_MAX(0, -gchild->balance * bsidef) * bsidef;\n                gchild->balance = 0;\n                node = gchild;\n                delta -= 1;\n                break;\n            default:\n                ASSERT(0);\n        }\n    }\n    \n    ASSERT(delta >= -1 && delta <= 1)\n    // Transformations above preserve this. Proof:\n    //     - if a child subtree gained 1 height and rebalancing was needed,\n    //       it was the heavier subtree. Then delta was was originally 1, because\n    //       the heaviest subtree gained one height. If the transformation reduces\n    //       delta by one, it becomes 0.\n    //     - if a child subtree lost 1 height and rebalancing was needed, it\n    //       was the lighter subtree. Then delta was originally 0, because\n    //       the height of the heaviest subtree was unchanged. If the transformation\n    //       reduces delta by one, it becomes -1.\n    \n    if (node->parent) {\n        _BAVL_rebalance(o, node->parent, node == node->parent->link[1], delta);\n    }\n}\n\nvoid BAVL_Init (BAVL *o, int offset, BAVL_comparator comparator, void *user)\n{\n    o->offset = offset;\n    o->comparator = comparator;\n    o->user = user;\n    o->root = NULL;\n    \n    BAVL_ASSERT(o)\n}\n\nint BAVL_Insert (BAVL *o, BAVLNode *node, BAVLNode **ref)\n{\n    // insert to root?\n    if (!o->root) {\n        o->root = node;\n        node->parent = NULL;\n        node->link[0] = NULL;\n        node->link[1] = NULL;\n        node->balance = 0;\n#ifdef BAVL_COUNT\n        node->count = 1;\n#endif\n        \n        BAVL_ASSERT(o)\n        \n        if (ref) {\n            *ref = NULL;\n        }\n        return 1;\n    }\n    \n    // find node to insert to\n    BAVLNode *c = o->root;\n    int side;\n    while (1) {\n        // compare\n        int comp = _BAVL_compare_nodes(o, node, c);\n        \n        // have we found a node that compares equal?\n        if (comp == 0) {\n            if (ref) {\n                *ref = c;\n            }\n            return 0;\n        }\n        \n        side = (comp == 1);\n        \n        // have we reached a leaf?\n        if (!c->link[side]) {\n            break;\n        }\n        \n        c = c->link[side];\n    }\n    \n    // insert\n    c->link[side] = node;\n    node->parent = c;\n    node->link[0] = NULL;\n    node->link[1] = NULL;\n    node->balance = 0;\n#ifdef BAVL_COUNT\n    node->count = 1;\n#endif\n    \n#ifdef BAVL_COUNT\n    // update counts\n    for (BAVLNode *p = c; p; p = p->parent) {\n        ASSERT(p->count < UINT64_MAX)\n        p->count++;\n    }\n#endif\n    \n    // rebalance\n    _BAVL_rebalance(o, c, side, 1);\n    \n    BAVL_ASSERT(o)\n    \n    if (ref) {\n        *ref = c;\n    }\n    return 1;\n}\n\nvoid BAVL_Remove (BAVL *o, BAVLNode *node)\n{\n    // if we have both subtrees, swap the node and the largest node\n    // in the left subtree, so we have at most one subtree\n    if (node->link[0] && node->link[1]) {\n        // find the largest node in the left subtree\n        BAVLNode *max = _BAVL_subtree_max(node->link[0]);\n        // swap the nodes\n        _BAVL_swap_nodes(o, node, max);\n    }\n    \n    // have at most one child now\n    ASSERT(!(node->link[0] && node->link[1]))\n    \n    BAVLNode *parent = node->parent;\n    BAVLNode *child = (node->link[0] ? node->link[0] : node->link[1]);\n    \n    if (parent) {\n        // remember on which side node is\n        int side = (node == parent->link[1]);\n        // replace node with child\n        _BAVL_replace_subtree(o, node, child);\n        // rebalance\n        _BAVL_rebalance(o, parent, side, -1);\n    } else {\n        // replace node with child\n        _BAVL_replace_subtree(o, node, child);\n    }\n    \n    BAVL_ASSERT(o)\n}\n\nint BAVL_IsEmpty (const BAVL *o)\n{\n    return (!o->root);\n}\n\nBAVLNode * BAVL_Lookup (const BAVL *o, void *val)\n{\n    if (!o->root) {\n        return NULL;\n    }\n    \n    BAVLNode *c = o->root;\n    while (1) {\n        // compare\n        int comp = _BAVL_compare_values(o, val, _BAVL_node_value(o, c));\n        \n        // have we found a node that compares equal?\n        if (comp == 0) {\n            return c;\n        }\n        \n        int side = (comp == 1);\n        \n        // have we reached a leaf?\n        if (!c->link[side]) {\n            return c;\n        }\n        \n        c = c->link[side];\n    }\n}\n\nBAVLNode * BAVL_LookupExact (const BAVL *o, void *val)\n{\n    if (!o->root) {\n        return NULL;\n    }\n    \n    BAVLNode *c = o->root;\n    while (1) {\n        // compare\n        int comp = _BAVL_compare_values(o, val, _BAVL_node_value(o, c));\n        \n        // have we found a node that compares equal?\n        if (comp == 0) {\n            return c;\n        }\n        \n        int side = (comp == 1);\n        \n        // have we reached a leaf?\n        if (!c->link[side]) {\n            return NULL;\n        }\n        \n        c = c->link[side];\n    }\n}\n\nBAVLNode * BAVL_GetFirst (const BAVL *o)\n{\n    if (!o->root) {\n        return NULL;\n    }\n    \n    BAVLNode *n = o->root;\n    while (n->link[0]) {\n        n = n->link[0];\n    }\n    \n    return n;\n}\n\nBAVLNode * BAVL_GetLast (const BAVL *o)\n{\n    if (!o->root) {\n        return NULL;\n    }\n    \n    BAVLNode *n = o->root;\n    while (n->link[1]) {\n        n = n->link[1];\n    }\n    \n    return n;\n}\n\nBAVLNode * BAVL_GetNext (const BAVL *o, BAVLNode *n)\n{\n    if (n->link[1]) {\n        n = n->link[1];\n        while (n->link[0]) {\n            n = n->link[0];\n        }\n    } else {\n        while (n->parent && n == n->parent->link[1]) {\n            n = n->parent;\n        }\n        n = n->parent;\n    }\n    \n    return n;\n}\n\nBAVLNode * BAVL_GetPrev (const BAVL *o, BAVLNode *n)\n{\n    if (n->link[0]) {\n        n = n->link[0];\n        while (n->link[1]) {\n            n = n->link[1];\n        }\n    } else {\n        while (n->parent && n == n->parent->link[0]) {\n            n = n->parent;\n        }\n        n = n->parent;\n    }\n    \n    return n;\n}\n\n#ifdef BAVL_COUNT\n\nstatic uint64_t BAVL_Count (const BAVL *o)\n{\n    return (o->root ? o->root->count : 0);\n}\n\nstatic uint64_t BAVL_IndexOf (const BAVL *o, BAVLNode *n)\n{\n    uint64_t index = (n->link[0] ? n->link[0]->count : 0);\n    \n    for (BAVLNode *c = n; c->parent; c = c->parent) {\n        if (c == c->parent->link[1]) {\n            ASSERT(c->parent->count > c->count)\n            ASSERT(c->parent->count - c->count <= UINT64_MAX - index)\n            index += c->parent->count - c->count;\n        }\n    }\n    \n    return index;\n}\n\nstatic BAVLNode * BAVL_GetAt (const BAVL *o, uint64_t index)\n{\n    if (index >= BAVL_Count(o)) {\n        return NULL;\n    }\n    \n    BAVLNode *c = o->root;\n    \n    while (1) {\n        ASSERT(c)\n        ASSERT(index < c->count)\n        \n        uint64_t left_count = (c->link[0] ? c->link[0]->count : 0);\n        \n        if (index == left_count) {\n            return c;\n        }\n        \n        if (index < left_count) {\n            c = c->link[0];\n        } else {\n            c = c->link[1];\n            index -= left_count + 1;\n        }\n    }\n}\n\n#endif\n\nstatic void BAVL_Verify (BAVL *o)\n{\n    if (o->root) {\n        ASSERT(!o->root->parent)\n        _BAVL_assert_recurser(o, o->root);\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CAvl.h",
    "content": "/**\n * @file CAvl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_CAVL_H\n#define BADVPN_CAVL_H\n\n#include \"misc/debug.h\"\n#include \"misc/merge.h\"\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CAvl_decl.h",
    "content": "/**\n * @file CAvl_decl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"CAvl_header.h\"\n\ntypedef struct {\n    CAvlLink root;\n} CAvl;\n\ntypedef struct {\n    CAvlEntry *ptr;\n    CAvlLink link;\n} CAvlRef;\n\nstatic int CAvlIsNullRef (CAvlRef node);\nstatic int CAvlIsValidRef (CAvlRef node);\nstatic CAvlRef CAvlDeref (CAvlArg arg, CAvlLink link);\n\nstatic void CAvl_Init (CAvl *o);\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\nstatic int CAvl_Insert (CAvl *o, CAvlArg arg, CAvlRef node, CAvlRef *out_ref);\n#else\nstatic void CAvl_InsertAt (CAvl *o, CAvlArg arg, CAvlRef node, CAvlCount index);\n#endif\nstatic void CAvl_Remove (CAvl *o, CAvlArg arg, CAvlRef node);\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES && !CAVL_PARAM_FEATURE_NOKEYS\nstatic CAvlRef CAvl_Lookup (const CAvl *o, CAvlArg arg, CAvlKey key);\nstatic CAvlRef CAvl_LookupExact (const CAvl *o, CAvlArg arg, CAvlKey key);\nstatic CAvlRef CAvl_GetFirstGreater (const CAvl *o, CAvlArg arg, CAvlKey key);\nstatic CAvlRef CAvl_GetLastLesser (const CAvl *o, CAvlArg arg, CAvlKey key);\nstatic CAvlRef CAvl_GetFirstGreaterEqual (const CAvl *o, CAvlArg arg, CAvlKey key);\nstatic CAvlRef CAvl_GetLastLesserEqual (const CAvl *o, CAvlArg arg, CAvlKey key);\n#endif\nstatic CAvlRef CAvl_GetFirst (const CAvl *o, CAvlArg arg);\nstatic CAvlRef CAvl_GetLast (const CAvl *o, CAvlArg arg);\nstatic CAvlRef CAvl_GetNext (const CAvl *o, CAvlArg arg, CAvlRef node);\nstatic CAvlRef CAvl_GetPrev (const CAvl *o, CAvlArg arg, CAvlRef node);\nstatic int CAvl_IsEmpty (const CAvl *o);\nstatic void CAvl_Verify (const CAvl *o, CAvlArg arg);\n#if CAVL_PARAM_FEATURE_COUNTS\nstatic CAvlCount CAvl_Count (const CAvl *o, CAvlArg arg);\nstatic CAvlCount CAvl_IndexOf (const CAvl *o, CAvlArg arg, CAvlRef node);\nstatic CAvlRef CAvl_GetAt (const CAvl *o, CAvlArg arg, CAvlCount index);\n#endif\n#if CAVL_PARAM_FEATURE_ASSOC\nstatic CAvlAssoc CAvl_AssocSum (const CAvl *o, CAvlArg arg);\nstatic CAvlAssoc CAvl_ExclusiveAssocPrefixSum (const CAvl *o, CAvlArg arg, CAvlRef node);\nstatic CAvlRef CAvl_FindLastExclusiveAssocPrefixSumLesserEqual (const CAvl *o, CAvlArg arg, CAvlAssoc sum, int (*sum_less) (void *, CAvlAssoc, CAvlAssoc), void *user);\n#endif\n\n#include \"CAvl_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CAvl_footer.h",
    "content": "/**\n * @file CAvl_footer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#undef CAVL_PARAM_NAME\n#undef CAVL_PARAM_FEATURE_COUNTS\n#undef CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\n#undef CAVL_PARAM_FEATURE_NOKEYS\n#undef CAVL_PARAM_FEATURE_ASSOC\n#undef CAVL_PARAM_TYPE_ENTRY\n#undef CAVL_PARAM_TYPE_LINK\n#undef CAVL_PARAM_TYPE_KEY\n#undef CAVL_PARAM_TYPE_ARG\n#undef CAVL_PARAM_TYPE_COUNT\n#undef CAVL_PARAM_TYPE_ASSOC\n#undef CAVL_PARAM_VALUE_COUNT_MAX\n#undef CAVL_PARAM_VALUE_NULL\n#undef CAVL_PARAM_VALUE_ASSOC_ZERO\n#undef CAVL_PARAM_FUN_DEREF\n#undef CAVL_PARAM_FUN_COMPARE_ENTRIES\n#undef CAVL_PARAM_FUN_COMPARE_KEY_ENTRY\n#undef CAVL_PARAM_FUN_ASSOC_VALUE\n#undef CAVL_PARAM_FUN_ASSOC_OPER\n#undef CAVL_PARAM_MEMBER_CHILD\n#undef CAVL_PARAM_MEMBER_BALANCE\n#undef CAVL_PARAM_MEMBER_PARENT\n#undef CAVL_PARAM_MEMBER_COUNT\n#undef CAVL_PARAM_MEMBER_ASSOC\n\n#undef CAvl\n#undef CAvlEntry\n#undef CAvlLink\n#undef CAvlRef\n#undef CAvlArg\n#undef CAvlKey\n#undef CAvlCount\n#undef CAvlAssoc\n\n#undef CAvlIsNullRef\n#undef CAvlIsValidRef\n#undef CAvlDeref\n\n#undef CAvl_Init\n#undef CAvl_Insert\n#undef CAvl_InsertAt\n#undef CAvl_Remove\n#undef CAvl_Lookup\n#undef CAvl_LookupExact\n#undef CAvl_GetFirstGreater\n#undef CAvl_GetLastLesser\n#undef CAvl_GetFirstGreaterEqual\n#undef CAvl_GetLastLesserEqual\n#undef CAvl_GetFirst\n#undef CAvl_GetLast\n#undef CAvl_GetNext\n#undef CAvl_GetPrev\n#undef CAvl_IsEmpty\n#undef CAvl_Verify\n#undef CAvl_Count\n#undef CAvl_IndexOf\n#undef CAvl_GetAt\n#undef CAvl_AssocSum\n#undef CAvl_ExclusiveAssocPrefixSum\n#undef CAvl_FindLastExclusiveAssocPrefixSumLesserEqual\n\n#undef CAvl_link\n#undef CAvl_balance\n#undef CAvl_parent\n#undef CAvl_count\n#undef CAvl_assoc\n#undef CAvl_nulllink\n#undef CAvl_nullref\n#undef CAvl_compare_entries\n#undef CAvl_compare_key_entry\n#undef CAvl_compute_node_assoc\n#undef CAvl_check_parent\n#undef CAvl_verify_recurser\n#undef CAvl_assert_tree\n#undef CAvl_update_count_from_children\n#undef CAvl_rotate\n#undef CAvl_subtree_min\n#undef CAvl_subtree_max\n#undef CAvl_replace_subtree_fix_assoc\n#undef CAvl_swap_for_remove\n#undef CAvl_rebalance\n#undef CAvl_child_count\n#undef CAvl_MAX\n#undef CAvl_OPTNEG\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CAvl_header.h",
    "content": "/**\n * @file CAvl_header.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs:\n// CAVL_PARAM_NAME - name of this data structure\n// CAVL_PARAM_FEATURE_COUNTS - whether to keep count information (0 or 1)\n// CAVL_PARAM_FEATURE_KEYS_ARE_INDICES - (0 or 1) whether to assume the keys are entry indices\n//   (number of entries lesser than given entry). If yes, CAVL_PARAM_TYPE_KEY is unused.\n//   Requires CAVL_PARAM_FEATURE_COUNTS.\n// CAVL_PARAM_FEATURE_NOKEYS - define to 1 if there is no need for a lookup operation\n// CAVL_PARAM_FEATURE_ASSOC - define to 1 for computation of an associative operation on subtrees.\n//   If enabled, the following macros must be defined: CAVL_PARAM_TYPE_ASSOC,\n//   CAVL_PARAM_VALUE_ASSOC_ZERO, CAVL_PARAM_FUN_ASSOC_VALUE,\n//   CAVL_PARAM_FUN_ASSOC_OPER, CAVL_PARAM_MEMBER_ASSOC.\n// CAVL_PARAM_TYPE_ENTRY - type of entry\n// CAVL_PARAM_TYPE_LINK - type of entry link (usually pointer or index)\n// CAVL_PARAM_TYPE_KEY - type of key (only if not CAVL_PARAM_FEATURE_KEYS_ARE_INDICES and\n//   not CAVL_PARAM_FEATURE_NOKEYS)\n// CAVL_PARAM_TYPE_ARG - type of argument pass through to callbacks\n// CAVL_PARAM_TYPE_COUNT - type of count (only if CAVL_PARAM_FEATURE_COUNTS)\n// CAVL_PARAM_TYPE_ASSOC - type of associative operation result\n// CAVL_PARAM_VALUE_COUNT_MAX - maximum value of count (type is CAVL_PARAM_TYPE_COUNT)\n// CAVL_PARAM_VALUE_NULL - value of invalid link (type is CAVL_PARAM_TYPE_LINK)\n// CAVL_PARAM_VALUE_ASSOC_ZERO - zero value for associative operation (type is CAVL_PARAM_TYPE_ASSOC).\n//   This must be both a left- and right-identity for the associative operation.\n// CAVL_PARAM_FUN_DEREF(arg, link) - dereference a non-null link; returns pointer to CAVL_PARAM_TYPE_LINK\n// CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) - compare to entries; returns -1/0/1\n// CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) - compare key and entry; returns -1/0/1\n// CAVL_PARAM_FUN_ASSOC_VALUE(arg, entry) - get value of a node for associative operation.\n//   The result will be cast to CAVL_PARAM_TYPE_ASSOC.\n// CAVL_PARAM_FUN_ASSOC_OPER(arg, value1, value2) - compute the associative operation on two values.\n//   The type of the two values is CAVL_PARAM_TYPE_ASSOC, and the result will be cast to\n//   CAVL_PARAM_TYPE_ASSOC.\n// CAVL_PARAM_MEMBER_CHILD - name of the child member in entry (type is CAVL_PARAM_TYPE_LINK[2])\n// CAVL_PARAM_MEMBER_BALANCE - name of the balance member in entry (type is any signed integer)\n// CAVL_PARAM_MEMBER_PARENT - name of the parent member in entry (type is CAVL_PARAM_TYPE_LINK)\n// CAVL_PARAM_MEMBER_COUNT - name of the count member in entry (type is CAVL_PARAM_TYPE_COUNT)\n//   (only if CAVL_PARAM_FEATURE_COUNTS)\n// CAVL_PARAM_MEMBER_ASSOC - name of assoc member in entry (type is CAVL_PARAM_TYPE_ASSOC)\n\n#ifndef BADVPN_CAVL_H\n#error CAvl.h has not been included\n#endif\n\n#if CAVL_PARAM_FEATURE_KEYS_ARE_INDICES && !CAVL_PARAM_FEATURE_COUNTS\n#error CAVL_PARAM_FEATURE_KEYS_ARE_INDICES requires CAVL_PARAM_FEATURE_COUNTS\n#endif\n\n#if CAVL_PARAM_FEATURE_KEYS_ARE_INDICES && CAVL_PARAM_FEATURE_NOKEYS\n#error CAVL_PARAM_FEATURE_KEYS_ARE_INDICES and CAVL_PARAM_FEATURE_NOKEYS cannot be used together\n#endif\n\n// types\n#define CAvl CAVL_PARAM_NAME\n#define CAvlEntry CAVL_PARAM_TYPE_ENTRY\n#define CAvlLink CAVL_PARAM_TYPE_LINK\n#define CAvlRef MERGE(CAVL_PARAM_NAME, Ref)\n#define CAvlArg CAVL_PARAM_TYPE_ARG\n#define CAvlKey CAVL_PARAM_TYPE_KEY\n#define CAvlCount CAVL_PARAM_TYPE_COUNT\n#define CAvlAssoc CAVL_PARAM_TYPE_ASSOC\n\n// non-object public functions\n#define CAvlIsNullRef MERGE(CAvl, IsNullRef)\n#define CAvlIsValidRef MERGE(CAvl, IsValidRef)\n#define CAvlDeref MERGE(CAvl, Deref)\n\n// public functions\n#define CAvl_Init MERGE(CAvl, _Init)\n#define CAvl_Insert MERGE(CAvl, _Insert)\n#define CAvl_InsertAt MERGE(CAvl, _InsertAt)\n#define CAvl_Remove MERGE(CAvl, _Remove)\n#define CAvl_Lookup MERGE(CAvl, _Lookup)\n#define CAvl_LookupExact MERGE(CAvl, _LookupExact)\n#define CAvl_GetFirstGreater MERGE(CAvl, _GetFirstGreater)\n#define CAvl_GetLastLesser MERGE(CAvl, _GetLastLesser)\n#define CAvl_GetFirstGreaterEqual MERGE(CAvl, _GetFirstGreaterEqual)\n#define CAvl_GetLastLesserEqual MERGE(CAvl, _GetLastLesserEqual)\n#define CAvl_GetFirst MERGE(CAvl, _GetFirst)\n#define CAvl_GetLast MERGE(CAvl, _GetLast)\n#define CAvl_GetNext MERGE(CAvl, _GetNext)\n#define CAvl_GetPrev MERGE(CAvl, _GetPrev)\n#define CAvl_IsEmpty MERGE(CAvl, _IsEmpty)\n#define CAvl_Verify MERGE(CAvl, _Verify)\n#define CAvl_Count MERGE(CAvl, _Count)\n#define CAvl_IndexOf MERGE(CAvl, _IndexOf)\n#define CAvl_GetAt MERGE(CAvl, _GetAt)\n#define CAvl_AssocSum MERGE(CAvl, _AssocSum)\n#define CAvl_ExclusiveAssocPrefixSum MERGE(CAvl, _ExclusiveAssocPrefixSum)\n#define CAvl_FindLastExclusiveAssocPrefixSumLesserEqual MERGE(CAvl, _FindLastExclusiveAssocPrefixSumLesserEqual)\n\n// private stuff\n#define CAvl_link(entry) ((entry).ptr->CAVL_PARAM_MEMBER_CHILD)\n#define CAvl_balance(entry) ((entry).ptr->CAVL_PARAM_MEMBER_BALANCE)\n#define CAvl_parent(entry) ((entry).ptr->CAVL_PARAM_MEMBER_PARENT)\n#define CAvl_count(entry) ((entry).ptr->CAVL_PARAM_MEMBER_COUNT)\n#define CAvl_assoc(entry) ((entry).ptr->CAVL_PARAM_MEMBER_ASSOC)\n#define CAvl_nulllink MERGE(CAvl, __nulllink)\n#define CAvl_nullref MERGE(CAvl, __nullref)\n#define CAvl_compare_entries MERGE(CAVL_PARAM_NAME, _compare_entries)\n#define CAvl_compare_key_entry MERGE(CAVL_PARAM_NAME, _compare_key_entry)\n#define CAvl_compute_node_assoc MERGE(CAVL_PARAM_NAME, _compute_node_assoc)\n#define CAvl_check_parent MERGE(CAVL_PARAM_NAME, _check_parent)\n#define CAvl_verify_recurser MERGE(CAVL_PARAM_NAME, _verify_recurser)\n#define CAvl_assert_tree MERGE(CAVL_PARAM_NAME, _assert_tree)\n#define CAvl_update_count_from_children MERGE(CAVL_PARAM_NAME, _update_count_from_children)\n#define CAvl_rotate MERGE(CAVL_PARAM_NAME, _rotate)\n#define CAvl_subtree_min MERGE(CAVL_PARAM_NAME, _subtree_min)\n#define CAvl_subtree_max MERGE(CAVL_PARAM_NAME, _subtree_max)\n#define CAvl_replace_subtree_fix_assoc MERGE(CAVL_PARAM_NAME, _replace_subtree_fix_counts)\n#define CAvl_swap_for_remove MERGE(CAVL_PARAM_NAME, _swap_entries)\n#define CAvl_rebalance MERGE(CAVL_PARAM_NAME, _rebalance)\n#define CAvl_child_count MERGE(CAvl, __child_count)\n#define CAvl_MAX(_a, _b) ((_a) > (_b) ? (_a) : (_b))\n#define CAvl_OPTNEG(_a, _neg) ((_neg) ? -(_a) : (_a))\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CAvl_impl.h",
    "content": "/**\n * @file CAvl_impl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"CAvl_header.h\"\n\nstatic CAvlLink CAvl_nulllink (void)\n{\n    return CAVL_PARAM_VALUE_NULL;\n}\n\nstatic CAvlRef CAvl_nullref (void)\n{\n    CAvlRef n;\n    n.link = CAVL_PARAM_VALUE_NULL;\n    n.ptr = NULL;\n    return n;\n}\n\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\n\nstatic int CAvl_compare_entries (CAvlArg arg, CAvlRef node1, CAvlRef node2)\n{\n    int res = CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, node1, node2);\n    ASSERT(res >= -1)\n    ASSERT(res <= 1)\n    \n    return res;\n}\n\n#if !CAVL_PARAM_FEATURE_NOKEYS\n\nstatic int CAvl_compare_key_entry (CAvlArg arg, CAvlKey key1, CAvlRef node2)\n{\n    int res = CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, node2);\n    ASSERT(res >= -1)\n    ASSERT(res <= 1)\n    \n    return res;\n}\n\n#endif\n\n#endif\n\n#if CAVL_PARAM_FEATURE_ASSOC\n\nstatic CAvlAssoc CAvl_compute_node_assoc (CAvlArg arg, CAvlRef node)\n{\n    CAvlAssoc sum = CAVL_PARAM_FUN_ASSOC_VALUE(arg, node);\n    if (CAvl_link(node)[0] != CAvl_nulllink()) {\n        sum = CAVL_PARAM_FUN_ASSOC_OPER(arg, CAvl_assoc(CAvlDeref(arg, CAvl_link(node)[0])), sum);\n    }\n    if (CAvl_link(node)[1] != CAvl_nulllink()) {\n        sum = CAVL_PARAM_FUN_ASSOC_OPER(arg, sum, CAvl_assoc(CAvlDeref(arg, CAvl_link(node)[1])));\n    }\n    return sum;\n}\n\n#endif\n\nstatic int CAvl_check_parent (CAvlRef p, CAvlRef c)\n{\n    return (p.link == CAvl_parent(c)) && (p.link == CAvl_nulllink() || c.link == CAvl_link(p)[0] || c.link == CAvl_link(p)[1]);\n}\n\nstatic int CAvl_verify_recurser (CAvlArg arg, CAvlRef n)\n{\n    ASSERT_FORCE(CAvl_balance(n) >= -1)\n    ASSERT_FORCE(CAvl_balance(n) <= 1)\n    \n    int height_left = 0;\n    int height_right = 0;\n#if CAVL_PARAM_FEATURE_COUNTS\n    CAvlCount count_left = 0;\n    CAvlCount count_right = 0;\n#endif\n    \n    // check left subtree\n    if (CAvl_link(n)[0] != CAvl_nulllink()) {\n        // check parent link\n        ASSERT_FORCE(CAvl_parent(CAvlDeref(arg, CAvl_link(n)[0])) == n.link)\n        // check binary search tree\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\n        ASSERT_FORCE(CAvl_compare_entries(arg, CAvlDeref(arg, CAvl_link(n)[0]), n) == -1)\n#endif\n        // recursively calculate height\n        height_left = CAvl_verify_recurser(arg, CAvlDeref(arg, CAvl_link(n)[0]));\n#if CAVL_PARAM_FEATURE_COUNTS\n        count_left = CAvl_count(CAvlDeref(arg, CAvl_link(n)[0]));\n#endif\n    }\n    \n    // check right subtree\n    if (CAvl_link(n)[1] != CAvl_nulllink()) {\n        // check parent link\n        ASSERT_FORCE(CAvl_parent(CAvlDeref(arg, CAvl_link(n)[1])) == n.link)\n        // check binary search tree\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\n        ASSERT_FORCE(CAvl_compare_entries(arg, CAvlDeref(arg, CAvl_link(n)[1]), n) == 1)\n#endif\n        // recursively calculate height\n        height_right = CAvl_verify_recurser(arg, CAvlDeref(arg, CAvl_link(n)[1]));\n#if CAVL_PARAM_FEATURE_COUNTS\n        count_right = CAvl_count(CAvlDeref(arg, CAvl_link(n)[1]));\n#endif\n    }\n    \n    // check balance factor\n    ASSERT_FORCE(CAvl_balance(n) == height_right - height_left)\n    \n#if CAVL_PARAM_FEATURE_COUNTS\n    // check count\n    ASSERT_FORCE(CAvl_count(n) == 1 + count_left + count_right)\n#endif\n    \n#if CAVL_PARAM_FEATURE_ASSOC\n    // check assoc\n    ASSERT_FORCE(CAvl_assoc(n) == CAvl_compute_node_assoc(arg, n))\n#endif\n    \n    return CAvl_MAX(height_left, height_right) + 1;\n}\n\nstatic void CAvl_assert_tree (CAvl *o, CAvlArg arg)\n{\n#ifdef CAVL_AUTO_VERIFY\n    CAvl_Verify(o, arg);\n#endif\n}\n\n#if CAVL_PARAM_FEATURE_COUNTS\nstatic void CAvl_update_count_from_children (CAvlArg arg, CAvlRef n)\n{\n    CAvlCount left_count = CAvl_link(n)[0] != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, CAvl_link(n)[0])) : 0;\n    CAvlCount right_count = CAvl_link(n)[1] != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, CAvl_link(n)[1])) : 0;\n    CAvl_count(n) = 1 + left_count + right_count;\n}\n#endif\n\nstatic void CAvl_rotate (CAvl *o, CAvlArg arg, CAvlRef r, uint8_t dir, CAvlRef r_parent)\n{\n    ASSERT(CAvl_check_parent(r_parent, r))\n    CAvlRef nr = CAvlDeref(arg, CAvl_link(r)[!dir]);\n    \n    CAvl_link(r)[!dir] = CAvl_link(nr)[dir];\n    if (CAvl_link(r)[!dir] != CAvl_nulllink()) {\n        CAvl_parent(CAvlDeref(arg, CAvl_link(r)[!dir])) = r.link;\n    }\n    CAvl_link(nr)[dir] = r.link;\n    CAvl_parent(nr) = r_parent.link;\n    if (r_parent.link != CAvl_nulllink()) {\n        CAvl_link(r_parent)[r.link == CAvl_link(r_parent)[1]] = nr.link;\n    } else {\n        o->root = nr.link;\n    }\n    CAvl_parent(r) = nr.link;\n    \n#if CAVL_PARAM_FEATURE_COUNTS\n    CAvl_update_count_from_children(arg, r);\n    CAvl_update_count_from_children(arg, nr);\n#endif\n    \n#if CAVL_PARAM_FEATURE_ASSOC\n    CAvl_assoc(r) = CAvl_compute_node_assoc(arg, r);\n    CAvl_assoc(nr) = CAvl_compute_node_assoc(arg, nr);\n#endif\n}\n\nstatic CAvlRef CAvl_subtree_min (CAvlArg arg, CAvlRef n)\n{\n    ASSERT(n.link != CAvl_nulllink())\n    \n    while (CAvl_link(n)[0] != CAvl_nulllink()) {\n        n = CAvlDeref(arg, CAvl_link(n)[0]);\n    }\n    \n    return n;\n}\n\nstatic CAvlRef CAvl_subtree_max (CAvlArg arg, CAvlRef n)\n{\n    ASSERT(n.link != CAvl_nulllink())\n    \n    while (CAvl_link(n)[1] != CAvl_nulllink()) {\n        n = CAvlDeref(arg, CAvl_link(n)[1]);\n    }\n    \n    return n;\n}\n\nstatic void CAvl_replace_subtree_fix_assoc (CAvl *o, CAvlArg arg, CAvlRef dest, CAvlRef n, CAvlRef dest_parent)\n{\n    ASSERT(dest.link != CAvl_nulllink())\n    ASSERT(CAvl_check_parent(dest_parent, dest))\n    \n    if (dest_parent.link != CAvl_nulllink()) {\n        CAvl_link(dest_parent)[dest.link == CAvl_link(dest_parent)[1]] = n.link;\n    } else {\n        o->root = n.link;\n    }\n    if (n.link != CAvl_nulllink()) {\n        CAvl_parent(n) = CAvl_parent(dest);\n    }\n    \n#if CAVL_PARAM_FEATURE_COUNTS || CAVL_PARAM_FEATURE_ASSOC\n    for (CAvlRef c = dest_parent; c.link != CAvl_nulllink(); c = CAvlDeref(arg, CAvl_parent(c))) {\n#if CAVL_PARAM_FEATURE_COUNTS\n        ASSERT(CAvl_count(c) >= CAvl_count(dest))\n        CAvl_count(c) -= CAvl_count(dest);\n        if (n.link != CAvl_nulllink()) {\n            ASSERT(CAvl_count(n) <= CAVL_PARAM_VALUE_COUNT_MAX - CAvl_count(c))\n            CAvl_count(c) += CAvl_count(n);\n        }\n#endif\n#if CAVL_PARAM_FEATURE_ASSOC\n        CAvl_assoc(c) = CAvl_compute_node_assoc(arg, c);\n#endif\n    }\n#endif\n}\n\nstatic void CAvl_swap_for_remove (CAvl *o, CAvlArg arg, CAvlRef node, CAvlRef enode, CAvlRef node_parent, CAvlRef enode_parent)\n{\n    ASSERT(CAvl_check_parent(node_parent, node))\n    ASSERT(CAvl_check_parent(enode_parent, enode))\n    \n    if (enode_parent.link == node.link) {\n        // when the nodes are directly connected we need special handling\n        \n        uint8_t side = (enode.link == CAvl_link(node)[1]);\n        CAvlRef c = CAvlDeref(arg, CAvl_link(node)[!side]);\n        \n        if ((CAvl_link(node)[0] = CAvl_link(enode)[0]) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(node)[0])) = node.link;\n        }\n        if ((CAvl_link(node)[1] = CAvl_link(enode)[1]) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(node)[1])) = node.link;\n        }\n        \n        CAvl_parent(enode) = CAvl_parent(node);\n        if (node_parent.link != CAvl_nulllink()) {\n            CAvl_link(node_parent)[node.link == CAvl_link(node_parent)[1]] = enode.link;\n        } else {\n            o->root = enode.link;\n        }\n        \n        CAvl_link(enode)[side] = node.link;\n        CAvl_parent(node) = enode.link;\n        if ((CAvl_link(enode)[!side] = c.link) != CAvl_nulllink()) {\n            CAvl_parent(c) = enode.link;\n        }\n    } else {\n        CAvlRef temp;\n        \n        // swap parents\n        temp = node_parent;\n        CAvl_parent(node) = CAvl_parent(enode);\n        if (enode_parent.link != CAvl_nulllink()) {\n            CAvl_link(enode_parent)[enode.link == CAvl_link(enode_parent)[1]] = node.link;\n        } else {\n            o->root = node.link;\n        }\n        CAvl_parent(enode) = temp.link;\n        if (temp.link != CAvl_nulllink()) {\n            CAvl_link(temp)[node.link == CAvl_link(temp)[1]] = enode.link;\n        } else {\n            o->root = enode.link;\n        }\n        \n        // swap left children\n        temp = CAvlDeref(arg, CAvl_link(node)[0]);\n        if ((CAvl_link(node)[0] = CAvl_link(enode)[0]) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(node)[0])) = node.link;\n        }\n        if ((CAvl_link(enode)[0] = temp.link) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(enode)[0])) = enode.link;\n        }\n        \n        // swap right children\n        temp = CAvlDeref(arg, CAvl_link(node)[1]);\n        if ((CAvl_link(node)[1] = CAvl_link(enode)[1]) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(node)[1])) = node.link;\n        }\n        if ((CAvl_link(enode)[1] = temp.link) != CAvl_nulllink()) {\n            CAvl_parent(CAvlDeref(arg, CAvl_link(enode)[1])) = enode.link;\n        }\n    }\n    \n    // swap balance factors\n    int8_t b = CAvl_balance(node);\n    CAvl_balance(node) = CAvl_balance(enode);\n    CAvl_balance(enode) = b;\n    \n#if CAVL_PARAM_FEATURE_COUNTS\n    // swap counts\n    CAvlCount c = CAvl_count(node);\n    CAvl_count(node) = CAvl_count(enode);\n    CAvl_count(enode) = c;\n#endif\n    \n    // not fixing assoc values here because CAvl_replace_subtree_fix_assoc() will do it\n}\n\nstatic void CAvl_rebalance (CAvl *o, CAvlArg arg, CAvlRef node, uint8_t side, int8_t deltac)\n{\n    ASSERT(side == 0 || side == 1)\n    ASSERT(deltac >= -1 && deltac <= 1)\n    ASSERT(CAvl_balance(node) >= -1 && CAvl_balance(node) <= 1)\n    \n    // if no subtree changed its height, no more rebalancing is needed\n    if (deltac == 0) {\n        return;\n    }\n    \n    // calculate how much our height changed\n    int8_t delta = CAvl_MAX(deltac, CAvl_OPTNEG(CAvl_balance(node), side)) - CAvl_MAX(0, CAvl_OPTNEG(CAvl_balance(node), side));\n    ASSERT(delta >= -1 && delta <= 1)\n    \n    // update our balance factor\n    CAvl_balance(node) -= CAvl_OPTNEG(deltac, side);\n    \n    CAvlRef child;\n    CAvlRef gchild;\n    \n    // perform transformations if the balance factor is wrong\n    if (CAvl_balance(node) == 2 || CAvl_balance(node) == -2) {\n        uint8_t bside;\n        int8_t bsidef;\n        if (CAvl_balance(node) == 2) {\n            bside = 1;\n            bsidef = 1;\n        } else {\n            bside = 0;\n            bsidef = -1;\n        }\n        \n        ASSERT(CAvl_link(node)[bside] != CAvl_nulllink())\n        child = CAvlDeref(arg, CAvl_link(node)[bside]);\n        \n        switch (CAvl_balance(child) * bsidef) {\n            case 1:\n                CAvl_rotate(o, arg, node, !bside, CAvlDeref(arg, CAvl_parent(node)));\n                CAvl_balance(node) = 0;\n                CAvl_balance(child) = 0;\n                node = child;\n                delta -= 1;\n                break;\n            case 0:\n                CAvl_rotate(o, arg, node, !bside, CAvlDeref(arg, CAvl_parent(node)));\n                CAvl_balance(node) = 1 * bsidef;\n                CAvl_balance(child) = -1 * bsidef;\n                node = child;\n                break;\n            case -1:\n                ASSERT(CAvl_link(child)[!bside] != CAvl_nulllink())\n                gchild = CAvlDeref(arg, CAvl_link(child)[!bside]);\n                CAvl_rotate(o, arg, child, bside, node);\n                CAvl_rotate(o, arg, node, !bside, CAvlDeref(arg, CAvl_parent(node)));\n                CAvl_balance(node) = -CAvl_MAX(0, CAvl_balance(gchild) * bsidef) * bsidef;\n                CAvl_balance(child) = CAvl_MAX(0, -CAvl_balance(gchild) * bsidef) * bsidef;\n                CAvl_balance(gchild) = 0;\n                node = gchild;\n                delta -= 1;\n                break;\n            default:\n                ASSERT(0);\n        }\n    }\n    \n    ASSERT(delta >= -1 && delta <= 1)\n    // Transformations above preserve this. Proof:\n    //     - if a child subtree gained 1 height and rebalancing was needed,\n    //       it was the heavier subtree. Then delta was was originally 1, because\n    //       the heaviest subtree gained one height. If the transformation reduces\n    //       delta by one, it becomes 0.\n    //     - if a child subtree lost 1 height and rebalancing was needed, it\n    //       was the lighter subtree. Then delta was originally 0, because\n    //       the height of the heaviest subtree was unchanged. If the transformation\n    //       reduces delta by one, it becomes -1.\n    \n    if (CAvl_parent(node) != CAvl_nulllink()) {\n        CAvlRef node_parent = CAvlDeref(arg, CAvl_parent(node));\n        CAvl_rebalance(o, arg, node_parent, node.link == CAvl_link(node_parent)[1], delta);\n    }\n}\n\n#if CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\nstatic CAvlCount CAvl_child_count (CAvlArg arg, CAvlRef n, int dir)\n{\n    return (CAvl_link(n)[dir] != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, CAvl_link(n)[dir])) : 0);\n}\n#endif\n\nstatic int CAvlIsNullRef (CAvlRef node)\n{\n    return node.link == CAvl_nulllink();\n}\n\nstatic int CAvlIsValidRef (CAvlRef node)\n{\n    return node.link != CAvl_nulllink();\n}\n\nstatic CAvlRef CAvlDeref (CAvlArg arg, CAvlLink link)\n{\n    if (link == CAvl_nulllink()) {\n        return CAvl_nullref();\n    }\n    \n    CAvlRef n;\n    n.ptr = CAVL_PARAM_FUN_DEREF(arg, link);\n    n.link = link;\n    \n    ASSERT(n.ptr)\n    \n    return n;\n}\n\nstatic void CAvl_Init (CAvl *o)\n{\n    o->root = CAvl_nulllink();\n}\n\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES\n\nstatic int CAvl_Insert (CAvl *o, CAvlArg arg, CAvlRef node, CAvlRef *out_ref)\n{\n    ASSERT(node.link != CAvl_nulllink())\n#if CAVL_PARAM_FEATURE_COUNTS\n    ASSERT(CAvl_Count(o, arg) < CAVL_PARAM_VALUE_COUNT_MAX)\n#endif\n    \n    // insert to root?\n    if (o->root == CAvl_nulllink()) {\n        o->root = node.link;\n        CAvl_parent(node) = CAvl_nulllink();\n        CAvl_link(node)[0] = CAvl_nulllink();\n        CAvl_link(node)[1] = CAvl_nulllink();\n        CAvl_balance(node) = 0;\n#if CAVL_PARAM_FEATURE_COUNTS\n        CAvl_count(node) = 1;\n#endif\n#if CAVL_PARAM_FEATURE_ASSOC\n        CAvl_assoc(node) = CAVL_PARAM_FUN_ASSOC_VALUE(arg, node);\n#endif\n        \n        CAvl_assert_tree(o, arg);\n        \n        if (out_ref) {\n            *out_ref = CAvl_nullref();\n        }\n        return 1;\n    }\n    \n    CAvlRef c = CAvlDeref(arg, o->root);\n    int side;\n    while (1) {\n        int comp = CAvl_compare_entries(arg, node, c);\n        \n        if (comp == 0) {\n            if (out_ref) {\n                *out_ref = c;\n            }\n            return 0;\n        }\n        \n        side = (comp == 1);\n        \n        if (CAvl_link(c)[side] == CAvl_nulllink()) {\n            break;\n        }\n        \n        c = CAvlDeref(arg, CAvl_link(c)[side]);\n    }\n    \n    CAvl_link(c)[side] = node.link;\n    CAvl_parent(node) = c.link;\n    CAvl_link(node)[0] = CAvl_nulllink();\n    CAvl_link(node)[1] = CAvl_nulllink();\n    CAvl_balance(node) = 0;\n#if CAVL_PARAM_FEATURE_COUNTS\n    CAvl_count(node) = 1;\n#endif\n#if CAVL_PARAM_FEATURE_ASSOC\n    CAvl_assoc(node) = CAVL_PARAM_FUN_ASSOC_VALUE(arg, node);\n#endif\n    \n#if CAVL_PARAM_FEATURE_COUNTS || CAVL_PARAM_FEATURE_ASSOC\n    for (CAvlRef p = c; p.link != CAvl_nulllink(); p = CAvlDeref(arg, CAvl_parent(p))) {\n#if CAVL_PARAM_FEATURE_COUNTS\n        CAvl_count(p)++;\n#endif\n#if CAVL_PARAM_FEATURE_ASSOC\n        CAvl_assoc(p) = CAvl_compute_node_assoc(arg, p);\n#endif\n    }\n#endif\n    \n    CAvl_rebalance(o, arg, c, side, 1);\n    \n    CAvl_assert_tree(o, arg);\n    \n    if (out_ref) {\n        *out_ref = c;\n    }\n    return 1;\n}\n\n#else\n\nstatic void CAvl_InsertAt (CAvl *o, CAvlArg arg, CAvlRef node, CAvlCount index)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(index <= CAvl_Count(o, arg))\n    ASSERT(CAvl_Count(o, arg) < CAVL_PARAM_VALUE_COUNT_MAX)\n    \n    // insert to root?\n    if (o->root == CAvl_nulllink()) {\n        o->root = node.link;\n        CAvl_parent(node) = CAvl_nulllink();\n        CAvl_link(node)[0] = CAvl_nulllink();\n        CAvl_link(node)[1] = CAvl_nulllink();\n        CAvl_balance(node) = 0;\n        CAvl_count(node) = 1;\n#if CAVL_PARAM_FEATURE_ASSOC\n        CAvl_assoc(node) = CAVL_PARAM_FUN_ASSOC_VALUE(arg, node);\n#endif\n        \n        CAvl_assert_tree(o, arg);\n        return;\n    }\n    \n    CAvlRef c = CAvlDeref(arg, o->root);\n    CAvlCount c_idx = CAvl_child_count(arg, c, 0);\n    int side;\n    while (1) {\n        side = (index > c_idx);\n        \n        if (CAvl_link(c)[side] == CAvl_nulllink()) {\n            break;\n        }\n        \n        c = CAvlDeref(arg, CAvl_link(c)[side]);\n        \n        if (side == 0) {\n            c_idx -= 1 + CAvl_child_count(arg, c, 1);\n        } else {\n            c_idx += 1 + CAvl_child_count(arg, c, 0);\n        }\n    }\n    \n    CAvl_link(c)[side] = node.link;\n    CAvl_parent(node) = c.link;\n    CAvl_link(node)[0] = CAvl_nulllink();\n    CAvl_link(node)[1] = CAvl_nulllink();\n    CAvl_balance(node) = 0;\n    CAvl_count(node) = 1;\n#if CAVL_PARAM_FEATURE_ASSOC\n    CAvl_assoc(node) = CAVL_PARAM_FUN_ASSOC_VALUE(arg, node);\n#endif\n    \n    for (CAvlRef p = c; p.link != CAvl_nulllink(); p = CAvlDeref(arg, CAvl_parent(p))) {\n        CAvl_count(p)++;\n#if CAVL_PARAM_FEATURE_ASSOC\n        CAvl_assoc(p) = CAvl_compute_node_assoc(arg, p);\n#endif\n    }\n    \n    CAvl_rebalance(o, arg, c, side, 1);\n    \n    CAvl_assert_tree(o, arg);\n    return;\n}\n\n#endif\n\nstatic void CAvl_Remove (CAvl *o, CAvlArg arg, CAvlRef node)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(o->root != CAvl_nulllink())\n    \n    if (CAvl_link(node)[0] != CAvl_nulllink() && CAvl_link(node)[1] != CAvl_nulllink()) {\n        CAvlRef max = CAvl_subtree_max(arg, CAvlDeref(arg, CAvl_link(node)[0]));\n        CAvl_swap_for_remove(o, arg, node, max, CAvlDeref(arg, CAvl_parent(node)), CAvlDeref(arg, CAvl_parent(max)));\n    }\n    \n    ASSERT(CAvl_link(node)[0] == CAvl_nulllink() || CAvl_link(node)[1] == CAvl_nulllink())\n    \n    CAvlRef paren = CAvlDeref(arg, CAvl_parent(node));\n    CAvlRef child = (CAvl_link(node)[0] != CAvl_nulllink() ? CAvlDeref(arg, CAvl_link(node)[0]) : CAvlDeref(arg, CAvl_link(node)[1]));\n    \n    if (paren.link != CAvl_nulllink()) {\n        int side = (node.link == CAvl_link(paren)[1]);\n        CAvl_replace_subtree_fix_assoc(o, arg, node, child, paren);\n        CAvl_rebalance(o, arg, paren, side, -1);\n    } else {\n        CAvl_replace_subtree_fix_assoc(o, arg, node, child, paren);\n    }\n    \n    CAvl_assert_tree(o, arg);\n}\n\n#if !CAVL_PARAM_FEATURE_KEYS_ARE_INDICES && !CAVL_PARAM_FEATURE_NOKEYS\n\nstatic CAvlRef CAvl_Lookup (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    if (o->root == CAvl_nulllink()) {\n        return CAvl_nullref();\n    }\n    \n    CAvlRef c = CAvlDeref(arg, o->root);\n    while (1) {\n        // compare\n        int comp = CAvl_compare_key_entry(arg, key, c);\n        \n        // have we found a node that compares equal?\n        if (comp == 0) {\n            return c;\n        }\n        \n        int side = (comp == 1);\n        \n        // have we reached a leaf?\n        if (CAvl_link(c)[side] == CAvl_nulllink()) {\n            return c;\n        }\n        \n        c = CAvlDeref(arg, CAvl_link(c)[side]);\n    }\n}\n\nstatic CAvlRef CAvl_LookupExact (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    if (o->root == CAvl_nulllink()) {\n        return CAvl_nullref();\n    }\n    \n    CAvlRef c = CAvlDeref(arg, o->root);\n    while (1) {\n        // compare\n        int comp = CAvl_compare_key_entry(arg, key, c);\n        \n        // have we found a node that compares equal?\n        if (comp == 0) {\n            return c;\n        }\n        \n        int side = (comp == 1);\n        \n        // have we reached a leaf?\n        if (CAvl_link(c)[side] == CAvl_nulllink()) {\n            return CAvl_nullref();\n        }\n        \n        c = CAvlDeref(arg, CAvl_link(c)[side]);\n    }\n}\n\nstatic CAvlRef CAvl_GetFirstGreater (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    CAvlRef c = CAvl_Lookup(o, arg, key);\n    if (CAvlIsNullRef(c)) {\n        return CAvl_nullref();\n    }\n    \n    if (CAvl_compare_key_entry(arg, key, c) >= 0) {\n        c = CAvl_GetNext(o, arg, c);\n        if (CAvlIsNullRef(c)) {\n            return CAvl_nullref();\n        }\n    }\n    \n    ASSERT(CAvl_compare_key_entry(arg, key, c) < 0);\n    \n    return c;\n}\n\nstatic CAvlRef CAvl_GetLastLesser (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    CAvlRef c = CAvl_Lookup(o, arg, key);\n    if (CAvlIsNullRef(c)) {\n        return CAvl_nullref();\n    }\n    \n    if (CAvl_compare_key_entry(arg, key, c) <= 0) {\n        c = CAvl_GetPrev(o, arg, c);\n        if (CAvlIsNullRef(c)) {\n            return CAvl_nullref();\n        }\n    }\n    \n    ASSERT(CAvl_compare_key_entry(arg, key, c) > 0);\n    \n    return c;\n}\n\nstatic CAvlRef CAvl_GetFirstGreaterEqual (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    CAvlRef c = CAvl_Lookup(o, arg, key);\n    if (CAvlIsNullRef(c)) {\n        return CAvl_nullref();\n    }\n    \n    if (CAvl_compare_key_entry(arg, key, c) > 0) {\n        c = CAvl_GetNext(o, arg, c);\n        if (CAvlIsNullRef(c)) {\n            return CAvl_nullref();\n        }\n    }\n    \n    ASSERT(CAvl_compare_key_entry(arg, key, c) <= 0);\n    \n    return c;\n}\n\nstatic CAvlRef CAvl_GetLastLesserEqual (const CAvl *o, CAvlArg arg, CAvlKey key)\n{\n    CAvlRef c = CAvl_Lookup(o, arg, key);\n    if (CAvlIsNullRef(c)) {\n        return CAvl_nullref();\n    }\n    \n    if (CAvl_compare_key_entry(arg, key, c) < 0) {\n        c = CAvl_GetPrev(o, arg, c);\n        if (CAvlIsNullRef(c)) {\n            return CAvl_nullref();\n        }\n    }\n    \n    ASSERT(CAvl_compare_key_entry(arg, key, c) >= 0);\n    \n    return c;\n}\n\n#endif\n\nstatic CAvlRef CAvl_GetFirst (const CAvl *o, CAvlArg arg)\n{\n    if (o->root == CAvl_nulllink()) {\n        return CAvl_nullref();\n    }\n    \n    return CAvl_subtree_min(arg, CAvlDeref(arg, o->root));\n}\n\nstatic CAvlRef CAvl_GetLast (const CAvl *o, CAvlArg arg)\n{\n    if (o->root == CAvl_nulllink()) {\n        return CAvl_nullref();\n    }\n    \n    return CAvl_subtree_max(arg, CAvlDeref(arg, o->root));\n}\n\nstatic CAvlRef CAvl_GetNext (const CAvl *o, CAvlArg arg, CAvlRef node)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(o->root != CAvl_nulllink())\n    \n    if (CAvl_link(node)[1] != CAvl_nulllink()) {\n        node = CAvlDeref(arg, CAvl_link(node)[1]);\n        while (CAvl_link(node)[0] != CAvl_nulllink()) {\n            node = CAvlDeref(arg, CAvl_link(node)[0]);\n        }\n    } else {\n        while (CAvl_parent(node) != CAvl_nulllink() && node.link == CAvl_link(CAvlDeref(arg, CAvl_parent(node)))[1]) {\n            node = CAvlDeref(arg, CAvl_parent(node));\n        }\n        node = CAvlDeref(arg, CAvl_parent(node));\n    }\n    \n    return node;\n}\n\nstatic CAvlRef CAvl_GetPrev (const CAvl *o, CAvlArg arg, CAvlRef node)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(o->root != CAvl_nulllink())\n    \n    if (CAvl_link(node)[0] != CAvl_nulllink()) {\n        node = CAvlDeref(arg, CAvl_link(node)[0]);\n        while (CAvl_link(node)[1] != CAvl_nulllink()) {\n            node = CAvlDeref(arg, CAvl_link(node)[1]);\n        }\n    } else {\n        while (CAvl_parent(node) != CAvl_nulllink() && node.link == CAvl_link(CAvlDeref(arg, CAvl_parent(node)))[0]) {\n            node = CAvlDeref(arg, CAvl_parent(node));\n        }\n        node = CAvlDeref(arg, CAvl_parent(node));\n    }\n    \n    return node;\n}\n\nstatic int CAvl_IsEmpty (const CAvl *o)\n{\n    return o->root == CAvl_nulllink();\n}\n\nstatic void CAvl_Verify (const CAvl *o, CAvlArg arg)\n{\n    if (o->root != CAvl_nulllink()) {\n        CAvlRef root = CAvlDeref(arg, o->root);\n        ASSERT(CAvl_parent(root) == CAvl_nulllink())\n        CAvl_verify_recurser(arg, root);\n    }\n}\n\n#if CAVL_PARAM_FEATURE_COUNTS\n\nstatic CAvlCount CAvl_Count (const CAvl *o, CAvlArg arg)\n{\n    return (o->root != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, o->root)) : 0);\n}\n\nstatic CAvlCount CAvl_IndexOf (const CAvl *o, CAvlArg arg, CAvlRef node)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(o->root != CAvl_nulllink())\n    \n    CAvlCount index = (CAvl_link(node)[0] != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, CAvl_link(node)[0])) : 0);\n    \n    CAvlRef paren = CAvlDeref(arg, CAvl_parent(node));\n    \n    for (CAvlRef c = node; paren.link != CAvl_nulllink(); c = paren, paren = CAvlDeref(arg, CAvl_parent(c))) {\n        if (c.link == CAvl_link(paren)[1]) {\n            ASSERT(CAvl_count(paren) > CAvl_count(c))\n            ASSERT(CAvl_count(paren) - CAvl_count(c) <= CAVL_PARAM_VALUE_COUNT_MAX - index)\n            index += CAvl_count(paren) - CAvl_count(c);\n        }\n    }\n    \n    return index;\n}\n\nstatic CAvlRef CAvl_GetAt (const CAvl *o, CAvlArg arg, CAvlCount index)\n{\n    if (index >= CAvl_Count(o, arg)) {\n        return CAvl_nullref();\n    }\n    \n    CAvlRef c = CAvlDeref(arg, o->root);\n    \n    while (1) {\n        ASSERT(c.link != CAvl_nulllink())\n        ASSERT(index < CAvl_count(c))\n        \n        CAvlCount left_count = (CAvl_link(c)[0] != CAvl_nulllink() ? CAvl_count(CAvlDeref(arg, CAvl_link(c)[0])) : 0);\n        \n        if (index == left_count) {\n            return c;\n        }\n        \n        if (index < left_count) {\n            c = CAvlDeref(arg, CAvl_link(c)[0]);\n        } else {\n            c = CAvlDeref(arg, CAvl_link(c)[1]);\n            index -= left_count + 1;\n        }\n    }\n}\n\n#endif\n\n#if CAVL_PARAM_FEATURE_ASSOC\n\nstatic CAvlAssoc CAvl_AssocSum (const CAvl *o, CAvlArg arg)\n{\n    if (o->root == CAvl_nulllink()) {\n        return CAVL_PARAM_VALUE_ASSOC_ZERO;\n    }\n    CAvlRef root = CAvlDeref(arg, o->root);\n    return CAvl_assoc(root);\n}\n\nstatic CAvlAssoc CAvl_ExclusiveAssocPrefixSum (const CAvl *o, CAvlArg arg, CAvlRef node)\n{\n    ASSERT(node.link != CAvl_nulllink())\n    ASSERT(o->root != CAvl_nulllink())\n    \n    CAvlAssoc sum = (CAvl_link(node)[0] != CAvl_nulllink() ? CAvl_assoc(CAvlDeref(arg, CAvl_link(node)[0])) : CAVL_PARAM_VALUE_ASSOC_ZERO);\n    \n    CAvlRef paren = CAvlDeref(arg, CAvl_parent(node));\n    \n    for (CAvlRef c = node; paren.link != CAvl_nulllink(); c = paren, paren = CAvlDeref(arg, CAvl_parent(c))) {\n        if (c.link == CAvl_link(paren)[1]) {\n            CAvlAssoc c_val = CAVL_PARAM_FUN_ASSOC_VALUE(arg, paren);\n            sum = CAVL_PARAM_FUN_ASSOC_OPER(arg, c_val, sum);\n            if (CAvl_link(paren)[0] != CAvl_nulllink()) {\n                sum = CAVL_PARAM_FUN_ASSOC_OPER(arg, CAvl_assoc(CAvlDeref(arg, CAvl_link(paren)[0])), sum);\n            }\n        }\n    }\n    \n    return sum;\n}\n\nstatic CAvlRef CAvl_FindLastExclusiveAssocPrefixSumLesserEqual (const CAvl *o, CAvlArg arg, CAvlAssoc sum, int (*sum_less) (void *, CAvlAssoc, CAvlAssoc), void *user)\n{\n    CAvlRef result = CAvl_nullref();\n    CAvlRef c = CAvlDeref(arg, o->root);\n    CAvlAssoc sum_offset = CAVL_PARAM_VALUE_ASSOC_ZERO;\n    \n    while (c.link != CAvl_nulllink()) {\n        CAvlAssoc left_sum = (CAvl_link(c)[0] != CAvl_nulllink() ? CAvl_assoc(CAvlDeref(arg, CAvl_link(c)[0])) : CAVL_PARAM_VALUE_ASSOC_ZERO);\n        CAvlAssoc c_prefixsum = CAVL_PARAM_FUN_ASSOC_OPER(arg, sum_offset, left_sum);\n        \n        if (sum_less(user, sum, c_prefixsum)) {\n            c = CAvlDeref(arg, CAvl_link(c)[0]);\n        } else {\n            result = c;\n            CAvlAssoc c_val = CAVL_PARAM_FUN_ASSOC_VALUE(arg, c);\n            sum_offset = CAVL_PARAM_FUN_ASSOC_OPER(arg, c_prefixsum, c_val);\n            c = CAvlDeref(arg, CAvl_link(c)[1]);\n        }\n    }\n    \n    return result;\n}\n\n#endif\n\n#include \"CAvl_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CHash.h",
    "content": "/**\n * @file CHash.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_CHASH_H\n#define BADVPN_CHASH_H\n\n#include <stdlib.h>\n\n#include <misc/debug.h>\n#include <misc/merge.h>\n#include <misc/balloc.h>\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CHash_decl.h",
    "content": "/**\n * @file CHash_decl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"CHash_header.h\"\n\ntypedef struct {\n    CHashLink *buckets;\n    size_t num_buckets;\n} CHash;\n\ntypedef struct {\n    CHashEntry *ptr;\n    CHashLink link;\n} CHashRef;\n\nstatic CHashLink CHashNullLink (void);\nstatic CHashRef CHashNullRef (void);\nstatic int CHashIsNullLink (CHashLink link);\nstatic int CHashIsNullRef (CHashRef ref);\nstatic CHashRef CHashDerefMayNull (CHashArg arg, CHashLink link);\nstatic CHashRef CHashDerefNonNull (CHashArg arg, CHashLink link);\n\nstatic int CHash_Init (CHash *o, size_t num_buckets);\nstatic void CHash_Free (CHash *o);\nstatic int CHash_Insert (CHash *o, CHashArg arg, CHashRef entry, CHashRef *out_existing);\nstatic void CHash_InsertMulti (CHash *o, CHashArg arg, CHashRef entry);\nstatic void CHash_Remove (CHash *o, CHashArg arg, CHashRef entry);\nstatic CHashRef CHash_Lookup (const CHash *o, CHashArg arg, CHashKey key);\nstatic CHashRef CHash_GetNextEqual (const CHash *o, CHashArg arg, CHashRef entry);\nstatic int CHash_MultiplyBuckets (CHash *o, CHashArg arg, int exp);\nstatic void CHash_Verify (const CHash *o, CHashArg arg);\n\n#include \"CHash_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CHash_footer.h",
    "content": "/**\n * @file CHash_footer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// preprocessor inputs\n#undef CHASH_PARAM_NAME\n#undef CHASH_PARAM_ENTRY\n#undef CHASH_PARAM_LINK\n#undef CHASH_PARAM_KEY\n#undef CHASH_PARAM_ARG\n#undef CHASH_PARAM_NULL\n#undef CHASH_PARAM_DEREF\n#undef CHASH_PARAM_ENTRYHASH\n#undef CHASH_PARAM_KEYHASH\n#undef CHASH_PARAM_ENTRYHASH_IS_CHEAP\n#undef CHASH_PARAM_COMPARE_ENTRIES\n#undef CHASH_PARAM_COMPARE_KEY_ENTRY\n#undef CHASH_PARAM_ENTRY_NEXT\n\n// types\n#undef CHash\n#undef CHashEntry\n#undef CHashLink\n#undef CHashRef\n#undef CHashArg\n#undef CHashKey\n\n// non-object public functions\n#undef CHashNullLink\n#undef CHashNullRef\n#undef CHashIsNullLink\n#undef CHashIsNullRef\n#undef CHashDerefMayNull\n#undef CHashDerefNonNull\n\n// public functions\n#undef CHash_Init\n#undef CHash_Free\n#undef CHash_Insert\n#undef CHash_InsertMulti\n#undef CHash_Remove\n#undef CHash_Lookup\n#undef CHash_GetNextEqual\n#undef CHash_MultiplyBuckets\n#undef CHash_Verify\n\n// private things\n#undef CHash_next\n#undef CHash_assert_valid_entry\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CHash_header.h",
    "content": "/**\n * @file CHash_header.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs:\n// CHASH_PARAM_NAME - name of this data structure\n// CHASH_PARAM_ENTRY - type of entry\n// CHASH_PARAM_LINK - type of entry link (usually a pointer or index to an array)\n// CHASH_PARAM_KEY - type of key\n// CHASH_PARAM_ARG - type of argument pass through to comparisons\n// CHASH_PARAM_NULL - invalid link\n// CHASH_PARAM_DEREF(arg, link) - dereference a non-null link\n// CHASH_PARAM_ENTRYHASH(arg, entry) - hash function for entries; returns size_t\n// CHASH_PARAM_KEYHASH(arg, key) - hash function for keys; returns size_t\n// CHASH_PARAM_ENTRYHASH_IS_CHEAP - define to 1 if CHASH_PARAM_ENTRYHASH is cheap (e.g. hashes are precomputed)\n// CHASH_PARAM_COMPARE_ENTRIES(arg, entry1, entry2) - compares two entries; returns 1 for equality, 0 otherwise\n// CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key1, entry2) - compares key and entry; returns 1 for equality, 0 otherwise\n// CHASH_PARAM_ENTRY_NEXT - next member in entry\n\n#ifndef BADVPN_CHASH_H\n#error CHash.h has not been included\n#endif\n\n// types\n#define CHash CHASH_PARAM_NAME\n#define CHashEntry CHASH_PARAM_ENTRY\n#define CHashLink CHASH_PARAM_LINK\n#define CHashRef MERGE(CHash, Ref)\n#define CHashArg CHASH_PARAM_ARG\n#define CHashKey CHASH_PARAM_KEY\n\n// non-object public functions\n#define CHashNullLink MERGE(CHash, NullLink)\n#define CHashNullRef MERGE(CHash, NullRef)\n#define CHashIsNullLink MERGE(CHash, IsNullLink)\n#define CHashIsNullRef MERGE(CHash, IsNullRef)\n#define CHashDerefMayNull MERGE(CHash, DerefMayNull)\n#define CHashDerefNonNull MERGE(CHash, DerefNonNull)\n\n// public functions\n#define CHash_Init MERGE(CHash, _Init)\n#define CHash_Free MERGE(CHash, _Free)\n#define CHash_Insert MERGE(CHash, _Insert)\n#define CHash_InsertMulti MERGE(CHash, _InsertMulti)\n#define CHash_Remove MERGE(CHash, _Remove)\n#define CHash_Lookup MERGE(CHash, _Lookup)\n#define CHash_GetNextEqual MERGE(CHash, _GetNextEqual)\n#define CHash_MultiplyBuckets MERGE(CHash, _MultiplyBuckets)\n#define CHash_Verify MERGE(CHash, _Verify)\n\n// private things\n#define CHash_next(entry) ((entry).ptr->CHASH_PARAM_ENTRY_NEXT)\n#define CHash_assert_valid_entry MERGE(CHash, _assert_valid_entry)\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/CHash_impl.h",
    "content": "/**\n * @file CHash_impl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"CHash_header.h\"\n\nstatic void CHash_assert_valid_entry (CHashArg arg, CHashRef entry)\n{\n    ASSERT(entry.link != CHashNullLink())\n    ASSERT(entry.ptr == CHASH_PARAM_DEREF(arg, entry.link))\n}\n\nstatic CHashLink CHashNullLink (void)\n{\n    return CHASH_PARAM_NULL;\n}\n\nstatic CHashRef CHashNullRef (void)\n{\n    CHashRef entry = {NULL, CHashNullLink()};\n    return entry;\n}\n\nstatic int CHashIsNullLink (CHashLink link)\n{\n    return (link == CHashNullLink());\n}\n\nstatic int CHashIsNullRef (CHashRef ref)\n{\n    return CHashIsNullLink(ref.link);\n}\n\nstatic CHashRef CHashDerefMayNull (CHashArg arg, CHashLink link)\n{\n    if (link == CHashNullLink()) {\n        return CHashNullRef();\n    }\n    \n    CHashRef entry = {CHASH_PARAM_DEREF(arg, link), link};\n    ASSERT(entry.ptr)\n    \n    return entry;\n}\n\nstatic CHashRef CHashDerefNonNull (CHashArg arg, CHashLink link)\n{\n    ASSERT(link != CHashNullLink())\n    \n    CHashRef entry = {CHASH_PARAM_DEREF(arg, link), link};\n    ASSERT(entry.ptr)\n    \n    return entry;\n}\n\nstatic int CHash_Init (CHash *o, size_t num_buckets)\n{\n    if (num_buckets == 0) {\n        num_buckets = 1;\n    }\n    \n    o->num_buckets = num_buckets;\n    \n    o->buckets = (CHashLink *)BAllocArray(o->num_buckets, sizeof(o->buckets[0])); \n    if (!o->buckets) {\n        return 0;\n    }\n    \n    for (size_t i = 0; i < o->num_buckets; i++) {\n        o->buckets[i] = CHashNullLink();\n    }\n    \n    return 1;\n}\n\nstatic void CHash_Free (CHash *o)\n{\n    BFree(o->buckets);\n}\n\nstatic int CHash_Insert (CHash *o, CHashArg arg, CHashRef entry, CHashRef *out_existing)\n{\n    CHash_assert_valid_entry(arg, entry);\n    \n    size_t index = CHASH_PARAM_ENTRYHASH(arg, entry) % o->num_buckets;\n    \n    CHashLink link = o->buckets[index];\n    while (link != CHashNullLink()) {\n        CHashRef cur = CHashDerefNonNull(arg, link);\n        if (CHASH_PARAM_COMPARE_ENTRIES(arg, cur, entry)) {\n            if (out_existing) {\n                *out_existing = cur;\n            }\n            return 0;\n        }\n        link = CHash_next(cur);\n    }\n    \n    CHash_next(entry) = o->buckets[index];\n    o->buckets[index] = entry.link;\n    \n    return 1;\n}\n\nstatic void CHash_InsertMulti (CHash *o, CHashArg arg, CHashRef entry)\n{\n    CHash_assert_valid_entry(arg, entry);\n    \n    size_t index = CHASH_PARAM_ENTRYHASH(arg, entry) % o->num_buckets;\n    \n    CHashRef prev = CHashNullRef();\n    CHashLink link = o->buckets[index];\n    while (link != CHashNullLink()) {\n        CHashRef cur = CHashDerefNonNull(arg, link);\n        if (CHASH_PARAM_COMPARE_ENTRIES(arg, cur, entry)) {\n            break;\n        }\n        prev = cur;\n        link = CHash_next(cur);\n    }\n    \n    if (link == CHashNullLink() || prev.link == CHashNullLink()) {\n        CHash_next(entry) = o->buckets[index];\n        o->buckets[index] = entry.link;\n    } else {\n        CHash_next(entry) = link;\n        CHash_next(prev) = entry.link;\n    }\n}\n\nstatic void CHash_Remove (CHash *o, CHashArg arg, CHashRef entry)\n{\n    CHash_assert_valid_entry(arg, entry);\n    \n    size_t index = CHASH_PARAM_ENTRYHASH(arg, entry) % o->num_buckets;\n    \n    CHashRef prev = CHashNullRef();\n    CHashLink link = o->buckets[index];\n    while (link != entry.link) {\n        CHashRef cur = CHashDerefNonNull(arg, link);\n        prev = cur;\n        link = CHash_next(cur);\n        ASSERT(link != CHashNullLink())\n    }\n    \n    if (prev.link == CHashNullLink()) {\n        o->buckets[index] = CHash_next(entry);\n    } else {\n        CHash_next(prev) = CHash_next(entry);\n    }\n}\n\nstatic CHashRef CHash_Lookup (const CHash *o, CHashArg arg, CHashKey key) \n{\n    size_t hash = CHASH_PARAM_KEYHASH(arg, key);\n    size_t index = hash % o->num_buckets;\n    \n    CHashLink link = o->buckets[index];\n    while (link != CHashNullLink()) {\n        CHashRef cur = CHashDerefNonNull(arg, link);\n#if CHASH_PARAM_ENTRYHASH_IS_CHEAP\n        if (CHASH_PARAM_ENTRYHASH(arg, cur) == hash && CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key, cur)) {\n#else\n        if (CHASH_PARAM_COMPARE_KEY_ENTRY(arg, key, cur)) {\n#endif\n            return cur;\n        }\n        link = CHash_next(cur);\n    }\n    \n    return CHashNullRef();\n}\n\nstatic CHashRef CHash_GetNextEqual (const CHash *o, CHashArg arg, CHashRef entry)\n{\n    CHash_assert_valid_entry(arg, entry);\n    \n    CHashLink next = CHash_next(entry);\n    \n    if (next == CHashNullLink()) {\n        return CHashNullRef();\n    }\n    \n    CHashRef next_ref = CHashDerefNonNull(arg, next);\n    if (!CHASH_PARAM_COMPARE_ENTRIES(arg, next_ref, entry)) {\n        return CHashNullRef();\n    }\n    \n    return next_ref;\n}\n\nstatic int CHash_MultiplyBuckets (CHash *o, CHashArg arg, int exp)\n{\n    ASSERT(exp > 0)\n    \n    size_t new_num_buckets = o->num_buckets;\n    while (exp-- > 0) {\n        if (new_num_buckets > SIZE_MAX / 2) {\n            return 0;\n        }\n        new_num_buckets *= 2;\n    }\n    \n    CHashLink *new_buckets = (CHashLink *)BReallocArray(o->buckets, new_num_buckets, sizeof(new_buckets[0]));\n    if (!new_buckets) {\n        return 0;\n    }\n    o->buckets = new_buckets;\n    \n    for (size_t i = o->num_buckets; i < new_num_buckets; i++) {\n        o->buckets[i] = CHashNullLink();\n    }\n    \n    for (size_t i = 0; i < o->num_buckets; i++) {\n        CHashRef prev = CHashNullRef();\n        CHashLink link = o->buckets[i];\n        \n        while (link != CHashNullLink()) {\n            CHashRef cur = CHashDerefNonNull(arg, link);\n            link = CHash_next(cur);\n            \n            size_t new_index = CHASH_PARAM_ENTRYHASH(arg, cur) % new_num_buckets;\n            if (new_index == i) {\n                prev = cur;\n                continue;\n            }\n            \n            if (CHashIsNullRef(prev)) {\n                o->buckets[i] = CHash_next(cur);\n            } else {\n                CHash_next(prev) = CHash_next(cur);\n            }\n            \n            CHash_next(cur) = o->buckets[new_index];\n            o->buckets[new_index] = cur.link;\n        }\n    }\n    \n    for (size_t i = o->num_buckets; i < new_num_buckets; i++) {\n        CHashLink new_bucket_link = CHashNullLink();\n        \n        CHashLink link = o->buckets[i];\n        while (link != CHashNullLink()) {\n            CHashRef cur = CHashDerefNonNull(arg, link);\n            link = CHash_next(cur);\n            \n            CHash_next(cur) = new_bucket_link;\n            new_bucket_link = cur.link;\n        }\n        \n        o->buckets[i] = new_bucket_link;\n    }\n    \n    o->num_buckets = new_num_buckets;\n    \n    return 1;\n}\n\nstatic void CHash_Verify (const CHash *o, CHashArg arg)\n{\n    ASSERT_FORCE(o->num_buckets > 0)\n    ASSERT_FORCE(o->buckets)\n    \n    for (size_t i = 0; i < o->num_buckets; i++) {\n        CHashRef cur = CHashDerefMayNull(arg, o->buckets[i]);\n        CHashRef same_first = cur;\n        \n        while (!CHashIsNullRef(cur)) {\n            size_t index = CHASH_PARAM_ENTRYHASH(arg, cur) % o->num_buckets;\n            ASSERT_FORCE(index == i)\n            \n            if (!CHASH_PARAM_COMPARE_ENTRIES(arg, cur, same_first)) {\n                same_first = cur;\n            }\n            \n            CHashRef ccur = CHashDerefNonNull(arg, o->buckets[i]);\n            while (ccur.link != same_first.link) {\n                ASSERT_FORCE(!CHASH_PARAM_COMPARE_ENTRIES(arg, ccur, cur))\n                ccur = CHashDerefMayNull(arg, CHash_next(ccur));\n            }\n            \n            cur = CHashDerefMayNull(arg, CHash_next(cur));\n        }\n    }\n}\n\n#include \"CHash_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/ChunkBuffer2.h",
    "content": "/**\n * @file ChunkBuffer2.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Circular packet buffer\n */\n\n#ifndef BADVPN_STRUCTURE_CHUNKBUFFER2_H\n#define BADVPN_STRUCTURE_CHUNKBUFFER2_H\n\n#include <stdint.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include \"misc/balign.h\"\n#include \"misc/debug.h\"\n\n#ifndef NDEBUG\n#define CHUNKBUFFER2_ASSERT_BUFFER(_buf) _ChunkBuffer2_assert_buffer(_buf);\n#define CHUNKBUFFER2_ASSERT_IO(_buf) _ChunkBuffer2_assert_io(_buf);\n#else\n#define CHUNKBUFFER2_ASSERT_BUFFER(_buf)\n#define CHUNKBUFFER2_ASSERT_IO(_buf)\n#endif\n\nstruct ChunkBuffer2_block {\n    int len;\n};\n\ntypedef struct {\n    struct ChunkBuffer2_block *buffer;\n    int size;\n    int wrap;\n    int start;\n    int used;\n    int mtu;\n    uint8_t *input_dest;\n    int input_avail;\n    uint8_t *output_dest;\n    int output_avail;\n} ChunkBuffer2;\n\n// calculates a buffer size needed to hold at least 'num' packets long at least 'chunk_len'\nstatic int ChunkBuffer2_calc_blocks (int chunk_len, int num);\n\n// initialize\nstatic void ChunkBuffer2_Init (ChunkBuffer2 *buf, struct ChunkBuffer2_block *buffer, int blocks, int mtu);\n\n// submit a packet written to the buffer\nstatic void ChunkBuffer2_SubmitPacket (ChunkBuffer2 *buf, int len);\n\n// remove the first packet\nstatic void ChunkBuffer2_ConsumePacket (ChunkBuffer2 *buf);\n\nstatic int _ChunkBuffer2_end (ChunkBuffer2 *buf)\n{\n    if (buf->used >= buf->wrap - buf->start) {\n        return (buf->used - (buf->wrap - buf->start));\n    } else {\n        return (buf->start + buf->used);\n    }\n}\n\n#ifndef NDEBUG\n\nstatic void _ChunkBuffer2_assert_buffer (ChunkBuffer2 *buf)\n{\n    ASSERT(buf->size > 0)\n    ASSERT(buf->wrap > 0)\n    ASSERT(buf->wrap <= buf->size)\n    ASSERT(buf->start >= 0)\n    ASSERT(buf->start < buf->wrap)\n    ASSERT(buf->used >= 0)\n    ASSERT(buf->used <= buf->wrap)\n    ASSERT(buf->wrap == buf->size || buf->used >= buf->wrap - buf->start)\n    ASSERT(buf->mtu >= 0)\n}\n\nstatic void _ChunkBuffer2_assert_io (ChunkBuffer2 *buf)\n{\n    // check input\n    \n    int end = _ChunkBuffer2_end(buf);\n    \n    if (buf->size - end - 1 < buf->mtu) {\n        // it will never be possible to write a MTU long packet here\n        ASSERT(!buf->input_dest)\n        ASSERT(buf->input_avail == -1)\n    } else {\n        // calculate number of free blocks\n        int free;\n        if (buf->used >= buf->wrap - buf->start) {\n            free = buf->start - end;\n        } else {\n            free = buf->size - end;\n        }\n        \n        if (free > 0) {\n            // got space at least for a header. More space will become available as packets are\n            // read from the buffer, up to MTU.\n            ASSERT(buf->input_dest == (uint8_t *)&buf->buffer[end + 1])\n            ASSERT(buf->input_avail == (free - 1) * sizeof(struct ChunkBuffer2_block))\n        } else {\n            // no space\n            ASSERT(!buf->input_dest)\n            ASSERT(buf->input_avail == -1)\n        }\n    }\n    \n    // check output\n    \n    if (buf->used > 0) {\n        int datalen = buf->buffer[buf->start].len;\n        ASSERT(datalen >= 0)\n        int blocklen = bdivide_up(datalen, sizeof(struct ChunkBuffer2_block));\n        ASSERT(blocklen <= buf->used - 1)\n        ASSERT(blocklen <= buf->wrap - buf->start - 1)\n        ASSERT(buf->output_dest == (uint8_t *)&buf->buffer[buf->start + 1])\n        ASSERT(buf->output_avail == datalen)\n    } else {\n        ASSERT(!buf->output_dest)\n        ASSERT(buf->output_avail == -1)\n    }\n}\n\n#endif\n\nstatic void _ChunkBuffer2_update_input (ChunkBuffer2 *buf)\n{\n    int end = _ChunkBuffer2_end(buf);\n    \n    if (buf->size - end - 1 < buf->mtu) {\n        // it will never be possible to write a MTU long packet here\n        buf->input_dest = NULL;\n        buf->input_avail = -1;\n        return;\n    }\n    \n    // calculate number of free blocks\n    int free;\n    if (buf->used >= buf->wrap - buf->start) {\n        free = buf->start - end;\n    } else {\n        free = buf->size - end;\n    }\n    \n    if (free > 0) {\n        // got space at least for a header. More space will become available as packets are\n        // read from the buffer, up to MTU.\n        buf->input_dest = (uint8_t *)&buf->buffer[end + 1];\n        buf->input_avail = (free - 1) * sizeof(struct ChunkBuffer2_block);\n    } else {\n        // no space\n        buf->input_dest = NULL;\n        buf->input_avail = -1;\n    }\n}\n\nstatic void _ChunkBuffer2_update_output (ChunkBuffer2 *buf)\n{\n    if (buf->used > 0) {\n        int datalen = buf->buffer[buf->start].len;\n        ASSERT(datalen >= 0)\n#ifndef NDEBUG\n        int blocklen = bdivide_up(datalen, sizeof(struct ChunkBuffer2_block));\n        ASSERT(blocklen <= buf->used - 1)\n        ASSERT(blocklen <= buf->wrap - buf->start - 1)\n#endif\n        buf->output_dest = (uint8_t *)&buf->buffer[buf->start + 1];\n        buf->output_avail = datalen;\n    } else {\n        buf->output_dest = NULL;\n        buf->output_avail = -1;\n    }\n}\n\nint ChunkBuffer2_calc_blocks (int chunk_len, int num)\n{\n    int chunk_data_blocks = bdivide_up(chunk_len, sizeof(struct ChunkBuffer2_block));\n    \n    if (chunk_data_blocks > INT_MAX - 1) {\n        return -1;\n    }\n    int chunk_blocks = 1 + chunk_data_blocks;\n    \n    if (num > INT_MAX - 1) {\n        return -1;\n    }\n    int num_chunks = num + 1;\n    \n    if (chunk_blocks > INT_MAX / num_chunks) {\n        return -1;\n    }\n    int blocks = chunk_blocks * num_chunks;\n    \n    return blocks;\n}\n\nvoid ChunkBuffer2_Init (ChunkBuffer2 *buf, struct ChunkBuffer2_block *buffer, int blocks, int mtu)\n{\n    ASSERT(blocks > 0)\n    ASSERT(mtu >= 0)\n    \n    buf->buffer = buffer;\n    buf->size = blocks;\n    buf->wrap = blocks;\n    buf->start = 0;\n    buf->used = 0;\n    buf->mtu = bdivide_up(mtu, sizeof(struct ChunkBuffer2_block));\n    \n    CHUNKBUFFER2_ASSERT_BUFFER(buf)\n    \n    _ChunkBuffer2_update_input(buf);\n    _ChunkBuffer2_update_output(buf);\n    \n    CHUNKBUFFER2_ASSERT_IO(buf)\n}\n\nvoid ChunkBuffer2_SubmitPacket (ChunkBuffer2 *buf, int len)\n{\n    ASSERT(buf->input_dest)\n    ASSERT(len >= 0)\n    ASSERT(len <= buf->input_avail)\n    \n    CHUNKBUFFER2_ASSERT_BUFFER(buf)\n    CHUNKBUFFER2_ASSERT_IO(buf)\n    \n    int end = _ChunkBuffer2_end(buf);\n    int blocklen = bdivide_up(len, sizeof(struct ChunkBuffer2_block));\n    \n    ASSERT(blocklen <= buf->size - end - 1)\n    ASSERT(buf->used < buf->wrap - buf->start || blocklen <= buf->start - end - 1)\n    \n    buf->buffer[end].len = len;\n    buf->used += 1 + blocklen;\n    \n    if (buf->used <= buf->wrap - buf->start && buf->mtu > buf->size - (end + 1 + blocklen) - 1) {\n        buf->wrap = end + 1 + blocklen;\n    }\n    \n    CHUNKBUFFER2_ASSERT_BUFFER(buf)\n    \n    // update input\n    _ChunkBuffer2_update_input(buf);\n    \n    // update output\n    if (buf->used == 1 + blocklen) {\n        _ChunkBuffer2_update_output(buf);\n    }\n    \n    CHUNKBUFFER2_ASSERT_IO(buf)\n}\n\nvoid ChunkBuffer2_ConsumePacket (ChunkBuffer2 *buf)\n{\n    ASSERT(buf->output_dest)\n    \n    CHUNKBUFFER2_ASSERT_BUFFER(buf)\n    CHUNKBUFFER2_ASSERT_IO(buf)\n    \n    ASSERT(1 <= buf->wrap - buf->start)\n    ASSERT(1 <= buf->used)\n    \n    int blocklen = bdivide_up(buf->buffer[buf->start].len, sizeof(struct ChunkBuffer2_block));\n    \n    ASSERT(blocklen <= buf->wrap - buf->start - 1)\n    ASSERT(blocklen <= buf->used - 1)\n    \n    int data_wrapped = (buf->used >= buf->wrap - buf->start);\n    \n    buf->start += 1 + blocklen;\n    buf->used -= 1 + blocklen;\n    if (buf->start == buf->wrap) {\n        buf->start = 0;\n        buf->wrap = buf->size;\n    }\n    \n    CHUNKBUFFER2_ASSERT_BUFFER(buf)\n    \n    // update input\n    if (data_wrapped) {\n        _ChunkBuffer2_update_input(buf);\n    }\n    \n    // update output\n    _ChunkBuffer2_update_output(buf);\n    \n    CHUNKBUFFER2_ASSERT_IO(buf)\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/IndexedList.h",
    "content": "/**\n * @file IndexedList.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * A data structure similar to a list, but with efficient index-based access.\n */\n\n#ifndef BADVPN_INDEXEDLIST_H\n#define BADVPN_INDEXEDLIST_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include <misc/offset.h>\n#include <misc/debug.h>\n#include <structure/CAvl.h>\n\ntypedef struct IndexedList_s IndexedList;\ntypedef struct IndexedListNode_s IndexedListNode;\n\ntypedef IndexedListNode *IndexedList__tree_link;\n\n#include \"IndexedList_tree.h\"\n#include <structure/CAvl_decl.h>\n\nstruct IndexedList_s {\n    IndexedList__Tree tree;\n};\n\nstruct IndexedListNode_s {\n    IndexedListNode *tree_child[2];\n    IndexedListNode *tree_parent;\n    int8_t tree_balance;\n    uint64_t tree_count;\n};\n\n/**\n * Initializes the indexed list.\n * \n * @param o uninitialized list object to initialize\n */\nstatic void IndexedList_Init (IndexedList *o);\n\n/**\n * Inserts a node into the indexed list.\n * \n * @param o indexed list to insert into\n * @param node uninitialized node to insert\n * @param index index to insert at (starting with zero). Any existing elements\n *              at or after this index will be shifted forward, i.e. their\n *              indices will be incremented by one. Must be <=count.\n */\nstatic void IndexedList_InsertAt (IndexedList *o, IndexedListNode *node, uint64_t index);\n\n/**\n * Removes a nove from the indexed list.\n * \n * @param o indexed list to remove from\n * @param node node in the list to remove\n */\nstatic void IndexedList_Remove (IndexedList *o, IndexedListNode *node);\n\n/**\n * Returns the number of nodes in the indexed list.\n * \n * @param o indexed list\n * @return number of nodes\n */\nstatic uint64_t IndexedList_Count (IndexedList *o);\n\n/**\n * Returns the index of a node in the indexed list.\n * \n * @param o indexed list\n * @param node node in the list to get index of\n * @return index of the node\n */\nstatic uint64_t IndexedList_IndexOf (IndexedList *o, IndexedListNode *node);\n\n/**\n * Returns the node at the specified index in the indexed list.\n * \n * @param o indexed list\n * @param index index of the node to return. Must be < count.\n * @return node at the specified index\n */\nstatic IndexedListNode * IndexedList_GetAt (IndexedList *o, uint64_t index);\n\n/**\n * Returns the first node, or NULL if the list is empty.\n * \n * @param o indexed list\n * @return first node, or NULL\n */\nstatic IndexedListNode * IndexedList_GetFirst (IndexedList *o);\n\n/**\n * Returns the last node, or NULL if the list is empty.\n * \n * @param o indexed list\n * @return last node, or NULL\n */\nstatic IndexedListNode * IndexedList_GetLast (IndexedList *o);\n\n/**\n * Returns the next node of a given node, or NULL this is the last node.\n * \n * @param o indexed list\n * @param node existing node\n * @return next node, or NULL\n */\nstatic IndexedListNode * IndexedList_GetNext (IndexedList *o, IndexedListNode *node);\n\n/**\n * Returns the previous node of a given node, or NULL this is the first node.\n * \n * @param o indexed list\n * @param node existing node\n * @return previous node, or NULL\n */\nstatic IndexedListNode * IndexedList_GetPrev (IndexedList *o, IndexedListNode *node);\n\n#include \"IndexedList_tree.h\"\n#include <structure/CAvl_impl.h>\n\nstatic IndexedListNode * IndexedList__deref (IndexedList__TreeRef ref)\n{\n    return ref.link;\n}\n\nstatic void IndexedList_Init (IndexedList *o)\n{\n    IndexedList__Tree_Init(&o->tree);\n}\n\nstatic void IndexedList_InsertAt (IndexedList *o, IndexedListNode *node, uint64_t index)\n{\n    ASSERT(index <= IndexedList__Tree_Count(&o->tree, 0))\n    ASSERT(IndexedList__Tree_Count(&o->tree, 0) < UINT64_MAX - 1)\n    \n    uint64_t orig_count = IndexedList__Tree_Count(&o->tree, 0);\n    B_USE(orig_count)\n    \n    IndexedList__Tree_InsertAt(&o->tree, 0, IndexedList__TreeDeref(0, node), index);\n    \n    ASSERT(IndexedList__Tree_IndexOf(&o->tree, 0, IndexedList__TreeDeref(0, node)) == index)\n    ASSERT(IndexedList__Tree_Count(&o->tree, 0) == orig_count + 1)\n}\n\nstatic void IndexedList_Remove (IndexedList *o, IndexedListNode *node)\n{\n    IndexedList__Tree_Remove(&o->tree, 0, IndexedList__TreeDeref(0, node));\n}\n\nstatic uint64_t IndexedList_Count (IndexedList *o)\n{\n    return IndexedList__Tree_Count(&o->tree, 0);\n}\n\nstatic uint64_t IndexedList_IndexOf (IndexedList *o, IndexedListNode *node)\n{\n    return IndexedList__Tree_IndexOf(&o->tree, 0, IndexedList__TreeDeref(0, node));\n}\n\nstatic IndexedListNode * IndexedList_GetAt (IndexedList *o, uint64_t index)\n{\n    ASSERT(index < IndexedList__Tree_Count(&o->tree, 0))\n    \n    IndexedList__TreeRef ref = IndexedList__Tree_GetAt(&o->tree, 0, index);\n    ASSERT(!IndexedList__TreeIsNullRef(ref))\n    \n    return ref.ptr;\n}\n\nstatic IndexedListNode * IndexedList_GetFirst (IndexedList *o)\n{\n    return IndexedList__deref(IndexedList__Tree_GetFirst(&o->tree, 0));\n}\n\nstatic IndexedListNode * IndexedList_GetLast (IndexedList *o)\n{\n    return IndexedList__deref(IndexedList__Tree_GetLast(&o->tree, 0));\n}\n\nstatic IndexedListNode * IndexedList_GetNext (IndexedList *o, IndexedListNode *node)\n{\n    ASSERT(node)\n    \n    return IndexedList__deref(IndexedList__Tree_GetNext(&o->tree, 0, IndexedList__TreeDeref(0, node)));\n}\n\nstatic IndexedListNode * IndexedList_GetPrev (IndexedList *o, IndexedListNode *node)\n{\n    ASSERT(node)\n    \n    return IndexedList__deref(IndexedList__Tree_GetPrev(&o->tree, 0, IndexedList__TreeDeref(0, node)));\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/IndexedList_tree.h",
    "content": "#define CAVL_PARAM_NAME IndexedList__Tree\n#define CAVL_PARAM_FEATURE_COUNTS 1\n#define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 1\n#define CAVL_PARAM_FEATURE_NOKEYS 0\n#define CAVL_PARAM_TYPE_ENTRY IndexedListNode\n#define CAVL_PARAM_TYPE_LINK IndexedList__tree_link\n#define CAVL_PARAM_TYPE_ARG int\n#define CAVL_PARAM_TYPE_COUNT uint64_t\n#define CAVL_PARAM_VALUE_COUNT_MAX UINT64_MAX\n#define CAVL_PARAM_VALUE_NULL ((IndexedList__tree_link)NULL)\n#define CAVL_PARAM_FUN_DEREF(arg, link) (link)\n#define CAVL_PARAM_MEMBER_CHILD tree_child\n#define CAVL_PARAM_MEMBER_BALANCE tree_balance\n#define CAVL_PARAM_MEMBER_PARENT tree_parent\n#define CAVL_PARAM_MEMBER_COUNT tree_count\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/LinkedList0.h",
    "content": "/**\n * @file LinkedList0.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Very simple doubly linked list, with only a 'first' pointer an no 'last'\n * pointer.\n */\n\n#ifndef BADVPN_STRUCTURE_LINKEDLIST0_H\n#define BADVPN_STRUCTURE_LINKEDLIST0_H\n\n#include <stddef.h>\n\n#include <misc/debug.h>\n\n/**\n * Linked list node.\n */\ntypedef struct LinkedList0Node_t\n{\n    struct LinkedList0Node_t *p;\n    struct LinkedList0Node_t *n;\n} LinkedList0Node;\n\n/**\n * Simple doubly linked list.\n */\ntypedef struct\n{\n    LinkedList0Node *first;\n} LinkedList0;\n\n/**\n * Initializes the linked list.\n * \n * @param list list to initialize\n */\nstatic void LinkedList0_Init (LinkedList0 *list);\n\n/**\n * Determines if the list is empty.\n * \n * @param list the list\n * @return 1 if empty, 0 if not\n */\nstatic int LinkedList0_IsEmpty (LinkedList0 *list);\n\n/**\n * Returns the first node of the list.\n * \n * @param list the list\n * @return first node of the list, or NULL if the list is empty\n */\nstatic LinkedList0Node * LinkedList0_GetFirst (LinkedList0 *list);\n\n/**\n * Inserts a node to the beginning of the list.\n * \n * @param list the list\n * @param node uninitialized node to insert\n */\nstatic void LinkedList0_Prepend (LinkedList0 *list, LinkedList0Node *node);\n\n/**\n * Inserts a node before a given node.\n * \n * @param list the list\n * @param node uninitialized node to insert\n * @param target node in the list to insert before\n */\nstatic void LinkedList0_InsertBefore (LinkedList0 *list, LinkedList0Node *node, LinkedList0Node *target);\n\n/**\n * Inserts a node after a given node.\n * \n * @param list the list\n * @param node uninitialized node to insert\n * @param target node in the list to insert after\n */\nstatic void LinkedList0_InsertAfter (LinkedList0 *list, LinkedList0Node *node, LinkedList0Node *target);\n\n/**\n * Removes a node from the list.\n * \n * @param list the list\n * @param node node to remove\n */\nstatic void LinkedList0_Remove (LinkedList0 *list, LinkedList0Node *node);\n\n/**\n * Returns the next node of a given node.\n * \n * @param node reference node\n * @return next node, or NULL if none\n */\nstatic LinkedList0Node * LinkedList0Node_Next (LinkedList0Node *node);\n\n/**\n * Returns the previous node of a given node.\n * \n * @param node reference node\n * @return previous node, or NULL if none\n */\nstatic LinkedList0Node * LinkedList0Node_Prev (LinkedList0Node *node);\n\nvoid LinkedList0_Init (LinkedList0 *list)\n{\n    list->first = NULL;\n}\n\nint LinkedList0_IsEmpty (LinkedList0 *list)\n{\n    return (!list->first);\n}\n\nLinkedList0Node * LinkedList0_GetFirst (LinkedList0 *list)\n{\n    return (list->first);\n}\n\nvoid LinkedList0_Prepend (LinkedList0 *list, LinkedList0Node *node)\n{\n    node->p = NULL;\n    node->n = list->first;\n    if (list->first) {\n        list->first->p = node;\n    }\n    list->first = node;\n}\n\nvoid LinkedList0_InsertBefore (LinkedList0 *list, LinkedList0Node *node, LinkedList0Node *target)\n{\n    node->p = target->p;\n    node->n = target;\n    if (target->p) {\n        target->p->n = node;\n    } else {\n        list->first = node;\n    }\n    target->p = node;\n}\n\nvoid LinkedList0_InsertAfter (LinkedList0 *list, LinkedList0Node *node, LinkedList0Node *target)\n{\n    node->p = target;\n    node->n = target->n;\n    if (target->n) {\n        target->n->p = node;\n    }\n    target->n = node;\n}\n\nvoid LinkedList0_Remove (LinkedList0 *list, LinkedList0Node *node)\n{\n    // remove from list\n    if (node->p) {\n        node->p->n = node->n;\n    } else {\n        list->first = node->n;\n    }\n    if (node->n) {\n        node->n->p = node->p;\n    }\n}\n\nLinkedList0Node * LinkedList0Node_Next (LinkedList0Node *node)\n{\n    return node->n;\n}\n\nLinkedList0Node * LinkedList0Node_Prev (LinkedList0Node *node)\n{\n    return node->p;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/LinkedList1.h",
    "content": "/**\n * @file LinkedList1.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Simple doubly linked list.\n */\n\n#ifndef BADVPN_STRUCTURE_LINKEDLIST1_H\n#define BADVPN_STRUCTURE_LINKEDLIST1_H\n\n#include <stddef.h>\n\n#include \"misc/debug.h\"\n\n/**\n * Linked list node.\n */\ntypedef struct LinkedList1Node_t\n{\n    struct LinkedList1Node_t *p;\n    struct LinkedList1Node_t *n;\n} LinkedList1Node;\n\n/**\n * Simple doubly linked list.\n */\ntypedef struct\n{\n    LinkedList1Node *first;\n    LinkedList1Node *last;\n} LinkedList1;\n\n/**\n * Initializes the linked list.\n * \n * @param list list to initialize\n */\nstatic void LinkedList1_Init (LinkedList1 *list);\n\n/**\n * Determines if the list is empty.\n * \n * @param list the list\n * @return 1 if empty, 0 if not\n */\nstatic int LinkedList1_IsEmpty (LinkedList1 *list);\n\n/**\n * Returns the first node of the list.\n * \n * @param list the list\n * @return first node of the list, or NULL if the list is empty\n */\nstatic LinkedList1Node * LinkedList1_GetFirst (LinkedList1 *list);\n\n/**\n * Returns the last node of the list.\n * \n * @param list the list\n * @return last node of the list, or NULL if the list is empty\n */\nstatic LinkedList1Node * LinkedList1_GetLast (LinkedList1 *list);\n\n/**\n * Inserts a node to the beginning of the list.\n * \n * @param list the list\n * @param node uninitialized node to insert\n */\nstatic void LinkedList1_Prepend (LinkedList1 *list, LinkedList1Node *node);\n\n/**\n * Inserts a node to the end of the list.\n * \n * @param list the list\n * @param node uninitialized node to insert\n */\nstatic void LinkedList1_Append (LinkedList1 *list, LinkedList1Node *node);\n\n/**\n * Inserts a node before a given node.\n * \n * @param list the list\n * @param node uninitialized node to insert\n * @param target node in the list to insert before\n */\nstatic void LinkedList1_InsertBefore (LinkedList1 *list, LinkedList1Node *node, LinkedList1Node *target);\n\n/**\n * Inserts a node after a given node.\n * \n * @param list the list\n * @param node uninitialized node to insert\n * @param target node in the list to insert after\n */\nstatic void LinkedList1_InsertAfter (LinkedList1 *list, LinkedList1Node *node, LinkedList1Node *target);\n\n/**\n * Removes a node from the list.\n * \n * @param list the list\n * @param node node to remove\n */\nstatic void LinkedList1_Remove (LinkedList1 *list, LinkedList1Node *node);\n\n/**\n * Inserts the nodes in the list \\a ins_list into this list, after the node \\a target.\n * If \\a target is NULL, the nodes are inserted to the beginning.\n * Note that because the first and last node in \\a ins_list are modified\n * (unless the list is empty), \\a ins_list is invalidated and must no longer\n * be used to access the inserted nodes.\n */\nstatic void LinkedList1_InsertListAfter (LinkedList1 *list, LinkedList1 ins_list, LinkedList1Node *target);\n\n/**\n * Returns the next node of a given node.\n * \n * @param node reference node\n * @return next node, or NULL if none\n */\nstatic LinkedList1Node * LinkedList1Node_Next (LinkedList1Node *node);\n\n/**\n * Returns the previous node of a given node.\n * \n * @param node reference node\n * @return previous node, or NULL if none\n */\nstatic LinkedList1Node * LinkedList1Node_Prev (LinkedList1Node *node);\n\nvoid LinkedList1_Init (LinkedList1 *list)\n{\n    list->first = NULL;\n    list->last = NULL;\n}\n\nint LinkedList1_IsEmpty (LinkedList1 *list)\n{\n    return (list->first) == NULL;\n}\n\nLinkedList1Node * LinkedList1_GetFirst (LinkedList1 *list)\n{\n    return (list->first);\n}\n\nLinkedList1Node * LinkedList1_GetLast (LinkedList1 *list)\n{\n    return (list->last);\n}\n\nvoid LinkedList1_Prepend (LinkedList1 *list, LinkedList1Node *node)\n{\n    node->p = NULL;\n    node->n = list->first;\n    if (list->first) {\n        list->first->p = node;\n    } else {\n        list->last = node;\n    }\n    list->first = node;\n}\n\nvoid LinkedList1_Append (LinkedList1 *list, LinkedList1Node *node)\n{\n    node->p = list->last;\n    node->n = NULL;\n    if (list->last) {\n        list->last->n = node;\n    } else {\n        list->first = node;\n    }\n    list->last = node;\n}\n\nvoid LinkedList1_InsertBefore (LinkedList1 *list, LinkedList1Node *node, LinkedList1Node *target)\n{\n    node->p = target->p;\n    node->n = target;\n    if (target->p) {\n        target->p->n = node;\n    } else {\n        list->first = node;\n    }\n    target->p = node;\n}\n\nvoid LinkedList1_InsertAfter (LinkedList1 *list, LinkedList1Node *node, LinkedList1Node *target)\n{\n    node->p = target;\n    node->n = target->n;\n    if (target->n) {\n        target->n->p = node;\n    } else {\n        list->last = node;\n    }\n    target->n = node;\n}\n\nvoid LinkedList1_Remove (LinkedList1 *list, LinkedList1Node *node)\n{\n    // remove from list\n    if (node->p) {\n        node->p->n = node->n;\n    } else {\n        list->first = node->n;\n    }\n    if (node->n) {\n        node->n->p = node->p;\n    } else {\n        list->last = node->p;\n    }\n}\n\nvoid LinkedList1_InsertListAfter (LinkedList1 *list, LinkedList1 ins_list, LinkedList1Node *target)\n{\n    if (!ins_list.first) {\n        return;\n    }\n    \n    LinkedList1Node *t_next = (target ? target->n : list->first);\n    \n    ins_list.first->p = target;\n    ins_list.last->n = t_next;\n    \n    if (target) {\n        target->n = ins_list.first;\n    } else {\n        list->first = ins_list.first;\n    }\n    \n    if (t_next) {\n        t_next->p = ins_list.last;\n    } else {\n        list->last = ins_list.last;\n    }\n}\n\nLinkedList1Node * LinkedList1Node_Next (LinkedList1Node *node)\n{\n    return node->n;\n}\n\nLinkedList1Node * LinkedList1Node_Prev (LinkedList1Node *node)\n{\n    return node->p;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/LinkedList3.h",
    "content": "/**\n * @file LinkedList3.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Doubly linked list that support multiple iterations and removing\n * aritrary elements during iteration, without a central object to\n * represent the list.\n */\n\n#ifndef BADVPN_STRUCTURE_LINKEDLIST3_H\n#define BADVPN_STRUCTURE_LINKEDLIST3_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include <misc/debug.h>\n\nstruct _LinkedList3Iterator;\n\n/**\n * Linked list node.\n */\ntypedef struct _LinkedList3Node {\n    struct _LinkedList3Node *p;\n    struct _LinkedList3Node *n;\n    struct _LinkedList3Iterator *it;\n} LinkedList3Node;\n\n/**\n * Linked list iterator.\n */\ntypedef struct _LinkedList3Iterator {\n    int8_t dir;\n    struct _LinkedList3Node *e;\n    struct _LinkedList3Iterator *pi;\n    struct _LinkedList3Iterator *ni;\n} LinkedList3Iterator;\n\n/**\n * Initializes a list node to form a new list consisting of a\n * single node.\n * \n * @param node list node structure to initialize. The node must remain\n *        available until it is freed with {@link LinkedList3Node_Free},\n *        or the list is no longer required.\n */\nstatic void LinkedList3Node_InitLonely (LinkedList3Node *node);\n\n/**\n * Initializes a list node to go after an existing node.\n * \n * @param node list node structure to initialize. The node must remain\n *        available until it is freed with {@link LinkedList3Node_Free},\n *        or the list is no longer required.\n * @param ref existing list node\n */\nstatic void LinkedList3Node_InitAfter (LinkedList3Node *node, LinkedList3Node *ref);\n\n/**\n * Initializes a list node to go before an existing node.\n * \n * @param node list node structure to initialize. The node must remain\n *        available until it is freed with {@link LinkedList3Node_Free},\n *        or the list is no longer required.\n * @param ref existing list node\n */\nstatic void LinkedList3Node_InitBefore (LinkedList3Node *node, LinkedList3Node *ref);\n\n/**\n * Frees a list node, removing it a list (if there were other nodes\n * in the list).\n * \n * @param node list node to free\n */\nstatic void LinkedList3Node_Free (LinkedList3Node *node);\n\n/**\n * Determines if a list node is a single node in a list.\n * \n * @param node list node\n * @return 1 if the node ia a single node, 0 if not\n */\nstatic int LinkedList3Node_IsLonely (LinkedList3Node *node);\n\n/**\n * Returnes the node preceding this node (if there is one),\n * the node following this node (if there is one), or NULL,\n * respectively.\n * \n * @param node list node\n * @return neighbour node or NULL if none\n */\nstatic LinkedList3Node * LinkedList3Node_PrevOrNext (LinkedList3Node *node);\n\n/**\n * Returnes the node following this node (if there is one),\n * the node preceding this node (if there is one), or NULL,\n * respectively.\n * \n * @param node list node\n * @return neighbour node or NULL if none\n */\nstatic LinkedList3Node * LinkedList3Node_NextOrPrev (LinkedList3Node *node);\n\n/**\n * Returns the node preceding this node, or NULL if there is none.\n * \n * @param node list node\n * @return left neighbour, or NULL if none\n */\nstatic LinkedList3Node * LinkedList3Node_Prev (LinkedList3Node *node);\n\n/**\n * Returns the node following this node, or NULL if there is none.\n * \n * @param node list node\n * @return right neighbour, or NULL if none\n */\nstatic LinkedList3Node * LinkedList3Node_Next (LinkedList3Node *node);\n\n/**\n * Returns the first node in the list which this node is part of.\n * It is found by iterating the list from this node to the beginning.\n * \n * @param node list node\n * @return first node in the list\n */\nstatic LinkedList3Node * LinkedList3Node_First (LinkedList3Node *node);\n\n/**\n * Returns the last node in the list which this node is part of.\n * It is found by iterating the list from this node to the end.\n * \n * @param node list node\n * @return last node in the list\n */\nstatic LinkedList3Node * LinkedList3Node_Last (LinkedList3Node *node);\n\n/**\n * Initializes a linked list iterator.\n * The iterator structure must remain available until either of these occurs:\n *   - the list is no longer needed, or\n *   - the iterator is freed with {@link LinkedList3Iterator_Free}, or\n *   - the iterator reaches the end of iteration.\n * \n * @param it uninitialized iterator to initialize\n * @param e initial position of the iterator. NULL for end of iteration.\n * @param dir direction of iteration. Must be 1 (forward) or -1 (backward).\n */\nstatic void LinkedList3Iterator_Init (LinkedList3Iterator *it, LinkedList3Node *e, int dir);\n\n/**\n * Frees a linked list iterator.\n * \n * @param it iterator to free\n */\nstatic void LinkedList3Iterator_Free (LinkedList3Iterator *it);\n\n/**\n * Moves the iterator one node forward or backward (depending on its direction), or,\n * if it's at the last or first node (depending on the direction), it reaches\n * the end of iteration, or, if it's at the end of iteration, it remains there.\n * Returns the the previous position.\n * \n * @param it the iterator\n * @return node on the position of iterator before it was (possibly) moved, or NULL\n *         if it was at the end of iteration\n */\nstatic LinkedList3Node * LinkedList3Iterator_Next (LinkedList3Iterator *it);\n\nvoid LinkedList3Node_InitLonely (LinkedList3Node *node)\n{\n    node->p = NULL;\n    node->n = NULL;\n    node->it = NULL;\n}\n\nvoid LinkedList3Node_InitAfter (LinkedList3Node *node, LinkedList3Node *ref)\n{\n    ASSERT(ref)\n    \n    node->p = ref;\n    node->n = ref->n;\n    ref->n = node;\n    if (node->n) {\n        node->n->p = node;\n    }\n    node->it = NULL;\n}\n\nvoid LinkedList3Node_InitBefore (LinkedList3Node *node, LinkedList3Node *ref)\n{\n    ASSERT(ref)\n    \n    node->n = ref;\n    node->p = ref->p;\n    ref->p = node;\n    if (node->p) {\n        node->p->n = node;\n    }\n    node->it = NULL;\n}\n\nvoid LinkedList3Node_Free (LinkedList3Node *node)\n{\n    // jump iterators\n    while (node->it) {\n        LinkedList3Iterator_Next(node->it);\n    }\n    \n    if (node->p) {\n        node->p->n = node->n;\n    }\n    if (node->n) {\n        node->n->p = node->p;\n    }\n}\n\nint LinkedList3Node_IsLonely (LinkedList3Node *node)\n{\n    return (!node->p && !node->n);\n}\n\nLinkedList3Node * LinkedList3Node_PrevOrNext (LinkedList3Node *node)\n{\n    if (node->p) {\n        return node->p;\n    }\n    if (node->n) {\n        return node->n;\n    }\n    return NULL;\n}\n\nLinkedList3Node * LinkedList3Node_NextOrPrev (LinkedList3Node *node)\n{\n    if (node->n) {\n        return node->n;\n    }\n    if (node->p) {\n        return node->p;\n    }\n    return NULL;\n}\n\nLinkedList3Node * LinkedList3Node_Prev (LinkedList3Node *node)\n{\n    return node->p;\n}\n\nLinkedList3Node * LinkedList3Node_Next (LinkedList3Node *node)\n{\n    return node->n;\n}\n\nLinkedList3Node * LinkedList3Node_First (LinkedList3Node *node)\n{\n    while (node->p) {\n        node = node->p;\n    }\n    \n    return node;\n}\n\nLinkedList3Node * LinkedList3Node_Last (LinkedList3Node *node)\n{\n    while (node->n) {\n        node = node->n;\n    }\n    \n    return node;\n}\n\nvoid LinkedList3Iterator_Init (LinkedList3Iterator *it, LinkedList3Node *e, int dir)\n{\n    ASSERT(dir == -1 || dir == 1)\n    \n    it->dir = dir;\n    it->e = e;\n    \n    if (e) {\n        // link into node's iterator list\n        it->pi = NULL;\n        it->ni = e->it;\n        if (e->it) {\n            e->it->pi = it;\n        }\n        e->it = it;\n    }\n}\n\nvoid LinkedList3Iterator_Free (LinkedList3Iterator *it)\n{\n    if (it->e) {\n        // remove from node's iterator list\n        if (it->ni) {\n            it->ni->pi = it->pi;\n        }\n        if (it->pi) {\n            it->pi->ni = it->ni;\n        } else {\n            it->e->it = it->ni;\n        }\n    }\n}\n\nLinkedList3Node * LinkedList3Iterator_Next (LinkedList3Iterator *it)\n{\n    // remember original entry\n    LinkedList3Node *orig = it->e;\n    \n    // jump to next entry\n    if (it->e) {\n        // get next entry\n        LinkedList3Node *next = NULL; // to remove warning\n        switch (it->dir) {\n            case 1:\n                next = it->e->n;\n                break;\n            case -1:\n                next = it->e->p;\n                break;\n            default:\n                ASSERT(0);\n        }\n        // destroy interator\n        LinkedList3Iterator_Free(it);\n        // re-initialize at next entry\n        LinkedList3Iterator_Init(it, next, it->dir);\n    }\n    \n    // return original entry\n    return orig;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl.h",
    "content": "/**\n * @file SAvl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_SAVL_H\n#define BADVPN_SAVL_H\n\n#include <stddef.h>\n#include <stdint.h>\n\n#include \"structure/CAvl.h\"\n#include \"misc/merge.h\"\n#include \"misc/debug.h\"\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl_decl.h",
    "content": "/**\n * @file SAvl_decl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"SAvl_header.h\"\n\ntypedef SAvlEntry *SAvl__TreeLink;\n\n#include \"SAvl_tree.h\"\n#include \"structure/CAvl_decl.h\"\n\ntypedef struct {\n    SAvl__Tree tree;\n} SAvl;\n\ntypedef struct {\n    SAvlEntry *child[2];\n    SAvlEntry *parent;\n    int8_t balance;\n#if SAVL_PARAM_FEATURE_COUNTS\n    SAvlCount count;\n#endif\n} SAvlNode;\n\nstatic void SAvl_Init (SAvl *o);\nstatic int SAvl_Insert (SAvl *o, SAvlArg arg, SAvlEntry *entry, SAvlEntry **out_existing);\nstatic void SAvl_Remove (SAvl *o, SAvlArg arg, SAvlEntry *entry);\n#if !SAVL_PARAM_FEATURE_NOKEYS\nstatic SAvlEntry * SAvl_Lookup (const SAvl *o, SAvlArg arg, SAvlKey key);\nstatic SAvlEntry * SAvl_LookupExact (const SAvl *o, SAvlArg arg, SAvlKey key);\nstatic SAvlEntry * SAvl_GetFirstGreater (const SAvl *o, SAvlArg arg, SAvlKey key);\nstatic SAvlEntry * SAvl_GetLastLesser (const SAvl *o, SAvlArg arg, SAvlKey key);\nstatic SAvlEntry * SAvl_GetFirstGreaterEqual (const SAvl *o, SAvlArg arg, SAvlKey key);\nstatic SAvlEntry * SAvl_GetLastLesserEqual (const SAvl *o, SAvlArg arg, SAvlKey key);\n#endif\nstatic SAvlEntry * SAvl_GetFirst (const SAvl *o, SAvlArg arg);\nstatic SAvlEntry * SAvl_GetLast (const SAvl *o, SAvlArg arg);\nstatic SAvlEntry * SAvl_GetNext (const SAvl *o, SAvlArg arg, SAvlEntry *entry);\nstatic SAvlEntry * SAvl_GetPrev (const SAvl *o, SAvlArg arg, SAvlEntry *entry);\nstatic int SAvl_IsEmpty (const SAvl *o);\nstatic void SAvl_Verify (const SAvl *o, SAvlArg arg);\n#if SAVL_PARAM_FEATURE_COUNTS\nstatic SAvlCount SAvl_Count (const SAvl *o, SAvlArg arg);\nstatic SAvlCount SAvl_IndexOf (const SAvl *o, SAvlArg arg, SAvlEntry *entry);\nstatic SAvlEntry * SAvl_GetAt (const SAvl *o, SAvlArg arg, SAvlCount index);\n#endif\n\n#include \"SAvl_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl_footer.h",
    "content": "/**\n * @file SAvl_footer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#undef SAVL_PARAM_NAME\n#undef SAVL_PARAM_FEATURE_COUNTS\n#undef SAVL_PARAM_FEATURE_NOKEYS\n#undef SAVL_PARAM_TYPE_ENTRY\n#undef SAVL_PARAM_TYPE_KEY\n#undef SAVL_PARAM_TYPE_ARG\n#undef SAVL_PARAM_TYPE_COUNT\n#undef SAVL_PARAM_VALUE_COUNT_MAX\n#undef SAVL_PARAM_FUN_COMPARE_ENTRIES\n#undef SAVL_PARAM_FUN_COMPARE_KEY_ENTRY\n#undef SAVL_PARAM_MEMBER_NODE\n\n#undef SAvl\n#undef SAvlEntry\n#undef SAvlArg\n#undef SAvlKey\n#undef SAvlCount\n#undef SAvlNode\n\n#undef SAvl_Init\n#undef SAvl_Insert\n#undef SAvl_Remove\n#undef SAvl_Lookup\n#undef SAvl_LookupExact\n#undef SAvl_GetFirstGreater\n#undef SAvl_GetLastLesser\n#undef SAvl_GetFirstGreaterEqual\n#undef SAvl_GetLastLesserEqual\n#undef SAvl_GetFirst\n#undef SAvl_GetLast\n#undef SAvl_GetNext\n#undef SAvl_GetPrev\n#undef SAvl_IsEmpty\n#undef SAvl_Verify\n#undef SAvl_Count\n#undef SAvl_IndexOf\n#undef SAvl_GetAt\n\n#undef SAvl__Tree\n#undef SAvl__TreeRef\n#undef SAvl__TreeLink\n#undef SAvl__TreeDeref\n#undef SAvl__Tree_Init\n#undef SAvl__Tree_Insert\n#undef SAvl__Tree_Remove\n#undef SAvl__Tree_Lookup\n#undef SAvl__Tree_LookupExact\n#undef SAvl__Tree_GetFirstGreater\n#undef SAvl__Tree_GetLastLesser\n#undef SAvl__Tree_GetFirstGreaterEqual\n#undef SAvl__Tree_GetLastLesserEqual\n#undef SAvl__Tree_GetFirst\n#undef SAvl__Tree_GetLast\n#undef SAvl__Tree_GetNext\n#undef SAvl__Tree_GetPrev\n#undef SAvl__Tree_IsEmpty\n#undef SAvl__Tree_Verify\n#undef SAvl__Tree_Count\n#undef SAvl__Tree_IndexOf\n#undef SAvl__Tree_GetAt\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl_header.h",
    "content": "/**\n * @file SAvl_header.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs. All types must be typedef names unless stated otherwise.\n// SAVL_PARAM_NAME - name of this data structure\n// SAVL_PARAM_FEATURE_COUNTS - whether to keep count information (0 or 1)\n// SAVL_PARAM_FEATURE_NOKEYS - define to 1 if there is no need for a lookup operation\n// SAVL_PARAM_TYPE_ENTRY - type of entry. This can also be a struct (e.g.: struct Foo).\n// SAVL_PARAM_TYPE_KEY - type of key (ignored if SAVL_PARAM_FEATURE_NOKEYS)\n// SAVL_PARAM_TYPE_ARG - type of argument pass through to callbacks\n// SAVL_PARAM_TYPE_COUNT - type of count (only if SAVL_PARAM_FEATURE_COUNTS)\n// SAVL_PARAM_VALUE_COUNT_MAX - maximum value of count (of type SAVL_PARAM_TYPE_COUNT) (only if SAVL_PARAM_FEATURE_COUNTS)\n// SAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) - compare two entries; returns -1/0/1\n// SAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) - compare key and entry; returns -1/0/1 (ignored if SAVL_PARAM_FEATURE_NOKEYS) \n// SAVL_PARAM_MEMBER_NODE - node member in entry\n\n// types\n#define SAvl SAVL_PARAM_NAME\n#define SAvlEntry SAVL_PARAM_TYPE_ENTRY\n#define SAvlArg SAVL_PARAM_TYPE_ARG\n#define SAvlKey SAVL_PARAM_TYPE_KEY\n#define SAvlCount SAVL_PARAM_TYPE_COUNT\n#define SAvlNode MERGE(SAvl, Node)\n\n// public functions\n#define SAvl_Init MERGE(SAvl, _Init)\n#define SAvl_Insert MERGE(SAvl, _Insert)\n#define SAvl_Remove MERGE(SAvl, _Remove)\n#define SAvl_Lookup MERGE(SAvl, _Lookup)\n#define SAvl_LookupExact MERGE(SAvl, _LookupExact)\n#define SAvl_GetFirstGreater MERGE(SAvl, _GetFirstGreater)\n#define SAvl_GetLastLesser MERGE(SAvl, _GetLastLesser)\n#define SAvl_GetFirstGreaterEqual MERGE(SAvl, _GetFirstGreaterEqual)\n#define SAvl_GetLastLesserEqual MERGE(SAvl, _GetLastLesserEqual)\n#define SAvl_GetFirst MERGE(SAvl, _GetFirst)\n#define SAvl_GetLast MERGE(SAvl, _GetLast)\n#define SAvl_GetNext MERGE(SAvl, _GetNext)\n#define SAvl_GetPrev MERGE(SAvl, _GetPrev)\n#define SAvl_IsEmpty MERGE(SAvl, _IsEmpty)\n#define SAvl_Verify MERGE(SAvl, _Verify)\n#define SAvl_Count MERGE(SAvl, _Count)\n#define SAvl_IndexOf MERGE(SAvl, _IndexOf)\n#define SAvl_GetAt MERGE(SAvl, _GetAt)\n\n// internal stuff\n#define SAvl__Tree MERGE(SAvl, __Tree)\n#define SAvl__TreeRef MERGE(SAvl, __TreeRef)\n#define SAvl__TreeLink MERGE(SAvl, __TreeLink)\n#define SAvl__TreeDeref MERGE(SAvl, __TreeDeref)\n#define SAvl__Tree_Init MERGE(SAvl, __Tree_Init)\n#define SAvl__Tree_Insert MERGE(SAvl, __Tree_Insert)\n#define SAvl__Tree_Remove MERGE(SAvl, __Tree_Remove)\n#define SAvl__Tree_Lookup MERGE(SAvl, __Tree_Lookup)\n#define SAvl__Tree_LookupExact MERGE(SAvl, __Tree_LookupExact)\n#define SAvl__Tree_GetFirstGreater MERGE(SAvl, __Tree_GetFirstGreater)\n#define SAvl__Tree_GetLastLesser MERGE(SAvl, __Tree_GetLastLesser)\n#define SAvl__Tree_GetFirstGreaterEqual MERGE(SAvl, __Tree_GetFirstGreaterEqual)\n#define SAvl__Tree_GetLastLesserEqual MERGE(SAvl, __Tree_GetLastLesserEqual)\n#define SAvl__Tree_GetFirst MERGE(SAvl, __Tree_GetFirst)\n#define SAvl__Tree_GetLast MERGE(SAvl, __Tree_GetLast)\n#define SAvl__Tree_GetNext MERGE(SAvl, __Tree_GetNext)\n#define SAvl__Tree_GetPrev MERGE(SAvl, __Tree_GetPrev)\n#define SAvl__Tree_IsEmpty MERGE(SAvl, __Tree_IsEmpty)\n#define SAvl__Tree_Verify MERGE(SAvl, __Tree_Verify)\n#define SAvl__Tree_Count MERGE(SAvl, __Tree_Count)\n#define SAvl__Tree_IndexOf MERGE(SAvl, __Tree_IndexOf)\n#define SAvl__Tree_GetAt MERGE(SAvl, __Tree_GetAt)\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl_impl.h",
    "content": "/**\n * @file SAvl_impl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"SAvl_header.h\"\n\n#include \"SAvl_tree.h\"\n#include \"structure/CAvl_impl.h\"\n\nstatic void SAvl_Init (SAvl *o)\n{\n    SAvl__Tree_Init(&o->tree);\n}\n\nstatic int SAvl_Insert (SAvl *o, SAvlArg arg, SAvlEntry *entry, SAvlEntry **out_existing)\n{\n    ASSERT(entry)\n#if SAVL_PARAM_FEATURE_COUNTS\n    ASSERT(SAvl_Count(o, arg) < SAVL_PARAM_VALUE_COUNT_MAX)\n#endif\n    \n    SAvl__TreeRef out_ref;\n    int res = SAvl__Tree_Insert(&o->tree, arg, SAvl__TreeDeref(arg, entry), &out_ref);\n    \n    if (out_existing) {\n        *out_existing = out_ref.link;\n    }\n    \n    return res;\n}\n\nstatic void SAvl_Remove (SAvl *o, SAvlArg arg, SAvlEntry *entry)\n{\n    ASSERT(entry)\n    \n    SAvl__Tree_Remove(&o->tree, arg, SAvl__TreeDeref(arg, entry));\n}\n\n#if !SAVL_PARAM_FEATURE_NOKEYS\n\nstatic SAvlEntry * SAvl_Lookup (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_Lookup(&o->tree, arg, key);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_LookupExact (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_LookupExact(&o->tree, arg, key);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetFirstGreater (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetFirstGreater(&o->tree, arg, key);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetLastLesser (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetLastLesser(&o->tree, arg, key);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetFirstGreaterEqual (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetFirstGreaterEqual(&o->tree, arg, key);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetLastLesserEqual (const SAvl *o, SAvlArg arg, SAvlKey key)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetLastLesserEqual(&o->tree, arg, key);\n    return ref.link;\n}\n\n#endif\n\nstatic SAvlEntry * SAvl_GetFirst (const SAvl *o, SAvlArg arg)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetFirst(&o->tree, arg);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetLast (const SAvl *o, SAvlArg arg)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetLast(&o->tree, arg);\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetNext (const SAvl *o, SAvlArg arg, SAvlEntry *entry)\n{\n    ASSERT(entry)\n    \n    SAvl__TreeRef ref = SAvl__Tree_GetNext(&o->tree, arg, SAvl__TreeDeref(arg, entry));\n    return ref.link;\n}\n\nstatic SAvlEntry * SAvl_GetPrev (const SAvl *o, SAvlArg arg, SAvlEntry *entry)\n{\n    ASSERT(entry)\n    \n    SAvl__TreeRef ref = SAvl__Tree_GetPrev(&o->tree, arg, SAvl__TreeDeref(arg, entry));\n    return ref.link;\n}\n\nstatic int SAvl_IsEmpty (const SAvl *o)\n{\n    return SAvl__Tree_IsEmpty(&o->tree);\n}\n\nstatic void SAvl_Verify (const SAvl *o, SAvlArg arg)\n{\n    return SAvl__Tree_Verify(&o->tree, arg);\n}\n\n#if SAVL_PARAM_FEATURE_COUNTS\n\nstatic SAvlCount SAvl_Count (const SAvl *o, SAvlArg arg)\n{\n    return SAvl__Tree_Count(&o->tree, arg);\n}\n\nstatic SAvlCount SAvl_IndexOf (const SAvl *o, SAvlArg arg, SAvlEntry *entry)\n{\n    ASSERT(entry)\n    \n    return SAvl__Tree_IndexOf(&o->tree, arg, SAvl__TreeDeref(arg, entry));\n}\n\nstatic SAvlEntry * SAvl_GetAt (const SAvl *o, SAvlArg arg, SAvlCount index)\n{\n    SAvl__TreeRef ref = SAvl__Tree_GetAt(&o->tree, arg, index);\n    return ref.link;\n}\n\n#endif\n\n#include \"SAvl_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SAvl_tree.h",
    "content": "#define CAVL_PARAM_NAME SAvl__Tree\n#define CAVL_PARAM_FEATURE_COUNTS SAVL_PARAM_FEATURE_COUNTS\n#define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0\n#define CAVL_PARAM_FEATURE_NOKEYS SAVL_PARAM_FEATURE_NOKEYS\n#define CAVL_PARAM_TYPE_ENTRY SAvlEntry\n#define CAVL_PARAM_TYPE_LINK SAvl__TreeLink\n#define CAVL_PARAM_TYPE_KEY SAvlKey\n#define CAVL_PARAM_TYPE_ARG SAvlArg\n#define CAVL_PARAM_TYPE_COUNT SAvlCount\n#define CAVL_PARAM_VALUE_COUNT_MAX SAVL_PARAM_VALUE_COUNT_MAX\n#define CAVL_PARAM_VALUE_NULL ((SAvl__TreeLink)NULL)\n#define CAVL_PARAM_FUN_DEREF(arg, link) (link)\n#define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) SAVL_PARAM_FUN_COMPARE_ENTRIES((arg), (entry1).link, (entry2).link)\n#define CAVL_PARAM_FUN_COMPARE_KEY_ENTRY(arg, key1, entry2) SAVL_PARAM_FUN_COMPARE_KEY_ENTRY((arg), (key1), (entry2).link)\n#define CAVL_PARAM_MEMBER_CHILD SAVL_PARAM_MEMBER_NODE . child\n#define CAVL_PARAM_MEMBER_BALANCE SAVL_PARAM_MEMBER_NODE . balance\n#define CAVL_PARAM_MEMBER_PARENT SAVL_PARAM_MEMBER_NODE . parent\n#define CAVL_PARAM_MEMBER_COUNT SAVL_PARAM_MEMBER_NODE . count\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SLinkedList.h",
    "content": "/**\n * @file SLinkedList.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_SLINKEDLIST_H\n#define BADVPN_SLINKEDLIST_H\n\n#include <stddef.h>\n\n#include \"misc/merge.h\"\n#include \"misc/debug.h\"\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SLinkedList_decl.h",
    "content": "/**\n * @file SLinkedList_decl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"SLinkedList_header.h\"\n\ntypedef struct {\n    SLinkedListEntry *first;\n#if SLINKEDLIST_PARAM_FEATURE_LAST\n    SLinkedListEntry *last;\n#endif\n} SLinkedList;\n\ntypedef struct {\n    SLinkedListEntry *prev;\n    SLinkedListEntry *next;\n} SLinkedListNode;\n\nstatic void SLinkedListMarkRemoved (SLinkedListEntry *entry);\nstatic int SLinkedListIsRemoved (SLinkedListEntry *entry);\n\nstatic void SLinkedList_Init (SLinkedList *o);\nstatic SLinkedListEntry * SLinkedList_Next (SLinkedList *o, SLinkedListEntry *entry);\nstatic SLinkedListEntry * SLinkedList_Prev (SLinkedList *o, SLinkedListEntry *entry);\nstatic void SLinkedList_Prepend (SLinkedList *o, SLinkedListEntry *entry);\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic void SLinkedList_Append (SLinkedList *o, SLinkedListEntry *entry);\n#endif\nstatic void SLinkedList_InsertBefore (SLinkedList *o, SLinkedListEntry *entry, SLinkedListEntry *before_entry);\nstatic void SLinkedList_InsertAfter (SLinkedList *o, SLinkedListEntry *entry, SLinkedListEntry *after_entry);\nstatic void SLinkedList_Remove (SLinkedList *o, SLinkedListEntry *entry);\nstatic void SLinkedList_RemoveFirst (SLinkedList *o);\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic void SLinkedList_RemoveLast (SLinkedList *o);\n#endif\nstatic SLinkedListEntry * SLinkedList_First (const SLinkedList *o);\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic SLinkedListEntry * SLinkedList_Last (const SLinkedList *o);\n#endif\nstatic int SLinkedList_IsEmpty (const SLinkedList *o);\n\n#include \"SLinkedList_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SLinkedList_footer.h",
    "content": "/**\n * @file SLinkedList_footer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#undef SLINKEDLIST_PARAM_NAME\n#undef SLINKEDLIST_PARAM_FEATURE_LAST\n#undef SLINKEDLIST_PARAM_TYPE_ENTRY\n#undef SLINKEDLIST_PARAM_MEMBER_NODE\n\n#undef SLinkedList\n#undef SLinkedListEntry\n#undef SLinkedListNode\n\n#undef SLinkedListMarkRemoved\n#undef SLinkedListIsRemoved\n\n#undef SLinkedList_Init\n#undef SLinkedList_Next\n#undef SLinkedList_Prev\n#undef SLinkedList_Prepend\n#undef SLinkedList_Append\n#undef SLinkedList_InsertBefore\n#undef SLinkedList_InsertAfter\n#undef SLinkedList_Remove\n#undef SLinkedList_RemoveFirst\n#undef SLinkedList_RemoveLast\n#undef SLinkedList_First\n#undef SLinkedList_Last\n#undef SLinkedList_IsEmpty\n\n#undef SLinkedList_prev\n#undef SLinkedList_next\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SLinkedList_header.h",
    "content": "/**\n * @file SLinkedList_header.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs:\n// SLINKEDLIST_PARAM_NAME - name of this data structure\n// SLINKEDLIST_PARAM_FEATURE_LAST - whether to keep track of the last entry in the list (0/1)\n// SLINKEDLIST_PARAM_TYPE_ENTRY - type of entry\n// SLINKEDLIST_PARAM_MEMBER_NODE - name of the node member in entry\n\n// types\n#define SLinkedList SLINKEDLIST_PARAM_NAME\n#define SLinkedListEntry SLINKEDLIST_PARAM_TYPE_ENTRY\n#define SLinkedListNode MERGE(SLinkedList, Node)\n\n// non-object public functions\n#define SLinkedListMarkRemoved MERGE(SLinkedList, MarkRemoved)\n#define SLinkedListIsRemoved MERGE(SLinkedList, IsRemoved)\n\n// public functions\n#define SLinkedList_Init MERGE(SLinkedList, _Init)\n#define SLinkedList_Next MERGE(SLinkedList, _Next)\n#define SLinkedList_Prev MERGE(SLinkedList, _Prev)\n#define SLinkedList_Prepend MERGE(SLinkedList, _Prepend)\n#define SLinkedList_Append MERGE(SLinkedList, _Append)\n#define SLinkedList_InsertBefore MERGE(SLinkedList, _InsertBefore)\n#define SLinkedList_InsertAfter MERGE(SLinkedList, _InsertAfter)\n#define SLinkedList_Remove MERGE(SLinkedList, _Remove)\n#define SLinkedList_RemoveFirst MERGE(SLinkedList, _RemoveFirst)\n#define SLinkedList_RemoveLast MERGE(SLinkedList, _RemoveLast)\n#define SLinkedList_First MERGE(SLinkedList, _First)\n#define SLinkedList_Last MERGE(SLinkedList, _Last)\n#define SLinkedList_IsEmpty MERGE(SLinkedList, _IsEmpty)\n\n// private things\n#define SLinkedList_prev(entry) ((entry)->SLINKEDLIST_PARAM_MEMBER_NODE . prev)\n#define SLinkedList_next(entry) ((entry)->SLINKEDLIST_PARAM_MEMBER_NODE . next)\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/SLinkedList_impl.h",
    "content": "/**\n * @file SLinkedList_impl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"SLinkedList_header.h\"\n\nstatic void SLinkedListMarkRemoved (SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n    \n    SLinkedList_next(entry) = entry;\n}\n\nstatic int SLinkedListIsRemoved (SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n    \n    return (entry == SLinkedList_next(entry));\n}\n\nstatic void SLinkedList_Init (SLinkedList *o)\n{\n    o->first = NULL;\n}\n\nstatic SLinkedListEntry * SLinkedList_Next (SLinkedList *o, SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n    \n    return SLinkedList_next(entry);\n}\n\nstatic SLinkedListEntry * SLinkedList_Prev (SLinkedList *o, SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n    \n    return (entry == o->first) ? NULL : SLinkedList_prev(entry);\n}\n\nstatic void SLinkedList_Prepend (SLinkedList *o, SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n\n    SLinkedList_next(entry) = o->first;\n    if (o->first) {\n        SLinkedList_prev(o->first) = entry;\n    } else {\n#if SLINKEDLIST_PARAM_FEATURE_LAST\n        o->last = entry;\n#endif\n    }\n    o->first = entry;\n}\n\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic void SLinkedList_Append (SLinkedList *o, SLinkedListEntry *entry)\n{\n    ASSERT(entry)\n\n    SLinkedList_next(entry) = NULL;\n    if (o->first) {\n        SLinkedList_prev(entry) = o->last;\n        SLinkedList_next(o->last) = entry;\n    } else {\n        o->first = entry;\n    }\n    o->last = entry;\n}\n#endif\n\nstatic void SLinkedList_InsertBefore (SLinkedList *o, SLinkedListEntry *entry, SLinkedListEntry *before_entry)\n{\n    ASSERT(entry)\n    ASSERT(before_entry)\n    \n    SLinkedList_next(entry) = before_entry;\n    if (before_entry != o->first) {\n        SLinkedList_prev(entry) = SLinkedList_prev(before_entry);\n        SLinkedList_next(SLinkedList_prev(before_entry)) = entry;\n    } else {\n        o->first = entry;\n    }\n    SLinkedList_prev(before_entry) = entry;\n}\n\nstatic void SLinkedList_InsertAfter (SLinkedList *o, SLinkedListEntry *entry, SLinkedListEntry *after_entry)\n{\n    ASSERT(entry)\n    ASSERT(after_entry)\n    \n    SLinkedList_next(entry) = SLinkedList_next(after_entry);\n    SLinkedList_prev(entry) = after_entry;\n    if (SLinkedList_next(after_entry)) {\n        SLinkedList_prev(SLinkedList_next(after_entry)) = entry;\n    } else {\n#if SLINKEDLIST_PARAM_FEATURE_LAST\n        o->last = entry;\n#endif\n    }\n    SLinkedList_next(after_entry) = entry;\n}\n\nstatic void SLinkedList_Remove (SLinkedList *o, SLinkedListEntry *entry)\n{\n    if (entry != o->first) {\n        SLinkedList_next(SLinkedList_prev(entry)) = SLinkedList_next(entry);\n        if (SLinkedList_next(entry)) {\n            SLinkedList_prev(SLinkedList_next(entry)) = SLinkedList_prev(entry);\n        } else {\n#if SLINKEDLIST_PARAM_FEATURE_LAST\n            o->last = SLinkedList_prev(entry);\n#endif\n        }\n    } else {\n        o->first = SLinkedList_next(entry);\n    }\n}\n\nstatic void SLinkedList_RemoveFirst (SLinkedList *o)\n{\n    ASSERT(o->first)\n    \n    o->first = SLinkedList_next(o->first);\n}\n\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic void SLinkedList_RemoveLast (SLinkedList *o)\n{\n    ASSERT(o->first)\n    \n    if (o->last == o->first) {\n        o->first = NULL;\n    } else {\n        SLinkedList_next(SLinkedList_prev(o->last)) = NULL;\n        o->last = SLinkedList_prev(o->last);\n    }\n}\n#endif\n\nstatic SLinkedListEntry * SLinkedList_First (const SLinkedList *o)\n{\n    return o->first;\n}\n\n#if SLINKEDLIST_PARAM_FEATURE_LAST\nstatic SLinkedListEntry * SLinkedList_Last (const SLinkedList *o)\n{\n    return (!o->first ? NULL : o->last);\n}\n#endif\n\nstatic int SLinkedList_IsEmpty (const SLinkedList *o)\n{\n    return !o->first;\n}\n\n#include \"SLinkedList_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/Vector.h",
    "content": "/**\n * @file Vector.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <limits.h>\n#include <string.h>\n#include <stddef.h>\n\n#include <misc/debug.h>\n#include <misc/balloc.h>\n#include <misc/merge.h>\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/Vector_decl.h",
    "content": "/**\n * @file Vector_decl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"Vector_header.h\"\n\ntypedef struct {\n    VectorElem *elems;\n    size_t capacity;\n    size_t count;\n} Vector;\n\nstatic int Vector_Init (Vector *o, size_t capacity) WARN_UNUSED;\nstatic void Vector_Free (Vector *o);\nstatic size_t Vector_Count (Vector *o);\nstatic VectorElem * Vector_Get (Vector *o, size_t index);\nstatic int Vector_Reserve (Vector *o, size_t capacity) WARN_UNUSED;\nstatic VectorElem * Vector_Push (Vector *o, size_t *out_index) WARN_UNUSED;\nstatic VectorElem * Vector_Pop (Vector *o, size_t *out_index);\n\n#include \"Vector_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/Vector_footer.h",
    "content": "/**\n * @file Vector_footer.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#undef VECTOR_NAME\n#undef VECTOR_ELEM_TYPE\n\n#undef Vector\n#undef VectorElem\n#undef Vector_Init\n#undef Vector_Free\n#undef Vector_Count\n#undef Vector_Get\n#undef Vector_Reserve\n#undef Vector_Push\n#undef Vector_Pop\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/Vector_header.h",
    "content": "/**\n * @file Vector_header.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// Preprocessor inputs:\n// VECTOR_NAME - prefix of functions and types to be defined\n// VECTOR_ELEM_TYPE - type of vector elements\n\n#define Vector VECTOR_NAME\n#define VectorElem VECTOR_ELEM_TYPE\n#define Vector_Init MERGE(VECTOR_NAME, _Init)\n#define Vector_Free MERGE(VECTOR_NAME, _Free)\n#define Vector_Count MERGE(VECTOR_NAME, _Count)\n#define Vector_Get MERGE(VECTOR_NAME, _Get)\n#define Vector_Reserve MERGE(VECTOR_NAME, _Reserve)\n#define Vector_Push MERGE(VECTOR_NAME, _Push)\n#define Vector_Pop MERGE(VECTOR_NAME, _Pop)\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/structure/Vector_impl.h",
    "content": "/**\n * @file Vector_impl.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"Vector_header.h\"\n\nstatic int Vector_Init (Vector *o, size_t capacity)\n{\n    if (capacity == 0) {\n        o->elems = NULL;\n    } else {\n        o->elems = BAllocArray(capacity, sizeof(VectorElem));\n        if (!o->elems) {\n            return 0;\n        }\n    }\n    o->capacity = capacity;\n    o->count = 0;\n    return 1;\n}\n\nstatic void Vector_Free (Vector *o)\n{\n    BFree(o->elems);\n}\n\nstatic size_t Vector_Count (Vector *o)\n{\n    return o->count;\n}\n\nstatic VectorElem * Vector_Get (Vector *o, size_t index)\n{\n    ASSERT(index < o->capacity)\n    \n    return &o->elems[index];\n}\n\nstatic int Vector_Reserve (Vector *o, size_t capacity)\n{\n    if (capacity > o->capacity) {\n        size_t new_capacity = o->capacity;\n        do {\n            if (new_capacity > SIZE_MAX / 2) {\n                return 0;\n            }\n            new_capacity = (new_capacity == 0) ? 1 : (2 * new_capacity);\n        } while (capacity > new_capacity);\n        \n        VectorElem *new_elems = BAllocArray(new_capacity, sizeof(VectorElem));\n        if (!new_elems) {\n            return 0;\n        }\n        \n        if (o->count > 0) {\n            memcpy(new_elems, o->elems, o->count * sizeof(VectorElem));\n        }\n        \n        BFree(o->elems);\n        \n        o->elems = new_elems;\n        o->capacity = new_capacity;\n    }\n    \n    return 1;\n}\n\nstatic VectorElem * Vector_Push (Vector *o, size_t *out_index)\n{\n    if (o->count == SIZE_MAX || !Vector_Reserve(o, o->count + 1)) {\n        return NULL;\n    }\n    if (out_index) {\n        *out_index = o->count;\n    }\n    VectorElem *ptr = &o->elems[o->count];\n    o->count++;\n    return ptr;\n}\n\nstatic VectorElem * Vector_Pop (Vector *o, size_t *out_index)\n{\n    ASSERT(o->count > 0)\n    \n    o->count--;\n    if (out_index) {\n        *out_index = o->count;\n    }\n    return &o->elems[o->count];\n}\n\n#include \"Vector_footer.h\"\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BAddr.h",
    "content": "/**\n * @file BAddr.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Network address abstractions.\n */\n\n#ifndef BADVPN_SYSTEM_BADDR_H\n#define BADVPN_SYSTEM_BADDR_H\n\n#include <stdint.h>\n#include <limits.h>\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n\n#ifdef BADVPN_USE_WINAPI\n#include <ws2tcpip.h>\n#else\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <netdb.h>\n#include <netinet/in.h>\n#endif\n\n#include \"misc/byteorder.h\"\n#include \"misc/debug.h\"\n#include \"misc/print_macros.h\"\n#include \"misc/read_write_int.h\"\n#include \"misc/compare.h\"\n\n#define BADDR_TYPE_NONE 0\n#define BADDR_TYPE_IPV4 1\n#define BADDR_TYPE_IPV6 2\n#ifdef BADVPN_LINUX\n    #define BADDR_TYPE_PACKET 5\n#endif\n\n#define BADDR_MAX_ADDR_LEN 128\n\n#define BIPADDR_MAX_PRINT_LEN 40\n#define BADDR_MAX_PRINT_LEN 120\n\n#define BADDR_PACKET_HEADER_TYPE_ETHERNET 1\n\n#define BADDR_PACKET_PACKET_TYPE_HOST 1\n#define BADDR_PACKET_PACKET_TYPE_BROADCAST 2\n#define BADDR_PACKET_PACKET_TYPE_MULTICAST 3\n#define BADDR_PACKET_PACKET_TYPE_OTHERHOST 4\n#define BADDR_PACKET_PACKET_TYPE_OUTGOING 5\n\ntypedef struct {\n    int type;\n    union {\n        uint32_t ipv4;\n        uint8_t ipv6[16];\n    };\n} BIPAddr;\n\nstatic void BIPAddr_InitInvalid (BIPAddr *addr);\n\nstatic void BIPAddr_InitIPv4 (BIPAddr *addr, uint32_t ip);\n\nstatic void BIPAddr_InitIPv6 (BIPAddr *addr, uint8_t *ip);\n\nstatic void BIPAddr_Assert (BIPAddr *addr);\n\nstatic int BIPAddr_IsInvalid (BIPAddr *addr);\n\nstatic int BIPAddr_Resolve (BIPAddr *addr, char *str, int noresolve) WARN_UNUSED;\n\nstatic int BIPAddr_Compare (BIPAddr *addr1, BIPAddr *addr2);\n\n/**\n * Converts an IP address to human readable form.\n *\n * @param addr IP address to convert\n * @param out destination buffer. Must be at least BIPADDR_MAX_PRINT_LEN characters long.\n */\nstatic void BIPAddr_Print (BIPAddr *addr, char *out);\n\n/**\n * Socket address - IP address and transport protocol port number\n */\ntypedef struct {\n    int type;\n    union {\n        struct {\n            uint32_t ip;\n            uint16_t port;\n        } ipv4;\n        struct {\n            uint8_t ip[16];\n            uint16_t port;\n        } ipv6;\n        struct {\n            uint16_t phys_proto;\n            int interface_index;\n            int header_type;\n            int packet_type;\n            uint8_t phys_addr[8];\n        } packet;\n    };\n} BAddr;\n\n/**\n * Makes an invalid address.\n */\nstatic BAddr BAddr_MakeNone (void);\n\n/**\n * Makes an IPv4 address.\n *\n * @param ip IP address in network byte order\n * @param port port number in network byte order\n */\nstatic BAddr BAddr_MakeIPv4 (uint32_t ip, uint16_t port);\n\n/**\n * Makes an IPv6 address.\n *\n * @param ip IP address (16 bytes)\n * @param port port number in network byte order\n */\nstatic BAddr BAddr_MakeIPv6 (const uint8_t *ip, uint16_t port);\n\n/**\n * Makes an address from a BIPAddr and port number.\n *\n * @param ipaddr the BIPAddr\n * @param port port number in network byte order\n */\nstatic BAddr BAddr_MakeFromIpaddrAndPort (BIPAddr ipaddr, uint16_t port);\n\n/**\n * Deprecated, use BAddr_MakeNone.\n */\nstatic void BAddr_InitNone (BAddr *addr);\n\n/**\n * Deprecated, use BAddr_MakeIPv4.\n */\nstatic void BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port);\n\n/**\n * Deprecated, use BAddr_MakeIPv6.\n */\nstatic void BAddr_InitIPv6 (BAddr *addr, uint8_t *ip, uint16_t port);\n\n/**\n * Deprecated, use BAddr_MakeFromIpaddrAndPort.\n */\nstatic void BAddr_InitFromIpaddrAndPort (BAddr *addr, BIPAddr ipaddr, uint16_t port);\n\n/**\n * Initializes a packet socket (data link layer) address.\n * Only Ethernet addresses are supported.\n * \n * @param addr the object\n * @param phys_proto identifier for the upper protocol, network byte order (EtherType)\n * @param interface_index network interface index\n * @param header_type data link layer header type. Must be BADDR_PACKET_HEADER_TYPE_ETHERNET.\n * @param packet_type the manner in which packets are sent/received. Must be one of\n *   BADDR_PACKET_PACKET_TYPE_HOST, BADDR_PACKET_PACKET_TYPE_BROADCAST,\n *   BADDR_PACKET_PACKET_TYPE_MULTICAST, BADDR_PACKET_PACKET_TYPE_OTHERHOST,\n *   BADDR_PACKET_PACKET_TYPE_OUTGOING.\n * @param phys_addr data link layer address (MAC address)\n */\nstatic void BAddr_InitPacket (BAddr *addr, uint16_t phys_proto, int interface_index, int header_type, int packet_type, uint8_t *phys_addr);\n\n/**\n * Does nothing.\n *\n * @param addr the object\n */\nstatic void BAddr_Assert (BAddr *addr);\n\n/**\n * Determines whether the address is an invalid address.\n *\n * @param addr the object\n * @return 1 if invalid, 0 if invalid\n **/\nstatic int BAddr_IsInvalid (BAddr *addr);\n\n/**\n * Returns the port number in the address.\n *\n * @param addr the object\n *             Must be an IPv4 or IPv6 address.\n * @return port number, in network byte order\n */\nstatic uint16_t BAddr_GetPort (BAddr *addr);\n\n/**\n * Returns the IP address in the address.\n *\n * @param addr the object\n * @param ipaddr IP address will be returned here. If \\a addr is not\n *               an IPv4 or IPv6 address, an invalid address will be\n *               returned.\n */\nstatic void BAddr_GetIPAddr (BAddr *addr, BIPAddr *ipaddr);\n\n/**\n * Sets the port number in the address.\n *\n * @param addr the object\n *             Must be an IPv4 or IPv6 address.\n * @param port port number, in network byte order\n */\nstatic void BAddr_SetPort (BAddr *addr, uint16_t port);\n\n/**\n * Converts an IP address to human readable form.\n *\n * @param addr address to convert\n * @param out destination buffer. Must be at least BADDR_MAX_PRINT_LEN characters long.\n */\nstatic void BAddr_Print (BAddr *addr, char *out);\n\n/**\n * Resolves an address string.\n * Format is \"addr:port\" for IPv4, \"[addr]:port\" for IPv6.\n * addr is be a numeric address or a name.\n * port is a numeric port number.\n *\n * @param addr output address\n * @param name if not NULL, the name portion of the address will be\n *             stored here\n * @param name_len if name is not NULL, the size of the name buffer\n * @param noresolve only accept numeric addresses. Avoids blocking the caller.\n * @return 1 on success, 0 on parse error\n */\nstatic int BAddr_Parse2 (BAddr *addr, char *str, char *name, int name_len, int noresolve) WARN_UNUSED;\n\n/**\n * Resolves an address string.\n * IPv4 input format is \"a.b.c.d:p\", where a.b.c.d is the IP address\n * and d is the port number.\n * IPv6 input format is \"[addr]:p\", where addr is an IPv6 addres in\n * standard notation and p is the port number.\n *\n * @param addr output address\n * @param name if not NULL, the name portion of the address will be\n *             stored here\n * @param name_len if name is not NULL, the size of the name buffer\n * @return 1 on success, 0 on parse error\n */\nstatic int BAddr_Parse (BAddr *addr, char *str, char *name, int name_len) WARN_UNUSED;\n\nstatic int BAddr_Compare (BAddr *addr1, BAddr *addr2);\n\nstatic int BAddr_CompareOrder (BAddr *addr1, BAddr *addr2);\n\nvoid BIPAddr_InitInvalid (BIPAddr *addr)\n{\n    addr->type = BADDR_TYPE_NONE;\n}\n\nvoid BIPAddr_InitIPv4 (BIPAddr *addr, uint32_t ip)\n{\n    addr->type = BADDR_TYPE_IPV4;\n    addr->ipv4 = ip;\n}\n\nvoid BIPAddr_InitIPv6 (BIPAddr *addr, uint8_t *ip)\n{\n    addr->type = BADDR_TYPE_IPV6;\n    memcpy(addr->ipv6, ip, 16);\n}\n\nvoid BIPAddr_Assert (BIPAddr *addr)\n{\n    switch (addr->type) {\n        case BADDR_TYPE_NONE:\n        case BADDR_TYPE_IPV4:\n        case BADDR_TYPE_IPV6:\n            return;\n        default:\n            ASSERT(0);\n    }\n}\n\nint BIPAddr_IsInvalid (BIPAddr *addr)\n{\n    BIPAddr_Assert(addr);\n    \n    return (addr->type == BADDR_TYPE_NONE);\n}\n\nint BIPAddr_Resolve (BIPAddr *addr, char *str, int noresolve)\n{\n    int len = strlen(str);\n    \n    char *addr_start;\n    int addr_len;\n    \n    // determine address type\n    if (len >= 1 && str[0] == '[' && str[len - 1] == ']') {\n        addr->type = BADDR_TYPE_IPV6;\n        addr_start = str + 1;\n        addr_len = len - 2;\n    } else {\n        addr->type = BADDR_TYPE_IPV4;\n        addr_start = str;\n        addr_len = len;\n    }\n    \n    // copy\n    char addr_str[BADDR_MAX_ADDR_LEN + 1];\n    if (addr_len > BADDR_MAX_ADDR_LEN) {\n        return 0;\n    }\n    memcpy(addr_str, addr_start, addr_len);\n    addr_str[addr_len] = '\\0';\n    \n    // initialize hints\n    struct addrinfo hints;\n    memset(&hints, 0, sizeof(hints));\n    switch (addr->type) {\n        case BADDR_TYPE_IPV6:\n            hints.ai_family = AF_INET6;\n            break;\n        case BADDR_TYPE_IPV4:\n            hints.ai_family = AF_INET;\n            break;\n    }\n    if (noresolve) {\n        hints.ai_flags |= AI_NUMERICHOST;\n    }\n    \n    // call getaddrinfo\n    struct addrinfo *addrs;\n    int res;\n    if ((res = getaddrinfo(addr_str, NULL, &hints, &addrs)) != 0) {\n        return 0;\n    }\n    \n    // set address\n    switch (addr->type) {\n        case BADDR_TYPE_IPV6:\n            memcpy(addr->ipv6, ((struct sockaddr_in6 *)addrs->ai_addr)->sin6_addr.s6_addr, sizeof(addr->ipv6));\n            break;\n        case BADDR_TYPE_IPV4:\n            addr->ipv4 = ((struct sockaddr_in *)addrs->ai_addr)->sin_addr.s_addr;\n            break;\n    }\n    \n    freeaddrinfo(addrs);\n    \n    return 1;\n}\n\nint BIPAddr_Compare (BIPAddr *addr1, BIPAddr *addr2)\n{\n    BIPAddr_Assert(addr1);\n    BIPAddr_Assert(addr2);\n    \n    if (addr1->type != addr2->type) {\n        return 0;\n    }\n    \n    switch (addr1->type) {\n        case BADDR_TYPE_NONE:\n            return 0;\n        case BADDR_TYPE_IPV4:\n            return (addr1->ipv4 == addr2->ipv4);\n        case BADDR_TYPE_IPV6:\n            return (!memcmp(addr1->ipv6, addr2->ipv6, sizeof(addr1->ipv6)));\n        default:\n            ASSERT(0)\n            return 0;\n    }\n}\n\nuint16_t BAddr_GetPort (BAddr *addr)\n{\n    BAddr_Assert(addr);\n    ASSERT(addr->type == BADDR_TYPE_IPV4 || addr->type == BADDR_TYPE_IPV6)\n    \n    switch (addr->type) {\n        case BADDR_TYPE_IPV4:\n            return addr->ipv4.port;\n        case BADDR_TYPE_IPV6:\n            return addr->ipv6.port;\n        default:\n            ASSERT(0)\n            return 0;\n    }\n}\n\nvoid BAddr_GetIPAddr (BAddr *addr, BIPAddr *ipaddr)\n{\n    BAddr_Assert(addr);\n    \n    switch (addr->type) {\n        case BADDR_TYPE_IPV4:\n            BIPAddr_InitIPv4(ipaddr, addr->ipv4.ip);\n            return;\n        case BADDR_TYPE_IPV6:\n            BIPAddr_InitIPv6(ipaddr, addr->ipv6.ip);\n            return;\n        default:\n            BIPAddr_InitInvalid(ipaddr);\n    }\n}\n\nvoid BAddr_SetPort (BAddr *addr, uint16_t port)\n{\n    BAddr_Assert(addr);\n    ASSERT(addr->type == BADDR_TYPE_IPV4 || addr->type == BADDR_TYPE_IPV6)\n    \n    switch (addr->type) {\n        case BADDR_TYPE_IPV4:\n            addr->ipv4.port = port;\n            break;\n        case BADDR_TYPE_IPV6:\n            addr->ipv6.port = port;\n            break;\n        default:\n            ASSERT(0);\n    }\n}\n\nvoid BIPAddr_Print (BIPAddr *addr, char *out)\n{\n    switch (addr->type) {\n        case BADDR_TYPE_NONE:\n            sprintf(out, \"(none)\");\n            break;\n        case BADDR_TYPE_IPV4:\n            sprintf(out, \"%\"PRIu8\".%\"PRIu8\".%\"PRIu8\".%\"PRIu8,\n                *((uint8_t *)&addr->ipv4 + 0),\n                *((uint8_t *)&addr->ipv4 + 1),\n                *((uint8_t *)&addr->ipv4 + 2),\n                *((uint8_t *)&addr->ipv4 + 3)\n            );\n            break;\n        case BADDR_TYPE_IPV6: {\n            const char *ptr = (const char *)addr->ipv6;\n            sprintf(out,\n                \"%\"PRIx16\":%\"PRIx16\":%\"PRIx16\":%\"PRIx16\":\"\n                \"%\"PRIx16\":%\"PRIx16\":%\"PRIx16\":%\"PRIx16,\n                badvpn_read_be16(ptr + 0),\n                badvpn_read_be16(ptr + 2),\n                badvpn_read_be16(ptr + 4),\n                badvpn_read_be16(ptr + 6),\n                badvpn_read_be16(ptr + 8),\n                badvpn_read_be16(ptr + 10),\n                badvpn_read_be16(ptr + 12),\n                badvpn_read_be16(ptr + 14)\n            );\n        } break;\n        default:\n            ASSERT(0);\n    }\n}\n\nBAddr BAddr_MakeNone (void)\n{\n    BAddr addr;\n    addr.type = BADDR_TYPE_NONE;\n    return addr;\n}\n\nBAddr BAddr_MakeIPv4 (uint32_t ip, uint16_t port)\n{\n    BAddr addr;\n    addr.type = BADDR_TYPE_IPV4;\n    addr.ipv4.ip = ip;\n    addr.ipv4.port = port;\n    return addr;\n}\n\nBAddr BAddr_MakeIPv6 (const uint8_t *ip, uint16_t port)\n{\n    BAddr addr;\n    addr.type = BADDR_TYPE_IPV6;\n    memcpy(addr.ipv6.ip, ip, 16);\n    addr.ipv6.port = port;\n    return addr;\n}\n\nBAddr BAddr_MakeFromIpaddrAndPort (BIPAddr ipaddr, uint16_t port)\n{\n    BIPAddr_Assert(&ipaddr);\n    \n    switch (ipaddr.type) {\n        case BADDR_TYPE_NONE:\n            return BAddr_MakeNone();\n        case BADDR_TYPE_IPV4:\n            return BAddr_MakeIPv4(ipaddr.ipv4, port);\n        case BADDR_TYPE_IPV6:\n            return BAddr_MakeIPv6(ipaddr.ipv6, port);\n        default:\n            ASSERT(0);\n            return BAddr_MakeNone();\n    }\n}\n\nvoid BAddr_InitNone (BAddr *addr)\n{\n    *addr = BAddr_MakeNone();\n}\n\nvoid BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port)\n{\n    *addr = BAddr_MakeIPv4(ip, port);\n}\n\nvoid BAddr_InitIPv6 (BAddr *addr, uint8_t *ip, uint16_t port)\n{\n    *addr = BAddr_MakeIPv6(ip, port);\n}\n\nvoid BAddr_InitFromIpaddrAndPort (BAddr *addr, BIPAddr ipaddr, uint16_t port)\n{\n    BIPAddr_Assert(&ipaddr);\n    \n    *addr = BAddr_MakeFromIpaddrAndPort(ipaddr, port);\n}\n\n#ifdef BADVPN_LINUX\n\nvoid BAddr_InitPacket (BAddr *addr, uint16_t phys_proto, int interface_index, int header_type, int packet_type, uint8_t *phys_addr)\n{\n    ASSERT(header_type == BADDR_PACKET_HEADER_TYPE_ETHERNET)\n    ASSERT(packet_type == BADDR_PACKET_PACKET_TYPE_HOST || packet_type == BADDR_PACKET_PACKET_TYPE_BROADCAST || \n           packet_type == BADDR_PACKET_PACKET_TYPE_MULTICAST || packet_type == BADDR_PACKET_PACKET_TYPE_OTHERHOST ||\n           packet_type == BADDR_PACKET_PACKET_TYPE_OUTGOING)\n    \n    addr->type = BADDR_TYPE_PACKET;\n    addr->packet.phys_proto = phys_proto;\n    addr->packet.interface_index = interface_index;\n    addr->packet.header_type = header_type;\n    addr->packet.packet_type = packet_type;\n    memcpy(addr->packet.phys_addr, phys_addr, 6);\n}\n\n#endif\n\nvoid BAddr_Assert (BAddr *addr)\n{\n    switch (addr->type) {\n        case BADDR_TYPE_NONE:\n        case BADDR_TYPE_IPV4:\n        case BADDR_TYPE_IPV6:\n        #ifdef BADVPN_LINUX\n        case BADDR_TYPE_PACKET:\n        #endif\n            return;\n        default:\n            ASSERT(0);\n    }\n}\n\nint BAddr_IsInvalid (BAddr *addr)\n{\n    BAddr_Assert(addr);\n    \n    return (addr->type == BADDR_TYPE_NONE);\n}\n\nvoid BAddr_Print (BAddr *addr, char *out)\n{\n    BAddr_Assert(addr);\n    \n    BIPAddr ipaddr;\n    \n    switch (addr->type) {\n        case BADDR_TYPE_NONE:\n            sprintf(out, \"(none)\");\n            break;\n        case BADDR_TYPE_IPV4:\n            BIPAddr_InitIPv4(&ipaddr, addr->ipv4.ip);\n            BIPAddr_Print(&ipaddr, out);\n            sprintf(out + strlen(out), \":%\"PRIu16, ntoh16(addr->ipv4.port));\n            break;\n        case BADDR_TYPE_IPV6:\n            BIPAddr_InitIPv6(&ipaddr, addr->ipv6.ip);\n            BIPAddr_Print(&ipaddr, out);\n            sprintf(out + strlen(out), \":%\"PRIu16, ntoh16(addr->ipv6.port));\n            break;\n        #ifdef BADVPN_LINUX\n        case BADDR_TYPE_PACKET:\n            ASSERT(addr->packet.header_type == BADDR_PACKET_HEADER_TYPE_ETHERNET)\n            sprintf(out, \"proto=%\"PRIu16\",ifindex=%d,htype=eth,ptype=%d,addr=%02\"PRIx8\":%02\"PRIx8\":%02\"PRIx8\":%02\"PRIx8\":%02\"PRIx8\":%02\"PRIx8,\n                    addr->packet.phys_proto, (int)addr->packet.interface_index, (int)addr->packet.packet_type,\n                    addr->packet.phys_addr[0], addr->packet.phys_addr[1], addr->packet.phys_addr[2],\n                    addr->packet.phys_addr[3], addr->packet.phys_addr[4], addr->packet.phys_addr[5]);\n            break;\n        #endif\n        default:\n            ASSERT(0);\n    }\n}\n\nint BAddr_Parse2 (BAddr *addr, char *str, char *name, int name_len, int noresolve)\n{\n    int len = strlen(str);\n    if (len < 1 || len > 1000) {\n        return 0;\n    }\n    \n    int addr_start;\n    int addr_len;\n    int port_start;\n    int port_len;\n    \n    // leading '[' indicates an IPv6 address\n    if (str[0] == '[') {\n        addr->type = BADDR_TYPE_IPV6;\n        // find ']'\n        int i=1;\n        while (i < len && str[i] != ']') i++;\n        if (i >= len) {\n            return 0;\n        }\n        addr_start = 1;\n        addr_len = i - addr_start;\n        // follows ':' and port number\n        if (i + 1 >= len || str[i + 1] != ':') {\n            return 0;\n        }\n        port_start = i + 2;\n        port_len = len - port_start;\n    }\n    // otherwise it's an IPv4 address\n    else {\n        addr->type = BADDR_TYPE_IPV4;\n        // find ':'\n        int i=0;\n        while (i < len && str[i] != ':') i++;\n        if (i >= len) {\n            return 0;\n        }\n        addr_start = 0;\n        addr_len = i - addr_start;\n        port_start = i + 1;\n        port_len = len - port_start;\n    }\n    \n    // copy address and port to zero-terminated buffers\n    \n    char addr_str[128];\n    if (addr_len >= sizeof(addr_str)) {\n        return 0;\n    }\n    memcpy(addr_str, str + addr_start, addr_len);\n    addr_str[addr_len] = '\\0';\n    \n    char port_str[6];\n    if (port_len >= sizeof(port_str)) {\n        return 0;\n    }\n    memcpy(port_str, str + port_start, port_len);\n    port_str[port_len] = '\\0';\n    \n    // parse port\n    char *err;\n    long int conv_res = strtol(port_str, &err, 10);\n    if (port_str[0] == '\\0' || *err != '\\0') {\n        return 0;\n    }\n    if (conv_res < 0 || conv_res > UINT16_MAX) {\n        return 0;\n    }\n    uint16_t port = conv_res;\n    port = hton16(port);\n    \n    // initialize hints\n    struct addrinfo hints;\n    memset(&hints, 0, sizeof(hints));\n    switch (addr->type) {\n        case BADDR_TYPE_IPV6:\n            hints.ai_family = AF_INET6;\n            break;\n        case BADDR_TYPE_IPV4:\n            hints.ai_family = AF_INET;\n            break;\n    }\n    if (noresolve) {\n        hints.ai_flags |= AI_NUMERICHOST;\n    }\n    \n    // call getaddrinfo\n    struct addrinfo *addrs;\n    int res;\n    if ((res = getaddrinfo(addr_str, NULL, &hints, &addrs)) != 0) {\n        return 0;\n    }\n    \n    // set address\n    switch (addr->type) {\n        case BADDR_TYPE_IPV6:\n            memcpy(addr->ipv6.ip, ((struct sockaddr_in6 *)addrs->ai_addr)->sin6_addr.s6_addr, sizeof(addr->ipv6.ip));\n            addr->ipv6.port = port;\n            break;\n        case BADDR_TYPE_IPV4:\n            addr->ipv4.ip = ((struct sockaddr_in *)addrs->ai_addr)->sin_addr.s_addr;\n            addr->ipv4.port = port;\n            break;\n    }\n    \n    freeaddrinfo(addrs);\n    \n    if (name) {\n        if (strlen(addr_str) >= name_len) {\n            return 0;\n        }\n        strcpy(name, addr_str);\n    }\n    \n    return 1;\n}\n\nint BAddr_Parse (BAddr *addr, char *str, char *name, int name_len)\n{\n    return BAddr_Parse2(addr, str, name, name_len, 0);\n}\n\nint BAddr_Compare (BAddr *addr1, BAddr *addr2)\n{\n    BAddr_Assert(addr1);\n    BAddr_Assert(addr2);\n    \n    if (addr1->type != addr2->type) {\n        return 0;\n    }\n    \n    switch (addr1->type) {\n        case BADDR_TYPE_IPV4:\n            return (addr1->ipv4.ip == addr2->ipv4.ip && addr1->ipv4.port == addr2->ipv4.port);\n        case BADDR_TYPE_IPV6:\n            return (!memcmp(addr1->ipv6.ip, addr2->ipv6.ip, sizeof(addr1->ipv6.ip)) && addr1->ipv6.port == addr2->ipv6.port);\n        default:\n            return 0;\n    }\n}\n\nint BAddr_CompareOrder (BAddr *addr1, BAddr *addr2)\n{\n    BAddr_Assert(addr1);\n    BAddr_Assert(addr2);\n    \n    int cmp = B_COMPARE(addr1->type, addr2->type);\n    if (cmp) {\n        return cmp;\n    }\n    \n    switch (addr1->type) {\n        case BADDR_TYPE_NONE: {\n            return 0;\n        } break;\n        case BADDR_TYPE_IPV4: {\n            uint32_t ip1 = ntoh32(addr1->ipv4.ip);\n            uint32_t ip2 = ntoh32(addr2->ipv4.ip);\n            cmp = B_COMPARE(ip1, ip2);\n            if (cmp) {\n                return cmp;\n            }\n            uint16_t port1 = ntoh16(addr1->ipv4.port);\n            uint16_t port2 = ntoh16(addr2->ipv4.port);\n            return B_COMPARE(port1, port2);\n        } break;\n        case BADDR_TYPE_IPV6: {\n            cmp = memcmp(addr1->ipv6.ip, addr2->ipv6.ip, sizeof(addr1->ipv6.ip));\n            if (cmp) {\n                return B_COMPARE(cmp, 0);\n            }\n            uint16_t port1 = ntoh16(addr1->ipv6.port);\n            uint16_t port2 = ntoh16(addr2->ipv6.port);\n            return B_COMPARE(port1, port2);\n        } break;\n        default: {\n            return 0;\n        } break;\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BConnection.h",
    "content": "/**\n * @file BConnection.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_SYSTEM_BCONNECTION\n#define BADVPN_SYSTEM_BCONNECTION\n\n#include \"misc/debug.h\"\n#include \"flow/StreamPassInterface.h\"\n#include \"flow/StreamRecvInterface.h\"\n#include \"system/BAddr.h\"\n#include \"system/BReactor.h\"\n#include \"system/BNetwork.h\"\n\n\n\n/**\n * Checks if the given address is supported by {@link BConnection} and related objects.\n * \n * @param addr address to check. Must be a proper {@link BAddr} object according to\n *             {@link BIPAddr_Assert}.\n * @return 1 if supported, 0 if not\n */\nint BConnection_AddressSupported (BAddr addr);\n\n\n#define BLISCON_FROM_ADDR 1\n#define BLISCON_FROM_UNIX 2\n\nstruct BLisCon_from {\n    int type;\n    union {\n        struct {\n            BAddr addr;\n        } from_addr;\n#ifndef BADVPN_USE_WINAPI\n        struct {\n            char const *socket_path;\n        } from_unix;\n#endif\n    } u;\n};\n\nstatic struct BLisCon_from BLisCon_from_addr (BAddr addr)\n{\n    struct BLisCon_from res;\n    res.type = BLISCON_FROM_ADDR;\n    res.u.from_addr.addr = addr;\n    return res;\n}\n\n#ifndef BADVPN_USE_WINAPI\nstatic struct BLisCon_from BLisCon_from_unix (char const *socket_path)\n{\n    struct BLisCon_from res;\n    res.type = BLISCON_FROM_UNIX;\n    res.u.from_unix.socket_path = socket_path;\n    return res;\n}\n#endif\n\n\nstruct BListener_s;\n\n/**\n * Object which listens for connections on an address.\n * When a connection is ready, the {@link BListener_handler} handler is called, from which\n * the connection can be accepted into a new {@link BConnection} object.\n */\ntypedef struct BListener_s BListener;\n\n/**\n * Handler called when a new connection is ready.\n * The connection can be accepted by calling {@link BConnection_Init} with the a\n * BCONNECTION_SOURCE_LISTENER 'source' argument.\n * If no attempt is made to accept the connection from the job closure of this handler,\n * the connection will be discarded.\n * \n * @param user as in {@link BListener_Init}\n */\ntypedef void (*BListener_handler) (void *user);\n\n/**\n * Common listener initialization function.\n * \n * The other type-specific init functions are wrappers around this one.\n */\nint BListener_InitFrom (BListener *o, struct BLisCon_from from,\n                        BReactor *reactor, void *user,\n                        BListener_handler handler) WARN_UNUSED;\n\n/**\n * Initializes the object for listening on an address.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param addr address to listen on\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when a connection can be accepted\n * @return 1 on success, 0 on failure\n */\nint BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,\n                    BListener_handler handler) WARN_UNUSED;\n\n#ifndef BADVPN_USE_WINAPI\n/**\n * Initializes the object for listening on a Unix socket.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param socket_path socket path for listening\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when a connection can be accepted\n * @return 1 on success, 0 on failure\n */\nint BListener_InitUnix (BListener *o, const char *socket_path, BReactor *reactor, void *user,\n                        BListener_handler handler) WARN_UNUSED;\n#endif\n\n/**\n * Frees the object.\n * \n * @param o the object\n */\nvoid BListener_Free (BListener *o);\n\n\n\nstruct BConnector_s;\n\n/**\n * Object which connects to an address.\n * When the connection attempt finishes, the {@link BConnector_handler} handler is called, from which,\n * if successful, the resulting connection can be moved to a new {@link BConnection} object.\n */\ntypedef struct BConnector_s BConnector;\n\n/**\n * Handler called when the connection attempt finishes.\n * If the connection attempt succeeded (is_error==0), the new connection can be used by calling\n * {@link BConnection_Init} with a BCONNECTION_SOURCE_TYPE_CONNECTOR 'source' argument.\n * This handler will be called at most once. The connector object need not be freed after it\n * is called. \n * \n * @param user as in {@link BConnector_Init}\n * @param is_error whether the connection attempt succeeded (0) or failed (1)\n */\ntypedef void (*BConnector_handler) (void *user, int is_error);\n\n/**\n * Common connector initialization function.\n * \n * The other type-specific init functions are wrappers around this one.\n */\nint BConnector_InitFrom (BConnector *o, struct BLisCon_from from, BReactor *reactor, void *user,\n                         BConnector_handler handler) WARN_UNUSED;\n\n/**\n * Initializes the object for connecting to an address.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param addr address to connect to\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when the connection attempt finishes\n * @return 1 on success, 0 on failure\n */\nint BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,\n                     BConnector_handler handler) WARN_UNUSED;\n\n#ifndef BADVPN_USE_WINAPI\n/**\n * Initializes the object for connecting to a Unix socket.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param socket_path socket path for connecting\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when the connection attempt finishes\n * @return 1 on success, 0 on failure\n */\nint BConnector_InitUnix (BConnector *o, const char *socket_path, BReactor *reactor, void *user,\n                         BConnector_handler handler) WARN_UNUSED;\n#endif\n\n/**\n * Frees the object.\n * \n * @param o the object\n */\nvoid BConnector_Free (BConnector *o);\n\n\n\n#define BCONNECTION_SOURCE_TYPE_LISTENER 1\n#define BCONNECTION_SOURCE_TYPE_CONNECTOR 2\n#define BCONNECTION_SOURCE_TYPE_PIPE 3\n\nstruct BConnection_source {\n    int type;\n    union {\n        struct {\n            BListener *listener;\n            BAddr *out_addr;\n        } listener;\n        struct {\n            BConnector *connector;\n        } connector;\n#ifndef BADVPN_USE_WINAPI\n        struct {\n            int pipefd;\n            int close_it;\n        } pipe;\n#endif\n    } u;\n};\n\nstatic struct BConnection_source BConnection_source_listener (BListener *listener, BAddr *out_addr)\n{\n    struct BConnection_source s;\n    s.type = BCONNECTION_SOURCE_TYPE_LISTENER;\n    s.u.listener.listener = listener;\n    s.u.listener.out_addr = out_addr;\n    return s;\n}\n\nstatic struct BConnection_source BConnection_source_connector (BConnector *connector)\n{\n    struct BConnection_source s;\n    s.type = BCONNECTION_SOURCE_TYPE_CONNECTOR;\n    s.u.connector.connector = connector;\n    return s;\n}\n\n#ifndef BADVPN_USE_WINAPI\nstatic struct BConnection_source BConnection_source_pipe (int pipefd, int close_it)\n{\n    struct BConnection_source s;\n    s.type = BCONNECTION_SOURCE_TYPE_PIPE;\n    s.u.pipe.pipefd = pipefd;\n    s.u.pipe.close_it = close_it;\n    return s;\n}\n#endif\n\nstruct BConnection_s;\n\n/**\n * Object which represents a stream connection. This is usually a TCP connection, either client\n * or server, but may also be used with any file descriptor (e.g. pipe) on Unix-like systems.\n * Sending and receiving is performed via {@link StreamPassInterface} and {@link StreamRecvInterface},\n * respectively.\n */\ntypedef struct BConnection_s BConnection;\n\n#define BCONNECTION_EVENT_ERROR 1\n#define BCONNECTION_EVENT_RECVCLOSED 2\n\n/**\n * Handler called when an error occurs or the receive end of the connection was closed\n * by the remote peer.\n * - If event is BCONNECTION_EVENT_ERROR, the connection is no longer usable and must be freed\n *   from withing the job closure of this handler. No further I/O or interface initialization\n *   must occur.\n * - If event is BCONNECTION_EVENT_RECVCLOSED, no further receive I/O or receive interface\n *   initialization must occur. It is guarantted that the receive interface was initialized.\n * \n * @param user as in {@link BConnection_Init} or {@link BConnection_SetHandlers}\n * @param event what happened - BCONNECTION_EVENT_ERROR or BCONNECTION_EVENT_RECVCLOSED\n */\ntypedef void (*BConnection_handler) (void *user, int event);\n\n/**\n * Initializes the object.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param source specifies what the connection comes from. This argument must be created with one of the\n *               following macros:\n *               - BCONNECTION_SOURCE_LISTENER(BListener *, BAddr *)\n *                 Accepts a connection ready on a {@link BListener} object. Must be called from the job\n *                 closure of the listener's {@link BListener_handler}, and must be the first attempt\n *                 for this handler invocation. The address of the client is written if the address\n *                 argument is not NULL (theoretically an invalid address may be returned).\n *               - BCONNECTION_SOURCE_CONNECTOR(Bconnector *)\n *                 Uses a connection establised with {@link BConnector}. Must be called from the job\n *                 closure of the connector's {@link BConnector_handler}, the handler must be reporting\n *                 successful connection, and must be the first attempt for this handler invocation.\n *               - BCONNECTION_SOURCE_PIPE(int pipefd, int close_it)\n *                 On Unix-like systems, uses the provided file descriptor. The file descriptor number must\n *                 be >=0. If close_it is true, the connector will take responsibility of closing the\n *                 pipefd. Note that it will be closed even when this Init fails.\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when an error occurs or the receive end of the connection was closed\n *                by the remote peer.\n * @return 1 on success, 0 on failure\n */\nint BConnection_Init (BConnection *o, struct BConnection_source source, BReactor *reactor, void *user,\n                      BConnection_handler handler) WARN_UNUSED;\n\n/**\n * Frees the object.\n * The send and receive interfaces must not be initialized.\n * If the connection was created with a BCONNECTION_SOURCE_PIPE 'source' argument, the file descriptor\n * will not be closed.\n * \n * @param o the object\n */\nvoid BConnection_Free (BConnection *o);\n\n/**\n * Updates the handler function.\n * \n * @param o the object\n * @param user argument to handler\n * @param handler new handler function, as in {@link BConnection_Init}. Additionally, may be NULL to\n *                remove the current handler. In this case, a proper handler must be set before anything\n *                can happen with the connection. This is used when moving the connection ownership from\n *                one module to another.\n */\nvoid BConnection_SetHandlers (BConnection *o, void *user, BConnection_handler handler);\n\n/**\n * Sets the SO_SNDBUF socket option.\n * \n * @param o the object\n * @param buf_size value for SO_SNDBUF option\n * @return 1 on success, 0 on failure\n */\nint BConnection_SetSendBuffer (BConnection *o, int buf_size);\n\n/**\n * Initializes the send interface for the connection.\n * The send interface must not be initialized.\n * \n * @param o the object\n */\nvoid BConnection_SendAsync_Init (BConnection *o);\n\n/**\n * Frees the send interface for the connection.\n * The send interface must be initialized.\n * If the send interface was busy when this is called, the connection is no longer usable and must be\n * freed before any further I/O or interface initialization.\n * \n * @param o the object\n */\nvoid BConnection_SendAsync_Free (BConnection *o);\n\n/**\n * Returns the send interface.\n * The send interface must be initialized.\n * \n * @param o the object\n * @return send interface\n */\nStreamPassInterface * BConnection_SendAsync_GetIf (BConnection *o);\n\n/**\n * Initializes the receive interface for the connection.\n * The receive interface must not be initialized.\n * \n * @param o the object\n */\nvoid BConnection_RecvAsync_Init (BConnection *o);\n\n/**\n * Frees the receive interface for the connection.\n * The receive interface must be initialized.\n * If the receive interface was busy when this is called, the connection is no longer usable and must be\n * freed before any further I/O or interface initialization.\n * \n * @param o the object\n */\nvoid BConnection_RecvAsync_Free (BConnection *o);\n\n/**\n * Returns the receive interface.\n * The receive interface must be initialized.\n * \n * @param o the object\n * @return receive interface\n */\nStreamRecvInterface * BConnection_RecvAsync_GetIf (BConnection *o);\n\n\n\n#ifdef BADVPN_USE_WINAPI\n#include \"BConnection_win.h\"\n#else\n#include \"BConnection_unix.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BConnection_common.c",
    "content": "/**\n * @file BConnection_common.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"BConnection.h\"\n\nint BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,\n                    BListener_handler handler)\n{\n    return BListener_InitFrom(o, BLisCon_from_addr(addr), reactor, user, handler);\n}\n\n#ifndef BADVPN_USE_WINAPI\nint BListener_InitUnix (BListener *o, const char *socket_path, BReactor *reactor, void *user,\n                        BListener_handler handler)\n{\n    return BListener_InitFrom(o, BLisCon_from_unix(socket_path), reactor, user, handler);\n}\n#endif\n\nint BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,\n                     BConnector_handler handler)\n{\n    return BConnector_InitFrom(o, BLisCon_from_addr(addr), reactor, user, handler);\n}\n\n#ifndef BADVPN_USE_WINAPI\nint BConnector_InitUnix (BConnector *o, const char *socket_path, BReactor *reactor, void *user,\n                         BConnector_handler handler)\n{\n    return BConnector_InitFrom(o, BLisCon_from_unix(socket_path), reactor, user, handler);\n}\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BConnection_unix.c",
    "content": "/**\n * @file BConnection_unix.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <string.h>\n#include <stddef.h>\n#include <unistd.h>\n#include <errno.h>\n#include <sys/types.h>\n#include <sys/socket.h>\n#include <sys/un.h>\n\n#include \"misc/nonblocking.h\"\n#include \"misc/strdup.h\"\n#include \"base/BLog.h\"\n\n#include \"BConnection.h\"\n\n#include \"generated/blog_channel_BConnection.h\"\n\n#define MAX_UNIX_SOCKET_PATH 200\n\n#define SEND_STATE_NOT_INITED 0\n#define SEND_STATE_READY 1\n#define SEND_STATE_BUSY 2\n\n#define RECV_STATE_NOT_INITED 0\n#define RECV_STATE_READY 1\n#define RECV_STATE_BUSY 2\n#define RECV_STATE_INITED_CLOSED 3\n#define RECV_STATE_NOT_INITED_CLOSED 4\n\nstruct sys_addr {\n    socklen_t len;\n    union {\n        struct sockaddr generic;\n        struct sockaddr_in ipv4;\n        struct sockaddr_in6 ipv6;\n    } addr;\n};\n\nstruct unix_addr {\n    socklen_t len;\n    union {\n        struct sockaddr_un addr;\n        uint8_t bytes[offsetof(struct sockaddr_un, sun_path) + MAX_UNIX_SOCKET_PATH + 1];\n    } u;\n};\n\nstatic int build_unix_address (struct unix_addr *out, const char *socket_path);\nstatic void addr_socket_to_sys (struct sys_addr *out, BAddr addr);\nstatic void addr_sys_to_socket (BAddr *out, struct sys_addr addr);\nstatic void listener_fd_handler (BListener *o, int events);\nstatic void listener_default_job_handler (BListener *o);\nstatic void connector_fd_handler (BConnector *o, int events);\nstatic void connector_job_handler (BConnector *o);\nstatic void connection_report_error (BConnection *o);\nstatic void connection_send (BConnection *o);\nstatic void connection_recv (BConnection *o);\nstatic void connection_fd_handler (BConnection *o, int events);\nstatic void connection_send_job_handler (BConnection *o);\nstatic void connection_recv_job_handler (BConnection *o);\nstatic void connection_send_if_handler_send (BConnection *o, uint8_t *data, int data_len);\nstatic void connection_recv_if_handler_recv (BConnection *o, uint8_t *data, int data_len);\n\nstatic int build_unix_address (struct unix_addr *out, const char *socket_path)\n{\n    ASSERT(socket_path);\n    \n    if (strlen(socket_path) > MAX_UNIX_SOCKET_PATH) {\n        return 0;\n    }\n    \n    out->len = offsetof(struct sockaddr_un, sun_path) + strlen(socket_path) + 1;\n    out->u.addr.sun_family = AF_UNIX;\n    strcpy(out->u.addr.sun_path, socket_path);\n    \n    return 1;\n}\n\nstatic void addr_socket_to_sys (struct sys_addr *out, BAddr addr)\n{\n    switch (addr.type) {\n        case BADDR_TYPE_IPV4: {\n            out->len = sizeof(out->addr.ipv4);\n            memset(&out->addr.ipv4, 0, sizeof(out->addr.ipv4));\n            out->addr.ipv4.sin_family = AF_INET;\n            out->addr.ipv4.sin_port = addr.ipv4.port;\n            out->addr.ipv4.sin_addr.s_addr = addr.ipv4.ip;\n        } break;\n        \n        case BADDR_TYPE_IPV6: {\n            out->len = sizeof(out->addr.ipv6);\n            memset(&out->addr.ipv6, 0, sizeof(out->addr.ipv6));\n            out->addr.ipv6.sin6_family = AF_INET6;\n            out->addr.ipv6.sin6_port = addr.ipv6.port;\n            out->addr.ipv6.sin6_flowinfo = 0;\n            memcpy(out->addr.ipv6.sin6_addr.s6_addr, addr.ipv6.ip, 16);\n            out->addr.ipv6.sin6_scope_id = 0;\n        } break;\n        \n        default: ASSERT(0);\n    }\n}\n\nstatic void addr_sys_to_socket (BAddr *out, struct sys_addr addr)\n{\n    switch (addr.addr.generic.sa_family) {\n        case AF_INET: {\n            ASSERT(addr.len == sizeof(struct sockaddr_in))\n            BAddr_InitIPv4(out, addr.addr.ipv4.sin_addr.s_addr, addr.addr.ipv4.sin_port);\n        } break;\n        \n        case AF_INET6: {\n            ASSERT(addr.len == sizeof(struct sockaddr_in6))\n            BAddr_InitIPv6(out, addr.addr.ipv6.sin6_addr.s6_addr, addr.addr.ipv6.sin6_port);\n        } break;\n        \n        default: {\n            BAddr_InitNone(out);\n        } break;\n    }\n}\n\nstatic void listener_fd_handler (BListener *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // set default job\n    BPending_Set(&o->default_job);\n    \n    // call handler\n    o->handler(o->user);\n    return;\n}\n\nstatic void listener_default_job_handler (BListener *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    BLog(BLOG_ERROR, \"discarding connection\");\n    \n    // accept\n    int newfd = accept(o->fd, NULL, NULL);\n    if (newfd < 0) {\n        BLog(BLOG_ERROR, \"accept failed\");\n        return;\n    }\n    \n    // close new fd\n    if (close(newfd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\n}\n\nstatic void connector_fd_handler (BConnector *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->fd >= 0)\n    ASSERT(!o->connected)\n    ASSERT(o->have_bfd)\n    \n    // free BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    \n    // set have no BFileDescriptor\n    o->have_bfd = 0;\n    \n    // read connection result\n    int result;\n    socklen_t result_len = sizeof(result);\n    if (getsockopt(o->fd, SOL_SOCKET, SO_ERROR, &result, &result_len) < 0) {\n        BLog(BLOG_ERROR, \"getsockopt failed\");\n        goto fail0;\n    }\n    ASSERT_FORCE(result_len == sizeof(result))\n    \n    if (result != 0) {\n        BLog(BLOG_ERROR, \"connection failed\");\n        goto fail0;\n    }\n    \n    // set connected\n    o->connected = 1;\n    \nfail0:\n    // call handler\n    o->handler(o->user, !o->connected);\n    return;\n}\n\nstatic void connector_job_handler (BConnector *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->fd >= 0)\n    ASSERT(o->connected)\n    ASSERT(!o->have_bfd)\n    \n    // call handler\n    o->handler(o->user, 0);\n    return;\n}\n\nstatic void connection_report_error (BConnection *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->handler)\n    \n    // report error\n    DEBUGERROR(&o->d_err, o->handler(o->user, BCONNECTION_EVENT_ERROR));\n    return;\n}\n\nstatic void connection_send (BConnection *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.state == SEND_STATE_BUSY)\n    \n    // limit\n    if (!o->is_hupd) {\n        if (!BReactorLimit_Increment(&o->send.limit)) {\n            // wait for fd\n            o->wait_events |= BREACTOR_WRITE;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n    }\n    \n    // send\n    int bytes = write(o->fd, o->send.busy_data, o->send.busy_data_len);\n    if (bytes < 0) {\n        if (!o->is_hupd && (errno == EAGAIN || errno == EWOULDBLOCK)) {\n            // wait for fd\n            o->wait_events |= BREACTOR_WRITE;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n        \n        BLog(BLOG_ERROR, \"send failed\");\n        connection_report_error(o);\n        return;\n    }\n    BLog(BLOG_INFO, \"clien try write: %d, written: %d\", o->send.busy_data_len, bytes);\n    \n    ASSERT(bytes > 0)\n    ASSERT(bytes <= o->send.busy_data_len)\n    \n    // set ready\n    o->send.state = SEND_STATE_READY;\n    \n    // done\n    StreamPassInterface_Done(&o->send.iface, bytes);\n}\n\nstatic void connection_recv (BConnection *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.state == RECV_STATE_BUSY)\n    \n    // limit\n    if (!o->is_hupd) {\n        if (!BReactorLimit_Increment(&o->recv.limit)) {\n            // wait for fd\n            o->wait_events |= BREACTOR_READ;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n    }\n    BLog(BLOG_INFO, \"clien try read: %d\", o->recv.busy_data_avail);\n\n    // recv\n    int bytes = recv(o->fd, o->recv.busy_data, o->recv.busy_data_avail, 0);\n    if (bytes < 0) {\n        if (!o->is_hupd && (errno == EAGAIN || errno == EWOULDBLOCK)) {\n            // wait for fd\n            o->wait_events |= BREACTOR_READ;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n        BLog(BLOG_ERROR, \"recv failed\");\n        connection_report_error(o);\n        return;\n    }\n    BLog(BLOG_INFO, \"clien try read: %d, received: %d\", o->recv.busy_data_avail, bytes);\n    \n    if (bytes == 0) {\n        // set recv inited closed\n        o->recv.state = RECV_STATE_INITED_CLOSED;\n        \n        // report recv closed\n        o->handler(o->user, BCONNECTION_EVENT_RECVCLOSED);\n        return;\n    }\n    \n    ASSERT(bytes > 0)\n    ASSERT(bytes <= o->recv.busy_data_avail)\n\n    // set not busy\n    o->recv.state = RECV_STATE_READY;\n    // done\n    StreamRecvInterface_Done(&o->recv.iface, bytes);\n}\n\nstatic void connection_fd_handler (BConnection *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(!o->is_hupd)\n    \n    // clear handled events\n    o->wait_events &= ~events;\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    \n    int have_send = 0;\n    int have_recv = 0;\n    \n    // if we got a HUP event, stop monitoring the file descriptor\n    if ((events & BREACTOR_HUP)) {\n        BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n        o->is_hupd = 1;\n    }\n    \n    if ((events & BREACTOR_WRITE) || ((events & (BREACTOR_ERROR|BREACTOR_HUP)) && o->send.state == SEND_STATE_BUSY)) {\n        ASSERT(o->send.state == SEND_STATE_BUSY)\n        have_send = 1;\n    }\n    \n    if ((events & BREACTOR_READ) || ((events & (BREACTOR_ERROR|BREACTOR_HUP)) && o->recv.state == RECV_STATE_BUSY)) {\n        ASSERT(o->recv.state == RECV_STATE_BUSY)\n        have_recv = 1;\n    }\n    \n    if (have_send) {\n        if (have_recv) {\n            BPending_Set(&o->recv.job);\n        }\n        \n        connection_send(o);\n        return;\n    }\n    \n    if (have_recv) {\n        connection_recv(o);\n        return;\n    }\n    \n    if (!o->is_hupd) {\n        BLog(BLOG_ERROR, \"fd error event\");\n        connection_report_error(o);\n        return;\n    }\n}\n\nstatic void connection_send_job_handler (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.state == SEND_STATE_BUSY)\n    \n    connection_send(o);\n    return;\n}\n\nstatic void connection_recv_job_handler (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.state == RECV_STATE_BUSY)\n    \n    connection_recv(o);\n    return;\n}\n\nstatic void connection_send_if_handler_send (BConnection *o, uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.state == SEND_STATE_READY)\n    ASSERT(data_len > 0)\n    \n    // remember data\n    o->send.busy_data = data;\n    o->send.busy_data_len = data_len;\n    \n    // set busy\n    o->send.state = SEND_STATE_BUSY;\n    \n    connection_send(o);\n    return;\n}\n\nstatic void connection_recv_if_handler_recv (BConnection *o, uint8_t *data, int data_avail)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.state == RECV_STATE_READY)\n    ASSERT(data_avail > 0)\n    \n    // remember data\n    o->recv.busy_data = data;\n    o->recv.busy_data_avail = data_avail;\n    \n    // set busy\n    o->recv.state = RECV_STATE_BUSY;\n    \n    connection_recv(o);\n    return;\n}\n\nint BConnection_AddressSupported (BAddr addr)\n{\n    BAddr_Assert(&addr);\n    \n    return (addr.type == BADDR_TYPE_IPV4 || addr.type == BADDR_TYPE_IPV6);\n}\n\nint BListener_InitFrom (BListener *o, struct BLisCon_from from,\n                        BReactor *reactor, void *user,\n                        BListener_handler handler)\n{\n    ASSERT(from.type == BLISCON_FROM_ADDR || from.type == BLISCON_FROM_UNIX)\n    ASSERT(from.type != BLISCON_FROM_UNIX || from.u.from_unix.socket_path)\n    ASSERT(handler)\n    BNetwork_Assert();\n    \n    // init arguments\n    o->reactor = reactor;\n    o->user = user;\n    o->handler = handler;\n    \n    // init socket path\n    o->unix_socket_path = NULL;\n    if (from.type == BLISCON_FROM_UNIX) {\n        o->unix_socket_path = b_strdup(from.u.from_unix.socket_path);\n        if (!o->unix_socket_path) {\n            BLog(BLOG_ERROR, \"b_strdup failed\");\n            goto fail0;\n        }\n    }\n    \n    struct unix_addr unixaddr;\n    struct sys_addr sysaddr;\n    \n    if (from.type == BLISCON_FROM_UNIX) {\n        // build address\n        if (!build_unix_address(&unixaddr, o->unix_socket_path)) {\n            BLog(BLOG_ERROR, \"build_unix_address failed\");\n            goto fail1;\n        }\n        \n        // init fd\n        if ((o->fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {\n            BLog(BLOG_ERROR, \"socket failed\");\n            goto fail1;\n        }\n    } else {\n        // check address\n        if (!BConnection_AddressSupported(from.u.from_addr.addr)) {\n            BLog(BLOG_ERROR, \"address not supported\");\n            goto fail1;\n        }\n        \n        // convert address\n        addr_socket_to_sys(&sysaddr, from.u.from_addr.addr);\n        \n        // init fd\n        if ((o->fd = socket(sysaddr.addr.generic.sa_family, SOCK_STREAM, 0)) < 0) {\n            BLog(BLOG_ERROR, \"socket failed\");\n            goto fail1;\n        }\n    }\n    \n    // set non-blocking\n    if (!badvpn_set_nonblocking(o->fd)) {\n        BLog(BLOG_ERROR, \"badvpn_set_nonblocking failed\");\n        goto fail2;\n    }\n    \n    if (from.type == BLISCON_FROM_UNIX) {\n        // unlink existing socket\n        if (unlink(o->unix_socket_path) < 0 && errno != ENOENT) {\n            BLog(BLOG_ERROR, \"unlink existing socket failed\");\n            goto fail2;\n        }\n        \n        // bind\n        if (bind(o->fd, (struct sockaddr *)&unixaddr.u.addr, unixaddr.len) < 0) {\n            BLog(BLOG_ERROR, \"bind failed\");\n            goto fail2;\n        }\n    } else {\n        // set SO_REUSEADDR\n        int optval = 1;\n        if (setsockopt(o->fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {\n            BLog(BLOG_ERROR, \"setsockopt(SO_REUSEADDR) failed\");\n        }\n        \n        // bind\n        if (bind(o->fd, &sysaddr.addr.generic, sysaddr.len) < 0) {\n            BLog(BLOG_ERROR, \"bind failed\");\n            goto fail2;\n        }\n    }\n    \n    // listen\n    if (listen(o->fd, BCONNECTION_LISTEN_BACKLOG) < 0) {\n        BLog(BLOG_ERROR, \"listen failed\");\n        goto fail3;\n    }\n    \n    // init BFileDescriptor\n    BFileDescriptor_Init(&o->bfd, o->fd, (BFileDescriptor_handler)listener_fd_handler, o);\n    if (!BReactor_AddFileDescriptor(o->reactor, &o->bfd)) {\n        BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n        goto fail3;\n    }\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, BREACTOR_READ);\n    \n    // init default job\n    BPending_Init(&o->default_job, BReactor_PendingGroup(o->reactor), (BPending_handler)listener_default_job_handler, o);\n    \n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail3:\n    if (from.type == BLISCON_FROM_UNIX) {\n        if (unlink(o->unix_socket_path) < 0) {\n            BLog(BLOG_ERROR, \"unlink socket failed\");\n        }\n    }\nfail2:\n    if (close(o->fd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\nfail1:\n    free(o->unix_socket_path);\nfail0:\n    return 0;\n}\n\nvoid BListener_Free (BListener *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free default job\n    BPending_Free(&o->default_job);\n    \n    // free BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    \n    // free fd\n    if (close(o->fd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\n    \n    // unlink unix socket\n    if (o->unix_socket_path) {\n        if (unlink(o->unix_socket_path) < 0) {\n            BLog(BLOG_ERROR, \"unlink socket failed\");\n        }\n    }\n    \n    // free unix socket path\n    if (o->unix_socket_path) {\n        free(o->unix_socket_path);\n    }\n}\n\nint BConnector_InitFrom (BConnector *o, struct BLisCon_from from, BReactor *reactor, void *user,\n                         BConnector_handler handler)\n{\n    ASSERT(from.type == BLISCON_FROM_ADDR || from.type == BLISCON_FROM_UNIX)\n    ASSERT(from.type != BLISCON_FROM_UNIX || from.u.from_unix.socket_path)\n    ASSERT(handler)\n    BNetwork_Assert();\n    \n    // init arguments\n    o->reactor = reactor;\n    o->user = user;\n    o->handler = handler;\n    \n    struct unix_addr unixaddr;\n    struct sys_addr sysaddr;\n    \n    if (from.type == BLISCON_FROM_UNIX) {\n        // build address\n        if (!build_unix_address(&unixaddr, from.u.from_unix.socket_path)) {\n            BLog(BLOG_ERROR, \"build_unix_address failed\");\n            goto fail0;\n        }\n    } else {\n        // check address\n        if (!BConnection_AddressSupported(from.u.from_addr.addr)) {\n            BLog(BLOG_ERROR, \"address not supported\");\n            goto fail0;\n        }\n        \n        // convert address\n        addr_socket_to_sys(&sysaddr, from.u.from_addr.addr);\n    }\n    \n    // init job\n    BPending_Init(&o->job, BReactor_PendingGroup(o->reactor), (BPending_handler)connector_job_handler, o);\n    \n    if (from.type == BLISCON_FROM_UNIX) {\n        // init fd\n        if ((o->fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {\n            BLog(BLOG_ERROR, \"socket failed\");\n            goto fail1;\n        }\n    } else {\n        // init fd\n        if ((o->fd = socket(sysaddr.addr.generic.sa_family, SOCK_STREAM, 0)) < 0) {\n            BLog(BLOG_ERROR, \"socket failed\");\n            goto fail1;\n        }\n    }\n    \n    // set fd non-blocking\n    if (!badvpn_set_nonblocking(o->fd)) {\n        BLog(BLOG_ERROR, \"badvpn_set_nonblocking failed\");\n        goto fail2;\n    }\n    \n    // connect fd\n    int connect_res;\n    if (from.type == BLISCON_FROM_UNIX) {\n        connect_res = connect(o->fd, (struct sockaddr *)&unixaddr.u.addr, unixaddr.len);\n    } else {\n        connect_res = connect(o->fd, &sysaddr.addr.generic, sysaddr.len);\n    }\n    if (connect_res < 0 && errno != EINPROGRESS) {\n        BLog(BLOG_ERROR, \"connect failed\");\n        goto fail2;\n    }\n    \n    // set not connected\n    o->connected = 0;\n    \n    // set have no BFileDescriptor\n    o->have_bfd = 0;\n    \n    if (connect_res < 0) {\n        // init BFileDescriptor\n        BFileDescriptor_Init(&o->bfd, o->fd, (BFileDescriptor_handler)connector_fd_handler, o);\n        if (!BReactor_AddFileDescriptor(o->reactor, &o->bfd)) {\n            BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n            goto fail2;\n        }\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, BREACTOR_WRITE);\n        \n        // set have BFileDescriptor\n        o->have_bfd = 1;\n    } else {\n        // set connected\n        o->connected = 1;\n        \n        // set job\n        BPending_Set(&o->job);\n    }\n    \n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail2:\n    if (close(o->fd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\nfail1:\n    BPending_Free(&o->job);\nfail0:\n    return 0;\n}\n\nvoid BConnector_Free (BConnector *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // free BFileDescriptor\n    if (o->have_bfd) {\n        BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    }\n    \n    // close fd\n    if (o->fd != -1) {\n        if (close(o->fd) < 0) {\n            BLog(BLOG_ERROR, \"close failed\");\n        }\n    }\n    \n    // free job\n    BPending_Free(&o->job);\n}\n\nint BConnection_Init (BConnection *o, struct BConnection_source source, BReactor *reactor, void *user,\n                      BConnection_handler handler)\n{\n    switch (source.type) {\n        case BCONNECTION_SOURCE_TYPE_LISTENER: {\n            BListener *listener = source.u.listener.listener;\n            DebugObject_Access(&listener->d_obj);\n            ASSERT(BPending_IsSet(&listener->default_job))\n        } break;\n        case BCONNECTION_SOURCE_TYPE_CONNECTOR: {\n            BConnector *connector = source.u.connector.connector;\n            DebugObject_Access(&connector->d_obj);\n            ASSERT(connector->fd >= 0)\n            ASSERT(connector->connected)\n            ASSERT(!connector->have_bfd)\n            ASSERT(!BPending_IsSet(&connector->job))\n        } break;\n        case BCONNECTION_SOURCE_TYPE_PIPE: {\n            ASSERT(source.u.pipe.pipefd >= 0)\n        } break;\n        default: ASSERT(0);\n    }\n    ASSERT(handler)\n    BNetwork_Assert();\n    \n    // init arguments\n    o->reactor = reactor;\n    o->user = user;\n    o->handler = handler;\n    \n    switch (source.type) {\n        case BCONNECTION_SOURCE_TYPE_LISTENER: {\n            BListener *listener = source.u.listener.listener;\n            \n            // unset listener's default job\n            BPending_Unset(&listener->default_job);\n            \n            // accept\n            struct sys_addr sysaddr;\n            sysaddr.len = sizeof(sysaddr.addr);\n            if ((o->fd = accept(listener->fd, &sysaddr.addr.generic, &sysaddr.len)) < 0) {\n                BLog(BLOG_ERROR, \"accept failed\");\n                goto fail0;\n            }\n            o->close_fd = 1;\n            \n            // set non-blocking\n            if (!badvpn_set_nonblocking(o->fd)) {\n                BLog(BLOG_ERROR, \"badvpn_set_nonblocking failed\");\n                goto fail1;\n            }\n            \n            // return address\n            if (source.u.listener.out_addr) {\n                addr_sys_to_socket(source.u.listener.out_addr, sysaddr);\n            }\n        } break;\n        \n        case BCONNECTION_SOURCE_TYPE_CONNECTOR: {\n            BConnector *connector = source.u.connector.connector;\n            \n            // grab fd from connector\n            o->fd = connector->fd;\n            connector->fd = -1;\n            o->close_fd = 1;\n        } break;\n        \n        case BCONNECTION_SOURCE_TYPE_PIPE: {\n            // use user-provided fd\n            o->fd = source.u.pipe.pipefd;\n            o->close_fd = !!source.u.pipe.close_it;\n            \n            // set non-blocking\n            if (!badvpn_set_nonblocking(o->fd)) {\n                BLog(BLOG_ERROR, \"badvpn_set_nonblocking failed\");\n                goto fail1;\n            }\n        } break;\n    }\n    \n    // set not HUPd\n    o->is_hupd = 0;\n    \n    // init BFileDescriptor\n    BFileDescriptor_Init(&o->bfd, o->fd, (BFileDescriptor_handler)connection_fd_handler, o);\n    if (!BReactor_AddFileDescriptor(o->reactor, &o->bfd)) {\n        BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n        goto fail1;\n    }\n    \n    // set no wait events\n    o->wait_events = 0;\n    \n    // init limits\n    BReactorLimit_Init(&o->send.limit, o->reactor, BCONNECTION_SEND_LIMIT);\n    BReactorLimit_Init(&o->recv.limit, o->reactor, BCONNECTION_RECV_LIMIT);\n    \n    // set send and recv not inited\n    o->send.state = SEND_STATE_NOT_INITED;\n    o->recv.state = RECV_STATE_NOT_INITED;\n    \n    DebugError_Init(&o->d_err, BReactor_PendingGroup(o->reactor));\n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail1:\n    if (o->close_fd) {\n        if (close(o->fd) < 0) {\n            BLog(BLOG_ERROR, \"close failed\");\n        }\n    }\nfail0:\n    return 0;\n}\n\nvoid BConnection_Free (BConnection *o)\n{\n    DebugObject_Free(&o->d_obj);\n    DebugError_Free(&o->d_err);\n    ASSERT(o->send.state == SEND_STATE_NOT_INITED)\n    ASSERT(o->recv.state == RECV_STATE_NOT_INITED || o->recv.state == RECV_STATE_NOT_INITED_CLOSED)\n    \n    // free limits\n    BReactorLimit_Free(&o->recv.limit);\n    BReactorLimit_Free(&o->send.limit);\n    \n    // free BFileDescriptor\n    if (!o->is_hupd) {\n        BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    }\n    \n    // close fd\n    if (o->close_fd) {\n        if (close(o->fd) < 0) {\n            BLog(BLOG_ERROR, \"close failed\");\n        }\n    }\n}\n\nvoid BConnection_SetHandlers (BConnection *o, void *user, BConnection_handler handler)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // set handlers\n    o->user = user;\n    o->handler = handler;\n}\n\nint BConnection_SetSendBuffer (BConnection *o, int buf_size)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    if (setsockopt(o->fd, SOL_SOCKET, SO_SNDBUF, (void *)&buf_size, sizeof(buf_size)) < 0) {\n        BLog(BLOG_ERROR, \"setsockopt failed\");\n        return 0;\n    }\n    \n    return 1;\n}\n\nvoid BConnection_SendAsync_Init (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.state == SEND_STATE_NOT_INITED)\n    \n    // init interface\n    StreamPassInterface_Init(&o->send.iface, (StreamPassInterface_handler_send)connection_send_if_handler_send, o, BReactor_PendingGroup(o->reactor));\n    \n    // init job\n    BPending_Init(&o->send.job, BReactor_PendingGroup(o->reactor), (BPending_handler)connection_send_job_handler, o);\n    \n    // set ready\n    o->send.state = SEND_STATE_READY;\n}\n\nvoid BConnection_SendAsync_Free (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->send.state == SEND_STATE_READY || o->send.state == SEND_STATE_BUSY)\n    \n    // update events\n    if (!o->is_hupd) {\n        o->wait_events &= ~BREACTOR_WRITE;\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    }\n    \n    // free job\n    BPending_Free(&o->send.job);\n    \n    // free interface\n    StreamPassInterface_Free(&o->send.iface);\n    \n    // set not inited\n    o->send.state = SEND_STATE_NOT_INITED;\n}\n\nStreamPassInterface * BConnection_SendAsync_GetIf (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->send.state == SEND_STATE_READY || o->send.state == SEND_STATE_BUSY)\n    \n    return &o->send.iface;\n}\n\nvoid BConnection_RecvAsync_Init (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.state == RECV_STATE_NOT_INITED)\n    \n    // init interface\n    StreamRecvInterface_Init(&o->recv.iface, (StreamRecvInterface_handler_recv)connection_recv_if_handler_recv, o, BReactor_PendingGroup(o->reactor));\n    \n    // init job\n    BPending_Init(&o->recv.job, BReactor_PendingGroup(o->reactor), (BPending_handler)connection_recv_job_handler, o);\n    \n    // set ready\n    o->recv.state = RECV_STATE_READY;\n}\n\nvoid BConnection_RecvAsync_Free (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->recv.state == RECV_STATE_READY || o->recv.state == RECV_STATE_BUSY || o->recv.state == RECV_STATE_INITED_CLOSED)\n    \n    // update events\n    if (!o->is_hupd) {\n        o->wait_events &= ~BREACTOR_READ;\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    }\n    \n    // free job\n    BPending_Free(&o->recv.job);\n    \n    // free interface\n    StreamRecvInterface_Free(&o->recv.iface);\n    \n    // set not inited\n    o->recv.state = RECV_STATE_NOT_INITED;\n}\n\nStreamRecvInterface * BConnection_RecvAsync_GetIf (BConnection *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->recv.state == RECV_STATE_READY || o->recv.state == RECV_STATE_BUSY || o->recv.state == RECV_STATE_INITED_CLOSED)\n    \n    return &o->recv.iface;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BConnection_unix.h",
    "content": "/**\n * @file BConnection_unix.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"misc/debugerror.h\"\n#include \"base/DebugObject.h\"\n\n#define BCONNECTION_SEND_LIMIT 2\n#define BCONNECTION_RECV_LIMIT 2\n#define BCONNECTION_LISTEN_BACKLOG 128\n\nstruct BListener_s {\n    BReactor *reactor;\n    void *user;\n    BListener_handler handler;\n    char *unix_socket_path;\n    int fd;\n    BFileDescriptor bfd;\n    BPending default_job;\n    DebugObject d_obj;\n};\n\nstruct BConnector_s {\n    BReactor *reactor;\n    void *user;\n    BConnector_handler handler;\n    BPending job;\n    int fd;\n    int connected;\n    int have_bfd;\n    BFileDescriptor bfd;\n    DebugObject d_obj;\n};\n\nstruct BConnection_s {\n    BReactor *reactor;\n    void *user;\n    BConnection_handler handler;\n    int fd;\n    int close_fd;\n    int is_hupd;\n    BFileDescriptor bfd;\n    int wait_events;\n    struct {\n        BReactorLimit limit;\n        StreamPassInterface iface;\n        BPending job;\n        const uint8_t *busy_data;\n        int busy_data_len;\n        int state;\n    } send;\n    struct {\n        BReactorLimit limit;\n        StreamRecvInterface iface;\n        BPending job;\n        uint8_t *busy_data;\n        int busy_data_avail;\n        int state;\n    } recv;\n    DebugError d_err;\n    DebugObject d_obj;\n};\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BDatagram.h",
    "content": "/**\n * @file BDatagram.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_SYSTEM_BDATAGRAM\n#define BADVPN_SYSTEM_BDATAGRAM\n\n#include \"misc/debug.h\"\n#include \"flow/PacketPassInterface.h\"\n#include \"flow/PacketRecvInterface.h\"\n#include \"system/BAddr.h\"\n#include \"system/BReactor.h\"\n#include \"system/BNetwork.h\"\n\nstruct BDatagram_s;\n\n/**\n * Represents datagram communication. This is usually UDP, but may also be Linux packet sockets.\n * Sending and receiving is performed via {@link PacketPassInterface} and {@link PacketRecvInterface},\n * respectively.\n */\ntypedef struct BDatagram_s BDatagram;\n\n#define BDATAGRAM_EVENT_ERROR 1\n\n/**\n * Handler called when an error occurs with the datagram object.\n * The datagram object is no longer usable and must be freed from withing the job closure of\n * this handler. No further I/O, interface initialization, binding and send address setting\n * must occur.\n * \n * @param user as in {@link BDatagram_Init}\n * @param event always BDATAGRAM_EVENT_ERROR\n */\ntypedef void (*BDatagram_handler) (void *user, int event);\n\n/**\n * Checks if the given address family (from {@link BAddr.h}) is supported by {@link BDatagram}\n * and related objects.\n * \n * @param family family to check\n * @return 1 if supported, 0 if not\n */\nint BDatagram_AddressFamilySupported (int family);\n\n/**\n * Initializes the object.\n * {@link BNetwork_GlobalInit} must have been done.\n * \n * @param o the object\n * @param family address family. Must be supported according to {@link BDatagram_AddressFamilySupported}.\n * @param reactor reactor we live in\n * @param user argument to handler\n * @param handler handler called when an error occurs\n * @return 1 on success, 0 on failure\n */\nint BDatagram_Init (BDatagram *o, int family, BReactor *reactor, void *user,\n                    BDatagram_handler handler) WARN_UNUSED;\n\n/**\n * Frees the object.\n * The send and receive interfaces must not be initialized.\n * \n * @param o the object\n */\nvoid BDatagram_Free (BDatagram *o);\n\n/**\n * Binds to the given local address.\n * May initiate I/O.\n * \n * @param o the object\n * @param addr address to bind to. Its family must be supported according to {@link BDatagram_AddressFamilySupported}.\n * @return 1 on success, 0 on failure\n */\nint BDatagram_Bind (BDatagram *o, BAddr addr) WARN_UNUSED;\n\n/**\n * Sets addresses for sending.\n * May initiate I/O.\n * \n * @param o the object\n * @param remote_addr destination address for sending datagrams. Its family must be supported according\n *                    to {@link BDatagram_AddressFamilySupported}.\n * @param local_addr local source IP address. May be an invalid address, otherwise its family must be\n *                   supported according to {@link BDatagram_AddressFamilySupported}.\n */\nvoid BDatagram_SetSendAddrs (BDatagram *o, BAddr remote_addr, BIPAddr local_addr);\n\n/**\n * Returns the remote and local address of the last datagram received.\n * Fails if and only if no datagrams have been received yet.\n * \n * @param o the object\n * @param remote_addr returns the remote source address of the datagram. May be an invalid address, theoretically.\n * @param local_addr returns the local destination IP address. May be an invalid address.\n * @return 1 on success, 0 on failure\n */\nint BDatagram_GetLastReceiveAddrs (BDatagram *o, BAddr *remote_addr, BIPAddr *local_addr);\n\n#ifndef BADVPN_USE_WINAPI\n/**\n * Returns the underlying socket file descriptor of the datagram object.\n * Available on Unix-like systems only.\n * \n * @param o the object\n * @return file descriptor\n */\nint BDatagram_GetFd (BDatagram *o);\n#endif\n\n/**\n * Sets the SO_REUSEADDR option for the underlying socket.\n * \n * @param o the object\n * @param reuse value of the option. Must be 0 or 1.\n */\nint BDatagram_SetReuseAddr (BDatagram *o, int reuse);\n\n/**\n * Initializes the send interface.\n * The send interface must not be initialized.\n * \n * @param o the object\n * @param mtu maximum transmission unit. Must be >=0.\n */\nvoid BDatagram_SendAsync_Init (BDatagram *o, int mtu);\n\n/**\n * Frees the send interface.\n * The send interface must be initialized.\n * If the send interface was busy when this is called, the datagram object is no longer usable and must be\n * freed before any further I/O or interface initialization.\n * \n * @param o the object\n */\nvoid BDatagram_SendAsync_Free (BDatagram *o);\n\n/**\n * Returns the send interface.\n * The send interface must be initialized.\n * The MTU of the interface will be as in {@link BDatagram_SendAsync_Init}.\n * \n * @param o the object\n * @return send interface\n */\nPacketPassInterface * BDatagram_SendAsync_GetIf (BDatagram *o);\n\n/**\n * Initializes the receive interface.\n * The receive interface must not be initialized.\n * \n * @param o the object\n * @param mtu maximum transmission unit. Must be >=0.\n */\nvoid BDatagram_RecvAsync_Init (BDatagram *o, int mtu);\n\n/**\n * Frees the receive interface.\n * The receive interface must be initialized.\n * If the receive interface was busy when this is called, the datagram object is no longer usable and must be\n * freed before any further I/O or interface initialization.\n * \n * @param o the object\n */\nvoid BDatagram_RecvAsync_Free (BDatagram *o);\n\n/**\n * Returns the receive interface.\n * The receive interface must be initialized.\n * The MTU of the interface will be as in {@link BDatagram_RecvAsync_Init}.\n * \n * @param o the object\n * @return receive interface\n */\nPacketRecvInterface * BDatagram_RecvAsync_GetIf (BDatagram *o);\n\n#ifdef BADVPN_USE_WINAPI\n#include \"BDatagram_win.h\"\n#else\n#include \"BDatagram_unix.h\"\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BDatagram_unix.c",
    "content": "/**\n * @file BDatagram_unix.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef _GNU_SOURCE\n#define _GNU_SOURCE\n#endif\n\n#include <stddef.h>\n#include <string.h>\n#include <unistd.h>\n#include <errno.h>\n#ifdef __APPLE__\n#define\tIPV6_PKTINFO\tIPV6_2292PKTINFO\n#endif\n#include <sys/types.h>\n#include <sys/socket.h>\n#ifdef BADVPN_LINUX\n#    include <netpacket/packet.h>\n#    include <net/ethernet.h>\n#endif\n\n#include \"misc/nonblocking.h\"\n#include \"base/BLog.h\"\n\n#include \"BDatagram.h\"\n\n#include \"generated/blog_channel_BDatagram.h\"\n\nstruct sys_addr {\n    socklen_t len;\n    union {\n        struct sockaddr generic;\n        struct sockaddr_in ipv4;\n        struct sockaddr_in6 ipv6;\n#ifdef BADVPN_LINUX\n        struct sockaddr_ll packet;\n#endif\n    } addr;\n};\n\nstatic int family_socket_to_sys (int family);\nstatic void addr_socket_to_sys (struct sys_addr *out, BAddr addr);\nstatic void addr_sys_to_socket (BAddr *out, struct sys_addr addr);\nstatic void set_pktinfo (int fd, int family);\nstatic void report_error (BDatagram *o);\nstatic void do_send (BDatagram *o);\nstatic void do_recv (BDatagram *o);\nstatic void fd_handler (BDatagram *o, int events);\nstatic void send_job_handler (BDatagram *o);\nstatic void recv_job_handler (BDatagram *o);\nstatic void send_if_handler_send (BDatagram *o, uint8_t *data, int data_len);\nstatic void recv_if_handler_recv (BDatagram *o, uint8_t *data);\n\nstatic int family_socket_to_sys (int family)\n{\n    switch (family) {\n        case BADDR_TYPE_IPV4:\n            return AF_INET;\n        case BADDR_TYPE_IPV6:\n            return AF_INET6;\n#ifdef BADVPN_LINUX\n        case BADDR_TYPE_PACKET:\n            return AF_PACKET;\n#endif\n    }\n    \n    ASSERT(0);\n    return 0;\n}\n\nstatic void addr_socket_to_sys (struct sys_addr *out, BAddr addr)\n{\n    switch (addr.type) {\n        case BADDR_TYPE_IPV4: {\n            out->len = sizeof(out->addr.ipv4);\n            memset(&out->addr.ipv4, 0, sizeof(out->addr.ipv4));\n            out->addr.ipv4.sin_family = AF_INET;\n            out->addr.ipv4.sin_port = addr.ipv4.port;\n            out->addr.ipv4.sin_addr.s_addr = addr.ipv4.ip;\n        } break;\n        \n        case BADDR_TYPE_IPV6: {\n            out->len = sizeof(out->addr.ipv6);\n            memset(&out->addr.ipv6, 0, sizeof(out->addr.ipv6));\n            out->addr.ipv6.sin6_family = AF_INET6;\n            out->addr.ipv6.sin6_port = addr.ipv6.port;\n            out->addr.ipv6.sin6_flowinfo = 0;\n            memcpy(out->addr.ipv6.sin6_addr.s6_addr, addr.ipv6.ip, 16);\n            out->addr.ipv6.sin6_scope_id = 0;\n        } break;\n        \n#ifdef BADVPN_LINUX\n        case BADDR_TYPE_PACKET: {\n            ASSERT(addr.packet.header_type == BADDR_PACKET_HEADER_TYPE_ETHERNET)\n            memset(&out->addr.packet, 0, sizeof(out->addr.packet));\n            out->len = sizeof(out->addr.packet);\n            out->addr.packet.sll_family = AF_PACKET;\n            out->addr.packet.sll_protocol = addr.packet.phys_proto;\n            out->addr.packet.sll_ifindex = addr.packet.interface_index;\n            out->addr.packet.sll_hatype = 1; // linux/if_arp.h: #define ARPHRD_ETHER 1\n            switch (addr.packet.packet_type) {\n                case BADDR_PACKET_PACKET_TYPE_HOST:\n                    out->addr.packet.sll_pkttype = PACKET_HOST;\n                    break;\n                case BADDR_PACKET_PACKET_TYPE_BROADCAST:\n                    out->addr.packet.sll_pkttype = PACKET_BROADCAST;\n                    break;\n                case BADDR_PACKET_PACKET_TYPE_MULTICAST:\n                    out->addr.packet.sll_pkttype = PACKET_MULTICAST;\n                    break;\n                case BADDR_PACKET_PACKET_TYPE_OTHERHOST:\n                    out->addr.packet.sll_pkttype = PACKET_OTHERHOST;\n                    break;\n                case BADDR_PACKET_PACKET_TYPE_OUTGOING:\n                    out->addr.packet.sll_pkttype = PACKET_OUTGOING;\n                    break;\n                default:\n                    ASSERT(0);\n            }\n            out->addr.packet.sll_halen = 6;\n            memcpy(out->addr.packet.sll_addr, addr.packet.phys_addr, 6);\n        } break;\n#endif\n        \n        default: ASSERT(0);\n    }\n}\n\nstatic void addr_sys_to_socket (BAddr *out, struct sys_addr addr)\n{\n    switch (addr.addr.generic.sa_family) {\n        case AF_INET: {\n            ASSERT(addr.len == sizeof(struct sockaddr_in))\n            BAddr_InitIPv4(out, addr.addr.ipv4.sin_addr.s_addr, addr.addr.ipv4.sin_port);\n        } break;\n        \n        case AF_INET6: {\n            ASSERT(addr.len == sizeof(struct sockaddr_in6))\n            BAddr_InitIPv6(out, addr.addr.ipv6.sin6_addr.s6_addr, addr.addr.ipv6.sin6_port);\n        } break;\n        \n#ifdef BADVPN_LINUX\n        case AF_PACKET: {\n            if (addr.len < offsetof(struct sockaddr_ll, sll_addr) + 6) {\n                goto fail;\n            }\n            if (addr.addr.packet.sll_hatype != 1) { // linux/if_arp.h: #define ARPHRD_ETHER 1\n                goto fail;\n            }\n            int packet_type;\n            switch (addr.addr.packet.sll_pkttype) {\n                case PACKET_HOST:\n                    packet_type = BADDR_PACKET_PACKET_TYPE_HOST;\n                    break;\n                case PACKET_BROADCAST:\n                    packet_type = BADDR_PACKET_PACKET_TYPE_BROADCAST;\n                    break;\n                case PACKET_MULTICAST:\n                    packet_type = BADDR_PACKET_PACKET_TYPE_MULTICAST;\n                    break;\n                case PACKET_OTHERHOST:\n                    packet_type = BADDR_PACKET_PACKET_TYPE_OTHERHOST;\n                    break;\n                case PACKET_OUTGOING:\n                    packet_type = BADDR_PACKET_PACKET_TYPE_OUTGOING;\n                    break;\n                default:\n                    goto fail;\n            }\n            if (addr.addr.packet.sll_halen != 6) {\n                goto fail;\n            }\n            BAddr_InitPacket(out, addr.addr.packet.sll_protocol, addr.addr.packet.sll_ifindex, BADDR_PACKET_HEADER_TYPE_ETHERNET, packet_type, addr.addr.packet.sll_addr);\n        } break;\n#endif\n        \n        fail:\n        default: {\n            BAddr_InitNone(out);\n        } break;\n    }\n}\n\nstatic void set_pktinfo (int fd, int family)\n{\n    int opt = 1;\n    \n    switch (family) {\n        case BADDR_TYPE_IPV4: {\n#ifdef BADVPN_FREEBSD\n            if (setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) < 0) {\n                BLog(BLOG_ERROR, \"setsockopt(IP_RECVDSTADDR) failed\");\n            }\n#else\n            if (setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &opt, sizeof(opt)) < 0) {\n                BLog(BLOG_ERROR, \"setsockopt(IP_PKTINFO) failed\");\n            }\n#endif\n        } break;\n        \n#ifdef IPV6_RECVPKTINFO\n        case BADDR_TYPE_IPV6: {\n            if (setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &opt, sizeof(opt)) < 0) {\n                BLog(BLOG_ERROR, \"setsockopt(IPV6_RECVPKTINFO) failed\");\n            }\n        } break;\n#endif\n    }\n}\n\nstatic void report_error (BDatagram *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    \n    // report error\n    DEBUGERROR(&o->d_err, o->handler(o->user, BDATAGRAM_EVENT_ERROR));\n    return;\n}\n\nstatic void do_send (BDatagram *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.inited)\n    ASSERT(o->send.busy)\n    ASSERT(o->send.have_addrs)\n    \n    // limit\n    if (!BReactorLimit_Increment(&o->send.limit)) {\n        // wait for fd\n        o->wait_events |= BREACTOR_WRITE;\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n        return;\n    }\n    \n    // convert destination address\n    struct sys_addr sysaddr;\n    addr_socket_to_sys(&sysaddr, o->send.remote_addr);\n    \n    struct iovec iov;\n    iov.iov_base = (uint8_t *)o->send.busy_data;\n    iov.iov_len = o->send.busy_data_len;\n    \n    union {\n#ifdef BADVPN_FREEBSD\n        char in[CMSG_SPACE(sizeof(struct in_addr))];\n#else\n        char in[CMSG_SPACE(sizeof(struct in_pktinfo))];\n#endif\n        char in6[CMSG_SPACE(sizeof(struct in6_pktinfo))];\n    } cdata;\n    \n    struct msghdr msg;\n    memset(&msg, 0, sizeof(msg));\n    msg.msg_name = &sysaddr.addr.generic;\n    msg.msg_namelen = sysaddr.len;\n    msg.msg_iov = &iov;\n    msg.msg_iovlen = 1;\n    msg.msg_control = &cdata;\n    msg.msg_controllen = sizeof(cdata);\n    \n    struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg);\n    \n    size_t controllen = 0;\n#ifdef __APPLE__\n    int bytes = -1;\n    switch (o->send.local_addr.type) {\n        case BADDR_TYPE_IPV4: {\n            bytes = sendto(o->fd, iov.iov_base, iov.iov_len, 0, msg.msg_name, msg.msg_namelen);\n        } break;\n\n        case BADDR_TYPE_IPV6: {\n            memset(cmsg, 0, CMSG_SPACE(sizeof(struct in6_pktinfo)));\n            cmsg->cmsg_level = IPPROTO_IPV6;\n            cmsg->cmsg_type = IPV6_PKTINFO;\n            cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));\n            struct in6_pktinfo *pktinfo = (struct in6_pktinfo *)CMSG_DATA(cmsg);\n            memcpy(pktinfo->ipi6_addr.s6_addr, o->send.local_addr.ipv6, 16);\n            controllen += CMSG_SPACE(sizeof(struct in6_pktinfo));\n            msg.msg_controllen = controllen;\n            if (msg.msg_controllen == 0) {\n                msg.msg_control = NULL;\n            }\n            bytes = sendmsg(o->fd, &msg, 0);\n        } break;\n    }\n#else\n    switch (o->send.local_addr.type) {\n        case BADDR_TYPE_IPV4: {\n#ifdef BADVPN_FREEBSD\n            memset(cmsg, 0, CMSG_SPACE(sizeof(struct in_addr)));\n            cmsg->cmsg_level = IPPROTO_IP;\n            cmsg->cmsg_type = IP_SENDSRCADDR;\n            cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr));\n            struct in_addr *addrinfo = (struct in_addr *)CMSG_DATA(cmsg);\n            addrinfo->s_addr = o->send.local_addr.ipv4;\n            controllen += CMSG_SPACE(sizeof(struct in_addr));\n#else\n            memset(cmsg, 0, CMSG_SPACE(sizeof(struct in_pktinfo)));\n            cmsg->cmsg_level = IPPROTO_IP;\n            cmsg->cmsg_type = IP_PKTINFO;\n            cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));\n            struct in_pktinfo *pktinfo = (struct in_pktinfo *)CMSG_DATA(cmsg);\n            pktinfo->ipi_spec_dst.s_addr = o->send.local_addr.ipv4;\n            controllen += CMSG_SPACE(sizeof(struct in_pktinfo));\n#endif\n        } break;\n        \n        case BADDR_TYPE_IPV6: {\n            memset(cmsg, 0, CMSG_SPACE(sizeof(struct in6_pktinfo)));\n            cmsg->cmsg_level = IPPROTO_IPV6;\n            cmsg->cmsg_type = IPV6_PKTINFO;\n            cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));\n            struct in6_pktinfo *pktinfo = (struct in6_pktinfo *)CMSG_DATA(cmsg);\n            memcpy(pktinfo->ipi6_addr.s6_addr, o->send.local_addr.ipv6, 16);\n            controllen += CMSG_SPACE(sizeof(struct in6_pktinfo));\n        } break;\n    }\n    \n    msg.msg_controllen = controllen;\n    \n    if (msg.msg_controllen == 0) {\n        msg.msg_control = NULL;\n    }\n    \n    // send\n    int bytes = sendmsg(o->fd, &msg, 0);\n#endif\n    if (bytes < 0) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // wait for fd\n            o->wait_events |= BREACTOR_WRITE;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n        \n        BLog(BLOG_ERROR, \"send failed\");\n        report_error(o);\n        return;\n    }\n    \n    ASSERT(bytes >= 0)\n    ASSERT(bytes <= o->send.busy_data_len)\n    \n    if (bytes < o->send.busy_data_len) {\n        BLog(BLOG_ERROR, \"send sent too little\");\n    }\n    \n    // if recv wasn't started yet, start it\n    if (!o->recv.started) {\n        // set recv started\n        o->recv.started = 1;\n        \n        // continue receiving\n        if (o->recv.inited && o->recv.busy) {\n            BPending_Set(&o->recv.job);\n        }\n    }\n    \n    // set not busy\n    o->send.busy = 0;\n    \n    // done\n    PacketPassInterface_Done(&o->send.iface);\n}\n\nstatic void do_recv (BDatagram *o)\n{\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.inited)\n    ASSERT(o->recv.busy)\n    ASSERT(o->recv.started)\n    \n    // limit\n    if (!BReactorLimit_Increment(&o->recv.limit)) {\n        // wait for fd\n        o->wait_events |= BREACTOR_READ;\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n        return;\n    }\n    \n    struct sys_addr sysaddr;\n    \n    struct iovec iov;\n    iov.iov_base = o->recv.busy_data;\n    iov.iov_len = o->recv.mtu;\n    \n    union {\n#ifdef BADVPN_FREEBSD\n        char in[CMSG_SPACE(sizeof(struct in_addr))];\n#else\n        char in[CMSG_SPACE(sizeof(struct in_pktinfo))];\n#endif\n        char in6[CMSG_SPACE(sizeof(struct in6_pktinfo))];\n    } cdata;\n    \n    struct msghdr msg;\n    memset(&msg, 0, sizeof(msg));\n    msg.msg_name = &sysaddr.addr.generic;\n    msg.msg_namelen = sizeof(sysaddr.addr);\n    msg.msg_iov = &iov;\n    msg.msg_iovlen = 1;\n    msg.msg_control = &cdata;\n    msg.msg_controllen = sizeof(cdata);\n    \n    // recv\n    int bytes = recvmsg(o->fd, &msg, 0);\n    if (bytes < 0) {\n        if (errno == EAGAIN || errno == EWOULDBLOCK) {\n            // wait for fd\n            o->wait_events |= BREACTOR_READ;\n            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n            return;\n        }\n        \n        BLog(BLOG_ERROR, \"recv failed\");\n        report_error(o);\n        return;\n    }\n    \n    ASSERT(bytes >= 0)\n    ASSERT(bytes <= o->recv.mtu)\n    \n    // read returned address\n    sysaddr.len = msg.msg_namelen;\n    addr_sys_to_socket(&o->recv.remote_addr, sysaddr);\n    \n    // read returned local address\n    BIPAddr_InitInvalid(&o->recv.local_addr);\n    for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {\n#ifdef BADVPN_FREEBSD\n        if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_RECVDSTADDR) {\n            struct in_addr *addrinfo = (struct in_addr *)CMSG_DATA(cmsg);\n            BIPAddr_InitIPv4(&o->recv.local_addr, addrinfo->s_addr);\n        }\n#else\n        if (cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_PKTINFO) {\n            struct in_pktinfo *pktinfo = (struct in_pktinfo *)CMSG_DATA(cmsg);\n            BIPAddr_InitIPv4(&o->recv.local_addr, pktinfo->ipi_addr.s_addr);\n        }\n#endif\n        else if (cmsg->cmsg_level == IPPROTO_IPV6 && cmsg->cmsg_type == IPV6_PKTINFO) {\n            struct in6_pktinfo *pktinfo = (struct in6_pktinfo *)CMSG_DATA(cmsg);\n            BIPAddr_InitIPv6(&o->recv.local_addr, pktinfo->ipi6_addr.s6_addr);\n        }\n    }\n    \n    // set have addresses\n    o->recv.have_addrs = 1;\n    \n    // set not busy\n    o->recv.busy = 0;\n    \n    // done\n    PacketRecvInterface_Done(&o->recv.iface, bytes);\n}\n\nstatic void fd_handler (BDatagram *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    \n    // clear handled events\n    o->wait_events &= ~events;\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    \n    int have_send = 0;\n    int have_recv = 0;\n    \n    if ((events & BREACTOR_WRITE) || ((events & (BREACTOR_ERROR|BREACTOR_HUP)) && o->send.inited && o->send.busy && o->send.have_addrs)) {\n        ASSERT(o->send.inited)\n        ASSERT(o->send.busy)\n        ASSERT(o->send.have_addrs)\n        \n        have_send = 1;\n    }\n    \n    if ((events & BREACTOR_READ) || ((events & (BREACTOR_ERROR|BREACTOR_HUP)) && o->recv.inited && o->recv.busy && o->recv.started)) {\n        ASSERT(o->recv.inited)\n        ASSERT(o->recv.busy)\n        ASSERT(o->recv.started)\n        \n        have_recv = 1;\n    }\n    \n    if (have_send) {\n        if (have_recv) {\n            BPending_Set(&o->recv.job);\n        }\n        \n        do_send(o);\n        return;\n    }\n    \n    if (have_recv) {\n        do_recv(o);\n        return;\n    }\n    \n    BLog(BLOG_ERROR, \"fd error event\");\n    report_error(o);\n    return;\n}\n\nstatic void send_job_handler (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.inited)\n    ASSERT(o->send.busy)\n    ASSERT(o->send.have_addrs)\n    \n    do_send(o);\n    return;\n}\n\nstatic void recv_job_handler (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.inited)\n    ASSERT(o->recv.busy)\n    ASSERT(o->recv.started)\n    \n    do_recv(o);\n    return;\n}\n\nstatic void send_if_handler_send (BDatagram *o, uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->send.inited)\n    ASSERT(!o->send.busy)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->send.mtu)\n    \n    // remember data\n    o->send.busy_data = data;\n    o->send.busy_data_len = data_len;\n    \n    // set busy\n    o->send.busy = 1;\n    \n    // if have no addresses, wait\n    if (!o->send.have_addrs) {\n        return;\n    }\n    \n    // set job\n    BPending_Set(&o->send.job);\n}\n\nstatic void recv_if_handler_recv (BDatagram *o, uint8_t *data)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(o->recv.inited)\n    ASSERT(!o->recv.busy)\n    \n    // remember data\n    o->recv.busy_data = data;\n    \n    // set busy\n    o->recv.busy = 1;\n    \n    // if recv not started yet, wait\n    if (!o->recv.started) {\n        return;\n    }\n    \n    // set job\n    BPending_Set(&o->recv.job);\n}\n\nint BDatagram_AddressFamilySupported (int family)\n{\n    switch (family) {\n        case BADDR_TYPE_IPV4:\n        case BADDR_TYPE_IPV6:\n#ifdef BADVPN_LINUX\n        case BADDR_TYPE_PACKET:\n#endif\n            return 1;\n    }\n    \n    return 0;\n}\n\nint BDatagram_Init (BDatagram *o, int family, BReactor *reactor, void *user,\n                    BDatagram_handler handler)\n{\n    ASSERT(BDatagram_AddressFamilySupported(family))\n    ASSERT(handler)\n    BNetwork_Assert();\n    \n    // init arguments\n    o->reactor = reactor;\n    o->user = user;\n    o->handler = handler;\n    \n    // init fd\n    if ((o->fd = socket(family_socket_to_sys(family), SOCK_DGRAM, 0)) < 0) {\n        BLog(BLOG_ERROR, \"socket failed\");\n        goto fail0;\n    }\n    \n    // set fd non-blocking\n    if (!badvpn_set_nonblocking(o->fd)) {\n        BLog(BLOG_ERROR, \"badvpn_set_nonblocking failed\");\n        goto fail1;\n    }\n    \n    // enable receiving pktinfo\n    set_pktinfo(o->fd, family);\n    \n    // init BFileDescriptor\n    BFileDescriptor_Init(&o->bfd, o->fd, (BFileDescriptor_handler)fd_handler, o);\n    if (!BReactor_AddFileDescriptor(o->reactor, &o->bfd)) {\n        BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n        goto fail1;\n    }\n    \n    // set no wait events\n    o->wait_events = 0;\n    \n    // init limits\n    BReactorLimit_Init(&o->send.limit, o->reactor, BDATAGRAM_SEND_LIMIT);\n    BReactorLimit_Init(&o->recv.limit, o->reactor, BDATAGRAM_RECV_LIMIT);\n    \n    // set have no send and recv addresses\n    o->send.have_addrs = 0;\n    o->recv.have_addrs = 0;\n    \n    // set recv not started\n    o->recv.started = 0;\n    \n    // set send and recv not inited\n    o->send.inited = 0;\n    o->recv.inited = 0;\n    \n    DebugError_Init(&o->d_err, BReactor_PendingGroup(o->reactor));\n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail1:\n    if (close(o->fd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\nfail0:\n    return 0;\n}\n\nvoid BDatagram_Free (BDatagram *o)\n{\n    DebugObject_Free(&o->d_obj);\n    DebugError_Free(&o->d_err);\n    ASSERT(!o->recv.inited)\n    ASSERT(!o->send.inited)\n    \n    // free limits\n    BReactorLimit_Free(&o->recv.limit);\n    BReactorLimit_Free(&o->send.limit);\n    \n    // free BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    \n    // free fd\n    if (close(o->fd) < 0) {\n        BLog(BLOG_ERROR, \"close failed\");\n    }\n}\n\nint BDatagram_Bind (BDatagram *o, BAddr addr)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(BDatagram_AddressFamilySupported(addr.type))\n    \n    // translate address\n    struct sys_addr sysaddr;\n    addr_socket_to_sys(&sysaddr, addr);\n    \n    // bind\n    if (bind(o->fd, &sysaddr.addr.generic, sysaddr.len) < 0) {\n        BLog(BLOG_ERROR, \"bind failed\");\n        return 0;\n    }\n    \n    // if recv wasn't started yet, start it\n    if (!o->recv.started) {\n        // set recv started\n        o->recv.started = 1;\n        \n        // continue receiving\n        if (o->recv.inited && o->recv.busy) {\n            BPending_Set(&o->recv.job);\n        }\n    }\n    \n    return 1;\n}\n\nvoid BDatagram_SetSendAddrs (BDatagram *o, BAddr remote_addr, BIPAddr local_addr)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(BDatagram_AddressFamilySupported(remote_addr.type))\n    ASSERT(local_addr.type == BADDR_TYPE_NONE || BDatagram_AddressFamilySupported(local_addr.type))\n    \n    // set addresses\n    o->send.remote_addr = remote_addr;\n    o->send.local_addr = local_addr;\n    \n    if (!o->send.have_addrs) {\n        // set have addresses\n        o->send.have_addrs = 1;\n        \n        // start sending\n        if (o->send.inited && o->send.busy) {\n            BPending_Set(&o->send.job);\n        }\n    }\n}\n\nint BDatagram_GetLastReceiveAddrs (BDatagram *o, BAddr *remote_addr, BIPAddr *local_addr)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    if (!o->recv.have_addrs) {\n        return 0;\n    }\n    \n    *remote_addr = o->recv.remote_addr;\n    *local_addr = o->recv.local_addr;\n    return 1;\n}\n\nint BDatagram_GetFd (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return o->fd;\n}\n\nint BDatagram_SetReuseAddr (BDatagram *o, int reuse)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(reuse == 0 || reuse == 1)\n    \n    if (setsockopt(o->fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) {\n        return 0;\n    }\n    \n    return 1;\n}\n\nvoid BDatagram_SendAsync_Init (BDatagram *o, int mtu)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(!o->send.inited)\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    o->send.mtu = mtu;\n    \n    // init interface\n    PacketPassInterface_Init(&o->send.iface, o->send.mtu, (PacketPassInterface_handler_send)send_if_handler_send, o, BReactor_PendingGroup(o->reactor));\n    \n    // init job\n    BPending_Init(&o->send.job, BReactor_PendingGroup(o->reactor), (BPending_handler)send_job_handler, o);\n    \n    // set not busy\n    o->send.busy = 0;\n    \n    // set inited\n    o->send.inited = 1;\n}\n\nvoid BDatagram_SendAsync_Free (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->send.inited)\n    \n    // update events\n    o->wait_events &= ~BREACTOR_WRITE;\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    \n    // free job\n    BPending_Free(&o->send.job);\n    \n    // free interface\n    PacketPassInterface_Free(&o->send.iface);\n    \n    // set not inited\n    o->send.inited = 0;\n}\n\nPacketPassInterface * BDatagram_SendAsync_GetIf (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->send.inited)\n    \n    return &o->send.iface;\n}\n\nvoid BDatagram_RecvAsync_Init (BDatagram *o, int mtu)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(!o->recv.inited)\n    ASSERT(mtu >= 0)\n    \n    // init arguments\n    o->recv.mtu = mtu;\n    \n    // init interface\n    PacketRecvInterface_Init(&o->recv.iface, o->recv.mtu, (PacketRecvInterface_handler_recv)recv_if_handler_recv, o, BReactor_PendingGroup(o->reactor));\n    \n    // init job\n    BPending_Init(&o->recv.job, BReactor_PendingGroup(o->reactor), (BPending_handler)recv_job_handler, o);\n    \n    // set not busy\n    o->recv.busy = 0;\n    \n    // set inited\n    o->recv.inited = 1;\n}\n\nvoid BDatagram_RecvAsync_Free (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->recv.inited)\n    \n    // update events\n    o->wait_events &= ~BREACTOR_READ;\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->wait_events);\n    \n    // free job\n    BPending_Free(&o->recv.job);\n    \n    // free interface\n    PacketRecvInterface_Free(&o->recv.iface);\n    \n    // set not inited\n    o->recv.inited = 0;\n}\n\nPacketRecvInterface * BDatagram_RecvAsync_GetIf (BDatagram *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->recv.inited)\n    \n    return &o->recv.iface;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BDatagram_unix.h",
    "content": "/**\n * @file BDatagram_unix.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"misc/debugerror.h\"\n#include \"base/DebugObject.h\"\n\n#define BDATAGRAM_SEND_LIMIT 2\n#define BDATAGRAM_RECV_LIMIT 2\n\nstruct BDatagram_s {\n    BReactor *reactor;\n    void *user;\n    BDatagram_handler handler;\n    int fd;\n    BFileDescriptor bfd;\n    int wait_events;\n    struct {\n        BReactorLimit limit;\n        int have_addrs;\n        BAddr remote_addr;\n        BIPAddr local_addr;\n        int inited;\n        int mtu;\n        PacketPassInterface iface;\n        BPending job;\n        int busy;\n        const uint8_t *busy_data;\n        int busy_data_len;\n    } send;\n    struct {\n        BReactorLimit limit;\n        int started;\n        int have_addrs;\n        BAddr remote_addr;\n        BIPAddr local_addr;\n        int inited;\n        int mtu;\n        PacketRecvInterface iface;\n        BPending job;\n        int busy;\n        uint8_t *busy_data;\n    } recv;\n    DebugError d_err;\n    DebugObject d_obj;\n};\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BNetwork.c",
    "content": "/**\n * @file BNetwork.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifdef BADVPN_USE_WINAPI\n#include <windows.h>\n#include <winsock2.h>\n#include <mswsock.h>\n#else\n#include <string.h>\n#include <signal.h>\n#endif\n\n#include \"misc/debug.h\"\n#include \"base/BLog.h\"\n\n#include \"system/BNetwork.h\"\n\n#include \"generated/blog_channel_BNetwork.h\"\n\nextern int bnetwork_initialized;\n\n#ifndef BADVPN_PLUGIN\nint bnetwork_initialized = 0;\n#endif\n\nint BNetwork_GlobalInit (void)\n{\n    ASSERT(!bnetwork_initialized)\n    \n#ifdef BADVPN_USE_WINAPI\n    \n    WORD requested = MAKEWORD(2, 2);\n    WSADATA wsadata;\n    if (WSAStartup(requested, &wsadata) != 0) {\n        BLog(BLOG_ERROR, \"WSAStartup failed\");\n        goto fail0;\n    }\n    if (wsadata.wVersion != requested) {\n        BLog(BLOG_ERROR, \"WSAStartup returned wrong version\");\n        goto fail1;\n    }\n    \n#else\n    \n    struct sigaction act;\n    memset(&act, 0, sizeof(act));\n    act.sa_handler = SIG_IGN;\n    sigemptyset(&act.sa_mask);\n    act.sa_flags = 0;\n    if (sigaction(SIGPIPE, &act, NULL) < 0) {\n        BLog(BLOG_ERROR, \"sigaction failed\");\n        goto fail0;\n    }\n    \n#endif\n    \n    bnetwork_initialized = 1;\n    \n    return 1;\n    \n#ifdef BADVPN_USE_WINAPI\nfail1:\n    WSACleanup();\n#endif\n    \nfail0:\n    return 0;\n}\n\nvoid BNetwork_Assert (void)\n{\n    ASSERT(bnetwork_initialized)\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BNetwork.h",
    "content": "/**\n * @file BNetwork.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_SYSTEM_BNETWORK_H\n#define BADVPN_SYSTEM_BNETWORK_H\n\nint BNetwork_GlobalInit (void);\nvoid BNetwork_Assert (void);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BReactor.h",
    "content": "#if defined(BADVPN_BREACTOR_BADVPN) + defined(BADVPN_BREACTOR_GLIB) + defined(BADVPN_BREACTOR_EMSCRIPTEN) != 1\n#error No reactor backend or too many reactor backens\n#endif\n\n#if defined(BADVPN_BREACTOR_BADVPN)\n#include \"BReactor_badvpn.h\"\n#elif defined(BADVPN_BREACTOR_GLIB)\n#include \"BReactor_glib.h\"\n#elif defined(BADVPN_BREACTOR_EMSCRIPTEN)\n#include \"BReactor_emscripten.h\"\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BReactor_badvpn.c",
    "content": "/**\n * @file BReactor_badvpn.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n#include <stddef.h>\n\n#ifdef BADVPN_USE_WINAPI\n#include <windows.h>\n#else\n#include <limits.h>\n#include <sys/types.h>\n#include <errno.h>\n#include <unistd.h>\n#endif\n\n#include \"misc/debug.h\"\n#include \"misc/offset.h\"\n#include \"misc/balloc.h\"\n#include \"misc/compare.h\"\n#include \"base/BLog.h\"\n\n#include \"system/BReactor.h\"\n\n#include \"generated/blog_channel_BReactor.h\"\n\n#define KEVENT_TAG_FD 1\n#define KEVENT_TAG_KEVENT 2\n\n#define TIMER_STATE_INACTIVE 1\n#define TIMER_STATE_RUNNING 2\n#define TIMER_STATE_EXPIRED 3\n\nstatic int compare_timers (BSmallTimer *t1, BSmallTimer *t2)\n{\n    int cmp = B_COMPARE(t1->absTime, t2->absTime);\n    if (cmp) {\n        return cmp;\n    }\n    \n    return B_COMPARE((uintptr_t)t1, (uintptr_t)t2);\n}\n\n#include \"BReactor_badvpn_timerstree.h\"\n#include \"structure/CAvl_impl.h\"\n\nstatic void assert_timer (BSmallTimer *bt)\n{\n    ASSERT(bt->state == TIMER_STATE_INACTIVE || bt->state == TIMER_STATE_RUNNING ||\n           bt->state == TIMER_STATE_EXPIRED)\n}\n\nstatic int move_expired_timers (BReactor *bsys, btime_t now)\n{\n    int moved = 0;\n    \n    // move timed out timers to the expired list\n    BReactor__TimersTreeRef ref;\n    BSmallTimer *timer;\n    while (timer = (ref = BReactor__TimersTree_GetFirst(&bsys->timers_tree, 0)).link) {\n        ASSERT(timer->state == TIMER_STATE_RUNNING)\n        \n        // if it's in the future, stop\n        if (timer->absTime > now) {\n            break;\n        }\n        moved = 1;\n        \n        // remove from running timers tree\n        BReactor__TimersTree_Remove(&bsys->timers_tree, 0, ref);\n        \n        // add to expired timers list\n        LinkedList1_Append(&bsys->timers_expired_list, &timer->u.list_node);\n\n        // set expired\n        timer->state = TIMER_STATE_EXPIRED;\n    }\n\n    return moved;\n}\n\nstatic void move_first_timers (BReactor *bsys)\n{\n    BReactor__TimersTreeRef ref;\n    \n    // get the time of the first timer\n    BSmallTimer *first_timer = (ref = BReactor__TimersTree_GetFirst(&bsys->timers_tree, 0)).link;\n    ASSERT(first_timer)\n    ASSERT(first_timer->state == TIMER_STATE_RUNNING)\n    btime_t first_time = first_timer->absTime;\n    \n    // remove from running timers tree\n    BReactor__TimersTree_Remove(&bsys->timers_tree, 0, ref);\n    \n    // add to expired timers list\n    LinkedList1_Append(&bsys->timers_expired_list, &first_timer->u.list_node);\n    \n    // set expired\n    first_timer->state = TIMER_STATE_EXPIRED;\n    \n    // also move other timers with the same timeout\n    BSmallTimer *timer;\n    while (timer = (ref = BReactor__TimersTree_GetFirst(&bsys->timers_tree, 0)).link) {\n        ASSERT(timer->state == TIMER_STATE_RUNNING)\n        ASSERT(timer->absTime >= first_time)\n        \n        // if it's in the future, stop\n        if (timer->absTime > first_time) {\n            break;\n        }\n        \n        // remove from running timers tree\n        BReactor__TimersTree_Remove(&bsys->timers_tree, 0, ref);\n        \n        // add to expired timers list\n        LinkedList1_Append(&bsys->timers_expired_list, &timer->u.list_node);\n        \n        // set expired\n        timer->state = TIMER_STATE_EXPIRED;\n    }\n}\n\n#ifdef BADVPN_USE_WINAPI\n\nstatic void set_iocp_ready (BReactorIOCPOverlapped *olap, int succeeded, DWORD bytes)\n{\n    BReactor *reactor = olap->reactor;\n    ASSERT(!olap->is_ready)\n    \n    // set parameters\n    olap->ready_succeeded = succeeded;\n    olap->ready_bytes = bytes;\n    \n    // insert to IOCP ready list\n    LinkedList1_Append(&reactor->iocp_ready_list, &olap->ready_list_node);\n    \n    // set ready\n    olap->is_ready = 1;\n}\n\n#endif\n\n#ifdef BADVPN_USE_EPOLL\n\nstatic void set_epoll_fd_pointers (BReactor *bsys)\n{\n    // Write pointers to our entry pointers into file descriptors.\n    // If a handler function frees some other file descriptor, the\n    // free routine will set our pointer to NULL so we don't dispatch it.\n    for (int i = 0; i < bsys->epoll_results_num; i++) {\n        struct epoll_event *event = &bsys->epoll_results[i];\n        ASSERT(event->data.ptr)\n        BFileDescriptor *bfd = (BFileDescriptor *)event->data.ptr;\n        ASSERT(bfd->active)\n        ASSERT(!bfd->epoll_returned_ptr)\n        bfd->epoll_returned_ptr = (BFileDescriptor **)&event->data.ptr;\n    }\n}\n\n#endif\n\n#ifdef BADVPN_USE_KEVENT\n\nstatic void set_kevent_fd_pointers (BReactor *bsys)\n{\n    for (int i = 0; i < bsys->kevent_results_num; i++) {\n        struct kevent *event = &bsys->kevent_results[i];\n        ASSERT(event->udata)\n        int *tag = event->udata;\n        switch (*tag) {\n            case KEVENT_TAG_FD: {\n                BFileDescriptor *bfd = UPPER_OBJECT(tag, BFileDescriptor, kevent_tag);\n                ASSERT(bfd->active)\n                ASSERT(!bfd->kevent_returned_ptr)\n                bfd->kevent_returned_ptr = (int **)&event->udata;\n            } break;\n            \n            case KEVENT_TAG_KEVENT: {\n                BReactorKEvent *kev = UPPER_OBJECT(tag, BReactorKEvent, kevent_tag);\n                ASSERT(kev->reactor == bsys)\n                ASSERT(!kev->kevent_returned_ptr)\n                kev->kevent_returned_ptr = (int **)&event->udata;\n            } break;\n            \n            default:\n                ASSERT(0);\n        }\n    }\n}\n\nstatic void update_kevent_fd_events (BReactor *bsys, BFileDescriptor *bs, int events)\n{\n    struct kevent event;\n    \n    if (!(bs->waitEvents & BREACTOR_READ) && (events & BREACTOR_READ)) {\n        memset(&event, 0, sizeof(event));\n        event.ident = bs->fd;\n        event.filter = EVFILT_READ;\n        event.flags = EV_ADD;\n        event.udata = &bs->kevent_tag;\n        ASSERT_FORCE(kevent(bsys->kqueue_fd, &event, 1, NULL, 0, NULL) == 0)\n    }\n    else if ((bs->waitEvents & BREACTOR_READ) && !(events & BREACTOR_READ)) {\n        memset(&event, 0, sizeof(event));\n        event.ident = bs->fd;\n        event.filter = EVFILT_READ;\n        event.flags = EV_DELETE;\n        ASSERT_FORCE(kevent(bsys->kqueue_fd, &event, 1, NULL, 0, NULL) == 0)\n    }\n    \n    if (!(bs->waitEvents & BREACTOR_WRITE) && (events & BREACTOR_WRITE)) {\n        memset(&event, 0, sizeof(event));\n        event.ident = bs->fd;\n        event.filter = EVFILT_WRITE;\n        event.flags = EV_ADD;\n        event.udata = &bs->kevent_tag;\n        ASSERT_FORCE(kevent(bsys->kqueue_fd, &event, 1, NULL, 0, NULL) == 0)\n    }\n    else if ((bs->waitEvents & BREACTOR_WRITE) && !(events & BREACTOR_WRITE)) {\n        memset(&event, 0, sizeof(event));\n        event.ident = bs->fd;\n        event.filter = EVFILT_WRITE;\n        event.flags = EV_DELETE;\n        ASSERT_FORCE(kevent(bsys->kqueue_fd, &event, 1, NULL, 0, NULL) == 0)\n    }\n}\n\n#endif\n\n#ifdef BADVPN_USE_POLL\n\nstatic void set_poll_fd_pointers (BReactor *bsys)\n{\n    for (int i = 0; i < bsys->poll_results_num; i++) {\n        BFileDescriptor *bfd = bsys->poll_results_bfds[i];\n        ASSERT(bfd)\n        ASSERT(bfd->active)\n        ASSERT(bfd->poll_returned_index == -1)\n        bfd->poll_returned_index = i;\n    }\n}\n\n#endif\n\nstatic void wait_for_events (BReactor *bsys)\n{\n    // must have processed all pending events\n    ASSERT(!BPendingGroup_HasJobs(&bsys->pending_jobs))\n    ASSERT(LinkedList1_IsEmpty(&bsys->timers_expired_list))\n    #ifdef BADVPN_USE_WINAPI\n    ASSERT(LinkedList1_IsEmpty(&bsys->iocp_ready_list))\n    #endif\n    #ifdef BADVPN_USE_EPOLL\n    ASSERT(bsys->epoll_results_pos == bsys->epoll_results_num)\n    #endif\n    #ifdef BADVPN_USE_KEVENT\n    ASSERT(bsys->kevent_results_pos == bsys->kevent_results_num)\n    #endif\n    #ifdef BADVPN_USE_POLL\n    ASSERT(bsys->poll_results_pos == bsys->poll_results_num)\n    #endif\n\n    // clean up epoll results\n    #ifdef BADVPN_USE_EPOLL\n    bsys->epoll_results_num = 0;\n    bsys->epoll_results_pos = 0;\n    #endif\n    \n    // clean up kevent results\n    #ifdef BADVPN_USE_KEVENT\n    bsys->kevent_results_num = 0;\n    bsys->kevent_results_pos = 0;\n    #endif\n    \n    // clean up poll results\n    #ifdef BADVPN_USE_POLL\n    bsys->poll_results_num = 0;\n    bsys->poll_results_pos = 0;\n    #endif\n    \n    // timeout vars\n    int have_timeout = 0;\n    btime_t timeout_abs;\n    btime_t now = 0; // to remove warning\n    \n    // compute timeout\n    BSmallTimer *first_timer = BReactor__TimersTree_GetFirst(&bsys->timers_tree, 0).link;\n    if (first_timer) {\n        ASSERT(first_timer->state == TIMER_STATE_RUNNING)\n        \n        // get current time\n        now = btime_gettime();\n        \n        // if some timers have already timed out, return them immediately\n        if (move_expired_timers(bsys, now)) {\n            BLog(BLOG_DEBUG, \"Got already expired timers\");\n            return;\n        }\n        \n        // timeout is first timer, remember absolute time\n        have_timeout = 1;\n        timeout_abs = first_timer->absTime;\n    }\n    \n    // wait until the timeout is reached or the file descriptor / handle in ready\n    while (1) {\n        // compute timeout\n        btime_t timeout_rel = 0; // to remove warning\n        btime_t timeout_rel_trunc = 0; // to remove warning\n        if (have_timeout) {\n            timeout_rel = timeout_abs - now;\n            timeout_rel_trunc = timeout_rel;\n        }\n        \n        // perform wait\n        \n        #ifdef BADVPN_USE_WINAPI\n        \n        if (have_timeout) {\n            if (timeout_rel_trunc > INFINITE - 1) {\n                timeout_rel_trunc = INFINITE - 1;\n            }\n        }\n        \n        DWORD bytes = 0;\n        ULONG_PTR key;\n        BReactorIOCPOverlapped *olap = NULL;\n        BOOL res = GetQueuedCompletionStatus(bsys->iocp_handle, &bytes, &key, (OVERLAPPED **)&olap, (have_timeout ? timeout_rel_trunc : INFINITE));\n        \n        ASSERT_FORCE(olap || have_timeout)\n        \n        if (olap || timeout_rel_trunc == timeout_rel) {\n            if (olap) {\n                BLog(BLOG_DEBUG, \"GetQueuedCompletionStatus returned event\");\n                \n                DebugObject_Access(&olap->d_obj);\n                ASSERT(olap->reactor == bsys)\n                ASSERT(!olap->is_ready)\n                \n                set_iocp_ready(olap, (res == TRUE), bytes);\n            } else {\n                BLog(BLOG_DEBUG, \"GetQueuedCompletionStatus timed out\");\n                move_first_timers(bsys);\n            }\n            break;\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_EPOLL\n        \n        if (have_timeout) {\n            if (timeout_rel_trunc > INT_MAX) {\n                timeout_rel_trunc = INT_MAX;\n            }\n        }\n        \n        BLog(BLOG_DEBUG, \"Calling epoll_wait\");\n        \n        int waitres = epoll_wait(bsys->efd, bsys->epoll_results, BSYSTEM_MAX_RESULTS, (have_timeout ? timeout_rel_trunc : -1));\n        if (waitres < 0) {\n            int error = errno;\n            if (error == EINTR) {\n                BLog(BLOG_DEBUG, \"epoll_wait interrupted\");\n                goto try_again;\n            }\n            perror(\"epoll_wait\");\n            ASSERT_FORCE(0)\n        }\n        \n        ASSERT_FORCE(!(waitres == 0) || have_timeout)\n        ASSERT_FORCE(waitres <= BSYSTEM_MAX_RESULTS)\n        \n        if (waitres != 0 || timeout_rel_trunc == timeout_rel) {\n            if (waitres != 0) {\n                BLog(BLOG_DEBUG, \"epoll_wait returned %d file descriptors\", waitres);\n                bsys->epoll_results_num = waitres;\n                set_epoll_fd_pointers(bsys);\n            } else {\n                BLog(BLOG_DEBUG, \"epoll_wait timed out\");\n                move_first_timers(bsys);\n            }\n            break;\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_KEVENT\n        \n        struct timespec ts;\n        if (have_timeout) {\n            if (timeout_rel_trunc > 86400000) {\n                timeout_rel_trunc = 86400000;\n            }\n            ts.tv_sec = timeout_rel_trunc / 1000;\n            ts.tv_nsec = (timeout_rel_trunc % 1000) * 1000000;\n        }\n        \n//        BLog(BLOG_DEBUG, \"Calling kevent\");\n        \n        int waitres = kevent(bsys->kqueue_fd, NULL, 0, bsys->kevent_results, BSYSTEM_MAX_RESULTS, (have_timeout ? &ts : NULL));\n        if (waitres < 0) {\n            int error = errno;\n            if (error == EINTR) {\n                BLog(BLOG_DEBUG, \"kevent interrupted\");\n                goto try_again;\n            }\n            perror(\"kevent\");\n            ASSERT_FORCE(0)\n        }\n        \n        ASSERT_FORCE(!(waitres == 0) || have_timeout)\n        ASSERT_FORCE(waitres <= BSYSTEM_MAX_RESULTS)\n        \n        if (waitres != 0 || timeout_rel_trunc == timeout_rel) {\n            if (waitres != 0) {\n//                BLog(BLOG_DEBUG, \"kevent returned %d events\", waitres);\n                bsys->kevent_results_num = waitres;\n                set_kevent_fd_pointers(bsys);\n            } else {\n//                BLog(BLOG_DEBUG, \"kevent timed out\");\n                move_first_timers(bsys);\n            }\n            break;\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_POLL\n        \n        if (have_timeout) {\n            if (timeout_rel_trunc > INT_MAX) {\n                timeout_rel_trunc = INT_MAX;\n            }\n        }\n        \n        ASSERT(bsys->poll_num_enabled_fds >= 0)\n        ASSERT(bsys->poll_num_enabled_fds <= BSYSTEM_MAX_POLL_FDS)\n        int num_fds = 0;\n        \n        LinkedList1Node *list_node = LinkedList1_GetFirst(&bsys->poll_enabled_fds_list);\n        while (list_node) {\n            BFileDescriptor *bfd = UPPER_OBJECT(list_node, BFileDescriptor, poll_enabled_fds_list_node);\n            ASSERT(bfd->active)\n            ASSERT(bfd->poll_returned_index == -1)\n            \n            // calculate poll events\n            int pevents = 0;\n            if ((bfd->waitEvents & BREACTOR_READ)) {\n                pevents |= POLLIN;\n            }\n            if ((bfd->waitEvents & BREACTOR_WRITE)) {\n                pevents |= POLLOUT;\n            }\n            \n            // write pollfd entry\n            struct pollfd *pfd = &bsys->poll_results_pollfds[num_fds];\n            pfd->fd = bfd->fd;\n            pfd->events = pevents;\n            pfd->revents = 0;\n            \n            // write BFileDescriptor reference entry\n            bsys->poll_results_bfds[num_fds] = bfd;\n            \n            // increment number of fds in array\n            num_fds++;\n            \n            list_node = LinkedList1Node_Next(list_node);\n        }\n        \n        BLog(BLOG_DEBUG, \"Calling poll\");\n        \n        int waitres = poll(bsys->poll_results_pollfds, num_fds, (have_timeout ? timeout_rel_trunc : -1));\n        if (waitres < 0) {\n            int error = errno;\n            if (error == EINTR) {\n                BLog(BLOG_DEBUG, \"poll interrupted\");\n                goto try_again;\n            }\n            perror(\"poll\");\n            ASSERT_FORCE(0)\n        }\n        \n        ASSERT_FORCE(!(waitres == 0) || have_timeout)\n        \n        if (waitres != 0 || timeout_rel_trunc == timeout_rel) {\n            if (waitres != 0) {\n                BLog(BLOG_DEBUG, \"poll returned %d file descriptors\", waitres);\n                bsys->poll_results_num = num_fds;\n                bsys->poll_results_pos = 0;\n                set_poll_fd_pointers(bsys);\n            } else {\n                BLog(BLOG_DEBUG, \"poll timed out\");\n                move_first_timers(bsys);\n            }\n            break;\n        }\n        \n        #endif\n        \n    try_again:\n        if (have_timeout) {\n            // get current time\n            now = btime_gettime();\n            // check if we already reached the time we're waiting for\n            if (now >= timeout_abs) {\n                BLog(BLOG_DEBUG, \"already timed out while trying again\");\n                move_first_timers(bsys);\n                break;\n            }\n        }\n    }\n    \n    // reset limit objects\n    LinkedList1Node *list_node;\n    while (list_node = LinkedList1_GetFirst(&bsys->active_limits_list)) {\n        BReactorLimit *limit = UPPER_OBJECT(list_node, BReactorLimit, active_limits_list_node);\n        ASSERT(limit->count > 0)\n        limit->count = 0;\n        LinkedList1_Remove(&bsys->active_limits_list, &limit->active_limits_list_node);\n    }\n}\n\n#ifndef BADVPN_USE_WINAPI\n\nvoid BFileDescriptor_Init (BFileDescriptor *bs, int fd, BFileDescriptor_handler handler, void *user)\n{\n    bs->fd = fd;\n    bs->handler = handler;\n    bs->user = user;\n    bs->active = 0;\n}\n\n#endif\n\nvoid BSmallTimer_Init (BSmallTimer *bt, BSmallTimer_handler handler)\n{\n    bt->handler.smalll = handler;\n    bt->state = TIMER_STATE_INACTIVE;\n    bt->is_small = 1;\n}\n\nint BSmallTimer_IsRunning (BSmallTimer *bt)\n{\n    assert_timer(bt);\n    \n    return (bt->state != TIMER_STATE_INACTIVE);\n}\n\nvoid BTimer_Init (BTimer *bt, btime_t msTime, BTimer_handler handler, void *user)\n{\n    bt->base.handler.heavy = handler;\n    bt->base.state = TIMER_STATE_INACTIVE;\n    bt->base.is_small = 0;\n    bt->user = user;\n    bt->msTime = msTime;\n}\n\nint BTimer_IsRunning (BTimer *bt)\n{\n    return BSmallTimer_IsRunning(&bt->base);\n}\n\nint BReactor_Init (BReactor *bsys)\n{\n    BLog(BLOG_DEBUG, \"Reactor initializing\");\n    \n    // set not exiting\n    bsys->exiting = 0;\n    \n    // init jobs\n    BPendingGroup_Init(&bsys->pending_jobs);\n    \n    // init timers\n    BReactor__TimersTree_Init(&bsys->timers_tree);\n    LinkedList1_Init(&bsys->timers_expired_list);\n    \n    // init limits\n    LinkedList1_Init(&bsys->active_limits_list);\n    \n    #ifdef BADVPN_USE_WINAPI\n    \n    // init IOCP list\n    LinkedList1_Init(&bsys->iocp_list);\n    \n    // init IOCP handle\n    if (!(bsys->iocp_handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1))) {\n        BLog(BLOG_ERROR, \"CreateIoCompletionPort failed\");\n        goto fail0;\n    }\n    \n    // init IOCP ready list\n    LinkedList1_Init(&bsys->iocp_ready_list);\n    \n    #endif\n    \n    #ifdef BADVPN_USE_EPOLL\n    \n    // create epoll fd\n    if ((bsys->efd = epoll_create(10)) < 0) {\n        BLog(BLOG_ERROR, \"epoll_create failed\");\n        goto fail0;\n    }\n    \n    // init results array\n    bsys->epoll_results_num = 0;\n    bsys->epoll_results_pos = 0;\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    // create kqueue fd\n    if ((bsys->kqueue_fd = kqueue()) < 0) {\n        BLog(BLOG_ERROR, \"kqueue failed\");\n        goto fail0;\n    }\n    \n    // init results array\n    bsys->kevent_results_num = 0;\n    bsys->kevent_results_pos = 0;\n    \n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    \n    // init enabled fds list\n    LinkedList1_Init(&bsys->poll_enabled_fds_list);\n    \n    // set zero enabled fds\n    bsys->poll_num_enabled_fds = 0;\n    \n    // allocate results arrays\n    if (!(bsys->poll_results_pollfds = BAllocArray(BSYSTEM_MAX_POLL_FDS, sizeof(bsys->poll_results_pollfds[0])))) {\n        BLog(BLOG_ERROR, \"BAllocArray failed\");\n        goto fail0;\n    }\n    if (!(bsys->poll_results_bfds = BAllocArray(BSYSTEM_MAX_POLL_FDS, sizeof(bsys->poll_results_bfds[0])))) {\n        BLog(BLOG_ERROR, \"BAllocArray failed\");\n        goto fail1;\n    }\n    \n    // init results array\n    bsys->poll_results_num = 0;\n    bsys->poll_results_pos = 0;\n    \n    #endif\n    \n    DebugObject_Init(&bsys->d_obj);\n    #ifndef BADVPN_USE_WINAPI\n    DebugCounter_Init(&bsys->d_fds_counter);\n    #endif\n    #ifdef BADVPN_USE_KEVENT\n    DebugCounter_Init(&bsys->d_kevent_ctr);\n    #endif\n    DebugCounter_Init(&bsys->d_limits_ctr);\n    \n    return 1;\n    \n    #ifdef BADVPN_USE_POLL\nfail1:\n    BFree(bsys->poll_results_pollfds);\n    #endif\nfail0:\n    BPendingGroup_Free(&bsys->pending_jobs);\n    BLog(BLOG_ERROR, \"Reactor failed to initialize\");\n    return 0;\n}\n\nvoid BReactor_Free (BReactor *bsys)\n{\n    DebugObject_Access(&bsys->d_obj);\n    \n    #ifdef BADVPN_USE_WINAPI\n    while (!LinkedList1_IsEmpty(&bsys->iocp_list)) {\n        BReactorIOCPOverlapped *olap = UPPER_OBJECT(LinkedList1_GetLast(&bsys->iocp_list), BReactorIOCPOverlapped, iocp_list_node);\n        ASSERT(olap->reactor == bsys)\n        olap->handler(olap->user, BREACTOR_IOCP_EVENT_EXITING, 0);\n    }\n    #endif\n    \n    // {pending group has no BPending objects}\n    ASSERT(!BPendingGroup_HasJobs(&bsys->pending_jobs))\n    ASSERT(BReactor__TimersTree_IsEmpty(&bsys->timers_tree))\n    ASSERT(LinkedList1_IsEmpty(&bsys->timers_expired_list))\n    ASSERT(LinkedList1_IsEmpty(&bsys->active_limits_list))\n    DebugObject_Free(&bsys->d_obj);\n    #ifdef BADVPN_USE_WINAPI\n    ASSERT(LinkedList1_IsEmpty(&bsys->iocp_ready_list))\n    ASSERT(LinkedList1_IsEmpty(&bsys->iocp_list))\n    #endif\n    #ifndef BADVPN_USE_WINAPI\n    DebugCounter_Free(&bsys->d_fds_counter);\n    #endif\n    #ifdef BADVPN_USE_KEVENT\n    DebugCounter_Free(&bsys->d_kevent_ctr);\n    #endif\n    DebugCounter_Free(&bsys->d_limits_ctr);\n    #ifdef BADVPN_USE_POLL\n    ASSERT(bsys->poll_num_enabled_fds == 0)\n    ASSERT(LinkedList1_IsEmpty(&bsys->poll_enabled_fds_list))\n    #endif\n    \n    BLog(BLOG_DEBUG, \"Reactor freeing\");\n    \n    #ifdef BADVPN_USE_WINAPI\n    \n    // close IOCP handle\n    ASSERT_FORCE(CloseHandle(bsys->iocp_handle))\n    \n    #endif\n    \n    #ifdef BADVPN_USE_EPOLL\n    \n    // close epoll fd\n    ASSERT_FORCE(close(bsys->efd) == 0)\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    // close kqueue fd\n    ASSERT_FORCE(close(bsys->kqueue_fd) == 0)\n    \n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    \n    // free results arrays\n    BFree(bsys->poll_results_bfds);\n    BFree(bsys->poll_results_pollfds);\n    \n    #endif\n    \n    // free jobs\n    BPendingGroup_Free(&bsys->pending_jobs);\n}\n\nint BReactor_Exec (BReactor *bsys)\n{\n    BLog(BLOG_DEBUG, \"Entering event loop\");\n    \n    while (!bsys->exiting) {\n        // dispatch job\n        if (BPendingGroup_HasJobs(&bsys->pending_jobs)) {\n            BPendingGroup_ExecuteJob(&bsys->pending_jobs);\n            continue;\n        }\n        \n        // dispatch timer\n        LinkedList1Node *list_node = LinkedList1_GetFirst(&bsys->timers_expired_list);\n        if (list_node) {\n            BSmallTimer *timer = UPPER_OBJECT(list_node, BSmallTimer, u.list_node);\n            ASSERT(timer->state == TIMER_STATE_EXPIRED)\n            \n            // remove from expired list\n            LinkedList1_Remove(&bsys->timers_expired_list, &timer->u.list_node);\n            \n            // set inactive\n            timer->state = TIMER_STATE_INACTIVE;\n            \n            // call handler\n//            BLog(BLOG_DEBUG, \"Dispatching timer\");\n            if (timer->is_small) {\n                timer->handler.smalll(timer);\n            } else {\n                BTimer *btimer = UPPER_OBJECT(timer, BTimer, base);\n                timer->handler.heavy(btimer->user);\n            }\n            continue;\n        }\n        \n        #ifdef BADVPN_USE_WINAPI\n        \n        if (!LinkedList1_IsEmpty(&bsys->iocp_ready_list)) {\n            BReactorIOCPOverlapped *olap = UPPER_OBJECT(LinkedList1_GetFirst(&bsys->iocp_ready_list), BReactorIOCPOverlapped, ready_list_node);\n            ASSERT(olap->is_ready)\n            ASSERT(olap->handler)\n            \n            // remove from ready list\n            LinkedList1_Remove(&bsys->iocp_ready_list, &olap->ready_list_node);\n            \n            // set not ready\n            olap->is_ready = 0;\n            \n            int event = (olap->ready_succeeded ? BREACTOR_IOCP_EVENT_SUCCEEDED : BREACTOR_IOCP_EVENT_FAILED);\n            \n            // call handler\n            olap->handler(olap->user, event, olap->ready_bytes);\n            continue;\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_EPOLL\n        \n        // dispatch file descriptor\n        if (bsys->epoll_results_pos < bsys->epoll_results_num) {\n            // grab event\n            struct epoll_event *event = &bsys->epoll_results[bsys->epoll_results_pos];\n            bsys->epoll_results_pos++;\n            \n            // check if the BFileDescriptor was removed\n            if (!event->data.ptr) {\n                continue;\n            }\n            \n            // get BFileDescriptor\n            BFileDescriptor *bfd = (BFileDescriptor *)event->data.ptr;\n            ASSERT(bfd->active)\n            ASSERT(bfd->epoll_returned_ptr == (BFileDescriptor **)&event->data.ptr)\n            \n            // zero pointer to the epoll entry\n            bfd->epoll_returned_ptr = NULL;\n            \n            // calculate events to report\n            int events = 0;\n            if ((bfd->waitEvents&BREACTOR_READ) && (event->events&EPOLLIN)) {\n                events |= BREACTOR_READ;\n            }\n            if ((bfd->waitEvents&BREACTOR_WRITE) && (event->events&EPOLLOUT)) {\n                events |= BREACTOR_WRITE;\n            }\n            if ((event->events&EPOLLERR)) {\n                events |= BREACTOR_ERROR;\n            }\n            if ((event->events&EPOLLHUP)) {\n                events |= BREACTOR_HUP;\n            }\n            \n            if (!events) {\n                BLog(BLOG_ERROR, \"no events detected?\");\n                continue;\n            }\n            \n            // call handler\n            BLog(BLOG_DEBUG, \"Dispatching file descriptor\");\n            bfd->handler(bfd->user, events);\n            continue;\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_KEVENT\n        \n        // dispatch kevent\n        if (bsys->kevent_results_pos < bsys->kevent_results_num) {\n            // grab event\n            struct kevent *event = &bsys->kevent_results[bsys->kevent_results_pos];\n            bsys->kevent_results_pos++;\n            \n            // check if the event was removed\n            if (!event->udata) {\n                continue;\n            }\n            \n            // check tag\n            int *tag = event->udata;\n            switch (*tag) {\n                case KEVENT_TAG_FD: {\n                    // get BFileDescriptor\n                    BFileDescriptor *bfd = UPPER_OBJECT(tag, BFileDescriptor, kevent_tag);\n                    ASSERT(bfd->active)\n                    ASSERT(bfd->kevent_returned_ptr == (int **)&event->udata)\n                    \n                    // zero pointer to the kevent entry\n                    bfd->kevent_returned_ptr = NULL;\n                    \n                    // calculate event to report\n                    int events = 0;\n                    if ((bfd->waitEvents&BREACTOR_READ) && event->filter == EVFILT_READ) {\n                        events |= BREACTOR_READ;\n                    }\n                    if ((bfd->waitEvents&BREACTOR_WRITE) && event->filter == EVFILT_WRITE) {\n                        events |= BREACTOR_WRITE;\n                    }\n                    \n                    if (!events) {\n                        BLog(BLOG_ERROR, \"no events detected?\");\n                        continue;\n                    }\n                    \n                    // call handler\n//                    BLog(BLOG_DEBUG, \"Dispatching file descriptor\");\n                    bfd->handler(bfd->user, events);\n                    continue;\n                } break;\n                \n                case KEVENT_TAG_KEVENT: {\n                    // get BReactorKEvent\n                    BReactorKEvent *kev = UPPER_OBJECT(tag, BReactorKEvent, kevent_tag);\n                    ASSERT(kev->reactor == bsys)\n                    ASSERT(kev->kevent_returned_ptr == (int **)&event->udata)\n                    \n                    // zero pointer to the kevent entry\n                    kev->kevent_returned_ptr = NULL;\n                    \n                    // call handler\n//                    BLog(BLOG_DEBUG, \"Dispatching kevent\");\n                    kev->handler(kev->user, event->fflags, event->data);\n                    continue;\n                } break;\n                \n                default:\n                    ASSERT(0);\n            }\n        }\n        \n        #endif\n        \n        #ifdef BADVPN_USE_POLL\n        \n        if (bsys->poll_results_pos < bsys->poll_results_num) {\n            // grab event\n            struct pollfd *pfd = &bsys->poll_results_pollfds[bsys->poll_results_pos];\n            BFileDescriptor *bfd = bsys->poll_results_bfds[bsys->poll_results_pos];\n            bsys->poll_results_pos++;\n            \n            // skip removed entry\n            if (!bfd) {\n                continue;\n            }\n            \n            ASSERT(bfd->active)\n            ASSERT(bfd->poll_returned_index == bsys->poll_results_pos - 1)\n            \n            // remove result reference\n            bfd->poll_returned_index = -1;\n            \n            // calculate events to report\n            int events = 0;\n            if ((bfd->waitEvents & BREACTOR_READ) && (pfd->revents & POLLIN)) {\n                events |= BREACTOR_READ;\n            }\n            if ((bfd->waitEvents & BREACTOR_WRITE) && (pfd->revents & POLLOUT)) {\n                events |= BREACTOR_WRITE;\n            }\n            if ((pfd->revents & POLLERR) || (pfd->revents & POLLHUP)) {\n                events |= BREACTOR_ERROR;\n            }\n            \n            if (!events) {\n                continue;\n            }\n            \n            // call handler\n            BLog(BLOG_DEBUG, \"Dispatching file descriptor\");\n            bfd->handler(bfd->user, events);\n            continue;\n        }\n        \n        #endif\n        \n        wait_for_events(bsys);\n    }\n\n    BLog(BLOG_DEBUG, \"Exiting event loop, exit code %d\", bsys->exit_code);\n\n    return bsys->exit_code;\n}\n\nvoid BReactor_Quit (BReactor *bsys, int code)\n{\n    bsys->exiting = 1;\n    bsys->exit_code = code;\n}\n\nvoid BReactor_SetSmallTimer (BReactor *bsys, BSmallTimer *bt, int mode, btime_t time)\n{\n    assert_timer(bt);\n    ASSERT(mode == BTIMER_SET_ABSOLUTE || mode == BTIMER_SET_RELATIVE)\n    \n    // unlink it if it's already in the list\n    BReactor_RemoveSmallTimer(bsys, bt);\n    \n    // if mode is relative, add current time\n    if (mode == BTIMER_SET_RELATIVE) {\n        time = btime_add(btime_gettime(), time);\n    }\n    \n    // set time\n    bt->absTime = time;\n    \n    // set running\n    bt->state = TIMER_STATE_RUNNING;\n    \n    // insert to running timers tree\n    BReactor__TimersTreeRef ref = {bt, bt};\n    int res = BReactor__TimersTree_Insert(&bsys->timers_tree, 0, ref, NULL);\n    ASSERT_EXECUTE(res)\n}\n\nvoid BReactor_RemoveSmallTimer (BReactor *bsys, BSmallTimer *bt)\n{\n    assert_timer(bt);\n    \n    if (bt->state == TIMER_STATE_INACTIVE) {\n        return;\n    }\n\n    if (bt->state == TIMER_STATE_EXPIRED) {\n        // remove from expired list\n        LinkedList1_Remove(&bsys->timers_expired_list, &bt->u.list_node);\n    } else {\n        // remove from running tree\n        BReactor__TimersTreeRef ref = {bt, bt};\n        BReactor__TimersTree_Remove(&bsys->timers_tree, 0, ref);\n    }\n\n    // set inactive\n    bt->state = TIMER_STATE_INACTIVE;\n}\n\nvoid BReactor_SetTimer (BReactor *bsys, BTimer *bt)\n{\n    BReactor_SetSmallTimer(bsys, &bt->base, BTIMER_SET_RELATIVE, bt->msTime);\n}\n\nvoid BReactor_SetTimerAfter (BReactor *bsys, BTimer *bt, btime_t after)\n{\n    BReactor_SetSmallTimer(bsys, &bt->base, BTIMER_SET_RELATIVE, after);\n}\n\nvoid BReactor_SetTimerAbsolute (BReactor *bsys, BTimer *bt, btime_t time)\n{\n    BReactor_SetSmallTimer(bsys, &bt->base, BTIMER_SET_ABSOLUTE, time);\n}\n\nvoid BReactor_RemoveTimer (BReactor *bsys, BTimer *bt)\n{\n    return BReactor_RemoveSmallTimer(bsys, &bt->base);\n}\n\nBPendingGroup * BReactor_PendingGroup (BReactor *bsys)\n{\n    return &bsys->pending_jobs;\n}\n\nint BReactor_Synchronize (BReactor *bsys, BSmallPending *ref)\n{\n    ASSERT(ref)\n    \n    while (!bsys->exiting) {\n        ASSERT(BPendingGroup_HasJobs(&bsys->pending_jobs))\n        \n        if (BPendingGroup_PeekJob(&bsys->pending_jobs) == ref) {\n            return 1;\n        }\n        \n        BPendingGroup_ExecuteJob(&bsys->pending_jobs);\n    }\n    \n    return 0;\n}\n\n#ifndef BADVPN_USE_WINAPI\n\nint BReactor_AddFileDescriptor (BReactor *bsys, BFileDescriptor *bs)\n{\n    ASSERT(!bs->active)\n    \n    #ifdef BADVPN_USE_EPOLL\n    \n    // add epoll entry\n    struct epoll_event event;\n    memset(&event, 0, sizeof(event));\n    event.events = 0;\n    event.data.ptr = bs;\n    if (epoll_ctl(bsys->efd, EPOLL_CTL_ADD, bs->fd, &event) < 0) {\n        int error = errno;\n        BLog(BLOG_ERROR, \"epoll_ctl failed: %d\", error);\n        return 0;\n    }\n    \n    // set epoll returned pointer\n    bs->epoll_returned_ptr = NULL;\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    // set kevent tag\n    bs->kevent_tag = KEVENT_TAG_FD;\n    \n    // set kevent returned pointer\n    bs->kevent_returned_ptr = NULL;\n    \n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    \n    if (bsys->poll_num_enabled_fds == BSYSTEM_MAX_POLL_FDS) {\n        BLog(BLOG_ERROR, \"too many fds\");\n        return 0;\n    }\n    \n    // append to enabled fds list\n    LinkedList1_Append(&bsys->poll_enabled_fds_list, &bs->poll_enabled_fds_list_node);\n    bsys->poll_num_enabled_fds++;\n    \n    // set not returned\n    bs->poll_returned_index = -1;\n    \n    #endif\n    \n    bs->active = 1;\n    bs->waitEvents = 0;\n    \n    DebugCounter_Increment(&bsys->d_fds_counter);\n    return 1;\n}\n\nvoid BReactor_RemoveFileDescriptor (BReactor *bsys, BFileDescriptor *bs)\n{\n    ASSERT(bs->active)\n    DebugCounter_Decrement(&bsys->d_fds_counter);\n\n    bs->active = 0;\n\n    #ifdef BADVPN_USE_EPOLL\n    \n    // delete epoll entry\n    struct epoll_event event;\n    memset(&event, 0, sizeof(event));\n    ASSERT_FORCE(epoll_ctl(bsys->efd, EPOLL_CTL_DEL, bs->fd, &event) == 0)\n    \n    // write through epoll returned pointer\n    if (bs->epoll_returned_ptr) {\n        *bs->epoll_returned_ptr = NULL;\n    }\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    // delete kevents\n    update_kevent_fd_events(bsys, bs, 0);\n    \n    // write through kevent returned pointer\n    if (bs->kevent_returned_ptr) {\n        *bs->kevent_returned_ptr = NULL;\n    }\n    \n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    \n    // invalidate results entry\n    if (bs->poll_returned_index != -1) {\n        ASSERT(bs->poll_returned_index >= bsys->poll_results_pos)\n        ASSERT(bs->poll_returned_index < bsys->poll_results_num)\n        ASSERT(bsys->poll_results_bfds[bs->poll_returned_index] == bs)\n        \n        bsys->poll_results_bfds[bs->poll_returned_index] = NULL;\n    }\n    \n    // remove from enabled fds list\n    LinkedList1_Remove(&bsys->poll_enabled_fds_list, &bs->poll_enabled_fds_list_node);\n    bsys->poll_num_enabled_fds--;\n    \n    #endif\n}\n\nvoid BReactor_SetFileDescriptorEvents (BReactor *bsys, BFileDescriptor *bs, int events)\n{\n    ASSERT(bs->active)\n    ASSERT(!(events&~(BREACTOR_READ|BREACTOR_WRITE)))\n    \n    if (bs->waitEvents == events) {\n        return;\n    }\n    \n    #ifdef BADVPN_USE_EPOLL\n    \n    // calculate epoll events\n    int eevents = 0;\n    if ((events & BREACTOR_READ)) {\n        eevents |= EPOLLIN;\n    }\n    if ((events & BREACTOR_WRITE)) {\n        eevents |= EPOLLOUT;\n    }\n    \n    // update epoll entry\n    struct epoll_event event;\n    memset(&event, 0, sizeof(event));\n    event.events = eevents;\n    event.data.ptr = bs;\n    ASSERT_FORCE(epoll_ctl(bsys->efd, EPOLL_CTL_MOD, bs->fd, &event) == 0)\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    update_kevent_fd_events(bsys, bs, events);\n    \n    #endif\n    \n    // update events\n    bs->waitEvents = events;\n}\n\n#endif\n\nvoid BReactorLimit_Init (BReactorLimit *o, BReactor *reactor, int limit)\n{\n    DebugObject_Access(&reactor->d_obj);\n    ASSERT(limit > 0)\n    \n    // init arguments\n    o->reactor = reactor;\n    o->limit = limit;\n    \n    // set count zero\n    o->count = 0;\n    \n    DebugCounter_Increment(&reactor->d_limits_ctr);\n    DebugObject_Init(&o->d_obj);\n}\n\nvoid BReactorLimit_Free (BReactorLimit *o)\n{\n    BReactor *reactor = o->reactor;\n    DebugObject_Free(&o->d_obj);\n    DebugCounter_Decrement(&reactor->d_limits_ctr);\n    \n    // remove from active limits list\n    if (o->count > 0) {\n        LinkedList1_Remove(&reactor->active_limits_list, &o->active_limits_list_node);\n    }\n}\n\nint BReactorLimit_Increment (BReactorLimit *o)\n{\n    BReactor *reactor = o->reactor;\n    DebugObject_Access(&o->d_obj);\n    \n    // check count against limit\n    if (o->count >= o->limit) {\n        return 0;\n    }\n    \n    // increment count\n    o->count++;\n    \n    // if limit was zero, add to active limits list\n    if (o->count == 1) {\n        LinkedList1_Append(&reactor->active_limits_list, &o->active_limits_list_node);\n    }\n    \n    return 1;\n}\n\nvoid BReactorLimit_SetLimit (BReactorLimit *o, int limit)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(limit > 0)\n    \n    // set limit\n    o->limit = limit;\n}\n\n#ifdef BADVPN_USE_KEVENT\n\nint BReactorKEvent_Init (BReactorKEvent *o, BReactor *reactor, BReactorKEvent_handler handler, void *user, uintptr_t ident, short filter, u_int fflags, intptr_t data)\n{\n    DebugObject_Access(&reactor->d_obj);\n    \n    // init arguments\n    o->reactor = reactor;\n    o->handler = handler;\n    o->user = user;\n    o->ident = ident;\n    o->filter = filter;\n    \n    // add kevent\n    struct kevent event;\n    memset(&event, 0, sizeof(event));\n    event.ident = o->ident;\n    event.filter = o->filter;\n    event.flags = EV_ADD;\n    event.fflags = fflags;\n    event.data = data;\n    event.udata = &o->kevent_tag;\n    if (kevent(o->reactor->kqueue_fd, &event, 1, NULL, 0, NULL) < 0) {\n        return 0;\n    }\n    \n    // set kevent tag\n    o->kevent_tag = KEVENT_TAG_KEVENT;\n    \n    // set kevent returned pointer\n    o->kevent_returned_ptr = NULL;\n    \n    DebugObject_Init(&o->d_obj);\n    DebugCounter_Increment(&o->reactor->d_kevent_ctr);\n    return 1;\n}\n\nvoid BReactorKEvent_Free (BReactorKEvent *o)\n{\n    DebugObject_Free(&o->d_obj);\n    DebugCounter_Decrement(&o->reactor->d_kevent_ctr);\n    \n    // write through kevent returned pointer\n    if (o->kevent_returned_ptr) {\n        *o->kevent_returned_ptr = NULL;\n    }\n    \n    // delete kevent\n    struct kevent event;\n    memset(&event, 0, sizeof(event));\n    event.ident = o->ident;\n    event.filter = o->filter;\n    event.flags = EV_DELETE;\n    ASSERT_FORCE(kevent(o->reactor->kqueue_fd, &event, 1, NULL, 0, NULL) == 0)\n}\n\n#endif\n\n#ifdef BADVPN_USE_WINAPI\n\nHANDLE BReactor_GetIOCPHandle (BReactor *reactor)\n{\n    DebugObject_Access(&reactor->d_obj);\n    \n    return reactor->iocp_handle;\n}\n\nvoid BReactorIOCPOverlapped_Init (BReactorIOCPOverlapped *o, BReactor *reactor, void *user, BReactorIOCPOverlapped_handler handler)\n{\n    DebugObject_Access(&reactor->d_obj);\n    \n    // init arguments\n    o->reactor = reactor;\n    o->user = user;\n    o->handler = handler;\n    \n    // zero overlapped\n    memset(&o->olap, 0, sizeof(o->olap));\n    \n    // append to IOCP list\n    LinkedList1_Append(&reactor->iocp_list, &o->iocp_list_node);\n    \n    // set not ready\n    o->is_ready = 0;\n    \n    DebugObject_Init(&o->d_obj);\n}\n\nvoid BReactorIOCPOverlapped_Free (BReactorIOCPOverlapped *o)\n{\n    BReactor *reactor = o->reactor;\n    DebugObject_Free(&o->d_obj);\n    \n    // remove from IOCP ready list\n    if (o->is_ready) {\n        LinkedList1_Remove(&reactor->iocp_ready_list, &o->ready_list_node);\n    }\n    \n    // remove from IOCP list\n    LinkedList1_Remove(&reactor->iocp_list, &o->iocp_list_node);\n}\n\nvoid BReactorIOCPOverlapped_Wait (BReactorIOCPOverlapped *o, int *out_succeeded, DWORD *out_bytes)\n{\n    BReactor *reactor = o->reactor;\n    DebugObject_Access(&o->d_obj);\n    \n    // wait for IOCP events until we get an event for this olap\n    while (!o->is_ready) {\n        DWORD bytes = 0;\n        ULONG_PTR key;\n        BReactorIOCPOverlapped *olap = NULL;\n        BOOL res = GetQueuedCompletionStatus(reactor->iocp_handle, &bytes, &key, (OVERLAPPED **)&olap, INFINITE);\n        \n        ASSERT_FORCE(olap)\n        DebugObject_Access(&olap->d_obj);\n        ASSERT(olap->reactor == reactor)\n        \n        // regular I/O should be done synchronously, so we shoudln't ever get a second completion before an\n        // existing one is dispatched. If however PostQueuedCompletionStatus is being used to signal events,\n        // just discard any excess events.\n        if (!olap->is_ready) {\n            set_iocp_ready(olap, (res == TRUE), bytes);\n        }\n    }\n    \n    // remove from IOCP ready list\n    LinkedList1_Remove(&reactor->iocp_ready_list, &o->ready_list_node);\n    \n    // set not ready\n    o->is_ready = 0;\n    \n    if (out_succeeded) {\n        *out_succeeded = o->ready_succeeded;\n    }\n    if (out_bytes) {\n        *out_bytes = o->ready_bytes;\n    }\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BReactor_badvpn.h",
    "content": "/**\n * @file BReactor_badvpn.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Event loop that supports file desciptor (Linux) or HANDLE (Windows) events\n * and timers.\n */\n\n#ifndef BADVPN_SYSTEM_BREACTOR_H\n#define BADVPN_SYSTEM_BREACTOR_H\n\n#if (defined(BADVPN_USE_WINAPI) + defined(BADVPN_USE_EPOLL) + defined(BADVPN_USE_KEVENT) + defined(BADVPN_USE_POLL)) != 1\n#error Unknown event backend or too many event backends\n#endif\n\n#ifdef BADVPN_USE_WINAPI\n#include <windows.h>\n#endif\n\n#ifdef BADVPN_USE_EPOLL\n#include <sys/epoll.h>\n#endif\n\n#ifdef BADVPN_USE_KEVENT\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/time.h>\n#endif\n\n#ifdef BADVPN_USE_POLL\n#include <poll.h>\n#endif\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/debugcounter.h\"\n#include \"base/DebugObject.h\"\n#include \"structure/LinkedList1.h\"\n#include \"structure/CAvl.h\"\n#include \"system/BTime.h\"\n#include \"base/BPending.h\"\n\nstruct BSmallTimer_t;\ntypedef struct BSmallTimer_t *BReactor_timerstree_link;\n\n#include \"BReactor_badvpn_timerstree.h\"\n#include \"structure/CAvl_decl.h\"\n\n#define BTIMER_SET_ABSOLUTE 1\n#define BTIMER_SET_RELATIVE 2\n\n/**\n * Handler function invoked when the timer expires.\n * The timer was in running state.\n * The timer enters not running state before this function is invoked.\n * This function is being called from within the timer's previosly\n * associated reactor.\n *\n * @param timer pointer to the timer. Use the {@link UPPER_OBJECT} macro\n *              to obtain the pointer to the containing structure.\n */\ntypedef void (*BSmallTimer_handler) (struct BSmallTimer_t *timer);\n\n/**\n * Handler function invoked when the timer expires.\n * The timer was in running state.\n * The timer enters not running state before this function is invoked.\n * This function is being called from within the timer's previosly\n * associated reactor.\n *\n * @param user value passed to {@link BTimer_Init}\n */\ntypedef void (*BTimer_handler) (void *user);\n\n/**\n * Timer object used with {@link BReactor}.\n */\ntypedef struct BSmallTimer_t {\n    union {\n        BSmallTimer_handler smalll; // MSVC doesn't like \"small\"\n        BTimer_handler heavy;\n    } handler;\n    union {\n        LinkedList1Node list_node;\n        struct BSmallTimer_t *tree_child[2];\n    } u;\n    struct BSmallTimer_t *tree_parent;\n    btime_t absTime;\n    int8_t tree_balance;\n    uint8_t state;\n    uint8_t is_small;\n} BSmallTimer;\n\n/**\n * Initializes the timer object.\n * The timer object is initialized in not running state.\n *\n * @param bt the object\n * @param handler handler function invoked when the timer expires\n */\nvoid BSmallTimer_Init (BSmallTimer *bt, BSmallTimer_handler handler);\n\n/**\n * Checks if the timer is running.\n *\n * @param bt the object\n * @return 1 if running, 0 if not running\n */\nint BSmallTimer_IsRunning (BSmallTimer *bt);\n\n/**\n * Timer object used with {@link BReactor}. This is a legacy wrapper\n * around {@link BSmallTimer} with an extra field for the default time.\n */\ntypedef struct {\n    BSmallTimer base;\n    void *user;\n    btime_t msTime;\n} BTimer;\n\n/**\n * Initializes the timer object.\n * The timer object is initialized in not running state.\n *\n * @param bt the object\n * @param msTime default timeout in milliseconds\n * @param handler handler function invoked when the timer expires\n * @param user value to pass to the handler function\n */\nvoid BTimer_Init (BTimer *bt, btime_t msTime, BTimer_handler handler, void *user);\n\n/**\n * Checks if the timer is running.\n *\n * @param bt the object\n * @return 1 if running, 0 if not running\n */\nint BTimer_IsRunning (BTimer *bt);\n\n#ifndef BADVPN_USE_WINAPI\n\nstruct BFileDescriptor_t;\n\n#define BREACTOR_READ (1 << 0)\n#define BREACTOR_WRITE (1 << 1)\n#define BREACTOR_ERROR (1 << 2)\n#define BREACTOR_HUP (1 << 3)\n\n/**\n * Handler function invoked by the reactor when one or more events are detected.\n * The events argument will contain a subset of the monitored events (BREACTOR_READ, BREACTOR_WRITE),\n * plus possibly the error event (BREACTOR_ERROR).\n * The file descriptor object is in active state, being called from within\n * the associated reactor.\n *\n * @param user value passed to {@link BFileDescriptor_Init}\n * @param events bitmask composed of a subset of monitored events (BREACTOR_READ, BREACTOR_WRITE),\n *               and possibly the error event BREACTOR_ERROR and the hang-up event BREACTOR_HUP.\n *               Will be nonzero.\n */\ntypedef void (*BFileDescriptor_handler) (void *user, int events);\n\n/**\n * File descriptor object used with {@link BReactor}.\n */\ntypedef struct BFileDescriptor_t {\n    int fd;\n    BFileDescriptor_handler handler;\n    void *user;\n    int active;\n    int waitEvents;\n    \n    #ifdef BADVPN_USE_EPOLL\n    struct BFileDescriptor_t **epoll_returned_ptr;\n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    int kevent_tag;\n    int **kevent_returned_ptr;\n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    LinkedList1Node poll_enabled_fds_list_node;\n    int poll_returned_index;\n    #endif\n} BFileDescriptor;\n\n/**\n * Intializes the file descriptor object.\n * The object is initialized in not active state.\n *\n * @param bs file descriptor object to initialize\n * @param fb file descriptor to represent\n * @param handler handler function invoked by the reactor when a monitored event is detected\n * @param user value passed to the handler functuon\n */\nvoid BFileDescriptor_Init (BFileDescriptor *bs, int fd, BFileDescriptor_handler handler, void *user);\n\n#endif\n\n// BReactor\n\n#define BSYSTEM_MAX_RESULTS 64\n#define BSYSTEM_MAX_HANDLES 64\n#define BSYSTEM_MAX_POLL_FDS 4096\n\n/**\n * Event loop that supports file desciptor (Linux) or HANDLE (Windows) events\n * and timers.\n */\ntypedef struct {\n    int exiting;\n    int exit_code;\n    \n    // jobs\n    BPendingGroup pending_jobs;\n    \n    // timers\n    BReactor__TimersTree timers_tree;\n    LinkedList1 timers_expired_list;\n    \n    // limits\n    LinkedList1 active_limits_list;\n    \n    #ifdef BADVPN_USE_WINAPI\n    LinkedList1 iocp_list;\n    HANDLE iocp_handle;\n    LinkedList1 iocp_ready_list;\n    #endif\n    \n    #ifdef BADVPN_USE_EPOLL\n    int efd; // epoll fd\n    struct epoll_event epoll_results[BSYSTEM_MAX_RESULTS]; // epoll returned events buffer\n    int epoll_results_num; // number of events in the array\n    int epoll_results_pos; // number of events processed so far\n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    int kqueue_fd;\n    struct kevent kevent_results[BSYSTEM_MAX_RESULTS];\n    int kevent_results_num;\n    int kevent_results_pos;\n    #endif\n    \n    #ifdef BADVPN_USE_POLL\n    LinkedList1 poll_enabled_fds_list;\n    int poll_num_enabled_fds;\n    int poll_results_num;\n    int poll_results_pos;\n    struct pollfd *poll_results_pollfds;\n    BFileDescriptor **poll_results_bfds;\n    #endif\n    \n    DebugObject d_obj;\n    #ifndef BADVPN_USE_WINAPI\n    DebugCounter d_fds_counter;\n    #endif\n    #ifdef BADVPN_USE_KEVENT\n    DebugCounter d_kevent_ctr;\n    #endif\n    DebugCounter d_limits_ctr;\n} BReactor;\n\n/**\n * Initializes the reactor.\n * {@link BLog_Init} must have been done.\n * {@link BTime_Init} must have been done.\n *\n * @param bsys the object\n * @return 1 on success, 0 on failure\n */\nint BReactor_Init (BReactor *bsys) WARN_UNUSED;\n\n/**\n * Frees the reactor.\n * Must not be called from within the event loop ({@link BReactor_Exec}).\n * There must be no {@link BPending} or {@link BSmallPending} objects using the\n * pending group returned by {@link BReactor_PendingGroup}.\n * There must be no running timers in this reactor.\n * There must be no limit objects in this reactor.\n * There must be no file descriptors or handles registered\n * with this reactor.\n * There must be no {@link BReactorKEvent} objects in this reactor.\n *\n * @param bsys the object\n */\nvoid BReactor_Free (BReactor *bsys);\n\n/**\n * Runs the event loop.\n *\n * @param bsys the object\n * @return value passed to {@link BReactor_Quit}\n */\nint BReactor_Exec (BReactor *bsys);\n\n/**\n * Causes the event loop ({@link BReactor_Exec}) to cease\n * dispatching events and return.\n * Any further calls of {@link BReactor_Exec} will return immediately.\n *\n * @param bsys the object\n * @param code value {@link BReactor_Exec} should return. If this is\n *             called more than once, it will return the last code.\n */\nvoid BReactor_Quit (BReactor *bsys, int code);\n\n/**\n * Starts a timer to expire at the specified time.\n * The timer must have been initialized with {@link BSmallTimer_Init}.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters running state, associated with this reactor.\n *\n * @param bsys the object\n * @param bt timer to start\n * @param mode interpretation of time (BTIMER_SET_ABSOLUTE or BTIMER_SET_RELATIVE)\n * @param time absolute or relative expiration time\n */\nvoid BReactor_SetSmallTimer (BReactor *bsys, BSmallTimer *bt, int mode, btime_t time);\n\n/**\n * Stops a timer.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters not running state.\n *\n * @param bsys the object\n * @param bt timer to stop\n */\nvoid BReactor_RemoveSmallTimer (BReactor *bsys, BSmallTimer *bt);\n\n/**\n * Starts a timer to expire after its default time.\n * The timer must have been initialized with {@link BTimer_Init}.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters running state, associated with this reactor.\n *\n * @param bsys the object\n * @param bt timer to start\n */\nvoid BReactor_SetTimer (BReactor *bsys, BTimer *bt);\n\n/**\n * Starts a timer to expire after a given time.\n * The timer must have been initialized with {@link BTimer_Init}.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters running state, associated with this reactor.\n *\n * @param bsys the object\n * @param bt timer to start\n * @param after relative expiration time\n */\nvoid BReactor_SetTimerAfter (BReactor *bsys, BTimer *bt, btime_t after);\n\n/**\n * Starts a timer to expire at the specified time.\n * The timer must have been initialized with {@link BTimer_Init}.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters running state, associated with this reactor.\n * The timer's expiration time is set to the time argument.\n *\n * @param bsys the object\n * @param bt timer to start\n * @param time absolute expiration time (according to {@link btime_gettime})\n */\nvoid BReactor_SetTimerAbsolute (BReactor *bsys, BTimer *bt, btime_t time);\n\n/**\n * Stops a timer.\n * If the timer is in running state, it must be associated with this reactor.\n * The timer enters not running state.\n *\n * @param bsys the object\n * @param bt timer to stop\n */\nvoid BReactor_RemoveTimer (BReactor *bsys, BTimer *bt);\n\n/**\n * Returns a {@link BPendingGroup} object that can be used to schedule jobs for\n * the reactor to execute. These jobs have complete priority over other events\n * (timers, file descriptors and Windows handles).\n * The returned pending group may only be used as an argument to {@link BPending_Init},\n * and must not be accessed by other means.\n * All {@link BPending} and {@link BSmallPending} objects using this group must be\n * freed before freeing the reactor.\n * \n * @param bsys the object\n * @return pending group for scheduling jobs for the reactor to execute\n */\nBPendingGroup * BReactor_PendingGroup (BReactor *bsys);\n\n/**\n * Executes pending jobs until either:\n *   - the reference job is reached, or\n *   - {@link BReactor_Quit} is called.\n * The reference job must be reached before the job list empties.\n * The reference job will not be executed.\n * \n * WARNING: Use with care. This should only be used to to work around third-party software\n * that does not integrade into the jobs system. In particular, you should think about:\n *   - the effects the jobs to be executed may have, and\n *   - the environment those jobs expect to be executed in.\n * \n * @param bsys the object\n * @param ref reference job. It is not accessed in any way, only its address is compared to\n *            pending jobs before they are executed.\n * @return 1 if the reference job was reached,\n *         0 if {@link BReactor_Quit} was called (either while executing a job, or before)\n */\nint BReactor_Synchronize (BReactor *bsys, BSmallPending *ref);\n\n#ifndef BADVPN_USE_WINAPI\n\n/**\n * Starts monitoring a file descriptor.\n *\n * @param bsys the object\n * @param bs file descriptor object. Must have been initialized with\n *           {@link BFileDescriptor_Init} Must be in not active state.\n *           On success, the file descriptor object enters active state,\n *           associated with this reactor.\n * @return 1 on success, 0 on failure\n */\nint BReactor_AddFileDescriptor (BReactor *bsys, BFileDescriptor *bs) WARN_UNUSED;\n\n/**\n * Stops monitoring a file descriptor.\n *\n * @param bsys the object\n * @param bs {@link BFileDescriptor} object. Must be in active state,\n *           associated with this reactor. The file descriptor object\n *           enters not active state.\n */\nvoid BReactor_RemoveFileDescriptor (BReactor *bsys, BFileDescriptor *bs);\n\n/**\n * Sets monitored file descriptor events.\n *\n * @param bsys the object\n * @param bs {@link BFileDescriptor} object. Must be in active state,\n *           associated with this reactor.\n * @param events events to watch for. Must not have any bits other than\n *               BREACTOR_READ and BREACTOR_WRITE.\n *               This overrides previosly monitored events.\n */\nvoid BReactor_SetFileDescriptorEvents (BReactor *bsys, BFileDescriptor *bs, int events);\n\n#endif\n\ntypedef struct {\n    BReactor *reactor;\n    int limit;\n    int count;\n    LinkedList1Node active_limits_list_node;\n    DebugObject d_obj;\n} BReactorLimit;\n\n/**\n * Initializes a limit object.\n * A limit object consists of a counter integer, which is initialized to\n * zero, is incremented by {@link BReactorLimit_Increment} up to \\a limit,\n * and is reset to zero every time the event loop performs a wait.\n * If the event loop has processed all detected events, and before performing\n * a wait, it determines that timers have expired, the counter will not be reset.\n * \n * @param o the object\n * @param reactor reactor the object is tied to\n * @param limit maximum counter value. Must be >0.\n */\nvoid BReactorLimit_Init (BReactorLimit *o, BReactor *reactor, int limit);\n\n/**\n * Frees a limit object.\n * \n * @param o the object\n */\nvoid BReactorLimit_Free (BReactorLimit *o);\n\n/**\n * Attempts to increment the counter of a limit object.\n * \n * @param o the object\n * @return 1 if the counter was lesser than the limit and was incremented,\n *         0 if the counter was greater or equal to the limit and could not be\n *           incremented\n */\nint BReactorLimit_Increment (BReactorLimit *o);\n\n/**\n * Sets the limit of a limit object.\n * \n * @param o the object\n * @param limit new limit. Must be >0.\n */\nvoid BReactorLimit_SetLimit (BReactorLimit *o, int limit);\n\n#ifdef BADVPN_USE_KEVENT\n\ntypedef void (*BReactorKEvent_handler) (void *user, u_int fflags, intptr_t data);\n\ntypedef struct {\n    BReactor *reactor;\n    BReactorKEvent_handler handler;\n    void *user;\n    uintptr_t ident;\n    short filter;\n    int kevent_tag;\n    int **kevent_returned_ptr;\n    DebugObject d_obj;\n} BReactorKEvent;\n\nint BReactorKEvent_Init (BReactorKEvent *o, BReactor *reactor, BReactorKEvent_handler handler, void *user, uintptr_t ident, short filter, u_int fflags, intptr_t data);\nvoid BReactorKEvent_Free (BReactorKEvent *o);\n\n#endif\n\n#ifdef BADVPN_USE_WINAPI\n\n#define BREACTOR_IOCP_EVENT_SUCCEEDED 1\n#define BREACTOR_IOCP_EVENT_FAILED 2\n#define BREACTOR_IOCP_EVENT_EXITING 3\n\ntypedef void (*BReactorIOCPOverlapped_handler) (void *user, int event, DWORD bytes);\n\ntypedef struct {\n    OVERLAPPED olap;\n    BReactor *reactor;\n    void *user;\n    BReactorIOCPOverlapped_handler handler;\n    LinkedList1Node iocp_list_node;\n    int is_ready;\n    LinkedList1Node ready_list_node;\n    int ready_succeeded;\n    DWORD ready_bytes;\n    DebugObject d_obj;\n} BReactorIOCPOverlapped;\n\nHANDLE BReactor_GetIOCPHandle (BReactor *reactor);\n\nvoid BReactorIOCPOverlapped_Init (BReactorIOCPOverlapped *o, BReactor *reactor, void *user, BReactorIOCPOverlapped_handler handler);\nvoid BReactorIOCPOverlapped_Free (BReactorIOCPOverlapped *o);\nvoid BReactorIOCPOverlapped_Wait (BReactorIOCPOverlapped *o, int *out_succeeded, DWORD *out_bytes);\n\n#endif\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BReactor_badvpn_timerstree.h",
    "content": "#define CAVL_PARAM_NAME BReactor__TimersTree\n#define CAVL_PARAM_FEATURE_COUNTS 0\n#define CAVL_PARAM_FEATURE_KEYS_ARE_INDICES 0\n#define CAVL_PARAM_FEATURE_NOKEYS 1\n#define CAVL_PARAM_TYPE_ENTRY struct BSmallTimer_t\n#define CAVL_PARAM_TYPE_LINK BReactor_timerstree_link\n#define CAVL_PARAM_TYPE_ARG int\n#define CAVL_PARAM_VALUE_NULL ((BReactor_timerstree_link)NULL)\n#define CAVL_PARAM_FUN_DEREF(arg, link) (link)\n#define CAVL_PARAM_FUN_COMPARE_ENTRIES(arg, entry1, entry2) compare_timers((entry1).link, (entry2).link)\n#define CAVL_PARAM_MEMBER_CHILD u.tree_child\n#define CAVL_PARAM_MEMBER_BALANCE tree_balance\n#define CAVL_PARAM_MEMBER_PARENT tree_parent\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BSignal.c",
    "content": "/**\n * @file BSignal.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifdef BADVPN_USE_WINAPI\n#include <windows.h>\n#else\n#include <signal.h>\n#include \"system/BUnixSignal.h\"\n#endif\n\n#include \"misc/debug.h\"\n#include \"base/BLog.h\"\n\n#include \"system/BSignal.h\"\n\n#include \"generated/blog_channel_BSignal.h\"\n\nstatic struct {\n    int initialized;\n    int finished;\n    BReactor *reactor;\n    BSignal_handler handler;\n    void *user;\n    #ifdef BADVPN_USE_WINAPI\n    BReactorIOCPOverlapped olap;\n    CRITICAL_SECTION iocp_handle_mutex;\n    HANDLE iocp_handle;\n    #else\n    BUnixSignal signal;\n    #endif\n} bsignal_global = {\n    0\n};\n\n#ifdef BADVPN_USE_WINAPI\n\nstatic void olap_handler (void *user, int event, DWORD bytes)\n{\n    ASSERT(bsignal_global.initialized)\n    ASSERT(!(event == BREACTOR_IOCP_EVENT_EXITING) || bsignal_global.finished)\n    \n    if (event == BREACTOR_IOCP_EVENT_EXITING) {\n        BReactorIOCPOverlapped_Free(&bsignal_global.olap);\n        return;\n    }\n    \n    if (!bsignal_global.finished) {\n        // call handler\n        bsignal_global.handler(bsignal_global.user);\n        return;\n    }\n}\n\nstatic BOOL WINAPI ctrl_handler (DWORD type)\n{\n    EnterCriticalSection(&bsignal_global.iocp_handle_mutex);\n    \n    if (bsignal_global.iocp_handle) {\n        PostQueuedCompletionStatus(bsignal_global.iocp_handle, 0, 0, &bsignal_global.olap.olap);\n    }\n    \n    LeaveCriticalSection(&bsignal_global.iocp_handle_mutex);\n    \n    return TRUE;\n}\n\n#else\n\nstatic void unix_signal_handler (void *user, int signo)\n{\n    ASSERT(signo == SIGTERM || signo == SIGINT)\n    ASSERT(bsignal_global.initialized)\n    ASSERT(!bsignal_global.finished)\n    \n    BLog(BLOG_DEBUG, \"Dispatching signal\");\n    \n    // call handler\n    bsignal_global.handler(bsignal_global.user);\n    return;\n}\n\n#endif\n\nint BSignal_Init (BReactor *reactor, BSignal_handler handler, void *user) \n{\n    ASSERT(!bsignal_global.initialized)\n    \n    // init arguments\n    bsignal_global.reactor = reactor;\n    bsignal_global.handler = handler;\n    bsignal_global.user = user;\n    \n    BLog(BLOG_DEBUG, \"BSignal initializing\");\n    \n    #ifdef BADVPN_USE_WINAPI\n    \n    // init olap\n    BReactorIOCPOverlapped_Init(&bsignal_global.olap, bsignal_global.reactor, NULL, olap_handler);\n    \n    // init handler mutex\n    InitializeCriticalSection(&bsignal_global.iocp_handle_mutex);\n    \n    // remember IOCP handle\n    bsignal_global.iocp_handle = BReactor_GetIOCPHandle(bsignal_global.reactor);\n    \n    // configure ctrl handler\n    if (!SetConsoleCtrlHandler(ctrl_handler, TRUE)) {\n        BLog(BLOG_ERROR, \"SetConsoleCtrlHandler failed\");\n        goto fail1;\n    }\n    \n    #else\n    \n    sigset_t sset;\n    ASSERT_FORCE(sigemptyset(&sset) == 0)\n    ASSERT_FORCE(sigaddset(&sset, SIGTERM) == 0)\n    ASSERT_FORCE(sigaddset(&sset, SIGINT) == 0)\n    \n    // init BUnixSignal\n    if (!BUnixSignal_Init(&bsignal_global.signal, bsignal_global.reactor, sset, unix_signal_handler, NULL)) {\n        BLog(BLOG_ERROR, \"BUnixSignal_Init failed\");\n        goto fail0;\n    }\n    \n    #endif\n    \n    bsignal_global.initialized = 1;\n    bsignal_global.finished = 0;\n    \n    return 1;\n    \n    #ifdef BADVPN_USE_WINAPI\nfail1:\n    DeleteCriticalSection(&bsignal_global.iocp_handle_mutex);\n    BReactorIOCPOverlapped_Free(&bsignal_global.olap);\n    #endif\n    \nfail0:\n    return 0;\n}\n\nvoid BSignal_Finish (void)\n{\n    ASSERT(bsignal_global.initialized)\n    ASSERT(!bsignal_global.finished)\n    \n    #ifdef BADVPN_USE_WINAPI\n    \n    // forget IOCP handle\n    EnterCriticalSection(&bsignal_global.iocp_handle_mutex);\n    bsignal_global.iocp_handle = NULL;\n    LeaveCriticalSection(&bsignal_global.iocp_handle_mutex);\n    \n    #else\n    \n    // free BUnixSignal\n    BUnixSignal_Free(&bsignal_global.signal, 0);\n    \n    #endif\n    \n    bsignal_global.finished = 1;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BSignal.h",
    "content": "/**\n * @file BSignal.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * A global object for catching program termination requests.\n */\n\n#ifndef BADVPN_SYSTEM_BSIGNAL_H\n#define BADVPN_SYSTEM_BSIGNAL_H\n\n#include \"misc/debug.h\"\n#include \"system/BReactor.h\"\n\ntypedef void (*BSignal_handler) (void *user);\n\n/**\n * Initializes signal handling.\n * The object is created in not capturing state.\n * {@link BLog_Init} must have been done.\n * \n * WARNING: make sure this won't interfere with other components:\n *   - on Linux, this uses {@link BUnixSignal} to catch SIGTERM and SIGINT,\n *   - on Windows, this sets up a handler with SetConsoleCtrlHandler.\n *\n * @param reactor {@link BReactor} from which the handler will be called\n * @param handler callback function invoked from the reactor\n * @param user value passed to callback function\n * @return 1 on success, 0 on failure\n */\nint BSignal_Init (BReactor *reactor, BSignal_handler handler, void *user) WARN_UNUSED;\n\n/**\n * Finishes signal handling.\n * {@link BSignal_Init} must not be called again.\n */\nvoid BSignal_Finish (void);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BTime.c",
    "content": "/**\n * @file BTime.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"system/BTime.h\"\n\n#ifndef BADVPN_PLUGIN\nstruct _BTime_global btime_global = {\n    #ifndef NDEBUG\n    0\n    #endif\n};\n#endif\n\n#ifdef __MACH__\n#include <mach/clock.h>\n#include <mach/mach.h>\n\nint t2s_clock_gettime(int clk_id, struct timespec* t)\n{\n    clock_serv_t cclock;\n    mach_timespec_t mts;\n    host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);\n    clock_get_time(cclock, &mts);\n    mach_port_deallocate(mach_task_self(), cclock);\n    t->tv_sec = mts.tv_sec;\n    t->tv_nsec = mts.tv_nsec;\n    return 0;\n}\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BTime.h",
    "content": "/**\n * @file BTime.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * System time abstraction used by {@link BReactor}.\n */\n\n#ifndef BADVPN_SYSTEM_BTIME_H\n#define BADVPN_SYSTEM_BTIME_H\n\n#if defined(BADVPN_USE_WINAPI)\n#include <windows.h>\n#elif defined(BADVPN_EMSCRIPTEN)\n#include <emscripten/emscripten.h>\n#else\n#include <time.h>\n#include <sys/time.h>\n#endif\n\n#include <stdint.h>\n\n#include \"misc/debug.h\"\n#include \"misc/overflow.h\"\n#include \"base/BLog.h\"\n\n#include \"generated/blog_channel_BTime.h\"\n\ntypedef int64_t btime_t;\n\n#define BTIME_MIN INT64_MIN\n\nstruct _BTime_global {\n    #ifndef NDEBUG\n    int initialized; // initialized statically\n    #endif\n    #if defined(BADVPN_USE_WINAPI)\n    LARGE_INTEGER start_time;\n    #elif defined(BADVPN_EMSCRIPTEN)\n    btime_t start_time;\n    #else\n    btime_t start_time;\n    int use_gettimeofday;\n    #endif\n};\n\n#ifdef __MACH__\n#define CLOCK_MONOTONIC 1\nint t2s_clock_gettime(int clk_id, struct timespec* t);\n#endif\n\nextern struct _BTime_global btime_global;\n\nstatic void BTime_Init (void)\n{\n    ASSERT(!btime_global.initialized)\n    \n    #if defined(BADVPN_USE_WINAPI)\n    \n    ASSERT_FORCE(QueryPerformanceCounter(&btime_global.start_time))\n    \n    #elif defined(BADVPN_EMSCRIPTEN)\n    \n    btime_global.start_time = emscripten_get_now();\n    \n    #else\n    \n    struct timespec ts;\n    if (t2s_clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {\n        BLog(BLOG_WARNING, \"CLOCK_MONOTONIC is not available. Timers will be confused by clock changes.\");\n        \n        struct timeval tv;\n        ASSERT_FORCE(gettimeofday(&tv, NULL) == 0)\n        \n        btime_global.start_time = (int64_t)tv.tv_sec * 1000 + (int64_t)tv.tv_usec/1000;\n        btime_global.use_gettimeofday = 1;\n    } else {\n        btime_global.start_time = (int64_t)ts.tv_sec * 1000 + (int64_t)ts.tv_nsec/1000000;\n        btime_global.use_gettimeofday = 0;\n    }\n    \n    #endif\n    \n    #ifndef NDEBUG\n    btime_global.initialized = 1;\n    #endif\n}\n\nstatic btime_t btime_gettime (void)\n{\n    ASSERT(btime_global.initialized)\n    \n    #if defined(BADVPN_USE_WINAPI)\n    \n    LARGE_INTEGER count;\n    LARGE_INTEGER freq;\n    ASSERT_FORCE(QueryPerformanceCounter(&count))\n    ASSERT_FORCE(QueryPerformanceFrequency(&freq))\n    return (((count.QuadPart - btime_global.start_time.QuadPart) * 1000) / freq.QuadPart);\n    \n    #elif defined(BADVPN_EMSCRIPTEN)\n    \n    return (btime_t)emscripten_get_now() - btime_global.start_time;\n    \n    #else\n    \n    if (btime_global.use_gettimeofday) {\n        struct timeval tv;\n        ASSERT_FORCE(gettimeofday(&tv, NULL) == 0)\n        return ((int64_t)tv.tv_sec * 1000 + (int64_t)tv.tv_usec/1000);\n    } else {\n        struct timespec ts;\n        ASSERT_FORCE(t2s_clock_gettime(CLOCK_MONOTONIC, &ts) == 0)\n        return (((int64_t)ts.tv_sec * 1000 + (int64_t)ts.tv_nsec/1000000) - btime_global.start_time);\n    }\n    \n    #endif\n}\n\nstatic btime_t btime_add (btime_t t1, btime_t t2)\n{\n    // handle overflow\n    int overflows = add_int64_overflows(t1, t2);\n    btime_t sum;\n    if (overflows != 0) {\n        if (overflows > 0) {\n            sum = INT64_MAX;\n        } else {\n            sum = INT64_MIN;\n        }\n    } else {\n        sum = t1 + t2;\n    }\n    \n    return sum;\n}\n\nstatic btime_t btime_getpast (void)\n{\n    return INT64_MIN;\n}\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BUnixSignal.c",
    "content": "/**\n * @file BUnixSignal.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <inttypes.h>\n#include <stdlib.h>\n#include <limits.h>\n#include <errno.h>\n#include <fcntl.h>\n#include <string.h>\n\n#ifdef BADVPN_USE_SIGNALFD\n#include <sys/signalfd.h>\n#endif\n\n#include \"misc/balloc.h\"\n#include \"misc/nonblocking.h\"\n#include \"base/BLog.h\"\n\n#include \"system/BUnixSignal.h\"\n\n#include \"generated/blog_channel_BUnixSignal.h\"\n\n#define BUNIXSIGNAL_MAX_SIGNALS 64\n\n#ifdef BADVPN_USE_SIGNALFD\n\nstatic void signalfd_handler (BUnixSignal *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // read a signal\n    struct signalfd_siginfo siginfo;\n    int bytes = read(o->signalfd_fd, &siginfo, sizeof(siginfo));\n    if (bytes < 0) {\n        int error = errno;\n        if (error == EAGAIN || error == EWOULDBLOCK) {\n            return;\n        }\n        BLog(BLOG_ERROR, \"read failed (%d)\", error);\n        return;\n    }\n    ASSERT_FORCE(bytes == sizeof(siginfo))\n    \n    // check signal\n    if (siginfo.ssi_signo > INT_MAX) {\n        BLog(BLOG_ERROR, \"read returned out of int range signo (%\"PRIu32\")\", siginfo.ssi_signo);\n        return;\n    }\n    int signo = siginfo.ssi_signo;\n    if (sigismember(&o->signals, signo) <= 0) {\n        BLog(BLOG_ERROR, \"read returned wrong signo (%d)\", signo);\n        return;\n    }\n    \n    BLog(BLOG_DEBUG, \"dispatching signal %d\", signo);\n    \n    // call handler\n    o->handler(o->user, signo);\n    return;\n}\n\n#endif\n\n#ifdef BADVPN_USE_KEVENT\n\nstatic void kevent_handler (struct BUnixSignal_kevent_entry *entry, u_int fflags, intptr_t data)\n{\n    BUnixSignal *o = entry->parent;\n    DebugObject_Access(&o->d_obj);\n    \n    // call signal\n    o->handler(o->user, entry->signo);\n    return;\n}\n\n#endif\n\n#ifdef BADVPN_USE_SELFPIPE\n\nstruct BUnixSignal_selfpipe_entry *bunixsignal_selfpipe_entries[BUNIXSIGNAL_MAX_SIGNALS];\n\nstatic void free_selfpipe_entry (struct BUnixSignal_selfpipe_entry *entry)\n{\n    BUnixSignal *o = entry->parent;\n    \n    // uninstall signal handler\n    struct sigaction act;\n    memset(&act, 0, sizeof(act));\n    act.sa_handler = SIG_DFL;\n    sigemptyset(&act.sa_mask);\n    ASSERT_FORCE(sigaction(entry->signo, &act, NULL) == 0)\n    \n    // free BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &entry->pipe_read_bfd);\n    \n    // close pipe\n    ASSERT_FORCE(close(entry->pipefds[0]) == 0)\n    ASSERT_FORCE(close(entry->pipefds[1]) == 0)\n}\n\nstatic void pipe_read_fd_handler (struct BUnixSignal_selfpipe_entry *entry, int events)\n{\n    BUnixSignal *o = entry->parent;\n    DebugObject_Access(&o->d_obj);\n    \n    // read a byte\n    uint8_t b;\n    if (read(entry->pipefds[0], &b, sizeof(b)) < 0) {\n        int error = errno;\n        if (error == EAGAIN || error == EWOULDBLOCK) {\n            return;\n        }\n        BLog(BLOG_ERROR, \"read failed (%d)\", error);\n        return;\n    }\n    \n    // call handler\n    o->handler(o->user, entry->signo);\n    return;\n}\n\nstatic void signal_handler (int signo)\n{\n    ASSERT(signo >= 0)\n    ASSERT(signo < BUNIXSIGNAL_MAX_SIGNALS)\n    \n    struct BUnixSignal_selfpipe_entry *entry = bunixsignal_selfpipe_entries[signo];\n    \n    uint8_t b = 0;\n    write(entry->pipefds[1], &b, sizeof(b));\n}\n\n#endif\n\nint BUnixSignal_Init (BUnixSignal *o, BReactor *reactor, sigset_t signals, BUnixSignal_handler handler, void *user)\n{\n    // init arguments\n    o->reactor = reactor;\n    o->signals = signals;\n    o->handler = handler;\n    o->user = user;\n    \n    #ifdef BADVPN_USE_SIGNALFD\n    \n    // init signalfd fd\n    if ((o->signalfd_fd = signalfd(-1, &o->signals, 0)) < 0) {\n        BLog(BLOG_ERROR, \"signalfd failed\");\n        goto fail0;\n    }\n    \n    // set non-blocking\n    if (fcntl(o->signalfd_fd, F_SETFL, O_NONBLOCK) < 0) {\n        BLog(BLOG_ERROR, \"cannot set non-blocking\");\n        goto fail1;\n    }\n    \n    // init signalfd BFileDescriptor\n    BFileDescriptor_Init(&o->signalfd_bfd, o->signalfd_fd, (BFileDescriptor_handler)signalfd_handler, o);\n    if (!BReactor_AddFileDescriptor(o->reactor, &o->signalfd_bfd)) {\n        BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n        goto fail1;\n    }\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->signalfd_bfd, BREACTOR_READ);\n    \n    // block signals\n    if (sigprocmask(SIG_BLOCK, &o->signals, 0) < 0) {\n        BLog(BLOG_ERROR, \"sigprocmask block failed\");\n        goto fail2;\n    }\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    // count signals\n    int num_signals = 0;\n    for (int i = 0; i < BUNIXSIGNAL_MAX_SIGNALS; i++) {\n        if (!sigismember(&o->signals, i)) {\n            continue;\n        }\n        num_signals++;\n    }\n    \n    // allocate array\n    if (!(o->entries = BAllocArray(num_signals, sizeof(o->entries[0])))) {\n        BLog(BLOG_ERROR, \"BAllocArray failed\");\n        goto fail0;\n    }\n    \n    // init kevents\n    o->num_entries = 0;\n    for (int i = 0; i < BUNIXSIGNAL_MAX_SIGNALS; i++) {\n        if (!sigismember(&o->signals, i)) {\n            continue;\n        }\n        struct BUnixSignal_kevent_entry *entry = &o->entries[o->num_entries];\n        entry->parent = o;\n        entry->signo = i;\n        if (!BReactorKEvent_Init(&entry->kevent, o->reactor, (BReactorKEvent_handler)kevent_handler, entry, entry->signo, EVFILT_SIGNAL, 0, 0)) {\n            BLog(BLOG_ERROR, \"BReactorKEvent_Init failed\");\n            goto fail2;\n        }\n        o->num_entries++;\n    }\n    \n    // block signals\n    if (sigprocmask(SIG_BLOCK, &o->signals, 0) < 0) {\n        BLog(BLOG_ERROR, \"sigprocmask block failed\");\n        goto fail2;\n    }\n    \n    #endif\n    \n    #ifdef BADVPN_USE_SELFPIPE\n    \n    // count signals\n    int num_signals = 0;\n    for (int i = 1; i < BUNIXSIGNAL_MAX_SIGNALS; i++) {\n        if (!sigismember(&o->signals, i)) {\n            continue;\n        }\n        num_signals++;\n    }\n    \n    // allocate array\n    if (!(o->entries = BAllocArray(num_signals, sizeof(o->entries[0])))) {\n        BLog(BLOG_ERROR, \"BAllocArray failed\");\n        goto fail0;\n    }\n    \n    // init entries\n    o->num_entries = 0;\n    for (int i = 1; i < BUNIXSIGNAL_MAX_SIGNALS; i++) {\n        if (!sigismember(&o->signals, i)) {\n            continue;\n        }\n        \n        struct BUnixSignal_selfpipe_entry *entry = &o->entries[o->num_entries];\n        entry->parent = o;\n        entry->signo = i;\n        \n        // init pipe\n        if (pipe(entry->pipefds) < 0) {\n            BLog(BLOG_ERROR, \"pipe failed\");\n            goto loop_fail0;\n        }\n        \n        // set pipe ends non-blocking\n        if (!badvpn_set_nonblocking(entry->pipefds[0]) || !badvpn_set_nonblocking(entry->pipefds[1])) {\n            BLog(BLOG_ERROR, \"set nonblocking failed\");\n            goto loop_fail1;\n        }\n        \n        // init read end BFileDescriptor\n        BFileDescriptor_Init(&entry->pipe_read_bfd, entry->pipefds[0], (BFileDescriptor_handler)pipe_read_fd_handler, entry);\n        if (!BReactor_AddFileDescriptor(o->reactor, &entry->pipe_read_bfd)) {\n            BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n            goto loop_fail1;\n        }\n        BReactor_SetFileDescriptorEvents(o->reactor, &entry->pipe_read_bfd, BREACTOR_READ);\n        \n        // set global entry pointer\n        bunixsignal_selfpipe_entries[entry->signo] = entry;\n        \n        // install signal handler\n        struct sigaction act;\n        memset(&act, 0, sizeof(act));\n        act.sa_handler = signal_handler;\n        sigemptyset(&act.sa_mask);\n        if (sigaction(entry->signo, &act, NULL) < 0) {\n            BLog(BLOG_ERROR, \"sigaction failed\");\n            goto loop_fail2;\n        }\n        \n        o->num_entries++;\n        \n        continue;\n        \n    loop_fail2:\n        BReactor_RemoveFileDescriptor(o->reactor, &entry->pipe_read_bfd);\n    loop_fail1:\n        ASSERT_FORCE(close(entry->pipefds[0]) == 0)\n        ASSERT_FORCE(close(entry->pipefds[1]) == 0)\n    loop_fail0:\n        goto fail2;\n    }\n    \n    #endif\n    \n    DebugObject_Init(&o->d_obj);\n    \n    return 1;\n    \n    #ifdef BADVPN_USE_SIGNALFD\nfail2:\n    BReactor_RemoveFileDescriptor(o->reactor, &o->signalfd_bfd);\nfail1:\n    ASSERT_FORCE(close(o->signalfd_fd) == 0)\n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\nfail2:\n    while (o->num_entries > 0) {\n        BReactorKEvent_Free(&o->entries[o->num_entries - 1].kevent);\n        o->num_entries--;\n    }\n    BFree(o->entries);\n    #endif\n    \n    #ifdef BADVPN_USE_SELFPIPE\nfail2:\n    while (o->num_entries > 0) {\n        free_selfpipe_entry(&o->entries[o->num_entries - 1]);\n        o->num_entries--;\n    }\n    BFree(o->entries);\n    #endif\n    \nfail0:\n    return 0;\n}\n\nvoid BUnixSignal_Free (BUnixSignal *o, int unblock)\n{\n    ASSERT(unblock == 0 || unblock == 1)\n    DebugObject_Free(&o->d_obj);\n    \n    #ifdef BADVPN_USE_SIGNALFD\n    \n    if (unblock) {\n        // unblock signals\n        ASSERT_FORCE(sigprocmask(SIG_UNBLOCK, &o->signals, 0) == 0)\n    }\n    \n    // free signalfd BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &o->signalfd_bfd);\n    \n    // free signalfd fd\n    ASSERT_FORCE(close(o->signalfd_fd) == 0)\n    \n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    \n    if (unblock) {\n        // unblock signals\n        ASSERT_FORCE(sigprocmask(SIG_UNBLOCK, &o->signals, 0) == 0)\n    }\n    \n    // free kevents\n    while (o->num_entries > 0) {\n        BReactorKEvent_Free(&o->entries[o->num_entries - 1].kevent);\n        o->num_entries--;\n    }\n    \n    // free array\n    BFree(o->entries);\n    \n    #endif\n    \n    #ifdef BADVPN_USE_SELFPIPE\n    \n    if (!unblock) {\n        // block signals\n        if (sigprocmask(SIG_BLOCK, &o->signals, 0) < 0) {\n            BLog(BLOG_ERROR, \"sigprocmask block failed\");\n        }\n    }\n    \n    // free entries\n    while (o->num_entries > 0) {\n        free_selfpipe_entry(&o->entries[o->num_entries - 1]);\n        o->num_entries--;\n    }\n    \n    // free array\n    BFree(o->entries);\n    \n    #endif\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/system/BUnixSignal.h",
    "content": "/**\n * @file BUnixSignal.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * Object for catching unix signals.\n */\n\n#ifndef BADVPN_SYSTEM_BUNIXSIGNAL_H\n#define BADVPN_SYSTEM_BUNIXSIGNAL_H\n\n#if (defined(BADVPN_USE_SIGNALFD) + defined(BADVPN_USE_KEVENT) + defined(BADVPN_USE_SELFPIPE)) != 1\n#error Unknown signal backend or too many signal backends\n#endif\n\n#include <unistd.h>\n#include <signal.h>\n\n#include \"misc/debug.h\"\n#include \"system/BReactor.h\"\n#include \"base/DebugObject.h\"\n\nstruct BUnixSignal_s;\n\n/**\n * Handler function called when a signal is received.\n * \n * @param user as in {@link BUnixSignal_Init}\n * @param signo signal number. Will be one of the signals provided to {@link signals}.\n */\ntypedef void (*BUnixSignal_handler) (void *user, int signo);\n\n#ifdef BADVPN_USE_KEVENT\nstruct BUnixSignal_kevent_entry {\n    struct BUnixSignal_s *parent;\n    int signo;\n    BReactorKEvent kevent;\n};\n#endif\n\n#ifdef BADVPN_USE_SELFPIPE\nstruct BUnixSignal_selfpipe_entry {\n    struct BUnixSignal_s *parent;\n    int signo;\n    int pipefds[2];\n    BFileDescriptor pipe_read_bfd;\n};\n#endif\n\n/**\n * Object for catching unix signals.\n */\ntypedef struct BUnixSignal_s {\n    BReactor *reactor;\n    sigset_t signals;\n    BUnixSignal_handler handler;\n    void *user;\n    \n    #ifdef BADVPN_USE_SIGNALFD\n    int signalfd_fd;\n    BFileDescriptor signalfd_bfd;\n    #endif\n    \n    #ifdef BADVPN_USE_KEVENT\n    struct BUnixSignal_kevent_entry *entries;\n    int num_entries;\n    #endif\n    \n    #ifdef BADVPN_USE_SELFPIPE\n    struct BUnixSignal_selfpipe_entry *entries;\n    int num_entries;\n    #endif\n    \n    DebugObject d_obj;\n} BUnixSignal;\n\n/**\n * Initializes the object.\n * {@link BLog_Init} must have been done.\n * \n * WARNING: for every signal number there should be at most one {@link BUnixSignal}\n * object handling it (or anything else that could interfere).\n * \n * This blocks the signal using sigprocmask() and sets up signalfd() for receiving\n * signals.\n *\n * @param o the object\n * @param reactor reactor we live in\n * @param signals signals to handle. See man 3 sigsetops.\n * @param handler handler function to call when a signal is received\n * @param user value passed to callback function\n * @return 1 on success, 0 on failure\n */\nint BUnixSignal_Init (BUnixSignal *o, BReactor *reactor, sigset_t signals, BUnixSignal_handler handler, void *user) WARN_UNUSED;\n\n/**\n * Frees the object.\n * \n * @param o the object\n * @param unblock whether to unblock the signals using sigprocmask(). Not unblocking it\n *                can be used while the program is exiting gracefully to prevent the\n *                signals from being handled handled according to its default disposition\n *                after this function is called. Must be 0 or 1.\n */\nvoid BUnixSignal_Free (BUnixSignal *o, int unblock);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tun2socks/SocksUdpGwClient.c",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include \"misc/debug.h\"\n#include \"base/BLog.h\"\n\n#include \"tun2socks/SocksUdpGwClient.h\"\n\n#include \"generated/blog_channel_SocksUdpGwClient.h\"\n\n#ifdef BADVPN_SOCKS_UDP_RELAY\n\n#include \"misc/socks_proto.h\"\n#define CONNECTION_UDP_BUFFER_SIZE 1\n\n#else\n\nstatic void free_socks (SocksUdpGwClient *o);\nstatic void try_connect (SocksUdpGwClient *o);\nstatic void reconnect_timer_handler (SocksUdpGwClient *o);\nstatic void socks_client_handler (SocksUdpGwClient *o, int event);\nstatic void udpgw_handler_servererror (SocksUdpGwClient *o);\nstatic void udpgw_handler_received (SocksUdpGwClient *o, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len);\n\n#endif\n\n#ifdef BADVPN_SOCKS_UDP_RELAY\nstatic void dgram_handler (SocksUdpGwClient_connection *o, int event);\nstatic void dgram_handler_received (SocksUdpGwClient_connection *o, uint8_t *data, int data_len);\nstatic int conaddr_comparator (void *unused, SocksUdpGwClient_conaddr *v1, SocksUdpGwClient_conaddr *v2);\nstatic SocksUdpGwClient_connection * find_connection (SocksUdpGwClient *o, SocksUdpGwClient_conaddr conaddr);\nstatic SocksUdpGwClient_connection * reuse_connection (SocksUdpGwClient *o, SocksUdpGwClient_conaddr conaddr);\nstatic void connection_send (SocksUdpGwClient_connection *o, const uint8_t *data, int data_len);\nstatic void connection_first_job_handler (SocksUdpGwClient_connection *con);\nstatic SocksUdpGwClient_connection *connection_init (SocksUdpGwClient *client, SocksUdpGwClient_conaddr conaddr, const uint8_t *data, int data_len);\nstatic void connection_free (SocksUdpGwClient_connection *o);\n\nstatic void dgram_handler (SocksUdpGwClient_connection *o, int event)\n{\n    SocksUdpGwClient *client = o->client;\n    ASSERT(client);\n    \n    DebugObject_Access(&client->d_obj);\n    \n    BLog(BLOG_INFO, \"UDP error\");\n}\n\nstatic void dgram_handler_received (SocksUdpGwClient_connection *o, uint8_t *data, int data_len)\n{\n    SocksUdpGwClient *client = o->client;\n    ASSERT(client);\n    \n    DebugObject_Access(&client->d_obj);\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= client->udpgw_mtu)\n    \n    // accept packet\n    PacketPassInterface_Done(&o->udp_recv_if);\n    \n    // check header\n    if (data_len < sizeof(struct socks_udp_header)) {\n        BLog(BLOG_ERROR, \"missing header\");\n        return;\n    }\n    struct socks_udp_header header;\n    memcpy(&header, data, sizeof(header));\n    data += sizeof(header);\n    data_len -= sizeof(header);\n    uint8_t frag = header.frag;\n    uint8_t atyp = header.atyp;\n    \n    // check fragment\n    if (frag) {\n        BLog(BLOG_ERROR, \"unexpected frag\");\n        return;\n    }\n    \n    // parse address\n    BAddr remote_addr;\n    if (atyp == SOCKS_ATYP_IPV6) {\n        if (data_len < sizeof(struct udpgw_addr_ipv6)) {\n            BLog(BLOG_ERROR, \"missing ipv6 address\");\n            return;\n        }\n        struct udpgw_addr_ipv6 addr_ipv6;\n        memcpy(&addr_ipv6, data, sizeof(addr_ipv6));\n        data += sizeof(addr_ipv6);\n        data_len -= sizeof(addr_ipv6);\n        BAddr_InitIPv6(&remote_addr, addr_ipv6.addr_ip, addr_ipv6.addr_port);\n    } else {\n        if (data_len < sizeof(struct udpgw_addr_ipv4)) {\n            BLog(BLOG_ERROR, \"missing ipv4 address\");\n            return;\n        }\n        struct udpgw_addr_ipv4 addr_ipv4;\n        memcpy(&addr_ipv4, data, sizeof(addr_ipv4));\n        data += sizeof(addr_ipv4);\n        data_len -= sizeof(addr_ipv4);\n        BAddr_InitIPv4(&remote_addr, addr_ipv4.addr_ip, addr_ipv4.addr_port);\n    }\n    \n    // check remote addr\n    if (!BAddr_Compare(&remote_addr, &o->conaddr.remote_addr)) {\n        BLog(BLOG_ERROR, \"remote addr not match\");\n        return;\n    }\n    \n    // check remaining data\n    if (data_len > client->udp_mtu) {\n        BLog(BLOG_ERROR, \"too much data\");\n        return;\n    }\n    \n    // submit to user\n    client->handler_received(client->user, o->conaddr.local_addr, remote_addr, data, data_len);\n}\n\nstatic int conaddr_comparator (void *unused, SocksUdpGwClient_conaddr *v1, SocksUdpGwClient_conaddr *v2)\n{\n    int r = BAddr_CompareOrder(&v1->remote_addr, &v2->remote_addr);\n    if (r) {\n        return r;\n    }\n    return BAddr_CompareOrder(&v1->local_addr, &v2->local_addr);\n}\n\nstatic SocksUdpGwClient_connection * find_connection (SocksUdpGwClient *o, SocksUdpGwClient_conaddr conaddr)\n{\n    BAVLNode *tree_node = BAVL_LookupExact(&o->connections_tree, &conaddr);\n    if (!tree_node) {\n        return NULL;\n    }\n    \n    return UPPER_OBJECT(tree_node, SocksUdpGwClient_connection, connections_tree_node);\n}\n\nstatic SocksUdpGwClient_connection * reuse_connection (SocksUdpGwClient *o, SocksUdpGwClient_conaddr conaddr)\n{\n    ASSERT(!find_connection(o, conaddr))\n    ASSERT(o->num_connections > 0)\n    \n    // get least recently used connection\n    SocksUdpGwClient_connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&o->connections_list), SocksUdpGwClient_connection, connections_list_node);\n    \n    // remove from connections tree by conaddr\n    BAVL_Remove(&o->connections_tree, &con->connections_tree_node);\n    \n    // set new conaddr\n    con->conaddr = conaddr;\n    \n    // insert to connections tree by conaddr\n    ASSERT_EXECUTE(BAVL_Insert(&o->connections_tree, &con->connections_tree_node, NULL))\n    \n    return con;\n}\n\nstatic void connection_send (SocksUdpGwClient_connection *o, const uint8_t *data, int data_len)\n{\n    // get buffer location\n    uint8_t *out;\n    if (!BufferWriter_StartPacket(&o->udp_send_writer, &out)) {\n        BLog(BLOG_ERROR, \"out of UDP buffer\");\n        return;\n    }\n    int out_pos = 0;\n    \n    // write header\n    BAddr remote_addr = o->conaddr.remote_addr;\n    struct socks_udp_header header;\n    header.rsv = 0;\n    header.frag = 0;\n    if (remote_addr.type == BADDR_TYPE_IPV4) {\n        header.atyp = SOCKS_ATYP_IPV4;\n    } else {\n        header.atyp = SOCKS_ATYP_IPV6;\n    }\n    memcpy(out + out_pos, &header, sizeof(header));\n    out_pos += sizeof(header);\n    \n    // write address\n    switch (remote_addr.type) {\n        case BADDR_TYPE_IPV4: {\n            struct udpgw_addr_ipv4 addr_ipv4;\n            addr_ipv4.addr_ip = remote_addr.ipv4.ip;\n            addr_ipv4.addr_port = remote_addr.ipv4.port;\n            memcpy(out + out_pos, &addr_ipv4, sizeof(addr_ipv4));\n            out_pos += sizeof(addr_ipv4);\n        } break;\n        case BADDR_TYPE_IPV6: {\n            struct udpgw_addr_ipv6 addr_ipv6;\n            memcpy(addr_ipv6.addr_ip, remote_addr.ipv6.ip, sizeof(addr_ipv6.addr_ip));\n            addr_ipv6.addr_port = remote_addr.ipv6.port;\n            memcpy(out + out_pos, &addr_ipv6, sizeof(addr_ipv6));\n            out_pos += sizeof(addr_ipv6);\n        } break;\n    }\n    \n    // write packet to buffer\n    memcpy(out + out_pos, data, data_len);\n    out_pos += data_len;\n    \n    // submit written message\n    BufferWriter_EndPacket(&o->udp_send_writer, out_pos);\n}\n\nstatic void connection_first_job_handler (SocksUdpGwClient_connection *con)\n{\n    connection_send(con, con->first_data, con->first_data_len);\n}\n\nstatic SocksUdpGwClient_connection *connection_init (SocksUdpGwClient *client, SocksUdpGwClient_conaddr conaddr, const uint8_t *data, int data_len)\n{\n    // allocate structure\n    SocksUdpGwClient_connection *o = (SocksUdpGwClient_connection *) malloc(sizeof(*o));\n    if (!o) {\n        BLog(BLOG_ERROR, \"malloc failed\");\n        goto fail;\n    }\n    \n    // init arguments\n    o->client = client;\n    o->conaddr = conaddr;\n    o->first_data = data;\n    o->first_data_len = data_len;\n    \n    // init first job\n    BPending_Init(&o->first_job, BReactor_PendingGroup(client->reactor), (BPending_handler)connection_first_job_handler, o);\n    BPending_Set(&o->first_job);\n    \n    // init UDP dgram\n    if (!BDatagram_Init(&o->udp_dgram, client->remote_udpgw_addr.type, client->reactor, o, (BDatagram_handler)dgram_handler)) {\n        goto fail0;\n    }\n    \n    // set SO_REUSEADDR\n    if (!BDatagram_SetReuseAddr(&o->udp_dgram, 1)) {\n        BLog(BLOG_ERROR, \"set SO_REUSEADDR failed\");\n        goto fail1;\n    }\n    \n    // set UDP dgram send address\n    BIPAddr ipaddr;\n    memset(&ipaddr, 0, sizeof(ipaddr));\n    ipaddr.type = client->remote_udpgw_addr.type;\n    BDatagram_SetSendAddrs(&o->udp_dgram, client->remote_udpgw_addr, ipaddr);\n    \n    // init UDP dgram interfaces\n    BDatagram_SendAsync_Init(&o->udp_dgram, client->udp_mtu);\n    BDatagram_RecvAsync_Init(&o->udp_dgram, client->udp_mtu);\n    \n    // init UDP writer\n    BufferWriter_Init(&o->udp_send_writer, client->udp_mtu, BReactor_PendingGroup(client->reactor));\n    \n    // init UDP buffer\n    if (!PacketBuffer_Init(&o->udp_send_buffer, BufferWriter_GetOutput(&o->udp_send_writer), BDatagram_SendAsync_GetIf(&o->udp_dgram), CONNECTION_UDP_BUFFER_SIZE, BReactor_PendingGroup(client->reactor))) {\n        BLog(BLOG_ERROR, \"PacketBuffer_Init failed\");\n        goto fail2;\n    }\n    \n    // init UDP recv interface\n    PacketPassInterface_Init(&o->udp_recv_if, client->udp_mtu, (PacketPassInterface_handler_send)dgram_handler_received, o, BReactor_PendingGroup(client->reactor));\n    \n    // init UDP recv buffer\n    if (!SinglePacketBuffer_Init(&o->udp_recv_buffer, BDatagram_RecvAsync_GetIf(&o->udp_dgram), &o->udp_recv_if, BReactor_PendingGroup(client->reactor))) {\n        BLog(BLOG_ERROR, \"SinglePacketBuffer_Init failed\");\n        goto fail3;\n    }\n    \n    // insert to connections tree by conaddr\n    ASSERT_EXECUTE(BAVL_Insert(&client->connections_tree, &o->connections_tree_node, NULL));\n    \n    // insert to connections list\n    LinkedList1_Append(&client->connections_list, &o->connections_list_node);\n    \n    // increment number of connections\n    client->num_connections++;\n    \n    // succeed to init\n    return o;\n    \nfail3:\n    PacketPassInterface_Free(&o->udp_recv_if);\n    PacketBuffer_Free(&o->udp_send_buffer);\nfail2:\n    BufferWriter_Free(&o->udp_send_writer);\n    BDatagram_RecvAsync_Free(&o->udp_dgram);\n    BDatagram_SendAsync_Free(&o->udp_dgram);\nfail1:\n    BDatagram_Free(&o->udp_dgram);\n    \nfail0:\n    BPending_Free(&o->first_job);\n    free(o);\nfail:\n    return NULL;\n}\n\nstatic void connection_free (SocksUdpGwClient_connection *o)\n{\n    SocksUdpGwClient *client = o->client;\n    \n    // decrement number of connections\n    client->num_connections--;\n    \n    // remove from connections list\n    LinkedList1_Remove(&client->connections_list, &o->connections_list_node);\n    \n    // remove from connections tree by conaddr\n    BAVL_Remove(&client->connections_tree, &o->connections_tree_node);\n    \n    // free UDP receive buffer\n    SinglePacketBuffer_Free(&o->udp_recv_buffer);\n    \n    // free UDP receive interface\n    PacketPassInterface_Free(&o->udp_recv_if);\n    \n    // free UDP buffer\n    PacketBuffer_Free(&o->udp_send_buffer);\n    \n    // free UDP writer\n    BufferWriter_Free(&o->udp_send_writer);\n    \n    // free UDP dgram interfaces\n    BDatagram_RecvAsync_Free(&o->udp_dgram);\n    BDatagram_SendAsync_Free(&o->udp_dgram);\n    \n    // free UDP dgram\n    BDatagram_Free(&o->udp_dgram);\n    \n    // free structure\n    free(o);\n}\n\n#else\n\nstatic void free_socks (SocksUdpGwClient *o)\n{\n    ASSERT(o->have_socks)\n    \n    // disconnect udpgw client from SOCKS\n    if (o->socks_up) {\n        UdpGwClient_DisconnectServer(&o->udpgw_client);\n    }\n    \n    // free SOCKS client\n    BSocksClient_Free(&o->socks_client);\n    \n    // set have no SOCKS\n    o->have_socks = 0;\n}\n\nstatic void try_connect (SocksUdpGwClient *o)\n{\n    ASSERT(!o->have_socks)\n    ASSERT(!BTimer_IsRunning(&o->reconnect_timer))\n    \n    // init SOCKS client\n    if (!BSocksClient_Init(&o->socks_client, o->socks_server_addr, o->auth_info, o->num_auth_info, o->remote_udpgw_addr, (BSocksClient_handler)socks_client_handler, o, o->reactor)) {\n        BLog(BLOG_ERROR, \"BSocksClient_Init failed\");\n        goto fail0;\n    }\n    \n    // set have SOCKS\n    o->have_socks = 1;\n    \n    // set SOCKS not up\n    o->socks_up = 0;\n    \n    return;\n    \nfail0:\n    // set reconnect timer\n    BReactor_SetTimer(o->reactor, &o->reconnect_timer);\n}\n\nstatic void reconnect_timer_handler (SocksUdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(!o->have_socks)\n    \n    // try connecting\n    try_connect(o);\n}\n\nstatic void socks_client_handler (SocksUdpGwClient *o, int event)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->have_socks)\n    \n    switch (event) {\n        case BSOCKSCLIENT_EVENT_UP: {\n            ASSERT(!o->socks_up)\n            \n            BLog(BLOG_INFO, \"SOCKS up\");\n            \n            // connect udpgw client to SOCKS\n            if (!UdpGwClient_ConnectServer(&o->udpgw_client, BSocksClient_GetSendInterface(&o->socks_client), BSocksClient_GetRecvInterface(&o->socks_client))) {\n                BLog(BLOG_ERROR, \"UdpGwClient_ConnectServer failed\");\n                goto fail0;\n            }\n            \n            // set SOCKS up\n            o->socks_up = 1;\n            \n            return;\n            \n        fail0:\n            // free SOCKS\n            free_socks(o);\n            \n            // set reconnect timer\n            BReactor_SetTimer(o->reactor, &o->reconnect_timer);\n        } break;\n        \n        case BSOCKSCLIENT_EVENT_ERROR:\n        case BSOCKSCLIENT_EVENT_ERROR_CLOSED: {\n            BLog(BLOG_INFO, \"SOCKS error\");\n            \n            // free SOCKS\n            free_socks(o);\n            \n            // set reconnect timer\n            BReactor_SetTimer(o->reactor, &o->reconnect_timer);\n        } break;\n        \n        default: ASSERT(0);\n    }\n}\n\nstatic void udpgw_handler_servererror (SocksUdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->have_socks)\n    ASSERT(o->socks_up)\n    \n    BLog(BLOG_ERROR, \"client reports server error\");\n    \n    // free SOCKS\n    free_socks(o);\n    \n    // set reconnect timer\n    BReactor_SetTimer(o->reactor, &o->reconnect_timer);\n}\n\nstatic void udpgw_handler_received (SocksUdpGwClient *o, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    // submit to user\n    o->handler_received(o->user, local_addr, remote_addr, data, data_len);\n    return;\n}\n\n#endif\n\nint SocksUdpGwClient_Init (SocksUdpGwClient *o, int udp_mtu, int max_connections, int send_buffer_size, btime_t keepalive_time, BAddr socks_server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info,\n                           BAddr remote_udpgw_addr, btime_t reconnect_time, BReactor *reactor, void *user,\n                           SocksUdpGwClient_handler_received handler_received)\n{\n    // see asserts in UdpGwClient_Init\n//    ASSERT(!BAddr_IsInvalid(&socks_server_addr))\n#ifndef BADVPN_SOCKS_UDP_RELAY\n    ASSERT(remote_udpgw_addr.type == BADDR_TYPE_IPV4 || remote_udpgw_addr.type == BADDR_TYPE_IPV6)\n#endif\n    \n    // init arguments\n    o->udp_mtu = udp_mtu;\n    o->socks_server_addr = socks_server_addr;\n    o->auth_info = auth_info;\n    o->num_auth_info = num_auth_info;\n    o->remote_udpgw_addr = remote_udpgw_addr;\n    o->reactor = reactor;\n    o->user = user;\n    o->handler_received = handler_received;\n    \n#ifdef BADVPN_SOCKS_UDP_RELAY\n    // compute MTUs\n    o->udpgw_mtu = udpgw_compute_mtu(o->udp_mtu);\n    o->max_connections = max_connections;\n    \n    // limit max connections to number of conid's\n    if (o->max_connections > UINT16_MAX + 1) {\n        o->max_connections = UINT16_MAX + 1;\n    }\n    \n    // init connections tree by conaddr\n    BAVL_Init(&o->connections_tree, OFFSET_DIFF(SocksUdpGwClient_connection, conaddr, connections_tree_node), (BAVL_comparator)conaddr_comparator, NULL);\n    \n    // init connections list\n    LinkedList1_Init(&o->connections_list);\n#else\n    // init udpgw client\n    if (!UdpGwClient_Init(&o->udpgw_client, udp_mtu, max_connections, send_buffer_size, keepalive_time, o->reactor, o,\n                          (UdpGwClient_handler_servererror)udpgw_handler_servererror,\n                          (UdpGwClient_handler_received)udpgw_handler_received\n    )) {\n        goto fail0;\n    }\n    \n    // init reconnect timer\n    BTimer_Init(&o->reconnect_timer, reconnect_time, (BTimer_handler)reconnect_timer_handler, o);\n    \n    // set have no SOCKS\n    o->have_socks = 0;\n    \n    // try connecting\n    try_connect(o);\n#endif\n    \n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail0:\n    return 0;\n}\n\nvoid SocksUdpGwClient_Free (SocksUdpGwClient *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n#ifdef BADVPN_SOCKS_UDP_RELAY\n    // free connections\n    while (!LinkedList1_IsEmpty(&o->connections_list)) {\n        SocksUdpGwClient_connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&o->connections_list), SocksUdpGwClient_connection, connections_list_node);\n        connection_free(con);\n    }\n#else\n    // free SOCKS\n    if (o->have_socks) {\n        free_socks(o);\n    }\n    \n    // free reconnect timer\n    BReactor_RemoveTimer(o->reactor, &o->reconnect_timer);\n    \n    // free udpgw client\n    UdpGwClient_Free(&o->udpgw_client);\n#endif\n}\n\nvoid SocksUdpGwClient_SubmitPacket (SocksUdpGwClient *o, BAddr local_addr, BAddr remote_addr, int is_dns, const uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    // see asserts in UdpGwClient_SubmitPacket\n    \n#ifdef BADVPN_SOCKS_UDP_RELAY\n    ASSERT(local_addr.type == BADDR_TYPE_IPV4 || local_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(remote_addr.type == BADDR_TYPE_IPV4 || remote_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->udp_mtu)\n    \n    // build conaddr\n    SocksUdpGwClient_conaddr conaddr;\n    conaddr.local_addr = local_addr;\n    conaddr.remote_addr = remote_addr;\n    \n    // lookup connection\n    SocksUdpGwClient_connection *con = find_connection(o, conaddr);\n    \n    // if no connection and can't create a new one, reuse the least recently used une\n    if (!con && o->num_connections == o->max_connections) {\n        con = reuse_connection(o, conaddr);\n    }\n    \n    if (!con) {\n        // create new connection\n        con = connection_init(o, conaddr, data, data_len);\n    } else {\n        // move connection to front of the list\n        LinkedList1_Remove(&o->connections_list, &con->connections_list_node);\n        LinkedList1_Append(&o->connections_list, &con->connections_list_node);\n        \n        // send packet to existing connection\n        connection_send(con, data, data_len);\n    }\n#else\n    // submit to udpgw client\n    UdpGwClient_SubmitPacket(&o->udpgw_client, local_addr, remote_addr, is_dns, data, data_len);\n#endif\n}\n\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tun2socks/SocksUdpGwClient.h",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_TUN2SOCKS_SOCKSUDPGWCLIENT_H\n#define BADVPN_TUN2SOCKS_SOCKSUDPGWCLIENT_H\n\n#include \"misc/debug.h\"\n#include \"base/DebugObject.h\"\n#include \"system/BReactor.h\"\n#ifdef BADVPN_SOCKS_UDP_RELAY\n#include <protocol/udpgw_proto.h>\n#include <protocol/packetproto.h>\n#include <system/BDatagram.h>\n#include <flow/PacketBuffer.h>\n#include <flow/SinglePacketBuffer.h>\n#include <flow/BufferWriter.h>\n#include <structure/BAVL.h>\n#include <structure/LinkedList1.h>\n#include <misc/offset.h>\n#else\n#include \"udpgw_client/UdpGwClient.h\"\n#include \"socksclient/BSocksClient.h\"\n#endif\n\ntypedef void (*SocksUdpGwClient_handler_received) (void *user, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len);\n\ntypedef struct {\n    int udp_mtu;\n    BAddr socks_server_addr;\n    const struct BSocksClient_auth_info *auth_info;\n    size_t num_auth_info;\n    BAddr remote_udpgw_addr;\n    BReactor *reactor;\n    void *user;\n    SocksUdpGwClient_handler_received handler_received;\n#ifdef BADVPN_SOCKS_UDP_RELAY\n    int udpgw_mtu;\n    int num_connections;\n    int max_connections;\n    BAVL connections_tree;\n    LinkedList1 connections_list;\n#else\n    UdpGwClient udpgw_client;\n    BTimer reconnect_timer;\n    int have_socks;\n    BSocksClient socks_client;\n    int socks_up;\n#endif\n    DebugObject d_obj;\n} SocksUdpGwClient;\n\n#ifdef BADVPN_SOCKS_UDP_RELAY\ntypedef struct {\n    BAddr local_addr;\n    BAddr remote_addr;\n} SocksUdpGwClient_conaddr;\n\ntypedef struct {\n    SocksUdpGwClient *client;\n    SocksUdpGwClient_conaddr conaddr;\n    BPending first_job;\n    const uint8_t *first_data;\n    int first_data_len;\n    BDatagram udp_dgram;\n    BufferWriter udp_send_writer;\n    PacketBuffer udp_send_buffer;\n    SinglePacketBuffer udp_recv_buffer;\n    PacketPassInterface udp_recv_if;\n    BAVLNode connections_tree_node;\n    LinkedList1Node connections_list_node;\n} SocksUdpGwClient_connection;\n#endif\n\nint SocksUdpGwClient_Init (SocksUdpGwClient *o, int udp_mtu, int max_connections, int send_buffer_size, btime_t keepalive_time, BAddr socks_server_addr, const struct BSocksClient_auth_info *auth_info, size_t num_auth_info,\n                           BAddr remote_udpgw_addr, btime_t reconnect_time, BReactor *reactor, void *user,\n                           SocksUdpGwClient_handler_received handler_received) WARN_UNUSED;\nvoid SocksUdpGwClient_Free (SocksUdpGwClient *o);\nvoid SocksUdpGwClient_SubmitPacket (SocksUdpGwClient *o, BAddr local_addr, BAddr remote_addr, int is_dns, const uint8_t *data, int data_len);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tun2socks/tun2socks.c",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdint.h>\n#include <stdio.h>\n#include <stddef.h>\n#include <string.h>\n#include <limits.h>\n\n#include \"misc/version.h\"\n#include \"misc/loggers_string.h\"\n#include \"misc/loglevel.h\"\n#include \"misc/minmax.h\"\n#include \"misc/offset.h\"\n#include \"misc/dead.h\"\n#include \"misc/ipv4_proto.h\"\n#include \"misc/ipv6_proto.h\"\n#include \"misc/udp_proto.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/balloc.h\"\n#include \"misc/open_standard_streams.h\"\n#include \"misc/read_file.h\"\n#include \"misc/ipaddr6.h\"\n#include \"misc/concat_strings.h\"\n#include \"structure/LinkedList1.h\"\n#include \"base/BLog.h\"\n#include \"system/BReactor.h\"\n#include \"system/BSignal.h\"\n#include \"system/BAddr.h\"\n#include \"system/BNetwork.h\"\n#include \"flow/SinglePacketBuffer.h\"\n#include \"socksclient/BSocksClient.h\"\n#include \"tuntap/BTap.h\"\n#include \"lwip/init.h\"\n#include \"lwip/tcp_impl.h\"\n#include \"lwip/netif.h\"\n#include \"lwip/tcp.h\"\n#include \"tun2socks/SocksUdpGwClient.h\"\n//#include <Foundation/Foundation.h>\n\n#ifndef BADVPN_USE_WINAPI\n#include \"base/BLog_syslog.h\"\n#endif\n\n#include \"tun2socks/tun2socks.h\"\n\n#include \"generated/blog_channel_tun2socks.h\"\n\n#define LOGGER_STDOUT 1\n#define LOGGER_SYSLOG 2\n\n#define SYNC_DECL \\\n    BPending sync_mark; \\\n\n#define SYNC_FROMHERE \\\n    BPending_Init(&sync_mark, BReactor_PendingGroup(&ss), NULL, NULL); \\\n    BPending_Set(&sync_mark);\n\n#define SYNC_BREAK \\\n    BPending_Free(&sync_mark);\n\n#define SYNC_COMMIT \\\n    BReactor_Synchronize(&ss, &sync_mark.base); \\\n    BPending_Free(&sync_mark);\n\n// command-line options\nstruct {\n    int help;\n    int version;\n    int logger;\n    #ifndef BADVPN_USE_WINAPI\n    char *logger_syslog_facility;\n    char *logger_syslog_ident;\n    #endif\n    int loglevel;\n    int loglevels[BLOG_NUM_CHANNELS];\n    int fd;\n    int mtu;\n    char *netif_ipaddr;\n    char *netif_netmask;\n    char *netif_ip6addr;\n    char *socks_server_addr;\n    char *username;\n    char *password;\n    char *password_file;\n    int append_source_to_username;\n    char *udpgw_remote_server_addr;\n    int udpgw_max_connections;\n    int udpgw_connection_buffer_size;\n    int udpgw_transparent_dns;\n} options;\n\n// TCP client\nstruct tcp_client {\n    dead_t dead;\n    dead_t dead_client;\n    LinkedList1Node list_node;\n    BAddr local_addr;\n    BAddr remote_addr;\n    struct tcp_pcb *pcb;\n    int client_closed;\n    uint8_t buf[TCP_WND];\n    int buf_used;\n    char *socks_username;\n    BSocksClient socks_client;\n    int socks_up;\n    int socks_closed;\n    StreamPassInterface *socks_send_if;\n    StreamRecvInterface *socks_recv_if;\n    uint8_t socks_recv_buf[CLIENT_SOCKS_RECV_BUF_SIZE];\n    int socks_recv_buf_used;\n    int socks_recv_buf_sent;\n    int socks_recv_waiting;\n    int socks_recv_tcp_pending;\n};\n\n// IP address of netif\nBIPAddr netif_ipaddr;\n\n// netmask of netif\nBIPAddr netif_netmask;\n\n// IP6 address of netif\nstruct ipv6_addr netif_ip6addr;\n\n// SOCKS server address\nBAddr socks_server_addr;\n\n// allocated password file contents\nuint8_t *password_file_contents;\n\n// SOCKS authentication information\nstruct BSocksClient_auth_info socks_auth_info[2];\nsize_t socks_num_auth_info;\n\n// remote udpgw server addr, if provided\nBAddr udpgw_remote_server_addr;\n\n// reactor\nBReactor ss;\n\n// set to 1 by terminate\nint quitting;\n\n// TUN device\nBTap device;\n\n// device write buffer\nuint8_t *device_write_buf;\n\n// device reading\nSinglePacketBuffer device_read_buffer;\nPacketPassInterface device_read_interface;\n\n// udpgw client\nSocksUdpGwClient udpgw_client;\nint udp_mtu;\n\n// TCP timer\nBTimer tcp_timer;\n\n// job for initializing lwip\nBPending lwip_init_job;\n\n// lwip netif\nint have_netif;\nstruct netif the_netif;\n\n// lwip TCP listener\nstruct tcp_pcb *listener;\n\n// lwip TCP/IPv6 listener\nstruct tcp_pcb *listener_ip6;\n\n// TCP clients\nLinkedList1 tcp_clients;\n\n// number of clients\nint num_clients;\n\nstatic void terminate (void);\nstatic void print_help (const char *name);\nstatic void print_version (void);\nstatic int parse_arguments (int argc, char *argv[]);\nstatic int process_arguments (void);\nstatic void signal_handler (void *unused);\nstatic BAddr baddr_from_lwip (int is_ipv6, const ipX_addr_t *ipx_addr, uint16_t port_hostorder);\nstatic void lwip_init_job_hadler (void *unused);\nstatic void tcp_timer_handler (void *unused);\nstatic void device_error_handler (void *unused);\nstatic void device_read_handler_send (void *unused, uint8_t *data, int data_len);\nstatic int process_device_udp_packet (uint8_t *data, int data_len);\nstatic err_t netif_init_func (struct netif *netif);\nstatic err_t netif_output_func (struct netif *netif, struct pbuf *p, ip_addr_t *ipaddr);\n//static err_t netif_output_ip6_func (struct netif *netif, struct pbuf *p, ip6_addr_t *ipaddr);\nstatic err_t common_netif_output (struct netif *netif, struct pbuf *p);\nstatic err_t netif_input_func (struct pbuf *p, struct netif *inp);\nstatic void client_logfunc (struct tcp_client *client);\nstatic void client_log (struct tcp_client *client, int level, const char *fmt, ...);\nstatic err_t listener_accept_func (void *arg, struct tcp_pcb *newpcb, err_t err);\nstatic void client_handle_freed_client (struct tcp_client *client);\nstatic void client_free_client (struct tcp_client *client);\nstatic void client_abort_client (struct tcp_client *client);\nstatic void client_free_socks (struct tcp_client *client);\nstatic void client_murder (struct tcp_client *client);\nstatic void client_dealloc (struct tcp_client *client);\nstatic void client_err_func (void *arg, err_t err);\nstatic err_t client_recv_func (void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err);\nstatic void client_socks_handler (struct tcp_client *client, int event);\nstatic void client_send_to_socks (struct tcp_client *client);\nstatic void client_socks_send_handler_done (struct tcp_client *client, int data_len);\nstatic void client_socks_recv_initiate (struct tcp_client *client);\nstatic void client_socks_recv_handler_done (struct tcp_client *client, int data_len);\nstatic int client_socks_recv_send_out (struct tcp_client *client);\nstatic err_t client_sent_func (void *arg, struct tcp_pcb *tpcb, u16_t len);\nstatic void udpgw_client_handler_received (void *unused, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len);\n\nint tun2socks_main (int argc, char **argv, int fd, int mtu)\n{\n    if (argc <= 0) {\n        return 1;\n    }\n    \n    // open standard streams\n    open_standard_streams();\n    \n    // parse command-line arguments\n    if (!parse_arguments(argc, argv)) {\n        fprintf(stderr, \"Failed to parse arguments\\n\");\n        print_help(argv[0]);\n        goto fail0;\n    }\n    \n    options.fd = fd;\n    options.mtu = mtu;\n    // handle --help and --version\n    if (options.help) {\n        print_version();\n        print_help(argv[0]);\n        return 0;\n    }\n    if (options.version) {\n        print_version();\n        return 0;\n    }\n    \n    // initialize logger\n    switch (options.logger) {\n        case LOGGER_STDOUT:\n            BLog_InitStdout();\n            break;\n        #ifndef BADVPN_USE_WINAPI\n        case LOGGER_SYSLOG:\n            if (!BLog_InitSyslog(options.logger_syslog_ident, options.logger_syslog_facility)) {\n                fprintf(stderr, \"Failed to initialize syslog logger\\n\");\n                goto fail0;\n            }\n            break;\n        #endif\n        default:\n            ASSERT(0);\n    }\n    \n    // configure logger channels\n    for (int i = 0; i < BLOG_NUM_CHANNELS; i++) {\n        if (options.loglevels[i] >= 0) {\n            BLog_SetChannelLoglevel(i, options.loglevels[i]);\n        }\n        else if (options.loglevel >= 0) {\n            BLog_SetChannelLoglevel(i, options.loglevel);\n        }\n    }\n    \n    BLog(BLOG_NOTICE, \"initializing \"GLOBAL_PRODUCT_NAME\" \"PROGRAM_NAME\" \"GLOBAL_VERSION);\n    \n    // clear password contents pointer\n    password_file_contents = NULL;\n    \n    // initialize network\n    if (!BNetwork_GlobalInit()) {\n        BLog(BLOG_ERROR, \"BNetwork_GlobalInit failed\");\n        goto fail1;\n    }\n    \n    // process arguments\n    if (!process_arguments()) {\n        BLog(BLOG_ERROR, \"Failed to process arguments\");\n        goto fail1;\n    }\n    \n    // init time\n    BTime_Init();\n    \n    // init reactor\n    if (!BReactor_Init(&ss)) {\n        BLog(BLOG_ERROR, \"BReactor_Init failed\");\n        goto fail1;\n    }\n    \n    // set not quitting\n    quitting = 0;\n    \n//    // setup signal handler\n//    if (!BSignal_Init(&ss, signal_handler, NULL)) {\n//        BLog(BLOG_ERROR, \"BSignal_Init failed\");\n//        goto fail2;\n//    }\n    \n    struct BTap_init_data init_data;\n    init_data.dev_type = BTAP_DEV_TUN ;\n    init_data.init_type = BTAP_INIT_FD;\n    init_data.init.fd.fd = fd;\n    init_data.init.fd.mtu = mtu;\n    \n    if (!BTap_Init2(&device, &ss, init_data, device_error_handler, NULL)) {\n    // init TUN device\n//    if (!BTap_Init(&device, &ss, options.fd, options.mtu, device_error_handler, NULL, 1)) {\n        BLog(BLOG_ERROR, \"BTap_Init failed\");\n        goto fail2;\n    }\n    \n    // NOTE: the order of the following is important:\n    // first device writing must evaluate,\n    // then lwip (so it can send packets to the device),\n    // then device reading (so it can pass received packets to lwip).\n    \n    // init device reading\n    PacketPassInterface_Init(&device_read_interface, BTap_GetMTU(&device), device_read_handler_send, NULL, BReactor_PendingGroup(&ss));\n    if (!SinglePacketBuffer_Init(&device_read_buffer, BTap_GetOutput(&device), &device_read_interface, BReactor_PendingGroup(&ss))) {\n        BLog(BLOG_ERROR, \"SinglePacketBuffer_Init failed\");\n        goto fail4;\n    }\n    \n    if (options.udpgw_remote_server_addr) {\n        // compute maximum UDP payload size we need to pass through udpgw\n        udp_mtu = BTap_GetMTU(&device) - (int)(sizeof(struct ipv4_header) + sizeof(struct udp_header));\n        if (options.netif_ip6addr) {\n            int udp_ip6_mtu = BTap_GetMTU(&device) - (int)(sizeof(struct ipv6_header) + sizeof(struct udp_header));\n            if (udp_mtu < udp_ip6_mtu) {\n                udp_mtu = udp_ip6_mtu;\n            }\n        }\n        if (udp_mtu < 0) {\n            udp_mtu = 0;\n        }\n        \n        // make sure our UDP payloads aren't too large for udpgw\n        int udpgw_mtu = udpgw_compute_mtu(udp_mtu);\n        if (udpgw_mtu < 0 || udpgw_mtu > PACKETPROTO_MAXPAYLOAD) {\n            BLog(BLOG_ERROR, \"device MTU is too large for UDP\");\n            goto fail4a;\n        }\n        \n        // init udpgw client\n        if (!SocksUdpGwClient_Init(&udpgw_client, udp_mtu, DEFAULT_UDPGW_MAX_CONNECTIONS, options.udpgw_connection_buffer_size, UDPGW_KEEPALIVE_TIME, socks_server_addr, socks_auth_info, socks_num_auth_info, udpgw_remote_server_addr, UDPGW_RECONNECT_TIME, &ss, NULL, udpgw_client_handler_received)) {\n            BLog(BLOG_ERROR, \"SocksUdpGwClient_Init failed\");\n            goto fail4a;\n        }\n    }\n    \n    // init lwip init job\n    BPending_Init(&lwip_init_job, BReactor_PendingGroup(&ss), lwip_init_job_hadler, NULL);\n    BPending_Set(&lwip_init_job);\n    \n    // init device write buffer\n    if (!(device_write_buf = (uint8_t *)BAlloc(BTap_GetMTU(&device)))) {\n        BLog(BLOG_ERROR, \"BAlloc failed\");\n        goto fail5;\n    }\n    \n    // init TCP timer\n    // it won't trigger before lwip is initialized, becuase the lwip init is a job\n    BTimer_Init(&tcp_timer, TCP_TMR_INTERVAL, tcp_timer_handler, NULL);\n    BReactor_SetTimer(&ss, &tcp_timer);\n    \n    // set no netif\n    have_netif = 0;\n    \n    // set no listener\n    listener = NULL;\n    listener_ip6 = NULL;\n    \n    // init clients list\n    LinkedList1_Init(&tcp_clients);\n    \n    // init number of clients\n    num_clients = 0;\n    \n    // enter event loop\n    BLog(BLOG_NOTICE, \"entering event loop\");\n    BReactor_Exec(&ss);\n    \n    // free clients\n    LinkedList1Node *node;\n    while ((node = LinkedList1_GetFirst(&tcp_clients)) != NULL) {\n        struct tcp_client *client = UPPER_OBJECT(node, struct tcp_client, list_node);\n        client_murder(client);\n    }\n    \n    // free listener\n    if (listener_ip6) {\n        tcp_close(listener_ip6);\n    }\n    if (listener) {\n        tcp_close(listener);\n    }\n    \n    // free netif\n    if (have_netif) {\n        netif_remove(&the_netif);\n    }\n    \n    BReactor_RemoveTimer(&ss, &tcp_timer);\n    BFree(device_write_buf);\nfail5:\n    BPending_Free(&lwip_init_job);\n    if (options.udpgw_remote_server_addr) {\n        SocksUdpGwClient_Free(&udpgw_client);\n    }\nfail4a:\n    SinglePacketBuffer_Free(&device_read_buffer);\nfail4:\n    PacketPassInterface_Free(&device_read_interface);\n    BTap_Free(&device);\n//fail3:\n//    BSignal_Finish();\nfail2:\n    BReactor_Free(&ss);\nfail1:\n    BFree(password_file_contents);\n    BLog(BLOG_NOTICE, \"exiting\");\n    BLog_Free();\nfail0:\n    DebugObjectGlobal_Finish();\n    \n    return 1;\n}\n\nvoid stop_tun2socks() {\n    terminate();\n}\n\nvoid terminate (void)\n{\n    ASSERT(!quitting)\n    \n    BLog(BLOG_NOTICE, \"tearing down\");\n    \n    // set quitting\n    quitting = 1;\n    \n    // exit event loop\n    BReactor_Quit(&ss, 1);\n}\n\nvoid print_help (const char *name)\n{\n    printf(\n        \"Usage:\\n\"\n        \"    %s\\n\"\n        \"        [--help]\\n\"\n        \"        [--version]\\n\"\n        \"        [--logger <\"LOGGERS_STRING\">]\\n\"\n        #ifndef BADVPN_USE_WINAPI\n        \"        (logger=syslog?\\n\"\n        \"            [--syslog-facility <string>]\\n\"\n        \"            [--syslog-ident <string>]\\n\"\n        \"        )\\n\"\n        #endif\n        \"        [--loglevel <0-5/none/error/warning/notice/info/debug>]\\n\"\n        \"        [--channel-loglevel <channel-name> <0-5/none/error/warning/notice/info/debug>] ...\\n\"\n        \"        [--tundev <name>]\\n\"\n        \"        --netif-ipaddr <ipaddr>\\n\"\n        \"        --netif-netmask <ipnetmask>\\n\"\n        \"        --socks-server-addr <addr>\\n\"\n        \"        [--netif-ip6addr <addr>]\\n\"\n        \"        [--username <username>]\\n\"\n        \"        [--password <password>]\\n\"\n        \"        [--password-file <file>]\\n\"\n        \"        [--append-source-to-username]\\n\"\n#ifdef BADVPN_SOCKS_UDP_RELAY\n        \"        [--enable-udprelay]\\n\"\n        \"        [--udprelay-max-connections <number>]\\n\"\n#else\n        \"        [--udpgw-remote-server-addr <addr>]\\n\"\n        \"        [--udpgw-max-connections <number>]\\n\"\n        \"        [--udpgw-connection-buffer-size <number>]\\n\"\n        \"        [--udpgw-transparent-dns]\\n\"\n#endif\n        \"Address format is a.b.c.d:port (IPv4) or [addr]:port (IPv6).\\n\",\n        name\n    );\n}\n\nvoid print_version (void)\n{\n    printf(GLOBAL_PRODUCT_NAME\" \"PROGRAM_NAME\" \"GLOBAL_VERSION\"\\n\"GLOBAL_COPYRIGHT_NOTICE\"\\n\");\n}\n\nint parse_arguments (int argc, char *argv[])\n{\n    if (argc <= 0) {\n        return 0;\n    }\n    \n    options.help = 0;\n    options.version = 0;\n    options.logger = LOGGER_STDOUT;\n    #ifndef BADVPN_USE_WINAPI\n    options.logger_syslog_facility = \"daemon\";\n    options.logger_syslog_ident = argv[0];\n    #endif\n    options.loglevel = -1;\n    for (int i = 0; i < BLOG_NUM_CHANNELS; i++) {\n        options.loglevels[i] = -1;\n    }\n    options.fd = 0;\n    options.mtu = 4096;\n    options.netif_ipaddr = NULL;\n    options.netif_netmask = NULL;\n    options.netif_ip6addr = NULL;\n    options.socks_server_addr = NULL;\n    options.username = NULL;\n    options.password = NULL;\n    options.password_file = NULL;\n    options.append_source_to_username = 0;\n    options.udpgw_remote_server_addr = NULL;\n    options.udpgw_max_connections = DEFAULT_UDPGW_MAX_CONNECTIONS;\n    options.udpgw_connection_buffer_size = DEFAULT_UDPGW_CONNECTION_BUFFER_SIZE;\n    options.udpgw_transparent_dns = 0;\n    \n    int i;\n    for (i = 1; i < argc; i++) {\n        char *arg = argv[i];\n        if (!strcmp(arg, \"--help\")) {\n            options.help = 1;\n        }\n        else if (!strcmp(arg, \"--version\")) {\n            options.version = 1;\n        }\n        else if (!strcmp(arg, \"--logger\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            char *arg2 = argv[i + 1];\n            if (!strcmp(arg2, \"stdout\")) {\n                options.logger = LOGGER_STDOUT;\n            }\n            #ifndef BADVPN_USE_WINAPI\n            else if (!strcmp(arg2, \"syslog\")) {\n                options.logger = LOGGER_SYSLOG;\n            }\n            #endif\n            else {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        #ifndef BADVPN_USE_WINAPI\n        else if (!strcmp(arg, \"--syslog-facility\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.logger_syslog_facility = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--syslog-ident\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.logger_syslog_ident = argv[i + 1];\n            i++;\n        }\n        #endif\n        else if (!strcmp(arg, \"--loglevel\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((options.loglevel = parse_loglevel(argv[i + 1])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--channel-loglevel\")) {\n            if (2 >= argc - i) {\n                fprintf(stderr, \"%s: requires two arguments\\n\", arg);\n                return 0;\n            }\n            int channel = BLogGlobal_GetChannelByName(argv[i + 1]);\n            if (channel < 0) {\n                fprintf(stderr, \"%s: wrong channel argument\\n\", arg);\n                return 0;\n            }\n            int loglevel = parse_loglevel(argv[i + 2]);\n            if (loglevel < 0) {\n                fprintf(stderr, \"%s: wrong loglevel argument\\n\", arg);\n                return 0;\n            }\n            options.loglevels[channel] = loglevel;\n            i += 2;\n        }\n        else if (!strcmp(arg, \"--netif-ipaddr\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.netif_ipaddr = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--netif-netmask\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.netif_netmask = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--netif-ip6addr\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.netif_ip6addr = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--socks-server-addr\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.socks_server_addr = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--username\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.username = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--password\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.password = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--password-file\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.password_file = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--append-source-to-username\")) {\n            options.append_source_to_username = 1;\n        }\n#ifdef BADVPN_SOCKS_UDP_RELAY\n        else if (!strcmp(arg, \"--udpgw-remote-server-addr\")) {\n//            options.udpgw_remote_server_addr = \"0.0.0.0:0\";\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.udpgw_remote_server_addr = argv[i + 1];\n            i++;\n#else\n        else if (!strcmp(arg, \"--udpgw-remote-server-addr\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            options.udpgw_remote_server_addr = argv[i + 1];\n            i++;\n#endif\n        }\n#ifdef BADVPN_SOCKS_UDP_RELAY\n        else if (!strcmp(arg, \"--udprelay-max-connections\")) {\n#else\n        else if (!strcmp(arg, \"--udpgw-max-connections\")) {\n#endif\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((options.udpgw_max_connections = atoi(argv[i + 1])) <= 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n#ifndef BADVPN_SOCKS_UDP_RELAY\n        else if (!strcmp(arg, \"--udpgw-connection-buffer-size\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((options.udpgw_connection_buffer_size = atoi(argv[i + 1])) <= 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--udpgw-transparent-dns\")) {\n            options.udpgw_transparent_dns = 1;\n        }\n#endif\n        else {\n            fprintf(stderr, \"unknown option: %s\\n\", arg);\n            return 0;\n        }\n    }\n    \n    if (options.help || options.version) {\n        return 1;\n    }\n    \n    if (!options.netif_ipaddr) {\n        fprintf(stderr, \"--netif-ipaddr is required\\n\");\n        return 0;\n    }\n    \n    if (!options.netif_netmask) {\n        fprintf(stderr, \"--netif-netmask is required\\n\");\n        return 0;\n    }\n    \n    if (!options.socks_server_addr) {\n        fprintf(stderr, \"--socks-server-addr is required\\n\");\n        return 0;\n    }\n    \n    if (options.username) {\n        if (!options.password && !options.password_file) {\n            fprintf(stderr, \"username given but password not given\\n\");\n            return 0;\n        }\n        \n        if (options.password && options.password_file) {\n            fprintf(stderr, \"--password and --password-file cannot both be given\\n\");\n            return 0;\n        }\n    }\n    \n    return 1;\n}\n\nint process_arguments (void)\n{\n    ASSERT(!password_file_contents)\n    \n    // resolve netif ipaddr\n    if (!BIPAddr_Resolve(&netif_ipaddr, options.netif_ipaddr, 0)) {\n        BLog(BLOG_ERROR, \"netif ipaddr: BIPAddr_Resolve failed\");\n        return 0;\n    }\n    if (netif_ipaddr.type != BADDR_TYPE_IPV4) {\n        BLog(BLOG_ERROR, \"netif ipaddr: must be an IPv4 address\");\n        return 0;\n    }\n    \n    // resolve netif netmask\n    if (!BIPAddr_Resolve(&netif_netmask, options.netif_netmask, 0)) {\n        BLog(BLOG_ERROR, \"netif netmask: BIPAddr_Resolve failed\");\n        return 0;\n    }\n    if (netif_netmask.type != BADDR_TYPE_IPV4) {\n        BLog(BLOG_ERROR, \"netif netmask: must be an IPv4 address\");\n        return 0;\n    }\n    \n    // parse IP6 address\n    if (options.netif_ip6addr) {\n        if (!ipaddr6_parse_ipv6_addr(MemRef_MakeCstr(options.netif_ip6addr), &netif_ip6addr)) {\n            BLog(BLOG_ERROR, \"netif ip6addr: incorrect\");\n            return 0;\n        }\n    }\n    \n    // resolve SOCKS server address\n    if (!BAddr_Parse2(&socks_server_addr, options.socks_server_addr, NULL, 0, 0)) {\n        BLog(BLOG_ERROR, \"socks server addr: BAddr_Parse2 failed\");\n        return 0;\n    }\n    \n    // add none socks authentication method\n    socks_auth_info[0] = BSocksClient_auth_none();\n    socks_num_auth_info = 1;\n    \n    // add password socks authentication method\n    if (options.username) {\n        const char *password;\n        size_t password_len;\n        if (options.password) {\n            password = options.password;\n            password_len = strlen(options.password);\n        } else {\n            if (!read_file(options.password_file, &password_file_contents, &password_len)) {\n                BLog(BLOG_ERROR, \"failed to read password file\");\n                return 0;\n            }\n            password = (char *)password_file_contents;\n        }\n        \n        socks_auth_info[socks_num_auth_info++] = BSocksClient_auth_password(\n            options.username, strlen(options.username),\n            password, password_len\n        );\n    }\n    \n    // resolve remote udpgw server address\n    if (options.udpgw_remote_server_addr) {\n        if (!BAddr_Parse2(&udpgw_remote_server_addr, options.udpgw_remote_server_addr, NULL, 0, 0)) {\n#ifdef BADVPN_SOCKS_UDP_RELAY\n            BLog(BLOG_ERROR, \"udprelay server addr: BAddr_Parse2 failed\");\n#else\n            BLog(BLOG_ERROR, \"remote udpgw server addr: BAddr_Parse2 failed\");\n#endif\n            return 0;\n        }\n    }\n    \n    return 1;\n}\n\nvoid signal_handler (void *unused)\n{\n    ASSERT(!quitting)\n    \n    BLog(BLOG_NOTICE, \"termination requested\");\n    \n    terminate();\n}\n\nBAddr baddr_from_lwip (int is_ipv6, const ipX_addr_t *ipx_addr, uint16_t port_hostorder)\n{\n    BAddr addr;\n//    if (is_ipv6) {\n//        BAddr_InitIPv6(&addr, (uint8_t *)ipx_addr->ip6.addr, hton16(port_hostorder));\n//    } else {\n        BAddr_InitIPv4(&addr, ipx_addr->addr, hton16(port_hostorder));\n//    }\n    return addr;\n}\n\nvoid lwip_init_job_hadler (void *unused)\n{\n    ASSERT(!quitting)\n    ASSERT(netif_ipaddr.type == BADDR_TYPE_IPV4)\n    ASSERT(netif_netmask.type == BADDR_TYPE_IPV4)\n    ASSERT(!have_netif)\n    ASSERT(!listener)\n    ASSERT(!listener_ip6)\n    \n    BLog(BLOG_DEBUG, \"lwip init\");\n    \n    // NOTE: the device may fail during this, but there's no harm in not checking\n    // for that at every step\n    \n    // init lwip\n    lwip_init();\n    \n    // make addresses for netif\n    ip_addr_t addr;\n    addr.addr = netif_ipaddr.ipv4;\n    ip_addr_t netmask;\n    netmask.addr = netif_netmask.ipv4;\n    ip_addr_t gw;\n    ip_addr_set_any(&gw);\n    \n    // init netif\n    if (!netif_add(&the_netif, &addr, &netmask, &gw, NULL, netif_init_func, netif_input_func)) {\n        BLog(BLOG_ERROR, \"netif_add failed\");\n        goto fail;\n    }\n    have_netif = 1;\n    \n    // set netif up\n    netif_set_up(&the_netif);\n    \n    // set netif pretend TCP\n    netif_set_pretend_tcp(&the_netif, 1);\n    \n    // set netif default\n    netif_set_default(&the_netif);\n    \n//    if (options.netif_ip6addr) {\n//        // add IPv6 address\n//        memcpy(netif_ip6_addr(&the_netif, 0), netif_ip6addr.bytes, sizeof(netif_ip6addr.bytes));\n//        netif_ip6_addr_set_state(&the_netif, 0, IP6_ADDR_VALID);\n//    }\n    \n    // init listener\n    struct tcp_pcb *l = tcp_new();\n    if (!l) {\n        BLog(BLOG_ERROR, \"tcp_new failed\");\n        goto fail;\n    }\n    \n    // bind listener\n    if (tcp_bind_to_netif(l, \"ho0\") != ERR_OK) {\n        BLog(BLOG_ERROR, \"tcp_bind_to_netif failed\");\n        tcp_close(l);\n        goto fail;\n    }\n    \n    // listen listener\n    if (!(listener = tcp_listen(l))) {\n        BLog(BLOG_ERROR, \"tcp_listen failed\");\n        tcp_close(l);\n        goto fail;\n    }\n    \n    // setup listener accept handler\n    tcp_accept(listener, listener_accept_func);\n    \n//    if (options.netif_ip6addr) {\n//        struct tcp_pcb *l_ip6 = tcp_new_ip6();\n//        if (!l_ip6) {\n//            BLog(BLOG_ERROR, \"tcp_new_ip6 failed\");\n//            goto fail;\n//        }\n//        \n//        if (tcp_bind_to_netif(l_ip6, \"ho0\") != ERR_OK) {\n//            BLog(BLOG_ERROR, \"tcp_bind_to_netif failed\");\n//            tcp_close(l_ip6);\n//            goto fail;\n//        }\n//        \n//        if (!(listener_ip6 = tcp_listen(l_ip6))) {\n//            BLog(BLOG_ERROR, \"tcp_listen failed\");\n//            tcp_close(l_ip6);\n//            goto fail;\n//        }\n//        \n//        tcp_accept(listener_ip6, listener_accept_func);\n//    }\n    \n    return;\n    \nfail:\n    if (!quitting) {\n        terminate();\n    }\n}\n\nvoid tcp_timer_handler (void *unused)\n{\n    ASSERT(!quitting)\n    \n//    BLog(BLOG_DEBUG, \"TCP timer\");\n    \n    // schedule next timer\n    // TODO: calculate timeout so we don't drift\n    BReactor_SetTimer(&ss, &tcp_timer);\n    \n    tcp_tmr();\n    return;\n}\n\nvoid device_error_handler (void *unused)\n{\n    ASSERT(!quitting)\n    \n    BLog(BLOG_ERROR, \"device error\");\n    \n    terminate();\n    return;\n}\n\nvoid device_read_handler_send (void *unused, uint8_t *data, int data_len)\n{\n    ASSERT(!quitting)\n    ASSERT(data_len >= 0)\n    \n    BLog(BLOG_DEBUG, \"device: received packet\");\n    \n    // accept packet\n    PacketPassInterface_Done(&device_read_interface);\n    \n    // process UDP directly\n    if (process_device_udp_packet(data, data_len)) {\n        return;\n    }\n    \n    // obtain pbuf\n    if (data_len > UINT16_MAX) {\n        BLog(BLOG_WARNING, \"device read: packet too large\");\n        return;\n    }\n    struct pbuf *p = pbuf_alloc(PBUF_RAW, data_len, PBUF_POOL);\n    if (!p) {\n        BLog(BLOG_WARNING, \"device read: pbuf_alloc failed\");\n        return;\n    }\n    \n    // write packet to pbuf\n    ASSERT_FORCE(pbuf_take(p, data, data_len) == ERR_OK)\n    \n    // pass pbuf to input\n    if (the_netif.input(p, &the_netif) != ERR_OK) {\n        BLog(BLOG_WARNING, \"device read: input failed\");\n        pbuf_free(p);\n    }\n}\n\nint process_device_udp_packet (uint8_t *data, int data_len)\n{\n    ASSERT(data_len >= 0)\n    \n    // do nothing if we don't have udpgw\n//    if (!options.udpgw_remote_server_addr) {\n//        goto fail;\n//    }\n    \n    BAddr local_addr;\n    BAddr remote_addr;\n    int is_dns = 0;\n    \n    uint8_t ip_version = 0;\n    if (data_len > 0) {\n        ip_version = (data[0] >> 4);\n    }\n    \n    switch (ip_version) {\n        case 4: {\n            // ignore non-UDP packets\n            if (data_len < sizeof(struct ipv4_header) || data[offsetof(struct ipv4_header, protocol)] != IPV4_PROTOCOL_UDP) {\n                goto fail;\n            }\n            \n            // parse IPv4 header\n            struct ipv4_header ipv4_header;\n            if (!ipv4_check(data, data_len, &ipv4_header, &data, &data_len)) {\n                goto fail;\n            }\n            \n            // parse UDP\n            struct udp_header udp_header;\n            if (!udp_check(data, data_len, &udp_header, &data, &data_len)) {\n                goto fail;\n            }\n            \n            // verify UDP checksum\n            uint16_t checksum_in_packet = udp_header.checksum;\n            udp_header.checksum = 0;\n            uint16_t checksum_computed = udp_checksum(&udp_header, data, data_len, ipv4_header.source_address, ipv4_header.destination_address);\n            if (checksum_in_packet != checksum_computed) {\n                goto fail;\n            }\n            \n            BLog(BLOG_INFO, \"UDP: from device %d bytes\", data_len);\n            \n            // construct addresses\n            BAddr_InitIPv4(&local_addr, ipv4_header.source_address, udp_header.source_port);\n            BAddr_InitIPv4(&remote_addr, ipv4_header.destination_address, udp_header.dest_port);\n            \n            // if transparent DNS is enabled, any packet arriving at out netif\n            // address to port 53 is considered a DNS packet\n//            is_dns = (options.udpgw_transparent_dns &&\n//                      ipv4_header.destination_address == netif_ipaddr.ipv4 &&\n//                      udp_header.dest_port == hton16(53));\n//            is_dns = 0;\n        } break;\n        \n        case 6: {\n            // ignore if IPv6 support is disabled\n            if (!options.netif_ip6addr) {\n                goto fail;\n            }\n            \n            // ignore non-UDP packets\n            if (data_len < sizeof(struct ipv6_header) || data[offsetof(struct ipv6_header, next_header)] != IPV6_NEXT_UDP) {\n                goto fail;\n            }\n            \n            // parse IPv6 header\n            struct ipv6_header ipv6_header;\n            if (!ipv6_check(data, data_len, &ipv6_header, &data, &data_len)) {\n                goto fail;\n            }\n            \n            // parse UDP\n            struct udp_header udp_header;\n            if (!udp_check(data, data_len, &udp_header, &data, &data_len)) {\n                goto fail;\n            }\n            \n            // verify UDP checksum\n            uint16_t checksum_in_packet = udp_header.checksum;\n            udp_header.checksum = 0;\n            uint16_t checksum_computed = udp_ip6_checksum(&udp_header, data, data_len, ipv6_header.source_address, ipv6_header.destination_address);\n            if (checksum_in_packet != checksum_computed) {\n                goto fail;\n            }\n            \n            BLog(BLOG_INFO, \"UDP/IPv6: from device %d bytes\", data_len);\n            \n            // construct addresses\n            BAddr_InitIPv6(&local_addr, ipv6_header.source_address, udp_header.source_port);\n            BAddr_InitIPv6(&remote_addr, ipv6_header.destination_address, udp_header.dest_port);\n            \n            // TODO dns\n            is_dns = 0;\n        } break;\n        \n        default: {\n            goto fail;\n        } break;\n    }\n    \n    // check payload length\n    if (data_len > udp_mtu) {\n#ifdef BADVPN_SOCKS_UDP_RELAY\n        BLog(BLOG_ERROR, \"packet is too large, cannot send to udprelay\");\n#else\n        BLog(BLOG_ERROR, \"packet is too large, cannot send to udpgw\");\n#endif\n        goto fail;\n    }\n    \n    // submit packet to udpgw\n    SocksUdpGwClient_SubmitPacket(&udpgw_client, local_addr, remote_addr, is_dns, data, data_len);\n    \n    return 1;\n    \nfail:\n    return 0;\n}\n\nerr_t netif_init_func (struct netif *netif)\n{\n    BLog(BLOG_DEBUG, \"netif func init\");\n    \n    netif->name[0] = 'h';\n    netif->name[1] = 'o';\n    netif->output = netif_output_func;\n//    netif->output_ip6 = netif_output_ip6_func;\n    netif->mtu = options.mtu;\n    \n    return ERR_OK;\n}\n\nerr_t netif_output_func (struct netif *netif, struct pbuf *p, ip_addr_t *ipaddr)\n{\n    return common_netif_output(netif, p);\n}\n\n//err_t netif_output_ip6_func (struct netif *netif, struct pbuf *p, ip6_addr_t *ipaddr)\n//{\n//    return common_netif_output(netif, p);\n//}\n\nerr_t common_netif_output (struct netif *netif, struct pbuf *p)\n{\n    SYNC_DECL\n    \n    BLog(BLOG_DEBUG, \"device write: send packet\");\n    \n    if (quitting) {\n        return ERR_OK;\n    }\n    \n    // if there is just one chunk, send it directly, else via buffer\n    if (!p->next) {\n        if (p->len > BTap_GetMTU(&device)) {\n            BLog(BLOG_WARNING, \"netif func output: no space left\");\n            goto out;\n        }\n        \n        SYNC_FROMHERE\n        BTap_Send(&device, (uint8_t *)p->payload, p->len);\n        SYNC_COMMIT\n    } else {\n        int len = 0;\n        do {\n            if (p->len > BTap_GetMTU(&device) - len) {\n                BLog(BLOG_WARNING, \"netif func output: no space left\");\n                goto out;\n            }\n            memcpy(device_write_buf + len, p->payload, p->len);\n            len += p->len;\n        } while ((p = p->next) != NULL);\n        \n        SYNC_FROMHERE\n        BTap_Send(&device, device_write_buf, len);\n        SYNC_COMMIT\n    }\n    \nout:\n    return ERR_OK;\n}\n\nerr_t netif_input_func (struct pbuf *p, struct netif *inp)\n{\n    uint8_t ip_version = 0;\n    if (p->len > 0) {\n        ip_version = (((uint8_t *)p->payload)[0] >> 4);\n    }\n    \n    switch (ip_version) {\n        case 4: {\n            return ip_input(p, inp);\n        } break;\n        case 6: {\n//            if (options.netif_ip6addr) {\n//                return ip6_input(p, inp);\n//            }\n        } break;\n    }\n    \n    pbuf_free(p);\n    return ERR_OK;\n}\n\nvoid client_logfunc (struct tcp_client *client)\n{\n    char local_addr_s[BADDR_MAX_PRINT_LEN];\n    BAddr_Print(&client->local_addr, local_addr_s);\n    char remote_addr_s[BADDR_MAX_PRINT_LEN];\n    BAddr_Print(&client->remote_addr, remote_addr_s);\n    \n    BLog_Append(\"%05d (%s %s): \", num_clients, local_addr_s, remote_addr_s);\n}\n\nvoid client_log (struct tcp_client *client, int level, const char *fmt, ...)\n{\n    va_list vl;\n    va_start(vl, fmt);\n    BLog_LogViaFuncVarArg((BLog_logfunc)client_logfunc, client, BLOG_CURRENT_CHANNEL, level, fmt, vl);\n    va_end(vl);\n}\n\nerr_t listener_accept_func (void *arg, struct tcp_pcb *newpcb, err_t err)\n{\n    ASSERT(err == ERR_OK)\n    \n    // signal accepted\n    struct tcp_pcb *this_listener = (PCB_ISIPV6(newpcb) ? listener_ip6 : listener);\n    tcp_accepted(this_listener);\n    \n    // allocate client structure\n    struct tcp_client *client = (struct tcp_client *)malloc(sizeof(*client));\n    if (!client) {\n        BLog(BLOG_ERROR, \"listener accept: malloc failed\");\n        goto fail0;\n    }\n    client->socks_username = NULL;\n    \n    SYNC_DECL\n    SYNC_FROMHERE\n    \n    // read addresses\n    client->local_addr = baddr_from_lwip(PCB_ISIPV6(newpcb), &newpcb->local_ip, newpcb->local_port);\n    client->remote_addr = baddr_from_lwip(PCB_ISIPV6(newpcb), &newpcb->remote_ip, newpcb->remote_port);\n    \n    // get destination address\n    BAddr addr = client->local_addr;\n#ifdef OVERRIDE_DEST_ADDR\n    ASSERT_FORCE(BAddr_Parse2(&addr, OVERRIDE_DEST_ADDR, NULL, 0, 1))\n#endif\n    \n    // add source address to username if requested\n    if (options.username && options.append_source_to_username) {\n        char addr_str[BADDR_MAX_PRINT_LEN];\n        BAddr_Print(&client->remote_addr, addr_str);\n        client->socks_username = concat_strings(3, options.username, \"@\", addr_str);\n        if (!client->socks_username) {\n            goto fail1;\n        }\n        socks_auth_info[1].password.username = client->socks_username;\n        socks_auth_info[1].password.username_len = strlen(client->socks_username);\n    }\n    \n    // init SOCKS\n    if (!BSocksClient_Init(&client->socks_client, socks_server_addr, socks_auth_info, socks_num_auth_info,\n                           addr, (BSocksClient_handler)client_socks_handler, client, &ss)) {\n        BLog(BLOG_ERROR, \"listener accept: BSocksClient_Init failed\");\n        goto fail1;\n    }\n    \n    // init dead vars\n    DEAD_INIT(client->dead);\n    DEAD_INIT(client->dead_client);\n    \n    // add to linked list\n    LinkedList1_Append(&tcp_clients, &client->list_node);\n    \n    // increment counter\n    ASSERT(num_clients >= 0)\n    num_clients++;\n    \n    // set pcb\n    client->pcb = newpcb;\n    \n    // set client not closed\n    client->client_closed = 0;\n    \n    // setup handler argument\n    tcp_arg(client->pcb, client);\n    \n    // setup handlers\n    tcp_err(client->pcb, client_err_func);\n    tcp_recv(client->pcb, client_recv_func);\n    \n    // setup buffer\n    client->buf_used = 0;\n    \n    // set SOCKS not up, not closed\n    client->socks_up = 0;\n    client->socks_closed = 0;\n    \n    client_log(client, BLOG_INFO, \"accepted\");\n    \n    DEAD_ENTER(client->dead_client)\n    SYNC_COMMIT\n    DEAD_LEAVE2(client->dead_client)\n    if (DEAD_KILLED) {\n        return ERR_ABRT;\n    }\n    \n    return ERR_OK;\n    \nfail1:\n    SYNC_BREAK\n    free(client->socks_username);\n    free(client);\nfail0:\n    return ERR_MEM;\n}\n\nvoid client_handle_freed_client (struct tcp_client *client)\n{\n    ASSERT(!client->client_closed)\n    \n    // pcb was taken care of by the caller\n    \n    // kill client dead var\n    DEAD_KILL(client->dead_client);\n    \n    // set client closed\n    client->client_closed = 1;\n    \n    // if we have data to be sent to SOCKS and can send it, keep sending\n    if (client->buf_used > 0 && !client->socks_closed) {\n        client_log(client, BLOG_INFO, \"waiting untill buffered data is sent to SOCKS\");\n    } else {\n        if (!client->socks_closed) {\n            client_free_socks(client);\n        } else {\n            client_dealloc(client);\n        }\n    }\n}\n\nvoid client_free_client (struct tcp_client *client)\n{\n    ASSERT(!client->client_closed)\n    \n    // remove callbacks\n    tcp_err(client->pcb, NULL);\n    tcp_recv(client->pcb, NULL);\n    tcp_sent(client->pcb, NULL);\n    \n    // free pcb\n    err_t err = tcp_close(client->pcb);\n    if (err != ERR_OK) {\n        client_log(client, BLOG_ERROR, \"tcp_close failed (%d)\", err);\n        tcp_abort(client->pcb);\n    }\n    \n    client_handle_freed_client(client);\n}\n\nvoid client_abort_client (struct tcp_client *client)\n{\n    ASSERT(!client->client_closed)\n    \n    // remove callbacks\n    tcp_err(client->pcb, NULL);\n    tcp_recv(client->pcb, NULL);\n    tcp_sent(client->pcb, NULL);\n    \n    // free pcb\n    tcp_abort(client->pcb);\n    \n    client_handle_freed_client(client);\n}\n\nvoid client_free_socks (struct tcp_client *client)\n{\n    ASSERT(!client->socks_closed)\n    \n    // stop sending to SOCKS\n    if (client->socks_up) {\n        // stop receiving from client\n        if (!client->client_closed) {\n            tcp_recv(client->pcb, NULL);\n        }\n    }\n    \n    // free SOCKS\n    BSocksClient_Free(&client->socks_client);\n    \n    // set SOCKS closed\n    client->socks_closed = 1;\n    \n    // if we have data to be sent to the client and we can send it, keep sending\n    if (client->socks_up && (client->socks_recv_buf_used >= 0 || client->socks_recv_tcp_pending > 0) && !client->client_closed) {\n        client_log(client, BLOG_INFO, \"waiting until buffered data is sent to client\");\n    } else {\n        if (!client->client_closed) {\n            client_free_client(client);\n        } else {\n            client_dealloc(client);\n        }\n    }\n}\n\nvoid client_murder (struct tcp_client *client)\n{\n    // free client\n    if (!client->client_closed) {\n        // remove callbacks\n        tcp_err(client->pcb, NULL);\n        tcp_recv(client->pcb, NULL);\n        tcp_sent(client->pcb, NULL);\n        \n        // abort\n        tcp_abort(client->pcb);\n        \n        // kill client dead var\n        DEAD_KILL(client->dead_client);\n        \n        // set client closed\n        client->client_closed = 1;\n    }\n    \n    // free SOCKS\n    if (!client->socks_closed) {\n        // free SOCKS\n        BSocksClient_Free(&client->socks_client);\n        \n        // set SOCKS closed\n        client->socks_closed = 1;\n    }\n    \n    // dealloc entry\n    client_dealloc(client);\n}\n\nvoid client_dealloc (struct tcp_client *client)\n{\n    ASSERT(client->client_closed)\n    ASSERT(client->socks_closed)\n    \n    // decrement counter\n    ASSERT(num_clients > 0)\n    num_clients--;\n    \n    // remove client entry\n    LinkedList1_Remove(&tcp_clients, &client->list_node);\n    \n    // kill dead var\n    DEAD_KILL(client->dead);\n    \n    // free memory\n    free(client->socks_username);\n    free(client);\n}\n\nvoid client_err_func (void *arg, err_t err)\n{\n    struct tcp_client *client = (struct tcp_client *)arg;\n    ASSERT(!client->client_closed)\n    \n    client_log(client, BLOG_INFO, \"client_err_func client error (%d)\", (int)err);\n    \n    // the pcb was taken care of by the caller\n    client_handle_freed_client(client);\n}\n\nerr_t client_recv_func (void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)\n{\n\n    struct tcp_client *client = (struct tcp_client *)arg;\n    client_log(client, BLOG_INFO, \"client_recv_func client received (%d)\", sizeof(client->buf));\n\n    ASSERT(!client->client_closed)\n    ASSERT(err == ERR_OK) // checked in lwIP source. Otherwise, I've no idea what should\n                          // be done with the pbuf in case of an error.\n    \n    if (!p) {\n        client_log(client, BLOG_INFO, \"client closed\");\n        client_free_client(client);\n        return ERR_ABRT;\n    }\n    \n    ASSERT(p->tot_len > 0)\n    \n    // check if we have enough buffer\n    if (p->tot_len > sizeof(client->buf) - client->buf_used) {\n        client_log(client, BLOG_ERROR, \"no buffer for data !?!\");\n        return ERR_MEM;\n    }\n    \n    // copy data to buffer\n    ASSERT_EXECUTE(pbuf_copy_partial(p, client->buf + client->buf_used, p->tot_len, 0) == p->tot_len)\n    client->buf_used += p->tot_len;\n    \n    // if there was nothing in the buffer before, and SOCKS is up, start send data\n    if (client->buf_used == p->tot_len && client->socks_up) {\n        ASSERT(!client->socks_closed) // this callback is removed when SOCKS is closed\n        \n        SYNC_DECL\n        SYNC_FROMHERE\n        client_send_to_socks(client);\n        DEAD_ENTER(client->dead_client)\n        SYNC_COMMIT\n        DEAD_LEAVE2(client->dead_client)\n        if (DEAD_KILLED) {\n            return ERR_ABRT;\n        }\n    }\n    \n    // free pbuff\n    pbuf_free(p);\n    \n    return ERR_OK;\n}\n\nvoid client_socks_handler (struct tcp_client *client, int event)\n{\n    ASSERT(!client->socks_closed)\n#if SOCKS_DATA_LOG_ENABLE\n    client_log(client, BLOG_DEBUG, \"tun2socks client_socks_handler event: %d\", event);\n#endif\n    switch (event) {\n        case BSOCKSCLIENT_EVENT_ERROR: {\n            client_log(client, BLOG_INFO, \"SOCKS error\");\n            \n            client_free_socks(client);\n        } break;\n        \n        case BSOCKSCLIENT_EVENT_UP: {\n            ASSERT(!client->socks_up)\n            \n            client_log(client, BLOG_INFO, \"tun2socks SOCKS up\");\n            \n            // init sending\n            client->socks_send_if = BSocksClient_GetSendInterface(&client->socks_client);\n            StreamPassInterface_Sender_Init(client->socks_send_if, (StreamPassInterface_handler_done)client_socks_send_handler_done, client);\n            client_log(client, BLOG_INFO, \"tun2socks SOCKS init 0\");\n            // init receiving\n            client->socks_recv_if = BSocksClient_GetRecvInterface(&client->socks_client);\n            StreamRecvInterface_Receiver_Init(client->socks_recv_if, (StreamRecvInterface_handler_done)client_socks_recv_handler_done, client);\n            client->socks_recv_buf_used = -1;\n            client->socks_recv_tcp_pending = 0;\n            client_log(client, BLOG_INFO, \"tun2socks SOCKS init 1\");\n            if (!client->client_closed) {\n                client_log(client, BLOG_INFO, \"tun2socks SOCKS init 2\");\n                tcp_sent(client->pcb, client_sent_func);\n            }\n            client_log(client, BLOG_INFO, \"tun2socks SOCKS init 3\");\n            // set up\n            client->socks_up = 1;\n            \n            // start sending data if there is any\n            if (client->buf_used > 0) {\n                client_log(client, BLOG_INFO, \"tun2socks SOCKS init 4\");\n//                client->buf_used = 0;\n                client_send_to_socks(client);\n            }\n            client_log(client, BLOG_INFO, \"tun2socks SOCKS init 5\");\n            // start receiving data if client is still up\n            if (!client->client_closed) {\n                client_log(client, BLOG_INFO, \"tun2socks SOCKS init 6\");\n                client_socks_recv_initiate(client);\n            }\n        } break;\n        \n        case BSOCKSCLIENT_EVENT_ERROR_CLOSED: {\n            ASSERT(client->socks_up)\n            \n            client_log(client, BLOG_INFO, \"SOCKS closed\");\n            \n            client_free_socks(client);\n        } break;\n        \n        default:\n            ASSERT(0);\n    }\n}\n\nvoid client_send_to_socks (struct tcp_client *client)\n{\n    ASSERT(!client->socks_closed)\n    ASSERT(client->socks_up)\n    ASSERT(client->buf_used > 0)\n    \n#if SOCKS_DATA_LOG_ENABLE\n    client_log(client, BLOG_DEBUG, \"tun2socks client_send_to_socks data<len: %d>: %@\", client->buf_used);\n#endif\n    // schedule sending\n    StreamPassInterface_Sender_Send(client->socks_send_if, client->buf, client->buf_used);\n}\n\nvoid client_socks_send_handler_done (struct tcp_client *client, int data_len)\n{\n    ASSERT(!client->socks_closed)\n    ASSERT(client->socks_up)\n    ASSERT(client->buf_used > 0)\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= client->buf_used)\n    \n    // remove sent data from buffer\n    memmove(client->buf, client->buf + data_len, client->buf_used - data_len);\n    client->buf_used -= data_len;\n    \n    if (!client->client_closed) {\n        // confirm sent data\n        tcp_recved(client->pcb, data_len);\n    }\n    \n    if (client->buf_used > 0) {\n        // send any further data\n        StreamPassInterface_Sender_Send(client->socks_send_if, client->buf, client->buf_used);\n    }\n    else if (client->client_closed) {\n        // client was closed we've sent everything we had buffered; we're done with it\n        client_log(client, BLOG_INFO, \"removing after client went down\");\n        \n        client_free_socks(client);\n    }\n}\n\nvoid client_socks_recv_initiate (struct tcp_client *client)\n{\n    ASSERT(!client->client_closed)\n    ASSERT(!client->socks_closed)\n    ASSERT(client->socks_up)\n    ASSERT(client->socks_recv_buf_used == -1)\n    \n    StreamRecvInterface_Receiver_Recv(client->socks_recv_if, client->socks_recv_buf, sizeof(client->socks_recv_buf));\n}\n\nvoid client_socks_recv_handler_done (struct tcp_client *client, int data_len)\n{\n    ASSERT(data_len > 0)\n    ASSERT(data_len <= sizeof(client->socks_recv_buf))\n    ASSERT(!client->socks_closed)\n    ASSERT(client->socks_up)\n    ASSERT(client->socks_recv_buf_used == -1)\n    \n    // if client was closed, stop receiving\n    if (client->client_closed) {\n        return;\n    }\n    \n    // set amount of data in buffer\n    client->socks_recv_buf_used = data_len;\n    client->socks_recv_buf_sent = 0;\n    client->socks_recv_waiting = 0;\n    \n    // send to client\n    client_log(client, BLOG_INFO, \"client_socks_recv_handler_done prepare send to client: %d\", data_len);\n    if (client_socks_recv_send_out(client) < 0) {\n        client_log(client, BLOG_INFO, \"client_socks_recv_send_out error\");\n        return;\n    }\n    \n    // continue receiving if needed\n    if (client->socks_recv_buf_used == -1) {\n        client_log(client, BLOG_INFO, \"client_socks_recv_send_out continue receiving\");\n        client_socks_recv_initiate(client);\n    }else{\n//        client_socks_recv_initiate(client);\n        client_log(client, BLOG_INFO, \"client_socks_recv_send_out continue error\");\n    }\n}\n\nint client_socks_recv_send_out (struct tcp_client *client)\n{\n    ASSERT(!client->client_closed)\n    ASSERT(client->socks_up)\n    ASSERT(client->socks_recv_buf_used > 0)\n    ASSERT(client->socks_recv_buf_sent < client->socks_recv_buf_used)\n    ASSERT(!client->socks_recv_waiting)\n    \n    // return value -1 means tcp_abort() was done,\n    // 0 means it wasn't and the client (pcb) is still up\n    \n    do {\n        int to_write = bmin_int(client->socks_recv_buf_used - client->socks_recv_buf_sent, tcp_sndbuf(client->pcb));\n#if SOCKS_DATA_LOG_ENABLE\n        client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out data<len: %d>\", to_write);\n#endif\n        if (to_write == 0) {\n#if SOCKS_DATA_LOG_ENABLE\n            client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out to_write zero, break\");\n#endif\n            break;\n        }\n        err_t err = tcp_write(client->pcb, client->socks_recv_buf + client->socks_recv_buf_sent, to_write, TCP_WRITE_FLAG_COPY);\n#if SOCKS_DATA_LOG_ENABLE\n        client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out tcp write err: %d\", err);\n#endif\n        if (err != ERR_OK) {\n            if (err == ERR_MEM) {\n#if SOCKS_DATA_LOG_ENABLE\n                client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out tcp write error error_mem\");\n#endif\n                break;\n            }\n#if SOCKS_DATA_LOG_ENABLE\n            client_log(client, BLOG_INFO, \"tcp_write failed (%d)\", (int)err);\n#endif\n            client_abort_client(client);\n            return -1;\n        }\n        \n        client->socks_recv_buf_sent += to_write;\n        client->socks_recv_tcp_pending += to_write;\n    } while (client->socks_recv_buf_sent < client->socks_recv_buf_used);\n#if SOCKS_DATA_LOG_ENABLE\n    client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out begin tcp_output\");\n#endif\n    // start sending now\n    err_t err = tcp_output(client->pcb);\n#if SOCKS_DATA_LOG_ENABLE\n    client_log(client, BLOG_INFO, \"tun2socks client_socks_recv_send_out begin tcp_output err: %d\", err);\n#endif\n    if (err != ERR_OK) {\n#if SOCKS_DATA_LOG_ENABLE\n        client_log(client, BLOG_INFO, \"tcp_output failed (%d)\", (int)err);\n#endif\n        client_abort_client(client);\n        return -1;\n    }\n    \n    // more data to queue?\n    if (client->socks_recv_buf_sent < client->socks_recv_buf_used) {\n        if (client->socks_recv_tcp_pending == 0) {\n            client_log(client, BLOG_ERROR, \"can't queue data, but all data was confirmed !?!\");\n            \n            client_abort_client(client);\n            return -1;\n        }\n        \n        // set waiting, continue in client_sent_func\n        client->socks_recv_waiting = 1;\n        return 0;\n    }\n    \n    // everything was queued\n    client->socks_recv_buf_used = -1;\n//    client->socks_recv_buf_used = 0;\n    \n    return 0;\n}\n\nerr_t client_sent_func (void *arg, struct tcp_pcb *tpcb, u16_t len)\n{\n    struct tcp_client *client = (struct tcp_client *)arg;\n    \n    ASSERT(!client->client_closed)\n    ASSERT(client->socks_up)\n    ASSERT(len > 0)\n    ASSERT(len <= client->socks_recv_tcp_pending)\n    \n    // decrement pending\n    client->socks_recv_tcp_pending -= len;\n    \n    // continue queuing\n    if (client->socks_recv_buf_used > 0) {\n        ASSERT(client->socks_recv_waiting)\n        ASSERT(client->socks_recv_buf_sent < client->socks_recv_buf_used)\n        \n        // set not waiting\n        client->socks_recv_waiting = 0;\n        \n        // possibly send more data\n        if (client_socks_recv_send_out(client) < 0) {\n            return ERR_ABRT;\n        }\n        \n        // we just queued some data, so it can't have been confirmed yet\n        ASSERT(client->socks_recv_tcp_pending > 0)\n        \n        // continue receiving if needed\n        if (client->socks_recv_buf_used == -1 && !client->socks_closed) {\n            SYNC_DECL\n            SYNC_FROMHERE\n            client_socks_recv_initiate(client);\n            DEAD_ENTER(client->dead_client)\n            SYNC_COMMIT\n            DEAD_LEAVE2(client->dead_client)\n            if (DEAD_KILLED) {\n                return ERR_ABRT;\n            }\n        }\n        \n        return ERR_OK;\n    }\n    \n    // have we sent everything after SOCKS was closed?\n    if (client->socks_closed && client->socks_recv_tcp_pending == 0) {\n        client_log(client, BLOG_INFO, \"removing after SOCKS went down\");\n        client_free_client(client);\n        return ERR_ABRT;\n    }\n    \n    return ERR_OK;\n}\n\nvoid udpgw_client_handler_received (void *unused, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len)\n{\n    ASSERT(options.udpgw_remote_server_addr)\n    ASSERT(local_addr.type == BADDR_TYPE_IPV4 || local_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(local_addr.type == remote_addr.type)\n    ASSERT(data_len >= 0)\n    \n    int packet_length = 0;\n    \n    switch (local_addr.type) {\n        case BADDR_TYPE_IPV4: {\n#ifdef BADVPN_SOCKS_UDP_RELAY\n            BLog(BLOG_INFO, \"UDP: from udprelay %d bytes\", data_len);\n#else\n            BLog(BLOG_INFO, \"UDP: from udpgw %d bytes\", data_len);\n#endif\n            \n            if (data_len > UINT16_MAX - (sizeof(struct ipv4_header) + sizeof(struct udp_header)) ||\n                data_len > BTap_GetMTU(&device) - (int)(sizeof(struct ipv4_header) + sizeof(struct udp_header))\n            ) {\n                BLog(BLOG_ERROR, \"UDP: packet is too large\");\n                return;\n            }\n            \n            // build IP header\n            struct ipv4_header iph;\n            iph.version4_ihl4 = IPV4_MAKE_VERSION_IHL(sizeof(iph));\n            iph.ds = hton8(0);\n            iph.total_length = hton16(sizeof(iph) + sizeof(struct udp_header) + data_len);\n            iph.identification = hton16(0);\n            iph.flags3_fragmentoffset13 = hton16(0);\n            iph.ttl = hton8(64);\n            iph.protocol = hton8(IPV4_PROTOCOL_UDP);\n            iph.checksum = hton16(0);\n            iph.source_address = remote_addr.ipv4.ip;\n            iph.destination_address = local_addr.ipv4.ip;\n            iph.checksum = ipv4_checksum(&iph, NULL, 0);\n            \n            // build UDP header\n            struct udp_header udph;\n            udph.source_port = remote_addr.ipv4.port;\n            udph.dest_port = local_addr.ipv4.port;\n            udph.length = hton16(sizeof(udph) + data_len);\n            udph.checksum = hton16(0);\n            udph.checksum = udp_checksum(&udph, data, data_len, iph.source_address, iph.destination_address);\n            \n            // write packet\n            memcpy(device_write_buf, &iph, sizeof(iph));\n            memcpy(device_write_buf + sizeof(iph), &udph, sizeof(udph));\n            memcpy(device_write_buf + sizeof(iph) + sizeof(udph), data, data_len);\n            packet_length = sizeof(iph) + sizeof(udph) + data_len;\n        } break;\n        \n        case BADDR_TYPE_IPV6: {\n#ifdef BADVPN_SOCKS_UDP_RELAY\n            BLog(BLOG_INFO, \"UDP/IPv6: from udprelay %d bytes\", data_len);\n#else\n            BLog(BLOG_INFO, \"UDP/IPv6: from udpgw %d bytes\", data_len);\n#endif\n            \n            if (!options.netif_ip6addr) {\n#ifdef BADVPN_SOCKS_UDP_RELAY\n                BLog(BLOG_ERROR, \"got IPv6 packet from udprelay but IPv6 is disabled\");\n#else\n                BLog(BLOG_ERROR, \"got IPv6 packet from udpgw but IPv6 is disabled\");\n#endif\n                return;\n            }\n            \n            if (data_len > UINT16_MAX - sizeof(struct udp_header) ||\n                data_len > BTap_GetMTU(&device) - (int)(sizeof(struct ipv6_header) + sizeof(struct udp_header))\n            ) {\n                BLog(BLOG_ERROR, \"UDP/IPv6: packet is too large\");\n                return;\n            }\n            \n            // build IPv6 header\n            struct ipv6_header iph;\n            iph.version4_tc4 = hton8((6 << 4));\n            iph.tc4_fl4 = hton8(0);\n            iph.fl = hton16(0);\n            iph.payload_length = hton16(sizeof(struct udp_header) + data_len);\n            iph.next_header = hton8(IPV6_NEXT_UDP);\n            iph.hop_limit = hton8(64);\n            memcpy(iph.source_address, remote_addr.ipv6.ip, 16);\n            memcpy(iph.destination_address, local_addr.ipv6.ip, 16);\n            \n            // build UDP header\n            struct udp_header udph;\n            udph.source_port = remote_addr.ipv6.port;\n            udph.dest_port = local_addr.ipv6.port;\n            udph.length = hton16(sizeof(udph) + data_len);\n            udph.checksum = hton16(0);\n            udph.checksum = udp_ip6_checksum(&udph, data, data_len, iph.source_address, iph.destination_address);\n            \n            // write packet\n            memcpy(device_write_buf, &iph, sizeof(iph));\n            memcpy(device_write_buf + sizeof(iph), &udph, sizeof(udph));\n            memcpy(device_write_buf + sizeof(iph) + sizeof(udph), data, data_len);\n            packet_length = sizeof(iph) + sizeof(udph) + data_len;\n        } break;\n    }\n    \n    // submit packet\n    BTap_Send(&device, device_write_buf, packet_length);\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tun2socks/tun2socks.h",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n\n// name of the program\n#define PROGRAM_NAME \"tun2socks\"\n\n// size of temporary buffer for passing data from the SOCKS server to TCP for sending\n#define CLIENT_SOCKS_RECV_BUF_SIZE 2048\n\n// maximum number of udpgw connections\n#define DEFAULT_UDPGW_MAX_CONNECTIONS 256\n\n// udpgw per-connection send buffer size, in number of packets\n#define DEFAULT_UDPGW_CONNECTION_BUFFER_SIZE 8\n\n// udpgw reconnect time after connection fails\n#define UDPGW_RECONNECT_TIME 5000\n\n// udpgw keepalive sending interval\n#define UDPGW_KEEPALIVE_TIME 10000\n\n// option to override the destination addresses to give the SOCKS server\n//#define OVERRIDE_DEST_ADDR \"10.111.0.2:2000\"\n\nextern int tun2socks_main (int argc, char **argv, int fd, int mtu);\nextern void stop_tun2socks();"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tuntap/BTap.h",
    "content": "/**\n * @file BTap.h\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n * \n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n * @section DESCRIPTION\n * \n * TAP device abstraction.\n */\n\n#ifndef BADVPN_TUNTAP_BTAP_H\n#define BADVPN_TUNTAP_BTAP_H\n\n#if (defined(BADVPN_USE_WINAPI) + defined(BADVPN_LINUX) + defined(BADVPN_FREEBSD)) != 1\n#error Unknown TAP backend or too many TAP backends\n#endif\n\n#include <stdint.h>\n\n#ifdef BADVPN_USE_WINAPI\n#else\n#include <net/if.h>\n#endif\n\n#include \"misc/debug.h\"\n#include \"misc/debugerror.h\"\n#include \"base/DebugObject.h\"\n#include \"system/BReactor.h\"\n#include \"flow/PacketRecvInterface.h\"\n\n#define BTAP_ETHERNET_HEADER_LENGTH 14\n\n/**\n * Handler called when an error occurs on the device.\n * The object must be destroyed from the job context of this\n * handler, and no further I/O may occur.\n * \n * @param user as in {@link BTap_Init}\n */\ntypedef void (*BTap_handler_error) (void *used);\n\ntypedef struct {\n    BReactor *reactor;\n    BTap_handler_error handler_error;\n    void *handler_error_user;\n    int frame_mtu;\n    PacketRecvInterface output;\n    uint8_t *output_packet;\n    \n#ifdef BADVPN_USE_WINAPI\n    HANDLE device;\n    BReactorIOCPOverlapped send_olap;\n    BReactorIOCPOverlapped recv_olap;\n#else\n    int close_fd;\n    int fd;\n    BFileDescriptor bfd;\n    int poll_events;\n#endif\n    \n    DebugError d_err;\n    DebugObject d_obj;\n} BTap;\n\n/**\n * Initializes the TAP device.\n *\n * @param o the object\n * @param BReactor {@link BReactor} we live in\n * @param devname name of the devece to open.\n *                On Linux: a network interface name. If it is NULL, no\n *                specific device will be requested, and the operating system\n *                may create a new device.\n *                On Windows: a string \"component_id:device_name\", where\n *                component_id is a string identifying the driver, and device_name\n *                is the name of the network interface. If component_id is empty,\n *                a hardcoded default will be used instead. If device_name is empty,\n *                the first device found with a matching component_id will be used.\n *                Specifying a NULL devname is equivalent to specifying \":\".\n * @param handler_error error handler function\n * @param handler_error_user value passed to error handler\n * @param tun whether to create a TUN (IP) device or a TAP (Ethernet) device. Must be 0 or 1.\n * @return 1 on success, 0 on failure\n */\nint BTap_Init (BTap *o, BReactor *reactor, int fd, int mtu, BTap_handler_error handler_error, void *handler_error_user, int tun);\n\nenum BTap_dev_type {BTAP_DEV_TUN, BTAP_DEV_TAP};\n\nenum BTap_init_type {\n    BTAP_INIT_STRING,\n#ifndef BADVPN_USE_WINAPI\n    BTAP_INIT_FD,\n#endif\n};\n\nstruct BTap_init_data {\n    enum BTap_dev_type dev_type;\n    enum BTap_init_type init_type;\n    union {\n        char *string;\n        struct {\n            int fd;\n            int mtu;\n        } fd;\n    } init;\n};\n\n/**\n * Initializes the TAP device.\n *\n * @param o the object\n * @param BReactor {@link BReactor} we live in\n * @param init_data struct containing initialization parameters (to allow transparent passing).\n *                  init.data.dev_type must be either BTAP_DEV_TUN for an IP device, or\n *                  BTAP_DEV_TAP for an Ethernet device.\n *                  init_data.init_type must be either BTAP_INIT_STRING or BTAP_INIT_FD.\n *                  For BTAP_INIT_STRING, init_data.init.string specifies the TUN or TAP\n *                  device, as described next.\n *                  On Linux: a network interface name. If it is NULL, no\n *                  specific device will be requested, and the operating system\n *                  may create a new device.\n *                  On Windows: a string \"component_id:device_name\", where\n *                  component_id is a string identifying the driver, and device_name\n *                  is the name of the network interface. If component_id is empty,\n *                  a hardcoded default will be used instead. If device_name is empty,\n *                  the first device found with a matching component_id will be used.\n *                  Specifying NULL is equivalent to specifying \":\".\n *                  For BTAP_INIT_FD, the device is initialized using a file descriptor.\n *                  In this case, init_data.init.fd.fd must be set to the file descriptor,\n *                  and init_data.init.fd.mtu must be set to the largest IP packet or\n *                  Ethernet frame supported, for a TUN or TAP device, respectively.\n *                  File descriptor initialization is not supported on Windows.\n * @param handler_error error handler function\n * @param handler_error_user value passed to error handler\n * @return 1 on success, 0 on failure\n */\nint BTap_Init2 (BTap *o, BReactor *reactor, struct BTap_init_data init_data, BTap_handler_error handler_error, void *handler_error_user) WARN_UNUSED;\n\n/**\n * Frees the TAP device.\n *\n * @param o the object\n */\nvoid BTap_Free (BTap *o);\n\n/**\n * Returns the device's maximum transmission unit (including any protocol headers).\n *\n * @param o the object\n * @return device's MTU\n */\nint BTap_GetMTU (BTap *o);\n\n/**\n * Sends a packet to the device.\n * Any errors will be reported via a job.\n * \n * @param o the object\n * @param data packet to send\n * @param data_len length of packet. Must be >=0 and <=MTU, as reported by {@link BTap_GetMTU}.\n */\nvoid BTap_Send (BTap *o, uint8_t *data, int data_len);\n\n/**\n * Returns a {@link PacketRecvInterface} for reading packets from the device.\n * The MTU of the interface will be {@link BTap_GetMTU}.\n * \n * @param o the object\n * @return output interface\n */\nPacketRecvInterface * BTap_GetOutput (BTap *o);\n\n#endif\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/tuntap/BTap.m",
    "content": "/**\n * @file BTap.c\n * @author Ambroz Bizjak <ambrop7@gmail.com>\n *\n * @section LICENSE\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <string.h>\n#include <stdio.h>\n\n#ifdef BADVPN_USE_WINAPI\n#include <windows.h>\n#include <winioctl.h>\n#include <objbase.h>\n#include <wtypes.h>\n#include \"wintap-common.h\"\n#include <tuntap/tapwin32-funcs.h>\n#else\n#include <fcntl.h>\n#include <unistd.h>\n#include <errno.h>\n#include <sys/ioctl.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <sys/socket.h>\n#include <net/if.h>\n//    #include <net/if_arp.h>\n#ifdef BADVPN_LINUX\n#include <linux/if_tun.h>\n#endif\n#ifdef BADVPN_FREEBSD\n#ifdef __APPLE__\n#include <ctype.h>\n//            #include <net/if_utun.h>\n//            #include <sys/sys_domain.h>\n//            #include <sys/kern_control.h>\n#include <netinet/ip.h>\n#include <sys/uio.h>\n#else\n#include <net/if_tun.h>\n#include <net/if_tap.h>\n#endif\n#endif\n#endif\n\n#include \"base/BLog.h\"\n\n#include \"tuntap/BTap.h\"\n\n#include \"generated/blog_channel_BTap.h\"\n#include \"TunnelInterface.h\"\n\nstatic void report_error (BTap *o);\nstatic void output_handler_recv (BTap *o, uint8_t *data);\n\n#ifdef BADVPN_USE_WINAPI\n\nstatic void recv_olap_handler (BTap *o, int event, DWORD bytes)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->output_packet)\n    ASSERT(event == BREACTOR_IOCP_EVENT_SUCCEEDED || event == BREACTOR_IOCP_EVENT_FAILED)\n    \n    // set no output packet\n    o->output_packet = NULL;\n    \n    if (event == BREACTOR_IOCP_EVENT_FAILED) {\n        BLog(BLOG_ERROR, \"read operation failed\");\n        report_error(o);\n        return;\n    }\n    \n    ASSERT(bytes >= 0)\n    ASSERT(bytes <= o->frame_mtu)\n    \n    // done\n    PacketRecvInterface_Done(&o->output, bytes);\n}\n\n#else\n\n#ifdef __APPLE__\n\nstatic inline int header_modify_read_write_return (int len)\n{\n    if (len > 0) {\n        return len > sizeof (u_int32_t) ? len - sizeof (u_int32_t) : 0;\n    } else {\n        return len;\n    }\n}\n\nstatic int write_tun_header (int fd, void *buf, size_t len)\n{\n    u_int32_t type;\n    struct iovec iv[2];\n    struct ip *iph;\n    \n    iph = (struct ip *) buf;\n    \n    if (iph->ip_v == 6) {\n        type = htonl(AF_INET6);\n    } else {\n        type = htonl(AF_INET);\n    }\n    \n    iv[0].iov_base = &type;\n    iv[0].iov_len = sizeof(type);\n    iv[1].iov_base = buf;\n    iv[1].iov_len = len;\n    \n    return header_modify_read_write_return(writev(fd, iv, 2));\n}\n\nstatic int read_tun_header (int fd, void *buf, size_t len)\n{\n    u_int32_t type;\n    struct iovec iv[2];\n    \n    iv[0].iov_base = &type;\n    iv[0].iov_len = sizeof(type);\n    iv[1].iov_base = buf;\n    iv[1].iov_len = len;\n    \n    return header_modify_read_write_return(readv(fd, iv, 2));\n}\n\n#endif\n\nstatic void fd_handler (BTap *o, int events)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    \n    if (events&(BREACTOR_ERROR|BREACTOR_HUP)) {\n        BLog(BLOG_WARNING, \"device fd reports error?\");\n    }\n    \n    if (events&BREACTOR_READ) do {\n        ASSERT(o->output_packet)\n        \n        // try reading into the buffer\n#ifdef __APPLE__\n        //        int bytes = read_tun_header(o->fd, o->output_packet, o->frame_mtu);\n        uint8_t data[2];\n        int bytes = read(o->fd, data, 2);\n        if (bytes != 2) {\n            // Treat zero return value the same as EAGAIN.\n            // See: https://bugzilla.kernel.org/show_bug.cgi?id=96381\n//            if (bytes == 0 || errno == EAGAIN || errno == EWOULDBLOCK) {\n//                // retry later\n//                break;\n//            }\n//            // report fatal error\n//            report_error(o);\n//            return;\n            break;\n        }\n        int data_len = data[0] * 256 + data[1];\n        \n        bytes = read(o->fd, o->output_packet, data_len);\n#else\n        int bytes = read(o->fd, o->output_packet, o->frame_mtu);\n#endif\n        if (bytes != data_len) {\n            // report fatal error\n            report_error(o);\n            return;\n        }\n        if (bytes <= 0) {\n            // Treat zero return value the same as EAGAIN.\n            // See: https://bugzilla.kernel.org/show_bug.cgi?id=96381\n            if (bytes == 0 || errno == EAGAIN || errno == EWOULDBLOCK) {\n                // retry later\n                break;\n            }\n            // report fatal error\n            report_error(o);\n            return;\n        }\n        \n#if TCP_DATA_LOG_ENABLE\n        BLog(BLOG_DEBUG, \"tun2socks receive from tunnel data<len: %d>\", bytes);\n#endif\n        \n        ASSERT_FORCE(bytes <= o->frame_mtu)\n        \n        // set no output packet\n        o->output_packet = NULL;\n        \n        // update events\n        o->poll_events &= ~BREACTOR_READ;\n        BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->poll_events);\n        \n        // inform receiver we finished the packet\n        PacketRecvInterface_Done(&o->output, bytes);\n    } while (0);\n}\n\n#endif\n\nvoid report_error (BTap *o)\n{\n    DEBUGERROR(&o->d_err, o->handler_error(o->handler_error_user));\n}\n\nvoid output_handler_recv (BTap *o, uint8_t *data)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(data)\n    ASSERT(!o->output_packet)\n    \n#ifdef BADVPN_USE_WINAPI\n    \n    memset(&o->recv_olap.olap, 0, sizeof(o->recv_olap.olap));\n    \n    // read\n    BOOL res = ReadFile(o->device, data, o->frame_mtu, NULL, &o->recv_olap.olap);\n    if (res == FALSE && GetLastError() != ERROR_IO_PENDING) {\n        BLog(BLOG_ERROR, \"ReadFile failed (%u)\", GetLastError());\n        report_error(o);\n        return;\n    }\n    \n    o->output_packet = data;\n    \n#else\n    \n    // attempt read\n//#ifdef __APPLE__\n//    //    int bytes = read_tun_header(o->fd, data, o->frame_mtu);\n//    char msg[2];\n//    int bytes = read(o->fd, msg, 2);\n//    NSLog(@\"fd2 bytes: %d\", bytes);\n//    \n//    if (bytes <= 0) {\n//        if (bytes == 0 || errno == EAGAIN || errno == EWOULDBLOCK) {\n//            // See note about zero return in fd_handler.\n//            // retry later in fd_handler\n//            // remember packet\n//            o->output_packet = data;\n//            // update events\n//            o->poll_events |= BREACTOR_READ;\n//            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->poll_events);\n//            return;\n//        }\n//        // report fatal error\n//        report_error(o);\n//        return;\n//    }\n//    int len = msg[0] * 256 + msg[1];\n//    NSLog(@\"fd2 len: %x, %x, len: %d\", data[0], data[1], len);\n//    bytes = read(o->fd, data, len);\n//#else\n//    int bytes = read(o->fd, data, o->frame_mtu);\n//#endif\n//    if (bytes <= 0) {\n//        if (bytes == 0 || errno == EAGAIN || errno == EWOULDBLOCK) {\n//            // See note about zero return in fd_handler.\n//            // retry later in fd_handler\n//            // remember packet\n//            o->output_packet = data;\n//            // update events\n//            o->poll_events |= BREACTOR_READ;\n//            BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->poll_events);\n//            return;\n//        }\n//        // report fatal error\n//        report_error(o);\n//        return;\n//    }\n//    \n//    NSLog(@\"tun2 receive: %@\", [[NSData alloc] initWithBytes:data length:bytes]);\n//    \n//    ASSERT_FORCE(bytes <= o->frame_mtu)\n//    \n//    PacketRecvInterface_Done(&o->output, bytes);\n    o->output_packet = data;\n    // update events\n    o->poll_events |= BREACTOR_READ;\n    BReactor_SetFileDescriptorEvents(o->reactor, &o->bfd, o->poll_events);\n    \n#endif\n}\n\nint BTap_Init (BTap *o, BReactor *reactor, int fd, int mtu, BTap_handler_error handler_error, void *handler_error_user, int tun)\n{\n    ASSERT(tun == 0 || tun == 1)\n    \n    struct BTap_init_data init_data;\n    init_data.dev_type = tun ? BTAP_DEV_TUN : BTAP_DEV_TAP;\n    init_data.init_type = BTAP_INIT_FD;\n    init_data.init.fd.fd = fd;\n    init_data.init.fd.mtu = mtu;\n    \n    return BTap_Init2(o, reactor, init_data, handler_error, handler_error_user);\n}\n\nint BTap_Init2 (BTap *o, BReactor *reactor, struct BTap_init_data init_data, BTap_handler_error handler_error, void *handler_error_user)\n{\n    ASSERT(init_data.dev_type == BTAP_DEV_TUN || init_data.dev_type == BTAP_DEV_TAP)\n    \n    // init arguments\n    o->reactor = reactor;\n    o->handler_error = handler_error;\n    o->handler_error_user = handler_error_user;\n    \n#if defined(BADVPN_LINUX) || defined(BADVPN_FREEBSD)\n    \n    o->close_fd = (init_data.init_type != BTAP_INIT_FD);\n    \n    switch (init_data.init_type) {\n        case BTAP_INIT_FD: {\n            ASSERT(init_data.init.fd.fd >= 0)\n            ASSERT(init_data.init.fd.mtu >= 0)\n            ASSERT(init_data.dev_type != BTAP_DEV_TAP || init_data.init.fd.mtu >= BTAP_ETHERNET_HEADER_LENGTH)\n            \n            o->fd = init_data.init.fd.fd;\n            o->frame_mtu = init_data.init.fd.mtu;\n        } break;\n            \n        case BTAP_INIT_STRING:\n            break;\n            \n        default: ASSERT(0);\n    }\n    \n    // set non-blocking\n    if (fcntl(o->fd, F_SETFL, O_NONBLOCK) < 0) {\n        BLog(BLOG_ERROR, \"cannot set non-blocking\");\n        goto fail1;\n    }\n    \n    // init file descriptor object\n    BFileDescriptor_Init(&o->bfd, o->fd, (BFileDescriptor_handler)fd_handler, o);\n    if (!BReactor_AddFileDescriptor(o->reactor, &o->bfd)) {\n        BLog(BLOG_ERROR, \"BReactor_AddFileDescriptor failed\");\n        goto fail1;\n    }\n    o->poll_events = 0;\n    \n    goto success;\n    \nfail1:\n    if (o->close_fd) {\n        ASSERT_FORCE(close(o->fd) == 0)\n    }\nfail0:\n    return 0;\n    \n#endif\n    \nsuccess:\n    // init output\n    PacketRecvInterface_Init(&o->output, o->frame_mtu, (PacketRecvInterface_handler_recv)output_handler_recv, o, BReactor_PendingGroup(o->reactor));\n    \n    // set no output packet\n    o->output_packet = NULL;\n    \n    DebugError_Init(&o->d_err, BReactor_PendingGroup(o->reactor));\n    DebugObject_Init(&o->d_obj);\n    return 1;\n}\n\nvoid BTap_Free (BTap *o)\n{\n    DebugObject_Free(&o->d_obj);\n    DebugError_Free(&o->d_err);\n    \n    // free output\n    PacketRecvInterface_Free(&o->output);\n    \n#ifdef BADVPN_USE_WINAPI\n    \n    // cancel I/O\n    ASSERT_FORCE(CancelIo(o->device))\n    \n    // wait receiving to finish\n    if (o->output_packet) {\n        BLog(BLOG_DEBUG, \"waiting for receiving to finish\");\n        BReactorIOCPOverlapped_Wait(&o->recv_olap, NULL, NULL);\n    }\n    \n    // free recv olap\n    BReactorIOCPOverlapped_Free(&o->recv_olap);\n    \n    // free send olap\n    BReactorIOCPOverlapped_Free(&o->send_olap);\n    \n    // close device\n    ASSERT_FORCE(CloseHandle(o->device))\n    \n#else\n    \n    // free BFileDescriptor\n    BReactor_RemoveFileDescriptor(o->reactor, &o->bfd);\n    \n    if (o->close_fd) {\n        // close file descriptor\n        ASSERT_FORCE(close(o->fd) == 0)\n    }\n    \n#endif\n}\n\nint BTap_GetMTU (BTap *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return o->frame_mtu;\n}\n\nvoid BTap_Send (BTap *o, uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    DebugError_AssertNoError(&o->d_err);\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->frame_mtu)\n    \n#ifdef BADVPN_USE_WINAPI\n    \n    // ignore frames without an Ethernet header, or we get errors in WriteFile\n    if (data_len < 14) {\n        return;\n    }\n    \n    memset(&o->send_olap.olap, 0, sizeof(o->send_olap.olap));\n    \n    // write\n    BOOL res = WriteFile(o->device, data, data_len, NULL, &o->send_olap.olap);\n    if (res == FALSE && GetLastError() != ERROR_IO_PENDING) {\n        BLog(BLOG_ERROR, \"WriteFile failed (%u)\", GetLastError());\n        return;\n    }\n    \n    // wait\n    int succeeded;\n    DWORD bytes;\n    BReactorIOCPOverlapped_Wait(&o->send_olap, &succeeded, &bytes);\n    \n    if (!succeeded) {\n        BLog(BLOG_ERROR, \"write operation failed\");\n    } else {\n        ASSERT(bytes >= 0)\n        ASSERT(bytes <= data_len)\n        \n        if (bytes < data_len) {\n            BLog(BLOG_ERROR, \"write operation didn't write everything\");\n        }\n    }\n    \n#else\n    \n#ifdef __APPLE__\n    //    int bytes = write_tun_header(o->fd, data, data_len);\n    NSData *outdata = [[NSData alloc] initWithBytes:data length:data_len];\n#if TCP_DATA_LOG_ENABLE\n    BLog(BLOG_DEBUG, \"tun2socks send to tunnel data<len: %d>\", data_len);\n#endif\n    [TunnelInterface writePacket:outdata];\n    return;\n    uint8_t msg[o->frame_mtu+2];\n    msg[0] = data_len / 256;\n    msg[1] = data_len % 256;\n    memcpy(msg + 2, data, data_len);\n\n    int bytes = write(o->fd, msg, data_len + 2);\n#else\n    int bytes = write(o->fd, data, data_len);\n#endif\n    if (bytes < 0) {\n        // malformed packets will cause errors, ignore them and act like\n        // the packet was accepeted\n    } else {\n        if (bytes != data_len + 2) {\n            BLog(BLOG_WARNING, \"written %d expected %d\", bytes, data_len + 2);\n        }\n    }\n    \n#endif\n}\n\nPacketRecvInterface * BTap_GetOutput (BTap *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    return &o->output;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/udpgw/udpgw.c",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdio.h>\n#include <string.h>\n#include <stdarg.h>\n#include <stdlib.h>\n#include <limits.h>\n\n#include \"protocol/udpgw_proto.h\"\n#include \"misc/debug.h\"\n#include \"misc/version.h\"\n#include \"misc/loggers_string.h\"\n#include \"misc/loglevel.h\"\n#include \"misc/offset.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/bsize.h\"\n#include \"misc/open_standard_streams.h\"\n#include \"misc/balloc.h\"\n#include \"misc/compare.h\"\n#include \"misc/print_macros.h\"\n#include \"structure/LinkedList1.h\"\n#include \"structure/BAVL.h\"\n#include \"base/BLog.h\"\n#include \"system/BReactor.h\"\n#include \"system/BNetwork.h\"\n#include \"system/BConnection.h\"\n#include \"system/BDatagram.h\"\n#include \"system/BSignal.h\"\n#include \"flow/PacketProtoDecoder.h\"\n#include \"flow/PacketPassFairQueue.h\"\n#include \"flow/PacketStreamSender.h\"\n#include \"flow/PacketProtoFlow.h\"\n#include \"flow/SinglePacketBuffer.h\"\n\n#ifndef BADVPN_USE_WINAPI\n#include \"base/BLog_syslog.h\"\n#include <arpa/nameser.h>\n#include <resolv.h>\n#endif\n\n#include \"udpgw.h\"\n\n#include \"generated/blog_channel_udpgw.h\"\n\n#define LOGGER_STDOUT 1\n#define LOGGER_SYSLOG 2\n\n#define DNS_UPDATE_TIME 2000\n\nstruct client {\n    BConnection con;\n    BAddr addr;\n    BTimer disconnect_timer;\n    PacketProtoDecoder recv_decoder;\n    PacketPassInterface recv_if;\n    PacketPassFairQueue send_queue;\n    PacketStreamSender send_sender;\n    BAVL connections_tree;\n    LinkedList1 connections_list;\n    int num_connections;\n    LinkedList1 closing_connections_list;\n    LinkedList1Node clients_list_node;\n};\n\nstruct connection {\n    struct client *client;\n    uint16_t conid;\n    BAddr addr;\n    BAddr orig_addr;\n    const uint8_t *first_data;\n    int first_data_len;\n    btime_t last_use_time;\n    int closing;\n    BPending first_job;\n    BufferWriter *send_if;\n    PacketProtoFlow send_ppflow;\n    PacketPassFairQueueFlow send_qflow;\n    union {\n        struct {\n            BDatagram udp_dgram;\n            int local_port_index;\n            BufferWriter udp_send_writer;\n            PacketBuffer udp_send_buffer;\n            SinglePacketBuffer udp_recv_buffer;\n            PacketPassInterface udp_recv_if;\n            BAVLNode connections_tree_node;\n            LinkedList1Node connections_list_node;\n        };\n        struct {\n            LinkedList1Node closing_connections_list_node;\n        };\n    };\n};\n\n// command-line options\nstruct {\n    int help;\n    int version;\n    int logger;\n#ifndef BADVPN_USE_WINAPI\n    char *logger_syslog_facility;\n    char *logger_syslog_ident;\n#endif\n    int loglevel;\n    int loglevels[BLOG_NUM_CHANNELS];\n    char *listen_addrs[MAX_LISTEN_ADDRS];\n    int num_listen_addrs;\n    int udp_mtu;\n    int max_clients;\n    int max_connections_for_client;\n    int client_socket_sndbuf;\n    int local_udp_num_ports;\n    char *local_udp_addr;\n    int local_udp_ip6_num_ports;\n    char *local_udp_ip6_addr;\n    int unique_local_ports;\n} server_options;\n\n// MTUs\nint udpgw_mtu;\nint pp_mtu;\n\n// listen addresses\nBAddr listen_addrs[MAX_LISTEN_ADDRS];\nint num_listen_addrs;\n\n// local UDP port range, if options.local_udp_num_ports>=0\nBAddr local_udp_addr;\n\n// local UDP/IPv6 port range, if options.local_udp_ip6_num_ports>=0\nBAddr local_udp_ip6_addr;\n\n// DNS forwarding\nBAddr dns_addr;\nbtime_t last_dns_update_time;\n\n// reactor\nBReactor server_ss;\n\n// listeners\nBListener listeners[MAX_LISTEN_ADDRS];\nint num_listeners;\n\n// clients\nLinkedList1 clients_list;\nint server_num_clients;\n\nstatic void print_help (const char *name);\nstatic void print_version (void);\nstatic int parse_arguments (int argc, char *argv[]);\nstatic int process_arguments (void);\nstatic void signal_handler (void *unused);\nstatic void listener_handler (BListener *listener);\nstatic void client_free (struct client *client);\nstatic void client_logfunc (struct client *client);\nstatic void client_log (struct client *client, int level, const char *fmt, ...);\nstatic void client_disconnect_timer_handler (struct client *client);\nstatic void client_connection_handler (struct client *client, int event);\nstatic void client_decoder_handler_error (struct client *client);\nstatic void client_recv_if_handler_send (struct client *client, uint8_t *data, int data_len);\nstatic int get_local_num_ports (int addr_type);\nstatic BAddr get_local_addr (int addr_type);\nstatic uint8_t * build_port_usage_array_and_find_least_used_connection (BAddr remote_addr, struct connection **out_con);\nstatic void connection_init (struct client *client, uint16_t conid, BAddr addr, BAddr orig_addr, const uint8_t *data, int data_len);\nstatic void connection_free (struct connection *con);\nstatic void connection_logfunc (struct connection *con);\nstatic void connection_log (struct connection *con, int level, const char *fmt, ...);\nstatic void connection_free_udp (struct connection *con);\nstatic void connection_first_job_handler (struct connection *con);\nstatic void connection_send_to_client (struct connection *con, uint8_t flags, const uint8_t *data, int data_len);\nstatic int connection_send_to_udp (struct connection *con, const uint8_t *data, int data_len);\nstatic void connection_close (struct connection *con);\nstatic void connection_send_qflow_busy_handler (struct connection *con);\nstatic void connection_dgram_handler_event (struct connection *con, int event);\nstatic void connection_udp_recv_if_handler_send (struct connection *con, uint8_t *data, int data_len);\nstatic struct connection * find_connection (struct client *client, uint16_t conid);\nstatic int uint16_comparator (void *unused, uint16_t *v1, uint16_t *v2);\nstatic void maybe_update_dns (void);\n\nint udpgw_main (int argc, char **argv)\n{\n    if (argc <= 0) {\n        return 1;\n    }\n    \n    // open standard streams\n    open_standard_streams();\n    \n    // parse command-line arguments\n    if (!parse_arguments(argc, argv)) {\n        fprintf(stderr, \"Failed to parse arguments\\n\");\n        print_help(argv[0]);\n        goto fail0;\n    }\n    \n    // handle --help and --version\n    if (server_options.help) {\n        print_version();\n        print_help(argv[0]);\n        return 0;\n    }\n    if (server_options.version) {\n        print_version();\n        return 0;\n    }\n    \n    // initialize logger\n    switch (server_options.logger) {\n        case LOGGER_STDOUT:\n            BLog_InitStdout();\n            break;\n#ifndef BADVPN_USE_WINAPI\n        case LOGGER_SYSLOG:\n            if (!BLog_InitSyslog(server_options.logger_syslog_ident, server_options.logger_syslog_facility)) {\n                fprintf(stderr, \"Failed to initialize syslog logger\\n\");\n                goto fail0;\n            }\n            break;\n#endif\n        default:\n            ASSERT(0);\n    }\n    \n    // configure logger channels\n    for (int i = 0; i < BLOG_NUM_CHANNELS; i++) {\n        if (server_options.loglevels[i] >= 0) {\n            BLog_SetChannelLoglevel(i, server_options.loglevels[i]);\n        }\n        else if (server_options.loglevel >= 0) {\n            BLog_SetChannelLoglevel(i, server_options.loglevel);\n        }\n    }\n    \n    BLog(BLOG_NOTICE, \"initializing \"GLOBAL_PRODUCT_NAME\" \"PROGRAM_NAME\" \"GLOBAL_VERSION);\n    \n    // initialize network\n    if (!BNetwork_GlobalInit()) {\n        BLog(BLOG_ERROR, \"BNetwork_GlobalInit failed\");\n        goto fail1;\n    }\n    \n    // process arguments\n    if (!process_arguments()) {\n        BLog(BLOG_ERROR, \"Failed to process arguments\");\n        goto fail1;\n    }\n    \n    // compute MTUs\n    udpgw_mtu = udpgw_compute_mtu(server_options.udp_mtu);\n    if (udpgw_mtu < 0 || udpgw_mtu > PACKETPROTO_MAXPAYLOAD) {\n        udpgw_mtu = PACKETPROTO_MAXPAYLOAD;\n    }\n    pp_mtu = udpgw_mtu + sizeof(struct packetproto_header);\n    \n    // init time\n    BTime_Init();\n    \n    // init DNS forwarding\n    BAddr_InitNone(&dns_addr);\n    last_dns_update_time = INT64_MIN;\n    maybe_update_dns();\n    \n    // init reactor\n    if (!BReactor_Init(&server_ss)) {\n        BLog(BLOG_ERROR, \"BReactor_Init failed\");\n        goto fail1;\n    }\n    \n    // setup signal handler\n    if (!BSignal_Init(&server_ss, signal_handler, NULL)) {\n        BLog(BLOG_ERROR, \"BSignal_Init failed\");\n        goto fail2;\n    }\n    \n    // initialize listeners\n    num_listeners = 0;\n    while (num_listeners < num_listen_addrs) {\n        if (!BListener_Init(&listeners[num_listeners], listen_addrs[num_listeners], &server_ss, &listeners[num_listeners], (BListener_handler)listener_handler)) {\n            BLog(BLOG_ERROR, \"Listener_Init failed\");\n            goto fail3;\n        }\n        num_listeners++;\n    }\n    \n    // init clients list\n    LinkedList1_Init(&clients_list);\n    server_num_clients = 0;\n    \n    // enter event loop\n    BLog(BLOG_NOTICE, \"entering event loop\");\n    BReactor_Exec(&server_ss);\n    \n    // free clients\n    while (!LinkedList1_IsEmpty(&clients_list)) {\n        struct client *client = UPPER_OBJECT(LinkedList1_GetFirst(&clients_list), struct client, clients_list_node);\n        client_free(client);\n    }\nfail3:\n    // free listeners\n    while (num_listeners > 0) {\n        num_listeners--;\n        BListener_Free(&listeners[num_listeners]);\n    }\n    // finish signal handling\n    BSignal_Finish();\nfail2:\n    // free reactor\n    BReactor_Free(&server_ss);\nfail1:\n    // free logger\n    BLog(BLOG_NOTICE, \"exiting\");\n    BLog_Free();\nfail0:\n    // finish debug objects\n    DebugObjectGlobal_Finish();\n    \n    return 1;\n}\n\nvoid print_help (const char *name)\n{\n    printf(\n           \"Usage:\\n\"\n           \"    %s\\n\"\n           \"        [--help]\\n\"\n           \"        [--version]\\n\"\n           \"        [--logger <\"LOGGERS_STRING\">]\\n\"\n#ifndef BADVPN_USE_WINAPI\n           \"        (logger=syslog?\\n\"\n           \"            [--syslog-facility <string>]\\n\"\n           \"            [--syslog-ident <string>]\\n\"\n           \"        )\\n\"\n#endif\n           \"        [--loglevel <0-5/none/error/warning/notice/info/debug>]\\n\"\n           \"        [--channel-loglevel <channel-name> <0-5/none/error/warning/notice/info/debug>] ...\\n\"\n           \"        [--listen-addr <addr>] ...\\n\"\n           \"        [--udp-mtu <bytes>]\\n\"\n           \"        [--max-clients <number>]\\n\"\n           \"        [--max-connections-for-client <number>]\\n\"\n           \"        [--client-socket-sndbuf <bytes / 0>]\\n\"\n           \"        [--local-udp-addrs <addr> <num_ports>]\\n\"\n           \"        [--local-udp-ip6-addrs <addr> <num_ports>]\\n\"\n           \"        [--unique-local-ports]\\n\"\n           \"Address format is a.b.c.d:port (IPv4) or [addr]:port (IPv6).\\n\",\n           name\n           );\n}\n\nvoid print_version (void)\n{\n    printf(GLOBAL_PRODUCT_NAME\" \"PROGRAM_NAME\" \"GLOBAL_VERSION\"\\n\"GLOBAL_COPYRIGHT_NOTICE\"\\n\");\n}\n\nint parse_arguments (int argc, char *argv[])\n{\n    if (argc <= 0) {\n        return 0;\n    }\n    \n    server_options.help = 0;\n    server_options.version = 0;\n    server_options.logger = LOGGER_STDOUT;\n#ifndef BADVPN_USE_WINAPI\n    server_options.logger_syslog_facility = \"daemon\";\n    server_options.logger_syslog_ident = argv[0];\n#endif\n    server_options.loglevel = -1;\n    for (int i = 0; i < BLOG_NUM_CHANNELS; i++) {\n        server_options.loglevels[i] = -1;\n    }\n    server_options.num_listen_addrs = 0;\n    server_options.udp_mtu = DEFAULT_UDP_MTU;\n    server_options.max_clients = DEFAULT_MAX_CLIENTS;\n    server_options.max_connections_for_client = DEFAULT_MAX_CONNECTIONS_FOR_CLIENT;\n    server_options.client_socket_sndbuf = CLIENT_DEFAULT_SOCKET_SEND_BUFFER;\n    server_options.local_udp_num_ports = -1;\n    server_options.local_udp_ip6_num_ports = -1;\n    server_options.unique_local_ports = 0;\n    \n    int i;\n    for (i = 1; i < argc; i++) {\n        char *arg = argv[i];\n        if (!strcmp(arg, \"--help\")) {\n            server_options.help = 1;\n        }\n        else if (!strcmp(arg, \"--version\")) {\n            server_options.version = 1;\n        }\n        else if (!strcmp(arg, \"--logger\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            char *arg2 = argv[i + 1];\n            if (!strcmp(arg2, \"stdout\")) {\n                server_options.logger = LOGGER_STDOUT;\n            }\n#ifndef BADVPN_USE_WINAPI\n            else if (!strcmp(arg2, \"syslog\")) {\n                server_options.logger = LOGGER_SYSLOG;\n            }\n#endif\n            else {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n#ifndef BADVPN_USE_WINAPI\n        else if (!strcmp(arg, \"--syslog-facility\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            server_options.logger_syslog_facility = argv[i + 1];\n            i++;\n        }\n        else if (!strcmp(arg, \"--syslog-ident\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            server_options.logger_syslog_ident = argv[i + 1];\n            i++;\n        }\n#endif\n        else if (!strcmp(arg, \"--loglevel\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((server_options.loglevel = parse_loglevel(argv[i + 1])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--channel-loglevel\")) {\n            if (2 >= argc - i) {\n                fprintf(stderr, \"%s: requires two arguments\\n\", arg);\n                return 0;\n            }\n            int channel = BLogGlobal_GetChannelByName(argv[i + 1]);\n            if (channel < 0) {\n                fprintf(stderr, \"%s: wrong channel argument\\n\", arg);\n                return 0;\n            }\n            int loglevel = parse_loglevel(argv[i + 2]);\n            if (loglevel < 0) {\n                fprintf(stderr, \"%s: wrong loglevel argument\\n\", arg);\n                return 0;\n            }\n            server_options.loglevels[channel] = loglevel;\n            i += 2;\n        }\n        else if (!strcmp(arg, \"--listen-addr\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if (server_options.num_listen_addrs == MAX_LISTEN_ADDRS) {\n                fprintf(stderr, \"%s: too many\\n\", arg);\n                return 0;\n            }\n            server_options.listen_addrs[server_options.num_listen_addrs] = argv[i + 1];\n            server_options.num_listen_addrs++;\n            i++;\n        }\n        else if (!strcmp(arg, \"--udp-mtu\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((server_options.udp_mtu = atoi(argv[i + 1])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--max-clients\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((server_options.max_clients = atoi(argv[i + 1])) <= 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--max-connections-for-client\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((server_options.max_connections_for_client = atoi(argv[i + 1])) <= 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--client-socket-sndbuf\")) {\n            if (1 >= argc - i) {\n                fprintf(stderr, \"%s: requires an argument\\n\", arg);\n                return 0;\n            }\n            if ((server_options.client_socket_sndbuf = atoi(argv[i + 1])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i++;\n        }\n        else if (!strcmp(arg, \"--local-udp-addrs\")) {\n            if (2 >= argc - i) {\n                fprintf(stderr, \"%s: requires two arguments\\n\", arg);\n                return 0;\n            }\n            server_options.local_udp_addr = argv[i + 1];\n            if ((server_options.local_udp_num_ports = atoi(argv[i + 2])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i += 2;\n        }\n        else if (!strcmp(arg, \"--local-udp-ip6-addrs\")) {\n            if (2 >= argc - i) {\n                fprintf(stderr, \"%s: requires two arguments\\n\", arg);\n                return 0;\n            }\n            server_options.local_udp_ip6_addr = argv[i + 1];\n            if ((server_options.local_udp_ip6_num_ports = atoi(argv[i + 2])) < 0) {\n                fprintf(stderr, \"%s: wrong argument\\n\", arg);\n                return 0;\n            }\n            i += 2;\n        }\n        else if (!strcmp(arg, \"--unique-local-ports\")) {\n            server_options.unique_local_ports = 1;\n        }\n        else {\n            fprintf(stderr, \"unknown option: %s\\n\", arg);\n            return 0;\n        }\n    }\n    \n    if (server_options.help || server_options.version) {\n        return 1;\n    }\n    \n    return 1;\n}\n\nint process_arguments (void)\n{\n    // resolve listen addresses\n    num_listen_addrs = 0;\n    while (num_listen_addrs < server_options.num_listen_addrs) {\n        if (!BAddr_Parse(&listen_addrs[num_listen_addrs], server_options.listen_addrs[num_listen_addrs], NULL, 0)) {\n            BLog(BLOG_ERROR, \"listen addr: BAddr_Parse failed\");\n            return 0;\n        }\n        num_listen_addrs++;\n    }\n    \n    // resolve local UDP address\n    if (server_options.local_udp_num_ports >= 0) {\n        if (!BAddr_Parse(&local_udp_addr, server_options.local_udp_addr, NULL, 0)) {\n            BLog(BLOG_ERROR, \"local udp addr: BAddr_Parse failed\");\n            return 0;\n        }\n        if (local_udp_addr.type != BADDR_TYPE_IPV4) {\n            BLog(BLOG_ERROR, \"local udp addr: must be an IPv4 address\");\n            return 0;\n        }\n    }\n    \n    // resolve local UDP/IPv6 address\n    if (server_options.local_udp_ip6_num_ports >= 0) {\n        if (!BAddr_Parse(&local_udp_ip6_addr, server_options.local_udp_ip6_addr, NULL, 0)) {\n            BLog(BLOG_ERROR, \"local udp ip6 addr: BAddr_Parse failed\");\n            return 0;\n        }\n        if (local_udp_ip6_addr.type != BADDR_TYPE_IPV6) {\n            BLog(BLOG_ERROR, \"local udp ip6 addr: must be an IPv6 address\");\n            return 0;\n        }\n    }\n    \n    return 1;\n}\n\nvoid signal_handler (void *unused)\n{\n    BLog(BLOG_NOTICE, \"termination requested\");\n    \n    // exit event loop\n    BReactor_Quit(&server_ss, 1);\n}\n\nvoid listener_handler (BListener *listener)\n{\n    if (server_num_clients == server_options.max_clients) {\n        BLog(BLOG_ERROR, \"maximum number of clients reached\");\n        goto fail0;\n    }\n    \n    // allocate structure\n    struct client *client = (struct client *)malloc(sizeof(*client));\n    if (!client) {\n        BLog(BLOG_ERROR, \"malloc failed\");\n        goto fail0;\n    }\n    \n    // accept client\n    if (!BConnection_Init(&client->con, BConnection_source_listener(listener, &client->addr), &server_ss, client, (BConnection_handler)client_connection_handler)) {\n        BLog(BLOG_ERROR, \"BConnection_Init failed\");\n        goto fail1;\n    }\n    \n    // limit socket send buffer, else our scheduling is pointless\n    if (server_options.client_socket_sndbuf > 0) {\n        if (!BConnection_SetSendBuffer(&client->con, server_options.client_socket_sndbuf)) {\n            BLog(BLOG_WARNING, \"BConnection_SetSendBuffer failed\");\n        }\n    }\n    \n    // init connection interfaces\n    BConnection_SendAsync_Init(&client->con);\n    BConnection_RecvAsync_Init(&client->con);\n    \n    // init disconnect timer\n    BTimer_Init(&client->disconnect_timer, CLIENT_DISCONNECT_TIMEOUT, (BTimer_handler)client_disconnect_timer_handler, client);\n    BReactor_SetTimer(&server_ss, &client->disconnect_timer);\n    \n    // init recv interface\n    PacketPassInterface_Init(&client->recv_if, udpgw_mtu, (PacketPassInterface_handler_send)client_recv_if_handler_send, client, BReactor_PendingGroup(&server_ss));\n    \n    // init recv decoder\n    if (!PacketProtoDecoder_Init(&client->recv_decoder, BConnection_RecvAsync_GetIf(&client->con), &client->recv_if, BReactor_PendingGroup(&server_ss), client,\n                                 (PacketProtoDecoder_handler_error)client_decoder_handler_error\n                                 )) {\n        BLog(BLOG_ERROR, \"PacketProtoDecoder_Init failed\");\n        goto fail2;\n    }\n    \n    // init send sender\n    PacketStreamSender_Init(&client->send_sender, BConnection_SendAsync_GetIf(&client->con), pp_mtu, BReactor_PendingGroup(&server_ss));\n    \n    // init send queue\n    if (!PacketPassFairQueue_Init(&client->send_queue, PacketStreamSender_GetInput(&client->send_sender), BReactor_PendingGroup(&server_ss), 0, 1)) {\n        BLog(BLOG_ERROR, \"PacketPassFairQueue_Init failed\");\n        goto fail3;\n    }\n    \n    // init connections tree\n    BAVL_Init(&client->connections_tree, OFFSET_DIFF(struct connection, conid, connections_tree_node), (BAVL_comparator)uint16_comparator, NULL);\n    \n    // init connections list\n    LinkedList1_Init(&client->connections_list);\n    \n    // set zero connections\n    client->num_connections = 0;\n    \n    // init closing connections list\n    LinkedList1_Init(&client->closing_connections_list);\n    \n    // insert to clients list\n    LinkedList1_Append(&clients_list, &client->clients_list_node);\n    server_num_clients++;\n    \n    client_log(client, BLOG_INFO, \"connected\");\n    \n    return;\n    \nfail3:\n    PacketStreamSender_Free(&client->send_sender);\n    PacketProtoDecoder_Free(&client->recv_decoder);\nfail2:\n    PacketPassInterface_Free(&client->recv_if);\n    BReactor_RemoveTimer(&server_ss, &client->disconnect_timer);\n    BConnection_RecvAsync_Free(&client->con);\n    BConnection_SendAsync_Free(&client->con);\n    BConnection_Free(&client->con);\nfail1:\n    free(client);\nfail0:\n    return;\n}\n\nvoid client_free (struct client *client)\n{\n    // allow freeing send queue flows\n    PacketPassFairQueue_PrepareFree(&client->send_queue);\n    \n    // free connections\n    while (!LinkedList1_IsEmpty(&client->connections_list)) {\n        struct connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&client->connections_list), struct connection, connections_list_node);\n        connection_free(con);\n    }\n    \n    // free closing connections\n    while (!LinkedList1_IsEmpty(&client->closing_connections_list)) {\n        struct connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&client->closing_connections_list), struct connection, closing_connections_list_node);\n        connection_free(con);\n    }\n    \n    // remove from clients list\n    LinkedList1_Remove(&clients_list, &client->clients_list_node);\n    server_num_clients--;\n    \n    // free send queue\n    PacketPassFairQueue_Free(&client->send_queue);\n    \n    // free send sender\n    PacketStreamSender_Free(&client->send_sender);\n    \n    // free recv decoder\n    PacketProtoDecoder_Free(&client->recv_decoder);\n    \n    // free recv interface\n    PacketPassInterface_Free(&client->recv_if);\n    \n    // free disconnect timer\n    BReactor_RemoveTimer(&server_ss, &client->disconnect_timer);\n    \n    // free connection interfaces\n    BConnection_RecvAsync_Free(&client->con);\n    BConnection_SendAsync_Free(&client->con);\n    \n    // free connection\n    BConnection_Free(&client->con);\n    \n    // free structure\n    free(client);\n}\n\nvoid client_logfunc (struct client *client)\n{\n    char addr[BADDR_MAX_PRINT_LEN];\n    BAddr_Print(&client->addr, addr);\n    \n    BLog_Append(\"client (%s): \", addr);\n}\n\nvoid client_log (struct client *client, int level, const char *fmt, ...)\n{\n    va_list vl;\n    va_start(vl, fmt);\n    BLog_LogViaFuncVarArg((BLog_logfunc)client_logfunc, client, BLOG_CURRENT_CHANNEL, level, fmt, vl);\n    va_end(vl);\n}\n\nvoid client_disconnect_timer_handler (struct client *client)\n{\n    client_log(client, BLOG_INFO, \"timed out, disconnecting\");\n    \n    // free client\n    client_free(client);\n}\n\nvoid client_connection_handler (struct client *client, int event)\n{\n    if (event == BCONNECTION_EVENT_RECVCLOSED) {\n        client_log(client, BLOG_INFO, \"client closed\");\n    } else {\n        client_log(client, BLOG_INFO, \"client error\");\n    }\n    \n    // free client\n    client_free(client);\n}\n\nvoid client_decoder_handler_error (struct client *client)\n{\n    client_log(client, BLOG_ERROR, \"decoder error\");\n    \n    // free client\n    client_free(client);\n}\n\nvoid client_recv_if_handler_send (struct client *client, uint8_t *data, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= udpgw_mtu)\n    \n    // accept packet\n    PacketPassInterface_Done(&client->recv_if);\n    \n    // parse header\n    if (data_len < sizeof(struct udpgw_header)) {\n        client_log(client, BLOG_ERROR, \"missing header\");\n        return;\n    }\n    struct udpgw_header header;\n    memcpy(&header, data, sizeof(header));\n    data += sizeof(header);\n    data_len -= sizeof(header);\n    uint8_t flags = ltoh8(header.flags);\n    uint16_t conid = ltoh16(header.conid);\n    \n    // reset disconnect timer\n    BReactor_SetTimer(&server_ss, &client->disconnect_timer);\n    \n    // if this is keepalive, ignore any payload\n    if ((flags & UDPGW_CLIENT_FLAG_KEEPALIVE)) {\n        client_log(client, BLOG_DEBUG, \"received keepalive\");\n        return;\n    }\n    \n    // parse address\n    BAddr orig_addr;\n    if ((flags & UDPGW_CLIENT_FLAG_IPV6)) {\n        if (data_len < sizeof(struct udpgw_addr_ipv6)) {\n            client_log(client, BLOG_ERROR, \"missing ipv6 address\");\n            return;\n        }\n        struct udpgw_addr_ipv6 addr_ipv6;\n        memcpy(&addr_ipv6, data, sizeof(addr_ipv6));\n        data += sizeof(addr_ipv6);\n        data_len -= sizeof(addr_ipv6);\n        BAddr_InitIPv6(&orig_addr, addr_ipv6.addr_ip, addr_ipv6.addr_port);\n    } else {\n        if (data_len < sizeof(struct udpgw_addr_ipv4)) {\n            client_log(client, BLOG_ERROR, \"missing ipv4 address\");\n            return;\n        }\n        struct udpgw_addr_ipv4 addr_ipv4;\n        memcpy(&addr_ipv4, data, sizeof(addr_ipv4));\n        data += sizeof(addr_ipv4);\n        data_len -= sizeof(addr_ipv4);\n        BAddr_InitIPv4(&orig_addr, addr_ipv4.addr_ip, addr_ipv4.addr_port);\n    }\n    \n    // check payload length\n    if (data_len > server_options.udp_mtu) {\n        client_log(client, BLOG_ERROR, \"too much data\");\n        return;\n    }\n    \n    // find connection\n    struct connection *con = find_connection(client, conid);\n    ASSERT(!con || !con->closing)\n    \n    // if connection exists, close it if needed\n    if (con && ((flags & UDPGW_CLIENT_FLAG_REBIND) || !BAddr_Compare(&con->orig_addr, &orig_addr))) {\n        connection_log(con, BLOG_DEBUG, \"close old\");\n        connection_close(con);\n        con = NULL;\n    }\n    \n    // if connection doesn't exists, create it\n    if (!con) {\n        // check number of connections\n        if (client->num_connections == server_options.max_connections_for_client) {\n            // close least recently used connection\n            con = UPPER_OBJECT(LinkedList1_GetFirst(&client->connections_list), struct connection, connections_list_node);\n            connection_close(con);\n        }\n        \n        // if this is DNS, replace actual address, but keep still remember the orig_addr\n        BAddr addr = orig_addr;\n        if ((flags & UDPGW_CLIENT_FLAG_DNS)) {\n            maybe_update_dns();\n            if (dns_addr.type == BADDR_TYPE_NONE) {\n                client_log(client, BLOG_WARNING, \"received DNS packet, but no DNS server available\");\n            } else {\n                client_log(client, BLOG_DEBUG, \"received DNS\");\n                addr = dns_addr;\n            }\n        }\n        \n        // create new connection\n        connection_init(client, conid, addr, orig_addr, data, data_len);\n    } else {\n        // submit packet to existing connection\n        connection_send_to_udp(con, data, data_len);\n    }\n}\n\nint get_local_num_ports (int addr_type)\n{\n    switch (addr_type) {\n        case BADDR_TYPE_IPV4: return server_options.local_udp_num_ports;\n        case BADDR_TYPE_IPV6: return server_options.local_udp_ip6_num_ports;\n        default: ASSERT(0); return 0;\n    }\n}\n\nBAddr get_local_addr (int addr_type)\n{\n    ASSERT(get_local_num_ports(addr_type) >= 0)\n    \n    switch (addr_type) {\n        case BADDR_TYPE_IPV4: return local_udp_addr;\n        case BADDR_TYPE_IPV6: return local_udp_ip6_addr;\n        default: ASSERT(0); return BAddr_MakeNone();\n    }\n}\n\nuint8_t * build_port_usage_array_and_find_least_used_connection (BAddr remote_addr, struct connection **out_con)\n{\n    ASSERT(remote_addr.type == BADDR_TYPE_IPV4 || remote_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(get_local_num_ports(remote_addr.type) >= 0)\n    \n    int local_num_ports = get_local_num_ports(remote_addr.type);\n    \n    // allocate port usage array\n    uint8_t *port_usage = (uint8_t *)BAllocSize(bsize_fromint(local_num_ports));\n    if (!port_usage) {\n        return NULL;\n    }\n    \n    // zero array\n    memset(port_usage, 0, local_num_ports);\n    \n    struct connection *least_con = NULL;\n    \n    // flag inappropriate ports (those with the same remote address)\n    for (LinkedList1Node *ln = LinkedList1_GetFirst(&clients_list); ln; ln = LinkedList1Node_Next(ln)) {\n        struct client *client = UPPER_OBJECT(ln, struct client, clients_list_node);\n        \n        for (LinkedList1Node *ln2 = LinkedList1_GetFirst(&client->connections_list); ln2; ln2 = LinkedList1Node_Next(ln2)) {\n            struct connection *con = UPPER_OBJECT(ln2, struct connection, connections_list_node);\n            ASSERT(con->client == client)\n            ASSERT(!con->closing)\n            \n            if (con->addr.type != remote_addr.type || con->local_port_index < 0) {\n                continue;\n            }\n            ASSERT(con->local_port_index < local_num_ports)\n            \n            if (server_options.unique_local_ports) {\n                BIPAddr ip1;\n                BIPAddr ip2;\n                BAddr_GetIPAddr(&con->addr, &ip1);\n                BAddr_GetIPAddr(&remote_addr, &ip2);\n                if (!BIPAddr_Compare(&ip1, &ip2)) {\n                    continue;\n                }\n            } else {\n                if (!BAddr_Compare(&con->addr, &remote_addr)) {\n                    continue;\n                }\n            }\n            \n            port_usage[con->local_port_index] = 1;\n            \n            if (!PacketPassFairQueueFlow_IsBusy(&con->send_qflow)) {\n                if (!least_con || con->last_use_time < least_con->last_use_time) {\n                    least_con = con;\n                }\n            }\n        }\n    }\n    \n    *out_con = least_con;\n    return port_usage;\n}\n\nvoid connection_init (struct client *client, uint16_t conid, BAddr addr, BAddr orig_addr, const uint8_t *data, int data_len)\n{\n    ASSERT(client->num_connections < server_options.max_connections_for_client)\n    ASSERT(!find_connection(client, conid))\n    BAddr_Assert(&addr);\n    ASSERT(addr.type == BADDR_TYPE_IPV4 || addr.type == BADDR_TYPE_IPV6)\n    ASSERT(orig_addr.type == BADDR_TYPE_IPV4 || orig_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= server_options.udp_mtu)\n    \n    // allocate structure\n    struct connection *con = (struct connection *)malloc(sizeof(*con));\n    if (!con) {\n        client_log(client, BLOG_ERROR, \"malloc failed\");\n        goto fail0;\n    }\n    \n    // init arguments\n    con->client = client;\n    con->conid = conid;\n    con->addr = addr;\n    con->orig_addr = orig_addr;\n    con->first_data = data;\n    con->first_data_len = data_len;\n    \n    // set last use time\n    con->last_use_time = btime_gettime();\n    \n    // set not closing\n    con->closing = 0;\n    \n    // init first job\n    BPending_Init(&con->first_job, BReactor_PendingGroup(&server_ss), (BPending_handler)connection_first_job_handler, con);\n    BPending_Set(&con->first_job);\n    \n    // init send queue flow\n    PacketPassFairQueueFlow_Init(&con->send_qflow, &client->send_queue);\n    \n    // init send PacketProtoFlow\n    if (!PacketProtoFlow_Init(&con->send_ppflow, udpgw_mtu, CONNECTION_CLIENT_BUFFER_SIZE, PacketPassFairQueueFlow_GetInput(&con->send_qflow), BReactor_PendingGroup(&server_ss))) {\n        client_log(client, BLOG_ERROR, \"PacketProtoFlow_Init failed\");\n        goto fail1;\n    }\n    con->send_if = PacketProtoFlow_GetInput(&con->send_ppflow);\n    \n    // init UDP dgram\n    if (!BDatagram_Init(&con->udp_dgram, addr.type, &server_ss, con, (BDatagram_handler)connection_dgram_handler_event)) {\n        client_log(client, BLOG_ERROR, \"BDatagram_Init failed\");\n        goto fail2;\n    }\n    \n    con->local_port_index = -1;\n    \n    int local_num_ports = get_local_num_ports(addr.type);\n    \n    if (local_num_ports >= 0) {\n        // build port usage array, find least used connection\n        struct connection *least_con;\n        uint8_t *port_usage = build_port_usage_array_and_find_least_used_connection(addr, &least_con);\n        if (!port_usage) {\n            client_log(client, BLOG_ERROR, \"build_port_usage_array failed\");\n            goto failed;\n        }\n        \n        // set SO_REUSEADDR\n        if (!BDatagram_SetReuseAddr(&con->udp_dgram, 1)) {\n            client_log(client, BLOG_ERROR, \"set SO_REUSEADDR failed\");\n            goto failed;\n        }\n        \n        // get starting local address\n        BAddr local_addr = get_local_addr(addr.type);\n        \n        // try different ports\n        for (int i = 0; i < local_num_ports; i++) {\n            // skip inappropriate ports\n            if (port_usage[i]) {\n                continue;\n            }\n            \n            BAddr bind_addr = local_addr;\n            BAddr_SetPort(&bind_addr, hton16(ntoh16(BAddr_GetPort(&bind_addr)) + (uint16_t)i));\n            if (BDatagram_Bind(&con->udp_dgram, bind_addr)) {\n                // remember which port we're using\n                con->local_port_index = i;\n                goto cont;\n            }\n        }\n        \n        // try closing an unused connection with the same remote addr\n        if (!least_con) {\n            goto failed;\n        }\n        \n        ASSERT(least_con->addr.type == addr.type)\n        ASSERT(least_con->local_port_index >= 0)\n        ASSERT(least_con->local_port_index < local_num_ports)\n        ASSERT(!PacketPassFairQueueFlow_IsBusy(&least_con->send_qflow))\n        \n        int i = least_con->local_port_index;\n        \n        BLog(BLOG_INFO, \"closing connection for its remote address\");\n        \n        // close the offending connection\n        connection_close(least_con);\n        \n        // try binding to its port\n        BAddr bind_addr = local_addr;\n        BAddr_SetPort(&bind_addr, hton16(ntoh16(BAddr_GetPort(&bind_addr)) + (uint16_t)i));\n        if (BDatagram_Bind(&con->udp_dgram, bind_addr)) {\n            // remember which port we're using\n            con->local_port_index = i;\n            goto cont;\n        }\n        \n    failed:\n        client_log(client, BLOG_WARNING, \"failed to bind to any local address; proceeding regardless\");\n    cont:;\n        BFree(port_usage);\n    }\n    \n    // set UDP dgram send address\n    BIPAddr ipaddr;\n    BIPAddr_InitInvalid(&ipaddr);\n    BDatagram_SetSendAddrs(&con->udp_dgram, addr, ipaddr);\n    \n    // init UDP dgram interfaces\n    BDatagram_SendAsync_Init(&con->udp_dgram, server_options.udp_mtu);\n    BDatagram_RecvAsync_Init(&con->udp_dgram, server_options.udp_mtu);\n    \n    // init UDP writer\n    BufferWriter_Init(&con->udp_send_writer, server_options.udp_mtu, BReactor_PendingGroup(&server_ss));\n    \n    // init UDP buffer\n    if (!PacketBuffer_Init(&con->udp_send_buffer, BufferWriter_GetOutput(&con->udp_send_writer), BDatagram_SendAsync_GetIf(&con->udp_dgram), CONNECTION_UDP_BUFFER_SIZE, BReactor_PendingGroup(&server_ss))) {\n        client_log(client, BLOG_ERROR, \"PacketBuffer_Init failed\");\n        goto fail4;\n    }\n    \n    // init UDP recv interface\n    PacketPassInterface_Init(&con->udp_recv_if, server_options.udp_mtu, (PacketPassInterface_handler_send)connection_udp_recv_if_handler_send, con, BReactor_PendingGroup(&server_ss));\n    \n    // init UDP recv buffer\n    if (!SinglePacketBuffer_Init(&con->udp_recv_buffer, BDatagram_RecvAsync_GetIf(&con->udp_dgram), &con->udp_recv_if, BReactor_PendingGroup(&server_ss))) {\n        client_log(client, BLOG_ERROR, \"SinglePacketBuffer_Init failed\");\n        goto fail5;\n    }\n    \n    // insert to client's connections tree\n    ASSERT_EXECUTE(BAVL_Insert(&client->connections_tree, &con->connections_tree_node, NULL))\n    \n    // insert to client's connections list\n    LinkedList1_Append(&client->connections_list, &con->connections_list_node);\n    \n    // increment number of connections\n    client->num_connections++;\n    \n    connection_log(con, BLOG_DEBUG, \"initialized\");\n    \n    return;\n    \nfail5:\n    PacketPassInterface_Free(&con->udp_recv_if);\n    PacketBuffer_Free(&con->udp_send_buffer);\nfail4:\n    BufferWriter_Free(&con->udp_send_writer);\n    BDatagram_RecvAsync_Free(&con->udp_dgram);\n    BDatagram_SendAsync_Free(&con->udp_dgram);\n    BDatagram_Free(&con->udp_dgram);\nfail2:\n    PacketProtoFlow_Free(&con->send_ppflow);\nfail1:\n    PacketPassFairQueueFlow_Free(&con->send_qflow);\n    BPending_Free(&con->first_job);\n    free(con);\nfail0:\n    return;\n}\n\nvoid connection_free (struct connection *con)\n{\n    struct client *client = con->client;\n    PacketPassFairQueueFlow_AssertFree(&con->send_qflow);\n    \n    if (con->closing) {\n        // remove from client's closing connections list\n        LinkedList1_Remove(&client->closing_connections_list, &con->closing_connections_list_node);\n    } else {\n        // decrement number of connections\n        client->num_connections--;\n        \n        // remove from client's connections list\n        LinkedList1_Remove(&client->connections_list, &con->connections_list_node);\n        \n        // remove from client's connections tree\n        BAVL_Remove(&client->connections_tree, &con->connections_tree_node);\n        \n        // free UDP\n        connection_free_udp(con);\n    }\n    \n    // free send PacketProtoFlow\n    PacketProtoFlow_Free(&con->send_ppflow);\n    \n    // free send queue flow\n    PacketPassFairQueueFlow_Free(&con->send_qflow);\n    \n    // free first job\n    BPending_Free(&con->first_job);\n    \n    // free structure\n    free(con);\n}\n\nvoid connection_logfunc (struct connection *con)\n{\n    client_logfunc(con->client);\n    \n    if (con->closing) {\n        BLog_Append(\"old connection %\"PRIu16\": \", con->conid);\n    } else {\n        BLog_Append(\"connection %\"PRIu16\": \", con->conid);\n    }\n}\n\nvoid connection_log (struct connection *con, int level, const char *fmt, ...)\n{\n    va_list vl;\n    va_start(vl, fmt);\n    BLog_LogViaFuncVarArg((BLog_logfunc)connection_logfunc, con, BLOG_CURRENT_CHANNEL, level, fmt, vl);\n    va_end(vl);\n}\n\nvoid connection_free_udp (struct connection *con)\n{\n    // free UDP receive buffer\n    SinglePacketBuffer_Free(&con->udp_recv_buffer);\n    \n    // free UDP receive interface\n    PacketPassInterface_Free(&con->udp_recv_if);\n    \n    // free UDP buffer\n    PacketBuffer_Free(&con->udp_send_buffer);\n    \n    // free UDP writer\n    BufferWriter_Free(&con->udp_send_writer);\n    \n    // free UDP dgram interfaces\n    BDatagram_RecvAsync_Free(&con->udp_dgram);\n    BDatagram_SendAsync_Free(&con->udp_dgram);\n    \n    // free UDP dgram\n    BDatagram_Free(&con->udp_dgram);\n}\n\nvoid connection_first_job_handler (struct connection *con)\n{\n    ASSERT(!con->closing)\n    \n    connection_send_to_udp(con, con->first_data, con->first_data_len);\n}\n\nvoid connection_send_to_client (struct connection *con, uint8_t flags, const uint8_t *data, int data_len)\n{\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= server_options.udp_mtu)\n    \n    size_t addr_len = (con->orig_addr.type == BADDR_TYPE_IPV6) ? sizeof(struct udpgw_addr_ipv6) :\n    (con->orig_addr.type == BADDR_TYPE_IPV4) ? sizeof(struct udpgw_addr_ipv4) : 0;\n    if (data_len > udpgw_mtu - (int)(sizeof(struct udpgw_header) + addr_len)) {\n        connection_log(con, BLOG_WARNING, \"packet is too large, cannot send to client\");\n        return;\n    }\n    \n    // get buffer location\n    uint8_t *out;\n    if (!BufferWriter_StartPacket(con->send_if, &out)) {\n        connection_log(con, BLOG_ERROR, \"out of client buffer\");\n        return;\n    }\n    int out_pos = 0;\n    \n    if (con->orig_addr.type == BADDR_TYPE_IPV6) {\n        flags |= UDPGW_CLIENT_FLAG_IPV6;\n    }\n    \n    // write header\n    struct udpgw_header header;\n    header.flags = htol8(flags);\n    header.conid = htol16(con->conid);\n    memcpy(out + out_pos, &header, sizeof(header));\n    out_pos += sizeof(header);\n    \n    // write address\n    switch (con->orig_addr.type) {\n        case BADDR_TYPE_IPV4: {\n            struct udpgw_addr_ipv4 addr_ipv4;\n            addr_ipv4.addr_ip = con->orig_addr.ipv4.ip;\n            addr_ipv4.addr_port = con->orig_addr.ipv4.port;\n            memcpy(out + out_pos, &addr_ipv4, sizeof(addr_ipv4));\n            out_pos += sizeof(addr_ipv4);\n        } break;\n        case BADDR_TYPE_IPV6: {\n            struct udpgw_addr_ipv6 addr_ipv6;\n            memcpy(addr_ipv6.addr_ip, con->orig_addr.ipv6.ip, sizeof(addr_ipv6.addr_ip));\n            addr_ipv6.addr_port = con->orig_addr.ipv6.port;\n            memcpy(out + out_pos, &addr_ipv6, sizeof(addr_ipv6));\n            out_pos += sizeof(addr_ipv6);\n        } break;\n    }\n    \n    // write message\n    memcpy(out + out_pos, data, data_len);\n    out_pos += data_len;\n    \n    // submit written message\n    ASSERT(out_pos <= udpgw_mtu)\n    BufferWriter_EndPacket(con->send_if, out_pos);\n}\n\nint connection_send_to_udp (struct connection *con, const uint8_t *data, int data_len)\n{\n    struct client *client = con->client;\n    ASSERT(!con->closing)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= server_options.udp_mtu)\n    \n    connection_log(con, BLOG_DEBUG, \"from client %d bytes\", data_len);\n    \n    // set last use time\n    con->last_use_time = btime_gettime();\n    \n    // move connection to front\n    LinkedList1_Remove(&client->connections_list, &con->connections_list_node);\n    LinkedList1_Append(&client->connections_list, &con->connections_list_node);\n    \n    // get buffer location\n    uint8_t *out;\n    if (!BufferWriter_StartPacket(&con->udp_send_writer, &out)) {\n        connection_log(con, BLOG_ERROR, \"out of UDP buffer\");\n        return 0;\n    }\n    \n    // write message\n    memcpy(out, data, data_len);\n    \n    // submit written message\n    BufferWriter_EndPacket(&con->udp_send_writer, data_len);\n    \n    return 1;\n}\n\nvoid connection_close (struct connection *con)\n{\n    struct client *client = con->client;\n    ASSERT(!con->closing)\n    \n    // if possible, free connection immediately\n    if (!PacketPassFairQueueFlow_IsBusy(&con->send_qflow)) {\n        connection_free(con);\n        return;\n    }\n    \n    connection_log(con, BLOG_DEBUG, \"closing later\");\n    \n    // decrement number of connections\n    client->num_connections--;\n    \n    // remove from client's connections list\n    LinkedList1_Remove(&client->connections_list, &con->connections_list_node);\n    \n    // remove from client's connections tree\n    BAVL_Remove(&client->connections_tree, &con->connections_tree_node);\n    \n    // free UDP\n    connection_free_udp(con);\n    \n    // insert to client's closing connections list\n    LinkedList1_Append(&client->closing_connections_list, &con->closing_connections_list_node);\n    \n    // set busy handler\n    PacketPassFairQueueFlow_SetBusyHandler(&con->send_qflow, (PacketPassFairQueue_handler_busy)connection_send_qflow_busy_handler, con);\n    \n    // unset first job\n    BPending_Unset(&con->first_job);\n    \n    // set closing\n    con->closing = 1;\n}\n\nvoid connection_send_qflow_busy_handler (struct connection *con)\n{\n    ASSERT(con->closing)\n    PacketPassFairQueueFlow_AssertFree(&con->send_qflow);\n    \n    connection_log(con, BLOG_DEBUG, \"closing finally\");\n    \n    // free connection\n    connection_free(con);\n}\n\nvoid connection_dgram_handler_event (struct connection *con, int event)\n{\n    ASSERT(!con->closing)\n    \n    connection_log(con, BLOG_INFO, \"UDP error\");\n    \n    // close connection\n    connection_close(con);\n}\n\nvoid connection_udp_recv_if_handler_send (struct connection *con, uint8_t *data, int data_len)\n{\n    struct client *client = con->client;\n    ASSERT(!con->closing)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= server_options.udp_mtu)\n    \n    connection_log(con, BLOG_DEBUG, \"from UDP %d bytes\", data_len);\n    \n    // set last use time\n    con->last_use_time = btime_gettime();\n    \n    // move connection to front\n    LinkedList1_Remove(&client->connections_list, &con->connections_list_node);\n    LinkedList1_Append(&client->connections_list, &con->connections_list_node);\n    \n    // accept packet\n    PacketPassInterface_Done(&con->udp_recv_if);\n    \n    // send packet to client\n    connection_send_to_client(con, 0, data, data_len);\n}\n\nstruct connection * find_connection (struct client *client, uint16_t conid)\n{\n    BAVLNode *tree_node = BAVL_LookupExact(&client->connections_tree, &conid);\n    if (!tree_node) {\n        return NULL;\n    }\n    struct connection *con = UPPER_OBJECT(tree_node, struct connection, connections_tree_node);\n    ASSERT(con->conid == conid)\n    ASSERT(!con->closing)\n    \n    return con;\n}\n\nint uint16_comparator (void *unused, uint16_t *v1, uint16_t *v2)\n{\n    return B_COMPARE(*v1, *v2);\n}\n\nvoid maybe_update_dns (void)\n{\n#ifndef BADVPN_USE_WINAPI\n    btime_t now = btime_gettime();\n    if (now < btime_add(last_dns_update_time, DNS_UPDATE_TIME)) {\n        return;\n    }\n    last_dns_update_time = now;\n    BLog(BLOG_DEBUG, \"update dns\");\n    \n    if (res_init() != 0) {\n        BLog(BLOG_ERROR, \"res_init failed\");\n        goto fail;\n    }\n    \n    if (_res.nscount == 0) {\n        BLog(BLOG_ERROR, \"no name servers available\");\n        goto fail;\n    }\n    \n    BAddr addr;\n    BAddr_InitIPv4(&addr, _res.nsaddr_list[0].sin_addr.s_addr, hton16(53));\n    \n    if (!BAddr_Compare(&addr, &dns_addr)) {\n        char str[BADDR_MAX_PRINT_LEN];\n        BAddr_Print(&addr, str);\n        BLog(BLOG_INFO, \"using DNS server %s\", str);\n    }\n    \n    dns_addr = addr;\n    return;\n    \nfail:\n    BAddr_InitNone(&dns_addr);\n#endif\n}"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/udpgw/udpgw.h",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// name of the program\n#define PROGRAM_NAME \"udpgw\"\n\n// maxiumum listen addresses\n#define MAX_LISTEN_ADDRS 16\n\n// maximum datagram size\n#define DEFAULT_UDP_MTU 65520\n\n// connection buffer size for sending to client, in packets\n#define CONNECTION_CLIENT_BUFFER_SIZE 1\n\n// connection buffer size for sending to UDP, in packets\n#define CONNECTION_UDP_BUFFER_SIZE 1\n\n// maximum number of clients\n#define DEFAULT_MAX_CLIENTS 3\n\n// maximum connections for client\n#define DEFAULT_MAX_CONNECTIONS_FOR_CLIENT 256\n\n// how long after nothing has been received to disconnect a client\n#define CLIENT_DISCONNECT_TIMEOUT 20000\n\n// SO_SNDBFUF socket option for clients, 0 to not set\n#define CLIENT_DEFAULT_SOCKET_SEND_BUFFER 1048576\n\nextern int udpgw_main (int argc, char **argv);"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/udpgw_client/UdpGwClient.c",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#include <stdlib.h>\n#include <string.h>\n\n#include \"misc/offset.h\"\n#include \"misc/byteorder.h\"\n#include \"misc/compare.h\"\n#include \"base/BLog.h\"\n\n#include \"udpgw_client/UdpGwClient.h\"\n\n#include \"generated/blog_channel_UdpGwClient.h\"\n\nstatic int uint16_comparator (void *unused, uint16_t *v1, uint16_t *v2);\nstatic int conaddr_comparator (void *unused, struct UdpGwClient_conaddr *v1, struct UdpGwClient_conaddr *v2);\nstatic void free_server (UdpGwClient *o);\nstatic void decoder_handler_error (UdpGwClient *o);\nstatic void recv_interface_handler_send (UdpGwClient *o, uint8_t *data, int data_len);\nstatic void send_monitor_handler (UdpGwClient *o);\nstatic void keepalive_if_handler_done (UdpGwClient *o);\nstatic struct UdpGwClient_connection * find_connection_by_conaddr (UdpGwClient *o, struct UdpGwClient_conaddr conaddr);\nstatic struct UdpGwClient_connection * find_connection_by_conid (UdpGwClient *o, uint16_t conid);\nstatic uint16_t find_unused_conid (UdpGwClient *o);\nstatic void connection_init (UdpGwClient *o, struct UdpGwClient_conaddr conaddr, uint8_t flags, const uint8_t *data, int data_len);\nstatic void connection_free (struct UdpGwClient_connection *con);\nstatic void connection_first_job_handler (struct UdpGwClient_connection *con);\nstatic void connection_send (struct UdpGwClient_connection *con, uint8_t flags, const uint8_t *data, int data_len);\nstatic struct UdpGwClient_connection * reuse_connection (UdpGwClient *o, struct UdpGwClient_conaddr conaddr);\n\nstatic int uint16_comparator (void *unused, uint16_t *v1, uint16_t *v2)\n{\n    return B_COMPARE(*v1, *v2);\n}\n\nstatic int conaddr_comparator (void *unused, struct UdpGwClient_conaddr *v1, struct UdpGwClient_conaddr *v2)\n{\n    int r = BAddr_CompareOrder(&v1->remote_addr, &v2->remote_addr);\n    if (r) {\n        return r;\n    }\n    return BAddr_CompareOrder(&v1->local_addr, &v2->local_addr);\n}\n\nstatic void free_server (UdpGwClient *o)\n{\n    // disconnect send connector\n    PacketPassConnector_DisconnectOutput(&o->send_connector);\n    \n    // free send sender\n    PacketStreamSender_Free(&o->send_sender);\n    \n    // free receive decoder\n    PacketProtoDecoder_Free(&o->recv_decoder);\n    \n    // free receive interface\n    PacketPassInterface_Free(&o->recv_if);\n}\n\nstatic void decoder_handler_error (UdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->have_server)\n    \n    BLog(BLOG_ERROR, \"decoder error\");\n    \n    // report error\n    o->handler_servererror(o->user);\n    return;\n}\n\nstatic void recv_interface_handler_send (UdpGwClient *o, uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->have_server)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->udpgw_mtu)\n    \n    // accept packet\n    PacketPassInterface_Done(&o->recv_if);\n    \n    // check header\n    if (data_len < sizeof(struct udpgw_header)) {\n        BLog(BLOG_ERROR, \"missing header\");\n        return;\n    }\n    struct udpgw_header header;\n    memcpy(&header, data, sizeof(header));\n    data += sizeof(header);\n    data_len -= sizeof(header);\n    uint8_t flags = ltoh8(header.flags);\n    uint16_t conid = ltoh16(header.conid);\n    \n    // parse address\n    BAddr remote_addr;\n    if ((flags & UDPGW_CLIENT_FLAG_IPV6)) {\n        if (data_len < sizeof(struct udpgw_addr_ipv6)) {\n            BLog(BLOG_ERROR, \"missing ipv6 address\");\n            return;\n        }\n        struct udpgw_addr_ipv6 addr_ipv6;\n        memcpy(&addr_ipv6, data, sizeof(addr_ipv6));\n        data += sizeof(addr_ipv6);\n        data_len -= sizeof(addr_ipv6);\n        BAddr_InitIPv6(&remote_addr, addr_ipv6.addr_ip, addr_ipv6.addr_port);\n    } else {\n        if (data_len < sizeof(struct udpgw_addr_ipv4)) {\n            BLog(BLOG_ERROR, \"missing ipv4 address\");\n            return;\n        }\n        struct udpgw_addr_ipv4 addr_ipv4;\n        memcpy(&addr_ipv4, data, sizeof(addr_ipv4));\n        data += sizeof(addr_ipv4);\n        data_len -= sizeof(addr_ipv4);\n        BAddr_InitIPv4(&remote_addr, addr_ipv4.addr_ip, addr_ipv4.addr_port);\n    }\n    \n    // check remaining data\n    if (data_len > o->udp_mtu) {\n        BLog(BLOG_ERROR, \"too much data\");\n        return;\n    }\n    \n    // find connection\n    struct UdpGwClient_connection *con = find_connection_by_conid(o, conid);\n    if (!con) {\n        BLog(BLOG_ERROR, \"unknown conid\");\n        return;\n    }\n    \n    // check remote address\n    if (BAddr_CompareOrder(&con->conaddr.remote_addr, &remote_addr) != 0) {\n        BLog(BLOG_ERROR, \"wrong remote address\");\n        return;\n    }\n    \n    // move connection to front of the list\n    LinkedList1_Remove(&o->connections_list, &con->connections_list_node);\n    LinkedList1_Append(&o->connections_list, &con->connections_list_node);\n    \n    // pass packet to user\n    o->handler_received(o->user, con->conaddr.local_addr, con->conaddr.remote_addr, data, data_len);\n    return;\n}\n\nstatic void send_monitor_handler (UdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    \n    if (o->keepalive_sending) {\n        return;\n    }\n    \n    BLog(BLOG_INFO, \"keepalive\");\n    \n    // send keepalive\n    PacketPassInterface_Sender_Send(o->keepalive_if, (uint8_t *)&o->keepalive_packet, sizeof(o->keepalive_packet));\n    \n    // set sending keep-alive\n    o->keepalive_sending = 1;\n}\n\nstatic void keepalive_if_handler_done (UdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->keepalive_sending)\n    \n    // set not sending keepalive\n    o->keepalive_sending = 0;\n}\n\nstatic struct UdpGwClient_connection * find_connection_by_conaddr (UdpGwClient *o, struct UdpGwClient_conaddr conaddr)\n{\n    BAVLNode *tree_node = BAVL_LookupExact(&o->connections_tree_by_conaddr, &conaddr);\n    if (!tree_node) {\n        return NULL;\n    }\n    \n    return UPPER_OBJECT(tree_node, struct UdpGwClient_connection, connections_tree_by_conaddr_node);\n}\n\nstatic struct UdpGwClient_connection * find_connection_by_conid (UdpGwClient *o, uint16_t conid)\n{\n    BAVLNode *tree_node = BAVL_LookupExact(&o->connections_tree_by_conid, &conid);\n    if (!tree_node) {\n        return NULL;\n    }\n    \n    return UPPER_OBJECT(tree_node, struct UdpGwClient_connection, connections_tree_by_conid_node);\n}\n\nstatic uint16_t find_unused_conid (UdpGwClient *o)\n{\n    ASSERT(o->num_connections < o->max_connections)\n    \n    while (1) {\n        if (!find_connection_by_conid(o, o->next_conid)) {\n            return o->next_conid;\n        }\n        \n        if (o->next_conid == o->max_connections - 1) {\n            o->next_conid = 0;\n        } else {\n            o->next_conid++;\n        }\n    }\n}\n\nstatic void connection_init (UdpGwClient *o, struct UdpGwClient_conaddr conaddr, uint8_t flags, const uint8_t *data, int data_len)\n{\n    ASSERT(o->num_connections < o->max_connections)\n    ASSERT(!find_connection_by_conaddr(o, conaddr))\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->udp_mtu)\n    \n    // allocate structure\n    struct UdpGwClient_connection *con = (struct UdpGwClient_connection *)malloc(sizeof(*con));\n    if (!con) {\n        BLog(BLOG_ERROR, \"malloc failed\");\n        goto fail0;\n    }\n    \n    // init arguments\n    con->client = o;\n    con->conaddr = conaddr;\n    con->first_flags = flags;\n    con->first_data = data;\n    con->first_data_len = data_len;\n    \n    // allocate conid\n    con->conid = find_unused_conid(o);\n    \n    // init first job\n    BPending_Init(&con->first_job, BReactor_PendingGroup(o->reactor), (BPending_handler)connection_first_job_handler, con);\n    BPending_Set(&con->first_job);\n    \n    // init queue flow\n    PacketPassFairQueueFlow_Init(&con->send_qflow, &o->send_queue);\n    \n    // init PacketProtoFlow\n    if (!PacketProtoFlow_Init(&con->send_ppflow, o->udpgw_mtu, o->send_buffer_size, PacketPassFairQueueFlow_GetInput(&con->send_qflow), BReactor_PendingGroup(o->reactor))) {\n        BLog(BLOG_ERROR, \"PacketProtoFlow_Init failed\");\n        goto fail1;\n    }\n    con->send_if = PacketProtoFlow_GetInput(&con->send_ppflow);\n    \n    // insert to connections tree by conaddr\n    ASSERT_EXECUTE(BAVL_Insert(&o->connections_tree_by_conaddr, &con->connections_tree_by_conaddr_node, NULL))\n    \n    // insert to connections tree by conid\n    ASSERT_EXECUTE(BAVL_Insert(&o->connections_tree_by_conid, &con->connections_tree_by_conid_node, NULL))\n    \n    // insert to connections list\n    LinkedList1_Append(&o->connections_list, &con->connections_list_node);\n    \n    // increment number of connections\n    o->num_connections++;\n    \n    return;\n    \nfail1:\n    PacketPassFairQueueFlow_Free(&con->send_qflow);\n    BPending_Free(&con->first_job);\n    free(con);\nfail0:\n    return;\n}\n\nstatic void connection_free (struct UdpGwClient_connection *con)\n{\n    UdpGwClient *o = con->client;\n    PacketPassFairQueueFlow_AssertFree(&con->send_qflow);\n    \n    // decrement number of connections\n    o->num_connections--;\n    \n    // remove from connections list\n    LinkedList1_Remove(&o->connections_list, &con->connections_list_node);\n    \n    // remove from connections tree by conid\n    BAVL_Remove(&o->connections_tree_by_conid, &con->connections_tree_by_conid_node);\n    \n    // remove from connections tree by conaddr\n    BAVL_Remove(&o->connections_tree_by_conaddr, &con->connections_tree_by_conaddr_node);\n    \n    // free PacketProtoFlow\n    PacketProtoFlow_Free(&con->send_ppflow);\n    \n    // free queue flow\n    PacketPassFairQueueFlow_Free(&con->send_qflow);\n    \n    // free first job\n    BPending_Free(&con->first_job);\n    \n    // free structure\n    free(con);\n}\n\nstatic void connection_first_job_handler (struct UdpGwClient_connection *con)\n{\n    connection_send(con, UDPGW_CLIENT_FLAG_REBIND|con->first_flags, con->first_data, con->first_data_len);\n}\n\nstatic void connection_send (struct UdpGwClient_connection *con, uint8_t flags, const uint8_t *data, int data_len)\n{\n    UdpGwClient *o = con->client;\n    B_USE(o)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->udp_mtu)\n    \n    // get buffer location\n    uint8_t *out;\n    if (!BufferWriter_StartPacket(con->send_if, &out)) {\n        BLog(BLOG_ERROR, \"out of buffer\");\n        return;\n    }\n    int out_pos = 0;\n    \n    if (con->conaddr.remote_addr.type == BADDR_TYPE_IPV6) {\n        flags |= UDPGW_CLIENT_FLAG_IPV6;\n    }\n    \n    // write header\n    struct udpgw_header header;\n    header.flags = ltoh8(flags);\n    header.conid = ltoh16(con->conid);\n    memcpy(out + out_pos, &header, sizeof(header));\n    out_pos += sizeof(header);\n    \n    // write address\n    switch (con->conaddr.remote_addr.type) {\n        case BADDR_TYPE_IPV4: {\n            struct udpgw_addr_ipv4 addr_ipv4;\n            addr_ipv4.addr_ip = con->conaddr.remote_addr.ipv4.ip;\n            addr_ipv4.addr_port = con->conaddr.remote_addr.ipv4.port;\n            memcpy(out + out_pos, &addr_ipv4, sizeof(addr_ipv4));\n            out_pos += sizeof(addr_ipv4);\n        } break;\n        case BADDR_TYPE_IPV6: {\n            struct udpgw_addr_ipv6 addr_ipv6;\n            memcpy(addr_ipv6.addr_ip, con->conaddr.remote_addr.ipv6.ip, sizeof(addr_ipv6.addr_ip));\n            addr_ipv6.addr_port = con->conaddr.remote_addr.ipv6.port;\n            memcpy(out + out_pos, &addr_ipv6, sizeof(addr_ipv6));\n            out_pos += sizeof(addr_ipv6);\n        } break;\n    }\n    \n    // write packet to buffer\n    memcpy(out + out_pos, data, data_len);\n    out_pos += data_len;\n    \n    // submit packet to buffer\n    BufferWriter_EndPacket(con->send_if, out_pos);\n}\n\nstatic struct UdpGwClient_connection * reuse_connection (UdpGwClient *o, struct UdpGwClient_conaddr conaddr)\n{\n    ASSERT(!find_connection_by_conaddr(o, conaddr))\n    ASSERT(o->num_connections > 0)\n    \n    // get least recently used connection\n    struct UdpGwClient_connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&o->connections_list), struct UdpGwClient_connection, connections_list_node);\n    \n    // remove from connections tree by conaddr\n    BAVL_Remove(&o->connections_tree_by_conaddr, &con->connections_tree_by_conaddr_node);\n    \n    // set new conaddr\n    con->conaddr = conaddr;\n    \n    // insert to connections tree by conaddr\n    ASSERT_EXECUTE(BAVL_Insert(&o->connections_tree_by_conaddr, &con->connections_tree_by_conaddr_node, NULL))\n    \n    return con;\n}\n\nint UdpGwClient_Init (UdpGwClient *o, int udp_mtu, int max_connections, int send_buffer_size, btime_t keepalive_time, BReactor *reactor, void *user,\n                      UdpGwClient_handler_servererror handler_servererror,\n                      UdpGwClient_handler_received handler_received)\n{\n    ASSERT(udp_mtu >= 0)\n    ASSERT(udpgw_compute_mtu(udp_mtu) >= 0)\n    ASSERT(udpgw_compute_mtu(udp_mtu) <= PACKETPROTO_MAXPAYLOAD)\n    ASSERT(max_connections > 0)\n    ASSERT(send_buffer_size > 0)\n    \n    // init arguments\n    o->udp_mtu = udp_mtu;\n    o->max_connections = max_connections;\n    o->send_buffer_size = send_buffer_size;\n    o->keepalive_time = keepalive_time;\n    o->reactor = reactor;\n    o->user = user;\n    o->handler_servererror = handler_servererror;\n    o->handler_received = handler_received;\n    \n    // limit max connections to number of conid's\n    if (o->max_connections > UINT16_MAX + 1) {\n        o->max_connections = UINT16_MAX + 1;\n    }\n    \n    // compute MTUs\n    o->udpgw_mtu = udpgw_compute_mtu(o->udp_mtu);\n    o->pp_mtu = o->udpgw_mtu + sizeof(struct packetproto_header);\n    \n    // init connections tree by conaddr\n    BAVL_Init(&o->connections_tree_by_conaddr, OFFSET_DIFF(struct UdpGwClient_connection, conaddr, connections_tree_by_conaddr_node), (BAVL_comparator)conaddr_comparator, NULL);\n    \n    // init connections tree by conid\n    BAVL_Init(&o->connections_tree_by_conid, OFFSET_DIFF(struct UdpGwClient_connection, conid, connections_tree_by_conid_node), (BAVL_comparator)uint16_comparator, NULL);\n    \n    // init connections list\n    LinkedList1_Init(&o->connections_list);\n    \n    // set zero connections\n    o->num_connections = 0;\n    \n    // set next conid\n    o->next_conid = 0;\n    \n    // init send connector\n    PacketPassConnector_Init(&o->send_connector, o->pp_mtu, BReactor_PendingGroup(o->reactor));\n    \n    // init send monitor\n    PacketPassInactivityMonitor_Init(&o->send_monitor, PacketPassConnector_GetInput(&o->send_connector), o->reactor, o->keepalive_time, (PacketPassInactivityMonitor_handler)send_monitor_handler, o);\n    \n    // init send queue\n    if (!PacketPassFairQueue_Init(&o->send_queue, PacketPassInactivityMonitor_GetInput(&o->send_monitor), BReactor_PendingGroup(o->reactor), 0, 1)) {\n        goto fail0;\n    }\n    \n    // construct keepalive packet\n    o->keepalive_packet.pp.len = sizeof(o->keepalive_packet.udpgw);\n    memset(&o->keepalive_packet.udpgw, 0, sizeof(o->keepalive_packet.udpgw));\n    o->keepalive_packet.udpgw.flags = UDPGW_CLIENT_FLAG_KEEPALIVE;\n    \n    // init keepalive queue flow\n    PacketPassFairQueueFlow_Init(&o->keepalive_qflow, &o->send_queue);\n    o->keepalive_if = PacketPassFairQueueFlow_GetInput(&o->keepalive_qflow);\n    \n    // init keepalive output\n    PacketPassInterface_Sender_Init(o->keepalive_if, (PacketPassInterface_handler_done)keepalive_if_handler_done, o);\n    \n    // set not sending keepalive\n    o->keepalive_sending = 0;\n    \n    // set have no server\n    o->have_server = 0;\n    \n    DebugObject_Init(&o->d_obj);\n    return 1;\n    \nfail0:\n    PacketPassInactivityMonitor_Free(&o->send_monitor);\n    PacketPassConnector_Free(&o->send_connector);\n    return 0;\n}\n\nvoid UdpGwClient_Free (UdpGwClient *o)\n{\n    DebugObject_Free(&o->d_obj);\n    \n    // allow freeing send queue flows\n    PacketPassFairQueue_PrepareFree(&o->send_queue);\n    \n    // free connections\n    while (!LinkedList1_IsEmpty(&o->connections_list)) {\n        struct UdpGwClient_connection *con = UPPER_OBJECT(LinkedList1_GetFirst(&o->connections_list), struct UdpGwClient_connection, connections_list_node);\n        connection_free(con);\n    }\n    \n    // free server\n    if (o->have_server) {\n        free_server(o);\n    }\n    \n    // free keepalive queue flow\n    PacketPassFairQueueFlow_Free(&o->keepalive_qflow);\n    \n    // free send queue\n    PacketPassFairQueue_Free(&o->send_queue);\n    \n    // free send\n    PacketPassInactivityMonitor_Free(&o->send_monitor);\n    \n    // free send connector\n    PacketPassConnector_Free(&o->send_connector);\n}\n\nvoid UdpGwClient_SubmitPacket (UdpGwClient *o, BAddr local_addr, BAddr remote_addr, int is_dns, const uint8_t *data, int data_len)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(local_addr.type == BADDR_TYPE_IPV4 || local_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(remote_addr.type == BADDR_TYPE_IPV4 || remote_addr.type == BADDR_TYPE_IPV6)\n    ASSERT(data_len >= 0)\n    ASSERT(data_len <= o->udp_mtu)\n    \n    // build conaddr\n    struct UdpGwClient_conaddr conaddr;\n    conaddr.local_addr = local_addr;\n    conaddr.remote_addr = remote_addr;\n    \n    // lookup connection\n    struct UdpGwClient_connection *con = find_connection_by_conaddr(o, conaddr);\n    \n    uint8_t flags = 0;\n\n    if (is_dns) {\n        // route to remote DNS server instead of provided address\n        flags |= UDPGW_CLIENT_FLAG_DNS;\n    }\n    \n    // if no connection and can't create a new one, reuse the least recently used une\n    if (!con && o->num_connections == o->max_connections) {\n        con = reuse_connection(o, conaddr);\n        flags |= UDPGW_CLIENT_FLAG_REBIND;\n    }\n    \n    if (!con) {\n        // create new connection\n        connection_init(o, conaddr, flags, data, data_len);\n    } else {\n        // move connection to front of the list\n        LinkedList1_Remove(&o->connections_list, &con->connections_list_node);\n        LinkedList1_Append(&o->connections_list, &con->connections_list_node);\n        \n        // send packet to existing connection\n        connection_send(con, flags, data, data_len);\n    }\n}\n\nint UdpGwClient_ConnectServer (UdpGwClient *o, StreamPassInterface *send_if, StreamRecvInterface *recv_if)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(!o->have_server)\n    \n    // init receive interface\n    PacketPassInterface_Init(&o->recv_if, o->udpgw_mtu, (PacketPassInterface_handler_send)recv_interface_handler_send, o, BReactor_PendingGroup(o->reactor));\n    \n    // init receive decoder\n    if (!PacketProtoDecoder_Init(&o->recv_decoder, recv_if, &o->recv_if, BReactor_PendingGroup(o->reactor), o, (PacketProtoDecoder_handler_error)decoder_handler_error)) {\n        BLog(BLOG_ERROR, \"PacketProtoDecoder_Init failed\");\n        goto fail1;\n    }\n    \n    // init send sender\n    PacketStreamSender_Init(&o->send_sender, send_if, o->pp_mtu, BReactor_PendingGroup(o->reactor));\n    \n    // connect send connector\n    PacketPassConnector_ConnectOutput(&o->send_connector, PacketStreamSender_GetInput(&o->send_sender));\n    \n    // set have server\n    o->have_server = 1;\n    \n    return 1;\n    \nfail1:\n    PacketPassInterface_Free(&o->recv_if);\n    return 0;\n}\n\nvoid UdpGwClient_DisconnectServer (UdpGwClient *o)\n{\n    DebugObject_Access(&o->d_obj);\n    ASSERT(o->have_server)\n    \n    // free server\n    free_server(o);\n    \n    // set have no server\n    o->have_server = 0;\n}\n"
  },
  {
    "path": "PacketProcessor/tun2socks-iOS/udpgw_client/UdpGwClient.h",
    "content": "/*\n * Copyright (C) Ambroz Bizjak <ambrop7@gmail.com>\n * Contributions:\n * Transparent DNS: Copyright (C) Kerem Hadimli <kerem.hadimli@gmail.com>\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 * 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 author nor the\n *    names of its contributors may be used to endorse or promote products\n *    derived from this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR 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 THE AUTHOR BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#ifndef BADVPN_UDPGW_CLIENT_UDPGWCLIENT_H\n#define BADVPN_UDPGW_CLIENT_UDPGWCLIENT_H\n\n#include <stdint.h>\n\n#include \"protocol/udpgw_proto.h\"\n#include \"misc/debug.h\"\n#include \"misc/packed.h\"\n#include \"structure/BAVL.h\"\n#include \"structure/LinkedList1.h\"\n#include \"base/DebugObject.h\"\n#include \"system/BAddr.h\"\n#include \"base/BPending.h\"\n#include \"flow/PacketPassFairQueue.h\"\n#include \"flow/PacketStreamSender.h\"\n#include \"flow/PacketProtoFlow.h\"\n#include \"flow/PacketProtoDecoder.h\"\n#include \"flow/PacketPassConnector.h\"\n#include \"flowextra/PacketPassInactivityMonitor.h\"\n\ntypedef void (*UdpGwClient_handler_servererror) (void *user);\ntypedef void (*UdpGwClient_handler_received) (void *user, BAddr local_addr, BAddr remote_addr, const uint8_t *data, int data_len);\n\nB_START_PACKED\nstruct UdpGwClient__keepalive_packet {\n    struct packetproto_header pp;\n    struct udpgw_header udpgw;\n} B_PACKED;\nB_END_PACKED\n\ntypedef struct {\n    int udp_mtu;\n    int max_connections;\n    int send_buffer_size;\n    btime_t keepalive_time;\n    BReactor *reactor;\n    void *user;\n    UdpGwClient_handler_servererror handler_servererror;\n    UdpGwClient_handler_received handler_received;\n    int udpgw_mtu;\n    int pp_mtu;\n    BAVL connections_tree_by_conaddr;\n    BAVL connections_tree_by_conid;\n    LinkedList1 connections_list;\n    int num_connections;\n    int next_conid;\n    PacketPassFairQueue send_queue;\n    PacketPassInactivityMonitor send_monitor;\n    PacketPassConnector send_connector;\n    struct UdpGwClient__keepalive_packet keepalive_packet;\n    PacketPassInterface *keepalive_if;\n    PacketPassFairQueueFlow keepalive_qflow;\n    int keepalive_sending;\n    int have_server;\n    PacketStreamSender send_sender;\n    PacketProtoDecoder recv_decoder;\n    PacketPassInterface recv_if;\n    DebugObject d_obj;\n} UdpGwClient;\n\nstruct UdpGwClient_conaddr {\n    BAddr local_addr;\n    BAddr remote_addr;\n};\n\nstruct UdpGwClient_connection {\n    UdpGwClient *client;\n    struct UdpGwClient_conaddr conaddr;\n    uint8_t first_flags;\n    const uint8_t *first_data;\n    int first_data_len;\n    uint16_t conid;\n    BPending first_job;\n    BufferWriter *send_if;\n    PacketProtoFlow send_ppflow;\n    PacketPassFairQueueFlow send_qflow;\n    BAVLNode connections_tree_by_conaddr_node;\n    BAVLNode connections_tree_by_conid_node;\n    LinkedList1Node connections_list_node;\n};\n\nint UdpGwClient_Init (UdpGwClient *o, int udp_mtu, int max_connections, int send_buffer_size, btime_t keepalive_time, BReactor *reactor, void *user,\n                      UdpGwClient_handler_servererror handler_servererror,\n                      UdpGwClient_handler_received handler_received) WARN_UNUSED;\nvoid UdpGwClient_Free (UdpGwClient *o);\nvoid UdpGwClient_SubmitPacket (UdpGwClient *o, BAddr local_addr, BAddr remote_addr, int is_dns, const uint8_t *data, int data_len);\nint UdpGwClient_ConnectServer (UdpGwClient *o, StreamPassInterface *send_if, StreamRecvInterface *recv_if) WARN_UNUSED;\nvoid UdpGwClient_DisconnectServer (UdpGwClient *o);\n\n#endif\n"
  },
  {
    "path": "PacketTunnel/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>PacketTunnel</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>Fabric</key>\n\t<dict>\n\t\t<key>APIKey</key>\n\t\t<string>9dd1eb88e3ce406adfaeb7af1844ed7e370e8e03</string>\n\t\t<key>Kits</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>KitInfo</key>\n\t\t\t\t<dict/>\n\t\t\t\t<key>KitName</key>\n\t\t\t\t<string>Crashlytics</string>\n\t\t\t</dict>\n\t\t</array>\n\t</dict>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.networkextension.packet-tunnel</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>PacketTunnelProvider</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "PacketTunnel/PacketTunnelProvider.h",
    "content": "//\n//  PacketTunnelProvider.h\n//  PacketTunnel\n//\n//  Created by LEI on 12/13/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n@import NetworkExtension;\n\n@interface PacketTunnelProvider : NEPacketTunnelProvider\n\n@end\n"
  },
  {
    "path": "PacketTunnel/PacketTunnelProvider.m",
    "content": "//\n//  PacketTunnelProvider.m\n//  PacketTunnel\n//\n//  Created by LEI on 12/13/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#import \"PacketTunnelProvider.h\"\n#import \"ProxyManager.h\"\n#import \"TunnelInterface.h\"\n#import \"TunnelError.h\"\n#import \"dns.h\"\n#import \"PotatsoBase.h\"\n#import <sys/syslog.h>\n#import <ShadowPath/ShadowPath.h>\n#import <sys/socket.h>\n#import <arpa/inet.h>\n@import MMWormhole;\n@import CocoaAsyncSocket;\n\n#define REQUEST_CACHED @\"requestsCached\"    // Indicate that recent requests need update\n\n@interface PacketTunnelProvider () <GCDAsyncSocketDelegate>\n@property (nonatomic) MMWormhole *wormhole;\n@property (nonatomic) GCDAsyncSocket *statusSocket;\n@property (nonatomic) GCDAsyncSocket *statusClientSocket;\n@property (nonatomic) BOOL didSetupHockeyApp;\n@property (nonatomic) NWPath *lastPath;\n@property (strong) void (^pendingStartCompletion)(NSError *);\n@property (strong) void (^pendingStopCompletion)(void);\n@property (strong) NSArray *directDomains;\n@end\n\n\n@implementation PacketTunnelProvider\n\n- (void)startTunnelWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *))completionHandler {\n    mumeLog(@\"starting Mume tunnel... PID: %d\", [[NSProcessInfo processInfo] processIdentifier]);\n    [self updateUserDefaults];\n    NSError *error = [TunnelInterface setupWithPacketTunnelFlow:self.packetFlow];\n    if (error) {\n        completionHandler(error);\n        exit(1);\n        return;\n    }\n    NSURL *confDirUrl = [[Potatso sharedUrl] URLByAppendingPathComponent:@\"httpconf\"];\n    NSString* domainsData = [NSString stringWithContentsOfURL:[confDirUrl URLByAppendingPathComponent:@\"mume.direct\"]\n                           encoding:NSUTF8StringEncoding error:nil];\n    self.directDomains = [domainsData componentsSeparatedByString:@\"\\n\"];\n    self.pendingStartCompletion = completionHandler;\n    [self startProxies];\n    [self startPacketForwarders];\n    [self setupWormhole];\n}\n\n- (void)updateUserDefaults {\n    [[Potatso sharedUserDefaults] removeObjectForKey:REQUEST_CACHED];\n    [[Potatso sharedUserDefaults] synchronize];\n    [[Settings shared] setStartTime:[NSDate date]];\n}\n\n- (void)setupWormhole {\n    self.wormhole = [[MMWormhole alloc] initWithApplicationGroupIdentifier:sharedGroupIdentifier optionalDirectory:@\"wormhole\"];\n    __weak typeof(self) weakSelf = self;\n    [self.wormhole listenForMessageWithIdentifier:@\"getTunnelStatus\" listener:^(id  _Nullable messageObject) {\n        [weakSelf.wormhole passMessageObject:@\"ok\" identifier:@\"tunnelStatus\"];\n    }];\n    [self.wormhole listenForMessageWithIdentifier:@\"stopTunnel\" listener:^(id  _Nullable messageObject) {\n        mumeLog(@\"received message: stopTunnel\");\n        [weakSelf stop];\n    }];\n    [self.wormhole listenForMessageWithIdentifier:@\"getTunnelConnectionRecords\" listener:^(id  _Nullable messageObject) {\n        NSMutableArray *records = [NSMutableArray array];\n        struct log_client_states *p = log_clients;\n        while (p) {\n            struct client_state *client = p->csp;\n            NSMutableDictionary *d = [NSMutableDictionary dictionary];\n            char *url = client->http->url;\n            if (url ==  NULL) {\n                p = p->next;\n                continue;\n            }\n            d[@\"url\"] = [NSString stringWithCString:url encoding:NSUTF8StringEncoding];\n            d[@\"method\"] = @(client->http->gpc);\n            for (int i=0; i < TIME_STAGE_COUNT; i++) {\n                d[[NSString stringWithFormat:@\"time%d\", i]] = @(client->time_stages[i]);\n            }\n            d[@\"version\"] = @(client->http->ver);\n            if (client->rule) {\n                d[@\"rule\"] = [NSString stringWithCString:client->rule encoding:NSUTF8StringEncoding];\n            }\n            d[@\"global\"] = @(global_mode);\n            d[@\"routing\"] = @(client->routing);\n            d[@\"forward_stage\"] = @(client->current_forward_stage);\n            if (client->http->remote_host_ip_addr_str) {\n                d[@\"ip\"] = [NSString stringWithCString:client->http->remote_host_ip_addr_str encoding:NSUTF8StringEncoding];\n            }\n            d[@\"responseCode\"] = @(client->http->status);\n            [records addObject:d];\n            p = p->next;\n        }\n        NSString *result = [records jsonString];\n        [weakSelf.wormhole passMessageObject:result identifier:@\"tunnelConnectionRecords\"];\n    }];\n    [self setupStatusSocket];\n}\n\n- (void)setupStatusSocket {\n    NSError *error;\n    self.statusSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)];\n    [self.statusSocket acceptOnInterface:@\"127.0.0.1\" port:0 error:&error];\n    [self.statusSocket performBlock:^{\n        int port = sock_port(self.statusSocket.socket4FD);\n        [[Potatso sharedUserDefaults] setObject:@(port) forKey:@\"tunnelStatusPort\"];\n        [[Potatso sharedUserDefaults] synchronize];\n    }];\n}\n\n- (void)startProxies {\n    [self startShadowsocks];\n    [self startHttpProxy];\n//    [self startSocksProxy];\n}\n\n- (void)syncStartProxy: (NSString *)name completion: (void(^)(dispatch_group_t g, NSError **proxyError))handler {\n    dispatch_group_t g = dispatch_group_create();\n    __block NSError *proxyError;\n    dispatch_group_enter(g);\n    handler(g, &proxyError);\n    long res = dispatch_group_wait(g, dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 2));\n    if (res != 0) {\n        proxyError = [TunnelError errorWithMessage:@\"timeout\"];\n    }\n    if (proxyError) {\n        mumeLog(@\"start proxy: %@ error: %@\", name, [proxyError localizedDescription]);\n        exit(1);\n        return;\n    } else {\n        mumeLog(@\"start proxy: %@ OK\", name);\n    }\n}\n\n- (void)startShadowsocks {\n    [self syncStartProxy: @\"shadowsocks\" completion:^(dispatch_group_t g, NSError *__autoreleasing *proxyError) {\n        [[ProxyManager sharedManager] startShadowsocks:^(int port, NSError *error) {\n            mumeLog(@\"startShadowsocks - port: %d error:%@\", port, error);\n            *proxyError = error;\n            dispatch_group_leave(g);\n        }];\n    }];\n}\n\n- (void)startHttpProxy {\n    [self syncStartProxy: @\"http\" completion:^(dispatch_group_t g, NSError *__autoreleasing *proxyError) {\n        [[ProxyManager sharedManager] startHttpProxy:^(int port, NSError *error) {\n            *proxyError = error;\n            dispatch_group_leave(g);\n        }];\n    }];\n}\n\n//- (void)startSocksProxy {\n//    [self syncStartProxy: @\"socks\" completion:^(dispatch_group_t g, NSError *__autoreleasing *proxyError) {\n//        [[ProxyManager sharedManager] startSocksProxy:^(int port, NSError *error) {\n//            *proxyError = error;\n//            dispatch_group_leave(g);\n//        }];\n//    }];\n//}\n\n- (void)startPacketForwarders {\n    __weak typeof(self) weakSelf = self;\n    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onTun2SocksFinished) name:kTun2SocksStoppedNotification object:nil];\n    [self startVPNWithOptions:nil completionHandler:^(NSError *error) {\n        if (error == nil) {\n            [weakSelf addObserver:weakSelf forKeyPath:@\"defaultPath\" options:NSKeyValueObservingOptionInitial context:nil];\n            [TunnelInterface startTun2Socks:[ProxyManager sharedManager].socksProxy];\n            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n                [TunnelInterface processPackets];\n            });\n        }\n        if (weakSelf.pendingStartCompletion) {\n            weakSelf.pendingStartCompletion(error);\n            weakSelf.pendingStartCompletion = nil;\n        }\n    }];\n}\n\n- (void)startVPNWithOptions:(NSDictionary *)options completionHandler:(void (^)(NSError *error))completionHandler {\n    NSString *generalConfContent = [NSString stringWithContentsOfURL:[Potatso sharedGeneralConfUrl] encoding:NSUTF8StringEncoding error:nil];\n    NSDictionary *generalConf = [generalConfContent jsonDictionary];\n    NSString *dns = generalConf[@\"dns\"];\n    NEIPv4Settings *ipv4Settings = [[NEIPv4Settings alloc] initWithAddresses:@[@\"192.0.2.1\"] subnetMasks:@[@\"255.255.255.0\"]];\n    NSArray *dnsServers;\n    if (dns.length) {\n        dnsServers = [dns componentsSeparatedByString:@\",\"];\n        mumeLog(@\"custom dns servers: %@\", dnsServers);\n    }else {\n        dnsServers = [DNSConfig getSystemDnsServers];\n        mumeLog(@\"system dns servers: %@\", dnsServers);\n    }\n    ipv4Settings.includedRoutes = @[[NEIPv4Route defaultRoute]];\n    NEPacketTunnelNetworkSettings *settings = [[NEPacketTunnelNetworkSettings alloc] initWithTunnelRemoteAddress:@\"192.0.2.2\"];\n    settings.IPv4Settings = ipv4Settings;\n    settings.MTU = @(TunnelMTU);\n    NEProxySettings* proxySettings = [[NEProxySettings alloc] init];\n    NSInteger proxyServerPort = [ProxyManager sharedManager].httpProxyPort;\n    NSString *proxyServerName = @\"localhost\";\n\n    proxySettings.HTTPEnabled = YES;\n    proxySettings.HTTPServer = [[NEProxyServer alloc] initWithAddress:proxyServerName port:proxyServerPort];\n    proxySettings.HTTPSEnabled = YES;\n    proxySettings.HTTPSServer = [[NEProxyServer alloc] initWithAddress:proxyServerName port:proxyServerPort];\n    proxySettings.excludeSimpleHostnames = YES;\n    proxySettings.exceptionList = [@[@\"crashlytics.com\", @\"liruqi.info\", @\"mumevpn.com\"] arrayByAddingObjectsFromArray:self.directDomains];\n    settings.proxySettings = proxySettings;\n    NEDNSSettings *dnsSettings = [[NEDNSSettings alloc] initWithServers:dnsServers];\n    settings.DNSSettings = dnsSettings;\n    [self setTunnelNetworkSettings:settings completionHandler:^(NSError * _Nullable error) {\n        if (error) {\n            if (completionHandler) {\n                completionHandler(error);\n            }\n        }else{\n            if (completionHandler) {\n                completionHandler(nil);\n            }\n        }\n    }];\n}\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {\n    if ([keyPath isEqualToString:@\"defaultPath\"]) {\n        if (self.defaultPath.status == NWPathStatusSatisfied && ![self.defaultPath isEqualToPath:self.lastPath]) {\n            if (!self.lastPath) {\n                self.lastPath = self.defaultPath;\n            }else {\n                mumeLog(@\"received network change notifcation\");\n                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\n                    [self startVPNWithOptions:nil completionHandler:nil];\n                });\n            }\n        }else {\n            self.lastPath = self.defaultPath;\n        }\n    }\n}\n\n- (void)stopTunnelWithReason:(NEProviderStopReason)reason completionHandler:(void (^)(void))completionHandler\n{\n\t// Add code here to start the process of stopping the tunnel\n    mumeLog(@\"stopTunnelWithReason: %ld\", (long)reason);\n    self.pendingStopCompletion = completionHandler;\n    [self stop];\n}\n\n- (void)stop {\n    mumeLog(@\"stoping Mume tunnel...\");\n    [[Potatso sharedUserDefaults] setObject:@(0) forKey:@\"tunnelStatusPort\"];\n    [[Potatso sharedUserDefaults] synchronize];\n    [TunnelInterface stop];\n}\n\n- (void)onTun2SocksFinished {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n    if (self.pendingStopCompletion) {\n        self.pendingStopCompletion();\n        self.pendingStopCompletion = nil;\n    }\n    [self cancelTunnelWithError:nil];\n    exit(EXIT_SUCCESS);\n}\n\n- (void)handleAppMessage:(NSData *)messageData completionHandler:(void (^)(NSData *))completionHandler {\n    mumeLog(@\"handleAppMessage: %@\", [[NSString alloc] initWithData:messageData encoding:NSUTF8StringEncoding]);\n    if (completionHandler != nil) {\n        completionHandler([@\"Hello from PT\" dataUsingEncoding:NSUTF8StringEncoding]);\n    }\n}\n\n- (void)sleepWithCompletionHandler:(void (^)(void))completionHandler {\n    mumeLog(@\"sleeping Mume tunnel...\");\n\tcompletionHandler();\n}\n\n- (void)wake {\n    mumeLog(@\"waking Mume tunnel...\");\n}\n\n#pragma mark - GCDAsyncSocket Delegate \n\n- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {\n    self.statusClientSocket = newSocket;\n}\n\n\n@end\n"
  },
  {
    "path": "PacketTunnel/ProxyManager.h",
    "content": "//\n//  ProxyManager.h\n//  Potatso\n//\n//  Created by LEI on 2/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\ntypedef void(^HttpProxyCompletion)(int port, NSError *error);\ntypedef void(^ShadowsocksProxyCompletion)(int port, NSError *error);\n\nextern int sock_port (int fd);\n\nvoid mumeLog(NSString* fmt, ...);\n\n@interface ProxyManager : NSObject\n\n+ (ProxyManager *)sharedManager;\n\n@property (nonatomic, readonly) int socksProxyPort;\n@property (nonatomic, readonly) BOOL httpProxyRunning;\n@property (nonatomic, readonly) int httpProxyPort;\n@property (nonatomic, readonly) BOOL shadowsocksProxyRunning;\n\n- (void)startHttpProxy: (HttpProxyCompletion)completion;\n- (void)startShadowsocks: (ShadowsocksProxyCompletion)completion;\n- (void)stopShadowsocks;\n- (NSString *)socksProxy; //host:port\n@end\n"
  },
  {
    "path": "PacketTunnel/ProxyManager.m",
    "content": "//\n//  ProxyManager.m\n//  Potatso\n//\n//  Created by LEI on 2/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"ProxyManager.h\"\n#import <ShadowPath/ShadowPath.h>\n#import <netinet/in.h>\n#import \"PotatsoBase.h\"\n\n@interface ProxyManager ()\n@property (nonatomic, copy) NSString* socksProxyHost;\n@property (nonatomic) int socksProxyPort;\n@property (nonatomic) int httpProxyPort;\n@property (nonatomic) BOOL shadowsocksProxyRunning;\n@property (nonatomic, copy) NSString* proxyType;\n@property (nonatomic, copy) HttpProxyCompletion httpCompletion;\n@property (nonatomic, copy) ShadowsocksProxyCompletion shadowsocksCompletion;\n- (void)onHttpProxyCallback: (int)fd;\n- (void)onShadowsocksCallback:(int)fd;\n@end\n\nvoid http_proxy_handler(int fd, void *udata) {\n    ProxyManager *provider = (__bridge ProxyManager *)udata;\n    [provider onHttpProxyCallback:fd];\n}\n\nvoid shadowsocks_handler(int fd, void *udata) {\n    ProxyManager *provider = (__bridge ProxyManager *)udata;\n    [provider onShadowsocksCallback:fd];\n}\n\nint sock_port (int fd) {\n    struct sockaddr_in sin;\n    socklen_t len = sizeof(sin);\n    if (getsockname(fd, (struct sockaddr *)&sin, &len) < 0) {\n        mumeLog(@\"getsock_port(%d) error: %s\",\n              fd, strerror (errno));\n        return 0;\n    }else{\n        return ntohs(sin.sin_port);\n    }\n}\n\nvoid mumeLog(NSString* fmt, ...) {\n    if ([Potatso logLevel] != 1) {\n        return;\n    }\n    \n    va_list args;\n    va_start(args, fmt);\n    NSString *content = [[NSString alloc] initWithFormat: [fmt stringByAppendingString:@\"\\n\"] arguments:args];\n    NSString *logFilePath = [Potatso sharedLogUrl].path;\n    \n    static dispatch_once_t onceToken;\n    static NSFileHandle *fileHandle = nil;\n    dispatch_once(&onceToken, ^{\n        [content writeToFile:logFilePath\n                  atomically:NO\n                    encoding:NSStringEncodingConversionAllowLossy\n                       error:nil];\n        fileHandle = [NSFileHandle fileHandleForWritingAtPath:logFilePath];\n        [fileHandle seekToEndOfFile];\n    });\n    \n    if (fileHandle) {\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{\n            [fileHandle writeData:[content dataUsingEncoding:NSUTF8StringEncoding]];\n            [fileHandle synchronizeFile];\n        });\n    }\n}\n\n@implementation ProxyManager\n\n+ (ProxyManager *)sharedManager {\n    static dispatch_once_t onceToken;\n    static ProxyManager *manager;\n    dispatch_once(&onceToken, ^{\n        manager = [ProxyManager new];\n    });\n    return manager;\n}\n\n//- (void)startSocksProxy:(SocksProxyCompletion)completion {\n//    self.socksCompletion = [completion copy];\n//    NSString *confContent = [NSString stringWithContentsOfURL:[Potatso sharedSocksConfUrl] encoding:NSUTF8StringEncoding error:nil];\n//    confContent = [confContent stringByReplacingOccurrencesOfString:@\"${ssport}\" withString:[NSString stringWithFormat:@\"%d\", [self shadowsocksProxyPort]]];\n//    int fd = [[AntinatServer sharedServer] startWithConfig:confContent];\n//    [self onSocksProxyCallback:fd];\n//}\n//\n//- (void)stopSocksProxy {\n//    [[AntinatServer sharedServer] stop];\n//    self.socksProxyRunning = NO;\n//}\n//\n//- (void)onSocksProxyCallback:(int)fd {\n//    NSError *error;\n//    if (fd > 0) {\n//        self.socksProxyPort = sock_port(fd);\n//        self.socksProxyRunning = YES;\n//    }else {\n//        error = [NSError errorWithDomain:@\"info.liruqi.mume\" code:100 userInfo:@{NSLocalizedDescriptionKey: @\"Fail to start socks proxy\"}];\n//    }\n//    if (self.socksCompletion) {\n//        self.socksCompletion(self.socksProxyPort, error);\n//    }\n//}\n\n# pragma mark - Shadowsocks \n\n- (void)startShadowsocks: (ShadowsocksProxyCompletion)completion {\n    self.shadowsocksCompletion = [completion copy];\n    [NSThread detachNewThreadSelector:@selector(_startShadowsocks) toTarget:self withObject:nil];\n}\n\n- (void)_startShadowsocks {\n    NSString *confContent = [NSString stringWithContentsOfURL:[Potatso sharedProxyConfUrl] encoding:NSUTF8StringEncoding error:nil];\n    NSDictionary *json = [confContent jsonDictionary];\n    self.proxyType = json[@\"type\"];\n    NSString *host = json[@\"host\"];\n    NSNumber *port = json[@\"port\"];\n    if ([self.proxyType isEqualToString: @\"SOCKS5\"]) {\n        self.socksProxyPort = port.intValue;\n        self.socksProxyHost = host;\n        self.shadowsocksCompletion(self.socksProxyPort, nil);\n        return;\n    }\n    NSString *password = json[@\"password\"];\n    NSString *authscheme = json[@\"authscheme\"];\n    NSString *protocol = json[@\"protocol\"];\n    NSString *obfs = json[@\"obfs\"];\n    NSString *obfs_param = json[@\"obfs_param\"];\n    BOOL ota = [json[@\"ota\"] boolValue];\n    NSURL* rootUrl = [Potatso sharedUrl];\n    NSURL* logPath = [rootUrl URLByAppendingPathComponent:shadowsocksLogFile];\n    if (host && port && password && authscheme) {\n        profile_t profile;\n        memset(&profile, 0, sizeof(profile_t));\n        profile.remote_host = strdup([host UTF8String]);\n        profile.remote_port = [port intValue];\n        profile.password = strdup([password UTF8String]);\n        profile.method = strdup([authscheme UTF8String]);\n        profile.local_addr = \"127.0.0.1\";\n        profile.local_port = 0;\n        profile.timeout = 600;\n        profile.auth = ota;\n        profile.log = strdup([logPath.path UTF8String]);\n        if (protocol.length > 0) {\n            profile.protocol = strdup([protocol UTF8String]);\n        }\n        if (obfs.length > 0) {\n            profile.obfs = strdup([obfs UTF8String]);\n        }\n        if (obfs_param.length > 0) {\n            profile.obfs_param = strdup([obfs_param UTF8String]);\n        }\n        start_ss_local_server(profile, shadowsocks_handler, (__bridge void *)self);\n    }else {\n        if (self.shadowsocksCompletion) {\n            self.shadowsocksCompletion(0, nil);\n        }\n        return;\n    }\n}\n\n- (void)stopShadowsocks {\n    // Do nothing\n}\n\n- (void)onShadowsocksCallback:(int)fd {\n    NSError *error;\n    if (fd > 0) {\n        self.socksProxyPort = sock_port(fd);\n        self.shadowsocksProxyRunning = YES;\n    }else {\n        error = [NSError errorWithDomain:@\"info.liruqi.mume\" code:100 userInfo:@{NSLocalizedDescriptionKey: @\"Fail to start http proxy\"}];\n    }\n    if (self.shadowsocksCompletion) {\n        self.shadowsocksCompletion(self.socksProxyPort, error);\n    }\n}\n\n# pragma mark - Http Proxy\n\n- (void)startHttpProxy:(HttpProxyCompletion)completion {\n    self.httpCompletion = [completion copy];\n    [NSThread detachNewThreadSelector:@selector(_startHttpProxy:) toTarget:self withObject:[Potatso sharedHttpProxyConfUrl]];\n}\n\n- (void)_startHttpProxy: (NSURL *)confURL {\n    struct forward_spec *proxy = NULL;\n    if (self.socksProxyPort > 0) {\n        proxy = (malloc(sizeof(struct forward_spec)));\n        memset(proxy, 0, sizeof(struct forward_spec));\n        proxy->type = SOCKS_5;\n        if ([self.proxyType isEqualToString: @\"SOCKS5\"]) {\n            proxy->gateway_host = self.socksProxyHost.cString;\n            proxy->gateway_port = self.socksProxyPort;\n        } else {\n            proxy->gateway_host = \"127.0.0.1\";\n            proxy->gateway_port = self.socksProxyPort;\n        }\n    }\n    shadowpath_main(strdup([[confURL path] UTF8String]), proxy, http_proxy_handler, (__bridge void *)self);\n}\n\n- (void)onHttpProxyCallback:(int)fd {\n    NSError *error;\n    if (fd > 0) {\n        self.httpProxyPort = sock_port(fd);\n    }else {\n        error = [NSError errorWithDomain:@\"info.liruqi.mume\" code:100 userInfo:@{NSLocalizedDescriptionKey: @\"Fail to start http proxy\"}];\n    }\n    if (self.httpCompletion) {\n        self.httpCompletion(self.httpProxyPort, error);\n    }\n}\n\n- (NSString *)socksProxy {\n    if ([self.proxyType isEqualToString: @\"SOCKS5\"]) {\n        return [NSString stringWithFormat:@\"%@:%d\", self.socksProxyHost, self.socksProxyPort];\n    } else {\n        return [NSString stringWithFormat:@\"127.0.0.1:%d\", self.socksProxyPort];\n    }\n}\n\n@end\n\n"
  },
  {
    "path": "PacketTunnel/Supporting Files/PacketTunnel.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.developer.networking.networkextension</key>\n\t<array>\n\t\t<string>packet-tunnel-provider</string>\n\t\t<string>app-proxy-provider</string>\n\t\t<string>content-filter-provider</string>\n\t</array>\n\t<key>com.apple.developer.networking.vpn.api</key>\n\t<array>\n\t\t<string>allow-vpn</string>\n\t</array>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.info.liruqi.potatso</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "PacketTunnel/TunnelError.h",
    "content": "//\n//  TunnelError.h\n//  Potatso\n//\n//  Created by LEI on 7/21/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface TunnelError : NSObject\n+ (NSError *)errorWithMessage: (NSString *)message;\n@end\n"
  },
  {
    "path": "PacketTunnel/TunnelError.m",
    "content": "//\n//  TunnelError.m\n//  Potatso\n//\n//  Created by LEI on 7/21/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"TunnelError.h\"\n\n@implementation TunnelError\n\n+ (NSError *)errorWithMessage:(NSString *)message {\n    return [NSError errorWithDomain:@\"info.liruqi.mume\" code:100 userInfo:@{NSLocalizedDescriptionKey: message ? : @\"\"}];\n}\n\n@end\n"
  },
  {
    "path": "PacketTunnel/dns.h",
    "content": "//\n//  dns.h\n//  Potatso\n//\n//  Created by LEI on 11/11/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#ifndef dns_h\n#define dns_h\n\n#include <stdio.h>\n#include <Foundation/Foundation.h>\n\n@interface DNSConfig : NSObject\n\n+ (NSArray *) getSystemDnsServers;\n@end\n\n#endif /* dns_h */\n"
  },
  {
    "path": "PacketTunnel/dns.m",
    "content": "//\n//  dns.c\n//  Potatso\n//\n//  Created by LEI on 11/11/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#include \"dns.h\"\n#include <sys/types.h>\n#include <netinet/in.h>\n#include <arpa/nameser.h>\n#include <resolv.h>\n#include <arpa/inet.h>\n\n@implementation DNSConfig\n\n+ (NSArray *)getSystemDnsServers {\n    res_state res = malloc(sizeof(struct __res_state));\n    res_ninit(res);\n    NSMutableArray *servers = [NSMutableArray array];\n    for (int i = 0; i < res->nscount; i++) {\n        sa_family_t family = res->nsaddr_list[i].sin_family;\n        char str[INET_ADDRSTRLEN + 1]; // String representation of address\n        if (family == AF_INET) { // IPV4 address\n            inet_ntop(AF_INET, & (res->nsaddr_list[i].sin_addr.s_addr), str, INET_ADDRSTRLEN);\n            str[INET_ADDRSTRLEN] = '\\0';\n            NSString *address = [[NSString alloc] initWithCString:str encoding:NSUTF8StringEncoding];\n            if (address.length) {\n                [servers addObject:address];\n            }\n        }\n    }\n    res_ndestroy(res);\n    free(res);\n    return servers;\n}\n\n@end\n"
  },
  {
    "path": "Podfile",
    "content": "source 'https://github.com/CocoaPods/Specs.git'\n\nplatform :ios, '9.0'\nuse_frameworks!\n\ndef library\n    pod 'Alamofire'\n    pod 'ICSMainFramework', :path => \"./Library/ICSMainFramework/\"\n    pod 'MMWormhole', '~> 2.0.0'\n    pod \"MMDB-Swift\"\nend\n\ndef tunnel\n    pod 'MMWormhole', '~> 2.0.0'\nend\n\ndef socket\n    pod 'CocoaAsyncSocket', '~> 7.4.3'\nend\n\ndef model\n    pod 'RealmSwift'\n    pod 'ObjectMapper'\nend\n\ntarget \"Potatso\" do\n    pod 'Alamofire'\n    pod 'Aspects', :path => \"./Library/Aspects/\"\n    pod 'Cartography'\n    pod 'AsyncSwift'\n    pod 'SwiftColor'\n    pod 'Eureka'\n    pod 'MBProgressHUD'\n    pod 'CallbackURLKit'\n    pod 'SVPullToRefresh', :git => 'https://github.com/samvermette/SVPullToRefresh'\n    pod 'ObjectMapper'\n    pod 'PSOperations/Core'\n    pod 'Fabric'\n    pod 'Crashlytics'\n    pod \"EFQRCode\", '~> 1.2.5'\n    tunnel\n    library\n    socket\n    model\nend\n\ntarget \"PacketTunnel\" do\n    tunnel\n    socket\nend\n\ntarget \"PacketProcessor\" do\n    socket\nend\n\ntarget \"TodayWidget\" do\n    pod 'Cartography'\n    pod 'SwiftColor'\n    library\n    socket\n    model\nend\n\ntarget \"PotatsoLibrary\" do\n    library\n    model\nend\n\ntarget \"PotatsoModel\" do\n    model\nend\n\npost_install do |installer|\n    installer.pods_project.targets.each do |target|\n        target.build_configurations.each do |config|\n            config.build_settings['ENABLE_BITCODE'] = 'NO'\n        end\n    end\nend\n\n"
  },
  {
    "path": "Potatso/Advance/CloudProxyDetailViewController.swift",
    "content": "//\n//  ProxyConfigurationViewController.swift\n//  Potatso\n//\n//  Created by Ruqi on 7/10/17.\n//  Copyright © 2017 Ruqi Li. All rights reserved.\n//\n\nimport UIKit\nimport Eureka\nimport PotatsoLibrary\nimport PotatsoModel\n\nprivate let kProxyFormDue = \"due\"\nprivate let kProxyFormProvider = \"provider\"\n\nclass CloudProxyDetailViewController: ProxyConfigurationViewController {\n    var cloudProxy: CloudProxy\n    \n    convenience init(cloudProxy: CloudProxy) {\n        self.init(upstreamProxy: cloudProxy)\n        self.cloudProxy = cloudProxy\n    }\n\n    override init(upstreamProxy: Proxy?, readOnly: Bool = true) {\n        self.cloudProxy = CloudProxy()\n        super.init(upstreamProxy: upstreamProxy, readOnly: readOnly)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(onSave))\n    }\n    \n    // MARK: - View Life Cycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.navigationItem.title = \"Add Proxy\".localized()\n        guard let section = form.allSections.last else {\n            return\n        }\n        if let due = self.cloudProxy.due, due.characters.count > 0 {\n            section <<< TextRow(kProxyFormDue) {\n                $0.title = \"Expiry date\".localized()\n                $0.value = due\n                $0.disabled = Condition.function([], { _ in\n                    return true\n                })\n                }\n        }\n        if let provider = self.cloudProxy.provider, provider.characters.count > 0 {\n            section <<< TextRow(kProxyFormProvider) {\n                $0.title = \"Provider\".localized()\n                $0.value = provider\n                $0.disabled = Condition.function([], { _ in\n                    return true\n                })\n                }.onCellSelection { cell, row in\n                    if let link = self.cloudProxy.link, let url = URL(string: link) {\n                        UIApplication.shared.openURL(url)\n                    }\n            }\n        }\n    }\n    \n    override func onSave() {\n        try? DBUtils.add(self.cloudProxy)\n        if let ip = self.cloudProxy.ip {\n            self.upstreamProxy.ip = ip\n        }\n        super.onSave()\n    }\n}\n"
  },
  {
    "path": "Potatso/Advance/ProxyConfigurationViewController.swift",
    "content": "//\n//  ProxyConfigurationViewController.swift\n//  Potatso\n//\n//  Created by LEI on 3/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Eureka\nimport PotatsoLibrary\nimport PotatsoModel\n\nprivate let kProxyFormType = \"type\"\nprivate let kProxyFormHost = \"host\"\nprivate let kProxyFormPort = \"port\"\nprivate let kProxyFormEncryption = \"encryption\"\nprivate let kProxyFormPassword = \"password\"\nprivate let kProxyFormOta = \"ota\"\nprivate let kProxyFormObfs = \"obfs\"\nprivate let kProxyFormObfsParam = \"obfsParam\"\nprivate let kProxyFormProtocol = \"protocol\"\n\nclass ProxyConfigurationViewController: FormViewController {\n    private var readOnly = false\n    var upstreamProxy: Proxy\n    let isEdit: Bool\n    \n    override convenience init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        self.init()\n    }\n    \n    init(upstreamProxy: Proxy? = nil, readOnly: Bool = false) {\n        if let proxy = upstreamProxy {\n            self.upstreamProxy = Proxy(value: proxy)\n            self.isEdit = true\n            self.readOnly = readOnly\n            if let _ = proxy as? CloudProxy {\n                self.readOnly = true\n            } else if (self.upstreamProxy.host.hasSuffix(\"mume.site\")) {\n                #if DEBUG\n                #else\n                self.readOnly = true\n                #endif\n            }\n        } else {\n            self.upstreamProxy = Proxy()\n            self.isEdit = false\n        }\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    // MARK: - View Life Cycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        if self.readOnly {\n            self.navigationItem.title = \"View Proxy\".localized()\n        } else if isEdit {\n            self.navigationItem.title = \"Edit Proxy\".localized()\n        }\n        generateForm()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        if self.readOnly {\n            return\n        }\n        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(onSave))\n    }\n    \n    func generateForm() {\n        let section = Section()\n            <<< PushRow<ProxyType>(kProxyFormType) {\n                $0.title = \"Proxy Type\".localized()\n                $0.options = [ProxyType.Shadowsocks, ProxyType.ShadowsocksR, ProxyType.Socks5]\n                $0.value = self.upstreamProxy.type\n                $0.selectorTitle = \"Choose Proxy Type\".localized()\n                //$0.baseCell.isUserInteractionEnabled = canEdit\n                $0.disabled = Condition.function([], { _ in\n                    return self.readOnly\n                })\n            }\n            <<< TextRow(kProxyFormHost) {\n                $0.title = \"Host\".localized()\n                $0.value = self.upstreamProxy.host\n                $0.disabled = Condition.function([], { _ in\n                    return self.readOnly\n                })\n            }.cellSetup { cell, row in\n                cell.textField.placeholder = \"Proxy Server Host\".localized()\n                cell.textField.keyboardType = .URL\n                cell.textField.autocorrectionType = .no\n                cell.textField.autocapitalizationType = .none\n            }\n            <<< IntRow(kProxyFormPort) {\n                $0.title = \"Port\".localized()\n                if self.upstreamProxy.port > 0 {\n                    $0.value = self.upstreamProxy.port\n                    $0.disabled = Condition.function([], { _ in\n                        return self.readOnly\n                    })\n                }\n                let numberFormatter = NumberFormatter()\n                numberFormatter.locale = .current\n                numberFormatter.numberStyle = .none\n                numberFormatter.minimumFractionDigits = 0\n                $0.formatter = numberFormatter\n                }.cellSetup { cell, row in\n                    cell.textField.placeholder = \"Proxy Server Port\".localized()\n                    row.disabled = Condition.function([\"readOnly\"], { _ in\n                        return self.readOnly\n                    })\n            }\n            <<< PushRow<String>(kProxyFormEncryption) {\n                $0.title = \"Encryption\".localized()\n                $0.options = Proxy.ssSupportedEncryption\n                $0.value = self.upstreamProxy.authscheme ?? Proxy.ssSupportedEncryption[2]\n                $0.selectorTitle = \"Choose encryption method\".localized()\n                $0.disabled = Condition.function([], { _ in\n                    return self.readOnly\n                })\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType), let isSS = r1.value?.isShadowsocks {\n                        return !isSS\n                    }\n                    return false\n                }\n            }\n            <<< PasswordRow(kProxyFormPassword) {\n                $0.title = \"Password\".localized()\n                $0.value = self.upstreamProxy.password ?? nil\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType), let isSS = r1.value?.isShadowsocks {\n                        return !isSS\n                    }\n                    return false\n                }\n                $0.disabled = Condition.function([], { _ in\n                    return self.readOnly\n                })\n            }.cellSetup { cell, row in\n                cell.textField.placeholder = \"Proxy Password\".localized()\n                cell.textField.isSecureTextEntry = self.readOnly\n            }\n\n            <<< SwitchRow(kProxyFormOta) {\n                $0.title = \"One Time Auth\".localized()\n                $0.value = self.upstreamProxy.ota\n                $0.disabled = Condition.function([], { _ in\n                    return self.readOnly\n                })\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType) {\n                        return (r1.value != ProxyType.Shadowsocks) || self.isEdit\n                    }\n                    return self.isEdit\n                }\n            }\n            <<< PushRow<String>(kProxyFormProtocol) {\n                $0.title = \"Protocol\".localized()\n                $0.value = self.upstreamProxy.ssrProtocol\n                $0.options = Proxy.ssrSupportedProtocol\n                $0.selectorTitle = \"Choose SSR protocol\".localized()\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType) {\n                        return r1.value != ProxyType.ShadowsocksR\n                    }\n                    return false\n                }\n            }\n            <<< PushRow<String>(kProxyFormObfs) {\n                $0.title = \"Obfs\".localized()\n                $0.value = self.upstreamProxy.ssrObfs\n                $0.options = Proxy.ssrSupportedObfs\n                $0.selectorTitle = \"Choose SSR obfs\".localized()\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType) {\n                        return r1.value != ProxyType.ShadowsocksR\n                    }\n                    return false\n                }\n            }\n            <<< TextRow(kProxyFormObfsParam) {\n                $0.title = \"Obfs Param\".localized()\n                $0.value = self.upstreamProxy.ssrObfsParam\n                $0.hidden = Condition.function([kProxyFormType]) { form in\n                    if let r1 : PushRow<ProxyType> = form.rowBy(tag: kProxyFormType) {\n                        return r1.value != ProxyType.ShadowsocksR\n                    }\n                    return false\n                }\n            }.cellSetup { cell, row in\n                cell.textField.placeholder = \"SSR Obfs Param\".localized()\n                cell.textField.autocorrectionType = .no\n                cell.textField.autocapitalizationType = .none\n            }\n        \n        form +++ section\n        if self.readOnly {\n            return\n        }\n        guard self.isEdit else {\n            return\n        }\n        \n        let proxyUri = self.upstreamProxy.shareUri()\n        if proxyUri.characters.count > 0 {\n            let footerSize = self.view.frame.width\n            self.tableView?.tableFooterView = ProxyQRCode(frame: CGRect.init(x: 0, y: 0, width: footerSize, height: footerSize), proxy: proxyUri, callback: { shareImage in\n\n                var objectsToShare = [AnyObject]()\n                objectsToShare.append(\"Try Mume😚\" as AnyObject)\n                objectsToShare.append(shareImage)\n                if let url = URL(string: proxyUri) {\n                    objectsToShare.append(url as AnyObject)\n                }\n\n                let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)\n                activityViewController.popoverPresentationController?.sourceView = self.view\n                self.present(activityViewController, animated: true, completion: nil)\n            })\n        }\n    }\n    \n    func onSave() {\n        if let error = self.save(to: &self.upstreamProxy) {\n            showTextHUD(\"\\(error)\", dismissAfterDelay: 1.0)\n            return\n        }\n        \n        if let _ = self.upstreamProxy.ip {\n            try? DBUtils.add(upstreamProxy)\n        } else {\n            ProxyUtils.resolve(host: self.upstreamProxy.host) { ip in\n                DispatchQueue.main.async {\n                    self.upstreamProxy.ip = ip\n                    try? DBUtils.add(self.upstreamProxy)\n                }\n            }\n        }\n        close()\n    }\n    \n    func save(to: inout Proxy) -> Error? {\n        do {\n            let values = form.values()\n            guard let type = values[kProxyFormType] as? ProxyType else {\n                throw \"You must choose a proxy type\".localized()\n            }\n            guard let host = (values[kProxyFormHost] as? String)?.trimmingCharacters(in: CharacterSet.whitespaces), host.characters.count > 0 else {\n                throw \"Host can't be empty\".localized()\n            }\n            if !self.isEdit {\n                if let _ = defaultRealm.objects(Proxy.self).filter(\"host = '\\(host)'\").first {\n                    throw \"Server already exists\".localized()\n                }\n            }\n            guard let port = values[kProxyFormPort] as? Int else {\n                throw \"Port can't be empty\".localized()\n            }\n            guard port > 0 && port < Int(UINT16_MAX) else {\n                throw \"Invalid port\".localized()\n            }\n            var authscheme: String?\n            let user: String? = nil\n            var password: String?\n            switch type {\n            case .Shadowsocks, .ShadowsocksR:\n                guard let encryption = values[kProxyFormEncryption] as? String, encryption.characters.count > 0 else {\n                    throw \"You must choose a encryption method\".localized()\n                }\n                guard let pass = values[kProxyFormPassword] as? String, pass.characters.count > 0 else {\n                    throw \"Password can't be empty\".localized()\n                }\n                authscheme = encryption\n                password = pass\n            default:\n                break\n            }\n            let ota = values[kProxyFormOta] as? Bool ?? false\n            to.type = type\n            to.host = host\n            to.port = port\n            to.authscheme = authscheme\n            to.user = user\n            to.password = password\n            to.ota = ota\n            to.ssrProtocol = values[kProxyFormProtocol] as? String\n            to.ssrObfs = values[kProxyFormObfs] as? String\n            to.ssrObfsParam = values[kProxyFormObfsParam] as? String\n            to.ip = nil\n            return nil\n        } catch {\n            return error\n        }\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Advance/ProxySelectionViewController.swift",
    "content": "//\n//  ProxySelectionViewController.swift\n//  Potatso\n//\n//  Created by LEI on 3/10/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Eureka\nimport PotatsoLibrary\nimport PotatsoModel\n\nclass ProxySelectionViewController: FormViewController {\n    \n    var proxies: [Proxy] = []\n    var selectedProxies: NSMutableSet\n    var callback: (([Proxy]) -> Void)?\n    \n    init(selectedProxies: [Proxy], callback: (([Proxy]) -> Void)?) {\n        self.selectedProxies = NSMutableSet(array: selectedProxies)\n        self.callback = callback\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"Choose Proxy\".localized()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        generateForm()\n    }\n\n    func generateForm() {\n        form.delegate = nil\n        form.removeAll()\n        self.proxies = defaultRealm.objects(Proxy.self).sorted(byKeyPath: \"createAt\").map{ $0 }\n        form +++ Section(\"Proxy\".localized())\n        for proxy in self.proxies {\n            form[0]\n                <<< CheckRow(proxy.description) {\n                    $0.title = proxy.description\n                    $0.value = selectedProxies.contains(proxy)\n            }.onChange({ [unowned self] (row) in\n                self.selectProxy(row)\n            })\n        }\n        form[0] <<< BaseButtonRow () {\n            $0.title = \"Add Proxy\".localized()\n        }.cellUpdate({ (cell, row) in\n            cell.textLabel?.textColor = Color.Brand\n        }).onCellSelection({ [unowned self] (cell, row) -> () in\n            self.showProxyConfiguration(nil)\n        })\n        form.delegate = self\n        tableView?.reloadData()\n    }\n    \n    func selectProxy(_ selectedRow: CheckRow) {\n        selectedProxies.removeAllObjects()\n        let values = form.values()\n        for proxy in proxies {\n            if let checked = values[proxy.host] as? Bool, checked && proxy.description == selectedRow.title {\n                selectedProxies.add(proxy)\n            }\n        }\n        self.callback?(selectedProxies.allObjects as! [Proxy])\n        close()\n    }\n    \n    func showProxyConfiguration(_ proxy: Proxy?) {\n        let vc = ProxyConfigurationViewController(upstreamProxy: proxy)\n        navigationController?.pushViewController(vc, animated: true)\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Advance/RuleConfigurationViewController.swift",
    "content": "//\n//  RuleConfigurationViewController.swift\n//  Potatso\n//\n//  Created by LEI on 3/9/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport PotatsoLibrary\nimport PotatsoModel\nimport RealmSwift\nimport Eureka\n\nprivate let kRuleFormType = \"type\"\nprivate let kRuleFormValue = \"value\"\nprivate let kRuleFormAction = \"action\"\n\nextension Rule {\n    \n    var rowDescription: (String?, String?) {\n        return (action.rawValue, \"\\(type.rawValue)(\\(value))\")\n    }\n    \n}\n\nclass RuleConfigurationViewController: FormViewController {\n\n    var rule: Rule\n    var callback: ((Rule) -> Void)?\n    var editable: Bool = true\n    let isEdit: Bool\n    \n    init(rule: Rule?, callback: ((Rule) -> Void)?) {\n        if let rule = rule {\n            self.rule = rule\n            isEdit = true\n        }else {\n            self.rule = Rule(type: MMRuleType.DomainSuffix, action: RuleAction.Proxy, value: \"\")\n            isEdit = false\n        }\n        self.callback = callback\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        if editable {\n            if isEdit {\n                self.navigationItem.title = \"Edit Rule\".localized()\n            }else {\n                self.navigationItem.title = \"Add Rule\".localized()\n            }\n            navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(save))\n        }else {\n            navigationItem.title = \"Rule\".localized()\n        }\n        generateForm()\n    }\n    \n    func generateForm() {\n        form +++ Section()\n            <<< PushRow<MMRuleType>(kRuleFormType) {\n                $0.title = \"Type\".localized()\n                $0.selectorTitle = \"Choose type of rule\".localized()\n                $0.options = [MMRuleType.DomainSuffix, MMRuleType.DomainMatch, MMRuleType.Domain, MMRuleType.IPCIDR, MMRuleType.GeoIP]\n                $0.value = self.rule.type\n                $0.disabled = Condition(booleanLiteral: !editable)\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                })\n            <<< TextRow(kRuleFormValue) {\n                $0.title = \"Value\".localized()\n                $0.value = self.rule.value\n                $0.disabled = Condition(booleanLiteral: !editable)\n                }.cellSetup({ (cell, row) -> () in\n                    cell.textField.keyboardType = .URL\n                    cell.textField.autocorrectionType = .no\n                    cell.textField.autocapitalizationType = .none\n                })\n            <<< PushRow<RuleAction>(kRuleFormAction) {\n                $0.title = \"Action\".localized()\n                $0.selectorTitle = \"Choose action for rule\".localized()\n                $0.options = [RuleAction.Proxy, RuleAction.Direct, RuleAction.Reject]\n                $0.value = self.rule.action\n                $0.disabled = Condition(booleanLiteral: !editable)\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                })\n    }\n    \n    func save() {\n        do {\n            let values = form.values()\n            guard let type = values[kRuleFormType] as? MMRuleType else {\n                throw \"You must choose a type\".localized()\n            }\n            guard let value = (values[kRuleFormValue] as? String)?.trimmingCharacters(in: CharacterSet.whitespaces), value.characters.count > 0 else {\n                throw \"Value can't be empty\".localized()\n            }\n            guard let action = values[kRuleFormAction] as? RuleAction else {\n                throw \"You must choose a action\".localized()\n            }\n            rule.type = type\n            rule.value = value\n            rule.action = action\n            callback?(rule)\n            close()\n        }catch {\n            showTextHUD(\"\\(error)\", dismissAfterDelay: 1.0)\n        }\n    }\n\n    \n}\n"
  },
  {
    "path": "Potatso/Advance/RuleSetConfigurationViewController.swift",
    "content": "//\n//  RuleSetConfigurationViewController.swift\n//  Potatso\n//\n//  Created by LEI on 3/9/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Eureka\nimport PotatsoLibrary\nimport PotatsoModel\n\nprivate let kRuleSetFormName = \"name\"\n\nclass RuleSetConfigurationViewController: FormViewController {\n\n    var ruleSet: PotatsoModel.RuleSet\n    let isEdit: Bool\n    var editable: Bool {\n        return ruleSet.editable && !ruleSet.isSubscribe\n    }\n    var callback: ((PotatsoModel.RuleSet?) -> Void)?\n    var editSection: Section = Section()\n\n    init(ruleSet: PotatsoModel.RuleSet? = nil, callback: ((PotatsoModel.RuleSet?) -> Void)? = nil) {\n        self.callback = callback\n        if let ruleSet = ruleSet {\n            self.ruleSet = RuleSet(value: ruleSet)\n            self.isEdit = true\n        } else {\n            self.ruleSet = RuleSet()\n            self.isEdit = false\n        }\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        if editable {\n            navigationItem.title = isEdit ? \"Edit Rule Set\".localized() : \"Add Rule Set\".localized()\n        }else {\n            navigationItem.title = ruleSet.name\n        }\n        generateForm()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        if editable {\n            navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(save))\n        }\n        tableView?.reloadData()\n    }\n\n    func generateForm() {\n        form.removeAll()\n        form +++ Section()\n            <<< TextRow(kRuleSetFormName) {\n                $0.title = \"Name\".localized()\n                $0.value = self.ruleSet.name\n                $0.disabled = Condition(booleanLiteral: !self.editable)\n            }.cellSetup { cell, row in\n                cell.textField.placeholder = \"Rule Set Name\".localized()\n            }\n        \n        editSection = Section(\"Rule\".localized())\n        if editable {\n            editSection <<< BaseButtonRow () {\n                $0.title = \"Add Rule\".localized()\n            }.cellUpdate({ (cell, row) in\n                cell.textLabel?.textColor = Color.Brand\n            }).onCellSelection({ [unowned self] (cell, row) -> () in\n                self.showRuleConfiguration(nil)\n            })\n        }\n        for rule in ruleSet.rules {\n            insertRule(rule, atIndex: editSection.count)\n        }\n        form +++ editSection\n    }\n\n    func insertRule(_ rule: Rule, atIndex index: NSInteger) {\n        editSection.insert(LabelRow () {\n                $0.title = rule.rowDescription.0 == nil ? \"\" : \"\\(rule.rowDescription.0!)\"\n                $0.value = rule.rowDescription.1 == nil ? \"\" : \"\\(rule.rowDescription.1!)\"\n                $0.disabled = Condition(booleanLiteral: !self.editable)\n            }.cellSetup({ (cell, row) -> () in\n                cell.accessoryType = .disclosureIndicator\n                cell.selectionStyle = .default\n            }).cellUpdate({ (cell, row) -> () in\n                row.title = rule.rowDescription.0 == nil ? \"\" : \"\\(rule.rowDescription.0!)\"\n                row.value = rule.rowDescription.1 == nil ? \"\" : \"\\(rule.rowDescription.1!)\"\n            }).onCellSelection({ [unowned self] (cell, row) -> () in\n                self.showRuleConfiguration(rule, index: index - 1)\n            }),\n            at: index)\n    }\n    \n    func showRuleConfiguration(_ rule: Rule?, index: Int = 0) {\n        let vc = RuleConfigurationViewController(rule: rule) { result in\n            if rule == nil {\n                self.insertRule(result, atIndex: self.form[1].count)\n                self.ruleSet.addRule(result)\n            } else {\n                var rules = self.ruleSet.rules\n                rules[index] = result\n                self.ruleSet.rules = rules\n            }\n        }\n        vc.editable = editable\n        navigationController?.pushViewController(vc, animated: true)\n    }\n    \n    func save() {\n        do {\n            let values = form.values()\n            guard let name = (values[kRuleSetFormName] as? String)?.trimmingCharacters(in: CharacterSet.whitespaces), name.characters.count > 0 else {\n                throw \"Name can't be empty\".localized()\n            }\n            ruleSet.name = name\n            try DBUtils.add(ruleSet)\n            callback?(ruleSet)\n            close()\n        } catch {\n            showTextHUD(\"\\(error)\", dismissAfterDelay: 1.0)\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        if indexPath.section == 1 {\n            if editable {\n                return indexPath.row > 0\n            }\n        }\n        return false\n    }\n    \n    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        if editingStyle == .delete {\n            ruleSet.removeRule(atIndex: indexPath.row - 1)\n            form[indexPath].hidden = true\n            form[indexPath].evaluateHidden()\n        }\n    }\n    \n    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {\n        return UITableViewCellEditingStyle.delete\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Advance/RuleSetsSelectionViewController.swift",
    "content": "//\n//  RuleSetsSelectionViewController.swift\n//  Potatso\n//\n//  Created by LEI on 3/9/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport PotatsoLibrary\nimport PotatsoModel\nimport Eureka\n\nclass RuleSetsSelectionViewController: FormViewController {\n\n    var selectedRuleSets: [PotatsoModel.RuleSet]\n    var callback: (([PotatsoModel.RuleSet]) -> Void)?\n    var ruleSets: [PotatsoModel.RuleSet] = []\n    \n    init(selectedRuleSets: [PotatsoModel.RuleSet], callback: (([PotatsoModel.RuleSet]) -> Void)?) {\n        self.selectedRuleSets = selectedRuleSets\n        self.callback = callback\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"Choose Rule Set\".localized()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        generateForm()\n    }\n    \n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        selectedRuleSets.removeAll()\n        let values = form.values()\n        for ruleSet in ruleSets {\n            if let checked = values[ruleSet.name] as? Bool, checked {\n                selectedRuleSets.append(ruleSet)\n            }\n        }\n        self.callback?(selectedRuleSets)\n    }\n    \n    func generateForm() {\n        form.delegate = nil\n        form.removeAll()\n        ruleSets = defaultRealm.objects(PotatsoModel.RuleSet).sorted(byKeyPath: \"createAt\").map({ $0 })\n        form +++ Section(\"Rule Set\".localized())\n        for ruleSet in ruleSets {\n            form[0]\n                <<< CheckRow(ruleSet.name) {\n                    $0.title = ruleSet.name\n                    $0.value = selectedRuleSets.contains(ruleSet)\n                }\n        }\n        form[0] <<< BaseButtonRow () {\n            $0.title = \"Add Rule Set\".localized()\n        }.cellUpdate({ (cell, row) in\n            cell.textLabel?.textColor = Color.Brand\n        }).onCellSelection({ [unowned self] (cell, row) -> () in\n            self.showRuleSetConfiguration(nil)\n        })\n        form.delegate = self\n        tableView?.reloadData()\n    }\n    \n    func showRuleSetConfiguration(_ ruleSet: PotatsoModel.RuleSet?) {\n        let vc = RuleSetConfigurationViewController(ruleSet: ruleSet)\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n}\n"
  },
  {
    "path": "Potatso/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  Potatso\n//\n//  Created by LEI on 12/12/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport ICSMainFramework\n\n@UIApplicationMain\nprivate class AppDelegate: ICSMainFramework.AppDelegate {\n}\n\n"
  },
  {
    "path": "Potatso/AppInitializer.swift",
    "content": "//\n//  AppInitilizer.swift\n//  Potatso\n//\n//  Created by LEI on 12/27/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport ICSMainFramework\nimport Fabric\n\nlet appID = \"1144787928\"\n\nclass AppInitializer: NSObject, AppLifeCycleProtocol {\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        configAppirater()\n        #if !DEBUG\n            Fabric.with([Answers.self, Crashlytics.self])\n        #endif\n        return true\n    }\n\n    func configAppirater() {\n        Appirater.setAppId(appID)\n        Appirater.appLaunched(true)\n        Appirater.setDaysUntilPrompt(1)\n        Appirater.setUsesUntilPrompt(3)\n        Appirater.setSignificantEventsUntilPrompt(1)\n        Appirater.setAlwaysUseMainBundle(true)\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Back.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Back@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Back@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Config Selected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config Selected@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config Selected@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Config.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Dashboard Selected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Dashboard Selected@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Dashboard Selected@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Dashboard.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Dashboard@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Dashboard@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Direct.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Direct@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Direct@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Home Selected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Home Selected@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Home Selected@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Home.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Home@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Home@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/List.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"List@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"List@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Log.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Config@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/More Selected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"More Selected@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"More Selected@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/More.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"More@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"More@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Mume.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Proxy.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Proxy@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Proxy@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Reject.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Reject@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Reject@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Selected.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"selected@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Settings.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Settings@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Settings@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/Shadowsocks.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Shadowsocks@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"Shadowsocks@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Assets.xcassets/User.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"User@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"User@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Potatso/Base/ActionRow.swift",
    "content": "//\n//  ActionRow.swift\n//  Potatso\n//\n//  Created by LEI on 8/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Eureka\n\npublic final class ActionRow: _LabelRow, RowType {\n\n    public required init(tag: String?) {\n        super.init(tag: tag)\n    }\n\n    public override func updateCell() {\n        super.updateCell()\n        cell.selectionStyle = .default\n        cell.accessoryType = .disclosureIndicator\n    }\n\n    public override func didSelect() {\n        super.didSelect()\n        cell.setSelected(false, animated: true)\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Base/Appirater/Appirater.h",
    "content": "/*\n This file is part of Appirater.\n \n Copyright (c) 2012, Arash Payan\n All rights reserved.\n \n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n 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\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n/*\n * Appirater.h\n * appirater\n *\n * Created by Arash Payan on 9/5/09.\n * http://arashpayan.com\n * Copyright 2012 Arash Payan. All rights reserved.\n */\n\n#import <Foundation/Foundation.h>\n#import <StoreKit/StoreKit.h>\n#import \"AppiraterDelegate.h\"\n\nextern NSString *const kAppiraterFirstUseDate;\nextern NSString *const kAppiraterUseCount;\nextern NSString *const kAppiraterSignificantEventCount;\nextern NSString *const kAppiraterCurrentVersion;\nextern NSString *const kAppiraterRatedCurrentVersion;\nextern NSString *const kAppiraterDeclinedToRate;\nextern NSString *const kAppiraterReminderRequestDate;\n\n/*!\n Your localized app's name.\n */\n#define APPIRATER_LOCALIZED_APP_NAME    [[[NSBundle mainBundle] localizedInfoDictionary] objectForKey:@\"CFBundleDisplayName\"]\n\n/*!\n Your app's name.\n */\n#define APPIRATER_APP_NAME\t\t\t\tAPPIRATER_LOCALIZED_APP_NAME ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:@\"CFBundleDisplayName\"] ?: [[[NSBundle mainBundle] infoDictionary] objectForKey:@\"CFBundleName\"]\n\n/*!\n This is the message your users will see once they've passed the day+launches\n threshold.\n */\n#define APPIRATER_LOCALIZED_MESSAGE     NSLocalizedStringFromTableInBundle(@\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\", @\"AppiraterLocalizable\", [Appirater bundle], nil)\n#define APPIRATER_MESSAGE\t\t\t\t[NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE, APPIRATER_APP_NAME]\n\n/*!\n This is the title of the message alert that users will see.\n */\n#define APPIRATER_LOCALIZED_MESSAGE_TITLE  [[Appirater bundle] localizedStringForKey:@\"Rate %@\" value:@\"Rate %@\" table:@\"AppiraterLocalizable\"]\n\n#define APPIRATER_MESSAGE_TITLE             [NSString stringWithFormat:APPIRATER_LOCALIZED_MESSAGE_TITLE, APPIRATER_APP_NAME]\n\n/*!\n The text of the button that rejects reviewing the app.\n */\n#define APPIRATER_CANCEL_BUTTON\t\t\tNSLocalizedStringFromTableInBundle(@\"No, Thanks\", @\"AppiraterLocalizable\", [Appirater bundle], nil)\n\n/*!\n Text of button that will send user to app review page.\n */\n#define APPIRATER_LOCALIZED_RATE_BUTTON NSLocalizedStringFromTableInBundle(@\"Rate %@\", @\"AppiraterLocalizable\", [Appirater bundle], nil)\n#define APPIRATER_RATE_BUTTON\t\t\t[NSString stringWithFormat:APPIRATER_LOCALIZED_RATE_BUTTON, APPIRATER_APP_NAME]\n\n/*!\n Text for button to remind the user to review later.\n */\n#define APPIRATER_RATE_LATER\t\t\tNSLocalizedStringFromTableInBundle(@\"Remind me later\", @\"AppiraterLocalizable\", [Appirater bundle], nil)\n\n@interface Appirater : NSObject <UIAlertViewDelegate, SKStoreProductViewControllerDelegate> {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n\tUIAlertView\t\t*ratingAlert;\n#pragma clang diagnostic pop\n}\n\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n@property(nonatomic, strong) UIAlertView *ratingAlert;\n#pragma clang diagnostic pop\n@property(nonatomic) BOOL openInAppStore;\n#if __has_feature(objc_arc_weak)\n@property(nonatomic, weak) NSObject <AppiraterDelegate> *delegate;\n#else\n@property(nonatomic, unsafe_unretained) NSObject <AppiraterDelegate> *delegate;\n#endif\n\n/*!\n Tells Appirater that the app has launched, and on devices that do NOT\n support multitasking, the 'uses' count will be incremented. You should\n call this method at the end of your application delegate's\n application:didFinishLaunchingWithOptions: method.\n \n If the app has been used enough to be rated (and enough significant events),\n you can suppress the rating alert\n by passing NO for canPromptForRating. The rating alert will simply be postponed\n until it is called again with YES for canPromptForRating. The rating alert\n can also be triggered by appEnteredForeground: and userDidSignificantEvent:\n (as long as you pass YES for canPromptForRating in those methods).\n */\n+ (void)appLaunched:(BOOL)canPromptForRating;\n\n/*!\n Tells Appirater that the app was brought to the foreground on multitasking\n devices. You should call this method from the application delegate's\n applicationWillEnterForeground: method.\n \n If the app has been used enough to be rated (and enough significant events),\n you can suppress the rating alert\n by passing NO for canPromptForRating. The rating alert will simply be postponed\n until it is called again with YES for canPromptForRating. The rating alert\n can also be triggered by appLaunched: and userDidSignificantEvent:\n (as long as you pass YES for canPromptForRating in those methods).\n */\n+ (void)appEnteredForeground:(BOOL)canPromptForRating;\n\n/*!\n Tells Appirater that the user performed a significant event. A significant\n event is whatever you want it to be. If you're app is used to make VoIP\n calls, then you might want to call this method whenever the user places\n a call. If it's a game, you might want to call this whenever the user\n beats a level boss.\n \n If the user has performed enough significant events and used the app enough,\n you can suppress the rating alert by passing NO for canPromptForRating. The\n rating alert will simply be postponed until it is called again with YES for\n canPromptForRating. The rating alert can also be triggered by appLaunched:\n and appEnteredForeground: (as long as you pass YES for canPromptForRating\n in those methods).\n */\n+ (void)userDidSignificantEvent:(BOOL)canPromptForRating;\n\n/*!\n Tells Appirater to try and show the prompt (a rating alert). The prompt will be showed\n if there is connection available, the user hasn't declined to rate\n or hasn't rated current version.\n \n You could call to show the prompt regardless Appirater settings,\n e.g., in case of some special event in your app.\n */\n+ (void)tryToShowPrompt;\n\n/*!\n Tells Appirater to show the prompt (a rating alert).\n Similar to tryToShowPrompt, but without checks (the prompt is always displayed).\n Passing false will hide the rate later button on the prompt.\n  \n The only case where you should call this is if your app has an\n explicit \"Rate this app\" command somewhere. This is similar to rateApp,\n but instead of jumping to the review directly, an intermediary prompt is displayed.\n */\n+ (void)forceShowPrompt:(BOOL)displayRateLaterButton;\n\n/*!\n Tells Appirater to open the App Store page where the user can specify a\n rating for the app. Also records the fact that this has happened, so the\n user won't be prompted again to rate the app.\n\n The only case where you should call this directly is if your app has an\n explicit \"Rate this app\" command somewhere.  In all other cases, don't worry\n about calling this -- instead, just call the other functions listed above,\n and let Appirater handle the bookkeeping of deciding when to ask the user\n whether to rate the app.\n */\n+ (void)rateApp;\n\n/*!\n Tells Appirater to immediately close any open rating modals (e.g. StoreKit rating VCs).\n*/\n+ (void)closeModal;\n\n/*!\n Asks Appirater if the user has declined to rate;\n*/\n- (BOOL)userHasDeclinedToRate;\n\n/*!\n Asks Appirater if the user has rated the current version.\n Note that this is not a guarantee that the user has actually rated the app in the \n app store, but they've just clicked the rate button on the Appirater dialog. \n*/\n- (BOOL)userHasRatedCurrentVersion;\n\n@end\n\n@interface Appirater(Configuration)\n\n/*!\n Set your Apple generated software id here.\n */\n+ (void) setAppId:(NSString*)appId;\n\n/*!\n Users will need to have the same version of your app installed for this many\n days before they will be prompted to rate it.\n */\n+ (void) setDaysUntilPrompt:(double)value;\n\n/*!\n An example of a 'use' would be if the user launched the app. Bringing the app\n into the foreground (on devices that support it) would also be considered\n a 'use'. You tell Appirater about these events using the two methods:\n [Appirater appLaunched:]\n [Appirater appEnteredForeground:]\n \n Users need to 'use' the same version of the app this many times before\n before they will be prompted to rate it.\n */\n+ (void) setUsesUntilPrompt:(NSInteger)value;\n\n/*!\n A significant event can be anything you want to be in your app. In a\n telephone app, a significant event might be placing or receiving a call.\n In a game, it might be beating a level or a boss. This is just another\n layer of filtering that can be used to make sure that only the most\n loyal of your users are being prompted to rate you on the app store.\n If you leave this at a value of -1, then this won't be a criterion\n used for rating. To tell Appirater that the user has performed\n a significant event, call the method:\n [Appirater userDidSignificantEvent:];\n */\n+ (void) setSignificantEventsUntilPrompt:(NSInteger)value;\n\n\n/*!\n Once the rating alert is presented to the user, they might select\n 'Remind me later'. This value specifies how long (in days) Appirater\n will wait before reminding them.\n */\n+ (void) setTimeBeforeReminding:(double)value;\n\n/*!\n Set customized title for alert view.\n */\n+ (void) setCustomAlertTitle:(NSString *)title;\n\n/*!\n Set customized message for alert view.\n */\n+ (void) setCustomAlertMessage:(NSString *)message;\n\n/*!\n Set customized cancel button title for alert view.\n */\n+ (void) setCustomAlertCancelButtonTitle:(NSString *)cancelTitle;\n\n/*!\n Set customized rate button title for alert view.\n */\n+ (void) setCustomAlertRateButtonTitle:(NSString *)rateTitle;\n\n/*!\n Set customized rate later button title for alert view.\n */\n+ (void) setCustomAlertRateLaterButtonTitle:(NSString *)rateLaterTitle;\n\n/*!\n 'YES' will show the Appirater alert everytime. Useful for testing how your message\n looks and making sure the link to your app's review page works.\n */\n+ (void) setDebug:(BOOL)debug;\n\n/*!\n Set the delegate if you want to know when Appirater does something\n */\n+ (void)setDelegate:(id<AppiraterDelegate>)delegate;\n\n/*!\n Set whether or not Appirater uses animation (currently respected when pushing modal StoreKit rating VCs).\n */\n+ (void)setUsesAnimation:(BOOL)animation;\n\n/*!\n If set to YES, Appirater will open App Store link (instead of SKStoreProductViewController on iOS 6). Default YES.\n */\n+ (void)setOpenInAppStore:(BOOL)openInAppStore;\n\n/*!\n If set to YES, the main bundle will always be used to load localized strings.\n Set this to YES if you have provided your own custom localizations in AppiraterLocalizable.strings\n in your main bundle.  Default is NO.\n */\n+ (void)setAlwaysUseMainBundle:(BOOL)useMainBundle;\n\n@end\n\n\n/*!\n Methods in this interface are public out of necessity, but may change without notice\n */\n@interface Appirater(Unsafe)\n\n/*!\n The bundle localized strings will be loaded from.\n*/\n+(NSBundle *)bundle;\n\n@end\n\n@interface Appirater(Deprecated)\n\n/*!\n DEPRECATED: While still functional, it's better to use\n appLaunched:(BOOL)canPromptForRating instead.\n \n Calls [Appirater appLaunched:YES]. See appLaunched: for details of functionality.\n */\n+ (void)appLaunched __attribute__((deprecated)); \n\n/*!\n DEPRECATED: While still functional, it's better to use\n tryToShowPrompt instead.\n \n Calls [Appirater tryToShowPrompt]. See tryToShowPrompt for details of functionality.\n */\n+ (void)showPrompt __attribute__((deprecated));\n\n@end\n"
  },
  {
    "path": "Potatso/Base/Appirater/Appirater.m",
    "content": "/*\n This file is part of Appirater.\n \n Copyright (c) 2012, Arash Payan\n All rights reserved.\n \n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n 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\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n/*\n * Appirater.m\n * appirater\n *\n * Created by Arash Payan on 9/5/09.\n * http://arashpayan.com\n * Copyright 2012 Arash Payan. All rights reserved.\n */\n\n#import <SystemConfiguration/SystemConfiguration.h>\n#import <CFNetwork/CFNetwork.h>\n#import \"Appirater.h\"\n#include <netinet/in.h>\n\n#if ! __has_feature(objc_arc)\n#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).\n#endif\n\nNSString *const kAppiraterFirstUseDate\t\t\t\t= @\"kAppiraterFirstUseDate\";\nNSString *const kAppiraterUseCount\t\t\t\t\t= @\"kAppiraterUseCount\";\nNSString *const kAppiraterSignificantEventCount\t\t= @\"kAppiraterSignificantEventCount\";\nNSString *const kAppiraterCurrentVersion\t\t\t= @\"kAppiraterCurrentVersion\";\nNSString *const kAppiraterRatedCurrentVersion\t\t= @\"kAppiraterRatedCurrentVersion\";\nNSString *const kAppiraterDeclinedToRate\t\t\t= @\"kAppiraterDeclinedToRate\";\nNSString *const kAppiraterReminderRequestDate\t\t= @\"kAppiraterReminderRequestDate\";\n\nNSString *templateReviewURL = @\"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=APP_ID\";\nNSString *templateReviewURLiOS7 = @\"itms-apps://itunes.apple.com/app/idAPP_ID\";\nNSString *templateReviewURLiOS8 = @\"itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?id=APP_ID&onlyLatestVersion=true&pageNumber=0&sortOrdering=1&type=Purple+Software\";\n\nstatic NSString *_appId;\nstatic double _daysUntilPrompt = 30;\nstatic NSInteger _usesUntilPrompt = 20;\nstatic NSInteger _significantEventsUntilPrompt = -1;\nstatic double _timeBeforeReminding = 1;\nstatic BOOL _debug = NO;\n#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_5_0\n\tstatic id<AppiraterDelegate> _delegate;\n#else\n\t__weak static id<AppiraterDelegate> _delegate;\n#endif\nstatic BOOL _usesAnimation = TRUE;\nstatic UIStatusBarStyle _statusBarStyle;\nstatic BOOL _modalOpen = false;\nstatic BOOL _alwaysUseMainBundle = NO;\n\n@interface Appirater ()\n@property (nonatomic, copy) NSString *alertTitle;\n@property (nonatomic, copy) NSString *alertMessage;\n@property (nonatomic, copy) NSString *alertCancelTitle;\n@property (nonatomic, copy) NSString *alertRateTitle;\n@property (nonatomic, copy) NSString *alertRateLaterTitle;\n@property (nonatomic, strong) NSOperationQueue *eventQueue;\n- (BOOL)connectedToNetwork;\n+ (Appirater*)sharedInstance;\n- (void)showPromptWithChecks:(BOOL)withChecks\n      displayRateLaterButton:(BOOL)displayRateLaterButton;\n- (void)showRatingAlert:(BOOL)displayRateLaterButton;\n- (void)showRatingAlert;\n- (BOOL)ratingAlertIsAppropriate;\n- (BOOL)ratingConditionsHaveBeenMet;\n- (void)incrementUseCount;\n- (void)hideRatingAlert;\n@end\n\n@implementation Appirater \n\n@synthesize ratingAlert;\n\n+ (void) setAppId:(NSString *)appId {\n    _appId = appId;\n}\n\n+ (void) setDaysUntilPrompt:(double)value {\n    _daysUntilPrompt = value;\n}\n\n+ (void) setUsesUntilPrompt:(NSInteger)value {\n    _usesUntilPrompt = value;\n}\n\n+ (void) setSignificantEventsUntilPrompt:(NSInteger)value {\n    _significantEventsUntilPrompt = value;\n}\n\n+ (void) setTimeBeforeReminding:(double)value {\n    _timeBeforeReminding = value;\n}\n\n+ (void) setCustomAlertTitle:(NSString *)title\n{\n    [self sharedInstance].alertTitle = title;\n}\n\n+ (void) setCustomAlertMessage:(NSString *)message\n{\n    [self sharedInstance].alertMessage = message;\n}\n\n+ (void) setCustomAlertCancelButtonTitle:(NSString *)cancelTitle\n{\n    [self sharedInstance].alertCancelTitle = cancelTitle;\n}\n\n+ (void) setCustomAlertRateButtonTitle:(NSString *)rateTitle\n{\n    [self sharedInstance].alertRateTitle = rateTitle;\n}\n\n+ (void) setCustomAlertRateLaterButtonTitle:(NSString *)rateLaterTitle\n{\n    [self sharedInstance].alertRateLaterTitle = rateLaterTitle;\n}\n\n+ (void) setDebug:(BOOL)debug {\n    _debug = debug;\n}\n+ (void)setDelegate:(id<AppiraterDelegate>)delegate{\n\t_delegate = delegate;\n}\n+ (void)setUsesAnimation:(BOOL)animation {\n\t_usesAnimation = animation;\n}\n+ (void)setOpenInAppStore:(BOOL)openInAppStore {\n    [Appirater sharedInstance].openInAppStore = openInAppStore;\n}\n+ (void)setStatusBarStyle:(UIStatusBarStyle)style {\n\t_statusBarStyle = style;\n}\n+ (void)setModalOpen:(BOOL)open {\n\t_modalOpen = open;\n}\n+ (void)setAlwaysUseMainBundle:(BOOL)alwaysUseMainBundle {\n    _alwaysUseMainBundle = alwaysUseMainBundle;\n}\n\n+ (NSBundle *)bundle\n{\n    NSBundle *bundle;\n\n    if (_alwaysUseMainBundle) {\n        bundle = [NSBundle mainBundle];\n    } else {\n        bundle = [NSBundle bundleForClass:[self class]];\n    }\n\n    return bundle;\n}\n\n- (NSString *)alertTitle\n{\n    return _alertTitle ? _alertTitle : APPIRATER_MESSAGE_TITLE;\n}\n\n- (NSString *)alertMessage\n{\n    return _alertMessage ? _alertMessage : APPIRATER_MESSAGE;\n}\n\n- (NSString *)alertCancelTitle\n{\n    return _alertCancelTitle ? _alertCancelTitle : APPIRATER_CANCEL_BUTTON;\n}\n\n- (NSString *)alertRateTitle\n{\n    return _alertRateTitle ? _alertRateTitle : APPIRATER_RATE_BUTTON;\n}\n\n- (NSString *)alertRateLaterTitle\n{\n    return _alertRateLaterTitle ? _alertRateLaterTitle : APPIRATER_RATE_LATER;\n}\n\n- (void)dealloc {\n    [[NSNotificationCenter defaultCenter] removeObserver:self];\n}\n\n- (id)init {\n    self = [super init];\n    if (self) {\n        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {\n            self.openInAppStore = YES;\n        } else {\n            self.openInAppStore = NO;\n        }\n    }\n    \n    return self;\n}\n\n- (BOOL)connectedToNetwork {\n    // Create zero addy\n    struct sockaddr_in zeroAddress;\n    bzero(&zeroAddress, sizeof(zeroAddress));\n    zeroAddress.sin_len = sizeof(zeroAddress);\n    zeroAddress.sin_family = AF_INET;\n\t\n    // Recover reachability flags\n    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);\n    SCNetworkReachabilityFlags flags;\n\t\n    Boolean didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);\n    CFRelease(defaultRouteReachability);\n\t\n    if (!didRetrieveFlags)\n    {\n        NSLog(@\"Error. Could not recover network reachability flags\");\n        return NO;\n    }\n\t\n    BOOL isReachable = flags & kSCNetworkFlagsReachable;\n    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;\n\tBOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;\n\t\n\tNSURL *testURL = [NSURL URLWithString:@\"http://www.apple.com/\"];\n\t\n    NSURLSessionConfiguration* sessionConfiguration = [NSURLSessionConfiguration ephemeralSessionConfiguration];\n    sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;\n    sessionConfiguration.timeoutIntervalForRequest = 20.0;\n\n    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];\n\n    NSURLSessionTask *task = [session dataTaskWithURL:testURL];\n    [task resume];\n    \n    return ((isReachable && !needsConnection) || nonWiFi) ? ( (task.state != NSURLSessionTaskStateSuspended) ? YES : NO ) : NO;\n}\n\n+ (Appirater*)sharedInstance {\n\tstatic Appirater *appirater = nil;\n\tif (appirater == nil)\n\t{\n        static dispatch_once_t onceToken;\n        dispatch_once(&onceToken, ^{\n            appirater = [[Appirater alloc] init];\n\t\t\tappirater.delegate = _delegate;\n            appirater.eventQueue = [[NSOperationQueue alloc] init];\n            appirater.eventQueue.maxConcurrentOperationCount = 1;\n            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResignActive) name:\n                UIApplicationWillResignActiveNotification object:nil];\n        });\n\t}\n\t\n\treturn appirater;\n}\n\n- (void)showRatingAlert:(BOOL)displayRateLaterButton {\n  UIAlertView *alertView = nil;\n  id <AppiraterDelegate> delegate = _delegate;\n    \n  if(delegate && [delegate respondsToSelector:@selector(appiraterShouldDisplayAlert:)] && ![delegate appiraterShouldDisplayAlert:self]) {\n      return;\n  }\n  \n  if (displayRateLaterButton) {\n  \talertView = [[UIAlertView alloc] initWithTitle:self.alertTitle\n                                           message:self.alertMessage\n                                          delegate:self\n                                 cancelButtonTitle:self.alertCancelTitle\n                                 otherButtonTitles:self.alertRateTitle, self.alertRateLaterTitle, nil];\n  } else {\n  \talertView = [[UIAlertView alloc] initWithTitle:self.alertTitle\n                                           message:self.alertMessage\n                                          delegate:self\n                                 cancelButtonTitle:self.alertCancelTitle\n                                 otherButtonTitles:self.alertRateTitle, nil];\n  }\n\n\tself.ratingAlert = alertView;\n    [alertView show];\n\n    if (delegate && [delegate respondsToSelector:@selector(appiraterDidDisplayAlert:)]) {\n             [delegate appiraterDidDisplayAlert:self];\n    }\n}\n\n- (void)showRatingAlert\n{\n  [self showRatingAlert:true];\n}\n\n// is this an ok time to show the alert? (regardless of whether the rating conditions have been met)\n//\n// things checked here:\n// * connectivity with network\n// * whether user has rated before\n// * whether user has declined to rate\n// * whether rating alert is currently showing visibly\n// things NOT checked here:\n// * time since first launch\n// * number of uses of app\n// * number of significant events\n// * time since last reminder\n- (BOOL)ratingAlertIsAppropriate {\n    return ([self connectedToNetwork]\n            && ![self userHasDeclinedToRate]\n            && !self.ratingAlert.visible\n            && ![self userHasRatedCurrentVersion]);\n}\n\n// have the rating conditions been met/earned? (regardless of whether this would be a moment when it's appropriate to show a new rating alert)\n//\n// things checked here:\n// * time since first launch\n// * number of uses of app\n// * number of significant events\n// * time since last reminder\n// things NOT checked here:\n// * connectivity with network\n// * whether user has rated before\n// * whether user has declined to rate\n// * whether rating alert is currently showing visibly\n- (BOOL)ratingConditionsHaveBeenMet {\n\tif (_debug)\n\t\treturn YES;\n\t\n\tNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];\n\t\n\tNSDate *dateOfFirstLaunch = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterFirstUseDate]];\n\tNSTimeInterval timeSinceFirstLaunch = [[NSDate date] timeIntervalSinceDate:dateOfFirstLaunch];\n\tNSTimeInterval timeUntilRate = 60 * 60 * 24 * _daysUntilPrompt;\n\tif (timeSinceFirstLaunch < timeUntilRate)\n\t\treturn NO;\n\t\n\t// check if the app has been used enough\n\tNSInteger useCount = [userDefaults integerForKey:kAppiraterUseCount];\n\tif (useCount < _usesUntilPrompt)\n\t\treturn NO;\n\t\n\t// check if the user has done enough significant events\n\tNSInteger sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount];\n\tif (sigEventCount < _significantEventsUntilPrompt)\n\t\treturn NO;\n\t\n\t// if the user wanted to be reminded later, has enough time passed?\n\tNSDate *reminderRequestDate = [NSDate dateWithTimeIntervalSince1970:[userDefaults doubleForKey:kAppiraterReminderRequestDate]];\n\tNSTimeInterval timeSinceReminderRequest = [[NSDate date] timeIntervalSinceDate:reminderRequestDate];\n\tNSTimeInterval timeUntilReminder = 60 * 60 * 24 * _timeBeforeReminding;\n\tif (timeSinceReminderRequest < timeUntilReminder)\n\t\treturn NO;\n\t\n\treturn YES;\n}\n\n- (void)incrementUseCount {\n\t// get the app's version\n\tNSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];\n\t\n\t// get the version number that we've been tracking\n\tNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];\n\tNSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion];\n\tif (trackingVersion == nil)\n\t{\n\t\ttrackingVersion = version;\n\t\t[userDefaults setObject:version forKey:kAppiraterCurrentVersion];\n\t}\n\t\n\tif (_debug)\n\t\tNSLog(@\"APPIRATER Tracking version: %@\", trackingVersion);\n\t\n\tif ([trackingVersion isEqualToString:version])\n\t{\n\t\t// check if the first use date has been set. if not, set it.\n\t\tNSTimeInterval timeInterval = [userDefaults doubleForKey:kAppiraterFirstUseDate];\n\t\tif (timeInterval == 0)\n\t\t{\n\t\t\ttimeInterval = [[NSDate date] timeIntervalSince1970];\n\t\t\t[userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate];\n\t\t}\n\t\t\n\t\t// increment the use count\n\t\tNSInteger useCount = [userDefaults integerForKey:kAppiraterUseCount];\n\t\tuseCount++;\n\t\t[userDefaults setInteger:useCount forKey:kAppiraterUseCount];\n\t\tif (_debug)\n\t\t\tNSLog(@\"APPIRATER Use count: %@\", @(useCount));\n\t}\n\telse\n\t{\n\t\t// it's a new version of the app, so restart tracking\n\t\t[userDefaults setObject:version forKey:kAppiraterCurrentVersion];\n\t\t[userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterFirstUseDate];\n\t\t[userDefaults setInteger:1 forKey:kAppiraterUseCount];\n\t\t[userDefaults setInteger:0 forKey:kAppiraterSignificantEventCount];\n\t\t[userDefaults setBool:NO forKey:kAppiraterRatedCurrentVersion];\n\t\t[userDefaults setBool:NO forKey:kAppiraterDeclinedToRate];\n\t\t[userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate];\n\t}\n\t\n\t[userDefaults synchronize];\n}\n\n- (void)incrementSignificantEventCount {\n\t// get the app's version\n\tNSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleVersionKey];\n\t\n\t// get the version number that we've been tracking\n\tNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];\n\tNSString *trackingVersion = [userDefaults stringForKey:kAppiraterCurrentVersion];\n\tif (trackingVersion == nil)\n\t{\n\t\ttrackingVersion = version;\n\t\t[userDefaults setObject:version forKey:kAppiraterCurrentVersion];\n\t}\n\t\n\tif (_debug)\n\t\tNSLog(@\"APPIRATER Tracking version: %@\", trackingVersion);\n\t\n\tif ([trackingVersion isEqualToString:version])\n\t{\n\t\t// check if the first use date has been set. if not, set it.\n\t\tNSTimeInterval timeInterval = [userDefaults doubleForKey:kAppiraterFirstUseDate];\n\t\tif (timeInterval == 0)\n\t\t{\n\t\t\ttimeInterval = [[NSDate date] timeIntervalSince1970];\n\t\t\t[userDefaults setDouble:timeInterval forKey:kAppiraterFirstUseDate];\n\t\t}\n\t\t\n\t\t// increment the significant event count\n\t\tNSInteger sigEventCount = [userDefaults integerForKey:kAppiraterSignificantEventCount];\n\t\tsigEventCount++;\n\t\t[userDefaults setInteger:sigEventCount forKey:kAppiraterSignificantEventCount];\n\t\tif (_debug)\n\t\t\tNSLog(@\"APPIRATER Significant event count: %@\", @(sigEventCount));\n\t}\n\telse\n\t{\n\t\t// it's a new version of the app, so restart tracking\n\t\t[userDefaults setObject:version forKey:kAppiraterCurrentVersion];\n\t\t[userDefaults setDouble:0 forKey:kAppiraterFirstUseDate];\n\t\t[userDefaults setInteger:0 forKey:kAppiraterUseCount];\n\t\t[userDefaults setInteger:1 forKey:kAppiraterSignificantEventCount];\n\t\t[userDefaults setBool:NO forKey:kAppiraterRatedCurrentVersion];\n\t\t[userDefaults setBool:NO forKey:kAppiraterDeclinedToRate];\n\t\t[userDefaults setDouble:0 forKey:kAppiraterReminderRequestDate];\n\t}\n\t\n\t[userDefaults synchronize];\n}\n\n- (void)incrementAndRate:(BOOL)canPromptForRating {\n\t[self incrementUseCount];\n\t\n\tif (canPromptForRating &&\n        [self ratingConditionsHaveBeenMet] &&\n        [self ratingAlertIsAppropriate])\n\t{\n        dispatch_async(dispatch_get_main_queue(),\n                       ^{\n                           [self showRatingAlert];\n                       });\n\t}\n}\n\n- (void)incrementSignificantEventAndRate:(BOOL)canPromptForRating {\n\t[self incrementSignificantEventCount];\n\t\n    if (canPromptForRating &&\n        [self ratingConditionsHaveBeenMet] &&\n        [self ratingAlertIsAppropriate])\n\t{\n        dispatch_async(dispatch_get_main_queue(),\n                       ^{\n                           [self showRatingAlert];\n                       });\n\t}\n}\n\n- (BOOL)userHasDeclinedToRate {\n    return [[NSUserDefaults standardUserDefaults] boolForKey:kAppiraterDeclinedToRate];\n}\n\n- (BOOL)userHasRatedCurrentVersion {\n    return [[NSUserDefaults standardUserDefaults] boolForKey:kAppiraterRatedCurrentVersion];\n}\n\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-implementations\"\n+ (void)appLaunched {\n\t[Appirater appLaunched:YES];\n}\n#pragma GCC diagnostic pop\n\n+ (void)appLaunched:(BOOL)canPromptForRating {\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0),\n                   ^{\n                       Appirater *a = [Appirater sharedInstance];\n                       if (_debug) {\n                           dispatch_async(dispatch_get_main_queue(),\n                                          ^{\n                                              [a showRatingAlert];\n                                          });\n                       } else {\n                           [a incrementAndRate:canPromptForRating]; \n                       }\n                   });\n}\n\n- (void)hideRatingAlert {\n\tif (self.ratingAlert.visible) {\n\t\tif (_debug)\n\t\t\tNSLog(@\"APPIRATER Hiding Alert\");\n\t\t[self.ratingAlert dismissWithClickedButtonIndex:-1 animated:NO];\n\t}\t\n}\n\n+ (void)appWillResignActive {\n\tif (_debug)\n\t\tNSLog(@\"APPIRATER appWillResignActive\");\n\t[[Appirater sharedInstance] hideRatingAlert];\n}\n\n+ (void)appEnteredForeground:(BOOL)canPromptForRating {\n    Appirater *a = [Appirater sharedInstance];\n    [a.eventQueue addOperationWithBlock:^{\n        [[Appirater sharedInstance] incrementAndRate:canPromptForRating];\n    }];\n}\n\n+ (void)userDidSignificantEvent:(BOOL)canPromptForRating {\n    Appirater *a = [Appirater sharedInstance];\n    [a.eventQueue addOperationWithBlock:^{\n       [[Appirater sharedInstance] incrementSignificantEventAndRate:canPromptForRating];\n    }];\n}\n\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-implementations\"\n+ (void)showPrompt {\n  [Appirater tryToShowPrompt];\n}\n#pragma GCC diagnostic pop\n\n+ (void)tryToShowPrompt {\n  [[Appirater sharedInstance] showPromptWithChecks:true\n                            displayRateLaterButton:true];\n}\n\n+ (void)forceShowPrompt:(BOOL)displayRateLaterButton {\n  [[Appirater sharedInstance] showPromptWithChecks:false\n                            displayRateLaterButton:displayRateLaterButton];\n}\n\n- (void)showPromptWithChecks:(BOOL)withChecks\n      displayRateLaterButton:(BOOL)displayRateLaterButton {\n  if (withChecks == NO || [self ratingAlertIsAppropriate]) {\n    [self showRatingAlert:displayRateLaterButton];\n  }\n}\n\n+ (id)getRootViewController {\n    UIWindow *window = [[UIApplication sharedApplication] keyWindow];\n    if (window.windowLevel != UIWindowLevelNormal) {\n        NSArray *windows = [[UIApplication sharedApplication] windows];\n        for(window in windows) {\n            if (window.windowLevel == UIWindowLevelNormal) {\n                break;\n            }\n        }\n    }\n    \n    return [Appirater iterateSubViewsForViewController:window]; // iOS 8+ deep traverse\n}\n\n+ (id)iterateSubViewsForViewController:(UIView *) parentView {\n    for (UIView *subView in [parentView subviews]) {\n        UIResponder *responder = [subView nextResponder];\n        if([responder isKindOfClass:[UIViewController class]]) {\n            return [self topMostViewController: (UIViewController *) responder];\n        }\n        id found = [Appirater iterateSubViewsForViewController:subView];\n        if( nil != found) {\n            return found;\n        }\n    }\n    return nil;\n}\n\n+ (UIViewController *) topMostViewController: (UIViewController *) controller {\n\tBOOL isPresenting = NO;\n\tdo {\n\t\t// this path is called only on iOS 6+, so -presentedViewController is fine here.\n\t\tUIViewController *presented = [controller presentedViewController];\n\t\tisPresenting = presented != nil;\n\t\tif(presented != nil) {\n\t\t\tcontroller = presented;\n\t\t}\n\t\t\n\t} while (isPresenting);\n\t\n\treturn controller;\n}\n\n+ (void)rateApp {\n\t\n\tNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];\n\t[userDefaults setBool:YES forKey:kAppiraterRatedCurrentVersion];\n\t[userDefaults synchronize];\n\n\t//Use the in-app StoreKit view if available (iOS 6) and imported. This works in the simulator.\n\tif (![Appirater sharedInstance].openInAppStore && NSStringFromClass([SKStoreProductViewController class]) != nil) {\n\t\t\n\t\tSKStoreProductViewController *storeViewController = [[SKStoreProductViewController alloc] init];\n\t\tNSNumber *appId = [NSNumber numberWithInteger:_appId.integerValue];\n\t\t[storeViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:appId} completionBlock:nil];\n\t\tstoreViewController.delegate = self.sharedInstance;\n        \n        id <AppiraterDelegate> delegate = self.sharedInstance.delegate;\n\t\tif ([delegate respondsToSelector:@selector(appiraterWillPresentModalView:animated:)]) {\n\t\t\t[delegate appiraterWillPresentModalView:self.sharedInstance animated:_usesAnimation];\n\t\t}\n\t\t[[self getRootViewController] presentViewController:storeViewController animated:_usesAnimation completion:^{\n\t\t\t[self setModalOpen:YES];\n\t\t}];\n\t\n\t//Use the standard openUrl method if StoreKit is unavailable.\n\t} else {\n\t\t\n\t\t#if TARGET_IPHONE_SIMULATOR\n\t\tNSLog(@\"APPIRATER NOTE: iTunes App Store is not supported on the iOS simulator. Unable to open App Store page.\");\n\t\t#else\n\t\tNSString *reviewURL = [templateReviewURL stringByReplacingOccurrencesOfString:@\"APP_ID\" withString:[NSString stringWithFormat:@\"%@\", _appId]];\n\n\t\t// iOS 7 needs a different templateReviewURL @see https://github.com/arashpayan/appirater/issues/131\n        // Fixes condition @see https://github.com/arashpayan/appirater/issues/205\n\t\tif ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 && [[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {\n\t\t\treviewURL = [templateReviewURLiOS7 stringByReplacingOccurrencesOfString:@\"APP_ID\" withString:[NSString stringWithFormat:@\"%@\", _appId]];\n\t\t}\n        // iOS 8 needs a different templateReviewURL also @see https://github.com/arashpayan/appirater/issues/182\n        else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)\n        {\n            reviewURL = [templateReviewURLiOS8 stringByReplacingOccurrencesOfString:@\"APP_ID\" withString:[NSString stringWithFormat:@\"%@\", _appId]];\n        }\n\n\t\t[[UIApplication sharedApplication] openURL:[NSURL URLWithString:reviewURL]];\n\t\t#endif\n\t}\n}\n\n- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {\n\tNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];\n    \n    id <AppiraterDelegate> delegate = _delegate;\n\t\n\tswitch (buttonIndex) {\n\t\tcase 0:\n\t\t{\n\t\t\t// they don't want to rate it\n\t\t\t[userDefaults setBool:YES forKey:kAppiraterDeclinedToRate];\n\t\t\t[userDefaults synchronize];\n\t\t\tif(delegate && [delegate respondsToSelector:@selector(appiraterDidDeclineToRate:)]){\n\t\t\t\t[delegate appiraterDidDeclineToRate:self];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 1:\n\t\t{\n\t\t\t// they want to rate it\n\t\t\t[Appirater rateApp];\n\t\t\tif(delegate&& [delegate respondsToSelector:@selector(appiraterDidOptToRate:)]){\n\t\t\t\t[delegate appiraterDidOptToRate:self];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase 2:\n\t\t\t// remind them later\n\t\t\t[userDefaults setDouble:[[NSDate date] timeIntervalSince1970] forKey:kAppiraterReminderRequestDate];\n\t\t\t[userDefaults synchronize];\n\t\t\tif(delegate && [delegate respondsToSelector:@selector(appiraterDidOptToRemindLater:)]){\n\t\t\t\t[delegate appiraterDidOptToRemindLater:self];\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n}\n\n//Delegate call from the StoreKit view.\n- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {\n\t[Appirater closeModal];\n}\n\n//Close the in-app rating (StoreKit) view and restore the previous status bar style.\n+ (void)closeModal {\n\tif (_modalOpen) {\n\t\tBOOL usedAnimation = _usesAnimation;\n\t\t[self setModalOpen:NO];\n\t\t\n\t\t// get the top most controller (= the StoreKit Controller) and dismiss it\n\t\tUIViewController *presentingController = [UIApplication sharedApplication].keyWindow.rootViewController;\n\t\tpresentingController = [self topMostViewController: presentingController];\n\t\t[presentingController dismissViewControllerAnimated:_usesAnimation completion:^{\n            id <AppiraterDelegate> delegate = self.sharedInstance.delegate;\n\t\t\tif ([delegate respondsToSelector:@selector(appiraterDidDismissModalView:animated:)]) {\n\t\t\t\t[delegate appiraterDidDismissModalView:(Appirater *)self animated:usedAnimation];\n\t\t\t}\n\t\t}];\n\t\t[self.class setStatusBarStyle:(UIStatusBarStyle)nil];\n\t}\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/Appirater/AppiraterDelegate.h",
    "content": "//\n//  AppiraterDelegate.h\n//  Banana Stand\n//\n//  Created by Robert Haining on 9/25/12.\n//  Copyright (c) 2012 News.me. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@class Appirater;\n\n@protocol AppiraterDelegate <NSObject>\n\n@optional\n-(BOOL)appiraterShouldDisplayAlert:(Appirater *)appirater;\n-(void)appiraterDidDisplayAlert:(Appirater *)appirater;\n-(void)appiraterDidDeclineToRate:(Appirater *)appirater;\n-(void)appiraterDidOptToRate:(Appirater *)appirater;\n-(void)appiraterDidOptToRemindLater:(Appirater *)appirater;\n-(void)appiraterWillPresentModalView:(Appirater *)appirater animated:(BOOL)animated;\n-(void)appiraterDidDismissModalView:(Appirater *)appirater animated:(BOOL)animated;\n@end\n"
  },
  {
    "path": "Potatso/Base/Appirater/ar.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"إذا كنت تستمع باستخدام %@، فهل تمانع بأن تأخذ دقيقة من وقتك لتقيمه؟ لن يستغرق الأمر أكثر من دقيقة. شكرا لدعمك!\";\n\"Rate %@\" = \"قيم %@\";\n\"No, Thanks\" = \"لا شكرا\";\n\"Remind me later\" = \"ذكرني لاحقا\";"
  },
  {
    "path": "Potatso/Base/Appirater/ca.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Si li agrada utilitzar %@, li importaria prendre’s un moment per a valorar-lo? No trigarà més d’un minut. Gràcies por la seva col·laboració!\";\n\"Rate %@\" = \"Valorar %@\";\n\"No, Thanks\" = \"No, gràcies\";\n\"Remind me later\" = \"Recordar-m’ho més tard\";"
  },
  {
    "path": "Potatso/Base/Appirater/cs.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Pokud se Vám aplikace %@ líbí, mohli byste ji prosím ohodnotit v App Store? Zabere to jen chvilku. Díky za Vaši podporu!\";\n\"Rate %@\" = \"Ohodnotit %@\";\n\"No, Thanks\" = \"Ne, díky\";\n\"Remind me later\" = \"Možná později\";"
  },
  {
    "path": "Potatso/Base/Appirater/da.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Hvis du synes om at bruge %@, vil du have noget imod at bruge et kort øjeblik på at bedømme det? Det tager kun et minut. Tak for din støtte!\";\n\"Rate %@\" = \"Bedøm %@\";\n\"No, Thanks\" = \"Nej tak\";\n\"Remind me later\" = \"Påmind mig senere\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/de.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Sie nutzen %@ gerne? Dann nehmen Sie sich bitte für eine Bewertung einen Moment Zeit! Es dauert nicht länger als eine Minute. Vielen Dank!\";\n\"Rate %@\" = \"Bewerte %@\";\n\"No, Thanks\" = \"Nein, danke\";\n\"Remind me later\" = \"Später erinnern\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/el.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Αν σου αρέσει το %@, θα μπορούσες να αφιερώσεις μια στιγμή για να το βαθμολογήσεις; Η διαδικασία είναι πολύ σύντομη. Ευχαριστούμε για τη στήριξη!\";\n\"Rate %@\" = \"Βαθμολόγηση του %@\";\n\"No, Thanks\" = \"Όχι, ευχαριστώ\";\n\"Remind me later\" = \"Υπενθύμιση αργότερα\";"
  },
  {
    "path": "Potatso/Base/Appirater/en.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\";\n\"Rate %@\" = \"Rate %@\";\n\"No, Thanks\" = \"No, thanks\";\n\"Remind me later\" = \"Remind me later\";"
  },
  {
    "path": "Potatso/Base/Appirater/es.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Si te ha gustado  %@, ¿te gustaría calificarnos? No te tomará más de un minuto. ¡Gracias por tu colaboración!\";\n\"Rate %@\" = \"Calificar %@\";\n\"No, Thanks\" = \"No, gracias\";\n\"Remind me later\" = \"Recuérdame más tarde\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/fi.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Jos käytät mielelläsi %@, voisitko käyttää hetken ja arvostella sen? Se ei kestä minuuttia kauempaa. Kiitos tuestasi!\";\n\"Rate %@\" = \"Arvioi %@\";\n\"No, Thanks\" = \"Ei kiitos\";\n\"Remind me later\" = \"Muistuta minua myöhemmin\";"
  },
  {
    "path": "Potatso/Base/Appirater/fr.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Si vous aimez %@, voulez-vous prendre un moment pour l'évaluer ? Cela ne vous prendra pas plus d'une minute. Merci de votre soutien !\";\n\"Rate %@\" = \"Évaluer %@\";\n\"No, Thanks\" = \"Non, merci\";\n\"Remind me later\" = \"Me rappeler plus tard\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/ja.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"%@をお使いいただきありがとうございます。もしよろしければ、ほんの少しだけお時間をいただき評価をお願いできませんか？ご協力感謝いたします！\";\n\"Rate %@\" = \"%@を評価する\";\n\"No, Thanks\" =\"結構です\";\n\"Remind me later\" = \"あとで\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/ko.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"%@ 사용이 맘에 드셨나요? 잠시만 시간을 내서 평가를 부탁드리겠습니다. 감사합니다!\";\n\"Rate %@\" = \"%@ 평가하기\";\n\"No, Thanks\" = \"평가하지 않겠습니다\";\n\"Remind me later\" = \"다음에 평가하겠습니다\";"
  },
  {
    "path": "Potatso/Base/Appirater/ms.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Jika anda suka %@, bolehkah luangkan sedikit masa untuk beri penarafan? Tak sampai seminit pun. Terima kasih atas sokongan anda!\";\n\"Rate %@\" = \"Tarafkan %@\";\n\"No, Thanks\" = \"Terima kasih saja\";\n\"Remind me later\" = \"Ingatkan saya lain kali\";"
  },
  {
    "path": "Potatso/Base/Appirater/nb.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Hvis du liker å bruke %@, kan du ta deg et øyeblikk for å vurdere den? Det vil ikke ta mer enn ett minutt. Takk for din støtte!\";\n\"Rate %@\" = \"Vurder %@\";\n\"No, Thanks\" = \"Nei, takk\";\n\"Remind me later\" = \"Påminn meg senere\";"
  },
  {
    "path": "Potatso/Base/Appirater/nl.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Als het gebruik van %@ je bevalt, zou je dan een momentje de tijd willen nemen om het te beoordelen? Het duurt nog geen minuut. Bedankt voor je steun!\";\n\"Rate %@\" = \"%@ beoordelen\";\n\"No, Thanks\" = \"Nee, bedankt\";\n\"Remind me later\" = \"Herinner me er later aan\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/pl.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Jeżeli podoba Ci się korzystanie z %@, może zechciałbyś poświęcić chwilę czasu, aby ocenić aplikację? Nie zajmie Ci to więcej niż minutę. Dziękujemy za pomoc!\";\r\n\"Rate %@\" = \"Oceń %@\";\r\n\"No, Thanks\" = \"Nie, dziękuję\";\r\n\"Remind me later\" = \"Przypomnij później\";"
  },
  {
    "path": "Potatso/Base/Appirater/pt-BR.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!\";\n\"Rate %@\" = \"Avaliar o %@\";\n\"No, Thanks\" = \"Não, obrigado\";\n\"Remind me later\" = \"Mais tarde\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/pt.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!\";\n\"Rate %@\" = \"Avaliar o %@\";\n\"No, Thanks\" = \"Não, obrigado\";\n\"Remind me later\" = \"Mais tarde\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/ro.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Dacă îți place %@, acordă-i o notă te rog, nu durează mult. Mulțumim pentru susținere!\";\n\"Rate %@\" = \"Acordă notă pentru %@\";\n\"No, Thanks\" = \"Nu, mulțumesc\";\n\"Remind me later\" = \"Adu-mi aminte mai târziu\";"
  },
  {
    "path": "Potatso/Base/Appirater/ru.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"Если Вам нравится %@, пожалуйста, поставьте свою оценку. Это займет у Вас не больше одной минуты.\\n Спасибо за поддержку!\";\n\"Rate %@\" = \"Оценить %@\";\n\"No, Thanks\" = \"Нет, спасибо\";\n\"Remind me later\" = \"Напомнить позже\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/zh-Hans.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"如果你喜欢使用%@，你介意花一点时间给它评分吗？不会超过一分钟。感谢您的支持！\";\n\"Rate %@\" = \"给%@评分\";\n\"No, Thanks\" = \"不，谢谢\";\n\"Remind me later\" = \"稍后提醒我\";\n"
  },
  {
    "path": "Potatso/Base/Appirater/zh-Hant.lproj/AppiraterLocalizable.strings",
    "content": "\"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!\" = \"如果你喜歡使用%@，你介意花一點時間給它評分嗎？不會超過一分鐘。感謝您的支持！\";\n\"Rate %@\" = \"給%@評分\";\n\"No, Thanks\" = \"不，謝謝\";\n\"Remind me later\" = \"稍後提醒我\";\n"
  },
  {
    "path": "Potatso/Base/BaseButtonRow.swift",
    "content": "//\n//  BaseButtonRow.swift\n//  Potatso\n//\n//  Created by LEI on 6/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Eureka\n\npublic final class _BaseButtonRow<T: Equatable> : _ButtonRowOf<T>, RowType {\n\n    public required init(tag: String?) {\n        super.init(tag: tag)\n    }\n\n    public override func updateCell() {\n        super.updateCell()\n        let leftAligmnment = presentationMode != nil\n        if (!leftAligmnment){\n            cell.textLabel?.textColor = Color.Action\n        }\n    }\n\n}\n\npublic typealias BaseButtonRow = _BaseButtonRow<String>\n"
  },
  {
    "path": "Potatso/Base/BaseEmptyView.swift",
    "content": "//\n//  EmptyView.swift\n//  Potatso\n//\n//  Created by LEI on 4/22/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\n\nclass BaseEmptyView: UIView {\n    \n    var title: String? {\n        didSet(o) {\n            titleLabel.text = title\n        }\n    }\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        addSubview(sadView)\n        addSubview(titleLabel)\n        titleLabel.text = title\n        constrain(sadView, titleLabel, self) { sadView, titleLabel, superView in\n            sadView.centerX == superView.centerX\n            sadView.width == 80\n            sadView.height == 102\n            sadView.centerY == superView.centerY - 120\n            \n            titleLabel.centerX == sadView.centerX\n            titleLabel.top == sadView.bottom + 32\n            titleLabel.leading == superView.leading + 40\n            titleLabel.trailing == superView.trailing - 40\n        }\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    lazy var sadView: UIImageView = {\n        let v = UIImageView()\n        v.image = UIImage(named: \"User\")\n        v.contentMode = .scaleAspectFit\n        return v\n    }()\n    \n    lazy var titleLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"808080\".color\n        v.font = UIFont.systemFont(ofSize: 15)\n        v.textAlignment = .center\n        v.numberOfLines = 0\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/Base/BaseSafariViewController.swift",
    "content": "//\n//  BaseSafariViewController.swift\n//  Potatso\n//\n//  Created by LEI on 12/30/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport SafariServices\n\nclass BaseSafariViewController: SFSafariViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.leftBarButtonItem = UIBarButtonItem(title: \"\", style: .plain, target: nil, action:nil)\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        navigationController?.navigationBar.barStyle = .default\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Base/ProxyQRCode.swift",
    "content": "//\n//  ProxyQRCode.swift\n//  Potatso\n//\n//  Created by Ruqi on 6/18/2017.\n//  Copyright © 2017 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport EFQRCode\nimport Cartography\nimport Photos\n\nclass ProxyQRCode : UIView {\n    var proxy: String\n    var image: UIImage? = nil\n    var shareCallback: (_: UIImage) -> Void\n    var sadView: UIButton = {\n        let v = UIButton(type: .custom)\n        v.contentMode = .scaleAspectFit\n        return v\n    }()\n    \n    convenience init(frame: CGRect, proxy: String, callback: @escaping (_: UIImage) -> Void ) {\n        self.init(frame: frame)\n        self.proxy = proxy\n        self.shareCallback = callback\n        if let tryImage = EFQRCode.generate(\n            content: proxy,\n            watermark: UIImage(named: \"Mume\")?.toCGImage()\n            ) {\n            print(\"Create QRCode image success: \\(tryImage)\")\n            self.image = UIImage(cgImage: tryImage)\n            self.sadView.setImage(self.image, for: .normal)\n            self.sadView.addTarget(self, action: #selector(onShare(_:)), for: .touchUpInside)\n        } else {\n            print(\"Create QRCode image failed!\")\n        }\n    }\n    \n    func onShare(_ sender: UITapGestureRecognizer) {\n        if let image = self.image {\n            let status = PHPhotoLibrary.authorizationStatus()\n            if status != .notDetermined {\n                self.shareCallback(image)\n                return\n            }\n            PHPhotoLibrary.requestAuthorization({ (newStatus) in\n                self.shareCallback(image)\n            })\n        }\n    }\n    \n    override init(frame: CGRect) {\n        self.proxy = \"\"\n        self.shareCallback = { _ in }\n        super.init(frame: frame)\n        addSubview(sadView)\n        constrain(sadView, self) { sadView, superView in\n            sadView.centerX == superView.centerX\n            sadView.width == superView.width - 20\n            sadView.height == superView.height - 20\n            sadView.centerY == superView.centerY\n        }\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScanner.h",
    "content": "//\n//  HMScanner.h\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n/// 二维码/条码扫描器\n@interface HMScanner : NSObject\n\n/// 使用视图实例化扫描器，扫描预览窗口会添加到指定视图中\n///\n/// @param view       指定的视图\n/// @param scanFrame  扫描范围\n/// @param completion 完成回调\n///\n/// @return 扫描器\n+ (instancetype)scanerWithView:(UIView *)view scanFrame:(CGRect)scanFrame completion:(void (^)(NSString *stringValue))completion;\n\n/// 扫描图像\n///\n/// @param image 包含二维码的图像\n/// @remark 目前只支持 64 位的 iOS 设备\n+ (void)scaneImage:(UIImage *)image completion:(void (^)(NSArray *values))completion;\n\n/// 使用 string / 头像 异步生成二维码图像\n///\n/// @param string     二维码图像的字符串\n/// @param avatar     头像图像，默认比例 0.2\n/// @param completion 完成回调\n+ (void)qrImageWithString:(NSString *)string avatar:(UIImage *)avatar completion:(void (^)(UIImage *image))completion;\n\n/// 使用 string / 头像 异步生成二维码图像，并且指定头像占二维码图像的比例\n///\n/// @param string     二维码图像的字符串\n/// @param avatar     头像图像\n/// @param scale      头像占二维码图像的比例\n/// @param completion 完成回调\n+ (void)qrImageWithString:(NSString *)string avatar:(UIImage *)avatar scale:(CGFloat)scale completion:(void (^)(UIImage *))completion;\n\n/// 开始扫描\n- (void)startScan;\n/// 停止扫描\n- (void)stopScan;\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScanner.m",
    "content": "//\n//  HMScanner.m\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import \"HMScanner.h\"\n#import <AVFoundation/AVFoundation.h>\n\n/// 最大检测次数\n#define kMaxDetectedCount   20\n\n@interface HMScanner() <AVCaptureMetadataOutputObjectsDelegate>\n/// 父视图弱引用\n@property (nonatomic, weak) UIView *parentView;\n/// 扫描范围\n@property (nonatomic) CGRect scanFrame;\n/// 完成回调\n@property (nonatomic, copy) void (^completionCallBack)(NSString *);\n@end\n\n@implementation HMScanner {\n    /// 拍摄会话\n    AVCaptureSession *session;\n    /// 预览图层\n    AVCaptureVideoPreviewLayer *previewLayer;\n    /// 绘制图层\n    CALayer *drawLayer;\n    /// 当前检测计数\n    NSInteger currentDetectedCount;\n}\n\n#pragma mark - 生成二维码\n+ (void)qrImageWithString:(NSString *)string avatar:(UIImage *)avatar completion:(void (^)(UIImage *))completion {\n    [self qrImageWithString:string avatar:avatar scale:0.20 completion:completion];\n}\n\n+ (void)qrImageWithString:(NSString *)string avatar:(UIImage *)avatar scale:(CGFloat)scale completion:(void (^)(UIImage *))completion {\n    \n    NSAssert(completion != nil, @\"必须传入完成回调\");\n    \n    dispatch_async(dispatch_get_global_queue(0, 0), ^{\n        \n        CIFilter *qrFilter = [CIFilter filterWithName:@\"CIQRCodeGenerator\"];\n        \n        [qrFilter setDefaults];\n        [qrFilter setValue:[string dataUsingEncoding:NSUTF8StringEncoding] forKey:@\"inputMessage\"];\n        \n        CIImage *ciImage = qrFilter.outputImage;\n        \n        CGAffineTransform transform = CGAffineTransformMakeScale(10, 10);\n        CIImage *transformedImage = [ciImage imageByApplyingTransform:transform];\n        \n        CIContext *context = [CIContext contextWithOptions:nil];\n        CGImageRef cgImage = [context createCGImage:transformedImage fromRect:transformedImage.extent];\n        UIImage *qrImage = [UIImage imageWithCGImage:cgImage scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];\n        CGImageRelease(cgImage);\n        \n        if (avatar != nil) {\n            qrImage = [self qrcodeImage:qrImage addAvatar:avatar scale:scale];\n        }\n        \n        dispatch_async(dispatch_get_main_queue(), ^{ completion(qrImage); });\n    });\n}\n\n+ (UIImage *)qrcodeImage:(UIImage *)qrImage addAvatar:(UIImage *)avatar scale:(CGFloat)scale {\n    \n    CGFloat screenScale = [UIScreen mainScreen].scale;\n    CGRect rect = CGRectMake(0, 0, qrImage.size.width * screenScale, qrImage.size.height * screenScale);\n    \n    UIGraphicsBeginImageContextWithOptions(rect.size, YES, screenScale);\n    \n    [qrImage drawInRect:rect];\n    \n    CGSize avatarSize = CGSizeMake(rect.size.width * scale, rect.size.height * scale);\n    CGFloat x = (rect.size.width - avatarSize.width) * 0.5;\n    CGFloat y = (rect.size.height - avatarSize.height) * 0.5;\n    [avatar drawInRect:CGRectMake(x, y, avatarSize.width, avatarSize.height)];\n    \n    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();\n    \n    UIGraphicsEndImageContext();\n    \n    return [UIImage imageWithCGImage:result.CGImage scale:screenScale orientation:UIImageOrientationUp];\n}\n\n#pragma mark - 扫描图像方法\n+ (void)scaneImage:(UIImage *)image completion:(void (^)(NSArray *))completion {\n    \n    NSAssert(completion != nil, @\"必须传入完成回调\");\n    \n    dispatch_async(dispatch_get_global_queue(0, 0), ^{\n        \n        CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}];\n        \n        CIImage *ciImage = [[CIImage alloc] initWithImage:image];\n        \n        NSArray *features = [detector featuresInImage:ciImage];\n        \n        NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:features.count];\n        for (CIQRCodeFeature *feature in features) {\n            [arrayM addObject:feature.messageString];\n        }\n        \n        dispatch_async(dispatch_get_main_queue(), ^{\n            completion(arrayM.copy);\n        });\n    });\n}\n\n#pragma mark - 构造函数\n+ (instancetype)scanerWithView:(UIView *)view scanFrame:(CGRect)scanFrame completion:(void (^)(NSString *))completion {\n    NSAssert(completion != nil, @\"必须传入完成回调\");\n    \n    return [[self alloc] initWithView:view scanFrame:scanFrame completion:completion];\n}\n\n- (instancetype)initWithView:(UIView *)view scanFrame:(CGRect)scanFrame completion:(void (^)(NSString *))completion {\n    self = [super init];\n    \n    if (self) {\n        self.parentView = view;\n        self.scanFrame = scanFrame;\n        self.completionCallBack = completion;\n        \n        [self setupSession];\n    }\n    return self;\n}\n\n#pragma mark - 公共方法\n/// 开始扫描\n- (void)startScan {\n    if ([session isRunning]) {\n        return;\n    }\n    currentDetectedCount = 0;\n    \n    [session startRunning];\n}\n\n- (void)stopScan {\n    if (![session isRunning]) {\n        return;\n    }\n    [session stopRunning];\n}\n\n#pragma mark - AVCaptureMetadataOutputObjectsDelegate\n- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {\n    \n    [self clearDrawLayer];\n    \n    for (id obj in metadataObjects) {\n        // 判断检测到的对象类型\n        if (![obj isKindOfClass:[AVMetadataMachineReadableCodeObject class]]) {\n            return;\n        }\n        \n        // 转换对象坐标\n        AVMetadataMachineReadableCodeObject *dataObject = (AVMetadataMachineReadableCodeObject *)[previewLayer transformedMetadataObjectForMetadataObject:obj];\n        \n        // 判断扫描范围\n        if (!CGRectContainsRect(self.scanFrame, dataObject.bounds)) {\n            continue;\n        }\n        \n        if (currentDetectedCount++ < kMaxDetectedCount) {\n            // 绘制边角\n            [self drawCornersShape:dataObject];\n        } else {\n            [self stopScan];\n            \n            // 完成回调\n            if (self.completionCallBack != nil) {\n                self.completionCallBack(dataObject.stringValue);\n            }\n        }\n    }\n}\n\n/// 清空绘制图层\n- (void)clearDrawLayer {\n    if (drawLayer.sublayers.count == 0) {\n        return;\n    }\n    \n    [drawLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];\n}\n\n/// 绘制条码形状\n///\n/// @param dataObject 识别到的数据对象\n- (void)drawCornersShape:(AVMetadataMachineReadableCodeObject *)dataObject {\n    \n    if (dataObject.corners.count == 0) {\n        return;\n    }\n    \n    CAShapeLayer *layer = [CAShapeLayer layer];\n    \n    layer.lineWidth = 4;\n    layer.strokeColor = [UIColor greenColor].CGColor;\n    layer.fillColor = [UIColor clearColor].CGColor;\n    layer.path = [self cornersPath:dataObject.corners];\n    \n    [drawLayer addSublayer:layer];\n}\n\n/// 使用 corners 数组生成绘制路径\n///\n/// @param corners corners 数组\n///\n/// @return 绘制路径\n- (CGPathRef)cornersPath:(NSArray *)corners {\n    \n    UIBezierPath *path = [UIBezierPath bezierPath];\n    CGPoint point = CGPointZero;\n    \n    // 1. 移动到第一个点\n    NSInteger index = 0;\n    CGPointMakeWithDictionaryRepresentation((CFDictionaryRef)corners[index++], &point);\n    [path moveToPoint:point];\n    \n    // 2. 遍历剩余的点\n    while (index < corners.count) {\n        CGPointMakeWithDictionaryRepresentation((CFDictionaryRef)corners[index++], &point);\n        [path addLineToPoint:point];\n    }\n    \n    // 3. 关闭路径\n    [path closePath];\n    \n    return path.CGPath;\n}\n\n#pragma mark - 扫描相关方法\n/// 设置绘制图层和预览图层\n- (void)setupLayers {\n    \n    if (self.parentView == nil) {\n        NSLog(@\"父视图不存在\");\n        return;\n    }\n    \n    if (session == nil) {\n        NSLog(@\"拍摄会话不存在\");\n        return;\n    }\n    \n    // 绘制图层\n    drawLayer = [CALayer layer];\n    \n    drawLayer.frame = self.parentView.bounds;\n    \n    [self.parentView.layer insertSublayer:drawLayer atIndex:0];\n    \n    // 预览图层\n    previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];\n    \n    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;\n    previewLayer.frame = self.parentView.bounds;\n    \n    [self.parentView.layer insertSublayer:previewLayer atIndex:0];\n}\n\n/// 设置扫描会话\n- (void)setupSession {\n    \n    // 1> 输入设备\n    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];\n    AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];\n    \n    if (videoInput == nil) {\n        NSLog(@\"创建输入设备失败\");\n        return;\n    }\n    \n    // 2> 数据输出\n    AVCaptureMetadataOutput *dataOutput = [[AVCaptureMetadataOutput alloc] init];\n    \n    // 3> 拍摄会话 - 判断能够添加设备\n    session = [[AVCaptureSession alloc] init];\n    if (![session canAddInput:videoInput]) {\n        NSLog(@\"无法添加输入设备\");\n        session = nil;\n        \n        return;\n    }\n    if (![session canAddOutput:dataOutput]) {\n        NSLog(@\"无法添加输入设备\");\n        session = nil;\n        \n        return;\n    }\n    \n    // 4> 添加输入／输出设备\n    [session addInput:videoInput];\n    [session addOutput:dataOutput];\n    \n    // 5> 设置扫描类型\n    dataOutput.metadataObjectTypes = dataOutput.availableMetadataObjectTypes;\n    [dataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];\n    \n    // 6> 设置预览图层会话\n    [self setupLayers];\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerBorder.h",
    "content": "//\n//  HMScannerBorder.h\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n/// 扫描框视图\n@interface HMScannerBorder : UIView\n\n/// 开始扫描动画\n- (void)startScannerAnimating;\n/// 停止扫描动画\n- (void)stopScannerAnimating;\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerBorder.m",
    "content": "//\n//  HMScannerBorder.m\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import \"HMScannerBorder.h\"\n\n@implementation HMScannerBorder {\n    /// 冲击波图像\n    UIImageView *scannerLine;\n}\n\n- (instancetype)initWithFrame:(CGRect)frame {\n    self = [super initWithFrame:frame];\n    if (self) {\n        [self prepareUI];\n    }\n    return self;\n}\n\n#pragma mark - 扫描动画方法\n/// 开始扫描动画\n- (void)startScannerAnimating {\n    \n    [self stopScannerAnimating];\n    \n    [UIView animateWithDuration:3.0\n                          delay:0.0\n                        options:UIViewAnimationOptionCurveEaseInOut\n                     animations:^{\n                         [UIView setAnimationRepeatCount:MAXFLOAT];\n                         \n                         scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, self.bounds.size.height);\n                     } completion:nil];\n}\n\n/// 停止扫描动画\n- (void)stopScannerAnimating {\n    [scannerLine.layer removeAllAnimations];\n    scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, 0);\n}\n\n#pragma mark - 设置界面\n- (void)prepareUI {\n    self.clipsToBounds = YES;\n    \n    // 图像文件包\n    NSBundle *bundle = [NSBundle bundleForClass:[self class]];\n    NSURL *url = [bundle URLForResource:@\"HMScanner\" withExtension:@\"bundle\"];\n    NSBundle *imageBundle = [NSBundle bundleWithURL:url];\n    \n    // 冲击波图像\n    scannerLine = [[UIImageView alloc] initWithImage:[self imageWithName:@\"QRCodeScanLine\" bundle:imageBundle]];\n\n    scannerLine.frame = CGRectMake(0, 0, self.bounds.size.width, scannerLine.bounds.size.height);\n    scannerLine.center = CGPointMake(self.bounds.size.width * 0.5, 0);\n\n    [self addSubview:scannerLine];\n    \n    // 加载边框图像\n    for (NSInteger i = 1; i < 5; i++) {\n        NSString *imgName = [NSString stringWithFormat:@\"ScanQR%zd\", i];\n        UIImageView *img = [[UIImageView alloc] initWithImage:[self imageWithName:imgName bundle:imageBundle]];\n        \n        [self addSubview:img];\n        \n        CGFloat offsetX = self.bounds.size.width - img.bounds.size.width;\n        CGFloat offsetY = self.bounds.size.height - img.bounds.size.height;\n        \n        switch (i) {\n            case 2:\n                img.frame = CGRectOffset(img.frame, offsetX, 0);\n                break;\n            case 3:\n                img.frame = CGRectOffset(img.frame, 0, offsetY);\n                break;\n            case 4:\n                img.frame = CGRectOffset(img.frame, offsetX, offsetY);\n                break;\n            default:\n                break;\n        }\n    }\n}\n\n- (UIImage *)imageWithName:(NSString *)imageName bundle:(NSBundle *)imageBundle {\n    NSString *fileName = [NSString stringWithFormat:@\"%@@2x\", imageName];\n    NSString *path = [imageBundle pathForResource:fileName ofType:@\"png\"];\n    \n    return [[UIImage imageWithContentsOfFile:path] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerMaskView.h",
    "content": "//\n//  HMScannerMaskView.h\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/3.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n/// 扫描遮罩视图\n@interface HMScannerMaskView : UIView\n\n/// 使用裁切区域实例化遮罩视图\n///\n/// @param frame    视图区域\n/// @param cropRect 裁切区域\n///\n/// @return 遮罩视图\n+ (instancetype)maskViewWithFrame:(CGRect)frame cropRect:(CGRect)cropRect;\n\n/// 裁切区域\n@property (nonatomic) CGRect cropRect;\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerMaskView.m",
    "content": "//\n//  HMScannerMaskView.m\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/3.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import \"HMScannerMaskView.h\"\n\n@implementation HMScannerMaskView\n\n+ (instancetype)maskViewWithFrame:(CGRect)frame cropRect:(CGRect)cropRect {\n    \n    HMScannerMaskView *maskView = [[self alloc] initWithFrame:frame];\n    \n    maskView.backgroundColor = [UIColor clearColor];\n    maskView.cropRect = cropRect;\n    \n    return maskView;\n}\n\n- (void)setCropRect:(CGRect)cropRect {\n    _cropRect = cropRect;\n    \n    [self setNeedsDisplay];\n}\n\n- (void)drawRect:(CGRect)rect {\n    \n    CGContextRef ctx = UIGraphicsGetCurrentContext();\n    \n    [[UIColor colorWithWhite:0.0 alpha:0.4] setFill];\n    CGContextFillRect(ctx, rect);\n    \n    CGContextClearRect(ctx, self.cropRect);\n    \n    [[UIColor colorWithWhite:0.95 alpha:1.0] setStroke];\n    CGContextStrokeRectWithWidth(ctx, CGRectInset(_cropRect, 1, 1), 1);\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerViewController.h",
    "content": "//\n//  HMScannerViewController.h\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n/// 扫描控制器\n@interface HMScannerViewController : UIViewController\n\n/// 实例化扫描控制器\n///\n/// @param completion 完成回调\n///\n/// @return 扫描控制器\n- (instancetype)initWithCompletion:(void (^)(NSString *))completion;\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/HMScannerViewController.m",
    "content": "//\n//  HMScannerViewController.m\n//  HMQRCodeScanner\n//\n//  Created by 刘凡 on 16/1/2.\n//  Copyright © 2016年 itheima. All rights reserved.\n//\n\n#import \"HMScannerViewController.h\"\n#import \"HMScannerBorder.h\"\n#import \"HMScannerMaskView.h\"\n#import \"HMScanner.h\"\n#import \"Potatso-Swift.h\"\n@import PotatsoLibrary;\n\n/// 控件间距\n#define kControlMargin  32.0\n\n@interface HMScannerViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>\n/// 完成回调\n@property (nonatomic, copy) void (^completionCallBack)(NSString *);\n@end\n\n@implementation HMScannerViewController {\n    /// 扫描框\n    HMScannerBorder *scannerBorder;\n    /// 扫描器\n    HMScanner *scanner;\n}\n\n- (instancetype)initWithCompletion:(void (^)(NSString *))completion {\n    self = [super init];\n    if (self) {\n        self.completionCallBack = completion;\n    }\n    return self;\n}\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    \n    [self prepareUI];\n    \n    // 实例化扫描器\n    __weak typeof(self) weakSelf = self;\n    scanner = [HMScanner scanerWithView:self.view scanFrame:scannerBorder.frame completion:^(NSString *stringValue) {\n        // 关闭\n        [weakSelf clickCloseButton];\n        // 完成回调\n        weakSelf.completionCallBack(stringValue);\n    }];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewWillAppear:animated];\n    \n    [scannerBorder startScannerAnimating];\n    [scanner startScan];\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n    [super viewWillDisappear:animated];\n    \n    [scannerBorder stopScannerAnimating];\n    [scanner stopScan];\n}\n\n#pragma mark - 监听方法\n/// 点击关闭按钮\n- (void)clickCloseButton {\n    [self.navigationController popViewControllerAnimated:true];\n}\n\n/// 点击相册按钮\n- (void)clickAlbumButton {\n    \n    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {\n        [self showTextHUD:NSLocalizedString(@\"qrcode.denied\", nil) dismissAfterDelay:1.0f];\n        return;\n    }\n    \n    UIImagePickerController *picker = [[UIImagePickerController alloc] init];\n    \n    picker.view.backgroundColor = [UIColor whiteColor];\n    picker.delegate = self;\n    \n    [self showDetailViewController:picker sender:nil];\n}\n\n\n#pragma mark - UIImagePickerControllerDelegate\n- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {\n    \n    // 扫描图像\n    [HMScanner scaneImage:info[UIImagePickerControllerOriginalImage] completion:^(NSArray *values) {\n        \n        if (values.count > 0) {\n            self.completionCallBack(values.firstObject);\n            [self dismissViewControllerAnimated:NO completion:^{\n                [self clickCloseButton];\n            }];\n        } else {\n            [self showTextHUD:NSLocalizedString(@\"qrcode.nocode\", nil) dismissAfterDelay:1.0f];\n\n            [self dismissViewControllerAnimated:YES completion:nil];\n        }\n    }];\n}\n\n#pragma mark - 设置界面\n- (void)prepareUI {\n    self.view.backgroundColor = [UIColor darkGrayColor];\n    \n    [self prepareNavigationBar];\n    [self prepareScanerBorder];\n}\n\n\n/// 准备扫描框\n- (void)prepareScanerBorder {\n    \n    CGFloat width = self.view.bounds.size.width - 80;\n    scannerBorder = [[HMScannerBorder alloc] initWithFrame:CGRectMake(0, 0, width, width)];\n    \n    scannerBorder.center = CGPointMake(self.view.center.x, self.view.center.y - 60);\n    scannerBorder.tintColor = self.navigationController.navigationBar.tintColor;\n    \n    [self.view addSubview:scannerBorder];\n    \n    HMScannerMaskView *maskView = [HMScannerMaskView maskViewWithFrame:self.view.bounds cropRect:scannerBorder.frame];\n    [self.view insertSubview:maskView atIndex:0];\n}\n\n/// 准备导航栏\n- (void)prepareNavigationBar {\n    // 1> 背景颜色\n//    [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithWhite:0.1 alpha:1.0]];\n//    self.navigationController.navigationBar.translucent = YES;\n//    self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init];\n    \n    // 2> 标题\n    self.title = NSLocalizedString(@\"qrcode.title\", nil);\n    \n    // 3> 左右按钮\n//    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@\"关闭\" style:UIBarButtonItemStylePlain target:self action:@selector(clickCloseButton)];\n    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@\"qrcode.album\", nil) style:UIBarButtonItemStylePlain target:self action:@selector(clickAlbumButton)];\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/QRCode/QRCodeScannerVC.h",
    "content": "//\n//  QRCodeScannerVC.h\n//  Potatso\n//\n//  Created by LEI on 7/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\ntypedef void (^CDZQRScanResultBlock)(NSString *scanResult);\ntypedef void (^CDZQRScanErrorBlock)(NSError *error);\ntypedef void (^CDZQRScanCancelBlock)();\n\nextern NSString * const CDZQRScanningErrorDomain;\n\ntypedef NS_ENUM(NSInteger, CDZQRScanningViewControllerErrorCode) {\n    CDZQRScanningViewControllerErrorUnavailableMetadataObjectType = 1,\n};\n\n/**\n *  Easy barcode scanning view controller for iOS 7.\n */\n\n@interface QRCodeScannerVC : UIViewController\n\n/**\n *  Returns a scanning view controller configured to accept the given metadata object types.\n *\n *  @param metadataObjectTypes An array of `AVMetadataMachineReadableCodeObject`s\n *\n *  @return Scanning view controller configured to accept the given metadata object types\n */\n- (instancetype)initWithMetadataObjectTypes:(NSArray *)metadataObjectTypes;\n\n/**\n *  Returns a scanning view controller configured to accept QR codes\n *\n *  @note This is equivalent to calling `initWithMetadataObjectTypes:@[ AVMetadataObjectTypeQRCode ]`\n *\n *  @return Scanning view controller configured to accept QR codes\n */\n- (instancetype)init;\n\n// Your blocks will be called on the main queue.\n@property (nonatomic, copy) CDZQRScanResultBlock resultBlock;\n@property (nonatomic, copy) CDZQRScanErrorBlock errorBlock;\n@property (nonatomic, copy) CDZQRScanCancelBlock cancelBlock;\n\n/**\n *  An array of `AVMetadataMachineReadableCodeObject`s\n */\n@property (nonatomic, strong, readonly) NSArray *metadataObjectTypes;\n\n@end"
  },
  {
    "path": "Potatso/Base/QRCode/QRCodeScannerVC.m",
    "content": "//\n//  QRCodeScannerVC.m\n//  Potatso\n//\n//  Created by LEI on 7/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"QRCodeScannerVC.h\"\n#import <AVFoundation/AVFoundation.h>\n#import \"HMScanner.h\"\n#import \"Potatso-Swift.h\"\n#import \"Crashlytics/Crashlytics.h\"\n\n#ifndef CDZWeakSelf\n#define CDZWeakSelf __weak __typeof__((__typeof__(self))self)\n#endif\n\n#ifndef CDZStrongSelf\n#define CDZStrongSelf __typeof__(self)\n#endif\n\nstatic AVCaptureVideoOrientation CDZVideoOrientationFromInterfaceOrientation(UIInterfaceOrientation interfaceOrientation)\n{\n    switch (interfaceOrientation) {\n        case UIInterfaceOrientationPortrait:\n            return AVCaptureVideoOrientationPortrait;\n            break;\n        case UIInterfaceOrientationLandscapeLeft:\n            return AVCaptureVideoOrientationLandscapeLeft;\n            break;\n        case UIInterfaceOrientationLandscapeRight:\n            return AVCaptureVideoOrientationLandscapeRight;\n            break;\n        case UIInterfaceOrientationPortraitUpsideDown:\n            return AVCaptureVideoOrientationPortraitUpsideDown;\n            break;\n        default:\n            return AVCaptureVideoOrientationPortrait;\n    }\n}\n\nstatic const float CDZQRScanningTorchLevel = 0.25;\nstatic const NSTimeInterval CDZQRScanningTorchActivationDelay = 0.25;\n\nNSString * const CDZQRScanningErrorDomain = @\"com.cdzombak.qrscanningviewcontroller\";\n\n@interface QRCodeScannerVC () <AVCaptureMetadataOutputObjectsDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>\n\n@property (nonatomic, strong) AVCaptureSession *avSession;\n@property (nonatomic, strong) AVCaptureDevice *captureDevice;\n@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;\n\n@property (nonatomic, copy) NSString *lastCapturedString;\n\n@property (nonatomic, strong, readwrite) NSArray *metadataObjectTypes;\n\n@end\n\n@implementation QRCodeScannerVC\n\n- (instancetype)initWithMetadataObjectTypes:(NSArray *)metadataObjectTypes {\n    self = [super init];\n    if (!self) return nil;\n    self.metadataObjectTypes = metadataObjectTypes;\n    self.title = NSLocalizedString(@\"qrcode.title\", nil);\n    return self;\n}\n\n- (instancetype)init {\n    return [self initWithMetadataObjectTypes:@[ AVMetadataObjectTypeQRCode ]];\n}\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n\n    self.view.backgroundColor = [UIColor blackColor];\n\n    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@\"qrcode.album\", nil) style:UIBarButtonItemStylePlain target:self action:@selector(clickAlbumButton)];\n\n    UILongPressGestureRecognizer *torchGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleTorchRecognizerTap:)];\n    torchGestureRecognizer.minimumPressDuration = CDZQRScanningTorchActivationDelay;\n    [self.view addGestureRecognizer:torchGestureRecognizer];\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n    [super viewWillAppear:animated];\n\n    self.lastCapturedString = nil;\n\n    if (self.cancelBlock && !self.errorBlock) {\n        CDZWeakSelf wSelf = self;\n        self.errorBlock = ^(NSError *error) {\n            CDZStrongSelf sSelf = wSelf;\n            if (sSelf.cancelBlock) {\n                [sSelf.avSession stopRunning];\n                sSelf.cancelBlock();\n            }\n        };\n    }\n    \n    if (! [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) {\n        dispatch_async(dispatch_get_main_queue(), ^{\n            [self clickAlbumButton];\n        });\n        return;\n    }\n    self.avSession = [[AVCaptureSession alloc] init];\n\n    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{\n        self.captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];\n        if ([self.captureDevice isLowLightBoostSupported] && [self.captureDevice lockForConfiguration:nil]) {\n            self.captureDevice.automaticallyEnablesLowLightBoostWhenAvailable = YES;\n            [self.captureDevice unlockForConfiguration];\n        }\n\n        [self.avSession beginConfiguration];\n\n        NSError *error = nil;\n        AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:self.captureDevice error:&error];\n        if (input) {\n            [self.avSession addInput:input];\n        } else {\n            CLS_LOG(@\"QRScanningViewController: Error getting input device: %@\", error);\n            [self.avSession commitConfiguration];\n            if (self.errorBlock) {\n                dispatch_async(dispatch_get_main_queue(), ^{\n                    [self.avSession stopRunning];\n                    self.errorBlock(error);\n                });\n            }\n            return;\n        }\n\n        AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];\n        [self.avSession addOutput:output];\n        for (NSString *type in self.metadataObjectTypes) {\n            if (![output.availableMetadataObjectTypes containsObject:type]) {\n                if (self.errorBlock) {\n                    dispatch_async(dispatch_get_main_queue(), ^{\n                        [self.avSession stopRunning];\n                        self.errorBlock([NSError errorWithDomain:CDZQRScanningErrorDomain code:CDZQRScanningViewControllerErrorUnavailableMetadataObjectType userInfo:@{NSLocalizedDescriptionKey:[NSString stringWithFormat:@\"Unable to scan object of type %@\", type]}]);\n                    });\n                }\n                return;\n            }\n        }\n\n        output.metadataObjectTypes = self.metadataObjectTypes;\n        [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];\n\n        [self.avSession commitConfiguration];\n\n        dispatch_async(dispatch_get_main_queue(), ^{\n            if (self.previewLayer.connection.isVideoOrientationSupported) {\n                self.previewLayer.connection.videoOrientation = CDZVideoOrientationFromInterfaceOrientation([[UIApplication sharedApplication] statusBarOrientation]);\n            }\n\n            [self.avSession startRunning];\n        });\n    });\n\n    self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.avSession];\n    self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;\n    self.previewLayer.frame = self.view.bounds;\n    if (self.previewLayer.connection.isVideoOrientationSupported) {\n        self.previewLayer.connection.videoOrientation = CDZVideoOrientationFromInterfaceOrientation([[UIApplication sharedApplication] statusBarOrientation]);\n    }\n    [self.view.layer addSublayer:self.previewLayer];\n}\n\n- (void)viewDidDisappear:(BOOL)animated {\n    [super viewDidDisappear:animated];\n\n    [self.previewLayer removeFromSuperlayer];\n    self.previewLayer = nil;\n    self.avSession = nil;\n    self.captureDevice = nil;\n}\n\n- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {\n    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];\n\n    if (self.previewLayer.connection.isVideoOrientationSupported) {\n        self.previewLayer.connection.videoOrientation = CDZVideoOrientationFromInterfaceOrientation(toInterfaceOrientation);\n    }\n}\n\n- (void)viewDidLayoutSubviews {\n    [super viewDidLayoutSubviews];\n\n    CGRect layerRect = self.view.bounds;\n    self.previewLayer.bounds = layerRect;\n    self.previewLayer.position = CGPointMake(CGRectGetMidX(layerRect), CGRectGetMidY(layerRect));\n}\n\n#pragma mark - UI Actions\n\n- (void)cancelItemSelected:(id)sender {\n    [self.avSession stopRunning];\n    if (self.cancelBlock) self.cancelBlock();\n}\n\n- (void)handleTorchRecognizerTap:(UIGestureRecognizer *)sender {\n    switch(sender.state) {\n        case UIGestureRecognizerStateBegan:\n            [self turnTorchOn];\n            break;\n        case UIGestureRecognizerStateChanged:\n        case UIGestureRecognizerStatePossible:\n            // no-op\n            break;\n        case UIGestureRecognizerStateRecognized: // also UIGestureRecognizerStateEnded\n        case UIGestureRecognizerStateFailed:\n        case UIGestureRecognizerStateCancelled:\n            [self turnTorchOff];\n            break;\n    }\n}\n\n#pragma mark - Torch\n\n- (void)turnTorchOn {\n    if (self.captureDevice.hasTorch && self.captureDevice.torchAvailable && [self.captureDevice isTorchModeSupported:AVCaptureTorchModeOn] && [self.captureDevice lockForConfiguration:nil]) {\n        [self.captureDevice setTorchModeOnWithLevel:CDZQRScanningTorchLevel error:nil];\n        [self.captureDevice unlockForConfiguration];\n    }\n}\n\n- (void)turnTorchOff {\n    if (self.captureDevice.hasTorch && [self.captureDevice isTorchModeSupported:AVCaptureTorchModeOff] && [self.captureDevice lockForConfiguration:nil]) {\n        self.captureDevice.torchMode = AVCaptureTorchModeOff;\n        [self.captureDevice unlockForConfiguration];\n    }\n}\n\n#pragma mark - AVCaptureMetadataOutputObjectsDelegate\n\n- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {\n    NSString *result;\n\n    for (AVMetadataObject *metadata in metadataObjects) {\n        if ([self.metadataObjectTypes containsObject:metadata.type]) {\n            result = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];\n            break;\n        }\n    }\n\n    if (result && ![self.lastCapturedString isEqualToString:result]) {\n        self.lastCapturedString = result;\n        [self.avSession stopRunning];\n        if (self.resultBlock) self.resultBlock(result);\n    }\n}\n\n\n/// 点击相册按钮\n- (void)clickAlbumButton {\n\n    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {\n        [self showTextHUD:NSLocalizedString(@\"qrcode.denied\", nil) dismissAfterDelay:1.0f];\n        return;\n    }\n\n    UIImagePickerController *picker = [[UIImagePickerController alloc] init];\n\n    picker.view.backgroundColor = [UIColor whiteColor];\n    picker.delegate = self;\n\n    [self showDetailViewController:picker sender:nil];\n}\n\n\n#pragma mark - UIImagePickerControllerDelegate\n- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {\n\n    // 扫描图像\n    [HMScanner scaneImage:info[UIImagePickerControllerOriginalImage] completion:^(NSArray *values) {\n        if (values.count > 0) {\n            if (self.resultBlock) {\n                self.resultBlock(values.firstObject);\n            }\n            CDZWeakSelf wSelf = self;\n            [self dismissViewControllerAnimated:NO completion:^{\n                [wSelf close];\n            }];\n        } else {\n            [self showTextHUD:NSLocalizedString(@\"qrcode.nocode\", nil) dismissAfterDelay:1.0f];\n            [self dismissViewControllerAnimated:YES completion:nil];\n        }\n    }];\n}\n\n@end\n"
  },
  {
    "path": "Potatso/Base/RequestEventRow.swift",
    "content": "//\n//  RequestStageCell.swift\n//  Potatso\n//\n//  Created by LEI on 7/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport Eureka\nimport Cartography\n\nfinal class RequestEventRow: Eureka.Row<RequestEventRowCell>, RowType {\n\n    required init(tag: String?) {\n        super.init(tag: tag)\n        displayValueFor = nil\n    }\n}\n\n\nclass RequestEventRowCell: Cell<RequestEvent>, CellType {\n\n    static let dateformatter: DateFormatter = {\n        let f = DateFormatter()\n        f.dateFormat = \"MM-dd hh:mm:ss.SSS\"\n        return f\n    }()\n\n    var copyContent: String? {\n        return contentLabel.text\n    }\n\n    required init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func setup() {\n        super.setup()\n        selectionStyle = .none\n        preservesSuperviewLayoutMargins = false\n        layoutMargins = UIEdgeInsets.zero\n        separatorInset = UIEdgeInsets.zero\n        contentView.addSubview(titleLabel)\n        contentView.addSubview(contentLabel)\n        contentView.addSubview(timeLabel)\n        constrain(titleLabel, timeLabel, contentLabel, contentView) { titleLabel, timeLabel, contentLabel, contentView in\n            titleLabel.leading == contentView.leading + 15\n            titleLabel.top == contentView.top + 14\n            timeLabel.leading == titleLabel.trailing + 10\n            timeLabel.centerY == titleLabel.centerY\n            timeLabel.trailing == contentView.trailing - 15\n            contentLabel.top == titleLabel.bottom + 8\n            contentLabel.leading == titleLabel.leading\n            contentLabel.trailing == contentView.trailing - 15\n            contentLabel.bottom == contentView.bottom - 14\n        }\n    }\n\n    override func update() {\n        super.update()\n        guard let event = row.value else {\n            return\n        }\n        titleLabel.text = event.stage.description\n        timeLabel.text = RequestEventRowCell.dateformatter.string(from: Date(timeIntervalSince1970: event.timestamp))\n        contentLabel.text = event.contentDescription\n        switch event.stage {\n        case .INIT:\n            self.accessoryType = .detailButton\n            break\n        default:\n            self.accessoryType = .none\n        }\n    }\n\n    lazy var titleLabel: UILabel = {\n        let v = UILabel()\n        v.font = UIFont.systemFont(ofSize: 13)\n        v.textColor = Color.Gray\n        return v\n    }()\n\n    lazy var timeLabel: UILabel = {\n        let v = UILabel()\n        v.font = UIFont.systemFont(ofSize: 13)\n        v.textColor = Color.Gray\n        v.textAlignment = .right\n        return v\n    }()\n\n    lazy var contentLabel: UILabel = {\n        let v = UILabel()\n        v.font = UIFont.systemFont(ofSize: 16)\n        v.textColor = Color.Black\n        v.numberOfLines = 0\n        return v\n    }()\n\n}\n"
  },
  {
    "path": "Potatso/Base/SegmentPageVC.swift",
    "content": "//\n//  SegmentPageVC.swift\n//  Potatso\n//\n//  Created by LEI on 7/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\n\nclass SegmentPageVC: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.titleView = segmentedControl\n        showPage(0)\n    }\n\n    func pageViewControllersForSegmentPageVC() -> [UIViewController] {\n        fatalError()\n    }\n\n    func segmentsForSegmentPageVC() -> [String] {\n        fatalError()\n    }\n\n    @objc func onSegmentedChanged(_ seg: UISegmentedControl) {\n        showPage(seg.selectedSegmentIndex)\n    }\n\n    func showPage(_ index: Int) {\n        segmentedControl.selectedSegmentIndex = index\n        let pageViewControllers = pageViewControllersForSegmentPageVC()\n        if index < pageViewControllers.count {\n            pageVC.setViewControllers([pageViewControllers[index]], direction: .forward, animated: false, completion: nil)\n        }\n    }\n\n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = Color.Background\n        addChildVC(pageVC)\n        setupAutoLayout()\n    }\n\n    func setupAutoLayout() {\n        constrain(pageVC.view, view) { pageView, superview in\n            pageView.edges == superview.edges\n        }\n    }\n\n    lazy var pageVC: UIPageViewController = {\n        let p = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)\n        return p\n    }()\n\n    lazy var segmentedControl: UISegmentedControl = {\n        let v = UISegmentedControl(items: self.segmentsForSegmentPageVC())\n        v.addTarget(self, action: #selector(onSegmentedChanged(_:)), for: .valueChanged)\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/Base.lproj/InfoPlist.strings",
    "content": "\"CFBundleDisplayName\" = \"Mume\";\n"
  },
  {
    "path": "Potatso/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15G31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"D5b-XV-L95\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"trp-gr-WXV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Q3I-OF-s6r\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                        <subviews>\n                            <navigationBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"f1o-jb-TsT\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"20\" width=\"600\" height=\"44\"/>\n                                <color key=\"barTintColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                                <items>\n                                    <navigationItem id=\"edO-cO-KcR\"/>\n                                </items>\n                            </navigationBar>\n                            <tabBar contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"DnW-LD-4fd\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"551\" width=\"600\" height=\"49\"/>\n                                <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                <items/>\n                            </tabBar>\n                        </subviews>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <constraints>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"f1o-jb-TsT\" secondAttribute=\"trailing\" id=\"7Rt-Fk-6m2\"/>\n                            <constraint firstItem=\"f1o-jb-TsT\" firstAttribute=\"leading\" secondItem=\"Q3I-OF-s6r\" secondAttribute=\"leading\" id=\"DXC-93-xVT\"/>\n                            <constraint firstItem=\"trp-gr-WXV\" firstAttribute=\"top\" secondItem=\"DnW-LD-4fd\" secondAttribute=\"bottom\" id=\"F5e-zF-EXD\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"DnW-LD-4fd\" secondAttribute=\"trailing\" id=\"sPt-Wg-MkY\"/>\n                            <constraint firstItem=\"DnW-LD-4fd\" firstAttribute=\"leading\" secondItem=\"Q3I-OF-s6r\" secondAttribute=\"leading\" id=\"ux1-hV-GJB\"/>\n                            <constraint firstItem=\"f1o-jb-TsT\" firstAttribute=\"top\" secondItem=\"D5b-XV-L95\" secondAttribute=\"bottom\" id=\"zXM-kE-9dx\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Potatso/Base.lproj/Localizable.strings",
    "content": "\"qrcode.denied\" = \"Access denied, please go to Settings-Privacy.\";\n\"qrcode.nocode\" = \"No QRCode\";\n\"qrcode.title\" = \"Scan QRCode\";\n\"qrcode.album\" = \"Album\";\n\n\n\"%d rule\" = \"%d rule\";\n\"%d rules\" = \"%d rules\";\n\"Action\" = \"Action\";\n\"Add Config Group\" = \"Add Config Group\";\n\"Add Proxy\" = \"Add Proxy\";\n\"Add Rule\" = \"Add Rule\";\n\"Add Rule Set\" = \"Add Rule Set\";\n\"Add a new proxy\" = \"Add a new proxy\";\n\"BUY\" = \"BUY\";\n\"CANCEL\" = \"CANCEL\";\n\"Cancel\" = \"Cancel\";\n\"Change Name\" = \"Change Name\";\n\"Check DNS Pollution\" = \"Check DNS Pollution\";\n\"Choose Proxy\" = \"Choose Proxy\";\n\"Choose Proxy Type\" = \"Choose Proxy Type\";\n\"Choose Rule Set\" = \"Choose Rule Set\";\n\"Choose SSR obfs\" = \"Choose SSR obfs\";\n\"Choose SSR protocol\" = \"Choose SSR protocol\";\n\"Choose action for rule\" = \"Choose action for rule\";\n\"Choose encryption method\" = \"Choose encryption method\";\n\"Choose type of rule\" = \"Choose type of rule\";\n\"Clear Photo\" = \"Clear Photo\";\n\"Connect\" = \"Connect\";\n\"Connected\" = \"Connected\";\n\"Connection\" = \"Connection\";\n\"DNS\" = \"DNS\";\n\"DNS Pollution\" = \"DNS Pollution\";\n\"DNS Query\" = \"DNS Query\";\n\"DNS should be valid ip addresses (separated by commas if multiple). e.g.: 8.8.8.8,8.8.4.4\" = \"DNS should be valid ip addresses (separated by commas if multiple). e.g.: 8.8.8.8,8.8.4.4\";\n\"Default\" = \"Default\";\n\"Default Route Match\" = \"Default Route Match\";\n\"Default To Proxy\" = \"Default To Proxy\";\n\"Detail\" = \"Detail\";\n\"Disconnect\" = \"Disconnect\";\n\"Edit Proxy\" = \"Edit Proxy\";\n\"Edit Rule\" = \"Edit Rule\";\n\"Edit Rule Set\" = \"Edit Rule Set\";\n\"Encryption\" = \"Encryption\";\n\"Fail\" = \"Fail\";\n\"Fail to add ruleset\" = \"Fail to add ruleset\";\n\"Fail to change dns\" = \"Fail to change dns\";\n\"Fail to delete item\" = \"Fail to delete item\";\n\"Fail to modify default to proxy\" = \"Fail to modify default to proxy\";\n\"Fail to parse proxy config\" = \"Fail to parse proxy config\";\n\"Fail to save config.\" = \"Fail to save config.\";\n\"Fail to switch VPN.\" = \"Fail to switch VPN.\";\n\"Fail. (Try Proxy DNS Resolution)\" = \"Fail. (Try Proxy DNS Resolution)\";\n\"Failed to add config group\" = \"Failed to add config group\";\n\"Fallback To DIRECT\" = \"Fallback To DIRECT\";\n\"Fallback To PROXY\" = \"Fallback To PROXY\";\n\"Feedback\" = \"Feedback\";\n\"Follow on Twitter\" = \"Follow on Twitter\";\n\"Follow on Weibo\" = \"Follow on Weibo\";\n\"Home\" = \"Home\";\n\"Host\" = \"Host\";\n\"Host can't be empty\" = \"Host can't be empty\";\n\"IP Rules Match\" = \"IP Rules Match\";\n\"Import Config From URL\" = \"Import Config From URL\";\n\"Import From QRCode\" = \"Import From QRCode\";\n\"Import From URL\" = \"Import From URL\";\n\"Import Success\" = \"Import Success\";\n\"Importing Config...\" = \"Importing Config...\";\n\"Input New Name\" = \"Input New Name\";\n\"Input URL\" = \"Input URL\";\n\"Input name\" = \"Input name\";\n\"Invalid DNS\" = \"Invalid DNS\";\n\"Invalid port\" = \"Invalid port\";\n\"Logging is disabled\" = \"Logging is disabled\";\n\"Logs\" = \"Logs\";\n\"Manage\" = \"Manage\";\n\"More\" = \"More\";\n\"Name\" = \"Name\";\n\"Name already exists\" = \"Name already exists\";\n\"Name can't be empty\" = \"Name can't be empty\";\n\"No Match\" = \"No Match\";\n\"No more data\" = \"No more data\";\n\"None\" = \"None\";\n\"OK\" = \"OK\";\n\"Obfs\" = \"Obfs\";\n\"Obfs Param\" = \"Obfs Param\";\n\"One Time Auth\" = \"One Time Auth\";\n\"Password\" = \"Password\";\n\"Password can't be empty\" = \"Password can't be empty\";\n\"Please set name for the new proxy\" = \"Please set name for the new proxy\";\n\"Port\" = \"Port\";\n\"Port can't be empty\" = \"Port can't be empty\";\n\"Mume is not connected\" = \"Mume is not connected\";\n\"Protocol\" = \"Protocol\";\n\"Proxy\" = \"Proxy\";\n\"Proxy Connection\" = \"Proxy Connection\";\n\"Proxy Connection Established\" = \"Proxy Connection Established\";\n\"Proxy DNS Query\" = \"Proxy DNS Query\";\n\"Proxy Name\" = \"Proxy Name\";\n\"Proxy Password\" = \"Proxy Password\";\n\"Proxy Server Host\" = \"Proxy Server Host\";\n\"Proxy Server Port\" = \"Proxy Server Port\";\n\"Proxy Type\" = \"Proxy Type\";\n\"Rate on App Store\" = \"Rate on App Store\";\n\"Receipt Validation Error\" = \"Receipt Validation Error\";\n\"Recent Requests\" = \"Recent Requests\";\n\"Remote Connection\" = \"Remote Connection\";\n\"Remote Connection Established\" = \"Remote Connection Established\";\n\"Request\" = \"Request\";\n\"Request Finished\" = \"Request Finished\";\n\"Rule\" = \"Rule\";\n\"Rule Set\" = \"Rule Set\";\n\"Rule Set Name\" = \"Rule Set Name\";\n\"Rules\" = \"Rules\";\n\"SSR Obfs Param\" = \"SSR Obfs Param\";\n\"Share with friends\" = \"Share with friends\";\n\"Start\" = \"Start\";\n\"Start DNS Query\" = \"Start DNS Query\";\n\"Start IP Rules Match\" = \"Start IP Rules Match\";\n\"Start Proxy Connection\" = \"Start Proxy Connection\";\n\"Start Proxy DNS Query\" = \"Start Proxy DNS Query\";\n\"Start Remote Connection\" = \"Start Remote Connection\";\n\"Start URL Rule Match\" = \"Start URL Rule Match\";\n\"Statistics\" = \"Statistics\";\n\"Success\" = \"Success\";\n\"System DNS\" = \"System DNS\";\n\"Telegram Channel\" = \"Telegram Channel\";\n\"The app is only made for App Store users. Please try again.\" = \"The app is only made for App Store users. Please try again.\";\n\"Type\" = \"Type\";\n\"URL Rules Match\" = \"URL Rules Match\";\n\"Unkown error\" = \"Unkown error\";\n\"Up Time\" = \"Up Time\";\n\"User Manual\" = \"User Manual\";\n\"Value\" = \"Value\";\n\"Value can't be empty\" = \"Value can't be empty\";\n\"Version\" = \"Version\";\n\"Website\" = \"Website\";\n\"You must choose a action\" = \"You must choose a action\";\n\"You must choose a encryption method\" = \"You must choose a encryption method\";\n\"You must choose a proxy type\" = \"You must choose a proxy type\";\n\"You must choose a type\" = \"You must choose a type\";\n\"You should manually refresh to see the request log.\" = \"You should manually refresh to see the request log.\";\n"
  },
  {
    "path": "Potatso/CollectionViewController.swift",
    "content": "//\n//  CollectionViewController.swift\n//  Potatso\n//\n//  Created by LEI on 5/31/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\n\nprivate let rowHeight: CGFloat = 135\n\nclass CollectionViewController: SegmentPageVC {\n\n    let pageVCs = [\n        ProxyListViewController(),\n        RuleSetListViewController(existing: []),\n    ]\n\n    override func pageViewControllersForSegmentPageVC() -> [UIViewController] {\n        return pageVCs\n    }\n\n    override func segmentsForSegmentPageVC() -> [String] {\n        return [\"Proxy\".localized(), \"Rule Set\".localized()]\n    }\n\n    override func showPage(_ index: Int) {\n        if index < 2 {\n            navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))\n        }else {\n            navigationItem.rightBarButtonItem = nil\n        }\n        super.showPage(index)\n    }\n\n    func add() {\n        switch segmentedControl.selectedSegmentIndex {\n        case 1:\n            let vc = RuleSetConfigurationViewController(ruleSet: nil)\n            navigationController?.pushViewController(vc, animated: true)\n        case 0:\n            let alert = UIAlertController(title: \"Add Proxy\".localized(), message: nil, preferredStyle: .actionSheet)\n            alert.addAction(UIAlertAction(title: \"Import From QRCode\".localized(), style: .default, handler: { (action) in\n                let importer = Importer(vc: self)\n                importer.importConfigFromQRCode()\n            }))\n            alert.addAction(UIAlertAction(title: \"Manual Settings\".localized(), style: .default, handler: { (action) in\n                let vc = ProxyConfigurationViewController()\n                self.navigationController?.pushViewController(vc, animated: true)\n            }))\n            alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n            if let presenter = alert.popoverPresentationController {\n                if let rightBtn : View = navigationItem.rightBarButtonItem?.value(forKey: \"view\") as? View {\n                    presenter.sourceView = rightBtn\n                    presenter.sourceRect = rightBtn.bounds\n                } else {\n                    presenter.sourceView = segmentedControl\n                    presenter.sourceRect = segmentedControl.bounds\n                }\n            }\n            self.present(alert, animated: true, completion: nil)\n        default:\n            break\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "Potatso/ConfigGroupCell.swift",
    "content": "//\n//  ConifgGroupCell.swift\n//  Potatso\n//\n//  Created by LEI on 4/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Cartography\nimport PotatsoModel\nimport PotatsoLibrary\n\nclass ConfigGroupCell: UITableViewCell {\n    \n    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        loadView()\n        preservesSuperviewLayoutMargins = false\n        layoutMargins = UIEdgeInsets.zero\n        separatorInset = UIEdgeInsets.zero\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    func config(_ group: ConfigurationGroup, hintColor: UIColor) {\n        nameLabel.text = group.name\n        proxyHintLabel.text = \"Proxy\".localized()\n        proxyLabel.text = group.proxies.first?.description ?? \"None\".localized()\n        ruleSetsHintLabel.text = \"Rule Set\".localized()\n        let desc = group.ruleSets.map { (set) -> String in\n            return set.name\n        }.joined(separator: \", \")\n        ruleSetsLabel.text = group.ruleSets.count > 0 ? \"\\(desc)\" : \"None\".localized()\n        leftColorHintView.backgroundColor = hintColor\n        statusLabel.isHidden = true\n        if group.isDefault && Manager.shared.vpnStatus == .on {\n            statusLabel.isHidden = false\n        }\n    }\n    \n    func loadView() {\n        selectionStyle = .none\n        backgroundColor = UIColor.clear\n        contentView.addSubview(backgroundWrapper)\n        backgroundWrapper.addSubview(leftColorHintView)\n        backgroundWrapper.addSubview(statusLabel)\n        backgroundWrapper.addSubview(nameLabel)\n        backgroundWrapper.addSubview(proxyHintLabel)\n        backgroundWrapper.addSubview(proxyLabel)\n        backgroundWrapper.addSubview(ruleSetsHintLabel)\n        backgroundWrapper.addSubview(ruleSetsLabel)\n        setupLayout()\n    }\n    \n    func setupLayout() {\n        constrain(backgroundWrapper, contentView) { backgroundWrapper, contentView in\n            backgroundWrapper.edges == contentView.edges\n        }\n        constrain(leftColorHintView, backgroundWrapper) { leftColorHintView, backgroundWrapper in\n            leftColorHintView.leading == backgroundWrapper.leading\n            leftColorHintView.top == backgroundWrapper.top\n            leftColorHintView.bottom == backgroundWrapper.bottom\n            leftColorHintView.width == 3\n        }\n        constrain(nameLabel, statusLabel, backgroundWrapper) { nameLabel, statusLabel, backgroundWrapper in\n            statusLabel.centerY == nameLabel.centerY\n            statusLabel.trailing == backgroundWrapper.trailing - 15\n            statusLabel.width == 80\n            statusLabel.height == 20\n        }\n        constrain(nameLabel, proxyHintLabel, proxyLabel, backgroundWrapper) { nameLabel, proxyHintLabel, proxyLabel, backgroundWrapper in\n            nameLabel.leading == backgroundWrapper.leading + 20\n            nameLabel.top == backgroundWrapper.top + 15\n            nameLabel.width <= backgroundWrapper.width - 120\n            \n            proxyHintLabel.leading == nameLabel.leading\n            proxyHintLabel.top == nameLabel.bottom + 15\n            proxyHintLabel.width <= backgroundWrapper.width/2 - 40\n            \n            proxyLabel.leading == nameLabel.leading\n            proxyLabel.top == proxyHintLabel.bottom + 3\n            proxyLabel.width <= backgroundWrapper.width/2 - 40\n        }\n        constrain(proxyHintLabel, ruleSetsHintLabel, backgroundWrapper) { proxyHintLabel, ruleSetsHintLabel, backgroundWrapper in\n            ruleSetsHintLabel.leading == backgroundWrapper.centerX\n            ruleSetsHintLabel.top == proxyHintLabel.top\n            ruleSetsHintLabel.width == proxyHintLabel.width\n        }\n        \n        constrain(proxyLabel, ruleSetsLabel, backgroundWrapper) { proxyLabel, ruleSetsLabel, backgroundWrapper in\n            ruleSetsLabel.leading == backgroundWrapper.centerX\n            ruleSetsLabel.top == proxyLabel.top\n            ruleSetsLabel.width == proxyLabel.width\n        }\n        \n    }\n    \n    lazy var nameLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = Color.TextPrimary\n        v.font = UIFont.boldSystemFont(ofSize: 18)\n        v.adjustsFontSizeToFitWidth = true\n        v.minimumScaleFactor = 0.8\n        return v\n    }()\n    \n    lazy var proxyHintLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = Color.TextHint\n        v.font = UIFont.systemFont(ofSize: 12)\n        return v\n    }()\n    \n    lazy var proxyLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = Color.TextSecond\n        v.font = UIFont.systemFont(ofSize: 15)\n        v.adjustsFontSizeToFitWidth = true\n        v.minimumScaleFactor = 0.8\n        return v\n    }()\n    \n    lazy var ruleSetsHintLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = Color.TextHint\n        v.font = UIFont.systemFont(ofSize: 12)\n        return v\n    }()\n    \n    lazy var ruleSetsLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = Color.TextSecond\n        v.font = UIFont.systemFont(ofSize: 15)\n        v.adjustsFontSizeToFitWidth = true\n        v.minimumScaleFactor = 0.8\n        return v\n    }()\n    \n    lazy var statusLabel: UILabel = {\n        let v = UILabel()\n        v.text = \"Connected\".localized()\n        v.font = UIFont.systemFont(ofSize: 10)\n        v.textColor = UIColor.white\n        v.layer.cornerRadius = 10\n        v.layer.masksToBounds = true\n        v.backgroundColor = \"1ABC9C\".color\n        v.textAlignment = .center\n        v.adjustsFontSizeToFitWidth = true\n        v.minimumScaleFactor = 0.8\n        return v\n    }()\n    \n    lazy var leftColorHintView: UIView = {\n        let v = UIView()\n        v.backgroundColor = \"3498DB\".color\n        return v\n    }()\n    \n    lazy var backgroundWrapper: UIView = {\n        let v = UIView()\n        v.backgroundColor = UIColor.white\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/ConfigGroupChooseVC.swift",
    "content": "//\n//  ConfigGroupChooseVC.swift\n//  Potatso\n//\n//  Created by LEI on 5/27/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoModel\nimport RealmSwift\nimport Realm\nimport PotatsoLibrary\n\nprivate let kGroupCellIdentifier = \"group\"\n\nprivate let rowHeight: CGFloat = 110\n\nclass ConfigGroupChooseManager {\n\n    static let shared = ConfigGroupChooseManager()\n\n    var window: ConfigGroupChooseWindow?\n\n    func show() {\n        if window == nil {\n            window = ConfigGroupChooseWindow(frame: UIScreen.main.bounds)\n            window?.backgroundColor = UIColor.clear\n            window?.makeKeyAndVisible()\n            window?.chooseVC.view.frame = CGRect(x: 0, y: window!.frame.height, width: window!.frame.width, height: window!.frame.height)\n            UIView.animate(withDuration: 0.3, animations: {\n                self.window?.backgroundColor = \"000\".color.alpha(0.5)\n                self.window?.chooseVC.view.frame.origin = CGPoint(x: 0, y: 0)\n            }) \n        }\n    }\n\n    func hide() {\n        if let window = window  {\n            UIView.animate(withDuration: 0.3, animations: {\n                window.chooseVC.view.frame.origin = CGPoint(x: 0, y: window.frame.height)\n            }, completion: { (finished) in\n                window.chooseVC.view.removeFromSuperview()\n                self.window?.isHidden = true\n                self.window = nil\n            })\n        }\n    }\n\n}\n\nclass ConfigGroupChooseWindow: UIWindow {\n\n    let chooseVC = ConfigGroupChooseVC()\n\n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        addSubview(chooseVC.view)\n        NotificationCenter.default.addObserver(self, selector: #selector(ConfigGroupChooseWindow.onStatusBarFrameChange), name: NSNotification.Name.UIApplicationDidChangeStatusBarFrame, object: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    func onStatusBarFrameChange() {\n        frame = UIScreen.main.bounds\n    }\n\n}\n\nclass ConfigGroupChooseVC: UIViewController, UITableViewDataSource, UITableViewDelegate {\n\n    let groups: Results<ConfigurationGroup>\n    let colors = [\"3498DB\", \"E74C3C\", \"8E44AD\", \"16A085\", \"E67E22\", \"2C3E50\"]\n    var gesture: UITapGestureRecognizer?\n    var token: RLMNotificationToken?\n\n    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        groups = DBUtils.all(ConfigurationGroup.self, sorted: \"createAt\")\n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        NotificationCenter.default.addObserver(self, selector: #selector(onVPNStatusChanged), name: NSNotification.Name(rawValue: kProxyServiceVPNStatusNotification), object: nil)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        updateUI()\n        token = groups.observe { [unowned self] (changed) in\n            switch changed {\n            case let .update(_, deletions: deletions, insertions: insertions, modifications: modifications):\n                self.tableView.beginUpdates()\n                defer {\n                    self.tableView.endUpdates()\n                    CurrentGroupManager.shared.setConfigGroupId(CurrentGroupManager.shared.group.uuid)\n                }\n                self.tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0) }), with: .automatic)\n                self.tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }), with: .automatic)\n                self.tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }), with: .automatic)\n            default:\n                break\n            }\n        }\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewDidDisappear(animated)\n        token?.invalidate()\n    }\n\n    func onVPNStatusChanged() {\n        updateUI()\n    }\n\n    func updateUI() {\n        tableView.reloadData()\n    }\n\n    func showConfigGroup(_ group: ConfigurationGroup, animated: Bool = true) {\n        CurrentGroupManager.shared.setConfigGroupId(group.uuid)\n        ConfigGroupChooseManager.shared.hide()\n    }\n\n    func onTap() {\n        ConfigGroupChooseManager.shared.hide()\n    }\n\n    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {\n        if let view = touch.view, view.isDescendant(of: tableView){\n            return false\n        }\n        return true\n    }\n\n    // MARK: - TableView DataSource & Delegate\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return groups.count + 1\n    }\n\n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        if indexPath.row >= groups.count {\n            let cell = UITableViewCell(style: .default, reuseIdentifier: HomePresenter.kAddConfigGroup)\n            cell.textLabel?.text = \"Add Config Group\".localized()\n            return cell;\n        }\n        let cell = tableView.dequeueReusableCell(withIdentifier: kGroupCellIdentifier, for: indexPath) as! ConfigGroupCell\n        cell.config(groups[indexPath.row], hintColor: colors[indexPath.row % colors.count].color )\n        return cell\n    }\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        if indexPath.row >= groups.count {\n            ConfigGroupChooseManager.shared.hide()\n            NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: HomePresenter.kAddConfigGroup), object: nil)\n        } else {\n            showConfigGroup(groups[indexPath.row])\n        }\n    }\n\n    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        if indexPath.row >= groups.count {\n            return false\n        }\n        let group = groups[indexPath.row]\n        if group.isDefault && Manager.shared.vpnStatus != .off {\n            return false\n        }\n        return groups.count > 1\n    }\n\n    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {\n        return .delete\n    }\n\n    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        if editingStyle == .delete {\n            let item: ConfigurationGroup\n            guard indexPath.row < groups.count else {\n                return\n            }\n            item = groups[indexPath.row]\n            do {\n                try DBUtils.hardDelete(item.uuid, type: ConfigurationGroup.self)\n            }catch {\n                self.showTextHUD(\"\\(\"Fail to delete item\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n            }\n        }\n    }\n\n    override func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        let tableRowHeight = CGFloat(groups.count + 1) * rowHeight\n        let maxHeight = view.bounds.size.height * 0.7\n        let height = min(tableRowHeight, maxHeight)\n        let originY = view.bounds.size.height - height\n        tableView.isScrollEnabled = (tableRowHeight > maxHeight)\n        tableView.frame = CGRect(x: 0, y: originY, width: view.bounds.size.width, height: height)\n    }\n\n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = UIColor.clear\n        gesture = UITapGestureRecognizer(target: self, action: #selector(onTap))\n        gesture?.delegate = self\n        view.addGestureRecognizer(gesture!)\n        view.addSubview(tableView)\n        tableView.register(ConfigGroupCell.self, forCellReuseIdentifier: kGroupCellIdentifier)\n    }\n\n    lazy var tableView: UITableView = {\n        let v = UITableView(frame: CGRect.zero, style: .plain)\n        v.dataSource = self\n        v.delegate = self\n        v.tableFooterView = UIView()\n        v.tableHeaderView = UIView()\n        v.separatorStyle = .singleLine\n        v.rowHeight = rowHeight\n        return v\n    }()\n\n}\n"
  },
  {
    "path": "Potatso/Core/API.swift",
    "content": "//\n//  API.swift\n//  Potatso\n//\n//  Created by LEI on 6/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport Alamofire\nimport ObjectMapper\nimport ICSMainFramework\n\nstruct API {\n\n    static let URL = \"https://api.mume.red/\"\n\n    enum Path {\n        case ruleSets\n        case ruleSet(String)\n\n        var url: String {\n            let path: String\n            switch self {\n            case .ruleSets:\n                path = \"mume-rulesets.php\"\n            case .ruleSet(let uuid):\n                path = \"ruleset/\\(uuid).json\"\n            }\n            return API.URL + path\n        }\n    }\n    \n    static func getJSON(url: URL, callback: @escaping (Data, Error?) -> Void) {\n        let lang = Locale.preferredLanguages[0]\n        let versionCode = (Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String) ?? \"\"\n        NSLog(\"API.getImportData ===> lang: \\(lang), version: \\(versionCode)\")\n        let parameters: Parameters = [\"lang\": lang, \"version\": versionCode]\n        Alamofire.SessionManager.default.request(url, parameters: parameters)\n            .responseData { response in\n                if let JSON = response.data {\n                    print(\"API.getImportData: \" + (String(data: JSON, encoding: .ascii) ?? \"\"))\n                    Crashlytics.sharedInstance().setObjectValue(JSON, forKey: \"getImportData\")\n                    callback(JSON, nil)\n                } else {\n                    Crashlytics.sharedInstance().setObjectValue(response.data ?? \"response.data\", forKey: \"getImportData\")\n                    callback(Data(), response.error)\n                }\n        }\n    }\n    \n    static func getRuleSets(_ callback: @escaping ([RuleSet]) -> Void) {\n        let lang = Locale.preferredLanguages[0]\n        let network = (DataInitializer.reachabilityManager?.networkReachabilityStatus.description()) ?? \"\"\n        let vi = (UIDevice.current.identifierForVendor?.uuidString) ?? \"\"\n        var parameters: Parameters = [\"lang\": lang, \"version\": AppEnv.version, \"build\": AppEnv.build, \"identifierForVendor\": vi, \"network\": network, \"appstore\": AppEnv.isAppStore]\n        let networkInfo = CTTelephonyNetworkInfo()\n        if let carrier = networkInfo.subscriberCellularProvider {\n            parameters[\"carrierName\"] = carrier.carrierName\n            parameters[\"mobileCountryCode\"] = carrier.mobileCountryCode\n            parameters[\"mobileNetworkCode\"] = carrier.mobileNetworkCode\n            parameters[\"isoCountryCode\"] = carrier.isoCountryCode\n        }\n        Alamofire.SessionManager.default.request(Path.ruleSets.url, parameters: parameters)\n            .responseJSON { response in\n                if let JSON = response.result.value {\n                    print(\"JSON: \\(JSON)\")\n                    Crashlytics.sharedInstance().setObjectValue(JSON, forKey: \"getRuleSets\")\n                    if let parsedObject = Mapper<RuleSet>().mapArray(JSONObject: JSON) {\n                        callback(parsedObject)\n                        return\n                    }\n                } else {\n                    Crashlytics.sharedInstance().setObjectValue(response.data ?? \"response.data\", forKey: \"getRuleSetsFailed\")\n                    callback([])\n                }\n                \n            }\n    }\n    \n    static func getProxySets(_ callback: @escaping (NSArray) -> Void) {\n        let lang = Locale.preferredLanguages[0]\n        let kCloudProxySets = \"kCloudProxySets\" + AppEnv.version\n        \n        let network = (DataInitializer.reachabilityManager?.networkReachabilityStatus.description()) ?? \"\"\n        let vi = (UIDevice.current.identifierForVendor?.uuidString) ?? \"\"\n        var parameters: Parameters = [\"lang\": lang, \"version\": AppEnv.version, \"build\": AppEnv.build, \"identifierForVendor\": vi, \"network\": network, \"appstore\": AppEnv.isAppStore]\n        #if DEBUG\n        parameters[\"debug\"] = 1\n        #endif\n        let networkInfo = CTTelephonyNetworkInfo()\n        if let carrier = networkInfo.subscriberCellularProvider {\n            parameters[\"carrierName\"] = carrier.carrierName\n            parameters[\"mobileCountryCode\"] = carrier.mobileCountryCode\n            parameters[\"mobileNetworkCode\"] = carrier.mobileNetworkCode\n            parameters[\"isoCountryCode\"] = carrier.isoCountryCode\n        }\n        Alamofire.request(\"https://mumevpn.com/shared.php\", parameters: parameters)\n            .responseJSON { response in\n                print(response.response ?? \"response.response\") // URL response\n                print(response.data ?? \"response.data\")     // server data\n                print(response.result.value ?? \"empty\")   // result of response serialization\n                if let JSON = response.result.value as? NSArray {\n                    Potatso.sharedUserDefaults().set(response.data, forKey: kCloudProxySets)\n                    Crashlytics.sharedInstance().setObjectValue(JSON, forKey: \"getProxySets\")\n                    callback(JSON)\n                    return\n                }\n                \n                Crashlytics.sharedInstance().setObjectValue(response.data ?? \"response.data\", forKey: \"getProxySetsFailed\")\n                if let data = Potatso.sharedUserDefaults().data(forKey: kCloudProxySets) {\n                    do {\n                        if let JSON = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? NSArray {\n                            callback(JSON)\n                            return\n                        }\n                    } catch {\n                        print(\"Local deserialization failed\")\n                    }\n                }\n        }\n    }\n}\n\nextension RuleSet {\n\n    static func addRemoteObject(_ ruleset: RuleSet, update: Bool = true) throws {\n        ruleset.isSubscribe = true\n        ruleset.editable = false\n        let id = ruleset.uuid\n        guard let local = DBUtils.get(id, type: RuleSet.self) else {\n            try DBUtils.add(ruleset)\n            return\n        }\n        if local.remoteUpdatedAt == ruleset.remoteUpdatedAt {\n            return\n        }\n        try DBUtils.add(ruleset)\n    }\n\n    static func addRemoteArray(_ rulesets: [RuleSet], update: Bool = true) throws {\n        for ruleset in rulesets {\n            try addRemoteObject(ruleset, update: update)\n        }\n    }\n\n}\n\n\nextension Alamofire.Request {\n    fileprivate static func logError(_ error: NSError, request: NSURLRequest, response: URLResponse?) {\n        NSLog(\"ObjectMapperSerializer failure: \\(error), request: \\(request.debugDescription), response: \\(response.debugDescription)\")\n    }\n}\n"
  },
  {
    "path": "Potatso/Core/Importer.swift",
    "content": "//\n//  Importer.swift\n//  Potatso\n//\n//  Created by LEI on 4/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Async\nimport PotatsoModel\nimport PotatsoLibrary\n\nstruct Importer {\n    \n    weak var viewController: UIViewController?\n    \n    init(vc: UIViewController) {\n        self.viewController = vc\n    }\n    \n    func importConfigFromUrl() {\n        var urlTextField: UITextField?\n        let alert = UIAlertController(title: \"Import Config From URL\".localized(), message: nil, preferredStyle: .alert)\n        alert.addTextField { (textField) in\n            textField.placeholder = \"Input URL\".localized()\n            urlTextField = textField\n        }\n        alert.addAction(UIAlertAction(title: \"OK\".localized(), style: .default, handler: { (action) in\n            if let input = urlTextField?.text {\n                self.onImportInput(input.trimmingCharacters(in: CharacterSet.whitespaces))\n            }\n        }))\n        alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n        viewController?.present(alert, animated: true, completion: nil)\n    }\n    \n    func importConfigFromQRCode() {\n        guard let vc = QRCodeScannerVC() else {\n            return\n        }\n        vc.resultBlock = { [weak vc] result in\n            vc?.navigationController?.popViewController(animated: true)\n            if let result = result {\n                self.onImportInput(result)\n            }\n        }\n        vc.errorBlock = { [weak vc] error in\n            vc?.navigationController?.popViewController(animated: true)\n            self.viewController?.showTextHUD(\"\\(error)\", dismissAfterDelay: 1.5)\n        }\n        viewController?.navigationController?.pushViewController(vc, animated: true)\n    }\n    \n    func onImportInput(_ result: String) {\n        if result.hasPrefix(\"#\") {\n            let q = result.trimmingCharacters(in: CharacterSet(charactersIn: \"#.,/?;'[]\"))\n            if q.characters.count > 0,\n                let eq = q.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) {\n                importConfig(\"https://mumevpn.com/import.php?q=\" + eq, isURL: true)\n            }\n            return\n        }\n        if Proxy.uriIsProxy(result) {\n            importSS(source: result)\n        } else {\n            importConfig(result, isURL: true)\n        }\n    }\n    \n    func importSS(source: String) {\n        do {\n            let proxy = try Proxy(string: source)\n            do {\n                try proxy.validate()\n                try DBUtils.add(proxy)\n                NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServiceAdded), object: nil)\n                self.onConfigSaveCallback(true, error: nil)\n            } catch {\n                self.onConfigSaveCallback(false, error: error)\n            }\n        } catch {\n            self.onConfigSaveCallback(false, error: error)\n        }\n    }\n    \n    func importConfig(_ source: String, isURL: Bool) {\n        viewController?.showProgreeHUD(\"Importing Config...\".localized())\n            do {\n                if isURL, let url = URL(string: source), (url.scheme == \"https\" || url.scheme == \"http\") {\n                    API.getJSON(url: url, callback: { data, error in\n                        if let error = error {\n                            self.onConfigSaveCallback(false, error: error)\n                            return\n                        }\n                        do {\n                            if let result = String(data: data, encoding: .ascii) {\n                                if Proxy.uriIsProxy(result) {\n                                    self.importSS(source: result)\n                                    return\n                                }\n                                let config = Config()\n                                try config.setup(string: result)\n                                self.onConfigSaveCallback(true, error: nil)\n                                return\n                            }\n                        } catch {\n                        }\n                        self.onConfigSaveCallback(false, error: error)\n                    })\n                } else {\n                    let config = Config()\n                    try config.setup(string: source)\n                    self.onConfigSaveCallback(true, error: nil)\n                }\n            } catch {\n                self.onConfigSaveCallback(false, error: error)\n            }\n    }\n    \n    func onConfigSaveCallback(_ success: Bool, error: Error?) {\n        Async.main(after: 0.5) {\n            self.viewController?.hideHUD()\n            if !success {\n                var errorDesc = \"\"\n                if let error = error {\n                    errorDesc = \"(\\(error))\"\n                }\n                if let vc = self.viewController {\n                    Alert.show(vc, message: \"\\(\"Fail to save config.\".localized()) \\(errorDesc)\")\n                }\n            }else {\n                self.viewController?.showTextHUD(\"Import Success\".localized(), dismissAfterDelay: 1.5)\n                let keyWindow = UIApplication.shared.keyWindow\n                let tabBarVC:UITabBarController = (keyWindow?.rootViewController) as! UITabBarController\n                tabBarVC.selectedIndex = 0\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Core/VPN.swift",
    "content": "//\n//  ProxyService.swift\n//  Potatso\n//\n//  Created by LEI on 12/28/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Async\nimport PotatsoModel\nimport PotatsoLibrary\n\nclass VPN {\n    \n    static func switchVPN(_ group: ConfigurationGroup, completion: ((Error?) -> Void)? = nil) {\n        let defaultUUID = Manager.shared.defaultConfigGroup.uuid\n        let isDefault = defaultUUID == group.uuid\n        if !isDefault {\n            Manager.shared.stopVPN()\n            Async.main(after: 1) {\n                _switchDefaultVPN(group, completion: completion)\n            }\n        } else {\n            _switchDefaultVPN(group, completion: completion)\n        }\n    }\n    \n    fileprivate static func _switchDefaultVPN(_ group: ConfigurationGroup, completion: ((Error?) -> Void)? = nil) {\n        Manager.shared.switchVPN { (manager, error) in\n            if let _ = manager {\n                Async.background(after: 2, { () -> Void in\n                    Appirater.userDidSignificantEvent(false)\n                })\n            }\n            Async.main{\n                completion?(error)\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Potatso/DashboardVC.swift",
    "content": "//\n//  DashboardVC.swift\n//  Potatso\n//\n//  Created by LEI on 7/13/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Eureka\n\nclass DashboardVC: FormViewController {\n\n    var timer: Timer?\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"Statistics\".localized()\n        self.updateForm()\n    }\n\n    func updateForm() {\n        form.delegate = nil\n        form.removeAll()\n        form +++ generateLogSection()\n        form.delegate = self\n        tableView?.reloadData()\n    }\n\n    func generateLogSection() -> Section {\n        let section = Section(\"Logs\".localized())\n        \n        section <<< SwitchRow(\"Open logging\") {\n            $0.title = \"Logging\".localized()\n            $0.value = Potatso.logLevel() > 0\n        }.onChange({ [unowned self] (row) in\n            Potatso.setLogLevel((Potatso.logLevel() > 0 ? 0 : 1))\n            self.updateForm()\n        })\n        \n        if Potatso.logLevel() > 0 {\n            section <<< LabelRow() {\n                $0.title = \"PacketTunnel\".localized()\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                    cell.selectionStyle = .default\n                }).onCellSelection({ [unowned self](cell, row) -> () in\n                    cell.setSelected(false, animated: true)\n                    self.showLogs()\n                }) <<< LabelRow() {\n                    $0.title = \"Privoxy\".localized()\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                    cell.selectionStyle = .default\n                }).onCellSelection({ [unowned self](cell, row) -> () in\n                    cell.setSelected(false, animated: true)\n                    self.showPrivoxyLogs()\n                }) <<< LabelRow() {\n                    $0.title = \"Shadowsocks\".localized()\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                    cell.selectionStyle = .default\n                }).onCellSelection({ [unowned self](cell, row) -> () in\n                    cell.setSelected(false, animated: true)\n                    self.showShadowsocksLogs()\n                })\n        } else {\n            // try remove log file\n            let fileManager = FileManager.default\n            try? fileManager.removeItem(at: Potatso.sharedLogUrl())\n            \n            let rootUrl = Potatso.sharedUrl()\n            let logDir = rootUrl.appendingPathComponent(\"log\")\n            let logPath = logDir.appendingPathComponent(privoxyLogFile)\n            try? fileManager.removeItem(at: logPath)\n        }\n        return section\n    }\n\n    func showRecentRequests() {\n        let vc = RecentRequestsVC()\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n    func showLogs() {\n        print (\"tunnel log: \", Potatso.sharedLogUrl())\n        navigationController?.pushViewController(LogDetailViewController(path: Potatso.sharedLogUrl().path), animated: true)\n    }\n\n    func showShadowsocksLogs() {\n        let rootUrl = Potatso.sharedUrl()\n        let logPath = rootUrl.appendingPathComponent(shadowsocksLogFile)\n        print (\"shadowsocks log: \", logPath)\n        navigationController?.pushViewController(LogDetailViewController(path: logPath.path), animated: true)\n    }\n    \n    func showPrivoxyLogs() {\n        let rootUrl = Potatso.sharedUrl()\n        let logDir = rootUrl.appendingPathComponent(\"log\")\n        let logPath = logDir.appendingPathComponent(privoxyLogFile)\n        print (\"privoxy log: \", logPath)\n        navigationController?.pushViewController(LogDetailViewController(path: logPath.path), animated: true)\n    }\n    \n    lazy var startTimeFormatter: DateFormatter = {\n        let f = DateFormatter()\n        f.dateStyle = .medium\n        f.timeStyle = .medium\n        return f\n    }()\n\n    lazy var durationFormatter: DateComponentsFormatter = {\n        let f = DateComponentsFormatter()\n        f.unitsStyle = .abbreviated\n        return f\n    }()\n\n}\n"
  },
  {
    "path": "Potatso/DataInitializer.swift",
    "content": "//\n//  DBInitializer.swift\n//  Potatso\n//\n//  Created by LEI on 3/8/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Alamofire\nimport ICSMainFramework\nimport NetworkExtension\nimport CloudKit\nimport Async\nimport RealmSwift\nimport Realm\n\nclass DataInitializer: NSObject, AppLifeCycleProtocol {\n    static var cloudProxies: [CloudProxy] = []\n    static var serverConfigurations = NSMutableDictionary()\n    static let reachabilityManager = NetworkReachabilityManager(host:\"mumevpn.com\")\n    static var vpnStatus: VPNStatus = .off\n    static var selectedProxy: String? = nil\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        let _ = Manager.shared\n        \n        self.updateMumeServers()\n        API.getRuleSets() { (result) in\n            guard result.count > 0 else {\n                return\n            }\n            let data = result.filter({ $0.name.characters.count > 0})\n            for i in 0..<data.count {\n                do {\n                    try RuleSet.addRemoteObject(data[i])\n                } catch {\n                    NSLog(\"Fail to subscribe\".localized())\n                }\n            }\n        }\n        return true\n    }\n    \n    func applicationDidEnterBackground(_ application: UIApplication) {\n        self.updateMumeServers()\n        _ = try? Manager.shared.regenerateConfigFiles()\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        print(\"applicationWillTerminate\")\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        Appirater.appEnteredForeground(true)\n    }\n    \n    func updateMumeServers() {\n        guard DataInitializer.vpnStatus == .off else {\n            return\n        }\n        let cloudProxies = DBUtils.all(CloudProxy.self, sorted: \"createAt\").map({ $0 })\n        for cp in cloudProxies {\n            let dateFormatter = DateFormatter()\n            dateFormatter.dateFormat = \"yyyy.MM.dd\"\n            if let due = cp.due, let date = dateFormatter.date(from: due) {\n                if (date.timeIntervalSinceNow < 0) {\n                    Proxy.delete(proxy: cp)\n                    try? DBUtils.hardDelete(cp.uuid, type: CloudProxy.self)\n                }\n            }\n        }\n        \n        API.getProxySets() { (response) in\n            do {\n                for dic in response {\n                    if let dict = dic as? [String : String], let proxy = Proxy.proxy(dictionary: dict) {\n                        try DBUtils.hardDelete(proxy.uuid, type: Proxy.self)\n                        Proxy.insertOrUpdate(proxy: proxy)\n                        NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServiceAdded), object: nil)\n                    } else if let dict = dic as? NSDictionary, let mdict = dict.mutableCopy() as? NSMutableDictionary {\n                        #if DEBUG\n                            mdict.setValue(\"true\", forKey: \"ip\")\n                        #endif\n                        if let cps = mdict[\"cloud\"] as? NSArray {\n                            var upstreamCloudProxies : [CloudProxy] = []\n                            mdict.removeObject(forKey: \"cloud\")\n                            for cp in cps {\n                                if let cpdict = cp as? NSDictionary, let proxy = CloudProxy.cloudProxy(dictionary: cpdict) {\n                                    if let ud = Mume.sharedUserDefaults(), \"delete\" == ud.string(forKey: proxy.description) {\n                                        continue\n                                    }\n                                    upstreamCloudProxies.append(proxy)\n                                }\n                            }\n                            if upstreamCloudProxies.count >= DataInitializer.cloudProxies.count {\n                                DataInitializer.cloudProxies = upstreamCloudProxies\n                            }\n                        }\n\n                        DataInitializer.serverConfigurations = mdict\n                        NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServerConfigurationUpdated), object: dic)\n                    }\n                }\n            } catch {\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Potatso/DefaultConfidential.h",
    "content": "\n\n#ifndef Confidential_h\n#define Confidential_h\n\n#define HELPSHIFT_KEY    @\"\"\n#define HELPSHIFT_DOMAIN @\"\"\n#define HELPSHIFT_ID     @\"\"\n\n#define LOGGY_KEY    @\"\"\n\n#endif"
  },
  {
    "path": "Potatso/HomePresenter.swift",
    "content": "//\n//  HomePresenter.swift\n//  Potatso\n//\n//  Created by LEI on 6/22/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Async\n\nprotocol HomePresenterProtocol: class {\n    func handleRefreshUI(_ error: Error?)\n}\n\nclass HomePresenter: NSObject {\n\n    static var kAddConfigGroup = \"AddConfigGroup\"\n    static var errorCnt = 0\n    var configError = 0\n    var vc: UIViewController!\n\n    var group: ConfigurationGroup {\n        return CurrentGroupManager.shared.group\n    }\n\n    var proxy: Proxy? {\n        return group.proxies.first\n    }\n\n    weak var delegate: HomePresenterProtocol?\n\n    override init() {\n        super.init()\n        NotificationCenter.default.addObserver(self, selector: #selector(onVPNStatusChanged), name: NSNotification.Name(rawValue: kProxyServiceVPNStatusNotification), object: nil)\n        NotificationCenter.default.addObserver(self, selector: #selector(showAddConfigGroup), name: NSNotification.Name(rawValue: HomePresenter.kAddConfigGroup), object: nil)\n        CurrentGroupManager.shared.onChange = { group in\n            self.delegate?.handleRefreshUI(nil)\n        }\n        try? Manager.shared.regenerateConfigFiles()\n    }\n\n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n\n    func bindToVC(_ vc: UIViewController) {\n        self.vc = vc\n    }\n\n    // MARK: - Actions\n\n    func switchVPN() {\n        if self.configError > 0 {\n            do {\n                try Manager.shared.regenerateConfigFiles()\n                self.configError = 0\n            } catch {\n                print(\"switchVPN failed: \", error)\n                self.configError += 1\n                return\n            }\n        }\n        VPN.switchVPN(group) { [unowned self] (error) in\n            if let error = error as NSError? {\n                HomePresenter.errorCnt += 1\n                self.delegate?.handleRefreshUI(error)\n                // https://forums.developer.apple.com/thread/25928\n                if error.code == 1, HomePresenter.errorCnt == 1 {\n                    NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServicePermissionChanged), object: nil)\n                    return\n                }\n                Alert.show(self.vc, message: \"\\(\"Fail to switch VPN.\".localized()) (\\(error))\")\n            }\n        }\n    }\n\n    func change(proxy: Proxy, status: VPNStatus) -> Bool {\n        if (proxy.uuid == self.proxy?.uuid) {\n            print(\"HomePresenter.change(proxy): not changed\");\n            return false\n        }\n        try? DBUtils.modify(ConfigurationGroup.self, id: self.group.uuid) { (realm, group) -> Error? in\n            group.proxies.removeAll()\n            group.proxies.append(proxy)\n            return nil\n        }\n        \n        // apply changes\n        do {\n            try Manager.shared.generateShadowsocksConfig()\n            self.restartVPN()\n            return true\n        } catch {\n            print(error)\n            self.configError += 1\n            return false\n        }\n    }\n    \n    func restartVPN() {\n        guard Manager.shared.stopVPN() else {\n            return\n        }\n        Async.main(after: 1) {\n            Manager.shared.switchVPN { (manager, error) in\n                if let _ = manager {\n                    Async.background(after: 2, { () -> Void in\n                        Appirater.userDidSignificantEvent(false)\n                    })\n                }\n            }\n        }\n    }\n    \n    func chooseConfigGroups() {\n        ConfigGroupChooseManager.shared.show()\n    }\n\n    func showAddConfigGroup() {\n        var urlTextField: UITextField?\n        let alert = UIAlertController(title: \"Add Config Group\".localized(), message: nil, preferredStyle: .alert)\n        alert.addTextField { (textField) in\n            textField.placeholder = \"Name\".localized()\n            urlTextField = textField\n        }\n        alert.addAction(UIAlertAction(title: \"OK\".localized(), style: .default, handler: { (action) in\n            if let input = urlTextField?.text {\n                do {\n                    try self.addEmptyConfigGroup(input)\n                }catch{\n                    Alert.show(self.vc, message: \"\\(\"Failed to add config group\".localized()): \\(error)\")\n                }\n            }\n        }))\n        alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n        vc.present(alert, animated: true, completion: nil)\n    }\n\n    func addEmptyConfigGroup(_ name: String) throws {\n        let trimmedName = name.trimmingCharacters(in: CharacterSet.whitespaces)\n        if trimmedName.characters.count == 0 {\n            throw \"Name can't be empty\".localized()\n        }\n        let group = ConfigurationGroup()\n        group.name = trimmedName\n        try DBUtils.add(group)\n        CurrentGroupManager.shared.setConfigGroupId(group.uuid)\n    }\n\n    func addRuleSet(existing: [String]) {\n        let destVC: UIViewController\n        if defaultRealm.objects(RuleSet.self).count <= existing.count {\n            destVC = RuleSetConfigurationViewController() { [unowned self] ruleSet in\n                self.appendRuleSet(ruleSet)\n            }\n        } else {\n            destVC = RuleSetListViewController(existing: existing) { [unowned self] ruleSet in\n                self.appendRuleSet(ruleSet)\n            }\n        }\n        vc.navigationController?.pushViewController(destVC, animated: true)\n    }\n\n    func appendRuleSet(_ ruleSet: RuleSet?) {\n        guard let ruleSet = ruleSet, !group.ruleSets.contains(ruleSet) else {\n            return\n        }\n        do {\n            try ConfigurationGroup.appendRuleSet(forGroupId: group.uuid, rulesetId: ruleSet.uuid)\n            Manager.shared.setDefaultConfigGroup(group.uuid, name: group.name)\n            self.delegate?.handleRefreshUI(nil)\n            restartVPN()\n        } catch {\n            self.configError += 1\n            self.vc.showTextHUD(\"\\(\"Fail to add ruleset\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n        }\n    }\n\n    func updateDNS(_ dnsString: String) {\n        var dns: String = \"\"\n        let trimmedDNSString = dnsString.trimmingCharacters(in: CharacterSet.whitespaces)\n        if trimmedDNSString.characters.count > 0 {\n            let dnsArray = dnsString.components(separatedBy: \",\").map({ $0.components(separatedBy: \"，\") }).flatMap({ $0 }).map({ $0.trimmingCharacters(in: CharacterSet.whitespaces)}).filter({ $0.characters.count > 0 })\n            let ipRegex = \"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$\";\n            guard let regex = try? Regex(ipRegex) else {\n                fatalError()\n            }\n            let valids = dnsArray.map({ regex.test($0) })\n            let valid = valids.reduce(true, { $0 && $1 })\n            if !valid {\n                dns = \"\"\n                Alert.show(self.vc, title: \"Invalid DNS\".localized(), message: \"DNS should be valid ip addresses (separated by commas if multiple). e.g.: 8.8.8.8,8.8.4.4\".localized())\n            }else {\n                dns = dnsArray.joined(separator: \",\")\n            }\n        }\n        do {\n            try ConfigurationGroup.changeDNS(forGroupId: group.uuid, dns: dns)\n            self.configError += 1\n        }catch {\n            self.vc.showTextHUD(\"\\(\"Fail to change dns\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n        }\n    }\n\n    func onVPNStatusChanged() {\n        self.delegate?.handleRefreshUI(nil)\n    }\n\n    func changeGroupName() {\n        var urlTextField: UITextField?\n        let alert = UIAlertController(title: \"Change Name\".localized(), message: nil, preferredStyle: .alert)\n        alert.addTextField { (textField) in\n            textField.placeholder = \"Input New Name\".localized()\n            urlTextField = textField\n        }\n        alert.addAction(UIAlertAction(title: \"OK\".localized(), style: .default, handler: { [unowned self] (action) in\n            if let newName = urlTextField?.text {\n                do {\n                    try ConfigurationGroup.changeName(forGroupId: self.group.uuid, name: newName)\n                }catch {\n                    Alert.show(self.vc, title: \"Failed to change name\", message: \"\\(error)\")\n                }\n                self.delegate?.handleRefreshUI(nil)\n            }\n        }))\n        alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n        vc.present(alert, animated: true, completion: nil)\n    }\n\n}\n\nclass CurrentGroupManager {\n\n    static let shared = CurrentGroupManager()\n\n    fileprivate init() {\n        _groupUUID = Manager.shared.defaultConfigGroup.uuid\n    }\n\n    var onChange: ((ConfigurationGroup?) -> Void)?\n\n    fileprivate var _groupUUID: String {\n        didSet(o) {\n            self.onChange?(group)\n        }\n    }\n\n    var group: ConfigurationGroup {\n        if let group = DBUtils.get(_groupUUID, type: ConfigurationGroup.self) {\n            return group\n        } else {\n            let defaultGroup = Manager.shared.defaultConfigGroup\n            setConfigGroupId(defaultGroup.uuid)\n            return defaultGroup\n        }\n    }\n\n    func setConfigGroupId(_ id: String) {\n        if let _ = DBUtils.get(id, type: ConfigurationGroup.self) {\n            _groupUUID = id\n        } else {\n            _groupUUID = Manager.shared.defaultConfigGroup.uuid\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/HomeVC.swift",
    "content": "//\n//  IndexViewController.swift\n//  Potatso\n//\n//  Created by LEI on 5/27/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoLibrary\nimport PotatsoModel\nimport Eureka\nimport Cartography\nimport Async\n\nprivate let kFormName = \"name\"\nprivate let kFormDNS = \"dns\"\nprivate let kFormProxies = \"proxies\"\nprivate let kFormDefaultToProxy = \"defaultToProxy\"\npublic let kProxyServicePermissionChanged = \"kProxyServicePermissionChanged\"\npublic let kProxyServerConfigurationUpdated = \"kProxyServerConfigurationUpdated\"\n\nclass HomeVC: FormViewController, UINavigationControllerDelegate, HomePresenterProtocol, UITextFieldDelegate {\n\n    let presenter = HomePresenter()\n    var proxies: [Proxy] = []\n\n    var ruleSetSection: Section!\n\n    var status: VPNStatus {\n        didSet(o) {\n            updateConnectButton()\n            DataInitializer.vpnStatus = self.status\n            if let proxy = self.presenter.proxy {\n                DataInitializer.selectedProxy = proxy.description\n            }\n        }\n    }\n\n    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        self.status = Manager.shared.vpnStatus\n        print (\"HomeVC.init: \", self.status.rawValue)\n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        presenter.bindToVC(self)\n        presenter.delegate = self\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Fix a UI stuck bug\n        navigationController?.delegate = self\n        NotificationCenter.default.addObserver(self,\n                                               selector: #selector(updateForm),\n                                               name: NSNotification.Name(rawValue: kProxyServiceAdded),\n                                               object: nil)\n        NotificationCenter.default.addObserver(self,\n                                               selector: #selector(handleConnectButtonPressed),\n                                               name: NSNotification.Name(rawValue: kProxyServicePermissionChanged),\n                                               object: nil)\n        NotificationCenter.default.addObserver(self,\n                                               selector: #selector(onServerConfigurationUpdated),\n                                               name: NSNotification.Name(rawValue: kProxyServerConfigurationUpdated),\n                                               object: nil)\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        self.navigationItem.titleView = titleButton\n        // Post an empty message so we could attach to packet tunnel process\n        Manager.shared.postToNETunnel(message: \"Hello\", complete: { code, data in\n            if let data = data, let ip = String(data: data, encoding: .utf8) {\n                print(code, ip)\n            }\n        })\n        \n        updateForm()\n        navigationItem.leftBarButtonItem = UIBarButtonItem(image: \"List\".templateImage, style: .plain, target: presenter, action: #selector(HomePresenter.chooseConfigGroups))\n        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addProxy(_:)))\n        startTimer()\n        if let proxy = presenter.proxy {\n            Crashlytics.sharedInstance().setObjectValue(proxy.description, forKey: \"ShadowsocksConfig\")\n        }\n    }\n    \n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        stopTimer()\n    }\n    \n    func addProxy(_ sender: AnyObject) {\n        let alert = UIAlertController(title: \"Add Proxy\".localized(), message: nil, preferredStyle: .actionSheet)\n        alert.addAction(UIAlertAction(title: \"Import From QRCode\".localized(), style: .default, handler: { (action) in\n            let importer = Importer(vc: self)\n            importer.importConfigFromQRCode()\n        }))\n        alert.addAction(UIAlertAction(title: \"Manual Settings\".localized(), style: .default, handler: { (action) in\n            let vc = ProxyConfigurationViewController()\n            self.navigationController?.pushViewController(vc, animated: true)\n        }))\n        alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n        if let presenter = alert.popoverPresentationController {\n            if let rightBtn : View = navigationItem.rightBarButtonItem?.value(forKey: \"view\") as? View {\n                presenter.sourceView = rightBtn\n                presenter.sourceRect = rightBtn.bounds\n            } else {\n                presenter.sourceView = titleButton\n                presenter.sourceRect = titleButton.bounds\n            }\n        }\n        self.present(alert, animated: true, completion: nil)\n    }\n    \n    // MARK: - HomePresenter Protocol\n\n    func handleRefreshUI(_ error: Error?) {\n        if presenter.group.isDefault {\n            let vpnStatus = Manager.shared.vpnStatus\n            if status == .connecting {\n                if nil == error {\n                    if vpnStatus == .off {\n                        return\n                    }\n                }\n            }\n            if status == .disconnecting {\n                if vpnStatus == .on {\n                    return\n                }\n            }\n            status = vpnStatus\n        } else {\n            status = .off\n        }\n        updateTitle()\n    }\n\n    func updateTitle() {\n        titleButton.setTitle(presenter.group.name, for: UIControlState())\n        titleButton.sizeToFit()\n    }\n\n    func updateForm() {\n        form.delegate = nil\n        form.removeAll()\n\n        form.delegate = nil\n        form.removeAll()\n        \n        form +++ generateConnectionSection()\n\n        let section = Section(\"Proxy\".localized())\n        defer {\n            form +++ section\n            \n            form +++ generateRuleSetSection()\n            form.delegate = self\n            tableView?.reloadData()\n        }\n        proxies = DBUtils.all(Proxy.self, sorted: \"createAt\").map({ $0 })\n        if proxies.count == 0 {\n            section\n                <<< ProxyRow() {\n                    $0.value = nil\n                    $0.cellStyle = UITableViewCellStyle.subtitle\n                    }.cellSetup({ (cell, row) -> () in\n                        cell.selectionStyle = .none\n                        cell.accessoryType = .none\n                        cell.imageView?.isHidden = false\n                    })\n            return\n        }\n        if nil == self.presenter.proxy {\n            self.presenter.change(proxy: proxies[0], status: self.status)\n        }\n        for proxy in proxies {\n            section\n                <<< ProxyRow() {\n                    $0.value = proxy\n                    $0.cellStyle = UITableViewCellStyle.subtitle\n                    }.cellSetup({ (cell, row) -> () in\n                        cell.selectionStyle = .none\n                        cell.setSelected(self.presenter.proxy?.uuid == proxy.uuid, animated: false)\n                        cell.accessoryType = .disclosureIndicator\n                    }).onCellSelection({ [unowned self] (cell, row) in\n                        guard let proxy = row.value else {\n                            return\n                        }\n                        row.updateCell()\n                        if (self.presenter.proxy?.uuid == proxy.uuid) {\n                            if proxy.type != .none {\n                                let vc = ProxyConfigurationViewController(upstreamProxy: proxy, readOnly: true)\n                                self.navigationController?.pushViewController(vc, animated: true)\n                            }\n                            return\n                        }\n                        if self.presenter.change(proxy: proxy, status: self.status) {\n                            self.updateTitle()\n                            self.updateForm()\n                        }\n                    })\n        }\n    }\n\n    func updateConnectButton() {\n        tableView?.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .none)\n    }\n\n    // MARK: - Form\n\n    func generateConnectionSection() -> Section {\n        let proxySection = Section(\"Connect\".localized())\n        var reloading = true\n\n        proxySection <<< SwitchRow(\"connection\") {\n            reloading = true\n            $0.title = status.hintDescription()\n            $0.value = status.onOrConnectiong()\n            reloading = false\n            }.onChange({ [unowned self] (row) in\n                if reloading {\n                    return\n                }\n                self.handleConnectButtonPressed()\n                })\n            .cellUpdate ({ cell, row in\n                reloading = true\n                row.title = self.status.hintDescription()\n                row.value = self.status.onOrConnectiong()\n                reloading = false\n            })\n        <<< TextRow(kFormDNS) {\n            $0.title = \"DNS\".localized()\n            $0.value = presenter.group.dns\n        }.cellSetup { cell, row in\n            cell.textField.placeholder = \"System DNS\".localized()\n            cell.textField.autocorrectionType = .no\n            cell.textField.autocapitalizationType = .none\n        }\n        return proxySection\n    }\n\n    func generateRuleSetSection() -> Section {\n        let group = self.presenter.group\n        var ruleSetIds = [String]()\n        ruleSetSection = Section(\"Rule Set\".localized())\n        for ruleSet in group.ruleSets {\n            ruleSetIds.append(ruleSet.uuid)\n            ruleSetSection\n                <<< LabelRow () {\n                    $0.title = \"\\(ruleSet.name)\"\n                    var count = 0\n                    if ruleSet.ruleCount > 0 {\n                        count = ruleSet.ruleCount\n                    } else {\n                        count = ruleSet.rules.count\n                    }\n                    if count > 1 {\n                        $0.value = String(format: \"%d rules\".localized(),  count)\n                    }else {\n                        $0.value = String(format: \"%d rule\".localized(), count)\n                    }\n                }.cellSetup({ (cell, row) -> () in\n                    cell.selectionStyle = .none\n                })\n        }\n        ruleSetSection <<< SwitchRow(kFormDefaultToProxy) {\n            $0.title = \"Default To Proxy\".localized()\n            $0.value = group.defaultToProxy\n            $0.hidden = Condition.function([kFormProxies]) { [unowned self] form in\n                return self.presenter.proxy == nil\n            }\n            }.onChange({ [unowned self] (row) in\n                do {\n                    try defaultRealm.write {\n                        self.presenter.group.defaultToProxy = row.value ?? true\n                    }\n                    try Manager.shared.generateHttpProxyConfig()\n                    self.presenter.restartVPN()\n                }catch {\n                    self.showTextHUD(\"\\(\"Fail to modify default to proxy\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n                }\n                })\n        ruleSetSection <<< BaseButtonRow () {\n            $0.title = \"Add Rule Set\".localized()\n        }.onCellSelection({ [unowned self] (cell, row) -> () in\n            self.presenter.addRuleSet(existing: ruleSetIds)\n        })\n        Crashlytics.sharedInstance().setObjectValue(ruleSetIds.joined(separator: \" \"), forKey: \"activeRules\")\n        return ruleSetSection\n    }\n\n\n    // MARK: - Private Actions\n\n    func handleConnectButtonPressed() {\n        if status == .on {\n            status = .disconnecting\n        } else {\n            status = .connecting\n        }\n        presenter.switchVPN()\n    }\n\n    func handleTitleButtonPressed() {\n        presenter.changeGroupName()\n    }\n\n    func onServerConfigurationUpdated() {\n        guard let rules = DataInitializer.serverConfigurations[\"rules\"] as? String else {\n            return\n        }\n        var ruleids = (rules ).components(separatedBy: \",\")\n        let rulesTriggerCondition = (DataInitializer.serverConfigurations[\"rulesTriggerCondition\"] as? Int) ?? 0\n        let group = self.presenter.group\n        \n        if group.ruleSets.count > rulesTriggerCondition {\n            return\n        }\n        for er in group.ruleSets {\n            ruleids = ruleids.filter() { $0 == er.uuid }\n        }\n        if ruleids.count == 0 {\n            return\n        }\n        for ruleid in ruleids {\n            let ruleSet = DBUtils.get(ruleid, type: RuleSet.self)\n            self.presenter.appendRuleSet(ruleSet)\n        }\n        self.updateForm()\n    }\n    // MARK: - TableView\n\n    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        if indexPath.section == ruleSetSection.index && indexPath.row < presenter.group.ruleSets.count {\n            return true\n        }\n        return false\n    }\n\n    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        if editingStyle == .delete {\n            do {\n                let group = presenter.group\n                try defaultRealm.write {\n                    group.ruleSets.remove(at: indexPath.row)\n                }\n                form[indexPath].hidden = true\n                form[indexPath].evaluateHidden()\n                if Manager.shared.setDefaultConfigGroup(group.uuid, name: group.name) {\n                    self.presenter.restartVPN()\n                }\n            } catch {\n                self.showTextHUD(\"\\(\"Fail to delete item\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n            }\n        }\n    }\n\n    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {\n        return .delete\n    }\n    \n    func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {\n        let proxy = self.proxies[indexPath.row]\n        let vc = ProxyConfigurationViewController(upstreamProxy: proxy)\n        self.navigationController?.pushViewController(vc, animated: true)\n    }\n\n    // MARK: - TextRow\n\n    override func textInputDidEndEditing<T>(_ textInput: UITextInput, cell: Cell<T>) {\n        guard let textField = textInput as? UITextField else {\n            return\n        }\n        guard let dnsString = textField.text, cell.row.tag == kFormDNS else {\n            return\n        }\n        presenter.updateDNS(dnsString)\n        textField.text = presenter.group.dns\n    }\n\n    // MARK: - View Setup\n\n    fileprivate let connectButtonHeight: CGFloat = 48\n\n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = Color.Background\n    }\n\n    lazy var titleButton: UIButton = {\n        let b = UIButton(type: .custom)\n        b.setTitleColor(UIColor.black, for: UIControlState())\n        b.addTarget(self, action: #selector(HomeVC.handleTitleButtonPressed), for: .touchUpInside)\n        if let titleLabel = b.titleLabel {\n            titleLabel.font = UIFont.boldSystemFont(ofSize: titleLabel.font.pointSize)\n        }\n        return b\n    }()\n\n    var timer: Timer?\n    \n    func startTimer() {\n        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(onTime), userInfo: nil, repeats: true)\n        timer?.fire()\n    }\n    \n    func stopTimer() {\n        timer?.invalidate()\n        timer = nil\n    }\n    \n    func onTime() {\n        updateConnectButton()\n    }\n}\n\nextension VPNStatus {\n    \n    func onOrConnectiong() -> Bool {\n        switch self {\n        case .on, .connecting:\n            return true\n        case .off, .disconnecting:\n            return false\n        }\n    }\n    \n    func hintDescription() -> String {\n        switch self {\n        case .on:\n            if let time = Settings.shared().startTime {\n                let flags = NSCalendar.Unit(rawValue: UInt.max)\n                let difference = (Calendar.current as NSCalendar).components(flags, from: time, to: Date(), options: NSCalendar.Options.matchFirst)\n                let f = DateComponentsFormatter()\n                f.unitsStyle = .abbreviated\n                return  (DataInitializer.selectedProxy ?? \"Connected\".localized()) + \" - \" + f.string(from: difference)!\n            }\n            return (DataInitializer.selectedProxy) ?? \"Connected\".localized()\n        case .disconnecting:\n            return \"Disconnecting...\".localized()\n        case .off:\n            return \"Off\".localized()\n        case .connecting:\n            return \"Connecting...\".localized()\n        }\n    }\n}\n\n"
  },
  {
    "path": "Potatso/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>Mume</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleURLTypes</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>mume</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>mume</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>ss</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>ss</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>shadowsocks</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>shadowsocks</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>ssr</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>ssr</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>shadowsocksr</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>shadowsocksr</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>socks</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>socks</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>socks5</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>socks5</string>\n\t\t\t</array>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>CFBundleTypeRole</key>\n\t\t\t<string>Editor</string>\n\t\t\t<key>CFBundleURLName</key>\n\t\t\t<string>mss</string>\n\t\t\t<key>CFBundleURLSchemes</key>\n\t\t\t<array>\n\t\t\t\t<string>mss</string>\n\t\t\t</array>\n\t\t</dict>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>Fabric</key>\n\t<dict>\n\t\t<key>APIKey</key>\n\t\t<string>a6ab10f79e4b9aeb88d8e730703f344db4749138</string>\n\t\t<key>Kits</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>KitInfo</key>\n\t\t\t\t<dict/>\n\t\t\t\t<key>KitName</key>\n\t\t\t\t<string>Answers</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>KitInfo</key>\n\t\t\t\t<dict/>\n\t\t\t\t<key>KitName</key>\n\t\t\t\t<string>Crashlytics</string>\n\t\t\t</dict>\n\t\t</array>\n\t</dict>\n\t<key>ITSAppUsesNonExemptEncryption</key>\n\t<false/>\n\t<key>LSApplicationQueriesSchemes</key>\n\t<array>\n\t\t<string>tg</string>\n\t</array>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSCalendarsUsageDescription</key>\n\t<string>Access to your Calendars😘</string>\n\t<key>NSCameraUsageDescription</key>\n\t<string>Access to your camera to scan QR code😘</string>\n\t<key>NSHealthShareUsageDescription</key>\n\t<string>Access to your Health😘</string>\n\t<key>NSHealthUpdateUsageDescription</key>\n\t<string>Access to your Health😘</string>\n\t<key>NSMicrophoneUsageDescription</key>\n\t<string>We need to hear your voice😘</string>\n\t<key>NSPhotoLibraryUsageDescription</key>\n\t<string>Access to your photo library to select QR code😘\n    </string>\n\t<key>UIBackgroundModes</key>\n\t<array>\n\t\t<string>remote-notification</string>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UIStatusBarHidden</key>\n\t<false/>\n\t<key>UIStatusBarStyle</key>\n\t<string>UIStatusBarStyleDefault</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Potatso/LogDetailViewController.swift",
    "content": "//\n//  LogDetailViewController.swift\n//  Potatso\n//\n//  Created by LEI on 4/21/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoLibrary\n\nclass LogDetailViewController: UIViewController {\n    \n    var source: DispatchSource?\n    var fd: Int32 = 0\n    var data = NSMutableData()\n    var logs = NSMutableArray()\n    var logPath = \"\"\n    \n    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n    }\n    \n    init(path: String) {\n        self.logPath = path\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"Logs\".localized()\n        showLog()\n    }\n    \n    deinit {\n        if let source = source {\n            source.cancel()\n        }\n    }\n    \n    func showLog() {\n        guard self.logPath != \"\" else {\n            emptyView.isHidden = false\n            return\n        }\n        fd = Darwin.open(self.logPath, O_RDONLY)\n        guard fd > 0 else {\n            return\n        }\n        let queue = DispatchQueue.global(qos: .background)\n        source = DispatchSource.makeReadSource(fileDescriptor: fd, queue: queue) /*Migrator FIXME: Use DispatchSourceRead to avoid the cast*/ as! DispatchSource\n        guard let source = source else {\n            return\n        }\n        source.setEventHandler{ [weak self] in\n            self?.updateUI()\n        }\n        source.setCancelHandler {\n            let fd = (source as DispatchSourceProtocol).handle\n            Darwin.close(Int32(fd));\n        }\n        source.resume();\n    }\n    \n    func updateUI() {\n        guard let source = source else {\n            return\n        }\n        let pending = (source as DispatchSourceProtocol).data\n        let size = Int(min(pending, 65535))\n        let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: size)\n        defer {\n            buffer.deallocate(capacity: size)\n        }\n        let readSize = Darwin.read(fd, buffer, size)\n        data.append(buffer, length: readSize)\n        if let content = String(data: data as Data, encoding: String.Encoding.utf8) {\n            logs.add(content)\n            if logs.count > 16 {\n                logs.removeObject(at: 0)\n            }\n            let slog = self.logs.componentsJoined(by: \"\")\n            DispatchQueue.main.async(execute: {\n                self.logView.text = slog\n            })\n            data = NSMutableData()\n        }\n    }\n    \n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = Color.Background\n        view.addSubview(logView)\n        view.addSubview(emptyView)\n        constrain(logView, emptyView, view) { logView, emptyView, view in\n            logView.edges == view.edges\n            emptyView.edges == view.edges\n        }\n    }\n    \n    lazy var logView: UITextView = {\n        let v = UITextView()\n        v.isEditable = false\n        v.backgroundColor = Color.Background\n        return v\n    }()\n    \n    lazy var emptyView: BaseEmptyView = {\n        let v = BaseEmptyView()\n        v.title = \"Logging is disabled\".localized()\n        v.isHidden = true\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/More/SettingsViewController.swift",
    "content": "//\n//  MoreViewController.swift\n//  Potatso\n//\n//  Created by LEI on 1/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Eureka\nimport ICSMainFramework\nimport MessageUI\nimport SafariServices\nimport PotatsoLibrary\n\nenum FeedBackType: String, CustomStringConvertible {\n    case Email = \"Email\"\n    case Forum = \"Forum\"\n    case None = \"\"\n    \n    var description: String {\n        return rawValue.localized()\n    }\n}\n\nclass SettingsViewController: FormViewController, MFMailComposeViewControllerDelegate, SFSafariViewControllerDelegate {\n    \n    // MARK: - View Life Cycle\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"More\".localized()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        generateForm()\n    }\n\n    func generateForm() {\n        form.delegate = nil\n        form.removeAll()\n        form +++ generateManualSection()\n        form +++ generateSyncSection()\n        form +++ generateRateSection()\n        form +++ generateAboutSection()\n        form.delegate = self\n        tableView?.reloadData()\n    }\n\n    func generateManualSection() -> Section {\n        let section = Section()\n        section\n            <<< ActionRow {\n                $0.title = \"User Manual\".localized()\n            }.onCellSelection({ [unowned self] (cell, row) in\n                self.showUserManual()\n            })\n            /*\n            <<< ActionRow {\n                $0.title = \"Feedback\".localized()\n            }.onCellSelection({ (cell, row) in\n                FeedbackManager.shared.showFeedback()\n            })\n            */\n        return section\n    }\n\n    func generateSyncSection() -> Section {\n        let section = Section()\n        section\n            <<< ActionRow() {\n                $0.title = \"Import From URL\".localized()\n            }.onCellSelection({ [unowned self] (cell, row) -> () in\n                let importer = Importer(vc: self)\n                importer.importConfigFromUrl()\n            })\n            <<< ActionRow() {\n                $0.title = \"Import From QRCode\".localized()\n            }.onCellSelection({ [unowned self] (cell, row) -> () in\n                let importer = Importer(vc: self)\n                importer.importConfigFromQRCode()\n            })\n        return section\n    }\n\n    func generateRateSection() -> Section {\n        let section = Section()\n        section\n            <<< ActionRow() {\n                $0.title = \"Feedback\".localized()\n            }.onCellSelection({ (cell, row) -> () in\n                let alert = UIAlertController(title: \"Feedback\".localized(), message: nil, preferredStyle: .actionSheet)\n                alert.addAction(UIAlertAction(title: \"Rate on App Store\".localized(), style: .default, handler: { (action) in\n                    Appirater.rateApp()\n                }))\n                alert.addAction(UIAlertAction(title: \"Send feedback\".localized(), style: .default, handler: { (action) in\n                    if MFMailComposeViewController.canSendMail() {\n                        let composer = MFMailComposeViewController()\n                        composer.mailComposeDelegate = self\n                        composer.setToRecipients([\"mume@mumevpn.com\"])\n                        composer.setSubject(\"Feedback for \" + AppEnv.appName + AppEnv.fullVersion)\n                        \n                        let currentDevice = UIDevice.current\n                        var body = [String]()\n                        body.append(\"\")\n                        body.append(\"-\")\n                        body.append(\"System info: \")\n                        body.append(currentDevice.systemName)\n                        body.append(currentDevice.systemVersion)\n                        body.append(currentDevice.model)\n                        composer.setMessageBody(body.joined(separator: \"\\r\\n\"), isHTML: false)\n                        self.present(composer, animated: true, completion: nil)\n                    } else if let url = URL(string: \"mailto:mume@mumevpn.com\") {\n                        UIApplication.shared.openURL(url)\n                    } else if let url = URL(string: \"https://mumevpn.com/\") {\n                        UIApplication.shared.openURL(url)\n                    }\n                }))\n                alert.addAction(UIAlertAction(title: \"CANCEL\".localized(), style: .cancel, handler: nil))\n                if let presenter = alert.popoverPresentationController {\n                    presenter.sourceView = cell\n                    presenter.sourceRect = cell.bounds\n                }\n                self.present(alert, animated: true, completion: nil)\n            })\n            <<< ActionRow() {\n                $0.title = \"Share with friends\".localized()\n            }.onCellSelection({ [unowned self] (cell, row) -> () in\n                var shareItems: [AnyObject] = [self]\n                shareItems.append(\"Mume: https://itunes.apple.com/app/id1144787928\" as AnyObject)\n                shareItems.append(UIImage(named: \"AppIcon60x60\")!)\n                let shareVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)\n                if let presenter = shareVC.popoverPresentationController {\n                    presenter.sourceView = cell\n                    presenter.sourceRect = cell.bounds\n                }\n                self.present(shareVC, animated: true, completion: nil)\n            })\n        return section\n    }\n    \n    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {\n        self.dismiss(animated: true, completion: nil)\n    }\n    \n    func generateAboutSection() -> Section {\n        let section = Section()\n        section\n            <<< LabelRow() {\n                $0.title = \"Logs\".localized()\n                }.cellSetup({ (cell, row) -> () in\n                    cell.accessoryType = .disclosureIndicator\n                    cell.selectionStyle = .default\n                }).onCellSelection({ [unowned self](cell, row) -> () in\n                    cell.setSelected(false, animated: true)\n                    self.navigationController?.pushViewController(DashboardVC(), animated: true)\n                    })\n            <<< ActionRow() {\n                $0.title = \"Follow on Twitter\".localized()\n                $0.value = \"@mumevpn\"\n            }.onCellSelection({ [unowned self] (cell, row) -> () in\n                self.followTwitter()\n            })\n            /*\n\n            <<< ActionRow() {\n                $0.title = \"Follow on Weibo\".localized()\n                $0.value = \"@Potatso\"\n            }.onCellSelection({ [unowned self] (cell, row) -> () in\n                self.followWeibo()\n             })\n             */\n        \n        var telegram = false\n        if let tgUrl = URL(string: \"tg://resolve?domain=mumevpn\"),\n            UIApplication.shared.canOpenURL(tgUrl) {\n            section <<< ActionRow() {\n                $0.title = \"Telegram Group\".localized()\n                $0.value = \"telegram.me/mumevpn\"\n                }.onCellSelection({ (_, _) in\n                    UIApplication.shared.openURL(tgUrl)\n                })\n            telegram = true\n        }\n        if (Locale.preferredLanguages[0].lowercased().hasPrefix(\"zh\") || telegram == false),\n            let qq = DataInitializer.serverConfigurations[\"qq\"] as? String {\n            section <<< ActionRow() {\n                $0.title = \"QQ群\".localized()\n                $0.value = qq\n                }.onCellSelection({ [unowned self] (cell, row) -> () in\n                    let pasteBoard = UIPasteboard.general\n                    pasteBoard.string = qq\n                    self.showTextHUD(\"已复制QQ群号\", dismissAfterDelay: 1)\n                })\n        }\n        section <<< LabelRow() {\n                $0.title = \"Version\".localized()\n                $0.value = AppEnv.fullVersion\n            }\n        return section\n    }\n\n    func showUserManual() {\n        let url = \"https://mumevpn.com/ios/manual.php\"\n\n        let lang = Locale.preferredLanguages[0]\n        let versionCode = (Bundle.main.infoDictionary?[\"CFBundleShortVersionString\"] as? String) ?? \"\"\n        NSLog(\"showUserManual ===> lang: \\(lang), version: \\(versionCode)\")\n        let network = (DataInitializer.reachabilityManager?.networkReachabilityStatus.description()) ?? \"\"\n        let vi = (UIDevice.current.identifierForVendor?.uuidString) ?? \"\"\n        guard let manurl = URL(string: url + \"?lang=\\(lang)&identifierForVendor=\\(vi)&api=2&network=\\(network)&appstore=\\(AppEnv.isAppStore)\") else {\n            return\n        }\n        let vc = BaseSafariViewController(url: manurl, entersReaderIfAvailable: false)\n        vc.delegate = self\n        present(vc, animated: true, completion: nil)\n    }\n\n    func followTwitter() {\n        UIApplication.shared.openURL(URL(string: \"https://twitter.com/intent/user?screen_name=mumevpn\")!)\n    }\n\n    @objc func safariViewControllerDidFinish(_ controller: SFSafariViewController) {\n        controller.dismiss(animated: true, completion: nil)\n    }\n    \n// UIActivityItemSource\n    \n    @objc func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> Any? {\n        if activityType.contains(\"com.tencent\") {\n            return \"Mume iOS: https://liruqi.github.io/Mume-iOS/\"\n        }\n        return \"Mume: https://itunes.apple.com/app/id1144787928\"\n    }\n    \n    func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {\n        return \"Mume\"\n    }\n    \n    func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: String!, suggestedSize size: CGSize) -> UIImage! {\n        return UIImage(named: \"AppIcon60x60\")\n    }\n}\n"
  },
  {
    "path": "Potatso/Mume.swift",
    "content": "//\n//  Mume.swift\n//  Potatso\n//\n//  Created by Ruqi on 7/8/2017.\n//  Copyright © 2017 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nclass Mume {\n    static let xAppSharedGroupIdentifier = \"group.info.liruqi.potatso\"\n    \n    static func sharedUserDefaults() -> UserDefaults? {\n        return UserDefaults(suiteName: xAppSharedGroupIdentifier)\n    }\n}\n"
  },
  {
    "path": "Potatso/NotificationHandler.swift",
    "content": "//\n//  NotificationHandler.swift\n//  Potatso\n//\n//  Created by LEI on 7/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport ICSMainFramework\nimport CloudKit\n\nclass NotificationHandler: NSObject, AppLifeCycleProtocol {\n\n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {\n        configPush()\n        return true\n    }\n\n    func configPush() {\n        let settings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes: [.Badge, .Alert, .Sound], categories: nil)\n        UIApplication.sharedApplication().registerUserNotificationSettings(settings)\n        UIApplication.sharedApplication().registerForRemoteNotifications()\n    }\n\n    func applicationDidBecomeActive(application: UIApplication) {\n        UIApplication.sharedApplication().applicationIconBadgeNumber = 0\n    }\n\n    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {\n        NSLog(\"didRegisterForRemoteNotificationsWithDeviceToken: \\(deviceToken.hexString())\")\n    }\n\n    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {\n        completionHandler(.NoData)\n    }\n\n}\n\nextension NSData {\n    func hexString() -> String {\n        // \"Array\" of all bytes:\n        let bytes = UnsafeBufferPointer<UInt8>(start: UnsafePointer(self.bytes), count:self.length)\n        // Array of hex strings, one for each byte:\n        let hexBytes = bytes.map { String(format: \"%02hhx\", $0) }\n        // Concatenate all hex strings:\n        return hexBytes.joinWithSeparator(\"\")\n    }\n}\n"
  },
  {
    "path": "Potatso/PaddingLabel.swift",
    "content": "//\n//  PaddingLabel.swift\n//  Potatso\n//\n//  Created by LEI on 7/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nclass PaddingLabel: UILabel {\n\n    var padding: UIEdgeInsets = UIEdgeInsets.zero\n\n    override func drawText(in rect: CGRect) {\n        let newRect = UIEdgeInsetsInsetRect(rect, padding)\n        super.drawText(in: newRect)\n    }\n\n    override var intrinsicContentSize : CGSize {\n        var s = super.intrinsicContentSize\n        s.height += padding.top + padding.bottom\n        s.width += padding.left + padding.right\n        return s\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Potatso-Bridge-Header.h",
    "content": "//\n//  Potatso-Bridge-Header.h\n//  Potatso\n//\n//  Created by LEI on 12/30/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#ifndef Potatso_Bridge_Header_h\n#define Potatso_Bridge_Header_h\n\n#import <asl.h>\n#import \"QRCodeScannerVC.h\"\n#import \"Appirater.h\"\n@import PotatsoLibrary;\n@import PotatsoModel;\n@import PotatsoBase;\n@import Crashlytics;\n\n#endif /* Potatso_Bridge_Header_h */\n"
  },
  {
    "path": "Potatso/Potatso.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>aps-environment</key>\n\t<string>development</string>\n\t<key>com.apple.developer.networking.networkextension</key>\n\t<array>\n\t\t<string>packet-tunnel-provider</string>\n\t\t<string>app-proxy-provider</string>\n\t\t<string>content-filter-provider</string>\n\t</array>\n\t<key>com.apple.developer.networking.vpn.api</key>\n\t<array>\n\t\t<string>allow-vpn</string>\n\t</array>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.info.liruqi.potatso</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Potatso/Potatso.xcdatamodeld/.xccurrentversion",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  },
  {
    "path": "Potatso/Potatso.xcdatamodeld/Potatso 2.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"10171\" systemVersion=\"15D21\" minimumToolsVersion=\"Xcode 7.0\">\n    <entity name=\"ConfigurationGroup\" representedClassName=\"ConfigurationGroup\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"defaultToProxy\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"dns\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"editable\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"proxies\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Proxy\" inverseName=\"groups\" inverseEntity=\"Proxy\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"RuleSet\" inverseName=\"groups\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Proxy\" representedClassName=\"Proxy\" syncable=\"YES\">\n        <attribute name=\"authscheme\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"host\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" indexed=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"password\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"port\" attributeType=\"Integer 32\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"type\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"user\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"proxies\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Rule\" representedClassName=\"Rule\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"script\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"values\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"RuleSet\" inverseName=\"rules\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"RuleSet\" representedClassName=\"RuleSet\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"editable\" optional=\"YES\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"ruleSets\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n        <relationship name=\"rules\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Rule\" inverseName=\"ruleSets\" inverseEntity=\"Rule\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"ConfigurationGroup\" positionX=\"117\" positionY=\"-54\" width=\"128\" height=\"150\"/>\n        <element name=\"Proxy\" positionX=\"-54\" positionY=\"-9\" width=\"128\" height=\"180\"/>\n        <element name=\"Rule\" positionX=\"187\" positionY=\"287\" width=\"128\" height=\"105\"/>\n        <element name=\"RuleSet\" positionX=\"349\" positionY=\"62\" width=\"128\" height=\"120\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Potatso/Potatso.xcdatamodeld/Potatso 3.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"10171\" systemVersion=\"15D21\" minimumToolsVersion=\"Xcode 7.0\">\n    <entity name=\"ConfigurationGroup\" representedClassName=\"ConfigurationGroup\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"defaultToProxy\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"dns\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"editable\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"proxies\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Proxy\" inverseName=\"groups\" inverseEntity=\"Proxy\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"RuleSet\" inverseName=\"groups\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Proxy\" representedClassName=\"Proxy\" syncable=\"YES\">\n        <attribute name=\"authscheme\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"host\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" indexed=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"password\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"port\" attributeType=\"Integer 32\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"type\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"user\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"proxies\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Rule\" representedClassName=\"Rule\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"script\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"values\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Cascade\" destinationEntity=\"RuleSet\" inverseName=\"rules\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"RuleSet\" representedClassName=\"RuleSet\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"editable\" optional=\"YES\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"ruleSets\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n        <relationship name=\"rules\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Rule\" inverseName=\"ruleSets\" inverseEntity=\"Rule\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"ConfigurationGroup\" positionX=\"117\" positionY=\"-54\" width=\"128\" height=\"150\"/>\n        <element name=\"Proxy\" positionX=\"-54\" positionY=\"-9\" width=\"128\" height=\"180\"/>\n        <element name=\"Rule\" positionX=\"187\" positionY=\"287\" width=\"128\" height=\"105\"/>\n        <element name=\"RuleSet\" positionX=\"349\" positionY=\"62\" width=\"128\" height=\"120\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Potatso/Potatso.xcdatamodeld/Potatso.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"9525\" systemVersion=\"15D21\" minimumToolsVersion=\"Xcode 7.0\">\n    <entity name=\"ConfigurationGroup\" representedClassName=\"ConfigurationGroup\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"defaultToProxy\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"dns\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"editable\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"proxies\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Proxy\" inverseName=\"groups\" inverseEntity=\"Proxy\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"RuleSet\" inverseName=\"groups\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Proxy\" representedClassName=\"Proxy\" syncable=\"YES\">\n        <attribute name=\"authscheme\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"host\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" indexed=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"password\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"port\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n        <attribute name=\"type\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"user\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"proxies\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"Rule\" representedClassName=\"Rule\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"script\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"values\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"ruleSets\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"RuleSet\" inverseName=\"rules\" inverseEntity=\"RuleSet\" syncable=\"YES\"/>\n    </entity>\n    <entity name=\"RuleSet\" representedClassName=\"RuleSet\" syncable=\"YES\">\n        <attribute name=\"createAt\" attributeType=\"Date\" syncable=\"YES\"/>\n        <attribute name=\"editable\" optional=\"YES\" attributeType=\"Boolean\" defaultValueString=\"YES\" syncable=\"YES\"/>\n        <attribute name=\"name\" attributeType=\"String\" syncable=\"YES\"/>\n        <relationship name=\"groups\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"ConfigurationGroup\" inverseName=\"ruleSets\" inverseEntity=\"ConfigurationGroup\" syncable=\"YES\"/>\n        <relationship name=\"rules\" toMany=\"YES\" deletionRule=\"Nullify\" destinationEntity=\"Rule\" inverseName=\"ruleSets\" inverseEntity=\"Rule\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"ConfigurationGroup\" positionX=\"117\" positionY=\"-54\" width=\"128\" height=\"150\"/>\n        <element name=\"Proxy\" positionX=\"-54\" positionY=\"-9\" width=\"128\" height=\"178\"/>\n        <element name=\"Rule\" positionX=\"187\" positionY=\"287\" width=\"128\" height=\"103\"/>\n        <element name=\"RuleSet\" positionX=\"349\" positionY=\"62\" width=\"128\" height=\"120\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Potatso/Proxy.xcdatamodeld/Proxy.xcdatamodel/contents",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<model userDefinedModelVersionIdentifier=\"\" type=\"com.apple.IDECoreDataModeler.DataModel\" documentVersion=\"1.0\" lastSavedToolsVersion=\"9525\" systemVersion=\"15D21\" minimumToolsVersion=\"Xcode 7.0\">\n    <entity name=\"Proxy\" syncable=\"YES\">\n        <attribute name=\"authscheme\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"host\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"name\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"password\" optional=\"YES\" attributeType=\"String\" syncable=\"YES\"/>\n        <attribute name=\"port\" optional=\"YES\" attributeType=\"Integer 16\" defaultValueString=\"0\" syncable=\"YES\"/>\n    </entity>\n    <elements>\n        <element name=\"Proxy\" positionX=\"-63\" positionY=\"-18\" width=\"128\" height=\"120\"/>\n    </elements>\n</model>"
  },
  {
    "path": "Potatso/ProxyListViewController.swift",
    "content": "//\n//  ProxyListViewController.swift\n//  Potatso\n//\n//  Created by LEI on 5/31/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport Cartography\nimport Eureka\n\nprivate let rowHeight: CGFloat = 107\nprivate let kProxyCellIdentifier = \"proxy\"\n\nclass ProxyListViewController: FormViewController {\n\n    var proxies: [Proxy?] = []\n    var storeItems : [String] = []\n    let chooseCallback: ((Proxy?) -> Void)?\n\n    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        self.chooseCallback = nil\n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n    }\n\n    init(chooseCallback: ((Proxy?) -> Void)? = nil) {\n        self.chooseCallback = chooseCallback\n        super.init(style: .plain)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        self.automaticallyAdjustsScrollViewInsets = false\n        reloadData()\n        navigationItem.title = \"Proxy\".localized()\n        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))\n        if !SKPaymentQueue.canMakePayments() {\n            print(\"SKPaymentQueue.canMakePayments: false\")\n            return\n        }\n        guard let store = DataInitializer.store else {\n            print(\"No store\")\n            return\n        }\n        if store.products.count > 0 {\n            navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .organize, target: self, action: #selector(onStore))\n        }\n    }\n\n    func add() {\n        let vc = ProxyConfigurationViewController()\n        navigationController?.pushViewController(vc, animated: true)\n    }\n    \n    func onStore() {\n        guard let store = DataInitializer.store else {\n            print(\"No store\")\n            return\n        }\n        let vc = IAPStoreVC(products: store.products)\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n    func reloadData() {\n        proxies = DBUtils.all(Proxy.self, sorted: \"createAt\").map({ $0 })\n\n        form.delegate = nil\n        form.removeAll()\n        if proxies.count > 0 {\n        let section = DataInitializer.cloudProxies.count > 0 ? Section(\"Local\".localized()) : Section()\n        for proxy in proxies {\n            section\n                <<< ProxyRow () {\n                    $0.value = proxy\n                }.cellSetup({ (cell, row) -> () in\n                    cell.selectionStyle = .none\n                    cell.accessoryType = .disclosureIndicator\n                    cell.imageView?.image = nil\n                    cell.imageView?.isHidden = true\n                }).onCellSelection({ [unowned self] (cell, row) in\n                    cell.setSelected(false, animated: true)\n                    let proxy = row.value\n                    if let cb = self.chooseCallback {\n                        cb(proxy)\n                        self.close()\n                    }else {\n                        if proxy?.type != .none {\n                            self.showProxyConfiguration(proxy)\n                        }\n                    }\n                })\n        }\n        form +++ section\n        }\n        \n        if DataInitializer.cloudProxies.count > 0 {\n            let cloudSection = Section(\"Cloud\".localized())\n            for proxy in DataInitializer.cloudProxies {\n                cloudSection\n                    <<< ProxyRow () {\n                        $0.value = proxy\n                        }.cellSetup({ (cell, row) -> () in\n                            cell.selectionStyle = .none\n                            cell.accessoryType = .disclosureIndicator\n                            cell.imageView?.image = nil\n                            cell.imageView?.isHidden = true\n                        }).onCellSelection({ [weak self] (cell, row) in\n                            cell.setSelected(false, animated: true)\n                            if let cb = self?.chooseCallback {\n                                cb(proxy)\n                                self?.close()\n                            } else {\n                                if proxy.type != .none {\n                                    let vc = CloudProxyDetailViewController(cloudProxy: proxy)\n                                    self?.navigationController?.pushViewController(vc, animated: true)\n                                }\n                            }\n                            })\n            }\n            form +++ cloudSection\n        }\n        form.delegate = self\n        tableView?.reloadData()\n    }\n\n    func showProxyConfiguration(_ proxy: Proxy?) {\n        let vc = ProxyConfigurationViewController(upstreamProxy: proxy)\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        return true\n    }\n\n    override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {\n        if indexPath.section == 0 {\n            return .delete\n        }\n        return .delete\n    }\n\n    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        if editingStyle != .delete {\n            return\n        }\n        if indexPath.section == 0 {\n            guard indexPath.row < proxies.count, let item = (form[indexPath] as? ProxyRow)?.value else {\n                return\n            }\n            do {\n                try DBUtils.hardDelete(item.uuid, type: Proxy.self)\n                proxies.remove(at: indexPath.row)\n                form[indexPath].hidden = true\n                form[indexPath].evaluateHidden()\n            }catch {\n                self.showTextHUD(\"\\(\"Fail to delete item\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n            }\n            return\n        }\n        \n        guard indexPath.row < DataInitializer.cloudProxies.count else {\n            return\n        }\n        let item = DataInitializer.cloudProxies[indexPath.row]\n        DataInitializer.cloudProxies.remove(at: indexPath.row)\n        form[indexPath].hidden = true\n        form[indexPath].evaluateHidden()\n        \n        if let xAppSharedDefaults = Mume.sharedUserDefaults() {\n            xAppSharedDefaults.set(\"delete\", forKey: item.description)\n            xAppSharedDefaults.synchronize()\n        }\n    }\n\n    override func viewDidLayoutSubviews() {\n        super.viewDidLayoutSubviews()\n        tableView?.tableFooterView = UIView()\n    }\n\n}\n"
  },
  {
    "path": "Potatso/ProxyRow.swift",
    "content": "//\n//  ProxyRow.swift\n//  Potatso\n//\n//  Created by LEI on 6/1/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport Eureka\nimport Cartography\n\nfinal class ProxyRow: Row<ProxyRowCell>, RowType {\n\n    required init(tag: String?) {\n        super.init(tag: tag)\n        self.cellStyle = UITableViewCellStyle.subtitle\n        displayValueFor = nil\n    }\n}\n\n\nclass ProxyRowCell: Cell<Proxy>, CellType {\n\n    required init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func setup() {\n        super.setup()\n//        preservesSuperviewLayoutMargins = false\n//        layoutMargins = UIEdgeInsetsZero\n//        separatorInset = UIEdgeInsetsZero\n    }\n\n    override func update() {\n        super.update()\n        if let proxy = row.value {\n            self.textLabel?.text = proxy.description\n            self.detailTextLabel?.text = proxy.subTitle()\n            self.imageView?.tintColor = UIColor.red\n            if isSelected {\n                self.imageView?.image = UIImage(named: \"Selected\")?.withRenderingMode(.alwaysTemplate)\n            } else {\n                self.imageView?.image = nil\n            }\n        } else {\n            self.textLabel?.text = \"None\".localized()\n            self.imageView?.isHidden = true\n        }\n        if row.isDisabled {\n            self.textLabel?.textColor = \"5F5F5F\".color\n        }else {\n            self.textLabel?.textColor = \"000\".color\n        }\n    }\n}\n"
  },
  {
    "path": "Potatso/RecentRequestsCell.swift",
    "content": "//\n//  RecentRequestsCell.swift\n//  Potatso\n//\n//  Created by LEI on 4/17/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoModel\n\nextension RequestRouting {\n    \n    var image: UIImage? {\n        switch self {\n        case .proxy:\n            return \"Proxy\".image\n        case .reject:\n            return \"Reject\".image\n        case .direct, .none:\n            return \"Direct\".image\n        }\n    }\n    \n}\n\nclass RecentRequestsCell: UITableViewCell {\n    \n    static let dateformatter: DateFormatter = {\n        let f = DateFormatter()\n        f.dateFormat = \"hh:mm:ss\"\n        return f\n    }()\n    \n    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        contentView.addSubview(methodLabel)\n        contentView.addSubview(urlLabel)\n        contentView.addSubview(timeLabel)\n        contentView.addSubview(actionImageView)\n        contentView.addSubview(httpVersionLabel)\n        contentView.addSubview(statusLabel)\n        setupLayout()\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    func config(_ request: Request) {\n        methodLabel.text = request.method.description\n        urlLabel.text = request.url\n        urlLabel.numberOfLines = 2\n        if let e = request.events.first {\n            timeLabel.text = RecentRequestsCell.dateformatter.string(from: Date(timeIntervalSince1970: e.timestamp))\n        }else {\n            timeLabel.text = nil\n        }\n        actionImageView.image = request.routing.image\n        if let version = request.version {\n            httpVersionLabel.text = version\n            httpVersionLabel.isHidden = false\n        }else {\n            httpVersionLabel.isHidden = true\n        }\n        if let code = request.responseCode {\n            statusLabel.text = \"\\(code.rawValue)\"\n            statusLabel.textColor = code.color\n            statusLabel.layer.borderColor = code.color.cgColor\n            statusLabel.isHidden = false\n        }else {\n            statusLabel.isHidden = true\n        }\n    }\n    \n    func setupLayout() {\n        timeLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)\n        timeLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)\n        constrain(contentView, self) { contentView, superview in\n            contentView.edges == superview.edges\n        }\n        constrain(methodLabel, urlLabel, timeLabel, contentView) { methodLabel, urlLabel, timeLabel, contentView in\n            methodLabel.width == 45\n            methodLabel.leading == contentView.leading + 12\n            methodLabel.top == contentView.top + 15\n            \n            timeLabel.trailing == contentView.trailing - 12\n            timeLabel.centerY == methodLabel.centerY\n            \n            urlLabel.top == methodLabel.top - 2\n            urlLabel.leading == methodLabel.trailing + 10\n            urlLabel.trailing == timeLabel.leading - 10\n            \n            contentView.height >= 65\n        }\n        constrain(actionImageView, methodLabel) { actionImageView, methodLabel in\n            actionImageView.centerX == methodLabel.centerX\n            actionImageView.width == 15\n            actionImageView.height == 15\n            actionImageView.top == methodLabel.bottom + 12\n        }\n        constrain(httpVersionLabel, urlLabel, contentView) { httpVersionLabel, urlLabel, contentView in\n            httpVersionLabel.leading == urlLabel.leading\n            httpVersionLabel.top == urlLabel.bottom + 12\n            httpVersionLabel.bottom == contentView.bottom - 16\n        }\n        constrain(httpVersionLabel, statusLabel) { httpVersionLabel, statusLabel in\n            align(centerY: httpVersionLabel, statusLabel)\n            statusLabel.leading == httpVersionLabel.trailing + 8\n        }\n    }\n    \n    lazy var methodLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"3498DB\".color\n        v.font = UIFont.systemFont(ofSize: 12)\n        v.adjustsFontSizeToFitWidth = true\n        v.minimumScaleFactor = 0.5\n        v.textAlignment = .center\n        return v\n    }()\n    \n    lazy var urlLabel: UILabel = {\n        let v = UILabel(frame: CGRect.zero)\n        v.textColor = \"404040\".color\n        v.font = UIFont.systemFont(ofSize: 14)\n        v.numberOfLines = 2\n        v.lineBreakMode = .byTruncatingTail\n        return v\n    }()\n    \n    lazy var timeLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"808080\".color\n        v.font = UIFont.systemFont(ofSize: 10)\n        return v\n    }()\n    \n    lazy var httpVersionLabel: PaddingLabel = {\n        let v = PaddingLabel()\n        v.textColor = \"34495E\".color\n        v.font = UIFont.systemFont(ofSize: 10)\n        v.layer.cornerRadius = 2\n        v.layer.borderWidth = 0.5\n        v.layer.borderColor = \"34495E\".color.cgColor\n        v.padding = UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)\n        return v\n    }()\n    \n    lazy var statusLabel: PaddingLabel = {\n        let v = PaddingLabel()\n        v.textColor = \"34495E\".color\n        v.font = UIFont.systemFont(ofSize: 10)\n        v.layer.cornerRadius = 2\n        v.layer.borderWidth = 0.5\n        v.layer.borderColor = \"34495E\".color.cgColor\n        v.padding = UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)\n        return v\n    }()\n    \n    lazy var actionImageView: UIImageView = {\n        let v = UIImageView()\n        v.contentMode = .scaleAspectFit\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/RecentRequestsVC.swift",
    "content": "//\n//  RecentRequestsViewController.swift\n//  Potatso\n//\n//  Created by LEI on 4/19/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoModel\nimport RealmSwift\nimport PotatsoLibrary\nimport PotatsoBase\nimport SVPullToRefresh\n\nprivate let kRecentRequestCellIdentifier = \"recentRequests\"\nprivate let kRecentRequestCachedIdentifier = \"requestsCached\"\n\nclass RecentRequestsVC: UIViewController, UITableViewDataSource, UITableViewDelegate {\n    \n    var requests: [Request] = []\n    let wormhole = Manager.shared.wormhole\n    var timer: Timer?\n    var appear = false\n    var stopped = false\n    var showingCache = false\n    \n    deinit {\n        tableView.showsPullToRefresh = false\n        wormhole.stopListeningForMessage(withIdentifier: \"tunnelConnectionRecords\")\n        NotificationCenter.default.removeObserver(self)\n    }\n    \n    override func viewDidLoad() {\n        self.tableView.dataSource = self\n        self.tableView.delegate = self\n\n        super.viewDidLoad()\n        navigationItem.title = \"Recent Requests\".localized()\n        NotificationCenter.default.addObserver(self, selector: #selector(onVPNStatusChanged), name: NSNotification.Name(rawValue: kProxyServiceVPNStatusNotification), object: nil)\n        wormhole.listenForMessage(withIdentifier: \"tunnelConnectionRecords\") { [unowned self](response) in\n            self.tableView.pullToRefreshView?.stopAnimating()\n            self.updateUI(response as? String)\n            Potatso.sharedUserDefaults().set(response as? String, forKey: kRecentRequestCachedIdentifier)\n            Potatso.sharedUserDefaults().synchronize()\n            return\n        }\n        self.updateUI(Potatso.sharedUserDefaults().string(forKey: kRecentRequestCachedIdentifier))\n        if Manager.shared.vpnStatus == .off {\n            showingCache = true\n        }\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        appear = true\n        onVPNStatusChanged()\n        tableView.addPullToRefresh( actionHandler: { [weak self] in\n            self?.refresh()\n            })\n        tableView.triggerPullToRefresh()\n    }\n    \n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        tableView.showsPullToRefresh = false\n    }\n    \n    func refresh() {\n        let on = [VPNStatus.on, VPNStatus.connecting].contains(Manager.shared.vpnStatus)\n        if on {\n            wormhole.passMessageObject(NSString(), identifier: \"getTunnelConnectionRecords\")\n        } else {\n            self.tableView.pullToRefreshView?.stopAnimating()\n            tableView.showsPullToRefresh = false;\n        }\n    }\n    \n    func updateUI(_ requestString: String?) {\n        if let responseStr = requestString, let jsonArray = responseStr.jsonArray() {\n            self.requests = jsonArray.reversed().filter({ ($0 as? [String : AnyObject]) != nil }).flatMap({ Request(dict: $0 as! [String : AnyObject]) })\n        }else {\n            self.requests = []\n        }\n        tableView.reloadData()\n    }\n    \n    func onVPNStatusChanged() {\n        let on = [VPNStatus.on, VPNStatus.connecting].contains(Manager.shared.vpnStatus)\n        hintLabel.isHidden = on\n        if on && showingCache {\n            updateUI(nil)\n        }\n        showingCache = !on\n    }\n    \n    // MARK: - TableView DataSource & Delegate\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        emptyView.isHidden = requests.count > 0\n        return requests.count\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: kRecentRequestCellIdentifier, for: indexPath) as! RecentRequestsCell\n        cell.config(requests[indexPath.row])\n        return cell\n    }\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        navigationController?.pushViewController(RequestDetailVC(request: requests[indexPath.row]), animated: true)\n    }\n    \n    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        return true\n    }\n\n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = Color.Background\n        view.addSubview(tableView)\n        view.addSubview(emptyView)\n        view.addSubview(hintLabel)\n        tableView.register(RecentRequestsCell.self, forCellReuseIdentifier: kRecentRequestCellIdentifier)\n        setupLayout()\n    }\n    \n    func setupLayout() {\n        constrain(tableView, view) { tableView, view in\n            tableView.edges == view.edges\n        }\n        constrain(hintLabel, emptyView, view) { hintLabel, emptyView, view in\n            hintLabel.leading == view.leading\n            hintLabel.trailing == view.trailing\n            hintLabel.bottom == view.bottom\n            hintLabel.height == 35\n            \n            emptyView.edges == view.edges\n        }\n    }\n    \n    var tableView: UITableView = {\n        let v = UITableView(frame: CGRect.zero, style: .plain)\n        v.tableFooterView = UIView()\n        v.tableHeaderView = UIView()\n        v.separatorStyle = .singleLine\n        v.estimatedRowHeight = 70\n        v.rowHeight = UITableViewAutomaticDimension\n        return v\n    }()\n    \n    lazy var emptyView: BaseEmptyView = {\n        let v = BaseEmptyView()\n        v.title = \"You should manually refresh to see the request log.\".localized()\n        return v\n    }()\n    \n    lazy var hintLabel: UILabel = {\n        let v = UILabel()\n        v.text = \"Mume is not connected\".localized()\n        v.textColor = UIColor.white\n        v.backgroundColor = \"E74C3C\".color\n        v.textAlignment = .center\n        v.font = UIFont.systemFont(ofSize: 14)\n        v.alpha = 0.8\n        v.isHidden = true\n        return v\n    }()\n    \n}\n"
  },
  {
    "path": "Potatso/RequestDetailVC.swift",
    "content": "//\n//  RequestListVC.swift\n//  Potatso\n//\n//  Created by LEI on 7/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nclass RequestDetailVC: SegmentPageVC {\n\n    let pageVCs: [UIViewController]\n    let request: Request\n\n    init(request: Request) {\n        self.request = request\n        self.pageVCs = [\n            RequestOverviewVC(request: request),\n        ]\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    override func pageViewControllersForSegmentPageVC() -> [UIViewController] {\n        return pageVCs\n    }\n\n    override func segmentsForSegmentPageVC() -> [String] {\n        return [\"Overview\"]\n    }\n\n}"
  },
  {
    "path": "Potatso/RequestModel.swift",
    "content": "//\n//  RequestModel.swift\n//  Potatso\n//\n//  Created by LEI on 4/20/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport RealmSwift\nimport PotatsoLibrary\nimport PotatsoBase\n\nenum HTTPMethod: String {\n    case GET = \"GET\"\n    case HEAD = \"HEAD\"\n    case CONDITIONAL_GET = \"CONDITIONAL\"\n    case CONNECT = \"CONNECT\"\n    case POST = \"POST\"\n    case PUT = \"PUT\"\n    case OPTIONS = \"OPTIONS\"\n    case DELETE = \"DELETE\"\n}\n\nextension HTTPMethod: CustomStringConvertible {\n    \n    var description: String {\n        switch self {\n        case .CONNECT:\n            return \"HTTPS\"\n        default:\n            return rawValue\n        }\n    }\n}\n\nenum HTTPResponseCode: Int {\n    case code_200 = 200\n    case code_201 = 201\n    case code_202 = 202\n    case code_203 = 203\n    case code_204 = 204\n    case code_205 = 205\n    case code_206 = 206\n    case code_301 = 301\n    case code_302 = 302\n    case code_303 = 303\n    case code_304 = 304\n    case code_305 = 305\n    case code_306 = 306\n    case code_307 = 307\n    case code_400 = 400\n    case code_401 = 401\n    case code_402 = 402\n    case code_403 = 403\n    case code_404 = 404\n    case code_405 = 405\n    case code_406 = 406\n    case code_407 = 407\n    case code_408 = 408\n    case code_409 = 409\n    case code_410 = 410\n    case code_411 = 411\n    case code_412 = 412\n    case code_413 = 413\n    case code_414 = 414\n    case code_415 = 415\n    case code_416 = 416\n    case code_417 = 417\n    case code_500 = 500\n    case code_501 = 501\n    case code_502 = 502\n    case code_503 = 503\n    case code_504 = 504\n    case code_505 = 505\n\n}\n\nextension HTTPResponseCode: CustomStringConvertible {\n    \n    var color: UIColor {\n        switch self.rawValue {\n        case 200..<300:\n            return \"1ABC9C\".color\n        case 300..<400:\n            return \"9B59B6\".color\n        case 400..<500:\n            return \"E74C3C\".color\n        case 500..<600:\n            return \"000000\".color\n        default:\n            return UIColor.black\n        }\n    }\n    \n    var description: String {\n        return \"\\(rawValue)\"\n    }\n}\n\nenum RequestEventType: Int {\n    case Init = 0\n    case dns\n    case remote\n    case open\n    case closed\n}\n\nenum RequestRouting: Int {\n    case none = 0\n    case direct \n    case proxy\n    case reject\n}\n\nenum RequestTimeStage: Int {\n    case INIT = 0\n    case closed\n    case url_RULE_MATCH_START\n    case url_RULE_MATCH_END\n    case ip_RULE_MATCH_START\n    case ip_RULE_MATCH_END\n    case dns_IP_RULE_MATCH_START\n    case dns_IP_RULE_MATCH_END\n    case dns_START\n    case dns_FAIL\n    case dns_END\n    case remote_START\n    case remote_CONNECTED\n    case global_MODE\n    case non_GLOBAL_MODE\n    case proxy_DNS_START\n    case proxy_DNS_FAIL\n    case proxy_DNS_END\n    case proxy_START\n    case proxy_CONNECTED\n    case count\n}\n\nextension RequestTimeStage: CustomStringConvertible {\n\n    var description: String {\n        switch self {\n        case .INIT:\n            return \"Request\".localized()\n        case .closed:\n            return \"Request\".localized()\n        case .url_RULE_MATCH_START:\n            return \"URL Rules Match\".localized()\n        case .url_RULE_MATCH_END:\n            return \"URL Rules Match\".localized()\n        case .ip_RULE_MATCH_START:\n            return \"IP Rules Match\".localized()\n        case .ip_RULE_MATCH_END:\n            return \"IP Rules Match\".localized()\n        case .dns_IP_RULE_MATCH_START:\n            return \"Check DNS Pollution\".localized()\n        case .dns_IP_RULE_MATCH_END:\n            return \"Check DNS Pollution\".localized()\n        case .dns_START:\n            return \"DNS Query\".localized()\n        case .dns_FAIL:\n            return \"DNS Query\".localized()\n        case .dns_END:\n            return \"DNS Query\".localized()\n        case .remote_START:\n            return \"Remote Connection\".localized()\n        case .remote_CONNECTED:\n            return \"Remote Connection\".localized()\n        case .global_MODE:\n            return \"Default Route Match\".localized()\n        case .non_GLOBAL_MODE:\n            return \"Default Route Match\".localized()\n        case .proxy_DNS_START:\n            return \"Proxy DNS Query\".localized()\n        case .proxy_DNS_FAIL:\n            return \"Proxy DNS Query\".localized()\n        case .proxy_DNS_END:\n            return \"Proxy DNS Query\".localized()\n        case .proxy_START:\n            return \"Proxy Connection\".localized()\n        case .proxy_CONNECTED:\n            return \"Proxy Connection\".localized()\n        default:\n            return \"\"\n        }\n    }\n\n}\n\nenum ForwardStage: Int {\n    case none = 0\n    case url\n    case ip\n    case dns_POLLUTION\n    case dns_FAILURE\n}\n\nstruct RequestEvent {\n    let request: Request\n    let stage: RequestTimeStage\n    let timestamp: TimeInterval\n    var duration: TimeInterval = -1\n    \n    init(request: Request, stage: RequestTimeStage, timestamp: TimeInterval) {\n        self.request = request\n        self.stage = stage\n        self.timestamp = timestamp\n    }\n\n    var contentDescription: String? {\n        switch stage {\n        case .INIT:\n            return \"\\(request.method.description) \\(request.url)\"\n        case .closed:\n            return \"Request Finished\".localized()\n        case .url_RULE_MATCH_START:\n            return \"Start URL Rule Match\".localized()\n        case .url_RULE_MATCH_END:\n            return request.forwardStage == .url ? request.rule : \"No Match\".localized()\n        case .ip_RULE_MATCH_START:\n            return \"Start IP Rules Match\".localized()\n        case .ip_RULE_MATCH_END:\n            return request.forwardStage == .ip ? request.rule : \"No Match\".localized()\n        case .dns_IP_RULE_MATCH_START:\n            return \"DNS Pollution\".localized()\n        case .dns_IP_RULE_MATCH_END:\n            return request.forwardStage == .dns_POLLUTION ? request.rule : \"No Match\".localized()\n        case .dns_START:\n            return \"Start DNS Query\".localized()\n        case .dns_FAIL:\n            return request.forwardStage == .dns_FAILURE ? \"Fail. (Try Proxy DNS Resolution)\".localized() : \"Fail\".localized()\n        case .dns_END:\n            return request.ip\n        case .remote_START:\n            return \"Start Remote Connection\".localized()\n        case .remote_CONNECTED:\n            return \"Remote Connection Established\".localized()\n        case .global_MODE:\n            return \"Fallback To PROXY\".localized()\n        case .non_GLOBAL_MODE:\n            return \"Fallback To DIRECT\".localized()\n        case .proxy_DNS_START:\n            return \"Start Proxy DNS Query\".localized()\n        case .proxy_DNS_FAIL:\n            return \"Fail\".localized()\n        case .proxy_DNS_END:\n            return request.ip\n        case .proxy_START:\n            return \"Start Proxy Connection\".localized()\n        case .proxy_CONNECTED:\n            return \"Proxy Connection Established\".localized()\n        default:\n            return \"\"\n        }\n    }\n\n}\n\nextension RequestEvent: Equatable {}\n\nfunc ==(lhs: RequestEvent, rhs: RequestEvent) -> Bool {\n    return lhs.stage == rhs.stage\n}\n\nclass Request {\n    \n    static let statusCount = 7\n\n    static let excluededStage: [RequestTimeStage] = [.proxy_DNS_START, .proxy_DNS_FAIL, .proxy_DNS_END, .ip_RULE_MATCH_START, .url_RULE_MATCH_START, .dns_IP_RULE_MATCH_START]\n    \n    var events: [RequestEvent] = []\n    var url: String\n    var method: HTTPMethod = .GET\n    var ip: String?\n    var rule: String?\n    var version: String?\n    var responseCode: HTTPResponseCode?\n    var headers: String?\n    var globalMode: Bool = false\n    var routing: RequestRouting = .direct\n    var forwardStage: ForwardStage = .none\n    \n    init?(dict: [String: AnyObject]) {\n        guard let url = dict[\"url\"] as? String, let m = dict[\"method\"] as? String, let method = HTTPMethod(rawValue: m) else {\n            return nil\n        }\n\n        self.url = url\n        self.method = method\n        if let v = dict[\"version\"] as? String {\n            self.version = v\n        }\n        self.headers = dict[\"headers\"] as? String\n        if let rule = dict[\"rule\"] as? String {\n            self.rule = rule\n        }\n        if let ip = dict[\"ip\"] as? String {\n            self.ip = ip\n        }\n        if let c = dict[\"responseCode\"] as? Int, let code = HTTPResponseCode(rawValue: c) {\n            self.responseCode = code\n        }\n        self.globalMode = dict[\"global\"] as? Bool ?? false\n        if let c = dict[\"routing\"] as? Int, let r = RequestRouting(rawValue: c) {\n            self.routing = r\n        }\n        if let c = dict[\"forward_stage\"] as? Int, let r = ForwardStage(rawValue: c) {\n            self.forwardStage = r\n        }\n\n        // Events\n        var unnormalizedEvents: [RequestEvent] = []\n        for i in 0..<RequestTimeStage.count.rawValue {\n            if let ts = dict[\"time\\(i)\"] as? Double, let stage = RequestTimeStage(rawValue: i) {\n                guard ts > 0 else {\n                    continue\n                }\n                if let _ = Request.excluededStage.index(of: stage) {\n                    continue\n                }\n                let event = RequestEvent(request: self, stage: stage, timestamp: ts)\n                unnormalizedEvents.append(event)\n            }\n        }\n        unnormalizedEvents.sort { (event1, event2) -> Bool in\n            return event1.timestamp < event2.timestamp\n        }\n        var lastEvent: RequestEvent?\n        for event in unnormalizedEvents {\n            if let e = lastEvent {\n                lastEvent?.duration = event.timestamp - e.timestamp\n                events.append(lastEvent!)\n            }\n            lastEvent = event\n        }\n        if let e = lastEvent {\n            events.append(e)\n        }\n    }\n}\n"
  },
  {
    "path": "Potatso/RequestOverviewVC.swift",
    "content": "//\n//  RequestOverviewVC.swift\n//  Potatso\n//\n//  Created by LEI on 7/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Eureka\n\nclass RequestOverviewVC: FormViewController {\n\n    let request: Request\n\n    init(request: Request) {\n        self.request = request\n        super.init(nibName: nil, bundle: nil)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        handleRefreshUI()\n    }\n\n    func handleRefreshUI() {\n        updateForm()\n    }\n\n    func updateForm() {\n        form.delegate = nil\n        form.removeAll()\n        form +++ generateTimelineSection()\n        form.delegate = self\n        tableView?.reloadData()\n    }\n\n    func generateTimelineSection() -> Section {\n        let section = Section()\n        for event in request.events {\n            section <<< RequestEventRow() {\n                $0.value = event\n            }\n        }\n        return section\n    }\n\n    func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) {\n        guard let cell = tableView.cellForRow(at: indexPath) as? RequestEventRowCell else {\n            return\n        }\n        if let cc = cell.copyContent {\n            UIPasteboard.general.string = cc\n            self.showTextHUD(\"Copied:\".localized() + \" \" + cc, dismissAfterDelay: 1)\n        }\n    }\n\n}\n"
  },
  {
    "path": "Potatso/RuleCell.swift",
    "content": "//\n//  RuleCell.swift\n//  Potatso\n//\n//  Created by LEI on 6/7/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoModel\n\nextension RuleAction {\n\n    var color: UIColor {\n        switch self {\n        case .Proxy:\n            return \"2980B9\".color\n        case .Reject:\n            return \"E74C3C\".color\n        case .Direct:\n            return \"00A185\".color\n        }\n    }\n\n}\n\nclass RuleCell: UITableViewCell {\n\n    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        contentView.addSubview(titleLabel)\n        contentView.addSubview(actionLabel)\n        constrain(titleLabel, actionLabel, contentView) { titleLabel, actionLabel, contentView in\n            titleLabel.leading == contentView.leading + 15\n            titleLabel.trailing == contentView.trailing - 15\n            titleLabel.top == contentView.top + 12\n\n            actionLabel.leading == titleLabel.leading\n            actionLabel.trailing == titleLabel.trailing\n            actionLabel.top == titleLabel.bottom + 6\n            actionLabel.bottom == contentView.bottom - 12\n        }\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    func setRule(_ rule: Rule) {\n        titleLabel.text = \"\\(rule.type), \\(rule.value)\"\n        actionLabel.text = rule.action.rawValue\n        actionLabel.textColor = rule.action.color\n    }\n\n    lazy var titleLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"404040\".color\n        v.font = UIFont.systemFont(ofSize: 16)\n        v.numberOfLines = 2\n        return v\n    }()\n\n    lazy var actionLabel: UILabel = {\n        let v = UILabel()\n        v.font = UIFont.systemFont(ofSize: 13)\n        return v\n    }()\n\n\n}\n"
  },
  {
    "path": "Potatso/RuleSetCell.swift",
    "content": "//\n//  RuleSetCell.swift\n//  Potatso\n//\n//  Created by LEI on 5/31/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Cartography\nimport PotatsoModel\n\nclass RuleSetCell: UITableViewCell {\n\n    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {\n        super.init(style: style, reuseIdentifier: reuseIdentifier)\n        preservesSuperviewLayoutMargins = false\n        layoutMargins = UIEdgeInsets.zero\n        separatorInset = UIEdgeInsets.zero\n        contentView.addSubview(titleLabel)\n        contentView.addSubview(countLabel)\n        contentView.addSubview(leftHintView)\n        contentView.addSubview(descLabel)\n        contentView.addSubview(subscribeFlagLabel)\n        self.translatesAutoresizingMaskIntoConstraints = false\n//        contentView.addSubview(avatarImageView)\n//        contentView.addSubview(authorNameLabel)\n//        contentView.addSubview(updateAtLabel)\n        countLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)\n        countLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n\n    func updateRSCellLayout(subscribe: Bool) -> CGFloat {\n        var rootFrame = self.bounds\n        self.contentView.frame = rootFrame\n        let topFrame = CGRect(x: 15, y: 13, width: rootFrame.width - 30, height: 24)\n        self.titleLabel.frame = topFrame\n        self.countLabel.frame = topFrame\n        var y: CGFloat = 24 + 13 + 11\n        self.descLabel.frame = CGRect(x: 15 + 2 + 5, y: y, width: topFrame.width - 7, height: 89)\n        self.descLabel.sizeToFit()\n        let descFrame = self.descLabel.frame\n        let hintFrame = CGRect(x: 15, y: y, width: 2, height: descFrame.height)\n        self.leftHintView.frame = hintFrame\n        y += descFrame.height\n        subscribeFlagLabel.isHidden = !subscribe\n        if subscribe {\n            y += 8\n            self.subscribeFlagLabel.frame = CGRect(x: 15, y: y, width: topFrame.width, height: 20)\n            self.subscribeFlagLabel.sizeToFit()\n            self.subscribeFlagLabel.frame.size = CGSize(width: self.subscribeFlagLabel.frame.width + 20, height: 20)\n            y += 20\n        } else {\n            print (\"not subscribe\")\n        }\n        rootFrame.size.height = y + 13\n        self.contentView.frame = rootFrame\n        return rootFrame.height\n    }\n    \n    static func caculateRSCellLayoutHeight(ruleSet: RuleSet) -> CGFloat {\n        let screenWidth = UIScreen.main.bounds.width\n        var y: CGFloat = 24 + 13 + 11\n        let desc = ruleSet.desc as NSString\n        let rect = desc.boundingRect(with: CGSize(width: screenWidth - 30 - 7, height: 128), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 13)], context: nil)\n        y += rect.height\n        \n        if ruleSet.isSubscribe {\n            y += 8 + 20\n        }\n        return y + 13\n    }\n    \n    func setRuleSet(_ ruleSet: RuleSet, showFullDescription: Bool = false) -> CGFloat {\n        titleLabel.text = ruleSet.name\n        var count = 0\n        if ruleSet.ruleCount > 0 {\n            count = ruleSet.ruleCount\n        }else {\n            count = ruleSet.rules.count\n        }\n        if count > 1 {\n            countLabel.text = String(format: \"%d rules\".localized(),  count)\n        }else {\n            countLabel.text = String(format: \"%d rule\".localized(), count)\n        }\n        descLabel.text = ruleSet.desc\n        descLabel.numberOfLines = showFullDescription ? 0 : 2\n        subscribeFlagLabel.text = \"Default\".localized()\n        return self.updateRSCellLayout(subscribe: ruleSet.isSubscribe)\n    }\n\n    override func setHighlighted(_ highlighted: Bool, animated: Bool) {\n        super.setHighlighted(highlighted, animated: animated)\n        subscribeFlagLabel.backgroundColor = \"16A085\".color\n        leftHintView.backgroundColor = \"DEDEDE\".color\n    }\n\n    override func setSelected(_ selected: Bool, animated: Bool) {\n        super.setSelected(selected, animated: animated)\n        subscribeFlagLabel.backgroundColor = \"16A085\".color\n        leftHintView.backgroundColor = \"DEDEDE\".color\n    }\n\n    lazy var titleLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"000\".color\n        v.font = UIFont.systemFont(ofSize: 17)\n        v.textAlignment = .left\n        return v\n    }()\n\n    lazy var countLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"404040\".color\n        v.font = UIFont.systemFont(ofSize: 14)\n        v.textAlignment = .right\n        return v\n    }()\n\n    lazy var descLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"5B5B5B\".color\n        v.font = UIFont.systemFont(ofSize: 13)\n        v.numberOfLines = 2\n        return v\n    }()\n\n    lazy var leftHintView: UIView = {\n        let v = UIView()\n        v.backgroundColor = \"DEDEDE\".color\n        return v\n    }()\n\n    lazy var avatarImageView: UIImageView = {\n        let v = UIImageView()\n        v.contentMode = .scaleAspectFit\n        return v\n    }()\n\n    lazy var authorNameLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"5D5D5D\".color\n        v.font = UIFont.systemFont(ofSize: 12)\n        return v\n    }()\n\n    lazy var updateAtLabel: UILabel = {\n        let v = UILabel()\n        v.textColor = \"5D5D5D\".color\n        v.font = UIFont.systemFont(ofSize: 12)\n        return v\n    }()\n\n    lazy var subscribeFlagLabel: PaddingLabel = {\n        let v = PaddingLabel()\n        v.textColor = UIColor.white\n        v.font = UIFont.systemFont(ofSize: 10)\n        v.padding = UIEdgeInsetsMake(3, 10, 3, 10)\n        v.layer.cornerRadius = 3\n        v.layer.masksToBounds = true\n        v.clipsToBounds = true\n        return v\n    }()\n\n}\n"
  },
  {
    "path": "Potatso/RuleSetListViewController.swift",
    "content": "//\n//  RuleSetListViewController.swift\n//  Potatso\n//\n//  Created by LEI on 5/31/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport PotatsoModel\nimport Cartography\nimport Realm\nimport RealmSwift\n\nprivate let rowHeight: CGFloat = 54\nprivate let kRuleSetCellIdentifier = \"ruleset\"\n\nclass RuleSetListViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {\n    var ruleSets: Results<RuleSet>\n    var existingRules: [String] = []\n    var chooseCallback: ((RuleSet?) -> Void)?\n    // Observe Realm Notifications\n    var heightAtIndex: [Int: CGFloat] = [:]\n    fileprivate let pageSize = 20\n    \n    convenience init() {\n        self.init(existing: [])\n    }\n    \n    init(existing: [String], chooseCallback: ((RuleSet?) -> Void)? = nil) {\n        self.chooseCallback = chooseCallback\n        self.existingRules = existing\n        self.ruleSets = DBUtils.all(RuleSet.self, filter: \"uuid = ''\", sorted: \"createAt\")\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    func loadData() {\n        API.getRuleSets() { (result) in\n            self.tableView.pullToRefreshView?.stopAnimating()\n            \n            guard result.count > 0 else {\n                return\n            }\n            for rule in result {\n                do {\n                    if rule.name.characters.count > 0 {\n                        try RuleSet.addRemoteObject(rule)\n                    } else {\n                        try DBUtils.hardDelete(rule.uuid, type: RuleSet.self)\n                    }\n                } catch {\n                    NSLog(\"Fail to subscribe\".localized())\n                }\n            }\n            self.reloadData()\n        }\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        navigationItem.title = \"Rule Set\".localized()\n        navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add))\n        reloadData()\n        \n        self.tableView.addPullToRefresh( actionHandler: { [weak self] in\n            self?.loadData()\n            })\n        if self.ruleSets.count == 0 {\n            tableView.triggerPullToRefresh()\n        }\n    }\n\n    func reloadData() {\n        let cond = self.existingRules.map{ \"uuid != '\\($0)'\" }.joined(separator: \" && \")\n        self.ruleSets = DBUtils.all(RuleSet.self, filter: cond, sorted: \"createAt\")\n        tableView.reloadData()\n    }\n\n    func add() {\n        let vc = RuleSetConfigurationViewController()\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n    func showRuleSetConfiguration(_ ruleSet: RuleSet?) {\n        let vc = RuleSetConfigurationViewController(ruleSet: ruleSet)\n        navigationController?.pushViewController(vc, animated: true)\n    }\n\n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return ruleSets.count\n    }\n\n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCell(withIdentifier: kRuleSetCellIdentifier, for: indexPath) as! RuleSetCell\n        heightAtIndex[indexPath.row] = cell.setRuleSet(ruleSets[indexPath.row])\n        return cell\n    }\n\n\n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        tableView.deselectRow(at: indexPath, animated: true)\n        let ruleSet = ruleSets[indexPath.row]\n        if let cb = chooseCallback {\n            cb(ruleSet)\n            close()\n        }else {\n            showRuleSetConfiguration(ruleSet)\n        }\n    }\n    \n    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {\n        let h = RuleSetCell.caculateRSCellLayoutHeight(ruleSet: ruleSets[indexPath.row])\n        if let height = heightAtIndex[indexPath.row] {\n            print(\"Caculated: %lf real: %lf\".localizedFormat(Double(h), Double(height)))\n        }\n        return h\n    }\n\n    func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {\n        return chooseCallback == nil\n    }\n\n    func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {\n        let item = ruleSets[indexPath.row]\n        if item.isOfficial {\n            return .none\n        }\n        return .delete\n    }\n\n    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {\n        if editingStyle == .delete {\n            let item = ruleSets[indexPath.row]\n            do {\n                try DBUtils.hardDelete(item.uuid, type: RuleSet.self)\n                self.reloadData()\n            }catch {\n                self.showTextHUD(\"\\(\"Fail to delete item\".localized()): \\((error as NSError).localizedDescription)\", dismissAfterDelay: 1.5)\n            }\n        }\n    }\n    \n    override func loadView() {\n        super.loadView()\n        view.backgroundColor = UIColor.clear\n        view.addSubview(tableView)\n        tableView.register(RuleSetCell.self, forCellReuseIdentifier: kRuleSetCellIdentifier)\n\n        constrain(tableView, view) { tableView, view in\n            tableView.edges == view.edges\n        }\n    }\n\n    lazy var tableView: UITableView = {\n        let v = UITableView(frame: CGRect.zero, style: .plain)\n        v.dataSource = self\n        v.delegate = self\n        v.tableFooterView = UIView()\n        v.separatorStyle = .singleLine\n        v.rowHeight = UITableViewAutomaticDimension\n        return v\n    }()\n\n}\n"
  },
  {
    "path": "Potatso/Sync/SyncManager.swift",
    "content": "//\n//  SyncManager.swift\n//  Potatso\n//\n//  Created by LEI on 8/2/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport CloudKit\n\npublic enum SyncServiceType: String {\n    case None\n}\n\npublic protocol SyncServiceProtocol {\n    func setup(_ completion: ((Error?) -> Void)?)\n    func sync(_ manually: Bool, completion: ((Error?) -> Void)?)\n    func stop()\n}\n\nopen class SyncManager {\n\n    static let shared = SyncManager()\n\n    open static let syncServiceChangedNotification = \"syncServiceChangedNotification\"\n    fileprivate var services: [SyncServiceType: SyncServiceProtocol] = [:]\n    fileprivate static let serviceTypeKey = \"serviceTypeKey\"\n\n    fileprivate(set) var syncing = false\n\n    var currentSyncServiceType: SyncServiceType {\n        get {\n            if let raw = UserDefaults.standard.object(forKey: SyncManager.serviceTypeKey) as? String, let type = SyncServiceType(rawValue: raw) {\n                return type\n            }\n            return .None\n        }\n        set(new) {\n            guard currentSyncServiceType != new else {\n                return\n            }\n            getCurrentSyncService()?.stop()\n            UserDefaults.standard.set(new.rawValue, forKey: SyncManager.serviceTypeKey)\n            UserDefaults.standard.synchronize()\n            NotificationCenter.default.post(name: Notification.Name(rawValue: SyncManager.syncServiceChangedNotification), object: nil)\n        }\n    }\n\n    init() {\n    }\n\n    func getCurrentSyncService() -> SyncServiceProtocol? {\n        return getSyncService(forType: currentSyncServiceType)\n    }\n\n    func getSyncService(forType type: SyncServiceType) -> SyncServiceProtocol? {\n        if let service = services[type] {\n            return service\n        }\n        let s: SyncServiceProtocol\n        switch type {\n        default:\n            return nil\n        }\n        services[type] = s\n        return s\n    }\n\n    func showSyncVC(inVC vc:UIViewController? = nil) {\n        guard let currentVC = vc ?? UIApplication.shared.keyWindow?.rootViewController else {\n            return\n        }\n        let syncVC = SyncVC()\n        currentVC.show(syncVC, sender: self)\n    }\n\n}\n\nextension SyncManager {\n\n    func setupNewService(_ type: SyncServiceType, completion: ((Error?) -> Void)?) {\n        if let service = getSyncService(forType: type) {\n            service.setup(completion)\n        } else {\n            completion?(nil)\n        }\n    }\n\n    func setup(_ completion: ((Error?) -> Void)?) {\n        getCurrentSyncService()?.setup(completion)\n    }\n\n    func sync(_ manually: Bool = false, completion: ((Error?) -> Void)? = nil) {\n        if let service = getCurrentSyncService() {\n            syncing = true\n            NotificationCenter.default.post(name: Notification.Name(rawValue: SyncManager.syncServiceChangedNotification), object: nil)\n            service.sync(manually) { [weak self] error in\n                self?.syncing = false\n                NotificationCenter.default.post(name: Notification.Name(rawValue: SyncManager.syncServiceChangedNotification), object: nil)\n                completion?(error)\n            }\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Sync/SyncVC.swift",
    "content": "//\n//  SyncVC.swift\n//  Potatso\n//\n//  Created by LEI on 8/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Eureka\n\nclass SyncVC: FormViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        navigationItem.title = \"Sync\".localized()\n    }\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: SyncManager.syncServiceChangedNotification), object: nil, queue: OperationQueue.main) { [weak self] (noti) in\n            self?.generateForm()\n        }\n        generateForm()\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        NotificationCenter.default.removeObserver(self)\n    }\n\n    func generateForm() {\n        form.delegate = nil\n        form.removeAll()\n        form +++ generateServiceSection()\n        form.delegate = self\n        tableView?.reloadData()\n    }\n\n    func generateServiceSection() -> Section {\n        let section = Section()\n        section\n            <<< PushRow<SyncServiceType>() {\n                $0.title = \"Sync Service\".localized()\n                $0.options = [.None]\n                $0.value = SyncManager.shared.currentSyncServiceType\n                $0.selectorTitle = \"Choose Sync Service\".localized()\n            }.onChange({ [weak self] (row) in\n                if let type = row.value {\n                    self?.showProgreeHUD()\n                    SyncManager.shared.setupNewService(type, completion: { (error) in\n                        self?.hideHUD()\n                        if let error = error {\n                            if let vc = self {\n                                Alert.show(vc, title: \"Sync Service Setup Failed\", message: \"\\(error)\")\n                            }\n                        } else {\n                            SyncManager.shared.currentSyncServiceType = type\n                            self?.forceSync()\n                        }\n                    })\n                }\n            })\n        section\n            <<< ButtonRow {\n                $0.title = SyncManager.shared.syncing ? \"Syncing...\" : \"Sync Manually\"\n                $0.hidden = Condition.function([\"\"]) { form in\n                    return SyncManager.shared.currentSyncServiceType == .None\n                }\n            }.onCellSelection({ [weak self] (cell, row) in\n                self?.forceSync()\n            })\n        return section\n    }\n\n    func forceSync() {\n        SyncManager.shared.sync(true, completion: { (error) in\n            if let error = error {\n                Alert.show(self, title: \"Sync Failed\", message:  \"\\(error)\")\n            } else {\n                Alert.show(self, title: \"Sync Success\")\n            }\n        })\n    }\n\n}\n"
  },
  {
    "path": "Potatso/UIManager.swift",
    "content": "//\n//  UIManager.swift\n//  Potatso\n//\n//  Created by LEI on 12/27/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport ICSMainFramework\nimport PotatsoLibrary\nimport Aspects\n\nclass UIManager: NSObject, AppLifeCycleProtocol {\n    \n    var keyWindow: UIWindow? {\n        return UIApplication.shared.keyWindow\n    }\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        UIView.appearance().tintColor = Color.Brand\n\n        UITableView.appearance().backgroundColor = Color.Background\n        UITableView.appearance().separatorColor = Color.Separator\n\n        UINavigationBar.appearance().isTranslucent = false\n        UINavigationBar.appearance().barTintColor = Color.NavigationBackground\n\n        UITabBar.appearance().isTranslucent = false\n        UITabBar.appearance().backgroundColor = Color.TabBackground\n        UITabBar.appearance().tintColor = Color.TabItemSelected\n\n        keyWindow?.rootViewController = makeRootViewController()\n\n        return true\n    }\n    \n    func makeRootViewController() -> UITabBarController {\n        let tabBarVC = UITabBarController()\n        tabBarVC.viewControllers = makeChildViewControllers()\n        tabBarVC.selectedIndex = 0\n        return tabBarVC\n    }\n    \n    func makeChildViewControllers() -> [UIViewController] {\n        let cons: [(UIViewController.Type, String, String)] = [(HomeVC.self, \"Home\".localized(), \"Home\"), (RecentRequestsVC.self, \"Recent Requests\".localized(), \"Dashboard\"), (CollectionViewController.self, \"Manage\".localized(), \"Config\"), (SettingsViewController.self, \"More\".localized(), \"More\")]\n        return cons.map {\n            let vc = UINavigationController(rootViewController: $0.init())\n            vc.tabBarItem = UITabBarItem(title: $1, image: $2.originalImage, selectedImage: $2.templateImage)\n            return vc\n        }\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/UIViewControllerExtensions.swift",
    "content": "//\n//  UIViewControllerExtensions.swift\n//  Potatso\n//\n//  Created by LEI on 12/12/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Aspects\n\nextension UIViewController: UIGestureRecognizerDelegate  {\n    \n    open override class func initialize() {\n        struct Static {\n            static var token: Int = 0\n        }\n        \n        // make sure this isn't a subclass\n        if self !== UIViewController.self {\n            return\n        }\n        \n        if (0 == Static.token) {\n            Static.token = 1\n            UIViewController.aspectHook(#selector(viewDidLoad), swizzledSelector: #selector(ics_viewDidLoad))\n            UIViewController.aspectHook(#selector(viewWillAppear(_:)), swizzledSelector: #selector(ics_viewWillAppear(_:)))\n            UIViewController.aspectHook(#selector(viewDidAppear(_:)), swizzledSelector: #selector(ics_viewDidAppear(_:)))\n            UIViewController.aspectHook(#selector(viewWillDisappear(_:)), swizzledSelector: #selector(ics_viewWillDisappear(_:)))\n        }\n    }\n    \n    // MARK: - Method Swizzling\n    \n    func ics_viewWillAppear(_ animated: Bool) {\n        self.ics_viewWillAppear(animated)\n        if let navVC = self.navigationController {\n            if !isModal() {\n                showLeftBackButton(navVC.viewControllers.count > 1)\n            }\n        }\n    }\n    \n    func ics_viewDidLoad() {\n        self.ics_viewDidLoad()\n    }\n    \n    func ics_viewDidAppear(_ animated: Bool) {\n        self.ics_viewDidAppear(animated)\n        if let navVC = self.navigationController {\n            enableSwipeGesture(navVC.viewControllers.count > 1)\n        }\n    }\n    \n    func ics_viewWillDisappear(_ animated: Bool) {\n        self.ics_viewWillDisappear(animated)\n    }\n    \n    func showLeftBackButton(_ shouldShow: Bool) {\n        if shouldShow {\n            let backItem = UIBarButtonItem(image: \"Back\".templateImage, style: UIBarButtonItemStyle.plain, target: self, action: #selector(pop))\n            navigationItem.leftBarButtonItem = backItem\n        }else{\n            navigationItem.leftBarButtonItem = nil\n        }\n    }\n    \n    func enableSwipeGesture(_ shouldShow: Bool) {\n        if shouldShow {\n            navigationController?.interactivePopGestureRecognizer?.delegate = self\n            navigationController?.interactivePopGestureRecognizer?.isEnabled = true\n        }else{\n            navigationController?.interactivePopGestureRecognizer?.delegate = nil\n            navigationController?.interactivePopGestureRecognizer?.isEnabled = false\n        }\n    }\n\n    func addChildVC(_ child: UIViewController) {\n        view.addSubview(child.view)\n        addChildViewController(child)\n        child.didMove(toParentViewController: self)\n    }\n\n    func removeChildVC(_ child: UIViewController) {\n        child.willMove(toParentViewController: nil)\n        child.view.removeFromSuperview()\n        child.removeFromParentViewController()\n    }\n    \n    func pop() {\n        navigationController?.popViewController(animated: true)\n    }\n    \n    func dismiss() {\n        self.dismiss(animated: true, completion: nil)\n    }\n    \n    func close() {\n        if let navVC = self.navigationController, navVC.viewControllers.count > 1 {\n            pop()\n        }else {\n            dismiss()\n        }\n    }\n\n    func isModal() -> Bool {\n        if self.presentingViewController != nil {\n            return true\n        }\n        if self.presentingViewController?.presentedViewController == self {\n            return true\n        }\n        if self.navigationController?.presentingViewController?.presentedViewController == self.navigationController  {\n            return true\n        }\n        if self.tabBarController?.presentingViewController is UITabBarController {\n            return true\n        }\n        return false\n    }\n\n}\n"
  },
  {
    "path": "Potatso/UrlHandler.swift",
    "content": "//\n//  UrlHandler.swift\n//  Potatso\n//\n//  Created by LEI on 4/13/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport ICSMainFramework\nimport PotatsoLibrary\nimport Async\nimport CallbackURLKit\n\n\nclass UrlHandler: NSObject, AppLifeCycleProtocol {\n    \n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        let manager = CallbackURLKit.Manager.shared\n        manager.callbackURLScheme = CallbackURLKit.Manager.urlSchemes?.first\n        for action in [URLAction.ON, URLAction.OFF, URLAction.SWITCH] {\n            manager[action.rawValue] = { parameters, success, failure, _ in\n                action.perform(nil, parameters: parameters) { error in\n                    Async.main(after: 1, {\n                        if let error = error {\n                            failure(error as NSError)\n                        } else {\n                            success(nil)\n                        }\n                    })\n                    return\n                }\n            }\n        }\n        return true\n    }\n    \n    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {\n        guard let scheme = url.scheme?.lowercased() else {\n            return false\n        }\n        \n        if Proxy.urlIsProxy(url) {\n            do {\n            if let proxy = try? Proxy(url: url), Proxy.insertOrUpdate(proxy: proxy) {\n                return true\n            }\n            \n            if let str = url.absoluteString.removingPercentEncoding {\n                let parts = str.components(separatedBy: CharacterSet(charactersIn: \" ,*\"))\n                var cnt = 0\n                \n                for part in parts {\n                    if let purl = URL(string: part),\n                        Proxy.urlIsProxy(purl) {\n                        let proxy = try Proxy(url: purl)\n                        if Proxy.insertOrUpdate(proxy: proxy) {\n                            cnt += 1\n                        }\n                    }\n                }\n                if cnt > 0 {\n                    return true\n                }\n            }\n            } catch {\n                \n            }\n            return false\n        }\n        \n        let components = URLComponents(url: url, resolvingAgainstBaseURL: false)\n        var parameters: Parameters = [:]\n        components?.queryItems?.forEach {\n            guard let _ = $0.value else {\n                return\n            }\n            parameters[$0.name] = $0.value\n        }\n        if let host = url.host {\n            return dispatchAction(url, actionString: host, parameters: parameters)\n        }\n        return false\n    }\n    \n    func dispatchAction(_ url: URL?, actionString: String, parameters: Parameters) -> Bool {\n        guard let action = URLAction(rawValue: actionString) else {\n            return false\n        }\n        return action.perform(url, parameters: parameters)\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        let pasteBoard = UIPasteboard.general\n        if let content = pasteBoard.string?.trimmingCharacters(in: CharacterSet.whitespaces).trimmingCharacters(in: CharacterSet(charactersIn: \" !@#$%^&*\")),\n            let str = content.removingPercentEncoding,\n            str.characters.count > 3 {\n            if Proxy.uriIsProxy(str) {\n                UIPasteboard.general.string = \"\"\n                if let proxy = try? Proxy(string: str), Proxy.insertOrUpdate(proxy: proxy) {\n                    return\n                }\n                \n                let parts = str.components(separatedBy: CharacterSet(charactersIn: \" ,*\"))\n                var cnt = 0\n                \n                for part in parts {\n                    if let purl = URL(string: part),\n                        Proxy.urlIsProxy(purl) {\n                        if let proxy = try? Proxy(url: purl), Proxy.insertOrUpdate(proxy: proxy) {\n                            cnt += 1\n                        }\n                    }\n                }\n                if cnt > 0 {\n                    print(\"Imported \" + cnt.description)\n                }\n            }\n        }\n    }\n}\n\nenum URLAction: String {\n\n    case ON = \"on\"\n    case OFF = \"off\"\n    case SWITCH = \"switch\"\n    case XCALLBACK = \"x-callback-url\"\n\n    func perform(_ url: URL?, parameters: Parameters, completion: ((Error?) -> Void)? = nil) -> Bool {\n        switch self {\n        case .ON:\n            Manager.shared.startVPN({ (manager, error) in\n                if error == nil {\n                    self.autoClose(parameters)\n                }\n                completion?(error)\n            })\n        case .OFF:\n            Manager.shared.stopVPN()\n            autoClose(parameters)\n            completion?(nil)\n        case .SWITCH:\n            Manager.shared.switchVPN({ (manager, error) in\n                if error == nil {\n                    self.autoClose(parameters)\n                }\n                completion?(error)\n            })\n        case .XCALLBACK:\n            if let url = url {\n                return CallbackURLKit.Manager.shared.handleOpen(url: url)\n            }\n        }\n        return true\n    }\n\n    func autoClose(_ parameters: Parameters) {\n        var autoclose = false\n        if let value = parameters[\"autoclose\"], value.lowercased() == \"true\" || value.lowercased() == \"1\" {\n            autoclose = true\n        }\n        if autoclose {\n            Async.main(after: 1, {\n                UIControl().sendAction(\"suspend\", to: UIApplication.shared, for: nil)\n            })\n        }\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Utils/AlertUtils.swift",
    "content": "//\n//  AlertUtils.swift\n//  Potatso\n//\n//  Created by LEI on 4/10/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nclass Alert: NSObject {\n\n    static func show(_ vc: UIViewController, title: String? = nil, message: String? = nil, confirmMessage: String = \"OK\".localized(), confirmCallback: (() -> Void)?, cancelMessage: String = \"CANCEL\".localized(), cancelCallback: (() -> Void)?) {\n        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        alert.addAction(UIAlertAction(title: confirmMessage, style: .default, handler: { (action) in\n            confirmCallback?()\n        }))\n        alert.addAction(UIAlertAction(title: cancelMessage, style: .cancel, handler: { (action) in\n            cancelCallback?()\n        }))\n        vc.present(alert, animated: true, completion: nil)\n    }\n    \n    static func show(_ vc: UIViewController, title: String? = nil, message: String? = nil, confirmCallback: (() -> Void)? = nil) {\n        let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)\n        alert.addAction(UIAlertAction(title: \"OK\".localized(), style: .default, handler: { (action) in\n            confirmCallback?()\n        }))\n        vc.present(alert, animated: true, completion: nil)\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Utils/Color.swift",
    "content": "//\n//  Colors.swift\n//  Potatso\n//\n//  Created by LEI on 1/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport SwiftColor\n\nstruct Color {\n    \n    static let Brand = Color.Black\n    static let Action = \"007AFF\".color\n    static let Black = \"333333\".color\n    static let Gray = \"8E8E93\".color\n    static let Separator = \"E0E0E0\".color\n    static let Background = \"F9F9F9\".color\n    static let NavigationBackground = \"FFFFFF\".color\n    static let TabBackground = \"FFFFFF\".color\n\n    // Tab Bar\n    static let TabItemSelected = \"000\".color\n    static let TabItemUnselected = \"D7D7D7\".color\n\n    static let StatusOn = \"FF5E3B\".color\n    static let StatusOff = \"1E96E2\".color\n    static let StatusConnecting = \"F5A623\".color\n    \n    static let TextMost = Color.Black\n    static let TextPrimary = \"404040\".color\n    static let TextSecond = \"555555\".color\n    static let TextHint = \"C8C8C8\".color\n    \n}"
  },
  {
    "path": "Potatso/Utils/Error.swift",
    "content": "//\n//  Error.swift\n//  Potatso\n//\n//  Created by LEI on 4/10/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nextension String: Error {\n    \n}\n"
  },
  {
    "path": "Potatso/Utils/Event.swift",
    "content": "//\n//  Event.swift\n//  Potatso\n//\n//  Created by LEI on 7/5/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nenum Event: String {\n\n    case ReceiptValidation = \"ReceiptValidation\"\n    case ReceiptValidationResult = \"ReceiptValidationResult\"\n    case ReceiptValidationBuy = \"ReceiptValidationBuy\"\n    case ReceiptValidationCancel = \"ReceiptValidationCancel\"\n\n}\n\nfunc logEvent(_ event: Event, attributes: [String: AnyObject]?) {\n    Answers.logCustomEvent(withName: event.rawValue, customAttributes: attributes)\n}\n"
  },
  {
    "path": "Potatso/Utils/HUDUtils.swift",
    "content": "//\n//  HUDUtils.swift\n//  Potatso\n//\n//  Created by LEI on 3/25/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport MBProgressHUD\nimport Async\n\nprivate var hudKey = \"hud\"\n\nextension UIViewController {\n    \n    func showProgreeHUD(_ text: String? = nil) {\n        hideHUD()\n        let hud = MBProgressHUD.showAdded(to: view, animated: true)\n        hud.mode = .indeterminate\n        hud.label.text = text!\n    }\n    \n    func showTextHUD(_ text: String?, dismissAfterDelay: TimeInterval) {\n        hideHUD()\n        let hud = MBProgressHUD.showAdded(to: view, animated: true)\n        hud.mode = .text\n        hud.detailsLabel.text = text!\n        hideHUD(dismissAfterDelay)\n    }\n    \n    func hideHUD() {\n        MBProgressHUD.hide(for: view, animated: true)\n    }\n    \n    func hideHUD(_ afterDelay: TimeInterval) {\n        Async.main(after: afterDelay) { \n            self.hideHUD()\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "Potatso/Utils/LoggerUtils.swift",
    "content": "//\n//  LoggerUtils.swift\n//  Potatso\n//\n//  Created by LEI on 6/21/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nextension Error {\n\n    func log(_ message: String?) {\n        if let message = message {\n            NSLog(\"\\(message): \\(self)\")\n        }else {\n            NSLog(\"\\(self)\")\n        }\n    }\n\n}\n"
  },
  {
    "path": "Potatso/Utils/ProxyUtils.swift",
    "content": "//\n//  ProxyUtils.swift\n//  Potatso\n//\n//  Created by Ruqi on 6/25/2017.\n//  Copyright © 2017 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport MMDB_Swift\nimport ICSMainFramework\n\nclass ProxyUtils {\n    static let mmdb = MMDB(Potatso.sharedUrl().appendingPathComponent(\"GeoLite2-Country.mmdb\").path)\n    static func country(ip: String) -> String {\n        if ip.characters.count >= 7,\n            let mmdb = self.mmdb,\n            let info = mmdb.lookup(ip) {\n            var lang = AppEnv.languageCode\n            let ipstr = (DataInitializer.serverConfigurations[\"ip\"] != nil) ? ip : \"\"\n            if let name = info.names[lang] {\n                return info.isoCode.emojiFlag() + name + \" \" + ipstr\n            }\n            lang = lang + \"-\" + AppEnv.countryCode\n            let name = (info.names[lang] ?? info.isoCode) + \" \" + ipstr\n            return info.isoCode.emojiFlag() + name\n        }\n        return \"\"\n    }\n    \n    \n    // https://stackoverflow.com/questions/25890533/\n    static func resolve(host: String, completion: @escaping ((String) -> Void)) {\n        let queue = DispatchQueue.global(qos: .background)\n        guard let lhost = String(host) else {\n            return\n        }\n        queue.async {\n            let host = CFHostCreateWithName(nil, lhost as CFString).takeRetainedValue()\n            CFHostStartInfoResolution(host, .addresses, nil)\n            var success: DarwinBoolean = false\n            if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray?,\n                let theAddress = addresses.firstObject as? NSData {\n                var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))\n                if getnameinfo(theAddress.bytes.assumingMemoryBound(to: sockaddr.self), socklen_t(theAddress.length),\n                               &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {\n                    let numAddress = String(cString: hostname)\n                    print(numAddress)\n                    completion(numAddress)\n                }\n            }\n        }\n    }\n}\n\nextension Proxy {\n    open func subTitle() -> String {\n        if let ip = self.ip {\n            return ProxyUtils.country(ip: ip) + \" \" + self.type.description\n        }\n        ProxyUtils.resolve(host: self.host) { ip in\n            DispatchQueue.main.async {\n                do {\n                    try DBUtils.modify(Proxy.self, id: self.uuid) { (realm, proxy) -> Error? in\n                        proxy.ip = ip\n                        //NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServiceAdded), object: nil)\n                        return nil\n                    }\n                } catch {\n                    print(\"Failed to update ip in proxy db\")\n                }\n            }\n        }\n        return self.type.description\n    }\n    \n}\n"
  },
  {
    "path": "Potatso/Utils/Receipt.h",
    "content": "//\n//  Receipt.h\n//  Potatso\n//\n//  Created by LEI on 7/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface ReceiptUtils : NSObject\n+ (BOOL)verifyReceiptAtPath: (NSString *)receiptPath;\n@end\n"
  },
  {
    "path": "Potatso/Utils/Receipt.m",
    "content": "//\n//  Receipt.m\n//  Potatso\n//\n//  Created by LEI on 7/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"Receipt.h\"\n#import <openssl/pkcs7.h>\n#import <openssl/objects.h>\n#import <openssl/sha.h>\n#import <openssl/x509.h>\n#import <openssl/err.h>\n#import <StoreKit/StoreKit.h>\n#import <Crashlytics/Crashlytics.h>\n#import \"Appirater.h\"\n#import \"Potatso-Swift.h\"\n\nNSString *kReceiptBundleIdentifier\t\t\t\t= @\"BundleIdentifier\";\nNSString *kReceiptBundleIdentifierData\t\t\t= @\"BundleIdentifierData\";\nNSString *kReceiptVersion\t\t\t\t\t\t= @\"Version\";\nNSString *kReceiptOpaqueValue\t\t\t\t\t= @\"OpaqueValue\";\nNSString *kReceiptHash\t\t\t\t\t\t\t= @\"Hash\";\nNSString *kReceiptInApp\t\t\t\t\t\t\t= @\"InApp\";\nNSString *kReceiptOriginalVersion               = @\"OrigVer\";\nNSString *kReceiptExpirationDate                = @\"ExpDate\";\n\n#define ATTR_START 1\n#define BUNDLE_ID 2\n#define VERSION 3\n#define OPAQUE_VALUE 4\n#define HASH 5\n#define ATTR_END 6\n#define INAPP_PURCHASE 17\n#define ORIG_VERSION 19\n#define EXPIRE_DATE 21\n\n\n@implementation ReceiptUtils\n\n+ (BOOL)verifyReceiptAtPath: (NSString *)receiptPath {\n    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];\n    NSLog(@\"verifyReceiptAtPath: %@ bundleIdentifier: %@\", receiptPath, bundleIdentifier);\n    NSDictionary *receipt = [self dictionaryWithAppStoreReceipt:receiptPath];\n    NSLog(@\"verifyReceiptAtPath receipt dictionary: %@\", receipt);\n\n    if (!receipt) {\n        return NO;\n    }\n\n    if ([bundleIdentifier isEqualToString:[receipt objectForKey:kReceiptBundleIdentifier]]) {\n        return YES;\n    }\n    \n    return NO;\n}\n\n+ (NSDictionary *)dictionaryWithAppStoreReceipt: (NSString *)receiptPath {\n    NSData * rootCertData = [self appleRootCert];\n\n    NSLog(@\"dictionaryWithAppStoreReceipt rootCertData len: %d\", rootCertData.length);\n\n    ERR_load_PKCS7_strings();\n    ERR_load_X509_strings();\n    OpenSSL_add_all_digests();\n\n    // Expected input is a PKCS7 container with signed data containing\n    // an ASN.1 SET of SEQUENCE structures. Each SEQUENCE contains\n    // two INTEGERS and an OCTET STRING.\n\n    const char * path = [[receiptPath stringByStandardizingPath] fileSystemRepresentation];\n    FILE *fp = fopen(path, \"rb\");\n    if (fp == NULL) {\n        NSLog(@\"dictionaryWithAppStoreReceipt open receiptPath fail: %@\", receiptPath);\n        return nil;\n    }\n\n    PKCS7 *p7 = d2i_PKCS7_fp(fp, NULL);\n    fclose(fp);\n\n    // Check if the receipt file was invalid (otherwise we go crashing and burning)\n    if (p7 == NULL) {\n        NSLog(@\"dictionaryWithAppStoreReceipt p7 null\");\n        return nil;\n    }\n\n    if (!PKCS7_type_is_signed(p7)) {\n        NSLog(@\"dictionaryWithAppStoreReceipt PKCS7_type_is_signed fail\");\n        PKCS7_free(p7);\n        return nil;\n    }\n\n    if (!PKCS7_type_is_data(p7->d.sign->contents)) {\n        NSLog(@\"dictionaryWithAppStoreReceipt PKCS7_type_is_data fail\");\n        PKCS7_free(p7);\n        return nil;\n    }\n\n    int verifyReturnValue = 0;\n    X509_STORE *store = X509_STORE_new();\n    if (store) {\n        const uint8_t *data = (uint8_t *)(rootCertData.bytes);\n        X509 *appleCA = d2i_X509(NULL, &data, (long)rootCertData.length);\n        if (appleCA) {\n            BIO *payload = BIO_new(BIO_s_mem());\n            X509_STORE_add_cert(store, appleCA);\n\n            if (payload) {\n                verifyReturnValue = PKCS7_verify(p7,NULL,store,NULL,payload,0);\n                BIO_free(payload);\n            }\n\n            X509_free(appleCA);\n        }\n\n        X509_STORE_free(store);\n    }\n\n    EVP_cleanup();\n\n    if (verifyReturnValue != 1) {\n        PKCS7_free(p7);\n        NSLog(@\"dictionaryWithAppStoreReceipt verifyReturnValue fail\");\n        return nil;\n    }\n\n    ASN1_OCTET_STRING *octets = p7->d.sign->contents->d.data;\n    const uint8_t *p = octets->data;\n    const uint8_t *end = p + octets->length;\n\n    int type = 0;\n    int xclass = 0;\n    long length = 0;\n\n    ASN1_get_object(&p, &length, &type, &xclass, end - p);\n    if (type != V_ASN1_SET) {\n        PKCS7_free(p7);\n        NSLog(@\"dictionaryWithAppStoreReceipt type fail\");\n        return nil;\n    }\n\n    NSMutableDictionary *info = [NSMutableDictionary dictionary];\n\n    while (p < end) {\n        ASN1_get_object(&p, &length, &type, &xclass, end - p);\n        if (type != V_ASN1_SEQUENCE) {\n            break;\n        }\n\n        const uint8_t *seq_end = p + length;\n\n        int attr_type = 0;\n        int attr_version = 0;\n\n        // Attribute type\n        ASN1_get_object(&p, &length, &type, &xclass, seq_end - p);\n        if (type == V_ASN1_INTEGER && length == 1) {\n            attr_type = p[0];\n        }\n        p += length;\n\n        // Attribute version\n        ASN1_get_object(&p, &length, &type, &xclass, seq_end - p);\n        if (type == V_ASN1_INTEGER && length == 1) {\n            attr_version = p[0];\n            attr_version = attr_version;\n        }\n        p += length;\n\n        // Only parse attributes we're interested in\n        if ((attr_type > ATTR_START && attr_type < ATTR_END) || attr_type == INAPP_PURCHASE || attr_type == ORIG_VERSION || attr_type == EXPIRE_DATE) {\n            NSString *key = nil;\n\n            ASN1_get_object(&p, &length, &type, &xclass, seq_end - p);\n            if (type == V_ASN1_OCTET_STRING) {\n                NSData *data = [NSData dataWithBytes:p length:(NSUInteger)length];\n\n                // Bytes\n                if (attr_type == BUNDLE_ID || attr_type == OPAQUE_VALUE || attr_type == HASH) {\n                    switch (attr_type) {\n                        case BUNDLE_ID:\n                            // This is included for hash generation\n                            key = kReceiptBundleIdentifierData;\n                            break;\n                        case OPAQUE_VALUE:\n                            key = kReceiptOpaqueValue;\n                            break;\n                        case HASH:\n                            key = kReceiptHash;\n                            break;\n                    }\n                    if (key) {\n                        [info setObject:data forKey:key];\n                    }\n                }\n\n                // Strings\n                if (attr_type == BUNDLE_ID || attr_type == VERSION || attr_type == ORIG_VERSION) {\n                    int str_type = 0;\n                    long str_length = 0;\n                    const uint8_t *str_p = p;\n                    ASN1_get_object(&str_p, &str_length, &str_type, &xclass, seq_end - str_p);\n                    if (str_type == V_ASN1_UTF8STRING) {\n                        switch (attr_type) {\n                            case BUNDLE_ID:\n                                key = kReceiptBundleIdentifier;\n                                break;\n                            case VERSION:\n                                key = kReceiptVersion;\n                                break;\n                            case ORIG_VERSION:\n                                key = kReceiptOriginalVersion;\n                                break;\n                        }\n\n                        if (key) {\n                            NSString *string = [[NSString alloc] initWithBytes:str_p\n                                                                        length:(NSUInteger)str_length\n                                                                      encoding:NSUTF8StringEncoding];\n                            [info setObject:string forKey:key];\n                        }\n                    }\n                }\n\n                // In-App purchases\n                // Potatso don't care\n#if 0\n                if (attr_type == INAPP_PURCHASE) {\n                    NSArray *inApp = parseInAppPurchasesData(data);\n                    NSArray *current = info[kReceiptInApp];\n                    if (current) {\n                        info[kReceiptInApp] = [current arrayByAddingObjectsFromArray:inApp];\n                    } else {\n                        [info setObject:inApp forKey:kReceiptInApp];\n                    }\n                }\n#endif\n            }\n            p += length;\n        }\n\n        // Skip any remaining fields in this SEQUENCE\n        while (p < seq_end) {\n            ASN1_get_object(&p, &length, &type, &xclass, seq_end - p);\n            p += length;\n        }\n    }\n    \n    PKCS7_free(p7);\n    \n    return info;\n}\n\n+ (NSData *)appleRootCert {\n    // Obtain the Apple Inc. root certificate from http://www.apple.com/certificateauthority/\n    // Download the Apple Inc. Root Certificate ( http://www.apple.com/appleca/AppleIncRootCertificate.cer )\n    // Add the AppleIncRootCertificate.cer to your app's resource bundle.\n\n    NSData *cert = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@\"AppleIncRootCertificate\" withExtension:@\"cer\"]];\n\n    return cert;\n}\n\n@end\n\n\n"
  },
  {
    "path": "Potatso/Utils/Receipt.swift",
    "content": "//\n//  Receipt.swift\n//  Potatso\n//\n//  Created by LEI on 7/5/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport ICSMainFramework\n\nclass Receipt: NSObject, SKRequestDelegate {\n\n    static let shared = Receipt()\n\n    private override init() {}\n\n    func validate() {\n        if AppEnv.isTestFlight {\n            NSLog(\"isTestFlight\")\n            if !validateKeychainAppStore() {\n                NSLog(\"validateKeychainAppStore fail\")\n                failAndTerminate()\n            }\n        }\n        if AppEnv.isAppStore {\n            NSLog(\"isAppStore\")\n            if isStoreReceiptValidate() {\n                NSLog(\"isStoreReceiptValidate true\")\n                markKeychainAppStore()\n            } else {\n                NSLog(\"isStoreReceiptValidate false\")\n                failAndTerminate()\n            }\n        }\n    }\n\n    private func markKeychainAppStore() {\n        keychain[\"appstore\"] = \"true\"\n    }\n\n    private func validateKeychainAppStore() -> Bool {\n        NSLog(\"validateKeychainAppStore\")\n        if let value = keychain[\"appstore\"] {\n            NSLog(\"keychain value: \\(value)\")\n            return value == \"true\"\n        }\n        return false\n    }\n\n    private func isStoreReceiptValidate() -> Bool {\n        NSLog(\"appStoreReceiptURL: \\(NSBundle.mainBundle().appStoreReceiptURL)\")\n        guard let receiptPath = NSBundle.mainBundle().appStoreReceiptURL?.path where NSFileManager.defaultManager().fileExistsAtPath(receiptPath) else {\n            NSLog(\"isStoreReceiptValidate can't find appStoreReceiptURL\")\n            return false\n        }\n        return ReceiptUtils.verifyReceiptAtPath(receiptPath)\n    }\n\n    private func requestNewReceipt() {\n        let req = SKReceiptRefreshRequest()\n        req.delegate = self\n        req.start()\n    }\n\n    private func validateReceipt(path: String, tryAgain: Bool) {\n        let valid = ReceiptUtils.verifyReceiptAtPath(path)\n        logEvent(.ReceiptValidationResult, attributes: [\"valid\": valid ? \"true\" : \"false\"])\n        if !valid {\n            if tryAgain {\n                requestNewReceipt()\n            }else {\n                failAndTerminate()\n            }\n        }\n    }\n\n    private func failAndTerminate() {\n//        dispatch_async(dispatch_get_main_queue()) { \n//            guard let vc = UIApplication.sharedApplication().keyWindow?.rootViewController else {\n//                return\n//            }\n//            Alert.show(vc, title: \"Receipt Validation Error\".localized(), message: \"The app is only made for App Store users. Please try again.\".localized(), confirmMessage: \"CANCEL\".localized(), confirmCallback: {\n//                logEvent(.ReceiptValidationCancel, attributes: nil)\n//                self.terminate()\n//            }, cancelMessage: \"BUY\".localized()) {\n//                logEvent(.ReceiptValidationBuy, attributes: nil)\n//                Appirater.rateApp()\n//                self.terminate()\n//            }\n//\n//        }\n    }\n\n    private func terminate() {\n        exit(173)\n    }\n\n    // MARK: - SKRequestDelegate\n\n    @objc func requestDidFinish(request: SKRequest) {\n        guard let receiptPath = NSBundle.mainBundle().appStoreReceiptURL?.path where NSFileManager.defaultManager().fileExistsAtPath(receiptPath) else {\n            failAndTerminate()\n            return\n        }\n        validateReceipt(receiptPath, tryAgain: false)\n    }\n\n    @objc func request(request: SKRequest, didFailWithError error: NSError) {\n        failAndTerminate()\n    }\n\n}"
  },
  {
    "path": "Potatso/Utils/RegexUtils.swift",
    "content": "//\n//  RegexUtils.swift\n//  Potatso\n//\n//  Created by LEI on 6/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nclass Regex {\n\n    let internalExpression: NSRegularExpression\n    let pattern: String\n\n    init(_ pattern: String) throws {\n        self.pattern = pattern\n        self.internalExpression = try NSRegularExpression(pattern: pattern, options: .caseInsensitive)\n    }\n\n    func test(_ input: String) -> Bool {\n        let matches = self.internalExpression.matches(in: input, options: NSRegularExpression.MatchingOptions.reportCompletion, range:NSMakeRange(0, input.characters.count))\n        return matches.count > 0\n    }\n\n    // return group of the first matching text\n    func capturedGroup(string: String) -> [String]? {\n        \n        let matches = internalExpression.matches(in: string, options: [], range: NSRange(location:0, length: string.characters.count))\n        \n        guard let match = matches.first else { return nil }\n        \n        let lastRangeIndex = match.numberOfRanges - 1\n        guard lastRangeIndex >= 1 else { return nil }\n\n        var results = [String]()\n        for i in 1...lastRangeIndex {\n            let capturedGroupIndex = match.rangeAt(i)\n            let matchedString = (string as NSString).substring(with: capturedGroupIndex)\n            results.append(matchedString)\n        }\n        \n        return results\n    }\n}\n"
  },
  {
    "path": "Potatso/config.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>lifecycle</key>\n\t<dict>\n\t\t<key>openURL</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.UrlHandler</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>willTerminate</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.DataInitializer</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>didEnterBackground</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.DataInitializer</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>willEnterForeground</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.DataInitializer</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>remoteNotification</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.NotificationHandler</string>\n\t\t\t</dict>\n\t\t</array>\n\t\t<key>didBecomeActive</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.AppInitializer</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.DataInitializer</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.NotificationHandler</string>\n\t\t\t</dict>\n            <dict>\n                <key>object</key>\n                <string>Potatso.UrlHandler</string>\n            </dict>\n\t\t</array>\n\t\t<key>didFinishLaunchingWithOptions</key>\n\t\t<array>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.AppInitializer</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.DataInitializer</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.UIManager</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.UrlHandler</string>\n\t\t\t</dict>\n\t\t\t<dict>\n\t\t\t\t<key>object</key>\n\t\t\t\t<string>Potatso.NotificationHandler</string>\n\t\t\t</dict>\n\t\t</array>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "Potatso/zh-Hans.lproj/InfoPlist.strings",
    "content": "\"CFBundleDisplayName\" = \"暮梅\";\n"
  },
  {
    "path": "Potatso/zh-Hans.lproj/Localizable.strings",
    "content": "\"qrcode.denied\" = \"照片未授权，请到设置-隐私中授权\";\n\"qrcode.nocode\" = \"没有检测到二维码\";\n\"qrcode.title\" = \"扫描二维码\";\n\"qrcode.album\" = \"相册\";\n\n\n\"%d ms\" = \"%d 毫秒\";\n\"%d rule\" = \"%d 条规则\";\n\"%d rules\" = \"%d 条规则\";\n\"Action\" = \"操作\";\n\"Add Config Group\" = \"添加配置组\";\n\"Add Proxy\" = \"添加代理\";\n\"Add Rule\" = \"添加规则\";\n\"Add Rule Set\" = \"添加规则组\";\n\"Add a new proxy\" = \"添加新代理\";\n\"BUY\" = \"购买\";\n\"CANCEL\" = \"取消\";\n\"Cancel\" = \"取消\";\n\"Change Name\" = \"修改名称\";\n\"Check DNS Pollution\" = \"检查 DNS 污染\";\n\"Choose Proxy\" = \"选择代理\";\n\"Choose Proxy Type\" = \"选择代理类型\";\n\"Choose Rule Set\" = \"选择规则组\";\n\"Choose SSR obfs\" = \"选择 SSR 混淆插件\";\n\"Choose SSR protocol\" = \"选择 SSR 协议插件\";\n\"Choose action for rule\" = \"选择操作\";\n\"Choose encryption method\" = \"选择加密\";\n\"Choose type of rule\" = \"选择类型\";\n\"Clear Photo\" = \"清除图片\";\n\"Cloud\" = \"云端\";\n\"Connect\" = \"连接\";\n\"Connected\" = \"已连接\";\n\"Connection\" = \"连接\";\n\"Copied:\" = \"已复制:\";\n\"DNS Pollution\" = \"DNS 污染\";\n\"DNS Query\" = \"DNS 查询\";\n\"DNS\" = \"DNS\";\n\"DNS should be valid ip addresses (separated by commas if multiple). e.g.: 8.8.8.8,8.8.4.4\" = \"DNS 必须是有效的 IP 地址 (多个以逗号分隔). 例如: 8.8.8.8,8.8.4.4\";\n\"Default\" = \"默认\";\n\"Default Route Match\" = \"默认路由匹配\";\n\"Default To Proxy\" = \"默认走代理\";\n\"Detail\" = \"详情\";\n\"Disconnect\" = \"断开\";\n\"Edit Proxy\" = \"编辑代理\";\n\"Edit Rule\" = \"编辑规则\";\n\"Edit Rule Set\" = \"编辑规则组\";\n\"Encryption\" = \"加密\";\n\"Fail\" = \"失败\";\n\"Fail to add ruleset\" = \"添加规则组失败\";\n\"Fail to change dns\" = \"无法更改 DNS\";\n\"Fail to delete item\" = \"删除失败\";\n\"Fail to modify default to proxy\" = \"无法修改默认路由\";\n\"Fail to parse proxy config\" = \"无法解析代理配置\";\n\"Fail to save config.\" = \"无法保存配置.\";\n\"Fail to switch VPN.\" = \"切换 VPN 失败.\";\n\"Fail. (Try Proxy DNS Resolution)\" = \"失败. (尝试远程代理 DNS 解析)\";\n\"Failed to add config group\" = \"无法添加规则组\";\n\"Fallback To DIRECT\" = \"默认直连\";\n\"Fallback To PROXY\" = \"默认代理\";\n\"Feedback\" = \"反馈\";\n\"Follow on Twitter\" = \"关注 Twitter\";\n\"Follow on Weibo\" = \"关注微博\";\n\"Home\" = \"首页\";\n\"Host\" = \"服务器\";\n\"Host can't be empty\" = \"服务器不能为空\";\n\"Import Config From URL\" = \"从 URL 导入配置\";\n\"Manual Settings\" = \"手动添加\";\n\"IP Rules Match\" = \"IP 规则匹配\";\n\"Import From QRCode\" = \"从二维码导入\";\n\"Import From URL\" = \"从 URL 导入\";\n\"Import Success\" = \"导入成功\";\n\"Importing Config...\" = \"正在导入配置...\";\n\"Input New Name\" = \"输入新名称\";\n\"Input URL\" = \"输入 URL\";\n\"Input name\" = \"输入名称\";\n\"Invalid DNS\" = \"无效的 DNS\";\n\"Invalid port\" = \"无效的端口\";\n\"Logging is disabled\" = \"日志已禁用\";\n\"Logs\" = \"日志\";\n\"Local\" = \"本地\";\n\"Manage\" = \"管理\";\n\"More\" = \"更多\";\n\"Name\" = \"名称\";\n\"Name already exists\" = \"名称已存在\";\n\"Name can't be empty\" = \"名称不能为空\";\n\"No Match\" = \"无匹配\";\n\"No more data\" = \"没有更多数据了\";\n\"None\" = \"无\";\n\"OK\" = \"OK\";\n\"Off\" = \"未连接\";\n\"Connecting...\" = \"连接中...\";\n\"Disconnecting...\" = \"断开...\";\n\"Obfs\" = \"混淆插件(obfs)\";\n\"Obfs Param\" = \"混淆插件参数\";\n\"One Time Auth\" = \"一次认证\";\n\"Password\" = \"密码\";\n\"Password can't be empty\" = \"密码不能为空\";\n\"Please set name for the new proxy\" = \"请设置代理名称\";\n\"Port\" = \"端口\";\n\"Port can't be empty\" = \"端口不能为空\";\n\"Mume is not connected\" = \"VPN 已断开\";\n\"Protocol\" = \"协议插件(protocol)\";\n\"Proxy\" = \"代理\";\n\"Proxy Connection\" = \"代理连接\";\n\"Proxy Connection Established\" = \"代理连接建立成功\";\n\"Proxy DNS Query\" = \"代理 DNS 查询\";\n\"Proxy Name\" = \"代理名称\";\n\"Proxy Password\" = \"代理密码\";\n\"Proxy Server Host\" = \"代理服务器\";\n\"Proxy Server Port\" = \"代理服务器端口\";\n\"Proxy Type\" = \"代理类型\";\n\"Rate on App Store\" = \"在 App Store 评价\";\n\"Receipt Validation Error\" = \"购买收据验证失败\";\n\"Recent Requests\" = \"最近请求\";\n\"Remote Connection\" = \"服务器连接\";\n\"Remote Connection Established\" = \"服务器连接建立成功\";\n\"Request\" = \"请求\";\n\"Request Finished\" = \"请求结束\";\n\"Rule\" = \"规则\";\n\"Rule Set\" = \"规则组\";\n\"Rule Set Name\" = \"规则组名称\";\n\"Rules\" = \"规则\";\n\"Send feedback\" = \"发送反馈\";\n\"SSR Obfs Param\" = \"SSR 混淆插件参数\";\n\"Share with friends\" = \"分享给朋友\";\n\"Start\" = \"开始\";\n\"Start DNS Query\" = \"开始 DNS 查询\";\n\"Start IP Rules Match\" = \"开始 IP 规则匹配\";\n\"Start Proxy Connection\" = \"开始代理连接\";\n\"Start Proxy DNS Query\" = \"开始代理 DNS 查询\";\n\"Start Remote Connection\" = \"开始服务器连接\";\n\"Start URL Rule Match\" = \"开始 URL 规则匹配\";\n\"Statistics\" = \"数据\";\n\"Success\" = \"成功\";\n\"System DNS\" = \"系统 DNS\";\n\"Telegram Channel\" = \"Telegram Channel\";\n\"The app is only made for App Store users. Please try again.\" = \"本软件只供 App Store 用户使用，请重试。\";\n\"Type\" = \"类型\";\n\"URL Rules Match\" = \"URL 规则匹配\";\n\"Unkown error\" = \"未知错误\";\n\"Up Time\" = \"持续时间\";\n\"User Manual\" = \"使用手册\";\n\"Value\" = \"值\";\n\"Value can't be empty\" = \"值不能为空\";\n\"Version\" = \"版本\";\n\"View Proxy\" = \"查看代理\";\n\"Website\" = \"网站\";\n\"You must choose a action\" = \"请选择操作\";\n\"You must choose a encryption method\" = \"请选择加密\";\n\"You must choose a proxy type\" = \"请选择代理类型\";\n\"You must choose a type\" = \"请选择类型\";\n\"You should manually refresh to see the request log.\" = \"请手动刷新以查看请求日志.\";\n"
  },
  {
    "path": "Potatso/zh-Hant.lproj/InfoPlist.strings",
    "content": "\"CFBundleDisplayName\" = \"暮梅\";\n"
  },
  {
    "path": "Potatso/zh-Hant.lproj/Localizable.strings",
    "content": "\"qrcode.denied\" = \"照片未授权，请到设置-隐私中授权\";\n\"qrcode.nocode\" = \"没有检测到二维码\";\n\"qrcode.title\" = \"扫描二维码\";\n\"qrcode.album\" = \"相册\";\n\n\n\"%d ms\" = \"%d 毫秒\";\n\"%d rule\" = \"%d 条规则\";\n\"%d rules\" = \"%d 条规则\";\n\"Action\" = \"操作\";\n\"Add Config Group\" = \"添加配置组\";\n\"Add Proxy\" = \"添加代理\";\n\"Add Rule\" = \"添加规则\";\n\"Add Rule Set\" = \"添加规则组\";\n\"Add a new proxy\" = \"添加新代理\";\n\"BUY\" = \"购买\";\n\"CANCEL\" = \"取消\";\n\"Cancel\" = \"取消\";\n\"Change Name\" = \"修改名称\";\n\"Check DNS Pollution\" = \"检查 DNS 污染\";\n\"Choose Proxy\" = \"选择代理\";\n\"Choose Proxy Type\" = \"选择代理类型\";\n\"Choose Rule Set\" = \"选择规则组\";\n\"Choose SSR obfs\" = \"选择 SSR 混淆插件\";\n\"Choose SSR protocol\" = \"选择 SSR 协议插件\";\n\"Choose action for rule\" = \"选择操作\";\n\"Choose encryption method\" = \"选择加密\";\n\"Choose type of rule\" = \"选择类型\";\n\"Clear Photo\" = \"清除图片\";\n\"Cloud Set\" = \"云集\";\n\"Connect\" = \"连接\";\n\"Connected\" = \"已连接\";\n\"Connection\" = \"连接\";\n\"DNS Pollution\" = \"DNS 污染\";\n\"DNS Query\" = \"DNS 查询\";\n\"DNS\" = \"DNS\";\n\"DNS should be valid ip addresses (separated by commas if multiple). e.g.: 8.8.8.8,8.8.4.4\" = \"DNS 必须是有效的 IP 地址 (多个以逗号分隔). 例如: 8.8.8.8,8.8.4.4\";\n\"Default\" = \"默认\";\n\"Default Route Match\" = \"默认路由匹配\";\n\"Default To Proxy\" = \"默认走代理\";\n\"Detail\" = \"详情\";\n\"Disconnect\" = \"断开\";\n\"Edit Proxy\" = \"编辑代理\";\n\"Edit Rule\" = \"编辑规则\";\n\"Edit Rule Set\" = \"编辑规则组\";\n\"Encryption\" = \"加密\";\n\"Fail\" = \"失败\";\n\"Fail to add ruleset\" = \"添加规则组失败\";\n\"Fail to change dns\" = \"无法更改 DNS\";\n\"Fail to delete item\" = \"删除失败\";\n\"Fail to modify default to proxy\" = \"无法修改默认路由\";\n\"Fail to parse proxy config\" = \"无法解析代理配置\";\n\"Fail to save config.\" = \"无法保存配置.\";\n\"Fail to subscribe\" = \"订阅失败\";\n\"Fail to switch VPN.\" = \"切换 VPN 失败.\";\n\"Fail to unsubscribe\" = \"取消订阅失败\";\n\"Fail. (Try Proxy DNS Resolution)\" = \"失败. (尝试远程代理 DNS 解析)\";\n\"Failed to add config group\" = \"无法添加规则组\";\n\"Fallback To DIRECT\" = \"默认直连\";\n\"Fallback To PROXY\" = \"默认代理\";\n\"Feedback\" = \"反馈\";\n\"Follow on Twitter\" = \"关注 Twitter\";\n\"Follow on Weibo\" = \"关注微博\";\n\"Home\" = \"首页\";\n\"Host\" = \"服务器\";\n\"Host can't be empty\" = \"服务器不能为空\";\n\"Import Config From URL\" = \"从 URL 导入配置\";\n\"IP Rules Match\" = \"IP 规则匹配\";\n\"Import From QRCode\" = \"从二维码导入\";\n\"Import From URL\" = \"从 URL 导入\";\n\"Import Success\" = \"导入成功\";\n\"Importing Config...\" = \"正在导入配置...\";\n\"Input New Name\" = \"输入新名称\";\n\"Input URL\" = \"输入 URL\";\n\"Input name\" = \"输入名称\";\n\"Invalid DNS\" = \"无效的 DNS\";\n\"Invalid port\" = \"无效的端口\";\n\"Logging is disabled\" = \"日志已禁用\";\n\"Logs\" = \"日志\";\n\"Manage\" = \"管理\";\n\"More\" = \"更多\";\n\"Name\" = \"名称\";\n\"Name already exists\" = \"名称已存在\";\n\"Name can't be empty\" = \"名称不能为空\";\n\"No Match\" = \"无匹配\";\n\"No more data\" = \"没有更多数据了\";\n\"None\" = \"无\";\n\"OK\" = \"OK\";\n\"Obfs\" = \"混淆插件(obfs)\";\n\"Obfs Param\" = \"混淆插件参数\";\n\"One Time Auth\" = \"一次认证\";\n\"Password\" = \"密码\";\n\"Password can't be empty\" = \"密码不能为空\";\n\"Please set name for the new proxy\" = \"请设置代理名称\";\n\"Port\" = \"端口\";\n\"Port can't be empty\" = \"端口不能为空\";\n\"Potatso is not connected\" = \"Potatso 已断开\";\n\"Protocol\" = \"协议插件(protocol)\";\n\"Proxy\" = \"代理\";\n\"Proxy Connection\" = \"代理连接\";\n\"Proxy Connection Established\" = \"代理连接建立成功\";\n\"Proxy DNS Query\" = \"代理 DNS 查询\";\n\"Proxy Name\" = \"代理名称\";\n\"Proxy Password\" = \"代理密码\";\n\"Proxy Server Host\" = \"代理服务器\";\n\"Proxy Server Port\" = \"代理服务器端口\";\n\"Proxy Type\" = \"代理类型\";\n\"Rate on App Store\" = \"在 App Store 评价\";\n\"Receipt Validation Error\" = \"购买收据验证失败\";\n\"Recent Requests\" = \"最近请求\";\n\"Remote Connection\" = \"服务器连接\";\n\"Remote Connection Established\" = \"服务器连接建立成功\";\n\"Request\" = \"请求\";\n\"Request Finished\" = \"请求结束\";\n\"Rule\" = \"规则\";\n\"Rule Set\" = \"规则组\";\n\"Rule Set Name\" = \"规则组名称\";\n\"Rules\" = \"规则\";\n\"SSR Obfs Param\" = \"SSR 混淆插件参数\";\n\"Share with friends\" = \"分享给朋友\";\n\"Start\" = \"开始\";\n\"Start DNS Query\" = \"开始 DNS 查询\";\n\"Start IP Rules Match\" = \"开始 IP 规则匹配\";\n\"Start Proxy Connection\" = \"开始代理连接\";\n\"Start Proxy DNS Query\" = \"开始代理 DNS 查询\";\n\"Start Remote Connection\" = \"开始服务器连接\";\n\"Start URL Rule Match\" = \"开始 URL 规则匹配\";\n\"Statistics\" = \"数据\";\n\"Subscribe\" = \"订阅\";\n\"Success\" = \"成功\";\n\"System DNS\" = \"系统 DNS\";\n\"Telegram Channel\" = \"Telegram Channel\";\n\"The app is only made for App Store users. Please try again.\" = \"本软件只供 App Store 用户使用，请重试。\";\n\"Type\" = \"类型\";\n\"URL Rules Match\" = \"URL 规则匹配\";\n\"Unkown error\" = \"未知错误\";\n\"Unsubscribe\" = \"退订\";\n\"Up Time\" = \"持续时间\";\n\"User Manual\" = \"使用手册\";\n\"Value\" = \"值\";\n\"Value can't be empty\" = \"值不能为空\";\n\"Version\" = \"版本\";\n\"Website\" = \"网站\";\n\"You must choose a action\" = \"请选择操作\";\n\"You must choose a encryption method\" = \"请选择加密\";\n\"You must choose a proxy type\" = \"请选择代理类型\";\n\"You must choose a type\" = \"请选择类型\";\n\"You should manually refresh to see the request log.\" = \"请手动刷新以查看请求日志.\";"
  },
  {
    "path": "Potatso.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t234575943B38F4EAD3E2B481 /* Pods_Potatso.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E558CCABD311741F0CF9DD9 /* Pods_Potatso.framework */; };\n\t\t551AE8471F0A435C009265E2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 551AE8451F0A435C009265E2 /* InfoPlist.strings */; };\n\t\t553D95BB1D63FE6700B193B7 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 553D95BA1D63FE6700B193B7 /* NetworkExtension.framework */; };\n\t\t553D95BC1D63FECA00B193B7 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 553D95BA1D63FE6700B193B7 /* NetworkExtension.framework */; };\n\t\t553D95BD1D63FEDF00B193B7 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 553D95BA1D63FE6700B193B7 /* NetworkExtension.framework */; };\n\t\t556E68EA1EFFA76E00BD84ED /* ProxyUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 556E68E91EFFA76E00BD84ED /* ProxyUtils.swift */; };\n\t\t5586A6BD1EF65B1A00E9CB17 /* ProxyQRCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5586A6BC1EF65B1A00E9CB17 /* ProxyQRCode.swift */; };\n\t\t55B980381F08D3C9007E96BE /* Appirater.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B9801F1F08D3C9007E96BE /* Appirater.m */; };\n\t\t55B980391F08D3C9007E96BE /* AppiraterLocalizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55B980211F08D3C9007E96BE /* AppiraterLocalizable.strings */; };\n\t\t55D4FC121F0E5A470038594D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 55D4FC101F0E5A470038594D /* InfoPlist.strings */; };\n\t\t55D8A4641F11023C001819CF /* Mume.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D8A4631F11023C001819CF /* Mume.swift */; };\n\t\t55D8A4841F139BD8001819CF /* CloudProxyDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55D8A4831F139BD8001819CF /* CloudProxyDetailViewController.swift */; };\n\t\t55E14B841EDFF9DA0068F812 /* RegexUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8319A091D1B975C001E50C2 /* RegexUtils.swift */; };\n\t\t671F4F760B4AA48CEDC1B834 /* Pods_TodayWidget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D8D7B7274BAF6E28C980D9 /* Pods_TodayWidget.framework */; };\n\t\t6BF89D48551DF9EC9D65F0BA /* Pods_PotatsoModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 972ACD00F18B9E461F9D38B1 /* Pods_PotatsoModel.framework */; };\n\t\t9B0CFA0F1C1C0B1B007BD7C6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B0CFA0E1C1C0B1B007BD7C6 /* AppDelegate.swift */; };\n\t\t9B0CFA161C1C0B1B007BD7C6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9B0CFA151C1C0B1B007BD7C6 /* Assets.xcassets */; };\n\t\t9B0CFA191C1C0B1B007BD7C6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B0CFA171C1C0B1B007BD7C6 /* LaunchScreen.storyboard */; };\n\t\t9B17F8EB1C53379700679FCB /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B17F8EA1C53379700679FCB /* SettingsViewController.swift */; };\n\t\t9B17F8F01C533BBF00679FCB /* Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B17F8EF1C533BBF00679FCB /* Color.swift */; };\n\t\t9B1D9B7B1CA4C45F0078D814 /* HUDUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1D9B7A1CA4C45F0078D814 /* HUDUtils.swift */; };\n\t\t9B1F745E1C2F83AD0028C1A6 /* config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9B1F745D1C2F83AD0028C1A6 /* config.plist */; };\n\t\t9B1F74601C2F84250028C1A6 /* AppInitializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1F745F1C2F84250028C1A6 /* AppInitializer.swift */; };\n\t\t9B1F74621C2F85540028C1A6 /* UIManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1F74611C2F85540028C1A6 /* UIManager.swift */; };\n\t\t9B1F74761C3164AD0028C1A6 /* VPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1F74751C3164AC0028C1A6 /* VPN.swift */; };\n\t\t9B2290FF1C8E5B9600EEC901 /* DataInitializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B2290FE1C8E5B9600EEC901 /* DataInitializer.swift */; };\n\t\t9B2D8C8B1C7C3F5B00CC65B3 /* ProxyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B2D8C8A1C7C3F5B00CC65B3 /* ProxyManager.m */; };\n\t\t9B32477B1CC091CF00A3BAFF /* PotatsoBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; };\n\t\t9B32478A1CC0F1D200A3BAFF /* Importer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B3247891CC0F1D200A3BAFF /* Importer.swift */; };\n\t\t9B54CC441C1C266C00DDEEBB /* UIViewControllerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B54CC431C1C266C00DDEEBB /* UIViewControllerExtensions.swift */; };\n\t\t9B5C00261CBFB35C008DDE7A /* ConfigGroupCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B5C00251CBFB35C008DDE7A /* ConfigGroupCell.swift */; };\n\t\t9B5E13BA1C897870007DFE0A /* ProxyConfigurationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B5E13B91C897870007DFE0A /* ProxyConfigurationViewController.swift */; };\n\t\t9B76EEAD1C9005D2002BF5D1 /* RuleConfigurationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B76EEAC1C9005D2002BF5D1 /* RuleConfigurationViewController.swift */; };\n\t\t9B76EEB71C90740C002BF5D1 /* RuleSetsSelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B76EEB61C90740C002BF5D1 /* RuleSetsSelectionViewController.swift */; };\n\t\t9B76EEB91C911CBF002BF5D1 /* ProxySelectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B76EEB81C911CBF002BF5D1 /* ProxySelectionViewController.swift */; };\n\t\t9B8193B41CBCFEE700BE320D /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B8193B31CBCFEE700BE320D /* NotificationCenter.framework */; };\n\t\t9B8193B71CBCFEE700BE320D /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8193B61CBCFEE700BE320D /* TodayViewController.swift */; };\n\t\t9B8193BA1CBCFEE700BE320D /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9B8193B81CBCFEE700BE320D /* MainInterface.storyboard */; };\n\t\t9B8193BE1CBCFEE700BE320D /* TodayWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9B8193B21CBCFEE700BE320D /* TodayWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t9B8193DC1CBDE68100BE320D /* PotatsoBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; };\n\t\t9B8193DD1CBDE68100BE320D /* PotatsoLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */; };\n\t\t9B8193E21CBDF27000BE320D /* CurrentGroupCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8193E11CBDF27000BE320D /* CurrentGroupCell.swift */; };\n\t\t9B8193ED1CBE4DCA00BE320D /* UrlHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8193EC1CBE4DCA00BE320D /* UrlHandler.swift */; };\n\t\t9B8285471CE20DE40027D15C /* HMScanner.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9B82853B1CE20DE40027D15C /* HMScanner.bundle */; };\n\t\t9B8285481CE20DE40027D15C /* HMScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B82853D1CE20DE40027D15C /* HMScanner.m */; };\n\t\t9B8706001C1D788F00651424 /* PacketTunnelProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B8705FF1C1D788F00651424 /* PacketTunnelProvider.m */; };\n\t\t9B8706041C1D788F00651424 /* PacketTunnel.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 9B8705FA1C1D788F00651424 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };\n\t\t9B87060B1C1DBCCD00651424 /* dns.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B87060A1C1DBCCD00651424 /* dns.m */; };\n\t\t9B87060D1C1DBDD400651424 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B87060C1C1DBDD400651424 /* libresolv.tbd */; };\n\t\t9B8750551CC761D000A11715 /* RequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B8750541CC761D000A11715 /* RequestModel.swift */; };\n\t\t9B9B15C01C21595B000B6541 /* PotatsoLibrary.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B9B15BF1C21595B000B6541 /* PotatsoLibrary.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9B9B15C41C21595B000B6541 /* PotatsoLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */; };\n\t\t9B9B15C51C21595B000B6541 /* PotatsoLibrary.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9BB3F73C1CC3D3DE00C2DD05 /* RecentRequestsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB3F73B1CC3D3DE00C2DD05 /* RecentRequestsCell.swift */; };\n\t\t9BB3F7411CC60B5300C2DD05 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB3F73E1CC60B5300C2DD05 /* Image.swift */; };\n\t\t9BB3F7441CC60B6F00C2DD05 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB3F7431CC60B6F00C2DD05 /* Error.swift */; };\n\t\t9BB3F7471CC60CBE00C2DD05 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9BB3F7491CC60CBE00C2DD05 /* Localizable.strings */; };\n\t\t9BB3F74F1CC6308000C2DD05 /* RecentRequestsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB3F74E1CC6308000C2DD05 /* RecentRequestsVC.swift */; };\n\t\t9BB62FA31C8FFC1D002ADC54 /* RuleSetConfigurationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BB62FA21C8FFC1D002ADC54 /* RuleSetConfigurationViewController.swift */; };\n\t\t9BC215B91CB4DA9E002AADD1 /* Proxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215B81CB4DA9E002AADD1 /* Proxy.swift */; };\n\t\t9BC215BB1CB4DAE6002AADD1 /* BaseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215BA1CB4DAE6002AADD1 /* BaseModel.swift */; };\n\t\t9BC215BD1CB4DE6B002AADD1 /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215BC1CB4DE6B002AADD1 /* Rule.swift */; };\n\t\t9BC215BF1CB4E06C002AADD1 /* RuleSet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215BE1CB4E06C002AADD1 /* RuleSet.swift */; };\n\t\t9BC215C11CB5083B002AADD1 /* ConfigurationGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215C01CB5083B002AADD1 /* ConfigurationGroup.swift */; };\n\t\t9BC215C71CB51148002AADD1 /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215C61CB51148002AADD1 /* Config.swift */; };\n\t\t9BC215CC1CB5E584002AADD1 /* Manager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC215CB1CB5E584002AADD1 /* Manager.swift */; };\n\t\t9BC600201CB2921C00E5EA61 /* PotatsoBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC6001F1CB2921C00E5EA61 /* PotatsoBase.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BC600241CB2921C00E5EA61 /* PotatsoBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; };\n\t\t9BC600251CB2921C00E5EA61 /* PotatsoBase.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9BC6002B1CB2922E00E5EA61 /* Potatso.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC600291CB2922E00E5EA61 /* Potatso.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BC6002C1CB2922E00E5EA61 /* Potatso.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC6002A1CB2922E00E5EA61 /* Potatso.m */; };\n\t\t9BC600311CB299DE00E5EA61 /* JSONUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC6002D1CB299DE00E5EA61 /* JSONUtils.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BC600321CB299DE00E5EA61 /* JSONUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC6002E1CB299DE00E5EA61 /* JSONUtils.m */; };\n\t\t9BC600331CB299DE00E5EA61 /* NSError+Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC6002F1CB299DE00E5EA61 /* NSError+Helper.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BC600341CB299DE00E5EA61 /* NSError+Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BC600301CB299DE00E5EA61 /* NSError+Helper.m */; };\n\t\t9BC600351CB29AEE00E5EA61 /* PotatsoBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; };\n\t\t9BC600361CB29AFF00E5EA61 /* PotatsoBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */; };\n\t\t9BC6FFED1CB28B4B00E5EA61 /* PotatsoModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC6FFEC1CB28B4B00E5EA61 /* PotatsoModel.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BC6FFF11CB28B4B00E5EA61 /* PotatsoModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */; };\n\t\t9BC6FFF21CB28B4B00E5EA61 /* PotatsoModel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9BC6FFF61CB28C4500E5EA61 /* PotatsoModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */; };\n\t\t9BC858A51C33D30100992032 /* BaseSafariViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC858A41C33D30100992032 /* BaseSafariViewController.swift */; };\n\t\t9BCE27A51CAE412E00B1E561 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B87060C1C1DBDD400651424 /* libresolv.tbd */; };\n\t\t9BCE27A91CAE428200B1E561 /* TunnelInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BCE27A71CAE428200B1E561 /* TunnelInterface.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BCE27AA1CAE428200B1E561 /* TunnelInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BCE27A81CAE428200B1E561 /* TunnelInterface.m */; };\n\t\t9BCE27AF1CAE535800B1E561 /* PacketProcessor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */; };\n\t\t9BD4CACA1CB9600D00F99BF9 /* AlertUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD4CAC91CB9600D00F99BF9 /* AlertUtils.swift */; };\n\t\t9BDA625E1CAE2576007F2581 /* PacketProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BDA625D1CAE2576007F2581 /* PacketProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\t9BDA62621CAE2576007F2581 /* PacketProcessor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */; };\n\t\t9BDA62631CAE2576007F2581 /* PacketProcessor.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9BDA64231CAE25E0007F2581 /* BLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA626A1CAE25E0007F2581 /* BLog.m */; };\n\t\t9BDA64241CAE25E0007F2581 /* BLog_syslog.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA626B1CAE25E0007F2581 /* BLog_syslog.c */; };\n\t\t9BDA64271CAE25E0007F2581 /* BPending.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA626E1CAE25E0007F2581 /* BPending.c */; };\n\t\t9BDA642A1CAE25E0007F2581 /* DebugObject.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62711CAE25E0007F2581 /* DebugObject.c */; };\n\t\t9BDA642C1CAE25E0007F2581 /* BufferWriter.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62741CAE25E0007F2581 /* BufferWriter.c */; };\n\t\t9BDA642E1CAE25E0007F2581 /* PacketBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62761CAE25E0007F2581 /* PacketBuffer.c */; };\n\t\t9BDA64301CAE25E0007F2581 /* PacketPassConnector.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62781CAE25E0007F2581 /* PacketPassConnector.c */; };\n\t\t9BDA64321CAE25E0007F2581 /* PacketPassFairQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA627A1CAE25E0007F2581 /* PacketPassFairQueue.c */; };\n\t\t9BDA64351CAE25E0007F2581 /* PacketPassInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA627D1CAE25E0007F2581 /* PacketPassInterface.c */; };\n\t\t9BDA64371CAE25E0007F2581 /* PacketProtoDecoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA627F1CAE25E0007F2581 /* PacketProtoDecoder.c */; };\n\t\t9BDA64391CAE25E0007F2581 /* PacketProtoEncoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62811CAE25E0007F2581 /* PacketProtoEncoder.c */; };\n\t\t9BDA643B1CAE25E0007F2581 /* PacketProtoFlow.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62831CAE25E0007F2581 /* PacketProtoFlow.c */; };\n\t\t9BDA643D1CAE25E0007F2581 /* PacketRecvInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62851CAE25E0007F2581 /* PacketRecvInterface.c */; };\n\t\t9BDA643F1CAE25E0007F2581 /* PacketStreamSender.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62871CAE25E0007F2581 /* PacketStreamSender.c */; };\n\t\t9BDA64411CAE25E0007F2581 /* SinglePacketBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62891CAE25E0007F2581 /* SinglePacketBuffer.c */; };\n\t\t9BDA64431CAE25E0007F2581 /* StreamPassInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA628B1CAE25E0007F2581 /* StreamPassInterface.c */; };\n\t\t9BDA64451CAE25E0007F2581 /* StreamRecvInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA628D1CAE25E0007F2581 /* StreamRecvInterface.c */; };\n\t\t9BDA64471CAE25E0007F2581 /* PacketPassInactivityMonitor.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA62901CAE25E0007F2581 /* PacketPassInactivityMonitor.c */; };\n\t\t9BDA64E41CAE25E0007F2581 /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63311CAE25E0007F2581 /* sys.c */; };\n\t\t9BDA64E51CAE25E0007F2581 /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63341CAE25E0007F2581 /* def.c */; };\n\t\t9BDA64E61CAE25E0007F2581 /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63351CAE25E0007F2581 /* inet_chksum.c */; };\n\t\t9BDA64E71CAE25E0007F2581 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63361CAE25E0007F2581 /* init.c */; };\n\t\t9BDA64E81CAE25E0007F2581 /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63381CAE25E0007F2581 /* icmp.c */; };\n\t\t9BDA64E91CAE25E0007F2581 /* ip4.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63391CAE25E0007F2581 /* ip4.c */; };\n\t\t9BDA64EA1CAE25E0007F2581 /* ip4_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA633A1CAE25E0007F2581 /* ip4_addr.c */; };\n\t\t9BDA64EB1CAE25E0007F2581 /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA633B1CAE25E0007F2581 /* ip_frag.c */; };\n\t\t9BDA64EC1CAE25E0007F2581 /* icmp6.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA633D1CAE25E0007F2581 /* icmp6.c */; };\n\t\t9BDA64ED1CAE25E0007F2581 /* ip6.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA633E1CAE25E0007F2581 /* ip6.c */; };\n\t\t9BDA64EE1CAE25E0007F2581 /* ip6_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA633F1CAE25E0007F2581 /* ip6_addr.c */; };\n\t\t9BDA64EF1CAE25E0007F2581 /* ip6_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63401CAE25E0007F2581 /* ip6_frag.c */; };\n\t\t9BDA64F01CAE25E0007F2581 /* nd6.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63411CAE25E0007F2581 /* nd6.c */; };\n\t\t9BDA64F11CAE25E0007F2581 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63421CAE25E0007F2581 /* mem.c */; };\n\t\t9BDA64F21CAE25E0007F2581 /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63431CAE25E0007F2581 /* memp.c */; };\n\t\t9BDA64F31CAE25E0007F2581 /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63441CAE25E0007F2581 /* netif.c */; };\n\t\t9BDA64F41CAE25E0007F2581 /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63451CAE25E0007F2581 /* pbuf.c */; };\n\t\t9BDA64F51CAE25E0007F2581 /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63461CAE25E0007F2581 /* stats.c */; };\n\t\t9BDA64F61CAE25E0007F2581 /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63471CAE25E0007F2581 /* tcp.c */; };\n\t\t9BDA64F71CAE25E0007F2581 /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63481CAE25E0007F2581 /* tcp_in.c */; };\n\t\t9BDA64F81CAE25E0007F2581 /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63491CAE25E0007F2581 /* tcp_out.c */; };\n\t\t9BDA64F91CAE25E0007F2581 /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA634A1CAE25E0007F2581 /* timers.c */; };\n\t\t9BDA64FA1CAE25E0007F2581 /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA634B1CAE25E0007F2581 /* udp.c */; };\n\t\t9BDA65731CAE25E0007F2581 /* addr.bproto in Resources */ = {isa = PBXBuildFile; fileRef = 9BDA63CF1CAE25E0007F2581 /* addr.bproto */; };\n\t\t9BDA65771CAE25E0007F2581 /* msgproto.bproto in Resources */ = {isa = PBXBuildFile; fileRef = 9BDA63D31CAE25E0007F2581 /* msgproto.bproto */; };\n\t\t9BDA657E1CAE25E0007F2581 /* BSocksClient.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA63DB1CAE25E0007F2581 /* BSocksClient.c */; };\n\t\t9BDA65A31CAE25E0007F2581 /* BConnection_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64021CAE25E0007F2581 /* BConnection_common.c */; };\n\t\t9BDA65A41CAE25E0007F2581 /* BConnection_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64031CAE25E0007F2581 /* BConnection_unix.c */; };\n\t\t9BDA65A71CAE25E0007F2581 /* BDatagram_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64061CAE25E0007F2581 /* BDatagram_unix.c */; };\n\t\t9BDA65A91CAE25E0007F2581 /* BNetwork.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64081CAE25E0007F2581 /* BNetwork.c */; };\n\t\t9BDA65AC1CAE25E0007F2581 /* BReactor_badvpn.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA640B1CAE25E0007F2581 /* BReactor_badvpn.c */; };\n\t\t9BDA65AF1CAE25E0007F2581 /* BSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA640E1CAE25E0007F2581 /* BSignal.c */; };\n\t\t9BDA65B11CAE25E0007F2581 /* BTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64101CAE25E0007F2581 /* BTime.c */; };\n\t\t9BDA65B31CAE25E0007F2581 /* BUnixSignal.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64121CAE25E0007F2581 /* BUnixSignal.c */; };\n\t\t9BDA65B51CAE25E0007F2581 /* SocksUdpGwClient.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64151CAE25E0007F2581 /* SocksUdpGwClient.c */; };\n\t\t9BDA65B71CAE25E0007F2581 /* tun2socks.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64171CAE25E0007F2581 /* tun2socks.c */; };\n\t\t9BDA65BA1CAE25E0007F2581 /* BTap.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA641B1CAE25E0007F2581 /* BTap.m */; };\n\t\t9BDA65BB1CAE25E0007F2581 /* udpgw.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA641D1CAE25E0007F2581 /* udpgw.c */; };\n\t\t9BDA65BD1CAE25E0007F2581 /* UdpGwClient.c in Sources */ = {isa = PBXBuildFile; fileRef = 9BDA64201CAE25E0007F2581 /* UdpGwClient.c */; };\n\t\t9BF303461CC8A1F60096588E /* LogDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF303451CC8A1F60096588E /* LogDetailViewController.swift */; };\n\t\t9BF3034B1CCA1B060096588E /* BaseEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF3034A1CCA1B060096588E /* BaseEmptyView.swift */; };\n\t\tA4564DF27925368D6CA67F7D /* Pods_PacketTunnel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B03E5F0D3FAB0B3302CA1A4E /* Pods_PacketTunnel.framework */; };\n\t\tA5E749DA2197E384CBCBA84B /* Pods_PacketProcessor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 310645853592796E08924EB3 /* Pods_PacketProcessor.framework */; };\n\t\tB803A6981D02B768003EA9AA /* API.swift in Sources */ = {isa = PBXBuildFile; fileRef = B803A6971D02B768003EA9AA /* API.swift */; };\n\t\tB821B0F31D5334D50061E7B9 /* ActionRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B821B0F21D5334D50061E7B9 /* ActionRow.swift */; };\n\t\tB82574A91D1D98CF007BAF40 /* Pollution.swift in Sources */ = {isa = PBXBuildFile; fileRef = B82574A81D1D98CF007BAF40 /* Pollution.swift */; };\n\t\tB829C1721D4395BC00C17B82 /* QRCodeScannerVC.m in Sources */ = {isa = PBXBuildFile; fileRef = B829C1711D4395BC00C17B82 /* QRCodeScannerVC.m */; };\n\t\tB8319A0A1D1B975C001E50C2 /* RegexUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8319A091D1B975C001E50C2 /* RegexUtils.swift */; };\n\t\tB8319A0D1D1BD696001E50C2 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B8319A0F1D1BD696001E50C2 /* Localizable.strings */; };\n\t\tB8367A811D1B6D5400D50C25 /* BaseButtonRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8367A801D1B6D5400D50C25 /* BaseButtonRow.swift */; };\n\t\tB83AA5701D38E6F7007905B4 /* RequestDetailVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83AA56F1D38E6F7007905B4 /* RequestDetailVC.swift */; };\n\t\tB83AA5741D38E728007905B4 /* SegmentPageVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83AA5731D38E728007905B4 /* SegmentPageVC.swift */; };\n\t\tB83AA5761D38E98A007905B4 /* RequestOverviewVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83AA5751D38E98A007905B4 /* RequestOverviewVC.swift */; };\n\t\tB83D3E791D2BA689007655CE /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = B83D3E781D2BA689007655CE /* Event.swift */; };\n\t\tB84551401CF83D07005779CD /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B845513F1CF83D07005779CD /* HomeVC.swift */; };\n\t\tB84551421CF878BD005779CD /* ConfigGroupChooseVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B84551411CF878BD005779CD /* ConfigGroupChooseVC.swift */; };\n\t\tB86B08EC1D17F85800613014 /* ShadowPath.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B86B08E91D17F84900613014 /* ShadowPath.framework */; };\n\t\tB86B08ED1D17FB9B00613014 /* ShadowPath.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B86B08E91D17F84900613014 /* ShadowPath.framework */; };\n\t\tB87A043A1D193ABC001132F2 /* LoggerUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87A04391D193ABC001132F2 /* LoggerUtils.swift */; };\n\t\tB87B98041D3B423B00FA66BF /* PaddingLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87B98031D3B423B00FA66BF /* PaddingLabel.swift */; };\n\t\tB87B980A1D3B64BE00FA66BF /* RequestEventRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87B98091D3B64BE00FA66BF /* RequestEventRow.swift */; };\n\t\tB88096B21D0652F0008BEB87 /* RuleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88096B11D0652F0008BEB87 /* RuleCell.swift */; };\n\t\tB88559F01D21371A00B1243E /* PotatsoModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */; };\n\t\tB88874491D18186100AEF002 /* ShadowPath.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B86B08E91D17F84900613014 /* ShadowPath.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\tB8C256B01D1A957A0074D3B1 /* HomePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8C256AF1D1A957A0074D3B1 /* HomePresenter.swift */; };\n\t\tB8CCC6DD1CFD5D5D000E7E2E /* CollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CCC6DC1CFD5D5D000E7E2E /* CollectionViewController.swift */; };\n\t\tB8CCC6E11CFDCADC000E7E2E /* RuleSetListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CCC6E01CFDCADC000E7E2E /* RuleSetListViewController.swift */; };\n\t\tB8CCC6E51CFDCFD8000E7E2E /* RuleSetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CCC6E41CFDCFD8000E7E2E /* RuleSetCell.swift */; };\n\t\tB8CCC6E71CFDD99E000E7E2E /* ProxyListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CCC6E61CFDD99E000E7E2E /* ProxyListViewController.swift */; };\n\t\tB8CCC6EB1CFF1501000E7E2E /* ProxyRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CCC6EA1CFF1501000E7E2E /* ProxyRow.swift */; };\n\t\tB8D7F1841D518FF000B115F3 /* DBUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D7F1831D518FF000B115F3 /* DBUtils.swift */; };\n\t\tB8D8CC0A1D506CB900CE6C0D /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D8CC091D506CB900CE6C0D /* Localized.swift */; };\n\t\tB8EAC5941D40BF310046963C /* TunnelError.m in Sources */ = {isa = PBXBuildFile; fileRef = B8EAC5931D40BF310046963C /* TunnelError.m */; };\n\t\tB8F7845C1D36760D00F02FF5 /* DashboardVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8F7845B1D36760D00F02FF5 /* DashboardVC.swift */; };\n\t\tB8F784671D3678B400F02FF5 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = B8F784651D3678B400F02FF5 /* Settings.h */; settings = {ATTRIBUTES = (Public, ); }; };\n\t\tB8F784681D3678B400F02FF5 /* Settings.m in Sources */ = {isa = PBXBuildFile; fileRef = B8F784661D3678B400F02FF5 /* Settings.m */; };\n\t\tFE9B3692D19B03821360B886 /* Pods_PotatsoLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFAF05C4CA29869A03E25A65 /* Pods_PotatsoLibrary.framework */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t9B8193BC1CBCFEE700BE320D /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9B8193B11CBCFEE700BE320D;\n\t\t\tremoteInfo = TodayWidget;\n\t\t};\n\t\t9B8706021C1D788F00651424 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9B8705F91C1D788F00651424;\n\t\t\tremoteInfo = PacketTunnel;\n\t\t};\n\t\t9B9B15C21C21595B000B6541 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9B9B15BC1C21595B000B6541;\n\t\t\tremoteInfo = PotatsoLibrary;\n\t\t};\n\t\t9BC600221CB2921C00E5EA61 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9BC6001C1CB2921C00E5EA61;\n\t\t\tremoteInfo = PotatsoBase;\n\t\t};\n\t\t9BC6FFEF1CB28B4B00E5EA61 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9BC6FFE91CB28B4B00E5EA61;\n\t\t\tremoteInfo = PotatsoModel;\n\t\t};\n\t\t9BDA62601CAE2576007F2581 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 9BDA625A1CAE2576007F2581;\n\t\t\tremoteInfo = PacketProcessor;\n\t\t};\n\t\tB86B08E81D17F84900613014 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = B86B08E31D17F84900613014 /* ShadowPath.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = B8DEFD7B1CE9C923003FC706;\n\t\t\tremoteInfo = ShadowPath;\n\t\t};\n\t\tB86B08EA1D17F84900613014 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = B86B08E31D17F84900613014 /* ShadowPath.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = B82847B41CEB14B000820456;\n\t\t\tremoteInfo = ShadowPathDemo;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9B8706081C1D788F00651424 /* Embed App Extensions */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 13;\n\t\t\tfiles = (\n\t\t\t\t9B8193BE1CBCFEE700BE320D /* TodayWidget.appex in Embed App Extensions */,\n\t\t\t\t9B8706041C1D788F00651424 /* PacketTunnel.appex in Embed App Extensions */,\n\t\t\t);\n\t\t\tname = \"Embed App Extensions\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B9B15821C1ECADF000B6541 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\tB88874491D18186100AEF002 /* ShadowPath.framework in Embed Frameworks */,\n\t\t\t\t9BC6FFF21CB28B4B00E5EA61 /* PotatsoModel.framework in Embed Frameworks */,\n\t\t\t\t9B9B15C51C21595B000B6541 /* PotatsoLibrary.framework in Embed Frameworks */,\n\t\t\t\t9BC600251CB2921C00E5EA61 /* PotatsoBase.framework in Embed Frameworks */,\n\t\t\t\t9BDA62631CAE2576007F2581 /* PacketProcessor.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t13357BD365CD7C295F1BA3C0 /* Pods-PotatsoModel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoModel.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoModel/Pods-PotatsoModel.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1E558CCABD311741F0CF9DD9 /* Pods_Potatso.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Potatso.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t310645853592796E08924EB3 /* Pods_PacketProcessor.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PacketProcessor.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t50F18DE964A0791935D07268 /* Pods-PacketTunnel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PacketTunnel.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-PacketTunnel/Pods-PacketTunnel.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t5230B5D70A0595F06A9F15F8 /* Pods-PotatsoLibraryTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoLibraryTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoLibraryTests/Pods-PotatsoLibraryTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t551AE8461F0A435C009265E2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/InfoPlist.strings\"; sourceTree = \"<group>\"; };\n\t\t551AE84A1F0A436B009265E2 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hant\"; path = \"zh-Hant.lproj/InfoPlist.strings\"; sourceTree = \"<group>\"; };\n\t\t551AE84B1F0A4395009265E2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t553D95B91D63FE5A00B193B7 /* Potatso.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Potatso.entitlements; sourceTree = \"<group>\"; };\n\t\t553D95BA1D63FE6700B193B7 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };\n\t\t556E68E91EFFA76E00BD84ED /* ProxyUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProxyUtils.swift; sourceTree = \"<group>\"; };\n\t\t5586A6BC1EF65B1A00E9CB17 /* ProxyQRCode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProxyQRCode.swift; path = Base/ProxyQRCode.swift; sourceTree = \"<group>\"; };\n\t\t55B9801E1F08D3C9007E96BE /* Appirater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Appirater.h; sourceTree = \"<group>\"; };\n\t\t55B9801F1F08D3C9007E96BE /* Appirater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Appirater.m; sourceTree = \"<group>\"; };\n\t\t55B980201F08D3C9007E96BE /* AppiraterDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppiraterDelegate.h; sourceTree = \"<group>\"; };\n\t\t55B980221F08D3C9007E96BE /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980231F08D3C9007E96BE /* ca */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ca; path = ca.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980241F08D3C9007E96BE /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980251F08D3C9007E96BE /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980261F08D3C9007E96BE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980271F08D3C9007E96BE /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980281F08D3C9007E96BE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980291F08D3C9007E96BE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802A1F08D3C9007E96BE /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802B1F08D3C9007E96BE /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802C1F08D3C9007E96BE /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802D1F08D3C9007E96BE /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802E1F08D3C9007E96BE /* ms */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ms; path = ms.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B9802F1F08D3C9007E96BE /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980301F08D3C9007E96BE /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980311F08D3C9007E96BE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980321F08D3C9007E96BE /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"pt-BR\"; path = \"pt-BR.lproj/AppiraterLocalizable.strings\"; sourceTree = \"<group>\"; };\n\t\t55B980331F08D3C9007E96BE /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980341F08D3C9007E96BE /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980351F08D3C9007E96BE /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/AppiraterLocalizable.strings; sourceTree = \"<group>\"; };\n\t\t55B980361F08D3C9007E96BE /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/AppiraterLocalizable.strings\"; sourceTree = \"<group>\"; };\n\t\t55B980371F08D3C9007E96BE /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hant\"; path = \"zh-Hant.lproj/AppiraterLocalizable.strings\"; sourceTree = \"<group>\"; };\n\t\t55D4FC111F0E5A470038594D /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t55D4FC131F0E5A500038594D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/InfoPlist.strings\"; sourceTree = \"<group>\"; };\n\t\t55D8A4631F11023C001819CF /* Mume.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Mume.swift; sourceTree = \"<group>\"; };\n\t\t55D8A4831F139BD8001819CF /* CloudProxyDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CloudProxyDetailViewController.swift; path = Advance/CloudProxyDetailViewController.swift; sourceTree = \"<group>\"; };\n\t\t5800BF48973D41E6DFC2DF35 /* Pods-Potatso.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Potatso.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-Potatso/Pods-Potatso.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t66AB52504A6434A50F434876 /* Pods-TodayWidget.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-TodayWidget.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-TodayWidget/Pods-TodayWidget.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t6779B40186E2772C79CE2A52 /* Pods-PotatsoModel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoModel.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoModel/Pods-PotatsoModel.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t83D8D7B7274BAF6E28C980D9 /* Pods_TodayWidget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TodayWidget.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t86E310DB3E84260841595217 /* Pods-TodayWidget.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-TodayWidget.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-TodayWidget/Pods-TodayWidget.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t89E573E7B926BE00ECB260CC /* Pods-Potatso.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Potatso.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-Potatso/Pods-Potatso.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t8AB4A0AD4E706A738479B24F /* Pods-PacketTunnel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PacketTunnel.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-PacketTunnel/Pods-PacketTunnel.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t972ACD00F18B9E461F9D38B1 /* Pods_PotatsoModel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PotatsoModel.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B07D6B21CB7A6A900182C1B /* PotatsoLibraryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PotatsoLibraryTests.swift; sourceTree = \"<group>\"; };\n\t\t9B07D6B41CB7A6A900182C1B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B0CFA0B1C1C0B1B007BD7C6 /* Potatso.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Potatso.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B0CFA0E1C1C0B1B007BD7C6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t9B0CFA151C1C0B1B007BD7C6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t9B0CFA181C1C0B1B007BD7C6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t9B0CFA1A1C1C0B1B007BD7C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B17F8EA1C53379700679FCB /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = SettingsViewController.swift; path = More/SettingsViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B17F8EF1C533BBF00679FCB /* Color.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Color.swift; sourceTree = \"<group>\"; };\n\t\t9B1D9B7A1CA4C45F0078D814 /* HUDUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HUDUtils.swift; sourceTree = \"<group>\"; };\n\t\t9B1F745D1C2F83AD0028C1A6 /* config.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = config.plist; sourceTree = \"<group>\"; };\n\t\t9B1F745F1C2F84250028C1A6 /* AppInitializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppInitializer.swift; sourceTree = \"<group>\"; };\n\t\t9B1F74611C2F85540028C1A6 /* UIManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIManager.swift; sourceTree = \"<group>\"; };\n\t\t9B1F74751C3164AC0028C1A6 /* VPN.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VPN.swift; sourceTree = \"<group>\"; };\n\t\t9B2290FE1C8E5B9600EEC901 /* DataInitializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataInitializer.swift; sourceTree = \"<group>\"; };\n\t\t9B2D8C891C7C3F5B00CC65B3 /* ProxyManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxyManager.h; sourceTree = \"<group>\"; };\n\t\t9B2D8C8A1C7C3F5B00CC65B3 /* ProxyManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxyManager.m; sourceTree = \"<group>\"; };\n\t\t9B3247891CC0F1D200A3BAFF /* Importer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Importer.swift; sourceTree = \"<group>\"; };\n\t\t9B54CC431C1C266C00DDEEBB /* UIViewControllerExtensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIViewControllerExtensions.swift; sourceTree = \"<group>\"; };\n\t\t9B5C00251CBFB35C008DDE7A /* ConfigGroupCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigGroupCell.swift; sourceTree = \"<group>\"; };\n\t\t9B5E13B91C897870007DFE0A /* ProxyConfigurationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProxyConfigurationViewController.swift; path = Advance/ProxyConfigurationViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B76EEAC1C9005D2002BF5D1 /* RuleConfigurationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleConfigurationViewController.swift; path = Advance/RuleConfigurationViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B76EEB61C90740C002BF5D1 /* RuleSetsSelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleSetsSelectionViewController.swift; path = Advance/RuleSetsSelectionViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B76EEB81C911CBF002BF5D1 /* ProxySelectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProxySelectionViewController.swift; path = Advance/ProxySelectionViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B8193B21CBCFEE700BE320D /* TodayWidget.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = TodayWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B8193B31CBCFEE700BE320D /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; };\n\t\t9B8193B61CBCFEE700BE320D /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = \"<group>\"; };\n\t\t9B8193B91CBCFEE700BE320D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = \"<group>\"; };\n\t\t9B8193BB1CBCFEE700BE320D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B8193DA1CBD25BB00BE320D /* TodayWidget.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = TodayWidget.entitlements; sourceTree = \"<group>\"; };\n\t\t9B8193E11CBDF27000BE320D /* CurrentGroupCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CurrentGroupCell.swift; sourceTree = \"<group>\"; };\n\t\t9B8193EC1CBE4DCA00BE320D /* UrlHandler.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UrlHandler.swift; sourceTree = \"<group>\"; };\n\t\t9B82853B1CE20DE40027D15C /* HMScanner.bundle */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.plug-in\"; path = HMScanner.bundle; sourceTree = \"<group>\"; };\n\t\t9B82853C1CE20DE40027D15C /* HMScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMScanner.h; sourceTree = \"<group>\"; };\n\t\t9B82853D1CE20DE40027D15C /* HMScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HMScanner.m; sourceTree = \"<group>\"; };\n\t\t9B8705FA1C1D788F00651424 /* PacketTunnel.appex */ = {isa = PBXFileReference; explicitFileType = \"wrapper.app-extension\"; includeInIndex = 0; path = PacketTunnel.appex; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B8705FD1C1D788F00651424 /* PacketTunnel.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PacketTunnel.entitlements; sourceTree = \"<group>\"; };\n\t\t9B8705FE1C1D788F00651424 /* PacketTunnelProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PacketTunnelProvider.h; sourceTree = \"<group>\"; };\n\t\t9B8705FF1C1D788F00651424 /* PacketTunnelProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PacketTunnelProvider.m; sourceTree = \"<group>\"; };\n\t\t9B8706011C1D788F00651424 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9B8706091C1DBCCD00651424 /* dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dns.h; sourceTree = \"<group>\"; };\n\t\t9B87060A1C1DBCCD00651424 /* dns.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = dns.m; sourceTree = \"<group>\"; };\n\t\t9B87060C1C1DBDD400651424 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = \"sourcecode.text-based-dylib-definition\"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; };\n\t\t9B8750541CC761D000A11715 /* RequestModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestModel.swift; sourceTree = \"<group>\"; };\n\t\t9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PotatsoLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9B9B15BF1C21595B000B6541 /* PotatsoLibrary.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PotatsoLibrary.h; sourceTree = \"<group>\"; };\n\t\t9B9B15C11C21595B000B6541 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9BB3F73B1CC3D3DE00C2DD05 /* RecentRequestsCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentRequestsCell.swift; sourceTree = \"<group>\"; };\n\t\t9BB3F73E1CC60B5300C2DD05 /* Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = \"<group>\"; };\n\t\t9BB3F7431CC60B6F00C2DD05 /* Error.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = \"<group>\"; };\n\t\t9BB3F7481CC60CBE00C2DD05 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\t9BB3F74A1CC60CBF00C2DD05 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/Localizable.strings\"; sourceTree = \"<group>\"; };\n\t\t9BB3F74E1CC6308000C2DD05 /* RecentRequestsVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecentRequestsVC.swift; sourceTree = \"<group>\"; };\n\t\t9BB62FA21C8FFC1D002ADC54 /* RuleSetConfigurationViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuleSetConfigurationViewController.swift; path = Advance/RuleSetConfigurationViewController.swift; sourceTree = \"<group>\"; };\n\t\t9BC215B81CB4DA9E002AADD1 /* Proxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Proxy.swift; sourceTree = \"<group>\"; };\n\t\t9BC215BA1CB4DAE6002AADD1 /* BaseModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseModel.swift; sourceTree = \"<group>\"; };\n\t\t9BC215BC1CB4DE6B002AADD1 /* Rule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rule.swift; sourceTree = \"<group>\"; };\n\t\t9BC215BE1CB4E06C002AADD1 /* RuleSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuleSet.swift; sourceTree = \"<group>\"; };\n\t\t9BC215C01CB5083B002AADD1 /* ConfigurationGroup.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigurationGroup.swift; sourceTree = \"<group>\"; };\n\t\t9BC215C61CB51148002AADD1 /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = \"<group>\"; };\n\t\t9BC215CB1CB5E584002AADD1 /* Manager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Manager.swift; sourceTree = \"<group>\"; };\n\t\t9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PotatsoBase.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9BC6001F1CB2921C00E5EA61 /* PotatsoBase.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PotatsoBase.h; sourceTree = \"<group>\"; };\n\t\t9BC600211CB2921C00E5EA61 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9BC600291CB2922E00E5EA61 /* Potatso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Potatso.h; sourceTree = \"<group>\"; };\n\t\t9BC6002A1CB2922E00E5EA61 /* Potatso.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Potatso.m; sourceTree = \"<group>\"; };\n\t\t9BC6002D1CB299DE00E5EA61 /* JSONUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSONUtils.h; sourceTree = \"<group>\"; };\n\t\t9BC6002E1CB299DE00E5EA61 /* JSONUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSONUtils.m; sourceTree = \"<group>\"; };\n\t\t9BC6002F1CB299DE00E5EA61 /* NSError+Helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"NSError+Helper.h\"; sourceTree = \"<group>\"; };\n\t\t9BC600301CB299DE00E5EA61 /* NSError+Helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = \"NSError+Helper.m\"; sourceTree = \"<group>\"; };\n\t\t9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PotatsoModel.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9BC6FFEC1CB28B4B00E5EA61 /* PotatsoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PotatsoModel.h; sourceTree = \"<group>\"; };\n\t\t9BC6FFEE1CB28B4B00E5EA61 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9BC8589F1C33B00200992032 /* Potatso-Bridge-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = \"Potatso-Bridge-Header.h\"; sourceTree = \"<group>\"; };\n\t\t9BC858A41C33D30100992032 /* BaseSafariViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseSafariViewController.swift; sourceTree = \"<group>\"; };\n\t\t9BCE27A71CAE428200B1E561 /* TunnelInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TunnelInterface.h; sourceTree = \"<group>\"; };\n\t\t9BCE27A81CAE428200B1E561 /* TunnelInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TunnelInterface.m; sourceTree = \"<group>\"; };\n\t\t9BD4CAC91CB9600D00F99BF9 /* AlertUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlertUtils.swift; sourceTree = \"<group>\"; };\n\t\t9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PacketProcessor.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t9BDA625D1CAE2576007F2581 /* PacketProcessor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PacketProcessor.h; sourceTree = \"<group>\"; };\n\t\t9BDA625F1CAE2576007F2581 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t9BDA62691CAE25E0007F2581 /* BLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BLog.h; sourceTree = \"<group>\"; };\n\t\t9BDA626A1CAE25E0007F2581 /* BLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BLog.m; sourceTree = \"<group>\"; };\n\t\t9BDA626B1CAE25E0007F2581 /* BLog_syslog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BLog_syslog.c; sourceTree = \"<group>\"; };\n\t\t9BDA626C1CAE25E0007F2581 /* BLog_syslog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BLog_syslog.h; sourceTree = \"<group>\"; };\n\t\t9BDA626D1CAE25E0007F2581 /* BMutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BMutex.h; sourceTree = \"<group>\"; };\n\t\t9BDA626E1CAE25E0007F2581 /* BPending.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BPending.c; sourceTree = \"<group>\"; };\n\t\t9BDA626F1CAE25E0007F2581 /* BPending.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BPending.h; sourceTree = \"<group>\"; };\n\t\t9BDA62701CAE25E0007F2581 /* BPending_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BPending_list.h; sourceTree = \"<group>\"; };\n\t\t9BDA62711CAE25E0007F2581 /* DebugObject.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = DebugObject.c; sourceTree = \"<group>\"; };\n\t\t9BDA62721CAE25E0007F2581 /* DebugObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebugObject.h; sourceTree = \"<group>\"; };\n\t\t9BDA62741CAE25E0007F2581 /* BufferWriter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BufferWriter.c; sourceTree = \"<group>\"; };\n\t\t9BDA62751CAE25E0007F2581 /* BufferWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BufferWriter.h; sourceTree = \"<group>\"; };\n\t\t9BDA62761CAE25E0007F2581 /* PacketBuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketBuffer.c; sourceTree = \"<group>\"; };\n\t\t9BDA62771CAE25E0007F2581 /* PacketBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketBuffer.h; sourceTree = \"<group>\"; };\n\t\t9BDA62781CAE25E0007F2581 /* PacketPassConnector.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketPassConnector.c; sourceTree = \"<group>\"; };\n\t\t9BDA62791CAE25E0007F2581 /* PacketPassConnector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketPassConnector.h; sourceTree = \"<group>\"; };\n\t\t9BDA627A1CAE25E0007F2581 /* PacketPassFairQueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketPassFairQueue.c; sourceTree = \"<group>\"; };\n\t\t9BDA627B1CAE25E0007F2581 /* PacketPassFairQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketPassFairQueue.h; sourceTree = \"<group>\"; };\n\t\t9BDA627C1CAE25E0007F2581 /* PacketPassFairQueue_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketPassFairQueue_tree.h; sourceTree = \"<group>\"; };\n\t\t9BDA627D1CAE25E0007F2581 /* PacketPassInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketPassInterface.c; sourceTree = \"<group>\"; };\n\t\t9BDA627E1CAE25E0007F2581 /* PacketPassInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketPassInterface.h; sourceTree = \"<group>\"; };\n\t\t9BDA627F1CAE25E0007F2581 /* PacketProtoDecoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketProtoDecoder.c; sourceTree = \"<group>\"; };\n\t\t9BDA62801CAE25E0007F2581 /* PacketProtoDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketProtoDecoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA62811CAE25E0007F2581 /* PacketProtoEncoder.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketProtoEncoder.c; sourceTree = \"<group>\"; };\n\t\t9BDA62821CAE25E0007F2581 /* PacketProtoEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketProtoEncoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA62831CAE25E0007F2581 /* PacketProtoFlow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketProtoFlow.c; sourceTree = \"<group>\"; };\n\t\t9BDA62841CAE25E0007F2581 /* PacketProtoFlow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketProtoFlow.h; sourceTree = \"<group>\"; };\n\t\t9BDA62851CAE25E0007F2581 /* PacketRecvInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketRecvInterface.c; sourceTree = \"<group>\"; };\n\t\t9BDA62861CAE25E0007F2581 /* PacketRecvInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketRecvInterface.h; sourceTree = \"<group>\"; };\n\t\t9BDA62871CAE25E0007F2581 /* PacketStreamSender.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketStreamSender.c; sourceTree = \"<group>\"; };\n\t\t9BDA62881CAE25E0007F2581 /* PacketStreamSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketStreamSender.h; sourceTree = \"<group>\"; };\n\t\t9BDA62891CAE25E0007F2581 /* SinglePacketBuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SinglePacketBuffer.c; sourceTree = \"<group>\"; };\n\t\t9BDA628A1CAE25E0007F2581 /* SinglePacketBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SinglePacketBuffer.h; sourceTree = \"<group>\"; };\n\t\t9BDA628B1CAE25E0007F2581 /* StreamPassInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = StreamPassInterface.c; sourceTree = \"<group>\"; };\n\t\t9BDA628C1CAE25E0007F2581 /* StreamPassInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamPassInterface.h; sourceTree = \"<group>\"; };\n\t\t9BDA628D1CAE25E0007F2581 /* StreamRecvInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = StreamRecvInterface.c; sourceTree = \"<group>\"; };\n\t\t9BDA628E1CAE25E0007F2581 /* StreamRecvInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamRecvInterface.h; sourceTree = \"<group>\"; };\n\t\t9BDA62901CAE25E0007F2581 /* PacketPassInactivityMonitor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = PacketPassInactivityMonitor.c; sourceTree = \"<group>\"; };\n\t\t9BDA62911CAE25E0007F2581 /* PacketPassInactivityMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PacketPassInactivityMonitor.h; sourceTree = \"<group>\"; };\n\t\t9BDA62931CAE25E0007F2581 /* blog_channel_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA62941CAE25E0007F2581 /* blog_channel_BArpProbe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BArpProbe.h; sourceTree = \"<group>\"; };\n\t\t9BDA62951CAE25E0007F2581 /* blog_channel_BConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BConnection.h; sourceTree = \"<group>\"; };\n\t\t9BDA62961CAE25E0007F2581 /* blog_channel_BDatagram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BDatagram.h; sourceTree = \"<group>\"; };\n\t\t9BDA62971CAE25E0007F2581 /* blog_channel_BDHCPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BDHCPClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA62981CAE25E0007F2581 /* blog_channel_BDHCPClientCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BDHCPClientCore.h; sourceTree = \"<group>\"; };\n\t\t9BDA62991CAE25E0007F2581 /* blog_channel_BEncryption.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BEncryption.h; sourceTree = \"<group>\"; };\n\t\t9BDA629A1CAE25E0007F2581 /* blog_channel_BInputProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BInputProcess.h; sourceTree = \"<group>\"; };\n\t\t9BDA629B1CAE25E0007F2581 /* blog_channel_BLockReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BLockReactor.h; sourceTree = \"<group>\"; };\n\t\t9BDA629C1CAE25E0007F2581 /* blog_channel_BNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BNetwork.h; sourceTree = \"<group>\"; };\n\t\t9BDA629D1CAE25E0007F2581 /* blog_channel_BPredicate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BPredicate.h; sourceTree = \"<group>\"; };\n\t\t9BDA629E1CAE25E0007F2581 /* blog_channel_BProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BProcess.h; sourceTree = \"<group>\"; };\n\t\t9BDA629F1CAE25E0007F2581 /* blog_channel_BReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BReactor.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A01CAE25E0007F2581 /* blog_channel_BSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BSignal.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A11CAE25E0007F2581 /* blog_channel_BSocksClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BSocksClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A21CAE25E0007F2581 /* blog_channel_BSSLConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BSSLConnection.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A31CAE25E0007F2581 /* blog_channel_BTap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BTap.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A41CAE25E0007F2581 /* blog_channel_BThreadSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BThreadSignal.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A51CAE25E0007F2581 /* blog_channel_BThreadWork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BThreadWork.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A61CAE25E0007F2581 /* blog_channel_BTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BTime.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A71CAE25E0007F2581 /* blog_channel_BUnixSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_BUnixSignal.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A81CAE25E0007F2581 /* blog_channel_client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_client.h; sourceTree = \"<group>\"; };\n\t\t9BDA62A91CAE25E0007F2581 /* blog_channel_DatagramPeerIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_DatagramPeerIO.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AA1CAE25E0007F2581 /* blog_channel_DataProto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_DataProto.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AB1CAE25E0007F2581 /* blog_channel_dostest_attacker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_dostest_attacker.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AC1CAE25E0007F2581 /* blog_channel_dostest_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_dostest_server.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AD1CAE25E0007F2581 /* blog_channel_DPReceive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_DPReceive.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AE1CAE25E0007F2581 /* blog_channel_DPRelay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_DPRelay.h; sourceTree = \"<group>\"; };\n\t\t9BDA62AF1CAE25E0007F2581 /* blog_channel_flooder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_flooder.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B01CAE25E0007F2581 /* blog_channel_FragmentProtoAssembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_FragmentProtoAssembler.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B11CAE25E0007F2581 /* blog_channel_FrameDecider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_FrameDecider.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B21CAE25E0007F2581 /* blog_channel_LineBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_LineBuffer.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B31CAE25E0007F2581 /* blog_channel_Listener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_Listener.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B41CAE25E0007F2581 /* blog_channel_lwip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_lwip.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B51CAE25E0007F2581 /* blog_channel_ncd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B61CAE25E0007F2581 /* blog_channel_ncd_alias.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_alias.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B71CAE25E0007F2581 /* blog_channel_ncd_arithmetic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_arithmetic.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B81CAE25E0007F2581 /* blog_channel_ncd_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_assert.h; sourceTree = \"<group>\"; };\n\t\t9BDA62B91CAE25E0007F2581 /* blog_channel_ncd_backtrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_backtrack.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BA1CAE25E0007F2581 /* blog_channel_ncd_basic_functions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_basic_functions.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BB1CAE25E0007F2581 /* blog_channel_ncd_blocker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_blocker.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BC1CAE25E0007F2581 /* blog_channel_ncd_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_buffer.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BD1CAE25E0007F2581 /* blog_channel_ncd_call2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_call2.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BE1CAE25E0007F2581 /* blog_channel_ncd_choose.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_choose.h; sourceTree = \"<group>\"; };\n\t\t9BDA62BF1CAE25E0007F2581 /* blog_channel_ncd_concat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_concat.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C01CAE25E0007F2581 /* blog_channel_ncd_daemon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_daemon.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C11CAE25E0007F2581 /* blog_channel_ncd_depend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_depend.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C21CAE25E0007F2581 /* blog_channel_ncd_depend_scope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_depend_scope.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C31CAE25E0007F2581 /* blog_channel_ncd_dynamic_depend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_dynamic_depend.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C41CAE25E0007F2581 /* blog_channel_ncd_exit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_exit.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C51CAE25E0007F2581 /* blog_channel_ncd_explode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_explode.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C61CAE25E0007F2581 /* blog_channel_ncd_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_file.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C71CAE25E0007F2581 /* blog_channel_ncd_file_open.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_file_open.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C81CAE25E0007F2581 /* blog_channel_ncd_foreach.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_foreach.h; sourceTree = \"<group>\"; };\n\t\t9BDA62C91CAE25E0007F2581 /* blog_channel_ncd_from_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_from_string.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CA1CAE25E0007F2581 /* blog_channel_ncd_getargs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_getargs.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CB1CAE25E0007F2581 /* blog_channel_ncd_getenv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_getenv.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CC1CAE25E0007F2581 /* blog_channel_ncd_if.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_if.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CD1CAE25E0007F2581 /* blog_channel_ncd_imperative.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_imperative.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CE1CAE25E0007F2581 /* blog_channel_ncd_implode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_implode.h; sourceTree = \"<group>\"; };\n\t\t9BDA62CF1CAE25E0007F2581 /* blog_channel_ncd_index.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_index.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D01CAE25E0007F2581 /* blog_channel_ncd_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_list.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D11CAE25E0007F2581 /* blog_channel_ncd_load_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_load_module.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D21CAE25E0007F2581 /* blog_channel_ncd_log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_log.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D31CAE25E0007F2581 /* blog_channel_ncd_log_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_log_msg.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D41CAE25E0007F2581 /* blog_channel_ncd_logical.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_logical.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D51CAE25E0007F2581 /* blog_channel_ncd_multidepend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_multidepend.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D61CAE25E0007F2581 /* blog_channel_ncd_net_backend_badvpn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_backend_badvpn.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D71CAE25E0007F2581 /* blog_channel_ncd_net_backend_rfkill.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_backend_rfkill.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D81CAE25E0007F2581 /* blog_channel_ncd_net_backend_waitdevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_backend_waitdevice.h; sourceTree = \"<group>\"; };\n\t\t9BDA62D91CAE25E0007F2581 /* blog_channel_ncd_net_backend_waitlink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_backend_waitlink.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DA1CAE25E0007F2581 /* blog_channel_ncd_net_backend_wpa_supplicant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_backend_wpa_supplicant.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DB1CAE25E0007F2581 /* blog_channel_ncd_net_dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_dns.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DC1CAE25E0007F2581 /* blog_channel_ncd_net_iptables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_iptables.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DD1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv4_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DE1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_addr_in_network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv4_addr_in_network.h; sourceTree = \"<group>\"; };\n\t\t9BDA62DF1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_arp_probe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv4_arp_probe.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E01CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv4_dhcp.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E11CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv4_route.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E21CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv6_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E31CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_addr_in_network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv6_addr_in_network.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E41CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_route.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv6_route.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E51CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_wait_dynamic_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_ipv6_wait_dynamic_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E61CAE25E0007F2581 /* blog_channel_ncd_net_up.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_up.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E71CAE25E0007F2581 /* blog_channel_ncd_net_watch_interfaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_net_watch_interfaces.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E81CAE25E0007F2581 /* blog_channel_ncd_netmask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_netmask.h; sourceTree = \"<group>\"; };\n\t\t9BDA62E91CAE25E0007F2581 /* blog_channel_ncd_objref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_objref.h; sourceTree = \"<group>\"; };\n\t\t9BDA62EA1CAE25E0007F2581 /* blog_channel_ncd_ondemand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_ondemand.h; sourceTree = \"<group>\"; };\n\t\t9BDA62EB1CAE25E0007F2581 /* blog_channel_ncd_parse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_parse.h; sourceTree = \"<group>\"; };\n\t\t9BDA62EC1CAE25E0007F2581 /* blog_channel_ncd_print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_print.h; sourceTree = \"<group>\"; };\n\t\t9BDA62ED1CAE25E0007F2581 /* blog_channel_ncd_process_manager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_process_manager.h; sourceTree = \"<group>\"; };\n\t\t9BDA62EE1CAE25E0007F2581 /* blog_channel_ncd_reboot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_reboot.h; sourceTree = \"<group>\"; };\n\t\t9BDA62EF1CAE25E0007F2581 /* blog_channel_ncd_ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_ref.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F01CAE25E0007F2581 /* blog_channel_ncd_regex_match.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_regex_match.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F11CAE25E0007F2581 /* blog_channel_ncd_request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_request.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F21CAE25E0007F2581 /* blog_channel_ncd_run.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_run.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F31CAE25E0007F2581 /* blog_channel_ncd_runonce.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_runonce.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F41CAE25E0007F2581 /* blog_channel_ncd_sleep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sleep.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F51CAE25E0007F2581 /* blog_channel_ncd_socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_socket.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F61CAE25E0007F2581 /* blog_channel_ncd_spawn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_spawn.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F71CAE25E0007F2581 /* blog_channel_ncd_strcmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_strcmp.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F81CAE25E0007F2581 /* blog_channel_ncd_substr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_substr.h; sourceTree = \"<group>\"; };\n\t\t9BDA62F91CAE25E0007F2581 /* blog_channel_ncd_sys_evdev.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_evdev.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FA1CAE25E0007F2581 /* blog_channel_ncd_sys_request_client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_request_client.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FB1CAE25E0007F2581 /* blog_channel_ncd_sys_request_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_request_server.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FC1CAE25E0007F2581 /* blog_channel_ncd_sys_start_process.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_start_process.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FD1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_directory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_watch_directory.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FE1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_watch_input.h; sourceTree = \"<group>\"; };\n\t\t9BDA62FF1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_usb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_sys_watch_usb.h; sourceTree = \"<group>\"; };\n\t\t9BDA63001CAE25E0007F2581 /* blog_channel_ncd_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_timer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63011CAE25E0007F2581 /* blog_channel_ncd_to_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_to_string.h; sourceTree = \"<group>\"; };\n\t\t9BDA63021CAE25E0007F2581 /* blog_channel_ncd_try.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_try.h; sourceTree = \"<group>\"; };\n\t\t9BDA63031CAE25E0007F2581 /* blog_channel_ncd_value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_value.h; sourceTree = \"<group>\"; };\n\t\t9BDA63041CAE25E0007F2581 /* blog_channel_ncd_valuemetic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_valuemetic.h; sourceTree = \"<group>\"; };\n\t\t9BDA63051CAE25E0007F2581 /* blog_channel_ncd_var.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ncd_var.h; sourceTree = \"<group>\"; };\n\t\t9BDA63061CAE25E0007F2581 /* blog_channel_NCDBuildProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDBuildProgram.h; sourceTree = \"<group>\"; };\n\t\t9BDA63071CAE25E0007F2581 /* blog_channel_NCDConfigParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDConfigParser.h; sourceTree = \"<group>\"; };\n\t\t9BDA63081CAE25E0007F2581 /* blog_channel_NCDConfigTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDConfigTokenizer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63091CAE25E0007F2581 /* blog_channel_NCDIfConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDIfConfig.h; sourceTree = \"<group>\"; };\n\t\t9BDA630A1CAE25E0007F2581 /* blog_channel_NCDInterfaceMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDInterfaceMonitor.h; sourceTree = \"<group>\"; };\n\t\t9BDA630B1CAE25E0007F2581 /* blog_channel_NCDModuleIndex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDModuleIndex.h; sourceTree = \"<group>\"; };\n\t\t9BDA630C1CAE25E0007F2581 /* blog_channel_NCDModuleProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDModuleProcess.h; sourceTree = \"<group>\"; };\n\t\t9BDA630D1CAE25E0007F2581 /* blog_channel_NCDPlaceholderDb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDPlaceholderDb.h; sourceTree = \"<group>\"; };\n\t\t9BDA630E1CAE25E0007F2581 /* blog_channel_NCDRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDRequest.h; sourceTree = \"<group>\"; };\n\t\t9BDA630F1CAE25E0007F2581 /* blog_channel_NCDRequestClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDRequestClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA63101CAE25E0007F2581 /* blog_channel_NCDRfkillMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDRfkillMonitor.h; sourceTree = \"<group>\"; };\n\t\t9BDA63111CAE25E0007F2581 /* blog_channel_NCDUdevCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDUdevCache.h; sourceTree = \"<group>\"; };\n\t\t9BDA63121CAE25E0007F2581 /* blog_channel_NCDUdevManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDUdevManager.h; sourceTree = \"<group>\"; };\n\t\t9BDA63131CAE25E0007F2581 /* blog_channel_NCDUdevMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDUdevMonitor.h; sourceTree = \"<group>\"; };\n\t\t9BDA63141CAE25E0007F2581 /* blog_channel_NCDUdevMonitorParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDUdevMonitorParser.h; sourceTree = \"<group>\"; };\n\t\t9BDA63151CAE25E0007F2581 /* blog_channel_NCDVal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDVal.h; sourceTree = \"<group>\"; };\n\t\t9BDA63161CAE25E0007F2581 /* blog_channel_NCDValGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDValGenerator.h; sourceTree = \"<group>\"; };\n\t\t9BDA63171CAE25E0007F2581 /* blog_channel_NCDValParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_NCDValParser.h; sourceTree = \"<group>\"; };\n\t\t9BDA63181CAE25E0007F2581 /* blog_channel_nsskey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_nsskey.h; sourceTree = \"<group>\"; };\n\t\t9BDA63191CAE25E0007F2581 /* blog_channel_PacketProtoDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_PacketProtoDecoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA631A1CAE25E0007F2581 /* blog_channel_PasswordListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_PasswordListener.h; sourceTree = \"<group>\"; };\n\t\t9BDA631B1CAE25E0007F2581 /* blog_channel_PeerChat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_PeerChat.h; sourceTree = \"<group>\"; };\n\t\t9BDA631C1CAE25E0007F2581 /* blog_channel_PRStreamSink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_PRStreamSink.h; sourceTree = \"<group>\"; };\n\t\t9BDA631D1CAE25E0007F2581 /* blog_channel_PRStreamSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_PRStreamSource.h; sourceTree = \"<group>\"; };\n\t\t9BDA631E1CAE25E0007F2581 /* blog_channel_server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_server.h; sourceTree = \"<group>\"; };\n\t\t9BDA631F1CAE25E0007F2581 /* blog_channel_ServerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_ServerConnection.h; sourceTree = \"<group>\"; };\n\t\t9BDA63201CAE25E0007F2581 /* blog_channel_SocksUdpGwClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_SocksUdpGwClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA63211CAE25E0007F2581 /* blog_channel_SPProtoDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_SPProtoDecoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63221CAE25E0007F2581 /* blog_channel_StreamPeerIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_StreamPeerIO.h; sourceTree = \"<group>\"; };\n\t\t9BDA63231CAE25E0007F2581 /* blog_channel_tun2socks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_tun2socks.h; sourceTree = \"<group>\"; };\n\t\t9BDA63241CAE25E0007F2581 /* blog_channel_udpgw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_udpgw.h; sourceTree = \"<group>\"; };\n\t\t9BDA63251CAE25E0007F2581 /* blog_channel_UdpGwClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channel_UdpGwClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA63261CAE25E0007F2581 /* blog_channels_defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channels_defines.h; sourceTree = \"<group>\"; };\n\t\t9BDA63271CAE25E0007F2581 /* blog_channels_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blog_channels_list.h; sourceTree = \"<group>\"; };\n\t\t9BDA63281CAE25E0007F2581 /* bproto_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bproto_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA63291CAE25E0007F2581 /* bproto_bproto_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bproto_bproto_test.h; sourceTree = \"<group>\"; };\n\t\t9BDA632A1CAE25E0007F2581 /* bproto_msgproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bproto_msgproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA632E1CAE25E0007F2581 /* cc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cc.h; sourceTree = \"<group>\"; };\n\t\t9BDA632F1CAE25E0007F2581 /* perf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = perf.h; sourceTree = \"<group>\"; };\n\t\t9BDA63301CAE25E0007F2581 /* lwipopts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lwipopts.h; sourceTree = \"<group>\"; };\n\t\t9BDA63311CAE25E0007F2581 /* sys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sys.c; sourceTree = \"<group>\"; };\n\t\t9BDA63341CAE25E0007F2581 /* def.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = def.c; sourceTree = \"<group>\"; };\n\t\t9BDA63351CAE25E0007F2581 /* inet_chksum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = inet_chksum.c; sourceTree = \"<group>\"; };\n\t\t9BDA63361CAE25E0007F2581 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = \"<group>\"; };\n\t\t9BDA63381CAE25E0007F2581 /* icmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = icmp.c; sourceTree = \"<group>\"; };\n\t\t9BDA63391CAE25E0007F2581 /* ip4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip4.c; sourceTree = \"<group>\"; };\n\t\t9BDA633A1CAE25E0007F2581 /* ip4_addr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip4_addr.c; sourceTree = \"<group>\"; };\n\t\t9BDA633B1CAE25E0007F2581 /* ip_frag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip_frag.c; sourceTree = \"<group>\"; };\n\t\t9BDA633D1CAE25E0007F2581 /* icmp6.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = icmp6.c; sourceTree = \"<group>\"; };\n\t\t9BDA633E1CAE25E0007F2581 /* ip6.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip6.c; sourceTree = \"<group>\"; };\n\t\t9BDA633F1CAE25E0007F2581 /* ip6_addr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip6_addr.c; sourceTree = \"<group>\"; };\n\t\t9BDA63401CAE25E0007F2581 /* ip6_frag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ip6_frag.c; sourceTree = \"<group>\"; };\n\t\t9BDA63411CAE25E0007F2581 /* nd6.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nd6.c; sourceTree = \"<group>\"; };\n\t\t9BDA63421CAE25E0007F2581 /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = \"<group>\"; };\n\t\t9BDA63431CAE25E0007F2581 /* memp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = memp.c; sourceTree = \"<group>\"; };\n\t\t9BDA63441CAE25E0007F2581 /* netif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = netif.c; sourceTree = \"<group>\"; };\n\t\t9BDA63451CAE25E0007F2581 /* pbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pbuf.c; sourceTree = \"<group>\"; };\n\t\t9BDA63461CAE25E0007F2581 /* stats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stats.c; sourceTree = \"<group>\"; };\n\t\t9BDA63471CAE25E0007F2581 /* tcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tcp.c; sourceTree = \"<group>\"; };\n\t\t9BDA63481CAE25E0007F2581 /* tcp_in.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tcp_in.c; sourceTree = \"<group>\"; };\n\t\t9BDA63491CAE25E0007F2581 /* tcp_out.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tcp_out.c; sourceTree = \"<group>\"; };\n\t\t9BDA634A1CAE25E0007F2581 /* timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = timers.c; sourceTree = \"<group>\"; };\n\t\t9BDA634B1CAE25E0007F2581 /* udp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udp.c; sourceTree = \"<group>\"; };\n\t\t9BDA634F1CAE25E0007F2581 /* autoip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autoip.h; sourceTree = \"<group>\"; };\n\t\t9BDA63501CAE25E0007F2581 /* icmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icmp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63511CAE25E0007F2581 /* igmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = igmp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63521CAE25E0007F2581 /* inet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inet.h; sourceTree = \"<group>\"; };\n\t\t9BDA63531CAE25E0007F2581 /* ip4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip4.h; sourceTree = \"<group>\"; };\n\t\t9BDA63541CAE25E0007F2581 /* ip4_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip4_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA63551CAE25E0007F2581 /* ip_frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip_frag.h; sourceTree = \"<group>\"; };\n\t\t9BDA63581CAE25E0007F2581 /* dhcp6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dhcp6.h; sourceTree = \"<group>\"; };\n\t\t9BDA63591CAE25E0007F2581 /* ethip6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ethip6.h; sourceTree = \"<group>\"; };\n\t\t9BDA635A1CAE25E0007F2581 /* icmp6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icmp6.h; sourceTree = \"<group>\"; };\n\t\t9BDA635B1CAE25E0007F2581 /* inet6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inet6.h; sourceTree = \"<group>\"; };\n\t\t9BDA635C1CAE25E0007F2581 /* ip6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip6.h; sourceTree = \"<group>\"; };\n\t\t9BDA635D1CAE25E0007F2581 /* ip6_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip6_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA635E1CAE25E0007F2581 /* ip6_frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip6_frag.h; sourceTree = \"<group>\"; };\n\t\t9BDA635F1CAE25E0007F2581 /* mld6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mld6.h; sourceTree = \"<group>\"; };\n\t\t9BDA63601CAE25E0007F2581 /* nd6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nd6.h; sourceTree = \"<group>\"; };\n\t\t9BDA63621CAE25E0007F2581 /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = \"<group>\"; };\n\t\t9BDA63631CAE25E0007F2581 /* api_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api_msg.h; sourceTree = \"<group>\"; };\n\t\t9BDA63641CAE25E0007F2581 /* arch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arch.h; sourceTree = \"<group>\"; };\n\t\t9BDA63651CAE25E0007F2581 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = \"<group>\"; };\n\t\t9BDA63661CAE25E0007F2581 /* def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = def.h; sourceTree = \"<group>\"; };\n\t\t9BDA63671CAE25E0007F2581 /* dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dhcp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63681CAE25E0007F2581 /* dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dns.h; sourceTree = \"<group>\"; };\n\t\t9BDA63691CAE25E0007F2581 /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = \"<group>\"; };\n\t\t9BDA636A1CAE25E0007F2581 /* inet_chksum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inet_chksum.h; sourceTree = \"<group>\"; };\n\t\t9BDA636B1CAE25E0007F2581 /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = init.h; sourceTree = \"<group>\"; };\n\t\t9BDA636C1CAE25E0007F2581 /* ip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip.h; sourceTree = \"<group>\"; };\n\t\t9BDA636D1CAE25E0007F2581 /* ip_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ip_addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA636E1CAE25E0007F2581 /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = \"<group>\"; };\n\t\t9BDA636F1CAE25E0007F2581 /* memp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63701CAE25E0007F2581 /* memp_std.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memp_std.h; sourceTree = \"<group>\"; };\n\t\t9BDA63711CAE25E0007F2581 /* netbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netbuf.h; sourceTree = \"<group>\"; };\n\t\t9BDA63721CAE25E0007F2581 /* netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netdb.h; sourceTree = \"<group>\"; };\n\t\t9BDA63731CAE25E0007F2581 /* netif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netif.h; sourceTree = \"<group>\"; };\n\t\t9BDA63741CAE25E0007F2581 /* netifapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netifapi.h; sourceTree = \"<group>\"; };\n\t\t9BDA63751CAE25E0007F2581 /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opt.h; sourceTree = \"<group>\"; };\n\t\t9BDA63761CAE25E0007F2581 /* pbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pbuf.h; sourceTree = \"<group>\"; };\n\t\t9BDA63771CAE25E0007F2581 /* raw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = raw.h; sourceTree = \"<group>\"; };\n\t\t9BDA63781CAE25E0007F2581 /* sio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sio.h; sourceTree = \"<group>\"; };\n\t\t9BDA63791CAE25E0007F2581 /* snmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snmp.h; sourceTree = \"<group>\"; };\n\t\t9BDA637A1CAE25E0007F2581 /* snmp_asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snmp_asn1.h; sourceTree = \"<group>\"; };\n\t\t9BDA637B1CAE25E0007F2581 /* snmp_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snmp_msg.h; sourceTree = \"<group>\"; };\n\t\t9BDA637C1CAE25E0007F2581 /* snmp_structs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snmp_structs.h; sourceTree = \"<group>\"; };\n\t\t9BDA637D1CAE25E0007F2581 /* sockets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sockets.h; sourceTree = \"<group>\"; };\n\t\t9BDA637E1CAE25E0007F2581 /* stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stats.h; sourceTree = \"<group>\"; };\n\t\t9BDA637F1CAE25E0007F2581 /* sys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sys.h; sourceTree = \"<group>\"; };\n\t\t9BDA63801CAE25E0007F2581 /* tcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63811CAE25E0007F2581 /* tcp_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcp_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63821CAE25E0007F2581 /* tcpip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcpip.h; sourceTree = \"<group>\"; };\n\t\t9BDA63831CAE25E0007F2581 /* timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timers.h; sourceTree = \"<group>\"; };\n\t\t9BDA63841CAE25E0007F2581 /* udp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63861CAE25E0007F2581 /* etharp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = etharp.h; sourceTree = \"<group>\"; };\n\t\t9BDA63871CAE25E0007F2581 /* ppp_oe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ppp_oe.h; sourceTree = \"<group>\"; };\n\t\t9BDA63881CAE25E0007F2581 /* slipif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = slipif.h; sourceTree = \"<group>\"; };\n\t\t9BDA638A1CAE25E0007F2581 /* netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netdb.h; sourceTree = \"<group>\"; };\n\t\t9BDA638C1CAE25E0007F2581 /* socket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socket.h; sourceTree = \"<group>\"; };\n\t\t9BDA638E1CAE25E0007F2581 /* arp_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arp_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA638F1CAE25E0007F2581 /* array_length.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = array_length.h; sourceTree = \"<group>\"; };\n\t\t9BDA63901CAE25E0007F2581 /* ascii_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ascii_utils.h; sourceTree = \"<group>\"; };\n\t\t9BDA63911CAE25E0007F2581 /* balign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = balign.h; sourceTree = \"<group>\"; };\n\t\t9BDA63921CAE25E0007F2581 /* balloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = balloc.h; sourceTree = \"<group>\"; };\n\t\t9BDA63931CAE25E0007F2581 /* blimits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blimits.h; sourceTree = \"<group>\"; };\n\t\t9BDA63941CAE25E0007F2581 /* BRefTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BRefTarget.h; sourceTree = \"<group>\"; };\n\t\t9BDA63951CAE25E0007F2581 /* bsize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bsize.h; sourceTree = \"<group>\"; };\n\t\t9BDA63961CAE25E0007F2581 /* bsort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bsort.h; sourceTree = \"<group>\"; };\n\t\t9BDA63971CAE25E0007F2581 /* bstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bstring.h; sourceTree = \"<group>\"; };\n\t\t9BDA63981CAE25E0007F2581 /* byteorder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = byteorder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63991CAE25E0007F2581 /* cmdline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cmdline.h; sourceTree = \"<group>\"; };\n\t\t9BDA639A1CAE25E0007F2581 /* compare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compare.h; sourceTree = \"<group>\"; };\n\t\t9BDA639B1CAE25E0007F2581 /* concat_strings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = concat_strings.h; sourceTree = \"<group>\"; };\n\t\t9BDA639C1CAE25E0007F2581 /* dead.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dead.h; sourceTree = \"<group>\"; };\n\t\t9BDA639D1CAE25E0007F2581 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = \"<group>\"; };\n\t\t9BDA639E1CAE25E0007F2581 /* debugcounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debugcounter.h; sourceTree = \"<group>\"; };\n\t\t9BDA639F1CAE25E0007F2581 /* debugerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debugerror.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A01CAE25E0007F2581 /* dhcp_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dhcp_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A11CAE25E0007F2581 /* ethernet_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ethernet_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A21CAE25E0007F2581 /* exparray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = exparray.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A31CAE25E0007F2581 /* expstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expstring.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A41CAE25E0007F2581 /* find_char.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = find_char.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A51CAE25E0007F2581 /* find_program.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = find_program.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A61CAE25E0007F2581 /* get_iface_info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = get_iface_info.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A71CAE25E0007F2581 /* grow_array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = grow_array.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A81CAE25E0007F2581 /* hashfun.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashfun.h; sourceTree = \"<group>\"; };\n\t\t9BDA63A91CAE25E0007F2581 /* igmp_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = igmp_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AA1CAE25E0007F2581 /* ipaddr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipaddr.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AB1CAE25E0007F2581 /* ipaddr6.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipaddr6.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AC1CAE25E0007F2581 /* ipv4_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipv4_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AD1CAE25E0007F2581 /* ipv6_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ipv6_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AE1CAE25E0007F2581 /* loggers_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loggers_string.h; sourceTree = \"<group>\"; };\n\t\t9BDA63AF1CAE25E0007F2581 /* loglevel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loglevel.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B01CAE25E0007F2581 /* maxalign.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = maxalign.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B11CAE25E0007F2581 /* memref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memref.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B21CAE25E0007F2581 /* merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B31CAE25E0007F2581 /* minmax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = minmax.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B41CAE25E0007F2581 /* modadd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modadd.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B51CAE25E0007F2581 /* mswsock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mswsock.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B61CAE25E0007F2581 /* nonblocking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nonblocking.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B71CAE25E0007F2581 /* nsskey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nsskey.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B81CAE25E0007F2581 /* offset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = offset.h; sourceTree = \"<group>\"; };\n\t\t9BDA63B91CAE25E0007F2581 /* open_standard_streams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = open_standard_streams.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BA1CAE25E0007F2581 /* overflow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = overflow.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BB1CAE25E0007F2581 /* packed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packed.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BC1CAE25E0007F2581 /* parse_number.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_number.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BD1CAE25E0007F2581 /* print_macros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print_macros.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BE1CAE25E0007F2581 /* read_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read_file.h; sourceTree = \"<group>\"; };\n\t\t9BDA63BF1CAE25E0007F2581 /* read_write_int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = read_write_int.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C01CAE25E0007F2581 /* socks_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = socks_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C11CAE25E0007F2581 /* sslsocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sslsocket.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C21CAE25E0007F2581 /* stdbuf_cmdline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdbuf_cmdline.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C31CAE25E0007F2581 /* strdup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = strdup.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C41CAE25E0007F2581 /* string_begins_with.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_begins_with.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C51CAE25E0007F2581 /* substring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = substring.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C61CAE25E0007F2581 /* udp_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udp_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C71CAE25E0007F2581 /* unicode_funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unicode_funcs.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C81CAE25E0007F2581 /* Utf16Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utf16Decoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63C91CAE25E0007F2581 /* Utf16Encoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utf16Encoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63CA1CAE25E0007F2581 /* Utf8Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utf8Decoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63CB1CAE25E0007F2581 /* Utf8Encoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Utf8Encoder.h; sourceTree = \"<group>\"; };\n\t\t9BDA63CC1CAE25E0007F2581 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = \"<group>\"; };\n\t\t9BDA63CD1CAE25E0007F2581 /* write_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = write_file.h; sourceTree = \"<group>\"; };\n\t\t9BDA63CF1CAE25E0007F2581 /* addr.bproto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = addr.bproto; sourceTree = \"<group>\"; };\n\t\t9BDA63D01CAE25E0007F2581 /* addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = addr.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D11CAE25E0007F2581 /* dataproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dataproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D21CAE25E0007F2581 /* fragmentproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fragmentproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D31CAE25E0007F2581 /* msgproto.bproto */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = msgproto.bproto; sourceTree = \"<group>\"; };\n\t\t9BDA63D41CAE25E0007F2581 /* msgproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msgproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D51CAE25E0007F2581 /* packetproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packetproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D61CAE25E0007F2581 /* requestproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = requestproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D71CAE25E0007F2581 /* scproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D81CAE25E0007F2581 /* spproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spproto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63D91CAE25E0007F2581 /* udpgw_proto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udpgw_proto.h; sourceTree = \"<group>\"; };\n\t\t9BDA63DB1CAE25E0007F2581 /* BSocksClient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BSocksClient.c; sourceTree = \"<group>\"; };\n\t\t9BDA63DC1CAE25E0007F2581 /* BSocksClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BSocksClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA63DE1CAE25E0007F2581 /* BAVL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BAVL.h; sourceTree = \"<group>\"; };\n\t\t9BDA63DF1CAE25E0007F2581 /* CAvl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAvl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E01CAE25E0007F2581 /* CAvl_decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAvl_decl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E11CAE25E0007F2581 /* CAvl_footer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAvl_footer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E21CAE25E0007F2581 /* CAvl_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAvl_header.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E31CAE25E0007F2581 /* CAvl_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAvl_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E41CAE25E0007F2581 /* CHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHash.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E51CAE25E0007F2581 /* CHash_decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHash_decl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E61CAE25E0007F2581 /* CHash_footer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHash_footer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E71CAE25E0007F2581 /* CHash_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHash_header.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E81CAE25E0007F2581 /* CHash_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CHash_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63E91CAE25E0007F2581 /* ChunkBuffer2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChunkBuffer2.h; sourceTree = \"<group>\"; };\n\t\t9BDA63EA1CAE25E0007F2581 /* IndexedList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedList.h; sourceTree = \"<group>\"; };\n\t\t9BDA63EB1CAE25E0007F2581 /* IndexedList_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexedList_tree.h; sourceTree = \"<group>\"; };\n\t\t9BDA63EC1CAE25E0007F2581 /* LinkedList0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkedList0.h; sourceTree = \"<group>\"; };\n\t\t9BDA63ED1CAE25E0007F2581 /* LinkedList1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkedList1.h; sourceTree = \"<group>\"; };\n\t\t9BDA63EE1CAE25E0007F2581 /* LinkedList3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkedList3.h; sourceTree = \"<group>\"; };\n\t\t9BDA63EF1CAE25E0007F2581 /* SAvl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F01CAE25E0007F2581 /* SAvl_decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl_decl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F11CAE25E0007F2581 /* SAvl_footer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl_footer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F21CAE25E0007F2581 /* SAvl_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl_header.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F31CAE25E0007F2581 /* SAvl_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F41CAE25E0007F2581 /* SAvl_tree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SAvl_tree.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F51CAE25E0007F2581 /* SLinkedList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLinkedList.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F61CAE25E0007F2581 /* SLinkedList_decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLinkedList_decl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F71CAE25E0007F2581 /* SLinkedList_footer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLinkedList_footer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F81CAE25E0007F2581 /* SLinkedList_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLinkedList_header.h; sourceTree = \"<group>\"; };\n\t\t9BDA63F91CAE25E0007F2581 /* SLinkedList_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SLinkedList_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63FA1CAE25E0007F2581 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = \"<group>\"; };\n\t\t9BDA63FB1CAE25E0007F2581 /* Vector_decl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector_decl.h; sourceTree = \"<group>\"; };\n\t\t9BDA63FC1CAE25E0007F2581 /* Vector_footer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector_footer.h; sourceTree = \"<group>\"; };\n\t\t9BDA63FD1CAE25E0007F2581 /* Vector_header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector_header.h; sourceTree = \"<group>\"; };\n\t\t9BDA63FE1CAE25E0007F2581 /* Vector_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector_impl.h; sourceTree = \"<group>\"; };\n\t\t9BDA64001CAE25E0007F2581 /* BAddr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BAddr.h; sourceTree = \"<group>\"; };\n\t\t9BDA64011CAE25E0007F2581 /* BConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BConnection.h; sourceTree = \"<group>\"; };\n\t\t9BDA64021CAE25E0007F2581 /* BConnection_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BConnection_common.c; sourceTree = \"<group>\"; };\n\t\t9BDA64031CAE25E0007F2581 /* BConnection_unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BConnection_unix.c; sourceTree = \"<group>\"; };\n\t\t9BDA64041CAE25E0007F2581 /* BConnection_unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BConnection_unix.h; sourceTree = \"<group>\"; };\n\t\t9BDA64051CAE25E0007F2581 /* BDatagram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDatagram.h; sourceTree = \"<group>\"; };\n\t\t9BDA64061CAE25E0007F2581 /* BDatagram_unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BDatagram_unix.c; sourceTree = \"<group>\"; };\n\t\t9BDA64071CAE25E0007F2581 /* BDatagram_unix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDatagram_unix.h; sourceTree = \"<group>\"; };\n\t\t9BDA64081CAE25E0007F2581 /* BNetwork.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BNetwork.c; sourceTree = \"<group>\"; };\n\t\t9BDA64091CAE25E0007F2581 /* BNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BNetwork.h; sourceTree = \"<group>\"; };\n\t\t9BDA640A1CAE25E0007F2581 /* BReactor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BReactor.h; sourceTree = \"<group>\"; };\n\t\t9BDA640B1CAE25E0007F2581 /* BReactor_badvpn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BReactor_badvpn.c; sourceTree = \"<group>\"; };\n\t\t9BDA640C1CAE25E0007F2581 /* BReactor_badvpn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BReactor_badvpn.h; sourceTree = \"<group>\"; };\n\t\t9BDA640D1CAE25E0007F2581 /* BReactor_badvpn_timerstree.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BReactor_badvpn_timerstree.h; sourceTree = \"<group>\"; };\n\t\t9BDA640E1CAE25E0007F2581 /* BSignal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BSignal.c; sourceTree = \"<group>\"; };\n\t\t9BDA640F1CAE25E0007F2581 /* BSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BSignal.h; sourceTree = \"<group>\"; };\n\t\t9BDA64101CAE25E0007F2581 /* BTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BTime.c; sourceTree = \"<group>\"; };\n\t\t9BDA64111CAE25E0007F2581 /* BTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BTime.h; sourceTree = \"<group>\"; };\n\t\t9BDA64121CAE25E0007F2581 /* BUnixSignal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BUnixSignal.c; sourceTree = \"<group>\"; };\n\t\t9BDA64131CAE25E0007F2581 /* BUnixSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BUnixSignal.h; sourceTree = \"<group>\"; };\n\t\t9BDA64151CAE25E0007F2581 /* SocksUdpGwClient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SocksUdpGwClient.c; sourceTree = \"<group>\"; };\n\t\t9BDA64161CAE25E0007F2581 /* SocksUdpGwClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocksUdpGwClient.h; sourceTree = \"<group>\"; };\n\t\t9BDA64171CAE25E0007F2581 /* tun2socks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tun2socks.c; sourceTree = \"<group>\"; };\n\t\t9BDA64181CAE25E0007F2581 /* tun2socks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tun2socks.h; sourceTree = \"<group>\"; };\n\t\t9BDA641A1CAE25E0007F2581 /* BTap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BTap.h; sourceTree = \"<group>\"; };\n\t\t9BDA641B1CAE25E0007F2581 /* BTap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BTap.m; sourceTree = \"<group>\"; };\n\t\t9BDA641D1CAE25E0007F2581 /* udpgw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = udpgw.c; sourceTree = \"<group>\"; };\n\t\t9BDA641E1CAE25E0007F2581 /* udpgw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udpgw.h; sourceTree = \"<group>\"; };\n\t\t9BDA64201CAE25E0007F2581 /* UdpGwClient.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = UdpGwClient.c; sourceTree = \"<group>\"; };\n\t\t9BDA64211CAE25E0007F2581 /* UdpGwClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UdpGwClient.h; sourceTree = \"<group>\"; };\n\t\t9BF303451CC8A1F60096588E /* LogDetailViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LogDetailViewController.swift; sourceTree = \"<group>\"; };\n\t\t9BF3034A1CCA1B060096588E /* BaseEmptyView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseEmptyView.swift; sourceTree = \"<group>\"; };\n\t\t9E603B577575916EC652D04D /* Pods-PotatsoLibrary.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoLibrary.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoLibrary/Pods-PotatsoLibrary.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA77B9512684E7D83890CCE80 /* Pods-PotatsoLibraryTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoLibraryTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoLibraryTests/Pods-PotatsoLibraryTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tA82D5011D8BAB2707009104B /* Pods-PacketProcessor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PacketProcessor.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-PacketProcessor/Pods-PacketProcessor.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tABA819ED933DB4838AE71396 /* Pods-PacketProcessor.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PacketProcessor.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-PacketProcessor/Pods-PacketProcessor.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB03E5F0D3FAB0B3302CA1A4E /* Pods_PacketTunnel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PacketTunnel.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB803A6971D02B768003EA9AA /* API.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = API.swift; sourceTree = \"<group>\"; };\n\t\tB821B0F21D5334D50061E7B9 /* ActionRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionRow.swift; sourceTree = \"<group>\"; };\n\t\tB82574A81D1D98CF007BAF40 /* Pollution.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Pollution.swift; sourceTree = \"<group>\"; };\n\t\tB829C1701D4395BC00C17B82 /* QRCodeScannerVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QRCodeScannerVC.h; sourceTree = \"<group>\"; };\n\t\tB829C1711D4395BC00C17B82 /* QRCodeScannerVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRCodeScannerVC.m; sourceTree = \"<group>\"; };\n\t\tB8319A091D1B975C001E50C2 /* RegexUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegexUtils.swift; sourceTree = \"<group>\"; };\n\t\tB8319A0E1D1BD696001E50C2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\tB8319A101D1BD699001E50C2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/Localizable.strings\"; sourceTree = \"<group>\"; };\n\t\tB8367A801D1B6D5400D50C25 /* BaseButtonRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseButtonRow.swift; sourceTree = \"<group>\"; };\n\t\tB83AA56F1D38E6F7007905B4 /* RequestDetailVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestDetailVC.swift; sourceTree = \"<group>\"; };\n\t\tB83AA5731D38E728007905B4 /* SegmentPageVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SegmentPageVC.swift; sourceTree = \"<group>\"; };\n\t\tB83AA5751D38E98A007905B4 /* RequestOverviewVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestOverviewVC.swift; sourceTree = \"<group>\"; };\n\t\tB83D3E781D2BA689007655CE /* Event.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = \"<group>\"; };\n\t\tB845513F1CF83D07005779CD /* HomeVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomeVC.swift; sourceTree = \"<group>\"; };\n\t\tB84551411CF878BD005779CD /* ConfigGroupChooseVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigGroupChooseVC.swift; sourceTree = \"<group>\"; };\n\t\tB86B08E31D17F84900613014 /* ShadowPath.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = ShadowPath.xcodeproj; path = Library/ShadowPath/ShadowPath.xcodeproj; sourceTree = SOURCE_ROOT; };\n\t\tB87A04391D193ABC001132F2 /* LoggerUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoggerUtils.swift; sourceTree = \"<group>\"; };\n\t\tB87B98031D3B423B00FA66BF /* PaddingLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PaddingLabel.swift; sourceTree = \"<group>\"; };\n\t\tB87B98091D3B64BE00FA66BF /* RequestEventRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestEventRow.swift; sourceTree = \"<group>\"; };\n\t\tB88096B11D0652F0008BEB87 /* RuleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuleCell.swift; sourceTree = \"<group>\"; };\n\t\tB88559EA1D21319D00B1243E /* YAML.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = YAML.framework; path = Carthage/Build/iOS/YAML.framework; sourceTree = \"<group>\"; };\n\t\tB8C256AF1D1A957A0074D3B1 /* HomePresenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HomePresenter.swift; sourceTree = \"<group>\"; };\n\t\tB8CCC6DC1CFD5D5D000E7E2E /* CollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewController.swift; sourceTree = \"<group>\"; };\n\t\tB8CCC6E01CFDCADC000E7E2E /* RuleSetListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuleSetListViewController.swift; sourceTree = \"<group>\"; };\n\t\tB8CCC6E41CFDCFD8000E7E2E /* RuleSetCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RuleSetCell.swift; sourceTree = \"<group>\"; };\n\t\tB8CCC6E61CFDD99E000E7E2E /* ProxyListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ProxyListViewController.swift; sourceTree = \"<group>\"; };\n\t\tB8CCC6EA1CFF1501000E7E2E /* ProxyRow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ProxyRow.swift; path = ../ProxyRow.swift; sourceTree = \"<group>\"; };\n\t\tB8D7F1831D518FF000B115F3 /* DBUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DBUtils.swift; sourceTree = \"<group>\"; };\n\t\tB8D8CC091D506CB900CE6C0D /* Localized.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Localized.swift; sourceTree = \"<group>\"; };\n\t\tB8EAC5921D40BF310046963C /* TunnelError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TunnelError.h; sourceTree = \"<group>\"; };\n\t\tB8EAC5931D40BF310046963C /* TunnelError.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TunnelError.m; sourceTree = \"<group>\"; };\n\t\tB8F7845B1D36760D00F02FF5 /* DashboardVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DashboardVC.swift; sourceTree = \"<group>\"; };\n\t\tB8F784651D3678B400F02FF5 /* Settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = \"<group>\"; };\n\t\tB8F784661D3678B400F02FF5 /* Settings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Settings.m; sourceTree = \"<group>\"; };\n\t\tDFAF05C4CA29869A03E25A65 /* Pods_PotatsoLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PotatsoLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tF5F5D562F9497CEBA25A466F /* Pods-PotatsoLibrary.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-PotatsoLibrary.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-PotatsoLibrary/Pods-PotatsoLibrary.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t9B0CFA081C1C0B1A007BD7C6 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB86B08ED1D17FB9B00613014 /* ShadowPath.framework in Frameworks */,\n\t\t\t\t9BC600241CB2921C00E5EA61 /* PotatsoBase.framework in Frameworks */,\n\t\t\t\t9BDA62621CAE2576007F2581 /* PacketProcessor.framework in Frameworks */,\n\t\t\t\t9B9B15C41C21595B000B6541 /* PotatsoLibrary.framework in Frameworks */,\n\t\t\t\t9BC6FFF11CB28B4B00E5EA61 /* PotatsoModel.framework in Frameworks */,\n\t\t\t\t553D95BB1D63FE6700B193B7 /* NetworkExtension.framework in Frameworks */,\n\t\t\t\t234575943B38F4EAD3E2B481 /* Pods_Potatso.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8193AF1CBCFEE700BE320D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB88559F01D21371A00B1243E /* PotatsoModel.framework in Frameworks */,\n\t\t\t\t553D95BD1D63FEDF00B193B7 /* NetworkExtension.framework in Frameworks */,\n\t\t\t\t9B8193DC1CBDE68100BE320D /* PotatsoBase.framework in Frameworks */,\n\t\t\t\t9B8193DD1CBDE68100BE320D /* PotatsoLibrary.framework in Frameworks */,\n\t\t\t\t9B8193B41CBCFEE700BE320D /* NotificationCenter.framework in Frameworks */,\n\t\t\t\t671F4F760B4AA48CEDC1B834 /* Pods_TodayWidget.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8705F71C1D788F00651424 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB86B08EC1D17F85800613014 /* ShadowPath.framework in Frameworks */,\n\t\t\t\t553D95BC1D63FECA00B193B7 /* NetworkExtension.framework in Frameworks */,\n\t\t\t\t9BC600361CB29AFF00E5EA61 /* PotatsoBase.framework in Frameworks */,\n\t\t\t\t9BCE27AF1CAE535800B1E561 /* PacketProcessor.framework in Frameworks */,\n\t\t\t\t9B87060D1C1DBDD400651424 /* libresolv.tbd in Frameworks */,\n\t\t\t\tA4564DF27925368D6CA67F7D /* Pods_PacketTunnel.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B9B15B91C21595B000B6541 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BC600351CB29AEE00E5EA61 /* PotatsoBase.framework in Frameworks */,\n\t\t\t\t9BC6FFF61CB28C4500E5EA61 /* PotatsoModel.framework in Frameworks */,\n\t\t\t\tFE9B3692D19B03821360B886 /* Pods_PotatsoLibrary.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC600191CB2921C00E5EA61 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6FFE61CB28B4B00E5EA61 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B32477B1CC091CF00A3BAFF /* PotatsoBase.framework in Frameworks */,\n\t\t\t\t6BF89D48551DF9EC9D65F0BA /* Pods_PotatsoModel.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BDA62571CAE2576007F2581 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BCE27A51CAE412E00B1E561 /* libresolv.tbd in Frameworks */,\n\t\t\t\tA5E749DA2197E384CBCBA84B /* Pods_PacketProcessor.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t054CE3BF954F7C0FD88A3E0B /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA82D5011D8BAB2707009104B /* Pods-PacketProcessor.debug.xcconfig */,\n\t\t\t\tABA819ED933DB4838AE71396 /* Pods-PacketProcessor.release.xcconfig */,\n\t\t\t\t8AB4A0AD4E706A738479B24F /* Pods-PacketTunnel.debug.xcconfig */,\n\t\t\t\t50F18DE964A0791935D07268 /* Pods-PacketTunnel.release.xcconfig */,\n\t\t\t\t5800BF48973D41E6DFC2DF35 /* Pods-Potatso.debug.xcconfig */,\n\t\t\t\t89E573E7B926BE00ECB260CC /* Pods-Potatso.release.xcconfig */,\n\t\t\t\t9E603B577575916EC652D04D /* Pods-PotatsoLibrary.debug.xcconfig */,\n\t\t\t\tF5F5D562F9497CEBA25A466F /* Pods-PotatsoLibrary.release.xcconfig */,\n\t\t\t\t5230B5D70A0595F06A9F15F8 /* Pods-PotatsoLibraryTests.debug.xcconfig */,\n\t\t\t\tA77B9512684E7D83890CCE80 /* Pods-PotatsoLibraryTests.release.xcconfig */,\n\t\t\t\t66AB52504A6434A50F434876 /* Pods-TodayWidget.debug.xcconfig */,\n\t\t\t\t86E310DB3E84260841595217 /* Pods-TodayWidget.release.xcconfig */,\n\t\t\t\t6779B40186E2772C79CE2A52 /* Pods-PotatsoModel.debug.xcconfig */,\n\t\t\t\t13357BD365CD7C295F1BA3C0 /* Pods-PotatsoModel.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t55B9801D1F08D3C9007E96BE /* Appirater */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t55B9801E1F08D3C9007E96BE /* Appirater.h */,\n\t\t\t\t55B9801F1F08D3C9007E96BE /* Appirater.m */,\n\t\t\t\t55B980201F08D3C9007E96BE /* AppiraterDelegate.h */,\n\t\t\t\t55B980211F08D3C9007E96BE /* AppiraterLocalizable.strings */,\n\t\t\t);\n\t\t\tpath = Appirater;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B07D6B11CB7A6A900182C1B /* PotatsoLibraryTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B07D6B21CB7A6A900182C1B /* PotatsoLibraryTests.swift */,\n\t\t\t\t9B07D6B41CB7A6A900182C1B /* Info.plist */,\n\t\t\t);\n\t\t\tpath = PotatsoLibraryTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0CFA021C1C0B1A007BD7C6 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0CFA0D1C1C0B1B007BD7C6 /* Potatso */,\n\t\t\t\t9B8705FB1C1D788F00651424 /* PacketTunnel */,\n\t\t\t\t9B8193B51CBCFEE700BE320D /* TodayWidget */,\n\t\t\t\t9B9B15BE1C21595B000B6541 /* PotatsoLibrary */,\n\t\t\t\t9B07D6B11CB7A6A900182C1B /* PotatsoLibraryTests */,\n\t\t\t\t9BDA625C1CAE2576007F2581 /* PacketProcessor */,\n\t\t\t\t9BC6FFEB1CB28B4B00E5EA61 /* PotatsoModel */,\n\t\t\t\t9BC6001E1CB2921C00E5EA61 /* PotatsoBase */,\n\t\t\t\t9B0CFA0C1C1C0B1B007BD7C6 /* Products */,\n\t\t\t\tC8B2149E8757C44C469576D2 /* Frameworks */,\n\t\t\t\t054CE3BF954F7C0FD88A3E0B /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0CFA0C1C1C0B1B007BD7C6 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0CFA0B1C1C0B1B007BD7C6 /* Potatso.app */,\n\t\t\t\t9B8705FA1C1D788F00651424 /* PacketTunnel.appex */,\n\t\t\t\t9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */,\n\t\t\t\t9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */,\n\t\t\t\t9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */,\n\t\t\t\t9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */,\n\t\t\t\t9B8193B21CBCFEE700BE320D /* TodayWidget.appex */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0CFA0D1C1C0B1B007BD7C6 /* Potatso */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t551AE8451F0A435C009265E2 /* InfoPlist.strings */,\n\t\t\t\t553D95B91D63FE5A00B193B7 /* Potatso.entitlements */,\n\t\t\t\t9BC8589F1C33B00200992032 /* Potatso-Bridge-Header.h */,\n\t\t\t\t9B0CFA0E1C1C0B1B007BD7C6 /* AppDelegate.swift */,\n\t\t\t\t9B1F745F1C2F84250028C1A6 /* AppInitializer.swift */,\n\t\t\t\t9B2290FE1C8E5B9600EEC901 /* DataInitializer.swift */,\n\t\t\t\t9B8193EC1CBE4DCA00BE320D /* UrlHandler.swift */,\n\t\t\t\t9B1F74611C2F85540028C1A6 /* UIManager.swift */,\n\t\t\t\t9B54CC431C1C266C00DDEEBB /* UIViewControllerExtensions.swift */,\n\t\t\t\t9B5C00221CBFB315008DDE7A /* Home */,\n\t\t\t\t9BB3F74D1CC6303700C2DD05 /* Dashboard */,\n\t\t\t\t9B9073491CC1D7EB00A3185A /* Manage */,\n\t\t\t\t9B3247831CC0C9D600A3BAFF /* Settings */,\n\t\t\t\t9B3247841CC0D00D00A3BAFF /* Edit */,\n\t\t\t\t9BC858581C32CEFB00992032 /* Core */,\n\t\t\t\t9BC858571C32B4AB00992032 /* Base */,\n\t\t\t\t9B17F8EC1C53392D00679FCB /* Utils */,\n\t\t\t\t9B1F745D1C2F83AD0028C1A6 /* config.plist */,\n\t\t\t\t9B0CFA151C1C0B1B007BD7C6 /* Assets.xcassets */,\n\t\t\t\t9B0CFA171C1C0B1B007BD7C6 /* LaunchScreen.storyboard */,\n\t\t\t\t9B0CFA1A1C1C0B1B007BD7C6 /* Info.plist */,\n\t\t\t\tB8319A0F1D1BD696001E50C2 /* Localizable.strings */,\n\t\t\t\t55D8A4631F11023C001819CF /* Mume.swift */,\n\t\t\t);\n\t\t\tpath = Potatso;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B17F8EC1C53392D00679FCB /* Utils */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B17F8EF1C533BBF00679FCB /* Color.swift */,\n\t\t\t\t9B1D9B7A1CA4C45F0078D814 /* HUDUtils.swift */,\n\t\t\t\t9BD4CAC91CB9600D00F99BF9 /* AlertUtils.swift */,\n\t\t\t\t9BB3F7431CC60B6F00C2DD05 /* Error.swift */,\n\t\t\t\tB87A04391D193ABC001132F2 /* LoggerUtils.swift */,\n\t\t\t\tB8319A091D1B975C001E50C2 /* RegexUtils.swift */,\n\t\t\t\tB83D3E781D2BA689007655CE /* Event.swift */,\n\t\t\t\t556E68E91EFFA76E00BD84ED /* ProxyUtils.swift */,\n\t\t\t);\n\t\t\tpath = Utils;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B3247831CC0C9D600A3BAFF /* Settings */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B17F8EA1C53379700679FCB /* SettingsViewController.swift */,\n\t\t\t);\n\t\t\tname = Settings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B3247841CC0D00D00A3BAFF /* Edit */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t55D8A4831F139BD8001819CF /* CloudProxyDetailViewController.swift */,\n\t\t\t\t9B5E13B91C897870007DFE0A /* ProxyConfigurationViewController.swift */,\n\t\t\t\t9BB62FA21C8FFC1D002ADC54 /* RuleSetConfigurationViewController.swift */,\n\t\t\t\t9B76EEAC1C9005D2002BF5D1 /* RuleConfigurationViewController.swift */,\n\t\t\t\t9B76EEB61C90740C002BF5D1 /* RuleSetsSelectionViewController.swift */,\n\t\t\t\t9B76EEB81C911CBF002BF5D1 /* ProxySelectionViewController.swift */,\n\t\t\t);\n\t\t\tname = Edit;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B5C00221CBFB315008DDE7A /* Home */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB845513F1CF83D07005779CD /* HomeVC.swift */,\n\t\t\t\tB8C256AF1D1A957A0074D3B1 /* HomePresenter.swift */,\n\t\t\t\tB84551411CF878BD005779CD /* ConfigGroupChooseVC.swift */,\n\t\t\t\t9B5C00251CBFB35C008DDE7A /* ConfigGroupCell.swift */,\n\t\t\t);\n\t\t\tname = Home;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B8193B51CBCFEE700BE320D /* TodayWidget */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t55D4FC101F0E5A470038594D /* InfoPlist.strings */,\n\t\t\t\t9B8193DA1CBD25BB00BE320D /* TodayWidget.entitlements */,\n\t\t\t\t9B8193B61CBCFEE700BE320D /* TodayViewController.swift */,\n\t\t\t\t9B8193E11CBDF27000BE320D /* CurrentGroupCell.swift */,\n\t\t\t\t9B8193B81CBCFEE700BE320D /* MainInterface.storyboard */,\n\t\t\t\t9BB3F7491CC60CBE00C2DD05 /* Localizable.strings */,\n\t\t\t\t9B8193BB1CBCFEE700BE320D /* Info.plist */,\n\t\t\t);\n\t\t\tpath = TodayWidget;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B8285381CE20DE40027D15C /* QRCode */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B82853B1CE20DE40027D15C /* HMScanner.bundle */,\n\t\t\t\t9B82853C1CE20DE40027D15C /* HMScanner.h */,\n\t\t\t\t9B82853D1CE20DE40027D15C /* HMScanner.m */,\n\t\t\t\tB829C1701D4395BC00C17B82 /* QRCodeScannerVC.h */,\n\t\t\t\tB829C1711D4395BC00C17B82 /* QRCodeScannerVC.m */,\n\t\t\t);\n\t\t\tpath = QRCode;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B8705FB1C1D788F00651424 /* PacketTunnel */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B8705FE1C1D788F00651424 /* PacketTunnelProvider.h */,\n\t\t\t\t9B8705FF1C1D788F00651424 /* PacketTunnelProvider.m */,\n\t\t\t\t9B2D8C891C7C3F5B00CC65B3 /* ProxyManager.h */,\n\t\t\t\t9B2D8C8A1C7C3F5B00CC65B3 /* ProxyManager.m */,\n\t\t\t\t9B8706091C1DBCCD00651424 /* dns.h */,\n\t\t\t\t9B87060A1C1DBCCD00651424 /* dns.m */,\n\t\t\t\tB8EAC5921D40BF310046963C /* TunnelError.h */,\n\t\t\t\tB8EAC5931D40BF310046963C /* TunnelError.m */,\n\t\t\t\tB86B08E31D17F84900613014 /* ShadowPath.xcodeproj */,\n\t\t\t\t9B8706011C1D788F00651424 /* Info.plist */,\n\t\t\t\t9B8705FC1C1D788F00651424 /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = PacketTunnel;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B8705FC1C1D788F00651424 /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B8705FD1C1D788F00651424 /* PacketTunnel.entitlements */,\n\t\t\t);\n\t\t\tpath = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B9073491CC1D7EB00A3185A /* Manage */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8CCC6DC1CFD5D5D000E7E2E /* CollectionViewController.swift */,\n\t\t\t\tB8CCC6E01CFDCADC000E7E2E /* RuleSetListViewController.swift */,\n\t\t\t\tB8CCC6E41CFDCFD8000E7E2E /* RuleSetCell.swift */,\n\t\t\t\tB8CCC6E61CFDD99E000E7E2E /* ProxyListViewController.swift */,\n\t\t\t\tB88096B11D0652F0008BEB87 /* RuleCell.swift */,\n\t\t\t);\n\t\t\tname = Manage;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B9B15BE1C21595B000B6541 /* PotatsoLibrary */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B9B15BF1C21595B000B6541 /* PotatsoLibrary.h */,\n\t\t\t\t9BC215CB1CB5E584002AADD1 /* Manager.swift */,\n\t\t\t\t9BC215C61CB51148002AADD1 /* Config.swift */,\n\t\t\t\t9BB3F73E1CC60B5300C2DD05 /* Image.swift */,\n\t\t\t\t9B9B15C11C21595B000B6541 /* Info.plist */,\n\t\t\t\tB82574A81D1D98CF007BAF40 /* Pollution.swift */,\n\t\t\t);\n\t\t\tpath = PotatsoLibrary;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BB3F74D1CC6303700C2DD05 /* Dashboard */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8F7845B1D36760D00F02FF5 /* DashboardVC.swift */,\n\t\t\t\t9BB3F74E1CC6308000C2DD05 /* RecentRequestsVC.swift */,\n\t\t\t\tB83AA56F1D38E6F7007905B4 /* RequestDetailVC.swift */,\n\t\t\t\tB83AA5751D38E98A007905B4 /* RequestOverviewVC.swift */,\n\t\t\t\t9BB3F73B1CC3D3DE00C2DD05 /* RecentRequestsCell.swift */,\n\t\t\t\t9B8750541CC761D000A11715 /* RequestModel.swift */,\n\t\t\t\t9BF303451CC8A1F60096588E /* LogDetailViewController.swift */,\n\t\t\t);\n\t\t\tname = Dashboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BC6001E1CB2921C00E5EA61 /* PotatsoBase */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BC6001F1CB2921C00E5EA61 /* PotatsoBase.h */,\n\t\t\t\tB8D8CC091D506CB900CE6C0D /* Localized.swift */,\n\t\t\t\t9BC600291CB2922E00E5EA61 /* Potatso.h */,\n\t\t\t\t9BC6002A1CB2922E00E5EA61 /* Potatso.m */,\n\t\t\t\tB8F784651D3678B400F02FF5 /* Settings.h */,\n\t\t\t\tB8F784661D3678B400F02FF5 /* Settings.m */,\n\t\t\t\t9BC6002D1CB299DE00E5EA61 /* JSONUtils.h */,\n\t\t\t\t9BC6002E1CB299DE00E5EA61 /* JSONUtils.m */,\n\t\t\t\t9BC6002F1CB299DE00E5EA61 /* NSError+Helper.h */,\n\t\t\t\t9BC600301CB299DE00E5EA61 /* NSError+Helper.m */,\n\t\t\t\t9BC600211CB2921C00E5EA61 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = PotatsoBase;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BC6FFEB1CB28B4B00E5EA61 /* PotatsoModel */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BC6FFEC1CB28B4B00E5EA61 /* PotatsoModel.h */,\n\t\t\t\t9BC215BA1CB4DAE6002AADD1 /* BaseModel.swift */,\n\t\t\t\t9BC215B81CB4DA9E002AADD1 /* Proxy.swift */,\n\t\t\t\t9BC215BC1CB4DE6B002AADD1 /* Rule.swift */,\n\t\t\t\t9BC215BE1CB4E06C002AADD1 /* RuleSet.swift */,\n\t\t\t\t9BC215C01CB5083B002AADD1 /* ConfigurationGroup.swift */,\n\t\t\t\tB8D7F1831D518FF000B115F3 /* DBUtils.swift */,\n\t\t\t\t9BC6FFEE1CB28B4B00E5EA61 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = PotatsoModel;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BC858571C32B4AB00992032 /* Base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t55B9801D1F08D3C9007E96BE /* Appirater */,\n\t\t\t\tB8C256AC1D1A93CC0074D3B1 /* View */,\n\t\t\t\t9B8285381CE20DE40027D15C /* QRCode */,\n\t\t\t\t9BC858A41C33D30100992032 /* BaseSafariViewController.swift */,\n\t\t\t\t9BF3034A1CCA1B060096588E /* BaseEmptyView.swift */,\n\t\t\t\tB8367A841D1B6D6800D50C25 /* Row */,\n\t\t\t\tB83AA5731D38E728007905B4 /* SegmentPageVC.swift */,\n\t\t\t);\n\t\t\tpath = Base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BC858581C32CEFB00992032 /* Core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9B1F74751C3164AC0028C1A6 /* VPN.swift */,\n\t\t\t\t9B3247891CC0F1D200A3BAFF /* Importer.swift */,\n\t\t\t\tB803A6971D02B768003EA9AA /* API.swift */,\n\t\t\t);\n\t\t\tpath = Core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA625C1CAE2576007F2581 /* PacketProcessor */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62671CAE25E0007F2581 /* tun2socks-iOS */,\n\t\t\t\t9BDA625D1CAE2576007F2581 /* PacketProcessor.h */,\n\t\t\t\t9BCE27A71CAE428200B1E561 /* TunnelInterface.h */,\n\t\t\t\t9BCE27A81CAE428200B1E561 /* TunnelInterface.m */,\n\t\t\t\t9BDA625F1CAE2576007F2581 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = PacketProcessor;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA62671CAE25E0007F2581 /* tun2socks-iOS */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62681CAE25E0007F2581 /* base */,\n\t\t\t\t9BDA62731CAE25E0007F2581 /* flow */,\n\t\t\t\t9BDA628F1CAE25E0007F2581 /* flowextra */,\n\t\t\t\t9BDA62921CAE25E0007F2581 /* generated */,\n\t\t\t\t9BDA632B1CAE25E0007F2581 /* lwip */,\n\t\t\t\t9BDA638D1CAE25E0007F2581 /* misc */,\n\t\t\t\t9BDA63CE1CAE25E0007F2581 /* protocol */,\n\t\t\t\t9BDA63DA1CAE25E0007F2581 /* socksclient */,\n\t\t\t\t9BDA63DD1CAE25E0007F2581 /* structure */,\n\t\t\t\t9BDA63FF1CAE25E0007F2581 /* system */,\n\t\t\t\t9BDA64141CAE25E0007F2581 /* tun2socks */,\n\t\t\t\t9BDA64191CAE25E0007F2581 /* tuntap */,\n\t\t\t\t9BDA641C1CAE25E0007F2581 /* udpgw */,\n\t\t\t\t9BDA641F1CAE25E0007F2581 /* udpgw_client */,\n\t\t\t);\n\t\t\tpath = \"tun2socks-iOS\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA62681CAE25E0007F2581 /* base */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62691CAE25E0007F2581 /* BLog.h */,\n\t\t\t\t9BDA626A1CAE25E0007F2581 /* BLog.m */,\n\t\t\t\t9BDA626B1CAE25E0007F2581 /* BLog_syslog.c */,\n\t\t\t\t9BDA626C1CAE25E0007F2581 /* BLog_syslog.h */,\n\t\t\t\t9BDA626D1CAE25E0007F2581 /* BMutex.h */,\n\t\t\t\t9BDA626E1CAE25E0007F2581 /* BPending.c */,\n\t\t\t\t9BDA626F1CAE25E0007F2581 /* BPending.h */,\n\t\t\t\t9BDA62701CAE25E0007F2581 /* BPending_list.h */,\n\t\t\t\t9BDA62711CAE25E0007F2581 /* DebugObject.c */,\n\t\t\t\t9BDA62721CAE25E0007F2581 /* DebugObject.h */,\n\t\t\t);\n\t\t\tpath = base;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA62731CAE25E0007F2581 /* flow */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62741CAE25E0007F2581 /* BufferWriter.c */,\n\t\t\t\t9BDA62751CAE25E0007F2581 /* BufferWriter.h */,\n\t\t\t\t9BDA62761CAE25E0007F2581 /* PacketBuffer.c */,\n\t\t\t\t9BDA62771CAE25E0007F2581 /* PacketBuffer.h */,\n\t\t\t\t9BDA62781CAE25E0007F2581 /* PacketPassConnector.c */,\n\t\t\t\t9BDA62791CAE25E0007F2581 /* PacketPassConnector.h */,\n\t\t\t\t9BDA627A1CAE25E0007F2581 /* PacketPassFairQueue.c */,\n\t\t\t\t9BDA627B1CAE25E0007F2581 /* PacketPassFairQueue.h */,\n\t\t\t\t9BDA627C1CAE25E0007F2581 /* PacketPassFairQueue_tree.h */,\n\t\t\t\t9BDA627D1CAE25E0007F2581 /* PacketPassInterface.c */,\n\t\t\t\t9BDA627E1CAE25E0007F2581 /* PacketPassInterface.h */,\n\t\t\t\t9BDA627F1CAE25E0007F2581 /* PacketProtoDecoder.c */,\n\t\t\t\t9BDA62801CAE25E0007F2581 /* PacketProtoDecoder.h */,\n\t\t\t\t9BDA62811CAE25E0007F2581 /* PacketProtoEncoder.c */,\n\t\t\t\t9BDA62821CAE25E0007F2581 /* PacketProtoEncoder.h */,\n\t\t\t\t9BDA62831CAE25E0007F2581 /* PacketProtoFlow.c */,\n\t\t\t\t9BDA62841CAE25E0007F2581 /* PacketProtoFlow.h */,\n\t\t\t\t9BDA62851CAE25E0007F2581 /* PacketRecvInterface.c */,\n\t\t\t\t9BDA62861CAE25E0007F2581 /* PacketRecvInterface.h */,\n\t\t\t\t9BDA62871CAE25E0007F2581 /* PacketStreamSender.c */,\n\t\t\t\t9BDA62881CAE25E0007F2581 /* PacketStreamSender.h */,\n\t\t\t\t9BDA62891CAE25E0007F2581 /* SinglePacketBuffer.c */,\n\t\t\t\t9BDA628A1CAE25E0007F2581 /* SinglePacketBuffer.h */,\n\t\t\t\t9BDA628B1CAE25E0007F2581 /* StreamPassInterface.c */,\n\t\t\t\t9BDA628C1CAE25E0007F2581 /* StreamPassInterface.h */,\n\t\t\t\t9BDA628D1CAE25E0007F2581 /* StreamRecvInterface.c */,\n\t\t\t\t9BDA628E1CAE25E0007F2581 /* StreamRecvInterface.h */,\n\t\t\t);\n\t\t\tpath = flow;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA628F1CAE25E0007F2581 /* flowextra */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62901CAE25E0007F2581 /* PacketPassInactivityMonitor.c */,\n\t\t\t\t9BDA62911CAE25E0007F2581 /* PacketPassInactivityMonitor.h */,\n\t\t\t);\n\t\t\tpath = flowextra;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA62921CAE25E0007F2581 /* generated */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA62931CAE25E0007F2581 /* blog_channel_addr.h */,\n\t\t\t\t9BDA62941CAE25E0007F2581 /* blog_channel_BArpProbe.h */,\n\t\t\t\t9BDA62951CAE25E0007F2581 /* blog_channel_BConnection.h */,\n\t\t\t\t9BDA62961CAE25E0007F2581 /* blog_channel_BDatagram.h */,\n\t\t\t\t9BDA62971CAE25E0007F2581 /* blog_channel_BDHCPClient.h */,\n\t\t\t\t9BDA62981CAE25E0007F2581 /* blog_channel_BDHCPClientCore.h */,\n\t\t\t\t9BDA62991CAE25E0007F2581 /* blog_channel_BEncryption.h */,\n\t\t\t\t9BDA629A1CAE25E0007F2581 /* blog_channel_BInputProcess.h */,\n\t\t\t\t9BDA629B1CAE25E0007F2581 /* blog_channel_BLockReactor.h */,\n\t\t\t\t9BDA629C1CAE25E0007F2581 /* blog_channel_BNetwork.h */,\n\t\t\t\t9BDA629D1CAE25E0007F2581 /* blog_channel_BPredicate.h */,\n\t\t\t\t9BDA629E1CAE25E0007F2581 /* blog_channel_BProcess.h */,\n\t\t\t\t9BDA629F1CAE25E0007F2581 /* blog_channel_BReactor.h */,\n\t\t\t\t9BDA62A01CAE25E0007F2581 /* blog_channel_BSignal.h */,\n\t\t\t\t9BDA62A11CAE25E0007F2581 /* blog_channel_BSocksClient.h */,\n\t\t\t\t9BDA62A21CAE25E0007F2581 /* blog_channel_BSSLConnection.h */,\n\t\t\t\t9BDA62A31CAE25E0007F2581 /* blog_channel_BTap.h */,\n\t\t\t\t9BDA62A41CAE25E0007F2581 /* blog_channel_BThreadSignal.h */,\n\t\t\t\t9BDA62A51CAE25E0007F2581 /* blog_channel_BThreadWork.h */,\n\t\t\t\t9BDA62A61CAE25E0007F2581 /* blog_channel_BTime.h */,\n\t\t\t\t9BDA62A71CAE25E0007F2581 /* blog_channel_BUnixSignal.h */,\n\t\t\t\t9BDA62A81CAE25E0007F2581 /* blog_channel_client.h */,\n\t\t\t\t9BDA62A91CAE25E0007F2581 /* blog_channel_DatagramPeerIO.h */,\n\t\t\t\t9BDA62AA1CAE25E0007F2581 /* blog_channel_DataProto.h */,\n\t\t\t\t9BDA62AB1CAE25E0007F2581 /* blog_channel_dostest_attacker.h */,\n\t\t\t\t9BDA62AC1CAE25E0007F2581 /* blog_channel_dostest_server.h */,\n\t\t\t\t9BDA62AD1CAE25E0007F2581 /* blog_channel_DPReceive.h */,\n\t\t\t\t9BDA62AE1CAE25E0007F2581 /* blog_channel_DPRelay.h */,\n\t\t\t\t9BDA62AF1CAE25E0007F2581 /* blog_channel_flooder.h */,\n\t\t\t\t9BDA62B01CAE25E0007F2581 /* blog_channel_FragmentProtoAssembler.h */,\n\t\t\t\t9BDA62B11CAE25E0007F2581 /* blog_channel_FrameDecider.h */,\n\t\t\t\t9BDA62B21CAE25E0007F2581 /* blog_channel_LineBuffer.h */,\n\t\t\t\t9BDA62B31CAE25E0007F2581 /* blog_channel_Listener.h */,\n\t\t\t\t9BDA62B41CAE25E0007F2581 /* blog_channel_lwip.h */,\n\t\t\t\t9BDA62B51CAE25E0007F2581 /* blog_channel_ncd.h */,\n\t\t\t\t9BDA62B61CAE25E0007F2581 /* blog_channel_ncd_alias.h */,\n\t\t\t\t9BDA62B71CAE25E0007F2581 /* blog_channel_ncd_arithmetic.h */,\n\t\t\t\t9BDA62B81CAE25E0007F2581 /* blog_channel_ncd_assert.h */,\n\t\t\t\t9BDA62B91CAE25E0007F2581 /* blog_channel_ncd_backtrack.h */,\n\t\t\t\t9BDA62BA1CAE25E0007F2581 /* blog_channel_ncd_basic_functions.h */,\n\t\t\t\t9BDA62BB1CAE25E0007F2581 /* blog_channel_ncd_blocker.h */,\n\t\t\t\t9BDA62BC1CAE25E0007F2581 /* blog_channel_ncd_buffer.h */,\n\t\t\t\t9BDA62BD1CAE25E0007F2581 /* blog_channel_ncd_call2.h */,\n\t\t\t\t9BDA62BE1CAE25E0007F2581 /* blog_channel_ncd_choose.h */,\n\t\t\t\t9BDA62BF1CAE25E0007F2581 /* blog_channel_ncd_concat.h */,\n\t\t\t\t9BDA62C01CAE25E0007F2581 /* blog_channel_ncd_daemon.h */,\n\t\t\t\t9BDA62C11CAE25E0007F2581 /* blog_channel_ncd_depend.h */,\n\t\t\t\t9BDA62C21CAE25E0007F2581 /* blog_channel_ncd_depend_scope.h */,\n\t\t\t\t9BDA62C31CAE25E0007F2581 /* blog_channel_ncd_dynamic_depend.h */,\n\t\t\t\t9BDA62C41CAE25E0007F2581 /* blog_channel_ncd_exit.h */,\n\t\t\t\t9BDA62C51CAE25E0007F2581 /* blog_channel_ncd_explode.h */,\n\t\t\t\t9BDA62C61CAE25E0007F2581 /* blog_channel_ncd_file.h */,\n\t\t\t\t9BDA62C71CAE25E0007F2581 /* blog_channel_ncd_file_open.h */,\n\t\t\t\t9BDA62C81CAE25E0007F2581 /* blog_channel_ncd_foreach.h */,\n\t\t\t\t9BDA62C91CAE25E0007F2581 /* blog_channel_ncd_from_string.h */,\n\t\t\t\t9BDA62CA1CAE25E0007F2581 /* blog_channel_ncd_getargs.h */,\n\t\t\t\t9BDA62CB1CAE25E0007F2581 /* blog_channel_ncd_getenv.h */,\n\t\t\t\t9BDA62CC1CAE25E0007F2581 /* blog_channel_ncd_if.h */,\n\t\t\t\t9BDA62CD1CAE25E0007F2581 /* blog_channel_ncd_imperative.h */,\n\t\t\t\t9BDA62CE1CAE25E0007F2581 /* blog_channel_ncd_implode.h */,\n\t\t\t\t9BDA62CF1CAE25E0007F2581 /* blog_channel_ncd_index.h */,\n\t\t\t\t9BDA62D01CAE25E0007F2581 /* blog_channel_ncd_list.h */,\n\t\t\t\t9BDA62D11CAE25E0007F2581 /* blog_channel_ncd_load_module.h */,\n\t\t\t\t9BDA62D21CAE25E0007F2581 /* blog_channel_ncd_log.h */,\n\t\t\t\t9BDA62D31CAE25E0007F2581 /* blog_channel_ncd_log_msg.h */,\n\t\t\t\t9BDA62D41CAE25E0007F2581 /* blog_channel_ncd_logical.h */,\n\t\t\t\t9BDA62D51CAE25E0007F2581 /* blog_channel_ncd_multidepend.h */,\n\t\t\t\t9BDA62D61CAE25E0007F2581 /* blog_channel_ncd_net_backend_badvpn.h */,\n\t\t\t\t9BDA62D71CAE25E0007F2581 /* blog_channel_ncd_net_backend_rfkill.h */,\n\t\t\t\t9BDA62D81CAE25E0007F2581 /* blog_channel_ncd_net_backend_waitdevice.h */,\n\t\t\t\t9BDA62D91CAE25E0007F2581 /* blog_channel_ncd_net_backend_waitlink.h */,\n\t\t\t\t9BDA62DA1CAE25E0007F2581 /* blog_channel_ncd_net_backend_wpa_supplicant.h */,\n\t\t\t\t9BDA62DB1CAE25E0007F2581 /* blog_channel_ncd_net_dns.h */,\n\t\t\t\t9BDA62DC1CAE25E0007F2581 /* blog_channel_ncd_net_iptables.h */,\n\t\t\t\t9BDA62DD1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_addr.h */,\n\t\t\t\t9BDA62DE1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_addr_in_network.h */,\n\t\t\t\t9BDA62DF1CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_arp_probe.h */,\n\t\t\t\t9BDA62E01CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_dhcp.h */,\n\t\t\t\t9BDA62E11CAE25E0007F2581 /* blog_channel_ncd_net_ipv4_route.h */,\n\t\t\t\t9BDA62E21CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_addr.h */,\n\t\t\t\t9BDA62E31CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_addr_in_network.h */,\n\t\t\t\t9BDA62E41CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_route.h */,\n\t\t\t\t9BDA62E51CAE25E0007F2581 /* blog_channel_ncd_net_ipv6_wait_dynamic_addr.h */,\n\t\t\t\t9BDA62E61CAE25E0007F2581 /* blog_channel_ncd_net_up.h */,\n\t\t\t\t9BDA62E71CAE25E0007F2581 /* blog_channel_ncd_net_watch_interfaces.h */,\n\t\t\t\t9BDA62E81CAE25E0007F2581 /* blog_channel_ncd_netmask.h */,\n\t\t\t\t9BDA62E91CAE25E0007F2581 /* blog_channel_ncd_objref.h */,\n\t\t\t\t9BDA62EA1CAE25E0007F2581 /* blog_channel_ncd_ondemand.h */,\n\t\t\t\t9BDA62EB1CAE25E0007F2581 /* blog_channel_ncd_parse.h */,\n\t\t\t\t9BDA62EC1CAE25E0007F2581 /* blog_channel_ncd_print.h */,\n\t\t\t\t9BDA62ED1CAE25E0007F2581 /* blog_channel_ncd_process_manager.h */,\n\t\t\t\t9BDA62EE1CAE25E0007F2581 /* blog_channel_ncd_reboot.h */,\n\t\t\t\t9BDA62EF1CAE25E0007F2581 /* blog_channel_ncd_ref.h */,\n\t\t\t\t9BDA62F01CAE25E0007F2581 /* blog_channel_ncd_regex_match.h */,\n\t\t\t\t9BDA62F11CAE25E0007F2581 /* blog_channel_ncd_request.h */,\n\t\t\t\t9BDA62F21CAE25E0007F2581 /* blog_channel_ncd_run.h */,\n\t\t\t\t9BDA62F31CAE25E0007F2581 /* blog_channel_ncd_runonce.h */,\n\t\t\t\t9BDA62F41CAE25E0007F2581 /* blog_channel_ncd_sleep.h */,\n\t\t\t\t9BDA62F51CAE25E0007F2581 /* blog_channel_ncd_socket.h */,\n\t\t\t\t9BDA62F61CAE25E0007F2581 /* blog_channel_ncd_spawn.h */,\n\t\t\t\t9BDA62F71CAE25E0007F2581 /* blog_channel_ncd_strcmp.h */,\n\t\t\t\t9BDA62F81CAE25E0007F2581 /* blog_channel_ncd_substr.h */,\n\t\t\t\t9BDA62F91CAE25E0007F2581 /* blog_channel_ncd_sys_evdev.h */,\n\t\t\t\t9BDA62FA1CAE25E0007F2581 /* blog_channel_ncd_sys_request_client.h */,\n\t\t\t\t9BDA62FB1CAE25E0007F2581 /* blog_channel_ncd_sys_request_server.h */,\n\t\t\t\t9BDA62FC1CAE25E0007F2581 /* blog_channel_ncd_sys_start_process.h */,\n\t\t\t\t9BDA62FD1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_directory.h */,\n\t\t\t\t9BDA62FE1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_input.h */,\n\t\t\t\t9BDA62FF1CAE25E0007F2581 /* blog_channel_ncd_sys_watch_usb.h */,\n\t\t\t\t9BDA63001CAE25E0007F2581 /* blog_channel_ncd_timer.h */,\n\t\t\t\t9BDA63011CAE25E0007F2581 /* blog_channel_ncd_to_string.h */,\n\t\t\t\t9BDA63021CAE25E0007F2581 /* blog_channel_ncd_try.h */,\n\t\t\t\t9BDA63031CAE25E0007F2581 /* blog_channel_ncd_value.h */,\n\t\t\t\t9BDA63041CAE25E0007F2581 /* blog_channel_ncd_valuemetic.h */,\n\t\t\t\t9BDA63051CAE25E0007F2581 /* blog_channel_ncd_var.h */,\n\t\t\t\t9BDA63061CAE25E0007F2581 /* blog_channel_NCDBuildProgram.h */,\n\t\t\t\t9BDA63071CAE25E0007F2581 /* blog_channel_NCDConfigParser.h */,\n\t\t\t\t9BDA63081CAE25E0007F2581 /* blog_channel_NCDConfigTokenizer.h */,\n\t\t\t\t9BDA63091CAE25E0007F2581 /* blog_channel_NCDIfConfig.h */,\n\t\t\t\t9BDA630A1CAE25E0007F2581 /* blog_channel_NCDInterfaceMonitor.h */,\n\t\t\t\t9BDA630B1CAE25E0007F2581 /* blog_channel_NCDModuleIndex.h */,\n\t\t\t\t9BDA630C1CAE25E0007F2581 /* blog_channel_NCDModuleProcess.h */,\n\t\t\t\t9BDA630D1CAE25E0007F2581 /* blog_channel_NCDPlaceholderDb.h */,\n\t\t\t\t9BDA630E1CAE25E0007F2581 /* blog_channel_NCDRequest.h */,\n\t\t\t\t9BDA630F1CAE25E0007F2581 /* blog_channel_NCDRequestClient.h */,\n\t\t\t\t9BDA63101CAE25E0007F2581 /* blog_channel_NCDRfkillMonitor.h */,\n\t\t\t\t9BDA63111CAE25E0007F2581 /* blog_channel_NCDUdevCache.h */,\n\t\t\t\t9BDA63121CAE25E0007F2581 /* blog_channel_NCDUdevManager.h */,\n\t\t\t\t9BDA63131CAE25E0007F2581 /* blog_channel_NCDUdevMonitor.h */,\n\t\t\t\t9BDA63141CAE25E0007F2581 /* blog_channel_NCDUdevMonitorParser.h */,\n\t\t\t\t9BDA63151CAE25E0007F2581 /* blog_channel_NCDVal.h */,\n\t\t\t\t9BDA63161CAE25E0007F2581 /* blog_channel_NCDValGenerator.h */,\n\t\t\t\t9BDA63171CAE25E0007F2581 /* blog_channel_NCDValParser.h */,\n\t\t\t\t9BDA63181CAE25E0007F2581 /* blog_channel_nsskey.h */,\n\t\t\t\t9BDA63191CAE25E0007F2581 /* blog_channel_PacketProtoDecoder.h */,\n\t\t\t\t9BDA631A1CAE25E0007F2581 /* blog_channel_PasswordListener.h */,\n\t\t\t\t9BDA631B1CAE25E0007F2581 /* blog_channel_PeerChat.h */,\n\t\t\t\t9BDA631C1CAE25E0007F2581 /* blog_channel_PRStreamSink.h */,\n\t\t\t\t9BDA631D1CAE25E0007F2581 /* blog_channel_PRStreamSource.h */,\n\t\t\t\t9BDA631E1CAE25E0007F2581 /* blog_channel_server.h */,\n\t\t\t\t9BDA631F1CAE25E0007F2581 /* blog_channel_ServerConnection.h */,\n\t\t\t\t9BDA63201CAE25E0007F2581 /* blog_channel_SocksUdpGwClient.h */,\n\t\t\t\t9BDA63211CAE25E0007F2581 /* blog_channel_SPProtoDecoder.h */,\n\t\t\t\t9BDA63221CAE25E0007F2581 /* blog_channel_StreamPeerIO.h */,\n\t\t\t\t9BDA63231CAE25E0007F2581 /* blog_channel_tun2socks.h */,\n\t\t\t\t9BDA63241CAE25E0007F2581 /* blog_channel_udpgw.h */,\n\t\t\t\t9BDA63251CAE25E0007F2581 /* blog_channel_UdpGwClient.h */,\n\t\t\t\t9BDA63261CAE25E0007F2581 /* blog_channels_defines.h */,\n\t\t\t\t9BDA63271CAE25E0007F2581 /* blog_channels_list.h */,\n\t\t\t\t9BDA63281CAE25E0007F2581 /* bproto_addr.h */,\n\t\t\t\t9BDA63291CAE25E0007F2581 /* bproto_bproto_test.h */,\n\t\t\t\t9BDA632A1CAE25E0007F2581 /* bproto_msgproto.h */,\n\t\t\t);\n\t\t\tpath = generated;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA632B1CAE25E0007F2581 /* lwip */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA632C1CAE25E0007F2581 /* custom */,\n\t\t\t\t9BDA63321CAE25E0007F2581 /* src */,\n\t\t\t);\n\t\t\tpath = lwip;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA632C1CAE25E0007F2581 /* custom */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA632D1CAE25E0007F2581 /* arch */,\n\t\t\t\t9BDA63301CAE25E0007F2581 /* lwipopts.h */,\n\t\t\t\t9BDA63311CAE25E0007F2581 /* sys.c */,\n\t\t\t);\n\t\t\tpath = custom;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA632D1CAE25E0007F2581 /* arch */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA632E1CAE25E0007F2581 /* cc.h */,\n\t\t\t\t9BDA632F1CAE25E0007F2581 /* perf.h */,\n\t\t\t);\n\t\t\tpath = arch;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63321CAE25E0007F2581 /* src */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63331CAE25E0007F2581 /* core */,\n\t\t\t\t9BDA634C1CAE25E0007F2581 /* include */,\n\t\t\t);\n\t\t\tpath = src;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63331CAE25E0007F2581 /* core */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63341CAE25E0007F2581 /* def.c */,\n\t\t\t\t9BDA63351CAE25E0007F2581 /* inet_chksum.c */,\n\t\t\t\t9BDA63361CAE25E0007F2581 /* init.c */,\n\t\t\t\t9BDA63371CAE25E0007F2581 /* ipv4 */,\n\t\t\t\t9BDA633C1CAE25E0007F2581 /* ipv6 */,\n\t\t\t\t9BDA63421CAE25E0007F2581 /* mem.c */,\n\t\t\t\t9BDA63431CAE25E0007F2581 /* memp.c */,\n\t\t\t\t9BDA63441CAE25E0007F2581 /* netif.c */,\n\t\t\t\t9BDA63451CAE25E0007F2581 /* pbuf.c */,\n\t\t\t\t9BDA63461CAE25E0007F2581 /* stats.c */,\n\t\t\t\t9BDA63471CAE25E0007F2581 /* tcp.c */,\n\t\t\t\t9BDA63481CAE25E0007F2581 /* tcp_in.c */,\n\t\t\t\t9BDA63491CAE25E0007F2581 /* tcp_out.c */,\n\t\t\t\t9BDA634A1CAE25E0007F2581 /* timers.c */,\n\t\t\t\t9BDA634B1CAE25E0007F2581 /* udp.c */,\n\t\t\t);\n\t\t\tpath = core;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63371CAE25E0007F2581 /* ipv4 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63381CAE25E0007F2581 /* icmp.c */,\n\t\t\t\t9BDA63391CAE25E0007F2581 /* ip4.c */,\n\t\t\t\t9BDA633A1CAE25E0007F2581 /* ip4_addr.c */,\n\t\t\t\t9BDA633B1CAE25E0007F2581 /* ip_frag.c */,\n\t\t\t);\n\t\t\tpath = ipv4;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA633C1CAE25E0007F2581 /* ipv6 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA633D1CAE25E0007F2581 /* icmp6.c */,\n\t\t\t\t9BDA633E1CAE25E0007F2581 /* ip6.c */,\n\t\t\t\t9BDA633F1CAE25E0007F2581 /* ip6_addr.c */,\n\t\t\t\t9BDA63401CAE25E0007F2581 /* ip6_frag.c */,\n\t\t\t\t9BDA63411CAE25E0007F2581 /* nd6.c */,\n\t\t\t);\n\t\t\tpath = ipv6;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA634C1CAE25E0007F2581 /* include */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA634D1CAE25E0007F2581 /* ipv4 */,\n\t\t\t\t9BDA63561CAE25E0007F2581 /* ipv6 */,\n\t\t\t\t9BDA63611CAE25E0007F2581 /* lwip */,\n\t\t\t\t9BDA63851CAE25E0007F2581 /* netif */,\n\t\t\t\t9BDA63891CAE25E0007F2581 /* posix */,\n\t\t\t);\n\t\t\tpath = include;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA634D1CAE25E0007F2581 /* ipv4 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA634E1CAE25E0007F2581 /* lwip */,\n\t\t\t);\n\t\t\tpath = ipv4;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA634E1CAE25E0007F2581 /* lwip */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA634F1CAE25E0007F2581 /* autoip.h */,\n\t\t\t\t9BDA63501CAE25E0007F2581 /* icmp.h */,\n\t\t\t\t9BDA63511CAE25E0007F2581 /* igmp.h */,\n\t\t\t\t9BDA63521CAE25E0007F2581 /* inet.h */,\n\t\t\t\t9BDA63531CAE25E0007F2581 /* ip4.h */,\n\t\t\t\t9BDA63541CAE25E0007F2581 /* ip4_addr.h */,\n\t\t\t\t9BDA63551CAE25E0007F2581 /* ip_frag.h */,\n\t\t\t);\n\t\t\tpath = lwip;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63561CAE25E0007F2581 /* ipv6 */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63571CAE25E0007F2581 /* lwip */,\n\t\t\t);\n\t\t\tpath = ipv6;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63571CAE25E0007F2581 /* lwip */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63581CAE25E0007F2581 /* dhcp6.h */,\n\t\t\t\t9BDA63591CAE25E0007F2581 /* ethip6.h */,\n\t\t\t\t9BDA635A1CAE25E0007F2581 /* icmp6.h */,\n\t\t\t\t9BDA635B1CAE25E0007F2581 /* inet6.h */,\n\t\t\t\t9BDA635C1CAE25E0007F2581 /* ip6.h */,\n\t\t\t\t9BDA635D1CAE25E0007F2581 /* ip6_addr.h */,\n\t\t\t\t9BDA635E1CAE25E0007F2581 /* ip6_frag.h */,\n\t\t\t\t9BDA635F1CAE25E0007F2581 /* mld6.h */,\n\t\t\t\t9BDA63601CAE25E0007F2581 /* nd6.h */,\n\t\t\t);\n\t\t\tpath = lwip;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63611CAE25E0007F2581 /* lwip */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63621CAE25E0007F2581 /* api.h */,\n\t\t\t\t9BDA63631CAE25E0007F2581 /* api_msg.h */,\n\t\t\t\t9BDA63641CAE25E0007F2581 /* arch.h */,\n\t\t\t\t9BDA63651CAE25E0007F2581 /* debug.h */,\n\t\t\t\t9BDA63661CAE25E0007F2581 /* def.h */,\n\t\t\t\t9BDA63671CAE25E0007F2581 /* dhcp.h */,\n\t\t\t\t9BDA63681CAE25E0007F2581 /* dns.h */,\n\t\t\t\t9BDA63691CAE25E0007F2581 /* err.h */,\n\t\t\t\t9BDA636A1CAE25E0007F2581 /* inet_chksum.h */,\n\t\t\t\t9BDA636B1CAE25E0007F2581 /* init.h */,\n\t\t\t\t9BDA636C1CAE25E0007F2581 /* ip.h */,\n\t\t\t\t9BDA636D1CAE25E0007F2581 /* ip_addr.h */,\n\t\t\t\t9BDA636E1CAE25E0007F2581 /* mem.h */,\n\t\t\t\t9BDA636F1CAE25E0007F2581 /* memp.h */,\n\t\t\t\t9BDA63701CAE25E0007F2581 /* memp_std.h */,\n\t\t\t\t9BDA63711CAE25E0007F2581 /* netbuf.h */,\n\t\t\t\t9BDA63721CAE25E0007F2581 /* netdb.h */,\n\t\t\t\t9BDA63731CAE25E0007F2581 /* netif.h */,\n\t\t\t\t9BDA63741CAE25E0007F2581 /* netifapi.h */,\n\t\t\t\t9BDA63751CAE25E0007F2581 /* opt.h */,\n\t\t\t\t9BDA63761CAE25E0007F2581 /* pbuf.h */,\n\t\t\t\t9BDA63771CAE25E0007F2581 /* raw.h */,\n\t\t\t\t9BDA63781CAE25E0007F2581 /* sio.h */,\n\t\t\t\t9BDA63791CAE25E0007F2581 /* snmp.h */,\n\t\t\t\t9BDA637A1CAE25E0007F2581 /* snmp_asn1.h */,\n\t\t\t\t9BDA637B1CAE25E0007F2581 /* snmp_msg.h */,\n\t\t\t\t9BDA637C1CAE25E0007F2581 /* snmp_structs.h */,\n\t\t\t\t9BDA637D1CAE25E0007F2581 /* sockets.h */,\n\t\t\t\t9BDA637E1CAE25E0007F2581 /* stats.h */,\n\t\t\t\t9BDA637F1CAE25E0007F2581 /* sys.h */,\n\t\t\t\t9BDA63801CAE25E0007F2581 /* tcp.h */,\n\t\t\t\t9BDA63811CAE25E0007F2581 /* tcp_impl.h */,\n\t\t\t\t9BDA63821CAE25E0007F2581 /* tcpip.h */,\n\t\t\t\t9BDA63831CAE25E0007F2581 /* timers.h */,\n\t\t\t\t9BDA63841CAE25E0007F2581 /* udp.h */,\n\t\t\t);\n\t\t\tpath = lwip;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63851CAE25E0007F2581 /* netif */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63861CAE25E0007F2581 /* etharp.h */,\n\t\t\t\t9BDA63871CAE25E0007F2581 /* ppp_oe.h */,\n\t\t\t\t9BDA63881CAE25E0007F2581 /* slipif.h */,\n\t\t\t);\n\t\t\tpath = netif;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63891CAE25E0007F2581 /* posix */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA638A1CAE25E0007F2581 /* netdb.h */,\n\t\t\t\t9BDA638B1CAE25E0007F2581 /* sys */,\n\t\t\t);\n\t\t\tpath = posix;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA638B1CAE25E0007F2581 /* sys */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA638C1CAE25E0007F2581 /* socket.h */,\n\t\t\t);\n\t\t\tpath = sys;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA638D1CAE25E0007F2581 /* misc */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA638E1CAE25E0007F2581 /* arp_proto.h */,\n\t\t\t\t9BDA638F1CAE25E0007F2581 /* array_length.h */,\n\t\t\t\t9BDA63901CAE25E0007F2581 /* ascii_utils.h */,\n\t\t\t\t9BDA63911CAE25E0007F2581 /* balign.h */,\n\t\t\t\t9BDA63921CAE25E0007F2581 /* balloc.h */,\n\t\t\t\t9BDA63931CAE25E0007F2581 /* blimits.h */,\n\t\t\t\t9BDA63941CAE25E0007F2581 /* BRefTarget.h */,\n\t\t\t\t9BDA63951CAE25E0007F2581 /* bsize.h */,\n\t\t\t\t9BDA63961CAE25E0007F2581 /* bsort.h */,\n\t\t\t\t9BDA63971CAE25E0007F2581 /* bstring.h */,\n\t\t\t\t9BDA63981CAE25E0007F2581 /* byteorder.h */,\n\t\t\t\t9BDA63991CAE25E0007F2581 /* cmdline.h */,\n\t\t\t\t9BDA639A1CAE25E0007F2581 /* compare.h */,\n\t\t\t\t9BDA639B1CAE25E0007F2581 /* concat_strings.h */,\n\t\t\t\t9BDA639C1CAE25E0007F2581 /* dead.h */,\n\t\t\t\t9BDA639D1CAE25E0007F2581 /* debug.h */,\n\t\t\t\t9BDA639E1CAE25E0007F2581 /* debugcounter.h */,\n\t\t\t\t9BDA639F1CAE25E0007F2581 /* debugerror.h */,\n\t\t\t\t9BDA63A01CAE25E0007F2581 /* dhcp_proto.h */,\n\t\t\t\t9BDA63A11CAE25E0007F2581 /* ethernet_proto.h */,\n\t\t\t\t9BDA63A21CAE25E0007F2581 /* exparray.h */,\n\t\t\t\t9BDA63A31CAE25E0007F2581 /* expstring.h */,\n\t\t\t\t9BDA63A41CAE25E0007F2581 /* find_char.h */,\n\t\t\t\t9BDA63A51CAE25E0007F2581 /* find_program.h */,\n\t\t\t\t9BDA63A61CAE25E0007F2581 /* get_iface_info.h */,\n\t\t\t\t9BDA63A71CAE25E0007F2581 /* grow_array.h */,\n\t\t\t\t9BDA63A81CAE25E0007F2581 /* hashfun.h */,\n\t\t\t\t9BDA63A91CAE25E0007F2581 /* igmp_proto.h */,\n\t\t\t\t9BDA63AA1CAE25E0007F2581 /* ipaddr.h */,\n\t\t\t\t9BDA63AB1CAE25E0007F2581 /* ipaddr6.h */,\n\t\t\t\t9BDA63AC1CAE25E0007F2581 /* ipv4_proto.h */,\n\t\t\t\t9BDA63AD1CAE25E0007F2581 /* ipv6_proto.h */,\n\t\t\t\t9BDA63AE1CAE25E0007F2581 /* loggers_string.h */,\n\t\t\t\t9BDA63AF1CAE25E0007F2581 /* loglevel.h */,\n\t\t\t\t9BDA63B01CAE25E0007F2581 /* maxalign.h */,\n\t\t\t\t9BDA63B11CAE25E0007F2581 /* memref.h */,\n\t\t\t\t9BDA63B21CAE25E0007F2581 /* merge.h */,\n\t\t\t\t9BDA63B31CAE25E0007F2581 /* minmax.h */,\n\t\t\t\t9BDA63B41CAE25E0007F2581 /* modadd.h */,\n\t\t\t\t9BDA63B51CAE25E0007F2581 /* mswsock.h */,\n\t\t\t\t9BDA63B61CAE25E0007F2581 /* nonblocking.h */,\n\t\t\t\t9BDA63B71CAE25E0007F2581 /* nsskey.h */,\n\t\t\t\t9BDA63B81CAE25E0007F2581 /* offset.h */,\n\t\t\t\t9BDA63B91CAE25E0007F2581 /* open_standard_streams.h */,\n\t\t\t\t9BDA63BA1CAE25E0007F2581 /* overflow.h */,\n\t\t\t\t9BDA63BB1CAE25E0007F2581 /* packed.h */,\n\t\t\t\t9BDA63BC1CAE25E0007F2581 /* parse_number.h */,\n\t\t\t\t9BDA63BD1CAE25E0007F2581 /* print_macros.h */,\n\t\t\t\t9BDA63BE1CAE25E0007F2581 /* read_file.h */,\n\t\t\t\t9BDA63BF1CAE25E0007F2581 /* read_write_int.h */,\n\t\t\t\t9BDA63C01CAE25E0007F2581 /* socks_proto.h */,\n\t\t\t\t9BDA63C11CAE25E0007F2581 /* sslsocket.h */,\n\t\t\t\t9BDA63C21CAE25E0007F2581 /* stdbuf_cmdline.h */,\n\t\t\t\t9BDA63C31CAE25E0007F2581 /* strdup.h */,\n\t\t\t\t9BDA63C41CAE25E0007F2581 /* string_begins_with.h */,\n\t\t\t\t9BDA63C51CAE25E0007F2581 /* substring.h */,\n\t\t\t\t9BDA63C61CAE25E0007F2581 /* udp_proto.h */,\n\t\t\t\t9BDA63C71CAE25E0007F2581 /* unicode_funcs.h */,\n\t\t\t\t9BDA63C81CAE25E0007F2581 /* Utf16Decoder.h */,\n\t\t\t\t9BDA63C91CAE25E0007F2581 /* Utf16Encoder.h */,\n\t\t\t\t9BDA63CA1CAE25E0007F2581 /* Utf8Decoder.h */,\n\t\t\t\t9BDA63CB1CAE25E0007F2581 /* Utf8Encoder.h */,\n\t\t\t\t9BDA63CC1CAE25E0007F2581 /* version.h */,\n\t\t\t\t9BDA63CD1CAE25E0007F2581 /* write_file.h */,\n\t\t\t);\n\t\t\tpath = misc;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63CE1CAE25E0007F2581 /* protocol */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63CF1CAE25E0007F2581 /* addr.bproto */,\n\t\t\t\t9BDA63D01CAE25E0007F2581 /* addr.h */,\n\t\t\t\t9BDA63D11CAE25E0007F2581 /* dataproto.h */,\n\t\t\t\t9BDA63D21CAE25E0007F2581 /* fragmentproto.h */,\n\t\t\t\t9BDA63D31CAE25E0007F2581 /* msgproto.bproto */,\n\t\t\t\t9BDA63D41CAE25E0007F2581 /* msgproto.h */,\n\t\t\t\t9BDA63D51CAE25E0007F2581 /* packetproto.h */,\n\t\t\t\t9BDA63D61CAE25E0007F2581 /* requestproto.h */,\n\t\t\t\t9BDA63D71CAE25E0007F2581 /* scproto.h */,\n\t\t\t\t9BDA63D81CAE25E0007F2581 /* spproto.h */,\n\t\t\t\t9BDA63D91CAE25E0007F2581 /* udpgw_proto.h */,\n\t\t\t);\n\t\t\tpath = protocol;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63DA1CAE25E0007F2581 /* socksclient */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63DB1CAE25E0007F2581 /* BSocksClient.c */,\n\t\t\t\t9BDA63DC1CAE25E0007F2581 /* BSocksClient.h */,\n\t\t\t);\n\t\t\tpath = socksclient;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63DD1CAE25E0007F2581 /* structure */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA63DE1CAE25E0007F2581 /* BAVL.h */,\n\t\t\t\t9BDA63DF1CAE25E0007F2581 /* CAvl.h */,\n\t\t\t\t9BDA63E01CAE25E0007F2581 /* CAvl_decl.h */,\n\t\t\t\t9BDA63E11CAE25E0007F2581 /* CAvl_footer.h */,\n\t\t\t\t9BDA63E21CAE25E0007F2581 /* CAvl_header.h */,\n\t\t\t\t9BDA63E31CAE25E0007F2581 /* CAvl_impl.h */,\n\t\t\t\t9BDA63E41CAE25E0007F2581 /* CHash.h */,\n\t\t\t\t9BDA63E51CAE25E0007F2581 /* CHash_decl.h */,\n\t\t\t\t9BDA63E61CAE25E0007F2581 /* CHash_footer.h */,\n\t\t\t\t9BDA63E71CAE25E0007F2581 /* CHash_header.h */,\n\t\t\t\t9BDA63E81CAE25E0007F2581 /* CHash_impl.h */,\n\t\t\t\t9BDA63E91CAE25E0007F2581 /* ChunkBuffer2.h */,\n\t\t\t\t9BDA63EA1CAE25E0007F2581 /* IndexedList.h */,\n\t\t\t\t9BDA63EB1CAE25E0007F2581 /* IndexedList_tree.h */,\n\t\t\t\t9BDA63EC1CAE25E0007F2581 /* LinkedList0.h */,\n\t\t\t\t9BDA63ED1CAE25E0007F2581 /* LinkedList1.h */,\n\t\t\t\t9BDA63EE1CAE25E0007F2581 /* LinkedList3.h */,\n\t\t\t\t9BDA63EF1CAE25E0007F2581 /* SAvl.h */,\n\t\t\t\t9BDA63F01CAE25E0007F2581 /* SAvl_decl.h */,\n\t\t\t\t9BDA63F11CAE25E0007F2581 /* SAvl_footer.h */,\n\t\t\t\t9BDA63F21CAE25E0007F2581 /* SAvl_header.h */,\n\t\t\t\t9BDA63F31CAE25E0007F2581 /* SAvl_impl.h */,\n\t\t\t\t9BDA63F41CAE25E0007F2581 /* SAvl_tree.h */,\n\t\t\t\t9BDA63F51CAE25E0007F2581 /* SLinkedList.h */,\n\t\t\t\t9BDA63F61CAE25E0007F2581 /* SLinkedList_decl.h */,\n\t\t\t\t9BDA63F71CAE25E0007F2581 /* SLinkedList_footer.h */,\n\t\t\t\t9BDA63F81CAE25E0007F2581 /* SLinkedList_header.h */,\n\t\t\t\t9BDA63F91CAE25E0007F2581 /* SLinkedList_impl.h */,\n\t\t\t\t9BDA63FA1CAE25E0007F2581 /* Vector.h */,\n\t\t\t\t9BDA63FB1CAE25E0007F2581 /* Vector_decl.h */,\n\t\t\t\t9BDA63FC1CAE25E0007F2581 /* Vector_footer.h */,\n\t\t\t\t9BDA63FD1CAE25E0007F2581 /* Vector_header.h */,\n\t\t\t\t9BDA63FE1CAE25E0007F2581 /* Vector_impl.h */,\n\t\t\t);\n\t\t\tpath = structure;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA63FF1CAE25E0007F2581 /* system */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA64001CAE25E0007F2581 /* BAddr.h */,\n\t\t\t\t9BDA64011CAE25E0007F2581 /* BConnection.h */,\n\t\t\t\t9BDA64021CAE25E0007F2581 /* BConnection_common.c */,\n\t\t\t\t9BDA64031CAE25E0007F2581 /* BConnection_unix.c */,\n\t\t\t\t9BDA64041CAE25E0007F2581 /* BConnection_unix.h */,\n\t\t\t\t9BDA64051CAE25E0007F2581 /* BDatagram.h */,\n\t\t\t\t9BDA64061CAE25E0007F2581 /* BDatagram_unix.c */,\n\t\t\t\t9BDA64071CAE25E0007F2581 /* BDatagram_unix.h */,\n\t\t\t\t9BDA64081CAE25E0007F2581 /* BNetwork.c */,\n\t\t\t\t9BDA64091CAE25E0007F2581 /* BNetwork.h */,\n\t\t\t\t9BDA640A1CAE25E0007F2581 /* BReactor.h */,\n\t\t\t\t9BDA640B1CAE25E0007F2581 /* BReactor_badvpn.c */,\n\t\t\t\t9BDA640C1CAE25E0007F2581 /* BReactor_badvpn.h */,\n\t\t\t\t9BDA640D1CAE25E0007F2581 /* BReactor_badvpn_timerstree.h */,\n\t\t\t\t9BDA640E1CAE25E0007F2581 /* BSignal.c */,\n\t\t\t\t9BDA640F1CAE25E0007F2581 /* BSignal.h */,\n\t\t\t\t9BDA64101CAE25E0007F2581 /* BTime.c */,\n\t\t\t\t9BDA64111CAE25E0007F2581 /* BTime.h */,\n\t\t\t\t9BDA64121CAE25E0007F2581 /* BUnixSignal.c */,\n\t\t\t\t9BDA64131CAE25E0007F2581 /* BUnixSignal.h */,\n\t\t\t);\n\t\t\tpath = system;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA64141CAE25E0007F2581 /* tun2socks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA64151CAE25E0007F2581 /* SocksUdpGwClient.c */,\n\t\t\t\t9BDA64161CAE25E0007F2581 /* SocksUdpGwClient.h */,\n\t\t\t\t9BDA64171CAE25E0007F2581 /* tun2socks.c */,\n\t\t\t\t9BDA64181CAE25E0007F2581 /* tun2socks.h */,\n\t\t\t);\n\t\t\tpath = tun2socks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA64191CAE25E0007F2581 /* tuntap */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA641A1CAE25E0007F2581 /* BTap.h */,\n\t\t\t\t9BDA641B1CAE25E0007F2581 /* BTap.m */,\n\t\t\t);\n\t\t\tpath = tuntap;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA641C1CAE25E0007F2581 /* udpgw */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA641D1CAE25E0007F2581 /* udpgw.c */,\n\t\t\t\t9BDA641E1CAE25E0007F2581 /* udpgw.h */,\n\t\t\t);\n\t\t\tpath = udpgw;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BDA641F1CAE25E0007F2581 /* udpgw_client */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9BDA64201CAE25E0007F2581 /* UdpGwClient.c */,\n\t\t\t\t9BDA64211CAE25E0007F2581 /* UdpGwClient.h */,\n\t\t\t);\n\t\t\tpath = udpgw_client;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8367A841D1B6D6800D50C25 /* Row */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB8CCC6EA1CFF1501000E7E2E /* ProxyRow.swift */,\n\t\t\t\tB87B98091D3B64BE00FA66BF /* RequestEventRow.swift */,\n\t\t\t\tB8367A801D1B6D5400D50C25 /* BaseButtonRow.swift */,\n\t\t\t\tB821B0F21D5334D50061E7B9 /* ActionRow.swift */,\n\t\t\t);\n\t\t\tname = Row;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB86B08E41D17F84900613014 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB86B08E91D17F84900613014 /* ShadowPath.framework */,\n\t\t\t\tB86B08EB1D17F84900613014 /* ShadowPathDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8C256AC1D1A93CC0074D3B1 /* View */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB87B98031D3B423B00FA66BF /* PaddingLabel.swift */,\n\t\t\t\t5586A6BC1EF65B1A00E9CB17 /* ProxyQRCode.swift */,\n\t\t\t);\n\t\t\tname = View;\n\t\t\tpath = ..;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tC8B2149E8757C44C469576D2 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t553D95BA1D63FE6700B193B7 /* NetworkExtension.framework */,\n\t\t\t\tB88559EA1D21319D00B1243E /* YAML.framework */,\n\t\t\t\t9B87060C1C1DBDD400651424 /* libresolv.tbd */,\n\t\t\t\t9B8193B31CBCFEE700BE320D /* NotificationCenter.framework */,\n\t\t\t\t310645853592796E08924EB3 /* Pods_PacketProcessor.framework */,\n\t\t\t\tB03E5F0D3FAB0B3302CA1A4E /* Pods_PacketTunnel.framework */,\n\t\t\t\t1E558CCABD311741F0CF9DD9 /* Pods_Potatso.framework */,\n\t\t\t\tDFAF05C4CA29869A03E25A65 /* Pods_PotatsoLibrary.framework */,\n\t\t\t\t83D8D7B7274BAF6E28C980D9 /* Pods_TodayWidget.framework */,\n\t\t\t\t972ACD00F18B9E461F9D38B1 /* Pods_PotatsoModel.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXHeadersBuildPhase section */\n\t\t9B9B15BA1C21595B000B6541 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B9B15C01C21595B000B6541 /* PotatsoLibrary.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6001A1CB2921C00E5EA61 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BC600331CB299DE00E5EA61 /* NSError+Helper.h in Headers */,\n\t\t\t\t9BC600311CB299DE00E5EA61 /* JSONUtils.h in Headers */,\n\t\t\t\tB8F784671D3678B400F02FF5 /* Settings.h in Headers */,\n\t\t\t\t9BC600201CB2921C00E5EA61 /* PotatsoBase.h in Headers */,\n\t\t\t\t9BC6002B1CB2922E00E5EA61 /* Potatso.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6FFE71CB28B4B00E5EA61 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BC6FFED1CB28B4B00E5EA61 /* PotatsoModel.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BDA62581CAE2576007F2581 /* Headers */ = {\n\t\t\tisa = PBXHeadersBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BCE27A91CAE428200B1E561 /* TunnelInterface.h in Headers */,\n\t\t\t\t9BDA625E1CAE2576007F2581 /* PacketProcessor.h in Headers */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXHeadersBuildPhase section */\n\n/* Begin PBXNativeTarget section */\n\t\t9B0CFA0A1C1C0B1A007BD7C6 /* Potatso */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B0CFA281C1C0B1B007BD7C6 /* Build configuration list for PBXNativeTarget \"Potatso\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tD693559CB9C3A77E754FCAC3 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9B0CFA071C1C0B1A007BD7C6 /* Sources */,\n\t\t\t\t9B0CFA081C1C0B1A007BD7C6 /* Frameworks */,\n\t\t\t\t9B0CFA091C1C0B1A007BD7C6 /* Resources */,\n\t\t\t\t9B8706081C1D788F00651424 /* Embed App Extensions */,\n\t\t\t\t9B9B15821C1ECADF000B6541 /* Embed Frameworks */,\n\t\t\t\t9B9C520E1CA7A19E00681FE7 /* Fabric */,\n\t\t\t\tEE2DCE01E31A764A094282A4 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t7F5FECF0328ABB93E7B81EF0 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t9B8706031C1D788F00651424 /* PBXTargetDependency */,\n\t\t\t\t9B9B15C31C21595B000B6541 /* PBXTargetDependency */,\n\t\t\t\t9BDA62611CAE2576007F2581 /* PBXTargetDependency */,\n\t\t\t\t9BC6FFF01CB28B4B00E5EA61 /* PBXTargetDependency */,\n\t\t\t\t9BC600231CB2921C00E5EA61 /* PBXTargetDependency */,\n\t\t\t\t9B8193BD1CBCFEE700BE320D /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = Potatso;\n\t\t\tproductName = Potatso;\n\t\t\tproductReference = 9B0CFA0B1C1C0B1B007BD7C6 /* Potatso.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t9B8193B11CBCFEE700BE320D /* TodayWidget */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B8193C11CBCFEE800BE320D /* Build configuration list for PBXNativeTarget \"TodayWidget\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tDA37A7904D75DAFB6182BD09 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9B8193AE1CBCFEE700BE320D /* Sources */,\n\t\t\t\t9B8193AF1CBCFEE700BE320D /* Frameworks */,\n\t\t\t\t9B8193B01CBCFEE700BE320D /* Resources */,\n\t\t\t\t0C0171FD77CBD077C0B79F2C /* [CP] Copy Pods Resources */,\n\t\t\t\t9B8193EB1CBE37BB00BE320D /* Framework Hack */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = TodayWidget;\n\t\t\tproductName = TodayWidget;\n\t\t\tproductReference = 9B8193B21CBCFEE700BE320D /* TodayWidget.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\t9B8705F91C1D788F00651424 /* PacketTunnel */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B8706051C1D788F00651424 /* Build configuration list for PBXNativeTarget \"PacketTunnel\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t4F5AFD532093885579A6C0C4 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9B8705F61C1D788F00651424 /* Sources */,\n\t\t\t\t9B8705F71C1D788F00651424 /* Frameworks */,\n\t\t\t\t9B8705F81C1D788F00651424 /* Resources */,\n\t\t\t\t46E2C5B0876EEEFA2316E577 /* [CP] Copy Pods Resources */,\n\t\t\t\t9BC858AF1C34C5AA00992032 /* Framework Hack */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PacketTunnel;\n\t\t\tproductName = PacketTunnel;\n\t\t\tproductReference = 9B8705FA1C1D788F00651424 /* PacketTunnel.appex */;\n\t\t\tproductType = \"com.apple.product-type.app-extension\";\n\t\t};\n\t\t9B9B15BC1C21595B000B6541 /* PotatsoLibrary */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9B9B15C61C21595C000B6541 /* Build configuration list for PBXNativeTarget \"PotatsoLibrary\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t267B30C8EDE6E821A0AC5900 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9B9B15B91C21595B000B6541 /* Frameworks */,\n\t\t\t\t9B9B15B81C21595B000B6541 /* Sources */,\n\t\t\t\t9B9B15BA1C21595B000B6541 /* Headers */,\n\t\t\t\t9B9B15BB1C21595B000B6541 /* Resources */,\n\t\t\t\t1689257BD56686F97B37BDD6 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PotatsoLibrary;\n\t\t\tproductName = PotatsoLibrary;\n\t\t\tproductReference = 9B9B15BD1C21595B000B6541 /* PotatsoLibrary.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9BC6001C1CB2921C00E5EA61 /* PotatsoBase */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9BC600281CB2921D00E5EA61 /* Build configuration list for PBXNativeTarget \"PotatsoBase\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9BC600181CB2921C00E5EA61 /* Sources */,\n\t\t\t\t9BC6001A1CB2921C00E5EA61 /* Headers */,\n\t\t\t\t9BC600191CB2921C00E5EA61 /* Frameworks */,\n\t\t\t\t9BC6001B1CB2921C00E5EA61 /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PotatsoBase;\n\t\t\tproductName = PotatsoBase;\n\t\t\tproductReference = 9BC6001D1CB2921C00E5EA61 /* PotatsoBase.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9BC6FFE91CB28B4B00E5EA61 /* PotatsoModel */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9BC6FFF31CB28B4B00E5EA61 /* Build configuration list for PBXNativeTarget \"PotatsoModel\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEF6682250D7E8504FEDDD7AD /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9BC6FFE51CB28B4B00E5EA61 /* Sources */,\n\t\t\t\t9BC6FFE61CB28B4B00E5EA61 /* Frameworks */,\n\t\t\t\t9BC6FFE71CB28B4B00E5EA61 /* Headers */,\n\t\t\t\t9BC6FFE81CB28B4B00E5EA61 /* Resources */,\n\t\t\t\t337A8A0CFB5E8647AF33D41C /* [CP] Copy Pods Resources */,\n\t\t\t\tB84B4E341D2176D6002B946A /* Framework Hack */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PotatsoModel;\n\t\t\tproductName = PotatsoModel;\n\t\t\tproductReference = 9BC6FFEA1CB28B4B00E5EA61 /* PotatsoModel.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n\t\t9BDA625A1CAE2576007F2581 /* PacketProcessor */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 9BDA62661CAE2576007F2581 /* Build configuration list for PBXNativeTarget \"PacketProcessor\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t82A7034AA407F637047639C3 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9BDA62561CAE2576007F2581 /* Sources */,\n\t\t\t\t9BDA62571CAE2576007F2581 /* Frameworks */,\n\t\t\t\t9BDA62581CAE2576007F2581 /* Headers */,\n\t\t\t\t9BDA62591CAE2576007F2581 /* Resources */,\n\t\t\t\t32AEA4C715C4F90A5C6FC894 /* [CP] Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = PacketProcessor;\n\t\t\tproductName = PacketProcessor;\n\t\t\tproductReference = 9BDA625B1CAE2576007F2581 /* PacketProcessor.framework */;\n\t\t\tproductType = \"com.apple.product-type.framework\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t9B0CFA031C1C0B1A007BD7C6 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0730;\n\t\t\t\tLastUpgradeCheck = 0810;\n\t\t\t\tORGANIZATIONNAME = TouchingApp;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t9B0CFA0A1C1C0B1A007BD7C6 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.BackgroundModes = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.InAppPurchase = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Keychain = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.iCloud = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t9B8193B11CBCFEE700BE320D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.VPNLite = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t9B8705F91C1D788F00651424 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.ApplicationGroups.iOS = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.VPNLite = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\t9B9B15BC1C21595B000B6541 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.2;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t};\n\t\t\t\t\t9BC6001C1CB2921C00E5EA61 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t};\n\t\t\t\t\t9BC6FFE91CB28B4B00E5EA61 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t};\n\t\t\t\t\t9BDA625A1CAE2576007F2581 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3;\n\t\t\t\t\t\tDevelopmentTeam = M54LAUT7S6;\n\t\t\t\t\t\tLastSwiftMigration = 0830;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 9B0CFA061C1C0B1A007BD7C6 /* Build configuration list for PBXProject \"Potatso\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\tBase,\n\t\t\t\t\"zh-Hans\",\n\t\t\t\t\"zh-Hant\",\n\t\t\t\tar,\n\t\t\t\tca,\n\t\t\t\tcs,\n\t\t\t\tda,\n\t\t\t\tde,\n\t\t\t\tel,\n\t\t\t\ten,\n\t\t\t\tes,\n\t\t\t\tfi,\n\t\t\t\tfr,\n\t\t\t\tja,\n\t\t\t\tko,\n\t\t\t\tms,\n\t\t\t\tnb,\n\t\t\t\tnl,\n\t\t\t\tpl,\n\t\t\t\t\"pt-BR\",\n\t\t\t\tpt,\n\t\t\t\tro,\n\t\t\t\tru,\n\t\t\t);\n\t\t\tmainGroup = 9B0CFA021C1C0B1A007BD7C6;\n\t\t\tproductRefGroup = 9B0CFA0C1C1C0B1B007BD7C6 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = B86B08E41D17F84900613014 /* Products */;\n\t\t\t\t\tProjectRef = B86B08E31D17F84900613014 /* ShadowPath.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t9B0CFA0A1C1C0B1A007BD7C6 /* Potatso */,\n\t\t\t\t9B8705F91C1D788F00651424 /* PacketTunnel */,\n\t\t\t\t9B8193B11CBCFEE700BE320D /* TodayWidget */,\n\t\t\t\t9B9B15BC1C21595B000B6541 /* PotatsoLibrary */,\n\t\t\t\t9BDA625A1CAE2576007F2581 /* PacketProcessor */,\n\t\t\t\t9BC6FFE91CB28B4B00E5EA61 /* PotatsoModel */,\n\t\t\t\t9BC6001C1CB2921C00E5EA61 /* PotatsoBase */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\tB86B08E91D17F84900613014 /* ShadowPath.framework */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.framework;\n\t\t\tpath = ShadowPath.framework;\n\t\t\tremoteRef = B86B08E81D17F84900613014 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\tB86B08EB1D17F84900613014 /* ShadowPathDemo.app */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = wrapper.application;\n\t\t\tpath = ShadowPathDemo.app;\n\t\t\tremoteRef = B86B08EA1D17F84900613014 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t9B0CFA091C1C0B1A007BD7C6 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B1F745E1C2F83AD0028C1A6 /* config.plist in Resources */,\n\t\t\t\t551AE8471F0A435C009265E2 /* InfoPlist.strings in Resources */,\n\t\t\t\t9B0CFA191C1C0B1B007BD7C6 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t55B980391F08D3C9007E96BE /* AppiraterLocalizable.strings in Resources */,\n\t\t\t\tB8319A0D1D1BD696001E50C2 /* Localizable.strings in Resources */,\n\t\t\t\t9B8285471CE20DE40027D15C /* HMScanner.bundle in Resources */,\n\t\t\t\t9B0CFA161C1C0B1B007BD7C6 /* Assets.xcassets in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8193B01CBCFEE700BE320D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B8193BA1CBCFEE700BE320D /* MainInterface.storyboard in Resources */,\n\t\t\t\t55D4FC121F0E5A470038594D /* InfoPlist.strings in Resources */,\n\t\t\t\t9BB3F7471CC60CBE00C2DD05 /* Localizable.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8705F81C1D788F00651424 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B9B15BB1C21595B000B6541 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6001B1CB2921C00E5EA61 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6FFE81CB28B4B00E5EA61 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BDA62591CAE2576007F2581 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BDA65771CAE25E0007F2581 /* msgproto.bproto in Resources */,\n\t\t\t\t9BDA65731CAE25E0007F2581 /* addr.bproto in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t0C0171FD77CBD077C0B79F2C /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-TodayWidget/Pods-TodayWidget-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t1689257BD56686F97B37BDD6 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-PotatsoLibrary/Pods-PotatsoLibrary-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t267B30C8EDE6E821A0AC5900 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t32AEA4C715C4F90A5C6FC894 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-PacketProcessor/Pods-PacketProcessor-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t337A8A0CFB5E8647AF33D41C /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-PotatsoModel/Pods-PotatsoModel-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t46E2C5B0876EEEFA2316E577 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-PacketTunnel/Pods-PacketTunnel-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t4F5AFD532093885579A6C0C4 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t7F5FECF0328ABB93E7B81EF0 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Potatso/Pods-Potatso-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t82A7034AA407F637047639C3 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9B8193EB1CBE37BB00BE320D /* Framework Hack */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Framework Hack\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\\\"\\nif [[ -d \\\"Frameworks\\\" ]]; then\\nrm -fr Frameworks\\nfi\";\n\t\t};\n\t\t9B9C520E1CA7A19E00681FE7 /* Fabric */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = Fabric;\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"FABRIC_API_KEY=$(/usr/libexec/PlistBuddy -c \\\"Print :Fabric:APIKey\\\" \\\"${PROJECT_DIR}/Potatso/Info.plist\\\")\\n\\necho $FABRIC_API_KEY\\n\\\"${PODS_ROOT}/Fabric/run\\\" $FABRIC_API_KEY 8f47d6d3f80d6bb69f86dc4ceb4c560f17648cadff3540bafadc2c59c5f199a3\";\n\t\t};\n\t\t9BC858AF1C34C5AA00992032 /* Framework Hack */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Framework Hack\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\\\"\\nif [[ -d \\\"Frameworks\\\" ]]; then\\nrm -fr Frameworks\\nfi\";\n\t\t};\n\t\tB84B4E341D2176D6002B946A /* Framework Hack */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Framework Hack\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"cd \\\"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\\\"\\nif [[ -d \\\"Frameworks\\\" ]]; then\\nrm -fr Frameworks\\nfi\";\n\t\t};\n\t\tD693559CB9C3A77E754FCAC3 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tDA37A7904D75DAFB6182BD09 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tEE2DCE01E31A764A094282A4 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Potatso/Pods-Potatso-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tEF6682250D7E8504FEDDD7AD /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t9B0CFA071C1C0B1A007BD7C6 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t55B980381F08D3C9007E96BE /* Appirater.m in Sources */,\n\t\t\t\tB821B0F31D5334D50061E7B9 /* ActionRow.swift in Sources */,\n\t\t\t\t55D8A4841F139BD8001819CF /* CloudProxyDetailViewController.swift in Sources */,\n\t\t\t\tB83AA5701D38E6F7007905B4 /* RequestDetailVC.swift in Sources */,\n\t\t\t\tB8CCC6DD1CFD5D5D000E7E2E /* CollectionViewController.swift in Sources */,\n\t\t\t\tB88096B21D0652F0008BEB87 /* RuleCell.swift in Sources */,\n\t\t\t\t9B17F8F01C533BBF00679FCB /* Color.swift in Sources */,\n\t\t\t\tB83AA5761D38E98A007905B4 /* RequestOverviewVC.swift in Sources */,\n\t\t\t\t9B5C00261CBFB35C008DDE7A /* ConfigGroupCell.swift in Sources */,\n\t\t\t\t9B8193ED1CBE4DCA00BE320D /* UrlHandler.swift in Sources */,\n\t\t\t\t9B1F74761C3164AD0028C1A6 /* VPN.swift in Sources */,\n\t\t\t\t9B8750551CC761D000A11715 /* RequestModel.swift in Sources */,\n\t\t\t\tB87A043A1D193ABC001132F2 /* LoggerUtils.swift in Sources */,\n\t\t\t\tB8CCC6EB1CFF1501000E7E2E /* ProxyRow.swift in Sources */,\n\t\t\t\t9B32478A1CC0F1D200A3BAFF /* Importer.swift in Sources */,\n\t\t\t\t9B1F74621C2F85540028C1A6 /* UIManager.swift in Sources */,\n\t\t\t\tB8C256B01D1A957A0074D3B1 /* HomePresenter.swift in Sources */,\n\t\t\t\t9B1F74601C2F84250028C1A6 /* AppInitializer.swift in Sources */,\n\t\t\t\t556E68EA1EFFA76E00BD84ED /* ProxyUtils.swift in Sources */,\n\t\t\t\t9B54CC441C1C266C00DDEEBB /* UIViewControllerExtensions.swift in Sources */,\n\t\t\t\t9B0CFA0F1C1C0B1B007BD7C6 /* AppDelegate.swift in Sources */,\n\t\t\t\t9BB3F73C1CC3D3DE00C2DD05 /* RecentRequestsCell.swift in Sources */,\n\t\t\t\t9BD4CACA1CB9600D00F99BF9 /* AlertUtils.swift in Sources */,\n\t\t\t\tB829C1721D4395BC00C17B82 /* QRCodeScannerVC.m in Sources */,\n\t\t\t\tB87B98041D3B423B00FA66BF /* PaddingLabel.swift in Sources */,\n\t\t\t\tB8CCC6E51CFDCFD8000E7E2E /* RuleSetCell.swift in Sources */,\n\t\t\t\t9BC858A51C33D30100992032 /* BaseSafariViewController.swift in Sources */,\n\t\t\t\tB84551421CF878BD005779CD /* ConfigGroupChooseVC.swift in Sources */,\n\t\t\t\tB8319A0A1D1B975C001E50C2 /* RegexUtils.swift in Sources */,\n\t\t\t\tB84551401CF83D07005779CD /* HomeVC.swift in Sources */,\n\t\t\t\tB8CCC6E71CFDD99E000E7E2E /* ProxyListViewController.swift in Sources */,\n\t\t\t\t9B76EEB91C911CBF002BF5D1 /* ProxySelectionViewController.swift in Sources */,\n\t\t\t\t9BF303461CC8A1F60096588E /* LogDetailViewController.swift in Sources */,\n\t\t\t\t9B1D9B7B1CA4C45F0078D814 /* HUDUtils.swift in Sources */,\n\t\t\t\t55D8A4641F11023C001819CF /* Mume.swift in Sources */,\n\t\t\t\tB8CCC6E11CFDCADC000E7E2E /* RuleSetListViewController.swift in Sources */,\n\t\t\t\t9B2290FF1C8E5B9600EEC901 /* DataInitializer.swift in Sources */,\n\t\t\t\t9BB62FA31C8FFC1D002ADC54 /* RuleSetConfigurationViewController.swift in Sources */,\n\t\t\t\t9BF3034B1CCA1B060096588E /* BaseEmptyView.swift in Sources */,\n\t\t\t\t9B5E13BA1C897870007DFE0A /* ProxyConfigurationViewController.swift in Sources */,\n\t\t\t\tB8367A811D1B6D5400D50C25 /* BaseButtonRow.swift in Sources */,\n\t\t\t\tB87B980A1D3B64BE00FA66BF /* RequestEventRow.swift in Sources */,\n\t\t\t\tB83D3E791D2BA689007655CE /* Event.swift in Sources */,\n\t\t\t\t9B17F8EB1C53379700679FCB /* SettingsViewController.swift in Sources */,\n\t\t\t\tB8F7845C1D36760D00F02FF5 /* DashboardVC.swift in Sources */,\n\t\t\t\tB803A6981D02B768003EA9AA /* API.swift in Sources */,\n\t\t\t\t9B76EEB71C90740C002BF5D1 /* RuleSetsSelectionViewController.swift in Sources */,\n\t\t\t\tB83AA5741D38E728007905B4 /* SegmentPageVC.swift in Sources */,\n\t\t\t\t9BB3F74F1CC6308000C2DD05 /* RecentRequestsVC.swift in Sources */,\n\t\t\t\t9B8285481CE20DE40027D15C /* HMScanner.m in Sources */,\n\t\t\t\t5586A6BD1EF65B1A00E9CB17 /* ProxyQRCode.swift in Sources */,\n\t\t\t\t9BB3F7441CC60B6F00C2DD05 /* Error.swift in Sources */,\n\t\t\t\t9B76EEAD1C9005D2002BF5D1 /* RuleConfigurationViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8193AE1CBCFEE700BE320D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9B8193B71CBCFEE700BE320D /* TodayViewController.swift in Sources */,\n\t\t\t\t9B8193E21CBDF27000BE320D /* CurrentGroupCell.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B8705F61C1D788F00651424 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB8EAC5941D40BF310046963C /* TunnelError.m in Sources */,\n\t\t\t\t9B2D8C8B1C7C3F5B00CC65B3 /* ProxyManager.m in Sources */,\n\t\t\t\t9B8706001C1D788F00651424 /* PacketTunnelProvider.m in Sources */,\n\t\t\t\t9B87060B1C1DBCCD00651424 /* dns.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9B9B15B81C21595B000B6541 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BC215CC1CB5E584002AADD1 /* Manager.swift in Sources */,\n\t\t\t\t9BB3F7411CC60B5300C2DD05 /* Image.swift in Sources */,\n\t\t\t\tB82574A91D1D98CF007BAF40 /* Pollution.swift in Sources */,\n\t\t\t\t9BC215C71CB51148002AADD1 /* Config.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC600181CB2921C00E5EA61 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB8D8CC0A1D506CB900CE6C0D /* Localized.swift in Sources */,\n\t\t\t\t9BC6002C1CB2922E00E5EA61 /* Potatso.m in Sources */,\n\t\t\t\t9BC600341CB299DE00E5EA61 /* NSError+Helper.m in Sources */,\n\t\t\t\tB8F784681D3678B400F02FF5 /* Settings.m in Sources */,\n\t\t\t\t9BC600321CB299DE00E5EA61 /* JSONUtils.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BC6FFE51CB28B4B00E5EA61 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BC215BB1CB4DAE6002AADD1 /* BaseModel.swift in Sources */,\n\t\t\t\t9BC215BF1CB4E06C002AADD1 /* RuleSet.swift in Sources */,\n\t\t\t\t9BC215B91CB4DA9E002AADD1 /* Proxy.swift in Sources */,\n\t\t\t\t9BC215C11CB5083B002AADD1 /* ConfigurationGroup.swift in Sources */,\n\t\t\t\t9BC215BD1CB4DE6B002AADD1 /* Rule.swift in Sources */,\n\t\t\t\tB8D7F1841D518FF000B115F3 /* DBUtils.swift in Sources */,\n\t\t\t\t55E14B841EDFF9DA0068F812 /* RegexUtils.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t9BDA62561CAE2576007F2581 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9BDA65B71CAE25E0007F2581 /* tun2socks.c in Sources */,\n\t\t\t\t9BDA64391CAE25E0007F2581 /* PacketProtoEncoder.c in Sources */,\n\t\t\t\t9BDA65B51CAE25E0007F2581 /* SocksUdpGwClient.c in Sources */,\n\t\t\t\t9BDA64E51CAE25E0007F2581 /* def.c in Sources */,\n\t\t\t\t9BDA64351CAE25E0007F2581 /* PacketPassInterface.c in Sources */,\n\t\t\t\t9BDA64F51CAE25E0007F2581 /* stats.c in Sources */,\n\t\t\t\t9BDA65A71CAE25E0007F2581 /* BDatagram_unix.c in Sources */,\n\t\t\t\t9BDA64E91CAE25E0007F2581 /* ip4.c in Sources */,\n\t\t\t\t9BDA643F1CAE25E0007F2581 /* PacketStreamSender.c in Sources */,\n\t\t\t\t9BDA64EA1CAE25E0007F2581 /* ip4_addr.c in Sources */,\n\t\t\t\t9BDA65AC1CAE25E0007F2581 /* BReactor_badvpn.c in Sources */,\n\t\t\t\t9BCE27AA1CAE428200B1E561 /* TunnelInterface.m in Sources */,\n\t\t\t\t9BDA643B1CAE25E0007F2581 /* PacketProtoFlow.c in Sources */,\n\t\t\t\t9BDA65BA1CAE25E0007F2581 /* BTap.m in Sources */,\n\t\t\t\t9BDA65AF1CAE25E0007F2581 /* BSignal.c in Sources */,\n\t\t\t\t9BDA64EE1CAE25E0007F2581 /* ip6_addr.c in Sources */,\n\t\t\t\t9BDA642A1CAE25E0007F2581 /* DebugObject.c in Sources */,\n\t\t\t\t9BDA64471CAE25E0007F2581 /* PacketPassInactivityMonitor.c in Sources */,\n\t\t\t\t9BDA64F41CAE25E0007F2581 /* pbuf.c in Sources */,\n\t\t\t\t9BDA65A91CAE25E0007F2581 /* BNetwork.c in Sources */,\n\t\t\t\t9BDA65BD1CAE25E0007F2581 /* UdpGwClient.c in Sources */,\n\t\t\t\t9BDA642C1CAE25E0007F2581 /* BufferWriter.c in Sources */,\n\t\t\t\t9BDA64E61CAE25E0007F2581 /* inet_chksum.c in Sources */,\n\t\t\t\t9BDA64F31CAE25E0007F2581 /* netif.c in Sources */,\n\t\t\t\t9BDA65B11CAE25E0007F2581 /* BTime.c in Sources */,\n\t\t\t\t9BDA64E81CAE25E0007F2581 /* icmp.c in Sources */,\n\t\t\t\t9BDA64E71CAE25E0007F2581 /* init.c in Sources */,\n\t\t\t\t9BDA64301CAE25E0007F2581 /* PacketPassConnector.c in Sources */,\n\t\t\t\t9BDA64EB1CAE25E0007F2581 /* ip_frag.c in Sources */,\n\t\t\t\t9BDA64F61CAE25E0007F2581 /* tcp.c in Sources */,\n\t\t\t\t9BDA65A41CAE25E0007F2581 /* BConnection_unix.c in Sources */,\n\t\t\t\t9BDA65B31CAE25E0007F2581 /* BUnixSignal.c in Sources */,\n\t\t\t\t9BDA64F71CAE25E0007F2581 /* tcp_in.c in Sources */,\n\t\t\t\t9BDA64EC1CAE25E0007F2581 /* icmp6.c in Sources */,\n\t\t\t\t9BDA64271CAE25E0007F2581 /* BPending.c in Sources */,\n\t\t\t\t9BDA64321CAE25E0007F2581 /* PacketPassFairQueue.c in Sources */,\n\t\t\t\t9BDA64451CAE25E0007F2581 /* StreamRecvInterface.c in Sources */,\n\t\t\t\t9BDA64241CAE25E0007F2581 /* BLog_syslog.c in Sources */,\n\t\t\t\t9BDA64F11CAE25E0007F2581 /* mem.c in Sources */,\n\t\t\t\t9BDA64431CAE25E0007F2581 /* StreamPassInterface.c in Sources */,\n\t\t\t\t9BDA64411CAE25E0007F2581 /* SinglePacketBuffer.c in Sources */,\n\t\t\t\t9BDA65A31CAE25E0007F2581 /* BConnection_common.c in Sources */,\n\t\t\t\t9BDA64F91CAE25E0007F2581 /* timers.c in Sources */,\n\t\t\t\t9BDA64371CAE25E0007F2581 /* PacketProtoDecoder.c in Sources */,\n\t\t\t\t9BDA64FA1CAE25E0007F2581 /* udp.c in Sources */,\n\t\t\t\t9BDA643D1CAE25E0007F2581 /* PacketRecvInterface.c in Sources */,\n\t\t\t\t9BDA64EF1CAE25E0007F2581 /* ip6_frag.c in Sources */,\n\t\t\t\t9BDA65BB1CAE25E0007F2581 /* udpgw.c in Sources */,\n\t\t\t\t9BDA64F21CAE25E0007F2581 /* memp.c in Sources */,\n\t\t\t\t9BDA64231CAE25E0007F2581 /* BLog.m in Sources */,\n\t\t\t\t9BDA64ED1CAE25E0007F2581 /* ip6.c in Sources */,\n\t\t\t\t9BDA64F81CAE25E0007F2581 /* tcp_out.c in Sources */,\n\t\t\t\t9BDA64F01CAE25E0007F2581 /* nd6.c in Sources */,\n\t\t\t\t9BDA657E1CAE25E0007F2581 /* BSocksClient.c in Sources */,\n\t\t\t\t9BDA64E41CAE25E0007F2581 /* sys.c in Sources */,\n\t\t\t\t9BDA642E1CAE25E0007F2581 /* PacketBuffer.c in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t9B8193BD1CBCFEE700BE320D /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9B8193B11CBCFEE700BE320D /* TodayWidget */;\n\t\t\ttargetProxy = 9B8193BC1CBCFEE700BE320D /* PBXContainerItemProxy */;\n\t\t};\n\t\t9B8706031C1D788F00651424 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9B8705F91C1D788F00651424 /* PacketTunnel */;\n\t\t\ttargetProxy = 9B8706021C1D788F00651424 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9B9B15C31C21595B000B6541 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9B9B15BC1C21595B000B6541 /* PotatsoLibrary */;\n\t\t\ttargetProxy = 9B9B15C21C21595B000B6541 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9BC600231CB2921C00E5EA61 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9BC6001C1CB2921C00E5EA61 /* PotatsoBase */;\n\t\t\ttargetProxy = 9BC600221CB2921C00E5EA61 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9BC6FFF01CB28B4B00E5EA61 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9BC6FFE91CB28B4B00E5EA61 /* PotatsoModel */;\n\t\t\ttargetProxy = 9BC6FFEF1CB28B4B00E5EA61 /* PBXContainerItemProxy */;\n\t\t};\n\t\t9BDA62611CAE2576007F2581 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 9BDA625A1CAE2576007F2581 /* PacketProcessor */;\n\t\t\ttargetProxy = 9BDA62601CAE2576007F2581 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t551AE8451F0A435C009265E2 /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t551AE8461F0A435C009265E2 /* zh-Hans */,\n\t\t\t\t551AE84A1F0A436B009265E2 /* zh-Hant */,\n\t\t\t\t551AE84B1F0A4395009265E2 /* Base */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t55B980211F08D3C9007E96BE /* AppiraterLocalizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t55B980221F08D3C9007E96BE /* ar */,\n\t\t\t\t55B980231F08D3C9007E96BE /* ca */,\n\t\t\t\t55B980241F08D3C9007E96BE /* cs */,\n\t\t\t\t55B980251F08D3C9007E96BE /* da */,\n\t\t\t\t55B980261F08D3C9007E96BE /* de */,\n\t\t\t\t55B980271F08D3C9007E96BE /* el */,\n\t\t\t\t55B980281F08D3C9007E96BE /* en */,\n\t\t\t\t55B980291F08D3C9007E96BE /* es */,\n\t\t\t\t55B9802A1F08D3C9007E96BE /* fi */,\n\t\t\t\t55B9802B1F08D3C9007E96BE /* fr */,\n\t\t\t\t55B9802C1F08D3C9007E96BE /* ja */,\n\t\t\t\t55B9802D1F08D3C9007E96BE /* ko */,\n\t\t\t\t55B9802E1F08D3C9007E96BE /* ms */,\n\t\t\t\t55B9802F1F08D3C9007E96BE /* nb */,\n\t\t\t\t55B980301F08D3C9007E96BE /* nl */,\n\t\t\t\t55B980311F08D3C9007E96BE /* pl */,\n\t\t\t\t55B980321F08D3C9007E96BE /* pt-BR */,\n\t\t\t\t55B980331F08D3C9007E96BE /* pt */,\n\t\t\t\t55B980341F08D3C9007E96BE /* ro */,\n\t\t\t\t55B980351F08D3C9007E96BE /* ru */,\n\t\t\t\t55B980361F08D3C9007E96BE /* zh-Hans */,\n\t\t\t\t55B980371F08D3C9007E96BE /* zh-Hant */,\n\t\t\t);\n\t\t\tname = AppiraterLocalizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t55D4FC101F0E5A470038594D /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t55D4FC111F0E5A470038594D /* Base */,\n\t\t\t\t55D4FC131F0E5A500038594D /* zh-Hans */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B0CFA171C1C0B1B007BD7C6 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t9B0CFA181C1C0B1B007BD7C6 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9B8193B81CBCFEE700BE320D /* MainInterface.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t9B8193B91CBCFEE700BE320D /* Base */,\n\t\t\t);\n\t\t\tname = MainInterface.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9BB3F7491CC60CBE00C2DD05 /* Localizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t9BB3F7481CC60CBE00C2DD05 /* Base */,\n\t\t\t\t9BB3F74A1CC60CBF00C2DD05 /* zh-Hans */,\n\t\t\t);\n\t\t\tname = Localizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB8319A0F1D1BD696001E50C2 /* Localizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB8319A0E1D1BD696001E50C2 /* Base */,\n\t\t\t\tB8319A101D1BD699001E50C2 /* zh-Hans */,\n\t\t\t);\n\t\t\tname = Localizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t9B0CFA261C1C0B1B007BD7C6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B0CFA271C1C0B1B007BD7C6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Owholemodule\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B0CFA291C1C0B1B007BD7C6 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 5800BF48973D41E6DFC2DF35 /* Pods-Potatso.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Potatso/Potatso.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PotatsoLibrary\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"COCOAPODS=1\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/Library/ShadowPath/ShadowPath/libopenssl/include/\\\"\",\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(PODS_ROOT)/KissXML/libxml\",\n\t\t\t\t\t\"\\\"$(PODS_ROOT)/../../../libxml\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Crashlytics\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Fabric\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Reveal-iOS-SDK\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Potatso/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @rpath/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PROJECT_DIR)$(LOCAL_LIBRARY_DIR)/ShadowPath/ShadowPath/libopenssl/lib\",\n\t\t\t\t\t\"$(PODS_ROOT)/Helpshift/helpshift-sdk-ios-v5.6.1\",\n\t\t\t\t);\n\t\t\t\tOTHER_SWIFT_FLAGS = \"$(inherited) \\\"-D\\\" \\\"COCOAPODS\\\" -DDEBUG\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"be3f7d67-22d5-4336-8717-b43b33a19309\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = MumeDev;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Potatso/Potatso-Bridge-Header.h\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B0CFA2A1C1C0B1B007BD7C6 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 89E573E7B926BE00ECB260CC /* Pods-Potatso.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = Potatso/Potatso.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PotatsoLibrary\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"\\\"$(SRCROOT)/Library/ShadowPath/ShadowPath/libopenssl/include/\\\"\",\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(PODS_ROOT)/KissXML/libxml\",\n\t\t\t\t\t\"\\\"$(PODS_ROOT)/../../../libxml\\\"\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Crashlytics\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Fabric\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/Reveal-iOS-SDK\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Potatso/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @rpath/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(PROJECT_DIR)$(LOCAL_LIBRARY_DIR)/ShadowPath/ShadowPath/libopenssl/lib\",\n\t\t\t\t\t\"$(PODS_ROOT)/Helpshift/helpshift-sdk-ios-v5.6.1\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"3d699bad-ed17-4321-b699-872b9b37a958\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = MumeDist;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Potatso/Potatso-Bridge-Header.h\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B8193BF1CBCFEE800BE320D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 66AB52504A6434A50F434876 /* Pods-TodayWidget.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = TodayWidget/TodayWidget.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = TodayWidget/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso.TodayWidget;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"8f4b22c4-775b-4b81-a025-cc099b5fa188\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"Mume-TodayWidget-Dev\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B8193C01CBCFEE800BE320D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 86E310DB3E84260841595217 /* Pods-TodayWidget.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = TodayWidget/TodayWidget.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = TodayWidget/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso.TodayWidget;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"a6e79c48-1866-4fc1-8be2-e2960769a8a3\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = MumeTodayWidgetDist;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B8706061C1D788F00651424 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 8AB4A0AD4E706A738479B24F /* Pods-PacketTunnel.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"PacketTunnel/Supporting Files/PacketTunnel.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer: li ruqi (AF4AJ5CG3B)\";\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"LOCAL_CONF=1\",\n\t\t\t\t\t\"COCOAPODS=1\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(PODS_ROOT)/libev/include/\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/libev\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PacketTunnel/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks @loader_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel/Antinat/expat-lib/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel/Shadowsocks/libsodium-ios/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso.tunnel;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"1da2e27f-3740-48f5-8680-8c2ceabacf7d\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = Mume.tunnel.dev;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B8706071C1D788F00651424 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 50F18DE964A0791935D07268 /* Pods-PacketTunnel.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = \"PacketTunnel/Supporting Files/PacketTunnel.entitlements\";\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Distribution: LI RUQI (M54LAUT7S6)\";\n\t\t\t\tDEVELOPMENT_TEAM = M54LAUT7S6;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"COCOAPODS=1\",\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/usr/include/libxml2\",\n\t\t\t\t\t\"$(PODS_ROOT)/libev/include/\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public\\\"\",\n\t\t\t\t\t\"\\\"${PODS_ROOT}/Headers/Public/libev\\\"\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PacketTunnel/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks @loader_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel/Antinat/expat-lib/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel/Shadowsocks/libsodium-ios/lib\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PacketTunnel\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.potatso.tunnel;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE = \"83429646-fe76-49a2-bb36-ed666586da19\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = MumetunnelDist;\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9B9B15C71C21595C000B6541 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9E603B577575916EC652D04D /* Pods-PotatsoLibrary.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PotatsoLibrary\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PotatsoLibrary/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMODULEMAP_FILE = \"\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoLibrary;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9B9B15C81C21595C000B6541 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = F5F5D562F9497CEBA25A466F /* Pods-PotatsoLibrary.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/PotatsoLibrary\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PotatsoLibrary/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tMODULEMAP_FILE = \"\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoLibrary;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9BC600261CB2921D00E5EA61 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = PotatsoBase/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoBase;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9BC600271CB2921D00E5EA61 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tINFOPLIST_FILE = PotatsoBase/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoBase;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9BC6FFF41CB28B4B00E5EA61 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 6779B40186E2772C79CE2A52 /* Pods-PotatsoModel.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PotatsoModel/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoModel;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9BC6FFF51CB28B4B00E5EA61 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 13357BD365CD7C295F1BA3C0 /* Pods-PotatsoModel.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Carthage/Build/iOS\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = PotatsoModel/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PotatsoModel;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t9BDA62641CAE2576007F2581 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A82D5011D8BAB2707009104B /* Pods-PacketProcessor.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\tBADVPN_BREACTOR_BADVPN,\n\t\t\t\t\tBADVPN_FREEBSD,\n\t\t\t\t\tBADVPN_THREADWORK_USE_PTHREAD,\n\t\t\t\t\t\"BADVPN_THREAD_SAFE=1\",\n\t\t\t\t\tBADVPN_USE_KEVENT,\n\t\t\t\t\tBADVPN_USE_SYSLOG,\n\t\t\t\t\tBADVPN_LITTLE_ENDIAN,\n\t\t\t\t\tBADVPN_LIBTSOCKS,\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = PacketProcessor/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PacketProcessor;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"$(inherited) \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/custom\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include/ipv4\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include/ipv6\\\"\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t9BDA62651CAE2576007F2581 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = ABA819ED933DB4838AE71396 /* Pods-PacketProcessor.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tAPPLICATION_EXTENSION_API_ONLY = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"\";\n\t\t\t\tCURRENT_PROJECT_VERSION = 214;\n\t\t\t\tDEFINES_MODULE = YES;\n\t\t\t\tDYLIB_COMPATIBILITY_VERSION = 1;\n\t\t\t\tDYLIB_CURRENT_VERSION = 214;\n\t\t\t\tDYLIB_INSTALL_NAME_BASE = \"@rpath\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\tBADVPN_BREACTOR_BADVPN,\n\t\t\t\t\tBADVPN_FREEBSD,\n\t\t\t\t\tBADVPN_THREADWORK_USE_PTHREAD,\n\t\t\t\t\t\"BADVPN_THREAD_SAFE=1\",\n\t\t\t\t\tBADVPN_USE_KEVENT,\n\t\t\t\t\tBADVPN_USE_SYSLOG,\n\t\t\t\t\tBADVPN_LITTLE_ENDIAN,\n\t\t\t\t\tBADVPN_LIBTSOCKS,\n\t\t\t\t);\n\t\t\t\tHEADER_SEARCH_PATHS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = PacketProcessor/Info.plist;\n\t\t\t\tINSTALL_PATH = \"$(LOCAL_LIBRARY_DIR)/Frameworks\";\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = info.liruqi.PacketProcessor;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSKIP_INSTALL = YES;\n\t\t\t\tSWIFT_VERSION = 3.0;\n\t\t\t\tUSER_HEADER_SEARCH_PATHS = \"$(inherited) \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/custom\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include/ipv4\\\" \\\"$(SRCROOT)/$(TARGET_NAME)/tun2socks-iOS/lwip/src/include/ipv6\\\"\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t\tVERSION_INFO_PREFIX = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t9B0CFA061C1C0B1A007BD7C6 /* Build configuration list for PBXProject \"Potatso\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B0CFA261C1C0B1B007BD7C6 /* Debug */,\n\t\t\t\t9B0CFA271C1C0B1B007BD7C6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B0CFA281C1C0B1B007BD7C6 /* Build configuration list for PBXNativeTarget \"Potatso\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B0CFA291C1C0B1B007BD7C6 /* Debug */,\n\t\t\t\t9B0CFA2A1C1C0B1B007BD7C6 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B8193C11CBCFEE800BE320D /* Build configuration list for PBXNativeTarget \"TodayWidget\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B8193BF1CBCFEE800BE320D /* Debug */,\n\t\t\t\t9B8193C01CBCFEE800BE320D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B8706051C1D788F00651424 /* Build configuration list for PBXNativeTarget \"PacketTunnel\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B8706061C1D788F00651424 /* Debug */,\n\t\t\t\t9B8706071C1D788F00651424 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9B9B15C61C21595C000B6541 /* Build configuration list for PBXNativeTarget \"PotatsoLibrary\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9B9B15C71C21595C000B6541 /* Debug */,\n\t\t\t\t9B9B15C81C21595C000B6541 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9BC600281CB2921D00E5EA61 /* Build configuration list for PBXNativeTarget \"PotatsoBase\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9BC600261CB2921D00E5EA61 /* Debug */,\n\t\t\t\t9BC600271CB2921D00E5EA61 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9BC6FFF31CB28B4B00E5EA61 /* Build configuration list for PBXNativeTarget \"PotatsoModel\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9BC6FFF41CB28B4B00E5EA61 /* Debug */,\n\t\t\t\t9BC6FFF51CB28B4B00E5EA61 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t9BDA62661CAE2576007F2581 /* Build configuration list for PBXNativeTarget \"PacketProcessor\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t9BDA62641CAE2576007F2581 /* Debug */,\n\t\t\t\t9BDA62651CAE2576007F2581 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 9B0CFA031C1C0B1A007BD7C6 /* Project object */;\n}\n"
  },
  {
    "path": "Potatso.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:Potatso.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Potatso.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Potatso.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "PotatsoBase/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "PotatsoBase/JSONUtils.h",
    "content": "//\n//  JSONUtils.h\n//  Potatso\n//\n//  Created by LEI on 3/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSString (JSON)\n\n- (NSDictionary * _Nullable)jsonDictionary;\n\n- (NSArray * _Nullable)jsonArray;\n\n@end\n\n\n@interface NSDictionary (JSON)\n\n- (NSData * _Nullable)jsonData;\n\n- (NSString * _Nullable)jsonString;\n\n@end\n\n@interface NSArray (JSON)\n\n- (NSData * _Nullable)jsonData;\n\n- (NSString * _Nullable)jsonString;\n\n@end"
  },
  {
    "path": "PotatsoBase/JSONUtils.m",
    "content": "//\n//  JSONUtils.m\n//  Potatso\n//\n//  Created by LEI on 3/15/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"JSONUtils.h\"\n\n@implementation NSString (JSON)\n\n- (NSDictionary *)jsonDictionary {\n    return [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];\n}\n\n- (NSArray *)jsonArray {\n    return [NSJSONSerialization JSONObjectWithData:[self dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];\n}\n\n@end\n\n@implementation NSDictionary (JSON)\n\n- (NSData *)jsonData {\n    return [NSJSONSerialization dataWithJSONObject:self options:0 error:nil];\n}\n\n- (NSString *)jsonString {\n    return [[NSString alloc] initWithData:[self jsonData] encoding:NSUTF8StringEncoding];\n}\n\n@end\n\n@implementation NSArray (JSON)\n\n- (NSData *)jsonData {\n    return [NSJSONSerialization dataWithJSONObject:self options:0 error:nil];\n}\n\n- (NSString *)jsonString {\n    return [[NSString alloc] initWithData:[self jsonData] encoding:NSUTF8StringEncoding];\n}\n\n@end"
  },
  {
    "path": "PotatsoBase/Localized.swift",
    "content": "//\n//  Strings.swift\n//  Potatso\n//\n//  Created by LEI on 1/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\n/// Internal current language key\nlet LCLCurrentLanguageKey = \"LCLCurrentLanguageKey\"\n\n/// Default language. English. If English is unavailable defaults to base localization.\nlet LCLDefaultLanguage = \"en\"\n\n/// Name for language change notification\npublic let LCLLanguageChangeNotification = \"LCLLanguageChangeNotification\"\n\npublic extension String {\n    /**\n     Swift 2 friendly localization syntax, replaces NSLocalizedString\n     - Returns: The localized string.\n     */\n    public func localized() -> String {\n        if let path = Bundle.main.path(forResource: Localize.currentLanguage(), ofType: \"lproj\"), let bundle = Bundle(path: path) {\n            return bundle.localizedString(forKey: self, value: nil, table: nil)\n        }else if let path = Bundle.main.path(forResource: \"Base\", ofType: \"lproj\"), let bundle = Bundle(path: path) {\n            return bundle.localizedString(forKey: self, value: nil, table: nil)\n        }\n        return self\n    }\n    \n    /**\n     Swift 2 friendly localization syntax with format arguments, replaces String(format:NSLocalizedString)\n     - Returns: The formatted localized string with arguments.\n     */\n    public func localizedFormat(_ arguments: CVarArg...) -> String {\n        return String(format: localized(), arguments: arguments)\n    }\n    \n    /**\n     Swift 2 friendly plural localization syntax with a format argument\n     \n     - parameter argument: Argument to determine pluralisation\n     \n     - returns: Pluralized localized string.\n     */\n    public func localizedPlural(_ argument: CVarArg) -> String {\n        return NSString.localizedStringWithFormat(localized() as NSString, argument) as String\n    }\n    \n    // https://stackoverflow.com/questions/30402435/\n    public func emojiFlag() -> String {\n        let base : UInt32 = 127397\n        var s = \"\"\n        for v in self.unicodeScalars {\n            s.unicodeScalars.append(UnicodeScalar(base + v.value)!)\n        }\n        return String(s)\n    }\n}\n\n\n// MARK: Language Setting Functions\n\nopen class Localize: NSObject {\n    \n    /**\n     List available languages\n     - Returns: Array of available languages.\n     */\n    open class func availableLanguages() -> [String] {\n        return Bundle.main.localizations\n    }\n    \n    /**\n     Current language\n     - Returns: The current language. String.\n     */\n    open class func currentLanguage() -> String {\n        if let currentLanguage = UserDefaults.standard.object(forKey: LCLCurrentLanguageKey) as? String {\n            return currentLanguage\n        }\n        return defaultLanguage()\n    }\n    \n    /**\n     Change the current language\n     - Parameter language: Desired language.\n     */\n    open class func setCurrentLanguage(_ language: String) {\n        let selectedLanguage = availableLanguages().contains(language) ? language : defaultLanguage()\n        if (selectedLanguage != currentLanguage()){\n            UserDefaults.standard.set(selectedLanguage, forKey: LCLCurrentLanguageKey)\n            UserDefaults.standard.synchronize()\n            NotificationCenter.default.post(name: Notification.Name(rawValue: LCLLanguageChangeNotification), object: nil)\n        }\n    }\n    \n    /**\n     Default language\n     - Returns: The app's default language. String.\n     */\n    open class func defaultLanguage() -> String {\n        var defaultLanguage: String = String()\n        guard let preferredLanguage = Bundle.main.preferredLocalizations.first else {\n            return LCLDefaultLanguage\n        }\n        let availableLanguages: [String] = self.availableLanguages()\n        if (availableLanguages.contains(preferredLanguage)) {\n            defaultLanguage = preferredLanguage\n        }\n        else {\n            defaultLanguage = LCLDefaultLanguage\n        }\n        return defaultLanguage\n    }\n    \n    /**\n     Resets the current language to the default\n     */\n    open class func resetCurrentLanguageToDefault() {\n        setCurrentLanguage(self.defaultLanguage())\n    }\n    \n    /**\n     Get the current language's display name for a language.\n     - Parameter language: Desired language.\n     - Returns: The localized string.\n     */\n    open class func displayNameForLanguage(_ language: String) -> String {\n        let locale : Locale = Locale(identifier: currentLanguage())\n        if let displayName = (locale as NSLocale).displayName(forKey: NSLocale.Key.languageCode, value: language) {\n            return displayName\n        }\n        return String()\n    }\n}\n"
  },
  {
    "path": "PotatsoBase/NSError+Helper.h",
    "content": "//\n//  NSError+Helper.h\n//  Potatso\n//\n//  Created by LEI on 3/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface NSError (Helper)\n\n+ (NSError *)errorWithCode: (NSInteger)code description: (NSString *)description;\n\n@end\n"
  },
  {
    "path": "PotatsoBase/NSError+Helper.m",
    "content": "//\n//  NSError+Helper.m\n//  Potatso\n//\n//  Created by LEI on 3/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"NSError+Helper.h\"\n\n@implementation NSError (Helper)\n\n+ (NSError *)errorWithCode: (NSInteger)code description: (NSString *)description {\n    return [NSError errorWithDomain:@\"info.liruqi.mume\" code:code userInfo:@{NSLocalizedDescriptionKey: description}];\n}\n\n@end\n"
  },
  {
    "path": "PotatsoBase/Potatso.h",
    "content": "//\n//  PotatsoManager.h\n//  Potatso\n//\n//  Created by LEI on 4/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n#define kLoggingLevel @\"loggingLevel\"\n\nextern NSString * _Nonnull sharedGroupIdentifier;\nextern NSString * _Nonnull shadowsocksLogFile;\nextern NSString * _Nonnull privoxyLogFile;\n\n@interface Potatso : NSObject\n+ (NSURL * _Nonnull)sharedUrl;\n+ (NSURL * _Nonnull)sharedDatabaseUrl;\n+ (NSUserDefaults * _Nonnull)sharedUserDefaults;\n\n+ (NSURL * _Nonnull)sharedGeneralConfUrl;\n+ (NSURL * _Nonnull)sharedProxyConfUrl;\n+ (NSURL * _Nonnull)sharedHttpProxyConfUrl;\n+ (NSURL * _Nonnull)sharedLogUrl;\n\n+ (NSInteger) logLevel;\n+ (void) setLogLevel:(NSInteger) ll;\n@end\n"
  },
  {
    "path": "PotatsoBase/Potatso.m",
    "content": "//\n//  PotatsoManager.m\n//  Potatso\n//\n//  Created by LEI on 4/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"Potatso.h\"\n\nNSString *sharedGroupIdentifier = @\"group.info.liruqi.potatso\";\nNSString *shadowsocksLogFile = @\"shadowsocks.log\";\nNSString *privoxyLogFile = @\"privoxy.log\";\n\n@implementation Potatso\n\n+ (NSURL *)sharedUrl {\n    return [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:sharedGroupIdentifier];\n}\n\n+ (NSURL *)sharedDatabaseUrl {\n    return [[self sharedUrl] URLByAppendingPathComponent:@\"potatso.realm\" isDirectory:NO];\n}\n\n+ (NSUserDefaults *)sharedUserDefaults {\n    return [[NSUserDefaults alloc] initWithSuiteName:sharedGroupIdentifier];\n}\n\n+ (NSURL * _Nonnull)sharedGeneralConfUrl {\n    return [[Potatso sharedUrl] URLByAppendingPathComponent:@\"general.xxx\"  isDirectory:NO];\n}\n\n+ (NSURL *)sharedProxyConfUrl {\n    return [[Potatso sharedUrl] URLByAppendingPathComponent:@\"proxy.xxx\"  isDirectory:NO];\n}\n\n+ (NSURL *)sharedHttpProxyConfUrl {\n    return [[Potatso sharedUrl] URLByAppendingPathComponent:@\"http.xxx\"  isDirectory:NO];\n}\n\n+ (NSURL *)sharedLogUrl {\n    return [[Potatso sharedUrl] URLByAppendingPathComponent:@\"tunnel.log\"  isDirectory:NO];\n}\n\n+ (NSInteger) logLevel {\n    return [[Potatso sharedUserDefaults] integerForKey:kLoggingLevel];\n}\n\n+ (void) setLogLevel:(NSInteger) ll {\n    [[Potatso sharedUserDefaults] setInteger:ll forKey:kLoggingLevel];\n}\n@end\n"
  },
  {
    "path": "PotatsoBase/PotatsoBase.h",
    "content": "//\n//  PotatsoBase.h\n//  PotatsoBase\n//\n//  Created by LEI on 4/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for PotatsoBase.\nFOUNDATION_EXPORT double PotatsoBaseVersionNumber;\n\n//! Project version string for PotatsoBase.\nFOUNDATION_EXPORT const unsigned char PotatsoBaseVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <PotatsoBase/PublicHeader.h>\n\n#import \"Potatso.h\"\n#import \"JSONUtils.h\"\n#import \"NSError+Helper.h\"\n#import \"Settings.h\"\n"
  },
  {
    "path": "PotatsoBase/Settings.h",
    "content": "//\n//  Settings.h\n//  Potatso\n//\n//  Created by LEI on 7/13/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface Settings : NSObject\n+ (Settings *)shared;\n@property (nonatomic, strong) NSDate *startTime;\n@end\n"
  },
  {
    "path": "PotatsoBase/Settings.m",
    "content": "//\n//  Settings.m\n//  Potatso\n//\n//  Created by LEI on 7/13/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import \"Settings.h\"\n#import \"Potatso.h\"\n\n#define kSettingsKeyStartTime @\"startTime\"\n\n@interface Settings ()\n@property (nonatomic, strong) NSUserDefaults *userDefaults;\n@end\n\n@implementation Settings\n\n+ (Settings *)shared {\n    static Settings *settings;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        settings = [Settings new];\n    });\n    return settings;\n}\n\n- (instancetype)init {\n    self = [super init];\n    if (self) {\n        _userDefaults = [[NSUserDefaults alloc] initWithSuiteName:sharedGroupIdentifier];\n    }\n    return self;\n}\n\n- (void)setStartTime:(NSDate *)startTime {\n    [self.userDefaults setObject:startTime forKey:kSettingsKeyStartTime];\n    [self.userDefaults synchronize];\n}\n\n- (NSDate *)startTime {\n    return [self.userDefaults objectForKey:kSettingsKeyStartTime];\n}\n\n@end\n"
  },
  {
    "path": "PotatsoLibrary/Config.swift",
    "content": "//\n//  Config.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport ObjectMapper\nimport PotatsoModel\nimport RealmSwift\n\npublic enum ConfigError: Error {\n    case downloadFail\n    case syntaxError\n}\n\nextension ConfigError: CustomStringConvertible {\n    \n    public var description: String {\n        switch self {\n        case .downloadFail:\n            return \"Download fail\"\n        case .syntaxError:\n            return \"Syntax error\"\n        }\n    }\n    \n}\n\nopen class Config {\n    \n    open var groups: [ConfigurationGroup] = []\n    open var proxies: [Proxy] = []\n    open var ruleSets: [RuleSet] = []\n    \n    let realm: Realm\n    var configDict: [String: AnyObject] = [:]\n    \n    public init() {\n        realm = try! Realm()\n    }\n    \n    open func setup(string: String) throws {\n        guard let data = string.data(using: .utf8),\n            data.count > 0,\n            let dict = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: AnyObject] else {\n            throw ConfigError.syntaxError\n        }\n        self.configDict = dict\n        try setupModels()\n    }\n    \n    func setupModels() throws {\n        do {\n            try setupProxies()\n            try setupRuleSets()\n            try setupConfigGroups()\n        } catch {\n            throw error\n        }\n    }\n    \n    func setupProxies() throws {\n        if let proxiesConfig = configDict[\"proxies\"] as? [NSDictionary] {\n            proxies = proxiesConfig.map({ (config) -> Proxy? in\n                return Proxy.nsproxy(dictionary: config)\n            }).filter { $0 != nil }.map { $0! }\n            try proxies.forEach {\n                try $0.validate()\n                try DBUtils.add($0, inRealm: realm)\n            }\n        }\n    }\n    \n    func setupRuleSets() throws {\n        if let JSON = configDict[\"ruleSets\"] as? [[String: Any]] {\n            ruleSets = Mapper<RuleSet>().mapArray(JSONArray: JSON)\n            try ruleSets.forEach {\n                try $0.validate(inRealm: realm)\n                try DBUtils.add($0, inRealm: realm)\n            }\n        }\n    }\n    \n    func setupConfigGroups() throws{\n        if let proxiesConfig = configDict[\"configGroups\"] as? [[String: AnyObject]] {\n            groups = try proxiesConfig.map({ (config) -> ConfigurationGroup? in\n                return try ConfigurationGroup(dictionary: config, inRealm: realm)\n            }).filter { $0 != nil }.map { $0! }\n            try groups.forEach {\n                try $0.validate()\n                try DBUtils.add($0, inRealm: realm)\n            }\n        }\n    }\n\n}\n"
  },
  {
    "path": "PotatsoLibrary/Image.swift",
    "content": "//\n//  Images.swift\n//  Potatso\n//\n//  Created by LEI on 1/23/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\npublic extension String {\n    \n    public var image: UIImage? {\n        return UIImage(named: self)\n    }\n    \n    public var templateImage: UIImage? {\n        return UIImage(named: self)?.withRenderingMode(.alwaysTemplate)\n    }\n    \n    public var originalImage: UIImage? {\n        return UIImage(named: self)?.withRenderingMode(.alwaysOriginal)\n    }\n\n}\n"
  },
  {
    "path": "PotatsoLibrary/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "PotatsoLibrary/Manager.swift",
    "content": "//\n//  Manager.swift\n//  Potatso\n//\n//  Created by LEI on 4/7/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport PotatsoBase\nimport PotatsoModel\nimport RealmSwift\nimport NetworkExtension\nimport ICSMainFramework\nimport MMWormhole\nimport Alamofire\nimport MMDB_Swift\n\npublic enum ManagerError: Error {\n    case invalidProvider\n    case vpnStartFail\n}\n\npublic enum VPNStatus : Int {\n    case off\n    case connecting\n    case on\n    case disconnecting\n}\n\n\npublic let kDefaultGroupIdentifier = \"defaultGroup\"\npublic let kDefaultGroupName = \"defaultGroupName\"\nprivate let statusIdentifier = \"status\"\npublic let kProxyServiceVPNStatusNotification = \"kProxyServiceVPNStatusNotification\"\n\nopen class Manager {\n    \n    open static let shared = Manager()\n    \n    open fileprivate(set) var vpnStatus = VPNStatus.off {\n        didSet {\n            NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServiceVPNStatusNotification), object: nil)\n        }\n    }\n    \n    open let wormhole = MMWormhole(applicationGroupIdentifier: sharedGroupIdentifier, optionalDirectory: \"wormhole\")\n\n    var observerAdded: Bool = false\n    \n    open var defaultConfigGroup: ConfigurationGroup {\n        return getDefaultConfigGroup()\n    }\n\n    fileprivate init() {\n        loadProviderManager { (manager) -> Void in\n            if let manager = manager {\n                self.updateVPNStatus(manager)\n                if self.vpnStatus == .on {\n                    self.observerAdded = true\n                    NotificationCenter.default.addObserver(forName: NSNotification.Name.NEVPNStatusDidChange, object: manager.connection, queue: OperationQueue.main, using: { [unowned self] (notification) -> Void in\n                        self.updateVPNStatus(manager)\n                        })\n                }\n            }\n        }\n        setupDefaultReaml()\n        do {\n            try copyGEOIPData()\n        }catch{\n            print(\"copyGEOIPData fail\")\n        }\n        do {\n            try copyTemplateData()\n        } catch {\n            print(\"copyTemplateData fail\")\n        }\n    }\n    \n    func addVPNStatusObserver() {\n        guard !observerAdded else{\n            return\n        }\n        loadProviderManager { [unowned self] (manager) -> Void in\n            if let manager = manager {\n                self.observerAdded = true\n                NotificationCenter.default.addObserver(forName: NSNotification.Name.NEVPNStatusDidChange, object: manager.connection, queue: OperationQueue.main, using: { [unowned self] (notification) -> Void in\n                    self.updateVPNStatus(manager)\n                })\n            }\n        }\n    }\n    \n    deinit {\n        NotificationCenter.default.removeObserver(self)\n    }\n    \n    func updateVPNStatus(_ manager: NEVPNManager) {\n        print(\"updateVPNStatus:\", manager.connection.status.rawValue)\n        switch manager.connection.status {\n        case .connected:\n            self.vpnStatus = .on\n        case .connecting, .reasserting:\n            self.vpnStatus = .connecting\n        case .disconnecting:\n            self.vpnStatus = .disconnecting\n        case .disconnected, .invalid:\n            self.vpnStatus = .off\n        }\n    }\n\n    open func switchVPN(_ completion: ((NETunnelProviderManager?, Error?) -> Void)? = nil) {\n        loadProviderManager { [unowned self] (manager) in\n            if let manager = manager {\n                self.updateVPNStatus(manager)\n            }\n            let current = self.vpnStatus\n            guard current != .connecting && current != .disconnecting else {\n                return\n            }\n            if current == .off {\n                self.startVPN { (manager, error) -> Void in\n                    completion?(manager, error)\n                }\n            }else {\n                self.stopVPN()\n                completion?(nil, nil)\n            }\n\n        }\n    }\n    \n    open func switchVPNFromTodayWidget(_ context: NSExtensionContext) {\n        if let url = URL(string: \"mume://switch\") {\n            context.open(url, completionHandler: nil)\n        }\n    }\n\n    func copyGEOIPData() throws {\n        let toURL = Potatso.sharedUrl().appendingPathComponent(\"GeoLite2-Country.mmdb\")\n\n        if !FileManager.default.fileExists(atPath: toURL.path) {\n            let maxminddbPath = Bundle(for: MMDB.self).path(forResource: \"GeoLite2-Country\", ofType: \"mmdb\") ?? \"\"\n            if FileManager.default.fileExists(atPath: maxminddbPath) {\n                try FileManager.default.copyItem(atPath: maxminddbPath, toPath: toURL.path)\n                return\n            }\n        }\n        \n            let MaxmindLastModifiedKey = \"MaxmindLastModifiedKey\"\n            let lastM = Potatso.sharedUserDefaults().string(forKey: MaxmindLastModifiedKey) ?? \"Sun, 25 Jun 2017 00:07:41 GMT\"\n            \n            let url = URL(string: \"https://mumevpn.com/ios/GeoLite2-Country.mmdb\")\n            let request = NSMutableURLRequest(url: url!)\n            request.setValue(lastM, forHTTPHeaderField: \"If-Modified-Since\")\n            let headers: HTTPHeaders = [\n                \"If-Modified-Since\": lastM,\n            ]\n            Alamofire.request(url!, headers: headers).response { response in\n                guard let data = response.data, let r = response.response else {\n                    print(\"Download GeoLite2-Country.mmdb error: empty data\")\n                    return\n                }\n                if (r.statusCode == 200 && data.count > 1024) {\n                    let result = (try? data.write(to: toURL)) != nil\n                    if result {\n                        let thisM = r.allHeaderFields[\"Last-Modified\"];\n                        if let m = thisM {\n                            Potatso.sharedUserDefaults().set(m, forKey: MaxmindLastModifiedKey)\n                        }\n                        print(\"writeToFile GeoLite2-Country.mmdb: OK\")\n                    } else {\n                        print(\"writeToFile GeoLite2-Country.mmdb: failed\")\n                    }\n                } else {\n                    print(\"Download GeoLite2-Country.mmdb no update maybe: \" + (r.description))\n                }\n            }\n    }\n\n    func copyTemplateData() throws {\n        guard let bundleURL = Bundle.main.url(forResource: \"template\", withExtension: \"bundle\") else {\n            return\n        }\n        let fm = FileManager.default\n        let toDirectoryURL = Potatso.sharedUrl().appendingPathComponent(\"httptemplate\")\n        if !fm.fileExists(atPath: toDirectoryURL.path) {\n            try fm.createDirectory(at: toDirectoryURL, withIntermediateDirectories: true, attributes: nil)\n        }\n        for file in try fm.contentsOfDirectory(atPath: bundleURL.path) {\n            let destURL = toDirectoryURL.appendingPathComponent(file)\n            let dataURL = bundleURL.appendingPathComponent(file)\n            if FileManager.default.fileExists(atPath: dataURL.path) {\n                if FileManager.default.fileExists(atPath: destURL.path) {\n                    try FileManager.default.removeItem(at: destURL)\n                }\n                try fm.copyItem(at: dataURL, to: destURL)\n            }\n        }\n    }\n\n    fileprivate func getDefaultConfigGroup() -> ConfigurationGroup {\n        if let groupUUID = Potatso.sharedUserDefaults().string(forKey: kDefaultGroupIdentifier), let group = DBUtils.get(groupUUID, type: ConfigurationGroup.self) {\n            return group\n        } else {\n            var group = ConfigurationGroup()\n            do {\n                if let g = DBUtils.all(ConfigurationGroup.self, sorted: \"createAt\").first {\n                    group = g\n                } else {\n                    group.name = \"Default\".localized()\n                    try DBUtils.add(group)\n                }\n            } catch {\n                group.name = \"Default\".localized()\n            }\n            let uuid = group.uuid\n            let name = group.name\n            DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async(execute: {\n                self.setDefaultConfigGroup(uuid, name: name)\n            })\n            return group\n        }\n    }\n    \n    open func setDefaultConfigGroup(_ id: String, name: String) -> Bool {\n        Potatso.sharedUserDefaults().set(id, forKey: kDefaultGroupIdentifier)\n        Potatso.sharedUserDefaults().set(name, forKey: kDefaultGroupName)\n        Potatso.sharedUserDefaults().synchronize()\n        do {\n            try regenerateConfigFiles()\n            return true\n        } catch {\n            return false\n        }\n    }\n    \n    open func regenerateConfigFiles() throws {\n        try generateGeneralConfig()\n        try generateShadowsocksConfig()\n        try generateHttpProxyConfig()\n    }\n\n}\n\nextension ConfigurationGroup {\n\n    public var isDefault: Bool {\n        let defaultUUID = Manager.shared.defaultConfigGroup.uuid\n        let isDefault = defaultUUID == uuid\n        return isDefault\n    }\n    \n}\n\nextension Manager {\n    \n    var upstreamProxy: Proxy? {\n        return defaultConfigGroup.proxies.first\n    }\n    \n    var defaultToProxy: Bool {\n        return upstreamProxy != nil && defaultConfigGroup.defaultToProxy\n    }\n    \n    open func generateGeneralConfig() throws {\n        let confURL = Potatso.sharedGeneralConfUrl()\n        let json: NSDictionary = [\"dns\": defaultConfigGroup.dns]\n        do {\n            if let str = json.jsonString() {\n                print(\"generateGeneralConfig: \" + str)\n                try str.write(to: confURL, atomically: true, encoding: String.Encoding.utf8)\n            } else {\n                print(\"generateGeneralConfig: empty str\")\n            }\n        } catch {\n            print(\"generateGeneralConfig error\")\n        }\n    }\n    \n    open func generateShadowsocksConfig() throws {\n        let confURL = Potatso.sharedProxyConfUrl()\n        var content = \"\"\n        if let upstreamProxy = upstreamProxy {\n            if upstreamProxy.type == .Shadowsocks || upstreamProxy.type == .ShadowsocksR {\n                let dict: NSDictionary = [\n                    \"type\": upstreamProxy.type.rawValue,\n                    \"host\": upstreamProxy.ip ?? upstreamProxy.host,\n                    \"port\": upstreamProxy.port,\n                    \"password\": upstreamProxy.password ?? \"\",\n                    \"authscheme\": upstreamProxy.authscheme ?? \"\", \"ota\": upstreamProxy.ota, \"protocol\": upstreamProxy.ssrProtocol ?? \"\", \"obfs\": upstreamProxy.ssrObfs ?? \"\", \"obfs_param\": upstreamProxy.ssrObfsParam ?? \"\"]\n                content = dict.jsonString() ?? \"\"\n            } else if upstreamProxy.type == .Socks5 {\n                let dict: NSDictionary = [\n                    \"type\": upstreamProxy.type.rawValue,\n                    \"host\": upstreamProxy.ip ?? upstreamProxy.host,\n                    \"port\": upstreamProxy.port, \"password\": upstreamProxy.password ?? \"\", \"authscheme\": upstreamProxy.authscheme ?? \"\"]\n                content = dict.jsonString() ?? \"\"\n            }\n        }\n        print(\"generateShadowsocksConfig: \" + content)\n        try content.write(to: confURL, atomically: true, encoding: String.Encoding.utf8)\n    }\n    \n    open func generateHttpProxyConfig() throws {\n        let rootUrl = Potatso.sharedUrl()\n        let confDirUrl = rootUrl.appendingPathComponent(\"httpconf\")\n        let templateDirPath = rootUrl.appendingPathComponent(\"httptemplate\").path\n        let temporaryDirPath = rootUrl.appendingPathComponent(\"httptemporary\").path\n        let logDir = rootUrl.appendingPathComponent(\"log\").path\n        var maxminddbPath = rootUrl.appendingPathComponent(\"GeoLite2-Country.mmdb\").path\n        if !FileManager.default.fileExists(atPath: maxminddbPath) {\n            maxminddbPath = Bundle(for: MMDB.self).path(forResource: \"GeoLite2-Country\", ofType: \"mmdb\") ?? \"\"\n        }\n        let userActionUrl = confDirUrl.appendingPathComponent(\"mume.action\")\n        let directDomainsUrl = confDirUrl.appendingPathComponent(\"mume.direct\")\n        for p in [confDirUrl.path, templateDirPath, temporaryDirPath, logDir] {\n            if !FileManager.default.fileExists(atPath: p) {\n                _ = try? FileManager.default.createDirectory(atPath: p, withIntermediateDirectories: true, attributes: [FileAttributeKey.protectionKey.rawValue: FileProtectionType.none])\n            }\n        }\n        \n        var mainConf = NSMutableDictionary()\n        if let path = Bundle.main.path(forResource: \"proxy\", ofType: \"plist\"), let defaultConf = NSMutableDictionary(contentsOfFile: path) {\n            mainConf = defaultConf\n        }\n        mainConf[\"confdir\"] = confDirUrl.path\n        mainConf[\"templdir\"] = templateDirPath\n        mainConf[\"logdir\"] = logDir\n        mainConf[\"mmdbpath\"] = maxminddbPath\n        mainConf[\"global-mode\"] = defaultToProxy\n//        mainConf[\"debug\"] = 1024+65536+1\n        mainConf[\"debug\"] = \"131071\"\n        if Potatso.logLevel() > 0 {\n            mainConf[\"logfile\"] = privoxyLogFile\n        }\n        mainConf[\"actionsfile\"] = userActionUrl.path\n        mainConf[\"tolerate-pipelining\"] = 1\n        let mainContent = mainConf.map { \"\\($0) \\($1)\"}.joined(separator: \"\\n\")\n        try mainContent.write(to: Potatso.sharedHttpProxyConfUrl(), atomically: true, encoding: String.Encoding.utf8)\n\n        var actionContent: [String] = []\n        var forwardURLRules: [String] = []\n        var forwardIPRules: [String] = []\n        var forwardGEOIPRules: [String] = []\n        var directDomainRules = [String]()\n        let rules = defaultConfigGroup.ruleSets.flatMap({ $0.rules })\n        for rule in rules {\n            \n            switch rule.type {\n            case .GeoIP:\n                forwardGEOIPRules.append(rule.description)\n            case .IPCIDR:\n                forwardIPRules.append(rule.description)\n            default:\n                if rule.action == .Direct,\n                    (rule.type == .DomainSuffix) {\n                    directDomainRules.append(rule.value)\n                } else {\n                    forwardURLRules.append(rule.description)\n                }\n            }\n        }\n\n        if forwardURLRules.count > 0 {\n            actionContent.append(\"{+forward-rule}\")\n            actionContent.append(contentsOf: forwardURLRules)\n        }\n\n        if forwardIPRules.count > 0 {\n            actionContent.append(\"{+forward-rule}\")\n            actionContent.append(contentsOf: forwardIPRules)\n        }\n\n        if forwardGEOIPRules.count > 0 {\n            actionContent.append(\"{+forward-rule}\")\n            actionContent.append(contentsOf: forwardGEOIPRules)\n        }\n\n        // DNS pollution\n        actionContent.append(\"{+forward-rule}\")\n        actionContent.append(contentsOf: Pollution.dnsList.map({ \"DNS-IP-CIDR, \\($0)/32, PROXY\" }))\n\n        let userActionString = actionContent.joined(separator: \"\\n\")\n        print(\"[generateHttpProxyConfig] \" + userActionUrl.path + \": \" + userActionString)\n        try userActionString.write(toFile: userActionUrl.path, atomically: true, encoding: .utf8)\n        print(\"[generateHttpProxyConfig] \" + directDomainsUrl.path + \": \" + directDomainRules.joined(separator: \"\\n\"))\n        try directDomainRules.joined(separator: \"\\n\").write(to: directDomainsUrl, atomically: true, encoding: .utf8)\n    }\n\n}\n\nextension Manager {\n    \n    public func startVPN(_ complete: ((NETunnelProviderManager?, Error?) -> Void)? = nil) {\n        startVPNWithOptions(nil, complete: complete)\n    }\n    \n    fileprivate func startVPNWithOptions(_ options: [String : NSObject]?, complete: ((NETunnelProviderManager?, Error?) -> Void)? = nil) {\n        // Load provider\n        loadAndCreateProviderManager { (manager, error) -> Void in\n            if let error = error {\n                complete?(nil, error)\n            }else{\n                guard let manager = manager else {\n                    complete?(nil, ManagerError.invalidProvider)\n                    return\n                }\n                if manager.connection.status == .disconnected || manager.connection.status == .invalid {\n                    do {\n                        try manager.connection.startVPNTunnel(options: options)\n                        self.addVPNStatusObserver()\n                        complete?(manager, nil)\n                    }catch {\n                        complete?(nil, error)\n                    }\n                }else{\n                    self.addVPNStatusObserver()\n                    complete?(manager, nil)\n                }\n            }\n        }\n    }\n    \n    public func stopVPN() -> Bool {\n        // Stop provider\n        if self.vpnStatus == .off {\n            return false\n        }\n        loadProviderManager { (manager) -> Void in\n            guard let manager = manager else {\n                return\n            }\n            manager.connection.stopVPNTunnel()\n        }\n        return true\n    }\n    \n    public func postToNETunnel(message: String, complete: @escaping (Int, Data?) -> Void) {\n        loadProviderManager { (manager) -> Void in\n            if let session = manager?.connection as? NETunnelProviderSession,\n                let data = message.data(using: String.Encoding.utf8), manager?.connection.status != .invalid\n            {\n                do {\n                    print(\"postToNETunnel: \" + message);\n                    try session.sendProviderMessage(data) { response in\n                        if let response = response {\n                            print(\"Received from T: \" + (String(data: response, encoding: .utf8) ?? \"\"))\n                            complete(0, response)\n                        } else {\n                            print(\"Received from T: empty\");\n                            complete(1, nil)\n                        }\n                    }\n                } catch {\n                    complete(2, nil)\n                    print(\"Failed to send a message to the provider\")\n                }\n            } else {\n                complete(4, nil)\n            }\n        }\n    }\n    \n    fileprivate func loadAndCreateProviderManager(_ complete: @escaping (NETunnelProviderManager?, Error?) -> Void ) {\n        NETunnelProviderManager.loadAllFromPreferences { [unowned self] (managers, error) -> Void in\n            if let managers = managers {\n                let manager: NETunnelProviderManager = (managers.count) > 0 ? managers[0] : self.createProviderManager()\n                manager.isEnabled = true\n                manager.localizedDescription = AppEnv.appName\n                manager.protocolConfiguration?.serverAddress = AppEnv.appName\n                manager.isOnDemandEnabled = true\n                let quickStartRule = NEOnDemandRuleEvaluateConnection()\n                quickStartRule.connectionRules = [NEEvaluateConnectionRule(matchDomains: [\"connect.mume.vpn\"], andAction: NEEvaluateConnectionRuleAction.connectIfNeeded)]\n                manager.onDemandRules = [quickStartRule]\n                manager.saveToPreferences(completionHandler: { (error) -> Void in\n                    if let error = error {\n                        print(\"Failed to saveToPreferencesWithCompletionHandler\")\n                        complete(nil, error)\n                    }else{\n                        print(\"Did saveToPreferencesWithCompletionHandler\")\n                        complete(manager, nil)\n                    }\n                })\n            }else{\n                complete(nil, error)\n            }\n        }\n    }\n    \n    public func loadProviderManager(_ complete: @escaping (NETunnelProviderManager?) -> Void) {\n        NETunnelProviderManager.loadAllFromPreferences { (managers, error) -> Void in\n            if let managers = managers {\n                if managers.count > 0 {\n                    let manager = managers[0]\n                    complete(manager)\n                    return\n                }\n            }\n            complete(nil)\n        }\n    }\n    \n    fileprivate func createProviderManager() -> NETunnelProviderManager {\n        let manager = NETunnelProviderManager()\n        let p = NETunnelProviderProtocol()\n        p.providerBundleIdentifier = \"info.liruqi.potatso.tunnel\"\n        if let upstreamProxy = upstreamProxy {\n            p.providerConfiguration = [\"host\": upstreamProxy.host, \"port\": upstreamProxy.port]\n            p.serverAddress = upstreamProxy.host\n        }\n        manager.protocolConfiguration = p\n        return manager\n    }\n}\n\n"
  },
  {
    "path": "PotatsoLibrary/Pollution.swift",
    "content": "//\n//  Pollution.swift\n//  Potatso\n//\n//  Created by LEI on 6/25/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\n\nstruct Pollution {\n\n    static var dnsList: [String] {\n        return [\n            \"1.1.127.45\",\n            \"1.1.67.51\",\n            \"1.2.3.4\",\n            \"1.209.208.200\",\n            \"1.226.83.147\",\n            \"1.234.21.83\",\n            \"1.234.29.40\",\n            \"1.234.39.14\",\n            \"1.234.4.91\",\n            \"1.234.70.80\",\n            \"1.234.83.104\",\n            \"1.244.115.172\",\n            \"1.33.170.68\",\n            \"1.33.188.62\",\n            \"1.33.190.228\",\n            \"1.33.190.70\",\n            \"1.33.191.58\",\n            \"104.200.31.226\",\n            \"104.28.1.22\",\n            \"104.28.14.112\",\n            \"104.28.20.14\",\n            \"104.28.30.59\",\n            \"106.186.120.157\",\n            \"106.187.39.80\",\n            \"107.6.34.101\",\n            \"108.168.215.230\",\n            \"108.168.250.3\",\n            \"108.179.196.77\",\n            \"108.179.250.106\",\n            \"108.61.250.218\",\n            \"109.123.115.205\",\n            \"109.206.173.212\",\n            \"109.234.159.38\",\n            \"109.71.81.130\",\n            \"110.173.154.142\",\n            \"110.74.163.40\",\n            \"112.175.60.31\",\n            \"113.11.194.190\",\n            \"113.160.102.90\",\n            \"118.145.17.184\",\n            \"118.219.253.245\",\n            \"118.5.49.6\",\n            \"119.18.62.130\",\n            \"119.235.57.82\",\n            \"119.245.217.155\",\n            \"119.9.94.83\",\n            \"12.87.133.0\",\n            \"120.89.93.248\",\n            \"122.214.2.171\",\n            \"122.218.101.190\",\n            \"123.126.249.238\",\n            \"123.30.175.29\",\n            \"123.50.49.171\",\n            \"125.230.148.48\",\n            \"127.0.0.2\",\n            \"128.121.126.139\",\n            \"128.199.180.162\",\n            \"133.192.181.66\",\n            \"133.242.165.24\",\n            \"133.42.48.3\",\n            \"137.135.129.175\",\n            \"14.102.249.18\",\n            \"141.101.118.102\",\n            \"141.8.195.47\",\n            \"141.8.195.78\",\n            \"141.8.225.80\",\n            \"142.4.5.109\",\n            \"144.76.106.232\",\n            \"144.76.127.114\",\n            \"144.76.21.13\",\n            \"145.253.183.23\",\n            \"147.87.244.32\",\n            \"155.92.182.118\",\n            \"157.205.32.64\",\n            \"157.7.143.209\",\n            \"159.106.121.75\",\n            \"159.253.20.179\",\n            \"159.50.88.77\",\n            \"16.63.155.0\",\n            \"162.159.243.101\",\n            \"162.243.137.163\",\n            \"162.253.33.134\",\n            \"164.109.96.232\",\n            \"164.138.221.68\",\n            \"168.156.168.21\",\n            \"169.132.13.103\",\n            \"171.17.130.53\",\n            \"171.25.204.141\",\n            \"173.192.219.59\",\n            \"173.194.127.144\",\n            \"173.201.216.6\",\n            \"173.224.209.14\",\n            \"173.236.228.108\",\n            \"173.244.184.10\",\n            \"173.255.194.174\",\n            \"173.255.230.196\",\n            \"174.142.113.142\",\n            \"174.142.22.25\",\n            \"176.10.37.81\",\n            \"176.57.216.145\",\n            \"178.18.82.216\",\n            \"178.236.177.77\",\n            \"178.32.111.136\",\n            \"178.32.156.59\",\n            \"178.32.247.82\",\n            \"178.33.212.162\",\n            \"178.49.132.135\",\n            \"178.62.242.156\",\n            \"178.62.75.99\",\n            \"178.79.182.248\",\n            \"180.153.225.168\",\n            \"180.179.171.121\",\n            \"180.87.182.227\",\n            \"181.224.155.41\",\n            \"183.111.141.95\",\n            \"184.154.10.146\",\n            \"184.169.132.244\",\n            \"184.72.253.232\",\n            \"185.25.150.45\",\n            \"185.53.61.50\",\n            \"188.132.250.186\",\n            \"188.165.31.24\",\n            \"188.226.207.251\",\n            \"188.40.108.13\",\n            \"188.5.4.96\",\n            \"189.163.17.5\",\n            \"192.104.44.6\",\n            \"192.121.151.106\",\n            \"192.67.198.6\",\n            \"192.95.98.202\",\n            \"193.105.145.158\",\n            \"193.169.66.88\",\n            \"193.203.48.18\",\n            \"193.234.233.149\",\n            \"193.238.151.98\",\n            \"193.239.132.44\",\n            \"193.48.96.218\",\n            \"193.57.244.117\",\n            \"193.91.26.132\",\n            \"194.149.250.20\",\n            \"194.185.115.1\",\n            \"194.187.94.6\",\n            \"194.67.144.70\",\n            \"195.146.235.33\",\n            \"195.149.210.211\",\n            \"195.154.243.151\",\n            \"195.191.149.103\",\n            \"195.2.88.68\",\n            \"195.211.72.200\",\n            \"195.43.82.170\",\n            \"195.49.201.30\",\n            \"195.50.195.15\",\n            \"195.74.38.62\",\n            \"195.74.78.21\",\n            \"195.77.241.242\",\n            \"195.8.125.64\",\n            \"197.4.4.12\",\n            \"198.143.143.36\",\n            \"198.57.205.133\",\n            \"198.57.222.88\",\n            \"198.58.124.68\",\n            \"199.167.31.142\",\n            \"199.21.68.222\",\n            \"199.79.63.83\",\n            \"2.1.1.2\",\n            \"2.187.253.121\",\n            \"2.228.123.7\",\n            \"2.228.154.8\",\n            \"20.139.56.0\",\n            \"200.229.206.115\",\n            \"200.98.234.14\",\n            \"201.77.211.143\",\n            \"202.106.1.2\",\n            \"202.181.7.85\",\n            \"202.218.219.10\",\n            \"202.6.96.25\",\n            \"203.113.173.22\",\n            \"203.133.238.172\",\n            \"203.161.230.171\",\n            \"203.199.57.81\",\n            \"203.98.7.65\",\n            \"206.108.51.91\",\n            \"206.113.150.70\",\n            \"207.12.88.98\",\n            \"207.126.59.27\",\n            \"207.140.149.247\",\n            \"207.58.177.166\",\n            \"208.109.138.55\",\n            \"208.109.205.232\",\n            \"208.112.102.122\",\n            \"208.43.134.107\",\n            \"208.43.33.194\",\n            \"208.56.31.43\",\n            \"208.73.211.164\",\n            \"208.86.154.112\",\n            \"208.93.0.150\",\n            \"209.116.71.109\",\n            \"209.126.106.182\",\n            \"209.141.48.35\",\n            \"209.145.54.50\",\n            \"209.188.7.186\",\n            \"209.204.148.22\",\n            \"209.220.30.174\",\n            \"209.235.224.25\",\n            \"209.36.73.33\",\n            \"209.43.1.130\",\n            \"209.56.158.42\",\n            \"209.62.154.94\",\n            \"209.85.229.138\",\n            \"210.175.255.154\",\n            \"210.209.110.199\",\n            \"210.230.192.183\",\n            \"211.43.203.33\",\n            \"211.5.133.18\",\n            \"211.8.69.27\",\n            \"211.94.66.147\",\n            \"212.227.98.130\",\n            \"212.45.52.219\",\n            \"212.68.42.67\",\n            \"212.77.104.29\",\n            \"213.108.66.21\",\n            \"213.133.111.102\",\n            \"213.169.251.35\",\n            \"213.174.158.108\",\n            \"213.186.33.5\",\n            \"213.19.161.141\",\n            \"213.207.85.148\",\n            \"213.238.166.227\",\n            \"216.12.205.2\",\n            \"216.139.213.144\",\n            \"216.178.241.101\",\n            \"216.198.246.103\",\n            \"216.221.188.182\",\n            \"216.234.179.13\",\n            \"216.250.115.144\",\n            \"216.38.0.92\",\n            \"216.70.88.29\",\n            \"216.92.58.37\",\n            \"217.160.42.85\",\n            \"217.172.183.9\",\n            \"217.30.184.161\",\n            \"218.44.251.212\",\n            \"220.110.150.90\",\n            \"220.247.224.8\",\n            \"221.213.49.149\",\n            \"221.8.69.27\",\n            \"222.122.56.219\",\n            \"23.23.14.192\",\n            \"23.89.5.60\",\n            \"24.51.184.0\",\n            \"243.185.187.30\",\n            \"243.185.187.39\",\n            \"249.129.46.48\",\n            \"253.157.14.165\",\n            \"28.121.126.139\",\n            \"28.13.216.0\",\n            \"31.169.90.4\",\n            \"31.170.8.8\",\n            \"31.210.156.212\",\n            \"31.22.4.60\",\n            \"31.222.185.202\",\n            \"31.25.191.134\",\n            \"34.254.247.151\",\n            \"37.1.205.21\",\n            \"37.1.207.129\",\n            \"37.140.238.35\",\n            \"37.187.134.150\",\n            \"37.187.149.129\",\n            \"37.187.251.35\",\n            \"37.252.122.184\",\n            \"37.58.78.79\",\n            \"37.59.25.95\",\n            \"37.61.54.158\",\n            \"37.99.194.148\",\n            \"38.117.98.231\",\n            \"4.17.143.131\",\n            \"4.193.80.0\",\n            \"4.21.70.9\",\n            \"4.30.13.168\",\n            \"4.30.187.9\",\n            \"4.30.235.229\",\n            \"4.31.139.146\",\n            \"4.34.180.178\",\n            \"4.35.100.20\",\n            \"4.35.234.200\",\n            \"4.36.66.178\",\n            \"4.53.17.215\",\n            \"4.59.79.206\",\n            \"4.78.167.196\",\n            \"4.79.129.122\",\n            \"41.79.20.9\",\n            \"43.253.199.12\",\n            \"46.137.219.7\",\n            \"46.165.231.144\",\n            \"46.20.126.252\",\n            \"46.20.13.100\",\n            \"46.229.175.95\",\n            \"46.243.6.170\",\n            \"46.30.212.198\",\n            \"46.38.24.209\",\n            \"46.82.174.68\",\n            \"49.2.123.56\",\n            \"49.212.153.128\",\n            \"5.10.105.41\",\n            \"5.10.68.187\",\n            \"5.10.68.188\",\n            \"5.10.69.29\",\n            \"5.10.77.72\",\n            \"5.100.152.24\",\n            \"5.100.225.204\",\n            \"5.100.228.206\",\n            \"5.100.231.27\",\n            \"5.100.248.208\",\n            \"5.144.129.20\",\n            \"5.35.251.108\",\n            \"5.9.118.111\",\n            \"5.9.120.140\",\n            \"5.9.136.210\",\n            \"5.9.242.232\",\n            \"5.9.5.26\",\n            \"5.9.65.105\",\n            \"59.24.3.174\",\n            \"50.116.6.162\",\n            \"50.18.183.233\",\n            \"50.57.11.12\",\n            \"50.63.202.13\",\n            \"50.87.148.140\",\n            \"50.87.169.77\",\n            \"50.93.207.101\",\n            \"50.97.134.91\",\n            \"54.174.40.182\",\n            \"54.187.136.30\",\n            \"54.187.39.38\",\n            \"54.191.193.138\",\n            \"54.200.3.32\",\n            \"54.206.98.127\",\n            \"54.209.238.28\",\n            \"54.209.87.186\",\n            \"54.218.38.198\",\n            \"54.229.147.183\",\n            \"54.235.199.154\",\n            \"54.244.22.77\",\n            \"54.246.169.32\",\n            \"54.246.202.250\",\n            \"54.68.166.130\",\n            \"54.76.135.1\",\n            \"54.83.51.191\",\n            \"54.86.21.64\",\n            \"54.86.223.202\",\n            \"54.88.252.91\",\n            \"59.124.74.28\",\n            \"59.24.3.173\",\n            \"61.54.28.6\",\n            \"62.138.115.35\",\n            \"62.75.221.31\",\n            \"62.92.17.213\",\n            \"64.14.72.41\",\n            \"64.150.184.98\",\n            \"64.22.110.34\",\n            \"64.33.88.161\",\n            \"64.33.99.47\",\n            \"64.34.161.142\",\n            \"64.50.179.133\",\n            \"64.66.163.251\",\n            \"64.79.69.250\",\n            \"64.79.84.141\",\n            \"64.91.254.97\",\n            \"65.104.202.252\",\n            \"65.160.219.113\",\n            \"65.183.39.139\",\n            \"66.146.2.241\",\n            \"66.187.204.50\",\n            \"66.206.11.194\",\n            \"66.39.61.161\",\n            \"66.45.252.237\",\n            \"66.55.151.148\",\n            \"66.85.134.186\",\n            \"66.96.147.160\",\n            \"67.137.227.11\",\n            \"67.225.220.248\",\n            \"68.71.58.18\",\n            \"69.16.196.113\",\n            \"69.167.172.162\",\n            \"69.171.13.49\",\n            \"69.174.244.221\",\n            \"69.175.75.202\",\n            \"69.195.124.90\",\n            \"69.30.23.10\",\n            \"69.50.192.218\",\n            \"69.61.60.122\",\n            \"70.42.243.33\",\n            \"72.14.205.104\",\n            \"72.14.205.99\",\n            \"72.167.32.10\",\n            \"72.20.110.50\",\n            \"72.29.94.240\",\n            \"72.32.4.243\",\n            \"72.47.228.79\",\n            \"72.5.1.109\",\n            \"72.52.244.56\",\n            \"74.117.117.122\",\n            \"74.117.57.138\",\n            \"74.124.195.73\",\n            \"74.125.127.102\",\n            \"74.125.155.102\",\n            \"74.125.204.121\",\n            \"74.125.39.102\",\n            \"74.125.39.113\",\n            \"74.207.236.174\",\n            \"74.208.125.184\",\n            \"74.220.215.67\",\n            \"74.82.166.166\",\n            \"75.98.175.166\",\n            \"76.164.217.116\",\n            \"77.4.7.92\",\n            \"78.108.178.26\",\n            \"78.140.172.33\",\n            \"78.16.49.15\",\n            \"78.24.135.99\",\n            \"79.127.127.68\",\n            \"79.136.125.49\",\n            \"79.98.34.60\",\n            \"8.105.84.0\",\n            \"8.34.161.150\",\n            \"8.7.198.45\",\n            \"8.7.198.46\",\n            \"80.190.96.26\",\n            \"80.241.209.19\",\n            \"80.241.92.180\",\n            \"80.245.171.70\",\n            \"80.70.184.118\",\n            \"80.72.41.146\",\n            \"80.82.117.209\",\n            \"80.82.201.154\",\n            \"80.92.117.132\",\n            \"82.145.47.117\",\n            \"83.125.118.122\",\n            \"83.222.124.187\",\n            \"83.222.5.171\",\n            \"84.124.59.165\",\n            \"85.111.18.138\",\n            \"85.190.0.110\",\n            \"85.25.171.103\",\n            \"85.92.134.229\",\n            \"87.106.57.209\",\n            \"87.230.46.50\",\n            \"88.198.69.101\",\n            \"88.214.195.67\",\n            \"89.108.118.129\",\n            \"89.111.181.74\",\n            \"89.186.95.11\",\n            \"89.30.125.204\",\n            \"89.31.55.106\",\n            \"90.156.201.42\",\n            \"91.121.245.154\",\n            \"91.186.28.41\",\n            \"91.198.129.47\",\n            \"91.217.73.22\",\n            \"91.221.37.35\",\n            \"91.223.175.25\",\n            \"91.238.30.54\",\n            \"91.239.201.16\",\n            \"92.53.106.175\",\n            \"92.53.96.9\",\n            \"92.63.110.174\",\n            \"93.115.240.148\",\n            \"93.158.121.72\",\n            \"93.187.205.2\",\n            \"93.46.8.89\",\n            \"93.46.8.90\",\n            \"93.93.187.49\",\n            \"94.136.188.30\",\n            \"94.141.31.140\",\n            \"94.23.147.142\",\n            \"94.23.156.11\",\n            \"94.23.193.224\",\n            \"94.23.199.144\",\n            \"95.163.95.47\",\n            \"95.211.150.70\",\n            \"95.211.229.156\",\n            \"95.211.58.97\",\n            \"95.85.22.163\",\n            \"96.126.97.15\",\n            \"96.127.172.221\",\n            \"96.30.51.148\",\n            \"97.74.80.22\",\n            \"98.129.229.202\",\n            \"98.158.152.159\",\n            \"98.158.178.141\"\n        ]\n    }\n\n}\n"
  },
  {
    "path": "PotatsoLibrary/PotatsoLibrary.h",
    "content": "//\n//  PotatsoLibrary.h\n//  PotatsoLibrary\n//\n//  Created by LEI on 12/16/15.\n//  Copyright © 2015 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for PotatsoLibrary.\nFOUNDATION_EXPORT double PotatsoLibraryVersionNumber;\n\n//! Project version string for PotatsoLibrary.\nFOUNDATION_EXPORT const unsigned char PotatsoLibraryVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <PotatsoLibrary/PublicHeader.h>\n\n"
  },
  {
    "path": "PotatsoLibraryTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.4.6</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>121</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "PotatsoLibraryTests/PotatsoLibraryTests.swift",
    "content": "//\n//  PotatsoLibraryTests.swift\n//  PotatsoLibraryTests\n//\n//  Created by LEI on 4/8/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport XCTest\nimport RealmSwift\nimport PotatsoModel\n@testable import PotatsoLibrary\n\nclass PotatsoLibraryTests: XCTestCase {\n    \n    let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: \"test\"))\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testEmptyString() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n//        let config = Config()\n//        do {\n//            try config.setup(string: \"\")\n//        }catch ProxyError.InvalidConfig {\n//            \n//        }catch {\n//        }\n    }\n    \n    func testSyntaxError() {\n        let config = Config()\n        do {\n            try config.setup(string:\"ss-1s: xx \\nsds\" )\n            assert(false)\n        }catch ConfigError.SyntaxError {\n            \n        }catch {\n            assert(false)\n        }\n\n    }\n    \n    // MARK - Proxy\n    \n    func testInvalidProxy() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\"].joinWithSeparator(\"\\n\"))\n            assert(false)\n        }catch ProxyError.InvalidPassword {\n            \n        }catch {\n            assert(false)\n        }\n    }\n    \n    func testSingle() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\",\n                \"  password: 12345\"].joinWithSeparator(\"\\n\"))\n            assert(config.proxies.count == 1)\n            let proxy = config.proxies[0]\n            assert(proxy.name == \"vultr\")\n            assert(proxy.type == .Shadowsocks)\n            assert(proxy.host == \"10.0.0.0\")\n            assert(proxy.port == 9000)\n            assert(proxy.authscheme == \"rc4-md5\")\n            assert(proxy.password == \"12345\")\n        }catch {\n            assert(false)\n        }\n    }\n\n    func testMultiple() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\",\n                \"  password: 12345\",\n                \"- name: vultr2\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\",\n                \"  password: 12345\"].joinWithSeparator(\"\\n\"))\n            assert(config.proxies.count == 2)\n        }catch {\n            assert(false)\n        }\n    }\n    \n    func testMultipleSameName() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\",\n                \"  password: 12345\",\n                \"- name: vultr\",\n                \"  type: shadowsocks\",\n                \"  host: 10.0.0.0\",\n                \"  port: 9000\",\n                \"  encryption: rc4-md5\",\n                \"  password: 12345\"].joinWithSeparator(\"\\n\"))\n            assert(false)\n        }catch ProxyError.NameAlreadyExists {\n            \n        }catch {\n            assert(false)\n        }\n    }\n    \n    func testUri() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  uri: ss://salsa20:%%%%$$$:@@10.0.0.0:443\"].joinWithSeparator(\"\\n\"))\n            assert(config.proxies.count == 1)\n            let proxy = config.proxies[0]\n            assert(proxy.name == \"vultr\")\n            assert(proxy.type == .Shadowsocks)\n            assert(proxy.host == \"10.0.0.0\")\n            assert(proxy.port == 443)\n            assert(proxy.authscheme == \"salsa20\")\n            assert(proxy.password == \"%%%%$$$:@\")\n        }catch {\n            assert(false)\n        }\n    }\n    \n    func testInvalidUri() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        let config = Config()\n        do {\n            try config.setup(string: [\n                \"proxies:\\n\",\n                \"- name: vultr\",\n                \"  uri: ss://salsa20:%%%%$$$:@@10.0.0.0\"].joinWithSeparator(\"\\n\"))\n            assert(false)\n        }catch {\n        }\n    }\n    \n    // MARK: - Rule\n    \n    func testRule() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n        do {\n            var rule = try Rule(str: \"DOMAIN-MATCH, google, DIRECT\")\n            assert(rule.action == .Direct)\n            assert(rule.type == .DomainMatch)\n            assert(rule.value == \"google\")\n            \n            rule = try Rule(str: \"DOMAIN-MATCH, google, PROXY\")\n            assert(rule.action == .Proxy)\n            \n            rule = try Rule(str: \"DOMAIN-MATCH, baidu, REJECT\")\n            assert(rule.action == .Reject)\n            assert(rule.value == \"baidu\")\n            \n            rule = try Rule(str: \"DOMAIN-SUFFIX, baidu.com, REJECT\")\n            assert(rule.type == .DomainSuffix)\n            \n            rule = try Rule(str: \"DOMAIN, www.baidu.com, REJECT\")\n            assert(rule.type == .Domain)\n            \n            rule = try Rule(str: \"URL, www.baidu.com, REJECT\")\n            assert(rule.type == .URL)\n            \n            rule = try Rule(str: \"URL-MATCH, ^(https?:\\\\/\\\\/)?api\\\\.xiachufang\\\\.com\\\\/v\\\\d\\\\/ad\\\\/show\\\\.json, REJECT\")\n            assert(rule.type == .URLMatch)\n            assert(rule.value == \"^(https?:\\\\/\\\\/)?api\\\\.xiachufang\\\\.com\\\\/v\\\\d\\\\/ad\\\\/show\\\\.json\")\n            \n            rule = try Rule(str: \"IP-CIDR, 17.0.0.0/8, PROXY\")\n            assert(rule.type == .IPCIDR)\n            \n            rule = try Rule(str: \"GEOIP, cn, PROXY\")\n            assert(rule.type == .GeoIP)\n        }catch {\n            assert(false)\n        }\n    }\n    \n}\n"
  },
  {
    "path": "PotatsoModel/BaseModel.swift",
    "content": "//\n//  BaseModel.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport RealmSwift\nimport PotatsoBase\nimport CloudKit\n\nprivate let version: UInt64 = 23\npublic var defaultRealm: Realm!\n\npublic func setupDefaultReaml() {\n    var config = Realm.Configuration()\n    let sharedURL = Potatso.sharedDatabaseUrl()\n    \n    config.fileURL = sharedURL\n    config.schemaVersion = version\n    config.migrationBlock = { migration, oldSchemaVersion in\n        if oldSchemaVersion < version {\n            migration.enumerateObjects(ofType: Proxy.className()) { oldObject, newObject in\n                guard let oldObject = oldObject, let newObject = newObject else {\n                    return\n                }\n                if oldObject[\"typeRaw\"] as? String == ProxyType.ShadowsocksR.rawValue {\n                    return\n                }\n                newObject[\"typeRaw\"] = oldObject[\"typeRaw\"] as! String\n                newObject[\"host\"] = oldObject[\"host\"] as! String\n                newObject[\"port\"] = oldObject[\"port\"] as! Int\n                newObject[\"authscheme\"] = oldObject[\"authscheme\"] as? String\n                newObject[\"user\"] = oldObject[\"user\"] as? String\n                newObject[\"password\"] = oldObject[\"password\"] as? String\n                newObject[\"ota\"] = oldObject[\"ota\"] as? Bool\n            }\n        }\n    }\n    Realm.Configuration.defaultConfiguration = config\n    defaultRealm = try! Realm()\n}\n\n\nopen class BaseModel: Object {\n    open dynamic var uuid = UUID().uuidString\n    open dynamic var createAt = Date().timeIntervalSince1970\n    open dynamic var updatedAt = Date().timeIntervalSince1970\n\n    override open static func primaryKey() -> String? {\n        return \"uuid\"\n    }\n    \n    static var dateFormatter: DateFormatter {\n        let f = DateFormatter()\n        f.dateFormat = \"MM-dd HH:mm:ss\"\n        return f\n    }\n\n    open func validate() throws {\n        //\n    }\n\n}\n\n"
  },
  {
    "path": "PotatsoModel/ConfigurationGroup.swift",
    "content": "//\n//  ConfigurationGroup.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport RealmSwift\n\npublic enum ConfigurationGroupError: Error {\n    case invalidConfigurationGroup\n    case emptyName\n    case nameAlreadyExists\n}\n\nextension ConfigurationGroupError: CustomStringConvertible {\n    \n    public var description: String {\n        switch self {\n        case .invalidConfigurationGroup:\n            return \"Invalid config group\"\n        case .emptyName:\n            return \"Empty name\"\n        case .nameAlreadyExists:\n            return \"Name already exists\"\n        }\n    }\n    \n}\n\n\nopen class ConfigurationGroup: BaseModel {\n    open dynamic var editable = true\n    open dynamic var name = \"\"\n    open dynamic var defaultToProxy = true\n    open dynamic var dns = \"\"\n    open var proxies = List<Proxy>()\n    open var ruleSets = List<RuleSet>()\n    \n    open override static func indexedProperties() -> [String] {\n        return [\"name\"]\n    }\n    \n    open override func validate() throws {\n        guard name.characters.count > 0 else {\n            throw ConfigurationGroupError.emptyName\n        }\n    }\n\n    open override var description: String {\n        return name\n    }\n    \n    public convenience init(dictionary: [String: AnyObject], inRealm realm: Realm) throws {\n        self.init()\n        guard let name = dictionary[\"name\"] as? String else {\n            throw ConfigurationGroupError.invalidConfigurationGroup\n        }\n        self.name = name\n        if realm.objects(RuleSet.self).filter(\"name = '\\(name)'\").first != nil {\n            self.name = \"\\(name) \\(ConfigurationGroup.dateFormatter.string(from: Date()))\"\n        }\n        if let proxyName = dictionary[\"proxy\"] as? String, let proxy = realm.objects(Proxy.self).filter(\"name = '\\(proxyName)'\").first {\n            self.proxies.removeAll()\n            self.proxies.append(proxy)\n        }\n        if let ruleSetsName = dictionary[\"ruleSets\"] as? [String] {\n            for ruleSetName in ruleSetsName {\n                if let ruleSet = realm.objects(RuleSet.self).filter(\"name = '\\(ruleSetName)'\").first {\n                    self.ruleSets.append(ruleSet)\n                }\n            }\n        }\n        if let defaultToProxy = dictionary[\"defaultToProxy\"] as? NSString {\n            self.defaultToProxy = defaultToProxy.boolValue\n        }\n        if let dns = dictionary[\"dns\"] as? String {\n            self.dns = dns\n        }\n        if let dns = dictionary[\"dns\"] as? [String] {\n            self.dns = dns.joined(separator: \",\")\n        }\n    }\n\n    \n}\n\npublic func ==(lhs: ConfigurationGroup, rhs: ConfigurationGroup) -> Bool {\n    return lhs.uuid == rhs.uuid\n}\n"
  },
  {
    "path": "PotatsoModel/DBUtils.swift",
    "content": "//\n//  DBUtils.swift\n//  Potatso\n//\n//  Created by LEI on 8/3/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport Foundation\nimport Realm\nimport RealmSwift\n\nopen class DBUtils {\n\n    fileprivate static func currentRealm(_ realm: Realm?) -> Realm {\n        var mRealm = realm\n        if mRealm == nil {\n            mRealm = try! Realm()\n        }\n        return mRealm!\n    }\n\n    open static func add(_ object: BaseModel, update: Bool = true, setModified: Bool = true, inRealm realm: Realm? = nil) throws {\n        let mRealm = currentRealm(realm)\n        mRealm.beginWrite()\n        if setModified {\n            object.setModified()\n        }\n        mRealm.add(object, update: update)\n        try mRealm.commitWrite()\n    }\n\n    open static func add<S: Sequence where S.Iterator.Element: BaseModel>(_ objects: S, update: Bool = true, setModified: Bool = true, inRealm realm: Realm? = nil) throws {\n        let mRealm = currentRealm(realm)\n        mRealm.beginWrite()\n        objects.forEach({\n            if setModified {\n                $0.setModified()\n            }\n        })\n        mRealm.add(objects, update: update)\n        try mRealm.commitWrite()\n    }\n\n    open static func hardDelete<T: BaseModel>(_ id: String, type: T.Type, inRealm realm: Realm? = nil) throws {\n        let mRealm = currentRealm(realm)\n        guard let object: T = DBUtils.get(id, type: type, inRealm: mRealm) else {\n            return\n        }\n        mRealm.beginWrite()\n        mRealm.delete(object)\n        try mRealm.commitWrite()\n    }\n\n    open static func hardDelete<T: BaseModel>(_ ids: [String], type: T.Type, inRealm realm: Realm? = nil) throws {\n        for id in ids {\n            try hardDelete(id, type: type, inRealm: realm)\n        }\n    }\n}\n\n\n// Query\nextension DBUtils {\n\n    public static func all<T: BaseModel>(_ type: T.Type, filter: String? = nil, sorted: String? = nil, inRealm realm: Realm? = nil) -> Results<T> {\n        let mRealm = currentRealm(realm)\n        var res = mRealm.objects(type)\n        if let filter = filter, filter.characters.count > 0 {\n            res = res.filter(filter)\n        }\n        if let sorted = sorted {\n            res = res.sorted(byKeyPath: sorted)\n        }\n        return res\n    }\n\n    public static func get<T: BaseModel>(_ uuid: String, type: T.Type, filter: String? = nil, sorted: String? = nil, inRealm realm: Realm? = nil) -> T? {\n        let mRealm = currentRealm(realm)\n        var mFilter = \"uuid = '\\(uuid)'\"\n        if let filter = filter {\n            mFilter += \" && \" + filter\n        }\n        var res = mRealm.objects(type).filter(mFilter)\n        if let sorted = sorted {\n            res = res.sorted(byKeyPath: sorted)\n        }\n        return res.first\n    }\n\n    public static func search<T: BaseModel>(type: T.Type, filters: [String], sorted: String? = nil, inRealm realm: Realm? = nil) -> Results<T> {\n        let mFilter = filters.joined(separator: \" && \")\n        return self.all(type, filter: mFilter, sorted: sorted, inRealm: realm)\n    }\n    \n    public static func modify<T: BaseModel>(_ type: T.Type, id: String, inRealm realm: Realm? = nil, modifyBlock: ((Realm, T) -> Error?)) throws {\n        let mRealm = currentRealm(realm)\n        guard let object: T = DBUtils.get(id, type: type, inRealm: mRealm) else {\n            return\n        }\n        mRealm.beginWrite()\n        if let error = modifyBlock(mRealm, object) {\n            throw error\n        }\n        do {\n            try object.validate()\n        }catch {\n            mRealm.cancelWrite()\n            throw error\n        }\n        object.setModified()\n        try mRealm.commitWrite()\n    }\n\n}\n\n// BaseModel API\nextension BaseModel {\n\n    func setModified() {\n        updatedAt = Date().timeIntervalSince1970\n    }\n\n}\n\n\n// Config Group API\nextension ConfigurationGroup {\n\n    public static func changeProxy(forGroupId groupId: String, proxyId: String?) throws {\n        try DBUtils.modify(ConfigurationGroup.self, id: groupId) { (realm, group) -> Error? in\n            group.proxies.removeAll()\n            if let proxyId = proxyId, let proxy = DBUtils.get(proxyId, type: Proxy.self, inRealm: realm){\n                group.proxies.append(proxy)\n            }\n            return nil\n        }\n    }\n\n    public static func appendRuleSet(forGroupId groupId: String, rulesetId: String) throws {\n        try DBUtils.modify(ConfigurationGroup.self, id: groupId) { (realm, group) -> Error? in\n            if let ruleset = DBUtils.get(rulesetId, type: RuleSet.self, inRealm: realm) {\n                group.ruleSets.append(ruleset)\n            }\n            return nil\n        }\n    }\n\n    public static func changeDNS(forGroupId groupId: String, dns: String?) throws {\n        try DBUtils.modify(ConfigurationGroup.self, id: groupId) { (realm, group) -> Error? in\n            group.dns = dns ?? \"\"\n            return nil\n        }\n    }\n\n    public static func changeName(forGroupId groupId: String, name: String) throws {\n        try DBUtils.modify(ConfigurationGroup.self, id: groupId) { (realm, group) -> Error? in\n            group.name = name\n            return nil\n        }\n    }\n\n}\n\n"
  },
  {
    "path": "PotatsoModel/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>NSPrincipalClass</key>\n\t<string></string>\n</dict>\n</plist>\n"
  },
  {
    "path": "PotatsoModel/PotatsoModel.h",
    "content": "//\n//  PotatsoModel.h\n//  PotatsoModel\n//\n//  Created by LEI on 4/4/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for PotatsoModel.\nFOUNDATION_EXPORT double PotatsoModelVersionNumber;\n\n//! Project version string for PotatsoModel.\nFOUNDATION_EXPORT const unsigned char PotatsoModelVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <PotatsoModel/PublicHeader.h>"
  },
  {
    "path": "PotatsoModel/Proxy.swift",
    "content": "//\n//  Proxy.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport RealmSwift\nimport CloudKit\n\npublic let kProxyServiceAdded = \"kProxyServiceAdded\"\n\npublic enum ProxyType: String {\n    case Shadowsocks = \"Shadowsocks\"\n    case ShadowsocksR = \"ShadowsocksR\"\n    //case Https = \"HTTPS\"\n    case Socks5 = \"SOCKS5\"\n}\n\nextension ProxyType: CustomStringConvertible {\n    \n    public var description: String {\n        return rawValue\n    }\n\n    public var isShadowsocks: Bool {\n        return self == .Shadowsocks || self == .ShadowsocksR\n    }\n    \n}\n\npublic enum ProxyError: Error {\n    case invalidType\n    case invalidName\n    case invalidHost\n    case invalidPort\n    case invalidAuthScheme\n    case nameAlreadyExists\n    case invalidUri\n    case invalidPassword\n}\n\nextension ProxyError: CustomStringConvertible {\n    \n    public var description: String {\n        switch self {\n        case .invalidType:\n            return \"Invalid type\"\n        case .invalidName:\n            return \"Invalid name\"\n        case .invalidHost:\n            return \"Invalid host\"\n        case .invalidAuthScheme:\n            return \"Invalid encryption\"\n        case .invalidUri:\n            return \"Invalid uri\"\n        case .nameAlreadyExists:\n            return \"Name already exists\"\n        case .invalidPassword:\n            return \"Invalid password\"\n        case .invalidPort:\n            return \"Invalid port\"\n        }\n    }\n    \n}\n\nopen class Proxy: BaseModel {\n    open dynamic var typeRaw = ProxyType.Shadowsocks.rawValue\n    open dynamic var host = \"\"\n    open dynamic var port = 0\n    open dynamic var ip: String?\n    open dynamic var authscheme: String?  // method in SS\n    open dynamic var user: String?\n    open dynamic var password: String?\n    open dynamic var ota: Bool = false\n    open dynamic var ssrProtocol: String?\n    open dynamic var ssrObfs: String?\n    open dynamic var ssrObfsParam: String?\n\n    open static let ssUriMethod = \"ss\"\n    open static let ssrUriMethod = \"ssr\"\n\n    open static let ssrSupportedProtocol = [\n        \"origin\",\n        \"verify_simple\",\n        \"auth_simple\",\n        \"auth_sha1\",\n        \"auth_sha1_v2\"\n    ]\n\n    open static let ssrSupportedObfs = [\n        \"plain\",\n        \"http_simple\",\n        \"tls1.0_session_auth\",\n        \"tls1.2_ticket_auth\"\n    ]\n\n    open static let ssSupportedEncryption = [\n        \"table\",\n        \"rc4\",\n        \"rc4-md5\",\n        \"aes-128-cfb\",\n        \"aes-192-cfb\",\n        \"aes-256-cfb\",\n        \"bf-cfb\",\n        \"camellia-128-cfb\",\n        \"camellia-192-cfb\",\n        \"camellia-256-cfb\",\n        \"cast5-cfb\",\n        \"des-cfb\",\n        \"idea-cfb\",\n        \"rc2-cfb\",\n        \"seed-cfb\",\n        \"salsa20\",\n        \"chacha20\",\n        \"chacha20-ietf\"\n    ]\n\n    open override static func indexedProperties() -> [String] {\n        return [\"host\",\"port\"]\n    }\n\n    open override func validate() throws {\n        guard let _ = ProxyType(rawValue: typeRaw)else {\n            throw ProxyError.invalidType\n        }\n        guard host.characters.count > 0 else {\n            throw ProxyError.invalidHost\n        }\n        guard port > 0 && port <= Int(UINT16_MAX) else {\n            throw ProxyError.invalidPort\n        }\n        switch type {\n        case .Shadowsocks, .ShadowsocksR:\n            guard let _ = authscheme else {\n                throw ProxyError.invalidAuthScheme\n            }\n        default:\n            break\n        }\n    }\n    \n    open override var description: String {\n        return String.init(format: \"%@:%d\", host, port)\n    }\n    \n    open func shareUri() -> String {\n        switch type {\n        case .Shadowsocks:\n            if let authscheme = authscheme,\n                let password = password,\n                let ss = \"\\(authscheme):\\(password)@\\(host):\\(port)\".data(using: .ascii)\n            {\n                return \"https://mumevpn.com/ss.php?s=\" + ss.base64EncodedString()\n            }\n            return \"\"\n        \n        case .Socks5:\n            if let ss = \"\\(host):\\(port)\".data(using: .ascii) {\n                return \"https://mumevpn.com/socks5.php?s=\" + ss.base64EncodedString()\n            }\n            return \"\"\n            \n        default:\n            return \"\"\n        }\n    }\n    \n    public static func delete(proxy: Proxy) {\n        let proxies = DBUtils.all(Proxy.self, sorted: \"createAt\").map({ $0 })\n        for ep in proxies {\n            if ep.host == proxy.host,\n                ep.port == proxy.port {\n                print (\"Remove existing: \" + proxy.description)\n                try? DBUtils.hardDelete(ep.uuid, type: Proxy.self)\n            }\n        }\n    }\n    \n    public static func insertOrUpdate(proxy: Proxy) -> Bool {\n        do {\n            try proxy.validate()\n            self.delete(proxy: proxy)\n            try DBUtils.add(proxy)\n            NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: kProxyServiceAdded), object: nil)\n            return true\n        } catch {\n            let errorDesc = \"(\\(error))\"\n            print (\"\\(\"Fail to save config.\".localized()) \\(errorDesc)\")\n        }\n        return false\n    }\n}\n\n// Public Accessor\nextension Proxy {\n    \n    public var type: ProxyType {\n        get {\n            return ProxyType(rawValue: typeRaw) ?? .Shadowsocks\n        }\n        set(v) {\n            typeRaw = v.rawValue\n        }\n    }\n    \n    public var uri: String {\n        switch type {\n        case .Shadowsocks:\n            if let authscheme = authscheme, let password = password {\n                return \"ss://\\(authscheme):\\(password)@\\(host):\\(port)\"\n            }\n        case .Socks5:\n            if let user = user, let password = password {\n                return \"socks5://\\(user):\\(password)@\\(host):\\(port)\"\n            }\n            return \"socks5://\\(host):\\(port)\" // TODO: support username/password\n        default:\n            break\n        }\n        return \"\"\n    }\n    \n}\n\n// Import\nextension Proxy {\n    public convenience init(string: String) throws {\n        if let rawUri = URL(string: string) {\n            try self.init(url: rawUri)\n        } else {\n            throw ProxyError.invalidUri\n        }\n    }\n    \n    public convenience init(url rawUri: URL) throws {\n        self.init()\n        let s = rawUri.scheme?.lowercased() ?? (rawUri.user == nil ? \"socks5\" : \"shadowsocks\")\n            if let fragment = rawUri.fragment, fragment.characters.count == 36 {\n                self.uuid = fragment\n            }\n            \n            if s == \"socks5\" || s == \"socks\" {\n                guard let host = rawUri.host else {\n                    throw ProxyError.invalidUri\n                }\n                self.type = .Socks5\n                self.host = host\n                self.port = rawUri.port ?? 1080\n                return\n            }\n            \n            // mume://method:base64(password)@hostname:port\n            if s == \"mume\" || s == \"shadowsocks\" {\n                guard let fullAuthscheme = rawUri.user?.lowercased(),\n                    let host = rawUri.host,\n                    let port = rawUri.port else {\n                        throw ProxyError.invalidUri\n                }\n                \n                if let pOTA = fullAuthscheme.range(of: \"-auth\", options: .backwards)?.lowerBound {\n                    self.authscheme = fullAuthscheme.substring(to: pOTA)\n                    self.ota = true\n                } else {\n                    self.authscheme = fullAuthscheme\n                }\n                self.password = base64DecodeIfNeeded((rawUri.password ?? \"\").removingPercentEncoding ?? \"\")\n                self.host = host\n                self.port = Int(port)\n                self.type = .Shadowsocks\n                return\n            }\n            \n            // Shadowsocks ss://cmM0LW1kNTp4aWFtaS5sYUBjbjEuc3hpYW1pLmNvbTo0NTQwMg==\n            guard let undecodedString = rawUri.host else {\n                throw ProxyError.invalidUri\n            }\n            self.type = .Shadowsocks\n\n            // SIP002 Spec\n            if let b64MP = rawUri.user,\n                rawUri.password == nil,\n                let host = rawUri.host,\n                let port = rawUri.port {\n                let MP = base64DecodeIfNeeded(b64MP)\n                self.host = host\n                self.port = port\n                let comps = MP.components(separatedBy: \":\")\n                if comps.count > 1 {\n                    self.authscheme = comps[0].localized()\n                    self.password = comps[1..<comps.count].joined(separator: \":\")\n                    return\n                }\n            }\n        \n            let proxyString = base64DecodeIfNeeded(undecodedString)\n            let detailsParser = \"([a-zA-Z0-9-_]+):(.*)@([a-zA-Z0-9-_.]+):(\\\\d+)\"\n            if let regex = try? Regex(detailsParser),\n                regex.test(proxyString),\n                let parts = regex.capturedGroup(string: proxyString),\n                parts.count >= 4 {\n                let fullAuthscheme = parts[0].lowercased()\n                if let pOTA = fullAuthscheme.range(of: \"-auth\", options: .backwards)?.lowerBound {\n                    self.authscheme = fullAuthscheme.substring(to: pOTA)\n                    self.ota = true\n                } else {\n                    self.authscheme = fullAuthscheme\n                    self.ota = false\n                }\n                self.password = parts[1]\n                self.host = parts[2]\n                self.port = Int(parts[3]) ?? 8388\n                return\n            }\n            \n            if let httpsURL = URL(string: \"https://\" + proxyString),\n                let fullAuthscheme = httpsURL.user?.lowercased(),\n                let host = httpsURL.host,\n                let port = httpsURL.port {\n        \n                if let pOTA = fullAuthscheme.range(of: \"-auth\", options: .backwards)?.lowerBound {\n                    self.authscheme = fullAuthscheme.substring(to: pOTA)\n                    self.ota = true\n                }else {\n                    self.authscheme = fullAuthscheme\n                }\n                self.password = httpsURL.password\n                self.host = host\n                self.port = Int(port)\n                self.type = .Shadowsocks\n                if s == Proxy.ssUriMethod {\n                    return\n                }\n            }\n    \n            if s == Proxy.ssrUriMethod || s.hasPrefix(\"shadowsocksr\") {\n                var hostString: String = proxyString\n                var queryString = \"\"\n                if let queryMarkRange = proxyString.range(of: \"?\", options: .backwards) {\n                    hostString = proxyString.substring(to: queryMarkRange.lowerBound)\n                    queryString = proxyString.substring(from: queryMarkRange.upperBound)\n                }\n                if let hostSlashIndex = hostString.range(of: \"/\", options: .backwards)?.lowerBound {\n                    hostString = hostString.substring(to: hostSlashIndex)\n                }\n                let hostComps = hostString.components(separatedBy: \":\")\n                guard hostComps.count == 6 else {\n                    throw ProxyError.invalidUri\n                }\n                self.host = hostComps[0]\n                guard let p = Int(hostComps[1]) else {\n                    throw ProxyError.invalidPort\n                }\n                self.port = p\n                self.ssrProtocol = hostComps[2]\n                self.authscheme = hostComps[3]\n                self.ssrObfs = hostComps[4]\n                self.password = base64DecodeIfNeeded(hostComps[5])\n                for queryComp in queryString.components(separatedBy: \"&\") {\n                    let comps = queryComp.components(separatedBy: \"=\")\n                    guard comps.count == 2 else {\n                        continue\n                    }\n                    switch comps[0] {\n                    case \"obfsparam\":\n                        self.ssrObfsParam = comps[1]\n                    default:\n                        continue\n                    }\n                }\n                self.type = .ShadowsocksR\n            } else {\n                // Not supported yet\n                throw ProxyError.invalidUri\n            }\n    }\n    \n    public convenience init(host: String, port: Int, authscheme: String, password: String, type: ProxyType) throws {\n        self.init()\n        self.host = host\n        self.port = port\n        self.password = password\n        self.authscheme = authscheme\n        self.type = type\n        try validate()\n    }\n    \n    public static func nsproxy(dictionary: NSDictionary) -> Proxy? {\n        do {\n            if let uriString = dictionary[\"uri\"] as? String {\n                \n                let p = try Proxy(string: uriString.trimmingCharacters(in: CharacterSet.whitespaces))\n                if let ip = dictionary[\"ip\"] as? String {\n                    p.ip = ip\n                } else {\n                    \n                }\n                return p\n            }\n            \n            guard let host = dictionary[\"host\"] as? String else {\n                return nil\n            }\n            guard let typeRaw = dictionary[\"type\"] as? String, let type = ProxyType(rawValue: typeRaw) else {\n                throw ProxyError.invalidType\n            }\n            guard let port = dictionary[\"port\"] as? Int else {\n                throw ProxyError.invalidPort\n            }\n            guard let encryption = dictionary[\"encryption\"] as? String else {\n                throw ProxyError.invalidAuthScheme\n            }\n            guard let password = dictionary[\"password\"] as? String else {\n                throw ProxyError.invalidPassword\n            }\n            return try Proxy(host: host, port: port, authscheme: encryption, password: password, type: type)\n        } catch {\n        }\n        return nil\n    }\n\n    public static func proxy(dictionary: [String: String]) -> Proxy? {\n        do {\n            if let uriString = dictionary[\"uri\"] {\n                \n                let p = try Proxy(string: uriString.trimmingCharacters(in: CharacterSet.whitespaces))\n                if let ip = dictionary[\"ip\"] {\n                    p.ip = ip\n                } else {\n                    \n                }\n                return p\n            }\n            \n            guard let host = dictionary[\"host\"] else {\n                return nil\n            }\n            guard let typeRaw = dictionary[\"type\"]?.uppercased(), let type = ProxyType(rawValue: typeRaw) else {\n                throw ProxyError.invalidType\n            }\n            guard let portStr = dictionary[\"port\"], let port = Int(portStr) else {\n                throw ProxyError.invalidPort\n            }\n            guard let encryption = dictionary[\"encryption\"] else {\n                throw ProxyError.invalidAuthScheme\n            }\n            guard let password = dictionary[\"password\"] else {\n                throw ProxyError.invalidPassword\n            }\n            return try Proxy(host: host, port: port, authscheme: encryption, password: password, type: type)\n        } catch {\n        }\n        return nil\n    }\n\n    fileprivate func base64DecodeIfNeeded(_ proxyString: String) -> String {\n        let base64String = proxyString.replacingOccurrences(of: \"-\", with: \"+\").replacingOccurrences(of: \"_\", with: \"/\")\n        let base64Charset = CharacterSet(charactersIn: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\")\n        if CharacterSet(charactersIn: base64String).isSubset(of: base64Charset) {\n            let padding = base64String.characters.count + (base64String.characters.count % 4 != 0 ? (4 - base64String.characters.count % 4) : 0)\n            if let decodedData = Data(base64Encoded: base64String.padding(toLength: padding, withPad: \"=\", startingAt: 0), options: NSData.Base64DecodingOptions(rawValue: 0)), let decodedString = NSString(data: decodedData, encoding: String.Encoding.utf8.rawValue) {\n                return decodedString as String\n            }\n            return proxyString\n        }\n        return proxyString\n    }\n\n    private static func schemeIsProxy(_ scheme: String) -> Bool {\n        return (scheme == Proxy.ssUriMethod)\n            || (scheme == Proxy.ssrUriMethod)\n            || (scheme == \"mume\")\n            || (scheme == \"shadowsocks\")\n            || (scheme == \"shadowsocksr\")\n            || (scheme == \"mss\")\n            || (scheme == \"socks5\")\n            || (scheme == \"socks\")\n    }\n\n    public static func uriIsProxy(_ uri: String) -> Bool {\n        if let url = URL(string: uri) {\n            return Proxy.urlIsProxy(url)\n        }\n        return false\n    }\n    \n    public static func urlIsProxy(_ url: URL) -> Bool {\n        if let scheme = url.scheme {\n            return Proxy.schemeIsProxy(scheme.lowercased()) && (url.host != \"on\") && (url.host != \"off\")\n        }\n        return false\n    }\n}\n\npublic func ==(lhs: Proxy, rhs: Proxy) -> Bool {\n    return lhs.uuid == rhs.uuid\n}\n\nopen class CloudProxy: Proxy {\n    open dynamic var due: String?\n    open dynamic var provider: String?\n    open dynamic var link: String?\n\n    public static func cloudProxy(dictionary: NSDictionary) -> CloudProxy? {\n        if let uriString = dictionary[\"uri\"] as? String,\n            let p = try? CloudProxy(string: uriString.trimmingCharacters(in: CharacterSet.whitespaces)) {\n            \n            if let ip = dictionary[\"ip\"] as? String {\n                p.ip = ip\n            }\n            if let due = dictionary[\"due\"] as? String {\n                p.due = due\n            }\n            if let provider = dictionary[\"provider\"] as? String {\n                p.provider = provider\n            }\n            if let link = dictionary[\"link\"] as? String {\n                p.link = link\n            }\n            return p\n        }\n        return nil\n    }\n}\n"
  },
  {
    "path": "PotatsoModel/Rule.swift",
    "content": "//\n//  Rule.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport RealmSwift\nimport PotatsoBase\nimport ObjectMapper\n\nprivate let ruleValueKey = \"value\";\nprivate let ruleActionKey = \"action\";\n\npublic enum MMRuleType: String {\n    case URLMatch = \"URL-MATCH\"\n    case URL = \"URL\"\n    case Domain = \"DOMAIN\"\n    case DomainMatch = \"DOMAIN-MATCH\"\n    case DomainSuffix = \"DOMAIN-SUFFIX\"\n    case GeoIP = \"GEOIP\"\n    case IPCIDR = \"IP-CIDR\"\n    \n    public static func fromInt(_ intValue: Int) -> MMRuleType? {\n        switch intValue {\n        case 1:\n            return .Domain\n        case 2:\n            return .DomainSuffix\n        case 3:\n            return .DomainMatch\n        case 4:\n            return .URL\n        case 5:\n            return .URLMatch\n        case 6:\n            return .GeoIP\n        case 7:\n            return .IPCIDR\n        default:\n            return nil\n        }\n    }\n    \n}\n\nextension MMRuleType: CustomStringConvertible {\n    \n    public var description: String {\n        return rawValue\n    }\n    \n}\n\npublic enum RuleAction: String {\n    case Direct = \"DIRECT\"\n    case Reject = \"REJECT\"\n    case Proxy = \"PROXY\"\n}\n\nextension RuleAction {\n    \n    public static func fromInt(_ intValue: Int) -> RuleAction? {\n        switch intValue {\n        case 1:\n            return .Direct\n        case 2:\n            return .Reject\n        case 3:\n            return .Proxy\n        default:\n            return nil\n        }\n    }\n    \n}\n\nextension RuleAction: CustomStringConvertible {\n    \n    public var description: String {\n        return rawValue\n    }\n    \n}\n\npublic enum RuleError: Error {\n    case invalidRule\n}\n\n//extension RuleError: CustomStringConvertible {\n//    \n//    public var description: String {\n//        switch self {\n//        case .InvalidRule(let rule):\n//            return \"Invalid rule - \\(rule)\"\n//        }\n//    }\n//    \n//}\n//\n//public final class Rule: BaseModel {\n//    \n//    public dynamic var typeRaw = \"\"\n//    public dynamic var content = \"\"\n//    public dynamic var order = 0\n//    public let rulesets = LinkingObjects(fromType: RuleSet.self, property: \"rules\")\n//\n//}\n//\n//extension Rule {\n//    \n//    public var type : RuleType {\n//        get {\n//            return RuleType(rawValue: typeRaw) ?? .DomainSuffix\n//        }\n//        set(v) {\n//            typeRaw = v.rawValue\n//        }\n//    }\n//    \n//    public var action : RuleAction {\n//        let json = content.jsonDictionary()\n//        if let raw = json?[ruleActionKey] as? String {\n//            return RuleAction(rawValue: raw) ?? .Proxy\n//        }\n//        return .Proxy\n//    }\n//    \n//    public var value : String {\n//        let json = content.jsonDictionary()\n//        return json?[ruleValueKey] as? String ?? \"\"\n//    }\n//\n//}\n//\npublic final class Rule {\n\n    public var type: MMRuleType\n    public var value: String\n    public var action: RuleAction\n    \n    public convenience init(str: String) throws {\n        var ruleStr = str.replacingOccurrences(of: \"\\t\", with: \"\")\n        ruleStr = ruleStr.replacingOccurrences(of: \" \", with: \"\")\n        let parts = ruleStr.components(separatedBy: \",\")\n        guard parts.count >= 3 else {\n            throw RuleError.invalidRule\n        }\n        let actionStr = parts[2].uppercased()\n        let typeStr = parts[0].uppercased()\n        let value = parts[1]\n        guard let type = MMRuleType(rawValue: typeStr), let action = RuleAction(rawValue: actionStr), value.characters.count > 0 else {\n            throw RuleError.invalidRule\n        }\n        self.init(type: type, action: action, value: value)\n    }\n    \n    public init(type: MMRuleType, action: RuleAction, value: String) {\n        self.type = type\n        self.value = value\n        self.action = action\n    }\n\n    public convenience init?(json: [String: AnyObject]) {\n        guard let typeRaw = json[\"type\"] as? String, let type = MMRuleType(rawValue: typeRaw) else {\n            return nil\n        }\n        guard let actionRaw = json[\"action\"] as? String, let action = RuleAction(rawValue: actionRaw) else {\n            return nil\n        }\n        guard let value = json[\"value\"] as? String else {\n            return nil\n        }\n        self.init(type: type, action: action, value: value)\n    }\n\n    public var description: String {\n        return \"\\(type), \\(value), \\(action)\"\n    }\n\n    public var json: [String: AnyObject] {\n        return [\"type\": type.rawValue as AnyObject, \"value\": value as AnyObject, \"action\": action.rawValue as AnyObject]\n    }\n}\n\nextension Rule: Mappable {\n    \n    public convenience init?(map: Map) {\n        guard let pattern = map.JSON[\"pattern\"] as? String else {\n            return nil\n        }\n        guard let actionStr = map.JSON[\"action\"] as? String, let action = RuleAction(rawValue: actionStr) else {\n            return nil\n        }\n        guard let typeStr = map.JSON[\"type\"] as? String, let type = MMRuleType(rawValue: typeStr) else {\n            return nil\n        }\n        self.init(type: type, action: action, value: pattern)\n    }\n    \n    public func mapping(map: Map) {\n    }\n}\n\n"
  },
  {
    "path": "PotatsoModel/RuleSet.swift",
    "content": "//\n//  RuleSet.swift\n//  Potatso\n//\n//  Created by LEI on 4/6/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport RealmSwift\nimport ObjectMapper\n\npublic enum RuleSetError: Error {\n    case invalidRuleSet\n    case emptyName\n    case nameAlreadyExists\n}\n\nextension RuleSetError: CustomStringConvertible {\n    \n    public var description: String {\n        switch self {\n        case .invalidRuleSet:\n            return \"Invalid rule set\"\n        case .emptyName:\n            return \"Empty name\"\n        case .nameAlreadyExists:\n            return \"Name already exists\"\n        }\n    }\n    \n}\n\npublic final class RuleSet: BaseModel {\n    public dynamic var editable = true\n    public dynamic var name = \"\"\n    public dynamic var remoteUpdatedAt: TimeInterval = Date().timeIntervalSince1970\n    public dynamic var desc = \"\"\n    public dynamic var ruleCount = 0\n    public dynamic var rulesJSON = \"\"\n    public dynamic var isSubscribe = false\n    public dynamic var isOfficial = false\n\n    fileprivate var cachedRules: [Rule]? = nil\n\n    public var rules: [Rule] {\n        get {\n            if let cachedRules = cachedRules {\n                return cachedRules\n            }\n            updateCahcedRules()\n            return cachedRules!\n        }\n        set {\n            let json = (newValue.map({ $0.json }) as NSArray).jsonString() ?? \"\"\n            rulesJSON = json\n            updateCahcedRules()\n            ruleCount = newValue.count\n        }\n    }\n\n    public func validate(inRealm realm: Realm) throws {\n        guard name.characters.count > 0 else {\n            throw RuleSetError.emptyName\n        }\n    }\n\n    fileprivate func updateCahcedRules() {\n        guard let jsonArray = rulesJSON.jsonArray() as? [[String: AnyObject]] else {\n            cachedRules = []\n            return\n        }\n        cachedRules = jsonArray.flatMap({ Rule(json: $0) })\n    }\n\n    public func addRule(_ rule: Rule) {\n        var newRules = rules\n        newRules.append(rule)\n        rules = newRules\n    }\n\n    public func insertRule(_ rule: Rule, atIndex index: Int) {\n        var newRules = rules\n        newRules.insert(rule, at: index)\n        rules = newRules\n    }\n\n    public func removeRule(atIndex index: Int) {\n        var newRules = rules\n        newRules.remove(at: index)\n        rules = newRules\n    }\n\n    public func move(_ fromIndex: Int, toIndex: Int) {\n        var newRules = rules\n        let rule = newRules[fromIndex]\n        newRules.remove(at: fromIndex)\n        insertRule(rule, atIndex: toIndex)\n        rules = newRules\n    }\n    \n    public override static func indexedProperties() -> [String] {\n        return [\"name\"]\n    }\n    \n}\n\npublic func ==(lhs: RuleSet, rhs: RuleSet) -> Bool {\n    return lhs.uuid == rhs.uuid\n}\n\nextension RuleSet: Mappable {\n    \n    public convenience init?(map: Map) {\n        self.init()\n        guard let rulesJSON = map.JSON[\"rules\"] else {\n            return\n        }\n        var rules: [Rule] = []\n        if let parsedObject = Mapper<Rule>().mapArray(JSONObject: rulesJSON){\n            rules.append(contentsOf: parsedObject)\n        }\n        self.rules = rules\n    }\n    \n    // Mappable\n    public func mapping(map: Map) {\n        uuid      <- map[\"id\"]\n        name      <- map[\"name\"]\n        createAt  <- (map[\"created_at\"], DateTransform())\n        remoteUpdatedAt  <- (map[\"updated_at\"], DateTransform())\n        desc      <- map[\"description\"]\n        ruleCount <- map[\"rule_count\"]\n        isOfficial <- map[\"is_official\"]\n    }\n}\n\n\nstruct DateTransform: TransformType {\n    \n    func transformFromJSON(_ value: Any?) -> Double? {\n        guard let dateStr = value as? String else {\n            return Date().timeIntervalSince1970\n        }\n        if #available(iOS 10.0, *) {\n            return ISO8601DateFormatter().date(from: dateStr)?.timeIntervalSince1970\n        } else {\n            return Date().timeIntervalSince1970\n        }\n    }\n    \n    func transformToJSON(_ value: Double?) -> Any? {\n        guard let v = value else {\n            return nil\n        }\n        let date = Date(timeIntervalSince1970: v)\n        if #available(iOS 10.0, *) {\n            return ISO8601DateFormatter().string(from: date)\n        } else {\n            return nil\n        }\n    }\n    \n}\n\n"
  },
  {
    "path": "README.md",
    "content": "# Mume ![GPLv3 License](https://img.shields.io/badge/License-GPLv3-blue.svg)\n\n<a href=\"https://itunes.apple.com/app/mume-vpn/id1144787928?l=en&mt=8\">![](https://cdn.rawgit.com/liruqi/Mume-iOS/master/Download.svg)</a>\n\nMume is an iOS client that implements custom proxies with the leverage of Network Extension framework introduced by Apple since iOS 9.\n\nCurrently, Mume is compatible with following proxies:\n\n- [Shadowsocks](https://shadowsocks.org)\n- [SOCKS5](https://www.ietf.org/rfc/rfc1928.txt)\n- [ShadowsocksR](https://github.com/breakwa11/shadowsocks-rss)\n\n[Join Telegram Group](https://t.me/joinchat/AN1ErED_RwZhHYrUdCKMOA) to chat with users.\n\n## Guide\n\nSee [Setup Guide](../../wiki/Setup-Guide) for details.\n\n## Acknowlegements\n\nWe use the following services or open-source libraries. So we'd like show them highest respect and thank for bringing those great projects:\n\nServices:\n\n- [Fabric](https://get.fabric.io/)\n- [realm](https://realm.io/)\n- [HelpShift](https://www.helpshift.com)\n\nOpen-source Projects:\n- [Potatso](https://github.com/shadowsocks/Potatso)\n- [KissXML](https://github.com/robbiehanson/KissXML)\n- [MMWormhole](https://github.com/mutualmobile/MMWormhole)\n- [CocoaAsyncSocket](https://github.com/robbiehanson/CocoaAsyncSocket)\n- [Cartography](https://github.com/robb/Cartography)\n- [AsyncSwift](https://github.com/duemunk/Async)\n- [Appirater](https://github.com/arashpayan/appirater)\n- [Eureka](https://github.com/xmartlabs/Eureka)\n- [MBProgressHUD](https://github.com/matej/MBProgressHUD)\n- [CallbackURLKit](https://github.com/phimage/CallbackURLKit)\n- [ISO8601DateFormatter](https://github.com/boredzo/iso-8601-date-formatter)\n- [Alamofire](https://github.com/Alamofire/Alamofire)\n- [ObjectMapper](https://github.com/Hearst-DD/ObjectMapper)\n- [CocoaLumberjack](https://github.com/CocoaLumberjack/CocoaLumberjack)\n- [AlamofireObjectMapper](https://github.com/tristanhimmelman/AlamofireObjectMapper)\n- [YAML.framework](https://github.com/mirek/YAML.framework)\n- [tun2socks-iOS](https://github.com/shadowsocks/tun2socks-iOS)\n- [shadowsocks-libev](https://github.com/shadowsocks/shadowsocks-libev)\n- [Antinat](http://antinat.sourceforge.net/)\n- [Privoxy](https://www.privoxy.org/)\n\nAnd also thank all TestFlight Users.\n\n## License\n\nTo be compatible with those libraries using GPL, we're distributing with GPLv3 license.\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n\n\n"
  },
  {
    "path": "TodayWidget/Base.lproj/InfoPlist.strings",
    "content": "\"CFBundleDisplayName\" = \"Mume\";\n"
  },
  {
    "path": "TodayWidget/Base.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  Potatso\n\n  Created by LEI on 4/19/16.\n  Copyright © 2016 TouchingApp. All rights reserved.\n*/\n\n\"widget.none\" = \"None\";\n\"widget.connect\" = \"Connect\";\n\"widget.disconnect\" = \"Disconnect\";\n"
  },
  {
    "path": "TodayWidget/Base.lproj/MainInterface.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15G1004\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" initialViewController=\"M4Y-Lb-cyx\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Today View Controller-->\n        <scene sceneID=\"cwh-vc-ff4\">\n            <objects>\n                <viewController id=\"M4Y-Lb-cyx\" customClass=\"TodayViewController\" customModule=\"TodayWidget\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ft6-oW-KC0\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"FKl-LY-JtV\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" simulatedAppContext=\"notificationCenter\" id=\"S3S-Oj-5AN\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"100\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <collectionView clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"scaleToFill\" dataMode=\"prototypes\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"h2S-Mn-fJw\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"100\"/>\n                                <color key=\"backgroundColor\" red=\"0.12549019610000001\" green=\"0.57647058819999997\" blue=\"0.70588235290000001\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                <collectionViewFlowLayout key=\"collectionViewLayout\" minimumLineSpacing=\"10\" minimumInteritemSpacing=\"10\" id=\"WOr-Ht-03E\">\n                                    <size key=\"itemSize\" width=\"150\" height=\"50\"/>\n                                    <size key=\"headerReferenceSize\" width=\"0.0\" height=\"0.0\"/>\n                                    <size key=\"footerReferenceSize\" width=\"0.0\" height=\"0.0\"/>\n                                    <inset key=\"sectionInset\" minX=\"0.0\" minY=\"0.0\" maxX=\"0.0\" maxY=\"0.0\"/>\n                                </collectionViewFlowLayout>\n                                <cells>\n                                    <collectionViewCell opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" reuseIdentifier=\"group\" id=\"EiL-ft-smJ\">\n                                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"150\" height=\"50\"/>\n                                        <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                                        <view key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\">\n                                            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"150\" height=\"50\"/>\n                                            <autoresizingMask key=\"autoresizingMask\"/>\n                                            <subviews>\n                                                <view contentMode=\"scaleToFill\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"245-Br-LRK\">\n                                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"150\" height=\"50\"/>\n                                                    <color key=\"backgroundColor\" red=\"0.90588235289999997\" green=\"0.29803921570000003\" blue=\"0.23529411759999999\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                                </view>\n                                            </subviews>\n                                            <color key=\"backgroundColor\" white=\"0.0\" alpha=\"0.0\" colorSpace=\"calibratedWhite\"/>\n                                        </view>\n                                        <constraints>\n                                            <constraint firstItem=\"245-Br-LRK\" firstAttribute=\"top\" secondItem=\"EiL-ft-smJ\" secondAttribute=\"top\" id=\"4o9-Lb-WS6\"/>\n                                            <constraint firstAttribute=\"trailing\" secondItem=\"245-Br-LRK\" secondAttribute=\"trailing\" id=\"crd-Oe-Pzt\"/>\n                                            <constraint firstItem=\"245-Br-LRK\" firstAttribute=\"leading\" secondItem=\"EiL-ft-smJ\" secondAttribute=\"leading\" id=\"jgb-Nw-e28\"/>\n                                            <constraint firstAttribute=\"bottom\" secondItem=\"245-Br-LRK\" secondAttribute=\"bottom\" id=\"wob-GS-s7q\"/>\n                                        </constraints>\n                                    </collectionViewCell>\n                                </cells>\n                            </collectionView>\n                        </subviews>\n                        <constraints>\n                            <constraint firstItem=\"h2S-Mn-fJw\" firstAttribute=\"top\" secondItem=\"Ft6-oW-KC0\" secondAttribute=\"bottom\" id=\"Wa7-Uf-5sB\"/>\n                            <constraint firstItem=\"FKl-LY-JtV\" firstAttribute=\"top\" secondItem=\"h2S-Mn-fJw\" secondAttribute=\"bottom\" id=\"oTM-wH-R1d\"/>\n                            <constraint firstAttribute=\"trailing\" secondItem=\"h2S-Mn-fJw\" secondAttribute=\"trailing\" id=\"tqT-dM-Aoc\"/>\n                            <constraint firstItem=\"h2S-Mn-fJw\" firstAttribute=\"leading\" secondItem=\"S3S-Oj-5AN\" secondAttribute=\"leading\" id=\"xRO-dA-9RE\"/>\n                        </constraints>\n                    </view>\n                    <extendedEdge key=\"edgesForExtendedLayout\"/>\n                    <nil key=\"simulatedStatusBarMetrics\"/>\n                    <nil key=\"simulatedTopBarMetrics\"/>\n                    <nil key=\"simulatedBottomBarMetrics\"/>\n                    <freeformSimulatedSizeMetrics key=\"simulatedDestinationMetrics\"/>\n                    <size key=\"freeformSize\" width=\"320\" height=\"100\"/>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"vXp-U4-Rya\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"516\" y=\"284.5\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "TodayWidget/CurrentGroupCell.swift",
    "content": "//\n//  CurrentGroupCell.swift\n//  Potatso\n//\n//  Created by LEI on 4/13/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport Cartography\nimport PotatsoLibrary\n\nclass CurrentGroupCell: UIView {\n    \n    var switchVPN: ((_ on: Bool)->Void)?\n    \n    override init(frame: CGRect) {\n        super.init(frame: frame)\n        self.addSubview(nameLabel)\n        self.addSubview(switchButton)\n        setupLayout()\n    }\n    \n    func onSwitchValueChanged(_ sender: UISwitch) {\n        switchButton.isHidden = true\n        switchVPN?(sender.isOn)\n    }\n    \n    func config(_ name: String?, status: Bool, switchVPN: ((_ on: Bool) -> Void)?) {\n        nameLabel.text = name ?? \"None\".localized()\n        switchButton.isHidden = false\n        switchButton.addTarget(self, action: #selector(self.onSwitchValueChanged), for: .touchUpInside)\n        switchButton.setOn(status, animated: false)\n        self.switchVPN = switchVPN\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    func setupLayout() {\n        constrain(nameLabel, switchButton, self) { nameLabel, switchButton, superView in\n            nameLabel.leading == superView.leading + 15\n            nameLabel.centerY == superView.centerY\n            nameLabel.trailing == switchButton.leading - 15\n            \n            switchButton.centerY == superView.centerY\n            switchButton.trailing == superView.trailing - 8\n            switchButton.width == 60\n        }\n    }\n    \n    lazy var nameLabel: UILabel = {\n        let v = UILabel()\n        v.font = UIFont.boldSystemFont(ofSize: 17)\n        v.textColor = UIColor.white\n        return v\n    }()\n    \n    lazy var switchButton: UISwitch = {\n        let v = UISwitch()\n        return v\n    }()\n\n    \n}\n"
  },
  {
    "path": "TodayWidget/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>Mume VPN</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>XPC!</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.7.8</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>214</string>\n\t<key>NSExtension</key>\n\t<dict>\n\t\t<key>NSExtensionPointIdentifier</key>\n\t\t<string>com.apple.widget-extension</string>\n\t\t<key>NSExtensionPrincipalClass</key>\n\t\t<string>TodayWidget.TodayViewController</string>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "TodayWidget/TodayViewController.swift",
    "content": "//\n//  TodayViewController.swift\n//  TodayWidget\n//\n//  Created by LEI on 4/12/16.\n//  Copyright © 2016 TouchingApp. All rights reserved.\n//\n\nimport UIKit\nimport NotificationCenter\nimport PotatsoBase\nimport Cartography\nimport SwiftColor\nimport PotatsoLibrary\nimport MMWormhole\nimport CocoaAsyncSocket\n\nprivate let kCurrentGroupCellIndentifier = \"kCurrentGroupIndentifier\"\n\nclass TodayViewController: UIViewController, NCWidgetProviding, GCDAsyncSocketDelegate {\n    \n    let constrainGroup = ConstraintGroup()\n    \n    let wormhole = Manager.shared.wormhole\n    \n    var timer: Timer?\n    \n    var thresholdRetry = 0\n\n    var rowCount: Int {\n        return 1\n    }\n    \n    var status: Bool = false\n    var statusExpected: Bool = false\n\n    var socket: GCDAsyncSocket!\n\n    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {\n        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)\n        socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.global(priority: DispatchQueue.GlobalQueuePriority.background))\n    }\n\n    required init?(coder aDecoder: NSCoder) {\n        fatalError(\"init(coder:) has not been implemented\")\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        view.addSubview(tableView)\n        updateLayout()\n    }\n    \n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        startTimer()\n        self.reload()\n    }\n    \n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        stopTimer()\n    }\n\n    func tryConnectStatusSocket() {\n        let port = Potatso.sharedUserDefaults().integer(forKey: \"tunnelStatusPort\")\n        guard port > 0 else {\n            updateStatus(false)\n            openAppIfNeeded()\n            return\n        }\n        do {\n            socket.delegate = self\n            try socket.connect(toHost: \"127.0.0.1\", onPort: UInt16(port), withTimeout: 0.9)\n        } catch {\n            updateStatus(false)\n            openAppIfNeeded()\n        }\n    }\n\n    func startTimer() {\n        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(TodayViewController.tryConnectStatusSocket), userInfo: nil, repeats: true)\n        timer?.fire()\n    }\n\n    func stopTimer() {\n        socket.disconnect()\n        timer?.invalidate()\n        timer = nil\n    }\n\n    // MARK: - Socket\n\n    func socket(_ sock: GCDAsyncSocket!, didConnectToHost host: String!, port: UInt16) {\n        updateStatus(true)\n        sock.delegate = nil\n        sock.disconnect()\n    }\n\n    func socketDidDisconnect(_ sock: GCDAsyncSocket!, withError err: Error!) {\n        updateStatus(false)\n        openAppIfNeeded()\n    }\n\n    func updateStatus(_ current: Bool) {\n        if status != current {\n            status = current\n            DispatchQueue.main.async(execute: { \n                self.reload()\n            })\n        }\n    }\n    \n    func openAppIfNeeded() {\n        if !statusExpected {\n            return\n        }\n        if thresholdRetry > 3 {\n            thresholdRetry = 0\n            statusExpected = false\n            let url = URL(string: \"mume://on\")\n            self.extensionContext?.open(url!, completionHandler:nil)\n        }\n        thresholdRetry += 1\n    }\n    \n    func switchVPN(_ on: Bool) {\n        if !on {\n            wormhole.passMessageObject(NSString(), identifier: \"stopTunnel\")\n        } else {\n            // try on-demand first\n            let url = URL(string: \"https://on-demand.connect.mume.vpn/start/\")\n            let task = URLSession.shared.dataTask(with: url!, completionHandler: {data, reponse, error in\n                if (error != nil) {\n                    print(error.debugDescription)\n                }\n            }) \n            task.resume()\n        }\n        statusExpected = on\n    }\n    \n    func widgetMarginInsets(forProposedMarginInsets defaultMarginInsets: UIEdgeInsets) -> UIEdgeInsets {\n        var inset = defaultMarginInsets\n        inset.bottom = inset.top\n        return inset\n    }\n\n    func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) {\n        // Perform any setup necessary in order to update the view.\n\n        // If an error is encountered, use NCUpdateResult.Failed\n        // If there's no update required, use NCUpdateResult.NoData\n        // If there's an update, use NCUpdateResult.NewData\n        \n        completionHandler(NCUpdateResult.newData)\n    }\n    \n    func updateLayout() {\n        constrain(tableView, view, replace: constrainGroup) { tableView, superView in\n            tableView.leading == superView.leading\n            tableView.top == superView.top\n            tableView.trailing == superView.trailing\n            tableView.bottom == superView.bottom\n            tableView.height == CGFloat(60 * rowCount)\n        }\n    }\n    \n    lazy var tableView: CurrentGroupCell = {\n        let v = CurrentGroupCell(frame: CGRect.zero)\n        return v\n    }()\n    \n    func reload() {\n        let name = Potatso.sharedUserDefaults().object(forKey: kDefaultGroupName) as? String\n        tableView.config(name ?? \"Default\".localized(), status: status, switchVPN: switchVPN)\n    }\n    \n}\n"
  },
  {
    "path": "TodayWidget/TodayWidget.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.developer.networking.networkextension</key>\n\t<array>\n\t\t<string>packet-tunnel-provider</string>\n\t\t<string>app-proxy-provider</string>\n\t\t<string>content-filter-provider</string>\n\t</array>\n\t<key>com.apple.developer.networking.vpn.api</key>\n\t<array>\n\t\t<string>allow-vpn</string>\n\t</array>\n\t<key>com.apple.security.application-groups</key>\n\t<array>\n\t\t<string>group.info.liruqi.potatso</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "TodayWidget/zh-Hans.lproj/InfoPlist.strings",
    "content": "\"CFBundleDisplayName\" = \"暮梅\";\n"
  },
  {
    "path": "TodayWidget/zh-Hans.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  Potatso\n\n  Created by LEI on 4/19/16.\n  Copyright © 2016 TouchingApp. All rights reserved.\n*/\n\n\"widget.none\" = \"无\";\n\"widget.connect\" = \"连接\";\n\"widget.disconnect\" = \"关闭\";\n"
  },
  {
    "path": "fastlane/Fastfile",
    "content": "# Customise this file, documentation can be found here:\n# https://github.com/fastlane/fastlane/tree/master/fastlane/docs\n# All available actions: https://docs.fastlane.tools/actions\n# can also be listed using the `fastlane actions` command\n\n# Change the syntax highlighting to Ruby\n# All lines starting with a # are ignored when running `fastlane`\n\n# If you want to automatically update fastlane if a new version is available:\n# update_fastlane\n\n# This is the minimum version number required.\n# Update this, if you use features of a newer version\nfastlane_version \"2.51.0\"\n\ndefault_platform :ios\n\nplatform :ios do\n  before_all do\n    # ENV[\"SLACK_URL\"] = \"https://hooks.slack.com/services/...\"\n    # cocoapods\n    carthage\n  end\n\n  desc \"Runs all the tests\"\n  lane :test do\n    scan\n  end\n\n  desc \"Submit a new Beta Build to Apple TestFlight\"\n  desc \"This will also make sure the profile is up to date\"\n  lane :beta do\n    # match(type: \"appstore\") # more information: https://codesigning.guide\n    gym(scheme: \"Potatso\") # Build your app - more options available\n    pilot\n\n    # sh \"your_script.sh\"\n    # You can also use other beta testing services here (run `fastlane actions`)\n  end\n\n  desc \"Deploy a new version to the App Store\"\n  lane :release do\n    # match(type: \"appstore\")\n    # snapshot\n    gym(scheme: \"Potatso\") # Build your app - more options available\n    deliver(force: true)\n    # frameit\n  end\n\n  # You can define as many lanes as you want\n\n  after_all do |lane|\n    # This block is called, only if the executed lane was successful\n\n    # slack(\n    #   message: \"Successfully deployed new App Update.\"\n    # )\n  end\n\n  error do |lane, exception|\n    # slack(\n    #   message: exception.message,\n    #   success: false\n    # )\n  end\nend\n\n\n# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md\n# All available actions: https://docs.fastlane.tools/actions\n\n# fastlane reports which actions are used. No personal data is recorded. \n# Learn more at https://github.com/fastlane/fastlane#metrics\n"
  },
  {
    "path": "genstrings.swift",
    "content": "#!/usr/bin/swift\n\nimport Foundation\n\nclass GenStrings {\n    \n    let fileManager = NSFileManager.defaultManager()\n    let acceptedFileExtensions = [\"swift\"]\n    let excludedFolderNames = [\"Carthage\"]\n    let excludedFileNames = [\"genstrings.swift\"]\n    var regularExpresions = [String:NSRegularExpression]()\n\n    let localizedRegex = \"(?<=\\\")([^\\\"]*)(?=\\\".(localized|localizedFormat))|(?<=(Localized|NSLocalizedString)\\\\(\\\")([^\\\"]*?)(?=\\\")\"\n\n    enum GenstringsError:ErrorType {\n        case Error\n    }\n    \n    // Performs the genstrings functionality\n    func perform() {\n        let rootPath = NSURL(fileURLWithPath:fileManager.currentDirectoryPath)\n        let allFiles = fetchFilesInFolder(rootPath)\n        // We use a set to avoid duplicates\n        var localizableStrings = Set<String>()\n        for filePath in allFiles {\n            let stringsInFile = localizableStringsInFile(filePath)\n            localizableStrings = localizableStrings.union(stringsInFile)\n        }\n        // We sort the strings\n        let sortedStrings = localizableStrings.sort({ $0 < $1 })\n        var processedStrings = String()\n        for string in sortedStrings {\n            processedStrings.appendContentsOf(\"\\\"\\(string)\\\" = \\\"\\(string)\\\"; \\n\")\n        }\n        print(processedStrings)\n    }\n    \n    // Applies regex to a file at filePath. \n    func localizableStringsInFile(filePath: NSURL) -> Set<String> {\n        if let fileContentsData = NSData(contentsOfURL: filePath), let fileContentsString = NSString(data: fileContentsData, encoding: NSUTF8StringEncoding) {\n            do {\n                let localizedStringsArray = try regexMatches(localizedRegex, string: fileContentsString as String).map({fileContentsString.substringWithRange($0.range)})\n                return Set(localizedStringsArray)\n            } catch {}\n        }\n        return Set<String>()\n    }\n    \n    //MARK: Regex\n    \n    func regexWithPattern(pattern: String) throws -> NSRegularExpression {\n        var safeRegex = regularExpresions\n        if let regex = safeRegex[pattern] {\n            return regex\n        }\n        else {\n            do {\n                let currentPattern: NSRegularExpression\n                currentPattern =  try NSRegularExpression(pattern: pattern, options:NSRegularExpressionOptions.CaseInsensitive)\n                safeRegex.updateValue(currentPattern, forKey: pattern)\n                self.regularExpresions = safeRegex\n                return currentPattern\n            }\n            catch {\n                throw GenstringsError.Error\n            }\n        }\n    }\n    \n    func regexMatches(pattern: String, string: String) throws -> [NSTextCheckingResult] {\n        do {\n            let internalString = string\n            let currentPattern =  try regexWithPattern(pattern)\n            // NSRegularExpression accepts Swift strings but works with NSString under the hood. Safer to bridge to NSString for taking range.\n            let nsString = internalString as NSString\n            let stringRange = NSMakeRange(0, nsString.length)\n            let matches = currentPattern.matchesInString(internalString, options: [], range: stringRange)\n            return matches\n        }\n        catch {\n            throw GenstringsError.Error\n        }\n    }\n    \n    //MARK: File manager\n    \n    func fetchFilesInFolder(rootPath: NSURL) -> [NSURL] {\n        var files = [NSURL]()\n        do {\n            let directoryContents = try fileManager.contentsOfDirectoryAtURL(rootPath, includingPropertiesForKeys: [], options: .SkipsHiddenFiles)\n            for urlPath in directoryContents {\n                if let stringPath = urlPath.path, lastPathComponent = urlPath.lastPathComponent, pathExtension = urlPath.pathExtension {\n                    var isDir : ObjCBool = false\n                    if fileManager.fileExistsAtPath(stringPath, isDirectory:&isDir) {\n                        if isDir {\n                            if !excludedFolderNames.contains(lastPathComponent) {\n                                let dirFiles = fetchFilesInFolder(urlPath)\n                                files.appendContentsOf(dirFiles)\n                            }\n                        } else {\n                            if acceptedFileExtensions.contains(pathExtension) && !excludedFileNames.contains(lastPathComponent)  {\n                                files.append(urlPath)\n                            }\n                        }\n                    }\n                }\n            }\n        } catch {}\n        return files\n    }\n}\n\nlet genStrings = GenStrings()\ngenStrings.perform()\n\n"
  }
]